summaryrefslogtreecommitdiff
path: root/dist/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'dist/index.js')
-rw-r--r--dist/index.js8
1 files changed, 4 insertions, 4 deletions
diff --git a/dist/index.js b/dist/index.js
index 9b7a3bb..e36ad31 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -40163,7 +40163,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
var files = [
// "gun_violence",
-"mass_shootings_lite", "gun_violence_by_month"];
+"mass_shootings_from_columbine", "gun_violence_by_month"];
var parse = __webpack_require__(137);
var dataPromises = files.map(function (name) {
@@ -40580,7 +40580,7 @@ data.load().then(function (lists) {
play_fn: _midi.play_sequence
};
});
- datasets["Mass Shootings"] = lists.mass_shootings_lite;
+ datasets["Mass Shootings"] = lists.mass_shootings_from_columbine;
datasets["Mass Shootings"].name = "Mass Shootings";
datasets["Mass Shootings"].play_fn = play_mass_shootings;
var lines = datasets["Mass Shootings"].lines.reverse();
@@ -40788,7 +40788,7 @@ function ready() {
min: -64,
max: 64,
step: 1,
- value: 17
+ value: 19
});
(0, _ui.update_value_on_change)(_ui.nx.multiply, '#multiply', true);
@@ -46281,4 +46281,4 @@ module.exports = __webpack_amd_options__;
/***/ })
/******/ ]);
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgMGRhOTg4YjI5ZTQ0ZTdlYjJlYTMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL193a3MuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL34vYnVmZmVyL2luZGV4LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oaWRlLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vfi9wcm9jZXNzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fZHVwbGV4LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ZhaWxzLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9+L2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29mLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2N0eC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLXV0aWwtaXMvbGliL3V0aWwuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9+L3RvbmUvYnVpbGQvVG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1waWUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2xpYi91dGlsLmpzIiwid2VicGFjazovLy8uL34vYnVmZmVyLXNoaW1zL2luZGV4LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZWZpbmVkLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RvbS1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQta2V5LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pbnRlZ2VyLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL193a3MtZXh0LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovLy8uL34vZXZlbnRzL2V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9+L25vZGUtbGlicy1icm93c2VyL34vc3RyaW5nX2RlY29kZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9wcm9jZXNzLW5leHRpY2stYXJncy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV93cml0YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWRhYmxlLXN0cmVhbS9yZWFkYWJsZS1icm93c2VyLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9saWIva2FsaW1iYS5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbGliL3NjYWxlcy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbGliL3VpLmpzIiwid2VicGFjazovLy8uL34vYmFiZWwtcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vfi9uZXh1c3VpL2Rpc3QvTmV4dXNVSS5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvYXNzaWduLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2h0bWwuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItY2FsbC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWRldGVjdC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BuLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Rhc2suanMiLCJ3ZWJwYWNrOi8vLy4vfi9pc2FycmF5L2luZGV4LmpzIiwid2VicGFjazovLy8uL34vcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIiwid2VicGFjazovLy8uL34vcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0tYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9+L3RpbWVycy1icm93c2VyaWZ5L21haW4uanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2RhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2xpYi9rZXlzLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9saWIvbWlkaS5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvaGVscGVycy90b0FycmF5LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbGliL2ludG9uYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2xpYi9zdGFydEF1ZGlvQ29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9hcnJheS9mcm9tLmpzIiwid2VicGFjazovLy8uL34vYmFiZWwtcnVudGltZS9jb3JlLWpzL2dldC1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9pcy1pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9tYXRoL2xvZzIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9iYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vfi9iYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sL2l0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL34vYmFiZWwtcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly8vLi9+L2Jhc2U2NC1qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9mbi9hcnJheS9mcm9tLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L2ZuL2dldC1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9mbi9pcy1pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9mbi9tYXRoL2xvZzIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2Fzc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9mbi9wcm9taXNlLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9mbi9zeW1ib2wvaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19lbnVtLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZm9yLW9mLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ludm9rZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLXN0ZXAuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fa2V5b2YuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbWV0YS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19taWNyb3Rhc2suanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHBzLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BuLWV4dC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ3BvLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1zYXAuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC1zcGVjaWVzLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWluZGV4LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmlzLWl0ZXJhYmxlLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5LmZyb20uanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYubWF0aC5sb2cyLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovLy8uL34vY3N2LXBhcnNlL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L2ZpbGUtc2F2ZXIvRmlsZVNhdmVyLmpzIiwid2VicGFjazovLy8uL34vaWVlZTc1NC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L21pZGktd3JpdGVyLWpzL2J1aWxkL2luZGV4LmpzIiwid2VicGFjazovLy8uL34vbm90ZS1wYXJzZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFkYWJsZS1zdHJlYW0vZHVwbGV4LWJyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvQnVmZmVyTGlzdC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWRhYmxlLXN0cmVhbS9wYXNzdGhyb3VnaC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWRhYmxlLXN0cmVhbS90cmFuc2Zvcm0uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFkYWJsZS1zdHJlYW0vd3JpdGFibGUtYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9+L3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9zdHJlYW0tYnJvd3NlcmlmeS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3RvbmFsLW1pZGkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi91dGlsLWRlcHJlY2F0ZS9icm93c2VyLmpzIiwid2VicGFjazovLy8uL34vdXRpbC9+L2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi91dGlsL3N1cHBvcnQvaXNCdWZmZXJCcm93c2VyLmpzIiwid2VicGFjazovLy8uL34vdXRpbC91dGlsLmpzIiwid2VicGFjazovLy8uL34vd2VibWlkaS93ZWJtaWRpLm1pbi5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vYW1kLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vYW1kLW9wdGlvbnMuanMiLCJ3ZWJwYWNrOi8vL3V0aWwgKGlnbm9yZWQpIl0sIm5hbWVzIjpbImNob2ljZSIsIm1vZCIsIm5vcm0iLCJyZXF1ZXN0QXVkaW9Db250ZXh0IiwiZGF0YVVSSXRvQmxvYiIsImZ0b20iLCJtdG9mIiwidGFwIiwiZ2V0X2RpZmZfYm91bmRzIiwiZ2V0X2JvdW5kcyIsInRyYW5zcG9zZSIsImlzSXBob25lIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwibWF0Y2giLCJpc0lwYWQiLCJpc0FuZHJvaWQiLCJpc01vYmlsZSIsImlzRGVza3RvcCIsImRvY3VtZW50IiwiYm9keSIsImNsYXNzTGlzdCIsImFkZCIsImJyb3dzZXIiLCJhIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwibGVuZ3RoIiwibiIsIm0iLCJtaW4iLCJtYXgiLCJmbiIsImNvbnRhaW5lciIsImNyZWF0ZUVsZW1lbnQiLCJidXR0b24iLCJpbm5lckhUTUwiLCJzdHlsZSIsInBvc2l0aW9uIiwid2lkdGgiLCJoZWlnaHQiLCJ6SW5kZXgiLCJ0b3AiLCJsZWZ0IiwiYmFja2dyb3VuZENvbG9yIiwicGFkZGluZyIsImNvbG9yIiwiZm9udEZhbWlseSIsImJvcmRlclJhZGl1cyIsInRyYW5zZm9ybSIsInRleHRBbGlnbiIsImxpbmVIZWlnaHQiLCJhcHBlbmRDaGlsZCIsIlN0YXJ0QXVkaW9Db250ZXh0Iiwic2V0Q29udGV4dCIsIlRvbmUiLCJjb250ZXh0Iiwib24iLCJvblN0YXJ0ZWQiLCJyZW1vdmUiLCJkYXRhVVJJIiwiYnl0ZVN0cmluZyIsImF0b2IiLCJzcGxpdCIsIm1pbWVTdHJpbmciLCJhYiIsIkFycmF5QnVmZmVyIiwiaWEiLCJVaW50OEFycmF5IiwiaSIsImNoYXJDb2RlQXQiLCJibG9iIiwiQmxvYiIsInR5cGUiLCJmIiwicG93IiwiZSIsInByZXNzIiwicm93cyIsImRpZmZzIiwibWFwIiwicm93X21pbiIsImFwcGx5Iiwicm93Iiwicm93X21heCIsImRhdGFzZXQiLCJsaW5lcyIsInBhcnNlRmxvYXQiLCJyZWR1Y2UiLCJiIiwieiIsImJiIiwiSW5maW5pdHkiLCJpX2xlbiIsImpfbGVuIiwiVCIsIkFycmF5IiwiaiIsInBsYXllcl9jb3VudCIsInNhbXBsZV9pbmRleCIsImNvbXByZXNzb3IiLCJDb21wcmVzc29yIiwidG9NYXN0ZXIiLCJzYW1wbGVzIiwicm9vdCIsImZvckVhY2giLCJzYW1wbGUiLCJwbGF5ZXJzIiwiaW5kZXgiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJwbGF5ZXIiLCJQbGF5ZXIiLCJ1cmwiLCJyZXRyaWdnZXIiLCJwbGF5YmFja1JhdGUiLCJjb25uZWN0IiwicHVzaCIsInBsYXkiLCJmcmVxIiwidm9sdW1lIiwiYmVzdCIsInZhbHVlIiwic2V0VGltZW91dCIsInN0YXJ0IiwibWVhbnRvbmUiLCJzaGFyZXMiLCJzaGFyZXNfc3VtIiwibWF2aWxhIiwiY2FybG9zX2FscGhhIiwibGFtb250ZSIsImNvbHVuZGkiLCJsaXVfbWFqb3IiLCJsaXVfcGVudGF0b25pYyIsImxpdV9taW5vciIsImxpdV9tZWxvZGljX21pbm9yIiwic2NhbGVzIiwiaW50ZXJ2YWxzIiwibmFtZSIsInRldCIsInNjbCIsIm9wdCIsIkludG9uYXRpb24iLCJzY2FsZSIsImhhbmRsZUNoYW5nZSIsImJ1aWxkIiwiaGVhZGluZyIsImFkZEV2ZW50TGlzdGVuZXIiLCJwaWNrIiwic2NhbGVfbGlzdCIsImJ1aWxkX29wdGlvbnMiLCJlbCIsIm9wdGlvbiIsInRhcmdldCIsImN1cnJlbnQiLCJvbkNoYW5nZSIsIm5hbWVzIiwidXBkYXRlX3ZhbHVlX29uX2NoYW5nZSIsInVwZGF0ZV9yYWRpb192YWx1ZV9vbl9jaGFuZ2UiLCJueCIsImlkIiwiaXNfaW50IiwibGFiZWwiLCJxdWVyeVNlbGVjdG9yIiwidXBkYXRlIiwicGFyc2VJbnQiLCJ2IiwidG9GaXhlZCIsInZhbHVlcyIsIm9sZF92IiwiYWN0aXZlIiwibGlzdHMiLCJsaXN0Iiwia2V5IiwiZmlsZXMiLCJwYXJzZSIsInJlcXVpcmUiLCJkYXRhUHJvbWlzZXMiLCJmZXRjaCIsInRoZW4iLCJ0ZXh0IiwicmVzb2x2ZSIsInJlamVjdCIsIl8iLCJoIiwic2hpZnQiLCJmaWx0ZXIiLCJzIiwiYWxsUHJvbWlzZXMiLCJhbGwiLCJkYXRhIiwibG9hZCIsImtleXMiLCJrZXlfbnVtYmVycyIsImxldHRlcnMiLCJudW1iZXJzIiwiY2FsbGJhY2siLCJ0b1VwcGVyQ2FzZSIsImsiLCJrZXlkb3duIiwiYWx0S2V5IiwiY3RybEtleSIsIm1ldGFLZXkiLCJzdG9wUHJvcGFnYXRpb24iLCJhY3RpdmVFbGVtZW50IiwiSFRNTElucHV0RWxlbWVudCIsImtleUNvZGUiLCJzaGlmdEtleSIsImxpc3RlbiIsIm1pZGlfaW5pdCIsInBsYXlfbm90ZSIsInBsYXlfbWlkaV9ub3RlIiwicGxheV9zZXF1ZW5jZSIsInBsYXlfaW50ZXJ2YWxfc2VxdWVuY2UiLCJleHBvcnRfcGF0dGVybl9hc19taWRpIiwibWlkaURldmljZSIsInNlbmRQaXRjaEJlbmQiLCJNaWRpV3JpdGVyIiwibm90ZV92YWx1ZXMiLCJXZWJNaWRpIiwiZW5hYmxlIiwibWlkaV9yZWFkeSIsImVyciIsImNvbnNvbGUiLCJlcnJvciIsIm91dHB1dHMiLCJsb2ciLCJpbnB1dHMiLCJmaWx0ZXJlZCIsIm91dHB1dCIsImR1cmF0aW9uIiwiY2hhbm5lbCIsImV4cG9ydGluZyIsInJlc3QiLCJkZWZlciIsInJvdW5kIiwib2Zmc2V0Iiwib2N0YXZlIiwibWlkaV9ub3RlIiwiY2VudHMiLCJub3RlIiwiRnJlcXVlbmN5IiwidG9Ob3RlIiwiZGVmZXJfdGltZSIsIlRyYW5zcG9ydCIsImJwbSIsImthbGltYmEiLCJwbGF5Tm90ZSIsImJvdW5kcyIsImRpZmYiLCJub3RlX3RpbWUiLCJjb3VudCIsInkiLCJ4IiwibXVsdGlwbHkiLCJyb3dfZjAiLCJyb3dfcm9vdCIsIm5vdGVzIiwiaW50ZXJ2YWwiLCJkYXRhc2V0TmFtZSIsInRlbXBvIiwidGltaW5nSW5kZXgiLCJwbGF5X2ZuIiwidGltaW5ncyIsIndhaXQiLCJtaWRpX3RyYWNrIiwiVHJhY2siLCJzZXRUZW1wbyIsImxlbiIsImFkZEV2ZW50IiwiTm90ZUV2ZW50IiwicGl0Y2giLCJ3cml0ZXIiLCJXcml0ZXIiLCJkYXRhVXJpIiwiREVGQVVMVF9CUE0iLCJyZWNvcmRlciIsInJlY29yZGluZyIsIm1hc3NfZmllbGRzIiwibWFzc19pIiwiZGF0YXNldHMiLCJndW5fdmlvbGVuY2VfYnlfbW9udGgiLCJtYXNzX3Nob290aW5nc19saXRlIiwicGxheV9tYXNzX3Nob290aW5ncyIsInJldmVyc2UiLCJkYXRlIiwibWluX3kiLCJkYXRlcyIsImQiLCJ0b3RhbF92aWN0aW1zIiwicmVhZHkiLCJtYXNzX3Jlc3QiLCJ0b3RhbCIsIm1pZGlfbm90ZXMiLCJjYXNlcyIsImNhc2UiLCJmYXRhbGl0aWVzIiwiaW5qdXJlZCIsImpvaW4iLCJwbGF5X25leHQiLCJ0aW1pbmciLCJuZXdfaSIsInBpY2tfZGF0YXNldCIsImRpYWxfc2l6ZSIsIk5leHVzIiwiRGlhbCIsInNpemUiLCJzdGVwIiwiUmFkaW9CdXR0b24iLCJudW1iZXJPZkJ1dHRvbnMiLCJleHBvcnRfbWlkaV9idXR0b24iLCJyZWNvcmRfbWlkaV9idXR0b24iLCJzYXZlQXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiZ2VuZXJhdGUiLCJwcm90b3R5cGUiLCJnZW5lcmF0ZV9zY2wiLCJnZW5lcmF0ZV90ZXQiLCJnZW5lcmF0ZV9pbnRlcnZhbHMiLCJpbnRlcnZhbF9saXN0IiwicGFyc2VJbnRlcnZhbCIsImNhbGwiLCJwb3AiLCJwYXJzZUludGVydmFsU3RyaW5nIiwiYmluZCIsInJhdGlvIiwicGFyc2Vfc2NsIiwiZGVzY3JpcHRpb24iLCJjb21tZW50cyIsInRyaW0iLCJsaW5lIiwiaW5kZXhPZiIsInJlcGxhY2UiLCJyYW5nZSIsInNldF9yb290IiwicXVhbnRpemVfZnJlcXVlbmN5Iiwic2NhbGVfZiIsInF1YW50aXplX2luZGV4IiwicGFyc2VfaW50ZXJ2YWwiLCJwcCIsIm51bSIsImRlbiIsImlzTmFOIiwicGFyc2VfaW50ZXJ2YWxfc3RyaW5nIiwiZmFjdG9yeSIsImRlZmluZSIsIl90YXBMaXN0ZW5lcnMiLCJfb25TdGFydGVkIiwiY3R4IiwiZWxlbWVudCIsImlzQXJyYXkiLCJOb2RlTGlzdCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJqcXVlcnkiLCJ0b0FycmF5IiwiRWxlbWVudCIsIlRhcExpc3RlbmVyIiwib25UYXAiLCJjYiIsImlzU3RhcnRlZCIsInN0YXRlIiwiX2RyYWdnZWQiLCJfZWxlbWVudCIsIl9iaW5kZWRNb3ZlIiwiX21vdmVkIiwiX2JpbmRlZEVuZCIsIl9lbmRlZCIsImRpc3Bvc2UiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib3NjIiwiY3JlYXRlT3NjaWxsYXRvciIsInNpbGVudCIsImNyZWF0ZUdhaW4iLCJnYWluIiwiZGVzdGluYXRpb24iLCJub3ciLCJjdXJyZW50VGltZSIsInN0b3AiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbURBQTJDLGNBQWM7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7OztBQ2hFQSw2QkFBNkI7QUFDN0IscUNBQXFDLGdDOzs7Ozs7QUNEckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUI7Ozs7OztBQ1ZBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxnQzs7Ozs7OztBQ0h2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixtREFBbUQ7QUFDeEU7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixVQUFVO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsdUNBQXVDLFNBQVM7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLGlCQUFpQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsRUFBRTtBQUNsRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsZUFBZTtBQUN2QztBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBLHFCQUFxQixlQUFlO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsbUJBQW1CLGNBQWM7QUFDakM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVEQUF1RCxPQUFPO0FBQzlEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQsT0FBTztBQUM5RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNB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QTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7Ozs7Ozs7O0FDbkx0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0MsT0FBTztBQUN2QztBQUNBO0FBQ0EsQzs7Ozs7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRTs7Ozs7O0FDTkEsb0I7Ozs7OztBQ0FBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRTs7Ozs7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENB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QUFlLFNBQVM7QUFDeEIsZUFBZSxVQUFVO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsYUFBYTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFF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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixlQUFlLEtBQUs7QUFDcEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQixlQUFlLFFBQVE7QUFDdkIsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Es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QUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixjQUFjLEtBQUs7QUFDbkI7QUFDQSxjQUFjLEtBQUs7QUFDbkI7QUFDQSxjQUFjLFlBQVk7QUFDMUI7QUFDQSxjQUFjLEtBQUs7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFD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O0FBQ25CO0FBQ0EsY0FBYyxZQUFZO0FBQzFCO0FBQ0EsY0FBYyxLQUFLO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0Msa0JBQWtCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsV0FBVztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGNBQWMsT0FBTztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixVQUFVO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0EsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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Q0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGNBQWM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0EsY0FBYyxXQUFXO0FBQ3pCLGNBQWMsT0FBTztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxnQkFBZ0IsWUFBWTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxRQUFRO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLFFBQVE7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsVUFBVTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGNBQWMsUUFBUTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxnQkFBZ0IsY0FBYztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxNQUFNO0FBQ25CLGFBQWEsU0FBUztBQUN0QixlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUI7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQSxtQkFBbUI7QUFDbkIsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxlQUFlLFlBQVk7QUFDM0IsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsRUFBRTtBQUNqQixnQkFBZ0IsRUFBRTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLGtCQUFrQjtBQUM5QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsY0FBYztBQUM3QixnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IscUJBQXFCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IscUNBQXFDO0FBQzNELFdBQVcsd0NBQXdDO0FBQ25EO0FBQ0EsTUFBTTtBQUNOO0FBQ0Esa0JBQWtCO0FBQ2xCLGNBQWMsT0FBTztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGlEQUFpRDtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyx5QkFBeUI7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyx5Q0FBeUM7QUFDaEQsZUFBZSxNQUFNO0FBQ3JCLGdCQUFnQixNQUFNO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixvQkFBb0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHlCQUF5QjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSx1QkFBdUI7QUFDdEMsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7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QUFDTjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsZ0JBQWdCLGNBQWM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSxLQUFLO0FBQ3BCLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsY0FBYyxtQkFBbUI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEI7QUFDQSxnQkFBZ0IsWUFBWTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixZQUFZO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGNBQWMsWUFBWTtBQUMxQixjQUFjLFdBQVc7QUFDekIsZUFBZSxXQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxLQUFLO0FBQ2xCLGVBQWUsZ0JBQWdCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxLQUFLO0FBQ2xCLGVBQWUsZ0JBQWdCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxLQUFLO0FBQ2xCO0FBQ0EsZUFBZSxnQkFBZ0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsZ0JBQWdCLGdCQUFnQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGNBQWMsaUJBQWlCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLEtBQUs7QUFDbEIsZUFBZSxnQkFBZ0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLEtBQUs7QUFDbEIsZUFBZSxnQkFBZ0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLEtBQUs7QUFDbEI7QUFDQSxlQUFlLGdCQUFnQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsZ0JBQWdCLGdCQUFnQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsY0FBYyxpQkFBaUI7QUFDL0I7QUFDQSxjQUFjLFNBQVM7QUFDdkI7QUFDQSxjQUFjLFNBQVM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsYUFBYTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGNBQWMsWUFBWTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsZ0JBQWdCLFlBQVk7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckIsZ0JBQWdCLE9BQU87QUFDdkIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixTQUFTO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCLGlFQUFpRTtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGdCQUFnQixlQUFlO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixrQkFBa0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLGFBQWEsaUJBQWlCO0FBQzlCLGFBQWEsYUFBYTtBQUMxQixhQUFhLFlBQVk7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGdCQUFnQixZQUFZO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGNBQWMsMEJBQTBCO0FBQ3hDO0FBQ0EsY0FBYyxVQUFVO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekIsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixlQUFlO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsZ0JBQWdCLGdCQUFnQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixjQUFjLG1CQUFtQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGNBQWMsWUFBWTtBQUMxQixjQUFjLGFBQWE7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBLGNBQWMsbUJBQW1CO0FBQ2pDLGNBQWMsVUFBVTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHFDQUFxQztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IscUNBQXFDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qiw4QkFBOEI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGNBQWM7QUFDOUI7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLG1DQUFtQztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixtQ0FBbUM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsK0JBQStCO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0EsY0FBYyxtQkFBbUI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLGdDQUFnQztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsa0NBQWtDO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0EsZ0JBQWdCLGNBQWM7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLG1DQUFtQztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQix5Q0FBeUM7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsVUFBVTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckIsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixZQUFZO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsZ0JBQWdCLFlBQVk7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMkJBQTJCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDJCQUEyQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixjQUFjLFlBQVk7QUFDMUIsY0FBYyxhQUFhO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsY0FBYyxVQUFVO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QiwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxnQkFBZ0IsZ0JBQWdCO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsZUFBZSx3QkFBd0I7QUFDdkMsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQixnQkFBZ0IsV0FBVztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEIsZUFBZSxLQUFLO0FBQ3BCO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEIsZUFBZSxNQUFNO0FBQ3JCLGdCQUFnQixrQkFBa0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsTUFBTTtBQUNyQixnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGdCQUFnQixhQUFhO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixjQUFjLFNBQVM7QUFDdkIsY0FBYyxFQUFFO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLEtBQUs7QUFDbkIsZ0JBQWdCLFdBQVc7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEMsZ0JBQWdCLFdBQVc7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQjtBQUNoQyxnQkFBZ0IsV0FBVztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEMsZ0JBQWdCLFdBQVc7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxnQkFBZ0IsV0FBVztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxn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O0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxnQkFBZ0IsVUFBVTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7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QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGVBQWUscUJBQXFCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsZUFBZSxrQkFBa0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QkFBZ0I7QUFDaEI7QUFDQSxjQUFjLFVBQVU7QUFDeEIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsS0FBSztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsS0FBSztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsS0FBSztBQUNuQixjQUFjLFlBQVk7QUFDMUIsZ0JBQWdCLGVBQWU7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxLQUFLO0FBQ25CLGdCQUFnQixlQUFlO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGVBQWU7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGNBQWMsT0FBTztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Q0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCLGVBQWUsS0FBSztBQUNwQjtBQUNBLGVBQWUsTUFBTTtBQUNyQjtBQUNBO0FBQ0EsZ0JBQWdCLFlBQVk7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEIsZ0JBQWdCLFlBQVk7QUFDNUI7QUFDQTtBQUNBO0FB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Q0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGVBQWUsY0FBYztBQUM3QjtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsU0FBUztBQUN2QixjQUFjLGFBQWE7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLCtCQUErQjtBQUM5QztBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxLQUFLO0FBQ2xCLGNBQWMsYUFBYTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixjQUFjLFVBQVU7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGNBQWM7QUFDN0I7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsZUFBZSxlQUFlO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGNBQWMsZUFBZTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Ozs7Ozs4Q0M1SUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQzNHQTtBQUNBO0FBQ0E7QUFDQSxFOzs7Ozs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixrQkFBa0IsRUFBRTs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLFVBQVU7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFOzs7Ozs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFOzs7Ozs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFOzs7Ozs7QUNOQTtBQUNBO0FBQ0E7QUFDQSxhOzs7Ozs7QUNIQSx5Qzs7Ozs7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFOzs7Ozs7QUNKQTtBQUNBO0FBQ0EsbURBQW1EO0FBQ25EO0FBQ0EsdUNBQXVDO0FBQ3ZDLEU7Ozs7OztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFOzs7Ozs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRDtBQUMzRCxFOzs7Ozs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRTs7Ozs7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELHNCQUFzQjtBQUNoRixnRkFBZ0Ysc0JBQXNCO0FBQ3RHLEU7Ozs7OztBQ1JBLG1DOzs7Ozs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEU7Ozs7OztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRztBQUNILG9CQUFvQixTQUFTO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7Ozs7O0FDN1NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRLE9BQU87QUFDZjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7OytDQzVOQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOzs7Ozs7Ozs7QUMxQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUM7O0FBRWpDOztBQUVBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsb0RBQW9EO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQzs7Ozs7OztBQy9oQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0EsRUFBRTs7QUFFRjs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsSUFBSTs7QUFFSjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsb0JBQW9CLG1CQUFtQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsT0FBTztBQUNwQixhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsT0FBTztBQUNwQixhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsT0FBTztBQUNwQjtB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCLE9BQU87QUFDOUIsd0JBQXdCLE9BQU87QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBLEVBQUU7O0FBRUY7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQixRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJO0FBQ0oscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBLGtDQUFrQywyQ0FBMkMseUJBQXlCLHVCQUF1QiwwQkFBMEIsc0NBQXNDLEVBQUUsd0NBQXdDLEVBQUUseURBQXlELHFFQUFxRSw2REFBNkQsb0JBQW9CLEdBQUcsRUFBRTs7QUFFN2IseURBQXlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFL0o7O0FBRUE7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixhQUFhLE9BQU87QUFDcEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLDJCQUEyQixhQUFhO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQixPQUFPO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBLGlCQUFpQixPQUFPO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQSxFQUFFOztBQUVGOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBLHVDQUF1QyxxREFBcUQ7O0FBRTVGLGtDQUFrQywyQ0FBMkMseUJBQXlCLHVCQUF1QiwwQkFBMEIsc0NBQXNDLEVBQUUsd0NBQXdDLEVBQUUseURBQXlELHFFQUFxRSw2REFBNkQsb0JBQW9CLEdBQUcsRUFBRTs7QUFFN2IseURBQXlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFL0o7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUNBQXVDOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0EsRUFBRTs7QUFFRixPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQSxrQ0FBa0MsMkNBQTJDLHlCQUF5Qix1QkFBdUIsMEJBQTBCLHNDQUFzQyxFQUFFLHdDQUF3QyxFQUFFLHlEQUF5RCxxRUFBcUUsNkRBQTZELG9CQUFvQixHQUFHLEVBQUU7O0FBRTdiLHlEQUF5RCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRS9KO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0EsRUFBRTs7QUFFRjs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQSwrQ0FBK0MsdUNBQXVDLGtCQUFrQjs7QUFFeEcsa0NBQWtDLDJDQUEyQyx5QkFBeUIsdUJBQXVCLDBCQUEwQixzQ0FBc0MsRUFBRSx3Q0FBd0MsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUU3YixzREFBc0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sd0NBQXdDLEVBQUUsRUFBRSw2Q0FBNkMsbUJBQW1CLEVBQUUsT0FBTyx1QkFBdUIsNEJBQTRCLGtCQUFrQixFQUFFLDhCQUE4QixFQUFFOztBQUV4YyxrREFBa0QsK0RBQStELHFHQUFxRyxFQUFFLHlFQUF5RSxlQUFlLHlFQUF5RSxFQUFFLEVBQUUsaURBQWlEOztBQUU5YSx5REFBeUQsMENBQTBDLDBEQUEwRCxFQUFFOztBQUUvSjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsbUNBQW1DOztBQUVuQzs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbURBQW1EO0FBQ25EO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNB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QTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNk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QUNOO0FBQ0E7QUFDQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsT0FBTztBQUMxQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7QUFFVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7O0FBRVY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBLEVBQUU7O0FBRUY7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUEsdUNBQXVDLHFEQUFxRDs7QUFFNUYsa0NBQWtDLDJDQUEyQyx5QkFBeUIsdUJBQXVCLDBCQUEwQixzQ0FBc0MsRUFBRSx3Q0FBd0MsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUU3Yix5REFBeUQsMENBQTBDLDBEQUEwRCxFQUFFOztBQUUvSjs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrRUFBa0U7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLHdCQUF3QixtQkFBbUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLHdCQUF3QixnQkFBZ0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsZ0JBQWdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCLFlBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsaUJBQWlCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQix1QkFBdUI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxN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ZUFBZSx5RUFBeUUsRUFBRSxFQUFFLGlEQUFpRDs7QUFFOWEseURBQXlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFL0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxVQUFVO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROztBQUVSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7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QUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7QUFFVjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUEsd0JBQXdCLHVCQUF1QjtBQUMvQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLHVCQUF1QjtBQUNyRCxVQUFVO0FBQ1Y7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7QUFF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QTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaURBQWlEO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFlBQVk7O0FBRVo7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBLEVBQUU7O0FBRUY7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUEsdUNBQXVDLHFEQUFxRDs7QUFFNUY7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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMENBQTBDOztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLElBQUk7QUFDSjtBQUNBOztBQUVBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLGlDQUFpQztBQUNwRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsZUFBZTtBQUNyRDtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2Qjs7QUFFN0IsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNDQUFzQzs7QUFFdEM7QUFDQTtB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0Esc0RBQXNEOztBQUV0RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RUFBNEU7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RDtBQUM3RDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0NBQXNDOztBQUV0QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJEO0FBQzNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLCtDQUErQzs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLFNBQVM7QUFDNUI7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNEVBQTRFOztBQUU1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIseUJBQXlCO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBLG1EQUFtRCxpRUFBaUU7QUFDcEg7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkMsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkMsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdDQUFnQyxPQUFPO0FBQ3ZDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdDQUFnQyxPQUFPO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLEM7Ozs7Ozs7O0FDdDZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxZQUFZO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGlCQUFpQjtBQUNqQiw4QkFBOEI7QUFDOUIsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCxlQUFlO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0Esb0RBQW9ELFdBQVc7QUFDL0Q7QUFDQSxLQUFLO0FBQ0wsb0VBQW9FLFdBQVc7QUFDL0U7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxTQUFTO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMENBQTBDLHNCQUFzQixFQUFFO0FBQ2xFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOzs7Ozs7OztBQ3pMRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7QUFJQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNB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QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNENBQTRDLEtBQUs7O0FBRWpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxtQ0FBbUMsT0FBTztBQUMxQztBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7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T0FBTyxxREFBcUQsaUJBQWlCLHlMQUF5TCxxREFBcUQsYUFBYSxzRUFBc0UscUNBQXFDLFFBQVEsdUZBQTZFLFVBQVU7QUFBQSxvTUFBaUcsTzs7Ozs7O0FDOUJ4eEQ7QUFDQTtBQUNBOzs7Ozs7O0FDRkE7QUFDQTs7Ozs7Ozs7QUNEQSxlIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA4MCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgMGRhOTg4YjI5ZTQ0ZTdlYjJlYTMiLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0ge3ZlcnNpb246ICcyLjQuMCd9O1xuaWYodHlwZW9mIF9fZSA9PSAnbnVtYmVyJylfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb3JlLmpzXG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBzdG9yZSAgICAgID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ3drcycpXG4gICwgdWlkICAgICAgICA9IHJlcXVpcmUoJy4vX3VpZCcpXG4gICwgU3ltYm9sICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlN5bWJvbFxuICAsIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obmFtZSl7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPVxuICAgIFVTRV9TWU1CT0wgJiYgU3ltYm9sW25hbWVdIHx8IChVU0VfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuXG4kZXhwb3J0cy5zdG9yZSA9IHN0b3JlO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLmpzXG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGYgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYodHlwZW9mIF9fZyA9PSAnbnVtYmVyJylfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBVc2UgT2JqZWN0IGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBEdWUgdG8gdmFyaW91cyBicm93c2VyIGJ1Z3MsIHNvbWV0aW1lcyB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uIHdpbGwgYmUgdXNlZCBldmVuXG4gKiB3aGVuIHRoZSBicm93c2VyIHN1cHBvcnRzIHR5cGVkIGFycmF5cy5cbiAqXG4gKiBOb3RlOlxuICpcbiAqICAgLSBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YCBpbnN0YW5jZXMsXG4gKiAgICAgU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzguXG4gKlxuICogICAtIENocm9tZSA5LTEwIGlzIG1pc3NpbmcgdGhlIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24uXG4gKlxuICogICAtIElFMTAgaGFzIGEgYnJva2VuIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhcnJheXMgb2ZcbiAqICAgICBpbmNvcnJlY3QgbGVuZ3RoIGluIHNvbWUgc2l0dWF0aW9ucy5cblxuICogV2UgZGV0ZWN0IHRoZXNlIGJ1Z2d5IGJyb3dzZXJzIGFuZCBzZXQgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYCB0byBgZmFsc2VgIHNvIHRoZXlcbiAqIGdldCB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uLCB3aGljaCBpcyBzbG93ZXIgYnV0IGJlaGF2ZXMgY29ycmVjdGx5LlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUICE9PSB1bmRlZmluZWRcbiAgPyBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVFxuICA6IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuLypcbiAqIEV4cG9ydCBrTWF4TGVuZ3RoIGFmdGVyIHR5cGVkIGFycmF5IHN1cHBvcnQgaXMgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0cy5rTWF4TGVuZ3RoID0ga01heExlbmd0aCgpXG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICBhcnIuX19wcm90b19fID0ge19fcHJvdG9fXzogVWludDhBcnJheS5wcm90b3R5cGUsIGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfX1cbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MiAmJiAvLyB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZFxuICAgICAgICB0eXBlb2YgYXJyLnN1YmFycmF5ID09PSAnZnVuY3Rpb24nICYmIC8vIGNocm9tZSA5LTEwIGxhY2sgYHN1YmFycmF5YFxuICAgICAgICBhcnIuc3ViYXJyYXkoMSwgMSkuYnl0ZUxlbmd0aCA9PT0gMCAvLyBpZTEwIGhhcyBicm9rZW4gYHN1YmFycmF5YFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24ga01heExlbmd0aCAoKSB7XG4gIHJldHVybiBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVFxuICAgID8gMHg3ZmZmZmZmZlxuICAgIDogMHgzZmZmZmZmZlxufVxuXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXIgKHRoYXQsIGxlbmd0aCkge1xuICBpZiAoa01heExlbmd0aCgpIDwgbGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoJylcbiAgfVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICBpZiAodGhhdCA9PT0gbnVsbCkge1xuICAgICAgdGhhdCA9IG5ldyBCdWZmZXIobGVuZ3RoKVxuICAgIH1cbiAgICB0aGF0Lmxlbmd0aCA9IGxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgISh0aGlzIGluc3RhbmNlb2YgQnVmZmVyKSkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0lmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUodGhpcywgYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKHRoaXMsIGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuLy8gVE9ETzogTGVnYWN5LCBub3QgbmVlZGVkIGFueW1vcmUuIFJlbW92ZSBpbiBuZXh0IG1ham9yIHZlcnNpb24uXG5CdWZmZXIuX2F1Z21lbnQgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGFyci5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gZnJvbSAodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cblxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIHJldHVybiBmcm9tT2JqZWN0KHRoYXQsIHZhbHVlKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKG51bGwsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbmlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICBCdWZmZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXkucHJvdG90eXBlXG4gIEJ1ZmZlci5fX3Byb3RvX18gPSBVaW50OEFycmF5XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuc3BlY2llcyAmJlxuICAgICAgQnVmZmVyW1N5bWJvbC5zcGVjaWVzXSA9PT0gQnVmZmVyKSB7XG4gICAgLy8gRml4IHN1YmFycmF5KCkgaW4gRVMyMDE2LiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvOTdcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLCBTeW1ib2wuc3BlY2llcywge1xuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAodGhhdCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXR0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2MobnVsbCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlICh0aGF0LCBzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7XG4gICAgICB0aGF0W2ldID0gMFxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gQnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gU2xvd0J1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICovXG5CdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHRoYXQsIHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJlbmNvZGluZ1wiIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKVxuICB9XG5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuXG4gIHZhciBhY3R1YWwgPSB0aGF0LndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICB0aGF0ID0gdGhhdC5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlICh0aGF0LCBhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhhdFtpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyICh0aGF0LCBhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGFycmF5LmJ5dGVMZW5ndGggLy8gdGhpcyB0aHJvd3MgaWYgYGFycmF5YCBpcyBub3QgYSB2YWxpZCBBcnJheUJ1ZmZlclxuXG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdvZmZzZXRcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ2xlbmd0aFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gYXJyYXlcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgdGhhdCA9IGZyb21BcnJheUxpa2UodGhhdCwgYXJyYXkpXG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAodGhhdCwgb2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIHZhciBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMFxuICAgIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuKVxuXG4gICAgaWYgKHRoYXQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhhdFxuICAgIH1cblxuICAgIG9iai5jb3B5KHRoYXQsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gdGhhdFxuICB9XG5cbiAgaWYgKG9iaikge1xuICAgIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBvYmouYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHx8ICdsZW5ndGgnIGluIG9iaikge1xuICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBpc25hbihvYmoubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIDApXG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmopXG4gICAgfVxuXG4gICAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBpc0FycmF5KG9iai5kYXRhKSkge1xuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqLmRhdGEpXG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LicpXG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBrTWF4TGVuZ3RoKClgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0ga01heExlbmd0aCgpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIGtNYXhMZW5ndGgoKS50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuICEhKGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlcilcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIWlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfVxuICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IHN0cmluZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkge1xuICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nXG4gIH1cblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAobGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJzaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoZSBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIGFuZCBgaXMtYnVmZmVyYCAoaW4gU2FmYXJpIDUtNykgdG8gZGV0ZWN0XG4vLyBCdWZmZXIgaW5zdGFuY2VzLlxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgdmFyIGkgPSBiW25dXG4gIGJbbl0gPSBiW21dXG4gIGJbbV0gPSBpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2ID0gZnVuY3Rpb24gc3dhcDE2ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KVxuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCB8IDBcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLm1hdGNoKC8uezJ9L2cpLmpvaW4oJyAnKVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgfVxuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICB2YXIgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgdmFyIHkgPSBlbmQgLSBzdGFydFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICB2YXIgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0ICAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAoaXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJlxuICAgICAgICB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbIHZhbCBdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICB2YXIgaW5kZXhTaXplID0gMVxuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgaVxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgLy8gbXVzdCBiZSBhbiBldmVuIG51bWJlciBvZiBkaWdpdHNcbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKHN0ckxlbiAlIDIgIT09IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKGlzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBsYXRpbjFXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCB8IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICAvLyBsZWdhY3kgd3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0LCBsZW5ndGgpIC0gcmVtb3ZlIGluIHYwLjEzXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0J1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkJ1xuICAgIClcbiAgfVxuXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgdmFyIHJlcyA9IFtdXG5cbiAgdmFyIGkgPSBzdGFydFxuICB3aGlsZSAoaSA8IGVuZCkge1xuICAgIHZhciBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICB2YXIgY29kZVBvaW50ID0gbnVsbFxuICAgIHZhciBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpID8gNFxuICAgICAgOiAoZmlyc3RCeXRlID4gMHhERikgPyAzXG4gICAgICA6IChmaXJzdEJ5dGUgPiAweEJGKSA/IDJcbiAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgdmFyIHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxudmFyIE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICB2YXIgbGVuID0gY29kZVBvaW50cy5sZW5ndGhcbiAgaWYgKGxlbiA8PSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cykgLy8gYXZvaWQgZXh0cmEgc2xpY2UoKVxuICB9XG5cbiAgLy8gRGVjb2RlIGluIGNodW5rcyB0byBhdm9pZCBcImNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuICB2YXIgcmVzID0gJydcbiAgdmFyIGkgPSAwXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICBTdHJpbmcsXG4gICAgICBjb2RlUG9pbnRzLnNsaWNlKGksIGkgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpXG4gICAgKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0gJiAweDdGKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gbGF0aW4xU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaGV4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIHZhciBvdXQgPSAnJ1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIG91dCArPSB0b0hleChidWZbaV0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIGJ5dGVzW2kgKyAxXSAqIDI1NilcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICB2YXIgbmV3QnVmXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgICBuZXdCdWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIHZhciBzbGljZUxlbiA9IGVuZCAtIHN0YXJ0XG4gICAgbmV3QnVmID0gbmV3IEJ1ZmZlcihzbGljZUxlbiwgdW5kZWZpbmVkKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpY2VMZW47ICsraSkge1xuICAgICAgbmV3QnVmW2ldID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgdmFyIG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDE2IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDIpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlICYgKDB4ZmYgPDwgKDggKiAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSkpKSA+Pj5cbiAgICAgIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpICogOFxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDMyIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCA0KTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSA+Pj4gKGxpdHRsZUVuZGlhbiA/IGkgOiAzIC0gaSkgKiA4KSAmIDB4ZmZcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcbiAgdmFyIGlcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHN0YXJ0IDwgdGFyZ2V0U3RhcnQgJiYgdGFyZ2V0U3RhcnQgPCBlbmQpIHtcbiAgICAvLyBkZXNjZW5kaW5nIGNvcHkgZnJvbSBlbmRcbiAgICBmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSBpZiAobGVuIDwgMTAwMCB8fCAhQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBhc2NlbmRpbmcgY29weSBmcm9tIHN0YXJ0XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiB1dGY4VG9CeXRlcyhuZXcgQnVmZmVyKHZhbCwgZW5jb2RpbmcpLnRvU3RyaW5nKCkpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teK1xcLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0cmluZ3RyaW0oc3RyKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBzdHJpbmd0cmltIChzdHIpIHtcbiAgaWYgKHN0ci50cmltKSByZXR1cm4gc3RyLnRyaW0oKVxuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKVxufVxuXG5mdW5jdGlvbiB0b0hleCAobikge1xuICBpZiAobiA8IDE2KSByZXR1cm4gJzAnICsgbi50b1N0cmluZygxNilcbiAgcmV0dXJuIG4udG9TdHJpbmcoMTYpXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgdmFyIGNvZGVQb2ludFxuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcbiAgdmFyIGJ5dGVzID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgdmFyIGMsIGhpLCBsb1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgIGhpID0gYyA+PiA4XG4gICAgbG8gPSBjICUgMjU2XG4gICAgYnl0ZUFycmF5LnB1c2gobG8pXG4gICAgYnl0ZUFycmF5LnB1c2goaGkpXG4gIH1cblxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMgKHN0cikge1xuICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIGlzbmFuICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gdmFsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYnVmZmVyL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIGlmKCFpc09iamVjdChpdCkpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4tb2JqZWN0LmpzXG4vLyBtb2R1bGUgaWQgPSA0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBhbk9iamVjdCAgICAgICA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpXG4gICwgdG9QcmltaXRpdmUgICAgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKVxuICAsIGRQICAgICAgICAgICAgID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyl7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZihJRThfRE9NX0RFRklORSl0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxuICBpZignZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKU9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanNcbi8vIG1vZHVsZSBpZCA9IDVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbigpe1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHtnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiA3OyB9fSkuYSAhPSA3O1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZXNjcmlwdG9ycy5qc1xuLy8gbW9kdWxlIGlkID0gNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZ2xvYmFsICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBjb3JlICAgICAgPSByZXF1aXJlKCcuL19jb3JlJylcbiAgLCBjdHggICAgICAgPSByZXF1aXJlKCcuL19jdHgnKVxuICAsIGhpZGUgICAgICA9IHJlcXVpcmUoJy4vX2hpZGUnKVxuICAsIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uKHR5cGUsIG5hbWUsIHNvdXJjZSl7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GXG4gICAgLCBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HXG4gICAgLCBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TXG4gICAgLCBJU19QUk9UTyAgPSB0eXBlICYgJGV4cG9ydC5QXG4gICAgLCBJU19CSU5EICAgPSB0eXBlICYgJGV4cG9ydC5CXG4gICAgLCBJU19XUkFQICAgPSB0eXBlICYgJGV4cG9ydC5XXG4gICAgLCBleHBvcnRzICAgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KVxuICAgICwgZXhwUHJvdG8gID0gZXhwb3J0c1tQUk9UT1RZUEVdXG4gICAgLCB0YXJnZXQgICAgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdXG4gICAgLCBrZXksIG93biwgb3V0O1xuICBpZihJU19HTE9CQUwpc291cmNlID0gbmFtZTtcbiAgZm9yKGtleSBpbiBzb3VyY2Upe1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgaWYob3duICYmIGtleSBpbiBleHBvcnRzKWNvbnRpbnVlO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gb3duID8gdGFyZ2V0W2tleV0gOiBzb3VyY2Vba2V5XTtcbiAgICAvLyBwcmV2ZW50IGdsb2JhbCBwb2xsdXRpb24gZm9yIG5hbWVzcGFjZXNcbiAgICBleHBvcnRzW2tleV0gPSBJU19HTE9CQUwgJiYgdHlwZW9mIHRhcmdldFtrZXldICE9ICdmdW5jdGlvbicgPyBzb3VyY2Vba2V5XVxuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgOiBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbClcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlIHRoZW0gaW4gbGlicmFyeVxuICAgIDogSVNfV1JBUCAmJiB0YXJnZXRba2V5XSA9PSBvdXQgPyAoZnVuY3Rpb24oQyl7XG4gICAgICB2YXIgRiA9IGZ1bmN0aW9uKGEsIGIsIGMpe1xuICAgICAgICBpZih0aGlzIGluc3RhbmNlb2YgQyl7XG4gICAgICAgICAgc3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe1xuICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEM7XG4gICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgQyhhKTtcbiAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBDKGEsIGIpO1xuICAgICAgICAgIH0gcmV0dXJuIG5ldyBDKGEsIGIsIGMpO1xuICAgICAgICB9IHJldHVybiBDLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgICAgRltQUk9UT1RZUEVdID0gQ1tQUk9UT1RZUEVdO1xuICAgICAgcmV0dXJuIEY7XG4gICAgLy8gbWFrZSBzdGF0aWMgdmVyc2lvbnMgZm9yIHByb3RvdHlwZSBtZXRob2RzXG4gICAgfSkob3V0KSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4cG9ydCBwcm90byBtZXRob2RzIHRvIGNvcmUuJUNPTlNUUlVDVE9SJS5tZXRob2RzLiVOQU1FJVxuICAgIGlmKElTX1BST1RPKXtcbiAgICAgIChleHBvcnRzLnZpcnR1YWwgfHwgKGV4cG9ydHMudmlydHVhbCA9IHt9KSlba2V5XSA9IG91dDtcbiAgICAgIC8vIGV4cG9ydCBwcm90byBtZXRob2RzIHRvIGNvcmUuJUNPTlNUUlVDVE9SJS5wcm90b3R5cGUuJU5BTUUlXG4gICAgICBpZih0eXBlICYgJGV4cG9ydC5SICYmIGV4cFByb3RvICYmICFleHBQcm90b1trZXldKWhpZGUoZXhwUHJvdG8sIGtleSwgb3V0KTtcbiAgICB9XG4gIH1cbn07XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgIFxubW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzXG4vLyBtb2R1bGUgaWQgPSA3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwga2V5KXtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGFzLmpzXG4vLyBtb2R1bGUgaWQgPSA4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkUCAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJylcbiAgLCBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24ob2JqZWN0LCBrZXksIHZhbHVlKXtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbihvYmplY3QsIGtleSwgdmFsdWUpe1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hpZGUuanNcbi8vIG1vZHVsZSBpZCA9IDlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKVxuICAsIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanNcbi8vIG1vZHVsZSBpZCA9IDEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vcHJvY2Vzcy9icm93c2VyLmpzXG4vLyBtb2R1bGUgaWQgPSAxMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBhIGR1cGxleCBzdHJlYW0gaXMganVzdCBhIHN0cmVhbSB0aGF0IGlzIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLlxuLy8gU2luY2UgSlMgZG9lc24ndCBoYXZlIG11bHRpcGxlIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UsIHRoaXMgY2xhc3Ncbi8vIHByb3RvdHlwYWxseSBpbmhlcml0cyBmcm9tIFJlYWRhYmxlLCBhbmQgdGhlbiBwYXJhc2l0aWNhbGx5IGZyb21cbi8vIFdyaXRhYmxlLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAga2V5cy5wdXNoKGtleSk7XG4gIH1yZXR1cm4ga2V5cztcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxubW9kdWxlLmV4cG9ydHMgPSBEdXBsZXg7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgcHJvY2Vzc05leHRUaWNrID0gcmVxdWlyZSgncHJvY2Vzcy1uZXh0aWNrLWFyZ3MnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSByZXF1aXJlKCdjb3JlLXV0aWwtaXMnKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vX3N0cmVhbV9yZWFkYWJsZScpO1xudmFyIFdyaXRhYmxlID0gcmVxdWlyZSgnLi9fc3RyZWFtX3dyaXRhYmxlJyk7XG5cbnV0aWwuaW5oZXJpdHMoRHVwbGV4LCBSZWFkYWJsZSk7XG5cbnZhciBrZXlzID0gb2JqZWN0S2V5cyhXcml0YWJsZS5wcm90b3R5cGUpO1xuZm9yICh2YXIgdiA9IDA7IHYgPCBrZXlzLmxlbmd0aDsgdisrKSB7XG4gIHZhciBtZXRob2QgPSBrZXlzW3ZdO1xuICBpZiAoIUR1cGxleC5wcm90b3R5cGVbbWV0aG9kXSkgRHVwbGV4LnByb3RvdHlwZVttZXRob2RdID0gV3JpdGFibGUucHJvdG90eXBlW21ldGhvZF07XG59XG5cbmZ1bmN0aW9uIER1cGxleChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEdXBsZXgpKSByZXR1cm4gbmV3IER1cGxleChvcHRpb25zKTtcblxuICBSZWFkYWJsZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICBXcml0YWJsZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMucmVhZGFibGUgPT09IGZhbHNlKSB0aGlzLnJlYWRhYmxlID0gZmFsc2U7XG5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy53cml0YWJsZSA9PT0gZmFsc2UpIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcblxuICB0aGlzLmFsbG93SGFsZk9wZW4gPSB0cnVlO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmFsbG93SGFsZk9wZW4gPT09IGZhbHNlKSB0aGlzLmFsbG93SGFsZk9wZW4gPSBmYWxzZTtcblxuICB0aGlzLm9uY2UoJ2VuZCcsIG9uZW5kKTtcbn1cblxuLy8gdGhlIG5vLWhhbGYtb3BlbiBlbmZvcmNlclxuZnVuY3Rpb24gb25lbmQoKSB7XG4gIC8vIGlmIHdlIGFsbG93IGhhbGYtb3BlbiBzdGF0ZSwgb3IgaWYgdGhlIHdyaXRhYmxlIHNpZGUgZW5kZWQsXG4gIC8vIHRoZW4gd2UncmUgb2suXG4gIGlmICh0aGlzLmFsbG93SGFsZk9wZW4gfHwgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCkgcmV0dXJuO1xuXG4gIC8vIG5vIG1vcmUgZGF0YSBjYW4gYmUgd3JpdHRlbi5cbiAgLy8gQnV0IGFsbG93IG1vcmUgd3JpdGVzIHRvIGhhcHBlbiBpbiB0aGlzIHRpY2suXG4gIHByb2Nlc3NOZXh0VGljayhvbkVuZE5ULCB0aGlzKTtcbn1cblxuZnVuY3Rpb24gb25FbmROVChzZWxmKSB7XG4gIHNlbGYuZW5kKCk7XG59XG5cbmZ1bmN0aW9uIGZvckVhY2goeHMsIGYpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmKHhzW2ldLCBpKTtcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fZHVwbGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAxMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGV4ZWMpe1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaChlKXtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ZhaWxzLmpzXG4vLyBtb2R1bGUgaWQgPSAxM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlcmF0b3JzLmpzXG4vLyBtb2R1bGUgaWQgPSAxNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJylcbiAgLCBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pe1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLmpzXG4vLyBtb2R1bGUgaWQgPSAxNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgLy8gaW1wbGVtZW50YXRpb24gZnJvbSBzdGFuZGFyZCBub2RlLmpzICd1dGlsJyBtb2R1bGVcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICB2YWx1ZTogY3RvcixcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbn0gZWxzZSB7XG4gIC8vIG9sZCBzY2hvb2wgc2hpbSBmb3Igb2xkIGJyb3dzZXJzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICB2YXIgVGVtcEN0b3IgPSBmdW5jdGlvbiAoKSB7fVxuICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyBUZW1wQ3RvcigpXG4gICAgY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yXG4gIH1cbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzXG4vLyBtb2R1bGUgaWQgPSAxNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29mLmpzXG4vLyBtb2R1bGUgaWQgPSAxN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGZuLCB0aGF0LCBsZW5ndGgpe1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZih0aGF0ID09PSB1bmRlZmluZWQpcmV0dXJuIGZuO1xuICBzd2l0Y2gobGVuZ3RoKXtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbihhKXtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24oYSwgYil7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKGEsIGIsIGMpe1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24oLyogLi4uYXJncyAqLyl7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY3R4LmpzXG4vLyBtb2R1bGUgaWQgPSAxOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1vYmplY3QuanNcbi8vIG1vZHVsZSBpZCA9IDE5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oYml0bWFwLCB2YWx1ZSl7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZSAgOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZSAgICA6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWUgICAgICAgOiB2YWx1ZVxuICB9O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanNcbi8vIG1vZHVsZSBpZCA9IDIwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24oaXRlcmF0ZWQpe1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbigpe1xuICB2YXIgTyAgICAgPSB0aGlzLl90XG4gICAgLCBpbmRleCA9IHRoaXMuX2lcbiAgICAsIHBvaW50O1xuICBpZihpbmRleCA+PSBPLmxlbmd0aClyZXR1cm4ge3ZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWV9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4ge3ZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2V9O1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanNcbi8vIG1vZHVsZSBpZCA9IDIxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBOT1RFOiBUaGVzZSB0eXBlIGNoZWNraW5nIGZ1bmN0aW9ucyBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBgaW5zdGFuY2VvZmBcbi8vIGJlY2F1c2UgaXQgaXMgZnJhZ2lsZSBhbmQgY2FuIGJlIGVhc2lseSBmYWtlZCB3aXRoIGBPYmplY3QuY3JlYXRlKClgLlxuXG5mdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICBpZiAoQXJyYXkuaXNBcnJheSkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFyZyk7XG4gIH1cbiAgcmV0dXJuIG9iamVjdFRvU3RyaW5nKGFyZykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5leHBvcnRzLmlzQXJyYXkgPSBpc0FycmF5O1xuXG5mdW5jdGlvbiBpc0Jvb2xlYW4oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnYm9vbGVhbic7XG59XG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcblxuZnVuY3Rpb24gaXNOdWxsKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGwgPSBpc051bGw7XG5cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbE9yVW5kZWZpbmVkID0gaXNOdWxsT3JVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzTnVtYmVyKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7XG59XG5leHBvcnRzLmlzTnVtYmVyID0gaXNOdW1iZXI7XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZyc7XG59XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5cbmZ1bmN0aW9uIGlzU3ltYm9sKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCc7XG59XG5leHBvcnRzLmlzU3ltYm9sID0gaXNTeW1ib2w7XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG5leHBvcnRzLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzUmVnRXhwKHJlKSB7XG4gIHJldHVybiBvYmplY3RUb1N0cmluZyhyZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcblxuZnVuY3Rpb24gaXNEYXRlKGQpIHtcbiAgcmV0dXJuIG9iamVjdFRvU3RyaW5nKGQpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5leHBvcnRzLmlzRGF0ZSA9IGlzRGF0ZTtcblxuZnVuY3Rpb24gaXNFcnJvcihlKSB7XG4gIHJldHVybiAob2JqZWN0VG9TdHJpbmcoZSkgPT09ICdbb2JqZWN0IEVycm9yXScgfHwgZSBpbnN0YW5jZW9mIEVycm9yKTtcbn1cbmV4cG9ydHMuaXNFcnJvciA9IGlzRXJyb3I7XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcblxuZnVuY3Rpb24gaXNQcmltaXRpdmUoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGwgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3ltYm9sJyB8fCAgLy8gRVM2IHN5bWJvbFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3VuZGVmaW5lZCc7XG59XG5leHBvcnRzLmlzUHJpbWl0aXZlID0gaXNQcmltaXRpdmU7XG5cbmV4cG9ydHMuaXNCdWZmZXIgPSBCdWZmZXIuaXNCdWZmZXI7XG5cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLXV0aWwtaXMvbGliL3V0aWwuanNcbi8vIG1vZHVsZSBpZCA9IDIyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBnO1xyXG5cclxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcclxuZyA9IChmdW5jdGlvbigpIHtcclxuXHRyZXR1cm4gdGhpcztcclxufSkoKTtcclxuXHJcbnRyeSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXHJcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLGV2YWwpKFwidGhpc1wiKTtcclxufSBjYXRjaChlKSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcclxuXHRpZih0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKVxyXG5cdFx0ZyA9IHdpbmRvdztcclxufVxyXG5cclxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxyXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xyXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGc7XHJcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vICh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gMjNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3Rvcnkpe1xuXG5cdC8vVU1EXG5cdGlmICggdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQgKSB7XG5cdFx0ZGVmaW5lKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGZhY3RvcnkoKTtcblx0XHR9KTtcblx0fSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gXHR9IGVsc2Uge1xuXHRcdHJvb3QuVG9uZSA9IGZhY3RvcnkoKTtcblx0fVxuXG59KHRoaXMsIGZ1bmN0aW9uKCl7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgVG9uZTtcblx0Ly9jb25zdHJ1Y3RzIHRoZSBtYWluIFRvbmUgb2JqZWN0XG5cdGZ1bmN0aW9uIE1haW4oZnVuYyl7XG5cdFx0VG9uZSA9IGZ1bmMoKTtcblx0fVxuXHQvL2ludm9rZXMgZWFjaCBvZiB0aGUgbW9kdWxlcyB3aXRoIHRoZSBtYWluIFRvbmUgb2JqZWN0IGFzIHRoZSBhcmd1bWVudFxuXHRmdW5jdGlvbiBNb2R1bGUoZnVuYyl7XG5cdFx0ZnVuYyhUb25lKTtcblx0fVx0LyoqXG5cdCAqICBUb25lLmpzXG5cdCAqICBAYXV0aG9yIFlvdGFtIE1hbm5cblx0ICogIEBsaWNlbnNlIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQgTUlUIExpY2Vuc2Vcblx0ICogIEBjb3B5cmlnaHQgMjAxNC0yMDE4IFlvdGFtIE1hbm5cblx0ICovXG5cdE1haW4oZnVuY3Rpb24gKCkge1xuXHQgICAgXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRUT05FXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUgaXMgdGhlIGJhc2UgY2xhc3Mgb2YgYWxsIG90aGVyIGNsYXNzZXMuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgdmFyIFRvbmUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRvbmUpKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY29uc3RydWN0b3IgbmVlZHMgdG8gYmUgY2FsbGVkIHdpdGggdGhlIFxcJ25ld1xcJyBrZXl3b3JkJyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgQHJldHVybnMge1N0cmluZ30gcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgYXMgYSBzdHJpbmdcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZvciAodmFyIGNsYXNzTmFtZSBpbiBUb25lKSB7XG5cdCAgICAgICAgICAgIHZhciBpc0xldHRlciA9IGNsYXNzTmFtZVswXS5tYXRjaCgvXltBLVpdJC8pO1xuXHQgICAgICAgICAgICB2YXIgc2FtZUNvbnN0cnVjdG9yID0gVG9uZVtjbGFzc05hbWVdID09PSB0aGlzLmNvbnN0cnVjdG9yO1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc0Z1bmN0aW9uKFRvbmVbY2xhc3NOYW1lXSkgJiYgaXNMZXR0ZXIgJiYgc2FtZUNvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiAnVG9uZSc7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lI1xuXHRcdCAqICBkaXNjb25uZWN0IGFuZCBkaXNwb3NlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEdFVC9TRVRcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgcGFyYW1ldGVycyBhdCBvbmNlLiBFaXRoZXIgcGFzcyBpbiBhblxuXHRcdCAqICBvYmplY3QgbWFwcGluZyBwYXJhbWV0ZXJzIHRvIHZhbHVlcywgb3IgdG8gc2V0IGFcblx0XHQgKiAgc2luZ2xlIHBhcmFtZXRlciwgYnkgcGFzc2luZyBpbiBhIHN0cmluZyBhbmQgdmFsdWUuXG5cdFx0ICogIFRoZSBsYXN0IGFyZ3VtZW50IGlzIGFuIG9wdGlvbmFsIHJhbXAgdGltZSB3aGljaFxuXHRcdCAqICB3aWxsIHJhbXAgYW55IHNpZ25hbCB2YWx1ZXMgdG8gdGhlaXIgZGVzdGluYXRpb24gdmFsdWVcblx0XHQgKiAgb3ZlciB0aGUgZHVyYXRpb24gb2YgdGhlIHJhbXBUaW1lLlxuXHRcdCAqICBAcGFyYW0ge09iamVjdHxTdHJpbmd9IHBhcmFtc1xuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHJhbXBUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lfSB0aGlzXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lI1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc2V0IHZhbHVlcyB1c2luZyBhbiBvYmplY3Rcblx0XHQgKiBmaWx0ZXIuc2V0KHtcblx0XHQgKiBcdFwiZnJlcXVlbmN5XCIgOiAzMDAsXG5cdFx0ICogXHRcInR5cGVcIiA6IGhpZ2hwYXNzXG5cdFx0ICogfSk7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogZmlsdGVyLnNldChcInR5cGVcIiwgXCJoaWdocGFzc1wiKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3JhbXAgdG8gdGhlIHZhbHVlIDIyMCBvdmVyIDMgc2Vjb25kcy5cblx0XHQgKiBvc2NpbGxhdG9yLnNldCh7XG5cdFx0ICogXHRcImZyZXF1ZW5jeVwiIDogMjIwXG5cdFx0ICogfSwgMyk7XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAocGFyYW1zLCB2YWx1ZSwgcmFtcFRpbWUpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc09iamVjdChwYXJhbXMpKSB7XG5cdCAgICAgICAgICAgIHJhbXBUaW1lID0gdmFsdWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKHBhcmFtcykpIHtcblx0ICAgICAgICAgICAgdmFyIHRtcE9iaiA9IHt9O1xuXHQgICAgICAgICAgICB0bXBPYmpbcGFyYW1zXSA9IHZhbHVlO1xuXHQgICAgICAgICAgICBwYXJhbXMgPSB0bXBPYmo7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHBhcmFtTG9vcDpcblx0ICAgICAgICAgICAgZm9yICh2YXIgYXR0ciBpbiBwYXJhbXMpIHtcblx0ICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyYW1zW2F0dHJdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXM7XG5cdCAgICAgICAgICAgICAgICBpZiAoYXR0ci5pbmRleE9mKCcuJykgIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJTcGxpdCA9IGF0dHIuc3BsaXQoJy4nKTtcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJTcGxpdC5sZW5ndGggLSAxOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50W2F0dHJTcGxpdFtpXV07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBUb25lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyU3BsaXQuc3BsaWNlKDAsIGkgKyAxKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbm5lclBhcmFtID0gYXR0clNwbGl0LmpvaW4oJy4nKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5zZXQoaW5uZXJQYXJhbSwgdmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgcGFyYW1Mb29wO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIGF0dHIgPSBhdHRyU3BsaXRbYXR0clNwbGl0Lmxlbmd0aCAtIDFdO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdmFyIHBhcmFtID0gcGFyZW50W2F0dHJdO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihwYXJhbSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLlNpZ25hbCAmJiBwYXJhbSBpbnN0YW5jZW9mIFRvbmUuU2lnbmFsIHx8IFRvbmUuUGFyYW0gJiYgcGFyYW0gaW5zdGFuY2VvZiBUb25lLlBhcmFtKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnZhbHVlICE9PSB2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHJhbXBUaW1lKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0udmFsdWUgPSB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLnJhbXBUbyh2YWx1ZSwgcmFtcFRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbnN0YW5jZW9mIEF1ZGlvUGFyYW0pIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW0udmFsdWUgIT09IHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLnZhbHVlID0gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLlRpbWVCYXNlICYmIHBhcmFtIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHBhcmVudFthdHRyXSA9IHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbnN0YW5jZW9mIFRvbmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBwYXJhbS5zZXQodmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSAhPT0gdmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBwYXJlbnRbYXR0cl0gPSB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIG9iamVjdCdzIGF0dHJpYnV0ZXMuIEdpdmVuIG5vIGFyZ3VtZW50cyBnZXRcblx0XHQgKiAgd2lsbCByZXR1cm4gYWxsIGF2YWlsYWJsZSBvYmplY3QgcHJvcGVydGllcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZ1xuXHRcdCAqICB2YWx1ZXMuIFBhc3MgaW4gYSBzaW5nbGUgYXR0cmlidXRlIHRvIHJldHJpZXZlIG9yIGFuIGFycmF5XG5cdFx0ICogIG9mIGF0dHJpYnV0ZXMuIFRoZSBhdHRyaWJ1dGUgc3RyaW5ncyBjYW4gYWxzbyBpbmNsdWRlIGEgXCIuXCJcblx0XHQgKiAgdG8gYWNjZXNzIGRlZXBlciBwcm9wZXJ0aWVzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBvc2MuZ2V0KCk7XG5cdFx0ICogLy9yZXR1cm5zIHtcInR5cGVcIiA6IFwic2luZVwiLCBcImZyZXF1ZW5jeVwiIDogNDQwLCAuLi5ldGN9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogb3NjLmdldChcInR5cGVcIik7XG5cdFx0ICogLy9yZXR1cm5zIHsgXCJ0eXBlXCIgOiBcInNpbmVcIn1cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vdXNlIGRvdCBub3RhdGlvbiB0byBhY2Nlc3MgZGVlcCBwcm9wZXJ0aWVzXG5cdFx0ICogc3ludGguZ2V0KFtcImVudmVsb3BlLmF0dGFja1wiLCBcImVudmVsb3BlLnJlbGVhc2VcIl0pO1xuXHRcdCAqIC8vcmV0dXJucyB7XCJlbnZlbG9wZVwiIDoge1wiYXR0YWNrXCIgOiAwLjIsIFwicmVsZWFzZVwiIDogMC40fX1cblx0XHQgKiAgQHBhcmFtIHtBcnJheT18c3RyaW5nfHVuZGVmaW5lZH0gcGFyYW1zIHRoZSBwYXJhbWV0ZXJzIHRvIGdldCwgb3RoZXJ3aXNlIHdpbGwgcmV0dXJuXG5cdFx0ICogIFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICBhbGwgYXZhaWxhYmxlLlxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYocGFyYW1zKSkge1xuXHQgICAgICAgICAgICBwYXJhbXMgPSB0aGlzLl9jb2xsZWN0RGVmYXVsdHModGhpcy5jb25zdHJ1Y3Rvcik7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKHBhcmFtcykpIHtcblx0ICAgICAgICAgICAgcGFyYW1zID0gW3BhcmFtc107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciByZXQgPSB7fTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgYXR0ciA9IHBhcmFtc1tpXTtcblx0ICAgICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXM7XG5cdCAgICAgICAgICAgIHZhciBzdWJSZXQgPSByZXQ7XG5cdCAgICAgICAgICAgIGlmIChhdHRyLmluZGV4T2YoJy4nKSAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBhdHRyU3BsaXQgPSBhdHRyLnNwbGl0KCcuJyk7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF0dHJTcGxpdC5sZW5ndGggLSAxOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgc3ViQXR0ciA9IGF0dHJTcGxpdFtqXTtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJSZXRbc3ViQXR0cl0gPSBzdWJSZXRbc3ViQXR0cl0gfHwge307XG5cdCAgICAgICAgICAgICAgICAgICAgc3ViUmV0ID0gc3ViUmV0W3N1YkF0dHJdO1xuXHQgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudFtzdWJBdHRyXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGF0dHIgPSBhdHRyU3BsaXRbYXR0clNwbGl0Lmxlbmd0aCAtIDFdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBwYXJhbSA9IHBhcmVudFthdHRyXTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QocGFyYW1zW2F0dHJdKSkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW0uZ2V0KCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5TaWduYWwgJiYgcGFyYW0gaW5zdGFuY2VvZiBUb25lLlNpZ25hbCkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW0udmFsdWU7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5QYXJhbSAmJiBwYXJhbSBpbnN0YW5jZW9mIFRvbmUuUGFyYW0pIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtLnZhbHVlO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtIGluc3RhbmNlb2YgQXVkaW9QYXJhbSkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW0udmFsdWU7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBUb25lKSB7XG5cdCAgICAgICAgICAgICAgICBzdWJSZXRbYXR0cl0gPSBwYXJhbS5nZXQoKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICghVG9uZS5pc0Z1bmN0aW9uKHBhcmFtKSAmJiBUb25lLmlzRGVmaW5lZChwYXJhbSkpIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiByZXQ7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbGxlY3QgYWxsIG9mIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgaW4gb25lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNvbnN0ciB0aGUgY29uc3RydWN0b3IgdG8gZmluZCB0aGUgZGVmYXVsdHMgZnJvbVxuXHRcdCAqICBAcmV0dXJuIHtBcnJheX0gYWxsIG9mIHRoZSBhdHRyaWJ1dGVzIHdoaWNoIGJlbG9uZyB0byB0aGUgY2xhc3Ncblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLl9jb2xsZWN0RGVmYXVsdHMgPSBmdW5jdGlvbiAoY29uc3RyKSB7XG5cdCAgICAgICAgdmFyIHJldCA9IFtdO1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChjb25zdHIuZGVmYXVsdHMpKSB7XG5cdCAgICAgICAgICAgIHJldCA9IE9iamVjdC5rZXlzKGNvbnN0ci5kZWZhdWx0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChjb25zdHIuX3N1cGVyKSkge1xuXHQgICAgICAgICAgICB2YXIgc3VwZXJEZWZzID0gdGhpcy5fY29sbGVjdERlZmF1bHRzKGNvbnN0ci5fc3VwZXIpO1xuXHQgICAgICAgICAgICAvL2ZpbHRlciBvdXQgcmVwZWF0c1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1cGVyRGVmcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKHJldC5pbmRleE9mKHN1cGVyRGVmc1tpXSkgPT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goc3VwZXJEZWZzW2ldKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcmV0O1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdERFRkFVTFRTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIHZhbHVlcyAgVGhlIGFyZ3VtZW50cyBhcnJheVxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIGtleXMgICAgVGhlIG5hbWVzIG9mIHRoZSBhcmd1bWVudHNcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R9IGNvbnN0ciBUaGUgY2xhc3MgY29uc3RydWN0b3Jcblx0XHQgKiAgQHJldHVybiAge09iamVjdH0gIEFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgIGRlZmF1bHRzIGJldHdlZW4gdGhlIGNsYXNzJyBkZWZhdWx0c1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBwYXNzZWQgaW4gYXJndW1lbnRzLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5kZWZhdWx0cyA9IGZ1bmN0aW9uICh2YWx1ZXMsIGtleXMsIGNvbnN0cikge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0ge307XG5cdCAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDEgJiYgVG9uZS5pc09iamVjdCh2YWx1ZXNbMF0pKSB7XG5cdCAgICAgICAgICAgIG9wdGlvbnMgPSB2YWx1ZXNbMF07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBvcHRpb25zW2tleXNbaV1dID0gdmFsdWVzW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChjb25zdHIuZGVmYXVsdHMpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgY29uc3RyLmRlZmF1bHRzKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNPYmplY3QoY29uc3RyKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIGNvbnN0cik7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiB0aGUgYGdpdmVuYCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLCB1c2UgdGhlIGBmYWxsYmFja2AuXG5cdFx0ICogIElmIGJvdGggYGdpdmVuYCBhbmQgYGZhbGxiYWNrYCBhcmUgb2JqZWN0IGxpdGVyYWxzLCBpdCB3aWxsXG5cdFx0ICogIHJldHVybiBhIGRlZXAgY29weSB3aGljaCBpbmNsdWRlcyBhbGwgb2YgdGhlIHBhcmFtZXRlcnMgZnJvbSBib3RoXG5cdFx0ICogIG9iamVjdHMuIElmIGEgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBpbiBnaXZlbiwgaXQgd2lsbCByZXR1cm5cblx0XHQgKiAgdGhlIGZhbGxiYWNrIHByb3BlcnR5LlxuXHRcdCAqICA8YnI+PGJyPlxuXHRcdCAqICBXQVJOSU5HOiBpZiBvYmplY3QgaXMgc2VsZiByZWZlcmVudGlhbCwgaXQgd2lsbCBnbyBpbnRvIGFuIGFuXG5cdFx0ICogIGluZmluaXRlIHJlY3Vyc2l2ZSBsb29wLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAcGFyYW0gIHsqfSBnaXZlblxuXHRcdCAqICBAcGFyYW0gIHsqfSBmYWxsYmFja1xuXHRcdCAqICBAcmV0dXJuIHsqfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5kZWZhdWx0QXJnID0gZnVuY3Rpb24gKGdpdmVuLCBmYWxsYmFjaykge1xuXHQgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KGdpdmVuKSAmJiBUb25lLmlzT2JqZWN0KGZhbGxiYWNrKSkge1xuXHQgICAgICAgICAgICB2YXIgcmV0ID0ge307XG5cdCAgICAgICAgICAgIC8vbWFrZSBhIGRlZXAgY29weSBvZiB0aGUgZ2l2ZW4gb2JqZWN0XG5cdCAgICAgICAgICAgIGZvciAodmFyIGdpdmVuUHJvcCBpbiBnaXZlbikge1xuXHQgICAgICAgICAgICAgICAgcmV0W2dpdmVuUHJvcF0gPSBUb25lLmRlZmF1bHRBcmcoZmFsbGJhY2tbZ2l2ZW5Qcm9wXSwgZ2l2ZW5bZ2l2ZW5Qcm9wXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZm9yICh2YXIgZmFsbGJhY2tQcm9wIGluIGZhbGxiYWNrKSB7XG5cdCAgICAgICAgICAgICAgICByZXRbZmFsbGJhY2tQcm9wXSA9IFRvbmUuZGVmYXVsdEFyZyhnaXZlbltmYWxsYmFja1Byb3BdLCBmYWxsYmFja1tmYWxsYmFja1Byb3BdKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gcmV0O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmlzVW5kZWYoZ2l2ZW4pID8gZmFsbGJhY2sgOiBnaXZlbjtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0Q09OTkVDVElPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbm5lY3QgdG9nZXRoZXIgYWxsIG9mIHRoZSBhcmd1bWVudHMgaW4gc2VyaWVzXG5cdFx0ICogIEBwYXJhbSB7Li4uQXVkaW9QYXJhbXxUb25lfEF1ZGlvTm9kZX0gbm9kZXNcblx0XHQgKiAgQHJldHVybnMge1RvbmV9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuY29ubmVjdFNlcmllcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgY3VycmVudFVuaXQgPSBhcmd1bWVudHNbMF07XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHRvVW5pdCA9IGFyZ3VtZW50c1tpXTtcblx0ICAgICAgICAgICAgY3VycmVudFVuaXQuY29ubmVjdCh0b1VuaXQpO1xuXHQgICAgICAgICAgICBjdXJyZW50VW5pdCA9IHRvVW5pdDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFRvbmU7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBUWVBFIENIRUNLSU5HXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmcgaXMgdW5kZWZpbmVkXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgdW5kZWZpbmVkXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNVbmRlZiA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCc7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZyBpcyBub3QgdW5kZWZpbmVkXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgdW5kZWZpbmVkXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNEZWZpbmVkID0gZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgIHJldHVybiAhVG9uZS5pc1VuZGVmKHZhbCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZyBpcyBhIGZ1bmN0aW9uXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYSBmdW5jdGlvblxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbic7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLlxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGEgbnVtYmVyXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNOdW1iZXIgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBnaXZlbiBhcmd1bWVudCBpcyBhbiBvYmplY3QgbGl0ZXJhbCAoaS5lLiBge31gKTtcblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhbiBvYmplY3QgbGl0ZXJhbC5cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc09iamVjdCA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZykgPT09ICdbb2JqZWN0IE9iamVjdF0nICYmIGFyZy5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBhIGJvb2xlYW4uXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYSBib29sZWFuXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNCb29sZWFuID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgYXJnID09PSAnYm9vbGVhbic7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZ3VtZW50IGlzIGFuIEFycmF5XG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYW4gYXJyYXlcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc0FycmF5ID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFyZyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZ3VtZW50IGlzIGEgc3RyaW5nLlxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGEgc3RyaW5nXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNTdHJpbmcgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBpbiB0aGUgZm9ybSBvZiBhIG5vdGUgaW4gc2NpZW50aWZpYyBwaXRjaCBub3RhdGlvbi5cblx0XHQgKiAgZS5nLiBcIkM0XCJcblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhIHN0cmluZ1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzTm90ZSA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5pc1N0cmluZyhhcmcpICYmIC9eKFthLWddezF9KD86YnwjfHh8YmIpPykoLT9bMC05XSspL2kudGVzdChhcmcpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBbiBlbXB0eSBmdW5jdGlvbi5cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5ub09wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBNYWtlIHRoZSBwcm9wZXJ0eSBub3Qgd3JpdGFibGUuIEludGVybmFsIHVzZSBvbmx5LlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBwcm9wZXJ0eSAgdGhlIHByb3BlcnR5IHRvIG1ha2Ugbm90IHdyaXRhYmxlXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5fcmVhZE9ubHkgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcblx0ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0eSkpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0eS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmVhZE9ubHkocHJvcGVydHlbaV0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5LCB7XG5cdCAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG5cdCAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTWFrZSBhbiBhdHRyaWJ1dGUgd3JpdGVhYmxlLiBJbnRlcmFsIHVzZSBvbmx5LlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBwcm9wZXJ0eSAgdGhlIHByb3BlcnR5IHRvIG1ha2Ugd3JpdGFibGVcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLl93cml0YWJsZSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuXHQgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BlcnR5KSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnR5Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl93cml0YWJsZShwcm9wZXJ0eVtpXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHksIHsgd3JpdGFibGU6IHRydWUgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFBvc3NpYmxlIHBsYXkgc3RhdGVzLlxuXHRcdCAqIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0YXRlID0ge1xuXHQgICAgICAgIFN0YXJ0ZWQ6ICdzdGFydGVkJyxcblx0ICAgICAgICBTdG9wcGVkOiAnc3RvcHBlZCcsXG5cdCAgICAgICAgUGF1c2VkOiAncGF1c2VkJ1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gQ09OVkVSU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIEVxdWFsIHBvd2VyIGdhaW4gc2NhbGUuIEdvb2QgZm9yIGNyb3NzLWZhZGluZy5cblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9IHBlcmNlbnQgKDAtMSlcblx0XHQgKiAgQHJldHVybiB7TnVtYmVyfSAgICAgICAgIG91dHB1dCBnYWluICgwLTEpXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuZXF1YWxQb3dlclNjYWxlID0gZnVuY3Rpb24gKHBlcmNlbnQpIHtcblx0ICAgICAgICB2YXIgcGlGYWN0b3IgPSAwLjUgKiBNYXRoLlBJO1xuXHQgICAgICAgIHJldHVybiBNYXRoLnNpbihwZXJjZW50ICogcGlGYWN0b3IpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGRlY2liZWxzIGludG8gZ2Fpbi5cblx0XHQgKiAgQHBhcmFtICB7RGVjaWJlbHN9IGRiXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5kYlRvR2FpbiA9IGZ1bmN0aW9uIChkYikge1xuXHQgICAgICAgIHJldHVybiBNYXRoLnBvdygxMCwgZGIgLyAyMCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgZ2FpbiB0byBkZWNpYmVscy5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSBnYWluICgwLTEpXG5cdFx0ICogIEByZXR1cm4ge0RlY2liZWxzfVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmdhaW5Ub0RiID0gZnVuY3Rpb24gKGdhaW4pIHtcblx0ICAgICAgICByZXR1cm4gMjAgKiAoTWF0aC5sb2coZ2FpbikgLyBNYXRoLkxOMTApO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGFuIGludGVydmFsIChpbiBzZW1pdG9uZXMpIHRvIGEgZnJlcXVlbmN5IHJhdGlvLlxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbH0gaW50ZXJ2YWwgdGhlIG51bWJlciBvZiBzZW1pdG9uZXMgYWJvdmUgdGhlIGJhc2Ugbm90ZVxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9ICAgICAgICAgIHRoZSBmcmVxdWVuY3kgcmF0aW9cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKDApOyAvLyAxXG5cdFx0ICogdG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oMTIpOyAvLyAyXG5cdFx0ICogdG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oLTEyKTsgLy8gMC41XG5cdFx0ICovXG5cdCAgICBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyA9IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgIHJldHVybiBNYXRoLnBvdygyLCBpbnRlcnZhbCAvIDEyKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRUSU1JTkdcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgY3VycmVudCB0aW1lIG9mIHRoZSBBdWRpb0NvbnRleHQgY2xvY2suXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn0gdGhlIGN1cnJlbnRUaW1lIGZyb20gdGhlIEF1ZGlvQ29udGV4dFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLm5vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5jb250ZXh0Lm5vdygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBvZiB0aGUgQXVkaW9Db250ZXh0IGNsb2NrLlxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9IHRoZSBjdXJyZW50VGltZSBmcm9tIHRoZSBBdWRpb0NvbnRleHRcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuY29udGV4dC5ub3coKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRJTkhFUklUQU5DRVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgaGF2ZSBhIGNoaWxkIGluaGVyaXQgYWxsIG9mIFRvbmUncyAob3IgYSBwYXJlbnQncykgcHJvdG90eXBlXG5cdFx0ICogIHRvIGluaGVyaXQgdGhlIHBhcmVudCdzIHByb3BlcnRpZXMsIG1ha2Ugc3VyZSB0byBjYWxsXG5cdFx0ICogIFBhcmVudC5jYWxsKHRoaXMpIGluIHRoZSBjaGlsZCdzIGNvbnN0cnVjdG9yXG5cdFx0ICpcblx0XHQgKiAgYmFzZWQgb24gY2xvc3VyZSBsaWJyYXJ5J3MgaW5oZXJpdCBmdW5jdGlvblxuXHRcdCAqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259IFx0Y2hpbGRcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSBwYXJlbnQgKG9wdGlvbmFsKSBwYXJlbnQgdG8gaW5oZXJpdCBmcm9tXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vIHBhcmVudCBpcyBzdXBwbGllZCwgdGhlIGNoaWxkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgaW5oZXJpdCBmcm9tIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuZXh0ZW5kID0gZnVuY3Rpb24gKGNoaWxkLCBwYXJlbnQpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHBhcmVudCkpIHtcblx0ICAgICAgICAgICAgcGFyZW50ID0gVG9uZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gVGVtcENvbnN0cnVjdG9yKCkge1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUZW1wQ29uc3RydWN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTtcblx0ICAgICAgICBjaGlsZC5wcm90b3R5cGUgPSBuZXcgVGVtcENvbnN0cnVjdG9yKCk7XG5cdCAgICAgICAgLyoqIEBvdmVycmlkZSAqL1xuXHQgICAgICAgIGNoaWxkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNoaWxkO1xuXHQgICAgICAgIGNoaWxkLl9zdXBlciA9IHBhcmVudDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRDT05URVhUXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBQcml2YXRlIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIEF1ZGlvQ29udGV4dFxuXHRcdCAqICBAdHlwZSB7QXVkaW9Db250ZXh0fVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgdmFyIGF1ZGlvQ29udGV4dCA9IG51bGw7XG5cdCAgICAvKipcblx0XHQgKiAgQSBzdGF0aWMgcG9pbnRlciB0byB0aGUgYXVkaW8gY29udGV4dCBhY2Nlc3NpYmxlIGFzIFRvbmUuY29udGV4dC5cblx0XHQgKiAgQHR5cGUge1RvbmUuQ29udGV4dH1cblx0XHQgKiAgQG5hbWUgY29udGV4dFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUsICdjb250ZXh0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gYXVkaW9Db250ZXh0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5Db250ZXh0ICYmIGNvbnRleHQgaW5zdGFuY2VvZiBUb25lLkNvbnRleHQpIHtcblx0ICAgICAgICAgICAgICAgIGF1ZGlvQ29udGV4dCA9IGNvbnRleHQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBhdWRpb0NvbnRleHQgPSBuZXcgVG9uZS5Db250ZXh0KGNvbnRleHQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vaW5pdGlhbGl6ZSB0aGUgbmV3IGF1ZGlvIGNvbnRleHRcblx0ICAgICAgICAgICAgVG9uZS5Db250ZXh0LmVtaXQoJ2luaXQnLCBhdWRpb0NvbnRleHQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBBdWRpb0NvbnRleHRcblx0XHQgKiAgQHR5cGUge1RvbmUuQ29udGV4dH1cblx0XHQgKiAgQG5hbWUgY29udGV4dFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5wcm90b3R5cGUsICdjb250ZXh0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5jb250ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRvbmUgYXV0b21hdGljYWxseSBjcmVhdGVzIGEgY29udGV4dCBvbiBpbml0LCBidXQgaWYgeW91IGFyZSB3b3JraW5nXG5cdFx0ICogIHdpdGggb3RoZXIgbGlicmFyaWVzIHdoaWNoIGFsc28gY3JlYXRlIGFuIEF1ZGlvQ29udGV4dCwgaXQgY2FuIGJlXG5cdFx0ICogIHVzZWZ1bCB0byBzZXQgeW91ciBvd24uIElmIHlvdSBhcmUgZ29pbmcgdG8gc2V0IHlvdXIgb3duIGNvbnRleHQsXG5cdFx0ICogIGJlIHN1cmUgdG8gZG8gaXQgYXQgdGhlIHN0YXJ0IG9mIHlvdXIgY29kZSwgYmVmb3JlIGNyZWF0aW5nIGFueSBvYmplY3RzLlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9Db250ZXh0fSBjdHggVGhlIG5ldyBhdWRpbyBjb250ZXh0IHRvIHNldFxuXHRcdCAqL1xuXHQgICAgVG9uZS5zZXRDb250ZXh0ID0gZnVuY3Rpb24gKGN0eCkge1xuXHQgICAgICAgIFRvbmUuY29udGV4dCA9IGN0eDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRBVFRSSUJVVEVTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIHNlY29uZHMgb2YgMSBwcm9jZXNzaW5nIGJsb2NrICgxMjggc2FtcGxlcylcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgYmxvY2tUaW1lXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5wcm90b3R5cGUsICdibG9ja1RpbWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAxMjggLyB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZHVyYXRpb24gaW4gc2Vjb25kcyBvZiBvbmUgc2FtcGxlLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBzYW1wbGVUaW1lXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5wcm90b3R5cGUsICdzYW1wbGVUaW1lJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gMSAvIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFdoZXRoZXIgb3Igbm90IGFsbCB0aGUgdGVjaG5vbG9naWVzIHRoYXQgVG9uZS5qcyByZWxpZXMgb24gYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyLlxuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiAgQG5hbWUgc3VwcG9ydGVkXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZSwgJ3N1cHBvcnRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGhhc0F1ZGlvQ29udGV4dCA9IHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnQXVkaW9Db250ZXh0JykgfHwgd2luZG93Lmhhc093blByb3BlcnR5KCd3ZWJraXRBdWRpb0NvbnRleHQnKTtcblx0ICAgICAgICAgICAgdmFyIGhhc1Byb21pc2VzID0gd2luZG93Lmhhc093blByb3BlcnR5KCdQcm9taXNlJyk7XG5cdCAgICAgICAgICAgIHZhciBoYXNXb3JrZXJzID0gd2luZG93Lmhhc093blByb3BlcnR5KCdXb3JrZXInKTtcblx0ICAgICAgICAgICAgcmV0dXJuIGhhc0F1ZGlvQ29udGV4dCAmJiBoYXNQcm9taXNlcyAmJiBoYXNXb3JrZXJzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEJvb2xlYW4gdmFsdWUgaWYgdGhlIGF1ZGlvIGNvbnRleHQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBuYW1lIGluaXRpYWxpemVkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZSwgJ2luaXRpYWxpemVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gYXVkaW9Db250ZXh0ICE9PSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgY29udGV4dCB3aGVuIGl0IGJlY29tZXMgYXZhaWxhYmxlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgcmVzb2x2ZSAgQ2FsbGJhY2sgd2hlbiB0aGUgY29udGV4dCBpcyBpbml0aWFsaXplZFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuZ2V0Q29udGV4dCA9IGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaW5pdGlhbGl6ZWQpIHtcblx0ICAgICAgICAgICAgcmVzb2x2ZShUb25lLmNvbnRleHQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciByZXNDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJlc29sdmUoVG9uZS5jb250ZXh0KTtcblx0ICAgICAgICAgICAgICAgIFRvbmUuQ29udGV4dC5vZmYoJ2luaXQnLCByZXNDYWxsYmFjayk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIHJlc0NhbGxiYWNrKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFRvbmU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHZlcnNpb24gbnVtYmVyXG5cdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHQgKiBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLnZlcnNpb24gPSAncjEyJztcblx0ICAgIHJldHVybiBUb25lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5FbWl0dGVyIGdpdmVzIGNsYXNzZXMgd2hpY2ggZXh0ZW5kIGl0XG5cdFx0ICogICAgICAgICB0aGUgYWJpbGl0eSB0byBsaXN0ZW4gZm9yIGFuZCBlbWl0IGV2ZW50cy5cblx0XHQgKiAgICAgICAgIEluc3BpcmF0aW9uIGFuZCByZWZlcmVuY2UgZnJvbSBKZXJvbWUgRXRpZW5uZSdzIFtNaWNyb0V2ZW50XShodHRwczovL2dpdGh1Yi5jb20vamVyb21lZXRpZW5uZS9taWNyb2V2ZW50LmpzKS5cblx0XHQgKiAgICAgICAgIE1JVCAoYykgMjAxMSBKZXJvbWUgRXRpZW5uZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQ29udGFpbnMgYWxsIG9mIHRoZSBldmVudHMuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRW1pdHRlcik7XG5cdCAgICAvKipcblx0XHQgKiAgQmluZCBhIGNhbGxiYWNrIHRvIGEgc3BlY2lmaWMgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gICAgZXZlbnQgICAgIFRoZSBuYW1lIG9mIHRoZSBldmVudCB0byBsaXN0ZW4gZm9yLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50IGlzIGVtaXR0ZWRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcblx0ICAgICAgICAvL3NwbGl0IHRoZSBldmVudFxuXHQgICAgICAgIHZhciBldmVudHMgPSBldmVudC5zcGxpdCgvXFxXKy8pO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudE5hbWUgPSBldmVudHNbaV07XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5fZXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1tldmVudE5hbWVdID0gW107XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0ucHVzaChjYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBCaW5kIGEgY2FsbGJhY2sgd2hpY2ggaXMgb25seSBpbnZva2VkIG9uY2Vcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgICBldmVudCAgICAgVGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIGxpc3RlbiBmb3IuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQgaXMgZW1pdHRlZFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FbWl0dGVyfSAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdmFyIGJvdW5kQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vaW52b2tlIHRoZSBjYWxsYmFja1xuXHQgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICB0aGlzLm9mZihldmVudCwgYm91bmRDYWxsYmFjayk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgICAgIHRoaXMub24oZXZlbnQsIGJvdW5kQ2FsbGJhY2spO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICAgIGV2ZW50ICAgICBUaGUgZXZlbnQgdG8gc3RvcCBsaXN0ZW5pbmcgdG8uXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgd2hpY2ggd2FzIGJvdW5kIHRvXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBldmVudCB3aXRoIFRvbmUuRW1pdHRlci5vbi5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm8gY2FsbGJhY2sgaXMgZ2l2ZW4sIGFsbCBjYWxsYmFja3Ncblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzIGFyZSByZW1vdmVkLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FbWl0dGVyfSAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcblx0ICAgICAgICB2YXIgZXZlbnRzID0gZXZlbnQuc3BsaXQoL1xcVysvKTtcblx0ICAgICAgICBmb3IgKHZhciBldiA9IDA7IGV2IDwgZXZlbnRzLmxlbmd0aDsgZXYrKykge1xuXHQgICAgICAgICAgICBldmVudCA9IGV2ZW50c1tldl07XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9ldmVudHMuaGFzT3duUHJvcGVydHkoZXZlbnQpKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKGNhbGxiYWNrKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1tldmVudF0gPSBbXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGV2ZW50TGlzdCA9IHRoaXMuX2V2ZW50c1tldmVudF07XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudExpc3QubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50TGlzdFtpXSA9PT0gY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50TGlzdC5zcGxpY2UoaSwgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludm9rZSBhbGwgb2YgdGhlIGNhbGxiYWNrcyBib3VuZCB0byB0aGUgZXZlbnRcblx0XHQgKiAgd2l0aCBhbnkgYXJndW1lbnRzIHBhc3NlZCBpbi5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgZXZlbnQgIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cblx0XHQgKiAgQHBhcmFtIHsqfSBhcmdzLi4uIFRoZSBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb25zIGxpc3RlbmluZy5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9ldmVudHMpIHtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5hcHBseShudWxsLCBhcmd1bWVudHMpLnNsaWNlKDEpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50KSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGV2ZW50TGlzdCA9IHRoaXMuX2V2ZW50c1tldmVudF0uc2xpY2UoMCk7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZXZlbnRMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnRMaXN0W2ldLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgRW1pdHRlciBmdW5jdGlvbnMgKG9uL29mZi9lbWl0KSB0byB0aGUgb2JqZWN0XG5cdFx0ICogIEBwYXJhbSAge09iamVjdHxGdW5jdGlvbn0gIG9iamVjdCAgVGhlIG9iamVjdCBvciBjbGFzcyB0byBleHRlbmQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVtaXR0ZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIubWl4aW4gPSBmdW5jdGlvbiAob2JqZWN0KSB7XG5cdCAgICAgICAgdmFyIGZ1bmN0aW9ucyA9IFtcblx0ICAgICAgICAgICAgJ29uJyxcblx0ICAgICAgICAgICAgJ29uY2UnLFxuXHQgICAgICAgICAgICAnb2ZmJyxcblx0ICAgICAgICAgICAgJ2VtaXQnXG5cdCAgICAgICAgXTtcblx0ICAgICAgICBvYmplY3QuX2V2ZW50cyA9IHt9O1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBmdW5jID0gZnVuY3Rpb25zW2ldO1xuXHQgICAgICAgICAgICB2YXIgZW1pdHRlckZ1bmMgPSBUb25lLkVtaXR0ZXIucHJvdG90eXBlW2Z1bmNdO1xuXHQgICAgICAgICAgICBvYmplY3RbZnVuY10gPSBlbWl0dGVyRnVuYztcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRW1pdHRlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FbWl0dGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQSBUaW1lbGluZSBjbGFzcyBmb3Igc2NoZWR1bGluZyBhbmQgbWFpbnRhaW5pbmcgc3RhdGVcblx0XHQgKiAgICAgICAgIGFsb25nIGEgdGltZWxpbmUuIEFsbCBldmVudHMgbXVzdCBoYXZlIGEgXCJ0aW1lXCIgcHJvcGVydHkuXG5cdFx0ICogICAgICAgICBJbnRlcm5hbGx5LCBldmVudHMgYXJlIHN0b3JlZCBpbiB0aW1lIG9yZGVyIGZvciBmYXN0XG5cdFx0ICogICAgICAgICByZXRyaWV2YWwuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge1Bvc2l0aXZlfSBbbWVtb3J5PUluZmluaXR5XSBUaGUgbnVtYmVyIG9mIHByZXZpb3VzIGV2ZW50cyB0aGF0IGFyZSByZXRhaW5lZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydtZW1vcnknXSwgVG9uZS5UaW1lbGluZSk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhcnJheSBvZiBzY2hlZHVsZWQgdGltZWxpbmUgZXZlbnRzXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWVtb3J5IG9mIHRoZSB0aW1lbGluZSwgaS5lLlxuXHRcdFx0ICogIGhvdyBtYW55IGV2ZW50cyBpbiB0aGUgcGFzdCBpdCB3aWxsIHJldGFpblxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWVtb3J5ID0gb3B0aW9ucy5tZW1vcnk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaW1lbGluZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5kZWZhdWx0cyA9IHsgJ21lbW9yeSc6IEluZmluaXR5IH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRpbWVsaW5lI1xuXHRcdCAqICBAbmFtZSBsZW5ndGhcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UaW1lbGluZS5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZS5sZW5ndGg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSW5zZXJ0IGFuIGV2ZW50IG9iamVjdCBvbnRvIHRoZSB0aW1lbGluZS4gRXZlbnRzIG11c3QgaGF2ZSBhIFwidGltZVwiIGF0dHJpYnV0ZS5cblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCBvYmplY3QgdG8gaW5zZXJ0IGludG8gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGluZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIC8vdGhlIGV2ZW50IG5lZWRzIHRvIGhhdmUgYSB0aW1lIGF0dHJpYnV0ZVxuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYoZXZlbnQudGltZSkpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLlRpbWVsaW5lOiBldmVudHMgbXVzdCBoYXZlIGEgdGltZSBhdHRyaWJ1dGUnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZXZlbnQudGltZSA9IGV2ZW50LnRpbWUudmFsdWVPZigpO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaChldmVudC50aW1lKTtcblx0ICAgICAgICB0aGlzLl90aW1lbGluZS5zcGxpY2UoaW5kZXggKyAxLCAwLCBldmVudCk7XG5cdCAgICAgICAgLy9pZiB0aGUgbGVuZ3RoIGlzIG1vcmUgdGhhbiB0aGUgbWVtb3J5LCByZW1vdmUgdGhlIHByZXZpb3VzIG9uZXNcblx0ICAgICAgICBpZiAodGhpcy5sZW5ndGggPiB0aGlzLm1lbW9yeSkge1xuXHQgICAgICAgICAgICB2YXIgZGlmZiA9IHRoaXMubGVuZ3RoIC0gdGhpcy5tZW1vcnk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lLnNwbGljZSgwLCBkaWZmKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBhbiBldmVudCBmcm9tIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCBvYmplY3QgdG8gcmVtb3ZlIGZyb20gdGhlIGxpc3QuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl90aW1lbGluZS5pbmRleE9mKGV2ZW50KTtcblx0ICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIG5lYXJlc3QgZXZlbnQgd2hvc2UgdGltZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBjb21wYXJhdG9yIFdoaWNoIHZhbHVlIGluIHRoZSBvYmplY3QgdG8gY29tcGFyZVxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZXZlbnQgb2JqZWN0IHNldCBhZnRlciB0aGF0IHRpbWUuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAodGltZSwgY29tcGFyYXRvcikge1xuXHQgICAgICAgIGNvbXBhcmF0b3IgPSBUb25lLmRlZmF1bHRBcmcoY29tcGFyYXRvciwgJ3RpbWUnKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSwgY29tcGFyYXRvcik7XG5cdCAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbaW5kZXhdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBmaXJzdCBldmVudCBpbiB0aGUgdGltZWxpbmUgd2l0aG91dCByZW1vdmluZyBpdFxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZmlyc3QgZXZlbnQgb2JqZWN0XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5wZWVrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVswXTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBmaXJzdCBldmVudCBpbiB0aGUgdGltZWxpbmUgYW5kIHJlbW92ZSBpdFxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZmlyc3QgZXZlbnQgb2JqZWN0XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5zaGlmdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmUuc2hpZnQoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBldmVudCB3aGljaCBpcyBzY2hlZHVsZWQgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBjb21wYXJhdG9yIFdoaWNoIHZhbHVlIGluIHRoZSBvYmplY3QgdG8gY29tcGFyZVxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZXZlbnQgb2JqZWN0IGFmdGVyIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5nZXRBZnRlciA9IGZ1bmN0aW9uICh0aW1lLCBjb21wYXJhdG9yKSB7XG5cdCAgICAgICAgY29tcGFyYXRvciA9IFRvbmUuZGVmYXVsdEFyZyhjb21wYXJhdG9yLCAndGltZScpO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lLCBjb21wYXJhdG9yKTtcblx0ICAgICAgICBpZiAoaW5kZXggKyAxIDwgdGhpcy5fdGltZWxpbmUubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVtpbmRleCArIDFdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBldmVudCBiZWZvcmUgdGhlIGV2ZW50IGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgY29tcGFyYXRvciBXaGljaCB2YWx1ZSBpbiB0aGUgb2JqZWN0IHRvIGNvbXBhcmVcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGV2ZW50IG9iamVjdCBiZWZvcmUgdGhlIGdpdmVuIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmdldEJlZm9yZSA9IGZ1bmN0aW9uICh0aW1lLCBjb21wYXJhdG9yKSB7XG5cdCAgICAgICAgY29tcGFyYXRvciA9IFRvbmUuZGVmYXVsdEFyZyhjb21wYXJhdG9yLCAndGltZScpO1xuXHQgICAgICAgIHZhciBsZW4gPSB0aGlzLl90aW1lbGluZS5sZW5ndGg7XG5cdCAgICAgICAgLy9pZiBpdCdzIGFmdGVyIHRoZSBsYXN0IGl0ZW0sIHJldHVybiB0aGUgbGFzdCBpdGVtXG5cdCAgICAgICAgaWYgKGxlbiA+IDAgJiYgdGhpcy5fdGltZWxpbmVbbGVuIC0gMV1bY29tcGFyYXRvcl0gPCB0aW1lKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVtsZW4gLSAxXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUsIGNvbXBhcmF0b3IpO1xuXHQgICAgICAgIGlmIChpbmRleCAtIDEgPj0gMCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbaW5kZXggLSAxXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBldmVudHMgYWZ0ZXIgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICBpZiAodGhpcy5fdGltZWxpbmUubGVuZ3RoID4gMSkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2goYWZ0ZXIpO1xuXHQgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lW2luZGV4XS50aW1lID09PSBhZnRlcikge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vZ2V0IHRoZSBmaXJzdCBpdGVtIHdpdGggdGhhdCB0aW1lXG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IGluZGV4OyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGltZWxpbmVbaV0udGltZSA9PT0gYWZ0ZXIpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gdGhpcy5fdGltZWxpbmUuc2xpY2UoMCwgaW5kZXgpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IHRoaXMuX3RpbWVsaW5lLnNsaWNlKDAsIGluZGV4ICsgMSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IFtdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90aW1lbGluZS5sZW5ndGggPT09IDEpIHtcblx0ICAgICAgICAgICAgLy90aGUgZmlyc3QgaXRlbSdzIHRpbWVcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lWzBdLnRpbWUgPj0gYWZ0ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gW107XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBldmVudHMgYmVmb3JlIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBjYW5jZWwgYmVmb3JlLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuY2FuY2VsQmVmb3JlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgaWYgKGluZGV4ID49IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSB0aGlzLl90aW1lbGluZS5zbGljZShpbmRleCArIDEpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm5zIHRoZSBwcmV2aW91cyBldmVudCBpZiB0aGVyZSBpcyBvbmUuIG51bGwgb3RoZXJ3aXNlXG5cdFx0ICogQHBhcmFtICB7T2JqZWN0fSBldmVudCBUaGUgZXZlbnQgdG8gZmluZCB0aGUgcHJldmlvdXMgb25lIG9mXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSAgICAgICBUaGUgZXZlbnQgcmlnaHQgYmVmb3JlIHRoZSBnaXZlbiBldmVudFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUucHJldmlvdXNFdmVudCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3RpbWVsaW5lLmluZGV4T2YoZXZlbnQpO1xuXHQgICAgICAgIGlmIChpbmRleCA+IDApIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lW2luZGV4IC0gMV07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBEb2VzIGEgYmluYXJ5IHNlYXJjaCBvbiB0aGUgdGltZWxpbmUgYXJyYXkgYW5kIHJldHVybnMgdGhlXG5cdFx0ICogIG5lYXJlc3QgZXZlbnQgaW5kZXggd2hvc2UgdGltZSBpcyBhZnRlciBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgSWYgYSB0aW1lIGlzIHNlYXJjaGVkIGJlZm9yZSB0aGUgZmlyc3QgaW5kZXggaW4gdGhlIHRpbWVsaW5lLCAtMSBpcyByZXR1cm5lZC5cblx0XHQgKiAgSWYgdGhlIHRpbWUgaXMgYWZ0ZXIgdGhlIGVuZCwgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGl0ZW0gaXMgcmV0dXJuZWQuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgY29tcGFyYXRvciBXaGljaCB2YWx1ZSBpbiB0aGUgb2JqZWN0IHRvIGNvbXBhcmVcblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gdGhlIGluZGV4IGluIHRoZSB0aW1lbGluZSBhcnJheVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuX3NlYXJjaCA9IGZ1bmN0aW9uICh0aW1lLCBjb21wYXJhdG9yKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lLmxlbmd0aCA9PT0gMCkge1xuXHQgICAgICAgICAgICByZXR1cm4gLTE7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGNvbXBhcmF0b3IgPSBUb25lLmRlZmF1bHRBcmcoY29tcGFyYXRvciwgJ3RpbWUnKTtcblx0ICAgICAgICB2YXIgYmVnaW5uaW5nID0gMDtcblx0ICAgICAgICB2YXIgbGVuID0gdGhpcy5fdGltZWxpbmUubGVuZ3RoO1xuXHQgICAgICAgIHZhciBlbmQgPSBsZW47XG5cdCAgICAgICAgaWYgKGxlbiA+IDAgJiYgdGhpcy5fdGltZWxpbmVbbGVuIC0gMV1bY29tcGFyYXRvcl0gPD0gdGltZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gbGVuIC0gMTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgd2hpbGUgKGJlZ2lubmluZyA8IGVuZCkge1xuXHQgICAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIG1pZHBvaW50IGZvciByb3VnaGx5IGVxdWFsIHBhcnRpdGlvblxuXHQgICAgICAgICAgICB2YXIgbWlkUG9pbnQgPSBNYXRoLmZsb29yKGJlZ2lubmluZyArIChlbmQgLSBiZWdpbm5pbmcpIC8gMik7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3RpbWVsaW5lW21pZFBvaW50XTtcblx0ICAgICAgICAgICAgdmFyIG5leHRFdmVudCA9IHRoaXMuX3RpbWVsaW5lW21pZFBvaW50ICsgMV07XG5cdCAgICAgICAgICAgIGlmIChldmVudFtjb21wYXJhdG9yXSA9PT0gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgLy9jaG9vc2UgdGhlIGxhc3Qgb25lIHRoYXQgaGFzIHRoZSBzYW1lIHRpbWVcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBtaWRQb2ludDsgaSA8IHRoaXMuX3RpbWVsaW5lLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHRlc3RFdmVudCA9IHRoaXMuX3RpbWVsaW5lW2ldO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0ZXN0RXZlbnRbY29tcGFyYXRvcl0gPT09IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbWlkUG9pbnQgPSBpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiBtaWRQb2ludDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudFtjb21wYXJhdG9yXSA8IHRpbWUgJiYgbmV4dEV2ZW50W2NvbXBhcmF0b3JdID4gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG1pZFBvaW50O1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50W2NvbXBhcmF0b3JdID4gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgLy9zZWFyY2ggbG93ZXJcblx0ICAgICAgICAgICAgICAgIGVuZCA9IG1pZFBvaW50O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy9zZWFyY2ggdXBwZXJcblx0ICAgICAgICAgICAgICAgIGJlZ2lubmluZyA9IG1pZFBvaW50ICsgMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gLTE7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGl0ZXJhdG9yLiBBcHBsaWVzIGV4dHJhIHNhZmV0eSBjaGVja3MgZm9yXG5cdFx0ICogIHJlbW92aW5nIGl0ZW1zIGZyb20gdGhlIGFycmF5LlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrXG5cdFx0ICogIEBwYXJhbSAge051bWJlcj19ICAgIGxvd2VyQm91bmRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyPX0gICAgdXBwZXJCb3VuZFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuX2l0ZXJhdGUgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGxvd2VyQm91bmQsIHVwcGVyQm91bmQpIHtcblx0ICAgICAgICBsb3dlckJvdW5kID0gVG9uZS5kZWZhdWx0QXJnKGxvd2VyQm91bmQsIDApO1xuXHQgICAgICAgIHVwcGVyQm91bmQgPSBUb25lLmRlZmF1bHRBcmcodXBwZXJCb3VuZCwgdGhpcy5fdGltZWxpbmUubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUuc2xpY2UobG93ZXJCb3VuZCwgdXBwZXJCb3VuZCArIDEpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcywgZXZlbnQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdGhpcy5faXRlcmF0ZShjYWxsYmFjayk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBhdCBvciBiZWZvcmUgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoQmVmb3JlID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9pdGVyYXRlIG92ZXIgdGhlIGl0ZW1zIGluIHJldmVyc2Ugc28gdGhhdCByZW1vdmluZyBhbiBpdGVtIGRvZXNuJ3QgYnJlYWsgdGhpbmdzXG5cdCAgICAgICAgdmFyIHVwcGVyQm91bmQgPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgaWYgKHVwcGVyQm91bmQgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIDAsIHVwcGVyQm91bmQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEFmdGVyID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9pdGVyYXRlIG92ZXIgdGhlIGl0ZW1zIGluIHJldmVyc2Ugc28gdGhhdCByZW1vdmluZyBhbiBpdGVtIGRvZXNuJ3QgYnJlYWsgdGhpbmdzXG5cdCAgICAgICAgdmFyIGxvd2VyQm91bmQgPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgdGhpcy5faXRlcmF0ZShjYWxsYmFjaywgbG93ZXJCb3VuZCArIDEpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgYmV0d2VlbiB0aGUgc3RhcnRUaW1lIGFuZCBlbmRUaW1lLiBcblx0XHQgKiAgVGhlIHRpbWVyYW5nZSBpcyBpbmNsdXNpdmUgb2YgdGhlIHN0YXJ0VGltZSwgYnV0IGV4Y2x1c2l2ZSBvZiB0aGUgZW5kVGltZS4gXG5cdFx0ICogIHJhbmdlID0gW3N0YXJ0VGltZSwgZW5kVGltZSkuIFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBzdGFydFRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBlbmRUaW1lIFRoZSBlbmQgb2YgdGhlIHRlc3QgaW50ZXJ2YWwuIFxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoQmV0d2VlbiA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdmFyIGxvd2VyQm91bmQgPSB0aGlzLl9zZWFyY2goc3RhcnRUaW1lKTtcblx0ICAgICAgICB2YXIgdXBwZXJCb3VuZCA9IHRoaXMuX3NlYXJjaChlbmRUaW1lKTtcblx0ICAgICAgICBpZiAobG93ZXJCb3VuZCAhPT0gLTEgJiYgdXBwZXJCb3VuZCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lW2xvd2VyQm91bmRdLnRpbWUgIT09IHN0YXJ0VGltZSkge1xuXHQgICAgICAgICAgICAgICAgbG93ZXJCb3VuZCArPSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vZXhjbHVzaXZlIG9mIHRoZSBlbmQgdGltZVxuXHQgICAgICAgICAgICBpZiAodGhpcy5fdGltZWxpbmVbdXBwZXJCb3VuZF0udGltZSA9PT0gZW5kVGltZSkge1xuXHQgICAgICAgICAgICAgICAgdXBwZXJCb3VuZCAtPSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIGxvd2VyQm91bmQsIHVwcGVyQm91bmQpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAobG93ZXJCb3VuZCA9PT0gLTEpIHtcblx0ICAgICAgICAgICAgdGhpcy5faXRlcmF0ZShjYWxsYmFjaywgMCwgdXBwZXJCb3VuZCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgYXQgb3IgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuIFNpbWlsYXIgdG9cblx0XHQgKiAgZm9yRWFjaEFmdGVyLCBidXQgaW5jbHVkZXMgdGhlIGl0ZW0ocykgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoRnJvbSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vaXRlcmF0ZSBvdmVyIHRoZSBpdGVtcyBpbiByZXZlcnNlIHNvIHRoYXQgcmVtb3ZpbmcgYW4gaXRlbSBkb2Vzbid0IGJyZWFrIHRoaW5nc1xuXHQgICAgICAgIHZhciBsb3dlckJvdW5kID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIC8vd29yayBiYWNrd2FyZHMgdW50aWwgdGhlIGV2ZW50IHRpbWUgaXMgbGVzcyB0aGFuIHRpbWVcblx0ICAgICAgICB3aGlsZSAobG93ZXJCb3VuZCA+PSAwICYmIHRoaXMuX3RpbWVsaW5lW2xvd2VyQm91bmRdLnRpbWUgPj0gdGltZSkge1xuXHQgICAgICAgICAgICBsb3dlckJvdW5kLS07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIGxvd2VyQm91bmQgKyAxKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9pdGVyYXRlIG92ZXIgdGhlIGl0ZW1zIGluIHJldmVyc2Ugc28gdGhhdCByZW1vdmluZyBhbiBpdGVtIGRvZXNuJ3QgYnJlYWsgdGhpbmdzXG5cdCAgICAgICAgdmFyIHVwcGVyQm91bmQgPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgaWYgKHVwcGVyQm91bmQgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGUoZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoZXZlbnQudGltZSA9PT0gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcywgZXZlbnQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LCAwLCB1cHBlckJvdW5kKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5UaW1lbGluZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaW1lbGluZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCF3aW5kb3cuaGFzT3duUHJvcGVydHkoJ09mZmxpbmVBdWRpb0NvbnRleHQnKSAmJiB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ3dlYmtpdE9mZmxpbmVBdWRpb0NvbnRleHQnKSkge1xuXHQgICAgICAgICAgICB3aW5kb3cuT2ZmbGluZUF1ZGlvQ29udGV4dCA9IHdpbmRvdy53ZWJraXRPZmZsaW5lQXVkaW9Db250ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3JldHVybnMgcHJvbWlzZT9cblx0ICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBPZmZsaW5lQXVkaW9Db250ZXh0KDEsIDEsIDQ0MTAwKTtcblx0ICAgICAgICB2YXIgcmV0ID0gY29udGV4dC5zdGFydFJlbmRlcmluZygpO1xuXHQgICAgICAgIGlmICghKHJldCBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG5cdCAgICAgICAgICAgIE9mZmxpbmVBdWRpb0NvbnRleHQucHJvdG90eXBlLl9uYXRpdmVfc3RhcnRSZW5kZXJpbmcgPSBPZmZsaW5lQXVkaW9Db250ZXh0LnByb3RvdHlwZS5zdGFydFJlbmRlcmluZztcblx0ICAgICAgICAgICAgT2ZmbGluZUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuc3RhcnRSZW5kZXJpbmcgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGRvbmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUucmVuZGVyZWRCdWZmZXIpO1xuXHQgICAgICAgICAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmF0aXZlX3N0YXJ0UmVuZGVyaW5nKCk7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCF3aW5kb3cuaGFzT3duUHJvcGVydHkoJ0F1ZGlvQ29udGV4dCcpICYmIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnd2Via2l0QXVkaW9Db250ZXh0JykpIHtcblx0ICAgICAgICAgICAgd2luZG93LkF1ZGlvQ29udGV4dCA9IHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vbm90IGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50LCBidXQgb25seSBhbiBBUEkgcGxhY2Vob2xkZXJcblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY2xvc2UpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzRnVuY3Rpb24odGhpcy5zdXNwZW5kKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VzcGVuZCgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL25vdCBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudFxuXHQgICAgICAgIGlmICghQXVkaW9Db250ZXh0LnByb3RvdHlwZS5yZXN1bWUpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY3JlYXRlR2FpblxuXHQgICAgICAgIGlmICghQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVHYWluICYmIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2Fpbk5vZGUpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVHYWluID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVHYWluTm9kZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jcmVhdGVEZWxheVxuXHQgICAgICAgIGlmICghQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVEZWxheSAmJiBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZURlbGF5Tm9kZSkge1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZURlbGF5ID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVEZWxheU5vZGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vdGVzdCBkZWNvZGVBdWRpb0RhdGEgcmV0dXJucyBhIHByb21pc2Vcblx0ICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9oYXlvbmFvL3dlYi1hdWRpby1hcGktc2hpbS9ibG9iL21hc3Rlci9zcmMvQXVkaW9Db250ZXh0LmpzXG5cdCAgICAgICAgLy8gTUlUIExpY2Vuc2UgKGMpIDIwMTUgQG1vaGF5b25hb1xuXHQgICAgICAgIHZhciBkZWNvZGVBdWRpb0RhdGFQcm9taXNlID0gZmFsc2U7XG5cdCAgICAgICAgdmFyIG9mZmxpbmVDb250ZXh0ID0gbmV3IE9mZmxpbmVBdWRpb0NvbnRleHQoMSwgMSwgNDQxMDApO1xuXHQgICAgICAgIHZhciBhdWRpb0RhdGEgPSBuZXcgVWludDMyQXJyYXkoW1xuXHQgICAgICAgICAgICAxMTc5MDExNDEwLFxuXHQgICAgICAgICAgICA0OCxcblx0ICAgICAgICAgICAgMTE2MzI4MDcyNyxcblx0ICAgICAgICAgICAgNTQ0NTAxMDk0LFxuXHQgICAgICAgICAgICAxNixcblx0ICAgICAgICAgICAgMTMxMDczLFxuXHQgICAgICAgICAgICA0NDEwMCxcblx0ICAgICAgICAgICAgMTc2NDAwLFxuXHQgICAgICAgICAgICAxMDQ4NTgwLFxuXHQgICAgICAgICAgICAxNjM1MDE3MDYwLFxuXHQgICAgICAgICAgICA4LFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwXG5cdCAgICAgICAgXSkuYnVmZmVyO1xuXHQgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgIHZhciByZXQgPSBvZmZsaW5lQ29udGV4dC5kZWNvZGVBdWRpb0RhdGEoYXVkaW9EYXRhKTtcblx0ICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0ICAgICAgICAgICAgICAgIGRlY29kZUF1ZGlvRGF0YVByb21pc2UgPSB0cnVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICBkZWNvZGVBdWRpb0RhdGFQcm9taXNlID0gZmFsc2U7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICghZGVjb2RlQXVkaW9EYXRhUHJvbWlzZSkge1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLl9uYXRpdmVfZGVjb2RlQXVkaW9EYXRhID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5kZWNvZGVBdWRpb0RhdGE7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuZGVjb2RlQXVkaW9EYXRhID0gZnVuY3Rpb24gKGF1ZGlvRGF0YSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChzdWNjZXNzLCBlcnJvcikge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX25hdGl2ZV9kZWNvZGVBdWRpb0RhdGEoYXVkaW9EYXRhLCBzdWNjZXNzLCBlcnJvcik7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIEF1ZGlvQ29udGV4dC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW1pdHRlcn1cblx0XHQgKiAgQHBhcmFtIHtBdWRpb0NvbnRleHQ9fSBjb250ZXh0IG9wdGlvbmFsbHkgcGFzcyBpbiBhIGNvbnRleHRcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIuY2FsbCh0aGlzKTtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2NvbnRleHQnXSwgVG9uZS5Db250ZXh0KTtcblx0ICAgICAgICBpZiAoIW9wdGlvbnMuY29udGV4dCkge1xuXHQgICAgICAgICAgICBvcHRpb25zLmNvbnRleHQgPSBuZXcgd2luZG93LkF1ZGlvQ29udGV4dCgpO1xuXHQgICAgICAgICAgICBpZiAoIW9wdGlvbnMuY29udGV4dCkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgY3JlYXRlIEF1ZGlvQ29udGV4dC4gUG9zc2libHkgdG9vIG1hbnkgQXVkaW9Db250ZXh0cyBydW5uaW5nIGFscmVhZHkuJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY29udGV4dCA9IG9wdGlvbnMuY29udGV4dDtcblx0ICAgICAgICAvLyBleHRlbmQgYWxsIG9mIHRoZSBtZXRob2RzXG5cdCAgICAgICAgZm9yICh2YXIgcHJvcCBpbiB0aGlzLl9jb250ZXh0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlZmluZVByb3BlcnR5KHRoaXMuX2NvbnRleHQsIHByb3ApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVmYXVsdCBsYXRlbmN5IGhpbnRcblx0XHRcdCAqICBAdHlwZSAge1N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGF0ZW5jeUhpbnQgPSBvcHRpb25zLmxhdGVuY3lIaW50O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFuIG9iamVjdCBjb250YWluaW5nIGFsbCBvZiB0aGUgY29uc3RhbnRzIEF1ZGlvQnVmZmVyU291cmNlTm9kZXNcblx0XHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29uc3RhbnRzID0ge307XG5cdCAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAvLyBXT1JLRVJcblx0ICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgdGltZSBldmVudHMgYXJlIHNjaGVkdWxlZFxuXHRcdFx0ICogIGludG8gdGhlIGZ1dHVyZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb29rQWhlYWQgPSBvcHRpb25zLmxvb2tBaGVhZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIHJlZmVyZW5jZSB0byB0aGUgYWN0dWFsIGNvbXB1dGVkIHVwZGF0ZSBpbnRlcnZhbFxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb21wdXRlZFVwZGF0ZUludGVydmFsID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIHJlbGlhYmxlIGNhbGxiYWNrIG1ldGhvZFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtUaWNrZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aWNrZXIgPSBuZXcgVGlja2VyKHRoaXMuZW1pdC5iaW5kKHRoaXMsICd0aWNrJyksIG9wdGlvbnMuY2xvY2tTb3VyY2UsIG9wdGlvbnMudXBkYXRlSW50ZXJ2YWwpO1xuXHQgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgLy8gVElNRU9VVFNcblx0ICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsbCBvZiB0aGUgc2V0VGltZW91dCBldmVudHMuXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlRpbWVsaW5lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aW1lb3V0cyA9IG5ldyBUb25lLlRpbWVsaW5lKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRpbWVvdXQgaWQgY291bnRlclxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXRJZHMgPSAwO1xuXHQgICAgICAgIHRoaXMub24oJ3RpY2snLCB0aGlzLl90aW1lb3V0TG9vcC5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNvbnRleHQsIFRvbmUuRW1pdHRlcik7XG5cdCAgICBUb25lLkVtaXR0ZXIubWl4aW4oVG9uZS5Db250ZXh0KTtcblx0ICAgIC8qKlxuXHRcdCAqIGRlZmF1bHRzXG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2Nsb2NrU291cmNlJzogJ3dvcmtlcicsXG5cdCAgICAgICAgJ2xhdGVuY3lIaW50JzogJ2ludGVyYWN0aXZlJyxcblx0ICAgICAgICAnbG9va0FoZWFkJzogMC4xLFxuXHQgICAgICAgICd1cGRhdGVJbnRlcnZhbCc6IDAuMDNcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgRGVmaW5lIGEgcHJvcGVydHkgb24gdGhpcyBUb25lLkNvbnRleHQuXG5cdFx0ICogIFRoaXMgaXMgdXNlZCB0byBleHRlbmQgdGhlIG5hdGl2ZSBBdWRpb0NvbnRleHRcblx0XHQgKiAgQHBhcmFtICB7QXVkaW9Db250ZXh0fSAgY29udGV4dFxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBwcm9wXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLl9kZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChjb250ZXh0LCBwcm9wKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih0aGlzW3Byb3BdKSkge1xuXHQgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcCwge1xuXHQgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0W3Byb3BdID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0W3Byb3BdLmJpbmQoY29udGV4dCk7XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRbcHJvcF07XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbcHJvcF0gPSB2YWw7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGN1cnJlbnQgYXVkaW8gY29udGV4dCB0aW1lXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLm5vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dC5jdXJyZW50VGltZSArIHRoaXMubG9va0FoZWFkO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQcm9taXNlIHdoaWNoIGlzIGludm9rZWQgd2hlbiB0aGUgY29udGV4dCBpcyBydW5uaW5nLlxuXHRcdCAqICBUcmllcyB0byByZXN1bWUgdGhlIGNvbnRleHQgaWYgaXQncyBub3Qgc3RhcnRlZC5cblx0XHQgKiAgQHJldHVybiAge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLnJlYWR5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoZG9uZSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fY29udGV4dC5zdGF0ZSA9PT0gJ3J1bm5pbmcnKSB7XG5cdCAgICAgICAgICAgICAgICBkb25lKCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LnJlc3VtZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUHJvbWlzZSB3aGljaCBpcyBpbnZva2VkIHdoZW4gdGhlIGNvbnRleHQgaXMgcnVubmluZy5cblx0XHQgKiAgVHJpZXMgdG8gcmVzdW1lIHRoZSBjb250ZXh0IGlmIGl0J3Mgbm90IHN0YXJ0ZWQuXG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dC5jbG9zZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBUb25lLkNvbnRleHQuZW1pdCgnY2xvc2UnLCB0aGlzKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZW5lcmF0ZSBhIGxvb3BlZCBidWZmZXIgYXQgc29tZSBjb25zdGFudCB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdmFsXG5cdFx0ICogIEByZXR1cm4gIHtCdWZmZXJTb3VyY2VOb2RlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5nZXRDb25zdGFudCA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICBpZiAodGhpcy5fY29uc3RhbnRzW3ZhbF0pIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnN0YW50c1t2YWxdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLl9jb250ZXh0LmNyZWF0ZUJ1ZmZlcigxLCAxMjgsIHRoaXMuX2NvbnRleHQuc2FtcGxlUmF0ZSk7XG5cdCAgICAgICAgICAgIHZhciBhcnIgPSBidWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBhcnJbaV0gPSB2YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFyIGNvbnN0YW50ID0gdGhpcy5fY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcblx0ICAgICAgICAgICAgY29uc3RhbnQuY2hhbm5lbENvdW50ID0gMTtcblx0ICAgICAgICAgICAgY29uc3RhbnQuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgICAgIGNvbnN0YW50LmJ1ZmZlciA9IGJ1ZmZlcjtcblx0ICAgICAgICAgICAgY29uc3RhbnQubG9vcCA9IHRydWU7XG5cdCAgICAgICAgICAgIGNvbnN0YW50LnN0YXJ0KDApO1xuXHQgICAgICAgICAgICB0aGlzLl9jb25zdGFudHNbdmFsXSA9IGNvbnN0YW50O1xuXHQgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQ7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcHJpdmF0ZSBsb29wIHdoaWNoIGtlZXBzIHRyYWNrIG9mIHRoZSBjb250ZXh0IHNjaGVkdWxlZCB0aW1lb3V0c1xuXHRcdCAqICBJcyBpbnZva2VkIGZyb20gdGhlIGNsb2NrIHNvdXJjZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5fdGltZW91dExvb3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgd2hpbGUgKHRoaXMuX3RpbWVvdXRzICYmIHRoaXMuX3RpbWVvdXRzLmxlbmd0aCAmJiB0aGlzLl90aW1lb3V0cy5wZWVrKCkudGltZSA8PSBub3cpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZW91dHMuc2hpZnQoKS5jYWxsYmFjaygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQSBzZXRUaW1lb3V0IHdoaWNoIGlzIGdhdXJlbnRlZWQgYnkgdGhlIGNsb2NrIHNvdXJjZS5cblx0XHQgKiAgQWxzbyBydW5zIGluIHRoZSBvZmZsaW5lIGNvbnRleHQuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgZm4gICAgICAgVGhlIGNhbGxiYWNrIHRvIGludm9rZVxuXHRcdCAqICBAcGFyYW0gIHtTZWNvbmRzfSAgICB0aW1lb3V0ICBUaGUgdGltZW91dCBpbiBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm5zIHtOdW1iZXJ9IElEIHRvIHVzZSB3aGVuIGludm9raW5nIFRvbmUuQ29udGV4dC5jbGVhclRpbWVvdXRcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuc2V0VGltZW91dCA9IGZ1bmN0aW9uIChmbiwgdGltZW91dCkge1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXRJZHMrKztcblx0ICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0cy5hZGQoe1xuXHQgICAgICAgICAgICBjYWxsYmFjazogZm4sXG5cdCAgICAgICAgICAgIHRpbWU6IG5vdyArIHRpbWVvdXQsXG5cdCAgICAgICAgICAgIGlkOiB0aGlzLl90aW1lb3V0SWRzXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVvdXRJZHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFycyBhIHByZXZpb3VzbHkgc2NoZWR1bGVkIHRpbWVvdXQgd2l0aCBUb25lLmNvbnRleHQuc2V0VGltZW91dFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBpZCAgVGhlIElEIHJldHVybmVkIGZyb20gc2V0VGltZW91dFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Db250ZXh0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5jbGVhclRpbWVvdXQgPSBmdW5jdGlvbiAoaWQpIHtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0cy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQuaWQgPT09IGlkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZShldmVudCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSG93IG9mdGVuIHRoZSBXZWIgV29ya2VyIGNhbGxiYWNrIGlzIGludm9rZWQuXG5cdFx0ICogIFRoaXMgbnVtYmVyIGNvcnJlc3BvbmRzIHRvIGhvdyByZXNwb25zaXZlIHRoZSBzY2hlZHVsaW5nXG5cdFx0ICogIGNhbiBiZS4gQ29udGV4dC51cGRhdGVJbnRlcnZhbCArIENvbnRleHQubG9va0FoZWFkIGdpdmVzIHlvdSB0aGVcblx0XHQgKiAgdG90YWwgbGF0ZW5jeSBiZXR3ZWVuIHNjaGVkdWxpbmcgYW4gZXZlbnQgYW5kIGhlYXJpbmcgaXQuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNvbnRleHQjXG5cdFx0ICogIEBuYW1lIHVwZGF0ZUludGVydmFsXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Db250ZXh0LnByb3RvdHlwZSwgJ3VwZGF0ZUludGVydmFsJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGlja2VyLnVwZGF0ZUludGVydmFsO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja2VyLnVwZGF0ZUludGVydmFsID0gaW50ZXJ2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgV2hhdCB0aGUgc291cmNlIG9mIHRoZSBjbG9jayBpcywgZWl0aGVyIFwid29ya2VyXCIgKFdlYiBXb3JrZXIgW2RlZmF1bHRdKSxcblx0XHQgKiAgXCJ0aW1lb3V0XCIgKHNldFRpbWVvdXQpLCBvciBcIm9mZmxpbmVcIiAobm9uZSkuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNvbnRleHQjXG5cdFx0ICogIEBuYW1lIGNsb2NrU291cmNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Db250ZXh0LnByb3RvdHlwZSwgJ2Nsb2NrU291cmNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGlja2VyLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tlci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdHlwZSBvZiBwbGF5YmFjaywgd2hpY2ggYWZmZWN0cyB0cmFkZW9mZnMgYmV0d2VlbiBhdWRpb1xuXHRcdCAqICBvdXRwdXQgbGF0ZW5jeSBhbmQgcmVzcG9uc2l2ZW5lc3MuXG5cdFx0ICpcblx0XHQgKiAgSW4gYWRkaXRpb24gdG8gc2V0dGluZyB0aGUgdmFsdWUgaW4gc2Vjb25kcywgdGhlIGxhdGVuY3lIaW50IGFsc29cblx0XHQgKiAgYWNjZXB0cyB0aGUgc3RyaW5ncyBcImludGVyYWN0aXZlXCIgKHByaW9yaXRpemVzIGxvdyBsYXRlbmN5KSxcblx0XHQgKiAgXCJwbGF5YmFja1wiIChwcmlvcml0aXplcyBzdXN0YWluZWQgcGxheWJhY2spLCBcImJhbGFuY2VkXCIgKGJhbGFuY2VzXG5cdFx0ICogIGxhdGVuY3kgYW5kIHBlcmZvcm1hbmNlKSwgYW5kIFwiZmFzdGVzdFwiIChsb3dlc3QgbGF0ZW5jeSwgbWlnaHQgZ2xpdGNoIG1vcmUgb2Z0ZW4pLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfFNlY29uZHN9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNvbnRleHQjXG5cdFx0ICogIEBuYW1lIGxhdGVuY3lIaW50XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zZXQgdGhlIGxvb2tBaGVhZCB0byAwLjMgc2Vjb25kc1xuXHRcdCAqIFRvbmUuY29udGV4dC5sYXRlbmN5SGludCA9IDAuMztcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNvbnRleHQucHJvdG90eXBlLCAnbGF0ZW5jeUhpbnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sYXRlbmN5SGludDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGhpbnQpIHtcblx0ICAgICAgICAgICAgdmFyIGxvb2tBaGVhZCA9IGhpbnQ7XG5cdCAgICAgICAgICAgIHRoaXMuX2xhdGVuY3lIaW50ID0gaGludDtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNTdHJpbmcoaGludCkpIHtcblx0ICAgICAgICAgICAgICAgIHN3aXRjaCAoaGludCkge1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnaW50ZXJhY3RpdmUnOlxuXHQgICAgICAgICAgICAgICAgICAgIGxvb2tBaGVhZCA9IDAuMTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LmxhdGVuY3lIaW50ID0gaGludDtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ3BsYXliYWNrJzpcblx0ICAgICAgICAgICAgICAgICAgICBsb29rQWhlYWQgPSAwLjg7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC5sYXRlbmN5SGludCA9IGhpbnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdiYWxhbmNlZCc6XG5cdCAgICAgICAgICAgICAgICAgICAgbG9va0FoZWFkID0gMC4yNTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LmxhdGVuY3lIaW50ID0gaGludDtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ2Zhc3Rlc3QnOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHQubGF0ZW5jeUhpbnQgPSAnaW50ZXJhY3RpdmUnO1xuXHQgICAgICAgICAgICAgICAgICAgIGxvb2tBaGVhZCA9IDAuMDE7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5sb29rQWhlYWQgPSBsb29rQWhlYWQ7XG5cdCAgICAgICAgICAgIHRoaXMudXBkYXRlSW50ZXJ2YWwgPSBsb29rQWhlYWQgLyAzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFVubGlrZSBvdGhlciBkaXNwb3NlIG1ldGhvZHMsIHRoaXMgcmV0dXJucyBhIFByb21pc2Vcblx0XHQgKiAgd2hpY2ggZXhlY3V0ZXMgd2hlbiB0aGUgY29udGV4dCBpcyBjbG9zZWQgYW5kIGRpc3Bvc2VkXG5cdFx0ICogIEByZXR1cm5zIHtQcm9taXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2UoKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tlciA9IG51bGw7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVvdXRzLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZW91dHMgPSBudWxsO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjb24gaW4gdGhpcy5fY29uc3RhbnRzKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jb25zdGFudHNbY29uXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRzID0gbnVsbDtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEBjbGFzcyBBIGNsYXNzIHdoaWNoIHByb3ZpZGVzIGEgcmVsaWFibGUgY2FsbGJhY2sgdXNpbmcgZWl0aGVyXG5cdFx0ICogICAgICAgIGEgV2ViIFdvcmtlciwgb3IgaWYgdGhhdCBpc24ndCBzdXBwb3J0ZWQsIGZhbGxzIGJhY2sgdG8gc2V0VGltZW91dC5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgdmFyIFRpY2tlciA9IGZ1bmN0aW9uIChjYWxsYmFjaywgdHlwZSwgdXBkYXRlSW50ZXJ2YWwpIHtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEVpdGhlciBcIndvcmtlclwiIG9yIFwidGltZW91dFwiXG5cdFx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHVwZGF0ZSBpbnRlcnZhbCBvZiB0aGUgd29ya2VyXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3VwZGF0ZUludGVydmFsID0gdXBkYXRlSW50ZXJ2YWw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzXG5cdFx0XHQgKiBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2FsbGJhY2sgPSBUb25lLmRlZmF1bHRBcmcoY2FsbGJhY2ssIFRvbmUubm9PcCk7XG5cdCAgICAgICAgLy9jcmVhdGUgdGhlIGNsb2NrIHNvdXJjZSBmb3IgdGhlIGZpcnN0IHRpbWVcblx0ICAgICAgICB0aGlzLl9jcmVhdGVDbG9jaygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwb3NzaWJsZSB0aWNrZXIgdHlwZXNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUaWNrZXIuVHlwZSA9IHtcblx0ICAgICAgICBXb3JrZXI6ICd3b3JrZXInLFxuXHQgICAgICAgIFRpbWVvdXQ6ICd0aW1lb3V0Jyxcblx0ICAgICAgICBPZmZsaW5lOiAnb2ZmbGluZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2VuZXJhdGUgYSB3ZWIgd29ya2VyXG5cdFx0ICogIEByZXR1cm4gIHtXZWJXb3JrZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUaWNrZXIucHJvdG90eXBlLl9jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9VUkwgU2hpbVxuXHQgICAgICAgIHdpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cdCAgICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbLy90aGUgaW5pdGlhbCB0aW1lb3V0IHRpbWVcblx0ICAgICAgICAgICAgJ3ZhciB0aW1lb3V0VGltZSA9ICcgKyAodGhpcy5fdXBkYXRlSW50ZXJ2YWwgKiAxMDAwKS50b0ZpeGVkKDEpICsgJzsnICsgLy9vbm1lc3NhZ2UgY2FsbGJhY2tcblx0ICAgICAgICAgICAgJ3NlbGYub25tZXNzYWdlID0gZnVuY3Rpb24obXNnKXsnICsgJ1xcdHRpbWVvdXRUaW1lID0gcGFyc2VJbnQobXNnLmRhdGEpOycgKyAnfTsnICsgLy90aGUgdGljayBmdW5jdGlvbiB3aGljaCBwb3N0cyBhIG1lc3NhZ2Vcblx0ICAgICAgICAgICAgLy9hbmQgc2NoZWR1bGVzIGEgbmV3IHRpY2tcblx0ICAgICAgICAgICAgJ2Z1bmN0aW9uIHRpY2soKXsnICsgJ1xcdHNldFRpbWVvdXQodGljaywgdGltZW91dFRpbWUpOycgKyAnXFx0c2VsZi5wb3N0TWVzc2FnZShcXCd0aWNrXFwnKTsnICsgJ30nICsgLy9jYWxsIHRpY2sgaW5pdGlhbGx5XG5cdCAgICAgICAgICAgICd0aWNrKCk7J10pO1xuXHQgICAgICAgIHZhciBibG9iVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblx0ICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcihibG9iVXJsKTtcblx0ICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gdGhpcy5fY2FsbGJhY2suYmluZCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93b3JrZXIgPSB3b3JrZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ3JlYXRlIGEgdGltZW91dCBsb29wXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRpY2tlci5wcm90b3R5cGUuX2NyZWF0ZVRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9jcmVhdGVUaW1lb3V0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrKCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpLCB0aGlzLl91cGRhdGVJbnRlcnZhbCAqIDEwMDApO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENyZWF0ZSB0aGUgY2xvY2sgc291cmNlLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUaWNrZXIucHJvdG90eXBlLl9jcmVhdGVDbG9jayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVGlja2VyLlR5cGUuV29ya2VyKSB7XG5cdCAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVXb3JrZXIoKTtcblx0ICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICAgICAgLy8gd29ya2VycyBub3Qgc3VwcG9ydGVkLCBmYWxsYmFjayB0byB0aW1lb3V0XG5cdCAgICAgICAgICAgICAgICB0aGlzLl90eXBlID0gVGlja2VyLlR5cGUuVGltZW91dDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUNsb2NrKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRpY2tlci5UeXBlLlRpbWVvdXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY3JlYXRlVGltZW91dCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAbWVtYmVyT2YgVGlja2VyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdXBkYXRlSW50ZXJ2YWxcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRpY2tlci5wcm90b3R5cGUsICd1cGRhdGVJbnRlcnZhbCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZUludGVydmFsO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdXBkYXRlSW50ZXJ2YWwgPSBNYXRoLm1heChpbnRlcnZhbCwgMTI4IC8gNDQxMDApO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVGlja2VyLlR5cGUuV29ya2VyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl93b3JrZXIucG9zdE1lc3NhZ2UoTWF0aC5tYXgoaW50ZXJ2YWwgKiAxMDAwLCAxKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSB0aWNrZXIsIGVpdGhlciBhIHdvcmtlciBvciBhIHRpbWVvdXRcblx0XHQgKiBAbWVtYmVyT2YgVGlja2VyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGlja2VyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9kaXNwb3NlQ2xvY2soKTtcblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUNsb2NrKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cCB0aGUgY3VycmVudCBjbG9jayBzb3VyY2Vcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLnByb3RvdHlwZS5fZGlzcG9zZUNsb2NrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl90aW1lb3V0KSB7XG5cdCAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLl93b3JrZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fd29ya2VyLnRlcm1pbmF0ZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl93b3JrZXIub25tZXNzYWdlID0gbnVsbDtcblx0ICAgICAgICAgICAgdGhpcy5fd29ya2VyID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2Rpc3Bvc2VDbG9jaygpO1xuXHQgICAgICAgIHRoaXMuX2NhbGxiYWNrID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2hpbSBhbGwgY29ubmVjdC9kaXNjb25uZWN0IGFuZCBzb21lIGRlcHJlY2F0ZWQgbWV0aG9kcyB3aGljaCBhcmUgc3RpbGwgaW5cblx0XHQgKiAgc29tZSBvbGRlciBpbXBsZW1lbnRhdGlvbnMuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLmdldENvbnRleHQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBuYXRpdmVDb25uZWN0ID0gQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0O1xuXHQgICAgICAgIHZhciBuYXRpdmVEaXNjb25uZWN0ID0gQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNjb25uZWN0O1xuXHQgICAgICAgIC8vcmVwbGFjZSB0aGUgb2xkIGNvbm5lY3QgbWV0aG9kXG5cdCAgICAgICAgZnVuY3Rpb24gdG9uZUNvbm5lY3QoQiwgb3V0TnVtLCBpbk51bSkge1xuXHQgICAgICAgICAgICBpZiAoQi5pbnB1dCkge1xuXHQgICAgICAgICAgICAgICAgaW5OdW0gPSBUb25lLmRlZmF1bHRBcmcoaW5OdW0sIDApO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheShCLmlucHV0KSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3QoQi5pbnB1dFtpbk51bV0pO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0KEIuaW5wdXQsIG91dE51bSwgaW5OdW0pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoQiBpbnN0YW5jZW9mIEF1ZGlvTm9kZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVDb25uZWN0LmNhbGwodGhpcywgQiwgb3V0TnVtLCBpbk51bSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCO1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUNvbm5lY3QuY2FsbCh0aGlzLCBCLCBvdXROdW0pO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQjtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdlcnJvciBjb25uZWN0aW5nIHRvIG5vZGU6ICcgKyBCICsgJ1xcbicgKyBlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3JlcGxhY2UgdGhlIG9sZCBkaXNjb25uZWN0IG1ldGhvZFxuXHQgICAgICAgIGZ1bmN0aW9uIHRvbmVEaXNjb25uZWN0KEIsIG91dE51bSwgaW5OdW0pIHtcblx0ICAgICAgICAgICAgaWYgKEIgJiYgQi5pbnB1dCAmJiBUb25lLmlzQXJyYXkoQi5pbnB1dCkpIHtcblx0ICAgICAgICAgICAgICAgIGluTnVtID0gVG9uZS5kZWZhdWx0QXJnKGluTnVtLCAwKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdChCLmlucHV0W2luTnVtXSwgb3V0TnVtLCAwKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChCICYmIEIuaW5wdXQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdChCLmlucHV0LCBvdXROdW0sIGluTnVtKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbmF0aXZlRGlzY29ubmVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXJyb3IgZGlzY29ubmVjdGluZyBub2RlOiAnICsgQiArICdcXG4nICsgZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdCAhPT0gdG9uZUNvbm5lY3QpIHtcblx0ICAgICAgICAgICAgQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0ID0gdG9uZUNvbm5lY3Q7XG5cdCAgICAgICAgICAgIEF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzY29ubmVjdCA9IHRvbmVEaXNjb25uZWN0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLy8gc2V0IHRoZSBhdWRpbyBjb250ZXh0IGluaXRpYWxseSwgYW5kIGlmIG9uZSBpcyBub3QgYWxyZWFkeSBjcmVhdGVkXG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQgJiYgIVRvbmUuaW5pdGlhbGl6ZWQpIHtcblx0ICAgICAgICBUb25lLmNvbnRleHQgPSBuZXcgVG9uZS5Db250ZXh0KCk7XG5cdCAgICAgICAgLy8gbG9nIG9uIGZpcnN0IGluaXRpYWxpemF0aW9uXG5cdCAgICAgICAgLy8gYWxsb3cgb3B0aW9uYWwgc2lsZW5jaW5nIG9mIHRoaXMgbG9nXG5cdCAgICAgICAgaWYgKCF3aW5kb3cuVE9ORV9TSUxFTkNFX1ZFUlNJT05fTE9HR0lORykge1xuXHQgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXHQgICAgICAgICAgICBjb25zb2xlLmxvZygnJWMgKiBUb25lLmpzICcgKyBUb25lLnZlcnNpb24gKyAnICogJywgJ2JhY2tncm91bmQ6ICMwMDA7IGNvbG9yOiAjZmZmJyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSBlbHNlIGlmICghVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXHQgICAgICAgIGNvbnNvbGUud2FybignVGhpcyBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgVG9uZS5qcycpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIFRvbmUuQ29udGV4dDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkF1ZGlvTm9kZSBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY2xhc3NlcyB3aGljaCBwcm9jZXNzIGF1ZGlvLlxuXHRcdCAqICAgICAgICAgQXVkaW9Ob2RlcyBoYXZlIGlucHV0cyBhbmQgb3V0cHV0cy5cblx0XHQgKiAgQHBhcmFtXHR7QXVkaW9Db250ZXh0PX0gY29udGV4dFx0VGhlIGF1ZGlvIGNvbnRleHQgdG8gdXNlIHdpdGggdGhlIGNsYXNzXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8vdXNlIHRoZSBkZWZhdWx0IGNvbnRleHQgaWYgb25lIGlzIG5vdCBwYXNzZWQgaW5cblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2NvbnRleHQnXSwgeyAnY29udGV4dCc6IFRvbmUuY29udGV4dCB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBBdWRpb0NvbnRleHQgb2YgdGhpcyBpbnN0YW5jZVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIHtBdWRpb0NvbnRleHR9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb250ZXh0ID0gb3B0aW9ucy5jb250ZXh0O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgYXVkaW8gY29udGV4dCBiZWxvbmdpbmcgdG8gdGhpcyBpbnN0YW5jZS5cblx0XHQgKiBAdHlwZSB7VG9uZS5Db250ZXh0fVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1ZGlvTm9kZSNcblx0XHQgKiBAbmFtZSBjb250ZXh0XG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLCAnY29udGV4dCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ3JlYXRlIGlucHV0IGFuZCBvdXRwdXRzIGZvciB0aGlzIG9iamVjdC5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgW2lucHV0PTBdICAgVGhlIG51bWJlciBvZiBpbnB1dHNcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgW291dHB1dHM9MF0gIFRoZSBudW1iZXIgb2Ygb3V0cHV0c1xuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5BdWRpb05vZGV9ICB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY3JlYXRlSW5zT3V0cyA9IGZ1bmN0aW9uIChpbnB1dHMsIG91dHB1dHMpIHtcblx0ICAgICAgICBpZiAoaW5wdXRzID09PSAxKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoaW5wdXRzID4gMSkge1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0ID0gbmV3IEFycmF5KGlucHV0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChvdXRwdXRzID09PSAxKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKG91dHB1dHMgPiAxKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0ID0gbmV3IEFycmF5KG91dHB1dHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2hhbm5lbENvdW50IGlzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgdXNlZCB3aGVuIHVwLW1peGluZyBhbmQgZG93bi1taXhpbmdcblx0XHQgKiAgY29ubmVjdGlvbnMgdG8gYW55IGlucHV0cyB0byB0aGUgbm9kZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMiBleGNlcHQgZm9yXG5cdFx0ICogIHNwZWNpZmljIG5vZGVzIHdoZXJlIGl0cyB2YWx1ZSBpcyBzcGVjaWFsbHkgZGV0ZXJtaW5lZC5cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyb2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIGNoYW5uZWxDb3VudFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdjaGFubmVsQ291bnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsQ291bnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsQ291bnQgPSBjO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNoYW5uZWxDb3VudE1vZGUgZGV0ZXJtaW5lcyBob3cgY2hhbm5lbHMgd2lsbCBiZSBjb3VudGVkIHdoZW4gdXAtbWl4aW5nIGFuZFxuXHRcdCAqICBkb3duLW1peGluZyBjb25uZWN0aW9ucyB0byBhbnkgaW5wdXRzIHRvIHRoZSBub2RlLlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcIm1heFwiLiBUaGlzIGF0dHJpYnV0ZSBoYXMgbm8gZWZmZWN0IGZvciBub2RlcyB3aXRoIG5vIGlucHV0cy5cblx0XHQgKiAgQG1lbWJlcm9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbmFtZSBjaGFubmVsQ291bnRNb2RlXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ2NoYW5uZWxDb3VudE1vZGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsQ291bnRNb2RlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbENvdW50TW9kZSA9IG07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2hhbm5lbEludGVycHJldGF0aW9uIGRldGVybWluZXMgaG93IGluZGl2aWR1YWwgY2hhbm5lbHMgd2lsbCBiZSB0cmVhdGVkXG5cdFx0ICogIHdoZW4gdXAtbWl4aW5nIGFuZCBkb3duLW1peGluZyBjb25uZWN0aW9ucyB0byBhbnkgaW5wdXRzIHRvIHRoZSBub2RlLlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcInNwZWFrZXJzXCIuXG5cdFx0ICogIEBtZW1iZXJvZiBUb25lLkF1ZGlvTm9kZSNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgY2hhbm5lbEludGVycHJldGF0aW9uXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ2NoYW5uZWxJbnRlcnByZXRhdGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0LmNoYW5uZWxJbnRlcnByZXRhdGlvbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0LmNoYW5uZWxJbnRlcnByZXRhdGlvbiA9IGk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBpbnB1dHMgZmVlZGluZyBpbnRvIHRoZSBBdWRpb05vZGUuXG5cdFx0ICogIEZvciBzb3VyY2Ugbm9kZXMsIHRoaXMgd2lsbCBiZSAwLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBudW1iZXJPZklucHV0c1xuXHRcdCAqICBAbWVtYmVyb2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ251bWJlck9mSW5wdXRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbnB1dCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aGlzLmlucHV0KSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0Lmxlbmd0aDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2Ygb3V0cHV0cyBjb21pbmcgb3V0IG9mIHRoZSBBdWRpb05vZGUuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIG51bWJlck9mT3V0cHV0c1xuXHRcdCAqICBAbWVtYmVyb2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ251bWJlck9mT3V0cHV0cycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0KSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHRoaXMub3V0cHV0KSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5sZW5ndGg7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIENhbGxlZCB3aGVuIGFuIGF1ZGlvIHBhcmFtIGNvbm5lY3RzIHRvIHRoaXMgbm9kZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuX29uQ29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY29ubmVjdCB0aGUgb3V0cHV0IG9mIGEgVG9uZU5vZGUgdG8gYW4gQXVkaW9QYXJhbSwgQXVkaW9Ob2RlLCBvciBUb25lTm9kZVxuXHRcdCAqICBAcGFyYW0gIHtUb25lIHwgQXVkaW9QYXJhbSB8IEF1ZGlvTm9kZX0gdW5pdFxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE51bT0wXSBvcHRpb25hbGx5IHdoaWNoIG91dHB1dCB0byBjb25uZWN0IGZyb21cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtpbnB1dE51bT0wXSBvcHRpb25hbGx5IHdoaWNoIGlucHV0IHRvIGNvbm5lY3QgdG9cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uICh1bml0LCBvdXRwdXROdW0sIGlucHV0TnVtKSB7XG5cdCAgICAgICAgaWYgKHVuaXQuX29uQ29ubmVjdCkge1xuXHQgICAgICAgICAgICB1bml0Ll9vbkNvbm5lY3QodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGhpcy5vdXRwdXQpKSB7XG5cdCAgICAgICAgICAgIG91dHB1dE51bSA9IFRvbmUuZGVmYXVsdEFyZyhvdXRwdXROdW0sIDApO1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dFtvdXRwdXROdW1dLmNvbm5lY3QodW5pdCwgMCwgaW5wdXROdW0pO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0LmNvbm5lY3QodW5pdCwgb3V0cHV0TnVtLCBpbnB1dE51bSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNjb25uZWN0IHRoZSBvdXRwdXRcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ8QXVkaW9Ob2RlfSBvdXRwdXQgRWl0aGVyIHRoZSBvdXRwdXQgaW5kZXggdG8gZGlzY29ubmVjdFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgb3V0cHV0IGlzIGFuIGFycmF5LCBvciB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSB0byBkaXNjb25uZWN0IGZyb20uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIG91dHB1dE51bSwgaW5wdXROdW0pIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHRoaXMub3V0cHV0KSkge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc051bWJlcihkZXN0aW5hdGlvbikpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0W2Rlc3RpbmF0aW9uXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBvdXRwdXROdW0gPSBUb25lLmRlZmF1bHRBcmcob3V0cHV0TnVtLCAwKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0W291dHB1dE51bV0uZGlzY29ubmVjdChkZXN0aW5hdGlvbiwgMCwgaW5wdXROdW0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQuZGlzY29ubmVjdC5hcHBseSh0aGlzLm91dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbm5lY3QgdGhlIG91dHB1dCBvZiB0aGlzIG5vZGUgdG8gdGhlIHJlc3Qgb2YgdGhlIG5vZGVzIGluIHNlcmllcy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgLy9jb25uZWN0IGEgbm9kZSB0byBhbiBlZmZlY3QsIHBhblZvbCBhbmQgdGhlbiB0byB0aGUgbWFzdGVyIG91dHB1dFxuXHRcdCAqICBub2RlLmNoYWluKGVmZmVjdCwgcGFuVm9sLCBUb25lLk1hc3Rlcik7XG5cdFx0ICogIEBwYXJhbSB7Li4uQXVkaW9QYXJhbXxUb25lfEF1ZGlvTm9kZX0gbm9kZXNcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY2hhaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRVbml0ID0gdGhpcztcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgdG9Vbml0ID0gYXJndW1lbnRzW2ldO1xuXHQgICAgICAgICAgICBjdXJyZW50VW5pdC5jb25uZWN0KHRvVW5pdCk7XG5cdCAgICAgICAgICAgIGN1cnJlbnRVbml0ID0gdG9Vbml0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY29ubmVjdCB0aGUgb3V0cHV0IG9mIHRoaXMgbm9kZSB0byB0aGUgcmVzdCBvZiB0aGUgbm9kZXMgaW4gcGFyYWxsZWwuXG5cdFx0ICogIEBwYXJhbSB7Li4uQXVkaW9QYXJhbXxUb25lfEF1ZGlvTm9kZX0gbm9kZXNcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZmFuID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29ubmVjdChhcmd1bWVudHNbaV0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICBpZiAod2luZG93LkF1ZGlvTm9kZSkge1xuXHQgICAgICAgIC8vZ2l2ZSBuYXRpdmUgbm9kZXMgY2hhaW4gYW5kIGZhbiBtZXRob2RzXG5cdCAgICAgICAgQXVkaW9Ob2RlLnByb3RvdHlwZS5jaGFpbiA9IFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5jaGFpbjtcblx0ICAgICAgICBBdWRpb05vZGUucHJvdG90eXBlLmZhbiA9IFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5mYW47XG5cdCAgICB9XG5cdCAgICAvKipcblx0XHQgKiBEaXNwb3NlIGFuZCBkaXNjb25uZWN0XG5cdFx0ICogQHJldHVybiB7VG9uZS5BdWRpb05vZGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZCh0aGlzLmlucHV0KSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbnB1dCBpbnN0YW5jZW9mIEF1ZGlvTm9kZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5pbnB1dCA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZCh0aGlzLm91dHB1dCkpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0IGluc3RhbmNlb2YgQXVkaW9Ob2RlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLm91dHB1dC5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9jb250ZXh0ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BdWRpb05vZGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQmFzZSBjbGFzcyBmb3IgYWxsIFNpZ25hbHMuIFVzZWQgSW50ZXJuYWxseS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbEJhc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNpZ25hbEJhc2UsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBXaGVuIHNpZ25hbHMgY29ubmVjdCB0byBvdGhlciBzaWduYWxzIG9yIEF1ZGlvUGFyYW1zLFxuXHRcdCAqICB0aGV5IHRha2Ugb3ZlciB0aGUgb3V0cHV0IHZhbHVlIG9mIHRoYXQgc2lnbmFsIG9yIEF1ZGlvUGFyYW0uXG5cdFx0ICogIEZvciBhbGwgb3RoZXIgbm9kZXMsIHRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZSBhcyBhIGRlZmF1bHQgPGNvZGU+Y29ubmVjdDwvY29kZT4uXG5cdFx0ICpcblx0XHQgKiAgQG92ZXJyaWRlXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9QYXJhbXxBdWRpb05vZGV8VG9uZS5TaWduYWx8VG9uZX0gbm9kZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE51bWJlcj0wXSBUaGUgb3V0cHV0IG51bWJlciB0byBjb25uZWN0IGZyb20uXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbaW5wdXROdW1iZXI9MF0gVGhlIGlucHV0IG51bWJlciB0byBjb25uZWN0IHRvLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWxCYXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAobm9kZSwgb3V0cHV0TnVtYmVyLCBpbnB1dE51bWJlcikge1xuXHQgICAgICAgIC8vemVybyBpdCBvdXQgc28gdGhhdCB0aGUgc2lnbmFsIGNhbiBoYXZlIGZ1bGwgY29udHJvbFxuXHQgICAgICAgIGlmIChUb25lLlNpZ25hbCAmJiBUb25lLlNpZ25hbCA9PT0gbm9kZS5jb25zdHJ1Y3RvciB8fCBUb25lLlBhcmFtICYmIFRvbmUuUGFyYW0gPT09IG5vZGUuY29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgLy9jYW5jZWwgY2hhbmdlc1xuXHQgICAgICAgICAgICBub2RlLl9wYXJhbS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMoMCk7XG5cdCAgICAgICAgICAgIC8vcmVzZXQgdGhlIHZhbHVlXG5cdCAgICAgICAgICAgIG5vZGUuX3BhcmFtLnZhbHVlID0gMDtcblx0ICAgICAgICAgICAgLy9tYXJrIHRoZSB2YWx1ZSBhcyBvdmVycmlkZGVuXG5cdCAgICAgICAgICAgIG5vZGUub3ZlcnJpZGRlbiA9IHRydWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgQXVkaW9QYXJhbSkge1xuXHQgICAgICAgICAgICBub2RlLmNhbmNlbFNjaGVkdWxlZFZhbHVlcygwKTtcblx0ICAgICAgICAgICAgbm9kZS52YWx1ZSA9IDA7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0LmNhbGwodGhpcywgbm9kZSwgb3V0cHV0TnVtYmVyLCBpbnB1dE51bWJlcik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2lnbmFsQmFzZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgLy9maXhlcyBzYWZhcmkgb25seSBidWcgd2hpY2ggaXMgc3RpbGwgcHJlc2VudCBpbiAxMVxuXHQgICAgICAgIHZhciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcblx0ICAgICAgICB2YXIgaXNTYWZhcmkgPSB1YS5pbmNsdWRlcygnc2FmYXJpJykgJiYgIXVhLmluY2x1ZGVzKCdjaHJvbWUnKTtcblx0ICAgICAgICBpZiAoaXNTYWZhcmkpIHtcblx0ICAgICAgICAgICAgdmFyIFdhdmVTaGFwZXJOb2RlID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsTm9kZSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IGNvbnRleHQuX25hdGl2ZV9jcmVhdGVXYXZlU2hhcGVyKCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHRoaXMuX2ludGVybmFsTm9kZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmluZVByb3BlcnR5KHRoaXMuX2ludGVybmFsTm9kZSwgcHJvcCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXYXZlU2hhcGVyTm9kZS5wcm90b3R5cGUsICdjdXJ2ZScsIHtcblx0ICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJ2ZTtcblx0ICAgICAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjdXJ2ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnZlID0gY3VydmU7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShjdXJ2ZS5sZW5ndGggKyAxKTtcblx0ICAgICAgICAgICAgICAgICAgICBhcnJheS5zZXQoY3VydmUsIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgIGFycmF5WzBdID0gY3VydmVbMF07XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxOb2RlLmN1cnZlID0gYXJyYXk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICBXYXZlU2hhcGVyTm9kZS5wcm90b3R5cGUuX2RlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKGNvbnRleHQsIHByb3ApIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGhpc1twcm9wXSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcCwge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29udGV4dFtwcm9wXSA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0W3Byb3BdLmJpbmQoY29udGV4dCk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0W3Byb3BdO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbcHJvcF0gPSB2YWw7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5fbmF0aXZlX2NyZWF0ZVdhdmVTaGFwZXIgPSBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVdhdmVTaGFwZXI7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlV2F2ZVNoYXBlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV2F2ZVNoYXBlck5vZGUodGhpcyk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHMgdGhlIG5hdGl2ZSBXZWIgQXVkaW8gQVBJXG5cdFx0ICogICAgICAgICBbV2F2ZVNoYXBlck5vZGVdKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jdGhlLXdhdmVzaGFwZXJub2RlLWludGVyZmFjZSkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7ZnVuY3Rpb258QXJyYXl8TnVtYmVyfSBtYXBwaW5nIFRoZSBmdW5jdGlvbiB1c2VkIHRvIGRlZmluZSB0aGUgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1hcHBpbmcgZnVuY3Rpb24gc2hvdWxkIHRha2UgdHdvIGFyZ3VtZW50czpcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaXJzdCBpcyB0aGUgdmFsdWUgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBhcnJheSBwb3NpdGlvbi5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyBhbiBhcnJheSwgdGhhdCBhcnJheSB3aWxsIGJlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgYXMgdGhlIHdhdmUgc2hhcGluZyBmdW5jdGlvbi4gVGhlIGlucHV0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwgaXMgYW4gQXVkaW9SYW5nZSBbLTEsIDFdIHZhbHVlIGFuZCB0aGUgb3V0cHV0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwgY2FuIHRha2Ugb24gYW55IG51bWVyaWNhbCB2YWx1ZXMuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IFtidWZmZXJMZW49MTAyNF0gVGhlIGxlbmd0aCBvZiB0aGUgV2F2ZVNoYXBlck5vZGUgYnVmZmVyLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciB0aW1lc1R3byA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24odmFsKXtcblx0XHQgKiBcdHJldHVybiB2YWwgKiAyO1xuXHRcdCAqIH0sIDIwNDgpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSB3YXZlc2hhcGVyIGNhbiBhbHNvIGJlIGNvbnN0cnVjdGVkIHdpdGggYW4gYXJyYXkgb2YgdmFsdWVzXG5cdFx0ICogdmFyIGludmVydCA9IG5ldyBUb25lLldhdmVTaGFwZXIoWzEsIC0xXSk7XG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVTaGFwZXIgPSBmdW5jdGlvbiAobWFwcGluZywgYnVmZmVyTGVuKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHdhdmVzaGFwZXJcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVXYXZlU2hhcGVyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHdhdmVzaGFwZXJzIGN1cnZlXG5cdFx0XHQgKiAgQHR5cGUge0Zsb2F0MzJBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY3VydmUgPSBudWxsO1xuXHQgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1hcHBpbmcpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY3VydmUgPSBtYXBwaW5nO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoaXNGaW5pdGUobWFwcGluZykgfHwgVG9uZS5pc1VuZGVmKG1hcHBpbmcpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2N1cnZlID0gbmV3IEZsb2F0MzJBcnJheShUb25lLmRlZmF1bHRBcmcobWFwcGluZywgMTAyNCkpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc0Z1bmN0aW9uKG1hcHBpbmcpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2N1cnZlID0gbmV3IEZsb2F0MzJBcnJheShUb25lLmRlZmF1bHRBcmcoYnVmZmVyTGVuLCAxMDI0KSk7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0TWFwKG1hcHBpbmcpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLldhdmVTaGFwZXIsIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVXNlcyBhIG1hcHBpbmcgZnVuY3Rpb24gdG8gc2V0IHRoZSB2YWx1ZSBvZiB0aGUgY3VydmUuXG5cdFx0ICogIEBwYXJhbSB7ZnVuY3Rpb259IG1hcHBpbmcgVGhlIGZ1bmN0aW9uIHVzZWQgdG8gZGVmaW5lIHRoZSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1hcHBpbmcgZnVuY3Rpb24gdGFrZSB0d28gYXJndW1lbnRzOlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaXJzdCBpcyB0aGUgdmFsdWUgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBnb2VzIGZyb20gLTEgdG8gMSBvdmVyIHRoZSBudW1iZXIgb2YgZWxlbWVudHNcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgY3VydmUgYXJyYXkuIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGFycmF5IHBvc2l0aW9uLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5XYXZlU2hhcGVyfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9tYXAgdGhlIGlucHV0IHNpZ25hbCBmcm9tIFstMSwgMV0gdG8gWzAsIDEwXVxuXHRcdCAqIHNoYXBlci5zZXRNYXAoZnVuY3Rpb24odmFsLCBpbmRleCl7XG5cdFx0ICogXHRyZXR1cm4gKHZhbCArIDEpICogNTtcblx0XHQgKiB9KVxuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlU2hhcGVyLnByb3RvdHlwZS5zZXRNYXAgPSBmdW5jdGlvbiAobWFwcGluZykge1xuXHQgICAgICAgIHZhciBhcnJheSA9IG5ldyBBcnJheSh0aGlzLl9jdXJ2ZS5sZW5ndGgpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLl9jdXJ2ZS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgbm9ybWFsaXplZCA9IGkgLyAobGVuIC0gMSkgKiAyIC0gMTtcblx0ICAgICAgICAgICAgYXJyYXlbaV0gPSBtYXBwaW5nKG5vcm1hbGl6ZWQsIGkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmN1cnZlID0gYXJyYXk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGFycmF5IHRvIHNldCBhcyB0aGUgd2F2ZXNoYXBlciBjdXJ2ZS4gRm9yIGxpbmVhciBjdXJ2ZXNcblx0XHQgKiBhcnJheSBsZW5ndGggZG9lcyBub3QgbWFrZSBtdWNoIGRpZmZlcmVuY2UsIGJ1dCBmb3IgY29tcGxleCBjdXJ2ZXNcblx0XHQgKiBsb25nZXIgYXJyYXlzIHdpbGwgcHJvdmlkZSBzbW9vdGhlciBpbnRlcnBvbGF0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLldhdmVTaGFwZXIjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIGN1cnZlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5XYXZlU2hhcGVyLnByb3RvdHlwZSwgJ2N1cnZlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhcGVyLmN1cnZlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWFwcGluZykge1xuXHQgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IG5ldyBGbG9hdDMyQXJyYXkobWFwcGluZyk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NoYXBlci5jdXJ2ZSA9IHRoaXMuX2N1cnZlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogU3BlY2lmaWVzIHdoYXQgdHlwZSBvZiBvdmVyc2FtcGxpbmcgKGlmIGFueSkgc2hvdWxkIGJlIHVzZWQgd2hlblxuXHRcdCAqIGFwcGx5aW5nIHRoZSBzaGFwaW5nIGN1cnZlLiBDYW4gZWl0aGVyIGJlIFwibm9uZVwiLCBcIjJ4XCIgb3IgXCI0eFwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLldhdmVTaGFwZXIjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSBvdmVyc2FtcGxlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5XYXZlU2hhcGVyLnByb3RvdHlwZSwgJ292ZXJzYW1wbGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaGFwZXIub3ZlcnNhbXBsZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG92ZXJzYW1wbGluZykge1xuXHQgICAgICAgICAgICBpZiAoW1xuXHQgICAgICAgICAgICAgICAgICAgICdub25lJyxcblx0ICAgICAgICAgICAgICAgICAgICAnMngnLFxuXHQgICAgICAgICAgICAgICAgICAgICc0eCdcblx0ICAgICAgICAgICAgICAgIF0uaW5jbHVkZXMob3ZlcnNhbXBsaW5nKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGUgPSBvdmVyc2FtcGxpbmc7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVG9uZS5XYXZlU2hhcGVyOiBvdmVyc2FtcGxpbmcgbXVzdCBiZSBlaXRoZXIgXFwnbm9uZVxcJywgXFwnMnhcXCcsIG9yIFxcJzR4XFwnJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuV2F2ZVNoYXBlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlU2hhcGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuV2F2ZVNoYXBlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRpbWVCYXNlIGlzIGEgZmxleGlibGUgZW5jb2Rpbmcgb2YgdGltZVxuXHRcdCAqICAgICAgICAgd2hpY2ggY2FuIGJlIGV2YWx1YXRlZCB0byBhbmQgZnJvbSBhIHN0cmluZy5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUgYXMgYSBudW1iZXIgb3Igc3RyaW5nXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVW5pdCB2YWx1ZXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRpbWVCYXNlKDQsIFwiblwiKVxuXHRcdCAqIFRvbmUuVGltZUJhc2UoMiwgXCJ0XCIpXG5cdFx0ICogVG9uZS5UaW1lQmFzZShcIjJ0XCIpXG5cdFx0ICogVG9uZS5UaW1lQmFzZShcIjJ0XCIpICsgVG9uZS5UaW1lQmFzZShcIjRuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZSA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgLy9hbGxvd3MgaXQgdG8gYmUgY29uc3RydWN0ZWQgd2l0aCBvciB3aXRob3V0ICduZXcnXG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLlRpbWVCYXNlKSB7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHZhbHVlXG5cdFx0XHRcdCAqICBAdHlwZSAge051bWJlcnxTdHJpbmd8VG9uZS5UaW1lQmFzZX1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWw7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgdW5pdHNcblx0XHRcdFx0ICogQHR5cGUge1N0cmluZz99XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl91bml0cyA9IHVuaXRzO1xuXHQgICAgICAgICAgICAvL3Rlc3QgaWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgbnVtYmVyXG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGhpcy5fdW5pdHMpICYmIFRvbmUuaXNTdHJpbmcodGhpcy5fdmFsKSAmJiAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdCAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHRoaXMuX3ZhbCkgPT0gdGhpcy5fdmFsICYmIHRoaXMuX3ZhbC5jaGFyQXQoMCkgIT09ICcrJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gcGFyc2VGbG9hdCh0aGlzLl92YWwpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB0aGlzLl9kZWZhdWx0VW5pdHM7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsICYmIHZhbC5jb25zdHJ1Y3RvciA9PT0gdGhpcy5jb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICAgICAgLy9pZiB0aGV5J3JlIHRoZSBzYW1lIHR5cGUsIGp1c3QgY29weSB2YWx1ZXMgb3ZlclxuXHQgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsLl92YWw7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl91bml0cyA9IHZhbC5fdW5pdHM7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLl9kZWZhdWx0VW5pdHMpIHtcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ3MnOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbC50b1NlY29uZHMoKTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ2knOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbC50b1RpY2tzKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdoeic6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsLnRvRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdtaWRpJzpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWwudG9NaWRpKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkIGRlZmF1bHQgdW5pdHMgJyArIHRoaXMuX2RlZmF1bHRVbml0cyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGltZUJhc2UodmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGltZUJhc2UpO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QUJTVFJBQ1QgU1lOVEFYIFRSRUUgUEFSU0VSXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBBbGwgdGhlIHByaW1hcnkgZXhwcmVzc2lvbnMuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2V4cHJlc3Npb25zID0ge1xuXHQgICAgICAgICduJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCspbihcXC4/KSQvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUsIGRvdCkge1xuXHQgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2NhbGFyID0gZG90ID09PSAnLicgPyAxLjUgOiAxO1xuXHQgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAxKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JlYXRzVG9Vbml0cyh0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCkpICogc2NhbGFyO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmVhdHNUb1VuaXRzKDQgLyB2YWx1ZSkgKiBzY2FsYXI7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICd0Jzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCspdCQvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JlYXRzVG9Vbml0cyg4IC8gKHBhcnNlSW50KHZhbHVlKSAqIDMpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ20nOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyltJC9pLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JlYXRzVG9Vbml0cyhwYXJzZUludCh2YWx1ZSkgKiB0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnaSc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKWkkL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGlja3NUb1VuaXRzKHBhcnNlSW50KHZhbHVlKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdoeic6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/KWh6JC9pLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyZXF1ZW5jeVRvVW5pdHMocGFyc2VGbG9hdCh2YWx1ZSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAndHInOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPyk6KFxcZCsoPzpcXC5cXGQrKT8pOj8oXFxkKyg/OlxcLlxcZCspPyk/JC8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKG0sIHEsIHMpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB0b3RhbCA9IDA7XG5cdCAgICAgICAgICAgICAgICBpZiAobSAmJiBtICE9PSAnMCcpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLl9iZWF0c1RvVW5pdHModGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpICogcGFyc2VGbG9hdChtKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAocSAmJiBxICE9PSAnMCcpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLl9iZWF0c1RvVW5pdHMocGFyc2VGbG9hdChxKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAocyAmJiBzICE9PSAnMCcpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLl9iZWF0c1RvVW5pdHMocGFyc2VGbG9hdChzKSAvIDQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAncyc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/KXMkLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWNvbmRzVG9Vbml0cyhwYXJzZUZsb2F0KHZhbHVlKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdzYW1wbGVzJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCspc2FtcGxlcyQvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKSAvIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnZGVmYXVsdCc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/KSQvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cHJlc3Npb25zW3RoaXMuX2RlZmF1bHRVbml0c10ubWV0aG9kLmNhbGwodGhpcywgdmFsdWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB1bml0cyBpZiBub25lIGFyZSBnaXZlbi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9kZWZhdWx0VW5pdHMgPSAncyc7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRUUkFOU1BPUlQgRkFMTEJBQ0tTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgYnBtLCBvciAxMjAgaWYgVHJhbnNwb3J0IGlzIG5vdCBhdmFpbGFibGVcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZ2V0QnBtID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiAxMjA7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgdGltZVNpZ25hdHVyZSBvciA0IGlmIFRyYW5zcG9ydCBpcyBub3QgYXZhaWxhYmxlXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2dldFRpbWVTaWduYXR1cmUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuVHJhbnNwb3J0KSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC50aW1lU2lnbmF0dXJlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiA0O1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIFBQUSBvciAxOTIgaWYgVHJhbnNwb3J0IGlzIG5vdCBhdmFpbGFibGVcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZ2V0UFBRID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQuUFBRO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiAxOTI7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgY3VycmVudCB0aW1lIGluIHdoaWNoZXZlciBjb250ZXh0IGlzIHJlbGV2YW50XG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX25vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5ub3coKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRVTklUIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIGZyZXF1ZW5jeSBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2ZyZXF1ZW5jeVRvVW5pdHMgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIHJldHVybiAxIC8gZnJlcTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYmVhdHMgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJlYXRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzID0gZnVuY3Rpb24gKGJlYXRzKSB7XG5cdCAgICAgICAgcmV0dXJuIDYwIC8gdGhpcy5fZ2V0QnBtKCkgKiBiZWF0cztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBzZWNvbmQgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtTZWNvbmRzfSBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fc2Vjb25kc1RvVW5pdHMgPSBmdW5jdGlvbiAoc2Vjb25kcykge1xuXHQgICAgICAgIHJldHVybiBzZWNvbmRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHRpY2sgaW4gdGhlIGN1cnJlbnQgdGltZSB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1RpY2tzfSB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX3RpY2tzVG9Vbml0cyA9IGZ1bmN0aW9uICh0aWNrcykge1xuXHQgICAgICAgIHJldHVybiB0aWNrcyAqICh0aGlzLl9iZWF0c1RvVW5pdHMoMSkgLyB0aGlzLl9nZXRQUFEoKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogV2l0aCBubyBhcmd1bWVudHMsIHJldHVybiAnbm93J1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX25vQXJnID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9ub3coKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRFWFBSRVNTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgRXZhbHVhdGUgdGhlIHRpbWUgdmFsdWUuIFJldHVybnMgdGhlIHRpbWVcblx0XHQgKiAgaW4gc2Vjb25kcy5cblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGhpcy5fdmFsKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9BcmcoKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcodGhpcy5fdmFsKSAmJiBUb25lLmlzVW5kZWYodGhpcy5fdW5pdHMpKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIHVuaXRzIGluIHRoaXMuX2V4cHJlc3Npb25zKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fZXhwcmVzc2lvbnNbdW5pdHNdLnJlZ2V4cC50ZXN0KHRoaXMuX3ZhbC50cmltKCkpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB1bml0cztcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodGhpcy5fdW5pdHMpKSB7XG5cdCAgICAgICAgICAgIHZhciBleHByID0gdGhpcy5fZXhwcmVzc2lvbnNbdGhpcy5fdW5pdHNdO1xuXHQgICAgICAgICAgICB2YXIgbWF0Y2hpbmcgPSB0aGlzLl92YWwudG9TdHJpbmcoKS50cmltKCkubWF0Y2goZXhwci5yZWdleHApO1xuXHQgICAgICAgICAgICBpZiAobWF0Y2hpbmcpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBleHByLm1ldGhvZC5hcHBseSh0aGlzLCBtYXRjaGluZy5zbGljZSgxKSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZXhwci5tZXRob2QuY2FsbCh0aGlzLCBwYXJzZUZsb2F0KHRoaXMuX3ZhbCkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBpbiBoZXJ0elxuXHRcdCAqICBAcmV0dXJuIHtGcmVxdWVuY3l9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gMSAvIHRoaXMudG9TZWNvbmRzKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiBzYW1wbGVzXG5cdFx0ICogIEByZXR1cm4gIHtTYW1wbGVzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9TYW1wbGVzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnRvU2Vjb25kcygpICogdGhpcy5jb250ZXh0LnNhbXBsZVJhdGU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiBtaWxsaXNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtNaWxsaXNlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b01pbGxpc2Vjb25kcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy50b1NlY29uZHMoKSAqIDEwMDA7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuVGltZUJhc2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fdmFsID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl91bml0cyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGltZUJhc2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5GcmVxdWVuY3kgaXMgYSBwcmltaXRpdmUgdHlwZSBmb3IgZW5jb2RpbmcgRnJlcXVlbmN5IHZhbHVlcy5cblx0XHQgKiAgICAgICAgIEV2ZW50dWFsbHkgYWxsIHRpbWUgdmFsdWVzIGFyZSBldmFsdWF0ZWQgdG8gaGVydHpcblx0XHQgKiAgICAgICAgIHVzaW5nIHRoZSBgZXZhbGAgbWV0aG9kLlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuVGltZUJhc2V9XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVGhlIHVuaXRzIG9mIHRoZSB2YWx1ZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeShcIkMzXCIpIC8vIDI2MVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KDM4LCBcIm1pZGlcIikgLy9cblx0XHQgKiBUb25lLkZyZXF1ZW5jeShcIkMzXCIpLnRyYW5zcG9zZSg0KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5ID0gZnVuY3Rpb24gKHZhbCwgdW5pdHMpIHtcblx0ICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFRvbmUuRnJlcXVlbmN5KSB7XG5cdCAgICAgICAgICAgIFRvbmUuVGltZUJhc2UuY2FsbCh0aGlzLCB2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuRnJlcXVlbmN5KHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZyZXF1ZW5jeSwgVG9uZS5UaW1lQmFzZSk7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRBVUdNRU5UIEJBU0UgRVhQUkVTU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9leHByZXNzaW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9leHByZXNzaW9ucywge1xuXHQgICAgICAgICdtaWRpJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCsoPzpcXC5cXGQrKT9taWRpKS8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGVmYXVsdFVuaXRzID09PSAnbWlkaScpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5tdG9mKHZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ25vdGUnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oW2EtZ117MX0oPzpifCN8eHxiYik/KSgtP1swLTldKykvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAocGl0Y2gsIG9jdGF2ZSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gbm90ZVRvU2NhbGVJbmRleFtwaXRjaC50b0xvd2VyQ2FzZSgpXTtcblx0ICAgICAgICAgICAgICAgIHZhciBub3RlTnVtYmVyID0gaW5kZXggKyAocGFyc2VJbnQob2N0YXZlKSArIDEpICogMTI7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGVmYXVsdFVuaXRzID09PSAnbWlkaScpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm90ZU51bWJlcjtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5Lm10b2Yobm90ZU51bWJlcik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICd0cic6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/KTooXFxkKyg/OlxcLlxcZCspPyk6PyhcXGQrKD86XFwuXFxkKyk/KT8vLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uIChtLCBxLCBzKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdG90YWwgPSAxO1xuXHQgICAgICAgICAgICAgICAgaWYgKG0gJiYgbSAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKj0gdGhpcy5fYmVhdHNUb1VuaXRzKHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKSAqIHBhcnNlRmxvYXQobSkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHEgJiYgcSAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKj0gdGhpcy5fYmVhdHNUb1VuaXRzKHBhcnNlRmxvYXQocSkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHMgJiYgcyAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKj0gdGhpcy5fYmVhdHNUb1VuaXRzKHBhcnNlRmxvYXQocykgLyA0KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0RVhQUkVTU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFRyYW5zcG9zZXMgdGhlIGZyZXF1ZW5jeSBieSB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlbWl0b25lcy5cblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWx9ICBpbnRlcnZhbFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5GcmVxdWVuY3l9IEEgbmV3IHRyYW5zcG9zZWQgZnJlcXVlbmN5XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJBNFwiKS50cmFuc3Bvc2UoMyk7IC8vXCJDNVwiXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudHJhbnNwb3NlID0gZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMudmFsdWVPZigpICogVG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oaW50ZXJ2YWwpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGFrZXMgYW4gYXJyYXkgb2Ygc2VtaXRvbmUgaW50ZXJ2YWxzIGFuZCByZXR1cm5zXG5cdFx0ICogIGFuIGFycmF5IG9mIGZyZXF1ZW5jaWVzIHRyYW5zcG9zZWQgYnkgdGhvc2UgaW50ZXJ2YWxzLlxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIGludGVydmFsc1xuXHRcdCAqICBAcmV0dXJuICB7QXJyYXk8VG9uZS5GcmVxdWVuY3k+fSBSZXR1cm5zIGFuIGFycmF5IG9mIEZyZXF1ZW5jaWVzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJBNFwiKS5oYXJtb25pemUoWzAsIDMsIDddKTsgLy9bXCJBNFwiLCBcIkM1XCIsIFwiRTVcIl1cblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5oYXJtb25pemUgPSBmdW5jdGlvbiAoaW50ZXJ2YWxzKSB7XG5cdCAgICAgICAgcmV0dXJuIGludGVydmFscy5tYXAoZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zcG9zZShpbnRlcnZhbCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRVTklUIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgYXMgYSBNSURJIG5vdGVcblx0XHQgKiAgQHJldHVybiAge01JREl9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJDNFwiKS50b01pZGkoKTsgLy82MFxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRvTWlkaSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbSh0aGlzLnZhbHVlT2YoKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBpbiBTY2llbnRpZmljIFBpdGNoIE5vdGF0aW9uXG5cdFx0ICogIEByZXR1cm4gIHtOb3RlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KDY5LCBcIm1pZGlcIikudG9Ob3RlKCk7IC8vXCJBNFwiXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudG9Ob3RlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBmcmVxID0gdGhpcy50b0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIHZhciBsb2cgPSBNYXRoLmxvZzIoZnJlcSAvIFRvbmUuRnJlcXVlbmN5LkE0KTtcblx0ICAgICAgICB2YXIgbm90ZU51bWJlciA9IE1hdGgucm91bmQoMTIgKiBsb2cpICsgNTc7XG5cdCAgICAgICAgdmFyIG9jdGF2ZSA9IE1hdGguZmxvb3Iobm90ZU51bWJlciAvIDEyKTtcblx0ICAgICAgICBpZiAob2N0YXZlIDwgMCkge1xuXHQgICAgICAgICAgICBub3RlTnVtYmVyICs9IC0xMiAqIG9jdGF2ZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIG5vdGVOYW1lID0gc2NhbGVJbmRleFRvTm90ZVtub3RlTnVtYmVyICUgMTJdO1xuXHQgICAgICAgIHJldHVybiBub3RlTmFtZSArIG9jdGF2ZS50b1N0cmluZygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGR1cmF0aW9uIG9mIG9uZSBjeWNsZSBpbiBzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS50b1NlY29uZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b1NlY29uZHMuY2FsbCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBpbiBIZXJ0elxuXHRcdCAqICBAcmV0dXJuICB7RnJlcXVlbmN5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRvRnJlcXVlbmN5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b0ZyZXF1ZW5jeS5jYWxsKHRoaXMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGR1cmF0aW9uIG9mIG9uZSBjeWNsZSBpbiB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudG9UaWNrcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgcXVhcnRlclRpbWUgPSB0aGlzLl9iZWF0c1RvVW5pdHMoMSk7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJzID0gdGhpcy52YWx1ZU9mKCkgLyBxdWFydGVyVGltZTtcblx0ICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihxdWFydGVycyAqIFRvbmUuVHJhbnNwb3J0LlBQUSk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VU5JVCBDT05WRVJTSU9OUyBIRUxQRVJTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBXaXRoIG5vIGFyZ3VtZW50cywgcmV0dXJuIDBcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fbm9BcmcgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIDA7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgZnJlcXVlbmN5IGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2ZyZXF1ZW5jeVRvVW5pdHMgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIHJldHVybiBmcmVxO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHRpY2sgaW4gdGhlIGN1cnJlbnQgdGltZSB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1RpY2tzfSB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl90aWNrc1RvVW5pdHMgPSBmdW5jdGlvbiAodGlja3MpIHtcblx0ICAgICAgICByZXR1cm4gMSAvICh0aWNrcyAqIDYwIC8gKFRvbmUuVHJhbnNwb3J0LmJwbS52YWx1ZSAqIFRvbmUuVHJhbnNwb3J0LlBQUSkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBiZWF0cyBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gYmVhdHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzID0gZnVuY3Rpb24gKGJlYXRzKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzLmNhbGwodGhpcywgYmVhdHMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHNlY29uZCBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1NlY29uZHN9IHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fc2Vjb25kc1RvVW5pdHMgPSBmdW5jdGlvbiAoc2Vjb25kcykge1xuXHQgICAgICAgIHJldHVybiAxIC8gc2Vjb25kcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdW5pdHMgaWYgbm9uZSBhcmUgZ2l2ZW4uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2RlZmF1bHRVbml0cyA9ICdoeic7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRGUkVRVUVOQ1kgQ09OVkVSU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIE5vdGUgdG8gc2NhbGUgaW5kZXhcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICB2YXIgbm90ZVRvU2NhbGVJbmRleCA9IHtcblx0ICAgICAgICAnY2JiJzogLTIsXG5cdCAgICAgICAgJ2NiJzogLTEsXG5cdCAgICAgICAgJ2MnOiAwLFxuXHQgICAgICAgICdjIyc6IDEsXG5cdCAgICAgICAgJ2N4JzogMixcblx0ICAgICAgICAnZGJiJzogMCxcblx0ICAgICAgICAnZGInOiAxLFxuXHQgICAgICAgICdkJzogMixcblx0ICAgICAgICAnZCMnOiAzLFxuXHQgICAgICAgICdkeCc6IDQsXG5cdCAgICAgICAgJ2ViYic6IDIsXG5cdCAgICAgICAgJ2ViJzogMyxcblx0ICAgICAgICAnZSc6IDQsXG5cdCAgICAgICAgJ2UjJzogNSxcblx0ICAgICAgICAnZXgnOiA2LFxuXHQgICAgICAgICdmYmInOiAzLFxuXHQgICAgICAgICdmYic6IDQsXG5cdCAgICAgICAgJ2YnOiA1LFxuXHQgICAgICAgICdmIyc6IDYsXG5cdCAgICAgICAgJ2Z4JzogNyxcblx0ICAgICAgICAnZ2JiJzogNSxcblx0ICAgICAgICAnZ2InOiA2LFxuXHQgICAgICAgICdnJzogNyxcblx0ICAgICAgICAnZyMnOiA4LFxuXHQgICAgICAgICdneCc6IDksXG5cdCAgICAgICAgJ2FiYic6IDcsXG5cdCAgICAgICAgJ2FiJzogOCxcblx0ICAgICAgICAnYSc6IDksXG5cdCAgICAgICAgJ2EjJzogMTAsXG5cdCAgICAgICAgJ2F4JzogMTEsXG5cdCAgICAgICAgJ2JiYic6IDksXG5cdCAgICAgICAgJ2JiJzogMTAsXG5cdCAgICAgICAgJ2InOiAxMSxcblx0ICAgICAgICAnYiMnOiAxMixcblx0ICAgICAgICAnYngnOiAxM1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzY2FsZSBpbmRleCB0byBub3RlIChzaGFycHMpXG5cdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgc2NhbGVJbmRleFRvTm90ZSA9IFtcblx0ICAgICAgICAnQycsXG5cdCAgICAgICAgJ0MjJyxcblx0ICAgICAgICAnRCcsXG5cdCAgICAgICAgJ0QjJyxcblx0ICAgICAgICAnRScsXG5cdCAgICAgICAgJ0YnLFxuXHQgICAgICAgICdGIycsXG5cdCAgICAgICAgJ0cnLFxuXHQgICAgICAgICdHIycsXG5cdCAgICAgICAgJ0EnLFxuXHQgICAgICAgICdBIycsXG5cdCAgICAgICAgJ0InXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBbY29uY2VydCBwaXRjaF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29uY2VydF9waXRjaClcblx0XHQgKiAgQTQncyB2YWx1ZXMgaW4gSGVydHouXG5cdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LkE0ID0gNDQwO1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYSBNSURJIG5vdGUgdG8gZnJlcXVlbmN5IHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtNSURJfSBtaWRpIFRoZSBtaWRpIG51bWJlciB0byBjb252ZXJ0LlxuXHRcdCAqICBAcmV0dXJuIHtGcmVxdWVuY3l9IHRoZSBjb3JyZXNwb25kaW5nIGZyZXF1ZW5jeSB2YWx1ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3kubXRvZig2OSk7IC8vIHJldHVybnMgNDQwXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5tdG9mID0gZnVuY3Rpb24gKG1pZGkpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuQTQgKiBNYXRoLnBvdygyLCAobWlkaSAtIDY5KSAvIDEyKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhIGZyZXF1ZW5jeSB2YWx1ZSB0byBhIE1JREkgbm90ZS5cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgdmFsdWUgdG8gZnJlcXVlbmN5IHZhbHVlIHRvIGNvbnZlcnQuXG5cdFx0ICogIEByZXR1cm5zICB7TUlESX1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5LmZ0b20oNDQwKTsgLy8gcmV0dXJucyA2OVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kuZnRvbSA9IGZ1bmN0aW9uIChmcmVxdWVuY3kpIHtcblx0ICAgICAgICByZXR1cm4gNjkgKyBNYXRoLnJvdW5kKDEyICogTWF0aC5sb2cyKGZyZXF1ZW5jeSAvIFRvbmUuRnJlcXVlbmN5LkE0KSk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVGltZSBpcyBhIHByaW1pdGl2ZSB0eXBlIGZvciBlbmNvZGluZyBUaW1lIHZhbHVlcy5cblx0XHQgKiAgICAgICAgIFRvbmUuVGltZSBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBvciB3aXRob3V0IHRoZSBgbmV3YCBrZXl3b3JkLiBUb25lLlRpbWUgY2FuIGJlIHBhc3NlZFxuXHRcdCAqICAgICAgICAgaW50byB0aGUgcGFyYW1ldGVyIG9mIGFueSBtZXRob2Qgd2hpY2ggdGFrZXMgdGltZSBhcyBhbiBhcmd1bWVudC5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRpbWVCYXNlfVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFRoZSB1bml0cyBvZiB0aGUgdmFsdWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHQgPSBUb25lLlRpbWUoXCI0blwiKTsvL2EgcXVhcnRlciBub3RlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5UaW1lKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVGltZUJhc2UuY2FsbCh0aGlzLCB2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGltZSh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaW1lLCBUb25lLlRpbWVCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIEV4dGVuZCB0aGUgYmFzZSBleHByZXNzaW9uc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS5fZXhwcmVzc2lvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZXhwcmVzc2lvbnMsIHtcblx0ICAgICAgICAncXVhbnRpemUnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL15AKC4rKS8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKGNhcHR1cmUpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBxdWFudFRvID0gbmV3IHRoaXMuY29uc3RydWN0b3IoY2FwdHVyZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0Lm5leHRTdWJkaXZpc2lvbihxdWFudFRvKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdub3cnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL15cXCsoLispLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAoY2FwdHVyZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vdygpICsgbmV3IHRoaXMuY29uc3RydWN0b3IoY2FwdHVyZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBRdWFudGl6ZSB0aGUgdGltZSBieSB0aGUgZ2l2ZW4gc3ViZGl2aXNpb24uIE9wdGlvbmFsbHkgYWRkIGFcblx0XHQgKiAgcGVyY2VudGFnZSB3aGljaCB3aWxsIG1vdmUgdGhlIHRpbWUgdmFsdWUgdG93YXJkcyB0aGUgaWRlYWxcblx0XHQgKiAgcXVhbnRpemVkIHZhbHVlIGJ5IHRoYXQgcGVyY2VudGFnZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfFRpbWV9ICB2YWwgICAgVGhlIHN1YmRpdmlzaW9uIHRvIHF1YW50aXplIHRvXG5cdFx0ICogIEBwYXJhbSAge05vcm1hbFJhbmdlfSAgW3BlcmNlbnQ9MV0gIE1vdmUgdGhlIHRpbWUgdmFsdWVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG93YXJkcyB0aGUgcXVhbnRpemVkIHZhbHVlIGJ5XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgcGVyY2VudGFnZS5cblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gIHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRpbWUoMjEpLnF1YW50aXplKDIpIC8vcmV0dXJucyAyMlxuXHRcdCAqIFRvbmUuVGltZSgwLjYpLnF1YW50aXplKFwiNG5cIiwgMC41KSAvL3JldHVybnMgMC41NVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS5xdWFudGl6ZSA9IGZ1bmN0aW9uIChzdWJkaXYsIHBlcmNlbnQpIHtcblx0ICAgICAgICBwZXJjZW50ID0gVG9uZS5kZWZhdWx0QXJnKHBlcmNlbnQsIDEpO1xuXHQgICAgICAgIHZhciBzdWJkaXZpc2lvbiA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHN1YmRpdik7XG5cdCAgICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZU9mKCk7XG5cdCAgICAgICAgdmFyIG11bHRpcGxlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIHN1YmRpdmlzaW9uKTtcblx0ICAgICAgICB2YXIgaWRlYWwgPSBtdWx0aXBsZSAqIHN1YmRpdmlzaW9uO1xuXHQgICAgICAgIHZhciBkaWZmID0gaWRlYWwgLSB2YWx1ZTtcblx0ICAgICAgICByZXR1cm4gdmFsdWUgKyBkaWZmICogcGVyY2VudDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGEgVGltZSB0byBOb3RhdGlvbi4gVGhlIG5vdGF0aW9uIHZhbHVlcyBhcmUgd2lsbCBiZSB0aGVcblx0XHQgKiAgY2xvc2VzdCByZXByZXNlbnRhdGlvbiBiZXR3ZWVuIDFtIHRvIDEyOHRoIG5vdGUuXG5cdFx0ICogIEByZXR1cm4ge05vdGF0aW9ufVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vaWYgdGhlIFRyYW5zcG9ydCBpcyBhdCAxMjBicG06XG5cdFx0ICogVG9uZS5UaW1lKDIpLnRvTm90YXRpb24oKTsvL3JldHVybnMgXCIxbVwiXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnRvTm90YXRpb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHRpbWUgPSB0aGlzLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIHZhciB0ZXN0Tm90YXRpb25zID0gWycxbSddO1xuXHQgICAgICAgIGZvciAodmFyIHBvd2VyID0gMTsgcG93ZXIgPCA4OyBwb3dlcisrKSB7XG5cdCAgICAgICAgICAgIHZhciBzdWJkaXYgPSBNYXRoLnBvdygyLCBwb3dlcik7XG5cdCAgICAgICAgICAgIHRlc3ROb3RhdGlvbnMucHVzaChzdWJkaXYgKyAnbi4nKTtcblx0ICAgICAgICAgICAgdGVzdE5vdGF0aW9ucy5wdXNoKHN1YmRpdiArICduJyk7XG5cdCAgICAgICAgICAgIHRlc3ROb3RhdGlvbnMucHVzaChzdWJkaXYgKyAndCcpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0ZXN0Tm90YXRpb25zLnB1c2goJzAnKTtcblx0ICAgICAgICAvL2ZpbmQgdGhlIGNsb3NldHMgbm90YXRpb24gcmVwcmVzZW50YXRpb25cblx0ICAgICAgICB2YXIgY2xvc2VzdCA9IHRlc3ROb3RhdGlvbnNbMF07XG5cdCAgICAgICAgdmFyIGNsb3Nlc3RTZWNvbmRzID0gVG9uZS5UaW1lKHRlc3ROb3RhdGlvbnNbMF0pLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIHRlc3ROb3RhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAobm90YXRpb24pIHtcblx0ICAgICAgICAgICAgdmFyIG5vdGF0aW9uU2Vjb25kcyA9IFRvbmUuVGltZShub3RhdGlvbikudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgICAgIGlmIChNYXRoLmFicyhub3RhdGlvblNlY29uZHMgLSB0aW1lKSA8IE1hdGguYWJzKGNsb3Nlc3RTZWNvbmRzIC0gdGltZSkpIHtcblx0ICAgICAgICAgICAgICAgIGNsb3Nlc3QgPSBub3RhdGlvbjtcblx0ICAgICAgICAgICAgICAgIGNsb3Nlc3RTZWNvbmRzID0gbm90YXRpb25TZWNvbmRzO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIGNsb3Nlc3Q7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBlbmNvZGVkIGFzIEJhcnM6QmVhdHM6U2l4dGVlbnRocy5cblx0XHQgKiAgQHJldHVybiAge0JhcnNCZWF0c1NpeHRlZW50aHN9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnRvQmFyc0JlYXRzU2l4dGVlbnRocyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgcXVhcnRlclRpbWUgPSB0aGlzLl9iZWF0c1RvVW5pdHMoMSk7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJzID0gdGhpcy52YWx1ZU9mKCkgLyBxdWFydGVyVGltZTtcblx0ICAgICAgICB2YXIgbWVhc3VyZXMgPSBNYXRoLmZsb29yKHF1YXJ0ZXJzIC8gdGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpKTtcblx0ICAgICAgICB2YXIgc2l4dGVlbnRocyA9IHF1YXJ0ZXJzICUgMSAqIDQ7XG5cdCAgICAgICAgcXVhcnRlcnMgPSBNYXRoLmZsb29yKHF1YXJ0ZXJzKSAlIHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKTtcblx0ICAgICAgICBzaXh0ZWVudGhzID0gc2l4dGVlbnRocy50b1N0cmluZygpO1xuXHQgICAgICAgIGlmIChzaXh0ZWVudGhzLmxlbmd0aCA+IDMpIHtcblx0ICAgICAgICAgICAgLy8gdGhlIGFkZGl0aW9uYWwgcGFyc2VGbG9hdCByZW1vdmVzIGluc2lnbmlmaWNhbnQgdHJhaWxpbmcgemVyb2VzXG5cdCAgICAgICAgICAgIHNpeHRlZW50aHMgPSBwYXJzZUZsb2F0KHBhcnNlRmxvYXQoc2l4dGVlbnRocykudG9GaXhlZCgzKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBwcm9ncmVzcyA9IFtcblx0ICAgICAgICAgICAgbWVhc3VyZXMsXG5cdCAgICAgICAgICAgIHF1YXJ0ZXJzLFxuXHQgICAgICAgICAgICBzaXh0ZWVudGhzXG5cdCAgICAgICAgXTtcblx0ICAgICAgICByZXR1cm4gcHJvZ3Jlc3Muam9pbignOicpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gdGlja3MuXG5cdFx0ICogIEByZXR1cm4gIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUudG9UaWNrcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgcXVhcnRlclRpbWUgPSB0aGlzLl9iZWF0c1RvVW5pdHMoMSk7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJzID0gdGhpcy52YWx1ZU9mKCkgLyBxdWFydGVyVGltZTtcblx0ICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChxdWFydGVycyAqIHRoaXMuX2dldFBQUSgpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIHNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS50b1NlY29uZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIGFzIGEgbWlkaSBub3RlLlxuXHRcdCAqICBAcmV0dXJuICB7TWlkaX1cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUudG9NaWRpID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKHRoaXMudG9GcmVxdWVuY3koKSk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGltZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRyYW5zcG9ydFRpbWUgaXMgYSB0aGUgdGltZSBhbG9uZyB0aGUgVHJhbnNwb3J0J3Ncblx0XHQgKiAgICAgICAgIHRpbWVsaW5lLiBJdCBpcyBzaW1pbGFyIHRvIFRvbmUuVGltZSwgYnV0IGluc3RlYWQgb2YgZXZhbHVhdGluZ1xuXHRcdCAqICAgICAgICAgYWdhaW5zdCB0aGUgQXVkaW9Db250ZXh0J3MgY2xvY2ssIGl0IGlzIGV2YWx1YXRlZCBhZ2FpbnN0XG5cdFx0ICogICAgICAgICB0aGUgVHJhbnNwb3J0J3MgcG9zaXRpb24uIFNlZSBbVHJhbnNwb3J0VGltZSB3aWtpXShodHRwczovL2dpdGh1Yi5jb20vVG9uZWpzL1RvbmUuanMvd2lraS9UcmFuc3BvcnRUaW1lKS5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUgYXMgYSBudW1iZXIgb3Igc3RyaW5nXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVW5pdCB2YWx1ZXNcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuVGltZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZSA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLlRyYW5zcG9ydFRpbWUpIHtcblx0ICAgICAgICAgICAgVG9uZS5UaW1lLmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRyYW5zcG9ydFRpbWUodmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJhbnNwb3J0VGltZSwgVG9uZS5UaW1lKTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgY3VycmVudCB0aW1lIGluIHdoaWNoZXZlciBjb250ZXh0IGlzIHJlbGV2YW50XG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lLnByb3RvdHlwZS5fbm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC5zZWNvbmRzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRyYW5zcG9ydFRpbWU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFRZUEVTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqIFVuaXRzIHdoaWNoIGEgdmFsdWUgY2FuIHRha2Ugb24uXG5cdFx0ICogQGVudW0ge1N0cmluZ31cblx0XHQgKi9cblx0ICAgIFRvbmUuVHlwZSA9IHtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBEZWZhdWx0IHVuaXRzXG5cdFx0XHQgKiAgQHR5cGVkZWYge0RlZmF1bHR9XG5cdFx0XHQgKi9cblx0ICAgICAgICBEZWZhdWx0OiAnbnVtYmVyJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaW1lIGNhbiBiZSBkZXNjcmliZWQgaW4gYSBudW1iZXIgb2Ygd2F5cy4gUmVhZCBtb3JlIFtUaW1lXShodHRwczovL2dpdGh1Yi5jb20vVG9uZWpzL1RvbmUuanMvd2lraS9UaW1lKS5cblx0XHRcdCAqXG5cdFx0XHQgKiAgKiBOdW1iZXJzLCB3aGljaCB3aWxsIGJlIHRha2VuIGxpdGVyYWxseSBhcyB0aGUgdGltZSAoaW4gc2Vjb25kcykuXG5cdFx0XHQgKiAgKiBOb3RhdGlvbiwgKFwiNG5cIiwgXCI4dFwiKSBkZXNjcmliZXMgdGltZSBpbiBCUE0gYW5kIHRpbWUgc2lnbmF0dXJlIHJlbGF0aXZlIHZhbHVlcy5cblx0XHRcdCAqICAqIFRyYW5zcG9ydFRpbWUsIChcIjQ6MzoyXCIpIHdpbGwgYWxzbyBwcm92aWRlIHRlbXBvIGFuZCB0aW1lIHNpZ25hdHVyZSByZWxhdGl2ZSB0aW1lc1xuXHRcdFx0ICogIGluIHRoZSBmb3JtIEJBUlM6UVVBUlRFUlM6U0lYVEVFTlRIUy5cblx0XHRcdCAqICAqIEZyZXF1ZW5jeSwgKFwiOGh6XCIpIGlzIGNvbnZlcnRlZCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBjeWNsZSBpbiBzZWNvbmRzLlxuXHRcdFx0ICogICogTm93LVJlbGF0aXZlLCAoXCIrMVwiKSBwcmVmaXggYW55IG9mIHRoZSBhYm92ZSB3aXRoIFwiK1wiIGFuZCBpdCB3aWxsIGJlIGludGVycHJldGVkIGFzXG5cdFx0XHQgKiAgXCJ0aGUgY3VycmVudCB0aW1lIHBsdXMgd2hhdGV2ZXIgZXhwcmVzc2lvbiBmb2xsb3dzXCIuXG5cdFx0XHQgKiAgKiBFeHByZXNzaW9ucywgKFwiMzowICsgMiAtICgxbSAvIDcpXCIpIGFueSBvZiB0aGUgYWJvdmUgY2FuIGFsc28gYmUgY29tYmluZWRcblx0XHRcdCAqICBpbnRvIGEgbWF0aGVtYXRpY2FsIGV4cHJlc3Npb24gd2hpY2ggd2lsbCBiZSBldmFsdWF0ZWQgdG8gY29tcHV0ZSB0aGUgZGVzaXJlZCB0aW1lLlxuXHRcdFx0ICogICogTm8gQXJndW1lbnQsIGZvciBtZXRob2RzIHdoaWNoIGFjY2VwdCB0aW1lLCBubyBhcmd1bWVudCB3aWxsIGJlIGludGVycHJldGVkIGFzXG5cdFx0XHQgKiAgXCJub3dcIiAoaS5lLiB0aGUgY3VycmVudFRpbWUpLlxuXHRcdFx0ICpcblx0XHRcdCAqICBAdHlwZWRlZiB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIFRpbWU6ICd0aW1lJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBGcmVxdWVuY3kgY2FuIGJlIGRlc2NyaWJlZCBzaW1pbGFyIHRvIHRpbWUsIGV4Y2VwdCB1bHRpbWF0ZWx5IHRoZVxuXHRcdFx0ICogIHZhbHVlcyBhcmUgY29udmVydGVkIHRvIGZyZXF1ZW5jeSBpbnN0ZWFkIG9mIHNlY29uZHMuIEEgbnVtYmVyXG5cdFx0XHQgKiAgaXMgdGFrZW4gbGl0ZXJhbGx5IGFzIHRoZSB2YWx1ZSBpbiBoZXJ0ei4gQWRkaXRpb25hbGx5IGFueSBvZiB0aGVcblx0XHRcdCAqICBUaW1lIGVuY29kaW5ncyBjYW4gYmUgdXNlZC4gTm90ZSBuYW1lcyBpbiB0aGUgZm9ybVxuXHRcdFx0ICogIG9mIE5PVEUgT0NUQVZFIChpLmUuIEM0KSBhcmUgYWxzbyBhY2NlcHRlZCBhbmQgY29udmVydGVkIHRvIHRoZWlyXG5cdFx0XHQgKiAgZnJlcXVlbmN5IHZhbHVlLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtGcmVxdWVuY3l9XG5cdFx0XHQgKi9cblx0ICAgICAgICBGcmVxdWVuY3k6ICdmcmVxdWVuY3knLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRyYW5zcG9ydFRpbWUgZGVzY3JpYmVzIGEgcG9zaXRpb24gYWxvbmcgdGhlIFRyYW5zcG9ydCdzIHRpbWVsaW5lLiBJdCBpc1xuXHRcdFx0ICogIHNpbWlsYXIgdG8gVGltZSBpbiB0aGF0IGl0IHVzZXMgYWxsIHRoZSBzYW1lIGVuY29kaW5ncywgYnV0IFRyYW5zcG9ydFRpbWUgc3BlY2lmaWNhbGx5XG5cdFx0XHQgKiAgcGVydGFpbnMgdG8gdGhlIFRyYW5zcG9ydCdzIHRpbWVsaW5lLCB3aGljaCBpcyBzdGFydGFibGUsIHN0b3BwYWJsZSwgbG9vcGFibGUsIGFuZCBzZWVrYWJsZS5cblx0XHRcdCAqICBbUmVhZCBtb3JlXShodHRwczovL2dpdGh1Yi5jb20vVG9uZWpzL1RvbmUuanMvd2lraS9UcmFuc3BvcnRUaW1lKVxuXHRcdFx0ICogIEB0eXBlZGVmIHtUcmFuc3BvcnRUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgVHJhbnNwb3J0VGltZTogJ3RyYW5zcG9ydFRpbWUnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRpY2tzIGFyZSB0aGUgYmFzaWMgc3VidW5pdCBvZiB0aGUgVHJhbnNwb3J0LiBUaGV5IGFyZVxuXHRcdFx0ICogIHRoZSBzbWFsbGVzdCB1bml0IG9mIHRpbWUgdGhhdCB0aGUgVHJhbnNwb3J0IHN1cHBvcnRzLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtUaWNrc31cblx0XHRcdCAqL1xuXHQgICAgICAgIFRpY2tzOiAndGlja3MnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIE5vcm1hbCB2YWx1ZXMgYXJlIHdpdGhpbiB0aGUgcmFuZ2UgWzAsIDFdLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIE5vcm1hbFJhbmdlOiAnbm9ybWFsUmFuZ2UnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEF1ZGlvUmFuZ2UgdmFsdWVzIGFyZSBiZXR3ZWVuIFstMSwgMV0uXG5cdFx0XHQgKiAgQHR5cGVkZWYge0F1ZGlvUmFuZ2V9XG5cdFx0XHQgKi9cblx0ICAgICAgICBBdWRpb1JhbmdlOiAnYXVkaW9SYW5nZScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgRGVjaWJlbHMgYXJlIGEgbG9nYXJpdGhtaWMgdW5pdCBvZiBtZWFzdXJlbWVudCB3aGljaCBpcyB1c2VmdWwgZm9yIHZvbHVtZVxuXHRcdFx0ICogIGJlY2F1c2Ugb2YgdGhlIGxvZ2FyaXRobWljIHdheSB0aGF0IHdlIHBlcmNlaXZlIGxvdWRuZXNzLiAwIGRlY2liZWxzXG5cdFx0XHQgKiAgbWVhbnMgbm8gY2hhbmdlIGluIHZvbHVtZS4gLTEwZGIgaXMgYXBwcm94aW1hdGVseSBoYWxmIGFzIGxvdWQgYW5kIDEwZGJcblx0XHRcdCAqICBpcyB0d2ljZSBpcyBsb3VkLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtEZWNpYmVsc31cblx0XHRcdCAqL1xuXHQgICAgICAgIERlY2liZWxzOiAnZGInLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhbGYtc3RlcCBub3RlIGluY3JlbWVudHMsIGkuZS4gMTIgaXMgYW4gb2N0YXZlIGFib3ZlIHRoZSByb290LiBhbmQgMSBpcyBhIGhhbGYtc3RlcCB1cC5cblx0XHRcdCAqICBAdHlwZWRlZiB7SW50ZXJ2YWx9XG5cdFx0XHQgKi9cblx0ICAgICAgICBJbnRlcnZhbDogJ2ludGVydmFsJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBCZWF0cyBwZXIgbWludXRlLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtCUE19XG5cdFx0XHQgKi9cblx0ICAgICAgICBCUE06ICdicG0nLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtQb3NpdGl2ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIFBvc2l0aXZlOiAncG9zaXRpdmUnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEdhaW4gaXMgdGhlIHJhdGlvIGJldHdlZW4gaW5wdXQgYW5kIG91dHB1dCBvZiBhIHNpZ25hbC5cblx0XHRcdCAqICBBIGdhaW4gb2YgMCBpcyB0aGUgc2FtZSBhcyBzaWxlbmNpbmcgdGhlIHNpZ25hbC4gQSBnYWluIG9mXG5cdFx0XHQgKiAgMSwgY2F1c2VzIG5vIGNoYW5nZSB0byB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtHYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgR2FpbjogJ2dhaW4nLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgY2VudCBpcyBhIGh1bmRyZWR0aCBvZiBhIHNlbWl0b25lLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtDZW50c31cblx0XHRcdCAqL1xuXHQgICAgICAgIENlbnRzOiAnY2VudHMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFuZ2xlIGJldHdlZW4gMCBhbmQgMzYwLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtEZWdyZWVzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgRGVncmVlczogJ2RlZ3JlZXMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgbnVtYmVyIHJlcHJlc2VudGluZyBhIG1pZGkgbm90ZS5cblx0XHRcdCAqICBAdHlwZWRlZiB7TUlESX1cblx0XHRcdCAqL1xuXHQgICAgICAgIE1JREk6ICdtaWRpJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGNvbG9uLXNlcGFyYXRlZCByZXByZXNlbnRhdGlvbiBvZiB0aW1lIGluIHRoZSBmb3JtIG9mXG5cdFx0XHQgKiAgQmFyczpCZWF0czpTaXh0ZWVudGhzLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtCYXJzQmVhdHNTaXh0ZWVudGhzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgQmFyc0JlYXRzU2l4dGVlbnRoczogJ2JhcnNCZWF0c1NpeHRlZW50aHMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNhbXBsaW5nIGlzIHRoZSByZWR1Y3Rpb24gb2YgYSBjb250aW51b3VzIHNpZ25hbCB0byBhIGRpc2NyZXRlIHNpZ25hbC5cblx0XHRcdCAqICBBdWRpbyBpcyB0eXBpY2FsbHkgc2FtcGxlZCA0NDEwMCB0aW1lcyBwZXIgc2Vjb25kLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtTYW1wbGVzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgU2FtcGxlczogJ3NhbXBsZXMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhlcnR6IGFyZSBhIGZyZXF1ZW5jeSByZXByZXNlbnRhdGlvbiBkZWZpbmVkIGFzIG9uZSBjeWNsZSBwZXIgc2Vjb25kLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtIZXJ0en1cblx0XHRcdCAqL1xuXHQgICAgICAgIEhlcnR6OiAnaGVydHonLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgZnJlcXVlbmN5IHJlcHJlc2VudGVkIGJ5IGEgbGV0dGVyIG5hbWUsXG5cdFx0XHQgKiAgYWNjaWRlbnRhbCBhbmQgb2N0YXZlLiBUaGlzIHN5c3RlbSBpcyBrbm93biBhc1xuXHRcdFx0ICogIFtTY2llbnRpZmljIFBpdGNoIE5vdGF0aW9uXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TY2llbnRpZmljX3BpdGNoX25vdGF0aW9uKS5cblx0XHRcdCAqICBAdHlwZWRlZiB7Tm90ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIE5vdGU6ICdub3RlJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBPbmUgbWlsbGlzZWNvbmQgaXMgYSB0aG91c2FuZHRoIG9mIGEgc2Vjb25kLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtNaWxsaXNlY29uZHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBNaWxsaXNlY29uZHM6ICdtaWxsaXNlY29uZHMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNlY29uZHMgYXJlIHRoZSB0aW1lIHVuaXQgb2YgdGhlIEF1ZGlvQ29udGV4dC4gSW4gdGhlIGVuZCxcblx0XHRcdCAqICBhbGwgdmFsdWVzIG5lZWQgdG8gYmUgZXZhbHVhdGVkIHRvIHNlY29uZHMuXG5cdFx0XHQgKiAgQHR5cGVkZWYge1NlY29uZHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBTZWNvbmRzOiAnc2Vjb25kcycsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZHVyYXRpb24gcmVsYXRpdmUgdG8gYSBtZWFzdXJlLlxuXHRcdFx0ICogICogXCI0blwiID0gcXVhcnRlciBub3RlXG5cdFx0XHQgKiAgKiBcIjJtXCIgPSB0d28gbWVhc3VyZXNcblx0XHRcdCAqICAqIFwiOHRcIiA9IGVpZ2h0aC1ub3RlIHRyaXBsZXRcblx0XHRcdCAqICBAdHlwZWRlZiB7Tm90YXRpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICBOb3RhdGlvbjogJ25vdGF0aW9uJ1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gQVVHTUVOVCBUT05FJ3MgUFJPVE9UWVBFXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IFRpbWUgaW50byBzZWNvbmRzLlxuXHRcdCAqXG5cdFx0ICogIFVubGlrZSB0aGUgbWV0aG9kIHdoaWNoIGl0IG92ZXJyaWRlcywgdGhpcyB0YWtlcyBpbnRvIGFjY291bnRcblx0XHQgKiAgdHJhbnNwb3J0dGltZSBhbmQgbXVzaWNhbCBub3RhdGlvbi5cblx0XHQgKlxuXHRcdCAqICBUaW1lIDogMS40MFxuXHRcdCAqICBOb3RhdGlvbjogNG4gb3IgMW0gb3IgMnRcblx0XHQgKiAgTm93IFJlbGF0aXZlOiArM25cblx0XHQgKiAgTWF0aDogM24rMTZuIG9yIGV2ZW4gY29tcGxpY2F0ZWQgZXhwcmVzc2lvbnMgKCgzbioyKS82ICsgMSlcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEByZXR1cm4ge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS50b1NlY29uZHMgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKHRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aW1lO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1VuZGVmKHRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm5vdygpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyh0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGltZSh0aW1lKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRpbWUgaW5zdGFuY2VvZiBUb25lLlRpbWVCYXNlKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aW1lLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhIGZyZXF1ZW5jeSByZXByZXNlbnRhdGlvbiBpbnRvIGEgbnVtYmVyLlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l9IGZyZXFcblx0XHQgKiAgQHJldHVybiB7SGVydHp9ICAgICAgdGhlIGZyZXF1ZW5jeSBpbiBoZXJ0elxuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUudG9GcmVxdWVuY3kgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKGZyZXEpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBmcmVxO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyhmcmVxKSB8fCBUb25lLmlzVW5kZWYoZnJlcSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLkZyZXF1ZW5jeShmcmVxKS52YWx1ZU9mKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChmcmVxIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gZnJlcS50b0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhIHRpbWUgcmVwcmVzZW50YXRpb24gaW50byB0aWNrcy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJuIHtUaWNrc30gIHRoZSB0aW1lIGluIHRpY2tzXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS50b1RpY2tzID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcih0aW1lKSB8fCBUb25lLmlzU3RyaW5nKHRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpLnRvVGlja3MoKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNVbmRlZih0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQudGlja3M7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aW1lIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGltZS50b1RpY2tzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QYXJhbSB3cmFwcyB0aGUgbmF0aXZlIFdlYiBBdWRpbydzIEF1ZGlvUGFyYW0gdG8gcHJvdmlkZVxuXHRcdCAqICAgICAgICAgYWRkaXRpb25hbCB1bml0IGNvbnZlcnNpb24gZnVuY3Rpb25hbGl0eS4gSXQgYWxzb1xuXHRcdCAqICAgICAgICAgc2VydmVzIGFzIGEgYmFzZS1jbGFzcyBmb3IgY2xhc3NlcyB3aGljaCBoYXZlIGEgc2luZ2xlLFxuXHRcdCAqICAgICAgICAgYXV0b21hdGFibGUgcGFyYW1ldGVyLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSAge0F1ZGlvUGFyYW19ICBwYXJhbSAgVGhlIHBhcmFtZXRlciB0byB3cmFwLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLlR5cGV9IHVuaXRzIFRoZSB1bml0cyBvZiB0aGUgYXVkaW8gcGFyYW0uXG5cdFx0ICogIEBwYXJhbSAge0Jvb2xlYW59IGNvbnZlcnQgSWYgdGhlIHBhcmFtIHNob3VsZCBiZSBjb252ZXJ0ZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3BhcmFtJyxcblx0ICAgICAgICAgICAgJ3VuaXRzJyxcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnXG5cdCAgICAgICAgXSwgVG9uZS5QYXJhbSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbmF0aXZlIHBhcmFtZXRlciB0byBjb250cm9sXG5cdFx0XHQgKiAgQHR5cGUgIHtBdWRpb1BhcmFtfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuaW5wdXQgPSBvcHRpb25zLnBhcmFtO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB1bml0cyBvZiB0aGUgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVHlwZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudW5pdHMgPSBvcHRpb25zLnVuaXRzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIElmIHRoZSB2YWx1ZSBzaG91bGQgYmUgY29udmVydGVkIG9yIG5vdFxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jb252ZXJ0ID0gb3B0aW9ucy5jb252ZXJ0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRydWUgaWYgdGhlIHNpZ25hbCB2YWx1ZSBpcyBiZWluZyBvdmVycmlkZGVuIGJ5XG5cdFx0XHQgKiAgYSBjb25uZWN0ZWQgc2lnbmFsLlxuXHRcdFx0ICogIEByZWFkT25seVxuXHRcdFx0ICogIEB0eXBlICB7Ym9vbGVhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdmVycmlkZGVuID0gZmFsc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdGltZWxpbmUgd2hpY2ggdHJhY2tzIGFsbCBvZiB0aGUgYXV0b21hdGlvbnMuXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5UaW1lbGluZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBuZXcgVG9uZS5UaW1lbGluZSgxMDAwKTtcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQob3B0aW9ucy52YWx1ZSkgJiYgdGhpcy5fcGFyYW0pIHtcblx0ICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGFyYW0sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5EZWZhdWx0LFxuXHQgICAgICAgICdjb252ZXJ0JzogdHJ1ZSxcblx0ICAgICAgICAncGFyYW0nOiB1bmRlZmluZWRcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBhcmFtI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcmFtLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RvVW5pdHModGhpcy5nZXRWYWx1ZUF0VGltZShub3cpKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2luaXRpYWxWYWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgICAgIHRoaXMuY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRoaXMuY29udGV4dC5jdXJyZW50VGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVBdFRpbWUodmFsdWUsIHRoaXMuY29udGV4dC5jdXJyZW50VGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaW11bSBvdXRwdXQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBhcmFtI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcmFtLnByb3RvdHlwZSwgJ21pblZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLlRpbWUgfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkZyZXF1ZW5jeSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuTm9ybWFsUmFuZ2UgfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLlBvc2l0aXZlIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5CUE0pIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5BdWRpb1JhbmdlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkRlY2liZWxzKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gLUluZmluaXR5O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmFtLm1pblZhbHVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSBvdXRwdXQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBhcmFtI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcmFtLnByb3RvdHlwZSwgJ21heFZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLk5vcm1hbFJhbmdlIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5BdWRpb1JhbmdlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJhbS5tYXhWYWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgdGhlIGdpdmVuIHZhbHVlIGZyb20gdGhlIHR5cGUgc3BlY2lmaWVkIGJ5IFRvbmUuUGFyYW0udW5pdHNcblx0XHQgKiAgaW50byB0aGUgZGVzdGluYXRpb24gdmFsdWUgKHN1Y2ggYXMgR2FpbiBvciBGcmVxdWVuY3kpLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHsqfSB2YWwgdGhlIHZhbHVlIHRvIGNvbnZlcnRcblx0XHQgKiAgQHJldHVybiB7bnVtYmVyfSAgICAgdGhlIG51bWJlciB3aGljaCB0aGUgdmFsdWUgc2hvdWxkIGJlIHNldCB0b1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX2Zyb21Vbml0cyA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICBpZiAoKHRoaXMuY29udmVydCB8fCBUb25lLmlzVW5kZWYodGhpcy5jb252ZXJ0KSkgJiYgIXRoaXMub3ZlcnJpZGRlbikge1xuXHQgICAgICAgICAgICBzd2l0Y2ggKHRoaXMudW5pdHMpIHtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuVGltZTpcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvU2Vjb25kcyh2YWwpO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5GcmVxdWVuY3k6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b0ZyZXF1ZW5jeSh2YWwpO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5EZWNpYmVsczpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBUb25lLmRiVG9HYWluKHZhbCk7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLk5vcm1hbFJhbmdlOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbCwgMCksIDEpO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5BdWRpb1JhbmdlOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbCwgLTEpLCAxKTtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuUG9zaXRpdmU6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodmFsLCAwKTtcblx0ICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDb252ZXJ0IHRoZSBwYXJhbWV0ZXJzIHZhbHVlIGludG8gdGhlIHVuaXRzIHNwZWNpZmllZCBieSBUb25lLlBhcmFtLnVuaXRzLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtICB7bnVtYmVyfSB2YWwgdGhlIHZhbHVlIHRvIGNvbnZlcnRcblx0XHQgKiBAcmV0dXJuIHtudW1iZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fdG9Vbml0cyA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICBpZiAodGhpcy5jb252ZXJ0IHx8IFRvbmUuaXNVbmRlZih0aGlzLmNvbnZlcnQpKSB7XG5cdCAgICAgICAgICAgIHN3aXRjaCAodGhpcy51bml0cykge1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5EZWNpYmVsczpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBUb25lLmdhaW5Ub0RiKHZhbCk7XG5cdCAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBtaW5pbXVtIG91dHB1dCB2YWx1ZVxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX21pbk91dHB1dCA9IDAuMDAwMDE7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGV2ZW50IHR5cGVzXG5cdFx0ICogIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlID0ge1xuXHQgICAgICAgIExpbmVhcjogJ2xpbmVhclJhbXBUb1ZhbHVlQXRUaW1lJyxcblx0ICAgICAgICBFeHBvbmVudGlhbDogJ2V4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUnLFxuXHQgICAgICAgIFRhcmdldDogJ3NldFRhcmdldEF0VGltZScsXG5cdCAgICAgICAgU2V0VmFsdWU6ICdzZXRWYWx1ZUF0VGltZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGEgcGFyYW1ldGVyIHZhbHVlIGNoYW5nZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtIHsqfVx0dmFsdWUgVGhlIHZhbHVlIHRvIHNldCB0aGUgc2lnbmFsLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9ICB0aW1lIFRoZSB0aW1lIHdoZW4gdGhlIGNoYW5nZSBzaG91bGQgb2NjdXIuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zZXQgdGhlIGZyZXF1ZW5jeSB0byBcIkc0XCIgaW4gZXhhY3RseSAxIHNlY29uZCBmcm9tIG5vdy5cblx0XHQgKiBmcmVxLnNldFZhbHVlQXRUaW1lKFwiRzRcIiwgXCIrMVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlNldFZhbHVlLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiB0aW1lXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uc2V0VmFsdWVBdFRpbWUodmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHNpZ25hbHMgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuIFN1YnNlcXVlbnQgc2NoZWR1bGluZ1xuXHRcdCAqICBtYXkgaW52YWxpZGF0ZSB0aGUgcmV0dXJuZWQgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBXaGVuIHRvIGdldCB0aGUgdmFsdWVcblx0XHQgKiAgQHJldHVybnMge051bWJlcn0gVGhlIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBhZnRlciA9IHRoaXMuX2V2ZW50cy5nZXRBZnRlcih0aW1lKTtcblx0ICAgICAgICB2YXIgYmVmb3JlID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICB2YXIgaW5pdGlhbFZhbHVlID0gVG9uZS5kZWZhdWx0QXJnKHRoaXMuX2luaXRpYWxWYWx1ZSwgdGhpcy5fcGFyYW0uZGVmYXVsdFZhbHVlKTtcblx0ICAgICAgICB2YXIgdmFsdWUgPSBpbml0aWFsVmFsdWU7XG5cdCAgICAgICAgLy9pZiBpdCB3YXMgc2V0IGJ5XG5cdCAgICAgICAgaWYgKGJlZm9yZSA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IGluaXRpYWxWYWx1ZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGJlZm9yZS50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlRhcmdldCkge1xuXHQgICAgICAgICAgICB2YXIgcHJldmlvdXMgPSB0aGlzLl9ldmVudHMuZ2V0QmVmb3JlKGJlZm9yZS50aW1lKTtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzVmFsO1xuXHQgICAgICAgICAgICBpZiAocHJldmlvdXMgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsID0gaW5pdGlhbFZhbHVlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcHJldmlvdXNWYWwgPSBwcmV2aW91cy52YWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2V4cG9uZW50aWFsQXBwcm9hY2goYmVmb3JlLnRpbWUsIHByZXZpb3VzVmFsLCBiZWZvcmUudmFsdWUsIGJlZm9yZS5jb25zdGFudCwgdGltZSk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChhZnRlciA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IGJlZm9yZS52YWx1ZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGFmdGVyLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuTGluZWFyKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fbGluZWFySW50ZXJwb2xhdGUoYmVmb3JlLnRpbWUsIGJlZm9yZS52YWx1ZSwgYWZ0ZXIudGltZSwgYWZ0ZXIudmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYWZ0ZXIudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5FeHBvbmVudGlhbCkge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2V4cG9uZW50aWFsSW50ZXJwb2xhdGUoYmVmb3JlLnRpbWUsIGJlZm9yZS52YWx1ZSwgYWZ0ZXIudGltZSwgYWZ0ZXIudmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gYmVmb3JlLnZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdmFsdWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENyZWF0ZXMgYSBzY2hlZHVsZSBwb2ludCB3aXRoIHRoZSBjdXJyZW50IHZhbHVlIGF0IHRoZSBjdXJyZW50IHRpbWUuXG5cdFx0ICogIFRoaXMgaXMgdXNlZnVsIGZvciBjcmVhdGluZyBhbiBhdXRvbWF0aW9uIGFuY2hvciBwb2ludCBpbiBvcmRlciB0b1xuXHRcdCAqICBzY2hlZHVsZSBjaGFuZ2VzIGZyb20gdGhlIGN1cnJlbnQgdmFsdWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSBub3cgKE9wdGlvbmFsbHkpIHBhc3MgdGhlIG5vdyB2YWx1ZSBpbi5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnNldFJhbXBQb2ludCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBjdXJyZW50VmFsID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLmNhbmNlbEFuZEhvbGRBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKGN1cnJlbnRWYWwgPT09IDApIHtcblx0ICAgICAgICAgICAgY3VycmVudFZhbCA9IHRoaXMuX21pbk91dHB1dDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5zZXRWYWx1ZUF0VGltZSh0aGlzLl90b1VuaXRzKGN1cnJlbnRWYWwpLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGEgbGluZWFyIGNvbnRpbnVvdXMgY2hhbmdlIGluIHBhcmFtZXRlciB2YWx1ZSBmcm9tIHRoZVxuXHRcdCAqICBwcmV2aW91cyBzY2hlZHVsZWQgcGFyYW1ldGVyIHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGVuZFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCBlbmRUaW1lKSB7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIGVuZFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhlbmRUaW1lKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkxpbmVhcixcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWUsXG5cdCAgICAgICAgICAgICd0aW1lJzogZW5kVGltZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlLCBlbmRUaW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGFuIGV4cG9uZW50aWFsIGNvbnRpbnVvdXMgY2hhbmdlIGluIHBhcmFtZXRlciB2YWx1ZSBmcm9tXG5cdFx0ICogIHRoZSBwcmV2aW91cyBzY2hlZHVsZWQgcGFyYW1ldGVyIHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGVuZFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIGVuZFRpbWUpIHtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgdmFsdWUgPSBNYXRoLm1heCh0aGlzLl9taW5PdXRwdXQsIHZhbHVlKTtcblx0ICAgICAgICBlbmRUaW1lID0gdGhpcy50b1NlY29uZHMoZW5kVGltZSk7XG5cdCAgICAgICAgLy9zdG9yZSB0aGUgZXZlbnRcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkV4cG9uZW50aWFsLFxuXHQgICAgICAgICAgICAndGltZSc6IGVuZFRpbWUsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgZW5kVGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhbiBleHBvbmVudGlhbCBjb250aW51b3VzIGNoYW5nZSBpbiBwYXJhbWV0ZXIgdmFsdWUgZnJvbVxuXHRcdCAqICB0aGUgY3VycmVudCB0aW1lIGFuZCBjdXJyZW50IHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZSBvdmVyIHRoZVxuXHRcdCAqICBkdXJhdGlvbiBvZiB0aGUgcmFtcFRpbWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byByYW1wIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSByYW1wVGltZSB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHRvIHJhbXAgZnJvbSBpdCdzIGN1cnJlbnQgdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfVx0W3N0YXJ0VGltZT1ub3ddIFx0V2hlbiB0aGUgcmFtcCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9leHBvbmVudGlhbGx5IHJhbXAgdG8gdGhlIHZhbHVlIDIgb3ZlciA0IHNlY29uZHMuXG5cdFx0ICogc2lnbmFsLmV4cG9uZW50aWFsUmFtcFRvKDIsIDQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZXhwb25lbnRpYWxSYW1wVG8gPSBmdW5jdGlvbiAodmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0UmFtcFBvaW50KHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlLCBzdGFydFRpbWUgKyB0aGlzLnRvU2Vjb25kcyhyYW1wVGltZSkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYW4gbGluZWFyIGNvbnRpbnVvdXMgY2hhbmdlIGluIHBhcmFtZXRlciB2YWx1ZSBmcm9tXG5cdFx0ICogIHRoZSBjdXJyZW50IHRpbWUgYW5kIGN1cnJlbnQgdmFsdWUgdG8gdGhlIGdpdmVuIHZhbHVlIG92ZXIgdGhlXG5cdFx0ICogIGR1cmF0aW9uIG9mIHRoZSByYW1wVGltZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlICAgVGhlIHZhbHVlIHRvIHJhbXAgdG8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHJhbXBUaW1lIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdG8gcmFtcCBmcm9tIGl0J3MgY3VycmVudCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9XHRbc3RhcnRUaW1lPW5vd10gXHRXaGVuIHRoZSByYW1wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2xpbmVhcmx5IHJhbXAgdG8gdGhlIHZhbHVlIDQgb3ZlciAzIHNlY29uZHMuXG5cdFx0ICogc2lnbmFsLmxpbmVhclJhbXBUbyg0LCAzKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmxpbmVhclJhbXBUbyA9IGZ1bmN0aW9uICh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSkge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRSYW1wUG9pbnQoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlLCBzdGFydFRpbWUgKyB0aGlzLnRvU2Vjb25kcyhyYW1wVGltZSkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCBleHBvbmVudGlhbGx5IGFwcHJvYWNoaW5nIHRoZSB0YXJnZXQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuIFNpbmNlIGl0XG5cdFx0ICogIGlzIGFuIGV4cG9uZW50aWFsIGFwcHJvYWNoIGl0IHdpbGwgY29udGludWUgYXBwcm9hY2hpbmcgYWZ0ZXIgdGhlIHJhbXAgZHVyYXRpb24uIFRoZVxuXHRcdCAqICByYW1wVGltZSBpcyB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRvIHJlYWNoIG92ZXIgOTklIG9mIHRoZSB3YXkgdG93YXJkcyB0aGUgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWUgICBUaGUgdmFsdWUgdG8gcmFtcCB0by5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gcmFtcFRpbWUgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0byByYW1wIGZyb20gaXQncyBjdXJyZW50IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX1cdFtzdGFydFRpbWU9bm93XSBcdFdoZW4gdGhlIHJhbXAgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vZXhwb25lbnRpYWxseSByYW1wIHRvIHRoZSB2YWx1ZSAyIG92ZXIgNCBzZWNvbmRzLlxuXHRcdCAqIHNpZ25hbC5leHBvbmVudGlhbFJhbXBUbygyLCA0KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnRhcmdldFJhbXBUbyA9IGZ1bmN0aW9uICh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSkge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRSYW1wUG9pbnQoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLmV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSh2YWx1ZSwgc3RhcnRUaW1lLCByYW1wVGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IGV4cG9uZW50aWFsbHkgYXBwcm9hY2hpbmcgdGhlIHRhcmdldCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS4gU2luY2UgaXRcblx0XHQgKiAgaXMgYW4gZXhwb25lbnRpYWwgYXBwcm9hY2ggaXQgd2lsbCBjb250aW51ZSBhcHByb2FjaGluZyBhZnRlciB0aGUgcmFtcCBkdXJhdGlvbi4gVGhlXG5cdFx0ICogIHJhbXBUaW1lIGlzIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdG8gcmVhY2ggb3ZlciA5OSUgb2YgdGhlIHdheSB0b3dhcmRzIHRoZSB2YWx1ZS4gVGhpcyBtZXRob2RzXG5cdFx0ICogIGlzIHNpbWlsYXIgdG8gc2V0VGFyZ2V0QXRUaW1lIGV4Y2VwdCB0aGUgdGhpcmQgYXJndW1lbnQgaXMgYSB0aW1lIGluc3RlYWQgb2YgYSAndGltZUNvbnN0YW50J1xuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlICAgVGhlIHZhbHVlIHRvIHJhbXAgdG8uXG5cdFx0ICogIEBwYXJhbSB7VGltZX1cdHRpbWUgXHRXaGVuIHRoZSByYW1wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gcmFtcFRpbWUgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0byByYW1wIGZyb20gaXQncyBjdXJyZW50IHZhbHVlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9leHBvbmVudGlhbGx5IHJhbXAgdG8gdGhlIHZhbHVlIDIgb3ZlciA0IHNlY29uZHMuXG5cdFx0ICogc2lnbmFsLmV4cG9uZW50aWFsUmFtcFRvKDIsIDQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lLCByYW1wVGltZSkge1xuXHQgICAgICAgIHZhciB0aW1lQ29uc3RhbnQgPSBNYXRoLmxvZyh0aGlzLnRvU2Vjb25kcyhyYW1wVGltZSkgKyAxKSAvIE1hdGgubG9nKDIwMCk7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLnNldFRhcmdldEF0VGltZSh2YWx1ZSwgdGltZSwgdGltZUNvbnN0YW50KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgZXhwb25lbnRpYWxseSBhcHByb2FjaGluZyB0aGUgdGFyZ2V0IHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lIHdpdGhcblx0XHQgKiAgYSByYXRlIGhhdmluZyB0aGUgZ2l2ZW4gdGltZSBjb25zdGFudC5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gc3RhcnRUaW1lXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB0aW1lQ29uc3RhbnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnNldFRhcmdldEF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgc3RhcnRUaW1lLCB0aW1lQ29uc3RhbnQpIHtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgLy8gVGhlIHZhbHVlIHdpbGwgbmV2ZXIgYmUgYWJsZSB0byBhcHByb2FjaCB3aXRob3V0IHRpbWVDb25zdGFudCA+IDAuXG5cdCAgICAgICAgaWYgKHRpbWVDb25zdGFudCA8PSAwKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGltZUNvbnN0YW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgc3RhcnRUaW1lID0gdGhpcy50b1NlY29uZHMoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlRhcmdldCxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWUsXG5cdCAgICAgICAgICAgICd0aW1lJzogc3RhcnRUaW1lLFxuXHQgICAgICAgICAgICAnY29uc3RhbnQnOiB0aW1lQ29uc3RhbnRcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5zZXRUYXJnZXRBdFRpbWUodmFsdWUsIHN0YXJ0VGltZSwgdGltZUNvbnN0YW50KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyBhbiBhcnJheSBvZiBhcmJpdHJhcnkgcGFyYW1ldGVyIHZhbHVlcyBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7QXJyYXl9IHZhbHVlc1xuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGR1cmF0aW9uXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtzY2FsaW5nPTFdIElmIHRoZSB2YWx1ZXMgaW4gdGhlIGN1cnZlIHNob3VsZCBiZSBzY2FsZWQgYnkgc29tZSB2YWx1ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuc2V0VmFsdWVDdXJ2ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZXMsIHN0YXJ0VGltZSwgZHVyYXRpb24sIHNjYWxpbmcpIHtcblx0ICAgICAgICBzY2FsaW5nID0gVG9uZS5kZWZhdWx0QXJnKHNjYWxpbmcsIDEpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRWYWx1ZUF0VGltZSh2YWx1ZXNbMF0gKiBzY2FsaW5nLCBzdGFydFRpbWUpO1xuXHQgICAgICAgIHZhciBzZWdUaW1lID0gZHVyYXRpb24gLyAodmFsdWVzLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodmFsdWVzW2ldICogc2NhbGluZywgc3RhcnRUaW1lICsgaSAqIHNlZ1RpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VscyBhbGwgc2NoZWR1bGVkIHBhcmFtZXRlciBjaGFuZ2VzIHdpdGggdGltZXMgZ3JlYXRlciB0aGFuIG9yXG5cdFx0ICogIGVxdWFsIHRvIHN0YXJ0VGltZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhpcyBpcyBzaW1pbGFyIHRvIFtjYW5jZWxTY2hlZHVsZWRWYWx1ZXNdKCNjYW5jZWxTY2hlZHVsZWRWYWx1ZXMpIGV4Y2VwdFxuXHRcdCAqICBpdCBob2xkcyB0aGUgYXV0b21hdGVkIHZhbHVlIGF0IHRpbWUgdW50aWwgdGhlIG5leHQgYXV0b21hdGVkIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5jYW5jZWxBbmRIb2xkQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgdmFsdWVBdFRpbWUgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIC8vaWYgdGhlcmUgaXMgYW4gZXZlbnQgYXQgdGhlIGdpdmVuIHRpbWVcblx0ICAgICAgICAvL2FuZCB0aGF0IGV2ZW4gaXMgbm90IGEgXCJzZXRcIlxuXHQgICAgICAgIHZhciBiZWZvcmUgPSB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIHZhciBhZnRlciA9IHRoaXMuX2V2ZW50cy5nZXRBZnRlcih0aW1lKTtcblx0ICAgICAgICBpZiAoYmVmb3JlICYmIGJlZm9yZS50aW1lID09PSB0aW1lKSB7XG5cdCAgICAgICAgICAgIC8vcmVtb3ZlIGV2ZXJ5dGhpbmcgYWZ0ZXJcblx0ICAgICAgICAgICAgaWYgKGFmdGVyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKGFmdGVyLnRpbWUpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbCh0aW1lICsgMC4wMDAwMDEpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmIChhZnRlcikge1xuXHQgICAgICAgICAgICAvL2NhbmNlbCB0aGUgbmV4dCBldmVudChzKVxuXHQgICAgICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKGFmdGVyLnRpbWUpO1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3BhcmFtLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAoYWZ0ZXIudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5MaW5lYXIpIHtcblx0ICAgICAgICAgICAgICAgIGlmICghdGhpcy5fcGFyYW0uY2FuY2VsQW5kSG9sZEF0VGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodmFsdWVBdFRpbWUsIHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkxpbmVhcixcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVBdFRpbWUsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd0aW1lJzogdGltZVxuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKGFmdGVyLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuRXhwb25lbnRpYWwpIHtcblx0ICAgICAgICAgICAgICAgIGlmICghdGhpcy5fcGFyYW0uY2FuY2VsQW5kSG9sZEF0VGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZUF0VGltZSwgdGltZSk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5hZGQoe1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuRXhwb25lbnRpYWwsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlQXRUaW1lLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAndGltZSc6IHRpbWVcblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3NldCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWVcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlNldFZhbHVlLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZUF0VGltZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiB0aW1lXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFyYW0uY2FuY2VsQW5kSG9sZEF0VGltZSh0aW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXJhbS5zZXRWYWx1ZUF0VGltZSh2YWx1ZUF0VGltZSwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSYW1wcyB0byB0aGUgZ2l2ZW4gdmFsdWUgb3ZlciB0aGUgZHVyYXRpb24gb2YgdGhlIHJhbXBUaW1lLlxuXHRcdCAqICBBdXRvbWF0aWNhbGx5IHNlbGVjdHMgdGhlIGJlc3QgcmFtcCB0eXBlIChleHBvbmVudGlhbCBvciBsaW5lYXIpXG5cdFx0ICogIGRlcGVuZGluZyBvbiB0aGUgYHVuaXRzYCBvZiB0aGUgc2lnbmFsXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSByYW1wVGltZSBcdFRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0byByYW1wIGZyb20gaXQncyBjdXJyZW50IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX1cdFtzdGFydFRpbWU9bm93XSBcdFdoZW4gdGhlIHJhbXAgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vcmFtcCB0byB0aGUgdmFsdWUgZWl0aGVyIGxpbmVhcmx5IG9yIGV4cG9uZW50aWFsbHlcblx0XHQgKiAvL2RlcGVuZGluZyBvbiB0aGUgXCJ1bml0c1wiIHZhbHVlIG9mIHRoZSBzaWduYWxcblx0XHQgKiBzaWduYWwucmFtcFRvKDAsIDEwKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NjaGVkdWxlIGl0IHRvIHJhbXAgc3RhcnRpbmcgYXQgYSBzcGVjaWZpYyB0aW1lXG5cdFx0ICogc2lnbmFsLnJhbXBUbygwLCAxMCwgNSlcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnJhbXBUbyA9IGZ1bmN0aW9uICh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSkge1xuXHQgICAgICAgIHJhbXBUaW1lID0gVG9uZS5kZWZhdWx0QXJnKHJhbXBUaW1lLCAwLjEpO1xuXHQgICAgICAgIGlmICh0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuRnJlcXVlbmN5IHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5CUE0gfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkRlY2liZWxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZXhwb25lbnRpYWxSYW1wVG8odmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMubGluZWFyUmFtcFRvKHZhbHVlLCByYW1wVGltZSwgc3RhcnRUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QVVUT01BVElPTiBDVVJWRSBDQUxDVUxBVElPTlNcblx0ICAgIC8vXHRNSVQgTGljZW5zZSwgY29weXJpZ2h0IChjKSAyMDE0IEpvcmRhbiBTYW50ZWxsXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIENhbGN1bGF0ZXMgdGhlIHRoZSB2YWx1ZSBhbG9uZyB0aGUgY3VydmUgcHJvZHVjZWQgYnkgc2V0VGFyZ2V0QXRUaW1lXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fZXhwb25lbnRpYWxBcHByb2FjaCA9IGZ1bmN0aW9uICh0MCwgdjAsIHYxLCB0aW1lQ29uc3RhbnQsIHQpIHtcblx0ICAgICAgICByZXR1cm4gdjEgKyAodjAgLSB2MSkgKiBNYXRoLmV4cCgtKHQgLSB0MCkgLyB0aW1lQ29uc3RhbnQpO1xuXHQgICAgfTtcblx0ICAgIC8vIENhbGN1bGF0ZXMgdGhlIHRoZSB2YWx1ZSBhbG9uZyB0aGUgY3VydmUgcHJvZHVjZWQgYnkgbGluZWFyUmFtcFRvVmFsdWVBdFRpbWVcblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLl9saW5lYXJJbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uICh0MCwgdjAsIHQxLCB2MSwgdCkge1xuXHQgICAgICAgIHJldHVybiB2MCArICh2MSAtIHYwKSAqICgodCAtIHQwKSAvICh0MSAtIHQwKSk7XG5cdCAgICB9O1xuXHQgICAgLy8gQ2FsY3VsYXRlcyB0aGUgdGhlIHZhbHVlIGFsb25nIHRoZSBjdXJ2ZSBwcm9kdWNlZCBieSBleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fZXhwb25lbnRpYWxJbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uICh0MCwgdjAsIHQxLCB2MSwgdCkge1xuXHQgICAgICAgIHJldHVybiB2MCAqIE1hdGgucG93KHYxIC8gdjAsICh0IC0gdDApIC8gKHQxIC0gdDApKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYXJhbTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcGVyIGFyb3VuZCB0aGUgT2ZmbGluZUF1ZGlvQ29udGV4dFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Db250ZXh0fVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBjaGFubmVscyAgVGhlIG51bWJlciBvZiBjaGFubmVscyB0byByZW5kZXJcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgZHVyYXRpb24gIFRoZSBkdXJhdGlvbiB0byByZW5kZXIgaW4gc2FtcGxlc1xuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gc2FtcGxlUmF0ZSB0aGUgc2FtcGxlIHJhdGUgdG8gcmVuZGVyIGF0XG5cdFx0ICovXG5cdCAgICBUb25lLk9mZmxpbmVDb250ZXh0ID0gZnVuY3Rpb24gKGNoYW5uZWxzLCBkdXJhdGlvbiwgc2FtcGxlUmF0ZSkge1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvZmZsaW5lIGNvbnRleHRcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlICB7T2ZmbGluZUF1ZGlvQ29udGV4dH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHZhciBvZmZsaW5lQ29udGV4dCA9IG5ldyBPZmZsaW5lQXVkaW9Db250ZXh0KGNoYW5uZWxzLCBkdXJhdGlvbiAqIHNhbXBsZVJhdGUsIHNhbXBsZVJhdGUpO1xuXHQgICAgICAgIC8vd3JhcCB0aGUgbWV0aG9kcy9tZW1iZXJzXG5cdCAgICAgICAgVG9uZS5Db250ZXh0LmNhbGwodGhpcywge1xuXHQgICAgICAgICAgICAnY29udGV4dCc6IG9mZmxpbmVDb250ZXh0LFxuXHQgICAgICAgICAgICAnY2xvY2tTb3VyY2UnOiAnb2ZmbGluZScsXG5cdCAgICAgICAgICAgICdsb29rQWhlYWQnOiAwLFxuXHQgICAgICAgICAgICAndXBkYXRlSW50ZXJ2YWwnOiAxMjggLyBzYW1wbGVSYXRlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBwcml2YXRlIHJlZmVyZW5jZSB0byB0aGUgZHVyYXRpb25cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZHVyYXRpb24gPSBkdXJhdGlvbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbiBhcnRpZmljaWFsIGNsb2NrIHNvdXJjZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IDA7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5PZmZsaW5lQ29udGV4dCwgVG9uZS5Db250ZXh0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBPdmVycmlkZSB0aGUgbm93IG1ldGhvZCB0byBwb2ludCB0byB0aGUgaW50ZXJuYWwgY2xvY2sgdGltZVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PZmZsaW5lQ29udGV4dC5wcm90b3R5cGUubm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50VGltZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVuZGVyIHRoZSBvdXRwdXQgb2YgdGhlIE9mZmxpbmVDb250ZXh0XG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PZmZsaW5lQ29udGV4dC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHdoaWxlICh0aGlzLl9kdXJhdGlvbiAtIHRoaXMuX2N1cnJlbnRUaW1lID49IDApIHtcblx0ICAgICAgICAgICAgLy9pbnZva2UgYWxsIHRoZSBjYWxsYmFja3Mgb24gdGhhdCB0aW1lXG5cdCAgICAgICAgICAgIHRoaXMuZW1pdCgndGljaycpO1xuXHQgICAgICAgICAgICAvL2luY3JlbWVudCB0aGUgY2xvY2tcblx0ICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gdGhpcy5ibG9ja1RpbWU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsb3NlIHRoZSBjb250ZXh0XG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PZmZsaW5lQ29udGV4dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fY29udGV4dCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk9mZmxpbmVDb250ZXh0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG5cdCAgICAgICAgdmFyIGlzTW9iaWxlU2FmYXJpID0gdWEuaW5jbHVkZXMoJ3NhZmFyaScpICYmICF1YS5pbmNsdWRlcygnY2hyb21lJykgJiYgdWEuaW5jbHVkZXMoJ21vYmlsZScpO1xuXHQgICAgICAgIGlmIChpc01vYmlsZVNhZmFyaSkge1xuXHQgICAgICAgICAgICAvL21vYmlsZSBzYWZhcmkgaGFzIGEgYml6YXJyZSBidWcgd2l0aCB0aGUgb2ZmbGluZSBjb250ZXh0XG5cdCAgICAgICAgICAgIC8vd2hlbiBhIEJ1ZmZlclNvdXJjZU5vZGUgaXMgc3RhcnRlZCwgaXQgc3RhcnRzIHRoZSBvZmZsaW5lIGNvbnRleHRcblx0ICAgICAgICAgICAgLy9cblx0ICAgICAgICAgICAgLy9kZWZlcnJpbmcgYWxsIEJ1ZmZlclNvdXJjZSBzdGFydHMgdGlsbCB0aGUgbGFzdCBwb3NzaWJsZSBtb21lbnRcblx0ICAgICAgICAgICAgLy9yZWR1Y2VzIHRoZSBsaWtlbGlob29kIG9mIHRoaXMgaGFwcGVuaW5nXG5cdCAgICAgICAgICAgIFRvbmUuT2ZmbGluZUNvbnRleHQucHJvdG90eXBlLmNyZWF0ZUJ1ZmZlclNvdXJjZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBidWZmZXJTb3VyY2UgPSB0aGlzLl9jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xuXHQgICAgICAgICAgICAgICAgdmFyIF9uYXRpdmVfc3RhcnQgPSBidWZmZXJTb3VyY2Uuc3RhcnQ7XG5cdCAgICAgICAgICAgICAgICBidWZmZXJTb3VyY2Uuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIF9uYXRpdmVfc3RhcnQuY2FsbChidWZmZXJTb3VyY2UsIHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgMCk7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyU291cmNlO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgdGhpbiB3cmFwcGVyIGFyb3VuZCB0aGUgTmF0aXZlIFdlYiBBdWRpbyBHYWluTm9kZS5cblx0XHQgKiAgICAgICAgIFRoZSBHYWluTm9kZSBpcyBhIGJhc2ljIGJ1aWxkaW5nIGJsb2NrIG9mIHRoZSBXZWIgQXVkaW9cblx0XHQgKiAgICAgICAgIEFQSSBhbmQgaXMgdXNlZnVsIGZvciByb3V0aW5nIGF1ZGlvIGFuZCBhZGp1c3RpbmcgZ2FpbnMuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXI9fSAgZ2FpbiAgVGhlIGluaXRpYWwgZ2FpbiBvZiB0aGUgR2Fpbk5vZGVcblx0XHQgKiAgQHBhcmFtIHtUb25lLlR5cGU9fSB1bml0cyBUaGUgdW5pdHMgb2YgdGhlIGdhaW4gcGFyYW1ldGVyLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HYWluID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2dhaW4nLFxuXHQgICAgICAgICAgICAndW5pdHMnXG5cdCAgICAgICAgXSwgVG9uZS5HYWluKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBHYWluTm9kZVxuXHRcdFx0ICogIEB0eXBlICB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuX2dhaW5Ob2RlID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBwYXJhbWV0ZXIgb2YgdGhlIGdhaW4gbm9kZS5cblx0XHRcdCAqICBAdHlwZSB7R2Fpbn1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmdhaW4gPSBuZXcgVG9uZS5QYXJhbSh7XG5cdCAgICAgICAgICAgICdwYXJhbSc6IHRoaXMuX2dhaW5Ob2RlLmdhaW4sXG5cdCAgICAgICAgICAgICd1bml0cyc6IG9wdGlvbnMudW5pdHMsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IG9wdGlvbnMuZ2Fpbixcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnOiBvcHRpb25zLmNvbnZlcnRcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZ2FpbicpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR2FpbiwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkdhaW4uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2dhaW4nOiAxLFxuXHQgICAgICAgICdjb252ZXJ0JzogdHJ1ZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuR2Fpbn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR2Fpbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2dhaW4nKTtcblx0ICAgICAgICB0aGlzLmdhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR2Fpbjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkICYmICFBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUNvbnN0YW50U291cmNlKSB7XG5cdCAgICAgICAgdmFyIENvbnN0YW50U291cmNlTm9kZSA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlcigxLCAxMjgsIGNvbnRleHQuc2FtcGxlUmF0ZSk7XG5cdCAgICAgICAgICAgIHZhciBhcnIgPSBidWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBhcnJbaV0gPSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5jaGFubmVsQ291bnQgPSAxO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5idWZmZXIgPSBidWZmZXI7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5sb29wID0gdHJ1ZTtcblx0ICAgICAgICAgICAgdmFyIGdhaW5Ob2RlID0gdGhpcy5fb3V0cHV0ID0gY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgICAgIHRoaXMub2Zmc2V0ID0gZ2Fpbk5vZGUuZ2Fpbjtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLmNvbm5lY3QoZ2Fpbk5vZGUpO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQ29uc3RhbnRTb3VyY2VOb2RlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5zdGFydCh0aW1lKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBDb25zdGFudFNvdXJjZU5vZGUucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2Uuc3RvcCh0aW1lKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBDb25zdGFudFNvdXJjZU5vZGUucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX291dHB1dC5jb25uZWN0LmFwcGx5KHRoaXMuX291dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBDb25zdGFudFNvdXJjZU5vZGUucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX291dHB1dC5kaXNjb25uZWN0LmFwcGx5KHRoaXMuX291dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUNvbnN0YW50U291cmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50U291cmNlTm9kZSh0aGlzKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlQ29uc3RhbnRTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnRTb3VyY2VOb2RlKHRoaXMpO1xuXHQgICAgICAgIH07XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQSBzaWduYWwgaXMgYW4gYXVkaW8tcmF0ZSB2YWx1ZS4gVG9uZS5TaWduYWwgaXMgYSBjb3JlIGNvbXBvbmVudCBvZiB0aGUgbGlicmFyeS5cblx0XHQgKiAgICAgICAgICBVbmxpa2UgYSBudW1iZXIsIFNpZ25hbHMgY2FuIGJlIHNjaGVkdWxlZCB3aXRoIHNhbXBsZS1sZXZlbCBhY2N1cmFjeS4gVG9uZS5TaWduYWxcblx0XHQgKiAgICAgICAgICBoYXMgYWxsIG9mIHRoZSBtZXRob2RzIGF2YWlsYWJsZSB0byBuYXRpdmUgV2ViIEF1ZGlvXG5cdFx0ICogICAgICAgICAgW0F1ZGlvUGFyYW1dKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jdGhlLWF1ZGlvcGFyYW0taW50ZXJmYWNlKVxuXHRcdCAqICAgICAgICAgIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBjb252ZW5pZW5jZXMuIFJlYWQgbW9yZSBhYm91dCB3b3JraW5nIHdpdGggc2lnbmFsc1xuXHRcdCAqICAgICAgICAgIFtoZXJlXShodHRwczovL2dpdGh1Yi5jb20vVG9uZWpzL1RvbmUuanMvd2lraS9TaWduYWxzKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuUGFyYW19XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfEF1ZGlvUGFyYW19IFt2YWx1ZV0gSW5pdGlhbCB2YWx1ZSBvZiB0aGUgc2lnbmFsLiBJZiBhbiBBdWRpb1BhcmFtXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgcGFzc2VkIGluLCB0aGF0IHBhcmFtZXRlciB3aWxsIGJlIHdyYXBwZWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgY29udHJvbGxlZCBieSB0aGUgU2lnbmFsLlxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ30gW3VuaXRzPU51bWJlcl0gdW5pdCBUaGUgdW5pdHMgdGhlIHNpZ25hbCBpcyBpbi5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKDEwKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3ZhbHVlJyxcblx0ICAgICAgICAgICAgJ3VuaXRzJ1xuXHQgICAgICAgIF0sIFRvbmUuU2lnbmFsKTtcblx0ICAgICAgICBUb25lLlBhcmFtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQqIFdoZW4gYSBzaWduYWwgaXMgY29ubmVjdGVkIHRvIGFub3RoZXIgc2lnbmFsIG9yIGF1ZGlvIHBhcmFtLFxuXHRcdFx0KiB0aGlzIHNpZ25hbCBiZWNvbWVzIGEgcHJveHkgZm9yIGl0XG5cdFx0XHQqIEB0eXBlIHtBcnJheX1cblx0XHRcdCogQHByaXZhdGVcblx0XHRcdCovXG5cdCAgICAgICAgdGhpcy5fcHJveGllcyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0KiBJbmRpY2F0ZXMgaWYgdGhlIGNvbnN0YW50IHNvdXJjZSB3YXMgc3RhcnRlZCBvciBub3Rcblx0XHRcdCogQHByaXZhdGVcblx0XHRcdCogQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZVN0YXJ0ZWQgPSBmYWxzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBjb25zdGFudCBzb3VyY2Ugbm9kZSB3aGljaCBnZW5lcmF0ZXMgdGhlIHNpZ25hbFxuXHRcdFx0ICogQHR5cGUge0NvbnN0YW50U291cmNlTm9kZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb25zdGFudFNvdXJjZSA9IHRoaXMuY29udGV4dC5jcmVhdGVDb25zdGFudFNvdXJjZSgpO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5fY29uc3RhbnRTb3VyY2Uub2Zmc2V0O1xuXHQgICAgICAgIHRoaXMudmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIG5vZGUgd2hlcmUgdGhlIGNvbnN0YW50IHNpZ25hbCB2YWx1ZSBpcyBzY2FsZWQuXG5cdFx0XHQgKiBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSB0aGlzLl9jb25zdGFudFNvdXJjZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBub2RlIHdoZXJlIHRoZSB2YWx1ZSBpcyBzZXQuXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5QYXJhbX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5fcGFyYW0gPSB0aGlzLm91dHB1dC5vZmZzZXQ7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TaWduYWwsIFRvbmUuUGFyYW0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2YWx1ZSc6IDAsXG5cdCAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkRlZmF1bHQsXG5cdCAgICAgICAgJ2NvbnZlcnQnOiB0cnVlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFdoZW4gc2lnbmFscyBjb25uZWN0IHRvIG90aGVyIHNpZ25hbHMgb3IgQXVkaW9QYXJhbXMsXG5cdFx0ICogIHRoZXkgdGFrZSBvdmVyIHRoZSBvdXRwdXQgdmFsdWUgb2YgdGhhdCBzaWduYWwgb3IgQXVkaW9QYXJhbS5cblx0XHQgKiAgRm9yIGFsbCBvdGhlciBub2RlcywgdGhlIGJlaGF2aW9yIGlzIHRoZSBzYW1lIGFzIGEgZGVmYXVsdCA8Y29kZT5jb25uZWN0PC9jb2RlPi5cblx0XHQgKlxuXHRcdCAqICBAb3ZlcnJpZGVcblx0XHQgKiAgQHBhcmFtIHtBdWRpb1BhcmFtfEF1ZGlvTm9kZXxUb25lLlNpZ25hbHxUb25lfSBub2RlXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TnVtYmVyPTBdIFRoZSBvdXRwdXQgbnVtYmVyIHRvIGNvbm5lY3QgZnJvbS5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtpbnB1dE51bWJlcj0wXSBUaGUgaW5wdXQgbnVtYmVyIHRvIGNvbm5lY3QgdG8uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNpZ25hbH0gdGhpc1xuXHRcdCAqICBAbWV0aG9kXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgLy90aGlzIGlzIGFuIG9wdGltaXphdGlvbiB3aGVyZSB0aGlzIG5vZGUgd2lsbCBmb3J3YXJkIGF1dG9tYXRpb25zXG5cdCAgICAgICAgLy90byBjb25uZWN0ZWQgbm9kZXMgd2l0aG91dCBhbnkgc2lnbmFsIGlmIHBvc3NpYmxlLlxuXHQgICAgICAgIGlmICh0aGlzLl9pc1BhcmFtKG5vZGUpICYmICF0aGlzLl9zb3VyY2VTdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMucHVzaChub2RlKTtcblx0ICAgICAgICAgICAgbm9kZS5vdmVycmlkZGVuID0gdHJ1ZTtcblx0ICAgICAgICAgICAgdGhpcy5fYXBwbHlBdXRvbWF0aW9ucyhub2RlKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2VTdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50U291cmNlLnN0YXJ0KDApO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRha2VzIGEgbm9kZSBhcyBhbiBhcmd1bWVudCBhbmQgcmV0dXJucyBpZiBpdCBpcyBhIFBhcmFtIG9yIEF1ZGlvUGFyYW1cblx0XHQgKiBAcGFyYW0gIHsqfSBub2RlIFRoZSBub2RlIHRvIHRlc3Rcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuX2lzUGFyYW0gPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlBhcmFtICYmIFRvbmUuUGFyYW0gPT09IG5vZGUuY29uc3RydWN0b3IgfHwgbm9kZSBpbnN0YW5jZW9mIEF1ZGlvUGFyYW07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogRGlzY2FyZCB0aGUgb3B0aW1pemF0aW9uIGFuZCBjb25uZWN0IGFsbCBvZiB0aGUgcHJveGllc1xuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuX2Nvbm5lY3RQcm94aWVzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICghdGhpcy5fc291cmNlU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRTb3VyY2Uuc3RhcnQoMCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3Byb3hpZXMuZm9yRWFjaChmdW5jdGlvbiAocHJveHkpIHtcblx0ICAgICAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0LmNhbGwodGhpcywgcHJveHkpO1xuXHQgICAgICAgICAgICBpZiAocHJveHkuX3Byb3hpZXMpIHtcblx0ICAgICAgICAgICAgICAgIHByb3h5Ll9jb25uZWN0UHJveGllcygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJbnZva2VkIHdoZW4gYSBub2RlIGlzIGNvbm5lY3RlZCB0byB0aGlzXG5cdFx0ICogQHBhcmFtICB7QXVkaW9Ob2RlfSBmcm9tXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5fb25Db25uZWN0ID0gZnVuY3Rpb24gKGZyb20pIHtcblx0ICAgICAgICBpZiAoIXRoaXMuX2lzUGFyYW0oZnJvbSkpIHtcblx0ICAgICAgICAgICAgLy9jb25uZWN0IGFsbCB0aGUgcHJveGllc1xuXHQgICAgICAgICAgICB0aGlzLl9jb25uZWN0UHJveGllcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBBcHBseSBhbGwgdGhlIGN1cnJlbnQgYXV0b21hdGlvbnMgdG8gdGhlIGdpdmVuIHBhcmFtZXRlclxuXHRcdCAqIEBwYXJhbSAge0F1ZGlvUGFyYW19IHBhcmFtXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5fYXBwbHlBdXRvbWF0aW9ucyA9IGZ1bmN0aW9uIChwYXJhbSkge1xuXHQgICAgICAgIHZhciBub3cgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWU7XG5cdCAgICAgICAgcGFyYW0uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKG5vdyk7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRWYWwgPSB0aGlzLmdldFZhbHVlQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgcGFyYW0uc2V0VmFsdWVBdFRpbWUoY3VycmVudFZhbCwgbm93KTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuZm9yRWFjaEZyb20obm93LCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgcGFyYW1bZXZlbnQudHlwZV0oZXZlbnQudmFsdWUsIGV2ZW50LnRpbWUsIGV2ZW50LmNvbnN0YW50KTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBEaXNjb25uZWN0IGZyb20gdGhlIGdpdmVuIG5vZGUgb3IgYWxsIG5vZGVzIGlmIG5vIHBhcmFtIGlzIGdpdmVuLlxuXHRcdCAqIEBwYXJhbSAge0F1ZGlvTm9kZXxBdWRpb1BhcmFtfSBub2RlXG5cdFx0ICogQHJldHVybiB7VG9uZS5TaWduYWx9ICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9wcm94aWVzLmluY2x1ZGVzKG5vZGUpKSB7XG5cdCAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3Byb3hpZXMuaW5kZXhPZihub2RlKTtcblx0ICAgICAgICAgICAgdGhpcy5fcHJveGllcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoIW5vZGUpIHtcblx0ICAgICAgICAgICAgLy9ubyBhcmd1bWVudCwgZGlzY29ubmVjdCBldmVyeXRoaW5nXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMgPSBbXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzY29ubmVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgY3VycmVudCBzaWduYWwgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSBXaGVuIHRvIGdldCB0aGUgc2lnbmFsIHZhbHVlXG5cdFx0ICogQHJldHVybiB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fcGFyYW0uZ2V0VmFsdWVBdFRpbWUpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmFtLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlBhcmFtLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZS5jYWxsKHRoaXMsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvL3dyYXAgYWxsIG9mIHRoZSBhdXRvbWF0aW9uIG1ldGhvZHNcblx0ICAgIFtcblx0ICAgICAgICAnc2V0VmFsdWVBdFRpbWUnLFxuXHQgICAgICAgICdsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZScsXG5cdCAgICAgICAgJ2V4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUnLFxuXHQgICAgICAgICdzZXRUYXJnZXRBdFRpbWUnXG5cdCAgICBdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuXHQgICAgICAgIHZhciBwcmV2aW91c01ldGhvZCA9IFRvbmUuU2lnbmFsLnByb3RvdHlwZVttZXRob2RdO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcblx0ICAgICAgICAgICAgcHJldmlvdXNNZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgYXJnc1swXSA9IHRoaXMuX2Zyb21Vbml0cyhhcmdzWzBdKTtcblx0ICAgICAgICAgICAgYXJnc1sxXSA9IHRoaXMudG9TZWNvbmRzKGFyZ3NbMV0pO1xuXHQgICAgICAgICAgICAvL2FwcGx5IGl0IHRvIHRoZSBwcm94aWVzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMuZm9yRWFjaChmdW5jdGlvbiAoc2lnbmFsKSB7XG5cdCAgICAgICAgICAgICAgICBzaWduYWxbbWV0aG9kXS5hcHBseShzaWduYWwsIGFyZ3MpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9O1xuXHQgICAgfSk7XG5cdCAgICBbXG5cdCAgICAgICAgJ2NhbmNlbFNjaGVkdWxlZFZhbHVlcycsXG5cdCAgICAgICAgJ2NhbmNlbEFuZEhvbGRBdFRpbWUnXG5cdCAgICBdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuXHQgICAgICAgIHZhciBwcmV2aW91c01ldGhvZCA9IFRvbmUuU2lnbmFsLnByb3RvdHlwZVttZXRob2RdO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcblx0ICAgICAgICAgICAgcHJldmlvdXNNZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgYXJnc1swXSA9IHRoaXMudG9TZWNvbmRzKGFyZ3NbMF0pO1xuXHQgICAgICAgICAgICAvL2FwcGx5IGl0IHRvIHRoZSBwcm94aWVzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMuZm9yRWFjaChmdW5jdGlvbiAoc2lnbmFsKSB7XG5cdCAgICAgICAgICAgICAgICBzaWduYWxbbWV0aG9kXS5hcHBseShzaWduYWwsIGFyZ3MpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9O1xuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZSBhbmQgZGlzY29ubmVjdFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9jb25zdGFudFNvdXJjZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fY29uc3RhbnRTb3VyY2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3Byb3hpZXMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNpZ25hbDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFBvdyBhcHBsaWVzIGFuIGV4cG9uZW50IHRvIHRoZSBpbmNvbWluZyBzaWduYWwuIFRoZSBpbmNvbWluZyBzaWduYWxcblx0XHQgKiAgICAgICAgIG11c3QgYmUgQXVkaW9SYW5nZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtQb3NpdGl2ZX0gZXhwIFRoZSBleHBvbmVudCB0byBhcHBseSB0byB0aGUgaW5jb21pbmcgc2lnbmFsLCBtdXN0IGJlIGF0IGxlYXN0IDIuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwb3cgPSBuZXcgVG9uZS5Qb3coMik7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCgwLjUpLmNvbm5lY3QocG93KTtcblx0XHQgKiAvL291dHB1dCBvZiBwb3cgaXMgMC4yNS4gXG5cdFx0ICovXG5cdCAgICBUb25lLlBvdyA9IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHRoZSBleHBvbmVudFxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9leHAgPSBUb25lLmRlZmF1bHRBcmcoZXhwLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V4cFNjYWxlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIodGhpcy5fZXhwRnVuYyh0aGlzLl9leHApLCA4MTkyKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBvdywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB2YWx1ZSBvZiB0aGUgZXhwb25lbnQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUG93I1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBvdy5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgICAgICB0aGlzLl9leHAgPSBleHA7XG5cdCAgICAgICAgICAgIHRoaXMuX2V4cFNjYWxlci5zZXRNYXAodGhpcy5fZXhwRnVuYyh0aGlzLl9leHApKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZnVuY3Rpb24gd2hpY2ggbWFwcyB0aGUgd2F2ZXNoYXBlclxuXHRcdCAqICBAcGFyYW0gICB7bnVtYmVyfSBleHBcblx0XHQgKiAgQHJldHVybiB7ZnVuY3Rpb259XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBvdy5wcm90b3R5cGUuX2V4cEZ1bmMgPSBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIE1hdGgucG93KE1hdGguYWJzKHZhbCksIGV4cCk7XG5cdCAgICAgICAgfTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvd30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb3cucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZXhwU2NhbGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9leHBTY2FsZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBvdztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkVudmVsb3BlIGlzIGFuIFtBRFNSXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TeW50aGVzaXplciNBRFNSX2VudmVsb3BlKVxuXHRcdCAqICAgICAgICAgIGVudmVsb3BlIGdlbmVyYXRvci4gVG9uZS5FbnZlbG9wZSBvdXRwdXRzIGEgc2lnbmFsIHdoaWNoXG5cdFx0ICogICAgICAgICAgY2FuIGJlIGNvbm5lY3RlZCB0byBhbiBBdWRpb1BhcmFtIG9yIFRvbmUuU2lnbmFsLlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy9lL2VhL0FEU1JfcGFyYW1ldGVyLnN2Z1wiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW2F0dGFja10gVGhlIGFtb3VudCBvZiB0aW1lIGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGUgdG8gZ28gZnJvbVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIDAgdG8gaXQncyBtYXhpbXVtIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtkZWNheV1cdFRoZSBwZXJpb2Qgb2YgdGltZSBhZnRlciB0aGUgYXR0YWNrIHRoYXQgaXQgdGFrZXMgZm9yIHRoZSBlbnZlbG9wZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICBcdHRvIGZhbGwgdG8gdGhlIHN1c3RhaW4gdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtzdXN0YWluXVx0VGhlIHBlcmNlbnQgb2YgdGhlIG1heGltdW0gdmFsdWUgdGhhdCB0aGUgZW52ZWxvcGUgcmVzdHMgYXQgdW50aWxcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR0aGUgcmVsZWFzZSBpcyB0cmlnZ2VyZWQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3JlbGVhc2VdXHRUaGUgYW1vdW50IG9mIHRpbWUgYWZ0ZXIgdGhlIHJlbGVhc2UgaXMgdHJpZ2dlcmVkIGl0IHRha2VzIHRvIHJlYWNoIDAuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hbiBhbXBsaXR1ZGUgZW52ZWxvcGVcblx0XHQgKiB2YXIgZ2Fpbk5vZGUgPSBUb25lLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHRcdCAqIHZhciBlbnYgPSBuZXcgVG9uZS5FbnZlbG9wZSh7XG5cdFx0ICogXHRcImF0dGFja1wiIDogMC4xLFxuXHRcdCAqIFx0XCJkZWNheVwiIDogMC4yLFxuXHRcdCAqIFx0XCJzdXN0YWluXCIgOiAxLFxuXHRcdCAqIFx0XCJyZWxlYXNlXCIgOiAwLjgsXG5cdFx0ICogfSk7XG5cdFx0ICogZW52LmNvbm5lY3QoZ2Fpbk5vZGUuZ2Fpbik7XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vZ2V0IGFsbCBvZiB0aGUgZGVmYXVsdHNcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAnZGVjYXknLFxuXHQgICAgICAgICAgICAnc3VzdGFpbicsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJ1xuXHQgICAgICAgIF0sIFRvbmUuRW52ZWxvcGUpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgV2hlbiB0cmlnZ2VyQXR0YWNrIGlzIGNhbGxlZCwgdGhlIGF0dGFjayB0aW1lIGlzIHRoZSBhbW91bnQgb2Zcblx0XHRcdCAqICB0aW1lIGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGUgdG8gcmVhY2ggaXQncyBtYXhpbXVtIHZhbHVlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hdHRhY2sgPSBvcHRpb25zLmF0dGFjaztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBZnRlciB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlLCB0aGUgdmFsdWUgd2lsbCBmYWxsXG5cdFx0XHQgKiAgb3ZlciB0aGUgZHVyYXRpb24gb2YgdGhlIGRlY2F5IHRpbWUgdG8gaXQncyBzdXN0YWluIHZhbHVlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWNheSA9IG9wdGlvbnMuZGVjYXk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBcdFRoZSBzdXN0YWluIHZhbHVlIGlzIHRoZSB2YWx1ZVxuXHRcdFx0ICogXHR3aGljaCB0aGUgZW52ZWxvcGUgcmVzdHMgYXQgYWZ0ZXIgdHJpZ2dlckF0dGFjayBpc1xuXHRcdFx0ICogXHRjYWxsZWQsIGJ1dCBiZWZvcmUgdHJpZ2dlclJlbGVhc2UgaXMgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnN1c3RhaW4gPSBvcHRpb25zLnN1c3RhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWZ0ZXIgdHJpZ2dlclJlbGVhc2UgaXMgY2FsbGVkLCB0aGUgZW52ZWxvcGUnc1xuXHRcdFx0ICogIHZhbHVlIHdpbGwgZmFsbCB0byBpdCdzIG1pbWludW0gdmFsdWUgb3ZlciB0aGVcblx0XHRcdCAqICBkdXJhdGlvbiBvZiB0aGUgcmVsZWFzZSB0aW1lLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZWxlYXNlID0gb3B0aW9ucy5yZWxlYXNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBuZXh0IHRpbWUgdGhlIGVudmVsb3BlIGlzIGF0IHN0YW5kYnlcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hdHRhY2tDdXJ2ZSA9ICdsaW5lYXInO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBuZXh0IHRpbWUgdGhlIGVudmVsb3BlIGlzIGF0IHN0YW5kYnlcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSAnZXhwb25lbnRpYWwnO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NpZyA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuU2lnbmFsKDApO1xuXHQgICAgICAgIC8vc2V0IHRoZSBhdHRhY2tDdXJ2ZSBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLmF0dGFja0N1cnZlID0gb3B0aW9ucy5hdHRhY2tDdXJ2ZTtcblx0ICAgICAgICB0aGlzLnJlbGVhc2VDdXJ2ZSA9IG9wdGlvbnMucmVsZWFzZUN1cnZlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRW52ZWxvcGUsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICdkZWNheSc6IDAuMSxcblx0ICAgICAgICAnc3VzdGFpbic6IDAuNSxcblx0ICAgICAgICAncmVsZWFzZSc6IDEsXG5cdCAgICAgICAgJ2F0dGFja0N1cnZlJzogJ2xpbmVhcicsXG5cdCAgICAgICAgJ3JlbGVhc2VDdXJ2ZSc6ICdleHBvbmVudGlhbCdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZWFkIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBlbnZlbG9wZS4gVXNlZnVsIGZvclxuXHRcdCAqIHN5bmNyb25pemluZyB2aXN1YWwgb3V0cHV0IHRvIHRoZSBlbnZlbG9wZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5FbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc2hhcGUgb2YgdGhlIGF0dGFjay5cblx0XHQgKiBDYW4gYmUgYW55IG9mIHRoZXNlIHN0cmluZ3M6XG5cdFx0ICogPHVsPlxuXHRcdCAqICAgPGxpPmxpbmVhcjwvbGk+XG5cdFx0ICogICA8bGk+ZXhwb25lbnRpYWw8L2xpPlxuXHRcdCAqICAgPGxpPnNpbmU8L2xpPlxuXHRcdCAqICAgPGxpPmNvc2luZTwvbGk+XG5cdFx0ICogICA8bGk+Ym91bmNlPC9saT5cblx0XHQgKiAgIDxsaT5yaXBwbGU8L2xpPlxuXHRcdCAqICAgPGxpPnN0ZXA8L2xpPlxuXHRcdCAqIDwvdWw+XG5cdFx0ICogQ2FuIGFsc28gYmUgYW4gYXJyYXkgd2hpY2ggZGVzY3JpYmVzIHRoZSBjdXJ2ZS4gVmFsdWVzXG5cdFx0ICogaW4gdGhlIGFycmF5IGFyZSBldmVubHkgc3ViZGl2aWRlZCBhbmQgbGluZWFybHlcblx0XHQgKiBpbnRlcnBvbGF0ZWQgb3ZlciB0aGUgZHVyYXRpb24gb2YgdGhlIGF0dGFjay5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5FbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfEFycmF5fVxuXHRcdCAqIEBuYW1lIGF0dGFja0N1cnZlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBlbnYuYXR0YWNrQ3VydmUgPSBcImxpbmVhclwiO1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9jYW4gYWxzbyBiZSBhbiBhcnJheVxuXHRcdCAqIGVudi5hdHRhY2tDdXJ2ZSA9IFswLCAwLjIsIDAuMywgMC40LCAxXVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLCAnYXR0YWNrQ3VydmUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzU3RyaW5nKHRoaXMuX2F0dGFja0N1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFja0N1cnZlO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNBcnJheSh0aGlzLl9hdHRhY2tDdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIC8vbG9vayB1cCB0aGUgbmFtZSBpbiB0aGUgY3VydmVzIGFycmF5XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciB0eXBlIGluIFRvbmUuRW52ZWxvcGUuVHlwZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLkVudmVsb3BlLlR5cGVbdHlwZV0uSW4gPT09IHRoaXMuX2F0dGFja0N1cnZlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGp1c3QgcmV0dXJuIHRoZSBhcnJheVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFja0N1cnZlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjdXJ2ZSkge1xuXHQgICAgICAgICAgICAvL2NoZWNrIGlmIGl0J3MgYSB2YWxpZCB0eXBlXG5cdCAgICAgICAgICAgIGlmIChUb25lLkVudmVsb3BlLlR5cGUuaGFzT3duUHJvcGVydHkoY3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY3VydmVEZWYgPSBUb25lLkVudmVsb3BlLlR5cGVbY3VydmVdO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QoY3VydmVEZWYpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSBjdXJ2ZURlZi5Jbjtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSBjdXJ2ZURlZjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzQXJyYXkoY3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hdHRhY2tDdXJ2ZSA9IGN1cnZlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkVudmVsb3BlOiBpbnZhbGlkIGN1cnZlOiAnICsgY3VydmUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc2hhcGUgb2YgdGhlIHJlbGVhc2UuIFNlZSB0aGUgYXR0YWNrIGN1cnZlIHR5cGVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtTdHJpbmd8QXJyYXl9XG5cdFx0ICogQG5hbWUgcmVsZWFzZUN1cnZlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBlbnYucmVsZWFzZUN1cnZlID0gXCJsaW5lYXJcIjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkVudmVsb3BlLnByb3RvdHlwZSwgJ3JlbGVhc2VDdXJ2ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNTdHJpbmcodGhpcy5fcmVsZWFzZUN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlbGVhc2VDdXJ2ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzQXJyYXkodGhpcy5fcmVsZWFzZUN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgLy9sb29rIHVwIHRoZSBuYW1lIGluIHRoZSBjdXJ2ZXMgYXJyYXlcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHR5cGUgaW4gVG9uZS5FbnZlbG9wZS5UeXBlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKFRvbmUuRW52ZWxvcGUuVHlwZVt0eXBlXS5PdXQgPT09IHRoaXMuX3JlbGVhc2VDdXJ2ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAvL290aGVyd2lzZSBqdXN0IHJldHVybiB0aGUgYXJyYXlcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWxlYXNlQ3VydmU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGN1cnZlKSB7XG5cdCAgICAgICAgICAgIC8vY2hlY2sgaWYgaXQncyBhIHZhbGlkIHR5cGVcblx0ICAgICAgICAgICAgaWYgKFRvbmUuRW52ZWxvcGUuVHlwZS5oYXNPd25Qcm9wZXJ0eShjdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjdXJ2ZURlZiA9IFRvbmUuRW52ZWxvcGUuVHlwZVtjdXJ2ZV07XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc09iamVjdChjdXJ2ZURlZikpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSBjdXJ2ZURlZi5PdXQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbGVhc2VDdXJ2ZSA9IGN1cnZlRGVmO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNBcnJheShjdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JlbGVhc2VDdXJ2ZSA9IGN1cnZlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkVudmVsb3BlOiBpbnZhbGlkIGN1cnZlOiAnICsgY3VydmUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrL2RlY2F5IHBvcnRpb24gb2YgdGhlIEFEU1IgZW52ZWxvcGUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgYXR0YWNrIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIFRoZSB2ZWxvY2l0eSBvZiB0aGUgZW52ZWxvcGUgc2NhbGVzIHRoZSB2YWxlcy5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgYmV0d2VlbiAwLTFcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgLy90cmlnZ2VyIHRoZSBhdHRhY2sgMC41IHNlY29uZHMgZnJvbSBub3cgd2l0aCBhIHZlbG9jaXR5IG9mIDAuMlxuXHRcdCAqICBlbnYudHJpZ2dlckF0dGFjayhcIiswLjVcIiwgMC4yKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIG9yaWdpbmFsQXR0YWNrID0gdGhpcy50b1NlY29uZHModGhpcy5hdHRhY2spO1xuXHQgICAgICAgIHZhciBhdHRhY2sgPSBvcmlnaW5hbEF0dGFjaztcblx0ICAgICAgICB2YXIgZGVjYXkgPSB0aGlzLnRvU2Vjb25kcyh0aGlzLmRlY2F5KTtcblx0ICAgICAgICB2ZWxvY2l0eSA9IFRvbmUuZGVmYXVsdEFyZyh2ZWxvY2l0eSwgMSk7XG5cdCAgICAgICAgLy9jaGVjayBpZiBpdCdzIG5vdCBhIGNvbXBsZXRlIGF0dGFja1xuXHQgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmIChjdXJyZW50VmFsdWUgPiAwKSB7XG5cdCAgICAgICAgICAgIC8vc3VidHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgZnJvbSB0aGUgYXR0YWNrIHRpbWVcblx0ICAgICAgICAgICAgdmFyIGF0dGFja1JhdGUgPSAxIC8gYXR0YWNrO1xuXHQgICAgICAgICAgICB2YXIgcmVtYWluaW5nRGlzdGFuY2UgPSAxIC0gY3VycmVudFZhbHVlO1xuXHQgICAgICAgICAgICAvL3RoZSBhdHRhY2sgaXMgbm93IHRoZSByZW1haW5pbmcgdGltZVxuXHQgICAgICAgICAgICBhdHRhY2sgPSByZW1haW5pbmdEaXN0YW5jZSAvIGF0dGFja1JhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vYXR0YWNrXG5cdCAgICAgICAgaWYgKHRoaXMuX2F0dGFja0N1cnZlID09PSAnbGluZWFyJykge1xuXHQgICAgICAgICAgICB0aGlzLl9zaWcubGluZWFyUmFtcFRvKHZlbG9jaXR5LCBhdHRhY2ssIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYXR0YWNrQ3VydmUgPT09ICdleHBvbmVudGlhbCcpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2lnLnRhcmdldFJhbXBUbyh2ZWxvY2l0eSwgYXR0YWNrLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGF0dGFjayA+IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2lnLmNhbmNlbEFuZEhvbGRBdFRpbWUodGltZSk7XG5cdCAgICAgICAgICAgIHZhciBjdXJ2ZSA9IHRoaXMuX2F0dGFja0N1cnZlO1xuXHQgICAgICAgICAgICAvL3Rha2Ugb25seSBhIHBvcnRpb24gb2YgdGhlIGN1cnZlXG5cdCAgICAgICAgICAgIGlmIChhdHRhY2sgPCBvcmlnaW5hbEF0dGFjaykge1xuXHQgICAgICAgICAgICAgICAgdmFyIHBlcmNlbnRDb21wbGV0ZSA9IDEgLSBhdHRhY2sgLyBvcmlnaW5hbEF0dGFjaztcblx0ICAgICAgICAgICAgICAgIHZhciBzbGljZUluZGV4ID0gTWF0aC5mbG9vcihwZXJjZW50Q29tcGxldGUgKiB0aGlzLl9hdHRhY2tDdXJ2ZS5sZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgY3VydmUgPSB0aGlzLl9hdHRhY2tDdXJ2ZS5zbGljZShzbGljZUluZGV4KTtcblx0ICAgICAgICAgICAgICAgIC8vdGhlIGZpcnN0IGluZGV4IGlzIHRoZSBjdXJyZW50IHZhbHVlXG5cdCAgICAgICAgICAgICAgICBjdXJ2ZVswXSA9IGN1cnJlbnRWYWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9zaWcuc2V0VmFsdWVDdXJ2ZUF0VGltZShjdXJ2ZSwgdGltZSwgYXR0YWNrLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vZGVjYXlcblx0ICAgICAgICBpZiAoZGVjYXkpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2lnLnRhcmdldFJhbXBUbyh2ZWxvY2l0eSAqIHRoaXMuc3VzdGFpbiwgZGVjYXksIGF0dGFjayArIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlcnMgdGhlIHJlbGVhc2Ugb2YgdGhlIGVudmVsb3BlLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGUgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FbnZlbG9wZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICAvL3RyaWdnZXIgcmVsZWFzZSBpbW1lZGlhdGVseVxuXHRcdCAqICBlbnYudHJpZ2dlclJlbGVhc2UoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA+IDApIHtcblx0ICAgICAgICAgICAgdmFyIHJlbGVhc2UgPSB0aGlzLnRvU2Vjb25kcyh0aGlzLnJlbGVhc2UpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fcmVsZWFzZUN1cnZlID09PSAnbGluZWFyJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2lnLmxpbmVhclJhbXBUbygwLCByZWxlYXNlLCB0aW1lKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9yZWxlYXNlQ3VydmUgPT09ICdleHBvbmVudGlhbCcpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NpZy50YXJnZXRSYW1wVG8oMCwgcmVsZWFzZSwgdGltZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY3VydmUgPSB0aGlzLl9yZWxlYXNlQ3VydmU7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0FycmF5KGN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZy5jYW5jZWxBbmRIb2xkQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZy5zZXRWYWx1ZUN1cnZlQXRUaW1lKGN1cnZlLCB0aW1lLCByZWxlYXNlLCBjdXJyZW50VmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHNjaGVkdWxlZCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS4gVGhpcyB3aWxsXG5cdFx0ICogIHJldHVybiB0aGUgdW5jb252ZXJ0ZWQgKHJhdykgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIGluIHNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICBUaGUgc2NoZWR1bGVkIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zaWcuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHRyaWdnZXJBdHRhY2tSZWxlYXNlIGlzIHNob3J0aGFuZCBmb3IgdHJpZ2dlckF0dGFjaywgdGhlbiB3YWl0aW5nXG5cdFx0ICogIHNvbWUgZHVyYXRpb24sIHRoZW4gdHJpZ2dlclJlbGVhc2UuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gZHVyYXRpb24gVGhlIGR1cmF0aW9uIG9mIHRoZSBzdXN0YWluLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgYXR0YWNrIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gVGhlIHZlbG9jaXR5IG9mIHRoZSBlbnZlbG9wZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgdGhlIGF0dGFjayBhbmQgdGhlbiB0aGUgcmVsZWFzZSBhZnRlciAwLjYgc2Vjb25kcy5cblx0XHQgKiBlbnYudHJpZ2dlckF0dGFja1JlbGVhc2UoMC42KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2UodGltZSArIHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbHMgYWxsIHNjaGVkdWxlZCBlbnZlbG9wZSBjaGFuZ2VzIGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBhZnRlclxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FbnZlbG9wZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgdGhpcy5fc2lnLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhhZnRlcik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEJvcnJvd3MgdGhlIGNvbm5lY3QgbWV0aG9kIGZyb20gVG9uZS5TaWduYWwuXG5cdFx0ICogIEBmdW5jdGlvblxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuY29ubmVjdCA9IFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuY29ubmVjdDtcblx0ICAgIC8qKlxuXHQgXHQgKiAgR2VuZXJhdGUgc29tZSBjb21wbGV4IGVudmVsb3BlIGN1cnZlcy5cblx0IFx0ICovXG5cdCAgICAoZnVuY3Rpb24gX2NyZWF0ZUN1cnZlcygpIHtcblx0ICAgICAgICB2YXIgY3VydmVMZW4gPSAxMjg7XG5cdCAgICAgICAgdmFyIGksIGs7XG5cdCAgICAgICAgLy9jb3NpbmUgY3VydmVcblx0ICAgICAgICB2YXIgY29zaW5lQ3VydmUgPSBbXTtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VydmVMZW47IGkrKykge1xuXHQgICAgICAgICAgICBjb3NpbmVDdXJ2ZVtpXSA9IE1hdGguc2luKGkgLyAoY3VydmVMZW4gLSAxKSAqIChNYXRoLlBJIC8gMikpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3JpcHBsZSBjdXJ2ZVxuXHQgICAgICAgIHZhciByaXBwbGVDdXJ2ZSA9IFtdO1xuXHQgICAgICAgIHZhciByaXBwbGVDdXJ2ZUZyZXEgPSA2LjQ7XG5cdCAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1cnZlTGVuIC0gMTsgaSsrKSB7XG5cdCAgICAgICAgICAgIGsgPSBpIC8gKGN1cnZlTGVuIC0gMSk7XG5cdCAgICAgICAgICAgIHZhciBzaW5lV2F2ZSA9IE1hdGguc2luKGsgKiAoTWF0aC5QSSAqIDIpICogcmlwcGxlQ3VydmVGcmVxIC0gTWF0aC5QSSAvIDIpICsgMTtcblx0ICAgICAgICAgICAgcmlwcGxlQ3VydmVbaV0gPSBzaW5lV2F2ZSAvIDEwICsgayAqIDAuODM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJpcHBsZUN1cnZlW2N1cnZlTGVuIC0gMV0gPSAxO1xuXHQgICAgICAgIC8vc3RhaXJzIGN1cnZlXG5cdCAgICAgICAgdmFyIHN0YWlyc0N1cnZlID0gW107XG5cdCAgICAgICAgdmFyIHN0ZXBzID0gNTtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VydmVMZW47IGkrKykge1xuXHQgICAgICAgICAgICBzdGFpcnNDdXJ2ZVtpXSA9IE1hdGguY2VpbChpIC8gKGN1cnZlTGVuIC0gMSkgKiBzdGVwcykgLyBzdGVwcztcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9pbi1vdXQgZWFzaW5nIGN1cnZlXG5cdCAgICAgICAgdmFyIHNpbmVDdXJ2ZSA9IFtdO1xuXHQgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdXJ2ZUxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIGsgPSBpIC8gKGN1cnZlTGVuIC0gMSk7XG5cdCAgICAgICAgICAgIHNpbmVDdXJ2ZVtpXSA9IDAuNSAqICgxIC0gTWF0aC5jb3MoTWF0aC5QSSAqIGspKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9hIGJvdW5jZSBjdXJ2ZVxuXHQgICAgICAgIHZhciBib3VuY2VDdXJ2ZSA9IFtdO1xuXHQgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdXJ2ZUxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIGsgPSBpIC8gKGN1cnZlTGVuIC0gMSk7XG5cdCAgICAgICAgICAgIHZhciBmcmVxID0gTWF0aC5wb3coaywgMykgKiA0ICsgMC4yO1xuXHQgICAgICAgICAgICB2YXIgdmFsID0gTWF0aC5jb3MoZnJlcSAqIE1hdGguUEkgKiAyICogayk7XG5cdCAgICAgICAgICAgIGJvdW5jZUN1cnZlW2ldID0gTWF0aC5hYnModmFsICogKDEgLSBrKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEludmVydCBhIHZhbHVlIGN1cnZlIHRvIG1ha2UgaXQgd29yayBmb3IgdGhlIHJlbGVhc2Vcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgZnVuY3Rpb24gaW52ZXJ0Q3VydmUoY3VydmUpIHtcblx0ICAgICAgICAgICAgdmFyIG91dCA9IG5ldyBBcnJheShjdXJ2ZS5sZW5ndGgpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGN1cnZlLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICBvdXRbal0gPSAxIC0gY3VydmVbal07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIG91dDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcmV2ZXJzZSB0aGUgY3VydmVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgZnVuY3Rpb24gcmV2ZXJzZUN1cnZlKGN1cnZlKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBjdXJ2ZS5zbGljZSgwKS5yZXZlcnNlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGF0dGFjayBhbmQgcmVsZWFzZSBjdXJ2ZSBhcnJheXNcblx0XHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgVG9uZS5FbnZlbG9wZS5UeXBlID0ge1xuXHQgICAgICAgICAgICAnbGluZWFyJzogJ2xpbmVhcicsXG5cdCAgICAgICAgICAgICdleHBvbmVudGlhbCc6ICdleHBvbmVudGlhbCcsXG5cdCAgICAgICAgICAgICdib3VuY2UnOiB7XG5cdCAgICAgICAgICAgICAgICBJbjogaW52ZXJ0Q3VydmUoYm91bmNlQ3VydmUpLFxuXHQgICAgICAgICAgICAgICAgT3V0OiBib3VuY2VDdXJ2ZVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnY29zaW5lJzoge1xuXHQgICAgICAgICAgICAgICAgSW46IGNvc2luZUN1cnZlLFxuXHQgICAgICAgICAgICAgICAgT3V0OiByZXZlcnNlQ3VydmUoY29zaW5lQ3VydmUpXG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdzdGVwJzoge1xuXHQgICAgICAgICAgICAgICAgSW46IHN0YWlyc0N1cnZlLFxuXHQgICAgICAgICAgICAgICAgT3V0OiBpbnZlcnRDdXJ2ZShzdGFpcnNDdXJ2ZSlcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ3JpcHBsZSc6IHtcblx0ICAgICAgICAgICAgICAgIEluOiByaXBwbGVDdXJ2ZSxcblx0ICAgICAgICAgICAgICAgIE91dDogaW52ZXJ0Q3VydmUocmlwcGxlQ3VydmUpXG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdzaW5lJzoge1xuXHQgICAgICAgICAgICAgICAgSW46IHNpbmVDdXJ2ZSxcblx0ICAgICAgICAgICAgICAgIE91dDogaW52ZXJ0Q3VydmUoc2luZUN1cnZlKVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfTtcblx0ICAgIH0oKSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGlzY29ubmVjdCBhbmQgZGlzcG9zZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zaWcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NpZyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JlbGVhc2VDdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRW52ZWxvcGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSBpcyBhIFRvbmUuRW52ZWxvcGUgY29ubmVjdGVkIHRvIGEgZ2FpbiBub2RlLlxuXHRcdCAqICAgICAgICAgIFVubGlrZSBUb25lLkVudmVsb3BlLCB3aGljaCBvdXRwdXRzIHRoZSBlbnZlbG9wZSdzIHZhbHVlLCBUb25lLkFtcGxpdHVkZUVudmVsb3BlIGFjY2VwdHNcblx0XHQgKiAgICAgICAgICBhbiBhdWRpbyBzaWduYWwgYXMgdGhlIGlucHV0IGFuZCB3aWxsIGFwcGx5IHRoZSBlbnZlbG9wZSB0byB0aGUgYW1wbGl0dWRlXG5cdFx0ICogICAgICAgICAgb2YgdGhlIHNpZ25hbC4gUmVhZCBtb3JlIGFib3V0IEFEU1IgRW52ZWxvcGVzIG9uIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N5bnRoZXNpemVyI0FEU1JfZW52ZWxvcGUpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbnZlbG9wZX1cblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2F0dGFja10gVGhlIGFtb3VudCBvZiB0aW1lIGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGUgdG8gZ28gZnJvbVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgdG8gaXQncyBtYXhpbXVtIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtkZWNheV1cdFRoZSBwZXJpb2Qgb2YgdGltZSBhZnRlciB0aGUgYXR0YWNrIHRoYXQgaXQgdGFrZXMgZm9yIHRoZSBlbnZlbG9wZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICBcdHRvIGZhbGwgdG8gdGhlIHN1c3RhaW4gdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtzdXN0YWluXVx0VGhlIHBlcmNlbnQgb2YgdGhlIG1heGltdW0gdmFsdWUgdGhhdCB0aGUgZW52ZWxvcGUgcmVzdHMgYXQgdW50aWxcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR0aGUgcmVsZWFzZSBpcyB0cmlnZ2VyZWQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3JlbGVhc2VdXHRUaGUgYW1vdW50IG9mIHRpbWUgYWZ0ZXIgdGhlIHJlbGVhc2UgaXMgdHJpZ2dlcmVkIGl0IHRha2VzIHRvIHJlYWNoIDAuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGFtcEVudiA9IG5ldyBUb25lLkFtcGxpdHVkZUVudmVsb3BlKHtcblx0XHQgKiBcdFwiYXR0YWNrXCI6IDAuMSxcblx0XHQgKiBcdFwiZGVjYXlcIjogMC4yLFxuXHRcdCAqIFx0XCJzdXN0YWluXCI6IDEuMCxcblx0XHQgKiBcdFwicmVsZWFzZVwiOiAwLjhcblx0XHQgKiB9KS50b01hc3RlcigpO1xuXHRcdCAqIC8vY3JlYXRlIGFuIG9zY2lsbGF0b3IgYW5kIGNvbm5lY3QgaXRcblx0XHQgKiB2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QoYW1wRW52KS5zdGFydCgpO1xuXHRcdCAqIC8vdHJpZ2dlciB0aGUgZW52ZWxvcGVzIGF0dGFjayBhbmQgcmVsZWFzZSBcIjh0XCIgYXBhcnRcblx0XHQgKiBhbXBFbnYudHJpZ2dlckF0dGFja1JlbGVhc2UoXCI4dFwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbnZlbG9wZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBpbnB1dCBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgdGhpcy5fc2lnLmNvbm5lY3QodGhpcy5vdXRwdXQuZ2Fpbik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFtcGxpdHVkZUVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEFuYWx5c2VyTm9kZS5nZXRGbG9hdFRpbWVEb21haW5EYXRhIHBvbHlmaWxsXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICBpZiAoIUFuYWx5c2VyTm9kZS5wcm90b3R5cGUuZ2V0RmxvYXRUaW1lRG9tYWluRGF0YSkge1xuXHQgICAgICAgICAgICAvL3JlZmVyZW5jZWQgaHR0cHM6Ly9naXRodWIuY29tL21vaGF5b25hby9nZXQtZmxvYXQtdGltZS1kb21haW4tZGF0YVxuXHQgICAgICAgICAgICBBbmFseXNlck5vZGUucHJvdG90eXBlLmdldEZsb2F0VGltZURvbWFpbkRhdGEgPSBmdW5jdGlvbiAoYXJyYXkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB1aW50OCA9IG5ldyBVaW50OEFycmF5KGFycmF5Lmxlbmd0aCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmdldEJ5dGVUaW1lRG9tYWluRGF0YSh1aW50OCk7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVpbnQ4Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSAodWludDhbaV0gLSAxMjgpIC8gMTI4O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBXcmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIFdlYiBBdWRpbydzXG5cdFx0ICogICAgICAgICAgW0FuYWx5c2VyTm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyNpZGwtZGVmLUFuYWx5c2VyTm9kZSkuXG5cdFx0ICogICAgICAgICAgRXh0cmFjdHMgRkZUIG9yIFdhdmVmb3JtIGRhdGEgZnJvbSB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nPX0gdHlwZSBUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIGFuYWx5c2lzLCBlaXRoZXIgXCJmZnRcIiwgb3IgXCJ3YXZlZm9ybVwiLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IHNpemUgVGhlIHNpemUgb2YgdGhlIEZGVC4gVmFsdWUgbXVzdCBiZSBhIHBvd2VyIG9mXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICovXG5cdCAgICBUb25lLkFuYWx5c2VyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3R5cGUnLFxuXHQgICAgICAgICAgICAnc2l6ZSdcblx0ICAgICAgICBdLCBUb25lLkFuYWx5c2VyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNlciBub2RlLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge0FuYWx5c2VyTm9kZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUFuYWx5c2VyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFuYWx5c2lzIHR5cGVcblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBidWZmZXIgdGhhdCB0aGUgRkZUIGRhdGEgaXMgd3JpdHRlbiB0b1xuXHRcdFx0ICogIEB0eXBlIHtUeXBlZEFycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIC8vc2V0IHRoZSB2YWx1ZXMgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5zaXplID0gb3B0aW9ucy5zaXplO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFuYWx5c2VyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuQW5hbHlzZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3NpemUnOiAxMDI0LFxuXHQgICAgICAgICd0eXBlJzogJ2ZmdCcsXG5cdCAgICAgICAgJ3Ntb290aGluZyc6IDAuOFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQb3NzaWJsZSByZXR1cm4gdHlwZXMgb2YgYW5hbHlzZXIuZ2V0VmFsdWUoKVxuXHRcdCAqICBAZW51bSB7U3RyaW5nfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BbmFseXNlci5UeXBlID0ge1xuXHQgICAgICAgIFdhdmVmb3JtOiAnd2F2ZWZvcm0nLFxuXHQgICAgICAgIEZGVDogJ2ZmdCdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUnVuIHRoZSBhbmFseXNpcyBnaXZlbiB0aGUgY3VycmVudCBzZXR0aW5ncyBhbmQgcmV0dXJuIHRoZVxuXHRcdCAqICByZXN1bHQgYXMgYSBUeXBlZEFycmF5LlxuXHRcdCAqICBAcmV0dXJucyB7VHlwZWRBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQW5hbHlzZXIucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBUb25lLkFuYWx5c2VyLlR5cGUuRkZUKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLmdldEZsb2F0RnJlcXVlbmN5RGF0YSh0aGlzLl9idWZmZXIpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5BbmFseXNlci5UeXBlLldhdmVmb3JtKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLmdldEZsb2F0VGltZURvbWFpbkRhdGEodGhpcy5fYnVmZmVyKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHNpemUgb2YgYW5hbHlzaXMuIFRoaXMgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkFuYWx5c2VyI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBzaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BbmFseXNlci5wcm90b3R5cGUsICdzaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuZnJlcXVlbmN5QmluQ291bnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLmZmdFNpemUgPSBzaXplICogMjtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShzaXplKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgYW5hbHlzaXMgZnVuY3Rpb24gcmV0dXJuZWQgYnkgYW5hbHlzZXIuZ2V0VmFsdWUoKSwgZWl0aGVyIFwiZmZ0XCIgb3IgXCJ3YXZlZm9ybVwiLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5BbmFseXNlciNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQW5hbHlzZXIucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIGlmICh0eXBlICE9PSBUb25lLkFuYWx5c2VyLlR5cGUuV2F2ZWZvcm0gJiYgdHlwZSAhPT0gVG9uZS5BbmFseXNlci5UeXBlLkZGVCkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVG9uZS5BbmFseXNlcjogaW52YWxpZCB0eXBlOiAnICsgdHlwZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgMCByZXByZXNlbnRzIG5vIHRpbWUgYXZlcmFnaW5nIHdpdGggdGhlIGxhc3QgYW5hbHlzaXMgZnJhbWUuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkFuYWx5c2VyI1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHNtb290aGluZ1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQW5hbHlzZXIucHJvdG90eXBlLCAnc21vb3RoaW5nJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuc21vb3RoaW5nVGltZUNvbnN0YW50O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLnNtb290aGluZ1RpbWVDb25zdGFudCA9IHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQW5hbHlzZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFuYWx5c2VyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFuYWx5c2VyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Db21wcmVzc29yIGlzIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCB0aGUgV2ViIEF1ZGlvXG5cdFx0ICogICAgICAgICBbRHluYW1pY3NDb21wcmVzc29yTm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtZHluYW1pY3Njb21wcmVzc29ybm9kZS1pbnRlcmZhY2UpLlxuXHRcdCAqICAgICAgICAgQ29tcHJlc3Npb24gcmVkdWNlcyB0aGUgdm9sdW1lIG9mIGxvdWQgc291bmRzIG9yIGFtcGxpZmllcyBxdWlldCBzb3VuZHNcblx0XHQgKiAgICAgICAgIGJ5IG5hcnJvd2luZyBvciBcImNvbXByZXNzaW5nXCIgYW4gYXVkaW8gc2lnbmFsJ3MgZHluYW1pYyByYW5nZS5cblx0XHQgKiAgICAgICAgIFJlYWQgbW9yZSBvbiBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EeW5hbWljX3JhbmdlX2NvbXByZXNzaW9uKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfE9iamVjdH0gW3RocmVzaG9sZF0gVGhlIHZhbHVlIGFib3ZlIHdoaWNoIHRoZSBjb21wcmVzc2lvbiBzdGFydHMgdG8gYmUgYXBwbGllZC5cblx0XHQgKiAgQHBhcmFtIHtQb3NpdGl2ZX0gW3JhdGlvXSBUaGUgZ2FpbiByZWR1Y3Rpb24gcmF0aW8uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGNvbXAgPSBuZXcgVG9uZS5Db21wcmVzc29yKC0zMCwgMyk7XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbXByZXNzb3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndGhyZXNob2xkJyxcblx0ICAgICAgICAgICAgJ3JhdGlvJ1xuXHQgICAgICAgIF0sIFRvbmUuQ29tcHJlc3Nvcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgY29tcHJlc3NvciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0R5bmFtaWNzQ29tcHJlc3Nvck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlRHluYW1pY3NDb21wcmVzc29yKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHRocmVzaG9sZCB2YXVlXG5cdFx0XHQgKiAgQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudGhyZXNob2xkID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9jb21wcmVzc29yLnRocmVzaG9sZCxcblx0ICAgICAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkRlY2liZWxzLFxuXHQgICAgICAgICAgICAnY29udmVydCc6IGZhbHNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGF0dGFjayBwYXJhbWV0ZXJcblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmF0dGFjayA9IG5ldyBUb25lLlBhcmFtKHRoaXMuX2NvbXByZXNzb3IuYXR0YWNrLCBUb25lLlR5cGUuVGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJlbGVhc2UgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZWxlYXNlID0gbmV3IFRvbmUuUGFyYW0odGhpcy5fY29tcHJlc3Nvci5yZWxlYXNlLCBUb25lLlR5cGUuVGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGtuZWUgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMua25lZSA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fY29tcHJlc3Nvci5rbmVlLFxuXHQgICAgICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuRGVjaWJlbHMsXG5cdCAgICAgICAgICAgICdjb252ZXJ0JzogZmFsc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcmF0aW8gdmFsdWVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmF0aW8gPSBuZXcgVG9uZS5QYXJhbSh7XG5cdCAgICAgICAgICAgICdwYXJhbSc6IHRoaXMuX2NvbXByZXNzb3IucmF0aW8sXG5cdCAgICAgICAgICAgICdjb252ZXJ0JzogZmFsc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL3NldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdrbmVlJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnLFxuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ3JhdGlvJyxcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLnNldChvcHRpb25zKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNvbXByZXNzb3IsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db21wcmVzc29yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdyYXRpbyc6IDEyLFxuXHQgICAgICAgICd0aHJlc2hvbGQnOiAtMjQsXG5cdCAgICAgICAgJ3JlbGVhc2UnOiAwLjI1LFxuXHQgICAgICAgICdhdHRhY2snOiAwLjAwMyxcblx0ICAgICAgICAna25lZSc6IDMwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNvbXByZXNzb3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29tcHJlc3Nvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2tuZWUnLFxuXHQgICAgICAgICAgICAncmVsZWFzZScsXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAncmF0aW8nLFxuXHQgICAgICAgICAgICAndGhyZXNob2xkJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuYXR0YWNrLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmF0dGFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yZWxlYXNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJlbGVhc2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudGhyZXNob2xkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnRocmVzaG9sZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yYXRpby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yYXRpbyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5rbmVlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmtuZWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNvbXByZXNzb3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBZGQgYSBzaWduYWwgYW5kIGEgbnVtYmVyIG9yIHR3byBzaWduYWxzLiBXaGVuIG5vIHZhbHVlIGlzXG5cdFx0ICogICAgICAgICBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3IsIFRvbmUuQWRkIHdpbGwgc3VtIDxjb2RlPmlucHV0WzBdPC9jb2RlPlxuXHRcdCAqICAgICAgICAgYW5kIDxjb2RlPmlucHV0WzFdPC9jb2RlPi4gSWYgYSB2YWx1ZSBpcyBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3IsIFxuXHRcdCAqICAgICAgICAgdGhlIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGlucHV0LlxuXHRcdCAqICBcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbH1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSB2YWx1ZSBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgVG9uZS5BZGQgd2lsbCBzdW0gdGhlIGZpcnN0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNlY29uZCBpbnB1dHMuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoMik7XG5cdFx0ICogdmFyIGFkZCA9IG5ldyBUb25lLkFkZCgyKTtcblx0XHQgKiBzaWduYWwuY29ubmVjdChhZGQpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBhZGQgZXF1YWxzIDRcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2lmIGNvbnN0cnVjdGVkIHdpdGggbm8gYXJndW1lbnRzXG5cdFx0ICogLy9pdCB3aWxsIGFkZCB0aGUgZmlyc3QgYW5kIHNlY29uZCBpbnB1dHNcblx0XHQgKiB2YXIgYWRkID0gbmV3IFRvbmUuQWRkKCk7XG5cdFx0ICogdmFyIHNpZzAgPSBuZXcgVG9uZS5TaWduYWwoMykuY29ubmVjdChhZGQsIDAsIDApO1xuXHRcdCAqIHZhciBzaWcxID0gbmV3IFRvbmUuU2lnbmFsKDQpLmNvbm5lY3QoYWRkLCAwLCAxKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgYWRkIGVxdWFscyA3LiBcblx0XHQgKi9cblx0ICAgIFRvbmUuQWRkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHN1bW1pbmcgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3VtID0gdGhpcy5pbnB1dFswXSA9IHRoaXMuaW5wdXRbMV0gPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5pbnB1dFsxXSA9IG5ldyBUb25lLlNpZ25hbCh2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uY29ubmVjdCh0aGlzLl9zdW0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQWRkLCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkFkZH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BZGQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zdW0uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N1bSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQWRkO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIE11bHRpcGx5IHR3byBpbmNvbWluZyBzaWduYWxzLiBPciwgaWYgYSBudW1iZXIgaXMgZ2l2ZW4gaW4gdGhlIGNvbnN0cnVjdG9yLFxuXHRcdCAqICAgICAgICAgIG11bHRpcGxpZXMgdGhlIGluY29taW5nIHNpZ25hbCBieSB0aGF0IHZhbHVlLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gdmFsdWUgQ29uc3RhbnQgdmFsdWUgdG8gbXVsdGlwbGUuIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGl0IHdpbGwgcmV0dXJuIHRoZSBwcm9kdWN0IG9mIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGlucHV0c1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoKTtcblx0XHQgKiB2YXIgc2lnQSA9IG5ldyBUb25lLlNpZ25hbCgzKTtcblx0XHQgKiB2YXIgc2lnQiA9IG5ldyBUb25lLlNpZ25hbCg0KTtcblx0XHQgKiBzaWdBLmNvbm5lY3QobXVsdCwgMCwgMCk7XG5cdFx0ICogc2lnQi5jb25uZWN0KG11bHQsIDAsIDEpO1xuXHRcdCAqIC8vb3V0cHV0IG9mIG11bHQgaXMgMTIuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG11bHQgPSBuZXcgVG9uZS5NdWx0aXBseSgxMCk7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCgyKS5jb25uZWN0KG11bHQpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBtdWx0IGlzIDIwLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aXBseSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBpbnB1dCBub2RlIGlzIHRoZSBzYW1lIGFzIHRoZSBvdXRwdXQgbm9kZVxuXHRcdFx0ICogIGl0IGlzIGFsc28gdGhlIEdhaW5Ob2RlIHdoaWNoIGhhbmRsZXMgdGhlIHNjYWxpbmcgb2YgaW5jb21pbmcgc2lnbmFsXG5cdFx0XHQgKlxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbXVsdCA9IHRoaXMuaW5wdXRbMF0gPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc2NhbGluZyBwYXJhbWV0ZXJcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9QYXJhbX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSB0aGlzLmlucHV0WzFdID0gdGhpcy5vdXRwdXQuZ2Fpbjtcblx0ICAgICAgICB0aGlzLnZhbHVlID0gVG9uZS5kZWZhdWx0QXJnKHZhbHVlLCAwKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk11bHRpcGx5LCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTXVsdGlwbHl9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGlwbHkucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9tdWx0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTXVsdGlwbHk7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBOZWdhdGUgdGhlIGluY29taW5nIHNpZ25hbC4gaS5lLiBhbiBpbnB1dCBzaWduYWwgb2YgMTAgd2lsbCBvdXRwdXQgLTEwXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG5lZyA9IG5ldyBUb25lLk5lZ2F0ZSgpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoLTIpLmNvbm5lY3QobmVnKTtcblx0XHQgKiAvL291dHB1dCBvZiBuZWcgaXMgcG9zaXRpdmUgMi4gXG5cdFx0ICovXG5cdCAgICBUb25lLk5lZ2F0ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBuZWdhdGlvbiBpcyBkb25lIGJ5IG11bHRpcGx5aW5nIGJ5IC0xXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5ID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuTXVsdGlwbHkoLTEpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTmVnYXRlLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5lZ2F0ZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5OZWdhdGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5OZWdhdGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBTdWJ0cmFjdCB0aGUgc2lnbmFsIGNvbm5lY3RlZCB0byA8Y29kZT5pbnB1dFsxXTwvY29kZT4gZnJvbSB0aGUgc2lnbmFsIGNvbm5lY3RlZCBcblx0XHQgKiAgICAgICAgIHRvIDxjb2RlPmlucHV0WzBdPC9jb2RlPi4gSWYgYW4gYXJndW1lbnQgaXMgcHJvdmlkZWQgaW4gdGhlIGNvbnN0cnVjdG9yLCB0aGUgXG5cdFx0ICogICAgICAgICBzaWduYWxzIDxjb2RlPi52YWx1ZTwvY29kZT4gd2lsbCBiZSBzdWJ0cmFjdGVkIGZyb20gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHZhbHVlIFRoZSB2YWx1ZSB0byBzdWJ0cmFjdCBmcm9tIHRoZSBpbmNvbWluZyBzaWduYWwuIElmIHRoZSB2YWx1ZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG9taXR0ZWQsIGl0IHdpbGwgc3VidHJhY3QgdGhlIHNlY29uZCBzaWduYWwgZnJvbSB0aGUgZmlyc3QuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN1YiA9IG5ldyBUb25lLlN1YnRyYWN0KDEpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoNCkuY29ubmVjdChzdWIpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBzdWIgaXMgMy4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN1YiA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdFx0ICogdmFyIHNpZ0EgPSBuZXcgVG9uZS5TaWduYWwoMTApO1xuXHRcdCAqIHZhciBzaWdCID0gbmV3IFRvbmUuU2lnbmFsKDIuNSk7XG5cdFx0ICogc2lnQS5jb25uZWN0KHN1YiwgMCwgMCk7XG5cdFx0ICogc2lnQi5jb25uZWN0KHN1YiwgMCwgMSk7XG5cdFx0ICogLy9vdXRwdXQgb2Ygc3ViIGlzIDcuNVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdWJ0cmFjdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzdW1taW5nIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1bSA9IHRoaXMuaW5wdXRbMF0gPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBuZWdhdGUgdGhlIGlucHV0IG9mIHRoZSBzZWNvbmQgaW5wdXQgYmVmb3JlIGNvbm5lY3RpbmcgaXRcblx0XHRcdCAqICB0byB0aGUgc3VtbWluZyBub2RlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk5lZ2F0ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbmVnID0gbmV3IFRvbmUuTmVnYXRlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5vZGUgd2hlcmUgdGhlIHZhbHVlIGlzIHNldFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSB0aGlzLmlucHV0WzFdID0gbmV3IFRvbmUuU2lnbmFsKHZhbHVlKTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5jaGFpbih0aGlzLl9uZWcsIHRoaXMuX3N1bSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TdWJ0cmFjdCwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWxCYXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN1YnRyYWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbmVnLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9uZWcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N1bS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fc3VtID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TdWJ0cmFjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIENvbnZlcnQgYW4gaW5jb21pbmcgc2lnbmFsIGJldHdlZW4gMCwgMSB0byBhbiBlcXVhbCBwb3dlciBnYWluIHNjYWxlLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBlcVBvd0dhaW4gPSBuZXcgVG9uZS5FcXVhbFBvd2VyR2FpbigpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FcXVhbFBvd2VyR2FpbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9lcVBvd2VyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGlmIChNYXRoLmFicyh2YWwpIDwgMC4wMDEpIHtcblx0ICAgICAgICAgICAgICAgIC8vc2hvdWxkIG91dHB1dCAwIHdoZW4gaW5wdXQgaXMgMFxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5lcXVhbFBvd2VyU2NhbGUodmFsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSwgNDA5Nik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5FcXVhbFBvd2VyR2FpbiwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FcXVhbFBvd2VyR2Fpbn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FcXVhbFBvd2VyR2Fpbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9lcVBvd2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9lcVBvd2VyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FcXVhbFBvd2VyR2Fpbjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgIFRvbmUuQ3Jvc3NmYWRlIHByb3ZpZGVzIGVxdWFsIHBvd2VyIGZhZGluZyBiZXR3ZWVuIHR3byBpbnB1dHMuXG5cdFx0ICogICAgICAgICBNb3JlIG9uIGNyb3NzZmFkaW5nIHRlY2huaXF1ZSBbaGVyZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmFkZV8oYXVkaW9fZW5naW5lZXJpbmcpI0Nyb3NzZmFkaW5nKS5cblx0XHQgKlxuXHRcdCAqIEBjb25zdHJ1Y3RvclxuXHRcdCAqIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiBAcGFyYW0ge05vcm1hbFJhbmdlfSBbaW5pdGlhbEZhZGU9MC41XVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIGNyb3NzRmFkZSA9IG5ldyBUb25lLkNyb3NzRmFkZSgwLjUpO1xuXHRcdCAqIC8vY29ubmVjdCBlZmZlY3QgQSB0byBjcm9zc2ZhZGUgZnJvbVxuXHRcdCAqIC8vZWZmZWN0IG91dHB1dCAwIHRvIGNyb3NzZmFkZSBpbnB1dCAwXG5cdFx0ICogZWZmZWN0QS5jb25uZWN0KGNyb3NzRmFkZSwgMCwgMCk7XG5cdFx0ICogLy9jb25uZWN0IGVmZmVjdCBCIHRvIGNyb3NzZmFkZSBmcm9tXG5cdFx0ICogLy9lZmZlY3Qgb3V0cHV0IDAgdG8gY3Jvc3NmYWRlIGlucHV0IDFcblx0XHQgKiBlZmZlY3RCLmNvbm5lY3QoY3Jvc3NGYWRlLCAwLCAxKTtcblx0XHQgKiBjcm9zc0ZhZGUuZmFkZS52YWx1ZSA9IDA7XG5cdFx0ICogLy8gXiBvbmx5IGVmZmVjdEEgaXMgb3V0cHV0XG5cdFx0ICogY3Jvc3NGYWRlLmZhZGUudmFsdWUgPSAxO1xuXHRcdCAqIC8vIF4gb25seSBlZmZlY3RCIGlzIG91dHB1dFxuXHRcdCAqIGNyb3NzRmFkZS5mYWRlLnZhbHVlID0gMC41O1xuXHRcdCAqIC8vIF4gdGhlIHR3byBzaWduYWxzIGFyZSBtaXhlZCBlcXVhbGx5LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Dcm9zc0ZhZGUgPSBmdW5jdGlvbiAoaW5pdGlhbEZhZGUpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+aW5wdXRbMF08L2NvZGU+LlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmEgPSB0aGlzLmlucHV0WzBdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsaWFzIGZvciA8Y29kZT5pbnB1dFsxXTwvY29kZT4uXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYiA9IHRoaXMuaW5wdXRbMV0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBcdFRoZSBtaXggYmV0d2VlbiB0aGUgdHdvIGlucHV0cy4gQSBmYWRlIHZhbHVlIG9mIDBcblx0XHRcdCAqIFx0d2lsbCBvdXRwdXQgMTAwJSA8Y29kZT5pbnB1dFswXTwvY29kZT4gYW5kXG5cdFx0XHQgKiBcdGEgdmFsdWUgb2YgMSB3aWxsIG91dHB1dCAxMDAlIDxjb2RlPmlucHV0WzFdPC9jb2RlPi5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mYWRlID0gbmV3IFRvbmUuU2lnbmFsKFRvbmUuZGVmYXVsdEFyZyhpbml0aWFsRmFkZSwgMC41KSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBlcXVhbCBwb3dlciBnYWluIGNyb3NzIGZhZGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkVxdWFsUG93ZXJHYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckEgPSBuZXcgVG9uZS5FcXVhbFBvd2VyR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGVxdWFsIHBvd2VyIGdhaW4gY3Jvc3MgZmFkZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRXF1YWxQb3dlckdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQiA9IG5ldyBUb25lLkVxdWFsUG93ZXJHYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaW52ZXJ0IHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb25lID0gdGhpcy5jb250ZXh0LmdldENvbnN0YW50KDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGludmVydCB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ludmVydCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuYS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLmIuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5mYWRlLmNoYWluKHRoaXMuX2VxdWFsUG93ZXJCLCB0aGlzLmIuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fb25lLmNvbm5lY3QodGhpcy5faW52ZXJ0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLmZhZGUuY29ubmVjdCh0aGlzLl9pbnZlcnQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX2ludmVydC5jaGFpbih0aGlzLl9lcXVhbFBvd2VyQSwgdGhpcy5hLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdmYWRlJyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Dcm9zc0ZhZGUsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Dcm9zc0ZhZGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3Jvc3NGYWRlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2ZhZGUnKTtcblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2VxdWFsUG93ZXJCLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mYWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZhZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ludmVydC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5faW52ZXJ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vbmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuYS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5hID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuYiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ3Jvc3NGYWRlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRmlsdGVyIGlzIGEgZmlsdGVyIHdoaWNoIGFsbG93cyBmb3IgYWxsIG9mIHRoZSBzYW1lIG5hdGl2ZSBtZXRob2RzXG5cdFx0ICogICAgICAgICAgYXMgdGhlIFtCaXF1YWRGaWx0ZXJOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS1iaXF1YWRmaWx0ZXJub2RlLWludGVyZmFjZSkuXG5cdFx0ICogICAgICAgICAgVG9uZS5GaWx0ZXIgaGFzIHRoZSBhZGRlZCBhYmlsaXR5IHRvIHNldCB0aGUgZmlsdGVyIHJvbGxvZmYgYXQgLTEyXG5cdFx0ICogICAgICAgICAgKGRlZmF1bHQpLCAtMjQgYW5kIC00OC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeXxPYmplY3R9IFtmcmVxdWVuY3ldIFRoZSBjdXRvZmYgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXIuXG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nPX0gdHlwZSBUaGUgdHlwZSBvZiBmaWx0ZXIuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gcm9sbG9mZiBUaGUgZHJvcCBpbiBkZWNpYmVscyBwZXIgb2N0YXZlIGFmdGVyIHRoZSBjdXRvZmYgZnJlcXVlbmN5LlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgY2hvaWNlczogLTEyLCAtMjQsIGFuZCAtNDhcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIGZpbHRlciA9IG5ldyBUb25lLkZpbHRlcigyMDAsIFwiaGlnaHBhc3NcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkZpbHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZScsXG5cdCAgICAgICAgICAgICdyb2xsb2ZmJ1xuXHQgICAgICAgIF0sIFRvbmUuRmlsdGVyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZmlsdGVyKHMpXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGN1dG9mZiBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlci5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbCgwLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIG9mIHRoZSBmaWx0ZXIsIG9ubHkgdXNlZCBpbiBjZXJ0YWluIGZpbHRlciB0eXBlc1xuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5nYWluID0gbmV3IFRvbmUuU2lnbmFsKHtcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogb3B0aW9ucy5nYWluLFxuXHQgICAgICAgICAgICAnY29udmVydCc6IGZhbHNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIFEgb3IgUXVhbGl0eSBvZiB0aGUgZmlsdGVyXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuUSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLlEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB0eXBlIG9mIHRoZSBmaWx0ZXJcblx0XHRcdCAqICBAdHlwZSB7c3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSByb2xsb2ZmIHZhbHVlIG9mIHRoZSBmaWx0ZXJcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yb2xsb2ZmID0gb3B0aW9ucy5yb2xsb2ZmO1xuXHQgICAgICAgIC8vc2V0IHRoZSByb2xsb2ZmO1xuXHQgICAgICAgIHRoaXMucm9sbG9mZiA9IG9wdGlvbnMucm9sbG9mZjtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2dhaW4nLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZpbHRlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZpbHRlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndHlwZSc6ICdsb3dwYXNzJyxcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMzUwLFxuXHQgICAgICAgICdyb2xsb2ZmJzogLTEyLFxuXHQgICAgICAgICdRJzogMSxcblx0ICAgICAgICAnZ2Fpbic6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgZmlsdGVyLiBUeXBlczogXCJsb3dwYXNzXCIsIFwiaGlnaHBhc3NcIixcblx0XHQgKiBcImJhbmRwYXNzXCIsIFwibG93c2hlbGZcIiwgXCJoaWdoc2hlbGZcIiwgXCJub3RjaFwiLCBcImFsbHBhc3NcIiwgb3IgXCJwZWFraW5nXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmlsdGVyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB2YXIgdHlwZXMgPSBbXG5cdCAgICAgICAgICAgICAgICAnbG93cGFzcycsXG5cdCAgICAgICAgICAgICAgICAnaGlnaHBhc3MnLFxuXHQgICAgICAgICAgICAgICAgJ2JhbmRwYXNzJyxcblx0ICAgICAgICAgICAgICAgICdsb3dzaGVsZicsXG5cdCAgICAgICAgICAgICAgICAnaGlnaHNoZWxmJyxcblx0ICAgICAgICAgICAgICAgICdub3RjaCcsXG5cdCAgICAgICAgICAgICAgICAnYWxscGFzcycsXG5cdCAgICAgICAgICAgICAgICAncGVha2luZydcblx0ICAgICAgICAgICAgXTtcblx0ICAgICAgICAgICAgaWYgKHR5cGVzLmluZGV4T2YodHlwZSkgPT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUb25lLkZpbHRlcjogaW52YWxpZCB0eXBlICcgKyB0eXBlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9maWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2ldLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcm9sbG9mZiBvZiB0aGUgZmlsdGVyIHdoaWNoIGlzIHRoZSBkcm9wIGluIGRiXG5cdFx0ICogcGVyIG9jdGF2ZS4gSW1wbGVtZW50ZWQgaW50ZXJuYWxseSBieSBjYXNjYWRpbmcgZmlsdGVycy5cblx0XHQgKiBPbmx5IGFjY2VwdHMgdGhlIHZhbHVlcyAtMTIsIC0yNCwgLTQ4IGFuZCAtOTYuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgcm9sbG9mZlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmlsdGVyLnByb3RvdHlwZSwgJ3JvbGxvZmYnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb2xsb2ZmO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocm9sbG9mZikge1xuXHQgICAgICAgICAgICByb2xsb2ZmID0gcGFyc2VJbnQocm9sbG9mZiwgMTApO1xuXHQgICAgICAgICAgICB2YXIgcG9zc2liaWxpdGllcyA9IFtcblx0ICAgICAgICAgICAgICAgIC0xMixcblx0ICAgICAgICAgICAgICAgIC0yNCxcblx0ICAgICAgICAgICAgICAgIC00OCxcblx0ICAgICAgICAgICAgICAgIC05NlxuXHQgICAgICAgICAgICBdO1xuXHQgICAgICAgICAgICB2YXIgY2FzY2FkaW5nQ291bnQgPSBwb3NzaWJpbGl0aWVzLmluZGV4T2Yocm9sbG9mZik7XG5cdCAgICAgICAgICAgIC8vY2hlY2sgdGhlIHJvbGxvZmYgaXMgdmFsaWRcblx0ICAgICAgICAgICAgaWYgKGNhc2NhZGluZ0NvdW50ID09PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RvbmUuRmlsdGVyOiByb2xsb2ZmIGNhbiBvbmx5IGJlIC0xMiwgLTI0LCAtNDggb3IgLTk2Jyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgY2FzY2FkaW5nQ291bnQgKz0gMTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9sbG9mZiA9IHJvbGxvZmY7XG5cdCAgICAgICAgICAgIC8vZmlyc3QgZGlzY29ubmVjdCB0aGUgZmlsdGVycyBhbmQgdGhyb3cgdGhlbSBhd2F5XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ZpbHRlcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbaV0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tpXSA9IG51bGw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IG5ldyBBcnJheShjYXNjYWRpbmdDb3VudCk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNvdW50ID0gMDsgY291bnQgPCBjYXNjYWRpbmdDb3VudDsgY291bnQrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGZpbHRlciA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICAgICAgICAgIGZpbHRlci50eXBlID0gdGhpcy5fdHlwZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QoZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KGZpbHRlci5kZXR1bmUpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5RLmNvbm5lY3QoZmlsdGVyLlEpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5nYWluLmNvbm5lY3QoZmlsdGVyLmdhaW4pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tjb3VudF0gPSBmaWx0ZXI7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9jb25uZWN0IHRoZW0gdXBcblx0ICAgICAgICAgICAgdmFyIGNvbm5lY3Rpb25DaGFpbiA9IFt0aGlzLmlucHV0XS5jb25jYXQodGhpcy5fZmlsdGVycykuY29uY2F0KFt0aGlzLm91dHB1dF0pO1xuXHQgICAgICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgY29ubmVjdGlvbkNoYWluKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRmlsdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9maWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbaV0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2ldID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fZmlsdGVycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdnYWluJyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuUS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuUSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmdhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRmlsdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgU3BsaXQgdGhlIGluY29taW5nIHNpZ25hbCBpbnRvIHRocmVlIGJhbmRzIChsb3csIG1pZCwgaGlnaClcblx0XHQgKiAgICAgICAgIHdpdGggdHdvIGNyb3Nzb3ZlciBmcmVxdWVuY3kgY29udHJvbHMuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbbG93RnJlcXVlbmN5XSB0aGUgbG93L21pZCBjcm9zc292ZXIgZnJlcXVlbmN5XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbaGlnaEZyZXF1ZW5jeV0gdGhlIG1pZC9oaWdoIGNyb3Nzb3ZlciBmcmVxdWVuY3lcblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kU3BsaXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knXG5cdCAgICAgICAgXSwgVG9uZS5NdWx0aWJhbmRTcGxpdCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgaW5wdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBvdXRwdXRzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBBcnJheSgzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbG93IGJhbmQuIEFsaWFzIGZvciA8Y29kZT5vdXRwdXRbMF08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb3cgPSB0aGlzLm91dHB1dFswXSA9IG5ldyBUb25lLkZpbHRlcigwLCAnbG93cGFzcycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsb3dlciBmaWx0ZXIgb2YgdGhlIG1pZCBiYW5kXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb3dNaWRGaWx0ZXIgPSBuZXcgVG9uZS5GaWx0ZXIoMCwgJ2hpZ2hwYXNzJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZCBiYW5kIG91dHB1dC4gQWxpYXMgZm9yIDxjb2RlPm91dHB1dFsxXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IHRoaXMub3V0cHV0WzFdID0gbmV3IFRvbmUuRmlsdGVyKDAsICdsb3dwYXNzJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGhpZ2ggYmFuZCBvdXRwdXQuIEFsaWFzIGZvciA8Y29kZT5vdXRwdXRbMl08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoID0gdGhpcy5vdXRwdXRbMl0gPSBuZXcgVG9uZS5GaWx0ZXIoMCwgJ2hpZ2hwYXNzJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxvdy9taWQgY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMubG93RnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkL2hpZ2ggY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmhpZ2hGcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBxdWFsaXR5IG9mIGFsbCB0aGUgZmlsdGVyc1xuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5RID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuUSk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5mYW4odGhpcy5sb3csIHRoaXMuaGlnaCk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jaGFpbih0aGlzLl9sb3dNaWRGaWx0ZXIsIHRoaXMubWlkKTtcblx0ICAgICAgICAvL3RoZSBmcmVxdWVuY3kgY29udHJvbCBzaWduYWxcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeS5jb25uZWN0KHRoaXMubG93LmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9sb3dNaWRGaWx0ZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kuY29ubmVjdCh0aGlzLm1pZC5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuaGlnaC5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vdGhlIFEgdmFsdWVcblx0ICAgICAgICB0aGlzLlEuY29ubmVjdCh0aGlzLmxvdy5RKTtcblx0ICAgICAgICB0aGlzLlEuY29ubmVjdCh0aGlzLl9sb3dNaWRGaWx0ZXIuUSk7XG5cdCAgICAgICAgdGhpcy5RLmNvbm5lY3QodGhpcy5taWQuUSk7XG5cdCAgICAgICAgdGhpcy5RLmNvbm5lY3QodGhpcy5oaWdoLlEpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk11bHRpYmFuZFNwbGl0LCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRTcGxpdC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbG93RnJlcXVlbmN5JzogNDAwLFxuXHQgICAgICAgICdoaWdoRnJlcXVlbmN5JzogMjUwMCxcblx0ICAgICAgICAnUSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk11bHRpYmFuZFNwbGl0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZFNwbGl0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnaGlnaCcsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMubG93LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmxvdyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbG93TWlkRmlsdGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sb3dNaWRGaWx0ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWlkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhpZ2ggPSBudWxsO1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuUS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5RID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NdWx0aWJhbmRTcGxpdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRVEzIGlzIGEgdGhyZWUgYmFuZCBFUSB3aXRoIGNvbnRyb2wgb3ZlciBsb3csIG1pZCwgYW5kIGhpZ2ggZ2FpbiBhc1xuXHRcdCAqICAgICAgICAgd2VsbCBhcyB0aGUgbG93IGFuZCBoaWdoIGNyb3Nzb3ZlciBmcmVxdWVuY2llcy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN8T2JqZWN0fSBbbG93TGV2ZWxdIFRoZSBnYWluIGFwcGxpZWQgdG8gdGhlIGxvd3MuXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN9IFttaWRMZXZlbF0gVGhlIGdhaW4gYXBwbGllZCB0byB0aGUgbWlkLlxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfSBbaGlnaExldmVsXSBUaGUgZ2FpbiBhcHBsaWVkIHRvIHRoZSBoaWdoLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBlcSA9IG5ldyBUb25lLkVRMygtMTAsIDMsIC0yMCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkVRMyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2hpZ2gnXG5cdCAgICAgICAgXSwgVG9uZS5FUTMpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG91dHB1dCBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbXVsdGliYW5kIHNwbGl0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGliYW5kU3BsaXR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk11bHRpYmFuZFNwbGl0KHtcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSc6IG9wdGlvbnMubG93RnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeSc6IG9wdGlvbnMuaGlnaEZyZXF1ZW5jeVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIGZvciB0aGUgbG93ZXIgc2lnbmFsc1xuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb3dHYWluID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLmxvdywgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBmb3IgdGhlIG1pZCBzaWduYWxzXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZEdhaW4gPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMubWlkLCBUb25lLlR5cGUuRGVjaWJlbHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGdhaW4gaW4gZGVjaWJlbHMgb2YgdGhlIGhpZ2ggcGFydFxuXHRcdFx0ICogQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9oaWdoR2FpbiA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5oaWdoLCBUb25lLlR5cGUuRGVjaWJlbHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGdhaW4gaW4gZGVjaWJlbHMgb2YgdGhlIGxvdyBwYXJ0XG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvdyA9IHRoaXMuX2xvd0dhaW4uZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBnYWluIGluIGRlY2liZWxzIG9mIHRoZSBtaWQgcGFydFxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSB0aGlzLl9taWRHYWluLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZ2FpbiBpbiBkZWNpYmVscyBvZiB0aGUgaGlnaCBwYXJ0XG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2ggPSB0aGlzLl9oaWdoR2Fpbi5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBRIHZhbHVlIGZvciBhbGwgb2YgdGhlIGZpbHRlcnMuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuUSA9IHRoaXMuX211bHRpYmFuZFNwbGl0LlE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxvdy9taWQgY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gdGhpcy5fbXVsdGliYW5kU3BsaXQubG93RnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQvaGlnaCBjcm9zc292ZXIgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gdGhpcy5fbXVsdGliYW5kU3BsaXQuaGlnaEZyZXF1ZW5jeTtcblx0ICAgICAgICAvL3RoZSBmcmVxdWVuY3kgYmFuZHNcblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdC5sb3cuY2hhaW4odGhpcy5fbG93R2FpbiwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0Lm1pZC5jaGFpbih0aGlzLl9taWRHYWluLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGliYW5kU3BsaXQuaGlnaC5jaGFpbih0aGlzLl9oaWdoR2FpbiwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnaGlnaCcsXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkVRMywgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FUTMuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2xvdyc6IDAsXG5cdCAgICAgICAgJ21pZCc6IDAsXG5cdCAgICAgICAgJ2hpZ2gnOiAwLFxuXHQgICAgICAgICdsb3dGcmVxdWVuY3knOiA0MDAsXG5cdCAgICAgICAgJ2hpZ2hGcmVxdWVuY3knOiAyNTAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVRM30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FUTMucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGliYW5kU3BsaXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sb3dHYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sb3dHYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRHYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRHYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9oaWdoR2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5faGlnaEdhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMubG93ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLlEgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkVRMztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBQZXJmb3JtcyBhIGxpbmVhciBzY2FsaW5nIG9uIGFuIGlucHV0IHNpZ25hbC5cblx0XHQgKiAgICAgICAgICBTY2FsZXMgYSBOb3JtYWxSYW5nZSBpbnB1dCB0byBiZXR3ZWVuXG5cdFx0ICogICAgICAgICAgb3V0cHV0TWluIGFuZCBvdXRwdXRNYXguXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TWluPTBdIFRoZSBvdXRwdXQgdmFsdWUgd2hlbiB0aGUgaW5wdXQgaXMgMC4gXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TWF4PTFdXHRUaGUgb3V0cHV0IHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIDEuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzY2FsZSA9IG5ldyBUb25lLlNjYWxlKDUwLCAxMDApO1xuXHRcdCAqIHZhciBzaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoMC41KS5jb25uZWN0KHNjYWxlKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2Ygc2NhbGUgZXF1YWxzIDc1XG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlID0gZnVuY3Rpb24gKG91dHB1dE1pbiwgb3V0cHV0TWF4KSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqIFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX291dHB1dE1pbiA9IFRvbmUuZGVmYXVsdEFyZyhvdXRwdXRNaW4sIDApO1xuXHQgICAgICAgIC8qKiBcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vdXRwdXRNYXggPSBUb25lLmRlZmF1bHRBcmcob3V0cHV0TWF4LCAxKTtcblx0ICAgICAgICAvKiogXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuTXVsdGlwbHkoMSk7XG5cdCAgICAgICAgLyoqIFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQWRkfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hZGQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkFkZCgwKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5jb25uZWN0KHRoaXMuX2FkZCk7XG5cdCAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNjYWxlLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbmltdW0gb3V0cHV0IHZhbHVlLiBUaGlzIG51bWJlciBpcyBvdXRwdXQgd2hlbiBcblx0XHQgKiB0aGUgdmFsdWUgaW5wdXQgdmFsdWUgaXMgMC4gXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtaW5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlLnByb3RvdHlwZSwgJ21pbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dE1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXRNaW4gPSBtaW47XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSBvdXRwdXQgdmFsdWUuIFRoaXMgbnVtYmVyIGlzIG91dHB1dCB3aGVuIFxuXHRcdCAqIHRoZSB2YWx1ZSBpbnB1dCB2YWx1ZSBpcyAxLiBcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1heFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGUucHJvdG90eXBlLCAnbWF4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0TWF4O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWF4KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX291dHB1dE1heCA9IG1heDtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBzZXQgdGhlIHZhbHVlc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZS5wcm90b3R5cGUuX3NldFJhbmdlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2FkZC52YWx1ZSA9IHRoaXMuX291dHB1dE1pbjtcblx0ICAgICAgICB0aGlzLl9zY2FsZS52YWx1ZSA9IHRoaXMuX291dHB1dE1heCAtIHRoaXMuX291dHB1dE1pbjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNjYWxlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2FkZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYWRkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNjYWxlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBQZXJmb3JtcyBhbiBleHBvbmVudGlhbCBzY2FsaW5nIG9uIGFuIGlucHV0IHNpZ25hbC5cblx0XHQgKiAgICAgICAgICBTY2FsZXMgYSBOb3JtYWxSYW5nZSB2YWx1ZSBbMCwxXSBleHBvbmVudGlhbGx5XG5cdFx0ICogICAgICAgICAgdG8gdGhlIG91dHB1dCByYW5nZSBvZiBvdXRwdXRNaW4gdG8gb3V0cHV0TWF4LlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE1pbj0wXSBUaGUgb3V0cHV0IHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIDAuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TWF4PTFdXHRUaGUgb3V0cHV0IHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIDEuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbZXhwb25lbnQ9Ml0gVGhlIGV4cG9uZW50IHdoaWNoIHNjYWxlcyB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzY2FsZUV4cCA9IG5ldyBUb25lLlNjYWxlRXhwKDAsIDEwMCwgMik7XG5cdFx0ICogdmFyIHNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbCgwLjUpLmNvbm5lY3Qoc2NhbGVFeHApO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZUV4cCA9IGZ1bmN0aW9uIChvdXRwdXRNaW4sIG91dHB1dE1heCwgZXhwb25lbnQpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgaW5wdXQgdG8gdGhlIG91dHB1dCByYW5nZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNjYWxlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuU2NhbGUob3V0cHV0TWluLCBvdXRwdXRNYXgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuUG93fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9leHAgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuUG93KFRvbmUuZGVmYXVsdEFyZyhleHBvbmVudCwgMikpO1xuXHQgICAgICAgIHRoaXMuX2V4cC5jb25uZWN0KHRoaXMuX3NjYWxlKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNjYWxlRXhwLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogSW5zdGVhZCBvZiBpbnRlcnBvbGF0aW5nIGxpbmVhcmx5IGJldHdlZW4gdGhlIDxjb2RlPm1pbjwvY29kZT4gYW5kXG5cdFx0ICogPGNvZGU+bWF4PC9jb2RlPiB2YWx1ZXMsIHNldHRpbmcgdGhlIGV4cG9uZW50IHdpbGwgaW50ZXJwb2xhdGUgYmV0d2VlblxuXHRcdCAqIHRoZSB0d28gdmFsdWVzIHdpdGggYW4gZXhwb25lbnRpYWwgY3VydmUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGVFeHAjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBleHBvbmVudFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVFeHAucHJvdG90eXBlLCAnZXhwb25lbnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHAudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXhwLnZhbHVlID0gZXhwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbmltdW0gb3V0cHV0IHZhbHVlLiBUaGlzIG51bWJlciBpcyBvdXRwdXQgd2hlblxuXHRcdCAqIHRoZSB2YWx1ZSBpbnB1dCB2YWx1ZSBpcyAwLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlRXhwI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZUV4cC5wcm90b3R5cGUsICdtaW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZS5taW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWluID0gbWluO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gb3V0cHV0IHZhbHVlLiBUaGlzIG51bWJlciBpcyBvdXRwdXQgd2hlblxuXHRcdCAqIHRoZSB2YWx1ZSBpbnB1dCB2YWx1ZSBpcyAxLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlRXhwI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWF4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZUV4cC5wcm90b3R5cGUsICdtYXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZS5tYXg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWF4ID0gbWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TY2FsZUV4cH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZUV4cC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2V4cC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXhwID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TY2FsZUV4cDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBwZXIgYXJvdW5kIFdlYiBBdWRpbydzIG5hdGl2ZSBbRGVsYXlOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS1kZWxheW5vZGUtaW50ZXJmYWNlKS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7VGltZT19IGRlbGF5VGltZSBUaGUgZGVsYXkgYXBwbGllZCB0byB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSBtYXhEZWxheSBUaGUgbWF4aW11bSBkZWxheSB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5EZWxheSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAnbWF4RGVsYXknXG5cdCAgICAgICAgXSwgVG9uZS5EZWxheSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBtYXhpbXVtIGRlbGF5IHRpbWUgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgbm9kZVxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tYXhEZWxheSA9IE1hdGgubWF4KHRoaXMudG9TZWNvbmRzKG9wdGlvbnMubWF4RGVsYXkpLCB0aGlzLnRvU2Vjb25kcyhvcHRpb25zLmRlbGF5VGltZSkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBuYXRpdmUgZGVsYXkgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtEZWxheU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVEZWxheSh0aGlzLl9tYXhEZWxheSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiB0aW1lIHRoZSBpbmNvbWluZyBzaWduYWwgaXNcblx0XHRcdCAqICBkZWxheWVkLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9kZWxheU5vZGUuZGVsYXlUaW1lLFxuXHQgICAgICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuVGltZSxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogb3B0aW9ucy5kZWxheVRpbWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZGVsYXlUaW1lJyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5EZWxheSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkRlbGF5LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtYXhEZWxheSc6IDEsXG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSBkZWxheSB0aW1lLiBUaGlzIGNhbm5vdCBiZSBjaGFuZ2VkLiBUaGUgdmFsdWUgaXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yLlxuXHRcdCAqIEBtZW1iZXJvZiBUb25lLkRlbGF5I1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIG1heERlbGF5XG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5EZWxheS5wcm90b3R5cGUsICdtYXhEZWxheScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21heERlbGF5O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5EZWxheX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRGVsYXkucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2RlbGF5VGltZScpO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5EZWxheTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIENvbWIgZmlsdGVycyBhcmUgYmFzaWMgYnVpbGRpbmcgYmxvY2tzIGZvciBwaHlzaWNhbCBtb2RlbGluZy4gUmVhZCBtb3JlXG5cdFx0ICogICAgICAgICBhYm91dCBjb21iIGZpbHRlcnMgb24gW0NDUk1BJ3Mgd2Vic2l0ZV0oaHR0cHM6Ly9jY3JtYS5zdGFuZm9yZC5lZHUvfmpvcy9wYXNwL0ZlZWRiYWNrX0NvbWJfRmlsdGVycy5odG1sKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZGVsYXlUaW1lXSBUaGUgZGVsYXkgdGltZSBvZiB0aGUgZmlsdGVyLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlPX0gcmVzb25hbmNlIFRoZSBhbW91bnQgb2YgZmVlZGJhY2sgdGhlIGZpbHRlciBoYXMuXG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrQ29tYkZpbHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAncmVzb25hbmNlJ1xuXHQgICAgICAgIF0sIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0RlbGF5Tm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5EZWxheShvcHRpb25zLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBkZWxheSBvZiB0aGUgY29tYiBmaWx0ZXIuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSB0aGlzLl9kZWxheS5kZWxheVRpbWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGZlZWRiYWNrIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLnJlc29uYW5jZSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGZlZWRiYWNrIG9mIHRoZSBkZWxheWVkIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSB0aGlzLl9mZWVkYmFjay5nYWluO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5LmNoYWluKHRoaXMuX2ZlZWRiYWNrLCB0aGlzLl9kZWxheSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZlZWRiYWNrQ29tYkZpbHRlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLjEsXG5cdCAgICAgICAgJ3Jlc29uYW5jZSc6IDAuNVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GZWVkYmFja0NvbWJGaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9kZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFjay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEdldCB0aGUgY3VycmVudCB3YXZlZm9ybSBkYXRhIG9mIHRoZSBjb25uZWN0ZWQgYXVkaW8gc291cmNlLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgRkZULiBWYWx1ZSBtdXN0IGJlIGEgcG93ZXIgb2Zcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKi9cblx0ICAgIFRvbmUuRkZUID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnc2l6ZSddLCBUb25lLkZGVCk7XG5cdCAgICAgICAgb3B0aW9ucy50eXBlID0gVG9uZS5BbmFseXNlci5UeXBlLkZGVDtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNlciBub2RlLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW5hbHlzZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkFuYWx5c2VyKG9wdGlvbnMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRkZULCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuRkZULmRlZmF1bHRzID0geyAnc2l6ZSc6IDEwMjQgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXRzIHRoZSB3YXZlZm9ybSBvZiB0aGUgYXVkaW8gc291cmNlLiBSZXR1cm5zIHRoZSB3YXZlZm9ybSBkYXRhXG5cdFx0ICogIG9mIGxlbmd0aCBbc2l6ZV0oI3NpemUpIGFzIGEgRmxvYXQzMkFycmF5IHdpdGggdmFsdWVzIGJldHdlZW4gLTEgYW5kIDEuXG5cdFx0ICogIEByZXR1cm5zIHtUeXBlZEFycmF5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GRlQucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5nZXRWYWx1ZSgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc2l6ZSBvZiBhbmFseXNpcy4gVGhpcyBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRkZUI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBzaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GRlQucHJvdG90eXBlLCAnc2l6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLnNpemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLnNpemUgPSBzaXplO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5GRlR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZGVC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRkZUO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgUmV0dXJuIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBhbiBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbCgtMSk7XG5cdFx0ICogdmFyIGFicyA9IG5ldyBUb25lLkFicygpO1xuXHRcdCAqIHNpZ25hbC5jb25uZWN0KGFicyk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIGFicyBpcyAxLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5BYnMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTGVzc1RoYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FicyA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBpZiAoTWF0aC5hYnModmFsKSA8IDAuMDAxKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh2YWwpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSwgMTAyNCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BYnMsIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZSBtZXRob2Rcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQWJzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFicy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hYnMuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FicyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQWJzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRm9sbG93ZXIgaXMgYSAgY3J1ZGUgZW52ZWxvcGUgZm9sbG93ZXIgd2hpY2ggd2lsbCBmb2xsb3dcblx0XHQgKiAgICAgICAgICB0aGUgYW1wbGl0dWRlIG9mIGFuIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgICAgICAgICBUYWtlIGNhcmUgd2l0aCBzbWFsbCAoPCAwLjAyKSBhdHRhY2sgb3IgZGVjYXkgdmFsdWVzXG5cdFx0ICogICAgICAgICAgYXMgZm9sbG93ZXIgaGFzIHNvbWUgcmlwcGxlIHdoaWNoIGlzIGV4YWdnZXJhdGVkXG5cdFx0ICogICAgICAgICAgYXQgdGhlc2UgdmFsdWVzLiBSZWFkIG1vcmUgYWJvdXQgZW52ZWxvcGUgZm9sbG93ZXJzIChhbHNvIGtub3duXG5cdFx0ICogICAgICAgICAgYXMgZW52ZWxvcGUgZGV0ZWN0b3JzKSBvbiBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FbnZlbG9wZV9kZXRlY3RvcikuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2F0dGFja10gVGhlIHJhdGUgYXQgd2hpY2ggdGhlIGZvbGxvd2VyIHJpc2VzLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSByZWxlYXNlIFRoZSByYXRlIGF0IHdoaWNoIHRoZSBmb2xvd2VyIGZhbGxzLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBmb2xsb3dlciA9IG5ldyBUb25lLkZvbGxvd2VyKDAuMiwgMC40KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRm9sbG93ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnXG5cdCAgICAgICAgXSwgVG9uZS5Gb2xsb3dlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQWJzfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hYnMgPSBuZXcgVG9uZS5BYnMoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbG93cGFzcyBmaWx0ZXIgd2hpY2ggc21vb3RocyB0aGUgaW5wdXRcblx0XHRcdCAqICBAdHlwZSB7QmlxdWFkRmlsdGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmlsdGVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlci50eXBlID0gJ2xvd3Bhc3MnO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlci5mcmVxdWVuY3kudmFsdWUgPSAwO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlci5RLnZhbHVlID0gLTEwMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeVZhbHVlcyA9IG5ldyBUb25lLldhdmVTaGFwZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3ViID0gbmV3IFRvbmUuU3VidHJhY3QoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSBuZXcgVG9uZS5EZWxheSh0aGlzLmJsb2NrVGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhpcyBrZWVwcyBpdCBmYXIgZnJvbSAwLCBldmVuIGZvciB2ZXJ5IHNtYWxsIGRpZmZlcmVuY2VzXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHQgPSBuZXcgVG9uZS5NdWx0aXBseSgxMDAwMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYXR0YWNrID0gb3B0aW9ucy5hdHRhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmVsZWFzZSA9IG9wdGlvbnMucmVsZWFzZTtcblx0ICAgICAgICAvL3RoZSBzbW9vdGhlZCBzaWduYWwgdG8gZ2V0IHRoZSB2YWx1ZXNcblx0ICAgICAgICB0aGlzLmlucHV0LmNoYWluKHRoaXMuX2FicywgdGhpcy5fZmlsdGVyLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgLy90aGUgZGlmZmVyZW5jZSBwYXRoXG5cdCAgICAgICAgdGhpcy5fYWJzLmNvbm5lY3QodGhpcy5fc3ViLCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXIuY2hhaW4odGhpcy5fZGVsYXksIHRoaXMuX3N1Yik7XG5cdCAgICAgICAgLy90aHJlc2hvbGQgdGhlIGRpZmZlcmVuY2UgYW5kIHVzZSB0aGUgdGhyZXNoIHRvIHNldCB0aGUgZnJlcXVlbmN5XG5cdCAgICAgICAgdGhpcy5fc3ViLmNoYWluKHRoaXMuX211bHQsIHRoaXMuX2ZyZXF1ZW5jeVZhbHVlcywgdGhpcy5fZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGF0dGFjayBhbmQgcmVsZWFzZSB2YWx1ZXMgaW4gdGhlIHRhYmxlXG5cdCAgICAgICAgdGhpcy5fc2V0QXR0YWNrUmVsZWFzZSh0aGlzLl9hdHRhY2ssIHRoaXMuX3JlbGVhc2UpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRm9sbG93ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZvbGxvd2VyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdhdHRhY2snOiAwLjA1LFxuXHQgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHNldHMgdGhlIGF0dGFjayBhbmQgcmVsZWFzZSB0aW1lcyBpbiB0aGUgd2F2ZSBzaGFwZXJcblx0XHQgKiAgQHBhcmFtICAge1RpbWV9IGF0dGFja1xuXHRcdCAqICBAcGFyYW0gICB7VGltZX0gcmVsZWFzZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Gb2xsb3dlci5wcm90b3R5cGUuX3NldEF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAoYXR0YWNrLCByZWxlYXNlKSB7XG5cdCAgICAgICAgdmFyIG1pblRpbWUgPSB0aGlzLmJsb2NrVGltZTtcblx0ICAgICAgICBhdHRhY2sgPSBUb25lLlRpbWUoYXR0YWNrKS50b0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIHJlbGVhc2UgPSBUb25lLlRpbWUocmVsZWFzZSkudG9GcmVxdWVuY3koKTtcblx0ICAgICAgICBhdHRhY2sgPSBNYXRoLm1heChhdHRhY2ssIG1pblRpbWUpO1xuXHQgICAgICAgIHJlbGVhc2UgPSBNYXRoLm1heChyZWxlYXNlLCBtaW5UaW1lKTtcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMuc2V0TWFwKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgaWYgKHZhbCA8PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gYXR0YWNrO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2U7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYXR0YWNrIHRpbWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRm9sbG93ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgYXR0YWNrXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Gb2xsb3dlci5wcm90b3R5cGUsICdhdHRhY2snLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2s7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChhdHRhY2spIHtcblx0ICAgICAgICAgICAgdGhpcy5fYXR0YWNrID0gYXR0YWNrO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRBdHRhY2tSZWxlYXNlKHRoaXMuX2F0dGFjaywgdGhpcy5fcmVsZWFzZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcmVsZWFzZSB0aW1lLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZvbGxvd2VyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIHJlbGVhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZvbGxvd2VyLnByb3RvdHlwZSwgJ3JlbGVhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWxlYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmVsZWFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9yZWxlYXNlID0gcmVsZWFzZTtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QXR0YWNrUmVsZWFzZSh0aGlzLl9hdHRhY2ssIHRoaXMuX3JlbGVhc2UpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEJvcnJvd3MgdGhlIGNvbm5lY3QgbWV0aG9kIGZyb20gU2lnbmFsIHNvIHRoYXQgdGhlIG91dHB1dCBjYW4gYmUgdXNlZFxuXHRcdCAqICBhcyBhIFRvbmUuU2lnbmFsIGNvbnRyb2wgc2lnbmFsLlxuXHRcdCAqICBAZnVuY3Rpb25cblx0XHQgKi9cblx0ICAgIFRvbmUuRm9sbG93ZXIucHJvdG90eXBlLmNvbm5lY3QgPSBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3Q7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Gb2xsb3dlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Gb2xsb3dlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeVZhbHVlcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdWIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3N1YiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYWJzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hYnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX211bHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX211bHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2N1cnZlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Gb2xsb3dlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuU2NhbGVkRW52ZWxvcCBpcyBhbiBlbnZlbG9wZSB3aGljaCBjYW4gYmUgc2NhbGVkXG5cdFx0ICogICAgICAgICB0byBhbnkgcmFuZ2UuIEl0J3MgdXNlZnVsIGZvciBhcHBseWluZyBhbiBlbnZlbG9wZVxuXHRcdCAqICAgICAgICAgdG8gYSBmcmVxdWVuY3kgb3IgYW55IG90aGVyIG5vbi1Ob3JtYWxSYW5nZSBzaWduYWxcblx0XHQgKiAgICAgICAgIHBhcmFtZXRlci5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbnZlbG9wZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFthdHRhY2tdXHR0aGUgYXR0YWNrIHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtkZWNheV1cdHRoZSBkZWNheSB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtzdXN0YWluXSBcdGEgcGVyY2VudGFnZSAoMC0xKSBvZiB0aGUgZnVsbCBhbXBsaXR1ZGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbcmVsZWFzZV1cdHRoZSByZWxlYXNlIHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgc2NhbGVkRW52ID0gbmV3IFRvbmUuU2NhbGVkRW52ZWxvcGUoe1xuXHRcdCAqICBcdFwiYXR0YWNrXCIgOiAwLjIsXG5cdFx0ICogIFx0XCJtaW5cIiA6IDIwMCxcblx0XHQgKiAgXHRcIm1heFwiIDogMjAwMFxuXHRcdCAqICB9KTtcblx0XHQgKiAgc2NhbGVkRW52LmNvbm5lY3Qob3NjaWxsYXRvci5mcmVxdWVuY3kpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZWRFbnZlbG9wZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL2dldCBhbGwgb2YgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ2RlY2F5Jyxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nLFxuXHQgICAgICAgICAgICAncmVsZWFzZSdcblx0ICAgICAgICBdLCBUb25lLkVudmVsb3BlKTtcblx0ICAgICAgICBUb25lLkVudmVsb3BlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlNjYWxlZEVudmVsb3BlLmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgaW5jb21pbmcgc2lnbmFsIGJ5IGFuIGV4cG9uZW50XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuUG93fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9leHAgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlBvdyhvcHRpb25zLmV4cG9uZW50KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgc2lnbmFsIHRvIHRoZSBkZXNpcmVkIHJhbmdlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5TY2FsZShvcHRpb25zLm1pbiwgb3B0aW9ucy5tYXgpO1xuXHQgICAgICAgIHRoaXMuX3NpZy5jaGFpbih0aGlzLl9leHAsIHRoaXMuX3NjYWxlKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNjYWxlZEVudmVsb3BlLCBUb25lLkVudmVsb3BlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVkRW52ZWxvcGUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgJ21heCc6IDEsXG5cdCAgICAgICAgJ2V4cG9uZW50JzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBlbnZlbG9wZSdzIG1pbiBvdXRwdXQgdmFsdWUuIFRoaXMgaXMgdGhlIHZhbHVlIHdoaWNoIGl0XG5cdFx0ICogc3RhcnRzIGF0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlZEVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZWRFbnZlbG9wZS5wcm90b3R5cGUsICdtaW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZS5taW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWluID0gbWluO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGVudmVsb3BlJ3MgbWF4IG91dHB1dCB2YWx1ZS4gSW4gb3RoZXIgd29yZHMsIHRoZSB2YWx1ZVxuXHRcdCAqIGF0IHRoZSBwZWFrIG9mIHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGVkRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtYXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlZEVudmVsb3BlLnByb3RvdHlwZSwgJ21heCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjYWxlLm1heDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1heCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZS5tYXggPSBtYXg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZW52ZWxvcGUncyBleHBvbmVudCB2YWx1ZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZWRFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIGV4cG9uZW50XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZWRFbnZlbG9wZS5wcm90b3R5cGUsICdleHBvbmVudCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cC52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgICAgICB0aGlzLl9leHAudmFsdWUgPSBleHA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2NhbGVkRW52ZWxvcGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVkRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZXhwLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9leHAgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNjYWxlZEVudmVsb3BlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSBpcyBhIFRvbmUuU2NhbGVkRW52ZWxvcGUsIGJ1dCBpbnN0ZWFkIG9mIGBtaW5gIGFuZCBgbWF4YFxuXHRcdCAqICAgICAgICAgaXQncyBnb3QgYSBgYmFzZUZyZXF1ZW5jeWAgYW5kIGBvY3RhdmVzYCBwYXJhbWV0ZXIuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW52ZWxvcGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbYXR0YWNrXVx0dGhlIGF0dGFjayB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbZGVjYXldXHR0aGUgZGVjYXkgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbc3VzdGFpbl0gXHRhIHBlcmNlbnRhZ2UgKDAtMSkgb2YgdGhlIGZ1bGwgYW1wbGl0dWRlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3JlbGVhc2VdXHR0aGUgcmVsZWFzZSB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIGZyZXFFbnYgPSBuZXcgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSh7XG5cdFx0ICogIFx0XCJhdHRhY2tcIiA6IDAuMixcblx0XHQgKiAgXHRcImJhc2VGcmVxdWVuY3lcIiA6IFwiQzJcIixcblx0XHQgKiAgXHRcIm9jdGF2ZXNcIiA6IDRcblx0XHQgKiAgfSk7XG5cdFx0ICogIGZyZXFFbnYuY29ubmVjdChvc2NpbGxhdG9yLmZyZXF1ZW5jeSk7XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeUVudmVsb3BlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdkZWNheScsXG5cdCAgICAgICAgICAgICdzdXN0YWluJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnXG5cdCAgICAgICAgXSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAgICAgVG9uZS5TY2FsZWRFbnZlbG9wZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8vbWVyZ2UgaXQgd2l0aCB0aGUgZnJlcXVlbmN5IGVudmVsb3BlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkZyZXF1ZW5jeUVudmVsb3BlLmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTdG9yZXMgdGhlIG9jdGF2ZSB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICAvL3NldHVwXG5cdCAgICAgICAgdGhpcy5iYXNlRnJlcXVlbmN5ID0gb3B0aW9ucy5iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMub2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZyZXF1ZW5jeUVudmVsb3BlLCBUb25lLkVudmVsb3BlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2Jhc2VGcmVxdWVuY3knOiAyMDAsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiA0LFxuXHQgICAgICAgICdleHBvbmVudCc6IDJcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZW52ZWxvcGUncyBtaW5pbnVtIG91dHB1dCB2YWx1ZS4gVGhpcyBpcyB0aGUgdmFsdWUgd2hpY2ggaXRcblx0XHQgKiBzdGFydHMgYXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiBAbmFtZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5wcm90b3R5cGUsICdiYXNlRnJlcXVlbmN5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGUubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWluKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1pbiA9IHRoaXMudG9GcmVxdWVuY3kobWluKTtcblx0ICAgICAgICAgICAgLy9hbHNvIHVwZGF0ZSB0aGUgb2N0YXZlc1xuXHQgICAgICAgICAgICB0aGlzLm9jdGF2ZXMgPSB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBvY3RhdmVzIGFib3ZlIHRoZSBiYXNlRnJlcXVlbmN5IHRoYXQgdGhlXG5cdFx0ICogZW52ZWxvcGUgd2lsbCBzY2FsZSB0by5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQG5hbWUgb2N0YXZlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUucHJvdG90eXBlLCAnb2N0YXZlcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvY3RhdmVzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvY3RhdmVzO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZS5tYXggPSB0aGlzLmJhc2VGcmVxdWVuY3kgKiBNYXRoLnBvdygyLCBvY3RhdmVzKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBlbnZlbG9wZSdzIGV4cG9uZW50IHZhbHVlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZyZXF1ZW5jeUVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgZXhwb25lbnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZyZXF1ZW5jeUVudmVsb3BlLnByb3RvdHlwZSwgJ2V4cG9uZW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhwLnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V4cC52YWx1ZSA9IGV4cDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GcmVxdWVuY3lFbnZlbG9wZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNjYWxlZEVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgR3JlYXRlclRoYW5aZXJvIG91dHB1dHMgMSB3aGVuIHRoZSBpbnB1dCBpcyBzdHJpY3RseSBncmVhdGVyIHRoYW4gemVyb1xuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBndDAgPSBuZXcgVG9uZS5HcmVhdGVyVGhhblplcm8oKTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDAuMDEpLmNvbm5lY3QoZ3QwKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgZ3QwIGlzIDEuXG5cdFx0ICogc2lnLnZhbHVlID0gMDtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgZ3QwIGlzIDAuXG5cdFx0ICovXG5cdCAgICBUb25lLkdyZWF0ZXJUaGFuWmVybyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aHJlc2ggPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBpZiAodmFsIDw9IDApIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LCAxMjcpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNjYWxlIHRoZSBmaXJzdCB0aHJlc2hvbGRlZCBzaWduYWwgYnkgYSBsYXJnZSB2YWx1ZS5cblx0XHRcdCAqICB0aGlzIHdpbGwgaGVscCB3aXRoIHZhbHVlcyB3aGljaCBhcmUgdmVyeSBjbG9zZSB0byAwXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk11bHRpcGx5KDEwMDAwKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fc2NhbGUuY29ubmVjdCh0aGlzLl90aHJlc2gpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR3JlYXRlclRoYW5aZXJvLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgbWV0aG9kXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkdyZWF0ZXJUaGFuWmVyb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmVhdGVyVGhhblplcm8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aHJlc2guZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RocmVzaCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR3JlYXRlclRoYW5aZXJvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIE91dHB1dCAxIGlmIHRoZSBzaWduYWwgaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSwgb3RoZXJ3aXNlIG91dHB1dHMgMC5cblx0XHQgKiAgICAgICAgICBjYW4gY29tcGFyZSB0d28gc2lnbmFscyBvciBhIHNpZ25hbCBhbmQgYSBudW1iZXIuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbH1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2YWx1ZT0wXSB0aGUgdmFsdWUgdG8gY29tcGFyZSB0byB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGd0ID0gbmV3IFRvbmUuR3JlYXRlclRoYW4oMik7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCg0KS5jb25uZWN0KGd0KTtcblx0XHQgKiAvL291dHB1dCBvZiBndCBpcyBlcXVhbCAxLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmVhdGVyVGhhbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHN1YnRyYWN0IHRoZSBhbW91bnQgZnJvbSB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5pbnB1dFswXSA9IG5ldyBUb25lLlN1YnRyYWN0KHZhbHVlKTtcblx0ICAgICAgICB0aGlzLmlucHV0WzFdID0gdGhpcy5fcGFyYW0uaW5wdXRbMV07XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29tcGFyZSB0aGF0IGFtb3VudCB0byB6ZXJvXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR3JlYXRlclRoYW5aZXJvfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ndHogPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdyZWF0ZXJUaGFuWmVybygpO1xuXHQgICAgICAgIC8vY29ubmVjdFxuXHQgICAgICAgIHRoaXMuX3BhcmFtLmNvbm5lY3QodGhpcy5fZ3R6KTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdyZWF0ZXJUaGFuLCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZSBtZXRob2Rcblx0XHQgKiAgQHJldHVybnMge1RvbmUuR3JlYXRlclRoYW59IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JlYXRlclRoYW4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9ndHouZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2d0eiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR3JlYXRlclRoYW47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5HYXRlIG9ubHkgcGFzc2VzIGEgc2lnbmFsIHRocm91Z2ggd2hlbiB0aGUgaW5jb21pbmdcblx0XHQgKiAgICAgICAgICBzaWduYWwgZXhjZWVkcyBhIHNwZWNpZmllZCB0aHJlc2hvbGQuIFRvIGRvIHRoaXMsIEdhdGUgdXNlc1xuXHRcdCAqICAgICAgICAgIGEgVG9uZS5Gb2xsb3dlciB0byBmb2xsb3cgdGhlIGFtcGxpdHVkZSBvZiB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICAgICAgICAgIEEgY29tbW9uIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgY2xhc3MgaXMgYSBbTm9pc2UgR2F0ZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTm9pc2VfZ2F0ZSkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc3xPYmplY3R9IFt0aHJlc2hvbGRdIFRoZSB0aHJlc2hvbGQgYWJvdmUgd2hpY2ggdGhlIGdhdGUgd2lsbCBvcGVuLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSBhdHRhY2sgVGhlIGZvbGxvd2VyJ3MgYXR0YWNrIHRpbWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gcmVsZWFzZSBUaGUgZm9sbG93ZXIncyByZWxlYXNlIHRpbWVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZ2F0ZSA9IG5ldyBUb25lLkdhdGUoLTMwLCAwLjIsIDAuMykudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgbWljID0gbmV3IFRvbmUuVXNlck1lZGlhKCkuY29ubmVjdChnYXRlKTtcblx0XHQgKiAvL3RoZSBnYXRlIHdpbGwgb25seSBwYXNzIHRocm91Z2ggdGhlIGluY29taW5nXG5cdFx0ICogLy9zaWduYWwgd2hlbiBpdCdzIGxvdWRlciB0aGFuIC0zMGRiXG5cdFx0ICovXG5cdCAgICBUb25lLkdhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndGhyZXNob2xkJyxcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJ1xuXHQgICAgICAgIF0sIFRvbmUuR2F0ZSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRm9sbG93ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZvbGxvd2VyID0gbmV3IFRvbmUuRm9sbG93ZXIob3B0aW9ucy5hdHRhY2ssIG9wdGlvbnMucmVsZWFzZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR3JlYXRlclRoYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2d0ID0gbmV3IFRvbmUuR3JlYXRlclRoYW4oVG9uZS5kYlRvR2FpbihvcHRpb25zLnRocmVzaG9sZCkpO1xuXHQgICAgICAgIC8vdGhlIGNvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAvL3RoZSBjb250cm9sIHNpZ25hbFxuXHQgICAgICAgIHRoaXMuaW5wdXQuY2hhaW4odGhpcy5fZ3QsIHRoaXMuX2ZvbGxvd2VyLCB0aGlzLm91dHB1dC5nYWluKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdhdGUsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HYXRlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdhdHRhY2snOiAwLjEsXG5cdCAgICAgICAgJ3JlbGVhc2UnOiAwLjEsXG5cdCAgICAgICAgJ3RocmVzaG9sZCc6IC00MFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0aHJlc2hvbGQgb2YgdGhlIGdhdGUgaW4gZGVjaWJlbHNcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HYXRlI1xuXHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHQgKiBAbmFtZSB0aHJlc2hvbGRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdhdGUucHJvdG90eXBlLCAndGhyZXNob2xkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5nYWluVG9EYih0aGlzLl9ndC52YWx1ZSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aHJlc2gpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ3QudmFsdWUgPSBUb25lLmRiVG9HYWluKHRocmVzaCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYXR0YWNrIHNwZWVkIG9mIHRoZSBnYXRlXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR2F0ZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBhdHRhY2tcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdhdGUucHJvdG90eXBlLCAnYXR0YWNrJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9sbG93ZXIuYXR0YWNrO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYXR0YWNrVGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9mb2xsb3dlci5hdHRhY2sgPSBhdHRhY2tUaW1lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJlbGVhc2Ugc3BlZWQgb2YgdGhlIGdhdGVcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HYXRlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIHJlbGVhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdhdGUucHJvdG90eXBlLCAncmVsZWFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbGxvd2VyLnJlbGVhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyZWxlYXNlVGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9mb2xsb3dlci5yZWxlYXNlID0gcmVsZWFzZVRpbWU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkdhdGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR2F0ZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2ZvbGxvd2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ndC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZm9sbG93ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2d0ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5HYXRlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgVG9uZS5UaWNrU2lnbmFsIGV4dGVuZHMgVG9uZS5TaWduYWwsIGJ1dCBhZGRzIHRoZSBjYXBhYmlsaXR5XG5cdFx0ICogICAgICAgIHRvIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGVsYXBzZWQgdGlja3MuIGV4cG9uZW50aWFsIGFuZCB0YXJnZXQgY3VydmVzXG5cdFx0ICogICAgICAgIGFyZSBhcHByb3hpbWF0ZWQgd2l0aCBtdWx0aXBsZSBsaW5lYXIgcmFtcHMuXG5cdFx0ICpcblx0XHQgKiAgICAgICAgVGhhbmsgeW91IEJydW5vIERpYXMsIEguIFNvZmlhIFBpbnRvLCBhbmQgRGF2aWQgTS4gTWF0b3MsIGZvciB5b3VyIFtXQUMgcGFwZXJdKGh0dHBzOi8vc21hcnRlY2guZ2F0ZWNoLmVkdS9iaXRzdHJlYW0vaGFuZGxlLzE4NTMvNTQ1ODgvV0FDMjAxNi00OS5wZGYpXG5cdFx0ICogICAgICAgIGRlc2NyaWJpbmcgaW50ZWdyYXRpbmcgdGltaW5nIGZ1bmN0aW9ucyBmb3IgdGVtcG8gY2FsY3VsYXRpb25zLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtOdW1iZXJ9IHZhbHVlIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBzaWduYWxcblx0XHQgKiBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICB2YWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyh2YWx1ZSwgMSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwuY2FsbCh0aGlzLCB7XG5cdCAgICAgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5UaWNrcyxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL2V4dGVuZCB0aGUgbWVtb3J5XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLm1lbW9yeSA9IEluZmluaXR5O1xuXHQgICAgICAgIC8vY2xlYXIgdGhlIGNsb2NrIGZyb20gdGhlIGJlZ2lubmluZ1xuXHQgICAgICAgIHRoaXMuY2FuY2VsU2NoZWR1bGVkVmFsdWVzKDApO1xuXHQgICAgICAgIC8vc2V0IGFuIGluaXRpYWwgZXZlbnRcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlNldFZhbHVlLFxuXHQgICAgICAgICAgICAndGltZSc6IDAsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlXG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaWNrU2lnbmFsLCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiBXcmFwcyBUb25lLlNpZ25hbCBtZXRob2RzIHNvIHRoYXQgdGhleSBhbHNvXG5cdFx0ICogcmVjb3JkIHRoZSB0aWNrcy5cblx0XHQgKiBAcGFyYW0gIHtGdW5jdGlvbn0gbWV0aG9kXG5cdFx0ICogQHJldHVybiB7RnVuY3Rpb259XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIGZ1bmN0aW9uIF93cmFwU2NoZWR1bGVNZXRob2RzKG1ldGhvZCkge1xuXHQgICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIHRpbWUpIHtcblx0ICAgICAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgICAgICBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzRXZlbnQgPSB0aGlzLl9ldmVudHMucHJldmlvdXNFdmVudChldmVudCk7XG5cdCAgICAgICAgICAgIHZhciB0aWNrc1VudGlsVGltZSA9IHRoaXMuX2dldFRpY2tzVW50aWxFdmVudChwcmV2aW91c0V2ZW50LCB0aW1lKTtcblx0ICAgICAgICAgICAgZXZlbnQudGlja3MgPSBNYXRoLm1heCh0aWNrc1VudGlsVGltZSwgMCk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICB9XG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lID0gX3dyYXBTY2hlZHVsZU1ldGhvZHMoVG9uZS5TaWduYWwucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lKTtcblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUgPSBfd3JhcFNjaGVkdWxlTWV0aG9kcyhUb25lLlNpZ25hbC5wcm90b3R5cGUubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IGV4cG9uZW50aWFsbHkgYXBwcm9hY2hpbmcgdGhlIHRhcmdldCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZSB3aXRoXG5cdFx0ICogIGEgcmF0ZSBoYXZpbmcgdGhlIGdpdmVuIHRpbWUgY29uc3RhbnQuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdGltZUNvbnN0YW50XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuc2V0VGFyZ2V0QXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lLCBjb25zdGFudCkge1xuXHQgICAgICAgIC8vYXByb3hpbWF0ZSBpdCB3aXRoIG11bHRpcGxlIGxpbmVhciByYW1wc1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLnNldFJhbXBQb2ludCh0aW1lKTtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgLy9zdGFydCBmcm9tIHByZXZpb3VzbHkgc2NoZWR1bGVkIHZhbHVlXG5cdCAgICAgICAgdmFyIHByZXZFdmVudCA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgdmFyIHNlZ21lbnRzID0gTWF0aC5yb3VuZChNYXRoLm1heCgxIC8gY29uc3RhbnQsIDEpKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBzZWdtZW50czsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBzZWdUaW1lID0gY29uc3RhbnQgKiBpICsgdGltZTtcblx0ICAgICAgICAgICAgdmFyIHJhbXBWYWwgPSB0aGlzLl9leHBvbmVudGlhbEFwcHJvYWNoKHByZXZFdmVudC50aW1lLCBwcmV2RXZlbnQudmFsdWUsIHZhbHVlLCBjb25zdGFudCwgc2VnVGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodGhpcy5fdG9Vbml0cyhyYW1wVmFsKSwgc2VnVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYW4gZXhwb25lbnRpYWwgY29udGludW91cyBjaGFuZ2UgaW4gcGFyYW1ldGVyIHZhbHVlIGZyb21cblx0XHQgKiAgdGhlIHByZXZpb3VzIHNjaGVkdWxlZCBwYXJhbWV0ZXIgdmFsdWUgdG8gdGhlIGdpdmVuIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGVuZFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGlja1NpZ25hbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgLy9hcHJveGltYXRlIGl0IHdpdGggbXVsdGlwbGUgbGluZWFyIHJhbXBzXG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICAvL3N0YXJ0IGZyb20gcHJldmlvdXNseSBzY2hlZHVsZWQgdmFsdWVcblx0ICAgICAgICB2YXIgcHJldkV2ZW50ID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICBpZiAocHJldkV2ZW50ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHByZXZFdmVudCA9IHtcblx0ICAgICAgICAgICAgICAgICd2YWx1ZSc6IHRoaXMuX2luaXRpYWxWYWx1ZSxcblx0ICAgICAgICAgICAgICAgICd0aW1lJzogMFxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2FwcHJveCAxMCBzZWdtZW50cyBwZXIgc2Vjb25kXG5cdCAgICAgICAgdmFyIHNlZ21lbnRzID0gTWF0aC5yb3VuZChNYXRoLm1heCgodGltZSAtIHByZXZFdmVudC50aW1lKSAqIDEwLCAxKSk7XG5cdCAgICAgICAgdmFyIHNlZ21lbnREdXIgPSAodGltZSAtIHByZXZFdmVudC50aW1lKSAvIHNlZ21lbnRzO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IHNlZ21lbnRzOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHNlZ1RpbWUgPSBzZWdtZW50RHVyICogaSArIHByZXZFdmVudC50aW1lO1xuXHQgICAgICAgICAgICB2YXIgcmFtcFZhbCA9IHRoaXMuX2V4cG9uZW50aWFsSW50ZXJwb2xhdGUocHJldkV2ZW50LnRpbWUsIHByZXZFdmVudC52YWx1ZSwgdGltZSwgdmFsdWUsIHNlZ1RpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHRoaXMuX3RvVW5pdHMocmFtcFZhbCksIHNlZ1RpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm5zIHRoZSB0aWNrIHZhbHVlIGF0IHRoZSB0aW1lLiBUYWtlcyBpbnRvIGFjY291bnRcblx0XHQgKiBhbnkgYXV0b21hdGlvbiBjdXJ2ZXMgc2NoZWR1bGVkIG9uIHRoZSBzaWduYWwuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIGdldCB0aGUgdGljayBjb3VudCBhdFxuXHRcdCAqIEByZXR1cm4ge1RpY2tzfSAgICAgIFRoZSBudW1iZXIgb2YgdGlja3Mgd2hpY2ggaGF2ZSBlbGFwc2VkIGF0IHRoZSB0aW1lXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIGFueSBhdXRvbWF0aW9ucy5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuX2dldFRpY2tzVW50aWxFdmVudCA9IGZ1bmN0aW9uIChldmVudCwgdGltZSkge1xuXHQgICAgICAgIGlmIChldmVudCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICBldmVudCA9IHtcblx0ICAgICAgICAgICAgICAgICd0aWNrcyc6IDAsXG5cdCAgICAgICAgICAgICAgICAndGltZSc6IDBcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNVbmRlZihldmVudC50aWNrcykpIHtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzRXZlbnQgPSB0aGlzLl9ldmVudHMucHJldmlvdXNFdmVudChldmVudCk7XG5cdCAgICAgICAgICAgIGV2ZW50LnRpY2tzID0gdGhpcy5fZ2V0VGlja3NVbnRpbEV2ZW50KHByZXZpb3VzRXZlbnQsIGV2ZW50LnRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgdmFsMCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUoZXZlbnQudGltZSk7XG5cdCAgICAgICAgdmFyIHZhbDEgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIC8vaWYgaXQncyByaWdodCBvbiB0aGUgbGluZSwgdGFrZSB0aGUgcHJldmlvdXMgdmFsdWVcblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmdldCh0aW1lKS50aW1lID09PSB0aW1lICYmIHRoaXMuX2V2ZW50cy5nZXQodGltZSkudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5TZXRWYWx1ZSkge1xuXHQgICAgICAgICAgICB2YWwxID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lIC0gdGhpcy5zYW1wbGVUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIDAuNSAqICh0aW1lIC0gZXZlbnQudGltZSkgKiAodmFsMCArIHZhbDEpICsgZXZlbnQudGlja3M7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJucyB0aGUgdGljayB2YWx1ZSBhdCB0aGUgdGltZS4gVGFrZXMgaW50byBhY2NvdW50XG5cdFx0ICogYW55IGF1dG9tYXRpb24gY3VydmVzIHNjaGVkdWxlZCBvbiB0aGUgc2lnbmFsLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgVGhlIHRpbWUgdG8gZ2V0IHRoZSB0aWNrIGNvdW50IGF0XG5cdFx0ICogQHJldHVybiB7VGlja3N9ICAgICAgVGhlIG51bWJlciBvZiB0aWNrcyB3aGljaCBoYXZlIGVsYXBzZWQgYXQgdGhlIHRpbWVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gYW55IGF1dG9tYXRpb25zLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5nZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBldmVudCA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuX2dldFRpY2tzVW50aWxFdmVudChldmVudCwgdGltZSksIDApO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgZWxhcHNlZCB0aW1lIG9mIHRoZSBudW1iZXIgb2YgdGlja3MgZnJvbSB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSB7VGlja3N9IHRpY2tzIFRoZSBudW1iZXIgb2YgdGlja3MgdG8gY2FsY3VsYXRlXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSBUaGUgdGltZSB0byBnZXQgdGhlIG5leHQgdGljayBmcm9tXG5cdFx0ICogQHJldHVybiB7U2Vjb25kc30gVGhlIGR1cmF0aW9uIG9mIHRoZSBudW1iZXIgb2YgdGlja3MgZnJvbSB0aGUgZ2l2ZW4gdGltZSBpbiBzZWNvbmRzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLmdldER1cmF0aW9uT2ZUaWNrcyA9IGZ1bmN0aW9uICh0aWNrcywgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgY3VycmVudFRpY2sgPSB0aGlzLmdldFRpY2tzQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmdldFRpbWVPZlRpY2soY3VycmVudFRpY2sgKyB0aWNrcykgLSB0aW1lO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEdpdmVuIGEgdGljaywgcmV0dXJucyB0aGUgdGltZSB0aGF0IHRpY2sgb2NjdXJzIGF0LlxuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrXG5cdFx0ICogQHJldHVybiB7VGltZX0gICAgICBUaGUgdGltZSB0aGF0IHRoZSB0aWNrIG9jY3Vycy5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuZ2V0VGltZU9mVGljayA9IGZ1bmN0aW9uICh0aWNrKSB7XG5cdCAgICAgICAgdmFyIGJlZm9yZSA9IHRoaXMuX2V2ZW50cy5nZXQodGljaywgJ3RpY2tzJyk7XG5cdCAgICAgICAgdmFyIGFmdGVyID0gdGhpcy5fZXZlbnRzLmdldEFmdGVyKHRpY2ssICd0aWNrcycpO1xuXHQgICAgICAgIGlmIChiZWZvcmUgJiYgYmVmb3JlLnRpY2tzID09PSB0aWNrKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBiZWZvcmUudGltZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGJlZm9yZSAmJiBhZnRlciAmJiBhZnRlci50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkxpbmVhciAmJiBiZWZvcmUudmFsdWUgIT09IGFmdGVyLnZhbHVlKSB7XG5cdCAgICAgICAgICAgIHZhciB2YWwwID0gdGhpcy5nZXRWYWx1ZUF0VGltZShiZWZvcmUudGltZSk7XG5cdCAgICAgICAgICAgIHZhciB2YWwxID0gdGhpcy5nZXRWYWx1ZUF0VGltZShhZnRlci50aW1lKTtcblx0ICAgICAgICAgICAgdmFyIGRlbHRhID0gKHZhbDEgLSB2YWwwKSAvIChhZnRlci50aW1lIC0gYmVmb3JlLnRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgayA9IE1hdGguc3FydChNYXRoLnBvdyh2YWwwLCAyKSAtIDIgKiBkZWx0YSAqIChiZWZvcmUudGlja3MgLSB0aWNrKSk7XG5cdCAgICAgICAgICAgIHZhciBzb2wxID0gKC12YWwwICsgaykgLyBkZWx0YTtcblx0ICAgICAgICAgICAgdmFyIHNvbDIgPSAoLXZhbDAgLSBrKSAvIGRlbHRhO1xuXHQgICAgICAgICAgICByZXR1cm4gKHNvbDEgPiAwID8gc29sMSA6IHNvbDIpICsgYmVmb3JlLnRpbWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChiZWZvcmUpIHtcblx0ICAgICAgICAgICAgaWYgKGJlZm9yZS52YWx1ZSA9PT0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGJlZm9yZS50aW1lICsgKHRpY2sgLSBiZWZvcmUudGlja3MpIC8gYmVmb3JlLnZhbHVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRpY2sgLyB0aGlzLl9pbml0aWFsVmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENvbnZlcnQgc29tZSBudW1iZXIgb2YgdGlja3MgdGhlaXIgdGhlIGR1cmF0aW9uIGluIHNlY29uZHMgYWNjb3VudGluZ1xuXHRcdCAqIGZvciBhbnkgYXV0b21hdGlvbiBjdXJ2ZXMgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tzIFRoZSBudW1iZXIgb2YgdGlja3MgdG8gY29udmVydCB0byBzZWNvbmRzLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IFt3aGVuPW5vd10gIFdoZW4gYWxvbmcgdGhlIGF1dG9tYXRpb24gdGltZWxpbmUgdG8gY29udmVydCB0aGUgdGlja3MuXG5cdFx0ICogQHJldHVybiB7VG9uZS5UaW1lfSAgICAgICBUaGUgZHVyYXRpb24gaW4gc2Vjb25kcyBvZiB0aGUgdGlja3MuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLnRpY2tzVG9UaW1lID0gZnVuY3Rpb24gKHRpY2tzLCB3aGVuKSB7XG5cdCAgICAgICAgd2hlbiA9IHRoaXMudG9TZWNvbmRzKHdoZW4pO1xuXHQgICAgICAgIHJldHVybiBuZXcgVG9uZS5UaW1lKHRoaXMuZ2V0RHVyYXRpb25PZlRpY2tzKHRpY2tzLCB3aGVuKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGludmVyc2Ugb2YgW3RpY2tzVG9UaW1lXSgjdGlja3N0b3RpbWUpLiBDb252ZXJ0IGEgZHVyYXRpb24gaW5cblx0XHQgKiBzZWNvbmRzIHRvIHRoZSBjb3JyZXNwb25kaW5nIG51bWJlciBvZiB0aWNrcyBhY2NvdW50aW5nIGZvciBhbnlcblx0XHQgKiBhdXRvbWF0aW9uIGN1cnZlcyBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSBkdXJhdGlvbiBUaGUgdGltZSBpbnRlcnZhbCB0byBjb252ZXJ0IHRvIHRpY2tzLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IFt3aGVuPW5vd10gICAgIFdoZW4gYWxvbmcgdGhlIGF1dG9tYXRpb24gdGltZWxpbmUgdG8gY29udmVydCB0aGUgdGlja3MuXG5cdFx0ICogQHJldHVybiB7VG9uZS5UaWNrc30gICAgICAgICAgVGhlIGR1cmF0aW9uIGluIHRpY2tzLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS50aW1lVG9UaWNrcyA9IGZ1bmN0aW9uIChkdXJhdGlvbiwgd2hlbikge1xuXHQgICAgICAgIHdoZW4gPSB0aGlzLnRvU2Vjb25kcyh3aGVuKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICB2YXIgc3RhcnRUaWNrcyA9IHRoaXMuZ2V0VGlja3NBdFRpbWUod2hlbik7XG5cdCAgICAgICAgdmFyIGVuZFRpY2tzID0gdGhpcy5nZXRUaWNrc0F0VGltZSh3aGVuICsgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiBuZXcgVG9uZS5UaWNrcyhlbmRUaWNrcyAtIHN0YXJ0VGlja3MpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpY2tTaWduYWw7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQSBUaW1lbGluZSBTdGF0ZS4gUHJvdmlkZXMgdGhlIG1ldGhvZHM6IDxjb2RlPnNldFN0YXRlQXRUaW1lKFwic3RhdGVcIiwgdGltZSk8L2NvZGU+XG5cdFx0ICogICAgICAgICAgYW5kIDxjb2RlPmdldFZhbHVlQXRUaW1lKHRpbWUpPC9jb2RlPi5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UaW1lbGluZX1cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IGluaXRpYWwgVGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIFRpbWVsaW5lU3RhdGUuIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byA8Y29kZT51bmRlZmluZWQ8L2NvZGU+XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lU3RhdGUgPSBmdW5jdGlvbiAoaW5pdGlhbCkge1xuXHQgICAgICAgIFRvbmUuVGltZWxpbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgaW5pdGlhbCBzdGF0ZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2luaXRpYWwgPSBpbml0aWFsO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGltZWxpbmVTdGF0ZSwgVG9uZS5UaW1lbGluZSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgc2NoZWR1bGVkIHN0YXRlIHNjaGVkdWxlZCBiZWZvcmUgb3IgYXRcblx0XHQgKiAgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJuICB7U3RyaW5nfSAgVGhlIG5hbWUgb2YgdGhlIHN0YXRlIGlucHV0IGluIHNldFN0YXRlQXRUaW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZVN0YXRlLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5nZXQodGltZSk7XG5cdCAgICAgICAgaWYgKGV2ZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBldmVudC5zdGF0ZTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5pdGlhbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIHN0YXRlIHRvIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgc3RhdGUgVGhlIG5hbWUgb2YgdGhlIHN0YXRlIHRvIHNldC5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lU3RhdGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmVTdGF0ZS5wcm90b3R5cGUuc2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAoc3RhdGUsIHRpbWUpIHtcblx0ICAgICAgICAvL2FsbCBzdGF0ZSBjaGFuZ2VzIG5lZWQgdG8gYmUgPj0gdGhlIHByZXZpb3VzIHN0YXRlIHRpbWVcblx0ICAgICAgICAvL1RPRE8gdGhyb3cgZXJyb3IgaWYgdGltZSA8IHRoZSBwcmV2aW91cyBldmVudCB0aW1lXG5cdCAgICAgICAgdGhpcy5hZGQoe1xuXHQgICAgICAgICAgICAnc3RhdGUnOiBzdGF0ZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiB0aW1lXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZXZlbnQgYmVmb3JlIHRoZSB0aW1lIHdpdGggdGhlIGdpdmVuIHN0YXRlXG5cdFx0ICogIEBwYXJhbSB7VG9uZS5TdGF0ZX0gc3RhdGUgVGhlIHN0YXRlIHRvIGxvb2sgZm9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBXaGVuIHRvIGNoZWNrIGJlZm9yZVx0XHRcdFxuXHRcdCAqICBAcmV0dXJuICB7T2JqZWN0fSAgVGhlIGV2ZW50IHdpdGggdGhlIGdpdmVuIHN0YXRlIGJlZm9yZSB0aGUgdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZVN0YXRlLnByb3RvdHlwZS5nZXRMYXN0U3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSBpbmRleDsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fdGltZWxpbmVbaV07XG5cdCAgICAgICAgICAgIGlmIChldmVudC5zdGF0ZSA9PT0gc3RhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBldmVudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBldmVudCBhZnRlciB0aGUgdGltZSB3aXRoIHRoZSBnaXZlbiBzdGF0ZVxuXHRcdCAqICBAcGFyYW0ge1RvbmUuU3RhdGV9IHN0YXRlIFRoZSBzdGF0ZSB0byBsb29rIGZvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgV2hlbiB0byBjaGVjayBmcm9tXG5cdFx0ICogIEByZXR1cm4gIHtPYmplY3R9ICBUaGUgZXZlbnQgd2l0aCB0aGUgZ2l2ZW4gc3RhdGUgYWZ0ZXIgdGhlIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmVTdGF0ZS5wcm90b3R5cGUuZ2V0TmV4dFN0YXRlID0gZnVuY3Rpb24gKHN0YXRlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSBpbmRleDsgaSA8IHRoaXMuX3RpbWVsaW5lLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl90aW1lbGluZVtpXTtcblx0ICAgICAgICAgICAgICAgIGlmIChldmVudC5zdGF0ZSA9PT0gc3RhdGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGltZWxpbmVTdGF0ZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBVc2VzIFtUb25lLlRpY2tTaWduYWxdKFRpY2tTaWduYWwpIHRvIHRyYWNrIGVsYXBzZWQgdGlja3Mgd2l0aFxuXHRcdCAqICBcdFx0Y29tcGxleCBhdXRvbWF0aW9uIGN1cnZlcy5cblx0XHQgKlxuXHRcdCAqIFx0QGNvbnN0cnVjdG9yXG5cdCAgICAgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgaW5pdGlhbCBmcmVxdWVuY3kgdGhhdCB0aGUgc2lnbmFsIHRpY2tzIGF0XG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZnJlcXVlbmN5J10sIFRvbmUuVGlja1NvdXJjZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gc2hvdWxkIGJlIGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUgIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5UaWNrU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZnJlcXVlbmN5Jyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHN0YXRlIHRpbWVsaW5lXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVGltZWxpbmVTdGF0ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBuZXcgVG9uZS5UaW1lbGluZVN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBvZmZzZXQgdmFsdWVzIG9mIHRoZSB0aWNrc1xuXHRcdFx0ICogQHR5cGUge1RvbmUuVGltZWxpbmV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGlja09mZnNldCA9IG5ldyBUb25lLlRpbWVsaW5lKCk7XG5cdCAgICAgICAgLy9hZGQgdGhlIGZpcnN0IGV2ZW50XG5cdCAgICAgICAgdGhpcy5zZXRUaWNrc0F0VGltZSgwLCAwKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpY2tTb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UuZGVmYXVsdHMgPSB7ICdmcmVxdWVuY3knOiAxIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiLCBcInN0b3BwZWRcIiBvciBcInBhdXNlZFwiLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRpY2tTb3VyY2UjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGNsb2NrIGF0IHRoZSBnaXZlbiB0aW1lLiBPcHRpb25hbGx5IHBhc3MgaW4gYW4gb2Zmc2V0XG5cdFx0ICogIG9mIHdoZXJlIHRvIHN0YXJ0IHRoZSB0aWNrIGNvdW50ZXIgZnJvbS5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICB0aW1lICAgIFRoZSB0aW1lIHRoZSBjbG9jayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtUaWNrcz0wfSBvZmZzZXQgVGhlIG51bWJlciBvZiB0aWNrcyB0byBzdGFydCB0aGUgc291cmNlIGF0XG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlRpY2tTb3VyY2V9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0YXJ0ZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQob2Zmc2V0KSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zZXRUaWNrc0F0VGltZShvZmZzZXQsIHRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBjbG9jay4gU3RvcHBpbmcgdGhlIGNsb2NrIHJlc2V0cyB0aGUgdGljayBjb3VudGVyIHRvIDAuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSBjbG9jayBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGlja1NvdXJjZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGNsb2NrLnN0b3AoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIC8vY2FuY2VsIHRoZSBwcmV2aW91cyBzdG9wXG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQudGltZSA+IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQuY2FuY2VsKGV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKGV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0VGlja3NBdFRpbWUoMCwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBhdXNlIHRoZSBjbG9jay4gUGF1c2luZyBkb2VzIG5vdCByZXNldCB0aGUgdGljayBjb3VudGVyLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgY2xvY2sgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlBhdXNlZCwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgc3RhcnQvc3RvcC9wYXVzZSBhbmQgc2V0VGlja0F0VGltZSBldmVudHMgc2NoZWR1bGVkIGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0byBjbGVhciB0aGUgZXZlbnRzIGFmdGVyXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgZWxhcHNlZCB0aWNrcyBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSB0aWNrIHZhbHVlXG5cdFx0ICogQHJldHVybiB7VGlja3N9ICAgICBUaGUgbnVtYmVyIG9mIHRpY2tzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmdldFRpY2tzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIHN0b3BFdmVudCA9IHRoaXMuX3N0YXRlLmdldExhc3RTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgIC8vdGhpcyBldmVudCBhbGxvd3MgZm9yRWFjaEJldHdlZW4gdG8gaXRlcmF0ZSB1bnRpbCB0aGUgY3VycmVudCB0aW1lXG5cdCAgICAgICAgdmFyIHRtcEV2ZW50ID0ge1xuXHQgICAgICAgICAgICBzdGF0ZTogVG9uZS5TdGF0ZS5QYXVzZWQsXG5cdCAgICAgICAgICAgIHRpbWU6IHRpbWVcblx0ICAgICAgICB9O1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmFkZCh0bXBFdmVudCk7XG5cdCAgICAgICAgLy9rZWVwIHRyYWNrIG9mIHRoZSBwcmV2aW91cyBvZmZzZXQgZXZlbnRcblx0ICAgICAgICB2YXIgbGFzdFN0YXRlID0gc3RvcEV2ZW50O1xuXHQgICAgICAgIHZhciBlbGFwc2VkVGlja3MgPSAwO1xuXHQgICAgICAgIC8vaXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgZXZlbnRzIHNpbmNlIHRoZSBsYXN0IHN0b3Bcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoQmV0d2VlbihzdG9wRXZlbnQudGltZSwgdGltZSArIHRoaXMuc2FtcGxlVGltZSwgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgICAgdmFyIHBlcmlvZFN0YXJ0VGltZSA9IGxhc3RTdGF0ZS50aW1lO1xuXHQgICAgICAgICAgICAvL2lmIHRoZXJlIGlzIGFuIG9mZnNldCBldmVudCBpbiB0aGlzIHBlcmlvZCB1c2UgdGhhdFxuXHQgICAgICAgICAgICB2YXIgb2Zmc2V0RXZlbnQgPSB0aGlzLl90aWNrT2Zmc2V0LmdldChlLnRpbWUpO1xuXHQgICAgICAgICAgICBpZiAob2Zmc2V0RXZlbnQudGltZSA+PSBsYXN0U3RhdGUudGltZSkge1xuXHQgICAgICAgICAgICAgICAgZWxhcHNlZFRpY2tzID0gb2Zmc2V0RXZlbnQudGlja3M7XG5cdCAgICAgICAgICAgICAgICBwZXJpb2RTdGFydFRpbWUgPSBvZmZzZXRFdmVudC50aW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChsYXN0U3RhdGUuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCAmJiBlLnN0YXRlICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIGVsYXBzZWRUaWNrcyArPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaWNrc0F0VGltZShlLnRpbWUpIC0gdGhpcy5mcmVxdWVuY3kuZ2V0VGlja3NBdFRpbWUocGVyaW9kU3RhcnRUaW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBsYXN0U3RhdGUgPSBlO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgLy9yZW1vdmUgdGhlIHRlbXBvcmFyeSBldmVudFxuXHQgICAgICAgIHRoaXMuX3N0YXRlLnJlbW92ZSh0bXBFdmVudCk7XG5cdCAgICAgICAgLy9yZXR1cm4gdGhlIHRpY2tzXG5cdCAgICAgICAgcmV0dXJuIGVsYXBzZWRUaWNrcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiB0aW1lcyB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQuIFN0YXJ0cyBjb3VudGluZyBhdCAwXG5cdFx0ICogIGFuZCBpbmNyZW1lbnRzIGFmdGVyIHRoZSBjYWxsYmFjayB3YXMgaW52b2tlZC4gUmV0dXJucyAtMSB3aGVuIHN0b3BwZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRpY2tTb3VyY2UjXG5cdFx0ICogIEBuYW1lIHRpY2tzXG5cdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLCAndGlja3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRpY2tzQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodCkge1xuXHQgICAgICAgICAgICB0aGlzLnNldFRpY2tzQXRUaW1lKHQsIHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0aW1lIHNpbmNlIHRpY2tzPTAgdGhhdCB0aGUgVGlja1NvdXJjZSBoYXMgYmVlbiBydW5uaW5nLiBBY2NvdW50c1xuXHRcdCAqICBmb3IgdGVtcG8gY3VydmVzXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRpY2tTb3VyY2UjXG5cdFx0ICogIEBuYW1lIHNlY29uZHNcblx0XHQgKiAgQHR5cGUge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZSwgJ3NlY29uZHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFNlY29uZHNBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB2YXIgdGlja3MgPSB0aGlzLmZyZXF1ZW5jeS50aW1lVG9UaWNrcyhzLCBub3cpO1xuXHQgICAgICAgICAgICB0aGlzLnNldFRpY2tzQXRUaW1lKHRpY2tzLCBub3cpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZWxhcHNlZCBzZWNvbmRzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgV2hlbiB0byBnZXQgdGhlIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc30gIFRoZSBudW1iZXIgb2YgZWxhcHNlZCBzZWNvbmRzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmdldFNlY29uZHNBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgc3RvcEV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0TGFzdFN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGltZSk7XG5cdCAgICAgICAgLy90aGlzIGV2ZW50IGFsbG93cyBmb3JFYWNoQmV0d2VlbiB0byBpdGVyYXRlIHVudGlsIHRoZSBjdXJyZW50IHRpbWVcblx0ICAgICAgICB2YXIgdG1wRXZlbnQgPSB7XG5cdCAgICAgICAgICAgIHN0YXRlOiBUb25lLlN0YXRlLlBhdXNlZCxcblx0ICAgICAgICAgICAgdGltZTogdGltZVxuXHQgICAgICAgIH07XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuYWRkKHRtcEV2ZW50KTtcblx0ICAgICAgICAvL2tlZXAgdHJhY2sgb2YgdGhlIHByZXZpb3VzIG9mZnNldCBldmVudFxuXHQgICAgICAgIHZhciBsYXN0U3RhdGUgPSBzdG9wRXZlbnQ7XG5cdCAgICAgICAgdmFyIGVsYXBzZWRTZWNvbmRzID0gMDtcblx0ICAgICAgICAvL2l0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIGV2ZW50cyBzaW5jZSB0aGUgbGFzdCBzdG9wXG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEJldHdlZW4oc3RvcEV2ZW50LnRpbWUsIHRpbWUgKyB0aGlzLnNhbXBsZVRpbWUsIGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgIHZhciBwZXJpb2RTdGFydFRpbWUgPSBsYXN0U3RhdGUudGltZTtcblx0ICAgICAgICAgICAgLy9pZiB0aGVyZSBpcyBhbiBvZmZzZXQgZXZlbnQgaW4gdGhpcyBwZXJpb2QgdXNlIHRoYXRcblx0ICAgICAgICAgICAgdmFyIG9mZnNldEV2ZW50ID0gdGhpcy5fdGlja09mZnNldC5nZXQoZS50aW1lKTtcblx0ICAgICAgICAgICAgaWYgKG9mZnNldEV2ZW50LnRpbWUgPj0gbGFzdFN0YXRlLnRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGVsYXBzZWRTZWNvbmRzID0gb2Zmc2V0RXZlbnQuc2Vjb25kcztcblx0ICAgICAgICAgICAgICAgIHBlcmlvZFN0YXJ0VGltZSA9IG9mZnNldEV2ZW50LnRpbWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKGxhc3RTdGF0ZS5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIGUuc3RhdGUgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgZWxhcHNlZFNlY29uZHMgKz0gZS50aW1lIC0gcGVyaW9kU3RhcnRUaW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGxhc3RTdGF0ZSA9IGU7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICAvL3JlbW92ZSB0aGUgdGVtcG9yYXJ5IGV2ZW50XG5cdCAgICAgICAgdGhpcy5fc3RhdGUucmVtb3ZlKHRtcEV2ZW50KTtcblx0ICAgICAgICAvL3JldHVybiB0aGUgdGlja3Ncblx0ICAgICAgICByZXR1cm4gZWxhcHNlZFNlY29uZHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU2V0IHRoZSBjbG9jaydzIHRpY2tzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrcyBUaGUgdGljayB2YWx1ZSB0byBzZXRcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBXaGVuIHRvIHNldCB0aGUgdGljayB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVGlja1NvdXJjZX0gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5zZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aWNrcywgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmFkZCh7XG5cdCAgICAgICAgICAgICd0aW1lJzogdGltZSxcblx0ICAgICAgICAgICAgJ3RpY2tzJzogdGlja3MsXG5cdCAgICAgICAgICAgICdzZWNvbmRzJzogdGhpcy5mcmVxdWVuY3kuZ2V0RHVyYXRpb25PZlRpY2tzKHRpY2tzLCB0aW1lKVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBzY2hlZHVsZWQgc3RhdGUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybiAge1N0cmluZ30gIFRoZSBuYW1lIG9mIHRoZSBzdGF0ZSBpbnB1dCBpbiBzZXRTdGF0ZUF0VGltZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzb3VyY2Uuc3RhcnQoXCIrMC4xXCIpO1xuXHRcdCAqIHNvdXJjZS5nZXRTdGF0ZUF0VGltZShcIiswLjFcIik7IC8vcmV0dXJucyBcInN0YXJ0ZWRcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5nZXRTdGF0ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIHRpbWUgb2YgdGhlIGdpdmVuIHRpY2suIFRoZSBzZWNvbmQgYXJndW1lbnRcblx0XHQgKiBpcyB3aGVuIHRvIHRlc3QgYmVmb3JlLiBTaW5jZSB0aWNrcyBjYW4gYmUgc2V0ICh3aXRoIHNldFRpY2tzQXRUaW1lKVxuXHRcdCAqIHRoZXJlIG1heSBiZSBtdWx0aXBsZSB0aW1lcyBmb3IgYSBnaXZlbiB0aWNrIHZhbHVlLiBcblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja3MgVGhlIHRpY2sgbnVtYmVyLlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSBiZWZvcmUgV2hlbiB0byBtZWFzdXJlIHRoZSB0aWNrIHZhbHVlIGZyb20uIFxuXHRcdCAqIEByZXR1cm4ge1RpbWV9ICAgICAgIFRoZSB0aW1lIG9mIHRoZSB0aWNrXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmdldFRpbWVPZlRpY2sgPSBmdW5jdGlvbiAodGljaywgYmVmb3JlKSB7XG5cdCAgICAgICAgYmVmb3JlID0gVG9uZS5kZWZhdWx0QXJnKGJlZm9yZSwgdGhpcy5ub3coKSk7XG5cdCAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX3RpY2tPZmZzZXQuZ2V0KGJlZm9yZSk7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KGJlZm9yZSk7XG5cdCAgICAgICAgdmFyIHN0YXJ0VGltZSA9IE1hdGgubWF4KG9mZnNldC50aW1lLCBldmVudC50aW1lKTtcblx0ICAgICAgICB2YXIgYWJzb2x1dGVUaWNrcyA9IHRoaXMuZnJlcXVlbmN5LmdldFRpY2tzQXRUaW1lKHN0YXJ0VGltZSkgKyB0aWNrIC0gb2Zmc2V0LnRpY2tzO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmZyZXF1ZW5jeS5nZXRUaW1lT2ZUaWNrKGFic29sdXRlVGlja3MpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnZva2UgdGhlIGNhbGxiYWNrIGV2ZW50IGF0IGFsbCBzY2hlZHVsZWQgdGlja3MgYmV0d2VlbiB0aGUgXG5cdFx0ICogIHN0YXJ0IHRpbWUgYW5kIHRoZSBlbmQgdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgICBzdGFydFRpbWUgIFRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlYXJjaCByYW5nZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgICBlbmRUaW1lICAgIFRoZSBlbmQgb2YgdGhlIHNlYXJjaCByYW5nZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbjxUaW1lLFRpY2tzPn0gIGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGVhY2ggdGlja1xuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5UaWNrU291cmNlfSAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmZvckVhY2hUaWNrQmV0d2VlbiA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9vbmx5IGl0ZXJhdGUgdGhyb3VnaCB0aGUgc2VjdGlvbnMgd2hlcmUgaXQgaXMgXCJzdGFydGVkXCJcblx0ICAgICAgICB2YXIgbGFzdFN0YXRlRXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXQoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoQmV0d2VlbihzdGFydFRpbWUsIGVuZFRpbWUsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBpZiAobGFzdFN0YXRlRXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCAmJiBldmVudC5zdGF0ZSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmZvckVhY2hUaWNrQmV0d2VlbihNYXRoLm1heChsYXN0U3RhdGVFdmVudC50aW1lLCBzdGFydFRpbWUpLCBldmVudC50aW1lIC0gdGhpcy5zYW1wbGVUaW1lLCBjYWxsYmFjayk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgbGFzdFN0YXRlRXZlbnQgPSBldmVudDtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IE1hdGgubWF4KGxhc3RTdGF0ZUV2ZW50LnRpbWUsIHN0YXJ0VGltZSk7XG5cdCAgICAgICAgaWYgKGxhc3RTdGF0ZUV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgdGhpcy5fc3RhdGUpIHtcblx0ICAgICAgICAgICAgLy9maWd1cmUgb3V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGZyZXF1ZW5jeSB0aWNrcyBhbmQgdGhlIFxuXHQgICAgICAgICAgICB2YXIgc3RhcnRUaWNrcyA9IHRoaXMuZnJlcXVlbmN5LmdldFRpY2tzQXRUaW1lKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgICAgIHZhciB0aWNrc0F0U3RhcnQgPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaWNrc0F0VGltZShsYXN0U3RhdGVFdmVudC50aW1lKTtcblx0ICAgICAgICAgICAgdmFyIGRpZmYgPSBzdGFydFRpY2tzIC0gdGlja3NBdFN0YXJ0O1xuXHQgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gZGlmZiAlIDE7XG5cdCAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IDApIHtcblx0ICAgICAgICAgICAgICAgIG9mZnNldCA9IDEgLSBvZmZzZXQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFyIG5leHRUaWNrVGltZSA9IHRoaXMuZnJlcXVlbmN5LmdldFRpbWVPZlRpY2soc3RhcnRUaWNrcyArIG9mZnNldCk7XG5cdCAgICAgICAgICAgIHZhciBlcnJvciA9IG51bGw7XG5cdCAgICAgICAgICAgIHdoaWxlIChuZXh0VGlja1RpbWUgPCBlbmRUaW1lICYmIHRoaXMuX3N0YXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5leHRUaWNrVGltZSwgTWF0aC5yb3VuZCh0aGlzLmdldFRpY2tzQXRUaW1lKG5leHRUaWNrVGltZSkpKTtcblx0ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3RhdGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBuZXh0VGlja1RpbWUgKz0gdGhpcy5mcmVxdWVuY3kuZ2V0RHVyYXRpb25PZlRpY2tzKDEsIG5leHRUaWNrVGltZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKGVycm9yKSB7XG5cdCAgICAgICAgICAgIHRocm93IGVycm9yO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGlja1NvdXJjZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdmcmVxdWVuY3knKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpY2tTb3VyY2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQSBzYW1wbGUgYWNjdXJhdGUgY2xvY2sgd2hpY2ggcHJvdmlkZXMgYSBjYWxsYmFjayBhdCB0aGUgZ2l2ZW4gcmF0ZS5cblx0XHQgKiAgICAgICAgICBXaGlsZSB0aGUgY2FsbGJhY2sgaXMgbm90IHNhbXBsZS1hY2N1cmF0ZSAoaXQgaXMgc3RpbGwgc3VzY2VwdGlibGUgdG9cblx0XHQgKiAgICAgICAgICBsb29zZSBKUyB0aW1pbmcpLCB0aGUgdGltZSBwYXNzZWQgaW4gYXMgdGhlIGFyZ3VtZW50IHRvIHRoZSBjYWxsYmFja1xuXHRcdCAqICAgICAgICAgIGlzIHByZWNpc2UuIEZvciBtb3N0IGFwcGxpY2F0aW9ucywgaXQgaXMgYmV0dGVyIHRvIHVzZSBUb25lLlRyYW5zcG9ydFxuXHRcdCAqICAgICAgICAgIGluc3RlYWQgb2YgdGhlIENsb2NrIGJ5IGl0c2VsZiBzaW5jZSB5b3UgY2FuIHN5bmNocm9uaXplIG11bHRpcGxlIGNhbGxiYWNrcy5cblx0XHQgKlxuXHRcdCAqIFx0QGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVtaXR0ZXJ9XG5cdFx0ICogXHRAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aXRoIHRoZSB0aW1lIG9mIHRoZSBhdWRpbyBldmVudFxuXHRcdCAqIFx0QHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgcmF0ZSBvZiB0aGUgY2FsbGJhY2tcblx0XHQgKiBcdEBleGFtcGxlXG5cdFx0ICogLy90aGUgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIGFwcHJveGltYXRlbHkgb25jZSBhIHNlY29uZFxuXHRcdCAqIC8vYW5kIHdpbGwgcHJpbnQgdGhlIHRpbWUgZXhhY3RseSBvbmNlIGEgc2Vjb25kIGFwYXJ0LlxuXHRcdCAqIHZhciBjbG9jayA9IG5ldyBUb25lLkNsb2NrKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0Y29uc29sZS5sb2codGltZSk7XG5cdFx0ICogfSwgMSk7XG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSdcblx0ICAgICAgICBdLCBUb25lLkNsb2NrKTtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gaW52b2tlIGF0IHRoZSBzY2hlZHVsZWQgdGljay5cblx0XHRcdCAqICBAdHlwZSAge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG5leHQgdGltZSB0aGUgY2FsbGJhY2sgaXMgc2NoZWR1bGVkLlxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25leHRUaWNrID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdGljayBjb3VudGVyXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlRpY2tTb3VyY2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UgPSBuZXcgVG9uZS5UaWNrU291cmNlKG9wdGlvbnMuZnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbGFzdCB0aW1lIHRoZSBsb29wIGNhbGxiYWNrIHdhcyBpbnZva2VkXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGFzdFVwZGF0ZSA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJhdGUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHNob3VsZCBiZSBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlICB7QlBNfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fdGlja1NvdXJjZS5mcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2ZyZXF1ZW5jeScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzdGF0ZSB0aW1lbGluZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlRpbWVsaW5lU3RhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFRvbmUuVGltZWxpbmVTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQpO1xuXHQgICAgICAgIC8vYWRkIGFuIGluaXRpYWwgc3RhdGVcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsb29wIGZ1bmN0aW9uIGJvdW5kIHRvIGl0cyBjb250ZXh0LlxuXHRcdFx0ICogIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHJlbW92ZSB0aGUgZXZlbnQgaW4gdGhlIGVuZC5cblx0XHRcdCAqICBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2JvdW5kTG9vcCA9IHRoaXMuX2xvb3AuYmluZCh0aGlzKTtcblx0ICAgICAgICAvL2JpbmQgYSBjYWxsYmFjayB0byB0aGUgd29ya2VyIHRocmVhZFxuXHQgICAgICAgIHRoaXMuY29udGV4dC5vbigndGljaycsIHRoaXMuX2JvdW5kTG9vcCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DbG9jaywgVG9uZS5FbWl0dGVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiLCBcInN0b3BwZWRcIiBvciBcInBhdXNlZFwiLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNsb2NrI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2xvY2sucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgY2xvY2sgYXQgdGhlIGdpdmVuIHRpbWUuIE9wdGlvbmFsbHkgcGFzcyBpbiBhbiBvZmZzZXRcblx0XHQgKiAgb2Ygd2hlcmUgdG8gc3RhcnQgdGhlIHRpY2sgY291bnRlciBmcm9tLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIHRpbWUgICAgVGhlIHRpbWUgdGhlIGNsb2NrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0gIHtUaWNrcz19ICBvZmZzZXQgIFdoZXJlIHRoZSB0aWNrIGNvdW50ZXIgc3RhcnRzIGNvdW50aW5nIGZyb20uXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkNsb2NrfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RhcnRlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2Uuc3RhcnQodGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgaWYgKHRpbWUgPCB0aGlzLl9sYXN0VXBkYXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgY2xvY2suIFN0b3BwaW5nIHRoZSBjbG9jayByZXNldHMgdGhlIHRpY2sgY291bnRlciB0byAwLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgY2xvY2sgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNsb2NrfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogY2xvY2suc3RvcCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tTb3VyY2Uuc3RvcCh0aW1lKTtcblx0ICAgICAgICBpZiAodGltZSA8IHRoaXMuX2xhc3RVcGRhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KCdzdG9wJywgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQYXVzZSB0aGUgY2xvY2suIFBhdXNpbmcgZG9lcyBub3QgcmVzZXQgdGhlIHRpY2sgY291bnRlci5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIGNsb2NrIHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DbG9ja30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlBhdXNlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UucGF1c2UodGltZSk7XG5cdCAgICAgICAgICAgIGlmICh0aW1lIDwgdGhpcy5fbGFzdFVwZGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdwYXVzZScsIHRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBjYWxsYmFjayB3YXMgaW52b2tlZC4gU3RhcnRzIGNvdW50aW5nIGF0IDBcblx0XHQgKiAgYW5kIGluY3JlbWVudHMgYWZ0ZXIgdGhlIGNhbGxiYWNrIHdhcyBpbnZva2VkLlxuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DbG9jay5wcm90b3R5cGUsICd0aWNrcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLmdldFRpY2tzQXRUaW1lKHRoaXMubm93KCkpKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja1NvdXJjZS50aWNrcyA9IHQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHRpbWUgc2luY2UgdGlja3M9MCB0aGF0IHRoZSBDbG9jayBoYXMgYmVlbiBydW5uaW5nLiBBY2NvdW50c1xuXHRcdCAqICBmb3IgdGVtcG8gY3VydmVzXG5cdFx0ICogIEB0eXBlIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2xvY2sucHJvdG90eXBlLCAnc2Vjb25kcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tTb3VyY2Uuc2Vjb25kcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5zZWNvbmRzID0gcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGVsYXBzZWQgc2Vjb25kcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSBlbGFwc2VkIHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9ICBUaGUgbnVtYmVyIG9mIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuZ2V0U2Vjb25kc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tTb3VyY2UuZ2V0U2Vjb25kc0F0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTZXQgdGhlIGNsb2NrJ3MgdGlja3MgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tzIFRoZSB0aWNrIHZhbHVlIHRvIHNldFxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFdoZW4gdG8gc2V0IHRoZSB0aWNrIHZhbHVlXG5cdFx0ICogQHJldHVybiB7VG9uZS5DbG9ja30gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuc2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGlja3MsIHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlLnNldFRpY2tzQXRUaW1lKHRpY2tzLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIGNsb2NrJ3MgdGlja3MgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSAgV2hlbiB0byBnZXQgdGhlIHRpY2sgdmFsdWVcblx0XHQgKiBAcmV0dXJuIHtUaWNrc30gICAgICAgVGhlIHRpY2sgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5nZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tTb3VyY2UuZ2V0VGlja3NBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSB0aW1lIG9mIHRoZSBuZXh0IHRpY2tcblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja3MgVGhlIHRpY2sgbnVtYmVyLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IGJlZm9yZSBcblx0XHQgKiBAcmV0dXJuIHtUb25lLkNsb2NrfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5uZXh0VGlja1RpbWUgPSBmdW5jdGlvbiAob2Zmc2V0LCB3aGVuKSB7XG5cdCAgICAgICAgd2hlbiA9IHRoaXMudG9TZWNvbmRzKHdoZW4pO1xuXHQgICAgICAgIHZhciBjdXJyZW50VGljayA9IHRoaXMuZ2V0VGlja3NBdFRpbWUod2hlbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tTb3VyY2UuZ2V0VGltZU9mVGljayhjdXJyZW50VGljayArIG9mZnNldCwgd2hlbik7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzY2hlZHVsaW5nIGxvb3AuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5fbG9vcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgc3RhcnRUaW1lID0gdGhpcy5fbGFzdFVwZGF0ZTtcblx0ICAgICAgICB2YXIgZW5kVGltZSA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgdGhpcy5fbGFzdFVwZGF0ZSA9IGVuZFRpbWU7XG5cdCAgICAgICAgaWYgKHN0YXJ0VGltZSAhPT0gZW5kVGltZSkge1xuXHQgICAgICAgICAgICAvL3RoZSBzdGF0ZSBjaGFuZ2UgZXZlbnRzXG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hCZXR3ZWVuKHN0YXJ0VGltZSwgZW5kVGltZSwgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgICAgICAgIHN3aXRjaCAoZS5zdGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgY2FzZSBUb25lLlN0YXRlLlN0YXJ0ZWQ6XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX3RpY2tTb3VyY2UuZ2V0VGlja3NBdFRpbWUoZS50aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgZS50aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSBUb25lLlN0YXRlLlN0b3BwZWQ6XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKGUudGltZSAhPT0gMCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0b3AnLCBlLnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgVG9uZS5TdGF0ZS5QYXVzZWQ6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdwYXVzZScsIGUudGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgICAgIC8vdGhlIHRpY2sgY2FsbGJhY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UuZm9yRWFjaFRpY2tCZXR3ZWVuKHN0YXJ0VGltZSwgZW5kVGltZSwgZnVuY3Rpb24gKHRpbWUsIHRpY2tzKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUsIHRpY2tzKTtcblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHNjaGVkdWxlZCBzdGF0ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJuICB7U3RyaW5nfSAgVGhlIG5hbWUgb2YgdGhlIHN0YXRlIGlucHV0IGluIHNldFN0YXRlQXRUaW1lLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGNsb2NrLnN0YXJ0KFwiKzAuMVwiKTtcblx0XHQgKiBjbG9jay5nZXRTdGF0ZUF0VGltZShcIiswLjFcIik7IC8vcmV0dXJucyBcInN0YXJ0ZWRcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuZ2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNsb2NrfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5vZmYoJ3RpY2snLCB0aGlzLl9ib3VuZExvb3ApO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdmcmVxdWVuY3knKTtcblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYm91bmRMb29wID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9uZXh0VGljayA9IEluZmluaXR5O1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ2xvY2s7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBTaW1pbGFyIHRvIFRvbmUuVGltZWxpbmUsIGJ1dCBhbGwgZXZlbnRzIHJlcHJlc2VudFxuXHRcdCAqICAgICAgICAgaW50ZXJ2YWxzIHdpdGggYm90aCBcInRpbWVcIiBhbmQgXCJkdXJhdGlvblwiIHRpbWVzLiBUaGVcblx0XHQgKiAgICAgICAgIGV2ZW50cyBhcmUgcGxhY2VkIGluIGEgdHJlZSBzdHJ1Y3R1cmUgb3B0aW1pemVkXG5cdFx0ICogICAgICAgICBmb3IgcXVlcnlpbmcgYW4gaW50ZXJzZWN0aW9uIHBvaW50IHdpdGggdGhlIHRpbWVsaW5lXG5cdFx0ICogICAgICAgICBldmVudHMuIEludGVybmFsbHkgdXNlcyBhbiBbSW50ZXJ2YWwgVHJlZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSW50ZXJ2YWxfdHJlZSlcblx0XHQgKiAgICAgICAgIHRvIHJlcHJlc2VudCB0aGUgZGF0YS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByb290IG5vZGUgb2YgdGhlIGludGV2YWwgdHJlZVxuXHRcdFx0ICogIEB0eXBlICB7SW50ZXJ2YWxOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yb290ID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBLZWVwIHRyYWNrIG9mIHRoZSBsZW5ndGggb2YgdGhlIHRpbWVsaW5lLlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZW5ndGggPSAwO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuSW50ZXJ2YWxUaW1lbGluZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGV2ZW50IHRvIGFkZCB0byB0aGUgdGltZWxpbmUuIEFsbCBldmVudHMgbXVzdFxuXHRcdCAqICBoYXZlIGEgdGltZSBhbmQgZHVyYXRpb24gdmFsdWVcblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCB0byBhZGQgdG8gdGhlIHRpbWVsaW5lXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkludGVydmFsVGltZWxpbmV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYoZXZlbnQudGltZSkgfHwgVG9uZS5pc1VuZGVmKGV2ZW50LmR1cmF0aW9uKSkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuSW50ZXJ2YWxUaW1lbGluZTogZXZlbnRzIG11c3QgaGF2ZSB0aW1lIGFuZCBkdXJhdGlvbiBwYXJhbWV0ZXJzJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGV2ZW50LnRpbWUgPSBldmVudC50aW1lLnZhbHVlT2YoKTtcblx0ICAgICAgICB2YXIgbm9kZSA9IG5ldyBJbnRlcnZhbE5vZGUoZXZlbnQudGltZSwgZXZlbnQudGltZSArIGV2ZW50LmR1cmF0aW9uLCBldmVudCk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdCA9IG5vZGU7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5pbnNlcnQobm9kZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2xlbmd0aCsrO1xuXHQgICAgICAgIC8vIFJlc3RydWN0dXJlIHRyZWUgdG8gYmUgYmFsYW5jZWRcblx0ICAgICAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBub2RlLnVwZGF0ZUhlaWdodCgpO1xuXHQgICAgICAgICAgICBub2RlLnVwZGF0ZU1heCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9yZWJhbGFuY2Uobm9kZSk7XG5cdCAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBhbiBldmVudCBmcm9tIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCB0byByZW1vdmUgZnJvbSB0aGUgdGltZWxpbmVcblx0XHQgKiAgQHJldHVybiAge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5zZWFyY2goZXZlbnQudGltZSwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSByZXN1bHRzW2ldO1xuXHQgICAgICAgICAgICAgICAgaWYgKG5vZGUuZXZlbnQgPT09IGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlTm9kZShub2RlKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9sZW5ndGgtLTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkludGVydmFsVGltZWxpbmUjXG5cdFx0ICogIEBuYW1lIGxlbmd0aFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBldmVudHMgd2hvc2UgdGltZSB0aW1lIGlzIGFmdGVyIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIHRoaXMuZm9yRWFjaEZyb20oYWZ0ZXIsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICB0aGlzLnJlbW92ZShldmVudCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSByb290IG5vZGUgYXMgdGhlIGdpdmVuIG5vZGVcblx0XHQgKiAgQHBhcmFtIHtJbnRlcnZhbE5vZGV9IG5vZGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3NldFJvb3QgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHRoaXMuX3Jvb3QgPSBub2RlO1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QucGFyZW50ID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlcGxhY2UgdGhlIHJlZmVyZW5jZXMgdG8gdGhlIG5vZGUgaW4gdGhlIG5vZGUncyBwYXJlbnRcblx0XHQgKiAgd2l0aCB0aGUgcmVwbGFjZW1lbnQgbm9kZS5cblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICByZXBsYWNlbWVudFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcmVwbGFjZU5vZGVJblBhcmVudCA9IGZ1bmN0aW9uIChub2RlLCByZXBsYWNlbWVudCkge1xuXHQgICAgICAgIGlmIChub2RlLnBhcmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBpZiAobm9kZS5pc0xlZnRDaGlsZCgpKSB7XG5cdCAgICAgICAgICAgICAgICBub2RlLnBhcmVudC5sZWZ0ID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBub2RlLnBhcmVudC5yaWdodCA9IHJlcGxhY2VtZW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3JlYmFsYW5jZShub2RlLnBhcmVudCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0Um9vdChyZXBsYWNlbWVudCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgdGhlIG5vZGUgZnJvbSB0aGUgdHJlZSBhbmQgcmVwbGFjZSBpdCB3aXRoXG5cdFx0ICogIGEgc3VjY2Vzc29yIHdoaWNoIGZvbGxvd3MgdGhlIHNjaGVtYS5cblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcmVtb3ZlTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgaWYgKG5vZGUubGVmdCA9PT0gbnVsbCAmJiBub2RlLnJpZ2h0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VOb2RlSW5QYXJlbnQobm9kZSwgbnVsbCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChub2RlLnJpZ2h0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VOb2RlSW5QYXJlbnQobm9kZSwgbm9kZS5sZWZ0KTtcblx0ICAgICAgICB9IGVsc2UgaWYgKG5vZGUubGVmdCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yZXBsYWNlTm9kZUluUGFyZW50KG5vZGUsIG5vZGUucmlnaHQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBiYWxhbmNlID0gbm9kZS5nZXRCYWxhbmNlKCk7XG5cdCAgICAgICAgICAgIHZhciByZXBsYWNlbWVudCwgdGVtcDtcblx0ICAgICAgICAgICAgaWYgKGJhbGFuY2UgPiAwKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAobm9kZS5sZWZ0LnJpZ2h0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSBub2RlLmxlZnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucmlnaHQgPSBub2RlLnJpZ2h0O1xuXHQgICAgICAgICAgICAgICAgICAgIHRlbXAgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSBub2RlLmxlZnQucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlcGxhY2VtZW50LnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnBhcmVudC5yaWdodCA9IHJlcGxhY2VtZW50LmxlZnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHJlcGxhY2VtZW50LnBhcmVudDtcblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5sZWZ0ID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnJpZ2h0ID0gbm9kZS5yaWdodDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLnJpZ2h0LmxlZnQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gbm9kZS5yaWdodDtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LmxlZnQgPSBub2RlLmxlZnQ7XG5cdCAgICAgICAgICAgICAgICB0ZW1wID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IG5vZGUucmlnaHQubGVmdDtcblx0ICAgICAgICAgICAgICAgIHdoaWxlIChyZXBsYWNlbWVudC5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudC5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucGFyZW50ID0gcmVwbGFjZW1lbnQucGFyZW50O1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucGFyZW50LmxlZnQgPSByZXBsYWNlbWVudC5yaWdodDtcblx0ICAgICAgICAgICAgICAgIHRlbXAgPSByZXBsYWNlbWVudC5wYXJlbnQ7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5sZWZ0ID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucmlnaHQgPSBub2RlLnJpZ2h0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChub2RlLnBhcmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKG5vZGUuaXNMZWZ0Q2hpbGQoKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50LmxlZnQgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQucmlnaHQgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NldFJvb3QocmVwbGFjZW1lbnQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vIHRoaXMuX3JlcGxhY2VOb2RlSW5QYXJlbnQobm9kZSwgcmVwbGFjZW1lbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9yZWJhbGFuY2UodGVtcCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIG5vZGUuZGlzcG9zZSgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSb3RhdGUgdGhlIHRyZWUgdG8gdGhlIGxlZnRcblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcm90YXRlTGVmdCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50O1xuXHQgICAgICAgIHZhciBpc0xlZnRDaGlsZCA9IG5vZGUuaXNMZWZ0Q2hpbGQoKTtcblx0ICAgICAgICAvLyBNYWtlIG5vZGUucmlnaHQgdGhlIG5ldyByb290IG9mIHRoaXMgc3ViIHRyZWUgKGluc3RlYWQgb2Ygbm9kZSlcblx0ICAgICAgICB2YXIgcGl2b3ROb2RlID0gbm9kZS5yaWdodDtcblx0ICAgICAgICBub2RlLnJpZ2h0ID0gcGl2b3ROb2RlLmxlZnQ7XG5cdCAgICAgICAgcGl2b3ROb2RlLmxlZnQgPSBub2RlO1xuXHQgICAgICAgIGlmIChwYXJlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgaWYgKGlzTGVmdENoaWxkKSB7XG5cdCAgICAgICAgICAgICAgICBwYXJlbnQubGVmdCA9IHBpdm90Tm9kZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHBhcmVudC5yaWdodCA9IHBpdm90Tm9kZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJvb3QocGl2b3ROb2RlKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJvdGF0ZSB0aGUgdHJlZSB0byB0aGUgcmlnaHRcblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcm90YXRlUmlnaHQgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudDtcblx0ICAgICAgICB2YXIgaXNMZWZ0Q2hpbGQgPSBub2RlLmlzTGVmdENoaWxkKCk7XG5cdCAgICAgICAgLy8gTWFrZSBub2RlLmxlZnQgdGhlIG5ldyByb290IG9mIHRoaXMgc3ViIHRyZWUgKGluc3RlYWQgb2Ygbm9kZSlcblx0ICAgICAgICB2YXIgcGl2b3ROb2RlID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgIG5vZGUubGVmdCA9IHBpdm90Tm9kZS5yaWdodDtcblx0ICAgICAgICBwaXZvdE5vZGUucmlnaHQgPSBub2RlO1xuXHQgICAgICAgIGlmIChwYXJlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgaWYgKGlzTGVmdENoaWxkKSB7XG5cdCAgICAgICAgICAgICAgICBwYXJlbnQubGVmdCA9IHBpdm90Tm9kZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHBhcmVudC5yaWdodCA9IHBpdm90Tm9kZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJvb3QocGl2b3ROb2RlKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEJhbGFuY2UgdGhlIEJTVFxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICBub2RlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLl9yZWJhbGFuY2UgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHZhciBiYWxhbmNlID0gbm9kZS5nZXRCYWxhbmNlKCk7XG5cdCAgICAgICAgaWYgKGJhbGFuY2UgPiAxKSB7XG5cdCAgICAgICAgICAgIGlmIChub2RlLmxlZnQuZ2V0QmFsYW5jZSgpIDwgMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlTGVmdChub2RlLmxlZnQpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlUmlnaHQobm9kZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKGJhbGFuY2UgPCAtMSkge1xuXHQgICAgICAgICAgICBpZiAobm9kZS5yaWdodC5nZXRCYWxhbmNlKCkgPiAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yb3RhdGVSaWdodChub2RlLnJpZ2h0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZUxlZnQobm9kZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCBhbiBldmVudCB3aG9zZSB0aW1lIGFuZCBkdXJhdGlvbiBzcGFuIHRoZSBnaXZlIHRpbWUuIFdpbGxcblx0XHQgKiAgcmV0dXJuIHRoZSBtYXRjaCB3aG9zZSBcInRpbWVcIiB2YWx1ZSBpcyBjbG9zZXN0IHRvIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtPYmplY3R9ICBldmVudCAgVGhlIGV2ZW50IHRvIGFkZCB0byB0aGUgdGltZWxpbmVcblx0XHQgKiAgQHJldHVybiAge09iamVjdH0gIFRoZSBldmVudCB3aGljaCBzcGFucyB0aGUgZGVzaXJlZCB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5zZWFyY2godGltZSwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgICAgIHZhciBtYXggPSByZXN1bHRzWzBdO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdHNbaV0ubG93ID4gbWF4Lmxvdykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBtYXggPSByZXN1bHRzW2ldO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiBtYXguZXZlbnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICBpZiAodGhpcy5fcm9vdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YXIgYWxsTm9kZXMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC50cmF2ZXJzZShmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgICAgICAgICAgYWxsTm9kZXMucHVzaChub2RlKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsTm9kZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBldiA9IGFsbE5vZGVzW2ldLmV2ZW50O1xuXHQgICAgICAgICAgICAgICAgaWYgKGV2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXYpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgaW4gd2hpY2ggdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgb3ZlcmxhcHMgd2l0aCB0aGUgdGltZSBhbmQgZHVyYXRpb24gdGltZSBvZiB0aGUgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIG92ZXJsYXBwaW5nXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5zZWFyY2godGltZSwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSByZXN1bHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXYgPSByZXN1bHRzW2ldLmV2ZW50O1xuXHQgICAgICAgICAgICAgICAgaWYgKGV2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXYpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgaW4gd2hpY2ggdGhlIHRpbWUgaXMgZ3JlYXRlclxuXHRcdCAqICB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2hGcm9tID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5zZWFyY2hBZnRlcih0aW1lLCByZXN1bHRzKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IHJlc3VsdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgICAgIHZhciBldiA9IHJlc3VsdHNbaV0uZXZlbnQ7XG5cdCAgICAgICAgICAgICAgICBjYWxsYmFjayhldik7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkludGVydmFsVGltZWxpbmV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGFsbE5vZGVzID0gW107XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC50cmF2ZXJzZShmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgICAgICAgICAgYWxsTm9kZXMucHVzaChub2RlKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsTm9kZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgYWxsTm9kZXNbaV0uZGlzcG9zZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBhbGxOb2RlcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcm9vdCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0SU5URVJWQUwgTk9ERSBIRUxQRVJcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFJlcHJlc2VudHMgYSBub2RlIGluIHRoZSBiaW5hcnkgc2VhcmNoIHRyZWUsIHdpdGggdGhlIGFkZGl0aW9uXG5cdFx0ICogIG9mIGEgXCJoaWdoXCIgdmFsdWUgd2hpY2gga2VlcHMgdHJhY2sgb2YgdGhlIGhpZ2hlc3QgdmFsdWUgb2Zcblx0XHQgKiAgaXRzIGNoaWxkcmVuLlxuXHRcdCAqICBSZWZlcmVuY2VzOlxuXHRcdCAqICBodHRwczovL2Jyb29rbm92YWsud29yZHByZXNzLmNvbS8yMDEzLzEyLzA3L2F1Z21lbnRlZC1pbnRlcnZhbC10cmVlLWluLWMvXG5cdFx0ICogIGh0dHA6Ly93d3cubWlmLnZ1Lmx0L352YWxkYXMvQUxHT1JJVE1BSS9MSVRFUkFUVVJBL0Nvcm1lbi9Db3JtZW4ucGRmXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBsb3dcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIHZhciBJbnRlcnZhbE5vZGUgPSBmdW5jdGlvbiAobG93LCBoaWdoLCBldmVudCkge1xuXHQgICAgICAgIC8vdGhlIGV2ZW50IGNvbnRhaW5lclxuXHQgICAgICAgIHRoaXMuZXZlbnQgPSBldmVudDtcblx0ICAgICAgICAvL3RoZSBsb3cgdmFsdWVcblx0ICAgICAgICB0aGlzLmxvdyA9IGxvdztcblx0ICAgICAgICAvL3RoZSBoaWdoIHZhbHVlXG5cdCAgICAgICAgdGhpcy5oaWdoID0gaGlnaDtcblx0ICAgICAgICAvL3RoZSBoaWdoIHZhbHVlIGZvciB0aGlzIGFuZCBhbGwgY2hpbGQgbm9kZXNcblx0ICAgICAgICB0aGlzLm1heCA9IHRoaXMuaGlnaDtcblx0ICAgICAgICAvL3RoZSBub2RlcyB0byB0aGUgbGVmdFxuXHQgICAgICAgIHRoaXMuX2xlZnQgPSBudWxsO1xuXHQgICAgICAgIC8vdGhlIG5vZGVzIHRvIHRoZSByaWdodFxuXHQgICAgICAgIHRoaXMuX3JpZ2h0ID0gbnVsbDtcblx0ICAgICAgICAvL3RoZSBwYXJlbnQgbm9kZVxuXHQgICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblx0ICAgICAgICAvL3RoZSBudW1iZXIgb2YgY2hpbGQgbm9kZXNcblx0ICAgICAgICB0aGlzLmhlaWdodCA9IDA7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEluc2VydCBhIG5vZGUgaW50byB0aGUgY29ycmVjdCBzcG90IGluIHRoZSB0cmVlXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuaW5zZXJ0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICBpZiAobm9kZS5sb3cgPD0gdGhpcy5sb3cpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubGVmdCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5sZWZ0ID0gbm9kZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMubGVmdC5pbnNlcnQobm9kZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmlnaHQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodCA9IG5vZGU7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodC5pbnNlcnQobm9kZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZWFyY2ggdGhlIHRyZWUgZm9yIG5vZGVzIHdoaWNoIG92ZXJsYXBcblx0XHQgKiAgd2l0aCB0aGUgZ2l2ZW4gcG9pbnRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgcG9pbnQgIFRoZSBwb2ludCB0byBxdWVyeVxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIHJlc3VsdHMgIFRoZSBhcnJheSB0byBwdXQgdGhlIHJlc3VsdHNcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuc2VhcmNoID0gZnVuY3Rpb24gKHBvaW50LCByZXN1bHRzKSB7XG5cdCAgICAgICAgLy8gSWYgcCBpcyB0byB0aGUgcmlnaHQgb2YgdGhlIHJpZ2h0bW9zdCBwb2ludCBvZiBhbnkgaW50ZXJ2YWxcblx0ICAgICAgICAvLyBpbiB0aGlzIG5vZGUgYW5kIGFsbCBjaGlsZHJlbiwgdGhlcmUgd29uJ3QgYmUgYW55IG1hdGNoZXMuXG5cdCAgICAgICAgaWYgKHBvaW50ID4gdGhpcy5tYXgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBTZWFyY2ggbGVmdCBjaGlsZHJlblxuXHQgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5sZWZ0LnNlYXJjaChwb2ludCwgcmVzdWx0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIENoZWNrIHRoaXMgbm9kZVxuXHQgICAgICAgIGlmICh0aGlzLmxvdyA8PSBwb2ludCAmJiB0aGlzLmhpZ2ggPiBwb2ludCkge1xuXHQgICAgICAgICAgICByZXN1bHRzLnB1c2godGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIElmIHAgaXMgdG8gdGhlIGxlZnQgb2YgdGhlIHRpbWUgb2YgdGhpcyBpbnRlcnZhbCxcblx0ICAgICAgICAvLyB0aGVuIGl0IGNhbid0IGJlIGluIGFueSBjaGlsZCB0byB0aGUgcmlnaHQuXG5cdCAgICAgICAgaWYgKHRoaXMubG93ID4gcG9pbnQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBTZWFyY2ggcmlnaHQgY2hpbGRyZW5cblx0ICAgICAgICBpZiAodGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLnJpZ2h0LnNlYXJjaChwb2ludCwgcmVzdWx0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZWFyY2ggdGhlIHRyZWUgZm9yIG5vZGVzIHdoaWNoIGFyZSBsZXNzXG5cdFx0ICogIHRoYW4gdGhlIGdpdmVuIHBvaW50XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHBvaW50ICBUaGUgcG9pbnQgdG8gcXVlcnlcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICByZXN1bHRzICBUaGUgYXJyYXkgdG8gcHV0IHRoZSByZXN1bHRzXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLnNlYXJjaEFmdGVyID0gZnVuY3Rpb24gKHBvaW50LCByZXN1bHRzKSB7XG5cdCAgICAgICAgLy8gQ2hlY2sgdGhpcyBub2RlXG5cdCAgICAgICAgaWYgKHRoaXMubG93ID49IHBvaW50KSB7XG5cdCAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5sZWZ0LnNlYXJjaEFmdGVyKHBvaW50LCByZXN1bHRzKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBzZWFyY2ggdGhlIHJpZ2h0IHNpZGVcblx0ICAgICAgICBpZiAodGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLnJpZ2h0LnNlYXJjaEFmdGVyKHBvaW50LCByZXN1bHRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludm9rZSB0aGUgY2FsbGJhY2sgb24gdGhpcyBlbGVtZW50IGFuZCBib3RoIGl0J3MgYnJhbmNoZXNcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFja1xuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS50cmF2ZXJzZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuXHQgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5sZWZ0LnRyYXZlcnNlKGNhbGxiYWNrKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodC50cmF2ZXJzZShjYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBVcGRhdGUgdGhlIGhlaWdodCBvZiB0aGUgbm9kZVxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS51cGRhdGVIZWlnaHQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCAmJiB0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gTWF0aC5tYXgodGhpcy5sZWZ0LmhlaWdodCwgdGhpcy5yaWdodC5oZWlnaHQpICsgMTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJpZ2h0LmhlaWdodCArIDE7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmxlZnQuaGVpZ2h0ICsgMTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmhlaWdodCA9IDA7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBVcGRhdGUgdGhlIGhlaWdodCBvZiB0aGUgbm9kZVxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS51cGRhdGVNYXggPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5tYXggPSB0aGlzLmhpZ2g7XG5cdCAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLm1heCA9IE1hdGgubWF4KHRoaXMubWF4LCB0aGlzLmxlZnQubWF4KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5tYXggPSBNYXRoLm1heCh0aGlzLm1heCwgdGhpcy5yaWdodC5tYXgpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGJhbGFuY2UgaXMgaG93IHRoZSBsZWFmcyBhcmUgZGlzdHJpYnV0ZWQgb24gdGhlIG5vZGVcblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gIE5lZ2F0aXZlIG51bWJlcnMgYXJlIGJhbGFuY2VkIHRvIHRoZSByaWdodFxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS5nZXRCYWxhbmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBiYWxhbmNlID0gMDtcblx0ICAgICAgICBpZiAodGhpcy5sZWZ0ICE9PSBudWxsICYmIHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgYmFsYW5jZSA9IHRoaXMubGVmdC5oZWlnaHQgLSB0aGlzLnJpZ2h0LmhlaWdodDtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBiYWxhbmNlID0gdGhpcy5sZWZ0LmhlaWdodCArIDE7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGJhbGFuY2UgPSAtKHRoaXMucmlnaHQuaGVpZ2h0ICsgMSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBiYWxhbmNlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGlzIG5vZGUgaXMgdGhlIGxlZnQgY2hpbGRcblx0XHQgKiAgb2YgaXRzIHBhcmVudFxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS5pc0xlZnRDaGlsZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQgIT09IG51bGwgJiYgdGhpcy5wYXJlbnQubGVmdCA9PT0gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgZ2V0L3NldCB0aGUgbGVmdCBub2RlXG5cdFx0ICogIEB0eXBlIHtJbnRlcnZhbE5vZGV9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW50ZXJ2YWxOb2RlLnByb3RvdHlwZSwgJ2xlZnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZWZ0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZWZ0ID0gbm9kZTtcblx0ICAgICAgICAgICAgaWYgKG5vZGUgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gdGhpcztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZUhlaWdodCgpO1xuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZU1heCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGdldC9zZXQgdGhlIHJpZ2h0IG5vZGVcblx0XHQgKiAgQHR5cGUge0ludGVydmFsTm9kZX1cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRlcnZhbE5vZGUucHJvdG90eXBlLCAncmlnaHQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9yaWdodDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcmlnaHQgPSBub2RlO1xuXHQgICAgICAgICAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSB0aGlzO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMudXBkYXRlSGVpZ2h0KCk7XG5cdCAgICAgICAgICAgIHRoaXMudXBkYXRlTWF4KCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgbnVsbCBvdXQgcmVmZXJlbmNlcy5cblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGVmdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZXZlbnQgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEVORCBJTlRFUlZBTCBOT0RFIEhFTFBFUlxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICByZXR1cm4gVG9uZS5JbnRlcnZhbFRpbWVsaW5lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVGlja3MgaXMgYSBwcmltaXRpdmUgdHlwZSBmb3IgZW5jb2RpbmcgVGltZSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBUb25lLlRpY2tzIGNhbiBiZSBjb25zdHJ1Y3RlZCB3aXRoIG9yIHdpdGhvdXQgdGhlIGBuZXdgIGtleXdvcmQuIFRvbmUuVGlja3MgY2FuIGJlIHBhc3NlZFxuXHRcdCAqICAgICAgICAgaW50byB0aGUgcGFyYW1ldGVyIG9mIGFueSBtZXRob2Qgd2hpY2ggdGFrZXMgdGltZSBhcyBhbiBhcmd1bWVudC5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRyYW5zcG9ydFRpbWV9XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVGhlIHVuaXRzIG9mIHRoZSB2YWx1ZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgdCA9IFRvbmUuVGlja3MoXCI0blwiKTsvL2EgcXVhcnRlciBub3RlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzID0gZnVuY3Rpb24gKHZhbCwgdW5pdHMpIHtcblx0ICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFRvbmUuVGlja3MpIHtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnRUaW1lLmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpY2tzKHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpY2tzLCBUb25lLlRyYW5zcG9ydFRpbWUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHVuaXRzIGlmIG5vbmUgYXJlIGdpdmVuLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX2RlZmF1bHRVbml0cyA9ICdpJztcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgY3VycmVudCB0aW1lIGluIHRoZSBnaXZlbiB1bml0c1xuXHRcdCAqIEByZXR1cm4ge1RpY2tzfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS5fbm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC50aWNrcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYmVhdHMgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJlYXRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzID0gZnVuY3Rpb24gKGJlYXRzKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2dldFBQUSgpICogYmVhdHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgc2Vjb25kIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7U2Vjb25kc30gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzID0gZnVuY3Rpb24gKHNlY29uZHMpIHtcblx0ICAgICAgICByZXR1cm4gc2Vjb25kcyAvICg2MCAvIHRoaXMuX2dldEJwbSgpKSAqIHRoaXMuX2dldFBQUSgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHRpY2sgaW4gdGhlIGN1cnJlbnQgdGltZSB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1RpY2tzfSB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX3RpY2tzVG9Vbml0cyA9IGZ1bmN0aW9uICh0aWNrcykge1xuXHQgICAgICAgIHJldHVybiB0aWNrcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLnRvVGlja3MgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge1RpY2tzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSAvIHRoaXMuX2dldFBQUSgpICogKDYwIC8gdGhpcy5fZ2V0QnBtKCkpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpY2tzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVHJhbnNwb3J0RXZlbnQgaXMgYW4gaW50ZXJuYWwgY2xhc3MgdXNlZCBieSAoVG9uZS5UcmFuc3BvcnQpW1RyYW5zcG9ydF1cblx0XHQgKiAgICAgICAgIHRvIHNjaGVkdWxlIGV2ZW50cy4gRG8gbm8gaW52b2tlIHRoaXMgY2xhc3MgZGlyZWN0bHksIGl0IGlzXG5cdFx0ICogICAgICAgICBoYW5kbGVkIGZyb20gd2l0aGluIFRvbmUuVHJhbnNwb3J0LlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQgPSBmdW5jdGlvbiAoVHJhbnNwb3J0LCBvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlRyYW5zcG9ydEV2ZW50LmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBSZWZlcmVuY2UgdG8gdGhlIFRyYW5zcG9ydCB0aGF0IGNyZWF0ZWQgaXRcblx0XHRcdCAqIEB0eXBlIHtUb25lLlRyYW5zcG9ydH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0ID0gVHJhbnNwb3J0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHVuaXF1ZSBpZCBvZiB0aGUgZXZlbnRcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlkID0gVG9uZS5UcmFuc3BvcnRFdmVudC5fZXZlbnRJZCsrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHRpbWUgdGhlIGV2ZW50IHN0YXJ0c1xuXHRcdFx0ICogQHR5cGUge1RpY2tzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy50aW1lID0gVG9uZS5UaWNrcyhvcHRpb25zLnRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGNhbGxiYWNrIHRvIGludm9rZVxuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBJZiB0aGUgZXZlbnQgc2hvdWxkIGJlIHJlbW92ZWQgYWZ0ZXIgYmVpbmcgY3JlYXRlZC5cblx0XHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29uY2UgPSBvcHRpb25zLm9uY2U7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmFuc3BvcnRFdmVudCk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVmYXVsdHNcblx0XHQgKiBAc3RhdGljXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29uY2UnOiBmYWxzZSxcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3Bcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDdXJyZW50IElEIGNvdW50ZXJcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5fZXZlbnRJZCA9IDA7XG5cdCAgICAvKipcblx0XHQgKiBJbnZva2UgdGhlIGV2ZW50IGNhbGxiYWNrLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFRoZSBBdWRpb0NvbnRleHQgdGltZSBpbiBzZWNvbmRzIG9mIHRoZSBldmVudFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5wcm90b3R5cGUuaW52b2tlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5jYWxsYmFjaykge1xuXHQgICAgICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fb25jZSAmJiB0aGlzLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5UcmFuc3BvcnQuY2xlYXIodGhpcy5pZCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydEV2ZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydEV2ZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy50aW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnRFdmVudDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50IGlzIGFuIGludGVybmFsIGNsYXNzIHVzZWQgYnkgVG9uZS5UcmFuc3BvcnRcblx0XHQgKiAgICAgICAgIHRvIHNjaGVkdWxlIHJlcGVhdCBldmVudHMuIFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHkuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRyYW5zcG9ydEV2ZW50fVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudCA9IGZ1bmN0aW9uIChUcmFuc3BvcnQsIG9wdGlvbnMpIHtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydEV2ZW50LmNhbGwodGhpcywgVHJhbnNwb3J0LCBvcHRpb25zKTtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQuZGVmYXVsdHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogV2hlbiB0aGUgZXZlbnQgc2hvdWxkIHN0b3AgcmVwZWF0aW5nXG5cdFx0XHQgKiBAdHlwZSB7VGlja3N9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kdXJhdGlvbiA9IFRvbmUuVGlja3Mob3B0aW9ucy5kdXJhdGlvbik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgaW50ZXJ2YWwgb2YgdGhlIHJlcGVhdGVkIGV2ZW50XG5cdFx0XHQgKiBAdHlwZSB7VGlja3N9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBUb25lLlRpY2tzKG9wdGlvbnMuaW50ZXJ2YWwpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIElEIG9mIHRoZSBjdXJyZW50IHRpbWVsaW5lIGV2ZW50XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2N1cnJlbnRJZCA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIElEIG9mIHRoZSBuZXh0IHRpbWVsaW5lIGV2ZW50XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25leHRJZCA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICAqIFRoZSB0aW1lIG9mIHRoZSBuZXh0IGV2ZW50XG5cdFx0XHQgICogQHR5cGUge1RpY2tzfVxuXHRcdFx0ICAqIEBwcml2YXRlXG5cdFx0XHQgICovXG5cdCAgICAgICAgdGhpcy5fbmV4dFRpY2sgPSB0aGlzLnRpbWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBhIHJlZmVyZW5jZSB0byB0aGUgYm91bmQgc3RhcnQgbWV0aG9kXG5cdFx0XHQgKiBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYm91bmRSZXN0YXJ0ID0gdGhpcy5fcmVzdGFydC5iaW5kKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0Lm9uKCdzdGFydCBsb29wU3RhcnQnLCB0aGlzLl9ib3VuZFJlc3RhcnQpO1xuXHQgICAgICAgIHRoaXMuX3Jlc3RhcnQoKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LCBUb25lLlRyYW5zcG9ydEV2ZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWZhdWx0c1xuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZHVyYXRpb24nOiBJbmZpbml0eSxcblx0ICAgICAgICAnaW50ZXJ2YWwnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlIHRoZSBjYWxsYmFjay4gUmV0dXJucyB0aGUgdGljayB0aW1lIHdoaWNoXG5cdFx0ICogdGhlIG5leHQgZXZlbnQgc2hvdWxkIGJlIHNjaGVkdWxlZCBhdC5cblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHRpbWUgIFRoZSBBdWRpb0NvbnRleHQgdGltZSBpbiBzZWNvbmRzIG9mIHRoZSBldmVudFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5wcm90b3R5cGUuaW52b2tlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL2NyZWF0ZSBtb3JlIGV2ZW50cyBpZiBuZWNlc3Nhcnlcblx0ICAgICAgICB0aGlzLl9jcmVhdGVFdmVudHModGltZSk7XG5cdCAgICAgICAgLy9jYWxsIHRoZSBzdXBlciBjbGFzc1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQucHJvdG90eXBlLmludm9rZS5jYWxsKHRoaXMsIHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFB1c2ggbW9yZSBldmVudHMgb250byB0aGUgdGltZWxpbmUgdG8ga2VlcCB1cCB3aXRoIHRoZSBwb3NpdGlvbiBvZiB0aGUgdGltZWxpbmVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5wcm90b3R5cGUuX2NyZWF0ZUV2ZW50cyA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgLy8gc2NoZWR1bGUgdGhlIG5leHQgZXZlbnRcblx0ICAgICAgICB2YXIgdGlja3MgPSB0aGlzLlRyYW5zcG9ydC5nZXRUaWNrc0F0VGltZSh0aW1lKTtcblx0ICAgICAgICBpZiAodGlja3MgPj0gdGhpcy50aW1lICYmIHRpY2tzID49IHRoaXMuX25leHRUaWNrICYmIHRoaXMuX25leHRUaWNrICsgdGhpcy5faW50ZXJ2YWwgPCB0aGlzLnRpbWUgKyB0aGlzLmR1cmF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX25leHRUaWNrICs9IHRoaXMuX2ludGVydmFsO1xuXHQgICAgICAgICAgICB0aGlzLl9jdXJyZW50SWQgPSB0aGlzLl9uZXh0SWQ7XG5cdCAgICAgICAgICAgIHRoaXMuX25leHRJZCA9IHRoaXMuVHJhbnNwb3J0LnNjaGVkdWxlT25jZSh0aGlzLmludm9rZS5iaW5kKHRoaXMpLCBUb25lLlRpY2tzKHRoaXMuX25leHRUaWNrKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFB1c2ggbW9yZSBldmVudHMgb250byB0aGUgdGltZWxpbmUgdG8ga2VlcCB1cCB3aXRoIHRoZSBwb3NpdGlvbiBvZiB0aGUgdGltZWxpbmVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5wcm90b3R5cGUuX3Jlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX2N1cnJlbnRJZCk7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQuY2xlYXIodGhpcy5fbmV4dElkKTtcblx0ICAgICAgICB0aGlzLl9uZXh0VGljayA9IHRoaXMudGltZTtcblx0ICAgICAgICB2YXIgdGlja3MgPSB0aGlzLlRyYW5zcG9ydC5nZXRUaWNrc0F0VGltZSh0aW1lKTtcblx0ICAgICAgICBpZiAodGlja3MgPiB0aGlzLnRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbmV4dFRpY2sgPSB0aGlzLnRpbWUgKyBNYXRoLmNlaWwoKHRpY2tzIC0gdGhpcy50aW1lKSAvIHRoaXMuX2ludGVydmFsKSAqIHRoaXMuX2ludGVydmFsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9jdXJyZW50SWQgPSB0aGlzLlRyYW5zcG9ydC5zY2hlZHVsZU9uY2UodGhpcy5pbnZva2UuYmluZCh0aGlzKSwgVG9uZS5UaWNrcyh0aGlzLl9uZXh0VGljaykpO1xuXHQgICAgICAgIHRoaXMuX25leHRUaWNrICs9IHRoaXMuX2ludGVydmFsO1xuXHQgICAgICAgIHRoaXMuX25leHRJZCA9IHRoaXMuVHJhbnNwb3J0LnNjaGVkdWxlT25jZSh0aGlzLmludm9rZS5iaW5kKHRoaXMpLCBUb25lLlRpY2tzKHRoaXMuX25leHRUaWNrKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX2N1cnJlbnRJZCk7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQuY2xlYXIodGhpcy5fbmV4dElkKTtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5vZmYoJ3N0YXJ0IGxvb3BTdGFydCcsIHRoaXMuX2JvdW5kUmVzdGFydCk7XG5cdCAgICAgICAgdGhpcy5fYm91bmRDcmVhdGVFdmVudHMgPSBudWxsO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmR1cmF0aW9uID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVHJhbnNwb3J0IGZvciB0aW1pbmcgbXVzaWNhbCBldmVudHMuXG5cdFx0ICogICAgICAgICAgU3VwcG9ydHMgdGVtcG8gY3VydmVzIGFuZCB0aW1lIGNoYW5nZXMuIFVubGlrZSBicm93c2VyLWJhc2VkIHRpbWluZyAoc2V0SW50ZXJ2YWwsIHJlcXVlc3RBbmltYXRpb25GcmFtZSlcblx0XHQgKiAgICAgICAgICBUb25lLlRyYW5zcG9ydCB0aW1pbmcgZXZlbnRzIHBhc3MgaW4gdGhlIGV4YWN0IHRpbWUgb2YgdGhlIHNjaGVkdWxlZCBldmVudFxuXHRcdCAqICAgICAgICAgIGluIHRoZSBhcmd1bWVudCBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uIFBhc3MgdGhhdCB0aW1lIHZhbHVlIHRvIHRoZSBvYmplY3Rcblx0XHQgKiAgICAgICAgICB5b3UncmUgc2NoZWR1bGluZy4gPGJyPjxicj5cblx0XHQgKiAgICAgICAgICBBIHNpbmdsZSB0cmFuc3BvcnQgaXMgY3JlYXRlZCBmb3IgeW91IHdoZW4gdGhlIGxpYnJhcnkgaXMgaW5pdGlhbGl6ZWQuXG5cdFx0ICogICAgICAgICAgPGJyPjxicj5cblx0XHQgKiAgICAgICAgICBUaGUgdHJhbnNwb3J0IGVtaXRzIHRoZSBldmVudHM6IFwic3RhcnRcIiwgXCJzdG9wXCIsIFwicGF1c2VcIiwgYW5kIFwibG9vcFwiIHdoaWNoIGFyZVxuXHRcdCAqICAgICAgICAgIGNhbGxlZCB3aXRoIHRoZSB0aW1lIG9mIHRoYXQgZXZlbnQgYXMgdGhlIGFyZ3VtZW50LlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVtaXR0ZXJ9XG5cdFx0ICogIEBzaW5nbGV0b25cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3JlcGVhdGVkIGV2ZW50IGV2ZXJ5IDh0aCBub3RlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGVSZXBlYXQoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHQvL2RvIHNvbWV0aGluZyB3aXRoIHRoZSB0aW1lXG5cdFx0ICogfSwgXCI4blwiKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NjaGVkdWxlIGFuIGV2ZW50IG9uIHRoZSAxNnRoIG1lYXN1cmVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdC8vZG8gc29tZXRoaW5nIHdpdGggdGhlIHRpbWVcblx0XHQgKiB9LCBcIjE2OjA6MFwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW1pdHRlci5jYWxsKHRoaXMpO1xuXHQgICAgICAgIFRvbmUuZ2V0Q29udGV4dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8vXHRMT09QSU5HXG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFx0SWYgdGhlIHRyYW5zcG9ydCBsb29wcyBvciBub3QuXG5cdFx0XHRcdCAqICBAdHlwZSB7Ym9vbGVhbn1cblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMubG9vcCA9IGZhbHNlO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogXHRUaGUgbG9vcCBzdGFydCBwb3NpdGlvbiBpbiB0aWNrc1xuXHRcdFx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IDA7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBcdFRoZSBsb29wIGVuZCBwb3NpdGlvbiBpbiB0aWNrc1xuXHRcdFx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSAwO1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvL1x0Q0xPQ0svVEVNUE9cblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFB1bHNlcyBwZXIgcXVhcnRlciBpcyB0aGUgbnVtYmVyIG9mIHRpY2tzIHBlciBxdWFydGVyIG5vdGUuXG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9wcHEgPSBUcmFuc3BvcnRDb25zdHJ1Y3Rvci5kZWZhdWx0cy5QUFE7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgd2F0Y2hlcyB0aGUgbWFpbiBvc2NpbGxhdG9yIGZvciB0aW1pbmcgdGlja3Ncblx0XHRcdFx0ICogIGluaXRpYWxseSBzdGFydHMgYXQgMTIwYnBtXG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKiAgQHR5cGUge1RvbmUuQ2xvY2t9XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9jbG9jayA9IG5ldyBUb25lLkNsb2NrKHtcblx0ICAgICAgICAgICAgICAgICdjYWxsYmFjayc6IHRoaXMuX3Byb2Nlc3NUaWNrLmJpbmQodGhpcyksXG5cdCAgICAgICAgICAgICAgICAnZnJlcXVlbmN5JzogMFxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5fYmluZENsb2NrRXZlbnRzKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIEJlYXRzIFBlciBNaW51dGUgb2YgdGhlIFRyYW5zcG9ydC5cblx0XHRcdFx0ICogIEB0eXBlIHtCUE19XG5cdFx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0XHQgKiBUb25lLlRyYW5zcG9ydC5icG0udmFsdWUgPSA4MDtcblx0XHRcdFx0ICogLy9yYW1wIHRoZSBicG0gdG8gMTIwIG92ZXIgMTAgc2Vjb25kc1xuXHRcdFx0XHQgKiBUb25lLlRyYW5zcG9ydC5icG0ucmFtcFRvKDEyMCwgMTApO1xuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5icG0gPSB0aGlzLl9jbG9jay5mcmVxdWVuY3k7XG5cdCAgICAgICAgICAgIHRoaXMuYnBtLl90b1VuaXRzID0gdGhpcy5fdG9Vbml0cy5iaW5kKHRoaXMpO1xuXHQgICAgICAgICAgICB0aGlzLmJwbS5fZnJvbVVuaXRzID0gdGhpcy5fZnJvbVVuaXRzLmJpbmQodGhpcyk7XG5cdCAgICAgICAgICAgIHRoaXMuYnBtLnVuaXRzID0gVG9uZS5UeXBlLkJQTTtcblx0ICAgICAgICAgICAgdGhpcy5icG0udmFsdWUgPSBUcmFuc3BvcnRDb25zdHJ1Y3Rvci5kZWZhdWx0cy5icG07XG5cdCAgICAgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdicG0nKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBUaGUgdGltZSBzaWduYXR1cmUsIG9yIG1vcmUgYWNjdXJhdGVseSB0aGUgbnVtZXJhdG9yXG5cdFx0XHRcdCAqICBvZiB0aGUgdGltZSBzaWduYXR1cmUgb3ZlciBhIGRlbm9taW5hdG9yIG9mIDQuXG5cdFx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVTaWduYXR1cmUgPSBUcmFuc3BvcnRDb25zdHJ1Y3Rvci5kZWZhdWx0cy50aW1lU2lnbmF0dXJlO1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvL1x0VElNRUxJTkUgRVZFTlRTXG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBBbGwgdGhlIGV2ZW50cyBpbiBhbiBvYmplY3QgdG8ga2VlcCB0cmFjayBieSBJRFxuXHRcdFx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMgPSB7fTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFx0VGhlIHNjaGVkdWxlZCBldmVudHMuXG5cdFx0XHRcdCAqICBAdHlwZSB7VG9uZS5UaW1lbGluZX1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IG5ldyBUb25lLlRpbWVsaW5lKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgUmVwZWF0ZWQgZXZlbnRzXG5cdFx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fcmVwZWF0ZWRFdmVudHMgPSBuZXcgVG9uZS5JbnRlcnZhbFRpbWVsaW5lKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgQWxsIG9mIHRoZSBzeW5jZWQgU2lnbmFsc1xuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3N5bmNlZFNpZ25hbHMgPSBbXTtcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLy9cdFNXSU5HXG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBUaGUgc3ViZGl2aXNpb24gb2YgdGhlIHN3aW5nXG5cdFx0XHRcdCAqICBAdHlwZSAge1RpY2tzfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3N3aW5nVGlja3MgPSBUcmFuc3BvcnRDb25zdHJ1Y3Rvci5kZWZhdWx0cy5QUFEgLyAyO1xuXHQgICAgICAgICAgICAvLzhuXG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHN3aW5nIGFtb3VudFxuXHRcdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3N3aW5nQW1vdW50ID0gMDtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJhbnNwb3J0LCBUb25lLkVtaXR0ZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0c1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2JwbSc6IDEyMCxcblx0ICAgICAgICAnc3dpbmcnOiAwLFxuXHQgICAgICAgICdzd2luZ1N1YmRpdmlzaW9uJzogJzhuJyxcblx0ICAgICAgICAndGltZVNpZ25hdHVyZSc6IDQsXG5cdCAgICAgICAgJ2xvb3BTdGFydCc6IDAsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAnNG0nLFxuXHQgICAgICAgICdQUFEnOiAxOTJcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VElDS1Ncblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBjYWxsZWQgb24gZXZlcnkgdGlja1xuXHRcdCAqICBAcGFyYW0gICB7bnVtYmVyfSB0aWNrVGltZSBjbG9jayByZWxhdGl2ZSB0aWNrIHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fcHJvY2Vzc1RpY2sgPSBmdW5jdGlvbiAodGlja1RpbWUsIHRpY2tzKSB7XG5cdCAgICAgICAgLy9oYW5kbGUgc3dpbmdcblx0ICAgICAgICBpZiAodGhpcy5fc3dpbmdBbW91bnQgPiAwICYmIHRpY2tzICUgdGhpcy5fcHBxICE9PSAwICYmIC8vbm90IG9uIGEgZG93bmJlYXRcblx0ICAgICAgICAgICAgdGlja3MgJSAodGhpcy5fc3dpbmdUaWNrcyAqIDIpICE9PSAwKSB7XG5cdCAgICAgICAgICAgIC8vYWRkIHNvbWUgc3dpbmdcblx0ICAgICAgICAgICAgdmFyIHByb2dyZXNzID0gdGlja3MgJSAodGhpcy5fc3dpbmdUaWNrcyAqIDIpIC8gKHRoaXMuX3N3aW5nVGlja3MgKiAyKTtcblx0ICAgICAgICAgICAgdmFyIGFtb3VudCA9IE1hdGguc2luKHByb2dyZXNzICogTWF0aC5QSSkgKiB0aGlzLl9zd2luZ0Ftb3VudDtcblx0ICAgICAgICAgICAgdGlja1RpbWUgKz0gVG9uZS5UaWNrcyh0aGlzLl9zd2luZ1RpY2tzICogMiAvIDMpLnRvU2Vjb25kcygpICogYW1vdW50O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2RvIHRoZSBsb29wIHRlc3Rcblx0ICAgICAgICBpZiAodGhpcy5sb29wKSB7XG5cdCAgICAgICAgICAgIGlmICh0aWNrcyA+PSB0aGlzLl9sb29wRW5kKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2xvb3BFbmQnLCB0aWNrVGltZSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jbG9jay5zZXRUaWNrc0F0VGltZSh0aGlzLl9sb29wU3RhcnQsIHRpY2tUaW1lKTtcblx0ICAgICAgICAgICAgICAgIHRpY2tzID0gdGhpcy5fbG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb29wU3RhcnQnLCB0aWNrVGltZSwgdGhpcy5fY2xvY2suZ2V0U2Vjb25kc0F0VGltZSh0aWNrVGltZSkpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb29wJywgdGlja1RpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vaW52b2tlIHRoZSB0aW1lbGluZSBldmVudHMgc2NoZWR1bGVkIG9uIHRoaXMgdGlja1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lLmZvckVhY2hBdFRpbWUodGlja3MsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBldmVudC5pbnZva2UodGlja1RpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRTQ0hFRFVMQUJMRSBFVkVOVFNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZSBhbiBldmVudCBhbG9uZyB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGF0IHRoZSB0aW1lLlxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9ICB0aW1lIFRoZSB0aW1lIHRvIGludm9rZSB0aGUgY2FsbGJhY2sgYXQuXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn0gVGhlIGlkIG9mIHRoZSBldmVudCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgY2FuY2VsaW5nIHRoZSBldmVudC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgdGhlIGNhbGxiYWNrIHdoZW4gdGhlIFRyYW5zcG9ydCByZWFjaGVzIHRoZSBkZXNpcmVkIHRpbWVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdGVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSk7XG5cdFx0ICogfSwgXCIxMjhpXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCB0aW1lKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gbmV3IFRvbmUuVHJhbnNwb3J0RXZlbnQodGhpcywge1xuXHQgICAgICAgICAgICAndGltZSc6IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKSxcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJzogY2FsbGJhY2tcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYWRkRXZlbnQoZXZlbnQsIHRoaXMuX3RpbWVsaW5lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGUgYSByZXBlYXRlZCBldmVudCBhbG9uZyB0aGUgdGltZWxpbmUuIFRoZSBldmVudCB3aWxsIGZpcmVcblx0XHQgKiAgYXQgdGhlIGBpbnRlcnZhbGAgc3RhcnRpbmcgYXQgdGhlIGBzdGFydFRpbWVgIGFuZCBmb3IgdGhlIHNwZWNpZmllZFxuXHRcdCAqICBgZHVyYXRpb25gLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIHRvIGludm9rZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gICAgaW50ZXJ2YWwgICBUaGUgZHVyYXRpb24gYmV0d2VlbiBzdWNjZXNzaXZlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLiBNdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLlxuXHRcdCAqICBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lPX0gICAgc3RhcnRUaW1lICBXaGVuIGFsb25nIHRoZSB0aW1lbGluZSB0aGUgZXZlbnRzIHNob3VsZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0IGJlaW5nIGludm9rZWQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW2R1cmF0aW9uPUluZmluaXR5XSBIb3cgbG9uZyB0aGUgZXZlbnQgc2hvdWxkIHJlcGVhdC5cblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gICAgVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQuIFVzZSB0aGlzIHRvIGNhbmNlbFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGV2ZW50LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSBjYWxsYmFjayBpbnZva2VkIGV2ZXJ5IGVpZ2h0aCBub3RlIGFmdGVyIHRoZSBmaXJzdCBtZWFzdXJlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGVSZXBlYXQoY2FsbGJhY2ssIFwiOG5cIiwgXCIxbVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zY2hlZHVsZVJlcGVhdCA9IGZ1bmN0aW9uIChjYWxsYmFjaywgaW50ZXJ2YWwsIHN0YXJ0VGltZSwgZHVyYXRpb24pIHtcblx0ICAgICAgICB2YXIgZXZlbnQgPSBuZXcgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudCh0aGlzLCB7XG5cdCAgICAgICAgICAgICdjYWxsYmFjayc6IGNhbGxiYWNrLFxuXHQgICAgICAgICAgICAnaW50ZXJ2YWwnOiBUb25lLlRpbWUoaW50ZXJ2YWwpLFxuXHQgICAgICAgICAgICAndGltZSc6IFRvbmUuVHJhbnNwb3J0VGltZShzdGFydFRpbWUpLFxuXHQgICAgICAgICAgICAnZHVyYXRpb24nOiBUb25lLlRpbWUoVG9uZS5kZWZhdWx0QXJnKGR1cmF0aW9uLCBJbmZpbml0eSkpXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9raWNrIGl0IG9mZiBpZiB0aGUgVHJhbnNwb3J0IGlzIHN0YXJ0ZWRcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYWRkRXZlbnQoZXZlbnQsIHRoaXMuX3JlcGVhdGVkRXZlbnRzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGUgYW4gZXZlbnQgdGhhdCB3aWxsIGJlIHJlbW92ZWQgYWZ0ZXIgaXQgaXMgaW52b2tlZC5cblx0XHQgKiAgTm90ZSB0aGF0IGlmIHRoZSBnaXZlbiB0aW1lIGlzIGxlc3MgdGhhbiB0aGUgY3VycmVudCB0cmFuc3BvcnQgdGltZSxcblx0XHQgKiAgdGhlIGV2ZW50IHdpbGwgYmUgaW52b2tlZCBpbW1lZGlhdGVseS5cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSBvbmNlLlxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9IHRpbWUgVGhlIHRpbWUgdGhlIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkLlxuXHRcdCAqICBAcmV0dXJucyB7TnVtYmVyfSBUaGUgSUQgb2YgdGhlIHNjaGVkdWxlZCBldmVudC5cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zY2hlZHVsZU9uY2UgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHRpbWUpIHtcblx0ICAgICAgICB2YXIgZXZlbnQgPSBuZXcgVG9uZS5UcmFuc3BvcnRFdmVudCh0aGlzLCB7XG5cdCAgICAgICAgICAgICd0aW1lJzogVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpLFxuXHQgICAgICAgICAgICAnY2FsbGJhY2snOiBjYWxsYmFjayxcblx0ICAgICAgICAgICAgJ29uY2UnOiB0cnVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEV2ZW50KGV2ZW50LCB0aGlzLl90aW1lbGluZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFyIHRoZSBwYXNzZWQgaW4gZXZlbnQgaWQgZnJvbSB0aGUgdGltZWxpbmVcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGV2ZW50SWQgVGhlIGlkIG9mIHRoZSBldmVudC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoZXZlbnRJZCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zY2hlZHVsZWRFdmVudHMuaGFzT3duUHJvcGVydHkoZXZlbnRJZCkpIHtcblx0ICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLl9zY2hlZHVsZWRFdmVudHNbZXZlbnRJZC50b1N0cmluZygpXTtcblx0ICAgICAgICAgICAgaXRlbS50aW1lbGluZS5yZW1vdmUoaXRlbS5ldmVudCk7XG5cdCAgICAgICAgICAgIGl0ZW0uZXZlbnQuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICBkZWxldGUgdGhpcy5fc2NoZWR1bGVkRXZlbnRzW2V2ZW50SWQudG9TdHJpbmcoKV07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEFkZCBhbiBldmVudCB0byB0aGUgY29ycmVjdCB0aW1lbGluZS4gS2VlcCB0cmFjayBvZiB0aGVcblx0XHQgKiB0aW1lbGluZSBpdCB3YXMgYWRkZWQgdG8uXG5cdFx0ICogQHBhcmFtIHtUb25lLlRyYW5zcG9ydEV2ZW50fVx0ZXZlbnRcblx0XHQgKiBAcGFyYW0ge1RvbmUuVGltZWxpbmV9IHRpbWVsaW5lXG5cdFx0ICogQHJldHVybnMge051bWJlcn0gdGhlIGV2ZW50IGlkIHdoaWNoIHdhcyBqdXN0IGFkZGVkXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fYWRkRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQsIHRpbWVsaW5lKSB7XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzW2V2ZW50LmlkLnRvU3RyaW5nKCldID0ge1xuXHQgICAgICAgICAgICAnZXZlbnQnOiBldmVudCxcblx0ICAgICAgICAgICAgJ3RpbWVsaW5lJzogdGltZWxpbmVcblx0ICAgICAgICB9O1xuXHQgICAgICAgIHRpbWVsaW5lLmFkZChldmVudCk7XG5cdCAgICAgICAgcmV0dXJuIGV2ZW50LmlkO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgc2NoZWR1bGVkIGV2ZW50cyBmcm9tIHRoZSB0aW1lbGluZSBhZnRlclxuXHRcdCAqICB0aGUgZ2l2ZW4gdGltZS4gUmVwZWF0ZWQgZXZlbnRzIHdpbGwgYmUgcmVtb3ZlZFxuXHRcdCAqICBpZiB0aGVpciBzdGFydFRpbWUgaXMgYWZ0ZXIgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSBbYWZ0ZXI9MF0gQ2xlYXIgYWxsIGV2ZW50cyBhZnRlclxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHRpbWUuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIGFmdGVyID0gVG9uZS5kZWZhdWx0QXJnKGFmdGVyLCAwKTtcblx0ICAgICAgICBhZnRlciA9IHRoaXMudG9UaWNrcyhhZnRlcik7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUuZm9yRWFjaEZyb20oYWZ0ZXIsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICB0aGlzLmNsZWFyKGV2ZW50LmlkKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHRoaXMuX3JlcGVhdGVkRXZlbnRzLmZvckVhY2hGcm9tKGFmdGVyLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5jbGVhcihldmVudC5pZCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0U1RBUlQvU1RPUC9QQVVTRVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIEJpbmQgc3RhcnQvc3RvcC9wYXVzZSBldmVudHMgZnJvbSB0aGUgY2xvY2sgYW5kIGVtaXQgdGhlbS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fYmluZENsb2NrRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLm9uKCdzdGFydCcsIGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5UaWNrcyhvZmZzZXQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLm9uKCdzdG9wJywgZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KCdzdG9wJywgdGltZSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB0aGlzLl9jbG9jay5vbigncGF1c2UnLCBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLmVtaXQoJ3BhdXNlJywgdGltZSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiLCBcInN0b3BwZWRcIiwgb3IgXCJwYXVzZWRcIlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLmdldFN0YXRlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSB0cmFuc3BvcnQgYW5kIGFsbCBzb3VyY2VzIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIHRyYW5zcG9ydCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RyYW5zcG9ydFRpbWU9fSBvZmZzZXQgVGhlIHRpbWVsaW5lIG9mZnNldCB0byBzdGFydCB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgaW4gb25lIHNlY29uZCBzdGFydGluZyBhdCBiZWdpbm5pbmcgb2YgdGhlIDV0aCBtZWFzdXJlLlxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0YXJ0KFwiKzFcIiwgXCI0OjA6MFwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBjbG9ja1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChvZmZzZXQpKSB7XG5cdCAgICAgICAgICAgIG9mZnNldCA9IHRoaXMudG9UaWNrcyhvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9jbG9jay5zdGFydCh0aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSB0cmFuc3BvcnQgYW5kIGFsbCBzb3VyY2VzIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIHRyYW5zcG9ydCBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RvcCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBhdXNlIHRoZSB0cmFuc3BvcnQgYW5kIGFsbCBzb3VyY2VzIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9jbG9jay5wYXVzZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUb2dnbGUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHRyYW5zcG9ydC4gSWYgaXQgaXNcblx0XHQgKiBzdGFydGVkLCBpdCB3aWxsIHN0b3AgaXQsIG90aGVyd2lzZSBpdCB3aWxsIHN0YXJ0IHRoZSBUcmFuc3BvcnQuXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWUgVGhlIHRpbWUgb2YgdGhlIGV2ZW50XG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnR9ICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9jbG9jay5nZXRTdGF0ZUF0VGltZSh0aW1lKSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RhcnQodGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0U0VUVEVSUy9HRVRURVJTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHRpbWUgc2lnbmF0dXJlIGFzIGp1c3QgdGhlIG51bWVyYXRvciBvdmVyIDQuXG5cdFx0ICogIEZvciBleGFtcGxlIDQvNCB3b3VsZCBiZSBqdXN0IDQgYW5kIDYvOCB3b3VsZCBiZSAzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ8QXJyYXl9XG5cdFx0ICogIEBuYW1lIHRpbWVTaWduYXR1cmVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NvbW1vbiB0aW1lXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQudGltZVNpZ25hdHVyZSA9IDQ7XG5cdFx0ICogLy8gNy84XG5cdFx0ICogVG9uZS5UcmFuc3BvcnQudGltZVNpZ25hdHVyZSA9IFs3LCA4XTtcblx0XHQgKiAvL3RoaXMgd2lsbCBiZSByZWR1Y2VkIHRvIGEgc2luZ2xlIG51bWJlclxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnRpbWVTaWduYXR1cmU7IC8vcmV0dXJucyAzLjVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICd0aW1lU2lnbmF0dXJlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZVNpZ25hdHVyZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHRpbWVTaWcpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aW1lU2lnKSkge1xuXHQgICAgICAgICAgICAgICAgdGltZVNpZyA9IHRpbWVTaWdbMF0gLyB0aW1lU2lnWzFdICogNDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl90aW1lU2lnbmF0dXJlID0gdGltZVNpZztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFdoZW4gdGhlIFRvbmUuVHJhbnNwb3J0Lmxvb3AgPSB0cnVlLCB0aGlzIGlzIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgbG9vcC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wU3RhcnQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3RhcnRQb3NpdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvVGlja3Moc3RhcnRQb3NpdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBXaGVuIHRoZSBUb25lLlRyYW5zcG9ydC5sb29wID0gdHJ1ZSwgdGhpcyBpcyB0aGUgZW5kaW5nIHBvc2l0aW9uIG9mIHRoZSBsb29wLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcEVuZCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChlbmRQb3NpdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gdGhpcy50b1RpY2tzKGVuZFBvc2l0aW9uKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIGxvb3Agc3RhcnQgYW5kIHN0b3AgYXQgdGhlIHNhbWUgdGltZS5cblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSBzdGFydFBvc2l0aW9uXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gZW5kUG9zaXRpb25cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9sb29wIG92ZXIgdGhlIGZpcnN0IG1lYXN1cmVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zZXRMb29wUG9pbnRzKDAsIFwiMW1cIik7XG5cdFx0ICogVG9uZS5UcmFuc3BvcnQubG9vcCA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc2V0TG9vcFBvaW50cyA9IGZ1bmN0aW9uIChzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikge1xuXHQgICAgICAgIHRoaXMubG9vcFN0YXJ0ID0gc3RhcnRQb3NpdGlvbjtcblx0ICAgICAgICB0aGlzLmxvb3BFbmQgPSBlbmRQb3NpdGlvbjtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHN3aW5nIHZhbHVlLiBCZXR3ZWVuIDAtMSB3aGVyZSAxIGVxdWFsIHRvXG5cdFx0ICogIHRoZSBub3RlICsgaGFsZiB0aGUgc3ViZGl2aXNpb24uXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBzd2luZ1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ3N3aW5nJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3dpbmdBbW91bnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChhbW91bnQpIHtcblx0ICAgICAgICAgICAgLy9zY2FsZSB0aGUgdmFsdWVzIHRvIGEgbm9ybWFsIHJhbmdlXG5cdCAgICAgICAgICAgIHRoaXMuX3N3aW5nQW1vdW50ID0gYW1vdW50O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgc3ViZGl2aXNpb24gd2hpY2ggdGhlIHN3aW5nIHdpbGwgYmUgYXBwbGllZCB0by5cblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgYW4gOHRoIG5vdGUuIFZhbHVlIG11c3QgYmUgbGVzc1xuXHRcdCAqICB0aGFuIGEgcXVhcnRlciBub3RlLlxuXHRcdCAqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIHN3aW5nU3ViZGl2aXNpb25cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdzd2luZ1N1YmRpdmlzaW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9zd2luZ1RpY2tzKS50b05vdGF0aW9uKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdWJkaXZpc2lvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9zd2luZ1RpY2tzID0gdGhpcy50b1RpY2tzKHN1YmRpdmlzaW9uKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgVHJhbnNwb3J0J3MgcG9zaXRpb24gaW4gQmFyczpCZWF0czpTaXh0ZWVudGhzLlxuXHRcdCAqICBTZXR0aW5nIHRoZSB2YWx1ZSB3aWxsIGp1bXAgdG8gdGhhdCBwb3NpdGlvbiByaWdodCBhd2F5LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtCYXJzQmVhdHNTaXh0ZWVudGhzfVxuXHRcdCAqICBAbmFtZSBwb3NpdGlvblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ3Bvc2l0aW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5fY2xvY2suZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGlja3MpLnRvQmFyc0JlYXRzU2l4dGVlbnRocygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocHJvZ3Jlc3MpIHtcblx0ICAgICAgICAgICAgdmFyIHRpY2tzID0gdGhpcy50b1RpY2tzKHByb2dyZXNzKTtcblx0ICAgICAgICAgICAgdGhpcy50aWNrcyA9IHRpY2tzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBUcmFuc3BvcnQncyBwb3NpdGlvbiBpbiBzZWNvbmRzXG5cdFx0ICogIFNldHRpbmcgdGhlIHZhbHVlIHdpbGwganVtcCB0byB0aGF0IHBvc2l0aW9uIHJpZ2h0IGF3YXkuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge1NlY29uZHN9XG5cdFx0ICogIEBuYW1lIHNlY29uZHNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdzZWNvbmRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2suc2Vjb25kcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHMpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHZhciB0aWNrcyA9IHRoaXMuYnBtLnRpbWVUb1RpY2tzKHMsIG5vdyk7XG5cdCAgICAgICAgICAgIHRoaXMudGlja3MgPSB0aWNrcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgVHJhbnNwb3J0J3MgbG9vcCBwb3NpdGlvbiBhcyBhIG5vcm1hbGl6ZWQgdmFsdWUuIEFsd2F5c1xuXHRcdCAqICByZXR1cm5zIDAgaWYgdGhlIHRyYW5zcG9ydCBpZiBsb29wIGlzIG5vdCB0cnVlLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEBuYW1lIHByb2dyZXNzXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdwcm9ncmVzcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgdGlja3MgPSB0aGlzLl9jbG9jay5nZXRUaWNrc0F0VGltZShub3cpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuICh0aWNrcyAtIHRoaXMuX2xvb3BTdGFydCkgLyAodGhpcy5fbG9vcEVuZCAtIHRoaXMuX2xvb3BTdGFydCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0cmFuc3BvcnRzIGN1cnJlbnQgdGljayBwb3NpdGlvbi5cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHQgKiAgQG5hbWUgdGlja3Ncblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICd0aWNrcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLnRpY2tzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fY2xvY2sudGlja3MgIT09IHQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICAgICAgLy9zdG9wIGV2ZXJ5dGhpbmcgc3luY2VkIHRvIHRoZSB0cmFuc3BvcnRcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0b3AnLCBub3cpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb2NrLnNldFRpY2tzQXRUaW1lKHQsIG5vdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9yZXN0YXJ0IGl0IHdpdGggdGhlIG5ldyB0aW1lXG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdGFydCcsIG5vdywgdGhpcy5zZWNvbmRzKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xvY2suc2V0VGlja3NBdFRpbWUodCwgbm93KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSBjbG9jaydzIHRpY2tzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSB0aWNrIHZhbHVlXG5cdFx0ICogQHJldHVybiB7VGlja3N9ICAgICAgIFRoZSB0aWNrIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmdldFRpY2tzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLl9jbG9jay5nZXRUaWNrc0F0VGltZSh0aW1lKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZWxhcHNlZCBzZWNvbmRzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgV2hlbiB0byBnZXQgdGhlIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc30gIFRoZSBudW1iZXIgb2YgZWxhcHNlZCBzZWNvbmRzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuZ2V0U2Vjb25kc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLmdldFNlY29uZHNBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFB1bHNlcyBQZXIgUXVhcnRlciBub3RlLiBUaGlzIGlzIHRoZSBzbWFsbGVzdCByZXNvbHV0aW9uXG5cdFx0ICogIHRoZSBUcmFuc3BvcnQgdGltaW5nIHN1cHBvcnRzLiBUaGlzIHNob3VsZCBiZSBzZXQgb25jZVxuXHRcdCAqICBvbiBpbml0aWFsaXphdGlvbiBhbmQgbm90IHNldCBhZ2Fpbi4gQ2hhbmdpbmcgdGhpcyB2YWx1ZVxuXHRcdCAqICBhZnRlciBvdGhlciBvYmplY3RzIGhhdmUgYmVlbiBjcmVhdGVkIGNhbiBjYXVzZSBwcm9ibGVtcy5cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIFBQUVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ1BQUScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BwcTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBwcSkge1xuXHQgICAgICAgICAgICB2YXIgYnBtID0gdGhpcy5icG0udmFsdWU7XG5cdCAgICAgICAgICAgIHRoaXMuX3BwcSA9IHBwcTtcblx0ICAgICAgICAgICAgdGhpcy5icG0udmFsdWUgPSBicG07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBmcm9tIEJQTSB0byBmcmVxdWVuY3kgKGZhY3RvcmluZyBpbiBQUFEpXG5cdFx0ICogIEBwYXJhbSAge0JQTX0gIGJwbSBUaGUgQlBNIHZhbHVlIHRvIGNvbnZlcnQgdG8gZnJlcXVlbmN5XG5cdFx0ICogIEByZXR1cm4gIHtGcmVxdWVuY3l9ICBUaGUgQlBNIGFzIGEgZnJlcXVlbmN5IHdpdGggUFBRIGZhY3RvcmVkIGluLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLl9mcm9tVW5pdHMgPSBmdW5jdGlvbiAoYnBtKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyAoNjAgLyBicG0gLyB0aGlzLlBQUSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgZnJvbSBmcmVxdWVuY3kgKHdpdGggUFBRKSBpbnRvIEJQTVxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l9ICBmcmVxIFRoZSBjbG9ja3MgZnJlcXVlbmN5IHRvIGNvbnZlcnQgdG8gQlBNXG5cdFx0ICogIEByZXR1cm4gIHtCUE19ICBUaGUgZnJlcXVlbmN5IHZhbHVlIGFzIEJQTS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fdG9Vbml0cyA9IGZ1bmN0aW9uIChmcmVxKSB7XG5cdCAgICAgICAgcmV0dXJuIGZyZXEgLyB0aGlzLlBQUSAqIDYwO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRTWU5DSU5HXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdGltZSBhbGlnbmVkIHRvIHRoZSBuZXh0IHN1YmRpdmlzaW9uXG5cdFx0ICogIG9mIHRoZSBUcmFuc3BvcnQuIElmIHRoZSBUcmFuc3BvcnQgaXMgbm90IHN0YXJ0ZWQsXG5cdFx0ICogIGl0IHdpbGwgcmV0dXJuIDAuXG5cdFx0ICogIE5vdGU6IHRoaXMgd2lsbCBub3Qgd29yayBwcmVjaXNlbHkgZHVyaW5nIHRlbXBvIHJhbXBzLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgc3ViZGl2aXNpb24gIFRoZSBzdWJkaXZpc2lvbiB0byBxdWFudGl6ZSB0b1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSAgVGhlIGNvbnRleHQgdGltZSBvZiB0aGUgbmV4dCBzdWJkaXZpc2lvbi5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdGFydCgpOyAvL3RoZSB0cmFuc3BvcnQgbXVzdCBiZSBzdGFydGVkXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQubmV4dFN1YmRpdmlzaW9uKFwiNG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUubmV4dFN1YmRpdmlzaW9uID0gZnVuY3Rpb24gKHN1YmRpdmlzaW9uKSB7XG5cdCAgICAgICAgc3ViZGl2aXNpb24gPSB0aGlzLnRvVGlja3Moc3ViZGl2aXNpb24pO1xuXHQgICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgLy9pZiB0aGUgdHJhbnNwb3J0J3Mgbm90IHN0YXJ0ZWQsIHJldHVybiAwXG5cdCAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICAvL3RoZSByZW1haW5kZXIgb2YgdGhlIGN1cnJlbnQgdGlja3MgYW5kIHRoZSBzdWJkaXZpc2lvblxuXHQgICAgICAgICAgICB2YXIgdHJhbnNwb3J0UG9zID0gdGhpcy5nZXRUaWNrc0F0VGltZShub3cpO1xuXHQgICAgICAgICAgICB2YXIgcmVtYWluaW5nVGlja3MgPSBzdWJkaXZpc2lvbiAtIHRyYW5zcG9ydFBvcyAlIHN1YmRpdmlzaW9uO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2submV4dFRpY2tUaW1lKHJlbWFpbmluZ1RpY2tzLCBub3cpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQXR0YWNoZXMgdGhlIHNpZ25hbCB0byB0aGUgdGVtcG8gY29udHJvbCBzaWduYWwgc28gdGhhdFxuXHRcdCAqICBhbnkgY2hhbmdlcyBpbiB0aGUgdGVtcG8gd2lsbCBjaGFuZ2UgdGhlIHNpZ25hbCBpbiB0aGUgc2FtZVxuXHRcdCAqICByYXRpby5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLlNpZ25hbH0gc2lnbmFsXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gcmF0aW8gT3B0aW9uYWxseSBwYXNzIGluIHRoZSByYXRpbyBiZXR3ZWVuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHR3byBzaWduYWxzLiBPdGhlcndpc2UgaXQgd2lsbCBiZSBjb21wdXRlZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIHRoZWlyIGN1cnJlbnQgdmFsdWVzLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zeW5jU2lnbmFsID0gZnVuY3Rpb24gKHNpZ25hbCwgcmF0aW8pIHtcblx0ICAgICAgICBpZiAoIXJhdGlvKSB7XG5cdCAgICAgICAgICAgIC8vZ2V0IHRoZSBzeW5jIHJhdGlvXG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICBpZiAoc2lnbmFsLmdldFZhbHVlQXRUaW1lKG5vdykgIT09IDApIHtcblx0ICAgICAgICAgICAgICAgIHJhdGlvID0gc2lnbmFsLmdldFZhbHVlQXRUaW1lKG5vdykgLyB0aGlzLmJwbS5nZXRWYWx1ZUF0VGltZShub3cpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmF0aW8gPSAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciByYXRpb1NpZ25hbCA9IG5ldyBUb25lLkdhaW4ocmF0aW8pO1xuXHQgICAgICAgIHRoaXMuYnBtLmNoYWluKHJhdGlvU2lnbmFsLCBzaWduYWwuX3BhcmFtKTtcblx0ICAgICAgICB0aGlzLl9zeW5jZWRTaWduYWxzLnB1c2goe1xuXHQgICAgICAgICAgICAncmF0aW8nOiByYXRpb1NpZ25hbCxcblx0ICAgICAgICAgICAgJ3NpZ25hbCc6IHNpZ25hbCxcblx0ICAgICAgICAgICAgJ2luaXRpYWwnOiBzaWduYWwudmFsdWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICBzaWduYWwudmFsdWUgPSAwO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBVbnN5bmNzIGEgcHJldmlvdXNseSBzeW5jZWQgc2lnbmFsIGZyb20gdGhlIHRyYW5zcG9ydCdzIGNvbnRyb2wuXG5cdFx0ICogIFNlZSBUb25lLlRyYW5zcG9ydC5zeW5jU2lnbmFsLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLlNpZ25hbH0gc2lnbmFsXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnVuc3luY1NpZ25hbCA9IGZ1bmN0aW9uIChzaWduYWwpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fc3luY2VkU2lnbmFscy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICB2YXIgc3luY2VkU2lnbmFsID0gdGhpcy5fc3luY2VkU2lnbmFsc1tpXTtcblx0ICAgICAgICAgICAgaWYgKHN5bmNlZFNpZ25hbC5zaWduYWwgPT09IHNpZ25hbCkge1xuXHQgICAgICAgICAgICAgICAgc3luY2VkU2lnbmFsLnJhdGlvLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgICAgIHN5bmNlZFNpZ25hbC5zaWduYWwudmFsdWUgPSBzeW5jZWRTaWduYWwuaW5pdGlhbDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNlZFNpZ25hbHMuc3BsaWNlKGksIDEpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9jbG9jay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdicG0nKTtcblx0ICAgICAgICB0aGlzLmJwbSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yZXBlYXRlZEV2ZW50cy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcmVwZWF0ZWRFdmVudHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRJTklUSUFMSVpBVElPTlxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgdmFyIFRyYW5zcG9ydENvbnN0cnVjdG9yID0gVG9uZS5UcmFuc3BvcnQ7XG5cdCAgICBUb25lLlRyYW5zcG9ydCA9IG5ldyBUcmFuc3BvcnRDb25zdHJ1Y3RvcigpO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICBpZiAoY29udGV4dC5UcmFuc3BvcnQgaW5zdGFuY2VvZiBUcmFuc3BvcnRDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydCA9IGNvbnRleHQuVHJhbnNwb3J0O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0ID0gbmV3IFRyYW5zcG9ydENvbnN0cnVjdG9yKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vc3RvcmUgdGhlIFRyYW5zcG9ydCBvbiB0aGUgY29udGV4dCBzbyBpdCBjYW4gYmUgcmV0cmlldmVkIGxhdGVyXG5cdCAgICAgICAgY29udGV4dC5UcmFuc3BvcnQgPSBUb25lLlRyYW5zcG9ydDtcblx0ICAgIH0pO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdjbG9zZScsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuVHJhbnNwb3J0IGluc3RhbmNlb2YgVHJhbnNwb3J0Q29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgY29udGV4dC5UcmFuc3BvcnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Wb2x1bWUgaXMgYSBzaW1wbGUgdm9sdW1lIG5vZGUsIHVzZWZ1bCBmb3IgY3JlYXRpbmcgYSB2b2x1bWUgZmFkZXIuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc30gW3ZvbHVtZT0wXSB0aGUgaW5pdGlhbCB2b2x1bWVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgdm9sID0gbmV3IFRvbmUuVm9sdW1lKC0xMik7XG5cdFx0ICogaW5zdHJ1bWVudC5jaGFpbih2b2wsIFRvbmUuTWFzdGVyKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVm9sdW1lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsndm9sdW1lJ10sIFRvbmUuVm9sdW1lKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogdGhlIG91dHB1dCBub2RlXG5cdFx0XHQgKiBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLnZvbHVtZSwgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB1bm11dGVkIHZvbHVtZVxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3VubXV0ZWRWb2x1bWUgPSBvcHRpb25zLnZvbHVtZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdm9sdW1lIGNvbnRyb2wgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiAgQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5vdXRwdXQuZ2Fpbjtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgLy9zZXQgdGhlIG11dGUgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVm9sdW1lLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLlZvbHVtZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlZvbHVtZSNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIHZvbHVtZS5tdXRlID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlZvbHVtZS5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy52b2x1bWUudmFsdWUgPT09IC1JbmZpbml0eTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLm11dGUgJiYgbXV0ZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdW5tdXRlZFZvbHVtZSA9IHRoaXMudm9sdW1lLnZhbHVlO1xuXHQgICAgICAgICAgICAgICAgLy9tYXliZSBpdCBzaG91bGQgcmFtcCBoZXJlP1xuXHQgICAgICAgICAgICAgICAgdGhpcy52b2x1bWUudmFsdWUgPSAtSW5maW5pdHk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tdXRlICYmICFtdXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnZvbHVtZS52YWx1ZSA9IHRoaXMuX3VubXV0ZWRWb2x1bWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Wb2x1bWV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVm9sdW1lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuaW5wdXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMudm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVm9sdW1lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgc2luZ2xlIG1hc3RlciBvdXRwdXQgd2hpY2ggaXMgY29ubmVjdGVkIHRvIHRoZVxuXHRcdCAqICAgICAgICAgIEF1ZGlvRGVzdGluYXRpb25Ob2RlIChha2EgeW91ciBzcGVha2VycykuXG5cdFx0ICogICAgICAgICAgSXQgcHJvdmlkZXMgdXNlZnVsIGNvbnZlbmllbmNlcyBzdWNoIGFzIHRoZSBhYmlsaXR5XG5cdFx0ICogICAgICAgICAgdG8gc2V0IHRoZSB2b2x1bWUgYW5kIG11dGUgdGhlIGVudGlyZSBhcHBsaWNhdGlvbi5cblx0XHQgKiAgICAgICAgICBJdCBhbHNvIGdpdmVzIHlvdSB0aGUgYWJpbGl0eSB0byBhcHBseSBtYXN0ZXIgZWZmZWN0cyB0byB5b3VyIGFwcGxpY2F0aW9uLlxuXHRcdCAqICAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICAgTGlrZSBUb25lLlRyYW5zcG9ydCwgQSBzaW5nbGUgVG9uZS5NYXN0ZXIgaXMgY3JlYXRlZFxuXHRcdCAqICAgICAgICAgIG9uIGluaXRpYWxpemF0aW9uIGFuZCB5b3UgZG8gbm90IG5lZWQgdG8gZXhwbGljaXRseSBjb25zdHJ1Y3Qgb25lLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHNpbmdsZXRvblxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdGhlIGF1ZGlvIHdpbGwgZ28gZnJvbSB0aGUgb3NjaWxsYXRvciB0byB0aGUgc3BlYWtlcnNcblx0XHQgKiBvc2NpbGxhdG9yLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHRcdCAqIC8vYSBjb252ZW5pZW5jZSBmb3IgY29ubmVjdGluZyB0byB0aGUgbWFzdGVyIG91dHB1dCBpcyBhbHNvIHByb3ZpZGVkOlxuXHRcdCAqIG9zY2lsbGF0b3IudG9NYXN0ZXIoKTtcblx0XHQgKiAvL3RoZSBhYm92ZSB0d28gZXhhbXBsZXMgYXJlIGVxdWl2YWxlbnQuXG5cdFx0ICovXG5cdCAgICBUb25lLk1hc3RlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIFRvbmUuZ2V0Q29udGV4dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAwKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBUaGUgcHJpdmF0ZSB2b2x1bWUgbm9kZVxuXHRcdFx0XHQgKiAgQHR5cGUgIHtUb25lLlZvbHVtZX1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlZvbHVtZSgpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogVGhlIHZvbHVtZSBvZiB0aGUgbWFzdGVyIG91dHB1dC5cblx0XHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZS52b2x1bWU7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmNoYWluKHRoaXMub3V0cHV0LCB0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NYXN0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuTWFzdGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBNdXRlIHRoZSBvdXRwdXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTWFzdGVyI1xuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vbXV0ZSB0aGUgb3V0cHV0XG5cdFx0ICogVG9uZS5NYXN0ZXIubXV0ZSA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5NYXN0ZXIucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZvbHVtZS5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGEgbWFzdGVyIGVmZmVjdHMgY2hhaW4uIE5PVEU6IHRoaXMgd2lsbCBkaXNjb25uZWN0IGFueSBub2RlcyB3aGljaCB3ZXJlIHByZXZpb3VzbHlcblx0XHQgKiAgY2hhaW5lZCBpbiB0aGUgbWFzdGVyIGVmZmVjdHMgY2hhaW4uXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9Ob2RlfFRvbmV9IGFyZ3MuLi4gQWxsIGFyZ3VtZW50cyB3aWxsIGJlIGNvbm5lY3RlZCBpbiBhIHJvd1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgTWFzdGVyIHdpbGwgYmUgcm91dGVkIHRocm91Z2ggaXQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1hc3Rlcn0gIHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NvbWUgb3ZlcmFsbCBjb21wcmVzc2lvbiB0byBrZWVwIHRoZSBsZXZlbHMgaW4gY2hlY2tcblx0XHQgKiB2YXIgbWFzdGVyQ29tcHJlc3NvciA9IG5ldyBUb25lLkNvbXByZXNzb3Ioe1xuXHRcdCAqIFx0XCJ0aHJlc2hvbGRcIiA6IC02LFxuXHRcdCAqIFx0XCJyYXRpb1wiIDogMyxcblx0XHQgKiBcdFwiYXR0YWNrXCIgOiAwLjUsXG5cdFx0ICogXHRcInJlbGVhc2VcIiA6IDAuMVxuXHRcdCAqIH0pO1xuXHRcdCAqIC8vZ2l2ZSBhIGxpdHRsZSBib29zdCB0byB0aGUgbG93c1xuXHRcdCAqIHZhciBsb3dCdW1wID0gbmV3IFRvbmUuRmlsdGVyKDIwMCwgXCJsb3dzaGVsZlwiKTtcblx0XHQgKiAvL3JvdXRlIGV2ZXJ5dGhpbmcgdGhyb3VnaCB0aGUgZmlsdGVyXG5cdFx0ICogLy9hbmQgY29tcHJlc3NvciBiZWZvcmUgZ29pbmcgdG8gdGhlIHNwZWFrZXJzXG5cdFx0ICogVG9uZS5NYXN0ZXIuY2hhaW4obG93QnVtcCwgbWFzdGVyQ29tcHJlc3Nvcik7XG5cdFx0ICovXG5cdCAgICBUb25lLk1hc3Rlci5wcm90b3R5cGUuY2hhaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jaGFpbi5hcHBseSh0aGlzLmlucHV0LCBhcmd1bWVudHMpO1xuXHQgICAgICAgIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0uY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1hc3Rlcn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWFzdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QVVHTUVOVCBUT05FJ3MgUFJPVE9UWVBFXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBDb25uZWN0ICd0aGlzJyB0byB0aGUgbWFzdGVyIG91dHB1dC4gU2hvcnRoYW5kIGZvciB0aGlzLmNvbm5lY3QoVG9uZS5NYXN0ZXIpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY29ubmVjdCBhbiBvc2NpbGxhdG9yIHRvIHRoZSBtYXN0ZXIgb3V0cHV0XG5cdFx0ICogdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS50b01hc3RlcigpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLnRvTWFzdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuY29ubmVjdChUb25lLk1hc3Rlcik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgaWYgKHdpbmRvdy5BdWRpb05vZGUpIHtcblx0ICAgICAgICAvLyBBbHNvIGF1Z21lbnQgQXVkaW9Ob2RlJ3MgcHJvdG90eXBlIHRvIGluY2x1ZGUgdG9NYXN0ZXIgYXMgYSBjb252ZW5pZW5jZVxuXHQgICAgICAgIEF1ZGlvTm9kZS5wcm90b3R5cGUudG9NYXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29ubmVjdChUb25lLk1hc3Rlcik7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICB9XG5cdCAgICAvKipcblx0XHQgKiAgaW5pdGlhbGl6ZSB0aGUgbW9kdWxlIGFuZCBsaXN0ZW4gZm9yIG5ldyBhdWRpbyBjb250ZXh0c1xuXHRcdCAqL1xuXHQgICAgdmFyIE1hc3RlckNvbnN0cnVjdG9yID0gVG9uZS5NYXN0ZXI7XG5cdCAgICBUb25lLk1hc3RlciA9IG5ldyBNYXN0ZXJDb25zdHJ1Y3RvcigpO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICAvLyBpZiBpdCBhbHJlYWR5IGV4aXN0cywganVzdCByZXN0b3JlIGl0XG5cdCAgICAgICAgaWYgKGNvbnRleHQuTWFzdGVyIGluc3RhbmNlb2YgTWFzdGVyQ29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgVG9uZS5NYXN0ZXIgPSBjb250ZXh0Lk1hc3Rlcjtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBUb25lLk1hc3RlciA9IG5ldyBNYXN0ZXJDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBjb250ZXh0Lk1hc3RlciA9IFRvbmUuTWFzdGVyO1xuXHQgICAgfSk7XG5cdCAgICBUb25lLkNvbnRleHQub24oJ2Nsb3NlJywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICBpZiAoY29udGV4dC5NYXN0ZXIgaW5zdGFuY2VvZiBNYXN0ZXJDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICBjb250ZXh0Lk1hc3Rlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gVG9uZS5NYXN0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQmFzZSBjbGFzcyBmb3Igc291cmNlcy4gU291cmNlcyBoYXZlIHN0YXJ0L3N0b3AgbWV0aG9kc1xuXHRcdCAqICAgICAgICAgIGFuZCB0aGUgYWJpbGl0eSB0byBiZSBzeW5jZWQgdG8gdGhlXG5cdFx0ICogICAgICAgICAgc3RhcnQvc3RvcCBvZiBUb25lLlRyYW5zcG9ydC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vTXVsdGlwbGUgc3RhdGUgY2hhbmdlIGV2ZW50cyBjYW4gYmUgY2hhaW5lZCB0b2dldGhlcixcblx0XHQgKiAvL2J1dCBtdXN0IGJlIHNldCBpbiB0aGUgY29ycmVjdCBvcmRlciBhbmQgd2l0aCBhc2NlbmRpbmcgdGltZXNcblx0XHQgKlxuXHRcdCAqIC8vIE9LXG5cdFx0ICogc3RhdGUuc3RhcnQoKS5zdG9wKFwiKzAuMlwiKTtcblx0XHQgKiAvLyBBTkRcblx0XHQgKiBzdGF0ZS5zdGFydCgpLnN0b3AoXCIrMC4yXCIpLnN0YXJ0KFwiKzAuNFwiKS5zdG9wKFwiKzAuN1wiKVxuXHRcdCAqXG5cdFx0ICogLy8gQkFEXG5cdFx0ICogc3RhdGUuc3RvcChcIiswLjJcIikuc3RhcnQoKTtcblx0XHQgKiAvLyBPUlxuXHRcdCAqIHN0YXRlLnN0YXJ0KFwiKzAuM1wiKS5zdG9wKFwiKzAuMlwiKTtcblx0XHQgKlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5Tb3VyY2UuZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG91dHB1dCB2b2x1bWUgbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Wb2x1bWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKG9wdGlvbnMudm9sdW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCBpbiBkZWNpYmVscy5cblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiBzb3VyY2Uudm9sdW1lLnZhbHVlID0gLTY7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZS52b2x1bWU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3ZvbHVtZScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogXHRLZWVwIHRyYWNrIG9mIHRoZSBzY2hlZHVsZWQgc3RhdGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVGltZWxpbmVTdGF0ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBuZXcgVG9uZS5UaW1lbGluZVN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUubWVtb3J5ID0gMTAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzeW5jZWQgYHN0YXJ0YCBjYWxsYmFjayBmdW5jdGlvbiBmcm9tIHRoZSB0cmFuc3BvcnRcblx0XHRcdCAqICBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N5bmNlZCA9IGZhbHNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEtlZXAgdHJhY2sgb2YgYWxsIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQgaWRzXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkID0gW107XG5cdCAgICAgICAgLy9tYWtlIHRoZSBvdXRwdXQgZXhwbGljaXRseSBzdGVyZW9cblx0ICAgICAgICB0aGlzLl92b2x1bWUub3V0cHV0Lm91dHB1dC5jaGFubmVsQ291bnQgPSAyO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5vdXRwdXQub3V0cHV0LmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgIC8vbXV0ZSBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Tb3VyY2UsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiBvciBcInN0b3BwZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Tb3VyY2UjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Tb3VyY2UucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKFRvbmUuVHJhbnNwb3J0LnNlY29uZHMpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5TdGF0ZS5TdG9wcGVkO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBNdXRlIHRoZSBvdXRwdXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU291cmNlI1xuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vbXV0ZSB0aGUgb3V0cHV0XG5cdFx0ICogc291cmNlLm11dGUgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU291cmNlLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWUubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLy9vdmVyd3JpdGUgdGhlc2UgZnVuY3Rpb25zXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuX3N0YXJ0ID0gVG9uZS5ub09wO1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnJlc3RhcnQgPSBUb25lLm5vT3A7XG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuX3N0b3AgPSBUb25lLm5vT3A7XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIHNvdXJjZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWUuIElmIG5vIHRpbWUgaXMgZ2l2ZW4sXG5cdFx0ICogIHN0YXJ0IHRoZSBzb3VyY2Ugbm93LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHNvdXJjZSBzaG91bGQgYmUgc3RhcnRlZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU291cmNlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc291cmNlLnN0YXJ0KFwiKzAuNVwiKTsgLy9zdGFydHMgdGhlIHNvdXJjZSAwLjUgc2Vjb25kcyBmcm9tIG5vd1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCwgZHVyYXRpb24pIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRpbWUpICYmIHRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnQuc2Vjb25kcztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vaWYgaXQncyBzdGFydGVkLCBzdG9wIGl0IGFuZCByZXN0YXJ0IGl0XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0YXJ0ZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLnJlc3RhcnQodGltZSwgb2Zmc2V0LCBkdXJhdGlvbik7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdGFydGVkLCB0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBvZmZzZXQgdGltZSB0byB0aGUgZXZlbnRcblx0ICAgICAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3N0YXRlLmdldCh0aW1lKTtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Lm9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuZHVyYXRpb24gPSBkdXJhdGlvbjtcblx0ICAgICAgICAgICAgICAgIHZhciBzY2hlZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKGZ1bmN0aW9uICh0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodCwgb2Zmc2V0LCBkdXJhdGlvbik7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkLnB1c2goc2NoZWQpO1xuXHQgICAgICAgICAgICAgICAgLy9pZiBpdCdzIGFscmVhZHkgc3RhcnRlZFxuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuVHJhbnNwb3J0LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zeW5jZWRTdGFydCh0aGlzLm5vdygpLCBUb25lLlRyYW5zcG9ydC5zZWNvbmRzKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIHNvdXJjZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWUuIElmIG5vIHRpbWUgaXMgZ2l2ZW4sXG5cdFx0ICogIHN0b3AgdGhlIHNvdXJjZSBub3cuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgc291cmNlIHNob3VsZCBiZSBzdG9wcGVkLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Tb3VyY2V9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzb3VyY2Uuc3RvcCgpOyAvLyBzdG9wcyB0aGUgc291cmNlIGltbWVkaWF0ZWx5XG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih0aW1lKSAmJiB0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0LnNlY29uZHM7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIXRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIHNjaGVkID0gVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUodGhpcy5fc3RvcC5iaW5kKHRoaXMpLCB0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkLnB1c2goc2NoZWQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3luYyB0aGUgc291cmNlIHRvIHRoZSBUcmFuc3BvcnQgc28gdGhhdCBhbGwgc3Vic2VxdWVudFxuXHRcdCAqICBjYWxscyB0byBgc3RhcnRgIGFuZCBgc3RvcGAgYXJlIHN5bmNlZCB0byB0aGUgVHJhbnNwb3J0VGltZVxuXHRcdCAqICBpbnN0ZWFkIG9mIHRoZSBBdWRpb0NvbnRleHQgdGltZS5cblx0XHQgKlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Tb3VyY2V9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3N5bmMgdGhlIHNvdXJjZSBzbyB0aGF0IGl0IHBsYXlzIGJldHdlZW4gMCBhbmQgMC4zIG9uIHRoZSBUcmFuc3BvcnQncyB0aW1lbGluZVxuXHRcdCAqIHNvdXJjZS5zeW5jKCkuc3RhcnQoMCkuc3RvcCgwLjMpO1xuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdGFydCgpO1xuXHRcdCAqXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHdpdGggYW4gb2Zmc2V0IGFuZCB0aGUgc3luYydlZCBzb3VyY2VzXG5cdFx0ICogLy93aWxsIHN0YXJ0IGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uXG5cdFx0ICogc291cmNlLnN5bmMoKS5zdGFydCgwLjEpO1xuXHRcdCAqIC8vdGhlIHNvdXJjZSB3aWxsIGJlIGludm9rZWQgd2l0aCBhbiBvZmZzZXQgb2YgMC40XG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RhcnQoXCIrMC41XCIsIDAuNSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zeW5jZWQgPSB0cnVlO1xuXHQgICAgICAgIHRoaXMuX3N5bmNlZFN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCkge1xuXHQgICAgICAgICAgICBpZiAob2Zmc2V0ID4gMCkge1xuXHQgICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBwbGF5YmFjayBzdGF0ZSBhdCB0aGF0IHRpbWVcblx0ICAgICAgICAgICAgICAgIHZhciBzdGF0ZUV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KG9mZnNldCk7XG5cdCAgICAgICAgICAgICAgICAvLyBsaXN0ZW4gZm9yIHN0YXJ0IGV2ZW50cyB3aGljaCBtYXkgb2NjdXIgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc3luYydlZCB0aW1lXG5cdCAgICAgICAgICAgICAgICBpZiAoc3RhdGVFdmVudCAmJiBzdGF0ZUV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgc3RhdGVFdmVudC50aW1lICE9PSBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIG9mZnNldFxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydE9mZnNldCA9IG9mZnNldCAtIHRoaXMudG9TZWNvbmRzKHN0YXRlRXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGR1cmF0aW9uO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZUV2ZW50LmR1cmF0aW9uKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoc3RhdGVFdmVudC5kdXJhdGlvbikgLSBzdGFydE9mZnNldDtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodGltZSwgdGhpcy50b1NlY29uZHMoc3RhdGVFdmVudC5vZmZzZXQpICsgc3RhcnRPZmZzZXQsIGR1cmF0aW9uKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zeW5jZWRTdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdmFyIHNlY29uZHMgPSBUb25lLlRyYW5zcG9ydC5nZXRTZWNvbmRzQXRUaW1lKE1hdGgubWF4KHRpbWUgLSB0aGlzLnNhbXBsZVRpbWUsIDApKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHNlY29uZHMpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0b3AodGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQub24oJ3N0YXJ0IGxvb3BTdGFydCcsIHRoaXMuX3N5bmNlZFN0YXJ0KTtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5vbignc3RvcCBwYXVzZSBsb29wRW5kJywgdGhpcy5fc3luY2VkU3RvcCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFVuc3luYyB0aGUgc291cmNlIHRvIHRoZSBUcmFuc3BvcnQuIFNlZSBUb25lLlNvdXJjZS5zeW5jXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNvdXJjZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9mZignc3RvcCBwYXVzZSBsb29wRW5kJywgdGhpcy5fc3luY2VkU3RvcCk7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9mZignc3RhcnQgbG9vcFN0YXJ0JywgdGhpcy5fc3luY2VkU3RhcnQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zeW5jZWQgPSBmYWxzZTtcblx0ICAgICAgICAvLyBjbGVhciBhbGwgb2YgdGhlIHNjaGVkdWxlZCBpZHNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NjaGVkdWxlZC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLl9zY2hlZHVsZWRbaV07XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKGlkKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkID0gW107XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKDApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqXHRDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5Tb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy51bnN5bmMoKTtcblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU291cmNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQXVkaW9CdWZmZXIuY29weVRvL0Zyb21DaGFubmVsIHBvbHlmaWxsXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICBpZiAoIUF1ZGlvQnVmZmVyLnByb3RvdHlwZS5jb3B5VG9DaGFubmVsKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQnVmZmVyLnByb3RvdHlwZS5jb3B5VG9DaGFubmVsID0gZnVuY3Rpb24gKHNyYywgY2hhbk51bSwgc3RhcnQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gdGhpcy5nZXRDaGFubmVsRGF0YShjaGFuTnVtKTtcblx0ICAgICAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnQgfHwgMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbm5lbC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaSArIHN0YXJ0XSA9IHNyY1tpXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgQXVkaW9CdWZmZXIucHJvdG90eXBlLmNvcHlGcm9tQ2hhbm5lbCA9IGZ1bmN0aW9uIChkZXN0LCBjaGFuTnVtLCBzdGFydCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSB0aGlzLmdldENoYW5uZWxEYXRhKGNoYW5OdW0pO1xuXHQgICAgICAgICAgICAgICAgc3RhcnQgPSBzdGFydCB8fCAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXN0Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZGVzdFtpXSA9IGNoYW5uZWxbaSArIHN0YXJ0XTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQnVmZmVyIGxvYWRpbmcgYW5kIHN0b3JhZ2UuIFRvbmUuQnVmZmVyIGlzIHVzZWQgaW50ZXJuYWxseSBieSBhbGxcblx0XHQgKiAgICAgICAgICBjbGFzc2VzIHRoYXQgbWFrZSByZXF1ZXN0cyBmb3IgYXVkaW8gZmlsZXMgc3VjaCBhcyBUb25lLlBsYXllcixcblx0XHQgKiAgICAgICAgICBUb25lLlNhbXBsZXIgYW5kIFRvbmUuQ29udm9sdmVyLlxuXHRcdCAqXG5cdFx0ICogICAgICAgICAgQXNpZGUgZnJvbSBsb2FkIGNhbGxiYWNrcyBmcm9tIGluZGl2aWR1YWwgYnVmZmVycywgVG9uZS5CdWZmZXJcblx0XHQgKiAgXHRcdHByb3ZpZGVzIGV2ZW50cyB3aGljaCBrZWVwIHRyYWNrIG9mIHRoZSBsb2FkaW5nIHByb2dyZXNzXG5cdFx0ICogIFx0XHRvZiBfYWxsXyBvZiB0aGUgYnVmZmVycy4gVGhlc2UgYXJlIFRvbmUuQnVmZmVyLm9uKFwibG9hZFwiIC8gXCJwcm9ncmVzc1wiIC8gXCJlcnJvclwiKVxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtBdWRpb0J1ZmZlcnxTdHJpbmd9IHVybCBUaGUgdXJsIHRvIGxvYWQsIG9yIHRoZSBhdWRpbyBidWZmZXIgdG8gc2V0LlxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9uPX0gb25sb2FkIEEgY2FsbGJhY2sgd2hpY2ggaXMgaW52b2tlZCBhZnRlciB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSBgVG9uZS5CdWZmZXIub24oJ2xvYWQnLCBjYWxsYmFjaylgIGluc3RlYWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5jZSBpdCB3aWxsIGdpdmUgeW91IGEgY2FsbGJhY2sgd2hlbiBfYWxsXyBidWZmZXJzIGFyZSBsb2FkZWQuXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb249fSBvbmVycm9yIFRoZSBjYWxsYmFjayB0byBpbnZva2UgaWYgdGhlcmUgaXMgYW4gZXJyb3Jcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKFwicGF0aC90by9zb3VuZC5tcDNcIiwgZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vdGhlIGJ1ZmZlciBpcyBub3cgYXZhaWxhYmxlLlxuXHRcdCAqIFx0dmFyIGJ1ZmYgPSBidWZmZXIuZ2V0KCk7XG5cdFx0ICogfSk7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jYW4gbG9hZCBwcm92aWRlIGZhbGxiYWNrIGV4dGVuc2lvbiB0eXBlcyBpZiB0aGUgZmlyc3QgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLlxuXHRcdCAqIHZhciBidWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIoXCJwYXRoL3RvL3NvdW5kLlttcDN8b2dnfHdhdl1cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd1cmwnLFxuXHQgICAgICAgICAgICAnb25sb2FkJyxcblx0ICAgICAgICAgICAgJ29uZXJyb3InXG5cdCAgICAgICAgXSwgVG9uZS5CdWZmZXIpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzdG9yZXMgdGhlIGxvYWRlZCBBdWRpb0J1ZmZlclxuXHRcdFx0ICogIEB0eXBlIHtBdWRpb0J1ZmZlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpbmRpY2F0ZXMgaWYgdGhlIGJ1ZmZlciBzaG91bGQgYmUgcmV2ZXJzZWQgb3Igbm90XG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3JldmVyc2VkID0gb3B0aW9ucy5yZXZlcnNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBYSFJcblx0XHRcdCAqICBAdHlwZSAge1hNTEh0dHBSZXF1ZXN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl94aHIgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogUHJpdmF0ZSBjYWxsYmFjayB3aGVuIHRoZSBidWZmZXIgaXMgbG9hZGVkLlxuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29ubG9hZCA9IFRvbmUubm9PcDtcblx0ICAgICAgICBpZiAob3B0aW9ucy51cmwgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlciB8fCBvcHRpb25zLnVybCBpbnN0YW5jZW9mIFRvbmUuQnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0KG9wdGlvbnMudXJsKTtcblx0ICAgICAgICAgICAgLy8gaW52b2tlIHRoZSBvbmxvYWQgY2FsbGJhY2tcblx0ICAgICAgICAgICAgaWYgKG9wdGlvbnMub25sb2FkKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9ubG9hZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25sb2FkID0gb3B0aW9ucy5vbmxvYWQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcob3B0aW9ucy51cmwpKSB7XG5cdCAgICAgICAgICAgIHRoaXMubG9hZChvcHRpb25zLnVybCkudGhlbihvcHRpb25zLm9ubG9hZCkuY2F0Y2gob3B0aW9ucy5vbmVycm9yKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5CdWZmZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd1cmwnOiB1bmRlZmluZWQsXG5cdCAgICAgICAgJ3JldmVyc2UnOiBmYWxzZSxcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdvbmVycm9yJzogVG9uZS5ub09wXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBhc3MgaW4gYW4gQXVkaW9CdWZmZXIgb3IgVG9uZS5CdWZmZXIgdG8gc2V0IHRoZSB2YWx1ZVxuXHRcdCAqICBvZiB0aGlzIGJ1ZmZlci5cblx0XHQgKiAgQHBhcmFtIHtBdWRpb0J1ZmZlcnxUb25lLkJ1ZmZlcn0gYnVmZmVyIHRoZSBidWZmZXJcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQnVmZmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgIGlmIChidWZmZXIgaW5zdGFuY2VvZiBUb25lLkJ1ZmZlcikge1xuXHQgICAgICAgICAgICBpZiAoYnVmZmVyLmxvYWRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fYnVmZmVyID0gYnVmZmVyLmdldCgpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyLl9vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoYnVmZmVyKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbmxvYWQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIgPSBidWZmZXI7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAcmV0dXJuIHtBdWRpb0J1ZmZlcn0gVGhlIGF1ZGlvIGJ1ZmZlciBzdG9yZWQgaW4gdGhlIG9iamVjdC5cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTWFrZXMgYW4geGhyIHJlcWVzdCBmb3IgdGhlIHNlbGVjdGVkIHVybCB0aGVuIGRlY29kZXNcblx0XHQgKiAgdGhlIGZpbGUgYXMgYW4gYXVkaW8gYnVmZmVyLiBJbnZva2VzXG5cdFx0ICogIHRoZSBjYWxsYmFjayBvbmNlIHRoZSBhdWRpbyBidWZmZXIgbG9hZHMuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgYnVmZmVyIHRvIGxvYWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgZmlsZXR5cGUgc3VwcG9ydCBkZXBlbmRzIG9uIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXIuXG5cdFx0ICogIEByZXR1cm5zIHtQcm9taXNlfSByZXR1cm5zIGEgUHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aXRoIHRoZSBUb25lLkJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAodXJsLCBvbmxvYWQsIG9uZXJyb3IpIHtcblx0ICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChsb2FkLCBlcnJvcikge1xuXHQgICAgICAgICAgICB0aGlzLl94aHIgPSBUb25lLkJ1ZmZlci5sb2FkKHVybCwgLy9zdWNjZXNzXG5cdCAgICAgICAgICAgIGZ1bmN0aW9uIChidWZmKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl94aHIgPSBudWxsO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zZXQoYnVmZik7XG5cdCAgICAgICAgICAgICAgICBsb2FkKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb25sb2FkKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgaWYgKG9ubG9hZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIG9ubG9hZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCAvL2Vycm9yXG5cdCAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3hociA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICBlcnJvcihlcnIpO1xuXHQgICAgICAgICAgICAgICAgaWYgKG9uZXJyb3IpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvbmVycm9yKGVycik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICByZXR1cm4gcHJvbWlzZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZSBhbmQgZGlzY29ubmVjdFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5CdWZmZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIGlmICh0aGlzLl94aHIpIHtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHRoaXMuX3hocik7XG5cdCAgICAgICAgICAgIHRoaXMuX3hoci5hYm9ydCgpO1xuXHQgICAgICAgICAgICB0aGlzLl94aHIgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiB0aGUgYnVmZmVyIGlzIGxvYWRlZCBvciBub3Rcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9hZGVkXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXIucHJvdG90eXBlLCAnbG9hZGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggPiAwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGR1cmF0aW9uIG9mIHRoZSBidWZmZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgZHVyYXRpb25cblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlci5wcm90b3R5cGUsICdkdXJhdGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2J1ZmZlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5kdXJhdGlvbjtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgaW4gc2FtcGxlc1xuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIGxlbmd0aFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyLnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2J1ZmZlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBkaXNjcmV0ZSBhdWRpbyBjaGFubmVscy4gUmV0dXJucyAwIGlmIG5vIGJ1ZmZlclxuXHRcdCAqIGlzIGxvYWRlZC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBudW1iZXJPZkNoYW5uZWxzXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXIucHJvdG90eXBlLCAnbnVtYmVyT2ZDaGFubmVscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2J1ZmZlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5udW1iZXJPZkNoYW5uZWxzO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIGF1ZGlvIGJ1ZmZlciBmcm9tIHRoZSBhcnJheS4gVG8gY3JlYXRlIGEgbXVsdGljaGFubmVsIEF1ZGlvQnVmZmVyLFxuXHRcdCAqICBwYXNzIGluIGEgbXVsdGlkaW1lbnNpb25hbCBhcnJheS5cblx0XHQgKiAgQHBhcmFtIHtGbG9hdDMyQXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmaWxsIHRoZSBhdWRpbyBidWZmZXJcblx0XHQgKiAgQHJldHVybiB7VG9uZS5CdWZmZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpIHtcblx0ICAgICAgICB2YXIgaXNNdWx0aWRpbWVuc2lvbmFsID0gYXJyYXlbMF0ubGVuZ3RoID4gMDtcblx0ICAgICAgICB2YXIgY2hhbm5lbHMgPSBpc011bHRpZGltZW5zaW9uYWwgPyBhcnJheS5sZW5ndGggOiAxO1xuXHQgICAgICAgIHZhciBsZW4gPSBpc011bHRpZGltZW5zaW9uYWwgPyBhcnJheVswXS5sZW5ndGggOiBhcnJheS5sZW5ndGg7XG5cdCAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXIoY2hhbm5lbHMsIGxlbiwgdGhpcy5jb250ZXh0LnNhbXBsZVJhdGUpO1xuXHQgICAgICAgIGlmICghaXNNdWx0aWRpbWVuc2lvbmFsICYmIGNoYW5uZWxzID09PSAxKSB7XG5cdCAgICAgICAgICAgIGFycmF5ID0gW2FycmF5XTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBjaGFubmVsczsgYysrKSB7XG5cdCAgICAgICAgICAgIGJ1ZmZlci5jb3B5VG9DaGFubmVsKGFycmF5W2NdLCBjKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gYnVmZmVyO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0U3VtcyBtdWxpcGxlIGNoYW5uZWxzIGludG8gMSBjaGFubmVsXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gY2hhbm5lbCBPcHRpb25hbGx5IG9ubHkgY29weSBhIHNpbmdsZSBjaGFubmVsIGZyb20gdGhlIGFycmF5LlxuXHRcdCAqICBAcmV0dXJuIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS50b01vbm8gPSBmdW5jdGlvbiAoY2hhbk51bSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKGNoYW5OdW0pKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZnJvbUFycmF5KHRoaXMudG9BcnJheShjaGFuTnVtKSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIG91dHB1dEFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmxlbmd0aCk7XG5cdCAgICAgICAgICAgIHZhciBudW1DaGFubmVscyA9IHRoaXMubnVtYmVyT2ZDaGFubmVscztcblx0ICAgICAgICAgICAgZm9yICh2YXIgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBudW1DaGFubmVsczsgY2hhbm5lbCsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbEFycmF5ID0gdGhpcy50b0FycmF5KGNoYW5uZWwpO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFubmVsQXJyYXkubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBvdXRwdXRBcnJheVtpXSArPSBjaGFubmVsQXJyYXlbaV07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9kaXZpZGUgYnkgdGhlIG51bWJlciBvZiBjaGFubmVsc1xuXHQgICAgICAgICAgICBvdXRwdXRBcnJheSA9IG91dHB1dEFycmF5Lm1hcChmdW5jdGlvbiAoc2FtcGxlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gc2FtcGxlIC8gbnVtQ2hhbm5lbHM7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB0aGlzLmZyb21BcnJheShvdXRwdXRBcnJheSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0R2V0IHRoZSBidWZmZXIgYXMgYW4gYXJyYXkuIFNpbmdsZSBjaGFubmVsIGJ1ZmZlcnMgd2lsbCByZXR1cm4gYSAxLWRpbWVuc2lvbmFsXG5cdFx0ICogXHRGbG9hdDMyQXJyYXksIGFuZCBtdWx0aWNoYW5uZWwgYnVmZmVycyB3aWxsIHJldHVybiBtdWx0aWRpbWVuc2lvbmFsIGFycmF5cy5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXI9fSBjaGFubmVsIE9wdGlvbmFsbHkgb25seSBjb3B5IGEgc2luZ2xlIGNoYW5uZWwgZnJvbSB0aGUgYXJyYXkuXG5cdFx0ICogIEByZXR1cm4ge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoY2hhbm5lbCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKGNoYW5uZWwpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENoYW5uZWxEYXRhKGNoYW5uZWwpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5udW1iZXJPZkNoYW5uZWxzID09PSAxKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnRvQXJyYXkoMCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIHJldCA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IHRoaXMubnVtYmVyT2ZDaGFubmVsczsgYysrKSB7XG5cdCAgICAgICAgICAgICAgICByZXRbY10gPSB0aGlzLmdldENoYW5uZWxEYXRhKGMpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiByZXQ7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBGbG9hdDMyQXJyYXkgcmVwcmVzZW50aW5nIHRoZSBQQ00gYXVkaW8gZGF0YSBmb3IgdGhlIHNwZWNpZmljIGNoYW5uZWwuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIGNoYW5uZWwgIFRoZSBjaGFubmVsIG51bWJlciB0byByZXR1cm5cblx0XHQgKiAgQHJldHVybiAge0Zsb2F0MzJBcnJheX0gIFRoZSBhdWRpbyBhcyBhIFR5cGVkQXJyYXlcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5nZXRDaGFubmVsRGF0YSA9IGZ1bmN0aW9uIChjaGFubmVsKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5nZXRDaGFubmVsRGF0YShjaGFubmVsKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ3V0IGEgc3Vic2VjdGlvbiBvZiB0aGUgYXJyYXkgYW5kIHJldHVybiBhIGJ1ZmZlciBvZiB0aGVcblx0XHQgKiAgc3Vic2VjdGlvbi4gRG9lcyBub3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCBidWZmZXJcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBzdGFydCBUaGUgdGltZSB0byBzdGFydCB0aGUgc2xpY2Vcblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gZW5kIFRoZSBlbmQgdGltZSB0byBzbGljZS4gSWYgbm9uZSBpcyBnaXZlblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgd2lsbCBkZWZhdWx0IHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkJ1ZmZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gKHN0YXJ0LCBlbmQpIHtcblx0ICAgICAgICBlbmQgPSBUb25lLmRlZmF1bHRBcmcoZW5kLCB0aGlzLmR1cmF0aW9uKTtcblx0ICAgICAgICB2YXIgc3RhcnRTYW1wbGVzID0gTWF0aC5mbG9vcih0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZSAqIHRoaXMudG9TZWNvbmRzKHN0YXJ0KSk7XG5cdCAgICAgICAgdmFyIGVuZFNhbXBsZXMgPSBNYXRoLmZsb29yKHRoaXMuY29udGV4dC5zYW1wbGVSYXRlICogdGhpcy50b1NlY29uZHMoZW5kKSk7XG5cdCAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gW107XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm51bWJlck9mQ2hhbm5lbHM7IGkrKykge1xuXHQgICAgICAgICAgICByZXBsYWNlbWVudFtpXSA9IHRoaXMudG9BcnJheShpKS5zbGljZShzdGFydFNhbXBsZXMsIGVuZFNhbXBsZXMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmV0QnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKCkuZnJvbUFycmF5KHJlcGxhY2VtZW50KTtcblx0ICAgICAgICByZXR1cm4gcmV0QnVmZmVyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXZlcnNlIHRoZSBidWZmZXIuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQnVmZmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuX3JldmVyc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMubG9hZGVkKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1iZXJPZkNoYW5uZWxzOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwodGhpcy5nZXRDaGFubmVsRGF0YShpKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV2ZXJzZSB0aGUgYnVmZmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSByZXZlcnNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXIucHJvdG90eXBlLCAncmV2ZXJzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldmVyc2VkO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmV2KSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9yZXZlcnNlZCAhPT0gcmV2KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZXZlcnNlZCA9IHJldjtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JldmVyc2UoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBTVEFUSUMgTUVUSE9EU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL3N0YXRpY2FsbHkgaW5oZXJpdHMgRW1pdHRlciBtZXRob2RzXG5cdCAgICBUb25lLkVtaXR0ZXIubWl4aW4oVG9uZS5CdWZmZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBzdGF0aWMgcXVldWUgZm9yIGFsbCBvZiB0aGUgeGhyIHJlcXVlc3RzXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlID0gW107XG5cdCAgICAvKipcblx0XHQgKiAgQSBwYXRoIHdoaWNoIGlzIHByZWZpeGVkIGJlZm9yZSBldmVyeSB1cmwuXG5cdFx0ICogIEB0eXBlICB7U3RyaW5nfVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5iYXNlVXJsID0gJyc7XG5cdCAgICAvKipcblx0XHQgKiAgQ3JlYXRlIGEgVG9uZS5CdWZmZXIgZnJvbSB0aGUgYXJyYXkuIFRvIGNyZWF0ZSBhIG11bHRpY2hhbm5lbCBBdWRpb0J1ZmZlcixcblx0XHQgKiAgcGFzcyBpbiBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXkuXG5cdFx0ICogIEBwYXJhbSB7RmxvYXQzMkFycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmlsbCB0aGUgYXVkaW8gYnVmZmVyXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQnVmZmVyfSBBIFRvbmUuQnVmZmVyIGNyZWF0ZWQgZnJvbSB0aGUgYXJyYXlcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSkge1xuXHQgICAgICAgIHJldHVybiBuZXcgVG9uZS5CdWZmZXIoKS5mcm9tQXJyYXkoYXJyYXkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENyZWF0ZXMgYSBUb25lLkJ1ZmZlciBmcm9tIGEgVVJMLCByZXR1cm5zIGEgcHJvbWlzZVxuXHRcdCAqIHdoaWNoIHJlc29sdmVzIHRvIGEgVG9uZS5CdWZmZXJcblx0XHQgKiBAcGFyYW0gIHtTdHJpbmd9IHVybCBUaGUgdXJsIHRvIGxvYWQuXG5cdFx0ICogQHJldHVybiB7UHJvbWlzZTxUb25lLkJ1ZmZlcj59ICAgICBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgdG8gYSBUb25lLkJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuZnJvbVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcblx0ICAgICAgICB2YXIgYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKCk7XG5cdCAgICAgICAgcmV0dXJuIGJ1ZmZlci5sb2FkKHVybCkudGhlbihmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVtb3ZlIGFuIHhociByZXF1ZXN0IGZyb20gdGhlIGRvd25sb2FkIHF1ZXVlXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZSA9IGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUuaW5kZXhPZihyZXF1ZXN0KTtcblx0ICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBMb2FkcyBhIHVybCB1c2luZyBYTUxIdHRwUmVxdWVzdC5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHVybFxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBvbmxvYWRcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gb25lcnJvclxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBvbnByb2dyZXNzXG5cdFx0ICogIEByZXR1cm4ge1hNTEh0dHBSZXF1ZXN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIubG9hZCA9IGZ1bmN0aW9uICh1cmwsIG9ubG9hZCwgb25lcnJvcikge1xuXHQgICAgICAgIC8vZGVmYXVsdFxuXHQgICAgICAgIG9ubG9hZCA9IFRvbmUuZGVmYXVsdEFyZyhvbmxvYWQsIFRvbmUubm9PcCk7XG5cdCAgICAgICAgLy8gdGVzdCBpZiB0aGUgdXJsIGNvbnRhaW5zIG11bHRpcGxlIGV4dGVuc2lvbnNcblx0ICAgICAgICB2YXIgbWF0Y2hlcyA9IHVybC5tYXRjaCgvXFxbKC4rXFx8PykrXFxdJC8pO1xuXHQgICAgICAgIGlmIChtYXRjaGVzKSB7XG5cdCAgICAgICAgICAgIHZhciBleHRlbnNpb25zID0gbWF0Y2hlc1sxXS5zcGxpdCgnfCcpO1xuXHQgICAgICAgICAgICB2YXIgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uc1swXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRlbnNpb25zLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5CdWZmZXIuc3VwcG9ydHNUeXBlKGV4dGVuc2lvbnNbaV0pKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uc1tpXTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShtYXRjaGVzWzBdLCBleHRlbnNpb24pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBvbkVycm9yKGUpIHtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHJlcXVlc3QpO1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5lbWl0KCdlcnJvcicsIGUpO1xuXHQgICAgICAgICAgICBpZiAob25lcnJvcikge1xuXHQgICAgICAgICAgICAgICAgb25lcnJvcihlKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gb25Qcm9ncmVzcygpIHtcblx0ICAgICAgICAgICAgLy9jYWxjdWxhdGUgdGhlIHByb2dyZXNzXG5cdCAgICAgICAgICAgIHZhciB0b3RhbFByb2dyZXNzID0gMDtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdG90YWxQcm9ncmVzcyArPSBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZVtpXS5wcm9ncmVzcztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5lbWl0KCdwcm9ncmVzcycsIHRvdGFsUHJvZ3Jlc3MgLyBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5sZW5ndGgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXHQgICAgICAgIHJlcXVlc3Qub3BlbignR0VUJywgVG9uZS5CdWZmZXIuYmFzZVVybCArIHVybCwgdHJ1ZSk7XG5cdCAgICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInO1xuXHQgICAgICAgIC8vc3RhcnQgb3V0IGFzIDBcblx0ICAgICAgICByZXF1ZXN0LnByb2dyZXNzID0gMDtcblx0ICAgICAgICBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5wdXNoKHJlcXVlc3QpO1xuXHQgICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAyMDApIHtcblx0ICAgICAgICAgICAgICAgIFRvbmUuY29udGV4dC5kZWNvZGVBdWRpb0RhdGEocmVxdWVzdC5yZXNwb25zZSkudGhlbihmdW5jdGlvbiAoYnVmZikge1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QucHJvZ3Jlc3MgPSAxO1xuXHQgICAgICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3MoKTtcblx0ICAgICAgICAgICAgICAgICAgICBvbmxvYWQoYnVmZik7XG5cdCAgICAgICAgICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHJlcXVlc3QpO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5sZW5ndGggPT09IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy9lbWl0IHRoZSBldmVudCBhdCB0aGUgZW5kXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIFRvbmUuQnVmZmVyLmVtaXQoJ2xvYWQnKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHJlcXVlc3QpO1xuXHQgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoJ1RvbmUuQnVmZmVyOiBjb3VsZCBub3QgZGVjb2RlIGF1ZGlvIGRhdGE6ICcgKyB1cmwpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBvbkVycm9yKCdUb25lLkJ1ZmZlcjogY291bGQgbm90IGxvY2F0ZSBmaWxlOiAnICsgdXJsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcblx0ICAgICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGlmIChldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG5cdCAgICAgICAgICAgICAgICAvL29ubHkgZ28gdG8gOTUlLCB0aGUgbGFzdCA1JSBpcyB3aGVuIHRoZSBhdWRpbyBpcyBkZWNvZGVkXG5cdCAgICAgICAgICAgICAgICByZXF1ZXN0LnByb2dyZXNzID0gZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwgKiAwLjk1O1xuXHQgICAgICAgICAgICAgICAgb25Qcm9ncmVzcygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmVxdWVzdC5zZW5kKCk7XG5cdCAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgYWxsIG9mIHRoZSBkb3dubG9hZHMgaW4gcHJvZ3Jlc3Ncblx0XHQgKiAgQHJldHVybiB7VG9uZS5CdWZmZXJ9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmNhbmNlbERvd25sb2FkcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24gKHJlcXVlc3QpIHtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHJlcXVlc3QpO1xuXHQgICAgICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuQnVmZmVyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDaGVja3MgYSB1cmwncyBleHRlbnNpb24gdG8gc2VlIGlmIHRoZSBjdXJyZW50IGJyb3dzZXIgY2FuIHBsYXkgdGhhdCBmaWxlIHR5cGUuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIHVybC9leHRlbnNpb24gdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJuIHtCb29sZWFufSBJZiB0aGUgZmlsZSBleHRlbnNpb24gY2FuIGJlIHBsYXllZFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5CdWZmZXIuc3VwcG9ydHNUeXBlKFwid2F2XCIpOyAvL3JldHVybnMgdHJ1ZVxuXHRcdCAqIFRvbmUuQnVmZmVyLnN1cHBvcnRzVHlwZShcInBhdGgvdG8vZmlsZS53YXZcIik7IC8vcmV0dXJucyB0cnVlXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5zdXBwb3J0c1R5cGUgPSBmdW5jdGlvbiAodXJsKSB7XG5cdCAgICAgICAgdmFyIGV4dGVuc2lvbiA9IHVybC5zcGxpdCgnLicpO1xuXHQgICAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbltleHRlbnNpb24ubGVuZ3RoIC0gMV07XG5cdCAgICAgICAgdmFyIHJlc3BvbnNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXVkaW8nKS5jYW5QbGF5VHlwZSgnYXVkaW8vJyArIGV4dGVuc2lvbik7XG5cdCAgICAgICAgcmV0dXJuIHJlc3BvbnNlICE9PSAnJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyBhIFByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2hlbiBhbGwgb2YgdGhlIGJ1ZmZlcnMgaGF2ZSBsb2FkZWRcblx0XHQgKiAgQHJldHVybiB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUubG9hZGVkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvbmxvYWQsIG9uZXJyb3I7XG5cdCAgICAgICAgZnVuY3Rpb24gcmVtb3ZlRXZlbnRzKCkge1xuXHQgICAgICAgICAgICAvL3JlbW92ZSB0aGUgZXZlbnRzIHdoZW4gaXQncyByZXNvbHZlZFxuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5vZmYoJ2xvYWQnLCBvbmxvYWQpO1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5vZmYoJ2Vycm9yJywgb25lcnJvcik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoc3VjY2VzcywgZmFpbCkge1xuXHQgICAgICAgICAgICBvbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICBzdWNjZXNzKCk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIG9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICBmYWlsKCk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIC8vYWRkIHRoZSBldmVudCBsaXN0ZW5lcnNcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIub24oJ2xvYWQnLCBvbmxvYWQpO1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5vbignZXJyb3InLCBvbmVycm9yKTtcblx0ICAgICAgICB9KS50aGVuKHJlbW92ZUV2ZW50cykuY2F0Y2goZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgICAgcmVtb3ZlRXZlbnRzKCk7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5CdWZmZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBmaXJlLWFuZC1mb3JnZXQgT3NjaWxsYXRvck5vZGUuIEFkZHMgdGhlXG5cdFx0ICogICAgIGFiaWxpdHkgdG8gcmVzY2hlZHVsZSB0aGUgc3RvcCBtZXRob2QuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtICB7QXVkaW9CdWZmZXJ8VG9uZS5CdWZmZXJ9ICBidWZmZXIgICBUaGUgYnVmZmVyIHRvIHBsYXlcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBvbmxvYWQgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZSdcblx0ICAgICAgICBdLCBUb25lLk9zY2lsbGF0b3JOb2RlKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGhlXG5cdFx0XHQgKiAgYnVmZmVyIHNvdXJjZSBpcyBkb25lIHBsYXlpbmcuXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub25lbmRlZCA9IG9wdGlvbnMub25lbmRlZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvciBzdGFydCB0aW1lXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yIHN0b3AgdGltZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdG9wVGltZSA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIG5vZGUgd2hpY2ggZW52ZWxvcGVzIHRoZSBPc2NpbGxhdG9yTm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9nYWluTm9kZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlICB7T3NjaWxsYXRvck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSB0aGlzLmNvbnRleHQuY3JlYXRlT3NjaWxsYXRvcigpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY29ubmVjdCh0aGlzLl9nYWluTm9kZSk7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuUGFyYW0odGhpcy5fb3NjaWxsYXRvci5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LnZhbHVlID0gb3B0aW9ucy5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5QYXJhbSh0aGlzLl9vc2NpbGxhdG9yLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICB0aGlzLmRldHVuZS52YWx1ZSA9IG9wdGlvbnMuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZSB0aGF0IHRoZSBidWZmZXIgcmFtcHMgdG9cblx0XHRcdCAqICBAdHlwZSB7R2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ2FpbiA9IDE7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Pc2NpbGxhdG9yTm9kZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiA0NDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ29uZW5kZWQnOiBUb25lLm5vT3Bcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIG9zY2lsbGF0b3IsIGVpdGhlciBcInN0YXJ0ZWRcIiBvciBcInN0b3BwZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Pc2NpbGxhdG9yTm9kZSNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGF0ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHBsYXliYWNrIHN0YXRlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBUaGUgdGltZSB0byB0ZXN0IHRoZSBzdGF0ZSBhdFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5TdGF0ZX0gIFRoZSBwbGF5YmFjayBzdGF0ZS4gXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5nZXRTdGF0ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgIT09IC0xICYmIHRpbWUgPj0gdGhpcy5fc3RhcnRUaW1lICYmICh0aGlzLl9zdG9wVGltZSA9PT0gLTEgfHwgdGltZSA8PSB0aGlzLl9zdG9wVGltZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuU3RhdGUuU3RhcnRlZDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5TdGF0ZS5TdG9wcGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0ICAgICAqIFN0YXJ0IHRoZSBvc2NpbGxhdG9yIG5vZGUgYXQgdGhlIGdpdmVuIHRpbWVcblx0ICAgICAqIEBwYXJhbSAge1RpbWU9fSB0aW1lIFdoZW4gdG8gc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0ICAgICAqIEByZXR1cm4ge09zY2lsbGF0b3JOb2RlfSAgICAgIHRoaXNcblx0ICAgICAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgPT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KHRoaXMuX3N0YXJ0VGltZSk7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWU7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKG5vdyk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgbm93KTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgxLCB0aGlzLl9zdGFydFRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IGNhbGwgT3NjaWxsYXRvck5vZGUuc3RhcnQgbW9yZSB0aGFuIG9uY2UnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdCAgICAgKiBTZXRzIGFuIGFyYml0cmFyeSBjdXN0b20gcGVyaW9kaWMgd2F2ZWZvcm0gZ2l2ZW4gYSBQZXJpb2RpY1dhdmUuXG5cdCAgICAgKiBAcGFyYW0gIHtQZXJpb2RpY1dhdmV9IHBlcmlvZGljV2F2ZSBQZXJpb2RpY1dhdmUgc2hvdWxkIGJlIGNyZWF0ZWQgd2l0aCBjb250ZXh0LmNyZWF0ZVBlcmlvZGljV2F2ZVxuXHQgICAgICogQHJldHVybiB7T3NjaWxsYXRvck5vZGV9IHRoaXNcblx0ICAgICAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc2V0UGVyaW9kaWNXYXZlID0gZnVuY3Rpb24gKHBlcmlvZGljV2F2ZSkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc2V0UGVyaW9kaWNXYXZlKHBlcmlvZGljV2F2ZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdCAgICAgKiBTdG9wIHRoZSBvc2NpbGxhdG9yIG5vZGUgYXQgdGhlIGdpdmVuIHRpbWVcblx0ICAgICAqIEBwYXJhbSAge1RpbWU9fSB0aW1lIFdoZW4gdG8gc3RvcCB0aGUgb3NjaWxsYXRvclxuXHQgICAgICogQHJldHVybiB7T3NjaWxsYXRvck5vZGV9ICAgICAgdGhpc1xuXHQgICAgICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL2NhbmNlbCB0aGUgcHJldmlvdXMgc3RvcFxuXHQgICAgICAgIHRoaXMuY2FuY2VsU3RvcCgpO1xuXHQgICAgICAgIC8vcmVzY2hlZHVsZSBpdFxuXHQgICAgICAgIHRoaXMuX3N0b3BUaW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCB0aGlzLl9zdG9wVGltZSk7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0ID0gdGhpcy5jb250ZXh0LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0b3AodGhpcy5ub3coKSk7XG5cdCAgICAgICAgICAgIHRoaXMub25lbmRlZCgpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5fc3RvcFRpbWUgLSB0aGlzLm5vdygpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGEgc2NoZWR1bGVkIHN0b3AgZXZlbnRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuT3NjaWxsYXRvck5vZGV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5jYW5jZWxTdG9wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIC8vY2FuY2VsIHRoZSBzdG9wIGVudmVsb3BlXG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRoaXMuX3N0YXJ0VGltZSArIHRoaXMuc2FtcGxlVGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMSwgTWF0aC5tYXgodGhpcy5ub3coKSwgdGhpcy5fc3RhcnRUaW1lKSk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3BUaW1lID0gLTE7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvc2NpbGxhdG9yIHR5cGUuIEVpdGhlciAnc2luZScsICdzYXd0b290aCcsICdzcXVhcmUnLCBvciAndHJpYW5nbGUnXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT3NjaWxsYXRvck5vZGUjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuT3NjaWxsYXRvck5vZGV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm9uZW5kZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk9zY2lsbGF0b3JOb2RlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Pc2NpbGxhdG9yIHN1cHBvcnRzIGEgbnVtYmVyIG9mIGZlYXR1cmVzIGluY2x1ZGluZ1xuXHRcdCAqICAgICAgICAgcGhhc2Ugcm90YXRpb24sIG11bHRpcGxlIG9zY2lsbGF0b3IgdHlwZXMgKHNlZSBUb25lLk9zY2lsbGF0b3IudHlwZSksXG5cdFx0ICogICAgICAgICBhbmQgVHJhbnNwb3J0IHN5bmNpbmcgKHNlZSBUb25lLk9zY2lsbGF0b3Iuc3luY0ZyZXF1ZW5jeSkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IFtmcmVxdWVuY3ldIFN0YXJ0aW5nIGZyZXF1ZW5jeVxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ30gW3R5cGVdIFRoZSBvc2NpbGxhdG9yIHR5cGUuIFJlYWQgbW9yZSBhYm91dCB0eXBlIGJlbG93LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbWFrZSBhbmQgc3RhcnQgYSA0NDBoeiBzaW5lIHRvbmVcblx0XHQgKiB2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcig0NDAsIFwic2luZVwiKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5Pc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtYWluIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7T3NjaWxsYXRvck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2wgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcGVyaW9kaWMgd2F2ZVxuXHRcdFx0ICogIEB0eXBlIHtQZXJpb2RpY1dhdmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3dhdmUgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwYXJ0aWFscyBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucy5wYXJ0aWFscywgWzFdKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBiZXR3ZWVuIDAgLSAzNjBcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7c3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gbnVsbDtcblx0ICAgICAgICAvL3NldHVwXG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLl9waGFzZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ3BhcnRpYWxzJzogW11cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIE9zY2lsbGF0b3IgdHlwZXNcblx0XHQgKiAgQGVudW0ge1N0cmluZ31cblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlID0ge1xuXHQgICAgICAgIFNpbmU6ICdzaW5lJyxcblx0ICAgICAgICBUcmlhbmdsZTogJ3RyaWFuZ2xlJyxcblx0ICAgICAgICBTYXd0b290aDogJ3Nhd3Rvb3RoJyxcblx0ICAgICAgICBTcXVhcmU6ICdzcXVhcmUnLFxuXHQgICAgICAgIEN1c3RvbTogJ2N1c3RvbSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vbmV3IG9zY2lsbGF0b3Igd2l0aCBwcmV2aW91cyB2YWx1ZXNcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvck5vZGUoKTtcblx0ICAgICAgICBpZiAodGhpcy5fd2F2ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnNldFBlcmlvZGljV2F2ZSh0aGlzLl93YXZlKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0aGlzLl90eXBlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIGNvbnRyb2wgc2lnbmFsIHRvIHRoZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeSAmIGRldHVuZVxuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9vc2NpbGxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdCh0aGlzLl9vc2NpbGxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgb3NjaWxsYXRvclxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yKSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXN0YXJ0IHRoZSBvc2NpbGxhdG9yLiBEb2VzIG5vdCBzdG9wIHRoZSBvc2NpbGxhdG9yLCBidXQgaW5zdGVhZFxuXHRcdCAqIGp1c3QgY2FuY2VscyBhbnkgc2NoZWR1bGVkICdzdG9wJyBmcm9tIGJlaW5nIGludm9rZWQuXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWVcblx0XHQgKiBAcmV0dXJuIHtUb25lLk9zY2lsbGF0b3J9ICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNhbmNlbFN0b3AoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGhpcy50b1NlY29uZHModGltZSkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTeW5jIHRoZSBzaWduYWwgdG8gdGhlIFRyYW5zcG9ydCdzIGJwbS4gQW55IGNoYW5nZXMgdG8gdGhlIHRyYW5zcG9ydHMgYnBtLFxuXHRcdCAqICB3aWxsIGFsc28gYWZmZWN0IHRoZSBvc2NpbGxhdG9ycyBmcmVxdWVuY3kuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5icG0udmFsdWUgPSAxMjA7XG5cdFx0ICogb3NjLmZyZXF1ZW5jeS52YWx1ZSA9IDQ0MDtcblx0XHQgKiAvL3RoZSByYXRpb24gYmV0d2VlbiB0aGUgYnBtIGFuZCB0aGUgZnJlcXVlbmN5IHdpbGwgYmUgbWFpbnRhaW5lZFxuXHRcdCAqIG9zYy5zeW5jRnJlcXVlbmN5KCk7XG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlID0gMjQwO1xuXHRcdCAqIC8vIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3IgaXMgZG91YmxlZCB0byA4ODBcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuc3luY0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5zeW5jU2lnbmFsKHRoaXMuZnJlcXVlbmN5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVW5zeW5jIHRoZSBvc2NpbGxhdG9yJ3MgZnJlcXVlbmN5IGZyb20gdGhlIFRyYW5zcG9ydC5cblx0XHQgKiAgU2VlIFRvbmUuT3NjaWxsYXRvci5zeW5jRnJlcXVlbmN5XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUudW5zeW5jRnJlcXVlbmN5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0LnVuc3luY1NpZ25hbCh0aGlzLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3I6IGVpdGhlciBzaW5lLCBzcXVhcmUsIHRyaWFuZ2xlLCBvciBzYXd0b290aC4gQWxzbyBjYXBhYmxlIG9mXG5cdFx0ICogc2V0dGluZyB0aGUgZmlyc3QgeCBudW1iZXIgb2YgcGFydGlhbHMgb2YgdGhlIG9zY2lsbGF0b3IuIEZvciBleGFtcGxlOiBcInNpbmU0XCIgd291bGRcblx0XHQgKiBzZXQgYmUgdGhlIGZpcnN0IDQgcGFydGlhbHMgb2YgdGhlIHNpbmUgd2F2ZSBhbmQgXCJ0cmlhbmdsZThcIiB3b3VsZCBzZXQgdGhlIGZpcnN0XG5cdFx0ICogOCBwYXJ0aWFscyBvZiB0aGUgdHJpYW5nbGUgd2F2ZS5cblx0XHQgKiA8YnI+PGJyPlxuXHRcdCAqIFVzZXMgUGVyaW9kaWNXYXZlIGludGVybmFsbHkgZXZlbiBmb3IgbmF0aXZlIHR5cGVzIHNvIHRoYXQgaXQgY2FuIHNldCB0aGUgcGhhc2UuXG5cdFx0ICogUGVyaW9kaWNXYXZlIGVxdWF0aW9ucyBhcmUgZnJvbSB0aGVcblx0XHQgKiBbV2Via2l0IFdlYiBBdWRpbyBpbXBsZW1lbnRhdGlvbl0oaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9jb2Rlc2VhcmNoI2Nocm9taXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvU291cmNlL21vZHVsZXMvd2ViYXVkaW8vUGVyaW9kaWNXYXZlLmNwcCZzcT1wYWNrYWdlOmNocm9taXVtKS5cblx0XHQgKlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL3NldCBpdCB0byBhIHNxdWFyZSB3YXZlXG5cdFx0ICogb3NjLnR5cGUgPSBcInNxdWFyZVwiO1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9zZXQgdGhlIGZpcnN0IDYgcGFydGlhbHMgb2YgYSBzYXd0b290aCB3YXZlXG5cdFx0ICogb3NjLnR5cGUgPSBcInNhd3Rvb3RoNlwiO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdmFyIGlzQmFzaWNUeXBlID0gW1xuXHQgICAgICAgICAgICAgICAgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuU2luZSxcblx0ICAgICAgICAgICAgICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNxdWFyZSxcblx0ICAgICAgICAgICAgICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlLlRyaWFuZ2xlLFxuXHQgICAgICAgICAgICAgICAgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuU2F3dG9vdGhcblx0ICAgICAgICAgICAgXS5pbmNsdWRlcyh0eXBlKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3BoYXNlID09PSAwICYmIGlzQmFzaWNUeXBlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl93YXZlID0gbnVsbDtcblx0ICAgICAgICAgICAgICAgIC8vanVzdCBnbyB3aXRoIHRoZSBiYXNpYyBhcHByb2FjaFxuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3IgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPT09IHR5cGU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY29lZnMgPSB0aGlzLl9nZXRSZWFsSW1hZ2luYXJ5KHR5cGUsIHRoaXMuX3BoYXNlKTtcblx0ICAgICAgICAgICAgICAgIHZhciBwZXJpb2RpY1dhdmUgPSB0aGlzLmNvbnRleHQuY3JlYXRlUGVyaW9kaWNXYXZlKGNvZWZzWzBdLCBjb2Vmc1sxXSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl93YXZlID0gcGVyaW9kaWNXYXZlO1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3IgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnNldFBlcmlvZGljV2F2ZSh0aGlzLl93YXZlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSByZWFsIGFuZCBpbWFnaW5hcnkgY29tcG9uZW50cyBiYXNlZFxuXHRcdCAqICBvbiB0aGUgb3NjaWxsYXRvciB0eXBlLlxuXHRcdCAqICBAcmV0dXJucyB7QXJyYXl9IFtyZWFsLCBpbWFnaW5hcnldXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLl9nZXRSZWFsSW1hZ2luYXJ5ID0gZnVuY3Rpb24gKHR5cGUsIHBoYXNlKSB7XG5cdCAgICAgICAgdmFyIGZmdFNpemUgPSA0MDk2O1xuXHQgICAgICAgIHZhciBwZXJpb2RpY1dhdmVTaXplID0gZmZ0U2l6ZSAvIDI7XG5cdCAgICAgICAgdmFyIHJlYWwgPSBuZXcgRmxvYXQzMkFycmF5KHBlcmlvZGljV2F2ZVNpemUpO1xuXHQgICAgICAgIHZhciBpbWFnID0gbmV3IEZsb2F0MzJBcnJheShwZXJpb2RpY1dhdmVTaXplKTtcblx0ICAgICAgICB2YXIgcGFydGlhbENvdW50ID0gMTtcblx0ICAgICAgICBpZiAodHlwZSA9PT0gVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tKSB7XG5cdCAgICAgICAgICAgIHBhcnRpYWxDb3VudCA9IHRoaXMuX3BhcnRpYWxzLmxlbmd0aCArIDE7XG5cdCAgICAgICAgICAgIHBlcmlvZGljV2F2ZVNpemUgPSBwYXJ0aWFsQ291bnQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIHBhcnRpYWwgPSAvXihzaW5lfHRyaWFuZ2xlfHNxdWFyZXxzYXd0b290aCkoXFxkKykkLy5leGVjKHR5cGUpO1xuXHQgICAgICAgICAgICBpZiAocGFydGlhbCkge1xuXHQgICAgICAgICAgICAgICAgcGFydGlhbENvdW50ID0gcGFyc2VJbnQocGFydGlhbFsyXSkgKyAxO1xuXHQgICAgICAgICAgICAgICAgdHlwZSA9IHBhcnRpYWxbMV07XG5cdCAgICAgICAgICAgICAgICBwYXJ0aWFsQ291bnQgPSBNYXRoLm1heChwYXJ0aWFsQ291bnQsIDIpO1xuXHQgICAgICAgICAgICAgICAgcGVyaW9kaWNXYXZlU2l6ZSA9IHBhcnRpYWxDb3VudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBmb3IgKHZhciBuID0gMTsgbiA8IHBlcmlvZGljV2F2ZVNpemU7ICsrbikge1xuXHQgICAgICAgICAgICB2YXIgcGlGYWN0b3IgPSAyIC8gKG4gKiBNYXRoLlBJKTtcblx0ICAgICAgICAgICAgdmFyIGI7XG5cdCAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNpbmU6XG5cdCAgICAgICAgICAgICAgICBiID0gbiA8PSBwYXJ0aWFsQ291bnQgPyAxIDogMDtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNxdWFyZTpcblx0ICAgICAgICAgICAgICAgIGIgPSBuICYgMSA/IDIgKiBwaUZhY3RvciA6IDA7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5TYXd0b290aDpcblx0ICAgICAgICAgICAgICAgIGIgPSBwaUZhY3RvciAqIChuICYgMSA/IDEgOiAtMSk7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5UcmlhbmdsZTpcblx0ICAgICAgICAgICAgICAgIGlmIChuICYgMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGIgPSAyICogKHBpRmFjdG9yICogcGlGYWN0b3IpICogKG4gLSAxID4+IDEgJiAxID8gLTEgOiAxKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYiA9IDA7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b206XG5cdCAgICAgICAgICAgICAgICBiID0gdGhpcy5fcGFydGlhbHNbbiAtIDFdO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUb25lLk9zY2lsbGF0b3I6IGludmFsaWQgdHlwZTogJyArIHR5cGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChiICE9PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByZWFsW25dID0gLWIgKiBNYXRoLnNpbihwaGFzZSAqIG4pO1xuXHQgICAgICAgICAgICAgICAgaW1hZ1tuXSA9IGIgKiBNYXRoLmNvcyhwaGFzZSAqIG4pO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmVhbFtuXSA9IDA7XG5cdCAgICAgICAgICAgICAgICBpbWFnW25dID0gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gW1xuXHQgICAgICAgICAgICByZWFsLFxuXHQgICAgICAgICAgICBpbWFnXG5cdCAgICAgICAgXTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29tcHV0ZSB0aGUgaW52ZXJzZSBGRlQgZm9yIGEgZ2l2ZW4gcGhhc2UuXG5cdFx0ICogIEBwYXJhbSAge0Zsb2F0MzJBcnJheX0gIHJlYWxcblx0XHQgKiAgQHBhcmFtICB7RmxvYXQzMkFycmF5fSAgaW1hZ1xuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIHBoYXNlXG5cdFx0ICogIEByZXR1cm4gIHtBdWRpb1JhbmdlfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5faW52ZXJzZUZGVCA9IGZ1bmN0aW9uIChyZWFsLCBpbWFnLCBwaGFzZSkge1xuXHQgICAgICAgIHZhciBzdW0gPSAwO1xuXHQgICAgICAgIHZhciBsZW4gPSByZWFsLmxlbmd0aDtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIHN1bSArPSByZWFsW2ldICogTWF0aC5jb3MoaSAqIHBoYXNlKSArIGltYWdbaV0gKiBNYXRoLnNpbihpICogcGhhc2UpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gc3VtO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcmV0dXJuICB7QXVkaW9SYW5nZX1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuX2dldEluaXRpYWxWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgY29lZnMgPSB0aGlzLl9nZXRSZWFsSW1hZ2luYXJ5KHRoaXMuX3R5cGUsIDApO1xuXHQgICAgICAgIHZhciByZWFsID0gY29lZnNbMF07XG5cdCAgICAgICAgdmFyIGltYWcgPSBjb2Vmc1sxXTtcblx0ICAgICAgICB2YXIgbWF4VmFsdWUgPSAwO1xuXHQgICAgICAgIHZhciB0d29QaSA9IE1hdGguUEkgKiAyO1xuXHQgICAgICAgIC8vY2hlY2sgZm9yIHBlYWtzIGluIDggcGxhY2VzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcblx0ICAgICAgICAgICAgbWF4VmFsdWUgPSBNYXRoLm1heCh0aGlzLl9pbnZlcnNlRkZUKHJlYWwsIGltYWcsIGkgLyA4ICogdHdvUGkpLCBtYXhWYWx1ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiAtdGhpcy5faW52ZXJzZUZGVChyZWFsLCBpbWFnLCB0aGlzLl9waGFzZSkgLyBtYXhWYWx1ZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9zYy5wYXJ0aWFscyA9IFsxLCAwLjIsIDAuMDFdO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgIT09IFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnRpYWxzO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgICAgICB0aGlzLnR5cGUgPSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b207XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGhhc2UgPSAxODA7IC8vZmxpcHMgdGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGhhc2UgKiAoMTgwIC8gTWF0aC5QSSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9waGFzZSA9IHBoYXNlICogTWF0aC5QSSAvIDE4MDtcblx0ICAgICAgICAgICAgLy9yZXNldCB0aGUgdHlwZVxuXHQgICAgICAgICAgICB0aGlzLnR5cGUgPSB0aGlzLl90eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIERpc3Bvc2UgYW5kIGRpc2Nvbm5lY3QuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3IgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl93YXZlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEF1ZGlvVG9HYWluIGNvbnZlcnRzIGFuIGlucHV0IGluIEF1ZGlvUmFuZ2UgWy0xLDFdIHRvIE5vcm1hbFJhbmdlIFswLDFdLiBcblx0XHQgKiAgICAgICAgIFNlZSBUb25lLkdhaW5Ub0F1ZGlvLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgYTJnID0gbmV3IFRvbmUuQXVkaW9Ub0dhaW4oKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ub0dhaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ub3JtID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAoeCkge1xuXHQgICAgICAgICAgICByZXR1cm4gKHggKyAxKSAvIDI7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BdWRpb1RvR2FpbiwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdWRpb1RvR2Fpbn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb1RvR2Fpbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9ub3JtLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ub3JtID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BdWRpb1RvR2Fpbjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlplcm8gb3V0cHV0cyAwJ3MgYXQgYXVkaW8tcmF0ZS4gVGhlIHJlYXNvbiB0aGlzIGhhcyB0byBiZVxuXHRcdCAqICAgICAgICAgaXQncyBvd24gY2xhc3MgaXMgdGhhdCBtYW55IGJyb3dzZXJzIG9wdGltaXplIG91dCBUb25lLlNpZ25hbFxuXHRcdCAqICAgICAgICAgd2l0aCBhIHZhbHVlIG9mIDAgYW5kIHdpbGwgbm90IHByb2Nlc3Mgbm9kZXMgZnVydGhlciBkb3duIHRoZSBncmFwaC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuWmVybyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dhaW4gPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmdldENvbnN0YW50KDApLmNvbm5lY3QodGhpcy5fZ2Fpbik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5aZXJvLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlplcm99ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlplcm8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZ2FpbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuWmVybztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBMRk8gc3RhbmRzIGZvciBsb3cgZnJlcXVlbmN5IG9zY2lsbGF0b3IuIFRvbmUuTEZPIHByb2R1Y2VzIGFuIG91dHB1dCBzaWduYWxcblx0XHQgKiAgICAgICAgICB3aGljaCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gQXVkaW9QYXJhbSBvciBUb25lLlNpZ25hbFxuXHRcdCAqICAgICAgICAgIGluIG9yZGVyIHRvIG1vZHVsYXRlIHRoYXQgcGFyYW1ldGVyIHdpdGggYW4gb3NjaWxsYXRvci4gVGhlIExGTyBjYW5cblx0XHQgKiAgICAgICAgICBhbHNvIGJlIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0IHRvIHN0YXJ0L3N0b3AgYW5kIGNoYW5nZSB3aGVuIHRoZSB0ZW1wbyBjaGFuZ2VzLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2ZyZXF1ZW5jeV0gVGhlIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRpb24uIFR5cGljYWxseSwgTEZPcyB3aWxsIGJlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGZyZXF1ZW5jeSByYW5nZSBvZiAwLjEgdG8gMTAgaGVydHouXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gbWluIFRoZSBtaW5pbXVtIG91dHB1dCB2YWx1ZSBvZiB0aGUgTEZPLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IG1heCBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgTEZPLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBsZm8gPSBuZXcgVG9uZS5MRk8oXCI0blwiLCA0MDAsIDQwMDApO1xuXHRcdCAqIGxmby5jb25uZWN0KGZpbHRlci5mcmVxdWVuY3kpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ21pbicsXG5cdCAgICAgICAgICAgICdtYXgnXG5cdCAgICAgICAgXSwgVG9uZS5MRk8pO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3Ioe1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICd0eXBlJzogb3B0aW9ucy50eXBlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbydzIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9vc2NpbGxhdG9yLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBhbXBsaXR1ZGUgb2YgdGhlIExGTywgd2hpY2ggY29udHJvbHMgdGhlIG91dHB1dCByYW5nZSBiZXR3ZWVuXG5cdFx0XHQgKiB0aGUgbWluIGFuZCBtYXggb3V0cHV0LiBGb3IgZXhhbXBsZSBpZiB0aGUgbWluIGlzIC0xMCBhbmQgdGhlIG1heFxuXHRcdFx0ICogaXMgMTAsIHNldHRpbmcgdGhlIGFtcGxpdHVkZSB0byAwLjUgd291bGQgbWFrZSB0aGUgTEZPIG1vZHVsYXRlXG5cdFx0XHQgKiBiZXR3ZWVuIC01IGFuZCA1LlxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYW1wbGl0dWRlID0gdGhpcy5fb3NjaWxsYXRvci52b2x1bWU7XG5cdCAgICAgICAgdGhpcy5hbXBsaXR1ZGUudW5pdHMgPSBUb25lLlR5cGUuTm9ybWFsUmFuZ2U7XG5cdCAgICAgICAgdGhpcy5hbXBsaXR1ZGUudmFsdWUgPSBvcHRpb25zLmFtcGxpdHVkZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lnbmFsIHdoaWNoIGlzIG91dHB1dCB3aGVuIHRoZSBMRk8gaXMgc3RvcHBlZFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoMCwgVG9uZS5UeXBlLkF1ZGlvUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEp1c3Qgb3V0cHV0cyB6ZXJvcy5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5aZXJvfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl96ZXJvcyA9IG5ldyBUb25lLlplcm8oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmFsdWUgdGhhdCB0aGUgTEZPIG91dHB1dHMgd2hlbiBpdCdzIHN0b3BwZWRcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9SYW5nZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFZhbHVlID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BdWRpb1RvR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYTJnID0gbmV3IFRvbmUuQXVkaW9Ub0dhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TY2FsZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGVyID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5TY2FsZShvcHRpb25zLm1pbiwgb3B0aW9ucy5tYXgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB1bml0cyBvZiB0aGUgTEZPICh1c2VkIGZvciBjb252ZXJ0aW5nKVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlR5cGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3VuaXRzID0gVG9uZS5UeXBlLkRlZmF1bHQ7XG5cdCAgICAgICAgdGhpcy51bml0cyA9IG9wdGlvbnMudW5pdHM7XG5cdCAgICAgICAgLy9jb25uZWN0IGl0IHVwXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5jaGFpbih0aGlzLl9hMmcsIHRoaXMuX3NjYWxlcik7XG5cdCAgICAgICAgdGhpcy5femVyb3MuY29ubmVjdCh0aGlzLl9hMmcpO1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwuY29ubmVjdCh0aGlzLl9hMmcpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2FtcGxpdHVkZScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5MRk8sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICpcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICdtYXgnOiAxLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6ICc0bicsXG5cdCAgICAgICAgJ2FtcGxpdHVkZSc6IDEsXG5cdCAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkRlZmF1bHRcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIExGTy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgTEZPIHdpbGwgc3RhcnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLnNldFZhbHVlQXRUaW1lKDAsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIExGTy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgTEZPIHdpbGwgc3RvcFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MRk99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC5zZXRWYWx1ZUF0VGltZSh0aGlzLl9zdG9wcGVkVmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3luYyB0aGUgc3RhcnQvc3RvcC9wYXVzZSB0byB0aGUgdHJhbnNwb3J0XG5cdFx0ICogIGFuZCB0aGUgZnJlcXVlbmN5IHRvIHRoZSBicG0gb2YgdGhlIHRyYW5zcG9ydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MRk99IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgbGZvLmZyZXF1ZW5jeS52YWx1ZSA9IFwiOG5cIjtcblx0XHQgKiAgbGZvLnN5bmMoKS5zdGFydCgwKVxuXHRcdCAqICAvL3RoZSByYXRlIG9mIHRoZSBMRk8gd2lsbCBhbHdheXMgYmUgYW4gZWlnaHRoIG5vdGUsXG5cdFx0ICogIC8vZXZlbiBhcyB0aGUgdGVtcG8gY2hhbmdlc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zeW5jRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHVuc3luYyB0aGUgTEZPIGZyb20gdHJhbnNwb3J0IGNvbnRyb2xcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudW5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci51bnN5bmNGcmVxdWVuY3koKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaXVtdW0gb3V0cHV0IG9mIHRoZSBMRk8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAnbWluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdG9Vbml0cyh0aGlzLl9zY2FsZXIubWluKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICBtaW4gPSB0aGlzLl9mcm9tVW5pdHMobWluKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGVyLm1pbiA9IG1pbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIG91dHB1dCBvZiB0aGUgTEZPLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1heFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ21heCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RvVW5pdHModGhpcy5fc2NhbGVyLm1heCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXgpIHtcblx0ICAgICAgICAgICAgbWF4ID0gdGhpcy5fZnJvbVVuaXRzKG1heCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlci5tYXggPSBtYXg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvcjogc2luZSwgc3F1YXJlLCBzYXd0b290aCwgdHJpYW5nbGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3BwZWRWYWx1ZSA9IHRoaXMuX29zY2lsbGF0b3IuX2dldEluaXRpYWxWYWx1ZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLnZhbHVlID0gdGhpcy5fc3RvcHBlZFZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBMRk8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3BwZWRWYWx1ZSA9IHRoaXMuX29zY2lsbGF0b3IuX2dldEluaXRpYWxWYWx1ZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLnZhbHVlID0gdGhpcy5fc3RvcHBlZFZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG91dHB1dCB1bml0cyBvZiB0aGUgTEZPLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7VG9uZS5UeXBlfVxuXHRcdCAqIEBuYW1lIHVuaXRzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAndW5pdHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl91bml0cztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB2YXIgY3VycmVudE1pbiA9IHRoaXMubWluO1xuXHQgICAgICAgICAgICB2YXIgY3VycmVudE1heCA9IHRoaXMubWF4O1xuXHQgICAgICAgICAgICAvL2NvbnZlcnQgdGhlIG1pbiBhbmQgdGhlIG1heFxuXHQgICAgICAgICAgICB0aGlzLl91bml0cyA9IHZhbDtcblx0ICAgICAgICAgICAgdGhpcy5taW4gPSBjdXJyZW50TWluO1xuXHQgICAgICAgICAgICB0aGlzLm1heCA9IGN1cnJlbnRNYXg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBNdXRlIHRoZSBvdXRwdXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiBvciBcInN0b3BwZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnN0YXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENvbm5lY3QgdGhlIG91dHB1dCBvZiB0aGUgTEZPIHRvIGFuIEF1ZGlvUGFyYW0sIEF1ZGlvTm9kZSwgb3IgVG9uZSBOb2RlLlxuXHRcdCAqICBUb25lLkxGTyB3aWxsIGF1dG9tYXRpY2FsbHkgY29udmVydCB0byB0aGUgZGVzdGluYXRpb24gdW5pdHMgb2YgdGhlXG5cdFx0ICogIHdpbGwgZ2V0IHRoZSB1bml0cyBmcm9tIHRoZSBjb25uZWN0ZWQgbm9kZS5cblx0XHQgKiAgQHBhcmFtICB7VG9uZSB8IEF1ZGlvUGFyYW0gfCBBdWRpb05vZGV9IG5vZGVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXROdW09MF0gb3B0aW9uYWxseSB3aGljaCBvdXRwdXQgdG8gY29ubmVjdCBmcm9tXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbaW5wdXROdW09MF0gb3B0aW9uYWxseSB3aGljaCBpbnB1dCB0byBjb25uZWN0IHRvXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIGlmIChub2RlLmNvbnN0cnVjdG9yID09PSBUb25lLlNpZ25hbCB8fCBub2RlLmNvbnN0cnVjdG9yID09PSBUb25lLlBhcmFtKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29udmVydCA9IG5vZGUuY29udmVydDtcblx0ICAgICAgICAgICAgdGhpcy51bml0cyA9IG5vZGUudW5pdHM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuY29ubmVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBwcml2YXRlIG1ldGhvZCBib3Jyb3dlZCBmcm9tIFBhcmFtIGNvbnZlcnRzXG5cdFx0ICogIHVuaXRzIGZyb20gdGhlaXIgZGVzdGluYXRpb24gdmFsdWVcblx0XHQgKiAgQGZ1bmN0aW9uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuX2Zyb21Vbml0cyA9IFRvbmUuUGFyYW0ucHJvdG90eXBlLl9mcm9tVW5pdHM7XG5cdCAgICAvKipcblx0XHQgKiAgcHJpdmF0ZSBtZXRob2QgYm9ycm93ZWQgZnJvbSBQYXJhbSBjb252ZXJ0c1xuXHRcdCAqICB1bml0cyB0byB0aGVpciBkZXN0aW5hdGlvbiB2YWx1ZVxuXHRcdCAqICBAZnVuY3Rpb25cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5fdG9Vbml0cyA9IFRvbmUuUGFyYW0ucHJvdG90eXBlLl90b1VuaXRzO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc2Nvbm5lY3QgYW5kIGRpc3Bvc2Vcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2FtcGxpdHVkZScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5femVyb3MuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3plcm9zID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zY2FsZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYTJnLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hMmcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmFtcGxpdHVkZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTEZPO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5MaW1pdGVyIHdpbGwgbGltaXQgdGhlIGxvdWRuZXNzIG9mIGFuIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgICAgICAgIEl0IGlzIGNvbXBvc2VkIG9mIGEgVG9uZS5Db21wcmVzc29yIHdpdGggYSBmYXN0IGF0dGFja1xuXHRcdCAqICAgICAgICAgYW5kIHJlbGVhc2UuIExpbWl0ZXJzIGFyZSBjb21tb25seSB1c2VkIHRvIHNhZmVndWFyZCBhZ2FpbnN0XG5cdFx0ICogICAgICAgICBzaWduYWwgY2xpcHBpbmcuIFVubGlrZSBhIGNvbXByZXNzb3IsIGxpbWl0ZXJzIGRvIG5vdCBwcm92aWRlXG5cdFx0ICogICAgICAgICBzbW9vdGggZ2FpbiByZWR1Y3Rpb24gYW5kIGFsbW9zdCBjb21wbGV0ZWx5IHByZXZlbnRcblx0XHQgKiAgICAgICAgIGFkZGl0aW9uYWwgZ2FpbiBhYm92ZSB0aGUgdGhyZXNob2xkLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB0aHJlc2hvbGQgVGhlIHRoZXNob2xkIGFib3ZlIHdoaWNoIHRoZSBsaW1pdGluZyBpcyBhcHBsaWVkLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgbGltaXRlciA9IG5ldyBUb25lLkxpbWl0ZXIoLTYpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MaW1pdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsndGhyZXNob2xkJ10sIFRvbmUuTGltaXRlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgY29tcHJlc3NvclxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Db21wcmVzc29yKHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDAxLFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjAwMSxcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCc6IG9wdGlvbnMudGhyZXNob2xkXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdGhyZXNob2xkIG9mIG9mIHRoZSBsaW1pdGVyXG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbH1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudGhyZXNob2xkID0gdGhpcy5fY29tcHJlc3Nvci50aHJlc2hvbGQ7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3RocmVzaG9sZCcpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTGltaXRlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkxpbWl0ZXIuZGVmYXVsdHMgPSB7ICd0aHJlc2hvbGQnOiAtMTIgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTGltaXRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MaW1pdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fY29tcHJlc3Nvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY29tcHJlc3NvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3RocmVzaG9sZCcpO1xuXHQgICAgICAgIHRoaXMudGhyZXNob2xkID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5MaW1pdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Mb3dwYXNzIGlzIGEgbG93cGFzcyBmZWVkYmFjayBjb21iIGZpbHRlci4gSXQgaXMgc2ltaWxhciB0b1xuXHRcdCAqICAgICAgICAgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIsIGJ1dCBpbmNsdWRlcyBhIGxvd3Bhc3MgZmlsdGVyLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFtkZWxheVRpbWVdIFRoZSBkZWxheSB0aW1lIG9mIHRoZSBjb21iIGZpbHRlclxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlPX0gcmVzb25hbmNlIFRoZSByZXNvbmFuY2UgKGZlZWRiYWNrKSBvZiB0aGUgY29tYiBmaWx0ZXJcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3k9fSBkYW1wZW5pbmcgVGhlIGN1dG9mZiBvZiB0aGUgbG93cGFzcyBmaWx0ZXIgZGFtcGVucyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsIGFzIGl0IGlzIGZlZGJhY2suXG5cdFx0ICovXG5cdCAgICBUb25lLkxvd3Bhc3NDb21iRmlsdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZScsXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0sIFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0RlbGF5Tm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuRGVsYXkob3B0aW9ucy5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZWxheVRpbWUgb2YgdGhlIGNvbWIgZmlsdGVyLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gdGhpcy5fZGVsYXkuZGVsYXlUaW1lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsb3dwYXNzIGZpbHRlclxuXHRcdFx0ICogIEB0eXBlICB7QmlxdWFkRmlsdGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG93cGFzcyA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MuUS52YWx1ZSA9IC0zLjAxMDI5OTk1NjYzOTgxMjU7XG5cdCAgICAgICAgdGhpcy5fbG93cGFzcy50eXBlID0gJ2xvd3Bhc3MnO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkYW1wZW5pbmcgY29udHJvbCBvZiB0aGUgZmVlZGJhY2tcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9sb3dwYXNzLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogb3B0aW9ucy5kYW1wZW5pbmdcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZmVlZGJhY2sgZ2FpblxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLnJlc29uYW5jZSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGZlZWRiYWNrIG9mIHRoZSBkZWxheWVkIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSB0aGlzLl9mZWVkYmFjay5nYWluO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9kZWxheS5jaGFpbih0aGlzLl9sb3dwYXNzLCB0aGlzLl9mZWVkYmFjaywgdGhpcy5fZGVsYXkpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZycsXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkxvd3Bhc3NDb21iRmlsdGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLjEsXG5cdCAgICAgICAgJ3Jlc29uYW5jZSc6IDAuNSxcblx0ICAgICAgICAnZGFtcGVuaW5nJzogMzAwMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTG93cGFzc0NvbWJGaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnLFxuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmRhbXBlbmluZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJlc29uYW5jZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbG93cGFzcy5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fbG93cGFzcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2suZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Mb3dwYXNzQ29tYkZpbHRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk1lcmdlIGJyaW5ncyB0d28gc2lnbmFscyBpbnRvIHRoZSBsZWZ0IGFuZCByaWdodFxuXHRcdCAqICAgICAgICAgIGNoYW5uZWxzIG9mIGEgc2luZ2xlIHN0ZXJlbyBjaGFubmVsLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG1lcmdlID0gbmV3IFRvbmUuTWVyZ2UoKS50b01hc3RlcigpO1xuXHRcdCAqIC8vcm91dGluZyBhIHNpbmUgdG9uZSBpbiB0aGUgbGVmdCBjaGFubmVsXG5cdFx0ICogLy9hbmQgbm9pc2UgaW4gdGhlIHJpZ2h0IGNoYW5uZWxcblx0XHQgKiB2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QobWVyZ2UubGVmdCk7XG5cdFx0ICogdmFyIG5vaXNlID0gbmV3IFRvbmUuTm9pc2UoKS5jb25uZWN0KG1lcmdlLnJpZ2h0KTtcblx0XHQgKiAvL3N0YXJ0aW5nIG91ciBvc2NpbGxhdG9yc1xuXHRcdCAqIG5vaXNlLnN0YXJ0KCk7XG5cdFx0ICogb3NjLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk1lcmdlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsZWZ0IGlucHV0IGNoYW5uZWwuXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPmlucHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubGVmdCA9IHRoaXMuaW5wdXRbMF0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJpZ2h0IGlucHV0IGNoYW5uZWwuXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPmlucHV0WzFdPC9jb2RlPi5cblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJpZ2h0ID0gdGhpcy5pbnB1dFsxXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWVyZ2VyIG5vZGUgZm9yIHRoZSB0d28gY2hhbm5lbHNcblx0XHRcdCAqICBAdHlwZSB7Q2hhbm5lbE1lcmdlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21lcmdlciA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUNoYW5uZWxNZXJnZXIoMik7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMubGVmdC5jb25uZWN0KHRoaXMuX21lcmdlciwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5yaWdodC5jb25uZWN0KHRoaXMuX21lcmdlciwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5sZWZ0LmNoYW5uZWxDb3VudCA9IDE7XG5cdCAgICAgICAgdGhpcy5yaWdodC5jaGFubmVsQ291bnQgPSAxO1xuXHQgICAgICAgIHRoaXMubGVmdC5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgICAgICB0aGlzLnJpZ2h0LmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWVyZ2UsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWVyZ2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWVyZ2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmxlZnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubGVmdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yaWdodC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yaWdodCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2VyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1lcmdlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuTWV0ZXIgZ2V0cyB0aGUgW1JNU10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUm9vdF9tZWFuX3NxdWFyZSlcblx0XHQgKiAgICAgICAgICBvZiBhbiBpbnB1dCBzaWduYWwgd2l0aCBzb21lIGF2ZXJhZ2luZyBhcHBsaWVkLiBJdCBjYW4gYWxzbyBnZXQgdGhlIHJhd1xuXHRcdCAqICAgICAgICAgIHZhbHVlIG9mIHRoZSBpbnB1dCBzaWduYWwuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IHNtb290aGluZyBUaGUgYW1vdW50IG9mIHNtb290aGluZyBhcHBsaWVkIGJldHdlZW4gZnJhbWVzLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtZXRlciA9IG5ldyBUb25lLk1ldGVyKCk7XG5cdFx0ICogdmFyIG1pYyA9IG5ldyBUb25lLlVzZXJNZWRpYSgpLm9wZW4oKTtcblx0XHQgKiAvL2Nvbm5lY3QgbWljIHRvIHRoZSBtZXRlclxuXHRcdCAqIG1pYy5jb25uZWN0KG1ldGVyKTtcblx0XHQgKiAvL3RoZSBjdXJyZW50IGxldmVsIG9mIHRoZSBtaWMgaW5wdXQgaW4gZGVjaWJlbHNcblx0XHQgKiB2YXIgbGV2ZWwgPSBtZXRlci5nZXRWYWx1ZSgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3Ntb290aGluZyddLCBUb25lLk1ldGVyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNlciBub2RlIHdoaWNoIGNvbXB1dGVzIHRoZSBsZXZlbHMuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQW5hbHlzZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLl9hbmFseXNlciA9IG5ldyBUb25lLkFuYWx5c2VyKCd3YXZlZm9ybScsIDEwMjQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgY2FycnlvdmVyIGJldHdlZW4gdGhlIGN1cnJlbnQgYW5kIGxhc3QgZnJhbWUuXG5cdFx0XHQgKiAgT25seSBhcHBsaWVkIG1ldGVyIGZvciBcImxldmVsXCIgdHlwZS5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc21vb3RoaW5nID0gb3B0aW9ucy5zbW9vdGhpbmc7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NZXRlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRlci5kZWZhdWx0cyA9IHsgJ3Ntb290aGluZyc6IDAuOCB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgY3VycmVudCBkZWNpYmVsIHZhbHVlIG9mIHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHQgKiAgQHJldHVybnMge0RlY2liZWxzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRlci5wcm90b3R5cGUuZ2V0TGV2ZWwgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIudHlwZSA9ICdmZnQnO1xuXHQgICAgICAgIHZhciB2YWx1ZXMgPSB0aGlzLl9hbmFseXNlci5nZXRWYWx1ZSgpO1xuXHQgICAgICAgIHZhciBvZmZzZXQgPSAyODtcblx0ICAgICAgICAvLyBub3JtYWxpemVzIG1vc3Qgc2lnbmFsIGxldmVsc1xuXHQgICAgICAgIC8vIFRPRE86IGNvbXB1dGUgbG91ZG5lc3MgZnJvbSBGRlRcblx0ICAgICAgICByZXR1cm4gTWF0aC5tYXguYXBwbHkodGhpcywgdmFsdWVzKSArIG9mZnNldDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBzaWduYWwgdmFsdWUgb2YgdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdCAqICBAcmV0dXJucyB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRlci5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIudHlwZSA9ICd3YXZlZm9ybSc7XG5cdCAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fYW5hbHlzZXIuZ2V0VmFsdWUoKTtcblx0ICAgICAgICByZXR1cm4gdmFsdWVbMF07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQSB2YWx1ZSBmcm9tIDAgLT4gMSB3aGVyZSAwIHJlcHJlc2VudHMgbm8gdGltZSBhdmVyYWdpbmcgd2l0aCB0aGUgbGFzdCBhbmFseXNpcyBmcmFtZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5NZXRlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHNtb290aGluZ1xuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0ZXIucHJvdG90eXBlLCAnc21vb3RoaW5nJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuc21vb3RoaW5nO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLnNtb290aGluZyA9IHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWV0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1ldGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqXHRAY2xhc3MgIFRvbmUuU3BsaXQgc3BsaXRzIGFuIGluY29taW5nIHNpZ25hbCBpbnRvIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNwbGl0ID0gbmV3IFRvbmUuU3BsaXQoKTtcblx0XHQgKiBzdGVyZW9TaWduYWwuY29ubmVjdChzcGxpdCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNwbGl0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDAsIDIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtDaGFubmVsU3BsaXR0ZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcGxpdHRlciA9IHRoaXMuaW5wdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlQ2hhbm5lbFNwbGl0dGVyKDIpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmNoYW5uZWxDb3VudCA9IDI7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgTGVmdCBjaGFubmVsIG91dHB1dC5cblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+b3V0cHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxlZnQgPSB0aGlzLm91dHB1dFswXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBSaWdodCBjaGFubmVsIG91dHB1dC5cblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+b3V0cHV0WzFdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJpZ2h0ID0gdGhpcy5vdXRwdXRbMV0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmNvbm5lY3QodGhpcy5sZWZ0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5jb25uZWN0KHRoaXMucmlnaHQsIDEsIDApO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3BsaXQsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3BsaXR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3BsaXQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5sZWZ0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmxlZnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmlnaHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TcGxpdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE1pZC9TaWRlIHByb2Nlc3Npbmcgc2VwYXJhdGVzIHRoZSB0aGUgJ21pZCcgc2lnbmFsXG5cdFx0ICogICAgICAgICAod2hpY2ggY29tZXMgb3V0IG9mIGJvdGggdGhlIGxlZnQgYW5kIHRoZSByaWdodCBjaGFubmVsKVxuXHRcdCAqICAgICAgICAgYW5kIHRoZSAnc2lkZScgKHdoaWNoIG9ubHkgY29tZXMgb3V0IG9mIHRoZSB0aGUgc2lkZSBjaGFubmVscykuIDxicj48YnI+XG5cdFx0ICogICAgICAgICA8Y29kZT5cblx0XHQgKiAgICAgICAgIE1pZCA9IChMZWZ0K1JpZ2h0KS9zcXJ0KDIpOyAgIC8vIG9idGFpbiBtaWQtc2lnbmFsIGZyb20gbGVmdCBhbmQgcmlnaHQ8YnI+XG5cdFx0ICogICAgICAgICBTaWRlID0gKExlZnQtUmlnaHQpL3NxcnQoMik7ICAgLy8gb2J0YWluIHNpZGUtc2lnbmFsIGZyb20gbGVmdCBhbmQgcmlnaDxicj5cblx0XHQgKiAgICAgICAgIDwvY29kZT5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlU3BsaXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMCwgMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc3BsaXQgdGhlIGluY29taW5nIHNpZ25hbCBpbnRvIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcGxpdCA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5TcGxpdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQgc2VuZC4gQ29ubmVjdCB0byBtaWQgcHJvY2Vzc2luZy4gQWxpYXMgZm9yXG5cdFx0XHQgKiAgPGNvZGU+b3V0cHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFkZH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZEFkZCA9IG5ldyBUb25lLkFkZCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogTXVsdGlwbHkgdGhlIF9taWRBZGQgYnkgc3FydCgxLzIpXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkID0gdGhpcy5vdXRwdXRbMF0gPSBuZXcgVG9uZS5NdWx0aXBseShNYXRoLlNRUlQxXzIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzaWRlIG91dHB1dC4gQ29ubmVjdCB0byBzaWRlIHByb2Nlc3NpbmcuIEFsc28gT3V0cHV0IDFcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NpZGVTdWJ0cmFjdCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBNdWx0aXBseSB0aGUgX21pZEFkZCBieSBzcXJ0KDEvMilcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zaWRlID0gdGhpcy5vdXRwdXRbMV0gPSBuZXcgVG9uZS5NdWx0aXBseShNYXRoLlNRUlQxXzIpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmNvbm5lY3QodGhpcy5fbWlkQWRkLCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5jb25uZWN0KHRoaXMuX21pZEFkZCwgMSwgMSk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQuY29ubmVjdCh0aGlzLl9zaWRlU3VidHJhY3QsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmNvbm5lY3QodGhpcy5fc2lkZVN1YnRyYWN0LCAxLCAxKTtcblx0ICAgICAgICB0aGlzLl9taWRBZGQuY29ubmVjdCh0aGlzLm1pZCk7XG5cdCAgICAgICAgdGhpcy5fc2lkZVN1YnRyYWN0LmNvbm5lY3QodGhpcy5zaWRlKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1pZFNpZGVTcGxpdCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1pZFNpZGVTcGxpdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlU3BsaXQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5zaWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRBZGQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZEFkZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2lkZVN1YnRyYWN0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaWRlU3VidHJhY3QgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkU2lkZVNwbGl0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgTWlkL1NpZGUgcHJvY2Vzc2luZyBzZXBhcmF0ZXMgdGhlIHRoZSAnbWlkJyBzaWduYWxcblx0XHQgKiAgICAgICAgICh3aGljaCBjb21lcyBvdXQgb2YgYm90aCB0aGUgbGVmdCBhbmQgdGhlIHJpZ2h0IGNoYW5uZWwpXG5cdFx0ICogICAgICAgICBhbmQgdGhlICdzaWRlJyAod2hpY2ggb25seSBjb21lcyBvdXQgb2YgdGhlIHRoZSBzaWRlIGNoYW5uZWxzKS5cblx0XHQgKiAgICAgICAgIE1pZFNpZGVNZXJnZSBtZXJnZXMgdGhlIG1pZCBhbmQgc2lkZSBzaWduYWwgYWZ0ZXIgdGhleSd2ZSBiZWVuIHNlcGVyYXRlZFxuXHRcdCAqICAgICAgICAgYnkgVG9uZS5NaWRTaWRlU3BsaXQuPGJyPjxicj5cblx0XHQgKiAgICAgICAgIDxjb2RlPlxuXHRcdCAqICAgICAgICAgTGVmdCA9IChNaWQrU2lkZSkvc3FydCgyKTsgICAvLyBvYnRhaW4gbGVmdCBzaWduYWwgZnJvbSBtaWQgYW5kIHNpZGU8YnI+XG5cdFx0ICogICAgICAgICBSaWdodCA9IChNaWQtU2lkZSkvc3FydCgyKTsgICAvLyBvYnRhaW4gcmlnaHQgc2lnbmFsIGZyb20gbWlkIGFuZCBzaWRlPGJyPlxuXHRcdCAqICAgICAgICAgPC9jb2RlPlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVNZXJnZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkIHNpZ25hbCBpbnB1dC4gQWxpYXMgZm9yXG5cdFx0XHQgKiAgPGNvZGU+aW5wdXRbMF08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IHRoaXMuaW5wdXRbMF0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcmVjb21iaW5lIHRoZSBtaWQvc2lkZSBpbnRvIExlZnRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BZGR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xlZnQgPSBuZXcgVG9uZS5BZGQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIE11bHRpcGx5IHRoZSBsZWZ0IGJ5IHNxcnQoMS8yKVxuXHRcdFx0ICogQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aW1lc1R3b0xlZnQgPSBuZXcgVG9uZS5NdWx0aXBseShNYXRoLlNRUlQxXzIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzaWRlIHNpZ25hbCBpbnB1dC4gQWxpYXMgZm9yXG5cdFx0XHQgKiAgPGNvZGU+aW5wdXRbMV08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNpZGUgPSB0aGlzLmlucHV0WzFdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHJlY29tYmluZSB0aGUgbWlkL3NpZGUgaW50byBSaWdodFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yaWdodCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBNdWx0aXBseSB0aGUgcmlnaHQgYnkgc3FydCgxLzIpXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvUmlnaHQgPSBuZXcgVG9uZS5NdWx0aXBseShNYXRoLlNRUlQxXzIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIE1lcmdlIHRoZSBsZWZ0L3JpZ2h0IHNpZ25hbCBiYWNrIGludG8gYSBzdGVyZW8gc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk1lcmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuTWVyZ2UoKTtcblx0ICAgICAgICB0aGlzLm1pZC5jb25uZWN0KHRoaXMuX2xlZnQsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuc2lkZS5jb25uZWN0KHRoaXMuX2xlZnQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMubWlkLmNvbm5lY3QodGhpcy5fcmlnaHQsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuc2lkZS5jb25uZWN0KHRoaXMuX3JpZ2h0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9sZWZ0LmNvbm5lY3QodGhpcy5fdGltZXNUd29MZWZ0KTtcblx0ICAgICAgICB0aGlzLl9yaWdodC5jb25uZWN0KHRoaXMuX3RpbWVzVHdvUmlnaHQpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvTGVmdC5jb25uZWN0KHRoaXMuX21lcmdlLCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b1JpZ2h0LmNvbm5lY3QodGhpcy5fbWVyZ2UsIDAsIDEpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWlkU2lkZU1lcmdlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWlkU2lkZU1lcmdlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVNZXJnZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMubWlkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5zaWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnNpZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xlZnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xlZnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvTGVmdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29MZWZ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yaWdodC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvUmlnaHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvUmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21lcmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkU2lkZU1lcmdlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5NaWRTaWRlQ29tcHJlc3NvciBhcHBsaWVzIHR3byBkaWZmZXJlbnQgY29tcHJlc3NvcnMgdG8gdGhlIG1pZFxuXHRcdCAqICAgICAgICAgYW5kIHNpZGUgc2lnbmFsIGNvbXBvbmVudHMuIFNlZSBUb25lLk1pZFNpZGVTcGxpdC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBvcHRpb25zIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUgbWlkIGFuZCBzaWRlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzb3JzLlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZUNvbXByZXNzb3IgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLk1pZFNpZGVDb21wcmVzc29yLmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWlkL3NpZGUgc3BsaXRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTWlkU2lkZVNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuTWlkU2lkZVNwbGl0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1pZC9zaWRlIHJlY29tYmluYXRpb25cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTWlkU2lkZU1lcmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk1pZFNpZGVNZXJnZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjb21wcmVzc29yIGFwcGxpZWQgdG8gdGhlIG1pZCBzaWduYWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkID0gbmV3IFRvbmUuQ29tcHJlc3NvcihvcHRpb25zLm1pZCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNvbXByZXNzb3IgYXBwbGllZCB0byB0aGUgc2lkZSBzaWduYWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc2lkZSA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5zaWRlKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQubWlkLmNoYWluKHRoaXMubWlkLCB0aGlzLl9taWRTaWRlTWVyZ2UubWlkKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQuc2lkZS5jaGFpbih0aGlzLnNpZGUsIHRoaXMuX21pZFNpZGVNZXJnZS5zaWRlKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnc2lkZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1pZFNpZGVDb21wcmVzc29yLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZUNvbXByZXNzb3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ21pZCc6IHtcblx0ICAgICAgICAgICAgJ3JhdGlvJzogMyxcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCc6IC0yNCxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjAzLFxuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMixcblx0ICAgICAgICAgICAgJ2tuZWUnOiAxNlxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3NpZGUnOiB7XG5cdCAgICAgICAgICAgICdyYXRpbyc6IDYsXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnOiAtMzAsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC4yNSxcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDMsXG5cdCAgICAgICAgICAgICdrbmVlJzogMTBcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NaWRTaWRlQ29tcHJlc3Nvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlQ29tcHJlc3Nvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdzaWRlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMubWlkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5zaWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnNpZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkU2lkZUNvbXByZXNzb3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLk1vbm8gY29lcmNlcyB0aGUgaW5jb21pbmcgbW9ubyBvciBzdGVyZW8gc2lnbmFsIGludG8gYSBtb25vIHNpZ25hbFxuXHRcdCAqICAgICAgICAgd2hlcmUgYm90aCBsZWZ0IGFuZCByaWdodCBjaGFubmVscyBoYXZlIHRoZSBzYW1lIHZhbHVlLiBUaGlzIGNhbiBiZSB1c2VmdWxcblx0XHQgKiAgICAgICAgIGZvciBbc3RlcmVvIGltYWdpbmddKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N0ZXJlb19pbWFnaW5nKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIG1lcmdlIHRoZSBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NZXJnZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuX21lcmdlLCAwLCAwKTtcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5fbWVyZ2UsIDAsIDEpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTW9ubywgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9uby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX21lcmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTW9ubztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgY29tcHJlc3NvciB3aXRoIHNlcGVyYXRlIGNvbnRyb2xzIG92ZXIgbG93L21pZC9oaWdoIGR5bmFtaWNzXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVGhlIGxvdy9taWQvaGlnaCBjb21wcmVzc29yIHNldHRpbmdzLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgbXVsdGliYW5kID0gbmV3IFRvbmUuTXVsdGliYW5kQ29tcHJlc3Nvcih7XG5cdFx0ICogIFx0XCJsb3dGcmVxdWVuY3lcIiA6IDIwMCxcblx0XHQgKiAgXHRcImhpZ2hGcmVxdWVuY3lcIiA6IDEzMDBcblx0XHQgKiAgXHRcImxvd1wiIDoge1xuXHRcdCAqICBcdFx0XCJ0aHJlc2hvbGRcIiA6IC0xMlxuXHRcdCAqICBcdH1cblx0XHQgKiAgfSlcblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kQ29tcHJlc3NvciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKGFyZ3VtZW50cywgVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yLmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzcGxpdCB0aGUgaW5jb21pbmcgc2lnbmFsIGludG8gaGlnaC9taWQvbG93XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGliYW5kU3BsaXR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk11bHRpYmFuZFNwbGl0KHtcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSc6IG9wdGlvbnMubG93RnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeSc6IG9wdGlvbnMuaGlnaEZyZXF1ZW5jeVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGxvdy9taWQgY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gdGhpcy5fc3BsaXR0ZXIubG93RnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIG1pZC9oaWdoIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSB0aGlzLl9zcGxpdHRlci5oaWdoRnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBvdXRwdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY29tcHJlc3NvciBhcHBsaWVkIHRvIHRoZSBsb3cgZnJlcXVlbmNpZXMuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93ID0gbmV3IFRvbmUuQ29tcHJlc3NvcihvcHRpb25zLmxvdyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNvbXByZXNzb3IgYXBwbGllZCB0byB0aGUgbWlkIGZyZXF1ZW5jaWVzLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5taWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjb21wcmVzc29yIGFwcGxpZWQgdG8gdGhlIGhpZ2ggZnJlcXVlbmNpZXMuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaCA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5oaWdoKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIGNvbXByZXNzb3Jcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5sb3cuY2hhaW4odGhpcy5sb3csIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5taWQuY2hhaW4odGhpcy5taWQsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5oaWdoLmNoYWluKHRoaXMuaGlnaCwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk11bHRpYmFuZENvbXByZXNzb3IsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdsb3cnOiBUb25lLkNvbXByZXNzb3IuZGVmYXVsdHMsXG5cdCAgICAgICAgJ21pZCc6IFRvbmUuQ29tcHJlc3Nvci5kZWZhdWx0cyxcblx0ICAgICAgICAnaGlnaCc6IFRvbmUuQ29tcHJlc3Nvci5kZWZhdWx0cyxcblx0ICAgICAgICAnbG93RnJlcXVlbmN5JzogMjUwLFxuXHQgICAgICAgICdoaWdoRnJlcXVlbmN5JzogMjAwMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NdWx0aWJhbmRDb21wcmVzc29yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZENvbXByZXNzb3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnaGlnaCcsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMubG93LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oaWdoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5sb3cgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWlkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhpZ2ggPSBudWxsO1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk11bHRpYmFuZENvbXByZXNzb3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCAmJiAhd2luZG93LlN0ZXJlb1Bhbm5lck5vZGUpIHtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEBjbGFzcyBTaGltbWVkIFN0ZXJlb1Bhbm5lck5vZGVcblx0XHRcdCAqIEBwYXJhbSAge0F1ZGlvQ29udGV4dH0gY29udGV4dFxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHZhciBTdGVyZW9QYW5uZXJOb2RlID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSBhdWRpbyBjb250ZXh0XG5cdFx0XHRcdCAqIEB0eXBlIHtBdWRpb0NvbnRleHR9XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogVGhlIGxlZnQvcmlnaHQgcGFubmluZy4gWy0xLCAxXVxuXHRcdFx0XHQgKiBAdHlwZSB7QXVkaW9SYW5nZX1cblx0XHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5wYW4gPSBuZXcgVG9uZS5TaWduYWwoMCwgVG9uZS5UeXBlLkF1ZGlvUmFuZ2UpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogRXF1YWwgcG93ZXIgc2NhbGluZyBvZiB0aGUgcmlnaHQgZ2FpblxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIHJpZ2h0V2F2ZVNoYXBlciA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuZXF1YWxQb3dlclNjYWxlKCh2YWwgKyAxKSAvIDIpO1xuXHQgICAgICAgICAgICB9LCA0MDk2KTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIEVxdWFsIHBvd2VyIHNjYWxpbmcgb2YgdGhlIGxlZnQgZ2FpblxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIGxlZnRXYXZlU2hhcGVyID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5lcXVhbFBvd2VyU2NhbGUoMSAtICh2YWwgKyAxKSAvIDIpO1xuXHQgICAgICAgICAgICB9LCA0MDk2KTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSBsZWZ0IGdhaW4gdmFsdWVcblx0XHRcdFx0ICogQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciBsZWZ0R2FpbiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSByaWdodCBnYWluIHZhbHVlXG5cdFx0XHRcdCAqIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgcmlnaHRHYWluID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogU3BsaXQgdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5TcGxpdH1cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciBzcGxpdCA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5TcGxpdCgpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogS2VlcHMgdGhlIHdhdmVzaGFwZXJzIGZyb20gb3B0aW1pemluZyAwc1xuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5aZXJvfVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIHplcm8gPSBuZXcgVG9uZS5aZXJvKCk7XG5cdCAgICAgICAgICAgIHplcm8uZmFuKHJpZ2h0V2F2ZVNoYXBlciwgbGVmdFdhdmVTaGFwZXIpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogTWVyZ2UgdGhlIG91dGdvaW5nIHNpZ25hbFxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5NZXJnZX1cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciBtZXJnZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuTWVyZ2UoKTtcblx0ICAgICAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgICAgICBzcGxpdC5sZWZ0LmNoYWluKGxlZnRHYWluLCBtZXJnZS5sZWZ0KTtcblx0ICAgICAgICAgICAgc3BsaXQucmlnaHQuY2hhaW4ocmlnaHRHYWluLCBtZXJnZS5yaWdodCk7XG5cdCAgICAgICAgICAgIHRoaXMucGFuLmNoYWluKGxlZnRXYXZlU2hhcGVyLCBsZWZ0R2Fpbi5nYWluKTtcblx0ICAgICAgICAgICAgdGhpcy5wYW4uY2hhaW4ocmlnaHRXYXZlU2hhcGVyLCByaWdodEdhaW4uZ2Fpbik7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBTdGVyZW9QYW5uZXJOb2RlLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dC5kaXNjb25uZWN0LmFwcGx5KHRoaXMub3V0cHV0LCBhcmd1bWVudHMpO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgU3RlcmVvUGFubmVyTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQuY29ubmVjdC5hcHBseSh0aGlzLm91dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIC8vYWRkIGl0IHRvIHRoZSBBdWRpb0NvbnRleHRcblx0ICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVN0ZXJlb1Bhbm5lciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGVyZW9QYW5uZXJOb2RlKHRoaXMpO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVTdGVyZW9QYW5uZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgU3RlcmVvUGFubmVyTm9kZSh0aGlzKTtcblx0ICAgICAgICB9O1xuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUGFubmVyIGlzIGFuIGVxdWFsIHBvd2VyIExlZnQvUmlnaHQgUGFubmVyIGFuZCBkb2VzIG5vdFxuXHRcdCAqICAgICAgICAgIHN1cHBvcnQgM0QuIFBhbm5lciB1c2VzIHRoZSBTdGVyZW9QYW5uZXJOb2RlIHdoZW4gYXZhaWxhYmxlLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtpbml0aWFsUGFuPTBdIFRoZSBpbml0YWlsIHBhbm5lciB2YWx1ZSAoY2VudGVyKS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgLy9wYW4gdGhlIGlucHV0IHNpZ25hbCBoYXJkIHJpZ2h0LlxuXHRcdCAqICB2YXIgcGFubmVyID0gbmV3IFRvbmUuUGFubmVyKDEpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIgPSBmdW5jdGlvbiAoaW5pdGlhbFBhbikge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQqICB0aGUgcGFubmVyIG5vZGVcblx0XHRcdCogIEB0eXBlIHtTdGVyZW9QYW5uZXJOb2RlfVxuXHRcdFx0KiAgQHByaXZhdGVcblx0XHRcdCovXG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZVN0ZXJlb1Bhbm5lcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0KiAgVGhlIHBhbiBjb250cm9sLiAtMSA9IGhhcmQgbGVmdCwgMSA9IGhhcmQgcmlnaHQuXG5cdFx0XHQqICBAdHlwZSB7QXVkaW9SYW5nZX1cblx0XHRcdCogIEBzaWduYWxcblx0XHRcdCovXG5cdCAgICAgICAgdGhpcy5wYW4gPSB0aGlzLl9wYW5uZXIucGFuO1xuXHQgICAgICAgIC8vaW5pdGlhbCB2YWx1ZVxuXHQgICAgICAgIHRoaXMucGFuLnZhbHVlID0gVG9uZS5kZWZhdWx0QXJnKGluaXRpYWxQYW4sIDApO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdwYW4nKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhbm5lciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3BhbicpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnBhbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGFubmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgc3BhdGlhbGl6ZWQgcGFubmVyIG5vZGUgd2hpY2ggc3VwcG9ydHMgZXF1YWxwb3dlciBvciBIUlRGIHBhbm5pbmcuXG5cdFx0ICogICAgICAgICAgVHJpZXMgdG8gbm9ybWFsaXplIHRoZSBBUEkgYWNyb3NzIHZhcmlvdXMgYnJvd3NlcnMuIFNlZSBUb25lLkxpc3RlbmVyXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IHBvc2l0aW9uWCBUaGUgaW5pdGlhbCB4IHBvc2l0aW9uLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gcG9zaXRpb25ZIFRoZSBpbml0aWFsIHkgcG9zaXRpb24uXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBwb3NpdGlvblogVGhlIGluaXRpYWwgeiBwb3NpdGlvbi5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAncG9zaXRpb25YJyxcblx0ICAgICAgICAgICAgJ3Bvc2l0aW9uWScsXG5cdCAgICAgICAgICAgICdwb3NpdGlvblonXG5cdCAgICAgICAgXSwgVG9uZS5QYW5uZXIzRCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGFubmVyIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7UGFubmVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZVBhbm5lcigpO1xuXHQgICAgICAgIC8vc2V0IHNvbWUgdmFsdWVzXG5cdCAgICAgICAgdGhpcy5fcGFubmVyLnBhbm5pbmdNb2RlbCA9IG9wdGlvbnMucGFubmluZ01vZGVsO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5tYXhEaXN0YW5jZSA9IG9wdGlvbnMubWF4RGlzdGFuY2U7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmRpc3RhbmNlTW9kZWwgPSBvcHRpb25zLmRpc3RhbmNlTW9kZWw7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmNvbmVPdXRlckdhaW4gPSBvcHRpb25zLmNvbmVPdXRlckdhaW47XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmNvbmVPdXRlckFuZ2xlID0gb3B0aW9ucy5jb25lT3V0ZXJBbmdsZTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuY29uZUlubmVyQW5nbGUgPSBvcHRpb25zLmNvbmVJbm5lckFuZ2xlO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5yZWZEaXN0YW5jZSA9IG9wdGlvbnMucmVmRGlzdGFuY2U7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLnJvbGxvZmZGYWN0b3IgPSBvcHRpb25zLnJvbGxvZmZGYWN0b3I7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZHMgdGhlIGN1cnJlbnQgb3JpZW50YXRpb25cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IFtcblx0ICAgICAgICAgICAgb3B0aW9ucy5vcmllbnRhdGlvblgsXG5cdCAgICAgICAgICAgIG9wdGlvbnMub3JpZW50YXRpb25ZLFxuXHQgICAgICAgICAgICBvcHRpb25zLm9yaWVudGF0aW9uWlxuXHQgICAgICAgIF07XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZHMgdGhlIGN1cnJlbnQgcG9zaXRpb25cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IFtcblx0ICAgICAgICAgICAgb3B0aW9ucy5wb3NpdGlvblgsXG5cdCAgICAgICAgICAgIG9wdGlvbnMucG9zaXRpb25ZLFxuXHQgICAgICAgICAgICBvcHRpb25zLnBvc2l0aW9uWlxuXHQgICAgICAgIF07XG5cdCAgICAgICAgLy8gc2V0IHRoZSBkZWZhdWx0IHBvc2l0aW9uL29yaWVudGF0aW9uXG5cdCAgICAgICAgdGhpcy5vcmllbnRhdGlvblggPSBvcHRpb25zLm9yaWVudGF0aW9uWDtcblx0ICAgICAgICB0aGlzLm9yaWVudGF0aW9uWSA9IG9wdGlvbnMub3JpZW50YXRpb25ZO1xuXHQgICAgICAgIHRoaXMub3JpZW50YXRpb25aID0gb3B0aW9ucy5vcmllbnRhdGlvblo7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvblggPSBvcHRpb25zLnBvc2l0aW9uWDtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uWSA9IG9wdGlvbnMucG9zaXRpb25ZO1xuXHQgICAgICAgIHRoaXMucG9zaXRpb25aID0gb3B0aW9ucy5wb3NpdGlvblo7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYW5uZXIzRCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmF1bHRzIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvblxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncG9zaXRpb25YJzogMCxcblx0ICAgICAgICAncG9zaXRpb25ZJzogMCxcblx0ICAgICAgICAncG9zaXRpb25aJzogMCxcblx0ICAgICAgICAnb3JpZW50YXRpb25YJzogMCxcblx0ICAgICAgICAnb3JpZW50YXRpb25ZJzogMCxcblx0ICAgICAgICAnb3JpZW50YXRpb25aJzogMCxcblx0ICAgICAgICAncGFubmluZ01vZGVsJzogJ2VxdWFscG93ZXInLFxuXHQgICAgICAgICdtYXhEaXN0YW5jZSc6IDEwMDAwLFxuXHQgICAgICAgICdkaXN0YW5jZU1vZGVsJzogJ2ludmVyc2UnLFxuXHQgICAgICAgICdjb25lT3V0ZXJHYWluJzogMCxcblx0ICAgICAgICAnY29uZU91dGVyQW5nbGUnOiAzNjAsXG5cdCAgICAgICAgJ2NvbmVJbm5lckFuZ2xlJzogMzYwLFxuXHQgICAgICAgICdyZWZEaXN0YW5jZSc6IDEsXG5cdCAgICAgICAgJ3JvbGxvZmZGYWN0b3InOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJhbXAgdGltZSB3aGljaCBpcyBhcHBsaWVkIHRvIHRoZSBzZXRUYXJnZXRBdFRpbWVcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELnByb3RvdHlwZS5fcmFtcFRpbWVDb25zdGFudCA9IDAuMDE7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIHNvdXJjZSBpbiAzZCBzcGFjZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB5XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHpcblx0XHQgKiAgQHJldHVybiB7VG9uZS5QYW5uZXIzRH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUuc2V0UG9zaXRpb24gPSBmdW5jdGlvbiAoeCwgeSwgeikge1xuXHQgICAgICAgIGlmICh0aGlzLl9wYW5uZXIucG9zaXRpb25YKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIucG9zaXRpb25YLnNldFRhcmdldEF0VGltZSh4LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIucG9zaXRpb25ZLnNldFRhcmdldEF0VGltZSh5LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIucG9zaXRpb25aLnNldFRhcmdldEF0VGltZSh6LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5zZXRQb3NpdGlvbih4LCB5LCB6KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXRzIHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgc291cmNlIGluIDNkIHNwYWNlLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB4XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHlcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgelxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBhbm5lcjNEfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELnByb3RvdHlwZS5zZXRPcmllbnRhdGlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Bhbm5lci5vcmllbnRhdGlvblgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5vcmllbnRhdGlvblguc2V0VGFyZ2V0QXRUaW1lKHgsIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5vcmllbnRhdGlvblkuc2V0VGFyZ2V0QXRUaW1lKHksIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5vcmllbnRhdGlvblouc2V0VGFyZ2V0QXRUaW1lKHosIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLnNldE9yaWVudGF0aW9uKHgsIHksIHopO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25YXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdwb3NpdGlvblgnLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzBdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMF07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHkgcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvbllcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ3Bvc2l0aW9uWScsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMV0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblsxXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeiBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAncG9zaXRpb25aJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblsyXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzJdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB4IG9yaWVudGF0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgb3JpZW50YXRpb25YXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdvcmllbnRhdGlvblgnLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzBdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMF07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHkgb3JpZW50YXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBvcmllbnRhdGlvbllcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ29yaWVudGF0aW9uWScsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMV0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblsxXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeiBvcmllbnRhdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIG9yaWVudGF0aW9uWlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAnb3JpZW50YXRpb25aJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblsyXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzJdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFByb3h5IGEgcHJvcGVydHkgb24gdGhlIHBhbm5lciB0byBhbiBleHBvc2VkIHB1YmxpYyBwcm9wZXJ5XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIHByb3Bcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcCkge1xuXHQgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgcHJvcCwge1xuXHQgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3Bhbm5lcltwcm9wXSA9IHZhbDtcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFubmVyW3Byb3BdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwYW5uaW5nIG1vZGVsLiBFaXRoZXIgXCJlcXVhbHBvd2VyXCIgb3IgXCJIUlRGXCIuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBwYW5uaW5nTW9kZWxcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ3Bhbm5pbmdNb2RlbCcpO1xuXHQgICAgLyoqXG5cdFx0ICogIEEgcmVmZXJlbmNlIGRpc3RhbmNlIGZvciByZWR1Y2luZyB2b2x1bWUgYXMgc291cmNlIG1vdmUgZnVydGhlciBmcm9tIHRoZSBsaXN0ZW5lclxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcmVmRGlzdGFuY2Vcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ3JlZkRpc3RhbmNlJyk7XG5cdCAgICAvKipcblx0XHQgKiAgRGVzY3JpYmVzIGhvdyBxdWlja2x5IHRoZSB2b2x1bWUgaXMgcmVkdWNlZCBhcyBzb3VyY2UgbW92ZXMgYXdheSBmcm9tIGxpc3RlbmVyLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcm9sbG9mZkZhY3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgncm9sbG9mZkZhY3RvcicpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkaXN0YW5jZSBtb2RlbCB1c2VkIGJ5LCAgXCJsaW5lYXJcIiwgXCJpbnZlcnNlXCIsIG9yIFwiZXhwb25lbnRpYWxcIi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIGRpc3RhbmNlTW9kZWxcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ2Rpc3RhbmNlTW9kZWwnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgYW5nbGUsIGluIGRlZ3JlZXMsIGluc2lkZSBvZiB3aGljaCB0aGVyZSB3aWxsIGJlIG5vIHZvbHVtZSByZWR1Y3Rpb25cblx0XHQgKiAgQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBjb25lSW5uZXJBbmdsZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgnY29uZUlubmVyQW5nbGUnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgYW5nbGUsIGluIGRlZ3JlZXMsIG91dHNpZGUgb2Ygd2hpY2ggdGhlIHZvbHVtZSB3aWxsIGJlIHJlZHVjZWRcblx0XHQgKiAgdG8gYSBjb25zdGFudCB2YWx1ZSBvZiBjb25lT3V0ZXJHYWluXG5cdFx0ICogIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgY29uZU91dGVyQW5nbGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ2NvbmVPdXRlckFuZ2xlJyk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGdhaW4gb3V0c2lkZSBvZiB0aGUgY29uZU91dGVyQW5nbGVcblx0XHQgKiAgQHR5cGUge0dhaW59XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBjb25lT3V0ZXJHYWluXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdjb25lT3V0ZXJHYWluJyk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG1heGltdW0gZGlzdGFuY2UgYmV0d2VlbiBzb3VyY2UgYW5kIGxpc3RlbmVyLFxuXHRcdCAqICBhZnRlciB3aGljaCB0aGUgdm9sdW1lIHdpbGwgbm90IGJlIHJlZHVjZWQgYW55IGZ1cnRoZXIuXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIG1heERpc3RhbmNlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdtYXhEaXN0YW5jZScpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYW5uZXIzRH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBhbm5lcjNEO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QYW5Wb2wgaXMgYSBUb25lLlBhbm5lciBhbmQgVG9uZS5Wb2x1bWUgaW4gb25lLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9SYW5nZX0gcGFuIHRoZSBpbml0aWFsIHBhblxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdm9sdW1lIFRoZSBvdXRwdXQgdm9sdW1lLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vcGFuIHRoZSBpbmNvbWluZyBzaWduYWwgbGVmdCBhbmQgZHJvcCB0aGUgdm9sdW1lXG5cdFx0ICogdmFyIHBhblZvbCA9IG5ldyBUb25lLlBhblZvbCgtMC4yNSwgLTEyKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFuVm9sID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3BhbicsXG5cdCAgICAgICAgICAgICd2b2x1bWUnXG5cdCAgICAgICAgXSwgVG9uZS5QYW5Wb2wpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBhbm5pbmcgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlBhbm5lcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLlBhbm5lcihvcHRpb25zLnBhbik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIEwvUiBwYW5uaW5nIGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5wYW4gPSB0aGlzLl9wYW5uZXIucGFuO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2b2x1bWUgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlZvbHVtZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUob3B0aW9ucy52b2x1bWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2b2x1bWUgY29udHJvbCBpbiBkZWNpYmVscy5cblx0XHRcdCAqICBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuY29ubmVjdCh0aGlzLl92b2x1bWUpO1xuXHQgICAgICAgIHRoaXMubXV0ZSA9IG9wdGlvbnMubXV0ZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdwYW4nLFxuXHQgICAgICAgICAgICAndm9sdW1lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGFuVm9sLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5Wb2wuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3Bhbic6IDAsXG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUvdW5tdXRlIHRoZSB2b2x1bWVcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QYW5Wb2wjXG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFuVm9sLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWUubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhblZvbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5Wb2wucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdwYW4nLFxuXHQgICAgICAgICAgICAndm9sdW1lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnBhbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYW5Wb2w7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Tb2xvIGxldHMgeW91IGlzb2xhdGUgYSBzcGVjaWZpYyBhdWRpbyBzdHJlYW0uIFdoZW5cblx0XHQgKiAgICAgICAgIGFuIGluc3RhbmNlIGlzIHNldCB0byBgc29sbz10cnVlYCwgaXQgd2lsbCBtdXRlIGFsbCBvdGhlciBpbnN0YW5jZXMuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc29sb0EgPSBuZXcgVG9uZS5Tb2xvKClcblx0XHQgKiB2YXIgc29sb0IgPSBuZXcgVG9uZS5Tb2xvKClcblx0XHQgKiBzb2xvQS5zb2xvID0gdHJ1ZVxuXHRcdCAqIC8vbm8gYXVkaW8gd2lsbCBwYXNzIHRocm91Z2ggc29sb0Jcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3NvbG8nXSwgVG9uZS5Tb2xvKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBpbnB1dCBhbmQgb3V0cHV0IG5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGJvdW5kIF9zb2xvZWQgbWV0aG9kXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc29sb0JpbmQgPSB0aGlzLl9zb2xvZWQuYmluZCh0aGlzKTtcblx0ICAgICAgICAvL2xpc3RlbiBmb3Igc29sbyBldmVudHMgY2xhc3Mtd2lkZS5cblx0ICAgICAgICB0aGlzLmNvbnRleHQub24oJ3NvbG8nLCB0aGlzLl9zb2xvQmluZCk7XG5cdCAgICAgICAgLy9zZXQgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5zb2xvID0gb3B0aW9ucy5zb2xvO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU29sbywgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLmRlZmF1bHRzID0geyBzb2xvOiBmYWxzZSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIElzb2xhdGVzIHRoaXMgaW5zdGFuY2UgYW5kIG11dGVzIGFsbCBvdGhlciBpbnN0YW5jZXMgb2YgVG9uZS5Tb2xvLlxuXHRcdCAqICBPbmx5IG9uZSBpbnN0YW5jZSBjYW4gYmUgc29sb2VkIGF0IGEgdGltZS4gQSBzb2xvZWRcblx0XHQgKiAgaW5zdGFuY2Ugd2lsbCByZXBvcnQgYHNvbG89ZmFsc2VgIHdoZW4gYW5vdGhlciBpbnN0YW5jZSBpcyBzb2xvZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlNvbG8jXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqICBAbmFtZSBzb2xvXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Tb2xvLnByb3RvdHlwZSwgJ3NvbG8nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1NvbG9lZCgpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc29sbykge1xuXHQgICAgICAgICAgICBpZiAoc29sbykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fYWRkU29sbygpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlU29sbygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5lbWl0KCdzb2xvJywgdGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSWYgdGhlIGN1cnJlbnQgaW5zdGFuY2UgaXMgbXV0ZWQsIGkuZS4gYW5vdGhlciBpbnN0YW5jZSBpcyBzb2xvZWRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuU29sbyNcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogIEBuYW1lIG11dGVkXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU29sby5wcm90b3R5cGUsICdtdXRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQuZ2Fpbi52YWx1ZSA9PT0gMDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIEFkZCB0aGlzIHRvIHRoZSBzb2xvZWQgYXJyYXlcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5fYWRkU29sbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoIVRvbmUuaXNBcnJheSh0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvKSkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvID0gW107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICghdGhpcy5faXNTb2xvZWQoKSkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvLnB1c2godGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlbW92ZSB0aGlzIGZyb20gdGhlIHNvbG9lZCBhcnJheVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8ucHJvdG90eXBlLl9yZW1vdmVTb2xvID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9pc1NvbG9lZCgpKSB7XG5cdCAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8uaW5kZXhPZih0aGlzKTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSBJcyB0aGlzIG9uIHRoZSBzb2xvZWQgYXJyYXlcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5faXNTb2xvZWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5sZW5ndGggIT09IDAgJiYgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5pbmRleE9mKHRoaXMpICE9PSAtMTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBubyBvbmUgaXMgc29sb2VkXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuX25vU29sb3MgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuICFUb25lLmlzQXJyYXkodGhpcy5jb250ZXh0Ll9jdXJyZW50U29sbykgfHwgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5sZW5ndGggPT09IDA7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNvbG8gdGhlIGN1cnJlbnQgaW5zdGFuY2UgYW5kIHVuc29sbyBhbGwgb3RoZXIgaW5zdGFuY2VzLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLlNvbG99ICBpbnN0YW5jZSAgVGhlIGluc3RhbmNlIHdoaWNoIGlzIGJlaW5nIHNvbG9lZC91bnNvbG9lZC5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuX3NvbG9lZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5faXNTb2xvZWQoKSkge1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmdhaW4udmFsdWUgPSAxO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fbm9Tb2xvcygpKSB7XG5cdCAgICAgICAgICAgIC8vbm8gb25lIGlzIHNvbG9lZFxuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmdhaW4udmFsdWUgPSAxO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQuZ2Fpbi52YWx1ZSA9IDA7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Tb2xvfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5vZmYoJ3NvbG8nLCB0aGlzLl9zb2xvQmluZCk7XG5cdCAgICAgICAgdGhpcy5fcmVtb3ZlU29sbygpO1xuXHQgICAgICAgIHRoaXMuX3NvbG9CaW5kID0gbnVsbDtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNvbG87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEdldCB0aGUgY3VycmVudCB3YXZlZm9ybSBkYXRhIG9mIHRoZSBjb25uZWN0ZWQgYXVkaW8gc291cmNlLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgRkZULiBWYWx1ZSBtdXN0IGJlIGEgcG93ZXIgb2Zcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZWZvcm0gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydzaXplJ10sIFRvbmUuV2F2ZWZvcm0pO1xuXHQgICAgICAgIG9wdGlvbnMudHlwZSA9IFRvbmUuQW5hbHlzZXIuVHlwZS5XYXZlZm9ybTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNlciBub2RlLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW5hbHlzZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkFuYWx5c2VyKG9wdGlvbnMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuV2F2ZWZvcm0sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXMuXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlZm9ybS5kZWZhdWx0cyA9IHsgJ3NpemUnOiAxMDI0IH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0cyB0aGUgd2F2ZWZvcm0gb2YgdGhlIGF1ZGlvIHNvdXJjZS4gUmV0dXJucyB0aGUgd2F2ZWZvcm0gZGF0YVxuXHRcdCAqICBvZiBsZW5ndGggW3NpemVdKCNzaXplKSBhcyBhIEZsb2F0MzJBcnJheSB3aXRoIHZhbHVlcyBiZXR3ZWVuIC0xIGFuZCAxLlxuXHRcdCAqICBAcmV0dXJucyB7VHlwZWRBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZWZvcm0ucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5nZXRWYWx1ZSgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc2l6ZSBvZiBhbmFseXNpcy4gVGhpcyBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuV2F2ZWZvcm0jXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIHNpemVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLldhdmVmb3JtLnByb3RvdHlwZSwgJ3NpemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5zaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2l6ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5zaXplID0gc2l6ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuV2F2ZWZvcm19ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVmb3JtLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5XYXZlZm9ybTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ3RybEludGVycG9sYXRlIHdpbGwgaW50ZXJwb2xhdGUgYmV0d2VlbiBnaXZlbiB2YWx1ZXMgYmFzZWRcblx0XHQgKiAgICAgICAgIG9uIHRoZSBcImluZGV4XCIgcHJvcGVydHkuIFBhc3NpbmcgaW4gYW4gYXJyYXkgb3Igb2JqZWN0IGxpdGVyYWxcblx0XHQgKiAgICAgICAgIHdpbGwgaW50ZXJwb2xhdGUgZWFjaCBvZiB0aGUgcGFyYW1ldGVycy4gTm90ZSAoaS5lLiBcIkMzXCIpXG5cdFx0ICogICAgICAgICBhbmQgVGltZSAoaS5lLiBcIjRuICsgMlwiKSBjYW4gYmUgaW50ZXJwb2xhdGVkLiBBbGwgb3RoZXIgdmFsdWVzIGFyZVxuXHRcdCAqICAgICAgICAgYXNzdW1lZCB0byBiZSBudW1iZXJzLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgaW50ZXJwID0gbmV3IFRvbmUuQ3RybEludGVycG9sYXRlKFswLCAyLCA5LCA0XSk7XG5cdFx0ICogaW50ZXJwLmluZGV4ID0gMC43NTtcblx0XHQgKiBpbnRlcnAudmFsdWU7IC8vcmV0dXJucyAxLjVcblx0XHQgKlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBpbnRlcnAgPSBuZXcgVG9uZS5DdHJsSW50ZXJwb2xhdGUoW1xuXHRcdCAqIFx0WzIsIDQsIDVdLFxuXHRcdCAqIFx0WzksIDMsIDJdLFxuXHRcdCAqIF0pO1xuXHRcdCAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgYXJyYXkgb2YgdmFsdWVzIHRvIGludGVycG9sYXRlIG92ZXJcblx0XHQgKiBAcGFyYW0ge1Bvc2l0aXZlfSBpbmRleCBUaGUgaW5pdGlhbCBpbnRlcnBvbGF0aW9uIGluZGV4LlxuXHRcdCAqIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsSW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndmFsdWVzJyxcblx0ICAgICAgICAgICAgJ2luZGV4J1xuXHQgICAgICAgIF0sIFRvbmUuQ3RybEludGVycG9sYXRlKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlcyB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gb3B0aW9ucy52YWx1ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGludGVycG9sYXRlZCBpbmRleCBiZXR3ZWVuIHZhbHVlcy4gRm9yIGV4YW1wbGU6IGEgdmFsdWUgb2YgMS41XG5cdFx0XHQgKiAgd291bGQgaW50ZXJwb2xhdGUgZXF1YWxseSBiZXR3ZWVuIHRoZSB2YWx1ZSBhdCBpbmRleCAxXG5cdFx0XHQgKiAgYW5kIHRoZSB2YWx1ZSBhdCBpbmRleCAyLiBcblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogaW50ZXJwLmluZGV4ID0gMDsgXG5cdFx0XHQgKiBpbnRlcnAudmFsdWU7IC8vcmV0dXJucyB0aGUgdmFsdWUgYXQgMFxuXHRcdFx0ICogaW50ZXJwLmluZGV4ID0gMC41O1xuXHRcdFx0ICogaW50ZXJwLnZhbHVlOyAvL3JldHVybnMgdGhlIHZhbHVlIGJldHdlZW4gaW5kaWNlcyAwIGFuZCAxLiBcblx0XHRcdCAqICBAdHlwZSAge1Bvc2l0aXZlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbmRleCA9IG9wdGlvbnMuaW5kZXg7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DdHJsSW50ZXJwb2xhdGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxJbnRlcnBvbGF0ZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnaW5kZXgnOiAwLFxuXHQgICAgICAgICd2YWx1ZXMnOiBbXVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY3VycmVudCBpbnRlcnBvbGF0ZWQgdmFsdWUgYmFzZWQgb24gdGhlIGluZGV4XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DdHJsSW50ZXJwb2xhdGUjXG5cdFx0ICogIEB0eXBlIHsqfVxuXHRcdCAqICBAbmFtZSB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ3RybEludGVycG9sYXRlLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4O1xuXHQgICAgICAgICAgICBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0aGlzLnZhbHVlcy5sZW5ndGggLSAxKTtcblx0ICAgICAgICAgICAgdmFyIGxvd2VyUG9zaXRpb24gPSBNYXRoLmZsb29yKGluZGV4KTtcblx0ICAgICAgICAgICAgdmFyIGxvd2VyID0gdGhpcy52YWx1ZXNbbG93ZXJQb3NpdGlvbl07XG5cdCAgICAgICAgICAgIHZhciB1cHBlciA9IHRoaXMudmFsdWVzW01hdGguY2VpbChpbmRleCldO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faW50ZXJwb2xhdGUoaW5kZXggLSBsb3dlclBvc2l0aW9uLCBsb3dlciwgdXBwZXIpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGludGVycG9sYXRpb24gcm91dGluZVxuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIGluZGV4ICBUaGUgaW5kZXggYmV0d2VlbiB0aGUgbG93ZXIgYW5kIHVwcGVyXG5cdFx0ICogIEBwYXJhbSAgeyp9ICBsb3dlciBcblx0XHQgKiAgQHBhcmFtICB7Kn0gIHVwcGVyIFxuXHRcdCAqICBAcmV0dXJuICB7Kn0gIFRoZSBpbnRlcnBvbGF0ZWQgdmFsdWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybEludGVycG9sYXRlLnByb3RvdHlwZS5faW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAoaW5kZXgsIGxvd2VyLCB1cHBlcikge1xuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkobG93ZXIpKSB7XG5cdCAgICAgICAgICAgIHZhciByZXRBcnJheSA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvd2VyLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICByZXRBcnJheVtpXSA9IHRoaXMuX2ludGVycG9sYXRlKGluZGV4LCBsb3dlcltpXSwgdXBwZXJbaV0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiByZXRBcnJheTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNPYmplY3QobG93ZXIpKSB7XG5cdCAgICAgICAgICAgIHZhciByZXRPYmogPSB7fTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgYXR0ciBpbiBsb3dlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0T2JqW2F0dHJdID0gdGhpcy5faW50ZXJwb2xhdGUoaW5kZXgsIGxvd2VyW2F0dHJdLCB1cHBlclthdHRyXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHJldE9iajtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBsb3dlciA9IHRoaXMuX3RvTnVtYmVyKGxvd2VyKTtcblx0ICAgICAgICAgICAgdXBwZXIgPSB0aGlzLl90b051bWJlcih1cHBlcik7XG5cdCAgICAgICAgICAgIHJldHVybiAoMSAtIGluZGV4KSAqIGxvd2VyICsgaW5kZXggKiB1cHBlcjtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgZnJvbSB0aGUgZ2l2ZW4gdHlwZSBpbnRvIGEgbnVtYmVyXG5cdFx0ICogIEBwYXJhbSAge051bWJlcnxTdHJpbmd9ICB2YWx1ZVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsSW50ZXJwb2xhdGUucHJvdG90eXBlLl90b051bWJlciA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcih2YWwpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy9vdGhlcndpc2UgYXNzdW1lIHRoYXQgaXQncyBUaW1lLi4uXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnRvU2Vjb25kcyh2YWwpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQ3RybEludGVycG9sYXRlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsSW50ZXJwb2xhdGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkN0cmxJbnRlcnBvbGF0ZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ3RybE1hcmtvdiByZXByZXNlbnRzIGEgTWFya292IENoYWluIHdoZXJlIGVhY2ggY2FsbFxuXHRcdCAqICAgICAgICAgdG8gVG9uZS5DdHJsTWFya292Lm5leHQgd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IHN0YXRlLiBJZiB0aGUgbmV4dFxuXHRcdCAqICAgICAgICAgc3RhdGUgY2hvaWNlIGlzIGFuIGFycmF5LCB0aGUgbmV4dCBzdGF0ZSBpcyBjaG9zZW4gcmFuZG9tbHkgd2l0aFxuXHRcdCAqICAgICAgICAgZXZlbiBwcm9iYWJpbGl0eSBmb3IgYWxsIG9mIHRoZSBjaG9pY2VzLiBGb3IgYSB3ZWlnaHRlZCBwcm9iYWJpbGl0eVxuXHRcdCAqICAgICAgICAgb2YgdGhlIG5leHQgY2hvaWNlcywgcGFzcyBpbiBhbiBvYmplY3Qgd2l0aCBcInN0YXRlXCIgYW5kIFwicHJvYmFiaWxpdHlcIiBhdHRyaWJ1dGVzLiBcblx0XHQgKiAgICAgICAgIFRoZSBwcm9iYWJpbGl0aWVzIHdpbGwgYmUgbm9ybWFsaXplZCBhbmQgdGhlbiBjaG9zZW4uIElmIG5vIG5leHQgb3B0aW9uc1xuXHRcdCAqICAgICAgICAgYXJlIGdpdmVuIGZvciB0aGUgY3VycmVudCBzdGF0ZSwgdGhlIHN0YXRlIHdpbGwgc3RheSB0aGVyZS4gXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBjaGFpbiA9IG5ldyBUb25lLkN0cmxNYXJrb3Yoe1xuXHRcdCAqIFx0XCJiZWdpbm5pbmdcIiA6IFtcImVuZFwiLCBcIm1pZGRsZVwiXSxcblx0XHQgKiBcdFwibWlkZGxlXCIgOiBcImVuZFwiXG5cdFx0ICogfSk7XG5cdFx0ICogY2hhaW4udmFsdWUgPSBcImJlZ2lubmluZ1wiO1xuXHRcdCAqIGNoYWluLm5leHQoKTsgLy9yZXR1cm5zIFwiZW5kXCIgb3IgXCJtaWRkbGVcIiB3aXRoIDUwJSBwcm9iYWJpbGl0eVxuXHRcdCAqXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGNoYWluID0gbmV3IFRvbmUuQ3RybE1hcmtvdih7XG5cdFx0ICogXHRcImJlZ2lubmluZ1wiIDogW3tcInZhbHVlXCIgOiBcImVuZFwiLCBcInByb2JhYmlsaXR5XCIgOiAwLjh9LCBcblx0XHQgKiBcdFx0XHRcdFx0e1widmFsdWVcIiA6IFwibWlkZGxlXCIsIFwicHJvYmFiaWxpdHlcIiA6IDAuMn1dLFxuXHRcdCAqIFx0XCJtaWRkbGVcIiA6IFwiZW5kXCJcblx0XHQgKiB9KTtcblx0XHQgKiBjaGFpbi52YWx1ZSA9IFwiYmVnaW5uaW5nXCI7XG5cdFx0ICogY2hhaW4ubmV4dCgpOyAvL3JldHVybnMgXCJlbmRcIiB3aXRoIDgwJSBwcm9iYWJpbGl0eSBvciBcIm1pZGRsZVwiIHdpdGggMjAlLlxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gdmFsdWVzIEFuIG9iamVjdCB3aXRoIHRoZSBzdGF0ZSBuYW1lcyBhcyB0aGUga2V5c1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgbmV4dCBzdGF0ZShzKSBhcyB0aGUgdmFsdWVzLiBcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybE1hcmtvdiA9IGZ1bmN0aW9uICh2YWx1ZXMsIGluaXRpYWwpIHtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIE1hcmtvdiB2YWx1ZXMgd2l0aCBzdGF0ZXMgYXMgdGhlIGtleXNcblx0XHRcdCAqICBhbmQgbmV4dCBzdGF0ZShzKSBhcyB0aGUgdmFsdWVzLiBcblx0XHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBUb25lLmRlZmF1bHRBcmcodmFsdWVzLCB7fSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIE1hcmtvdiB2YWx1ZXMuIFRoZSBuZXh0XG5cdFx0XHQgKiAgc3RhdGUgd2lsbCBiZSBldmFsdWF0ZWQgYW5kIHJldHVybmVkIHdoZW4gVG9uZS5DdHJsTWFya292Lm5leHRcblx0XHRcdCAqICBpcyBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZhbHVlID0gVG9uZS5kZWZhdWx0QXJnKGluaXRpYWwsIE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKVswXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DdHJsTWFya292KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBuZXh0IHN0YXRlIG9mIHRoZSBNYXJrb3YgdmFsdWVzLiBcblx0XHQgKiAgQHJldHVybiAge1N0cmluZ31cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybE1hcmtvdi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy52YWx1ZXMuaGFzT3duUHJvcGVydHkodGhpcy52YWx1ZSkpIHtcblx0ICAgICAgICAgICAgdmFyIG5leHQgPSB0aGlzLnZhbHVlc1t0aGlzLnZhbHVlXTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheShuZXh0KSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGRpc3RyaWJ1dGlvbiA9IHRoaXMuX2dldFByb2JEaXN0cmlidXRpb24obmV4dCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgcmFuZCA9IE1hdGgucmFuZG9tKCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgdG90YWwgPSAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXN0cmlidXRpb24ubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZGlzdCA9IGRpc3RyaWJ1dGlvbltpXTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAocmFuZCA+IHRvdGFsICYmIHJhbmQgPCB0b3RhbCArIGRpc3QpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNob3NlbiA9IG5leHRbaV07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KGNob3NlbikpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjaG9zZW4udmFsdWU7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gY2hvc2VuO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IGRpc3Q7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV4dDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2hvb3NlIHJhbmRvbWx5IGZyb20gYW4gYXJyYXkgd2VpZ2h0ZWQgb3B0aW9ucyBpbiB0aGUgZm9ybSBcblx0XHQgKiAge1wic3RhdGVcIiA6IHN0cmluZywgXCJwcm9iYWJpbGl0eVwiIDogbnVtYmVyfSBvciBhbiBhcnJheSBvZiB2YWx1ZXNcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICBvcHRpb25zIFxuXHRcdCAqICBAcmV0dXJuICB7QXJyYXl9ICBUaGUgcmFuZG9tbHkgc2VsZWN0ZWQgY2hvaWNlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxNYXJrb3YucHJvdG90eXBlLl9nZXRQcm9iRGlzdHJpYnV0aW9uID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICB2YXIgZGlzdHJpYnV0aW9uID0gW107XG5cdCAgICAgICAgdmFyIHRvdGFsID0gMDtcblx0ICAgICAgICB2YXIgbmVlZHNOb3JtYWxpemluZyA9IGZhbHNlO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgb3B0aW9uID0gb3B0aW9uc1tpXTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNPYmplY3Qob3B0aW9uKSkge1xuXHQgICAgICAgICAgICAgICAgbmVlZHNOb3JtYWxpemluZyA9IHRydWU7XG5cdCAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25baV0gPSBvcHRpb24ucHJvYmFiaWxpdHk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25baV0gPSAxIC8gb3B0aW9ucy5sZW5ndGg7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdG90YWwgKz0gZGlzdHJpYnV0aW9uW2ldO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAobmVlZHNOb3JtYWxpemluZykge1xuXHQgICAgICAgICAgICAvL25vcm1hbGl6ZSB0aGUgdmFsdWVzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGlzdHJpYnV0aW9uLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25bal0gPSBkaXN0cmlidXRpb25bal0gLyB0b3RhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gZGlzdHJpYnV0aW9uO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5DdHJsTWFya292fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsTWFya292LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DdHJsTWFya292O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgR2VuZXJhdGUgcGF0dGVybnMgZnJvbSBhbiBhcnJheSBvZiB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBIYXMgYSBudW1iZXIgb2YgYXJwZWdnaWF0aW9uIGFuZCByYW5kb21pemVkXG5cdFx0ICogICAgICAgICBzZWxlY3Rpb24gcGF0dGVybnMuIFxuXHRcdCAqICAgICAgICAgICA8dWw+XG5cdFx0ICogIFx0ICAgICAgICA8bGk+XCJ1cFwiIC0gY3ljbGVzIHVwd2FyZDwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cImRvd25cIiAtIGN5Y2xlcyBkb3dud2FyZDwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cInVwRG93blwiIC0gdXAgdGhlbiBhbmQgZG93bjwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cImRvd25VcFwiIC0gY3ljbGVzIGRvd24gdGhlbiBhbmQgdXA8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJhbHRlcm5hdGVVcFwiIC0ganVtcCB1cCB0d28gYW5kIGRvd24gb25lPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwiYWx0ZXJuYXRlRG93blwiIC0ganVtcCBkb3duIHR3byBhbmQgdXAgb25lPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwicmFuZG9tXCIgLSByYW5kb21seSBzZWxlY3QgYW4gaW5kZXg8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJyYW5kb21XYWxrXCIgLSByYW5kb21seSBtb3ZlcyBvbmUgaW5kZXggYXdheSBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwicmFuZG9tT25jZVwiIC0gcmFuZG9tbHkgc2VsZWN0IGFuIGluZGV4IHdpdGhvdXQgcmVwZWF0aW5nIHVudGlsIGFsbCB2YWx1ZXMgaGF2ZSBiZWVuIGNob3Nlbi48L2xpPlxuXHRcdCAqICAgICBcdFx0PC91bD5cblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICB2YWx1ZXMgICBBbiBhcnJheSBvZiBvcHRpb25zIHRvIGNob29zZSBmcm9tLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkN0cmxQYXR0ZXJuLlR5cGU9fSAgdHlwZSAgVGhlIG5hbWUgb2YgdGhlIHBhdHRlcm4uXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd2YWx1ZXMnLFxuXHQgICAgICAgICAgICAndHlwZSdcblx0ICAgICAgICBdLCBUb25lLkN0cmxQYXR0ZXJuKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFycmF5IG9mIHZhbHVlcyB0byBhcnBlZ2dpYXRlIG92ZXJcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZhbHVlcyA9IG9wdGlvbnMudmFsdWVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSB2YWx1ZXMgYXJyYXlcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0eXBlIHBsYWNlaG9sZGVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ3RybFBhdHRlcm4uVHlwZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2h1ZmZsZWQgdmFsdWVzIGZvciB0aGUgUmFuZG9tT25jZSB0eXBlXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaHVmZmxlZCA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRpcmVjdGlvbiBvZiB0aGUgbW92ZW1lbnRcblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBudWxsO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkN0cmxQYXR0ZXJuKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgQ29udHJvbCBQYXR0ZXJuc1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybi5UeXBlID0ge1xuXHQgICAgICAgIFVwOiAndXAnLFxuXHQgICAgICAgIERvd246ICdkb3duJyxcblx0ICAgICAgICBVcERvd246ICd1cERvd24nLFxuXHQgICAgICAgIERvd25VcDogJ2Rvd25VcCcsXG5cdCAgICAgICAgQWx0ZXJuYXRlVXA6ICdhbHRlcm5hdGVVcCcsXG5cdCAgICAgICAgQWx0ZXJuYXRlRG93bjogJ2FsdGVybmF0ZURvd24nLFxuXHQgICAgICAgIFJhbmRvbTogJ3JhbmRvbScsXG5cdCAgICAgICAgUmFuZG9tV2FsazogJ3JhbmRvbVdhbGsnLFxuXHQgICAgICAgIFJhbmRvbU9uY2U6ICdyYW5kb21PbmNlJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXMuIFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3R5cGUnOiBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXAsXG5cdCAgICAgICAgJ3ZhbHVlcyc6IFtdXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB2YWx1ZSBhdCB0aGUgY3VycmVudCBpbmRleCBvZiB0aGUgcGF0dGVybi5cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkN0cmxQYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7Kn1cblx0XHQgKiAgQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkN0cmxQYXR0ZXJuLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvL3NvbWUgc2FmZWd1YXJkc1xuXHQgICAgICAgICAgICBpZiAodGhpcy52YWx1ZXMubGVuZ3RoID09PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZXMubGVuZ3RoID09PSAxKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMF07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5pbmRleCA9IE1hdGgubWluKHRoaXMuaW5kZXgsIHRoaXMudmFsdWVzLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZXNbdGhpcy5pbmRleF07XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb21PbmNlKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZXMubGVuZ3RoICE9PSB0aGlzLl9zaHVmZmxlZC5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaHVmZmxlVmFsdWVzKCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB2YWwgPSB0aGlzLnZhbHVlc1t0aGlzLl9zaHVmZmxlZFt0aGlzLmluZGV4XV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGF0dGVybiB1c2VkIHRvIHNlbGVjdCB0aGUgbmV4dFxuXHRcdCAqICBpdGVtIGZyb20gdGhlIHZhbHVlcyBhcnJheVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DdHJsUGF0dGVybiNcblx0XHQgKiAgQHR5cGUge1RvbmUuQ3RybFBhdHRlcm4uVHlwZX1cblx0XHQgKiAgQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ3RybFBhdHRlcm4ucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9zaHVmZmxlZCA9IG51bGw7XG5cdCAgICAgICAgICAgIC8vdGhlIGZpcnN0IGluZGV4XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXAgfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwRG93biB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tT25jZSB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duVXAgfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkFsdGVybmF0ZURvd24pIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSB0aGlzLnZhbHVlcy5sZW5ndGggLSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vdGhlIGRpcmVjdGlvblxuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwRG93biB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93blVwIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVEb3duKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL3JhbmRvbXNcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb21PbmNlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zaHVmZmxlVmFsdWVzKCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5SYW5kb20pIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLnZhbHVlcy5sZW5ndGgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBuZXh0IHZhbHVlIGdpdmVuIHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0ICogIGFuZCBwYXR0ZXJuLlxuXHRcdCAqICBAcmV0dXJuIHsqfSBUaGUgbmV4dCB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgdHlwZSA9IHRoaXMudHlwZTtcblx0ICAgICAgICAvL2Nob29zZSB0aGUgbmV4dCBpbmRleFxuXHQgICAgICAgIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXApIHtcblx0ICAgICAgICAgICAgdGhpcy5pbmRleCsrO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA+PSB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bikge1xuXHQgICAgICAgICAgICB0aGlzLmluZGV4LS07XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmluZGV4IDwgMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHRoaXMudmFsdWVzLmxlbmd0aCAtIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcERvd24gfHwgdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd25VcCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGlyZWN0aW9uID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgtLTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAxO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5kZXggPj0gdGhpcy52YWx1ZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy52YWx1ZXMubGVuZ3RoIC0gMjtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLnZhbHVlcy5sZW5ndGgpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbVdhbGspIHtcblx0ICAgICAgICAgICAgaWYgKE1hdGgucmFuZG9tKCkgPCAwLjUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgtLTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLm1heCh0aGlzLmluZGV4LCAwKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLm1pbih0aGlzLmluZGV4LCB0aGlzLnZhbHVlcy5sZW5ndGggLSAxKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbU9uY2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5pbmRleCsrO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA+PSB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgICAgICAgICAgLy9yZXNodWZmbGUgdGhlIHZhbHVlcyBmb3IgbmV4dCB0aW1lXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zaHVmZmxlVmFsdWVzKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVVcCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGlyZWN0aW9uID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMjtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCAtPSAxO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmluZGV4ID49IHRoaXMudmFsdWVzLmxlbmd0aCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IDA7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVEb3duKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9kaXJlY3Rpb24gPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSAxO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd247XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4IC09IDI7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPCAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy52YWx1ZXMubGVuZ3RoIC0gMTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTaHVmZmxlcyB0aGUgdmFsdWVzIGFuZCBwbGFjZXMgdGhlIHJlc3VsdHMgaW50byB0aGUgX3NodWZmbGVkXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxQYXR0ZXJuLnByb3RvdHlwZS5fc2h1ZmZsZVZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgY29weSA9IFtdO1xuXHQgICAgICAgIHRoaXMuX3NodWZmbGVkID0gW107XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICBjb3B5W2ldID0gaTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgd2hpbGUgKGNvcHkubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgICB2YXIgcmFuZFZhbCA9IGNvcHkuc3BsaWNlKE1hdGguZmxvb3IoY29weS5sZW5ndGggKiBNYXRoLnJhbmRvbSgpKSwgMSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NodWZmbGVkLnB1c2gocmFuZFZhbFswXSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DdHJsUGF0dGVybn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zaHVmZmxlZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkN0cmxQYXR0ZXJuO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIENob29zZSBhIHJhbmRvbSB2YWx1ZS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHJhbmRvbVdhbGsgPSBuZXcgVG9uZS5DdHJsUmFuZG9tKHtcblx0XHQgKiBcdFwibWluXCIgOiAwLFxuXHRcdCAqIFx0XCJtYXhcIiA6IDEwLFxuXHRcdCAqIFx0XCJpbnRlZ2VyXCIgOiB0cnVlXG5cdFx0ICogfSk7XG5cdFx0ICogcmFuZG9tV2Fsay5ldmFsKCk7XG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ8VGltZT19IG1pbiBUaGUgbWluaW11bSByZXR1cm4gdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfFRpbWU9fSBtYXggVGhlIG1heGltdW0gcmV0dXJuIHZhbHVlLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUmFuZG9tID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ21pbicsXG5cdCAgICAgICAgICAgICdtYXgnXG5cdCAgICAgICAgXSwgVG9uZS5DdHJsUmFuZG9tKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pbmltdW0gcmV0dXJuIHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ8VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWluID0gb3B0aW9ucy5taW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1heGltdW0gcmV0dXJuIHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ8VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWF4ID0gb3B0aW9ucy5tYXg7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSWYgdGhlIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgYW4gaW50ZWdlclxuXHRcdFx0ICogIEB0eXBlICB7Qm9vbGVhbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW50ZWdlciA9IG9wdGlvbnMuaW50ZWdlcjtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkN0cmxSYW5kb20pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxSYW5kb20uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgJ21heCc6IDEsXG5cdCAgICAgICAgJ2ludGVnZXInOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gYSByYW5kb20gdmFsdWUgYmV0d2VlbiBtaW4gYW5kIG1heC4gXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DdHJsUmFuZG9tI1xuXHRcdCAqICBAdHlwZSB7Kn1cblx0XHQgKiAgQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkN0cmxSYW5kb20ucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBtaW4gPSB0aGlzLnRvU2Vjb25kcyh0aGlzLm1pbik7XG5cdCAgICAgICAgICAgIHZhciBtYXggPSB0aGlzLnRvU2Vjb25kcyh0aGlzLm1heCk7XG5cdCAgICAgICAgICAgIHZhciByYW5kID0gTWF0aC5yYW5kb20oKTtcblx0ICAgICAgICAgICAgdmFyIHZhbCA9IHJhbmQgKiBtaW4gKyAoMSAtIHJhbmQpICogbWF4O1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbnRlZ2VyKSB7XG5cdCAgICAgICAgICAgICAgICB2YWwgPSBNYXRoLmZsb29yKHZhbCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIHJldHVybiBUb25lLkN0cmxSYW5kb207XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQSBkYXRhIHN0cnVjdHVyZSBmb3IgaG9sZGluZyBtdWx0aXBsZSBidWZmZXJzLlxuXHRcdCAqICBcblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fEFycmF5fSAgICB1cmxzICAgICAgQW4gb2JqZWN0IGxpdGVyYWwgb3IgYXJyYXlcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdXJscyB0byBsb2FkLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVmZmVycyBhcmUgbG9hZGVkLiBcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9sb2FkIGEgd2hvbGUgYmFuayBvZiBwaWFubyBzYW1wbGVzXG5cdFx0ICogdmFyIHBpYW5vU2FtcGxlcyA9IG5ldyBUb25lLkJ1ZmZlcnMoe1xuXHRcdCAqIFx0XCJDNFwiIDogXCJwYXRoL3RvL0M0Lm1wM1wiXG5cdFx0ICogXHRcIkMjNFwiIDogXCJwYXRoL3RvL0MjNC5tcDNcIlxuXHRcdCAqIFx0XCJENFwiIDogXCJwYXRoL3RvL0Q0Lm1wM1wiXG5cdFx0ICogXHRcIkQjNFwiIDogXCJwYXRoL3RvL0QjNC5tcDNcIlxuXHRcdCAqIFx0Li4uXG5cdFx0ICogfSwgZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vcGxheSBvbmUgb2YgdGhlIHNhbXBsZXMgd2hlbiB0aGV5IGFsbCBsb2FkXG5cdFx0ICogXHRwbGF5ZXIuYnVmZmVyID0gcGlhbm9TYW1wbGVzLmdldChcIkM0XCIpO1xuXHRcdCAqIFx0cGxheWVyLnN0YXJ0KCk7XG5cdFx0ICogfSk7XG5cdFx0ICogXHRAZXhhbXBsZVxuXHRcdCAqIC8vVG8gcGFzcyBpbiBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgaW4gdGhlIHNlY29uZCBwYXJhbWV0ZXJcblx0XHQgKiB2YXIgYnVmZmVycyA9IG5ldyBUb25lLkJ1ZmZlcnModXJscywge1xuXHRcdCAqIFx0XCJvbmxvYWRcIiA6IGNhbGxiYWNrLFxuXHRcdCAqIFx0XCJiYXNlVXJsXCIgOiBcIi4uL3BhdGgvdG8vYXVkaW8vXCJcblx0XHQgKiB9KVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzID0gZnVuY3Rpb24gKHVybHMpIHtcblx0ICAgICAgICAvL3JlbW92ZSB0aGUgdXJscyBmcm9tIHRoZSBvcHRpb25zXG5cdCAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIGFyZ3Muc2hpZnQoKTtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJncywgW1xuXHQgICAgICAgICAgICAnb25sb2FkJyxcblx0ICAgICAgICAgICAgJ2Jhc2VVcmwnXG5cdCAgICAgICAgXSwgVG9uZS5CdWZmZXJzKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWxsIG9mIHRoZSBidWZmZXJzXG5cdFx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlcnMgPSB7fTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIHBhdGggd2hpY2ggaXMgcHJlZml4ZWQgYmVmb3JlIGV2ZXJ5IHVybC5cblx0XHRcdCAqICBAdHlwZSAge1N0cmluZ31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYmFzZVVybCA9IG9wdGlvbnMuYmFzZVVybDtcblx0ICAgICAgICB0aGlzLl9sb2FkaW5nQ291bnQgPSAwO1xuXHQgICAgICAgIC8vYWRkIGVhY2ggb25lXG5cdCAgICAgICAgZm9yICh2YXIga2V5IGluIHVybHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50Kys7XG5cdCAgICAgICAgICAgIHRoaXMuYWRkKGtleSwgdXJsc1trZXldLCB0aGlzLl9idWZmZXJMb2FkZWQuYmluZCh0aGlzLCBvcHRpb25zLm9ubG9hZCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkJ1ZmZlcnMpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvbmxvYWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2Jhc2VVcmwnOiAnJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcnVlIGlmIHRoZSBidWZmZXJzIG9iamVjdCBoYXMgYSBidWZmZXIgYnkgdGhhdCBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgbmFtZSAgVGhlIGtleSBvciBpbmRleCBvZiB0aGUgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuXG5cdFx0ICogIEByZXR1cm4gIHtCb29sZWFufVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAobmFtZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXJzLmhhc093blByb3BlcnR5KG5hbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgYSBidWZmZXIgYnkgbmFtZS4gSWYgYW4gYXJyYXkgd2FzIGxvYWRlZCwgXG5cdFx0ICogIHRoZW4gdXNlIHRoZSBhcnJheSBpbmRleC5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIG5hbWUgIFRoZSBrZXkgb3IgaW5kZXggb2YgdGhlIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuaGFzKG5hbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXJzW25hbWVdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5CdWZmZXJzOiBubyBidWZmZXIgbmFtZWQgJyArIG5hbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQSBidWZmZXIgd2FzIGxvYWRlZC4gZGVjcmVtZW50IHRoZSBjb3VudGVyLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLnByb3RvdHlwZS5fYnVmZmVyTG9hZGVkID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50LS07XG5cdCAgICAgICAgaWYgKHRoaXMuX2xvYWRpbmdDb3VudCA9PT0gMCAmJiBjYWxsYmFjaykge1xuXHQgICAgICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgdGhlIGJ1ZmZlcnMgYXJlIGxvYWRlZCBvciBub3Rcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJzI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvYWRlZFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVycy5wcm90b3R5cGUsICdsb2FkZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBpc0xvYWRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGJ1ZmZOYW1lIGluIHRoaXMuX2J1ZmZlcnMpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBidWZmID0gdGhpcy5nZXQoYnVmZk5hbWUpO1xuXHQgICAgICAgICAgICAgICAgaXNMb2FkZWQgPSBpc0xvYWRlZCAmJiBidWZmLmxvYWRlZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gaXNMb2FkZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGEgYnVmZmVyIGJ5IG5hbWUgYW5kIHVybCB0byB0aGUgQnVmZmVyc1xuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICAgIG5hbWUgICAgICBBIHVuaXF1ZSBuYW1lIHRvIGdpdmVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlclxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8VG9uZS5CdWZmZXJ8QXVkaW9idWZmZXJ9ICB1cmwgIEVpdGhlciB0aGUgdXJsIG9mIHRoZSBidWZlciwgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhZGRlZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGdpdmVuIG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgdXJsIGlzIGxvYWRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgY2FsbGJhY2spIHtcblx0ICAgICAgICBjYWxsYmFjayA9IFRvbmUuZGVmYXVsdEFyZyhjYWxsYmFjaywgVG9uZS5ub09wKTtcblx0ICAgICAgICBpZiAodXJsIGluc3RhbmNlb2YgVG9uZS5CdWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tuYW1lXSA9IHVybDtcblx0ICAgICAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh1cmwgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzW25hbWVdID0gbmV3IFRvbmUuQnVmZmVyKHVybCk7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyh1cmwpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbbmFtZV0gPSBuZXcgVG9uZS5CdWZmZXIodGhpcy5iYXNlVXJsICsgdXJsLCBjYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyc30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMuX2J1ZmZlcnMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tuYW1lXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkJ1ZmZlcnM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIGJ1c2VzIGFyZSBhbm90aGVyIHdheSBvZiByb3V0aW5nIGF1ZGlvXG5cdFx0ICpcblx0XHQgKiAgYXVnbWVudHMgVG9uZS5wcm90b3R5cGUgdG8gaW5jbHVkZSBzZW5kIGFuZCByZWNpZXZlXG5cdFx0ICovXG5cdCAgICAvKipcblx0XHQgKiAgQWxsIG9mIHRoZSByb3V0ZXNcblx0XHQgKlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICB2YXIgQnVzZXMgPSB7fTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZW5kIHRoaXMgc2lnbmFsIHRvIHRoZSBjaGFubmVsIG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gY2hhbm5lbE5hbWUgQSBuYW1lZCBjaGFubmVsIHRvIHNlbmQgdGhlIHNpZ25hbCB0by5cblx0XHQgKiAgQHBhcmFtICB7RGVjaWJlbHN9IGFtb3VudCBUaGUgYW1vdW50IG9mIHRoZSBzb3VyY2UgdG8gc2VuZCB0byB0aGUgYnVzLlxuXHRcdCAqICBAcmV0dXJuIHtHYWluTm9kZX0gVGhlIGdhaW4gbm9kZSB3aGljaCBjb25uZWN0cyB0aGlzIG5vZGUgdG8gdGhlIGRlc2lyZWQgY2hhbm5lbC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIHRvIGFkanVzdCB0aGUgbGV2ZWxzIG9mIHRoZSBzZW5kLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHNvdXJjZS5zZW5kKFwicmV2ZXJiXCIsIC0xMik7XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24gKGNoYW5uZWxOYW1lLCBhbW91bnQpIHtcblx0ICAgICAgICBpZiAoIUJ1c2VzLmhhc093blByb3BlcnR5KGNoYW5uZWxOYW1lKSkge1xuXHQgICAgICAgICAgICBCdXNlc1tjaGFubmVsTmFtZV0gPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBhbW91bnQgPSBUb25lLmRlZmF1bHRBcmcoYW1vdW50LCAwKTtcblx0ICAgICAgICB2YXIgc2VuZEtub2IgPSBuZXcgVG9uZS5HYWluKGFtb3VudCwgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICB0aGlzLmNvbm5lY3Qoc2VuZEtub2IpO1xuXHQgICAgICAgIHNlbmRLbm9iLmNvbm5lY3QoQnVzZXNbY2hhbm5lbE5hbWVdKTtcblx0ICAgICAgICByZXR1cm4gc2VuZEtub2I7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlY2lldmUgdGhlIGlucHV0IGZyb20gdGhlIGRlc2lyZWQgY2hhbm5lbE5hbWUgdG8gdGhlIGlucHV0XG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSBjaGFubmVsTmFtZSBBIG5hbWVkIGNoYW5uZWwgdG8gc2VuZCB0aGUgc2lnbmFsIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXI9fSBjaGFubmVsTnVtYmVyIFRoZSBjaGFubmVsIHRvIGNvbm5lY3QgdG9cblx0XHQgKiAgQHJldHVybnMge1RvbmV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiByZXZlcmJFZmZlY3QucmVjZWl2ZShcInJldmVyYlwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnJlY2VpdmUgPSBmdW5jdGlvbiAoY2hhbm5lbE5hbWUsIGlucHV0TnVtKSB7XG5cdCAgICAgICAgaWYgKCFCdXNlcy5oYXNPd25Qcm9wZXJ0eShjaGFubmVsTmFtZSkpIHtcblx0ICAgICAgICAgICAgQnVzZXNbY2hhbm5lbE5hbWVdID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgQnVzZXNbY2hhbm5lbE5hbWVdLmNvbm5lY3QodGhpcywgMCwgaW5wdXROdW0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vcmVtb3ZlIGFsbCB0aGUgc2VuZC9yZWNlaXZlcyB3aGVuIGEgbmV3IGF1ZGlvIGNvbnRleHQgaXMgcGFzc2VkIGluXG5cdCAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgIGlmIChjb250ZXh0LkJ1c2VzKSB7XG5cdCAgICAgICAgICAgIEJ1c2VzID0gY29udGV4dC5CdXNlcztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBCdXNlcyA9IHt9O1xuXHQgICAgICAgICAgICBjb250ZXh0LkJ1c2VzID0gQnVzZXM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gVG9uZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRHJhdyBpcyB1c2VmdWwgZm9yIHN5bmNocm9uaXppbmcgdmlzdWFscyBhbmQgYXVkaW8gZXZlbnRzLlxuXHRcdCAqICAgICAgICAgQ2FsbGJhY2tzIGZyb20gVG9uZS5UcmFuc3BvcnQgb3IgYW55IG9mIHRoZSBUb25lLkV2ZW50IGNsYXNzZXNcblx0XHQgKiAgICAgICAgIGFsd2F5cyBoYXBwZW4gX2JlZm9yZV8gdGhlIHNjaGVkdWxlZCB0aW1lIGFuZCBhcmUgbm90IHN5bmNocm9uaXplZFxuXHRcdCAqICAgICAgICAgdG8gdGhlIGFuaW1hdGlvbiBmcmFtZSBzbyB0aGV5IGFyZSBub3QgZ29vZCBmb3IgdHJpZ2dlcmluZyB0aWdodGx5XG5cdFx0ICogICAgICAgICBzeW5jaHJvbml6ZWQgdmlzdWFscyBhbmQgc291bmQuIFRvbmUuRHJhdyBtYWtlcyBpdCBlYXN5IHRvIHNjaGVkdWxlXG5cdFx0ICogICAgICAgICBjYWxsYmFja3MgdXNpbmcgdGhlIEF1ZGlvQ29udGV4dCB0aW1lIGFuZCB1c2VzIHJlcXVlc3RBbmltYXRpb25GcmFtZS5cblx0XHQgKiAgICAgICAgIFxuXHRcdCAqICBAc2luZ2xldG9uXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0Ly91c2UgdGhlIHRpbWUgYXJndW1lbnQgdG8gc2NoZWR1bGUgYSBjYWxsYmFjayB3aXRoIFRvbmUuRHJhd1xuXHRcdCAqIFx0VG9uZS5EcmF3LnNjaGVkdWxlKGZ1bmN0aW9uKCl7XG5cdFx0ICogXHRcdC8vZG8gZHJhd2luZyBvciBET00gbWFuaXB1bGF0aW9uIGhlcmVcblx0XHQgKiBcdH0sIHRpbWUpXG5cdFx0ICogfSwgXCIrMC41XCIpXG5cdFx0ICovXG5cdCAgICBUb25lLkRyYXcgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsbCBvZiB0aGUgZXZlbnRzLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5UaW1lbGluZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbmV3IFRvbmUuVGltZWxpbmUoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZHVyYXRpb24gYWZ0ZXIgd2hpY2ggZXZlbnRzIGFyZSBub3QgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAZGVmYXVsdCAwLjI1XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmV4cGlyYXRpb24gPSAwLjI1O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgdGltZSBiZWZvcmUgdGhlIHNjaGVkdWxlZCB0aW1lIFxuXHRcdFx0ICogIHRoYXQgdGhlIGNhbGxiYWNrIGNhbiBiZSBpbnZva2VkLiBEZWZhdWx0IGlzXG5cdFx0XHQgKiAgaGFsZiB0aGUgdGltZSBvZiBhbiBhbmltYXRpb24gZnJhbWUgKDAuMDA4IHNlY29uZHMpLlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBkZWZhdWx0IDAuMDA4XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmFudGljaXBhdGlvbiA9IDAuMDA4O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkcmF3IGxvb3Bcblx0XHRcdCAqICBAdHlwZSAge0Z1bmN0aW9ufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ib3VuZERyYXdMb29wID0gdGhpcy5fZHJhd0xvb3AuYmluZCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkRyYXcpO1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlIGEgZnVuY3Rpb24gYXQgdGhlIGdpdmVuIHRpbWUgdG8gYmUgaW52b2tlZFxuXHRcdCAqICBvbiB0aGUgbmVhcmVzdCBhbmltYXRpb24gZnJhbWUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgIENhbGxiYWNrIGlzIGludm9rZWQgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICAgIHRpbWUgICAgICBUaGUgdGltZSByZWxhdGl2ZSB0byB0aGUgQXVkaW9Db250ZXh0IHRpbWVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGludm9rZSB0aGUgY2FsbGJhY2suXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkRyYXd9ICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRHJhdy5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuXHQgICAgICAgICAgICB0aW1lOiB0aGlzLnRvU2Vjb25kcyh0aW1lKVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIGRyYXcgbG9vcCBvbiB0aGUgZmlyc3QgZXZlbnRcblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYm91bmREcmF3TG9vcCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgZXZlbnRzIHNjaGVkdWxlZCBhZnRlciB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIGFmdGVyICBUaW1lIGFmdGVyIHdoaWNoIHNjaGVkdWxlZCBldmVudHMgd2lsbCBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzY2hlZHVsaW5nIHRpbWVsaW5lLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5EcmF3fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EcmF3LnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKHRoaXMudG9TZWNvbmRzKGFmdGVyKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkcmF3IGxvb3Bcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRHJhdy5wcm90b3R5cGUuX2RyYXdMb29wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub3cgPSBUb25lLm5vdygpO1xuXHQgICAgICAgIHdoaWxlICh0aGlzLl9ldmVudHMubGVuZ3RoICYmIHRoaXMuX2V2ZW50cy5wZWVrKCkudGltZSAtIHRoaXMuYW50aWNpcGF0aW9uIDw9IG5vdykge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHMuc2hpZnQoKTtcblx0ICAgICAgICAgICAgaWYgKG5vdyAtIGV2ZW50LnRpbWUgPD0gdGhpcy5leHBpcmF0aW9uKSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5jYWxsYmFjaygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLl9ldmVudHMubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYm91bmREcmF3TG9vcCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8vbWFrZSBhIHNpbmdsZXRvblxuXHQgICAgVG9uZS5EcmF3ID0gbmV3IFRvbmUuRHJhdygpO1xuXHQgICAgcmV0dXJuIFRvbmUuRHJhdztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBCb3RoIFRvbmUuUGFubmVyM0QgYW5kIFRvbmUuTGlzdGVuZXIgaGF2ZSBhIHBvc2l0aW9uIGluIDNEIHNwYWNlXG5cdFx0ICogICAgICAgICAgdXNpbmcgYSByaWdodC1oYW5kZWQgY2FydGVzaWFuIGNvb3JkaW5hdGUgc3lzdGVtLlxuXHRcdCAqICAgICAgICAgIFRoZSB1bml0cyB1c2VkIGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBhcmUgbm90IGRlZmluZWQ7XG5cdFx0ICogICAgICAgICAgdGhlc2UgY29vcmRpbmF0ZXMgYXJlIGluZGVwZW5kZW50L2ludmFyaWFudCBvZiBhbnkgcGFydGljdWxhclxuXHRcdCAqICAgICAgICAgIHVuaXRzIHN1Y2ggYXMgbWV0ZXJzIG9yIGZlZXQuIFRvbmUuUGFubmVyM0Qgb2JqZWN0cyBoYXZlIGFuIGZvcndhcmRcblx0XHQgKiAgICAgICAgICB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBkaXJlY3Rpb24gdGhlIHNvdW5kIGlzIHByb2plY3RpbmcuIEFkZGl0aW9uYWxseSxcblx0XHQgKiAgICAgICAgICB0aGV5IGhhdmUgYSBzb3VuZCBjb25lIHJlcHJlc2VudGluZyBob3cgZGlyZWN0aW9uYWwgdGhlIHNvdW5kIGlzLlxuXHRcdCAqICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgc291bmQgY291bGQgYmUgb21uaWRpcmVjdGlvbmFsLCBpbiB3aGljaCBjYXNlIGl0IHdvdWxkXG5cdFx0ICogICAgICAgICAgYmUgaGVhcmQgYW55d2hlcmUgcmVnYXJkbGVzcyBvZiBpdHMgZm9yd2FyZCwgb3IgaXQgY2FuIGJlIG1vcmUgZGlyZWN0aW9uYWxcblx0XHQgKiAgICAgICAgICBhbmQgaGVhcmQgb25seSBpZiBpdCBpcyBmYWNpbmcgdGhlIGxpc3RlbmVyLiBUb25lLkxpc3RlbmVyIG9iamVjdHNcblx0XHQgKiAgICAgICAgICAocmVwcmVzZW50aW5nIGEgcGVyc29uJ3MgZWFycykgaGF2ZSBhbiBmb3J3YXJkIGFuZCB1cCB2ZWN0b3Jcblx0XHQgKiAgICAgICAgICByZXByZXNlbnRpbmcgaW4gd2hpY2ggZGlyZWN0aW9uIHRoZSBwZXJzb24gaXMgZmFjaW5nLiBCZWNhdXNlIGJvdGggdGhlXG5cdFx0ICogICAgICAgICAgc291cmNlIHN0cmVhbSBhbmQgdGhlIGxpc3RlbmVyIGNhbiBiZSBtb3ZpbmcsIHRoZXkgYm90aCBoYXZlIGEgdmVsb2NpdHlcblx0XHQgKiAgICAgICAgICB2ZWN0b3IgcmVwcmVzZW50aW5nIGJvdGggdGhlIHNwZWVkIGFuZCBkaXJlY3Rpb24gb2YgbW92ZW1lbnQuIFRha2VuIHRvZ2V0aGVyLFxuXHRcdCAqICAgICAgICAgIHRoZXNlIHR3byB2ZWxvY2l0aWVzIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgZG9wcGxlciBzaGlmdCBlZmZlY3Qgd2hpY2ggY2hhbmdlcyB0aGUgcGl0Y2guXG5cdFx0ICogICAgICAgICAgPGJyPjxicj5cblx0XHQgKiAgICAgICAgICBOb3RlOiB0aGUgcG9zaXRpb24gb2YgdGhlIExpc3RlbmVyIHdpbGwgaGF2ZSBubyBlZmZlY3Qgb24gbm9kZXMgbm90IGNvbm5lY3RlZCB0byBhIFRvbmUuUGFubmVyM0Rcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBzaW5nbGV0b25cblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGRzIHRoZSBjdXJyZW50IGZvcndhcmQgb3JpZW50YXRpb25cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IFtcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMFxuXHQgICAgICAgIF07XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZHMgdGhlIGN1cnJlbnQgcG9zaXRpb25cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IFtcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMFxuXHQgICAgICAgIF07XG5cdCAgICAgICAgVG9uZS5nZXRDb250ZXh0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gc2V0IHRoZSBkZWZhdWx0IHBvc2l0aW9uL2ZvcndhcmRcblx0ICAgICAgICAgICAgdGhpcy5zZXQoTGlzdGVuZXJDb25zdHJ1Y3Rvci5kZWZhdWx0cyk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkxpc3RlbmVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZhdWx0cyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb25cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3Bvc2l0aW9uWCc6IDAsXG5cdCAgICAgICAgJ3Bvc2l0aW9uWSc6IDAsXG5cdCAgICAgICAgJ3Bvc2l0aW9uWic6IDAsXG5cdCAgICAgICAgJ2ZvcndhcmRYJzogMCxcblx0ICAgICAgICAnZm9yd2FyZFknOiAwLFxuXHQgICAgICAgICdmb3J3YXJkWic6IDEsXG5cdCAgICAgICAgJ3VwWCc6IDAsXG5cdCAgICAgICAgJ3VwWSc6IDEsXG5cdCAgICAgICAgJ3VwWic6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcmFtcCB0aW1lIHdoaWNoIGlzIGFwcGxpZWQgdG8gdGhlIHNldFRhcmdldEF0VGltZVxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLl9yYW1wVGltZUNvbnN0YW50ID0gMC4wMTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGlzdGVuZXIgaW4gM2Qgc3BhY2UuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHhcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB6XG5cdFx0ICogIEByZXR1cm4ge1RvbmUuTGlzdGVuZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLnNldFBvc2l0aW9uID0gZnVuY3Rpb24gKHgsIHksIHopIHtcblx0ICAgICAgICBpZiAodGhpcy5jb250ZXh0Lmxpc3RlbmVyLnBvc2l0aW9uWCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnBvc2l0aW9uWC5zZXRUYXJnZXRBdFRpbWUoeCwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnBvc2l0aW9uWS5zZXRUYXJnZXRBdFRpbWUoeSwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnBvc2l0aW9uWi5zZXRUYXJnZXRBdFRpbWUoeiwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuc2V0UG9zaXRpb24oeCwgeSwgeik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGxpc3RlbmVyIHVzaW5nIHR3byB2ZWN0b3JzLCB0aGUgZm9yd2FyZFxuXHRcdCAqICB2ZWN0b3IgKHdoaWNoIGRpcmVjdGlvbiB0aGUgbGlzdGVuZXIgaXMgZmFjaW5nKSBhbmQgdGhlIHVwIHZlY3RvclxuXHRcdCAqICAod2hpY2ggdGhlIHVwIGRpcmVjdGlvbiBvZiB0aGUgbGlzdGVuZXIpLiBBbiB1cCB2ZWN0b3Jcblx0XHQgKiAgb2YgMCwgMCwgMSBpcyBlcXVpdmFsZW50IHRvIHRoZSBsaXN0ZW5lciBzdGFuZGluZyB1cCBpbiB0aGUgWiBkaXJlY3Rpb24uXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHhcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB6XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHVwWFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB1cFlcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdXBaXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuTGlzdGVuZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLnNldE9yaWVudGF0aW9uID0gZnVuY3Rpb24gKHgsIHksIHosIHVwWCwgdXBZLCB1cFopIHtcblx0ICAgICAgICBpZiAodGhpcy5jb250ZXh0Lmxpc3RlbmVyLmZvcndhcmRYKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuZm9yd2FyZFguc2V0VGFyZ2V0QXRUaW1lKHgsIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5mb3J3YXJkWS5zZXRUYXJnZXRBdFRpbWUoeSwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLmZvcndhcmRaLnNldFRhcmdldEF0VGltZSh6LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIudXBYLnNldFRhcmdldEF0VGltZSh1cFgsIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci51cFkuc2V0VGFyZ2V0QXRUaW1lKHVwWSwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnVwWi5zZXRUYXJnZXRBdFRpbWUodXBaLCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5zZXRPcmllbnRhdGlvbih4LCB5LCB6LCB1cFgsIHVwWSwgdXBaKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAncG9zaXRpb25YJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblswXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzBdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25ZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdwb3NpdGlvblknLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzFdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMV07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHogcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvblpcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3Bvc2l0aW9uWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMl0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblsyXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcnMgZnJvbnQgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHdoaWNoIHdheSB0aGV5IGFyZSBmYWNpbmcuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBmb3J3YXJkWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAnZm9yd2FyZFgnLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzBdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMF07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXJzIGZyb250IGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB3aGljaCB3YXkgdGhleSBhcmUgZmFjaW5nLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgZm9yd2FyZFlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ2ZvcndhcmRZJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblsxXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzFdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB6IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVycyBmcm9udCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgd2hpY2ggd2F5IHRoZXkgYXJlIGZhY2luZy5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIGZvcndhcmRaXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdmb3J3YXJkWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMl0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblsyXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcidzIHVwIGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB0aGUgZGlyZWN0aW9uIHRoZSBsaXN0ZW5lciBpcyBzdGFuZGluZyBpbi5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHVwWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAndXBYJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblszXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzNdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVyJ3MgdXAgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHRoZSBkaXJlY3Rpb24gdGhlIGxpc3RlbmVyIGlzIHN0YW5kaW5nIGluLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgdXBZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICd1cFknLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzRdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bNF07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHogY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXIncyB1cCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgdGhlIGRpcmVjdGlvbiB0aGUgbGlzdGVuZXIgaXMgc3RhbmRpbmcgaW4uXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSB1cFpcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3VwWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bNV0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvbls1XTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTGlzdGVuZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvL1NJTkdMRVRPTiBTRVRVUFxuXHQgICAgdmFyIExpc3RlbmVyQ29uc3RydWN0b3IgPSBUb25lLkxpc3RlbmVyO1xuXHQgICAgVG9uZS5MaXN0ZW5lciA9IG5ldyBMaXN0ZW5lckNvbnN0cnVjdG9yKCk7XG5cdCAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgIGlmIChjb250ZXh0Lkxpc3RlbmVyIGluc3RhbmNlb2YgTGlzdGVuZXJDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICAvL2Egc2luZ2xlIGxpc3RlbmVyIG9iamVjdFxuXHQgICAgICAgICAgICBUb25lLkxpc3RlbmVyID0gY29udGV4dC5MaXN0ZW5lcjtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvL21ha2UgbmV3IExpc3RlbmVyIGluc2lkZXNcblx0ICAgICAgICAgICAgVG9uZS5MaXN0ZW5lciA9IG5ldyBMaXN0ZW5lckNvbnN0cnVjdG9yKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGNvbnRleHQuTGlzdGVuZXIgPSBUb25lLkxpc3RlbmVyO1xuXHQgICAgfSk7XG5cdCAgICAvL0VORCBTSU5HTEVUT04gU0VUVVBcblx0ICAgIHJldHVybiBUb25lLkxpc3RlbmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiBCZWNhdXNlIG9mIGEgYnVnIGluIGlPUyBjYXVzaW5nIHRoZSBjdXJyZW50VGltZSB0byBpbmNyZW1lbnRcblx0XHQgKiBiZWZvcmUgdGhlIHJlbmRlcmluZyBpcyBzdGFydGVkLCBzb21ldGltZXMgaXQgdGFrZXMgbXVsdGlwbGVcblx0XHQgKiBhdHRlbXB0cyB0byByZW5kZXIgdGhlIGF1ZGlvIGNvcnJlY3RseS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgZnVuY3Rpb24gYXR0ZW1wdFJlbmRlcihjYWxsYmFjaywgZHVyYXRpb24sIHNhbXBsZVJhdGUsIHRyaWVzKSB7XG5cdCAgICAgICAgdHJpZXMgPSBUb25lLmRlZmF1bHRBcmcodHJpZXMsIDApO1xuXHQgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IFRvbmUuT2ZmbGluZUNvbnRleHQoMiwgZHVyYXRpb24sIHNhbXBsZVJhdGUpO1xuXHQgICAgICAgIFRvbmUuY29udGV4dCA9IGNvbnRleHQ7XG5cdCAgICAgICAgLy9pbnZva2UgdGhlIGNhbGxiYWNrL3NjaGVkdWxpbmdcblx0ICAgICAgICB2YXIgcmVzcG9uc2UgPSBjYWxsYmFjayhUb25lLlRyYW5zcG9ydCk7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuY3VycmVudFRpbWUgPiAwICYmIHRyaWVzIDwgMTAwMCkge1xuXHQgICAgICAgICAgICByZXR1cm4gYXR0ZW1wdFJlbmRlcihjYWxsYmFjaywgZHVyYXRpb24sIHNhbXBsZVJhdGUsICsrdHJpZXMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgICAgICAncmVzcG9uc2UnOiByZXNwb25zZSxcblx0ICAgICAgICAgICAgICAgICdjb250ZXh0JzogY29udGV4dFxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0ICAgIC8qKlxuXHRcdCAqICBHZW5lcmF0ZSBhIGJ1ZmZlciBieSByZW5kZXJpbmcgYWxsIG9mIHRoZSBUb25lLmpzIGNvZGUgd2l0aGluIHRoZSBjYWxsYmFjayB1c2luZyB0aGUgT2ZmbGluZUF1ZGlvQ29udGV4dC5cblx0XHQgKiAgVGhlIE9mZmxpbmVBdWRpb0NvbnRleHQgaXMgY2FwYWJsZSBvZiByZW5kZXJpbmcgbXVjaCBmYXN0ZXIgdGhhbiByZWFsIHRpbWUgaW4gbWFueSBjYXNlcy5cblx0XHQgKiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGFsc28gcGFzc2VzIGluIGFuIG9mZmxpbmUgaW5zdGFuY2Ugb2YgVG9uZS5UcmFuc3BvcnQgd2hpY2ggY2FuIGJlIHVzZWRcblx0XHQgKiAgdG8gc2NoZWR1bGUgZXZlbnRzIGFsb25nIHRoZSBUcmFuc3BvcnQuICoqTk9URSoqIE9mZmxpbmVBdWRpb0NvbnRleHQgaGFzIHRoZSBzYW1lIHJlc3RyaWN0aW9uc1xuXHRcdCAqICBhcyB0aGUgQXVkaW9Db250ZXh0IGluIHRoYXQgb24gY2VydGFpbiBwbGF0Zm9ybXMgKGxpa2UgaU9TKSBpdCBtdXN0IGJlIGludm9rZWQgYnkgYW4gZXhwbGljaXRcblx0XHQgKiAgdXNlciBhY3Rpb24gbGlrZSBhIGNsaWNrIG9yIHRhcC4gXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgIEFsbCBUb25lLmpzIG5vZGVzIHdoaWNoIGFyZSBjcmVhdGVkIGFuZCBzY2hlZHVsZWQgd2l0aGluIHRoaXMgY2FsbGJhY2sgYXJlIHJlY29yZGVkIGludG8gdGhlIG91dHB1dCBCdWZmZXIuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICBkdXJhdGlvbiAgICAgdGhlIGFtb3VudCBvZiB0aW1lIHRvIHJlY29yZCBmb3IuXG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfSAgVGhlIHByb21pc2Ugd2hpY2ggaXMgaW52b2tlZCB3aXRoIHRoZSBUb25lLkJ1ZmZlciBvZiB0aGUgcmVjb3JkZWQgb3V0cHV0LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vcmVuZGVyIDIgc2Vjb25kcyBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdCAqIFRvbmUuT2ZmbGluZShmdW5jdGlvbigpe1xuXHRcdCAqIFx0Ly9vbmx5IG5vZGVzIGNyZWF0ZWQgaW4gdGhpcyBjYWxsYmFjayB3aWxsIGJlIHJlY29yZGVkXG5cdFx0ICogXHR2YXIgb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS50b01hc3RlcigpLnN0YXJ0KDApXG5cdFx0ICogXHQvL3NjaGVkdWxlIHRoZWlyIGV2ZW50c1xuXHRcdCAqIH0sIDIpLnRoZW4oZnVuY3Rpb24oYnVmZmVyKXtcblx0XHQgKiBcdC8vZG8gc29tZXRoaW5nIHdpdGggdGhlIG91dHB1dCBidWZmZXJcblx0XHQgKiB9KVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9jYW4gYWxzbyBzY2hlZHVsZSBldmVudHMgYWxvbmcgdGhlIFRyYW5zcG9ydFxuXHRcdCAqIC8vdXNpbmcgdGhlIHBhc3NlZCBpbiBPZmZsaW5lIFRyYW5zcG9ydFxuXHRcdCAqIFRvbmUuT2ZmbGluZShmdW5jdGlvbihUcmFuc3BvcnQpe1xuXHRcdCAqIFx0dmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS50b01hc3RlcigpXG5cdFx0ICogXHRUcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHRcdG9zYy5zdGFydCh0aW1lKS5zdG9wKHRpbWUgKyAwLjEpXG5cdFx0ICogXHR9LCAxKVxuXHRcdCAqIFx0VHJhbnNwb3J0LnN0YXJ0KDAuMilcblx0XHQgKiB9LCA0KS50aGVuKGZ1bmN0aW9uKGJ1ZmZlcil7XG5cdFx0ICogXHQvL2RvIHNvbWV0aGluZyB3aXRoIHRoZSBvdXRwdXQgYnVmZmVyXG5cdFx0ICogfSlcblx0XHQgKi9cblx0ICAgIFRvbmUuT2ZmbGluZSA9IGZ1bmN0aW9uIChjYWxsYmFjaywgZHVyYXRpb24pIHtcblx0ICAgICAgICAvL3NldCB0aGUgT2ZmbGluZUF1ZGlvQ29udGV4dFxuXHQgICAgICAgIHZhciBzYW1wbGVSYXRlID0gVG9uZS5jb250ZXh0LnNhbXBsZVJhdGU7XG5cdCAgICAgICAgdmFyIG9yaWdpbmFsQ29udGV4dCA9IFRvbmUuY29udGV4dDtcblx0ICAgICAgICB2YXIgcmVuZGVyUmV0ID0gYXR0ZW1wdFJlbmRlcihjYWxsYmFjaywgZHVyYXRpb24sIHNhbXBsZVJhdGUpO1xuXHQgICAgICAgIHZhciByZXNwb25zZSA9IHJlbmRlclJldC5yZXNwb25zZTtcblx0ICAgICAgICB2YXIgY29udGV4dCA9IHJlbmRlclJldC5jb250ZXh0O1xuXHQgICAgICAgIHZhciByZXQ7XG5cdCAgICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHQgICAgICAgICAgICAvL3dhaXQgZm9yIHRoZSBwcm9taXNlIHRvIHJlc29sdmVcblx0ICAgICAgICAgICAgcmV0ID0gcmVzcG9uc2UudGhlbihmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAvL3RoZW4gcmVuZGVyIHRoZSBhdWRpb1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQucmVuZGVyKCk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vcHJvY2VzcyB0aGUgYXVkaW9cblx0ICAgICAgICAgICAgcmV0ID0gY29udGV4dC5yZW5kZXIoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9yZXR1cm4gdGhlIG9yaWdpbmFsIEF1ZGlvQ29udGV4dFxuXHQgICAgICAgIFRvbmUuY29udGV4dCA9IG9yaWdpbmFsQ29udGV4dDtcblx0ICAgICAgICAvL3JldHVybiB0aGUgYXVkaW9cblx0ICAgICAgICByZXR1cm4gcmV0LnRoZW4oZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICAvL3dyYXAgaXQgaW4gYSBUb25lLkJ1ZmZlclxuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuQnVmZmVyKGJ1ZmZlcik7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuT2ZmbGluZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiBcdEBjbGFzcyAgVG9uZS5FZmZlY3QgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGVmZmVjdHMuIENvbm5lY3QgdGhlIGVmZmVjdCBiZXR3ZWVuXG5cdFx0ICogXHQgICAgICAgIHRoZSBlZmZlY3RTZW5kIGFuZCBlZmZlY3RSZXR1cm4gR2Fpbk5vZGVzLCB0aGVuIGNvbnRyb2wgdGhlIGFtb3VudCBvZlxuXHRcdCAqIFx0ICAgICAgICBlZmZlY3Qgd2hpY2ggZ29lcyB0byB0aGUgb3V0cHV0IHVzaW5nIHRoZSB3ZXQgY29udHJvbC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfE9iamVjdH0gW3dldF0gVGhlIHN0YXJ0aW5nIHdldCB2YWx1ZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuRWZmZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnd2V0J10sIFRvbmUuRWZmZWN0KTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZHJ5d2V0IGtub2IgdG8gY29udHJvbCB0aGUgYW1vdW50IG9mIGVmZmVjdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNyb3NzRmFkZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0ID0gbmV3IFRvbmUuQ3Jvc3NGYWRlKG9wdGlvbnMud2V0KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgd2V0IGNvbnRyb2wgaXMgaG93IG11Y2ggb2YgdGhlIGVmZmVjdGVkXG5cdFx0XHQgKiAgd2lsbCBwYXNzIHRocm91Z2ggdG8gdGhlIG91dHB1dC4gMSA9IDEwMCUgZWZmZWN0ZWRcblx0XHRcdCAqICBzaWduYWwsIDAgPSAxMDAlIGRyeSBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMud2V0ID0gdGhpcy5fZHJ5V2V0LmZhZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29ubmVjdCB0aGUgZWZmZWN0U2VuZCB0byB0aGUgaW5wdXQgb2YgaHRlIGVmZmVjdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb25uZWN0IHRoZSBvdXRwdXQgb2YgdGhlIGVmZmVjdCB0byB0aGUgZWZmZWN0UmV0dXJuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm4gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLl9kcnlXZXQuYSk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuZWZmZWN0U2VuZCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm4uY29ubmVjdCh0aGlzLl9kcnlXZXQuYik7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0LmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnd2V0J10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRWZmZWN0LCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FZmZlY3QuZGVmYXVsdHMgPSB7ICd3ZXQnOiAxIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2hhaW5zIHRoZSBlZmZlY3QgaW4gYmV0d2VlbiB0aGUgZWZmZWN0U2VuZCBhbmQgZWZmZWN0UmV0dXJuXG5cdFx0ICogIEBwYXJhbSAge1RvbmV9IGVmZmVjdFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5jb25uZWN0RWZmZWN0ID0gZnVuY3Rpb24gKGVmZmVjdCkge1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5jaGFpbihlZmZlY3QsIHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWyd3ZXQnXSk7XG5cdCAgICAgICAgdGhpcy53ZXQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkVmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQXV0b0ZpbHRlciBpcyBhIFRvbmUuRmlsdGVyIHdpdGggYSBUb25lLkxGTyBjb25uZWN0ZWQgdG8gdGhlIGZpbHRlciBjdXRvZmYgZnJlcXVlbmN5LlxuXHRcdCAqICAgICAgICAgU2V0dGluZyB0aGUgTEZPIHJhdGUgYW5kIGRlcHRoIGFsbG93cyBmb3IgY29udHJvbCBvdmVyIHRoZSBmaWx0ZXIgbW9kdWxhdGlvbiByYXRlIFxuXHRcdCAqICAgICAgICAgYW5kIGRlcHRoLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFtmcmVxdWVuY3ldIFRoZSByYXRlIG9mIHRoZSBMRk8uXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5PX0gYmFzZUZyZXF1ZW5jeSBUaGUgbG93ZXIgdmFsdWUgb2YgdGhlIExGT3Mgb3NjaWxsYXRpb25cblx0IFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5PX0gb2N0YXZlcyBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgYWJvdmUgdGhlIGJhc2VGcmVxdWVuY3lcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NyZWF0ZSBhbiBhdXRvZmlsdGVyIGFuZCBzdGFydCBpdCdzIExGT1xuXHRcdCAqIHZhciBhdXRvRmlsdGVyID0gbmV3IFRvbmUuQXV0b0ZpbHRlcihcIjRuXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKiAvL3JvdXRlIGFuIG9zY2lsbGF0b3IgdGhyb3VnaCB0aGUgZmlsdGVyIGFuZCBzdGFydCBpdFxuXHRcdCAqIHZhciBvc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QoYXV0b0ZpbHRlcikuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnYmFzZUZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdvY3RhdmVzJ1xuXHQgICAgICAgIF0sIFRvbmUuQXV0b0ZpbHRlcik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvIHdoaWNoIGRyaXZlcyB0aGUgZmlsdGVyIGN1dG9mZlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnYW1wbGl0dWRlJzogb3B0aW9ucy5kZXB0aFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHJhbmdlIG9mIHRoZSBmaWx0ZXIgbW9kdWxhdGluZyBiZXR3ZWVuIHRoZSBtaW4gYW5kIG1heCBmcmVxdWVuY3kuIFxuXHRcdFx0ICogMCA9IG5vIG1vZHVsYXRpb24uIDEgPSBmdWxsIG1vZHVsYXRpb24uXG5cdFx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlcHRoID0gdGhpcy5fbGZvLmFtcGxpdHVkZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEhvdyBmYXN0IHRoZSBmaWx0ZXIgbW9kdWxhdGVzIGJldHdlZW4gbWluIGFuZCBtYXguIFxuXHRcdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbGZvLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmlsdGVyIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZpbHRlciA9IG5ldyBUb25lLkZpbHRlcihvcHRpb25zLmZpbHRlcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9jdGF2ZXMgcGxhY2Vob2xkZXJcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29jdGF2ZXMgPSAwO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5maWx0ZXIpO1xuXHQgICAgICAgIHRoaXMuX2xmby5jb25uZWN0KHRoaXMuZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm9jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgdGhpcy5iYXNlRnJlcXVlbmN5ID0gb3B0aW9ucy5iYXNlRnJlcXVlbmN5O1xuXHQgICAgfTtcblx0ICAgIC8vZXh0ZW5kIEVmZmVjdFxuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BdXRvRmlsdGVyLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdHNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAxLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdkZXB0aCc6IDEsXG5cdCAgICAgICAgJ2Jhc2VGcmVxdWVuY3knOiAyMDAsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiAyLjYsXG5cdCAgICAgICAgJ2ZpbHRlcic6IHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiAnbG93cGFzcycsXG5cdCAgICAgICAgICAgICdyb2xsb2ZmJzogLTEyLFxuXHQgICAgICAgICAgICAnUSc6IDFcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RhcnQgdGhlIGVmZmVjdC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgTEZPIHdpbGwgc3RhcnQuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIHRoZSBlZmZlY3QuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIExGTyB3aWxsIHN0b3AuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgZmlsdGVyIHRvIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbZGVsYXk9MF0gRGVsYXkgdGltZSBiZWZvcmUgc3RhcnRpbmcgdGhlIGVmZmVjdCBhZnRlciB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc3BvcnQgaGFzIHN0YXJ0ZWQuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uIChkZWxheSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zeW5jKGRlbGF5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBVbnN5bmMgdGhlIGZpbHRlciBmcm9tIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b0ZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZS51bnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnVuc3luYygpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFR5cGUgb2Ygb3NjaWxsYXRvciBhdHRhY2hlZCB0byB0aGUgQXV0b0ZpbHRlci4gXG5cdFx0ICogUG9zc2libGUgdmFsdWVzOiBcInNpbmVcIiwgXCJzcXVhcmVcIiwgXCJ0cmlhbmdsZVwiLCBcInNhd3Rvb3RoXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b0ZpbHRlciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmby50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm8udHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgZmlsdGVyJ3MgY3V0b2ZmIGZyZXF1ZW5jeS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZSwgJ2Jhc2VGcmVxdWVuY3knLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm8ubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm8ubWluID0gdGhpcy50b0ZyZXF1ZW5jeShmcmVxKTtcblx0ICAgICAgICAgICAgLy9hbmQgc2V0IHRoZSBtYXhcblx0ICAgICAgICAgICAgdGhpcy5vY3RhdmVzID0gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBmaWx0ZXIncyBjdXRvZmYgZnJlcXVlbmN5LiBcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAbmFtZSBvY3RhdmVzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvY3Q7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmby5tYXggPSB0aGlzLmJhc2VGcmVxdWVuY3kgKiBNYXRoLnBvdygyLCBvY3QpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLiBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXV0b0ZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbGZvLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZpbHRlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlcHRoID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BdXRvRmlsdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5BdXRvUGFubmVyIGlzIGEgVG9uZS5QYW5uZXIgd2l0aCBhbiBMRk8gY29ubmVjdGVkIHRvIHRoZSBwYW4gYW1vdW50LiBcblx0XHQgKiAgICAgICAgIE1vcmUgb24gdXNpbmcgYXV0b3Bhbm5lcnMgW2hlcmVdKGh0dHBzOi8vd3d3LmFibGV0b24uY29tL2VuL2Jsb2cvYXV0b3Bhbi1jaG9wcGVyLWVmZmVjdC1hbmQtbW9yZS1saXZlc2Nob29sLykuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbZnJlcXVlbmN5XSBSYXRlIG9mIGxlZnQtcmlnaHQgb3NjaWxsYXRpb24uIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY3JlYXRlIGFuIGF1dG9wYW5uZXIgYW5kIHN0YXJ0IGl0J3MgTEZPXG5cdFx0ICogdmFyIGF1dG9QYW5uZXIgPSBuZXcgVG9uZS5BdXRvUGFubmVyKFwiNG5cIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqIC8vcm91dGUgYW4gb3NjaWxsYXRvciB0aHJvdWdoIHRoZSBwYW5uZXIgYW5kIHN0YXJ0IGl0XG5cdFx0ICogdmFyIG9zY2lsbGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkuY29ubmVjdChhdXRvUGFubmVyKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZnJlcXVlbmN5J10sIFRvbmUuQXV0b1Bhbm5lcik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvIHdoaWNoIGRyaXZlcyB0aGUgcGFubmluZ1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnYW1wbGl0dWRlJzogb3B0aW9ucy5kZXB0aCxcblx0ICAgICAgICAgICAgJ21pbic6IC0xLFxuXHQgICAgICAgICAgICAnbWF4JzogMVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGFtb3VudCBvZiBwYW5uaW5nIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQuIFxuXHRcdFx0ICogMCA9IGFsd2F5cyBjZW50ZXIuIDEgPSBmdWxsIHJhbmdlIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQuIFxuXHRcdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IHRoaXMuX2xmby5hbXBsaXR1ZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHBhbm5lciBub2RlIHdoaWNoIGRvZXMgdGhlIHBhbm5pbmdcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5QYW5uZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG5ldyBUb25lLlBhbm5lcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogSG93IGZhc3QgdGhlIHBhbm5lciBtb2R1bGF0ZXMgYmV0d2VlbiBsZWZ0IGFuZCByaWdodC4gXG5cdFx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9sZm8uZnJlcXVlbmN5O1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fcGFubmVyKTtcblx0ICAgICAgICB0aGlzLl9sZm8uY29ubmVjdCh0aGlzLl9wYW5uZXIucGFuKTtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZGVwdGgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIC8vZXh0ZW5kIEVmZmVjdFxuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BdXRvUGFubmVyLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdHNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAxLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdkZXB0aCc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdGFydCB0aGUgZWZmZWN0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBMRk8gd2lsbCBzdGFydC4gXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b1Bhbm5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0b3AgdGhlIGVmZmVjdC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgTEZPIHdpbGwgc3RvcC4gXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b1Bhbm5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9sZm8uc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBwYW5uZXIgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFtkZWxheT0wXSBEZWxheSB0aW1lIGJlZm9yZSBzdGFydGluZyB0aGUgZWZmZWN0IGFmdGVyIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zcG9ydCBoYXMgc3RhcnRlZC4gXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b1Bhbm5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKGRlbGF5KSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN5bmMoZGVsYXkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFVuc3luYyB0aGUgcGFubmVyIGZyb20gdGhlIHRyYW5zcG9ydFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2xmby51bnN5bmMoKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUeXBlIG9mIG9zY2lsbGF0b3IgYXR0YWNoZWQgdG8gdGhlIEF1dG9GaWx0ZXIuIFxuXHRcdCAqIFBvc3NpYmxlIHZhbHVlczogXCJzaW5lXCIsIFwic3F1YXJlXCIsIFwidHJpYW5nbGVcIiwgXCJzYXd0b290aFwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9GaWx0ZXIjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm8udHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2xmby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZGVwdGgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlcHRoID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BdXRvUGFubmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuQXV0b1dhaCBjb25uZWN0cyBhIFRvbmUuRm9sbG93ZXIgdG8gYSBiYW5kcGFzcyBmaWx0ZXIgKFRvbmUuRmlsdGVyKS5cblx0XHQgKiAgICAgICAgICBUaGUgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXIgaXMgYWRqdXN0ZWQgcHJvcG9ydGlvbmFsbHkgdG8gdGhlXG5cdFx0ICogICAgICAgICAgaW5jb21pbmcgc2lnbmFsJ3MgYW1wbGl0dWRlLiBJbnNwaXJhdGlvbiBmcm9tIFtUdW5hLmpzXShodHRwczovL2dpdGh1Yi5jb20vRGluYWhtb2UvdHVuYSkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbYmFzZUZyZXF1ZW5jeV0gVGhlIGZyZXF1ZW5jeSB0aGUgZmlsdGVyIGlzIHNldFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhdCB0aGUgbG93IHBvaW50IG9mIHRoZSB3YWhcblx0XHQgKiAgQHBhcmFtIHtQb3NpdGl2ZX0gW29jdGF2ZXNdIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyBhYm92ZSB0aGUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlsdGVyIHdpbGwgc3dlZXAgdG8gd2hlbiBmdWxseSBvcGVuXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN9IFtzZW5zaXRpdml0eV0gVGhlIGRlY2liZWwgdGhyZXNob2xkIHNlbnNpdGl2aXR5IGZvclxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5jb21pbmcgc2lnbmFsLiBOb3JtYWwgcmFuZ2Ugb2YgLTQwIHRvIDAuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGF1dG9XYWggPSBuZXcgVG9uZS5BdXRvV2FoKDUwLCA2LCAtMzApLnRvTWFzdGVyKCk7XG5cdFx0ICogLy9pbml0aWFsaXplIHRoZSBzeW50aCBhbmQgY29ubmVjdCB0byBhdXRvd2FoXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFN5bnRoLmNvbm5lY3QoYXV0b1dhaCk7XG5cdFx0ICogLy9RIHZhbHVlIGluZmx1ZW5jZXMgdGhlIGVmZmVjdCBvZiB0aGUgd2FoIC0gZGVmYXVsdCBpcyAyXG5cdFx0ICogYXV0b1dhaC5RLnZhbHVlID0gNjtcblx0XHQgKiAvL21vcmUgYXVkaWJsZSBvbiBoaWdoZXIgbm90ZXNcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiOG5cIilcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1dhaCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdiYXNlRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ29jdGF2ZXMnLFxuXHQgICAgICAgICAgICAnc2Vuc2l0aXZpdHknXG5cdCAgICAgICAgXSwgVG9uZS5BdXRvV2FoKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBlbnZlbG9wZSBmb2xsb3dlci4gU2V0IHRoZSBhdHRhY2svcmVsZWFzZVxuXHRcdFx0ICogIHRpbWluZyB0byBhZGp1c3QgaG93IHRoZSBlbnZlbG9wZSBpcyBmb2xsb3dlZC5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Gb2xsb3dlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mb2xsb3dlciA9IG5ldyBUb25lLkZvbGxvd2VyKG9wdGlvbnMuZm9sbG93ZXIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNjYWxlcyB0aGUgZm9sbG93ZXIgdmFsdWUgdG8gdGhlIGZyZXF1ZW5jeSBkb21haW5cblx0XHRcdCAqICBAdHlwZSB7VG9uZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZSA9IG5ldyBUb25lLlNjYWxlRXhwKDAsIDEsIDAuNSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBpbnB1dCBnYWluIHRvIGFkanVzdCB0aGUgc2Vuc2l0aXZpdHlcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbnB1dEJvb3N0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtCaXF1YWRGaWx0ZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9iYW5kcGFzcyA9IG5ldyBUb25lLkZpbHRlcih7XG5cdCAgICAgICAgICAgICdyb2xsb2ZmJzogLTQ4LFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5JzogMCxcblx0ICAgICAgICAgICAgJ1EnOiBvcHRpb25zLlFcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BlYWtpbmcgPSBuZXcgVG9uZS5GaWx0ZXIoMCwgJ3BlYWtpbmcnKTtcblx0ICAgICAgICB0aGlzLl9wZWFraW5nLmdhaW4udmFsdWUgPSBvcHRpb25zLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZ2FpbiBvZiB0aGUgZmlsdGVyLlxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IHRoaXMuX3BlYWtpbmcuZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBxdWFsaXR5IG9mIHRoZSBmaWx0ZXIuXG5cdFx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlEgPSB0aGlzLl9iYW5kcGFzcy5RO1xuXHQgICAgICAgIC8vdGhlIGNvbnRyb2wgc2lnbmFsIHBhdGhcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuY2hhaW4odGhpcy5faW5wdXRCb29zdCwgdGhpcy5mb2xsb3dlciwgdGhpcy5fc3dlZXBSYW5nZSk7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5jb25uZWN0KHRoaXMuX2JhbmRwYXNzLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5jb25uZWN0KHRoaXMuX3BlYWtpbmcuZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3RoZSBmaWx0ZXJlZCBwYXRoXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmNoYWluKHRoaXMuX2JhbmRwYXNzLCB0aGlzLl9wZWFraW5nLCB0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICAgICAgLy9zZXQgdGhlIGluaXRpYWwgdmFsdWVcblx0ICAgICAgICB0aGlzLl9zZXRTd2VlcFJhbmdlKCk7XG5cdCAgICAgICAgdGhpcy5zZW5zaXRpdml0eSA9IG9wdGlvbnMuc2Vuc2l0aXZpdHk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZ2FpbicsXG5cdCAgICAgICAgICAgICdRJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXV0b1dhaCwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1dhaC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYmFzZUZyZXF1ZW5jeSc6IDEwMCxcblx0ICAgICAgICAnb2N0YXZlcyc6IDYsXG5cdCAgICAgICAgJ3NlbnNpdGl2aXR5JzogMCxcblx0ICAgICAgICAnUSc6IDIsXG5cdCAgICAgICAgJ2dhaW4nOiAyLFxuXHQgICAgICAgICdmb2xsb3dlcic6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBvY3RhdmVzIHRoYXQgdGhlIGZpbHRlciB3aWxsIHN3ZWVwIGFib3ZlIHRoZVxuXHRcdCAqIGJhc2VGcmVxdWVuY3kuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b1dhaCNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIG9jdGF2ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9XYWgucHJvdG90eXBlLCAnb2N0YXZlcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvY3RhdmVzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvY3RhdmVzO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRTd2VlcFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYmFzZSBmcmVxdWVuY3kgZnJvbSB3aGljaCB0aGUgc3dlZXAgd2lsbCBzdGFydCBmcm9tLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9XYWgjXG5cdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiBAbmFtZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvV2FoLnByb3RvdHlwZSwgJ2Jhc2VGcmVxdWVuY3knLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYmFzZUZyZXEpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYmFzZUZyZXF1ZW5jeSA9IGJhc2VGcmVxO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRTd2VlcFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc2Vuc2l0aXZpdHkgdG8gY29udHJvbCBob3cgcmVzcG9uc2l2ZSB0byB0aGUgaW5wdXQgc2lnbmFsIHRoZSBmaWx0ZXIgaXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b1dhaCNcblx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0ICogQG5hbWUgc2Vuc2l0aXZpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9XYWgucHJvdG90eXBlLCAnc2Vuc2l0aXZpdHknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmdhaW5Ub0RiKDEgLyB0aGlzLl9pbnB1dEJvb3N0LmdhaW4udmFsdWUpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2Vuc2l0aXZ5KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2lucHV0Qm9vc3QuZ2Fpbi52YWx1ZSA9IDEgLyBUb25lLmRiVG9HYWluKHNlbnNpdGl2eSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgc2V0cyB0aGUgc3dlZXAgcmFuZ2Ugb2YgdGhlIHNjYWxlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvV2FoLnByb3RvdHlwZS5fc2V0U3dlZXBSYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlLm1pbiA9IHRoaXMuX2Jhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5tYXggPSBNYXRoLm1pbih0aGlzLl9iYXNlRnJlcXVlbmN5ICogTWF0aC5wb3coMiwgdGhpcy5fb2N0YXZlcyksIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlIC8gMik7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdXRvV2FofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9XYWgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmZvbGxvd2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZvbGxvd2VyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9iYW5kcGFzcy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYmFuZHBhc3MgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3BlYWtpbmcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3BlYWtpbmcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2lucHV0Qm9vc3QuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2lucHV0Qm9vc3QgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2dhaW4nLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmdhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuUSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXV0b1dhaDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFNpZ25hbC1yYXRlIG1vZHVsbyBvcGVyYXRvci4gT25seSB3b3JrcyBpbiBBdWRpb1JhbmdlIFstMSwgMV0gYW5kIGZvciBtb2R1bHVzXG5cdFx0ICogICAgICAgICB2YWx1ZXMgaW4gdGhlIE5vcm1hbFJhbmdlLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBtb2R1bHVzIFRoZSBtb2R1bHVzIHRvIGFwcGx5LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtb2QgPSBuZXcgVG9uZS5Nb2R1bG8oMC4yKVxuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoMC41KS5jb25uZWN0KG1vZCk7XG5cdFx0ICogLy9tb2Qgb3V0cHV0cyAwLjFcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9kdWxvID0gZnVuY3Rpb24gKG1vZHVsdXMpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSB3YXZlc2hhcGVyIGdldHMgdGhlIGludGVnZXIgbXVsdGlwbGUgb2Zcblx0XHRcdCAqICB0aGUgaW5wdXQgc2lnbmFsIGFuZCB0aGUgbW9kdWx1cy5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKE1hdGgucG93KDIsIDE2KSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGludGVnZXIgbXVsdGlwbGUgaXMgbXVsdGlwbGllZCBieSB0aGUgbW9kdWx1c1xuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkgPSBuZXcgVG9uZS5NdWx0aXBseSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGFuZCBzdWJ0cmFjdGVkIGZyb20gdGhlIGlucHV0IHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1vZHVsdXMgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kU2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKG1vZHVsdXMpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmlucHV0LmZhbih0aGlzLl9zaGFwZXIsIHRoaXMuX3N1YnRyYWN0KTtcblx0ICAgICAgICB0aGlzLl9tb2RTaWduYWwuY29ubmVjdCh0aGlzLl9tdWx0aXBseSwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyLmNvbm5lY3QodGhpcy5fbXVsdGlwbHksIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5LmNvbm5lY3QodGhpcy5fc3VidHJhY3QsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX3NldFdhdmVTaGFwZXIobW9kdWx1cyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Nb2R1bG8sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSAgbW9kICB0aGUgbW9kdWx1cyB0byBhcHBseVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb2R1bG8ucHJvdG90eXBlLl9zZXRXYXZlU2hhcGVyID0gZnVuY3Rpb24gKG1vZCkge1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5zZXRNYXAoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB2YXIgbXVsdGlwbGUgPSBNYXRoLmZsb29yKCh2YWwgKyAwLjAwMDEpIC8gbW9kKTtcblx0ICAgICAgICAgICAgcmV0dXJuIG11bHRpcGxlO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtb2R1bHVzIHZhbHVlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk1vZHVsbyNcblx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1vZHVsby5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vZFNpZ25hbC52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1vZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9tb2RTaWduYWwudmFsdWUgPSBtb2Q7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFdhdmVTaGFwZXIobW9kKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vZHVsb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb2R1bG8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aXBseSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2RTaWduYWwuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZFNpZ25hbCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTW9kdWxvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5CaXRjcnVzaGVyIGRvd25zYW1wbGVzIHRoZSBpbmNvbWluZyBzaWduYWwgdG8gYSBkaWZmZXJlbnQgYml0ZGVwdGguXG5cdFx0ICogICAgICAgICBMb3dlcmluZyB0aGUgYml0ZGVwdGggb2YgdGhlIHNpZ25hbCBjcmVhdGVzIGRpc3RvcnRpb24uIFJlYWQgbW9yZSBhYm91dCBCaXRjcnVzaGluZ1xuXHRcdCAqICAgICAgICAgb24gW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQml0Y3J1c2hlcikuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJpdHMgVGhlIG51bWJlciBvZiBiaXRzIHRvIGRvd25zYW1wbGUgdGhlIHNpZ25hbC4gTm9taW5hbCByYW5nZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICBvZiAxIHRvIDguXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9pbml0aWFsaXplIGNydXNoZXIgYW5kIHJvdXRlIGEgc3ludGggdGhyb3VnaCBpdFxuXHRcdCAqIHZhciBjcnVzaGVyID0gbmV3IFRvbmUuQml0Q3J1c2hlcig0KS50b01hc3RlcigpO1xuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLk1vbm9TeW50aCgpLmNvbm5lY3QoY3J1c2hlcik7XG5cdFx0ICovXG5cdCAgICBUb25lLkJpdENydXNoZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydiaXRzJ10sIFRvbmUuQml0Q3J1c2hlcik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICB2YXIgaW52U3RlcFNpemUgPSAxIC8gTWF0aC5wb3coMiwgb3B0aW9ucy5iaXRzIC0gMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU3VidHJhY3QgdGhlIGlucHV0IHNpZ25hbCBhbmQgdGhlIG1vZHVsdXMgb2YgdGhlIGlucHV0IHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZCBmdW5jdGlvblxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Nb2R1bG99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsbyA9IG5ldyBUb25lLk1vZHVsbyhpbnZTdGVwU2l6ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAga2VlcHMgdHJhY2sgb2YgdGhlIGJpdHNcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9iaXRzID0gb3B0aW9ucy5iaXRzO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5mYW4odGhpcy5fc3VidHJhY3QsIHRoaXMuX21vZHVsbyk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxvLmNvbm5lY3QodGhpcy5fc3VidHJhY3QsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0LmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQml0Q3J1c2hlciwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkJpdENydXNoZXIuZGVmYXVsdHMgPSB7ICdiaXRzJzogNCB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGJpdCBkZXB0aCBvZiB0aGUgZWZmZWN0LiBOb21pbmFsIHJhbmdlIG9mIDEtOC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CaXRDcnVzaGVyI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgYml0c1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQml0Q3J1c2hlci5wcm90b3R5cGUsICdiaXRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYml0cztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJpdHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYml0cyA9IGJpdHM7XG5cdCAgICAgICAgICAgIHZhciBpbnZTdGVwU2l6ZSA9IDEgLyBNYXRoLnBvdygyLCBiaXRzIC0gMSk7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsby52YWx1ZSA9IGludlN0ZXBTaXplO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5CaXRDcnVzaGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJpdENydXNoZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxvID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5CaXRDcnVzaGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5DaGVieVNoZXYgaXMgYSBDaGVieXNoZXYgd2F2ZXNoYXBlciwgYW4gZWZmZWN0IHdoaWNoIGlzIGdvb2QgXG5cdFx0ICogICAgICAgICBmb3IgbWFraW5nIGRpZmZlcmVudCB0eXBlcyBvZiBkaXN0b3J0aW9uIHNvdW5kcy5cblx0XHQgKiAgICAgICAgIE5vdGUgdGhhdCBvZGQgb3JkZXJzIHNvdW5kIHZlcnkgZGlmZmVyZW50IGZyb20gZXZlbiBvbmVzLCBcblx0XHQgKiAgICAgICAgIGFuZCBvcmRlciA9IDEgaXMgbm8gY2hhbmdlLiBcblx0XHQgKiAgICAgICAgIFJlYWQgbW9yZSBhdCBbbXVzaWMuY29sdW1iaWEuZWR1XShodHRwOi8vbXVzaWMuY29sdW1iaWEuZWR1L2NtYy9tdXNpY2FuZGNvbXB1dGVycy9jaGFwdGVyNC8wNF8wNi5waHApLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7UG9zaXRpdmV8T2JqZWN0fSBbb3JkZXJdIFRoZSBvcmRlciBvZiB0aGUgY2hlYnlzaGV2IHBvbHlub21pYWwuIE5vcm1hbCByYW5nZSBiZXR3ZWVuIDEtMTAwLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NyZWF0ZSBhIG5ldyBjaGVieVxuXHRcdCAqIHZhciBjaGVieSA9IG5ldyBUb25lLkNoZWJ5c2hldig1MCk7XG5cdFx0ICogLy9jcmVhdGUgYSBtb25vc3ludGggY29ubmVjdGVkIHRvIG91ciBjaGVieVxuXHRcdCAqIHN5bnRoID0gbmV3IFRvbmUuTW9ub1N5bnRoKCkuY29ubmVjdChjaGVieSk7XG5cdFx0ICovXG5cdCAgICBUb25lLkNoZWJ5c2hldiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ29yZGVyJ10sIFRvbmUuQ2hlYnlzaGV2KTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtXYXZlU2hhcGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbmV3IFRvbmUuV2F2ZVNoYXBlcig0MDk2KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIGhvbGRzIG9udG8gdGhlIG9yZGVyIG9mIHRoZSBmaWx0ZXJcblx0XHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3JkZXIgPSBvcHRpb25zLm9yZGVyO1xuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9zaGFwZXIpO1xuXHQgICAgICAgIHRoaXMub3JkZXIgPSBvcHRpb25zLm9yZGVyO1xuXHQgICAgICAgIHRoaXMub3ZlcnNhbXBsZSA9IG9wdGlvbnMub3ZlcnNhbXBsZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNoZWJ5c2hldiwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkNoZWJ5c2hldi5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb3JkZXInOiAxLFxuXHQgICAgICAgICdvdmVyc2FtcGxlJzogJ25vbmUnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGdldCB0aGUgY29lZmZpY2llbnQgZm9yIHRoYXQgZGVncmVlXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB4IHRoZSB4IHZhbHVlXG5cdFx0ICogIEBwYXJhbSAgIHtudW1iZXJ9IGRlZ3JlZSBcblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IG1lbW8gbWVtb2l6ZSB0aGUgY29tcHV0ZWQgdmFsdWUuIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHNwZWVkcyB1cCBjb21wdXRhdGlvbiBncmVhdGx5LiBcblx0XHQgKiAgQHJldHVybiAge251bWJlcn0gICAgICAgdGhlIGNvZWZmaWNpZW50IFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DaGVieXNoZXYucHJvdG90eXBlLl9nZXRDb2VmZmljaWVudCA9IGZ1bmN0aW9uICh4LCBkZWdyZWUsIG1lbW8pIHtcblx0ICAgICAgICBpZiAobWVtby5oYXNPd25Qcm9wZXJ0eShkZWdyZWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBtZW1vW2RlZ3JlZV07XG5cdCAgICAgICAgfSBlbHNlIGlmIChkZWdyZWUgPT09IDApIHtcblx0ICAgICAgICAgICAgbWVtb1tkZWdyZWVdID0gMDtcblx0ICAgICAgICB9IGVsc2UgaWYgKGRlZ3JlZSA9PT0gMSkge1xuXHQgICAgICAgICAgICBtZW1vW2RlZ3JlZV0gPSB4O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIG1lbW9bZGVncmVlXSA9IDIgKiB4ICogdGhpcy5fZ2V0Q29lZmZpY2llbnQoeCwgZGVncmVlIC0gMSwgbWVtbykgLSB0aGlzLl9nZXRDb2VmZmljaWVudCh4LCBkZWdyZWUgLSAyLCBtZW1vKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIG1lbW9bZGVncmVlXTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3JkZXIgb2YgdGhlIENoZWJ5c2hldiBwb2x5bm9taWFsIHdoaWNoIGNyZWF0ZXNcblx0XHQgKiB0aGUgZXF1YXRpb24gd2hpY2ggaXMgYXBwbGllZCB0byB0aGUgaW5jb21pbmcgXG5cdFx0ICogc2lnbmFsIHRocm91Z2ggYSBUb25lLldhdmVTaGFwZXIuIFRoZSBlcXVhdGlvbnNcblx0XHQgKiBhcmUgaW4gdGhlIGZvcm06PGJyPlxuXHRcdCAqIG9yZGVyIDI6IDJ4XjIgKyAxPGJyPlxuXHRcdCAqIG9yZGVyIDM6IDR4XjMgKyAzeCA8YnI+XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hlYnlzaGV2I1xuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAbmFtZSBvcmRlclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2hlYnlzaGV2LnByb3RvdHlwZSwgJ29yZGVyJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JkZXI7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvcmRlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmRlciA9IG9yZGVyO1xuXHQgICAgICAgICAgICB2YXIgY3VydmUgPSBuZXcgQXJyYXkoNDA5Nik7XG5cdCAgICAgICAgICAgIHZhciBsZW4gPSBjdXJ2ZS5sZW5ndGg7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB4ID0gaSAqIDIgLyBsZW4gLSAxO1xuXHQgICAgICAgICAgICAgICAgaWYgKHggPT09IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICAvL3Nob3VsZCBvdXRwdXQgMCB3aGVuIGlucHV0IGlzIDBcblx0ICAgICAgICAgICAgICAgICAgICBjdXJ2ZVtpXSA9IDA7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGN1cnZlW2ldID0gdGhpcy5fZ2V0Q29lZmZpY2llbnQoeCwgb3JkZXIsIHt9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9zaGFwZXIuY3VydmUgPSBjdXJ2ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvdmVyc2FtcGxpbmcgb2YgdGhlIGVmZmVjdC4gQ2FuIGVpdGhlciBiZSBcIm5vbmVcIiwgXCIyeFwiIG9yIFwiNHhcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaGVieXNoZXYjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSBvdmVyc2FtcGxlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaGVieXNoZXYucHJvdG90eXBlLCAnb3ZlcnNhbXBsZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob3ZlcnNhbXBsaW5nKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlID0gb3ZlcnNhbXBsaW5nO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLiBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ2hlYnlzaGV2fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNoZWJ5c2hldi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DaGVieXNoZXY7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBCYXNlIGNsYXNzIGZvciBTdGVyZW8gZWZmZWN0cy4gUHJvdmlkZXMgZWZmZWN0U2VuZEwvUiBhbmQgZWZmZWN0UmV0dXJuTC9SLlxuXHRcdCAqXG5cdFx0ICpcdEBjb25zdHJ1Y3RvclxuXHRcdCAqXHRAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb0VmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnd2V0J10sIFRvbmUuRWZmZWN0KTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRyeXdldCBrbm9iIHRvIGNvbnRyb2wgdGhlIGFtb3VudCBvZiBlZmZlY3Rcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Dcm9zc0ZhZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RyeVdldCA9IG5ldyBUb25lLkNyb3NzRmFkZShvcHRpb25zLndldCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHdldCBjb250cm9sLCBpLmUuIGhvdyBtdWNoIG9mIHRoZSBlZmZlY3RlZFxuXHRcdFx0ICogIHdpbGwgcGFzcyB0aHJvdWdoIHRvIHRoZSBvdXRwdXQuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMud2V0ID0gdGhpcy5fZHJ5V2V0LmZhZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlbiBzcGxpdCBpdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcGxpdCA9IG5ldyBUb25lLlNwbGl0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGVmZmVjdHMgc2VuZCBMRUZUXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMID0gdGhpcy5fc3BsaXQubGVmdDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZWZmZWN0cyBzZW5kIFJJR0hUXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSID0gdGhpcy5fc3BsaXQucmlnaHQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHN0ZXJlbyBlZmZlY3QgbWVyZ2VyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTWVyZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21lcmdlID0gbmV3IFRvbmUuTWVyZ2UoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZWZmZWN0IHJldHVybiBMRUZUXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybkwgPSB0aGlzLl9tZXJnZS5sZWZ0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBlZmZlY3QgcmV0dXJuIFJJR0hUXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVyblIgPSB0aGlzLl9tZXJnZS5yaWdodDtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuX3NwbGl0KTtcblx0ICAgICAgICAvL2RyeSB3ZXQgY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5fZHJ5V2V0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZS5jb25uZWN0KHRoaXMuX2RyeVdldCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0LmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnd2V0J10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3RlcmVvRWZmZWN0LCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN0ZXJlb0VmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tZXJnZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5SID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ3dldCddKTtcblx0ICAgICAgICB0aGlzLndldCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3RlcmVvRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5DaG9ydXMgaXMgYSBzdGVyZW8gY2hvcnVzIGVmZmVjdCBjb21wb3NlZCBvZlxuXHRcdCAqICAgICAgICAgYSBsZWZ0IGFuZCByaWdodCBkZWxheSB3aXRoIGEgVG9uZS5MRk8gYXBwbGllZCB0byB0aGUgZGVsYXlUaW1lIG9mIGVhY2ggY2hhbm5lbC5cblx0XHQgKiAgICAgICAgIEluc3BpcmF0aW9uIGZyb20gW1R1bmEuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9EaW5haG1vZS90dW5hL2Jsb2IvbWFzdGVyL3R1bmEuanMpLlxuXHRcdCAqICAgICAgICAgUmVhZCBtb3JlIG9uIHRoZSBjaG9ydXMgZWZmZWN0IG9uIFtTb3VuZE9uU291bmRdKGh0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbS9zb3MvanVuMDQvYXJ0aWNsZXMvc3ludGhzZWNyZXRzLmh0bSkuXG5cdFx0ICpcblx0XHQgKlx0QGNvbnN0cnVjdG9yXG5cdFx0ICpcdEBleHRlbmRzIHtUb25lLlN0ZXJlb0VmZmVjdH1cblx0XHQgKlx0QHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbZnJlcXVlbmN5XSBUaGUgZnJlcXVlbmN5IG9mIHRoZSBMRk8uXG5cdFx0ICpcdEBwYXJhbSB7TWlsbGlzZWNvbmRzfSBbZGVsYXlUaW1lXSBUaGUgZGVsYXkgb2YgdGhlIGNob3J1cyBlZmZlY3QgaW4gbXMuXG5cdFx0ICpcdEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtkZXB0aF0gVGhlIGRlcHRoIG9mIHRoZSBjaG9ydXMuXG5cdFx0ICpcdEBleGFtcGxlXG5cdFx0ICogdmFyIGNob3J1cyA9IG5ldyBUb25lLkNob3J1cyg0LCAyLjUsIDAuNSk7XG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuUG9seVN5bnRoKDQsIFRvbmUuTW9ub1N5bnRoKS5jb25uZWN0KGNob3J1cyk7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoW1wiQzNcIixcIkUzXCIsXCJHM1wiXSwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hvcnVzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSwgVG9uZS5DaG9ydXMpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlcHRoIG9mIHRoZSBjaG9ydXNcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZXB0aCA9IG9wdGlvbnMuZGVwdGg7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5VGltZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5VGltZSA9IG9wdGlvbnMuZGVsYXlUaW1lIC8gMTAwMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvIHdoaWNoIGNvbnRyb2xzIHRoZSBkZWxheVRpbWVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICAgICAnbWF4JzogMVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGFub3RoZXIgTEZPIGZvciB0aGUgcmlnaHQgc2lkZSB3aXRoIGEgMTgwIGRlZ3JlZSBwaGFzZSBkaWZmXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9SID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDEsXG5cdCAgICAgICAgICAgICdwaGFzZSc6IDE4MFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGRlbGF5IGZvciBsZWZ0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZUwgPSBuZXcgVG9uZS5EZWxheSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGRlbGF5IGZvciByaWdodFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGVSID0gbmV3IFRvbmUuRGVsYXkoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBmcmVxdWVuY3kgb2YgdGhlIExGTyB3aGljaCBtb2R1bGF0ZXMgdGhlIGRlbGF5VGltZS5cblx0XHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2xmb0wuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNoYWluKHRoaXMuX2RlbGF5Tm9kZUwsIHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jaGFpbih0aGlzLl9kZWxheU5vZGVSLCB0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgIC8vYW5kIHBhc3MgdGhyb3VnaCB0byBtYWtlIHRoZSBkZXR1bmUgYXBwYXJlbnRcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICAvL2xmbyBzZXR1cFxuXHQgICAgICAgIHRoaXMuX2xmb0wuY29ubmVjdCh0aGlzLl9kZWxheU5vZGVMLmRlbGF5VGltZSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5jb25uZWN0KHRoaXMuX2RlbGF5Tm9kZVIuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBsZm9cblx0ICAgICAgICB0aGlzLl9sZm9MLnN0YXJ0KCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5zdGFydCgpO1xuXHQgICAgICAgIC8vaGF2ZSBvbmUgTEZPIGZyZXF1ZW5jeSBjb250cm9sIHRoZSBvdGhlclxuXHQgICAgICAgIHRoaXMuX2xmb0wuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fbGZvUi5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSB0aGlzLl9kZXB0aDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS52YWx1ZSA9IG9wdGlvbnMuZnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2ZyZXF1ZW5jeSddKTtcblx0ICAgICAgICB0aGlzLnNwcmVhZCA9IG9wdGlvbnMuc3ByZWFkO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ2hvcnVzLCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DaG9ydXMuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDEuNSxcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMy41LFxuXHQgICAgICAgICdkZXB0aCc6IDAuNyxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnc3ByZWFkJzogMTgwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlcHRoIG9mIHRoZSBlZmZlY3QuIEEgZGVwdGggb2YgMSBtYWtlcyB0aGUgZGVsYXlUaW1lXG5cdFx0ICogbW9kdWxhdGUgYmV0d2VlbiAwIGFuZCAyKmRlbGF5VGltZSAoY2VudGVyZWQgYXJvdW5kIHRoZSBkZWxheVRpbWUpLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkNob3J1cyNcblx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogQG5hbWUgZGVwdGhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNob3J1cy5wcm90b3R5cGUsICdkZXB0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlcHRoO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGVwdGgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGVwdGggPSBkZXB0aDtcblx0ICAgICAgICAgICAgdmFyIGRldmlhdGlvbiA9IHRoaXMuX2RlbGF5VGltZSAqIGRlcHRoO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLm1pbiA9IE1hdGgubWF4KHRoaXMuX2RlbGF5VGltZSAtIGRldmlhdGlvbiwgMCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wubWF4ID0gdGhpcy5fZGVsYXlUaW1lICsgZGV2aWF0aW9uO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLm1pbiA9IE1hdGgubWF4KHRoaXMuX2RlbGF5VGltZSAtIGRldmlhdGlvbiwgMCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IubWF4ID0gdGhpcy5fZGVsYXlUaW1lICsgZGV2aWF0aW9uO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlbGF5VGltZSBpbiBtaWxsaXNlY29uZHMgb2YgdGhlIGNob3J1cy4gQSBsYXJnZXIgZGVsYXlUaW1lXG5cdFx0ICogd2lsbCBnaXZlIGEgbW9yZSBwcm9ub3VuY2VkIGVmZmVjdC4gTm9taW5hbCByYW5nZSBhIGRlbGF5VGltZVxuXHRcdCAqIGlzIGJldHdlZW4gMiBhbmQgMjBtcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaG9ydXMjXG5cdFx0ICogQHR5cGUge01pbGxpc2Vjb25kc31cblx0XHQgKiBAbmFtZSBkZWxheVRpbWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNob3J1cy5wcm90b3R5cGUsICdkZWxheVRpbWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWxheVRpbWUgKiAxMDAwO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGVsYXlUaW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlbGF5VGltZSA9IGRlbGF5VGltZSAvIDEwMDA7XG5cdCAgICAgICAgICAgIHRoaXMuZGVwdGggPSB0aGlzLl9kZXB0aDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvc2NpbGxhdG9yIHR5cGUgb2YgdGhlIExGTy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaG9ydXMjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaG9ydXMucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmb0wudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIEFtb3VudCBvZiBzdGVyZW8gc3ByZWFkLiBXaGVuIHNldCB0byAwLCBib3RoIExGTydzIHdpbGwgYmUgcGFubmVkIGNlbnRyYWxseS5cblx0XHQgKiBXaGVuIHNldCB0byAxODAsIExGTydzIHdpbGwgYmUgcGFubmVkIGhhcmQgbGVmdCBhbmQgcmlnaHQgcmVzcGVjdGl2ZWx5LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkNob3J1cyNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBzcHJlYWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNob3J1cy5wcm90b3R5cGUsICdzcHJlYWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm9SLnBoYXNlIC0gdGhpcy5fbGZvTC5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNwcmVhZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLnBoYXNlID0gOTAgLSBzcHJlYWQgLyAyO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLnBoYXNlID0gc3ByZWFkIC8gMiArIDkwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DaG9ydXN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hvcnVzLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2ZyZXF1ZW5jeScpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DaG9ydXM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Db252b2x2ZXIgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgTmF0aXZlIFdlYiBBdWRpb1xuXHRcdCAqICAgICAgICAgIFtDb252b2x2ZXJOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS1jb252b2x2ZXJub2RlLWludGVyZmFjZSkuXG5cdFx0ICogICAgICAgICAgQ29udm9sdXRpb24gaXMgdXNlZnVsIGZvciByZXZlcmIgYW5kIGZpbHRlciBlbXVsYXRpb24uIFJlYWQgbW9yZSBhYm91dCBjb252b2x1dGlvbiByZXZlcmIgb25cblx0XHQgKiAgICAgICAgICBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db252b2x1dGlvbl9yZXZlcmIpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfFRvbmUuQnVmZmVyfE9iamVjdH0gW3VybF0gVGhlIFVSTCBvZiB0aGUgaW1wdWxzZSByZXNwb25zZSBvciB0aGUgVG9uZS5CdWZmZXJcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aWFuaW5nIHRoZSBpbXB1bHNlIHJlc3BvbnNlLlxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9uPX0gb25sb2FkIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgdXJsIGlzIGxvYWRlZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2luaXRpYWxpemluZyB0aGUgY29udm9sdmVyIHdpdGggYW4gaW1wdWxzZSByZXNwb25zZVxuXHRcdCAqIHZhciBjb252b2x2ZXIgPSBuZXcgVG9uZS5Db252b2x2ZXIoXCIuL3BhdGgvdG8vaXIud2F2XCIpLnRvTWFzdGVyKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnZvbHZlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd1cmwnLFxuXHQgICAgICAgICAgICAnb25sb2FkJ1xuXHQgICAgICAgIF0sIFRvbmUuQ29udm9sdmVyKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbnZvbHZlciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0NvbnZvbHZlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlciA9IHRoaXMuY29udGV4dC5jcmVhdGVDb252b2x2ZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgY29udm9sdXRpb24gYnVmZmVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIob3B0aW9ucy51cmwsIGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY29udm9sdmVyLmJ1ZmZlciA9IGJ1ZmZlci5nZXQoKTtcblx0ICAgICAgICAgICAgb3B0aW9ucy5vbmxvYWQoKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9jb252b2x2ZXIpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ29udm9sdmVyLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnZvbHZlci5kZWZhdWx0cyA9IHsgJ29ubG9hZCc6IFRvbmUubm9PcCB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjb252b2x2ZXIncyBidWZmZXJcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ29udm9sdmVyI1xuXHRcdCAqICBAdHlwZSB7QXVkaW9CdWZmZXJ9XG5cdFx0ICogIEBuYW1lIGJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ29udm9sdmVyLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5nZXQoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIuc2V0KGJ1ZmZlcik7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnZvbHZlci5idWZmZXIgPSB0aGlzLl9idWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgTG9hZCBhbiBpbXB1bHNlIHJlc3BvbnNlIHVybCBhcyBhbiBhdWRpbyBidWZmZXIuXG5cdFx0ICogIERlY29kZXMgdGhlIGF1ZGlvIGFzeW5jaHJvbm91c2x5IGFuZCBpbnZva2VzXG5cdFx0ICogIHRoZSBjYWxsYmFjayBvbmNlIHRoZSBhdWRpbyBidWZmZXIgbG9hZHMuXG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgYnVmZmVyIHRvIGxvYWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgZmlsZXR5cGUgc3VwcG9ydCBkZXBlbmRzIG9uIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXIuXG5cdFx0ICogIEBwYXJhbSAge2Z1bmN0aW9uPX0gY2FsbGJhY2tcblx0XHQgKiAgQHJldHVybnMge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnZvbHZlci5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sb2FkKHVybCwgZnVuY3Rpb24gKGJ1ZmYpIHtcblx0ICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBidWZmO1xuXHQgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ29udm9sdmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnZvbHZlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fY29udm9sdmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9idWZmZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ29udm9sdmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5EaXN0b3J0aW9uIGlzIGEgc2ltcGxlIGRpc3RvcnRpb24gZWZmZWN0IHVzaW5nIFRvbmUuV2F2ZVNoYXBlci5cblx0XHQgKiAgICAgICAgIEFsZ29yaXRobSBmcm9tIFthIHN0YWNrb3ZlcmZsb3cgYW5zd2VyXShodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjMxMzQwOCkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ8T2JqZWN0fSBbZGlzdG9ydGlvbl0gVGhlIGFtb3VudCBvZiBkaXN0b3J0aW9uIChub21pbmFsIHJhbmdlIG9mIDAtMSlcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZGlzdCA9IG5ldyBUb25lLkRpc3RvcnRpb24oMC44KS50b01hc3RlcigpO1xuXHRcdCAqIHZhciBmbSA9IG5ldyBUb25lLlNpbXBsZUZNKCkuY29ubmVjdChkaXN0KTtcblx0XHQgKiAvL3RoaXMgc291bmRzIGdvb2Qgb24gYmFzcyBub3Rlc1xuXHRcdCAqIGZtLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQTFcIiwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRGlzdG9ydGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2Rpc3RvcnRpb24nXSwgVG9uZS5EaXN0b3J0aW9uKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG5ldyBUb25lLldhdmVTaGFwZXIoNDA5Nik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBob2xkcyB0aGUgZGlzdG9ydGlvbiBhbW91bnRcblx0XHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGlzdG9ydGlvbiA9IG9wdGlvbnMuZGlzdG9ydGlvbjtcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fc2hhcGVyKTtcblx0ICAgICAgICB0aGlzLmRpc3RvcnRpb24gPSBvcHRpb25zLmRpc3RvcnRpb247XG5cdCAgICAgICAgdGhpcy5vdmVyc2FtcGxlID0gb3B0aW9ucy5vdmVyc2FtcGxlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRGlzdG9ydGlvbiwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkRpc3RvcnRpb24uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2Rpc3RvcnRpb24nOiAwLjQsXG5cdCAgICAgICAgJ292ZXJzYW1wbGUnOiAnbm9uZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYW1vdW50IG9mIGRpc3RvcnRpb24uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRGlzdG9ydGlvbiNcblx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogQG5hbWUgZGlzdG9ydGlvblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRGlzdG9ydGlvbi5wcm90b3R5cGUsICdkaXN0b3J0aW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGlzdG9ydGlvbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGFtb3VudCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kaXN0b3J0aW9uID0gYW1vdW50O1xuXHQgICAgICAgICAgICB2YXIgayA9IGFtb3VudCAqIDEwMDtcblx0ICAgICAgICAgICAgdmFyIGRlZyA9IE1hdGguUEkgLyAxODA7XG5cdCAgICAgICAgICAgIHRoaXMuX3NoYXBlci5zZXRNYXAoZnVuY3Rpb24gKHgpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyh4KSA8IDAuMDAxKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9zaG91bGQgb3V0cHV0IDAgd2hlbiBpbnB1dCBpcyAwXG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMyArIGspICogeCAqIDIwICogZGVnIC8gKE1hdGguUEkgKyBrICogTWF0aC5hYnMoeCkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvdmVyc2FtcGxpbmcgb2YgdGhlIGVmZmVjdC4gQ2FuIGVpdGhlciBiZSBcIm5vbmVcIiwgXCIyeFwiIG9yIFwiNHhcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5EaXN0b3J0aW9uI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgb3ZlcnNhbXBsZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRGlzdG9ydGlvbi5wcm90b3R5cGUsICdvdmVyc2FtcGxlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvdmVyc2FtcGxpbmcpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGUgPSBvdmVyc2FtcGxpbmc7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuIFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5EaXN0b3J0aW9ufSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkRpc3RvcnRpb24ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRGlzdG9ydGlvbjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiBcdEBjbGFzcyAgVG9uZS5GZWVkYmFja0VmZmVjdCBwcm92aWRlcyBhIGxvb3AgYmV0d2VlbiBhbiBcblx0XHQgKiBcdCAgICAgICAgYXVkaW8gc291cmNlIGFuZCBpdHMgb3duIG91dHB1dC4gVGhpcyBpcyBhIGJhc2UtY2xhc3Ncblx0XHQgKiBcdCAgICAgICAgZm9yIGZlZWRiYWNrIGVmZmVjdHMuIFxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V8T2JqZWN0fSBbZmVlZGJhY2tdIFRoZSBpbml0aWFsIGZlZWRiYWNrIHZhbHVlLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0VmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2ZlZWRiYWNrJ10sIFRvbmUuRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGdhaW4gd2hpY2ggY29udHJvbHMgdGhlIGZlZWRiYWNrXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tHYWluID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLmZlZWRiYWNrLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2Ygc2lnbmFsIHdoaWNoIGlzIGZlZCBiYWNrIGludG8gdGhlIGVmZmVjdCBpbnB1dC4gXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSB0aGlzLl9mZWVkYmFja0dhaW4uZ2Fpbjtcblx0ICAgICAgICAvL3RoZSBmZWVkYmFjayBsb29wXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm4uY2hhaW4odGhpcy5fZmVlZGJhY2tHYWluLCB0aGlzLmVmZmVjdFNlbmQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZmVlZGJhY2snXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GZWVkYmFja0VmZmVjdCwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QuZGVmYXVsdHMgPSB7ICdmZWVkYmFjayc6IDAuMTI1IH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuIFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GZWVkYmFja0VmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnZmVlZGJhY2snXSk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tHYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0dhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZlZWRiYWNrRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRmVlZGJhY2tEZWxheSBpcyBhIERlbGF5Tm9kZSBpbiB3aGljaCBwYXJ0IG9mIG91dHB1dFxuXHRcdCAqICAgICAgICAgIHNpZ25hbCBpcyBmZWQgYmFjayBpbnRvIHRoZSBkZWxheS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRmVlZGJhY2tFZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFtkZWxheVRpbWVdIFRoZSBkZWxheSBhcHBsaWVkIHRvIHRoZSBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2U9fSBmZWVkYmFjayBUaGUgYW1vdW50IG9mIHRoZSBlZmZlY3RlZCBzaWduYWwgd2hpY2hcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBmZWQgYmFjayB0aHJvdWdoIHRoZSBkZWxheS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZmVlZGJhY2tEZWxheSA9IG5ldyBUb25lLkZlZWRiYWNrRGVsYXkoXCI4blwiLCAwLjUpLnRvTWFzdGVyKCk7XG5cdFx0ICogdmFyIHRvbSA9IG5ldyBUb25lLkRydW1TeW50aCh7XG5cdFx0ICogXHRcIm9jdGF2ZXNcIiA6IDQsXG5cdFx0ICogXHRcInBpdGNoRGVjYXlcIiA6IDAuMVxuXHRcdCAqIH0pLmNvbm5lY3QoZmVlZGJhY2tEZWxheSk7XG5cdFx0ICogdG9tLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQTJcIixcIjMyblwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tEZWxheSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAnZmVlZGJhY2snXG5cdCAgICAgICAgXSwgVG9uZS5GZWVkYmFja0RlbGF5KTtcblx0ICAgICAgICBUb25lLkZlZWRiYWNrRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5IG5vZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlID0gbmV3IFRvbmUuRGVsYXkob3B0aW9ucy5kZWxheVRpbWUsIG9wdGlvbnMubWF4RGVsYXkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZWxheVRpbWUgb2YgdGhlIERlbGF5Tm9kZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IHRoaXMuX2RlbGF5Tm9kZS5kZWxheVRpbWU7XG5cdCAgICAgICAgLy8gY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9kZWxheU5vZGUpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZGVsYXlUaW1lJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRmVlZGJhY2tEZWxheSwgVG9uZS5GZWVkYmFja0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0RlbGF5LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLjI1LFxuXHQgICAgICAgICdtYXhEZWxheSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRmVlZGJhY2tEZWxheX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0RlbGF5LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydkZWxheVRpbWUnXSk7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZlZWRiYWNrRGVsYXk7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIGFuIGFycmF5IG9mIGNvbWIgZmlsdGVyIGRlbGF5IHZhbHVlcyBmcm9tIEZyZWV2ZXJiIGltcGxlbWVudGF0aW9uXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGNvbWJGaWx0ZXJUdW5pbmdzID0gW1xuXHQgICAgICAgIDE1NTcgLyA0NDEwMCxcblx0ICAgICAgICAxNjE3IC8gNDQxMDAsXG5cdCAgICAgICAgMTQ5MSAvIDQ0MTAwLFxuXHQgICAgICAgIDE0MjIgLyA0NDEwMCxcblx0ICAgICAgICAxMjc3IC8gNDQxMDAsXG5cdCAgICAgICAgMTM1NiAvIDQ0MTAwLFxuXHQgICAgICAgIDExODggLyA0NDEwMCxcblx0ICAgICAgICAxMTE2IC8gNDQxMDBcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgYW4gYXJyYXkgb2YgYWxscGFzcyBmaWx0ZXIgZnJlcXVlbmN5IHZhbHVlcyBmcm9tIEZyZWV2ZXJiIGltcGxlbWVudGF0aW9uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llcyA9IFtcblx0ICAgICAgICAyMjUsXG5cdCAgICAgICAgNTU2LFxuXHQgICAgICAgIDQ0MSxcblx0ICAgICAgICAzNDFcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRnJlZXZlcmIgaXMgYSByZXZlcmIgYmFzZWQgb24gW0ZyZWV2ZXJiXShodHRwczovL2Njcm1hLnN0YW5mb3JkLmVkdS9+am9zL3Bhc3AvRnJlZXZlcmIuaHRtbCkuXG5cdFx0ICogICAgICAgICBSZWFkIG1vcmUgb24gcmV2ZXJiIG9uIFtTb3VuZCBPbiBTb3VuZF0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNDA0MDgzOTAyL2h0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbTo4MC9zb3MvZmViMDEvYXJ0aWNsZXMvc3ludGhzZWNyZXRzLmFzcCkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZXxPYmplY3R9IFtyb29tU2l6ZV0gQ29ycmVsYXRlZCB0byB0aGUgZGVjYXkgdGltZS5cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IFtkYW1wZW5pbmddIFRoZSBjdXRvZmYgZnJlcXVlbmN5IG9mIGEgbG93cGFzcyBmaWx0ZXIgYXMgcGFydFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHJldmVyYi5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZnJlZXZlcmIgPSBuZXcgVG9uZS5GcmVldmVyYigpLnRvTWFzdGVyKCk7XG5cdFx0ICogZnJlZXZlcmIuZGFtcGVuaW5nLnZhbHVlID0gMTAwMDtcblx0XHQgKiAvL3JvdXRpbmcgc3ludGggdGhyb3VnaCB0aGUgcmV2ZXJiXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuQU1TeW50aCgpLmNvbm5lY3QoZnJlZXZlcmIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVldmVyYiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdyb29tU2l6ZScsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnXG5cdCAgICAgICAgXSwgVG9uZS5GcmVldmVyYik7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcm9vbVNpemUgdmFsdWUgYmV0d2Vlbi4gQSBsYXJnZXIgcm9vbVNpemVcblx0XHRcdCAqICB3aWxsIHJlc3VsdCBpbiBhIGxvbmdlciBkZWNheS5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLnJvb21TaXplLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZGFtcGVuaW5nIG9mIHRoZSByZXZlcmJlcmFudCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRhbXBlbmluZywgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGNvbWIgZmlsdGVyc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29tYkZpbHRlcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYWxscGFzcyBmaWx0ZXJzIG9uIHRoZSBsZWZ0XG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0wgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYWxscGFzcyBmaWx0ZXJzIG9uIHRoZSByaWdodFxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSID0gW107XG5cdCAgICAgICAgLy9tYWtlIHRoZSBhbGxwYXNzIGZpbHRlcnMgb24gdGhlIHJpZ2h0XG5cdCAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXMubGVuZ3RoOyBsKyspIHtcblx0ICAgICAgICAgICAgdmFyIGFsbHBhc3NMID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgICAgICBhbGxwYXNzTC50eXBlID0gJ2FsbHBhc3MnO1xuXHQgICAgICAgICAgICBhbGxwYXNzTC5mcmVxdWVuY3kudmFsdWUgPSBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXNbbF07XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTC5wdXNoKGFsbHBhc3NMKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9tYWtlIHRoZSBhbGxwYXNzIGZpbHRlcnMgb24gdGhlIGxlZnRcblx0ICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llcy5sZW5ndGg7IHIrKykge1xuXHQgICAgICAgICAgICB2YXIgYWxscGFzc1IgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgICAgIGFsbHBhc3NSLnR5cGUgPSAnYWxscGFzcyc7XG5cdCAgICAgICAgICAgIGFsbHBhc3NSLmZyZXF1ZW5jeS52YWx1ZSA9IGFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llc1tyXTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSLnB1c2goYWxscGFzc1IpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL21ha2UgdGhlIGNvbWIgZmlsdGVyc1xuXHQgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY29tYkZpbHRlclR1bmluZ3MubGVuZ3RoOyBjKyspIHtcblx0ICAgICAgICAgICAgdmFyIGxmcGYgPSBuZXcgVG9uZS5Mb3dwYXNzQ29tYkZpbHRlcihjb21iRmlsdGVyVHVuaW5nc1tjXSk7XG5cdCAgICAgICAgICAgIGlmIChjIDwgY29tYkZpbHRlclR1bmluZ3MubGVuZ3RoIC8gMikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jaGFpbihsZnBmLCB0aGlzLl9hbGxwYXNzRmlsdGVyc0xbMF0pO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jaGFpbihsZnBmLCB0aGlzLl9hbGxwYXNzRmlsdGVyc1JbMF0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMucm9vbVNpemUuY29ubmVjdChsZnBmLnJlc29uYW5jZSk7XG5cdCAgICAgICAgICAgIHRoaXMuZGFtcGVuaW5nLmNvbm5lY3QobGZwZi5kYW1wZW5pbmcpO1xuXHQgICAgICAgICAgICB0aGlzLl9jb21iRmlsdGVycy5wdXNoKGxmcGYpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NoYWluIHRoZSBhbGxwYXNzIGZpbHRlcnMgdG9nZXRlaHJcblx0ICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgdGhpcy5fYWxscGFzc0ZpbHRlcnNMKTtcblx0ICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgdGhpcy5fYWxscGFzc0ZpbHRlcnNSKTtcblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0xbdGhpcy5fYWxscGFzc0ZpbHRlcnNMLmxlbmd0aCAtIDFdLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1JbdGhpcy5fYWxscGFzc0ZpbHRlcnNSLmxlbmd0aCAtIDFdLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdyb29tU2l6ZScsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GcmVldmVyYiwgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlZXZlcmIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3Jvb21TaXplJzogMC43LFxuXHQgICAgICAgICdkYW1wZW5pbmcnOiAzMDAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GcmVldmVyYn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVldmVyYi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGZvciAodmFyIGFsID0gMDsgYWwgPCB0aGlzLl9hbGxwYXNzRmlsdGVyc0wubGVuZ3RoOyBhbCsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTFthbF0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0xbYWxdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBhciA9IDA7IGFyIDwgdGhpcy5fYWxscGFzc0ZpbHRlcnNSLmxlbmd0aDsgYXIrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1JbYXJdLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSW2FyXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUiA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgY2YgPSAwOyBjZiA8IHRoaXMuX2NvbWJGaWx0ZXJzLmxlbmd0aDsgY2YrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9jb21iRmlsdGVyc1tjZl0uZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9jb21iRmlsdGVyc1tjZl0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9jb21iRmlsdGVycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAncm9vbVNpemUnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRnJlZXZlcmI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIGFuIGFycmF5IG9mIHRoZSBjb21iIGZpbHRlciBkZWxheSB0aW1lIHZhbHVlc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBjb21iRmlsdGVyRGVsYXlUaW1lcyA9IFtcblx0ICAgICAgICAxNjg3IC8gMjUwMDAsXG5cdCAgICAgICAgMTYwMSAvIDI1MDAwLFxuXHQgICAgICAgIDIwNTMgLyAyNTAwMCxcblx0ICAgICAgICAyMjUxIC8gMjUwMDBcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIHJlc29uYW5jZXMgb2YgZWFjaCBvZiB0aGUgY29tYiBmaWx0ZXJzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGNvbWJGaWx0ZXJSZXNvbmFuY2VzID0gW1xuXHQgICAgICAgIDAuNzczLFxuXHQgICAgICAgIDAuODAyLFxuXHQgICAgICAgIDAuNzUzLFxuXHQgICAgICAgIDAuNzMzXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBhbGxwYXNzIGZpbHRlciBmcmVxdWVuY2llc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBhbGxwYXNzRmlsdGVyRnJlcXMgPSBbXG5cdCAgICAgICAgMzQ3LFxuXHQgICAgICAgIDExMyxcblx0ICAgICAgICAzN1xuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5KQ1JldmVyYiBpcyBhIHNpbXBsZSBbU2Nocm9lZGVyIFJldmVyYmVyYXRvcl0oaHR0cHM6Ly9jY3JtYS5zdGFuZm9yZC5lZHUvfmpvcy9wYXNwL1NjaHJvZWRlcl9SZXZlcmJlcmF0b3JzLmh0bWwpXG5cdFx0ICogICAgICAgICB0dW5lZCBieSBKb2huIENob3duaW5nIGluIDE5NzAuXG5cdFx0ICogICAgICAgICBJdCBpcyBtYWRlIHVwIG9mIHRocmVlIGFsbHBhc3MgZmlsdGVycyBhbmQgZm91ciBUb25lLkZlZWRiYWNrQ29tYkZpbHRlci5cblx0XHQgKlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V8T2JqZWN0fSBbcm9vbVNpemVdIENvb3JlbGF0ZXMgdG8gdGhlIGRlY2F5IHRpbWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHJldmVyYiA9IG5ldyBUb25lLkpDUmV2ZXJiKDAuNCkuY29ubmVjdChUb25lLk1hc3Rlcik7XG5cdFx0ICogdmFyIGRlbGF5ID0gbmV3IFRvbmUuRmVlZGJhY2tEZWxheSgwLjUpO1xuXHRcdCAqIC8vY29ubmVjdGluZyB0aGUgc3ludGggdG8gcmV2ZXJiIHRocm91Z2ggZGVsYXlcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5EdW9TeW50aCgpLmNoYWluKGRlbGF5LCByZXZlcmIpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQTRcIixcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5KQ1JldmVyYiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3Jvb21TaXplJ10sIFRvbmUuSkNSZXZlcmIpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcm9vbSBzaXplIGNvbnRyb2wgdmFsdWVzIGJldHdlZW4gWzAsMV1cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLnJvb21TaXplLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNjYWxlIHRoZSByb29tIHNpemVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TY2FsZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGVSb29tU2l6ZSA9IG5ldyBUb25lLlNjYWxlKC0wLjczMywgMC4xOTcpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGEgc2VyaWVzIG9mIGFsbHBhc3MgZmlsdGVyc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBwYXJhbGxlbCBmZWVkYmFjayBjb21iIGZpbHRlcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrQ29tYkZpbHRlcnMgPSBbXTtcblx0ICAgICAgICAvL21ha2UgdGhlIGFsbHBhc3MgZmlsdGVyc1xuXHQgICAgICAgIGZvciAodmFyIGFmID0gMDsgYWYgPCBhbGxwYXNzRmlsdGVyRnJlcXMubGVuZ3RoOyBhZisrKSB7XG5cdCAgICAgICAgICAgIHZhciBhbGxwYXNzID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgICAgICBhbGxwYXNzLnR5cGUgPSAnYWxscGFzcyc7XG5cdCAgICAgICAgICAgIGFsbHBhc3MuZnJlcXVlbmN5LnZhbHVlID0gYWxscGFzc0ZpbHRlckZyZXFzW2FmXTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnMucHVzaChhbGxwYXNzKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9hbmQgdGhlIGNvbWIgZmlsdGVyc1xuXHQgICAgICAgIGZvciAodmFyIGNmID0gMDsgY2YgPCBjb21iRmlsdGVyRGVsYXlUaW1lcy5sZW5ndGg7IGNmKyspIHtcblx0ICAgICAgICAgICAgdmFyIGZiY2YgPSBuZXcgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIoY29tYkZpbHRlckRlbGF5VGltZXNbY2ZdLCAwLjEpO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZVJvb21TaXplLmNvbm5lY3QoZmJjZi5yZXNvbmFuY2UpO1xuXHQgICAgICAgICAgICBmYmNmLnJlc29uYW5jZS52YWx1ZSA9IGNvbWJGaWx0ZXJSZXNvbmFuY2VzW2NmXTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNbdGhpcy5fYWxscGFzc0ZpbHRlcnMubGVuZ3RoIC0gMV0uY29ubmVjdChmYmNmKTtcblx0ICAgICAgICAgICAgaWYgKGNmIDwgY29tYkZpbHRlckRlbGF5VGltZXMubGVuZ3RoIC8gMikge1xuXHQgICAgICAgICAgICAgICAgZmJjZi5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBmYmNmLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzLnB1c2goZmJjZik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY2hhaW4gdGhlIGFsbHBhc3MgZmlsdGVycyB0b2dldGhlclxuXHQgICAgICAgIHRoaXMucm9vbVNpemUuY29ubmVjdCh0aGlzLl9zY2FsZVJvb21TaXplKTtcblx0ICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgdGhpcy5fYWxscGFzc0ZpbHRlcnMpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY29ubmVjdCh0aGlzLl9hbGxwYXNzRmlsdGVyc1swXSk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jb25uZWN0KHRoaXMuX2FsbHBhc3NGaWx0ZXJzWzBdKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ3Jvb21TaXplJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuSkNSZXZlcmIsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuSkNSZXZlcmIuZGVmYXVsdHMgPSB7ICdyb29tU2l6ZSc6IDAuNSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5KQ1JldmVyYn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5KQ1JldmVyYi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGZvciAodmFyIGFwZiA9IDA7IGFwZiA8IHRoaXMuX2FsbHBhc3NGaWx0ZXJzLmxlbmd0aDsgYXBmKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNbYXBmXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzW2FwZl0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVycyA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgZmJjZiA9IDA7IGZiY2YgPCB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzLmxlbmd0aDsgZmJjZisrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZlZWRiYWNrQ29tYkZpbHRlcnNbZmJjZl0uZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzW2ZiY2ZdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydyb29tU2l6ZSddKTtcblx0ICAgICAgICB0aGlzLnJvb21TaXplLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJvb21TaXplID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zY2FsZVJvb21TaXplLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZVJvb21TaXplID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5KQ1JldmVyYjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE1pZC9TaWRlIHByb2Nlc3Npbmcgc2VwYXJhdGVzIHRoZSB0aGUgJ21pZCcgc2lnbmFsXG5cdFx0ICogICAgICAgICAod2hpY2ggY29tZXMgb3V0IG9mIGJvdGggdGhlIGxlZnQgYW5kIHRoZSByaWdodCBjaGFubmVsKVxuXHRcdCAqICAgICAgICAgYW5kIHRoZSAnc2lkZScgKHdoaWNoIG9ubHkgY29tZXMgb3V0IG9mIHRoZSB0aGUgc2lkZSBjaGFubmVscylcblx0XHQgKiAgICAgICAgIGFuZCBlZmZlY3RzIHRoZW0gc2VwYXJhdGVseSBiZWZvcmUgYmVpbmcgcmVjb21iaW5lZC5cblx0XHQgKiAgICAgICAgIEFwcGxpZXMgYSBNaWQvU2lkZSBzZXBlcmF0aW9uIGFuZCByZWNvbWJpbmF0aW9uLlxuXHRcdCAqICAgICAgICAgQWxnb3JpdGhtIGZvdW5kIGluIFtrdnJhdWRpbyBmb3J1bXNdKGh0dHA6Ly93d3cua3ZyYXVkaW8uY29tL2ZvcnVtL3ZpZXd0b3BpYy5waHA/dD0yMTI1ODcpLlxuXHRcdCAqICAgICAgICAgPGJyPjxicj5cblx0XHQgKiAgICAgICAgIFRoaXMgaXMgYSBiYXNlLWNsYXNzIGZvciBNaWQvU2lkZSBFZmZlY3RzLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVFZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkL3NpZGUgc3BsaXRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTWlkU2lkZVNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQgPSBuZXcgVG9uZS5NaWRTaWRlU3BsaXQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkL3NpZGUgbWVyZ2Vcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTWlkU2lkZU1lcmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UgPSBuZXcgVG9uZS5NaWRTaWRlTWVyZ2UoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkIHNlbmQuIENvbm5lY3QgdG8gbWlkIHByb2Nlc3Npbmdcblx0XHRcdCAqICBAdHlwZSB7VG9uZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWRTZW5kID0gdGhpcy5fbWlkU2lkZVNwbGl0Lm1pZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lkZSBzZW5kLiBDb25uZWN0IHRvIHNpZGUgcHJvY2Vzc2luZ1xuXHRcdFx0ICogIEB0eXBlIHtUb25lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNpZGVTZW5kID0gdGhpcy5fbWlkU2lkZVNwbGl0LnNpZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZCByZXR1cm4gY29ubmVjdGlvblxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWRSZXR1cm4gPSB0aGlzLl9taWRTaWRlTWVyZ2UubWlkO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzaWRlIHJldHVybiBjb25uZWN0aW9uXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNpZGVSZXR1cm4gPSB0aGlzLl9taWRTaWRlTWVyZ2Uuc2lkZTtcblx0ICAgICAgICAvL3RoZSBjb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5jb25uZWN0KHRoaXMuX21pZFNpZGVTcGxpdCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWlkU2lkZUVmZmVjdCwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NaWRTaWRlRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWlkU2VuZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5zaWRlU2VuZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5taWRSZXR1cm4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZVJldHVybiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkU2lkZUVmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGhhc2VyIGlzIGEgcGhhc2VyIGVmZmVjdC4gUGhhc2VycyB3b3JrIGJ5IGNoYW5naW5nIHRoZSBwaGFzZVxuXHRcdCAqICAgICAgICAgb2YgZGlmZmVyZW50IGZyZXF1ZW5jeSBjb21wb25lbnRzIG9mIGFuIGluY29taW5nIHNpZ25hbC4gUmVhZCBtb3JlIG9uXG5cdFx0ICogICAgICAgICBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QaGFzZXJfKGVmZmVjdCkpLlxuXHRcdCAqICAgICAgICAgSW5zcGlyYXRpb24gZm9yIHRoaXMgcGhhc2VyIGNvbWVzIGZyb20gW1R1bmEuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9EaW5haG1vZS90dW5hLykuXG5cdFx0ICpcblx0XHQgKlx0QGV4dGVuZHMge1RvbmUuU3RlcmVvRWZmZWN0fVxuXHRcdCAqXHRAY29uc3RydWN0b3Jcblx0XHQgKlx0QHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbZnJlcXVlbmN5XSBUaGUgc3BlZWQgb2YgdGhlIHBoYXNpbmcuXG5cdFx0ICpcdEBwYXJhbSB7bnVtYmVyfSBbb2N0YXZlc10gVGhlIG9jdGF2ZXMgb2YgdGhlIGVmZmVjdC5cblx0XHQgKlx0QHBhcmFtIHtGcmVxdWVuY3l9IFtiYXNlRnJlcXVlbmN5XSBUaGUgYmFzZSBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlcnMuXG5cdFx0ICpcdEBleGFtcGxlXG5cdFx0ICogdmFyIHBoYXNlciA9IG5ldyBUb25lLlBoYXNlcih7XG5cdFx0ICogXHRcImZyZXF1ZW5jeVwiIDogMTUsXG5cdFx0ICogXHRcIm9jdGF2ZXNcIiA6IDUsXG5cdFx0ICogXHRcImJhc2VGcmVxdWVuY3lcIiA6IDEwMDBcblx0XHQgKiB9KS50b01hc3RlcigpO1xuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLkZNU3ludGgoKS5jb25uZWN0KHBoYXNlcik7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJFM1wiLCBcIjJuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QaGFzZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9zZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ29jdGF2ZXMnLFxuXHQgICAgICAgICAgICAnYmFzZUZyZXF1ZW5jeSdcblx0ICAgICAgICBdLCBUb25lLlBoYXNlcik7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvIHdoaWNoIGNvbnRyb2xzIHRoZSBmcmVxdWVuY3kgb24gdGhlIGxlZnQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG5ldyBUb25lLkxGTyhvcHRpb25zLmZyZXF1ZW5jeSwgMCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBjb250cm9scyB0aGUgZnJlcXVlbmN5IG9uIHRoZSByaWdodCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9SID0gbmV3IFRvbmUuTEZPKG9wdGlvbnMuZnJlcXVlbmN5LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnBoYXNlID0gMTgwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBiYXNlIG1vZHVsYXRpb24gZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgb2N0YXZlcyBvZiB0aGUgcGhhc2luZ1xuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHF1YWxpdHkgZmFjdG9yIG9mIHRoZSBmaWx0ZXJzXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuUSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLlEsIFRvbmUuVHlwZS5Qb3NpdGl2ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFycmF5IG9mIGZpbHRlcnMgZm9yIHRoZSBsZWZ0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnNMID0gdGhpcy5fbWFrZUZpbHRlcnMob3B0aW9ucy5zdGFnZXMsIHRoaXMuX2xmb0wsIHRoaXMuUSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFycmF5IG9mIGZpbHRlcnMgZm9yIHRoZSBsZWZ0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnNSID0gdGhpcy5fbWFrZUZpbHRlcnMob3B0aW9ucy5zdGFnZXMsIHRoaXMuX2xmb1IsIHRoaXMuUSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiB0aGUgZnJlcXVlbmN5IG9mIHRoZSBlZmZlY3Rcblx0XHRcdCAqIEB0eXBlIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbGZvTC5mcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kudmFsdWUgPSBvcHRpb25zLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlbSB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY29ubmVjdCh0aGlzLl9maWx0ZXJzTFswXSk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jb25uZWN0KHRoaXMuX2ZpbHRlcnNSWzBdKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXJzTFtvcHRpb25zLnN0YWdlcyAtIDFdLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXJzUltvcHRpb25zLnN0YWdlcyAtIDFdLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICAvL2NvbnRyb2wgdGhlIGZyZXF1ZW5jeSB3aXRoIG9uZSBMRk9cblx0ICAgICAgICB0aGlzLl9sZm9MLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX2xmb1IuZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3NldCB0aGUgb3B0aW9uc1xuXHQgICAgICAgIHRoaXMuYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICB0aGlzLm9jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgbGZvXG5cdCAgICAgICAgdGhpcy5fbGZvTC5zdGFydCgpO1xuXHQgICAgICAgIHRoaXMuX2xmb1Iuc3RhcnQoKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBoYXNlciwgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHRzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge29iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGhhc2VyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAwLjUsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiAzLFxuXHQgICAgICAgICdzdGFnZXMnOiAxMCxcblx0ICAgICAgICAnUSc6IDEwLFxuXHQgICAgICAgICdiYXNlRnJlcXVlbmN5JzogMzUwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBzdGFnZXNcblx0XHQgKiAgQHJldHVybnMge0FycmF5fSB0aGUgbnVtYmVyIG9mIGZpbHRlcnMgYWxsIGNvbm5lY3RlZCB0b2dldGhlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QaGFzZXIucHJvdG90eXBlLl9tYWtlRmlsdGVycyA9IGZ1bmN0aW9uIChzdGFnZXMsIGNvbm5lY3RUb0ZyZXEsIFEpIHtcblx0ICAgICAgICB2YXIgZmlsdGVycyA9IG5ldyBBcnJheShzdGFnZXMpO1xuXHQgICAgICAgIC8vbWFrZSBhbGwgdGhlIGZpbHRlcnNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YWdlczsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBmaWx0ZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgICAgIGZpbHRlci50eXBlID0gJ2FsbHBhc3MnO1xuXHQgICAgICAgICAgICBRLmNvbm5lY3QoZmlsdGVyLlEpO1xuXHQgICAgICAgICAgICBjb25uZWN0VG9GcmVxLmNvbm5lY3QoZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgICAgIGZpbHRlcnNbaV0gPSBmaWx0ZXI7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuY29ubmVjdFNlcmllcy5hcHBseShUb25lLCBmaWx0ZXJzKTtcblx0ICAgICAgICByZXR1cm4gZmlsdGVycztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgdGhlIHBoYXNlIGdvZXMgYWJvdmVcblx0XHQgKiB0aGUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBoYXNlciNcblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQG5hbWUgb2N0YXZlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGhhc2VyLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0YXZlcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0YXZlcztcblx0ICAgICAgICAgICAgdmFyIG1heCA9IHRoaXMuX2Jhc2VGcmVxdWVuY3kgKiBNYXRoLnBvdygyLCBvY3RhdmVzKTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5tYXggPSBtYXg7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IubWF4ID0gbWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHRoZSBiYXNlIGZyZXF1ZW5jeSBvZiB0aGUgZmlsdGVycy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QaGFzZXIjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QaGFzZXIucHJvdG90eXBlLCAnYmFzZUZyZXF1ZW5jeScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Jhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmcmVxKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2Jhc2VGcmVxdWVuY3kgPSBmcmVxO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLm1pbiA9IGZyZXE7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IubWluID0gZnJlcTtcblx0ICAgICAgICAgICAgdGhpcy5vY3RhdmVzID0gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QaGFzZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGhhc2VyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5RLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLlEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb0wuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb1IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZmlsdGVyc0wubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc0xbaV0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzTFtpXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnNMID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX2ZpbHRlcnNSLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNSW2pdLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1Jbal0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBoYXNlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEp1c3QgbGlrZSBhIHN0ZXJlbyBmZWVkYmFjayBlZmZlY3QsIGJ1dCB0aGUgZmVlZGJhY2sgaXMgcm91dGVkIGZyb20gbGVmdCB0byByaWdodFxuXHRcdCAqICAgICAgICAgYW5kIHJpZ2h0IHRvIGxlZnQgaW5zdGVhZCBvZiBvbiB0aGUgc2FtZSBjaGFubmVsLlxuXHRcdCAqXG5cdFx0ICpcdEBjb25zdHJ1Y3RvclxuXHRcdCAqXHRAZXh0ZW5kcyB7VG9uZS5TdGVyZW9FZmZlY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2ZlZWRiYWNrJ10sIFRvbmUuRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBmZWVkYmFjayBmcm9tIHRoZSBvdXRwdXRcblx0XHRcdCAqICBiYWNrIGludG8gdGhlIGlucHV0IG9mIHRoZSBlZmZlY3QgKHJvdXRlZFxuXHRcdFx0ICogIGFjcm9zcyBsZWZ0IGFuZCByaWdodCBjaGFubmVscykuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mZWVkYmFjaywgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGVmdCBzaWRlIGZlZWJhY2tcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSByaWdodCBzaWRlIGZlZWJhY2tcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1JMID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuTC5jaGFpbih0aGlzLl9mZWVkYmFja0xSLCB0aGlzLmVmZmVjdFNlbmRSKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVyblIuY2hhaW4odGhpcy5fZmVlZGJhY2tSTCwgdGhpcy5lZmZlY3RTZW5kTCk7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjay5mYW4odGhpcy5fZmVlZGJhY2tMUi5nYWluLCB0aGlzLl9mZWVkYmFja1JMLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZmVlZGJhY2snXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydmZWVkYmFjayddKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1JMLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1JMID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5QaW5nUG9uZ0RlbGF5IGlzIGEgZmVlZGJhY2sgZGVsYXkgZWZmZWN0IHdoZXJlIHRoZSBlY2hvIGlzIGhlYXJkXG5cdFx0ICogICAgICAgICAgZmlyc3QgaW4gb25lIGNoYW5uZWwgYW5kIG5leHQgaW4gdGhlIG9wcG9zaXRlIGNoYW5uZWwuIEluIGEgc3RlcmVvXG5cdFx0ICogICAgICAgICAgc3lzdGVtIHRoZXNlIGFyZSB0aGUgcmlnaHQgYW5kIGxlZnQgY2hhbm5lbHMuXG5cdFx0ICogICAgICAgICAgUGluZ1BvbmdEZWxheSBpbiBtb3JlIHNpbXBsaWZpZWQgdGVybXMgaXMgdHdvIFRvbmUuRmVlZGJhY2tEZWxheXNcblx0XHQgKiAgICAgICAgICB3aXRoIGluZGVwZW5kZW50IGRlbGF5IHZhbHVlcy4gRWFjaCBkZWxheSBpcyByb3V0ZWQgdG8gb25lIGNoYW5uZWxcblx0XHQgKiAgICAgICAgICAobGVmdCBvciByaWdodCksIGFuZCB0aGUgY2hhbm5lbCB0cmlnZ2VyZWQgc2Vjb25kIHdpbGwgYWx3YXlzXG5cdFx0ICogICAgICAgICAgdHJpZ2dlciBhdCB0aGUgc2FtZSBpbnRlcnZhbCBhZnRlciB0aGUgZmlyc3QuXG5cdFx0ICpcblx0XHQgKiBcdEBjb25zdHJ1Y3RvclxuXHRcdCAqIFx0QGV4dGVuZHMge1RvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZGVsYXlUaW1lXSBUaGUgZGVsYXlUaW1lIGJldHdlZW4gY29uc2VjdXRpdmUgZWNob3MuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2U9fSBmZWVkYmFjayBUaGUgYW1vdW50IG9mIHRoZSBlZmZlY3RlZCBzaWduYWwgd2hpY2hcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZlZCBiYWNrIHRocm91Z2ggdGhlIGRlbGF5LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwaW5nUG9uZyA9IG5ldyBUb25lLlBpbmdQb25nRGVsYXkoXCI0blwiLCAwLjIpLnRvTWFzdGVyKCk7XG5cdFx0ICogdmFyIGRydW0gPSBuZXcgVG9uZS5EcnVtU3ludGgoKS5jb25uZWN0KHBpbmdQb25nKTtcblx0XHQgKiBkcnVtLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCIzMm5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBpbmdQb25nRGVsYXkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ2ZlZWRiYWNrJ1xuXHQgICAgICAgIF0sIFRvbmUuUGluZ1BvbmdEZWxheSk7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgbm9kZSBvbiB0aGUgbGVmdCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xlZnREZWxheSA9IG5ldyBUb25lLkRlbGF5KDAsIG9wdGlvbnMubWF4RGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgbm9kZSBvbiB0aGUgcmlnaHQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yaWdodERlbGF5ID0gbmV3IFRvbmUuRGVsYXkoMCwgb3B0aW9ucy5tYXhEZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwcmVkZWxheSBvbiB0aGUgcmlnaHQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yaWdodFByZURlbGF5ID0gbmV3IFRvbmUuRGVsYXkoMCwgb3B0aW9ucy5tYXhEZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSB0aW1lIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGVsYXlUaW1lLCBUb25lLlR5cGUuVGltZSk7XG5cdCAgICAgICAgLy9jb25uZWN0IGl0IHVwXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jaGFpbih0aGlzLl9sZWZ0RGVsYXksIHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jaGFpbih0aGlzLl9yaWdodFByZURlbGF5LCB0aGlzLl9yaWdodERlbGF5LCB0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lLmZhbih0aGlzLl9sZWZ0RGVsYXkuZGVsYXlUaW1lLCB0aGlzLl9yaWdodERlbGF5LmRlbGF5VGltZSwgdGhpcy5fcmlnaHRQcmVEZWxheS5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8vcmVhcnJhbmdlZCB0aGUgZmVlZGJhY2sgdG8gYmUgYWZ0ZXIgdGhlIHJpZ2h0UHJlRGVsYXlcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSLmNvbm5lY3QodGhpcy5fcmlnaHREZWxheSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydkZWxheVRpbWUnXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QaW5nUG9uZ0RlbGF5LCBUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QaW5nUG9uZ0RlbGF5LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLjI1LFxuXHQgICAgICAgICdtYXhEZWxheVRpbWUnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QaW5nUG9uZ0RlbGF5fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBpbmdQb25nRGVsYXkucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9sZWZ0RGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xlZnREZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmlnaHREZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcmlnaHREZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmlnaHRQcmVEZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcmlnaHRQcmVEZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydkZWxheVRpbWUnXSk7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QaW5nUG9uZ0RlbGF5O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QaXRjaFNoaWZ0IGRvZXMgbmVhci1yZWFsdGltZSBwaXRjaCBzaGlmdGluZyB0byB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICAgICAgICAgVGhlIGVmZmVjdCBpcyBhY2hpZXZlZCBieSBzcGVlZGluZyB1cCBvciBzbG93aW5nIGRvd24gdGhlIGRlbGF5VGltZVxuXHRcdCAqICAgICAgICAgb2YgYSBEZWxheU5vZGUgdXNpbmcgYSBzYXd0b290aCB3YXZlLlxuXHRcdCAqICAgICAgICAgQWxnb3JpdGhtIGZvdW5kIGluIFt0aGlzIHBkZl0oaHR0cDovL2RzcC1ib29rLm5hcm9kLnJ1L3NvdW5kcHJvYy5wZGYpLlxuXHRcdCAqICAgICAgICAgQWRkaXRpb25hbCByZWZlcmVuY2UgYnkgW01pbGxlciBQdWNrZXRdKGh0dHA6Ly9tc3AudWNzZC5lZHUvdGVjaG5pcXVlcy92MC4xMS9ib29rLWh0bWwvbm9kZTExNS5odG1sKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5GZWVkYmFja0VmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtJbnRlcnZhbD19IHBpdGNoIFRoZSBpbnRlcnZhbCB0byB0cmFuc3Bvc2UgdGhlIGluY29taW5nIHNpZ25hbCBieS5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGl0Y2hTaGlmdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3BpdGNoJ10sIFRvbmUuUGl0Y2hTaGlmdCk7XG5cdCAgICAgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwaXRjaCBzaWduYWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwoMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVXNlcyB0d28gRGVsYXlOb2RlcyB0byBjb3ZlciB1cCB0aGUganVtcCBpblxuXHRcdFx0ICogIHRoZSBzYXd0b290aCB3YXZlLlxuXHRcdFx0ICogIEB0eXBlICB7RGVsYXlOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheUEgPSBuZXcgVG9uZS5EZWxheSgwLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmlyc3QgTEZPLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0EgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDAuMSxcblx0ICAgICAgICAgICAgJ3R5cGUnOiAnc2F3dG9vdGgnXG5cdCAgICAgICAgfSkuY29ubmVjdCh0aGlzLl9kZWxheUEuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2Vjb25kIERlbGF5Tm9kZVxuXHRcdFx0ICogIEB0eXBlICB7RGVsYXlOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheUIgPSBuZXcgVG9uZS5EZWxheSgwLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmlyc3QgTEZPLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0IgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDAuMSxcblx0ICAgICAgICAgICAgJ3R5cGUnOiAnc2F3dG9vdGgnLFxuXHQgICAgICAgICAgICAncGhhc2UnOiAxODBcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMuX2RlbGF5Qi5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIENyb3NzZmFkZSBxdWlja2x5IGJldHdlZW4gdGhlIHR3byBkZWxheSBsaW5lc1xuXHRcdFx0ICogIHRvIGNvdmVyIHVwIHRoZSBqdW1wIGluIHRoZSBzYXd0b290aCB3YXZlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkNyb3NzRmFkZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlID0gbmV3IFRvbmUuQ3Jvc3NGYWRlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgTEZPIHdoaWNoIGFsdGVybmF0ZXMgYmV0d2VlbiB0aGUgdHdvXG5cdFx0XHQgKiAgZGVsYXkgbGluZXMgdG8gY292ZXIgdXAgdGhlIGRpc3Bhcml0eSBpbiB0aGVcblx0XHRcdCAqICBzYXd0b290aCB3YXZlLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZUxGTyA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICAgICAnbWF4JzogMSxcblx0ICAgICAgICAgICAgJ3R5cGUnOiAndHJpYW5nbGUnLFxuXHQgICAgICAgICAgICAncGhhc2UnOiA5MFxuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5fY3Jvc3NGYWRlLmZhZGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZWxheSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrRGVsYXkgPSBuZXcgVG9uZS5EZWxheShvcHRpb25zLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBkZWxheSBvbiB0aGUgaW5wdXQgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSB0aGlzLl9mZWVkYmFja0RlbGF5LmRlbGF5VGltZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZGVsYXlUaW1lJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZCB0aGUgY3VycmVudCBwaXRjaFxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BpdGNoID0gb3B0aW9ucy5waXRjaDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIb2xkIHRoZSBjdXJyZW50IHdpbmRvd1NpemVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl93aW5kb3dTaXplID0gb3B0aW9ucy53aW5kb3dTaXplO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgdHdvIGRlbGF5IGxpbmVzIHVwXG5cdCAgICAgICAgdGhpcy5fZGVsYXlBLmNvbm5lY3QodGhpcy5fY3Jvc3NGYWRlLmEpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Qi5jb25uZWN0KHRoaXMuX2Nyb3NzRmFkZS5iKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeS5mYW4odGhpcy5fbGZvQS5mcmVxdWVuY3ksIHRoaXMuX2xmb0IuZnJlcXVlbmN5LCB0aGlzLl9jcm9zc0ZhZGVMRk8uZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3JvdXRlIHRoZSBpbnB1dFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5mYW4odGhpcy5fZGVsYXlBLCB0aGlzLl9kZWxheUIpO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZS5jaGFpbih0aGlzLl9mZWVkYmFja0RlbGF5LCB0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgTEZPcyBhdCB0aGUgc2FtZSB0aW1lXG5cdCAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgdGhpcy5fbGZvQS5zdGFydChub3cpO1xuXHQgICAgICAgIHRoaXMuX2xmb0Iuc3RhcnQobm93KTtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGVMRk8uc3RhcnQobm93KTtcblx0ICAgICAgICAvL3NldCB0aGUgaW5pdGlhbCB2YWx1ZVxuXHQgICAgICAgIHRoaXMud2luZG93U2l6ZSA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QaXRjaFNoaWZ0LCBUb25lLkZlZWRiYWNrRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5QaXRjaFNoaWZ0LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwaXRjaCc6IDAsXG5cdCAgICAgICAgJ3dpbmRvd1NpemUnOiAwLjEsXG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDAsXG5cdCAgICAgICAgJ2ZlZWRiYWNrJzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlcGl0Y2ggdGhlIGluY29taW5nIHNpZ25hbCBieSBzb21lIGludGVydmFsIChtZWFzdXJlZFxuXHRcdCAqIGluIHNlbWktdG9uZXMpLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBpdGNoU2hpZnQjXG5cdFx0ICogQHR5cGUge0ludGVydmFsfVxuXHRcdCAqIEBuYW1lIHBpdGNoXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBwaXRjaFNoaWZ0LnBpdGNoID0gLTEyOyAvL2Rvd24gb25lIG9jdGF2ZVxuXHRcdCAqIHBpdGNoU2hpZnQucGl0Y2ggPSA3OyAvL3VwIGEgZmlmdGhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBpdGNoU2hpZnQucHJvdG90eXBlLCAncGl0Y2gnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9waXRjaDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BpdGNoID0gaW50ZXJ2YWw7XG5cdCAgICAgICAgICAgIHZhciBmYWN0b3IgPSAwO1xuXHQgICAgICAgICAgICBpZiAoaW50ZXJ2YWwgPCAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9BLm1pbiA9IDA7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9BLm1heCA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9CLm1pbiA9IDA7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9CLm1heCA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgICAgICAgICBmYWN0b3IgPSBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyhpbnRlcnZhbCAtIDEpICsgMTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0EubWluID0gdGhpcy5fd2luZG93U2l6ZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0EubWF4ID0gMDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0IubWluID0gdGhpcy5fd2luZG93U2l6ZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0IubWF4ID0gMDtcblx0ICAgICAgICAgICAgICAgIGZhY3RvciA9IFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKGludGVydmFsKSAtIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZnJlcXVlbmN5LnZhbHVlID0gZmFjdG9yICogKDEuMiAvIHRoaXMuX3dpbmRvd1NpemUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHdpbmRvdyBzaXplIGNvcnJlc3BvbmRzIHJvdWdobHkgdG8gdGhlIHNhbXBsZSBsZW5ndGggaW4gYSBsb29waW5nIHNhbXBsZXIuXG5cdFx0ICogU21hbGxlciB2YWx1ZXMgYXJlIGRlc2lyYWJsZSBmb3IgYSBsZXNzIG5vdGljZWFibGUgZGVsYXkgdGltZSBvZiB0aGUgcGl0Y2ggc2hpZnRlZFxuXHRcdCAqIHNpZ25hbCwgYnV0IGxhcmdlciB2YWx1ZXMgd2lsbCByZXN1bHQgaW4gc21vb3RoZXIgcGl0Y2ggc2hpZnRpbmcgZm9yIGxhcmdlciBpbnRlcnZhbHMuXG5cdFx0ICogQSBub21pbmFsIHJhbmdlIG9mIDAuMDMgdG8gMC4xIGlzIHJlY29tbWVuZGVkLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBpdGNoU2hpZnQjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgd2luZG93U2l6ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogcGl0Y2hTaGlmdC53aW5kb3dTaXplID0gMC4xO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGl0Y2hTaGlmdC5wcm90b3R5cGUsICd3aW5kb3dTaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2luZG93U2l6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNpemUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fd2luZG93U2l6ZSA9IHRoaXMudG9TZWNvbmRzKHNpemUpO1xuXHQgICAgICAgICAgICB0aGlzLnBpdGNoID0gdGhpcy5fcGl0Y2g7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBpdGNoU2hpZnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBpdGNoU2hpZnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9kZWxheUEuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5QSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlCLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheUIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb0EuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb0EgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb0IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb0IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGVMRk8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZUxGTyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2RlbGF5VGltZScpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrRGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrRGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QaXRjaFNoaWZ0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBwZXIgYXJvdW5kIHRoZSBuYXRpdmUgQnVmZmVyU291cmNlTm9kZS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0gIHtBdWRpb0J1ZmZlcnxUb25lLkJ1ZmZlcn0gIGJ1ZmZlciAgIFRoZSBidWZmZXIgdG8gcGxheVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIG9ubG9hZCAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBpcyBkb25lIHBsYXlpbmcuXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdidWZmZXInLFxuXHQgICAgICAgICAgICAnb25sb2FkJ1xuXHQgICAgICAgIF0sIFRvbmUuQnVmZmVyU291cmNlKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGhlXG5cdFx0XHQgKiAgYnVmZmVyIHNvdXJjZSBpcyBkb25lIHBsYXlpbmcuXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub25lbmRlZCA9IG9wdGlvbnMub25lbmRlZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdGltZSB0aGF0IHRoZSBidWZmZXIgd2FzIHN0YXJ0ZWQuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFuIGFkZGl0aW9uYWwgZmxhZyBpZiB0aGUgYWN0dWFsIEJ1ZmZlclNvdXJjZU5vZGVcblx0XHRcdCAqICBoYXMgYmVlbiBzdGFydGVkLiBiL2Mgc3RvcHBpbmcgYW4gdW5zdGFydGVkIGJ1ZmZlclxuXHRcdFx0ICogIHdpbGwgdGhyb3cgaXQgaW50byBhbiBpbnZhbGlkIHN0YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtCb29sZWFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gZmFsc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgRmxhZyBpZiB0aGUgc291cmNlIGhhcyBhbHJlYWR5IGJlZW4gc3RvcHBlZFxuXHRcdFx0ICogIEB0eXBlICB7Qm9vbGVhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlU3RvcHBlZCA9IGZhbHNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0aW1lIHRoYXQgdGhlIGJ1ZmZlciBpcyBzY2hlZHVsZWQgdG8gc3RvcC5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBub2RlIHdoaWNoIGVudmVsb3BlcyB0aGUgQnVmZmVyU291cmNlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGJ1ZmZlciBzb3VyY2Vcblx0XHRcdCAqICBAdHlwZSAge0F1ZGlvQnVmZmVyU291cmNlTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5jb25uZWN0KHRoaXMuX2dhaW5Ob2RlKTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2Uub25lbmRlZCA9IHRoaXMuX29uZW5kZWQuYmluZCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBwcml2YXRlIGJ1ZmZlciBpbnN0YW5jZVxuXHRcdFx0ICogQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcihvcHRpb25zLmJ1ZmZlciwgb3B0aW9ucy5vbmxvYWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwbGF5YmFja1JhdGUgb2YgdGhlIGJ1ZmZlclxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnBsYXliYWNrUmF0ZSA9IG5ldyBUb25lLlBhcmFtKHRoaXMuX3NvdXJjZS5wbGF5YmFja1JhdGUsIFRvbmUuVHlwZS5Qb3NpdGl2ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZhZGVJbiB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZhZGVJbiA9IG9wdGlvbnMuZmFkZUluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmYWRlT3V0IHRpbWUgb2YgdGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmFkZU91dCA9IG9wdGlvbnMuZmFkZU91dDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBjdXJ2ZSBhcHBsaWVkIHRvIHRoZSBmYWRlcywgZWl0aGVyIFwibGluZWFyXCIgb3IgXCJleHBvbmVudGlhbFwiXG5cdFx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jdXJ2ZSA9IG9wdGlvbnMuY3VydmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlIHRoYXQgdGhlIGJ1ZmZlciByYW1wcyB0b1xuXHRcdFx0ICogIEB0eXBlIHtHYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9nYWluID0gMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBvbmVuZGVkIHRpbWVvdXRcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb25lbmRlZFRpbWVvdXQgPSAtMTtcblx0ICAgICAgICAvL3NldCBzb21lIHZhbHVlcyBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLmxvb3AgPSBvcHRpb25zLmxvb3A7XG5cdCAgICAgICAgdGhpcy5sb29wU3RhcnQgPSBvcHRpb25zLmxvb3BTdGFydDtcblx0ICAgICAgICB0aGlzLmxvb3BFbmQgPSBvcHRpb25zLmxvb3BFbmQ7XG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUudmFsdWUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkJ1ZmZlclNvdXJjZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb25lbmRlZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdsb29wJzogZmFsc2UsXG5cdCAgICAgICAgJ2xvb3BTdGFydCc6IDAsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAwLFxuXHQgICAgICAgICdmYWRlSW4nOiAwLFxuXHQgICAgICAgICdmYWRlT3V0JzogMCxcblx0ICAgICAgICAnY3VydmUnOiAnbGluZWFyJyxcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQnVmZmVyU291cmNlI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGF0ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHBsYXliYWNrIHN0YXRlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBUaGUgdGltZSB0byB0ZXN0IHRoZSBzdGF0ZSBhdFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5TdGF0ZX0gIFRoZSBwbGF5YmFjayBzdGF0ZS4gXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuZ2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSAmJiB0aW1lID49IHRoaXMuX3N0YXJ0VGltZSAmJiAhdGhpcy5fc291cmNlU3RvcHBlZCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5TdGF0ZS5TdGFydGVkO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlN0YXRlLlN0b3BwZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgYnVmZmVyXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtzdGFydFRpbWU9bm93XSBXaGVuIHRoZSBwbGF5ZXIgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbb2Zmc2V0PTBdIFRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGF0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIHNhbXBsZSBzaG91bGQgcGxheS4gSWYgbm8gZHVyYXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZ2l2ZW4sIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgZnVsbCBsZW5ndGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNhbXBsZSAobWludXMgYW55IG9mZnNldClcblx0XHQgKiAgQHBhcmFtICB7R2Fpbn0gIFtnYWluPTFdICBUaGUgZ2FpbiB0byBwbGF5IHRoZSBidWZmZXIgYmFjayBhdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICBmYWRlSW5UaW1lICBUaGUgb3B0aW9uYWwgZmFkZUluIHJhbXAgdGltZS5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyU291cmNlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCwgZHVyYXRpb24sIGdhaW4sIGZhZGVJblRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuQnVmZmVyU291cmNlIGNhbiBvbmx5IGJlIHN0YXJ0ZWQgb25jZS4nKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCF0aGlzLmJ1ZmZlci5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkJ1ZmZlclNvdXJjZTogYnVmZmVyIGlzIGVpdGhlciBub3Qgc2V0IG9yIG5vdCBsb2FkZWQuJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL2lmIGl0J3MgYSBsb29wIHRoZSBkZWZhdWx0IG9mZnNldCBpcyB0aGUgbG9vcHN0YXJ0IHBvaW50XG5cdCAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCB0aGlzLmxvb3BTdGFydCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy9vdGhlcndpc2UgdGhlIGRlZmF1bHQgb2Zmc2V0IGlzIDBcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgMCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIG9mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgZ2FpbiA9IFRvbmUuZGVmYXVsdEFyZyhnYWluLCAxKTtcblx0ICAgICAgICB0aGlzLl9nYWluID0gZ2Fpbjtcblx0ICAgICAgICBmYWRlSW5UaW1lID0gdGhpcy50b1NlY29uZHMoVG9uZS5kZWZhdWx0QXJnKGZhZGVJblRpbWUsIHRoaXMuZmFkZUluKSk7XG5cdCAgICAgICAgdGhpcy5mYWRlSW4gPSBmYWRlSW5UaW1lO1xuXHQgICAgICAgIGlmIChmYWRlSW5UaW1lID4gMCkge1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5jdXJ2ZSA9PT0gJ2xpbmVhcicpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodGhpcy5fZ2FpbiwgdGltZSArIGZhZGVJblRpbWUpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5leHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUodGhpcy5fZ2FpbiwgdGltZSwgZmFkZUluVGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKGdhaW4sIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSB0aW1lO1xuXHQgICAgICAgIHZhciBjb21wdXRlZER1ciA9IHRoaXMudG9TZWNvbmRzKFRvbmUuZGVmYXVsdEFyZyhkdXJhdGlvbiwgdGhpcy5idWZmZXIuZHVyYXRpb24gLSBvZmZzZXQgJSB0aGlzLmJ1ZmZlci5kdXJhdGlvbikpO1xuXHQgICAgICAgIGNvbXB1dGVkRHVyID0gTWF0aC5tYXgoY29tcHV0ZWREdXIsIDApO1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChkdXJhdGlvbikpIHtcblx0ICAgICAgICAgICAgLy9jbGlwIHRoZSBkdXJhdGlvbiB3aGVuIG5vdCBsb29waW5nXG5cdCAgICAgICAgICAgIGlmICghdGhpcy5sb29wKSB7XG5cdCAgICAgICAgICAgICAgICBjb21wdXRlZER1ciA9IE1hdGgubWluKGNvbXB1dGVkRHVyLCB0aGlzLmJ1ZmZlci5kdXJhdGlvbiAtIG9mZnNldCAlIHRoaXMuYnVmZmVyLmR1cmF0aW9uKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnN0b3AodGltZSArIGNvbXB1dGVkRHVyLCB0aGlzLmZhZGVPdXQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3N0YXJ0IHRoZSBidWZmZXIgc291cmNlXG5cdCAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICAvL21vZGlmeSB0aGUgb2Zmc2V0IGlmIGl0J3MgZ3JlYXRlciB0aGFuIHRoZSBsb29wIHRpbWVcblx0ICAgICAgICAgICAgdmFyIGxvb3BFbmQgPSB0aGlzLmxvb3BFbmQgfHwgdGhpcy5idWZmZXIuZHVyYXRpb247XG5cdCAgICAgICAgICAgIHZhciBsb29wU3RhcnQgPSB0aGlzLmxvb3BTdGFydDtcblx0ICAgICAgICAgICAgdmFyIGxvb3BEdXJhdGlvbiA9IGxvb3BFbmQgLSBsb29wU3RhcnQ7XG5cdCAgICAgICAgICAgIC8vbW92ZSB0aGUgb2Zmc2V0IGJhY2tcblx0ICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBsb29wRW5kKSB7XG5cdCAgICAgICAgICAgICAgICBvZmZzZXQgPSAob2Zmc2V0IC0gbG9vcFN0YXJ0KSAlIGxvb3BEdXJhdGlvbiArIGxvb3BTdGFydDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zb3VyY2UuYnVmZmVyID0gdGhpcy5idWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLmxvb3BFbmQgPSB0aGlzLmxvb3BFbmQgfHwgdGhpcy5idWZmZXIuZHVyYXRpb247XG5cdCAgICAgICAgaWYgKG9mZnNldCA8IHRoaXMuYnVmZmVyLmR1cmF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN0YXJ0ZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2Uuc3RhcnQodGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIGJ1ZmZlci4gT3B0aW9uYWxseSBhZGQgYSByYW1wIHRpbWUgdG8gZmFkZSB0aGVcblx0XHQgKiAgYnVmZmVyIG91dC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICB0aW1lICAgICAgICAgVGhlIHRpbWUgdGhlIGJ1ZmZlciBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICBmYWRlT3V0VGltZSAgSG93IGxvbmcgdGhlIGdhaW4gc2hvdWxkIGZhZGUgb3V0IGZvclxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJTb3VyY2V9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lLCBmYWRlT3V0VGltZSkge1xuXHQgICAgICAgIGlmICghdGhpcy5idWZmZXIubG9hZGVkKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5CdWZmZXJTb3VyY2U6IGJ1ZmZlciBpcyBlaXRoZXIgbm90IHNldCBvciBub3QgbG9hZGVkLicpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5fc291cmNlU3RvcHBlZCkge1xuXHQgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL2lmIHRoZSBldmVudCBoYXMgYWxyZWFkeSBiZWVuIHNjaGVkdWxlZCwgY2xlYXIgaXRcblx0ICAgICAgICBpZiAodGhpcy5fc3RvcFRpbWUgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2FuY2VsU3RvcCgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3N0b3AgaWYgaXQncyBzY2hlZHVsZSBiZWZvcmUgdGhlIHN0YXJ0IHRpbWVcblx0ICAgICAgICBpZiAodGltZSA8PSB0aGlzLl9zdGFydFRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4udmFsdWUgPSAwO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IE1hdGgubWF4KHRoaXMuX3N0YXJ0VGltZSArIHRoaXMuZmFkZUluICsgdGhpcy5zYW1wbGVUaW1lLCB0aW1lKTtcblx0ICAgICAgICAvL2NhbmNlbCB0aGUgcHJldmlvdXMgY3VydmVcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdG9wVGltZSA9IHRpbWU7XG5cdCAgICAgICAgLy90aGUgZmFkZU91dCB0aW1lXG5cdCAgICAgICAgZmFkZU91dFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhUb25lLmRlZmF1bHRBcmcoZmFkZU91dFRpbWUsIHRoaXMuZmFkZU91dCkpO1xuXHQgICAgICAgIHZhciBoZWxkRHVyYXRpb24gPSB0aW1lIC0gdGhpcy5fc3RhcnRUaW1lIC0gdGhpcy5mYWRlSW4gLSB0aGlzLnNhbXBsZVRpbWU7XG5cdCAgICAgICAgaWYgKCF0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgLy9tYWtlIHN1cmUgdGhlIGZhZGUgZG9lcyBub3QgZ28gYmV5b25kIHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlclxuXHQgICAgICAgICAgICBoZWxkRHVyYXRpb24gPSBNYXRoLm1pbihoZWxkRHVyYXRpb24sIHRoaXMuYnVmZmVyLmR1cmF0aW9uKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZmFkZU91dFRpbWUgPSBNYXRoLm1pbihoZWxkRHVyYXRpb24sIGZhZGVPdXRUaW1lKTtcblx0ICAgICAgICB2YXIgc3RhcnRGYWRlID0gdGltZSAtIGZhZGVPdXRUaW1lO1xuXHQgICAgICAgIGlmIChmYWRlT3V0VGltZSA+IHRoaXMuc2FtcGxlVGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKHRoaXMuX2dhaW4sIHN0YXJ0RmFkZSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmN1cnZlID09PSAnbGluZWFyJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lKDAsIHN0YXJ0RmFkZSwgZmFkZU91dFRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVG9uZS5jb250ZXh0LmNsZWFyVGltZW91dCh0aGlzLl9vbmVuZGVkVGltZW91dCk7XG5cdCAgICAgICAgdGhpcy5fb25lbmRlZFRpbWVvdXQgPSBUb25lLmNvbnRleHQuc2V0VGltZW91dCh0aGlzLl9vbmVuZGVkLmJpbmQodGhpcyksIHRoaXMuX3N0b3BUaW1lIC0gdGhpcy5ub3coKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBhIHNjaGVkdWxlZCBzdG9wIGV2ZW50XG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkJ1ZmZlclNvdXJjZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZS5jYW5jZWxTdG9wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgIT09IC0xICYmICF0aGlzLl9zb3VyY2VTdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIC8vY2FuY2VsIHRoZSBzdG9wIGVudmVsb3BlXG5cdCAgICAgICAgICAgIHZhciBmYWRlSW5UaW1lID0gdGhpcy50b1NlY29uZHModGhpcy5mYWRlSW4pO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aGlzLl9zdGFydFRpbWUgKyBmYWRlSW5UaW1lICsgdGhpcy5zYW1wbGVUaW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgxLCBNYXRoLm1heCh0aGlzLm5vdygpLCB0aGlzLl9zdGFydFRpbWUgKyBmYWRlSW5UaW1lICsgdGhpcy5zYW1wbGVUaW1lKSk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fb25lbmRlZFRpbWVvdXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wVGltZSA9IC0xO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgY2FsbGJhY2sgd2hlbiB0aGUgYnVmZmVyIGlzIGVuZGVkLlxuXHRcdCAqICBJbnZva2VzIGBvbmVuZGVkYCBhbmQgZGlzcG9zZXMgdGhlIG5vZGUuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuX29uZW5kZWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2VTdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN0b3BwZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICAvL2FsbG93IGFkZGl0aW9uYWwgdGltZSBmb3IgdGhlIGV4cG9uZW50aWFsIGN1cnZlIHRvIGZ1bGx5IGRlY2F5XG5cdCAgICAgICAgICAgIHZhciBhZGRpdGlvbmFsVGFpbCA9IHRoaXMuY3VydmUgPT09ICdleHBvbmVudGlhbCcgPyB0aGlzLmZhZGVPdXQgKiAyIDogMDtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVN0YXJ0ZWQgJiYgdGhpcy5fc3RvcFRpbWUgIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2Uuc3RvcCh0aGlzLl9zdG9wVGltZSArIGFkZGl0aW9uYWxUYWlsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLm9uZW5kZWQodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGxvb3AgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBzdGFydCBhdCB0aGlzIHBvc2l0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlclNvdXJjZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wU3RhcnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUsICdsb29wU3RhcnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2UubG9vcFN0YXJ0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcFN0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5sb29wU3RhcnQgPSB0aGlzLnRvU2Vjb25kcyhsb29wU3RhcnQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogSWYgbG9vcCBpcyB0cnVlLCB0aGUgbG9vcCB3aWxsIGVuZCBhdCB0aGlzIHBvc2l0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlclNvdXJjZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS5sb29wRW5kO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcEVuZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UubG9vcEVuZCA9IHRoaXMudG9TZWNvbmRzKGxvb3BFbmQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGF1ZGlvIGJ1ZmZlciBiZWxvbmdpbmcgdG8gdGhlIHBsYXllci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJTb3VyY2UjXG5cdFx0ICogQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdCAqIEBuYW1lIGJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIuc2V0KGJ1ZmZlcik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBJZiB0aGUgYnVmZmVyIHNob3VsZCBsb29wIG9uY2UgaXQncyBvdmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlclNvdXJjZSNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb29wXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLCAnbG9vcCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS5sb29wO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UubG9vcCA9IGxvb3A7XG5cdCAgICAgICAgICAgIHRoaXMuY2FuY2VsU3RvcCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJTb3VyY2V9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMub25lbmRlZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLm9uZW5kZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fc291cmNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSAtMTtcblx0ICAgICAgICB0aGlzLnBsYXliYWNrUmF0ZSA9IG51bGw7XG5cdCAgICAgICAgVG9uZS5jb250ZXh0LmNsZWFyVGltZW91dCh0aGlzLl9vbmVuZGVkVGltZW91dCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQnVmZmVyU291cmNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuTm9pc2UgaXMgYSBub2lzZSBnZW5lcmF0b3IuIEl0IHVzZXMgbG9vcGVkIG5vaXNlIGJ1ZmZlcnMgdG8gc2F2ZSBvbiBwZXJmb3JtYW5jZS5cblx0XHQgKiAgICAgICAgICBUb25lLk5vaXNlIHN1cHBvcnRzIHRoZSBub2lzZSB0eXBlczogXCJwaW5rXCIsIFwid2hpdGVcIiwgYW5kIFwiYnJvd25cIi4gUmVhZCBtb3JlIGFib3V0XG5cdFx0ICogICAgICAgICAgY29sb3JzIG9mIG5vaXNlIG9uIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbG9yc19vZl9ub2lzZSkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd9IHR5cGUgdGhlIG5vaXNlIHR5cGUgKHdoaXRlfHBpbmt8YnJvd24pXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9pbml0aWFsaXplIHRoZSBub2lzZSBhbmQgc3RhcnRcblx0XHQgKiB2YXIgbm9pc2UgPSBuZXcgVG9uZS5Ob2lzZShcInBpbmtcIikuc3RhcnQoKTtcblx0XHQgKlxuXHRcdCAqIC8vbWFrZSBhbiBhdXRvZmlsdGVyIHRvIHNoYXBlIHRoZSBub2lzZVxuXHRcdCAqIHZhciBhdXRvRmlsdGVyID0gbmV3IFRvbmUuQXV0b0ZpbHRlcih7XG5cdFx0ICogXHRcImZyZXF1ZW5jeVwiIDogXCI4bVwiLFxuXHRcdCAqIFx0XCJtaW5cIiA6IDgwMCxcblx0XHQgKiBcdFwibWF4XCIgOiAxNTAwMFxuXHRcdCAqIH0pLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHRcdCAqXG5cdFx0ICogLy9jb25uZWN0IHRoZSBub2lzZVxuXHRcdCAqIG5vaXNlLmNvbm5lY3QoYXV0b0ZpbHRlcik7XG5cdFx0ICogLy9zdGFydCB0aGUgYXV0b2ZpbHRlciBMRk9cblx0XHQgKiBhdXRvRmlsdGVyLnN0YXJ0KClcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd0eXBlJ10sIFRvbmUuTm9pc2UpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9CdWZmZXJTb3VyY2VOb2RlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYnVmZmVyXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9CdWZmZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBub2lzZS4gQWZmZWN0c1xuXHRcdFx0ICogIHRoZSBcImZyZXF1ZW5jeVwiIG9mIHRoZSBub2lzZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Ob2lzZSwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndHlwZSc6ICd3aGl0ZScsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgbm9pc2UuIENhbiBiZSBcIndoaXRlXCIsIFwiYnJvd25cIiwgb3IgXCJwaW5rXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTm9pc2UjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBub2lzZS50eXBlID0gXCJ3aGl0ZVwiO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTm9pc2UucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlICE9PSB0eXBlKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodHlwZSBpbiBfbm9pc2VCdWZmZXJzKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9pZiBpdCdzIHBsYXlpbmcsIHN0b3AgYW5kIHJlc3RhcnQgaXRcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9wKG5vdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KG5vdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUb25lLk5vaXNlOiBpbnZhbGlkIHR5cGU6ICcgKyB0eXBlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBub2lzZS4gQWZmZWN0c1xuXHRcdCAqICB0aGUgXCJmcmVxdWVuY3lcIiBvZiB0aGUgbm9pc2UuXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQHNpZ25hbFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTm9pc2UucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2UucGxheWJhY2tSYXRlLnZhbHVlID0gcmF0ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGludGVybmFsIHN0YXJ0IG1ldGhvZFxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZS5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgYnVmZmVyID0gX25vaXNlQnVmZmVyc1t0aGlzLl90eXBlXTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UgPSBuZXcgVG9uZS5CdWZmZXJTb3VyY2UoYnVmZmVyKS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UubG9vcCA9IHRydWU7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLnBsYXliYWNrUmF0ZS52YWx1ZSA9IHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2Uuc3RhcnQodGhpcy50b1NlY29uZHModGltZSksIE1hdGgucmFuZG9tKCkgKiAoYnVmZmVyLmR1cmF0aW9uIC0gMC4wMDEpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgaW50ZXJuYWwgc3RvcCBtZXRob2Rcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc291cmNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5zdG9wKHRoaXMudG9TZWNvbmRzKHRpbWUpKTtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVzdGFydHMgdGhlIG5vaXNlLlxuXHRcdCAqIEBwYXJhbSAge1t0eXBlXX0gdGltZSBbZGVzY3JpcHRpb25dXG5cdFx0ICogQHJldHVybiB7W3R5cGVdfSAgICAgIFtkZXNjcmlwdGlvbl1cblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vVE9ETyBjb3VsZCBiZSBvcHRpbWl6ZWQgYnkgY2FuY2VsbGluZyB0aGUgYnVmZmVyIHNvdXJjZSAnc3RvcCdcblx0ICAgICAgICAvL3N0b3AgYW5kIHJlc3RhcnRcblx0ICAgICAgICB0aGlzLl9zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9pc2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBpZiAodGhpcy5fc291cmNlICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBUSEUgQlVGRkVSU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL05vaXNlIGJ1ZmZlciBzdGF0c1xuXHQgICAgdmFyIGJ1ZmZlckxlbmd0aCA9IDQ0MTAwICogNTtcblx0ICAgIHZhciBjaGFubmVscyA9IDI7XG5cdCAgICAvKipcblx0XHQgKlx0VGhlIG5vaXNlIGFycmF5cy4gR2VuZXJhdGVkIG9uIGluaXRpYWxpemF0aW9uLlxuXHRcdCAqICBib3Jyb3dlZCBoZWF2aWx5IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3phY2hhcnlkZW50b24vbm9pc2UuanNcblx0XHQgKiAgKGMpIDIwMTMgWmFjaCBEZW50b24gKE1JVClcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgX25vaXNlQXJyYXlzID0ge1xuXHQgICAgICAgICdwaW5rJzogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNoYW5uZWxOdW0gPSAwOyBjaGFubmVsTnVtIDwgY2hhbm5lbHM7IGNoYW5uZWxOdW0rKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckxlbmd0aCk7XG5cdCAgICAgICAgICAgICAgICBidWZmZXJbY2hhbm5lbE51bV0gPSBjaGFubmVsO1xuXHQgICAgICAgICAgICAgICAgdmFyIGIwLCBiMSwgYjIsIGIzLCBiNCwgYjUsIGI2O1xuXHQgICAgICAgICAgICAgICAgYjAgPSBiMSA9IGIyID0gYjMgPSBiNCA9IGI1ID0gYjYgPSAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB3aGl0ZSA9IE1hdGgucmFuZG9tKCkgKiAyIC0gMTtcblx0ICAgICAgICAgICAgICAgICAgICBiMCA9IDAuOTk4ODYgKiBiMCArIHdoaXRlICogMC4wNTU1MTc5O1xuXHQgICAgICAgICAgICAgICAgICAgIGIxID0gMC45OTMzMiAqIGIxICsgd2hpdGUgKiAwLjA3NTA3NTk7XG5cdCAgICAgICAgICAgICAgICAgICAgYjIgPSAwLjk2OSAqIGIyICsgd2hpdGUgKiAwLjE1Mzg1Mjtcblx0ICAgICAgICAgICAgICAgICAgICBiMyA9IDAuODY2NSAqIGIzICsgd2hpdGUgKiAwLjMxMDQ4NTY7XG5cdCAgICAgICAgICAgICAgICAgICAgYjQgPSAwLjU1ICogYjQgKyB3aGl0ZSAqIDAuNTMyOTUyMjtcblx0ICAgICAgICAgICAgICAgICAgICBiNSA9IC0wLjc2MTYgKiBiNSAtIHdoaXRlICogMC4wMTY4OTg7XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpXSA9IGIwICsgYjEgKyBiMiArIGIzICsgYjQgKyBiNSArIGI2ICsgd2hpdGUgKiAwLjUzNjI7XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpXSAqPSAwLjExO1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIChyb3VnaGx5KSBjb21wZW5zYXRlIGZvciBnYWluXG5cdCAgICAgICAgICAgICAgICAgICAgYjYgPSB3aGl0ZSAqIDAuMTE1OTI2O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG5cdCAgICAgICAgfSgpLFxuXHQgICAgICAgICdicm93bic6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjaGFubmVsTnVtID0gMDsgY2hhbm5lbE51bSA8IGNoYW5uZWxzOyBjaGFubmVsTnVtKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJMZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyW2NoYW5uZWxOdW1dID0gY2hhbm5lbDtcblx0ICAgICAgICAgICAgICAgIHZhciBsYXN0T3V0ID0gMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgd2hpdGUgPSBNYXRoLnJhbmRvbSgpICogMiAtIDE7XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpXSA9IChsYXN0T3V0ICsgMC4wMiAqIHdoaXRlKSAvIDEuMDI7XG5cdCAgICAgICAgICAgICAgICAgICAgbGFzdE91dCA9IGNoYW5uZWxbaV07XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpXSAqPSAzLjU7ICAgIC8vIChyb3VnaGx5KSBjb21wZW5zYXRlIGZvciBnYWluXG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcblx0ICAgICAgICB9KCksXG5cdCAgICAgICAgJ3doaXRlJzogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNoYW5uZWxOdW0gPSAwOyBjaGFubmVsTnVtIDwgY2hhbm5lbHM7IGNoYW5uZWxOdW0rKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckxlbmd0aCk7XG5cdCAgICAgICAgICAgICAgICBidWZmZXJbY2hhbm5lbE51bV0gPSBjaGFubmVsO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gPSBNYXRoLnJhbmRvbSgpICogMiAtIDE7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcblx0ICAgICAgICB9KClcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKlx0c3RhdGljIG5vaXNlIGJ1ZmZlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAdHlwZSB7VG9uZS5CdWZmZXJ9XG5cdFx0ICovXG5cdCAgICB2YXIgX25vaXNlQnVmZmVycyA9IHt9O1xuXHQgICAgLy9jcmVhdGUgdGhlIFRvbmUuQnVmZmVyc1xuXHQgICAgZnVuY3Rpb24gY3JlYXRlQnVmZmVycygpIHtcblx0ICAgICAgICBmb3IgKHZhciB0eXBlIGluIF9ub2lzZUFycmF5cykge1xuXHQgICAgICAgICAgICBfbm9pc2VCdWZmZXJzW3R5cGVdID0gbmV3IFRvbmUuQnVmZmVyKCkuZnJvbUFycmF5KF9ub2lzZUFycmF5c1t0eXBlXSk7XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHQgICAgLy9jcmVhdGUgdGhlIG5vaXNlIGJ1ZmZlcnNcblx0ICAgIFRvbmUuZ2V0Q29udGV4dChjcmVhdGVCdWZmZXJzKTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIGNyZWF0ZUJ1ZmZlcnMpO1xuXHQgICAgcmV0dXJuIFRvbmUuTm9pc2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBTaW1wbGUgY29udm9sdXRpb24gY3JlYXRlZCB3aXRoIGRlY2F5aW5nIG5vaXNlLlxuXHRcdCAqICBcdFx0R2VuZXJhdGVzIGFuIEltcHVsc2UgUmVzcG9uc2UgQnVmZmVyXG5cdFx0ICogXHRcdFx0d2l0aCBUb25lLk9mZmxpbmUgdGhlbiBmZWVkcyB0aGUgSVIgaW50byBDb252b2x2ZXJOb2RlLlxuXHRcdCAqIFx0XHRcdE5vdGU6IHRoZSBSZXZlcmIgd2lsbCBub3QgbWFrZSBhbnkgc291bmQgdW50aWwgW2dlbmVyYXRlXSgjZ2VuZXJhdGUpXG5cdFx0ICogXHRcdFx0aGFzIGJlZW4gaW52b2tlZCBhbmQgcmVzb2x2ZWQuXG5cdFx0ICpcblx0XHQgKiBcdFx0XHRJbnNwaXJhdGlvbiBmcm9tIFtSZXZlcmJHZW5dKGh0dHBzOi8vZ2l0aHViLmNvbS9hZGVsZXNwaW5hc3NlL3JldmVyYkdlbikuXG5cdFx0ICogXHRcdFx0Q29weXJpZ2h0IChjKSAyMDE0IEFsYW4gZGVMZXNwaW5hc3NlIEFwYWNoZSAyLjAgTGljZW5zZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Db252b2x2ZXJ9XG5cdFx0ICogIEBwYXJhbSB7VGltZT19IGRlY2F5IFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHJldmVyYmVyYXRlIGZvci5cblx0XHQgKi9cblx0ICAgIFRvbmUuUmV2ZXJiID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZGVjYXknXSwgVG9uZS5SZXZlcmIpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQ29udm9sdmVyIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7Q29udm9sdmVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29udm9sdmVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUNvbnZvbHZlcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGR1cmF0aW9uIG9mIHRoZSByZXZlcmJcblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWNheSA9IG9wdGlvbnMuZGVjYXk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgYW1vdW50IG9mIHRpbWUgYmVmb3JlIHRoZSByZXZlcmIgaXMgZnVsbHlcblx0XHRcdCAqIHJhbXBlZCBpbi5cblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5wcmVEZWxheSA9IG9wdGlvbnMucHJlRGVsYXk7XG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuX2NvbnZvbHZlcik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5SZXZlcmIsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWZhdWx0c1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5SZXZlcmIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2RlY2F5JzogMS41LFxuXHQgICAgICAgICdwcmVEZWxheSc6IDAuMDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHZW5lcmF0ZSB0aGUgSW1wdWxzZSBSZXNwb25zZS4gUmV0dXJucyBhIHByb21pc2Ugd2hpbGUgdGhlIElSIGlzIGJlaW5nXG5cdFx0ICogZ2VuZXJhdGVkLlxuXHRcdCAqIEByZXR1cm4ge1Byb21pc2U8VG9uZS5SZXZlcmI+fSBQcm9taXNlIHdoaWNoIHJldHVybnMgdGhpcyBvYmplY3QuXG5cdFx0ICovXG5cdCAgICBUb25lLlJldmVyYi5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuT2ZmbGluZShmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vY3JlYXRlIGEgbm9pc2UgYnVyc3Qgd2hpY2ggZGVjYXlzIG92ZXIgdGhlIGR1cmF0aW9uXG5cdCAgICAgICAgICAgIHZhciBub2lzZUwgPSBuZXcgVG9uZS5Ob2lzZSgpO1xuXHQgICAgICAgICAgICB2YXIgbm9pc2VSID0gbmV3IFRvbmUuTm9pc2UoKTtcblx0ICAgICAgICAgICAgdmFyIG1lcmdlID0gbmV3IFRvbmUuTWVyZ2UoKTtcblx0ICAgICAgICAgICAgbm9pc2VMLmNvbm5lY3QobWVyZ2UubGVmdCk7XG5cdCAgICAgICAgICAgIG5vaXNlUi5jb25uZWN0KG1lcmdlLnJpZ2h0KTtcblx0ICAgICAgICAgICAgdmFyIGdhaW5Ob2RlID0gbmV3IFRvbmUuR2FpbigpLnRvTWFzdGVyKCk7XG5cdCAgICAgICAgICAgIG1lcmdlLmNvbm5lY3QoZ2Fpbk5vZGUpO1xuXHQgICAgICAgICAgICBub2lzZUwuc3RhcnQoMCk7XG5cdCAgICAgICAgICAgIG5vaXNlUi5zdGFydCgwKTtcblx0ICAgICAgICAgICAgLy9zaG9ydCBmYWRlIGluXG5cdCAgICAgICAgICAgIGdhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgMCk7XG5cdCAgICAgICAgICAgIGdhaW5Ob2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoMSwgdGhpcy5wcmVEZWxheSk7XG5cdCAgICAgICAgICAgIC8vZGVjYXlcblx0ICAgICAgICAgICAgZ2Fpbk5vZGUuZ2Fpbi5leHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUoMCwgdGhpcy5wcmVEZWxheSwgdGhpcy5kZWNheSAtIHRoaXMucHJlRGVsYXkpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5kZWNheSkudGhlbihmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnZvbHZlci5idWZmZXIgPSBidWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5SZXZlcmJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlJldmVyYi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fY29udm9sdmVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5SZXZlcmI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBCYXNlIGNsYXNzIGZvciBzdGVyZW8gZmVlZGJhY2sgZWZmZWN0cyB3aGVyZSB0aGUgZWZmZWN0UmV0dXJuXG5cdFx0ICogICAgICAgICBpcyBmZWQgYmFjayBpbnRvIHRoZSBzYW1lIGNoYW5uZWwuXG5cdFx0ICpcblx0XHQgKlx0QGNvbnN0cnVjdG9yXG5cdFx0ICpcdEBleHRlbmRzIHtUb25lLlN0ZXJlb0VmZmVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvRmVlZGJhY2tFZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydmZWVkYmFjayddLCBUb25lLkZlZWRiYWNrRWZmZWN0KTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbnRyb2xzIHRoZSBhbW91bnQgb2YgZmVlZGJhY2tcblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mZWVkYmFjayA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZlZWRiYWNrLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZWZ0IHNpZGUgZmVlYmFja1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcmlnaHQgc2lkZSBmZWViYWNrXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuTC5jaGFpbih0aGlzLl9mZWVkYmFja0wsIHRoaXMuZWZmZWN0U2VuZEwpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuUi5jaGFpbih0aGlzLl9mZWVkYmFja1IsIHRoaXMuZWZmZWN0U2VuZFIpO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2suZmFuKHRoaXMuX2ZlZWRiYWNrTC5nYWluLCB0aGlzLl9mZWVkYmFja1IuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydmZWVkYmFjayddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0LCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3RlcmVvRmVlZGJhY2tFZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrUiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3RlcmVvRmVlZGJhY2tFZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBcHBsaWVzIGEgd2lkdGggZmFjdG9yIHRvIHRoZSBtaWQvc2lkZSBzZXBlcmF0aW9uLlxuXHRcdCAqICAgICAgICAgMCBpcyBhbGwgbWlkIGFuZCAxIGlzIGFsbCBzaWRlLlxuXHRcdCAqICAgICAgICAgQWxnb3JpdGhtIGZvdW5kIGluIFtrdnJhdWRpbyBmb3J1bXNdKGh0dHA6Ly93d3cua3ZyYXVkaW8uY29tL2ZvcnVtL3ZpZXd0b3BpYy5waHA/dD0yMTI1ODcpLlxuXHRcdCAqICAgICAgICAgPGJyPjxicj5cblx0XHQgKiAgICAgICAgIDxjb2RlPlxuXHRcdCAqICAgICAgICAgTWlkICo9IDIqKDEtd2lkdGgpPGJyPlxuXHRcdCAqICAgICAgICAgU2lkZSAqPSAyKndpZHRoXG5cdFx0ICogICAgICAgICA8L2NvZGU+XG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTWlkU2lkZUVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V8T2JqZWN0fSBbd2lkdGhdIFRoZSBzdGVyZW8gd2lkdGguIEEgd2lkdGggb2YgMCBpcyBtb25vIGFuZCAxIGlzIHN0ZXJlby4gMC41IGlzIG5vIGNoYW5nZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvV2lkZW5lciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3dpZHRoJ10sIFRvbmUuU3RlcmVvV2lkZW5lcik7XG5cdCAgICAgICAgVG9uZS5NaWRTaWRlRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHdpZHRoIGNvbnRyb2wuIDAgPSAxMDAlIG1pZC4gMSA9IDEwMCUgc2lkZS4gMC41ID0gbm8gY2hhbmdlLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLndpZHRoID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMud2lkdGgsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWyd3aWR0aCddKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFR3byB0aW1lcyB0aGUgKDEtd2lkdGgpIGZvciB0aGUgbWlkIGNoYW5uZWxcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQgPSBuZXcgVG9uZS5NdWx0aXBseSgyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFR3byB0aW1lcyB0aGUgd2lkdGggZm9yIHRoZSBzaWRlIGNoYW5uZWxcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhTaWRlID0gbmV3IFRvbmUuTXVsdGlwbHkoMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgTWlkIG11bHRpcGxpZXJcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkTXVsdCA9IG5ldyBUb25lLk11bHRpcGx5KCk7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aE1pZC5jb25uZWN0KHRoaXMuX21pZE11bHQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMubWlkU2VuZC5jaGFpbih0aGlzLl9taWRNdWx0LCB0aGlzLm1pZFJldHVybik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAxIC0gd2lkdGhcblx0XHRcdCAqIEB0eXBlIHtUb25lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb25lTWludXNXaWR0aCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgdGhpcy5fb25lTWludXNXaWR0aC5jb25uZWN0KHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5nZXRDb25zdGFudCgxKS5jb25uZWN0KHRoaXMuX29uZU1pbnVzV2lkdGgsIDAsIDApO1xuXHQgICAgICAgIHRoaXMud2lkdGguY29ubmVjdCh0aGlzLl9vbmVNaW51c1dpZHRoLCAwLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTaWRlIG11bHRpcGxpZXJcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2lkZU11bHQgPSBuZXcgVG9uZS5NdWx0aXBseSgpO1xuXHQgICAgICAgIHRoaXMud2lkdGguY29ubmVjdCh0aGlzLl90d29UaW1lc1dpZHRoU2lkZSk7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aFNpZGUuY29ubmVjdCh0aGlzLl9zaWRlTXVsdCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5zaWRlU2VuZC5jaGFpbih0aGlzLl9zaWRlTXVsdCwgdGhpcy5zaWRlUmV0dXJuKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlN0ZXJlb1dpZGVuZXIsIFRvbmUuTWlkU2lkZUVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvV2lkZW5lci5kZWZhdWx0cyA9IHsgJ3dpZHRoJzogMC41IH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN0ZXJlb1dpZGVuZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvV2lkZW5lci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1pZFNpZGVFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ3dpZHRoJ10pO1xuXHQgICAgICAgIHRoaXMud2lkdGguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMud2lkdGggPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21pZE11bHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZE11bHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NpZGVNdWx0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaWRlTXVsdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aE1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aE1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aFNpZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhTaWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vbmVNaW51c1dpZHRoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9vbmVNaW51c1dpZHRoID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TdGVyZW9XaWRlbmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UcmVtb2xvIG1vZHVsYXRlcyB0aGUgYW1wbGl0dWRlIG9mIGFuIGluY29taW5nIHNpZ25hbCB1c2luZyBhIFRvbmUuTEZPLlxuXHRcdCAqICAgICAgICAgVGhlIHR5cGUsIGZyZXF1ZW5jeSwgYW5kIGRlcHRoIG9mIHRoZSBMRk8gaXMgY29udHJvbGxhYmxlLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlN0ZXJlb0VmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbZnJlcXVlbmN5XSBUaGUgcmF0ZSBvZiB0aGUgZWZmZWN0LlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbZGVwdGhdIFRoZSBkZXB0aCBvZiB0aGUgZWZmZWN0LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY3JlYXRlIGEgdHJlbW9sbyBhbmQgc3RhcnQgaXQncyBMRk9cblx0XHQgKiB2YXIgdHJlbW9sbyA9IG5ldyBUb25lLlRyZW1vbG8oOSwgMC43NSkudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqIC8vcm91dGUgYW4gb3NjaWxsYXRvciB0aHJvdWdoIHRoZSB0cmVtb2xvIGFuZCBzdGFydCBpdFxuXHRcdCAqIHZhciBvc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QodHJlbW9sbykuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSwgVG9uZS5UcmVtb2xvKTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0cmVtZWxvIExGTyBpbiB0aGUgbGVmdCBjaGFubmVsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdwaGFzZSc6IG9wdGlvbnMuc3ByZWFkLFxuXHQgICAgICAgICAgICAnbWluJzogMSxcblx0ICAgICAgICAgICAgJ21heCc6IDBcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdHJlbWVsbyBMRk8gaW4gdGhlIGxlZnQgY2hhbm5lbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb1IgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAncGhhc2UnOiBvcHRpb25zLnNwcmVhZCxcblx0ICAgICAgICAgICAgJ21pbic6IDEsXG5cdCAgICAgICAgICAgICdtYXgnOiAwXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgV2hlcmUgdGhlIGdhaW4gaXMgbXVsdGlwbGllZFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVMID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZXJlIHRoZSBnYWluIGlzIG11bHRpcGxpZWRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlUiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG9mIHRoZSB0cmVtb2xvLlxuXHRcdFx0ICogIEB0eXBlICB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVwdGggb2YgdGhlIGVmZmVjdC4gQSBkZXB0aCBvZiAwLCBoYXMgbm8gZWZmZWN0XG5cdFx0XHQgKiAgb24gdGhlIGFtcGxpdHVkZSwgYW5kIGEgZGVwdGggb2YgMSBtYWtlcyB0aGUgYW1wbGl0dWRlXG5cdFx0XHQgKiAgbW9kdWxhdGUgZnVsbHkgYmV0d2VlbiAwIGFuZCAxLlxuXHRcdFx0ICogIEB0eXBlICB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRlcHRoLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNoYWluKHRoaXMuX2FtcGxpdHVkZUwsIHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jaGFpbih0aGlzLl9hbXBsaXR1ZGVSLCB0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgIHRoaXMuX2xmb0wuY29ubmVjdCh0aGlzLl9hbXBsaXR1ZGVMLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX2xmb1IuY29ubmVjdCh0aGlzLl9hbXBsaXR1ZGVSLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmZhbih0aGlzLl9sZm9MLmZyZXF1ZW5jeSwgdGhpcy5fbGZvUi5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZGVwdGguZmFuKHRoaXMuX2xmb1IuYW1wbGl0dWRlLCB0aGlzLl9sZm9MLmFtcGxpdHVkZSk7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMuc3ByZWFkID0gb3B0aW9ucy5zcHJlYWQ7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmVtb2xvLCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMTAsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ2RlcHRoJzogMC41LFxuXHQgICAgICAgICdzcHJlYWQnOiAxODBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdGFydCB0aGUgdHJlbW9sby5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgdHJlbW9sbyBiZWdpbnMuXG5cdFx0ICogQHJldHVybnMge1RvbmUuVHJlbW9sb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5zdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0b3AgdGhlIHRyZW1vbG8uXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHRyZW1vbG8gc3RvcHMuXG5cdFx0ICogQHJldHVybnMge1RvbmUuVHJlbW9sb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9sZm9MLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGVmZmVjdCB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW2RlbGF5PTBdIERlbGF5IHRpbWUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBlZmZlY3QgYWZ0ZXIgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc3BvcnQgaGFzIHN0YXJ0ZWQuXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b0ZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKGRlbGF5KSB7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5zeW5jKGRlbGF5KTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnN5bmMoZGVsYXkpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0LnN5bmNTaWduYWwodGhpcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFVuc3luYyB0aGUgZmlsdGVyIGZyb20gdGhlIHRyYW5zcG9ydFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLlRyZW1vbG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2xmb0wudW5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi51bnN5bmMoKTtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC51bnN5bmNTaWduYWwodGhpcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBUcmVtb2xvJ3Mgb3NjaWxsYXRvciB0eXBlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlRyZW1vbG8jXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmVtb2xvLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm9MLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBBbW91bnQgb2Ygc3RlcmVvIHNwcmVhZC4gV2hlbiBzZXQgdG8gMCwgYm90aCBMRk8ncyB3aWxsIGJlIHBhbm5lZCBjZW50cmFsbHkuXG5cdFx0ICogV2hlbiBzZXQgdG8gMTgwLCBMRk8ncyB3aWxsIGJlIHBhbm5lZCBoYXJkIGxlZnQgYW5kIHJpZ2h0IHJlc3BlY3RpdmVseS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5UcmVtb2xvI1xuXHRcdCAqIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqIEBuYW1lIHNwcmVhZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJlbW9sby5wcm90b3R5cGUsICdzcHJlYWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm9SLnBoYXNlIC0gdGhpcy5fbGZvTC5waGFzZTsgICAgLy8xODBcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNwcmVhZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLnBoYXNlID0gOTAgLSBzcHJlYWQgLyAyO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLnBoYXNlID0gc3ByZWFkIC8gMiArIDkwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyZW1vbG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9sZm9MLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9MID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9SLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9SID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVMLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVMID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVSLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVSID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVHJlbW9sbztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgVmlicmF0byBlZmZlY3QgY29tcG9zZWQgb2YgYSBUb25lLkRlbGF5IGFuZCBhIFRvbmUuTEZPLiBUaGUgTEZPXG5cdFx0ICogICAgICAgICBtb2R1bGF0ZXMgdGhlIGRlbGF5VGltZSBvZiB0aGUgZGVsYXksIGNhdXNpbmcgdGhlIHBpdGNoIHRvIHJpc2Vcblx0XHQgKiAgICAgICAgIGFuZCBmYWxsLiBcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSBmcmVxdWVuY3kgb2YgdGhlIHZpYnJhdG8uXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IGRlcHRoIFRoZSBhbW91bnQgdGhlIHBpdGNoIGlzIG1vZHVsYXRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuVmlicmF0byA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSwgVG9uZS5WaWJyYXRvKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZWxheSBub2RlIHVzZWQgZm9yIHRoZSB2aWJyYXRvIGVmZmVjdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSBuZXcgVG9uZS5EZWxheSgwLCBvcHRpb25zLm1heERlbGF5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgTEZPIHVzZWQgdG8gY29udHJvbCB0aGUgdmlicmF0b1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBvcHRpb25zLnR5cGUsXG5cdCAgICAgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICAgICAnbWF4Jzogb3B0aW9ucy5tYXhEZWxheSxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAncGhhc2UnOiAtOTAgICAgLy9vZmZzZSB0aGUgcGhhc2Ugc28gdGhlIHJlc3RpbmcgcG9zaXRpb24gaXMgaW4gdGhlIGNlbnRlclxuXHQgICAgICAgIH0pLnN0YXJ0KCkuY29ubmVjdCh0aGlzLl9kZWxheU5vZGUuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG9mIHRoZSB2aWJyYXRvXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2xmby5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlcHRoIG9mIHRoZSB2aWJyYXRvLiBcblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IHRoaXMuX2xmby5hbXBsaXR1ZGU7XG5cdCAgICAgICAgdGhpcy5kZXB0aC52YWx1ZSA9IG9wdGlvbnMuZGVwdGg7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5jaGFpbih0aGlzLl9kZWxheU5vZGUsIHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlZpYnJhdG8sIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5WaWJyYXRvLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtYXhEZWxheSc6IDAuMDA1LFxuXHQgICAgICAgICdmcmVxdWVuY3knOiA1LFxuXHQgICAgICAgICdkZXB0aCc6IDAuMSxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFR5cGUgb2Ygb3NjaWxsYXRvciBhdHRhY2hlZCB0byB0aGUgVmlicmF0by5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5WaWJyYXRvI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVmlicmF0by5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmby50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVmlicmF0b30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5WaWJyYXRvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlZpYnJhdG87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5FdmVudCBhYnN0cmFjdHMgYXdheSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZSBhbmQgcHJvdmlkZXMgYSBzY2hlZHVsYWJsZVxuXHRcdCAqICAgICAgICAgIGNhbGxiYWNrIGZvciBhIHNpbmdsZSBvciByZXBlYXRhYmxlIGV2ZW50cyBhbG9uZyB0aGUgdGltZWxpbmUuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYXQgdGhlIHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIG9yIHZhbHVlcyB3aGljaCBzaG91bGQgYmUgcGFzc2VkIHRvXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG9uIGludm9jYXRpb24uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGNob3JkID0gbmV3IFRvbmUuRXZlbnQoZnVuY3Rpb24odGltZSwgY2hvcmQpe1xuXHRcdCAqIFx0Ly90aGUgY2hvcmQgYXMgd2VsbCBhcyB0aGUgZXhhY3QgdGltZSBvZiB0aGUgZXZlbnRcblx0XHQgKiBcdC8vYXJlIHBhc3NlZCBpbiBhcyBhcmd1bWVudHMgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uXG5cdFx0ICogfSwgW1wiRDRcIiwgXCJFNFwiLCBcIkY0XCJdKTtcblx0XHQgKiAvL3N0YXJ0IHRoZSBjaG9yZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cmFuc3BvcnQgdGltZWxpbmVcblx0XHQgKiBjaG9yZC5zdGFydCgpO1xuXHRcdCAqIC8vbG9vcCBpdCBldmVyeSBtZWFzdXJlIGZvciA4IG1lYXN1cmVzXG5cdFx0ICogY2hvcmQubG9vcCA9IDg7XG5cdFx0ICogY2hvcmQubG9vcEVuZCA9IFwiMW1cIjtcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snLFxuXHQgICAgICAgICAgICAndmFsdWUnXG5cdCAgICAgICAgXSwgVG9uZS5FdmVudCk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIExvb3AgdmFsdWVcblx0XHRcdCAqICBAdHlwZSAge0Jvb2xlYW58UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3AgPSBvcHRpb25zLmxvb3A7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhbGxiYWNrIHRvIGludm9rZS5cblx0XHRcdCAqICBAdHlwZSAge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlIHdoaWNoIGlzIHBhc3NlZCB0byB0aGVcblx0XHRcdCAqICBjYWxsYmFjayBmdW5jdGlvbi5cblx0XHRcdCAqICBAdHlwZSAgeyp9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZW4gdGhlIG5vdGUgaXMgc2NoZWR1bGVkIHRvIHN0YXJ0LlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvVGlja3Mob3B0aW9ucy5sb29wU3RhcnQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZW4gdGhlIG5vdGUgaXMgc2NoZWR1bGVkIHRvIHN0YXJ0LlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wRW5kID0gdGhpcy50b1RpY2tzKG9wdGlvbnMubG9vcEVuZCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVHJhY2tzIHRoZSBzY2hlZHVsZWQgZXZlbnRzXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVGltZWxpbmVTdGF0ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBuZXcgVG9uZS5UaW1lbGluZVN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBsYXliYWNrIHNwZWVkIG9mIHRoZSBub3RlLiBBIHNwZWVkIG9mIDFcblx0XHRcdCAqICBpcyBubyBjaGFuZ2UuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSAxO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgZGVsYXkgdGltZSBmcm9tIHdoZW4gdGhlIGV2ZW50IGlzIHNjaGVkdWxlZCB0byBzdGFydFxuXHRcdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhcnRPZmZzZXQgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHByaXZhdGUgaG9sZGVyIG9mIHByb2JhYmlsaXR5IHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wcm9iYWJpbGl0eSA9IG9wdGlvbnMucHJvYmFiaWxpdHk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFtb3VudCBvZiB2YXJpYXRpb24gZnJvbSB0aGVcblx0XHRcdCAqICBnaXZlbiB0aW1lLlxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufFRpbWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2h1bWFuaXplID0gb3B0aW9ucy5odW1hbml6ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBJZiBtdXRlIGlzIHRydWUsIHRoZSBjYWxsYmFjayB3b24ndCBiZVxuXHRcdFx0ICogIGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICAgICAgLy9zZXQgdGhlIGluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkV2ZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2xvb3AnOiBmYWxzZSxcblx0ICAgICAgICAnbG9vcEVuZCc6ICcxbScsXG5cdCAgICAgICAgJ2xvb3BTdGFydCc6IDAsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDEsXG5cdCAgICAgICAgJ3ZhbHVlJzogbnVsbCxcblx0ICAgICAgICAncHJvYmFiaWxpdHknOiAxLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2UsXG5cdCAgICAgICAgJ2h1bWFuaXplJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVzY2hlZHVsZSBhbGwgb2YgdGhlIGV2ZW50cyBhbG9uZyB0aGUgdGltZWxpbmVcblx0XHQgKiAgd2l0aCB0aGUgdXBkYXRlZCB2YWx1ZXMuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gYWZ0ZXIgT25seSByZXNjaGVkdWxlcyBldmVudHMgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkV2ZW50fSAgdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuX3Jlc2NoZWR1bGVFdmVudHMgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICAvL2lmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCBzY2hlZHVsZXMgYWxsIG9mIHRoZSBldmVudHNcblx0ICAgICAgICBhZnRlciA9IFRvbmUuZGVmYXVsdEFyZyhhZnRlciwgLTEpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hGcm9tKGFmdGVyLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgdmFyIGR1cmF0aW9uO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKGV2ZW50LmlkKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKGV2ZW50LmlkKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHZhciBzdGFydFRpY2sgPSBldmVudC50aW1lICsgTWF0aC5yb3VuZCh0aGlzLnN0YXJ0T2Zmc2V0IC8gdGhpcy5fcGxheWJhY2tSYXRlKTtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSBJbmZpbml0eTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc051bWJlcih0aGlzLl9sb29wKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IHRoaXMuX2xvb3AgKiB0aGlzLl9nZXRMb29wRHVyYXRpb24oKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRFdmVudCA9IHRoaXMuX3N0YXRlLmdldEFmdGVyKHN0YXJ0VGljayk7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRFdmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IE1hdGgubWluKGR1cmF0aW9uLCBuZXh0RXZlbnQudGltZSAtIHN0YXJ0VGljayk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIGlmIChkdXJhdGlvbiAhPT0gSW5maW5pdHkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy9zY2hlZHVsZSBhIHN0b3Agc2luY2UgaXQncyBmaW5pdGUgZHVyYXRpb25cblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCBzdGFydFRpY2sgKyBkdXJhdGlvbiArIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IFRvbmUuVGlja3MoZHVyYXRpb24pO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB2YXIgaW50ZXJ2YWwgPSBUb25lLlRpY2tzKHRoaXMuX2dldExvb3BEdXJhdGlvbigpKTtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC5pZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlUmVwZWF0KHRoaXMuX3RpY2suYmluZCh0aGlzKSwgaW50ZXJ2YWwsIFRvbmUuVGlja3Moc3RhcnRUaWNrKSwgZHVyYXRpb24pO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC5pZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKHRoaXMuX3RpY2suYmluZCh0aGlzKSwgVG9uZS5UaWNrcyhzdGFydFRpY2spKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBub3RlLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUoVG9uZS5UcmFuc3BvcnQudGlja3MpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzdGFydCBmcm9tIHRoZSBzY2hlZHVsZWQgc3RhcnQgdGltZVxuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAbmFtZSBzdGFydE9mZnNldFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnc3RhcnRPZmZzZXQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGFydE9mZnNldDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGFydE9mZnNldCA9IG9mZnNldDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcHJvYmFiaWxpdHkgb2YgdGhlIG5vdGVzIGJlaW5nIHRyaWdnZXJlZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgcHJvYmFiaWxpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ3Byb2JhYmlsaXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvYmFiaWxpdHk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcm9iKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2JhYmlsaXR5ID0gcHJvYjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiBzZXQgdG8gdHJ1ZSwgd2lsbCBhcHBseSBzbWFsbCByYW5kb20gdmFyaWF0aW9uXG5cdFx0ICogIHRvIHRoZSBjYWxsYmFjayB0aW1lLiBJZiB0aGUgdmFsdWUgaXMgZ2l2ZW4gYXMgYSB0aW1lLCBpdCB3aWxsIHJhbmRvbWl6ZVxuXHRcdCAqICBieSB0aGF0IGFtb3VudC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBldmVudC5odW1hbml6ZSA9IHRydWU7XG5cdFx0ICogIEB0eXBlIHtCb29sZWFufFRpbWV9XG5cdFx0ICogIEBuYW1lIGh1bWFuaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdodW1hbml6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2h1bWFuaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFyaWF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2h1bWFuaXplID0gdmFyaWF0aW9uO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBub3RlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9ufSAgdGltZSAgV2hlbiB0aGUgbm90ZSBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkV2ZW50fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuYWRkKHtcblx0ICAgICAgICAgICAgICAgICdzdGF0ZSc6IFRvbmUuU3RhdGUuU3RhcnRlZCxcblx0ICAgICAgICAgICAgICAgICd0aW1lJzogdGltZSxcblx0ICAgICAgICAgICAgICAgICdpZCc6IHVuZGVmaW5lZFxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIEV2ZW50IGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9ufSAgdGltZSAgV2hlbiB0aGUgbm90ZSBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRXZlbnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c0V2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0QmVmb3JlKHRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgcmVzY2hlZHVsVGltZSA9IHRpbWU7XG5cdCAgICAgICAgICAgIGlmIChwcmV2aW91c0V2ZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICByZXNjaGVkdWxUaW1lID0gcHJldmlvdXNFdmVudC50aW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHMocmVzY2hlZHVsVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgYWxsIHNjaGVkdWxlZCBldmVudHMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb259ICBbdGltZT0wXSAgVGhlIHRpbWUgYWZ0ZXIgd2hpY2ggZXZlbnRzIHdpbGwgYmUgY2FuY2VsLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FdmVudH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuZGVmYXVsdEFyZyh0aW1lLCAtSW5maW5pdHkpO1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEZyb20odGltZSwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKGV2ZW50LmlkKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VyLiBBbHNvXG5cdFx0ICogIGNoZWNrcyBpZiB0aGUgRXZlbnQgaXMgZG9uZSBwbGF5aW5nXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIG9mIHRoZSBldmVudCBpbiBzZWNvbmRzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIHRpY2tzID0gVG9uZS5UcmFuc3BvcnQuZ2V0VGlja3NBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKCF0aGlzLm11dGUgJiYgdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGlja3MpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMucHJvYmFiaWxpdHkgPCAxICYmIE1hdGgucmFuZG9tKCkgPiB0aGlzLnByb2JhYmlsaXR5KSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKHRoaXMuaHVtYW5pemUpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB2YXJpYXRpb24gPSAwLjAyO1xuXHQgICAgICAgICAgICAgICAgaWYgKCFUb25lLmlzQm9vbGVhbih0aGlzLmh1bWFuaXplKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbiA9IHRoaXMudG9TZWNvbmRzKHRoaXMuaHVtYW5pemUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdGltZSArPSAoTWF0aC5yYW5kb20oKSAqIDIgLSAxKSAqIHZhcmlhdGlvbjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUsIHRoaXMudmFsdWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBkdXJhdGlvbiBvZiB0aGUgbG9vcC5cblx0XHQgKiAgQHJldHVybiAge1RpY2tzfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuX2dldExvb3BEdXJhdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCgodGhpcy5fbG9vcEVuZCAtIHRoaXMuX2xvb3BTdGFydCkgLyB0aGlzLl9wbGF5YmFja1JhdGUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiB0aGUgbm90ZSBzaG91bGQgbG9vcCBvciBub3Rcblx0XHQgKiAgYmV0d2VlbiBUb25lLkV2ZW50Lmxvb3BTdGFydCBhbmRcblx0XHQgKiAgVG9uZS5FdmVudC5sb29wRW5kLiBBbiBpbnRlZ2VyXG5cdFx0ICogIHZhbHVlIGNvcnJlc3BvbmRzIHRvIHRoZSBudW1iZXIgb2Zcblx0XHQgKiAgbG9vcHMgdGhlIEV2ZW50IGRvZXMgYWZ0ZXIgaXQgc3RhcnRzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW58UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGxvb3Bcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ2xvb3AnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cygpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgbm90ZS4gRGVmYXVsdHMgdG8gMS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgcGxheWJhY2tSYXRlXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogbm90ZS5sb29wID0gdHJ1ZTtcblx0XHQgKiAvL3JlcGVhdCB0aGUgbm90ZSB0d2ljZSBhcyBmYXN0XG5cdFx0ICogbm90ZS5wbGF5YmFja1JhdGUgPSAyO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgICAgICB0aGlzLl9yZXNjaGVkdWxlRXZlbnRzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGxvb3BFbmQgcG9pbnQgaXMgdGhlIHRpbWUgdGhlIGV2ZW50IHdpbGwgbG9vcFxuXHRcdCAqICBpZiBUb25lLkV2ZW50Lmxvb3AgaXMgdHJ1ZS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdsb29wRW5kJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wRW5kKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BFbmQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IHRoaXMudG9UaWNrcyhsb29wRW5kKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHMoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0aW1lIHdoZW4gdGhlIGxvb3Agc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wU3RhcnQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcFN0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IHRoaXMudG9UaWNrcyhsb29wU3RhcnQpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGN1cnJlbnQgcHJvZ3Jlc3Mgb2YgdGhlIGxvb3AgaW50ZXJ2YWwuXG5cdFx0ICogIFJldHVybnMgMCBpZiB0aGUgZXZlbnQgaXMgbm90IHN0YXJ0ZWQgeWV0IG9yXG5cdFx0ICogIGl0IGlzIG5vdCBzZXQgdG8gbG9vcC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgcHJvZ3Jlc3Ncblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdwcm9ncmVzcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHZhciB0aWNrcyA9IFRvbmUuVHJhbnNwb3J0LnRpY2tzO1xuXHQgICAgICAgICAgICAgICAgdmFyIGxhc3RFdmVudCA9IHRoaXMuX3N0YXRlLmdldCh0aWNrcyk7XG5cdCAgICAgICAgICAgICAgICBpZiAobGFzdEV2ZW50ICE9PSBudWxsICYmIGxhc3RFdmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGxvb3BEdXJhdGlvbiA9IHRoaXMuX2dldExvb3BEdXJhdGlvbigpO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBwcm9ncmVzcyA9ICh0aWNrcyAtIGxhc3RFdmVudC50aW1lKSAlIGxvb3BEdXJhdGlvbjtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvZ3Jlc3MgLyBsb29wRHVyYXRpb247XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FdmVudH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5jYW5jZWwoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkV2ZW50O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTG9vcCBjcmVhdGVzIGEgbG9vcGVkIGNhbGxiYWNrIGF0IHRoZSBcblx0XHQgKiAgICAgICAgIHNwZWNpZmllZCBpbnRlcnZhbC4gVGhlIGNhbGxiYWNrIGNhbiBiZSBcblx0XHQgKiAgICAgICAgIHN0YXJ0ZWQsIHN0b3BwZWQgYW5kIHNjaGVkdWxlZCBhbG9uZ1xuXHRcdCAqICAgICAgICAgdGhlIFRyYW5zcG9ydCdzIHRpbWVsaW5lLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbG9vcCA9IG5ldyBUb25lLkxvb3AoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHQvL3RyaWdnZXJlZCBldmVyeSBlaWdodGggbm90ZS4gXG5cdFx0ICogXHRjb25zb2xlLmxvZyh0aW1lKTtcblx0XHQgKiB9LCBcIjhuXCIpLnN0YXJ0KDApO1xuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0YXJ0KCk7XG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggdGhlIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGludGVydmFsIFRoZSB0aW1lIGJldHdlZW4gc3VjY2Vzc2l2ZSBjYWxsYmFjayBjYWxscy4gXG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snLFxuXHQgICAgICAgICAgICAnaW50ZXJ2YWwnXG5cdCAgICAgICAgXSwgVG9uZS5Mb29wKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGV2ZW50IHdoaWNoIHByb2R1Y2VzIHRoZSBjYWxsYmFja3Ncblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V2ZW50ID0gbmV3IFRvbmUuRXZlbnQoe1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snOiB0aGlzLl90aWNrLmJpbmQodGhpcyksXG5cdCAgICAgICAgICAgICdsb29wJzogdHJ1ZSxcblx0ICAgICAgICAgICAgJ2xvb3BFbmQnOiBvcHRpb25zLmludGVydmFsLFxuXHQgICAgICAgICAgICAncGxheWJhY2tSYXRlJzogb3B0aW9ucy5wbGF5YmFja1JhdGUsXG5cdCAgICAgICAgICAgICdwcm9iYWJpbGl0eSc6IG9wdGlvbnMucHJvYmFiaWxpdHlcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggdGhlIG5leHQgZXZlbnQgaW4gdGhlIHBhdHRlcm5cblx0XHRcdCAqICBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gb3B0aW9ucy5jYWxsYmFjaztcblx0ICAgICAgICAvL3NldCB0aGUgaXRlcmF0aW9uc1xuXHQgICAgICAgIHRoaXMuaXRlcmF0aW9ucyA9IG9wdGlvbnMuaXRlcmF0aW9ucztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkxvb3ApO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ludGVydmFsJzogJzRuJyxcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDEsXG5cdCAgICAgICAgJ2l0ZXJhdGlvbnMnOiBJbmZpbml0eSxcblx0ICAgICAgICAncHJvYmFiaWxpdHknOiB0cnVlLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGxvb3AgYXQgdGhlIHNwZWNpZmllZCB0aW1lIGFsb25nIHRoZSBUcmFuc3BvcnQnc1xuXHRcdCAqICB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbj19ICB0aW1lICBXaGVuIHRvIHN0YXJ0IHRoZSBMb29wLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Mb29wfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnQuc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIGxvb3AgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb249fSAgdGltZSAgV2hlbiB0byBzdG9wIHRoZSBBcnBlZ2dpb1xuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Mb29wfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudC5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgYWxsIHNjaGVkdWxlZCBldmVudHMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb259ICBbdGltZT0wXSAgVGhlIHRpbWUgYWZ0ZXIgd2hpY2ggZXZlbnRzIHdpbGwgYmUgY2FuY2VsLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Mb29wfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2V2ZW50LmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIG5vdGVzIHNob3VsZCBiZSBjYWxsZWRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdGhlIGV2ZW50IG9jY3Vyc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHN0YXRlIG9mIHRoZSBMb29wLCBlaXRoZXIgc3RhcnRlZCBvciBzdG9wcGVkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5zdGF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcHJvZ3Jlc3Mgb2YgdGhlIGxvb3AgYXMgYSB2YWx1ZSBiZXR3ZWVuIDAtMS4gMCwgd2hlblxuXHRcdCAqICB0aGUgbG9vcCBpcyBzdG9wcGVkIG9yIGRvbmUgaXRlcmF0aW5nLiBcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBwcm9ncmVzc1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAncHJvZ3Jlc3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5wcm9ncmVzcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdGltZSBiZXR3ZWVuIHN1Y2Nlc3NpdmUgY2FsbGJhY2tzLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBsb29wLmludGVydmFsID0gXCI4blwiOyAvL2xvb3AgZXZlcnkgOG5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIGludGVydmFsXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ2ludGVydmFsJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQubG9vcEVuZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50Lmxvb3BFbmQgPSBpbnRlcnZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgbG9vcC4gVGhlIG5vcm1hbCBwbGF5YmFjayByYXRlIGlzIDEgKG5vIGNoYW5nZSkuIFxuXHRcdCAqICBBIGBwbGF5YmFja1JhdGVgIG9mIDIgd291bGQgYmUgdHdpY2UgYXMgZmFzdC4gXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBwbGF5YmFja1JhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQucGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9ldmVudC5wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJhbmRvbSB2YXJpYXRpb24gKy8tMC4wMXMgdG8gdGhlIHNjaGVkdWxlZCB0aW1lLiBcblx0XHQgKiAgT3IgZ2l2ZSBpdCBhIHRpbWUgdmFsdWUgd2hpY2ggaXQgd2lsbCByYW5kb21pemUgYnkuXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufFRpbWV9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEBuYW1lIGh1bWFuaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ2h1bWFuaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQuaHVtYW5pemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YXJpYXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnQuaHVtYW5pemUgPSB2YXJpYXRpb247XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByb2JhYmx5IG9mIHRoZSBjYWxsYmFjayBiZWluZyBpbnZva2VkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHByb2JhYmlsaXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ3Byb2JhYmlsaXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQucHJvYmFiaWxpdHk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcm9iKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50LnByb2JhYmlsaXR5ID0gcHJvYjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBNdXRpbmcgdGhlIExvb3AgbWVhbnMgdGhhdCBubyBjYWxsYmFja3MgYXJlIGludm9rZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqICBAbmFtZSBtdXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9ldmVudC5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgdGhlIGxvb3AuIFRoZSBkZWZhdWx0XG5cdFx0ICogIHZhbHVlIGlzIEluZmluaXR5IChsb29wIGZvcmV2ZXIpLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGl0ZXJhdGlvbnNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAnaXRlcmF0aW9ucycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2V2ZW50Lmxvb3AgPT09IHRydWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5sb29wO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpdGVycykge1xuXHQgICAgICAgICAgICBpZiAoaXRlcnMgPT09IEluZmluaXR5KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9ldmVudC5sb29wID0gdHJ1ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50Lmxvb3AgPSBpdGVycztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkxvb3B9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Mb29wO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QYXJ0IGlzIGEgY29sbGVjdGlvbiBUb25lLkV2ZW50cyB3aGljaCBjYW4gYmVcblx0XHQgKiAgICAgICAgIHN0YXJ0ZWQvc3RvcHBlZCBhbmQgbG9vcGVkIGFzIGEgc2luZ2xlIHVuaXQuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRXZlbnR9XG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugb24gZWFjaCBldmVudFxuXHRcdCAqICBAcGFyYW0ge0FycmF5fSBldmVudHMgdGhlIGFycmF5IG9mIGV2ZW50c1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwYXJ0ID0gbmV3IFRvbmUuUGFydChmdW5jdGlvbih0aW1lLCBub3RlKXtcblx0XHQgKiBcdC8vdGhlIG5vdGVzIGdpdmVuIGFzIHRoZSBzZWNvbmQgZWxlbWVudCBpbiB0aGUgYXJyYXlcblx0XHQgKiBcdC8vd2lsbCBiZSBwYXNzZWQgaW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudFxuXHRcdCAqIFx0c3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2Uobm90ZSwgXCI4blwiLCB0aW1lKTtcblx0XHQgKiB9LCBbWzAsIFwiQzJcIl0sIFtcIjA6MlwiLCBcIkMzXCJdLCBbXCIwOjM6MlwiLCBcIkcyXCJdXSk7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy91c2UgYW4gYXJyYXkgb2Ygb2JqZWN0cyBhcyBsb25nIGFzIHRoZSBvYmplY3QgaGFzIGEgXCJ0aW1lXCIgYXR0cmlidXRlXG5cdFx0ICogdmFyIHBhcnQgPSBuZXcgVG9uZS5QYXJ0KGZ1bmN0aW9uKHRpbWUsIHZhbHVlKXtcblx0XHQgKiBcdC8vdGhlIHZhbHVlIGlzIGFuIG9iamVjdCB3aGljaCBjb250YWlucyBib3RoIHRoZSBub3RlIGFuZCB0aGUgdmVsb2NpdHlcblx0XHQgKiBcdHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKHZhbHVlLm5vdGUsIFwiOG5cIiwgdGltZSwgdmFsdWUudmVsb2NpdHkpO1xuXHRcdCAqIH0sIFt7XCJ0aW1lXCIgOiAwLCBcIm5vdGVcIiA6IFwiQzNcIiwgXCJ2ZWxvY2l0eVwiOiAwLjl9LFxuXHRcdCAqIFx0ICAge1widGltZVwiIDogXCIwOjJcIiwgXCJub3RlXCIgOiBcIkM0XCIsIFwidmVsb2NpdHlcIjogMC41fVxuXHRcdCAqIF0pLnN0YXJ0KDApO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ2V2ZW50cydcblx0ICAgICAgICBdLCBUb25lLlBhcnQpO1xuXHQgICAgICAgIFRvbmUuRXZlbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbiBhcnJheSBvZiBPYmplY3RzLlxuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IFtdO1xuXHQgICAgICAgIC8vYWRkIHRoZSBldmVudHNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMuZXZlbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuZXZlbnRzW2ldKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5hZGQob3B0aW9ucy5ldmVudHNbaV1bMF0sIG9wdGlvbnMuZXZlbnRzW2ldWzFdKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuYWRkKG9wdGlvbnMuZXZlbnRzW2ldKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhcnQsIFRvbmUuRXZlbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdsb29wJzogZmFsc2UsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAnMW0nLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxLFxuXHQgICAgICAgICdwcm9iYWJpbGl0eSc6IDEsXG5cdCAgICAgICAgJ2h1bWFuaXplJzogZmFsc2UsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZSxcblx0ICAgICAgICAnZXZlbnRzJzogW11cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIHBhcnQgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RyYW5zcG9ydFRpbWV9ICB0aW1lICAgIFdoZW4gdG8gc3RhcnQgdGhlIHBhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgb2Zmc2V0ICBUaGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJ0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiZWdpbiBwbGF5aW5nIGF0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXJ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICB2YXIgdGlja3MgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpY2tzKSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCB0aGlzLl9sb29wU3RhcnQpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgMCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy50b1RpY2tzKG9mZnNldCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLmFkZCh7XG5cdCAgICAgICAgICAgICAgICAnc3RhdGUnOiBUb25lLlN0YXRlLlN0YXJ0ZWQsXG5cdCAgICAgICAgICAgICAgICAndGltZSc6IHRpY2tzLFxuXHQgICAgICAgICAgICAgICAgJ29mZnNldCc6IG9mZnNldFxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0Tm90ZShldmVudCwgdGlja3MsIG9mZnNldCk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGV2ZW50IGluIHRoZSBnaXZlbiBldmVudCBhdCB0aGUgY29ycmVjdCB0aW1lIGdpdmVuXG5cdFx0ICogIHRoZSB0aWNrcyBhbmQgb2Zmc2V0IGFuZCBsb29waW5nLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkV2ZW50fSAgZXZlbnRcblx0XHQgKiAgQHBhcmFtICB7VGlja3N9ICB0aWNrc1xuXHRcdCAqICBAcGFyYW0gIHtUaWNrc30gIG9mZnNldFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5fc3RhcnROb3RlID0gZnVuY3Rpb24gKGV2ZW50LCB0aWNrcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgdGlja3MgLT0gb2Zmc2V0O1xuXHQgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgIGlmIChldmVudC5zdGFydE9mZnNldCA+PSB0aGlzLl9sb29wU3RhcnQgJiYgZXZlbnQuc3RhcnRPZmZzZXQgPCB0aGlzLl9sb29wRW5kKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgICAgICAvL3N0YXJ0IGl0IG9uIHRoZSBuZXh0IGxvb3Bcblx0ICAgICAgICAgICAgICAgICAgICB0aWNrcyArPSB0aGlzLl9nZXRMb29wRHVyYXRpb24oKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGV2ZW50LnN0YXJ0KFRvbmUuVGlja3ModGlja3MpKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGFydE9mZnNldCA8IHRoaXMuX2xvb3BTdGFydCAmJiBldmVudC5zdGFydE9mZnNldCA+PSBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Lmxvb3AgPSBmYWxzZTtcblx0ICAgICAgICAgICAgICAgIGV2ZW50LnN0YXJ0KFRvbmUuVGlja3ModGlja3MpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPj0gb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIGV2ZW50LnN0YXJ0KFRvbmUuVGlja3ModGlja3MpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzdGFydCBmcm9tIHRoZSBzY2hlZHVsZWQgc3RhcnQgdGltZVxuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEBuYW1lIHN0YXJ0T2Zmc2V0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ3N0YXJ0T2Zmc2V0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRPZmZzZXQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhcnRPZmZzZXQgPSBvZmZzZXQ7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5zdGFydE9mZnNldCArPSB0aGlzLl9zdGFydE9mZnNldDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgcGFydCBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbn0gIHRpbWUgIFdoZW4gdG8gc3RvcCB0aGUgcGFydC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIHRpY2tzID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aWNrcyk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aWNrcyk7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnQuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0L1NldCBhbiBFdmVudCdzIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBJZiBhIHZhbHVlIGlzIHBhc3NlZCBpbiBhbmQgbm8gZXZlbnQgZXhpc3RzIGF0XG5cdFx0ICogIHRoZSBnaXZlbiB0aW1lLCBvbmUgd2lsbCBiZSBjcmVhdGVkIHdpdGggdGhhdCB2YWx1ZS5cblx0XHQgKiAgSWYgdHdvIGV2ZW50cyBhcmUgYXQgdGhlIHNhbWUgdGltZSwgdGhlIGZpcnN0IG9uZSB3aWxsXG5cdFx0ICogIGJlIHJldHVybmVkLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHBhcnQuYXQoXCIxbVwiKTsgLy9yZXR1cm5zIHRoZSBwYXJ0IGF0IHRoZSBmaXJzdCBtZWFzdXJlXG5cdFx0ICpcblx0XHQgKiBwYXJ0LmF0KFwiMm1cIiwgXCJDMlwiKTsgLy9zZXQgdGhlIHZhbHVlIGF0IFwiMm1cIiB0byBDMi5cblx0XHQgKiAvL2lmIGFuIGV2ZW50IGRpZG4ndCBleGlzdCBhdCB0aGF0IHRpbWUsIGl0IHdpbGwgYmUgY3JlYXRlZC5cblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSB0aW1lIFRoZSB0aW1lIG9mIHRoZSBldmVudCB0byBnZXQgb3Igc2V0LlxuXHRcdCAqICBAcGFyYW0geyo9fSB2YWx1ZSBJZiBhIHZhbHVlIGlzIHBhc3NlZCBpbiwgdGhlIHZhbHVlIG9mIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICBldmVudCBhdCB0aGUgZ2l2ZW4gdGltZSB3aWxsIGJlIHNldCB0byBpdC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5FdmVudH0gdGhlIGV2ZW50IGF0IHRoZSB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLmF0ID0gZnVuY3Rpb24gKHRpbWUsIHZhbHVlKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKTtcblx0ICAgICAgICB2YXIgdGlja1RpbWUgPSBUb25lLlRpY2tzKDEpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZXZlbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX2V2ZW50c1tpXTtcblx0ICAgICAgICAgICAgaWYgKE1hdGguYWJzKHRpbWUudG9UaWNrcygpIC0gZXZlbnQuc3RhcnRPZmZzZXQpIDwgdGlja1RpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZCh2YWx1ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC52YWx1ZSA9IHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vaWYgdGhlcmUgd2FzIG5vIGV2ZW50IGF0IHRoYXQgdGltZSwgY3JlYXRlIG9uZVxuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZCh2YWx1ZSkpIHtcblx0ICAgICAgICAgICAgdGhpcy5hZGQodGltZSwgdmFsdWUpO1xuXHQgICAgICAgICAgICAvL3JldHVybiB0aGUgbmV3IGV2ZW50XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudHNbdGhpcy5fZXZlbnRzLmxlbmd0aCAtIDFdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGEgYW4gZXZlbnQgdG8gdGhlIHBhcnQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSB0aGUgbm90ZSBzaG91bGQgc3RhcnQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgYW4gb2JqZWN0IGlzIHBhc3NlZCBpbiwgaXQgc2hvdWxkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSBhICd0aW1lJyBhdHRyaWJ1dGUgYW5kIHRoZSByZXN0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIG9iamVjdCB3aWxsIGJlIHVzZWQgYXMgdGhlICd2YWx1ZScuXG5cdFx0ICogIEBwYXJhbSAge1RvbmUuRXZlbnR8Kn0gIHZhbHVlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcnR9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBwYXJ0LmFkZChcIjFtXCIsIFwiQyMrMTFcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0aW1lLCB2YWx1ZSkge1xuXHQgICAgICAgIC8vZXh0cmFjdCB0aGUgcGFyYW1ldGVyc1xuXHQgICAgICAgIGlmICh0aW1lLmhhc093blByb3BlcnR5KCd0aW1lJykpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSB0aW1lO1xuXHQgICAgICAgICAgICB0aW1lID0gdmFsdWUudGltZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICB2YXIgZXZlbnQ7XG5cdCAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVG9uZS5FdmVudCkge1xuXHQgICAgICAgICAgICBldmVudCA9IHZhbHVlO1xuXHQgICAgICAgICAgICBldmVudC5jYWxsYmFjayA9IHRoaXMuX3RpY2suYmluZCh0aGlzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBldmVudCA9IG5ldyBUb25lLkV2ZW50KHtcblx0ICAgICAgICAgICAgICAgICdjYWxsYmFjayc6IHRoaXMuX3RpY2suYmluZCh0aGlzKSxcblx0ICAgICAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlXG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3RoZSBzdGFydCBvZmZzZXRcblx0ICAgICAgICBldmVudC5zdGFydE9mZnNldCA9IHRpbWU7XG5cdCAgICAgICAgLy9pbml0aWFsaXplIHRoZSB2YWx1ZXNcblx0ICAgICAgICBldmVudC5zZXQoe1xuXHQgICAgICAgICAgICAnbG9vcEVuZCc6IHRoaXMubG9vcEVuZCxcblx0ICAgICAgICAgICAgJ2xvb3BTdGFydCc6IHRoaXMubG9vcFN0YXJ0LFxuXHQgICAgICAgICAgICAnbG9vcCc6IHRoaXMubG9vcCxcblx0ICAgICAgICAgICAgJ2h1bWFuaXplJzogdGhpcy5odW1hbml6ZSxcblx0ICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IHRoaXMucGxheWJhY2tSYXRlLFxuXHQgICAgICAgICAgICAncHJvYmFiaWxpdHknOiB0aGlzLnByb2JhYmlsaXR5XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLnB1c2goZXZlbnQpO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIG5vdGUgaWYgaXQgc2hvdWxkIGJlIHBsYXllZCByaWdodCBub3dcblx0ICAgICAgICB0aGlzLl9yZXN0YXJ0RXZlbnQoZXZlbnQpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXN0YXJ0IHRoZSBnaXZlbiBldmVudFxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkV2ZW50fSAgZXZlbnRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX3Jlc3RhcnRFdmVudCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2goZnVuY3Rpb24gKHN0YXRlRXZlbnQpIHtcblx0ICAgICAgICAgICAgaWYgKHN0YXRlRXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnROb3RlKGV2ZW50LCBzdGF0ZUV2ZW50LnRpbWUsIHN0YXRlRXZlbnQub2Zmc2V0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vc3RvcCB0aGUgbm90ZVxuXHQgICAgICAgICAgICAgICAgZXZlbnQuc3RvcChUb25lLlRpY2tzKHN0YXRlRXZlbnQudGltZSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIGFuIGV2ZW50IGZyb20gdGhlIHBhcnQuIFdpbGwgcmVjdXJzaXZlbHkgaXRlcmF0ZVxuXHRcdCAqICBpbnRvIG5lc3RlZCBwYXJ0cyB0byBmaW5kIHRoZSBldmVudC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lIFRoZSB0aW1lIG9mIHRoZSBldmVudFxuXHRcdCAqICBAcGFyYW0geyp9IHZhbHVlIE9wdGlvbmFsbHkgc2VsZWN0IG9ubHkgYSBzcGVjaWZpYyBldmVudCB2YWx1ZVxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXJ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGltZSwgdmFsdWUpIHtcblx0ICAgICAgICAvL2V4dHJhY3QgdGhlIHBhcmFtZXRlcnNcblx0ICAgICAgICBpZiAodGltZS5oYXNPd25Qcm9wZXJ0eSgndGltZScpKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gdGltZTtcblx0ICAgICAgICAgICAgdGltZSA9IHZhbHVlLnRpbWU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2V2ZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHNbaV07XG5cdCAgICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIFRvbmUuUGFydCkge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQucmVtb3ZlKHRpbWUsIHZhbHVlKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGFydE9mZnNldCA9PT0gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih2YWx1ZSkgfHwgVG9uZS5pc0RlZmluZWQodmFsdWUpICYmIGV2ZW50LnZhbHVlID09PSB2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5zcGxpY2UoaSwgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgYWxsIG9mIHRoZSBub3RlcyBmcm9tIHRoZSBncm91cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGV2ZW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBbXTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIHNjaGVkdWxlZCBzdGF0ZSBjaGFuZ2UgZXZlbnRzOiBpLmUuIFwic3RhcnRcIiBhbmQgXCJzdG9wXCIuXG5cdFx0ICogIEBwYXJhbSB7VGltZWxpbmVQb3NpdGlvbn0gYWZ0ZXIgVGhlIHRpbWUgYWZ0ZXIgd2hpY2ggdG8gY2FuY2VsIHRoZSBzY2hlZHVsZWQgZXZlbnRzLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXJ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBldmVudC5jYW5jZWwoYWZ0ZXIpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aGlzLnRvVGlja3MoYWZ0ZXIpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGFsbCBvZiB0aGUgZXZlbnRzXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBjdHggVGhlIGNvbnRleHRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX2ZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGN0eCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9ldmVudHMpIHtcblx0ICAgICAgICAgICAgY3R4ID0gVG9uZS5kZWZhdWx0QXJnKGN0eCwgdGhpcyk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9ldmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgICAgIHZhciBlID0gdGhpcy5fZXZlbnRzW2ldO1xuXHQgICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBUb25lLlBhcnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBlLl9mb3JFYWNoKGNhbGxiYWNrLCBjdHgpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKGN0eCwgZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgYXR0cmlidXRlIG9mIGFsbCBvZiB0aGUgZXZlbnRzXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGF0dHIgIHRoZSBhdHRyaWJ1dGUgdG8gc2V0XG5cdFx0ICogIEBwYXJhbSAgeyp9ICB2YWx1ZSAgICAgIFRoZSB2YWx1ZSB0byBzZXQgaXQgdG9cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX3NldEFsbCA9IGZ1bmN0aW9uIChhdHRyLCB2YWx1ZSkge1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGV2ZW50W2F0dHJdID0gdmFsdWU7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIHRpY2sgbWV0aG9kXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIG9mIHRoZSBldmVudCBpbiBzZWNvbmRzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl90aWNrID0gZnVuY3Rpb24gKHRpbWUsIHZhbHVlKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLm11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lLCB2YWx1ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZXRlcm1pbmUgaWYgdGhlIGV2ZW50IHNob3VsZCBiZSBjdXJyZW50bHkgbG9vcGluZ1xuXHRcdCAqICBnaXZlbiB0aGUgbG9vcCBib3VuZHJpZXMgb2YgdGhpcyBQYXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkV2ZW50fSAgZXZlbnQgIFRoZSBldmVudCB0byB0ZXN0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl90ZXN0TG9vcEJvdW5kcmllcyA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIGlmIChldmVudC5zdGFydE9mZnNldCA8IHRoaXMuX2xvb3BTdGFydCB8fCBldmVudC5zdGFydE9mZnNldCA+PSB0aGlzLl9sb29wRW5kKSB7XG5cdCAgICAgICAgICAgIGV2ZW50LmNhbmNlbCgwKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgLy9yZXNjaGVkdWxlIGl0IGlmIGl0J3Mgc3RvcHBlZFxuXHQgICAgICAgICAgICB0aGlzLl9yZXN0YXJ0RXZlbnQoZXZlbnQpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByb2JhYmlsaXR5IG9mIHRoZSBub3RlcyBiZWluZyB0cmlnZ2VyZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgcHJvYmFiaWxpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAncHJvYmFiaWxpdHknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9iYWJpbGl0eTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHByb2IpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcHJvYmFiaWxpdHkgPSBwcm9iO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRBbGwoJ3Byb2JhYmlsaXR5JywgcHJvYik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSWYgc2V0IHRvIHRydWUsIHdpbGwgYXBwbHkgc21hbGwgcmFuZG9tIHZhcmlhdGlvblxuXHRcdCAqICB0byB0aGUgY2FsbGJhY2sgdGltZS4gSWYgdGhlIHZhbHVlIGlzIGdpdmVuIGFzIGEgdGltZSwgaXQgd2lsbCByYW5kb21pemVcblx0XHQgKiAgYnkgdGhhdCBhbW91bnQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogZXZlbnQuaHVtYW5pemUgPSB0cnVlO1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxUaW1lfVxuXHRcdCAqICBAbmFtZSBodW1hbml6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdodW1hbml6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2h1bWFuaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFyaWF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2h1bWFuaXplID0gdmFyaWF0aW9uO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRBbGwoJ2h1bWFuaXplJywgdmFyaWF0aW9uKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiB0aGUgcGFydCBzaG91bGQgbG9vcCBvciBub3Rcblx0XHQgKiAgYmV0d2VlbiBUb25lLlBhcnQubG9vcFN0YXJ0IGFuZFxuXHRcdCAqICBUb25lLlBhcnQubG9vcEVuZC4gQW4gaW50ZWdlclxuXHRcdCAqICB2YWx1ZSBjb3JyZXNwb25kcyB0byB0aGUgbnVtYmVyIG9mXG5cdFx0ICogIGxvb3BzIHRoZSBQYXJ0IGRvZXMgYWZ0ZXIgaXQgc3RhcnRzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgbG9vcFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbG9vcCB0aGUgcGFydCA4IHRpbWVzXG5cdFx0ICogcGFydC5sb29wID0gODtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAnbG9vcCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3A7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuX2xvb3BTdGFydCA9IHRoaXMuX2xvb3BTdGFydDtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Ll9sb29wRW5kID0gdGhpcy5fbG9vcEVuZDtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Lmxvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdGVzdExvb3BCb3VuZHJpZXMoZXZlbnQpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbG9vcEVuZCBwb2ludCBkZXRlcm1pbmVzIHdoZW4gaXQgd2lsbFxuXHRcdCAqICBsb29wIGlmIFRvbmUuUGFydC5sb29wIGlzIHRydWUuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX2xvb3BFbmQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcEVuZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gdGhpcy50b1RpY2tzKGxvb3BFbmQpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC5sb29wRW5kID0gbG9vcEVuZDtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXN0TG9vcEJvdW5kcmllcyhldmVudCk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBsb29wU3RhcnQgcG9pbnQgZGV0ZXJtaW5lcyB3aGVuIGl0IHdpbGxcblx0XHQgKiAgbG9vcCBpZiBUb25lLlBhcnQubG9vcCBpcyB0cnVlLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcFN0YXJ0KS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BTdGFydCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvVGlja3MobG9vcFN0YXJ0KTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQubG9vcFN0YXJ0ID0gdGhpcy5sb29wU3RhcnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGVzdExvb3BCb3VuZHJpZXMoZXZlbnQpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0VGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIHBhcnRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBwbGF5YmFja1JhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRBbGwoJ3BsYXliYWNrUmF0ZScsIHJhdGUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRUaGUgbnVtYmVyIG9mIHNjaGVkdWxlZCBub3RlcyBpbiB0aGUgcGFydC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBsZW5ndGhcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50cy5sZW5ndGg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLnJlbW92ZUFsbCgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYXJ0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGF0dGVybiBhcnBlZ2dpYXRlcyBiZXR3ZWVuIHRoZSBnaXZlbiBub3Rlc1xuXHRcdCAqICAgICAgICAgaW4gYSBudW1iZXIgb2YgcGF0dGVybnMuIFNlZSBUb25lLkN0cmxQYXR0ZXJuIGZvclxuXHRcdCAqICAgICAgICAgYSBmdWxsIGxpc3Qgb2YgcGF0dGVybnMuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHBhdHRlcm4gPSBuZXcgVG9uZS5QYXR0ZXJuKGZ1bmN0aW9uKHRpbWUsIG5vdGUpe1xuXHRcdCAqICAgLy90aGUgb3JkZXIgb2YgdGhlIG5vdGVzIHBhc3NlZCBpbiBkZXBlbmRzIG9uIHRoZSBwYXR0ZXJuXG5cdFx0ICogfSwgW1wiQzJcIiwgXCJENFwiLCBcIkU1XCIsIFwiQTZcIl0sIFwidXBEb3duXCIpO1xuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Mb29wfVxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcnBlZ2dpYXRlIG92ZXIuXG5cdFx0ICovXG5cdCAgICBUb25lLlBhdHRlcm4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snLFxuXHQgICAgICAgICAgICAndmFsdWVzJyxcblx0ICAgICAgICAgICAgJ3BhdHRlcm4nXG5cdCAgICAgICAgXSwgVG9uZS5QYXR0ZXJuKTtcblx0ICAgICAgICBUb25lLkxvb3AuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGF0dGVybiBtYW5hZ2VyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ3RybFBhdHRlcm59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhdHRlcm4gPSBuZXcgVG9uZS5DdHJsUGF0dGVybih7XG5cdCAgICAgICAgICAgICd2YWx1ZXMnOiBvcHRpb25zLnZhbHVlcyxcblx0ICAgICAgICAgICAgJ3R5cGUnOiBvcHRpb25zLnBhdHRlcm4sXG5cdCAgICAgICAgICAgICdpbmRleCc6IG9wdGlvbnMuaW5kZXhcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhdHRlcm4sIFRvbmUuTG9vcCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGF0dGVybi5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncGF0dGVybic6IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcCxcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ3ZhbHVlcyc6IFtdXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBub3RlcyBzaG91bGQgYmUgY2FsbGVkXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRoZSBldmVudCBvY2N1cnNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGF0dGVybi5wcm90b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSwgdGhpcy5fcGF0dGVybi52YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5fcGF0dGVybi5uZXh0KCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjdXJyZW50IGluZGV4IGluIHRoZSB2YWx1ZXMgYXJyYXkuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhdHRlcm4jXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgaW5kZXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhdHRlcm4ucHJvdG90eXBlLCAnaW5kZXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuLmluZGV4O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXR0ZXJuLmluZGV4ID0gaTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgYXJyYXkgb2YgZXZlbnRzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICogIEBuYW1lIHZhbHVlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGF0dGVybi5wcm90b3R5cGUsICd2YWx1ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuLnZhbHVlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGF0dGVybi52YWx1ZXMgPSB2YWxzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwYXR0ZXJuLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7Kn1cblx0XHQgKiAgQG5hbWUgdmFsdWVcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXR0ZXJuLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGF0dGVybi52YWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGF0dGVybiB0eXBlLiBTZWUgVG9uZS5DdHJsUGF0dGVybiBmb3IgdGhlIGZ1bGwgbGlzdCBvZiBwYXR0ZXJucy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGF0dGVybiNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgcGF0dGVyblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGF0dGVybi5wcm90b3R5cGUsICdwYXR0ZXJuJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGF0dGVybi50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGF0dGVybikge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXR0ZXJuLnR5cGUgPSBwYXR0ZXJuO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhdHRlcm59ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhdHRlcm4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fcGF0dGVybi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcGF0dGVybiA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGF0dGVybjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgc2VxdWVuY2UgaXMgYW4gYWx0ZXJuYXRlIG5vdGF0aW9uIG9mIGEgcGFydC4gSW5zdGVhZFxuXHRcdCAqICAgICAgICAgb2YgcGFzc2luZyBpbiBhbiBhcnJheSBvZiBbdGltZSwgZXZlbnRdIHBhaXJzLCBwYXNzXG5cdFx0ICogICAgICAgICBpbiBhbiBhcnJheSBvZiBldmVudHMgd2hpY2ggd2lsbCBiZSBzcGFjZWQgYXQgdGhlXG5cdFx0ICogICAgICAgICBnaXZlbiBzdWJkaXZpc2lvbi4gU3ViLWFycmF5cyB3aWxsIHN1YmRpdmlkZSB0aGF0IGJlYXRcblx0XHQgKiAgICAgICAgIGJ5IHRoZSBudW1iZXIgb2YgaXRlbXMgYXJlIGluIHRoZSBhcnJheS5cblx0XHQgKiAgICAgICAgIFNlcXVlbmNlIG5vdGF0aW9uIGluc3BpcmF0aW9uIGZyb20gW1RpZGFsXShodHRwOi8veWF4dS5vcmcvdGlkYWwvKVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgbm90ZVxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gICAgZXZlbnRzICBUaGUgc2VxdWVuY2Vcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gc3ViZGl2aXNpb24gIFRoZSBzdWJkaXZpc2lvbiBiZXR3ZWVuIHdoaWNoIGV2ZW50cyBhcmUgcGxhY2VkLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5QYXJ0fVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzZXEgPSBuZXcgVG9uZS5TZXF1ZW5jZShmdW5jdGlvbih0aW1lLCBub3RlKXtcblx0XHQgKiBcdGNvbnNvbGUubG9nKG5vdGUpO1xuXHRcdCAqIC8vc3RyYWlnaHQgcXVhdGVyIG5vdGVzXG5cdFx0ICogfSwgW1wiQzRcIiwgXCJFNFwiLCBcIkc0XCIsIFwiQTRcIl0sIFwiNG5cIik7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNlcSA9IG5ldyBUb25lLlNlcXVlbmNlKGZ1bmN0aW9uKHRpbWUsIG5vdGUpe1xuXHRcdCAqIFx0Y29uc29sZS5sb2cobm90ZSk7XG5cdFx0ICogLy9zdWJkaXZpc2lvbnMgYXJlIGdpdmVuIGFzIHN1YmFycmF5c1xuXHRcdCAqIH0sIFtcIkM0XCIsIFtcIkU0XCIsIFwiRDRcIiwgXCJFNFwiXSwgXCJHNFwiLCBbXCJBNFwiLCBcIkc0XCJdXSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ2V2ZW50cycsXG5cdCAgICAgICAgICAgICdzdWJkaXZpc2lvbidcblx0ICAgICAgICBdLCBUb25lLlNlcXVlbmNlKTtcblx0ICAgICAgICAvL3JlbW92ZSB0aGUgZXZlbnRzXG5cdCAgICAgICAgdmFyIGV2ZW50cyA9IG9wdGlvbnMuZXZlbnRzO1xuXHQgICAgICAgIGRlbGV0ZSBvcHRpb25zLmV2ZW50cztcblx0ICAgICAgICBUb25lLlBhcnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc3ViZGl2aXNvbiBvZiBlYWNoIG5vdGVcblx0XHRcdCAqICBAdHlwZSAge1RpY2tzfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdWJkaXZpc2lvbiA9IHRoaXMudG9UaWNrcyhvcHRpb25zLnN1YmRpdmlzaW9uKTtcblx0ICAgICAgICAvL2lmIG5vIHRpbWUgd2FzIHBhc3NlZCBpbiwgdGhlIGxvb3AgZW5kIGlzIHRoZSBlbmQgb2YgdGhlIGN5Y2xlXG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihvcHRpb25zLmxvb3BFbmQpICYmIFRvbmUuaXNEZWZpbmVkKGV2ZW50cykpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IGV2ZW50cy5sZW5ndGggKiB0aGlzLl9zdWJkaXZpc2lvbjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9kZWZhdWx0cyB0byBsb29waW5nXG5cdCAgICAgICAgdGhpcy5fbG9vcCA9IHRydWU7XG5cdCAgICAgICAgLy9hZGQgYWxsIG9mIHRoZSBldmVudHNcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoZXZlbnRzKSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5hZGQoaSwgZXZlbnRzW2ldKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNlcXVlbmNlLCBUb25lLlBhcnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy5cblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLmRlZmF1bHRzID0geyAnc3ViZGl2aXNpb24nOiAnNG4nIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHN1YmRpdmlzaW9uIG9mIHRoZSBzZXF1ZW5jZS4gVGhpcyBjYW4gb25seSBiZVxuXHRcdCAqICBzZXQgaW4gdGhlIGNvbnN0cnVjdG9yLiBUaGUgc3ViZGl2aXNpb24gaXMgdGhlXG5cdFx0ICogIGludGVydmFsIGJldHdlZW4gc3VjY2Vzc2l2ZSBzdGVwcy5cblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlNlcXVlbmNlI1xuXHRcdCAqICBAbmFtZSBzdWJkaXZpc2lvblxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNlcXVlbmNlLnByb3RvdHlwZSwgJ3N1YmRpdmlzaW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9zdWJkaXZpc2lvbikudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgR2V0L1NldCBhbiBpbmRleCBvZiB0aGUgc2VxdWVuY2UuIElmIHRoZSBpbmRleCBjb250YWlucyBhIHN1YmFycmF5LFxuXHRcdCAqICBhIFRvbmUuU2VxdWVuY2UgcmVwcmVzZW50aW5nIHRoYXQgc3ViLWFycmF5IHdpbGwgYmUgcmV0dXJuZWQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNlcXVlbmNlID0gbmV3IFRvbmUuU2VxdWVuY2UocGxheU5vdGUsIFtcIkU0XCIsIFwiQzRcIiwgXCJGIzRcIiwgW1wiQTRcIiwgXCJCYjNcIl1dKVxuXHRcdCAqIHNlcXVlbmNlLmF0KDApLy8gPT4gcmV0dXJucyBcIkU0XCJcblx0XHQgKiAvL3NldCBhIHZhbHVlXG5cdFx0ICogc2VxdWVuY2UuYXQoMCwgXCJHM1wiKTtcblx0XHQgKiAvL2dldCBhIG5lc3RlZCBzZXF1ZW5jZVxuXHRcdCAqIHNlcXVlbmNlLmF0KDMpLmF0KDEpLy8gPT4gcmV0dXJucyBcIkJiM1wiXG5cdFx0ICogQHBhcmFtIHtQb3NpdGl2ZX0gaW5kZXggVGhlIGluZGV4IHRvIGdldCBvciBzZXRcblx0XHQgKiBAcGFyYW0geyp9IHZhbHVlIE9wdGlvbmFsbHkgcGFzcyBpbiB0aGUgdmFsdWUgdG8gc2V0IGF0IHRoZSBnaXZlbiBpbmRleC5cblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UucHJvdG90eXBlLmF0ID0gZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkge1xuXHQgICAgICAgIC8vaWYgdGhlIHZhbHVlIGlzIGFuIGFycmF5LFxuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkodmFsdWUpKSB7XG5cdCAgICAgICAgICAgIC8vcmVtb3ZlIHRoZSBjdXJyZW50IGV2ZW50IGF0IHRoYXQgaW5kZXhcblx0ICAgICAgICAgICAgdGhpcy5yZW1vdmUoaW5kZXgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NhbGwgdGhlIHBhcmVudCdzIG1ldGhvZFxuXHQgICAgICAgIHJldHVybiBUb25lLlBhcnQucHJvdG90eXBlLmF0LmNhbGwodGhpcywgdGhpcy5faW5kZXhUaW1lKGluZGV4KSwgdmFsdWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYW4gZXZlbnQgYXQgYW4gaW5kZXgsIGlmIHRoZXJlJ3MgYWxyZWFkeSBzb21ldGhpbmdcblx0XHQgKiAgYXQgdGhhdCBpbmRleCwgb3ZlcndyaXRlIGl0LiBJZiBgdmFsdWVgIGlzIGFuIGFycmF5LFxuXHRcdCAqICBpdCB3aWxsIGJlIHBhcnNlZCBhcyBhIHN1YnNlcXVlbmNlLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gaW5kZXggVGhlIGluZGV4IHRvIGFkZCB0aGUgZXZlbnQgdG9cblx0XHQgKiAgQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYWRkIGF0IHRoYXQgaW5kZXhcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2VxdWVuY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChpbmRleCwgdmFsdWUpIHtcblx0ICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkodmFsdWUpKSB7XG5cdCAgICAgICAgICAgIC8vbWFrZSBhIHN1YnNlcXVlbmNlIGFuZCBhZGQgdGhhdCB0byB0aGUgc2VxdWVuY2Vcblx0ICAgICAgICAgICAgdmFyIHN1YlN1YmRpdmlzaW9uID0gTWF0aC5yb3VuZCh0aGlzLl9zdWJkaXZpc2lvbiAvIHZhbHVlLmxlbmd0aCk7XG5cdCAgICAgICAgICAgIHZhbHVlID0gbmV3IFRvbmUuU2VxdWVuY2UodGhpcy5fdGljay5iaW5kKHRoaXMpLCB2YWx1ZSwgVG9uZS5UaWNrcyhzdWJTdWJkaXZpc2lvbikpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLlBhcnQucHJvdG90eXBlLmFkZC5jYWxsKHRoaXMsIHRoaXMuX2luZGV4VGltZShpbmRleCksIHZhbHVlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIGEgdmFsdWUgZnJvbSB0aGUgc2VxdWVuY2UgYnkgaW5kZXhcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZXZlbnQgdG8gcmVtb3ZlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNlcXVlbmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7XG5cdCAgICAgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5yZW1vdmUuY2FsbCh0aGlzLCB0aGlzLl9pbmRleFRpbWUoaW5kZXgpLCB2YWx1ZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgdGltZSBvZiB0aGUgaW5kZXggZ2l2ZW4gdGhlIFNlcXVlbmNlJ3Mgc3ViZGl2aXNpb25cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgaW5kZXhcblx0XHQgKiAgQHJldHVybiAge1RpbWV9ICBUaGUgdGltZSBvZiB0aGF0IGluZGV4XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLnByb3RvdHlwZS5faW5kZXhUaW1lID0gZnVuY3Rpb24gKGluZGV4KSB7XG5cdCAgICAgICAgaWYgKGluZGV4IGluc3RhbmNlb2YgVG9uZS5UcmFuc3BvcnRUaW1lKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBpbmRleDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyhpbmRleCAqIHRoaXMuX3N1YmRpdmlzaW9uICsgdGhpcy5zdGFydE9mZnNldCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5TZXF1ZW5jZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlBhcnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TZXF1ZW5jZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUHVsc2VPc2NpbGxhdG9yIGlzIGEgcHVsc2Ugb3NjaWxsYXRvciB3aXRoIGNvbnRyb2wgb3ZlciBwdWxzZSB3aWR0aCxcblx0XHQgKiAgICAgICAgIGFsc28ga25vd24gYXMgdGhlIGR1dHkgY3ljbGUuIEF0IDUwJSBkdXR5IGN5Y2xlICh3aWR0aCA9IDAuNSkgdGhlIHdhdmUgaXNcblx0XHQgKiAgICAgICAgIGEgc3F1YXJlIGFuZCBvbmx5IG9kZC1udW1iZXJlZCBoYXJtb25pY3MgYXJlIHByZXNlbnQuIEF0IGFsbCBvdGhlciB3aWR0aHNcblx0XHQgKiAgICAgICAgIGV2ZW4tbnVtYmVyZWQgaGFybW9uaWNzIGFyZSBwcmVzZW50LiBSZWFkIG1vcmVcblx0XHQgKiAgICAgICAgIFtoZXJlXShodHRwczovL3dpZ2dsZXdhdmUud29yZHByZXNzLmNvbS8yMDE0LzA4LzE2L3B1bHNlLXdhdmVmb3Jtcy1hbmQtaGFybW9uaWNzLykuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IFtmcmVxdWVuY3ldIFRoZSBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3dpZHRoXSBUaGUgd2lkdGggb2YgdGhlIHB1bHNlXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHB1bHNlID0gbmV3IFRvbmUuUHVsc2VPc2NpbGxhdG9yKFwiRTVcIiwgMC40KS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnd2lkdGgnXG5cdCAgICAgICAgXSwgVG9uZS5Pc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB3aWR0aCBvZiB0aGUgcHVsc2UuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMud2lkdGggPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy53aWR0aCwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBnYXRlIHRoZSB3aWR0aCBhbW91bnRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl93aWR0aEdhdGUgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHNhd3Rvb3RoIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zYXd0b290aCA9IG5ldyBUb25lLk9zY2lsbGF0b3Ioe1xuXHQgICAgICAgICAgICBmcmVxdWVuY3k6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICBkZXR1bmU6IG9wdGlvbnMuZGV0dW5lLFxuXHQgICAgICAgICAgICB0eXBlOiAnc2F3dG9vdGgnLFxuXHQgICAgICAgICAgICBwaGFzZTogb3B0aW9ucy5waGFzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fc2F3dG9vdGguZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgaW4gY2VudHMuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5fc2F3dG9vdGguZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRocmVzaG9sZCB0aGUgc2lnbmFsIHRvIHR1cm4gaXQgaW50byBhIHNxdWFyZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RocmVzaCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBpZiAodmFsIDwgMCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGguY2hhaW4odGhpcy5fdGhyZXNoLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy53aWR0aC5jaGFpbih0aGlzLl93aWR0aEdhdGUsIHRoaXMuX3RocmVzaCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnd2lkdGgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlB1bHNlT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHBhcmFtZXRlcnMuXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ3dpZHRoJzogMC4yXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zYXd0b290aC5zdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl93aWR0aEdhdGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgxLCB0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zYXd0b290aC5zdG9wKHRpbWUpO1xuXHQgICAgICAgIC8vdGhlIHdpZHRoIGlzIHN0aWxsIGNvbm5lY3RlZCB0byB0aGUgb3V0cHV0LlxuXHQgICAgICAgIC8vdGhhdCBuZWVkcyB0byBiZSBzdG9wcGVkIGFsc29cblx0ICAgICAgICB0aGlzLl93aWR0aEdhdGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgcmVzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUHVsc2VPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zYXd0b290aC5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Nhd3Rvb3RoLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvci4gQWx3YXlzIHJldHVybnMgXCJwdWxzZVwiLlxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlB1bHNlT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gJ3B1bHNlJztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwYXJ0aWFscyBvZiB0aGUgd2F2ZWZvcm0uIENhbm5vdCBzZXQgcGFydGlhbHMgZm9yIHRoaXMgd2F2ZWZvcm0gdHlwZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlB1bHNlT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BhcnRpYWxzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gW107XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAgbWV0aG9kLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlB1bHNlT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zYXd0b290aC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGggPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3dpZHRoJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy53aWR0aC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy53aWR0aCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl93aWR0aEdhdGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RocmVzaC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGhyZXNoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlB1bHNlT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUFdNT3NjaWxsYXRvciBtb2R1bGF0ZXMgdGhlIHdpZHRoIG9mIGEgVG9uZS5QdWxzZU9zY2lsbGF0b3Jcblx0XHQgKiAgICAgICAgIGF0IHRoZSBtb2R1bGF0aW9uRnJlcXVlbmN5LiBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIGNvbnRpbnVvdXNseVxuXHRcdCAqICAgICAgICAgY2hhbmdpbmcgdGhlIHRpbWJyZSBvZiB0aGUgb3NjaWxsYXRvciBieSBhbHRlcmluZyB0aGUgaGFybW9uaWNzXG5cdFx0ICogICAgICAgICBnZW5lcmF0ZWQuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgc3RhcnRpbmcgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gbW9kdWxhdGlvbkZyZXF1ZW5jeSBUaGUgbW9kdWxhdGlvbiBmcmVxdWVuY3kgb2YgdGhlIHdpZHRoIG9mIHRoZSBwdWxzZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIHB3bSA9IG5ldyBUb25lLlBXTU9zY2lsbGF0b3IoXCJBYjNcIiwgMC4zKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25GcmVxdWVuY3knXG5cdCAgICAgICAgXSwgVG9uZS5QV01Pc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwdWxzZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuUHVsc2VPc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wdWxzZSA9IG5ldyBUb25lLlB1bHNlT3NjaWxsYXRvcihvcHRpb25zLm1vZHVsYXRpb25GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vY2hhbmdlIHRoZSBwdWxzZSBvc2NpbGxhdG9yIHR5cGVcblx0ICAgICAgICB0aGlzLl9wdWxzZS5fc2F3dG9vdGgudHlwZSA9ICdzaW5lJztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbW9kdWxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcih7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2RldHVuZSc6IG9wdGlvbnMuZGV0dW5lLFxuXHQgICAgICAgICAgICAncGhhc2UnOiBvcHRpb25zLnBoYXNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2NhbGUgdGhlIG9zY2lsbGF0b3Igc28gaXQgZG9lc24ndCBnbyBzaWxlbnRcblx0XHRcdCAqICBhdCB0aGUgZXh0cmVtZSB2YWx1ZXMuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbmV3IFRvbmUuTXVsdGlwbHkoMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9tb2R1bGF0b3IuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5fbW9kdWxhdG9yLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdGlvbiByYXRlIG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRnJlcXVlbmN5ID0gdGhpcy5fcHVsc2UuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY2hhaW4odGhpcy5fc2NhbGUsIHRoaXMuX3B1bHNlLndpZHRoKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QV01Pc2NpbGxhdG9yLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ21vZHVsYXRpb25GcmVxdWVuY3knOiAwLjRcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2Uuc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZS5zdG9wKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICByZXN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3IuIEFsd2F5cyByZXR1cm5zIFwicHdtXCIuXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUFdNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuICdwd20nO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSB3YXZlZm9ybS4gQ2Fubm90IHNldCBwYXJ0aWFscyBmb3IgdGhpcyB3YXZlZm9ybSB0eXBlXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUFdNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFtdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUFdNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9kdWxhdG9yLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUFdNT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25GcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBXTU9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkZNT3NjaWxsYXRvclxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IG1vZHVsYXRpb25UeXBlIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Egc2luZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeS1tb2R1bGF0ZWQgYnkgYSBzcXVhcmUgd2F2ZVxuXHRcdCAqIHZhciBmbU9zYyA9IG5ldyBUb25lLkZNT3NjaWxsYXRvcihcIkFiM1wiLCBcInNpbmVcIiwgXCJzcXVhcmVcIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvblR5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5GTU9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKG9wdGlvbnMuZnJlcXVlbmN5LCBvcHRpb25zLnR5cGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yJ3MgZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLl9jYXJyaWVyLmRldHVuZTtcblx0ICAgICAgICB0aGlzLmRldHVuZS52YWx1ZSA9IG9wdGlvbnMuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0aW9uIGluZGV4IHdoaWNoIGlzIGluIGVzc2VuY2UgdGhlIGRlcHRoIG9yIGFtb3VudCBvZiB0aGUgbW9kdWxhdGlvbi4gSW4gb3RoZXIgdGVybXMgaXQgaXMgdGhlXG5cdFx0XHQgKiAgcmF0aW8gb2YgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgbW9kdWxhdGluZyBzaWduYWwgKG1mKSB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZVxuXHRcdFx0ICogIG1vZHVsYXRpbmcgc2lnbmFsIChtYSkgLS0gYXMgaW4gbWEvbWYuXG5cdFx0XHQgKlx0QHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICpcdEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5tb2R1bGF0aW9uSW5kZXgpO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0aW5nIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcihvcHRpb25zLmZyZXF1ZW5jeSwgb3B0aW9ucy5tb2R1bGF0aW9uVHlwZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIGZyZXF1ZW5jeSByYXRpbyBiZXR3ZWVuIHRoZSBjYXJyaWVyIGFuZCB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3JzLlxuXHRcdFx0ICogIEEgaGFybW9uaWNpdHkgb2YgMSBnaXZlcyBib3RoIG9zY2lsbGF0b3JzIHRoZSBzYW1lIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vcGl0Y2ggdGhlIG1vZHVsYXRvciBhbiBvY3RhdmUgYmVsb3cgY2FycmllclxuXHRcdFx0ICogc3ludGguaGFybW9uaWNpdHkudmFsdWUgPSAwLjU7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5oYXJtb25pY2l0eSk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbm9kZSB3aGVyZSB0aGUgbW9kdWxhdGlvbiBoYXBwZW5zXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBuZXcgVG9uZS5HYWluKDApO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLmhhcm1vbmljaXR5LCB0aGlzLl9tb2R1bGF0b3IuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLm1vZHVsYXRpb25JbmRleCwgdGhpcy5fbW9kdWxhdGlvbk5vZGUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5jb25uZWN0KHRoaXMuX21vZHVsYXRpb25Ob2RlLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlLmNvbm5lY3QodGhpcy5fY2Fycmllci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdCh0aGlzLl9tb2R1bGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLnBoYXNlID0gb3B0aW9ucy5waGFzZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZNT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ21vZHVsYXRpb25JbmRleCc6IDIsXG5cdCAgICAgICAgJ21vZHVsYXRpb25UeXBlJzogJ3NxdWFyZScsXG5cdCAgICAgICAgJ2hhcm1vbmljaXR5JzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnN0b3AodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IucmVzdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRk1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogQG5hbWUgbW9kdWxhdGlvblR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uVHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vZHVsYXRvci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9tb2R1bGF0b3IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhcnJpZXIucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIGNhcnJpZXIgd2F2ZWZvcm0uIEEgcGFydGlhbCByZXByZXNlbnRzXG5cdFx0ICogdGhlIGFtcGxpdHVkZSBhdCBhIGhhcm1vbmljLiBUaGUgZmlyc3QgaGFybW9uaWMgaXMgdGhlXG5cdFx0ICogZnVuZGFtZW50YWwgZnJlcXVlbmN5LCB0aGUgc2Vjb25kIGlzIHRoZSBvY3RhdmUgYW5kIHNvIG9uXG5cdFx0ICogZm9sbG93aW5nIHRoZSBoYXJtb25pYyBzZXJpZXMuXG5cdFx0ICogU2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlIHR5cGUgdG8gXCJjdXN0b21cIi5cblx0XHQgKiBUaGUgdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGUgdHlwZSBpcyBub3QgXCJjdXN0b21cIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGFydGlhbHMgPSBbMSwgMC4yLCAwLjAxXTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIucGFydGlhbHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnBhcnRpYWxzID0gcGFydGlhbHM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuRk1Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25JbmRleCcsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRk1Pc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5BTU9zY2lsbGF0b3Jcblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgc3RhcnRpbmcgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgdHlwZSBvZiB0aGUgY2FycmllciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gbW9kdWxhdGlvblR5cGUgVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSBzaW5lIG9zY2lsbGF0b3IgZnJlcXVlbmN5LW1vZHVsYXRlZCBieSBhIHNxdWFyZSB3YXZlXG5cdFx0ICogdmFyIGZtT3NjID0gbmV3IFRvbmUuQU1Pc2NpbGxhdG9yKFwiQWIzXCIsIFwic2luZVwiLCBcInNxdWFyZVwiKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uVHlwZSdcblx0ICAgICAgICBdLCBUb25lLkFNT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllciBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG5ldyBUb25lLk9zY2lsbGF0b3Iob3B0aW9ucy5mcmVxdWVuY3ksIG9wdGlvbnMudHlwZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IncyBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fY2Fycmllci5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLl9jYXJyaWVyLmRldHVuZTtcblx0ICAgICAgICB0aGlzLmRldHVuZS52YWx1ZSA9IG9wdGlvbnMuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0aW5nIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcihvcHRpb25zLmZyZXF1ZW5jeSwgb3B0aW9ucy5tb2R1bGF0aW9uVHlwZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29udmVydCB0aGUgLTEsMSBvdXRwdXQgdG8gMCwxXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQXVkaW9Ub0dhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZSA9IG5ldyBUb25lLkF1ZGlvVG9HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIGZyZXF1ZW5jeSByYXRpbyBiZXR3ZWVuIHRoZSBjYXJyaWVyIGFuZCB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3JzLlxuXHRcdFx0ICogIEEgaGFybW9uaWNpdHkgb2YgMSBnaXZlcyBib3RoIG9zY2lsbGF0b3JzIHRoZSBzYW1lIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vcGl0Y2ggdGhlIG1vZHVsYXRvciBhbiBvY3RhdmUgYmVsb3cgY2FycmllclxuXHRcdFx0ICogc3ludGguaGFybW9uaWNpdHkudmFsdWUgPSAwLjU7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5oYXJtb25pY2l0eSk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbm9kZSB3aGVyZSB0aGUgbW9kdWxhdGlvbiBoYXBwZW5zXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBuZXcgVG9uZS5HYWluKDApO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLmhhcm1vbmljaXR5LCB0aGlzLl9tb2R1bGF0b3IuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KHRoaXMuX21vZHVsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5jaGFpbih0aGlzLl9tb2R1bGF0aW9uU2NhbGUsIHRoaXMuX21vZHVsYXRpb25Ob2RlLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuY2hhaW4odGhpcy5fbW9kdWxhdGlvbk5vZGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLnBoYXNlID0gb3B0aW9ucy5waGFzZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQU1Pc2NpbGxhdG9yLCBUb25lLk9zY2lsbGF0b3IpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ21vZHVsYXRpb25UeXBlJzogJ3NxdWFyZScsXG5cdCAgICAgICAgJ2hhcm1vbmljaXR5JzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnN0b3AodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHJlc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IucmVzdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkFNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQU1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgbW9kdWxhdGlvblR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uVHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vZHVsYXRvci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9tb2R1bGF0b3IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhcnJpZXIucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIGNhcnJpZXIgd2F2ZWZvcm0uIEEgcGFydGlhbCByZXByZXNlbnRzXG5cdFx0ICogdGhlIGFtcGxpdHVkZSBhdCBhIGhhcm1vbmljLiBUaGUgZmlyc3QgaGFybW9uaWMgaXMgdGhlXG5cdFx0ICogZnVuZGFtZW50YWwgZnJlcXVlbmN5LCB0aGUgc2Vjb25kIGlzIHRoZSBvY3RhdmUgYW5kIHNvIG9uXG5cdFx0ICogZm9sbG93aW5nIHRoZSBoYXJtb25pYyBzZXJpZXMuXG5cdFx0ICogU2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlIHR5cGUgdG8gXCJjdXN0b21cIi5cblx0XHQgKiBUaGUgdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGUgdHlwZSBpcyBub3QgXCJjdXN0b21cIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGFydGlhbHMgPSBbMSwgMC4yLCAwLjAxXTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIucGFydGlhbHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnBhcnRpYWxzID0gcGFydGlhbHM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQU1Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQU1Pc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5GYXRPc2NpbGxhdG9yXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgc3RhcnRpbmcgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgdHlwZSBvZiB0aGUgY2FycmllciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gbW9kdWxhdGlvblR5cGUgVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSBzaW5lIG9zY2lsbGF0b3IgZnJlcXVlbmN5LW1vZHVsYXRlZCBieSBhIHNxdWFyZSB3YXZlXG5cdFx0ICogdmFyIGZtT3NjID0gbmV3IFRvbmUuRmF0T3NjaWxsYXRvcihcIkFiM1wiLCBcInNpbmVcIiwgXCJzcXVhcmVcIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJyxcblx0ICAgICAgICAgICAgJ3NwcmVhZCdcblx0ICAgICAgICBdLCBUb25lLkZhdE9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IncyBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2wgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYXJyYXkgb2Ygb3NjaWxsYXRvcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRvdGFsIHNwcmVhZCBvZiB0aGUgb3NjaWxsYXRvcnNcblx0XHRcdCAqICBAdHlwZSAge0NlbnRzfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcHJlYWQgPSBvcHRpb25zLnNwcmVhZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yc1xuXHRcdFx0ICogIEB0eXBlIHtEZWdyZWVzfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBhcnRpYWxzIGFycmF5XG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLnBhcnRpYWxzLCBbXSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGNvdW50IGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMuY291bnQgPSBvcHRpb25zLmNvdW50O1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GYXRPc2NpbGxhdG9yLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ3NwcmVhZCc6IDIwLFxuXHQgICAgICAgICdjb3VudCc6IDMsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2F3dG9vdGgnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5zdGFydCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICByZXN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLnJlc3RhcnQodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBhbGwgb2YgdGhlIG9zY2lsbGF0b3JzXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgaXRlcmF0b3IgIFRoZSBpdGVyYXRvciBmdW5jdGlvblxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZS5fZm9yRWFjaCA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgaXRlcmF0b3IuY2FsbCh0aGlzLCB0aGlzLl9vc2NpbGxhdG9yc1tpXSwgaSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3Jcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgb3NjLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZXR1bmUgc3ByZWFkIGJldHdlZW4gdGhlIG9zY2lsbGF0b3JzLiBJZiBcImNvdW50XCIgaXNcblx0XHQgKiBzZXQgdG8gMyBvc2NpbGxhdG9ycyBhbmQgdGhlIFwic3ByZWFkXCIgaXMgc2V0IHRvIDQwLFxuXHRcdCAqIHRoZSB0aHJlZSBvc2NpbGxhdG9ycyB3b3VsZCBiZSBkZXR1bmVkIGxpa2UgdGhpczogWy0yMCwgMCwgMjBdXG5cdFx0ICogZm9yIGEgdG90YWwgZGV0dW5lIHNwcmVhZCBvZiA0MCBjZW50cy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtDZW50c31cblx0XHQgKiBAbmFtZSBzcHJlYWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLCAnc3ByZWFkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3ByZWFkO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3ByZWFkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NwcmVhZCA9IHNwcmVhZDtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aCA+IDEpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IC1zcHJlYWQgLyAyO1xuXHQgICAgICAgICAgICAgICAgdmFyIHN0ZXAgPSBzcHJlYWQgLyAodGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MsIGkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvc2MuZGV0dW5lLnZhbHVlID0gc3RhcnQgKyBzdGVwICogaTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbnVtYmVyIG9mIGRldHVuZWQgb3NjaWxsYXRvcnNcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgY291bnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLCAnY291bnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjb3VudCkge1xuXHQgICAgICAgICAgICBjb3VudCA9IE1hdGgubWF4KGNvdW50LCAxKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aCAhPT0gY291bnQpIHtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBwYXJ0aWFscyA9IHRoaXMucGFydGlhbHM7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgdHlwZSA9IHRoaXMudHlwZTtcblx0ICAgICAgICAgICAgICAgIC8vZGlzcG9zZSB0aGUgcHJldmlvdXMgb3NjaWxsYXRvcnNcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgICAgIG9zYy5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzID0gW107XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBvc2MucGFydGlhbHMgPSB0aGlzLl9wYXJ0aWFscztcblx0ICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBvc2MudHlwZSA9IHRoaXMuX3R5cGU7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIG9zYy5waGFzZSA9IHRoaXMuX3BoYXNlO1xuXHQgICAgICAgICAgICAgICAgICAgIG9zYy52b2x1bWUudmFsdWUgPSAtNiAtIGNvdW50ICogMS4xO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3Qob3NjLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdChvc2MuZGV0dW5lKTtcblx0ICAgICAgICAgICAgICAgICAgICBvc2MuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnNbaV0gPSBvc2M7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAvL3NldCB0aGUgc3ByZWFkXG5cdCAgICAgICAgICAgICAgICB0aGlzLnNwcmVhZCA9IHRoaXMuX3NwcmVhZDtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgb3NjLnN0YXJ0KCk7XG5cdCAgICAgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZhdE9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgICAgICBvc2MucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIGNhcnJpZXIgd2F2ZWZvcm0uIEEgcGFydGlhbCByZXByZXNlbnRzXG5cdFx0ICogdGhlIGFtcGxpdHVkZSBhdCBhIGhhcm1vbmljLiBUaGUgZmlyc3QgaGFybW9uaWMgaXMgdGhlXG5cdFx0ICogZnVuZGFtZW50YWwgZnJlcXVlbmN5LCB0aGUgc2Vjb25kIGlzIHRoZSBvY3RhdmUgYW5kIHNvIG9uXG5cdFx0ICogZm9sbG93aW5nIHRoZSBoYXJtb25pYyBzZXJpZXMuXG5cdFx0ICogU2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlIHR5cGUgdG8gXCJjdXN0b21cIi5cblx0XHQgKiBUaGUgdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGUgdHlwZSBpcyBub3QgXCJjdXN0b21cIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBhcnRpYWxzID0gWzEsIDAuMiwgMC4wMV07XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BhcnRpYWxzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFydGlhbHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgIG9zYy5wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5GYXRPc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZhdE9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLk9tbmlPc2NpbGxhdG9yIGFnZ3JlZ2F0ZXMgVG9uZS5Pc2NpbGxhdG9yLCBUb25lLlB1bHNlT3NjaWxsYXRvcixcblx0XHQgKiAgICAgICAgIFRvbmUuUFdNT3NjaWxsYXRvciwgVG9uZS5GTU9zY2lsbGF0b3IsIFRvbmUuQU1Pc2NpbGxhdG9yLCBhbmQgVG9uZS5GYXRPc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICBpbnRvIG9uZSBjbGFzcy4gVGhlIG9zY2lsbGF0b3IgY2xhc3MgY2FuIGJlIGNoYW5nZWQgYnkgc2V0dGluZyB0aGUgYHR5cGVgLlxuXHRcdCAqICAgICAgICAgYG9tbmlPc2MudHlwZSA9IFwicHdtXCJgIHdpbGwgc2V0IGl0IHRvIHRoZSBUb25lLlBXTU9zY2lsbGF0b3IuIFByZWZpeGluZ1xuXHRcdCAqICAgICAgICAgYW55IG9mIHRoZSBiYXNpYyB0eXBlcyAoXCJzaW5lXCIsIFwic3F1YXJlNFwiLCBldGMuKSB3aXRoIFwiZm1cIiwgXCJhbVwiLCBvciBcImZhdFwiXG5cdFx0ICogICAgICAgICB3aWxsIHVzZSB0aGUgRk1Pc2NpbGxhdG9yLCBBTU9zY2lsbGF0b3Igb3IgRmF0T3NjaWxsYXRvciByZXNwZWN0aXZlbHkuXG5cdFx0ICogICAgICAgICBGb3IgZXhhbXBsZTogYG9tbmlPc2MudHlwZSA9IFwiZmF0c2F3dG9vdGhcImAgd2lsbCBjcmVhdGUgc2V0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICB0byBhIEZhdE9zY2lsbGF0b3Igb2YgdHlwZSBcInNhd3Rvb3RoXCIuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgaW5pdGlhbCBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgb21uaU9zYyA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKFwiQyM0XCIsIFwicHdtXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZSdcblx0ICAgICAgICBdLCBUb25lLk9tbmlPc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2xcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3Igc291cmNlXG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlVHlwZSA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIC8vc2V0IHRoZSBvc2NpbGxhdG9yXG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIG9wdGlvbnNcblx0ICAgICAgICB0aGlzLnNldChvcHRpb25zKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk9tbmlPc2NpbGxhdG9yLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAncGhhc2UnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICB2YXIgT21uaU9zY1R5cGUgPSB7XG5cdCAgICAgICAgUHVsc2U6ICdQdWxzZU9zY2lsbGF0b3InLFxuXHQgICAgICAgIFBXTTogJ1BXTU9zY2lsbGF0b3InLFxuXHQgICAgICAgIE9zYzogJ09zY2lsbGF0b3InLFxuXHQgICAgICAgIEZNOiAnRk1Pc2NpbGxhdG9yJyxcblx0ICAgICAgICBBTTogJ0FNT3NjaWxsYXRvcicsXG5cdCAgICAgICAgRmF0OiAnRmF0T3NjaWxsYXRvcidcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRvIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0byBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3IuIENhbiBiZSBhbnkgb2YgdGhlIGJhc2ljIHR5cGVzOiBzaW5lLCBzcXVhcmUsIHRyaWFuZ2xlLCBzYXd0b290aC4gT3Jcblx0XHQgKiBwcmVmaXggdGhlIGJhc2ljIHR5cGVzIHdpdGggXCJmbVwiLCBcImFtXCIsIG9yIFwiZmF0XCIgdG8gdXNlIHRoZSBGTU9zY2lsbGF0b3IsIEFNT3NjaWxsYXRvciBvciBGYXRPc2NpbGxhdG9yXG5cdFx0ICogdHlwZXMuIFRoZSBvc2NpbGxhdG9yIGNvdWxkIGFsc28gYmUgc2V0IHRvIFwicHdtXCIgb3IgXCJwdWxzZVwiLiBBbGwgb2YgdGhlIHBhcmFtZXRlcnMgb2YgdGhlXG5cdFx0ICogb3NjaWxsYXRvcidzIGNsYXNzIGFyZSBhY2Nlc3NpYmxlIHdoZW4gdGhlIG9zY2lsbGF0b3IgaXMgc2V0IHRvIHRoYXQgdHlwZSwgYnV0IHRocm93cyBhbiBlcnJvclxuXHRcdCAqIHdoZW4gaXQncyBub3QuXG5cdFx0ICpcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9tbmlPc2MudHlwZSA9IFwicHdtXCI7XG5cdFx0ICogLy9tb2R1bGF0aW9uRnJlcXVlbmN5IGlzIHBhcmFtZXRlciB3aGljaCBpcyBhdmFpbGFibGVcblx0XHQgKiAvL29ubHkgd2hlbiB0aGUgdHlwZSBpcyBcInB3bVwiLlxuXHRcdCAqIG9tbmlPc2MubW9kdWxhdGlvbkZyZXF1ZW5jeS52YWx1ZSA9IDAuNTtcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vYW4gc3F1YXJlIHdhdmUgZnJlcXVlbmN5IG1vZHVsYXRlZCBieSBhIHNhd3Rvb3RoXG5cdFx0ICogb21uaU9zYy50eXBlID0gXCJmbXNxdWFyZVwiO1xuXHRcdCAqIG9tbmlPc2MubW9kdWxhdGlvblR5cGUgPSBcInNhd3Rvb3RoXCI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgcHJlZml4ID0gJyc7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GTSkge1xuXHQgICAgICAgICAgICAgICAgcHJlZml4ID0gJ2ZtJztcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5BTSkge1xuXHQgICAgICAgICAgICAgICAgcHJlZml4ID0gJ2FtJztcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GYXQpIHtcblx0ICAgICAgICAgICAgICAgIHByZWZpeCA9ICdmYXQnO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyB0aGlzLl9vc2NpbGxhdG9yLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIGlmICh0eXBlLnN1YnN0cigwLCAyKSA9PT0gJ2ZtJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5GTSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlLnN1YnN0cigyKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlLnN1YnN0cigwLCAyKSA9PT0gJ2FtJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5BTSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlLnN1YnN0cigyKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlLnN1YnN0cigwLCAzKSA9PT0gJ2ZhdCcpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuRmF0KTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHR5cGUuc3Vic3RyKDMpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdwd20nKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdPc2NpbGxhdG9yKE9tbmlPc2NUeXBlLlBXTSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3B1bHNlJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5QdWxzZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdPc2NpbGxhdG9yKE9tbmlPc2NUeXBlLk9zYyk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogVGhpcyBpcyBub3QgYXZhaWxhYmxlIG9uIFwicHdtXCIgYW5kIFwicHVsc2VcIiBvc2NpbGxhdG9yIHR5cGVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBhcnRpYWxzID0gWzEsIDAuMiwgMC4wMV07XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IucGFydGlhbHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnBhcnRpYWxzID0gcGFydGlhbHM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IGEgbWVtYmVyL2F0dHJpYnV0ZSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBwYXJhbXNcblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSByYW1wVGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5PbW5pT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHBhcmFtcywgdmFsdWUpIHtcblx0ICAgICAgICAvL21ha2Ugc3VyZSB0aGUgdHlwZSBpcyBzZXQgZmlyc3Rcblx0ICAgICAgICBpZiAocGFyYW1zID09PSAndHlwZScpIHtcblx0ICAgICAgICAgICAgdGhpcy50eXBlID0gdmFsdWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzT2JqZWN0KHBhcmFtcykgJiYgcGFyYW1zLmhhc093blByb3BlcnR5KCd0eXBlJykpIHtcblx0ICAgICAgICAgICAgdGhpcy50eXBlID0gcGFyYW1zLnR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vdGhlbiBzZXQgdGhlIHJlc3Rcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5zZXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY29ubmVjdCB0aGUgb3NjaWxsYXRvciB0byB0aGUgZnJlcXVlbmN5IGFuZCBkZXR1bmUgc2lnbmFsc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUuX2NyZWF0ZU5ld09zY2lsbGF0b3IgPSBmdW5jdGlvbiAob3NjVHlwZSkge1xuXHQgICAgICAgIGlmIChvc2NUeXBlICE9PSB0aGlzLl9zb3VyY2VUeXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZVR5cGUgPSBvc2NUeXBlO1xuXHQgICAgICAgICAgICB2YXIgT3NjaWxsYXRvckNvbnN0cnVjdG9yID0gVG9uZVtvc2NUeXBlXTtcblx0ICAgICAgICAgICAgLy9zaG9ydCBkZWxheSB0byBhdm9pZCBjbGlja3Mgb24gdGhlIGNoYW5nZVxuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3IgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBvbGRPc2MgPSB0aGlzLl9vc2NpbGxhdG9yO1xuXHQgICAgICAgICAgICAgICAgb2xkT3NjLnN0b3Aobm93KTtcblx0ICAgICAgICAgICAgICAgIC8vZGlzcG9zZSB0aGUgb2xkIG9uZVxuXHQgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIG9sZE9zYy5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgb2xkT3NjID0gbnVsbDtcblx0ICAgICAgICAgICAgICAgIH0sIHRoaXMuYmxvY2tUaW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbmV3IE9zY2lsbGF0b3JDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX29zY2lsbGF0b3IuZnJlcXVlbmN5KTtcblx0ICAgICAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdCh0aGlzLl9vc2NpbGxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RhcnQobm93KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHdpZHRoIG9mIHRoZSBvc2NpbGxhdG9yIChvbmx5IGlmIHRoZSBvc2NpbGxhdG9yIGlzIHNldCB0byBcInB1bHNlXCIpXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqIEBzaWduYWxcblx0XHQgKiBAbmFtZSB3aWR0aFxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIG9tbmlPc2MgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcig0NDAsIFwicHVsc2VcIik7XG5cdFx0ICogLy9jYW4gYWNjZXNzIHRoZSB3aWR0aCBhdHRyaWJ1dGUgb25seSBpZiB0eXBlID09PSBcInB1bHNlXCJcblx0XHQgKiBvbW5pT3NjLndpZHRoLnZhbHVlID0gMC4yO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnd2lkdGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5QdWxzZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3Iud2lkdGg7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2YgZGV0dW5lZCBvc2NpbGxhdG9yc1xuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgY291bnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ2NvdW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRmF0KSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5jb3VudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoY291bnQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZhdCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5jb3VudCA9IGNvdW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGV0dW5lIHNwcmVhZCBiZXR3ZWVuIHRoZSBvc2NpbGxhdG9ycy4gSWYgXCJjb3VudFwiIGlzXG5cdFx0ICogc2V0IHRvIDMgb3NjaWxsYXRvcnMgYW5kIHRoZSBcInNwcmVhZFwiIGlzIHNldCB0byA0MCxcblx0XHQgKiB0aGUgdGhyZWUgb3NjaWxsYXRvcnMgd291bGQgYmUgZGV0dW5lZCBsaWtlIHRoaXM6IFstMjAsIDAsIDIwXVxuXHRcdCAqIGZvciBhIHRvdGFsIGRldHVuZSBzcHJlYWQgb2YgNDAgY2VudHMuIFNlZSBUb25lLkZhdE9zY2lsbGF0b3Jcblx0XHQgKiBmb3IgbW9yZSBpbmZvLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtDZW50c31cblx0XHQgKiBAbmFtZSBzcHJlYWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3NwcmVhZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZhdCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3Iuc3ByZWFkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzcHJlYWQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZhdCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zcHJlYWQgPSBzcHJlYWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvci4gT25seSBpZiB0aGUgb3NjaWxsYXRvclxuXHRcdCAqIGlzIHNldCB0byBcImFtXCIgb3IgXCJmbVwiIHR5cGVzLiBzZWUuIFRvbmUuQU1Pc2NpbGxhdG9yIG9yIFRvbmUuRk1Pc2NpbGxhdG9yXG5cdFx0ICogZm9yIG1vcmUgaW5mby5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBuYW1lIG1vZHVsYXRpb25UeXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uVHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZNIHx8IHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkFNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5tb2R1bGF0aW9uVHlwZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobVR5cGUpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZNIHx8IHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkFNKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLm1vZHVsYXRpb25UeXBlID0gbVR5cGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtb2R1bGF0aW9uIGluZGV4IHdoaWNoIGlzIGluIGVzc2VuY2UgdGhlIGRlcHRoIG9yIGFtb3VudCBvZiB0aGUgbW9kdWxhdGlvbi4gSW4gb3RoZXIgdGVybXMgaXQgaXMgdGhlXG5cdFx0ICogcmF0aW8gb2YgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgbW9kdWxhdGluZyBzaWduYWwgKG1mKSB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZVxuXHRcdCAqIG1vZHVsYXRpbmcgc2lnbmFsIChtYSkgLS0gYXMgaW4gbWEvbWYuXG5cdFx0ICogU2VlIFRvbmUuRk1Pc2NpbGxhdG9yIGZvciBtb3JlIGluZm8uXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBzaWduYWxcblx0XHQgKiBAbmFtZSBtb2R1bGF0aW9uSW5kZXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ21vZHVsYXRpb25JbmRleCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5tb2R1bGF0aW9uSW5kZXg7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBIYXJtb25pY2l0eSBpcyB0aGUgZnJlcXVlbmN5IHJhdGlvIGJldHdlZW4gdGhlIGNhcnJpZXIgYW5kIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvcnMuXG5cdFx0ICogIEEgaGFybW9uaWNpdHkgb2YgMSBnaXZlcyBib3RoIG9zY2lsbGF0b3JzIHRoZSBzYW1lIGZyZXF1ZW5jeS5cblx0XHQgKiAgSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS4gU2VlIFRvbmUuQU1Pc2NpbGxhdG9yIG9yIFRvbmUuRk1Pc2NpbGxhdG9yXG5cdFx0ICogIGZvciBtb3JlIGluZm8uXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqICBAc2lnbmFsXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgaGFybW9uaWNpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ2hhcm1vbmljaXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRk0gfHwgdGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuQU0pIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLmhhcm1vbmljaXR5O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbW9kdWxhdGlvbkZyZXF1ZW5jeSBTaWduYWwgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAob25seSBpZiB0aGUgb3NjaWxsYXRvciB0eXBlIGlzIHNldCB0byBwd20pLiBTZWVcblx0XHQgKiBUb25lLlBXTU9zY2lsbGF0b3IgZm9yIG1vcmUgaW5mby5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqIEBzaWduYWxcblx0XHQgKiBAbmFtZSBtb2R1bGF0aW9uRnJlcXVlbmN5XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiB2YXIgb21uaU9zYyA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKDQ0MCwgXCJwd21cIik7XG5cdFx0ICogLy9jYW4gYWNjZXNzIHRoZSBtb2R1bGF0aW9uRnJlcXVlbmN5IGF0dHJpYnV0ZSBvbmx5IGlmIHR5cGUgPT09IFwicHdtXCJcblx0XHQgKiBvbW5pT3NjLm1vZHVsYXRpb25GcmVxdWVuY3kudmFsdWUgPSAwLjI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uRnJlcXVlbmN5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuUFdNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5tb2R1bGF0aW9uRnJlcXVlbmN5O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuT21uaU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zb3VyY2VUeXBlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5PbW5pT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBCYXNlLWNsYXNzIGZvciBhbGwgaW5zdHJ1bWVudHNcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuSW5zdHJ1bWVudC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3V0cHV0IGFuZCB2b2x1bWUgdHJpbWluZyBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlZvbHVtZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUob3B0aW9ucy52b2x1bWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHZvbHVtZSBvZiB0aGUgb3V0cHV0IGluIGRlY2liZWxzLlxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICogQGV4YW1wbGVcblx0XHRcdCAqIHNvdXJjZS52b2x1bWUudmFsdWUgPSAtNjtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBLZWVwIHRyYWNrIG9mIGFsbCBldmVudHMgc2NoZWR1bGVkIHRvIHRoZSB0cmFuc3BvcnRcblx0XHRcdCAqIHdoZW4gdGhlIGluc3RydW1lbnQgaXMgJ3N5bmNlZCdcblx0XHRcdCAqIEB0eXBlIHtBcnJheTxOdW1iZXI+fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50cyA9IFtdO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuSW5zdHJ1bWVudCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXNcblx0XHQgKiAgQHR5cGUge29iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAvKiogdGhlIHZvbHVtZSBvZiB0aGUgb3V0cHV0IGluIGRlY2liZWxzICovXG5cdCAgICAgICAgJ3ZvbHVtZSc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQGFic3RyYWN0XG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbm90ZSB0aGUgbm90ZSB0byB0cmlnZ2VyXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0byB0cmlnZ2VyIHRoZSBudG9lXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IHRvIHRyaWdnZXIgdGhlIG5vdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IFRvbmUubm9PcDtcblx0ICAgIC8qKlxuXHRcdCAqICBAYWJzdHJhY3Rcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHdoZW4gdG8gdHJpZ2dlciB0aGUgcmVsZWFzZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IFRvbmUubm9PcDtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGluc3RydW1lbnQgdG8gdGhlIFRyYW5zcG9ydC4gQWxsIHN1YnNlcXVlbnQgY2FsbHMgb2Zcblx0XHQgKiBbdHJpZ2dlckF0dGFja10oI3RyaWdnZXJhdHRhY2spIGFuZCBbdHJpZ2dlclJlbGVhc2VdKCN0cmlnZ2VycmVsZWFzZSlcblx0XHQgKiB3aWxsIGJlIHNjaGVkdWxlZCBhbG9uZyB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogaW5zdHJ1bWVudC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIGluc3RydW1lbnQudHJpZ2dlckF0dGFja1JlbGVhc2UoJ0M0JywgJzhuJywgMClcblx0XHQgKiBpbnN0cnVtZW50LnRyaWdnZXJBdHRhY2tSZWxlYXNlKCdFNCcsICc4bicsICc4bicpXG5cdFx0ICogaW5zdHJ1bWVudC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnRzQnLCAnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAxKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFdyYXAgdGhlIGdpdmVuIG1ldGhvZCBzbyB0aGF0IGl0IGNhbiBiZSBzeW5jaHJvbml6ZWRcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbWV0aG9kIFdoaWNoIG1ldGhvZCB0byB3cmFwIGFuZCBzeW5jXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB0aW1lUG9zaXRpb24gV2hhdCBwb3NpdGlvbiB0aGUgdGltZSBhcmd1bWVudCBhcHBlYXJzIGluXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuX3N5bmNNZXRob2QgPSBmdW5jdGlvbiAobWV0aG9kLCB0aW1lUG9zaXRpb24pIHtcblx0ICAgICAgICB2YXIgb3JpZ2luYWxNZXRob2QgPSB0aGlzWydfb3JpZ2luYWxfJyArIG1ldGhvZF0gPSB0aGlzW21ldGhvZF07XG5cdCAgICAgICAgdGhpc1ttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIHZhciB0aW1lID0gYXJnc1t0aW1lUG9zaXRpb25dO1xuXHQgICAgICAgICAgICB2YXIgaWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbiAodCkge1xuXHQgICAgICAgICAgICAgICAgYXJnc1t0aW1lUG9zaXRpb25dID0gdDtcblx0ICAgICAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHQgICAgICAgICAgICB9LmJpbmQodGhpcyksIHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMucHVzaChpZCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFVuc3luYyB0aGUgaW5zdHJ1bWVudCBmcm9tIHRoZSBUcmFuc3BvcnRcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnQuY2xlYXIoaWQpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50cyA9IFtdO1xuXHQgICAgICAgIGlmICh0aGlzLl9vcmlnaW5hbF90cmlnZ2VyQXR0YWNrKSB7XG5cdCAgICAgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayA9IHRoaXMuX29yaWdpbmFsX3RyaWdnZXJBdHRhY2s7XG5cdCAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2UgPSB0aGlzLl9vcmlnaW5hbF90cmlnZ2VyUmVsZWFzZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBhbmQgdGhlbiB0aGUgcmVsZWFzZSBhZnRlciB0aGUgZHVyYXRpb24uXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgVGhlIG5vdGUgdG8gdHJpZ2dlci5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIG5vdGUgc2hvdWxkIGJlIGhlbGQgZm9yIGJlZm9yZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyaW5nIHRoZSByZWxlYXNlLiBUaGlzIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSAgV2hlbiB0aGUgbm90ZSBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIFRoZSB2ZWxvY2l0eSB0aGUgbm90ZSBzaG91bGQgYmUgdHJpZ2dlcmVkIGF0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIFwiQzRcIiBmb3IgdGhlIGR1cmF0aW9uIG9mIGFuIDh0aCBub3RlXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChub3RlLCBkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKG5vdGUsIHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKHRpbWUgKyBkdXJhdGlvbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ3ZvbHVtZSddKTtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy51bnN5bmMoKTtcblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkluc3RydW1lbnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVGhpcyBpcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBvdGhlciBtb25vcGhvbmljIGluc3RydW1lbnRzIHRvIFxuXHRcdCAqICAgICAgICAgIGV4dGVuZC4gSU1QT1JUQU5UOiBJdCBkb2VzIG5vdCBtYWtlIGFueSBzb3VuZCBvbiBpdHMgb3duIGFuZFxuXHRcdCAqICAgICAgICAgIHNob3VsZG4ndCBiZSBkaXJlY3RseSBpbnN0YW50aWF0ZWQuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBhYnN0cmFjdFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTW9ub3Bob25pYy5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdsaWRlIHRpbWUgYmV0d2VlbiBub3Rlcy4gXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnBvcnRhbWVudG8gPSBvcHRpb25zLnBvcnRhbWVudG87XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Nb25vcGhvbmljLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMuZGVmYXVsdHMgPSB7ICdwb3J0YW1lbnRvJzogMCB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBvZiB0aGUgbm90ZSBvcHRpb25hbGx5IHdpdGggYSBnaXZlbiB2ZWxvY2l0eS4gXG5cdFx0ICogIFxuXHRcdCAqICBcblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fSBub3RlICAgICBUaGUgbm90ZSB0byB0cmlnZ2VyLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICAgICBXaGVuIHRoZSBub3RlIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdmVsb2NpdHkgVGhlIHZlbG9jaXR5IHNjYWxlciBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lcyBob3cgXCJsb3VkXCIgdGhlIG5vdGUgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vcGhvbmljfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFjayhcIkM0XCIpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciB0aGUgbm90ZSBhIGhhbGYgc2Vjb25kIGZyb20gbm93IGF0IGhhbGYgdmVsb2NpdHlcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrKFwiQzRcIiwgXCIrMC41XCIsIDAuNSk7XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZSwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnNldE5vdGUobm90ZSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBJZiBubyB0aW1lIGlzIGdpdmVuLCB0aGUgcmVsZWFzZSBoYXBwZW5zIGltbWVkaWF0bHlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTW9ub3Bob25pY30gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJSZWxlYXNlKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgb3ZlcnJpZGUgdGhpcyBtZXRob2Qgd2l0aCB0aGUgYWN0dWFsIG1ldGhvZFxuXHRcdCAqICBAYWJzdHJhY3Rcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgb3ZlcnJpZGUgdGhpcyBtZXRob2Qgd2l0aCB0aGUgYWN0dWFsIG1ldGhvZFxuXHRcdCAqICBAYWJzdHJhY3Rcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgbGV2ZWwgb2YgdGhlIG91dHB1dCBhdCB0aGUgZ2l2ZW4gdGltZS4gTWVhc3VyZXNcblx0XHQgKiAgdGhlIGVudmVsb3BlKHMpIHZhbHVlIGF0IHRoZSB0aW1lLiBcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIHF1ZXJ5IHRoZSBlbnZlbG9wZSB2YWx1ZVxuXHRcdCAqICBAcmV0dXJuIHtOb3JtYWxSYW5nZX0gVGhlIG91dHB1dCBsZXZlbCBiZXR3ZWVuIDAtMVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5nZXRMZXZlbEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmVudmVsb3BlLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIG5vdGUgYXQgdGhlIGdpdmVuIHRpbWUuIElmIG5vIHRpbWUgaXMgZ2l2ZW4sIHRoZSBub3RlXG5cdFx0ICogIHdpbGwgc2V0IGltbWVkaWF0ZWx5LiBcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IG5vdGUgVGhlIG5vdGUgdG8gY2hhbmdlIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIG5vdGUgc2hvdWxkIGJlIHNldC4gXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9waG9uaWN9IHRoaXNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vY2hhbmdlIHRvIEYjNiBpbiBvbmUgcXVhcnRlciBub3RlIGZyb20gbm93LlxuXHRcdCAqIHN5bnRoLnNldE5vdGUoXCJGIzZcIiwgXCIrNG5cIik7XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL2NoYW5nZSB0byBCYjQgcmlnaHQgbm93XG5cdFx0ICogc3ludGguc2V0Tm90ZShcIkJiNFwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuc2V0Tm90ZSA9IGZ1bmN0aW9uIChub3RlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLnBvcnRhbWVudG8gPiAwICYmIHRoaXMuZ2V0TGV2ZWxBdFRpbWUodGltZSkgPiAwLjA1KSB7XG5cdCAgICAgICAgICAgIHZhciBwb3J0VGltZSA9IHRoaXMudG9TZWNvbmRzKHRoaXMucG9ydGFtZW50byk7XG5cdCAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LmV4cG9uZW50aWFsUmFtcFRvKG5vdGUsIHBvcnRUaW1lLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5zZXRWYWx1ZUF0VGltZShub3RlLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTW9ub3Bob25pYztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlN5bnRoIGlzIGNvbXBvc2VkIHNpbXBseSBvZiBhIFRvbmUuT21uaU9zY2lsbGF0b3Jcblx0XHQgKiAgICAgICAgICByb3V0ZWQgdGhyb3VnaCBhIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzEtMV8wWVcyWjFKMkVQSTM2UDhmTkNNY1pHN04xdzFHWmx1UHM0b2c0ZXZvL3B1Yj93PTExNjMmaD0yMzFcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTW9ub3Bob25pY31cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5TeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5PbW5pT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKG9wdGlvbnMub3NjaWxsYXRvcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLm9zY2lsbGF0b3IuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLm9zY2lsbGF0b3IuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbmV3IFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBvc2NpbGxhdG9ycyB0byB0aGUgb3V0cHV0XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmNoYWluKHRoaXMuZW52ZWxvcGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TeW50aCwgVG9uZS5Nb25vcGhvbmljKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAndHJpYW5nbGUnIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDUsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMSxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwLjMsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIGF0dGFjayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIG5vdGUgKDAtMSlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICAvL3RoZSBlbnZlbG9wZXNcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICAvL2lmIHRoZXJlIGlzIG5vIHJlbGVhc2UgcG9ydGlvbiwgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHQgICAgICAgIGlmICh0aGlzLmVudmVsb3BlLnN1c3RhaW4gPT09IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUuYXR0YWNrICsgdGhpcy5lbnZlbG9wZS5kZWNheSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIHJlbGVhc2Ugc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUucmVsZWFzZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBTVN5bnRoIHVzZXMgdGhlIG91dHB1dCBvZiBvbmUgVG9uZS5TeW50aCB0byBtb2R1bGF0ZSB0aGVcblx0XHQgKiAgICAgICAgICBhbXBsaXR1ZGUgb2YgYW5vdGhlciBUb25lLlN5bnRoLiBUaGUgaGFybW9uaWNpdHkgKHRoZSByYXRpbyBiZXR3ZWVuXG5cdFx0ICogICAgICAgICAgdGhlIHR3byBzaWduYWxzKSBhZmZlY3RzIHRoZSB0aW1icmUgb2YgdGhlIG91dHB1dCBzaWduYWwgZ3JlYXRseS5cblx0XHQgKiAgICAgICAgICBSZWFkIG1vcmUgYWJvdXQgQW1wbGl0dWRlIE1vZHVsYXRpb24gU3ludGhlc2lzIG9uXG5cdFx0ICogICAgICAgICAgW1NvdW5kT25Tb3VuZF0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNDA0MTAzNjUzL2h0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbTo4MC9zb3MvbWFyMDAvYXJ0aWNsZXMvc3ludGhzZWNyZXRzLmh0bSkuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFUUXU4RWQ0aUZyMVlUTEtwQjNVMV9odXItVXdCcmg1Z2RCWGM4QnhmR0t3L3B1Yj93PTEwMDkmaD00NTdcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTW9ub3Bob25pY31cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLkFNU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCI0blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1TeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkFNU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyIHZvaWNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN5bnRofVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbmV3IFRvbmUuU3ludGgoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllcidzIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gdGhpcy5fY2Fycmllci5vc2NpbGxhdG9yO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyJ3MgZW52ZWxvcGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSB0aGlzLl9jYXJyaWVyLmVudmVsb3BlLnNldChvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yIHZvaWNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN5bnRofVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBuZXcgVG9uZS5TeW50aCgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci52b2x1bWUudmFsdWUgPSAtMTA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRvcidzIG9zY2lsbGF0b3Igd2hpY2ggaXMgYXBwbGllZFxuXHRcdFx0ICogIHRvIHRoZSBhbXBsaXR1ZGUgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uID0gdGhpcy5fbW9kdWxhdG9yLm9zY2lsbGF0b3Iuc2V0KG9wdGlvbnMubW9kdWxhdGlvbik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRvcidzIGVudmVsb3BlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25FbnZlbG9wZSA9IHRoaXMuX21vZHVsYXRvci5lbnZlbG9wZS5zZXQob3B0aW9ucy5tb2R1bGF0aW9uRW52ZWxvcGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbCg0NDAsIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgaW4gY2VudHNcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIHJhdGlvIGJldHdlZW4gdGhlIHR3byB2b2ljZXMuIEEgaGFybW9uaWNpdHkgb2Zcblx0XHRcdCAqICAxIGlzIG5vIGNoYW5nZS4gSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHZvaWNlMSBhbiBvY3RhdmUgYmVsb3cgdm9pY2UwXG5cdFx0XHQgKiBzeW50aC5oYXJtb25pY2l0eS52YWx1ZSA9IDAuNTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLmhhcm1vbmljaXR5KTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbnZlcnQgdGhlIC0xLDEgb3V0cHV0IHRvIDAsMVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkF1ZGlvVG9HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUgPSBuZXcgVG9uZS5BdWRpb1RvR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBub2RlIHdoZXJlIHRoZSBtb2R1bGF0aW9uIGhhcHBlbnNcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvL2NvbnRyb2wgdGhlIHR3byB2b2ljZXMgZnJlcXVlbmN5XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9jYXJyaWVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZmFuKHRoaXMuX2NhcnJpZXIuZGV0dW5lLCB0aGlzLl9tb2R1bGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY2hhaW4odGhpcy5fbW9kdWxhdGlvblNjYWxlLCB0aGlzLl9tb2R1bGF0aW9uTm9kZS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmNoYWluKHRoaXMuX21vZHVsYXRpb25Ob2RlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5Jyxcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbicsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQU1TeW50aCwgVG9uZS5Nb25vcGhvbmljKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkFNU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2hhcm1vbmljaXR5JzogMyxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjAxLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnbW9kdWxhdGlvbic6IHsgJ3R5cGUnOiAnc3F1YXJlJyB9LFxuXHQgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjUsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHRyaWdnZXIgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgbm90ZSB3aWxsIG9jY3VyXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIG5vdGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQU1TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTVN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgLy90aGUgcG9ydCBnbGlkZVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL3RoZSBlbnZlbG9wZXNcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0cmlnZ2VyIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIG5vdGVcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBub3RlIHdpbGwgcmVsZWFzZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BTVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFNU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQU1TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTVN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eScsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb24nLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvblNjYWxlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQU1TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk1vbm9TeW50aCBpcyBjb21wb3NlZCBvZiBvbmUgb3NjaWxsYXRvciwgb25lIGZpbHRlciwgYW5kIHR3byBlbnZlbG9wZXMuXG5cdFx0ICogICAgICAgICAgVGhlIGFtcGxpdHVkZSBvZiB0aGUgVG9uZS5Pc2NpbGxhdG9yIGFuZCB0aGUgY3V0b2ZmIGZyZXF1ZW5jeSBvZiB0aGVcblx0XHQgKiAgICAgICAgICBUb25lLkZpbHRlciBhcmUgY29udHJvbGxlZCBieSBUb25lLkVudmVsb3Blcy5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMWdhWTFERjlfSHprb2RxZjhKSTFDZzJWWmZ3U0VscEZRZkk5NElRd2FkMzgvcHViP3c9OTI0Jmg9MjQwXCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuTW9ub1N5bnRoKHtcblx0XHQgKiBcdFwib3NjaWxsYXRvclwiIDoge1xuXHRcdCAqIFx0XHRcInR5cGVcIiA6IFwic3F1YXJlXCJcblx0XHQgKiAgfSxcblx0XHQgKiAgXCJlbnZlbG9wZVwiIDoge1xuXHRcdCAqICBcdFwiYXR0YWNrXCIgOiAwLjFcblx0XHQgKiAgfVxuXHRcdCAqIH0pLnRvTWFzdGVyKCk7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIC8vZ2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5Nb25vU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9tbmlPc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gbmV3IFRvbmUuT21uaU9zY2lsbGF0b3Iob3B0aW9ucy5vc2NpbGxhdG9yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMub3NjaWxsYXRvci5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IHRoaXMub3NjaWxsYXRvci5kZXR1bmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpbHRlci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZpbHRlciA9IG5ldyBUb25lLkZpbHRlcihvcHRpb25zLmZpbHRlcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpbHRlciBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GcmVxdWVuY3lFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUgPSBuZXcgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZShvcHRpb25zLmZpbHRlckVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG5ldyBUb25lLkFtcGxpdHVkZUVudmVsb3BlKG9wdGlvbnMuZW52ZWxvcGUpO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgb3NjaWxsYXRvcnMgdG8gdGhlIG91dHB1dFxuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5jaGFpbih0aGlzLmZpbHRlciwgdGhpcy5lbnZlbG9wZSwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgZmlsdGVyIGVudmVsb3BlXG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZS5jb25uZWN0KHRoaXMuZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2ZpbHRlcicsXG5cdCAgICAgICAgICAgICdmaWx0ZXJFbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1vbm9TeW50aCwgVG9uZS5Nb25vcGhvbmljKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6ICdDNCcsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3NxdWFyZScgfSxcblx0ICAgICAgICAnZmlsdGVyJzoge1xuXHQgICAgICAgICAgICAnUSc6IDYsXG5cdCAgICAgICAgICAgICd0eXBlJzogJ2xvd3Bhc3MnLFxuXHQgICAgICAgICAgICAncm9sbG9mZic6IC0yNFxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDUsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMSxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwLjksXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2ZpbHRlckVudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wNixcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4yLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDAuNSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAyLFxuXHQgICAgICAgICAgICAnYmFzZUZyZXF1ZW5jeSc6IDIwMCxcblx0ICAgICAgICAgICAgJ29jdGF2ZXMnOiA3LFxuXHQgICAgICAgICAgICAnZXhwb25lbnQnOiAyXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgYXR0YWNrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlICgwLTEpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLmZpbHRlckVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLmVudmVsb3BlLnN1c3RhaW4gPT09IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUuYXR0YWNrICsgdGhpcy5lbnZlbG9wZS5kZWNheSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIHJlbGVhc2Ugc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUucmVsZWFzZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2ZpbHRlcicsXG5cdCAgICAgICAgICAgICdmaWx0ZXJFbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5maWx0ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1vbm9TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkR1b1N5bnRoIGlzIGEgbW9ub3Bob25pYyBzeW50aCBjb21wb3NlZCBvZiB0d29cblx0XHQgKiAgICAgICAgICBNb25vU3ludGhzIHJ1biBpbiBwYXJhbGxlbCB3aXRoIGNvbnRyb2wgb3ZlciB0aGVcblx0XHQgKiAgICAgICAgICBmcmVxdWVuY3kgcmF0aW8gYmV0d2VlbiB0aGUgdHdvIHZvaWNlcyBhbmQgdmlicmF0byBlZmZlY3QuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFiTDRHWHZmUk1NbHFTN1h5Qm05Q2pMOUtKUFNVS2JjZEJOcHFPbGtGTHhrL3B1Yj93PTEwMTImaD00NDhcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTW9ub3Bob25pY31cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZHVvU3ludGggPSBuZXcgVG9uZS5EdW9TeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogZHVvU3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjJuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkR1b1N5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZmlyc3Qgdm9pY2Vcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Nb25vU3ludGh9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvaWNlMCA9IG5ldyBUb25lLk1vbm9TeW50aChvcHRpb25zLnZvaWNlMCk7XG5cdCAgICAgICAgdGhpcy52b2ljZTAudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzZWNvbmQgdm9pY2Vcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Nb25vU3ludGh9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvaWNlMSA9IG5ldyBUb25lLk1vbm9TeW50aChvcHRpb25zLnZvaWNlMSk7XG5cdCAgICAgICAgdGhpcy52b2ljZTEudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2aWJyYXRvIExGTy5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG8gPSBuZXcgVG9uZS5MRk8ob3B0aW9ucy52aWJyYXRvUmF0ZSwgLTUwLCA1MCk7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0by5zdGFydCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogdGhlIHZpYnJhdG8gZnJlcXVlbmN5XG5cdFx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52aWJyYXRvUmF0ZSA9IHRoaXMuX3ZpYnJhdG8uZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB2aWJyYXRvIGdhaW5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92aWJyYXRvR2FpbiA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy52aWJyYXRvQW1vdW50LCBUb25lLlR5cGUuUG9zaXRpdmUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGFtb3VudCBvZiB2aWJyYXRvXG5cdFx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZpYnJhdG9BbW91bnQgPSB0aGlzLl92aWJyYXRvR2Fpbi5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBmcmVxdWVuY3kgY29udHJvbFxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwoNDQwLCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIYXJtb25pY2l0eSBpcyB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgdHdvIHZvaWNlcy4gQSBoYXJtb25pY2l0eSBvZlxuXHRcdFx0ICogIDEgaXMgbm8gY2hhbmdlLiBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vcGl0Y2ggdm9pY2UxIGFuIG9jdGF2ZSBiZWxvdyB2b2ljZTBcblx0XHRcdCAqIGR1b1N5bnRoLmhhcm1vbmljaXR5LnZhbHVlID0gMC41O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMuaGFybW9uaWNpdHkpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLy9jb250cm9sIHRoZSB0d28gdm9pY2VzIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy52b2ljZTAuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLmhhcm1vbmljaXR5LCB0aGlzLnZvaWNlMS5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG8uY29ubmVjdCh0aGlzLl92aWJyYXRvR2Fpbik7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0b0dhaW4uZmFuKHRoaXMudm9pY2UwLmRldHVuZSwgdGhpcy52b2ljZTEuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMC5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLnZvaWNlMS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICd2b2ljZTAnLFxuXHQgICAgICAgICAgICAndm9pY2UxJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd2aWJyYXRvQW1vdW50Jyxcblx0ICAgICAgICAgICAgJ3ZpYnJhdG9SYXRlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRHVvU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndmlicmF0b0Ftb3VudCc6IDAuNSxcblx0ICAgICAgICAndmlicmF0b1JhdGUnOiA1LFxuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDEuNSxcblx0ICAgICAgICAndm9pY2UwJzoge1xuXHQgICAgICAgICAgICAndm9sdW1lJzogLTEwLFxuXHQgICAgICAgICAgICAncG9ydGFtZW50byc6IDAsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzaW5lJyB9LFxuXHQgICAgICAgICAgICAnZmlsdGVyRW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAndm9pY2UxJzoge1xuXHQgICAgICAgICAgICAndm9sdW1lJzogLTEwLFxuXHQgICAgICAgICAgICAncG9ydGFtZW50byc6IDAsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzaW5lJyB9LFxuXHQgICAgICAgICAgICAnZmlsdGVyRW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3Blc1xuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgYXR0YWNrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlICgwLTEpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkR1b1N5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkR1b1N5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMudm9pY2UwLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudm9pY2UxLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZXNcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIHJlbGVhc2Ugc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkR1b1N5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkR1b1N5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy52b2ljZTAuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy52b2ljZTEuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgbGV2ZWwgb2YgdGhlIG91dHB1dCBhdCB0aGUgZ2l2ZW4gdGltZS4gTWVhc3VyZXNcblx0XHQgKiAgdGhlIGVudmVsb3BlKHMpIHZhbHVlIGF0IHRoZSB0aW1lLiBcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIHF1ZXJ5IHRoZSBlbnZlbG9wZSB2YWx1ZVxuXHRcdCAqICBAcmV0dXJuIHtOb3JtYWxSYW5nZX0gVGhlIG91dHB1dCBsZXZlbCBiZXR3ZWVuIDAtMVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5wcm90b3R5cGUuZ2V0TGV2ZWxBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiAodGhpcy52b2ljZTAuZ2V0TGV2ZWxBdFRpbWUodGltZSkgKyB0aGlzLnZvaWNlMS5nZXRMZXZlbEF0VGltZSh0aW1lKSkgLyAyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5EdW9TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICd2b2ljZTAnLFxuXHQgICAgICAgICAgICAndm9pY2UxJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd2aWJyYXRvQW1vdW50Jyxcblx0ICAgICAgICAgICAgJ3ZpYnJhdG9SYXRlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMudm9pY2UwLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2ljZTEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMudm9pY2UxID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG9HYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92aWJyYXRvR2FpbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0byA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52aWJyYXRvQW1vdW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnZpYnJhdG9BbW91bnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudmlicmF0b1JhdGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkR1b1N5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEZNU3ludGggaXMgY29tcG9zZWQgb2YgdHdvIFRvbmUuU3ludGhzIHdoZXJlIG9uZSBUb25lLlN5bnRoIG1vZHVsYXRlc1xuXHRcdCAqICAgICAgICAgIHRoZSBmcmVxdWVuY3kgb2YgYSBzZWNvbmQgVG9uZS5TeW50aC4gQSBsb3Qgb2Ygc3BlY3RyYWwgY29udGVudFxuXHRcdCAqICAgICAgICAgIGNhbiBiZSBleHBsb3JlZCB1c2luZyB0aGUgbW9kdWxhdGlvbkluZGV4IHBhcmFtZXRlci4gUmVhZCBtb3JlIGFib3V0XG5cdFx0ICogICAgICAgICAgZnJlcXVlbmN5IG1vZHVsYXRpb24gc3ludGhlc2lzIG9uIFNvdW5kIE9uIFNvdW5kOiBbUGFydCAxXShodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNjA0MDMxMjM3MDQvaHR0cDovL3d3dy5zb3VuZG9uc291bmQuY29tL3Nvcy9hcHIwMC9hcnRpY2xlcy9zeW50aHNlY3JldHMuaHRtKSwgW1BhcnQgMl0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNDAzMTE1ODM1L2h0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbS9zb3MvbWF5MDAvYXJ0aWNsZXMvc3ludGguaHRtKS5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMWgwUFVEWlhQZ2k0SWt4NmJWVDZvbmNyWVBMbHVGS3k3bGo1M3B1eGotRE0vcHViP3c9OTAyJmg9NDYyXCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGZtU3ludGggPSBuZXcgVG9uZS5GTVN5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBmbVN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzVcIiwgXCI0blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1TeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkZNU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyIHZvaWNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN5bnRofVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbmV3IFRvbmUuU3ludGgob3B0aW9ucy5jYXJyaWVyKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllcidzIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gdGhpcy5fY2Fycmllci5vc2NpbGxhdG9yO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyJ3MgZW52ZWxvcGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IHRoaXMuX2NhcnJpZXIuZW52ZWxvcGUuc2V0KG9wdGlvbnMuZW52ZWxvcGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3Igdm9pY2UuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3ludGh9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG5ldyBUb25lLlN5bnRoKG9wdGlvbnMubW9kdWxhdG9yKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3IncyBvc2NpbGxhdG9yIHdoaWNoIGlzIGFwcGxpZWRcblx0XHRcdCAqICB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbiA9IHRoaXMuX21vZHVsYXRvci5vc2NpbGxhdG9yLnNldChvcHRpb25zLm1vZHVsYXRpb24pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3IncyBlbnZlbG9wZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25FbnZlbG9wZSA9IHRoaXMuX21vZHVsYXRvci5lbnZlbG9wZS5zZXQob3B0aW9ucy5tb2R1bGF0aW9uRW52ZWxvcGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKDQ0MCwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBpbiBjZW50c1xuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIYXJtb25pY2l0eSBpcyB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgdHdvIHZvaWNlcy4gQSBoYXJtb25pY2l0eSBvZlxuXHRcdFx0ICogIDEgaXMgbm8gY2hhbmdlLiBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vcGl0Y2ggdm9pY2UxIGFuIG9jdGF2ZSBiZWxvdyB2b2ljZTBcblx0XHRcdCAqIHN5bnRoLmhhcm1vbmljaXR5LnZhbHVlID0gMC41O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMuaGFybW9uaWNpdHkpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRpb24gaW5kZXggd2hpY2ggZXNzZW50aWFsbHkgdGhlIGRlcHRoIG9yIGFtb3VudCBvZiB0aGUgbW9kdWxhdGlvbi4gSXQgaXMgdGhlXG5cdFx0XHQgKiAgcmF0aW8gb2YgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgbW9kdWxhdGluZyBzaWduYWwgKG1mKSB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZVxuXHRcdFx0ICogIG1vZHVsYXRpbmcgc2lnbmFsIChtYSkgLS0gYXMgaW4gbWEvbWYuXG5cdFx0XHQgKlx0QHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICpcdEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5tb2R1bGF0aW9uSW5kZXgpO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBub2RlIHdoZXJlIHRoZSBtb2R1bGF0aW9uIGhhcHBlbnNcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbmV3IFRvbmUuR2FpbigwKTtcblx0ICAgICAgICAvL2NvbnRyb2wgdGhlIHR3byB2b2ljZXMgZnJlcXVlbmN5XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9jYXJyaWVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5tb2R1bGF0aW9uSW5kZXgsIHRoaXMuX21vZHVsYXRpb25Ob2RlKTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5mYW4odGhpcy5fY2Fycmllci5kZXR1bmUsIHRoaXMuX21vZHVsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5jb25uZWN0KHRoaXMuX21vZHVsYXRpb25Ob2RlLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlLmNvbm5lY3QodGhpcy5fY2Fycmllci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5Jyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25JbmRleCcsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb24nLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZNU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTVN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDMsXG5cdCAgICAgICAgJ21vZHVsYXRpb25JbmRleCc6IDEwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzaW5lJyB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMDEsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdtb2R1bGF0aW9uJzogeyAndHlwZSc6ICdzcXVhcmUnIH0sXG5cdCAgICAgICAgJ21vZHVsYXRpb25FbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuNSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMCxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBcdHRyaWdnZXIgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgbm90ZSB3aWxsIG9jY3VyXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZNU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL3RoZSBlbnZlbG9wZXNcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0cmlnZ2VyIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIG5vdGVcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBub3RlIHdpbGwgcmVsZWFzZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GTVN5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZNU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZNU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1TeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkluZGV4Jyxcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbicsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uSW5kZXguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRk1TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk1lbWJyYW5lU3ludGggbWFrZXMga2ljayBhbmQgdG9tIHNvdW5kcyB1c2luZyBhIHNpbmdsZSBvc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICAgd2l0aCBhbiBhbXBsaXR1ZGUgZW52ZWxvcGUgYW5kIGZyZXF1ZW5jeSByYW1wLiBBIFRvbmUuT21uaU9zY2lsbGF0b3Jcblx0XHQgKiAgICAgICAgICBpcyByb3V0ZWQgdGhyb3VnaCBhIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUgdG8gdGhlIG91dHB1dC4gVGhlIGRydW1cblx0XHQgKiAgICAgICAgICBxdWFsaXR5IG9mIHRoZSBzb3VuZCBjb21lcyBmcm9tIHRoZSBmcmVxdWVuY3kgZW52ZWxvcGUgYXBwbGllZFxuXHRcdCAqICAgICAgICAgIGR1cmluZyBUb25lLk1lbWJyYW5lU3ludGgudHJpZ2dlckF0dGFjayhub3RlKS4gVGhlIGZyZXF1ZW5jeSBlbnZlbG9wZVxuXHRcdCAqICAgICAgICAgIHN0YXJ0cyBhdCA8Y29kZT5ub3RlICogLm9jdGF2ZXM8L2NvZGU+IGFuZCByYW1wcyB0byA8Y29kZT5ub3RlPC9jb2RlPlxuXHRcdCAqICAgICAgICAgIG92ZXIgdGhlIGR1cmF0aW9uIG9mIDxjb2RlPi5waXRjaERlY2F5PC9jb2RlPi5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5NZW1icmFuZVN5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkMyXCIsIFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLk1lbWJyYW5lU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5NZW1icmFuZVN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5PbW5pT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKG9wdGlvbnMub3NjaWxsYXRvcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBuZXcgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZShvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgdGhlIHBpdGNoIGVudmVsb3BlIHJhbXBzLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIHRpbWUgdGhlIGZyZXF1ZW5jeSBlbnZlbG9wZSB0YWtlcy5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucGl0Y2hEZWNheSA9IG9wdGlvbnMucGl0Y2hEZWNheTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuY2hhaW4odGhpcy5lbnZlbG9wZSwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NZW1icmFuZVN5bnRoLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTWVtYnJhbmVTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncGl0Y2hEZWNheSc6IDAuMDUsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiAxMCxcblx0ICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAwMSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC40LFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDAuMDEsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMS40LFxuXHQgICAgICAgICAgICAnYXR0YWNrQ3VydmUnOiAnZXhwb25lbnRpYWwnXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBub3RlIGF0IHRoZSBnaXZlbiB0aW1lIHdpdGggdGhlIGdpdmVuIHZlbG9jaXR5LlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgdGhlIG5vdGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAgICAgdGhlIHRpbWUsIGlmIG5vdCBnaXZlbiBpcyBub3dcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdmVsb2NpdHkgZGVmYXVsdHMgdG8gMVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NZW1icmFuZVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIGtpY2sudHJpZ2dlckF0dGFjayg2MCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk1lbWJyYW5lU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZSwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgbm90ZSA9IHRoaXMudG9GcmVxdWVuY3kobm90ZSk7XG5cdCAgICAgICAgdmFyIG1heE5vdGUgPSBub3RlICogdGhpcy5vY3RhdmVzO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5mcmVxdWVuY3kuc2V0VmFsdWVBdFRpbWUobWF4Tm90ZSwgdGltZSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmZyZXF1ZW5jeS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKG5vdGUsIHRpbWUgKyB0aGlzLnRvU2Vjb25kcyh0aGlzLnBpdGNoRGVjYXkpKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBub3RlLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIG5vdGUgd2lsbCByZWxlYXNlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1lbWJyYW5lU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWVtYnJhbmVTeW50aC5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLnJlbGVhc2UpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWVtYnJhbmVTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZW1icmFuZVN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1lbWJyYW5lU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBJbmhhcm1vbmljIHJhdGlvIG9mIGZyZXF1ZW5jaWVzIGJhc2VkIG9uIHRoZSBSb2xhbmQgVFItODA4XG5cdFx0ICogIFRha2VuIGZyb20gaHR0cHM6Ly9jY3JtYS5zdGFuZm9yZC5lZHUvcGFwZXJzL3RyLTgwOC1jeW1iYWwtcGh5c2ljYWxseS1pbmZvcm1lZC1jaXJjdWl0LWJlbmRhYmxlLWRpZ2l0YWwtbW9kZWxcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgaW5oYXJtUmF0aW9zID0gW1xuXHQgICAgICAgIDEsXG5cdCAgICAgICAgMS40ODMsXG5cdCAgICAgICAgMS45MzIsXG5cdCAgICAgICAgMi41NDYsXG5cdCAgICAgICAgMi42Myxcblx0ICAgICAgICAzLjg5N1xuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgaGlnaGx5IGluaGFybW9uaWMgYW5kIHNwZWN0cmFsbHkgY29tcGxleCBzb3VyY2Ugd2l0aCBhIGhpZ2hwYXNzIGZpbHRlclxuXHRcdCAqICAgICAgICAgIGFuZCBhbXBsaXR1ZGUgZW52ZWxvcGUgd2hpY2ggaXMgZ29vZCBmb3IgbWFraW5nIG1ldGFsb3Bob25lIHNvdW5kcy4gQmFzZWRcblx0XHQgKiAgICAgICAgICBvbiBDeW1iYWxTeW50aCBieSBbQHBvbHlyaHl0aG1hdGljXShodHRwczovL2dpdGh1Yi5jb20vcG9seXJoeXRobWF0aWMpLlxuXHRcdCAqICAgICAgICAgIEluc3BpcmF0aW9uIGZyb20gW1NvdW5kIG9uIFNvdW5kXShodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNjA2MTAxNDM5MjQvaHR0cHM6Ly93d3cuc291bmRvbnNvdW5kLmNvbS9zb3MvanVsMDIvYXJ0aWNsZXMvc3ludGhzZWNyZXRzMDcwMi5hc3ApLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFRoZSBvcHRpb25zIGF2YWlsYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5NZXRhbFN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG9mIHRoZSBjeW1iYWxcblx0XHRcdCAqICBAdHlwZSAge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFycmF5IG9mIEZNT3NjaWxsYXRvcnNcblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgbXVsdGlwbGllcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZyZXFNdWx0aXBsaWVycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbXBsaXR1ZGUgZm9yIHRoZSBib2R5XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWUgPSBuZXcgVG9uZS5HYWluKDApLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGhpZ2hwYXNzIHRoZSBvdXRwdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2hpZ2hwYXNzID0gbmV3IFRvbmUuRmlsdGVyKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiAnaGlnaHBhc3MnLFxuXHQgICAgICAgICAgICAnUSc6IC0zLjAxMDI5OTk1NjYzOTgxMjVcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMuX2FtcGxpdHVlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgdGhlIGhpZ2hwYXNzXG5cdFx0XHQgKiAgZmlsdGVyIGZyZXF1ZW5jeSByYW1wc1xuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2NhbGUgdGhlIGJvZHkgZW52ZWxvcGVcblx0XHRcdCAqICBmb3IgdGhlIGJhbmRwYXNzXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2NhbGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIgPSBuZXcgVG9uZS5TY2FsZShvcHRpb25zLnJlc29uYW5jZSwgNzAwMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGVudmVsb3BlIHdoaWNoIGlzIGNvbm5lY3RlZCBib3RoIHRvIHRoZVxuXHRcdFx0ICogIGFtcGxpdHVkZSBhbmQgaGlnaHBhc3MgZmlsdGVyJ3MgY3V0b2ZmIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5FbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBuZXcgVG9uZS5FbnZlbG9wZSh7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiBvcHRpb25zLmVudmVsb3BlLmF0dGFjayxcblx0ICAgICAgICAgICAgJ2F0dGFja0N1cnZlJzogJ2xpbmVhcicsXG5cdCAgICAgICAgICAgICdkZWNheSc6IG9wdGlvbnMuZW52ZWxvcGUuZGVjYXksXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMCxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiBvcHRpb25zLmVudmVsb3BlLnJlbGVhc2Vcblx0ICAgICAgICB9KS5jaGFpbih0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLCB0aGlzLl9oaWdocGFzcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuY29ubmVjdCh0aGlzLl9hbXBsaXR1ZS5nYWluKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaGFybVJhdGlvcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgb3NjID0gbmV3IFRvbmUuRk1Pc2NpbGxhdG9yKHtcblx0ICAgICAgICAgICAgICAgICd0eXBlJzogJ3NxdWFyZScsXG5cdCAgICAgICAgICAgICAgICAnbW9kdWxhdGlvblR5cGUnOiAnc3F1YXJlJyxcblx0ICAgICAgICAgICAgICAgICdoYXJtb25pY2l0eSc6IG9wdGlvbnMuaGFybW9uaWNpdHksXG5cdCAgICAgICAgICAgICAgICAnbW9kdWxhdGlvbkluZGV4Jzogb3B0aW9ucy5tb2R1bGF0aW9uSW5kZXhcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIG9zYy5jb25uZWN0KHRoaXMuX2hpZ2hwYXNzKTtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnNbaV0gPSBvc2M7XG5cdCAgICAgICAgICAgIHZhciBtdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoaW5oYXJtUmF0aW9zW2ldKTtcblx0ICAgICAgICAgICAgdGhpcy5fZnJlcU11bHRpcGxpZXJzW2ldID0gbXVsdDtcblx0ICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4obXVsdCwgb3NjLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vc2V0IHRoZSBvY3RhdmVzXG5cdCAgICAgICAgdGhpcy5vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWV0YWxTeW50aCwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAyMDAsXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDEsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDEuNCxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjJcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDUuMSxcblx0ICAgICAgICAnbW9kdWxhdGlvbkluZGV4JzogMzIsXG5cdCAgICAgICAgJ3Jlc29uYW5jZSc6IDQwMDAsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiAxLjVcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgICAgIFdoZW4gdGhlIGF0dGFjayBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIFt2ZWxvY2l0eT0xXSAgVGhlIHZlbG9jaXR5IHRoYXQgdGhlIGVudmVsb3BlIHNob3VsZCBiZSB0cmlnZ2VyZWQgYXQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1ldGFsU3ludGh9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZlbCA9IFRvbmUuZGVmYXVsdEFyZyh2ZWwsIDEpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWwpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzLmZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICBvc2Muc3RhcnQodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9pZiB0aGUgc3VzdGFpbiBpcyAwLCBzdG9wIHRoZSBvc2NpbGxhdG9yIGFzIHdlbGxcblx0ICAgICAgICBpZiAodGhpcy5lbnZlbG9wZS5zdXN0YWluID09PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzLmZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgb3NjLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUuYXR0YWNrICsgdGhpcy5lbnZlbG9wZS5kZWNheSk7XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSByZWxlYXNlIG9mIHRoZSBlbnZlbG9wZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgICAgICBXaGVuIHRoZSByZWxlYXNlIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1ldGFsU3ludGh9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUucmVsZWFzZSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBpbnN0cnVtZW50IHRvIHRoZSBUcmFuc3BvcnQuIEFsbCBzdWJzZXF1ZW50IGNhbGxzIG9mXG5cdFx0ICogW3RyaWdnZXJBdHRhY2tdKCN0cmlnZ2VyYXR0YWNrKSBhbmQgW3RyaWdnZXJSZWxlYXNlXSgjdHJpZ2dlcnJlbGVhc2UpXG5cdFx0ICogd2lsbCBiZSBzY2hlZHVsZWQgYWxvbmcgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnN5bmMoKVxuXHRcdCAqIC8vc2NoZWR1bGUgMyBub3RlcyB3aGVuIHRoZSB0cmFuc3BvcnQgZmlyc3Qgc3RhcnRzXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgMClcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnOG4nKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc0bicpXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHRvIGhlYXIgdGhlIG5vdGVzXG5cdFx0ICogVHJhbnNwb3J0LnN0YXJ0KClcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlckF0dGFjaycsIDApO1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJSZWxlYXNlJywgMCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBhbmQgcmVsZWFzZSBvZiB0aGUgZW52ZWxvcGUgYWZ0ZXIgdGhlIGdpdmVuXG5cdFx0ICogIGR1cmF0aW9uLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgZHVyYXRpb24gIFRoZSBkdXJhdGlvbiBiZWZvcmUgdHJpZ2dlcmluZyB0aGUgcmVsZWFzZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgICAgIFdoZW4gdGhlIGF0dGFjayBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIFt2ZWxvY2l0eT0xXSAgVGhlIHZlbG9jaXR5IHRoYXQgdGhlIGVudmVsb3BlIHNob3VsZCBiZSB0cmlnZ2VyZWQgYXQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1ldGFsU3ludGh9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2UodGltZSArIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG1vZHVsYXRpb25JbmRleCBvZiB0aGUgb3NjaWxsYXRvcnMgd2hpY2ggbWFrZSB1cCB0aGUgc291cmNlLlxuXHRcdCAqICBzZWUgVG9uZS5GTU9zY2lsbGF0b3IubW9kdWxhdGlvbkluZGV4XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLk1ldGFsU3ludGgjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgIG1vZHVsYXRpb25JbmRleFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUsICdtb2R1bGF0aW9uSW5kZXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yc1swXS5tb2R1bGF0aW9uSW5kZXgudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnNbaV0ubW9kdWxhdGlvbkluZGV4LnZhbHVlID0gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGhhcm1vbmljaXR5IG9mIHRoZSBvc2NpbGxhdG9ycyB3aGljaCBtYWtlIHVwIHRoZSBzb3VyY2UuXG5cdFx0ICogIHNlZSBUb25lLkZNT3NjaWxsYXRvci5oYXJtb25pY2l0eVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5NZXRhbFN5bnRoI1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lICBoYXJtb25pY2l0eVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUsICdoYXJtb25pY2l0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3JzWzBdLmhhcm1vbmljaXR5LnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldLmhhcm1vbmljaXR5LnZhbHVlID0gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgaGlnaHBhc3MgZmlsdGVyIGF0dGFjaGVkIHRvIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5NZXRhbFN5bnRoI1xuXHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqICBAbmFtZSAgcmVzb25hbmNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZSwgJ3Jlc29uYW5jZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIubWluID0gdmFsO1xuXHQgICAgICAgICAgICB0aGlzLm9jdGF2ZXMgPSB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyBhYm92ZSB0aGUgXCJyZXNvbmFuY2VcIiBmcmVxdWVuY3lcblx0XHQgKiAgdGhhdCB0aGUgZmlsdGVyIHJhbXBzIGR1cmluZyB0aGUgYXR0YWNrL2RlY2F5IGVudmVsb3BlXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLk1ldGFsU3ludGgjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lICBvY3RhdmVzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0cykge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0cztcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyRnJlcVNjYWxlci5tYXggPSB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLm1pbiAqIE1hdGgucG93KDIsIG9jdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1ldGFsU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZnJlcU11bHRpcGxpZXJzW2ldLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZyZXFNdWx0aXBsaWVycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2hpZ2hwYXNzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9oaWdocGFzcyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWV0YWxTeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk5vaXNlU3ludGggaXMgY29tcG9zZWQgb2YgYSBub2lzZSBnZW5lcmF0b3IgKFRvbmUuTm9pc2UpLCBvbmUgZmlsdGVyIChUb25lLkZpbHRlciksXG5cdFx0ICogICAgICAgICAgYW5kIHR3byBlbnZlbG9wZXMgKFRvbmUuRW52ZWxvcCkuIE9uZSBlbnZlbG9wZSBjb250cm9scyB0aGUgYW1wbGl0dWRlXG5cdFx0ICogICAgICAgICAgb2YgdGhlIG5vaXNlIGFuZCB0aGUgb3RoZXIgaXMgY29udHJvbHMgdGhlIGN1dG9mZiBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlci5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMXJxenVYOXJCbGhUNTBNUnZEMlRLbWw5Ym5aaGNabXpYRjFyZl9vN3ZkbkUvcHViP3c9OTE4Jmg9MjQyXCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiB2YXIgbm9pc2VTeW50aCA9IG5ldyBUb25lLk5vaXNlU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIG5vaXNlU3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLk5vaXNlU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBub2lzZSBzb3VyY2UuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTm9pc2V9XG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIG5vaXNlU3ludGguc2V0KFwibm9pc2UudHlwZVwiLCBcImJyb3duXCIpO1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5ub2lzZSA9IG5ldyBUb25lLk5vaXNlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBuZXcgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZShvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIG5vaXNlIHRvIHRoZSBvdXRwdXRcblx0ICAgICAgICB0aGlzLm5vaXNlLmNoYWluKHRoaXMuZW52ZWxvcGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdub2lzZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk5vaXNlU3ludGgsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbm9pc2UnOiB7ICd0eXBlJzogJ3doaXRlJyB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDA1LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjEsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMFxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZXMuIFVubGlrZSBvdGhlclxuXHRcdCAqICBpbnN0cnVtZW50cywgVG9uZS5Ob2lzZVN5bnRoIGRvZXNuJ3QgaGF2ZSBhIG5vdGUuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgYXR0YWNrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZSAoMC0xKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Ob2lzZVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogbm9pc2VTeW50aC50cmlnZ2VyQXR0YWNrKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICAvL3RoZSBlbnZlbG9wZXNcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIG5vaXNlXG5cdCAgICAgICAgdGhpcy5ub2lzZS5zdGFydCh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5lbnZlbG9wZS5zdXN0YWluID09PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMubm9pc2Uuc3RvcCh0aW1lID0gdGhpcy5lbnZlbG9wZS5hdHRhY2sgKyB0aGlzLmVudmVsb3BlLmRlY2F5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIGVudmVsb3Blcy5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSByZWxlYXNlIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Ob2lzZVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGgucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMubm9pc2Uuc3RvcCh0aW1lICsgdGhpcy5lbnZlbG9wZS5yZWxlYXNlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBpbnN0cnVtZW50IHRvIHRoZSBUcmFuc3BvcnQuIEFsbCBzdWJzZXF1ZW50IGNhbGxzIG9mXG5cdFx0ICogW3RyaWdnZXJBdHRhY2tdKCN0cmlnZ2VyYXR0YWNrKSBhbmQgW3RyaWdnZXJSZWxlYXNlXSgjdHJpZ2dlcnJlbGVhc2UpXG5cdFx0ICogd2lsbCBiZSBzY2hlZHVsZWQgYWxvbmcgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnN5bmMoKVxuXHRcdCAqIC8vc2NoZWR1bGUgMyBub3RlcyB3aGVuIHRoZSB0cmFuc3BvcnQgZmlyc3Qgc3RhcnRzXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgMClcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnOG4nKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc0bicpXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHRvIGhlYXIgdGhlIG5vdGVzXG5cdFx0ICogVHJhbnNwb3J0LnN0YXJ0KClcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGgucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlckF0dGFjaycsIDApO1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJSZWxlYXNlJywgMCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBhbmQgdGhlbiB0aGUgcmVsZWFzZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gZHVyYXRpb24gdGhlIGR1cmF0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gICAgIHRoZSB0aW1lIG9mIHRoZSBhdHRhY2tcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vaXNlU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAoZHVyYXRpb24sIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZSh0aW1lICsgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9pc2VTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ25vaXNlJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMubm9pc2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubm9pc2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk5vaXNlU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBLYXJwbHVzLVN0cmluZyBzdHJpbmcgc3ludGhlc2lzLiBPZnRlbiBvdXQgb2YgdHVuZS5cblx0XHQgKiAgICAgICAgIFdpbGwgY2hhbmdlIHdoZW4gdGhlIEF1ZGlvV29ya2VyTm9kZSBpcyBhdmFpbGFibGUgYWNyb3NzXG5cdFx0ICogICAgICAgICBicm93c2Vycy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBzZWUgdGhlIGRlZmF1bHRzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHBsdWNreSA9IG5ldyBUb25lLlBsdWNrU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIHBsdWNreS50cmlnZ2VyQXR0YWNrKFwiQzRcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBsdWNrU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5QbHVja1N5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Ob2lzZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbm9pc2UgPSBuZXcgVG9uZS5Ob2lzZSgncGluaycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2Ygbm9pc2UgYXQgdGhlIGF0dGFjay5cblx0XHRcdCAqICBOb21pbmFsIHJhbmdlIG9mIFswLjEsIDIwXVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmF0dGFja05vaXNlID0gb3B0aW9ucy5hdHRhY2tOb2lzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgTEZDRlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxvd3Bhc3NDb21iRmlsdGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZmNmID0gbmV3IFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIoe1xuXHQgICAgICAgICAgICAncmVzb25hbmNlJzogb3B0aW9ucy5yZXNvbmFuY2UsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnOiBvcHRpb25zLmRhbXBlbmluZ1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByZXNvbmFuY2UgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSB0aGlzLl9sZmNmLnJlc29uYW5jZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGFtcGVuaW5nIGNvbnRyb2wuIGkuZS4gdGhlIGxvd3Bhc3MgZmlsdGVyIGZyZXF1ZW5jeSBvZiB0aGUgY29tYiBmaWx0ZXJcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gdGhpcy5fbGZjZi5kYW1wZW5pbmc7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX25vaXNlLmNvbm5lY3QodGhpcy5fbGZjZik7XG5cdCAgICAgICAgdGhpcy5fbGZjZi5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGx1Y2tTeW50aCwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbHVja1N5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdhdHRhY2tOb2lzZSc6IDEsXG5cdCAgICAgICAgJ2RhbXBlbmluZyc6IDQwMDAsXG5cdCAgICAgICAgJ3Jlc29uYW5jZSc6IDAuN1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBub3RlLlxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gbm90ZSBUaGUgbm90ZSB0byB0cmlnZ2VyLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgbm90ZSBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbHVja1N5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsdWNrU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZSwgdGltZSkge1xuXHQgICAgICAgIG5vdGUgPSB0aGlzLnRvRnJlcXVlbmN5KG5vdGUpO1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgZGVsYXlBbW91bnQgPSAxIC8gbm90ZTtcblx0ICAgICAgICB0aGlzLl9sZmNmLmRlbGF5VGltZS5zZXRWYWx1ZUF0VGltZShkZWxheUFtb3VudCwgdGltZSk7XG5cdCAgICAgICAgdGhpcy5fbm9pc2Uuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fbm9pc2Uuc3RvcCh0aW1lICsgZGVsYXlBbW91bnQgKiB0aGlzLmF0dGFja05vaXNlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBsdWNrU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGx1Y2tTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9ub2lzZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZjZi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbm9pc2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmY2YgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QbHVja1N5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUG9seVN5bnRoIGhhbmRsZXMgdm9pY2UgY3JlYXRpb24gYW5kIGFsbG9jYXRpb24gZm9yIGFueVxuXHRcdCAqICAgICAgICAgIGluc3RydW1lbnRzIHBhc3NlZCBpbiBhcyB0aGUgc2Vjb25kIHBhcmFtdGVyLiBQb2x5U3ludGggaXNcblx0XHQgKiAgICAgICAgICBub3QgYSBzeW50aGVzaXplciBieSBpdHNlbGYsIGl0IG1lcmVseSBtYW5hZ2VzIHZvaWNlcyBvZlxuXHRcdCAqICAgICAgICAgIG9uZSBvZiB0aGUgb3RoZXIgdHlwZXMgb2Ygc3ludGhzLCBhbGxvd2luZyBhbnkgb2YgdGhlXG5cdFx0ICogICAgICAgICAgbW9ub3Bob25pYyBzeW50aGVzaXplcnMgdG8gYmUgcG9seXBob25pYy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ8T2JqZWN0fSBbcG9seXBob255PTRdIFRoZSBudW1iZXIgb2Ygdm9pY2VzIHRvIGNyZWF0ZVxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9ufSBbdm9pY2U9VG9uZS5TeW50aF0gVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSB2b2ljZXNcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcyBUb25lLlN5bnRoIGJ5IGRlZmF1bHQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hIHBvbHlzeW50aCBjb21wb3NlZCBvZiA2IFZvaWNlcyBvZiBTeW50aFxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLlBvbHlTeW50aCg2LCBUb25lLlN5bnRoKS50b01hc3RlcigpO1xuXHRcdCAqIC8vc2V0IHRoZSBhdHRyaWJ1dGVzIHVzaW5nIHRoZSBzZXQgaW50ZXJmYWNlXG5cdFx0ICogc3ludGguc2V0KFwiZGV0dW5lXCIsIC0xMjAwKTtcblx0XHQgKiAvL3BsYXkgYSBjaG9yZFxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFtcIkM0XCIsIFwiRTRcIiwgXCJBNFwiXSwgXCI0blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3BvbHlwaG9ueScsXG5cdCAgICAgICAgICAgICd2b2ljZSdcblx0ICAgICAgICBdLCBUb25lLlBvbHlTeW50aCk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkluc3RydW1lbnQuZGVmYXVsdHMpO1xuXHQgICAgICAgIC8vbWF4IHBvbHlwaG9ueVxuXHQgICAgICAgIG9wdGlvbnMucG9seXBob255ID0gTWF0aC5taW4oVG9uZS5Qb2x5U3ludGguTUFYX1BPTFlQSE9OWSwgb3B0aW9ucy5wb2x5cGhvbnkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhcnJheSBvZiB2b2ljZXNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvaWNlcyA9IG5ldyBBcnJheShvcHRpb25zLnBvbHlwaG9ueSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHF1ZXVlIG9mIHZvaWNlcyB3aXRoIGRhdGEgYWJvdXQgbGFzdCB0cmlnZ2VyXG5cdFx0XHQgKiAgYW5kIHRoZSB0cmlnZ2VyZWQgbm90ZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHJpZ2dlcnMgPSBuZXcgQXJyYXkob3B0aW9ucy5wb2x5cGhvbnkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgaW4gY2VudHNcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2RldHVuZScpO1xuXHQgICAgICAgIC8vY3JlYXRlIHRoZSB2b2ljZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMucG9seXBob255OyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHYgPSBuZXcgb3B0aW9ucy52b2ljZShhcmd1bWVudHNbMl0sIGFyZ3VtZW50c1szXSk7XG5cdCAgICAgICAgICAgIGlmICghKHYgaW5zdGFuY2VvZiBUb25lLk1vbm9waG9uaWMpKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5bnRoIGNvbnN0cnVjdG9yIG11c3QgYmUgaW5zdGFuY2Ugb2YgVG9uZS5Nb25vcGhvbmljJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy52b2ljZXNbaV0gPSB2O1xuXHQgICAgICAgICAgICB2LmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICBpZiAodi5oYXNPd25Qcm9wZXJ0eSgnZGV0dW5lJykpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3Qodi5kZXR1bmUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJzW2ldID0ge1xuXHQgICAgICAgICAgICAgICAgcmVsZWFzZTogLTEsXG5cdCAgICAgICAgICAgICAgICBub3RlOiBudWxsLFxuXHQgICAgICAgICAgICAgICAgdm9pY2U6IHZcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Qb2x5U3ludGgsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncG9seXBob255JzogNCxcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAndm9pY2UnOiBUb25lLlN5bnRoXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeXxBcnJheX0gbm90ZXMgVGhlIG5vdGVzIHRvIHBsYXkuIEFjY2VwdHMgYSBzaW5nbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmVxdWVuY3kgb3IgYW4gYXJyYXkgb2YgZnJlcXVlbmNpZXMuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gIFRoZSBzdGFydCB0aW1lIG9mIHRoZSBub3RlLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIFRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIGEgY2hvcmQgaW1tZWRpYXRlbHkgd2l0aCBhIHZlbG9jaXR5IG9mIDAuMlxuXHRcdCAqIHBvbHkudHJpZ2dlckF0dGFjayhbXCJBYjNcIiwgXCJDNFwiLCBcIkY1XCJdLCB1bmRlZmluZWQsIDAuMik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IGZ1bmN0aW9uIChub3RlcywgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobm90ZXMpKSB7XG5cdCAgICAgICAgICAgIG5vdGVzID0gW25vdGVzXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm90ZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHZhbCA9IG5vdGVzW2ldO1xuXHQgICAgICAgICAgICAvL3RyaWdnZXIgdGhlIG9sZGVzdCB2b2ljZVxuXHQgICAgICAgICAgICB2YXIgb2xkZXN0ID0gdGhpcy5fdHJpZ2dlcnNbMF07XG5cdCAgICAgICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgdGhpcy5fdHJpZ2dlcnMubGVuZ3RoOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl90cmlnZ2Vyc1tqXS5yZWxlYXNlIDwgb2xkZXN0LnJlbGVhc2UpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvbGRlc3QgPSB0aGlzLl90cmlnZ2Vyc1tqXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBvbGRlc3QucmVsZWFzZSA9IEluZmluaXR5O1xuXHQgICAgICAgICAgICBvbGRlc3Qubm90ZSA9IEpTT04uc3RyaW5naWZ5KHZhbCk7XG5cdCAgICAgICAgICAgIG9sZGVzdC52b2ljZS50cmlnZ2VyQXR0YWNrKHZhbCwgdGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrIGFuZCByZWxlYXNlIGFmdGVyIHRoZSBzcGVjaWZpZWQgZHVyYXRpb25cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l8QXJyYXl9IG5vdGVzIFRoZSBub3RlcyB0byBwbGF5LiBBY2NlcHRzIGEgc2luZ2xlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlcXVlbmN5IG9yIGFuIGFycmF5IG9mIGZyZXF1ZW5jaWVzLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBkdXJhdGlvbiB0aGUgZHVyYXRpb24gb2YgdGhlIG5vdGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAgICAgaWYgbm8gdGltZSBpcyBnaXZlbiwgZGVmYXVsdHMgdG8gbm93XG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgYXR0YWNrICgwLTEpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciBhIGNob3JkIGZvciBhIGR1cmF0aW9uIG9mIGEgaGFsZiBub3RlXG5cdFx0ICogcG9seS50cmlnZ2VyQXR0YWNrUmVsZWFzZShbXCJFYjNcIiwgXCJHNFwiLCBcIkM1XCJdLCBcIjJuXCIpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY2FuIHBhc3MgaW4gYW4gYXJyYXkgb2YgZHVyYXRpb25zIGFzIHdlbGxcblx0XHQgKiBwb2x5LnRyaWdnZXJBdHRhY2tSZWxlYXNlKFtcIkViM1wiLCBcIkc0XCIsIFwiQzVcIl0sIFtcIjJuXCIsIFwiNG5cIiwgXCI0blwiXSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAobm90ZXMsIGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sobm90ZXMsIHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KGR1cmF0aW9uKSAmJiBUb25lLmlzQXJyYXkobm90ZXMpKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm90ZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBkID0gZHVyYXRpb25bTWF0aC5taW4oaSwgZHVyYXRpb24ubGVuZ3RoIC0gMSldO1xuXHQgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZShub3Rlc1tpXSwgdGltZSArIHRoaXMudG9TZWNvbmRzKGQpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2Uobm90ZXMsIHRpbWUgKyB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbikpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgcmVsZWFzZSBvZiB0aGUgbm90ZS4gVW5saWtlIG1vbm9waG9uaWMgaW5zdHJ1bWVudHMsXG5cdFx0ICogIGEgbm90ZSAob3IgYXJyYXkgb2Ygbm90ZXMpIG5lZWRzIHRvIGJlIHBhc3NlZCBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQuXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeXxBcnJheX0gbm90ZXMgVGhlIG5vdGVzIHRvIHBsYXkuIEFjY2VwdHMgYSBzaW5nbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmVxdWVuY3kgb3IgYW4gYXJyYXkgb2YgZnJlcXVlbmNpZXMuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gIFdoZW4gdGhlIHJlbGVhc2Ugd2lsbCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHBvbHkudHJpZ2dlclJlbGVhc2UoW1wiQWIzXCIsIFwiQzRcIiwgXCJGNVwiXSwgXCIrMm5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAobm90ZXMsIHRpbWUpIHtcblx0ICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobm90ZXMpKSB7XG5cdCAgICAgICAgICAgIG5vdGVzID0gW25vdGVzXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm90ZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgLy9nZXQgdGhlIHZvaWNlXG5cdCAgICAgICAgICAgIHZhciBzdHJpbmdpZmllZCA9IEpTT04uc3RyaW5naWZ5KG5vdGVzW2ldKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgdiA9IDA7IHYgPCB0aGlzLl90cmlnZ2Vycy5sZW5ndGg7IHYrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGRlc2MgPSB0aGlzLl90cmlnZ2Vyc1t2XTtcblx0ICAgICAgICAgICAgICAgIGlmIChkZXNjLm5vdGUgPT09IHN0cmluZ2lmaWVkICYmIGRlc2MucmVsZWFzZSA+IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBkZXNjLnZvaWNlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIGRlc2MucmVsZWFzZSA9IHRpbWU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgaW5zdHJ1bWVudCB0byB0aGUgVHJhbnNwb3J0LiBBbGwgc3Vic2VxdWVudCBjYWxscyBvZlxuXHRcdCAqIFt0cmlnZ2VyQXR0YWNrXSgjdHJpZ2dlcmF0dGFjaykgYW5kIFt0cmlnZ2VyUmVsZWFzZV0oI3RyaWdnZXJyZWxlYXNlKVxuXHRcdCAqIHdpbGwgYmUgc2NoZWR1bGVkIGFsb25nIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBzeW50aC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsIDApXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzhuJylcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlckF0dGFjaycsIDEpO1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJSZWxlYXNlJywgMSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCBhIG1lbWJlci9hdHRyaWJ1dGUgb2YgdGhlIHZvaWNlcy5cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R8c3RyaW5nfSBwYXJhbXNcblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSByYW1wVGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb2x5U3ludGh9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBwb2x5LnNldCh7XG5cdFx0ICogXHRcImZpbHRlclwiIDoge1xuXHRcdCAqIFx0XHRcInR5cGVcIiA6IFwiaGlnaHBhc3NcIlxuXHRcdCAqIFx0fSxcblx0XHQgKiBcdFwiZW52ZWxvcGVcIiA6IHtcblx0XHQgKiBcdFx0XCJhdHRhY2tcIiA6IDAuMjVcblx0XHQgKiBcdH1cblx0XHQgKiB9KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAocGFyYW1zLCB2YWx1ZSwgcmFtcFRpbWUpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudm9pY2VzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMudm9pY2VzW2ldLnNldChwYXJhbXMsIHZhbHVlLCByYW1wVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHN5bnRoJ3MgYXR0cmlidXRlcy4gR2l2ZW4gbm8gYXJndW1lbnRzIGdldFxuXHRcdCAqICB3aWxsIHJldHVybiBhbGwgYXZhaWxhYmxlIG9iamVjdCBwcm9wZXJ0aWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nXG5cdFx0ICogIHZhbHVlcy4gUGFzcyBpbiBhIHNpbmdsZSBhdHRyaWJ1dGUgdG8gcmV0cmlldmUgb3IgYW4gYXJyYXlcblx0XHQgKiAgb2YgYXR0cmlidXRlcy4gVGhlIGF0dHJpYnV0ZSBzdHJpbmdzIGNhbiBhbHNvIGluY2x1ZGUgYSBcIi5cIlxuXHRcdCAqICB0byBhY2Nlc3MgZGVlcGVyIHByb3BlcnRpZXMuXG5cdFx0ICogIEBwYXJhbSB7QXJyYXk9fSBwYXJhbXMgdGhlIHBhcmFtZXRlcnMgdG8gZ2V0LCBvdGhlcndpc2Ugd2lsbCByZXR1cm5cblx0XHQgKiAgXHRcdFx0XHRcdCAgIGFsbCBhdmFpbGFibGUuXG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZvaWNlc1swXS5nZXQocGFyYW1zKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIGFsbCB0aGUgY3VycmVudGx5IGFjdGl2ZSB2b2ljZXMuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBub3RlcyBzaG91bGQgYmUgcmVsZWFzZWQuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUucmVsZWFzZUFsbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdHJpZ2dlcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGRlc2MgPSB0aGlzLl90cmlnZ2Vyc1tpXTtcblx0ICAgICAgICAgICAgaWYgKGRlc2MucmVsZWFzZSA+IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGRlc2MucmVsZWFzZSA9IHRpbWU7XG5cdCAgICAgICAgICAgICAgICBkZXNjLnZvaWNlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudm9pY2VzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMudm9pY2VzW2ldLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy52b2ljZXNbaV0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZGV0dW5lJyk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvaWNlcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdHJpZ2dlcnMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbWF4aW11bSBudW1iZXIgb2Ygbm90ZXMgdGhhdCBjYW4gYmUgYWxsb2NhdGVkXG5cdFx0ICogIHRvIGEgcG9seXN5bnRoLlxuXHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGguTUFYX1BPTFlQSE9OWSA9IDIwO1xuXHQgICAgcmV0dXJuIFRvbmUuUG9seVN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgQXV0b21hdGljYWxseSBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBhIHNldCBvZiBwaXRjaGVkIHNhbXBsZXMuIFBhc3MgaW4gYW4gb2JqZWN0IHdoaWNoIG1hcHMgdGhlIG5vdGUncyBwaXRjaCBvciBtaWRpIHZhbHVlIHRvIHRoZSB1cmwsIHRoZW4geW91IGNhbiB0cmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHJlbGVhc2Ugb2YgdGhhdCBub3RlIGxpa2Ugb3RoZXIgaW5zdHJ1bWVudHMuIEJ5IGF1dG9tYXRpY2FsbHkgcmVwaXRjaGluZyB0aGUgc2FtcGxlcywgaXQgaXMgcG9zc2libGUgdG8gcGxheSBwaXRjaGVzIHdoaWNoIHdlcmUgbm90IGV4cGxpY2l0bHkgaW5jbHVkZWQgd2hpY2ggY2FuIHNhdmUgbG9hZGluZyB0aW1lLlxuXHRcdCAqICAgICAgICBGb3Igc2FtcGxlIG9yIGJ1ZmZlciBwbGF5YmFjayB3aGVyZSByZXBpdGNoaW5nIGlzIG5vdCBuZWNlc3NhcnksIHVzZSBbVG9uZS5QbGF5ZXJdKGh0dHBzOi8vdG9uZWpzLmdpdGh1Yi5pby9kb2NzL1BsYXllcikuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHNhbXBsZXMgQW4gb2JqZWN0IG9mIHNhbXBsZXMgbWFwcGluZyBlaXRoZXIgTWlkaVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGUgTnVtYmVycyBvciBTY2llbnRpZmljIFBpdGNoIE5vdGF0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHVybCBvZiB0aGF0IHNhbXBsZS5cblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25sb2FkIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhbGwgb2YgdGhlIHNhbXBsZXMgYXJlIGxvYWRlZC5cblx0XHQgKiBAcGFyYW0ge1N0cmluZz19IGJhc2VVcmwgVGhlIHJvb3QgVVJMIG9mIGFsbCBvZiB0aGUgc2FtcGxlcywgd2hpY2ggaXMgcHJlcGVuZGVkIHRvIGFsbCB0aGUgVVJMcy5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHZhciBzYW1wbGVyID0gbmV3IFRvbmUuU2FtcGxlcih7XG5cdFx0ICogXHRcIkMzXCIgOiBcInBhdGgvdG8vQzMubXAzXCIsXG5cdFx0ICogXHRcIkQjM1wiIDogXCJwYXRoL3RvL0RzaGFycDMubXAzXCIsXG5cdFx0ICogXHRcIkYjM1wiIDogXCJwYXRoL3RvL0ZzaGFycDMubXAzXCIsXG5cdFx0ICogXHRcIkEzXCIgOiBcInBhdGgvdG8vQTMubXAzXCIsXG5cdFx0ICogfSwgZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vc2FtcGxlciB3aWxsIHJlcGl0Y2ggdGhlIGNsb3Nlc3Qgc2FtcGxlXG5cdFx0ICogXHRzYW1wbGVyLnRyaWdnZXJBdHRhY2soXCJEM1wiKVxuXHRcdCAqIH0pXG5cdFx0ICogQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlciA9IGZ1bmN0aW9uICh1cmxzKSB7XG5cdCAgICAgICAgLy8gc2hpZnQgYXJndW1lbnRzIG92ZXIgb25lLiBUaG9zZSBhcmUgdGhlIHJlbWFpbmRlciBvZiB0aGUgb3B0aW9uc1xuXHQgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICBhcmdzLnNoaWZ0KCk7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3MsIFtcblx0ICAgICAgICAgICAgJ29ubG9hZCcsXG5cdCAgICAgICAgICAgICdiYXNlVXJsJ1xuXHQgICAgICAgIF0sIFRvbmUuU2FtcGxlcik7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgdmFyIHVybE1hcCA9IHt9O1xuXHQgICAgICAgIGZvciAodmFyIG5vdGUgaW4gdXJscykge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc05vdGUobm90ZSkpIHtcblx0ICAgICAgICAgICAgICAgIC8vY29udmVydCB0aGUgbm90ZSBuYW1lIHRvIE1JRElcblx0ICAgICAgICAgICAgICAgIHZhciBtaWQgPSBUb25lLkZyZXF1ZW5jeShub3RlKS50b01pZGkoKTtcblx0ICAgICAgICAgICAgICAgIHVybE1hcFttaWRdID0gdXJsc1tub3RlXTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICghaXNOYU4ocGFyc2VGbG9hdChub3RlKSkpIHtcblx0ICAgICAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGlmIGl0J3MgbnVtYmVycyBhc3N1bWUgaXQncyBtaWRpXG5cdCAgICAgICAgICAgICAgICB1cmxNYXBbbm90ZV0gPSB1cmxzW25vdGVdO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLlNhbXBsZXI6IHVybCBrZXlzIG11c3QgYmUgdGhlIG5vdGVcXCdzIHBpdGNoJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgc3RvcmVkIGFuZCBsb2FkZWQgYnVmZmVyc1xuXHRcdFx0ICogQHR5cGUge1RvbmUuQnVmZmVyc31cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXJzID0gbmV3IFRvbmUuQnVmZmVycyh1cmxNYXAsIG9wdGlvbnMub25sb2FkLCBvcHRpb25zLmJhc2VVcmwpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIG9iamVjdCBvZiBhbGwgY3VycmVudGx5IHBsYXlpbmcgQnVmZmVyU291cmNlc1xuXHRcdFx0ICogQHR5cGUge09iamVjdH1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzID0ge307XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZW52ZWxvcGUgYXBwbGllZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGUuXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYXR0YWNrID0gb3B0aW9ucy5hdHRhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZW52ZWxvcGUgYXBwbGllZCB0byB0aGUgZW5kIG9mIHRoZSBlbnZlbG9wZS5cblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZWxlYXNlID0gb3B0aW9ucy5yZWxlYXNlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU2FtcGxlciwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWZhdWx0c1xuXHRcdCAqIEBjb25zdFxuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgYXR0YWNrOiAwLFxuXHQgICAgICAgIHJlbGVhc2U6IDAuMSxcblx0ICAgICAgICBvbmxvYWQ6IFRvbmUubm9PcCxcblx0ICAgICAgICBiYXNlVXJsOiAnJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIGRpZmZlcmVuY2UgaW4gc3RlcHMgYmV0d2VlbiB0aGUgZ2l2ZW4gbWlkaSBub3RlIGF0IHRoZSBjbG9zZXRzIHNhbXBsZS5cblx0XHQgKiBAcGFyYW0gIHtNaWRpfSBtaWRpXG5cdFx0ICogQHJldHVybiB7SW50ZXJ2YWx9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUuX2ZpbmRDbG9zZXN0ID0gZnVuY3Rpb24gKG1pZGkpIHtcblx0ICAgICAgICAvL3NlYXJjaGVzIHdpdGhpbiA4IG9jdGF2ZXMgb2YgdGhlIGdpdmVuIG1pZGkgbm90ZVxuXHQgICAgICAgIHZhciBNQVhfSU5URVJWQUwgPSA5Njtcblx0ICAgICAgICB2YXIgaW50ZXJ2YWwgPSAwO1xuXHQgICAgICAgIHdoaWxlIChpbnRlcnZhbCA8IE1BWF9JTlRFUlZBTCkge1xuXHQgICAgICAgICAgICAvLyBjaGVjayBhYm92ZSBhbmQgYmVsb3dcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2J1ZmZlcnMuaGFzKG1pZGkgKyBpbnRlcnZhbCkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAtaW50ZXJ2YWw7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYnVmZmVycy5oYXMobWlkaSAtIGludGVydmFsKSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGludGVydmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGludGVydmFsKys7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgVGhlIG5vdGUgdG8gcGxheVxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lICAgICBXaGVuIHRvIHBsYXkgdGhlIG5vdGVcblx0XHQgKiBAcGFyYW0gIHtOb3JtYWxSYW5nZT19IHZlbG9jaXR5IFRoZSB2ZWxvY2l0eSB0byBwbGF5IHRoZSBzYW1wbGUgYmFjay5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9ICAgICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IGZ1bmN0aW9uIChub3RlLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHZhciBtaWRpID0gVG9uZS5GcmVxdWVuY3kobm90ZSkudG9NaWRpKCk7XG5cdCAgICAgICAgLy8gZmluZCB0aGUgY2xvc2VzdCBub3RlIHBpdGNoXG5cdCAgICAgICAgdmFyIGRpZmZlcmVuY2UgPSB0aGlzLl9maW5kQ2xvc2VzdChtaWRpKTtcblx0ICAgICAgICBpZiAoZGlmZmVyZW5jZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvc2VzdE5vdGUgPSBtaWRpIC0gZGlmZmVyZW5jZTtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuX2J1ZmZlcnMuZ2V0KGNsb3Nlc3ROb3RlKTtcblx0ICAgICAgICAgICAgLy8gcGxheSB0aGF0IG5vdGVcblx0ICAgICAgICAgICAgdmFyIHNvdXJjZSA9IG5ldyBUb25lLkJ1ZmZlclNvdXJjZSh7XG5cdCAgICAgICAgICAgICAgICAnYnVmZmVyJzogYnVmZmVyLFxuXHQgICAgICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKGRpZmZlcmVuY2UpLFxuXHQgICAgICAgICAgICAgICAgJ2ZhZGVJbic6IHRoaXMuYXR0YWNrLFxuXHQgICAgICAgICAgICAgICAgJ2ZhZGVPdXQnOiB0aGlzLnJlbGVhc2UsXG5cdCAgICAgICAgICAgICAgICAnY3VydmUnOiAnZXhwb25lbnRpYWwnXG5cdCAgICAgICAgICAgIH0pLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RhcnQodGltZSwgMCwgYnVmZmVyLmR1cmF0aW9uLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgICAgIC8vIGFkZCBpdCB0byB0aGUgYWN0aXZlIHNvdXJjZXNcblx0ICAgICAgICAgICAgaWYgKCFUb25lLmlzQXJyYXkodGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0gPSBbXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldLnB1c2goe1xuXHQgICAgICAgICAgICAgICAgbm90ZTogbWlkaSxcblx0ICAgICAgICAgICAgICAgIHNvdXJjZTogc291cmNlXG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIFRoZSBub3RlIHRvIHJlbGVhc2UuXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWUgICAgIFx0V2hlbiB0byByZWxlYXNlIHRoZSBub3RlLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2FtcGxlcn1cdHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAobm90ZSwgdGltZSkge1xuXHQgICAgICAgIHZhciBtaWRpID0gVG9uZS5GcmVxdWVuY3kobm90ZSkudG9NaWRpKCk7XG5cdCAgICAgICAgLy8gZmluZCB0aGUgbm90ZVxuXHQgICAgICAgIGlmICh0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldICYmIHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0ubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldLnNoaWZ0KCkuc291cmNlO1xuXHQgICAgICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgICAgIHNvdXJjZS5zdG9wKHRpbWUgKyB0aGlzLnJlbGVhc2UsIHRoaXMucmVsZWFzZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlbGVhc2UgYWxsIGN1cnJlbnRseSBhY3RpdmUgbm90ZXMuXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWUgICAgIFx0V2hlbiB0byByZWxlYXNlIHRoZSBub3Rlcy5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9XHR0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLnJlbGVhc2VBbGwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBub3RlIGluIHRoaXMuX2FjdGl2ZVNvdXJjZXMpIHtcblx0ICAgICAgICAgICAgdmFyIHNvdXJjZXMgPSB0aGlzLl9hY3RpdmVTb3VyY2VzW25vdGVdO1xuXHQgICAgICAgICAgICB3aGlsZSAoc291cmNlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzLnNoaWZ0KCkuc291cmNlO1xuXHQgICAgICAgICAgICAgICAgc291cmNlLnN0b3AodGltZSArIHRoaXMucmVsZWFzZSwgdGhpcy5yZWxlYXNlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBpbnN0cnVtZW50IHRvIHRoZSBUcmFuc3BvcnQuIEFsbCBzdWJzZXF1ZW50IGNhbGxzIG9mXG5cdFx0ICogW3RyaWdnZXJBdHRhY2tdKCN0cmlnZ2VyYXR0YWNrKSBhbmQgW3RyaWdnZXJSZWxlYXNlXSgjdHJpZ2dlcnJlbGVhc2UpXG5cdFx0ICogd2lsbCBiZSBzY2hlZHVsZWQgYWxvbmcgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnN5bmMoKVxuXHRcdCAqIC8vc2NoZWR1bGUgMyBub3RlcyB3aGVuIHRoZSB0cmFuc3BvcnQgZmlyc3Qgc3RhcnRzXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgMClcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnOG4nKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc0bicpXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHRvIGhlYXIgdGhlIG5vdGVzXG5cdFx0ICogVHJhbnNwb3J0LnN0YXJ0KClcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlckF0dGFjaycsIDEpO1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJSZWxlYXNlJywgMSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlIHRoZSBhdHRhY2sgcGhhc2UsIHRoZW4gYWZ0ZXIgdGhlIGR1cmF0aW9uLCBpbnZva2UgdGhlIHJlbGVhc2UuXG5cdFx0ICogQHBhcmFtICB7RnJlcXVlbmN5fSBub3RlICAgICBUaGUgbm90ZSB0byBwbGF5XG5cdFx0ICogQHBhcmFtICB7VGltZX0gZHVyYXRpb24gVGhlIHRpbWUgdGhlIG5vdGUgc2hvdWxkIGJlIGhlbGRcblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSAgICAgV2hlbiB0byBzdGFydCB0aGUgYXR0YWNrXG5cdFx0ICogQHBhcmFtICB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSBUaGUgdmVsb2NpdHkgb2YgdGhlIGF0dGFja1xuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2FtcGxlcn0gICAgICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChub3RlLCBkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKG5vdGUsIHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKG5vdGUsIHRpbWUgKyBkdXJhdGlvbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIG5vdGUgdG8gdGhlIHNhbXBsZXIuXG5cdFx0ICogIEBwYXJhbSAge05vdGV8TWlkaX0gICBub3RlICAgICAgVGhlIGJ1ZmZlcidzIHBpdGNoLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8VG9uZS5CdWZmZXJ8QXVkaW9idWZmZXJ9ICB1cmwgIEVpdGhlciB0aGUgdXJsIG9mIHRoZSBidWZlcixcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBhIGJ1ZmZlciB3aGljaCB3aWxsIGJlIGFkZGVkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2Vcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIHVybCBpcyBsb2FkZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChub3RlLCB1cmwsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOb3RlKG5vdGUpKSB7XG5cdCAgICAgICAgICAgIC8vY29udmVydCB0aGUgbm90ZSBuYW1lIHRvIE1JRElcblx0ICAgICAgICAgICAgdmFyIG1pZCA9IFRvbmUuRnJlcXVlbmN5KG5vdGUpLnRvTWlkaSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzLmFkZChtaWQsIHVybCwgY2FsbGJhY2spO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoIWlzTmFOKHBhcnNlRmxvYXQobm90ZSkpKSB7XG5cdCAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGlmIGl0J3MgbnVtYmVycyBhc3N1bWUgaXQncyBtaWRpXG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnMuYWRkKG5vdGUsIHVybCwgY2FsbGJhY2spO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5TYW1wbGVyOiBub3RlIG11c3QgYmUgdGhlIG5vdGVcXCdzIHBpdGNoLiBJbnN0ZWFkIGdvdCAnICsgbm90ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIHRoZSBidWZmZXJzIGFyZSBsb2FkZWQgb3Igbm90XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2FtcGxlciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb2FkZWRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNhbXBsZXIucHJvdG90eXBlLCAnbG9hZGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVycy5sb2FkZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2FtcGxlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlcnMuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIG1pZGkgaW4gdGhpcy5fYWN0aXZlU291cmNlcykge1xuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5zb3VyY2UuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2FtcGxlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCFPc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc2V0UGVyaW9kaWNXYXZlKSB7XG5cdCAgICAgICAgICAgIE9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5zZXRQZXJpb2RpY1dhdmUgPSBPc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc2V0V2F2ZVRhYmxlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlUGVyaW9kaWNXYXZlKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlUGVyaW9kaWNXYXZlID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVXYXZlVGFibGU7XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgTWFwcyBhIE5vcm1hbFJhbmdlIFswLCAxXSB0byBhbiBBdWRpb1JhbmdlIFstMSwgMV0uIFxuXHRcdCAqICAgICAgICAgU2VlIGFsc28gVG9uZS5BdWRpb1RvR2Fpbi4gXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGcyYSA9IG5ldyBUb25lLkdhaW5Ub0F1ZGlvKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkdhaW5Ub0F1ZGlvID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtXYXZlU2hhcGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbm9ybSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHgpICogMiAtIDE7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5HYWluVG9BdWRpbywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5HYWluVG9BdWRpb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HYWluVG9BdWRpby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9ub3JtLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ub3JtID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5HYWluVG9BdWRpbztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE5vcm1hbGl6ZSB0YWtlcyBhbiBpbnB1dCBtaW4gYW5kIG1heCBhbmQgbWFwcyBpdCBsaW5lYXJseSB0byBOb3JtYWxSYW5nZSBbMCwxXVxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gaW5wdXRNaW4gdGhlIG1pbiBpbnB1dCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gaW5wdXRNYXggdGhlIG1heCBpbnB1dCB2YWx1ZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBub3JtID0gbmV3IFRvbmUuTm9ybWFsaXplKDIsIDQpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoMykuY29ubmVjdChub3JtKTtcblx0XHQgKiAvL291dHB1dCBvZiBub3JtIGlzIDAuNS4gXG5cdFx0ICovXG5cdCAgICBUb25lLk5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChpbnB1dE1pbiwgaW5wdXRNYXgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWluIGlucHV0IHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW5wdXRNaW4gPSBUb25lLmRlZmF1bHRBcmcoaW5wdXRNaW4sIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtYXggaW5wdXQgdmFsdWVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbnB1dE1heCA9IFRvbmUuZGVmYXVsdEFyZyhpbnB1dE1heCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc3VidHJhY3QgdGhlIG1pbiBmcm9tIHRoZSBpbnB1dFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFkZH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3ViID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLkFkZCgwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBkaXZpZGUgYnkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgaW5wdXQgYW5kIG91dHB1dFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kaXYgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk11bHRpcGx5KDEpO1xuXHQgICAgICAgIHRoaXMuX3N1Yi5jb25uZWN0KHRoaXMuX2Rpdik7XG5cdCAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk5vcm1hbGl6ZSwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtaW5pbXVtIHZhbHVlIHRoZSBpbnB1dCBzaWduYWwgd2lsbCByZWFjaC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Ob3JtYWxpemUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtaW5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk5vcm1hbGl6ZS5wcm90b3R5cGUsICdtaW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dE1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICB0aGlzLl9pbnB1dE1pbiA9IG1pbjtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIHZhbHVlIHRoZSBpbnB1dCBzaWduYWwgd2lsbCByZWFjaC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Ob3JtYWxpemUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtYXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk5vcm1hbGl6ZS5wcm90b3R5cGUsICdtYXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dE1heDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1heCkge1xuXHQgICAgICAgICAgICB0aGlzLl9pbnB1dE1heCA9IG1heDtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBzZXQgdGhlIHZhbHVlc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob3JtYWxpemUucHJvdG90eXBlLl9zZXRSYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zdWIudmFsdWUgPSAtdGhpcy5faW5wdXRNaW47XG5cdCAgICAgICAgdGhpcy5fZGl2LnZhbHVlID0gMSAvICh0aGlzLl9pbnB1dE1heCAtIHRoaXMuX2lucHV0TWluKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9ybWFsaXplfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vcm1hbGl6ZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zdWIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N1YiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGl2LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kaXYgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk5vcm1hbGl6ZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwgZXh0ZW5kcyBUb25lLlNpZ25hbCwgYnV0IGFkZHMgdGhlIGFiaWxpdHkgdG8gc3luY2hyb25pemUgdGhlIHNpZ25hbCB0byB0aGUgc2lnbmFsIHRvIHRoZSBUb25lLlRyYW5zcG9ydFxuXHRcdCAqIEBleHRlbmRzIHtUb25lLlNpZ25hbH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSByZWFsIHNpZ25hbCBvdXRwdXRcblx0XHRcdCAqIEB0eXBlIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IHRoaXMuX291dHB1dFNpZyA9IG5ldyBUb25lLlNpZ25hbCh0aGlzLl9pbml0aWFsVmFsdWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogS2VlcCB0cmFjayBvZiB0aGUgbGFzdCB2YWx1ZS4gKHNtYWxsIG9wdGltaXphdGlvbilcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGFzdFZhbCA9IHRoaXMudmFsdWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZXZlbnQgaWQgb2YgdGhlIHRpY2sgdXBkYXRlIGxvb3Bcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3luY2VkID0gVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGVSZXBlYXQodGhpcy5fb25UaWNrLmJpbmQodGhpcyksICcxaScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogQSBib3VuZCB2ZXJzaW9uIG9mIHRoZSBhbmNob3IgdmFsdWUgbWV0aG9kc1xuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2JpbmRBbmNob3JWYWx1ZSA9IHRoaXMuX2FuY2hvclZhbHVlLmJpbmQodGhpcyk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQub24oJ3N0YXJ0IHN0b3AgcGF1c2UnLCB0aGlzLl9iaW5kQW5jaG9yVmFsdWUpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5tZW1vcnkgPSBJbmZpbml0eTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiBDYWxsYmFjayB3aGljaCBpcyBpbnZva2VkIGV2ZXJ5IHRpY2suXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHRpbWVcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLl9vblRpY2sgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciB2YWwgPSB0aGlzLmdldFZhbHVlQXRUaW1lKFRvbmUuVHJhbnNwb3J0LnNlY29uZHMpO1xuXHQgICAgICAgIGlmICh0aGlzLl9sYXN0VmFsICE9PSB2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGFzdFZhbCA9IHZhbDtcblx0ICAgICAgICAgICAgLy9hcHByb3hpbWF0ZSByYW1wIGN1cnZlcyB3aXRoIGxpbmVhciByYW1wc1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXRTaWcubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodmFsLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQW5jaG9yIHRoZSB2YWx1ZSBhdCB0aGUgc3RhcnQgYW5kIHN0b3Agb2YgdGhlIFRyYW5zcG9ydFxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdGltZSBUaGUgdGltZSBvZiB0aGUgZXZlbnRcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgIHRoaXNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuX2FuY2hvclZhbHVlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgdmFsID0gdGhpcy5nZXRWYWx1ZUF0VGltZShUb25lLlRyYW5zcG9ydC5zZWNvbmRzKTtcblx0ICAgICAgICB0aGlzLl9sYXN0VmFsID0gdmFsO1xuXHQgICAgICAgIHRoaXMuX291dHB1dFNpZy5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgdGhpcy5fb3V0cHV0U2lnLnNldFZhbHVlQXRUaW1lKHZhbCwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgc2NoZWR1bGVkIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLiBUaGlzIHdpbGxcblx0XHQgKiAgcmV0dXJuIHRoZSB1bmNvbnZlcnRlZCAocmF3KSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gIHRpbWUgIFRoZSB0aW1lIGluIHNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICBUaGUgc2NoZWR1bGVkIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZS5jYWxsKHRoaXMsIHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFNldCB0aGUgb3V0cHV0IG9mIHRoZSBzaWduYWwgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGFuZ2UgdG8gYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSB0aW1lICBUaGUgdGltZSB0byBjaGFuZ2UgdGhlIHNpZ25hbFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuc2V0VmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB2YWx1ZSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogTGluZWFyIHJhbXAgdG8gdGhlIGdpdmVuIHZhbHVlIGZyb20gdGhlIHByZXZpb3VzIHNjaGVkdWxlZCBwb2ludCB0byB0aGUgZ2l2ZW4gdmFsdWVcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGFuZ2UgdG8gYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSB0aW1lICBUaGUgdGltZSB0byBjaGFuZ2UgdGhlIHNpZ25hbFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB2YWx1ZSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogRXhwb25lbnRpYWwgcmFtcCB0byB0aGUgZ2l2ZW4gdmFsdWUgZnJvbSB0aGUgcHJldmlvdXMgc2NoZWR1bGVkIHBvaW50IHRvIHRoZSBnaXZlbiB2YWx1ZVxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoYW5nZSB0byBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSAge1RyYW5zcG9ydFRpbWV9IHRpbWUgIFRoZSB0aW1lIHRvIGNoYW5nZSB0aGUgc2lnbmFsXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB2YWx1ZSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IGV4cG9uZW50aWFsbHkgYXBwcm9hY2hpbmcgdGhlIHRhcmdldCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZSB3aXRoXG5cdFx0ICogIGEgcmF0ZSBoYXZpbmcgdGhlIGdpdmVuIHRpbWUgY29uc3RhbnQuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdGltZUNvbnN0YW50XG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuc2V0VGFyZ2V0QXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCBzdGFydFRpbWUsIHRpbWVDb25zdGFudCkge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZShzdGFydFRpbWUpO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5zZXRUYXJnZXRBdFRpbWUuY2FsbCh0aGlzLCB2YWx1ZSwgc3RhcnRUaW1lLCB0aW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWxzIGFsbCBzY2hlZHVsZWQgcGFyYW1ldGVyIGNoYW5nZXMgd2l0aCB0aW1lcyBncmVhdGVyIHRoYW4gb3Jcblx0XHQgKiAgZXF1YWwgdG8gc3RhcnRUaW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyA9IGZ1bmN0aW9uIChzdGFydFRpbWUpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUoc3RhcnRUaW1lKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuY2FuY2VsU2NoZWR1bGVkVmFsdWVzLmNhbGwodGhpcywgc3RhcnRUaW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IGFuIGFycmF5IG9mIGFyYml0cmFyeSB2YWx1ZXMgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHRpbWUgZm9yIHRoZSBnaXZlbiBkdXJhdGlvbi5cblx0XHQgKiAgQHBhcmFtIHtGbG9hdDMyQXJyYXl9IHZhbHVlc1xuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGR1cmF0aW9uXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtzY2FsaW5nPTFdIElmIHRoZSB2YWx1ZXMgaW4gdGhlIGN1cnZlIHNob3VsZCBiZSBzY2FsZWQgYnkgc29tZSB2YWx1ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLnNldFZhbHVlQ3VydmVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWVzLCBzdGFydFRpbWUsIGR1cmF0aW9uLCBzY2FsaW5nKSB7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSBUb25lLlRyYW5zcG9ydFRpbWUoZHVyYXRpb24pO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUN1cnZlQXRUaW1lLmNhbGwodGhpcywgdmFsdWVzLCBzdGFydFRpbWUsIGR1cmF0aW9uLCBzY2FsaW5nKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhpcyBpcyBzaW1pbGFyIHRvIFtjYW5jZWxTY2hlZHVsZWRWYWx1ZXNdKCNjYW5jZWxTY2hlZHVsZWRWYWx1ZXMpIGV4Y2VwdFxuXHRcdCAqICBpdCBob2xkcyB0aGUgYXV0b21hdGVkIHZhbHVlIGF0IHRpbWUgdW50aWwgdGhlIG5leHQgYXV0b21hdGVkIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5jYW5jZWxBbmRIb2xkQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5TaWduYWwucHJvdG90eXBlLmNhbmNlbEFuZEhvbGRBdFRpbWUuY2FsbCh0aGlzLCBUb25lLlRyYW5zcG9ydFRpbWUodGltZSkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIERpc3Bvc2UgYW5kIGRpc2Nvbm5lY3Rcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX3N5bmNlZCk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQub2ZmKCdzdGFydCBzdG9wIHBhdXNlJywgdGhpcy5fc3luY2VkQ2FsbGJhY2spO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5jYW5jZWwoMCk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9vdXRwdXRTaWcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX291dHB1dFNpZyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWw7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqIEBjbGFzcyBUb25lLkdyYWluUGxheWVyIGltcGxlbWVudHMgW2dyYW51bGFyIHN5bnRoZXNpc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR3JhbnVsYXJfc3ludGhlc2lzKS5cblx0XHQgKiAgICAgICAgR3JhbnVsYXIgU3ludGhlc2lzIGVuYWJsZXMgeW91IHRvIGFkanVzdCBwaXRjaCBhbmQgcGxheWJhY2sgcmF0ZSBpbmRlcGVuZGVudGx5LiBUaGUgZ3JhaW5TaXplIGlzIHRoZVxuXHRcdCAqICAgICAgICBhbW91bnQgb2YgdGltZSBlYWNoIHNtYWxsIGNodW5rIG9mIGF1ZGlvIGlzIHBsYXllZCBmb3IgYW5kIHRoZSBvdmVybGFwIGlzIHRoZVxuXHRcdCAqICAgICAgICBhbW91bnQgb2YgY3Jvc3NmYWRpbmcgdHJhbnNpdGlvbiB0aW1lIGJldHdlZW4gc3VjY2Vzc2l2ZSBncmFpbnMuXG5cdFx0ICogQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfFRvbmUuQnVmZmVyfSB1cmxcdFRoZSB1cmwgdG8gbG9hZCwgb3IgdGhlIFRvbmUuQnVmZmVyIHRvIHBsYXkuXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGhlIHVybCBpcyBsb2FkZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3VybCcsXG5cdCAgICAgICAgICAgICdvbmxvYWQnXG5cdCAgICAgICAgXSwgVG9uZS5HcmFpblBsYXllcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYXVkaW8gYnVmZmVyIGJlbG9uZ2luZyB0byB0aGUgcGxheWVyLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5CdWZmZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcihvcHRpb25zLnVybCwgb3B0aW9ucy5vbmxvYWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIENyZWF0ZSBhIHJlcGVhdGluZyB0aWNrIHRvIHNjaGVkdWxlXG5cdFx0XHQgKiAgdGhlIGdyYWlucy5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQ2xvY2t9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrID0gbmV3IFRvbmUuQ2xvY2sodGhpcy5fdGljay5iaW5kKHRoaXMpLCBvcHRpb25zLmdyYWluU2l6ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BFbmQgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogQWxsIG9mIHRoZSBjdXJyZW50bHkgcGxheWluZyBCdWZmZXJTb3VyY2VzXG5cdFx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ3JhaW5TaXplID0gb3B0aW9ucy5ncmFpblNpemU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3ZlcmxhcCA9IG9wdGlvbnMub3ZlcmxhcDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBZGp1c3QgdGhlIHBpdGNoIGluZGVwZW5kZW50bHkgb2YgdGhlIHBsYXliYWNrUmF0ZS5cblx0XHRcdCAqICBAdHlwZSAge0NlbnRzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBvcHRpb25zLmRldHVuZTtcblx0ICAgICAgICAvL3NldHVwXG5cdCAgICAgICAgdGhpcy5vdmVybGFwID0gb3B0aW9ucy5vdmVybGFwO1xuXHQgICAgICAgIHRoaXMubG9vcCA9IG9wdGlvbnMubG9vcDtcblx0ICAgICAgICB0aGlzLnBsYXliYWNrUmF0ZSA9IG9wdGlvbnMucGxheWJhY2tSYXRlO1xuXHQgICAgICAgIHRoaXMuZ3JhaW5TaXplID0gb3B0aW9ucy5ncmFpblNpemU7XG5cdCAgICAgICAgdGhpcy5sb29wU3RhcnQgPSBvcHRpb25zLmxvb3BTdGFydDtcblx0ICAgICAgICB0aGlzLmxvb3BFbmQgPSBvcHRpb25zLmxvb3BFbmQ7XG5cdCAgICAgICAgdGhpcy5yZXZlcnNlID0gb3B0aW9ucy5yZXZlcnNlO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLm9uKCdzdG9wJywgdGhpcy5fb25zdG9wLmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR3JhaW5QbGF5ZXIsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvbmxvYWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ292ZXJsYXAnOiAwLjEsXG5cdCAgICAgICAgJ2dyYWluU2l6ZSc6IDAuMixcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMSxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAnbG9vcCc6IGZhbHNlLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdsb29wRW5kJzogMCxcblx0ICAgICAgICAncmV2ZXJzZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBsYXkgdGhlIGJ1ZmZlciBhdCB0aGUgZ2l2ZW4gc3RhcnRUaW1lLiBPcHRpb25hbGx5IGFkZCBhbiBvZmZzZXRcblx0XHQgKiAgYW5kL29yIGR1cmF0aW9uIHdoaWNoIHdpbGwgcGxheSB0aGUgYnVmZmVyIGZyb20gYSBwb3NpdGlvblxuXHRcdCAqICB3aXRoaW4gdGhlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtzdGFydFRpbWU9bm93XSBXaGVuIHRoZSBwbGF5ZXIgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbb2Zmc2V0PTBdIFRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGF0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIHNhbXBsZSBzaG91bGQgcGxheS4gSWYgbm8gZHVyYXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZ2l2ZW4sIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgZnVsbCBsZW5ndGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNhbXBsZSAobWludXMgYW55IG9mZnNldClcblx0XHQgKiAgQHJldHVybnMge1RvbmUuR3JhaW5QbGF5ZXJ9IHRoaXNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogIEBtZXRob2Qgc3RhcnRcblx0XHQgKiAgQG5hbWUgc3RhcnRcblx0XHQgKi9cblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBzdGFydCBtZXRob2Rcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gb2Zmc2V0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0LCBkdXJhdGlvbikge1xuXHQgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgIG9mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX29mZnNldCA9IG9mZnNldDtcblx0ICAgICAgICB0aGlzLl9jbG9jay5zdGFydCh0aW1lKTtcblx0ICAgICAgICBpZiAoZHVyYXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5zdG9wKHRpbWUgKyB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbikpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgc3RhcnQgbWV0aG9kXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLnN0b3AodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlZCB3aGVuIHRoZSBjbG9jayBpcyBzdG9wcGVkXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB0aW1lXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLl9vbnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vc3RvcCB0aGUgcGxheWVyc1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgIHNvdXJjZS5zdG9wKHRpbWUsIDApO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnZva2VkIG9uIGVhY2ggY2xvY2sgdGljay4gc2NoZWR1bGVkIGEgbmV3XG5cdFx0ICogIGdyYWluIGF0IHRoaXMgdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLl90aWNrID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgZmFkZUluID0gdGhpcy5fb2Zmc2V0IDwgdGhpcy5fb3ZlcmxhcCA/IDAgOiB0aGlzLl9vdmVybGFwO1xuXHQgICAgICAgIHZhciBzb3VyY2UgPSBuZXcgVG9uZS5CdWZmZXJTb3VyY2Uoe1xuXHQgICAgICAgICAgICAnYnVmZmVyJzogdGhpcy5idWZmZXIsXG5cdCAgICAgICAgICAgICdmYWRlSW4nOiBmYWRlSW4sXG5cdCAgICAgICAgICAgICdmYWRlT3V0JzogdGhpcy5fb3ZlcmxhcCxcblx0ICAgICAgICAgICAgJ2xvb3AnOiB0aGlzLmxvb3AsXG5cdCAgICAgICAgICAgICdsb29wU3RhcnQnOiB0aGlzLl9sb29wU3RhcnQsXG5cdCAgICAgICAgICAgICdsb29wRW5kJzogdGhpcy5fbG9vcEVuZCxcblx0ICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKHRoaXMuZGV0dW5lIC8gMTAwKVxuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHNvdXJjZS5zdGFydCh0aW1lLCB0aGlzLl9vZmZzZXQpO1xuXHQgICAgICAgIHRoaXMuX29mZnNldCArPSB0aGlzLmdyYWluU2l6ZTtcblx0ICAgICAgICBzb3VyY2Uuc3RvcCh0aW1lICsgdGhpcy5ncmFpblNpemUpO1xuXHQgICAgICAgIC8vYWRkIGl0IHRvIHRoZSBhY3RpdmUgc291cmNlc1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMucHVzaChzb3VyY2UpO1xuXHQgICAgICAgIC8vcmVtb3ZlIGl0IHdoZW4gaXQncyBkb25lXG5cdCAgICAgICAgc291cmNlLm9uZW5kZWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2FjdGl2ZVNvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXHQgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEp1bXAgdG8gYSBzcGVjaWZpYyB0aW1lIGFuZCBwbGF5IGl0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgb2Zmc2V0ICBUaGUgb2Zmc2V0IHRvIGp1bXAgdG8uXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHRpbWUgV2hlbiB0byBtYWtlIHRoZSBqdW1wLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5HcmFpblBsYXllcn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLnNlZWsgPSBmdW5jdGlvbiAob2Zmc2V0LCB0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fb2Zmc2V0ID0gdGhpcy50b1NlY29uZHMob2Zmc2V0KTtcblx0ICAgICAgICB0aGlzLl90aWNrKHRoaXMudG9TZWNvbmRzKHRpbWUpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgc2FtcGxlXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBuYW1lIHBsYXliYWNrUmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgICAgICB0aGlzLmdyYWluU2l6ZSA9IHRoaXMuX2dyYWluU2l6ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBsb29wIHN0YXJ0IHRpbWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdsb29wU3RhcnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wU3RhcnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGxvb3AgZW5kIHRpbWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3BFbmQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkaXJlY3Rpb24gdGhlIGJ1ZmZlciBzaG91bGQgcGxheSBpblxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBuYW1lIHJldmVyc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZSwgJ3JldmVyc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlci5yZXZlcnNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmV2KSB7XG5cdCAgICAgICAgICAgIHRoaXMuYnVmZmVyLnJldmVyc2UgPSByZXY7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc2l6ZSBvZiBlYWNoIGNodW5rIG9mIGF1ZGlvIHRoYXQgdGhlXG5cdFx0ICogYnVmZmVyIGlzIGNob3BwZWQgaW50byBhbmQgcGxheWVkIGJhY2sgYXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgZ3JhaW5TaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdncmFpblNpemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ncmFpblNpemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2dyYWluU2l6ZSA9IHRoaXMudG9TZWNvbmRzKHNpemUpO1xuXHQgICAgICAgICAgICB0aGlzLl9jbG9jay5mcmVxdWVuY3kudmFsdWUgPSB0aGlzLl9wbGF5YmFja1JhdGUgLyB0aGlzLl9ncmFpblNpemU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGlzIGlzIHRoZSBkdXJhdGlvbiBvZiB0aGUgY3Jvc3MtZmFkZSBiZXR3ZWVuXG5cdFx0ICogc3VjZXNzaXZlIGdyYWlucy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HcmFpblBsYXllciNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBvdmVybGFwXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdvdmVybGFwJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxhcDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3ZlcmxhcCA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcmV0dXJuIHtUb25lLkdyYWluUGxheWVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5idWZmZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jbG9jay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgIHNvdXJjZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR3JhaW5QbGF5ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5QbGF5ZXIgaXMgYW4gYXVkaW8gZmlsZSBwbGF5ZXIgd2l0aCBzdGFydCwgbG9vcCwgYW5kIHN0b3AgZnVuY3Rpb25zLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfEF1ZGlvQnVmZmVyfSB1cmwgRWl0aGVyIHRoZSBBdWRpb0J1ZmZlciBvciB0aGUgdXJsIGZyb21cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB0byBsb2FkIHRoZSBBdWRpb0J1ZmZlclxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9uPX0gb25sb2FkIFRoZSBmdW5jdGlvbiB0byBpbnZva2Ugd2hlbiB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWNvbW1lbmRlZCB0byB1c2UgVG9uZS5CdWZmZXIub24oJ2xvYWQnKSBpbnN0ZWFkLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwbGF5ZXIgPSBuZXcgVG9uZS5QbGF5ZXIoXCIuL3BhdGgvdG8vc2FtcGxlLm1wM1wiKS50b01hc3RlcigpO1xuXHRcdCAqIC8vcGxheSBhcyBzb29uIGFzIHRoZSBidWZmZXIgaXMgbG9hZGVkXG5cdFx0ICogcGxheWVyLmF1dG9zdGFydCA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllciA9IGZ1bmN0aW9uICh1cmwpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucztcblx0ICAgICAgICBpZiAodXJsIGluc3RhbmNlb2YgVG9uZS5CdWZmZXIgJiYgdXJsLmxvYWRlZCkge1xuXHQgICAgICAgICAgICB1cmwgPSB1cmwuZ2V0KCk7XG5cdCAgICAgICAgICAgIG9wdGlvbnMgPSBUb25lLlBsYXllci5kZWZhdWx0cztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgICAgICd1cmwnLFxuXHQgICAgICAgICAgICAgICAgJ29ubG9hZCdcblx0ICAgICAgICAgICAgXSwgVG9uZS5QbGF5ZXIpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIElmIHRoZSBmaWxlIHNob3VsZCBwbGF5IGFzIHNvb25cblx0XHRcdCAqICBhcyB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogLy93aWxsIHBsYXkgYXMgc29vbiBhcyBpdCdzIGxvYWRlZFxuXHRcdFx0ICogdmFyIHBsYXllciA9IG5ldyBUb25lLlBsYXllcih7XG5cdFx0XHQgKiBcdFwidXJsXCIgOiBcIi4vcGF0aC90by9zYW1wbGUubXAzXCIsXG5cdFx0XHQgKiBcdFwiYXV0b3N0YXJ0XCIgOiB0cnVlLFxuXHRcdFx0ICogfSkudG9NYXN0ZXIoKTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYXV0b3N0YXJ0ID0gb3B0aW9ucy5hdXRvc3RhcnQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGJ1ZmZlclxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKHtcblx0ICAgICAgICAgICAgJ3VybCc6IG9wdGlvbnMudXJsLFxuXHQgICAgICAgICAgICAnb25sb2FkJzogdGhpcy5fb25sb2FkLmJpbmQodGhpcywgb3B0aW9ucy5vbmxvYWQpLFxuXHQgICAgICAgICAgICAncmV2ZXJzZSc6IG9wdGlvbnMucmV2ZXJzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIGlmICh1cmwgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIuc2V0KHVybCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGlmIHRoZSBidWZmZXIgc2hvdWxkIGxvb3Agb25jZSBpdCdzIG92ZXJcblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcCA9IG9wdGlvbnMubG9vcDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpZiAnbG9vcCcgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBzdGFydCBhdCB0aGlzIHBvc2l0aW9uXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IG9wdGlvbnMubG9vcFN0YXJ0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGlmICdsb29wJyBpcyB0cnVlLCB0aGUgbG9vcCB3aWxsIGVuZCBhdCB0aGlzIHBvc2l0aW9uXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BFbmQgPSBvcHRpb25zLmxvb3BFbmQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHBsYXliYWNrIHJhdGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGwgb2YgdGhlIGFjdGl2ZSBidWZmZXIgc291cmNlIG5vZGVzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5PFRvbmUuQnVmZmVyU291cmNlPn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBlbGFwc2VkIHRpbWUgY291bnRlci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UaWNrU291cmNlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IG5ldyBUb25lLlRpY2tTb3VyY2Uob3B0aW9ucy5wbGF5YmFja1JhdGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmYWRlSW4gdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mYWRlSW4gPSBvcHRpb25zLmZhZGVJbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmFkZU91dCB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZhZGVPdXQgPSBvcHRpb25zLmZhZGVPdXQ7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QbGF5ZXIsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxLFxuXHQgICAgICAgICdsb29wJzogZmFsc2UsXG5cdCAgICAgICAgJ2F1dG9zdGFydCc6IGZhbHNlLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdsb29wRW5kJzogMCxcblx0ICAgICAgICAncmV0cmlnZ2VyJzogZmFsc2UsXG5cdCAgICAgICAgJ3JldmVyc2UnOiBmYWxzZSxcblx0ICAgICAgICAnZmFkZUluJzogMCxcblx0ICAgICAgICAnZmFkZU91dCc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTG9hZCB0aGUgYXVkaW8gZmlsZSBhcyBhbiBhdWRpbyBidWZmZXIuXG5cdFx0ICogIERlY29kZXMgdGhlIGF1ZGlvIGFzeW5jaHJvbm91c2x5IGFuZCBpbnZva2VzXG5cdFx0ICogIHRoZSBjYWxsYmFjayBvbmNlIHRoZSBhdWRpbyBidWZmZXIgbG9hZHMuXG5cdFx0ICogIE5vdGU6IHRoaXMgZG9lcyBub3QgbmVlZCB0byBiZSBjYWxsZWQgaWYgYSB1cmxcblx0XHQgKiAgd2FzIHBhc3NlZCBpbiB0byB0aGUgY29uc3RydWN0b3IuIE9ubHkgdXNlIHRoaXNcblx0XHQgKiAgaWYgeW91IHdhbnQgdG8gbWFudWFsbHkgbG9hZCBhIG5ldyB1cmwuXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgdXJsIG9mIHRoZSBidWZmZXIgdG8gbG9hZC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgIEZpbGV0eXBlIHN1cHBvcnQgZGVwZW5kcyBvbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXIuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIGludm9rZSBvbmNlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNhbXBsZSBpcyBsb2FkZWQuXG5cdFx0ICogIEByZXR1cm5zIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubG9hZCh1cmwsIHRoaXMuX29ubG9hZC5iaW5kKHRoaXMsIGNhbGxiYWNrKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW50ZXJuYWwgY2FsbGJhY2sgd2hlbiB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9vbmxvYWQgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICBjYWxsYmFjayA9IFRvbmUuZGVmYXVsdEFyZyhjYWxsYmFjaywgVG9uZS5ub09wKTtcblx0ICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICBpZiAodGhpcy5hdXRvc3RhcnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5zdGFydCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJbnRlcm5hbCBjYWxsYmFjayB3aGVuIHRoZSBidWZmZXIgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuX29uU291cmNlRW5kID0gZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2FjdGl2ZVNvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUGxheSB0aGUgYnVmZmVyIGF0IHRoZSBnaXZlbiBzdGFydFRpbWUuIE9wdGlvbmFsbHkgYWRkIGFuIG9mZnNldFxuXHRcdCAqICBhbmQvb3IgZHVyYXRpb24gd2hpY2ggd2lsbCBwbGF5IHRoZSBidWZmZXIgZnJvbSBhIHBvc2l0aW9uXG5cdFx0ICogIHdpdGhpbiB0aGUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4gZHVyYXRpb24uXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3N0YXJ0VGltZT1ub3ddIFdoZW4gdGhlIHBsYXllciBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtvZmZzZXQ9MF0gVGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNhbXBsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc3RhcnQgYXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSBkdXJhdGlvbiBIb3cgbG9uZyB0aGUgc2FtcGxlIHNob3VsZCBwbGF5LiBJZiBubyBkdXJhdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBnaXZlbiwgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBmdWxsIGxlbmd0aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc2FtcGxlIChtaW51cyBhbnkgb2Zmc2V0KVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqICBAbWV0aG9kIHN0YXJ0XG5cdFx0ICogIEBuYW1lIHN0YXJ0XG5cdFx0ICovXG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgc3RhcnQgbWV0aG9kXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHN0YXJ0VGltZSwgb2Zmc2V0LCBkdXJhdGlvbikge1xuXHQgICAgICAgIC8vaWYgaXQncyBhIGxvb3AgdGhlIGRlZmF1bHQgb2Zmc2V0IGlzIHRoZSBsb29wc3RhcnQgcG9pbnRcblx0ICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCB0aGlzLl9sb29wU3RhcnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IG9mZnNldCBpcyAwXG5cdCAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NvbXB1dGUgdGhlIHZhbHVlcyBpbiBzZWNvbmRzXG5cdCAgICAgICAgb2Zmc2V0ID0gdGhpcy50b1NlY29uZHMob2Zmc2V0KTtcblx0ICAgICAgICB2YXIgY29tcHV0ZWREdXJhdGlvbiA9IFRvbmUuZGVmYXVsdEFyZyhkdXJhdGlvbiwgTWF0aC5tYXgodGhpcy5fYnVmZmVyLmR1cmF0aW9uIC0gb2Zmc2V0LCAwKSk7XG5cdCAgICAgICAgY29tcHV0ZWREdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGNvbXB1dGVkRHVyYXRpb24pO1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgZWxhcHNlZCB0aW1lIGNvdW50ZXJcblx0ICAgICAgICB0aGlzLl9lbGFwc2VkVGltZS5zdGFydChzdGFydFRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgLy9tYWtlIHRoZSBzb3VyY2Vcblx0ICAgICAgICB2YXIgc291cmNlID0gbmV3IFRvbmUuQnVmZmVyU291cmNlKHtcblx0ICAgICAgICAgICAgJ2J1ZmZlcic6IHRoaXMuX2J1ZmZlcixcblx0ICAgICAgICAgICAgJ2xvb3AnOiB0aGlzLl9sb29wLFxuXHQgICAgICAgICAgICAnbG9vcFN0YXJ0JzogdGhpcy5fbG9vcFN0YXJ0LFxuXHQgICAgICAgICAgICAnbG9vcEVuZCc6IHRoaXMuX2xvb3BFbmQsXG5cdCAgICAgICAgICAgICdvbmVuZGVkJzogdGhpcy5fb25Tb3VyY2VFbmQuYmluZCh0aGlzKSxcblx0ICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IHRoaXMuX3BsYXliYWNrUmF0ZSxcblx0ICAgICAgICAgICAgJ2ZhZGVJbic6IHRoaXMuZmFkZUluLFxuXHQgICAgICAgICAgICAnZmFkZU91dCc6IHRoaXMuZmFkZU91dFxuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBsb29waW5nIHByb3BlcnRpZXNcblx0ICAgICAgICBpZiAoIXRoaXMuX2xvb3AgJiYgIXRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICAvL2lmIGl0J3Mgbm90IGxvb3BpbmcsIHNldCB0aGUgc3RhdGUgY2hhbmdlIGF0IHRoZSBlbmQgb2YgdGhlIHNhbXBsZVxuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHN0YXJ0VGltZSArIGNvbXB1dGVkRHVyYXRpb24gLyB0aGlzLl9wbGF5YmFja1JhdGUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2FkZCBpdCB0byB0aGUgYXJyYXkgb2YgYWN0aXZlIHNvdXJjZXNcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLnB1c2goc291cmNlKTtcblx0ICAgICAgICAvL3N0YXJ0IGl0XG5cdCAgICAgICAgaWYgKHRoaXMuX2xvb3AgJiYgVG9uZS5pc1VuZGVmKGR1cmF0aW9uKSkge1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RhcnQoc3RhcnRUaW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHNvdXJjZS5zdGFydChzdGFydFRpbWUsIG9mZnNldCwgY29tcHV0ZWREdXJhdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHBsYXliYWNrLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBsYXllcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUuc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIGFuZCB0aGVuIHJlc3RhcnQgdGhlIHBsYXllciBmcm9tIHRoZSBiZWdpbm5pbmcgKG9yIG9mZnNldClcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3N0YXJ0VGltZT1ub3ddIFdoZW4gdGhlIHBsYXllciBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtvZmZzZXQ9MF0gVGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNhbXBsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc3RhcnQgYXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSBkdXJhdGlvbiBIb3cgbG9uZyB0aGUgc2FtcGxlIHNob3VsZCBwbGF5LiBJZiBubyBkdXJhdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBnaXZlbiwgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBmdWxsIGxlbmd0aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc2FtcGxlIChtaW51cyBhbnkgb2Zmc2V0KVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCwgZHVyYXRpb24pIHtcblx0ICAgICAgICB0aGlzLl9zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0KHRpbWUsIG9mZnNldCwgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZWVrIHRvIGEgc3BlY2lmaWMgdGltZSBpbiB0aGUgcGxheWVyJ3MgYnVmZmVyLiBJZiB0aGVcblx0XHQgKiAgc291cmNlIGlzIG5vIGxvbmdlciBwbGF5aW5nIGF0IHRoYXQgdGltZSwgaXQgd2lsbCBzdG9wLlxuXHRcdCAqICBJZiB5b3Ugc2VlayB0byBhIHRpbWUgdGhhdFxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IG9mZnNldCBUaGUgdGltZSB0byBzZWVrIHRvLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSB0aW1lIFRoZSB0aW1lIGZvciB0aGUgc2VlayBldmVudCB0byBvY2N1ci5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzb3VyY2Uuc3RhcnQoMC4yKTtcblx0XHQgKiBzb3VyY2Uuc3RvcCgwLjQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLnNlZWsgPSBmdW5jdGlvbiAob2Zmc2V0LCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIG9mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgICAgIC8vIGlmIGl0J3MgY3VycmVudGx5IHBsYXlpbmcsIHN0b3AgaXRcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcCh0aW1lKTtcblx0ICAgICAgICAgICAgLy9yZXN0YXJ0IGl0IGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIGxvb3Agc3RhcnQgYW5kIGVuZC4gV2lsbCBvbmx5IGxvb3AgaWYgbG9vcCBpc1xuXHRcdCAqICBzZXQgdG8gdHJ1ZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBsb29wU3RhcnQgVGhlIGxvb3AgZW5kIHRpbWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBsb29wRW5kIFRoZSBsb29wIGVuZCB0aW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBsYXllcn0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbG9vcCAwLjEgc2Vjb25kcyBvZiB0aGUgZmlsZS5cblx0XHQgKiBwbGF5ZXIuc2V0TG9vcFBvaW50cygwLjIsIDAuMyk7XG5cdFx0ICogcGxheWVyLmxvb3AgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLnNldExvb3BQb2ludHMgPSBmdW5jdGlvbiAobG9vcFN0YXJ0LCBsb29wRW5kKSB7XG5cdCAgICAgICAgdGhpcy5sb29wU3RhcnQgPSBsb29wU3RhcnQ7XG5cdCAgICAgICAgdGhpcy5sb29wRW5kID0gbG9vcEVuZDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiBsb29wIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgc3RhcnQgYXQgdGhpcyBwb3NpdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcFN0YXJ0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcFN0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IGxvb3BTdGFydDtcblx0ICAgICAgICAgICAgLy9nZXQgdGhlIGN1cnJlbnQgc291cmNlXG5cdCAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICBzb3VyY2UubG9vcFN0YXJ0ID0gbG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGxvb3AgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBlbmQgYXQgdGhpcyBwb3NpdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wRW5kO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcEVuZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gbG9vcEVuZDtcblx0ICAgICAgICAgICAgLy9nZXQgdGhlIGN1cnJlbnQgc291cmNlXG5cdCAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICBzb3VyY2UubG9vcEVuZCA9IGxvb3BFbmQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGF1ZGlvIGJ1ZmZlciBiZWxvbmdpbmcgdG8gdGhlIHBsYXllci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdCAqIEBuYW1lIGJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIuc2V0KGJ1ZmZlcik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBJZiB0aGUgYnVmZmVyIHNob3VsZCBsb29wIG9uY2UgaXQncyBvdmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb29wXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAnbG9vcCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3A7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wKSB7XG5cdCAgICAgICAgICAgIC8vaWYgbm8gY2hhbmdlLCBkbyBub3RoaW5nXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wID09PSBsb29wKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fbG9vcCA9IGxvb3A7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICBpZiAoIWxvb3ApIHtcblx0ICAgICAgICAgICAgICAgIC8vc3RvcCB0aGUgcGxheWJhY2sgb24gdGhlIG5leHQgY3ljbGVcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0b3BBdE5leHRJdGVyYXRpb24obm93KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vcmVtb3ZlIHRoZSBuZXh0IHN0b3BFdmVudFxuXHQgICAgICAgICAgICAgICAgdmFyIHN0b3BFdmVudCA9IHRoaXMuX3N0YXRlLmdldE5leHRTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQsIG5vdyk7XG5cdCAgICAgICAgICAgICAgICBpZiAoc3RvcEV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmxvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbChzdG9wRXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUuY2FuY2VsKHN0b3BFdmVudC50aW1lKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhIHN0b3AgZXZlbnQgYXQgdGhlIG5leHQgZnVsbCBpdGVyYXRpb24uIFVzZWRcblx0XHQgKiAgZm9yIHNjaGVkdWxpbmcgc3RvcCB3aGVuIHRoZSBsb29wIHN0YXRlIG9yIHBsYXliYWNrUmF0ZSBjaGFuZ2VzXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIG5vdyAgVGhlIGN1cnJlbnQgdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9zdG9wQXROZXh0SXRlcmF0aW9uID0gZnVuY3Rpb24gKG5vdykge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZShub3cpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdmFyIG5leHRTdG9wID0gdGhpcy5fc3RhdGUuZ2V0TmV4dFN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCwgbm93KTtcblx0ICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5fZWxhcHNlZFRpbWUuZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgdmFyIGl0ZXJhdGlvbnMgPSBNYXRoLm1heChNYXRoLmNlaWwocG9zaXRpb24gLyB0aGlzLmJ1ZmZlci5kdXJhdGlvbiksIDEpO1xuXHQgICAgICAgICAgICB2YXIgc3RvcFRpbWUgPSB0aGlzLl9lbGFwc2VkVGltZS5nZXRUaW1lT2ZUaWNrKGl0ZXJhdGlvbnMgKiB0aGlzLmJ1ZmZlci5kdXJhdGlvbiwgbmV4dFN0b3AgPyBuZXh0U3RvcC50aW1lIC0gdGhpcy5zYW1wbGVUaW1lIDogSW5maW5pdHkpO1xuXHQgICAgICAgICAgICB0aGlzLnN0b3Aoc3RvcFRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGxheWJhY2sgc3BlZWQuIDEgaXMgbm9ybWFsIHNwZWVkLiBUaGlzIGlzIG5vdCBhIHNpZ25hbCBiZWNhdXNlXG5cdFx0ICogU2FmYXJpIGFuZCBpT1MgY3VycmVudGx5IGRvbid0IHN1cHBvcnQgcGxheWJhY2tSYXRlIGFzIGEgc2lnbmFsLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBsYXliYWNrUmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lLmZyZXF1ZW5jeS5zZXRWYWx1ZUF0VGltZShyYXRlLCBub3cpO1xuXHQgICAgICAgICAgICAvL2lmIGl0J3Mgbm90IGxvb3Bpbmdcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdG9wQXROZXh0SXRlcmF0aW9uKG5vdyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9zZXQgYWxsIHRoZSBzb3VyY2VzXG5cdCAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICBzb3VyY2UucGxheWJhY2tSYXRlLnNldFZhbHVlQXRUaW1lKHJhdGUsIG5vdyk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGN1cnJlbnQgcGxheWJhY2sgcG9zaXRpb24gb2YgdGhlIGJ1ZmZlci4gXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgcG9zaXRpb25cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdwb3NpdGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZShub3cpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgdGhpcy5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBkdXJhdGlvbiA9IHRoaXMuYnVmZmVyLmR1cmF0aW9uO1xuXHQgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5fZWxhcHNlZFRpbWUuZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiAlIGR1cmF0aW9uO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkaXJlY3Rpb24gdGhlIGJ1ZmZlciBzaG91bGQgcGxheSBpblxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSByZXZlcnNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAncmV2ZXJzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5yZXZlcnNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmV2KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlci5yZXZlcnNlID0gcmV2O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogSWYgYWxsIHRoZSBidWZmZXIgaXMgbG9hZGVkXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvYWRlZFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2xvYWRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sb2FkZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGlzcG9zZSBhbmQgZGlzY29ubmVjdC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vZGlzY29ubmVjdCBhbGwgb2YgdGhlIHBsYXllcnNcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICBzb3VyY2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBudWxsO1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGxheWVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUGxheWVycyBjb21iaW5lcyBtdWx0aXBsZSBbVG9uZS5QbGF5ZXJdKFBsYXllcikgb2JqZWN0cy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gdXJscyBBbiBvYmplY3QgbWFwcGluZyBhIG5hbWUgdG8gYSB1cmwuXG5cdFx0ICogIEBwYXJhbSB7ZnVuY3Rpb249fSBvbmxvYWQgVGhlIGZ1bmN0aW9uIHRvIGludm9rZSB3aGVuIGFsbCBidWZmZXJzIGFyZSBsb2FkZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMgPSBmdW5jdGlvbiAodXJscykge1xuXHQgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICBhcmdzLnNoaWZ0KCk7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3MsIFsnb25sb2FkJ10sIFRvbmUuUGxheWVycyk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvdXRwdXQgdm9sdW1lIG5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVm9sdW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlZvbHVtZShvcHRpb25zLnZvbHVtZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdm9sdW1lIG9mIHRoZSBvdXRwdXQgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKiBAZXhhbXBsZVxuXHRcdFx0ICogc291cmNlLnZvbHVtZS52YWx1ZSA9IC02O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICAvL21ha2UgdGhlIG91dHB1dCBleHBsaWNpdGx5IHN0ZXJlb1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5vdXRwdXQub3V0cHV0LmNoYW5uZWxDb3VudCA9IDI7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLm91dHB1dC5vdXRwdXQuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgLy9tdXRlIGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMubXV0ZSA9IG9wdGlvbnMubXV0ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBjb250YWluZXIgb2YgYWxsIG9mIHRoZSBwbGF5ZXJzXG5cdFx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BsYXllcnMgPSB7fTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBsb2FkaW5nIGNvdW50XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudCA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBwcml2YXRlIGhvbGRlciBvZiB0aGUgZmFkZUluIHRpbWVcblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZhZGVJbiA9IG9wdGlvbnMuZmFkZUluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogcHJpdmF0ZSBob2xkZXIgb2YgdGhlIGZhZGVPdXQgdGltZVxuXHRcdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmFkZU91dCA9IG9wdGlvbnMuZmFkZU91dDtcblx0ICAgICAgICAvL2FkZCBhbGwgb2YgdGhlIHBsYXllcnNcblx0ICAgICAgICBmb3IgKHZhciBuYW1lIGluIHVybHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50Kys7XG5cdCAgICAgICAgICAgIHRoaXMuYWRkKG5hbWUsIHVybHNbbmFtZV0sIHRoaXMuX2J1ZmZlckxvYWRlZC5iaW5kKHRoaXMsIG9wdGlvbnMub25sb2FkKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGxheWVycywgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlLFxuXHQgICAgICAgICdvbmxvYWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2ZhZGVJbic6IDAsXG5cdCAgICAgICAgJ2ZhZGVPdXQnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEEgYnVmZmVyIHdhcyBsb2FkZWQuIGRlY3JlbWVudCB0aGUgY291bnRlci5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFja1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5fYnVmZmVyTG9hZGVkID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50LS07XG5cdCAgICAgICAgaWYgKHRoaXMuX2xvYWRpbmdDb3VudCA9PT0gMCAmJiBjYWxsYmFjaykge1xuXHQgICAgICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNvdXJjZSNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIHNvdXJjZS5tdXRlID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllcnMucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZvbHVtZS5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZmFkZUluIHRpbWUgb2YgdGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Tb3VyY2UjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgZmFkZUluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXJzLnByb3RvdHlwZSwgJ2ZhZGVJbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZhZGVJbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGZhZGVJbikge1xuXHQgICAgICAgICAgICB0aGlzLl9mYWRlSW4gPSBmYWRlSW47XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICAgICAgcGxheWVyLmZhZGVJbiA9IGZhZGVJbjtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZmFkZU91dCB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU291cmNlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGZhZGVPdXRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllcnMucHJvdG90eXBlLCAnZmFkZU91dCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZhZGVPdXQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmYWRlT3V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZhZGVPdXQgPSBmYWRlT3V0O1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHBsYXllci5mYWRlT3V0ID0gZmFkZU91dDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc3RhdGUgb2YgdGhlIHBsYXllcnMgb2JqZWN0LiBSZXR1cm5zIFwic3RhcnRlZFwiIGlmIGFueSBvZiB0aGUgcGxheWVycyBhcmUgcGxheWluZy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXJzI1xuXHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogQG5hbWUgc3RhdGVcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllcnMucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBwbGF5aW5nID0gZmFsc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICAgICAgcGxheWluZyA9IHBsYXlpbmcgfHwgcGxheWVyLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICByZXR1cm4gcGxheWluZyA/IFRvbmUuU3RhdGUuU3RhcnRlZCA6IFRvbmUuU3RhdGUuU3RvcHBlZDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcnVlIGlmIHRoZSBidWZmZXJzIG9iamVjdCBoYXMgYSBidWZmZXIgYnkgdGhhdCBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgbmFtZSAgVGhlIGtleSBvciBpbmRleCBvZiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5cblx0XHQgKiAgQHJldHVybiAge0Jvb2xlYW59XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcnMuaGFzT3duUHJvcGVydHkobmFtZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCBhIHBsYXllciBieSBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBuYW1lICBUaGUgcGxheWVycyBuYW1lIGFzIGRlZmluZWQgaW5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbnN0cnVjdG9yIG9iamVjdCBvciBgYWRkYCBtZXRob2QuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBsYXllcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5oYXMobmFtZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcnNbbmFtZV07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLlBsYXllcnM6IG5vIHBsYXllciBuYW1lZCAnICsgbmFtZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEl0ZXJhdGUgb3ZlciBhbGwgb2YgdGhlIHBsYXllcnNcblx0XHQgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2FsbGJhY2tcblx0XHQgKiBAcmV0dXJuIHtUb25lLlBsYXllcnN9ICAgICAgICAgICAgdGhpc1xuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLl9mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgZm9yICh2YXIgcGxheWVyTmFtZSBpbiB0aGlzLl9wbGF5ZXJzKSB7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMuX3BsYXllcnNbcGxheWVyTmFtZV0sIHBsYXllck5hbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiBhbGwgdGhlIGJ1ZmZlcnMgYXJlIGxvYWRlZCBvciBub3Rcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXJzI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvYWRlZFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVycy5wcm90b3R5cGUsICdsb2FkZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBpc0xvYWRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICAgICAgaXNMb2FkZWQgPSBpc0xvYWRlZCAmJiBwbGF5ZXIubG9hZGVkO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgcmV0dXJuIGlzTG9hZGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIHBsYXllciBieSBuYW1lIGFuZCB1cmwgdG8gdGhlIFBsYXllcnNcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgICBuYW1lICAgICAgQSB1bmlxdWUgbmFtZSB0byBnaXZlIHRoZSBwbGF5ZXJcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfFRvbmUuQnVmZmVyfEF1ZGlvYnVmZmVyfSAgdXJsICBFaXRoZXIgdGhlIHVybCBvZiB0aGUgYnVmZXIsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhZGRlZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGdpdmVuIG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSB1cmwgaXMgbG9hZGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAobmFtZSwgdXJsLCBjYWxsYmFjaykge1xuXHQgICAgICAgIHRoaXMuX3BsYXllcnNbbmFtZV0gPSBuZXcgVG9uZS5QbGF5ZXIodXJsLCBjYWxsYmFjaykuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcGxheWVyc1tuYW1lXS5mYWRlSW4gPSB0aGlzLl9mYWRlSW47XG5cdCAgICAgICAgdGhpcy5fcGxheWVyc1tuYW1lXS5mYWRlT3V0ID0gdGhpcy5fZmFkZU91dDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIGFsbCBvZiB0aGUgcGxheWVycyBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSB0byBzdG9wIGFsbCBvZiB0aGUgcGxheWVycy5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlBsYXllcnN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuc3RvcEFsbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAocGxheWVyKSB7XG5cdCAgICAgICAgICAgIHBsYXllci5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBEaXNwb3NlIGFuZCBkaXNjb25uZWN0LlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBsYXllcnN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgcGxheWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9wbGF5ZXJzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QbGF5ZXJzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuVXNlck1lZGlhIHVzZXMgTWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSB0byBvcGVuIHVwXG5cdFx0ICogICAgICAgICAgYW5kIGV4dGVybmFsIG1pY3JvcGhvbmUgb3IgYXVkaW8gaW5wdXQuIENoZWNrXG5cdFx0ICogICAgICAgICAgW01lZGlhRGV2aWNlcyBBUEkgU3VwcG9ydF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL01lZGlhRGV2aWNlcy9nZXRVc2VyTWVkaWEpXG5cdFx0ICogICAgICAgICAgdG8gc2VlIHdoaWNoIGJyb3dzZXJzIGFyZSBzdXBwb3J0ZWQuIEFjY2VzcyB0byBhbiBleHRlcm5hbCBpbnB1dFxuXHRcdCAqICAgICAgICAgIGlzIGxpbWl0ZWQgdG8gc2VjdXJlIChIVFRQUykgY29ubmVjdGlvbnMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVscz19IHZvbHVtZSBUaGUgbGV2ZWwgb2YgdGhlIGlucHV0XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9saXN0IHRoZSBpbnB1dHMgYW5kIG9wZW4gdGhlIHRoaXJkIG9uZVxuXHRcdCAqIHZhciBtb3R1ID0gbmV3IFRvbmUuVXNlck1lZGlhKCk7XG5cdFx0ICpcblx0XHQgKiAvL29wZW5pbmcgdGhlIGlucHV0IGFza3MgdGhlIHVzZXIgdG8gYWN0aXZhdGUgdGhlaXIgbWljXG5cdFx0ICogbW90dS5vcGVuKCkudGhlbihmdW5jdGlvbigpe1xuXHRcdCAqIFx0Ly9wcm9taXNlIHJlc29sdmVzIHdoZW4gaW5wdXQgaXMgYXZhaWxhYmxlXG5cdFx0ICogfSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3ZvbHVtZSddLCBUb25lLlVzZXJNZWRpYSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgTWVkaWFTdHJlYW1Ob2RlXG5cdFx0XHQgKiAgQHR5cGUge01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tZWRpYVN0cmVhbSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1lZGlhIHN0cmVhbSBjcmVhdGVkIGJ5IGdldFVzZXJNZWRpYS5cblx0XHRcdCAqICBAdHlwZSB7TG9jYWxNZWRpYVN0cmVhbX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RyZWFtID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3BlbiBkZXZpY2Vcblx0XHRcdCAqICBAdHlwZSAge01lZGlhRGV2aWNlSW5mb31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGV2aWNlID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3V0cHV0IHZvbHVtZSBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlZvbHVtZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUob3B0aW9ucy52b2x1bWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHZvbHVtZSBvZiB0aGUgb3V0cHV0IGluIGRlY2liZWxzLlxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICogQGV4YW1wbGVcblx0XHRcdCAqIGlucHV0LnZvbHVtZS52YWx1ZSA9IC02O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Vc2VyTWVkaWEsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBPcGVuIHRoZSBtZWRpYSBzdHJlYW0uIElmIGEgc3RyaW5nIGlzIHBhc3NlZCBpbiwgaXQgaXMgYXNzdW1lZFxuXHRcdCAqICB0byBiZSB0aGUgbGFiZWwgb3IgaWQgb2YgdGhlIHN0cmVhbSwgaWYgYSBudW1iZXIgaXMgcGFzc2VkIGluLFxuXHRcdCAqICBpdCBpcyB0aGUgaW5wdXQgbnVtYmVyIG9mIHRoZSBzdHJlYW0uXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9IFtsYWJlbE9ySWQ9XCJkZWZhdWx0XCJdIFRoZSBsYWJlbCBvciBpZCBvZiB0aGUgYXVkaW8gaW5wdXQgbWVkaWEgZGV2aWNlLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2l0aCBubyBhcmd1bWVudCwgdGhlIGRlZmF1bHQgc3RyZWFtIGlzIG9wZW5lZC5cblx0XHQgKiAgQHJldHVybiB7UHJvbWlzZX0gVGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgc3RyZWFtIGlzIG9wZW4uXG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uIChsYWJlbE9ySWQpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5Vc2VyTWVkaWEuZW51bWVyYXRlRGV2aWNlcygpLnRoZW4oZnVuY3Rpb24gKGRldmljZXMpIHtcblx0ICAgICAgICAgICAgdmFyIGRldmljZTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIobGFiZWxPcklkKSkge1xuXHQgICAgICAgICAgICAgICAgZGV2aWNlID0gZGV2aWNlc1tsYWJlbE9ySWRdO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgZGV2aWNlID0gZGV2aWNlcy5maW5kKGZ1bmN0aW9uIChkZXZpY2UpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlLmxhYmVsID09PSBsYWJlbE9ySWQgfHwgZGV2aWNlLmRldmljZUlkID09PSBsYWJlbE9ySWQ7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIC8vZGlkbid0IGZpbmQgYSBtYXRjaGluZyBkZXZpY2Vcblx0ICAgICAgICAgICAgICAgIGlmICghZGV2aWNlICYmIGRldmljZXMubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGRldmljZSA9IGRldmljZXNbMF07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFkZXZpY2UgJiYgVG9uZS5pc0RlZmluZWQobGFiZWxPcklkKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5Vc2VyTWVkaWE6IG5vIG1hdGNoaW5nIGRldmljZTogJyArIGxhYmVsT3JJZCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZGV2aWNlID0gZGV2aWNlO1xuXHQgICAgICAgICAgICAvL2RvIGdldFVzZXJNZWRpYVxuXHQgICAgICAgICAgICB2YXIgY29uc3RyYWludHMgPSB7XG5cdCAgICAgICAgICAgICAgICBhdWRpbzoge1xuXHQgICAgICAgICAgICAgICAgICAgICdlY2hvQ2FuY2VsbGF0aW9uJzogZmFsc2UsXG5cdCAgICAgICAgICAgICAgICAgICAgJ3NhbXBsZVJhdGUnOiB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBpZiAoZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICBjb25zdHJhaW50cy5hdWRpby5kZXZpY2VJZCA9IGRldmljZS5kZXZpY2VJZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoY29uc3RyYWludHMpLnRoZW4oZnVuY3Rpb24gKHN0cmVhbSkge1xuXHQgICAgICAgICAgICAgICAgLy9zdGFydCBhIG5ldyBzb3VyY2Ugb25seSBpZiB0aGUgcHJldmlvdXMgb25lIGlzIGNsb3NlZFxuXHQgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9zdHJlYW0pIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG5cdCAgICAgICAgICAgICAgICAgICAgLy9XcmFwIGEgTWVkaWFTdHJlYW1Tb3VyY2VOb2RlIGFyb3VuZCB0aGUgbGl2ZSBpbnB1dCBzdHJlYW0uXG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0gPSB0aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2Uoc3RyZWFtKTtcblx0ICAgICAgICAgICAgICAgICAgICAvL0Nvbm5lY3QgdGhlIE1lZGlhU3RyZWFtU291cmNlTm9kZSB0byBhIGdhdGUgZ2FpbiBub2RlXG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0uY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbG9zZSB0aGUgbWVkaWEgc3RyZWFtXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuVXNlck1lZGlhfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0cmVhbSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdHJlYW0uZ2V0QXVkaW9UcmFja3MoKS5mb3JFYWNoKGZ1bmN0aW9uICh0cmFjaykge1xuXHQgICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RyZWFtID0gbnVsbDtcblx0ICAgICAgICAgICAgLy9yZW1vdmUgdGhlIG9sZCBtZWRpYSBzdHJlYW1cblx0ICAgICAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9tZWRpYVN0cmVhbSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2RldmljZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgYSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdpdGggdGhlIGxpc3Qgb2YgYXVkaW8gaW5wdXQgZGV2aWNlcyBhdmFpbGFibGUuXG5cdFx0ICogIEByZXR1cm4ge1Byb21pc2V9IFRoZSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgZGV2aWNlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5Vc2VyTWVkaWEuZW51bWVyYXRlRGV2aWNlcygpLnRoZW4oZnVuY3Rpb24oZGV2aWNlcyl7XG5cdFx0ICogXHRjb25zb2xlLmxvZyhkZXZpY2VzKVxuXHRcdCAqIH0pXG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYS5lbnVtZXJhdGVEZXZpY2VzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKS50aGVuKGZ1bmN0aW9uIChkZXZpY2VzKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBkZXZpY2VzLmZpbHRlcihmdW5jdGlvbiAoZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlLmtpbmQgPT09ICdhdWRpb2lucHV0Jztcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIFwic3RhcnRlZFwiIHdoZW4gdGhlIG1pY3JvcGhvbmUgaXMgb3BlblxuXHRcdCAqICBhbmQgXCJzdG9wcGVkXCIgd2hlbiB0aGUgbWljIGlzIGNsb3NlZC5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdHJlYW0gJiYgdGhpcy5fc3RyZWFtLmFjdGl2ZSA/IFRvbmUuU3RhdGUuU3RhcnRlZCA6IFRvbmUuU3RhdGUuU3RvcHBlZDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0UmV0dXJucyBhbiBpZGVudGlmaWVyIGZvciB0aGUgcmVwcmVzZW50ZWQgZGV2aWNlIHRoYXQgaXNcblx0XHQgKiBcdHBlcnNpc3RlZCBhY3Jvc3Mgc2Vzc2lvbnMuIEl0IGlzIHVuLWd1ZXNzYWJsZSBieSBvdGhlciBhcHBsaWNhdGlvbnMgYW5kXG5cdFx0ICogXHR1bmlxdWUgdG8gdGhlIG9yaWdpbiBvZiB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4gSXQgaXMgcmVzZXQgd2hlbiB0aGVcblx0XHQgKiBcdHVzZXIgY2xlYXJzIGNvb2tpZXMgKGZvciBQcml2YXRlIEJyb3dzaW5nLCBhIGRpZmZlcmVudCBpZGVudGlmaWVyIGlzXG5cdFx0ICogXHR1c2VkIHRoYXQgaXMgbm90IHBlcnNpc3RlZCBhY3Jvc3Mgc2Vzc2lvbnMpLiBSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHRoZVxuXHRcdCAqIFx0ZGV2aWNlIGlzIG5vdCBvcGVuLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqICBAbmFtZSBkZXZpY2VJZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZSwgJ2RldmljZUlkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGV2aWNlLmRldmljZUlkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBcdFJldHVybnMgYSBncm91cCBpZGVudGlmaWVyLiBUd28gZGV2aWNlcyBoYXZlIHRoZVxuXHRcdCAqIFx0c2FtZSBncm91cCBpZGVudGlmaWVyIGlmIHRoZXkgYmVsb25nIHRvIHRoZSBzYW1lIHBoeXNpY2FsIGRldmljZS5cblx0XHQgKiBcdFJldHVybnMgdW5kZWZpbmVkIHdoZW4gdGhlIGRldmljZSBpcyBub3Qgb3Blbi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlVzZXJNZWRpYSNcblx0XHQgKiAgQG5hbWUgZ3JvdXBJZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZSwgJ2dyb3VwSWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9kZXZpY2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXZpY2UuZ3JvdXBJZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRSZXR1cm5zIGEgbGFiZWwgZGVzY3JpYmluZyB0aGlzIGRldmljZSAoZm9yIGV4YW1wbGUgXCJCdWlsdC1pbiBNaWNyb3Bob25lXCIpLlxuXHRcdCAqIFx0UmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGUgZGV2aWNlIGlzIG5vdCBvcGVuIG9yIGxhYmVsIGlzIG5vdCBhdmFpbGFibGVcblx0XHQgKiBcdGJlY2F1c2Ugb2YgcGVybWlzc2lvbnMuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogIEBuYW1lIGdyb3VwSWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUsICdsYWJlbCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RldmljZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RldmljZS5sYWJlbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlVzZXJNZWRpYSNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIHVzZXJNZWRpYS5tdXRlID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1lLm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3ZvbHVtZS5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVXNlck1lZGlhfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY2xvc2UoKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSWYgZ2V0VXNlck1lZGlhIGlzIHN1cHBvcnRlZCBieSB0aGUgYnJvd3Nlci5cblx0XHQgKiAgQHR5cGUgIHtCb29sZWFufVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogIEBuYW1lIHN1cHBvcnRlZFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLCAnc3VwcG9ydGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5pc0RlZmluZWQobmF2aWdhdG9yLm1lZGlhRGV2aWNlcykgJiYgVG9uZS5pc0Z1bmN0aW9uKG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIHJldHVybiBUb25lLlVzZXJNZWRpYTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLk1pZGkgaXMgYSBwcmltaXRpdmUgdHlwZSBmb3IgZW5jb2RpbmcgVGltZSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBUb25lLk1pZGkgY2FuIGJlIGNvbnN0cnVjdGVkIHdpdGggb3Igd2l0aG91dCB0aGUgYG5ld2Aga2V5d29yZC4gVG9uZS5NaWRpIGNhbiBiZSBwYXNzZWRcblx0XHQgKiAgICAgICAgIGludG8gdGhlIHBhcmFtZXRlciBvZiBhbnkgbWV0aG9kIHdoaWNoIHRha2VzIHRpbWUgYXMgYW4gYXJndW1lbnQuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5GcmVxdWVuY3l9XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVGhlIHVuaXRzIG9mIHRoZSB2YWx1ZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgdCA9IFRvbmUuTWlkaShcIjRuXCIpOy8vYSBxdWFydGVyIG5vdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaSA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLk1pZGkpIHtcblx0ICAgICAgICAgICAgVG9uZS5GcmVxdWVuY3kuY2FsbCh0aGlzLCB2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuTWlkaSh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NaWRpLCBUb25lLkZyZXF1ZW5jeSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdW5pdHMgaWYgbm9uZSBhcmUgZ2l2ZW4uXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLl9kZWZhdWx0VW5pdHMgPSAnbWlkaSc7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBmcmVxdWVuY3kgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXFcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUuX2ZyZXF1ZW5jeVRvVW5pdHMgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fZnJlcXVlbmN5VG9Vbml0cy5jYWxsKHRoaXMsIGZyZXEpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB0aWNrIGluIHRoZSBjdXJyZW50IHRpbWUgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtUaWNrc30gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUuX3RpY2tzVG9Vbml0cyA9IGZ1bmN0aW9uICh0aWNrcykge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fdGlja3NUb1VuaXRzLmNhbGwodGhpcywgdGlja3MpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYmVhdHMgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJlYXRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLl9iZWF0c1RvVW5pdHMgPSBmdW5jdGlvbiAoYmVhdHMpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbShUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cy5jYWxsKHRoaXMsIGJlYXRzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgc2Vjb25kIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7U2Vjb25kc30gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS5fc2Vjb25kc1RvVW5pdHMgPSBmdW5jdGlvbiAoc2Vjb25kcykge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fc2Vjb25kc1RvVW5pdHMuY2FsbCh0aGlzLCBzZWNvbmRzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBhcyBhIE1JREkgbm90ZVxuXHRcdCAqICBAcmV0dXJuICB7TUlESX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLk1pZGkoNjApLnRvTWlkaSgpOyAvLzYwXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLnRvTWlkaSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBhcyBhIE1JREkgbm90ZVxuXHRcdCAqICBAcmV0dXJuICB7TUlESX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLk1pZGkoNjApLnRvTWlkaSgpOyAvLzYwXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLnRvRnJlcXVlbmN5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5tdG9mKHRoaXMudG9NaWRpKCkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmFuc3Bvc2VzIHRoZSBmcmVxdWVuY3kgYnkgdGhlIGdpdmVuIG51bWJlciBvZiBzZW1pdG9uZXMuXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsfSAgaW50ZXJ2YWxcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRnJlcXVlbmN5fSBBIG5ldyB0cmFuc3Bvc2VkIGZyZXF1ZW5jeVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQTRcIikudHJhbnNwb3NlKDMpOyAvL1wiQzVcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS50cmFuc3Bvc2UgPSBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy50b01pZGkoKSArIGludGVydmFsKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NaWRpO1xuXHR9KTtcblx0XG5cdHJldHVybiBUb25lO1xufSkpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi90b25lL2J1aWxkL1RvbmUuanNcbi8vIG1vZHVsZSBpZCA9IDI0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gdHJ1ZTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2xpYnJhcnkuanNcbi8vIG1vZHVsZSBpZCA9IDI1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImV4cG9ydHMuZiA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXBpZS5qc1xuLy8gbW9kdWxlIGlkID0gMjZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmZcbiAgLCBoYXMgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0LCB0YWcsIHN0YXQpe1xuICBpZihpdCAmJiAhaGFzKGl0ID0gc3RhdCA/IGl0IDogaXQucHJvdG90eXBlLCBUQUcpKWRlZihpdCwgVEFHLCB7Y29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnfSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanNcbi8vIG1vZHVsZSBpZCA9IDI3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLW9iamVjdC5qc1xuLy8gbW9kdWxlIGlkID0gMjhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGlkID0gMFxuICAsIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oa2V5KXtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191aWQuanNcbi8vIG1vZHVsZSBpZCA9IDI5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2xvYmFsICAgICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgaGlkZSAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hpZGUnKVxuICAsIEl0ZXJhdG9ycyAgICAgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKVxuICAsIFRPX1NUUklOR19UQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxuZm9yKHZhciBjb2xsZWN0aW9ucyA9IFsnTm9kZUxpc3QnLCAnRE9NVG9rZW5MaXN0JywgJ01lZGlhTGlzdCcsICdTdHlsZVNoZWV0TGlzdCcsICdDU1NSdWxlTGlzdCddLCBpID0gMDsgaSA8IDU7IGkrKyl7XG4gIHZhciBOQU1FICAgICAgID0gY29sbGVjdGlvbnNbaV1cbiAgICAsIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV1cbiAgICAsIHByb3RvICAgICAgPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICBpZihwcm90byAmJiAhcHJvdG9bVE9fU1RSSU5HX1RBR10paGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IEl0ZXJhdG9ycy5BcnJheTtcbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qc1xuLy8gbW9kdWxlIGlkID0gMzBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IFRvbmUgZnJvbSAndG9uZSdcbmltcG9ydCBTdGFydEF1ZGlvQ29udGV4dCBmcm9tICcuL3N0YXJ0QXVkaW9Db250ZXh0J1xuXG5leHBvcnQgY29uc3QgaXNJcGhvbmUgPSAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lL2kpKSB8fCAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBvZC9pKSlcbmV4cG9ydCBjb25zdCBpc0lwYWQgPSAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBhZC9pKSlcbmV4cG9ydCBjb25zdCBpc0FuZHJvaWQgPSAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSlcbmV4cG9ydCBjb25zdCBpc01vYmlsZSA9IGlzSXBob25lIHx8IGlzSXBhZCB8fCBpc0FuZHJvaWRcbmV4cG9ydCBjb25zdCBpc0Rlc2t0b3AgPSAhIGlzTW9iaWxlXG5cbmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChpc01vYmlsZSA/ICdtb2JpbGUnIDogJ2Rlc2t0b3AnKVxuXG5leHBvcnQgY29uc3QgYnJvd3NlciA9IHsgaXNJcGhvbmUsIGlzSXBhZCwgaXNNb2JpbGUsIGlzRGVza3RvcCB9XG5cbmV4cG9ydCBmdW5jdGlvbiBjaG9pY2UgKGEpeyByZXR1cm4gYVsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYS5sZW5ndGgpIF0gfVxuZXhwb3J0IGZ1bmN0aW9uIG1vZChuLG0peyByZXR1cm4gbi0obSAqIE1hdGguZmxvb3Iobi9tKSkgfVxuZXhwb3J0IGZ1bmN0aW9uIG5vcm0obiwgbWluLCBtYXgpeyByZXR1cm4gKG4gLSBtaW4pIC8gKG1heCAtIG1pbikgfVxuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdEF1ZGlvQ29udGV4dCAoZm4pIHtcblx0aWYgKGlzTW9iaWxlKSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIGJ1dHRvbi5pbm5lckhUTUwgPSAnVGFwIHRvIHN0YXJ0IC0gcGxlYXNlIHVubXV0ZSB5b3VyIHBob25lJ1xuICAgIE9iamVjdC5hc3NpZ24oY29udGFpbmVyLnN0eWxlLCB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgIHpJbmRleDogJzEwMDAwJyxcbiAgICAgIHRvcDogJzBweCcsXG4gICAgICBsZWZ0OiAnMHB4JyxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC44KScsXG4gICAgfSlcblx0XHRPYmplY3QuYXNzaWduKGJ1dHRvbi5zdHlsZSwge1xuXHRcdCAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG5cdFx0ICBsZWZ0OiAnNTAlJyxcblx0XHQgIHRvcDogJzUwJScsXG5cdFx0XHRwYWRkaW5nOiAnMjBweCcsXG5cdFx0ICBiYWNrZ3JvdW5kQ29sb3I6ICcjN0YzM0VEJyxcblx0XHQgIGNvbG9yOiAnd2hpdGUnLFxuXHRcdCAgZm9udEZhbWlseTogJ21vbm9zcGFjZScsXG5cdFx0ICBib3JkZXJSYWRpdXM6ICczcHgnLFxuXHRcdCAgdHJhbnNmb3JtOiAndHJhbnNsYXRlM0QoLTUwJSwtNTAlLDApJyxcblx0XHQgIHRleHRBbGlnbjogJ2NlbnRlcicsXG5cdFx0XHRsaW5lSGVpZ2h0OiAnMS41JyxcbiAgICB9KVxuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChidXR0b24pXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpXG4gICAgU3RhcnRBdWRpb0NvbnRleHQuc2V0Q29udGV4dChUb25lLmNvbnRleHQpXG4gICAgU3RhcnRBdWRpb0NvbnRleHQub24oYnV0dG9uKVxuICAgIFN0YXJ0QXVkaW9Db250ZXh0Lm9uU3RhcnRlZChfID0+IHtcbiAgICAgIGNvbnRhaW5lci5yZW1vdmUoKVxuXHRcdFx0Zm4oKVxuICBcdH0pXG5cdH0gZWxzZSB7XG5cdFx0Zm4oKVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRhVVJJdG9CbG9iKGRhdGFVUkkpIHtcbiAgLy8gY29udmVydCBiYXNlNjQgdG8gcmF3IGJpbmFyeSBkYXRhIGhlbGQgaW4gYSBzdHJpbmdcbiAgLy8gZG9lc24ndCBoYW5kbGUgVVJMRW5jb2RlZCBEYXRhVVJJcyAtIHNlZSBTTyBhbnN3ZXIgIzY4NTAyNzYgZm9yIGNvZGUgdGhhdCBkb2VzIHRoaXNcbiAgdmFyIGJ5dGVTdHJpbmcgPSBhdG9iKGRhdGFVUkkuc3BsaXQoJywnKVsxXSk7XG5cbiAgLy8gc2VwYXJhdGUgb3V0IHRoZSBtaW1lIGNvbXBvbmVudFxuICB2YXIgbWltZVN0cmluZyA9IGRhdGFVUkkuc3BsaXQoJywnKVswXS5zcGxpdCgnOicpWzFdLnNwbGl0KCc7JylbMF1cblxuICAvLyB3cml0ZSB0aGUgYnl0ZXMgb2YgdGhlIHN0cmluZyB0byBhbiBBcnJheUJ1ZmZlclxuICB2YXIgYWIgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZVN0cmluZy5sZW5ndGgpO1xuXG4gIC8vIGNyZWF0ZSBhIHZpZXcgaW50byB0aGUgYnVmZmVyXG4gIHZhciBpYSA9IG5ldyBVaW50OEFycmF5KGFiKTtcblxuICAvLyBzZXQgdGhlIGJ5dGVzIG9mIHRoZSBidWZmZXIgdG8gdGhlIGNvcnJlY3QgdmFsdWVzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZVN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgaWFbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gIH1cblxuICAvLyB3cml0ZSB0aGUgQXJyYXlCdWZmZXIgdG8gYSBibG9iLCBhbmQgeW91J3JlIGRvbmVcbiAgdmFyIGJsb2IgPSBuZXcgQmxvYihbYWJdLCB7dHlwZTogbWltZVN0cmluZ30pO1xuICByZXR1cm4gYmxvYjtcblxufVxuZXhwb3J0IGZ1bmN0aW9uIGZ0b20oZikge1xuICAvLyByZXR1cm4gKE1hdGgubG9nKGYpIC0gTWF0aC5sb2coMjYxLjYyNikpIC8gTWF0aC5sb2coMikgKyA0LjBcbiAgcmV0dXJuIDY5ICsgMTIgKiBNYXRoLmxvZzIoZiAvIDQ0MClcbn1cbmV4cG9ydCBmdW5jdGlvbiBtdG9mKG0pIHtcbiAgcmV0dXJuIDQ0MCAqIE1hdGgucG93KDIsIChtIC0gNjkpIC8gMTIpXG59XG5leHBvcnQgZnVuY3Rpb24gdGFwIChmbikge1xuICByZXR1cm4gKGUpID0+IHtcbiAgICBpZiAoYnJvd3Nlci5pc01vYmlsZSkgZm4oKVxuICAgIGVsc2UgaWYgKGUucHJlc3MpIGZuKClcbiAgfVxufVxuXG4vKiBnZXQgbWluaW11bSBhbmQgbWF4aW11bSB2YXJpYW5jZSBmcm9tIHJvdy10by1yb3cgKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldF9kaWZmX2JvdW5kcyhyb3dzKXtcbiAgY29uc3QgZGlmZnMgPSByb3dzLm1hcChyb3cgPT4ge1xuICAgIGNvbnN0IHJvd19taW4gPSBNYXRoLm1pbi5hcHBseShNYXRoLCByb3cpXG4gICAgY29uc3Qgcm93X21heCA9IE1hdGgubWF4LmFwcGx5KE1hdGgsIHJvdylcbiAgICByZXR1cm4gcm93X21heCAtIHJvd19taW5cbiAgfSlcbiAgY29uc3QgbWluID0gTWF0aC5taW4uYXBwbHkoTWF0aCwgZGlmZnMpXG4gIGNvbnN0IG1heCA9IE1hdGgubWF4LmFwcGx5KE1hdGgsIGRpZmZzKVxuICByZXR1cm4geyBtaW4sIG1heCB9XG59XG5cbi8qIGdldCBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBmcm9tIGEgZGF0YXNldCAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0X2JvdW5kcyhkYXRhc2V0KXtcbiAgbGV0IHJvd3MgPSBkYXRhc2V0LmxpbmVzXG4gIC8vIHJvd3MuZm9yRWFjaChyb3cgPT4gcm93LnNoaWZ0KCkpXG4gIHJvd3MgPSByb3dzLm1hcChhID0+IGEubWFwKG4gPT4gcGFyc2VGbG9hdChuKSkpXG4gIGNvbnN0IG1heCA9IHJvd3MucmVkdWNlKChhLGIpID0+IHtcbiAgICByZXR1cm4gYi5yZWR1Y2UoKHosYmIpID0+IHtcbiAgICAgIHJldHVybiBNYXRoLm1heCh6LCBiYilcbiAgICB9LCBhKVxuICB9LCAtSW5maW5pdHkpXG4gIGNvbnN0IG1pbiA9IHJvd3MucmVkdWNlKChhLGIpID0+IHtcbiAgICByZXR1cm4gYi5yZWR1Y2UoKHosYmIpID0+IHtcbiAgICAgIHJldHVybiBNYXRoLm1pbih6LCBiYilcbiAgICB9LCBhKVxuICB9LCBJbmZpbml0eSlcbiAgcmV0dXJuIHsgcm93cywgbWF4LCBtaW4gfVxufVxuXG4vKiB0cmFuc3Bvc2UgYSAyRCBhcnJheSAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNwb3NlKGEpIHtcbiAgbGV0IGlfbGVuID0gYVswXS5sZW5ndGhcbiAgbGV0IGpfbGVuID0gYS5sZW5ndGhcbiAgbGV0IFQgPSBuZXcgQXJyYXkoaV9sZW4pXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaV9sZW47IGkrKykge1xuICAgIFRbaV0gPSBuZXcgQXJyYXkoal9sZW4pXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBqX2xlbjsgaisrKSB7XG4gICAgICBUW2ldW2pdID0gYVtqXVtpXVxuICAgIH1cbiAgfVxuICByZXR1cm4gVFxufVxuXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvbGliL3V0aWwuanMiLCIndXNlIHN0cmljdCc7XG5cbnZhciBidWZmZXIgPSByZXF1aXJlKCdidWZmZXInKTtcbnZhciBCdWZmZXIgPSBidWZmZXIuQnVmZmVyO1xudmFyIFNsb3dCdWZmZXIgPSBidWZmZXIuU2xvd0J1ZmZlcjtcbnZhciBNQVhfTEVOID0gYnVmZmVyLmtNYXhMZW5ndGggfHwgMjE0NzQ4MzY0NztcbmV4cG9ydHMuYWxsb2MgPSBmdW5jdGlvbiBhbGxvYyhzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIEJ1ZmZlci5hbGxvYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpO1xuICB9XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBub3QgYmUgbnVtYmVyJyk7XG4gIH1cbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpemUgbXVzdCBiZSBhIG51bWJlcicpO1xuICB9XG4gIGlmIChzaXplID4gTUFYX0xFTikge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdzaXplIGlzIHRvbyBsYXJnZScpO1xuICB9XG4gIHZhciBlbmMgPSBlbmNvZGluZztcbiAgdmFyIF9maWxsID0gZmlsbDtcbiAgaWYgKF9maWxsID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmMgPSB1bmRlZmluZWQ7XG4gICAgX2ZpbGwgPSAwO1xuICB9XG4gIHZhciBidWYgPSBuZXcgQnVmZmVyKHNpemUpO1xuICBpZiAodHlwZW9mIF9maWxsID09PSAnc3RyaW5nJykge1xuICAgIHZhciBmaWxsQnVmID0gbmV3IEJ1ZmZlcihfZmlsbCwgZW5jKTtcbiAgICB2YXIgZmxlbiA9IGZpbGxCdWYubGVuZ3RoO1xuICAgIHZhciBpID0gLTE7XG4gICAgd2hpbGUgKCsraSA8IHNpemUpIHtcbiAgICAgIGJ1ZltpXSA9IGZpbGxCdWZbaSAlIGZsZW5dO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBidWYuZmlsbChfZmlsbCk7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cbmV4cG9ydHMuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiBhbGxvY1Vuc2FmZShzaXplKSB7XG4gIGlmICh0eXBlb2YgQnVmZmVyLmFsbG9jVW5zYWZlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvY1Vuc2FmZShzaXplKTtcbiAgfVxuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2l6ZSBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gIH1cbiAgaWYgKHNpemUgPiBNQVhfTEVOKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NpemUgaXMgdG9vIGxhcmdlJyk7XG4gIH1cbiAgcmV0dXJuIG5ldyBCdWZmZXIoc2l6ZSk7XG59XG5leHBvcnRzLmZyb20gPSBmdW5jdGlvbiBmcm9tKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiBCdWZmZXIuZnJvbSA9PT0gJ2Z1bmN0aW9uJyAmJiAoIWdsb2JhbC5VaW50OEFycmF5IHx8IFVpbnQ4QXJyYXkuZnJvbSAhPT0gQnVmZmVyLmZyb20pKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbmV3IEJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCk7XG4gIH1cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHZhciBvZmZzZXQgPSBlbmNvZGluZ09yT2Zmc2V0O1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gbmV3IEJ1ZmZlcih2YWx1ZSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgb2Zmc2V0ID0gMDtcbiAgICB9XG4gICAgdmFyIGxlbiA9IGxlbmd0aDtcbiAgICBpZiAodHlwZW9mIGxlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxlbiA9IHZhbHVlLmJ5dGVMZW5ndGggLSBvZmZzZXQ7XG4gICAgfVxuICAgIGlmIChvZmZzZXQgPj0gdmFsdWUuYnl0ZUxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ29mZnNldFxcJyBpcyBvdXQgb2YgYm91bmRzJyk7XG4gICAgfVxuICAgIGlmIChsZW4gPiB2YWx1ZS5ieXRlTGVuZ3RoIC0gb2Zmc2V0KSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnbGVuZ3RoXFwnIGlzIG91dCBvZiBib3VuZHMnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIodmFsdWUuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBsZW4pKTtcbiAgfVxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgIHZhciBvdXQgPSBuZXcgQnVmZmVyKHZhbHVlLmxlbmd0aCk7XG4gICAgdmFsdWUuY29weShvdXQsIDAsIDAsIHZhbHVlLmxlbmd0aCk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuICBpZiAodmFsdWUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHx8ICdsZW5ndGgnIGluIHZhbHVlKSB7XG4gICAgICByZXR1cm4gbmV3IEJ1ZmZlcih2YWx1ZSk7XG4gICAgfVxuICAgIGlmICh2YWx1ZS50eXBlID09PSAnQnVmZmVyJyAmJiBBcnJheS5pc0FycmF5KHZhbHVlLmRhdGEpKSB7XG4gICAgICByZXR1cm4gbmV3IEJ1ZmZlcih2YWx1ZS5kYXRhKTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsICcgKyAnQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4nKTtcbn1cbmV4cG9ydHMuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gYWxsb2NVbnNhZmVTbG93KHNpemUpIHtcbiAgaWYgKHR5cGVvZiBCdWZmZXIuYWxsb2NVbnNhZmVTbG93ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3coc2l6ZSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpemUgbXVzdCBiZSBhIG51bWJlcicpO1xuICB9XG4gIGlmIChzaXplID49IE1BWF9MRU4pIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc2l6ZSBpcyB0b28gbGFyZ2UnKTtcbiAgfVxuICByZXR1cm4gbmV3IFNsb3dCdWZmZXIoc2l6ZSk7XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYnVmZmVyLXNoaW1zL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAzMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanNcbi8vIG1vZHVsZSBpZCA9IDMzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJylcbiAgLCBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKVxuICAvLyBFUzMgd3JvbmcgaGVyZVxuICAsIEFSRyA9IGNvZihmdW5jdGlvbigpeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uKGl0LCBrZXkpe1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoKGUpeyAvKiBlbXB0eSAqLyB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jbGFzc29mLmpzXG4vLyBtb2R1bGUgaWQgPSAzNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIGlmKGl0ID09IHVuZGVmaW5lZCl0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZWZpbmVkLmpzXG4vLyBtb2R1bGUgaWQgPSAzNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnRcbiAgLy8gaW4gb2xkIElFIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnXG4gICwgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kb20tY3JlYXRlLmpzXG4vLyBtb2R1bGUgaWQgPSAzNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBJRSA4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgJ2NvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZidcbikuc3BsaXQoJywnKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0tYnVnLWtleXMuanNcbi8vIG1vZHVsZSBpZCA9IDM3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wcy5qc1xuLy8gbW9kdWxlIGlkID0gMzhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdrZXlzJylcbiAgLCB1aWQgICAgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oa2V5KXtcbiAgcmV0dXJuIHNoYXJlZFtrZXldIHx8IChzaGFyZWRba2V5XSA9IHVpZChrZXkpKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQta2V5LmpzXG4vLyBtb2R1bGUgaWQgPSAzOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJ1xuICAsIHN0b3JlICA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oa2V5KXtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB7fSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLmpzXG4vLyBtb2R1bGUgaWQgPSA0MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsICA9IE1hdGguY2VpbFxuICAsIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pbnRlZ2VyLmpzXG4vLyBtb2R1bGUgaWQgPSA0MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJylcbiAgLCBtaW4gICAgICAgPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWxlbmd0aC5qc1xuLy8gbW9kdWxlIGlkID0gNDJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwgUyl7XG4gIGlmKCFpc09iamVjdChpdCkpcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSlyZXR1cm4gdmFsO1xuICBpZih0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKXJldHVybiB2YWw7XG4gIGlmKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKXJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanNcbi8vIG1vZHVsZSBpZCA9IDQzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBnbG9iYWwgICAgICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgY29yZSAgICAgICAgICAgPSByZXF1aXJlKCcuL19jb3JlJylcbiAgLCBMSUJSQVJZICAgICAgICA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKVxuICAsIHdrc0V4dCAgICAgICAgID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpXG4gICwgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihuYW1lKXtcbiAgdmFyICRTeW1ib2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwuU3ltYm9sIHx8IHt9KTtcbiAgaWYobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSlkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7dmFsdWU6IHdrc0V4dC5mKG5hbWUpfSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLWRlZmluZS5qc1xuLy8gbW9kdWxlIGlkID0gNDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL193a3MtZXh0LmpzXG4vLyBtb2R1bGUgaWQgPSA0NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgY2xhc3NvZiAgID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpXG4gICwgSVRFUkFUT1IgID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJylcbiAgLCBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24oaXQpe1xuICBpZihpdCAhPSB1bmRlZmluZWQpcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kLmpzXG4vLyBtb2R1bGUgaWQgPSA0NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICB0aGlzLl9ldmVudHMgPSB0aGlzLl9ldmVudHMgfHwge307XG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54XG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cbi8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZVxuLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbkV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uKG4pIHtcbiAgaWYgKCFpc051bWJlcihuKSB8fCBuIDwgMCB8fCBpc05hTihuKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdmFyIGVyLCBoYW5kbGVyLCBsZW4sIGFyZ3MsIGksIGxpc3RlbmVycztcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmICh0eXBlID09PSAnZXJyb3InKSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHMuZXJyb3IgfHxcbiAgICAgICAgKGlzT2JqZWN0KHRoaXMuX2V2ZW50cy5lcnJvcikgJiYgIXRoaXMuX2V2ZW50cy5lcnJvci5sZW5ndGgpKSB7XG4gICAgICBlciA9IGFyZ3VtZW50c1sxXTtcbiAgICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdVbmNhdWdodCwgdW5zcGVjaWZpZWQgXCJlcnJvclwiIGV2ZW50LiAoJyArIGVyICsgJyknKTtcbiAgICAgICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgaWYgKGlzVW5kZWZpbmVkKGhhbmRsZXIpKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAoaXNGdW5jdGlvbihoYW5kbGVyKSkge1xuICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgLy8gZmFzdCBjYXNlc1xuICAgICAgY2FzZSAxOlxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRzWzFdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gc2xvd2VyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgaGFuZGxlci5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QoaGFuZGxlcikpIHtcbiAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICBsaXN0ZW5lcnMgPSBoYW5kbGVyLnNsaWNlKCk7XG4gICAgbGVuID0gbGlzdGVuZXJzLmxlbmd0aDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgICBsaXN0ZW5lcnNbaV0uYXBwbHkodGhpcywgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgbTtcblxuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpXG4gICAgdGhpcy5fZXZlbnRzID0ge307XG5cbiAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICBpZiAodGhpcy5fZXZlbnRzLm5ld0xpc3RlbmVyKVxuICAgIHRoaXMuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICBpc0Z1bmN0aW9uKGxpc3RlbmVyLmxpc3RlbmVyKSA/XG4gICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyIDogbGlzdGVuZXIpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICBlbHNlIGlmIChpc09iamVjdCh0aGlzLl9ldmVudHNbdHlwZV0pKVxuICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0ucHVzaChsaXN0ZW5lcik7XG4gIGVsc2VcbiAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBbdGhpcy5fZXZlbnRzW3R5cGVdLCBsaXN0ZW5lcl07XG5cbiAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkgJiYgIXRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQpIHtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX21heExpc3RlbmVycykpIHtcbiAgICAgIG0gPSB0aGlzLl9tYXhMaXN0ZW5lcnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgICB9XG5cbiAgICBpZiAobSAmJiBtID4gMCAmJiB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoID4gbSkge1xuICAgICAgdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCA9IHRydWU7XG4gICAgICBjb25zb2xlLmVycm9yKCcobm9kZSkgd2FybmluZzogcG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2xlYWsgZGV0ZWN0ZWQuICVkIGxpc3RlbmVycyBhZGRlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICdVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdC4nLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoKTtcbiAgICAgIGlmICh0eXBlb2YgY29uc29sZS50cmFjZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBub3Qgc3VwcG9ydGVkIGluIElFIDEwXG4gICAgICAgIGNvbnNvbGUudHJhY2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgdmFyIGZpcmVkID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gZygpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGcpO1xuXG4gICAgaWYgKCFmaXJlZCkge1xuICAgICAgZmlyZWQgPSB0cnVlO1xuICAgICAgbGlzdGVuZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cblxuICBnLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHRoaXMub24odHlwZSwgZyk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBlbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWZmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZFxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBsaXN0LCBwb3NpdGlvbiwgbGVuZ3RoLCBpO1xuXG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIGxpc3QgPSB0aGlzLl9ldmVudHNbdHlwZV07XG4gIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICBwb3NpdGlvbiA9IC0xO1xuXG4gIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fFxuICAgICAgKGlzRnVuY3Rpb24obGlzdC5saXN0ZW5lcikgJiYgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7XG4gICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTtcblxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KGxpc3QpKSB7XG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gPiAwOykge1xuICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8XG4gICAgICAgICAgKGxpc3RbaV0ubGlzdGVuZXIgJiYgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7XG4gICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBvc2l0aW9uIDwgMClcbiAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgICBsaXN0Lmxlbmd0aCA9IDA7XG4gICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0LnNwbGljZShwb3NpdGlvbiwgMSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0ZW5lcik7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIga2V5LCBsaXN0ZW5lcnM7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuICBpZiAoIXRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgdGhpcy5fZXZlbnRzID0ge307XG4gICAgZWxzZSBpZiAodGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGZvciAoa2V5IGluIHRoaXMuX2V2ZW50cykge1xuICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICBpZiAoaXNGdW5jdGlvbihsaXN0ZW5lcnMpKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICB9IGVsc2UgaWYgKGxpc3RlbmVycykge1xuICAgIC8vIExJRk8gb3JkZXJcbiAgICB3aGlsZSAobGlzdGVuZXJzLmxlbmd0aClcbiAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2xpc3RlbmVycy5sZW5ndGggLSAxXSk7XG4gIH1cbiAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIgcmV0O1xuICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIHJldCA9IFtdO1xuICBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoaXMuX2V2ZW50c1t0eXBlXSkpXG4gICAgcmV0ID0gW3RoaXMuX2V2ZW50c1t0eXBlXV07XG4gIGVsc2VcbiAgICByZXQgPSB0aGlzLl9ldmVudHNbdHlwZV0uc2xpY2UoKTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgaWYgKHRoaXMuX2V2ZW50cykge1xuICAgIHZhciBldmxpc3RlbmVyID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKGlzRnVuY3Rpb24oZXZsaXN0ZW5lcikpXG4gICAgICByZXR1cm4gMTtcbiAgICBlbHNlIGlmIChldmxpc3RlbmVyKVxuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICB9XG4gIHJldHVybiAwO1xufTtcblxuRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG59O1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vZXZlbnRzL2V2ZW50cy5qc1xuLy8gbW9kdWxlIGlkID0gNDdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG5cbnZhciBpc0J1ZmZlckVuY29kaW5nID0gQnVmZmVyLmlzRW5jb2RpbmdcbiAgfHwgZnVuY3Rpb24oZW5jb2RpbmcpIHtcbiAgICAgICBzd2l0Y2ggKGVuY29kaW5nICYmIGVuY29kaW5nLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgIGNhc2UgJ2hleCc6IGNhc2UgJ3V0ZjgnOiBjYXNlICd1dGYtOCc6IGNhc2UgJ2FzY2lpJzogY2FzZSAnYmluYXJ5JzogY2FzZSAnYmFzZTY0JzogY2FzZSAndWNzMic6IGNhc2UgJ3Vjcy0yJzogY2FzZSAndXRmMTZsZSc6IGNhc2UgJ3V0Zi0xNmxlJzogY2FzZSAncmF3JzogcmV0dXJuIHRydWU7XG4gICAgICAgICBkZWZhdWx0OiByZXR1cm4gZmFsc2U7XG4gICAgICAgfVxuICAgICB9XG5cblxuZnVuY3Rpb24gYXNzZXJ0RW5jb2RpbmcoZW5jb2RpbmcpIHtcbiAgaWYgKGVuY29kaW5nICYmICFpc0J1ZmZlckVuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKTtcbiAgfVxufVxuXG4vLyBTdHJpbmdEZWNvZGVyIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgZWZmaWNpZW50bHkgc3BsaXR0aW5nIGEgc2VyaWVzIG9mXG4vLyBidWZmZXJzIGludG8gYSBzZXJpZXMgb2YgSlMgc3RyaW5ncyB3aXRob3V0IGJyZWFraW5nIGFwYXJ0IG11bHRpLWJ5dGVcbi8vIGNoYXJhY3RlcnMuIENFU1UtOCBpcyBoYW5kbGVkIGFzIHBhcnQgb2YgdGhlIFVURi04IGVuY29kaW5nLlxuLy9cbi8vIEBUT0RPIEhhbmRsaW5nIGFsbCBlbmNvZGluZ3MgaW5zaWRlIGEgc2luZ2xlIG9iamVjdCBtYWtlcyBpdCB2ZXJ5IGRpZmZpY3VsdFxuLy8gdG8gcmVhc29uIGFib3V0IHRoaXMgY29kZSwgc28gaXQgc2hvdWxkIGJlIHNwbGl0IHVwIGluIHRoZSBmdXR1cmUuXG4vLyBAVE9ETyBUaGVyZSBzaG91bGQgYmUgYSB1dGY4LXN0cmljdCBlbmNvZGluZyB0aGF0IHJlamVjdHMgaW52YWxpZCBVVEYtOCBjb2RlXG4vLyBwb2ludHMgYXMgdXNlZCBieSBDRVNVLTguXG52YXIgU3RyaW5nRGVjb2RlciA9IGV4cG9ydHMuU3RyaW5nRGVjb2RlciA9IGZ1bmN0aW9uKGVuY29kaW5nKSB7XG4gIHRoaXMuZW5jb2RpbmcgPSAoZW5jb2RpbmcgfHwgJ3V0ZjgnKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX10vLCAnJyk7XG4gIGFzc2VydEVuY29kaW5nKGVuY29kaW5nKTtcbiAgc3dpdGNoICh0aGlzLmVuY29kaW5nKSB7XG4gICAgY2FzZSAndXRmOCc6XG4gICAgICAvLyBDRVNVLTggcmVwcmVzZW50cyBlYWNoIG9mIFN1cnJvZ2F0ZSBQYWlyIGJ5IDMtYnl0ZXNcbiAgICAgIHRoaXMuc3Vycm9nYXRlU2l6ZSA9IDM7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIC8vIFVURi0xNiByZXByZXNlbnRzIGVhY2ggb2YgU3Vycm9nYXRlIFBhaXIgYnkgMi1ieXRlc1xuICAgICAgdGhpcy5zdXJyb2dhdGVTaXplID0gMjtcbiAgICAgIHRoaXMuZGV0ZWN0SW5jb21wbGV0ZUNoYXIgPSB1dGYxNkRldGVjdEluY29tcGxldGVDaGFyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgIC8vIEJhc2UtNjQgc3RvcmVzIDMgYnl0ZXMgaW4gNCBjaGFycywgYW5kIHBhZHMgdGhlIHJlbWFpbmRlci5cbiAgICAgIHRoaXMuc3Vycm9nYXRlU2l6ZSA9IDM7XG4gICAgICB0aGlzLmRldGVjdEluY29tcGxldGVDaGFyID0gYmFzZTY0RGV0ZWN0SW5jb21wbGV0ZUNoYXI7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhpcy53cml0ZSA9IHBhc3NUaHJvdWdoV3JpdGU7XG4gICAgICByZXR1cm47XG4gIH1cblxuICAvLyBFbm91Z2ggc3BhY2UgdG8gc3RvcmUgYWxsIGJ5dGVzIG9mIGEgc2luZ2xlIGNoYXJhY3Rlci4gVVRGLTggbmVlZHMgNFxuICAvLyBieXRlcywgYnV0IENFU1UtOCBtYXkgcmVxdWlyZSB1cCB0byA2ICgzIGJ5dGVzIHBlciBzdXJyb2dhdGUpLlxuICB0aGlzLmNoYXJCdWZmZXIgPSBuZXcgQnVmZmVyKDYpO1xuICAvLyBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgZm9yIHRoZSBjdXJyZW50IGluY29tcGxldGUgbXVsdGktYnl0ZSBjaGFyYWN0ZXIuXG4gIHRoaXMuY2hhclJlY2VpdmVkID0gMDtcbiAgLy8gTnVtYmVyIG9mIGJ5dGVzIGV4cGVjdGVkIGZvciB0aGUgY3VycmVudCBpbmNvbXBsZXRlIG11bHRpLWJ5dGUgY2hhcmFjdGVyLlxuICB0aGlzLmNoYXJMZW5ndGggPSAwO1xufTtcblxuXG4vLyB3cml0ZSBkZWNvZGVzIHRoZSBnaXZlbiBidWZmZXIgYW5kIHJldHVybnMgaXQgYXMgSlMgc3RyaW5nIHRoYXQgaXNcbi8vIGd1YXJhbnRlZWQgdG8gbm90IGNvbnRhaW4gYW55IHBhcnRpYWwgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLiBBbnkgcGFydGlhbFxuLy8gY2hhcmFjdGVyIGZvdW5kIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBpcyBidWZmZXJlZCB1cCwgYW5kIHdpbGwgYmVcbi8vIHJldHVybmVkIHdoZW4gY2FsbGluZyB3cml0ZSBhZ2FpbiB3aXRoIHRoZSByZW1haW5pbmcgYnl0ZXMuXG4vL1xuLy8gTm90ZTogQ29udmVydGluZyBhIEJ1ZmZlciBjb250YWluaW5nIGFuIG9ycGhhbiBzdXJyb2dhdGUgdG8gYSBTdHJpbmdcbi8vIGN1cnJlbnRseSB3b3JrcywgYnV0IGNvbnZlcnRpbmcgYSBTdHJpbmcgdG8gYSBCdWZmZXIgKHZpYSBgbmV3IEJ1ZmZlcmAsIG9yXG4vLyBCdWZmZXIjd3JpdGUpIHdpbGwgcmVwbGFjZSBpbmNvbXBsZXRlIHN1cnJvZ2F0ZXMgd2l0aCB0aGUgdW5pY29kZVxuLy8gcmVwbGFjZW1lbnQgY2hhcmFjdGVyLiBTZWUgaHR0cHM6Ly9jb2RlcmV2aWV3LmNocm9taXVtLm9yZy8xMjExNzMwMDkvIC5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmZmVyKSB7XG4gIHZhciBjaGFyU3RyID0gJyc7XG4gIC8vIGlmIG91ciBsYXN0IHdyaXRlIGVuZGVkIHdpdGggYW4gaW5jb21wbGV0ZSBtdWx0aWJ5dGUgY2hhcmFjdGVyXG4gIHdoaWxlICh0aGlzLmNoYXJMZW5ndGgpIHtcbiAgICAvLyBkZXRlcm1pbmUgaG93IG1hbnkgcmVtYWluaW5nIGJ5dGVzIHRoaXMgYnVmZmVyIGhhcyB0byBvZmZlciBmb3IgdGhpcyBjaGFyXG4gICAgdmFyIGF2YWlsYWJsZSA9IChidWZmZXIubGVuZ3RoID49IHRoaXMuY2hhckxlbmd0aCAtIHRoaXMuY2hhclJlY2VpdmVkKSA/XG4gICAgICAgIHRoaXMuY2hhckxlbmd0aCAtIHRoaXMuY2hhclJlY2VpdmVkIDpcbiAgICAgICAgYnVmZmVyLmxlbmd0aDtcblxuICAgIC8vIGFkZCB0aGUgbmV3IGJ5dGVzIHRvIHRoZSBjaGFyIGJ1ZmZlclxuICAgIGJ1ZmZlci5jb3B5KHRoaXMuY2hhckJ1ZmZlciwgdGhpcy5jaGFyUmVjZWl2ZWQsIDAsIGF2YWlsYWJsZSk7XG4gICAgdGhpcy5jaGFyUmVjZWl2ZWQgKz0gYXZhaWxhYmxlO1xuXG4gICAgaWYgKHRoaXMuY2hhclJlY2VpdmVkIDwgdGhpcy5jaGFyTGVuZ3RoKSB7XG4gICAgICAvLyBzdGlsbCBub3QgZW5vdWdoIGNoYXJzIGluIHRoaXMgYnVmZmVyPyB3YWl0IGZvciBtb3JlIC4uLlxuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSBieXRlcyBiZWxvbmdpbmcgdG8gdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGZyb20gdGhlIGJ1ZmZlclxuICAgIGJ1ZmZlciA9IGJ1ZmZlci5zbGljZShhdmFpbGFibGUsIGJ1ZmZlci5sZW5ndGgpO1xuXG4gICAgLy8gZ2V0IHRoZSBjaGFyYWN0ZXIgdGhhdCB3YXMgc3BsaXRcbiAgICBjaGFyU3RyID0gdGhpcy5jaGFyQnVmZmVyLnNsaWNlKDAsIHRoaXMuY2hhckxlbmd0aCkudG9TdHJpbmcodGhpcy5lbmNvZGluZyk7XG5cbiAgICAvLyBDRVNVLTg6IGxlYWQgc3Vycm9nYXRlIChEODAwLURCRkYpIGlzIGFsc28gdGhlIGluY29tcGxldGUgY2hhcmFjdGVyXG4gICAgdmFyIGNoYXJDb2RlID0gY2hhclN0ci5jaGFyQ29kZUF0KGNoYXJTdHIubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGNoYXJDb2RlID49IDB4RDgwMCAmJiBjaGFyQ29kZSA8PSAweERCRkYpIHtcbiAgICAgIHRoaXMuY2hhckxlbmd0aCArPSB0aGlzLnN1cnJvZ2F0ZVNpemU7XG4gICAgICBjaGFyU3RyID0gJyc7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdGhpcy5jaGFyUmVjZWl2ZWQgPSB0aGlzLmNoYXJMZW5ndGggPSAwO1xuXG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIG1vcmUgYnl0ZXMgaW4gdGhpcyBidWZmZXIsIGp1c3QgZW1pdCBvdXIgY2hhclxuICAgIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY2hhclN0cjtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cblxuICAvLyBkZXRlcm1pbmUgYW5kIHNldCBjaGFyTGVuZ3RoIC8gY2hhclJlY2VpdmVkXG4gIHRoaXMuZGV0ZWN0SW5jb21wbGV0ZUNoYXIoYnVmZmVyKTtcblxuICB2YXIgZW5kID0gYnVmZmVyLmxlbmd0aDtcbiAgaWYgKHRoaXMuY2hhckxlbmd0aCkge1xuICAgIC8vIGJ1ZmZlciB0aGUgaW5jb21wbGV0ZSBjaGFyYWN0ZXIgYnl0ZXMgd2UgZ290XG4gICAgYnVmZmVyLmNvcHkodGhpcy5jaGFyQnVmZmVyLCAwLCBidWZmZXIubGVuZ3RoIC0gdGhpcy5jaGFyUmVjZWl2ZWQsIGVuZCk7XG4gICAgZW5kIC09IHRoaXMuY2hhclJlY2VpdmVkO1xuICB9XG5cbiAgY2hhclN0ciArPSBidWZmZXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywgMCwgZW5kKTtcblxuICB2YXIgZW5kID0gY2hhclN0ci5sZW5ndGggLSAxO1xuICB2YXIgY2hhckNvZGUgPSBjaGFyU3RyLmNoYXJDb2RlQXQoZW5kKTtcbiAgLy8gQ0VTVS04OiBsZWFkIHN1cnJvZ2F0ZSAoRDgwMC1EQkZGKSBpcyBhbHNvIHRoZSBpbmNvbXBsZXRlIGNoYXJhY3RlclxuICBpZiAoY2hhckNvZGUgPj0gMHhEODAwICYmIGNoYXJDb2RlIDw9IDB4REJGRikge1xuICAgIHZhciBzaXplID0gdGhpcy5zdXJyb2dhdGVTaXplO1xuICAgIHRoaXMuY2hhckxlbmd0aCArPSBzaXplO1xuICAgIHRoaXMuY2hhclJlY2VpdmVkICs9IHNpemU7XG4gICAgdGhpcy5jaGFyQnVmZmVyLmNvcHkodGhpcy5jaGFyQnVmZmVyLCBzaXplLCAwLCBzaXplKTtcbiAgICBidWZmZXIuY29weSh0aGlzLmNoYXJCdWZmZXIsIDAsIDAsIHNpemUpO1xuICAgIHJldHVybiBjaGFyU3RyLnN1YnN0cmluZygwLCBlbmQpO1xuICB9XG5cbiAgLy8gb3IganVzdCBlbWl0IHRoZSBjaGFyU3RyXG4gIHJldHVybiBjaGFyU3RyO1xufTtcblxuLy8gZGV0ZWN0SW5jb21wbGV0ZUNoYXIgZGV0ZXJtaW5lcyBpZiB0aGVyZSBpcyBhbiBpbmNvbXBsZXRlIFVURi04IGNoYXJhY3RlciBhdFxuLy8gdGhlIGVuZCBvZiB0aGUgZ2l2ZW4gYnVmZmVyLiBJZiBzbywgaXQgc2V0cyB0aGlzLmNoYXJMZW5ndGggdG8gdGhlIGJ5dGVcbi8vIGxlbmd0aCB0aGF0IGNoYXJhY3RlciwgYW5kIHNldHMgdGhpcy5jaGFyUmVjZWl2ZWQgdG8gdGhlIG51bWJlciBvZiBieXRlc1xuLy8gdGhhdCBhcmUgYXZhaWxhYmxlIGZvciB0aGlzIGNoYXJhY3Rlci5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmRldGVjdEluY29tcGxldGVDaGFyID0gZnVuY3Rpb24oYnVmZmVyKSB7XG4gIC8vIGRldGVybWluZSBob3cgbWFueSBieXRlcyB3ZSBoYXZlIHRvIGNoZWNrIGF0IHRoZSBlbmQgb2YgdGhpcyBidWZmZXJcbiAgdmFyIGkgPSAoYnVmZmVyLmxlbmd0aCA+PSAzKSA/IDMgOiBidWZmZXIubGVuZ3RoO1xuXG4gIC8vIEZpZ3VyZSBvdXQgaWYgb25lIG9mIHRoZSBsYXN0IGkgYnl0ZXMgb2Ygb3VyIGJ1ZmZlciBhbm5vdW5jZXMgYW5cbiAgLy8gaW5jb21wbGV0ZSBjaGFyLlxuICBmb3IgKDsgaSA+IDA7IGktLSkge1xuICAgIHZhciBjID0gYnVmZmVyW2J1ZmZlci5sZW5ndGggLSBpXTtcblxuICAgIC8vIFNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VURi04I0Rlc2NyaXB0aW9uXG5cbiAgICAvLyAxMTBYWFhYWFxuICAgIGlmIChpID09IDEgJiYgYyA+PiA1ID09IDB4MDYpIHtcbiAgICAgIHRoaXMuY2hhckxlbmd0aCA9IDI7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyAxMTEwWFhYWFxuICAgIGlmIChpIDw9IDIgJiYgYyA+PiA0ID09IDB4MEUpIHtcbiAgICAgIHRoaXMuY2hhckxlbmd0aCA9IDM7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyAxMTExMFhYWFxuICAgIGlmIChpIDw9IDMgJiYgYyA+PiAzID09IDB4MUUpIHtcbiAgICAgIHRoaXMuY2hhckxlbmd0aCA9IDQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgdGhpcy5jaGFyUmVjZWl2ZWQgPSBpO1xufTtcblxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oYnVmZmVyKSB7XG4gIHZhciByZXMgPSAnJztcbiAgaWYgKGJ1ZmZlciAmJiBidWZmZXIubGVuZ3RoKVxuICAgIHJlcyA9IHRoaXMud3JpdGUoYnVmZmVyKTtcblxuICBpZiAodGhpcy5jaGFyUmVjZWl2ZWQpIHtcbiAgICB2YXIgY3IgPSB0aGlzLmNoYXJSZWNlaXZlZDtcbiAgICB2YXIgYnVmID0gdGhpcy5jaGFyQnVmZmVyO1xuICAgIHZhciBlbmMgPSB0aGlzLmVuY29kaW5nO1xuICAgIHJlcyArPSBidWYuc2xpY2UoMCwgY3IpLnRvU3RyaW5nKGVuYyk7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcblxuZnVuY3Rpb24gcGFzc1Rocm91Z2hXcml0ZShidWZmZXIpIHtcbiAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZyh0aGlzLmVuY29kaW5nKTtcbn1cblxuZnVuY3Rpb24gdXRmMTZEZXRlY3RJbmNvbXBsZXRlQ2hhcihidWZmZXIpIHtcbiAgdGhpcy5jaGFyUmVjZWl2ZWQgPSBidWZmZXIubGVuZ3RoICUgMjtcbiAgdGhpcy5jaGFyTGVuZ3RoID0gdGhpcy5jaGFyUmVjZWl2ZWQgPyAyIDogMDtcbn1cblxuZnVuY3Rpb24gYmFzZTY0RGV0ZWN0SW5jb21wbGV0ZUNoYXIoYnVmZmVyKSB7XG4gIHRoaXMuY2hhclJlY2VpdmVkID0gYnVmZmVyLmxlbmd0aCAlIDM7XG4gIHRoaXMuY2hhckxlbmd0aCA9IHRoaXMuY2hhclJlY2VpdmVkID8gMyA6IDA7XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vbm9kZS1saWJzLWJyb3dzZXIvfi9zdHJpbmdfZGVjb2Rlci9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gNDhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAoIXByb2Nlc3MudmVyc2lvbiB8fFxuICAgIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MC4nKSA9PT0gMCB8fFxuICAgIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MS4nKSA9PT0gMCAmJiBwcm9jZXNzLnZlcnNpb24uaW5kZXhPZigndjEuOC4nKSAhPT0gMCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IG5leHRUaWNrO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBwcm9jZXNzLm5leHRUaWNrO1xufVxuXG5mdW5jdGlvbiBuZXh0VGljayhmbiwgYXJnMSwgYXJnMiwgYXJnMykge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJjYWxsYmFja1wiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG4gIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgYXJncywgaTtcbiAgc3dpdGNoIChsZW4pIHtcbiAgY2FzZSAwOlxuICBjYXNlIDE6XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZm4pO1xuICBjYXNlIDI6XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gYWZ0ZXJUaWNrT25lKCkge1xuICAgICAgZm4uY2FsbChudWxsLCBhcmcxKTtcbiAgICB9KTtcbiAgY2FzZSAzOlxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGlja1R3bygpIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgYXJnMSwgYXJnMik7XG4gICAgfSk7XG4gIGNhc2UgNDpcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2tUaHJlZSgpIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgfSk7XG4gIGRlZmF1bHQ6XG4gICAgYXJncyA9IG5ldyBBcnJheShsZW4gLSAxKTtcbiAgICBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICBhcmdzW2krK10gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGljaygpIHtcbiAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH0pO1xuICB9XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vcHJvY2Vzcy1uZXh0aWNrLWFyZ3MvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDQ5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIEEgYml0IHNpbXBsZXIgdGhhbiByZWFkYWJsZSBzdHJlYW1zLlxuLy8gSW1wbGVtZW50IGFuIGFzeW5jIC5fd3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYiksIGFuZCBpdCdsbCBoYW5kbGUgYWxsXG4vLyB0aGUgZHJhaW4gZXZlbnQgZW1pc3Npb24gYW5kIGJ1ZmZlcmluZy5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdyaXRhYmxlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHByb2Nlc3NOZXh0VGljayA9IHJlcXVpcmUoJ3Byb2Nlc3MtbmV4dGljay1hcmdzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBhc3luY1dyaXRlID0gIXByb2Nlc3MuYnJvd3NlciAmJiBbJ3YwLjEwJywgJ3YwLjkuJ10uaW5kZXhPZihwcm9jZXNzLnZlcnNpb24uc2xpY2UoMCwgNSkpID4gLTEgPyBzZXRJbW1lZGlhdGUgOiBwcm9jZXNzTmV4dFRpY2s7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBEdXBsZXg7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuV3JpdGFibGUuV3JpdGFibGVTdGF0ZSA9IFdyaXRhYmxlU3RhdGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBpbnRlcm5hbFV0aWwgPSB7XG4gIGRlcHJlY2F0ZTogcmVxdWlyZSgndXRpbC1kZXByZWNhdGUnKVxufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0nKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBidWZmZXJTaGltID0gcmVxdWlyZSgnYnVmZmVyLXNoaW1zJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudXRpbC5pbmhlcml0cyhXcml0YWJsZSwgU3RyZWFtKTtcblxuZnVuY3Rpb24gbm9wKCkge31cblxuZnVuY3Rpb24gV3JpdGVSZXEoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aGlzLmNodW5rID0gY2h1bms7XG4gIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgdGhpcy5jYWxsYmFjayA9IGNiO1xuICB0aGlzLm5leHQgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSkge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIC8vIG9iamVjdCBzdHJlYW0gZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCB0aGlzIHN0cmVhbVxuICAvLyBjb250YWlucyBidWZmZXJzIG9yIG9iamVjdHMuXG4gIHRoaXMub2JqZWN0TW9kZSA9ICEhb3B0aW9ucy5vYmplY3RNb2RlO1xuXG4gIGlmIChzdHJlYW0gaW5zdGFuY2VvZiBEdXBsZXgpIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fCAhIW9wdGlvbnMud3JpdGFibGVPYmplY3RNb2RlO1xuXG4gIC8vIHRoZSBwb2ludCBhdCB3aGljaCB3cml0ZSgpIHN0YXJ0cyByZXR1cm5pbmcgZmFsc2VcbiAgLy8gTm90ZTogMCBpcyBhIHZhbGlkIHZhbHVlLCBtZWFucyB0aGF0IHdlIGFsd2F5cyByZXR1cm4gZmFsc2UgaWZcbiAgLy8gdGhlIGVudGlyZSBidWZmZXIgaXMgbm90IGZsdXNoZWQgaW1tZWRpYXRlbHkgb24gd3JpdGUoKVxuICB2YXIgaHdtID0gb3B0aW9ucy5oaWdoV2F0ZXJNYXJrO1xuICB2YXIgZGVmYXVsdEh3bSA9IHRoaXMub2JqZWN0TW9kZSA/IDE2IDogMTYgKiAxMDI0O1xuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBod20gfHwgaHdtID09PSAwID8gaHdtIDogZGVmYXVsdEh3bTtcblxuICAvLyBjYXN0IHRvIGludHMuXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IH5+dGhpcy5oaWdoV2F0ZXJNYXJrO1xuXG4gIC8vIGRyYWluIGV2ZW50IGZsYWcuXG4gIHRoaXMubmVlZERyYWluID0gZmFsc2U7XG4gIC8vIGF0IHRoZSBzdGFydCBvZiBjYWxsaW5nIGVuZCgpXG4gIHRoaXMuZW5kaW5nID0gZmFsc2U7XG4gIC8vIHdoZW4gZW5kKCkgaGFzIGJlZW4gY2FsbGVkLCBhbmQgcmV0dXJuZWRcbiAgdGhpcy5lbmRlZCA9IGZhbHNlO1xuICAvLyB3aGVuICdmaW5pc2gnIGlzIGVtaXR0ZWRcbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlO1xuXG4gIC8vIHNob3VsZCB3ZSBkZWNvZGUgc3RyaW5ncyBpbnRvIGJ1ZmZlcnMgYmVmb3JlIHBhc3NpbmcgdG8gX3dyaXRlP1xuICAvLyB0aGlzIGlzIGhlcmUgc28gdGhhdCBzb21lIG5vZGUtY29yZSBzdHJlYW1zIGNhbiBvcHRpbWl6ZSBzdHJpbmdcbiAgLy8gaGFuZGxpbmcgYXQgYSBsb3dlciBsZXZlbC5cbiAgdmFyIG5vRGVjb2RlID0gb3B0aW9ucy5kZWNvZGVTdHJpbmdzID09PSBmYWxzZTtcbiAgdGhpcy5kZWNvZGVTdHJpbmdzID0gIW5vRGVjb2RlO1xuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXG4gIC8vIG5vdCBhbiBhY3R1YWwgYnVmZmVyIHdlIGtlZXAgdHJhY2sgb2YsIGJ1dCBhIG1lYXN1cmVtZW50XG4gIC8vIG9mIGhvdyBtdWNoIHdlJ3JlIHdhaXRpbmcgdG8gZ2V0IHB1c2hlZCB0byBzb21lIHVuZGVybHlpbmdcbiAgLy8gc29ja2V0IG9yIGZpbGUuXG4gIHRoaXMubGVuZ3RoID0gMDtcblxuICAvLyBhIGZsYWcgdG8gc2VlIHdoZW4gd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHdyaXRlLlxuICB0aGlzLndyaXRpbmcgPSBmYWxzZTtcblxuICAvLyB3aGVuIHRydWUgYWxsIHdyaXRlcyB3aWxsIGJlIGJ1ZmZlcmVkIHVudGlsIC51bmNvcmsoKSBjYWxsXG4gIHRoaXMuY29ya2VkID0gMDtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBvbndyaXRlIGNiIGlzIGNhbGxlZCBpbW1lZGlhdGVseSxcbiAgLy8gb3Igb24gYSBsYXRlciB0aWNrLiAgV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBhdCBmaXJzdCwgYmVjYXVzZSBhbnlcbiAgLy8gYWN0aW9ucyB0aGF0IHNob3VsZG4ndCBoYXBwZW4gdW50aWwgXCJsYXRlclwiIHNob3VsZCBnZW5lcmFsbHkgYWxzb1xuICAvLyBub3QgaGFwcGVuIGJlZm9yZSB0aGUgZmlyc3Qgd3JpdGUgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyBhIGZsYWcgdG8ga25vdyBpZiB3ZSdyZSBwcm9jZXNzaW5nIHByZXZpb3VzbHkgYnVmZmVyZWQgaXRlbXMsIHdoaWNoXG4gIC8vIG1heSBjYWxsIHRoZSBfd3JpdGUoKSBjYWxsYmFjayBpbiB0aGUgc2FtZSB0aWNrLCBzbyB0aGF0IHdlIGRvbid0XG4gIC8vIGVuZCB1cCBpbiBhbiBvdmVybGFwcGVkIG9ud3JpdGUgc2l0dWF0aW9uLlxuICB0aGlzLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZTtcblxuICAvLyB0aGUgY2FsbGJhY2sgdGhhdCdzIHBhc3NlZCB0byBfd3JpdGUoY2h1bmssY2IpXG4gIHRoaXMub253cml0ZSA9IGZ1bmN0aW9uIChlcikge1xuICAgIG9ud3JpdGUoc3RyZWFtLCBlcik7XG4gIH07XG5cbiAgLy8gdGhlIGNhbGxiYWNrIHRoYXQgdGhlIHVzZXIgc3VwcGxpZXMgdG8gd3JpdGUoY2h1bmssZW5jb2RpbmcsY2IpXG4gIHRoaXMud3JpdGVjYiA9IG51bGw7XG5cbiAgLy8gdGhlIGFtb3VudCB0aGF0IGlzIGJlaW5nIHdyaXR0ZW4gd2hlbiBfd3JpdGUgaXMgY2FsbGVkLlxuICB0aGlzLndyaXRlbGVuID0gMDtcblxuICB0aGlzLmJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gIHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG5cbiAgLy8gbnVtYmVyIG9mIHBlbmRpbmcgdXNlci1zdXBwbGllZCB3cml0ZSBjYWxsYmFja3NcbiAgLy8gdGhpcyBtdXN0IGJlIDAgYmVmb3JlICdmaW5pc2gnIGNhbiBiZSBlbWl0dGVkXG4gIHRoaXMucGVuZGluZ2NiID0gMDtcblxuICAvLyBlbWl0IHByZWZpbmlzaCBpZiB0aGUgb25seSB0aGluZyB3ZSdyZSB3YWl0aW5nIGZvciBpcyBfd3JpdGUgY2JzXG4gIC8vIFRoaXMgaXMgcmVsZXZhbnQgZm9yIHN5bmNocm9ub3VzIFRyYW5zZm9ybSBzdHJlYW1zXG4gIHRoaXMucHJlZmluaXNoZWQgPSBmYWxzZTtcblxuICAvLyBUcnVlIGlmIHRoZSBlcnJvciB3YXMgYWxyZWFkeSBlbWl0dGVkIGFuZCBzaG91bGQgbm90IGJlIHRocm93biBhZ2FpblxuICB0aGlzLmVycm9yRW1pdHRlZCA9IGZhbHNlO1xuXG4gIC8vIGNvdW50IGJ1ZmZlcmVkIHJlcXVlc3RzXG4gIHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQgPSAwO1xuXG4gIC8vIGFsbG9jYXRlIHRoZSBmaXJzdCBDb3JrZWRSZXF1ZXN0LCB0aGVyZSBpcyBhbHdheXNcbiAgLy8gb25lIGFsbG9jYXRlZCBhbmQgZnJlZSB0byB1c2UsIGFuZCB3ZSBtYWludGFpbiBhdCBtb3N0IHR3b1xuICB0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZSA9IG5ldyBDb3JrZWRSZXF1ZXN0KHRoaXMpO1xufVxuXG5Xcml0YWJsZVN0YXRlLnByb3RvdHlwZS5nZXRCdWZmZXIgPSBmdW5jdGlvbiBnZXRCdWZmZXIoKSB7XG4gIHZhciBjdXJyZW50ID0gdGhpcy5idWZmZXJlZFJlcXVlc3Q7XG4gIHZhciBvdXQgPSBbXTtcbiAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICBvdXQucHVzaChjdXJyZW50KTtcbiAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICB9XG4gIHJldHVybiBvdXQ7XG59O1xuXG4oZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZVN0YXRlLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcbiAgICAgIGdldDogaW50ZXJuYWxVdGlsLmRlcHJlY2F0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEJ1ZmZlcigpO1xuICAgICAgfSwgJ193cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyICcgKyAnaW5zdGVhZC4nKVxuICAgIH0pO1xuICB9IGNhdGNoIChfKSB7fVxufSkoKTtcblxuLy8gVGVzdCBfd3JpdGFibGVTdGF0ZSBmb3IgaW5oZXJpdGFuY2UgdG8gYWNjb3VudCBmb3IgRHVwbGV4IHN0cmVhbXMsXG4vLyB3aG9zZSBwcm90b3R5cGUgY2hhaW4gb25seSBwb2ludHMgdG8gUmVhZGFibGUuXG52YXIgcmVhbEhhc0luc3RhbmNlO1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmhhc0luc3RhbmNlICYmIHR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSA9PT0gJ2Z1bmN0aW9uJykge1xuICByZWFsSGFzSW5zdGFuY2UgPSBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLCBTeW1ib2wuaGFzSW5zdGFuY2UsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgaWYgKHJlYWxIYXNJbnN0YW5jZS5jYWxsKHRoaXMsIG9iamVjdCkpIHJldHVybiB0cnVlO1xuXG4gICAgICByZXR1cm4gb2JqZWN0ICYmIG9iamVjdC5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFdyaXRhYmxlU3RhdGU7XG4gICAgfVxuICB9KTtcbn0gZWxzZSB7XG4gIHJlYWxIYXNJbnN0YW5jZSA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgdGhpcztcbiAgfTtcbn1cblxuZnVuY3Rpb24gV3JpdGFibGUob3B0aW9ucykge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIC8vIFdyaXRhYmxlIGN0b3IgaXMgYXBwbGllZCB0byBEdXBsZXhlcywgdG9vLlxuICAvLyBgcmVhbEhhc0luc3RhbmNlYCBpcyBuZWNlc3NhcnkgYmVjYXVzZSB1c2luZyBwbGFpbiBgaW5zdGFuY2VvZmBcbiAgLy8gd291bGQgcmV0dXJuIGZhbHNlLCBhcyBubyBgX3dyaXRhYmxlU3RhdGVgIHByb3BlcnR5IGlzIGF0dGFjaGVkLlxuXG4gIC8vIFRyeWluZyB0byB1c2UgdGhlIGN1c3RvbSBgaW5zdGFuY2VvZmAgZm9yIFdyaXRhYmxlIGhlcmUgd2lsbCBhbHNvIGJyZWFrIHRoZVxuICAvLyBOb2RlLmpzIExhenlUcmFuc2Zvcm0gaW1wbGVtZW50YXRpb24sIHdoaWNoIGhhcyBhIG5vbi10cml2aWFsIGdldHRlciBmb3JcbiAgLy8gYF93cml0YWJsZVN0YXRlYCB0aGF0IHdvdWxkIGxlYWQgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICBpZiAoIXJlYWxIYXNJbnN0YW5jZS5jYWxsKFdyaXRhYmxlLCB0aGlzKSAmJiAhKHRoaXMgaW5zdGFuY2VvZiBEdXBsZXgpKSB7XG4gICAgcmV0dXJuIG5ldyBXcml0YWJsZShvcHRpb25zKTtcbiAgfVxuXG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUgPSBuZXcgV3JpdGFibGVTdGF0ZShvcHRpb25zLCB0aGlzKTtcblxuICAvLyBsZWdhY3kuXG4gIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLndyaXRlID09PSAnZnVuY3Rpb24nKSB0aGlzLl93cml0ZSA9IG9wdGlvbnMud3JpdGU7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMud3JpdGV2ID09PSAnZnVuY3Rpb24nKSB0aGlzLl93cml0ZXYgPSBvcHRpb25zLndyaXRldjtcbiAgfVxuXG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xufVxuXG4vLyBPdGhlcndpc2UgcGVvcGxlIGNhbiBwaXBlIFdyaXRhYmxlIHN0cmVhbXMsIHdoaWNoIGlzIGp1c3Qgd3JvbmcuXG5Xcml0YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZScpKTtcbn07XG5cbmZ1bmN0aW9uIHdyaXRlQWZ0ZXJFbmQoc3RyZWFtLCBjYikge1xuICB2YXIgZXIgPSBuZXcgRXJyb3IoJ3dyaXRlIGFmdGVyIGVuZCcpO1xuICAvLyBUT0RPOiBkZWZlciBlcnJvciBldmVudHMgY29uc2lzdGVudGx5IGV2ZXJ5d2hlcmUsIG5vdCBqdXN0IHRoZSBjYlxuICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gIHByb2Nlc3NOZXh0VGljayhjYiwgZXIpO1xufVxuXG4vLyBDaGVja3MgdGhhdCBhIHVzZXItc3VwcGxpZWQgY2h1bmsgaXMgdmFsaWQsIGVzcGVjaWFsbHkgZm9yIHRoZSBwYXJ0aWN1bGFyXG4vLyBtb2RlIHRoZSBzdHJlYW0gaXMgaW4uIEN1cnJlbnRseSB0aGlzIG1lYW5zIHRoYXQgYG51bGxgIGlzIG5ldmVyIGFjY2VwdGVkXG4vLyBhbmQgdW5kZWZpbmVkL25vbi1zdHJpbmcgdmFsdWVzIGFyZSBvbmx5IGFsbG93ZWQgaW4gb2JqZWN0IG1vZGUuXG5mdW5jdGlvbiB2YWxpZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBjYikge1xuICB2YXIgdmFsaWQgPSB0cnVlO1xuICB2YXIgZXIgPSBmYWxzZTtcblxuICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICBlciA9IG5ldyBUeXBlRXJyb3IoJ01heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJiBjaHVuayAhPT0gdW5kZWZpbmVkICYmICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rJyk7XG4gIH1cbiAgaWYgKGVyKSB7XG4gICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuICAgIHByb2Nlc3NOZXh0VGljayhjYiwgZXIpO1xuICAgIHZhbGlkID0gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbGlkO1xufVxuXG5Xcml0YWJsZS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuICB2YXIgcmV0ID0gZmFsc2U7XG4gIHZhciBpc0J1ZiA9IEJ1ZmZlci5pc0J1ZmZlcihjaHVuayk7XG5cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgaWYgKGlzQnVmKSBlbmNvZGluZyA9ICdidWZmZXInO2Vsc2UgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSBzdGF0ZS5kZWZhdWx0RW5jb2Rpbmc7XG5cbiAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgY2IgPSBub3A7XG5cbiAgaWYgKHN0YXRlLmVuZGVkKSB3cml0ZUFmdGVyRW5kKHRoaXMsIGNiKTtlbHNlIGlmIChpc0J1ZiB8fCB2YWxpZENodW5rKHRoaXMsIHN0YXRlLCBjaHVuaywgY2IpKSB7XG4gICAgc3RhdGUucGVuZGluZ2NiKys7XG4gICAgcmV0ID0gd3JpdGVPckJ1ZmZlcih0aGlzLCBzdGF0ZSwgaXNCdWYsIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS5jb3JrID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuXG4gIHN0YXRlLmNvcmtlZCsrO1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLnVuY29yayA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcblxuICBpZiAoc3RhdGUuY29ya2VkKSB7XG4gICAgc3RhdGUuY29ya2VkLS07XG5cbiAgICBpZiAoIXN0YXRlLndyaXRpbmcgJiYgIXN0YXRlLmNvcmtlZCAmJiAhc3RhdGUuZmluaXNoZWQgJiYgIXN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgJiYgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0KSBjbGVhckJ1ZmZlcih0aGlzLCBzdGF0ZSk7XG4gIH1cbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2RpbmcgPSBmdW5jdGlvbiBzZXREZWZhdWx0RW5jb2RpbmcoZW5jb2RpbmcpIHtcbiAgLy8gbm9kZTo6UGFyc2VFbmNvZGluZygpIHJlcXVpcmVzIGxvd2VyIGNhc2UuXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSBlbmNvZGluZyA9IGVuY29kaW5nLnRvTG93ZXJDYXNlKCk7XG4gIGlmICghKFsnaGV4JywgJ3V0ZjgnLCAndXRmLTgnLCAnYXNjaWknLCAnYmluYXJ5JywgJ2Jhc2U2NCcsICd1Y3MyJywgJ3Vjcy0yJywgJ3V0ZjE2bGUnLCAndXRmLTE2bGUnLCAncmF3J10uaW5kZXhPZigoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKSkgPiAtMSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZyk7XG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gZGVjb2RlQ2h1bmsoc3RhdGUsIGNodW5rLCBlbmNvZGluZykge1xuICBpZiAoIXN0YXRlLm9iamVjdE1vZGUgJiYgc3RhdGUuZGVjb2RlU3RyaW5ncyAhPT0gZmFsc2UgJiYgdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJykge1xuICAgIGNodW5rID0gYnVmZmVyU2hpbS5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gIH1cbiAgcmV0dXJuIGNodW5rO1xufVxuXG4vLyBpZiB3ZSdyZSBhbHJlYWR5IHdyaXRpbmcgc29tZXRoaW5nLCB0aGVuIGp1c3QgcHV0IHRoaXNcbi8vIGluIHRoZSBxdWV1ZSwgYW5kIHdhaXQgb3VyIHR1cm4uICBPdGhlcndpc2UsIGNhbGwgX3dyaXRlXG4vLyBJZiB3ZSByZXR1cm4gZmFsc2UsIHRoZW4gd2UgbmVlZCBhIGRyYWluIGV2ZW50LCBzbyBzZXQgdGhhdCBmbGFnLlxuZnVuY3Rpb24gd3JpdGVPckJ1ZmZlcihzdHJlYW0sIHN0YXRlLCBpc0J1ZiwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBpZiAoIWlzQnVmKSB7XG4gICAgY2h1bmsgPSBkZWNvZGVDaHVuayhzdGF0ZSwgY2h1bmssIGVuY29kaW5nKTtcbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNodW5rKSkgZW5jb2RpbmcgPSAnYnVmZmVyJztcbiAgfVxuICB2YXIgbGVuID0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG5cbiAgc3RhdGUubGVuZ3RoICs9IGxlbjtcblxuICB2YXIgcmV0ID0gc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgLy8gd2UgbXVzdCBlbnN1cmUgdGhhdCBwcmV2aW91cyBuZWVkRHJhaW4gd2lsbCBub3QgYmUgcmVzZXQgdG8gZmFsc2UuXG4gIGlmICghcmV0KSBzdGF0ZS5uZWVkRHJhaW4gPSB0cnVlO1xuXG4gIGlmIChzdGF0ZS53cml0aW5nIHx8IHN0YXRlLmNvcmtlZCkge1xuICAgIHZhciBsYXN0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbmV3IFdyaXRlUmVxKGNodW5rLCBlbmNvZGluZywgY2IpO1xuICAgIGlmIChsYXN0KSB7XG4gICAgICBsYXN0Lm5leHQgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3QgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIH1cbiAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudCArPSAxO1xuICB9IGVsc2Uge1xuICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmFsc2UsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYik7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIHdyaXRldiwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHN0YXRlLndyaXRlbGVuID0gbGVuO1xuICBzdGF0ZS53cml0ZWNiID0gY2I7XG4gIHN0YXRlLndyaXRpbmcgPSB0cnVlO1xuICBzdGF0ZS5zeW5jID0gdHJ1ZTtcbiAgaWYgKHdyaXRldikgc3RyZWFtLl93cml0ZXYoY2h1bmssIHN0YXRlLm9ud3JpdGUpO2Vsc2Ugc3RyZWFtLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIHN0YXRlLm9ud3JpdGUpO1xuICBzdGF0ZS5zeW5jID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIG9ud3JpdGVFcnJvcihzdHJlYW0sIHN0YXRlLCBzeW5jLCBlciwgY2IpIHtcbiAgLS1zdGF0ZS5wZW5kaW5nY2I7XG4gIGlmIChzeW5jKSBwcm9jZXNzTmV4dFRpY2soY2IsIGVyKTtlbHNlIGNiKGVyKTtcblxuICBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xufVxuXG5mdW5jdGlvbiBvbndyaXRlU3RhdGVVcGRhdGUoc3RhdGUpIHtcbiAgc3RhdGUud3JpdGluZyA9IGZhbHNlO1xuICBzdGF0ZS53cml0ZWNiID0gbnVsbDtcbiAgc3RhdGUubGVuZ3RoIC09IHN0YXRlLndyaXRlbGVuO1xuICBzdGF0ZS53cml0ZWxlbiA9IDA7XG59XG5cbmZ1bmN0aW9uIG9ud3JpdGUoc3RyZWFtLCBlcikge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG4gIHZhciBzeW5jID0gc3RhdGUuc3luYztcbiAgdmFyIGNiID0gc3RhdGUud3JpdGVjYjtcblxuICBvbndyaXRlU3RhdGVVcGRhdGUoc3RhdGUpO1xuXG4gIGlmIChlcikgb253cml0ZUVycm9yKHN0cmVhbSwgc3RhdGUsIHN5bmMsIGVyLCBjYik7ZWxzZSB7XG4gICAgLy8gQ2hlY2sgaWYgd2UncmUgYWN0dWFsbHkgcmVhZHkgdG8gZmluaXNoLCBidXQgZG9uJ3QgZW1pdCB5ZXRcbiAgICB2YXIgZmluaXNoZWQgPSBuZWVkRmluaXNoKHN0YXRlKTtcblxuICAgIGlmICghZmluaXNoZWQgJiYgIXN0YXRlLmNvcmtlZCAmJiAhc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyAmJiBzdGF0ZS5idWZmZXJlZFJlcXVlc3QpIHtcbiAgICAgIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChzeW5jKSB7XG4gICAgICAvKjxyZXBsYWNlbWVudD4qL1xuICAgICAgYXN5bmNXcml0ZShhZnRlcldyaXRlLCBzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpO1xuICAgICAgLyo8L3JlcGxhY2VtZW50PiovXG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpIHtcbiAgaWYgKCFmaW5pc2hlZCkgb253cml0ZURyYWluKHN0cmVhbSwgc3RhdGUpO1xuICBzdGF0ZS5wZW5kaW5nY2ItLTtcbiAgY2IoKTtcbiAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG59XG5cbi8vIE11c3QgZm9yY2UgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIG5leHRUaWNrLCBzbyB0aGF0IHdlIGRvbid0XG4vLyBlbWl0ICdkcmFpbicgYmVmb3JlIHRoZSB3cml0ZSgpIGNvbnN1bWVyIGdldHMgdGhlICdmYWxzZScgcmV0dXJuXG4vLyB2YWx1ZSwgYW5kIGhhcyBhIGNoYW5jZSB0byBhdHRhY2ggYSAnZHJhaW4nIGxpc3RlbmVyLlxuZnVuY3Rpb24gb253cml0ZURyYWluKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5uZWVkRHJhaW4pIHtcbiAgICBzdGF0ZS5uZWVkRHJhaW4gPSBmYWxzZTtcbiAgICBzdHJlYW0uZW1pdCgnZHJhaW4nKTtcbiAgfVxufVxuXG4vLyBpZiB0aGVyZSdzIHNvbWV0aGluZyBpbiB0aGUgYnVmZmVyIHdhaXRpbmcsIHRoZW4gcHJvY2VzcyBpdFxuZnVuY3Rpb24gY2xlYXJCdWZmZXIoc3RyZWFtLCBzdGF0ZSkge1xuICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nID0gdHJ1ZTtcbiAgdmFyIGVudHJ5ID0gc3RhdGUuYnVmZmVyZWRSZXF1ZXN0O1xuXG4gIGlmIChzdHJlYW0uX3dyaXRldiAmJiBlbnRyeSAmJiBlbnRyeS5uZXh0KSB7XG4gICAgLy8gRmFzdCBjYXNlLCB3cml0ZSBldmVyeXRoaW5nIHVzaW5nIF93cml0ZXYoKVxuICAgIHZhciBsID0gc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQ7XG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShsKTtcbiAgICB2YXIgaG9sZGVyID0gc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlO1xuICAgIGhvbGRlci5lbnRyeSA9IGVudHJ5O1xuXG4gICAgdmFyIGNvdW50ID0gMDtcbiAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgIGJ1ZmZlcltjb3VudF0gPSBlbnRyeTtcbiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgIGNvdW50ICs9IDE7XG4gICAgfVxuXG4gICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCB0cnVlLCBzdGF0ZS5sZW5ndGgsIGJ1ZmZlciwgJycsIGhvbGRlci5maW5pc2gpO1xuXG4gICAgLy8gZG9Xcml0ZSBpcyBhbG1vc3QgYWx3YXlzIGFzeW5jLCBkZWZlciB0aGVzZSB0byBzYXZlIGEgYml0IG9mIHRpbWVcbiAgICAvLyBhcyB0aGUgaG90IHBhdGggZW5kcyB3aXRoIGRvV3JpdGVcbiAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgICBpZiAoaG9sZGVyLm5leHQpIHtcbiAgICAgIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZSA9IGhvbGRlci5uZXh0O1xuICAgICAgaG9sZGVyLm5leHQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBuZXcgQ29ya2VkUmVxdWVzdChzdGF0ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFNsb3cgY2FzZSwgd3JpdGUgY2h1bmtzIG9uZS1ieS1vbmVcbiAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgIHZhciBjaHVuayA9IGVudHJ5LmNodW5rO1xuICAgICAgdmFyIGVuY29kaW5nID0gZW50cnkuZW5jb2Rpbmc7XG4gICAgICB2YXIgY2IgPSBlbnRyeS5jYWxsYmFjaztcbiAgICAgIHZhciBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcblxuICAgICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCBmYWxzZSwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgIC8vIGlmIHdlIGRpZG4ndCBjYWxsIHRoZSBvbndyaXRlIGltbWVkaWF0ZWx5LCB0aGVuXG4gICAgICAvLyBpdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdCBkb2VzLlxuICAgICAgLy8gYWxzbywgdGhhdCBtZWFucyB0aGF0IHRoZSBjaHVuayBhbmQgY2IgYXJlIGN1cnJlbnRseVxuICAgICAgLy8gYmVpbmcgcHJvY2Vzc2VkLCBzbyBtb3ZlIHRoZSBidWZmZXIgY291bnRlciBwYXN0IHRoZW0uXG4gICAgICBpZiAoc3RhdGUud3JpdGluZykge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW50cnkgPT09IG51bGwpIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICB9XG5cbiAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQgPSAwO1xuICBzdGF0ZS5idWZmZXJlZFJlcXVlc3QgPSBlbnRyeTtcbiAgc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyA9IGZhbHNlO1xufVxuXG5Xcml0YWJsZS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgY2IobmV3IEVycm9yKCdfd3JpdGUoKSBpcyBub3QgaW1wbGVtZW50ZWQnKSk7XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuX3dyaXRldiA9IG51bGw7XG5cbldyaXRhYmxlLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuXG4gIGlmICh0eXBlb2YgY2h1bmsgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGNodW5rO1xuICAgIGNodW5rID0gbnVsbDtcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cblxuICBpZiAoY2h1bmsgIT09IG51bGwgJiYgY2h1bmsgIT09IHVuZGVmaW5lZCkgdGhpcy53cml0ZShjaHVuaywgZW5jb2RpbmcpO1xuXG4gIC8vIC5lbmQoKSBmdWxseSB1bmNvcmtzXG4gIGlmIChzdGF0ZS5jb3JrZWQpIHtcbiAgICBzdGF0ZS5jb3JrZWQgPSAxO1xuICAgIHRoaXMudW5jb3JrKCk7XG4gIH1cblxuICAvLyBpZ25vcmUgdW5uZWNlc3NhcnkgZW5kKCkgY2FsbHMuXG4gIGlmICghc3RhdGUuZW5kaW5nICYmICFzdGF0ZS5maW5pc2hlZCkgZW5kV3JpdGFibGUodGhpcywgc3RhdGUsIGNiKTtcbn07XG5cbmZ1bmN0aW9uIG5lZWRGaW5pc2goc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLmVuZGluZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID09PSBudWxsICYmICFzdGF0ZS5maW5pc2hlZCAmJiAhc3RhdGUud3JpdGluZztcbn1cblxuZnVuY3Rpb24gcHJlZmluaXNoKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5wcmVmaW5pc2hlZCkge1xuICAgIHN0YXRlLnByZWZpbmlzaGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0uZW1pdCgncHJlZmluaXNoJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSkge1xuICB2YXIgbmVlZCA9IG5lZWRGaW5pc2goc3RhdGUpO1xuICBpZiAobmVlZCkge1xuICAgIGlmIChzdGF0ZS5wZW5kaW5nY2IgPT09IDApIHtcbiAgICAgIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKTtcbiAgICAgIHN0YXRlLmZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5lbWl0KCdmaW5pc2gnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJlZmluaXNoKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmVlZDtcbn1cblxuZnVuY3Rpb24gZW5kV3JpdGFibGUoc3RyZWFtLCBzdGF0ZSwgY2IpIHtcbiAgc3RhdGUuZW5kaW5nID0gdHJ1ZTtcbiAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG4gIGlmIChjYikge1xuICAgIGlmIChzdGF0ZS5maW5pc2hlZCkgcHJvY2Vzc05leHRUaWNrKGNiKTtlbHNlIHN0cmVhbS5vbmNlKCdmaW5pc2gnLCBjYik7XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICBzdHJlYW0ud3JpdGFibGUgPSBmYWxzZTtcbn1cblxuLy8gSXQgc2VlbXMgYSBsaW5rZWQgbGlzdCBidXQgaXQgaXMgbm90XG4vLyB0aGVyZSB3aWxsIGJlIG9ubHkgMiBvZiB0aGVzZSBmb3IgZWFjaCBzdHJlYW1cbmZ1bmN0aW9uIENvcmtlZFJlcXVlc3Qoc3RhdGUpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICB0aGlzLm5leHQgPSBudWxsO1xuICB0aGlzLmVudHJ5ID0gbnVsbDtcbiAgdGhpcy5maW5pc2ggPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgdmFyIGVudHJ5ID0gX3RoaXMuZW50cnk7XG4gICAgX3RoaXMuZW50cnkgPSBudWxsO1xuICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgdmFyIGNiID0gZW50cnkuY2FsbGJhY2s7XG4gICAgICBzdGF0ZS5wZW5kaW5nY2ItLTtcbiAgICAgIGNiKGVycik7XG4gICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUpIHtcbiAgICAgIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0ID0gX3RoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZSA9IF90aGlzO1xuICAgIH1cbiAgfTtcbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzXG4vLyBtb2R1bGUgaWQgPSA1MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzJyk7XG5leHBvcnRzLlN0cmVhbSA9IGV4cG9ydHM7XG5leHBvcnRzLlJlYWRhYmxlID0gZXhwb3J0cztcbmV4cG9ydHMuV3JpdGFibGUgPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzJyk7XG5leHBvcnRzLkR1cGxleCA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fZHVwbGV4LmpzJyk7XG5leHBvcnRzLlRyYW5zZm9ybSA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzJyk7XG5leHBvcnRzLlBhc3NUaHJvdWdoID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qcycpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3JlYWRhYmxlLXN0cmVhbS9yZWFkYWJsZS1icm93c2VyLmpzXG4vLyBtb2R1bGUgaWQgPSA1MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJpbXBvcnQgVG9uZSBmcm9tICd0b25lJ1xuaW1wb3J0IHsgY2hvaWNlIH0gZnJvbSAnLi91dGlsJ1xuXG5jb25zdCBwbGF5ZXJfY291bnQgPSAyXG5sZXQgc2FtcGxlX2luZGV4ID0gMFxuXG5jb25zdCBjb21wcmVzc29yID0gbmV3IFRvbmUuQ29tcHJlc3NvcigtMzAsIDMpLnRvTWFzdGVyKClcblxuY29uc3Qgc2FtcGxlcyA9IFtcbiAgeyByb290OiAyMjYsIGZuOiAnc2FtcGxlcy8zODA3MzdfX2NhYmxlZC1tZXNzX19zYW5zdWxhLTAxLWEtcmF3Lm1wMycsIH0sXG4gIHsgcm9vdDogMjY3LCBmbjogJ3NhbXBsZXMvMzgwNzM2X19jYWJsZWQtbWVzc19fc2Fuc3VsYS0wMi1jLXJhdy5tcDMnLCB9LFxuICB7IHJvb3Q6IDM0MCwgZm46ICdzYW1wbGVzLzM4MDczNV9fY2FibGVkLW1lc3NfX3NhbnN1bGEtMDMtZS1yYXcubXAzJywgfSxcbiAgeyByb290OiA0NTIsIGZuOiAnc2FtcGxlcy8zODA3MzNfX2NhYmxlZC1tZXNzX19zYW5zdWxhLTA2LWEtMDItcmF3Lm1wMycsIH0sXG4vLyAgeyByb290OiA1MDcsIGZuOiAnc2FtcGxlcy8zODA3MzRfX2NhYmxlZC1tZXNzX19zYW5zdWxhLTA3LWItaC1yYXcubXAzJywgfSxcbi8vICB7IHJvb3Q6IDUzNSwgZm46ICdzYW1wbGVzLzM4MDczMV9fY2FibGVkLW1lc3NfX3NhbnN1bGEtMDgtYy1yYXcubXAzJywgfSxcbi8vICB7IHJvb3Q6IDY3MSwgZm46ICdzYW1wbGVzLzM4MDczMl9fY2FibGVkLW1lc3NfX3NhbnN1bGEtMDktZS1yYXcubXAzJywgfSxcbl1cblxuc2FtcGxlcy5mb3JFYWNoKChzYW1wbGUpID0+IHtcbiAgc2FtcGxlLnBsYXllcnMgPSBbXVxuICBzYW1wbGUuaW5kZXggPSAtMVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHBsYXllcl9jb3VudDsgaSsrKSB7XG4gICAgbGV0IGZuID0gc2FtcGxlLmZuXG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ocmVmLm1hdGNoKC9hc2RmLnVzLykpIHtcbiAgICAgIGZuID0gJy8vYXNkZi51cy9rYWxpbWJhLycgKyBmblxuICAgIH1cbiAgICBsZXQgcGxheWVyID0gbmV3IFRvbmUuUGxheWVyKHtcbiAgICAgIHVybDogZm4sXG4gICAgICByZXRyaWdnZXI6IHRydWUsXG4gICAgICBwbGF5YmFja1JhdGU6IDEsXG4gICAgfSlcbiAgICBwbGF5ZXIuY29ubmVjdChjb21wcmVzc29yKVxuICAgIHNhbXBsZS5wbGF5ZXJzLnB1c2gocGxheWVyKVxuICB9XG59KVxuXG5mdW5jdGlvbiBwbGF5IChmcmVxLCB2b2x1bWUgPSAwLjApIHtcbiAgY29uc3QgYmVzdCA9IHsgc2FtcGxlOiBzYW1wbGVzW3NhbXBsZV9pbmRleF0gfVxuICBzYW1wbGVfaW5kZXggPSAoc2FtcGxlX2luZGV4ICsgMSkgJSBzYW1wbGVzLmxlbmd0aFxuICBiZXN0LnNhbXBsZS5pbmRleCA9IChiZXN0LnNhbXBsZS5pbmRleCArIDEpICUgcGxheWVyX2NvdW50XG5cbiAgY29uc3QgcGxheWVyID0gYmVzdC5zYW1wbGUucGxheWVyc1sgYmVzdC5zYW1wbGUuaW5kZXggXVxuICBwbGF5ZXIucGxheWJhY2tSYXRlID0gZnJlcSAvIGJlc3Quc2FtcGxlLnJvb3RcbiAgLy8gY29uc29sZS5sb2cocGxheWVyKVxuICBwbGF5ZXIudm9sdW1lLnZhbHVlID0gdm9sdW1lXG4gIHNldFRpbWVvdXQoKCkgPT4geyBwbGF5ZXIuc3RhcnQoKSB9LCAwKVxufVxuXG5leHBvcnQgZGVmYXVsdCB7IHBsYXkgfVxuXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvbGliL2thbGltYmEuanMiLCJpbXBvcnQgSW50b25hdGlvbiBmcm9tICcuL2ludG9uYXRpb24nXG5cbmNvbnN0IG1lYW50b25lID0gYCEgbWVhbnF1YXIuc2NsXG4hXG4xLzQtY29tbWEgbWVhbnRvbmUgc2NhbGUuIFBpZXRybyBBYXJvbidzIHRlbXBlcmFtZW50ICgxNTIzKVxuIDEyXG4hXG4gNzYuMDQ5MDBcbiAxOTMuMTU2ODZcbiAzMTAuMjY0NzFcbiA1LzRcbiA1MDMuNDIxNTdcbiA1NzkuNDcwNTdcbiA2OTYuNTc4NDNcbiAyNS8xNlxuIDg4OS43MzUyOVxuIDEwMDYuODQzMTRcbiAxMDgyLjg5MjE0XG4gMi8xXG5gXG5cbmNvbnN0IHNoYXJlcyA9IGAhIHNoYXJlcy5zY2xcbiFcbkEgc2NhbGUgYmFzZWQgb24gc2hhcmVzIG9mIHdlYWx0aFxuIVxuMS5cbjUuXG4xNS5cbjMyLlxuNTIuXG43OC5cbjExNi5cbjE4Mi5cbjUyMS5cbjEwMDAuXG5gXG5cbmNvbnN0IHNoYXJlc19zdW0gPSBgISBzaGFyZXNfc3VtLnNjbFxuIVxuQSBzY2FsZSBiYXNlZCBvbiBzdW1taW5nIHNoYXJlcyBvZiB3ZWFsdGhcbiFcbjFcbjYuMFxuMjEuMFxuNTMuMFxuMTA1LjBcbjE4My4wXG4yOTkuMFxuNDgxLjBcbjEwMDIuMFxuMi8xXG5gXG5cbmNvbnN0IG1hdmlsYSA9IGAhIG1hdmlsYTEyLnNjbFxuIVxuQSAxMi1ub3RlIG1hdmlsYSBzY2FsZSAoZm9yIHdhcnBpbmcgbWVhbnRvbmUtYmFzZWQgbXVzaWMpLCA1LWxpbWl0IFRPUFxuIDEyXG4hXG4tMzAuOTk3MTlcbiAxNjMuNTA3NzBcbiAzNTguMDEyNThcbiAzMjcuMDE1NDBcbiA1MjEuNTIwMjhcbiA0OTAuNTIzMTBcbiA2ODUuMDI3OThcbiA2NTQuMDMwODBcbiA4NDguNTM1NjhcbiAxMDQzLjA0MDU3XG4gMTAxMi4wNDMzOFxuIDEyMDYuNTQ4MjZcbmBcblxuY29uc3QgY2FybG9zX2FscGhhID0gYCEgY2FybG9zX2FscGhhLnNjbFxuIVxuV2VuZHkgQ2FybG9zJyBBbHBoYSBzY2FsZSB3aXRoIHBlcmZlY3QgZmlmdGggZGl2aWRlZCBpbiBuaW5lXG4gMThcbiFcbiA3OC4wMDAwMFxuIDE1Ni4wMDAwMFxuIDIzNC4wMDAwMFxuIDMxMi4wMDAwMFxuIDM5MC4wMDAwMFxuIDQ2OC4wMDAwMFxuIDU0Ni4wMDAwMFxuIDYyNC4wMDAwMFxuIDcwMi4wMDAwMFxuIDc4MC4wMDAwMFxuIDg1OC4wMDAwMFxuIDkzNi4wMDAwMFxuIDEwMTQuMDAwMDBcbiAxMDkyLjAwMDAwXG4gMTE3MC4wMDAwMFxuIDEyNDguMDAwMDBcbiAxMzI2LjAwMDAwXG4gMTQwNC4wMDAwMFxuYFxuXG5jb25zdCBsYW1vbnRlID0gYCEgeW91bmctbG1fcGlhbm8uc2NsXG4hXG5MYU1vbnRlIFlvdW5nJ3MgV2VsbC1UZW1wZXJlZCBQaWFub1xuMTJcbiFcbjU2Ny81MTJcbjkvOFxuMTQ3LzEyOFxuMjEvMTZcbjEzMjMvMTAyNFxuMTg5LzEyOFxuMy8yXG40OS8zMlxuNy80XG40NDEvMjU2XG42My8zMlxuMi8xXG5gXG5cbmNvbnN0IGNvbHVuZGkgPSBgISBjb2x1bmRpLnNjbFxuIVxuQ29sdW5kaSBzY2FsZVxuMTBcbiFcbjkvOFxuMTcxLzE0MFxuMTM3LzExMlxuNDMvMzVcbjMvMlxuNDIxLzI4MFxuMjEzLzE0MFxuMjYzLzE1MFxuNjYvMzVcbjIvMVxuYFxuXG5jb25zdCBsaXVfbWFqb3IgPSBgISBsaXVfbWFqb3Iuc2NsXG4hXG5MaW51cyBMaXUncyBNYWpvciBTY2FsZSwgc2VlIGhpcyAxOTc4IGJvb2ssIFwiSW50b25hdGlvbiBUaGVvcnlcIiAgICAgICAgICAgICAgICAgXG4gN1xuIVxuIDEwLzlcbiAxMDAvODFcbiA0LzNcbiAzLzJcbiA1LzNcbiA1MC8yN1xuIDIvMVxuYFxuY29uc3QgbGl1X3BlbnRhdG9uaWMgPSBgISBsaXVfcGVudC5zY2xcbiFcbkxpbnVzIExpdSdzIFwicGVudGF0b25pYyBzY2FsZVwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiA3XG4hXG4gOS84XG4gODEvNjRcbiAyNy8yMFxuIDMvMlxuIDI3LzE2XG4gMjQzLzEyOFxuIDgxLzQwXG5gXG5cbmNvbnN0IGxpdV9taW5vciA9IGAhIExJVV9NSU5vci5zY2xcbiFcbkxpbnVzIExpdSdzIEhhcm1vbmljIE1pbm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gN1xuIVxuIDEwLzlcbiA2LzVcbiA0LzNcbiA0MC8yN1xuIDgvNVxuIDUwLzI3XG4gMi8xXG5gXG5cbmNvbnN0IGxpdV9tZWxvZGljX21pbm9yID0gYCEgbGl1X21lbC5zY2xcbiFcbkxpbnVzIExpdSdzIE1lbG9kaWMgTWlub3IsIHVzZSA1IGFuZCA3IGRlc2NlbmRpbmcgYW5kIDYgYW5kIDggYXNjZW5kaW5nICAgICAgICAgXG4gOVxuIVxuIDEwLzlcbiA2LzVcbiA0LzNcbiAzLzJcbiA4MS81MFxuIDUvM1xuIDkvNVxuIDUwLzI3XG4gMi8xXG5gXG5cbmNvbnN0IHNjYWxlcyA9IFtcbiAge1xuICAgIGludGVydmFsczogJzEvMSA5LzggNS80IDQvMyAzLzIgNS8zIDE1LzggMi8xJyxcbiAgICBuYW1lOiBcImhhcm1vbmljIHNjYWxlXCIsXG4gIH0sXG4gIHtcbiAgICByb290OiA0NTAsXG4gICAgaW50ZXJ2YWxzOiAnMS8xIDkvOCA1LzQgNC8zIDMvMiA1LzMgMTUvOCAyLzEnLFxuICAgIG5hbWU6IFwiaGFybW9uaWMgc2NhbGUgQCA0NTBcIixcbiAgfSxcbiAge1xuICAgIHRldDogNSxcbiAgfSxcbiAge1xuICAgIHRldDogMTIsXG4gIH0sXG4gIHtcbiAgICB0ZXQ6IDE3LFxuICB9LFxuICB7XG4gICAgaW50ZXJ2YWxzOiAnMS8xIDgxLzgwIDMzLzMyIDIxLzIwIDE2LzE1IDEyLzExIDExLzEwIDEwLzkgOS84IDgvNyA3LzYgMzIvMjcgNi81IDExLzkgNS80IDE0LzExIDkvNyAyMS8xNiA0LzMgMjcvMjAgMTEvOCA3LzUgMTAvNyAxNi8xMSA0MC8yNyAzLzIgMzIvMjEgMTQvOSAxMS83IDgvNSAxOC8xMSA1LzMgMjcvMTYgMTIvNyA3LzQgMTYvOSA5LzUgMjAvMTEgMTEvNiAxNS84IDQwLzIxIDY0LzMzIDE2MC84MSAyLzEnLFxuICAgIG5hbWU6IFwiaGFycnkgcGFydGNoIHNjYWxlXCIsXG4gIH0sXG4gIHtcbiAgICBzY2w6IGxhbW9udGUsXG4gIH0sXG4gIHtcbiAgICBzY2w6IG1lYW50b25lLFxuICB9LFxuICB7XG4gICAgc2NsOiBtYXZpbGEsXG4gIH0sXG4gIHtcbiAgICBzY2w6IGNhcmxvc19hbHBoYSxcbiAgfSxcbiAge1xuICAgIHNjbDogY29sdW5kaSxcbiAgfSxcbiAge1xuICAgIHNjbDogc2hhcmVzLFxuICB9LFxuICB7XG4gICAgc2NsOiBzaGFyZXNfc3VtLFxuICB9LFxuICB7XG4gICAgc2NsOiBsaXVfbWFqb3IsXG4gIH0sXG4gIHtcbiAgICBzY2w6IGxpdV9taW5vcixcbiAgfSxcbiAge1xuICAgIHNjbDogbGl1X21lbG9kaWNfbWlub3IsXG4gIH0sXG4gIHtcbiAgICBzY2w6IGxpdV9wZW50YXRvbmljLFxuICB9XG5dLm1hcCggKG9wdCkgPT4gbmV3IEludG9uYXRpb24ob3B0KSApXG5cbmxldCBzY2FsZSA9IHNjYWxlc1swXVxubGV0IGhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uKCl7fVxuXG5mdW5jdGlvbiBidWlsZCAoKSB7XG4gIHNjYWxlcy5mb3JFYWNoKCAoc2NhbGUsIGkpID0+IHtcbiAgICBzY2FsZS5oZWFkaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBzY2FsZS5oZWFkaW5nLmlubmVySFRNTCA9IHNjYWxlLm5hbWVcbiAgICBzY2FsZS5oZWFkaW5nLmNsYXNzTGlzdC5hZGQoJ2hlYWRpbmcnKVxuICAgIHNjYWxlLmhlYWRpbmcuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpe1xuICAgICAgcGljayhpKVxuICAgIH0pXG4gICAgc2NhbGVfbGlzdC5hcHBlbmRDaGlsZChzY2FsZS5oZWFkaW5nKVxuICB9KVxuICBwaWNrKDApXG59XG5mdW5jdGlvbiBidWlsZF9vcHRpb25zKGVsKSB7XG4gIHNjYWxlcy5mb3JFYWNoKCAoc2NhbGUsIGkpID0+IHtcbiAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKVxuICAgIG9wdGlvbi5pbm5lckhUTUwgPSBzY2FsZS5uYW1lXG4gICAgb3B0aW9uLnZhbHVlID0gaVxuICAgIGVsLmFwcGVuZENoaWxkKG9wdGlvbilcbiAgfSlcbiAgZWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbihlKXtcbiAgICBwaWNrKGUudGFyZ2V0LnZhbHVlKVxuICB9KVxuICBwaWNrKDApXG59XG5cbmZ1bmN0aW9uIHBpY2sgKGkpIHtcbiAgaWYgKHNjYWxlKSB7XG4gICAgc2NhbGUuaGVhZGluZyAmJiBzY2FsZS5oZWFkaW5nLmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdGVkJylcbiAgfVxuICBzY2FsZSA9IHNjYWxlc1tpXVxuICBzY2FsZS5oZWFkaW5nICYmIHNjYWxlLmhlYWRpbmcuY2xhc3NMaXN0LmFkZCgnc2VsZWN0ZWQnKVxuXHRoYW5kbGVDaGFuZ2Uoc2NhbGUpXG59XG5cbmZ1bmN0aW9uIGN1cnJlbnQgKCkge1xuICByZXR1cm4gc2NhbGVcbn1cblxuZnVuY3Rpb24gb25DaGFuZ2UgKGZuKSB7XG5cdGhhbmRsZUNoYW5nZSA9IGZuXG59XG5cbmZ1bmN0aW9uIG5hbWVzICgpIHtcblx0cmV0dXJuIHNjYWxlcy5tYXAoIHNjYWxlID0+IHNjYWxlLm5hbWUgKVxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IHsgc2NhbGVzLCBjdXJyZW50LCBidWlsZCwgYnVpbGRfb3B0aW9ucywgcGljaywgbmFtZXMsIG9uQ2hhbmdlIH1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9saWIvc2NhbGVzLmpzIiwiaW1wb3J0IE5leHVzIGZyb20gJ25leHVzdWknXG5cbmV4cG9ydCBjb25zdCBueCA9IHdpbmRvdy5ueCA9IHt9XG5cbi8qIHVpIC0gdXBkYXRlIGFuIGludC9mbG9hdCB2YWx1ZSAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlX3ZhbHVlX29uX2NoYW5nZShlbCwgaWQsIGlzX2ludCwgZm4pIHtcbiAgY29uc3QgbGFiZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGlkICsgJyArIC52YWwnKVxuICBjb25zdCB1cGRhdGUgPSB2ID0+IHtcbiAgICBsYWJlbC5pbm5lckhUTUwgPSBpc19pbnQgPyBwYXJzZUludCh2KSA6IHYudG9GaXhlZCgyKVxuICAgIGZuICYmIGZuKHYpXG4gIH1cbiAgZWwub24oJ2NoYW5nZScsIHVwZGF0ZSlcbiAgdXBkYXRlKGVsLnZhbHVlKVxuICBlbC51cGRhdGUgPSB1cGRhdGVcbn1cblxuLyogdWkgLSB1cGRhdGUgYSByYWRpbyBidXR0b24gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZV9yYWRpb192YWx1ZV9vbl9jaGFuZ2UoZWwsIGlkLCB2YWx1ZXMsIGZuKSB7XG4gIGxldCBvbGRfdiA9IGVsLmFjdGl2ZVxuICBjb25zdCBsYWJlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoaWQgKyAnICsgLnZhbCcpXG4gIGNvbnN0IHVwZGF0ZSA9IHYgPT4ge1xuICAgIGlmICh2ID09PSAtMSkge1xuICAgICAgdiA9IGVsLmFjdGl2ZSA9IG9sZF92XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZF92ID0gdlxuICAgIH1cbiAgICBsYWJlbC5pbm5lckhUTUwgPSB2YWx1ZXNbdl1bMV1cbiAgICBmbiAmJiBmbih2KVxuICB9XG4gIGVsLm9uKCdjaGFuZ2UnLCB1cGRhdGUpXG4gIHVwZGF0ZShlbC5hY3RpdmUpXG4gIGVsLnVwZGF0ZSA9IHVwZGF0ZVxufVxuXG4vKiB1aSAtIGJpbmQvYnVpbGQgYSBzZWxlY3QgZHJvcGRvd24gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkX29wdGlvbnMoZWwsIGxpc3RzLCBmbikge1xuICBPYmplY3Qua2V5cyhsaXN0cykuZm9yRWFjaChrZXkgPT4ge1xuICAgIGNvbnN0IGxpc3QgPSBsaXN0c1trZXldXG4gICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJylcbiAgICBvcHRpb24uaW5uZXJIVE1MID0gbGlzdC5uYW1lXG4gICAgb3B0aW9uLnZhbHVlID0ga2V5XG4gICAgZWwuYXBwZW5kQ2hpbGQob3B0aW9uKVxuICB9KVxuICBlbC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uKGUpe1xuICAgIGZuKGUudGFyZ2V0LnZhbHVlKVxuICB9KVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2xpYi91aS5qcyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2lzSXRlcmFibGUyID0gcmVxdWlyZShcIi4uL2NvcmUtanMvaXMtaXRlcmFibGVcIik7XG5cbnZhciBfaXNJdGVyYWJsZTMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pc0l0ZXJhYmxlMik7XG5cbnZhciBfZ2V0SXRlcmF0b3IyID0gcmVxdWlyZShcIi4uL2NvcmUtanMvZ2V0LWl0ZXJhdG9yXCIpO1xuXG52YXIgX2dldEl0ZXJhdG9yMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2dldEl0ZXJhdG9yMik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gc2xpY2VJdGVyYXRvcihhcnIsIGkpIHtcbiAgICB2YXIgX2FyciA9IFtdO1xuICAgIHZhciBfbiA9IHRydWU7XG4gICAgdmFyIF9kID0gZmFsc2U7XG4gICAgdmFyIF9lID0gdW5kZWZpbmVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIF9pID0gKDAsIF9nZXRJdGVyYXRvcjMuZGVmYXVsdCkoYXJyKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHtcbiAgICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBfZCA9IHRydWU7XG4gICAgICBfZSA9IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSkgX2lbXCJyZXR1cm5cIl0oKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIF9hcnI7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgIHJldHVybiBhcnI7XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzSXRlcmFibGUzLmRlZmF1bHQpKE9iamVjdChhcnIpKSkge1xuICAgICAgcmV0dXJuIHNsaWNlSXRlcmF0b3IoYXJyLCBpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIik7XG4gICAgfVxuICB9O1xufSgpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9iYWJlbC1ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheS5qc1xuLy8gbW9kdWxlIGlkID0gNTVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiTmV4dXNcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wiTmV4dXNcIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fSxcbi8qKioqKiovIFx0XHRcdGlkOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGxvYWRlZDogZmFsc2Vcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfaW50ZXJvcFJlcXVpcmUgPSBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmpbXCJkZWZhdWx0XCJdIDogb2JqOyB9O1xuXHRcblx0dmFyIE5leHVzVUkgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXygxKSk7XG5cdFxuXHRtb2R1bGUuZXhwb3J0cyA9IE5leHVzVUk7XG5cbi8qKiovIH0pLFxuLyogMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH07XG5cdFxuXHR2YXIgX2ludGVyb3BSZXF1aXJlID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqW1wiZGVmYXVsdFwiXSA6IG9iajsgfTtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdGV4cG9ydHMuY29sb3JzID0gY29sb3JzO1xuXHRleHBvcnRzLmNvbnRleHQgPSBjb250ZXh0O1xuXHRleHBvcnRzLmNsb2NrID0gY2xvY2s7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuXHQgIHZhbHVlOiB0cnVlXG5cdH0pO1xuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBJbnRlcmZhY2VzID0gX2ludGVyb3BSZXF1aXJlKF9fd2VicGFja19yZXF1aXJlX18oMikpO1xuXHRcblx0dmFyIG1hdGggPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXyg1KSk7XG5cdFxuXHR2YXIgUmFjayA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KSk7XG5cdFxuXHR2YXIgVHVuZSA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKSk7XG5cdFxuXHR2YXIgVHJhbnNmb3JtID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX193ZWJwYWNrX3JlcXVpcmVfXygzOSkpO1xuXHRcblx0dmFyIENvdW50ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KTtcblx0dmFyIFJhZGlvID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MSk7XG5cdHZhciBEcnVuayA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpO1xuXHR2YXIgU2VxdWVuY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcblx0dmFyIE1hdHJpeCA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpO1xuXHRcblx0dmFyIFdBQUNsb2NrID0gX2ludGVyb3BSZXF1aXJlKF9fd2VicGFja19yZXF1aXJlX18oNDIpKTtcblx0XG5cdHZhciBJbnRlcnZhbCA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDQ1KSk7XG5cdFxuXHQvKipcblx0TmV4dXNVSSA9PiBjcmVhdGVkIGFzIE5leHVzXG5cdCovXG5cdFxuXHR2YXIgTmV4dXNVSSA9IChmdW5jdGlvbiAoKSB7XG5cdCAgZnVuY3Rpb24gTmV4dXNVSShjb250ZXh0KSB7XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTmV4dXNVSSk7XG5cdFxuXHQgICAgZm9yICh2YXIga2V5IGluIEludGVyZmFjZXMpIHtcblx0ICAgICAgdGhpc1trZXldID0gSW50ZXJmYWNlc1trZXldO1xuXHQgICAgfVxuXHRcblx0ICAgIGZvciAodmFyIGtleSBpbiBtYXRoKSB7XG5cdCAgICAgIHRoaXNba2V5XSA9IG1hdGhba2V5XTtcblx0ICAgIH1cblx0XG5cdCAgICB2YXIgQ29yZSA9IHtcblx0ICAgICAgUmFjazogUmFja1xuXHQgICAgfTtcblx0XG5cdCAgICB2YXIgTW9kZWxzID0ge1xuXHQgICAgICBDb3VudGVyOiBDb3VudGVyLFxuXHQgICAgICBSYWRpbzogUmFkaW8sXG5cdCAgICAgIERydW5rOiBEcnVuayxcblx0ICAgICAgU2VxdWVuY2U6IFNlcXVlbmNlLFxuXHQgICAgICBNYXRyaXg6IE1hdHJpeFxuXHQgICAgfTtcblx0XG5cdCAgICBmb3IgKHZhciBrZXkgaW4gTW9kZWxzKSB7XG5cdCAgICAgIHRoaXNba2V5XSA9IE1vZGVsc1trZXldO1xuXHQgICAgfVxuXHRcblx0ICAgIGZvciAodmFyIGtleSBpbiBDb3JlKSB7XG5cdCAgICAgIHRoaXNba2V5XSA9IENvcmVba2V5XTtcblx0ICAgIH1cblx0XG5cdCAgICB2YXIgRGVmYXVsdENvbnRleHQgPSB3aW5kb3cuQXVkaW9Db250ZXh0IHx8IHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQ7XG5cdCAgICB0aGlzLl9jb250ZXh0ID0gY29udGV4dCB8fCBuZXcgRGVmYXVsdENvbnRleHQoKTtcblx0XG5cdCAgICB0aGlzLnR1bmUgPSBuZXcgVHVuZSgpO1xuXHQgICAgdGhpcy5ub3RlID0gdGhpcy50dW5lLm5vdGUuYmluZCh0aGlzLnR1bmUpO1xuXHRcblx0ICAgIHRoaXMuY2xvY2sgPSBuZXcgV0FBQ2xvY2sodGhpcy5fY29udGV4dCk7XG5cdCAgICB0aGlzLmNsb2NrLnN0YXJ0KCk7XG5cdCAgICB0aGlzLkludGVydmFsID0gSW50ZXJ2YWw7XG5cdFxuXHQgICAgdGhpcy5jb2xvcnMgPSB7XG5cdCAgICAgIGFjY2VudDogXCIjMmJiXCIsXG5cdCAgICAgIGZpbGw6IFwiI2VlZVwiLFxuXHQgICAgICBsaWdodDogXCIjZmZmXCIsXG5cdCAgICAgIGRhcms6IFwiIzMzM1wiLFxuXHQgICAgICBtZWRpdW1MaWdodDogXCIjY2NjXCIsXG5cdCAgICAgIG1lZGl1bURhcms6IFwiIzY2NlwiXG5cdCAgICB9O1xuXHRcblx0ICAgIHRoaXMudHJhbnNmb3JtID0gVHJhbnNmb3JtO1xuXHQgICAgdGhpcy5hZGQgPSBUcmFuc2Zvcm0uYWRkO1xuXHRcblx0ICAgIHRoaXMuQWRkID0ge307XG5cdCAgICBmb3IgKHZhciBrZXkgaW4gSW50ZXJmYWNlcykge1xuXHQgICAgICB0aGlzLkFkZFtrZXldID0gVHJhbnNmb3JtLmFkZC5iaW5kKHRoaXMsIGtleSk7XG5cdCAgICB9XG5cdFxuXHQgICAgLyogY3JlYXRlIGRlZmF1bHQgY29tcG9uZW50IHNpemUgKi9cblx0ICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cblx0ICAgIHZhciBleGlzdGluZ1N0eWxlc2hlZXRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzdHlsZVwiKTtcblx0ICAgIHZhciBkZWZhdWx0U2l6ZURlY2xhcmF0aW9uID0gXCJbbmV4dXMtdWlde2hlaWdodDo1MDAwcHg7d2lkdGg6NTAwMHB4fVwiO1xuXHQgICAgdmFyIGRlZmF1bHRTdHlsZU5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cdCAgICBkZWZhdWx0U3R5bGVOb2RlLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cdCAgICBkZWZhdWx0U3R5bGVOb2RlLmlubmVySFRNTCA9IGRlZmF1bHRTaXplRGVjbGFyYXRpb247XG5cdCAgICBpZiAoZXhpc3RpbmdTdHlsZXNoZWV0cy5sZW5ndGggPiAwKSB7XG5cdCAgICAgIHZhciBwYXJlbnQgPSBleGlzdGluZ1N0eWxlc2hlZXRzWzBdLnBhcmVudE5vZGU7XG5cdCAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoZGVmYXVsdFN0eWxlTm9kZSwgZXhpc3RpbmdTdHlsZXNoZWV0c1swXSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICBkb2N1bWVudC53cml0ZShcIjxzdHlsZT5cIiArIGRlZmF1bHRTaXplRGVjbGFyYXRpb24gKyBcIjwvc3R5bGU+XCIpO1xuXHQgICAgfVxuXHQgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblx0ICB9XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhOZXh1c1VJLCB7XG5cdCAgICBjb250ZXh0OiB7XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0O1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uIChjdHgpIHtcblx0ICAgICAgICB0aGlzLmNsb2NrLnN0b3AoKTtcblx0ICAgICAgICB0aGlzLl9jb250ZXh0ID0gY3R4O1xuXHQgICAgICAgIHRoaXMuY2xvY2sgPSBuZXcgV0FBQ2xvY2sodGhpcy5jb250ZXh0KTtcblx0ICAgICAgICB0aGlzLmNsb2NrLnN0YXJ0KCk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIE5leHVzVUk7XG5cdH0pKCk7XG5cdFxuXHR2YXIgTmV4dXMgPSBuZXcgTmV4dXNVSSgpO1xuXHRcblx0ZnVuY3Rpb24gY29sb3JzKCkge1xuXHQgIHJldHVybiBOZXh1cy5jb2xvcnM7XG5cdH1cblx0XG5cdGZ1bmN0aW9uIGNvbnRleHQoKSB7XG5cdCAgcmV0dXJuIE5leHVzLmNvbnRleHQ7XG5cdH1cblx0XG5cdGZ1bmN0aW9uIGNsb2NrKCkge1xuXHQgIHJldHVybiBOZXh1cy5jbG9jaztcblx0fVxuXHRcblx0ZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBOZXh1cztcblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHRtb2R1bGUuZXhwb3J0cyA9IHtcblx0ICBQb3NpdGlvbjogX193ZWJwYWNrX3JlcXVpcmVfXygzKSxcblx0ICBTbGlkZXI6IF9fd2VicGFja19yZXF1aXJlX18oMTQpLFxuXHQgIFRvZ2dsZTogX193ZWJwYWNrX3JlcXVpcmVfXygxNSksXG5cdCAgLyogIFJhbmdlOiByZXF1aXJlKCcuL3Jhbmdlc2xpZGVyJyksXG5cdCAgICBXYXZlZm9ybTogcmVxdWlyZSgnLi93YXZlZm9ybScpLCAqL1xuXHQgIEJ1dHRvbjogX193ZWJwYWNrX3JlcXVpcmVfXygxNiksXG5cdCAgVGV4dEJ1dHRvbjogX193ZWJwYWNrX3JlcXVpcmVfXygxOCksXG5cdCAgUmFkaW9CdXR0b246IF9fd2VicGFja19yZXF1aXJlX18oMTkpLFxuXHQgIE51bWJlcjogX193ZWJwYWNrX3JlcXVpcmVfXygyMCksXG5cdCAgU2VsZWN0OiBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKSxcblx0ICBEaWFsOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKSxcblx0ICBQaWFubzogX193ZWJwYWNrX3JlcXVpcmVfXygyMyksXG5cdCAgU2VxdWVuY2VyOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KSxcblx0ICBQYW4yRDogX193ZWJwYWNrX3JlcXVpcmVfXygyOSksXG5cdCAgVGlsdDogX193ZWJwYWNrX3JlcXVpcmVfXygzMCksXG5cdCAgTXVsdGlzbGlkZXI6IF9fd2VicGFja19yZXF1aXJlX18oMzEpLFxuXHQgIFBhbjogX193ZWJwYWNrX3JlcXVpcmVfXygzMyksXG5cdCAgRW52ZWxvcGU6IF9fd2VicGFja19yZXF1aXJlX18oMzQpLFxuXHQgIFNwZWN0cm9ncmFtOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDM1KSxcblx0ICBNZXRlcjogX193ZWJwYWNrX3JlcXVpcmVfXygzNiksXG5cdCAgT3NjaWxsb3Njb3BlOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KVxuXHR9O1xuXG4vKioqLyB9KSxcbi8qIDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQgPSBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfTtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7IH0gfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gZGVzYyAmJiBkZXNjLndyaXRhYmxlKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfTtcblx0XG5cdHZhciBfaW5oZXJpdHMgPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBzdmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXHR2YXIgSW50ZXJmYWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcblx0dmFyIFN0ZXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcblx0XG5cdHZhciBJbnRlcmFjdGlvbiA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9fd2VicGFja19yZXF1aXJlX18oMTIpKTtcblx0XG5cdC8qKlxuXHQqIFBvc2l0aW9uXG5cdCpcblx0KiBAZGVzY3JpcHRpb24gVHdvLWRpbWVuc2lvbmFsIHRvdWNoIHNsaWRlci5cblx0KlxuXHQqIEBkZW1vIDxzcGFuIG5leHVzLXVpPVwicG9zaXRpb25cIj48L3NwYW4+XG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciBwb3NpdGlvbiA9IG5ldyBOZXh1cy5Qb3NpdGlvbignI3RhcmdldCcpXG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciBwb3NpdGlvbiA9IG5ldyBOZXh1cy5Qb3NpdGlvbignI3RhcmdldCcse1xuXHQqICAgJ3NpemUnOiBbMjAwLDIwMF0sXG5cdCogICAnbW9kZSc6ICdhYnNvbHV0ZScsICAvLyBcImFic29sdXRlXCIgb3IgXCJyZWxhdGl2ZVwiXG5cdCogICAneCc6IDAuNSwgIC8vIGluaXRpYWwgeCB2YWx1ZVxuXHQqICAgJ21pblgnOiAwLFxuXHQqICAgJ21heFgnOiAxLFxuXHQqICAgJ3N0ZXBYJzogMCxcblx0KiAgICd5JzogMC41LCAgLy8gaW5pdGlhbCB5IHZhbHVlXG5cdCogICAnbWluWSc6IDAsXG5cdCogICAnbWF4WSc6IDEsXG5cdCogICAnc3RlcFknOiAwXG5cdCogfSlcblx0KlxuXHQqIEBvdXRwdXRcblx0KiBjaGFuZ2Vcblx0KiBGaXJlcyBhbnkgdGltZSB0aGUgaW50ZXJmYWNlJ3MgdmFsdWUgY2hhbmdlcy4gPGJyPlxuXHQqIFRoZSBldmVudCBkYXRhIGlzIGFuIG9iamVjdCB3aXRoIHggYW5kIHkgcHJvcGVydGllcyBjb250YWluaW5nIHRoZSB4IGFuZCB5IHZhbHVlcyBvZiB0aGUgaW50ZXJmYWNlLlxuXHQqXG5cdCogQG91dHB1dGV4YW1wbGVcblx0KiBwb3NpdGlvbi5vbignY2hhbmdlJyxmdW5jdGlvbih2KSB7XG5cdCogICBjb25zb2xlLmxvZyh2KTtcblx0KiB9KVxuXHQqXG5cdCpcblx0Ki9cblx0XG5cdHZhciBQb3NpdGlvbiA9IChmdW5jdGlvbiAoX0ludGVyZmFjZSkge1xuXHQgIGZ1bmN0aW9uIFBvc2l0aW9uKCkge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBvc2l0aW9uKTtcblx0XG5cdCAgICB2YXIgb3B0aW9ucyA9IFtcInZhbHVlXCJdO1xuXHRcblx0ICAgIHZhciBkZWZhdWx0cyA9IHtcblx0ICAgICAgc2l6ZTogWzIwMCwgMjAwXSxcblx0ICAgICAgbW9kZTogXCJhYnNvbHV0ZVwiLFxuXHQgICAgICBtaW5YOiAwLFxuXHQgICAgICBtYXhYOiAxLFxuXHQgICAgICBzdGVwWDogMCxcblx0ICAgICAgeDogMC41LFxuXHQgICAgICBtaW5ZOiAwLFxuXHQgICAgICBtYXhZOiAxLFxuXHQgICAgICBzdGVwWTogMCxcblx0ICAgICAgeTogMC41XG5cdCAgICB9O1xuXHRcblx0ICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKFBvc2l0aW9uLnByb3RvdHlwZSksIFwiY29uc3RydWN0b3JcIiwgdGhpcykuY2FsbCh0aGlzLCBhcmd1bWVudHMsIG9wdGlvbnMsIGRlZmF1bHRzKTtcblx0XG5cdCAgICB0aGlzLl94ID0gbmV3IFN0ZXAodGhpcy5zZXR0aW5ncy5taW5YLCB0aGlzLnNldHRpbmdzLm1heFgsIHRoaXMuc2V0dGluZ3Muc3RlcFgsIHRoaXMuc2V0dGluZ3MueCk7XG5cdCAgICB0aGlzLl95ID0gbmV3IFN0ZXAodGhpcy5zZXR0aW5ncy5taW5ZLCB0aGlzLnNldHRpbmdzLm1heFksIHRoaXMuc2V0dGluZ3Muc3RlcFksIHRoaXMuc2V0dGluZ3MueSk7XG5cdFxuXHQgICAgdGhpcy5wb3NpdGlvbiA9IHtcblx0ICAgICAgeDogbmV3IEludGVyYWN0aW9uLkhhbmRsZSh0aGlzLnNldHRpbmdzLm1vZGUsIFwiaG9yaXpvbnRhbFwiLCBbMCwgdGhpcy53aWR0aF0sIFt0aGlzLmhlaWdodCwgMF0pLFxuXHQgICAgICB5OiBuZXcgSW50ZXJhY3Rpb24uSGFuZGxlKHRoaXMuc2V0dGluZ3MubW9kZSwgXCJ2ZXJ0aWNhbFwiLCBbMCwgdGhpcy53aWR0aF0sIFt0aGlzLmhlaWdodCwgMF0pXG5cdCAgICB9O1xuXHQgICAgdGhpcy5wb3NpdGlvbi54LnZhbHVlID0gdGhpcy5feC5ub3JtYWxpemVkO1xuXHQgICAgdGhpcy5wb3NpdGlvbi55LnZhbHVlID0gdGhpcy5feS5ub3JtYWxpemVkO1xuXHRcblx0ICAgIHRoaXMuaW5pdCgpO1xuXHQgICAgdGhpcy5yZW5kZXIoKTtcblx0ICB9XG5cdFxuXHQgIF9pbmhlcml0cyhQb3NpdGlvbiwgX0ludGVyZmFjZSk7XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhQb3NpdGlvbiwge1xuXHQgICAgYnVpbGRJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkSW50ZXJmYWNlKCkge1xuXHRcblx0ICAgICAgICB0aGlzLmtub2IgPSBzdmcuY3JlYXRlKFwiY2lyY2xlXCIpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmtub2IpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2l6ZUludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc2l6ZUludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvbi54LnJlc2l6ZShbMCwgdGhpcy53aWR0aF0sIFt0aGlzLmhlaWdodCwgMF0pO1xuXHQgICAgICAgIHRoaXMucG9zaXRpb24ueS5yZXNpemUoWzAsIHRoaXMud2lkdGhdLCBbdGhpcy5oZWlnaHQsIDBdKTtcblx0XG5cdCAgICAgICAgdGhpcy5fbWluRGltZW5zaW9uID0gTWF0aC5taW4odGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXHRcblx0ICAgICAgICB0aGlzLmtub2JSYWRpdXMgPSB7XG5cdCAgICAgICAgICBvZmY6IH4gfih0aGlzLl9taW5EaW1lbnNpb24gLyAxMDApICogNSArIDUgfTtcblx0ICAgICAgICB0aGlzLmtub2JSYWRpdXMub24gPSB0aGlzLmtub2JSYWRpdXMub2ZmICogMjtcblx0XG5cdCAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImN4XCIsIHRoaXMud2lkdGggLyAyKTtcblx0ICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiY3lcIiwgdGhpcy5oZWlnaHQgLyAyKTtcblx0ICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiclwiLCB0aGlzLmtub2JSYWRpdXMub2ZmKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNvbG9ySW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb2xvckludGVyZmFjZSgpIHtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5jb2xvcnMuZmlsbDtcblx0ICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmNvbG9ycy5hY2NlbnQpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVuZGVyOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY2xpY2tlZCkge1xuXHQgICAgICAgICAgLy8gIHRoaXMua25vYlJhZGl1cyA9IDMwO1xuXHQgICAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcInJcIiwgdGhpcy5rbm9iUmFkaXVzLm9uKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgLy8gIHRoaXMua25vYlJhZGl1cyA9IDE1O1xuXHQgICAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcInJcIiwgdGhpcy5rbm9iUmFkaXVzLm9mZik7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICB0aGlzLmtub2JDb29yZGluYXRlcyA9IHtcblx0ICAgICAgICAgIHg6IHRoaXMuX3gubm9ybWFsaXplZCAqIHRoaXMud2lkdGgsXG5cdCAgICAgICAgICB5OiB0aGlzLmhlaWdodCAtIHRoaXMuX3kubm9ybWFsaXplZCAqIHRoaXMuaGVpZ2h0XG5cdCAgICAgICAgfTtcblx0XG5cdCAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImN4XCIsIHRoaXMua25vYkNvb3JkaW5hdGVzLngpO1xuXHQgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJjeVwiLCB0aGlzLmtub2JDb29yZGluYXRlcy55KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNsaWNrOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGljaygpIHtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uLnguYW5jaG9yID0gdGhpcy5tb3VzZTtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uLnkuYW5jaG9yID0gdGhpcy5tb3VzZTtcblx0ICAgICAgICB0aGlzLm1vdmUoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1vdmU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIG1vdmUoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY2xpY2tlZCkge1xuXHQgICAgICAgICAgdGhpcy5wb3NpdGlvbi54LnVwZGF0ZSh0aGlzLm1vdXNlKTtcblx0ICAgICAgICAgIHRoaXMucG9zaXRpb24ueS51cGRhdGUodGhpcy5tb3VzZSk7XG5cdCAgICAgICAgICB0aGlzLl94LnVwZGF0ZU5vcm1hbCh0aGlzLnBvc2l0aW9uLngudmFsdWUpO1xuXHQgICAgICAgICAgdGhpcy5feS51cGRhdGVOb3JtYWwodGhpcy5wb3NpdGlvbi55LnZhbHVlKTtcblx0ICAgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB7XG5cdCAgICAgICAgICAgIHg6IHRoaXMuX3gudmFsdWUsXG5cdCAgICAgICAgICAgIHk6IHRoaXMuX3kudmFsdWVcblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByZWxlYXNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWxlYXNlKCkge1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICB4OiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgKiBUaGUgaW50ZXJmYWNlJ3MgeCB2YWx1ZS4gV2hlbiBzZXQsIGl0IHdpbGwgYXV0b21hdGljYWxseSBhZGp1c3QgdG8gZml0IG1pbi9tYXgvc3RlcCBzZXR0aW5ncyBvZiB0aGUgaW50ZXJmYWNlLlxuXHQgICAgICAqIEB0eXBlIHtvYmplY3R9XG5cdCAgICAgICogQGV4YW1wbGUgcG9zaXRpb24ueCA9IDAuNTtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl94LnZhbHVlO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIHRoaXMuX3gudXBkYXRlKHZhbHVlKTtcblx0ICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwge1xuXHQgICAgICAgICAgeDogdGhpcy5feC52YWx1ZSxcblx0ICAgICAgICAgIHk6IHRoaXMuX3kudmFsdWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgeToge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgICogVGhlIGludGVyZmFjZSdzIHkgdmFsdWVzLiBXaGVuIHNldCwgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGFkanVzdCB0byBmaXQgbWluL21heC9zdGVwIHNldHRpbmdzIG9mIHRoZSBpbnRlcmZhY2UuXG5cdCAgICAgICogQHR5cGUge29iamVjdH1cblx0ICAgICAgKiBAZXhhbXBsZSBwb3NpdGlvbi54ID0gMC41O1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3kudmFsdWU7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgdGhpcy5feS51cGRhdGUodmFsdWUpO1xuXHQgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB7XG5cdCAgICAgICAgICB4OiB0aGlzLl94LnZhbHVlLFxuXHQgICAgICAgICAgeTogdGhpcy5feS52YWx1ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBub3JtYWxpemVkOiB7XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICB4OiB0aGlzLl94Lm5vcm1hbGl6ZWQsXG5cdCAgICAgICAgICB5OiB0aGlzLl95Lm5vcm1hbGl6ZWRcblx0ICAgICAgICB9O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbWluWDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgICogVGhlIGxvd2VyIGxpbWl0IG9mIHZhbHVlIG9uIHRoZSB4IGF4aXNcblx0ICAgICAgKiBAdHlwZSB7b2JqZWN0fVxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3gubWluO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5feC5taW4gPSB2O1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtaW5ZOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgKiBUaGUgbG93ZXIgbGltaXQgb2YgdmFsdWUgb24gdGhlIHkgYXhpc1xuXHQgICAgICAqIEB0eXBlIHtvYmplY3R9XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5feS5taW47XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLl95Lm1pbiA9IHY7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1heFg6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICAqIFRoZSB1cHBlciBsaW1pdCBvZiB2YWx1ZSBvbiB0aGUgeCBheGlzXG5cdCAgICAgICogQHR5cGUge29iamVjdH1cblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl94Lm1heDtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuXHQgICAgICAgIHRoaXMuX3gubWF4ID0gdjtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbWF4WToge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgICogVGhlIHVwcGVyIGxpbWl0IG9mIHZhbHVlIG9uIHRoZSB5IGF4aXNcblx0ICAgICAgKiBAdHlwZSB7b2JqZWN0fVxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3kubWF4O1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5feS5tYXggPSB2O1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzdGVwWDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgICogVGhlIGluY3JlbWVudGFsIHN0ZXAgb2YgdmFsdWVzIG9uIHRoZSB4IGF4aXNcblx0ICAgICAgKiBAdHlwZSB7b2JqZWN0fVxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3guc3RlcDtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuXHQgICAgICAgIHRoaXMuX3guc3RlcCA9IHY7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHN0ZXBZOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgKiBUaGUgaW5jcmVtZW50YWwgc3RlcCBvZiB2YWx1ZXMgb24gdGhlIHkgYXhpc1xuXHQgICAgICAqIEB0eXBlIHtvYmplY3R9XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5feS5zdGVwO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5feS5zdGVwID0gdjtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbW9kZToge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIEFic29sdXRlIG1vZGUgKHBvc2l0aW9uJ3MgdmFsdWUganVtcHMgdG8gbW91c2UgY2xpY2sgcG9zaXRpb24pIG9yIHJlbGF0aXZlIG1vZGUgKG1vdXNlIGRyYWcgY2hhbmdlcyB2YWx1ZSByZWxhdGl2ZSB0byBpdHMgY3VycmVudCBwb3NpdGlvbikuIERlZmF1bHQ6IFwiYWJzb2x1dGVcIi5cblx0ICAgICAgQHR5cGUge3N0cmluZ31cblx0ICAgICAgQGV4YW1wbGUgcG9zaXRpb24ubW9kZSA9IFwicmVsYXRpdmVcIjtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLngubW9kZTtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuXHQgICAgICAgIHRoaXMucG9zaXRpb24ueC5tb2RlID0gdjtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uLnkubW9kZSA9IHY7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIFBvc2l0aW9uO1xuXHR9KShJbnRlcmZhY2UpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBQb3NpdGlvbjtcblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgbWF0aCA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cdFxuXHRtb2R1bGUuZXhwb3J0cyA9IHtcblx0XG5cdCAgY3JlYXRlOiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHR5cGUpO1xuXHQgIH0sXG5cdFxuXHQgIGFyYzogZnVuY3Rpb24gKHgsIHksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUpIHtcblx0XG5cdCAgICB2YXIgc3RhcnQgPSBtYXRoLnRvQ2FydGVzaWFuKHJhZGl1cywgZW5kQW5nbGUpO1xuXHQgICAgdmFyIGVuZCA9IG1hdGgudG9DYXJ0ZXNpYW4ocmFkaXVzLCBzdGFydEFuZ2xlKTtcblx0XG5cdCAgICB2YXIgbGFyZ2VBcmNGbGFnID0gZW5kQW5nbGUgLSBzdGFydEFuZ2xlIDw9IDE4MCA/IFwiMFwiIDogXCIxXCI7XG5cdFxuXHQgICAgdmFyIGQgPSBbXCJNXCIsIHN0YXJ0LnggKyB4LCBzdGFydC55ICsgeSwgXCJBXCIsIHJhZGl1cywgcmFkaXVzLCAwLCBsYXJnZUFyY0ZsYWcsIDAsIGVuZC54ICsgeCwgZW5kLnkgKyB5XS5qb2luKFwiIFwiKTtcblx0XG5cdCAgICByZXR1cm4gZDtcblx0ICB9LFxuXHRcblx0ICByYWRpYWxHcmFkaWVudDogZnVuY3Rpb24gKGRlZnMsIG51bWJlck9mU3RvcHMpIHtcblx0XG5cdCAgICB2YXIgaWQgPSBcImdyYWRpZW50XCIgKyBtYXRoLnJpKDEwMDAwMDAwMDAwMCk7XG5cdCAgICB2YXIgc3RvcHMgPSBbXTtcblx0XG5cdCAgICB2YXIgZ3JhZGllbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInJhZGlhbEdyYWRpZW50XCIpO1xuXHQgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlKFwiaWRcIiwgaWQpO1xuXHQgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlKFwiY3hcIiwgXCI1MCVcIik7XG5cdCAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGUoXCJjeVwiLCBcIjUwJVwiKTtcblx0ICAgIGdyYWRpZW50LnNldEF0dHJpYnV0ZShcInJcIiwgXCI1MCVcIik7XG5cdFxuXHQgICAgZGVmcy5hcHBlbmRDaGlsZChncmFkaWVudCk7XG5cdFxuXHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZlN0b3BzOyBpKyspIHtcblx0ICAgICAgdmFyIF9zdG9wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJzdG9wXCIpO1xuXHQgICAgICBfc3RvcC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBcInN0b3BcIiArIGkpO1xuXHQgICAgICAvL3N0b3Auc2V0QXR0cmlidXRlKCdvZmZzZXQnLCAnNzAlJyk7XG5cdCAgICAgIC8vc3RvcC5zZXRBdHRyaWJ1dGUoJ3N0b3AtY29sb3InLCAnV2hpdGUnKTtcblx0ICAgICAgZ3JhZGllbnQuYXBwZW5kQ2hpbGQoX3N0b3ApO1xuXHQgICAgICBzdG9wcy5wdXNoKF9zdG9wKTtcblx0ICAgIH1cblx0XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICBpZDogaWQsXG5cdCAgICAgIHN0b3BzOiBzdG9wcyxcblx0ICAgICAgZWxlbWVudDogZ3JhZGllbnRcblx0ICAgIH07XG5cdCAgfVxuXHRcblx0fTtcblxuLyoqKi8gfSksXG4vKiA1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHQvKipcblx0ICogTGltaXQgYSBudW1iZXIgdG8gd2l0aGluIGEgbWluaW11bSBhbmQgbWF4aW11bVxuXHQgKiBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlIElucHV0IHZhbHVlXG5cdCAqIEBwYXJhbSAge251bWJlcn0gbWluICAgTG93ZXIgbGltaXRcblx0ICogQHBhcmFtICB7bnVtYmVyfSBtYXggICBVcHBlciBsaW1pdFxuXHQgKiBAcmV0dXJuIHtudW1iZXJ9ICAgICAgIFRoZSBpbnB1dCB2YWx1ZSBjb25zdHJhaW5lZCB3aXRoaW4gdGhlIGxvd2VyIGFuZCB1cHBlciBsaW1pdHNcblx0ICogQGV4YW1wbGVcblx0ICogTmV4dXMuY2xpcCgxMSwwLDEwKSAgIC8vIHJldHVybnMgMTBcblx0ICogTmV4dXMuY2xpcCgtMSwwLDEwKSAgIC8vIHJldHVybnMgMFxuXHQgKiBOZXh1cy5jbGlwKDUsMCwxMCkgICAgLy8gcmV0dXJucyA1XG5cdCAqL1xuXHRcblx0ZXhwb3J0cy5jbGlwID0gZnVuY3Rpb24gKHZhbHVlLCBtaW4sIG1heCkge1xuXHQgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh2YWx1ZSwgbWluKSwgbWF4KTtcblx0fTtcblx0XG5cdGV4cG9ydHMubm9ybWFsaXplID0gZnVuY3Rpb24gKHZhbHVlLCBtaW4sIG1heCkge1xuXHQgIHJldHVybiAodmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbik7XG5cdH07XG5cdFxuXHQvKipcblx0ICogU2NhbGUgYSB2YWx1ZSBmcm9tIG9uZSByYW5nZSB0byBhbm90aGVyIHJhbmdlLlxuXHQgKiBAcGFyYW0gIHtudW1iZXJ9IGluTnVtICBJbnB1dCB2YWx1ZVxuXHQgKiBAcGFyYW0gIHtudW1iZXJ9IGluTWluICBJbnB1dCByYW5nZSBtaW5pbXVtXG5cdCAqIEBwYXJhbSAge251bWJlcn0gaW5NYXggIElucHV0IHJhbmdlIG1heGltdW1cblx0ICogQHBhcmFtICB7bnVtYmVyfSBvdXRNaW4gT3V0cHV0IHJhbmdlIG1pbmltdW1cblx0ICogQHBhcmFtICB7bnVtYmVyfSBvdXRNYXggT3V0cHV0IHJhbmdlIG1heGltdW1cblx0ICogQHJldHVybiB7bnVtYmVyfSAgICAgICAgVGhlIGlucHV0IHZhbHVlIHNjYWxlZCB0byBpdHMgbmV3IHJhbmdlXG5cdCAqIEBleGFtcGxlXG5cdCAqIE5leHVzLnNjYWxlKDAuNSwwLDEsMCwxMCkgICAvLyByZXR1cm5zIDVcblx0ICogTmV4dXMuc2NhbGUoMC45LDAsMSwxLDApICAgIC8vIHJldHVybnMgMC4xXG5cdCAqL1xuXHRleHBvcnRzLnNjYWxlID0gZnVuY3Rpb24gKGluTnVtLCBpbk1pbiwgaW5NYXgsIG91dE1pbiwgb3V0TWF4KSB7XG5cdCAgaWYgKGluTWluID09PSBpbk1heCkge1xuXHQgICAgcmV0dXJuIG91dE1pbjtcblx0ICB9XG5cdCAgcmV0dXJuIChpbk51bSAtIGluTWluKSAqIChvdXRNYXggLSBvdXRNaW4pIC8gKGluTWF4IC0gaW5NaW4pICsgb3V0TWluO1xuXHR9O1xuXHRcblx0ZXhwb3J0cy50b1BvbGFyID0gZnVuY3Rpb24gKHgsIHkpIHtcblx0ICB2YXIgciA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcblx0XG5cdCAgdmFyIHRoZXRhID0gTWF0aC5hdGFuMih5LCB4KTtcblx0ICBpZiAodGhldGEgPCAwKSB7XG5cdCAgICB0aGV0YSA9IHRoZXRhICsgMiAqIE1hdGguUEk7XG5cdCAgfVxuXHQgIHJldHVybiB7IHJhZGl1czogciwgYW5nbGU6IHRoZXRhIH07XG5cdH07XG5cdFxuXHRleHBvcnRzLnRvQ2FydGVzaWFuID0gZnVuY3Rpb24gKHJhZGl1cywgYW5nbGUpIHtcblx0ICB2YXIgY29zID0gTWF0aC5jb3MoYW5nbGUpO1xuXHQgIHZhciBzaW4gPSBNYXRoLnNpbihhbmdsZSk7XG5cdCAgcmV0dXJuIHsgeDogcmFkaXVzICogY29zLCB5OiByYWRpdXMgKiBzaW4gKiAtMSB9O1xuXHR9O1xuXHQvKlxuXHRleHBvcnRzLnBvbGFyVG9DYXJ0ZXNpYW4oY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzLCBhbmdsZUluRGVncmVlcykge1xuXHQgIHZhciBhbmdsZUluUmFkaWFucyA9IChhbmdsZUluRGVncmVlcy05MCkgKiBNYXRoLlBJIC8gMTgwLjA7XG5cdFxuXHQgIHJldHVybiB7XG5cdCAgICB4OiBjZW50ZXJYICsgKHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlSW5SYWRpYW5zKSksXG5cdCAgICB5OiBjZW50ZXJZICsgKHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlSW5SYWRpYW5zKSlcblx0ICB9O1xuXHR9ICAqL1xuXHRcblx0ZXhwb3J0cy5wcnVuZSA9IGZ1bmN0aW9uIChkYXRhLCBzY2FsZSkge1xuXHQgIHJldHVybiBwYXJzZUZsb2F0KGRhdGEudG9GaXhlZChzY2FsZSkpO1xuXHR9O1xuXHRcblx0ZXhwb3J0cy5pbnZlcnQgPSBmdW5jdGlvbiAoaW5OdW0pIHtcblx0ICByZXR1cm4gZXhwb3J0cy5zY2FsZShpbk51bSwgMSwgMCwgMCwgMSk7XG5cdH07XG5cdFxuXHQvKipcblx0ICogQ29udmVydCBhIE1JRGkgbm90ZSBudW1iZXIgdG8gYSBmcmVxdWVuY3kgdmFsdWUgaW4gZXF1YWwgdGVtcGVyYW1lbnQuXG5cdCAqIEBwYXJhbSAge251bWJlcn0gbWlkaSBNSURJIG5vdGUgdmFsdWVcblx0ICogQHJldHVybiB7bnVtYmVyfSAgICAgIEZyZXF1ZW5jZSB2YWx1ZVxuXHQgKiBAZXhhbXBsZVxuXHQgKiBOZXh1cy5tdG9mKDYwKSAgLy8gcmV0dXJucyB0aGUgZnJlcXVlbmN5IG51bWJlciBvZiBNaWRkbGUgQ1xuXHQgKi9cblx0ZXhwb3J0cy5tdG9mID0gZnVuY3Rpb24gKG1pZGkpIHtcblx0ICByZXR1cm4gTWF0aC5wb3coMiwgKG1pZGkgLSA2OSkgLyAxMikgKiA0NDA7XG5cdH07XG5cdFxuXHQvKipcblx0ICogSW50ZXJwb2xhdGUgYmV0d2VlbiB0d28gbnVtYmVyc1xuXHQgKiBAcGFyYW0gIHtudW1iZXJ9IGxvYyBJbnRlcnBvbGF0aW9uIGluZGV4ICgwLTEpXG5cdCAqIEBwYXJhbSAge251bWJlcn0gbWluIExvd2VyIHZhbHVlXG5cdCAqIEBwYXJhbSAge251bWJlcn0gbWF4IFVwcGVyIHZhbHVlXG5cdCAqIEByZXR1cm4ge251bWJlcn0gICAgIEludGVycG9sYXRlZCB2YWx1ZVxuXHQgKiBAZXhhbXBsZVxuXHQgKiBOZXh1cy5pbnRlcnAoMC41LDIsNCkgICAvLyByZXR1cm5zIDNcblx0ICogTmV4dXMuaW50ZXJwKDAuMSwwLDEwKSAgICAgLy8gcmV0dXJucyAxXG5cdCAqL1xuXHRleHBvcnRzLmludGVycCA9IGZ1bmN0aW9uIChsb2MsIG1pbiwgbWF4KSB7XG5cdCAgcmV0dXJuIGxvYyAqIChtYXggLSBtaW4pICsgbWluO1xuXHR9O1xuXHRcblx0LyoqXG5cdCAqIFJldHVybiBhIHJhbmRvbSBjaG9pY2UgZnJvbSBhIGxpc3Qgb2YgYXJndW1lbnRzXG5cdCAqIEByZXR1cm4ge3ZhcmlvdXN9IE9uZSByYW5kb20gYXJndW1lbnRcblx0ICogQGV4YW1wbGVcblx0ICogTmV4dXMucGljaygxLDIsMyw0KSAgIC8vIHJldHVybnMgMSwgMiwgMywgb3IgNFxuXHQgKiBOZXh1cy5waWNrKGZ1bmN0aW9uMSxmdW5jdGlvbjIpICAgLy8gcmV0dXJucyBlaXRoZXIgZnVuY3Rpb24xIG9yIGZ1bmN0aW9uMlxuXHQgKi9cblx0ZXhwb3J0cy5waWNrID0gZnVuY3Rpb24gKCkge1xuXHQgIHJldHVybiBhcmd1bWVudHNbfiB+KE1hdGgucmFuZG9tKCkgKiBhcmd1bWVudHMubGVuZ3RoKV07XG5cdH07XG5cdFxuXHQvKipcblx0ICogUmV0dXJucyBhbiBvY3RhdmUgbXVsdGlwbGllciBmb3IgZnJlcXVlbmN5IHZhbHVlc1xuXHQgKiBAcGFyYW0gIHtudW1iZXJ9IG51bSBSZWxhdGl2ZSBvY3RhdmUgbnVtYmVyIChlLmcuIC0xIGZvciBvbmUgb2N0YXZlIGRvd24sIDEgZm9yIG9uZSBvY3RhdmUgdXApXG5cdCAqIEByZXR1cm4ge251bWJlcn0gICAgIE9jdGF2ZSBtdWx0aXBsaWVyXG5cdCAqIEBleGFtcGxlXG5cdCAqIE5leHVzLm9jdGF2ZSgtMSkgIC8vIHJldHVybnMgMC41XG5cdCAqIE5leHVzLm9jdGF2ZSgwKSAgIC8vIHJldHVybnMgMVxuXHQgKiBOZXh1cy5vY3RhdmUoMSkgICAvLyByZXR1cm5zIDJcblx0ICogTmV4dXMub2N0YXZlKDIpICAgLy8gcmV0dXJucyA0XG5cdCAqL1xuXHRleHBvcnRzLm9jdGF2ZSA9IGZ1bmN0aW9uIChudW0pIHtcblx0ICByZXR1cm4gTWF0aC5wb3coMiwgbnVtKTtcblx0fTtcblx0XG5cdC8qKlxuXHQgKiBSYW5kb20gaW50ZWdlciBnZW5lcmF0b3IuIElmIG5vIHNlY29uZCBhcmd1bWVudCBpcyBnaXZlbiwgd2lsbCByZXR1cm4gcmFuZG9tIGludGVnZXIgZnJvbSAwIHRvIGJvdW5kMS5cblx0ICogQHBhcmFtICB7bnVtYmVyfSBib3VuZDEgTWluaW11bSByYW5kb20gdmFsdWVcblx0ICogQHBhcmFtICB7bnVtYmVyfSBib3VuZDIgTWF4aW11bSByYW5kb20gdmFsdWVcblx0ICogQHJldHVybiB7bnVtYmVyfSAgICAgICAgUmFuZG9tIGludGVnZXIgYmV0d2VlbiBsb3dlciBhbmQgdXBwZXIgYm91bmRhcnlcblx0ICogQGV4YW1wbGVcblx0ICogTmV4dXMucmkoMTApICAgIC8vIHJldHVybnMgcmFuZG9tIGludCBmcm9tIDAgdG8gMTBcblx0ICogTmV4dXMucmkoMjAsMjAwMCkgLy8gcmV0dXJucyByYW5kb20gaW50IGZyb20gMjAgdG8gMjAwMFxuXHQgKi9cblx0ZXhwb3J0cy5yaSA9IGZ1bmN0aW9uIChib3VuZDEsIGJvdW5kMikge1xuXHQgIGlmICghYm91bmQyKSB7XG5cdCAgICBib3VuZDIgPSBib3VuZDE7XG5cdCAgICBib3VuZDEgPSAwO1xuXHQgIH1cblx0ICB2YXIgbG93ID0gTWF0aC5taW4oYm91bmQxLCBib3VuZDIpO1xuXHQgIHZhciBoaWdoID0gTWF0aC5tYXgoYm91bmQxLCBib3VuZDIpO1xuXHQgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaGlnaCAtIGxvdykgKyBsb3cpO1xuXHR9O1xuXHRcblx0LyoqXG5cdCAqIFJhbmRvbSBmbG9hdCBudW1iZXIgZ2VuZXJhdG9yLiBJZiBubyBzZWNvbmQgYXJndW1lbnQgaXMgZ2l2ZW4sIHdpbGwgcmV0dXJuIHJhbmRvbSBmbG9hdCBmcm9tIDAgdG8gYm91bmQxLlxuXHQgKiBAcGFyYW0gIHtudW1iZXJ9IGJvdW5kMSBNaW5pbXVtIHJhbmRvbSB2YWx1ZVxuXHQgKiBAcGFyYW0gIHtudW1iZXJ9IGJvdW5kMiBNYXhpbXVtIHJhbmRvbSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtudW1iZXJ9ICAgICAgICBSYW5kb20gZmxvYXQgYmV0d2VlbiBsb3dlciBhbmQgdXBwZXIgYm91bmRhcnlcblx0ICogQGV4YW1wbGVcblx0ICogTmV4dXMucmYoMSkgICAgLy8gcmV0dXJucyByYW5kb20gZmxvYXQgZnJvbSAwIHRvIDFcblx0ICogTmV4dXMucmYoMSwyKSAvLyByZXR1cm5zIHJhbmRvbSBmbG9hdCBmcm9tIDEgdG8gMlxuXHQgKi9cblx0ZXhwb3J0cy5yZiA9IGZ1bmN0aW9uIChib3VuZDEsIGJvdW5kMikge1xuXHQgIGlmICghYm91bmQyKSB7XG5cdCAgICBib3VuZDIgPSBib3VuZDE7XG5cdCAgICBib3VuZDEgPSAwO1xuXHQgIH1cblx0ICB2YXIgbG93ID0gTWF0aC5taW4oYm91bmQxLCBib3VuZDIpO1xuXHQgIHZhciBoaWdoID0gTWF0aC5tYXgoYm91bmQxLCBib3VuZDIpO1xuXHQgIHJldHVybiBNYXRoLnJhbmRvbSgpICogKGhpZ2ggLSBsb3cpICsgbG93O1xuXHR9O1xuXHRcblx0ZXhwb3J0cy5jeWNsZSA9IGZ1bmN0aW9uIChpbnB1dCwgbWluLCBtYXgpIHtcblx0ICBpbnB1dCsrO1xuXHQgIGlmIChpbnB1dCA+PSBtYXgpIHtcblx0ICAgIGlucHV0ID0gbWluO1xuXHQgIH1cblx0ICByZXR1cm4gaW5wdXQ7XG5cdH07XG5cdFxuXHQvKipcblx0ICogQXZlcmFnZSBhbiBhcnJheSBvZiBudW1iZXJzXG5cdCAqIEBwYXJhbSAge0FycmF5fSBkYXRhIEFycmF5IG9mIG51bWJlcnMgdG8gYXZlcmFnZVxuXHQgKiBAcmV0dXJuIHtudW1iZXJ9ICAgICAgQXZlcmFnZSBvZiB0aGUgaW5wdXQgZGF0YVxuXHQgKiBAZXhhbXBsZVxuXHQgKiBOZXh1cy5hdmVyYWdlKFswLDIsNCw2LDgsMTBdKSAgIC8vIHJldHVybnMgNVxuXHQgKi9cblx0ZXhwb3J0cy5hdmVyYWdlID0gZnVuY3Rpb24gKGRhdGEpIHtcblx0ICB2YXIgdG90YWwgPSAwO1xuXHQgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuXHQgICAgdG90YWwgKz0gZGF0YVtpXTtcblx0ICB9XG5cdCAgcmV0dXJuIHRvdGFsIC8gZGF0YS5sZW5ndGg7XG5cdH07XG5cdFxuXHQvKipcblx0ICogR2V0IHRoZSBkaXN0YW5jZSBmcm9tIG9uZSAoeCx5KSBwb2ludCB0byBhbm90aGVyICh4LHkpIHBvaW50XG5cdCAqIEBwYXJhbSAge251bWJlcn0geDEgeCBvZiBmaXJzdCBwb2ludFxuXHQgKiBAcGFyYW0gIHtudW1iZXJ9IHkxIHkgb2YgZmlyc3QgcG9pbnRcblx0ICogQHBhcmFtICB7bnVtYmVyfSB4MiB4IG9mIHNlY29uZCBwb2ludFxuXHQgKiBAcGFyYW0gIHtudW1iZXJ9IHkyIHkgb2Ygc2Vjb25kIHBvaW55XG5cdCAqIEByZXR1cm4ge251bWJlcn0gICAgRGlzdGFuY2Vcblx0ICogQGV4YW1wbGVcblx0ICogTmV4dXMuZGlzdGFuY2UoMCwwLDMsNCkgICAvLyByZXR1cm5zIDVcblx0ICovXG5cdGV4cG9ydHMuZGlzdGFuY2UgPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIpIHtcblx0ICB2YXIgYSA9IHgxIC0geDI7XG5cdCAgdmFyIGIgPSB5MSAtIHkyO1xuXHQgIHJldHVybiBNYXRoLnNxcnQoYSAqIGEgKyBiICogYik7XG5cdH07XG5cdFxuXHRleHBvcnRzLmdhaW5Ub0RCID0gZnVuY3Rpb24gKGdhaW4pIHtcblx0ICByZXR1cm4gMjAgKiBNYXRoLmxvZzEwKGdhaW4pO1xuXHR9O1xuXHRcblx0LyoqXG5cdCAqIEZsaXAgYSBjb2luLCByZXR1cm5pbmcgZWl0aGVyIDAgb3IgMSBhY2NvcmRpbmcgdG8gYSBwcm9iYWJpbGl0eVxuXHQgKiBAcGFyYW0gIHtudW1iZXJ9IFtvZGRzPTAuNV0gTGlrZWxpaG9vZCBvZiByZXR1cm5pbmcgMVxuXHQgKiBAcmV0dXJuIHtudW1iZXJ9ICAgICAgICAgICAgMSBvciAwXG5cdCAqIEBleGFtcGxlXG5cdCAqIE5leHVzLmNvaW4oMC4xKSAgIC8vIHJldHVybnMgMSAoMTAlIG9mIHRoZSB0aW1lKSBvciAwICg5MCUgb2YgdGhlIHRpbWUpXG5cdCAqL1xuXHRleHBvcnRzLmNvaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgdmFyIG9kZHMgPSBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IDAuNSA6IGFyZ3VtZW50c1swXTtcblx0XG5cdCAgaWYgKGV4cG9ydHMucmYoMCwgMSkgPCBvZGRzKSB7XG5cdCAgICByZXR1cm4gMTtcblx0ICB9IGVsc2Uge1xuXHQgICAgcmV0dXJuIDA7XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9KSxcbi8qIDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7IH0gfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gZGVzYyAmJiBkZXNjLndyaXRhYmxlKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfTtcblx0XG5cdHZhciBfaW5oZXJpdHMgPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBzdmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXHR2YXIgZG9tID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcblx0dmFyIHV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xuXHR2YXIgdG91Y2ggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xuXHR2YXIgRXZlbnRFbWl0dGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG5cdFxuXHR2YXIgY29sb3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKS5jb2xvcnM7XG5cdFxuXHQvKipcblx0SW50ZXJmYWNlXG5cdCovXG5cdFxuXHR2YXIgSW50ZXJmYWNlID0gKGZ1bmN0aW9uIChfRXZlbnRFbWl0dGVyKSB7XG5cdCAgZnVuY3Rpb24gSW50ZXJmYWNlKGFyZ3MsIG9wdGlvbnMsIGRlZmF1bHRzKSB7XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSW50ZXJmYWNlKTtcblx0XG5cdCAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihJbnRlcmZhY2UucHJvdG90eXBlKSwgXCJjb25zdHJ1Y3RvclwiLCB0aGlzKS5jYWxsKHRoaXMpO1xuXHQgICAgdGhpcy50eXBlID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuXHQgICAgdGhpcy5zZXR0aW5ncyA9IHRoaXMucGFyc2VTZXR0aW5ncyhhcmdzLCBvcHRpb25zLCBkZWZhdWx0cyk7XG5cdCAgICB0aGlzLm1vdXNlID0ge307XG5cdCAgICB0aGlzLndhaXQgPSBmYWxzZTtcblx0ICAgIHRoaXMuY29sb3JzID0ge307XG5cdCAgICB2YXIgZGVmYXVsdENvbG9ycyA9IGNvbG9ycygpOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblx0ICAgIHRoaXMuY29sb3JzLmFjY2VudCA9IGRlZmF1bHRDb2xvcnMuYWNjZW50O1xuXHQgICAgdGhpcy5jb2xvcnMuZmlsbCA9IGRlZmF1bHRDb2xvcnMuZmlsbDtcblx0ICAgIHRoaXMuY29sb3JzLmxpZ2h0ID0gZGVmYXVsdENvbG9ycy5saWdodDtcblx0ICAgIHRoaXMuY29sb3JzLmRhcmsgPSBkZWZhdWx0Q29sb3JzLmRhcms7XG5cdCAgICB0aGlzLmNvbG9ycy5tZWRpdW1MaWdodCA9IGRlZmF1bHRDb2xvcnMubWVkaXVtTGlnaHQ7XG5cdCAgICB0aGlzLmNvbG9ycy5tZWRpdW1EYXJrID0gZGVmYXVsdENvbG9ycy5tZWRpdW1EYXJrO1xuXHQgIH1cblx0XG5cdCAgX2luaGVyaXRzKEludGVyZmFjZSwgX0V2ZW50RW1pdHRlcik7XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhJbnRlcmZhY2UsIHtcblx0ICAgIHBhcnNlU2V0dGluZ3M6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlU2V0dGluZ3MoYXJncywgb3B0aW9ucywgZGVmYXVsdHMpIHtcblx0XG5cdCAgICAgICAgb3B0aW9ucy51bnNoaWZ0KFwidGFyZ2V0XCIpO1xuXHQgICAgICAgIGRlZmF1bHRzLmRlZmF1bHRTaXplID0gZGVmYXVsdHMuc2l6ZS5zcGxpY2UoMCwgMik7XG5cdCAgICAgICAgZGVmYXVsdHMuc2l6ZSA9IGZhbHNlO1xuXHRcblx0ICAgICAgICB2YXIgc2V0dGluZ3MgPSB7XG5cdCAgICAgICAgICB0YXJnZXQ6IGRvY3VtZW50LmJvZHksXG5cdCAgICAgICAgICBjb2xvcnM6IHt9LCAvLyBzaG91bGQgaW5oZXJpdCBmcm9tIGEgY29sb3JzIG1vZHVsZSxcblx0ICAgICAgICAgIHNuYXBXaXRoUGFyZW50OiB0cnVlLFxuXHQgICAgICAgICAgZXZlbnQ6IGZ1bmN0aW9uIGV2ZW50KCkge30sXG5cdCAgICAgICAgICBjb21wb25lbnQ6IGZhbHNlXG5cdCAgICAgICAgfTtcblx0XG5cdCAgICAgICAgZm9yICh2YXIga2V5IGluIGRlZmF1bHRzKSB7XG5cdCAgICAgICAgICBzZXR0aW5nc1trZXldID0gZGVmYXVsdHNba2V5XTtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgLy8gZ3JhYnMgdGhlIG5leHQgYXJndW1lbnRcblx0ICAgICAgICAgIHZhciBzZXR0aW5nID0gYXJnc1tpXTtcblx0ICAgICAgICAgIC8vIGlmIGl0J3MgYW4gb2JqZWN0LCBpdCBtdXN0IGJlIHRoZSBzZXR0aW5ncyBvYmplY3Rcblx0ICAgICAgICAgIGlmICh1dGlsLmlzT2JqZWN0KHNldHRpbmcpKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBzZXR0aW5nKSB7XG5cdCAgICAgICAgICAgICAgc2V0dGluZ3Nba2V5XSA9IHNldHRpbmdba2V5XTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvLyBpZiBpdCdzIGEgZnVuY3Rpb24sIGl0IG11c3QgYmUgdGhlIGV2ZW50IHNldHRpbmdcblx0ICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNldHRpbmcgPT09IFwiZnVuY3Rpb25cIikge1xuXHQgICAgICAgICAgICBzZXR0aW5ncy5ldmVudCA9IHNldHRpbmc7XG5cdCAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgY29uc2lkZXIgaXQgb25lIG9mIHRoZSB3aWRnZXQncyBjdXN0b20gb3B0aW9uc1xuXHQgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmxlbmd0aCA+PSAxKSB7XG5cdCAgICAgICAgICAgIC8vIGdyYWIgdGhlIGZpcnN0IG9wdGlvbiAtLSBpLmUuICd0YXJnZXQnXG5cdCAgICAgICAgICAgIHZhciBrZXkgPSBvcHRpb25zLnNwbGljZSgwLCAxKVswXTtcblx0ICAgICAgICAgICAgc2V0dGluZ3Nba2V5XSA9IHNldHRpbmc7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICAvKiAgaGFuZGxlIGNvbW1vbiBzZXR0aW5ncyAgKi9cblx0XG5cdCAgICAgICAgLy8gdGFyZ2V0XG5cdCAgICAgICAgdGhpcy5wYXJlbnQgPSBkb20ucGFyc2VFbGVtZW50KHNldHRpbmdzLnRhcmdldCk7XG5cdFxuXHQgICAgICAgIC8vIG5leHVzLXVpIGF0dHJpYnV0ZVxuXHQgICAgICAgIGlmICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmICFzZXR0aW5ncy5jb21wb25lbnQpIHtcblx0ICAgICAgICAgIGlmICghdGhpcy5wYXJlbnQuaGFzQXR0cmlidXRlKFwibmV4dXMtdWlcIikpIHtcblx0ICAgICAgICAgICAgdGhpcy5wYXJlbnQuc2V0QXR0cmlidXRlKFwibmV4dXMtdWlcIiwgXCJcIik7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICAvLyBzaXplXG5cdFxuXHQgICAgICAgIGlmIChzZXR0aW5ncy5zaXplICYmIEFycmF5LmlzQXJyYXkoc2V0dGluZ3Muc2l6ZSkgJiYgc2V0dGluZ3Muc25hcFdpdGhQYXJlbnQpIHtcblx0ICAgICAgICAgIHRoaXMud2lkdGggPSBzZXR0aW5ncy5zaXplWzBdO1xuXHQgICAgICAgICAgdGhpcy5oZWlnaHQgPSBzZXR0aW5ncy5zaXplWzFdO1xuXHQgICAgICAgICAgdGhpcy5wYXJlbnQuc3R5bGUud2lkdGggPSB0aGlzLndpZHRoICsgXCJweFwiO1xuXHQgICAgICAgICAgdGhpcy5wYXJlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgKyBcInB4XCI7XG5cdCAgICAgICAgfSBlbHNlIGlmIChzZXR0aW5ncy5zbmFwV2l0aFBhcmVudCAmJiAhc2V0dGluZ3MuY29tcG9uZW50KSB7XG5cdFxuXHQgICAgICAgICAgdGhpcy53aWR0aCA9IHBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5wYXJlbnQsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoXCJ3aWR0aFwiKS5yZXBsYWNlKFwicHhcIiwgXCJcIikpO1xuXHQgICAgICAgICAgdGhpcy5oZWlnaHQgPSBwYXJzZUZsb2F0KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMucGFyZW50LCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKFwiaGVpZ2h0XCIpLnJlcGxhY2UoXCJweFwiLCBcIlwiKSk7XG5cdFxuXHQgICAgICAgICAgaWYgKHRoaXMud2lkdGggPT0gNTAwMCkge1xuXHQgICAgICAgICAgICB0aGlzLndpZHRoID0gc2V0dGluZ3MuZGVmYXVsdFNpemVbMF07XG5cdCAgICAgICAgICAgIHRoaXMucGFyZW50LnN0eWxlLndpZHRoID0gdGhpcy5wYXJlbnQud2lkdGggPSB0aGlzLndpZHRoICsgXCJweFwiO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgaWYgKHRoaXMuaGVpZ2h0ID09IDUwMDApIHtcblx0ICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBzZXR0aW5ncy5kZWZhdWx0U2l6ZVsxXTtcblx0ICAgICAgICAgICAgdGhpcy5wYXJlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5wYXJlbnQuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgKyBcInB4XCI7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHNldHRpbmdzLnNpemUgPSBzZXR0aW5ncy5kZWZhdWx0U2l6ZTtcblx0ICAgICAgICAgIHRoaXMud2lkdGggPSBzZXR0aW5ncy5zaXplWzBdO1xuXHQgICAgICAgICAgdGhpcy5oZWlnaHQgPSBzZXR0aW5ncy5zaXplWzFdO1xuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgLy8gZXZlbnRcblx0ICAgICAgICBpZiAoc2V0dGluZ3MuZXZlbnQpIHtcblx0ICAgICAgICAgIHRoaXMuZXZlbnQgPSB0aGlzLm9uKFwiY2hhbmdlXCIsIHNldHRpbmdzLmV2ZW50KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy5ldmVudCA9IGZhbHNlO1xuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgcmV0dXJuIHNldHRpbmdzO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgaW5pdDoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdCgpIHtcblx0ICAgICAgICB0aGlzLmJ1aWxkRnJhbWUoKTtcblx0ICAgICAgICB0aGlzLmJ1aWxkSW50ZXJmYWNlKCk7XG5cdCAgICAgICAgdGhpcy5zaXplSW50ZXJmYWNlKCk7XG5cdCAgICAgICAgdGhpcy5hdHRhY2hMaXN0ZW5lcnMoKTtcblx0ICAgICAgICB0aGlzLmNvbG9ySW50ZXJmYWNlKCk7XG5cdCAgICAgICAgdGhpcy5maW5hbFRvdWNoZXMoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGJ1aWxkRnJhbWU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkRnJhbWUoKSB7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50ID0gc3ZnLmNyZWF0ZShcInN2Z1wiKTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgdGhpcy53aWR0aCk7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCB0aGlzLmhlaWdodCk7XG5cdCAgICAgICAgdGhpcy5wYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGJ1aWxkSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEludGVyZmFjZSgpIHt9XG5cdCAgICB9LFxuXHQgICAgc2l6ZUludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc2l6ZUludGVyZmFjZSgpIHt9XG5cdCAgICB9LFxuXHQgICAgY29sb3JJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbG9ySW50ZXJmYWNlKCkge31cblx0ICAgIH0sXG5cdCAgICBhdHRhY2hMaXN0ZW5lcnM6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGF0dGFjaExpc3RlbmVycygpIHtcblx0ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXHRcblx0ICAgICAgICB0aGlzLmludGVyYWN0aW9uVGFyZ2V0ID0gdGhpcy5pbnRlcmFjdGlvblRhcmdldCB8fCB0aGlzLmVsZW1lbnQ7XG5cdFxuXHQgICAgICAgIC8vIFNldHVwIGludGVyYWN0aW9uXG5cdCAgICAgICAgaWYgKHRvdWNoLmV4aXN0cykge1xuXHQgICAgICAgICAgdGhpcy5pbnRlcmFjdGlvblRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLCBmdW5jdGlvbiAoZXZ0KSB7XG5cdCAgICAgICAgICAgIHJldHVybiBfdGhpcy5wcmVUb3VjaChldnQpO1xuXHQgICAgICAgICAgfSk7XG5cdCAgICAgICAgICB0aGlzLmludGVyYWN0aW9uVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgZnVuY3Rpb24gKGV2dCkge1xuXHQgICAgICAgICAgICByZXR1cm4gX3RoaXMucHJlVG91Y2hNb3ZlKGV2dCk7XG5cdCAgICAgICAgICB9KTtcblx0ICAgICAgICAgIHRoaXMuaW50ZXJhY3Rpb25UYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGZ1bmN0aW9uIChldnQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIF90aGlzLnByZVRvdWNoUmVsZWFzZShldnQpO1xuXHQgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuYm91bmRQcmVNb3ZlID0gZnVuY3Rpb24gKGV2dCkge1xuXHQgICAgICAgICAgcmV0dXJuIF90aGlzLnByZU1vdmUoZXZ0KTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIHRoaXMuYm91bmRQcmVSZWxlYXNlID0gZnVuY3Rpb24gKGV2dCkge1xuXHQgICAgICAgICAgcmV0dXJuIF90aGlzLnByZVJlbGVhc2UoZXZ0KTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIHRoaXMuaW50ZXJhY3Rpb25UYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCBmdW5jdGlvbiAoZXZ0KSB7XG5cdCAgICAgICAgICByZXR1cm4gX3RoaXMucHJlQ2xpY2soZXZ0KTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGZpbmFsVG91Y2hlczoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gZmluYWxUb3VjaGVzKCkge1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5jdXJzb3IgPSBcInBvaW50ZXJcIjtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHByZUNsaWNrOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBwcmVDbGljayhlKSB7XG5cdCAgICAgICAgLy8gMTAwMDAgZ2V0Q29tcHV0ZWRTdHlsZSBjYWxscyB0YWtlcyAxMDAgbXMuXG5cdCAgICAgICAgLy8gLjouIG9uZSB0YWtlcyBhYm91dCAuMDFtc1xuXHQgICAgICAgIGlmICh0aGlzLmVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHQgICAgICAgICAgdGhpcy53aWR0aCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIpLnJlcGxhY2UoXCJweFwiLCBcIlwiKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gMTAwMDAgZ2V0Q29tcHV0ZWRTdHlsZSBjYWxscyB0YWtlcyA0MCBtcy5cblx0ICAgICAgICAvLyAuOi4gb25lIHRha2VzIGFib3V0IC4wMDRtc1xuXHQgICAgICAgIHRoaXMub2Zmc2V0ID0gZG9tLmZpbmRQb3NpdGlvbih0aGlzLmVsZW1lbnQpO1xuXHQgICAgICAgIHRoaXMubW91c2UgPSBkb20ubG9jYXRlTW91c2UoZSwgdGhpcy5vZmZzZXQpO1xuXHQgICAgICAgIHRoaXMuY2xpY2tlZCA9IHRydWU7XG5cdCAgICAgICAgdGhpcy5jbGljaygpO1xuXHQgICAgICAgIHRoaXMubW92ZUV2ZW50ID0gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCB0aGlzLmJvdW5kUHJlTW92ZSk7XG5cdCAgICAgICAgdGhpcy5yZWxlYXNlRXZlbnQgPSBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCB0aGlzLmJvdW5kUHJlUmVsZWFzZSk7XG5cdCAgICAgICAgdGhpcy5lbWl0KFwiY2xpY2tcIik7XG5cdCAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBwcmVNb3ZlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBwcmVNb3ZlKGUpIHtcblx0ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXHRcblx0ICAgICAgICBpZiAoIXRoaXMud2FpdCkge1xuXHQgICAgICAgICAgdGhpcy5tb3VzZSA9IGRvbS5sb2NhdGVNb3VzZShlLCB0aGlzLm9mZnNldCk7XG5cdCAgICAgICAgICB0aGlzLm1vdmUoKTtcblx0ICAgICAgICAgIHRoaXMud2FpdCA9IHRydWU7XG5cdCAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgX3RoaXMud2FpdCA9IGZhbHNlO1xuXHQgICAgICAgICAgfSwgMjUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cdCAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHByZVJlbGVhc2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHByZVJlbGVhc2UoZSkge1xuXHQgICAgICAgIHRoaXMubW91c2UgPSBkb20ubG9jYXRlTW91c2UoZSwgdGhpcy5vZmZzZXQpO1xuXHQgICAgICAgIHRoaXMuY2xpY2tlZCA9IGZhbHNlO1xuXHQgICAgICAgIHRoaXMucmVsZWFzZSgpO1xuXHQgICAgICAgIHRoaXMuZW1pdChcInJlbGVhc2VcIik7XG5cdCAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCB0aGlzLmJvdW5kUHJlTW92ZSk7XG5cdCAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgdGhpcy5ib3VuZFByZVJlbGVhc2UpO1xuXHQgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblx0ICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY2xpY2s6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsaWNrKCkge31cblx0ICAgIH0sXG5cdCAgICBtb3ZlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBtb3ZlKCkge31cblx0ICAgIH0sXG5cdCAgICByZWxlYXNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWxlYXNlKCkge31cblx0ICAgIH0sXG5cdCAgICBwcmVUb3VjaDoge1xuXHRcblx0ICAgICAgLyogdG91Y2ggKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBwcmVUb3VjaChlKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdCAgICAgICAgICB0aGlzLndpZHRoID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5lbGVtZW50LCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKFwid2lkdGhcIikucmVwbGFjZShcInB4XCIsIFwiXCIpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLm9mZnNldCA9IGRvbS5maW5kUG9zaXRpb24odGhpcy5lbGVtZW50KTtcblx0ICAgICAgICB0aGlzLm1vdXNlID0gZG9tLmxvY2F0ZVRvdWNoKGUsIHRoaXMub2Zmc2V0KTtcblx0ICAgICAgICB0aGlzLmNsaWNrZWQgPSB0cnVlO1xuXHQgICAgICAgIHRoaXMudG91Y2goZSk7XG5cdCAgICAgICAgdGhpcy5lbWl0KFwiY2xpY2tcIik7XG5cdCAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBwcmVUb3VjaE1vdmU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHByZVRvdWNoTW92ZShlKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY2xpY2tlZCkge1xuXHQgICAgICAgICAgdGhpcy5tb3VzZSA9IGRvbS5sb2NhdGVUb3VjaChlLCB0aGlzLm9mZnNldCk7XG5cdCAgICAgICAgICB0aGlzLnRvdWNoTW92ZSgpO1xuXHQgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBwcmVUb3VjaFJlbGVhc2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHByZVRvdWNoUmVsZWFzZShlKSB7XG5cdCAgICAgICAgdGhpcy5tb3VzZSA9IGRvbS5sb2NhdGVUb3VjaChlLCB0aGlzLm9mZnNldCk7XG5cdCAgICAgICAgdGhpcy5jbGlja2VkID0gZmFsc2U7XG5cdCAgICAgICAgdGhpcy50b3VjaFJlbGVhc2UoKTtcblx0ICAgICAgICB0aGlzLmVtaXQoXCJyZWxlYXNlXCIpO1xuXHQgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblx0ICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgdG91Y2g6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRvdWNoKCkge1xuXHQgICAgICAgIHRoaXMuY2xpY2soKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHRvdWNoTW92ZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gdG91Y2hNb3ZlKCkge1xuXHQgICAgICAgIHRoaXMubW92ZSgpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgdG91Y2hSZWxlYXNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiB0b3VjaFJlbGVhc2UoKSB7XG5cdCAgICAgICAgdGhpcy5yZWxlYXNlKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByZXNpemU6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICAqIFJlc2l6ZSB0aGUgaW50ZXJmYWNlXG5cdCAgICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IE5ldyB3aWR0aCBpbiBwaXhlbHNcblx0ICAgICAgKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IE5ldyBoZWlnaHQgaW4gcGl4ZWxzXG5cdCAgICAgICpcblx0ICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAqIGJ1dHRvbi5yZXNpemUoMTAwLDEwMCk7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVzaXplKHdpZHRoLCBoZWlnaHQpIHtcblx0ICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XG5cdCAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cdCAgICAgICAgdGhpcy5wYXJlbnQuc3R5bGUud2lkdGggPSB0aGlzLndpZHRoICsgXCJweFwiO1xuXHQgICAgICAgIHRoaXMucGFyZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuaGVpZ2h0ICsgXCJweFwiO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCB0aGlzLndpZHRoKTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIHRoaXMuaGVpZ2h0KTtcblx0ICAgICAgICB0aGlzLnNpemVJbnRlcmZhY2UoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGVtcHR5OiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBlbXB0eSgpIHtcblx0ICAgICAgICB3aGlsZSAodGhpcy5lbGVtZW50Lmxhc3RDaGlsZCkge1xuXHQgICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudC5sYXN0Q2hpbGQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGRlc3Ryb3k6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICAqIFJlbW92ZSB0aGUgaW50ZXJmYWNlIGZyb20gdGhlIHBhZ2UgYW5kIGNhbmNlbCBpdHMgZXZlbnQgbGlzdGVuZXIocykuXG5cdCAgICAgICpcblx0ICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAqIGJ1dHRvbi5kZXN0cm95KCk7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gZGVzdHJveSgpIHtcblx0ICAgICAgICB0aGlzLmVtcHR5KCk7XG5cdCAgICAgICAgdGhpcy5wYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50KTtcblx0ICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuXHQgICAgICAgIGlmICh0aGlzLmluc3RydW1lbnQpIHtcblx0ICAgICAgICAgIGRlbGV0ZSB0aGlzLmluc3RydW1lbnRbdGhpcy5pZF07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuY3VzdG9tRGVzdHJveSgpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY3VzdG9tRGVzdHJveToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY3VzdG9tRGVzdHJveSgpIHt9XG5cdCAgICB9LFxuXHQgICAgY29sb3JpemU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbG9yaXplKHR5cGUsIGNvbG9yKSB7XG5cdCAgICAgICAgdGhpcy5jb2xvcnNbdHlwZV0gPSBjb2xvcjtcblx0ICAgICAgICB0aGlzLmNvbG9ySW50ZXJmYWNlKCk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIEludGVyZmFjZTtcblx0fSkoRXZlbnRFbWl0dGVyKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gSW50ZXJmYWNlO1xuXG4vKioqLyB9KSxcbi8qIDcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdGV4cG9ydHMuZmluZFBvc2l0aW9uID0gZnVuY3Rpb24gKGVsKSB7XG5cdCAgdmFyIHZpZXdwb3J0T2Zmc2V0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdCAgdmFyIHRvcCA9IHZpZXdwb3J0T2Zmc2V0LnRvcCArIHdpbmRvdy5zY3JvbGxZO1xuXHQgIHZhciBsZWZ0ID0gdmlld3BvcnRPZmZzZXQubGVmdCArIHdpbmRvdy5zY3JvbGxYO1xuXHQgIHJldHVybiB7IHRvcDogdG9wLCBsZWZ0OiBsZWZ0IH07XG5cdH07XG5cdFxuXHRleHBvcnRzLnBhcnNlRWxlbWVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcblx0ICBpZiAodHlwZW9mIHBhcmVudCA9PT0gXCJzdHJpbmdcIikge1xuXHQgICAgcGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocGFyZW50LnJlcGxhY2UoXCIjXCIsIFwiXCIpKTtcblx0ICB9XG5cdFxuXHQgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCBwYXJlbnQgaW5zdGFuY2VvZiBTVkdFbGVtZW50KSB7XG5cdCAgICByZXR1cm4gcGFyZW50O1xuXHQgIH0gZWxzZSB7XG5cdCAgICByZXR1cm4gXCJObyB2YWxpZCBwYXJlbnQgYXJndW1lbnRcIjtcblx0ICB9XG5cdH07XG5cdFxuXHRleHBvcnRzLmxvY2F0ZU1vdXNlID0gZnVuY3Rpb24gKGUsIG9mZnNldCkge1xuXHQgIHJldHVybiB7XG5cdCAgICB4OiBlLnBhZ2VYIC0gb2Zmc2V0LmxlZnQsXG5cdCAgICB5OiBlLnBhZ2VZIC0gb2Zmc2V0LnRvcFxuXHQgIH07XG5cdH07XG5cdFxuXHRleHBvcnRzLmxvY2F0ZVRvdWNoID0gZnVuY3Rpb24gKGUsIG9mZnNldCkge1xuXHQgIHJldHVybiB7XG5cdCAgICB4OiBlLnRhcmdldFRvdWNoZXMubGVuZ3RoID8gZS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VYIC0gb2Zmc2V0LmxlZnQgOiBmYWxzZSxcblx0ICAgIHk6IGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVkgLSBvZmZzZXQudG9wIDogZmFsc2Vcblx0ICB9O1xuXHR9O1xuXHRcblx0ZXhwb3J0cy5TbWFydENhbnZhcyA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcblx0ICB2YXIgX3RoaXMgPSB0aGlzO1xuXHRcblx0ICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuXHQgIHRoaXMuY29udGV4dCA9IHRoaXMuZWxlbWVudC5nZXRDb250ZXh0KFwiMmRcIik7XG5cdCAgcGFyZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7XG5cdFxuXHQgIHRoaXMucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpIHtcblx0ICAgIF90aGlzLmVsZW1lbnQud2lkdGggPSB3ICogMjtcblx0ICAgIF90aGlzLmVsZW1lbnQuaGVpZ2h0ID0gaCAqIDI7XG5cdCAgICBfdGhpcy5lbGVtZW50LnN0eWxlLndpZHRoID0gdyArIFwicHhcIjtcblx0ICAgIF90aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gaCArIFwicHhcIjtcblx0ICB9O1xuXHR9O1xuXG4vKioqLyB9KSxcbi8qIDggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdGV4cG9ydHMuaXNPYmplY3QgPSBmdW5jdGlvbiAob2JqKSB7XG5cdCAgaWYgKHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkob2JqKSAmJiBvYmogIT09IG51bGwgJiYgb2JqIGluc3RhbmNlb2YgU1ZHRWxlbWVudCA9PT0gZmFsc2UgJiYgb2JqIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdCAgICByZXR1cm4gdHJ1ZTtcblx0ICB9IGVsc2Uge1xuXHQgICAgcmV0dXJuIGZhbHNlO1xuXHQgIH1cblx0fTtcblxuLyoqKi8gfSksXG4vKiA5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHRleHBvcnRzLmV4aXN0cyA9IFwib250b3VjaHN0YXJ0XCIgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4vKioqLyB9KSxcbi8qIDEwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Ly8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG5cdC8vXG5cdC8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG5cdC8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcblx0Ly8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG5cdC8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcblx0Ly8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuXHQvLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcblx0Ly8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cdC8vXG5cdC8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG5cdC8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXHQvL1xuXHQvLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG5cdC8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcblx0Ly8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuXHQvLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcblx0Ly8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG5cdC8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcblx0Ly8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblx0XG5cdGZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcblx0ICB0aGlzLl9ldmVudHMgPSB0aGlzLl9ldmVudHMgfHwge307XG5cdCAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcblx0fVxuXHRtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcblx0XG5cdC8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuXHRFdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXHRcblx0RXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXHRFdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cdFxuXHQvLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcblx0Ly8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cblx0RXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblx0XG5cdC8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuXHQvLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cblx0RXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbihuKSB7XG5cdCAgaWYgKCFpc051bWJlcihuKSB8fCBuIDwgMCB8fCBpc05hTihuKSlcblx0ICAgIHRocm93IFR5cGVFcnJvcignbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG5cdCAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcblx0ICByZXR1cm4gdGhpcztcblx0fTtcblx0XG5cdEV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uKHR5cGUpIHtcblx0ICB2YXIgZXIsIGhhbmRsZXIsIGxlbiwgYXJncywgaSwgbGlzdGVuZXJzO1xuXHRcblx0ICBpZiAoIXRoaXMuX2V2ZW50cylcblx0ICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXHRcblx0ICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG5cdCAgaWYgKHR5cGUgPT09ICdlcnJvcicpIHtcblx0ICAgIGlmICghdGhpcy5fZXZlbnRzLmVycm9yIHx8XG5cdCAgICAgICAgKGlzT2JqZWN0KHRoaXMuX2V2ZW50cy5lcnJvcikgJiYgIXRoaXMuX2V2ZW50cy5lcnJvci5sZW5ndGgpKSB7XG5cdCAgICAgIGVyID0gYXJndW1lbnRzWzFdO1xuXHQgICAgICBpZiAoZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuXHQgICAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIC8vIEF0IGxlYXN0IGdpdmUgc29tZSBraW5kIG9mIGNvbnRleHQgdG8gdGhlIHVzZXJcblx0ICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdVbmNhdWdodCwgdW5zcGVjaWZpZWQgXCJlcnJvclwiIGV2ZW50LiAoJyArIGVyICsgJyknKTtcblx0ICAgICAgICBlcnIuY29udGV4dCA9IGVyO1xuXHQgICAgICAgIHRocm93IGVycjtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblx0XG5cdCAgaGFuZGxlciA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblx0XG5cdCAgaWYgKGlzVW5kZWZpbmVkKGhhbmRsZXIpKVxuXHQgICAgcmV0dXJuIGZhbHNlO1xuXHRcblx0ICBpZiAoaXNGdW5jdGlvbihoYW5kbGVyKSkge1xuXHQgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG5cdCAgICAgIC8vIGZhc3QgY2FzZXNcblx0ICAgICAgY2FzZSAxOlxuXHQgICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzKTtcblx0ICAgICAgICBicmVhaztcblx0ICAgICAgY2FzZSAyOlxuXHQgICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0pO1xuXHQgICAgICAgIGJyZWFrO1xuXHQgICAgICBjYXNlIDM6XG5cdCAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMsIGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdKTtcblx0ICAgICAgICBicmVhaztcblx0ICAgICAgLy8gc2xvd2VyXG5cdCAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG5cdCAgICAgICAgaGFuZGxlci5hcHBseSh0aGlzLCBhcmdzKTtcblx0ICAgIH1cblx0ICB9IGVsc2UgaWYgKGlzT2JqZWN0KGhhbmRsZXIpKSB7XG5cdCAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblx0ICAgIGxpc3RlbmVycyA9IGhhbmRsZXIuc2xpY2UoKTtcblx0ICAgIGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7XG5cdCAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspXG5cdCAgICAgIGxpc3RlbmVyc1tpXS5hcHBseSh0aGlzLCBhcmdzKTtcblx0ICB9XG5cdFxuXHQgIHJldHVybiB0cnVlO1xuXHR9O1xuXHRcblx0RXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG5cdCAgdmFyIG07XG5cdFxuXHQgIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG5cdCAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXHRcblx0ICBpZiAoIXRoaXMuX2V2ZW50cylcblx0ICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXHRcblx0ICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuXHQgIC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJcIi5cblx0ICBpZiAodGhpcy5fZXZlbnRzLm5ld0xpc3RlbmVyKVxuXHQgICAgdGhpcy5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsXG5cdCAgICAgICAgICAgICAgaXNGdW5jdGlvbihsaXN0ZW5lci5saXN0ZW5lcikgP1xuXHQgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyIDogbGlzdGVuZXIpO1xuXHRcblx0ICBpZiAoIXRoaXMuX2V2ZW50c1t0eXBlXSlcblx0ICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuXHQgICAgdGhpcy5fZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG5cdCAgZWxzZSBpZiAoaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5cGVdKSlcblx0ICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cblx0ICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5wdXNoKGxpc3RlbmVyKTtcblx0ICBlbHNlXG5cdCAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cblx0ICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IFt0aGlzLl9ldmVudHNbdHlwZV0sIGxpc3RlbmVyXTtcblx0XG5cdCAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcblx0ICBpZiAoaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5cGVdKSAmJiAhdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCkge1xuXHQgICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9tYXhMaXN0ZW5lcnMpKSB7XG5cdCAgICAgIG0gPSB0aGlzLl9tYXhMaXN0ZW5lcnM7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICBtID0gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG5cdCAgICB9XG5cdFxuXHQgICAgaWYgKG0gJiYgbSA+IDAgJiYgdGhpcy5fZXZlbnRzW3R5cGVdLmxlbmd0aCA+IG0pIHtcblx0ICAgICAgdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCA9IHRydWU7XG5cdCAgICAgIGNvbnNvbGUuZXJyb3IoJyhub2RlKSB3YXJuaW5nOiBwb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5ICcgK1xuXHQgICAgICAgICAgICAgICAgICAgICdsZWFrIGRldGVjdGVkLiAlZCBsaXN0ZW5lcnMgYWRkZWQuICcgK1xuXHQgICAgICAgICAgICAgICAgICAgICdVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdC4nLFxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGgpO1xuXHQgICAgICBpZiAodHlwZW9mIGNvbnNvbGUudHJhY2UgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICAvLyBub3Qgc3VwcG9ydGVkIGluIElFIDEwXG5cdCAgICAgICAgY29uc29sZS50cmFjZSgpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXHRcblx0ICByZXR1cm4gdGhpcztcblx0fTtcblx0XG5cdEV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXHRcblx0RXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHtcblx0ICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuXHQgICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblx0XG5cdCAgdmFyIGZpcmVkID0gZmFsc2U7XG5cdFxuXHQgIGZ1bmN0aW9uIGcoKSB7XG5cdCAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGcpO1xuXHRcblx0ICAgIGlmICghZmlyZWQpIHtcblx0ICAgICAgZmlyZWQgPSB0cnVlO1xuXHQgICAgICBsaXN0ZW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgfVxuXHQgIH1cblx0XG5cdCAgZy5saXN0ZW5lciA9IGxpc3RlbmVyO1xuXHQgIHRoaXMub24odHlwZSwgZyk7XG5cdFxuXHQgIHJldHVybiB0aGlzO1xuXHR9O1xuXHRcblx0Ly8gZW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWRcblx0RXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG5cdCAgdmFyIGxpc3QsIHBvc2l0aW9uLCBsZW5ndGgsIGk7XG5cdFxuXHQgIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG5cdCAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXHRcblx0ICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKVxuXHQgICAgcmV0dXJuIHRoaXM7XG5cdFxuXHQgIGxpc3QgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cdCAgbGVuZ3RoID0gbGlzdC5sZW5ndGg7XG5cdCAgcG9zaXRpb24gPSAtMTtcblx0XG5cdCAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8XG5cdCAgICAgIChpc0Z1bmN0aW9uKGxpc3QubGlzdGVuZXIpICYmIGxpc3QubGlzdGVuZXIgPT09IGxpc3RlbmVyKSkge1xuXHQgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcblx0ICAgIGlmICh0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpXG5cdCAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0ZW5lcik7XG5cdFxuXHQgIH0gZWxzZSBpZiAoaXNPYmplY3QobGlzdCkpIHtcblx0ICAgIGZvciAoaSA9IGxlbmd0aDsgaS0tID4gMDspIHtcblx0ICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8XG5cdCAgICAgICAgICAobGlzdFtpXS5saXN0ZW5lciAmJiBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikpIHtcblx0ICAgICAgICBwb3NpdGlvbiA9IGk7XG5cdCAgICAgICAgYnJlYWs7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0XG5cdCAgICBpZiAocG9zaXRpb24gPCAwKVxuXHQgICAgICByZXR1cm4gdGhpcztcblx0XG5cdCAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpIHtcblx0ICAgICAgbGlzdC5sZW5ndGggPSAwO1xuXHQgICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgbGlzdC5zcGxpY2UocG9zaXRpb24sIDEpO1xuXHQgICAgfVxuXHRcblx0ICAgIGlmICh0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpXG5cdCAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0ZW5lcik7XG5cdCAgfVxuXHRcblx0ICByZXR1cm4gdGhpcztcblx0fTtcblx0XG5cdEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkge1xuXHQgIHZhciBrZXksIGxpc3RlbmVycztcblx0XG5cdCAgaWYgKCF0aGlzLl9ldmVudHMpXG5cdCAgICByZXR1cm4gdGhpcztcblx0XG5cdCAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuXHQgIGlmICghdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKSB7XG5cdCAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcblx0ICAgICAgdGhpcy5fZXZlbnRzID0ge307XG5cdCAgICBlbHNlIGlmICh0aGlzLl9ldmVudHNbdHlwZV0pXG5cdCAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG5cdCAgICByZXR1cm4gdGhpcztcblx0ICB9XG5cdFxuXHQgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuXHQgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG5cdCAgICBmb3IgKGtleSBpbiB0aGlzLl9ldmVudHMpIHtcblx0ICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG5cdCAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG5cdCAgICB9XG5cdCAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcblx0ICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXHQgICAgcmV0dXJuIHRoaXM7XG5cdCAgfVxuXHRcblx0ICBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cdFxuXHQgIGlmIChpc0Z1bmN0aW9uKGxpc3RlbmVycykpIHtcblx0ICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzKTtcblx0ICB9IGVsc2UgaWYgKGxpc3RlbmVycykge1xuXHQgICAgLy8gTElGTyBvcmRlclxuXHQgICAgd2hpbGUgKGxpc3RlbmVycy5sZW5ndGgpXG5cdCAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2xpc3RlbmVycy5sZW5ndGggLSAxXSk7XG5cdCAgfVxuXHQgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG5cdFxuXHQgIHJldHVybiB0aGlzO1xuXHR9O1xuXHRcblx0RXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7XG5cdCAgdmFyIHJldDtcblx0ICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKVxuXHQgICAgcmV0ID0gW107XG5cdCAgZWxzZSBpZiAoaXNGdW5jdGlvbih0aGlzLl9ldmVudHNbdHlwZV0pKVxuXHQgICAgcmV0ID0gW3RoaXMuX2V2ZW50c1t0eXBlXV07XG5cdCAgZWxzZVxuXHQgICAgcmV0ID0gdGhpcy5fZXZlbnRzW3R5cGVdLnNsaWNlKCk7XG5cdCAgcmV0dXJuIHJldDtcblx0fTtcblx0XG5cdEV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKHR5cGUpIHtcblx0ICBpZiAodGhpcy5fZXZlbnRzKSB7XG5cdCAgICB2YXIgZXZsaXN0ZW5lciA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblx0XG5cdCAgICBpZiAoaXNGdW5jdGlvbihldmxpc3RlbmVyKSlcblx0ICAgICAgcmV0dXJuIDE7XG5cdCAgICBlbHNlIGlmIChldmxpc3RlbmVyKVxuXHQgICAgICByZXR1cm4gZXZsaXN0ZW5lci5sZW5ndGg7XG5cdCAgfVxuXHQgIHJldHVybiAwO1xuXHR9O1xuXHRcblx0RXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG5cdCAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJDb3VudCh0eXBlKTtcblx0fTtcblx0XG5cdGZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG5cdCAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG5cdH1cblx0XG5cdGZ1bmN0aW9uIGlzTnVtYmVyKGFyZykge1xuXHQgIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcblx0fVxuXHRcblx0ZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG5cdCAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcblx0fVxuXHRcblx0ZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG5cdCAgcmV0dXJuIGFyZyA9PT0gdm9pZCAwO1xuXHR9XG5cblxuLyoqKi8gfSksXG4vKiAxMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHsgdmFyIHByb3AgPSBwcm9wc1trZXldOyBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChwcm9wLnZhbHVlKSBwcm9wLndyaXRhYmxlID0gdHJ1ZTsgfSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKTsgfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXHRcblx0dmFyIF9jbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9O1xuXHRcblx0dmFyIG1hdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xuXHRcblx0LyoqXG5cdCAgQ3JlYXRlcyBhIHN0ZXBwYWJsZSB2YWx1ZSB3aXRoIG1pbmltdW0sIG1heGltdW0sIGFuZCBzdGVwIHNpemUuIFRoaXMgaXMgdXNlZCBpbiBtYW55IGludGVyZmFjZXMgdG8gY29uc3RyaWN0IHRoZWlyIHZhbHVlcyB0byBjZXJ0YWluIHJhbmdlcy5cblx0ICBAcGFyYW0ge251bWJlcn0gW21pbj0wXSBtaW5pbXVtXG5cdCAgQHBhcmFtIHtudW1iZXJ9IFttYXg9MV0gbWF4aW11bVxuXHQgIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0wXVxuXHQgIEBwYXJhbSB7bnVtYmVyfSBbdmFsdWU9MF0gaW5pdGlhbCB2YWx1ZVxuXHQgIEByZXR1cm5zIHtPYmplY3R9IFN0ZXBcblx0Ki9cblx0XG5cdHZhciBTdGVwID0gKGZ1bmN0aW9uICgpIHtcblx0ICBmdW5jdGlvbiBTdGVwKCkge1xuXHQgICAgdmFyIG1pbiA9IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gMCA6IGFyZ3VtZW50c1swXTtcblx0ICAgIHZhciBtYXggPSBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IDEgOiBhcmd1bWVudHNbMV07XG5cdCAgICB2YXIgc3RlcCA9IGFyZ3VtZW50c1syXSA9PT0gdW5kZWZpbmVkID8gMCA6IGFyZ3VtZW50c1syXTtcblx0ICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1szXSA9PT0gdW5kZWZpbmVkID8gMCA6IGFyZ3VtZW50c1szXTtcblx0XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3RlcCk7XG5cdFxuXHQgICAgLy9PYmplY3QuYXNzaWduKHRoaXMse21pbixtYXgsc3RlcH0pO1xuXHQgICAgLy9DYW5ub3QgdXNlIE9iamVjdC5hc3NpZ24gYmVjYXVzZSBub3Qgc3VwcG9ydGVkIGluIFNhZmFyaS5cblx0ICAgIC8vSSB3b3VsZCBleHBlY3QgZm9yIEJhYmVsIHRvIHRha2UgY2FyZSBvZiB0aGlzIGJ1dCBpdCBpcyBub3QuXG5cdCAgICB0aGlzLm1pbiA9IG1pbjtcblx0ICAgIHRoaXMubWF4ID0gbWF4O1xuXHQgICAgdGhpcy5zdGVwID0gc3RlcDtcblx0ICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcblx0ICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlO1xuXHQgICAgdGhpcy5vbGRWYWx1ZSA9IGZhbHNlO1xuXHQgICAgdGhpcy51cGRhdGUodGhpcy52YWx1ZSk7XG5cdCAgfVxuXHRcblx0ICBfY3JlYXRlQ2xhc3MoU3RlcCwge1xuXHQgICAgdXBkYXRlOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgICBVcGRhdGUgd2l0aCBhIG5ldyB2YWx1ZS4gVGhlIHZhbHVlIHdpbGwgYmUgYXV0by1hZGp1c3RlZCB0byBmaXQgdGhlIG1pbi9tYXgvc3RlcC5cblx0ICAgICAgICBAcGFyYW0ge251bWJlcn0gdmFsdWVcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGUodmFsdWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5zdGVwKSB7XG5cdCAgICAgICAgICAvLyB0aGlzLnZhbHVlID0gbWF0aC5jbGlwKE1hdGgucm91bmQodmFsdWUgLyAodGhpcy5zdGVwKSkgKiB0aGlzLnN0ZXAsIHRoaXMubWluLHRoaXMubWF4KTtcblx0ICAgICAgICAgIHRoaXMudmFsdWUgPSBtYXRoLmNsaXAoTWF0aC5yb3VuZCgodmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnN0ZXApICogdGhpcy5zdGVwICsgdGhpcy5taW4sIHRoaXMubWluLCB0aGlzLm1heCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMudmFsdWUgPSBtYXRoLmNsaXAodmFsdWUsIHRoaXMubWluLCB0aGlzLm1heCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLm9sZFZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG5cdCAgICAgICAgICB0aGlzLm9sZFZhbHVlID0gdGhpcy52YWx1ZTtcblx0ICAgICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHVwZGF0ZU5vcm1hbDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgICAgVXBkYXRlIHdpdGggYSBub3JtYWxpemVkIHZhbHVlIDAtMS5cblx0ICAgICAgICBAcGFyYW0ge251bWJlcn0gdmFsdWVcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVOb3JtYWwodmFsdWUpIHtcblx0ICAgICAgICB0aGlzLnZhbHVlID0gbWF0aC5zY2FsZSh2YWx1ZSwgMCwgMSwgdGhpcy5taW4sIHRoaXMubWF4KTtcblx0ICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUodGhpcy52YWx1ZSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBub3JtYWxpemVkOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgICBHZXQgYSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhpcy52YWx1ZSAuIE5vdCBzZXR0YWJsZS5cblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBtYXRoLm5vcm1hbGl6ZSh0aGlzLnZhbHVlLCB0aGlzLm1pbiwgdGhpcy5tYXgpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBTdGVwO1xuXHR9KSgpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBTdGVwO1xuXG4vKioqLyB9KSxcbi8qIDEyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgX2ludGVyb3BSZXF1aXJlID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqW1wiZGVmYXVsdFwiXSA6IG9iajsgfTtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuXHQgIHZhbHVlOiB0cnVlXG5cdH0pO1xuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBtYXRoID0gX2ludGVyb3BSZXF1aXJlKF9fd2VicGFja19yZXF1aXJlX18oNSkpO1xuXHRcblx0dmFyIFRvZ2dsZU1vZGVsID0gX2ludGVyb3BSZXF1aXJlKF9fd2VicGFja19yZXF1aXJlX18oMTMpKTtcblx0XG5cdC8qXG5cdGhvdyB0byB1c2UgOlxuXHRcblx0ZGlhbC5pbnRlcmFjdGlvbiA9IG5ldyBIYW5kbGUoJ3JhZGlhbCcsJ3JlbGF0aXZlJyx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KTtcblx0Ly8gZGlhbC5pbnRlcmFjdGlvbi5tb2RlID0gJ3JlbGF0aXZlJ1xuXHQvLyBkaWFsLmludGVyYWN0aW9uLmRpcmVjdGlvbiA9ICdyYWRpYWwnXG5cdFxuXHRvbiBjbGljazpcblx0ZGlhbC5pbnRlcmFjdGlvbi5hbmNob3IgPSB0aGlzLm1vdXNlO1xuXHRcblx0b24gbW92ZTpcblx0ZGlhbC5pbnRlcmFjdGlvbi51cGRhdGUodGhpcy5tb3VzZSk7XG5cdFxuXHRjb25zb2xlLmxvZyggZGlhbC5pbnRlcmFjdGlvbi52YWx1ZSApOyBzaG91bGQgYmUgYSBub3JtYWxpemVkIHZhbHVlLlxuXHRcblx0Ki9cblx0XG5cdC8qXG5cdCAgYWJzb2x1dGUvcmVsYXRpdmUgYXJlIHByb3BlcnR5OiBtb2RlXG5cdCAgcmFkaWFsL3ZlcnRpY2FsL2hvcml6b250YWwvMmQgYXJlIHByb3BlcnR5OiBkaXJlY3Rpb25cblx0XG5cdCAgcGxhbiA6XG5cdFxuXHQgIGlmIHJlbGF0aXZlIC0tXG5cdCAgTk8gb24gY2xpY2ssIGdldCB2YWx1ZSBvZmZzZXQgYmV0d2VlbiBjdXJyZW50IHZhbHVlIGFuZCBjbGljayB2YWx1ZS5cblx0ICBOTyBvbiBtb3ZlLCB1c2UgY2xpY2sgdmFsdWUgLSBvZmZzZXRcblx0ICBJTlNURUFEXG5cdCAgdXNlIGRlbHRhIC0tIGJjIHZlcnRpY2FsIG1vdGlvbiBvbiBkaWFsIGlzIGltcG9zc2libGUgb3RoZXJ3aXNlXG5cdCAgYWxzbyBhbGxvdyB0byBzZXQgc2Vuc2l0aXZpdHlcblx0XG5cdCovXG5cdFxuXHR2YXIgSGFuZGxlID0gZXhwb3J0cy5IYW5kbGUgPSAoZnVuY3Rpb24gKCkge1xuXHQgIGZ1bmN0aW9uIEhhbmRsZSgpIHtcblx0ICAgIHZhciBtb2RlID0gYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyBcImFic29sdXRlXCIgOiBhcmd1bWVudHNbMF07XG5cdCAgICB2YXIgZGlyZWN0aW9uID0gYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyBcInZlcnRpY2FsXCIgOiBhcmd1bWVudHNbMV07XG5cdCAgICB2YXIgeGJvdW5kID0gYXJndW1lbnRzWzJdID09PSB1bmRlZmluZWQgPyBbMCwgMTAwXSA6IGFyZ3VtZW50c1syXTtcblx0ICAgIHZhciB5Ym91bmQgPSBhcmd1bWVudHNbM10gPT09IHVuZGVmaW5lZCA/IFswLCAxMDBdIDogYXJndW1lbnRzWzNdO1xuXHRcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBIYW5kbGUpO1xuXHRcblx0ICAgIHRoaXMubW9kZSA9IG1vZGU7XG5cdCAgICB0aGlzLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcblx0ICAgIHRoaXMucHJldmlvdXMgPSAwO1xuXHQgICAgdGhpcy52YWx1ZSA9IDA7XG5cdCAgICB0aGlzLnNlbnNpdGl2aXR5ID0gMTtcblx0ICAgIHRoaXMucmVzaXplKHhib3VuZCwgeWJvdW5kKTtcblx0ICB9XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhIYW5kbGUsIHtcblx0ICAgIHJlc2l6ZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVzaXplKHhib3VuZCwgeWJvdW5kKSB7XG5cdCAgICAgICAgdGhpcy5ib3VuZGFyeSA9IHtcblx0ICAgICAgICAgIG1pbjoge1xuXHQgICAgICAgICAgICB4OiB4Ym91bmRbMF0sXG5cdCAgICAgICAgICAgIHk6IHlib3VuZFswXVxuXHQgICAgICAgICAgfSxcblx0ICAgICAgICAgIG1heDoge1xuXHQgICAgICAgICAgICB4OiB4Ym91bmRbMV0sXG5cdCAgICAgICAgICAgIHk6IHlib3VuZFsxXVxuXHQgICAgICAgICAgfSxcblx0ICAgICAgICAgIGNlbnRlcjoge1xuXHQgICAgICAgICAgICB4OiAoeGJvdW5kWzFdIC0geGJvdW5kWzBdKSAvIDIgKyB4Ym91bmRbMF0sXG5cdCAgICAgICAgICAgIHk6ICh5Ym91bmRbMV0gLSB5Ym91bmRbMF0pIC8gMiArIHlib3VuZFswXVxuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH07XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBhbmNob3I6IHtcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAobW91c2UpIHtcblx0ICAgICAgICB0aGlzLl9hbmNob3IgPSB0aGlzLmNvbnZlcnRQb3NpdGlvblRvVmFsdWUobW91c2UpO1xuXHQgICAgICB9LFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYW5jaG9yO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgdXBkYXRlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGUobW91c2UpIHtcblx0ICAgICAgICBpZiAodGhpcy5tb2RlID09PSBcInJlbGF0aXZlXCIpIHtcblx0ICAgICAgICAgIHZhciBpbmNyZW1lbnQgPSB0aGlzLmNvbnZlcnRQb3NpdGlvblRvVmFsdWUobW91c2UpIC0gdGhpcy5hbmNob3I7XG5cdCAgICAgICAgICBpZiAoTWF0aC5hYnMoaW5jcmVtZW50KSA+IDAuNSkge1xuXHQgICAgICAgICAgICBpbmNyZW1lbnQgPSAwO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgdGhpcy5hbmNob3IgPSBtb3VzZTtcblx0ICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlICsgaW5jcmVtZW50ICogdGhpcy5zZW5zaXRpdml0eTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY29udmVydFBvc2l0aW9uVG9WYWx1ZShtb3VzZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMudmFsdWUgPSBtYXRoLmNsaXAodGhpcy52YWx1ZSwgMCwgMSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjb252ZXJ0UG9zaXRpb25Ub1ZhbHVlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb252ZXJ0UG9zaXRpb25Ub1ZhbHVlKGN1cnJlbnQpIHtcblx0ICAgICAgICBzd2l0Y2ggKHRoaXMuZGlyZWN0aW9uKSB7XG5cdCAgICAgICAgICBjYXNlIFwicmFkaWFsXCI6XG5cdCAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IG1hdGgudG9Qb2xhcihjdXJyZW50LnggLSB0aGlzLmJvdW5kYXJ5LmNlbnRlci54LCBjdXJyZW50LnkgLSB0aGlzLmJvdW5kYXJ5LmNlbnRlci55KTtcblx0ICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbi5hbmdsZSAvIChNYXRoLlBJICogMik7XG5cdCAgICAgICAgICAgIHBvc2l0aW9uID0gKHBvc2l0aW9uIC0gMC4yNSArIDEpICUgMTtcblx0ICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuXHQgICAgICAgICAgY2FzZSBcInZlcnRpY2FsXCI6XG5cdCAgICAgICAgICAgIHJldHVybiBtYXRoLnNjYWxlKGN1cnJlbnQueSwgdGhpcy5ib3VuZGFyeS5taW4ueSwgdGhpcy5ib3VuZGFyeS5tYXgueSwgMCwgMSk7XG5cdCAgICAgICAgICBjYXNlIFwiaG9yaXpvbnRhbFwiOlxuXHQgICAgICAgICAgICByZXR1cm4gbWF0aC5zY2FsZShjdXJyZW50LngsIHRoaXMuYm91bmRhcnkubWluLngsIHRoaXMuYm91bmRhcnkubWF4LngsIDAsIDEpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pO1xuXHRcblx0ICByZXR1cm4gSGFuZGxlO1xuXHR9KSgpO1xuXHRcblx0dmFyIEJ1dHRvbiA9IGV4cG9ydHMuQnV0dG9uID0gKGZ1bmN0aW9uICgpIHtcblx0ICBmdW5jdGlvbiBCdXR0b24oKSB7XG5cdCAgICB2YXIgbW9kZSA9IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gXCJidXR0b25cIiA6IGFyZ3VtZW50c1swXTtcblx0XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQnV0dG9uKTtcblx0XG5cdCAgICB0aGlzLm1vZGUgPSBtb2RlO1xuXHQgICAgdGhpcy5zdGF0ZSA9IG5ldyBUb2dnbGVNb2RlbCgpO1xuXHQgICAgdGhpcy5wYWludGJydXNoID0gZmFsc2U7XG5cdCAgfVxuXHRcblx0ICBfY3JlYXRlQ2xhc3MoQnV0dG9uLCB7XG5cdCAgICBjbGljazoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xpY2soKSB7XG5cdCAgICAgICAgc3dpdGNoICh0aGlzLm1vZGUpIHtcblx0ICAgICAgICAgIGNhc2UgXCJpbXB1bHNlXCI6XG5cdCAgICAgICAgICAgIHRoaXMuc3RhdGUub24oKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMudGltZW91dCkge1xuXHQgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5zdGF0ZS5vZmYuYmluZCh0aGlzKSwgMzApO1xuXHQgICAgICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwgdGhpcy5zdGF0ZSk7XG5cdCAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgY2FzZSBcImJ1dHRvblwiOlxuXHQgICAgICAgICAgICB0aGlzLnR1cm5PbigpO1xuXHQgICAgICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwgdGhpcy5zdGF0ZSk7XG5cdCAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgY2FzZSBcImFmdGVydG91Y2hcIjpcblx0ICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHtcblx0ICAgICAgICAgICAgICB4OiBtYXRoLmNsaXAodGhpcy5tb3VzZS54IC8gdGhpcy53aWR0aCwgMCwgMSksXG5cdCAgICAgICAgICAgICAgeTogbWF0aC5jbGlwKDEgLSB0aGlzLm1vdXNlLnkgLyB0aGlzLmhlaWdodCwgMCwgMSlcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgdGhpcy50dXJuT24oKTtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHtcblx0ICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcblx0ICAgICAgICAgICAgICB4OiB0aGlzLnBvc2l0aW9uLngsXG5cdCAgICAgICAgICAgICAgeTogdGhpcy5wb3NpdGlvbi55IH0pO1xuXHQgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgIGNhc2UgXCJ0b2dnbGVcIjpcblx0ICAgICAgICAgICAgdGhpcy5mbGlwKCk7XG5cdCAgICAgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB0aGlzLnN0YXRlKTtcblx0ICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbW92ZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gbW92ZSgpIHtcblx0ICAgICAgICBpZiAodGhpcy5tb2RlID09PSBcImFmdGVydG91Y2hcIikge1xuXHQgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHtcblx0ICAgICAgICAgICAgeDogbWF0aC5jbGlwKHRoaXMubW91c2UueCAvIHRoaXMud2lkdGgsIDAsIDEpLFxuXHQgICAgICAgICAgICB5OiBtYXRoLmNsaXAoMSAtIHRoaXMubW91c2UueSAvIHRoaXMuaGVpZ2h0LCAwLCAxKVxuXHQgICAgICAgICAgfTtcblx0ICAgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB7XG5cdCAgICAgICAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuXHQgICAgICAgICAgICB4OiB0aGlzLnBvc2l0aW9uLngsXG5cdCAgICAgICAgICAgIHk6IHRoaXMucG9zaXRpb24ueSB9KTtcblx0ICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVsZWFzZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVsZWFzZSgpIHtcblx0ICAgICAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xuXHQgICAgICAgICAgY2FzZSBcImJ1dHRvblwiOlxuXHQgICAgICAgICAgICB0aGlzLnR1cm5PZmYoKTtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMuc3RhdGUpO1xuXHQgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgIGNhc2UgXCJhZnRlcnRvdWNoXCI6XG5cdCAgICAgICAgICAgIHRoaXMudHVybk9mZigpO1xuXHQgICAgICAgICAgICB0aGlzLnBvc2l0aW9uID0ge1xuXHQgICAgICAgICAgICAgIHg6IHRoaXMubW91c2UueCAvIHRoaXMud2lkdGgsXG5cdCAgICAgICAgICAgICAgeTogMSAtIHRoaXMubW91c2UueSAvIHRoaXMuaGVpZ2h0XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB7XG5cdCAgICAgICAgICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG5cdCAgICAgICAgICAgICAgeDogdGhpcy5wb3NpdGlvbi54LFxuXHQgICAgICAgICAgICAgIHk6IHRoaXMucG9zaXRpb24ueSB9KTtcblx0ICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBCdXR0b247XG5cdH0pKCk7XG5cbi8qKiovIH0pLFxuLyogMTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBUb2dnbGUgPSAoZnVuY3Rpb24gKCkge1xuXHQgIGZ1bmN0aW9uIFRvZ2dsZShzdGF0ZSkge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRvZ2dsZSk7XG5cdFxuXHQgICAgdGhpcy5zdGF0ZSA9IHN0YXRlIHx8IGZhbHNlO1xuXHQgIH1cblx0XG5cdCAgX2NyZWF0ZUNsYXNzKFRvZ2dsZSwge1xuXHQgICAgZmxpcDoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gZmxpcChzdGF0ZSkge1xuXHQgICAgICAgIGlmIChzdGF0ZSB8fCBzdGF0ZSA9PT0gZmFsc2UpIHtcblx0ICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy5zdGF0ZSA9ICF0aGlzLnN0YXRlO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBvbigpIHtcblx0ICAgICAgICB0aGlzLnN0YXRlID0gdHJ1ZTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG9mZjoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gb2ZmKCkge1xuXHQgICAgICAgIHRoaXMuc3RhdGUgPSBmYWxzZTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pO1xuXHRcblx0ICByZXR1cm4gVG9nZ2xlO1xuXHR9KSgpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBUb2dnbGU7XG5cbi8qKiovIH0pLFxuLyogMTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9O1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHsgdmFyIHByb3AgPSBwcm9wc1trZXldOyBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChwcm9wLnZhbHVlKSBwcm9wLndyaXRhYmxlID0gdHJ1ZTsgfSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKTsgfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXHRcblx0dmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyByZXR1cm4gZ2V0KHBhcmVudCwgcHJvcGVydHksIHJlY2VpdmVyKTsgfSB9IGVsc2UgaWYgKFwidmFsdWVcIiBpbiBkZXNjICYmIGRlc2Mud3JpdGFibGUpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9O1xuXHRcblx0dmFyIF9pbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9O1xuXHRcblx0dmFyIF9jbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9O1xuXHRcblx0dmFyIHN2ZyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cdHZhciBJbnRlcmZhY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xuXHR2YXIgU3RlcCA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xuXHRcblx0dmFyIEludGVyYWN0aW9uID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX193ZWJwYWNrX3JlcXVpcmVfXygxMikpO1xuXHRcblx0LyoqXG5cdCogU2xpZGVyXG5cdCpcblx0KiBAZGVzY3JpcHRpb24gSG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBzbGlkZXIgd2l0aCBzZXR0YWJsZSBpbnRlcmFjdGlvbiBtb2Rlcy5cblx0KlxuXHQqIEBkZW1vIDxzcGFuIG5leHVzLXVpPVwic2xpZGVyXCIgc3RlcD0wLjI+PC9zcGFuPlxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgc2xpZGVyID0gbmV3IE5leHVzLlNsaWRlcignI3RhcmdldCcpXG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciBzbGlkZXIgPSBuZXcgTmV4dXMuU2xpZGVyKCcjdGFyZ2V0Jyx7XG5cdCogICAgICdzaXplJzogWzEyMCwyMF0sXG5cdCogICAgICdtb2RlJzogJ3JlbGF0aXZlJywgIC8vICdyZWxhdGl2ZScgb3IgJ2Fic29sdXRlJ1xuXHQqICAgICAnbWluJzogMCxcblx0KiAgICAgJ21heCc6IDEsXG5cdCogICAgICdzdGVwJzogMCxcblx0KiAgICAgJ3ZhbHVlJzogMFxuXHQqIH0pXG5cdCpcblx0KiBAb3V0cHV0XG5cdCogY2hhbmdlXG5cdCogRmlyZXMgd2hlbiB0aGUgaW50ZXJmYWNlJ3MgdmFsdWUgY2hhbmdlcy4gPGJyPlxuXHQqIEV2ZW50IGRhdGE6IDxpPm51bWJlcjwvaT4gVGhlIG51bWJlciB2YWx1ZSBvZiB0aGUgaW50ZXJmYWNlLlxuXHQqXG5cdCogQG91dHB1dGV4YW1wbGVcblx0KiBzbGlkZXIub24oJ2NoYW5nZScsZnVuY3Rpb24odikge1xuXHQqICAgY29uc29sZS5sb2codik7XG5cdCogfSlcblx0KlxuXHQqXG5cdCovXG5cdFxuXHR2YXIgU2xpZGVyID0gKGZ1bmN0aW9uIChfSW50ZXJmYWNlKSB7XG5cdCAgZnVuY3Rpb24gU2xpZGVyKCkge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNsaWRlcik7XG5cdFxuXHQgICAgdmFyIG9wdGlvbnMgPSBbXCJtaW5cIiwgXCJtYXhcIiwgXCJ2YWx1ZVwiXTtcblx0XG5cdCAgICB2YXIgZGVmYXVsdHMgPSB7XG5cdCAgICAgIHNpemU6IFsxMjAsIDIwXSxcblx0ICAgICAgbW9kZTogXCJyZWxhdGl2ZVwiLCAvLyAncmVsYXRpdmUnIG9yICdhYnNvbHV0ZSdcblx0ICAgICAgbWluOiAwLFxuXHQgICAgICBtYXg6IDEsXG5cdCAgICAgIHN0ZXA6IDAsXG5cdCAgICAgIHZhbHVlOiAwXG5cdCAgICB9O1xuXHRcblx0ICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKFNsaWRlci5wcm90b3R5cGUpLCBcImNvbnN0cnVjdG9yXCIsIHRoaXMpLmNhbGwodGhpcywgYXJndW1lbnRzLCBvcHRpb25zLCBkZWZhdWx0cyk7XG5cdFxuXHQgICAgdGhpcy5vcmllbnRhdGlvbiA9IFwidmVydGljYWxcIjsgLy8gVGhpcyB3aWxsIGNoYW5nZSBhdXRvbWF0aWNhbGx5IHRvICdob3Jpem9udGFsJ2lmIHRoZSBpbnRlcmZhY2UgaXMgd2lkZXIgdGhhbiBpdCBpcyB0YWxsLlxuXHRcblx0ICAgIHRoaXMuX3ZhbHVlID0gbmV3IFN0ZXAodGhpcy5zZXR0aW5ncy5taW4sIHRoaXMuc2V0dGluZ3MubWF4LCB0aGlzLnNldHRpbmdzLnN0ZXAsIHRoaXMuc2V0dGluZ3MudmFsdWUpO1xuXHRcblx0ICAgIHRoaXMucG9zaXRpb24gPSBuZXcgSW50ZXJhY3Rpb24uSGFuZGxlKHRoaXMuc2V0dGluZ3MubW9kZSwgdGhpcy5vcmllbnRhdGlvbiwgWzAsIHRoaXMud2lkdGhdLCBbdGhpcy5oZWlnaHQsIDBdKTtcblx0ICAgIHRoaXMucG9zaXRpb24udmFsdWUgPSB0aGlzLl92YWx1ZS5ub3JtYWxpemVkO1xuXHRcblx0ICAgIHRoaXMuaW5pdCgpO1xuXHRcblx0ICAgIHRoaXMucG9zaXRpb24uZGlyZWN0aW9uID0gdGhpcy5vcmllbnRhdGlvbjtcblx0XG5cdCAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwgdGhpcy52YWx1ZSk7XG5cdCAgfVxuXHRcblx0ICBfaW5oZXJpdHMoU2xpZGVyLCBfSW50ZXJmYWNlKTtcblx0XG5cdCAgX2NyZWF0ZUNsYXNzKFNsaWRlciwge1xuXHQgICAgYnVpbGRJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkSW50ZXJmYWNlKCkge1xuXHRcblx0ICAgICAgICB0aGlzLmJhciA9IHN2Zy5jcmVhdGUoXCJyZWN0XCIpO1xuXHQgICAgICAgIHRoaXMuZmlsbGJhciA9IHN2Zy5jcmVhdGUoXCJyZWN0XCIpO1xuXHQgICAgICAgIHRoaXMua25vYiA9IHN2Zy5jcmVhdGUoXCJjaXJjbGVcIik7XG5cdFxuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmJhcik7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZmlsbGJhcik7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMua25vYik7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzaXplSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaXplSW50ZXJmYWNlKCkge1xuXHRcblx0ICAgICAgICBpZiAodGhpcy53aWR0aCA8IHRoaXMuaGVpZ2h0KSB7XG5cdCAgICAgICAgICB0aGlzLm9yaWVudGF0aW9uID0gXCJ2ZXJ0aWNhbFwiO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLm9yaWVudGF0aW9uID0gXCJob3Jpem9udGFsXCI7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICBpZiAodGhpcy5wb3NpdGlvbikge1xuXHQgICAgICAgICAgdGhpcy5wb3NpdGlvbi5yZXNpemUoWzAsIHRoaXMud2lkdGhdLCBbdGhpcy5oZWlnaHQsIDBdKTtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIHZhciB4ID0gdW5kZWZpbmVkLFxuXHQgICAgICAgICAgICB5ID0gdW5kZWZpbmVkLFxuXHQgICAgICAgICAgICB3ID0gdW5kZWZpbmVkLFxuXHQgICAgICAgICAgICBoID0gdW5kZWZpbmVkLFxuXHQgICAgICAgICAgICBiYXJPZmZzZXQgPSB1bmRlZmluZWQsXG5cdCAgICAgICAgICAgIGNvcm5lclJhZGl1cyA9IHVuZGVmaW5lZDtcblx0ICAgICAgICB0aGlzLmtub2JEYXRhID0ge1xuXHQgICAgICAgICAgbGV2ZWw6IDAsXG5cdCAgICAgICAgICByOiAwXG5cdCAgICAgICAgfTtcblx0XG5cdCAgICAgICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuXHQgICAgICAgICAgdGhpcy50aGlja25lc3MgPSB0aGlzLndpZHRoIC8gMjtcblx0ICAgICAgICAgIHggPSB0aGlzLndpZHRoIC8gMjtcblx0ICAgICAgICAgIHkgPSAwO1xuXHQgICAgICAgICAgdyA9IHRoaXMudGhpY2tuZXNzO1xuXHQgICAgICAgICAgaCA9IHRoaXMuaGVpZ2h0O1xuXHQgICAgICAgICAgdGhpcy5rbm9iRGF0YS5yID0gdGhpcy50aGlja25lc3MgKiAwLjg7XG5cdCAgICAgICAgICB0aGlzLmtub2JEYXRhLmxldmVsID0gaCAtIHRoaXMua25vYkRhdGEuciAtIHRoaXMubm9ybWFsaXplZCAqIChoIC0gdGhpcy5rbm9iRGF0YS5yICogMik7XG5cdCAgICAgICAgICBiYXJPZmZzZXQgPSBcInRyYW5zbGF0ZShcIiArIHRoaXMudGhpY2tuZXNzICogLTEgLyAyICsgXCIsMClcIjtcblx0ICAgICAgICAgIGNvcm5lclJhZGl1cyA9IHcgLyAyO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLnRoaWNrbmVzcyA9IHRoaXMuaGVpZ2h0IC8gMjtcblx0ICAgICAgICAgIHggPSAwO1xuXHQgICAgICAgICAgeSA9IHRoaXMuaGVpZ2h0IC8gMjtcblx0ICAgICAgICAgIHcgPSB0aGlzLndpZHRoO1xuXHQgICAgICAgICAgaCA9IHRoaXMudGhpY2tuZXNzO1xuXHQgICAgICAgICAgdGhpcy5rbm9iRGF0YS5yID0gdGhpcy50aGlja25lc3MgKiAwLjg7XG5cdCAgICAgICAgICB0aGlzLmtub2JEYXRhLmxldmVsID0gdGhpcy5ub3JtYWxpemVkICogKHcgLSB0aGlzLmtub2JEYXRhLnIgKiAyKSArIHRoaXMua25vYkRhdGEucjtcblx0ICAgICAgICAgIGJhck9mZnNldCA9IFwidHJhbnNsYXRlKDAsXCIgKyB0aGlzLnRoaWNrbmVzcyAqIC0xIC8gMiArIFwiKVwiO1xuXHQgICAgICAgICAgY29ybmVyUmFkaXVzID0gaCAvIDI7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJ4XCIsIHgpO1xuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcInlcIiwgeSk7XG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsIGJhck9mZnNldCk7XG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwicnhcIiwgY29ybmVyUmFkaXVzKTsgLy8gY29ybmVyIHJhZGl1c1xuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcInJ5XCIsIGNvcm5lclJhZGl1cyk7XG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgdyk7XG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGgpO1xuXHRcblx0ICAgICAgICBpZiAodGhpcy5vcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG5cdCAgICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwieFwiLCB4KTtcblx0ICAgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJ5XCIsIHRoaXMua25vYkRhdGEubGV2ZWwpO1xuXHQgICAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIHcpO1xuXHQgICAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBoIC0gdGhpcy5rbm9iRGF0YS5sZXZlbCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJ4XCIsIDApO1xuXHQgICAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcInlcIiwgeSk7XG5cdCAgICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgdGhpcy5rbm9iRGF0YS5sZXZlbCk7XG5cdCAgICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsIGJhck9mZnNldCk7XG5cdCAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcInJ4XCIsIGNvcm5lclJhZGl1cyk7XG5cdCAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcInJ5XCIsIGNvcm5lclJhZGl1cyk7XG5cdFxuXHQgICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcblx0ICAgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJjeFwiLCB4KTtcblx0ICAgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJjeVwiLCB0aGlzLmtub2JEYXRhLmxldmVsKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImN4XCIsIHRoaXMua25vYkRhdGEubGV2ZWwpO1xuXHQgICAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImN5XCIsIHkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiclwiLCB0aGlzLmtub2JEYXRhLnIpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29sb3JJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbG9ySW50ZXJmYWNlKCkge1xuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5jb2xvcnMuZmlsbCk7XG5cdCAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5jb2xvcnMuYWNjZW50KTtcblx0ICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmNvbG9ycy5hY2NlbnQpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVuZGVyOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLmNsaWNrZWQpIHtcblx0ICAgICAgICAgIHRoaXMua25vYkRhdGEuciA9IHRoaXMudGhpY2tuZXNzICogMC43NTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcInJcIiwgdGhpcy5rbm9iRGF0YS5yKTtcblx0XG5cdCAgICAgICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuXHQgICAgICAgICAgdGhpcy5rbm9iRGF0YS5sZXZlbCA9IHRoaXMua25vYkRhdGEuciArIHRoaXMuX3ZhbHVlLm5vcm1hbGl6ZWQgKiAodGhpcy5oZWlnaHQgLSB0aGlzLmtub2JEYXRhLnIgKiAyKTtcblx0ICAgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJjeVwiLCB0aGlzLmhlaWdodCAtIHRoaXMua25vYkRhdGEubGV2ZWwpO1xuXHQgICAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcInlcIiwgdGhpcy5oZWlnaHQgLSB0aGlzLmtub2JEYXRhLmxldmVsKTtcblx0ICAgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgdGhpcy5rbm9iRGF0YS5sZXZlbCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMua25vYkRhdGEubGV2ZWwgPSB0aGlzLl92YWx1ZS5ub3JtYWxpemVkICogKHRoaXMud2lkdGggLSB0aGlzLmtub2JEYXRhLnIgKiAyKSArIHRoaXMua25vYkRhdGEucjtcblx0ICAgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJjeFwiLCB0aGlzLmtub2JEYXRhLmxldmVsKTtcblx0ICAgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJ4XCIsIDApO1xuXHQgICAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIHRoaXMua25vYkRhdGEubGV2ZWwpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNsaWNrOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGljaygpIHtcblx0ICAgICAgICB0aGlzLmtub2JEYXRhLnIgPSB0aGlzLnRoaWNrbmVzcyAqIDAuOTtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uLmFuY2hvciA9IHRoaXMubW91c2U7XG5cdCAgICAgICAgdGhpcy5tb3ZlKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtb3ZlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBtb3ZlKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmNsaWNrZWQpIHtcblx0ICAgICAgICAgIHRoaXMucG9zaXRpb24udXBkYXRlKHRoaXMubW91c2UpO1xuXHQgICAgICAgICAgdGhpcy5fdmFsdWUudXBkYXRlTm9ybWFsKHRoaXMucG9zaXRpb24udmFsdWUpO1xuXHQgICAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMuX3ZhbHVlLnZhbHVlKTtcblx0ICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVsZWFzZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVsZWFzZSgpIHtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbm9ybWFsaXplZDoge1xuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUubm9ybWFsaXplZDtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHZhbHVlOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgVGhlIHNsaWRlcidzIGN1cnJlbnQgdmFsdWUuIElmIHNldCBtYW51YWxseSwgd2lsbCB1cGRhdGUgdGhlIGludGVyZmFjZSBhbmQgdHJpZ2dlciB0aGUgb3V0cHV0IGV2ZW50LlxuXHQgICAgICBAdHlwZSB7bnVtYmVyfVxuXHQgICAgICBAZXhhbXBsZSBzbGlkZXIudmFsdWUgPSAxMDtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZS52YWx1ZTtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuXHQgICAgICAgIHRoaXMuX3ZhbHVlLnVwZGF0ZSh2KTtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uLnZhbHVlID0gdGhpcy5fdmFsdWUubm9ybWFsaXplZDtcblx0ICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwgdGhpcy5fdmFsdWUudmFsdWUpO1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtaW46IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBMb3dlciBsaW1pdCBvZiB0aGUgc2xpZGVycydzIG91dHB1dCByYW5nZVxuXHQgICAgICBAdHlwZSB7bnVtYmVyfVxuXHQgICAgICBAZXhhbXBsZSBzbGlkZXIubWluID0gMTAwMDtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZS5taW47XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLl92YWx1ZS5taW4gPSB2O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbWF4OiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgVXBwZXIgbGltaXQgb2YgdGhlIHNsaWRlcidzIG91dHB1dCByYW5nZVxuXHQgICAgICBAdHlwZSB7bnVtYmVyfVxuXHQgICAgICBAZXhhbXBsZSBzbGlkZXIubWF4ID0gMTAwMDtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZS5tYXg7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLl92YWx1ZS5tYXggPSB2O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc3RlcDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFRoZSBpbmNyZW1lbnQgdGhhdCB0aGUgc2xpZGVyJ3MgdmFsdWUgY2hhbmdlcyBieS5cblx0ICAgICAgQHR5cGUge251bWJlcn1cblx0ICAgICAgQGV4YW1wbGUgc2xpZGVyLnN0ZXAgPSA1O1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlLnN0ZXA7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLl92YWx1ZS5zdGVwID0gdjtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1vZGU6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBBYnNvbHV0ZSBtb2RlIChzbGlkZXIncyB2YWx1ZSBqdW1wcyB0byBtb3VzZSBjbGljayBwb3NpdGlvbikgb3IgcmVsYXRpdmUgbW9kZSAobW91c2UgZHJhZyBjaGFuZ2VzIHZhbHVlIHJlbGF0aXZlIHRvIGl0cyBjdXJyZW50IHBvc2l0aW9uKS4gRGVmYXVsdDogXCJyZWxhdGl2ZVwiLlxuXHQgICAgICBAdHlwZSB7c3RyaW5nfVxuXHQgICAgICBAZXhhbXBsZSBzbGlkZXIubW9kZSA9IFwicmVsYXRpdmVcIjtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLm1vZGU7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uLm1vZGUgPSB2O1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBTbGlkZXI7XG5cdH0pKEludGVyZmFjZSk7XG5cdFxuXHRtb2R1bGUuZXhwb3J0cyA9IFNsaWRlcjtcblxuLyoqKi8gfSksXG4vKiAxNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHsgdmFyIHByb3AgPSBwcm9wc1trZXldOyBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChwcm9wLnZhbHVlKSBwcm9wLndyaXRhYmxlID0gdHJ1ZTsgfSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKTsgfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXHRcblx0dmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyByZXR1cm4gZ2V0KHBhcmVudCwgcHJvcGVydHksIHJlY2VpdmVyKTsgfSB9IGVsc2UgaWYgKFwidmFsdWVcIiBpbiBkZXNjICYmIGRlc2Mud3JpdGFibGUpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9O1xuXHRcblx0dmFyIF9pbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9O1xuXHRcblx0dmFyIF9jbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9O1xuXHRcblx0dmFyIHN2ZyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cdHZhciBUb2dnbGVNb2RlbCA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xuXHR2YXIgSW50ZXJmYWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcblx0XG5cdC8qKlxuXHQqIFRvZ2dsZVxuXHQqXG5cdCogQGRlc2NyaXB0aW9uIEJpbmFyeSBzd2l0Y2hcblx0KlxuXHQqIEBkZW1vIDxzcGFuIG5leHVzLXVpPVwidG9nZ2xlXCI+PC9zcGFuPlxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgdG9nZ2xlID0gbmV3IE5leHVzLlRvZ2dsZSgnI3RhcmdldCcpXG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciB0b2dnbGUgPSBuZXcgTmV4dXMuVG9nZ2xlKCcjdGFyZ2V0Jyx7XG5cdCogICAgICdzaXplJzogWzQwLDIwXSxcblx0KiAgICAgJ3N0YXRlJzogZmFsc2Vcblx0KiB9KVxuXHQqXG5cdCogQG91dHB1dFxuXHQqIGNoYW5nZVxuXHQqIEZpcmVzIGFueSB0aW1lIHRoZSBpbnRlcmZhY2UncyB2YWx1ZSBjaGFuZ2VzLiA8YnI+XG5cdCogUGFyYW1ldGVyOiBUaGUgYm9vbGVhbiBzdGF0ZSBvZiB0aGUgaW50ZXJmYWNlLlxuXHQqXG5cdCogQG91dHB1dGV4YW1wbGVcblx0KiB0b2dnbGUub24oJ2NoYW5nZScsZnVuY3Rpb24odikge1xuXHQqICAgY29uc29sZS5sb2codik7XG5cdCogfSlcblx0KlxuXHQqXG5cdCovXG5cdFxuXHR2YXIgVG9nZ2xlID0gKGZ1bmN0aW9uIChfSW50ZXJmYWNlKSB7XG5cdCAgZnVuY3Rpb24gVG9nZ2xlKCkge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRvZ2dsZSk7XG5cdFxuXHQgICAgdmFyIG9wdGlvbnMgPSBbXCJ2YWx1ZVwiXTtcblx0XG5cdCAgICB2YXIgZGVmYXVsdHMgPSB7XG5cdCAgICAgIHNpemU6IFs0MCwgMjBdLFxuXHQgICAgICB0YXJnZXQ6IGZhbHNlLFxuXHQgICAgICBzdGF0ZTogZmFsc2Vcblx0ICAgIH07XG5cdFxuXHQgICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoVG9nZ2xlLnByb3RvdHlwZSksIFwiY29uc3RydWN0b3JcIiwgdGhpcykuY2FsbCh0aGlzLCBhcmd1bWVudHMsIG9wdGlvbnMsIGRlZmF1bHRzKTtcblx0XG5cdCAgICB0aGlzLl9zdGF0ZSA9IG5ldyBUb2dnbGVNb2RlbCh0aGlzLnNldHRpbmdzLnN0YXRlKTtcblx0XG5cdCAgICB0aGlzLmluaXQoKTtcblx0ICB9XG5cdFxuXHQgIF9pbmhlcml0cyhUb2dnbGUsIF9JbnRlcmZhY2UpO1xuXHRcblx0ICBfY3JlYXRlQ2xhc3MoVG9nZ2xlLCB7XG5cdCAgICBidWlsZEludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIHRoaXMuYmFyID0gc3ZnLmNyZWF0ZShcInJlY3RcIik7XG5cdCAgICAgICAgdGhpcy5rbm9iID0gc3ZnLmNyZWF0ZShcImNpcmNsZVwiKTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5iYXIpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmtub2IpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2l6ZUludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc2l6ZUludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgaWYgKHRoaXMuaGVpZ2h0IDwgdGhpcy53aWR0aCAvIDIpIHtcblx0ICAgICAgICAgIHRoaXMua25vYlNpemUgPSB0aGlzLmhlaWdodCAvIDI7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMua25vYlNpemUgPSB0aGlzLndpZHRoIC8gNDtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcInhcIiwgdGhpcy53aWR0aCAvIDIgLSB0aGlzLmtub2JTaXplICogMS41KTtcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJ5XCIsIHRoaXMuaGVpZ2h0IC8gMiAtIHRoaXMua25vYlNpemUgLyAyKTtcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJyeFwiLCB0aGlzLmtub2JTaXplIC8gMik7XG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwicnlcIiwgdGhpcy5rbm9iU2l6ZSAvIDIpO1xuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIHRoaXMua25vYlNpemUgKiAzKTtcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgdGhpcy5rbm9iU2l6ZSk7XG5cdFxuXHQgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJjeFwiLCB0aGlzLndpZHRoIC8gMiAtIHRoaXMua25vYlNpemUpO1xuXHQgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJjeVwiLCB0aGlzLmhlaWdodCAvIDIpO1xuXHQgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJyXCIsIHRoaXMua25vYlNpemUpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29sb3JJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbG9ySW50ZXJmYWNlKCkge1xuXHQgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLmFjY2VudCk7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlbmRlcjoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHQgICAgICAgIGlmICghdGhpcy5zdGF0ZSkge1xuXHQgICAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImN4XCIsIHRoaXMud2lkdGggLyAyIC0gdGhpcy5rbm9iU2l6ZSk7XG5cdCAgICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLmZpbGwpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiY3hcIiwgdGhpcy53aWR0aCAvIDIgKyB0aGlzLmtub2JTaXplKTtcblx0ICAgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5jb2xvcnMuYWNjZW50KTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjbGljazoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xpY2soKSB7XG5cdCAgICAgICAgdGhpcy5mbGlwKCk7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwgdGhpcy5zdGF0ZSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzdGF0ZToge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFdoZXRoZXIgdGhlIHRvZ2dsZSBpcyBjdXJyZW50bHkgb24gb3Igb2ZmLiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgd2lsbCB1cGRhdGUgdGhlIHRvZ2dsZSBpbnRlcmZhY2UgYW5kIHRyaWdnZXIgdGhlIG91dHB1dCBldmVudC5cblx0ICAgICAgQHR5cGUge2Jvb2xlYW59XG5cdCAgICAgIEBleGFtcGxlIHRvZ2dsZS5zdGF0ZSA9IGZhbHNlO1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLnN0YXRlO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZsaXAodmFsdWUpO1xuXHQgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB0aGlzLnN0YXRlKTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZmxpcDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgICogU3dpdGNoIHRoZSB0b2dnbGUgc3RhdGUgdG8gaXRzIG9wcG9zaXRlIHN0YXRlXG5cdCAgICAgICogQGV4YW1wbGVcblx0ICAgICAgKiB0b2dnbGUuZmxpcCgpO1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZsaXAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZmxpcCgpO1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIFRvZ2dsZTtcblx0fSkoSW50ZXJmYWNlKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gVG9nZ2xlO1xuXG4vKioqLyB9KSxcbi8qIDE2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGtleSBpbiBwcm9wcykgeyB2YXIgcHJvcCA9IHByb3BzW2tleV07IHByb3AuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKHByb3AudmFsdWUpIHByb3Aud3JpdGFibGUgPSB0cnVlOyB9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpOyB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHR2YXIgX2dldCA9IGZ1bmN0aW9uIGdldChvYmplY3QsIHByb3BlcnR5LCByZWNlaXZlcikgeyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IHJldHVybiBnZXQocGFyZW50LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpOyB9IH0gZWxzZSBpZiAoXCJ2YWx1ZVwiIGluIGRlc2MgJiYgZGVzYy53cml0YWJsZSkgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH07XG5cdFxuXHR2YXIgX2luaGVyaXRzID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH07XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH07XG5cdFxuXHR2YXIgc3ZnID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblx0dmFyIEJ1dHRvblRlbXBsYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG5cdFxuXHQvKipcblx0KiBCdXR0b25cblx0KlxuXHQqIEBkZXNjcmlwdGlvbiBDaXJjdWxhciBidXR0b24gd2l0aCBvcHRpb25hbCBhZnRlcnRvdWNoLlxuXHQqXG5cdCogQGRlbW8gPHNwYW4gbmV4dXMtdWk9XCJidXR0b25cIj48L3NwYW4+XG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciBidXR0b24gPSBuZXcgTmV4dXMuQnV0dG9uKCcjdGFyZ2V0Jylcblx0KlxuXHQqIEBleGFtcGxlXG5cdCogdmFyIGJ1dHRvbiA9IG5ldyBOZXh1cy5CdXR0b24oJyN0YXJnZXQnLHtcblx0KiAgICdzaXplJzogWzgwLDgwXSxcblx0KiAgICdtb2RlJzogJ2FmdGVydG91Y2gnLFxuXHQqICAgJ3N0YXRlJzogZmFsc2Vcblx0KiB9KVxuXHQqXG5cdCogQG91dHB1dFxuXHQqIGNoYW5nZVxuXHQqIEZpcmVzIGFueSB0aW1lIHRoZSBpbnRlcmZhY2UncyB2YWx1ZSBjaGFuZ2VzLiA8YnI+XG5cdCogSW4gPGI+YnV0dG9uIG1vZGU8L2I+LCA8Yj50b2dnbGUgbW9kZTwvYj4sIGFuZCA8Yj5pbXB1bHNlIG1vZGU8L2I+LCB0aGUgb3V0cHV0IGRhdGEgaXMgYSBib29sZWFuIGRlc2NyaWJpbmcgdGhlIHN0YXRlIG9mIHRoZSBidXR0b24uPGJyPlxuXHQqIEluIDxiPmFmdGVydG91Y2ggbW9kZTwvYj4sIHRoZSBvdXRwdXQgZGF0YSBpcyBhbiBvYmplY3QgY29udGFpbmluZyB4ICgwLTEpIGFuZCB5ICgwLTEpIHBvc2l0aW9ucyBvZiBhZnRlcnRvdWNoLlxuXHQqXG5cdCogQG91dHB1dGV4YW1wbGVcblx0KiBidXR0b24ub24oJ2NoYW5nZScsZnVuY3Rpb24odikge1xuXHQqICAgLy8gdiBpcyB0aGUgdmFsdWUgb2YgdGhlIGJ1dHRvblxuXHQqICAgY29uc29sZS5sb2codik7XG5cdCogfSlcblx0KlxuXHQqL1xuXHRcblx0dmFyIEJ1dHRvbiA9IChmdW5jdGlvbiAoX0J1dHRvblRlbXBsYXRlKSB7XG5cdCAgZnVuY3Rpb24gQnV0dG9uKCkge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJ1dHRvbik7XG5cdFxuXHQgICAgdmFyIG9wdGlvbnMgPSBbXCJtb2RlXCJdO1xuXHRcblx0ICAgIHZhciBkZWZhdWx0cyA9IHtcblx0ICAgICAgc2l6ZTogWzgwLCA4MF0sXG5cdCAgICAgIG1vZGU6IFwiYWZ0ZXJ0b3VjaFwiLCAvLyBidXR0b24sIGFmdGVydG91Y2gsIGltcHVsc2UsIHRvZ2dsZVxuXHQgICAgICBzdGF0ZTogZmFsc2Vcblx0ICAgIH07XG5cdFxuXHQgICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoQnV0dG9uLnByb3RvdHlwZSksIFwiY29uc3RydWN0b3JcIiwgdGhpcykuY2FsbCh0aGlzLCBhcmd1bWVudHMsIG9wdGlvbnMsIGRlZmF1bHRzKTtcblx0XG5cdCAgICAvKipcblx0ICAgICogSW50ZXJhY3Rpb24gbW9kZTogc3VwcG9ydHMgXCJidXR0b25cIiwgXCJhZnRlcnRvdWNoXCIsIFwiaW1wdWxzZVwiLCBvciBcInRvZ2dsZVwiXG5cdCAgICAqIEB0eXBlIHtzdHJpbmd9XG5cdCAgICAqIEBleGFtcGxlIGJ1dHRvbi5tb2RlID0gJ3RvZ2dsZSc7XG5cdCAgICAqL1xuXHQgICAgdGhpcy5tb2RlID0gdGhpcy5zZXR0aW5ncy5tb2RlO1xuXHRcblx0ICAgIHRoaXMuaW5pdCgpO1xuXHQgICAgdGhpcy5yZW5kZXIoKTtcblx0ICB9XG5cdFxuXHQgIF9pbmhlcml0cyhCdXR0b24sIF9CdXR0b25UZW1wbGF0ZSk7XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhCdXR0b24sIHtcblx0ICAgIGJ1aWxkSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEludGVyZmFjZSgpIHtcblx0ICAgICAgICB0aGlzLnBhZCA9IHN2Zy5jcmVhdGUoXCJjaXJjbGVcIik7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMucGFkKTtcblx0XG5cdCAgICAgICAgdGhpcy5pbnRlcmFjdGlvblRhcmdldCA9IHRoaXMucGFkO1xuXHRcblx0ICAgICAgICAvLyBvbmx5IHVzZWQgaWYgaW4gJ2FmdGVydG91Y2gnIG1vZGVcblx0ICAgICAgICB0aGlzLmRlZnMgPSBzdmcuY3JlYXRlKFwiZGVmc1wiKTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5kZWZzKTtcblx0XG5cdCAgICAgICAgdGhpcy5ncmFkaWVudCA9IHN2Zy5yYWRpYWxHcmFkaWVudCh0aGlzLmRlZnMsIDIpO1xuXHRcblx0ICAgICAgICB0aGlzLmdyYWRpZW50LnN0b3BzWzBdLnNldEF0dHJpYnV0ZShcIm9mZnNldFwiLCBcIjMwJVwiKTtcblx0XG5cdCAgICAgICAgdGhpcy5ncmFkaWVudC5zdG9wc1sxXS5zZXRBdHRyaWJ1dGUoXCJvZmZzZXRcIiwgXCIxMDAlXCIpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2l6ZUludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc2l6ZUludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwiY3hcIiwgdGhpcy53aWR0aCAvIDIpO1xuXHQgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcImN5XCIsIHRoaXMuaGVpZ2h0IC8gMik7XG5cdCAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwiclwiLCBNYXRoLm1pbih0aGlzLndpZHRoLCB0aGlzLmhlaWdodCkgLyAyIC0gdGhpcy53aWR0aCAvIDQwKTtcblx0ICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIiwgdGhpcy53aWR0aCAvIDIwKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNvbG9ySW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb2xvckludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgdGhpcy5ncmFkaWVudC5zdG9wc1swXS5zZXRBdHRyaWJ1dGUoXCJzdG9wLWNvbG9yXCIsIHRoaXMuY29sb3JzLmFjY2VudCk7XG5cdCAgICAgICAgdGhpcy5ncmFkaWVudC5zdG9wc1sxXS5zZXRBdHRyaWJ1dGUoXCJzdG9wLWNvbG9yXCIsIHRoaXMuY29sb3JzLmZpbGwpO1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByZW5kZXI6IHtcblx0XG5cdCAgICAgIC8qXG5cdCAgICAgICogVXBkYXRlIHRoZSB2aXN1YWwgaW50ZXJmYWNlIHVzaW5nIGl0cyBjdXJyZW50IHN0YXRlXG5cdCAgICAgICpcblx0ICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAqIGJ1dHRvbi5yZW5kZXIoKTtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLnN0YXRlKSB7XG5cdCAgICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLmZpbGwpO1xuXHQgICAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIHRoaXMuY29sb3JzLm1lZGl1bUxpZ2h0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gXCJhZnRlcnRvdWNoXCIpIHtcblx0ICAgICAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIFwidXJsKCNcIiArIHRoaXMuZ3JhZGllbnQuaWQgKyBcIilcIik7XG5cdCAgICAgICAgICAgIHRoaXMuZ3JhZGllbnQuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJjeFwiLCB0aGlzLnBvc2l0aW9uLnggKiAxMDAgKyBcIiVcIik7XG5cdCAgICAgICAgICAgIHRoaXMuZ3JhZGllbnQuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJjeVwiLCAoMSAtIHRoaXMucG9zaXRpb24ueSkgKiAxMDAgKyBcIiVcIik7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgdGhpcy5jb2xvcnMuYWNjZW50KTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5jb2xvcnMuYWNjZW50KTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIEJ1dHRvbjtcblx0fSkoQnV0dG9uVGVtcGxhdGUpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBCdXR0b247XG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7IH0gfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gZGVzYyAmJiBkZXNjLndyaXRhYmxlKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfTtcblx0XG5cdHZhciBfaW5oZXJpdHMgPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBzdmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXHR2YXIgbWF0aCA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cdHZhciBUb2dnbGVNb2RlbCA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xuXHR2YXIgSW50ZXJmYWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcblx0XG5cdC8qKlxuXHRCdXR0b24gVGVtcGxhdGVcblx0Ki9cblx0XG5cdHZhciBCdXR0b25UZW1wbGF0ZSA9IChmdW5jdGlvbiAoX0ludGVyZmFjZSkge1xuXHQgIGZ1bmN0aW9uIEJ1dHRvblRlbXBsYXRlKGFyZ3MsIG9wdGlvbnMsIGRlZmF1bHRzKSB7XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQnV0dG9uVGVtcGxhdGUpO1xuXHRcblx0ICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKEJ1dHRvblRlbXBsYXRlLnByb3RvdHlwZSksIFwiY29uc3RydWN0b3JcIiwgdGhpcykuY2FsbCh0aGlzLCBhcmdzLCBvcHRpb25zLCBkZWZhdWx0cyk7XG5cdFxuXHQgICAgdGhpcy5tb2RlID0gdGhpcy5zZXR0aW5ncy5tb2RlIHx8IFwiYnV0dG9uXCI7XG5cdFxuXHQgICAgdGhpcy5wb3NpdGlvbiA9IHtcblx0ICAgICAgeDogMCxcblx0ICAgICAgeTogMFxuXHQgICAgfTtcblx0XG5cdCAgICB0aGlzLl9zdGF0ZSA9IG5ldyBUb2dnbGVNb2RlbCh0aGlzLnNldHRpbmdzLnN0YXRlKTtcblx0ICB9XG5cdFxuXHQgIF9pbmhlcml0cyhCdXR0b25UZW1wbGF0ZSwgX0ludGVyZmFjZSk7XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhCdXR0b25UZW1wbGF0ZSwge1xuXHQgICAgYnVpbGRJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkSW50ZXJmYWNlKCkge1xuXHQgICAgICAgIHRoaXMucGFkID0gc3ZnLmNyZWF0ZShcImNpcmNsZVwiKTtcblx0ICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIFwiI2QxOFwiKTtcblx0ICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgXCIjZDE4XCIpO1xuXHQgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiLCA0KTtcblx0XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMucGFkKTtcblx0XG5cdCAgICAgICAgdGhpcy5pbnRlcmFjdGlvblRhcmdldCA9IHRoaXMucGFkO1xuXHRcblx0ICAgICAgICB0aGlzLnNpemVJbnRlcmZhY2UoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNpemVJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNpemVJbnRlcmZhY2UoKSB7XG5cdCAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwiY3hcIiwgdGhpcy53aWR0aCAvIDIpO1xuXHQgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcImN5XCIsIHRoaXMuaGVpZ2h0IC8gMik7XG5cdCAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwiclwiLCBNYXRoLm1pbih0aGlzLndpZHRoLCB0aGlzLmhlaWdodCkgLyAyIC0gMik7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByZW5kZXI6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0ICAgICAgICBpZiAoIXRoaXMuc3RhdGUpIHtcblx0ICAgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5jb2xvcnMuZmlsbCk7XG5cdCAgICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgdGhpcy5jb2xvcnMubWVkaXVtTGlnaHQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLmFjY2VudCk7XG5cdCAgICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgdGhpcy5jb2xvcnMuYWNjZW50KTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBkb3duOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBkb3duKHBhaW50YnJ1c2gpIHtcblx0ICAgICAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xuXHQgICAgICAgICAgY2FzZSBcImltcHVsc2VcIjpcblx0ICAgICAgICAgICAgdGhpcy50dXJuT24oKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMudGltZW91dCkge1xuXHQgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQodGhpcy50dXJuT2ZmLmJpbmQodGhpcyksIDMwKTtcblx0ICAgICAgICAgICAgLy8gICAgdGhpcy5lbWl0KCdjaGFuZ2UnLHRoaXMuc3RhdGUpO1xuXHQgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgIGNhc2UgXCJidXR0b25cIjpcblx0ICAgICAgICAgICAgdGhpcy50dXJuT24oKTtcblx0ICAgICAgICAgICAgLy8gICAgdGhpcy5lbWl0KCdjaGFuZ2UnLHRoaXMuc3RhdGUpO1xuXHQgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgIGNhc2UgXCJhZnRlcnRvdWNoXCI6XG5cdCAgICAgICAgICAgIHRoaXMucG9zaXRpb24gPSB7XG5cdCAgICAgICAgICAgICAgeDogbWF0aC5jbGlwKHRoaXMubW91c2UueCAvIHRoaXMud2lkdGgsIDAsIDEpLFxuXHQgICAgICAgICAgICAgIHk6IG1hdGguY2xpcCgxIC0gdGhpcy5tb3VzZS55IC8gdGhpcy5oZWlnaHQsIDAsIDEpXG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIHRoaXMudHVybk9uKCk7XG5cdCAgICAgICAgICAgIC8vICAgIHRoaXMuZW1pdCgnY2hhbmdlJyx7XG5cdCAgICAgICAgICAgIC8vICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG5cdCAgICAgICAgICAgIC8vICAgICAgeDogdGhpcy5wb3NpdGlvbi54LFxuXHQgICAgICAgICAgICAvLyAgICAgIHk6IHRoaXMucG9zaXRpb24ueSxcblx0ICAgICAgICAgICAgLy8gICAgfSk7XG5cdCAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgY2FzZSBcInRvZ2dsZVwiOlxuXHQgICAgICAgICAgICB0aGlzLmZsaXAocGFpbnRicnVzaCk7XG5cdCAgICAgICAgICAgIC8vICAgIHRoaXMuZW1pdCgnY2hhbmdlJyx0aGlzLnN0YXRlKTtcblx0ICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgYmVuZDoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYmVuZChtb3VzZSkge1xuXHQgICAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwiYWZ0ZXJ0b3VjaFwiKSB7XG5cdCAgICAgICAgICB0aGlzLm1vdXNlID0gbW91c2UgfHwgdGhpcy5tb3VzZTtcblx0ICAgICAgICAgIHRoaXMucG9zaXRpb24gPSB7XG5cdCAgICAgICAgICAgIHg6IG1hdGguY2xpcCh0aGlzLm1vdXNlLnggLyB0aGlzLndpZHRoLCAwLCAxKSxcblx0ICAgICAgICAgICAgeTogbWF0aC5jbGlwKDEgLSB0aGlzLm1vdXNlLnkgLyB0aGlzLmhlaWdodCwgMCwgMSlcblx0ICAgICAgICAgIH07XG5cdCAgICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwge1xuXHQgICAgICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcblx0ICAgICAgICAgICAgeDogdGhpcy5wb3NpdGlvbi54LFxuXHQgICAgICAgICAgICB5OiB0aGlzLnBvc2l0aW9uLnkgfSk7XG5cdCAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHVwOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiB1cCgpIHtcblx0ICAgICAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xuXHQgICAgICAgICAgY2FzZSBcImJ1dHRvblwiOlxuXHQgICAgICAgICAgICB0aGlzLnR1cm5PZmYoKTtcblx0ICAgICAgICAgICAgLy8gIHRoaXMuZW1pdCgnY2hhbmdlJyx0aGlzLnN0YXRlKTtcblx0ICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICBjYXNlIFwiYWZ0ZXJ0b3VjaFwiOlxuXHQgICAgICAgICAgICB0aGlzLnR1cm5PZmYoKTtcblx0ICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHtcblx0ICAgICAgICAgICAgICB4OiBtYXRoLmNsaXAodGhpcy5tb3VzZS54IC8gdGhpcy53aWR0aCwgMCwgMSksXG5cdCAgICAgICAgICAgICAgeTogbWF0aC5jbGlwKDEgLSB0aGlzLm1vdXNlLnkgLyB0aGlzLmhlaWdodCwgMCwgMSlcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgLy8gIHRoaXMuZW1pdCgnY2hhbmdlJyx7XG5cdCAgICAgICAgICAgIC8vICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuXHQgICAgICAgICAgICAvLyAgICB4OiB0aGlzLnBvc2l0aW9uLngsXG5cdCAgICAgICAgICAgIC8vICAgIHk6IHRoaXMucG9zaXRpb24ueSxcblx0ICAgICAgICAgICAgLy8gIH0pO1xuXHQgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjbGljazoge1xuXHRcblx0ICAgICAgLyogb3ZlcndyaXRhYmxlIGludGVyYWN0aW9uIGhhbmRsZXJzICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xpY2soKSB7XG5cdCAgICAgICAgdGhpcy5kb3duKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtb3ZlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBtb3ZlKCkge1xuXHQgICAgICAgIHRoaXMuYmVuZCgpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVsZWFzZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVsZWFzZSgpIHtcblx0ICAgICAgICB0aGlzLnVwKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzdGF0ZToge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFdoZXRoZXIgdGhlIGJ1dHRvbiBpcyBvbiAocHJlc3NlZCkgb3Igb2ZmIChub3QgcHJlc3NlZClcblx0ICAgICAgQHR5cGUge2Jvb2xlYW59XG5cdCAgICAgIEBleGFtcGxlIGJ1dHRvbi5zdGF0ZSA9IHRydWU7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuc3RhdGU7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZmxpcCh2YWx1ZSk7XG5cdCAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gXCJhZnRlcnRvdWNoXCIpIHtcblx0ICAgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB7XG5cdCAgICAgICAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuXHQgICAgICAgICAgICB4OiB0aGlzLnBvc2l0aW9uLngsXG5cdCAgICAgICAgICAgIHk6IHRoaXMucG9zaXRpb24ueSB9KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMuc3RhdGUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZmxpcDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIENoYW5nZSB0aGUgYnV0dG9uIHRvIGl0cyBhbHRlcm5hdGUgc3RhdGUgKG9mZj0+b24sIG9uPT5vZmYpLCBvciBmbGlwIGl0IHRvIGEgc3BlY2lmaWVkIHN0YXRlLlxuXHQgICAgICBAcGFyYW0gdmFsdWUge2Jvb2xlYW59IChPcHRpb25hbCkgU3RhdGUgdG8gZmxpcCB0by5cblx0ICAgICAgQGV4YW1wbGUgYnV0dG9uLmZsaXAoKTtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBmbGlwKHZhbHVlKSB7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZmxpcCh2YWx1ZSk7XG5cdCAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gXCJhZnRlcnRvdWNoXCIpIHtcblx0ICAgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB7XG5cdCAgICAgICAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuXHQgICAgICAgICAgICB4OiB0aGlzLnBvc2l0aW9uLngsXG5cdCAgICAgICAgICAgIHk6IHRoaXMucG9zaXRpb24ueSB9KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMuc3RhdGUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgdHVybk9uOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgVHVybiB0aGUgYnV0dG9uJ3Mgc3RhdGUgdG8gdHJ1ZS5cblx0ICAgICAgQGV4YW1wbGUgYnV0dG9uLnR1cm5PbigpO1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHR1cm5PbihlbWl0dGluZykge1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLm9uKCk7XG5cdCAgICAgICAgaWYgKGVtaXR0aW5nICE9PSBmYWxzZSkge1xuXHQgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gXCJhZnRlcnRvdWNoXCIpIHtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHtcblx0ICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcblx0ICAgICAgICAgICAgICB4OiB0aGlzLnBvc2l0aW9uLngsXG5cdCAgICAgICAgICAgICAgeTogdGhpcy5wb3NpdGlvbi55IH0pO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMuc3RhdGUpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgdHVybk9mZjoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFR1cm4gdGhlIGJ1dHRvbidzIHN0YXRlIHRvIGZhbHNlLlxuXHQgICAgICBAZXhhbXBsZSBidXR0b24udHVybk9mZigpO1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHR1cm5PZmYoZW1pdHRpbmcpIHtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5vZmYoKTtcblx0ICAgICAgICBpZiAoZW1pdHRpbmcgIT09IGZhbHNlKSB7XG5cdCAgICAgICAgICBpZiAodGhpcy5tb2RlID09PSBcImFmdGVydG91Y2hcIikge1xuXHQgICAgICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwge1xuXHQgICAgICAgICAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuXHQgICAgICAgICAgICAgIHg6IHRoaXMucG9zaXRpb24ueCxcblx0ICAgICAgICAgICAgICB5OiB0aGlzLnBvc2l0aW9uLnkgfSk7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwgdGhpcy5zdGF0ZSk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIEJ1dHRvblRlbXBsYXRlO1xuXHR9KShJbnRlcmZhY2UpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBCdXR0b25UZW1wbGF0ZTtcblxuLyoqKi8gfSksXG4vKiAxOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHsgdmFyIHByb3AgPSBwcm9wc1trZXldOyBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChwcm9wLnZhbHVlKSBwcm9wLndyaXRhYmxlID0gdHJ1ZTsgfSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKTsgfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXHRcblx0dmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyByZXR1cm4gZ2V0KHBhcmVudCwgcHJvcGVydHksIHJlY2VpdmVyKTsgfSB9IGVsc2UgaWYgKFwidmFsdWVcIiBpbiBkZXNjICYmIGRlc2Mud3JpdGFibGUpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9O1xuXHRcblx0dmFyIF9pbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9O1xuXHRcblx0dmFyIF9jbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9O1xuXHRcblx0dmFyIEJ1dHRvblRlbXBsYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG5cdFxuXHQvKipcblx0KiBUZXh0QnV0dG9uXG5cdCpcblx0KiBAZGVzY3JpcHRpb24gVGV4dCBidXR0b25cblx0KlxuXHQqIEBkZW1vIDxzcGFuIG5leHVzLXVpPVwidGV4dEJ1dHRvblwiPjwvc3Bhbj5cblx0KlxuXHQqIEBleGFtcGxlXG5cdCogdmFyIHRleHRidXR0b24gPSBuZXcgTmV4dXMuVGV4dEJ1dHRvbignI3RhcmdldCcpXG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciB0ZXh0YnV0dG9uID0gbmV3IE5leHVzLlRleHRCdXR0b24oJyN0YXJnZXQnLHtcblx0KiAgICAgJ3NpemUnOiBbMTUwLDUwXSxcblx0KiAgICAgJ3N0YXRlJzogZmFsc2UsXG5cdCogICAgICd0ZXh0JzogJ1BsYXknLFxuXHQqICAgICAnYWx0ZXJuYXRlVGV4dCc6ICdTdG9wJ1xuXHQqIH0pXG5cdCpcblx0KiBAb3V0cHV0XG5cdCogY2hhbmdlXG5cdCogRmlyZXMgYW55IHRpbWUgdGhlIGludGVyZmFjZSdzIHZhbHVlIGNoYW5nZXMuIDxicj5cblx0KiBUaGUgZXZlbnQgZGF0YSBpcyBhIDxpPnN0cmluZzwvaT4gb2YgdGhlIHRleHQgb24gdGhlIGJ1dHRvbiBhdCB0aGUgbW9tZW50IGl0IHdhcyBjbGlja2VkLlxuXHQqXG5cdCogQG91dHB1dGV4YW1wbGVcblx0KiB0ZXh0YnV0dG9uLm9uKCdjaGFuZ2UnLGZ1bmN0aW9uKHYpIHtcblx0KiAgIGNvbnNvbGUubG9nKHYpO1xuXHQqIH0pXG5cdCpcblx0Ki9cblx0XG5cdHZhciBUZXh0QnV0dG9uID0gKGZ1bmN0aW9uIChfQnV0dG9uVGVtcGxhdGUpIHtcblx0ICBmdW5jdGlvbiBUZXh0QnV0dG9uKCkge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRleHRCdXR0b24pO1xuXHRcblx0ICAgIHZhciBvcHRpb25zID0gW1widmFsdWVcIl07XG5cdFxuXHQgICAgdmFyIGRlZmF1bHRzID0ge1xuXHQgICAgICBzaXplOiBbMTUwLCA1MF0sXG5cdCAgICAgIHN0YXRlOiBmYWxzZSxcblx0ICAgICAgdGV4dDogXCJQbGF5XCJcblx0ICAgIH07XG5cdFxuXHQgICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoVGV4dEJ1dHRvbi5wcm90b3R5cGUpLCBcImNvbnN0cnVjdG9yXCIsIHRoaXMpLmNhbGwodGhpcywgYXJndW1lbnRzLCBvcHRpb25zLCBkZWZhdWx0cyk7XG5cdFxuXHQgICAgdGhpcy5fdGV4dCA9IHRoaXMuc2V0dGluZ3MudGV4dDtcblx0XG5cdCAgICBpZiAodGhpcy5zZXR0aW5ncy5hbHRlcm5hdGUpIHtcblx0ICAgICAgLy9UT0RPOiBSZW1vdmUgdGhpcyBjb25kaXRpb25hbCBpbiBhIGJyZWFraW5nLWNoYW5nZXMgcmVsZWFzZVxuXHQgICAgICB0aGlzLnNldHRpbmdzLmFsdGVybmF0ZVRleHQgPSB0aGlzLnNldHRpbmdzLmFsdGVybmF0ZTtcblx0ICAgICAgY29uc29sZS53YXJuKFwiJ2FsdGVybmF0ZScgaW5pdGlhdG9yIGlzIGRlcHJlY2F0ZWQuIFVzZSAnYWx0ZXJuYXRlVGV4dCcgaW5zdGVhZC5cIik7XG5cdCAgICB9XG5cdCAgICB0aGlzLl9hbHRlcm5hdGVUZXh0ID0gdGhpcy5zZXR0aW5ncy5hbHRlcm5hdGVUZXh0O1xuXHQgICAgdGhpcy5tb2RlID0gdGhpcy5zZXR0aW5ncy5hbHRlcm5hdGVUZXh0ID8gXCJ0b2dnbGVcIiA6IFwiYnV0dG9uXCI7XG5cdCAgICB0aGlzLmluaXQoKTtcblx0ICAgIHRoaXMucmVuZGVyKCk7XG5cdFxuXHQgICAgdGhpcy5zdGF0ZSA9IHRoaXMuc2V0dGluZ3Muc3RhdGU7XG5cdCAgfVxuXHRcblx0ICBfaW5oZXJpdHMoVGV4dEJ1dHRvbiwgX0J1dHRvblRlbXBsYXRlKTtcblx0XG5cdCAgX2NyZWF0ZUNsYXNzKFRleHRCdXR0b24sIHtcblx0ICAgIGJ1aWxkRnJhbWU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkRnJhbWUoKSB7XG5cdFxuXHQgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdCAgICAgICAgdGhpcy5wYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTtcblx0XG5cdCAgICAgICAgdGhpcy50ZXh0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdCAgICAgICAgdGhpcy50ZXh0RWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLl90ZXh0O1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnRleHRFbGVtZW50KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGJ1aWxkSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEludGVyZmFjZSgpIHt9XG5cdCAgICB9LFxuXHQgICAgY29sb3JJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbG9ySW50ZXJmYWNlKCkge1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLmRhcms7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNpemVJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNpemVJbnRlcmZhY2UoKSB7XG5cdCAgICAgICAgdmFyIHRleHRzaXplID0gdGhpcy5oZWlnaHQgLyAzO1xuXHQgICAgICAgIHZhciB0ZXh0c2l6ZTIgPSB0aGlzLndpZHRoIC8gKHRoaXMuX3RleHQubGVuZ3RoICsgMik7XG5cdCAgICAgICAgdGV4dHNpemUgPSBNYXRoLm1pbih0ZXh0c2l6ZSwgdGV4dHNpemUyKTtcblx0ICAgICAgICBpZiAodGhpcy5hbHRlcm5hdGVUZXh0KSB7XG5cdCAgICAgICAgICB2YXIgdGV4dHNpemUzID0gdGhpcy53aWR0aCAvICh0aGlzLmFsdGVybmF0ZVRleHQubGVuZ3RoICsgMik7XG5cdCAgICAgICAgICB0ZXh0c2l6ZSA9IE1hdGgubWluKHRleHRzaXplLCB0ZXh0c2l6ZTMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgc3R5bGVzID0gXCJ3aWR0aDogXCIgKyB0aGlzLndpZHRoICsgXCJweDtcIjtcblx0ICAgICAgICBzdHlsZXMgKz0gXCJoZWlnaHQ6IFwiICsgdGhpcy5oZWlnaHQgKyBcInB4O1wiO1xuXHQgICAgICAgIHN0eWxlcyArPSBcInBhZGRpbmc6IFwiICsgKHRoaXMuaGVpZ2h0IC0gdGV4dHNpemUpIC8gMiArIFwicHggMHB4O1wiO1xuXHQgICAgICAgIHN0eWxlcyArPSBcImJveC1zaXppbmc6IGJvcmRlci1ib3g7XCI7XG5cdCAgICAgICAgc3R5bGVzICs9IFwidGV4dC1hbGlnbjogY2VudGVyO1wiO1xuXHQgICAgICAgIHN0eWxlcyArPSBcImZvbnQtZmFtaWx5OiBpbmhlcml0O1wiO1xuXHQgICAgICAgIHN0eWxlcyArPSBcImZvbnQtd2VpZ2h0OiA3MDA7XCI7XG5cdCAgICAgICAgc3R5bGVzICs9IFwib3BhY2l0eTogMTtcIjtcblx0ICAgICAgICBzdHlsZXMgKz0gXCJmb250LXNpemU6XCIgKyB0ZXh0c2l6ZSArIFwicHg7XCI7XG5cdCAgICAgICAgdGhpcy50ZXh0RWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gc3R5bGVzO1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByZW5kZXI6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0ICAgICAgICBpZiAoIXRoaXMuc3RhdGUpIHtcblx0ICAgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmNvbG9ycy5maWxsO1xuXHQgICAgICAgICAgdGhpcy50ZXh0RWxlbWVudC5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLmRhcms7XG5cdCAgICAgICAgICB0aGlzLnRleHRFbGVtZW50LmlubmVySFRNTCA9IHRoaXMuX3RleHQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmNvbG9ycy5hY2NlbnQ7XG5cdCAgICAgICAgICB0aGlzLnRleHRFbGVtZW50LnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMuZmlsbDtcblx0ICAgICAgICAgIGlmICh0aGlzLmFsdGVybmF0ZVRleHQpIHtcblx0ICAgICAgICAgICAgdGhpcy50ZXh0RWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLl9hbHRlcm5hdGVUZXh0O1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy50ZXh0RWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLl90ZXh0O1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGFsdGVybmF0ZVRleHQ6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBUaGUgdGV4dCB0byBkaXNwbGF5IHdoZW4gdGhlIGJ1dHRvbiBpcyBpbiBpdHMgXCJvblwiIHN0YXRlLiBJZiBzZXQsIHRoaXMgcHV0cyB0aGUgYnV0dG9uIGluIFwidG9nZ2xlXCIgbW9kZS5cblx0ICAgICAgQHR5cGUge1N0cmluZ31cblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9hbHRlcm5hdGVUZXh0O1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh0ZXh0KSB7XG5cdCAgICAgICAgaWYgKHRleHQpIHtcblx0ICAgICAgICAgIHRoaXMubW9kZSA9IFwidG9nZ2xlXCI7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMubW9kZSA9IFwiYnV0dG9uXCI7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2FsdGVybmF0ZVRleHQgPSB0ZXh0O1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICB0ZXh0OiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgVGhlIHRleHQgdG8gZGlzcGxheS4gKElmIC5hbHRlcm5hdGVUZXh0IGV4aXN0cywgdGhlbiB0aGlzIC50ZXh0IHdpbGwgb25seSBiZSBkaXNwbGF5ZWQgd2hlbiB0aGUgYnV0dG9uIGlzIGluIGl0cyBcIm9mZlwiIHN0YXRlLilcblx0ICAgICAgQHR5cGUge1N0cmluZ31cblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh0ZXh0KSB7XG5cdCAgICAgICAgdGhpcy5fdGV4dCA9IHRleHQ7XG5cdCAgICAgICAgdGhpcy5zaXplSW50ZXJmYWNlKCk7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pO1xuXHRcblx0ICByZXR1cm4gVGV4dEJ1dHRvbjtcblx0fSkoQnV0dG9uVGVtcGxhdGUpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBUZXh0QnV0dG9uO1xuXG4vKioqLyB9KSxcbi8qIDE5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGtleSBpbiBwcm9wcykgeyB2YXIgcHJvcCA9IHByb3BzW2tleV07IHByb3AuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKHByb3AudmFsdWUpIHByb3Aud3JpdGFibGUgPSB0cnVlOyB9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpOyB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHR2YXIgX2dldCA9IGZ1bmN0aW9uIGdldChvYmplY3QsIHByb3BlcnR5LCByZWNlaXZlcikgeyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IHJldHVybiBnZXQocGFyZW50LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpOyB9IH0gZWxzZSBpZiAoXCJ2YWx1ZVwiIGluIGRlc2MgJiYgZGVzYy53cml0YWJsZSkgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH07XG5cdFxuXHR2YXIgX2luaGVyaXRzID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH07XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH07XG5cdFxuXHQvL2xldCBzdmcgPSByZXF1aXJlKCcuLi91dGlsL3N2ZycpO1xuXHR2YXIgSW50ZXJmYWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcblx0dmFyIEJ1dHRvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xuXHRcblx0LyoqXG5cdCogUmFkaW9CdXR0b25cblx0KlxuXHQqIEBkZXNjcmlwdGlvbiBBbiBhcnJheSBvZiBidXR0b25zLiBCeSBkZWZhdWx0LCBzZWxlY3Rpbmcgb25lIGJ1dHRvbiB3aWxsIGRlc2VsZWN0IGFsbCBvdGhlciBidXR0b25zLCBidXQgdGhpcyBjYW4gYmUgY3VzdG9taXplZCB1c2luZyB0aGUgQVBJIGJlbG93LlxuXHQqXG5cdCogQGRlbW8gPGRpdiBuZXh1cy11aT1cIlJhZGlvQnV0dG9uXCI+PC9kaXY+XG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciByYWRpb2J1dHRvbiA9IG5ldyBOZXh1cy5SYWRpb0J1dHRvbignI3RhcmdldCcpXG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciByYWRpb2J1dHRvbiA9IG5ldyBOZXh1cy5SYWRpb0J1dHRvbignI3RhcmdldCcse1xuXHQqICAgJ3NpemUnOiBbMTIwLDI1XSxcblx0KiAgICdudW1iZXJPZkJ1dHRvbnMnOiA0LFxuXHQqICAgJ2FjdGl2ZSc6IC0xXG5cdCogfSlcblx0KlxuXHQqIEBvdXRwdXRcblx0KiBjaGFuZ2Vcblx0KiBGaXJlcyBhbnkgdGltZSB0aGUgaW50ZXJmYWNlJ3MgdmFsdWUgY2hhbmdlcy4gPGJyPlxuXHQqIFRoZSBldmVudCBkYXRhIGFuIDxpPmludGVnZXI8L2k+LCB0aGUgaW5kZXggb2YgdGhlIGJ1dHRvbiB0aGF0IGlzIGN1cnJlbnRseSBvbi4gSWYgbm8gYnV0dG9uIGlzIHNlbGVjdGVkLCB0aGUgdmFsdWUgd2lsbCBiZSAtMS5cblx0KlxuXHQqIEBvdXRwdXRleGFtcGxlXG5cdCogcmFkaW9idXR0b24ub24oJ2NoYW5nZScsZnVuY3Rpb24odikge1xuXHQqICAgY29uc29sZS5sb2codik7XG5cdCogfSlcblx0KlxuXHQqL1xuXHRcblx0dmFyIFJhZGlvQnV0dG9uID0gKGZ1bmN0aW9uIChfSW50ZXJmYWNlKSB7XG5cdCAgZnVuY3Rpb24gUmFkaW9CdXR0b24oKSB7XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmFkaW9CdXR0b24pO1xuXHRcblx0ICAgIHZhciBvcHRpb25zID0gW1widmFsdWVcIl07XG5cdFxuXHQgICAgdmFyIGRlZmF1bHRzID0ge1xuXHQgICAgICBzaXplOiBbMTIwLCAyNV0sXG5cdCAgICAgIG51bWJlck9mQnV0dG9uczogNCxcblx0ICAgICAgYWN0aXZlOiAtMVxuXHQgICAgfTtcblx0XG5cdCAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihSYWRpb0J1dHRvbi5wcm90b3R5cGUpLCBcImNvbnN0cnVjdG9yXCIsIHRoaXMpLmNhbGwodGhpcywgYXJndW1lbnRzLCBvcHRpb25zLCBkZWZhdWx0cyk7XG5cdFxuXHQgICAgdGhpcy5idXR0b25zID0gW107XG5cdCAgICB0aGlzLl9udW1iZXJPZkJ1dHRvbnMgPSB0aGlzLnNldHRpbmdzLm51bWJlck9mQnV0dG9ucztcblx0ICAgIHRoaXMuYWN0aXZlID0gdGhpcy5zZXR0aW5ncy5hY3RpdmU7XG5cdFxuXHQgICAgdGhpcy5pbml0KCk7XG5cdCAgICB0aGlzLnJlbmRlcigpO1xuXHQgIH1cblx0XG5cdCAgX2luaGVyaXRzKFJhZGlvQnV0dG9uLCBfSW50ZXJmYWNlKTtcblx0XG5cdCAgX2NyZWF0ZUNsYXNzKFJhZGlvQnV0dG9uLCB7XG5cdCAgICBidWlsZEZyYW1lOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEZyYW1lKCkge1xuXHQgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdCAgICAgICAgdGhpcy5wYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGJ1aWxkSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9udW1iZXJPZkJ1dHRvbnM7IGkrKykge1xuXHQgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuXHRcblx0ICAgICAgICAgIHZhciBidXR0b24gPSBuZXcgQnV0dG9uKGNvbnRhaW5lciwge1xuXHQgICAgICAgICAgICBtb2RlOiBcInRvZ2dsZVwiLFxuXHQgICAgICAgICAgICBjb21wb25lbnQ6IHRydWUgfSwgdGhpcy51cGRhdGUuYmluZCh0aGlzLCBpKSk7XG5cdFxuXHQgICAgICAgICAgdGhpcy5idXR0b25zLnB1c2goYnV0dG9uKTtcblx0ICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNpemVJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNpemVJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIHZhciBidXR0b25XaWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLl9udW1iZXJPZkJ1dHRvbnM7XG5cdCAgICAgICAgdmFyIGJ1dHRvbkhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXHRcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX251bWJlck9mQnV0dG9uczsgaSsrKSB7XG5cdCAgICAgICAgICB0aGlzLmJ1dHRvbnNbaV0ucmVzaXplKGJ1dHRvbldpZHRoLCBidXR0b25IZWlnaHQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNvbG9ySW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb2xvckludGVyZmFjZSgpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX251bWJlck9mQnV0dG9uczsgaSsrKSB7XG5cdCAgICAgICAgICB0aGlzLmJ1dHRvbnNbaV0uY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cdCAgICAgICAgICB0aGlzLmJ1dHRvbnNbaV0ucmVuZGVyKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgdXBkYXRlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGUoaW5kZXgpIHtcblx0ICAgICAgICBpZiAodGhpcy5idXR0b25zW2luZGV4XS5zdGF0ZSkge1xuXHQgICAgICAgICAgdGhpcy5zZWxlY3QoaW5kZXgpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLmRlc2VsZWN0KCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVuZGVyOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJ1dHRvbnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgIGlmIChpID09PSB0aGlzLmFjdGl2ZSkge1xuXHQgICAgICAgICAgICB0aGlzLmJ1dHRvbnNbaV0udHVybk9uKGZhbHNlKTtcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuYnV0dG9uc1tpXS50dXJuT2ZmKGZhbHNlKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzZWxlY3Q6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBTZWxlY3Qgb25lIGJ1dHRvbiBhbmQgZGVzZWxlY3QgYWxsIG90aGVyIGJ1dHRvbnMuXG5cdCAgICAgIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggb2YgdGhlIGJ1dHRvbiB0byBzZWxlY3Rcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZWxlY3QoaW5kZXgpIHtcblx0ICAgICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMuYnV0dG9ucy5sZW5ndGgpIHtcblx0ICAgICAgICAgIHRoaXMuYWN0aXZlID0gaW5kZXg7XG5cdCAgICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwgdGhpcy5hY3RpdmUpO1xuXHQgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBkZXNlbGVjdDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIERlc2VsZWN0IGFsbCBidXR0b25zLlxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRlc2VsZWN0KCkge1xuXHQgICAgICAgIHRoaXMuYWN0aXZlID0gLTE7XG5cdCAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMuYWN0aXZlKTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbnVtYmVyT2ZCdXR0b25zOiB7XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJPZkJ1dHRvbnM7XG5cdCAgICAgIH0sXG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgICogVXBkYXRlIGhvdyBtYW55IGJ1dHRvbnMgYXJlIGluIHRoZSBpbnRlcmZhY2Vcblx0ICAgICAgICogQHBhcmFtICB7bnVtYmVyfSBidXR0b25zIEhvdyBtYW55IGJ1dHRvbnMgYXJlIGluIHRoZSBpbnRlcmZhY2Vcblx0ICAgICAgICovXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKGJ1dHRvbnMpIHtcblx0ICAgICAgICB0aGlzLl9udW1iZXJPZkJ1dHRvbnMgPSBidXR0b25zO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5idXR0b25zLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICB0aGlzLmJ1dHRvbnNbaV0uZGVzdHJveSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmJ1dHRvbnMgPSBbXTtcblx0ICAgICAgICAvLyAgZm9yIChsZXQgaT0wO2k8dGhpcy5idXR0b25zLmxlbmd0aDtpKyspIHtcblx0ICAgICAgICAvLyAgICB0aGlzLmJ1dHRvbnNbaV0uZGVzdHJveSgpO1xuXHQgICAgICAgIC8vICB9XG5cdCAgICAgICAgdGhpcy5lbXB0eSgpO1xuXHQgICAgICAgIHRoaXMuYnVpbGRJbnRlcmZhY2UoKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pO1xuXHRcblx0ICByZXR1cm4gUmFkaW9CdXR0b247XG5cdH0pKEludGVyZmFjZSk7XG5cdFxuXHRtb2R1bGUuZXhwb3J0cyA9IFJhZGlvQnV0dG9uO1xuXG4vKioqLyB9KSxcbi8qIDIwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGtleSBpbiBwcm9wcykgeyB2YXIgcHJvcCA9IHByb3BzW2tleV07IHByb3AuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKHByb3AudmFsdWUpIHByb3Aud3JpdGFibGUgPSB0cnVlOyB9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpOyB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHR2YXIgX2dldCA9IGZ1bmN0aW9uIGdldChvYmplY3QsIHByb3BlcnR5LCByZWNlaXZlcikgeyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IHJldHVybiBnZXQocGFyZW50LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpOyB9IH0gZWxzZSBpZiAoXCJ2YWx1ZVwiIGluIGRlc2MgJiYgZGVzYy53cml0YWJsZSkgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH07XG5cdFxuXHR2YXIgX2luaGVyaXRzID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH07XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH07XG5cdFxuXHR2YXIgSW50ZXJmYWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcblx0dmFyIFN0ZXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcblx0dmFyIG1hdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xuXHRcblx0LyoqXG5cdCogTnVtYmVyXG5cdCpcblx0KiBAZGVzY3JpcHRpb24gTnVtYmVyIGludGVyZmFjZSB3aGljaCBpcyBjb250cm9sbGFibGUgYnkgZHJhZ2dpbmcgb3IgdHlwaW5nLlxuXHQqXG5cdCogQGRlbW8gPHNwYW4gbmV4dXMtdWk9XCJudW1iZXJcIj48L3NwYW4+XG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciBudW1iZXIgPSBuZXcgTmV4dXMuTnVtYmVyKCcjdGFyZ2V0Jylcblx0KlxuXHQqIEBleGFtcGxlXG5cdCogdmFyIG51bWJlciA9IG5ldyBOZXh1cy5OdW1iZXIoJyN0YXJnZXQnLHtcblx0KiAgICdzaXplJzogWzYwLDMwXSxcblx0KiAgICd2YWx1ZSc6IDAsXG5cdCogICAnbWluJzogMCxcblx0KiAgICdtYXgnOiAyMDAwMCxcblx0KiAgICdzdGVwJzogMVxuXHQqIH0pXG5cdCpcblx0KiBAb3V0cHV0XG5cdCogY2hhbmdlXG5cdCogRmlyZXMgYW55IHRpbWUgdGhlIGludGVyZmFjZSdzIHZhbHVlIGNoYW5nZXMuIDxicj5cblx0KiBUaGUgZXZlbnQgZGF0YSBpcyB0aGUgbnVtYmVyIHZhbHVlIG9mIHRoZSBpbnRlcmZhY2UuXG5cdCpcblx0KiBAb3V0cHV0ZXhhbXBsZVxuXHQqIG51bWJlci5vbignY2hhbmdlJyxmdW5jdGlvbih2KSB7XG5cdCogICBjb25zb2xlLmxvZyh2KTtcblx0KiB9KVxuXHQqXG5cdCpcblx0Ki9cblx0XG5cdHZhciBOdW1iZXIgPSAoZnVuY3Rpb24gKF9JbnRlcmZhY2UpIHtcblx0ICBmdW5jdGlvbiBOdW1iZXIoKSB7XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTnVtYmVyKTtcblx0XG5cdCAgICB2YXIgb3B0aW9ucyA9IFtcInZhbHVlXCJdO1xuXHRcblx0ICAgIHZhciBkZWZhdWx0cyA9IHtcblx0ICAgICAgc2l6ZTogWzYwLCAzMF0sXG5cdCAgICAgIHZhbHVlOiAwLFxuXHQgICAgICBtaW46IDAsXG5cdCAgICAgIG1heDogMjAwMDAsXG5cdCAgICAgIHN0ZXA6IDFcblx0ICAgIH07XG5cdFxuXHQgICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoTnVtYmVyLnByb3RvdHlwZSksIFwiY29uc3RydWN0b3JcIiwgdGhpcykuY2FsbCh0aGlzLCBhcmd1bWVudHMsIG9wdGlvbnMsIGRlZmF1bHRzKTtcblx0XG5cdCAgICB0aGlzLl92YWx1ZSA9IG5ldyBTdGVwKHRoaXMuc2V0dGluZ3MubWluLCB0aGlzLnNldHRpbmdzLm1heCwgdGhpcy5zZXR0aW5ncy5zdGVwLCB0aGlzLnNldHRpbmdzLnZhbHVlKTtcblx0XG5cdCAgICAvKlxuXHQgICAgRGVmYXVsdDogMi4gSG93IG1hbnkgZGVjaW1hbCBwbGFjZXMgdG8gY2xpcCB0aGUgbnVtYmVyJ3MgdmlzdWFsIHJlbmRlcmluZyB0by4gVGhpcyBkb2VzIG5vdCBhZmZlY3QgbnVtYmVyJ3MgYWN0dWFsIHZhbHVlIG91dHB1dCAtLSBmb3IgdGhhdCwgc2V0IHRoZSBzdGVwIHByb3BlcnR5IHRvIC4wMSwgLjEsIG9yIDEuXG5cdCAgICBAdHlwZSB7bnVtYmVyfVxuXHQgICAgQGV4YW1wbGUgbnVtYmVyLmRlY2ltYWxQbGFjZXMgPSAyO1xuXHQgICAgKi9cblx0ICAgIHRoaXMuZGVjaW1hbFBsYWNlcyA9IDI7XG5cdCAgICB0aGlzLmFjdHVhbCA9IDA7XG5cdFxuXHQgICAgdGhpcy5tYXggPSB0aGlzLl92YWx1ZS5tYXg7XG5cdFxuXHQgICAgdGhpcy5taW4gPSB0aGlzLl92YWx1ZS5taW47XG5cdFxuXHQgICAgdGhpcy5zdGVwID0gdGhpcy5fdmFsdWUuc3RlcDtcblx0XG5cdCAgICB0aGlzLmluaXQoKTtcblx0ICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgfVxuXHRcblx0ICBfaW5oZXJpdHMoTnVtYmVyLCBfSW50ZXJmYWNlKTtcblx0XG5cdCAgX2NyZWF0ZUNsYXNzKE51bWJlciwge1xuXHQgICAgYnVpbGRGcmFtZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRGcmFtZSgpIHtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnR5cGUgPSBcInRleHRcIjtcblx0XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5jb2xvcnMuZmlsbDtcblx0ICAgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLmRhcms7XG5cdCAgICAgICAgICBpZiAodGhpcy5lbGVtZW50LnZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG5cdCAgICAgICAgICAgIHRoaXMudmFsdWUgPSBwYXJzZUZsb2F0KHRoaXMuZWxlbWVudC52YWx1ZSk7XG5cdCAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSkuYmluZCh0aGlzKSk7XG5cdFxuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgIGlmIChlLndoaWNoIDwgNDggfHwgZS53aGljaCA+IDU3KSB7XG5cdCAgICAgICAgICAgIGlmIChlLndoaWNoICE9PSAxODkgJiYgZS53aGljaCAhPT0gMTkwICYmIGUud2hpY2ggIT09IDgpIHtcblx0ICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIGlmIChlLndoaWNoID09PSAxMykge1xuXHQgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYmx1cigpO1xuXHQgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5lbGVtZW50LnZhbHVlO1xuXHQgICAgICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwgdGhpcy52YWx1ZSk7XG5cdCAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSkuYmluZCh0aGlzKSk7XG5cdFxuXHQgICAgICAgIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzaXplSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaXplSW50ZXJmYWNlKCkge1xuXHRcblx0ICAgICAgICB0aGlzLl9taW5EaW1lbnNpb24gPSBNYXRoLm1pbih0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG5cdFxuXHQgICAgICAgIHZhciBzdHlsZXMgPSBcIndpZHRoOiBcIiArIHRoaXMud2lkdGggKyBcInB4O1wiO1xuXHQgICAgICAgIHN0eWxlcyArPSBcImhlaWdodDogXCIgKyB0aGlzLmhlaWdodCArIFwicHg7XCI7XG5cdCAgICAgICAgc3R5bGVzICs9IFwiYmFja2dyb3VuZC1jb2xvcjogI2U3ZTdlNztcIjtcblx0ICAgICAgICBzdHlsZXMgKz0gXCJjb2xvcjogIzMzMztcIjtcblx0ICAgICAgICBzdHlsZXMgKz0gXCJmb250LWZhbWlseTogYXJpYWw7XCI7XG5cdCAgICAgICAgc3R5bGVzICs9IFwiZm9udC13ZWlnaHQ6IDUwMDtcIjtcblx0ICAgICAgICBzdHlsZXMgKz0gXCJmb250LXNpemU6XCIgKyB0aGlzLl9taW5EaW1lbnNpb24gLyAyICsgXCJweDtcIjtcblx0ICAgICAgICAvLyAgc3R5bGVzICs9ICdoaWdobGlnaHQ6ICNkMTg7Jztcblx0ICAgICAgICBzdHlsZXMgKz0gXCJib3JkZXI6IG5vbmU7XCI7XG5cdCAgICAgICAgc3R5bGVzICs9IFwib3V0bGluZTogbm9uZTtcIjtcblx0ICAgICAgICBzdHlsZXMgKz0gXCJwYWRkaW5nOiBcIiArIHRoaXMuX21pbkRpbWVuc2lvbiAvIDQgKyBcInB4IFwiICsgdGhpcy5fbWluRGltZW5zaW9uIC8gNCArIFwicHg7XCI7XG5cdCAgICAgICAgc3R5bGVzICs9IFwiYm94LXNpemluZzogYm9yZGVyLWJveDtcIjtcblx0ICAgICAgICBzdHlsZXMgKz0gXCJ1c2VyU2VsZWN0OiB0ZXh0O1wiO1xuXHQgICAgICAgIHN0eWxlcyArPSBcIm1velVzZXJTZWxlY3Q6IHRleHQ7XCI7XG5cdCAgICAgICAgc3R5bGVzICs9IFwid2Via2l0VXNlclNlbGVjdDogdGV4dDtcIjtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuY3NzVGV4dCArPSBzdHlsZXM7XG5cdFxuXHQgICAgICAgIC8vIHRvIGFkZCBldmVudHVhbGx5XG5cdCAgICAgICAgLy8gdmFyIGNzcyA9ICcjJyt0aGlzLmVsZW1lbnRJRCsnOjpzZWxlY3Rpb257IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50IH0nO1xuXHRcblx0ICAgICAgICB0aGlzLmVsZW1lbnQudmFsdWUgPSB0aGlzLnZhbHVlO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29sb3JJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbG9ySW50ZXJmYWNlKCkge1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmNvbG9ycy5maWxsO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLmRhcms7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByZW5kZXI6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnZhbHVlID0gbWF0aC5wcnVuZSh0aGlzLnZhbHVlLCB0aGlzLmRlY2ltYWxQbGFjZXMpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY2xpY2s6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsaWNrKCkge1xuXHQgICAgICAgIHRoaXMuaGFzTW92ZWQgPSBmYWxzZTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQucmVhZE9ubHkgPSB0cnVlO1xuXHQgICAgICAgIHRoaXMuYWN0dWFsID0gdGhpcy52YWx1ZTtcblx0ICAgICAgICB0aGlzLmluaXRpYWwgPSB7IHk6IHRoaXMubW91c2UueSB9O1xuXHQgICAgICAgIHRoaXMuY2hhbmdlRmFjdG9yID0gbWF0aC5pbnZlcnQodGhpcy5tb3VzZS54IC8gdGhpcy53aWR0aCk7XG5cdCAgICAgICAgY29uc29sZS5sb2codGhpcy5jaGFuZ2VGYWN0b3IpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbW92ZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gbW92ZSgpIHtcblx0ICAgICAgICB0aGlzLmhhc01vdmVkID0gdHJ1ZTtcblx0ICAgICAgICBpZiAodGhpcy5jbGlja2VkKSB7XG5cdFxuXHQgICAgICAgICAgdmFyIG5ld3ZhbHVlID0gdGhpcy5hY3R1YWwgLSAodGhpcy5tb3VzZS55IC0gdGhpcy5pbml0aWFsLnkpICogKG1hdGguY2xpcCh0aGlzLm1heCAtIHRoaXMubWluLCAwLCAxMDAwKSAvIDIwMCkgKiBNYXRoLnBvdyh0aGlzLmNoYW5nZUZhY3RvciwgMik7XG5cdCAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3dmFsdWU7XG5cdFxuXHQgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgICAgIGlmICh0aGlzLl92YWx1ZS5jaGFuZ2VkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB0aGlzLnZhbHVlKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByZWxlYXNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWxlYXNlKCkge1xuXHQgICAgICAgIGlmICghdGhpcy5oYXNNb3ZlZCkge1xuXHQgICAgICAgICAgdGhpcy5lbGVtZW50LnJlYWRPbmx5ID0gZmFsc2U7XG5cdCAgICAgICAgICB0aGlzLmVsZW1lbnQuZm9jdXMoKTtcblx0ICAgICAgICAgIHRoaXMuZWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCB0aGlzLmVsZW1lbnQudmFsdWUubGVuZ3RoKTtcblx0ICAgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmNvbG9ycy5hY2NlbnQ7XG5cdCAgICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy5saWdodDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgZG9jdW1lbnQuYm9keS5mb2N1cygpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGxpbms6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBDb25uZWN0IHRoaXMgbnVtYmVyIGludGVyZmFjZSB0byBhIGRpYWwgb3Igc2xpZGVyXG5cdCAgICAgIEBwYXJhbSB7SW50ZXJmYWNlfSBlbGVtZW50IEVsZW1lbnQgdG8gY29ubmVjdCB0by5cblx0ICAgICAgQGV4YW1wbGUgbnVtYmVyLmxpbmsoc2xpZGVyKVxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGxpbmsoZGVzdGluYXRpb24pIHtcblx0ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXHRcblx0ICAgICAgICB0aGlzLm1pbiA9IGRlc3RpbmF0aW9uLm1pbjtcblx0ICAgICAgICB0aGlzLm1heCA9IGRlc3RpbmF0aW9uLm1heDtcblx0ICAgICAgICB0aGlzLnN0ZXAgPSBkZXN0aW5hdGlvbi5zdGVwO1xuXHQgICAgICAgIGRlc3RpbmF0aW9uLm9uKFwiY2hhbmdlXCIsIGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgICBfdGhpcy5wYXNzaXZlVXBkYXRlKHYpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMub24oXCJjaGFuZ2VcIiwgZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICAgIGRlc3RpbmF0aW9uLnZhbHVlID0gdjtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLnZhbHVlID0gZGVzdGluYXRpb24udmFsdWU7XG5cdCAgICAgICAgLyogIHJldHVybiB7XG5cdCAgICAgICAgICAgIGxpc3RlbmVyMTogbGlzdGVuZXIxLFxuXHQgICAgICAgICAgICBsaXN0ZW5lcjI6IGxpc3RlbmVyMixcblx0ICAgICAgICAgICAgZGVzdHJveTogKCkgPT4ge1xuXHQgICAgICAgICAgICAgIGxpc3RlbmVyMS5yZW1vdmUoKSAob3Igc2ltaWxhcilcblx0ICAgICAgICAgICAgICBsaXN0ZW5lcjIucmVtb3ZlKCkgKG9yIHNpbWlsYXIpXG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0gKi9cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHBhc3NpdmVVcGRhdGU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBhc3NpdmVVcGRhdGUodikge1xuXHQgICAgICAgIHRoaXMuX3ZhbHVlLnVwZGF0ZSh2KTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgdmFsdWU6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBUaGUgaW50ZXJmYWNlJ3MgY3VycmVudCB2YWx1ZS4gSWYgc2V0IG1hbnVhbGx5LCB3aWxsIHVwZGF0ZSB0aGUgaW50ZXJmYWNlIGFuZCB0cmlnZ2VyIHRoZSBvdXRwdXQgZXZlbnQuXG5cdCAgICAgIEB0eXBlIHtudW1iZXJ9XG5cdCAgICAgIEBleGFtcGxlIG51bWJlci52YWx1ZSA9IDEwO1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlLnZhbHVlO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5fdmFsdWUudXBkYXRlKHYpO1xuXHQgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB0aGlzLnZhbHVlKTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbWluOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgTG93ZXIgbGltaXQgb2YgdGhlIG51bWJlcidzIG91dHB1dCByYW5nZVxuXHQgICAgICBAdHlwZSB7bnVtYmVyfVxuXHQgICAgICBAZXhhbXBsZSBudW1iZXIubWluID0gMTAwMDtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZS5taW47XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLl92YWx1ZS5taW4gPSB2O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbWF4OiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgVXBwZXIgbGltaXQgb2YgdGhlIG51bWJlcidzIG91dHB1dCByYW5nZVxuXHQgICAgICBAdHlwZSB7bnVtYmVyfVxuXHQgICAgICBAZXhhbXBsZSBudW1iZXIubWF4ID0gMTAwMDtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZS5tYXg7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLl92YWx1ZS5tYXggPSB2O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc3RlcDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFRoZSBpbmNyZW1lbnQgdGhhdCB0aGUgbnVtYmVyJ3MgdmFsdWUgY2hhbmdlcyBieS5cblx0ICAgICAgQHR5cGUge251bWJlcn1cblx0ICAgICAgQGV4YW1wbGUgbnVtYmVyLnN0ZXAgPSA1O1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlLnN0ZXA7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLl92YWx1ZS5zdGVwID0gdjtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pO1xuXHRcblx0ICByZXR1cm4gTnVtYmVyO1xuXHR9KShJbnRlcmZhY2UpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBOdW1iZXI7XG5cbi8qKiovIH0pLFxuLyogMjEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7IH0gfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gZGVzYyAmJiBkZXNjLndyaXRhYmxlKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfTtcblx0XG5cdHZhciBfaW5oZXJpdHMgPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBJbnRlcmZhY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xuXHRcblx0LyoqXG5cdCogU2VsZWN0XG5cdCpcblx0KiBAZGVzY3JpcHRpb24gRHJvcGRvd24gbWVudVxuXHQqXG5cdCogQGRlbW8gPHNwYW4gbmV4dXMtdWk9XCJzZWxlY3RcIj48L3NwYW4+XG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciBzZWxlY3QgPSBuZXcgTmV4dXMuU2VsZWN0KCcjdGFyZ2V0Jylcblx0KlxuXHQqIEBleGFtcGxlXG5cdCogdmFyIHNlbGVjdCA9IG5ldyBOZXh1cy5TZWxlY3QoJyN0YXJnZXQnLHtcblx0KiAgICdzaXplJzogWzEwMCwzMF0sXG5cdCogICAnb3B0aW9ucyc6IFsnZGVmYXVsdCcsJ29wdGlvbnMnXVxuXHQqIH0pXG5cdCpcblx0KiBAb3V0cHV0XG5cdCogY2hhbmdlXG5cdCogRmlyZXMgYW55IHRpbWUgdGhlIGludGVyZmFjZSdzIHZhbHVlIGNoYW5nZXMuIDxicj5cblx0KiBUaGUgZXZlbnQgZGF0YSBpcyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgdGV4dCB2YWx1ZSBvZiB0aGUgc2VsZWN0ZWQgb3B0aW9uLCBhcyB3ZWxsIGFzIHRoZSBudW1lcmljIGluZGV4IG9mIHRoZSBzZWxlY3Rpb24uXG5cdCpcblx0KiBAb3V0cHV0ZXhhbXBsZVxuXHQqIHNlbGVjdC5vbignY2hhbmdlJyxmdW5jdGlvbih2KSB7XG5cdCogICBjb25zb2xlLmxvZyh2KTtcblx0KiB9KVxuXHQqXG5cdCpcblx0Ki9cblx0XG5cdHZhciBTZWxlY3QgPSAoZnVuY3Rpb24gKF9JbnRlcmZhY2UpIHtcblx0ICBmdW5jdGlvbiBTZWxlY3QoKSB7XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU2VsZWN0KTtcblx0XG5cdCAgICB2YXIgb3B0aW9ucyA9IFtcInZhbHVlXCJdO1xuXHRcblx0ICAgIHZhciBkZWZhdWx0cyA9IHtcblx0ICAgICAgc2l6ZTogWzEwMCwgMzBdLFxuXHQgICAgICBvcHRpb25zOiBbXCJkZWZhdWx0XCIsIFwib3B0aW9uc1wiXVxuXHQgICAgfTtcblx0XG5cdCAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihTZWxlY3QucHJvdG90eXBlKSwgXCJjb25zdHJ1Y3RvclwiLCB0aGlzKS5jYWxsKHRoaXMsIGFyZ3VtZW50cywgb3B0aW9ucywgZGVmYXVsdHMpO1xuXHRcblx0ICAgIHRoaXMuX3NlbGVjdGVkSW5kZXggPSAtMTtcblx0ICAgIHRoaXMuX3ZhbHVlID0gZmFsc2U7XG5cdFxuXHQgICAgdGhpcy5fb3B0aW9ucyA9IHRoaXMuc2V0dGluZ3Mub3B0aW9ucztcblx0XG5cdCAgICB0aGlzLmluaXQoKTtcblx0ICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgfVxuXHRcblx0ICBfaW5oZXJpdHMoU2VsZWN0LCBfSW50ZXJmYWNlKTtcblx0XG5cdCAgX2NyZWF0ZUNsYXNzKFNlbGVjdCwge1xuXHQgICAgYnVpbGRGcmFtZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRGcmFtZSgpIHtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5mb250U2l6ZSA9IHRoaXMuaGVpZ2h0IC8gMiArIFwicHhcIjtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUub3V0bGluZSA9IFwibm9uZVwiO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5oaWdobGlnaHQgPSBcIm5vbmVcIjtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUud2lkdGggPSB0aGlzLndpZHRoICsgXCJweFwiO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCArIFwicHhcIjtcblx0XG5cdCAgICAgICAgdGhpcy5ib3VuZFJlbmRlciA9IHRoaXMucmVuZGVyLmJpbmQodGhpcyk7XG5cdFxuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIHRoaXMuYm91bmRSZW5kZXIpO1xuXHRcblx0ICAgICAgICB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgYXR0YWNoTGlzdGVuZXJzOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBhdHRhY2hMaXN0ZW5lcnMoKSB7fVxuXHQgICAgfSxcblx0ICAgIGJ1aWxkSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgdGhpcy5kZWZpbmVPcHRpb25zKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjb2xvckludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY29sb3JJbnRlcmZhY2UoKSB7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuY29sb3JzLmZpbGw7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMuZGFyaztcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuYm9yZGVyID0gXCJzb2xpZCAwcHggXCIgKyB0aGlzLmNvbG9ycy5tZWRpdW1MaWdodDtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlbmRlcjoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHRcblx0ICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuZWxlbWVudC5vcHRpb25zW3RoaXMuZWxlbWVudC5zZWxlY3RlZEluZGV4XS50ZXh0O1xuXHQgICAgICAgIHRoaXMuX3NlbGVjdGVkSW5kZXggPSB0aGlzLmVsZW1lbnQuc2VsZWN0ZWRJbmRleDtcblx0ICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwge1xuXHQgICAgICAgICAgdmFsdWU6IHRoaXMuX3ZhbHVlLFxuXHQgICAgICAgICAgaW5kZXg6IHRoaXMuX3NlbGVjdGVkSW5kZXhcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNsaWNrOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGljaygpIHt9XG5cdCAgICB9LFxuXHQgICAgbW92ZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gbW92ZSgpIHt9XG5cdCAgICB9LFxuXHQgICAgcmVsZWFzZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVsZWFzZSgpIHt9XG5cdCAgICB9LFxuXHQgICAgZGVmaW5lT3B0aW9uczoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgICAqIFVwZGF0ZSB0aGUgbGlzdCBvZiBvcHRpb25zLiBUaGlzIHJlbW92ZXMgYWxsIGV4aXN0aW5nIG9wdGlvbnMgYW5kIGNyZWF0ZXMgYSBuZXcgbGlzdCBvZiBvcHRpb25zLlxuXHQgICAgICAgKiBAcGFyYW0gIHthcnJheX0gb3B0aW9ucyBOZXcgYXJyYXkgb2Ygb3B0aW9uc1xuXHQgICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBkZWZpbmVPcHRpb25zKG9wdGlvbnMpIHtcblx0XG5cdCAgICAgICAgLyogIGZ1bmN0aW9uIHJlbW92ZU9wdGlvbnMoc2VsZWN0Ym94KVxuXHQgICAgICAgICAge1xuXHQgICAgICAgICAgICAgIHZhciBpO1xuXHQgICAgICAgICAgICAgIGZvcihpID0gc2VsZWN0Ym94Lm9wdGlvbnMubGVuZ3RoIC0gMSA7IGkgPj0gMCA7IGktLSlcblx0ICAgICAgICAgICAgICB7XG5cdCAgICAgICAgICAgICAgICAgIHNlbGVjdGJveC5yZW1vdmUoaSk7XG5cdCAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgLy91c2luZyB0aGUgZnVuY3Rpb246XG5cdCAgICAgICAgICByZW1vdmVPcHRpb25zKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibXlTZWxlY3RPYmplY3RcIikpOyAqL1xuXHRcblx0ICAgICAgICBpZiAob3B0aW9ucykge1xuXHQgICAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5lbGVtZW50Lm9wdGlvbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmUoaSk7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX29wdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgIHRoaXMuZWxlbWVudC5vcHRpb25zLmFkZChuZXcgT3B0aW9uKHRoaXMuX29wdGlvbnNbaV0sIGkpKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICB2YWx1ZToge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFRoZSB0ZXh0IG9mIHRoZSBvcHRpb24gdGhhdCBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuIElmIHNldCwgd2lsbCB1cGRhdGUgdGhlIGludGVyZmFjZSBhbmQgdHJpZ2dlciB0aGUgb3V0cHV0IGV2ZW50LlxuXHQgICAgICBAdHlwZSB7U3RyaW5nfVxuXHQgICAgICBAZXhhbXBsZSBzZWxlY3QudmFsdWUgPSBcInNhd3Rvb3RoXCI7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLl92YWx1ZSA9IHY7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnQub3B0aW9ucy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgaWYgKHYgPT09IHRoaXMuZWxlbWVudC5vcHRpb25zW2ldLnRleHQpIHtcblx0ICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaTtcblx0ICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2VsZWN0ZWRJbmRleDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFRoZSBudW1lcmljIGluZGV4IG9mIHRoZSBvcHRpb24gdGhhdCBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuIElmIHNldCwgd2lsbCB1cGRhdGUgdGhlIGludGVyZmFjZSBhbmQgdHJpZ2dlciB0aGUgb3V0cHV0IGV2ZW50LlxuXHQgICAgICBAdHlwZSB7bnVtYmVyfVxuXHQgICAgICBAZXhhbXBsZSBzZWxlY3Quc2VsZWN0ZWRJbmRleCA9IDI7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleDtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuXHQgICAgICAgIHRoaXMuX3NlbGVjdGVkSW5kZXggPSB2O1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zZWxlY3RlZEluZGV4ID0gdjtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY3VzdG9tRGVzdHJveToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY3VzdG9tRGVzdHJveSgpIHtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCB0aGlzLmJvdW5kUmVuZGVyKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pO1xuXHRcblx0ICByZXR1cm4gU2VsZWN0O1xuXHR9KShJbnRlcmZhY2UpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBTZWxlY3Q7XG5cbi8qKiovIH0pLFxuLyogMjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9O1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHsgdmFyIHByb3AgPSBwcm9wc1trZXldOyBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChwcm9wLnZhbHVlKSBwcm9wLndyaXRhYmxlID0gdHJ1ZTsgfSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKTsgfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXHRcblx0dmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyByZXR1cm4gZ2V0KHBhcmVudCwgcHJvcGVydHksIHJlY2VpdmVyKTsgfSB9IGVsc2UgaWYgKFwidmFsdWVcIiBpbiBkZXNjICYmIGRlc2Mud3JpdGFibGUpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9O1xuXHRcblx0dmFyIF9pbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9O1xuXHRcblx0dmFyIF9jbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9O1xuXHRcblx0dmFyIHN2ZyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cdHZhciBtYXRoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcblx0dmFyIEludGVyZmFjZSA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5cdHZhciBTdGVwID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG5cdFxuXHR2YXIgSW50ZXJhY3Rpb24gPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKSk7XG5cdFxuXHQvKipcblx0KiBEaWFsXG5cdCpcblx0KlxuXHQqIEBkZXNjcmlwdGlvbiBEaWFsIHdpdGggcmFkaWFsIG9yIGxpbmVhciBpbnRlcmFjdGlvbi5cblx0KlxuXHQqIEBkZW1vIDxzcGFuIG5leHVzLXVpPVwiZGlhbFwiPjwvc3Bhbj5cblx0KlxuXHQqIEBleGFtcGxlXG5cdCogdmFyIGRpYWwgPSBuZXcgTmV4dXMuRGlhbCgnI3RhcmdldCcpXG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciBkaWFsID0gbmV3IE5leHVzLkRpYWwoJyN0YXJnZXQnLHtcblx0KiAgICdzaXplJzogWzc1LDc1XSxcblx0KiAgICdpbnRlcmFjdGlvbic6ICdyYWRpYWwnLCAvLyBcInJhZGlhbFwiLCBcInZlcnRpY2FsXCIsIG9yIFwiaG9yaXpvbnRhbFwiXG5cdCogICAnbW9kZSc6ICdyZWxhdGl2ZScsIC8vIFwiYWJzb2x1dGVcIiBvciBcInJlbGF0aXZlXCJcblx0KiAgICdtaW4nOiAwLFxuXHQqICAgJ21heCc6IDEsXG5cdCogICAnc3RlcCc6IDAsXG5cdCogICAndmFsdWUnOiAwXG5cdCogfSlcblx0KlxuXHQqIEBvdXRwdXRcblx0KiBjaGFuZ2Vcblx0KiBGaXJlcyBhbnkgdGltZSB0aGUgaW50ZXJmYWNlJ3MgdmFsdWUgY2hhbmdlcy4gPGJyPlxuXHQqIFRoZSBldmVudCBkYXRhIGlzIHRoZSBudW1iZXIgdmFsdWUgb2YgdGhlIGludGVyZmFjZS5cblx0KlxuXHQqIEBvdXRwdXRleGFtcGxlXG5cdCogZGlhbC5vbignY2hhbmdlJyxmdW5jdGlvbih2KSB7XG5cdCogICBjb25zb2xlLmxvZyh2KTtcblx0KiB9KVxuXHQqXG5cdCogQHR1dG9yaWFsXG5cdCogRGlhbFxuXHQqIHlnR014cVxuXHQqXG5cdCovXG5cdFxuXHR2YXIgRGlhbCA9IChmdW5jdGlvbiAoX0ludGVyZmFjZSkge1xuXHQgIGZ1bmN0aW9uIERpYWwoKSB7XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRGlhbCk7XG5cdFxuXHQgICAgdmFyIG9wdGlvbnMgPSBbXCJtaW5cIiwgXCJtYXhcIiwgXCJ2YWx1ZVwiXTtcblx0XG5cdCAgICB2YXIgZGVmYXVsdHMgPSB7XG5cdCAgICAgIHNpemU6IFs3NSwgNzVdLFxuXHQgICAgICBpbnRlcmFjdGlvbjogXCJyYWRpYWxcIiwgLy8gcmFkaWFsLCB2ZXJ0aWNhbCwgaG9yaXpvbnRhbFxuXHQgICAgICBtb2RlOiBcInJlbGF0aXZlXCIsIC8vIGFic29sdXRlLCByZWxhdGl2ZVxuXHQgICAgICBtaW46IDAsXG5cdCAgICAgIG1heDogMSxcblx0ICAgICAgc3RlcDogMCxcblx0ICAgICAgdmFsdWU6IDBcblx0ICAgIH07XG5cdFxuXHQgICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoRGlhbC5wcm90b3R5cGUpLCBcImNvbnN0cnVjdG9yXCIsIHRoaXMpLmNhbGwodGhpcywgYXJndW1lbnRzLCBvcHRpb25zLCBkZWZhdWx0cyk7XG5cdFxuXHQgICAgdGhpcy5pbnRlcmFjdGlvbiA9IHRoaXMuc2V0dGluZ3MuaW50ZXJhY3Rpb247XG5cdFxuXHQgICAgdGhpcy5fdmFsdWUgPSBuZXcgU3RlcCh0aGlzLnNldHRpbmdzLm1pbiwgdGhpcy5zZXR0aW5ncy5tYXgsIHRoaXMuc2V0dGluZ3Muc3RlcCwgdGhpcy5zZXR0aW5ncy52YWx1ZSk7XG5cdFxuXHQgICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBJbnRlcmFjdGlvbi5IYW5kbGUodGhpcy5zZXR0aW5ncy5tb2RlLCB0aGlzLmludGVyYWN0aW9uLCBbMCwgdGhpcy53aWR0aF0sIFt0aGlzLmhlaWdodCwgMF0pO1xuXHRcblx0ICAgIHRoaXMuaW5pdCgpO1xuXHRcblx0ICAgIHRoaXMudmFsdWUgPSB0aGlzLl92YWx1ZS52YWx1ZTtcblx0XG5cdCAgICB0aGlzLnBvc2l0aW9uLnZhbHVlID0gdGhpcy5fdmFsdWUubm9ybWFsaXplZDtcblx0XG5cdCAgICB0aGlzLnByZXZpb3VzQW5nbGUgPSBmYWxzZTtcblx0XG5cdCAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwgdGhpcy52YWx1ZSk7XG5cdCAgfVxuXHRcblx0ICBfaW5oZXJpdHMoRGlhbCwgX0ludGVyZmFjZSk7XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhEaWFsLCB7XG5cdCAgICBidWlsZEludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIHRoaXMuYmFja2dyb3VuZCA9IHN2Zy5jcmVhdGUoXCJjaXJjbGVcIik7XG5cdCAgICAgICAgdGhpcy5zY3JldyA9IHN2Zy5jcmVhdGUoXCJjaXJjbGVcIik7XG5cdCAgICAgICAgdGhpcy5oYW5kbGUgPSBzdmcuY3JlYXRlKFwicGF0aFwiKTtcblx0ICAgICAgICB0aGlzLmhhbmRsZTIgPSBzdmcuY3JlYXRlKFwicGF0aFwiKTtcblx0ICAgICAgICB0aGlzLmhhbmRsZUZpbGwgPSBzdmcuY3JlYXRlKFwicGF0aFwiKTtcblx0ICAgICAgICB0aGlzLmhhbmRsZTJGaWxsID0gc3ZnLmNyZWF0ZShcInBhdGhcIik7XG5cdCAgICAgICAgdGhpcy5oYW5kbGVMaW5lID0gc3ZnLmNyZWF0ZShcInBhdGhcIik7XG5cdFxuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmJhY2tncm91bmQpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmhhbmRsZSk7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuaGFuZGxlMik7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuaGFuZGxlRmlsbCk7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuaGFuZGxlMkZpbGwpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmhhbmRsZUxpbmUpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcmV3KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNpemVJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNpemVJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIHRoaXMucG9zaXRpb24ucmVzaXplKFswLCB0aGlzLndpZHRoXSwgW3RoaXMuaGVpZ2h0LCAwXSk7XG5cdFxuXHQgICAgICAgIHZhciBjZW50ZXIgPSB7XG5cdCAgICAgICAgICB4OiB0aGlzLndpZHRoIC8gMixcblx0ICAgICAgICAgIHk6IHRoaXMuaGVpZ2h0IC8gMlxuXHQgICAgICAgIH07XG5cdFxuXHQgICAgICAgIHZhciBkaWFtZXRlciA9IE1hdGgubWluKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblx0XG5cdCAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLnNldEF0dHJpYnV0ZShcImN4XCIsIGNlbnRlci54KTtcblx0ICAgICAgICB0aGlzLmJhY2tncm91bmQuc2V0QXR0cmlidXRlKFwiY3lcIiwgY2VudGVyLnkpO1xuXHQgICAgICAgIHRoaXMuYmFja2dyb3VuZC5zZXRBdHRyaWJ1dGUoXCJyXCIsIGRpYW1ldGVyIC8gMiAtIGRpYW1ldGVyIC8gNDApO1xuXHRcblx0ICAgICAgICB0aGlzLnNjcmV3LnNldEF0dHJpYnV0ZShcImN4XCIsIGNlbnRlci54KTtcblx0ICAgICAgICB0aGlzLnNjcmV3LnNldEF0dHJpYnV0ZShcImN5XCIsIGNlbnRlci55KTtcblx0ICAgICAgICB0aGlzLnNjcmV3LnNldEF0dHJpYnV0ZShcInJcIiwgZGlhbWV0ZXIgLyAxMik7XG5cdFxuXHQgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWU7XG5cdFxuXHQgICAgICAgIHZhciBoYW5kbGVQb2ludHMgPSB7XG5cdCAgICAgICAgICBzdGFydDogTWF0aC5QSSAqIDEuNSxcblx0ICAgICAgICAgIGVuZDogbWF0aC5jbGlwKG1hdGguc2NhbGUodmFsdWUsIDAsIDAuNSwgTWF0aC5QSSAqIDEuNSwgTWF0aC5QSSAqIDAuNSksIE1hdGguUEkgKiAwLjUsIE1hdGguUEkgKiAxLjUpXG5cdCAgICAgICAgfTtcblx0ICAgICAgICB2YXIgaGFuZGxlMlBvaW50cyA9IHtcblx0ICAgICAgICAgIHN0YXJ0OiBNYXRoLlBJICogMi41LFxuXHQgICAgICAgICAgZW5kOiBtYXRoLmNsaXAobWF0aC5zY2FsZSh2YWx1ZSwgMC41LCAxLCBNYXRoLlBJICogMi41LCBNYXRoLlBJICogMS41KSwgTWF0aC5QSSAqIDEuNSwgTWF0aC5QSSAqIDIuNSlcblx0ICAgICAgICB9O1xuXHRcblx0ICAgICAgICB2YXIgaGFuZGxlUGF0aCA9IHN2Zy5hcmMoY2VudGVyLngsIGNlbnRlci55LCBkaWFtZXRlciAvIDIgLSBkaWFtZXRlciAvIDQwLCBoYW5kbGVQb2ludHMuc3RhcnQsIGhhbmRsZVBvaW50cy5lbmQpO1xuXHQgICAgICAgIHZhciBoYW5kbGUyUGF0aCA9IHN2Zy5hcmMoY2VudGVyLngsIGNlbnRlci55LCBkaWFtZXRlciAvIDIgLSBkaWFtZXRlciAvIDQwLCBoYW5kbGUyUG9pbnRzLnN0YXJ0LCBoYW5kbGUyUG9pbnRzLmVuZCk7XG5cdFxuXHQgICAgICAgIHRoaXMuaGFuZGxlLnNldEF0dHJpYnV0ZShcImRcIiwgaGFuZGxlUGF0aCk7XG5cdCAgICAgICAgdGhpcy5oYW5kbGUuc2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIsIGRpYW1ldGVyIC8gMjApO1xuXHQgICAgICAgIHRoaXMuaGFuZGxlLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgXCJub25lXCIpO1xuXHRcblx0ICAgICAgICB0aGlzLmhhbmRsZTIuc2V0QXR0cmlidXRlKFwiZFwiLCBoYW5kbGUyUGF0aCk7XG5cdCAgICAgICAgdGhpcy5oYW5kbGUyLnNldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiLCBkaWFtZXRlciAvIDIwKTtcblx0ICAgICAgICB0aGlzLmhhbmRsZTIuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCBcIm5vbmVcIik7XG5cdFxuXHQgICAgICAgIGhhbmRsZVBhdGggKz0gXCIgTCBcIiArIGNlbnRlci54ICsgXCIgXCIgKyBjZW50ZXIueTtcblx0XG5cdCAgICAgICAgdGhpcy5oYW5kbGVGaWxsLnNldEF0dHJpYnV0ZShcImRcIiwgaGFuZGxlUGF0aCk7XG5cdCAgICAgICAgdGhpcy5oYW5kbGVGaWxsLnNldEF0dHJpYnV0ZShcImZpbGwtb3BhY2l0eVwiLCBcIjAuM1wiKTtcblx0XG5cdCAgICAgICAgaGFuZGxlMlBhdGggKz0gXCIgTCBcIiArIGNlbnRlci54ICsgXCIgXCIgKyBjZW50ZXIueTtcblx0XG5cdCAgICAgICAgdGhpcy5oYW5kbGUyRmlsbC5zZXRBdHRyaWJ1dGUoXCJkXCIsIGhhbmRsZTJQYXRoKTtcblx0ICAgICAgICB0aGlzLmhhbmRsZTJGaWxsLnNldEF0dHJpYnV0ZShcImZpbGwtb3BhY2l0eVwiLCBcIjAuM1wiKTtcblx0XG5cdCAgICAgICAgdmFyIGFyY0VuZGluZ0EgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgaWYgKHZhbHVlIDwgMC41KSB7XG5cdCAgICAgICAgICBhcmNFbmRpbmdBID0gaGFuZGxlUG9pbnRzLmVuZDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgYXJjRW5kaW5nQSA9IGhhbmRsZTJQb2ludHMuZW5kO1xuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgdmFyIGFyY0VuZGluZ1ggPSBjZW50ZXIueCArIE1hdGguY29zKGFyY0VuZGluZ0EpICogKGRpYW1ldGVyIC8gMik7XG5cdCAgICAgICAgdmFyIGFyY0VuZGluZ1kgPSBjZW50ZXIueSArIE1hdGguc2luKGFyY0VuZGluZ0EpICogKGRpYW1ldGVyIC8gMikgKiAtMTtcblx0XG5cdCAgICAgICAgdGhpcy5oYW5kbGVMaW5lLnNldEF0dHJpYnV0ZShcImRcIiwgXCJNIFwiICsgY2VudGVyLnggKyBcIiBcIiArIGNlbnRlci55ICsgXCIgTCBcIiArIGFyY0VuZGluZ1ggKyBcIiBcIiArIGFyY0VuZGluZ1kpO1xuXHQgICAgICAgIHRoaXMuaGFuZGxlTGluZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIiwgZGlhbWV0ZXIgLyAyMCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjb2xvckludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY29sb3JJbnRlcmZhY2UoKSB7XG5cdCAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5jb2xvcnMuZmlsbCk7XG5cdCAgICAgICAgdGhpcy5zY3Jldy5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLmFjY2VudCk7XG5cdCAgICAgICAgdGhpcy5oYW5kbGUuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIHRoaXMuY29sb3JzLmFjY2VudCk7XG5cdCAgICAgICAgdGhpcy5oYW5kbGUyLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCB0aGlzLmNvbG9ycy5hY2NlbnQpO1xuXHQgICAgICAgIHRoaXMuaGFuZGxlRmlsbC5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLmFjY2VudCk7XG5cdCAgICAgICAgdGhpcy5oYW5kbGUyRmlsbC5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLmFjY2VudCk7XG5cdCAgICAgICAgdGhpcy5oYW5kbGVMaW5lLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCB0aGlzLmNvbG9ycy5hY2NlbnQpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVuZGVyOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdCAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fdmFsdWUubm9ybWFsaXplZDtcblx0XG5cdCAgICAgICAgdmFyIGNlbnRlciA9IHtcblx0ICAgICAgICAgIHg6IHRoaXMud2lkdGggLyAyLFxuXHQgICAgICAgICAgeTogdGhpcy5oZWlnaHQgLyAyXG5cdCAgICAgICAgfTtcblx0XG5cdCAgICAgICAgdmFyIGRpYW1ldGVyID0gTWF0aC5taW4odGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXHRcblx0ICAgICAgICB2YXIgaGFuZGxlUG9pbnRzID0ge1xuXHQgICAgICAgICAgc3RhcnQ6IE1hdGguUEkgKiAxLjUsXG5cdCAgICAgICAgICBlbmQ6IG1hdGguY2xpcChtYXRoLnNjYWxlKHZhbHVlLCAwLCAwLjUsIE1hdGguUEkgKiAxLjUsIE1hdGguUEkgKiAwLjUpLCBNYXRoLlBJICogMC41LCBNYXRoLlBJICogMS41KVxuXHQgICAgICAgIH07XG5cdCAgICAgICAgdmFyIGhhbmRsZTJQb2ludHMgPSB7XG5cdCAgICAgICAgICBzdGFydDogTWF0aC5QSSAqIDIuNSxcblx0ICAgICAgICAgIGVuZDogbWF0aC5jbGlwKG1hdGguc2NhbGUodmFsdWUsIDAuNSwgMSwgTWF0aC5QSSAqIDIuNSwgTWF0aC5QSSAqIDEuNSksIE1hdGguUEkgKiAxLjUsIE1hdGguUEkgKiAyLjUpXG5cdCAgICAgICAgfTtcblx0XG5cdCAgICAgICAgdmFyIGhhbmRsZVBhdGggPSBzdmcuYXJjKGNlbnRlci54LCBjZW50ZXIueSwgZGlhbWV0ZXIgLyAyIC0gZGlhbWV0ZXIgLyA0MCwgaGFuZGxlUG9pbnRzLnN0YXJ0LCBoYW5kbGVQb2ludHMuZW5kKTtcblx0ICAgICAgICB2YXIgaGFuZGxlMlBhdGggPSBzdmcuYXJjKGNlbnRlci54LCBjZW50ZXIueSwgZGlhbWV0ZXIgLyAyIC0gZGlhbWV0ZXIgLyA0MCwgaGFuZGxlMlBvaW50cy5zdGFydCwgaGFuZGxlMlBvaW50cy5lbmQpO1xuXHRcblx0ICAgICAgICB0aGlzLmhhbmRsZS5zZXRBdHRyaWJ1dGUoXCJkXCIsIGhhbmRsZVBhdGgpO1xuXHQgICAgICAgIHRoaXMuaGFuZGxlMi5zZXRBdHRyaWJ1dGUoXCJkXCIsIGhhbmRsZTJQYXRoKTtcblx0XG5cdCAgICAgICAgaGFuZGxlUGF0aCArPSBcIiBMIFwiICsgY2VudGVyLnggKyBcIiBcIiArIGNlbnRlci55O1xuXHRcblx0ICAgICAgICB0aGlzLmhhbmRsZUZpbGwuc2V0QXR0cmlidXRlKFwiZFwiLCBoYW5kbGVQYXRoKTtcblx0XG5cdCAgICAgICAgaGFuZGxlMlBhdGggKz0gXCIgTCBcIiArIGNlbnRlci54ICsgXCIgXCIgKyBjZW50ZXIueTtcblx0XG5cdCAgICAgICAgdGhpcy5oYW5kbGUyRmlsbC5zZXRBdHRyaWJ1dGUoXCJkXCIsIGhhbmRsZTJQYXRoKTtcblx0XG5cdCAgICAgICAgdmFyIGFyY0VuZGluZ0EgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgaWYgKHZhbHVlIDw9IDAuNSkge1xuXHQgICAgICAgICAgYXJjRW5kaW5nQSA9IGhhbmRsZVBvaW50cy5lbmQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIGFyY0VuZGluZ0EgPSBoYW5kbGUyUG9pbnRzLmVuZDtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIHZhciBhcmNFbmRpbmdYID0gY2VudGVyLnggKyBNYXRoLmNvcyhhcmNFbmRpbmdBKSAqIChkaWFtZXRlciAvIDIpO1xuXHQgICAgICAgIHZhciBhcmNFbmRpbmdZID0gY2VudGVyLnkgKyBNYXRoLnNpbihhcmNFbmRpbmdBKSAqIChkaWFtZXRlciAvIDIpICogLTE7XG5cdFxuXHQgICAgICAgIHRoaXMuaGFuZGxlTGluZS5zZXRBdHRyaWJ1dGUoXCJkXCIsIFwiTSBcIiArIGNlbnRlci54ICsgXCIgXCIgKyBjZW50ZXIueSArIFwiIEwgXCIgKyBhcmNFbmRpbmdYICsgXCIgXCIgKyBhcmNFbmRpbmdZKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNsaWNrOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGljaygpIHtcblx0ICAgICAgICBpZiAodGhpcy5tb2RlID09PSBcInJlbGF0aXZlXCIpIHtcblx0ICAgICAgICAgIHRoaXMucHJldmlvdXNBbmdsZSA9IGZhbHNlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLnBvc2l0aW9uLmFuY2hvciA9IHRoaXMubW91c2U7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvbi52YWx1ZSA9IHRoaXMuX3ZhbHVlLm5vcm1hbGl6ZWQ7XG5cdCAgICAgICAgdGhpcy5tb3ZlKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtb3ZlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBtb3ZlKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmNsaWNrZWQpIHtcblx0XG5cdCAgICAgICAgICB0aGlzLnBvc2l0aW9uLnVwZGF0ZSh0aGlzLm1vdXNlKTtcblx0XG5cdCAgICAgICAgICB2YXIgYW5nbGUgPSB0aGlzLnBvc2l0aW9uLnZhbHVlICogTWF0aC5QSSAqIDI7XG5cdFxuXHQgICAgICAgICAgaWYgKGFuZ2xlIDwgMCkge1xuXHQgICAgICAgICAgICBhbmdsZSArPSBNYXRoLlBJICogMjtcblx0ICAgICAgICAgIH1cblx0XG5cdCAgICAgICAgICBpZiAodGhpcy5tb2RlID09PSBcInJlbGF0aXZlXCIpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMucHJldmlvdXNBbmdsZSAhPT0gZmFsc2UgJiYgTWF0aC5hYnModGhpcy5wcmV2aW91c0FuZ2xlIC0gYW5nbGUpID4gMikge1xuXHQgICAgICAgICAgICAgIGlmICh0aGlzLnByZXZpb3VzQW5nbGUgPiAzKSB7XG5cdCAgICAgICAgICAgICAgICBhbmdsZSA9IE1hdGguUEkgKiAyO1xuXHQgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBhbmdsZSA9IDA7XG5cdCAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9IC8qIGVsc2Uge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5wcmV2aW91c0FuZ2xlICE9PSBmYWxzZSAmJiBNYXRoLmFicyh0aGlzLnByZXZpb3VzQW5nbGUgLSBhbmdsZSkgPiAyKSB7XG5cdCAgICAgICAgICAgICAgaWYgKHRoaXMucHJldmlvdXNBbmdsZSA+IDMpIHtcblx0ICAgICAgICAgICAgICAgIGFuZ2xlID0gTWF0aC5QSSoyO1xuXHQgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBhbmdsZSA9IDA7XG5cdCAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gKi9cblx0ICAgICAgICAgIHRoaXMucHJldmlvdXNBbmdsZSA9IGFuZ2xlO1xuXHRcblx0ICAgICAgICAgIHZhciByZWFsVmFsdWUgPSBhbmdsZSAvIChNYXRoLlBJICogMik7XG5cdFxuXHQgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuX3ZhbHVlLnVwZGF0ZU5vcm1hbChyZWFsVmFsdWUpO1xuXHRcblx0ICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwicmVsYXRpdmVcIikge1xuXHQgICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnZhbHVlID0gcmVhbFZhbHVlO1xuXHQgICAgICAgICAgfVxuXHRcblx0ICAgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB0aGlzLl92YWx1ZS52YWx1ZSk7XG5cdFxuXHQgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByZWxlYXNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWxlYXNlKCkge31cblx0ICAgIH0sXG5cdCAgICB2YWx1ZToge1xuXHRcblx0ICAgICAgLypcblx0ICAgICAgRGlhbCdzIHZhbHVlLiBXaGVuIHNldCwgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGFkanVzdCB0byBmaXQgbWluL21heC9zdGVwIHNldHRpbmdzIG9mIHRoZSBpbnRlcmZhY2UuXG5cdCAgICAgIEB0eXBlIHtudW1iZXJ9XG5cdCAgICAgIEBleGFtcGxlIGRpYWwudmFsdWUgPSAxMDtcblx0ICAgICAgIGdldCB2YWx1ZSgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUudmFsdWU7XG5cdCAgICAgIH1cblx0ICAgICAgIHNldCB2YWx1ZSh2YWx1ZSkge1xuXHQgICAgICAgIHRoaXMuX3ZhbHVlLnVwZGF0ZSh2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5lbWl0KCdjaGFuZ2UnLHRoaXMudmFsdWUpO1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgICAgKi9cblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBEaWFsJ3MgdmFsdWUuIFdoZW4gc2V0LCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgYWRqdXN0IHRvIGZpdCBtaW4vbWF4L3N0ZXAgc2V0dGluZ3Mgb2YgdGhlIGludGVyZmFjZS5cblx0ICAgICAgQHR5cGUge251bWJlcn1cblx0ICAgICAgQGV4YW1wbGUgZGlhbC52YWx1ZSA9IDEwO1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlLnZhbHVlO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5fdmFsdWUudXBkYXRlKHYpO1xuXHQgICAgICAgIHRoaXMucG9zaXRpb24udmFsdWUgPSB0aGlzLl92YWx1ZS5ub3JtYWxpemVkO1xuXHQgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB0aGlzLl92YWx1ZS52YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1pbjoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIExvd2VyIGxpbWl0IG9mIHRoZSBkaWFsJ3Mgb3V0cHV0IHJhbmdlXG5cdCAgICAgIEB0eXBlIHtudW1iZXJ9XG5cdCAgICAgIEBleGFtcGxlIGRpYWwubWluID0gMTAwMDtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZS5taW47XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLl92YWx1ZS5taW4gPSB2O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbWF4OiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgVXBwZXIgbGltaXQgb2YgdGhlIGRpYWwncyBvdXRwdXQgcmFuZ2Vcblx0ICAgICAgQHR5cGUge251bWJlcn1cblx0ICAgICAgQGV4YW1wbGUgZGlhbC5tYXggPSAxMDAwO1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlLm1heDtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuXHQgICAgICAgIHRoaXMuX3ZhbHVlLm1heCA9IHY7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzdGVwOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgVGhlIGluY3JlbWVudCB0aGF0IHRoZSBkaWFsJ3MgdmFsdWUgY2hhbmdlcyBieS5cblx0ICAgICAgQHR5cGUge251bWJlcn1cblx0ICAgICAgQGV4YW1wbGUgZGlhbC5zdGVwID0gNTtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZS5zdGVwO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5fdmFsdWUuc3RlcCA9IHY7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtb2RlOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgQWJzb2x1dGUgbW9kZSAoZGlhbCdzIHZhbHVlIGp1bXBzIHRvIG1vdXNlIGNsaWNrIHBvc2l0aW9uKSBvciByZWxhdGl2ZSBtb2RlIChtb3VzZSBkcmFnIGNoYW5nZXMgdmFsdWUgcmVsYXRpdmUgdG8gaXRzIGN1cnJlbnQgcG9zaXRpb24pLiBEZWZhdWx0OiBcInJlbGF0aXZlXCIuXG5cdCAgICAgIEB0eXBlIHtzdHJpbmd9XG5cdCAgICAgIEBleGFtcGxlIGRpYWwubW9kZSA9IFwicmVsYXRpdmVcIjtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLm1vZGU7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uLm1vZGUgPSB2O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbm9ybWFsaXplZDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIE5vcm1hbGl6ZWQgdmFsdWUgb2YgdGhlIGRpYWwuXG5cdCAgICAgIEB0eXBlIHtudW1iZXJ9XG5cdCAgICAgIEBleGFtcGxlIGRpYWwubm9ybWFsaXplZCA9IDAuNTtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZS5ub3JtYWxpemVkO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5fdmFsdWUudXBkYXRlTm9ybWFsKHYpO1xuXHQgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB0aGlzLnZhbHVlKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pO1xuXHRcblx0ICByZXR1cm4gRGlhbDtcblx0fSkoSW50ZXJmYWNlKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gRGlhbDtcblxuLyoqKi8gfSksXG4vKiAyMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHsgdmFyIHByb3AgPSBwcm9wc1trZXldOyBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChwcm9wLnZhbHVlKSBwcm9wLndyaXRhYmxlID0gdHJ1ZTsgfSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKTsgfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXHRcblx0dmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyByZXR1cm4gZ2V0KHBhcmVudCwgcHJvcGVydHksIHJlY2VpdmVyKTsgfSB9IGVsc2UgaWYgKFwidmFsdWVcIiBpbiBkZXNjICYmIGRlc2Mud3JpdGFibGUpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9O1xuXHRcblx0dmFyIF9pbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9O1xuXHRcblx0dmFyIF9jbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9O1xuXHRcblx0dmFyIHN2ZyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cdHZhciBJbnRlcmZhY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xuXHR2YXIgQnV0dG9uVGVtcGxhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcblx0dmFyIHRvdWNoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcblx0XG5cdHZhciBQaWFub0tleSA9IChmdW5jdGlvbiAoX0J1dHRvblRlbXBsYXRlKSB7XG5cdCAgZnVuY3Rpb24gUGlhbm9LZXkoKSB7XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUGlhbm9LZXkpO1xuXHRcblx0ICAgIHZhciBvcHRpb25zID0gW1widmFsdWVcIiwgXCJub3RlXCIsIFwiY29sb3JcIl07XG5cdFxuXHQgICAgdmFyIGRlZmF1bHRzID0ge1xuXHQgICAgICBzaXplOiBbODAsIDgwXSxcblx0ICAgICAgdGFyZ2V0OiBmYWxzZSxcblx0ICAgICAgbW9kZTogXCJidXR0b25cIixcblx0ICAgICAgdmFsdWU6IDBcblx0ICAgIH07XG5cdFxuXHQgICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoUGlhbm9LZXkucHJvdG90eXBlKSwgXCJjb25zdHJ1Y3RvclwiLCB0aGlzKS5jYWxsKHRoaXMsIGFyZ3VtZW50cywgb3B0aW9ucywgZGVmYXVsdHMpO1xuXHRcblx0ICAgIHRoaXMubm90ZSA9IHRoaXMuc2V0dGluZ3Mubm90ZTtcblx0ICAgIHRoaXMuY29sb3IgPSB0aGlzLnNldHRpbmdzLmNvbG9yO1xuXHRcblx0ICAgIHRoaXMuY29sb3JzID0ge1xuXHQgICAgICB3OiBcIiNmZmZcIixcblx0ICAgICAgYjogXCIjNjY2XCIgfTtcblx0XG5cdCAgICB0aGlzLmluaXQoKTtcblx0ICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgfVxuXHRcblx0ICBfaW5oZXJpdHMoUGlhbm9LZXksIF9CdXR0b25UZW1wbGF0ZSk7XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhQaWFub0tleSwge1xuXHQgICAgYnVpbGRGcmFtZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRGcmFtZSgpIHtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQgPSBzdmcuY3JlYXRlKFwic3ZnXCIpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCB0aGlzLndpZHRoKTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIHRoaXMuaGVpZ2h0KTtcblx0ICAgICAgICB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgYnVpbGRJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkSW50ZXJmYWNlKCkge1xuXHQgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cdFxuXHQgICAgICAgIHRoaXMucGFkID0gc3ZnLmNyZWF0ZShcInJlY3RcIik7XG5cdFxuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnBhZCk7XG5cdFxuXHQgICAgICAgIHRoaXMuaW50ZXJhY3Rpb25UYXJnZXQgPSB0aGlzLnBhZDtcblx0XG5cdCAgICAgICAgLyogZXZlbnRzICovXG5cdFxuXHQgICAgICAgIGlmICghdG91Y2guZXhpc3RzKSB7XG5cdFxuXHQgICAgICAgICAgdGhpcy5jbGljayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gIGNvbnNvbGUubG9nKCdjbGljaycpO1xuXHQgICAgICAgICAgICBfdGhpcy5waWFuby5pbnRlcmFjdGluZyA9IHRydWU7XG5cdCAgICAgICAgICAgIF90aGlzLnBpYW5vLnBhaW50YnJ1c2ggPSAhX3RoaXMuc3RhdGU7XG5cdCAgICAgICAgICAgIF90aGlzLmRvd24oX3RoaXMucGlhbm8ucGFpbnRicnVzaCk7XG5cdCAgICAgICAgICB9O1xuXHRcblx0ICAgICAgICAgIHRoaXMucGFkLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAoX3RoaXMucGlhbm8uaW50ZXJhY3RpbmcpIHtcblx0ICAgICAgICAgICAgICAvLyAgICBjb25zb2xlLmxvZygnbW91c2VvdmVyJyk7XG5cdCAgICAgICAgICAgICAgX3RoaXMuZG93bihfdGhpcy5waWFuby5wYWludGJydXNoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSk7XG5cdFxuXHQgICAgICAgICAgdGhpcy5tb3ZlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAoX3RoaXMucGlhbm8uaW50ZXJhY3RpbmcpIHtcblx0ICAgICAgICAgICAgICAvLyAgY29uc29sZS5sb2coJ21vdmUnKTtcblx0ICAgICAgICAgICAgICBfdGhpcy5iZW5kKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH07XG5cdFxuXHQgICAgICAgICAgdGhpcy5yZWxlYXNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBfdGhpcy5waWFuby5pbnRlcmFjdGluZyA9IGZhbHNlO1xuXHQgICAgICAgICAgICAvLyAgY29uc29sZS5sb2coJ3JlbGVhc2UnKTtcblx0ICAgICAgICAgICAgLy8gIHRoaXMudXAoKTtcblx0ICAgICAgICAgIH07XG5cdCAgICAgICAgICB0aGlzLnBhZC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmIChfdGhpcy5waWFuby5pbnRlcmFjdGluZykge1xuXHQgICAgICAgICAgICAgIC8vICBjb25zb2xlLmxvZygnbW91c2V1cCcpO1xuXHQgICAgICAgICAgICAgIF90aGlzLnVwKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgdGhpcy5wYWQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3V0XCIsIGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKF90aGlzLnBpYW5vLmludGVyYWN0aW5nKSB7XG5cdCAgICAgICAgICAgICAgLy8gIGNvbnNvbGUubG9nKCdtb3VzZW91dCcpO1xuXHQgICAgICAgICAgICAgIF90aGlzLnVwKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNpemVJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNpemVJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIC8vbGV0IHJhZGl1cyA9IE1hdGgubWluKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpIC8gNTtcblx0ICAgICAgICB2YXIgcmFkaXVzID0gMDtcblx0XG5cdCAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwieFwiLCAwLjUpO1xuXHQgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcInlcIiwgMC41KTtcblx0ICAgICAgICBpZiAodGhpcy53aWR0aCA+IDIpIHtcblx0ICAgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIHRoaXMud2lkdGggLSAxKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgdGhpcy53aWR0aCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLmhlaWdodCA+IDIpIHtcblx0ICAgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCB0aGlzLmhlaWdodCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCB0aGlzLmhlaWdodCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcInJ4XCIsIHJhZGl1cyk7XG5cdCAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwicnlcIiwgcmFkaXVzKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlbmRlcjoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHQgICAgICAgIGlmICghdGhpcy5zdGF0ZSkge1xuXHQgICAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmNvbG9yc1t0aGlzLmNvbG9yXSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5jb2xvcnMuYWNjZW50KTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIFBpYW5vS2V5O1xuXHR9KShCdXR0b25UZW1wbGF0ZSk7XG5cdFxuXHQvKipcblx0KiBQaWFub1xuXHQqXG5cdCogQGRlc2NyaXB0aW9uIFBpYW5vIGtleWJvYXJkIGludGVyZmFjZVxuXHQqXG5cdCogQGRlbW8gPGRpdiBuZXh1cy11aT1cInBpYW5vXCI+PC9kaXY+XG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciBwaWFubyA9IG5ldyBOZXh1cy5QaWFubygnI3RhcmdldCcpXG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciBwaWFubyA9IG5ldyBOZXh1cy5QaWFubygnI3RhcmdldCcse1xuXHQqICAgICAnc2l6ZSc6IFs1MDAsMTI1XSxcblx0KiAgICAgJ21vZGUnOiAnYnV0dG9uJywgIC8vICdidXR0b24nLCAndG9nZ2xlJywgb3IgJ2ltcHVsc2UnXG5cdCogICAgICdsb3dOb3RlJzogMjQsXG5cdCogICAgICdoaWdoTm90ZSc6IDYwXG5cdCogfSlcblx0KlxuXHQqIEBvdXRwdXRcblx0KiBjaGFuZ2Vcblx0KiBGaXJlcyBhbnkgdGltZSBhIG5ldyBrZXkgaXMgcHJlc3NlZCBvciByZWxlYXNlZCA8YnI+XG5cdCogVGhlIGV2ZW50IGRhdGEgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgPGk+bm90ZTwvaT4gYW5kIDxpPnN0YXRlPC9pPiBwcm9wZXJ0aWVzLlxuXHQqXG5cdCogQG91dHB1dGV4YW1wbGVcblx0KiBwaWFuby5vbignY2hhbmdlJyxmdW5jdGlvbih2KSB7XG5cdCogICBjb25zb2xlLmxvZyh2KTtcblx0KiB9KVxuXHQqXG5cdCovXG5cdFxuXHR2YXIgUGlhbm8gPSAoZnVuY3Rpb24gKF9JbnRlcmZhY2UpIHtcblx0ICBmdW5jdGlvbiBQaWFubygpIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQaWFubyk7XG5cdFxuXHQgICAgdmFyIG9wdGlvbnMgPSBbXCJ2YWx1ZVwiXTtcblx0XG5cdCAgICB2YXIgZGVmYXVsdHMgPSB7XG5cdCAgICAgIHNpemU6IFs1MDAsIDEyNV0sXG5cdCAgICAgIGxvd05vdGU6IDI0LFxuXHQgICAgICBoaWdoTm90ZTogNjAsXG5cdCAgICAgIG1vZGU6IFwiYnV0dG9uXCJcblx0ICAgIH07XG5cdFxuXHQgICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoUGlhbm8ucHJvdG90eXBlKSwgXCJjb25zdHJ1Y3RvclwiLCB0aGlzKS5jYWxsKHRoaXMsIGFyZ3VtZW50cywgb3B0aW9ucywgZGVmYXVsdHMpO1xuXHRcblx0ICAgIHRoaXMua2V5UGF0dGVybiA9IFtcIndcIiwgXCJiXCIsIFwid1wiLCBcImJcIiwgXCJ3XCIsIFwid1wiLCBcImJcIiwgXCJ3XCIsIFwiYlwiLCBcIndcIiwgXCJiXCIsIFwid1wiXTtcblx0XG5cdCAgICB0aGlzLnBhaW50YnJ1c2ggPSBmYWxzZTtcblx0XG5cdCAgICB0aGlzLm1vZGUgPSB0aGlzLnNldHRpbmdzLm1vZGU7XG5cdFxuXHQgICAgdGhpcy5yYW5nZSA9IHtcblx0ICAgICAgbG93OiB0aGlzLnNldHRpbmdzLmxvd05vdGUsXG5cdCAgICAgIGhpZ2g6IHRoaXMuc2V0dGluZ3MuaGlnaE5vdGVcblx0ICAgIH07XG5cdFxuXHQgICAgdGhpcy5yYW5nZS5zaXplID0gdGhpcy5yYW5nZS5oaWdoIC0gdGhpcy5yYW5nZS5sb3c7XG5cdFxuXHQgICAgdGhpcy5rZXlzID0gW107XG5cdFxuXHQgICAgdGhpcy50b2dnbGVUbyA9IGZhbHNlO1xuXHRcblx0ICAgIHRoaXMuaW5pdCgpO1xuXHQgICAgdGhpcy5yZW5kZXIoKTtcblx0ICB9XG5cdFxuXHQgIF9pbmhlcml0cyhQaWFubywgX0ludGVyZmFjZSk7XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhQaWFubywge1xuXHQgICAgYnVpbGRGcmFtZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRGcmFtZSgpIHtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuYm9yZGVyUmFkaXVzID0gXCIwcHhcIjtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gXCIxMDAlXCI7XG5cdCAgICAgICAgdGhpcy5wYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGJ1aWxkSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgdGhpcy5rZXlzID0gW107XG5cdFxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yYW5nZS5oaWdoIC0gdGhpcy5yYW5nZS5sb3c7IGkrKykge1xuXHRcblx0ICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcblx0ICAgICAgICAgIHZhciBzY2FsZUluZGV4ID0gKGkgKyB0aGlzLnJhbmdlLmxvdykgJSB0aGlzLmtleVBhdHRlcm4ubGVuZ3RoO1xuXHRcblx0ICAgICAgICAgIHZhciBrZXkgPSBuZXcgUGlhbm9LZXkoY29udGFpbmVyLCB7XG5cdCAgICAgICAgICAgIGNvbXBvbmVudDogdHJ1ZSxcblx0ICAgICAgICAgICAgbm90ZTogaSArIHRoaXMucmFuZ2UubG93LFxuXHQgICAgICAgICAgICBjb2xvcjogdGhpcy5rZXlQYXR0ZXJuW3NjYWxlSW5kZXhdLFxuXHQgICAgICAgICAgICBtb2RlOiB0aGlzLm1vZGVcblx0ICAgICAgICAgIH0sIHRoaXMua2V5Q2hhbmdlLmJpbmQodGhpcywgaSArIHRoaXMucmFuZ2UubG93KSk7XG5cdFxuXHQgICAgICAgICAga2V5LnBpYW5vID0gdGhpcztcblx0XG5cdCAgICAgICAgICBpZiAodG91Y2guZXhpc3RzKSB7XG5cdCAgICAgICAgICAgIGtleS5wYWQuaW5kZXggPSBpO1xuXHQgICAgICAgICAgICBrZXkucHJlQ2xpY2sgPSBrZXkucHJlTW92ZSA9IGtleS5wcmVSZWxlYXNlID0gZnVuY3Rpb24gKCkge307XG5cdCAgICAgICAgICAgIGtleS5jbGljayA9IGtleS5tb3ZlID0ga2V5LnJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7fTtcblx0ICAgICAgICAgICAga2V5LnByZVRvdWNoID0ga2V5LnByZVRvdWNoTW92ZSA9IGtleS5wcmVUb3VjaFJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7fTtcblx0ICAgICAgICAgICAga2V5LnRvdWNoID0ga2V5LnRvdWNoTW92ZSA9IGtleS50b3VjaFJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7fTtcblx0ICAgICAgICAgIH1cblx0XG5cdCAgICAgICAgICB0aGlzLmtleXMucHVzaChrZXkpO1xuXHQgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0b3VjaC5leGlzdHMpIHtcblx0ICAgICAgICAgIHRoaXMuYWRkVG91Y2hMaXN0ZW5lcnMoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzaXplSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaXplSW50ZXJmYWNlKCkge1xuXHRcblx0ICAgICAgICB2YXIga2V5WCA9IDA7XG5cdFxuXHQgICAgICAgIHZhciBrZXlQb3NpdGlvbnMgPSBbXTtcblx0XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJhbmdlLmhpZ2ggLSB0aGlzLnJhbmdlLmxvdzsgaSsrKSB7XG5cdFxuXHQgICAgICAgICAga2V5UG9zaXRpb25zLnB1c2goa2V5WCk7XG5cdFxuXHQgICAgICAgICAgdmFyIHNjYWxlSW5kZXggPSAoaSArIHRoaXMucmFuZ2UubG93KSAlIHRoaXMua2V5UGF0dGVybi5sZW5ndGg7XG5cdCAgICAgICAgICB2YXIgbmV4dFNjYWxlSW5kZXggPSAoaSArIDEgKyB0aGlzLnJhbmdlLmxvdykgJSB0aGlzLmtleVBhdHRlcm4ubGVuZ3RoO1xuXHQgICAgICAgICAgaWYgKGkgKyAxICsgdGhpcy5yYW5nZS5sb3cgPj0gdGhpcy5yYW5nZS5oaWdoKSB7XG5cdCAgICAgICAgICAgIGtleVggKz0gMTtcblx0ICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5rZXlQYXR0ZXJuW3NjYWxlSW5kZXhdID09PSBcIndcIiAmJiB0aGlzLmtleVBhdHRlcm5bbmV4dFNjYWxlSW5kZXhdID09PSBcIndcIikge1xuXHQgICAgICAgICAgICBrZXlYICs9IDE7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBrZXlYICs9IDAuNTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIGtleXNXaWRlID0ga2V5WDtcblx0XG5cdCAgICAgICAgLy8gIGxldCBwYWRkaW5nID0gdGhpcy53aWR0aCAvIDEyMDtcblx0ICAgICAgICB2YXIgcGFkZGluZyA9IDE7XG5cdCAgICAgICAgdmFyIGJ1dHRvbldpZHRoID0gKHRoaXMud2lkdGggLSBwYWRkaW5nICogMikgLyBrZXlzV2lkZTtcblx0ICAgICAgICB2YXIgYnV0dG9uSGVpZ2h0ID0gKHRoaXMuaGVpZ2h0IC0gcGFkZGluZyAqIDIpIC8gMjtcblx0XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmtleXMubGVuZ3RoOyBpKyspIHtcblx0XG5cdCAgICAgICAgICB2YXIgY29udGFpbmVyID0gdGhpcy5rZXlzW2ldLnBhcmVudDtcblx0ICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblx0ICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0ga2V5UG9zaXRpb25zW2ldICogYnV0dG9uV2lkdGggKyBwYWRkaW5nICsgXCJweFwiO1xuXHQgICAgICAgICAgaWYgKHRoaXMua2V5c1tpXS5jb2xvciA9PT0gXCJ3XCIpIHtcblx0ICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnRvcCA9IHBhZGRpbmcgKyBcInB4XCI7XG5cdCAgICAgICAgICAgIHRoaXMua2V5c1tpXS5yZXNpemUoYnV0dG9uV2lkdGgsIGJ1dHRvbkhlaWdodCAqIDIpO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnpJbmRleCA9IDE7XG5cdCAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50b3AgPSBwYWRkaW5nICsgXCJweFwiO1xuXHQgICAgICAgICAgICB0aGlzLmtleXNbaV0ucmVzaXplKGJ1dHRvbldpZHRoLCBidXR0b25IZWlnaHQgKiAxLjEpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNvbG9ySW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb2xvckludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgLy8gUGlhbm8ga2V5cyBkb24ndCBhY3R1YWxseSBoYXZlIGEgc3Ryb2tlIGJvcmRlclxuXHQgICAgICAgIC8vIFRoZXkgaGF2ZSBzcGFjZSBiZXR3ZWVuIHRoZW0sIHdoaWNoIHNob3dzIHRoZSBQaWFubyBiZyBjb2xvclxuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmNvbG9ycy5tZWRpdW1MaWdodDtcblx0XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmtleXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgIHRoaXMua2V5c1tpXS5jb2xvcnMgPSB7XG5cdCAgICAgICAgICAgIHc6IHRoaXMuY29sb3JzLmxpZ2h0LFxuXHQgICAgICAgICAgICBiOiB0aGlzLmNvbG9ycy5kYXJrLFxuXHQgICAgICAgICAgICBhY2NlbnQ6IHRoaXMuY29sb3JzLmFjY2VudCxcblx0ICAgICAgICAgICAgYm9yZGVyOiB0aGlzLmNvbG9ycy5tZWRpdW1MaWdodFxuXHQgICAgICAgICAgfTtcblx0ICAgICAgICAgIHRoaXMua2V5c1tpXS5jb2xvckludGVyZmFjZSgpO1xuXHQgICAgICAgICAgdGhpcy5rZXlzW2ldLnJlbmRlcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGtleUNoYW5nZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24ga2V5Q2hhbmdlKG5vdGUsIG9uKSB7XG5cdCAgICAgICAgLy8gZW1pdCBkYXRhIGZvciBhbnkga2V5IHR1cm5pbmcgb24vb2ZmXG5cdCAgICAgICAgLy8gXCJub3RlXCIgaXMgdGhlIG5vdGUgdmFsdWVcblx0ICAgICAgICAvLyBcIm9uXCIgaXMgYSBib29sZWFuIHdoZXRoZXIgaXQgaXMgb24gb3Igb2ZmXG5cdCAgICAgICAgLy8gaW4gYWZ0ZXJ0b3VjaCBtb2RlLCBcIm9uOiBpcyBhbiBvYmplY3Qgd2l0aCBzdGF0ZS94L3kgcHJvcGVydGllc1xuXHQgICAgICAgIHZhciBkYXRhID0ge1xuXHQgICAgICAgICAgbm90ZTogbm90ZVxuXHQgICAgICAgIH07XG5cdCAgICAgICAgaWYgKHR5cGVvZiBvbiA9PT0gXCJvYmplY3RcIikge1xuXHQgICAgICAgICAgZGF0YS5zdGF0ZSA9IG9uLnN0YXRlO1xuXHQgICAgICAgICAgLy8gIGRhdGEueCA9IG9uLnhcblx0ICAgICAgICAgIC8vICBkYXRhLnkgPSBvbi55XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIGRhdGEuc3RhdGUgPSBvbjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIGRhdGEpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVuZGVyOiB7XG5cdFxuXHQgICAgICAvKiBkcmFnKG5vdGUsb24pIHtcblx0ICAgICAgICB0aGlzLmVtaXQoJ2NoYW5nZScse1xuXHQgICAgICAgICAgbm90ZTogbm90ZSxcblx0ICAgICAgICAgIHN0YXRlOiBvblxuXHQgICAgICAgIH0pO1xuXHQgICAgICB9ICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge31cblx0ICAgIH0sXG5cdCAgICBhZGRUb3VjaExpc3RlbmVyczoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYWRkVG91Y2hMaXN0ZW5lcnMoKSB7XG5cdCAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblx0XG5cdCAgICAgICAgdGhpcy5wcmVDbGljayA9IHRoaXMucHJlTW92ZSA9IHRoaXMucHJlUmVsZWFzZSA9IGZ1bmN0aW9uICgpIHt9O1xuXHQgICAgICAgIHRoaXMuY2xpY2sgPSB0aGlzLm1vdmUgPSB0aGlzLnJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7fTtcblx0ICAgICAgICB0aGlzLnByZVRvdWNoID0gdGhpcy5wcmVUb3VjaE1vdmUgPSB0aGlzLnByZVRvdWNoUmVsZWFzZSA9IGZ1bmN0aW9uICgpIHt9O1xuXHQgICAgICAgIHRoaXMudG91Y2ggPSB0aGlzLnRvdWNoTW92ZSA9IHRoaXMudG91Y2hSZWxlYXNlID0gZnVuY3Rpb24gKCkge307XG5cdFxuXHQgICAgICAgIHRoaXMuY3VycmVudEVsZW1lbnQgPSBmYWxzZTtcblx0XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsIGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICBjb25zb2xlLmxvZyhcInRvdWNoc3RhcnRcIik7XG5cdCAgICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZS50YXJnZXRUb3VjaGVzWzBdLmNsaWVudFgsIGUudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRZKTtcblx0ICAgICAgICAgIHZhciBrZXkgPSBfdGhpcy5rZXlzW2VsZW1lbnQuaW5kZXhdO1xuXHQgICAgICAgICAgX3RoaXMucGFpbnRicnVzaCA9ICFrZXkuc3RhdGU7XG5cdCAgICAgICAgICBrZXkuZG93bihfdGhpcy5wYWludGJydXNoKTtcblx0ICAgICAgICAgIF90aGlzLmN1cnJlbnRFbGVtZW50ID0gZWxlbWVudC5pbmRleDtcblx0ICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblx0ICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdCAgICAgICAgfSk7XG5cdFxuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsIGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZS50YXJnZXRUb3VjaGVzWzBdLmNsaWVudFgsIGUudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRZKTtcblx0ICAgICAgICAgIHZhciBrZXkgPSBfdGhpcy5rZXlzW2VsZW1lbnQuaW5kZXhdO1xuXHQgICAgICAgICAgaWYgKGVsZW1lbnQuaW5kZXggIT09IF90aGlzLmN1cnJlbnRFbGVtZW50KSB7XG5cdCAgICAgICAgICAgIGlmIChfdGhpcy5jdXJyZW50RWxlbWVudCkge1xuXHQgICAgICAgICAgICAgIHZhciBwYXN0S2V5ID0gX3RoaXMua2V5c1tfdGhpcy5jdXJyZW50RWxlbWVudF07XG5cdCAgICAgICAgICAgICAgcGFzdEtleS51cCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGtleS5kb3duKF90aGlzLnBhaW50YnJ1c2gpO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAga2V5LmJlbmQoKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIF90aGlzLmN1cnJlbnRFbGVtZW50ID0gZWxlbWVudC5pbmRleDtcblx0ICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblx0ICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdCAgICAgICAgfSk7XG5cdFxuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgIC8vIG5vIHRvdWNoZXMgdG8gY2FsY3VsYXRlIGJlY2F1c2Ugbm9uZSByZW1haW5pbmdcblx0ICAgICAgICAgIHZhciBrZXkgPSBfdGhpcy5rZXlzW190aGlzLmN1cnJlbnRFbGVtZW50XTtcblx0ICAgICAgICAgIGtleS51cCgpO1xuXHQgICAgICAgICAgX3RoaXMuaW50ZXJhY3RpbmcgPSBmYWxzZTtcblx0ICAgICAgICAgIF90aGlzLmN1cnJlbnRFbGVtZW50ID0gZmFsc2U7XG5cdCAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cdCAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2V0UmFuZ2U6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBEZWZpbmUgdGhlIHBpdGNoIHJhbmdlIChsb3dlc3QgYW5kIGhpZ2hlc3Qgbm90ZSkgb2YgdGhlIHBpYW5vIGtleWJvYXJkLlxuXHQgICAgICBAcGFyYW0gbG93IHtudW1iZXJ9IE1JREkgbm90ZSB2YWx1ZSBvZiB0aGUgbG93ZXN0IG5vdGUgb24gdGhlIGtleWJvYXJkXG5cdCAgICAgIEBwYXJhbSBoaWdoIHtudW1iZXJ9IE1JREkgbm90ZSB2YWx1ZSBvZiB0aGUgaGlnaGVzdCBub3RlIG9uIHRoZSBrZXlib2FyZFxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldFJhbmdlKGxvdywgaGlnaCkge1xuXHQgICAgICAgIHRoaXMucmFuZ2UubG93ID0gbG93O1xuXHQgICAgICAgIHRoaXMucmFuZ2UuaGlnaCA9IGhpZ2g7XG5cdCAgICAgICAgdGhpcy5lbXB0eSgpO1xuXHQgICAgICAgIHRoaXMuYnVpbGRJbnRlcmZhY2UoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHRvZ2dsZUtleToge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFR1cm4gYSBrZXkgb24gb3Igb2ZmIHVzaW5nIGl0cyBNSURJIG5vdGUgdmFsdWU7XG5cdCAgICAgIEBwYXJhbSBub3RlIHtudW1iZXJ9IE1JREkgbm90ZSB2YWx1ZSBvZiB0aGUga2V5IHRvIGNoYW5nZVxuXHQgICAgICBAcGFyYW0gb24ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIG5vdGUgc2hvdWxkIHR1cm4gb24gb3Igb2ZmXG5cdCAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gdG9nZ2xlS2V5KG5vdGUsIG9uKSB7XG5cdCAgICAgICAgdGhpcy5rZXlzW25vdGUgLSB0aGlzLnJhbmdlLmxvd10uZmxpcChvbik7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICB0b2dnbGVJbmRleDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFR1cm4gYSBrZXkgb24gb3Igb2ZmIHVzaW5nIGl0cyBrZXkgaW5kZXggb24gdGhlIHBpYW5vIGludGVyZmFjZS5cblx0ICAgICAgQHBhcmFtIGluZGV4IHtudW1iZXJ9IEluZGV4IG9mIHRoZSBrZXkgdG8gY2hhbmdlXG5cdCAgICAgIEBwYXJhbSBvbiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbm90ZSBzaG91bGQgdHVybiBvbiBvciBvZmZcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiB0b2dnbGVJbmRleChpbmRleCwgb24pIHtcblx0ICAgICAgICB0aGlzLmtleXNbaW5kZXhdLmZsaXAob24pO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBQaWFubztcblx0fSkoSW50ZXJmYWNlKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gUGlhbm87XG5cdFxuXHQvLyBsb29wIHRocm91Z2ggYW5kIHJlbmRlciB0aGUga2V5cz9cblxuLyoqKi8gfSksXG4vKiAyNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHsgdmFyIHByb3AgPSBwcm9wc1trZXldOyBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChwcm9wLnZhbHVlKSBwcm9wLndyaXRhYmxlID0gdHJ1ZTsgfSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKTsgfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXHRcblx0dmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyByZXR1cm4gZ2V0KHBhcmVudCwgcHJvcGVydHksIHJlY2VpdmVyKTsgfSB9IGVsc2UgaWYgKFwidmFsdWVcIiBpbiBkZXNjICYmIGRlc2Mud3JpdGFibGUpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9O1xuXHRcblx0dmFyIF9pbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9O1xuXHRcblx0dmFyIF9jbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9O1xuXHRcblx0dmFyIHN2ZyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cdHZhciBkb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xuXHR2YXIgSW50ZXJmYWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcblx0dmFyIEJ1dHRvblRlbXBsYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG5cdHZhciBNYXRyaXhNb2RlbCA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpO1xuXHR2YXIgQ291bnRlck1vZGVsID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOCk7XG5cdHZhciB0b3VjaCA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG5cdFxuXHR2YXIgTWF0cml4Q2VsbCA9IChmdW5jdGlvbiAoX0J1dHRvblRlbXBsYXRlKSB7XG5cdCAgZnVuY3Rpb24gTWF0cml4Q2VsbCgpIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBNYXRyaXhDZWxsKTtcblx0XG5cdCAgICB2YXIgb3B0aW9ucyA9IFtcInZhbHVlXCJdO1xuXHRcblx0ICAgIHZhciBkZWZhdWx0cyA9IHtcblx0ICAgICAgc2l6ZTogWzgwLCA4MF0sXG5cdCAgICAgIHRhcmdldDogZmFsc2UsXG5cdCAgICAgIG1vZGU6IFwidG9nZ2xlXCIsXG5cdCAgICAgIHZhbHVlOiAwXG5cdCAgICB9O1xuXHRcblx0ICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKE1hdHJpeENlbGwucHJvdG90eXBlKSwgXCJjb25zdHJ1Y3RvclwiLCB0aGlzKS5jYWxsKHRoaXMsIGFyZ3VtZW50cywgb3B0aW9ucywgZGVmYXVsdHMpO1xuXHRcblx0ICAgIHRoaXMuaW5kZXggPSB0aGlzLnNldHRpbmdzLmluZGV4O1xuXHQgICAgdGhpcy5yb3cgPSB0aGlzLnNldHRpbmdzLnJvdztcblx0ICAgIHRoaXMuY29sdW1uID0gdGhpcy5zZXR0aW5ncy5jb2x1bW47XG5cdFxuXHQgICAgdGhpcy5tYXRyaXggPSB0aGlzLnNldHRpbmdzLm1hdHJpeDtcblx0XG5cdCAgICB0aGlzLmludGVyYWN0aW5nID0gZmFsc2U7XG5cdCAgICB0aGlzLnBhaW50YnJ1c2ggPSBmYWxzZTtcblx0XG5cdCAgICB0aGlzLmluaXQoKTtcblx0ICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgfVxuXHRcblx0ICBfaW5oZXJpdHMoTWF0cml4Q2VsbCwgX0J1dHRvblRlbXBsYXRlKTtcblx0XG5cdCAgX2NyZWF0ZUNsYXNzKE1hdHJpeENlbGwsIHtcblx0ICAgIGJ1aWxkRnJhbWU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkRnJhbWUoKSB7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50ID0gc3ZnLmNyZWF0ZShcInN2Z1wiKTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgdGhpcy53aWR0aCk7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCB0aGlzLmhlaWdodCk7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLnRvcCA9IFwiMHB4XCI7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblx0ICAgICAgICB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgYnVpbGRJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkSW50ZXJmYWNlKCkge1xuXHQgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cdFxuXHQgICAgICAgIHRoaXMucGFkID0gc3ZnLmNyZWF0ZShcInJlY3RcIik7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMucGFkKTtcblx0XG5cdCAgICAgICAgdGhpcy5pbnRlcmFjdGlvblRhcmdldCA9IHRoaXMucGFkO1xuXHRcblx0ICAgICAgICAvKiBldmVudHMgKi9cblx0XG5cdCAgICAgICAgaWYgKCF0b3VjaC5leGlzdHMpIHtcblx0XG5cdCAgICAgICAgICB0aGlzLmNsaWNrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBfdGhpcy5tYXRyaXguaW50ZXJhY3RpbmcgPSB0cnVlO1xuXHQgICAgICAgICAgICBfdGhpcy5tYXRyaXgucGFpbnRicnVzaCA9ICFfdGhpcy5zdGF0ZTtcblx0ICAgICAgICAgICAgX3RoaXMuZG93bihfdGhpcy5tYXRyaXgucGFpbnRicnVzaCk7XG5cdCAgICAgICAgICB9O1xuXHQgICAgICAgICAgdGhpcy5wYWQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmIChfdGhpcy5tYXRyaXguaW50ZXJhY3RpbmcpIHtcblx0ICAgICAgICAgICAgICBfdGhpcy5kb3duKF90aGlzLm1hdHJpeC5wYWludGJydXNoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSk7XG5cdFxuXHQgICAgICAgICAgdGhpcy5tb3ZlID0gZnVuY3Rpb24gKCkge307XG5cdCAgICAgICAgICB0aGlzLnBhZC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgIGlmIChfdGhpcy5tYXRyaXguaW50ZXJhY3RpbmcpIHtcblx0ICAgICAgICAgICAgICBpZiAoIV90aGlzLm9mZnNldCkge1xuXHQgICAgICAgICAgICAgICAgX3RoaXMub2Zmc2V0ID0gZG9tLmZpbmRQb3NpdGlvbihfdGhpcy5lbGVtZW50KTtcblx0ICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgX3RoaXMubW91c2UgPSBkb20ubG9jYXRlTW91c2UoZSwgX3RoaXMub2Zmc2V0KTtcblx0ICAgICAgICAgICAgICBfdGhpcy5iZW5kKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0pO1xuXHRcblx0ICAgICAgICAgIHRoaXMucmVsZWFzZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgX3RoaXMubWF0cml4LmludGVyYWN0aW5nID0gZmFsc2U7XG5cdCAgICAgICAgICB9O1xuXHQgICAgICAgICAgdGhpcy5wYWQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAoX3RoaXMubWF0cml4LmludGVyYWN0aW5nKSB7XG5cdCAgICAgICAgICAgICAgX3RoaXMudXAoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSk7XG5cdCAgICAgICAgICB0aGlzLnBhZC5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdXRcIiwgZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAoX3RoaXMubWF0cml4LmludGVyYWN0aW5nKSB7XG5cdCAgICAgICAgICAgICAgX3RoaXMudXAoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2l6ZUludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc2l6ZUludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwieFwiLCAxKTtcblx0ICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJ5XCIsIDEpO1xuXHQgICAgICAgIGlmICh0aGlzLndpZHRoID4gMikge1xuXHQgICAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgdGhpcy53aWR0aCAtIDIpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCB0aGlzLndpZHRoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMuaGVpZ2h0ID4gMikge1xuXHQgICAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIHRoaXMuaGVpZ2h0IC0gMik7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCB0aGlzLmhlaWdodCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vdGhpcy5wYWQuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCB0aGlzLmhlaWdodCAtIDIpO1xuXHQgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5tYXRyaXguY29sb3JzLmZpbGwpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVuZGVyOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLnN0YXRlKSB7XG5cdCAgICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMubWF0cml4LmNvbG9ycy5maWxsKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLm1hdHJpeC5jb2xvcnMuYWNjZW50KTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIE1hdHJpeENlbGw7XG5cdH0pKEJ1dHRvblRlbXBsYXRlKTtcblx0XG5cdC8qKlxuXHQqIFNlcXVlbmNlclxuXHQqXG5cdCogQGRlc2NyaXB0aW9uIEdyaWQgb2YgYnV0dG9ucyB3aXRoIGJ1aWx0LWluIHN0ZXAgc2VxdWVuY2VyLlxuXHQqXG5cdCogQGRlbW8gPGRpdiBuZXh1cy11aT1cInNlcXVlbmNlclwiIHN0eWxlPVwid2lkdGg6NDAwcHg7aGVpZ2h0OjIwMHB4O1wiPjwvZGl2PlxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgc2VxdWVuY2VyID0gbmV3IE5leHVzLlNlcXVlbmNlcignI3RhcmdldCcpXG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciBzZXF1ZW5jZXIgPSBuZXcgTmV4dXMuU2VxdWVuY2VyKCcjdGFyZ2V0Jyx7XG5cdCogICdzaXplJzogWzQwMCwyMDBdLFxuXHQqICAnbW9kZSc6ICd0b2dnbGUnLFxuXHQqICAncm93cyc6IDUsXG5cdCogICdjb2x1bW5zJzogMTBcblx0Kn0pXG5cdCpcblx0KiBAb3V0cHV0XG5cdCogY2hhbmdlXG5cdCogRmlyZXMgYW55IHRpbWUgdGhlIGludGVyZmFjZSdzIG1hdHJpeCBjaGFuZ2VzLiA8YnI+XG5cdCogVGhlIGV2ZW50IGRhdGEgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgPGk+cm93PC9pPiAobnVtYmVyKSwgPGk+Y29sdW1uPC9pPiAobnVtYmVyKSwgYW5kIDxpPnN0YXRlPC9pPiAoYm9vbGVhbikgcHJvcGVydGllcy5cblx0KlxuXHQqIEBvdXRwdXRleGFtcGxlXG5cdCogc2VxdWVuY2VyLm9uKCdjaGFuZ2UnLGZ1bmN0aW9uKHYpIHtcblx0KiAgIGNvbnNvbGUubG9nKHYpO1xuXHQqIH0pXG5cdCpcblx0KiBAb3V0cHV0XG5cdCogc3RlcFxuXHQqIEZpcmVzIGFueSB0aW1lIHRoZSBzZXF1ZW5jZXIgc3RlcHMgdG8gdGhlIG5leHQgY29sdW1uLCBpbiBzZXF1ZWNlIG1vZGUuIDxicj5cblx0KiBUaGUgZXZlbnQgZGF0YSBpcyBhbiA8aT5hcnJheTwvaT4gY29udGFpbmluZyBhbGwgdmFsdWVzIGluIHRoZSBjb2x1bW4sIDxpPmJvdHRvbSByb3cgZmlyc3Q8L2k+LlxuXHQqXG5cdCogQG91dHB1dGV4YW1wbGVcblx0KiBzZXF1ZW5jZXIub24oJ3N0ZXAnLGZ1bmN0aW9uKHYpIHtcblx0KiAgIGNvbnNvbGUubG9nKHYpO1xuXHQqIH0pXG5cdCovXG5cdFxuXHR2YXIgU2VxdWVuY2VyID0gKGZ1bmN0aW9uIChfSW50ZXJmYWNlKSB7XG5cdCAgZnVuY3Rpb24gU2VxdWVuY2VyKCkge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNlcXVlbmNlcik7XG5cdFxuXHQgICAgdmFyIG9wdGlvbnMgPSBbXCJ2YWx1ZVwiXTtcblx0XG5cdCAgICB2YXIgZGVmYXVsdHMgPSB7XG5cdCAgICAgIHNpemU6IFs0MDAsIDIwMF0sXG5cdCAgICAgIG1vZGU6IFwidG9nZ2xlXCIsXG5cdCAgICAgIHJvd3M6IDUsXG5cdCAgICAgIGNvbHVtbnM6IDEwXG5cdCAgICB9O1xuXHRcblx0ICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKFNlcXVlbmNlci5wcm90b3R5cGUpLCBcImNvbnN0cnVjdG9yXCIsIHRoaXMpLmNhbGwodGhpcywgYXJndW1lbnRzLCBvcHRpb25zLCBkZWZhdWx0cyk7XG5cdFxuXHQgICAgdGhpcy5hY3RpdmUgPSAtMTtcblx0XG5cdCAgICAvKipcblx0ICAgICogQnV0dG9uIGludGVyYWN0aW9uIG1vZGU6IHNlZSBCdXR0b25cblx0ICAgICogQHR5cGUge3N0cmluZ31cblx0ICAgICogQGV4YW1wbGUgYnV0dG9uLm1vZGUgPSAndG9nZ2xlJztcblx0ICAgICovXG5cdCAgICB0aGlzLm1vZGUgPSB0aGlzLnNldHRpbmdzLm1vZGU7XG5cdFxuXHQgICAgLyoqXG5cdCAgICAqIFRoZSBpbnRlcnZhbCBvYmplY3Qgd2hpY2ggY29udHJvbHMgdGltaW5nIGFuZCBzZXF1ZW5jZSBzY2hlZHVsaW5nLlxuXHQgICAgKiBAdHlwZSB7aW50ZXJ2YWx9XG5cdCAgICAqL1xuXHQgICAgdGhpcy5pbnRlcnZhbCA9IG5ldyBOZXh1cy5JbnRlcnZhbCgyMDAsIGZ1bmN0aW9uICgpIHt9LCBmYWxzZSk7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXHRcblx0ICAgIC8qKlxuXHQgICAgKiBBIE1hdHJpeCBtb2RlbCBjb250YWluaW5nIG1ldGhvZHMgZm9yIG1hbmlwdWxhdGluZyB0aGUgc2VxdWVuY2VyJ3MgYXJyYXkgb2YgdmFsdWVzLiBUbyBsZWFybiBob3cgdG8gbWFuaXB1bGF0ZSB0aGUgbWF0cml4LCByZWFkIGFib3V0IHRoZSBtYXRyaXggbW9kZWwuXG5cdCAgICAqIEB0eXBlIHttYXRyaXh9XG5cdCAgICAqL1xuXHQgICAgdGhpcy5tYXRyaXggPSBuZXcgTWF0cml4TW9kZWwodGhpcy5zZXR0aW5ncy5yb3dzLCB0aGlzLnNldHRpbmdzLmNvbHVtbnMpO1xuXHQgICAgdGhpcy5tYXRyaXgudWkgPSB0aGlzO1xuXHRcblx0ICAgIC8qKlxuXHQgICAgKiBBIENvdW50ZXIgbW9kZWwgd2hpY2ggdGhlIHNlcXVlbmNlciBzdGVwcyB0aHJvdWdoLiBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIHVzZSB0aGlzIG1vZGVsIHRvIHN0ZXAgdGhyb3VnaCB0aGUgc2VxdWVuY2VyIGluIHJldmVyc2UsIHJhbmRvbWx5LCBvciBpbiBhIGRydW5rIHdhbGsuXG5cdCAgICAqIEB0eXBlIHtjb3VudGVyfVxuXHQgICAgKi9cblx0ICAgIHRoaXMuc3RlcHBlciA9IG5ldyBDb3VudGVyTW9kZWwoMCwgdGhpcy5jb2x1bW5zKTtcblx0XG5cdCAgICB0aGlzLmluaXQoKTtcblx0ICB9XG5cdFxuXHQgIF9pbmhlcml0cyhTZXF1ZW5jZXIsIF9JbnRlcmZhY2UpO1xuXHRcblx0ICBfY3JlYXRlQ2xhc3MoU2VxdWVuY2VyLCB7XG5cdCAgICBidWlsZEZyYW1lOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEZyYW1lKCkge1xuXHQgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBcIjEwMCVcIjtcblx0ICAgICAgICB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpO1xuXHQgICAgICAgIGlmICh0b3VjaC5leGlzdHMpIHtcblx0ICAgICAgICAgIHRoaXMuYWRkVG91Y2hMaXN0ZW5lcnMoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBidWlsZEludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIHRoaXMuY2VsbHMgPSBbXTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF0cml4Lmxlbmd0aDsgaSsrKSB7XG5cdFxuXHQgICAgICAgICAgdmFyIF9sb2NhdGlvbiA9IHRoaXMubWF0cml4LmxvY2F0ZShpKTtcblx0ICAgICAgICAgIC8vIHJldHVybnMge3Jvdyxjb2x9XG5cdFxuXHQgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuXHQgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuXHRcblx0ICAgICAgICAgIHZhciBjZWxsID0gbmV3IE1hdHJpeENlbGwoY29udGFpbmVyLCB7XG5cdCAgICAgICAgICAgIGNvbXBvbmVudDogdHJ1ZSxcblx0ICAgICAgICAgICAgaW5kZXg6IGksXG5cdCAgICAgICAgICAgIHJvdzogX2xvY2F0aW9uLnJvdyxcblx0ICAgICAgICAgICAgY29sdW1uOiBfbG9jYXRpb24uY29sdW1uLFxuXHQgICAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG5cdCAgICAgICAgICAgIG1hdHJpeDogdGhpc1xuXHQgICAgICAgICAgfSwgdGhpcy5rZXlDaGFuZ2UuYmluZCh0aGlzLCBpKSk7XG5cdFxuXHQgICAgICAgICAgLy8gIGNlbGwubWF0cml4ID0gdGhpcztcblx0ICAgICAgICAgIGlmICh0b3VjaC5leGlzdHMpIHtcblx0ICAgICAgICAgICAgY2VsbC5wYWQuaW5kZXggPSBpO1xuXHQgICAgICAgICAgICBjZWxsLnByZUNsaWNrID0gY2VsbC5wcmVNb3ZlID0gY2VsbC5wcmVSZWxlYXNlID0gZnVuY3Rpb24gKCkge307XG5cdCAgICAgICAgICAgIGNlbGwuY2xpY2sgPSBjZWxsLm1vdmUgPSBjZWxsLnJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7fTtcblx0ICAgICAgICAgICAgY2VsbC5wcmVUb3VjaCA9IGNlbGwucHJlVG91Y2hNb3ZlID0gY2VsbC5wcmVUb3VjaFJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7fTtcblx0ICAgICAgICAgICAgY2VsbC50b3VjaCA9IGNlbGwudG91Y2hNb3ZlID0gY2VsbC50b3VjaFJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7fTtcblx0ICAgICAgICAgIH1cblx0XG5cdCAgICAgICAgICB0aGlzLmNlbGxzLnB1c2goY2VsbCk7XG5cdCAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5zaXplSW50ZXJmYWNlKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzaXplSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaXplSW50ZXJmYWNlKCkge1xuXHRcblx0ICAgICAgICB2YXIgY2VsbFdpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMuY29sdW1ucztcblx0ICAgICAgICB2YXIgY2VsbEhlaWdodCA9IHRoaXMuaGVpZ2h0IC8gdGhpcy5yb3dzO1xuXHRcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2VsbHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgIHZhciBjb250YWluZXIgPSB0aGlzLmNlbGxzW2ldLnBhcmVudDtcblx0ICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gdGhpcy5jZWxsc1tpXS5jb2x1bW4gKiBjZWxsV2lkdGggKyBcInB4XCI7XG5cdCAgICAgICAgICBjb250YWluZXIuc3R5bGUudG9wID0gdGhpcy5jZWxsc1tpXS5yb3cgKiBjZWxsSGVpZ2h0ICsgXCJweFwiO1xuXHQgICAgICAgICAgdGhpcy5jZWxsc1tpXS5yZXNpemUoY2VsbFdpZHRoLCBjZWxsSGVpZ2h0KTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjb2xvckludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY29sb3JJbnRlcmZhY2UoKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICB0aGlzLmNlbGxzW2ldLnJlbmRlcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHVwZGF0ZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlKCkge1xuXHQgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cdFxuXHQgICAgICAgIC8vICBjb25zb2xlLmxvZyhcInVwZGF0aW5nLi4uXCIpXG5cdCAgICAgICAgLy9vbiA9IG9uIHx8IGZhbHNlO1xuXHQgICAgICAgIHRoaXMubWF0cml4Lml0ZXJhdGUoZnVuY3Rpb24gKHIsIGMsIGkpIHtcblx0ICAgICAgICAgIC8vICBjb25zb2xlLmxvZyh0aGlzLm1hdHJpeC5wYXR0ZXJuW3JdW2NdLCB0aGlzLmNlbGxzW2ldLnN0YXRlKTtcblx0ICAgICAgICAgIGlmIChfdGhpcy5tYXRyaXgucGF0dGVybltyXVtjXSAhPT0gX3RoaXMuY2VsbHNbaV0uc3RhdGUpIHtcblx0ICAgICAgICAgICAgaWYgKF90aGlzLm1hdHJpeC5wYXR0ZXJuW3JdW2NdID4gMCkge1xuXHQgICAgICAgICAgICAgIF90aGlzLmNlbGxzW2ldLnR1cm5PbigpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgIF90aGlzLmNlbGxzW2ldLnR1cm5PZmYoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAga2V5Q2hhbmdlOiB7XG5cdFxuXHQgICAgICAvLyB1cGRhdGUgPT4gY2VsbC50dXJuT24gPT4gY2VsbC5lbWl0ID0+IGtleUNoYW5nZSAoc2VxLmVtaXQpID0+IG1hdHJpeC5zZXQuY2VsbCA9PiB1cGRhdGVcblx0ICAgICAgLy9cblx0ICAgICAgLy8gaW50ZXJhY3Rpb24gPT4ga2V5Q2hhbmdlID0+IG1hdHJpeC5zZXQuY2VsbCA9PiB1cGRhdGUgPT4gY2VsbC50dXJuT25cblx0ICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBlbWl0XG5cdCAgICAgIC8vXG5cdCAgICAgIC8vIHNldC5jZWxsID0+IHVwZGF0ZSA9PiBuZWVkcyB0byBlbWl0LlxuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGtleUNoYW5nZShub3RlLCBvbikge1xuXHQgICAgICAgIC8vIGVtaXQgZGF0YSBmb3IgYW55IGtleSB0dXJuaW5nIG9uL29mZlxuXHQgICAgICAgIC8vIGkgaXMgdGhlIG5vdGUgaW5kZXhcblx0ICAgICAgICAvLyB2IGlzIHdoZXRoZXIgaXQgaXMgb24gb3Igb2ZmXG5cdCAgICAgICAgdmFyIGNlbGwgPSB0aGlzLm1hdHJpeC5sb2NhdGUobm90ZSk7XG5cdCAgICAgICAgLy8gIHRoaXMubWF0cml4LnNldC5jZWxsKGNlbGwuY29sdW1uLGNlbGwucm93LG9uKTtcblx0ICAgICAgICB0aGlzLm1hdHJpeC5wYXR0ZXJuW2NlbGwucm93XVtjZWxsLmNvbHVtbl0gPSBvbjtcblx0ICAgICAgICB2YXIgZGF0YSA9IHtcblx0ICAgICAgICAgIHJvdzogY2VsbC5yb3csXG5cdCAgICAgICAgICBjb2x1bW46IGNlbGwuY29sdW1uLFxuXHQgICAgICAgICAgc3RhdGU6IG9uXG5cdCAgICAgICAgfTtcblx0ICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwgZGF0YSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByZW5kZXI6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXHRcblx0ICAgICAgICBpZiAodGhpcy5zdGVwcGVyLnZhbHVlID49IDApIHtcblx0ICAgICAgICAgIHRoaXMubWF0cml4Lml0ZXJhdGUoZnVuY3Rpb24gKHIsIGMsIGkpIHtcblx0ICAgICAgICAgICAgaWYgKGMgPT09IF90aGlzLnN0ZXBwZXIudmFsdWUpIHtcblx0ICAgICAgICAgICAgICBfdGhpcy5jZWxsc1tpXS5wYWQuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIF90aGlzLmNvbG9ycy5tZWRpdW1MaWdodCk7XG5cdCAgICAgICAgICAgICAgX3RoaXMuY2VsbHNbaV0ucGFkLnNldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiLCBcIjFcIik7XG5cdCAgICAgICAgICAgICAgX3RoaXMuY2VsbHNbaV0ucGFkLnNldEF0dHJpYnV0ZShcInN0cm9rZS1vcGFjaXR5XCIsIFwiMVwiKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICBfdGhpcy5jZWxsc1tpXS5wYWQuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIFwibm9uZVwiKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc3RhcnQ6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICAgKiBTdGFydCBzZXF1ZW5jaW5nXG5cdCAgICAgICAqIEBwYXJhbSAge251bWJlcn0gbXMgQmVhdCB0ZW1wbyBpbiBtaWxsaXNlY29uZHNcblx0ICAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc3RhcnQobXMpIHtcblx0ICAgICAgICB0aGlzLmludGVydmFsLmV2ZW50ID0gdGhpcy5uZXh0LmJpbmQodGhpcyk7XG5cdCAgICAgICAgaWYgKG1zKSB7XG5cdCAgICAgICAgICB0aGlzLmludGVydmFsLm1zKG1zKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5pbnRlcnZhbC5zdGFydCgpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc3RvcDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFN0b3Agc2VxdWVuY2luZ1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN0b3AoKSB7XG5cdCAgICAgICAgdGhpcy5pbnRlcnZhbC5zdG9wKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBuZXh0OiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgTWFudWFsbHkganVtcCB0byB0aGUgbmV4dCBjb2x1bW4gYW5kIHRyaWdnZXIgdGhlICdjaGFuZ2UnIGV2ZW50LiBUaGUgXCJuZXh0XCIgY29sdW1uIGlzIGRldGVybWluZWQgYnkgeW91ciBtb2RlIG9mIHNlcXVlbmNpbmcuXG5cdCAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gbmV4dCgpIHtcblx0ICAgICAgICB0aGlzLnN0ZXBwZXIubmV4dCgpO1xuXHQgICAgICAgIHRoaXMuZW1pdChcInN0ZXBcIiwgdGhpcy5tYXRyaXguY29sdW1uKHRoaXMuc3RlcHBlci52YWx1ZSkucmV2ZXJzZSgpKTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgYWRkVG91Y2hMaXN0ZW5lcnM6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFRvdWNoTGlzdGVuZXJzKCkge1xuXHQgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cdFxuXHQgICAgICAgIHRoaXMucHJlQ2xpY2sgPSB0aGlzLnByZU1vdmUgPSB0aGlzLnByZVJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7fTtcblx0ICAgICAgICB0aGlzLmNsaWNrID0gdGhpcy5tb3ZlID0gdGhpcy5yZWxlYXNlID0gZnVuY3Rpb24gKCkge307XG5cdCAgICAgICAgdGhpcy5wcmVUb3VjaCA9IHRoaXMucHJlVG91Y2hNb3ZlID0gdGhpcy5wcmVUb3VjaFJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7fTtcblx0ICAgICAgICB0aGlzLnRvdWNoID0gdGhpcy50b3VjaE1vdmUgPSB0aGlzLnRvdWNoUmVsZWFzZSA9IGZ1bmN0aW9uICgpIHt9O1xuXHRcblx0ICAgICAgICB0aGlzLmN1cnJlbnRFbGVtZW50ID0gZmFsc2U7XG5cdFxuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLCBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGUudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRYLCBlLnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WSk7XG5cdCAgICAgICAgICB2YXIgY2VsbCA9IF90aGlzLmNlbGxzW2VsZW1lbnQuaW5kZXhdO1xuXHQgICAgICAgICAgX3RoaXMucGFpbnRicnVzaCA9ICFjZWxsLnN0YXRlO1xuXHQgICAgICAgICAgY2VsbC5kb3duKF90aGlzLnBhaW50YnJ1c2gpO1xuXHQgICAgICAgICAgX3RoaXMuY3VycmVudEVsZW1lbnQgPSBlbGVtZW50LmluZGV4O1xuXHQgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0ICAgICAgICB9KTtcblx0XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WCwgZS50YXJnZXRUb3VjaGVzWzBdLmNsaWVudFkpO1xuXHQgICAgICAgICAgdmFyIGNlbGwgPSBfdGhpcy5jZWxsc1tlbGVtZW50LmluZGV4XTtcblx0ICAgICAgICAgIGlmIChlbGVtZW50LmluZGV4ICE9PSBfdGhpcy5jdXJyZW50RWxlbWVudCkge1xuXHQgICAgICAgICAgICBpZiAoX3RoaXMuY3VycmVudEVsZW1lbnQgPj0gMCkge1xuXHQgICAgICAgICAgICAgIHZhciBwYXN0Q2VsbCA9IF90aGlzLmNlbGxzW190aGlzLmN1cnJlbnRFbGVtZW50XTtcblx0ICAgICAgICAgICAgICBwYXN0Q2VsbC51cCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGNlbGwuZG93bihfdGhpcy5wYWludGJydXNoKTtcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGNlbGwuYmVuZCgpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgX3RoaXMuY3VycmVudEVsZW1lbnQgPSBlbGVtZW50LmluZGV4O1xuXHQgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0ICAgICAgICB9KTtcblx0XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgLy8gbm8gdG91Y2hlcyB0byBjYWxjdWxhdGUgYmVjYXVzZSBub25lIHJlbWFpbmluZ1xuXHQgICAgICAgICAgdmFyIGNlbGwgPSBfdGhpcy5jZWxsc1tfdGhpcy5jdXJyZW50RWxlbWVudF07XG5cdCAgICAgICAgICBjZWxsLnVwKCk7XG5cdCAgICAgICAgICBfdGhpcy5pbnRlcmFjdGluZyA9IGZhbHNlO1xuXHQgICAgICAgICAgX3RoaXMuY3VycmVudEVsZW1lbnQgPSBmYWxzZTtcblx0ICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblx0ICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByb3dzOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgTnVtYmVyIG9mIHJvd3MgaW4gdGhlIHNlcXVlbmNlclxuXHQgICAgICBAdHlwZSB7bnVtYmVyfVxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMubWF0cml4LnJvd3M7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLm1hdHJpeC5yb3dzID0gdjtcblx0ICAgICAgICB0aGlzLmVtcHR5KCk7XG5cdCAgICAgICAgdGhpcy5idWlsZEludGVyZmFjZSgpO1xuXHQgICAgICAgIHRoaXMudXBkYXRlKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjb2x1bW5zOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgTnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIHNlcXVlbmNlclxuXHQgICAgICBAdHlwZSB7bnVtYmVyfVxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMubWF0cml4LmNvbHVtbnM7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLm1hdHJpeC5jb2x1bW5zID0gdjtcblx0ICAgICAgICB0aGlzLnN0ZXBwZXIubWF4ID0gdjtcblx0ICAgICAgICB0aGlzLmVtcHR5KCk7XG5cdCAgICAgICAgdGhpcy5idWlsZEludGVyZmFjZSgpO1xuXHQgICAgICAgIHRoaXMudXBkYXRlKCk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIFNlcXVlbmNlcjtcblx0fSkoSW50ZXJmYWNlKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gU2VxdWVuY2VyO1xuXG4vKioqLyB9KSxcbi8qIDI1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgX2ludGVyb3BSZXF1aXJlID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqW1wiZGVmYXVsdFwiXSA6IG9iajsgfTtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBtYXRoID0gX2ludGVyb3BSZXF1aXJlKF9fd2VicGFja19yZXF1aXJlX18oNSkpO1xuXHRcblx0dmFyIFNlcXVlbmNlID0gX2ludGVyb3BSZXF1aXJlKF9fd2VicGFja19yZXF1aXJlX18oMjYpKTtcblx0XG5cdC8vIEZvciB0aGUgdHV0b3JpYWwsIGxvb2tpbmcgYXRcblx0XG5cdC8vUGF0dGVybiBzZWN0aW9uOlxuXHQvLyAuY3JlYXRlKCksIC5yb3dzLCAuY29sdW1ucyxcblx0Ly8gLnBhdHRlcm4sIC5sZW5ndGgsIC5mb3JtYXRBc1RleHQoKSwgLmxvZygpLFxuXHQvLyAubG9jYXRlKGkpLCAuaW5kZXhPZihjLHIpXG5cdC8vIHJvdygpLCBjb2x1bW4oKSAocmV0dXJucyBjb250ZW50cyBvZiByb3cgb3IgY29sdW0pXG5cdFxuXHQvL0NvbnRyb2wgc2VjdGlvbjpcblx0Ly8gdG9nZ2xlIHgzXG5cdC8vIHNldCB4NFxuXHQvLyByb3RhdGUgeDNcblx0Ly8gcG9wdWxhdGUgeDNcblx0Ly8gZXJhc2UgeDNcblx0XG5cdC8vIHNob3VsZCBzb21lIHZlcnNpb24gb2YgdGhpcyBoYXZlIGEgZmxvYXQgdmFsdWUgZm9yIGVhY2ggY2VsbD9cblx0Ly8gY291bGQgYmUgbGlrZSBhIG1pcnJvciAucGF0dGVybiB0aGF0IGhhcyB2YWx1ZXMuIGJ5IGRlZmF1bHQsIGV2ZXJ5dGhpbmcgaXMgMSwgYnV0IGNvdWxkIGJlIHNldC4uLlxuXHQvLyBub3QgYSBnb29kIHdheSB0byBkbyB0aGF0IG9uIGludGVyZmFjZSwgYnV0IGFzIGEgbW9kZWwgaXQgd291bGQgYmUgbmljZS4uLlxuXHQvLyBmb3IgLmZvcm1hdEFzVGV4dCgpLCBjb3VsZCBtdWx0aXBseSBieSAxMDAgYW5kIGZsb29yLCBzbyBlYWNoIGNlbGwgaXMgYW4gaW50IGZyb20gMCB0byA5XG5cdFxuXHR2YXIgTWF0cml4ID0gKGZ1bmN0aW9uICgpIHtcblx0ICBmdW5jdGlvbiBNYXRyaXgocm93cywgY29sdW1ucykge1xuXHQgICAgdmFyIF90aGlzID0gdGhpcztcblx0XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTWF0cml4KTtcblx0XG5cdCAgICAvLyBzaG91bGQgYWxzbyBoYXZlIGFiaWxpdHkgdG8gY3JlYXRlIHVzaW5nIGFuIGV4aXN0aW5nIG1hdHJpeCAoMmQgYXJyYXkpXG5cdCAgICB0aGlzLnBhdHRlcm4gPSBbXTtcblx0ICAgIHRoaXMuY3JlYXRlKHJvd3MsIGNvbHVtbnMpO1xuXHRcblx0ICAgIHRoaXMudG9nZ2xlID0ge1xuXHQgICAgICBjZWxsOiBmdW5jdGlvbiAoY29sdW1uLCByb3cpIHtcblx0ICAgICAgICBfdGhpcy5wYXR0ZXJuW3Jvd11bY29sdW1uXSA9ICFfdGhpcy5wYXR0ZXJuW3Jvd11bY29sdW1uXTsgLy8gbWF0aC5pbnZlcnQodGhpcy5wYXR0ZXJuW3Jvd11bY29sdW1uXSk7XG5cdCAgICAgICAgaWYgKF90aGlzLnVpKSB7XG5cdCAgICAgICAgICBfdGhpcy51aS51cGRhdGUoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIF90aGlzLnBhdHRlcm5bcm93XVtjb2x1bW5dO1xuXHQgICAgICB9LFxuXHQgICAgICBhbGw6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBfdGhpcy5pdGVyYXRlKGZ1bmN0aW9uIChyLCBjKSB7XG5cdCAgICAgICAgICBfdGhpcy50b2dnbGUuY2VsbChjLCByKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICBpZiAoX3RoaXMudWkpIHtcblx0ICAgICAgICAgIF90aGlzLnVpLnVwZGF0ZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSxcblx0ICAgICAgcm93OiBmdW5jdGlvbiAocm93KSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfdGhpcy5jb2x1bW5zOyBpKyspIHtcblx0ICAgICAgICAgIF90aGlzLnRvZ2dsZS5jZWxsKGksIHJvdyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChfdGhpcy51aSkge1xuXHQgICAgICAgICAgX3RoaXMudWkudXBkYXRlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9LFxuXHQgICAgICBjb2x1bW46IGZ1bmN0aW9uIChjb2x1bW4pIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF90aGlzLnJvd3M7IGkrKykge1xuXHQgICAgICAgICAgX3RoaXMudG9nZ2xlLmNlbGwoY29sdW1uLCBpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKF90aGlzLnVpKSB7XG5cdCAgICAgICAgICBfdGhpcy51aS51cGRhdGUoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH07XG5cdFxuXHQgICAgdGhpcy5zZXQgPSB7XG5cdCAgICAgIGNlbGw6IGZ1bmN0aW9uIChjb2x1bW4sIHJvdywgdmFsdWUpIHtcblx0ICAgICAgICBfdGhpcy5wYXR0ZXJuW3Jvd11bY29sdW1uXSA9IHZhbHVlO1xuXHQgICAgICAgIGlmIChfdGhpcy51aSkge1xuXHQgICAgICAgICAgX3RoaXMudWkudXBkYXRlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9LFxuXHQgICAgICBhbGw6IGZ1bmN0aW9uICh2YWx1ZXMpIHtcblx0ICAgICAgICAvLyBzZXQgdGhlIHdob2xlIG1hdHJpeCB1c2luZyBhIDJkIGFycmF5IGFzIGlucHV0XG5cdCAgICAgICAgLy8gdGhpcyBzaG91bGQgYWxzbyByZXNpemUgdGhlIGFycmF5P1xuXHQgICAgICAgIF90aGlzLnBhdHRlcm4gPSB2YWx1ZXM7XG5cdCAgICAgICAgaWYgKF90aGlzLnVpKSB7XG5cdCAgICAgICAgICBfdGhpcy51aS51cGRhdGUoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0sXG5cdCAgICAgIHJvdzogZnVuY3Rpb24gKHJvdywgdmFsdWVzKSB7XG5cdCAgICAgICAgLy8gc2V0IGEgcm93IHVzaW5nIGFuIGFycmF5IGFzIGlucHV0XG5cdCAgICAgICAgX3RoaXMucGF0dGVybltyb3ddID0gdmFsdWVzO1xuXHQgICAgICAgIGlmIChfdGhpcy51aSkge1xuXHQgICAgICAgICAgX3RoaXMudWkudXBkYXRlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9LFxuXHQgICAgICBjb2x1bW46IGZ1bmN0aW9uIChjb2x1bW4sIHZhbHVlcykge1xuXHQgICAgICAgIC8vIHNldCBhIGNvbHVtbiB1c2luZyBhbiBhcnJheSBhcyBpbnB1dFxuXHQgICAgICAgIF90aGlzLnBhdHRlcm4uZm9yRWFjaChmdW5jdGlvbiAocm93LCBpKSB7XG5cdCAgICAgICAgICBfdGhpcy5wYXR0ZXJuW2ldW2NvbHVtbl0gPSB2YWx1ZXNbaV07XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgaWYgKF90aGlzLnVpKSB7XG5cdCAgICAgICAgICBfdGhpcy51aS51cGRhdGUoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH07XG5cdFxuXHQgICAgdGhpcy5yb3RhdGUgPSB7XG5cdCAgICAgIC8vc2hvdWxkIGV2ZW50dWFsbHkgZG8gKGFtb3VudFgsIGFtb3VudFkpIGhlcmVcblx0ICAgICAgLy8gY291bGQganVzdCB1c2UgYSBsb29wIGFuZCB0aGlzLnJvdGF0ZS5yb3coaSxhbW91bnRYKTtcblx0ICAgICAgYWxsOiBmdW5jdGlvbiAoYW1vdW50KSB7XG5cdCAgICAgICAgaWYgKCFhbW91bnQgJiYgYW1vdW50ICE9PSAwKSB7XG5cdCAgICAgICAgICBhbW91bnQgPSAxO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBhbW91bnQgJT0gX3RoaXMucGF0dGVyblswXS5sZW5ndGg7XG5cdCAgICAgICAgaWYgKGFtb3VudCA8IDApIHtcblx0ICAgICAgICAgIGFtb3VudCA9IF90aGlzLnBhdHRlcm5bMF0ubGVuZ3RoICsgYW1vdW50O1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF90aGlzLnJvd3M7IGkrKykge1xuXHQgICAgICAgICAgdmFyIGN1dCA9IF90aGlzLnBhdHRlcm5baV0uc3BsaWNlKF90aGlzLnBhdHRlcm5baV0ubGVuZ3RoIC0gYW1vdW50LCBhbW91bnQpO1xuXHQgICAgICAgICAgX3RoaXMucGF0dGVybltpXSA9IGN1dC5jb25jYXQoX3RoaXMucGF0dGVybltpXSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChfdGhpcy51aSkge1xuXHQgICAgICAgICAgX3RoaXMudWkudXBkYXRlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9LFxuXHQgICAgICByb3c6IGZ1bmN0aW9uIChyb3csIGFtb3VudCkge1xuXHQgICAgICAgIGlmICghYW1vdW50ICYmIGFtb3VudCAhPT0gMCkge1xuXHQgICAgICAgICAgYW1vdW50ID0gMTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgYW1vdW50ICU9IF90aGlzLnBhdHRlcm5bMF0ubGVuZ3RoO1xuXHQgICAgICAgIGlmIChhbW91bnQgPCAwKSB7XG5cdCAgICAgICAgICBhbW91bnQgPSBfdGhpcy5wYXR0ZXJuWzBdLmxlbmd0aCArIGFtb3VudDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIGN1dCA9IF90aGlzLnBhdHRlcm5bcm93XS5zcGxpY2UoX3RoaXMucGF0dGVybltyb3ddLmxlbmd0aCAtIGFtb3VudCwgYW1vdW50KTtcblx0ICAgICAgICBfdGhpcy5wYXR0ZXJuW3Jvd10gPSBjdXQuY29uY2F0KF90aGlzLnBhdHRlcm5bcm93XSk7XG5cdCAgICAgICAgaWYgKF90aGlzLnVpKSB7XG5cdCAgICAgICAgICBfdGhpcy51aS51cGRhdGUoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0sXG5cdCAgICAgIGNvbHVtbjogZnVuY3Rpb24gKGNvbHVtbiwgYW1vdW50KSB7XG5cdCAgICAgICAgaWYgKCFhbW91bnQgJiYgYW1vdW50ICE9PSAwKSB7XG5cdCAgICAgICAgICBhbW91bnQgPSAxO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBhbW91bnQgJT0gX3RoaXMucGF0dGVybi5sZW5ndGg7XG5cdCAgICAgICAgaWYgKGFtb3VudCA8IDApIHtcblx0ICAgICAgICAgIGFtb3VudCA9IF90aGlzLnBhdHRlcm4ubGVuZ3RoICsgYW1vdW50O1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcHJveHkgPSBbXTtcblx0ICAgICAgICBfdGhpcy5wYXR0ZXJuLmZvckVhY2goZnVuY3Rpb24gKHJvdykge1xuXHQgICAgICAgICAgcHJveHkucHVzaChyb3dbY29sdW1uXSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdmFyIGN1dCA9IHByb3h5LnNwbGljZShwcm94eS5sZW5ndGggLSBhbW91bnQsIGFtb3VudCk7XG5cdCAgICAgICAgcHJveHkgPSBjdXQuY29uY2F0KHByb3h5KTtcblx0ICAgICAgICBfdGhpcy5wYXR0ZXJuLmZvckVhY2goZnVuY3Rpb24gKHJvdywgaSkge1xuXHQgICAgICAgICAgcm93W2NvbHVtbl0gPSBwcm94eVtpXTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICBpZiAoX3RoaXMudWkpIHtcblx0ICAgICAgICAgIF90aGlzLnVpLnVwZGF0ZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfTtcblx0XG5cdCAgICAvLyB0aGUgaWRlYSBiZWhpbmQgcG9wdWxhdGUgaXMgdG8gYmUgYWJsZSB0byBzZXQgYSB3aG9sZSByb3cgb3IgY29sdW1uIHRvIDAgb3IgMVxuXHQgICAgLy8gSUYgdGhlIHZhbHVlIGlzIGEgZmxvYXQsIHN1Y2ggYXMgMC43LCB0aGVuIGl0IHdvdWxkIGJlY29tZSBhIHByb2JhYmlsaXR5XG5cdCAgICAvLyBzbyBwb3B1bGF0ZSgwLjcpIHdvdWxkIGdpdmUgZWFjaCBjZWxsIGEgNzAlIGNoYW5jZSBvZiBiZWluZyAxXG5cdCAgICB0aGlzLnBvcHVsYXRlID0ge1xuXHQgICAgICBhbGw6IGZ1bmN0aW9uIChvZGRzKSB7XG5cdCAgICAgICAgdmFyIG9kZHNTZXF1ZW5jZSA9IG5ldyBTZXF1ZW5jZShvZGRzKTtcblx0ICAgICAgICBfdGhpcy5pdGVyYXRlKGZ1bmN0aW9uIChyLCBjKSB7XG5cdCAgICAgICAgICBfdGhpcy5wYXR0ZXJuW3JdW2NdID0gbWF0aC5jb2luKG9kZHNTZXF1ZW5jZS5uZXh0KCkpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8vIFRoaXMgY291bGQgYmUgdXNlZCBzbyB0aGF0IGVhY2ggcm93IGhhcyBzYW1lIG9kZHMgcGF0dGVybiwgZXZlbiBpZiByb3cgbGVuZ3RoIGlzIG5vdCBkaXZpc2libHkgYnkgc2VxdWVuY2UgbGVuZ3RoLlxuXHQgICAgICAgIC8vLCgpID0+IHtcblx0ICAgICAgICAvLyAgb2Rkcy5wb3MgPSAtMTtcblx0ICAgICAgICAvLyB9XG5cdCAgICAgICAgaWYgKF90aGlzLnVpKSB7XG5cdCAgICAgICAgICBfdGhpcy51aS51cGRhdGUoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0sXG5cdCAgICAgIHJvdzogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciByb3cgPSBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IDAgOiBhcmd1bWVudHNbMF07XG5cdCAgICAgICAgdmFyIG9kZHMgPSBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IDEgOiBhcmd1bWVudHNbMV07XG5cdFxuXHQgICAgICAgIHZhciBvZGRzU2VxdWVuY2UgPSBuZXcgU2VxdWVuY2Uob2Rkcyk7XG5cdCAgICAgICAgX3RoaXMucGF0dGVybltyb3ddLmZvckVhY2goZnVuY3Rpb24gKGNlbGwsIGkpIHtcblx0ICAgICAgICAgIF90aGlzLnBhdHRlcm5bcm93XVtpXSA9IG1hdGguY29pbihvZGRzU2VxdWVuY2UubmV4dCgpKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICBpZiAoX3RoaXMudWkpIHtcblx0ICAgICAgICAgIF90aGlzLnVpLnVwZGF0ZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSxcblx0ICAgICAgY29sdW1uOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGNvbHVtbiA9IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gMCA6IGFyZ3VtZW50c1swXTtcblx0ICAgICAgICB2YXIgb2RkcyA9IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gMSA6IGFyZ3VtZW50c1sxXTtcblx0XG5cdCAgICAgICAgdmFyIG9kZHNTZXF1ZW5jZSA9IG5ldyBTZXF1ZW5jZShvZGRzKTtcblx0ICAgICAgICBfdGhpcy5wYXR0ZXJuLmZvckVhY2goZnVuY3Rpb24gKHJvdywgaSkge1xuXHQgICAgICAgICAgX3RoaXMucGF0dGVybltpXVtjb2x1bW5dID0gbWF0aC5jb2luKG9kZHNTZXF1ZW5jZS5uZXh0KCkpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIGlmIChfdGhpcy51aSkge1xuXHQgICAgICAgICAgX3RoaXMudWkudXBkYXRlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9O1xuXHRcblx0ICAgIC8vIGVzc2VudGlhbGwgcG9wdWxhdGUoMCkgc28gaSdtIG5vdCBzdXJlIGlmIHRoaXMgaXMgbmVjZXNzYXJ5IGJ1dCBpcyBuaWNlXG5cdCAgICB0aGlzLmVyYXNlID0ge1xuXHQgICAgICBhbGw6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBfdGhpcy5zZXQuYWxsKDApO1xuXHQgICAgICB9LFxuXHQgICAgICByb3c6IGZ1bmN0aW9uIChyb3cpIHtcblx0ICAgICAgICBfdGhpcy5zZXQucm93KHJvdywgMCk7XG5cdCAgICAgIH0sXG5cdCAgICAgIGNvbHVtbjogZnVuY3Rpb24gKGNvbHVtbikge1xuXHQgICAgICAgIF90aGlzLnNldC5jb2x1bW4oY29sdW1uLCAwKTtcblx0ICAgICAgfVxuXHQgICAgfTtcblx0XG5cdCAgICAvLyBlbmQgY29uc3RydWN0b3Jcblx0ICB9XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhNYXRyaXgsIHtcblx0ICAgIGNyZWF0ZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlKHJvd3MsIGNvbHVtbnMpIHtcblx0ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXHRcblx0ICAgICAgICB0aGlzLnBhdHRlcm4gPSBbXTtcblx0ICAgICAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykge1xuXHQgICAgICAgICAgdmFyIGFyciA9IG5ldyBBcnJheShjb2x1bW5zKTtcblx0ICAgICAgICAgIHRoaXMucGF0dGVybi5wdXNoKGFycik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuaXRlcmF0ZShmdW5jdGlvbiAociwgYykge1xuXHQgICAgICAgICAgX3RoaXMucGF0dGVybltyXVtjXSA9IGZhbHNlO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgaXRlcmF0ZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gaXRlcmF0ZShmLCBmMikge1xuXHQgICAgICAgIHZhciBpID0gMDtcblx0ICAgICAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCB0aGlzLnJvd3M7IHJvdysrKSB7XG5cdCAgICAgICAgICBpZiAoZjIpIHtcblx0ICAgICAgICAgICAgZjIocm93KTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIGZvciAodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IHRoaXMuY29sdW1uczsgY29sdW1uKyspIHtcblx0ICAgICAgICAgICAgZihyb3csIGNvbHVtbiwgaSk7XG5cdCAgICAgICAgICAgIGkrKztcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBmb3JtYXRBc1RleHQ6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZvcm1hdEFzVGV4dCgpIHtcblx0ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXHRcblx0ICAgICAgICB2YXIgcGF0dGVyblN0cmluZyA9IFwiXCI7XG5cdCAgICAgICAgdGhpcy5pdGVyYXRlKGZ1bmN0aW9uIChyLCBjKSB7XG5cdCAgICAgICAgICBwYXR0ZXJuU3RyaW5nICs9IChfdGhpcy5wYXR0ZXJuW3JdW2NdID8gMSA6IDApICsgXCIgXCI7XG5cdCAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgcGF0dGVyblN0cmluZyArPSBcIlxcblwiO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiBwYXR0ZXJuU3RyaW5nO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbG9nOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBsb2coKSB7XG5cdCAgICAgICAgY29uc29sZS5sb2codGhpcy5mb3JtYXRBc1RleHQoKSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICB1cGRhdGU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZShwYXR0ZXJuKSB7XG5cdCAgICAgICAgdGhpcy5wYXR0ZXJuID0gcGF0dGVybiB8fCB0aGlzLnBhdHRlcm47XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBsZW5ndGg6IHtcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMucm93cyAqIHRoaXMuY29sdW1ucztcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGxvY2F0ZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gbG9jYXRlKGluZGV4KSB7XG5cdCAgICAgICAgLy8gcmV0dXJucyByb3cgYW5kIGNvbHVtbiBvZiBjZWxsIGJ5IGluZGV4XG5cdCAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgIHJvdzogfiB+KGluZGV4IC8gdGhpcy5jb2x1bW5zKSxcblx0ICAgICAgICAgIGNvbHVtbjogaW5kZXggJSB0aGlzLmNvbHVtbnNcblx0ICAgICAgICB9O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgaW5kZXhPZjoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gaW5kZXhPZihyb3csIGNvbHVtbikge1xuXHQgICAgICAgIHJldHVybiBjb2x1bW4gKyByb3cgKiB0aGlzLmNvbHVtbnM7XG5cdCAgICAgICAgLy8gcmV0dXJucyBpbmRleCBvZiBjZWxsIGJ5IHJvdyBhbmQgY29sdW1uXG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByb3c6IHtcblx0ICAgICAgdmFsdWU6IChmdW5jdGlvbiAoX3Jvdykge1xuXHQgICAgICAgIHZhciBfcm93V3JhcHBlciA9IGZ1bmN0aW9uIHJvdyhfeCkge1xuXHQgICAgICAgICAgcmV0dXJuIF9yb3cuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICB9O1xuXHRcblx0ICAgICAgICBfcm93V3JhcHBlci50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgIHJldHVybiBfcm93LnRvU3RyaW5nKCk7XG5cdCAgICAgICAgfTtcblx0XG5cdCAgICAgICAgcmV0dXJuIF9yb3dXcmFwcGVyO1xuXHQgICAgICB9KShmdW5jdGlvbiAocm93KSB7XG5cdCAgICAgICAgdmFyIGRhdGEgPSBbXTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG5cdCAgICAgICAgICBkYXRhLnB1c2godGhpcy5wYXR0ZXJuW3Jvd10gPyAxIDogMCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBkYXRhO1xuXHQgICAgICB9KVxuXHQgICAgfSxcblx0ICAgIGNvbHVtbjoge1xuXHQgICAgICB2YWx1ZTogKGZ1bmN0aW9uIChfY29sdW1uKSB7XG5cdCAgICAgICAgdmFyIF9jb2x1bW5XcmFwcGVyID0gZnVuY3Rpb24gY29sdW1uKF94Mikge1xuXHQgICAgICAgICAgcmV0dXJuIF9jb2x1bW4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICB9O1xuXHRcblx0ICAgICAgICBfY29sdW1uV3JhcHBlci50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgIHJldHVybiBfY29sdW1uLnRvU3RyaW5nKCk7XG5cdCAgICAgICAgfTtcblx0XG5cdCAgICAgICAgcmV0dXJuIF9jb2x1bW5XcmFwcGVyO1xuXHQgICAgICB9KShmdW5jdGlvbiAoY29sdW1uKSB7XG5cdCAgICAgICAgdmFyIGRhdGEgPSBbXTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG5cdCAgICAgICAgICBkYXRhLnB1c2godGhpcy5wYXR0ZXJuW2ldW2NvbHVtbl0gPyAxIDogMCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBkYXRhO1xuXHQgICAgICB9KVxuXHQgICAgfSxcblx0ICAgIHJvd3M6IHtcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMucGF0dGVybi5sZW5ndGg7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXHRcblx0ICAgICAgICB2YXIgcHJldmlvdXMgPSB0aGlzLnBhdHRlcm4uc2xpY2UoMCk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGUodiwgdGhpcy5jb2x1bW5zKTtcblx0ICAgICAgICB0aGlzLml0ZXJhdGUoZnVuY3Rpb24gKHIsIGMpIHtcblx0ICAgICAgICAgIGlmIChwcmV2aW91c1tyXSAmJiBwcmV2aW91c1tyXVtjXSkge1xuXHQgICAgICAgICAgICBfdGhpcy5wYXR0ZXJuW3JdW2NdID0gcHJldmlvdXNbcl1bY107XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjb2x1bW5zOiB7XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnBhdHRlcm5bMF0ubGVuZ3RoO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblx0XG5cdCAgICAgICAgdmFyIHByZXZpb3VzID0gdGhpcy5wYXR0ZXJuLnNsaWNlKDApO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlKHRoaXMucm93cywgdik7XG5cdCAgICAgICAgdGhpcy5pdGVyYXRlKGZ1bmN0aW9uIChyLCBjKSB7XG5cdCAgICAgICAgICBpZiAocHJldmlvdXNbcl0gJiYgcHJldmlvdXNbcl1bY10pIHtcblx0ICAgICAgICAgICAgX3RoaXMucGF0dGVybltyXVtjXSA9IHByZXZpb3VzW3JdW2NdO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBNYXRyaXg7XG5cdH0pKCk7XG5cdFxuXHRtb2R1bGUuZXhwb3J0cyA9IE1hdHJpeDtcblxuLyoqKi8gfSksXG4vKiAyNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9pbnRlcm9wUmVxdWlyZSA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialtcImRlZmF1bHRcIl0gOiBvYmo7IH07XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGtleSBpbiBwcm9wcykgeyB2YXIgcHJvcCA9IHByb3BzW2tleV07IHByb3AuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKHByb3AudmFsdWUpIHByb3Aud3JpdGFibGUgPSB0cnVlOyB9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpOyB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH07XG5cdFxuXHR2YXIgbWF0aCA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKTtcblx0XG5cdHZhciBEcnVuayA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KSk7XG5cdFxuXHR2YXIgU2VxdWVuY2UgPSAoZnVuY3Rpb24gKCkge1xuXHQgIGZ1bmN0aW9uIFNlcXVlbmNlKCkge1xuXHQgICAgdmFyIHNlcXVlbmNlID0gYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyBbMCwgMTAsIDIwLCAzMF0gOiBhcmd1bWVudHNbMF07XG5cdCAgICB2YXIgbW9kZSA9IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gXCJ1cFwiIDogYXJndW1lbnRzWzFdO1xuXHQgICAgdmFyIHBvc2l0aW9uID0gYXJndW1lbnRzWzJdID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IGFyZ3VtZW50c1syXTtcblx0XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU2VxdWVuY2UpO1xuXHRcblx0ICAgIHRoaXMudmFsdWVzID0gc2VxdWVuY2U7XG5cdCAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy52YWx1ZXMpKSB7XG5cdCAgICAgIHRoaXMudmFsdWVzID0gW3RoaXMudmFsdWVzXTtcblx0ICAgIH1cblx0ICAgIHRoaXMuX21vZGUgPSBtb2RlO1xuXHQgICAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uO1xuXHRcblx0ICAgIHRoaXMuZHJ1bmtXYWxrID0gbmV3IERydW5rKDAsIHRoaXMudmFsdWVzLmxlbmd0aCAtIDEpO1xuXHRcblx0ICAgIHRoaXMuc3RhcnRWYWx1ZXMgPSB7XG5cdCAgICAgIHVwOiAwLFxuXHQgICAgICBkb3duOiB0aGlzLnZhbHVlcy5sZW5ndGggLSAxLFxuXHQgICAgICBkcnVuazogfiB+KHRoaXMudmFsdWVzLmxlbmd0aCAvIDIpLFxuXHQgICAgICByYW5kb206IG1hdGgucmkodGhpcy52YWx1ZXMubGVuZ3RoKVxuXHQgICAgfTtcblx0XG5cdCAgICBpZiAodGhpcy5wb3NpdGlvbiAhPT0gZmFsc2UpIHtcblx0ICAgICAgdGhpcy5uZXh0ID0gdGhpc1t0aGlzLl9tb2RlXTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRoaXMubmV4dCA9IHRoaXMuZmlyc3Q7XG5cdCAgICB9XG5cdCAgfVxuXHRcblx0ICBfY3JlYXRlQ2xhc3MoU2VxdWVuY2UsIHtcblx0ICAgIG1vZGU6IHtcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX21vZGU7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKG1vZGUpIHtcblx0ICAgICAgICBpZiAoIShtb2RlID09PSBcInVwXCIgfHwgbW9kZSA9PT0gXCJkb3duXCIgfHwgbW9kZSA9PT0gXCJyYW5kb21cIiB8fCBtb2RlID09PSBcImRydW5rXCIpKSB7XG5cdCAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIG9ubHkgbW9kZXMgY3VycmVudGx5IGFsbG93ZWQgYXJlOiB1cCwgZG93biwgcmFuZG9tLCBkcnVua1wiKTtcblx0ICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fbW9kZSA9IG1vZGU7XG5cdCAgICAgICAgaWYgKHRoaXMucG9zaXRpb24pIHtcblx0ICAgICAgICAgIHRoaXMubmV4dCA9IHRoaXNbdGhpcy5fbW9kZV07XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgdmFsdWU6IHtcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzW3RoaXMucG9zaXRpb25dO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHRoaXMudmFsdWVzLmluZGV4T2Yodik7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBmaXJzdDoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gZmlyc3QoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMucG9zaXRpb24gIT09IGZhbHNlKSB7XG5cdCAgICAgICAgICB0aGlzLm5leHQgPSB0aGlzW3RoaXMuX21vZGVdO1xuXHQgICAgICAgICAgcmV0dXJuIHRoaXMubmV4dCgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy5zdGFydFZhbHVlc1t0aGlzLl9tb2RlXTtcblx0ICAgICAgICB0aGlzLm5leHQgPSB0aGlzW3RoaXMuX21vZGVdO1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgdXA6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHVwKCkge1xuXHQgICAgICAgIHRoaXMucG9zaXRpb24rKztcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uICU9IHRoaXMudmFsdWVzLmxlbmd0aDtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGRvd246IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRvd24oKSB7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvbi0tO1xuXHQgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uIDwgMCkge1xuXHQgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9ICh0aGlzLnBvc2l0aW9uICsgdGhpcy52YWx1ZXMubGVuZ3RoKSAlIHRoaXMudmFsdWVzLmxlbmd0aDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByYW5kb206IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJhbmRvbSgpIHtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uID0gbWF0aC5yaSgwLCB0aGlzLnZhbHVlcy5sZW5ndGgpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZHJ1bms6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRydW5rKCkge1xuXHQgICAgICAgIHRoaXMuZHJ1bmtXYWxrLm1heCA9IHRoaXMudmFsdWVzLmxlbmd0aDtcblx0ICAgICAgICB0aGlzLmRydW5rV2Fsay52YWx1ZSA9IHRoaXMucG9zaXRpb247XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHRoaXMuZHJ1bmtXYWxrLm5leHQoKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcblx0ICAgICAgfVxuXHRcblx0ICAgICAgLyogZnV0dXJlIG1ldGhvZHNcclxuXHQgICAgICAuZ3JvdXAoc3RhcnQsc3RvcCkgLS0gb3V0cHV0cyBhIGdyb3VwIG9mIG4gaXRlbXMgZnJvbSB0aGUgbGlzdCwgd2l0aCB3cmFwcGluZ1xyXG5cdCAgICAgIC5sb29wKHN0YXJ0LHN0b3ApIC0tIGNvbmZpbmVzIHNlcXVlbmNpbmcgdG8gYSBzdWJzZXQgb2YgdGhlIHZhbHVlc1xyXG5cdCAgICAgICAgICAoY291bGQgZXZlbiBoYXZlIGEgZGlzdGluY3Rpb24gYmV0d2VlbiAub3JpZ2luYWxWYWx1ZXMgYW5kIHRoZSBhcnJheSBvZiB2YWx1ZXMgYmVpbmcgdXNlZClcclxuXHQgICAgICAqL1xuXHRcblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIFNlcXVlbmNlO1xuXHR9KSgpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBTZXF1ZW5jZTtcblxuLyoqKi8gfSksXG4vKiAyNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9pbnRlcm9wUmVxdWlyZSA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialtcImRlZmF1bHRcIl0gOiBvYmo7IH07XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGtleSBpbiBwcm9wcykgeyB2YXIgcHJvcCA9IHByb3BzW2tleV07IHByb3AuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKHByb3AudmFsdWUpIHByb3Aud3JpdGFibGUgPSB0cnVlOyB9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpOyB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH07XG5cdFxuXHR2YXIgbWF0aCA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKTtcblx0XG5cdHZhciBEcnVuayA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBEcnVuaygpIHtcblx0ICAgICAgICB2YXIgbWluID0gYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyAwIDogYXJndW1lbnRzWzBdO1xuXHQgICAgICAgIHZhciBtYXggPSBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IDkgOiBhcmd1bWVudHNbMV07XG5cdCAgICAgICAgdmFyIHZhbHVlID0gYXJndW1lbnRzWzJdID09PSB1bmRlZmluZWQgPyAwIDogYXJndW1lbnRzWzJdO1xuXHQgICAgICAgIHZhciBpbmNyZW1lbnQgPSBhcmd1bWVudHNbM10gPT09IHVuZGVmaW5lZCA/IDEgOiBhcmd1bWVudHNbM107XG5cdCAgICAgICAgdmFyIGxvb3AgPSBhcmd1bWVudHNbNF0gPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogYXJndW1lbnRzWzRdO1xuXHRcblx0ICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRHJ1bmspO1xuXHRcblx0ICAgICAgICB0aGlzLm1pbiA9IG1pbjtcblx0ICAgICAgICB0aGlzLm1heCA9IG1heDtcblx0ICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG5cdCAgICAgICAgdGhpcy5pbmNyZW1lbnQgPSBpbmNyZW1lbnQ7XG5cdCAgICAgICAgdGhpcy5sb29wID0gbG9vcDtcblx0ICAgIH1cblx0XG5cdCAgICBfY3JlYXRlQ2xhc3MoRHJ1bmssIHtcblx0ICAgICAgICBuZXh0OiB7XG5cdCAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBuZXh0KCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSArPSBtYXRoLnBpY2soLTEgKiB0aGlzLmluY3JlbWVudCwgdGhpcy5pbmNyZW1lbnQpO1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgPiB0aGlzLm1heCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1heCAtIHRoaXMuaW5jcmVtZW50O1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZSA8IHRoaXMubWluKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5tYXg7XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluICsgdGhpcy5pbmNyZW1lbnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0XG5cdCAgICByZXR1cm4gRHJ1bms7XG5cdH0pKCk7XG5cdFxuXHRtb2R1bGUuZXhwb3J0cyA9IERydW5rO1xuXG4vKioqLyB9KSxcbi8qIDI4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgX2ludGVyb3BSZXF1aXJlID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqW1wiZGVmYXVsdFwiXSA6IG9iajsgfTtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBtYXRoID0gX2ludGVyb3BSZXF1aXJlKF9fd2VicGFja19yZXF1aXJlX18oNSkpO1xuXHRcblx0dmFyIERydW5rID0gX2ludGVyb3BSZXF1aXJlKF9fd2VicGFja19yZXF1aXJlX18oMjcpKTtcblx0XG5cdHZhciBDb3VudGVyID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIENvdW50ZXIoKSB7XG5cdCAgICAgICAgdmFyIG1pbiA9IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gMCA6IGFyZ3VtZW50c1swXTtcblx0ICAgICAgICB2YXIgbWF4ID0gYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyAxMCA6IGFyZ3VtZW50c1sxXTtcblx0ICAgICAgICB2YXIgbW9kZSA9IGFyZ3VtZW50c1syXSA9PT0gdW5kZWZpbmVkID8gXCJ1cFwiIDogYXJndW1lbnRzWzJdO1xuXHQgICAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1szXSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBhcmd1bWVudHNbM107XG5cdFxuXHQgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb3VudGVyKTtcblx0XG5cdCAgICAgICAgdGhpcy5taW4gPSBtaW47XG5cdCAgICAgICAgdGhpcy5tYXggPSBtYXg7XG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuXHQgICAgICAgIHRoaXMubW9kZSA9IG1vZGU7XG5cdCAgICAgICAgdGhpcy5kcnVua1dhbGsgPSBuZXcgRHJ1bmsodGhpcy5taW4sIHRoaXMubWF4KTtcblx0ICAgICAgICBpZiAodGhpcy52YWx1ZSAhPT0gZmFsc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5uZXh0ID0gdGhpc1t0aGlzLl9tb2RlXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLm5leHQgPSB0aGlzLmZpcnN0O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0XG5cdCAgICBfY3JlYXRlQ2xhc3MoQ291bnRlciwge1xuXHQgICAgICAgIG1vZGU6IHtcblx0ICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAobW9kZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKCEobW9kZSA9PT0gXCJ1cFwiIHx8IG1vZGUgPT09IFwiZG93blwiIHx8IG1vZGUgPT09IFwicmFuZG9tXCIgfHwgbW9kZSA9PT0gXCJkcnVua1wiKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGUgb25seSBtb2RlcyBjdXJyZW50bHkgYWxsb3dlZCBhcmU6IHVwLCBkb3duLCByYW5kb20sIGRydW5rXCIpO1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHRoaXMuX21vZGUgPSBtb2RlO1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSB0aGlzW3RoaXMuX21vZGVdO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2RlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBmaXJzdDoge1xuXHQgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZmlyc3QoKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAhPT0gZmFsc2UpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSB0aGlzW3RoaXMuX21vZGVdO1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5leHQoKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZXMgPSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdXA6IHRoaXMubWluLFxuXHQgICAgICAgICAgICAgICAgICAgIGRvd246IHRoaXMubWF4LFxuXHQgICAgICAgICAgICAgICAgICAgIGRydW5rOiB+IH5tYXRoLmF2ZXJhZ2UodGhpcy5taW4sIHRoaXMubWF4KSxcblx0ICAgICAgICAgICAgICAgICAgICByYW5kb206IG1hdGgucmkodGhpcy5taW4sIHRoaXMubWF4KVxuXHQgICAgICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnN0YXJ0VmFsdWVzW3RoaXMuX21vZGVdO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gdGhpc1t0aGlzLl9tb2RlXTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICB1cDoge1xuXHQgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdXAoKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnZhbHVlKys7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZSA+PSB0aGlzLm1heCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1pbjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBkb3duOiB7XG5cdCAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBkb3duKCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy52YWx1ZS0tO1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgPCB0aGlzLm1pbikge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1heDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICByYW5kb206IHtcblx0ICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJhbmRvbSgpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBtYXRoLnJpKHRoaXMubWluLCB0aGlzLm1heCk7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZHJ1bms6IHtcblx0ICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRydW5rKCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5kcnVua1dhbGsubWluID0gdGhpcy5taW47XG5cdCAgICAgICAgICAgICAgICB0aGlzLmRydW5rV2Fsay5tYXggPSB0aGlzLm1heDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZHJ1bmtXYWxrLnZhbHVlID0gdGhpcy52YWx1ZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmRydW5rV2Fsay5uZXh0KCk7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHRcblx0ICAgIHJldHVybiBDb3VudGVyO1xuXHR9KSgpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBDb3VudGVyO1xuXG4vKioqLyB9KSxcbi8qIDI5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQgPSBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfTtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7IH0gfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gZGVzYyAmJiBkZXNjLndyaXRhYmxlKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfTtcblx0XG5cdHZhciBfaW5oZXJpdHMgPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBzdmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXHR2YXIgbWF0aCA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cdHZhciBJbnRlcmZhY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xuXHR2YXIgU3RlcCA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xuXHRcblx0dmFyIEludGVyYWN0aW9uID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX193ZWJwYWNrX3JlcXVpcmVfXygxMikpO1xuXHRcblx0LyoqXG5cdCogUGFuMkRcblx0KlxuXHQqIEBkZXNjcmlwdGlvbiBJbnRlcmZhY2UgZm9yIG1vdmluZyBhIHNvdW5kIGFyb3VuZCBhbiBhcnJheSBvZiBzcGVha2Vycy4gU3BlYWtlciBsb2NhdGlvbnMgY2FuIGJlIGN1c3RvbWl6ZWQuIFRoZSBpbnRlcmZhY2UgY2FsY3VsYXRlcyB0aGUgY2xvc2VuZXNzIG9mIHRoZSBzb3VuZCBzb3VyY2UgdG8gZWFjaCBzcGVha2VyIGFuZCByZXR1cm5zIHRoYXQgZGlzdGFuY2UgYXMgYSBudW1lcmljIHZhbHVlLlxuXHQqXG5cdCogQGRlbW8gPHNwYW4gbmV4dXMtdWk9XCJwYW4yRFwiPjwvc3Bhbj5cblx0KlxuXHQqIEBleGFtcGxlXG5cdCogdmFyIHBhbjJkID0gbmV3IE5leHVzLlBhbjJkKCcjdGFyZ2V0Jylcblx0KlxuXHQqIEBleGFtcGxlXG5cdCogdmFyIHBhbjJkID0gbmV3IE5leHVzLlBhbjJEKCcjdGFyZ2V0Jyx7XG5cdCogICAnc2l6ZSc6IFsyMDAsMjAwXSxcblx0KiAgICdyYW5nZSc6IDAuNSwgIC8vIGRldGVjdGlvbiByYWRpdXMgb2YgZWFjaCBzcGVha2VyXG5cdCogICAnbW9kZSc6ICdhYnNvbHV0ZScsICAgLy8gJ2Fic29sdXRlJyBvciAncmVsYXRpdmUnIHNvdW5kIG1vdmVtZW50XG5cdCogICAnc3BlYWtlcnMnOiBbICAvLyB0aGUgc3BlYWtlciBbeCx5XSBwb3NpdGlvbnNcblx0KiAgICAgICBbMC41LDAuMl0sXG5cdCogICAgICAgWzAuNzUsMC4yNV0sXG5cdCogICAgICAgWzAuOCwwLjVdLFxuXHQqICAgICAgIFswLjc1LDAuNzVdLFxuXHQqICAgICAgIFswLjUsMC44XSxcblx0KiAgICAgICBbMC4yNSwwLjc1XVxuXHQqICAgICAgIFswLjIsMC41XSxcblx0KiAgICAgICBbMC4yNSwwLjI1XVxuXHQqICAgXVxuXHQqIH0pXG5cdCpcblx0KiBAb3V0cHV0XG5cdCogY2hhbmdlXG5cdCogRmlyZXMgYW55IHRpbWUgdGhlIFwic291cmNlXCIgbm9kZSdzIHBvc2l0aW9uIGNoYW5nZXMuIDxicj5cblx0KiBUaGUgZXZlbnQgZGF0YSBpcyBhbiBhcnJheSBvZiB0aGUgYW1wbGl0dWRlcyAoMC0xKSwgcmVwcmVzZW50aW5nIHRoZSBsZXZlbCBvZiBlYWNoIHNwZWFrZXIgKGFzIGNhbGN1bGF0ZWQgYnkgaXRzIGRpc3RhbmNlIHRvIHRoZSBhdWRpbyBzb3VyY2UpLlxuXHQqXG5cdCogQG91dHB1dGV4YW1wbGVcblx0KiBwYW4yZC5vbignY2hhbmdlJyxmdW5jdGlvbih2KSB7XG5cdCogICBjb25zb2xlLmxvZyh2KTtcblx0KiB9KVxuXHQqXG5cdCovXG5cdFxuXHR2YXIgUGFuMkQgPSAoZnVuY3Rpb24gKF9JbnRlcmZhY2UpIHtcblx0ICBmdW5jdGlvbiBQYW4yRCgpIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQYW4yRCk7XG5cdFxuXHQgICAgdmFyIG9wdGlvbnMgPSBbXCJyYW5nZVwiXTtcblx0XG5cdCAgICB2YXIgZGVmYXVsdHMgPSB7XG5cdCAgICAgIHNpemU6IFsyMDAsIDIwMF0sXG5cdCAgICAgIHJhbmdlOiAwLjUsXG5cdCAgICAgIG1vZGU6IFwiYWJzb2x1dGVcIixcblx0ICAgICAgc3BlYWtlcnM6IFtbMC41LCAwLjJdLCBbMC43NSwgMC4yNV0sIFswLjgsIDAuNV0sIFswLjc1LCAwLjc1XSwgWzAuNSwgMC44XSwgWzAuMjUsIDAuNzVdLCBbMC4yLCAwLjVdLCBbMC4yNSwgMC4yNV1dXG5cdCAgICB9O1xuXHRcblx0ICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKFBhbjJELnByb3RvdHlwZSksIFwiY29uc3RydWN0b3JcIiwgdGhpcykuY2FsbCh0aGlzLCBhcmd1bWVudHMsIG9wdGlvbnMsIGRlZmF1bHRzKTtcblx0XG5cdCAgICB0aGlzLnZhbHVlID0ge1xuXHQgICAgICB4OiBuZXcgU3RlcCgwLCAxLCAwLCAwLjUpLFxuXHQgICAgICB5OiBuZXcgU3RlcCgwLCAxLCAwLCAwLjUpXG5cdCAgICB9O1xuXHRcblx0ICAgIC8qKlxuXHQgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgbW91c2UgaW50ZXJhY3Rpb24uIEluIFwiYWJzb2x1dGVcIiBtb2RlLCB0aGUgc291cmNlIG5vZGUgd2lsbCBqdW1wIHRvIHlvdXIgbW91c2UgcG9zaXRpb24gb24gbW91c2UgY2xpY2suIEluIFwicmVsYXRpdmVcIiBtb2RlLCBpdCBkb2VzIG5vdC5cblx0ICAgICovXG5cdCAgICB0aGlzLm1vZGUgPSB0aGlzLnNldHRpbmdzLm1vZGU7XG5cdFxuXHQgICAgdGhpcy5wb3NpdGlvbiA9IHtcblx0ICAgICAgeDogbmV3IEludGVyYWN0aW9uLkhhbmRsZSh0aGlzLm1vZGUsIFwiaG9yaXpvbnRhbFwiLCBbMCwgdGhpcy53aWR0aF0sIFt0aGlzLmhlaWdodCwgMF0pLFxuXHQgICAgICB5OiBuZXcgSW50ZXJhY3Rpb24uSGFuZGxlKHRoaXMubW9kZSwgXCJ2ZXJ0aWNhbFwiLCBbMCwgdGhpcy53aWR0aF0sIFt0aGlzLmhlaWdodCwgMF0pXG5cdCAgICB9O1xuXHQgICAgdGhpcy5wb3NpdGlvbi54LnZhbHVlID0gdGhpcy52YWx1ZS54Lm5vcm1hbGl6ZWQ7XG5cdCAgICB0aGlzLnBvc2l0aW9uLnkudmFsdWUgPSB0aGlzLnZhbHVlLnkubm9ybWFsaXplZDtcblx0XG5cdCAgICAvKipcblx0ICAgIEFuIGFycmF5IG9mIHNwZWFrZXIgbG9jYXRpb25zLiBVcGRhdGUgdGhpcyB3aXRoIC5tb3ZlU3BlYWtlcigpIG9yIC5tb3ZlQWxsU3BlYWtlcnMoKVxuXHQgICAgKi9cblx0ICAgIHRoaXMuc3BlYWtlcnMgPSB0aGlzLnNldHRpbmdzLnNwZWFrZXJzO1xuXHRcblx0ICAgIC8qKlxuXHQgICAgUmV3cml0ZTogVGhlIG1heGltdW0gZGlzdGFuY2UgZnJvbSBhIHNwZWFrZXIgdGhhdCB0aGUgc291cmNlIG5vZGUgY2FuIGJlIGZvciBpdCB0byBiZSBoZWFyZCBmcm9tIHRoYXQgc3BlYWtlci4gQSBsb3cgcmFuZ2UgKDAuMSkgd2lsbCByZXN1bHQgaW4gc3BlYWtlcnMgb25seSBwbGF5aW5nIHdoZW4gdGhlIHNvdW5kIGlzIHZlcnkgY2xvc2UgaXQuIERlZmF1bHQgaXMgMC41IChoYWxmIG9mIHRoZSBpbnRlcmZhY2UpLlxuXHQgICAgKi9cblx0ICAgIHRoaXMucmFuZ2UgPSB0aGlzLnNldHRpbmdzLnJhbmdlO1xuXHRcblx0ICAgIC8qKlxuXHQgICAgVGhlIGN1cnJlbnQgbGV2ZWxzIGZvciBlYWNoIHNwZWFrZXIuIFRoaXMgaXMgY2FsY3VsYXRlZCB3aGVuIGEgc291cmNlIG5vZGUgb3Igc3BlYWtlciBub2RlIGlzIG1vdmVkIHRocm91Z2ggaW50ZXJhY3Rpb24gb3IgcHJvZ3JhbWF0aWNhbGx5LlxuXHQgICAgKi9cblx0ICAgIHRoaXMubGV2ZWxzID0gW107XG5cdFxuXHQgICAgdGhpcy5pbml0KCk7XG5cdFxuXHQgICAgdGhpcy5jYWxjdWxhdGVMZXZlbHMoKTtcblx0ICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgfVxuXHRcblx0ICBfaW5oZXJpdHMoUGFuMkQsIF9JbnRlcmZhY2UpO1xuXHRcblx0ICBfY3JlYXRlQ2xhc3MoUGFuMkQsIHtcblx0ICAgIGJ1aWxkSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgdGhpcy5rbm9iID0gc3ZnLmNyZWF0ZShcImNpcmNsZVwiKTtcblx0XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMua25vYik7XG5cdFxuXHQgICAgICAgIC8vIGFkZCBzcGVha2Vyc1xuXHQgICAgICAgIHRoaXMuc3BlYWtlckVsZW1lbnRzID0gW107XG5cdFxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zcGVha2Vycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgdmFyIHNwZWFrZXJFbGVtZW50ID0gc3ZnLmNyZWF0ZShcImNpcmNsZVwiKTtcblx0XG5cdCAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc3BlYWtlckVsZW1lbnQpO1xuXHRcblx0ICAgICAgICAgIHRoaXMuc3BlYWtlckVsZW1lbnRzLnB1c2goc3BlYWtlckVsZW1lbnQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNpemVJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNpemVJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIHRoaXMuX21pbkRpbWVuc2lvbiA9IE1hdGgubWluKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblx0XG5cdCAgICAgICAgdGhpcy5rbm9iUmFkaXVzID0ge1xuXHQgICAgICAgICAgb2ZmOiB+IH4odGhpcy5fbWluRGltZW5zaW9uIC8gMTAwKSAqIDMgKyA1IH07XG5cdCAgICAgICAgdGhpcy5rbm9iUmFkaXVzLm9uID0gdGhpcy5rbm9iUmFkaXVzLm9mZiAqIDI7XG5cdFxuXHQgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJjeFwiLCB0aGlzLndpZHRoIC8gMik7XG5cdCAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImN5XCIsIHRoaXMuaGVpZ2h0IC8gMik7XG5cdCAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcInJcIiwgdGhpcy5rbm9iUmFkaXVzLm9mZik7XG5cdFxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zcGVha2Vycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgdmFyIHNwZWFrZXJFbGVtZW50ID0gdGhpcy5zcGVha2VyRWxlbWVudHNbaV07XG5cdCAgICAgICAgICB2YXIgc3BlYWtlciA9IHRoaXMuc3BlYWtlcnNbaV07XG5cdCAgICAgICAgICBzcGVha2VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJjeFwiLCBzcGVha2VyWzBdICogdGhpcy53aWR0aCk7XG5cdCAgICAgICAgICBzcGVha2VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJjeVwiLCBzcGVha2VyWzFdICogdGhpcy5oZWlnaHQpO1xuXHQgICAgICAgICAgc3BlYWtlckVsZW1lbnQuc2V0QXR0cmlidXRlKFwiclwiLCB0aGlzLl9taW5EaW1lbnNpb24gLyAyMCArIDUpO1xuXHQgICAgICAgICAgc3BlYWtlckVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZmlsbC1vcGFjaXR5XCIsIFwiMFwiKTtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIHRoaXMucG9zaXRpb24ueC5yZXNpemUoWzAsIHRoaXMud2lkdGhdLCBbdGhpcy5oZWlnaHQsIDBdKTtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uLnkucmVzaXplKFswLCB0aGlzLndpZHRoXSwgW3RoaXMuaGVpZ2h0LCAwXSk7XG5cdFxuXHQgICAgICAgIC8vIG5leHQsIG5lZWQgdG9cblx0ICAgICAgICAvLyByZXNpemUgcG9zaXRpb25zXG5cdCAgICAgICAgLy8gY2FsY3VsYXRlIHNwZWFrZXIgZGlzdGFuY2VzXG5cdCAgICAgICAgdGhpcy5jYWxjdWxhdGVMZXZlbHMoKTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29sb3JJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbG9ySW50ZXJmYWNlKCkge1xuXHRcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5jb2xvcnMuZmlsbDtcblx0ICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmNvbG9ycy5tZWRpdW1MaWdodCk7XG5cdFxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zcGVha2Vycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgdmFyIHNwZWFrZXJFbGVtZW50ID0gdGhpcy5zcGVha2VyRWxlbWVudHNbaV07XG5cdCAgICAgICAgICBzcGVha2VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLmFjY2VudCk7XG5cdCAgICAgICAgICBzcGVha2VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgdGhpcy5jb2xvcnMuYWNjZW50KTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByZW5kZXI6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0ICAgICAgICB0aGlzLmtub2JDb29yZGluYXRlcyA9IHtcblx0ICAgICAgICAgIHg6IHRoaXMudmFsdWUueC5ub3JtYWxpemVkICogdGhpcy53aWR0aCxcblx0ICAgICAgICAgIHk6IHRoaXMuaGVpZ2h0IC0gdGhpcy52YWx1ZS55Lm5vcm1hbGl6ZWQgKiB0aGlzLmhlaWdodFxuXHQgICAgICAgIH07XG5cdFxuXHQgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJjeFwiLCB0aGlzLmtub2JDb29yZGluYXRlcy54KTtcblx0ICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiY3lcIiwgdGhpcy5rbm9iQ29vcmRpbmF0ZXMueSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjbGljazoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xpY2soKSB7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvbi54LmFuY2hvciA9IHRoaXMubW91c2U7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvbi55LmFuY2hvciA9IHRoaXMubW91c2U7XG5cdCAgICAgICAgdGhpcy5tb3ZlKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtb3ZlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBtb3ZlKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmNsaWNrZWQpIHtcblx0ICAgICAgICAgIHRoaXMucG9zaXRpb24ueC51cGRhdGUodGhpcy5tb3VzZSk7XG5cdCAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkudXBkYXRlKHRoaXMubW91c2UpO1xuXHQgICAgICAgICAgLy8gcG9zaXRpb24ueCBhbmQgcG9zaXRpb24ueSBhcmUgbm9ybWFsaXplZFxuXHQgICAgICAgICAgLy8gc28gYXJlIHRoZSBsZXZlbHNcblx0ICAgICAgICAgIC8vIGxpa2VseSBkb24ndCBuZWVkIHRoaXMudmFsdWUgYXQgYWxsIC0tIG9ubHkgdXNlZCBmb3IgZHJhd2luZ1xuXHQgICAgICAgICAgLy8gbm90IGdvaW5nIHRvIGJlIGEgJ3N0ZXAnIG9yICdtaW4nIGFuZCAnbWF4JyBpbiB0aGlzIG9uZS5cblx0ICAgICAgICAgIHRoaXMuY2FsY3VsYXRlTGV2ZWxzKCk7XG5cdCAgICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwgdGhpcy5sZXZlbHMpO1xuXHQgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByZWxlYXNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWxlYXNlKCkge1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBub3JtYWxpemVkOiB7XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICB4OiB0aGlzLnZhbHVlLngubm9ybWFsaXplZCxcblx0ICAgICAgICAgIHk6IHRoaXMudmFsdWUueS5ub3JtYWxpemVkXG5cdCAgICAgICAgfTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNhbGN1bGF0ZUxldmVsczoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY2FsY3VsYXRlTGV2ZWxzKCkge1xuXHQgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cdFxuXHQgICAgICAgIHRoaXMudmFsdWUueC51cGRhdGVOb3JtYWwodGhpcy5wb3NpdGlvbi54LnZhbHVlKTtcblx0ICAgICAgICB0aGlzLnZhbHVlLnkudXBkYXRlTm9ybWFsKHRoaXMucG9zaXRpb24ueS52YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5sZXZlbHMgPSBbXTtcblx0ICAgICAgICB0aGlzLnNwZWFrZXJzLmZvckVhY2goZnVuY3Rpb24gKHMsIGkpIHtcblx0ICAgICAgICAgIHZhciBkaXN0YW5jZSA9IG1hdGguZGlzdGFuY2Uoc1swXSAqIF90aGlzLndpZHRoLCBzWzFdICogX3RoaXMuaGVpZ2h0LCBfdGhpcy5wb3NpdGlvbi54LnZhbHVlICogX3RoaXMud2lkdGgsICgxIC0gX3RoaXMucG9zaXRpb24ueS52YWx1ZSkgKiBfdGhpcy5oZWlnaHQpO1xuXHQgICAgICAgICAgdmFyIGxldmVsID0gbWF0aC5jbGlwKDEgLSBkaXN0YW5jZSAvIChfdGhpcy5yYW5nZSAqIF90aGlzLndpZHRoKSwgMCwgMSk7XG5cdCAgICAgICAgICBfdGhpcy5sZXZlbHMucHVzaChsZXZlbCk7XG5cdCAgICAgICAgICBfdGhpcy5zcGVha2VyRWxlbWVudHNbaV0uc2V0QXR0cmlidXRlKFwiZmlsbC1vcGFjaXR5XCIsIGxldmVsKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1vdmVTb3VyY2U6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBNb3ZlIHRoZSBhdWRpbyBzb3VyY2Ugbm9kZSBhbmQgdHJpZ2dlciB0aGUgb3V0cHV0IGV2ZW50LlxuXHQgICAgICBAcGFyYW0geCB7bnVtYmVyfSBOZXcgeCBsb2NhdGlvbiwgbm9ybWFsaXplZCAwLTFcblx0ICAgICAgQHBhcmFtIHkge251bWJlcn0gTmV3IHkgbG9jYXRpb24sIG5vcm1hbGl6ZWQgMC0xXG5cdCAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gbW92ZVNvdXJjZSh4LCB5KSB7XG5cdCAgICAgICAgdmFyIGxvY2F0aW9uID0ge1xuXHQgICAgICAgICAgeDogeCAqIHRoaXMud2lkdGgsXG5cdCAgICAgICAgICB5OiB5ICogdGhpcy5oZWlnaHRcblx0ICAgICAgICB9O1xuXHQgICAgICAgIHRoaXMucG9zaXRpb24ueC51cGRhdGUobG9jYXRpb24pO1xuXHQgICAgICAgIHRoaXMucG9zaXRpb24ueS51cGRhdGUobG9jYXRpb24pO1xuXHQgICAgICAgIHRoaXMuY2FsY3VsYXRlTGV2ZWxzKCk7XG5cdCAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMubGV2ZWxzKTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbW92ZVNwZWFrZXI6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBNb3ZlIGEgc3BlYWtlciBub2RlIGFuZCB0cmlnZ2VyIHRoZSBvdXRwdXQgZXZlbnQuXG5cdCAgICAgIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBJbmRleCBvZiB0aGUgc3BlYWtlciB0byBtb3ZlXG5cdCAgICAgIEBwYXJhbSB4IHtudW1iZXJ9IE5ldyB4IGxvY2F0aW9uLCBub3JtYWxpemVkIDAtMVxuXHQgICAgICBAcGFyYW0geSB7bnVtYmVyfSBOZXcgeSBsb2NhdGlvbiwgbm9ybWFsaXplZCAwLTFcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBtb3ZlU3BlYWtlcihpbmRleCwgeCwgeSkge1xuXHRcblx0ICAgICAgICB0aGlzLnNwZWFrZXJzW2luZGV4XSA9IFt4LCB5XTtcblx0ICAgICAgICB0aGlzLnNwZWFrZXJFbGVtZW50c1tpbmRleF0uc2V0QXR0cmlidXRlKFwiY3hcIiwgeCAqIHRoaXMud2lkdGgpO1xuXHQgICAgICAgIHRoaXMuc3BlYWtlckVsZW1lbnRzW2luZGV4XS5zZXRBdHRyaWJ1dGUoXCJjeVwiLCB5ICogdGhpcy5oZWlnaHQpO1xuXHQgICAgICAgIHRoaXMuY2FsY3VsYXRlTGV2ZWxzKCk7XG5cdCAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMubGV2ZWxzKTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgU2V0IGFsbCBzcGVha2VyIGxvY2F0aW9uc1xuXHQgICAgICBAcGFyYW0gbG9jYXRpb25zIHtBcnJheX0gQXJyYXkgb2Ygc3BlYWtlciBsb2NhdGlvbnMuIEVhY2ggaXRlbSBpbiB0aGUgYXJyYXkgc2hvdWxkIGJlIGFuIGFycmF5IG9mIG5vcm1hbGl6ZWQgeCBhbmQgeSBjb29yZGluYXRlcy5cblx0ICAgICAgIHNldFNwZWFrZXJzKGxvY2F0aW9ucykge1xuXHQgICAgICAgfVxuXHQgICAgICAqL1xuXHRcblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIFBhbjJEO1xuXHR9KShJbnRlcmZhY2UpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBQYW4yRDtcblxuLyoqKi8gfSksXG4vKiAzMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHsgdmFyIHByb3AgPSBwcm9wc1trZXldOyBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChwcm9wLnZhbHVlKSBwcm9wLndyaXRhYmxlID0gdHJ1ZTsgfSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKTsgfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXHRcblx0dmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyByZXR1cm4gZ2V0KHBhcmVudCwgcHJvcGVydHksIHJlY2VpdmVyKTsgfSB9IGVsc2UgaWYgKFwidmFsdWVcIiBpbiBkZXNjICYmIGRlc2Mud3JpdGFibGUpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9O1xuXHRcblx0dmFyIF9pbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9O1xuXHRcblx0dmFyIF9jbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9O1xuXHRcblx0dmFyIG1hdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xuXHR2YXIgc3ZnID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblx0dmFyIEludGVyZmFjZSA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5cdFxuXHQvKipcblx0KiBUaWx0XG5cdCpcblx0KiBAZGVzY3JpcHRpb24gRGV2aWNlIHRpbHQgc2Vuc29yIHdpdGggMiBvciAzIGF4ZXMgKGRlcGVuZGluZyBvbiB5b3VyIGRldmljZSBhbmQgYnJvd3NlcikuXG5cdCpcblx0KiBAZGVtbyA8c3BhbiBuZXh1cy11aT0ndGlsdCc+PC9zcGFuPlxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgdGlsdCA9IG5ldyBOZXh1cy5UaWx0KCcjdGFyZ2V0Jylcblx0KlxuXHQqIEBvdXRwdXRcblx0KiBjaGFuZ2Vcblx0KiBGaXJlcyBhdCBhIHJlZ3VsYXIgaW50ZXJ2YWwsIGFzIGxvbmcgYXMgdGhpcyBpbnRlcmZhY2UgaXMgYWN0aXZlIChzZWUgdGhlIGludGVyZmFjZSdzIDxpPi5hY3RpdmU8L2k+IHByb3BlcnR5KTxicj5cblx0KiBUaGUgZXZlbnQgZGF0YSBpcyBhbiA8aT5vYmplY3Q8L2k+IGNvbnRhaW5pbmcgeCAobnVtYmVyKSBhbmQgeSAobnVtYmVyKSBwcm9wZXJ0aWVzIHdoaWNoIHJlcHJlc2VudCB0aGUgY3VycmVudCB0aWx0IHN0YXRlIG9mIHRoZSBkZXZpY2UuXG5cdCpcblx0KiBAb3V0cHV0ZXhhbXBsZVxuXHQqIHRpbHQub24oJ2NoYW5nZScsZnVuY3Rpb24odikge1xuXHQqICAgY29uc29sZS5sb2codik7XG5cdCogfSlcblx0KlxuXHQqXG5cdCovXG5cdFxuXHR2YXIgVGlsdCA9IChmdW5jdGlvbiAoX0ludGVyZmFjZSkge1xuXHQgIGZ1bmN0aW9uIFRpbHQoKSB7XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVGlsdCk7XG5cdFxuXHQgICAgdmFyIG9wdGlvbnMgPSBbXCJ2YWx1ZVwiXTtcblx0XG5cdCAgICB2YXIgZGVmYXVsdHMgPSB7XG5cdCAgICAgIHNpemU6IFs4MCwgODBdXG5cdCAgICB9O1xuXHRcblx0ICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKFRpbHQucHJvdG90eXBlKSwgXCJjb25zdHJ1Y3RvclwiLCB0aGlzKS5jYWxsKHRoaXMsIGFyZ3VtZW50cywgb3B0aW9ucywgZGVmYXVsdHMpO1xuXHRcblx0ICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG5cdFxuXHQgICAgdGhpcy5pbml0KCk7XG5cdFxuXHQgICAgLy8gYWRkIGV2ZW50IGxpc3RlbmVyIGZvciBkZXZpY2Ugb3JpZW50YXRpb25cblx0XG5cdCAgICB0aGlzLmJvdW5kVXBkYXRlID0gdGhpcy51cGRhdGUuYmluZCh0aGlzKTtcblx0ICAgIC8vXHR0aGlzLmJvdW5kTW96VGlsdCA9IHRoaXMubW96VGlsdC5iaW5kKHRoaXMpXG5cdFxuXHQgICAgaWYgKHdpbmRvdy5EZXZpY2VPcmllbnRhdGlvbkV2ZW50KSB7XG5cdCAgICAgIHRoaXMub3JpZW50YXRpb25MaXN0ZW5lciA9IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZGV2aWNlb3JpZW50YXRpb25cIiwgdGhpcy5ib3VuZFVwZGF0ZSwgZmFsc2UpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG5cdCAgICAgIHRoaXMuY29sb3JJbnRlcmZhY2UoKTtcblx0ICAgIH1cblx0XG5cdCAgICAvKmVsc2UgaWYgKHdpbmRvdy5PcmllbnRhdGlvbkV2ZW50KSB7XG5cdCAgICAvL1x0ICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdNb3pPcmllbnRhdGlvbicsIHRoaXMuYm91bmRNb3pUaWx0LCBmYWxzZSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgY29uc29sZS5sb2coJ05vdCBzdXBwb3J0ZWQgb24geW91ciBkZXZpY2Ugb3IgYnJvd3Nlci4nKTtcblx0ICAgIH0gKi9cblx0ICB9XG5cdFxuXHQgIF9pbmhlcml0cyhUaWx0LCBfSW50ZXJmYWNlKTtcblx0XG5cdCAgX2NyZWF0ZUNsYXNzKFRpbHQsIHtcblx0ICAgIGJ1aWxkSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgdGhpcy50aXRsZSA9IHN2Zy5jcmVhdGUoXCJ0ZXh0XCIpO1xuXHQgICAgICAgIHRoaXMuY2lyY2xlWCA9IHN2Zy5jcmVhdGUoXCJjaXJjbGVcIik7XG5cdCAgICAgICAgdGhpcy5jaXJjbGVZID0gc3ZnLmNyZWF0ZShcImNpcmNsZVwiKTtcblx0ICAgICAgICB0aGlzLmNpcmNsZVogPSBzdmcuY3JlYXRlKFwiY2lyY2xlXCIpO1xuXHRcblx0ICAgICAgICB0aGlzLmJhclggPSBzdmcuY3JlYXRlKFwicGF0aFwiKTtcblx0ICAgICAgICB0aGlzLmJhclkgPSBzdmcuY3JlYXRlKFwicGF0aFwiKTtcblx0ICAgICAgICB0aGlzLmJhclogPSBzdmcuY3JlYXRlKFwicGF0aFwiKTtcblx0XG5cdCAgICAgICAgdGhpcy5iYXJYMiA9IHN2Zy5jcmVhdGUoXCJwYXRoXCIpO1xuXHQgICAgICAgIHRoaXMuYmFyWTIgPSBzdmcuY3JlYXRlKFwicGF0aFwiKTtcblx0ICAgICAgICB0aGlzLmJhcloyID0gc3ZnLmNyZWF0ZShcInBhdGhcIik7XG5cdFxuXHQgICAgICAgIHRoaXMuYmFyWC5zZXRBdHRyaWJ1dGUoXCJvcGFjaXR5XCIsIFwiMC44XCIpO1xuXHQgICAgICAgIHRoaXMuYmFyWS5zZXRBdHRyaWJ1dGUoXCJvcGFjaXR5XCIsIFwiMC44XCIpO1xuXHQgICAgICAgIHRoaXMuYmFyWi5zZXRBdHRyaWJ1dGUoXCJvcGFjaXR5XCIsIFwiMC44XCIpO1xuXHQgICAgICAgIHRoaXMuYmFyWDIuc2V0QXR0cmlidXRlKFwib3BhY2l0eVwiLCBcIjAuOFwiKTtcblx0ICAgICAgICB0aGlzLmJhclkyLnNldEF0dHJpYnV0ZShcIm9wYWNpdHlcIiwgXCIwLjhcIik7XG5cdCAgICAgICAgdGhpcy5iYXJaMi5zZXRBdHRyaWJ1dGUoXCJvcGFjaXR5XCIsIFwiMC44XCIpO1xuXHRcblx0ICAgICAgICB0aGlzLmNpcmNsZVguc2V0QXR0cmlidXRlKFwiY3hcIiwgdGhpcy53aWR0aCAqIDMgLyAxMik7XG5cdCAgICAgICAgdGhpcy5jaXJjbGVYLnNldEF0dHJpYnV0ZShcImN5XCIsIHRoaXMuaGVpZ2h0ICogMyAvIDQpO1xuXHQgICAgICAgIHRoaXMuY2lyY2xlWC5zZXRBdHRyaWJ1dGUoXCJyXCIsIHRoaXMuaGVpZ2h0IC8gMTApO1xuXHQgICAgICAgIHRoaXMuY2lyY2xlWC5zZXRBdHRyaWJ1dGUoXCJvcGFjaXR5XCIsIFwiMC40XCIpO1xuXHRcblx0ICAgICAgICB0aGlzLmNpcmNsZVkuc2V0QXR0cmlidXRlKFwiY3hcIiwgdGhpcy53aWR0aCAqIDYgLyAxMik7XG5cdCAgICAgICAgdGhpcy5jaXJjbGVZLnNldEF0dHJpYnV0ZShcImN5XCIsIHRoaXMuaGVpZ2h0ICogMyAvIDQpO1xuXHQgICAgICAgIHRoaXMuY2lyY2xlWS5zZXRBdHRyaWJ1dGUoXCJyXCIsIHRoaXMuaGVpZ2h0IC8gMTApO1xuXHQgICAgICAgIHRoaXMuY2lyY2xlWS5zZXRBdHRyaWJ1dGUoXCJvcGFjaXR5XCIsIFwiMC40XCIpO1xuXHRcblx0ICAgICAgICB0aGlzLmNpcmNsZVouc2V0QXR0cmlidXRlKFwiY3hcIiwgdGhpcy53aWR0aCAqIDkgLyAxMik7XG5cdCAgICAgICAgdGhpcy5jaXJjbGVaLnNldEF0dHJpYnV0ZShcImN5XCIsIHRoaXMuaGVpZ2h0ICogMyAvIDQpO1xuXHQgICAgICAgIHRoaXMuY2lyY2xlWi5zZXRBdHRyaWJ1dGUoXCJyXCIsIHRoaXMuaGVpZ2h0IC8gMTApO1xuXHQgICAgICAgIHRoaXMuY2lyY2xlWi5zZXRBdHRyaWJ1dGUoXCJvcGFjaXR5XCIsIFwiMC40XCIpO1xuXHRcblx0ICAgICAgICB0aGlzLmJhclguc2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIsIE1hdGgucm91bmQodGhpcy5oZWlnaHQgLyAzMCkpO1xuXHQgICAgICAgIHRoaXMuYmFyWS5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIiwgTWF0aC5yb3VuZCh0aGlzLmhlaWdodCAvIDMwKSk7XG5cdCAgICAgICAgdGhpcy5iYXJaLnNldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiLCBNYXRoLnJvdW5kKHRoaXMuaGVpZ2h0IC8gMzApKTtcblx0XG5cdCAgICAgICAgdGhpcy5iYXJYLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgXCJub25lXCIpO1xuXHQgICAgICAgIHRoaXMuYmFyWS5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIFwibm9uZVwiKTtcblx0ICAgICAgICB0aGlzLmJhclouc2V0QXR0cmlidXRlKFwiZmlsbFwiLCBcIm5vbmVcIik7XG5cdFxuXHQgICAgICAgIHRoaXMuYmFyWDIuc2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIsIE1hdGgucm91bmQodGhpcy5oZWlnaHQgLyAzMCkpO1xuXHQgICAgICAgIHRoaXMuYmFyWTIuc2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIsIE1hdGgucm91bmQodGhpcy5oZWlnaHQgLyAzMCkpO1xuXHQgICAgICAgIHRoaXMuYmFyWjIuc2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIsIE1hdGgucm91bmQodGhpcy5oZWlnaHQgLyAzMCkpO1xuXHRcblx0ICAgICAgICB0aGlzLmJhclgyLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgXCJub25lXCIpO1xuXHQgICAgICAgIHRoaXMuYmFyWTIuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCBcIm5vbmVcIik7XG5cdCAgICAgICAgdGhpcy5iYXJaMi5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIFwibm9uZVwiKTtcblx0XG5cdCAgICAgICAgdGhpcy50aXRsZS5zZXRBdHRyaWJ1dGUoXCJ4XCIsIHRoaXMud2lkdGggLyAyKTtcblx0ICAgICAgICB0aGlzLnRpdGxlLnNldEF0dHJpYnV0ZShcInlcIiwgdGhpcy5oZWlnaHQgLyAzICsgNyk7XG5cdCAgICAgICAgdGhpcy50aXRsZS5zZXRBdHRyaWJ1dGUoXCJmb250LXNpemVcIiwgXCIxNXB4XCIpO1xuXHQgICAgICAgIHRoaXMudGl0bGUuc2V0QXR0cmlidXRlKFwiZm9udC13ZWlnaHRcIiwgXCJib2xkXCIpO1xuXHQgICAgICAgIHRoaXMudGl0bGUuc2V0QXR0cmlidXRlKFwibGV0dGVyLXNwYWNpbmdcIiwgXCIycHhcIik7XG5cdCAgICAgICAgdGhpcy50aXRsZS5zZXRBdHRyaWJ1dGUoXCJvcGFjaXR5XCIsIFwiMC43XCIpO1xuXHQgICAgICAgIHRoaXMudGl0bGUuc2V0QXR0cmlidXRlKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIik7XG5cdCAgICAgICAgdGhpcy50aXRsZS50ZXh0Q29udGVudCA9IFwiVElMVFwiO1xuXHRcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5jaXJjbGVYKTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5jaXJjbGVZKTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5jaXJjbGVaKTtcblx0XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuYmFyWCk7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuYmFyWSk7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuYmFyWik7XG5cdFxuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmJhclgyKTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5iYXJZMik7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuYmFyWjIpO1xuXHRcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy50aXRsZSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjb2xvckludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY29sb3JJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcblx0ICAgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmNvbG9ycy5hY2NlbnQ7XG5cdCAgICAgICAgICB0aGlzLmNpcmNsZVguc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmNvbG9ycy5saWdodCk7XG5cdCAgICAgICAgICB0aGlzLmNpcmNsZVkuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmNvbG9ycy5saWdodCk7XG5cdCAgICAgICAgICB0aGlzLmNpcmNsZVouc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmNvbG9ycy5saWdodCk7XG5cdCAgICAgICAgICB0aGlzLmNpcmNsZVguc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIHRoaXMuY29sb3JzLmxpZ2h0KTtcblx0ICAgICAgICAgIHRoaXMuY2lyY2xlWS5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgdGhpcy5jb2xvcnMubGlnaHQpO1xuXHQgICAgICAgICAgdGhpcy5jaXJjbGVaLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCB0aGlzLmNvbG9ycy5saWdodCk7XG5cdCAgICAgICAgICB0aGlzLmJhclguc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIHRoaXMuY29sb3JzLmxpZ2h0KTtcblx0ICAgICAgICAgIHRoaXMuYmFyWS5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgdGhpcy5jb2xvcnMubGlnaHQpO1xuXHQgICAgICAgICAgdGhpcy5iYXJaLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCB0aGlzLmNvbG9ycy5saWdodCk7XG5cdCAgICAgICAgICB0aGlzLmJhclgyLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCB0aGlzLmNvbG9ycy5saWdodCk7XG5cdCAgICAgICAgICB0aGlzLmJhclkyLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCB0aGlzLmNvbG9ycy5saWdodCk7XG5cdCAgICAgICAgICB0aGlzLmJhcloyLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCB0aGlzLmNvbG9ycy5saWdodCk7XG5cdCAgICAgICAgICB0aGlzLnRpdGxlLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5jb2xvcnMubGlnaHQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5jb2xvcnMuZmlsbDtcblx0ICAgICAgICAgIHRoaXMuY2lyY2xlWC5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLm1lZGl1bUxpZ2h0KTtcblx0ICAgICAgICAgIHRoaXMuY2lyY2xlWS5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLm1lZGl1bUxpZ2h0KTtcblx0ICAgICAgICAgIHRoaXMuY2lyY2xlWi5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLm1lZGl1bUxpZ2h0KTtcblx0ICAgICAgICAgIHRoaXMuY2lyY2xlWC5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgdGhpcy5jb2xvcnMubWVkaXVtTGlnaHQpO1xuXHQgICAgICAgICAgdGhpcy5jaXJjbGVZLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCB0aGlzLmNvbG9ycy5tZWRpdW1MaWdodCk7XG5cdCAgICAgICAgICB0aGlzLmNpcmNsZVouc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIHRoaXMuY29sb3JzLm1lZGl1bUxpZ2h0KTtcblx0ICAgICAgICAgIHRoaXMuYmFyWC5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgdGhpcy5jb2xvcnMubWVkaXVtTGlnaHQpO1xuXHQgICAgICAgICAgdGhpcy5iYXJZLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCB0aGlzLmNvbG9ycy5tZWRpdW1MaWdodCk7XG5cdCAgICAgICAgICB0aGlzLmJhclouc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIHRoaXMuY29sb3JzLm1lZGl1bUxpZ2h0KTtcblx0ICAgICAgICAgIHRoaXMuYmFyWDIuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIHRoaXMuY29sb3JzLm1lZGl1bUxpZ2h0KTtcblx0ICAgICAgICAgIHRoaXMuYmFyWTIuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIHRoaXMuY29sb3JzLm1lZGl1bUxpZ2h0KTtcblx0ICAgICAgICAgIHRoaXMuYmFyWjIuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIHRoaXMuY29sb3JzLm1lZGl1bUxpZ2h0KTtcblx0ICAgICAgICAgIHRoaXMudGl0bGUuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmNvbG9ycy5tZWRpdW1MaWdodCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgdXBkYXRlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGUodikge1xuXHQgICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcblx0XG5cdCAgICAgICAgICB2YXIgeSA9IHYuYmV0YTtcblx0ICAgICAgICAgIHZhciB4ID0gdi5nYW1tYTtcblx0ICAgICAgICAgIHZhciB6ID0gdi5hbHBoYTtcblx0XG5cdCAgICAgICAgICAvLyB0YWtlIHRoZSBvcmlnaW5hbCAtOTAgdG8gOTAgc2NhbGUgYW5kIG5vcm1hbGl6ZSBpdCAwLTFcblx0ICAgICAgICAgIHggPSBtYXRoLnNjYWxlKHgsIC05MCwgOTAsIDAsIDEpO1xuXHQgICAgICAgICAgeSA9IG1hdGguc2NhbGUoeSwgLTkwLCA5MCwgMCwgMSk7XG5cdCAgICAgICAgICB6ID0gbWF0aC5zY2FsZSh6LCAwLCAzNjAsIDAsIDEpO1xuXHRcblx0ICAgICAgICAgIHZhciBoYW5kbGVQb2ludHMgPSB7XG5cdCAgICAgICAgICAgIHN0YXJ0OiBNYXRoLlBJICogMS41LFxuXHQgICAgICAgICAgICBlbmQ6IG1hdGguY2xpcChtYXRoLnNjYWxlKHgsIDAsIDAuNSwgTWF0aC5QSSAqIDEuNSwgTWF0aC5QSSAqIDAuNSksIE1hdGguUEkgKiAwLjUsIE1hdGguUEkgKiAxLjUpXG5cdCAgICAgICAgICB9O1xuXHQgICAgICAgICAgdmFyIGhhbmRsZTJQb2ludHMgPSB7XG5cdCAgICAgICAgICAgIHN0YXJ0OiBNYXRoLlBJICogMi41LFxuXHQgICAgICAgICAgICBlbmQ6IG1hdGguY2xpcChtYXRoLnNjYWxlKHgsIDAuNSwgMSwgTWF0aC5QSSAqIDIuNSwgTWF0aC5QSSAqIDEuNSksIE1hdGguUEkgKiAxLjUsIE1hdGguUEkgKiAyLjUpXG5cdCAgICAgICAgICB9O1xuXHRcblx0ICAgICAgICAgIHZhciBoYW5kbGVQYXRoID0gc3ZnLmFyYyh0aGlzLmNpcmNsZVguY3guYmFzZVZhbC52YWx1ZSwgdGhpcy5jaXJjbGVYLmN5LmJhc2VWYWwudmFsdWUsIHRoaXMuY2lyY2xlWC5yLmJhc2VWYWwudmFsdWUsIGhhbmRsZVBvaW50cy5zdGFydCwgaGFuZGxlUG9pbnRzLmVuZCk7XG5cdCAgICAgICAgICB2YXIgaGFuZGxlMlBhdGggPSBzdmcuYXJjKHRoaXMuY2lyY2xlWC5jeC5iYXNlVmFsLnZhbHVlLCB0aGlzLmNpcmNsZVguY3kuYmFzZVZhbC52YWx1ZSwgdGhpcy5jaXJjbGVYLnIuYmFzZVZhbC52YWx1ZSwgaGFuZGxlMlBvaW50cy5zdGFydCwgaGFuZGxlMlBvaW50cy5lbmQpO1xuXHRcblx0ICAgICAgICAgIHRoaXMuYmFyWC5zZXRBdHRyaWJ1dGUoXCJkXCIsIGhhbmRsZVBhdGgpO1xuXHQgICAgICAgICAgdGhpcy5iYXJYMi5zZXRBdHRyaWJ1dGUoXCJkXCIsIGhhbmRsZTJQYXRoKTtcblx0XG5cdCAgICAgICAgICBoYW5kbGVQb2ludHMgPSB7XG5cdCAgICAgICAgICAgIHN0YXJ0OiBNYXRoLlBJICogMS41LFxuXHQgICAgICAgICAgICBlbmQ6IG1hdGguY2xpcChtYXRoLnNjYWxlKHksIDAsIDAuNSwgTWF0aC5QSSAqIDEuNSwgTWF0aC5QSSAqIDAuNSksIE1hdGguUEkgKiAwLjUsIE1hdGguUEkgKiAxLjUpXG5cdCAgICAgICAgICB9O1xuXHQgICAgICAgICAgaGFuZGxlMlBvaW50cyA9IHtcblx0ICAgICAgICAgICAgc3RhcnQ6IE1hdGguUEkgKiAyLjUsXG5cdCAgICAgICAgICAgIGVuZDogbWF0aC5jbGlwKG1hdGguc2NhbGUoeSwgMC41LCAxLCBNYXRoLlBJICogMi41LCBNYXRoLlBJICogMS41KSwgTWF0aC5QSSAqIDEuNSwgTWF0aC5QSSAqIDIuNSlcblx0ICAgICAgICAgIH07XG5cdFxuXHQgICAgICAgICAgaGFuZGxlUGF0aCA9IHN2Zy5hcmModGhpcy5jaXJjbGVZLmN4LmJhc2VWYWwudmFsdWUsIHRoaXMuY2lyY2xlWS5jeS5iYXNlVmFsLnZhbHVlLCB0aGlzLmNpcmNsZVkuci5iYXNlVmFsLnZhbHVlLCBoYW5kbGVQb2ludHMuc3RhcnQsIGhhbmRsZVBvaW50cy5lbmQpO1xuXHQgICAgICAgICAgaGFuZGxlMlBhdGggPSBzdmcuYXJjKHRoaXMuY2lyY2xlWS5jeC5iYXNlVmFsLnZhbHVlLCB0aGlzLmNpcmNsZVkuY3kuYmFzZVZhbC52YWx1ZSwgdGhpcy5jaXJjbGVZLnIuYmFzZVZhbC52YWx1ZSwgaGFuZGxlMlBvaW50cy5zdGFydCwgaGFuZGxlMlBvaW50cy5lbmQpO1xuXHRcblx0ICAgICAgICAgIHRoaXMuYmFyWS5zZXRBdHRyaWJ1dGUoXCJkXCIsIGhhbmRsZVBhdGgpO1xuXHQgICAgICAgICAgdGhpcy5iYXJZMi5zZXRBdHRyaWJ1dGUoXCJkXCIsIGhhbmRsZTJQYXRoKTtcblx0XG5cdCAgICAgICAgICBoYW5kbGVQb2ludHMgPSB7XG5cdCAgICAgICAgICAgIHN0YXJ0OiBNYXRoLlBJICogMS41LFxuXHQgICAgICAgICAgICBlbmQ6IG1hdGguY2xpcChtYXRoLnNjYWxlKHosIDAsIDAuNSwgTWF0aC5QSSAqIDEuNSwgTWF0aC5QSSAqIDAuNSksIE1hdGguUEkgKiAwLjUsIE1hdGguUEkgKiAxLjUpXG5cdCAgICAgICAgICB9O1xuXHQgICAgICAgICAgaGFuZGxlMlBvaW50cyA9IHtcblx0ICAgICAgICAgICAgc3RhcnQ6IE1hdGguUEkgKiAyLjUsXG5cdCAgICAgICAgICAgIGVuZDogbWF0aC5jbGlwKG1hdGguc2NhbGUoeiwgMC41LCAxLCBNYXRoLlBJICogMi41LCBNYXRoLlBJICogMS41KSwgTWF0aC5QSSAqIDEuNSwgTWF0aC5QSSAqIDIuNSlcblx0ICAgICAgICAgIH07XG5cdFxuXHQgICAgICAgICAgaGFuZGxlUGF0aCA9IHN2Zy5hcmModGhpcy5jaXJjbGVaLmN4LmJhc2VWYWwudmFsdWUsIHRoaXMuY2lyY2xlWi5jeS5iYXNlVmFsLnZhbHVlLCB0aGlzLmNpcmNsZVouci5iYXNlVmFsLnZhbHVlLCBoYW5kbGVQb2ludHMuc3RhcnQsIGhhbmRsZVBvaW50cy5lbmQpO1xuXHQgICAgICAgICAgaGFuZGxlMlBhdGggPSBzdmcuYXJjKHRoaXMuY2lyY2xlWi5jeC5iYXNlVmFsLnZhbHVlLCB0aGlzLmNpcmNsZVouY3kuYmFzZVZhbC52YWx1ZSwgdGhpcy5jaXJjbGVaLnIuYmFzZVZhbC52YWx1ZSwgaGFuZGxlMlBvaW50cy5zdGFydCwgaGFuZGxlMlBvaW50cy5lbmQpO1xuXHRcblx0ICAgICAgICAgIHRoaXMuYmFyWi5zZXRBdHRyaWJ1dGUoXCJkXCIsIGhhbmRsZVBhdGgpO1xuXHQgICAgICAgICAgdGhpcy5iYXJaMi5zZXRBdHRyaWJ1dGUoXCJkXCIsIGhhbmRsZTJQYXRoKTtcblx0XG5cdCAgICAgICAgICAvKlxuXHQgICAgICAgICAgIGxldCBwb2ludHNYID0ge1xuXHQgICAgICAgICAgICBzdGFydDogMCxcblx0ICAgICAgICAgICAgZW5kOiBtYXRoLnNjYWxlKCB4LCAwLCAxLCAwLCBNYXRoLlBJKjIgKVxuXHQgICAgICAgICAgfTtcblx0ICAgICAgICAgIC8vICBjb25zb2xlLmxvZyh0aGlzLmNpcmNsZVguY3guYmFzZVZhbC52YWx1ZSk7XG5cdCAgICAgICAgICAgbGV0IHBhdGhYID0gc3ZnLmFyYyh0aGlzLmNpcmNsZVguY3guYmFzZVZhbC52YWx1ZSwgdGhpcy5jaXJjbGVYLmN5LmJhc2VWYWwudmFsdWUsIHRoaXMuY2lyY2xlWC5yLmJhc2VWYWwudmFsdWUqMiwgcG9pbnRzWC5zdGFydCwgcG9pbnRzWC5lbmQpO1xuXHQgICAgICAgICAgIHRoaXMuYmFyWC5zZXRBdHRyaWJ1dGUoJ2QnLHBhdGhYKTsgKi9cblx0XG5cdCAgICAgICAgICAvL3RoaXMudGV4dEgudGV4dENvbnRlbnQgPSBtYXRoLnBydW5lKHgsMik7XG5cdCAgICAgICAgICAvL3RoaXMudGV4dFYudGV4dENvbnRlbnQgPSBtYXRoLnBydW5lKHksMik7XG5cdCAgICAgICAgICAvL1xuXHQgICAgICAgICAgLy8gIHRoaXMuY2lyY2xlWC5zZXRBdHRyaWJ1dGUoJ29wYWNpdHknLHgpO1xuXHQgICAgICAgICAgLy8gIHRoaXMuY2lyY2xlWS5zZXRBdHRyaWJ1dGUoJ29wYWNpdHknLHkpO1xuXHQgICAgICAgICAgLy8gIHRoaXMuY2lyY2xlWi5zZXRBdHRyaWJ1dGUoJ29wYWNpdHknLHopO1xuXHRcblx0ICAgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB7XG5cdCAgICAgICAgICAgIHg6IHgsXG5cdCAgICAgICAgICAgIHk6IHksXG5cdCAgICAgICAgICAgIHo6IHpcblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNsaWNrOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGljaygpIHtcblx0ICAgICAgICBpZiAod2luZG93LkRldmljZU9yaWVudGF0aW9uRXZlbnQpIHtcblx0ICAgICAgICAgIHRoaXMuYWN0aXZlID0gIXRoaXMuYWN0aXZlO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGFjdGl2ZToge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFdoZXRoZXIgdGhlIGludGVyZmFjZSBpcyBvbiAoZW1pdHRpbmcgdmFsdWVzKSBvciBvZmYgKHBhdXNlZCAmIG5vdCBlbWl0dGluZyB2YWx1ZXMpLiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgd2lsbCB1cGRhdGUgaXQuXG5cdCAgICAgIEB0eXBlIHtib29sZWFufVxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAob24pIHtcblx0ICAgICAgICB0aGlzLl9hY3RpdmUgPSBvbjtcblx0ICAgICAgICB0aGlzLmNvbG9ySW50ZXJmYWNlKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjdXN0b21EZXN0cm95OiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjdXN0b21EZXN0cm95KCkge1xuXHQgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZGV2aWNlb3JpZW50YXRpb25cIiwgdGhpcy5ib3VuZFVwZGF0ZSwgZmFsc2UpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBUaWx0O1xuXHR9KShJbnRlcmZhY2UpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBUaWx0O1xuXG4vKioqLyB9KSxcbi8qIDMxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGtleSBpbiBwcm9wcykgeyB2YXIgcHJvcCA9IHByb3BzW2tleV07IHByb3AuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKHByb3AudmFsdWUpIHByb3Aud3JpdGFibGUgPSB0cnVlOyB9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpOyB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHR2YXIgX2dldCA9IGZ1bmN0aW9uIGdldChvYmplY3QsIHByb3BlcnR5LCByZWNlaXZlcikgeyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IHJldHVybiBnZXQocGFyZW50LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpOyB9IH0gZWxzZSBpZiAoXCJ2YWx1ZVwiIGluIGRlc2MgJiYgZGVzYy53cml0YWJsZSkgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH07XG5cdFxuXHR2YXIgX2luaGVyaXRzID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH07XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH07XG5cdFxuXHR2YXIgZG9tID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcblx0dmFyIG1hdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xuXHR2YXIgSW50ZXJmYWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcblx0dmFyIFNsaWRlclRlbXBsYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XG5cdHZhciB0b3VjaCA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG5cdFxuXHR2YXIgU2luZ2xlU2xpZGVyID0gKGZ1bmN0aW9uIChfU2xpZGVyVGVtcGxhdGUpIHtcblx0ICBmdW5jdGlvbiBTaW5nbGVTbGlkZXIoKSB7XG5cdCAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXHRcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTaW5nbGVTbGlkZXIpO1xuXHRcblx0ICAgIHZhciBvcHRpb25zID0gW1wic2NhbGVcIiwgXCJ2YWx1ZVwiXTtcblx0XG5cdCAgICB2YXIgZGVmYXVsdHMgPSB7XG5cdCAgICAgIHNpemU6IFsxMjAsIDIwXSxcblx0ICAgICAgb3JpZW50YXRpb246IFwidmVydGljYWxcIixcblx0ICAgICAgbW9kZTogXCJhYnNvbHV0ZVwiLFxuXHQgICAgICBzY2FsZTogWzAsIDFdLFxuXHQgICAgICBzdGVwOiAwLFxuXHQgICAgICB2YWx1ZTogMCxcblx0ICAgICAgaGFzS25vYjogdHJ1ZVxuXHQgICAgfTtcblx0XG5cdCAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihTaW5nbGVTbGlkZXIucHJvdG90eXBlKSwgXCJjb25zdHJ1Y3RvclwiLCB0aGlzKS5jYWxsKHRoaXMsIGFyZ3VtZW50cywgb3B0aW9ucywgZGVmYXVsdHMpO1xuXHRcblx0ICAgIC8qIGV2ZW50cyAqL1xuXHRcblx0ICAgIGlmICghdG91Y2guZXhpc3RzKSB7XG5cdFxuXHQgICAgICB0aGlzLmNsaWNrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIF90aGlzLm11bHRpc2xpZGVyLmludGVyYWN0aW5nID0gdHJ1ZTtcblx0ICAgICAgICBfdGhpcy5tdWx0aXNsaWRlci5pbnRlcnBvbGF0aW9uID0ge1xuXHQgICAgICAgICAgaW5kZXg6IF90aGlzLmluZGV4LFxuXHQgICAgICAgICAgdmFsdWU6IF90aGlzLnZhbHVlXG5cdCAgICAgICAgfTtcblx0ICAgICAgICBfdGhpcy5kb3duKCk7XG5cdCAgICAgICAgX3RoaXMubXVsdGlzbGlkZXIudmFsdWVzW190aGlzLmluZGV4XSA9IF90aGlzLnZhbHVlO1xuXHQgICAgICB9O1xuXHQgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgIGlmIChfdGhpcy5tdWx0aXNsaWRlci5pbnRlcmFjdGluZykge1xuXHQgICAgICAgICAgaWYgKCFfdGhpcy5vZmZzZXQpIHtcblx0ICAgICAgICAgICAgX3RoaXMub2Zmc2V0ID0gZG9tLmZpbmRQb3NpdGlvbihfdGhpcy5lbGVtZW50KTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIF90aGlzLm1vdXNlID0gZG9tLmxvY2F0ZU1vdXNlKGUsIF90aGlzLm9mZnNldCk7XG5cdCAgICAgICAgICBfdGhpcy5kb3duKCk7XG5cdCAgICAgICAgICBfdGhpcy5tdWx0aXNsaWRlci52YWx1ZXNbX3RoaXMuaW5kZXhdID0gX3RoaXMudmFsdWU7XG5cdCAgICAgICAgICBpZiAoX3RoaXMubXVsdGlzbGlkZXIuaW50ZXJwb2xhdGlvbikge1xuXHQgICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSBNYXRoLmFicyhfdGhpcy5tdWx0aXNsaWRlci5pbnRlcnBvbGF0aW9uLmluZGV4IC0gX3RoaXMuaW5kZXgpO1xuXHQgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPiAxKSB7XG5cdCAgICAgICAgICAgICAgdmFyIGxvdyA9IE1hdGgubWluKF90aGlzLm11bHRpc2xpZGVyLmludGVycG9sYXRpb24uaW5kZXgsIF90aGlzLmluZGV4KTtcblx0ICAgICAgICAgICAgICB2YXIgaGlnaCA9IE1hdGgubWF4KF90aGlzLm11bHRpc2xpZGVyLmludGVycG9sYXRpb24uaW5kZXgsIF90aGlzLmluZGV4KTtcblx0ICAgICAgICAgICAgICB2YXIgbG93VmFsdWUgPSBfdGhpcy5tdWx0aXNsaWRlci5zbGlkZXJzW2xvd10udmFsdWU7XG5cdCAgICAgICAgICAgICAgdmFyIGhpZ2hWYWx1ZSA9IF90aGlzLm11bHRpc2xpZGVyLnNsaWRlcnNbaGlnaF0udmFsdWU7XG5cdCAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IGxvdzsgaSA8IGhpZ2g7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgX3RoaXMubXVsdGlzbGlkZXIuc2xpZGVyc1tpXS52YWx1ZSA9IG1hdGguaW50ZXJwKChpIC0gbG93KSAvIGRpc3RhbmNlLCBsb3dWYWx1ZSwgaGlnaFZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIHZhciBzbW9vdGhlZFZhbHVlID0gX3RoaXMubXVsdGlzbGlkZXIuc2xpZGVyc1tpXS52YWx1ZTtcblx0ICAgICAgICAgICAgICAgIF90aGlzLm11bHRpc2xpZGVyLnZhbHVlc1tpXSA9IHNtb290aGVkVmFsdWU7XG5cdCAgICAgICAgICAgICAgICBfdGhpcy5tdWx0aXNsaWRlci51cGRhdGUoaSwgc21vb3RoZWRWYWx1ZSk7XG5cdCAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9XG5cdFxuXHQgICAgICAgICAgX3RoaXMubXVsdGlzbGlkZXIuaW50ZXJwb2xhdGlvbiA9IHtcblx0ICAgICAgICAgICAgaW5kZXg6IF90aGlzLmluZGV4LFxuXHQgICAgICAgICAgICB2YWx1ZTogX3RoaXMudmFsdWVcblx0ICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgICB9KTtcblx0XG5cdCAgICAgIHRoaXMubW92ZSA9IGZ1bmN0aW9uICgpIHt9O1xuXHQgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgIGlmIChfdGhpcy5tdWx0aXNsaWRlci5pbnRlcmFjdGluZykge1xuXHQgICAgICAgICAgaWYgKCFfdGhpcy5vZmZzZXQpIHtcblx0ICAgICAgICAgICAgX3RoaXMub2Zmc2V0ID0gZG9tLmZpbmRQb3NpdGlvbihfdGhpcy5lbGVtZW50KTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIF90aGlzLm1vdXNlID0gZG9tLmxvY2F0ZU1vdXNlKGUsIF90aGlzLm9mZnNldCk7XG5cdCAgICAgICAgICBfdGhpcy5zbGlkZSgpO1xuXHQgICAgICAgICAgX3RoaXMubXVsdGlzbGlkZXIudmFsdWVzW190aGlzLmluZGV4XSA9IF90aGlzLnZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdFxuXHQgICAgICB0aGlzLnJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgX3RoaXMubXVsdGlzbGlkZXIuaW50ZXJhY3RpbmcgPSBmYWxzZTtcblx0ICAgICAgICBfdGhpcy5tdWx0aXNsaWRlci5pbnRlcnBvbGF0aW9uID0gZmFsc2U7XG5cdCAgICAgIH07XG5cdCAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKF90aGlzLm11bHRpc2xpZGVyLmludGVyYWN0aW5nKSB7XG5cdCAgICAgICAgICBfdGhpcy51cCgpO1xuXHQgICAgICAgICAgX3RoaXMubXVsdGlzbGlkZXIuaW50ZXJwb2xhdGlvbiA9IGZhbHNlO1xuXHQgICAgICAgICAgX3RoaXMubXVsdGlzbGlkZXIudmFsdWVzW190aGlzLmluZGV4XSA9IF90aGlzLnZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdXRcIiwgZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChfdGhpcy5tdWx0aXNsaWRlci5pbnRlcmFjdGluZykge1xuXHQgICAgICAgICAgX3RoaXMudXAoKTtcblx0ICAgICAgICAgIF90aGlzLm11bHRpc2xpZGVyLnZhbHVlc1tfdGhpcy5pbmRleF0gPSBfdGhpcy52YWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXHRcblx0ICAgIHRoaXMuY3VzdG9tU3R5bGUoKTtcblx0ICB9XG5cdFxuXHQgIF9pbmhlcml0cyhTaW5nbGVTbGlkZXIsIF9TbGlkZXJUZW1wbGF0ZSk7XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhTaW5nbGVTbGlkZXIsIHtcblx0ICAgIGN1c3RvbVN0eWxlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjdXN0b21TdHlsZSgpIHtcblx0XG5cdCAgICAgICAgLyogc3R5bGUgY2hhbmdlcyAqL1xuXHRcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJ4XCIsIDApO1xuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZSgwLDApXCIpO1xuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcInJ4XCIsIDApOyAvLyBjb3JuZXIgcmFkaXVzXG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwicnlcIiwgMCk7XG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgdGhpcy53aWR0aCk7XG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIHRoaXMuaGVpZ2h0KTtcblx0XG5cdCAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcInhcIiwgMCk7XG5cdCAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZSgwLDApXCIpO1xuXHQgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJyeFwiLCAwKTsgLy8gY29ybmVyIHJhZGl1c1xuXHQgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJyeVwiLCAwKTtcblx0ICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgdGhpcy53aWR0aCk7XG5cdCAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCB0aGlzLmhlaWdodCk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIFNpbmdsZVNsaWRlcjtcblx0fSkoU2xpZGVyVGVtcGxhdGUpO1xuXHRcblx0LyoqXG5cdCogTXVsdGlzbGlkZXJcblx0KlxuXHQqIEBkZXNjcmlwdGlvbiBNdWx0aXNsaWRlclxuXHQqXG5cdCogQGRlbW8gPHNwYW4gbmV4dXMtdWk9XCJtdWx0aXNsaWRlclwiPjwvc3Bhbj5cblx0KlxuXHQqIEBleGFtcGxlXG5cdCogdmFyIG11bHRpc2xpZGVyID0gbmV3IE5leHVzLk11bHRpc2xpZGVyKCcjdGFyZ2V0Jylcblx0KlxuXHQqIEBleGFtcGxlXG5cdCogdmFyIG11bHRpc2xpZGVyID0gbmV3IE5leHVzLk11bHRpc2xpZGVyKCcjdGFyZ2V0Jyx7XG5cdCogICdzaXplJzogWzIwMCwxMDBdLFxuXHQqICAnbnVtYmVyT2ZTbGlkZXJzJzogNSxcblx0KiAgJ21pbic6IDAsXG5cdCogICdtYXgnOiAxLFxuXHQqICAnc3RlcCc6IDAsXG5cdCogICd2YWx1ZXMnOiBbMC43LDAuNywwLjcsMC43LDAuN11cblx0KiB9KVxuXHQqXG5cdCogQG91dHB1dFxuXHQqIGNoYW5nZVxuXHQqIEZpcmVzIGFueSB0aW1lIHRoZSBpbnRlcmZhY2UncyB2YWx1ZSBjaGFuZ2VzLiA8YnI+XG5cdCogVGhlIGV2ZW50IGRhdGEgYW4gb2JqZWN0IGNvbnRhaW5pbmcgPGk+aW5kZXg8L2k+IGFuZCA8aT52YWx1ZTwvaT4gcHJvcGVydGllc1xuXHQqXG5cdCogQG91dHB1dGV4YW1wbGVcblx0KiBtdWx0aXNsaWRlci5vbignY2hhbmdlJyxmdW5jdGlvbih2KSB7XG5cdCogICBjb25zb2xlLmxvZyh2KTtcblx0KiB9KVxuXHQqXG5cdCovXG5cdFxuXHQvKlxuXHRQcm9wZXJ0aWVzXG5cdC52YWx1ZXNcblx0XG5cdCovXG5cdFxuXHR2YXIgTXVsdGlzbGlkZXIgPSAoZnVuY3Rpb24gKF9JbnRlcmZhY2UpIHtcblx0ICBmdW5jdGlvbiBNdWx0aXNsaWRlcigpIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBNdWx0aXNsaWRlcik7XG5cdFxuXHQgICAgdmFyIG9wdGlvbnMgPSBbXCJ2YWx1ZVwiXTtcblx0XG5cdCAgICB2YXIgZGVmYXVsdHMgPSB7XG5cdCAgICAgIHNpemU6IFsyMDAsIDEwMF0sXG5cdCAgICAgIG51bWJlck9mU2xpZGVyczogNSxcblx0ICAgICAgbWluOiAwLFxuXHQgICAgICBtYXg6IDEsXG5cdCAgICAgIHN0ZXA6IDAsXG5cdCAgICAgIHZhbHVlczogWzAuNywgMC43LCAwLjcsIDAuNywgMC43XVxuXHQgICAgfTtcblx0XG5cdCAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihNdWx0aXNsaWRlci5wcm90b3R5cGUpLCBcImNvbnN0cnVjdG9yXCIsIHRoaXMpLmNhbGwodGhpcywgYXJndW1lbnRzLCBvcHRpb25zLCBkZWZhdWx0cyk7XG5cdFxuXHQgICAgdGhpcy5fbnVtYmVyT2ZTbGlkZXJzID0gdGhpcy5zZXR0aW5ncy5udW1iZXJPZlNsaWRlcnM7XG5cdCAgICB0aGlzLnZhbHVlcyA9IHRoaXMuc2V0dGluZ3MudmFsdWVzO1xuXHRcblx0ICAgIHRoaXMuc2xpZGVycyA9IFtdO1xuXHRcblx0ICAgIHRoaXMuaW50ZXJhY3RpbmcgPSBmYWxzZTtcblx0XG5cdCAgICB0aGlzLmluaXQoKTtcblx0ICB9XG5cdFxuXHQgIF9pbmhlcml0cyhNdWx0aXNsaWRlciwgX0ludGVyZmFjZSk7XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhNdWx0aXNsaWRlciwge1xuXHQgICAgYnVpbGRGcmFtZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRGcmFtZSgpIHtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHQgICAgICAgIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBidWlsZEludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIHZhciBtaW4gPSB0aGlzLnNldHRpbmdzLm1pbjtcblx0ICAgICAgICB2YXIgbWF4ID0gdGhpcy5zZXR0aW5ncy5tYXg7XG5cdCAgICAgICAgdmFyIHN0ZXAgPSB0aGlzLnNldHRpbmdzLnN0ZXA7XG5cdFxuXHQgICAgICAgIGlmICh0aGlzLnNsaWRlcnMubGVuZ3RoKSB7XG5cdCAgICAgICAgICBtaW4gPSB0aGlzLnNsaWRlcnNbMF0ubWluO1xuXHQgICAgICAgICAgbWF4ID0gdGhpcy5zbGlkZXJzWzBdLm1heDtcblx0ICAgICAgICAgIHN0ZXAgPSB0aGlzLnNsaWRlcnNbMF0uc3RlcDtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIHRoaXMuc2xpZGVycyA9IFtdO1xuXHRcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX251bWJlck9mU2xpZGVyczsgaSsrKSB7XG5cdCAgICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG5cdFxuXHQgICAgICAgICAgdmFyIHNsaWRlciA9IG5ldyBTaW5nbGVTbGlkZXIoY29udGFpbmVyLCB7XG5cdCAgICAgICAgICAgIHNjYWxlOiBbbWluLCBtYXhdLFxuXHQgICAgICAgICAgICBzdGVwOiBzdGVwLFxuXHQgICAgICAgICAgICBtb2RlOiBcImFic29sdXRlXCIsXG5cdCAgICAgICAgICAgIG9yaWVudGF0aW9uOiBcInZlcnRpY2FsXCIsXG5cdCAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlc1tpXSxcblx0ICAgICAgICAgICAgaGFzS25vYjogZmFsc2UsXG5cdCAgICAgICAgICAgIGNvbXBvbmVudDogdHJ1ZSB9LCB0aGlzLnVwZGF0ZS5iaW5kKHRoaXMsIGkpKTtcblx0ICAgICAgICAgIHNsaWRlci5tdWx0aXNsaWRlciA9IHRoaXM7XG5cdFxuXHQgICAgICAgICAgc2xpZGVyLmluZGV4ID0gaTtcblx0ICAgICAgICAgIGlmICh0b3VjaC5leGlzdHMpIHtcblx0ICAgICAgICAgICAgc2xpZGVyLmJhci5pbmRleCA9IGk7XG5cdCAgICAgICAgICAgIHNsaWRlci5maWxsYmFyLmluZGV4ID0gaTtcblx0ICAgICAgICAgICAgc2xpZGVyLnByZUNsaWNrID0gc2xpZGVyLnByZU1vdmUgPSBzbGlkZXIucHJlUmVsZWFzZSA9IGZ1bmN0aW9uICgpIHt9O1xuXHQgICAgICAgICAgICBzbGlkZXIuY2xpY2sgPSBzbGlkZXIubW92ZSA9IHNsaWRlci5yZWxlYXNlID0gZnVuY3Rpb24gKCkge307XG5cdCAgICAgICAgICAgIHNsaWRlci5wcmVUb3VjaCA9IHNsaWRlci5wcmVUb3VjaE1vdmUgPSBzbGlkZXIucHJlVG91Y2hSZWxlYXNlID0gZnVuY3Rpb24gKCkge307XG5cdCAgICAgICAgICAgIHNsaWRlci50b3VjaCA9IHNsaWRlci50b3VjaE1vdmUgPSBzbGlkZXIudG91Y2hSZWxlYXNlID0gZnVuY3Rpb24gKCkge307XG5cdCAgICAgICAgICB9XG5cdFxuXHQgICAgICAgICAgdGhpcy5zbGlkZXJzLnB1c2goc2xpZGVyKTtcblx0ICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodG91Y2guZXhpc3RzKSB7XG5cdCAgICAgICAgICB0aGlzLmFkZFRvdWNoTGlzdGVuZXJzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29sb3JJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbG9ySW50ZXJmYWNlKCkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zbGlkZXJzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICB0aGlzLnNsaWRlcnNbaV0uY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cdCAgICAgICAgICB0aGlzLnNsaWRlcnNbaV0uY29sb3JJbnRlcmZhY2UoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzaXplSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaXplSW50ZXJmYWNlKCkge1xuXHRcblx0ICAgICAgICB2YXIgc2xpZGVyV2lkdGggPSB0aGlzLndpZHRoIC8gdGhpcy5zbGlkZXJzLmxlbmd0aDtcblx0ICAgICAgICB2YXIgc2xpZGVySGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cdFxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zbGlkZXJzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICB0aGlzLnNsaWRlcnNbaV0ucmVzaXplKHNsaWRlcldpZHRoLCBzbGlkZXJIZWlnaHQpO1xuXHQgICAgICAgICAgdGhpcy5zbGlkZXJzW2ldLmN1c3RvbVN0eWxlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgdXBkYXRlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGUoaW5kZXgsIHZhbHVlKSB7XG5cdCAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHtcblx0ICAgICAgICAgIGluZGV4OiBpbmRleCxcblx0ICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgYWRkVG91Y2hMaXN0ZW5lcnM6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFRvdWNoTGlzdGVuZXJzKCkge1xuXHQgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cdFxuXHQgICAgICAgIHRoaXMucHJlQ2xpY2sgPSB0aGlzLnByZU1vdmUgPSB0aGlzLnByZVJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7fTtcblx0ICAgICAgICB0aGlzLmNsaWNrID0gdGhpcy5tb3ZlID0gdGhpcy5yZWxlYXNlID0gZnVuY3Rpb24gKCkge307XG5cdCAgICAgICAgdGhpcy5wcmVUb3VjaCA9IHRoaXMucHJlVG91Y2hNb3ZlID0gdGhpcy5wcmVUb3VjaFJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7fTtcblx0ICAgICAgICB0aGlzLnRvdWNoID0gdGhpcy50b3VjaE1vdmUgPSB0aGlzLnRvdWNoUmVsZWFzZSA9IGZ1bmN0aW9uICgpIHt9O1xuXHRcblx0ICAgICAgICB0aGlzLmN1cnJlbnRFbGVtZW50ID0gZmFsc2U7XG5cdFxuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLCBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGUudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRYLCBlLnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WSk7XG5cdCAgICAgICAgICB2YXIgc2xpZGVyID0gX3RoaXMuc2xpZGVyc1tlbGVtZW50LmluZGV4XTtcblx0ICAgICAgICAgIGlmICghc2xpZGVyLm9mZnNldCkge1xuXHQgICAgICAgICAgICBzbGlkZXIub2Zmc2V0ID0gZG9tLmZpbmRQb3NpdGlvbihzbGlkZXIuZWxlbWVudCk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgICBzbGlkZXIubW91c2UgPSBkb20ubG9jYXRlTW91c2UoZSwgc2xpZGVyLm9mZnNldCk7XG5cdCAgICAgICAgICBzbGlkZXIuZG93bigpO1xuXHQgICAgICAgICAgX3RoaXMuY3VycmVudEVsZW1lbnQgPSBlbGVtZW50LmluZGV4O1xuXHQgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0ICAgICAgICB9KTtcblx0XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WCwgZS50YXJnZXRUb3VjaGVzWzBdLmNsaWVudFkpO1xuXHQgICAgICAgICAgdmFyIHNsaWRlciA9IF90aGlzLnNsaWRlcnNbZWxlbWVudC5pbmRleF07XG5cdCAgICAgICAgICBpZiAoIXNsaWRlci5vZmZzZXQpIHtcblx0ICAgICAgICAgICAgc2xpZGVyLm9mZnNldCA9IGRvbS5maW5kUG9zaXRpb24oc2xpZGVyLmVsZW1lbnQpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgc2xpZGVyLm1vdXNlID0gZG9tLmxvY2F0ZU1vdXNlKGUsIHNsaWRlci5vZmZzZXQpO1xuXHQgICAgICAgICAgaWYgKGVsZW1lbnQuaW5kZXggIT09IF90aGlzLmN1cnJlbnRFbGVtZW50KSB7XG5cdCAgICAgICAgICAgIGlmIChfdGhpcy5jdXJyZW50RWxlbWVudCA+PSAwKSB7XG5cdCAgICAgICAgICAgICAgdmFyIHBhc3RzbGlkZXIgPSBfdGhpcy5zbGlkZXJzW190aGlzLmN1cnJlbnRFbGVtZW50XTtcblx0ICAgICAgICAgICAgICBwYXN0c2xpZGVyLnVwKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgc2xpZGVyLmRvd24oKTtcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHNsaWRlci5zbGlkZSgpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgX3RoaXMuY3VycmVudEVsZW1lbnQgPSBlbGVtZW50LmluZGV4O1xuXHQgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0ICAgICAgICB9KTtcblx0XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgLy8gbm8gdG91Y2hlcyB0byBjYWxjdWxhdGUgYmVjYXVzZSBub25lIHJlbWFpbmluZ1xuXHQgICAgICAgICAgdmFyIHNsaWRlciA9IF90aGlzLnNsaWRlcnNbX3RoaXMuY3VycmVudEVsZW1lbnRdO1xuXHQgICAgICAgICAgc2xpZGVyLnVwKCk7XG5cdCAgICAgICAgICBfdGhpcy5pbnRlcmFjdGluZyA9IGZhbHNlO1xuXHQgICAgICAgICAgX3RoaXMuY3VycmVudEVsZW1lbnQgPSBmYWxzZTtcblx0ICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblx0ICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBudW1iZXJPZlNsaWRlcnM6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBHZXQgb3Igc2V0IHRoZSBudW1iZXIgb2Ygc2xpZGVyc1xuXHQgICAgICBAdHlwZSB7TnVtYmVyfVxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVycy5sZW5ndGg7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICBpZiAodiA9PT0gdGhpcy5zbGlkZXJzLmxlbmd0aCkge1xuXHQgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLnNsaWRlcnMuZm9yRWFjaChmdW5jdGlvbiAoc2xpZGVyKSB7XG5cdCAgICAgICAgICBzbGlkZXIuZGVzdHJveSgpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuZW1wdHkoKTtcblx0ICAgICAgICB0aGlzLl9udW1iZXJPZlNsaWRlcnMgPSB2O1xuXHQgICAgICAgIHRoaXMuYnVpbGRJbnRlcmZhY2UoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1pbjoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIExvd2VyIGxpbWl0IG9mIHRoZSBtdWx0aXNsaWRlcidzIG91dHB1dCByYW5nZVxuXHQgICAgICBAdHlwZSB7bnVtYmVyfVxuXHQgICAgICBAZXhhbXBsZSBtdWx0aXNsaWRlci5taW4gPSAxMDAwO1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVyc1swXS5taW47XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLnNsaWRlcnMuZm9yRWFjaChmdW5jdGlvbiAoc2xpZGVyKSB7XG5cdCAgICAgICAgICBzbGlkZXIubWluID0gdjtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1heDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFVwcGVyIGxpbWl0IG9mIHRoZSBtdWx0aXNsaWRlcidzIG91dHB1dCByYW5nZVxuXHQgICAgICBAdHlwZSB7bnVtYmVyfVxuXHQgICAgICBAZXhhbXBsZSBtdWx0aXNsaWRlci5tYXggPSAxMDAwO1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVyc1swXS5tYXg7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLnNsaWRlcnMuZm9yRWFjaChmdW5jdGlvbiAoc2xpZGVyKSB7XG5cdCAgICAgICAgICBzbGlkZXIubWF4ID0gdjtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHN0ZXA6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBUaGUgaW5jcmVtZW50IHRoYXQgdGhlIG11bHRpc2xpZGVyJ3MgdmFsdWUgY2hhbmdlcyBieS5cblx0ICAgICAgQHR5cGUge251bWJlcn1cblx0ICAgICAgQGV4YW1wbGUgbXVsdGlzbGlkZXIuc3RlcCA9IDU7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5zbGlkZXJzWzBdLnN0ZXA7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLnNsaWRlcnMuZm9yRWFjaChmdW5jdGlvbiAoc2xpZGVyKSB7XG5cdCAgICAgICAgICBzbGlkZXIuc3RlcCA9IHY7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzZXRTbGlkZXI6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBTZXQgdGhlIHZhbHVlIG9mIGFuIGluZGl2aWR1YWwgc2xpZGVyXG5cdCAgICAgIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBTbGlkZXIgaW5kZXhcblx0ICAgICAgQHBhcmFtIHZhbHVlIHtudW1iZXJ9IE5ldyBzbGlkZXIgdmFsdWVcblx0ICAgICAgQGV4YW1wbGVcblx0ICAgICAgLy8gU2V0IHRoZSBmaXJzdCBzbGlkZXIgdG8gdmFsdWUgMC41XG5cdCAgICAgIG11bHRpc2xpZGVyLnNldFNsaWRlcigwLDAuNSlcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRTbGlkZXIoaW5kZXgsIHZhbHVlKSB7XG5cdCAgICAgICAgdGhpcy5zbGlkZXJzW2luZGV4XS52YWx1ZSA9IHZhbHVlO1xuXHQgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB7XG5cdCAgICAgICAgICBpbmRleDogaW5kZXgsXG5cdCAgICAgICAgICB2YWx1ZTogdmFsdWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNldEFsbFNsaWRlcnM6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBTZXQgdGhlIHZhbHVlIG9mIGFsbCBzbGlkZXJzIGF0IG9uY2UuIElmIHRoZSBzaXplIG9mIHRoZSBpbnB1dCBhcnJheSBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCBudW1iZXIgb2Ygc2xpZGVycywgdGhlIHZhbHVlIGFycmF5IHdpbGwgcmVwZWF0IHVudGlsIGFsbCBzbGlkZXJzIGhhdmUgYmVlbiBzZXQuIEkuZS4gYW4gaW5wdXQgYXJyYXkgb2YgbGVuZ3RoIDEgd2lsbCBzZXQgYWxsIHNsaWRlcnMgdG8gdGhhdCB2YWx1ZS5cblx0ICAgICAgQHBhcmFtIHZhbHVlcyB7QXJyYXl9IEFsbCBzbGlkZXIgdmFsdWVzXG5cdCAgICAgIEBleGFtcGxlXG5cdCAgICAgIG11bHRpc2xpZGVyLnNldEFsbFNsaWRlcnMoWzAuMiwwLjMsMC40LDAuNSwwLjZdKVxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldEFsbFNsaWRlcnModmFsdWVzKSB7XG5cdCAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblx0XG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSB2YWx1ZXM7XG5cdCAgICAgICAgdGhpcy5zbGlkZXJzLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlciwgaSkge1xuXHQgICAgICAgICAgc2xpZGVyLnZhbHVlID0gdmFsdWVzW2kgJSB2YWx1ZXMubGVuZ3RoXTtcblx0ICAgICAgICAgIF90aGlzLmVtaXQoXCJjaGFuZ2VcIiwge1xuXHQgICAgICAgICAgICBpbmRleDogaSxcblx0ICAgICAgICAgICAgdmFsdWU6IHNsaWRlci52YWx1ZVxuXHQgICAgICAgICAgfSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIE11bHRpc2xpZGVyO1xuXHR9KShJbnRlcmZhY2UpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBNdWx0aXNsaWRlcjtcblxuLyoqKi8gfSksXG4vKiAzMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH07XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGtleSBpbiBwcm9wcykgeyB2YXIgcHJvcCA9IHByb3BzW2tleV07IHByb3AuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKHByb3AudmFsdWUpIHByb3Aud3JpdGFibGUgPSB0cnVlOyB9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpOyB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHR2YXIgX2dldCA9IGZ1bmN0aW9uIGdldChvYmplY3QsIHByb3BlcnR5LCByZWNlaXZlcikgeyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IHJldHVybiBnZXQocGFyZW50LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpOyB9IH0gZWxzZSBpZiAoXCJ2YWx1ZVwiIGluIGRlc2MgJiYgZGVzYy53cml0YWJsZSkgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH07XG5cdFxuXHR2YXIgX2luaGVyaXRzID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH07XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH07XG5cdFxuXHR2YXIgc3ZnID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblx0dmFyIEludGVyZmFjZSA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5cdHZhciBTdGVwID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG5cdFxuXHR2YXIgSW50ZXJhY3Rpb24gPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKSk7XG5cdFxuXHR2YXIgU2xpZGVyVGVtcGxhdGUgPSAoZnVuY3Rpb24gKF9JbnRlcmZhY2UpIHtcblx0ICBmdW5jdGlvbiBTbGlkZXJUZW1wbGF0ZShhcmdzLCBvcHRpb25zLCBkZWZhdWx0cykge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNsaWRlclRlbXBsYXRlKTtcblx0XG5cdCAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihTbGlkZXJUZW1wbGF0ZS5wcm90b3R5cGUpLCBcImNvbnN0cnVjdG9yXCIsIHRoaXMpLmNhbGwodGhpcywgYXJncywgb3B0aW9ucywgZGVmYXVsdHMpO1xuXHRcblx0ICAgIHRoaXMub3JpZW50YXRpb24gPSB0aGlzLnNldHRpbmdzLm9yaWVudGF0aW9uO1xuXHRcblx0ICAgIC8vICB0aGlzLm1vZGUgPSB0aGlzLnNldHRpbmdzLm1vZGU7XG5cdFxuXHQgICAgdGhpcy5oYXNLbm9iID0gdGhpcy5zZXR0aW5ncy5oYXNLbm9iO1xuXHRcblx0ICAgIC8vIHRoaXMuc3RlcCBzaG91bGQgZXZlbnR1YWxseSBiZSBnZXQvc2V0XG5cdCAgICAvLyB1cGRhdGluZyBpdCB3aWxsIHVwZGF0ZSB0aGUgX3ZhbHVlIHN0ZXAgbW9kZWxcblx0ICAgIC8vICB0aGlzLnN0ZXAgPSB0aGlzLnNldHRpbmdzLnN0ZXA7IC8vIGZsb2F0XG5cdFxuXHQgICAgdGhpcy5fdmFsdWUgPSBuZXcgU3RlcCh0aGlzLnNldHRpbmdzLnNjYWxlWzBdLCB0aGlzLnNldHRpbmdzLnNjYWxlWzFdLCB0aGlzLnNldHRpbmdzLnN0ZXAsIHRoaXMuc2V0dGluZ3MudmFsdWUpO1xuXHRcblx0ICAgIHRoaXMuaW5pdCgpO1xuXHRcblx0ICAgIHRoaXMucG9zaXRpb24gPSBuZXcgSW50ZXJhY3Rpb24uSGFuZGxlKHRoaXMuc2V0dGluZ3MubW9kZSwgdGhpcy5vcmllbnRhdGlvbiwgWzAsIHRoaXMud2lkdGhdLCBbdGhpcy5oZWlnaHQsIDBdKTtcblx0ICAgIHRoaXMucG9zaXRpb24udmFsdWUgPSB0aGlzLl92YWx1ZS5ub3JtYWxpemVkO1xuXHRcblx0ICAgIHRoaXMudmFsdWUgPSB0aGlzLl92YWx1ZS52YWx1ZTtcblx0XG5cdCAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwgdGhpcy52YWx1ZSk7XG5cdCAgfVxuXHRcblx0ICBfaW5oZXJpdHMoU2xpZGVyVGVtcGxhdGUsIF9JbnRlcmZhY2UpO1xuXHRcblx0ICBfY3JlYXRlQ2xhc3MoU2xpZGVyVGVtcGxhdGUsIHtcblx0ICAgIGJ1aWxkSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgdGhpcy5iYXIgPSBzdmcuY3JlYXRlKFwicmVjdFwiKTtcblx0ICAgICAgICB0aGlzLmZpbGxiYXIgPSBzdmcuY3JlYXRlKFwicmVjdFwiKTtcblx0ICAgICAgICB0aGlzLmtub2IgPSBzdmcuY3JlYXRlKFwiY2lyY2xlXCIpO1xuXHRcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5iYXIpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmZpbGxiYXIpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmtub2IpO1xuXHRcblx0ICAgICAgICB0aGlzLnNpemVJbnRlcmZhY2UoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNpemVJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNpemVJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIGlmICghdGhpcy5zZXR0aW5ncy5vcmllbnRhdGlvbikge1xuXHQgICAgICAgICAgaWYgKHRoaXMud2lkdGggPCB0aGlzLmhlaWdodCkge1xuXHQgICAgICAgICAgICB0aGlzLm9yaWVudGF0aW9uID0gXCJ2ZXJ0aWNhbFwiO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5vcmllbnRhdGlvbiA9IFwiaG9yaXpvbnRhbFwiO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgdmFyIHggPSB1bmRlZmluZWQsXG5cdCAgICAgICAgICAgIHkgPSB1bmRlZmluZWQsXG5cdCAgICAgICAgICAgIHcgPSB1bmRlZmluZWQsXG5cdCAgICAgICAgICAgIGggPSB1bmRlZmluZWQsXG5cdCAgICAgICAgICAgIGJhck9mZnNldCA9IHVuZGVmaW5lZCxcblx0ICAgICAgICAgICAgY29ybmVyUmFkaXVzID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIHRoaXMua25vYkRhdGEgPSB7XG5cdCAgICAgICAgICBsZXZlbDogMCxcblx0ICAgICAgICAgIHI6IDBcblx0ICAgICAgICB9O1xuXHRcblx0ICAgICAgICBpZiAodGhpcy5vcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG5cdCAgICAgICAgICB0aGlzLnRoaWNrbmVzcyA9IHRoaXMud2lkdGggLyAyO1xuXHQgICAgICAgICAgeCA9IHRoaXMud2lkdGggLyAyO1xuXHQgICAgICAgICAgeSA9IDA7XG5cdCAgICAgICAgICB3ID0gdGhpcy50aGlja25lc3M7XG5cdCAgICAgICAgICBoID0gdGhpcy5oZWlnaHQ7XG5cdCAgICAgICAgICB0aGlzLmtub2JEYXRhLnIgPSB0aGlzLnRoaWNrbmVzcyAqIDAuODtcblx0ICAgICAgICAgIHRoaXMua25vYkRhdGEubGV2ZWwgPSBoIC0gdGhpcy5ub3JtYWxpemVkICogaDtcblx0ICAgICAgICAgIGJhck9mZnNldCA9IFwidHJhbnNsYXRlKFwiICsgdGhpcy50aGlja25lc3MgKiAtMSAvIDIgKyBcIiwwKVwiO1xuXHQgICAgICAgICAgY29ybmVyUmFkaXVzID0gdyAvIDI7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMudGhpY2tuZXNzID0gdGhpcy5oZWlnaHQgLyAyO1xuXHQgICAgICAgICAgeCA9IDA7XG5cdCAgICAgICAgICB5ID0gdGhpcy5oZWlnaHQgLyAyO1xuXHQgICAgICAgICAgdyA9IHRoaXMud2lkdGg7XG5cdCAgICAgICAgICBoID0gdGhpcy50aGlja25lc3M7XG5cdCAgICAgICAgICB0aGlzLmtub2JEYXRhLnIgPSB0aGlzLnRoaWNrbmVzcyAqIDAuODtcblx0ICAgICAgICAgIHRoaXMua25vYkRhdGEubGV2ZWwgPSB0aGlzLm5vcm1hbGl6ZWQgKiB3O1xuXHQgICAgICAgICAgYmFyT2Zmc2V0ID0gXCJ0cmFuc2xhdGUoMCxcIiArIHRoaXMudGhpY2tuZXNzICogLTEgLyAyICsgXCIpXCI7XG5cdCAgICAgICAgICBjb3JuZXJSYWRpdXMgPSBoIC8gMjtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcInhcIiwgeCk7XG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwieVwiLCB5KTtcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIiwgYmFyT2Zmc2V0KTtcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJyeFwiLCBjb3JuZXJSYWRpdXMpOyAvLyBjb3JuZXIgcmFkaXVzXG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwicnlcIiwgY29ybmVyUmFkaXVzKTtcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCB3KTtcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgaCk7XG5cdFxuXHQgICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcblx0ICAgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJ4XCIsIHgpO1xuXHQgICAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcInlcIiwgdGhpcy5rbm9iRGF0YS5sZXZlbCk7XG5cdCAgICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgdyk7XG5cdCAgICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGggLSB0aGlzLmtub2JEYXRhLmxldmVsKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcInhcIiwgMCk7XG5cdCAgICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwieVwiLCB5KTtcblx0ICAgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCB0aGlzLmtub2JEYXRhLmxldmVsKTtcblx0ICAgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgaCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIiwgYmFyT2Zmc2V0KTtcblx0ICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwicnhcIiwgY29ybmVyUmFkaXVzKTtcblx0ICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwicnlcIiwgY29ybmVyUmFkaXVzKTtcblx0XG5cdCAgICAgICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuXHQgICAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImN4XCIsIHgpO1xuXHQgICAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImN5XCIsIHRoaXMua25vYkRhdGEubGV2ZWwpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiY3hcIiwgdGhpcy5rbm9iRGF0YS5sZXZlbCk7XG5cdCAgICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiY3lcIiwgeSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJyXCIsIHRoaXMua25vYkRhdGEucik7XG5cdFxuXHQgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uKSB7XG5cdCAgICAgICAgICB0aGlzLnBvc2l0aW9uLnJlc2l6ZShbMCwgdGhpcy53aWR0aF0sIFt0aGlzLmhlaWdodCwgMF0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNvbG9ySW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb2xvckludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmNvbG9ycy5maWxsKTtcblx0ICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmNvbG9ycy5hY2NlbnQpO1xuXHQgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLmFjY2VudCk7XG5cdCAgICAgICAgaWYgKCF0aGlzLmhhc0tub2IpIHtcblx0ICAgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIFwibm9uZVwiKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByZW5kZXI6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0ICAgICAgICBpZiAoIXRoaXMuY2xpY2tlZCkge1xuXHQgICAgICAgICAgdGhpcy5rbm9iRGF0YS5yID0gdGhpcy50aGlja25lc3MgKiAwLjc1O1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiclwiLCB0aGlzLmtub2JEYXRhLnIpO1xuXHRcblx0ICAgICAgICBpZiAodGhpcy5vcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG5cdCAgICAgICAgICB0aGlzLmtub2JEYXRhLmxldmVsID0gdGhpcy5fdmFsdWUubm9ybWFsaXplZCAqIHRoaXMuaGVpZ2h0O1xuXHQgICAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImN5XCIsIHRoaXMuaGVpZ2h0IC0gdGhpcy5rbm9iRGF0YS5sZXZlbCk7XG5cdCAgICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwieVwiLCB0aGlzLmhlaWdodCAtIHRoaXMua25vYkRhdGEubGV2ZWwpO1xuXHQgICAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCB0aGlzLmtub2JEYXRhLmxldmVsKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy5rbm9iRGF0YS5sZXZlbCA9IHRoaXMuX3ZhbHVlLm5vcm1hbGl6ZWQgKiB0aGlzLndpZHRoO1xuXHQgICAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImN4XCIsIHRoaXMua25vYkRhdGEubGV2ZWwpO1xuXHQgICAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcInhcIiwgMCk7XG5cdCAgICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgdGhpcy5rbm9iRGF0YS5sZXZlbCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZG93bjoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gZG93bigpIHtcblx0ICAgICAgICB0aGlzLmNsaWNrZWQgPSB0cnVlO1xuXHQgICAgICAgIHRoaXMua25vYkRhdGEuciA9IHRoaXMudGhpY2tuZXNzICogMC45O1xuXHQgICAgICAgIHRoaXMucG9zaXRpb24uYW5jaG9yID0gdGhpcy5tb3VzZTtcblx0ICAgICAgICB0aGlzLnNsaWRlKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzbGlkZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc2xpZGUoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY2xpY2tlZCkge1xuXHQgICAgICAgICAgdGhpcy5wb3NpdGlvbi51cGRhdGUodGhpcy5tb3VzZSk7XG5cdCAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5fdmFsdWUudXBkYXRlTm9ybWFsKHRoaXMucG9zaXRpb24udmFsdWUpO1xuXHQgICAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMudmFsdWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHVwOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiB1cCgpIHtcblx0ICAgICAgICB0aGlzLmNsaWNrZWQgPSBmYWxzZTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbm9ybWFsaXplZDoge1xuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUubm9ybWFsaXplZDtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHZhbHVlOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgVGhlIHNsaWRlcidzIGN1cnJlbnQgdmFsdWUuIElmIHNldCBtYW51YWxseSwgd2lsbCB1cGRhdGUgdGhlIGludGVyZmFjZSBhbmQgdHJpZ2dlciB0aGUgb3V0cHV0IGV2ZW50LlxuXHQgICAgICBAdHlwZSB7bnVtYmVyfVxuXHQgICAgICBAZXhhbXBsZSBzbGlkZXIudmFsdWUgPSAxMDtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZS52YWx1ZTtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuXHQgICAgICAgIHRoaXMuX3ZhbHVlLnVwZGF0ZSh2KTtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uLnZhbHVlID0gdGhpcy5fdmFsdWUubm9ybWFsaXplZDtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbWluOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgTG93ZXIgbGltaXQgb2YgdGhlIHNsaWRlcnMncyBvdXRwdXQgcmFuZ2Vcblx0ICAgICAgQHR5cGUge251bWJlcn1cblx0ICAgICAgQGV4YW1wbGUgc2xpZGVyLm1pbiA9IDEwMDA7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUubWluO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5fdmFsdWUubWluID0gdjtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1heDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFVwcGVyIGxpbWl0IG9mIHRoZSBzbGlkZXIncyBvdXRwdXQgcmFuZ2Vcblx0ICAgICAgQHR5cGUge251bWJlcn1cblx0ICAgICAgQGV4YW1wbGUgc2xpZGVyLm1heCA9IDEwMDA7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUubWF4O1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5fdmFsdWUubWF4ID0gdjtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHN0ZXA6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBUaGUgaW5jcmVtZW50IHRoYXQgdGhlIHNsaWRlcidzIHZhbHVlIGNoYW5nZXMgYnkuXG5cdCAgICAgIEB0eXBlIHtudW1iZXJ9XG5cdCAgICAgIEBleGFtcGxlIHNsaWRlci5zdGVwID0gNTtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZS5zdGVwO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5fdmFsdWUuc3RlcCA9IHY7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtb2RlOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgQWJzb2x1dGUgbW9kZSAoc2xpZGVyJ3MgdmFsdWUganVtcHMgdG8gbW91c2UgY2xpY2sgcG9zaXRpb24pIG9yIHJlbGF0aXZlIG1vZGUgKG1vdXNlIGRyYWcgY2hhbmdlcyB2YWx1ZSByZWxhdGl2ZSB0byBpdHMgY3VycmVudCBwb3NpdGlvbikuIERlZmF1bHQ6IFwicmVsYXRpdmVcIi5cblx0ICAgICAgQHR5cGUge3N0cmluZ31cblx0ICAgICAgQGV4YW1wbGUgc2xpZGVyLm1vZGUgPSBcInJlbGF0aXZlXCI7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbi5tb2RlO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvbi5tb2RlID0gdjtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pO1xuXHRcblx0ICByZXR1cm4gU2xpZGVyVGVtcGxhdGU7XG5cdH0pKEludGVyZmFjZSk7XG5cdFxuXHRtb2R1bGUuZXhwb3J0cyA9IFNsaWRlclRlbXBsYXRlO1xuXG4vKioqLyB9KSxcbi8qIDMzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQgPSBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfTtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7IH0gfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gZGVzYyAmJiBkZXNjLndyaXRhYmxlKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfTtcblx0XG5cdHZhciBfaW5oZXJpdHMgPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBzdmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXHR2YXIgbWF0aCA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cdHZhciBJbnRlcmZhY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xuXHR2YXIgU3RlcCA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xuXHRcblx0dmFyIEludGVyYWN0aW9uID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX193ZWJwYWNrX3JlcXVpcmVfXygxMikpO1xuXHRcblx0LyoqXG5cdCogUGFuXG5cdCpcblx0KiBAZGVzY3JpcHRpb24gU3RlcmVvIGNyb3NzZmFkZXIuXG5cdCpcblx0KiBAZGVtbyA8c3BhbiBuZXh1cy11aT1cInBhblwiPjwvc3Bhbj5cblx0KlxuXHQqIEBleGFtcGxlXG5cdCogdmFyIHBhbiA9IG5ldyBOZXh1cy5QYW4oJyN0YXJnZXQnKVxuXHQqXG5cdCogQG91dHB1dFxuXHQqIGNoYW5nZVxuXHQqIEZpcmVzIGFueSB0aW1lIHRoZSBpbnRlcmZhY2UncyB2YWx1ZSBjaGFuZ2VzLiA8YnI+XG5cdCogVGhlIGV2ZW50IGRhdGEgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGludGVyZmFjZSdzIDxpPnZhbHVlPC9pPiAoLTEgdG8gMSksIGFzIHdlbGwgYXMgPGk+TDwvaT4gYW5kIDxpPlI8L2k+IGFtcGxpdHVkZSB2YWx1ZXMgKDAtMSkgZm9yIGxlZnQgYW5kIHJpZ2h0IHNwZWFrZXJzLCBjYWxjdWxhdGVkIGJ5IGEgc3F1YXJlLXJvb3QgY3Jvc3NmYWRlIGFsZ29yaXRobS5cblx0KlxuXHQqIEBvdXRwdXRleGFtcGxlXG5cdCogcGFuLm9uKCdjaGFuZ2UnLGZ1bmN0aW9uKHYpIHtcblx0KiAgIGNvbnNvbGUubG9nKHYpO1xuXHQqIH0pXG5cdCpcblx0KlxuXHQqL1xuXHRcblx0dmFyIFBhbiA9IChmdW5jdGlvbiAoX0ludGVyZmFjZSkge1xuXHQgIGZ1bmN0aW9uIFBhbigpIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQYW4pO1xuXHRcblx0ICAgIHZhciBvcHRpb25zID0gW1wic2NhbGVcIiwgXCJ2YWx1ZVwiXTtcblx0XG5cdCAgICB2YXIgZGVmYXVsdHMgPSB7XG5cdCAgICAgIHNpemU6IFsxMjAsIDIwXSxcblx0ICAgICAgb3JpZW50YXRpb246IFwiaG9yaXpvbnRhbFwiLFxuXHQgICAgICBtb2RlOiBcInJlbGF0aXZlXCIsXG5cdCAgICAgIHNjYWxlOiBbLTEsIDFdLFxuXHQgICAgICBzdGVwOiAwLFxuXHQgICAgICB2YWx1ZTogMCxcblx0ICAgICAgaGFzS25vYjogdHJ1ZVxuXHQgICAgfTtcblx0XG5cdCAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihQYW4ucHJvdG90eXBlKSwgXCJjb25zdHJ1Y3RvclwiLCB0aGlzKS5jYWxsKHRoaXMsIGFyZ3VtZW50cywgb3B0aW9ucywgZGVmYXVsdHMpO1xuXHRcblx0ICAgIHRoaXMub3JpZW50YXRpb24gPSB0aGlzLnNldHRpbmdzLm9yaWVudGF0aW9uO1xuXHRcblx0ICAgIHRoaXMubW9kZSA9IHRoaXMuc2V0dGluZ3MubW9kZTtcblx0XG5cdCAgICB0aGlzLmhhc0tub2IgPSB0aGlzLnNldHRpbmdzLmhhc0tub2I7XG5cdFxuXHQgICAgLy8gdGhpcy5zdGVwIHNob3VsZCBldmVudHVhbGx5IGJlIGdldC9zZXRcblx0ICAgIC8vIHVwZGF0aW5nIGl0IHdpbGwgdXBkYXRlIHRoZSBfdmFsdWUgc3RlcCBtb2RlbFxuXHQgICAgdGhpcy5zdGVwID0gdGhpcy5zZXR0aW5ncy5zdGVwOyAvLyBmbG9hdFxuXHRcblx0ICAgIHRoaXMuX3ZhbHVlID0gbmV3IFN0ZXAodGhpcy5zZXR0aW5ncy5zY2FsZVswXSwgdGhpcy5zZXR0aW5ncy5zY2FsZVsxXSwgdGhpcy5zZXR0aW5ncy5zdGVwLCB0aGlzLnNldHRpbmdzLnZhbHVlKTtcblx0XG5cdCAgICB0aGlzLmluaXQoKTtcblx0XG5cdCAgICB0aGlzLnBvc2l0aW9uID0gbmV3IEludGVyYWN0aW9uLkhhbmRsZSh0aGlzLm1vZGUsIHRoaXMub3JpZW50YXRpb24sIFswLCB0aGlzLndpZHRoXSwgW3RoaXMuaGVpZ2h0LCAwXSk7XG5cdCAgICB0aGlzLnBvc2l0aW9uLnZhbHVlID0gdGhpcy5fdmFsdWUubm9ybWFsaXplZDtcblx0XG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5fdmFsdWUudmFsdWU7XG5cdFxuXHQgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMudmFsdWUpO1xuXHQgIH1cblx0XG5cdCAgX2luaGVyaXRzKFBhbiwgX0ludGVyZmFjZSk7XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhQYW4sIHtcblx0ICAgIGJ1aWxkSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgdGhpcy5iYXIgPSBzdmcuY3JlYXRlKFwicmVjdFwiKTtcblx0ICAgICAgICB0aGlzLmtub2IgPSBzdmcuY3JlYXRlKFwiY2lyY2xlXCIpO1xuXHRcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5iYXIpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmtub2IpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2l6ZUludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc2l6ZUludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgaWYgKHRoaXMucG9zaXRpb24pIHtcblx0ICAgICAgICAgIHRoaXMucG9zaXRpb24ucmVzaXplKFswLCB0aGlzLndpZHRoXSwgW3RoaXMuaGVpZ2h0LCAwXSk7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICBpZiAodGhpcy53aWR0aCA8IHRoaXMuaGVpZ2h0KSB7XG5cdCAgICAgICAgICB0aGlzLm9yaWVudGF0aW9uID0gXCJ2ZXJ0aWNhbFwiO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLm9yaWVudGF0aW9uID0gXCJob3Jpem9udGFsXCI7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICB2YXIgeCA9IHVuZGVmaW5lZCxcblx0ICAgICAgICAgICAgeSA9IHVuZGVmaW5lZCxcblx0ICAgICAgICAgICAgdyA9IHVuZGVmaW5lZCxcblx0ICAgICAgICAgICAgaCA9IHVuZGVmaW5lZCxcblx0ICAgICAgICAgICAgYmFyT2Zmc2V0ID0gdW5kZWZpbmVkLFxuXHQgICAgICAgICAgICBjb3JuZXJSYWRpdXMgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgdGhpcy5rbm9iRGF0YSA9IHtcblx0ICAgICAgICAgIGxldmVsOiAwLFxuXHQgICAgICAgICAgcjogMFxuXHQgICAgICAgIH07XG5cdFxuXHQgICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcblx0ICAgICAgICAgIHRoaXMudGhpY2tuZXNzID0gdGhpcy53aWR0aCAvIDI7XG5cdCAgICAgICAgICB4ID0gdGhpcy53aWR0aCAvIDI7XG5cdCAgICAgICAgICB5ID0gMDtcblx0ICAgICAgICAgIHcgPSB0aGlzLnRoaWNrbmVzcztcblx0ICAgICAgICAgIGggPSB0aGlzLmhlaWdodDtcblx0ICAgICAgICAgIHRoaXMua25vYkRhdGEuciA9IHRoaXMudGhpY2tuZXNzICogMC44O1xuXHQgICAgICAgICAgdGhpcy5rbm9iRGF0YS5sZXZlbCA9IGggLSB0aGlzLmtub2JEYXRhLnIgLSB0aGlzLm5vcm1hbGl6ZWQgKiAoaCAtIHRoaXMua25vYkRhdGEuciAqIDIpO1xuXHQgICAgICAgICAgYmFyT2Zmc2V0ID0gXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLnRoaWNrbmVzcyAqIC0xIC8gMiArIFwiLDApXCI7XG5cdCAgICAgICAgICBjb3JuZXJSYWRpdXMgPSB3IC8gMjtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy50aGlja25lc3MgPSB0aGlzLmhlaWdodCAvIDI7XG5cdCAgICAgICAgICB4ID0gMDtcblx0ICAgICAgICAgIHkgPSB0aGlzLmhlaWdodCAvIDI7XG5cdCAgICAgICAgICB3ID0gdGhpcy53aWR0aDtcblx0ICAgICAgICAgIGggPSB0aGlzLnRoaWNrbmVzcztcblx0ICAgICAgICAgIHRoaXMua25vYkRhdGEuciA9IHRoaXMudGhpY2tuZXNzICogMC44O1xuXHQgICAgICAgICAgdGhpcy5rbm9iRGF0YS5sZXZlbCA9IHRoaXMubm9ybWFsaXplZCAqICh3IC0gdGhpcy5rbm9iRGF0YS5yICogMikgKyB0aGlzLmtub2JEYXRhLnI7XG5cdCAgICAgICAgICBiYXJPZmZzZXQgPSBcInRyYW5zbGF0ZSgwLFwiICsgdGhpcy50aGlja25lc3MgKiAtMSAvIDIgKyBcIilcIjtcblx0ICAgICAgICAgIGNvcm5lclJhZGl1cyA9IGggLyAyO1xuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwieFwiLCB4KTtcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJ5XCIsIHkpO1xuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLCBiYXJPZmZzZXQpO1xuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcInJ4XCIsIGNvcm5lclJhZGl1cyk7IC8vIGNvcm5lciByYWRpdXNcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJyeVwiLCBjb3JuZXJSYWRpdXMpO1xuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIHcpO1xuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBoKTtcblx0XG5cdCAgICAgICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuXHQgICAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImN4XCIsIHgpO1xuXHQgICAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImN5XCIsIHRoaXMua25vYkRhdGEubGV2ZWwpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiY3hcIiwgdGhpcy5rbm9iRGF0YS5sZXZlbCk7XG5cdCAgICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiY3lcIiwgeSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJyXCIsIHRoaXMua25vYkRhdGEucik7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjb2xvckludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY29sb3JJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5jb2xvcnMuZmlsbCk7XG5cdCAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5jb2xvcnMuYWNjZW50KTtcblx0XG5cdCAgICAgICAgaWYgKCF0aGlzLmhhc0tub2IpIHtcblx0ICAgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIik7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVuZGVyOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLmNsaWNrZWQpIHtcblx0ICAgICAgICAgIHRoaXMua25vYkRhdGEuciA9IHRoaXMudGhpY2tuZXNzICogMC43NTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcInJcIiwgdGhpcy5rbm9iRGF0YS5yKTtcblx0XG5cdCAgICAgICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuXHQgICAgICAgICAgdGhpcy5rbm9iRGF0YS5sZXZlbCA9IHRoaXMua25vYkRhdGEuciArIHRoaXMuX3ZhbHVlLm5vcm1hbGl6ZWQgKiAodGhpcy5oZWlnaHQgLSB0aGlzLmtub2JEYXRhLnIgKiAyKTtcblx0ICAgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJjeVwiLCB0aGlzLmhlaWdodCAtIHRoaXMua25vYkRhdGEubGV2ZWwpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLmtub2JEYXRhLmxldmVsID0gdGhpcy5fdmFsdWUubm9ybWFsaXplZCAqICh0aGlzLndpZHRoIC0gdGhpcy5rbm9iRGF0YS5yICogMikgKyB0aGlzLmtub2JEYXRhLnI7XG5cdCAgICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiY3hcIiwgdGhpcy5rbm9iRGF0YS5sZXZlbCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY2xpY2s6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsaWNrKCkge1xuXHQgICAgICAgIHRoaXMua25vYkRhdGEuciA9IHRoaXMudGhpY2tuZXNzICogMC45O1xuXHQgICAgICAgIHRoaXMucG9zaXRpb24uYW5jaG9yID0gdGhpcy5tb3VzZTtcblx0ICAgICAgICB0aGlzLm1vdmUoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1vdmU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIG1vdmUoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY2xpY2tlZCkge1xuXHQgICAgICAgICAgdGhpcy5wb3NpdGlvbi51cGRhdGUodGhpcy5tb3VzZSk7XG5cdFxuXHQgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuX3ZhbHVlLnVwZGF0ZU5vcm1hbCh0aGlzLnBvc2l0aW9uLnZhbHVlKTtcblx0XG5cdCAgICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwge1xuXHQgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcblx0ICAgICAgICAgICAgTDogTWF0aC5wb3cobWF0aC5zY2FsZSh0aGlzLnZhbHVlLCAtMSwgMSwgMSwgMCksIDIpLFxuXHQgICAgICAgICAgICBSOiBNYXRoLnBvdyhtYXRoLnNjYWxlKHRoaXMudmFsdWUsIC0xLCAxLCAwLCAxKSwgMilcblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlbGVhc2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbGVhc2UoKSB7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHZhbHVlOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgVGhlIHBvc2l0aW9uIG9mIGNyb3NzZmFkZXIsIGZyb20gLTEgKGxlZnQpIHRvIDEgKHJpZ2h0KS4gU2V0dGluZyB0aGlzIHZhbHVlIHVwZGF0ZXMgdGhlIGludGVyZmFjZSBhbmQgdHJpZ2dlcnMgdGhlIG91dHB1dCBldmVudC5cblx0ICAgICAgQHR5cGUge251bWJlcn1cblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZS52YWx1ZTtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICB0aGlzLl92YWx1ZS51cGRhdGUodmFsdWUpO1xuXHQgICAgICAgIHRoaXMucG9zaXRpb24udmFsdWUgPSB0aGlzLl92YWx1ZS5ub3JtYWxpemVkO1xuXHQgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB7XG5cdCAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcblx0ICAgICAgICAgIEw6IE1hdGgucG93KG1hdGguc2NhbGUodGhpcy52YWx1ZSwgLTEsIDEsIDEsIDApLCAyKSxcblx0ICAgICAgICAgIFI6IE1hdGgucG93KG1hdGguc2NhbGUodGhpcy52YWx1ZSwgLTEsIDEsIDAsIDEpLCAyKVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBub3JtYWxpemVkOiB7XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZS5ub3JtYWxpemVkO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBQYW47XG5cdH0pKEludGVyZmFjZSk7XG5cdFxuXHRtb2R1bGUuZXhwb3J0cyA9IFBhbjtcblxuLyoqKi8gfSksXG4vKiAzNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHsgdmFyIHByb3AgPSBwcm9wc1trZXldOyBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChwcm9wLnZhbHVlKSBwcm9wLndyaXRhYmxlID0gdHJ1ZTsgfSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKTsgfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXHRcblx0dmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyByZXR1cm4gZ2V0KHBhcmVudCwgcHJvcGVydHksIHJlY2VpdmVyKTsgfSB9IGVsc2UgaWYgKFwidmFsdWVcIiBpbiBkZXNjICYmIGRlc2Mud3JpdGFibGUpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9O1xuXHRcblx0dmFyIF9pbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9O1xuXHRcblx0dmFyIF9jbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9O1xuXHRcblx0dmFyIG1hdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xuXHR2YXIgc3ZnID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblx0dmFyIEludGVyZmFjZSA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5cdFxuXHR2YXIgUG9pbnQgPSBmdW5jdGlvbiBQb2ludChwb2ludCwgZW52ZWxvcGUpIHtcblx0XG5cdCAgdGhpcy54ID0gcG9pbnQueDtcblx0ICB0aGlzLnkgPSBwb2ludC55O1xuXHQgIHRoaXMuZW52ZWxvcGUgPSBlbnZlbG9wZTtcblx0XG5cdCAgdGhpcy5lbGVtZW50ID0gc3ZnLmNyZWF0ZShcImNpcmNsZVwiKTtcblx0ICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmVudmVsb3BlLmNvbG9ycy5hY2NlbnQpO1xuXHRcblx0ICB0aGlzLmVudmVsb3BlLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTtcblx0XG5cdCAgdGhpcy5yZXNpemUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICB2YXIgciA9IH4gfihNYXRoLm1pbih0aGlzLmVudmVsb3BlLndpZHRoLCB0aGlzLmVudmVsb3BlLmhlaWdodCkgLyA1MCkgKyAyO1xuXHQgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShcInJcIiwgcik7XG5cdCAgfTtcblx0XG5cdCAgdGhpcy5tb3ZlID0gZnVuY3Rpb24gKHgsIHkpIHtcblx0XG5cdCAgICB0aGlzLnggPSB4IHx8IHggPT09IDAgPyB4IDogdGhpcy54O1xuXHQgICAgdGhpcy55ID0geSB8fCB5ID09PSAwID8geSA6IHRoaXMueTtcblx0XG5cdCAgICBpZiAodGhpcy5lbnZlbG9wZS5ub2Rlcy5pbmRleE9mKHRoaXMpID49IDApIHtcblx0XG5cdCAgICAgIHZhciBwcmV2SW5kZXggPSB0aGlzLmVudmVsb3BlLm5vZGVzLmluZGV4T2YodGhpcykgLSAxO1xuXHQgICAgICB2YXIgbmV4dEluZGV4ID0gdGhpcy5lbnZlbG9wZS5ub2Rlcy5pbmRleE9mKHRoaXMpICsgMTtcblx0XG5cdCAgICAgIHZhciBwcmV2Tm9kZSA9IHRoaXMuZW52ZWxvcGUubm9kZXNbcHJldkluZGV4XTtcblx0ICAgICAgdmFyIG5leHROb2RlID0gdGhpcy5lbnZlbG9wZS5ub2Rlc1tuZXh0SW5kZXhdO1xuXHRcblx0ICAgICAgdmFyIGxvd1ggPSBwcmV2SW5kZXggPj0gMCA/IHByZXZOb2RlLnggOiAwO1xuXHQgICAgICB2YXIgaGlnaFggPSBuZXh0SW5kZXggPCB0aGlzLmVudmVsb3BlLm5vZGVzLmxlbmd0aCA/IG5leHROb2RlLnggOiAxO1xuXHRcblx0ICAgICAgaWYgKHRoaXMueCA8IGxvd1gpIHtcblx0ICAgICAgICB0aGlzLnggPSBsb3dYO1xuXHQgICAgICB9XG5cdCAgICAgIGlmICh0aGlzLnggPiBoaWdoWCkge1xuXHQgICAgICAgIHRoaXMueCA9IGhpZ2hYO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdFxuXHQgICAgdGhpcy5sb2NhdGlvbiA9IHRoaXMuZ2V0Q29vcmRpbmF0ZXMoKTtcblx0ICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJjeFwiLCB0aGlzLmxvY2F0aW9uLngpO1xuXHQgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShcImN5XCIsIHRoaXMubG9jYXRpb24ueSk7XG5cdCAgfTtcblx0XG5cdCAgdGhpcy5nZXRDb29yZGluYXRlcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHg6IHRoaXMueCAqIHRoaXMuZW52ZWxvcGUud2lkdGgsXG5cdCAgICAgIHk6ICgxIC0gdGhpcy55KSAqIHRoaXMuZW52ZWxvcGUuaGVpZ2h0XG5cdCAgICB9O1xuXHQgIH07XG5cdFxuXHQgIHRoaXMubW92ZSh0aGlzLngsIHRoaXMueSwgdHJ1ZSk7XG5cdCAgdGhpcy5yZXNpemUoKTtcblx0XG5cdCAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgdGhpcy5lbnZlbG9wZS5lbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudCk7XG5cdCAgICB0aGlzLmVudmVsb3BlLm5vZGVzLnNwbGljZSh0aGlzLmVudmVsb3BlLm5vZGVzLmluZGV4T2YodGhpcyksIDEpO1xuXHQgIH07XG5cdH07XG5cdFxuXHQvKipcblx0KiBFbnZlbG9wZVxuXHQqXG5cdCogQGRlc2NyaXB0aW9uIEludGVyYWN0aXZlIGxpbmVhciByYW1wIHZpc3VhbGl6YXRpb24uXG5cdCpcblx0KiBAZGVtbyA8c3BhbiBuZXh1cy11aT1cImVudmVsb3BlXCI+PC9zcGFuPlxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgZW52ZWxvcGUgPSBuZXcgTmV4dXMuRW52ZWxvcGUoJyN0YXJnZXQnKVxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgZW52ZWxvcGUgPSBuZXcgTmV4dXMuRW52ZWxvcGUoJyN0YXJnZXQnLHtcblx0KiAgICdzaXplJzogWzMwMCwxNTBdLFxuXHQqICAgJ3BvaW50cyc6IFtcblx0KiAgICAge1xuXHQqICAgICAgIHg6IDAuMSxcblx0KiAgICAgICB5OiAwLjRcblx0KiAgICAgfSxcblx0KiAgICAge1xuXHQqICAgICAgIHg6IDAuMzUsXG5cdCogICAgICAgeTogMC42XG5cdCogICAgIH0sXG5cdCogICAgIHtcblx0KiAgICAgICB4OiAwLjY1LFxuXHQqICAgICAgIHk6IDAuMlxuXHQqICAgICB9LFxuXHQqICAgICB7XG5cdCogICAgICAgeDogMC45LFxuXHQqICAgICAgIHk6IDAuNFxuXHQqICAgICB9LFxuXHQqICAgXVxuXHQqIH0pXG5cdCpcblx0KiBAb3V0cHV0XG5cdCogY2hhbmdlXG5cdCogRmlyZXMgYW55IHRpbWUgYSBub2RlIGlzIG1vdmVkLiA8YnI+XG5cdCogVGhlIGV2ZW50IGRhdGEgaXMgYW4gYXJyYXkgb2YgcG9pbnQgbG9jYXRpb25zLiBFYWNoIGl0ZW0gaW4gdGhlIGFycmF5IGlzIGFuIG9iamVjdCBjb250YWluaW5nIDxpPng8L2k+IGFuZCA8aT55PC9pPiBwcm9wZXJ0aWVzIGRlc2NyaWJpbmcgdGhlIGxvY2F0aW9uIG9mIGEgcG9pbnQgb24gdGhlIGVudmVsb3BlLlxuXHQqXG5cdCogQG91dHB1dGV4YW1wbGVcblx0KiBlbnZlbG9wZS5vbignY2hhbmdlJyxmdW5jdGlvbih2KSB7XG5cdCogICBjb25zb2xlLmxvZyh2KTtcblx0KiB9KVxuXHQqXG5cdCovXG5cdFxuXHR2YXIgRW52ZWxvcGUgPSAoZnVuY3Rpb24gKF9JbnRlcmZhY2UpIHtcblx0ICBmdW5jdGlvbiBFbnZlbG9wZSgpIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFbnZlbG9wZSk7XG5cdFxuXHQgICAgdmFyIG9wdGlvbnMgPSBbXCJ2YWx1ZVwiXTtcblx0XG5cdCAgICB2YXIgZGVmYXVsdHMgPSB7XG5cdCAgICAgIHNpemU6IFszMDAsIDE1MF0sXG5cdCAgICAgIHBvaW50czogW3tcblx0ICAgICAgICB4OiAwLjEsXG5cdCAgICAgICAgeTogMC40XG5cdCAgICAgIH0sIHtcblx0ICAgICAgICB4OiAwLjM1LFxuXHQgICAgICAgIHk6IDAuNlxuXHQgICAgICB9LCB7XG5cdCAgICAgICAgeDogMC42NSxcblx0ICAgICAgICB5OiAwLjJcblx0ICAgICAgfSwge1xuXHQgICAgICAgIHg6IDAuOSxcblx0ICAgICAgICB5OiAwLjRcblx0ICAgICAgfV1cblx0ICAgIH07XG5cdFxuXHQgICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoRW52ZWxvcGUucHJvdG90eXBlKSwgXCJjb25zdHJ1Y3RvclwiLCB0aGlzKS5jYWxsKHRoaXMsIGFyZ3VtZW50cywgb3B0aW9ucywgZGVmYXVsdHMpO1xuXHRcblx0ICAgIHRoaXMucG9pbnRzID0gdGhpcy5zZXR0aW5ncy5wb2ludHM7XG5cdFxuXHQgICAgdGhpcy5ub2RlcyA9IFtdO1xuXHRcblx0ICAgIHRoaXMuc2VsZWN0ZWQgPSBmYWxzZTtcblx0XG5cdCAgICB0aGlzLmluaXQoKTtcblx0ICB9XG5cdFxuXHQgIF9pbmhlcml0cyhFbnZlbG9wZSwgX0ludGVyZmFjZSk7XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhFbnZlbG9wZSwge1xuXHQgICAgYnVpbGRJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkSW50ZXJmYWNlKCkge1xuXHQgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cdFxuXHQgICAgICAgIHRoaXMucG9pbnRzLmZvckVhY2goZnVuY3Rpb24gKHBvaW50KSB7XG5cdCAgICAgICAgICB2YXIgbm9kZSA9IG5ldyBQb2ludChwb2ludCwgX3RoaXMpO1xuXHQgICAgICAgICAgX3RoaXMubm9kZXMucHVzaChub2RlKTtcblx0ICAgICAgICB9KTtcblx0XG5cdCAgICAgICAgdGhpcy5zb3J0UG9pbnRzKCk7XG5cdFxuXHQgICAgICAgIHRoaXMubGluZSA9IHN2Zy5jcmVhdGUoXCJwb2x5bGluZVwiKTtcblx0ICAgICAgICB0aGlzLmxpbmUuc2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIsIDIpO1xuXHQgICAgICAgIHRoaXMubGluZS5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIFwibm9uZVwiKTtcblx0XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMubGluZSk7XG5cdFxuXHQgICAgICAgIHRoaXMuZmlsbCA9IHN2Zy5jcmVhdGUoXCJwb2x5bGluZVwiKTtcblx0ICAgICAgICB0aGlzLmZpbGwuc2V0QXR0cmlidXRlKFwiZmlsbC1vcGFjaXR5XCIsIFwiMC4yXCIpO1xuXHRcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5maWxsKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNpemVJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNpemVJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ub2Rlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgdGhpcy5ub2Rlc1tpXS5yZXNpemUoKTtcblx0ICAgICAgICAgIHRoaXMubm9kZXNbaV0ubW92ZSgpO1xuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNvbG9ySW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb2xvckludGVyZmFjZSgpIHtcblx0ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXHRcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5jb2xvcnMuZmlsbDtcblx0ICAgICAgICB0aGlzLmxpbmUuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIHRoaXMuY29sb3JzLmFjY2VudCk7XG5cdCAgICAgICAgdGhpcy5maWxsLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5jb2xvcnMuYWNjZW50KTtcblx0ICAgICAgICB0aGlzLm5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgIG5vZGUuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIF90aGlzLmNvbG9ycy5hY2NlbnQpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVuZGVyOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdCAgICAgICAgLy8gIHRoaXMubm9kZXNbdGhpcy5zZWxlY3RlZF0ubW92ZSggdGhpcy5wb2ludHMgKVxuXHQgICAgICAgIHRoaXMuY2FsY3VsYXRlUGF0aCgpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY2FsY3VsYXRlUG9pbnRzOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjYWxjdWxhdGVQb2ludHMoKSB7XG5cdCAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblx0XG5cdCAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcblx0ICAgICAgICB0aGlzLm5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgIF90aGlzLnBvaW50cy5wdXNoKHsgeDogbm9kZS54LCB5OiBub2RlLnkgfSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjYWxjdWxhdGVQYXRoOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjYWxjdWxhdGVQYXRoKCkge1xuXHRcblx0ICAgICAgICAvL3N0cm9rZSBkYXRhXG5cdCAgICAgICAgdmFyIGRhdGEgPSBcIjAgXCIgKyB0aGlzLm5vZGVzWzBdLmxvY2F0aW9uLnkgKyBcIiwgXCI7XG5cdFxuXHQgICAgICAgIC8vIGRhdGEgc2hvdWxkIGJlIHJlLW9yZGVyZWQgYmFzZWQgb24geCBsb2NhdGlvbi5cblx0ICAgICAgICAvLyB3aGF0ZXZlciBmdW5jdGlvbiBhZGRzIGEgbm9kZSBzaG91bGQgYWRkIGl0IGF0IHRoZSByaWdodCBpbmRleFxuXHRcblx0ICAgICAgICB0aGlzLm5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgIC8vICBsZXQgbG9jYXRpb24gPSBub2RlLmdldENvb3JkaW5hdGVzKCk7XG5cdCAgICAgICAgICBkYXRhICs9IG5vZGUubG9jYXRpb24ueCArIFwiIFwiICsgbm9kZS5sb2NhdGlvbi55ICsgXCIsIFwiO1xuXHQgICAgICAgIH0pO1xuXHRcblx0ICAgICAgICAvLyAgZGF0YSArPSBwb2ludC54KnRoaXMud2lkdGgrJyAnKyBwb2ludC55KnRoaXMuaGVpZ2h0KycsICc7XG5cdCAgICAgICAgZGF0YSArPSB0aGlzLndpZHRoICsgXCIgXCIgKyB0aGlzLm5vZGVzW3RoaXMubm9kZXMubGVuZ3RoIC0gMV0ubG9jYXRpb24ueTtcblx0XG5cdCAgICAgICAgdGhpcy5saW5lLnNldEF0dHJpYnV0ZShcInBvaW50c1wiLCBkYXRhKTtcblx0XG5cdCAgICAgICAgLy8gZmlsbCBkYXRhXG5cdCAgICAgICAgLy8gYWRkIGJvdHRvbSBjb3JuZXJzXG5cdFxuXHQgICAgICAgIGRhdGEgKz0gXCIsIFwiICsgdGhpcy53aWR0aCArIFwiIFwiICsgdGhpcy5oZWlnaHQgKyBcIiwgXCI7XG5cdCAgICAgICAgZGF0YSArPSBcIjAgXCIgKyB0aGlzLmhlaWdodDtcblx0XG5cdCAgICAgICAgdGhpcy5maWxsLnNldEF0dHJpYnV0ZShcInBvaW50c1wiLCBkYXRhKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNsaWNrOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGljaygpIHtcblx0ICAgICAgICAvLyBmaW5kIG5lYXJlc3Qgbm9kZSBhbmQgc2V0IHRoaXMuc2VsZWN0ZWQgKGluZGV4KVxuXHQgICAgICAgIHRoaXMuaGFzTW92ZWQgPSBmYWxzZTtcblx0ICAgICAgICB0aGlzLnNlbGVjdGVkID0gdGhpcy5maW5kTmVhcmVzdE5vZGUoKTtcblx0XG5cdCAgICAgICAgdGhpcy5ub2Rlc1t0aGlzLnNlbGVjdGVkXS5tb3ZlKHRoaXMubW91c2UueCAvIHRoaXMud2lkdGgsIDEgLSB0aGlzLm1vdXNlLnkgLyB0aGlzLmhlaWdodCk7XG5cdCAgICAgICAgdGhpcy5zY2FsZU5vZGUodGhpcy5zZWxlY3RlZCk7XG5cdFxuXHQgICAgICAgIC8vIG11c3QgZG8gdGhpcyBiL2MgbmV3IG5vZGUgbWF5IGhhdmUgYmVlbiBjcmVhdGVkXG5cdCAgICAgICAgdGhpcy5jYWxjdWxhdGVQb2ludHMoKTtcblx0ICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwgdGhpcy5wb2ludHMpO1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtb3ZlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBtb3ZlKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmNsaWNrZWQpIHtcblx0ICAgICAgICAgIHRoaXMubW91c2UueCA9IG1hdGguY2xpcCh0aGlzLm1vdXNlLngsIDAsIHRoaXMud2lkdGgpO1xuXHQgICAgICAgICAgdGhpcy5oYXNNb3ZlZCA9IHRydWU7XG5cdFxuXHQgICAgICAgICAgdGhpcy5ub2Rlc1t0aGlzLnNlbGVjdGVkXS5tb3ZlKHRoaXMubW91c2UueCAvIHRoaXMud2lkdGgsIDEgLSB0aGlzLm1vdXNlLnkgLyB0aGlzLmhlaWdodCk7XG5cdCAgICAgICAgICB0aGlzLnNjYWxlTm9kZSh0aGlzLnNlbGVjdGVkKTtcblx0XG5cdCAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVBvaW50cygpO1xuXHQgICAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMucG9pbnRzKTtcblx0ICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVsZWFzZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVsZWFzZSgpIHtcblx0XG5cdCAgICAgICAgaWYgKCF0aGlzLmhhc01vdmVkKSB7XG5cdCAgICAgICAgICB0aGlzLm5vZGVzW3RoaXMuc2VsZWN0ZWRdLmRlc3Ryb3koKTtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIHRoaXMuY2FsY3VsYXRlUG9pbnRzKCk7XG5cdCAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMucG9pbnRzKTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHRcblx0ICAgICAgICAvLyByZXNldCB0aGlzLnNlbGVjdGVkXG5cdCAgICAgICAgdGhpcy5zZWxlY3RlZCA9IG51bGw7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBmaW5kTmVhcmVzdE5vZGU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZpbmROZWFyZXN0Tm9kZSgpIHtcblx0ICAgICAgICB2YXIgbmVhcmVzdEluZGV4ID0gbnVsbDtcblx0ICAgICAgICAvLyBzZXQgdGhpcyB1bnJlYXNvbmFibHkgaGlnaCBzbyB0aGF0IGV2ZXJ5IGRpc3RhbmNlIHdpbGwgYmUgbG93ZXIgdGhhbiBpdC5cblx0ICAgICAgICB2YXIgbmVhcmVzdERpc3QgPSAxMDAwMDtcblx0ICAgICAgICB2YXIgYmVmb3JlID0gZmFsc2U7XG5cdCAgICAgICAgdmFyIHggPSB0aGlzLm1vdXNlLnggLyB0aGlzLndpZHRoO1xuXHQgICAgICAgIHZhciB5ID0gMSAtIHRoaXMubW91c2UueSAvIHRoaXMuaGVpZ2h0O1xuXHQgICAgICAgIHZhciBub2RlcyA9IHRoaXMubm9kZXM7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuXHRcblx0ICAgICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgZnJvbSBtb3VzZSB0byB0aGlzIG5vZGUgdXNpbmcgcHl0aGFnb3JlYW4gdGhlb3JlbVxuXHQgICAgICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0KE1hdGgucG93KG5vZGVzW2ldLnggLSB4LCAyKSArIE1hdGgucG93KG5vZGVzW2ldLnkgLSB5LCAyKSk7XG5cdFxuXHQgICAgICAgICAgLy8gaWYgdGhpcyBkaXN0YW5jZSBpcyBsZXNzIHRoYW4gdGhlIHByZXZpb3VzIHNob3J0ZXN0IGRpc3RhbmNlLCB1c2UgdGhpcyBpbmRleFxuXHQgICAgICAgICAgaWYgKGRpc3RhbmNlIDwgbmVhcmVzdERpc3QpIHtcblx0ICAgICAgICAgICAgbmVhcmVzdERpc3QgPSBkaXN0YW5jZTtcblx0ICAgICAgICAgICAgbmVhcmVzdEluZGV4ID0gaTtcblx0ICAgICAgICAgICAgYmVmb3JlID0geCA+IG5vZGVzW2ldLng7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICAvLyBpZiBub3QgdmVyeSBjbG9zZSB0byBhbnkgbm9kZSwgY3JlYXRlIGEgbm9kZVxuXHQgICAgICAgIGlmIChuZWFyZXN0RGlzdCA+IDAuMDcpIHtcblx0XG5cdCAgICAgICAgICBuZWFyZXN0SW5kZXggPSB0aGlzLmdldEluZGV4RnJvbVgodGhpcy5tb3VzZS54IC8gdGhpcy53aWR0aCk7XG5cdFxuXHQgICAgICAgICAgdGhpcy5ub2Rlcy5zcGxpY2UobmVhcmVzdEluZGV4LCAwLCBuZXcgUG9pbnQoe1xuXHQgICAgICAgICAgICB4OiB0aGlzLm1vdXNlLnggLyB0aGlzLndpZHRoLFxuXHQgICAgICAgICAgICB5OiAxIC0gdGhpcy5tb3VzZS55IC8gdGhpcy5oZWlnaHRcblx0ICAgICAgICAgIH0sIHRoaXMpKTtcblx0ICAgICAgICAgIHRoaXMuaGFzTW92ZWQgPSB0cnVlO1xuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgcmV0dXJuIG5lYXJlc3RJbmRleDtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGdldEluZGV4RnJvbVg6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldEluZGV4RnJvbVgoeCkge1xuXHQgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cdFxuXHQgICAgICAgIHZhciBpbmRleCA9IDA7XG5cdCAgICAgICAgdGhpcy5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlLCBpKSB7XG5cdCAgICAgICAgICBpZiAoX3RoaXMubm9kZXNbaV0ueCA8PSB4KSB7XG5cdCAgICAgICAgICAgIGluZGV4ID0gaSArIDE7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIGluZGV4O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2NhbGVOb2RlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzY2FsZU5vZGUoaSkge1xuXHRcblx0ICAgICAgICB2YXIgY2xpcHBlZFggPSBtYXRoLmNsaXAodGhpcy5ub2Rlc1tpXS54LCAwLCAxKTtcblx0ICAgICAgICB2YXIgY2xpcHBlZFkgPSBtYXRoLmNsaXAodGhpcy5ub2Rlc1tpXS55LCAwLCAxKTtcblx0XG5cdCAgICAgICAgdGhpcy5ub2Rlc1tpXS5tb3ZlKGNsaXBwZWRYLCBjbGlwcGVkWSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzb3J0UG9pbnRzOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgU29ydCB0aGUgdGhpcy5wb2ludHMgYXJyYXkgZnJvbSBsZWZ0LW1vc3QgcG9pbnQgdG8gcmlnaHQtbW9zdCBwb2ludC4gWW91IHNob3VsZCBub3QgcmVndWxhcmx5IG5lZWQgdG8gdXNlIHRoaXMsIGhvd2V2ZXIgaXQgbWF5IGJlIHVzZWZ1bCBpZiB0aGUgcG9pbnRzIGdldCB1bm9yZGVyZWQuXG5cdCAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc29ydFBvaW50cygpIHtcblx0ICAgICAgICB0aGlzLm5vZGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcblx0ICAgICAgICAgIHJldHVybiBhLnggPiBiLng7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBhZGRQb2ludDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIEFkZCBhIGJyZWFrcG9pbnQgb24gdGhlIGVudmVsb3BlLlxuXHQgICAgICBAcGFyYW0geCB7bnVtYmVyfSB4IGxvY2F0aW9uIG9mIHRoZSBwb2ludCwgbm9ybWFsaXplZCAoMC0xKVxuXHQgICAgICBAcGFyYW0geSB7bnVtYmVyfSB5IGxvY2F0aW9uIG9mIHRoZSBwb2ludCwgbm9ybWFsaXplZCAoMC0xKVxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFBvaW50KHgsIHkpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLm5vZGVzLmxlbmd0aDtcblx0XG5cdCAgICAgICAgdGhpcy5zb3J0UG9pbnRzKCk7XG5cdFxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ub2Rlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgaWYgKHggPCB0aGlzLm5vZGVzW2ldLngpIHtcblx0ICAgICAgICAgICAgaW5kZXggPSBpO1xuXHQgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIHRoaXMubm9kZXMuc3BsaWNlKGluZGV4LCAwLCBuZXcgUG9pbnQoe1xuXHQgICAgICAgICAgeDogeCxcblx0ICAgICAgICAgIHk6IHlcblx0ICAgICAgICB9LCB0aGlzKSk7XG5cdFxuXHQgICAgICAgIHRoaXMuc2NhbGVOb2RlKGluZGV4KTtcblx0XG5cdCAgICAgICAgdGhpcy5jYWxjdWxhdGVQb2ludHMoKTtcblx0ICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwgdGhpcy5wb2ludHMpO1xuXHRcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2Nhbjoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIEZpbmQgdGhlIGxldmVsIGF0IGEgY2VydGFpbiB4IGxvY2F0aW9uIG9uIHRoZSBlbnZlbG9wZS5cblx0ICAgICAgQHBhcmFtIHgge251bWJlcn0gVGhlIHggbG9jYXRpb24gdG8gZmluZCB0aGUgbGV2ZWwgb2YsIG5vcm1hbGl6ZWQgMC0xXG5cdCAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc2Nhbih4KSB7XG5cdCAgICAgICAgLy8gZmluZCBzdXJyb3VuZGluZyBwb2ludHNcblx0ICAgICAgICB2YXIgbmV4dEluZGV4ID0gdGhpcy5nZXRJbmRleEZyb21YKHgpO1xuXHQgICAgICAgIHZhciBwcmlvckluZGV4ID0gbmV4dEluZGV4IC0gMTtcblx0ICAgICAgICBpZiAocHJpb3JJbmRleCA8IDApIHtcblx0ICAgICAgICAgIHByaW9ySW5kZXggPSAwO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAobmV4dEluZGV4ID49IHRoaXMubm9kZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICBuZXh0SW5kZXggPSB0aGlzLm5vZGVzLmxlbmd0aCAtIDE7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBwcmlvclBvaW50ID0gdGhpcy5ub2Rlc1twcmlvckluZGV4XTtcblx0ICAgICAgICB2YXIgbmV4dFBvaW50ID0gdGhpcy5ub2Rlc1tuZXh0SW5kZXhdO1xuXHQgICAgICAgIHZhciBsb2MgPSBtYXRoLnNjYWxlKHgsIHByaW9yUG9pbnQueCwgbmV4dFBvaW50LngsIDAsIDEpO1xuXHQgICAgICAgIHZhciB2YWx1ZSA9IG1hdGguaW50ZXJwKGxvYywgcHJpb3JQb2ludC55LCBuZXh0UG9pbnQueSk7XG5cdCAgICAgICAgdGhpcy5lbWl0KFwic2NhblwiLCB2YWx1ZSk7XG5cdCAgICAgICAgcmV0dXJuIHZhbHVlO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbW92ZVBvaW50OiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgTW92ZSBhIGJyZWFrcG9pbnQgb24gdGhlIGVudmVsb3BlLlxuXHQgICAgICBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IG9mIHRoZSBicmVha3BvaW50IHRvIG1vdmVcblx0ICAgICAgQHBhcmFtIHgge251bWJlcn0gTmV3IHggbG9jYXRpb24sIG5vcm1hbGl6ZWQgMC0xXG5cdCAgICAgIEBwYXJhbSB5IHtudW1iZXJ9IE5ldyB5IGxvY2F0aW9uLCBub3JtYWxpemVkIDAtMVxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIG1vdmVQb2ludChpbmRleCwgeCwgeSkge1xuXHQgICAgICAgIHRoaXMubm9kZXNbaW5kZXhdLm1vdmUoeCwgeSk7XG5cdCAgICAgICAgdGhpcy5zY2FsZU5vZGUoaW5kZXgpO1xuXHQgICAgICAgIHRoaXMuY2FsY3VsYXRlUG9pbnRzKCk7XG5cdCAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMucG9pbnRzKTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgYWRqdXN0UG9pbnQ6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBNb3ZlIGEgYnJlYWtwb2ludCBvbiB0aGUgZW52ZWxvcGUgYnkgYSBjZXJ0YWluIGFtb3VudC5cblx0ICAgICAgQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCBvZiB0aGUgYnJlYWtwb2ludCB0byBtb3ZlXG5cdCAgICAgIEBwYXJhbSB4T2Zmc2V0IHtudW1iZXJ9IFggZGlzcGxhY2VtZW50LCBub3JtYWxpemVkIDAtMVxuXHQgICAgICBAcGFyYW0geU9mZnNldCB7bnVtYmVyfSBZIGRpc3BsYWNlbWVudCwgbm9ybWFsaXplZCAwLTFcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBhZGp1c3RQb2ludChpbmRleCwgeE9mZnNldCwgeU9mZnNldCkge1xuXHQgICAgICAgIHRoaXMubm9kZXNbaW5kZXhdLm1vdmUodGhpcy5ub2Rlc1tpbmRleF0ueCArIHhPZmZzZXQsIHRoaXMubm9kZXNbaW5kZXhdLnkgKyB5T2Zmc2V0KTtcblx0ICAgICAgICB0aGlzLnNjYWxlTm9kZShpbmRleCk7XG5cdCAgICAgICAgdGhpcy5jYWxjdWxhdGVQb2ludHMoKTtcblx0ICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwgdGhpcy5wb2ludHMpO1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBkZXN0cm95UG9pbnQ6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBSZW1vdmUgYSBicmVha3BvaW50IGZyb20gdGhlIGVudmVsb3BlLlxuXHQgICAgICBAcGFyYW0gaW5kZXgge251bWJlcn0gSW5kZXggb2YgdGhlIGJyZWFrcG9pbnQgdG8gcmVtb3ZlXG5cdCAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gZGVzdHJveVBvaW50KGluZGV4KSB7XG5cdCAgICAgICAgdGhpcy5ub2Rlc1tpbmRleF0uZGVzdHJveSgpO1xuXHQgICAgICAgIHRoaXMuY2FsY3VsYXRlUG9pbnRzKCk7XG5cdCAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMucG9pbnRzKTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2V0UG9pbnRzOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgUmVtb3ZlIGFsbCBleGlzdGluZyBicmVha3BvaW50cyBhbmQgYWRkIGFuIGVudGlyZWx5IG5ldyBzZXQgb2YgYnJlYWtwb2ludHMuXG5cdCAgICAgIEBwYXJhbSBhbGxQb2ludHMge2FycmF5fSBBbiBhcnJheSBvZiBvYmplY3RzIHdpdGggeC95IHByb3BlcnRpZXMgKG5vcm1hbGl6ZWQgMC0xKS4gRWFjaCBvYmplY3QgaW4gdGhlIGFycmF5IHNwZWNpZmljZXMgdGhlIHgveSBsb2NhdGlvbiBvZiBhIG5ldyBicmVha3BvaW50IHRvIGJlIGFkZGVkLlxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldFBvaW50cyhhbGxQb2ludHMpIHtcblx0ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXHRcblx0ICAgICAgICB3aGlsZSAodGhpcy5ub2Rlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgIHRoaXMubm9kZXNbMF0uZGVzdHJveSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBhbGxQb2ludHMuZm9yRWFjaChmdW5jdGlvbiAocG9pbnQpIHtcblx0ICAgICAgICAgIF90aGlzLmFkZFBvaW50KHBvaW50LngsIHBvaW50LnkpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuY2FsY3VsYXRlUG9pbnRzKCk7XG5cdCAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMucG9pbnRzKTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBFbnZlbG9wZTtcblx0fSkoSW50ZXJmYWNlKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gRW52ZWxvcGU7XG5cbi8qKiovIH0pLFxuLyogMzUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7IH0gfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gZGVzYyAmJiBkZXNjLndyaXRhYmxlKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfTtcblx0XG5cdHZhciBfaW5oZXJpdHMgPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBkb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xuXHQvL2xldCBtYXRoID0gcmVxdWlyZSgnLi4vdXRpbC9tYXRoJyk7XG5cdHZhciBJbnRlcmZhY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xuXHRcblx0LyoqXG5cdCogU3BlY3Ryb2dyYW1cblx0KlxuXHQqIEBkZXNjcmlwdGlvbiBBdWRpbyBzcGVjdHJ1bSB2aXN1YWxpemF0aW9uXG5cdCpcblx0KiBAZGVtbyA8c3BhbiBuZXh1cy11aT1cInNwZWN0cm9ncmFtXCI+PC9zcGFuPlxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgc3BlY3Ryb2dyYW0gPSBuZXcgTmV4dXMuU3BlY3Ryb2dyYW0oJyN0YXJnZXQnKVxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgc3BlY3Ryb2dyYW0gPSBuZXcgTmV4dXMuU3BlY3Ryb2dyYW0oJyN0YXJnZXQnLHtcblx0KiAgICdzaXplJzogWzMwMCwxNTBdXG5cdCogfSlcblx0KlxuXHQqIEBvdXRwdXRcblx0KiAmbmJzcDtcblx0KiBObyBldmVudHNcblx0KlxuXHQqL1xuXHRcblx0dmFyIGNvbnRleHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpLmNvbnRleHQ7XG5cdFxuXHR2YXIgU3BlY3Ryb2dyYW0gPSAoZnVuY3Rpb24gKF9JbnRlcmZhY2UpIHtcblx0ICBmdW5jdGlvbiBTcGVjdHJvZ3JhbSgpIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTcGVjdHJvZ3JhbSk7XG5cdFxuXHQgICAgdmFyIG9wdGlvbnMgPSBbXCJzY2FsZVwiLCBcInZhbHVlXCJdO1xuXHRcblx0ICAgIHZhciBkZWZhdWx0cyA9IHtcblx0ICAgICAgc2l6ZTogWzMwMCwgMTUwXVxuXHQgICAgfTtcblx0XG5cdCAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihTcGVjdHJvZ3JhbS5wcm90b3R5cGUpLCBcImNvbnN0cnVjdG9yXCIsIHRoaXMpLmNhbGwodGhpcywgYXJndW1lbnRzLCBvcHRpb25zLCBkZWZhdWx0cyk7XG5cdFxuXHQgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dCgpOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblx0XG5cdCAgICB0aGlzLmFuYWx5c2VyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUFuYWx5c2VyKCk7XG5cdCAgICB0aGlzLmFuYWx5c2VyLmZmdFNpemUgPSAyMDQ4O1xuXHQgICAgdGhpcy5idWZmZXJMZW5ndGggPSB0aGlzLmFuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50O1xuXHQgICAgdGhpcy5kYXRhQXJyYXkgPSBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlckxlbmd0aCk7XG5cdFxuXHQgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuXHRcblx0ICAgIHRoaXMuc291cmNlID0gZmFsc2U7XG5cdFxuXHQgICAgdGhpcy5pbml0KCk7XG5cdCAgfVxuXHRcblx0ICBfaW5oZXJpdHMoU3BlY3Ryb2dyYW0sIF9JbnRlcmZhY2UpO1xuXHRcblx0ICBfY3JlYXRlQ2xhc3MoU3BlY3Ryb2dyYW0sIHtcblx0ICAgIGJ1aWxkRnJhbWU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkRnJhbWUoKSB7XG5cdCAgICAgICAgdGhpcy5jYW52YXMgPSBuZXcgZG9tLlNtYXJ0Q2FudmFzKHRoaXMucGFyZW50KTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQgPSB0aGlzLmNhbnZhcy5lbGVtZW50O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2l6ZUludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc2l6ZUludGVyZmFjZSgpIHtcblx0ICAgICAgICB0aGlzLmNhbnZhcy5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29sb3JJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbG9ySW50ZXJmYWNlKCkge1xuXHQgICAgICAgIHRoaXMuY2FudmFzLmVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5jb2xvcnMuZmlsbDtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlbmRlcjoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHRcblx0ICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcblx0ICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnJlbmRlci5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIHRoaXMuYW5hbHlzZXIuZ2V0Qnl0ZUZyZXF1ZW5jeURhdGEodGhpcy5kYXRhQXJyYXkpO1xuXHRcblx0ICAgICAgICB0aGlzLmNhbnZhcy5jb250ZXh0LmZpbGxTdHlsZSA9IHRoaXMuY29sb3JzLmZpbGw7XG5cdCAgICAgICAgdGhpcy5jYW52YXMuY29udGV4dC5maWxsUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy5lbGVtZW50LndpZHRoLCB0aGlzLmNhbnZhcy5lbGVtZW50LmhlaWdodCk7XG5cdFxuXHQgICAgICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLmRhdGFBcnJheSkge1xuXHRcblx0ICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kYXRhQXJyYXkpO1xuXHRcblx0ICAgICAgICAgIHZhciBiYXJXaWR0aCA9IHRoaXMuY2FudmFzLmVsZW1lbnQud2lkdGggLyB0aGlzLmJ1ZmZlckxlbmd0aDtcblx0ICAgICAgICAgIHZhciBiYXJIZWlnaHQgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgICB2YXIgeCA9IDA7XG5cdFxuXHQgICAgICAgICAgdmFyIGRlZmluaXRpb24gPSB0aGlzLmNhbnZhcy5lbGVtZW50LndpZHRoIC8gNTA7XG5cdFxuXHQgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJ1ZmZlckxlbmd0aDsgaSA9IGkgKyBkZWZpbml0aW9uKSB7XG5cdCAgICAgICAgICAgIGJhckhlaWdodCA9IE1hdGgubWF4LmFwcGx5KG51bGwsIHRoaXMuZGF0YUFycmF5LnN1YmFycmF5KGksIGkgKyBkZWZpbml0aW9uKSk7XG5cdCAgICAgICAgICAgIGJhckhlaWdodCAvPSAyNTU7XG5cdCAgICAgICAgICAgIGJhckhlaWdodCAqPSB0aGlzLmNhbnZhcy5lbGVtZW50LmhlaWdodDtcblx0XG5cdCAgICAgICAgICAgIHRoaXMuY2FudmFzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5jb2xvcnMuYWNjZW50O1xuXHQgICAgICAgICAgICB0aGlzLmNhbnZhcy5jb250ZXh0LmZpbGxSZWN0KHgsIHRoaXMuY2FudmFzLmVsZW1lbnQuaGVpZ2h0IC0gYmFySGVpZ2h0LCBiYXJXaWR0aCAqIGRlZmluaXRpb24sIGJhckhlaWdodCk7XG5cdFxuXHQgICAgICAgICAgICB4ICs9IGJhcldpZHRoICogZGVmaW5pdGlvbjtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjb25uZWN0OiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgRXF1aXZhbGVudCB0byBcInBhdGNoaW5nIGluXCIgYW4gYXVkaW8gbm9kZSB0byB2aXN1YWxpemUuIE5PVEU6IFlvdSBjYW5ub3QgY29ubmVjdCBhdWRpbyBub2RlcyBhY3Jvc3MgdHdvIGRpZmZlcmVudCBhdWRpbyBjb250ZXh0cy4gTmV4dXNVSSBydW5zIGl0cyBhdWRpbyBhbmFseXNpcyBvbiBpdHMgb3duIGF1ZGlvIGNvbnRleHQsIE5leHVzLmNvbnRleHQuIElmIHRoZSBhdWRpbyBub2RlIHlvdSBhcmUgdmlzdWFsaXppbmcgaXMgY3JlYXRlZCBvbiBhIGRpZmZlcmVudCBhdWRpbyBjb250ZXh0LCB5b3Ugd2lsbCBuZWVkIHRvIHRlbGwgTmV4dXNVSSB0byB1c2UgdGhhdCBjb250ZXh0IGluc3RlYWQ6IGkuZS4gTmV4dXMuY29udGV4dCA9IFlvdXJBdWRpb0NvbnRleHROYW1lLiBGb3IgZXhhbXBsZSwgaW4gVG9uZUpTIHByb2plY3RzLCB0aGUgbGluZSB3b3VsZCBiZTogTmV4dXMuY29udGV4dCA9IFRvbmUuY29udGV4dCAuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB3cml0ZSB0aGF0IGxpbmUgb2YgY29kZSBvbmx5IG9uY2UgYXQgdGhlIGJlZ2lubmluZyBvZiB5b3VyIHByb2plY3QuXG5cdCAgICAgIEBwYXJhbSBub2RlIHtBdWRpb05vZGV9IFRoZSBhdWRpbyBub2RlIHRvIHZpc3VhbGl6ZVxuXHQgICAgICBAZXhhbXBsZSBOZXh1cy5jb250ZXh0ID0gVG9uZS5jb250ZXh0IC8vIG9yIGFub3RoZXIgYXVkaW8gY29udGV4dCB5b3UgaGF2ZSBjcmVhdGVkXG5cdCAgICAgIHNwZWN0cm9ncmFtLmNvbm5lY3QoIFRvbmUuTWFzdGVyICk7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY29ubmVjdChub2RlKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuc291cmNlKSB7XG5cdCAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5zb3VyY2UgPSBub2RlO1xuXHQgICAgICAgIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5hbmFseXNlcik7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGRpc2Nvbm5lY3Q6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBTdG9wIHZpc3VhbGl6aW5nIHRoZSBzb3VyY2Ugbm9kZSBhbmQgZGlzY29ubmVjdCBpdC5cblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNjb25uZWN0KCkge1xuXHQgICAgICAgIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5hbmFseXNlcik7XG5cdCAgICAgICAgdGhpcy5zb3VyY2UgPSBudWxsO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY2xpY2s6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsaWNrKCkge1xuXHQgICAgICAgIHRoaXMuYWN0aXZlID0gIXRoaXMuYWN0aXZlO1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjdXN0b21EZXN0cm95OiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjdXN0b21EZXN0cm95KCkge1xuXHQgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIFNwZWN0cm9ncmFtO1xuXHR9KShJbnRlcmZhY2UpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBTcGVjdHJvZ3JhbTtcblxuLyoqKi8gfSksXG4vKiAzNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHsgdmFyIHByb3AgPSBwcm9wc1trZXldOyBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChwcm9wLnZhbHVlKSBwcm9wLndyaXRhYmxlID0gdHJ1ZTsgfSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKTsgfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXHRcblx0dmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyByZXR1cm4gZ2V0KHBhcmVudCwgcHJvcGVydHksIHJlY2VpdmVyKTsgfSB9IGVsc2UgaWYgKFwidmFsdWVcIiBpbiBkZXNjICYmIGRlc2Mud3JpdGFibGUpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9O1xuXHRcblx0dmFyIF9pbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9O1xuXHRcblx0dmFyIF9jbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9O1xuXHRcblx0dmFyIGRvbSA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG5cdHZhciBtYXRoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcblx0dmFyIEludGVyZmFjZSA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5cdFxuXHQvKipcblx0KiBNZXRlclxuXHQqXG5cdCogQGRlc2NyaXB0aW9uIFN0ZXJlbyBkZWNpYmVsIG1ldGVyXG5cdCpcblx0KiBAZGVtbyA8c3BhbiBuZXh1cy11aT1cIm1ldGVyXCI+PC9zcGFuPlxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgbWV0ZXIgPSBuZXcgTmV4dXMuTWV0ZXIoJyN0YXJnZXQnKVxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgbWV0ZXIgPSBuZXcgTmV4dXMuTWV0ZXIoJyN0YXJnZXQnLHtcblx0KiAgIHNpemU6IFs3NSw3NV1cblx0KiB9KVxuXHQqXG5cdCogQG91dHB1dFxuXHQqICZuYnNwO1xuXHQqIE5vIGV2ZW50c1xuXHQqXG5cdCovXG5cdFxuXHR2YXIgY29udGV4dCA9IF9fd2VicGFja19yZXF1aXJlX18oMSkuY29udGV4dDtcblx0XG5cdHZhciBNZXRlciA9IChmdW5jdGlvbiAoX0ludGVyZmFjZSkge1xuXHQgIGZ1bmN0aW9uIE1ldGVyKCkge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE1ldGVyKTtcblx0XG5cdCAgICB2YXIgb3B0aW9ucyA9IFtcInNjYWxlXCIsIFwidmFsdWVcIl07XG5cdFxuXHQgICAgdmFyIGRlZmF1bHRzID0ge1xuXHQgICAgICBzaXplOiBbMzAsIDEwMF1cblx0ICAgIH07XG5cdFxuXHQgICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoTWV0ZXIucHJvdG90eXBlKSwgXCJjb25zdHJ1Y3RvclwiLCB0aGlzKS5jYWxsKHRoaXMsIGFyZ3VtZW50cywgb3B0aW9ucywgZGVmYXVsdHMpO1xuXHRcblx0ICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQoKTsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cdFxuXHQgICAgdGhpcy5jaGFubmVscyA9IDI7XG5cdFxuXHQgICAgdGhpcy5zcGxpdHRlciA9IHRoaXMuY29udGV4dC5jcmVhdGVDaGFubmVsU3BsaXR0ZXIodGhpcy5jaGFubmVscyk7XG5cdFxuXHQgICAgdGhpcy5hbmFseXNlcnMgPSBbXTtcblx0XG5cdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hhbm5lbHM7IGkrKykge1xuXHQgICAgICB2YXIgYW5hbHlzZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQW5hbHlzZXIoKTtcblx0ICAgICAgdGhpcy5zcGxpdHRlci5jb25uZWN0KGFuYWx5c2VyLCBpKTtcblx0ICAgICAgYW5hbHlzZXIuZmZ0U2l6ZSA9IDEwMjQ7XG5cdCAgICAgIGFuYWx5c2VyLnNtb290aGluZ1RpbWVDb25zdGFudCA9IDE7XG5cdCAgICAgIHRoaXMuYW5hbHlzZXJzLnB1c2goYW5hbHlzZXIpO1xuXHQgICAgfVxuXHQgICAgdGhpcy5idWZmZXJMZW5ndGggPSB0aGlzLmFuYWx5c2Vyc1swXS5mcmVxdWVuY3lCaW5Db3VudDtcblx0ICAgIHRoaXMuZGF0YUFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmJ1ZmZlckxlbmd0aCk7XG5cdFxuXHQgICAgLypcblx0ICAgICAgICAvLyBhZGQgbGluZWFyIGdyYWRpZW50XG5cdCAgICAgICAgdmFyIGdyZCA9IGNhbnZhc0N0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCgwLCAwLCAwLCBjYW52YXMuaGVpZ2h0KTtcblx0ICAgICAgICAvLyBsaWdodCBibHVlXG5cdCAgICAgICAgZ3JkLmFkZENvbG9yU3RvcCgwLCAnIzAwMCcpO1xuXHQgICAgICAgIGdyZC5hZGRDb2xvclN0b3AoMC4yLCAnI2JiYicpO1xuXHQgICAgICAgIGdyZC5hZGRDb2xvclN0b3AoMC40LCAnI2QxOCcpO1xuXHQgICAgICAgIC8vIGRhcmsgYmx1ZVxuXHQgICAgICAgIGdyZC5hZGRDb2xvclN0b3AoMSwgJyNkMTgnKTtcblx0ICAgICAgICBjYW52YXNDdHguZmlsbFN0eWxlID0gZ3JkOyAqL1xuXHRcblx0ICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcblx0XG5cdCAgICB0aGlzLmRiID0gLUluZmluaXR5O1xuXHRcblx0ICAgIHRoaXMuaW5pdCgpO1xuXHRcblx0ICAgIHRoaXMubWV0ZXJXaWR0aCA9IHRoaXMuY2FudmFzLmVsZW1lbnQud2lkdGggLyB0aGlzLmNoYW5uZWxzO1xuXHRcblx0ICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgfVxuXHRcblx0ICBfaW5oZXJpdHMoTWV0ZXIsIF9JbnRlcmZhY2UpO1xuXHRcblx0ICBfY3JlYXRlQ2xhc3MoTWV0ZXIsIHtcblx0ICAgIGJ1aWxkRnJhbWU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkRnJhbWUoKSB7XG5cdCAgICAgICAgdGhpcy5jYW52YXMgPSBuZXcgZG9tLlNtYXJ0Q2FudmFzKHRoaXMucGFyZW50KTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQgPSB0aGlzLmNhbnZhcy5lbGVtZW50O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2l6ZUludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc2l6ZUludGVyZmFjZSgpIHtcblx0ICAgICAgICB0aGlzLmNhbnZhcy5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29sb3JJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbG9ySW50ZXJmYWNlKCkge1xuXHQgICAgICAgIHRoaXMuY2FudmFzLmVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5jb2xvcnMuZmlsbDtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlbmRlcjoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHRcblx0ICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcblx0ICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnJlbmRlci5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIHRoaXMuY2FudmFzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5jb2xvcnMuZmlsbDtcblx0ICAgICAgICB0aGlzLmNhbnZhcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLmVsZW1lbnQud2lkdGgsIHRoaXMuY2FudmFzLmVsZW1lbnQuaGVpZ2h0KTtcblx0XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFuYWx5c2Vycy5sZW5ndGg7IGkrKykge1xuXHRcblx0ICAgICAgICAgIGlmICh0aGlzLnNvdXJjZSkge1xuXHRcblx0ICAgICAgICAgICAgdGhpcy5hbmFseXNlcnNbaV0uZ2V0RmxvYXRUaW1lRG9tYWluRGF0YSh0aGlzLmRhdGFBcnJheSk7XG5cdFxuXHQgICAgICAgICAgICB2YXIgcm1zID0gMDtcblx0XG5cdCAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB0aGlzLmRhdGFBcnJheS5sZW5ndGg7IF9pKyspIHtcblx0ICAgICAgICAgICAgICBybXMgKz0gdGhpcy5kYXRhQXJyYXlbX2ldICogdGhpcy5kYXRhQXJyYXlbX2ldO1xuXHQgICAgICAgICAgICB9XG5cdFxuXHQgICAgICAgICAgICBybXMgPSBNYXRoLnNxcnQocm1zIC8gdGhpcy5kYXRhQXJyYXkubGVuZ3RoKTtcblx0XG5cdCAgICAgICAgICAgIHRoaXMuZGIgPSAyMCAqIE1hdGgubG9nMTAocm1zKTtcblx0ICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYiA+IC0yMDAgJiYgdGhpcy5kYiAhPT0gLUluZmluaXR5KSB7XG5cdCAgICAgICAgICAgIHRoaXMuZGIgLT0gMTtcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuZGIgPSAtSW5maW5pdHk7XG5cdCAgICAgICAgICB9XG5cdFxuXHQgICAgICAgICAgLy9jb25zb2xlLmxvZyhkYilcblx0XG5cdCAgICAgICAgICBpZiAodGhpcy5kYiA+IC03MCkge1xuXHRcblx0ICAgICAgICAgICAgdmFyIGxpbmVhciA9IG1hdGgubm9ybWFsaXplKHRoaXMuZGIsIC03MCwgNSk7XG5cdCAgICAgICAgICAgIHZhciBleHAgPSBsaW5lYXIgKiBsaW5lYXI7XG5cdCAgICAgICAgICAgIHZhciB5ID0gbWF0aC5zY2FsZShleHAsIDAsIDEsIHRoaXMuZWxlbWVudC5oZWlnaHQsIDApO1xuXHRcblx0ICAgICAgICAgICAgdGhpcy5jYW52YXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLmNvbG9ycy5hY2NlbnQ7XG5cdCAgICAgICAgICAgIHRoaXMuY2FudmFzLmNvbnRleHQuZmlsbFJlY3QodGhpcy5tZXRlcldpZHRoICogaSwgeSwgdGhpcy5tZXRlcldpZHRoLCB0aGlzLmNhbnZhcy5lbGVtZW50LmhlaWdodCAtIHkpO1xuXHRcblx0ICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcInJlbmRlcmluZy4uLlwiKVxuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNvbm5lY3Q6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBFcXVpdmFsZW50IHRvIFwicGF0Y2hpbmcgaW5cIiBhbiBhdWRpbyBub2RlIHRvIHZpc3VhbGl6ZS4gTk9URTogWW91IGNhbm5vdCBjb25uZWN0IGF1ZGlvIG5vZGVzIGFjcm9zcyB0d28gZGlmZmVyZW50IGF1ZGlvIGNvbnRleHRzLiBOZXh1c1VJIHJ1bnMgaXRzIGF1ZGlvIGFuYWx5c2lzIG9uIGl0cyBvd24gYXVkaW8gY29udGV4dCwgTmV4dXMuY29udGV4dC4gSWYgdGhlIGF1ZGlvIG5vZGUgeW91IGFyZSB2aXN1YWxpemluZyBpcyBjcmVhdGVkIG9uIGEgZGlmZmVyZW50IGF1ZGlvIGNvbnRleHQsIHlvdSB3aWxsIG5lZWQgdG8gdGVsbCBOZXh1c1VJIHRvIHVzZSB0aGF0IGNvbnRleHQgaW5zdGVhZDogaS5lLiBOZXh1cy5jb250ZXh0ID0gWW91ckF1ZGlvQ29udGV4dE5hbWUuIEZvciBleGFtcGxlLCBpbiBUb25lSlMgcHJvamVjdHMsIHRoZSBsaW5lIHdvdWxkIGJlOiBOZXh1cy5jb250ZXh0ID0gVG9uZS5jb250ZXh0IC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHdyaXRlIHRoYXQgbGluZSBvZiBjb2RlIG9ubHkgb25jZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHlvdXIgcHJvamVjdC5cblx0ICAgICAgQHBhcmFtIG5vZGUge0F1ZGlvTm9kZX0gVGhlIGF1ZGlvIG5vZGUgdG8gdmlzdWFsaXplXG5cdCAgICAgIEBwYXJhbSBjaGFubmVscyB7bnVtYmVyfSAob3B0aW9uYWwpIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgaW4gdGhlIHNvdXJjZSBub2RlIHRvIHdhdGNoLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgaW50ZXJmYWNlIHdpbGwgbG9vayBmb3IgYSAuY2hhbm5lbENvdW50IHByb3BlcnR5IG9uIHRoZSBpbnB1dCBub2RlLiBJZiBpdCBkb2VzIG5vdCBleGlzdCwgdGhlIGludGVyZmFjZSB3aWxsIGRlZmF1bHQgdG8gMSBjaGFubmVsLlxuXHQgICAgICBAZXhhbXBsZSBOZXh1cy5jb250ZXh0ID0gVG9uZS5jb250ZXh0IC8vIG9yIGFub3RoZXIgYXVkaW8gY29udGV4dCB5b3UgaGF2ZSBjcmVhdGVkXG5cdCAgICAgIG1ldGVyLmNvbm5lY3QoIFRvbmUuTWFzdGVyLCAyICk7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY29ubmVjdChub2RlLCBjaGFubmVscykge1xuXHQgICAgICAgIGlmICh0aGlzLnNvdXJjZSkge1xuXHQgICAgICAgICAgdGhpcy5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vdGhpcy5kdW1teS5kaXNjb25uZWN0KHRoaXMuc3BsaXR0ZXIpO1xuXHRcblx0ICAgICAgICBpZiAoY2hhbm5lbHMpIHtcblx0ICAgICAgICAgIHRoaXMuY2hhbm5lbHMgPSBjaGFubmVscztcblx0ICAgICAgICB9IGVsc2UgaWYgKG5vZGUuY2hhbm5lbENvdW50KSB7XG5cdCAgICAgICAgICB0aGlzLmNoYW5uZWxzID0gbm9kZS5jaGFubmVsQ291bnQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMuY2hhbm5lbHMgPSAyO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLm1ldGVyV2lkdGggPSB0aGlzLmNhbnZhcy5lbGVtZW50LndpZHRoIC8gdGhpcy5jaGFubmVscztcblx0XG5cdCAgICAgICAgdGhpcy5zb3VyY2UgPSBub2RlO1xuXHQgICAgICAgIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5zcGxpdHRlcik7XG5cdFxuXHQgICAgICAgIC8vICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZGlzY29ubmVjdDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFN0b3AgdmlzdWFsaXppbmcgdGhlIHNvdXJjZSBub2RlIGFuZCBkaXNjb25uZWN0IGl0LlxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRpc2Nvbm5lY3QoKSB7XG5cdFxuXHQgICAgICAgIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5zcGxpdHRlcik7XG5cdCAgICAgICAgdGhpcy5zb3VyY2UgPSBmYWxzZTtcblx0ICAgICAgICAvLyAgdGhpcy5kdW1teS5jb25uZWN0KHRoaXMuc3BsaXR0ZXIpO1xuXHQgICAgICAgIHRoaXMubWV0ZXJXaWR0aCA9IHRoaXMuY2FudmFzLmVsZW1lbnQud2lkdGggLyB0aGlzLmNoYW5uZWxzO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY2xpY2s6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsaWNrKCkge1xuXHQgICAgICAgIHRoaXMuYWN0aXZlID0gIXRoaXMuYWN0aXZlO1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjdXN0b21EZXN0cm95OiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjdXN0b21EZXN0cm95KCkge1xuXHQgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIE1ldGVyO1xuXHR9KShJbnRlcmZhY2UpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBNZXRlcjtcblxuLyoqKi8gfSksXG4vKiAzNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHsgdmFyIHByb3AgPSBwcm9wc1trZXldOyBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChwcm9wLnZhbHVlKSBwcm9wLndyaXRhYmxlID0gdHJ1ZTsgfSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKTsgfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXHRcblx0dmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyByZXR1cm4gZ2V0KHBhcmVudCwgcHJvcGVydHksIHJlY2VpdmVyKTsgfSB9IGVsc2UgaWYgKFwidmFsdWVcIiBpbiBkZXNjICYmIGRlc2Mud3JpdGFibGUpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9O1xuXHRcblx0dmFyIF9pbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9O1xuXHRcblx0dmFyIF9jbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9O1xuXHRcblx0dmFyIGRvbSA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG5cdHZhciBJbnRlcmZhY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xuXHRcblx0LyoqXG5cdCogT3NjaWxsb3Njb3BlXG5cdCpcblx0KiBAZGVzY3JpcHRpb24gVmlzdWFsaXplcyBhIHdhdmVmb3JtJ3Mgc3RyZWFtIG9mIHZhbHVlcy5cblx0KlxuXHQqIEBkZW1vIDxzcGFuIG5leHVzLXVpPVwib3NjaWxsb3Njb3BlXCI+PC9zcGFuPlxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgb3NjaWxsb3Njb3BlID0gbmV3IE5leHVzLk9zY2lsbG9zY29wZSgnI3RhcmdldCcpXG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciBvc2NpbGxvc2NvcGUgPSBuZXcgTmV4dXMuT3NjaWxsb3Njb3BlKCcjdGFyZ2V0Jyx7XG5cdCogICAnc2l6ZSc6IFszMDAsMTUwXVxuXHQqIH0pXG5cdCpcblx0KiBAb3V0cHV0XG5cdCogJm5ic3A7XG5cdCogTm8gZXZlbnRzXG5cdCpcblx0Ki9cblx0XG5cdHZhciBjb250ZXh0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKS5jb250ZXh0O1xuXHRcblx0dmFyIE9zY2lsbG9zY29wZSA9IChmdW5jdGlvbiAoX0ludGVyZmFjZSkge1xuXHQgIGZ1bmN0aW9uIE9zY2lsbG9zY29wZSgpIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBPc2NpbGxvc2NvcGUpO1xuXHRcblx0ICAgIHZhciBvcHRpb25zID0gW1wic2NhbGVcIiwgXCJ2YWx1ZVwiXTtcblx0XG5cdCAgICB2YXIgZGVmYXVsdHMgPSB7XG5cdCAgICAgIHNpemU6IFszMDAsIDE1MF1cblx0ICAgIH07XG5cdFxuXHQgICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoT3NjaWxsb3Njb3BlLnByb3RvdHlwZSksIFwiY29uc3RydWN0b3JcIiwgdGhpcykuY2FsbCh0aGlzLCBhcmd1bWVudHMsIG9wdGlvbnMsIGRlZmF1bHRzKTtcblx0XG5cdCAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0KCk7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXHRcblx0ICAgIHRoaXMuYW5hbHlzZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQW5hbHlzZXIoKTtcblx0ICAgIHRoaXMuYW5hbHlzZXIuZmZ0U2l6ZSA9IDIwNDg7XG5cdCAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IHRoaXMuYW5hbHlzZXIuZnJlcXVlbmN5QmluQ291bnQ7XG5cdCAgICB0aGlzLmRhdGFBcnJheSA9IG5ldyBVaW50OEFycmF5KHRoaXMuYnVmZmVyTGVuZ3RoKTtcblx0ICAgIHRoaXMuYW5hbHlzZXIuZ2V0Qnl0ZVRpbWVEb21haW5EYXRhKHRoaXMuZGF0YUFycmF5KTtcblx0XG5cdCAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG5cdFxuXHQgICAgdGhpcy5zb3VyY2UgPSBmYWxzZTtcblx0XG5cdCAgICB0aGlzLmluaXQoKTtcblx0XG5cdCAgICB0aGlzLnJlbmRlcigpO1xuXHQgIH1cblx0XG5cdCAgX2luaGVyaXRzKE9zY2lsbG9zY29wZSwgX0ludGVyZmFjZSk7XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhPc2NpbGxvc2NvcGUsIHtcblx0ICAgIGJ1aWxkRnJhbWU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkRnJhbWUoKSB7XG5cdCAgICAgICAgdGhpcy5jYW52YXMgPSBuZXcgZG9tLlNtYXJ0Q2FudmFzKHRoaXMucGFyZW50KTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQgPSB0aGlzLmNhbnZhcy5lbGVtZW50O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2l6ZUludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc2l6ZUludGVyZmFjZSgpIHtcblx0ICAgICAgICB0aGlzLmNhbnZhcy5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29sb3JJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbG9ySW50ZXJmYWNlKCkge1xuXHQgICAgICAgIHRoaXMuY2FudmFzLmVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5jb2xvcnMuZmlsbDtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlbmRlcjoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHRcblx0ICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcblx0ICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnJlbmRlci5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIHRoaXMuYW5hbHlzZXIuZ2V0Qnl0ZVRpbWVEb21haW5EYXRhKHRoaXMuZGF0YUFycmF5KTtcblx0XG5cdCAgICAgICAgdGhpcy5jYW52YXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLmNvbG9ycy5maWxsO1xuXHQgICAgICAgIHRoaXMuY2FudmFzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy5jYW52YXMuZWxlbWVudC53aWR0aCwgdGhpcy5jYW52YXMuZWxlbWVudC5oZWlnaHQpO1xuXHRcblx0ICAgICAgICB0aGlzLmNhbnZhcy5jb250ZXh0LmxpbmVXaWR0aCA9IH4gfih0aGlzLmhlaWdodCAvIDEwMCArIDIpO1xuXHQgICAgICAgIHRoaXMuY2FudmFzLmNvbnRleHQuc3Ryb2tlU3R5bGUgPSB0aGlzLmNvbG9ycy5hY2NlbnQ7XG5cdFxuXHQgICAgICAgIHRoaXMuY2FudmFzLmNvbnRleHQuYmVnaW5QYXRoKCk7XG5cdFxuXHQgICAgICAgIGlmICh0aGlzLnNvdXJjZSkge1xuXHRcblx0ICAgICAgICAgIHZhciBzbGljZVdpZHRoID0gdGhpcy5jYW52YXMuZWxlbWVudC53aWR0aCAqIDEgLyB0aGlzLmJ1ZmZlckxlbmd0aDtcblx0ICAgICAgICAgIHZhciB4ID0gMDtcblx0XG5cdCAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYnVmZmVyTGVuZ3RoOyBpKyspIHtcblx0XG5cdCAgICAgICAgICAgIHZhciB2ID0gdGhpcy5kYXRhQXJyYXlbaV0gLyAxMjg7XG5cdCAgICAgICAgICAgIHZhciB5ID0gdiAqIHRoaXMuY2FudmFzLmVsZW1lbnQuaGVpZ2h0IC8gMjtcblx0XG5cdCAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG5cdCAgICAgICAgICAgICAgdGhpcy5jYW52YXMuY29udGV4dC5tb3ZlVG8oeCwgeSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgdGhpcy5jYW52YXMuY29udGV4dC5saW5lVG8oeCwgeSk7XG5cdCAgICAgICAgICAgIH1cblx0XG5cdCAgICAgICAgICAgIHggKz0gc2xpY2VXaWR0aDtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy5jYW52YXMuY29udGV4dC5tb3ZlVG8oMCwgdGhpcy5jYW52YXMuZWxlbWVudC5oZWlnaHQgLyAyKTtcblx0ICAgICAgICAgIHRoaXMuY2FudmFzLmNvbnRleHQubGluZVRvKHRoaXMuY2FudmFzLmVsZW1lbnQud2lkdGgsIHRoaXMuY2FudmFzLmVsZW1lbnQuaGVpZ2h0IC8gMik7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICB0aGlzLmNhbnZhcy5jb250ZXh0LnN0cm9rZSgpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29ubmVjdDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIEVxdWl2YWxlbnQgdG8gXCJwYXRjaGluZyBpblwiIGFuIGF1ZGlvIG5vZGUgdG8gdmlzdWFsaXplLiBOT1RFOiBZb3UgY2Fubm90IGNvbm5lY3QgYXVkaW8gbm9kZXMgYWNyb3NzIHR3byBkaWZmZXJlbnQgYXVkaW8gY29udGV4dHMuIE5leHVzVUkgcnVucyBpdHMgYXVkaW8gYW5hbHlzaXMgb24gaXRzIG93biBhdWRpbyBjb250ZXh0LCBOZXh1cy5jb250ZXh0LiBJZiB0aGUgYXVkaW8gbm9kZSB5b3UgYXJlIHZpc3VhbGl6aW5nIGlzIGNyZWF0ZWQgb24gYSBkaWZmZXJlbnQgYXVkaW8gY29udGV4dCwgeW91IHdpbGwgbmVlZCB0byB0ZWxsIE5leHVzVUkgdG8gdXNlIHRoYXQgY29udGV4dCBpbnN0ZWFkOiBpLmUuIE5leHVzLmNvbnRleHQgPSBZb3VyQXVkaW9Db250ZXh0TmFtZS4gRm9yIGV4YW1wbGUsIGluIFRvbmVKUyBwcm9qZWN0cywgdGhlIGxpbmUgd291bGQgYmU6IE5leHVzLmNvbnRleHQgPSBUb25lLmNvbnRleHQgLiBXZSByZWNvbW1lbmQgdGhhdCB5b3Ugd3JpdGUgdGhhdCBsaW5lIG9mIGNvZGUgb25seSBvbmNlIGF0IHRoZSBiZWdpbm5pbmcgb2YgeW91ciBwcm9qZWN0LlxuXHQgICAgICBAcGFyYW0gbm9kZSB7QXVkaW9Ob2RlfSBUaGUgYXVkaW8gbm9kZSB0byB2aXN1YWxpemVcblx0ICAgICAgQGV4YW1wbGUgTmV4dXMuY29udGV4dCA9IFRvbmUuY29udGV4dCAvLyBvciBhbm90aGVyIGF1ZGlvIGNvbnRleHQgeW91IGhhdmUgY3JlYXRlZFxuXHQgICAgICBvc2NpbGxvc2NvcGUuY29ubmVjdCggVG9uZS5NYXN0ZXIgKTtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb25uZWN0KG5vZGUpIHtcblx0XG5cdCAgICAgICAgaWYgKHRoaXMuc291cmNlKSB7XG5cdCAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIHRoaXMuc291cmNlID0gbm9kZTtcblx0ICAgICAgICB0aGlzLnNvdXJjZS5jb25uZWN0KHRoaXMuYW5hbHlzZXIpO1xuXHRcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZGlzY29ubmVjdDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFN0b3AgdmlzdWFsaXppbmcgdGhlIHNvdXJjZSBub2RlIGFuZCBkaXNjb25uZWN0IGl0LlxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRpc2Nvbm5lY3QoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuc291cmNlKSB7XG5cdCAgICAgICAgICB0aGlzLnNvdXJjZS5kaXNjb25uZWN0KHRoaXMuYW5hbHlzZXIpO1xuXHQgICAgICAgICAgdGhpcy5zb3VyY2UgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNsaWNrOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGljaygpIHtcblx0ICAgICAgICB0aGlzLmFjdGl2ZSA9ICF0aGlzLmFjdGl2ZTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY3VzdG9tRGVzdHJveToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY3VzdG9tRGVzdHJveSgpIHtcblx0ICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBPc2NpbGxvc2NvcGU7XG5cdH0pKEludGVyZmFjZSk7XG5cdFxuXHRtb2R1bGUuZXhwb3J0cyA9IE9zY2lsbG9zY29wZTtcblxuLyoqKi8gfSksXG4vKiAzOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9pbnRlcm9wUmVxdWlyZSA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialtcImRlZmF1bHRcIl0gOiBvYmo7IH07XG5cdFxuXHR2YXIgX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQgPSBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfTtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdC8qXG5cdE1haW4gY29uY2VwdDpcblx0c3ludGggPSBuZXcgTmV4dXMuUmFjaygnZWxlbWVudElEJyk7XG5cdFxuXHRUcmFuc2Zvcm0gYWxsIGVsZW1lbnRzIGluc2lkZSB0aGUgZGl2XG5cdHN5bnRoLmVsZW1lbnRJRCB3aWxsIGhvbGQgdGhlIGZpcnN0IHNsaWRlciBpbnRlcmZhY2Vcblx0XG5cdDIpIEluIGZ1dHVyZSwgcG90ZW50aWFsbHkgd3JpdGluZyBhIHJhY2sgdGhhdCBpcyByZS11c2FibGU/XG5cdENvdWxkIGFsc28gdGFrZSBKU09OXG5cdFxuXHRuZXcgTmV4dXMuUmFjaygnI3RhcmdldCcse1xuXHQgIHByZTogKCkgPT4ge1xuXHQgICAgY3JlYXRlIHNvbWUgZGl2cyBoZXJlLCBvciBzb21lIGF1ZGlvIGNvZGVcblx0ICB9LFxuXHQgIGludGVyZmFjZToge1xuXHQgICAgc2xpZGVyMTogTmV4dXMuYWRkLnNsaWRlcih7XG5cdCAgICAgIHRvcDoxMCxcblx0ICAgICAgbGVmdDoxMCxcblx0ICAgICAgd2lkdGg6NTAsXG5cdCAgICAgIGhlaWdodDoxMDAsXG5cdCAgICAgIG1pbjogMCxcblx0ICAgICAgbWF4OiAxMDAsXG5cdCAgICAgIHN0ZXA6IDFcblx0ICAgIH0pLFxuXHQgICAgd2F2ZTE6IE5leHVzLmFkZC53YXZlZm9ybSh7XG5cdCAgICAgIGZpbGU6ICcuL3BhdGgvdG8vZmlsZS5tcDMnLFxuXHQgICAgICB3aWR0aDo1MDAsXG5cdCAgICAgIGhlaWdodDoxMDAsXG5cdCAgICAgIG1vZGU6ICdyYW5nZSdcblx0ICAgIH0pXG5cdCAgfSxcblx0ICBpbml0OiAoKSA9PiB7XG5cdCAgICAvLyBzb21lIGF1ZGlvIGluaXQgY29kZSBnb2VzIGhlcmUuLi5cblx0ICB9XG5cdH0pO1xuXHRcblx0Ki9cblx0XG5cdHZhciB0cmFuc2Zvcm0gPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KSk7XG5cdFxuXHR2YXIgZG9tID0gX2ludGVyb3BSZXF1aXJlKF9fd2VicGFja19yZXF1aXJlX18oNykpO1xuXHRcblx0dmFyIGNvbG9ycyA9IF9fd2VicGFja19yZXF1aXJlX18oMSkuY29sb3JzO1xuXHRcblx0dmFyIFJhY2sgPSAoZnVuY3Rpb24gKCkge1xuXHQgIGZ1bmN0aW9uIFJhY2sodGFyZ2V0LCBzZXR0aW5ncykge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJhY2spO1xuXHRcblx0ICAgIHRoaXMubWV0YSA9IHt9O1xuXHQgICAgdGhpcy5tZXRhLnRhcmdldCA9IHRhcmdldDtcblx0ICAgIHRoaXMubWV0YS5wYXJlbnQgPSBkb20ucGFyc2VFbGVtZW50KHRhcmdldCk7IC8vIHNob3VsZCBiZSBhIGdlbmVyaWMgZnVuY3Rpb24gZm9yIHBhcnNpbmcgYSAndGFyZ2V0JyBhcmd1bWVudCB0aGF0IGNoZWNrcyBmb3Igc3RyaW5nL0RPTS9qUVVFUllcblx0ICAgIHRoaXMubWV0YS5jb2xvcnMgPSB7fTtcblx0XG5cdCAgICBpZiAoc2V0dGluZ3MpIHtcblx0ICAgICAgdGhpcy5tZXRhLmF0dHJpYnV0ZSA9IHNldHRpbmdzLmF0dHJpYnV0ZSB8fCBcIm5leHVzLXVpXCI7XG5cdCAgICAgIHRoaXMubWV0YS50aXRsZSA9IHNldHRpbmdzLm5hbWUgfHwgZmFsc2U7XG5cdCAgICAgIHRoaXMubWV0YS5vcGVuID0gc2V0dGluZ3Mub3BlbiB8fCBmYWxzZTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRoaXMubWV0YS5hdHRyaWJ1dGUgPSBcIm5leHVzLXVpXCI7XG5cdCAgICAgIHRoaXMubWV0YS50aXRsZSA9IGZhbHNlO1xuXHQgICAgICB0aGlzLm1ldGEub3BlbiA9IGZhbHNlO1xuXHQgICAgfVxuXHRcblx0ICAgIHZhciBkZWZhdWx0Q29sb3JzID0gY29sb3JzKCk7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXHQgICAgdGhpcy5tZXRhLmNvbG9ycy5hY2NlbnQgPSBkZWZhdWx0Q29sb3JzLmFjY2VudDtcblx0ICAgIHRoaXMubWV0YS5jb2xvcnMuZmlsbCA9IGRlZmF1bHRDb2xvcnMuZmlsbDtcblx0ICAgIHRoaXMubWV0YS5jb2xvcnMubGlnaHQgPSBkZWZhdWx0Q29sb3JzLmxpZ2h0O1xuXHQgICAgdGhpcy5tZXRhLmNvbG9ycy5kYXJrID0gZGVmYXVsdENvbG9ycy5kYXJrO1xuXHQgICAgdGhpcy5tZXRhLmNvbG9ycy5tZWRpdW1MaWdodCA9IGRlZmF1bHRDb2xvcnMubWVkaXVtTGlnaHQ7XG5cdCAgICB0aGlzLm1ldGEuY29sb3JzLm1lZGl1bURhcmsgPSBkZWZhdWx0Q29sb3JzLm1lZGl1bURhcms7XG5cdCAgICB0aGlzLmJ1aWxkSW50ZXJmYWNlKCk7XG5cdCAgICB0aGlzLmNvbG9ySW50ZXJmYWNlKCk7XG5cdCAgfVxuXHRcblx0ICBfY3JlYXRlQ2xhc3MoUmFjaywge1xuXHQgICAgYnVpbGRJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkSW50ZXJmYWNlKCkge1xuXHQgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cdFxuXHQgICAgICAgIHRoaXMubWV0YS5wYXJlbnQuc3R5bGUuYm94U2l6aW5nID0gXCJib3JkZXItYm94XCI7XG5cdCAgICAgICAgdGhpcy5tZXRhLnBhcmVudC5zdHlsZS51c2VyU2VsZWN0ID0gXCJub25lXCI7XG5cdCAgICAgICAgdGhpcy5tZXRhLnBhcmVudC5zdHlsZS5tb3pVc2VyU2VsZWN0ID0gXCJub25lXCI7XG5cdCAgICAgICAgdGhpcy5tZXRhLnBhcmVudC5zdHlsZS53ZWJraXRVc2VyU2VsZWN0ID0gXCJub25lXCI7XG5cdFxuXHQgICAgICAgIHRoaXMubWV0YS5jb250ZW50cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFxuXHQgICAgICAgIHdoaWxlICh0aGlzLm1ldGEucGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgdGhpcy5tZXRhLmNvbnRlbnRzLmFwcGVuZENoaWxkKHRoaXMubWV0YS5wYXJlbnQuY2hpbGROb2Rlc1swXSk7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICB0aGlzLm1ldGEuY29udGVudHMuc3R5bGUucGFkZGluZyA9IFwiMHB4XCI7XG5cdCAgICAgICAgdGhpcy5tZXRhLmNvbnRlbnRzLnN0eWxlLmJveFNpemluZyA9IFwiYm9yZGVyLWJveFwiO1xuXHRcblx0ICAgICAgICBpZiAodGhpcy5tZXRhLnRpdGxlKSB7XG5cdCAgICAgICAgICB0aGlzLm1ldGEudGl0bGVCYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHQgICAgICAgICAgdGhpcy5tZXRhLnRpdGxlQmFyLmlubmVySFRNTCA9IHRoaXMubWV0YS50aXRsZTtcblx0ICAgICAgICAgIHRoaXMubWV0YS50aXRsZUJhci5zdHlsZS5mb250RmFtaWx5ID0gXCJhcmlhbFwiO1xuXHQgICAgICAgICAgdGhpcy5tZXRhLnRpdGxlQmFyLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuXHQgICAgICAgICAgdGhpcy5tZXRhLnRpdGxlQmFyLnN0eWxlLmNvbG9yID0gXCIjODg4XCI7XG5cdCAgICAgICAgICB0aGlzLm1ldGEudGl0bGVCYXIuc3R5bGUucGFkZGluZyA9IFwiN3B4XCI7XG5cdCAgICAgICAgICB0aGlzLm1ldGEudGl0bGVCYXIuc3R5bGUuZm9udFNpemUgPSBcIjEycHhcIjtcblx0XG5cdCAgICAgICAgICB0aGlzLm1ldGEuYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0ICAgICAgICAgIHRoaXMubWV0YS5idXR0b24uc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdCAgICAgICAgICB0aGlzLm1ldGEuYnV0dG9uLnN0eWxlLnRvcCA9IFwiNXB4XCI7XG5cdCAgICAgICAgICB0aGlzLm1ldGEuYnV0dG9uLnN0eWxlLnJpZ2h0ID0gXCI1cHhcIjtcblx0ICAgICAgICAgIHRoaXMubWV0YS5idXR0b24uaW5uZXJIVE1MID0gXCItXCI7XG5cdCAgICAgICAgICB0aGlzLm1ldGEuYnV0dG9uLnN0eWxlLnBhZGRpbmcgPSBcIjBweCA1cHggMnB4XCI7XG5cdCAgICAgICAgICB0aGlzLm1ldGEuYnV0dG9uLnN0eWxlLmxpbmVIZWlnaHQgPSBcIjEycHhcIjtcblx0ICAgICAgICAgIHRoaXMubWV0YS5idXR0b24uc3R5bGUuZm9udFNpemUgPSBcIjE1cHhcIjtcblx0XG5cdCAgICAgICAgICB0aGlzLm1ldGEuYnV0dG9uLnN0eWxlLmN1cnNvciA9IFwicG9pbnRlclwiO1xuXHRcblx0ICAgICAgICAgIHRoaXMubWV0YS5idXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIF90aGlzLm1ldGEuYnV0dG9uLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IF90aGlzLm1ldGEuY29sb3JzLm1lZGl1bURhcms7XG5cdCAgICAgICAgICB9KTtcblx0ICAgICAgICAgIHRoaXMubWV0YS5idXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBfdGhpcy5tZXRhLmJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBfdGhpcy5tZXRhLmNvbG9ycy5tZWRpdW1MaWdodDtcblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgdGhpcy5tZXRhLmJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAoX3RoaXMubWV0YS5vcGVuKSB7XG5cdCAgICAgICAgICAgICAgX3RoaXMuaGlkZSgpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgIF90aGlzLnNob3coKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSk7XG5cdFxuXHQgICAgICAgICAgdGhpcy5tZXRhLnRpdGxlQmFyLmFwcGVuZENoaWxkKHRoaXMubWV0YS5idXR0b24pO1xuXHRcblx0ICAgICAgICAgIHRoaXMubWV0YS5wYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5tZXRhLnRpdGxlQmFyKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5tZXRhLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLm1ldGEuY29udGVudHMpO1xuXHRcblx0ICAgICAgICAvLyAgdmFyIHdpZHRoID0gdGhpcy5tZXRhLnBhcmVudC5zdHlsZS53aWR0aCA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5tZXRhLnBhcmVudCkuZ2V0UHJvcGVydHlWYWx1ZSgnd2lkdGgnKTtcblx0ICAgICAgICAvLyAgICB0aGlzLm1ldGEucGFyZW50LnN0eWxlLndpZHRoID0gd2lkdGg7XG5cdFxuXHQgICAgICAgIHZhciB1aSA9IHRyYW5zZm9ybS5zZWN0aW9uKHRoaXMubWV0YS50YXJnZXQsIHRoaXMubWV0YS5hdHRyaWJ1dGUpO1xuXHQgICAgICAgIGZvciAodmFyIGtleSBpbiB1aSkge1xuXHQgICAgICAgICAgdGhpc1trZXldID0gdWlba2V5XTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjb2xvckludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY29sb3JJbnRlcmZhY2UoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMubWV0YS50aXRsZSkge1xuXHQgICAgICAgICAgdGhpcy5tZXRhLmJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLm1ldGEuY29sb3JzLm1lZGl1bUxpZ2h0O1xuXHQgICAgICAgICAgdGhpcy5tZXRhLmJ1dHRvbi5zdHlsZS5ib3JkZXIgPSBcInNvbGlkIDBweCBcIiArIHRoaXMubWV0YS5jb2xvcnMuZmlsbDtcblx0ICAgICAgICAgIHRoaXMubWV0YS5wYXJlbnQuc3R5bGUuYm9yZGVyID0gXCJzb2xpZCAxcHggXCIgKyB0aGlzLm1ldGEuY29sb3JzLm1lZGl1bUxpZ2h0O1xuXHQgICAgICAgICAgdGhpcy5tZXRhLnBhcmVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLm1ldGEuY29sb3JzLmxpZ2h0O1xuXHQgICAgICAgICAgdGhpcy5tZXRhLnRpdGxlQmFyLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMubWV0YS5jb2xvcnMuZmlsbDtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzaG93OiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG93KCkge1xuXHQgICAgICAgIHRoaXMubWV0YS5jb250ZW50cy5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuXHQgICAgICAgIHRoaXMubWV0YS5vcGVuID0gdHJ1ZTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGhpZGU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhpZGUoKSB7XG5cdCAgICAgICAgdGhpcy5tZXRhLmNvbnRlbnRzLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0ICAgICAgICB0aGlzLm1ldGEub3BlbiA9IGZhbHNlO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29sb3JpemU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbG9yaXplKHR5cGUsIGNvbG9yKSB7XG5cdCAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMpIHtcblx0ICAgICAgICAgIGlmICh0aGlzW2tleV0uY29sb3JpemUpIHtcblx0ICAgICAgICAgICAgdGhpc1trZXldLmNvbG9yaXplKHR5cGUsIGNvbG9yKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5tZXRhLmNvbG9yc1t0eXBlXSA9IGNvbG9yO1xuXHQgICAgICAgIHRoaXMuY29sb3JJbnRlcmZhY2UoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGVtcHR5OiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBlbXB0eSgpIHtcblx0ICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcykge1xuXHQgICAgICAgICAgaWYgKHRoaXNba2V5XS5kZXN0cm95KSB7XG5cdCAgICAgICAgICAgIHRoaXNba2V5XS5kZXN0cm95KCk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBSYWNrO1xuXHR9KSgpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBSYWNrO1xuXG4vKioqLyB9KSxcbi8qIDM5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgX2ludGVyb3BSZXF1aXJlID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqW1wiZGVmYXVsdFwiXSA6IG9iajsgfTtcblx0XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuXHQgIHZhbHVlOiB0cnVlXG5cdH0pO1xuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBkb20gPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXyg3KSk7XG5cdFxuXHR2YXIgSW50ZXJmYWNlcyA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDIpKTtcblx0XG5cdHZhciBjcmVhdGVJbnRlcmZhY2VJRCA9IGZ1bmN0aW9uICh3aWRnZXQsIGludGVyZmFjZUlEcykge1xuXHQgIHZhciB0eXBlID0gd2lkZ2V0LnR5cGU7XG5cdCAgaWYgKGludGVyZmFjZUlEc1t0eXBlXSkge1xuXHQgICAgaW50ZXJmYWNlSURzW3R5cGVdKys7XG5cdCAgfSBlbHNlIHtcblx0ICAgIGludGVyZmFjZUlEc1t0eXBlXSA9IDE7XG5cdCAgfVxuXHQgIHJldHVybiB0eXBlICsgaW50ZXJmYWNlSURzW3R5cGVdO1xuXHR9O1xuXHRcblx0dmFyIGVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgdHlwZSwgb3B0aW9ucykge1xuXHQgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXHQgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudC5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICB2YXIgYXR0ID0gZWxlbWVudC5hdHRyaWJ1dGVzW2ldO1xuXHQgICAgLy8gIHRyeSB7XG5cdCAgICAvLyAgICBvcHRpb25zW2F0dC5ub2RlTmFtZV0gPSBldmFsKGF0dC5ub2RlVmFsdWUpO1xuXHQgICAgLy8gIH0gY2F0Y2goZSkge1xuXHQgICAgb3B0aW9uc1thdHQubm9kZU5hbWVdID0gYXR0Lm5vZGVWYWx1ZTtcblx0ICAgIC8vICB9XG5cdCAgfVxuXHQgIHR5cGUgPSB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnNsaWNlKDEpO1xuXHQgIHZhciB3aWRnZXQgPSBuZXcgSW50ZXJmYWNlc1t0eXBlXShlbGVtZW50LCBvcHRpb25zKTtcblx0ICB3aWRnZXQuaWQgPSBlbGVtZW50LmlkO1xuXHQgIHJldHVybiB3aWRnZXQ7XG5cdH07XG5cdFxuXHR2YXIgc2VjdGlvbiA9IGZ1bmN0aW9uIChwYXJlbnQsIGtleXdvcmQpIHtcblx0XG5cdCAga2V5d29yZCA9IGtleXdvcmQgfHwgXCJuZXh1cy11aVwiO1xuXHRcblx0ICB2YXIgaW50ZXJmYWNlSURzID0ge307XG5cdFxuXHQgIHZhciBjb250YWluZXIgPSBkb20ucGFyc2VFbGVtZW50KHBhcmVudCk7XG5cdFxuXHQgIHZhciB1aSA9IHt9O1xuXHRcblx0ICB2YXIgaHRtbEVsZW1lbnRzID0gY29udGFpbmVyLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKTtcblx0ICB2YXIgZWxlbWVudHMgPSBbXTtcblx0ICBmb3IgKHZhciBpID0gMDsgaSA8IGh0bWxFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgZWxlbWVudHMucHVzaChodG1sRWxlbWVudHNbaV0pO1xuXHQgIH1cblx0ICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICB2YXIgdHlwZSA9IGVsZW1lbnRzW2ldLmdldEF0dHJpYnV0ZShrZXl3b3JkKTtcblx0ICAgIGlmICh0eXBlKSB7XG5cdCAgICAgIHZhciBmb3JtYXR0ZWRUeXBlID0gZmFsc2U7XG5cdCAgICAgIGZvciAodmFyIGtleSBpbiBJbnRlcmZhY2VzKSB7XG5cdCAgICAgICAgaWYgKHR5cGUudG9Mb3dlckNhc2UoKSA9PT0ga2V5LnRvTG93ZXJDYXNlKCkpIHtcblx0ICAgICAgICAgIGZvcm1hdHRlZFR5cGUgPSBrZXk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIGNvbnNvbGUubG9nKGZvcm1hdHRlZFR5cGUpO1xuXHQgICAgICB2YXIgd2lkZ2V0ID0gZWxlbWVudChlbGVtZW50c1tpXSwgZm9ybWF0dGVkVHlwZSk7XG5cdCAgICAgIGlmICh3aWRnZXQuaWQpIHtcblx0ICAgICAgICB1aVt3aWRnZXQuaWRdID0gd2lkZ2V0O1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHZhciBpZCA9IGNyZWF0ZUludGVyZmFjZUlEKHdpZGdldCwgaW50ZXJmYWNlSURzKTtcblx0ICAgICAgICB1aVtpZF0gPSB3aWRnZXQ7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cdFxuXHQgIHJldHVybiB1aTtcblx0fTtcblx0XG5cdHZhciBhZGQgPSBmdW5jdGlvbiAodHlwZSwgcGFyZW50LCBvcHRpb25zKSB7XG5cdCAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdCAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cdCAgaWYgKHBhcmVudCkge1xuXHQgICAgcGFyZW50ID0gZG9tLnBhcnNlRWxlbWVudChwYXJlbnQpO1xuXHQgIH0gZWxzZSB7XG5cdCAgICBwYXJlbnQgPSBkb2N1bWVudC5ib2R5O1xuXHQgIH1cblx0ICBwYXJlbnQuYXBwZW5kQ2hpbGQodGFyZ2V0KTtcblx0ICBvcHRpb25zLnRhcmdldCA9IHRhcmdldDtcblx0ICBpZiAob3B0aW9ucy5zaXplKSB7XG5cdCAgICB0YXJnZXQuc3R5bGUud2lkdGggPSBvcHRpb25zLnNpemVbMF0gKyBcInB4XCI7XG5cdCAgICB0YXJnZXQuc3R5bGUuaGVpZ2h0ID0gb3B0aW9ucy5zaXplWzFdICsgXCJweFwiO1xuXHQgIH1cblx0ICByZXR1cm4gZWxlbWVudCh0YXJnZXQsIHR5cGUsIG9wdGlvbnMpO1xuXHR9O1xuXHRcblx0ZXhwb3J0cy5lbGVtZW50ID0gZWxlbWVudDtcblx0ZXhwb3J0cy5zZWN0aW9uID0gc2VjdGlvbjtcblx0ZXhwb3J0cy5hZGQgPSBhZGQ7XG5cbi8qKiovIH0pLFxuLyogNDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfaW50ZXJvcFJlcXVpcmUgPSBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmpbXCJkZWZhdWx0XCJdIDogb2JqOyB9O1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHsgdmFyIHByb3AgPSBwcm9wc1trZXldOyBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChwcm9wLnZhbHVlKSBwcm9wLndyaXRhYmxlID0gdHJ1ZTsgfSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKTsgfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXHRcblx0dmFyIF9jbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9O1xuXHRcblx0dmFyIG1hdGggPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXyg1KSk7XG5cdFxuXHR2YXIgVHVuZSA9IChmdW5jdGlvbiAoKSB7XG5cdCAgZnVuY3Rpb24gVHVuZSgpIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUdW5lKTtcblx0XG5cdCAgICAvLyB0aGUgc2NhbGUgYXMgcmF0aW9zXG5cdCAgICB0aGlzLnNjYWxlID0gW107XG5cdFxuXHQgICAgLy8gaS9vIG1vZGVzXG5cdCAgICB0aGlzLm1vZGUgPSB7XG5cdCAgICAgIG91dHB1dDogXCJmcmVxdWVuY3lcIixcblx0ICAgICAgaW5wdXQ6IFwic3RlcFwiXG5cdCAgICB9O1xuXHRcblx0ICAgIC8vIEVUIG1ham9yXG5cdCAgICB0aGlzLmV0bWFqb3IgPSBbMjYxLjYyNTU4LCAyOTMuNjY0NzY0LCAzMjkuNjI3NTYzLCAzNDkuMjI4MjQxLCAzOTEuOTk1NDIyLCA0NDAsIDQ5My44ODMzMDEsIDUyMy4yNTExNl07XG5cdFxuXHQgICAgLy8gUm9vdCBmcmVxdWVuY3kuXG5cdCAgICB0aGlzLnJvb3QgPSBtYXRoLm10b2YoNjApOyAvLyAqIE1hdGgucG93KDIsKDYwLTY5KS8xMik7XG5cdFxuXHQgICAgLy8gZGVmYXVsdCBpcyBhIG1ham9yIHNjYWxlXG5cdCAgICB0aGlzLmNyZWF0ZVNjYWxlKDAsIDIsIDQsIDUsIDcsIDksIDExKTtcblx0ICB9XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhUdW5lLCB7XG5cdCAgICBub3RlOiB7XG5cdFxuXHQgICAgICAvKiBSZXR1cm4gZGF0YSBpbiB0aGUgbW9kZSB5b3UgYXJlIGluIChmcmVxLCByYXRpbywgb3IgbWlkaSkgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBub3RlKGlucHV0LCBvY3RhdmUpIHtcblx0XG5cdCAgICAgICAgdmFyIG5ld3ZhbHVlID0gdW5kZWZpbmVkO1xuXHRcblx0ICAgICAgICBpZiAodGhpcy5tb2RlLm91dHB1dCA9PT0gXCJmcmVxdWVuY3lcIikge1xuXHQgICAgICAgICAgbmV3dmFsdWUgPSB0aGlzLmZyZXF1ZW5jeShpbnB1dCwgb2N0YXZlKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZS5vdXRwdXQgPT09IFwicmF0aW9cIikge1xuXHQgICAgICAgICAgbmV3dmFsdWUgPSB0aGlzLnJhdGlvKGlucHV0LCBvY3RhdmUpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlLm91dHB1dCA9PT0gXCJNSURJXCIpIHtcblx0ICAgICAgICAgIG5ld3ZhbHVlID0gdGhpcy5NSURJKGlucHV0LCBvY3RhdmUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICBuZXd2YWx1ZSA9IHRoaXMuZnJlcXVlbmN5KGlucHV0LCBvY3RhdmUpO1xuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgcmV0dXJuIG5ld3ZhbHVlO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZnJlcXVlbmN5OiB7XG5cdFxuXHQgICAgICAvKiBSZXR1cm4gZnJlcSBkYXRhICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gZnJlcXVlbmN5KHN0ZXBJbiwgb2N0YXZlSW4pIHtcblx0XG5cdCAgICAgICAgaWYgKHRoaXMubW9kZS5pbnB1dCA9PT0gXCJtaWRpXCIgfHwgdGhpcy5tb2RlLmlucHV0ID09PSBcIk1JRElcIikge1xuXHQgICAgICAgICAgdGhpcy5zdGVwSW4gKz0gNjA7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICAvLyB3aGF0IG9jdGF2ZSBpcyBvdXIgaW5wdXRcblx0ICAgICAgICB2YXIgb2N0YXZlID0gTWF0aC5mbG9vcihzdGVwSW4gLyB0aGlzLnNjYWxlLmxlbmd0aCk7XG5cdFxuXHQgICAgICAgIGlmIChvY3RhdmVJbikge1xuXHQgICAgICAgICAgb2N0YXZlICs9IG9jdGF2ZUluO1xuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgLy8gd2hpY2ggc2NhbGUgZGVncmVlICgwIC0gc2NhbGUgbGVuZ3RoKSBpcyBvdXIgaW5wdXRcblx0ICAgICAgICB2YXIgc2NhbGVEZWdyZWUgPSBzdGVwSW4gJSB0aGlzLnNjYWxlLmxlbmd0aDtcblx0XG5cdCAgICAgICAgd2hpbGUgKHNjYWxlRGVncmVlIDwgMCkge1xuXHQgICAgICAgICAgc2NhbGVEZWdyZWUgKz0gdGhpcy5zY2FsZS5sZW5ndGg7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICB2YXIgcmF0aW8gPSB0aGlzLnNjYWxlW3NjYWxlRGVncmVlXTtcblx0XG5cdCAgICAgICAgdmFyIGZyZXEgPSB0aGlzLnJvb3QgKiByYXRpbztcblx0XG5cdCAgICAgICAgZnJlcSA9IGZyZXEgKiBNYXRoLnBvdygyLCBvY3RhdmUpO1xuXHRcblx0ICAgICAgICAvLyB0cnVuY2F0ZSBpcnJhdGlvbmFsIG51bWJlcnNcblx0ICAgICAgICBmcmVxID0gTWF0aC5mbG9vcihmcmVxICogMTAwMDAwMDAwMDAwKSAvIDEwMDAwMDAwMDAwMDtcblx0XG5cdCAgICAgICAgcmV0dXJuIGZyZXE7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByYXRpbzoge1xuXHRcblx0ICAgICAgLyogRm9yY2UgcmV0dXJuIHJhdGlvIGRhdGEgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiByYXRpbyhzdGVwSW4sIG9jdGF2ZUluKSB7XG5cdFxuXHQgICAgICAgIGlmICh0aGlzLm1vZGUuaW5wdXQgPT09IFwibWlkaVwiIHx8IHRoaXMubW9kZS5pbnB1dCA9PT0gXCJNSURJXCIpIHtcblx0ICAgICAgICAgIHRoaXMuc3RlcEluICs9IDYwO1xuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgLy8gd2hhdCBvY3RhdmUgaXMgb3VyIGlucHV0XG5cdCAgICAgICAgdmFyIG9jdGF2ZSA9IE1hdGguZmxvb3Ioc3RlcEluIC8gdGhpcy5zY2FsZS5sZW5ndGgpO1xuXHRcblx0ICAgICAgICBpZiAob2N0YXZlSW4pIHtcblx0ICAgICAgICAgIG9jdGF2ZSArPSBvY3RhdmVJbjtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIC8vIHdoaWNoIHNjYWxlIGRlZ3JlZSAoMCAtIHNjYWxlIGxlbmd0aCkgaXMgb3VyIGlucHV0XG5cdCAgICAgICAgdmFyIHNjYWxlRGVncmVlID0gc3RlcEluICUgdGhpcy5zY2FsZS5sZW5ndGg7XG5cdFxuXHQgICAgICAgIC8vIHdoYXQgcmF0aW8gaXMgb3VyIGlucHV0IHRvIG91ciBrZXlcblx0ICAgICAgICB2YXIgcmF0aW8gPSBNYXRoLnBvdygyLCBvY3RhdmUpICogdGhpcy5zY2FsZVtzY2FsZURlZ3JlZV07XG5cdFxuXHQgICAgICAgIHJhdGlvID0gTWF0aC5mbG9vcihyYXRpbyAqIDEwMDAwMDAwMDAwMCkgLyAxMDAwMDAwMDAwMDA7XG5cdFxuXHQgICAgICAgIHJldHVybiByYXRpbztcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIE1JREk6IHtcblx0XG5cdCAgICAgIC8qIEZvcmNlIHJldHVybiBhZGp1c3RlZCBNSURJIGRhdGEgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBNSURJKHN0ZXBJbiwgb2N0YXZlSW4pIHtcblx0XG5cdCAgICAgICAgdmFyIG5ld3ZhbHVlID0gdGhpcy5mcmVxdWVuY3koc3RlcEluLCBvY3RhdmVJbik7XG5cdFxuXHQgICAgICAgIHZhciBuID0gNjkgKyAxMiAqIE1hdGgubG9nKG5ld3ZhbHVlIC8gNDQwKSAvIE1hdGgubG9nKDIpO1xuXHRcblx0ICAgICAgICBuID0gTWF0aC5mbG9vcihuICogMTAwMDAwMDAwMCkgLyAxMDAwMDAwMDAwO1xuXHRcblx0ICAgICAgICByZXR1cm4gbjtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNyZWF0ZVNjYWxlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjcmVhdGVTY2FsZSgpIHtcblx0ICAgICAgICB2YXIgbmV3U2NhbGUgPSBbXTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgbmV3U2NhbGUucHVzaChtYXRoLm10b2YoNjAgKyBhcmd1bWVudHNbaV0pKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5sb2FkU2NhbGVGcm9tRnJlcXVlbmNpZXMobmV3U2NhbGUpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY3JlYXRlSklTY2FsZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlSklTY2FsZSgpIHtcblx0ICAgICAgICB0aGlzLnNjYWxlID0gW107XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgIHRoaXMuc2NhbGUucHVzaChhcmd1bWVudHNbaV0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGxvYWRTY2FsZUZyb21GcmVxdWVuY2llczoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gbG9hZFNjYWxlRnJvbUZyZXF1ZW5jaWVzKGZyZXFzKSB7XG5cdCAgICAgICAgdGhpcy5zY2FsZSA9IFtdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnJlcXMubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdCAgICAgICAgICB0aGlzLnNjYWxlLnB1c2goZnJlcXNbaV0gLyBmcmVxc1swXSk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbG9hZFNjYWxlOiB7XG5cdFxuXHQgICAgICAvKiBMb2FkIGEgbmV3IHNjYWxlICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gbG9hZFNjYWxlKG5hbWUpIHtcblx0XG5cdCAgICAgICAgLyogbG9hZCB0aGUgc2NhbGUgKi9cblx0ICAgICAgICB2YXIgZnJlcXMgPSB0aGlzLnNjYWxlc1tuYW1lXS5mcmVxdWVuY2llcztcblx0ICAgICAgICB0aGlzLmxvYWRTY2FsZUZyb21GcmVxdWVuY2llcyhmcmVxcyk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzZWFyY2g6IHtcblx0XG5cdCAgICAgIC8qIFNlYXJjaCB0aGUgbmFtZXMgb2YgdHVuaW5nc1xuXHQgICAgICBcdCBSZXR1cm5zIGFuIGFycmF5IG9mIG5hbWVzIG9mIHR1bmluZ3MgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZWFyY2gobGV0dGVycykge1xuXHQgICAgICAgIHZhciBwb3NzaWJsZSA9IFtdO1xuXHQgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnNjYWxlcykge1xuXHQgICAgICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpLmluZGV4T2YobGV0dGVycy50b0xvd2VyQ2FzZSgpKSAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgcG9zc2libGUucHVzaChrZXkpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcG9zc2libGU7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjaG9yZDoge1xuXHRcblx0ICAgICAgLyogUmV0dXJuIGEgY29sbGVjdGlvbiBvZiBub3RlcyBhcyBhbiBhcnJheSAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNob3JkKG1pZGlzKSB7XG5cdCAgICAgICAgdmFyIG91dHB1dCA9IFtdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWlkaXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgIG91dHB1dC5wdXNoKHRoaXMubm90ZShtaWRpc1tpXSkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gb3V0cHV0O1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBUdW5lO1xuXHR9KSgpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBUdW5lO1xuXG4vKioqLyB9KSxcbi8qIDQxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGtleSBpbiBwcm9wcykgeyB2YXIgcHJvcCA9IHByb3BzW2tleV07IHByb3AuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKHByb3AudmFsdWUpIHByb3Aud3JpdGFibGUgPSB0cnVlOyB9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpOyB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH07XG5cdFxuXHQvL0Rpc2FibGUganNoaW50IHdhcm5pbmcgY29uY2VybmluZyB0cmFpbGluZyByZWd1bGFyIHBhcmFtc1xuXHQvKmpzaGludCAtVzEzOCAqL1xuXHRcblx0dmFyIFJhZGlvID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vaWYgbm9uLWV4aXN0ZW50IGJ1dHRvbnMgYXJlIHN3aXRjaGVkLCB0aGV5IGFyZSBpZ25vcmVkXG5cdFxuXHQgICAgZnVuY3Rpb24gUmFkaW8oKSB7XG5cdCAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG9uVmFscyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcblx0ICAgICAgICAgICAgb25WYWxzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IDMgOiBhcmd1bWVudHNbMF07XG5cdFxuXHQgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSYWRpbyk7XG5cdFxuXHQgICAgICAgIC8vZWFjaCBvcHRpb25hbCAnb25WYWxzJyBhcmd1bWVudCBzd2l0Y2hlcyBvbiB0aGF0IHZhbHVlIGluIHRoZSBSYWRpbyBpZiBpdCBleGlzdHNcblx0ICAgICAgICAvL0luIHRoZSBleGFtcGxlIGJlbG93LCBhIDMtYnV0dG9uIHJhZGlvIGlzIGNyZWF0ZWQsIGluZGV4IDAgaXMgc3dpdGNoZWQgb24sIGluZGV4IDEgaXMgc3dpdGNoZWQgb24gdGhlbiB0aGVuIGF0dGVtcHRlZCBhZ2FpbiBwcm9kdWNpbmcgYW4gd2FybmluZywgYW5kIHRoZSBmaW5hbCBhcmd1bWVudCBwcm9kdWNlcyBhIHdhcm5pbmcgYmVjYXVzZSB0aGUgaW5kZXggdmFsdWUgZG9lcyBub3QgZXhpc3QuXG5cdCAgICAgICAgLy9FeGFtcGxlOlxuXHQgICAgICAgIC8vYCAgcmFkaW8gPSBuZXcgUmFkaW8oMywgMCwgMSwgMSwgMyk7XG5cdCAgICAgICAgLy/igKYgIFsxLDEsMF1cblx0XG5cdCAgICAgICAgaWYgKGxlbmd0aCA8IDApIHtcblx0ICAgICAgICAgICAgbGVuZ3RoID0gMTtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoO1xuXHQgICAgICAgIHRoaXMub25WYWxzID0gb25WYWxzO1xuXHQgICAgICAgIHRoaXMuYXJyYXkgPSBuZXcgQXJyYXkobGVuZ3RoKS5maWxsKDApO1xuXHRcblx0ICAgICAgICBpZiAob25WYWxzLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5vbi5hcHBseSh0aGlzLCBvblZhbHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0XG5cdCAgICBfY3JlYXRlQ2xhc3MoUmFkaW8sIHtcblx0ICAgICAgICBzZWxlY3Q6IHtcblx0ICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNlbGVjdCh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5hcnJheS5maWxsKDApO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5hcnJheVt2YWx1ZV0gPSAxO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIGZsaXA6IHtcblx0ICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZsaXAoKSB7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgdmFsdWVzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFsdWVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuXHQgICAgICAgICAgICAgICAgfVxuXHRcblx0ICAgICAgICAgICAgICAgIC8vZmxpcHMgdGhlIHNwZWNpZmllZCB2YWx1ZXMuIGlmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgZmxpcHMgYWxsIGJ1dHRvbnNcblx0ICAgICAgICAgICAgICAgIHZhciBhID0gdGhpcy5hcnJheTtcblx0ICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID4gYS5sZW5ndGggLSAxKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJXYXJuaW5nOiBBbm9uUmFkaW9bXCIgKyB2ICsgXCJdIGRvZXMgbm90IGV4aXN0XCIpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVt2XSA9IGFbdl0gPyAwIDogMTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBhLmZvckVhY2goZnVuY3Rpb24gKHYsIGksIGFycikge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBhcnJbaV0gPSB2ID8gMCA6IDE7XG5cdCAgICAgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gYTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgb246IHtcblx0ICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uKCkge1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHZhbHVlcyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhbHVlc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcblx0ICAgICAgICAgICAgICAgIH1cblx0XG5cdCAgICAgICAgICAgICAgICAvL3N3aXRjaCBvbiB0aGUgc3BlY2lmaWVkIHZhbHVlcy4gaWYgbm8gdmFsdWUgc3BlY2lmaWVkLCBmbGlwcyBvbiBhbGwgYnV0dG9uc1xuXHQgICAgICAgICAgICAgICAgdmFyIGEgPSB0aGlzLmFycmF5O1xuXHQgICAgICAgICAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPiBhLmxlbmd0aCAtIDEpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIldhcm5pbmc6IEFub25SYWRpb1tcIiArIHYgKyBcIl0gZXhjZWVkcyBzaXplIG9mIG9iamVjdFwiKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhW3ZdID09PSAxKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiV2FybmluZzogQW5vblJhZGlvW1wiICsgdiArIFwiXSB3YXMgYWxyZWFkeSBvbi5cIik7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW3ZdID0gMTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBhLmZpbGwoMSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gYTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgb2ZmOiB7XG5cdCAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBvZmYoKSB7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgdmFsdWVzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFsdWVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuXHQgICAgICAgICAgICAgICAgfVxuXHRcblx0ICAgICAgICAgICAgICAgIC8vc3dpdGNoIG9mZiB0aGUgc3BlY2lmaWVkIHZhbHVlcy4gaWYgbm8gdmFsdWUgc3BlY2lmaWVkLCBmbGlwcyBvZmYgYWxsIGJ1dHRvbnNcblx0ICAgICAgICAgICAgICAgIHZhciBhID0gdGhpcy5hcnJheTtcblx0ICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGFbdl0gPSAwO1xuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBhLmZpbGwoMCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gYTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHRcblx0ICAgIHJldHVybiBSYWRpbztcblx0fSkoKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gUmFkaW87XG5cbi8qKiovIH0pLFxuLyogNDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgV0FBQ2xvY2sgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKVxuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBXQUFDbG9ja1xuXHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHdpbmRvdy5XQUFDbG9jayA9IFdBQUNsb2NrXG5cblxuLyoqKi8gfSksXG4vKiA0MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihwcm9jZXNzKSB7dmFyIGlzQnJvd3NlciA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJylcblx0XG5cdHZhciBDTE9DS19ERUZBVUxUUyA9IHtcblx0ICB0b2xlcmFuY2VMYXRlOiAwLjEwLFxuXHQgIHRvbGVyYW5jZUVhcmx5OiAwLjAwMVxuXHR9XG5cdFxuXHQvLyA9PT09PT09PT09PT09PT09PT09PSBFdmVudCA9PT09PT09PT09PT09PT09PT09PSAvL1xuXHR2YXIgRXZlbnQgPSBmdW5jdGlvbihjbG9jaywgZGVhZGxpbmUsIGZ1bmMpIHtcblx0ICB0aGlzLmNsb2NrID0gY2xvY2tcblx0ICB0aGlzLmZ1bmMgPSBmdW5jXG5cdCAgdGhpcy5fY2xlYXJlZCA9IGZhbHNlIC8vIEZsYWcgdXNlZCB0byBjbGVhciBhbiBldmVudCBpbnNpZGUgY2FsbGJhY2tcblx0XG5cdCAgdGhpcy50b2xlcmFuY2VMYXRlID0gY2xvY2sudG9sZXJhbmNlTGF0ZVxuXHQgIHRoaXMudG9sZXJhbmNlRWFybHkgPSBjbG9jay50b2xlcmFuY2VFYXJseVxuXHQgIHRoaXMuX2xhdGVzdFRpbWUgPSBudWxsXG5cdCAgdGhpcy5fZWFybGllc3RUaW1lID0gbnVsbFxuXHQgIHRoaXMuZGVhZGxpbmUgPSBudWxsXG5cdCAgdGhpcy5yZXBlYXRUaW1lID0gbnVsbFxuXHRcblx0ICB0aGlzLnNjaGVkdWxlKGRlYWRsaW5lKVxuXHR9XG5cdFxuXHQvLyBVbnNjaGVkdWxlcyB0aGUgZXZlbnRcblx0RXZlbnQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG5cdCAgdGhpcy5jbG9jay5fcmVtb3ZlRXZlbnQodGhpcylcblx0ICB0aGlzLl9jbGVhcmVkID0gdHJ1ZVxuXHQgIHJldHVybiB0aGlzXG5cdH1cblx0XG5cdC8vIFNldHMgdGhlIGV2ZW50IHRvIHJlcGVhdCBldmVyeSBgdGltZWAgc2Vjb25kcy5cblx0RXZlbnQucHJvdG90eXBlLnJlcGVhdCA9IGZ1bmN0aW9uKHRpbWUpIHtcblx0ICBpZiAodGltZSA9PT0gMClcblx0ICAgIHRocm93IG5ldyBFcnJvcignZGVsYXkgY2Fubm90IGJlIDAnKVxuXHQgIHRoaXMucmVwZWF0VGltZSA9IHRpbWVcblx0ICBpZiAoIXRoaXMuY2xvY2suX2hhc0V2ZW50KHRoaXMpKVxuXHQgICAgdGhpcy5zY2hlZHVsZSh0aGlzLmRlYWRsaW5lICsgdGhpcy5yZXBlYXRUaW1lKVxuXHQgIHJldHVybiB0aGlzXG5cdH1cblx0XG5cdC8vIFNldHMgdGhlIHRpbWUgdG9sZXJhbmNlIG9mIHRoZSBldmVudC5cblx0Ly8gVGhlIGV2ZW50IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIGludGVydmFsIGBbZGVhZGxpbmUgLSBlYXJseSwgZGVhZGxpbmUgKyBsYXRlXWBcblx0Ly8gSWYgdGhlIGNsb2NrIGZhaWxzIHRvIGV4ZWN1dGUgdGhlIGV2ZW50IGluIHRpbWUsIHRoZSBldmVudCB3aWxsIGJlIGRyb3BwZWQuXG5cdEV2ZW50LnByb3RvdHlwZS50b2xlcmFuY2UgPSBmdW5jdGlvbih2YWx1ZXMpIHtcblx0ICBpZiAodHlwZW9mIHZhbHVlcy5sYXRlID09PSAnbnVtYmVyJylcblx0ICAgIHRoaXMudG9sZXJhbmNlTGF0ZSA9IHZhbHVlcy5sYXRlXG5cdCAgaWYgKHR5cGVvZiB2YWx1ZXMuZWFybHkgPT09ICdudW1iZXInKVxuXHQgICAgdGhpcy50b2xlcmFuY2VFYXJseSA9IHZhbHVlcy5lYXJseVxuXHQgIHRoaXMuX3JlZnJlc2hFYXJseUxhdGVEYXRlcygpXG5cdCAgaWYgKHRoaXMuY2xvY2suX2hhc0V2ZW50KHRoaXMpKSB7XG5cdCAgICB0aGlzLmNsb2NrLl9yZW1vdmVFdmVudCh0aGlzKVxuXHQgICAgdGhpcy5jbG9jay5faW5zZXJ0RXZlbnQodGhpcylcblx0ICB9XG5cdCAgcmV0dXJuIHRoaXNcblx0fVxuXHRcblx0Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBldmVudCBpcyByZXBlYXRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdEV2ZW50LnByb3RvdHlwZS5pc1JlcGVhdGVkID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLnJlcGVhdFRpbWUgIT09IG51bGwgfVxuXHRcblx0Ly8gU2NoZWR1bGVzIHRoZSBldmVudCB0byBiZSByYW4gYmVmb3JlIGBkZWFkbGluZWAuXG5cdC8vIElmIHRoZSB0aW1lIGlzIHdpdGhpbiB0aGUgZXZlbnQgdG9sZXJhbmNlLCB3ZSBoYW5kbGUgdGhlIGV2ZW50IGltbWVkaWF0ZWx5LlxuXHQvLyBJZiB0aGUgZXZlbnQgd2FzIGFscmVhZHkgc2NoZWR1bGVkIGF0IGEgZGlmZmVyZW50IHRpbWUsIGl0IGlzIHJlc2NoZWR1bGVkLlxuXHRFdmVudC5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihkZWFkbGluZSkge1xuXHQgIHRoaXMuX2NsZWFyZWQgPSBmYWxzZVxuXHQgIHRoaXMuZGVhZGxpbmUgPSBkZWFkbGluZVxuXHQgIHRoaXMuX3JlZnJlc2hFYXJseUxhdGVEYXRlcygpXG5cdFxuXHQgIGlmICh0aGlzLmNsb2NrLmNvbnRleHQuY3VycmVudFRpbWUgPj0gdGhpcy5fZWFybGllc3RUaW1lKSB7XG5cdCAgICB0aGlzLl9leGVjdXRlKClcblx0ICBcblx0ICB9IGVsc2UgaWYgKHRoaXMuY2xvY2suX2hhc0V2ZW50KHRoaXMpKSB7XG5cdCAgICB0aGlzLmNsb2NrLl9yZW1vdmVFdmVudCh0aGlzKVxuXHQgICAgdGhpcy5jbG9jay5faW5zZXJ0RXZlbnQodGhpcylcblx0ICBcblx0ICB9IGVsc2UgdGhpcy5jbG9jay5faW5zZXJ0RXZlbnQodGhpcylcblx0fVxuXHRcblx0RXZlbnQucHJvdG90eXBlLnRpbWVTdHJldGNoID0gZnVuY3Rpb24odFJlZiwgcmF0aW8pIHtcblx0ICBpZiAodGhpcy5pc1JlcGVhdGVkKCkpXG5cdCAgICB0aGlzLnJlcGVhdFRpbWUgPSB0aGlzLnJlcGVhdFRpbWUgKiByYXRpb1xuXHRcblx0ICB2YXIgZGVhZGxpbmUgPSB0UmVmICsgcmF0aW8gKiAodGhpcy5kZWFkbGluZSAtIHRSZWYpXG5cdCAgLy8gSWYgdGhlIGRlYWRsaW5lIGlzIHRvbyBjbG9zZSBvciBwYXN0LCBhbmQgdGhlIGV2ZW50IGhhcyBhIHJlcGVhdCxcblx0ICAvLyB3ZSBjYWxjdWxhdGUgdGhlIG5leHQgcmVwZWF0IHBvc3NpYmxlIGluIHRoZSBzdHJldGNoZWQgc3BhY2UuXG5cdCAgaWYgKHRoaXMuaXNSZXBlYXRlZCgpKSB7XG5cdCAgICB3aGlsZSAodGhpcy5jbG9jay5jb250ZXh0LmN1cnJlbnRUaW1lID49IGRlYWRsaW5lIC0gdGhpcy50b2xlcmFuY2VFYXJseSlcblx0ICAgICAgZGVhZGxpbmUgKz0gdGhpcy5yZXBlYXRUaW1lXG5cdCAgfVxuXHQgIHRoaXMuc2NoZWR1bGUoZGVhZGxpbmUpXG5cdH1cblx0XG5cdC8vIEV4ZWN1dGVzIHRoZSBldmVudFxuXHRFdmVudC5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbigpIHtcblx0ICBpZiAodGhpcy5jbG9jay5fc3RhcnRlZCA9PT0gZmFsc2UpIHJldHVyblxuXHQgIHRoaXMuY2xvY2suX3JlbW92ZUV2ZW50KHRoaXMpXG5cdFxuXHQgIGlmICh0aGlzLmNsb2NrLmNvbnRleHQuY3VycmVudFRpbWUgPCB0aGlzLl9sYXRlc3RUaW1lKVxuXHQgICAgdGhpcy5mdW5jKHRoaXMpXG5cdCAgZWxzZSB7XG5cdCAgICBpZiAodGhpcy5vbmV4cGlyZWQpIHRoaXMub25leHBpcmVkKHRoaXMpXG5cdCAgICBjb25zb2xlLndhcm4oJ2V2ZW50IGV4cGlyZWQnKVxuXHQgIH1cblx0ICAvLyBJbiB0aGUgY2FzZSBgc2NoZWR1bGVgIGlzIGNhbGxlZCBpbnNpZGUgYGZ1bmNgLCB3ZSBuZWVkIHRvIGF2b2lkXG5cdCAgLy8gb3ZlcnJ3cml0aW5nIHdpdGggeWV0IGFub3RoZXIgYHNjaGVkdWxlYC5cblx0ICBpZiAoIXRoaXMuY2xvY2suX2hhc0V2ZW50KHRoaXMpICYmIHRoaXMuaXNSZXBlYXRlZCgpICYmICF0aGlzLl9jbGVhcmVkKVxuXHQgICAgdGhpcy5zY2hlZHVsZSh0aGlzLmRlYWRsaW5lICsgdGhpcy5yZXBlYXRUaW1lKSBcblx0fVxuXHRcblx0Ly8gVXBkYXRlcyBjYWNoZWQgdGltZXNcblx0RXZlbnQucHJvdG90eXBlLl9yZWZyZXNoRWFybHlMYXRlRGF0ZXMgPSBmdW5jdGlvbigpIHtcblx0ICB0aGlzLl9sYXRlc3RUaW1lID0gdGhpcy5kZWFkbGluZSArIHRoaXMudG9sZXJhbmNlTGF0ZVxuXHQgIHRoaXMuX2VhcmxpZXN0VGltZSA9IHRoaXMuZGVhZGxpbmUgLSB0aGlzLnRvbGVyYW5jZUVhcmx5XG5cdH1cblx0XG5cdC8vID09PT09PT09PT09PT09PT09PT09IFdBQUNsb2NrID09PT09PT09PT09PT09PT09PT09IC8vXG5cdHZhciBXQUFDbG9jayA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCwgb3B0cykge1xuXHQgIHZhciBzZWxmID0gdGhpc1xuXHQgIG9wdHMgPSBvcHRzIHx8IHt9XG5cdCAgdGhpcy50aWNrTWV0aG9kID0gb3B0cy50aWNrTWV0aG9kIHx8ICdTY3JpcHRQcm9jZXNzb3JOb2RlJ1xuXHQgIHRoaXMudG9sZXJhbmNlRWFybHkgPSBvcHRzLnRvbGVyYW5jZUVhcmx5IHx8IENMT0NLX0RFRkFVTFRTLnRvbGVyYW5jZUVhcmx5XG5cdCAgdGhpcy50b2xlcmFuY2VMYXRlID0gb3B0cy50b2xlcmFuY2VMYXRlIHx8IENMT0NLX0RFRkFVTFRTLnRvbGVyYW5jZUxhdGVcblx0ICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XG5cdCAgdGhpcy5fZXZlbnRzID0gW11cblx0ICB0aGlzLl9zdGFydGVkID0gZmFsc2Vcblx0fVxuXHRcblx0Ly8gLS0tLS0tLS0tLSBQdWJsaWMgQVBJIC0tLS0tLS0tLS0gLy9cblx0Ly8gU2NoZWR1bGVzIGBmdW5jYCB0byBydW4gYWZ0ZXIgYGRlbGF5YCBzZWNvbmRzLlxuXHRXQUFDbG9jay5wcm90b3R5cGUuc2V0VGltZW91dCA9IGZ1bmN0aW9uKGZ1bmMsIGRlbGF5KSB7XG5cdCAgcmV0dXJuIHRoaXMuX2NyZWF0ZUV2ZW50KGZ1bmMsIHRoaXMuX2Fic1RpbWUoZGVsYXkpKVxuXHR9XG5cdFxuXHQvLyBTY2hlZHVsZXMgYGZ1bmNgIHRvIHJ1biBiZWZvcmUgYGRlYWRsaW5lYC5cblx0V0FBQ2xvY2sucHJvdG90eXBlLmNhbGxiYWNrQXRUaW1lID0gZnVuY3Rpb24oZnVuYywgZGVhZGxpbmUpIHtcblx0ICByZXR1cm4gdGhpcy5fY3JlYXRlRXZlbnQoZnVuYywgZGVhZGxpbmUpXG5cdH1cblx0XG5cdC8vIFN0cmV0Y2hlcyBgZGVhZGxpbmVgIGFuZCBgcmVwZWF0YCBvZiBhbGwgc2NoZWR1bGVkIGBldmVudHNgIGJ5IGByYXRpb2AsIGtlZXBpbmdcblx0Ly8gdGhlaXIgcmVsYXRpdmUgZGlzdGFuY2UgdG8gYHRSZWZgLiBJbiBmYWN0IHRoaXMgaXMgZXF1aXZhbGVudCB0byBjaGFuZ2luZyB0aGUgdGVtcG8uXG5cdFdBQUNsb2NrLnByb3RvdHlwZS50aW1lU3RyZXRjaCA9IGZ1bmN0aW9uKHRSZWYsIGV2ZW50cywgcmF0aW8pIHtcblx0ICBldmVudHMuZm9yRWFjaChmdW5jdGlvbihldmVudCkgeyBldmVudC50aW1lU3RyZXRjaCh0UmVmLCByYXRpbykgfSlcblx0ICByZXR1cm4gZXZlbnRzXG5cdH1cblx0XG5cdC8vIFJlbW92ZXMgYWxsIHNjaGVkdWxlZCBldmVudHMgYW5kIHN0YXJ0cyB0aGUgY2xvY2sgXG5cdFdBQUNsb2NrLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uKCkge1xuXHQgIGlmICh0aGlzLl9zdGFydGVkID09PSBmYWxzZSkge1xuXHQgICAgdmFyIHNlbGYgPSB0aGlzXG5cdCAgICB0aGlzLl9zdGFydGVkID0gdHJ1ZVxuXHQgICAgdGhpcy5fZXZlbnRzID0gW11cblx0XG5cdCAgICBpZiAodGhpcy50aWNrTWV0aG9kID09PSAnU2NyaXB0UHJvY2Vzc29yTm9kZScpIHtcblx0ICAgICAgdmFyIGJ1ZmZlclNpemUgPSAyNTZcblx0ICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBub2RlIHRvIGF2b2lkIGdhcmJhZ2UgY29sbGVjdGlvblxuXHQgICAgICB0aGlzLl9jbG9ja05vZGUgPSB0aGlzLmNvbnRleHQuY3JlYXRlU2NyaXB0UHJvY2Vzc29yKGJ1ZmZlclNpemUsIDEsIDEpXG5cdCAgICAgIHRoaXMuX2Nsb2NrTm9kZS5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbilcblx0ICAgICAgdGhpcy5fY2xvY2tOb2RlLm9uYXVkaW9wcm9jZXNzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7IHNlbGYuX3RpY2soKSB9KVxuXHQgICAgICB9XG5cdCAgICB9IGVsc2UgaWYgKHRoaXMudGlja01ldGhvZCA9PT0gJ21hbnVhbCcpIG51bGwgLy8gX3RpY2sgaXMgY2FsbGVkIG1hbnVhbGx5XG5cdFxuXHQgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgdGlja01ldGhvZCAnICsgdGhpcy50aWNrTWV0aG9kKVxuXHQgIH1cblx0fVxuXHRcblx0Ly8gU3RvcHMgdGhlIGNsb2NrXG5cdFdBQUNsb2NrLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdCAgaWYgKHRoaXMuX3N0YXJ0ZWQgPT09IHRydWUpIHtcblx0ICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZVxuXHQgICAgdGhpcy5fY2xvY2tOb2RlLmRpc2Nvbm5lY3QoKVxuXHQgIH0gIFxuXHR9XG5cdFxuXHQvLyAtLS0tLS0tLS0tIFByaXZhdGUgLS0tLS0tLS0tLSAvL1xuXHRcblx0Ly8gVGhpcyBmdW5jdGlvbiBpcyByYW4gcGVyaW9kaWNhbGx5LCBhbmQgYXQgZWFjaCB0aWNrIGl0IGV4ZWN1dGVzXG5cdC8vIGV2ZW50cyBmb3Igd2hpY2ggYGN1cnJlbnRUaW1lYCBpcyBpbmNsdWRlZCBpbiB0aGVpciB0b2xlcmFuY2UgaW50ZXJ2YWwuXG5cdFdBQUNsb2NrLnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uKCkge1xuXHQgIHZhciBldmVudCA9IHRoaXMuX2V2ZW50cy5zaGlmdCgpXG5cdFxuXHQgIHdoaWxlKGV2ZW50ICYmIGV2ZW50Ll9lYXJsaWVzdFRpbWUgPD0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lKSB7XG5cdCAgICBldmVudC5fZXhlY3V0ZSgpXG5cdCAgICBldmVudCA9IHRoaXMuX2V2ZW50cy5zaGlmdCgpXG5cdCAgfVxuXHRcblx0ICAvLyBQdXQgYmFjayB0aGUgbGFzdCBldmVudFxuXHQgIGlmKGV2ZW50KSB0aGlzLl9ldmVudHMudW5zaGlmdChldmVudClcblx0fVxuXHRcblx0Ly8gQ3JlYXRlcyBhbiBldmVudCBhbmQgaW5zZXJ0IGl0IHRvIHRoZSBsaXN0XG5cdFdBQUNsb2NrLnByb3RvdHlwZS5fY3JlYXRlRXZlbnQgPSBmdW5jdGlvbihmdW5jLCBkZWFkbGluZSkge1xuXHQgIHJldHVybiBuZXcgRXZlbnQodGhpcywgZGVhZGxpbmUsIGZ1bmMpXG5cdH1cblx0XG5cdC8vIEluc2VydHMgYW4gZXZlbnQgdG8gdGhlIGxpc3Rcblx0V0FBQ2xvY2sucHJvdG90eXBlLl9pbnNlcnRFdmVudCA9IGZ1bmN0aW9uKGV2ZW50KSB7XG5cdCAgdGhpcy5fZXZlbnRzLnNwbGljZSh0aGlzLl9pbmRleEJ5VGltZShldmVudC5fZWFybGllc3RUaW1lKSwgMCwgZXZlbnQpXG5cdH1cblx0XG5cdC8vIFJlbW92ZXMgYW4gZXZlbnQgZnJvbSB0aGUgbGlzdFxuXHRXQUFDbG9jay5wcm90b3R5cGUuX3JlbW92ZUV2ZW50ID0gZnVuY3Rpb24oZXZlbnQpIHtcblx0ICB2YXIgaW5kID0gdGhpcy5fZXZlbnRzLmluZGV4T2YoZXZlbnQpXG5cdCAgaWYgKGluZCAhPT0gLTEpIHRoaXMuX2V2ZW50cy5zcGxpY2UoaW5kLCAxKVxuXHR9XG5cdFxuXHQvLyBSZXR1cm5zIHRydWUgaWYgYGV2ZW50YCBpcyBpbiBxdWV1ZSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdFdBQUNsb2NrLnByb3RvdHlwZS5faGFzRXZlbnQgPSBmdW5jdGlvbihldmVudCkge1xuXHQgcmV0dXJuIHRoaXMuX2V2ZW50cy5pbmRleE9mKGV2ZW50KSAhPT0gLTFcblx0fVxuXHRcblx0Ly8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGV2ZW50IHdob3NlIGRlYWRsaW5lIGlzID49IHRvIGBkZWFkbGluZWBcblx0V0FBQ2xvY2sucHJvdG90eXBlLl9pbmRleEJ5VGltZSA9IGZ1bmN0aW9uKGRlYWRsaW5lKSB7XG5cdCAgLy8gcGVyZm9ybXMgYSBiaW5hcnkgc2VhcmNoXG5cdCAgdmFyIGxvdyA9IDBcblx0ICAgICwgaGlnaCA9IHRoaXMuX2V2ZW50cy5sZW5ndGhcblx0ICAgICwgbWlkXG5cdCAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcblx0ICAgIG1pZCA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMilcblx0ICAgIGlmICh0aGlzLl9ldmVudHNbbWlkXS5fZWFybGllc3RUaW1lIDwgZGVhZGxpbmUpXG5cdCAgICAgIGxvdyA9IG1pZCArIDFcblx0ICAgIGVsc2UgaGlnaCA9IG1pZFxuXHQgIH1cblx0ICByZXR1cm4gbG93XG5cdH1cblx0XG5cdC8vIENvbnZlcnRzIGZyb20gcmVsYXRpdmUgdGltZSB0byBhYnNvbHV0ZSB0aW1lXG5cdFdBQUNsb2NrLnByb3RvdHlwZS5fYWJzVGltZSA9IGZ1bmN0aW9uKHJlbFRpbWUpIHtcblx0ICByZXR1cm4gcmVsVGltZSArIHRoaXMuY29udGV4dC5jdXJyZW50VGltZVxuXHR9XG5cdFxuXHQvLyBDb252ZXJ0cyBmcm9tIGFic29sdXRlIHRpbWUgdG8gcmVsYXRpdmUgdGltZSBcblx0V0FBQ2xvY2sucHJvdG90eXBlLl9yZWxUaW1lID0gZnVuY3Rpb24oYWJzVGltZSkge1xuXHQgIHJldHVybiBhYnNUaW1lIC0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lXG5cdH1cblx0LyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oNDQpKSlcblxuLyoqKi8gfSksXG4vKiA0NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxuXHR2YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cdFxuXHQvLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcblx0Ly8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG5cdC8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcblx0Ly8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblx0XG5cdHZhciBjYWNoZWRTZXRUaW1lb3V0O1xuXHR2YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXHRcblx0ZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcblx0ICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xuXHR9XG5cdGZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuXHQgICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcblx0fVxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgdHJ5IHtcblx0ICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuXHQgICAgfVxuXHQgICAgdHJ5IHtcblx0ICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcblx0ICAgICAgICB9XG5cdCAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcblx0ICAgIH1cblx0fSAoKSlcblx0ZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcblx0ICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG5cdCAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG5cdCAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcblx0ICAgIH1cblx0ICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG5cdCAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcblx0ICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcblx0ICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuXHQgICAgfVxuXHQgICAgdHJ5IHtcblx0ICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG5cdCAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcblx0ICAgIH0gY2F0Y2goZSl7XG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG5cdCAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcblx0ICAgICAgICB9IGNhdGNoKGUpe1xuXHQgICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuXHQgICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHRcblx0XG5cdH1cblx0ZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuXHQgICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG5cdCAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG5cdCAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuXHQgICAgfVxuXHQgICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuXHQgICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG5cdCAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuXHQgICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcblx0ICAgIH1cblx0ICAgIHRyeSB7XG5cdCAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuXHQgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcblx0ICAgIH0gY2F0Y2ggKGUpe1xuXHQgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcblx0ICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG5cdCAgICAgICAgfSBjYXRjaCAoZSl7XG5cdCAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuXHQgICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG5cdCAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0XG5cdFxuXHRcblx0fVxuXHR2YXIgcXVldWUgPSBbXTtcblx0dmFyIGRyYWluaW5nID0gZmFsc2U7XG5cdHZhciBjdXJyZW50UXVldWU7XG5cdHZhciBxdWV1ZUluZGV4ID0gLTE7XG5cdFxuXHRmdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG5cdCAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICB9XG5cdCAgICBkcmFpbmluZyA9IGZhbHNlO1xuXHQgICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcblx0ICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG5cdCAgICB9XG5cdCAgICBpZiAocXVldWUubGVuZ3RoKSB7XG5cdCAgICAgICAgZHJhaW5RdWV1ZSgpO1xuXHQgICAgfVxuXHR9XG5cdFxuXHRmdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuXHQgICAgaWYgKGRyYWluaW5nKSB7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgfVxuXHQgICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG5cdCAgICBkcmFpbmluZyA9IHRydWU7XG5cdFxuXHQgICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcblx0ICAgIHdoaWxlKGxlbikge1xuXHQgICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuXHQgICAgICAgIHF1ZXVlID0gW107XG5cdCAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuXHQgICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG5cdCAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuXHQgICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcblx0ICAgIH1cblx0ICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG5cdCAgICBkcmFpbmluZyA9IGZhbHNlO1xuXHQgICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHR9XG5cdFxuXHRwcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuXHQgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuXHQgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHQgICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcblx0ICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG5cdCAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcblx0ICAgIH1cblx0fTtcblx0XG5cdC8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcblx0ZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG5cdCAgICB0aGlzLmZ1biA9IGZ1bjtcblx0ICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcblx0fVxuXHRJdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcblx0fTtcblx0cHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcblx0cHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcblx0cHJvY2Vzcy5lbnYgPSB7fTtcblx0cHJvY2Vzcy5hcmd2ID0gW107XG5cdHByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xuXHRwcm9jZXNzLnZlcnNpb25zID0ge307XG5cdFxuXHRmdW5jdGlvbiBub29wKCkge31cblx0XG5cdHByb2Nlc3Mub24gPSBub29wO1xuXHRwcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcblx0cHJvY2Vzcy5vbmNlID0gbm9vcDtcblx0cHJvY2Vzcy5vZmYgPSBub29wO1xuXHRwcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcblx0cHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xuXHRwcm9jZXNzLmVtaXQgPSBub29wO1xuXHRwcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5cdHByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cdFxuXHRwcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cdFxuXHRwcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuXHQgICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xuXHR9O1xuXHRcblx0cHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcblx0cHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcblx0ICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG5cdH07XG5cdHByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG5cblxuLyoqKi8gfSksXG4vKiA0NSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHsgdmFyIHByb3AgPSBwcm9wc1trZXldOyBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChwcm9wLnZhbHVlKSBwcm9wLndyaXRhYmxlID0gdHJ1ZTsgfSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKTsgfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXHRcblx0dmFyIF9jbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9O1xuXHRcblx0dmFyIGNsb2NrID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKS5jbG9jaztcblx0XG5cdHZhciBJbnRlcnZhbCA9IChmdW5jdGlvbiAoKSB7XG5cdCAgZnVuY3Rpb24gSW50ZXJ2YWwocmF0ZSwgZnVuYywgb24pIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBJbnRlcnZhbCk7XG5cdFxuXHQgICAgdGhpcy5yYXRlID0gcmF0ZTtcblx0ICAgIHRoaXMub24gPSBvbjtcblx0ICAgIHRoaXMuY2xvY2sgPSBjbG9jaygpOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblx0XG5cdCAgICB0aGlzLnBhdHRlcm4gPSBbMV07XG5cdCAgICB0aGlzLmluZGV4ID0gMDtcblx0XG5cdCAgICB0aGlzLmV2ZW50ID0gZnVuYyA/IGZ1bmMgOiBmdW5jdGlvbiAoKSB7fTtcblx0XG5cdCAgICBpZiAodGhpcy5vbikge1xuXHQgICAgICB0aGlzLnN0YXJ0KCk7XG5cdCAgICB9XG5cdCAgfVxuXHRcblx0ICBfY3JlYXRlQ2xhc3MoSW50ZXJ2YWwsIHtcblx0ICAgIF9ldmVudDoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gX2V2ZW50KGUpIHtcblx0ICAgICAgICAvLyAgaWYgKHRoaXMucGF0dGVyblt0aGlzLmluZGV4JXRoaXMucGF0dGVybi5sZW5ndGhdKSB7XG5cdCAgICAgICAgdGhpcy5ldmVudChlKTtcblx0ICAgICAgICAvLyAgfVxuXHQgICAgICAgIHRoaXMuaW5kZXgrKztcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHN0b3A6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN0b3AoKSB7XG5cdCAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xuXHQgICAgICAgIHRoaXMuaW50ZXJ2YWwuY2xlYXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHN0YXJ0OiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzdGFydCgpIHtcblx0ICAgICAgICB0aGlzLm9uID0gdHJ1ZTtcblx0ICAgICAgICB0aGlzLmludGVydmFsID0gdGhpcy5jbG9jay5jYWxsYmFja0F0VGltZSh0aGlzLl9ldmVudC5iaW5kKHRoaXMpLCB0aGlzLmNsb2NrLmNvbnRleHQuY3VycmVudFRpbWUpLnJlcGVhdCh0aGlzLnJhdGUgLyAxMDAwKS50b2xlcmFuY2UoeyBlYXJseTogMC4xLCBsYXRlOiAxIH0pO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbXM6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIG1zKG5ld3JhdGUpIHtcblx0ICAgICAgICBpZiAodGhpcy5vbikge1xuXHQgICAgICAgICAgdmFyIHJhdGlvID0gbmV3cmF0ZSAvIHRoaXMucmF0ZTtcblx0ICAgICAgICAgIHRoaXMucmF0ZSA9IG5ld3JhdGU7XG5cdCAgICAgICAgICB0aGlzLmNsb2NrLnRpbWVTdHJldGNoKHRoaXMuY2xvY2suY29udGV4dC5jdXJyZW50VGltZSwgW3RoaXMuaW50ZXJ2YWxdLCByYXRpbyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMucmF0ZSA9IG5ld3JhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBJbnRlcnZhbDtcblx0fSkoKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gSW50ZXJ2YWw7XG5cbi8qKiovIH0pXG4vKioqKioqLyBdKVxufSk7XG47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbmRsWW5CaFkyczZMeTh2ZDJWaWNHRmpheTkxYm1sMlpYSnpZV3hOYjJSMWJHVkVaV1pwYm1sMGFXOXVJaXdpZDJWaWNHRmphem92THk5M1pXSndZV05yTDJKdmIzUnpkSEpoY0NCaU1qWTVZV05sWmpoallXUmhOekE0TkRVd01pSXNJbmRsWW5CaFkyczZMeTh2TGk5cGJtUmxlQzVxY3lJc0luZGxZbkJoWTJzNkx5OHZMaTlzYVdJdmJXRnBiaTVxY3lJc0luZGxZbkJoWTJzNkx5OHZMaTlzYVdJdmFXNTBaWEptWVdObGN5OXBibVJsZUM1cWN5SXNJbmRsWW5CaFkyczZMeTh2TGk5c2FXSXZhVzUwWlhKbVlXTmxjeTl3YjNOcGRHbHZiaTVxY3lJc0luZGxZbkJoWTJzNkx5OHZMaTlzYVdJdmRYUnBiQzl6ZG1jdWFuTWlMQ0ozWldKd1lXTnJPaTh2THk0dmJHbGlMM1YwYVd3dmJXRjBhQzVxY3lJc0luZGxZbkJoWTJzNkx5OHZMaTlzYVdJdlkyOXlaUzlwYm5SbGNtWmhZMlV1YW5NaUxDSjNaV0p3WVdOck9pOHZMeTR2YkdsaUwzVjBhV3d2Wkc5dExtcHpJaXdpZDJWaWNHRmphem92THk4dUwyeHBZaTkxZEdsc0wzVjBhV3d1YW5NaUxDSjNaV0p3WVdOck9pOHZMeTR2YkdsaUwzVjBhV3d2ZEc5MVkyZ3Vhbk1pTENKM1pXSndZV05yT2k4dkx5NHZmaTlsZG1WdWRITXZaWFpsYm5SekxtcHpJaXdpZDJWaWNHRmphem92THk4dUwyeHBZaTl0YjJSbGJITXZjM1JsY0M1cWN5SXNJbmRsWW5CaFkyczZMeTh2TGk5c2FXSXZkWFJwYkM5cGJuUmxjbUZqZEdsdmJpNXFjeUlzSW5kbFluQmhZMnM2THk4dkxpOXNhV0l2Ylc5a1pXeHpMM1J2WjJkc1pTNXFjeUlzSW5kbFluQmhZMnM2THk4dkxpOXNhV0l2YVc1MFpYSm1ZV05sY3k5emJHbGtaWEl1YW5NaUxDSjNaV0p3WVdOck9pOHZMeTR2YkdsaUwybHVkR1Z5Wm1GalpYTXZkRzluWjJ4bExtcHpJaXdpZDJWaWNHRmphem92THk4dUwyeHBZaTlwYm5SbGNtWmhZMlZ6TDJKMWRIUnZiaTVxY3lJc0luZGxZbkJoWTJzNkx5OHZMaTlzYVdJdlkyOXRjRzl1Wlc1MGN5OWlkWFIwYjI1MFpXMXdiR0YwWlM1cWN5SXNJbmRsWW5CaFkyczZMeTh2TGk5c2FXSXZhVzUwWlhKbVlXTmxjeTkwWlhoMFluVjBkRzl1TG1weklpd2lkMlZpY0dGamF6b3ZMeTh1TDJ4cFlpOXBiblJsY21aaFkyVnpMM0poWkdsdlluVjBkRzl1TG1weklpd2lkMlZpY0dGamF6b3ZMeTh1TDJ4cFlpOXBiblJsY21aaFkyVnpMMjUxYldKbGNpNXFjeUlzSW5kbFluQmhZMnM2THk4dkxpOXNhV0l2YVc1MFpYSm1ZV05sY3k5elpXeGxZM1F1YW5NaUxDSjNaV0p3WVdOck9pOHZMeTR2YkdsaUwybHVkR1Z5Wm1GalpYTXZaR2xoYkM1cWN5SXNJbmRsWW5CaFkyczZMeTh2TGk5c2FXSXZhVzUwWlhKbVlXTmxjeTl3YVdGdWJ5NXFjeUlzSW5kbFluQmhZMnM2THk4dkxpOXNhV0l2YVc1MFpYSm1ZV05sY3k5elpYRjFaVzVqWlhJdWFuTWlMQ0ozWldKd1lXTnJPaTh2THk0dmJHbGlMMjF2WkdWc2N5OXRZWFJ5YVhndWFuTWlMQ0ozWldKd1lXTnJPaTh2THk0dmJHbGlMMjF2WkdWc2N5OXpaWEYxWlc1alpTNXFjeUlzSW5kbFluQmhZMnM2THk4dkxpOXNhV0l2Ylc5a1pXeHpMMlJ5ZFc1ckxtcHpJaXdpZDJWaWNHRmphem92THk4dUwyeHBZaTl0YjJSbGJITXZZMjkxYm5SbGNpNXFjeUlzSW5kbFluQmhZMnM2THk4dkxpOXNhV0l2YVc1MFpYSm1ZV05sY3k5d1lXNHlaQzVxY3lJc0luZGxZbkJoWTJzNkx5OHZMaTlzYVdJdmFXNTBaWEptWVdObGN5OTBhV3gwTG1weklpd2lkMlZpY0dGamF6b3ZMeTh1TDJ4cFlpOXBiblJsY21aaFkyVnpMMjExYkhScGMyeHBaR1Z5TG1weklpd2lkMlZpY0dGamF6b3ZMeTh1TDJ4cFlpOWpiMjF3YjI1bGJuUnpMM05zYVdSbGNuUmxiWEJzWVhSbExtcHpJaXdpZDJWaWNHRmphem92THk4dUwyeHBZaTlwYm5SbGNtWmhZMlZ6TDNCaGJpNXFjeUlzSW5kbFluQmhZMnM2THk4dkxpOXNhV0l2YVc1MFpYSm1ZV05sY3k5bGJuWmxiRzl3WlM1cWN5SXNJbmRsWW5CaFkyczZMeTh2TGk5c2FXSXZhVzUwWlhKbVlXTmxjeTl6Y0dWamRISnZaM0poYlM1cWN5SXNJbmRsWW5CaFkyczZMeTh2TGk5c2FXSXZhVzUwWlhKbVlXTmxjeTl0WlhSbGNpNXFjeUlzSW5kbFluQmhZMnM2THk4dkxpOXNhV0l2YVc1MFpYSm1ZV05sY3k5dmMyTnBiR3h2YzJOdmNHVXVhbk1pTENKM1pXSndZV05yT2k4dkx5NHZiR2xpTDJOdmNtVXZjbUZqYXk1cWN5SXNJbmRsWW5CaFkyczZMeTh2TGk5c2FXSXZkWFJwYkM5MGNtRnVjMlp2Y20wdWFuTWlMQ0ozWldKd1lXTnJPaTh2THk0dmJHbGlMM1IxYm1sdVp5OTBkVzVwYm1jdWFuTWlMQ0ozWldKd1lXTnJPaTh2THk0dmJHbGlMMjF2WkdWc2N5OXlZV1JwYnk1cWN5SXNJbmRsWW5CaFkyczZMeTh2TGk5K0wzZGhZV05zYjJOckwybHVaR1Y0TG1weklpd2lkMlZpY0dGamF6b3ZMeTh1TDM0dmQyRmhZMnh2WTJzdmJHbGlMMWRCUVVOc2IyTnJMbXB6SWl3aWQyVmljR0ZqYXpvdkx5OHVMMzR2Y0hKdlkyVnpjeTlpY205M2MyVnlMbXB6SWl3aWQyVmljR0ZqYXpvdkx5OHVMMnhwWWk5MGFXMWxMMmx1ZEdWeWRtRnNMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQkxFTkJRVU03UVVGRFJDeFBPMEZEVmtFN1FVRkRRVHM3UVVGRlFUdEJRVU5CT3p0QlFVVkJPMEZCUTBFN1FVRkRRVHM3UVVGRlFUdEJRVU5CTzBGQlEwRXNkVUpCUVdVN1FVRkRaanRCUVVOQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVRzN1FVRkZRVHRCUVVOQk96dEJRVVZCTzBGQlEwRTdRVUZEUVRzN08wRkJSMEU3UVVGRFFUczdRVUZGUVR0QlFVTkJPenRCUVVWQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVRzN096czdPenRCUTNSRFFTeGhRVUZaTEVOQlFVTTdPenM3UzBGRlRpeFBRVUZQTEhWRFFVRk5MRU5CUVZrN08ydENRVVZxUWl4UFFVRlBMRU03T3pzN096czdPenM3T3pzN096czdVME50U0U0c1RVRkJUU3hIUVVGT0xFMUJRVTA3VTBGSFRpeFBRVUZQTEVkQlFWQXNUMEZCVHp0VFFVZFFMRXRCUVVzc1IwRkJUQ3hMUVVGTE96czdPMEZCTjBoeVFpeGhRVUZaTEVOQlFVTTdPMHRCUlU0c1ZVRkJWU3gxUTBGQlRTeERRVUZsT3p0TFFVTXZRaXhKUVVGSkxIVkRRVUZOTEVOQlFXRTdPMHRCUTNaQ0xFbEJRVWtzZFVOQlFVMHNSVUZCWVRzN1MwRkRka0lzU1VGQlNTeDFRMEZCVFN4RlFVRnBRanM3UzBGRGRFSXNVMEZCVXl3clEwRkJUU3hGUVVGclFqczdRVUZGTjBNc1MwRkJTU3hQUVVGUExFZEJRVWNzYlVKQlFVOHNRMEZCUXl4RlFVRnJRaXhEUVVGRExFTkJRVU03UVVGRE1VTXNTMEZCU1N4TFFVRkxMRWRCUVVjc2JVSkJRVThzUTBGQlF5eEZRVUZuUWl4RFFVRkRMRU5CUVVNN1FVRkRkRU1zUzBGQlNTeExRVUZMTEVkQlFVY3NiVUpCUVU4c1EwRkJReXhGUVVGblFpeERRVUZETEVOQlFVTTdRVUZEZEVNc1MwRkJTU3hSUVVGUkxFZEJRVWNzYlVKQlFVOHNRMEZCUXl4RlFVRnRRaXhEUVVGRExFTkJRVU03UVVGRE5VTXNTMEZCU1N4TlFVRk5MRWRCUVVjc2JVSkJRVThzUTBGQlF5eEZRVUZwUWl4RFFVRkRMRU5CUVVNN08wdEJSV3BETEZGQlFWRXNkVU5CUVUwc1JVRkJWVHM3UzBGRGVFSXNVVUZCVVN4MVEwRkJUU3hGUVVGcFFqczdPenM3TzB0QlQyaERMRTlCUVU4N1FVRkZSU3haUVVaVUxFOUJRVThzUTBGRlJ5eFBRVUZQTEVWQlFVVTdNa0pCUm01Q0xFOUJRVTg3TzBGQlNVd3NWVUZCU3l4SlFVRkpMRWRCUVVjc1NVRkJTU3hWUVVGVkxFVkJRVVU3UVVGRGVFSXNWMEZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExGVkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0TlFVTXZRanM3UVVGRlJDeFZRVUZMTEVsQlFVa3NSMEZCUnl4SlFVRkpMRWxCUVVrc1JVRkJSVHRCUVVOc1FpeFhRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzAxQlEzcENPenRCUVVWRUxGTkJRVWtzU1VGQlNTeEhRVUZITzBGQlExUXNZVUZCVVN4SlFVRkpPMDFCUTJJc1EwRkJRenM3UVVGRlJpeFRRVUZKTEUxQlFVMHNSMEZCUnp0QlFVTllMR2RDUVVGWExFOUJRVTg3UVVGRGJFSXNZMEZCVXl4TFFVRkxPMEZCUTJRc1kwRkJVeXhMUVVGTE8wRkJRMlFzYVVKQlFWa3NVVUZCVVR0QlFVTndRaXhsUVVGVkxFMUJRVTA3VFVGRGFrSXNRMEZCUXpzN1FVRkZSaXhWUVVGTExFbEJRVWtzUjBGQlJ5eEpRVUZKTEUxQlFVMHNSVUZCUlR0QlFVTjBRaXhYUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wMUJRM3BDT3p0QlFVVkVMRlZCUVVzc1NVRkJTU3hIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTzBGQlEzQkNMRmRCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1RVRkRka0k3TzBGQlJVUXNVMEZCU1N4alFVRmpMRWRCUVVjc1RVRkJUU3hEUVVGRExGbEJRVmtzU1VGQlNTeE5RVUZOTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU03UVVGRGRFVXNVMEZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhQUVVGUExFbEJRVWtzU1VGQlNTeGpRVUZqTEVWQlFVVXNRMEZCUXpzN1FVRkZhRVFzVTBGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRWxCUVVrc1JVRkJSU3hEUVVGRE8wRkJRM1pDTEZOQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6czdRVUZGTTBNc1UwRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03UVVGRGVrTXNVMEZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF6dEJRVU51UWl4VFFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSExGRkJRVkVzUTBGQlF6czdRVUZGZWtJc1UwRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ6dEJRVU5hTEdGQlFVMHNSVUZCUlN4TlFVRk5PMEZCUTJRc1YwRkJTU3hGUVVGRkxFMUJRVTA3UVVGRFdpeFpRVUZMTEVWQlFVVXNUVUZCVFR0QlFVTmlMRmRCUVVrc1JVRkJSU3hOUVVGTk8wRkJRMW9zYTBKQlFWY3NSVUZCUlN4TlFVRk5PMEZCUTI1Q0xHbENRVUZWTEVWQlFVVXNUVUZCVFR0TlFVTnVRaXhEUVVGRE96dEJRVVZHTEZOQlFVa3NRMEZCUXl4VFFVRlRMRWRCUVVjc1UwRkJVeXhEUVVGRE8wRkJRek5DTEZOQlFVa3NRMEZCUXl4SFFVRkhMRWRCUVVjc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF6czdRVUZIZWtJc1UwRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEZRVUZGTEVOQlFVTTdRVUZEWkN4VlFVRkxMRWxCUVVrc1IwRkJSeXhKUVVGSkxGVkJRVlVzUlVGQlJUdEJRVU14UWl4WFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUlVGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0TlFVTTVRenM3T3p0QlFVOUVMRk5CUVVrc2JVSkJRVzFDTEVkQlFVY3NVVUZCVVN4RFFVRkRMRzlDUVVGdlFpeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMEZCUTJwRkxGTkJRVWtzYzBKQlFYTkNMRWRCUVVjc2QwTkJRWGRETEVOQlFVTTdRVUZEZEVVc1UwRkJTU3huUWtGQlowSXNSMEZCUnl4UlFVRlJMRU5CUVVNc1lVRkJZU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzBGQlEzWkVMSEZDUVVGblFpeERRVUZETEVsQlFVa3NSMEZCUnl4VlFVRlZMRU5CUVVNN1FVRkRia01zY1VKQlFXZENMRU5CUVVNc1UwRkJVeXhIUVVGSExITkNRVUZ6UWl4RFFVRkRPMEZCUTNCRUxGTkJRVWtzYlVKQlFXMUNMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUlVGQlJUdEJRVU5zUXl4WFFVRkpMRTFCUVUwc1IwRkJSeXh0UWtGQmJVSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhWUVVGVk8wRkJRemxETEdGQlFVMHNRMEZCUXl4WlFVRlpMRU5CUVVVc1owSkJRV2RDTEVWQlFVVXNiVUpCUVcxQ0xFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdUVUZETDBRc1RVRkJUVHRCUVVOTUxHVkJRVkVzUTBGQlF5eExRVUZMTEVOQlFVTXNVMEZCVXl4SFFVRkRMSE5DUVVGelFpeEhRVUZETEZWQlFWY3NRMEZCUXl4RFFVRkRPMDFCUXpsRU96dEpRVWRLTzBGQlNFazdaMEpCTTBWSUxFOUJRVTg3UVVGdlJrd3NXVUZCVHp0WlFVcEJMRmxCUVVjN1FVRkRXaXhuUWtGQlR5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRPMUZCUTNSQ08xbEJSVlVzVlVGQlF5eEhRVUZITEVWQlFVVTdRVUZEWml4aFFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzBGQlEyeENMR0ZCUVVrc1EwRkJReXhSUVVGUkxFZEJRVWNzUjBGQlJ5eERRVUZETzBGQlEzQkNMR0ZCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wRkJRM2hETEdGQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU03VVVGRGNFSTdPenM3VlVGNlJrTXNUMEZCVHpzN08wRkJLMFppTEV0QlFVa3NTMEZCU3l4SFFVRkhMRWxCUVVrc1QwRkJUeXhGUVVGRkxFTkJRVU03TzBGQlJXNUNMRlZCUVZNc1RVRkJUU3hIUVVGSE8wRkJRM0pDTEZWQlFVOHNTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJRenRGUVVOMlFqczdRVUZEVFN4VlFVRlRMRTlCUVU4c1IwRkJSenRCUVVOMFFpeFZRVUZQTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNN1JVRkRlRUk3TzBGQlEwMHNWVUZCVXl4TFFVRkxMRWRCUVVjN1FVRkRjRUlzVlVGQlR5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRPMFZCUTNSQ096dHpRa0ZGWXl4TFFVRkxMRU03T3pzN096czdPMnRDUTJwSlREdEJRVU5pTEZkQlFWRXNSVUZCUlN4dFFrRkJUeXhEUVVGRExFTkJRVmtzUTBGQlF6dEJRVU12UWl4VFFVRk5MRVZCUVVVc2JVSkJRVThzUTBGQlF5eEZRVUZWTEVOQlFVTTdRVUZETTBJc1UwRkJUU3hGUVVGRkxHMUNRVUZQTEVOQlFVTXNSVUZCVlN4RFFVRkRPenM3UVVGSE0wSXNVMEZCVFN4RlFVRkZMRzFDUVVGUExFTkJRVU1zUlVGQlZTeERRVUZETzBGQlF6TkNMR0ZCUVZVc1JVRkJSU3h0UWtGQlR5eERRVUZETEVWQlFXTXNRMEZCUXp0QlFVTnVReXhqUVVGWExFVkJRVVVzYlVKQlFVOHNRMEZCUXl4RlFVRmxMRU5CUVVNN1FVRkRja01zVTBGQlRTeEZRVUZGTEcxQ1FVRlBMRU5CUVVNc1JVRkJWU3hEUVVGRE8wRkJRek5DTEZOQlFVMHNSVUZCUlN4dFFrRkJUeXhEUVVGRExFVkJRVlVzUTBGQlF6dEJRVU16UWl4UFFVRkpMRVZCUVVVc2JVSkJRVThzUTBGQlF5eEZRVUZSTEVOQlFVTTdRVUZEZGtJc1VVRkJTeXhGUVVGRkxHMUNRVUZQTEVOQlFVTXNSVUZCVXl4RFFVRkRPMEZCUTNwQ0xGbEJRVk1zUlVGQlJTeHRRa0ZCVHl4RFFVRkRMRVZCUVdFc1EwRkJRenRCUVVOcVF5eFJRVUZMTEVWQlFVVXNiVUpCUVU4c1EwRkJReXhGUVVGVExFTkJRVU03UVVGRGVrSXNUMEZCU1N4RlFVRkZMRzFDUVVGUExFTkJRVU1zUlVGQlVTeERRVUZETzBGQlEzWkNMR05CUVZjc1JVRkJSU3h0UWtGQlR5eERRVUZETEVWQlFXVXNRMEZCUXp0QlFVTnlReXhOUVVGSExFVkJRVVVzYlVKQlFVOHNRMEZCUXl4RlFVRlBMRU5CUVVNN1FVRkRja0lzVjBGQlVTeEZRVUZGTEcxQ1FVRlBMRU5CUVVNc1JVRkJXU3hEUVVGRE8wRkJReTlDTEdOQlFWY3NSVUZCUlN4dFFrRkJUeXhEUVVGRExFVkJRV1VzUTBGQlF6dEJRVU55UXl4UlFVRkxMRVZCUVVVc2JVSkJRVThzUTBGQlF5eEZRVUZUTEVOQlFVTTdRVUZEZWtJc1pVRkJXU3hGUVVGRkxHMUNRVUZQTEVOQlFVTXNSVUZCWjBJc1EwRkJRenRGUVVONFF5eERPenM3T3pzN08wRkRja0pFTEdGQlFWa3NRMEZCUXpzN096czdPenM3T3pzN08wRkJSV0lzUzBGQlNTeEhRVUZITEVkQlFVY3NiVUpCUVU4c1EwRkJReXhEUVVGaExFTkJRVU1zUTBGQlF6dEJRVU5xUXl4TFFVRkpMRk5CUVZNc1IwRkJSeXh0UWtGQlR5eERRVUZETEVOQlFXMUNMRU5CUVVNc1EwRkJRenRCUVVNM1F5eExRVUZKTEVsQlFVa3NSMEZCUnl4dFFrRkJUeXhEUVVGRExFVkJRV2RDTEVOQlFVTXNRMEZCUXpzN1MwRkRla0lzVjBGQlZ5d3JRMEZCVFN4RlFVRnhRanM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3TzB0QmRVTTNRaXhSUVVGUk8wRkJSV2hDTEZsQlJsRXNVVUZCVVN4SFFVVmlPekpDUVVaTExGRkJRVkU3TzBGQlNYcENMRk5CUVVrc1QwRkJUeXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdPMEZCUlhoQ0xGTkJRVWtzVVVGQlVTeEhRVUZITzBGQlEySXNZVUZCVVN4RFFVRkRMRWRCUVVjc1JVRkJReXhIUVVGSExFTkJRVU03UVVGRGFrSXNZVUZCVVN4VlFVRlZPMEZCUTJ4Q0xHRkJRVkVzUTBGQlF6dEJRVU5VTEdGQlFWRXNRMEZCUXp0QlFVTlVMR05CUVZNc1EwRkJRenRCUVVOV0xGVkJRVXNzUjBGQlJ6dEJRVU5TTEdGQlFWRXNRMEZCUXp0QlFVTlVMR0ZCUVZFc1EwRkJRenRCUVVOVUxHTkJRVk1zUTBGQlF6dEJRVU5XTEZWQlFVc3NSMEZCUnp0TlFVTlVMRU5CUVVNN08wRkJSVVlzWjBOQmJrSnBRaXhSUVVGUkxEWkRRVzFDYmtJc1UwRkJVeXhGUVVGRExFOUJRVThzUlVGQlF5eFJRVUZSTEVWQlFVVTdPMEZCUjJ4RExGTkJRVWtzUTBGQlF5eEZRVUZGTEVkQlFVY3NTVUZCU1N4SlFVRkpMRU5CUVVVc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZKTEVWQlFVVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFVkJRVVVzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVVXNRMEZCUXp0QlFVTnVSeXhUUVVGSkxFTkJRVU1zUlVGQlJTeEhRVUZITEVsQlFVa3NTVUZCU1N4RFFVRkZMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZGTEVOQlFVTTdPMEZCUlc1SExGTkJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVYzdRVUZEWkN4UlFVRkRMRVZCUVVVc1NVRkJTU3hYUVVGWExFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hGUVVGRExGbEJRVmtzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRM3BHTEZGQlFVTXNSVUZCUlN4SlFVRkpMRmRCUVZjc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRVZCUVVNc1ZVRkJWU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1RVRkRlRVlzUTBGQlF6dEJRVU5HTEZOQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRlZCUVZVc1EwRkJRenRCUVVNelF5eFRRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNN08wRkJSVE5ETEZOQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenRCUVVOYUxGTkJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0SlFVVm1PenRoUVc1RGEwSXNVVUZCVVRzN1owSkJRVklzVVVGQlVUdEJRWEZETTBJc2JVSkJRV003WTBGQlFTd3dRa0ZCUnpzN1FVRkZaaXhoUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03UVVGRGFrTXNZVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUlhKRE96dEJRVVZFTEd0Q1FVRmhPMk5CUVVFc2VVSkJRVWM3TzBGQlJWb3NZVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU4yUkN4aFFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZET3p0QlFVVjJSQ3hoUVVGSkxFTkJRVU1zWVVGQllTeEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUlVGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN08wRkJSWFJFTEdGQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjN1FVRkRhRUlzWTBGQlJ5eEZRVUZGTEVWQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1lVRkJZU3hIUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUTNoRExFTkJRVU03UVVGRFJpeGhRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRVZCUVVVc1IwRkJSeXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNN08wRkJSVGRETEdGQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzUlVGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRekZETEdGQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzUlVGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRek5ETEdGQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFZEJRVWNzUlVGQlF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRMjVFT3p0QlFVVkVMRzFDUVVGak8yTkJRVUVzTUVKQlFVYzdRVUZEWWl4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eGxRVUZsTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU03UVVGRGRFUXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03VVVGRGRFUTdPMEZCUlVRc1YwRkJUVHRqUVVGQkxHdENRVUZITzBGQlExQXNZVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRk96dEJRVVZvUWl4bFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZITEVWQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dFZRVU5vUkN4TlFVRk5PenRCUVVWTUxHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVVjc1JVRkJReXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMVZCUTJwRU96dEJRVVZFTEdGQlFVa3NRMEZCUXl4bFFVRmxMRWRCUVVjN1FVRkRja0lzV1VGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1ZVRkJWU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTzBGQlEyeERMRmxCUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1ZVRkJWU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTzFWQlEyeEVMRU5CUVVNN08wRkJSVVlzWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRExFbEJRVWtzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRjRVFzWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRExFbEJRVWtzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRja1E3TzBGQlIwUXNWVUZCU3p0alFVRkJMR2xDUVVGSE8wRkJRMDRzWVVGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTTdRVUZEY0VNc1lVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU03UVVGRGNFTXNZVUZCU1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8xRkJRMkk3TzBGQlJVUXNVMEZCU1R0alFVRkJMR2RDUVVGSE8wRkJRMHdzWVVGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZPMEZCUTJoQ0xHVkJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZEYmtNc1pVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEJRVU51UXl4bFFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExGbEJRVmtzUTBGQlJTeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVVVzUTBGQlF6dEJRVU01UXl4bFFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExGbEJRVmtzUTBGQlJTeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVVVzUTBGQlF6dEJRVU01UXl4bFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlF6dEJRVU5xUWl4alFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eExRVUZMTzBGQlEyaENMR05CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEV0QlFVczdXVUZEYWtJc1EwRkJReXhEUVVGRE8wRkJRMGdzWlVGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMVZCUTJZN1VVRkRSanM3UVVGRlJDeFpRVUZQTzJOQlFVRXNiVUpCUVVjN1FVRkRVaXhoUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdVVUZEWmpzN1FVRlpSeXhOUVVGRE96czdPenM3T3p0WlFVcEJMRmxCUVVjN1FVRkRUaXhuUWtGQlR5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJRenRSUVVOMFFqdFpRVVZKTEZWQlFVTXNTMEZCU3l4RlFVRkZPMEZCUTFnc1lVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1FVRkRkRUlzWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVNN1FVRkRha0lzV1VGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1MwRkJTenRCUVVOb1FpeFpRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhMUVVGTE8xVkJRMnBDTEVOQlFVTXNRMEZCUXp0QlFVTklMR0ZCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFJRVU5tT3p0QlFWbEhMRTFCUVVNN096czdPenM3TzFsQlNrRXNXVUZCUnp0QlFVTk9MR2RDUVVGUExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRPMUZCUTNSQ08xbEJSVWtzVlVGQlF5eExRVUZMTEVWQlFVVTdRVUZEV0N4aFFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTjBRaXhoUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUXp0QlFVTnFRaXhaUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4TFFVRkxPMEZCUTJoQ0xGbEJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRXRCUVVzN1ZVRkRha0lzUTBGQlF5eERRVUZETzBGQlEwZ3NZVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8xRkJRMlk3TzBGQlNVY3NaVUZCVlR0WlFVRkJMRmxCUVVjN1FVRkRaaXhuUWtGQlR6dEJRVU5NTEZsQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExGVkJRVlU3UVVGRGNrSXNXVUZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zVlVGQlZUdFZRVU4wUWl4RFFVRkRPMUZCUTBnN08wRkJWVWNzVTBGQlNUczdPenM3T3p0WlFVcEJMRmxCUVVjN1FVRkRWQ3huUWtGQlR5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJRenRSUVVOd1FqdFpRVVZQTEZWQlFVTXNRMEZCUXl4RlFVRkZPMEZCUTFZc1lVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTJoQ0xHRkJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0UlFVTm1PenRCUVZWSExGTkJRVWs3T3pzN096czdXVUZLUVN4WlFVRkhPMEZCUTFRc1owSkJRVThzU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNN1VVRkRjRUk3V1VGRlR5eFZRVUZETEVOQlFVTXNSVUZCUlR0QlFVTldMR0ZCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXp0QlFVTm9RaXhoUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdVVUZEWmpzN1FVRlhSeXhUUVVGSk96czdPenM3TzFsQlNrRXNXVUZCUnp0QlFVTlVMR2RDUVVGUExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRPMUZCUTNCQ08xbEJSVThzVlVGQlF5eERRVUZETEVWQlFVVTdRVUZEVml4aFFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZEYUVJc1lVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzFGQlEyWTdPMEZCVjBjc1UwRkJTVHM3T3pzN096dFpRVXBCTEZsQlFVYzdRVUZEVkN4blFrRkJUeXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXp0UlFVTndRanRaUVVWUExGVkJRVU1zUTBGQlF5eEZRVUZGTzBGQlExWXNZVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF5eERRVUZETzBGQlEyaENMR0ZCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFJRVU5tT3p0QlFWZEhMRlZCUVVzN096czdPenM3V1VGS1FTeFpRVUZITzBGQlExWXNaMEpCUVU4c1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTTdVVUZEY2tJN1dVRkZVU3hWUVVGRExFTkJRVU1zUlVGQlJUdEJRVU5ZTEdGQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1NVRkJTU3hIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU5xUWl4aFFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03VVVGRFpqczdRVUZYUnl4VlFVRkxPenM3T3pzN08xbEJTa0VzV1VGQlJ6dEJRVU5XTEdkQ1FVRlBMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETzFGQlEzSkNPMWxCUlZFc1ZVRkJReXhEUVVGRExFVkJRVVU3UVVGRFdDeGhRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRGFrSXNZVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8xRkJRMlk3TzBGQlYwY3NVMEZCU1RzN096czdPenM3V1VGSVFTeFpRVUZITzBGQlExUXNaMEpCUVU4c1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRPMUZCUXpkQ08xbEJRMDhzVlVGQlF5eERRVUZETEVWQlFVVTdRVUZEVml4aFFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTNwQ0xHRkJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRE1VSTdPenM3VlVFeFVHdENMRkZCUVZFN1NVRkJVeXhUUVVGVE96dHJRa0ZCTVVJc1VVRkJVU3hET3pzN096czdRVU0zUXpkQ0xHRkJRVmtzUTBGQlF6czdRVUZGWWl4TFFVRkpMRWxCUVVrc1IwRkJSeXh0UWtGQlR5eERRVUZETEVOQlFXTXNRMEZCUXl4RFFVRkRPenRyUWtGRmNFSTdPMEZCUldJc1UwRkJUU3hGUVVGRkxGVkJRVU1zU1VGQlNTeEZRVUZMTzBGQlEyaENMRmxCUVU4c1VVRkJVU3hEUVVGRExHVkJRV1VzUTBGQlF5dzBRa0ZCTkVJc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU55UlRzN1FVRkZSQ3hOUVVGSExFVkJRVVVzVlVGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRTFCUVUwc1JVRkJSU3hWUVVGVkxFVkJRVVVzVVVGQlVTeEZRVUZMT3p0QlFVVXpReXhUUVVGSkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRTFCUVUwc1JVRkJSU3hSUVVGUkxFTkJRVU1zUTBGQlF6dEJRVU12UXl4VFFVRkpMRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEUxQlFVMHNSVUZCUlN4VlFVRlZMRU5CUVVNc1EwRkJRenM3UVVGRkwwTXNVMEZCU1N4WlFVRlpMRWRCUVVjc1VVRkJVU3hIUVVGSExGVkJRVlVzU1VGQlNTeEhRVUZITEVkQlFVY3NSMEZCUnl4SFFVRkhMRWRCUVVjc1EwRkJRenM3UVVGRk5VUXNVMEZCU1N4RFFVRkRMRWRCUVVjc1EwRkRTaXhIUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNSMEZCUXl4RFFVRkRMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUjBGQlF5eERRVUZETEVWQlEzcENMRWRCUVVjc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTEVOQlFVTXNSVUZCUlN4WlFVRlpMRVZCUVVVc1EwRkJReXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVTXNRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVU1zUTBGQlF5eERRVU0xUkN4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6czdRVUZGV2l4WlFVRlBMRU5CUVVNc1EwRkJRenRKUVVOV096dEJRVVZFTEdsQ1FVRmpMRVZCUVVVc1ZVRkJReXhKUVVGSkxFVkJRVU1zWVVGQllTeEZRVUZMT3p0QlFVVjBReXhUUVVGSkxFVkJRVVVzUjBGQlJ5eFZRVUZWTEVkQlFVY3NTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dEJRVU0xUXl4VFFVRkpMRXRCUVVzc1IwRkJSeXhGUVVGRkxFTkJRVU03TzBGQlJXWXNVMEZCU1N4UlFVRlJMRWRCUVVjc1VVRkJVU3hEUVVGRExHVkJRV1VzUTBGQlF5dzBRa0ZCTkVJc1JVRkJSU3huUWtGQlowSXNRMEZCUXl4RFFVRkRPMEZCUTNoR0xHRkJRVkVzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRE8wRkJRMmhETEdGQlFWRXNRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEyNURMR0ZCUVZFc1EwRkJReXhaUVVGWkxFTkJRVU1zU1VGQlNTeEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTI1RExHRkJRVkVzUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE96dEJRVVZzUXl4VFFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZET3p0QlFVVXpRaXhWUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRWRCUVVNc1lVRkJZU3hGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTzBGQlEyaERMRmRCUVVrc1MwRkJTU3hIUVVGSExGRkJRVkVzUTBGQlF5eGxRVUZsTEVOQlFVTXNORUpCUVRSQ0xFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTTdRVUZETVVVc1dVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVVXNUVUZCVFN4SFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE96czdRVUZIYkVNc1pVRkJVU3hEUVVGRExGZEJRVmNzUTBGQlF5eExRVUZKTEVOQlFVTXNRMEZCUXp0QlFVTXpRaXhaUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVa3NRMEZCUXl4RFFVRkRPMDFCUTJ4Q096dEJRVVZFTEZsQlFVODdRVUZEVEN4VFFVRkZMRVZCUVVVc1JVRkJSVHRCUVVOT0xGbEJRVXNzUlVGQlJTeExRVUZMTzBGQlExb3NZMEZCVHl4RlFVRkZMRkZCUVZFN1RVRkRiRUlzUTBGQlF6dEpRVVZJT3p0RlFVVkdMRU03T3pzN096dEJRM1pFUkN4aFFVRlpMRU5CUVVNN096czdPenM3T3pzN096czdPMEZCWTJJc1VVRkJUeXhEUVVGRExFbEJRVWtzUjBGQlJ5eFZRVUZETEV0QlFVc3NSVUZCUXl4SFFVRkhMRVZCUVVNc1IwRkJSeXhGUVVGTE8wRkJRMmhETEZWQlFVOHNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NSVUZCUXl4SFFVRkhMRU5CUVVNc1JVRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEZRVU14UXl4RFFVRkRPenRCUVVWR0xGRkJRVThzUTBGQlF5eFRRVUZUTEVkQlFVY3NWVUZCUXl4TFFVRkxMRVZCUVVNc1IwRkJSeXhGUVVGRExFZEJRVWNzUlVGQlN6dEJRVU55UXl4VlFVRlRMRU5CUVVNc1MwRkJTeXhIUVVGRExFZEJRVWNzUzBGQlN5eEhRVUZITEVkQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVjN1JVRkRjRU1zUTBGQlF6czdPenM3T3pzN096czdPenM3UVVGalJpeFJRVUZQTEVOQlFVTXNTMEZCU3l4SFFVRkhMRlZCUVVNc1MwRkJTeXhGUVVGRkxFdEJRVXNzUlVGQlJTeExRVUZMTEVWQlFVVXNUVUZCVFN4RlFVRkZMRTFCUVUwc1JVRkJTenRCUVVOMlJDeFBRVUZKTEV0QlFVc3NTMEZCU3l4TFFVRkxMRVZCUVVVN1FVRkRia0lzV1VGQlR5eE5RVUZOTEVOQlFVTTdTVUZEWmp0QlFVTkVMRlZCUVZNc1EwRkJReXhMUVVGTExFZEJRVWNzUzBGQlN5eExRVUZMTEUxQlFVMHNSMEZCUnl4TlFVRk5MRU5CUVVNc1NVRkJTeXhMUVVGTExFZEJRVWNzUzBGQlN5eERRVUZETEVkQlFVa3NUVUZCVFN4RFFVRkRPMFZCUXpORkxFTkJRVU03TzBGQlJVWXNVVUZCVHl4RFFVRkRMRTlCUVU4c1IwRkJSeXhWUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVWQlFVczdRVUZEZWtJc1QwRkJTU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXpzN1FVRkZOMElzVDBGQlNTeExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZETlVJc1QwRkJTU3hMUVVGTExFZEJRVWNzUTBGQlF5eEZRVUZGTzBGQlEySXNWVUZCU3l4SFFVRkhMRXRCUVVzc1IwRkJTU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVWQlFVY3NRMEZCUXp0SlFVTXZRanRCUVVORUxGVkJRVThzUlVGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZMRXRCUVVzc1JVRkJSU3hMUVVGTExFVkJRVU1zUTBGQlF6dEZRVU5zUXl4RFFVRkRPenRCUVVWR0xGRkJRVThzUTBGQlF5eFhRVUZYTEVkQlFVY3NWVUZCVXl4TlFVRk5MRVZCUVVVc1MwRkJTeXhGUVVGRE8wRkJRek5ETEU5QlFVa3NSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZETVVJc1QwRkJTU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVNeFFpeFZRVUZQTEVWQlFVTXNRMEZCUXl4RlFVRkZMRTFCUVUwc1IwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eEZRVUZGTEUxQlFVMHNSMEZCUXl4SFFVRkhMRWRCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF6dEZRVU14UXl4RFFVRkRPenM3T3pzN096czdPenRCUVdGR0xGRkJRVThzUTBGQlF5eExRVUZMTEVkQlFVY3NWVUZCVXl4SlFVRkpMRVZCUVVVc1MwRkJTeXhGUVVGRk8wRkJRM0JETEZWQlFVOHNWVUZCVlN4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXp0RlFVTjRReXhEUVVGRE96dEJRVVZHTEZGQlFVOHNRMEZCUXl4TlFVRk5MRWRCUVVjc1ZVRkJWU3hMUVVGTExFVkJRVVU3UVVGRGFFTXNWVUZCVHl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dEZRVU42UXl4RFFVRkRPenM3T3pzN096czdRVUZUUml4UlFVRlBMRU5CUVVNc1NVRkJTU3hIUVVGSExGVkJRVk1zU1VGQlNTeEZRVUZGTzBGQlF6VkNMRlZCUVU4c1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVWQlFVY3NRMEZCUXl4SlFVRkpMRWRCUVVNc1JVRkJSU3hKUVVGRkxFVkJRVVVzUTBGQlJTeEhRVUZITEVkQlFVY3NRMEZCUXp0RlFVTXhReXhEUVVGRE96czdPenM3T3pzN096czdRVUZaUml4UlFVRlBMRU5CUVVNc1RVRkJUU3hIUVVGSExGVkJRVk1zUjBGQlJ5eEZRVUZETEVkQlFVY3NSVUZCUXl4SFFVRkhMRVZCUVVVN1FVRkRja01zVlVGQlR5eEhRVUZITEVsQlFVa3NSMEZCUnl4SFFVRkhMRWRCUVVjc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF6dEZRVU5vUXl4RFFVRkRPenM3T3pzN096czdRVUZUUml4UlFVRlBMRU5CUVVNc1NVRkJTU3hIUVVGSExGbEJRVmM3UVVGRGVFSXNWVUZCVHl4VFFVRlRMRU5CUVVNc1JVRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNSMEZCUXl4VFFVRlRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF6dEZRVU4wUkN4RFFVRkRPenM3T3pzN096czdPenM3UVVGWlJpeFJRVUZQTEVOQlFVTXNUVUZCVFN4SFFVRkhMRlZCUVZNc1IwRkJSeXhGUVVGRk8wRkJRemRDTEZWQlFVOHNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdSVUZEZUVJc1EwRkJRenM3T3pzN096czdPenM3UVVGWFJpeFJRVUZQTEVOQlFVTXNSVUZCUlN4SFFVRkhMRlZCUVZNc1RVRkJUU3hGUVVGRExFMUJRVTBzUlVGQlJUdEJRVU51UXl4UFFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRk8wRkJRMWdzVjBGQlRTeEhRVUZITEUxQlFVMHNRMEZCUXp0QlFVTm9RaXhYUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETzBsQlExbzdRVUZEUkN4UFFVRkpMRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEUxQlFVMHNSVUZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVOc1F5eFBRVUZKTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUlVGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTnVReXhWUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hKUVVGRkxFbEJRVWtzUjBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRGUVVOcVJDeERRVUZET3pzN096czdPenM3T3p0QlFWZEdMRkZCUVU4c1EwRkJReXhGUVVGRkxFZEJRVWNzVlVGQlV5eE5RVUZOTEVWQlFVTXNUVUZCVFN4RlFVRkZPMEZCUTI1RExFOUJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVTdRVUZEV0N4WFFVRk5MRWRCUVVjc1RVRkJUU3hEUVVGRE8wRkJRMmhDTEZkQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRXanRCUVVORUxFOUJRVWtzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hGUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBGQlEyeERMRTlCUVVrc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RlFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRMjVETEZWQlFVOHNTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hKUVVGRkxFbEJRVWtzUjBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUXl4SFFVRkhMRU5CUVVNN1JVRkRja01zUTBGQlF6czdRVUZIUml4UlFVRlBMRU5CUVVNc1MwRkJTeXhIUVVGSExGVkJRVk1zUzBGQlN5eEZRVUZETEVkQlFVY3NSVUZCUXl4SFFVRkhMRVZCUVVVN1FVRkRkRU1zVVVGQlN5eEZRVUZGTEVOQlFVTTdRVUZEVWl4UFFVRkpMRXRCUVVzc1NVRkJTU3hIUVVGSExFVkJRVVU3UVVGRGFFSXNWVUZCU3l4SFFVRkhMRWRCUVVjc1EwRkJRenRKUVVOaU8wRkJRMFFzVlVGQlR5eExRVUZMTEVOQlFVTTdSVUZEWkN4RFFVRkRPenM3T3pzN096czdRVUZUUml4UlFVRlBMRU5CUVVNc1QwRkJUeXhIUVVGSExGVkJRVk1zU1VGQlNTeEZRVUZGTzBGQlF5OUNMRTlCUVVrc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU5rTEZGQlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUjBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRk8wRkJRemxDTEZWQlFVc3NTVUZCU1N4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGJFSTdRVUZEUkN4VlFVRlBMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzBWQlF6VkNMRU5CUVVNN096czdPenM3T3pzN096dEJRVmxHTEZGQlFVOHNRMEZCUXl4UlFVRlJMRWRCUVVjc1ZVRkJVeXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVVN1FVRkRka01zVDBGQlNTeERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRVZCUVVVc1EwRkJRenRCUVVOb1FpeFBRVUZKTEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hEUVVGRE8wRkJRMmhDTEZWQlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJSU3hEUVVGRExFZEJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUXl4RFFVRkRMRU5CUVVVc1EwRkJRenRGUVVNdlFpeERRVUZET3p0QlFVVkdMRkZCUVU4c1EwRkJReXhSUVVGUkxFZEJRVWNzVlVGQlV5eEpRVUZKTEVWQlFVVTdRVUZEYUVNc1ZVRkJUeXhGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRGUVVNNVFpeERRVUZET3pzN096czdPenM3UVVGVFJpeFJRVUZQTEVOQlFVTXNTVUZCU1N4SFFVRkhMRmxCUVcxQ08wOUJRVllzU1VGQlNTeG5RMEZCUXl4SFFVRkhPenRCUVVNNVFpeFBRVUZKTEU5QlFVOHNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NSVUZCUlR0QlFVTXhRaXhaUVVGUExFTkJRVU1zUTBGQlF6dEpRVU5XTEUxQlFVMDdRVUZEVEN4WlFVRlBMRU5CUVVNc1EwRkJRenRKUVVOV08wVkJRMFlzUXpzN096czdPMEZETjA1RUxHRkJRVmtzUTBGQlF6czdPenM3T3pzN096dEJRVVZpTEV0QlFVa3NSMEZCUnl4SFFVRkhMRzFDUVVGUExFTkJRVU1zUTBGQllTeERRVUZETEVOQlFVTTdRVUZEYWtNc1MwRkJTU3hIUVVGSExFZEJRVWNzYlVKQlFVOHNRMEZCUXl4RFFVRmhMRU5CUVVNc1EwRkJRenRCUVVOcVF5eExRVUZKTEVsQlFVa3NSMEZCUnl4dFFrRkJUeXhEUVVGRExFTkJRV01zUTBGQlF5eERRVUZETzBGQlEyNURMRXRCUVVrc1MwRkJTeXhIUVVGSExHMUNRVUZQTEVOQlFVTXNRMEZCWlN4RFFVRkRMRU5CUVVNN1FVRkRja01zUzBGQlRTeFpRVUZaTEVkQlFVY3NiVUpCUVU4c1EwRkJReXhGUVVGUkxFTkJRVU1zUTBGQlF6czdTMEZGT1VJc1RVRkJUU3gxUWtGQlVTeERRVUZUTEVWQlFYWkNMRTFCUVUwN096czdPenRMUVV0TkxGTkJRVk03UVVGRmFrSXNXVUZHVVN4VFFVRlRMRU5CUldoQ0xFbEJRVWtzUlVGQlF5eFBRVUZQTEVWQlFVTXNVVUZCVVN4RlFVRkZPekpDUVVab1FpeFRRVUZUT3p0QlFVY3hRaXhuUTBGSWFVSXNVMEZCVXl3MlEwRkhiRUk3UVVGRFVpeFRRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETzBGQlEyeERMRk5CUVVrc1EwRkJReXhSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4SlFVRkpMRVZCUVVNc1QwRkJUeXhGUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzBGQlF6RkVMRk5CUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUlVGQlJTeERRVUZETzBGQlEyaENMRk5CUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzUzBGQlN5eERRVUZETzBGQlEyeENMRk5CUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzUlVGQlJTeERRVUZETzBGQlEycENMRk5CUVVrc1lVRkJZU3hIUVVGSExFMUJRVTBzUlVGQlJTeERRVUZETzBGQlF6ZENMRk5CUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeEhRVUZITEdGQlFXRXNRMEZCUXl4TlFVRk5MRU5CUVVNN1FVRkRNVU1zVTBGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRWRCUVVjc1lVRkJZU3hEUVVGRExFbEJRVWtzUTBGQlF6dEJRVU4wUXl4VFFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUjBGQlJ5eGhRVUZoTEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUTNoRExGTkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4SFFVRkhMR0ZCUVdFc1EwRkJReXhKUVVGSkxFTkJRVU03UVVGRGRFTXNVMEZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExFZEJRVWNzWVVGQllTeERRVUZETEZkQlFWY3NRMEZCUXp0QlFVTndSQ3hUUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZWQlFWVXNSMEZCUnl4aFFVRmhMRU5CUVVNc1ZVRkJWU3hEUVVGRE8wbEJRMjVFT3p0aFFXaENhMElzVTBGQlV6czdaMEpCUVZRc1UwRkJVenRCUVd0Q05VSXNhMEpCUVdFN1kwRkJRU3gxUWtGQlF5eEpRVUZKTEVWQlFVTXNUMEZCVHl4RlFVRkRMRkZCUVZFc1JVRkJSVHM3UVVGRmJrTXNaMEpCUVU4c1EwRkJReXhQUVVGUExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdRVUZETVVJc2FVSkJRVkVzUTBGQlF5eFhRVUZYTEVkQlFVY3NVVUZCVVN4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTJwRUxHbENRVUZSTEVOQlFVTXNTVUZCU1N4SFFVRkhMRXRCUVVzc1EwRkJRenM3UVVGRmRFSXNZVUZCU1N4UlFVRlJMRWRCUVVjN1FVRkRZaXh0UWtGQlZTeFJRVUZSTEVOQlFVTXNTVUZCU1R0QlFVTjJRaXh0UWtGQlZTeEZRVUZGTzBGQlExb3NNa0pCUVd0Q0xFbEJRVWs3UVVGRGRFSXNhMEpCUVZNc2FVSkJRVmNzUlVGQlJUdEJRVU4wUWl4elFrRkJZU3hMUVVGTE8xVkJRMjVDTEVOQlFVTTdPMEZCUlVZc1kwRkJTeXhKUVVGSkxFZEJRVWNzU1VGQlNTeFJRVUZSTEVWQlFVVTdRVUZEZUVJc2JVSkJRVkVzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VlVGREwwSTdPMEZCUlVRc1kwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdPMEZCUldoRExHVkJRVWtzVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenM3UVVGRmRFSXNaVUZCU3l4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFOUJRVThzUTBGQlF5eEZRVUZITzBGQlF6VkNMR3RDUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEU5QlFVOHNSVUZCUnp0QlFVTjZRaXgxUWtGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dGpRVU01UWpzN1FVRkJRU3haUVVWR0xFMUJRVTBzU1VGQlNTeFBRVUZQTEU5QlFVOHNTMEZCU3l4VlFVRlZMRVZCUVVVN1FVRkRlRU1zY1VKQlFWRXNRMEZCUXl4TFFVRkxMRWRCUVVjc1QwRkJUeXhEUVVGRE96dFpRVVV4UWl4TlFVRk5MRWxCUVVrc1QwRkJUeXhEUVVGRExFMUJRVTBzU1VGQlJTeERRVUZETEVWQlFVVTdPMEZCUlRWQ0xHbENRVUZKTEVkQlFVY3NSMEZCUnl4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOcVF5eHhRa0ZCVVN4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFOUJRVThzUTBGQlF6dFpRVU42UWp0VlFVTkdPenM3T3p0QlFVdEVMR0ZCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03T3p0QlFVZG9SQ3hoUVVGSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1dVRkJXU3hYUVVGWExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNVMEZCVXl4RlFVRkZPMEZCUXpWRkxHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRmxCUVZrc1EwRkJReXhWUVVGVkxFTkJRVU1zUlVGQlJUdEJRVU42UXl4cFFrRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFpRVUZaTEVOQlFVTXNWVUZCVlN4RlFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xbEJRM3BETzFWQlEwWTdPenM3UVVGSlJDeGhRVUZKTEZGQlFWRXNRMEZCUXl4SlFVRkpMRWxCUVVrc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1VVRkJVU3hEUVVGRExHTkJRV01zUlVGQlJUdEJRVU0xUlN4bFFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRPVUlzWlVGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlF5OUNMR1ZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF6dEJRVU0xUXl4bFFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU03VlVGREwwTXNUVUZCVFN4SlFVRkpMRkZCUVZFc1EwRkJReXhqUVVGakxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNVMEZCVXl4RlFVRkZPenRCUVVWNlJDeGxRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRlZCUVZVc1EwRkJReXhOUVVGTkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXl4blFrRkJaMElzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hGUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdRVUZETDBjc1pVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eFZRVUZWTEVOQlFVTXNUVUZCVFN4RFFVRkRMR2RDUVVGblFpeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NSVUZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE96dEJRVVZxU0N4bFFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFbEJRVVVzU1VGQlNTeEZRVUZGTzBGQlEzQkNMR2xDUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEZGQlFWRXNRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGNrTXNhVUpCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJRenRaUVVOcVJUdEJRVU5FTEdWQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1NVRkJSU3hKUVVGSkxFVkJRVVU3UVVGRGNrSXNhVUpCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzVVVGQlVTeERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOMFF5eHBRa0ZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRPMWxCUTNCRk8xVkJSVVlzVFVGQlRUdEJRVU5NTEcxQ1FVRlJMRU5CUVVNc1NVRkJTU3hIUVVGSExGRkJRVkVzUTBGQlF5eFhRVUZYTEVOQlFVTTdRVUZEY2tNc1pVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRemxDTEdWQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0VlFVTm9RenM3TzBGQlIwUXNZVUZCU1N4UlFVRlJMRU5CUVVNc1MwRkJTeXhGUVVGRk8wRkJRMnhDTEdWQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eFJRVUZSTEVWQlFVVXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xVkJRMmhFTEUxQlFVMDdRVUZEVEN4bFFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFdEJRVXNzUTBGQlF6dFZRVU53UWpzN1FVRkZSQ3huUWtGQlR5eFJRVUZSTEVOQlFVTTdVVUZGYWtJN08wRkJSVVFzVTBGQlNUdGpRVUZCTEdkQ1FVRkhPMEZCUTB3c1lVRkJTU3hEUVVGRExGVkJRVlVzUlVGQlJTeERRVUZETzBGQlEyeENMR0ZCUVVrc1EwRkJReXhqUVVGakxFVkJRVVVzUTBGQlF6dEJRVU4wUWl4aFFVRkpMRU5CUVVNc1lVRkJZU3hGUVVGRkxFTkJRVU03UVVGRGNrSXNZVUZCU1N4RFFVRkRMR1ZCUVdVc1JVRkJSU3hEUVVGRE8wRkJRM1pDTEdGQlFVa3NRMEZCUXl4alFVRmpMRVZCUVVVc1EwRkJRenRCUVVOMFFpeGhRVUZKTEVOQlFVTXNXVUZCV1N4RlFVRkZMRU5CUVVNN1VVRkRja0k3TzBGQlJVUXNaVUZCVlR0alFVRkJMSE5DUVVGSE8wRkJRMWdzWVVGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEycERMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEU5QlFVOHNSVUZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRE9VTXNZVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhaUVVGWkxFTkJRVU1zVVVGQlVTeEZRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVOb1JDeGhRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdVVUZEZGtNN08wRkJSVVFzYlVKQlFXTTdZMEZCUVN3d1FrRkJSeXhGUVVGRk96dEJRVU51UWl4clFrRkJZVHRqUVVGQkxIbENRVUZITEVWQlFVVTdPMEZCUTJ4Q0xHMUNRVUZqTzJOQlFVRXNNRUpCUVVjc1JVRkJSVHM3UVVGRmJrSXNiMEpCUVdVN1kwRkJRU3d5UWtGQlJ6czdPMEZCUldoQ0xHRkJRVWtzUTBGQlF5eHBRa0ZCYVVJc1IwRkJSeXhKUVVGSkxFTkJRVU1zYVVKQlFXbENMRWxCUVVrc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF6czdPMEZCUjJoRkxHRkJRVWtzUzBGQlN5eERRVUZETEUxQlFVMHNSVUZCUlR0QlFVTm9RaXhsUVVGSkxFTkJRVU1zYVVKQlFXbENMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNXVUZCV1N4RlFVRkZMR0ZCUVVjN2IwSkJRVWtzVFVGQlN5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRPMWxCUVVFc1EwRkJReXhEUVVGRE8wRkJRMnBHTEdWQlFVa3NRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhYUVVGWExFVkJRVVVzWVVGQlJ6dHZRa0ZCU1N4TlFVRkxMRmxCUVZrc1EwRkJReXhIUVVGSExFTkJRVU03V1VGQlFTeERRVUZETEVOQlFVTTdRVUZEY0VZc1pVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRMR2RDUVVGblFpeERRVUZETEZWQlFWVXNSVUZCUlN4aFFVRkhPMjlDUVVGSkxFMUJRVXNzWlVGQlpTeERRVUZETEVkQlFVY3NRMEZCUXp0WlFVRkJMRU5CUVVNc1EwRkJRenRWUVVOMlJqdEJRVU5FTEdGQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1lVRkJSenRyUWtGQlNTeE5RVUZMTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNN1ZVRkJRU3hEUVVGRE8wRkJRemRETEdGQlFVa3NRMEZCUXl4bFFVRmxMRWRCUVVjc1lVRkJSenRyUWtGQlNTeE5RVUZMTEZWQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNN1ZVRkJRU3hEUVVGRE8wRkJRMjVFTEdGQlFVa3NRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhYUVVGWExFVkJRVVVzWVVGQlJ6dHJRa0ZCU1N4TlFVRkxMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRVU03VlVGQlFTeERRVUZETEVOQlFVTTdVVUZEYWtZN08wRkJSVVFzYVVKQlFWazdZMEZCUVN4M1FrRkJSenRCUVVOaUxHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1IwRkJSeXhUUVVGVExFTkJRVU03VVVGRGRrTTdPMEZCUlVRc1lVRkJVVHRqUVVGQkxHdENRVUZETEVOQlFVTXNSVUZCUlRzN08wRkJSMVlzWVVGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4WlFVRlpMRmRCUVZjc1JVRkJSVHRCUVVOMlF5eGxRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRTFCUVUwc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETEdkQ1FVRm5RaXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRVZCUVVNc1JVRkJSU3hEUVVGRExFTkJRVU03VlVGRGNrYzdPenRCUVVkRUxHRkJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdRVUZETjBNc1lVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEhRVUZITEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZETlVNc1lVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTTdRVUZEY0VJc1lVRkJTU3hEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETzBGQlEySXNZVUZCU1N4RFFVRkRMRk5CUVZNc1IwRkJSeXhSUVVGUkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1YwRkJWeXhGUVVGRkxFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXp0QlFVTXpSU3hoUVVGSkxFTkJRVU1zV1VGQldTeEhRVUZITEZGQlFWRXNRMEZCUXl4blFrRkJaMElzUTBGQlF5eFRRVUZUTEVWQlFVVXNTVUZCU1N4RFFVRkRMR1ZCUVdVc1EwRkJReXhEUVVGRE8wRkJReTlGTEdGQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03UVVGRGJrSXNWVUZCUXl4RFFVRkRMR05CUVdNc1JVRkJSU3hEUVVGRE8wRkJRMjVDTEZWQlFVTXNRMEZCUXl4bFFVRmxMRVZCUVVVc1EwRkJRenRSUVVOeVFqczdRVUZGUkN4WlFVRlBPMk5CUVVFc2FVSkJRVU1zUTBGQlF5eEZRVUZGT3pzN1FVRkRWQ3hoUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NSVUZCUlR0QlFVTmtMR1ZCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUjBGQlJ5eERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRMRVZCUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBGQlF6VkRMR1ZCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dEJRVU5hTEdWQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8wRkJRMnBDTEhGQ1FVRlZMRU5CUVVNc1dVRkJUVHRCUVVGRkxHMUNRVUZMTEVsQlFVa3NSMEZCUnl4TFFVRkxMRU5CUVVNN1dVRkJSU3hGUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFWQlF6ZERPMEZCUTBRc1ZVRkJReXhEUVVGRExHTkJRV01zUlVGQlJTeERRVUZETzBGQlEyNUNMRlZCUVVNc1EwRkJReXhsUVVGbExFVkJRVVVzUTBGQlF6dFJRVU55UWpzN1FVRkZSQ3hsUVVGVk8yTkJRVUVzYjBKQlFVTXNRMEZCUXl4RlFVRkZPMEZCUTFvc1lVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEhRVUZITEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZETlVNc1lVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eExRVUZMTEVOQlFVTTdRVUZEY2tJc1lVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETzBGQlEyWXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dEJRVU55UWl4cFFrRkJVU3hEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRmRCUVZjc1JVRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdRVUZETlVRc2FVSkJRVkVzUTBGQlF5eHRRa0ZCYlVJc1EwRkJReXhUUVVGVExFVkJRVU1zU1VGQlNTeERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRPMEZCUXpkRUxGVkJRVU1zUTBGQlF5eGpRVUZqTEVWQlFVVXNRMEZCUXp0QlFVTnVRaXhWUVVGRExFTkJRVU1zWlVGQlpTeEZRVUZGTEVOQlFVTTdVVUZEY2tJN08wRkJSVVFzVlVGQlN6dGpRVUZCTEdsQ1FVRkhMRVZCUlZBN08wRkJSVVFzVTBGQlNUdGpRVUZCTEdkQ1FVRkhMRVZCUlU0N08wRkJSVVFzV1VGQlR6dGpRVUZCTEcxQ1FVRkhMRVZCUlZRN08wRkJTMFFzWVVGQlVUczdPenRqUVVGQkxHdENRVUZETEVOQlFVTXNSVUZCUlR0QlFVTldMR0ZCUVVrc1NVRkJTU3hEUVVGRExFOUJRVThzV1VGQldTeFhRVUZYTEVWQlFVVTdRVUZEZGtNc1pVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eE5RVUZOTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeEZRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMVZCUTNKSE8wRkJRMFFzWVVGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVTTNReXhoUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEVkQlFVY3NRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJReXhGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTTFReXhoUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXp0QlFVTndRaXhoUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTJRc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVTnVRaXhWUVVGRExFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTTdRVUZEYmtJc1ZVRkJReXhEUVVGRExHVkJRV1VzUlVGQlJTeERRVUZETzFGQlEzSkNPenRCUVVWRUxHbENRVUZaTzJOQlFVRXNjMEpCUVVNc1EwRkJReXhGUVVGRk8wRkJRMlFzWVVGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZPMEZCUTJoQ0xHVkJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NSMEZCUnl4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFVkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMEZCUXpWRExHVkJRVWtzUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXp0QlFVTnFRaXhaUVVGRExFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTTdRVUZEYmtJc1dVRkJReXhEUVVGRExHVkJRV1VzUlVGQlJTeERRVUZETzFWQlEzSkNPMUZCUTBZN08wRkJSVVFzYjBKQlFXVTdZMEZCUVN4NVFrRkJReXhEUVVGRExFVkJRVVU3UVVGRGFrSXNZVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhIUVVGSExFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRE4wTXNZVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRGNrSXNZVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSU3hEUVVGRE8wRkJRM0JDTEdGQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03UVVGRGNrSXNWVUZCUXl4RFFVRkRMR05CUVdNc1JVRkJSU3hEUVVGRE8wRkJRMjVDTEZWQlFVTXNRMEZCUXl4bFFVRmxMRVZCUVVVc1EwRkJRenRSUVVOeVFqczdRVUZGUkN4VlFVRkxPMk5CUVVFc2FVSkJRVWM3UVVGRFRpeGhRVUZKTEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNN1VVRkRaRHM3UVVGRlJDeGpRVUZUTzJOQlFVRXNjVUpCUVVjN1FVRkRWaXhoUVVGSkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTTdVVUZEWWpzN1FVRkZSQ3hwUWtGQldUdGpRVUZCTEhkQ1FVRkhPMEZCUTJJc1lVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETzFGQlEyaENPenRCUVZWRUxGZEJRVTA3T3pzN096czdPenM3TzJOQlFVRXNaMEpCUVVNc1MwRkJTeXhGUVVGRExFMUJRVTBzUlVGQlJUdEJRVU51UWl4aFFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFdEJRVXNzUTBGQlF6dEJRVU51UWl4aFFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFMUJRVTBzUTBGQlF6dEJRVU55UWl4aFFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJReXhKUVVGSkxFTkJRVU03UVVGRE1VTXNZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVNc1NVRkJTU3hEUVVGRE8wRkJRelZETEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hEUVVGRExFOUJRVThzUlVGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1FVRkRPVU1zWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1VVRkJVU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTm9SQ3hoUVVGSkxFTkJRVU1zWVVGQllTeEZRVUZGTEVOQlFVTTdVVUZEZEVJN08wRkJSVVFzVlVGQlN6dGpRVUZCTEdsQ1FVRkhPMEZCUTA0c1owSkJRVThzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4VFFVRlRMRVZCUVVVN1FVRkROMElzWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0VlFVTnNSRHRSUVVOR096dEJRVkZFTEZsQlFVODdPenM3T3pzN096dGpRVUZCTEcxQ1FVRkhPMEZCUTFJc1lVRkJTU3hEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETzBGQlEySXNZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMEZCUTNSRExHRkJRVWtzUTBGQlF5eHJRa0ZCYTBJc1JVRkJSU3hEUVVGRE8wRkJRekZDTEdGQlFVa3NTVUZCU1N4RFFVRkRMRlZCUVZVc1JVRkJSVHRCUVVOdVFpeHJRa0ZCVHl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0VlFVTnFRenRCUVVORUxHRkJRVWtzUTBGQlF5eGhRVUZoTEVWQlFVVXNRMEZCUXp0UlFVTjBRanM3UVVGRlJDeHJRa0ZCWVR0alFVRkJMSGxDUVVGSExFVkJSV1k3TzBGQlJVUXNZVUZCVVR0alFVRkJMR3RDUVVGRExFbEJRVWtzUlVGQlF5eExRVUZMTEVWQlFVVTdRVUZEYmtJc1lVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkRNVUlzWVVGQlNTeERRVUZETEdOQlFXTXNSVUZCUlN4RFFVRkRPMUZCUTNaQ096czdPMVZCYkZOclFpeFRRVUZUTzBsQlFWTXNXVUZCV1RzN2EwSkJRVGxDTEZOQlFWTXNRenM3T3pzN08wRkRZamxDTEdGQlFWa3NRMEZCUXpzN1FVRkZZaXhSUVVGUExFTkJRVU1zV1VGQldTeEhRVUZITEZWQlFVTXNSVUZCUlN4RlFVRkxPMEZCUXpkQ0xFOUJRVWtzWTBGQll5eEhRVUZITEVWQlFVVXNRMEZCUXl4eFFrRkJjVUlzUlVGQlJTeERRVUZETzBGQlEyaEVMRTlCUVVrc1IwRkJSeXhIUVVGSExHTkJRV01zUTBGQlF5eEhRVUZITEVkQlFVY3NUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJRenRCUVVNNVF5eFBRVUZKTEVsQlFVa3NSMEZCUnl4alFVRmpMRU5CUVVNc1NVRkJTU3hIUVVGSExFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTTdRVUZEYUVRc1ZVRkJUeXhGUVVGRExFZEJRVWNzUlVGQlNDeEhRVUZITEVWQlFVTXNTVUZCU1N4RlFVRktMRWxCUVVrc1JVRkJReXhEUVVGRE8wVkJRMjVDTEVOQlFVTTdPMEZCUlVZc1VVRkJUeXhEUVVGRExGbEJRVmtzUjBGQlJ5eFZRVUZETEUxQlFVMHNSVUZCU3p0QlFVTnFReXhQUVVGSkxFOUJRVThzVFVGQlRTeExRVUZMTEZGQlFWRXNSVUZCUlR0QlFVTTVRaXhYUVVGTkxFZEJRVWNzVVVGQlVTeERRVUZETEdOQlFXTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUlVGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUXpGRU96dEJRVVZFTEU5QlFVa3NUVUZCVFN4WlFVRlpMRmRCUVZjc1NVRkJTU3hOUVVGTkxGbEJRVmtzVlVGQlZTeEZRVUZETzBGQlEyaEZMRmxCUVU4c1RVRkJUU3hEUVVGRE8wbEJRMllzVFVGQlRUdEJRVU5NTEZsQlFVOHNNRUpCUVRCQ0xFTkJRVU03U1VGRGJrTTdSVUZEUml4RFFVRkRPenRCUVVWR0xGRkJRVThzUTBGQlF5eFhRVUZYTEVkQlFVY3NWVUZCUXl4RFFVRkRMRVZCUVVNc1RVRkJUU3hGUVVGTE8wRkJRMnhETEZWQlFVODdRVUZEVEN4TlFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFdEJRVXNzUjBGQlJ5eE5RVUZOTEVOQlFVTXNTVUZCU1R0QlFVTjRRaXhOUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEV0QlFVc3NSMEZCUnl4TlFVRk5MRU5CUVVNc1IwRkJSenRKUVVONFFpeERRVUZETzBWQlEwZ3NRMEZCUXpzN1FVRkZSaXhSUVVGUExFTkJRVU1zVjBGQlZ5eEhRVUZITEZWQlFVTXNRMEZCUXl4RlFVRkRMRTFCUVUwc1JVRkJTenRCUVVOc1F5eFZRVUZQTzBGQlEwd3NUVUZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhoUVVGaExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4aFFVRmhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEhRVUZITEUxQlFVMHNRMEZCUXl4SlFVRkpMRWRCUVVjc1MwRkJTenRCUVVNeFJTeE5RVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMR0ZCUVdFc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEdGQlFXRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFZEJRVWNzVFVGQlRTeERRVUZETEVkQlFVY3NSMEZCUnl4TFFVRkxPMGxCUXpGRkxFTkJRVU03UlVGRFNDeERRVUZET3p0QlFVVkdMRkZCUVU4c1EwRkJReXhYUVVGWExFZEJRVWNzVlVGQlV5eE5RVUZOTEVWQlFVVTdPenRCUVVWeVF5eFBRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRkZCUVZFc1EwRkJReXhoUVVGaExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdRVUZEYUVRc1QwRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRlZCUVZVc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dEJRVU0zUXl4VFFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXpzN1FVRkZha01zVDBGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4VlFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFVkJRVXM3UVVGRGNrSXNWMEZCU3l4UFFVRlBMRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU1zUjBGQlF5eERRVUZETEVOQlFVTTdRVUZEZWtJc1YwRkJTeXhQUVVGUExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNSMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRNVUlzVjBGQlN5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1IwRkJSeXhEUVVGRExFZEJRVU1zU1VGQlNTeERRVUZETzBGQlEyeERMRmRCUVVzc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJRenRKUVVOd1F5eERRVUZETzBWQlJVZ3NRenM3T3pzN08wRkRhRVJFTEdGQlFWa3NRMEZCUXpzN1FVRkZZaXhSUVVGUExFTkJRVU1zVVVGQlVTeEhRVUZITEZWQlFVTXNSMEZCUnl4RlFVRkxPMEZCUXpGQ0xFOUJRVWtzVDBGQlR5eEhRVUZITEV0QlFVc3NVVUZCVVN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4SFFVRkhMRXRCUVVzc1NVRkJTU3hKUVVGSkxFZEJRVWNzV1VGQldTeFZRVUZWTEV0QlFVc3NTMEZCU3l4SlFVRkpMRWRCUVVjc1dVRkJXU3hYUVVGWExFdEJRVXNzUzBGQlN5eEZRVUZITzBGQlEyeEtMRmxCUVU4c1NVRkJTU3hEUVVGRE8wbEJRMklzVFVGQlRUdEJRVU5NTEZsQlFVOHNTMEZCU3l4RFFVRkRPMGxCUTJRN1JVRkRSaXhET3pzN096czdRVU5TUkN4aFFVRlpMRU5CUVVNN08wRkJSV0lzVVVGQlR5eERRVUZETEUxQlFVMHNSMEZCU1N4alFVRmpMRWxCUVVrc1VVRkJVU3hEUVVGRExHVkJRV2RDTEVNN096czdPenRCUTBZM1JEdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CT3p0QlFVVkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVRzN1FVRkZRVHRCUVVOQk96dEJRVVZCTzBGQlEwRTdRVUZEUVRzN1FVRkZRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPenRCUVVWQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVRzN1FVRkZRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVN4clFrRkJhVUk3UVVGRGFrSXNVVUZCVHp0QlFVTlFPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CT3p0QlFVVkJPenRCUVVWQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTEVsQlFVYzdRVUZEU0R0QlFVTkJPMEZCUTBFN1FVRkRRU3huUWtGQlpTeFRRVUZUTzBGQlEzaENPMEZCUTBFN08wRkJSVUU3UVVGRFFUczdRVUZGUVR0QlFVTkJPenRCUVVWQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVRzN1FVRkZRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdPMEZCUlVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPenRCUVVWQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRXNUVUZCU3p0QlFVTk1PMEZCUTBFN08wRkJSVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CT3p0QlFVVkJPMEZCUTBFN08wRkJSVUU3TzBGQlJVRTdRVUZEUVR0QlFVTkJPenRCUVVWQk96dEJRVVZCTzBGQlEwRTdPMEZCUlVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUczdRVUZGUVR0QlFVTkJPenRCUVVWQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVR0QlFVTkJPenRCUVVWQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVRzN1FVRkZRVHRCUVVOQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHM3UVVGRlFTeEpRVUZITzBGQlEwZ3NjVUpCUVc5Q0xGTkJRVk03UVVGRE4wSTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk96dEJRVVZCTzBGQlEwRTdPMEZCUlVFN1FVRkRRVHRCUVVOQk8wRkJRMEVzVFVGQlN6dEJRVU5NTzBGQlEwRTdPMEZCUlVFN1FVRkRRVHRCUVVOQk96dEJRVVZCTzBGQlEwRTdPMEZCUlVFN1FVRkRRVHM3UVVGRlFUdEJRVU5CT3p0QlFVVkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdPMEZCUlVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN08wRkJSVUU3TzBGQlJVRTdRVUZEUVR0QlFVTkJMRWxCUVVjN1FVRkRTRHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CT3p0QlFVVkJPMEZCUTBFN08wRkJSVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVR0QlFVTkJPenRCUVVWQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPenRCUVVWQk8wRkJRMEU3UVVGRFFUczdRVUZGUVR0QlFVTkJPMEZCUTBFN08wRkJSVUU3UVVGRFFUdEJRVU5CT3p0QlFVVkJPMEZCUTBFN1FVRkRRVHM3UVVGRlFUdEJRVU5CTzBGQlEwRTdPenM3T3pzN1FVTTNVMEVzWVVGQldTeERRVUZET3pzN096czdRVUZGWWl4TFFVRkpMRWxCUVVrc1IwRkJSeXh0UWtGQlR5eERRVUZETEVOQlFXTXNRMEZCUXl4RFFVRkRPenM3T3pzN096czdPenRMUVZka0xFbEJRVWs3UVVGRldpeFpRVVpSTEVsQlFVa3NSMEZGZVVJN1UwRkJjRU1zUjBGQlJ5eG5RMEZCUnl4RFFVRkRPMU5CUVVNc1IwRkJSeXhuUTBGQlJ5eERRVUZETzFOQlFVTXNTVUZCU1N4blEwRkJSeXhEUVVGRE8xTkJRVU1zUzBGQlN5eG5RMEZCUnl4RFFVRkRPenN5UWtGR00wSXNTVUZCU1RzN096czdRVUZOY2tJc1UwRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVOQlFVTTdRVUZEWml4VFFVRkpMRU5CUVVNc1IwRkJSeXhIUVVGSExFZEJRVWNzUTBGQlF6dEJRVU5tTEZOQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8wRkJRMnBDTEZOQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1MwRkJTeXhEUVVGRE8wRkJRMjVDTEZOQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1MwRkJTeXhEUVVGRE8wRkJRM0pDTEZOQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1MwRkJTeXhEUVVGRE8wRkJRM1JDTEZOQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBsQlEzcENPenRuUWtGaWEwSXNTVUZCU1R0QlFXOUNka0lzVjBGQlRUczdPenM3T3p0alFVRkJMR2RDUVVGRExFdEJRVXNzUlVGQlJUdEJRVU5hTEdGQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVrc1JVRkJSVHM3UVVGRllpeGxRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRXRCUVVzc1IwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZMTEVsQlFVa3NRMEZCUXl4SlFVRkxMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRVZCUVVVc1NVRkJTU3hEUVVGRExFZEJRVWNzUlVGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1ZVRkRPVWNzVFVGQlRUdEJRVU5NTEdWQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVWQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1JVRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdWVUZEYWtRN1FVRkRSQ3hoUVVGSkxFbEJRVWtzUTBGQlF5eFJRVUZSTEV0QlFVc3NTVUZCU1N4RFFVRkRMRXRCUVVzc1JVRkJSVHRCUVVOb1F5eGxRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU03UVVGRE0wSXNaVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU03VlVGRGNrSXNUVUZCVFR0QlFVTk1MR1ZCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzUzBGQlN5eERRVUZETzFWQlEzUkNPMEZCUTBRc1owSkJRVThzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0UlFVTnVRanM3UVVGTlJDeHBRa0ZCV1RzN096czdPenRqUVVGQkxITkNRVUZETEV0QlFVc3NSVUZCUlR0QlFVTnNRaXhoUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhGUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVWQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1JVRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZEY2tRc1owSkJRVThzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRGFFTTdPMEZCUzBjc1pVRkJWVHM3T3pzN08xbEJRVUVzV1VGQlJ6dEJRVU5tTEdkQ1FVRlBMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTnlSRHM3T3p0VlFXeEVhMElzU1VGQlNUczdPMnRDUVVGS0xFbEJRVWtzUXpzN096czdPenM3T3pzN096czdPenM3UVVOaWVrSXNZVUZCV1N4RFFVRkRPenRMUVVWT0xFbEJRVWtzZFVOQlFVMHNRMEZCWXpzN1MwRkRlRUlzVjBGQlZ5eDFRMEZCVFN4RlFVRnJRanM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096dExRVzFETjBJc1RVRkJUU3hYUVVGT0xFMUJRVTA3UVVGRlRpeFpRVVpCTEUxQlFVMHNSMEZGSzBRN1UwRkJjRVVzU1VGQlNTeG5RMEZCUXl4VlFVRlZPMU5CUVVNc1UwRkJVeXhuUTBGQlF5eFZRVUZWTzFOQlFVTXNUVUZCVFN4blEwRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEhRVUZITEVOQlFVTTdVMEZCUXl4TlFVRk5MR2REUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVkQlFVY3NRMEZCUXpzN01rSkJSbTVGTEUxQlFVMDdPMEZCUjJZc1UwRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTTdRVUZEYWtJc1UwRkJTU3hEUVVGRExGTkJRVk1zUjBGQlJ5eFRRVUZUTEVOQlFVTTdRVUZETTBJc1UwRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZEYkVJc1UwRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZEWml4VFFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU55UWl4VFFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUlVGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0SlFVTTFRanM3WjBKQlZGVXNUVUZCVFR0QlFWZHFRaXhYUVVGTk8yTkJRVUVzWjBKQlFVTXNUVUZCVFN4RlFVRkRMRTFCUVUwc1JVRkJSVHRCUVVOd1FpeGhRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhPMEZCUTJRc1kwRkJSeXhGUVVGRk8wRkJRMGdzWTBGQlF5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRXaXhqUVVGRExFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTmlPMEZCUTBRc1kwRkJSeXhGUVVGRk8wRkJRMGdzWTBGQlF5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRXaXhqUVVGRExFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTmlPMEZCUTBRc2FVSkJRVTBzUlVGQlJUdEJRVU5PTEdOQlFVTXNSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVVc1EwRkJReXhIUVVGSExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEZUVNc1kwRkJReXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlJTeERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVONlF6dFZRVU5HTEVOQlFVTTdVVUZEU0RzN1FVRk5SeXhYUVVGTk8xbEJTa0VzVlVGQlF5eExRVUZMTEVWQlFVVTdRVUZEYUVJc1lVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTXNjMEpCUVhOQ0xFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdVVUZEYmtRN1dVRkZVeXhaUVVGSE8wRkJRMWdzWjBKQlFVOHNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJRenRSUVVOeVFqczdRVUZIUkN4WFFVRk5PMk5CUVVFc1owSkJRVU1zUzBGQlN5eEZRVUZGTzBGQlExb3NZVUZCU1N4SlFVRkpMRU5CUVVNc1NVRkJTU3hMUVVGSExGVkJRVlVzUlVGQlJUdEJRVU14UWl4bFFVRkpMRk5CUVZNc1IwRkJSeXhKUVVGSkxFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXp0QlFVTnFSU3hsUVVGSkxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVVjc1IwRkJSeXhGUVVGRk8wRkJRVVVzYzBKQlFWTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkJSVHRCUVVOcVJDeGxRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRXRCUVVzc1EwRkJRenRCUVVOd1FpeGxRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzVTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNN1ZVRkRlRVFzVFVGQlRUdEJRVU5NTEdWQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExITkNRVUZ6UWl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xVkJRMnBFTzBGQlEwUXNZVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRVZCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzaERPenRCUVVWRUxESkNRVUZ6UWp0alFVRkJMR2REUVVGRExFOUJRVThzUlVGQlJUdEJRVU01UWl4cFFrRkJUeXhKUVVGSkxFTkJRVU1zVTBGQlV6dEJRVU51UWl4blFrRkJTeXhSUVVGUk8wRkJRMWdzYVVKQlFVa3NVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOd1J5eHhRa0ZCVVN4SFFVRkhMRkZCUVZFc1EwRkJReXhMUVVGTExFbEJRVWtzU1VGQlNTeERRVUZETEVWQlFVVXNSMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVONFF5eHhRa0ZCVVN4SFFVRkhMRU5CUVVVc1VVRkJVU3hIUVVGSExFbEJRVWtzUjBGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUTNaRExHOUNRVUZQTEZGQlFWRXNRMEZCUXp0QlFVTnNRaXhuUWtGQlN5eFZRVUZWTzBGQlEySXNiMEpCUVU4c1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RlFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRek5GTEdkQ1FVRkxMRmxCUVZrN1FVRkRaaXh2UWtGQlR5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFVkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZCUVN4VlFVTTFSVHRSUVVOR096czdPMVZCTjBSVkxFMUJRVTA3T3p0TFFXdEZUaXhOUVVGTkxGZEJRVTRzVFVGQlRUdEJRVVZPTEZsQlJrRXNUVUZCVFN4SFFVVlZPMU5CUVdZc1NVRkJTU3huUTBGQlF5eFJRVUZST3pzeVFrRkdaQ3hOUVVGTk96dEJRVWRtTEZOQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8wRkJRMnBDTEZOQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hYUVVGWExFVkJRVVVzUTBGQlF6dEJRVU12UWl4VFFVRkpMRU5CUVVNc1ZVRkJWU3hIUVVGSExFdEJRVXNzUTBGQlF6dEpRVU42UWpzN1owSkJUbFVzVFVGQlRUdEJRVkZxUWl4VlFVRkxPMk5CUVVFc2FVSkJRVWM3UVVGRFRpeHBRa0ZCVVN4SlFVRkpMRU5CUVVNc1NVRkJTVHRCUVVObUxHZENRVUZMTEZOQlFWTTdRVUZEV2l4cFFrRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXp0QlFVTm9RaXhwUWtGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZPMEZCUTJoQ0xESkNRVUZaTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8yTkJRelZDTzBGQlEwUXNhVUpCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzVlVGQlZTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVVONFJDeHBRa0ZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUXk5Q0xHMUNRVUZOTzBGQlExSXNaMEpCUVVzc1VVRkJVVHRCUVVOWUxHbENRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1FVRkRaQ3hwUWtGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlF5OUNMRzFDUVVGTk8wRkJRMUlzWjBKQlFVc3NXVUZCV1R0QlFVTm1MR2xDUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITzBGQlEyUXNaMEpCUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVWQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJRenRCUVVNelF5eG5Ra0ZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJRenRqUVVOcVJDeERRVUZETzBGQlEwWXNhVUpCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dEJRVU5rTEdsQ1FVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlF6dEJRVU5xUWl4dlFrRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eExRVUZMTzBGQlEycENMR2RDUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMEZCUTJ4Q0xHZENRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFVkJRMjVDTEVOQlFVTXNRMEZCUXp0QlFVTklMRzFDUVVGTk8wRkJRMUlzWjBKQlFVc3NVVUZCVVR0QlFVTllMR2xDUVVGSkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTTdRVUZEV2l4cFFrRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJReTlDTEcxQ1FVRk5PMEZCUVVFc1ZVRkRWRHRSUVVWR096dEJRVVZFTEZOQlFVazdZMEZCUVN4blFrRkJSenRCUVVOTUxHRkJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NTMEZCUnl4WlFVRlpMRVZCUVVVN1FVRkROVUlzWlVGQlNTeERRVUZETEZGQlFWRXNSMEZCUnp0QlFVTmtMR05CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVWQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJRenRCUVVNelF5eGpRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTJwRUxFTkJRVU03UVVGRFJpeGxRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJRenRCUVVOcVFpeHJRa0ZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTE8wRkJRMnBDTEdOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03UVVGRGJFSXNZMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eEZRVU51UWl4RFFVRkRMRU5CUVVNN1FVRkRTQ3hsUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdWVUZEWmp0UlFVTkdPenRCUVVWRUxGbEJRVTg3WTBGQlFTeHRRa0ZCUnp0QlFVTlNMR2xDUVVGUkxFbEJRVWtzUTBGQlF5eEpRVUZKTzBGQlEyWXNaMEpCUVVzc1VVRkJVVHRCUVVOWUxHbENRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1FVRkRaaXhwUWtGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlF5OUNMRzFDUVVGTk8wRkJRMUlzWjBKQlFVc3NXVUZCV1R0QlFVTm1MR2xDUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdRVUZEWml4cFFrRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ6dEJRVU5rTEdkQ1FVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzN1FVRkROVUlzWjBKQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwN1kwRkRiRU1zUTBGQlF6dEJRVU5HTEdsQ1FVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlF6dEJRVU5xUWl4dlFrRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eExRVUZMTzBGQlEycENMR2RDUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMEZCUTJ4Q0xHZENRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFVkJRMjVDTEVOQlFVTXNRMEZCUXp0QlFVTklMRzFDUVVGTk8wRkJRVUVzVlVGRFZEdFJRVU5HT3pzN08xVkJOVVZWTEUxQlFVMDdPenM3T3pzN1FVTjRSMjVDTEdGQlFWa3NRMEZCUXpzN096czdPMHRCUlZFc1RVRkJUVHRCUVVWa0xGbEJSbEVzVFVGQlRTeERRVVZpTEV0QlFVc3NSVUZCUlRzeVFrRkdRU3hOUVVGTk96dEJRVWQyUWl4VFFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFdEJRVXNzU1VGQlNTeExRVUZMTEVOQlFVTTdTVUZETjBJN08yZENRVXByUWl4TlFVRk5PMEZCVFhwQ0xGTkJRVWs3WTBGQlFTeGpRVUZETEV0QlFVc3NSVUZCUlR0QlFVTldMR0ZCUVVrc1MwRkJTeXhKUVVGSkxFdEJRVXNzUzBGQlN5eExRVUZMTEVWQlFVVTdRVUZETlVJc1pVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eExRVUZMTEVOQlFVTTdWVUZEY0VJc1RVRkJUVHRCUVVOTUxHVkJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRE8xVkJRekZDTzFGQlEwWTdPMEZCUlVRc1QwRkJSVHRqUVVGQkxHTkJRVWM3UVVGRFNDeGhRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJRenRSUVVOdVFqczdRVUZGUkN4UlFVRkhPMk5CUVVFc1pVRkJSenRCUVVOS0xHRkJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUTNCQ096czdPMVZCY0VKclFpeE5RVUZOT3pzN2EwSkJRVTRzVFVGQlRTeERPenM3T3pzN1FVTkdNMElzWVVGQldTeERRVUZET3pzN096czdPenM3T3pzN1FVRkZZaXhMUVVGSkxFZEJRVWNzUjBGQlJ5eHRRa0ZCVHl4RFFVRkRMRU5CUVdFc1EwRkJReXhEUVVGRE8wRkJRMnBETEV0QlFVa3NVMEZCVXl4SFFVRkhMRzFDUVVGUExFTkJRVU1zUTBGQmJVSXNRMEZCUXl4RFFVRkRPMEZCUXpkRExFdEJRVWtzU1VGQlNTeEhRVUZITEcxQ1FVRlBMRU5CUVVNc1JVRkJaMElzUTBGQlF5eERRVUZET3p0TFFVTjZRaXhYUVVGWExDdERRVUZOTEVWQlFYRkNPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096dExRVzFETjBJc1RVRkJUVHRCUVVWa0xGbEJSbEVzVFVGQlRTeEhRVVZZT3pKQ1FVWkxMRTFCUVUwN08wRkJTWFpDTEZOQlFVa3NUMEZCVHl4SFFVRkhMRU5CUVVNc1MwRkJTeXhGUVVGRExFdEJRVXNzUlVGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXpzN1FVRkZjRU1zVTBGQlNTeFJRVUZSTEVkQlFVYzdRVUZEWWl4aFFVRlJMRU5CUVVNc1IwRkJSeXhGUVVGRExFVkJRVVVzUTBGQlF6dEJRVU5vUWl4aFFVRlJMRlZCUVZVN1FVRkRiRUlzV1VGQlR5eERRVUZETzBGQlExSXNXVUZCVHl4RFFVRkRPMEZCUTFJc1lVRkJVU3hEUVVGRE8wRkJRMVFzWTBGQlV5eERRVUZETzAxQlExZ3NRMEZCUXpzN1FVRkZSaXhuUTBGbWFVSXNUVUZCVFN3MlEwRmxha0lzVTBGQlV5eEZRVUZETEU5QlFVOHNSVUZCUXl4UlFVRlJMRVZCUVVVN08wRkJSV3hETEZOQlFVa3NRMEZCUXl4WFFVRlhMRWRCUVVjc1ZVRkJWU3hEUVVGRE96dEJRVVU1UWl4VFFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSeXhGUVVGRkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RlFVRkZMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03TzBGQlJYUkhMRk5CUVVrc1EwRkJReXhSUVVGUkxFZEJRVWNzU1VGQlNTeFhRVUZYTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeEZRVUZETEVsQlFVa3NRMEZCUXl4WFFVRlhMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpOSExGTkJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVlVGQlZTeERRVUZET3p0QlFVVTNReXhUUVVGSkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTTdPMEZCUlZvc1UwRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eFRRVUZUTEVkQlFVY3NTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJRenM3UVVGRk0wTXNVMEZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMGxCUldoRE96dGhRVGxDYTBJc1RVRkJUVHM3WjBKQlFVNHNUVUZCVFR0QlFXZERla0lzYlVKQlFXTTdZMEZCUVN3d1FrRkJSenM3UVVGRlppeGhRVUZKTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZET1VJc1lVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRMnhETEdGQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXpzN1FVRkZha01zWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBGQlEyNURMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRCUVVOMlF5eGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdVVUZGY2tNN08wRkJSVVFzYTBKQlFXRTdZMEZCUVN4NVFrRkJSenM3UVVGRlpDeGhRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJUdEJRVU0xUWl4bFFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExGVkJRVlVzUTBGQlF6dFZRVU12UWl4TlFVRk5PMEZCUTB3c1pVRkJTU3hEUVVGRExGZEJRVmNzUjBGQlJ5eFpRVUZaTEVOQlFVTTdWVUZEYWtNN08wRkJSVVFzWVVGQlNTeEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkZPMEZCUTJwQ0xHVkJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0VlFVTjBSRHM3UVVGRlJDeGhRVUZKTEVOQlFVTTdZVUZCUlN4RFFVRkRPMkZCUVVVc1EwRkJRenRoUVVGRkxFTkJRVU03WVVGQlJTeFRRVUZUTzJGQlFVVXNXVUZCV1N4aFFVRkRPMEZCUTNoRExHRkJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVYzdRVUZEWkN4blFrRkJTeXhGUVVGRkxFTkJRVU03UVVGRFVpeFpRVUZETEVWQlFVVXNRMEZCUXp0VlFVTk1MRU5CUVVNN08wRkJSVVlzWVVGQlNTeEpRVUZKTEVOQlFVTXNWMEZCVnl4TFFVRkxMRlZCUVZVc1JVRkJSVHRCUVVOdVF5eGxRVUZKTEVOQlFVTXNVMEZCVXl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETzBGQlEycERMRmxCUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZETEVOQlFVTXNRMEZCUXp0QlFVTnFRaXhaUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBGQlEwNHNXVUZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU03UVVGRGJrSXNXVUZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU03UVVGRFppeGxRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eEhRVUZITEVkQlFVY3NRMEZCUXp0QlFVTjRReXhsUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NSMEZCUnl4RFFVRkRMRWRCUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVkQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1NVRkJSU3hEUVVGRExFZEJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRWRCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRE4wVXNiMEpCUVZNc1IwRkJSeXhaUVVGWkxFZEJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNSMEZCUlN4RFFVRkRMRU5CUVVVc1IwRkJReXhEUVVGRExFZEJRVU1zUzBGQlN5eERRVUZETzBGQlEzSkVMSFZDUVVGWkxFZEJRVWNzUTBGQlF5eEhRVUZETEVOQlFVTXNRMEZCUXp0VlFVTndRaXhOUVVGTk8wRkJRMHdzWlVGQlNTeERRVUZETEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU5zUXl4WlFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRMDRzV1VGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVNc1EwRkJReXhEUVVGRE8wRkJRMnhDTEZsQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRE8wRkJRMllzV1VGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNN1FVRkRiRUlzWlVGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUjBGQlJ5eEhRVUZITEVOQlFVTTdRVUZEZUVNc1pVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRlZCUVZVc1NVRkJSU3hEUVVGRExFZEJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRWRCUVVNc1EwRkJReXhEUVVGRExFZEJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRNMFVzYjBKQlFWTXNSMEZCUnl4alFVRmpMRWRCUVVNc1NVRkJTU3hEUVVGRExGTkJRVk1zUjBGQlJTeERRVUZETEVOQlFVVXNSMEZCUXl4RFFVRkRMRWRCUVVNc1IwRkJSeXhEUVVGRE8wRkJRM0pFTEhWQ1FVRlpMRWRCUVVjc1EwRkJReXhIUVVGRExFTkJRVU1zUTBGQlF6dFZRVU53UWpzN1FVRkZSQ3hoUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRE4wSXNZVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eEZRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpkQ0xHRkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRmRCUVZjc1JVRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dEJRVU0zUXl4aFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1FVRkRla01zWVVGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETzBGQlEzcERMR0ZCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zV1VGQldTeERRVUZETEU5QlFVOHNSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOcVF5eGhRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhSUVVGUkxFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdPMEZCUld4RExHRkJRVWtzU1VGQlNTeERRVUZETEZkQlFWY3NTMEZCU3l4VlFVRlZMRVZCUVVVN1FVRkRia01zWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1IwRkJSeXhGUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEycERMR1ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NSVUZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEyNUVMR1ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEU5QlFVOHNSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOeVF5eGxRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmxCUVZrc1EwRkJReXhSUVVGUkxFVkJRVU1zUTBGQlF5eEhRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VlVGRE0wUXNUVUZCVFR0QlFVTk1MR1ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOcVF5eGxRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGSExFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEYWtNc1pVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNUMEZCVHl4RlFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZEZGtRc1pVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNVVUZCVVN4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xVkJRM1pETzBGQlEwUXNZVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhaUVVGWkxFTkJRVU1zVjBGQlZ5eEZRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMEZCUTJwRUxHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1JVRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dEJRVU0zUXl4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGbEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN08wRkJSVGRETEdGQlFVa3NTVUZCU1N4RFFVRkRMRmRCUVZjc1MwRkJTeXhWUVVGVkxFVkJRVVU3UVVGRGJrTXNaVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zU1VGQlNTeEZRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXk5Q0xHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1JVRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMVZCUTJ4RUxFMUJRVTA3UVVGRFRDeGxRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFVkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVOcVJDeGxRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdWVUZEYUVNN1FVRkRSQ3hoUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRVZCUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVVTNRenM3UVVGRlJDeHRRa0ZCWXp0alFVRkJMREJDUVVGSE8wRkJRMllzWVVGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4WlFVRlpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1FVRkRhRVFzWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1FVRkRkRVFzWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRjRVE3TzBGQlIwUXNWMEZCVFR0alFVRkJMR3RDUVVGSE8wRkJRMUFzWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVN1FVRkRha0lzWlVGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUjBGQlF5eEpRVUZKTEVOQlFVTTdWVUZEZGtNN1FVRkRSQ3hoUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRVZCUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXpzN1FVRkZOVU1zWVVGQlNTeEpRVUZKTEVOQlFVTXNWMEZCVnl4TFFVRkxMRlZCUVZVc1JVRkJSVHRCUVVOdVF5eGxRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNSMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGVkJRVlVzU1VGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eEhRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpWR0xHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGREwwUXNaVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eEZRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTnFSU3hsUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZsQlFWa3NRMEZCUXl4UlFVRlJMRVZCUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0VlFVTXhSQ3hOUVVGTk8wRkJRMHdzWlVGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFZRVUZWTEVsQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNSMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTXpSaXhsUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTnFSQ3hsUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGFrTXNaVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhaUVVGWkxFTkJRVU1zVDBGQlR5eEZRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VlVGRGVrUTdVVUZEUmpzN1FVRkhSQ3hWUVVGTE8yTkJRVUVzYVVKQlFVYzdRVUZEVGl4aFFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNVMEZCVXl4SFFVRkRMRWRCUVVjc1EwRkJRenRCUVVOeVF5eGhRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETzBGQlEyeERMR0ZCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dFJRVU5pT3p0QlFVVkVMRk5CUVVrN1kwRkJRU3huUWtGQlJ6dEJRVU5NTEdGQlFVa3NTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSVHRCUVVOb1FpeGxRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZEYWtNc1pVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFpRVUZaTEVOQlFVVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFTkJRVVVzUTBGQlF6dEJRVU5vUkN4bFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRM1JETEdWQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRWUVVWbU8xRkJRMFk3TzBGQlJVUXNXVUZCVHp0alFVRkJMRzFDUVVGSE8wRkJRMUlzWVVGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMUZCUTJZN08wRkJSVWNzWlVGQlZUdFpRVUZCTEZsQlFVYzdRVUZEWml4blFrRkJUeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZWQlFWVXNRMEZCUXp0UlFVTXZRanM3UVVGVlJ5eFZRVUZMT3pzN096czdPenRaUVVoQkxGbEJRVWM3UVVGRFZpeG5Ra0ZCVHl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF6dFJRVU14UWp0WlFVTlJMRlZCUVVNc1EwRkJReXhGUVVGRk8wRkJRMWdzWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGRFSXNZVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNN1FVRkROME1zWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTjBReXhoUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdVVUZEWmpzN1FVRlZSeXhSUVVGSE96czdPenM3T3p0WlFVaEJMRmxCUVVjN1FVRkRVaXhuUWtGQlR5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJRenRSUVVONFFqdFpRVU5OTEZWQlFVTXNRMEZCUXl4RlFVRkZPMEZCUTFRc1lVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNKQ096dEJRVlZITEZGQlFVYzdPenM3T3pzN08xbEJTRUVzV1VGQlJ6dEJRVU5TTEdkQ1FVRlBMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETzFGQlEzaENPMWxCUTAwc1ZVRkJReXhEUVVGRExFVkJRVVU3UVVGRFZDeGhRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGNrSTdPMEZCVlVjc1UwRkJTVHM3T3pzN096czdXVUZJUVN4WlFVRkhPMEZCUTFRc1owSkJRVThzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNN1VVRkRla0k3V1VGRFR5eFZRVUZETEVOQlFVTXNSVUZCUlR0QlFVTldMR0ZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTjBRanM3UVVGVlJ5eFRRVUZKT3pzN096czdPenRaUVVoQkxGbEJRVWM3UVVGRFZDeG5Ra0ZCVHl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF6dFJRVU16UWp0WlFVTlBMRlZCUVVNc1EwRkJReXhGUVVGRk8wRkJRMVlzWVVGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRM2hDT3pzN08xVkJkRTlyUWl4TlFVRk5PMGxCUVZNc1UwRkJVenM3YTBKQlFYaENMRTFCUVUwc1F6czdPenM3TzBGRGVFTXpRaXhoUVVGWkxFTkJRVU03T3pzN096czdPenM3UVVGRllpeExRVUZKTEVkQlFVY3NSMEZCUnl4dFFrRkJUeXhEUVVGRExFTkJRV0VzUTBGQlF5eERRVUZETzBGQlEycERMRXRCUVVrc1YwRkJWeXhIUVVGSExHMUNRVUZQTEVOQlFVTXNSVUZCYTBJc1EwRkJReXhEUVVGRE8wRkJRemxETEV0QlFVa3NVMEZCVXl4SFFVRkhMRzFDUVVGUExFTkJRVU1zUTBGQmJVSXNRMEZCUXl4RFFVRkRPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3TzB0Qk9FSjRRaXhOUVVGTk8wRkJSV1FzV1VGR1VTeE5RVUZOTEVkQlJWZzdNa0pCUmtzc1RVRkJUVHM3UVVGSmRrSXNVMEZCU1N4UFFVRlBMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6czdRVUZGZUVJc1UwRkJTU3hSUVVGUkxFZEJRVWM3UVVGRFlpeGhRVUZSTEVOQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1EwRkJRenRCUVVObUxHVkJRVlVzUzBGQlN6dEJRVU5tTEdOQlFWTXNTMEZCU3p0TlFVTm1MRU5CUVVNN08wRkJSVVlzWjBOQldtbENMRTFCUVUwc05rTkJXV3BDTEZOQlFWTXNSVUZCUXl4UFFVRlBMRVZCUVVNc1VVRkJVU3hGUVVGRk96dEJRVVZzUXl4VFFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03TzBGQlJXNUVMRk5CUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dEpRVVZpT3p0aFFXeENhMElzVFVGQlRUczdaMEpCUVU0c1RVRkJUVHRCUVc5Q2VrSXNiVUpCUVdNN1kwRkJRU3d3UWtGQlJ6czdRVUZGWml4aFFVRkpMRU5CUVVNc1IwRkJSeXhIUVVGSExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1FVRkRPVUlzWVVGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzBGQlEycERMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRCUVVOdVF5eGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdVVUZGY2tNN08wRkJSVVFzYTBKQlFXRTdZMEZCUVN4NVFrRkJSenM3UVVGRlpDeGhRVUZKTEVsQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlF5eERRVUZETEVWQlFVVTdRVUZET1VJc1pVRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkRMRU5CUVVNc1EwRkJRenRWUVVNdlFpeE5RVUZOTzBGQlEwd3NaVUZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZETEVOQlFVTXNRMEZCUXp0VlFVTTVRanM3UVVGRlJDeGhRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGSExFVkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExGRkJRVkVzUjBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0QlFVTTFSQ3hoUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRVZCUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1IwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU16UkN4aFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1IwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU0xUXl4aFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1IwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU0xUXl4aFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eFBRVUZQTEVWQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1IwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU12UXl4aFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVWQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE96dEJRVVU1UXl4aFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMEZCUXpGRUxHRkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpORExHRkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVVjc1JVRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdVVUZGTTBNN08wRkJSVVFzYlVKQlFXTTdZMEZCUVN3d1FrRkJSenRCUVVObUxHRkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMEZCUTI1RUxHRkJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0UlFVTm1PenRCUVVWRUxGZEJRVTA3WTBGQlFTeHJRa0ZCUnp0QlFVTlFMR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eEZRVUZGTzBGQlEyWXNaVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zU1VGQlNTeEZRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0QlFVTXhSQ3hsUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0VlFVTnFSQ3hOUVVGTk8wRkJRMHdzWlVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dEJRVU14UkN4bFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eE5RVUZOTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFZRVU51UkR0UlFVTkdPenRCUVVWRUxGVkJRVXM3WTBGQlFTeHBRa0ZCUnp0QlFVTk9MR0ZCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dEJRVU5hTEdGQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRCUVVOa0xHRkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU5vUXpzN1FVRlZSeXhWUVVGTE96czdPenM3T3p0WlFVaEJMRmxCUVVjN1FVRkRWaXhuUWtGQlR5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJRenRSUVVNeFFqdFpRVU5STEZWQlFVTXNTMEZCU3l4RlFVRkZPMEZCUTJZc1lVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1FVRkRlRUlzWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlF5OUNMR0ZCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFJRVU5tT3p0QlFWRkVMRk5CUVVrN096czdPenM3TzJOQlFVRXNaMEpCUVVjN1FVRkRUQ3hoUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMEZCUTI1Q0xHRkJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0UlFVTm1PenM3TzFWQk9VWnJRaXhOUVVGTk8wbEJRVk1zVTBGQlV6czdhMEpCUVhoQ0xFMUJRVTBzUXpzN096czdPMEZEYkVNelFpeGhRVUZaTEVOQlFVTTdPenM3T3pzN096czdRVUZGWWl4TFFVRkpMRWRCUVVjc1IwRkJSeXh0UWtGQlR5eERRVUZETEVOQlFXRXNRMEZCUXl4RFFVRkRPMEZCUTJwRExFdEJRVWtzWTBGQll5eEhRVUZITEcxQ1FVRlBMRU5CUVVNc1JVRkJPRUlzUTBGQlF5eERRVUZET3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdTMEZwUTNoRExFMUJRVTA3UVVGRlpDeFpRVVpSTEUxQlFVMHNSMEZGV0RzeVFrRkdTeXhOUVVGTk96dEJRVWwyUWl4VFFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZET3p0QlFVZDJRaXhUUVVGSkxGRkJRVkVzUjBGQlJ6dEJRVU5pTEdGQlFWRXNRMEZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hEUVVGRE8wRkJRMllzWVVGQlVTeFpRVUZaTzBGQlEzQkNMR05CUVZNc1MwRkJTenROUVVObUxFTkJRVU03TzBGQlJVWXNaME5CWW1sQ0xFMUJRVTBzTmtOQllXcENMRk5CUVZNc1JVRkJReXhQUVVGUExFVkJRVU1zVVVGQlVTeEZRVUZGT3pzN096czdPMEZCVVd4RExGTkJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU03TzBGQlJTOUNMRk5CUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dEJRVU5hTEZOQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRKUVVWbU96dGhRVEZDYTBJc1RVRkJUVHM3WjBKQlFVNHNUVUZCVFR0QlFUUkNla0lzYlVKQlFXTTdZMEZCUVN3d1FrRkJSenRCUVVObUxHRkJRVWtzUTBGQlF5eEhRVUZITEVkQlFVY3NSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dEJRVU5vUXl4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN08wRkJSVzVETEdGQlFVa3NRMEZCUXl4cFFrRkJhVUlzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRPenM3UVVGSGJFTXNZVUZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMEZCUXk5Q0xHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6czdRVUZGY0VNc1lVRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ5eEhRVUZITEVOQlFVTXNZMEZCWXl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdPMEZCUldoRUxHRkJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN08wRkJSWEpFTEdGQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEZsQlFWa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03VVVGRmRrUTdPMEZCUlVRc2EwSkJRV0U3WTBGQlFTeDVRa0ZCUnpzN1FVRkZaQ3hoUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTjZReXhoUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTXhReXhoUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRVZCUVVVc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dEJRVU5xUml4aFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eGpRVUZqTEVWQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVU4wUkRzN1FVRkZSQ3h0UWtGQll6dGpRVUZCTERCQ1FVRkhPenRCUVVWbUxHRkJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExGbEJRVmtzUTBGQlF5eFpRVUZaTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU4wUlN4aFFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4WlFVRlpMRU5CUVVNc1dVRkJXU3hGUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1FVRkRjRVVzWVVGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMUZCUTJZN08wRkJVVVFzVjBGQlRUczdPenM3T3pzN08yTkJRVUVzYTBKQlFVYzdRVUZEVUN4aFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUlVGQlJUdEJRVU5tTEdWQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFMUJRVTBzUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wRkJRMmhFTEdWQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExGRkJRVkVzUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRE8xVkJRekZFTEUxQlFVMDdRVUZEVEN4bFFVRkpMRWxCUVVrc1EwRkJReXhKUVVGSkxFdEJRVWNzV1VGQldTeEZRVUZGTzBGQlF6VkNMR2xDUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1QwRkJUeXhIUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNSVUZCUlN4SFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRemxFTEdsQ1FVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkhMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eEhRVUZETEVkQlFVY3NSMEZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRCUVVOd1JTeHBRa0ZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEVsQlFVa3NSVUZCUnl4RFFVRkRMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNTVUZCUlN4SFFVRkhMRWRCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGVrVXNUVUZCVFR0QlFVTk1MR2xDUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0WlFVTnlSRHRCUVVORUxHVkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMVZCUTI1RU8xRkJRMFk3T3pzN1ZVRnFSbXRDTEUxQlFVMDdTVUZCVXl4alFVRmpPenRyUWtGQk4wSXNUVUZCVFN4RE96czdPenM3UVVOd1F6TkNMR0ZCUVZrc1EwRkJRenM3T3pzN096czdPenRCUVVWaUxFdEJRVWtzUjBGQlJ5eEhRVUZITEcxQ1FVRlBMRU5CUVVNc1EwRkJZU3hEUVVGRExFTkJRVU03UVVGRGFrTXNTMEZCU1N4SlFVRkpMRWRCUVVjc2JVSkJRVThzUTBGQlF5eERRVUZqTEVOQlFVTXNRMEZCUXp0QlFVTnVReXhMUVVGSkxGZEJRVmNzUjBGQlJ5eHRRa0ZCVHl4RFFVRkRMRVZCUVd0Q0xFTkJRVU1zUTBGQlF6dEJRVU01UXl4TFFVRkpMRk5CUVZNc1IwRkJSeXh0UWtGQlR5eERRVUZETEVOQlFXMUNMRU5CUVVNc1EwRkJRenM3T3pzN08wdEJUWGhDTEdOQlFXTTdRVUZGZEVJc1dVRkdVU3hqUVVGakxFTkJSWEpDTEVsQlFVa3NSVUZCUXl4UFFVRlBMRVZCUVVNc1VVRkJVU3hGUVVGRk96SkNRVVpvUWl4alFVRmpPenRCUVVrdlFpeG5RMEZLYVVJc1kwRkJZeXcyUTBGSmVrSXNTVUZCU1N4RlFVRkRMRTlCUVU4c1JVRkJReXhSUVVGUkxFVkJRVVU3TzBGQlJUZENMRk5CUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRWxCUVVrc1VVRkJVU3hEUVVGRE96dEJRVVV6UXl4VFFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSE8wRkJRMlFzVVVGQlF5eEZRVUZGTEVOQlFVTTdRVUZEU2l4UlFVRkRMRVZCUVVVc1EwRkJRenROUVVOTUxFTkJRVU03TzBGQlJVWXNVMEZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSkxGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wbEJSWEJFT3p0aFFXWnJRaXhqUVVGak96dG5Ra0ZCWkN4alFVRmpPMEZCYVVKcVF5eHRRa0ZCWXp0alFVRkJMREJDUVVGSE8wRkJRMllzWVVGQlNTeERRVUZETEVkQlFVY3NSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzBGQlEyaERMR0ZCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVOMFF5eGhRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhSUVVGUkxFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTTdRVUZEZUVNc1lVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNZMEZCWXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE96dEJRVVY2UXl4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN08wRkJSVzVETEdGQlFVa3NRMEZCUXl4cFFrRkJhVUlzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRPenRCUVVWc1F5eGhRVUZKTEVOQlFVTXNZVUZCWVN4RlFVRkZMRU5CUVVNN1VVRkRkRUk3TzBGQlJVUXNhMEpCUVdFN1kwRkJRU3g1UWtGQlJ6dEJRVU5rTEdGQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzUlVGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRM3BETEdGQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzUlVGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRekZETEdGQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFZEJRVWNzUlVGQlJTeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU4wUlRzN1FVRkZSQ3hYUVVGTk8yTkJRVUVzYTBKQlFVYzdRVUZEVUN4aFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUlVGQlJUdEJRVU5tTEdWQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFMUJRVTBzUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wRkJRMmhFTEdWQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExGRkJRVkVzUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRE8xVkJRekZFTEUxQlFVMDdRVUZEVEN4bFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eE5RVUZOTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU5zUkN4bFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFZRVU55UkR0UlFVTkdPenRCUVVWRUxGTkJRVWs3WTBGQlFTeGpRVUZETEZWQlFWVXNSVUZCUlR0QlFVTm1MR2xDUVVGUkxFbEJRVWtzUTBGQlF5eEpRVUZKTzBGQlEyWXNaMEpCUVVzc1UwRkJVenRCUVVOYUxHbENRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1FVRkRaQ3hwUWtGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZPMEZCUTJoQ0xESkNRVUZaTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8yTkJRelZDTzBGQlEwUXNhVUpCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzVlVGQlZTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPenRCUVVWMFJDeHRRa0ZCVFR0QlFVTlNMR2RDUVVGTExGRkJRVkU3UVVGRFdDeHBRa0ZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE96dEJRVVZrTEcxQ1FVRk5PMEZCUTFJc1owSkJRVXNzV1VGQldUdEJRVU5tTEdsQ1FVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSE8wRkJRMlFzWjBKQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXp0QlFVTXpReXhuUWtGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXp0alFVTXZReXhEUVVGRE8wRkJRMFlzYVVKQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenM3T3pzN08wRkJUV1FzYlVKQlFVMDdRVUZEVWl4blFrRkJTeXhSUVVGUk8wRkJRMWdzYVVKQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU03TzBGQlJYUkNMRzFDUVVGTk8wRkJRVUVzVlVGRFZEdFJRVVZHT3p0QlFVVkVMRk5CUVVrN1kwRkJRU3hqUVVGRExFdEJRVXNzUlVGQlJUdEJRVU5XTEdGQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVrc1MwRkJSeXhaUVVGWkxFVkJRVVU3UVVGRE5VSXNaVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhMUVVGTExFbEJRVWtzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0QlFVTnFReXhsUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITzBGQlEyUXNZMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUlVGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpORExHTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTTdXVUZEYWtRc1EwRkJRenRCUVVOR0xHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkRPMEZCUTJwQ0xHdENRVUZMTEVWQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzN1FVRkRha0lzWTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRCUVVOc1FpeGpRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFVkJRMjVDTEVOQlFVTXNRMEZCUXp0QlFVTklMR1ZCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFZRVU5tTzFGQlEwWTdPMEZCUlVRc1QwRkJSVHRqUVVGQkxHTkJRVWM3UVVGRFNDeHBRa0ZCVVN4SlFVRkpMRU5CUVVNc1NVRkJTVHRCUVVObUxHZENRVUZMTEZGQlFWRTdRVUZEV0N4cFFrRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZET3p0QlFVVm1MRzFDUVVGTk8wRkJRMUlzWjBKQlFVc3NXVUZCV1R0QlFVTm1MR2xDUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdRVUZEWml4cFFrRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ6dEJRVU5rTEdkQ1FVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eEZRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNN1FVRkRNME1zWjBKQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNN1kwRkRha1FzUTBGQlF6czdPenM3TzBGQlRVWXNiVUpCUVUwN1FVRkJRU3hWUVVOVU8xRkJRMFk3TzBGQlNVUXNWVUZCU3pzN096dGpRVUZCTEdsQ1FVRkhPMEZCUTA0c1lVRkJTU3hEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzFGQlEySTdPMEZCUTBRc1UwRkJTVHRqUVVGQkxHZENRVUZITzBGQlEwd3NZVUZCU1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8xRkJRMkk3TzBGQlEwUXNXVUZCVHp0alFVRkJMRzFDUVVGSE8wRkJRMUlzWVVGQlNTeERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRPMUZCUTFnN08wRkJWVWNzVlVGQlN6czdPenM3T3pzN1dVRklRU3haUVVGSE8wRkJRMVlzWjBKQlFVOHNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU03VVVGRE1VSTdXVUZEVVN4VlFVRkRMRXRCUVVzc1JVRkJSVHRCUVVObUxHRkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRM2hDTEdGQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVrc1MwRkJSeXhaUVVGWkxFVkJRVVU3UVVGRE5VSXNaVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVU03UVVGRGFrSXNhMEpCUVVzc1JVRkJSU3hKUVVGSkxFTkJRVU1zUzBGQlN6dEJRVU5xUWl4alFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzBGQlEyeENMR05CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNSVUZEYmtJc1EwRkJReXhEUVVGRE8xVkJRMG9zVFVGQlRUdEJRVU5NTEdWQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0VlFVTm9RenRCUVVORUxHRkJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0UlFVTm1PenRCUVU5RUxGTkJRVWs3T3pzN096czdPMk5CUVVFc1kwRkJReXhMUVVGTExFVkJRVVU3UVVGRFZpeGhRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEJRVU40UWl4aFFVRkpMRWxCUVVrc1EwRkJReXhKUVVGSkxFdEJRVWNzV1VGQldTeEZRVUZGTzBGQlF6VkNMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZETzBGQlEycENMR3RDUVVGTExFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVczdRVUZEYWtJc1kwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0QlFVTnNRaXhqUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRVZCUTI1Q0xFTkJRVU1zUTBGQlF6dFZRVU5LTEUxQlFVMDdRVUZEVEN4bFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1ZVRkRhRU03UVVGRFJDeGhRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1VVRkRaanM3UVVGTlJDeFhRVUZOT3pzN096czdPMk5CUVVFc1owSkJRVU1zVVVGQlVTeEZRVUZGTzBGQlEyWXNZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF6dEJRVU5xUWl4aFFVRkpMRkZCUVZFc1MwRkJSeXhMUVVGTExFVkJRVVU3UVVGRGNFSXNaVUZCU1N4SlFVRkpMRU5CUVVNc1NVRkJTU3hMUVVGSExGbEJRVmtzUlVGQlJUdEJRVU0xUWl4cFFrRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVTTdRVUZEYWtJc2IwSkJRVXNzUlVGQlJTeEpRVUZKTEVOQlFVTXNTMEZCU3p0QlFVTnFRaXhuUWtGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRCUVVOc1FpeG5Ra0ZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eEZRVU51UWl4RFFVRkRMRU5CUVVNN1dVRkRTaXhOUVVGTk8wRkJRMHdzYVVKQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0WlFVTm9RenRWUVVOR08wRkJRMFFzWVVGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMUZCUTJZN08wRkJUVVFzV1VGQlR6czdPenM3T3p0alFVRkJMR2xDUVVGRExGRkJRVkVzUlVGQlJUdEJRVU5vUWl4aFFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETzBGQlEyeENMR0ZCUVVrc1VVRkJVU3hMUVVGSExFdEJRVXNzUlVGQlJUdEJRVU53UWl4bFFVRkpMRWxCUVVrc1EwRkJReXhKUVVGSkxFdEJRVWNzV1VGQldTeEZRVUZGTzBGQlF6VkNMR2xDUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUXp0QlFVTnFRaXh2UWtGQlN5eEZRVUZGTEVsQlFVa3NRMEZCUXl4TFFVRkxPMEZCUTJwQ0xHZENRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8wRkJRMnhDTEdkQ1FVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVWQlEyNUNMRU5CUVVNc1EwRkJRenRaUVVOS0xFMUJRVTA3UVVGRFRDeHBRa0ZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMWxCUTJoRE8xVkJRMFk3UVVGRFJDeGhRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1VVRkRaanM3T3p0VlFXaE9hMElzWTBGQll6dEpRVUZUTEZOQlFWTTdPMnRDUVVGb1F5eGpRVUZqTEVNN096czdPenRCUTFodVF5eGhRVUZaTEVOQlFVTTdPenM3T3pzN096czdRVUZGWWl4TFFVRkpMR05CUVdNc1IwRkJSeXh0UWtGQlR5eERRVUZETEVWQlFUaENMRU5CUVVNc1EwRkJRenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN1MwRm5RM2hETEZWQlFWVTdRVUZGYkVJc1dVRkdVU3hWUVVGVkxFZEJSV1k3TWtKQlJrc3NWVUZCVlRzN1FVRkpNMElzVTBGQlNTeFBRVUZQTEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenM3UVVGRmVFSXNVMEZCU1N4UlFVRlJMRWRCUVVjN1FVRkRZaXhoUVVGUkxFTkJRVU1zUjBGQlJ5eEZRVUZETEVWQlFVVXNRMEZCUXp0QlFVTm9RaXhqUVVGVExFdEJRVXM3UVVGRFpDeGhRVUZSTEUxQlFVMDdUVUZEWml4RFFVRkRPenRCUVVWR0xHZERRVnBwUWl4VlFVRlZMRFpEUVZseVFpeFRRVUZUTEVWQlFVTXNUMEZCVHl4RlFVRkRMRkZCUVZFc1JVRkJSVHM3UVVGRmJFTXNVMEZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXpzN1FVRkZhRU1zVTBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRk5CUVZNc1JVRkJRenM3UVVGRGVrSXNWMEZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhoUVVGaExFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4VFFVRlRMRU5CUVVNN1FVRkRkRVFzWTBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4dFJVRkJiVVVzUTBGQlF5eERRVUZETzAxQlEyNUdPMEZCUTBRc1UwRkJTU3hEUVVGRExHTkJRV01zUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMR0ZCUVdFc1EwRkJRenRCUVVOc1JDeFRRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkpMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zWVVGQllTeEhRVUZKTEZGQlFWRXNSMEZCUnl4UlFVRlJMRU5CUVVNN1FVRkRhRVVzVTBGQlNTeERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMEZCUTFvc1UwRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZET3p0QlFVVmtMRk5CUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRU5CUVVNN1NVRkZiRU03TzJGQk0wSnJRaXhWUVVGVk96dG5Ra0ZCVml4VlFVRlZPMEZCTmtJM1FpeGxRVUZWTzJOQlFVRXNjMEpCUVVjN08wRkJSVmdzWVVGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4UlFVRlJMRU5CUVVNc1lVRkJZU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlF6ZERMR0ZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenM3UVVGRmRFTXNZVUZCU1N4RFFVRkRMRmRCUVZjc1IwRkJSeXhSUVVGUkxFTkJRVU1zWVVGQllTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTJwRUxHRkJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNVMEZCVXl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU03UVVGRGVFTXNZVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRPMUZCUXpWRE96dEJRVVZFTEcxQ1FVRmpPMk5CUVVFc01FSkJRVWNzUlVGRmFFSTdPMEZCUlVRc2JVSkJRV003WTBGQlFTd3dRa0ZCUnp0QlFVTm1MR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF6dEJRVU0xUXl4aFFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03VVVGRFpqczdRVUZGUkN4clFrRkJZVHRqUVVGQkxIbENRVUZITzBGQlExb3NZVUZCU1N4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlF5eERRVUZETEVOQlFVTTdRVUZETjBJc1lVRkJTU3hUUVVGVExFZEJRVWtzU1VGQlNTeERRVUZETEV0QlFVc3NTVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVY3NRMEZCUXp0QlFVTjRSQ3hwUWtGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1VVRkJVU3hGUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzBGQlEzaERMR0ZCUVVrc1NVRkJTU3hEUVVGRExHRkJRV0VzUlVGQlJUdEJRVU4wUWl4bFFVRkpMRk5CUVZNc1IwRkJTU3hKUVVGSkxFTkJRVU1zUzBGQlN5eEpRVUZKTEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlJ5eERRVUZETzBGQlEyaEZMRzFDUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4UlFVRlJMRVZCUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03VlVGRGVrTTdRVUZEUkN4aFFVRkpMRTFCUVUwc1IwRkJSeXhUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkROVU1zWlVGQlRTeEpRVUZKTEZWQlFWVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFdEJRVXNzUTBGQlF6dEJRVU16UXl4bFFVRk5MRWxCUVVrc1YwRkJWeXhIUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUXl4UlFVRlJMRWxCUVVVc1EwRkJReXhIUVVGRExGTkJRVk1zUTBGQlF6dEJRVU42UkN4bFFVRk5MRWxCUVVrc2VVSkJRWGxDTEVOQlFVTTdRVUZEY0VNc1pVRkJUU3hKUVVGSkxIRkNRVUZ4UWl4RFFVRkRPMEZCUTJoRExHVkJRVTBzU1VGQlNTeDFRa0ZCZFVJc1EwRkJRenRCUVVOc1F5eGxRVUZOTEVsQlFVa3NiVUpCUVcxQ0xFTkJRVU03UVVGRE9VSXNaVUZCVFN4SlFVRkpMR0ZCUVdFc1EwRkJRenRCUVVONFFpeGxRVUZOTEVsQlFVa3NXVUZCV1N4SFFVRkhMRkZCUVZFc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRE1VTXNZVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eEhRVUZITEUxQlFVMHNRMEZCUXp0QlFVTjRReXhoUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdVVUZEYWtJN08wRkJSVVFzVjBGQlRUdGpRVUZCTEd0Q1FVRkhPMEZCUTFBc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVWQlFVVTdRVUZEWml4bFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eGxRVUZsTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU03UVVGRGRFUXNaVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRE8wRkJRMmhFTEdWQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1UwRkJVeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTTdWVUZEZWtNc1RVRkJUVHRCUVVOTUxHVkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMR1ZCUVdVc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXp0QlFVTjRSQ3hsUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTTdRVUZEYUVRc1pVRkJTU3hKUVVGSkxFTkJRVU1zWVVGQllTeEZRVUZGTzBGQlEzUkNMR2xDUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRE8xbEJRMnhFTEUxQlFVMDdRVUZEVEN4cFFrRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eFRRVUZUTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJRenRaUVVONlF6dFZRVU5HTzFGQlEwWTdPMEZCVlVjc2EwSkJRV0U3T3pzN096czdXVUZLUVN4WlFVRkhPMEZCUTJ4Q0xHZENRVUZQTEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNN1VVRkROVUk3V1VGRlowSXNWVUZCUXl4SlFVRkpMRVZCUVVVN1FVRkRkRUlzWVVGQlNTeEpRVUZKTEVWQlFVVTdRVUZEVWl4bFFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExGRkJRVkVzUTBGQlF6dFZRVU4wUWl4TlFVRk5PMEZCUTB3c1pVRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eFJRVUZSTEVOQlFVTTdWVUZEZEVJN1FVRkRSQ3hoUVVGSkxFTkJRVU1zWTBGQll5eEhRVUZITEVsQlFVa3NRMEZCUXp0QlFVTXpRaXhoUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdVVUZEWmpzN1FVRlhSeXhUUVVGSk96czdPenM3TzFsQlNrRXNXVUZCUnp0QlFVTlVMR2RDUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTTdVVUZEYmtJN1dVRkZUeXhWUVVGRExFbEJRVWtzUlVGQlJUdEJRVU5pTEdGQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRE8wRkJRMnhDTEdGQlFVa3NRMEZCUXl4aFFVRmhMRVZCUVVVc1EwRkJRenRCUVVOeVFpeGhRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1VVRkRaanM3T3p0VlFYQklhMElzVlVGQlZUdEpRVUZUTEdOQlFXTTdPMnRDUVVGcVF5eFZRVUZWTEVNN096czdPenRCUTJ4REwwSXNZVUZCV1N4RFFVRkRPenM3T3pzN096czdPenRCUVVkaUxFdEJRVWtzVTBGQlV5eEhRVUZITEcxQ1FVRlBMRU5CUVVNc1EwRkJiVUlzUTBGQlF5eERRVUZETzBGQlF6ZERMRXRCUVVrc1RVRkJUU3hIUVVGSExHMUNRVUZQTEVOQlFVTXNSVUZCYzBJc1EwRkJReXhEUVVGRE96czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPMHRCSzBKNFFpeFhRVUZYTzBGQlJXNUNMRmxCUmxFc1YwRkJWeXhIUVVWb1Fqc3lRa0ZHU3l4WFFVRlhPenRCUVVrMVFpeFRRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE96dEJRVVY0UWl4VFFVRkpMRkZCUVZFc1IwRkJSenRCUVVOaUxHRkJRVkVzUTBGQlF5eEhRVUZITEVWQlFVTXNSVUZCUlN4RFFVRkRPMEZCUTJoQ0xIZENRVUZ0UWl4RFFVRkRPMEZCUTNCQ0xHVkJRVlVzUTBGQlF5eERRVUZETzAxQlEySXNRMEZCUXpzN1FVRkZSaXhuUTBGYWFVSXNWMEZCVnl3MlEwRlpkRUlzVTBGQlV5eEZRVUZETEU5QlFVOHNSVUZCUXl4UlFVRlJMRVZCUVVVN08wRkJSV3hETEZOQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1JVRkJSU3hEUVVGRE8wRkJRMnhDTEZOQlFVa3NRMEZCUXl4blFrRkJaMElzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMR1ZCUVdVc1EwRkJRenRCUVVOMFJDeFRRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zVFVGQlRTeERRVUZET3p0QlFVVnVReXhUUVVGSkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTTdRVUZEV2l4VFFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03U1VGRlpqczdZVUZ5UW10Q0xGZEJRVmM3TzJkQ1FVRllMRmRCUVZjN1FVRjFRamxDTEdWQlFWVTdZMEZCUVN4elFrRkJSenRCUVVOWUxHRkJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NVVUZCVVN4RFFVRkRMR0ZCUVdFc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEJRVU0zUXl4aFFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1VVRkRka003TzBGQlJVUXNiVUpCUVdNN1kwRkJRU3d3UWtGQlJ6czdRVUZGWml4alFVRkxMRWxCUVVrc1EwRkJReXhIUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVkQlFVTXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZPMEZCUTNoRExHVkJRVWtzVTBGQlV5eEhRVUZITEZGQlFWRXNRMEZCUXl4aFFVRmhMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03TzBGQlJTOURMR1ZCUVVrc1RVRkJUU3hIUVVGSExFbEJRVWtzVFVGQlRTeERRVUZETEZOQlFWTXNSVUZCUlR0QlFVTXZRaXhwUWtGQlNTeEZRVUZGTEZGQlFWRTdRVUZEWkN4elFrRkJVeXhGUVVGRkxFbEJRVWtzUlVGRGFFSXNSVUZCUlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenM3UVVGRkwwSXNaVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZETVVJc1pVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFhRVUZYTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNN1ZVRkRja003VVVGRlJqczdRVUZGUkN4clFrRkJZVHRqUVVGQkxIbENRVUZIT3p0QlFVVmtMR0ZCUVVrc1YwRkJWeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETzBGQlEzSkVMR0ZCUVVrc1dVRkJXU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTTdPMEZCUlM5Q0xHTkJRVXNzU1VGQlNTeERRVUZETEVkQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zWjBKQlFXZENMRVZCUVVNc1EwRkJReXhGUVVGRkxFVkJRVVU3UVVGRGVFTXNaVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RlFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8xVkJRMnhFTzFGQlJVWTdPMEZCUlVRc2JVSkJRV003WTBGQlFTd3dRa0ZCUnp0QlFVTm1MR05CUVVzc1NVRkJTU3hEUVVGRExFZEJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSMEZCUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVWQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVN1FVRkRlRU1zWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXp0QlFVTnlReXhsUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8xVkJRekZDTzFGQlEwWTdPMEZCUlVRc1YwRkJUVHRqUVVGQkxHZENRVUZETEV0QlFVc3NSVUZCUlR0QlFVTmFMR0ZCUVVrc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4TFFVRkxMRVZCUVVVN1FVRkROMElzWlVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRWUVVOd1FpeE5RVUZOTzBGQlEwd3NaVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8xVkJRMnBDT3p0QlFVRkJMRkZCUlVZN08wRkJSVVFzVjBGQlRUdGpRVUZCTEd0Q1FVRkhPMEZCUTFBc1kwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZPMEZCUTNSRExHVkJRVWtzUTBGQlF5eExRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVN1FVRkRia0lzYVVKQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMWxCUXk5Q0xFMUJRVTA3UVVGRFRDeHBRa0ZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1dVRkRhRU03VlVGRFJqdFJRVU5HT3p0QlFVMUVMRmRCUVUwN096czdPenM3WTBGQlFTeG5Ra0ZCUXl4TFFVRkxMRVZCUVVVN1FVRkRXaXhoUVVGSkxFdEJRVXNzU1VGQlJTeERRVUZETEVsQlFVa3NTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeEZRVUZGTzBGQlF6TkRMR1ZCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzUzBGQlN5eERRVUZETzBGQlEzQkNMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVOb1F5eGxRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1ZVRkRaanRSUVVOR096dEJRVXRFTEdGQlFWRTdPenM3T3p0alFVRkJMRzlDUVVGSE8wRkJRMVFzWVVGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOcVFpeGhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZEYUVNc1lVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzFGQlEyWTdPMEZCVlVjc2IwSkJRV1U3V1VGU1FTeFpRVUZITzBGQlEzQkNMR2RDUVVGUExFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJRenRSUVVNNVFqczdPenM3TzFsQlRXdENMRlZCUVVNc1QwRkJUeXhGUVVGRk8wRkJRek5DTEdGQlFVa3NRMEZCUXl4blFrRkJaMElzUjBGQlJ5eFBRVUZQTEVOQlFVTTdRVUZEYUVNc1kwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZPMEZCUTNSRExHVkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03VlVGRE0wSTdRVUZEUkN4aFFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFVkJRVVVzUTBGQlF6czdPenRCUVVsc1FpeGhRVUZKTEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNN1FVRkRZaXhoUVVGSkxFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTTdVVUZEZGtJN096czdWVUY2U0d0Q0xGZEJRVmM3U1VGQlV5eFRRVUZUT3p0clFrRkJOMElzVjBGQlZ5eERPenM3T3pzN1FVTnVRMmhETEdGQlFWa3NRMEZCUXpzN096czdPenM3T3p0QlFVVmlMRXRCUVVrc1UwRkJVeXhIUVVGSExHMUNRVUZQTEVOQlFVTXNRMEZCYlVJc1EwRkJReXhEUVVGRE8wRkJRemRETEV0QlFVa3NTVUZCU1N4SFFVRkhMRzFDUVVGUExFTkJRVU1zUlVGQlowSXNRMEZCUXl4RFFVRkRPMEZCUTNKRExFdEJRVWtzU1VGQlNTeEhRVUZITEcxQ1FVRlBMRU5CUVVNc1EwRkJZeXhEUVVGRExFTkJRVU03T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdTMEZ0UTJRc1RVRkJUVHRCUVVWa0xGbEJSbEVzVFVGQlRTeEhRVVZZT3pKQ1FVWkxMRTFCUVUwN08wRkJTWFpDTEZOQlFVa3NUMEZCVHl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03TzBGQlJYaENMRk5CUVVrc1VVRkJVU3hIUVVGSE8wRkJRMklzWVVGQlVTeERRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRU5CUVVNN1FVRkRaaXhqUVVGVExFTkJRVU03UVVGRFZpeFpRVUZQTEVOQlFVTTdRVUZEVWl4WlFVRlBMRXRCUVVzN1FVRkRXaXhoUVVGUkxFTkJRVU03VFVGRFZpeERRVUZET3p0QlFVVkdMR2REUVdScFFpeE5RVUZOTERaRFFXTnFRaXhUUVVGVExFVkJRVU1zVDBGQlR5eEZRVUZETEZGQlFWRXNSVUZCUlRzN1FVRkZiRU1zVTBGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NSVUZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFZEJRVWNzUlVGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWxCUVVrc1JVRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPenM3T3pzN08wRkJUMjVITEZOQlFVa3NRMEZCUXl4aFFVRmhMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRM1pDTEZOQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRE96dEJRVVZvUWl4VFFVRkpMRU5CUVVNc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRPenRCUVVVelFpeFRRVUZKTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZET3p0QlFVVXpRaXhUUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRE96dEJRVVUzUWl4VFFVRkpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03UVVGRFdpeFRRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1NVRkZaanM3WVVGdVEydENMRTFCUVUwN08yZENRVUZPTEUxQlFVMDdRVUZ4UTNwQ0xHVkJRVlU3WTBGQlFTeHpRa0ZCUnp0QlFVTllMR0ZCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzVVVGQlVTeERRVUZETEdGQlFXRXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRCUVVNdlF5eGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1IwRkJSeXhOUVVGTkxFTkJRVU03TzBGQlJUTkNMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hGUVVGRkxHRkJRVms3UVVGRGFrUXNaVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zWlVGQlpTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRE8wRkJRM1JFTEdWQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJRenRCUVVNMVF5eGxRVUZKTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhMUVVGTExFbEJRVWtzUTBGQlF5eExRVUZMTEVWQlFVVTdRVUZEY0VNc2FVSkJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NWVUZCVlN4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZETlVNc2FVSkJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0WlFVTm9RanRWUVVOR0xFVkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN08wRkJSMklzWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4blFrRkJaMElzUTBGQlF5eFRRVUZUTEVWQlFVVXNWMEZCVlN4RFFVRkRMRVZCUVVVN1FVRkRja1FzWlVGQlNTeERRVUZETEVOQlFVTXNTMEZCU3l4SFFVRkhMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU1zUzBGQlN5eEhRVUZITEVWQlFVVXNSVUZCUlR0QlFVTnFReXhwUWtGQlNTeERRVUZETEVOQlFVTXNTMEZCU3l4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUzBGQlN5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1MwRkJTeXhMUVVGTExFTkJRVU1zUlVGQlJUdEJRVU40UkN4blFrRkJReXhEUVVGRExHTkJRV01zUlVGQlJTeERRVUZETzJOQlEyNUNPMWxCUTBRN1FVRkRSQ3hsUVVGSkxFTkJRVU1zUTBGQlF5eExRVUZMTEV0QlFVY3NSVUZCUlN4RlFVRkZPMEZCUTJwQ0xHbENRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8wRkJRMnhDTEdsQ1FVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUTJoRExHbENRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZETDBJc2FVSkJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0WlFVTm9RanRWUVVOR0xFVkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN08wRkJSV0lzWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFGQlJYWkRPenRCUVVWRUxHdENRVUZoTzJOQlFVRXNlVUpCUVVjN08wRkJSV1FzWVVGQlNTeERRVUZETEdGQlFXRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVWQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE96dEJRVVYwUkN4aFFVRkpMRTFCUVUwc1IwRkJSeXhUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkROVU1zWlVGQlRTeEpRVUZKTEZWQlFWVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFdEJRVXNzUTBGQlF6dEJRVU16UXl4bFFVRk5MRWxCUVVrc05FSkJRVFJDTEVOQlFVTTdRVUZEZGtNc1pVRkJUU3hKUVVGSkxHTkJRV01zUTBGQlF6dEJRVU42UWl4bFFVRk5MRWxCUVVrc2NVSkJRWEZDTEVOQlFVTTdRVUZEYUVNc1pVRkJUU3hKUVVGSkxHMUNRVUZ0UWl4RFFVRkRPMEZCUXpsQ0xHVkJRVTBzU1VGQlNTeFpRVUZaTEVkQlFVY3NTVUZCU1N4RFFVRkRMR0ZCUVdFc1IwRkJReXhEUVVGRExFZEJRVWNzUzBGQlN5eERRVUZET3p0QlFVVjBSQ3hsUVVGTkxFbEJRVWtzWlVGQlpTeERRVUZETzBGQlF6RkNMR1ZCUVUwc1NVRkJTU3huUWtGQlowSXNRMEZCUXp0QlFVTXpRaXhsUVVGTkxFbEJRVWtzVjBGQlZ5eEhRVUZETEVsQlFVa3NRMEZCUXl4aFFVRmhMRWRCUVVNc1EwRkJReXhIUVVGRExFdEJRVXNzUjBGQlF5eEpRVUZKTEVOQlFVTXNZVUZCWVN4SFFVRkRMRU5CUVVNc1IwRkJReXhMUVVGTExFTkJRVU03UVVGRE5VVXNaVUZCVFN4SlFVRkpMSGxDUVVGNVFpeERRVUZETzBGQlEzQkRMR1ZCUVUwc1NVRkJTU3h0UWtGQmJVSXNRMEZCUXp0QlFVTTVRaXhsUVVGTkxFbEJRVWtzYzBKQlFYTkNMRU5CUVVNN1FVRkRha01zWlVGQlRTeEpRVUZKTEhsQ1FVRjVRaXhEUVVGRE8wRkJRM0JETEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzU1VGQlNTeE5RVUZOTEVOQlFVTTdPenM3TzBGQlMzSkRMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNN1VVRkZha003TzBGQlJVUXNiVUpCUVdNN1kwRkJRU3d3UWtGQlJ6dEJRVU5pTEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExHVkJRV1VzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJRenRCUVVOMFJDeGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNN1VVRkRMME03TzBGQlJVUXNWMEZCVFR0alFVRkJMR3RDUVVGSE96dEJRVVZRTEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1JVRkJReXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEVOQlFVTTdVVUZGYUVVN08wRkJSVVFzVlVGQlN6dGpRVUZCTEdsQ1FVRkhPMEZCUTA0c1lVRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ5eExRVUZMTEVOQlFVTTdRVUZEZEVJc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRPMEZCUXpsQ0xHRkJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJRenRCUVVONFFpeGhRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNN1FVRkRia01zWVVGQlNTeERRVUZETEZsQlFWa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVVVzUTBGQlF6dEJRVU0zUkN4blFrRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1VVRkRhRU03TzBGQlJVUXNVMEZCU1R0alFVRkJMR2RDUVVGSE8wRkJRMHdzWVVGQlNTeERRVUZETEZGQlFWRXNSMEZCUnl4SlFVRkpMRU5CUVVNN1FVRkRja0lzWVVGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZPenRCUVVWb1FpeGxRVUZKTEZGQlFWRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEV0QlFVMHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJSU3hKUVVGSkxFTkJRVU1zUjBGQlJ5eEhRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlJTeEhRVUZITEVkQlFVY3NRMEZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOcVNpeGxRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRkZCUVZFc1EwRkJRenM3UVVGRmVFSXNaVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8wRkJRMW9zWlVGQlNTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1JVRkJSVHRCUVVOMlFpeHBRa0ZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMWxCUTJoRE8xVkJSVWc3VVVGRFJEczdRVUZGUkN4WlFVRlBPMk5CUVVFc2JVSkJRVWM3UVVGRFVpeGhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJSVHRCUVVOc1FpeGxRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRkZCUVZFc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRGFFTXNaVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF6dEJRVU55UWl4bFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExHbENRVUZwUWl4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVNM1JDeGxRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhsUVVGbExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNN1FVRkRlRVFzWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRPMVZCUXpWRExFMUJRVTA3UVVGRFRDeHRRa0ZCVVN4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF6dFZRVU4yUWp0UlFVTkdPenRCUVU5RUxGTkJRVWs3T3pzN096czdPMk5CUVVFc1kwRkJReXhYUVVGWExFVkJRVVU3T3p0QlFVTm9RaXhoUVVGSkxFTkJRVU1zUjBGQlJ5eEhRVUZITEZkQlFWY3NRMEZCUXl4SFFVRkhMRU5CUVVNN1FVRkRNMElzWVVGQlNTeERRVUZETEVkQlFVY3NSMEZCUnl4WFFVRlhMRU5CUVVNc1IwRkJSeXhEUVVGRE8wRkJRek5DTEdGQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF6dEJRVU0zUWl4dlFrRkJWeXhEUVVGRExFVkJRVVVzUTBGQlF5eFJRVUZSTEVWQlFVTXNWVUZCUXl4RFFVRkRMRVZCUVVzN1FVRkROMElzYVVKQlFVc3NZVUZCWVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xVkJRM1pDTEVOQlFVTXNRMEZCUXp0QlFVTklMR0ZCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zVVVGQlVTeEZRVUZETEZWQlFVTXNRMEZCUXl4RlFVRkxPMEZCUTNSQ0xITkNRVUZYTEVOQlFVTXNTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJRenRWUVVOMlFpeERRVUZETEVOQlFVTTdRVUZEU0N4aFFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExGZEJRVmNzUTBGQlF5eExRVUZMTEVOQlFVTTdPenM3T3pzN096dFJRVk5vUXpzN1FVRkZSQ3hyUWtGQllUdGpRVUZCTEhWQ1FVRkRMRU5CUVVNc1JVRkJSVHRCUVVObUxHRkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRM1JDTEdGQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRSUVVObU96dEJRVlZITEZWQlFVczdPenM3T3pzN08xbEJTRUVzV1VGQlJ6dEJRVU5XTEdkQ1FVRlBMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETzFGQlF6RkNPMWxCUTFFc1ZVRkJReXhEUVVGRExFVkJRVVU3UVVGRFdDeGhRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU4wUWl4aFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1FVRkRMMElzWVVGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMUZCUTJZN08wRkJWVWNzVVVGQlJ6czdPenM3T3pzN1dVRklRU3haUVVGSE8wRkJRMUlzWjBKQlFVOHNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU03VVVGRGVFSTdXVUZEVFN4VlFVRkRMRU5CUVVNc1JVRkJSVHRCUVVOVUxHRkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOeVFqczdRVUZWUnl4UlFVRkhPenM3T3pzN096dFpRVWhCTEZsQlFVYzdRVUZEVWl4blFrRkJUeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXp0UlFVTjRRanRaUVVOTkxGVkJRVU1zUTBGQlF5eEZRVUZGTzBGQlExUXNZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEzSkNPenRCUVZWSExGTkJRVWs3T3pzN096czdPMWxCU0VFc1dVRkJSenRCUVVOVUxHZENRVUZQTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRE8xRkJRM3BDTzFsQlEwOHNWVUZCUXl4RFFVRkRMRVZCUVVVN1FVRkRWaXhoUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRkRUk3T3pzN1ZVRXZUbXRDTEUxQlFVMDdTVUZCVXl4VFFVRlRPenRyUWtGQmVFSXNUVUZCVFN4RE96czdPenM3UVVOMlF6TkNMR0ZCUVZrc1EwRkJRenM3T3pzN096czdPenRCUVVWaUxFdEJRVWtzVTBGQlV5eEhRVUZITEcxQ1FVRlBMRU5CUVVNc1EwRkJiVUlzUTBGQlF5eERRVUZET3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN08wdEJaME40UWl4TlFVRk5PMEZCUldRc1dVRkdVU3hOUVVGTkxFZEJSVmc3TWtKQlJrc3NUVUZCVFRzN1FVRkpka0lzVTBGQlNTeFBRVUZQTEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenM3UVVGRmVFSXNVMEZCU1N4UlFVRlJMRWRCUVVjN1FVRkRXaXhoUVVGUkxFTkJRVU1zUjBGQlJ5eEZRVUZETEVWQlFVVXNRMEZCUXp0QlFVTm9RaXhuUWtGQlZ5eERRVUZETEZOQlFWTXNSVUZCUXl4VFFVRlRMRU5CUVVNN1RVRkRiRU1zUTBGQlF6czdRVUZGUml4blEwRllhVUlzVFVGQlRTdzJRMEZYYWtJc1UwRkJVeXhGUVVGRExFOUJRVThzUlVGQlF5eFJRVUZSTEVWQlFVVTdPMEZCUld4RExGTkJRVWtzUTBGQlF5eGpRVUZqTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRla0lzVTBGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4TFFVRkxMRU5CUVVNN08wRkJSWEJDTEZOQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eFBRVUZQTEVOQlFVTTdPMEZCUlhSRExGTkJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0QlFVTmFMRk5CUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dEpRVVZtT3p0aFFYSkNhMElzVFVGQlRUczdaMEpCUVU0c1RVRkJUVHRCUVhWQ2VrSXNaVUZCVlR0alFVRkJMSE5DUVVGSE8wRkJRMWdzWVVGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4UlFVRlJMRU5CUVVNc1lVRkJZU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzBGQlEyaEVMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGRExFTkJRVU1zUjBGQlF5eEpRVUZKTEVOQlFVTTdRVUZEYWtRc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4SFFVRkhMRTFCUVUwc1EwRkJRenRCUVVOd1F5eGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhUUVVGVExFZEJRVWNzVFVGQlRTeERRVUZETzBGQlEzUkRMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGRExFbEJRVWtzUTBGQlF6dEJRVU16UXl4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJReXhKUVVGSkxFTkJRVU03TzBGQlJUZERMR0ZCUVVrc1EwRkJReXhYUVVGWExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03TzBGQlJURkRMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1VVRkJVU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZCUXpzN1FVRkZNVVFzWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFGQlJYWkRPenRCUVVWRUxHOUNRVUZsTzJOQlFVRXNNa0pCUVVjc1JVRkZha0k3TzBGQlJVUXNiVUpCUVdNN1kwRkJRU3d3UWtGQlJ6czdRVUZGWml4aFFVRkpMRU5CUVVNc1lVRkJZU3hGUVVGRkxFTkJRVU03VVVGRmRFSTdPMEZCUlVRc2JVSkJRV003WTBGQlFTd3dRa0ZCUnp0QlFVTm1MR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEdWQlFXVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF6dEJRVU4wUkN4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU03UVVGRE5VTXNZVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeEhRVUZITEZsQlFWa3NSMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGZEJRVmNzUTBGQlF6dFJRVU5zUlRzN1FVRkZSQ3hYUVVGTk8yTkJRVUVzYTBKQlFVYzdPMEZCUlZBc1lVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEdGQlFXRXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenRCUVVOd1JTeGhRVUZKTEVOQlFVTXNZMEZCWXl4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zWVVGQllTeERRVUZETzBGQlEycEVMR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZETzBGQlEycENMR2RDUVVGTExFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMDdRVUZEYkVJc1owSkJRVXNzUlVGQlJTeEpRVUZKTEVOQlFVTXNZMEZCWXp0VlFVTXpRaXhEUVVGRExFTkJRVU03VVVGRlNqczdRVUZGUkN4VlFVRkxPMk5CUVVFc2FVSkJRVWNzUlVGRlVEczdRVUZGUkN4VFFVRkpPMk5CUVVFc1owSkJRVWNzUlVGRlRqczdRVUZGUkN4WlFVRlBPMk5CUVVFc2JVSkJRVWNzUlVGRlZEczdRVUZQUkN4clFrRkJZVHM3T3pzN096dGpRVUZCTEhWQ1FVRkRMRTlCUVU4c1JVRkJSVHM3T3pzN096czdPenM3T3p0QlFXTnlRaXhoUVVGSkxFOUJRVThzUlVGQlJUdEJRVU5ZTEdWQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1QwRkJUeXhEUVVGRE8xVkJRM3BDT3p0QlFVVkVMR05CUVVrc1NVRkJTU3hEUVVGRExFZEJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hIUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8wRkJRM0JFTEdWQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFWQlEzaENPenRCUVVWRUxHTkJRVWtzU1VGQlNTeERRVUZETEVkQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNSVUZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSVHRCUVVOMFF5eGxRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMVZCUXpORU8xRkJSVVk3TzBGQlYwY3NWVUZCU3pzN096czdPenM3V1VGSVFTeFpRVUZITzBGQlExWXNaMEpCUVU4c1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF6dFJRVU53UWp0WlFVTlJMRlZCUVVNc1EwRkJReXhGUVVGRk8wRkJRMWdzWVVGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNN1FVRkRhRUlzWTBGQlNTeEpRVUZKTEVOQlFVTXNSMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhIUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1JVRkJReXhEUVVGRExFVkJRVVVzUlVGQlJUdEJRVU0zUXl4bFFVRkpMRU5CUVVNc1MwRkJTeXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFVkJRVVU3UVVGRGRFTXNhVUpCUVVrc1EwRkJReXhoUVVGaExFZEJRVWNzUTBGQlF5eERRVUZETzBGQlEzWkNMRzFDUVVGTk8xbEJRMUE3VlVGRFJqdFJRVU5HT3p0QlFWZEhMR3RDUVVGaE96czdPenM3T3p0WlFVaEJMRmxCUVVjN1FVRkRiRUlzWjBKQlFVOHNTVUZCU1N4RFFVRkRMR05CUVdNc1EwRkJRenRSUVVNMVFqdFpRVU5uUWl4VlFVRkRMRU5CUVVNc1JVRkJSVHRCUVVOdVFpeGhRVUZKTEVOQlFVTXNZMEZCWXl4SFFVRkhMRU5CUVVNc1EwRkJRenRCUVVONFFpeGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMR0ZCUVdFc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGREwwSXNZVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8xRkJRMlk3TzBGQlJVUXNhMEpCUVdFN1kwRkJRU3g1UWtGQlJ6dEJRVU5rTEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc2JVSkJRVzFDTEVOQlFVTXNVVUZCVVN4RlFVRkZMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF6dFJRVU01UkRzN096dFZRVzVLYTBJc1RVRkJUVHRKUVVGVExGTkJRVk03TzJ0Q1FVRjRRaXhOUVVGTkxFTTdPenM3T3p0QlEyeERNMElzWVVGQldTeERRVUZET3pzN096czdPenM3T3pzN1FVRkZZaXhMUVVGSkxFZEJRVWNzUjBGQlJ5eHRRa0ZCVHl4RFFVRkRMRU5CUVdFc1EwRkJReXhEUVVGRE8wRkJRMnBETEV0QlFVa3NTVUZCU1N4SFFVRkhMRzFDUVVGUExFTkJRVU1zUTBGQll5eERRVUZETEVOQlFVTTdRVUZEYmtNc1MwRkJTU3hUUVVGVExFZEJRVWNzYlVKQlFVOHNRMEZCUXl4RFFVRnRRaXhEUVVGRExFTkJRVU03UVVGRE4wTXNTMEZCU1N4SlFVRkpMRWRCUVVjc2JVSkJRVThzUTBGQlF5eEZRVUZuUWl4RFFVRkRMRU5CUVVNN08wdEJRM3BDTEZkQlFWY3NLME5CUVUwc1JVRkJjVUk3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN1MwRjNRemRDTEVsQlFVazdRVUZGV2l4WlFVWlJMRWxCUVVrc1IwRkZWRHN5UWtGR1N5eEpRVUZKT3p0QlFVbHlRaXhUUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEV0QlFVc3NSVUZCUXl4TFFVRkxMRVZCUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03TzBGQlJYQkRMRk5CUVVrc1VVRkJVU3hIUVVGSE8wRkJRMklzWVVGQlVTeERRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRU5CUVVNN1FVRkRaaXh2UWtGQlpTeFJRVUZSTzBGQlEzWkNMR0ZCUVZFc1ZVRkJWVHRCUVVOc1FpeFpRVUZQTEVOQlFVTTdRVUZEVWl4WlFVRlBMRU5CUVVNN1FVRkRVaXhoUVVGUkxFTkJRVU03UVVGRFZDeGpRVUZUTEVOQlFVTTdUVUZEV0N4RFFVRkRPenRCUVVWR0xHZERRV2hDYVVJc1NVRkJTU3cyUTBGblFtWXNVMEZCVXl4RlFVRkRMRTlCUVU4c1JVRkJReXhSUVVGUkxFVkJRVVU3TzBGQlJXeERMRk5CUVVrc1EwRkJReXhYUVVGWExFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4WFFVRlhMRU5CUVVNN08wRkJSVGRETEZOQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1NVRkJTU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRVZCUVVVc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eEhRVUZITEVWQlFVVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFVkJRVVVzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenM3UVVGRmRFY3NVMEZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhKUVVGSkxGZEJRVmNzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFVkJRVU1zU1VGQlNTeERRVUZETEZkQlFWY3NSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdPMEZCUlROSExGTkJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXpzN1FVRkZXaXhUUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRE96dEJRVVV2UWl4VFFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRlZCUVZVc1EwRkJRenM3UVVGRk4wTXNVMEZCU1N4RFFVRkRMR0ZCUVdFc1IwRkJSeXhMUVVGTExFTkJRVU03TzBGQlJUTkNMRk5CUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRKUVVWb1F6czdZVUZzUTJ0Q0xFbEJRVWs3TzJkQ1FVRktMRWxCUVVrN1FVRnZRM1pDTEcxQ1FVRmpPMk5CUVVFc01FSkJRVWM3TzBGQlJXWXNZVUZCU1N4RFFVRkRMRlZCUVZVc1IwRkJSeXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMEZCUTNaRExHRkJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dEJRVU5zUXl4aFFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1FVRkRha01zWVVGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBGQlEyeERMR0ZCUVVrc1EwRkJReXhWUVVGVkxFZEJRVWNzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVOeVF5eGhRVUZKTEVOQlFVTXNWMEZCVnl4SFFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZEZEVNc1lVRkJTU3hEUVVGRExGVkJRVlVzUjBGQlJ5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE96dEJRVVZ5UXl4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNN1FVRkRNVU1zWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBGQlEzUkRMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRCUVVOMlF5eGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTTdRVUZETVVNc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRE8wRkJRek5ETEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXp0QlFVTXhReXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRmRFTTdPMEZCUjBRc2EwSkJRV0U3WTBGQlFTeDVRa0ZCUnpzN1FVRkZaQ3hoUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdPMEZCUlhKRUxHRkJRVWtzVFVGQlRTeEhRVUZITzBGQlExZ3NXVUZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVU1zUTBGQlF6dEJRVU5tTEZsQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGRExFTkJRVU03VlVGRGFrSXNRMEZCUXpzN1FVRkZSaXhoUVVGSkxGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPenRCUVVWb1JDeGhRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpkRExHRkJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZETjBNc1lVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RlFVRkZMRkZCUVZFc1IwRkJReXhEUVVGRExFZEJRVU1zVVVGQlVTeEhRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPenRCUVVVeFJDeGhRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTNoRExHRkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEZUVNc1lVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RlFVRkZMRkZCUVZFc1IwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6czdRVUZGTVVNc1lVRkJTU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXpzN1FVRkZka0lzWVVGQlNTeFpRVUZaTEVkQlFVYzdRVUZEYWtJc1owSkJRVXNzUlVGQlJTeEpRVUZKTEVOQlFVTXNSVUZCUlN4SFFVRkRMRWRCUVVjN1FVRkRiRUlzWTBGQlJ5eEZRVUZGTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVWQlFVTXNRMEZCUXl4RlFVRkRMRWRCUVVjc1JVRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeEhRVUZETEVkQlFVY3NSVUZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hIUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZITEVsQlFVa3NRMEZCUXl4RlFVRkZMRWRCUVVNc1IwRkJSeXhGUVVGRkxFbEJRVWtzUTBGQlF5eEZRVUZGTEVkQlFVTXNSMEZCUnl4RFFVRkZPMVZCUXpkR0xFTkJRVU03UVVGRFJpeGhRVUZKTEdGQlFXRXNSMEZCUnp0QlFVTnNRaXhuUWtGQlN5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RlFVRkZMRWRCUVVNc1IwRkJSenRCUVVOc1FpeGpRVUZITEVWQlFVVXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJSU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSVUZCUXl4SFFVRkhMRVZCUVVNc1EwRkJReXhGUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVkQlFVTXNSMEZCUnl4RlFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFZEJRVU1zUjBGQlJ5eERRVUZETEVWQlFVY3NTVUZCU1N4RFFVRkRMRVZCUVVVc1IwRkJReXhIUVVGSExFVkJRVVVzU1VGQlNTeERRVUZETEVWQlFVVXNSMEZCUXl4SFFVRkhMRU5CUVVVN1ZVRkROMFlzUTBGQlF6czdRVUZGUml4aFFVRkpMRlZCUVZVc1IwRkJSeXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU1zUlVGQlJTeFJRVUZSTEVkQlFVTXNRMEZCUXl4SFFVRkRMRkZCUVZFc1IwRkJReXhGUVVGRkxFVkJRVVVzV1VGQldTeERRVUZETEV0QlFVc3NSVUZCUlN4WlFVRlpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRE0wY3NZVUZCU1N4WFFVRlhMRWRCUVVjc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RlFVRkZMRTFCUVUwc1EwRkJReXhEUVVGRExFVkJRVVVzVVVGQlVTeEhRVUZETEVOQlFVTXNSMEZCUXl4UlFVRlJMRWRCUVVNc1JVRkJSU3hGUVVGRkxHRkJRV0VzUTBGQlF5eExRVUZMTEVWQlFVVXNZVUZCWVN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE96dEJRVVU1Unl4aFFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZITEVWQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNN1FVRkRla01zWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4WlFVRlpMRU5CUVVNc1kwRkJZeXhGUVVGRkxGRkJRVkVzUjBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0QlFVTjBSQ3hoUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZsQlFWa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03TzBGQlJYcERMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NSVUZCUXl4WFFVRlhMRU5CUVVNc1EwRkJRenRCUVVNelF5eGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmxCUVZrc1EwRkJReXhqUVVGakxFVkJRVVVzVVVGQlVTeEhRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMEZCUTNaRUxHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF6czdRVUZGTVVNc2JVSkJRVlVzU1VGQlNTeExRVUZMTEVkQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1IwRkJReXhIUVVGSExFZEJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXpzN1FVRkZNVU1zWVVGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4WlFVRlpMRU5CUVVNc1IwRkJSeXhGUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzBGQlF6ZERMR0ZCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zV1VGQldTeERRVUZETEdOQlFXTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenM3UVVGRmNFUXNiMEpCUVZjc1NVRkJTU3hMUVVGTExFZEJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNSMEZCUXl4SFFVRkhMRWRCUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF6czdRVUZGTTBNc1lVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RlFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRE8wRkJReTlETEdGQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1dVRkJXU3hEUVVGRExHTkJRV01zUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXpzN1FVRkZja1FzWVVGQlNTeFZRVUZWTEdGQlFVTTdRVUZEWml4aFFVRkpMRXRCUVVzc1IwRkJSeXhIUVVGSExFVkJRVVU3UVVGRFppeHhRa0ZCVlN4SFFVRkhMRmxCUVZrc1EwRkJReXhIUVVGSExFTkJRVU03VlVGREwwSXNUVUZCVFR0QlFVTk1MSEZDUVVGVkxFZEJRVWNzWVVGQllTeERRVUZETEVkQlFVY3NRMEZCUXp0VlFVTm9RenM3UVVGRlJDeGhRVUZKTEZWQlFWVXNSMEZCUnl4TlFVRk5MRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNWVUZCVlN4RFFVRkRMRWxCUVVrc1VVRkJVU3hIUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEyaEZMR0ZCUVVrc1ZVRkJWU3hIUVVGSExFMUJRVTBzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhWUVVGVkxFTkJRVU1zU1VGQlNTeFJRVUZSTEVkQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03TzBGQlJYSkZMR0ZCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NSVUZCUXl4SlFVRkpMRWRCUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlF5eEhRVUZITEVkQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1IwRkJReXhMUVVGTExFZEJRVU1zVlVGQlZTeEhRVUZETEVkQlFVY3NSMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJRenRCUVVNM1JpeGhRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRmxCUVZrc1EwRkJReXhqUVVGakxFVkJRVVVzVVVGQlVTeEhRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUlRORU96dEJRVVZFTEcxQ1FVRmpPMk5CUVVFc01FSkJRVWM3UVVGRFppeGhRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRmxCUVZrc1EwRkJReXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRCUVVOMlJDeGhRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmxCUVZrc1EwRkJReXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVOd1JDeGhRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRmxCUVZrc1EwRkJReXhSUVVGUkxFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVOMlJDeGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmxCUVZrc1EwRkJReXhSUVVGUkxFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVONFJDeGhRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRmxCUVZrc1EwRkJReXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVONlJDeGhRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRmxCUVZrc1EwRkJReXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVNeFJDeGhRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRmxCUVZrc1EwRkJReXhSUVVGUkxFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVVMVJEczdRVUZGUkN4WFFVRk5PMk5CUVVFc2EwSkJRVWM3UVVGRFVDeGhRVUZKTEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF6czdRVUZGYmtNc1lVRkJTU3hOUVVGTkxFZEJRVWM3UVVGRFdDeFpRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJReXhEUVVGRE8wRkJRMllzV1VGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVNc1EwRkJRenRWUVVOcVFpeERRVUZET3p0QlFVVkdMR0ZCUVVrc1VVRkJVU3hIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdPMEZCUldoRUxHRkJRVWtzV1VGQldTeEhRVUZITzBGQlEycENMR2RDUVVGTExFVkJRVVVzU1VGQlNTeERRVUZETEVWQlFVVXNSMEZCUXl4SFFVRkhPMEZCUTJ4Q0xHTkJRVWNzUlVGQlJTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eEZRVUZETEVOQlFVTXNSVUZCUXl4SFFVRkhMRVZCUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUjBGQlF5eEhRVUZITEVWQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1IwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJ5eEpRVUZKTEVOQlFVTXNSVUZCUlN4SFFVRkRMRWRCUVVjc1JVRkJSU3hKUVVGSkxFTkJRVU1zUlVGQlJTeEhRVUZETEVkQlFVY3NRMEZCUlR0VlFVTTNSaXhEUVVGRE8wRkJRMFlzWVVGQlNTeGhRVUZoTEVkQlFVYzdRVUZEYkVJc1owSkJRVXNzUlVGQlJTeEpRVUZKTEVOQlFVTXNSVUZCUlN4SFFVRkZMRWRCUVVjN1FVRkRia0lzWTBGQlJ5eEZRVUZGTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVWQlFVTXNSMEZCUnl4RlFVRkRMRU5CUVVNc1JVRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeEhRVUZETEVkQlFVY3NSVUZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hIUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZITEVsQlFVa3NRMEZCUXl4RlFVRkZMRWRCUVVNc1IwRkJSeXhGUVVGRkxFbEJRVWtzUTBGQlF5eEZRVUZGTEVkQlFVTXNSMEZCUnl4RFFVRkZPMVZCUXpkR0xFTkJRVU03TzBGQlJVWXNZVUZCU1N4VlFVRlZMRWRCUVVjc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RlFVRkZMRTFCUVUwc1EwRkJReXhEUVVGRExFVkJRVVVzVVVGQlVTeEhRVUZETEVOQlFVTXNSMEZCUXl4UlFVRlJMRWRCUVVNc1JVRkJSU3hGUVVGRkxGbEJRVmtzUTBGQlF5eExRVUZMTEVWQlFVVXNXVUZCV1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRek5ITEdGQlFVa3NWMEZCVnl4SFFVRkhMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJReXhGUVVGRkxGRkJRVkVzUjBGQlF5eERRVUZETEVkQlFVTXNVVUZCVVN4SFFVRkRMRVZCUVVVc1JVRkJSU3hoUVVGaExFTkJRVU1zUzBGQlN5eEZRVUZGTEdGQlFXRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenM3UVVGRk9VY3NZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eEZRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRPMEZCUTNwRExHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVVjc1JVRkJReXhYUVVGWExFTkJRVU1zUTBGQlF6czdRVUZITTBNc2JVSkJRVlVzU1VGQlNTeExRVUZMTEVkQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1IwRkJReXhIUVVGSExFZEJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXpzN1FVRkZNVU1zWVVGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4WlFVRlpMRU5CUVVNc1IwRkJSeXhGUVVGRExGVkJRVlVzUTBGQlF5eERRVUZET3p0QlFVVTNReXh2UWtGQlZ5eEpRVUZKTEV0QlFVc3NSMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhIUVVGRExFZEJRVWNzUjBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRPenRCUVVVelF5eGhRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGSExFVkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdPMEZCUlM5RExHRkJRVWtzVlVGQlZTeGhRVUZETzBGQlEyWXNZVUZCU1N4TFFVRkxMRWxCUVVrc1IwRkJSeXhGUVVGRk8wRkJRMmhDTEhGQ1FVRlZMRWRCUVVjc1dVRkJXU3hEUVVGRExFZEJRVWNzUTBGQlF6dFZRVU12UWl4TlFVRk5PMEZCUTB3c2NVSkJRVlVzUjBGQlJ5eGhRVUZoTEVOQlFVTXNSMEZCUnl4RFFVRkRPMVZCUTJoRE96dEJRVVZFTEdGQlFVa3NWVUZCVlN4SFFVRkhMRTFCUVUwc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4VlFVRlZMRU5CUVVNc1NVRkJTU3hSUVVGUkxFZEJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEYUVVc1lVRkJTU3hWUVVGVkxFZEJRVWNzVFVGQlRTeERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGVkJRVlVzUTBGQlF5eEpRVUZKTEZGQlFWRXNSMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6czdRVUZGY2tVc1lVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RlFVRkRMRWxCUVVrc1IwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEhRVUZETEVkQlFVY3NSMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhIUVVGRExFdEJRVXNzUjBGQlF5eFZRVUZWTEVkQlFVTXNSMEZCUnl4SFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRE8xRkJSVGxHT3p0QlFVZEVMRlZCUVVzN1kwRkJRU3hwUWtGQlJ6dEJRVU5PTEdGQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVrc1MwRkJSeXhWUVVGVkxFVkJRVVU3UVVGRE1VSXNaVUZCU1N4RFFVRkRMR0ZCUVdFc1IwRkJSeXhMUVVGTExFTkJRVU03VlVGRE5VSTdRVUZEUkN4aFFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUTJ4RExHRkJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVlVGQlZTeERRVUZETzBGQlF6ZERMR0ZCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dFJRVU5hT3p0QlFVVkdMRk5CUVVrN1kwRkJRU3huUWtGQlJ6dEJRVU5NTEdGQlFVa3NTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSVHM3UVVGRmFFSXNaVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPenRCUVVWcVF5eGxRVUZKTEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUjBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1EwRkJRenM3UVVGRk1VTXNaVUZCU1N4TFFVRkxMRWRCUVVjc1EwRkJReXhGUVVGSE8wRkJRVVVzYTBKQlFVc3NTVUZCU3l4SlFVRkpMRU5CUVVNc1JVRkJSU3hIUVVGRExFTkJRVVVzUTBGQlF6dFpRVUZGT3p0QlFVVjZReXhsUVVGSkxFbEJRVWtzUTBGQlF5eEpRVUZKTEV0QlFVc3NWVUZCVlN4RlFVRkZPMEZCUXpWQ0xHbENRVUZKTEVsQlFVa3NRMEZCUXl4aFFVRmhMRXRCUVVzc1MwRkJTeXhKUVVGSkxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1IwRkJSeXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVTdRVUZETlVVc2JVSkJRVWtzU1VGQlNTeERRVUZETEdGQlFXRXNSMEZCUnl4RFFVRkRMRVZCUVVVN1FVRkRNVUlzYzBKQlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1JVRkJSU3hIUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZEYmtJc1RVRkJUVHRCUVVOTUxITkNRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRPMmRDUVVOWU8yTkJRMFk3V1VGRFJqczdPenM3T3pzN08wRkJVMFFzWlVGQlNTeERRVUZETEdGQlFXRXNSMEZCUnl4TFFVRkxMRU5CUVVNN08wRkJSVE5DTEdWQlFVa3NVMEZCVXl4SFFVRkhMRXRCUVVzc1NVRkJTU3hKUVVGSkxFTkJRVU1zUlVGQlJTeEhRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPenRCUVVWd1F5eGxRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zV1VGQldTeERRVUZGTEZOQlFWTXNRMEZCUlN4RFFVRkRPenRCUVVWdVJDeGxRVUZKTEVsQlFVa3NRMEZCUXl4SlFVRkpMRXRCUVVzc1ZVRkJWU3hGUVVGRk8wRkJRelZDTEdsQ1FVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUjBGQlJ5eFRRVUZUTEVOQlFVTTdXVUZEYWtNN08wRkJSVVFzWlVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXpzN1FVRkZkRU1zWlVGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMVZCUldZN1VVRkRSanM3UVVGRlJDeFpRVUZQTzJOQlFVRXNiVUpCUVVjc1JVRkRWRHM3UVVFd1Frc3NWVUZCU3pzN096czdPenM3T3pzN096czdPenM3T3pzN096dFpRVWhCTEZsQlFVYzdRVUZEVml4blFrRkJUeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXp0UlFVTXhRanRaUVVOUkxGVkJRVU1zUTBGQlF5eEZRVUZGTzBGQlExZ3NZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEZEVJc1lVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhWUVVGVkxFTkJRVU03UVVGRE4wTXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVOMFF5eGhRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1VVRkRaanM3UVVGVlJ5eFJRVUZIT3pzN096czdPenRaUVVoQkxGbEJRVWM3UVVGRFVpeG5Ra0ZCVHl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF6dFJRVU40UWp0WlFVTk5MRlZCUVVNc1EwRkJReXhGUVVGRk8wRkJRMVFzWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRM0pDT3p0QlFWVkhMRkZCUVVjN096czdPenM3TzFsQlNFRXNXVUZCUnp0QlFVTlNMR2RDUVVGUExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRPMUZCUTNoQ08xbEJRMDBzVlVGQlF5eERRVUZETEVWQlFVVTdRVUZEVkN4aFFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEY2tJN08wRkJWVWNzVTBGQlNUczdPenM3T3pzN1dVRklRU3haUVVGSE8wRkJRMVFzWjBKQlFVOHNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU03VVVGRGVrSTdXVUZEVHl4VlFVRkRMRU5CUVVNc1JVRkJSVHRCUVVOV0xHRkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOMFFqczdRVUZWUnl4VFFVRkpPenM3T3pzN096dFpRVWhCTEZsQlFVYzdRVUZEVkN4blFrRkJUeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXp0UlFVTXpRanRaUVVOUExGVkJRVU1zUTBGQlF5eEZRVUZGTzBGQlExWXNZVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEzaENPenRCUVZsRExHVkJRVlU3T3pzN096czdPMWxCU2tFc1dVRkJSenRCUVVObUxHZENRVUZQTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRE8xRkJReTlDTzFsQlJXRXNWVUZCUXl4RFFVRkRMRVZCUVVVN1FVRkRhRUlzWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRE5VSXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMUZCUTJoRE96czdPMVZCTVZWclFpeEpRVUZKTzBsQlFWTXNVMEZCVXpzN2EwSkJRWFJDTEVsQlFVa3NRenM3T3pzN08wRkRPVU42UWl4aFFVRlpMRU5CUVVNN096czdPenM3T3pzN1FVRkZZaXhMUVVGSkxFZEJRVWNzUjBGQlJ5eHRRa0ZCVHl4RFFVRkRMRU5CUVdFc1EwRkJReXhEUVVGRE8wRkJRMnBETEV0QlFVa3NVMEZCVXl4SFFVRkhMRzFDUVVGUExFTkJRVU1zUTBGQmJVSXNRMEZCUXl4RFFVRkRPMEZCUXpkRExFdEJRVWtzWTBGQll5eEhRVUZITEcxQ1FVRlBMRU5CUVVNc1JVRkJPRUlzUTBGQlF5eERRVUZETzBGQlF6ZEVMRXRCUVVrc1MwRkJTeXhIUVVGSExHMUNRVUZQTEVOQlFVTXNRMEZCWlN4RFFVRkRMRU5CUVVNN08wdEJSUzlDTEZGQlFWRTdRVUZGUkN4WlFVWlFMRkZCUVZFc1IwRkZSVHN5UWtGR1ZpeFJRVUZST3p0QlFVbFdMRk5CUVVrc1QwRkJUeXhIUVVGSExFTkJRVU1zVDBGQlR5eEZRVUZETEUxQlFVMHNSVUZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenM3UVVGRmRrTXNVMEZCU1N4UlFVRlJMRWRCUVVjN1FVRkRZaXhoUVVGUkxFTkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNRMEZCUXp0QlFVTm1MR1ZCUVZVc1MwRkJTenRCUVVObUxHRkJRVkVzVVVGQlVUdEJRVU5vUWl4alFVRlRMRU5CUVVNN1RVRkRXQ3hEUVVGRE96dEJRVVZHTEdkRFFXSkZMRkZCUVZFc05rTkJZVW9zVTBGQlV5eEZRVUZETEU5QlFVOHNSVUZCUXl4UlFVRlJMRVZCUVVVN08wRkJSV3hETEZOQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTTdRVUZETDBJc1UwRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJRenM3UVVGRmFrTXNVMEZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSenRCUVVOYUxGVkJRVXNzVFVGQlRUdEJRVU5ZTEZWQlFVc3NUVUZCVFN4RlFVTmFMRU5CUVVNN08wRkJSVVlzVTBGQlNTeERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMEZCUTFvc1UwRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzBsQlJXWTdPMkZCTVVKSExGRkJRVkU3TzJkQ1FVRlNMRkZCUVZFN1FVRTBRbG9zWlVGQlZUdGpRVUZCTEhOQ1FVRkhPMEZCUTFnc1lVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRMnBETEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hEUVVGRExFOUJRVThzUlVGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1FVRkRPVU1zWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1VVRkJVU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTm9SQ3hoUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03VVVGRGRrTTdPMEZCUlVRc2JVSkJRV003WTBGQlFTd3dRa0ZCUnpzN08wRkJSV1lzWVVGQlNTeERRVUZETEVkQlFVY3NSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZET3p0QlFVVTVRaXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03TzBGQlJXNURMR0ZCUVVrc1EwRkJReXhwUWtGQmFVSXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRE96czdPMEZCU1d4RExHRkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RlFVRkZPenRCUVVWcVFpeGxRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRmxCUVUwN08wRkJSV3BDTEcxQ1FVRkxMRXRCUVVzc1EwRkJReXhYUVVGWExFZEJRVWNzU1VGQlNTeERRVUZETzBGQlF6bENMRzFDUVVGTExFdEJRVXNzUTBGQlF5eFZRVUZWTEVkQlFVY3NRMEZCUXl4TlFVRkxMRXRCUVVzc1EwRkJRenRCUVVOd1F5eHRRa0ZCU3l4SlFVRkpMRU5CUVVNc1RVRkJTeXhMUVVGTExFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTTdXVUZEYkVNc1EwRkJRenM3UVVGRlJpeGxRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMR2RDUVVGblFpeERRVUZETEZkQlFWY3NSVUZCUlN4WlFVRk5PMEZCUXpORExHbENRVUZKTEUxQlFVc3NTMEZCU3l4RFFVRkRMRmRCUVZjc1JVRkJSVHM3UVVGRk1VSXNjVUpCUVVzc1NVRkJTU3hEUVVGRExFMUJRVXNzUzBGQlN5eERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRPMk5CUTJ4RE8xbEJRMFlzUTBGQlF5eERRVUZET3p0QlFVZElMR1ZCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzV1VGQlRUdEJRVU5vUWl4cFFrRkJTU3hOUVVGTExFdEJRVXNzUTBGQlF5eFhRVUZYTEVWQlFVVTdPMEZCUlRGQ0xIRkNRVUZMTEVsQlFVa3NSVUZCUlN4RFFVRkRPMk5CUTJJN1dVRkRSaXhEUVVGRE96dEJRVWRHTEdWQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1dVRkJUVHRCUVVOdVFpeHRRa0ZCU3l4TFFVRkxMRU5CUVVNc1YwRkJWeXhIUVVGSExFdEJRVXNzUTBGQlF6czdPMWxCUjJoRExFTkJRVU03UVVGRFJpeGxRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMR2RDUVVGblFpeERRVUZETEZOQlFWTXNSVUZCUlN4WlFVRk5PMEZCUTNwRExHbENRVUZKTEUxQlFVc3NTMEZCU3l4RFFVRkRMRmRCUVZjc1JVRkJSVHM3UVVGRk1VSXNjVUpCUVVzc1JVRkJSU3hGUVVGRkxFTkJRVU03WTBGRFdEdFpRVU5HTEVOQlFVTXNRMEZCUXp0QlFVTklMR1ZCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1ZVRkJWU3hGUVVGRkxGbEJRVTA3UVVGRE1VTXNhVUpCUVVrc1RVRkJTeXhMUVVGTExFTkJRVU1zVjBGQlZ5eEZRVUZGT3p0QlFVVXhRaXh4UWtGQlN5eEZRVUZGTEVWQlFVVXNRMEZCUXp0alFVTllPMWxCUTBZc1EwRkJReXhEUVVGRE8xVkJSVW83VVVGRlJqczdRVUZGUkN4clFrRkJZVHRqUVVGQkxIbENRVUZIT3pzN1FVRkhWaXhoUVVGSkxFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTTdPMEZCUldZc1lVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RlFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJReTlDTEdGQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFZEJRVWNzUlVGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0QlFVTXZRaXhoUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NRMEZCUXl4RlFVRkZPMEZCUTJ4Q0xHVkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hKUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMVZCUTJoRUxFMUJRVTA3UVVGRFRDeGxRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhQUVVGUExFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMVZCUXpWRE8wRkJRMFFzWVVGQlNTeEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1JVRkJSVHRCUVVOdVFpeGxRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhSUVVGUkxFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMVZCUXpsRExFMUJRVTA3UVVGRFRDeGxRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhSUVVGUkxFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMVZCUXpsRE8wRkJRMFFzWVVGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETzBGQlEzQkRMR0ZCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zV1VGQldTeERRVUZETEVsQlFVa3NSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVWNlF6czdRVUZGUkN4WFFVRk5PMk5CUVVFc2EwSkJRVWM3UVVGRFVDeGhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1JVRkJSVHRCUVVObUxHVkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRE8xVkJRM2hFTEUxQlFVMDdRVUZEVEN4bFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eE5RVUZOTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFZRVU51UkR0UlFVTkdPenM3TzFWQmVFaEhMRkZCUVZFN1NVRkJVeXhqUVVGak96czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenRMUVRCS2FFSXNTMEZCU3p0QlFVVmlMRmxCUmxFc1MwRkJTeXhIUVVWV096SkNRVVpMTEV0QlFVczdPMEZCU1hSQ0xGTkJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN08wRkJSWGhDTEZOQlFVa3NVVUZCVVN4SFFVRkhPMEZCUTJJc1lVRkJVU3hEUVVGRExFZEJRVWNzUlVGQlF5eEhRVUZITEVOQlFVTTdRVUZEYWtJc1owSkJRVmNzUlVGQlJUdEJRVU5pTEdsQ1FVRlpMRVZCUVVVN1FVRkRaQ3hoUVVGUkxGRkJRVkU3VFVGRGFrSXNRMEZCUXpzN1FVRkZSaXhuUTBGaWFVSXNTMEZCU3l3MlEwRmhhRUlzVTBGQlV5eEZRVUZETEU5QlFVOHNSVUZCUXl4UlFVRlJMRVZCUVVVN08wRkJSV3hETEZOQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1EwRkJReXhIUVVGSExFVkJRVU1zUjBGQlJ5eEZRVUZETEVkQlFVY3NSVUZCUXl4SFFVRkhMRVZCUVVNc1IwRkJSeXhGUVVGRExFZEJRVWNzUlVGQlF5eEhRVUZITEVWQlFVTXNSMEZCUnl4RlFVRkRMRWRCUVVjc1JVRkJReXhIUVVGSExFVkJRVU1zUjBGQlJ5eEZRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPenRCUVVWd1JTeFRRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMRXRCUVVzc1EwRkJRenM3UVVGRmVFSXNVMEZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXpzN1FVRkZMMElzVTBGQlNTeERRVUZETEV0QlFVc3NSMEZCUnp0QlFVTllMRlZCUVVjc1JVRkJSU3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEU5QlFVODdRVUZETVVJc1YwRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNVVUZCVVR0TlFVTTNRaXhEUVVGRE96dEJRVVZHTEZOQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZET3p0QlFVVnVSQ3hUUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVWQlFVVXNRMEZCUXpzN1FVRkZaaXhUUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEV0QlFVc3NRMEZCUXpzN1FVRkZkRUlzVTBGQlNTeERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMEZCUTFvc1UwRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzBsQlJXWTdPMkZCYmtOclFpeExRVUZMT3p0blFrRkJUQ3hMUVVGTE8wRkJjVU40UWl4bFFVRlZPMk5CUVVFc2MwSkJRVWM3UVVGRFdDeGhRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRkZCUVZFc1EwRkJReXhoUVVGaExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZETjBNc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4SFFVRkhMRlZCUVZVc1EwRkJRenRCUVVONlF5eGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhaUVVGWkxFZEJRVWNzUzBGQlN5eERRVUZETzBGQlEzaERMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNSMEZCUnl4UFFVRlBMRU5CUVVNN1FVRkRja01zWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhIUVVGSExFMUJRVTBzUTBGQlF6dEJRVU5zUXl4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVkQlFVY3NUVUZCVFN4RFFVRkRPMEZCUTI1RExHRkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dFJRVU4yUXpzN1FVRkZSQ3h0UWtGQll6dGpRVUZCTERCQ1FVRkhPenRCUVVWbUxHRkJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NSVUZCUlN4RFFVRkRPenRCUVVWbUxHTkJRVXNzU1VGQlNTeERRVUZETEVkQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUlVGQlF5eERRVUZETEVWQlFVVXNSVUZCUlRzN1FVRkZia1FzWlVGQlNTeFRRVUZUTEVkQlFVY3NVVUZCVVN4RFFVRkRMR0ZCUVdFc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU12UXl4bFFVRkpMRlZCUVZVc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1NVRkJTU3hKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEUxQlFVMHNRMEZCUXpzN1FVRkZOMFFzWlVGQlNTeEhRVUZITEVkQlFVY3NTVUZCU1N4UlFVRlJMRU5CUVVNc1UwRkJVeXhGUVVGRk8wRkJRemxDTEhOQ1FVRlRMRVZCUVVVc1NVRkJTVHRCUVVObUxHbENRVUZKTEVWQlFVVXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ6dEJRVU4wUWl4clFrRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNWVUZCVlN4RFFVRkRPMEZCUTJ4RExHbENRVUZKTEVWQlFVVXNTVUZCU1N4RFFVRkRMRWxCUVVrN1dVRkRhRUlzUlVGQlJTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVU1zUTBGQlF5eEhRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6czdRVUZGYWtRc1kwRkJSeXhEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTTdPMEZCUldwQ0xHVkJRVWtzUzBGQlN5eERRVUZETEUxQlFVMHNSVUZCUlR0QlFVTm9RaXhuUWtGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRMnhDTEdkQ1FVRkhMRU5CUVVNc1VVRkJVU3hIUVVGSExFZEJRVWNzUTBGQlF5eFBRVUZQTEVkQlFVY3NSMEZCUnl4RFFVRkRMRlZCUVZVc1IwRkJSeXhaUVVGTkxFVkJRVVVzUTBGQlF6dEJRVU4yUkN4blFrRkJSeXhEUVVGRExFdEJRVXNzUjBGQlJ5eEhRVUZITEVOQlFVTXNTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhQUVVGUExFZEJRVWNzV1VGQlRTeEZRVUZGTEVOQlFVTTdRVUZET1VNc1owSkJRVWNzUTBGQlF5eFJRVUZSTEVkQlFVY3NSMEZCUnl4RFFVRkRMRmxCUVZrc1IwRkJSeXhIUVVGSExFTkJRVU1zWlVGQlpTeEhRVUZITEZsQlFVMHNSVUZCUlN4RFFVRkRPMEZCUTJwRkxHZENRVUZITEVOQlFVTXNTMEZCU3l4SFFVRkhMRWRCUVVjc1EwRkJReXhUUVVGVExFZEJRVWNzUjBGQlJ5eERRVUZETEZsQlFWa3NSMEZCUnl4WlFVRk5MRVZCUVVVc1EwRkJRenRaUVVONlJEczdRVUZGUkN4bFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0QlFVTndRaXhsUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZkQlFWY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRWUVVWeVF6dEJRVU5FTEdGQlFVa3NTMEZCU3l4RFFVRkRMRTFCUVUwc1JVRkJSVHRCUVVOb1FpeGxRVUZKTEVOQlFVTXNhVUpCUVdsQ0xFVkJRVVVzUTBGQlF6dFZRVU14UWp0UlFVVkdPenRCUVVWRUxHdENRVUZoTzJOQlFVRXNlVUpCUVVjN08wRkJSV1FzWVVGQlNTeEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRPenRCUVVWaUxHRkJRVWtzV1VGQldTeEhRVUZITEVWQlFVVXNRMEZCUXpzN1FVRkZkRUlzWTBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhIUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZPenRCUVVWdVJDeDFRa0ZCV1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6czdRVUZGZUVJc1pVRkJTU3hWUVVGVkxFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFbEJRVWtzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4TlFVRk5MRU5CUVVNN1FVRkROMFFzWlVGQlNTeGpRVUZqTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVNc1EwRkJReXhIUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4SlFVRkpMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zVFVGQlRTeERRVUZETzBGQlEyNUZMR1ZCUVVrc1EwRkJReXhIUVVGRExFTkJRVU1zUjBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1NVRkJTU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NSVUZCUlR0QlFVTjZReXhwUWtGQlNTeEpRVUZKTEVOQlFVTXNRMEZCUXp0WlFVTllMRTFCUVUwc1NVRkJTU3hKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEZWQlFWVXNRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEdOQlFXTXNRMEZCUXl4TFFVRkxMRWRCUVVjc1JVRkJSVHRCUVVONlJpeHBRa0ZCU1N4SlFVRkpMRU5CUVVNc1EwRkJRenRaUVVOWUxFMUJRVTA3UVVGRFRDeHBRa0ZCU1N4SlFVRkpMRWRCUVVjc1EwRkJRenRaUVVOaU8xVkJRMFk3UVVGRFJDeGhRVUZKTEZGQlFWRXNSMEZCUnl4SlFVRkpMRU5CUVVNN096dEJRVWx3UWl4aFFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRGFFSXNZVUZCU1N4WFFVRlhMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZETEU5QlFVOHNSMEZCUXl4RFFVRkRMRWxCUVVrc1VVRkJVU3hEUVVGRE8wRkJRM0JFTEdGQlFVa3NXVUZCV1N4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlF5eFBRVUZQTEVkQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenM3UVVGRkwwTXNZMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eEhRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGT3p0QlFVVnVReXhsUVVGSkxGTkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF6dEJRVU53UXl4dlFrRkJVeXhEUVVGRExFdEJRVXNzUTBGQlF5eFJRVUZSTEVkQlFVY3NWVUZCVlN4RFFVRkRPMEZCUTNSRExHOUNRVUZUTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1IwRkJTU3haUVVGWkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVTXNWMEZCVnl4SFFVRkRMRTlCUVU4c1IwRkJTU3hKUVVGSkxFTkJRVU03UVVGRGNFVXNaVUZCU1N4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NTMEZCU3l4SFFVRkhMRVZCUVVVN1FVRkRPVUlzYzBKQlFWTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhIUVVGSkxFOUJRVThzUjBGQlNTeEpRVUZKTEVOQlFVTTdRVUZEZGtNc2FVSkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExGZEJRVmNzUlVGQlJTeFpRVUZaTEVkQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRiRVFzVFVGQlRUdEJRVU5NTEhOQ1FVRlRMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZETTBJc2MwSkJRVk1zUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4SFFVRkhMRTlCUVU4c1IwRkJReXhKUVVGSkxFTkJRVU03UVVGRGJrTXNhVUpCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjc1JVRkJSU3haUVVGWkxFZEJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEY0VRN1ZVRkZSanRSUVVWR096dEJRVVZFTEcxQ1FVRmpPMk5CUVVFc01FSkJRVWM3T3pzN1FVRkpaaXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4bFFVRmxMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVOQlFVTTdPMEZCUlRkRUxHTkJRVXNzU1VGQlNTeERRVUZETEVkQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNSVUZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSVHRCUVVOdVF5eGxRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUjBGQlJ6dEJRVU53UWl4blFrRkJTeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVczdRVUZEZEVJc1owSkJRVXNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpPMEZCUTNKQ0xIRkNRVUZWTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUVHRCUVVNMVFpeHhRa0ZCVlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGZEJRVmM3V1VGRGJFTXNRMEZCUXp0QlFVTkdMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNZMEZCWXl4RlFVRkZMRU5CUVVNN1FVRkRPVUlzWlVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFZRVU4yUWp0UlFVZEdPenRCUVVWRUxHTkJRVk03WTBGQlFTeHRRa0ZCUXl4SlFVRkpMRVZCUVVNc1JVRkJSU3hGUVVGRk96czdPenRCUVV0cVFpeGhRVUZKTEVsQlFVa3NSMEZCUnp0QlFVTlVMR1ZCUVVrc1JVRkJSU3hKUVVGSk8xVkJRMWdzUTBGQlF6dEJRVU5HTEdGQlFVa3NUMEZCVHl4RlFVRkZMRXRCUVVzc1VVRkJVU3hGUVVGRk8wRkJRekZDTEdWQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF6czdPMVZCUjNaQ0xFMUJRVTA3UVVGRFRDeGxRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRVZCUVVVc1EwRkJRenRWUVVOcVFqdEJRVU5FTEdGQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFGQlF6RkNPenRCUVZORUxGZEJRVTA3T3pzN096czdPenRqUVVGQkxHdENRVUZITEVWQlJWSTdPMEZCUjBRc2MwSkJRV2xDTzJOQlFVRXNOa0pCUVVjN096dEJRVVZzUWl4aFFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMRlZCUVZVc1IwRkJSeXhaUVVGTkxFVkJRVVVzUTBGQlF6dEJRVU14UkN4aFFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhaUVVGTkxFVkJRVVVzUTBGQlF6dEJRVU5xUkN4aFFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSExFbEJRVWtzUTBGQlF5eFpRVUZaTEVkQlFVY3NTVUZCU1N4RFFVRkRMR1ZCUVdVc1IwRkJSeXhaUVVGTkxFVkJRVVVzUTBGQlF6dEJRVU53UlN4aFFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eFRRVUZUTEVkQlFVY3NTVUZCU1N4RFFVRkRMRmxCUVZrc1IwRkJSeXhaUVVGTkxFVkJRVVVzUTBGQlF6czdRVUZGTTBRc1lVRkJTU3hEUVVGRExHTkJRV01zUjBGQlJ5eExRVUZMTEVOQlFVTTdPMEZCUlRWQ0xHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zV1VGQldTeEZRVUZGTEZWQlFVTXNRMEZCUXl4RlFVRkxPMEZCUTJwRUxHdENRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8wRkJRekZDTEdWQlFVa3NUMEZCVHl4SFFVRkhMRkZCUVZFc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1lVRkJZU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEU5QlFVOHNSVUZCUXl4RFFVRkRMRU5CUVVNc1lVRkJZU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMEZCUXk5R0xHVkJRVWtzUjBGQlJ5eEhRVUZITEUxQlFVc3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEJRVU51UXl4cFFrRkJTeXhWUVVGVkxFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUXpkQ0xHTkJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCU3l4VlFVRlZMRU5CUVVNc1EwRkJRenRCUVVNeFFpeHBRa0ZCU3l4alFVRmpMRWRCUVVjc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF6dEJRVU53UXl4WlFVRkRMRU5CUVVNc1kwRkJZeXhGUVVGRkxFTkJRVU03UVVGRGJrSXNXVUZCUXl4RFFVRkRMR1ZCUVdVc1JVRkJSU3hEUVVGRE8xVkJRM0pDTEVOQlFVTXNRMEZCUXpzN1FVRkZTQ3hoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEdkQ1FVRm5RaXhEUVVGRExGZEJRVmNzUlVGQlJTeFZRVUZETEVOQlFVTXNSVUZCU3p0QlFVTm9SQ3hsUVVGSkxFOUJRVThzUjBGQlJ5eFJRVUZSTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zUTBGQlF5eERRVUZETEdGQlFXRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFVkJRVU1zUTBGQlF5eERRVUZETEdGQlFXRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dEJRVU12Uml4bFFVRkpMRWRCUVVjc1IwRkJSeXhOUVVGTExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1FVRkRia01zWlVGQlNTeFBRVUZQTEVOQlFVTXNTMEZCU3l4TFFVRkhMRTFCUVVzc1kwRkJZeXhGUVVGRk8wRkJRM1pETEdsQ1FVRkpMRTFCUVVzc1kwRkJZeXhGUVVGRk8wRkJRM1pDTEcxQ1FVRkpMRTlCUVU4c1IwRkJSeXhOUVVGTExFbEJRVWtzUTBGQlF5eE5RVUZMTEdOQlFXTXNRMEZCUXl4RFFVRkRPMEZCUXpkRExITkNRVUZQTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNN1kwRkRaRHRCUVVORUxHZENRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVVzc1ZVRkJWU3hEUVVGRExFTkJRVU03V1VGRE0wSXNUVUZCVFR0QlFVTk1MR2RDUVVGSExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTTdXVUZEV2p0QlFVTkVMR2xDUVVGTExHTkJRV01zUjBGQlJ5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUTNCRExGbEJRVU1zUTBGQlF5eGpRVUZqTEVWQlFVVXNRMEZCUXp0QlFVTnVRaXhaUVVGRExFTkJRVU1zWlVGQlpTeEZRVUZGTEVOQlFVTTdWVUZEY2tJc1EwRkJReXhEUVVGRE96dEJRVVZJTEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNWVUZCVlN4RlFVRkZMRlZCUVVNc1EwRkJReXhGUVVGTE96dEJRVVV2UXl4bFFVRkpMRWRCUVVjc1IwRkJSeXhOUVVGTExFbEJRVWtzUTBGQlF5eE5RVUZMTEdOQlFXTXNRMEZCUXl4RFFVRkRPMEZCUTNwRExHTkJRVWNzUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXp0QlFVTlVMR2xDUVVGTExGZEJRVmNzUjBGQlJ5eExRVUZMTEVOQlFVTTdRVUZEZWtJc2FVSkJRVXNzWTBGQll5eEhRVUZITEV0QlFVc3NRMEZCUXp0QlFVTTFRaXhaUVVGRExFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTTdRVUZEYmtJc1dVRkJReXhEUVVGRExHVkJRV1VzUlVGQlJTeERRVUZETzFWQlEzSkNMRU5CUVVNc1EwRkJRenRSUVVWS096dEJRVTlFTEdGQlFWRTdPenM3T3pzN08yTkJRVUVzYTBKQlFVTXNSMEZCUnl4RlFVRkRMRWxCUVVrc1JVRkJSVHRCUVVOcVFpeGhRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU03UVVGRGNrSXNZVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETzBGQlEzWkNMR0ZCUVVrc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF6dEJRVU5pTEdGQlFVa3NRMEZCUXl4alFVRmpMRVZCUVVVc1EwRkJRenRSUVVOMlFqczdRVUZQUkN4alFVRlRPenM3T3pzN096dGpRVUZCTEcxQ1FVRkRMRWxCUVVrc1JVRkJSU3hGUVVGRkxFVkJRVVU3UVVGRGJFSXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFZEJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdVVUZEZWtNN08wRkJUMFFzWjBKQlFWYzdPenM3T3pzN08yTkJRVUVzY1VKQlFVTXNTMEZCU3l4RlFVRkZMRVZCUVVVc1JVRkJSVHRCUVVOeVFpeGhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0UlFVTXpRanM3T3p0VlFXaFJhMElzUzBGQlN6dEpRVUZUTEZOQlFWTTdPMnRDUVVGMlFpeExRVUZMT3pzN096czdPenRCUTJwTE1VSXNZVUZCV1N4RFFVRkRPenM3T3pzN096czdPMEZCUldJc1MwRkJTU3hIUVVGSExFZEJRVWNzYlVKQlFVOHNRMEZCUXl4RFFVRmhMRU5CUVVNc1EwRkJRenRCUVVOcVF5eExRVUZKTEVkQlFVY3NSMEZCUnl4dFFrRkJUeXhEUVVGRExFTkJRV0VzUTBGQlF5eERRVUZETzBGQlEycERMRXRCUVVrc1UwRkJVeXhIUVVGSExHMUNRVUZQTEVOQlFVTXNRMEZCYlVJc1EwRkJReXhEUVVGRE8wRkJRemRETEV0QlFVa3NZMEZCWXl4SFFVRkhMRzFDUVVGUExFTkJRVU1zUlVGQk9FSXNRMEZCUXl4RFFVRkRPMEZCUXpkRUxFdEJRVWtzVjBGQlZ5eEhRVUZITEcxQ1FVRlBMRU5CUVVNc1JVRkJhMElzUTBGQlF5eERRVUZETzBGQlF6bERMRXRCUVVrc1dVRkJXU3hIUVVGSExHMUNRVUZQTEVOQlFVTXNSVUZCYlVJc1EwRkJReXhEUVVGRE8wRkJRMmhFTEV0QlFVa3NTMEZCU3l4SFFVRkhMRzFDUVVGUExFTkJRVU1zUTBGQlpTeERRVUZETEVOQlFVTTdPMHRCU1M5Q0xGVkJRVlU3UVVGRlNDeFpRVVpRTEZWQlFWVXNSMEZGUVRzeVFrRkdWaXhWUVVGVk96dEJRVWxhTEZOQlFVa3NUMEZCVHl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRkxFTkJRVU03TzBGQlJYcENMRk5CUVVrc1VVRkJVU3hIUVVGSE8wRkJRMklzWVVGQlVTeERRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRU5CUVVNN1FVRkRaaXhsUVVGVkxFdEJRVXM3UVVGRFppeGhRVUZSTEZGQlFWRTdRVUZEYUVJc1kwRkJVeXhEUVVGRE8wMUJRMWdzUTBGQlF6czdRVUZGUml4blEwRmlSU3hWUVVGVkxEWkRRV0ZPTEZOQlFWTXNSVUZCUXl4UFFVRlBMRVZCUVVNc1VVRkJVU3hGUVVGRk96dEJRVVZzUXl4VFFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUTJwRExGTkJRVWtzUTBGQlF5eEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRVU03UVVGRE4wSXNVMEZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNRMEZCUXpzN1FVRkZia01zVTBGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFMUJRVTBzUTBGQlF6czdRVUZGYmtNc1UwRkJTU3hEUVVGRExGZEJRVmNzUjBGQlJ5eExRVUZMTEVOQlFVTTdRVUZEZWtJc1UwRkJTU3hEUVVGRExGVkJRVlVzUjBGQlJ5eExRVUZMTEVOQlFVTTdPMEZCUlhoQ0xGTkJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0QlFVTmFMRk5CUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dEpRVVZtT3p0aFFUTkNSeXhWUVVGVk96dG5Ra0ZCVml4VlFVRlZPMEZCTmtKa0xHVkJRVlU3WTBGQlFTeHpRa0ZCUnp0QlFVTllMR0ZCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVOcVF5eGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmxCUVZrc1EwRkJReXhQUVVGUExFVkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUXpsRExHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RFFVRkRMRkZCUVZFc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZEYUVRc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4SFFVRkhMRXRCUVVzc1EwRkJRenRCUVVNdlFpeGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFZEJRVWNzUzBGQlN5eERRVUZETzBGQlEyaERMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNSMEZCUnl4VlFVRlZMRU5CUVVNN1FVRkRla01zWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFGQlEzWkRPenRCUVVWRUxHMUNRVUZqTzJOQlFVRXNNRUpCUVVjN096dEJRVVZtTEdGQlFVa3NRMEZCUXl4SFFVRkhMRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTTVRaXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03TzBGQlJXNURMR0ZCUVVrc1EwRkJReXhwUWtGQmFVSXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRE96czdPMEZCU1d4RExHRkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RlFVRkZPenRCUVVWcVFpeGxRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRmxCUVUwN1FVRkRha0lzYlVKQlFVc3NUVUZCVFN4RFFVRkRMRmRCUVZjc1IwRkJSeXhKUVVGSkxFTkJRVU03UVVGREwwSXNiVUpCUVVzc1RVRkJUU3hEUVVGRExGVkJRVlVzUjBGQlJ5eERRVUZETEUxQlFVc3NTMEZCU3l4RFFVRkRPMEZCUTNKRExHMUNRVUZMTEVsQlFVa3NRMEZCUXl4TlFVRkxMRTFCUVUwc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dFpRVU51UXl4RFFVRkRPMEZCUTBZc1pVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhYUVVGWExFVkJRVVVzV1VGQlRUdEJRVU16UXl4cFFrRkJTU3hOUVVGTExFMUJRVTBzUTBGQlF5eFhRVUZYTEVWQlFVVTdRVUZETTBJc2NVSkJRVXNzU1VGQlNTeERRVUZETEUxQlFVc3NUVUZCVFN4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRE8yTkJRMjVETzFsQlEwWXNRMEZCUXl4RFFVRkRPenRCUVVkSUxHVkJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NXVUZCVFN4RlFVTnFRaXhEUVVGRE8wRkJRMFlzWlVGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eFhRVUZYTEVWQlFVVXNWVUZCUXl4RFFVRkRMRVZCUVVzN1FVRkROVU1zYVVKQlFVa3NUVUZCU3l4TlFVRk5MRU5CUVVNc1YwRkJWeXhGUVVGRk8wRkJRek5DTEcxQ1FVRkpMRU5CUVVNc1RVRkJTeXhOUVVGTkxFVkJRVVU3UVVGRGFFSXNkVUpCUVVzc1RVRkJUU3hIUVVGSExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCU3l4UFFVRlBMRU5CUVVNc1EwRkJRenRuUWtGRE9VTTdRVUZEUkN4eFFrRkJTeXhMUVVGTExFZEJRVWNzUjBGQlJ5eERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRMRVZCUVVNc1RVRkJTeXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU0xUXl4eFFrRkJTeXhKUVVGSkxFVkJRVVVzUTBGQlF6dGpRVU5pTzFsQlEwWXNRMEZCUXl4RFFVRkRPenRCUVVkSUxHVkJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NXVUZCVFR0QlFVTnVRaXh0UWtGQlN5eE5RVUZOTEVOQlFVTXNWMEZCVnl4SFFVRkhMRXRCUVVzc1EwRkJRenRaUVVOcVF5eERRVUZETzBGQlEwWXNaVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4VFFVRlRMRVZCUVVVc1dVRkJUVHRCUVVONlF5eHBRa0ZCU1N4TlFVRkxMRTFCUVUwc1EwRkJReXhYUVVGWExFVkJRVVU3UVVGRE0wSXNjVUpCUVVzc1JVRkJSU3hGUVVGRkxFTkJRVU03WTBGRFdEdFpRVU5HTEVOQlFVTXNRMEZCUXp0QlFVTklMR1ZCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1ZVRkJWU3hGUVVGRkxGbEJRVTA3UVVGRE1VTXNhVUpCUVVrc1RVRkJTeXhOUVVGTkxFTkJRVU1zVjBGQlZ5eEZRVUZGTzBGQlF6TkNMSEZDUVVGTExFVkJRVVVzUlVGQlJTeERRVUZETzJOQlExZzdXVUZEUml4RFFVRkRMRU5CUVVNN1ZVRkRTanRSUVVWR096dEJRVVZFTEd0Q1FVRmhPMk5CUVVFc2VVSkJRVWM3TzBGQlJXUXNZVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eEZRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpkQ0xHRkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVVjc1JVRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU0zUWl4aFFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUTBGQlF5eEZRVUZGTzBGQlEyeENMR1ZCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zV1VGQldTeERRVUZETEU5QlFVOHNSVUZCUlN4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzFWQlEyaEVMRTFCUVUwN1FVRkRUQ3hsUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4UFFVRlBMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFWQlF6VkRPMEZCUTBRc1lVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNSVUZCUlR0QlFVTnVRaXhsUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0VlFVTnNSQ3hOUVVGTk8wRkJRMHdzWlVGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4WlFVRlpMRU5CUVVNc1VVRkJVU3hGUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0VlFVTTVRenM3UVVGRlJDeGhRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRmVFUTdPMEZCUlVRc1YwRkJUVHRqUVVGQkxHdENRVUZITzBGQlExQXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRVVU3UVVGRFppeGxRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03VlVGRGVFUXNUVUZCVFR0QlFVTk1MR1ZCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNSVUZCUlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0VlFVTXhSRHRSUVVOR096czdPMVZCY2toSExGVkJRVlU3U1VGQlV5eGpRVUZqT3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096dExRV2RMYkVJc1UwRkJVenRCUVVWcVFpeFpRVVpSTEZOQlFWTXNSMEZGWkRzeVFrRkdTeXhUUVVGVE96dEJRVWt4UWl4VFFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZET3p0QlFVVjRRaXhUUVVGSkxGRkJRVkVzUjBGQlJ6dEJRVU5pTEdGQlFWRXNRMEZCUXl4SFFVRkhMRVZCUVVNc1IwRkJSeXhEUVVGRE8wRkJRMnBDTEdGQlFWRXNVVUZCVVR0QlFVTm9RaXhoUVVGUkxFTkJRVU03UVVGRFZDeG5Ra0ZCVnl4RlFVRkZPMDFCUTJRc1EwRkJRenM3UVVGRlJpeG5RMEZpYVVJc1UwRkJVeXcyUTBGaGNFSXNVMEZCVXl4RlFVRkRMRTlCUVU4c1JVRkJReXhSUVVGUkxFVkJRVVU3TzBGQlJXeERMRk5CUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdPenM3T3pzN1FVRlBha0lzVTBGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF6czdPenM3TzBGQlRTOUNMRk5CUVVrc1EwRkJReXhSUVVGUkxFZEJRVWNzU1VGQlNTeExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVjc1JVRkJReXhaUVVGWExFVkJRVVVzUlVGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXpzN096czdPMEZCVFRWRUxGTkJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NTVUZCU1N4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZKTEVWQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dEJRVU40UlN4VFFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFVkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTTdPenM3T3p0QlFVMTBRaXhUUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVsQlFVa3NXVUZCV1N4RFFVRkRMRU5CUVVNc1JVRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdPMEZCUldoRUxGTkJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0SlFVVmlPenRoUVRkRGEwSXNVMEZCVXpzN1owSkJRVlFzVTBGQlV6dEJRU3RETlVJc1pVRkJWVHRqUVVGQkxITkNRVUZITzBGQlExZ3NZVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhSUVVGUkxFTkJRVU1zWVVGQllTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUXpkRExHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRkZCUVZFc1IwRkJSeXhWUVVGVkxFTkJRVU03UVVGRGVrTXNZVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eEhRVUZITEU5QlFVOHNRMEZCUXp0QlFVTnlReXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRWRCUVVjc1RVRkJUU3hEUVVGRE8wRkJRMnhETEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUjBGQlJ5eE5RVUZOTEVOQlFVTTdRVUZEYmtNc1lVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wRkJRM1JETEdGQlFVa3NTMEZCU3l4RFFVRkRMRTFCUVUwc1JVRkJSVHRCUVVOb1FpeGxRVUZKTEVOQlFVTXNhVUpCUVdsQ0xFVkJRVVVzUTBGQlF6dFZRVU14UWp0UlFVTkdPenRCUVVWRUxHMUNRVUZqTzJOQlFVRXNNRUpCUVVjN08wRkJSV1lzWVVGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4RlFVRkZMRU5CUVVNN1FVRkRhRUlzWTBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhIUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRk96dEJRVVZ5UXl4bFFVRkpMRk5CUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenM3TzBGQlIzSkRMR1ZCUVVrc1UwRkJVeXhIUVVGSExGRkJRVkVzUTBGQlF5eGhRVUZoTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1FVRkRMME1zYjBKQlFWTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hIUVVGSExGVkJRVlVzUTBGQlF6czdRVUZIZEVNc1pVRkJTU3hKUVVGSkxFZEJRVWNzU1VGQlNTeFZRVUZWTEVOQlFVTXNVMEZCVXl4RlFVRkZPMEZCUTJwRExITkNRVUZUTEVWQlFVVXNTVUZCU1R0QlFVTm1MR3RDUVVGTExFVkJRVVVzUTBGQlF6dEJRVU5TTEdkQ1FVRkhMRVZCUVVVc1UwRkJVU3hEUVVGRExFZEJRVWM3UVVGRGFrSXNiVUpCUVUwc1JVRkJSU3hUUVVGUkxFTkJRVU1zVFVGQlRUdEJRVU4yUWl4cFFrRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eEpRVUZKTzBGQlEyWXNiVUpCUVUwc1JVRkJSU3hKUVVGSk8xbEJRMklzUlVGQlJTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXpzN08wRkJSMnhETEdWQlFVa3NTMEZCU3l4RFFVRkRMRTFCUVUwc1JVRkJSVHRCUVVOb1FpeHBRa0ZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETzBGQlEyNUNMR2xDUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRExGVkJRVlVzUjBGQlJ5eFpRVUZOTEVWQlFVVXNRMEZCUXp0QlFVTXhSQ3hwUWtGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NXVUZCVFN4RlFVRkZMRU5CUVVNN1FVRkRha1FzYVVKQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExGbEJRVmtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNaVUZCWlN4SFFVRkhMRmxCUVUwc1JVRkJSU3hEUVVGRE8wRkJRM0JGTEdsQ1FVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eFRRVUZUTEVkQlFVY3NTVUZCU1N4RFFVRkRMRmxCUVZrc1IwRkJSeXhaUVVGTkxFVkJRVVVzUTBGQlF6dFpRVU0xUkRzN1FVRkZSQ3hsUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRCUVVOMFFpeGxRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmRCUVZjc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dFZRVVZ5UXp0QlFVTkVMR0ZCUVVrc1EwRkJReXhoUVVGaExFVkJRVVVzUTBGQlF6dFJRVU4wUWpzN1FVRkZSQ3hyUWtGQllUdGpRVUZCTEhsQ1FVRkhPenRCUVVWa0xHRkJRVWtzVTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF6dEJRVU14UXl4aFFVRkpMRlZCUVZVc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNN08wRkJSWHBETEdOQlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdEJRVU4wUXl4bFFVRkpMRk5CUVZNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJRenRCUVVOeVF5eHZRa0ZCVXl4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVWNzVTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXp0QlFVTXZSQ3h2UWtGQlV5eERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWRCUVVjc1ZVRkJWU3hIUVVGSExFbEJRVWtzUTBGQlF6dEJRVU0xUkN4bFFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4VFFVRlRMRVZCUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU03VlVGRE5VTTdVVUZIUmpzN1FVRkZSQ3h0UWtGQll6dGpRVUZCTERCQ1FVRkhPMEZCUTJZc1kwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMEZCUTNSRExHVkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03VlVGRGVFSTdVVUZEUmpzN1FVRkZSQ3hYUVVGTk8yTkJRVUVzYTBKQlFVYzdPenM3TzBGQlIxQXNZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zVlVGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJTenM3UVVGRk4wSXNaVUZCU1N4TlFVRkxMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1RVRkJTeXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZPMEZCUTNKRUxHbENRVUZKTEUxQlFVc3NUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVN1FVRkRha01zY1VKQlFVc3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzJOQlEzaENMRTFCUVUwN1FVRkRUQ3h4UWtGQlN5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03WTBGRGVrSTdXVUZEUmp0VlFVTkdMRU5CUVVNc1EwRkJRenRSUVVOS096dEJRVk5FTEdOQlFWTTdPenM3T3pzN096dGpRVUZCTEcxQ1FVRkRMRWxCUVVrc1JVRkJReXhGUVVGRkxFVkJRVVU3T3pzN1FVRkpha0lzWVVGQlNTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdPMEZCUlhCRExHRkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8wRkJRMmhFTEdGQlFVa3NTVUZCU1N4SFFVRkhPMEZCUTFRc1kwRkJSeXhGUVVGRkxFbEJRVWtzUTBGQlF5eEhRVUZITzBGQlEySXNhVUpCUVUwc1JVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRUdEJRVU51UWl4blFrRkJTeXhGUVVGRkxFVkJRVVU3VlVGRFZpeERRVUZETzBGQlEwWXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdVVUZETVVJN08wRkJSVVFzVjBGQlRUdGpRVUZCTEd0Q1FVRkhPenM3UVVGRFVDeGhRVUZKTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUlVGQlJUdEJRVU16UWl4bFFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eFZRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhGUVVGTE8wRkJRemRDTEdsQ1FVRkpMRU5CUVVNc1MwRkJSeXhOUVVGTExFOUJRVThzUTBGQlF5eExRVUZMTEVWQlFVVTdRVUZETVVJc2NVSkJRVXNzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhaUVVGWkxFTkJRVU1zVVVGQlVTeEZRVUZETEUxQlFVc3NUVUZCVFN4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRE8wRkJRMnBGTEhGQ1FVRkxMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMR05CUVdNc1JVRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU51UkN4eFFrRkJTeXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhuUWtGQlowSXNSVUZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRqUVVOMFJDeE5RVUZOTzBGQlEwd3NjVUpCUVVzc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4WlFVRlpMRU5CUVVNc1VVRkJVU3hGUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzJOQlEycEVPMWxCUTBZc1EwRkJReXhEUVVGRE8xVkJRMG83VVVGRFJqczdRVUZOUkN4VlFVRkxPenM3T3pzN08yTkJRVUVzWlVGQlF5eEZRVUZGTEVWQlFVVTdRVUZEVWl4aFFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dEJRVU16UXl4aFFVRkpMRVZCUVVVc1JVRkJSVHRCUVVOT0xHVkJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xVkJRM1JDTzBGQlEwUXNZVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF6dFJRVU4yUWpzN1FVRkxSQ3hUUVVGSk96czdPenM3WTBGQlFTeG5Ra0ZCUnp0QlFVTk1MR0ZCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTTdVVUZEZEVJN08wRkJTMFFzVTBGQlNUczdPenM3TzJOQlFVRXNaMEpCUVVjN1FVRkRUQ3hoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMEZCUTNCQ0xHRkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTXNRMEZCUXp0QlFVTnVSU3hoUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdVVUZEWmpzN1FVRkZSQ3h6UWtGQmFVSTdZMEZCUVN3MlFrRkJSenM3TzBGQlJXeENMR0ZCUVVrc1EwRkJReXhSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hIUVVGSExGbEJRVTBzUlVGQlJTeERRVUZETzBGQlF6RkVMR0ZCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExGbEJRVTBzUlVGQlJTeERRVUZETzBGQlEycEVMR0ZCUVVrc1EwRkJReXhSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEZsQlFWa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1pVRkJaU3hIUVVGSExGbEJRVTBzUlVGQlJTeERRVUZETzBGQlEzQkZMR0ZCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1dVRkJXU3hIUVVGSExGbEJRVTBzUlVGQlJTeERRVUZET3p0QlFVVXpSQ3hoUVVGSkxFTkJRVU1zWTBGQll5eEhRVUZITEV0QlFVc3NRMEZCUXpzN1FVRkZOVUlzWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4blFrRkJaMElzUTBGQlF5eFpRVUZaTEVWQlFVVXNWVUZCUXl4RFFVRkRMRVZCUVVzN1FVRkRha1FzWlVGQlNTeFBRVUZQTEVkQlFVY3NVVUZCVVN4RFFVRkRMR2RDUVVGblFpeERRVUZETEVOQlFVTXNRMEZCUXl4aFFVRmhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eEZRVUZETEVOQlFVTXNRMEZCUXl4aFFVRmhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdRVUZETDBZc1pVRkJTU3hKUVVGSkxFZEJRVWNzVFVGQlN5eExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRM0pETEdsQ1FVRkxMRlZCUVZVc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTTdRVUZET1VJc1pVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZMTEZWQlFWVXNRMEZCUXl4RFFVRkRPMEZCUXpOQ0xHbENRVUZMTEdOQlFXTXNSMEZCUnl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRE8wRkJRM0JETEZsQlFVTXNRMEZCUXl4alFVRmpMRVZCUVVVc1EwRkJRenRCUVVOdVFpeFpRVUZETEVOQlFVTXNaVUZCWlN4RlFVRkZMRU5CUVVNN1ZVRkRja0lzUTBGQlF5eERRVUZET3p0QlFVVklMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1YwRkJWeXhGUVVGRkxGVkJRVU1zUTBGQlF5eEZRVUZMTzBGQlEyaEVMR1ZCUVVrc1QwRkJUeXhIUVVGSExGRkJRVkVzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhEUVVGRExFTkJRVU1zWVVGQllTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1JVRkJReXhEUVVGRExFTkJRVU1zWVVGQllTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wRkJReTlHTEdWQlFVa3NTVUZCU1N4SFFVRkhMRTFCUVVzc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTnlReXhsUVVGSkxFOUJRVThzUTBGQlF5eExRVUZMTEV0QlFVY3NUVUZCU3l4alFVRmpMRVZCUVVVN1FVRkRka01zYVVKQlFVa3NUVUZCU3l4alFVRmpMRWxCUVVrc1EwRkJReXhGUVVGRk8wRkJRelZDTEcxQ1FVRkpMRkZCUVZFc1IwRkJSeXhOUVVGTExFdEJRVXNzUTBGQlF5eE5RVUZMTEdOQlFXTXNRMEZCUXl4RFFVRkRPMEZCUXk5RExIVkNRVUZSTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNN1kwRkRaanRCUVVORUxHbENRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVVzc1ZVRkJWU3hEUVVGRExFTkJRVU03V1VGRE5VSXNUVUZCVFR0QlFVTk1MR2xDUVVGSkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTTdXVUZEWWp0QlFVTkVMR2xDUVVGTExHTkJRV01zUjBGQlJ5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUTNCRExGbEJRVU1zUTBGQlF5eGpRVUZqTEVWQlFVVXNRMEZCUXp0QlFVTnVRaXhaUVVGRExFTkJRVU1zWlVGQlpTeEZRVUZGTEVOQlFVTTdWVUZEY2tJc1EwRkJReXhEUVVGRE96dEJRVVZJTEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNWVUZCVlN4RlFVRkZMRlZCUVVNc1EwRkJReXhGUVVGTE96dEJRVVV2UXl4bFFVRkpMRWxCUVVrc1IwRkJSeXhOUVVGTExFdEJRVXNzUTBGQlF5eE5RVUZMTEdOQlFXTXNRMEZCUXl4RFFVRkRPMEZCUXpORExHVkJRVWtzUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXp0QlFVTldMR2xDUVVGTExGZEJRVmNzUjBGQlJ5eExRVUZMTEVOQlFVTTdRVUZEZWtJc2FVSkJRVXNzWTBGQll5eEhRVUZITEV0QlFVc3NRMEZCUXp0QlFVTTFRaXhaUVVGRExFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTTdRVUZEYmtJc1dVRkJReXhEUVVGRExHVkJRV1VzUlVGQlJTeERRVUZETzFWQlEzSkNMRU5CUVVNc1EwRkJRenRSUVVWS096dEJRVlZITEZOQlFVazdPenM3T3pzN1dVRktRU3haUVVGSE8wRkJRMVFzWjBKQlFVOHNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU03VVVGRGVrSTdXVUZGVHl4VlFVRkRMRU5CUVVNc1JVRkJSVHRCUVVOV0xHRkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJRenRCUVVOeVFpeGhRVUZKTEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNN1FVRkRZaXhoUVVGSkxFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTTdRVUZEZEVJc1lVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzFGQlEyWTdPMEZCVlVjc1dVRkJUenM3T3pzN096dFpRVXBCTEZsQlFVYzdRVUZEV2l4blFrRkJUeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXp0UlFVTTFRanRaUVVWVkxGVkJRVU1zUTBGQlF5eEZRVUZGTzBGQlEySXNZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFZEJRVWNzUTBGQlF5eERRVUZETzBGQlEzaENMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXp0QlFVTnlRaXhoUVVGSkxFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdRVUZEWWl4aFFVRkpMRU5CUVVNc1kwRkJZeXhGUVVGRkxFTkJRVU03UVVGRGRFSXNZVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8xRkJRMlk3T3pzN1ZVRnFVbXRDTEZOQlFWTTdTVUZCVXl4VFFVRlRPenRyUWtGQk0wSXNVMEZCVXl4RE96czdPenM3UVVNMVN6bENMR0ZCUVZrc1EwRkJRenM3T3pzN096czdTMEZGVGl4SlFVRkpMSFZEUVVGTkxFTkJRV003TzB0QlEzaENMRkZCUVZFc2RVTkJRVTBzUlVGQmIwSTdPenM3T3pzN096czdPenM3T3pzN096czdPenM3UzBGMVFuQkNMRTFCUVUwN1FVRkZaQ3haUVVaUkxFMUJRVTBzUTBGRllpeEpRVUZKTEVWQlFVTXNUMEZCVHl4RlFVRkZPenM3TWtKQlJsQXNUVUZCVFRzN08wRkJTWFpDTEZOQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1JVRkJSU3hEUVVGRE8wRkJRMnhDTEZOQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hGUVVGRExFOUJRVThzUTBGQlF5eERRVUZET3p0QlFVVXhRaXhUUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITzBGQlExb3NWMEZCU1N4RlFVRkZMRlZCUVVNc1RVRkJUU3hGUVVGRkxFZEJRVWNzUlVGQlN6dEJRVU55UWl4bFFVRkxMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTFCUVVzc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMEZCUTNaRUxHRkJRVWtzVFVGQlN5eEZRVUZGTEVWQlFVVTdRVUZCUlN4cFFrRkJTeXhGUVVGRkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdWVUZCUlR0QlFVTnNReXhuUWtGQlR5eE5RVUZMTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU5zUXp0QlFVTkVMRlZCUVVjc1JVRkJSU3haUVVGTk8wRkJRMVFzWlVGQlN5eFBRVUZQTEVOQlFVTXNWVUZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhGUVVGTE8wRkJRVVVzYVVKQlFVc3NUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdWVUZCUlN4RFFVRkRMRU5CUVVNN1FVRkRiRVFzWVVGQlNTeE5RVUZMTEVWQlFVVXNSVUZCUlR0QlFVRkZMR2xDUVVGTExFVkJRVVVzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0VlFVRkZPMUZCUTI1RE8wRkJRMFFzVlVGQlJ5eEZRVUZGTEZWQlFVTXNSMEZCUnl4RlFVRkxPMEZCUTFvc1kwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkRMRTFCUVVzc1QwRkJUeXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzBGQlEycERMR2xDUVVGTExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RlFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xVkJRM3BDTzBGQlEwUXNZVUZCU1N4TlFVRkxMRVZCUVVVc1JVRkJSVHRCUVVGRkxHbENRVUZMTEVWQlFVVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRWUVVGRk8xRkJRMjVETzBGQlEwUXNZVUZCVFN4RlFVRkZMRlZCUVVNc1RVRkJUU3hGUVVGTE8wRkJRMnhDTEdOQlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlF5eE5RVUZMTEVsQlFVa3NSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRCUVVNNVFpeHBRa0ZCU3l4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0VlFVTTFRanRCUVVORUxHRkJRVWtzVFVGQlN5eEZRVUZGTEVWQlFVVTdRVUZCUlN4cFFrRkJTeXhGUVVGRkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdWVUZCUlR0UlFVTnVRenROUVVOR0xFTkJRVU03TzBGQlJVWXNVMEZCU1N4RFFVRkRMRWRCUVVjc1IwRkJSenRCUVVOVUxGZEJRVWtzUlVGQlJTeFZRVUZETEUxQlFVMHNSVUZCUlN4SFFVRkhMRVZCUVVVc1MwRkJTeXhGUVVGTE8wRkJRelZDTEdWQlFVc3NUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXp0QlFVTnNReXhoUVVGSkxFMUJRVXNzUlVGQlJTeEZRVUZGTzBGQlFVVXNhVUpCUVVzc1JVRkJSU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzFWQlFVVTdVVUZEYmtNN1FVRkRSQ3hWUVVGSExFVkJRVVVzVlVGQlF5eE5RVUZOTEVWQlFVczdPenRCUVVkbUxHVkJRVXNzVDBGQlR5eEhRVUZITEUxQlFVMHNRMEZCUXp0QlFVTjBRaXhoUVVGSkxFMUJRVXNzUlVGQlJTeEZRVUZGTzBGQlFVVXNhVUpCUVVzc1JVRkJSU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzFWQlFVVTdVVUZEYmtNN1FVRkRSQ3hWUVVGSExFVkJRVVVzVlVGQlF5eEhRVUZITEVWQlFVTXNUVUZCVFN4RlFVRkxPenRCUVVWdVFpeGxRVUZMTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhOUVVGTkxFTkJRVU03UVVGRE0wSXNZVUZCU1N4TlFVRkxMRVZCUVVVc1JVRkJSVHRCUVVGRkxHbENRVUZMTEVWQlFVVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRWUVVGRk8xRkJRMjVETzBGQlEwUXNZVUZCVFN4RlFVRkZMRlZCUVVNc1RVRkJUU3hGUVVGRExFMUJRVTBzUlVGQlN6czdRVUZGZWtJc1pVRkJTeXhQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEZWQlFVTXNSMEZCUnl4RlFVRkRMRU5CUVVNc1JVRkJTenRCUVVNNVFpeHBRa0ZCU3l4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xVkJRM0pETEVOQlFVTXNRMEZCUXp0QlFVTklMR0ZCUVVrc1RVRkJTeXhGUVVGRkxFVkJRVVU3UVVGQlJTeHBRa0ZCU3l4RlFVRkZMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03VlVGQlJUdFJRVU51UXp0TlFVTkdMRU5CUVVNN08wRkJSVVlzVTBGQlNTeERRVUZETEUxQlFVMHNSMEZCUnpzN08wRkJSMW9zVlVGQlJ5eEZRVUZGTEZWQlFVTXNUVUZCVFN4RlFVRkxPMEZCUTJZc1lVRkJTU3hEUVVGRExFMUJRVTBzU1VGQlNTeE5RVUZOTEV0QlFVY3NRMEZCUXl4RlFVRkZPMEZCUTNwQ0xHbENRVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRPMVZCUTFvN1FVRkRSQ3hsUVVGTkxFbEJRVWtzVFVGQlN5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRE8wRkJRMnBETEdGQlFVa3NUVUZCVFN4SFFVRkhMRU5CUVVNc1JVRkJSVHRCUVVOa0xHbENRVUZOTEVkQlFVY3NUVUZCU3l4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeEhRVUZITEUxQlFVMHNRMEZCUXp0VlFVTXhRenRCUVVORUxHTkJRVXNzU1VGQlNTeERRVUZETEVkQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJReXhOUVVGTExFbEJRVWtzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0QlFVTTVRaXhsUVVGSkxFZEJRVWNzUjBGQlJ5eE5RVUZMTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVVVzVFVGQlN5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hIUVVGSExFMUJRVTBzUlVGQlJTeE5RVUZOTEVOQlFVVXNRMEZCUXp0QlFVTTFSU3hwUWtGQlN5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlJTeE5RVUZMTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJSU3hEUVVGRE8xVkJRMnBFTzBGQlEwUXNZVUZCU1N4TlFVRkxMRVZCUVVVc1JVRkJSVHRCUVVGRkxHbENRVUZMTEVWQlFVVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRWUVVGRk8xRkJRMjVETzBGQlEwUXNWVUZCUnl4RlFVRkZMRlZCUVVNc1IwRkJSeXhGUVVGRExFMUJRVTBzUlVGQlN6dEJRVU51UWl4aFFVRkpMRU5CUVVNc1RVRkJUU3hKUVVGSkxFMUJRVTBzUzBGQlJ5eERRVUZETEVWQlFVVTdRVUZEZWtJc2FVSkJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTTdWVUZEV2p0QlFVTkVMR1ZCUVUwc1NVRkJTU3hOUVVGTExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNN1FVRkRha01zWVVGQlNTeE5RVUZOTEVkQlFVY3NRMEZCUXl4RlFVRkZPMEZCUTJRc2FVSkJRVTBzUjBGQlJ5eE5RVUZMTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVWNzVFVGQlRTeERRVUZETzFWQlF6RkRPMEZCUTBRc1lVRkJTU3hIUVVGSExFZEJRVWNzVFVGQlN5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRkxFMUJRVXNzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1IwRkJSeXhOUVVGTkxFVkJRVVVzVFVGQlRTeERRVUZGTEVOQlFVTTdRVUZEYUVZc1pVRkJTeXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJSU3hOUVVGTExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUlN4RFFVRkRPMEZCUTNCRUxHRkJRVWtzVFVGQlN5eEZRVUZGTEVWQlFVVTdRVUZCUlN4cFFrRkJTeXhGUVVGRkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdWVUZCUlR0UlFVTnVRenRCUVVORUxHRkJRVTBzUlVGQlJTeFZRVUZETEUxQlFVMHNSVUZCUlN4TlFVRk5MRVZCUVVzN1FVRkRNVUlzWVVGQlNTeERRVUZETEUxQlFVMHNTVUZCU1N4TlFVRk5MRXRCUVVjc1EwRkJReXhGUVVGRk8wRkJRM3BDTEdsQ1FVRk5MRWRCUVVjc1EwRkJReXhEUVVGRE8xVkJRMW83UVVGRFJDeGxRVUZOTEVsQlFVa3NUVUZCU3l4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRE8wRkJRemxDTEdGQlFVa3NUVUZCVFN4SFFVRkhMRU5CUVVNc1JVRkJSVHRCUVVOa0xHbENRVUZOTEVkQlFVY3NUVUZCU3l4UFFVRlBMRU5CUVVNc1RVRkJUU3hIUVVGSExFMUJRVTBzUTBGQlF6dFZRVU4yUXp0QlFVTkVMR0ZCUVVrc1MwRkJTeXhIUVVGSExFVkJRVVVzUTBGQlF6dEJRVU5tTEdWQlFVc3NUMEZCVHl4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGRExFZEJRVWNzUlVGQlN6dEJRVU0xUWl4blFrRkJTeXhEUVVGRExFbEJRVWtzUTBGQlJTeEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVVc1EwRkJRenRWUVVNelFpeERRVUZETEVOQlFVTTdRVUZEU0N4aFFVRkpMRWRCUVVjc1IwRkJSeXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZGTEV0QlFVc3NRMEZCUXl4TlFVRk5MRWRCUVVjc1RVRkJUU3hGUVVGRkxFMUJRVTBzUTBGQlJTeERRVUZETzBGQlEzaEVMR05CUVVzc1IwRkJSeXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZGTEV0QlFVc3NRMEZCUlN4RFFVRkRPMEZCUXpWQ0xHVkJRVXNzVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4VlFVRkRMRWRCUVVjc1JVRkJReXhEUVVGRExFVkJRVXM3UVVGRE9VSXNZMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhIUVVGSExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0VlFVTjRRaXhEUVVGRExFTkJRVU03UVVGRFNDeGhRVUZKTEUxQlFVc3NSVUZCUlN4RlFVRkZPMEZCUVVVc2FVSkJRVXNzUlVGQlJTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMVZCUVVVN1VVRkRia003VFVGRFJpeERRVUZET3pzN096dEJRVXRHTEZOQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjN1FVRkRaQ3hWUVVGSExFVkJRVVVzVlVGQlF5eEpRVUZKTEVWQlFVczdRVUZEWWl4aFFVRkpMRmxCUVZrc1IwRkJSeXhKUVVGSkxGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0QlFVTjBReXhsUVVGTExFOUJRVThzUTBGQlF5eFZRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRVZCUVVzN1FVRkRjRUlzYVVKQlFVc3NUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVOQlFVTTdWVUZEY2tRc1EwRkJReXhEUVVGRE96czdPenRCUVV0SUxHRkJRVWtzVFVGQlN5eEZRVUZGTEVWQlFVVTdRVUZCUlN4cFFrRkJTeXhGUVVGRkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdWVUZCUlR0UlFVTnVRenRCUVVORUxGVkJRVWNzUlVGQlJTeFpRVUZyUWp0aFFVRnFRaXhIUVVGSExHZERRVUZETEVOQlFVTTdZVUZCUXl4SlFVRkpMR2REUVVGRExFTkJRVU03TzBGQlEyaENMR0ZCUVVrc1dVRkJXU3hIUVVGSExFbEJRVWtzVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUTNSRExHVkJRVXNzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGRExFbEJRVWtzUlVGQlF5eERRVUZETEVWQlFVczdRVUZEY0VNc2FVSkJRVXNzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFTkJRVU03VlVGRGRrUXNRMEZCUXl4RFFVRkRPMEZCUTBnc1lVRkJTU3hOUVVGTExFVkJRVVVzUlVGQlJUdEJRVUZGTEdsQ1FVRkxMRVZCUVVVc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFZRVUZGTzFGQlEyNURPMEZCUTBRc1lVRkJUU3hGUVVGRkxGbEJRWEZDTzJGQlFYQkNMRTFCUVUwc1owTkJRVU1zUTBGQlF6dGhRVUZETEVsQlFVa3NaME5CUVVNc1EwRkJRenM3UVVGRGRFSXNZVUZCU1N4WlFVRlpMRWRCUVVjc1NVRkJTU3hSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdRVUZEZEVNc1pVRkJTeXhQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEZWQlFVTXNSMEZCUnl4RlFVRkRMRU5CUVVNc1JVRkJTenRCUVVNNVFpeHBRa0ZCU3l4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNRMEZCUXp0VlFVTXhSQ3hEUVVGRExFTkJRVU03UVVGRFNDeGhRVUZKTEUxQlFVc3NSVUZCUlN4RlFVRkZPMEZCUVVVc2FVSkJRVXNzUlVGQlJTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMVZCUVVVN1VVRkRia003VFVGRFJpeERRVUZET3pzN1FVRkhSaXhUUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITzBGQlExZ3NWVUZCUnl4RlFVRkZMRmxCUVUwN1FVRkRWQ3hsUVVGTExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRha0k3UVVGRFJDeFZRVUZITEVWQlFVVXNWVUZCUXl4SFFVRkhMRVZCUVVzN1FVRkRXaXhsUVVGTExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM0pDTzBGQlEwUXNZVUZCVFN4RlFVRkZMRlZCUVVNc1RVRkJUU3hGUVVGTE8wRkJRMnhDTEdWQlFVc3NSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZETTBJN1RVRkRSaXhEUVVGRE96czdTVUZIU0RzN1owSkJka3ByUWl4TlFVRk5PMEZCTUVwNlFpeFhRVUZOTzJOQlFVRXNaMEpCUVVNc1NVRkJTU3hGUVVGRExFOUJRVThzUlVGQlJUczdPMEZCUTI1Q0xHRkJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NSVUZCUlN4RFFVRkRPMEZCUTJ4Q0xHTkJRVTBzU1VGQlNTeEhRVUZITEVkQlFVTXNRMEZCUXl4RlFVRkZMRWRCUVVjc1IwRkJSeXhKUVVGSkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEVWQlFVYzdRVUZEYmtNc1pVRkJTU3hIUVVGSExFZEJRVWNzU1VGQlNTeExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1FVRkROMElzWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VlVGRGVFSTdRVUZEUkN4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGVkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCU3p0QlFVRkZMR2xDUVVGTExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU03VlVGQlJTeERRVUZETEVOQlFVTTdVVUZEZUVRN08wRkJSVVFzV1VGQlR6dGpRVUZCTEdsQ1FVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVU3UVVGRFlpeGhRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1FVRkRWaXhqUVVGTkxFbEJRVWtzUjBGQlJ5eEhRVUZETEVOQlFVTXNSVUZCUlN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUlVGQlJTeEhRVUZITEVWQlFVVXNSVUZCUnp0QlFVTjRReXhsUVVGSkxFVkJRVVVzUlVGQlJUdEJRVUZGTEdWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVGRk8wRkJRM0JDTEdkQ1FVRk5MRWxCUVVrc1RVRkJUU3hIUVVGRExFTkJRVU1zUlVGQlJTeE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hOUVVGTkxFVkJRVVVzUlVGQlJ6dEJRVU53UkN4alFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRExFMUJRVTBzUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTm9RaXhqUVVGRExFVkJRVVVzUTBGQlF6dFpRVU5NTzFWQlEwWTdVVUZEUmpzN1FVRkZSQ3hwUWtGQldUdGpRVUZCTEhkQ1FVRkhPenM3UVVGRFlpeGhRVUZKTEdGQlFXRXNSMEZCUnl4RlFVRkZMRU5CUVVNN1FVRkRka0lzWVVGQlNTeERRVUZETEU5QlFVOHNRMEZEVml4VlFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFVkJRVXM3UVVGQlJTeDNRa0ZCWVN4SlFVRkpMRU5CUVVNc1RVRkJTeXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTTdWVUZCUlN4RlFVTnFSU3haUVVGTk8wRkJRVVVzZDBKQlFXRXNTVUZCU1N4SlFVRkpMRU5CUVVNN1ZVRkJSU3hEUVVOcVF5eERRVUZETzBGQlEwWXNaMEpCUVU4c1lVRkJZU3hEUVVGRE8xRkJRM1JDT3p0QlFVVkVMRkZCUVVjN1kwRkJRU3hsUVVGSE8wRkJRMG9zWjBKQlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUlVGQlJTeERRVUZETEVOQlFVTTdVVUZEYkVNN08wRkJSVVFzVjBGQlRUdGpRVUZCTEdkQ1FVRkRMRTlCUVU4c1JVRkJSVHRCUVVOa0xHRkJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NUMEZCVHl4SlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU03VVVGRGVFTTdPMEZCUlVjc1YwRkJUVHRaUVVGQkxGbEJRVWM3UVVGRFdDeG5Ra0ZCVHl4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTTdVVUZETDBJN08wRkJSVVFzVjBGQlRUdGpRVUZCTEdkQ1FVRkRMRXRCUVVzc1JVRkJSVHM3UVVGRldpeG5Ra0ZCVHp0QlFVTk1MR05CUVVjc1JVRkJSU3hGUVVGRExFVkJRVWNzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVVN1FVRkRMMElzYVVKQlFVMHNSVUZCUlN4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVTg3VlVGRE4wSXNRMEZCUXp0UlFVTklPenRCUVVWRUxGbEJRVTg3WTBGQlFTeHBRa0ZCUXl4SFFVRkhMRVZCUVVNc1RVRkJUU3hGUVVGRk8wRkJRMnhDTEdkQ1FVRlBMRTFCUVUwc1IwRkJSeXhIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXpzN1VVRkZjRU03TzBGQlJVUXNVVUZCUnpzN096czdPenM3T3pzN1ZVRkJRU3hWUVVGRExFZEJRVWNzUlVGQlJUdEJRVU5RTEdGQlFVa3NTVUZCU1N4SFFVRkhMRVZCUVVVc1EwRkJRenRCUVVOa0xHTkJRVXNzU1VGQlNTeERRVUZETEVkQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMEZCUTJwRExHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1ZVRkRkRU03UVVGRFJDeG5Ra0ZCVHl4SlFVRkpMRU5CUVVNN1VVRkRZanM3UVVGRlJDeFhRVUZOT3pzN096czdPenM3T3p0VlFVRkJMRlZCUVVNc1RVRkJUU3hGUVVGRk8wRkJRMklzWVVGQlNTeEpRVUZKTEVkQlFVY3NSVUZCUlN4RFFVRkRPMEZCUTJRc1kwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdRVUZET1VJc1pVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRWUVVNMVF6dEJRVU5FTEdkQ1FVRlBMRWxCUVVrc1EwRkJRenRSUVVOaU96dEJRVXRITEZOQlFVazdXVUZJUVN4WlFVRkhPMEZCUTFRc1owSkJRVThzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNN1VVRkROVUk3V1VGRFR5eFZRVUZETEVOQlFVTXNSVUZCUlRzN08wRkJRMVlzWVVGQlNTeFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEY2tNc1lVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVWQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wRkJRelZDTEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1ZVRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eEZRVUZMTzBGQlEzQkNMR1ZCUVVrc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJUdEJRVU5xUXl4dFFrRkJTeXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTNKRE8xVkJRMFlzUTBGQlF5eERRVUZETzFGQlEwbzdPMEZCUzBjc1dVRkJUenRaUVVoQkxGbEJRVWM3UVVGRFdpeG5Ra0ZCVHl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXp0UlFVTXZRanRaUVVOVkxGVkJRVU1zUTBGQlF5eEZRVUZGT3pzN1FVRkRZaXhoUVVGSkxGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU55UXl4aFFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRla0lzWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4VlFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFVkJRVXM3UVVGRGNFSXNaVUZCU1N4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRk8wRkJRMnBETEcxQ1FVRkxMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEY2tNN1ZVRkRSaXhEUVVGRExFTkJRVU03VVVGRFNqczdPenRWUVhoUWEwSXNUVUZCVFRzN08ydENRVUZPTEUxQlFVMHNRenM3T3pzN08wRkRNVUl6UWl4aFFVRlpMRU5CUVVNN096czdPenM3TzB0QlJVNHNTVUZCU1N4MVEwRkJUU3hEUVVGak96dExRVU40UWl4TFFVRkxMSFZEUVVGTkxFVkJRVk03TzB0QlJVNHNVVUZCVVR0QlFVVmtMRmxCUmswc1VVRkJVU3hIUVVWMVF6dFRRVUZ3UkN4UlFVRlJMR2REUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hEUVVGRE8xTkJRVVVzU1VGQlNTeG5RMEZCUXl4SlFVRkpPMU5CUVVVc1VVRkJVU3huUTBGQlF5eExRVUZMT3pzeVFrRkdOME1zVVVGQlVUczdRVUZIY2tJc1UwRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eFJRVUZSTEVOQlFVTTdRVUZEZGtJc1UwRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRk8wRkJReTlDTEZkQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdUVUZETjBJN1FVRkRSQ3hUUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXp0QlFVTnNRaXhUUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEZGQlFWRXNRMEZCUXpzN1FVRkZla0lzVTBGQlNTeERRVUZETEZOQlFWTXNSMEZCUnl4SlFVRkpMRXRCUVVzc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03TzBGQlJYUkVMRk5CUVVrc1EwRkJReXhYUVVGWExFZEJRVWM3UVVGRGFrSXNWMEZCVFN4RFFVRkRPMEZCUTFBc1lVRkJVU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRPMEZCUXpsQ0xHTkJRVk1zUlVGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hIUVVGRExFTkJRVU1zUTBGQlF6dEJRVU5xUXl4bFFVRlZMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNN1RVRkRkRU1zUTBGQlF6czdRVUZGUml4VFFVRkpMRWxCUVVrc1EwRkJReXhSUVVGUkxFdEJRVWNzUzBGQlN5eEZRVUZGTzBGQlEzcENMRmRCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenROUVVNNVFpeE5RVUZOTzBGQlEwd3NWMEZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETzAxQlEzaENPMGxCUjBvN08yZENRVEZDWjBJc1VVRkJVVHRCUVdkRGNrSXNVMEZCU1R0WlFVcEJMRmxCUVVjN1FVRkRWQ3huUWtGQlR5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMUZCUTI1Q08xbEJSVThzVlVGQlF5eEpRVUZKTEVWQlFVVTdRVUZEV0N4aFFVRkpMRVZCUVVVc1NVRkJTU3hMUVVGTExFbEJRVWtzU1VGQlNTeEpRVUZKTEV0QlFVc3NUVUZCVFN4SlFVRkpMRWxCUVVrc1MwRkJTeXhSUVVGUkxFbEJRVWtzU1VGQlNTeExRVUZMTEU5QlFVOHNRMEZCUXl4RlFVRkZPMEZCUXpsRkxHdENRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMQ3RFUVVFclJDeERRVUZETEVOQlFVTTdRVUZETDBVc2EwSkJRVTg3VlVGRFZqdEJRVU5FTEdGQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRE8wRkJRMnhDTEdGQlFVa3NTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJSVHRCUVVOcVFpeGxRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdWVUZET1VJN1VVRkRTanM3UVVGTlJ5eFZRVUZMTzFsQlNrRXNXVUZCUnp0QlFVTldMR2RDUVVGUExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8xRkJRMjVETzFsQlJWRXNWVUZCUXl4RFFVRkRMRVZCUVVVN1FVRkRXQ3hoUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzaERPenRCUVVWRUxGVkJRVXM3WTBGQlFTeHBRa0ZCUnp0QlFVTk9MR0ZCUVVrc1NVRkJTU3hEUVVGRExGRkJRVkVzUzBGQlJ5eExRVUZMTEVWQlFVVTdRVUZEZWtJc1pVRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRemRDTEd0Q1FVRlBMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dFZRVU53UWp0QlFVTkVMR0ZCUVVrc1EwRkJReXhSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRE4wTXNZVUZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUXpkQ0xHZENRVUZQTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNN1VVRkRia0k3TzBGQlJVUXNUMEZCUlR0alFVRkJMR05CUVVjN1FVRkRTQ3hoUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdRVUZEYUVJc1lVRkJTU3hEUVVGRExGRkJRVkVzU1VGQlNTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJRenRCUVVOd1F5eG5Ra0ZCVHl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRE8xRkJRMjVDT3p0QlFVVkVMRk5CUVVrN1kwRkJRU3huUWtGQlJ6dEJRVU5NTEdGQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJRenRCUVVOb1FpeGhRVUZKTEVsQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1EwRkJReXhGUVVGRk8wRkJRM0pDTEdWQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hKUVVGSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRPMVZCUXpORk8wRkJRMFFzWjBKQlFVOHNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJRenRSUVVOdVFqczdRVUZGUkN4WFFVRk5PMk5CUVVFc2EwSkJRVWM3UVVGRFVDeGhRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGREwwTXNaMEpCUVU4c1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF6dFJRVU51UWpzN1FVRkZSQ3hWUVVGTE8yTkJRVUVzYVVKQlFVYzdRVUZEVGl4aFFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJRenRCUVVONFF5eGhRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETzBGQlEzSkRMR0ZCUVVrc1EwRkJReXhSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenRCUVVOMFF5eG5Ra0ZCVHl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRE8xRkJRMjVDT3pzN096czdPMEZCUVVFN096czdWVUZ5Um1kQ0xGRkJRVkU3T3p0clFrRkJVaXhSUVVGUkxFTTdPenM3T3p0QlEwdzNRaXhoUVVGWkxFTkJRVU03T3pzN096czdPMHRCUlU0c1NVRkJTU3gxUTBGQlRTeERRVUZqT3p0TFFVVldMRXRCUVVzN1FVRkZXQ3hqUVVaTkxFdEJRVXNzUjBGRmMwTTdZVUZCYUVRc1IwRkJSeXhuUTBGQlF5eERRVUZETzJGQlFVVXNSMEZCUnl4blEwRkJReXhEUVVGRE8yRkJRVVVzUzBGQlN5eG5RMEZCUXl4RFFVRkRPMkZCUVVVc1UwRkJVeXhuUTBGQlF5eERRVUZETzJGQlFVVXNTVUZCU1N4blEwRkJReXhMUVVGTE96c3JRa0ZHZWtNc1MwRkJTenM3UVVGSGJFSXNZVUZCU1N4RFFVRkRMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU03UVVGRFppeGhRVUZKTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1EwRkJRenRCUVVObUxHRkJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTMEZCU3l4RFFVRkRPMEZCUTI1Q0xHRkJRVWtzUTBGQlF5eFRRVUZUTEVkQlFVY3NVMEZCVXl4RFFVRkRPMEZCUXpOQ0xHRkJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMDFCUTNCQ096dHJRa0ZTWjBJc1MwRkJTenRCUVZWMFFpeGhRVUZKTzI5Q1FVRkJMR2RDUVVGSE8wRkJRMGdzY1VKQlFVa3NRMEZCUXl4TFFVRkxMRWxCUVVrc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1UwRkJVeXhGUVVGRkxFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0QlFVTTNSQ3h4UWtGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFVkJRVVU3UVVGRGRrSXNlVUpCUVVrc1NVRkJTU3hEUVVGRExFbEJRVWtzUlVGQlJUdEJRVU5ZTERaQ1FVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTTdjMEpCUTNwQ0xFMUJRVTA3UVVGRFNDdzJRa0ZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNN2MwSkJRekZETzJ0Q1FVTktPenRCUVVWRUxIRkNRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUlVGQlJUdEJRVU4yUWl4NVFrRkJTU3hKUVVGSkxFTkJRVU1zU1VGQlNTeEZRVUZGTzBGQlExZ3NOa0pCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXp0elFrRkRla0lzVFVGQlRUdEJRVU5JTERaQ1FVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJRenR6UWtGRE1VTTdhMEpCUTBvN1FVRkRSQ3gzUWtGQlR5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMk5CUTNKQ096czdPMWxCTlVKblFpeExRVUZMT3pzN2EwSkJRVXdzUzBGQlN5eERPenM3T3pzN1FVTktNVUlzWVVGQldTeERRVUZET3pzN096czdPenRMUVVWT0xFbEJRVWtzZFVOQlFVMHNRMEZCWXpzN1MwRkRlRUlzUzBGQlN5eDFRMEZCVFN4RlFVRlRPenRMUVVWT0xFOUJRVTg3UVVGRllpeGpRVVpOTEU5QlFVOHNSMEZGTWtJN1lVRkJka01zUjBGQlJ5eG5RMEZCUXl4RFFVRkRPMkZCUVVVc1IwRkJSeXhuUTBGQlF5eEZRVUZGTzJGQlFVVXNTVUZCU1N4blEwRkJReXhKUVVGSk8yRkJRVVVzUzBGQlN5eG5RMEZCUXl4TFFVRkxPenNyUWtGR2FFTXNUMEZCVHpzN1FVRkhjRUlzWVVGQlNTeERRVUZETEVkQlFVY3NSMEZCUnl4SFFVRkhMRU5CUVVNN1FVRkRaaXhoUVVGSkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXp0QlFVTm1MR0ZCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUzBGQlN5eERRVUZETzBGQlEyNUNMR0ZCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETzBGQlEycENMR0ZCUVVrc1EwRkJReXhUUVVGVExFZEJRVWNzU1VGQlNTeExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1JVRkJSU3hKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZETDBNc1lVRkJTU3hKUVVGSkxFTkJRVU1zUzBGQlN5eExRVUZITEV0QlFVc3NSVUZCUlR0QlFVTjBRaXhwUWtGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFWQlF6bENMRTFCUVUwN1FVRkRUQ3hwUWtGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRE8xVkJRM2hDTzAxQlEwbzdPMnRDUVdKblFpeFBRVUZQTzBGQk1FSndRaXhoUVVGSk8ydENRVmhCTEZWQlFVTXNTVUZCU1N4RlFVRkZPMEZCUTFnc2NVSkJRVWtzUlVGQlJTeEpRVUZKTEV0QlFVc3NTVUZCU1N4SlFVRkpMRWxCUVVrc1MwRkJTeXhOUVVGTkxFbEJRVWtzU1VGQlNTeExRVUZMTEZGQlFWRXNTVUZCU1N4SlFVRkpMRXRCUVVzc1QwRkJUeXhEUVVGRExFVkJRVVU3UVVGRE9VVXNORUpCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zSzBSQlFTdEVMRU5CUVVNc1EwRkJRenRCUVVNdlJTdzBRa0ZCVHp0clFrRkRWanRCUVVORUxIRkNRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJRenRCUVVOc1FpeHhRa0ZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhGUVVGRk8wRkJRMlFzZVVKQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0clFrRkRPVUk3WTBGRFNqdHJRa0ZGVHl4WlFVRkhPMEZCUTFBc2QwSkJRVThzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0alFVTnlRanM3UVVGRlJDeGpRVUZMTzI5Q1FVRkJMR2xDUVVGSE8wRkJRMDRzY1VKQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1MwRkJSeXhMUVVGTExFVkJRVVU3UVVGRGRFSXNlVUpCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVNM1FpdzBRa0ZCVHl4SlFVRkpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03YTBKQlEzQkNPMEZCUTBRc2NVSkJRVWtzUTBGQlF5eFhRVUZYTEVkQlFVYzdRVUZEYWtJc2VVSkJRVTBzU1VGQlNTeERRVUZETEVkQlFVYzdRVUZEWkN3eVFrRkJVU3hKUVVGSkxFTkJRVU1zUjBGQlJ6dEJRVU5vUWl3MFFrRkJVeXhGUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTTdRVUZETVVNc05rSkJRVlVzU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTTdhMEpCUTNKRExFTkJRVU03UVVGRFJpeHhRa0ZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVNeFF5eHhRa0ZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUXpkQ0xIZENRVUZQTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNN1kwRkRia0k3TzBGQlJVUXNWMEZCUlR0dlFrRkJRU3hqUVVGSE8wRkJRMFFzY1VKQlFVa3NRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJRenRCUVVOaUxIRkNRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWxCUVVrc1NVRkJTU3hEUVVGRExFZEJRVWNzUlVGQlJUdEJRVU40UWl4NVFrRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRPMnRDUVVONlFqdEJRVU5FTEhkQ1FVRlBMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU03WTBGRGNrSTdPMEZCUlVRc1lVRkJTVHR2UWtGQlFTeG5Ra0ZCUnp0QlFVTklMSEZDUVVGSkxFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdRVUZEWWl4eFFrRkJTU3hKUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRVZCUVVVN1FVRkRka0lzZVVKQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF6dHJRa0ZEZWtJN1FVRkRSQ3gzUWtGQlR5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMk5CUTNKQ096dEJRVVZFTEdWQlFVMDdiMEpCUVVFc2EwSkJRVWM3UVVGRFRDeHhRa0ZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRVZCUVVVc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBGQlEzcERMSGRDUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTTdZMEZEY2tJN08wRkJSVVFzWTBGQlN6dHZRa0ZCUVN4cFFrRkJSenRCUVVOS0xIRkNRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETzBGQlF6bENMSEZDUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRE8wRkJRemxDTEhGQ1FVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUTJ4RExIRkNRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTTdRVUZEYmtNc2QwSkJRVThzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0alFVTnlRanM3T3p0WlFYcEZaMElzVDBGQlR6czdPMnRDUVVGUUxFOUJRVThzUXpzN096czdPMEZEVERWQ0xHRkJRVmtzUTBGQlF6czdPenM3T3pzN096czdPMEZCUldJc1MwRkJTU3hIUVVGSExFZEJRVWNzYlVKQlFVOHNRMEZCUXl4RFFVRmhMRU5CUVVNc1EwRkJRenRCUVVOcVF5eExRVUZKTEVsQlFVa3NSMEZCUnl4dFFrRkJUeXhEUVVGRExFTkJRV01zUTBGQlF5eERRVUZETzBGQlEyNURMRXRCUVVrc1UwRkJVeXhIUVVGSExHMUNRVUZQTEVOQlFVTXNRMEZCYlVJc1EwRkJReXhEUVVGRE8wRkJRemRETEV0QlFVa3NTVUZCU1N4SFFVRkhMRzFDUVVGUExFTkJRVU1zUlVGQlowSXNRMEZCUXl4RFFVRkRPenRMUVVONlFpeFhRVUZYTEN0RFFVRk5MRVZCUVhGQ096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenRMUVhsRE4wSXNTMEZCU3p0QlFVVmlMRmxCUmxFc1MwRkJTeXhIUVVWV096SkNRVVpMTEV0QlFVczdPMEZCU1hSQ0xGTkJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN08wRkJSWGhDTEZOQlFVa3NVVUZCVVN4SFFVRkhPMEZCUTJJc1lVRkJVU3hEUVVGRExFZEJRVWNzUlVGQlF5eEhRVUZITEVOQlFVTTdRVUZEYWtJc1kwRkJVeXhIUVVGSE8wRkJRMW9zWVVGQlVTeFZRVUZWTzBGQlEyeENMR2xDUVVGWkxFTkJRMVlzUTBGQlF5eEhRVUZITEVWQlFVTXNSMEZCUnl4RFFVRkRMRVZCUTFRc1EwRkJReXhKUVVGSkxFVkJRVU1zU1VGQlNTeERRVUZETEVWQlExZ3NRMEZCUXl4SFFVRkhMRVZCUVVNc1IwRkJSeXhEUVVGRExFVkJRMVFzUTBGQlF5eEpRVUZKTEVWQlFVTXNTVUZCU1N4RFFVRkRMRVZCUTFnc1EwRkJReXhIUVVGSExFVkJRVU1zUjBGQlJ5eERRVUZETEVWQlExUXNRMEZCUXl4SlFVRkpMRVZCUVVNc1NVRkJTU3hEUVVGRExFVkJRMWdzUTBGQlF5eEhRVUZITEVWQlFVTXNSMEZCUnl4RFFVRkRMRVZCUTFRc1EwRkJReXhKUVVGSkxFVkJRVU1zU1VGQlNTeERRVUZETEVOQlExbzdUVUZEUml4RFFVRkRPenRCUVVWR0xHZERRWFJDYVVJc1MwRkJTeXcyUTBGelFtaENMRk5CUVZNc1JVRkJReXhQUVVGUExFVkJRVU1zVVVGQlVTeEZRVUZGT3p0QlFVVnNReXhUUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITzBGQlExZ3NVVUZCUXl4RlFVRkZMRWxCUVVrc1NVRkJTU3hEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRWRCUVVjc1EwRkJRenRCUVVOMFFpeFJRVUZETEVWQlFVVXNTVUZCU1N4SlFVRkpMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVWQlFVTXNSMEZCUnl4RFFVRkRPMDFCUTNaQ0xFTkJRVU03T3pzN08wRkJTMFlzVTBGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF6czdRVUZGTDBJc1UwRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ6dEJRVU5rTEZGQlFVTXNSVUZCUlN4SlFVRkpMRmRCUVZjc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NSVUZCUXl4WlFVRlpMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTm9SaXhSUVVGRExFVkJRVVVzU1VGQlNTeFhRVUZYTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVU1zVlVGQlZTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VFVGREwwVXNRMEZCUXp0QlFVTkdMRk5CUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eFZRVUZWTEVOQlFVTTdRVUZEYUVRc1UwRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEZWQlFWVXNRMEZCUXpzN096czdRVUZMYUVRc1UwRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRkZCUVZFc1EwRkJRenM3T3pzN1FVRkxka01zVTBGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF6czdPenM3UVVGTGFrTXNVMEZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhGUVVGRkxFTkJRVU03TzBGQlJXcENMRk5CUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6czdRVUZGV2l4VFFVRkpMRU5CUVVNc1pVRkJaU3hGUVVGRkxFTkJRVU03UVVGRGRrSXNVMEZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8wbEJSV1k3TzJGQk4wUnJRaXhMUVVGTE96dG5Ra0ZCVEN4TFFVRkxPMEZCSzBSNFFpeHRRa0ZCWXp0alFVRkJMREJDUVVGSE96dEJRVVZtTEdGQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXpzN1FVRkhha01zWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZET3pzN1FVRkpjRU1zWVVGQlNTeERRVUZETEdWQlFXVXNSMEZCUnl4RlFVRkZMRU5CUVVNN08wRkJSVEZDTEdOQlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUjBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1JVRkJReXhEUVVGRExFVkJRVVVzUlVGQlJUdEJRVU4yUXl4bFFVRkpMR05CUVdNc1IwRkJSeXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPenRCUVVVeFF5eGxRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmRCUVZjc1EwRkJReXhqUVVGakxFTkJRVU1zUTBGQlF6czdRVUZGZWtNc1pVRkJTU3hEUVVGRExHVkJRV1VzUTBGQlF5eEpRVUZKTEVOQlFVTXNZMEZCWXl4RFFVRkRMRU5CUVVNN1ZVRkRNME03VVVGRlJqczdRVUZGUkN4clFrRkJZVHRqUVVGQkxIbENRVUZIT3p0QlFVVldMR0ZCUVVrc1EwRkJReXhoUVVGaExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXpzN1FVRkZkRVFzWVVGQlNTeERRVUZETEZWQlFWVXNSMEZCUnp0QlFVTm9RaXhqUVVGSExFVkJRVVVzUlVGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4aFFVRmhMRWRCUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZEZUVNc1EwRkJRenRCUVVOR0xHRkJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXpzN1FVRkZOME1zWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRNVU1zWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRNME1zWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1IwRkJSeXhGUVVGRExFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN08wRkJSV2hFTEdOQlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUjBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1JVRkJReXhEUVVGRExFVkJRVVVzUlVGQlJUdEJRVU4yUXl4bFFVRkpMR05CUVdNc1IwRkJSeXhKUVVGSkxFTkJRVU1zWlVGQlpTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpkRExHVkJRVWtzVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGREwwSXNlVUpCUVdNc1EwRkJReXhaUVVGWkxFTkJRVU1zU1VGQlNTeEZRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZEZUVRc2VVSkJRV01zUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1FVRkRla1FzZVVKQlFXTXNRMEZCUXl4WlFVRlpMRU5CUVVNc1IwRkJSeXhGUVVGRExFbEJRVWtzUTBGQlF5eGhRVUZoTEVkQlFVTXNSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRek5FTEhsQ1FVRmpMRU5CUVVNc1dVRkJXU3hEUVVGRExHTkJRV01zUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0VlFVTnNSRHM3UVVGRlNDeGhRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRM1pFTEdGQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03T3pzN08wRkJTM1pFTEdGQlFVa3NRMEZCUXl4bFFVRmxMRVZCUVVVc1EwRkJRenRCUVVOMlFpeGhRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1VVRkZha0k3TzBGQlJVUXNiVUpCUVdNN1kwRkJRU3d3UWtGQlJ6czdRVUZGWml4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eGxRVUZsTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU03UVVGRGRFUXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU03TzBGQlJYaEVMR05CUVVzc1NVRkJTU3hEUVVGRExFZEJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFMUJRVTBzUlVGQlF5eERRVUZETEVWQlFVVXNSVUZCUlR0QlFVTjJReXhsUVVGSkxHTkJRV01zUjBGQlJ5eEpRVUZKTEVOQlFVTXNaVUZCWlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRemRETEhsQ1FVRmpMRU5CUVVNc1dVRkJXU3hEUVVGRExFMUJRVTBzUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRM2hFTEhsQ1FVRmpMRU5CUVVNc1dVRkJXU3hEUVVGRExGRkJRVkVzUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xVkJRek5FTzFGQlJVWTdPMEZCUlVRc1YwRkJUVHRqUVVGQkxHdENRVUZITzBGQlExQXNZVUZCU1N4RFFVRkRMR1ZCUVdVc1IwRkJSenRCUVVOeVFpeFpRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zVlVGQlZTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxPMEZCUTNaRExGbEJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEZWQlFWVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUVHRWUVVOMlJDeERRVUZET3p0QlFVVkdMR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVsQlFVa3NSVUZCUXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEzQkVMR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVsQlFVa3NSVUZCUXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzSkVPenRCUVVkRUxGVkJRVXM3WTBGQlFTeHBRa0ZCUnp0QlFVTk9MR0ZCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRE8wRkJRM0JETEdGQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUTNCRExHRkJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0UlFVTmlPenRCUVVWRUxGTkJRVWs3WTBGQlFTeG5Ra0ZCUnp0QlFVTk1MR0ZCUVVrc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJUdEJRVU5vUWl4bFFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRMjVETEdWQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN096czdPMEZCUzI1RExHVkJRVWtzUTBGQlF5eGxRVUZsTEVWQlFVVXNRMEZCUXp0QlFVTjJRaXhsUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRGFFTXNaVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8xVkJRMlk3VVVGRFJqczdRVUZGUkN4WlFVRlBPMk5CUVVFc2JVSkJRVWM3UVVGRFVpeGhRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1VVRkRaanM3UVVGRlJ5eGxRVUZWTzFsQlFVRXNXVUZCUnp0QlFVTm1MR2RDUVVGUE8wRkJRMHdzV1VGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExGVkJRVlU3UVVGRE1VSXNXVUZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEZWQlFWVTdWVUZETTBJc1EwRkJRenRSUVVOSU96dEJRVVZFTEc5Q1FVRmxPMk5CUVVFc01rSkJRVWM3T3p0QlFVTm9RaXhoUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4WlFVRlpMRU5CUVVVc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkZMRU5CUVVNN1FVRkRia1FzWVVGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1dVRkJXU3hEUVVGRkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJSU3hEUVVGRE8wRkJRMjVFTEdGQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1JVRkJSU3hEUVVGRE8wRkJRMnBDTEdGQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1QwRkJUeXhEUVVGRExGVkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCU3p0QlFVTTNRaXhsUVVGSkxGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlF5eE5RVUZMTEV0QlFVc3NSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVU1zVFVGQlN5eE5RVUZOTEVWQlFVTXNUVUZCU3l4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUjBGQlF5eE5RVUZMTEV0QlFVc3NSVUZCUXl4RFFVRkRMRU5CUVVNc1IwRkJReXhOUVVGTExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4SlFVRkZMRTFCUVVzc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRGRFa3NaVUZCU1N4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVkQlFVTXNVVUZCVVN4SlFVRkZMRTFCUVVzc1MwRkJTeXhIUVVGRExFMUJRVXNzUzBGQlN5eERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRemxFTEdsQ1FVRkxMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZEZUVJc2FVSkJRVXNzWlVGQlpTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRmxCUVZrc1EwRkJReXhqUVVGakxFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdWVUZETjBRc1EwRkJReXhEUVVGRE8xRkJRMG83TzBGQlQwUXNaVUZCVlRzN096czdPenM3WTBGQlFTeHZRa0ZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhGUVVGRk8wRkJRMlFzWVVGQlNTeFJRVUZSTEVkQlFVYzdRVUZEWWl4WlFVRkRMRVZCUVVVc1EwRkJReXhIUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTzBGQlEyWXNXVUZCUXl4RlFVRkZMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRUdFZRVU5xUWl4RFFVRkRPMEZCUTBZc1lVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8wRkJRMnBETEdGQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0QlFVTnFReXhoUVVGSkxFTkJRVU1zWlVGQlpTeEZRVUZGTEVOQlFVTTdRVUZEZGtJc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRMmhETEdGQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRSUVVObU96dEJRVkZFTEdkQ1FVRlhPenM3T3pzN096czdZMEZCUVN4eFFrRkJReXhMUVVGTExFVkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlRzN1FVRkZja0lzWVVGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTTNRaXhoUVVGSkxFTkJRVU1zWlVGQlpTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF5eEhRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVNM1JDeGhRVUZKTEVOQlFVTXNaVUZCWlN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExGbEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU01UkN4aFFVRkpMRU5CUVVNc1pVRkJaU3hGUVVGRkxFTkJRVU03UVVGRGRrSXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMEZCUTJoRExHRkJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0UlFVVm1PenM3T3pzN096czdRVUZCUVRzN08xVkJlRTVyUWl4TFFVRkxPMGxCUVZNc1UwRkJVenM3YTBKQlFYWkNMRXRCUVVzc1F6czdPenM3TzBGREwwTXhRaXhoUVVGWkxFTkJRVU03T3pzN096czdPenM3UVVGRllpeExRVUZKTEVsQlFVa3NSMEZCUnl4dFFrRkJUeXhEUVVGRExFTkJRV01zUTBGQlF5eERRVUZETzBGQlEyNURMRXRCUVVrc1IwRkJSeXhIUVVGSExHMUNRVUZQTEVOQlFVTXNRMEZCWVN4RFFVRkRMRU5CUVVNN1FVRkRha01zUzBGQlNTeFRRVUZUTEVkQlFVY3NiVUpCUVU4c1EwRkJReXhEUVVGdFFpeERRVUZETEVOQlFVTTdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN1MwRjVRbmhDTEVsQlFVazdRVUZGV2l4WlFVWlJMRWxCUVVrc1IwRkZWRHN5UWtGR1N5eEpRVUZKT3p0QlFVbHlRaXhUUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPenRCUVVWNFFpeFRRVUZKTEZGQlFWRXNSMEZCUnp0QlFVTmlMR0ZCUVZFc1EwRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeERRVUZETzAxQlEyaENMRU5CUVVNN08wRkJSVVlzWjBOQlZtbENMRWxCUVVrc05rTkJWV1lzVTBGQlV5eEZRVUZETEU5QlFVOHNSVUZCUXl4UlFVRlJMRVZCUVVVN08wRkJSV3hETEZOQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRE96dEJRVVZ3UWl4VFFVRkpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03T3pzN1FVRkpZaXhUUVVGSkxFTkJRVU1zVjBGQlZ5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZET3pzN1FVRkhNVU1zVTBGQlNTeE5RVUZOTEVOQlFVTXNjMEpCUVhOQ0xFVkJRVVU3UVVGRGJFTXNWMEZCU1N4RFFVRkRMRzFDUVVGdFFpeEhRVUZITEUxQlFVMHNRMEZCUXl4blFrRkJaMElzUTBGQlF5eHRRa0ZCYlVJc1JVRkJSU3hKUVVGSkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMDFCUTJwSExFMUJRVTA3UVVGRFNpeFhRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRXRCUVVzc1EwRkJRenRCUVVOeVFpeFhRVUZKTEVOQlFVTXNZMEZCWXl4RlFVRkZMRU5CUVVNN1RVRkRka0k3T3pzN096czdTVUZYUmp0QlFWaEZPMkZCTVVKblFpeEpRVUZKT3p0blFrRkJTaXhKUVVGSk8wRkJkME4yUWl4dFFrRkJZenRqUVVGQkxEQkNRVUZIT3p0QlFVVm1MR0ZCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVOb1F5eGhRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdRVUZEY0VNc1lVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8wRkJRM0JETEdGQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXpzN1FVRkZjRU1zWVVGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBGQlF5OUNMR0ZCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVNdlFpeGhRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdPMEZCUlM5Q0xHRkJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU5vUXl4aFFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1FVRkRhRU1zWVVGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZET3p0QlFVVm9ReXhoUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4VFFVRlRMRVZCUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRGVFTXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zVTBGQlV5eEZRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNoRExHRkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRk5CUVZNc1JVRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEJRVU40UXl4aFFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGbEJRVmtzUTBGQlF5eFRRVUZUTEVWQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1FVRkRla01zWVVGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WlFVRlpMRU5CUVVNc1UwRkJVeXhGUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEzcERMR0ZCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zV1VGQldTeERRVUZETEZOQlFWTXNSVUZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenM3UVVGRmVrTXNZVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhaUVVGWkxFTkJRVU1zU1VGQlNTeEZRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVNc1EwRkJReXhIUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzBGQlEyaEVMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEVsQlFVa3NSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGRExFTkJRVU1zUjBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTm9SQ3hoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRVZCUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0QlFVTTVReXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZsQlFWa3NRMEZCUXl4VFFVRlRMRVZCUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03TzBGQlJUTkRMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEVsQlFVa3NSVUZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGRExFTkJRVU1zUjBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0QlFVTm9SQ3hoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlF5eERRVUZETEVkQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRhRVFzWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1IwRkJSeXhGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1FVRkRPVU1zWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1UwRkJVeXhGUVVGRExFdEJRVXNzUTBGQlF5eERRVUZET3p0QlFVVXpReXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlF5eERRVUZETEVkQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1FVRkRhRVFzWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVTXNRMEZCUXl4SFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRMmhFTEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hEUVVGRExFZEJRVWNzUlVGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8wRkJRemxETEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hEUVVGRExGTkJRVk1zUlVGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXpzN1FVRkhNME1zWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1kwRkJZeXhGUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEyeEZMR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEdOQlFXTXNSVUZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOc1JTeGhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhqUVVGakxFVkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdPMEZCUld4RkxHRkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU4yUXl4aFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eE5RVUZOTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNN1FVRkRka01zWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZET3p0QlFVVjJReXhoUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZsQlFWa3NRMEZCUXl4alFVRmpMRVZCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGJrVXNZVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhaUVVGWkxFTkJRVU1zWTBGQll5eEZRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTI1RkxHRkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNXVUZCV1N4RFFVRkRMR05CUVdNc1JVRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6czdRVUZGYmtVc1lVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RlFVRkZMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRM2hETEdGQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1dVRkJXU3hEUVVGRExFMUJRVTBzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTjRReXhoUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZsQlFWa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03TzBGQlIzaERMR0ZCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NSVUZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlF6RkRMR0ZCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGRExFTkJRVU1zUjBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTTNReXhoUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZsQlFWa3NRMEZCUXl4WFFVRlhMRVZCUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRE5VTXNZVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhaUVVGWkxFTkJRVU1zWVVGQllTeEZRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMEZCUXpsRExHRkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNXVUZCV1N4RFFVRkRMR2RDUVVGblFpeEZRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTJoRUxHRkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNXVUZCV1N4RFFVRkRMRk5CUVZNc1JVRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEJRVU42UXl4aFFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGbEJRVmtzUTBGQlF5eGhRVUZoTEVWQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1FVRkRhRVFzWVVGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WFFVRlhMRWRCUVVjc1RVRkJUU3hEUVVGRE96dEJRVWRvUXl4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1FVRkRka01zWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzBGQlEzWkRMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenM3UVVGRmRrTXNZVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUTNCRExHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dEJRVU53UXl4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN08wRkJSWEJETEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTnlReXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRGNrTXNZVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPenRCUVVWeVF5eGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdVVUZGZEVNN08wRkJSVVFzYlVKQlFXTTdZMEZCUVN3d1FrRkJSenM3UVVGRlppeGhRVUZKTEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVN1FVRkRhRUlzWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRPMEZCUTNoRUxHVkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVUwc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNCRUxHVkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVUwc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNCRUxHVkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVUwc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNCRUxHVkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RFFVRkRMRkZCUVZFc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNSRUxHVkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RFFVRkRMRkZCUVZFc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNSRUxHVkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RFFVRkRMRkZCUVZFc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNSRUxHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRkZCUVZFc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTI1RUxHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRkZCUVZFc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTI1RUxHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRkZCUVZFc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTI1RUxHVkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNXVUZCV1N4RFFVRkRMRkZCUVZFc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNCRUxHVkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNXVUZCV1N4RFFVRkRMRkZCUVZFc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNCRUxHVkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNXVUZCV1N4RFFVRkRMRkZCUVZFc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNCRUxHVkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVUwc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMVZCUTI1RUxFMUJRVTA3UVVGRFRDeGxRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhsUVVGbExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNN1FVRkRkRVFzWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1RVRkJUU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1FVRkRNVVFzWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1RVRkJUU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1FVRkRNVVFzWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1RVRkJUU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1FVRkRNVVFzWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1VVRkJVU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1FVRkROVVFzWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1VVRkJVU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1FVRkROVVFzWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1VVRkJVU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1FVRkROVVFzWlVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1VVRkJVU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1FVRkRla1FzWlVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1VVRkJVU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1FVRkRla1FzWlVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1VVRkJVU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1FVRkRla1FzWlVGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WlFVRlpMRU5CUVVNc1VVRkJVU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1FVRkRNVVFzWlVGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WlFVRlpMRU5CUVVNc1VVRkJVU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1FVRkRNVVFzWlVGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WlFVRlpMRU5CUVVNc1VVRkJVU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1FVRkRNVVFzWlVGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WlFVRlpMRU5CUVVNc1RVRkJUU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1ZVRkRla1E3VVVGRlJqczdRVUZGUkN4WFFVRk5PMk5CUVVFc1owSkJRVU1zUTBGQlF5eEZRVUZGTzBGQlExSXNZVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRE96dEJRVVZtTEdWQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03UVVGRFppeGxRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRE8wRkJRMmhDTEdWQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU03T3p0QlFVZG9RaXhaUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNM1FpeFpRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU0zUWl4WlFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRWRCUVVjc1JVRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdPMEZCUnpWQ0xHVkJRVWtzV1VGQldTeEhRVUZITzBGQlEycENMR3RDUVVGTExFVkJRVVVzU1VGQlNTeERRVUZETEVWQlFVVXNSMEZCUXl4SFFVRkhPMEZCUTJ4Q0xHZENRVUZITEVWQlFVVXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJSU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRVZCUVVNc1IwRkJSeXhGUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVkQlFVTXNSMEZCUnl4RlFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFZEJRVU1zUjBGQlJ5eERRVUZETEVWQlFVY3NTVUZCU1N4RFFVRkRMRVZCUVVVc1IwRkJReXhIUVVGSExFVkJRVVVzU1VGQlNTeERRVUZETEVWQlFVVXNSMEZCUXl4SFFVRkhMRU5CUVVVN1dVRkRla1lzUTBGQlF6dEJRVU5HTEdWQlFVa3NZVUZCWVN4SFFVRkhPMEZCUTJ4Q0xHdENRVUZMTEVWQlFVVXNTVUZCU1N4RFFVRkRMRVZCUVVVc1IwRkJReXhIUVVGSE8wRkJRMnhDTEdkQ1FVRkhMRVZCUVVVc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlJTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1JVRkJReXhIUVVGSExFVkJRVU1zUTBGQlF5eEZRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRWRCUVVNc1IwRkJSeXhGUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVkQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVjc1NVRkJTU3hEUVVGRExFVkJRVVVzUjBGQlF5eEhRVUZITEVWQlFVVXNTVUZCU1N4RFFVRkRMRVZCUVVVc1IwRkJReXhIUVVGSExFTkJRVVU3V1VGRGVrWXNRMEZCUXpzN1FVRkZSaXhsUVVGSkxGVkJRVlVzUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1JVRkJSU3hKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhGUVVGRkxGbEJRVmtzUTBGQlF5eExRVUZMTEVWQlFVVXNXVUZCV1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRek5LTEdWQlFVa3NWMEZCVnl4SFFVRkhMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUlVGQlJTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eEZRVUZGTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVWQlFVVXNZVUZCWVN4RFFVRkRMRXRCUVVzc1JVRkJSU3hoUVVGaExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdPMEZCUlRsS0xHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVVjc1JVRkJSU3hWUVVGVkxFTkJRVU1zUTBGQlF6dEJRVU40UXl4bFFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZITEVWQlFVVXNWMEZCVnl4RFFVRkRMRU5CUVVNN08wRkJUVEZETEhWQ1FVRlpMRWRCUVVjN1FVRkRZaXhyUWtGQlN5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RlFVRkZMRWRCUVVNc1IwRkJSenRCUVVOc1FpeG5Ra0ZCUnl4RlFVRkZMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhGUVVGRExFZEJRVWNzUlVGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4SFFVRkRMRWRCUVVjc1JVRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeEhRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkhMRWxCUVVrc1EwRkJReXhGUVVGRkxFZEJRVU1zUjBGQlJ5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RlFVRkZMRWRCUVVNc1IwRkJSeXhEUVVGRk8xbEJRM3BHTEVOQlFVTTdRVUZEUml4M1FrRkJZU3hIUVVGSE8wRkJRMlFzYTBKQlFVc3NSVUZCUlN4SlFVRkpMRU5CUVVNc1JVRkJSU3hIUVVGRExFZEJRVWM3UVVGRGJFSXNaMEpCUVVjc1JVRkJSU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZGTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhGUVVGRExFZEJRVWNzUlVGQlF5eERRVUZETEVWQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1IwRkJReXhIUVVGSExFVkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNSMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSeXhKUVVGSkxFTkJRVU1zUlVGQlJTeEhRVUZETEVkQlFVY3NSVUZCUlN4SlFVRkpMRU5CUVVNc1JVRkJSU3hIUVVGRExFZEJRVWNzUTBGQlJUdFpRVU42Uml4RFFVRkRPenRCUVVWR0xIRkNRVUZWTEVkQlFVY3NSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFVkJRVVVzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUlVGQlJTeFpRVUZaTEVOQlFVTXNTMEZCU3l4RlFVRkZMRmxCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU4yU2l4elFrRkJWeXhIUVVGSExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NSVUZCUlN4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRVZCUVVVc1lVRkJZU3hEUVVGRExFdEJRVXNzUlVGQlJTeGhRVUZoTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN08wRkJSVEZLTEdWQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFZEJRVWNzUlVGQlJTeFZRVUZWTEVOQlFVTXNRMEZCUXp0QlFVTjRReXhsUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRVZCUVVVc1YwRkJWeXhEUVVGRExFTkJRVU03TzBGQlR6RkRMSFZDUVVGWkxFZEJRVWM3UVVGRFlpeHJRa0ZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhGUVVGRkxFZEJRVU1zUjBGQlJ6dEJRVU5zUWl4blFrRkJSeXhGUVVGRkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eEZRVUZETEVkQlFVY3NSVUZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hIUVVGRExFZEJRVWNzUlVGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4SFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGSExFbEJRVWtzUTBGQlF5eEZRVUZGTEVkQlFVTXNSMEZCUnl4RlFVRkZMRWxCUVVrc1EwRkJReXhGUVVGRkxFZEJRVU1zUjBGQlJ5eERRVUZGTzFsQlEzcEdMRU5CUVVNN1FVRkRSaXgzUWtGQllTeEhRVUZITzBGQlEyUXNhMEpCUVVzc1JVRkJSU3hKUVVGSkxFTkJRVU1zUlVGQlJTeEhRVUZETEVkQlFVYzdRVUZEYkVJc1owSkJRVWNzUlVGQlJTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEZRVUZETEVkQlFVY3NSVUZCUXl4RFFVRkRMRVZCUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUjBGQlF5eEhRVUZITEVWQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1IwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJ5eEpRVUZKTEVOQlFVTXNSVUZCUlN4SFFVRkRMRWRCUVVjc1JVRkJSU3hKUVVGSkxFTkJRVU1zUlVGQlJTeEhRVUZETEVkQlFVY3NRMEZCUlR0WlFVTjZSaXhEUVVGRE96dEJRVVZHTEhGQ1FVRlZMRWRCUVVjc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eEZRVUZGTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NSVUZCUlN4WlFVRlpMRU5CUVVNc1MwRkJTeXhGUVVGRkxGbEJRVmtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0QlFVTjJTaXh6UWtGQlZ5eEhRVUZITEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1JVRkJSU3hKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFVkJRVVVzWVVGQllTeERRVUZETEV0QlFVc3NSVUZCUlN4aFFVRmhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03TzBGQlJURktMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NSVUZCUlN4VlFVRlZMRU5CUVVNc1EwRkJRenRCUVVONFF5eGxRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGSExFVkJRVVVzVjBGQlZ5eERRVUZETEVOQlFVTTdPenM3T3pzN096czdPenM3T3pzN096dEJRWFZDTVVNc1pVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVVTdRVUZEYkVJc1kwRkJReXhGUVVGRkxFTkJRVU03UVVGRFNpeGpRVUZETEVWQlFVVXNRMEZCUXp0QlFVTktMR05CUVVNc1JVRkJSU3hEUVVGRE8xbEJRMHdzUTBGQlF5eERRVUZETzFWQlJVbzdVVUZGUmpzN1FVRkZSQ3hWUVVGTE8yTkJRVUVzYVVKQlFVYzdRVUZEVGl4aFFVRkpMRTFCUVUwc1EwRkJReXh6UWtGQmMwSXNSVUZCUlR0QlFVTnFReXhsUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJRenRWUVVNMVFqdFJRVU5HT3p0QlFWZEhMRmRCUVUwN096czdPenM3V1VGS1FTeFpRVUZITzBGQlExZ3NaMEpCUVU4c1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF6dFJRVU55UWp0WlFVVlRMRlZCUVVNc1JVRkJSU3hGUVVGRk8wRkJRMklzWVVGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4RlFVRkZMRU5CUVVNN1FVRkRiRUlzWVVGQlNTeERRVUZETEdOQlFXTXNSVUZCUlN4RFFVRkRPMUZCUTNaQ096dEJRVVZFTEd0Q1FVRmhPMk5CUVVFc2VVSkJRVWM3UVVGRFpDeGxRVUZOTEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zYlVKQlFXMUNMRVZCUVVVc1NVRkJTU3hEUVVGRExGZEJRVmNzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0UlFVTXhSVHM3T3p0VlFYSlNhMElzU1VGQlNUdEpRVUZUTEZOQlFWTTdPMnRDUVVGMFFpeEpRVUZKTEVNN096czdPenRCUXpkQ2VrSXNZVUZCV1N4RFFVRkRPenM3T3pzN096czdPMEZCUldJc1MwRkJTU3hIUVVGSExFZEJRVWNzYlVKQlFVOHNRMEZCUXl4RFFVRmhMRU5CUVVNc1EwRkJRenRCUVVOcVF5eExRVUZKTEVsQlFVa3NSMEZCUnl4dFFrRkJUeXhEUVVGRExFTkJRV01zUTBGQlF5eERRVUZETzBGQlEyNURMRXRCUVVrc1UwRkJVeXhIUVVGSExHMUNRVUZQTEVOQlFVTXNRMEZCYlVJc1EwRkJReXhEUVVGRE8wRkJRemRETEV0QlFVa3NZMEZCWXl4SFFVRkhMRzFDUVVGUExFTkJRVU1zUlVGQk9FSXNRMEZCUXl4RFFVRkRPMEZCUXpkRUxFdEJRVWtzUzBGQlN5eEhRVUZITEcxQ1FVRlBMRU5CUVVNc1EwRkJaU3hEUVVGRExFTkJRVU03TzB0QlNTOUNMRmxCUVZrN1FVRkZUQ3haUVVaUUxGbEJRVmtzUjBGRlJqczdPekpDUVVaV0xGbEJRVms3TzBGQlNXUXNVMEZCU1N4UFFVRlBMRWRCUVVjc1EwRkJReXhQUVVGUExFVkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdPMEZCUldoRExGTkJRVWtzVVVGQlVTeEhRVUZITzBGQlEySXNZVUZCVVN4RFFVRkRMRWRCUVVjc1JVRkJReXhGUVVGRkxFTkJRVU03UVVGRGFFSXNiMEpCUVdVc1ZVRkJWVHRCUVVONlFpeGhRVUZSTEZWQlFWVTdRVUZEYkVJc1kwRkJVeXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTTdRVUZEWkN4aFFVRlJMRU5CUVVNN1FVRkRWQ3hqUVVGVExFTkJRVU03UVVGRFZpeG5Ra0ZCVnl4SlFVRkpPMDFCUTJoQ0xFTkJRVU03TzBGQlJVWXNaME5CYUVKRkxGbEJRVmtzTmtOQlowSlNMRk5CUVZNc1JVRkJReXhQUVVGUExFVkJRVU1zVVVGQlVTeEZRVUZGT3pzN08wRkJTMnhETEZOQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hGUVVGRk96dEJRVVZxUWl4WFFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExGbEJRVTA3UVVGRGFrSXNaVUZCU3l4WFFVRlhMRU5CUVVNc1YwRkJWeXhIUVVGSExFbEJRVWtzUTBGQlF6dEJRVU53UXl4bFFVRkxMRmRCUVZjc1EwRkJReXhoUVVGaExFZEJRVWM3UVVGREwwSXNaMEpCUVVzc1JVRkJSU3hOUVVGTExFdEJRVXM3UVVGRGFrSXNaMEpCUVVzc1JVRkJSU3hOUVVGTExFdEJRVXM3VlVGRGJFSXNRMEZCUXp0QlFVTkdMR1ZCUVVzc1NVRkJTU3hGUVVGRkxFTkJRVU03UVVGRFdpeGxRVUZMTEZkQlFWY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJTeXhMUVVGTExFTkJRVU1zUjBGQlJ5eE5RVUZMTEV0QlFVc3NRMEZCUXp0UlFVTnNSQ3hEUVVGRE8wRkJRMFlzVjBGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4blFrRkJaMElzUTBGQlF5eFhRVUZYTEVWQlFVVXNWVUZCUXl4RFFVRkRMRVZCUVVzN1FVRkRhRVFzWVVGQlNTeE5RVUZMTEZkQlFWY3NRMEZCUXl4WFFVRlhMRVZCUVVVN1FVRkRhRU1zWlVGQlNTeERRVUZETEUxQlFVc3NUVUZCVFN4RlFVRkZPMEZCUTJoQ0xHMUNRVUZMTEUxQlFVMHNSMEZCUnl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFMUJRVXNzVDBGQlR5eERRVUZETEVOQlFVTTdXVUZET1VNN1FVRkRSQ3hwUWtGQlN5eExRVUZMTEVkQlFVY3NSMEZCUnl4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFVkJRVU1zVFVGQlN5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTTFReXhwUWtGQlN5eEpRVUZKTEVWQlFVVXNRMEZCUXp0QlFVTmFMR2xDUVVGTExGZEJRVmNzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCU3l4TFFVRkxMRU5CUVVNc1IwRkJSeXhOUVVGTExFdEJRVXNzUTBGQlF6dEJRVU5xUkN4bFFVRkpMRTFCUVVzc1YwRkJWeXhEUVVGRExHRkJRV0VzUlVGQlJUdEJRVU5zUXl4cFFrRkJTU3hSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4TlFVRkxMRmRCUVZjc1EwRkJReXhoUVVGaExFTkJRVU1zUzBGQlN5eEhRVUZETEUxQlFVc3NTMEZCU3l4RFFVRkRMRU5CUVVNN1FVRkRla1VzYVVKQlFVc3NVVUZCVVN4SFFVRkhMRU5CUVVNc1JVRkJSenRCUVVOc1FpeHRRa0ZCU1N4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eE5RVUZMTEZkQlFWY3NRMEZCUXl4aFFVRmhMRU5CUVVNc1MwRkJTeXhGUVVGRExFMUJRVXNzUzBGQlN5eERRVUZETEVOQlFVTTdRVUZEY0VVc2JVSkJRVWtzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJTeXhYUVVGWExFTkJRVU1zWVVGQllTeERRVUZETEV0QlFVc3NSVUZCUXl4TlFVRkxMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRM0pGTEcxQ1FVRkpMRkZCUVZFc1IwRkJSeXhOUVVGTExGZEJRVmNzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRE8wRkJRMjVFTEcxQ1FVRkpMRk5CUVZNc1IwRkJSeXhOUVVGTExGZEJRVmNzUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRE8wRkJRM0pFTEc5Q1FVRkxMRWxCUVVrc1EwRkJReXhIUVVGRExFZEJRVWNzUlVGQlF5eERRVUZETEVkQlFVTXNTVUZCU1N4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRk8wRkJRM3BDTEhWQ1FVRkxMRmRCUVZjc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVVVzUTBGQlF5eERRVUZETEVkQlFVTXNSMEZCUnl4SlFVRkZMRkZCUVZFc1JVRkJSU3hSUVVGUkxFVkJRVVVzVTBGQlV5eERRVUZGTEVOQlFVTTdRVUZEZWtZc2NVSkJRVWtzWVVGQllTeEhRVUZITEUxQlFVc3NWMEZCVnl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTTdRVUZEZEVRc2RVSkJRVXNzVjBGQlZ5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhoUVVGaExFTkJRVU03UVVGRE0wTXNkVUpCUVVzc1YwRkJWeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVWQlFVTXNZVUZCWVN4RFFVRkRMRU5CUVVNN1owSkJRekZETzJOQlEwWTdXVUZEUmpzN1FVRkZSQ3hwUWtGQlN5eFhRVUZYTEVOQlFVTXNZVUZCWVN4SFFVRkhPMEZCUXk5Q0xHdENRVUZMTEVWQlFVVXNUVUZCU3l4TFFVRkxPMEZCUTJwQ0xHdENRVUZMTEVWQlFVVXNUVUZCU3l4TFFVRkxPMWxCUTJ4Q0xFTkJRVU03VlVGRFNEdFJRVU5HTEVOQlFVTXNRMEZCUXpzN1FVRkhTQ3hYUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEZsQlFVMHNSVUZEYWtJc1EwRkJRenRCUVVOR0xGZEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zVjBGQlZ5eEZRVUZGTEZWQlFVTXNRMEZCUXl4RlFVRkxPMEZCUTJoRUxHRkJRVWtzVFVGQlN5eFhRVUZYTEVOQlFVTXNWMEZCVnl4RlFVRkZPMEZCUTJoRExHVkJRVWtzUTBGQlF5eE5RVUZMTEUxQlFVMHNSVUZCUlR0QlFVTm9RaXh0UWtGQlN5eE5RVUZOTEVkQlFVY3NSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhOUVVGTExFOUJRVThzUTBGQlF5eERRVUZETzFsQlF6bERPMEZCUTBRc2FVSkJRVXNzUzBGQlN5eEhRVUZITEVkQlFVY3NRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJReXhGUVVGRExFMUJRVXNzVFVGQlRTeERRVUZETEVOQlFVTTdRVUZETlVNc2FVSkJRVXNzUzBGQlN5eEZRVUZGTEVOQlFVTTdRVUZEWWl4cFFrRkJTeXhYUVVGWExFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVc3NTMEZCU3l4RFFVRkRMRWRCUVVjc1RVRkJTeXhMUVVGTExFTkJRVU03VlVGRGJFUTdVVUZEUml4RFFVRkRMRU5CUVVNN08wRkJSMGdzVjBGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4WlFVRk5PMEZCUTI1Q0xHVkJRVXNzVjBGQlZ5eERRVUZETEZkQlFWY3NSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkRja01zWlVGQlN5eFhRVUZYTEVOQlFVTXNZVUZCWVN4SFFVRkhMRXRCUVVzc1EwRkJRenRSUVVONFF5eERRVUZETzBGQlEwWXNWMEZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhuUWtGQlowSXNRMEZCUXl4VFFVRlRMRVZCUVVVc1dVRkJUVHRCUVVNM1F5eGhRVUZKTEUxQlFVc3NWMEZCVnl4RFFVRkRMRmRCUVZjc1JVRkJSVHRCUVVOb1F5eHBRa0ZCU3l4RlFVRkZMRVZCUVVVc1EwRkJRenRCUVVOV0xHbENRVUZMTEZkQlFWY3NRMEZCUXl4aFFVRmhMRWRCUVVjc1MwRkJTeXhEUVVGRE8wRkJRM1pETEdsQ1FVRkxMRmRCUVZjc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlN5eExRVUZMTEVOQlFVTXNSMEZCUnl4TlFVRkxMRXRCUVVzc1EwRkJRenRWUVVOc1JEdFJRVU5HTEVOQlFVTXNRMEZCUXp0QlFVTklMRmRCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1ZVRkJWU3hGUVVGRkxGbEJRVTA3UVVGRE9VTXNZVUZCU1N4TlFVRkxMRmRCUVZjc1EwRkJReXhYUVVGWExFVkJRVVU3UVVGRGFFTXNhVUpCUVVzc1JVRkJSU3hGUVVGRkxFTkJRVU03UVVGRFZpeHBRa0ZCU3l4WFFVRlhMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVXNzUzBGQlN5eERRVUZETEVkQlFVY3NUVUZCU3l4TFFVRkxMRU5CUVVNN1ZVRkRiRVE3VVVGRFJpeERRVUZETEVOQlFVTTdUVUZGU2pzN1FVRkZSQ3hUUVVGSkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTTdTVUZEY0VJN08yRkJia2RITEZsQlFWazdPMmRDUVVGYUxGbEJRVms3UVVGeFIyaENMR2RDUVVGWE8yTkJRVUVzZFVKQlFVYzdPenM3UVVGSldpeGhRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGSExFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZETjBJc1lVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNWMEZCVnl4RlFVRkRMR2RDUVVGblFpeERRVUZETEVOQlFVTTdRVUZEY0VRc1lVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRemxDTEdGQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTTVRaXhoUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4UFFVRlBMRVZCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlF6RkRMR0ZCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zV1VGQldTeERRVUZETEZGQlFWRXNSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03TzBGQlJUVkRMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOcVF5eGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmxCUVZrc1EwRkJReXhYUVVGWExFVkJRVU1zWjBKQlFXZENMRU5CUVVNc1EwRkJRenRCUVVONFJDeGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEYkVNc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRMnhETEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hEUVVGRExFOUJRVThzUlVGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1FVRkRPVU1zWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1VVRkJVU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVVnFSRHM3T3p0VlFYWklSeXhaUVVGWk8wbEJRVk1zWTBGQll6czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenRMUVdsTGNFSXNWMEZCVnp0QlFVVnVRaXhaUVVaUkxGZEJRVmNzUjBGRmFFSTdNa0pCUmtzc1YwRkJWenM3UVVGSk5VSXNVMEZCU1N4UFFVRlBMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6czdRVUZGZUVJc1UwRkJTU3hSUVVGUkxFZEJRVWM3UVVGRFlpeGhRVUZSTEVOQlFVTXNSMEZCUnl4RlFVRkRMRWRCUVVjc1EwRkJRenRCUVVOcVFpeDNRa0ZCYlVJc1EwRkJRenRCUVVOd1FpeFpRVUZQTEVOQlFVTTdRVUZEVWl4WlFVRlBMRU5CUVVNN1FVRkRVaXhoUVVGUkxFTkJRVU03UVVGRFZDeGxRVUZWTEVOQlFVTXNSMEZCUnl4RlFVRkRMRWRCUVVjc1JVRkJReXhIUVVGSExFVkJRVU1zUjBGQlJ5eEZRVUZETEVkQlFVY3NRMEZCUXp0TlFVTm9ReXhEUVVGRE96dEJRVVZHTEdkRFFXWnBRaXhYUVVGWExEWkRRV1YwUWl4VFFVRlRMRVZCUVVNc1QwRkJUeXhGUVVGRExGRkJRVkVzUlVGQlJUczdRVUZGYkVNc1UwRkJTU3hEUVVGRExHZENRVUZuUWl4SFFVRkhMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zWlVGQlpTeERRVUZETzBGQlEzUkVMRk5CUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TlFVRk5MRU5CUVVNN08wRkJSVzVETEZOQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1JVRkJSU3hEUVVGRE96dEJRVVZzUWl4VFFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExFdEJRVXNzUTBGQlF6czdRVUZGZWtJc1UwRkJTU3hEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzBsQlJXSTdPMkZCTVVKclFpeFhRVUZYT3p0blFrRkJXQ3hYUVVGWE8wRkJORUk1UWl4bFFVRlZPMk5CUVVFc2MwSkJRVWM3UVVGRFdDeGhRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRkZCUVZFc1EwRkJReXhoUVVGaExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZETjBNc1lVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJRM1pET3p0QlFVVkVMRzFDUVVGak8yTkJRVUVzTUVKQlFVYzdPMEZCUldZc1lVRkJTU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNN1FVRkROVUlzWVVGQlNTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRVU03UVVGRE5VSXNZVUZCU1N4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTTdPMEZCUlRsQ0xHRkJRVWtzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRVZCUVVVN1FVRkRka0lzWTBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETzBGQlF6RkNMR05CUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJRenRCUVVNeFFpeGxRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTTdWVUZETjBJN08wRkJSVVFzWVVGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4RlFVRkZMRU5CUVVNN08wRkJSV3hDTEdOQlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUjBGQlF5eEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFVkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVTdRVUZEZUVNc1pVRkJTU3hUUVVGVExFZEJRVWNzVVVGQlVTeERRVUZETEdGQlFXRXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenM3UVVGRkwwTXNaVUZCU1N4TlFVRk5MRWRCUVVjc1NVRkJTU3haUVVGWkxFTkJRVU1zVTBGQlV5eEZRVUZGTzBGQlEzSkRMR3RDUVVGTExFVkJRVVVzUTBGQlF5eEhRVUZITEVWQlFVTXNSMEZCUnl4RFFVRkRPMEZCUTJoQ0xHbENRVUZKTEVWQlFVVXNTVUZCU1R0QlFVTldMR2xDUVVGSkxFVkJRVVVzVlVGQlZUdEJRVU5vUWl4M1FrRkJWeXhGUVVGRkxGVkJRVlU3UVVGRGRrSXNhMEpCUVVzc1JVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTnlRaXh2UWtGQlR5eEZRVUZGTEV0QlFVczdRVUZEWkN4elFrRkJVeXhGUVVGRkxFbEJRVWtzUlVGRGFFSXNSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNNVFpeHBRa0ZCVFN4RFFVRkRMRmRCUVZjc1IwRkJSeXhKUVVGSkxFTkJRVU03TzBGQlJURkNMR2xDUVVGTkxFTkJRVU1zUzBGQlN5eEhRVUZITEVOQlFVTXNRMEZCUXp0QlFVTnFRaXhsUVVGSkxFdEJRVXNzUTBGQlF5eE5RVUZOTEVWQlFVVTdRVUZEYUVJc2JVSkJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJRenRCUVVOeVFpeHRRa0ZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETzBGQlEzcENMRzFDUVVGTkxFTkJRVU1zVVVGQlVTeEhRVUZITEUxQlFVMHNRMEZCUXl4UFFVRlBMRWRCUVVjc1RVRkJUU3hEUVVGRExGVkJRVlVzUjBGQlJ5eFpRVUZOTEVWQlFVVXNRMEZCUXp0QlFVTm9SU3h0UWtGQlRTeERRVUZETEV0QlFVc3NSMEZCUnl4TlFVRk5MRU5CUVVNc1NVRkJTU3hIUVVGSExFMUJRVTBzUTBGQlF5eFBRVUZQTEVkQlFVY3NXVUZCVFN4RlFVRkZMRU5CUVVNN1FVRkRka1FzYlVKQlFVMHNRMEZCUXl4UlFVRlJMRWRCUVVjc1RVRkJUU3hEUVVGRExGbEJRVmtzUjBGQlJ5eE5RVUZOTEVOQlFVTXNaVUZCWlN4SFFVRkhMRmxCUVUwc1JVRkJSU3hEUVVGRE8wRkJRekZGTEcxQ1FVRk5MRU5CUVVNc1MwRkJTeXhIUVVGSExFMUJRVTBzUTBGQlF5eFRRVUZUTEVkQlFVY3NUVUZCVFN4RFFVRkRMRmxCUVZrc1IwRkJSeXhaUVVGTkxFVkJRVVVzUTBGQlF6dFpRVU5zUlRzN1FVRkZSQ3hsUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVNeFFpeGxRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmRCUVZjc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dFZRVVZ5UXp0QlFVTkVMR0ZCUVVrc1MwRkJTeXhEUVVGRExFMUJRVTBzUlVGQlJUdEJRVU5vUWl4bFFVRkpMRU5CUVVNc2FVSkJRV2xDTEVWQlFVVXNRMEZCUXp0VlFVTXhRanRSUVVWR096dEJRVVZFTEcxQ1FVRmpPMk5CUVVFc01FSkJRVWM3UVVGRFppeGpRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFZEJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRVZCUVVNc1EwRkJReXhGUVVGRkxFVkJRVVU3UVVGRGRFTXNaVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJRenRCUVVOeVF5eGxRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExHTkJRV01zUlVGQlJTeERRVUZETzFWQlEyeERPMUZCUTBZN08wRkJSVVFzYTBKQlFXRTdZMEZCUVN4NVFrRkJSenM3UVVGRlpDeGhRVUZKTEZkQlFWY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRPMEZCUTI1RUxHRkJRVWtzV1VGQldTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNN08wRkJSUzlDTEdOQlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUjBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1JVRkJReXhEUVVGRExFVkJRVVVzUlVGQlJUdEJRVU4wUXl4bFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4WFFVRlhMRVZCUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03UVVGRGFrUXNaVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXp0VlFVTXZRanRSUVVkR096dEJRVVZFTEZkQlFVMDdZMEZCUVN4blFrRkJReXhMUVVGTExFVkJRVU1zUzBGQlN5eEZRVUZGTzBGQlEyeENMR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZETzBGQlEycENMR3RDUVVGVExFdEJRVXM3UVVGRFpDeHJRa0ZCVXl4TFFVRkxPMVZCUTJZc1EwRkJReXhEUVVGRE8xRkJRMG83TzBGQlJVUXNjMEpCUVdsQ08yTkJRVUVzTmtKQlFVYzdPenRCUVVWc1FpeGhRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEZWQlFWVXNSMEZCUnl4WlFVRk5MRVZCUVVVc1EwRkJRenRCUVVNeFJDeGhRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4WlFVRk5MRVZCUVVVc1EwRkJRenRCUVVOcVJDeGhRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhaUVVGWkxFZEJRVWNzU1VGQlNTeERRVUZETEdWQlFXVXNSMEZCUnl4WlFVRk5MRVZCUVVVc1EwRkJRenRCUVVOd1JTeGhRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETEZsQlFWa3NSMEZCUnl4WlFVRk5MRVZCUVVVc1EwRkJRenM3UVVGRk0wUXNZVUZCU1N4RFFVRkRMR05CUVdNc1IwRkJSeXhMUVVGTExFTkJRVU03TzBGQlJUVkNMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1dVRkJXU3hGUVVGRkxGVkJRVU1zUTBGQlF5eEZRVUZMTzBGQlEycEVMR1ZCUVVrc1QwRkJUeXhIUVVGSExGRkJRVkVzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhEUVVGRExFTkJRVU1zWVVGQllTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1JVRkJReXhEUVVGRExFTkJRVU1zWVVGQllTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wRkJReTlHTEdWQlFVa3NUVUZCVFN4SFFVRkhMRTFCUVVzc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTjZReXhsUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNSVUZCUlR0QlFVTnNRaXh0UWtGQlRTeERRVUZETEUxQlFVMHNSMEZCUnl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0WlFVTnNSRHRCUVVORUxHbENRVUZOTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWRCUVVjc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF5eEZRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVOb1JDeHBRa0ZCVFN4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8wRkJRMlFzYVVKQlFVc3NZMEZCWXl4SFFVRkhMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU03UVVGRGNFTXNXVUZCUXl4RFFVRkRMR05CUVdNc1JVRkJSU3hEUVVGRE8wRkJRMjVDTEZsQlFVTXNRMEZCUXl4bFFVRmxMRVZCUVVVc1EwRkJRenRWUVVOeVFpeERRVUZETEVOQlFVTTdPMEZCUlVnc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhYUVVGWExFVkJRVVVzVlVGQlF5eERRVUZETEVWQlFVczdRVUZEYUVRc1pVRkJTU3hQUVVGUExFZEJRVWNzVVVGQlVTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFTkJRVU1zUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1QwRkJUeXhGUVVGRExFTkJRVU1zUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03UVVGREwwWXNaVUZCU1N4TlFVRk5MRWRCUVVjc1RVRkJTeXhQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNwRExHVkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RlFVRkZPMEZCUTJ4Q0xHMUNRVUZOTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWRCUVVjc1EwRkJReXhaUVVGWkxFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMWxCUTJ4RU8wRkJRMFFzYVVKQlFVMHNRMEZCUXl4TFFVRkxMRWRCUVVjc1IwRkJSeXhEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETEVWQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRMmhFTEdWQlFVa3NUMEZCVHl4RFFVRkRMRXRCUVVzc1MwRkJSeXhOUVVGTExHTkJRV01zUlVGQlJUdEJRVU4yUXl4cFFrRkJTU3hOUVVGTExHTkJRV01zU1VGQlNTeERRVUZETEVWQlFVVTdRVUZETlVJc2JVSkJRVWtzVlVGQlZTeEhRVUZITEUxQlFVc3NUMEZCVHl4RFFVRkRMRTFCUVVzc1kwRkJZeXhEUVVGRExFTkJRVU03UVVGRGJrUXNlVUpCUVZVc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF6dGpRVU5xUWp0QlFVTkVMRzFDUVVGTkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTTdXVUZEWml4TlFVRk5PMEZCUTB3c2JVSkJRVTBzUTBGQlF5eExRVUZMTEVWQlFVVXNRMEZCUXp0WlFVTm9RanRCUVVORUxHbENRVUZMTEdOQlFXTXNSMEZCUnl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRE8wRkJRM0JETEZsQlFVTXNRMEZCUXl4alFVRmpMRVZCUVVVc1EwRkJRenRCUVVOdVFpeFpRVUZETEVOQlFVTXNaVUZCWlN4RlFVRkZMRU5CUVVNN1ZVRkRja0lzUTBGQlF5eERRVUZET3p0QlFVVklMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1ZVRkJWU3hGUVVGRkxGVkJRVU1zUTBGQlF5eEZRVUZMT3p0QlFVVXZReXhsUVVGSkxFMUJRVTBzUjBGQlJ5eE5RVUZMTEU5QlFVOHNRMEZCUXl4TlFVRkxMR05CUVdNc1EwRkJReXhEUVVGRE8wRkJReTlETEdsQ1FVRk5MRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU03UVVGRFdpeHBRa0ZCU3l4WFFVRlhMRWRCUVVjc1MwRkJTeXhEUVVGRE8wRkJRM3BDTEdsQ1FVRkxMR05CUVdNc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRE5VSXNXVUZCUXl4RFFVRkRMR05CUVdNc1JVRkJSU3hEUVVGRE8wRkJRMjVDTEZsQlFVTXNRMEZCUXl4bFFVRmxMRVZCUVVVc1EwRkJRenRWUVVOeVFpeERRVUZETEVOQlFVTTdVVUZGU2pzN1FVRlZSeXh2UWtGQlpUczdPenM3T3p0WlFVcEJMRmxCUVVjN1FVRkRjRUlzWjBKQlFVOHNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU03VVVGRE5VSTdXVUZGYTBJc1ZVRkJReXhEUVVGRExFVkJRVVU3UVVGRGNrSXNZVUZCU1N4RFFVRkRMRXRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVWQlFVVTdRVUZETTBJc2EwSkJRVTg3VlVGRFVqdEJRVU5FTEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExGVkJRVU1zVFVGQlRTeEZRVUZITzBGQlF6ZENMR2xDUVVGTkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdWVUZEYkVJc1EwRkJReXhEUVVGRE8wRkJRMGdzWVVGQlNTeERRVUZETEV0QlFVc3NSVUZCUlN4RFFVRkRPMEZCUTJJc1lVRkJTU3hEUVVGRExHZENRVUZuUWl4SFFVRkhMRU5CUVVNc1EwRkJRenRCUVVNeFFpeGhRVUZKTEVOQlFVTXNZMEZCWXl4RlFVRkZMRU5CUVVNN1VVRkRka0k3TzBGQldVY3NVVUZCUnpzN096czdPenM3V1VGSVFTeFpRVUZITzBGQlExSXNaMEpCUVU4c1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNN1VVRkROVUk3V1VGRFRTeFZRVUZETEVOQlFVTXNSVUZCUlR0QlFVTlVMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEZWQlFVTXNUVUZCVFN4RlFVRkhPMEZCUXpkQ0xHbENRVUZOTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJRenRWUVVOb1FpeERRVUZETEVOQlFVTTdVVUZEU2pzN1FVRlZSeXhSUVVGSE96czdPenM3T3p0WlFVaEJMRmxCUVVjN1FVRkRVaXhuUWtGQlR5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF6dFJRVU0xUWp0WlFVTk5MRlZCUVVNc1EwRkJReXhGUVVGRk8wRkJRMVFzWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4UFFVRlBMRU5CUVVNc1ZVRkJReXhOUVVGTkxFVkJRVWM3UVVGRE4wSXNhVUpCUVUwc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF5eERRVUZETzFWQlEyaENMRU5CUVVNc1EwRkJRenRSUVVOS096dEJRVlZITEZOQlFVazdPenM3T3pzN08xbEJTRUVzV1VGQlJ6dEJRVU5VTEdkQ1FVRlBMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRPMUZCUXpkQ08xbEJRMDhzVlVGQlF5eERRVUZETEVWQlFVVTdRVUZEVml4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eFZRVUZETEUxQlFVMHNSVUZCUnp0QlFVTTNRaXhwUWtGQlRTeERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1ZVRkRha0lzUTBGQlF5eERRVUZETzFGQlEwbzdPMEZCVlVRc1kwRkJVenM3T3pzN096czdPenM3WTBGQlFTeHRRa0ZCUXl4TFFVRkxMRVZCUVVNc1MwRkJTeXhGUVVGRk8wRkJRM0pDTEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUzBGQlN5eEhRVUZITEV0QlFVc3NRMEZCUXp0QlFVTnNReXhoUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUXp0QlFVTnFRaXhyUWtGQlV5eExRVUZMTzBGQlEyUXNhMEpCUVZNc1MwRkJTenRWUVVObUxFTkJRVU1zUTBGQlF6dFJRVU5LT3p0QlFWRkVMR3RDUVVGaE96czdPenM3T3pzN1kwRkJRU3gxUWtGQlF5eE5RVUZOTEVWQlFVVTdPenRCUVVOd1FpeGhRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRTFCUVUwc1EwRkJRenRCUVVOeVFpeGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGRExFMUJRVTBzUlVGQlF5eERRVUZETEVWQlFVYzdRVUZETDBJc2FVSkJRVTBzUTBGQlF5eExRVUZMTEVkQlFVY3NUVUZCVFN4RFFVRkRMRU5CUVVNc1IwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZEZGtNc2FVSkJRVXNzU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUXp0QlFVTnFRaXh2UWtGQlV5eERRVUZETzBGQlExWXNiMEpCUVZNc1RVRkJUU3hEUVVGRExFdEJRVXM3V1VGRGRFSXNRMEZCUXl4RFFVRkRPMVZCUTBvc1EwRkJReXhEUVVGRE8xRkJRMG83T3pzN1ZVRnNVV3RDTEZkQlFWYzdTVUZCVXl4VFFVRlRPenRyUWtGQk4wSXNWMEZCVnl4RE96czdPenM3UVVNelMyaERMR0ZCUVZrc1EwRkJRenM3T3pzN096czdPenM3TzBGQlJXSXNTMEZCU1N4SFFVRkhMRWRCUVVjc2JVSkJRVThzUTBGQlF5eERRVUZoTEVOQlFVTXNRMEZCUXp0QlFVTnFReXhMUVVGSkxGTkJRVk1zUjBGQlJ5eHRRa0ZCVHl4RFFVRkRMRU5CUVcxQ0xFTkJRVU1zUTBGQlF6dEJRVU0zUXl4TFFVRkpMRWxCUVVrc1IwRkJSeXh0UWtGQlR5eERRVUZETEVWQlFXZENMRU5CUVVNc1EwRkJRenM3UzBGRGVrSXNWMEZCVnl3clEwRkJUU3hGUVVGeFFqczdTMEZGTjBJc1kwRkJZenRCUVVWMFFpeFpRVVpSTEdOQlFXTXNRMEZGY2tJc1NVRkJTU3hGUVVGRExFOUJRVThzUlVGQlF5eFJRVUZSTEVWQlFVVTdNa0pCUm1oQ0xHTkJRV003TzBGQlNTOUNMR2REUVVwcFFpeGpRVUZqTERaRFFVbDZRaXhKUVVGSkxFVkJRVU1zVDBGQlR5eEZRVUZETEZGQlFWRXNSVUZCUlRzN1FVRkZOMElzVTBGQlNTeERRVUZETEZkQlFWY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExGZEJRVmNzUTBGQlF6czdPenRCUVVrM1F5eFRRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zVDBGQlR5eERRVUZET3pzN096czdRVUZOY2tNc1UwRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE96dEJRVVZvU0N4VFFVRkpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03TzBGQlJWb3NVMEZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhKUVVGSkxGZEJRVmNzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFVkJRVU1zU1VGQlNTeERRVUZETEZkQlFWY3NSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZETTBjc1UwRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhWUVVGVkxFTkJRVU03TzBGQlJUZERMRk5CUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNN08wRkJSUzlDTEZOQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0SlFVVm9RenM3WVVFelFtdENMR05CUVdNN08yZENRVUZrTEdOQlFXTTdRVUUyUW1wRExHMUNRVUZqTzJOQlFVRXNNRUpCUVVjN08wRkJSV1lzWVVGQlNTeERRVUZETEVkQlFVY3NSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBGQlF6bENMR0ZCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVOc1F5eGhRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdPMEZCUldwRExHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU51UXl4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1FVRkRka01zWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZET3p0QlFVVndReXhoUVVGSkxFTkJRVU1zWVVGQllTeEZRVUZGTEVOQlFVTTdVVUZKZEVJN08wRkJSVVFzYTBKQlFXRTdZMEZCUVN4NVFrRkJSenM3UVVGSFpDeGhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhYUVVGWExFVkJRVVU3UVVGRE9VSXNaVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVTdRVUZETlVJc2FVSkJRVWtzUTBGQlF5eFhRVUZYTEVkQlFVY3NWVUZCVlN4RFFVRkRPMWxCUXk5Q0xFMUJRVTA3UVVGRFRDeHBRa0ZCU1N4RFFVRkRMRmRCUVZjc1IwRkJSeXhaUVVGWkxFTkJRVU03V1VGRGFrTTdWVUZEUmpzN1FVRkZSQ3hoUVVGSkxFTkJRVU03WVVGQlJTeERRVUZETzJGQlFVVXNRMEZCUXp0aFFVRkZMRU5CUVVNN1lVRkJSU3hUUVVGVE8yRkJRVVVzV1VGQldTeGhRVUZETzBGQlEzaERMR0ZCUVVrc1EwRkJReXhSUVVGUkxFZEJRVWM3UVVGRFpDeG5Ra0ZCU3l4RlFVRkZMRU5CUVVNN1FVRkRVaXhaUVVGRExFVkJRVVVzUTBGQlF6dFZRVU5NTEVOQlFVTTdPMEZCUlVZc1lVRkJTU3hKUVVGSkxFTkJRVU1zVjBGQlZ5eExRVUZMTEZWQlFWVXNSVUZCUlR0QlFVTnVReXhsUVVGSkxFTkJRVU1zVTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRMnBETEZsQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGRExFTkJRVU1zUTBGQlF6dEJRVU5xUWl4WlFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRMDRzV1VGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNN1FVRkRia0lzV1VGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNN1FVRkRaaXhsUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1UwRkJVeXhIUVVGSExFZEJRVWNzUTBGQlF6dEJRVU40UXl4bFFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUjBGQlJ5eERRVUZETEVkQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1IwRkJReXhEUVVGRExFTkJRVU03UVVGRGVrTXNiMEpCUVZNc1IwRkJSeXhaUVVGWkxFZEJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNSMEZCUlN4RFFVRkRMRU5CUVVVc1IwRkJReXhEUVVGRExFZEJRVU1zUzBGQlN5eERRVUZETzBGQlEzSkVMSFZDUVVGWkxFZEJRVWNzUTBGQlF5eEhRVUZETEVOQlFVTXNRMEZCUXp0VlFVTndRaXhOUVVGTk8wRkJRMHdzWlVGQlNTeERRVUZETEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU5zUXl4WlFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRMDRzV1VGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVNc1EwRkJReXhEUVVGRE8wRkJRMnhDTEZsQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRE8wRkJRMllzV1VGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNN1FVRkRiRUlzWlVGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUjBGQlJ5eEhRVUZITEVOQlFVTTdRVUZEZUVNc1pVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRlZCUVZVc1IwRkJReXhEUVVGRExFTkJRVU03UVVGRGRrTXNiMEpCUVZNc1IwRkJSeXhqUVVGakxFZEJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNSMEZCUlN4RFFVRkRMRU5CUVVVc1IwRkJReXhEUVVGRExFZEJRVU1zUjBGQlJ5eERRVUZETzBGQlEzSkVMSFZDUVVGWkxFZEJRVWNzUTBGQlF5eEhRVUZETEVOQlFVTXNRMEZCUXp0VlFVTndRanM3UVVGRlJDeGhRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGSExFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZETjBJc1lVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRemRDTEdGQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExGZEJRVmNzUlVGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0QlFVTTNReXhoUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03UVVGRGVrTXNZVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhaUVVGWkxFTkJRVU1zU1VGQlNTeEZRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRPMEZCUTNwRExHRkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRTlCUVU4c1JVRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU5xUXl4aFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVWQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN08wRkJSV3hETEdGQlFVa3NTVUZCU1N4RFFVRkRMRmRCUVZjc1MwRkJTeXhWUVVGVkxFVkJRVVU3UVVGRGJrTXNaVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eEZRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTJwRExHVkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVVjc1JVRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTI1RUxHVkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RFFVRkRMRTlCUVU4c1JVRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU55UXl4bFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVWQlFVTXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdWVUZETTBRc1RVRkJUVHRCUVVOTUxHVkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVVjc1JVRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU5xUXl4bFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZITEVWQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRha01zWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1QwRkJUeXhGUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1FVRkRka1FzWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1VVRkJVU3hGUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFWQlEzWkRPMEZCUTBRc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNWMEZCVnl4RlFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8wRkJRMnBFTEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzUlVGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXp0QlFVTTNReXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03TzBGQlJUZERMR0ZCUVVrc1NVRkJTU3hEUVVGRExGZEJRVmNzUzBGQlN5eFZRVUZWTEVWQlFVVTdRVUZEYmtNc1pVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJReTlDTEdWQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzUlVGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xVkJRMnhFTEUxQlFVMDdRVUZEVEN4bFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEJRVU5xUkN4bFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1ZVRkRhRU03UVVGRFJDeGhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGSExFVkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenM3UVVGSE5VTXNZVUZCU1N4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRk8wRkJRMnBDTEdWQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRWUVVOMFJEdFJRVVZHT3p0QlFVVkVMRzFDUVVGak8yTkJRVUVzTUVKQlFVYzdPMEZCUldZc1lVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RlFVRkZMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdRVUZEYUVRc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RlFVRkZMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZEZEVRc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RlFVRkZMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZEYmtRc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVWQlFVVTdRVUZEYWtJc1pVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RlFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xVkJRM1pETzFGQlJVWTdPMEZCUlVRc1YwRkJUVHRqUVVGQkxHdENRVUZITzBGQlExQXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVU3UVVGRGFrSXNaVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEZOQlFWTXNSMEZCUXl4SlFVRkpMRU5CUVVNN1ZVRkRka003UVVGRFJDeGhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGSExFVkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenM3UVVGRk5VTXNZVUZCU1N4SlFVRkpMRU5CUVVNc1YwRkJWeXhMUVVGTExGVkJRVlVzUlVGQlJUdEJRVU5zUXl4bFFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRlZCUVZVc1IwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzBGQlEzcEVMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVsQlFVa3NSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1FVRkRMMFFzWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1IwRkJSeXhGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEJRVU5xUlN4bFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVWQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFZRVU14UkN4TlFVRk5PMEZCUTBvc1pVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhWUVVGVkxFZEJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0QlFVTjRSQ3hsUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTnFSQ3hsUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGFrTXNaVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhaUVVGWkxFTkJRVU1zVDBGQlR5eEZRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VlVGRGVrUTdVVUZEUmpzN1FVRkZSQ3hUUVVGSk8yTkJRVUVzWjBKQlFVYzdRVUZEVEN4aFFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF6dEJRVU53UWl4aFFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNVMEZCVXl4SFFVRkRMRWRCUVVjc1EwRkJRenRCUVVOeVF5eGhRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETzBGQlEyeERMR0ZCUVVrc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF6dFJRVU5rT3p0QlFVVkVMRlZCUVVzN1kwRkJRU3hwUWtGQlJ6dEJRVU5PTEdGQlFVa3NTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSVHRCUVVOb1FpeGxRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZEYWtNc1pVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRmxCUVZrc1EwRkJSU3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUlN4RFFVRkRPMEZCUXpkRUxHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFZRVU5vUXp0UlFVTkdPenRCUVVWRUxFOUJRVVU3WTBGQlFTeGpRVUZITzBGQlEwZ3NZVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRGNrSXNZVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8xRkJRMlk3TzBGQlJVY3NaVUZCVlR0WlFVRkJMRmxCUVVjN1FVRkRaaXhuUWtGQlR5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRlZCUVZVc1EwRkJRenRSUVVNdlFqczdRVUZWUnl4VlFVRkxPenM3T3pzN096dFpRVWhCTEZsQlFVYzdRVUZEVml4blFrRkJUeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXp0UlFVTXhRanRaUVVOUkxGVkJRVU1zUTBGQlF5eEZRVUZGTzBGQlExZ3NZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEZEVJc1lVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhWUVVGVkxFTkJRVU03UVVGRE4wTXNZVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8xRkJRMlk3TzBGQlZVY3NVVUZCUnpzN096czdPenM3V1VGSVFTeFpRVUZITzBGQlExSXNaMEpCUVU4c1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTTdVVUZEZUVJN1dVRkRUU3hWUVVGRExFTkJRVU1zUlVGQlJUdEJRVU5VTEdGQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU55UWpzN1FVRlZSeXhSUVVGSE96czdPenM3T3p0WlFVaEJMRmxCUVVjN1FVRkRVaXhuUWtGQlR5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJRenRSUVVONFFqdFpRVU5OTEZWQlFVTXNRMEZCUXl4RlFVRkZPMEZCUTFRc1lVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNKQ096dEJRVlZITEZOQlFVazdPenM3T3pzN08xbEJTRUVzV1VGQlJ6dEJRVU5VTEdkQ1FVRlBMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETzFGQlEzcENPMWxCUTA4c1ZVRkJReXhEUVVGRExFVkJRVVU3UVVGRFZpeGhRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGRFSTdPMEZCVlVjc1UwRkJTVHM3T3pzN096czdXVUZJUVN4WlFVRkhPMEZCUTFRc1owSkJRVThzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNN1VVRkRNMEk3V1VGRFR5eFZRVUZETEVOQlFVTXNSVUZCUlR0QlFVTldMR0ZCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTjRRanM3T3p0VlFUZFBhMElzWTBGQll6dEpRVUZUTEZOQlFWTTdPMnRDUVVGb1F5eGpRVUZqTEVNN096czdPenRCUTFCdVF5eGhRVUZaTEVOQlFVTTdPenM3T3pzN096czdPenRCUVVWaUxFdEJRVWtzUjBGQlJ5eEhRVUZITEcxQ1FVRlBMRU5CUVVNc1EwRkJZU3hEUVVGRExFTkJRVU03UVVGRGFrTXNTMEZCU1N4SlFVRkpMRWRCUVVjc2JVSkJRVThzUTBGQlF5eERRVUZqTEVOQlFVTXNRMEZCUXp0QlFVTnVReXhMUVVGSkxGTkJRVk1zUjBGQlJ5eHRRa0ZCVHl4RFFVRkRMRU5CUVcxQ0xFTkJRVU1zUTBGQlF6dEJRVU0zUXl4TFFVRkpMRWxCUVVrc1IwRkJSeXh0UWtGQlR5eERRVUZETEVWQlFXZENMRU5CUVVNc1EwRkJRenM3UzBGRGVrSXNWMEZCVnl3clEwRkJUU3hGUVVGeFFqczdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3p0TFFYbENOMElzUjBGQlJ6dEJRVVZZTEZsQlJsRXNSMEZCUnl4SFFVVlNPekpDUVVaTExFZEJRVWM3TzBGQlNYQkNMRk5CUVVrc1QwRkJUeXhIUVVGSExFTkJRVU1zVDBGQlR5eEZRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPenRCUVVWb1F5eFRRVUZKTEZGQlFWRXNSMEZCUnp0QlFVTmlMR0ZCUVZFc1EwRkJReXhIUVVGSExFVkJRVU1zUlVGQlJTeERRVUZETzBGQlEyaENMRzlDUVVGbExGbEJRVms3UVVGRE0wSXNZVUZCVVN4VlFVRlZPMEZCUTJ4Q0xHTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNN1FVRkRaaXhoUVVGUkxFTkJRVU03UVVGRFZDeGpRVUZUTEVOQlFVTTdRVUZEVml4blFrRkJWeXhKUVVGSk8wMUJRMmhDTEVOQlFVTTdPMEZCUlVZc1owTkJhRUpwUWl4SFFVRkhMRFpEUVdkQ1pDeFRRVUZUTEVWQlFVTXNUMEZCVHl4RlFVRkRMRkZCUVZFc1JVRkJSVHM3UVVGRmJFTXNVMEZCU1N4RFFVRkRMRmRCUVZjc1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEZkQlFWY3NRMEZCUXpzN1FVRkZOME1zVTBGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF6czdRVUZGTDBJc1UwRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJRenM3T3p0QlFVbHlReXhUUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRE96dEJRVVV2UWl4VFFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN08wRkJSV2hJTEZOQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenM3UVVGRldpeFRRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRWxCUVVrc1YwRkJWeXhEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RlFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRMnhITEZOQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNWVUZCVlN4RFFVRkRPenRCUVVVM1F5eFRRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZET3p0QlFVVXZRaXhUUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03U1VGRmFFTTdPMkZCZGtOclFpeEhRVUZIT3p0blFrRkJTQ3hIUVVGSE8wRkJlVU4wUWl4dFFrRkJZenRqUVVGQkxEQkNRVUZIT3p0QlFVVm1MR0ZCUVVrc1EwRkJReXhIUVVGSExFZEJRVWNzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVNNVFpeGhRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdPMEZCUldwRExHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU51UXl4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkZja003TzBGQlJVUXNhMEpCUVdFN1kwRkJRU3g1UWtGQlJ6czdRVUZGWkN4aFFVRkpMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVVU3UVVGRGFrSXNaVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xVkJRM1JFT3p0QlFVVkVMR0ZCUVVrc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZPMEZCUXpWQ0xHVkJRVWtzUTBGQlF5eFhRVUZYTEVkQlFVY3NWVUZCVlN4RFFVRkRPMVZCUXk5Q0xFMUJRVTA3UVVGRFRDeGxRVUZKTEVOQlFVTXNWMEZCVnl4SFFVRkhMRmxCUVZrc1EwRkJRenRWUVVOcVF6czdRVUZGUkN4aFFVRkpMRU5CUVVNN1lVRkJSU3hEUVVGRE8yRkJRVVVzUTBGQlF6dGhRVUZGTEVOQlFVTTdZVUZCUlN4VFFVRlRPMkZCUVVVc1dVRkJXU3hoUVVGRE8wRkJRM2hETEdGQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjN1FVRkRaQ3huUWtGQlN5eEZRVUZGTEVOQlFVTTdRVUZEVWl4WlFVRkRMRVZCUVVVc1EwRkJRenRWUVVOTUxFTkJRVU03TzBGQlJVWXNZVUZCU1N4SlFVRkpMRU5CUVVNc1YwRkJWeXhMUVVGTExGVkJRVlVzUlVGQlJUdEJRVU51UXl4bFFVRkpMRU5CUVVNc1UwRkJVeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTJwRExGbEJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOcVFpeFpRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTA0c1dVRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTTdRVUZEYmtJc1dVRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTTdRVUZEWml4bFFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNVMEZCVXl4SFFVRkhMRWRCUVVjc1EwRkJRenRCUVVONFF5eGxRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1IwRkJSeXhEUVVGRExFZEJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRWRCUVVNc1NVRkJTU3hEUVVGRExGVkJRVlVzU1VGQlJTeERRVUZETEVkQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFZEJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZETjBVc2IwSkJRVk1zUjBGQlJ5eFpRVUZaTEVkQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1IwRkJSU3hEUVVGRExFTkJRVVVzUjBGQlF5eERRVUZETEVkQlFVTXNTMEZCU3l4RFFVRkRPMEZCUTNKRUxIVkNRVUZaTEVkQlFVY3NRMEZCUXl4SFFVRkRMRU5CUVVNc1EwRkJRenRWUVVOd1FpeE5RVUZOTzBGQlEwd3NaVUZCU1N4RFFVRkRMRk5CUVZNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXp0QlFVTnNReXhaUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBGQlEwNHNXVUZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFZEJRVU1zUTBGQlF5eERRVUZETzBGQlEyeENMRmxCUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETzBGQlEyWXNXVUZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU03UVVGRGJFSXNaVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEZOQlFWTXNSMEZCUnl4SFFVRkhMRU5CUVVNN1FVRkRlRU1zWlVGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExGVkJRVlVzU1VGQlJTeERRVUZETEVkQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFZEJRVU1zUTBGQlF5eERRVUZETEVkQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRE0wVXNiMEpCUVZNc1IwRkJSeXhqUVVGakxFZEJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNSMEZCUlN4RFFVRkRMRU5CUVVVc1IwRkJReXhEUVVGRExFZEJRVU1zUjBGQlJ5eERRVUZETzBGQlEzSkVMSFZDUVVGWkxFZEJRVWNzUTBGQlF5eEhRVUZETEVOQlFVTXNRMEZCUXp0VlFVTndRanM3UVVGRlJDeGhRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGSExFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZETjBJc1lVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRemRDTEdGQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExGZEJRVmNzUlVGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0QlFVTTNReXhoUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03UVVGRGVrTXNZVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhaUVVGWkxFTkJRVU1zU1VGQlNTeEZRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRPMEZCUTNwRExHRkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRTlCUVU4c1JVRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU5xUXl4aFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVWQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN08wRkJSV3hETEdGQlFVa3NTVUZCU1N4RFFVRkRMRmRCUVZjc1MwRkJTeXhWUVVGVkxFVkJRVVU3UVVGRGJrTXNaVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zU1VGQlNTeEZRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXk5Q0xHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1JVRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMVZCUTJ4RUxFMUJRVTA3UVVGRFRDeGxRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFVkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVOcVJDeGxRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdWVUZEYUVNN1FVRkRSQ3hoUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRVZCUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVVTNRenM3UVVGRlJDeHRRa0ZCWXp0alFVRkJMREJDUVVGSE96dEJRVVZtTEdGQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFMUJRVTBzUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wRkJRMmhFTEdGQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFMUJRVTBzUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE96dEJRVVZ1UkN4aFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJUdEJRVU5xUWl4bFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eE5RVUZOTEVWQlFVTXNZVUZCWVN4RFFVRkRMRU5CUVVNN1ZVRkRPVU03VVVGRlJqczdRVUZGUkN4WFFVRk5PMk5CUVVFc2EwSkJRVWM3UVVGRFVDeGhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSVHRCUVVOcVFpeGxRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eEhRVUZETEVsQlFVa3NRMEZCUXp0VlFVTjJRenRCUVVORUxHRkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVVjc1JVRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPenRCUVVVMVF5eGhRVUZKTEVsQlFVa3NRMEZCUXl4WFFVRlhMRXRCUVVzc1ZVRkJWU3hGUVVGRk8wRkJRMjVETEdWQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVlVGQlZTeEpRVUZGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVkQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkROVVlzWlVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFZRVU5xUlN4TlFVRk5PMEZCUTB3c1pVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhWUVVGVkxFbEJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUjBGQlF5eERRVUZETEVOQlFVTXNSMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU16Uml4bFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFZRVU51UkR0UlFVTkdPenRCUVVkRUxGVkJRVXM3WTBGQlFTeHBRa0ZCUnp0QlFVTk9MR0ZCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRWRCUVVNc1IwRkJSeXhEUVVGRE8wRkJRM0pETEdGQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTTdRVUZEYkVNc1lVRkJTU3hEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzFGQlEySTdPMEZCUlVRc1UwRkJTVHRqUVVGQkxHZENRVUZITzBGQlEwd3NZVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRk8wRkJRMmhDTEdWQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXpzN1FVRkZha01zWlVGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGbEJRVmtzUTBGQlJTeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJSU3hEUVVGRE96dEJRVVUzUkN4bFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlF6dEJRVU5xUWl4clFrRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eExRVUZMTzBGQlEycENMR05CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZGTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0QlFVTm9SQ3hqUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUlN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1dVRkRha1FzUTBGQlF5eERRVUZETzFWQlJVbzdVVUZEUmpzN1FVRkZSQ3haUVVGUE8yTkJRVUVzYlVKQlFVYzdRVUZEVWl4aFFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03VVVGRFpqczdRVUZWUnl4VlFVRkxPenM3T3pzN08xbEJTa0VzV1VGQlJ6dEJRVU5XTEdkQ1FVRlBMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETzFGQlF6RkNPMWxCUlZFc1ZVRkJReXhMUVVGTExFVkJRVVU3UVVGRFppeGhRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEJRVU14UWl4aFFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRlZCUVZVc1EwRkJRenRCUVVNM1F5eGhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJRenRCUVVOcVFpeG5Ra0ZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTE8wRkJRMnBDTEZsQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dEJRVU5vUkN4WlFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlJTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdWVUZEYWtRc1EwRkJReXhEUVVGRE8wRkJRMGdzWVVGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMUZCUTJZN08wRkJSVWNzWlVGQlZUdFpRVUZCTEZsQlFVYzdRVUZEWml4blFrRkJUeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZWQlFWVXNRMEZCUXp0UlFVTXZRanM3T3p0VlFYWk1hMElzUjBGQlJ6dEpRVUZUTEZOQlFWTTdPMnRDUVVGeVFpeEhRVUZITEVNN096czdPenRCUXk5Q2VFSXNZVUZCV1N4RFFVRkRPenM3T3pzN096czdPMEZCUldJc1MwRkJTU3hKUVVGSkxFZEJRVWNzYlVKQlFVOHNRMEZCUXl4RFFVRmpMRU5CUVVNc1EwRkJRenRCUVVOdVF5eExRVUZKTEVkQlFVY3NSMEZCUnl4dFFrRkJUeXhEUVVGRExFTkJRV0VzUTBGQlF5eERRVUZETzBGQlEycERMRXRCUVVrc1UwRkJVeXhIUVVGSExHMUNRVUZQTEVOQlFVTXNRMEZCYlVJc1EwRkJReXhEUVVGRE96dEJRVWMzUXl4TFFVRkpMRXRCUVVzc1IwRkJSeXhsUVVGVExFdEJRVXNzUlVGQlF5eFJRVUZSTEVWQlFVVTdPMEZCUlc1RExFOUJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOcVFpeFBRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGFrSXNUMEZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhSUVVGUkxFTkJRVU03TzBGQlJYcENMRTlCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRCUVVOd1F5eFBRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmxCUVZrc1EwRkJReXhOUVVGTkxFVkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03TzBGQlJUbEVMRTlCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zVDBGQlR5eERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03TzBGQlJXaEVMRTlCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzV1VGQlZ6dEJRVU4yUWl4VFFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUlVGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1EwRkJReXhIUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZETEVOQlFVTXNRMEZCUXp0QlFVTndSU3hUUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGJFTXNRMEZCUXpzN1FVRkZSaXhQUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEZWQlFWTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSVHM3UVVGRmVFSXNVMEZCU1N4RFFVRkRMRU5CUVVNc1IwRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZITEVOQlFVTXNSMEZCU1N4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU51UXl4VFFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVY3NRMEZCUXl4SFFVRkpMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZET3p0QlFVVnVReXhUUVVGSkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlJTeERRVUZETEVWQlFVVTdPMEZCUlhoRExGZEJRVWtzVTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRjRVFzVjBGQlNTeFRRVUZUTEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkRMRU5CUVVNc1EwRkJRenM3UVVGRmNFUXNWMEZCU1N4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNN1FVRkRPVU1zVjBGQlNTeFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdPMEZCUlRsRExGZEJRVWtzU1VGQlNTeEhRVUZITEZOQlFWTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1VVRkJVU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZETTBNc1YwRkJTU3hMUVVGTExFZEJRVWNzVTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUjBGQlJ5eFJRVUZSTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenM3UVVGRmNFVXNWMEZCU1N4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUlVGQlJUdEJRVUZGTEdGQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRVVU3UVVGRGNrTXNWMEZCU1N4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFdEJRVXNzUlVGQlJUdEJRVUZGTEdGQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVjc1MwRkJTeXhEUVVGRE8xRkJRVVU3VFVGRmVFTTdPMEZCUlVRc1UwRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNZMEZCWXl4RlFVRkZMRU5CUVVNN1FVRkRkRU1zVTBGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRha1FzVTBGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRiRVFzUTBGQlF6czdRVUZGUml4UFFVRkpMRU5CUVVNc1kwRkJZeXhIUVVGSExGbEJRVmM3UVVGREwwSXNXVUZCVHp0QlFVTk1MRkZCUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTenRCUVVNdlFpeFJRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRWRCUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwN1RVRkRja01zUTBGQlF6dEpRVU5JTEVOQlFVTTdPMEZCUlVZc1QwRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RlFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFVkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdRVUZET1VJc1QwRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZET3p0QlFVVmtMRTlCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzV1VGQlZ6dEJRVU40UWl4VFFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFOUJRVThzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wRkJRMmhFTEZOQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRha1VzUTBGQlF6dEZRVWRJTEVOQlFVTTdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPMHRCWjBSdFFpeFJRVUZSTzBGQlJXaENMRmxCUmxFc1VVRkJVU3hIUVVWaU96SkNRVVpMTEZGQlFWRTdPMEZCU1hwQ0xGTkJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN08wRkJSWGhDTEZOQlFVa3NVVUZCVVN4SFFVRkhPMEZCUTJJc1lVRkJVU3hEUVVGRExFZEJRVWNzUlVGQlF5eEhRVUZITEVOQlFVTTdRVUZEYWtJc1pVRkJWU3hEUVVOWU8wRkJRME1zVlVGQlF5eEZRVUZGTEVkQlFVYzdRVUZEVGl4VlFVRkRMRVZCUVVVc1IwRkJSenRSUVVOT0xFVkJRMFE3UVVGRFF5eFZRVUZETEVWQlFVVXNTVUZCU1R0QlFVTlFMRlZCUVVNc1JVRkJSU3hIUVVGSE8xRkJRMDRzUlVGRFJEdEJRVU5ETEZWQlFVTXNSVUZCUlN4SlFVRkpPMEZCUTFBc1ZVRkJReXhGUVVGRkxFZEJRVWM3VVVGRFRpeEZRVU5FTzBGQlEwTXNWVUZCUXl4RlFVRkZMRWRCUVVjN1FVRkRUaXhWUVVGRExFVkJRVVVzUjBGQlJ6dFJRVU5PTEVOQlEwUTdUVUZEUVN4RFFVRkRPenRCUVVWR0xHZERRVFZDYVVJc1VVRkJVU3cyUTBFMFFtNUNMRk5CUVZNc1JVRkJReXhQUVVGUExFVkJRVU1zVVVGQlVTeEZRVUZGT3p0QlFVVnNReXhUUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1RVRkJUU3hEUVVGRE96dEJRVVZ1UXl4VFFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFVkJRVVVzUTBGQlF6czdRVUZGYUVJc1UwRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ5eExRVUZMTEVOQlFVTTdPMEZCUlhSQ0xGTkJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0SlFVZGlPenRoUVhaRGEwSXNVVUZCVVRzN1owSkJRVklzVVVGQlVUdEJRWGxETTBJc2JVSkJRV003WTBGQlFTd3dRa0ZCUnpzN08wRkJSMllzWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1ZVRkJReXhMUVVGTExFVkJRVXM3UVVGRE4wSXNaVUZCU1N4SlFVRkpMRWRCUVVjc1NVRkJTU3hMUVVGTExFTkJRVU1zUzBGQlN5eFJRVUZOTEVOQlFVTTdRVUZEYWtNc2FVSkJRVXNzUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRWUVVOMlFpeERRVUZETEVOQlFVTTdPMEZCUlVnc1lVRkJTU3hEUVVGRExGVkJRVlVzUlVGQlJTeERRVUZET3p0QlFVVnNRaXhoUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU03UVVGRGJrTXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpGRExHRkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF6czdRVUZGZGtNc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE96dEJRVVZ3UXl4aFFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNN1FVRkRia01zWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1kwRkJZeXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZET3p0QlFVVTVReXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRmNrTTdPMEZCUlVRc2EwSkJRV0U3WTBGQlFTeDVRa0ZCUnpzN1FVRkZaQ3hqUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1FVRkRkRU1zWlVGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dEJRVU4yUWl4bFFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMVZCUTNSQ096dEJRVVZFTEdGQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRSUVVWbU96dEJRVVZFTEcxQ1FVRmpPMk5CUVVFc01FSkJRVWM3T3p0QlFVVm1MR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEdWQlFXVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF6dEJRVU4wUkN4aFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU55UkN4aFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eE5RVUZOTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU51UkN4aFFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eFZRVUZETEVsQlFVa3NSVUZCU3p0QlFVTXpRaXhsUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZsQlFWa3NRMEZCUXl4TlFVRk5MRVZCUVVNc1RVRkJTeXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdWVUZEZEVRc1EwRkJReXhEUVVGRE8xRkJSVW83TzBGQlJVUXNWMEZCVFR0alFVRkJMR3RDUVVGSE96dEJRVVZRTEdGQlFVa3NRMEZCUXl4aFFVRmhMRVZCUVVVc1EwRkJRenRSUVVOMFFqczdRVUZGUkN4dlFrRkJaVHRqUVVGQkxESkNRVUZIT3pzN1FVRkRhRUlzWVVGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4RlFVRkZMRU5CUVVNN1FVRkRha0lzWVVGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1ZVRkJReXhKUVVGSkxFVkJRVXM3UVVGRE0wSXNhVUpCUVVzc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRWUVVNMVF5eERRVUZETEVOQlFVTTdVVUZEU2pzN1FVRkZSQ3hyUWtGQllUdGpRVUZCTEhsQ1FVRkhPenM3UVVGSFpDeGhRVUZKTEVsQlFVa3NSMEZCUnl4SlFVRkpMRWRCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhIUVVGRExFbEJRVWtzUTBGQlF6czdPenM3UVVGTEwwTXNZVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zVlVGQlF5eEpRVUZKTEVWQlFVczdPMEZCUlROQ0xHVkJRVWtzU1VGQlNTeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1IwRkJSeXhIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRE8xVkJRM2hFTEVOQlFVTXNRMEZCUXpzN08wRkJTVWdzWVVGQlNTeEpRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1IwRkJSeXhIUVVGRkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFZEJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenM3UVVGRmNrVXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPenM3T3p0QlFVdDJReXhoUVVGSkxFbEJRVWtzU1VGQlNTeEhRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVVc1IwRkJSeXhIUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVTXNTVUZCU1N4RFFVRkRPMEZCUXpsRExHRkJRVWtzU1VGQlNTeEpRVUZKTEVkQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJRenM3UVVGRmVrSXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUlhoRE96dEJRVWxFTEZWQlFVczdZMEZCUVN4cFFrRkJSenM3UVVGRlRpeGhRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRXRCUVVzc1EwRkJRenRCUVVOMlFpeGhRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhsUVVGbExFVkJRVVVzUTBGQlF6czdRVUZGZEVNc1lVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRVU1zUTBGQlF5eEhRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhIUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTnVSaXhoUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenM3TzBGQlJ6bENMR0ZCUVVrc1EwRkJReXhsUVVGbExFVkJRVVVzUTBGQlF6dEJRVU4yUWl4aFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1FVRkRha01zWVVGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMUZCUTJRN08wRkJSVVFzVTBGQlNUdGpRVUZCTEdkQ1FVRkhPMEZCUTA0c1lVRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTzBGQlEyWXNaVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVWQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRM0JFTEdWQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRE96dEJRVVZ5UWl4bFFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVkQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1JVRkJReXhEUVVGRExFZEJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRWRCUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBGQlEzQkdMR1ZCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPenRCUVVVM1FpeGxRVUZKTEVOQlFVTXNaVUZCWlN4RlFVRkZMRU5CUVVNN1FVRkRla0lzWlVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBGQlEyaERMR1ZCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFZRVU5rTzFGQlEwUTdPMEZCUlVRc1dVRkJUenRqUVVGQkxHMUNRVUZIT3p0QlFVVlVMR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTzBGQlEycENMR1ZCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRE8xVkJRM1JET3p0QlFVVkJMR0ZCUVVrc1EwRkJReXhsUVVGbExFVkJRVVVzUTBGQlF6dEJRVU4yUWl4aFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1FVRkRha01zWVVGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPenM3UVVGSFpDeGhRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJRenRSUVVOeVFqczdRVUZIUkN4dlFrRkJaVHRqUVVGQkxESkNRVUZITzBGQlEycENMR0ZCUVVrc1dVRkJXU3hIUVVGSExFbEJRVWtzUTBGQlF6czdRVUZGZUVJc1lVRkJTU3hYUVVGWExFZEJRVWNzUzBGQlN5eERRVUZETzBGQlEzaENMR0ZCUVVrc1RVRkJUU3hIUVVGSExFdEJRVXNzUTBGQlF6dEJRVU5zUWl4aFFVRkpMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNSMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRE8wRkJRMmhETEdGQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNSMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRE8wRkJRMjVETEdGQlFVa3NTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU03UVVGRGVFSXNZMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3T3p0QlFVZHdReXhsUVVGSkxGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVWNzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSeXhEUVVGRExFTkJRVU1zUTBGQlJTeERRVUZET3pzN1FVRkhOVVlzWlVGQlNTeFJRVUZSTEVkQlFVY3NWMEZCVnl4RlFVRkZPMEZCUXpOQ0xIZENRVUZYTEVkQlFVY3NVVUZCVVN4RFFVRkRPMEZCUTNaQ0xIbENRVUZaTEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTJwQ0xHMUNRVUZOTEVkQlFVY3NRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEZUVJN1ZVRkZSRHM3TzBGQlIwUXNZVUZCU1N4WFFVRlhMRWRCUVVNc1NVRkJTU3hGUVVGRk96dEJRVVZ1UWl4MVFrRkJXU3hIUVVGSExFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFZEJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPenRCUVVVM1JDeGxRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJReXhaUVVGWkxFVkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NTMEZCU3l4RFFVRkRPMEZCUXpORExHTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN6dEJRVU14UWl4alFVRkRMRVZCUVVVc1EwRkJReXhIUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTk8xbEJRemRDTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOU0xHVkJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRPMVZCUlhaQ096dEJRVVZFTEdkQ1FVRlBMRmxCUVZrc1EwRkJRenRSUVVOd1FqczdRVUZGUkN4clFrRkJZVHRqUVVGQkxIVkNRVUZETEVOQlFVTXNSVUZCUlRzN08wRkJRMllzWVVGQlNTeExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTJRc1lVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNWVUZCUXl4SlFVRkpMRVZCUVVNc1EwRkJReXhGUVVGTE8wRkJRemRDTEdWQlFVa3NUVUZCU3l4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlR0QlFVTjRRaXhyUWtGQlN5eEhRVUZITEVOQlFVTXNSMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRZanRWUVVOR0xFTkJRVU1zUTBGQlF6dEJRVU5JTEdkQ1FVRlBMRXRCUVVzc1EwRkJRenRSUVVOa096dEJRVVZFTEdOQlFWTTdZMEZCUVN4dFFrRkJReXhEUVVGRExFVkJRVVU3TzBGQlJWb3NZVUZCU1N4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRhRVFzWVVGQlNTeFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdPMEZCUlM5RExHRkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRkxGRkJRVkVzUlVGQlJTeFJRVUZSTEVOQlFVVXNRMEZCUXp0UlFVVXhRenM3UVVGTFJDeGxRVUZWT3pzN096czdZMEZCUVN4elFrRkJSenRCUVVOWUxHRkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVZNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF6dEJRVU0xUWl4clFrRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1ZVRkRiRUlzUTBGQlF5eERRVUZETzFGQlEwbzdPMEZCVVVRc1lVRkJVVHM3T3pzN096czdZMEZCUVN4clFrRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eEZRVUZGTzBGQlExb3NZVUZCU1N4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTTdPMEZCUlRsQ0xHRkJRVWtzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXpzN1FVRkZiRUlzWTBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8wRkJRM2hETEdWQlFVa3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMEZCUTNaQ0xHdENRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTFZc2JVSkJRVTA3V1VGRFVEdFZRVU5JT3p0QlFVVkJMR0ZCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NSVUZCUlN4RFFVRkRMRVZCUVVVc1NVRkJTU3hMUVVGTExFTkJRVU03UVVGRGNFTXNXVUZCUXl4RlFVRkZMRU5CUVVNN1FVRkRTaXhaUVVGRExFVkJRVVVzUTBGQlF6dFZRVU5NTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenM3UVVGRlZpeGhRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE96dEJRVVYwUWl4aFFVRkpMRU5CUVVNc1pVRkJaU3hGUVVGRkxFTkJRVU03UVVGRGRrSXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPenRCUVVWb1F5eGhRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1VVRkRaanM3UVVGUFJDeFRRVUZKT3pzN096czdPMk5CUVVFc1kwRkJReXhEUVVGRExFVkJRVVU3TzBGQlJVNHNZVUZCU1N4VFFVRlRMRWRCUVVjc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTjBReXhoUVVGSkxGVkJRVlVzUjBGQlJ5eFRRVUZUTEVkQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpkQ0xHRkJRVWtzVlVGQlZTeEhRVUZITEVOQlFVTXNSVUZCUlR0QlFVTnNRaXh4UWtGQlZTeEhRVUZITEVOQlFVTXNRMEZCUXp0VlFVTm9RanRCUVVORUxHRkJRVWtzVTBGQlV5eEpRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hGUVVGRk8wRkJRMnhETEc5Q1FVRlRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVkQlFVTXNRMEZCUXl4RFFVRkRPMVZCUTJwRE8wRkJRMFFzWVVGQlNTeFZRVUZWTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dEJRVU40UXl4aFFVRkpMRk5CUVZNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMEZCUTNSRExHRkJRVWtzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhGUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETEVWQlFVVXNVMEZCVXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEZUVRc1lVRkJTU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkhMRVZCUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU1zUlVGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRkRVFzWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRGVFSXNaMEpCUVU4c1MwRkJTeXhEUVVGRE8xRkJRMlE3TzBGQlUwUXNZMEZCVXpzN096czdPenM3TzJOQlFVRXNiVUpCUVVNc1MwRkJTeXhGUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVWQlFVVTdRVUZEYmtJc1lVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlF6VkNMR0ZCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZEZEVJc1lVRkJTU3hEUVVGRExHVkJRV1VzUlVGQlJTeERRVUZETzBGQlEzWkNMR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVOb1F5eGhRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1VVRkRaanM3UVVGVFJDeG5Ra0ZCVnpzN096czdPenM3TzJOQlFVRXNjVUpCUVVNc1MwRkJTeXhGUVVGRExFOUJRVThzUlVGQlF5eFBRVUZQTEVWQlFVVTdRVUZEYWtNc1lVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVNc1QwRkJUeXhGUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzBGQlEyaEdMR0ZCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZEZEVJc1lVRkJTU3hEUVVGRExHVkJRV1VzUlVGQlJTeERRVUZETzBGQlEzWkNMR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVOb1F5eGhRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1VVRkRaanM3UVVGUFJDeHBRa0ZCV1RzN096czdPenRqUVVGQkxITkNRVUZETEV0QlFVc3NSVUZCUlR0QlFVTnNRaXhoUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRE8wRkJRelZDTEdGQlFVa3NRMEZCUXl4bFFVRmxMRVZCUVVVc1EwRkJRenRCUVVOMlFpeGhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZEYUVNc1lVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzFGQlEyWTdPMEZCVDBRc1kwRkJVenM3T3pzN096dGpRVUZCTEcxQ1FVRkRMRk5CUVZNc1JVRkJSVHM3TzBGQlEyNUNMR2RDUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RlFVRkZPMEZCUTNoQ0xHVkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03VlVGRGVrSTdRVUZEUkN4clFrRkJVeXhEUVVGRExFOUJRVThzUTBGQlF5eFZRVUZETEV0QlFVc3NSVUZCU3p0QlFVTXpRaXhwUWtGQlN5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1JVRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdWVUZEYUVNc1EwRkJReXhEUVVGRE8wRkJRMGdzWVVGQlNTeERRVUZETEdWQlFXVXNSVUZCUlN4RFFVRkRPMEZCUTNaQ0xHRkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU5vUXl4aFFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03VVVGRFpqczdPenRWUVRkV2EwSXNVVUZCVVR0SlFVRlRMRk5CUVZNN08ydENRVUV4UWl4UlFVRlJMRU03T3pzN096dEJRMnBJTjBJc1lVRkJXU3hEUVVGRE96czdPenM3T3pzN08wRkJSV0lzUzBGQlNTeEhRVUZITEVkQlFVY3NiVUpCUVU4c1EwRkJReXhEUVVGaExFTkJRVU1zUTBGQlF6czdRVUZGYWtNc1MwRkJTU3hUUVVGVExFZEJRVWNzYlVKQlFVOHNRMEZCUXl4RFFVRnRRaXhEUVVGRExFTkJRVU03T3pzN096czdPenM3T3pzN096czdPenM3T3pzN08wdEJkVUp3UXl4UFFVRlBMSFZDUVVGUkxFTkJRVk1zUlVGQmVFSXNUMEZCVHpzN1MwRkZTeXhYUVVGWE8wRkJSVzVDTEZsQlJsRXNWMEZCVnl4SFFVVm9RanN5UWtGR1N5eFhRVUZYT3p0QlFVazFRaXhUUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEU5QlFVOHNSVUZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenM3UVVGRmFFTXNVMEZCU1N4UlFVRlJMRWRCUVVjN1FVRkRZaXhoUVVGUkxFTkJRVU1zUjBGQlJ5eEZRVUZETEVkQlFVY3NRMEZCUXp0TlFVTnNRaXhEUVVGRE96dEJRVVZHTEdkRFFWWnBRaXhYUVVGWExEWkRRVlYwUWl4VFFVRlRMRVZCUVVNc1QwRkJUeXhGUVVGRExGRkJRVkVzUlVGQlJUczdRVUZGYkVNc1UwRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eFBRVUZQTEVWQlFVVXNRMEZCUXpzN1FVRkZla0lzVTBGQlNTeERRVUZETEZGQlFWRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExHTkJRV01zUlVGQlJTeERRVUZETzBGQlF6bERMRk5CUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXp0QlFVTTNRaXhUUVVGSkxFTkJRVU1zV1VGQldTeEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTTdRVUZEY0VRc1UwRkJTU3hEUVVGRExGTkJRVk1zUjBGQlJ5eEpRVUZKTEZWQlFWVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03TzBGQlJXNUVMRk5CUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZET3p0QlFVVnVRaXhUUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEV0QlFVc3NRMEZCUXpzN1FVRkZjRUlzVTBGQlNTeERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMGxCUldJN08yRkJla0pyUWl4WFFVRlhPenRuUWtGQldDeFhRVUZYTzBGQk1rSTVRaXhsUVVGVk8yTkJRVUVzYzBKQlFVYzdRVUZEV0N4aFFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzUjBGQlJ5eERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGREwwTXNZVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXp0UlFVTndRenM3UVVGRlJDeHJRa0ZCWVR0alFVRkJMSGxDUVVGSE8wRkJRMlFzWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUlVGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkROVU03TzBGQlJVUXNiVUpCUVdNN1kwRkJRU3d3UWtGQlJ6dEJRVU5tTEdGQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eGxRVUZsTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU03VVVGRE9VUTdPMEZCUlVRc1YwRkJUVHRqUVVGQkxHdENRVUZIT3p0QlFVVlFMR0ZCUVVrc1NVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJUdEJRVU5tTEdkRFFVRnhRaXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU03VlVGREwwTTdPMEZCUlVRc1lVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdPMEZCUlc1RUxHRkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRk5CUVZNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXp0QlFVTnFSQ3hoUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03TzBGQlJURkdMR0ZCUVVrc1NVRkJTU3hEUVVGRExFMUJRVTBzU1VGQlNTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RlFVRkZPenM3TzBGQlNXcERMR1ZCUVVrc1VVRkJVU3hIUVVGSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zV1VGQllTeERRVUZETzBGQlF5OUVMR1ZCUVVrc1UwRkJVeXhoUVVGRE8wRkJRMlFzWlVGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPenRCUVVWV0xHVkJRVWtzVlVGQlZTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUjBGQlF5eEZRVUZGTEVOQlFVTTdPMEZCUlRsRExHZENRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGRExGVkJRVlVzUlVGQlJUdEJRVU4yUkN4elFrRkJVeXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1JVRkJSU3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhIUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETEVOQlFVTTdRVUZETVVVc2MwSkJRVk1zU1VGQlNTeEhRVUZITEVOQlFVTTdRVUZEYWtJc2MwSkJRVk1zU1VGQlNTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU03TzBGQlJYaERMR2xDUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4VFFVRlRMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTTdRVUZEYmtRc2FVSkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFVkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hIUVVGRExGTkJRVk1zUlVGQlF5eFJRVUZSTEVkQlFVTXNWVUZCVlN4RlFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE96dEJRVVZ1Unl4alFVRkRMRWxCUVVzc1VVRkJVU3hIUVVGRExGVkJRVmNzUTBGQlF6dFpRVU0xUWp0VlFVTkdPMUZCUTBZN08wRkJVVVFzV1VGQlR6czdPenM3T3pzN08yTkJRVUVzYVVKQlFVTXNTVUZCU1N4RlFVRkZPMEZCUTFvc1lVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTzBGQlEyWXNaVUZCU1N4RFFVRkRMRlZCUVZVc1JVRkJSU3hEUVVGRE8xVkJRMjVDTzBGQlEwUXNZVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU03UVVGRGJrSXNZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMEZCUTI1RExHRkJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0UlFVTm1PenRCUVV0RUxHVkJRVlU3T3pzN096dGpRVUZCTEhOQ1FVRkhPMEZCUTFnc1lVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFZRVUZWTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8wRkJRM1JETEdGQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRM0JDT3p0QlFVVkVMRlZCUVVzN1kwRkJRU3hwUWtGQlJ6dEJRVU5PTEdGQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzBGQlF6TkNMR0ZCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFJRVU5tT3p0QlFVVkVMR3RDUVVGaE8yTkJRVUVzZVVKQlFVYzdRVUZEWkN4aFFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFdEJRVXNzUTBGQlF6dFJRVU55UWpzN096dFZRWGhIYTBJc1YwRkJWenRKUVVGVExGTkJRVk03TzJ0Q1FVRTNRaXhYUVVGWExFTTdPenM3T3p0QlF6ZENhRU1zWVVGQldTeERRVUZET3pzN096czdPenM3TzBGQlJXSXNTMEZCU1N4SFFVRkhMRWRCUVVjc2JVSkJRVThzUTBGQlF5eERRVUZoTEVOQlFVTXNRMEZCUXp0QlFVTnFReXhMUVVGSkxFbEJRVWtzUjBGQlJ5eHRRa0ZCVHl4RFFVRkRMRU5CUVdNc1EwRkJReXhEUVVGRE8wRkJRMjVETEV0QlFVa3NVMEZCVXl4SFFVRkhMRzFDUVVGUExFTkJRVU1zUTBGQmJVSXNRMEZCUXl4RFFVRkRPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3p0TFFYZENjRU1zVDBGQlR5eDFRa0ZCVVN4RFFVRlRMRVZCUVhoQ0xFOUJRVTg3TzB0QlJVc3NTMEZCU3p0QlFVVmlMRmxCUmxFc1MwRkJTeXhIUVVWV096SkNRVVpMTEV0QlFVczdPMEZCU1hSQ0xGTkJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNUMEZCVHl4RlFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE96dEJRVVZvUXl4VFFVRkpMRkZCUVZFc1IwRkJSenRCUVVOaUxHRkJRVkVzUTBGQlF5eEZRVUZGTEVWQlFVTXNSMEZCUnl4RFFVRkRPMDFCUTJwQ0xFTkJRVU03TzBGQlJVWXNaME5CVm1sQ0xFdEJRVXNzTmtOQlZXaENMRk5CUVZNc1JVRkJReXhQUVVGUExFVkJRVU1zVVVGQlVTeEZRVUZGT3p0QlFVVnNReXhUUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEU5QlFVOHNSVUZCUlN4RFFVRkRPenRCUVVWNlFpeFRRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRU5CUVVNc1EwRkJRenM3UVVGRmJFSXNVMEZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEhGQ1FVRnhRaXhEUVVGRkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVVXNRMEZCUXpzN1FVRkZjRVVzVTBGQlNTeERRVUZETEZOQlFWTXNSMEZCUnl4RlFVRkZMRU5CUVVNN08wRkJSWEJDTEZWQlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8wRkJRMnhETEZkQlFVa3NVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTTdRVUZETjBNc1YwRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eFBRVUZQTEVOQlFVTXNVVUZCVVN4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRMnhETEdWQlFWRXNRMEZCUXl4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRE8wRkJRM2hDTEdWQlFWRXNRMEZCUXl4eFFrRkJjVUlzUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZEYmtNc1YwRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eEpRVUZKTEVOQlFVVXNVVUZCVVN4RFFVRkZMRU5CUVVNN1RVRkRha003UVVGRFJDeFRRVUZKTEVOQlFVTXNXVUZCV1N4SFFVRkhMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNhVUpCUVdsQ0xFTkJRVU03UVVGRGVFUXNVMEZCU1N4RFFVRkRMRk5CUVZNc1IwRkJSeXhKUVVGSkxGbEJRVmtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN096czdPenM3T3pzN096czdRVUZoY2tRc1UwRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTTdPMEZCUlc1Q0xGTkJRVWtzUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4UlFVRlJMRU5CUVVNN08wRkJSWEJDTEZOQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenM3UVVGRldpeFRRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NSMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRE96dEJRVVV4UkN4VFFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03U1VGRlpqczdZVUZ1Ukd0Q0xFdEJRVXM3TzJkQ1FVRk1MRXRCUVVzN1FVRnhSSGhDTEdWQlFWVTdZMEZCUVN4elFrRkJSenRCUVVOWUxHRkJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NTVUZCU1N4SFFVRkhMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTXZReXhoUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRE8xRkJRM0JET3p0QlFVVkVMR3RDUVVGaE8yTkJRVUVzZVVKQlFVYzdRVUZEWkN4aFFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU0xUXpzN1FVRkZSQ3h0UWtGQll6dGpRVUZCTERCQ1FVRkhPMEZCUTJZc1lVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMR1ZCUVdVc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXp0UlFVTTVSRHM3UVVGRlJDeFhRVUZOTzJOQlFVRXNhMEpCUVVjN08wRkJSVkFzWVVGQlNTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZPMEZCUTJZc1owTkJRWEZDTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0VlFVTXZRenM3UVVGRlJDeGhRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNN1FVRkRha1FzWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eEZRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZET3p0QlFVVXpSaXhqUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRWRCUVVNc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVWQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVN08wRkJSWGhETEdWQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSVHM3UVVGRlppeHBRa0ZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eHpRa0ZCYzBJc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdPMEZCUlhwRUxHbENRVUZKTEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNN08wRkJSVm9zYTBKQlFVc3NTVUZCU1N4RlFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFVkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF6dEJRVU14UXl4clFrRkJSeXhKUVVGTExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNSVUZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eEZRVUZETEVOQlFVVXNRMEZCUXp0alFVTnVSRHM3UVVGRlJDeG5Ra0ZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03TzBGQlJUZERMR2xDUVVGSkxFTkJRVU1zUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlJXaERMRTFCUVUwc1NVRkJTU3hKUVVGSkxFTkJRVU1zUlVGQlJTeEhRVUZITEVOQlFVTXNSMEZCUnl4SlFVRkpMRWxCUVVrc1EwRkJReXhGUVVGRkxFdEJRVXNzUTBGQlF5eFJRVUZSTEVWQlFVVTdRVUZEYkVRc2FVSkJRVWtzUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUTJRc1RVRkJUVHRCUVVOTUxHbENRVUZKTEVOQlFVTXNSVUZCUlN4SFFVRkhMRU5CUVVNc1VVRkJVU3hEUVVGRE8xbEJRM0pDT3pzN08wRkJTMFFzWlVGQlNTeEpRVUZKTEVOQlFVTXNSVUZCUlN4SFFVRkhMRU5CUVVNc1JVRkJSU3hGUVVGRk96dEJRVVZxUWl4cFFrRkJTU3hOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpORExHbENRVUZKTEVkQlFVY3NSMEZCUnl4TlFVRk5MRWRCUVVjc1RVRkJUU3hEUVVGRE8wRkJRekZDTEdsQ1FVRkpMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NSVUZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhGUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE96dEJRVVZzUkN4cFFrRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNVMEZCVXl4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETzBGQlEyNUVMR2xDUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExGVkJRVlVzUjBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZET3pzN1dVRkpiRWM3VlVGRlJqdFJRVVZHT3p0QlFWVkVMRmxCUVU4N096czdPenM3T3pzN1kwRkJRU3hwUWtGQlF5eEpRVUZKTEVWQlFVTXNVVUZCVVN4RlFVRkZPMEZCUTNKQ0xHRkJRVWtzU1VGQlNTeERRVUZETEUxQlFVMHNSVUZCUlR0QlFVTm1MR1ZCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF6dFZRVU51UWpzN08wRkJSMFFzWVVGQlNTeFJRVUZSTEVWQlFVVTdRVUZEV2l4bFFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSExGRkJRVkVzUTBGQlF6dFZRVU14UWl4TlFVRk5MRWxCUVVrc1NVRkJTU3hEUVVGRExGbEJRVmtzUlVGQlJUdEJRVU0xUWl4bFFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTTdWVUZEYmtNc1RVRkJUVHRCUVVOTUxHVkJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NRMEZCUXl4RFFVRkRPMVZCUTI1Q08wRkJRMFFzWVVGQlNTeERRVUZETEZWQlFWVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVkQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJRenM3UVVGRk1VUXNZVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU03UVVGRGJrSXNZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPenM3VVVGSGNFTTdPMEZCUzBRc1pVRkJWVHM3T3pzN08yTkJRVUVzYzBKQlFVYzdPMEZCUlZnc1lVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFZRVUZWTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8wRkJRM1JETEdGQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1MwRkJTeXhEUVVGRE96dEJRVVZ3UWl4aFFVRkpMRU5CUVVNc1ZVRkJWU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1IwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETzFGQlJUTkVPenRCUVVWRUxGVkJRVXM3WTBGQlFTeHBRa0ZCUnp0QlFVTk9MR0ZCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRPMEZCUXpOQ0xHRkJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0UlFVTm1PenRCUVVWRUxHdENRVUZoTzJOQlFVRXNlVUpCUVVjN1FVRkRaQ3hoUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEV0QlFVc3NRMEZCUXp0UlFVTnlRanM3T3p0VlFYSkxhMElzUzBGQlN6dEpRVUZUTEZOQlFWTTdPMnRDUVVGMlFpeExRVUZMTEVNN096czdPenRCUXpsQ01VSXNZVUZCV1N4RFFVRkRPenM3T3pzN096czdPMEZCUldJc1MwRkJTU3hIUVVGSExFZEJRVWNzYlVKQlFVOHNRMEZCUXl4RFFVRmhMRU5CUVVNc1EwRkJRenRCUVVOcVF5eExRVUZKTEZOQlFWTXNSMEZCUnl4dFFrRkJUeXhEUVVGRExFTkJRVzFDTEVOQlFVTXNRMEZCUXpzN096czdPenM3T3pzN096czdPenM3T3pzN096czdTMEYxUW5CRExFOUJRVThzZFVKQlFWRXNRMEZCVXl4RlFVRjRRaXhQUVVGUE96dExRVVZMTEZsQlFWazdRVUZGY0VJc1dVRkdVU3haUVVGWkxFZEJSV3BDT3pKQ1FVWkxMRmxCUVZrN08wRkJTVGRDTEZOQlFVa3NUMEZCVHl4SFFVRkhMRU5CUVVNc1QwRkJUeXhGUVVGRExFOUJRVThzUTBGQlF5eERRVUZET3p0QlFVVm9ReXhUUVVGSkxGRkJRVkVzUjBGQlJ6dEJRVU5pTEdGQlFWRXNRMEZCUXl4SFFVRkhMRVZCUVVNc1IwRkJSeXhEUVVGRE8wMUJRMnhDTEVOQlFVTTdPMEZCUlVZc1owTkJWbWxDTEZsQlFWa3NOa05CVlhaQ0xGTkJRVk1zUlVGQlF5eFBRVUZQTEVWQlFVTXNVVUZCVVN4RlFVRkZPenRCUVVWc1F5eFRRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRTlCUVU4c1JVRkJSU3hEUVVGRE96dEJRVVY2UWl4VFFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNZMEZCWXl4RlFVRkZMRU5CUVVNN1FVRkRPVU1zVTBGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRE8wRkJRemRDTEZOQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eHBRa0ZCYVVJc1EwRkJRenRCUVVOd1JDeFRRVUZKTEVOQlFVTXNVMEZCVXl4SFFVRkhMRWxCUVVrc1ZVRkJWU3hEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXp0QlFVTnVSQ3hUUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEhGQ1FVRnhRaXhEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXpzN1FVRkZjRVFzVTBGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNN08wRkJSVzVDTEZOQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1MwRkJTeXhEUVVGRE96dEJRVVZ3UWl4VFFVRkpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03TzBGQlJWb3NVMEZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8wbEJRMlk3TzJGQk0wSnJRaXhaUVVGWk96dG5Ra0ZCV2l4WlFVRlpPMEZCTmtJdlFpeGxRVUZWTzJOQlFVRXNjMEpCUVVjN1FVRkRXQ3hoUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEVsQlFVa3NSMEZCUnl4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZETDBNc1lVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJRenRSUVVOd1F6czdRVUZGUkN4clFrRkJZVHRqUVVGQkxIbENRVUZITzBGQlEyUXNZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03VVVGRE5VTTdPMEZCUlVRc2JVSkJRV003WTBGQlFTd3dRa0ZCUnp0QlFVTm1MR0ZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4bFFVRmxMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTTdVVUZET1VRN08wRkJSVVFzVjBGQlRUdGpRVUZCTEd0Q1FVRkhPenRCUVVWUUxHRkJRVWtzU1VGQlNTeERRVUZETEUxQlFVMHNSVUZCUlR0QlFVTm1MR2REUVVGeFFpeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTTdWVUZETDBNN08wRkJSVVFzWVVGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4eFFrRkJjVUlzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNN08wRkJSWEJFTEdGQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExGTkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJRenRCUVVOcVJDeGhRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdPMEZCUlRGR0xHRkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRk5CUVZNc1IwRkJSeXhGUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRE1VUXNZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zVjBGQlZ5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRE96dEJRVVZ5UkN4aFFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXpzN1FVRkZhRU1zWVVGQlNTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZPenRCUVVWbUxHVkJRVWtzVlVGQlZTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUjBGQlJ5eERRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJRenRCUVVOeVJTeGxRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN08wRkJSVllzWjBKQlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk96dEJRVVV4UXl4cFFrRkJTU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhIUVVGTExFTkJRVU03UVVGRGJFTXNhVUpCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZET3p0QlFVVXpReXhwUWtGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkZPMEZCUTFnc2JVSkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdZMEZEYkVNc1RVRkJUVHRCUVVOTUxHMUNRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMk5CUTJ4RE96dEJRVVZFTEdOQlFVTXNTVUZCU1N4VlFVRlZMRU5CUVVNN1dVRkRha0k3VlVGRFJpeE5RVUZOTzBGQlEwZ3NaVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVkQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkROVVFzWlVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1JVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRWRCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VlVGRGRrWTdPMEZCUlVRc1lVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1VVRkRPVUk3TzBGQlUwUXNXVUZCVHpzN096czdPenM3TzJOQlFVRXNhVUpCUVVNc1NVRkJTU3hGUVVGRk96dEJRVVZhTEdGQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSVHRCUVVObUxHVkJRVWtzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXp0VlFVTnVRanM3UVVGRlJDeGhRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJRenRCUVVOdVFpeGhRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdPMEZCUlc1RExHRkJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0UlFVTm1PenRCUVV0RUxHVkJRVlU3T3pzN096dGpRVUZCTEhOQ1FVRkhPMEZCUTFnc1lVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTzBGQlEyWXNaVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhWUVVGVkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMEZCUTNSRExHVkJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRPMVZCUTNCQ08xRkJSVVk3TzBGQlJVUXNWVUZCU3p0alFVRkJMR2xDUVVGSE8wRkJRMDRzWVVGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU03UVVGRE0wSXNZVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8xRkJRMlk3TzBGQlJVUXNhMEpCUVdFN1kwRkJRU3g1UWtGQlJ6dEJRVU5rTEdGQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1MwRkJTeXhEUVVGRE8xRkJRM0pDT3pzN08xVkJla2hyUWl4WlFVRlpPMGxCUVZNc1UwRkJVenM3YTBKQlFUbENMRmxCUVZrc1F6czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN08wdERWWEpDTEZOQlFWTXNLME5CUVUwc1JVRkJiVUk3TzB0QlEzWkRMRWRCUVVjc2RVTkJRVTBzUTBGQllUczdTMEZGY0VJc1RVRkJUU3gxUWtGQlVTeERRVUZUTEVWQlFYWkNMRTFCUVUwN08wdEJSVTBzU1VGQlNUdEJRVVZhTEZsQlJsRXNTVUZCU1N4RFFVVllMRTFCUVUwc1JVRkJSU3hSUVVGUkxFVkJRVVU3TWtKQlJsZ3NTVUZCU1RzN1FVRkpja0lzVTBGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4RlFVRkZMRU5CUVVNN1FVRkRaaXhUUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4TlFVRk5MRU5CUVVNN1FVRkRNVUlzVTBGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTTFReXhUUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4RlFVRkZMRU5CUVVNN08wRkJSWFJDTEZOQlFVa3NVVUZCVVN4RlFVRkZPMEZCUTFvc1YwRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVkQlFVY3NVVUZCVVN4RFFVRkRMRk5CUVZNc1NVRkJTU3hWUVVGVkxFTkJRVU03UVVGRGRrUXNWMEZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzVVVGQlVTeERRVUZETEVsQlFVa3NTVUZCU1N4TFFVRkxMRU5CUVVNN1FVRkRla01zVjBGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1VVRkJVU3hEUVVGRExFbEJRVWtzU1VGQlNTeExRVUZMTEVOQlFVTTdUVUZEZWtNc1RVRkJUVHRCUVVOTUxGZEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4SFFVRkhMRlZCUVZVc1EwRkJRenRCUVVOcVF5eFhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRGVFSXNWMEZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzUzBGQlN5eERRVUZETzAxQlEzaENPenRCUVVWRUxGTkJRVWtzWVVGQllTeEhRVUZITEUxQlFVMHNSVUZCUlN4RFFVRkRPMEZCUXpkQ0xGTkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1IwRkJSeXhoUVVGaExFTkJRVU1zVFVGQlRTeERRVUZETzBGQlF5OURMRk5CUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NSMEZCUnl4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRE8wRkJRek5ETEZOQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUjBGQlJ5eGhRVUZoTEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUXpkRExGTkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1IwRkJSeXhoUVVGaExFTkJRVU1zU1VGQlNTeERRVUZETzBGQlF6TkRMRk5CUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZkQlFWY3NSMEZCUnl4aFFVRmhMRU5CUVVNc1YwRkJWeXhEUVVGRE8wRkJRM3BFTEZOQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGVkJRVlVzUjBGQlJ5eGhRVUZoTEVOQlFVTXNWVUZCVlN4RFFVRkRPMEZCUTNaRUxGTkJRVWtzUTBGQlF5eGpRVUZqTEVWQlFVVXNRMEZCUXp0QlFVTjBRaXhUUVVGSkxFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTTdTVUZEZGtJN08yZENRVFZDYTBJc1NVRkJTVHRCUVRoQ2RrSXNiVUpCUVdNN1kwRkJRU3d3UWtGQlJ6czdPMEZCUTJZc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1IwRkJSeXhaUVVGWkxFTkJRVU03UVVGRGFFUXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEZWQlFWVXNSMEZCUnl4TlFVRk5MRU5CUVVNN1FVRkRNME1zWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExHRkJRV0VzUjBGQlJ5eE5RVUZOTEVOQlFVTTdRVUZET1VNc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMR2RDUVVGblFpeEhRVUZITEUxQlFVMHNRMEZCUXpzN1FVRkZha1FzWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1VVRkJVU3hEUVVGRExHRkJRV0VzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXpzN1FVRkZia1FzWjBKQlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVlVGQlZTeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRVZCUVVVN1FVRkRNME1zWlVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFWQlEyeEZPenRCUVVWRUxHRkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFZEJRVWNzUzBGQlN5eERRVUZETzBGQlEzcERMR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4VFFVRlRMRWRCUVVjc1dVRkJXU3hEUVVGRE96dEJRVVZzUkN4aFFVRkpMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eEZRVUZGTzBGQlEyNUNMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEZGQlFWRXNRMEZCUXl4aFFVRmhMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRGJrUXNaVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zVTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRE8wRkJReTlETEdWQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF5eFZRVUZWTEVkQlFVY3NUMEZCVHl4RFFVRkRPMEZCUXpsRExHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhSUVVGUkxFZEJRVWNzVlVGQlZTeERRVUZETzBGQlF5OURMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRWRCUVVjc1RVRkJUU3hEUVVGRE8wRkJRM2hETEdWQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVkQlFVY3NTMEZCU3l4RFFVRkRPMEZCUTNwRExHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhSUVVGUkxFZEJRVWNzVFVGQlRTeERRVUZET3p0QlFVVXpReXhsUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4UlFVRlJMRU5CUVVNc1lVRkJZU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEycEVMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRWRCUVVjc1ZVRkJWU3hEUVVGRE8wRkJRemRETEdWQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVkQlFVY3NTMEZCU3l4RFFVRkZPMEZCUTNCRExHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFZEJRVWNzUzBGQlN5eERRVUZGTzBGQlEzUkRMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZOQlFWTXNSMEZCUnl4SFFVRkhMRU5CUVVNN1FVRkRha01zWlVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUjBGQlJ5eGhRVUZoTEVOQlFVTTdRVUZETDBNc1pVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRlZCUVZVc1IwRkJSeXhOUVVGTkxFTkJRVU03UVVGRE0wTXNaVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNSMEZCUnl4TlFVRk5MRU5CUVVNN08wRkJSWHBETEdWQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVkQlFVY3NVMEZCVXl4RFFVRkRPenRCUVVVeFF5eGxRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4WFFVRlhMRVZCUVVVc1dVRkJUVHRCUVVOdVJDeHRRa0ZCU3l4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eGxRVUZsTEVkQlFVY3NUVUZCU3l4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF6dFpRVU4wUlN4RFFVRkRMRU5CUVVNN1FVRkRTQ3hsUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4blFrRkJaMElzUTBGQlF5eFpRVUZaTEVWQlFVVXNXVUZCVFR0QlFVTndSQ3h0UWtGQlN5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhsUVVGbExFZEJRVWNzVFVGQlN5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjc1EwRkJRenRaUVVOMlJTeERRVUZETEVOQlFVTTdRVUZEU0N4bFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhQUVVGUExFVkJRVVVzV1VGQlRUdEJRVU12UXl4cFFrRkJTU3hOUVVGTExFbEJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVTdRVUZEYkVJc2NVSkJRVXNzU1VGQlNTeEZRVUZGTEVOQlFVTTdZMEZEWWl4TlFVRk5PMEZCUTB3c2NVSkJRVXNzU1VGQlNTeEZRVUZGTEVOQlFVTTdZMEZEWWp0WlFVTkdMRU5CUVVNc1EwRkJRenM3UVVGSFNDeGxRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenM3UVVGRmFrUXNaVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03VlVGRGJFUTdRVUZEUkN4aFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6czdPenM3UVVGTGFrUXNZVUZCU1N4RlFVRkZMRWRCUVVjc1UwRkJVeXhEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMEZCUTJ4RkxHTkJRVXNzU1VGQlNTeEhRVUZITEVsQlFVa3NSVUZCUlN4RlFVRkZPMEZCUTJ4Q0xHVkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VlVGRGNrSTdVVUZEUmpzN1FVRkZSQ3h0UWtGQll6dGpRVUZCTERCQ1FVRkhPMEZCUTJZc1lVRkJTU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUlR0QlFVTnVRaXhsUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjc1EwRkJRenRCUVVOMFJTeGxRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeEhRVUZITEZsQlFWa3NSMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTTdRVUZEYmtVc1pVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1IwRkJSeXhaUVVGWkxFZEJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRE8wRkJRekZGTEdWQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eGxRVUZsTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETzBGQlEyaEZMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4bFFVRmxMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRPMVZCUTJ4Rk8xRkJRMFk3TzBGQlJVUXNVMEZCU1R0alFVRkJMR2RDUVVGSE8wRkJRMHdzWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUjBGQlJ5eFBRVUZQTEVOQlFVTTdRVUZETTBNc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTNaQ096dEJRVVZFTEZOQlFVazdZMEZCUVN4blFrRkJSenRCUVVOTUxHRkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFZEJRVWNzVFVGQlRTeERRVUZETzBGQlF6RkRMR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEV0QlFVc3NRMEZCUXp0UlFVTjRRanM3UVVGRlJDeGhRVUZSTzJOQlFVRXNhMEpCUVVNc1NVRkJTU3hGUVVGRExFdEJRVXNzUlVGQlJUdEJRVU51UWl4alFVRkxMRWxCUVVrc1IwRkJSeXhKUVVGSkxFbEJRVWtzUlVGQlJUdEJRVU53UWl4bFFVRkpMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eFJRVUZSTEVWQlFVVTdRVUZEZEVJc2FVSkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hGUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFsQlEyaERPMVZCUTBZN1FVRkRSQ3hoUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGREwwSXNZVUZCU1N4RFFVRkRMR05CUVdNc1JVRkJSU3hEUVVGRE8xRkJRM1pDT3p0QlFVVkVMRlZCUVVzN1kwRkJRU3hwUWtGQlJ6dEJRVU5PTEdOQlFVc3NTVUZCU1N4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRk8wRkJRM0JDTEdWQlFVa3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlJUdEJRVU55UWl4cFFrRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRPMWxCUTNKQ08xVkJRMFk3VVVGRFJqczdPenRWUVc1SmEwSXNTVUZCU1RzN08ydENRVUZLTEVsQlFVa3NRenM3T3pzN096czdPenM3T3p0QlF6TkRla0lzWVVGQldTeERRVUZET3p0TFFVVk9MRWRCUVVjc2RVTkJRVTBzUTBGQllUczdTMEZEZEVJc1ZVRkJWU3gxUTBGQlRTeERRVUZuUWpzN1FVRkZka01zUzBGQlNTeHBRa0ZCYVVJc1IwRkJSeXhWUVVGRExFMUJRVTBzUlVGQlF5eFpRVUZaTEVWQlFVczdRVUZETDBNc1QwRkJTU3hKUVVGSkxFZEJRVWNzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXp0QlFVTjJRaXhQUVVGSkxGbEJRVmtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlR0QlFVTjBRaXhwUWtGQldTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRkRUlzVFVGQlRUdEJRVU5NTEdsQ1FVRlpMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEzaENPMEZCUTBRc1ZVRkJVeXhKUVVGSkxFZEJRVWNzV1VGQldTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkhPMFZCUTNSRExFTkJRVU03TzBGQlJVWXNTMEZCU1N4UFFVRlBMRWRCUVVjc1ZVRkJReXhQUVVGUExFVkJRVU1zU1VGQlNTeEZRVUZETEU5QlFVOHNSVUZCU3p0QlFVTjBReXhWUVVGUExFZEJRVWNzVDBGQlR5eEpRVUZKTEVWQlFVVXNRMEZCUXp0QlFVTjRRaXhSUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExGVkJRVlVzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVNN1FVRkRha1FzVTBGQlNTeEhRVUZITEVkQlFVY3NUMEZCVHl4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6czdPenRCUVVrNVFpeFpRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF5eFRRVUZUTEVOQlFVTTdPMGxCUlhwRE8wRkJRMFFzVDBGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhYUVVGWExFVkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRemRETEU5QlFVa3NUVUZCVFN4SFFVRkhMRWxCUVVrc1ZVRkJWU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEU5QlFVOHNSVUZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRCUVVOdVJDeFRRVUZOTEVOQlFVTXNSVUZCUlN4SFFVRkhMRTlCUVU4c1EwRkJReXhGUVVGRkxFTkJRVU03UVVGRGRrSXNWVUZCVHl4TlFVRk5MRU5CUVVNN1JVRkRaaXhEUVVGRE96dEJRVWRHTEV0QlFVa3NUMEZCVHl4SFFVRkhMRlZCUVVNc1RVRkJUU3hGUVVGRExFOUJRVThzUlVGQlN6czdRVUZGYUVNc1ZVRkJUeXhIUVVGSExFOUJRVThzU1VGQlNTeFZRVUZWTEVOQlFVTTdPMEZCUldoRExFOUJRVWtzV1VGQldTeEhRVUZITEVWQlFVVXNRMEZCUXpzN1FVRkZkRUlzVDBGQlNTeFRRVUZUTEVkQlFVY3NSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6czdRVUZGZWtNc1QwRkJTU3hGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZET3p0QlFVVmFMRTlCUVVrc1dVRkJXU3hIUVVGSExGTkJRVk1zUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU4yUkN4UFFVRkpMRkZCUVZFc1IwRkJSeXhGUVVGRkxFTkJRVU03UVVGRGJFSXNVVUZCU3l4SlFVRkpMRU5CUVVNc1IwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZETEZsQlFWa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3UVVGRGVFTXNZVUZCVVN4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTm9RenRCUVVORUxGRkJRVXNzU1VGQlNTeERRVUZETEVkQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1IwRkJReXhSUVVGUkxFTkJRVU1zVFVGQlRTeEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZPMEZCUTJ4RExGTkJRVWtzU1VGQlNTeEhRVUZITEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhaUVVGWkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdRVUZETjBNc1UwRkJTU3hKUVVGSkxFVkJRVVU3UVVGRFVpeFhRVUZKTEdGQlFXRXNSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkRNVUlzV1VGQlN5eEpRVUZKTEVkQlFVY3NTVUZCU1N4VlFVRlZMRVZCUVVVN1FVRkRNVUlzWVVGQlNTeEpRVUZKTEVOQlFVTXNWMEZCVnl4RlFVRkZMRXRCUVVjc1IwRkJSeXhEUVVGRExGZEJRVmNzUlVGQlJTeEZRVUZGTzBGQlF6RkRMSGRDUVVGaExFZEJRVWNzUjBGQlJ5eERRVUZETzFWQlEzSkNPMUZCUTBZN1FVRkRSQ3hqUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEdGQlFXRXNRMEZCUXl4RFFVRkRPMEZCUXpOQ0xGZEJRVWtzVFVGQlRTeEhRVUZITEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zWVVGQllTeERRVUZETEVOQlFVTTdRVUZEYUVRc1YwRkJTU3hOUVVGTkxFTkJRVU1zUlVGQlJTeEZRVUZGTzBGQlEySXNWMEZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEVOQlFVTTdVVUZEZUVJc1RVRkJUVHRCUVVOTUxHRkJRVWtzUlVGQlJTeEhRVUZITEdsQ1FVRnBRaXhEUVVGRExFMUJRVTBzUlVGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXp0QlFVTm9SQ3hYUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRPMUZCUTJwQ08wMUJRMFk3U1VGRFJqczdRVUZGUkN4VlFVRlBMRVZCUVVVc1EwRkJRenRGUVVWWUxFTkJRVU03TzBGQlJVWXNTMEZCU1N4SFFVRkhMRWRCUVVjc1ZVRkJReXhKUVVGSkxFVkJRVU1zVFVGQlRTeEZRVUZETEU5QlFVOHNSVUZCU3p0QlFVTnFReXhQUVVGSkxFMUJRVTBzUjBGQlJ5eFJRVUZSTEVOQlFVTXNZVUZCWVN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRek5ETEZWQlFVOHNSMEZCUnl4UFFVRlBMRWxCUVVrc1JVRkJSU3hEUVVGRE8wRkJRM2hDTEU5QlFVa3NUVUZCVFN4RlFVRkZPMEZCUTFZc1YwRkJUU3hIUVVGSExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkRia01zVFVGQlRUdEJRVU5NTEZkQlFVMHNSMEZCUnl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRE8wbEJRM2hDTzBGQlEwUXNVMEZCVFN4RFFVRkRMRmRCUVZjc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU16UWl4VlFVRlBMRU5CUVVNc1RVRkJUU3hIUVVGSExFMUJRVTBzUTBGQlF6dEJRVU40UWl4UFFVRkpMRTlCUVU4c1EwRkJReXhKUVVGSkxFVkJRVVU3UVVGRGFFSXNWMEZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFZEJRVWNzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU03UVVGRE5VTXNWMEZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFZEJRVWNzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU03U1VGRE9VTTdRVUZEUkN4VlFVRlBMRTlCUVU4c1EwRkJReXhOUVVGTkxFVkJRVU1zU1VGQlNTeEZRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMFZCUTNKRExFTkJRVU03TzFOQlJVOHNUMEZCVHl4SFFVRlFMRTlCUVU4N1UwRkRVQ3hQUVVGUExFZEJRVkFzVDBGQlR6dFRRVU5RTEVkQlFVY3NSMEZCU0N4SFFVRkhMRU03T3pzN096dEJRekZHV2l4aFFVRlpMRU5CUVVNN096czdPenM3TzB0QlJVNHNTVUZCU1N4MVEwRkJUU3hEUVVGak96dExRVVZXTEVsQlFVazdRVUZGV2l4WlFVWlJMRWxCUVVrc1IwRkZWRHN5UWtGR1N5eEpRVUZKT3pzN1FVRkxkRUlzVTBGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4RlFVRkZMRU5CUVVNN096dEJRVWRvUWl4VFFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSE8wRkJRMWdzWVVGQlRTeEZRVUZGTEZkQlFWYzdRVUZEYmtJc1dVRkJTeXhGUVVGRkxFMUJRVTA3VFVGRFlpeERRVUZET3pzN1FVRkhSaXhUUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVOQlFVVXNVMEZCVXl4RlFVTjZRaXhWUVVGVkxFVkJRMVlzVlVGQlZTeEZRVU5XTEZWQlFWVXNSVUZEVml4VlFVRlZMRVZCUTFZc1IwRkJSeXhGUVVOSUxGVkJRVlVzUlVGRFZpeFRRVUZUTEVOQlExUXNRMEZCUXpzN08wRkJSMFlzVTBGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZET3pzN1FVRkhla0lzVTBGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dEpRVVZzUXpzN1owSkJPVUpyUWl4SlFVRkpPMEZCYVVOMlFpeFRRVUZKT3pzN08yTkJRVUVzWTBGQlF5eExRVUZMTEVWQlFVTXNUVUZCVFN4RlFVRkZPenRCUVVWc1FpeGhRVUZKTEZGQlFWRXNZVUZCUXpzN1FVRkZZaXhoUVVGSkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4TFFVRkxMRmRCUVZjc1JVRkJSVHRCUVVOeVF5eHRRa0ZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUzBGQlN5eEZRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMVZCUTNoRExFMUJRVTBzU1VGQlNTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1MwRkJTeXhQUVVGUExFVkJRVVU3UVVGRGVFTXNiVUpCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSVUZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRWUVVOd1F5eE5RVUZOTEVsQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFdEJRVXNzVFVGQlRTeEZRVUZGTzBGQlEzWkRMRzFDUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRVZCUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03VlVGRGJrTXNUVUZCVFR0QlFVTk9MRzFDUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TFFVRkxMRVZCUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03VlVGRGVFTTdPMEZCUlVRc1owSkJRVThzVVVGQlVTeERRVUZETzFGQlJXaENPenRCUVVsRUxHTkJRVk03T3pzN1kwRkJRU3h0UWtGQlF5eE5RVUZOTEVWQlFVVXNVVUZCVVN4RlFVRkZPenRCUVVVelFpeGhRVUZKTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhMUVVGTExFMUJRVTBzU1VGQlNTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1MwRkJTeXhOUVVGTkxFVkJRVWM3UVVGRE9VUXNaVUZCU1N4RFFVRkRMRTFCUVUwc1NVRkJTU3hGUVVGRkxFTkJRVU03VlVGRGJFSTdPenRCUVVkRUxHRkJRVWtzVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hIUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN08wRkJSV3hFTEdGQlFVa3NVVUZCVVN4RlFVRkZPMEZCUTJJc2FVSkJRVTBzU1VGQlNTeFJRVUZSTEVOQlFVTTdWVUZEYmtJN096dEJRVWRFTEdGQlFVa3NWMEZCVnl4SFFVRkhMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXpzN1FVRkZOME1zWjBKQlFVOHNWMEZCVnl4SFFVRkhMRU5CUVVNc1JVRkJSVHRCUVVOMlFpeHpRa0ZCVnl4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETzFWQlEycERPenRCUVVWQkxHRkJRVWtzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU03TzBGQlJYSkRMR0ZCUVVrc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTMEZCU3l4RFFVRkRPenRCUVVVM1FpeGhRVUZKTEVkQlFVY3NTVUZCU1N4SFFVRkZMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZETEUxQlFVMHNRMEZCUlN4RFFVRkRPenM3UVVGSGFrTXNZVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeEhRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkRMRmxCUVZrc1EwRkJRenM3UVVGRmJFUXNaMEpCUVU4c1NVRkJTU3hEUVVGRE8xRkJSVm83TzBGQlNVUXNWVUZCU3pzN096dGpRVUZCTEdWQlFVTXNUVUZCVFN4RlFVRkZMRkZCUVZFc1JVRkJSVHM3UVVGRmRrSXNZVUZCU1N4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUzBGQlN5eE5RVUZOTEVsQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFdEJRVXNzVFVGQlRTeEZRVUZITzBGQlF6bEVMR1ZCUVVrc1EwRkJReXhOUVVGTkxFbEJRVWtzUlVGQlJTeERRVUZETzFWQlEyeENPenM3UVVGSFJDeGhRVUZKTEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUjBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE96dEJRVVZzUkN4aFFVRkpMRkZCUVZFc1JVRkJSVHRCUVVOaUxHbENRVUZOTEVsQlFVa3NVVUZCVVN4RFFVRkRPMVZCUTI1Q096czdRVUZIUkN4aFFVRkpMRmRCUVZjc1IwRkJSeXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNN096dEJRVWMzUXl4aFFVRkpMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUXl4TlFVRk5MRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRPenRCUVVWMlJDeGpRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFZEJRVU1zV1VGQldTeERRVUZETEVkQlFVTXNXVUZCV1N4RFFVRkRPenRCUVVWd1JDeG5Ra0ZCVHl4TFFVRkxMRU5CUVVNN1VVRkZZanM3UVVGSlJDeFRRVUZKT3pzN08yTkJRVUVzWTBGQlF5eE5RVUZOTEVWQlFVTXNVVUZCVVN4RlFVRkZPenRCUVVWeVFpeGhRVUZKTEZGQlFWRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFMUJRVTBzUlVGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXpzN1FVRkZMME1zWVVGQlNTeERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZGQlFWRXNSMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPenRCUVVWdVJDeFZRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFZEJRVU1zVlVGQlZTeERRVUZETEVkQlFVTXNWVUZCVlN4RFFVRkRPenRCUVVWNFF5eG5Ra0ZCVHl4RFFVRkRMRU5CUVVNN1VVRkZWRHM3UVVGRlJDeG5Ra0ZCVnp0alFVRkJMSFZDUVVGSE8wRkJRMW9zWVVGQlNTeFJRVUZSTEVkQlFVY3NSVUZCUlN4RFFVRkRPMEZCUTJ4Q0xHTkJRVXNzU1VGQlNTeERRVUZETEVkQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1IwRkJReXhUUVVGVExFTkJRVU1zVFVGQlRTeEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZPMEZCUTI1RExHMUNRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkZMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVVVzUlVGQlJTeEhRVUZITEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJSU3hEUVVGRkxFTkJRVU03VlVGRGFrUTdRVUZEUkN4aFFVRkpMRU5CUVVNc2QwSkJRWGRDTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1VVRkRla003TzBGQlJVUXNhMEpCUVdFN1kwRkJRU3g1UWtGQlJ6dEJRVU5rTEdGQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1JVRkJSU3hEUVVGRE8wRkJRMmhDTEdOQlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUjBGQlF5eFRRVUZUTEVOQlFVTXNUVUZCVFN4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRk8wRkJRMjVETEdWQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMVZCUXk5Q08xRkJRMFk3TzBGQlJVUXNOa0pCUVhkQ08yTkJRVUVzYTBOQlFVTXNTMEZCU3l4RlFVRkZPMEZCUXpsQ0xHRkJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NSVUZCUlN4RFFVRkRPMEZCUTJoQ0xHTkJRVXNzU1VGQlNTeERRVUZETEVkQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1IwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeEhRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSVHRCUVVOcVF5eGxRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VlVGRGNFTTdVVUZEUmpzN1FVRkpSQ3hqUVVGVE96czdPMk5CUVVFc2JVSkJRVU1zU1VGQlNTeEZRVUZET3pzN1FVRkhaQ3hoUVVGSkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExGZEJRVmNzUTBGQlF6dEJRVU42UXl4aFFVRkpMRU5CUVVNc2QwSkJRWGRDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkZkRU03TzBGQlMwUXNWMEZCVFRzN096czdZMEZCUVN4blFrRkJReXhQUVVGUExFVkJRVVU3UVVGRFppeGhRVUZKTEZGQlFWRXNSMEZCUnl4RlFVRkZMRU5CUVVNN1FVRkRiRUlzWTBGQlN5eEpRVUZKTEVkQlFVY3NTVUZCU1N4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRk8wRkJRelZDTEdWQlFVa3NSMEZCUnl4RFFVRkRMRmRCUVZjc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eFBRVUZQTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUlVGQlJUdEJRVU0xUkN4eFFrRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTnVRanRWUVVORU8wRkJRMFFzWjBKQlFVOHNVVUZCVVN4RFFVRkRPMUZCUTJoQ096dEJRVWxFTEZWQlFVczdPenM3WTBGQlFTeGxRVUZETEV0QlFVc3NSVUZCUlR0QlFVTmFMR0ZCUVVrc1RVRkJUU3hIUVVGSExFVkJRVVVzUTBGQlF6dEJRVU5vUWl4alFVRkxMRWxCUVVrc1EwRkJReXhIUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVkQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1JVRkJReXhEUVVGRExFVkJRVVVzUlVGQlJUdEJRVU5vUXl4cFFrRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdWVUZEYWtNN1FVRkRSQ3huUWtGQlR5eE5RVUZOTEVOQlFVTTdVVUZEWkRzN096dFZRWEJNYTBJc1NVRkJTVHM3TzJ0Q1FVRktMRWxCUVVrc1F6czdPenM3TzBGRFNucENMR0ZCUVZrc1EwRkJRenM3T3pzN096czdPMHRCUzFFc1MwRkJTenM3TzBGQlIxZ3NZMEZJVFN4TFFVRkxMRWRCUjJFN01rTkJRVklzVFVGQlRUdEJRVUZPTEcxQ1FVRk5PenM3WVVGQmNrSXNUVUZCVFN4blEwRkJSeXhEUVVGRE96c3JRa0ZJVEN4TFFVRkxPenM3T3pzN096dEJRVlZzUWl4aFFVRkpMRTFCUVUwc1IwRkJSeXhEUVVGRExFVkJRVVU3UVVGQlJTeHRRa0ZCVFN4SFFVRkhMRU5CUVVNc1EwRkJRenRWUVVGRk96dEJRVVV2UWl4aFFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFMUJRVTBzUTBGQlF6dEJRVU55UWl4aFFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFMUJRVTBzUTBGQlF6dEJRVU55UWl4aFFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6czdRVUZGZGtNc1lVRkJTU3hOUVVGTkxFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNSVUZCUlR0QlFVTnVRaXhwUWtGQlNTeERRVUZETEVWQlFVVXNUMEZCVUN4SlFVRkpMRVZCUVU4c1RVRkJUU3hEUVVGRExFTkJRVU03VlVGRGRFSTdUVUZEU2pzN2EwSkJia0puUWl4TFFVRkxPMEZCY1VKMFFpeGxRVUZOTzI5Q1FVRkJMR2RDUVVGRExFdEJRVXNzUlVGQlJUdEJRVU5XTEhGQ1FVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTnVRaXh4UWtGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRGRFSXNkMEpCUVU4c1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF6dGpRVU55UWpzN1FVRkZSQ3hoUVVGSk8yOUNRVUZCTEdkQ1FVRlpPMjFFUVVGU0xFMUJRVTA3UVVGQlRpd3lRa0ZCVFRzN096dEJRVVZXTEhGQ1FVRkpMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETzBGQlEyNUNMSEZDUVVGSkxFMUJRVTBzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RlFVRkZPMEZCUTI1Q0xESkNRVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRlZCUVZNc1EwRkJReXhGUVVGRk8wRkJRM1pDTERaQ1FVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNSVUZCUlR0QlFVTnNRaXh2UTBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4eFFrRkJjVUlzUjBGQlJ5eERRVUZETEVkQlFVY3NhMEpCUVd0Q0xFTkJRVU1zUTBGQlF6c3dRa0ZEYUVVc1RVRkJUVHRCUVVOSUxEaENRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkZMRU5CUVVNN01FSkJRM3BDTzNOQ1FVTktMRU5CUVVNc1EwRkJRenRyUWtGRFRpeE5RVUZOTzBGQlEwZ3NjMEpCUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zVlVGQlV5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRWRCUVVjc1JVRkJSVHRCUVVNeFFpdzBRa0ZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUlN4RFFVRkRPM05DUVVONFFpeERRVUZETEVOQlFVTTdhMEpCUTA0N1FVRkRSQ3gzUWtGQlR5eERRVUZETEVOQlFVTTdZMEZEV2pzN1FVRkZSQ3hYUVVGRk8yOUNRVUZCTEdOQlFWazdiVVJCUVZJc1RVRkJUVHRCUVVGT0xESkNRVUZOT3pzN08wRkJSVklzY1VKQlFVa3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU03UVVGRGJrSXNjVUpCUVVrc1RVRkJUU3hEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVWQlFVVTdRVUZEYmtJc01rSkJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNWVUZCVXl4RFFVRkRMRVZCUVVVN1FVRkRka0lzTmtKQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eEZRVUZGTzBGQlEyeENMRzlEUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEhGQ1FVRnhRaXhIUVVGSExFTkJRVU1zUjBGQlJ5d3dRa0ZCTUVJc1EwRkJReXhEUVVGRE96QkNRVU40UlN4TlFVRk5PMEZCUTBnc2FVTkJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSVHRCUVVGRkxIZERRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMSEZDUVVGeFFpeEhRVUZITEVOQlFVTXNSMEZCUnl4dFFrRkJiVUlzUTBGQlF5eERRVUZET3poQ1FVRkZPMEZCUTJ4R0xEaENRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE96QkNRVU5hTzNOQ1FVTktMRU5CUVVNc1EwRkJRenRyUWtGRFRpeE5RVUZOTzBGQlEwZ3NjMEpCUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdhMEpCUTJJN1FVRkRSQ3gzUWtGQlR5eERRVUZETEVOQlFVTTdZMEZEV2pzN1FVRkZSQ3haUVVGSE8yOUNRVUZCTEdWQlFWazdiVVJCUVZJc1RVRkJUVHRCUVVGT0xESkNRVUZOT3pzN08wRkJSVlFzY1VKQlFVa3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU03UVVGRGJrSXNjVUpCUVVrc1RVRkJUU3hEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVWQlFVVTdRVUZEYmtJc01rSkJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNWVUZCVXl4RFFVRkRMRVZCUVVVN1FVRkRka0lzTUVKQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03YzBKQlExb3NRMEZCUXl4RFFVRkRPMnRDUVVOT0xFMUJRVTA3UVVGRFNDeHpRa0ZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dHJRa0ZEWWp0QlFVTkVMSGRDUVVGUExFTkJRVU1zUTBGQlF6dGpRVU5hT3pzN08xbEJNMFZuUWl4TFFVRkxPenM3YTBKQlFVd3NTMEZCU3l4RE96czdPenM3UVVOTU1VSTdPMEZCUlVFN1FVRkRRVHM3T3pzN096dEJRMGhCT3p0QlFVVkJPMEZCUTBFN1FVRkRRVHRCUVVOQk96dEJRVVZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN08wRkJSVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPenRCUVVWQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk96dEJRVVZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUczdRVUZGUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVN3d1EwRkJlVU03TzBGQlJYcERPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CT3p0QlFVVkJPMEZCUTBFN08wRkJSVUVzU1VGQlJ6dEJRVU5JTzBGQlEwRTdPMEZCUlVFc1NVRkJSenRCUVVOSU96dEJRVVZCTzBGQlEwRTdRVUZEUVRzN1FVRkZRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN08wRkJSVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdPMEZCUlVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHM3UVVGRlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPenRCUVVWQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHM3UVVGRlFUdEJRVU5CTzBGQlEwRTdRVUZEUVRzN1FVRkZRVHRCUVVOQk8wRkJRMEU3UVVGRFFTeHRRMEZCYTBNc2FVTkJRV2xETzBGQlEyNUZPMEZCUTBFN08wRkJSVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPenRCUVVWQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJMSE5EUVVGeFF5eGxRVUZsTzBGQlEzQkVPMEZCUTBFc1RVRkJTenM3UVVGRlREdEJRVU5CTzBGQlEwRTdPMEZCUlVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTEVrN1FVRkRRVHM3UVVGRlFUczdRVUZGUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHM3UVVGRlFUdEJRVU5CTzBGQlEwRTdRVUZEUVRzN1FVRkZRVHRCUVVOQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN08wRkJSVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdPMEZCUlVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUczdRVUZGUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHM3UVVGRlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPenRCUVVWQk8wRkJRMEU3UVVGRFFUdEJRVU5CT3p0QlFVVkJPMEZCUTBFN1FVRkRRVHRCUVVOQkxFVTdPenM3T3pzN1FVTjZUMEU3UVVGRFFUczdRVUZGUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHM3UVVGRlFUdEJRVU5CT3p0QlFVVkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFc1ZVRkJVenRCUVVOVU8wRkJRMEU3UVVGRFFTeE5RVUZMTzBGQlEwdzdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQkxGVkJRVk03UVVGRFZEdEJRVU5CTzBGQlEwRXNUVUZCU3p0QlFVTk1PMEZCUTBFN1FVRkRRU3hGUVVGRE8wRkJRMFE3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVN4TlFVRkxPMEZCUTB3N1FVRkRRVHRCUVVOQk8wRkJRMEVzVlVGQlV6dEJRVU5VTzBGQlEwRTdRVUZEUVR0QlFVTkJPenM3UVVGSFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFc1RVRkJTenRCUVVOTU8wRkJRMEU3UVVGRFFUdEJRVU5CTEZWQlFWTTdRVUZEVkR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk96czdPMEZCU1VFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUczdRVUZGUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTEUxQlFVczdRVUZEVER0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk96dEJRVVZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk96dEJRVVZCTzBGQlEwRTdRVUZEUVR0QlFVTkJMSGRDUVVGMVFpeHpRa0ZCYzBJN1FVRkROME03UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHM3UVVGRlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVN4elFrRkJjVUk3UVVGRGNrSTdPMEZCUlVFN08wRkJSVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk96dEJRVVZCTEhORFFVRnhRenM3UVVGRmNrTTdRVUZEUVR0QlFVTkJPenRCUVVWQkxEUkNRVUV5UWp0QlFVTXpRanRCUVVOQk8wRkJRMEU3UVVGRFFTdzJRa0ZCTkVJc1ZVRkJWVHM3T3pzN096dEJRM1pNZEVNc1lVRkJXU3hEUVVGRE96czdPenM3UzBGRlNpeExRVUZMTEhWQ1FVRlJMRU5CUVZNc1JVRkJkRUlzUzBGQlN6czdTMEZGVHl4UlFVRlJPMEZCUldoQ0xGbEJSbEVzVVVGQlVTeERRVVZtTEVsQlFVa3NSVUZCUXl4SlFVRkpMRVZCUVVNc1JVRkJSU3hGUVVGRk96SkNRVVpRTEZGQlFWRTdPMEZCU1hwQ0xGTkJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMEZCUTJwQ0xGTkJRVWtzUTBGQlF5eEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRPMEZCUTJJc1UwRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eExRVUZMTEVWQlFVVXNRMEZCUXpzN1FVRkZja0lzVTBGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRMjVDTEZOQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRE96dEJRVVZtTEZOQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hIUVVGSExFbEJRVWtzUjBGQlJ5eFpRVUZYTEVWQlFVY3NRMEZCUXpzN1FVRkZNVU1zVTBGQlNTeEpRVUZKTEVOQlFVTXNSVUZCUlN4RlFVRkZPMEZCUTFnc1YwRkJTU3hEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETzAxQlEyUTdTVUZGUmpzN1owSkJha0pyUWl4UlFVRlJPMEZCYlVJelFpeFhRVUZOTzJOQlFVRXNaMEpCUVVNc1EwRkJReXhGUVVGRk96dEJRVVZPTEdGQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03TzBGQlJXaENMR0ZCUVVrc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF6dFJRVU5rT3p0QlFVVkVMRk5CUVVrN1kwRkJRU3huUWtGQlJ6dEJRVU5NTEdGQlFVa3NRMEZCUXl4RlFVRkZMRWRCUVVjc1MwRkJTeXhEUVVGRE8wRkJRMmhDTEdGQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU03VVVGRGRrSTdPMEZCUlVRc1ZVRkJTenRqUVVGQkxHbENRVUZITzBGQlEwNHNZVUZCU1N4RFFVRkRMRVZCUVVVc1IwRkJSeXhKUVVGSkxFTkJRVU03UVVGRFppeGhRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zWTBGQll5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4RlFVRkRMRXRCUVVzc1JVRkJSU3hIUVVGSExFVkJRVVVzU1VGQlNTeEZRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNN1VVRkRNVW83TzBGQlJVUXNUMEZCUlR0alFVRkJMRmxCUVVNc1QwRkJUeXhGUVVGRk8wRkJRMVlzWVVGQlNTeEpRVUZKTEVOQlFVTXNSVUZCUlN4RlFVRkZPMEZCUTFnc1pVRkJTU3hMUVVGTExFZEJRVWNzVDBGQlR5eEhRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNN1FVRkRPVUlzWlVGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4UFFVRlBMRU5CUVVNN1FVRkRjRUlzWlVGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMVZCUTJoR0xFMUJRVTA3UVVGRFRDeGxRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRTlCUVU4c1EwRkJRenRWUVVOeVFqdFJRVU5HT3pzN08xVkJOVU5yUWl4UlFVRlJPenM3YTBKQlFWSXNVVUZCVVN4RElpd2labWxzWlNJNklpNHZaR2x6ZEM5T1pYaDFjMVZKTG1weklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lLR1oxYm1OMGFXOXVJSGRsWW5CaFkydFZibWwyWlhKellXeE5iMlIxYkdWRVpXWnBibWwwYVc5dUtISnZiM1FzSUdaaFkzUnZjbmtwSUh0Y2JseDBhV1lvZEhsd1pXOW1JR1Y0Y0c5eWRITWdQVDA5SUNkdlltcGxZM1FuSUNZbUlIUjVjR1Z2WmlCdGIyUjFiR1VnUFQwOUlDZHZZbXBsWTNRbktWeHVYSFJjZEcxdlpIVnNaUzVsZUhCdmNuUnpJRDBnWm1GamRHOXllU2dwTzF4dVhIUmxiSE5sSUdsbUtIUjVjR1Z2WmlCa1pXWnBibVVnUFQwOUlDZG1kVzVqZEdsdmJpY2dKaVlnWkdWbWFXNWxMbUZ0WkNsY2JseDBYSFJrWldacGJtVW9XMTBzSUdaaFkzUnZjbmtwTzF4dVhIUmxiSE5sSUdsbUtIUjVjR1Z2WmlCbGVIQnZjblJ6SUQwOVBTQW5iMkpxWldOMEp5bGNibHgwWEhSbGVIQnZjblJ6VzF3aVRtVjRkWE5jSWwwZ1BTQm1ZV04wYjNKNUtDazdYRzVjZEdWc2MyVmNibHgwWEhSeWIyOTBXMXdpVG1WNGRYTmNJbDBnUFNCbVlXTjBiM0o1S0NrN1hHNTlLU2gwYUdsekxDQm1kVzVqZEdsdmJpZ3BJSHRjYm5KbGRIVnliaUJjYmx4dVhHNHZMeUJYUlVKUVFVTkxJRVpQVDFSRlVpQXZMMXh1THk4Z2QyVmljR0ZqYXk5MWJtbDJaWEp6WVd4TmIyUjFiR1ZFWldacGJtbDBhVzl1SWl3aUlGeDBMeThnVkdobElHMXZaSFZzWlNCallXTm9aVnh1SUZ4MGRtRnlJR2x1YzNSaGJHeGxaRTF2WkhWc1pYTWdQU0I3ZlR0Y2JseHVJRngwTHk4Z1ZHaGxJSEpsY1hWcGNtVWdablZ1WTNScGIyNWNiaUJjZEdaMWJtTjBhVzl1SUY5ZmQyVmljR0ZqYTE5eVpYRjFhWEpsWDE4b2JXOWtkV3hsU1dRcElIdGNibHh1SUZ4MFhIUXZMeUJEYUdWamF5QnBaaUJ0YjJSMWJHVWdhWE1nYVc0Z1kyRmphR1ZjYmlCY2RGeDBhV1lvYVc1emRHRnNiR1ZrVFc5a2RXeGxjMXR0YjJSMWJHVkpaRjBwWEc0Z1hIUmNkRngwY21WMGRYSnVJR2x1YzNSaGJHeGxaRTF2WkhWc1pYTmJiVzlrZFd4bFNXUmRMbVY0Y0c5eWRITTdYRzVjYmlCY2RGeDBMeThnUTNKbFlYUmxJR0VnYm1WM0lHMXZaSFZzWlNBb1lXNWtJSEIxZENCcGRDQnBiblJ2SUhSb1pTQmpZV05vWlNsY2JpQmNkRngwZG1GeUlHMXZaSFZzWlNBOUlHbHVjM1JoYkd4bFpFMXZaSFZzWlhOYmJXOWtkV3hsU1dSZElEMGdlMXh1SUZ4MFhIUmNkR1Y0Y0c5eWRITTZJSHQ5TEZ4dUlGeDBYSFJjZEdsa09pQnRiMlIxYkdWSlpDeGNiaUJjZEZ4MFhIUnNiMkZrWldRNklHWmhiSE5sWEc0Z1hIUmNkSDA3WEc1Y2JpQmNkRngwTHk4Z1JYaGxZM1YwWlNCMGFHVWdiVzlrZFd4bElHWjFibU4wYVc5dVhHNGdYSFJjZEcxdlpIVnNaWE5iYlc5a2RXeGxTV1JkTG1OaGJHd29iVzlrZFd4bExtVjRjRzl5ZEhNc0lHMXZaSFZzWlN3Z2JXOWtkV3hsTG1WNGNHOXlkSE1zSUY5ZmQyVmljR0ZqYTE5eVpYRjFhWEpsWDE4cE8xeHVYRzRnWEhSY2RDOHZJRVpzWVdjZ2RHaGxJRzF2WkhWc1pTQmhjeUJzYjJGa1pXUmNiaUJjZEZ4MGJXOWtkV3hsTG14dllXUmxaQ0E5SUhSeWRXVTdYRzVjYmlCY2RGeDBMeThnVW1WMGRYSnVJSFJvWlNCbGVIQnZjblJ6SUc5bUlIUm9aU0J0YjJSMWJHVmNiaUJjZEZ4MGNtVjBkWEp1SUcxdlpIVnNaUzVsZUhCdmNuUnpPMXh1SUZ4MGZWeHVYRzVjYmlCY2RDOHZJR1Y0Y0c5elpTQjBhR1VnYlc5a2RXeGxjeUJ2WW1wbFkzUWdLRjlmZDJWaWNHRmphMTl0YjJSMWJHVnpYMThwWEc0Z1hIUmZYM2RsWW5CaFkydGZjbVZ4ZFdseVpWOWZMbTBnUFNCdGIyUjFiR1Z6TzF4dVhHNGdYSFF2THlCbGVIQnZjMlVnZEdobElHMXZaSFZzWlNCallXTm9aVnh1SUZ4MFgxOTNaV0p3WVdOclgzSmxjWFZwY21WZlh5NWpJRDBnYVc1emRHRnNiR1ZrVFc5a2RXeGxjenRjYmx4dUlGeDBMeThnWDE5M1pXSndZV05yWDNCMVlteHBZMTl3WVhSb1gxOWNiaUJjZEY5ZmQyVmljR0ZqYTE5eVpYRjFhWEpsWDE4dWNDQTlJRndpWENJN1hHNWNiaUJjZEM4dklFeHZZV1FnWlc1MGNua2diVzlrZFd4bElHRnVaQ0J5WlhSMWNtNGdaWGh3YjNKMGMxeHVJRngwY21WMGRYSnVJRjlmZDJWaWNHRmphMTl5WlhGMWFYSmxYMThvTUNrN1hHNWNibHh1WEc0dkx5QlhSVUpRUVVOTElFWlBUMVJGVWlBdkwxeHVMeThnZDJWaWNHRmpheTlpYjI5MGMzUnlZWEFnWWpJMk9XRmpaV1k0WTJGa1lUY3dPRFExTURJaUxDSW5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JtbHRjRzl5ZENCT1pYaDFjMVZKSUdaeWIyMGdKeTR2YkdsaUwyMWhhVzRuTzF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCT1pYaDFjMVZKTzF4dVhHNWNibHh1THk4Z1YwVkNVRUZEU3lCR1QwOVVSVklnTHk5Y2JpOHZJQzR2Zmk5cWMyaHBiblF0Ykc5aFpHVnlJUzR2YVc1a1pYZ3Vhbk1pTENJbmRYTmxJSE4wY21samRDYzdYRzVjYm1sdGNHOXlkQ0JKYm5SbGNtWmhZMlZ6SUdaeWIyMGdKeTR2YVc1MFpYSm1ZV05sY3k4bk8xeHVhVzF3YjNKMElHMWhkR2dnWm5KdmJTQW5MaTkxZEdsc0wyMWhkR2duTzF4dWFXMXdiM0owSUZKaFkyc2dabkp2YlNBbkxpOWpiM0psTDNKaFkyc25PMXh1YVcxd2IzSjBJRlIxYm1VZ1puSnZiU0FuTGk5MGRXNXBibWN2ZEhWdWFXNW5KenRjYm1sdGNHOXlkQ0FxSUdGeklGUnlZVzV6Wm05eWJTQm1jbTl0SUNjdUwzVjBhV3d2ZEhKaGJuTm1iM0p0Snp0Y2JseHViR1YwSUVOdmRXNTBaWElnUFNCeVpYRjFhWEpsS0NjdUwyMXZaR1ZzY3k5amIzVnVkR1Z5SnlrN1hHNXNaWFFnVW1Ga2FXOGdQU0J5WlhGMWFYSmxLQ2N1TDIxdlpHVnNjeTl5WVdScGJ5Y3BPMXh1YkdWMElFUnlkVzVySUQwZ2NtVnhkV2x5WlNnbkxpOXRiMlJsYkhNdlpISjFibXNuS1R0Y2JteGxkQ0JUWlhGMVpXNWpaU0E5SUhKbGNYVnBjbVVvSnk0dmJXOWtaV3h6TDNObGNYVmxibU5sSnlrN1hHNXNaWFFnVFdGMGNtbDRJRDBnY21WeGRXbHlaU2duTGk5dGIyUmxiSE12YldGMGNtbDRKeWs3WEc1Y2JtbHRjRzl5ZENCWFFVRkRiRzlqYXlCbWNtOXRJQ2QzWVdGamJHOWpheWM3WEc1cGJYQnZjblFnU1c1MFpYSjJZV3dnWm5KdmJTQW5MaTkwYVcxbEwybHVkR1Z5ZG1Gc0p6dGNibHh1WEc0dktpcGNiazVsZUhWelZVa2dQVDRnWTNKbFlYUmxaQ0JoY3lCT1pYaDFjMXh1S2k5Y2JseHVZMnhoYzNNZ1RtVjRkWE5WU1NCN1hHNWNiaUFnSUNCamIyNXpkSEoxWTNSdmNpaGpiMjUwWlhoMEtTQjdYRzVjYmlBZ0lDQWdJQ0FnWm05eUlDaHNaWFFnYTJWNUlHbHVJRWx1ZEdWeVptRmpaWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhOYmEyVjVYU0E5SUVsdWRHVnlabUZqWlhOYmEyVjVYVHRjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lHWnZjaUFvYkdWMElHdGxlU0JwYmlCdFlYUm9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6VzJ0bGVWMGdQU0J0WVhSb1cydGxlVjA3WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQnNaWFFnUTI5eVpTQTlJSHRjYmlBZ0lDQWdJQ0FnSUNBblVtRmpheWM2SUZKaFkydGNiaUFnSUNBZ0lDQWdmVHRjYmx4dUlDQWdJQ0FnSUNCc1pYUWdUVzlrWld4eklEMGdlMXh1SUNBZ0lDQWdJQ0FnSUNkRGIzVnVkR1Z5SnpvZ1EyOTFiblJsY2l4Y2JpQWdJQ0FnSUNBZ0lDQW5VbUZrYVc4bk9pQlNZV1JwYnl4Y2JpQWdJQ0FnSUNBZ0lDQW5SSEoxYm1zbk9pQkVjblZ1YXl4Y2JpQWdJQ0FnSUNBZ0lDQW5VMlZ4ZFdWdVkyVW5PaUJUWlhGMVpXNWpaU3hjYmlBZ0lDQWdJQ0FnSUNBblRXRjBjbWw0SnpvZ1RXRjBjbWw0WEc0Z0lDQWdJQ0FnSUgwN1hHNWNiaUFnSUNBZ0lDQWdabTl5SUNoc1pYUWdhMlY1SUdsdUlFMXZaR1ZzY3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvYVhOYmEyVjVYU0E5SUUxdlpHVnNjMXRyWlhsZE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnWm05eUlDaHNaWFFnYTJWNUlHbHVJRU52Y21VcElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUdselcydGxlVjBnUFNCRGIzSmxXMnRsZVYwN1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0JzWlhRZ1JHVm1ZWFZzZEVOdmJuUmxlSFFnUFNCM2FXNWtiM2N1UVhWa2FXOURiMjUwWlhoMElIeDhJSGRwYm1SdmR5NTNaV0pyYVhSQmRXUnBiME52Ym5SbGVIUTdYRzRnSUNBZ0lDQWdJSFJvYVhNdVgyTnZiblJsZUhRZ1BTQmpiMjUwWlhoMElIeDhJRzVsZHlCRVpXWmhkV3gwUTI5dWRHVjRkQ2dwTzF4dVhHNGdJQ0FnSUNBZ0lIUm9hWE11ZEhWdVpTQTlJRzVsZHlCVWRXNWxLQ2s3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVibTkwWlNBOUlIUm9hWE11ZEhWdVpTNXViM1JsTG1KcGJtUW9kR2hwY3k1MGRXNWxLVHRjYmx4dUlDQWdJQ0FnSUNCMGFHbHpMbU5zYjJOcklEMGdibVYzSUZkQlFVTnNiMk5yS0hSb2FYTXVYMk52Ym5SbGVIUXBPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtTnNiMk5yTG5OMFlYSjBLQ2s3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVTVzUwWlhKMllXd2dQU0JKYm5SbGNuWmhiRHRjYmx4dUlDQWdJQ0FnSUNCMGFHbHpMbU52Ykc5eWN5QTlJSHRjYmlBZ0lDQWdJQ0FnSUNCaFkyTmxiblE2SUNjak1tSmlKeXhjYmlBZ0lDQWdJQ0FnSUNCbWFXeHNPaUFuSTJWbFpTY3NYRzRnSUNBZ0lDQWdJQ0FnYkdsbmFIUTZJQ2NqWm1abUp5eGNiaUFnSUNBZ0lDQWdJQ0JrWVhKck9pQW5Jek16TXljc1hHNGdJQ0FnSUNBZ0lDQWdiV1ZrYVhWdFRHbG5hSFE2SUNjalkyTmpKeXhjYmlBZ0lDQWdJQ0FnSUNCdFpXUnBkVzFFWVhKck9pQW5JelkyTmlkY2JpQWdJQ0FnSUNBZ2ZUdGNibHh1SUNBZ0lDQWdJQ0IwYUdsekxuUnlZVzV6Wm05eWJTQTlJRlJ5WVc1elptOXliVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NWhaR1FnUFNCVWNtRnVjMlp2Y20wdVlXUmtPMXh1WEc1Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVCWkdRZ1BTQjdmVHRjYmlBZ0lDQWdJQ0FnWm05eUlDaHNaWFFnYTJWNUlHbHVJRWx1ZEdWeVptRmpaWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TGtGa1pGdHJaWGxkSUQwZ1ZISmhibk5tYjNKdExtRmtaQzVpYVc1a0tIUm9hWE1zYTJWNUtUdGNiaUFnSUNBZ0lDQWdmVnh1WEc1Y2JseHVYRzRnSUNBZ0lDQWdJQzhxSUdOeVpXRjBaU0JrWldaaGRXeDBJR052YlhCdmJtVnVkQ0J6YVhwbElDb3ZYRzRnSUNBZ0lDQWdJQzhxSUdwemFHbHVkQ0JwWjI1dmNtVTZjM1JoY25RZ0tpOWNiaUFnSUNBZ0lDQWdkbUZ5SUdWNGFYTjBhVzVuVTNSNWJHVnphR1ZsZEhNZ1BTQmtiMk4xYldWdWRDNW5aWFJGYkdWdFpXNTBjMEo1VkdGblRtRnRaU2hjSW5OMGVXeGxYQ0lwTzF4dUlDQWdJQ0FnSUNCMllYSWdaR1ZtWVhWc2RGTnBlbVZFWldOc1lYSmhkR2x2YmlBOUlDZGJibVY0ZFhNdGRXbGRlMmhsYVdkb2REbzFNREF3Y0hnN2QybGtkR2c2TlRBd01IQjRmU2M3WEc0Z0lDQWdJQ0FnSUhaaGNpQmtaV1poZFd4MFUzUjViR1ZPYjJSbElEMGdaRzlqZFcxbGJuUXVZM0psWVhSbFJXeGxiV1Z1ZENnbmMzUjViR1VuS1R0Y2JpQWdJQ0FnSUNBZ1pHVm1ZWFZzZEZOMGVXeGxUbTlrWlM1MGVYQmxJRDBnSjNSbGVIUXZZM056Snp0Y2JpQWdJQ0FnSUNBZ1pHVm1ZWFZzZEZOMGVXeGxUbTlrWlM1cGJtNWxja2hVVFV3Z1BTQmtaV1poZFd4MFUybDZaVVJsWTJ4aGNtRjBhVzl1TzF4dUlDQWdJQ0FnSUNCcFppQW9aWGhwYzNScGJtZFRkSGxzWlhOb1pXVjBjeTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdkbUZ5SUhCaGNtVnVkQ0E5SUdWNGFYTjBhVzVuVTNSNWJHVnphR1ZsZEhOYk1GMHVjR0Z5Wlc1MFRtOWtaVnh1SUNBZ0lDQWdJQ0FnSUhCaGNtVnVkQzVwYm5ObGNuUkNaV1p2Y21Vb0lHUmxabUYxYkhSVGRIbHNaVTV2WkdVc0lHVjRhWE4wYVc1blUzUjViR1Z6YUdWbGRITmJNRjBwWEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ1pHOWpkVzFsYm5RdWQzSnBkR1VvSnp4emRIbHNaVDRuSzJSbFptRjFiSFJUYVhwbFJHVmpiR0Z5WVhScGIyNHJKenhjWEM5emRIbHNaVDRuS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQXZLaUJxYzJocGJuUWdhV2R1YjNKbE9tVnVaQ0FxTDF4dVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnWjJWMElHTnZiblJsZUhRb0tTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTVmWTI5dWRHVjRkRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnpaWFFnWTI5dWRHVjRkQ2hqZEhncElIdGNiaUFnSUNBZ0lIUm9hWE11WTJ4dlkyc3VjM1J2Y0NncE8xeHVJQ0FnSUNBZ2RHaHBjeTVmWTI5dWRHVjRkQ0E5SUdOMGVEdGNiaUFnSUNBZ0lIUm9hWE11WTJ4dlkyc2dQU0J1WlhjZ1YwRkJRMnh2WTJzb2RHaHBjeTVqYjI1MFpYaDBLVHRjYmlBZ0lDQWdJSFJvYVhNdVkyeHZZMnN1YzNSaGNuUW9LVHRjYmlBZ0lDQjlYRzVjYmx4dVhHNTlYRzVjYm14bGRDQk9aWGgxY3lBOUlHNWxkeUJPWlhoMWMxVkpLQ2s3WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCamIyeHZjbk1vS1NCN1hHNGdJQ0FnY21WMGRYSnVJRTVsZUhWekxtTnZiRzl5Y3p0Y2JuMWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmpiMjUwWlhoMEtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCT1pYaDFjeTVqYjI1MFpYaDBPMXh1ZlZ4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdOc2IyTnJLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQk9aWGgxY3k1amJHOWphenRjYm4xY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1RtVjRkWE03WEc1Y2JseHVYRzR2THlCWFJVSlFRVU5MSUVaUFQxUkZVaUF2TDF4dUx5OGdMaTkrTDJwemFHbHVkQzFzYjJGa1pYSWhMaTlzYVdJdmJXRnBiaTVxY3lJc0ltVjRjRzl5ZENCa1pXWmhkV3gwSUh0Y2JpQWdVRzl6YVhScGIyNDZJSEpsY1hWcGNtVW9KeTR2Y0c5emFYUnBiMjRuS1N4Y2JpQWdVMnhwWkdWeU9pQnlaWEYxYVhKbEtDY3VMM05zYVdSbGNpY3BMRnh1SUNCVWIyZG5iR1U2SUhKbGNYVnBjbVVvSnk0dmRHOW5aMnhsSnlrc1hHNHZLaUFnVW1GdVoyVTZJSEpsY1hWcGNtVW9KeTR2Y21GdVoyVnpiR2xrWlhJbktTeGNiaUFnVjJGMlpXWnZjbTA2SUhKbGNYVnBjbVVvSnk0dmQyRjJaV1p2Y20wbktTd2dLaTljYmlBZ1FuVjBkRzl1T2lCeVpYRjFhWEpsS0NjdUwySjFkSFJ2YmljcExGeHVJQ0JVWlhoMFFuVjBkRzl1T2lCeVpYRjFhWEpsS0NjdUwzUmxlSFJpZFhSMGIyNG5LU3hjYmlBZ1VtRmthVzlDZFhSMGIyNDZJSEpsY1hWcGNtVW9KeTR2Y21Ga2FXOWlkWFIwYjI0bktTeGNiaUFnVG5WdFltVnlPaUJ5WlhGMWFYSmxLQ2N1TDI1MWJXSmxjaWNwTEZ4dUlDQlRaV3hsWTNRNklISmxjWFZwY21Vb0p5NHZjMlZzWldOMEp5a3NYRzRnSUVScFlXdzZJSEpsY1hWcGNtVW9KeTR2WkdsaGJDY3BMRnh1SUNCUWFXRnViem9nY21WeGRXbHlaU2duTGk5d2FXRnVieWNwTEZ4dUlDQlRaWEYxWlc1alpYSTZJSEpsY1hWcGNtVW9KeTR2YzJWeGRXVnVZMlZ5Snlrc1hHNGdJRkJoYmpKRU9pQnlaWEYxYVhKbEtDY3VMM0JoYmpKa0p5a3NYRzRnSUZScGJIUTZJSEpsY1hWcGNtVW9KeTR2ZEdsc2RDY3BMRnh1SUNCTmRXeDBhWE5zYVdSbGNqb2djbVZ4ZFdseVpTZ25MaTl0ZFd4MGFYTnNhV1JsY2ljcExGeHVJQ0JRWVc0NklISmxjWFZwY21Vb0p5NHZjR0Z1Snlrc1hHNGdJRVZ1ZG1Wc2IzQmxPaUJ5WlhGMWFYSmxLQ2N1TDJWdWRtVnNiM0JsSnlrc1hHNGdJRk53WldOMGNtOW5jbUZ0T2lCeVpYRjFhWEpsS0NjdUwzTndaV04wY205bmNtRnRKeWtzWEc0Z0lFMWxkR1Z5T2lCeVpYRjFhWEpsS0NjdUwyMWxkR1Z5Snlrc1hHNGdJRTl6WTJsc2JHOXpZMjl3WlRvZ2NtVnhkV2x5WlNnbkxpOXZjMk5wYkd4dmMyTnZjR1VuS1Z4dWZUdGNibHh1WEc1Y2JpOHZJRmRGUWxCQlEwc2dSazlQVkVWU0lDOHZYRzR2THlBdUwzNHZhbk5vYVc1MExXeHZZV1JsY2lFdUwyeHBZaTlwYm5SbGNtWmhZMlZ6TDJsdVpHVjRMbXB6SWl3aVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JteGxkQ0J6ZG1jZ1BTQnlaWEYxYVhKbEtDY3VMaTkxZEdsc0wzTjJaeWNwTzF4dWJHVjBJRWx1ZEdWeVptRmpaU0E5SUhKbGNYVnBjbVVvSnk0dUwyTnZjbVV2YVc1MFpYSm1ZV05sSnlrN1hHNXNaWFFnVTNSbGNDQTlJSEpsY1hWcGNtVW9KeTR1TDIxdlpHVnNjeTl6ZEdWd0p5azdYRzVwYlhCdmNuUWdLaUJoY3lCSmJuUmxjbUZqZEdsdmJpQm1jbTl0SUNjdUxpOTFkR2xzTDJsdWRHVnlZV04wYVc5dUp6dGNibHh1THlvcVhHNHFJRkJ2YzJsMGFXOXVYRzRxWEc0cUlFQmtaWE5qY21sd2RHbHZiaUJVZDI4dFpHbHRaVzV6YVc5dVlXd2dkRzkxWTJnZ2MyeHBaR1Z5TGx4dUtseHVLaUJBWkdWdGJ5QThjM0JoYmlCdVpYaDFjeTExYVQxY0luQnZjMmwwYVc5dVhDSStQQzl6Y0dGdVBseHVLbHh1S2lCQVpYaGhiWEJzWlZ4dUtpQjJZWElnY0c5emFYUnBiMjRnUFNCdVpYY2dUbVY0ZFhNdVVHOXphWFJwYjI0b0p5TjBZWEpuWlhRbktWeHVLbHh1S2lCQVpYaGhiWEJzWlZ4dUtpQjJZWElnY0c5emFYUnBiMjRnUFNCdVpYY2dUbVY0ZFhNdVVHOXphWFJwYjI0b0p5TjBZWEpuWlhRbkxIdGNiaW9nSUNBbmMybDZaU2M2SUZzeU1EQXNNakF3WFN4Y2Jpb2dJQ0FuYlc5a1pTYzZJQ2RoWW5OdmJIVjBaU2NzSUNBdkx5QmNJbUZpYzI5c2RYUmxYQ0lnYjNJZ1hDSnlaV3hoZEdsMlpWd2lYRzRxSUNBZ0ozZ25PaUF3TGpVc0lDQXZMeUJwYm1sMGFXRnNJSGdnZG1Gc2RXVmNiaW9nSUNBbmJXbHVXQ2M2SURBc1hHNHFJQ0FnSjIxaGVGZ25PaUF4TEZ4dUtpQWdJQ2R6ZEdWd1dDYzZJREFzWEc0cUlDQWdKM2tuT2lBd0xqVXNJQ0F2THlCcGJtbDBhV0ZzSUhrZ2RtRnNkV1ZjYmlvZ0lDQW5iV2x1V1NjNklEQXNYRzRxSUNBZ0oyMWhlRmtuT2lBeExGeHVLaUFnSUNkemRHVndXU2M2SURCY2Jpb2dmU2xjYmlwY2Jpb2dRRzkxZEhCMWRGeHVLaUJqYUdGdVoyVmNiaW9nUm1seVpYTWdZVzU1SUhScGJXVWdkR2hsSUdsdWRHVnlabUZqWlNkeklIWmhiSFZsSUdOb1lXNW5aWE11SUR4aWNqNWNiaW9nVkdobElHVjJaVzUwSUdSaGRHRWdhWE1nWVc0Z2IySnFaV04wSUhkcGRHZ2dlQ0JoYm1RZ2VTQndjbTl3WlhKMGFXVnpJR052Ym5SaGFXNXBibWNnZEdobElIZ2dZVzVrSUhrZ2RtRnNkV1Z6SUc5bUlIUm9aU0JwYm5SbGNtWmhZMlV1WEc0cVhHNHFJRUJ2ZFhSd2RYUmxlR0Z0Y0d4bFhHNHFJSEJ2YzJsMGFXOXVMbTl1S0NkamFHRnVaMlVuTEdaMWJtTjBhVzl1S0hZcElIdGNiaW9nSUNCamIyNXpiMnhsTG14dlp5aDJLVHRjYmlvZ2ZTbGNiaXBjYmlwY2Jpb3ZYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR05zWVhOeklGQnZjMmwwYVc5dUlHVjRkR1Z1WkhNZ1NXNTBaWEptWVdObElIdGNibHh1SUNCamIyNXpkSEoxWTNSdmNpZ3BJSHRjYmx4dUlDQWdJR3hsZENCdmNIUnBiMjV6SUQwZ1d5ZDJZV3gxWlNkZE8xeHVYRzRnSUNBZ2JHVjBJR1JsWm1GMWJIUnpJRDBnZTF4dUlDQWdJQ0FnSjNOcGVtVW5PaUJiTWpBd0xESXdNRjBzWEc0Z0lDQWdJQ0FuYlc5a1pTYzZJQ2RoWW5OdmJIVjBaU2NzWEc0Z0lDQWdJQ0FuYldsdVdDYzZJREFzWEc0Z0lDQWdJQ0FuYldGNFdDYzZJREVzWEc0Z0lDQWdJQ0FuYzNSbGNGZ25PaUF3TEZ4dUlDQWdJQ0FnSjNnbk9pQXdMalVzWEc0Z0lDQWdJQ0FuYldsdVdTYzZJREFzWEc0Z0lDQWdJQ0FuYldGNFdTYzZJREVzWEc0Z0lDQWdJQ0FuYzNSbGNGa25PaUF3TEZ4dUlDQWdJQ0FnSjNrbk9pQXdMalZjYmlBZ0lDQjlPMXh1WEc0Z0lDQWdjM1Z3WlhJb1lYSm5kVzFsYm5SekxHOXdkR2x2Ym5Nc1pHVm1ZWFZzZEhNcE8xeHVYRzVjYmlBZ0lDQjBhR2x6TGw5NElEMGdibVYzSUZOMFpYQW9JSFJvYVhNdWMyVjBkR2x1WjNNdWJXbHVXQ3dnZEdocGN5NXpaWFIwYVc1bmN5NXRZWGhZTENCMGFHbHpMbk5sZEhScGJtZHpMbk4wWlhCWUxDQjBhR2x6TG5ObGRIUnBibWR6TG5nZ0tUdGNiaUFnSUNCMGFHbHpMbDk1SUQwZ2JtVjNJRk4wWlhBb0lIUm9hWE11YzJWMGRHbHVaM011YldsdVdTd2dkR2hwY3k1elpYUjBhVzVuY3k1dFlYaFpMQ0IwYUdsekxuTmxkSFJwYm1kekxuTjBaWEJaTENCMGFHbHpMbk5sZEhScGJtZHpMbmtnS1R0Y2JseHVJQ0FnSUhSb2FYTXVjRzl6YVhScGIyNGdQU0I3WEc0Z0lDQWdJQ0I0T2lCdVpYY2dTVzUwWlhKaFkzUnBiMjR1U0dGdVpHeGxLSFJvYVhNdWMyVjBkR2x1WjNNdWJXOWtaU3duYUc5eWFYcHZiblJoYkNjc1d6QXNkR2hwY3k1M2FXUjBhRjBzVzNSb2FYTXVhR1ZwWjJoMExEQmRLU3hjYmlBZ0lDQWdJSGs2SUc1bGR5QkpiblJsY21GamRHbHZiaTVJWVc1a2JHVW9kR2hwY3k1elpYUjBhVzVuY3k1dGIyUmxMQ2QyWlhKMGFXTmhiQ2NzV3pBc2RHaHBjeTUzYVdSMGFGMHNXM1JvYVhNdWFHVnBaMmgwTERCZEtWeHVJQ0FnSUgwN1hHNGdJQ0FnZEdocGN5NXdiM05wZEdsdmJpNTRMblpoYkhWbElEMGdkR2hwY3k1ZmVDNXViM0p0WVd4cGVtVmtPMXh1SUNBZ0lIUm9hWE11Y0c5emFYUnBiMjR1ZVM1MllXeDFaU0E5SUhSb2FYTXVYM2t1Ym05eWJXRnNhWHBsWkR0Y2JseHVJQ0FnSUhSb2FYTXVhVzVwZENncE8xeHVJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtDazdYRzVjYmlBZ2ZWeHVYRzRnSUdKMWFXeGtTVzUwWlhKbVlXTmxLQ2tnZTF4dVhHNGdJQ0FnZEdocGN5NXJibTlpSUQwZ2MzWm5MbU55WldGMFpTZ25ZMmx5WTJ4bEp5azdYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbUZ3Y0dWdVpFTm9hV3hrS0hSb2FYTXVhMjV2WWlrN1hHNGdJQ0FnWEc0Z0lIMWNibHh1SUNCemFYcGxTVzUwWlhKbVlXTmxLQ2tnZTF4dVhHNGdJQ0FnSUNCMGFHbHpMbkJ2YzJsMGFXOXVMbmd1Y21WemFYcGxLRnN3TEhSb2FYTXVkMmxrZEdoZExGdDBhR2x6TG1obGFXZG9kQ3d3WFNrN1hHNGdJQ0FnSUNCMGFHbHpMbkJ2YzJsMGFXOXVMbmt1Y21WemFYcGxLRnN3TEhSb2FYTXVkMmxrZEdoZExGdDBhR2x6TG1obGFXZG9kQ3d3WFNrN1hHNWNiaUFnSUNBZ0lIUm9hWE11WDIxcGJrUnBiV1Z1YzJsdmJpQTlJRTFoZEdndWJXbHVLSFJvYVhNdWQybGtkR2dzZEdocGN5NW9aV2xuYUhRcE8xeHVYRzRnSUNBZ0lDQjBhR2x6TG10dWIySlNZV1JwZFhNZ1BTQjdYRzRnSUNBZ0lDQWdJRzltWmpvZ2ZuNG9kR2hwY3k1ZmJXbHVSR2x0Wlc1emFXOXVMekV3TUNrZ0tpQTFJQ3NnTlN4Y2JpQWdJQ0FnSUgwN1hHNGdJQ0FnSUNCMGFHbHpMbXR1YjJKU1lXUnBkWE11YjI0Z1BTQjBhR2x6TG10dWIySlNZV1JwZFhNdWIyWm1JQ29nTWp0Y2JseHVJQ0FnSUNBZ2RHaHBjeTVyYm05aUxuTmxkRUYwZEhKcFluVjBaU2duWTNnbkxIUm9hWE11ZDJsa2RHZ3ZNaWs3WEc0Z0lDQWdJQ0IwYUdsekxtdHViMkl1YzJWMFFYUjBjbWxpZFhSbEtDZGplU2NzZEdocGN5NW9aV2xuYUhRdk1pazdYRzRnSUNBZ0lDQjBhR2x6TG10dWIySXVjMlYwUVhSMGNtbGlkWFJsS0NkeUp5eDBhR2x6TG10dWIySlNZV1JwZFhNdWIyWm1LVHRjYmlBZ2ZWeHVYRzRnSUdOdmJHOXlTVzUwWlhKbVlXTmxLQ2tnZTF4dUlDQWdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExuTjBlV3hsTG1KaFkydG5jbTkxYm1SRGIyeHZjaUE5SUhSb2FYTXVZMjlzYjNKekxtWnBiR3c3WEc0Z0lDQWdJQ0IwYUdsekxtdHViMkl1YzJWMFFYUjBjbWxpZFhSbEtDZG1hV3hzSnl3Z2RHaHBjeTVqYjJ4dmNuTXVZV05qWlc1MEtUdGNiaUFnZlZ4dVhHNGdJSEpsYm1SbGNpZ3BJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NWpiR2xqYTJWa0tTQjdYRzRnSUNBZ0x5OGdJSFJvYVhNdWEyNXZZbEpoWkdsMWN5QTlJRE13TzF4dUlDQWdJQ0FnZEdocGN5NXJibTlpTG5ObGRFRjBkSEpwWW5WMFpTZ25jaWNzZEdocGN5NXJibTlpVW1Ga2FYVnpMbTl1S1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDOHZJQ0IwYUdsekxtdHViMkpTWVdScGRYTWdQU0F4TlR0Y2JpQWdJQ0FnSUhSb2FYTXVhMjV2WWk1elpYUkJkSFJ5YVdKMWRHVW9KM0luTEhSb2FYTXVhMjV2WWxKaFpHbDFjeTV2Wm1ZcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhSb2FYTXVhMjV2WWtOdmIzSmthVzVoZEdWeklEMGdlMXh1SUNBZ0lDQWdlRG9nZEdocGN5NWZlQzV1YjNKdFlXeHBlbVZrSUNvZ2RHaHBjeTUzYVdSMGFDeGNiaUFnSUNBZ0lIazZJSFJvYVhNdWFHVnBaMmgwSUMwZ2RHaHBjeTVmZVM1dWIzSnRZV3hwZW1Wa0lDb2dkR2hwY3k1b1pXbG5hSFJjYmlBZ0lDQjlPMXh1WEc0Z0lDQWdkR2hwY3k1cmJtOWlMbk5sZEVGMGRISnBZblYwWlNnblkzZ25MSFJvYVhNdWEyNXZZa052YjNKa2FXNWhkR1Z6TG5ncE8xeHVJQ0FnSUhSb2FYTXVhMjV2WWk1elpYUkJkSFJ5YVdKMWRHVW9KMk41Snl4MGFHbHpMbXR1YjJKRGIyOXlaR2x1WVhSbGN5NTVLVHRjYmlBZ2ZWeHVYRzVjYmlBZ1kyeHBZMnNvS1NCN1hHNGdJQ0FnZEdocGN5NXdiM05wZEdsdmJpNTRMbUZ1WTJodmNpQTlJSFJvYVhNdWJXOTFjMlU3WEc0Z0lDQWdkR2hwY3k1d2IzTnBkR2x2Ymk1NUxtRnVZMmh2Y2lBOUlIUm9hWE11Ylc5MWMyVTdYRzRnSUNBZ2RHaHBjeTV0YjNabEtDazdYRzRnSUgxY2JseHVJQ0J0YjNabEtDa2dlMXh1SUNBZ0lHbG1JQ2gwYUdsekxtTnNhV05yWldRcElIdGNiaUFnSUNBZ0lIUm9hWE11Y0c5emFYUnBiMjR1ZUM1MWNHUmhkR1VvZEdocGN5NXRiM1Z6WlNrN1hHNGdJQ0FnSUNCMGFHbHpMbkJ2YzJsMGFXOXVMbmt1ZFhCa1lYUmxLSFJvYVhNdWJXOTFjMlVwTzF4dUlDQWdJQ0FnZEdocGN5NWZlQzUxY0dSaGRHVk9iM0p0WVd3b0lIUm9hWE11Y0c5emFYUnBiMjR1ZUM1MllXeDFaU0FwTzF4dUlDQWdJQ0FnZEdocGN5NWZlUzUxY0dSaGRHVk9iM0p0WVd3b0lIUm9hWE11Y0c5emFYUnBiMjR1ZVM1MllXeDFaU0FwTzF4dUlDQWdJQ0FnZEdocGN5NWxiV2wwS0NkamFHRnVaMlVuTEh0Y2JpQWdJQ0FnSUNBZ2VEb2dkR2hwY3k1ZmVDNTJZV3gxWlN4Y2JpQWdJQ0FnSUNBZ2VUb2dkR2hwY3k1ZmVTNTJZV3gxWlZ4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNCMGFHbHpMbkpsYm1SbGNpZ3BPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSEpsYkdWaGMyVW9LU0I3WEc0Z0lDQWdkR2hwY3k1eVpXNWtaWElvS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBcUlGUm9aU0JwYm5SbGNtWmhZMlVuY3lCNElIWmhiSFZsTGlCWGFHVnVJSE5sZEN3Z2FYUWdkMmxzYkNCaGRYUnZiV0YwYVdOaGJHeDVJR0ZrYW5WemRDQjBieUJtYVhRZ2JXbHVMMjFoZUM5emRHVndJSE5sZEhScGJtZHpJRzltSUhSb1pTQnBiblJsY21aaFkyVXVYRzRnSUNvZ1FIUjVjR1VnZTI5aWFtVmpkSDFjYmlBZ0tpQkFaWGhoYlhCc1pTQndiM05wZEdsdmJpNTRJRDBnTUM0MU8xeHVJQ0FxTDF4dVhHNGdJR2RsZENCNEtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDk0TG5aaGJIVmxPMXh1SUNCOVhHNWNiaUFnYzJWMElIZ29kbUZzZFdVcElIdGNiaUFnSUNCMGFHbHpMbDk0TG5Wd1pHRjBaU2gyWVd4MVpTazdYRzRnSUNBZ2RHaHBjeTVsYldsMEtDZGphR0Z1WjJVbkxIdGNiaUFnSUNBZ0lIZzZJSFJvYVhNdVgzZ3VkbUZzZFdVc1hHNGdJQ0FnSUNCNU9pQjBhR2x6TGw5NUxuWmhiSFZsWEc0Z0lDQWdmU2s3WEc0Z0lDQWdkR2hwY3k1eVpXNWtaWElvS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBcUlGUm9aU0JwYm5SbGNtWmhZMlVuY3lCNUlIWmhiSFZsY3k0Z1YyaGxiaUJ6WlhRc0lHbDBJSGRwYkd3Z1lYVjBiMjFoZEdsallXeHNlU0JoWkdwMWMzUWdkRzhnWm1sMElHMXBiaTl0WVhndmMzUmxjQ0J6WlhSMGFXNW5jeUJ2WmlCMGFHVWdhVzUwWlhKbVlXTmxMbHh1SUNBcUlFQjBlWEJsSUh0dlltcGxZM1I5WEc0Z0lDb2dRR1Y0WVcxd2JHVWdjRzl6YVhScGIyNHVlQ0E5SURBdU5UdGNiaUFnS2k5Y2JseHVJQ0JuWlhRZ2VTZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVmZVM1MllXeDFaVHRjYmlBZ2ZWeHVYRzRnSUhObGRDQjVLSFpoYkhWbEtTQjdYRzRnSUNBZ2RHaHBjeTVmZVM1MWNHUmhkR1VvZG1Gc2RXVXBPMXh1SUNBZ0lIUm9hWE11WlcxcGRDZ25ZMmhoYm1kbEp5eDdYRzRnSUNBZ0lDQjRPaUIwYUdsekxsOTRMblpoYkhWbExGeHVJQ0FnSUNBZ2VUb2dkR2hwY3k1ZmVTNTJZV3gxWlZ4dUlDQWdJSDBwTzF4dUlDQWdJSFJvYVhNdWNtVnVaR1Z5S0NrN1hHNGdJSDFjYmx4dVhHNWNiaUFnWjJWMElHNXZjbTFoYkdsNlpXUW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIdGNiaUFnSUNBZ0lIZzZJSFJvYVhNdVgzZ3VibTl5YldGc2FYcGxaQ3hjYmlBZ0lDQWdJSGs2SUhSb2FYTXVYM2t1Ym05eWJXRnNhWHBsWkZ4dUlDQWdJSDA3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnS2lCVWFHVWdiRzkzWlhJZ2JHbHRhWFFnYjJZZ2RtRnNkV1VnYjI0Z2RHaGxJSGdnWVhocGMxeHVJQ0FxSUVCMGVYQmxJSHR2WW1wbFkzUjlYRzRnSUNvdlhHNGdJR2RsZENCdGFXNVlLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TGw5NExtMXBianRjYmlBZ2ZWeHVYRzRnSUhObGRDQnRhVzVZS0hZcElIdGNiaUFnSUNCMGFHbHpMbDk0TG0xcGJpQTlJSFk3WEc0Z0lDQWdkR2hwY3k1eVpXNWtaWElvS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBcUlGUm9aU0JzYjNkbGNpQnNhVzFwZENCdlppQjJZV3gxWlNCdmJpQjBhR1VnZVNCaGVHbHpYRzRnSUNvZ1FIUjVjR1VnZTI5aWFtVmpkSDFjYmlBZ0tpOWNiaUFnWjJWMElHMXBibGtvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVgza3ViV2x1TzF4dUlDQjlYRzVjYmlBZ2MyVjBJRzFwYmxrb2Rpa2dlMXh1SUNBZ0lIUm9hWE11WDNrdWJXbHVJRDBnZGp0Y2JpQWdJQ0IwYUdsekxuSmxibVJsY2lncE8xeHVJQ0I5WEc1Y2JseHVJQ0F2S2lwY2JpQWdLaUJVYUdVZ2RYQndaWElnYkdsdGFYUWdiMllnZG1Gc2RXVWdiMjRnZEdobElIZ2dZWGhwYzF4dUlDQXFJRUIwZVhCbElIdHZZbXBsWTNSOVhHNGdJQ292WEc0Z0lHZGxkQ0J0WVhoWUtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDk0TG0xaGVEdGNiaUFnZlZ4dVhHNGdJSE5sZENCdFlYaFlLSFlwSUh0Y2JpQWdJQ0IwYUdsekxsOTRMbTFoZUNBOUlIWTdYRzRnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmlBZ2ZWeHVYRzVjYmlBZ0x5b3FYRzRnSUNvZ1ZHaGxJSFZ3Y0dWeUlHeHBiV2wwSUc5bUlIWmhiSFZsSUc5dUlIUm9aU0I1SUdGNGFYTmNiaUFnS2lCQWRIbHdaU0I3YjJKcVpXTjBmVnh1SUNBcUwxeHVJQ0JuWlhRZ2JXRjRXU2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1ZmVTNXRZWGc3WEc0Z0lIMWNibHh1SUNCelpYUWdiV0Y0V1NoMktTQjdYRzRnSUNBZ2RHaHBjeTVmZVM1dFlYZ2dQU0IyTzF4dUlDQWdJSFJvYVhNdWNtVnVaR1Z5S0NrN1hHNGdJSDFjYmx4dVhHNGdJQzhxS2x4dUlDQXFJRlJvWlNCcGJtTnlaVzFsYm5SaGJDQnpkR1Z3SUc5bUlIWmhiSFZsY3lCdmJpQjBhR1VnZUNCaGVHbHpYRzRnSUNvZ1FIUjVjR1VnZTI5aWFtVmpkSDFjYmlBZ0tpOWNiaUFnWjJWMElITjBaWEJZS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxsOTRMbk4wWlhBN1hHNGdJSDFjYmx4dUlDQnpaWFFnYzNSbGNGZ29kaWtnZTF4dUlDQWdJSFJvYVhNdVgzZ3VjM1JsY0NBOUlIWTdYRzRnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmlBZ2ZWeHVYRzVjYmlBZ0x5b3FYRzRnSUNvZ1ZHaGxJR2x1WTNKbGJXVnVkR0ZzSUhOMFpYQWdiMllnZG1Gc2RXVnpJRzl1SUhSb1pTQjVJR0Y0YVhOY2JpQWdLaUJBZEhsd1pTQjdiMkpxWldOMGZWeHVJQ0FxTDF4dUlDQm5aWFFnYzNSbGNGa29LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WDNrdWMzUmxjRHRjYmlBZ2ZWeHVYRzRnSUhObGRDQnpkR1Z3V1NoMktTQjdYRzRnSUNBZ2RHaHBjeTVmZVM1emRHVndJRDBnZGp0Y2JpQWdJQ0IwYUdsekxuSmxibVJsY2lncE8xeHVJQ0I5WEc1Y2JseHVJQ0F2S2lwY2JpQWdRV0p6YjJ4MWRHVWdiVzlrWlNBb2NHOXphWFJwYjI0bmN5QjJZV3gxWlNCcWRXMXdjeUIwYnlCdGIzVnpaU0JqYkdsamF5QndiM05wZEdsdmJpa2diM0lnY21Wc1lYUnBkbVVnYlc5a1pTQW9iVzkxYzJVZ1pISmhaeUJqYUdGdVoyVnpJSFpoYkhWbElISmxiR0YwYVhabElIUnZJR2wwY3lCamRYSnlaVzUwSUhCdmMybDBhVzl1S1M0Z1JHVm1ZWFZzZERvZ1hDSmhZbk52YkhWMFpWd2lMbHh1SUNCQWRIbHdaU0I3YzNSeWFXNW5mVnh1SUNCQVpYaGhiWEJzWlNCd2IzTnBkR2x2Ymk1dGIyUmxJRDBnWENKeVpXeGhkR2wyWlZ3aU8xeHVJQ0FxTDF4dUlDQm5aWFFnYlc5a1pTZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTV3YjNOcGRHbHZiaTU0TG0xdlpHVTdYRzRnSUgxY2JpQWdjMlYwSUcxdlpHVW9kaWtnZTF4dUlDQWdJSFJvYVhNdWNHOXphWFJwYjI0dWVDNXRiMlJsSUQwZ2RqdGNiaUFnSUNCMGFHbHpMbkJ2YzJsMGFXOXVMbmt1Ylc5a1pTQTlJSFk3WEc0Z0lIMWNibHh1WEc1Y2JseHVmVnh1WEc1Y2JseHVMeThnVjBWQ1VFRkRTeUJHVDA5VVJWSWdMeTljYmk4dklDNHZmaTlxYzJocGJuUXRiRzloWkdWeUlTNHZiR2xpTDJsdWRHVnlabUZqWlhNdmNHOXphWFJwYjI0dWFuTWlMQ0luZFhObElITjBjbWxqZENjN1hHNWNibXhsZENCdFlYUm9JRDBnY21WeGRXbHlaU2duTGk0dmRYUnBiQzl0WVhSb0p5azdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJSHRjYmx4dUlDQmpjbVZoZEdVNklDaDBlWEJsS1NBOVBpQjdYRzRnSUNBZ2NtVjBkWEp1SUdSdlkzVnRaVzUwTG1OeVpXRjBaVVZzWlcxbGJuUk9VeWduYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNuTENCMGVYQmxLVHRjYmlBZ2ZTeGNibHh1SUNCaGNtTTZJQ2g0TENCNUxDQnlZV1JwZFhNc0lITjBZWEowUVc1bmJHVXNJR1Z1WkVGdVoyeGxLU0E5UGlCN1hHNWNiaUFnSUNCMllYSWdjM1JoY25RZ1BTQnRZWFJvTG5SdlEyRnlkR1Z6YVdGdUtISmhaR2wxY3l3Z1pXNWtRVzVuYkdVcE8xeHVJQ0FnSUhaaGNpQmxibVFnUFNCdFlYUm9MblJ2UTJGeWRHVnphV0Z1S0hKaFpHbDFjeXdnYzNSaGNuUkJibWRzWlNrN1hHNWNiaUFnSUNCMllYSWdiR0Z5WjJWQmNtTkdiR0ZuSUQwZ1pXNWtRVzVuYkdVZ0xTQnpkR0Z5ZEVGdVoyeGxJRHc5SURFNE1DQS9JQ2N3SnlBNklDY3hKenRjYmx4dUlDQWdJSFpoY2lCa0lEMGdXMXh1SUNBZ0lDQWdJQ0FuVFNjc0lITjBZWEowTG5ncmVDd2djM1JoY25RdWVTdDVMRnh1SUNBZ0lDQWdJQ0FuUVNjc0lISmhaR2wxY3l3Z2NtRmthWFZ6TENBd0xDQnNZWEpuWlVGeVkwWnNZV2NzSURBc0lHVnVaQzU0SzNnc0lHVnVaQzU1SzNsY2JpQWdJQ0JkTG1wdmFXNG9KeUFuS1R0Y2JseHVJQ0FnSUhKbGRIVnliaUJrTzF4dUlDQjlMRnh1WEc0Z0lISmhaR2xoYkVkeVlXUnBaVzUwT2lBb1pHVm1jeXh1ZFcxaVpYSlBabE4wYjNCektTQTlQaUI3WEc1Y2JpQWdJQ0JzWlhRZ2FXUWdQU0FuWjNKaFpHbGxiblFuSUNzZ2JXRjBhQzV5YVNneE1EQXdNREF3TURBd01EQXBPMXh1SUNBZ0lHeGxkQ0J6ZEc5d2N5QTlJRnRkTzF4dVhHNGdJQ0FnYkdWMElHZHlZV1JwWlc1MElEMGdaRzlqZFcxbGJuUXVZM0psWVhSbFJXeGxiV1Z1ZEU1VEtDZG9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHlNREF3TDNOMlp5Y3NJQ2R5WVdScFlXeEhjbUZrYVdWdWRDY3BPMXh1SUNBZ0lHZHlZV1JwWlc1MExuTmxkRUYwZEhKcFluVjBaU2duYVdRbkxDQnBaQ2s3WEc0Z0lDQWdaM0poWkdsbGJuUXVjMlYwUVhSMGNtbGlkWFJsS0NkamVDY3NJQ2MxTUNVbktUdGNiaUFnSUNCbmNtRmthV1Z1ZEM1elpYUkJkSFJ5YVdKMWRHVW9KMk41Snl3Z0p6VXdKU2NwTzF4dUlDQWdJR2R5WVdScFpXNTBMbk5sZEVGMGRISnBZblYwWlNnbmNpY3NJQ2MxTUNVbktUdGNibHh1SUNBZ0lHUmxabk11WVhCd1pXNWtRMmhwYkdRb1ozSmhaR2xsYm5RcE8xeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FUMHdPMms4Ym5WdFltVnlUMlpUZEc5d2N6dHBLeXNwSUh0Y2JpQWdJQ0FnSUd4bGRDQnpkRzl3SUQwZ1pHOWpkVzFsYm5RdVkzSmxZWFJsUld4bGJXVnVkRTVUS0Nkb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eU1EQXdMM04yWnljc0lDZHpkRzl3SnlrN1hHNGdJQ0FnSUNCemRHOXdMbk5sZEVGMGRISnBZblYwWlNnbmFXUW5MQ0FuYzNSdmNDY3JhU2s3WEc0Z0lDQWdJQ0F2TDNOMGIzQXVjMlYwUVhSMGNtbGlkWFJsS0NkdlptWnpaWFFuTENBbk56QWxKeWs3WEc0Z0lDQWdJQ0F2TDNOMGIzQXVjMlYwUVhSMGNtbGlkWFJsS0NkemRHOXdMV052Ykc5eUp5d2dKMWRvYVhSbEp5azdYRzRnSUNBZ0lDQm5jbUZrYVdWdWRDNWhjSEJsYm1SRGFHbHNaQ2h6ZEc5d0tUdGNiaUFnSUNBZ0lITjBiM0J6TG5CMWMyZ29jM1J2Y0NrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WMGRYSnVJSHRjYmlBZ0lDQWdJR2xrT2lCcFpDeGNiaUFnSUNBZ0lITjBiM0J6T2lCemRHOXdjeXhjYmlBZ0lDQWdJR1ZzWlcxbGJuUTZJR2R5WVdScFpXNTBYRzRnSUNBZ2ZUdGNibHh1SUNCOVhHNWNibjA3WEc1Y2JseHVYRzR2THlCWFJVSlFRVU5MSUVaUFQxUkZVaUF2TDF4dUx5OGdMaTkrTDJwemFHbHVkQzFzYjJGa1pYSWhMaTlzYVdJdmRYUnBiQzl6ZG1jdWFuTWlMQ0luZFhObElITjBjbWxqZENjN1hHNWNiaThxS2x4dUlDb2dUR2x0YVhRZ1lTQnVkVzFpWlhJZ2RHOGdkMmwwYUdsdUlHRWdiV2x1YVcxMWJTQmhibVFnYldGNGFXMTFiVnh1SUNvZ1FIQmhjbUZ0SUNCN2JuVnRZbVZ5ZlNCMllXeDFaU0JKYm5CMWRDQjJZV3gxWlZ4dUlDb2dRSEJoY21GdElDQjdiblZ0WW1WeWZTQnRhVzRnSUNCTWIzZGxjaUJzYVcxcGRGeHVJQ29nUUhCaGNtRnRJQ0I3Ym5WdFltVnlmU0J0WVhnZ0lDQlZjSEJsY2lCc2FXMXBkRnh1SUNvZ1FISmxkSFZ5YmlCN2JuVnRZbVZ5ZlNBZ0lDQWdJQ0JVYUdVZ2FXNXdkWFFnZG1Gc2RXVWdZMjl1YzNSeVlXbHVaV1FnZDJsMGFHbHVJSFJvWlNCc2IzZGxjaUJoYm1RZ2RYQndaWElnYkdsdGFYUnpYRzRnS2lCQVpYaGhiWEJzWlZ4dUlDb2dUbVY0ZFhNdVkyeHBjQ2d4TVN3d0xERXdLU0FnSUM4dklISmxkSFZ5Ym5NZ01UQmNiaUFxSUU1bGVIVnpMbU5zYVhBb0xURXNNQ3d4TUNrZ0lDQXZMeUJ5WlhSMWNtNXpJREJjYmlBcUlFNWxlSFZ6TG1Oc2FYQW9OU3d3TERFd0tTQWdJQ0F2THlCeVpYUjFjbTV6SURWY2JpQXFMMXh1WEc1bGVIQnZjblJ6TG1Oc2FYQWdQU0FvZG1Gc2RXVXNiV2x1TEcxaGVDa2dQVDRnZTF4dUlDQnlaWFIxY200Z1RXRjBhQzV0YVc0b1RXRjBhQzV0WVhnb2RtRnNkV1VzYldsdUtTeHRZWGdwTzF4dWZUdGNibHh1Wlhod2IzSjBjeTV1YjNKdFlXeHBlbVVnUFNBb2RtRnNkV1VzYldsdUxHMWhlQ2tnUFQ0Z2UxeHVJQ0J5WlhSMWNtNGdLQ0FvZG1Gc2RXVXRiV2x1S1NBdklDaHRZWGd0YldsdUtTQXBPMXh1ZlR0Y2JseHVMeW9xWEc0Z0tpQlRZMkZzWlNCaElIWmhiSFZsSUdaeWIyMGdiMjVsSUhKaGJtZGxJSFJ2SUdGdWIzUm9aWElnY21GdVoyVXVYRzRnS2lCQWNHRnlZVzBnSUh0dWRXMWlaWEo5SUdsdVRuVnRJQ0JKYm5CMWRDQjJZV3gxWlZ4dUlDb2dRSEJoY21GdElDQjdiblZ0WW1WeWZTQnBiazFwYmlBZ1NXNXdkWFFnY21GdVoyVWdiV2x1YVcxMWJWeHVJQ29nUUhCaGNtRnRJQ0I3Ym5WdFltVnlmU0JwYmsxaGVDQWdTVzV3ZFhRZ2NtRnVaMlVnYldGNGFXMTFiVnh1SUNvZ1FIQmhjbUZ0SUNCN2JuVnRZbVZ5ZlNCdmRYUk5hVzRnVDNWMGNIVjBJSEpoYm1kbElHMXBibWx0ZFcxY2JpQXFJRUJ3WVhKaGJTQWdlMjUxYldKbGNuMGdiM1YwVFdGNElFOTFkSEIxZENCeVlXNW5aU0J0WVhocGJYVnRYRzRnS2lCQWNtVjBkWEp1SUh0dWRXMWlaWEo5SUNBZ0lDQWdJQ0JVYUdVZ2FXNXdkWFFnZG1Gc2RXVWdjMk5oYkdWa0lIUnZJR2wwY3lCdVpYY2djbUZ1WjJWY2JpQXFJRUJsZUdGdGNHeGxYRzRnS2lCT1pYaDFjeTV6WTJGc1pTZ3dMalVzTUN3eExEQXNNVEFwSUNBZ0x5OGdjbVYwZFhKdWN5QTFYRzRnS2lCT1pYaDFjeTV6WTJGc1pTZ3dMamtzTUN3eExERXNNQ2tnSUNBZ0x5OGdjbVYwZFhKdWN5QXdMakZjYmlBcUwxeHVaWGh3YjNKMGN5NXpZMkZzWlNBOUlDaHBiazUxYlN3Z2FXNU5hVzRzSUdsdVRXRjRMQ0J2ZFhSTmFXNHNJRzkxZEUxaGVDa2dQVDRnZTF4dUlDQnBaaUFvYVc1TmFXNGdQVDA5SUdsdVRXRjRLU0I3WEc0Z0lDQWdjbVYwZFhKdUlHOTFkRTFwYmp0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnS0Nnb2FXNU9kVzBnTFNCcGJrMXBiaWtnS2lBb2IzVjBUV0Y0SUMwZ2IzVjBUV2x1S1NrZ0x5QW9hVzVOWVhnZ0xTQnBiazFwYmlrcElDc2diM1YwVFdsdU8xeHVmVHRjYmx4dVpYaHdiM0owY3k1MGIxQnZiR0Z5SUQwZ0tIZ3NlU2tnUFQ0Z2UxeHVJQ0IyWVhJZ2NpQTlJRTFoZEdndWMzRnlkQ2g0S25nZ0t5QjVLbmtwTzF4dVhHNGdJSFpoY2lCMGFHVjBZU0E5SUUxaGRHZ3VZWFJoYmpJb2VTeDRLVHRjYmlBZ2FXWWdLSFJvWlhSaElEd2dNQ2tnZTF4dUlDQWdJSFJvWlhSaElEMGdkR2hsZEdFZ0t5QW9NaUFxSUUxaGRHZ3VVRWtwTzF4dUlDQjlYRzRnSUhKbGRIVnliaUI3Y21Ga2FYVnpPaUJ5TENCaGJtZHNaVG9nZEdobGRHRjlPMXh1ZlR0Y2JseHVaWGh3YjNKMGN5NTBiME5oY25SbGMybGhiaUE5SUdaMWJtTjBhVzl1S0hKaFpHbDFjeXdnWVc1bmJHVXBlMXh1SUNCMllYSWdZMjl6SUQwZ1RXRjBhQzVqYjNNb1lXNW5iR1VwTzF4dUlDQjJZWElnYzJsdUlEMGdUV0YwYUM1emFXNG9ZVzVuYkdVcE8xeHVJQ0J5WlhSMWNtNGdlM2c2SUhKaFpHbDFjeXBqYjNNc0lIazZJSEpoWkdsMWN5cHphVzRxTFRGOU8xeHVmVHRjYmk4cVhHNWxlSEJ2Y25SekxuQnZiR0Z5Vkc5RFlYSjBaWE5wWVc0b1kyVnVkR1Z5V0N3Z1kyVnVkR1Z5V1N3Z2NtRmthWFZ6TENCaGJtZHNaVWx1UkdWbmNtVmxjeWtnZTF4dUlDQjJZWElnWVc1bmJHVkpibEpoWkdsaGJuTWdQU0FvWVc1bmJHVkpia1JsWjNKbFpYTXRPVEFwSUNvZ1RXRjBhQzVRU1NBdklERTRNQzR3TzF4dVhHNGdJSEpsZEhWeWJpQjdYRzRnSUNBZ2VEb2dZMlZ1ZEdWeVdDQXJJQ2h5WVdScGRYTWdLaUJOWVhSb0xtTnZjeWhoYm1kc1pVbHVVbUZrYVdGdWN5a3BMRnh1SUNBZ0lIazZJR05sYm5SbGNsa2dLeUFvY21Ga2FYVnpJQ29nVFdGMGFDNXphVzRvWVc1bmJHVkpibEpoWkdsaGJuTXBLVnh1SUNCOU8xeHVmU0FnS2k5Y2JseHVYRzVjYm1WNGNHOXlkSE11Y0hKMWJtVWdQU0JtZFc1amRHbHZiaWhrWVhSaExDQnpZMkZzWlNrZ2UxeHVJQ0J5WlhSMWNtNGdjR0Z5YzJWR2JHOWhkQ2hrWVhSaExuUnZSbWw0WldRb2MyTmhiR1VwS1R0Y2JuMDdYRzVjYm1WNGNHOXlkSE11YVc1MlpYSjBJRDBnWm5WdVkzUnBiMjRnS0dsdVRuVnRLU0I3WEc0Z0lISmxkSFZ5YmlCbGVIQnZjblJ6TG5OallXeGxLR2x1VG5WdExDQXhMQ0F3TENBd0xDQXhLVHRjYm4wN1hHNWNiaThxS2x4dUlDb2dRMjl1ZG1WeWRDQmhJRTFKUkdrZ2JtOTBaU0J1ZFcxaVpYSWdkRzhnWVNCbWNtVnhkV1Z1WTNrZ2RtRnNkV1VnYVc0Z1pYRjFZV3dnZEdWdGNHVnlZVzFsYm5RdVhHNGdLaUJBY0dGeVlXMGdJSHR1ZFcxaVpYSjlJRzFwWkdrZ1RVbEVTU0J1YjNSbElIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIdHVkVzFpWlhKOUlDQWdJQ0FnUm5KbGNYVmxibU5sSUhaaGJIVmxYRzRnS2lCQVpYaGhiWEJzWlZ4dUlDb2dUbVY0ZFhNdWJYUnZaaWcyTUNrZ0lDOHZJSEpsZEhWeWJuTWdkR2hsSUdaeVpYRjFaVzVqZVNCdWRXMWlaWElnYjJZZ1RXbGtaR3hsSUVOY2JpQXFMMXh1Wlhod2IzSjBjeTV0ZEc5bUlEMGdablZ1WTNScGIyNG9iV2xrYVNrZ2UxeHVJQ0J5WlhSMWNtNGdUV0YwYUM1d2IzY29NaXdnS0NodGFXUnBMVFk1S1M4eE1pa3BJQ29nTkRRd08xeHVmVHRjYmx4dUx5b3FYRzRnS2lCSmJuUmxjbkJ2YkdGMFpTQmlaWFIzWldWdUlIUjNieUJ1ZFcxaVpYSnpYRzRnS2lCQWNHRnlZVzBnSUh0dWRXMWlaWEo5SUd4dll5QkpiblJsY25CdmJHRjBhVzl1SUdsdVpHVjRJQ2d3TFRFcFhHNGdLaUJBY0dGeVlXMGdJSHR1ZFcxaVpYSjlJRzFwYmlCTWIzZGxjaUIyWVd4MVpWeHVJQ29nUUhCaGNtRnRJQ0I3Ym5WdFltVnlmU0J0WVhnZ1ZYQndaWElnZG1Gc2RXVmNiaUFxSUVCeVpYUjFjbTRnZTI1MWJXSmxjbjBnSUNBZ0lFbHVkR1Z5Y0c5c1lYUmxaQ0IyWVd4MVpWeHVJQ29nUUdWNFlXMXdiR1ZjYmlBcUlFNWxlSFZ6TG1sdWRHVnljQ2d3TGpVc01pdzBLU0FnSUM4dklISmxkSFZ5Ym5NZ00xeHVJQ29nVG1WNGRYTXVhVzUwWlhKd0tEQXVNU3d3TERFd0tTQWdJQ0FnTHk4Z2NtVjBkWEp1Y3lBeFhHNGdLaTljYm1WNGNHOXlkSE11YVc1MFpYSndJRDBnWm5WdVkzUnBiMjRvYkc5akxHMXBiaXh0WVhncElIdGNiaUFnY21WMGRYSnVJR3h2WXlBcUlDaHRZWGdnTFNCdGFXNHBJQ3NnYldsdU8xeHVmVHRjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTRnWVNCeVlXNWtiMjBnWTJodmFXTmxJR1p5YjIwZ1lTQnNhWE4wSUc5bUlHRnlaM1Z0Wlc1MGMxeHVJQ29nUUhKbGRIVnliaUI3ZG1GeWFXOTFjMzBnVDI1bElISmhibVJ2YlNCaGNtZDFiV1Z1ZEZ4dUlDb2dRR1Y0WVcxd2JHVmNiaUFxSUU1bGVIVnpMbkJwWTJzb01Td3lMRE1zTkNrZ0lDQXZMeUJ5WlhSMWNtNXpJREVzSURJc0lETXNJRzl5SURSY2JpQXFJRTVsZUhWekxuQnBZMnNvWm5WdVkzUnBiMjR4TEdaMWJtTjBhVzl1TWlrZ0lDQXZMeUJ5WlhSMWNtNXpJR1ZwZEdobGNpQm1kVzVqZEdsdmJqRWdiM0lnWm5WdVkzUnBiMjR5WEc0Z0tpOWNibVY0Y0c5eWRITXVjR2xqYXlBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnWVhKbmRXMWxiblJ6VzM1K0tFMWhkR2d1Y21GdVpHOXRLQ2txWVhKbmRXMWxiblJ6TG14bGJtZDBhQ2xkTzF4dWZUdGNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJR0Z1SUc5amRHRjJaU0J0ZFd4MGFYQnNhV1Z5SUdadmNpQm1jbVZ4ZFdWdVkza2dkbUZzZFdWelhHNGdLaUJBY0dGeVlXMGdJSHR1ZFcxaVpYSjlJRzUxYlNCU1pXeGhkR2wyWlNCdlkzUmhkbVVnYm5WdFltVnlJQ2hsTG1jdUlDMHhJR1p2Y2lCdmJtVWdiMk4wWVhabElHUnZkMjRzSURFZ1ptOXlJRzl1WlNCdlkzUmhkbVVnZFhBcFhHNGdLaUJBY21WMGRYSnVJSHR1ZFcxaVpYSjlJQ0FnSUNCUFkzUmhkbVVnYlhWc2RHbHdiR2xsY2x4dUlDb2dRR1Y0WVcxd2JHVmNiaUFxSUU1bGVIVnpMbTlqZEdGMlpTZ3RNU2tnSUM4dklISmxkSFZ5Ym5NZ01DNDFYRzRnS2lCT1pYaDFjeTV2WTNSaGRtVW9NQ2tnSUNBdkx5QnlaWFIxY201eklERmNiaUFxSUU1bGVIVnpMbTlqZEdGMlpTZ3hLU0FnSUM4dklISmxkSFZ5Ym5NZ01seHVJQ29nVG1WNGRYTXViMk4wWVhabEtESXBJQ0FnTHk4Z2NtVjBkWEp1Y3lBMFhHNGdLaTljYm1WNGNHOXlkSE11YjJOMFlYWmxJRDBnWm5WdVkzUnBiMjRvYm5WdEtTQjdYRzRnSUhKbGRIVnliaUJOWVhSb0xuQnZkeWd5TEc1MWJTazdYRzU5TzF4dVhHNHZLaXBjYmlBcUlGSmhibVJ2YlNCcGJuUmxaMlZ5SUdkbGJtVnlZWFJ2Y2k0Z1NXWWdibThnYzJWamIyNWtJR0Z5WjNWdFpXNTBJR2x6SUdkcGRtVnVMQ0IzYVd4c0lISmxkSFZ5YmlCeVlXNWtiMjBnYVc1MFpXZGxjaUJtY205dElEQWdkRzhnWW05MWJtUXhMbHh1SUNvZ1FIQmhjbUZ0SUNCN2JuVnRZbVZ5ZlNCaWIzVnVaREVnVFdsdWFXMTFiU0J5WVc1a2IyMGdkbUZzZFdWY2JpQXFJRUJ3WVhKaGJTQWdlMjUxYldKbGNuMGdZbTkxYm1ReUlFMWhlR2x0ZFcwZ2NtRnVaRzl0SUhaaGJIVmxYRzRnS2lCQWNtVjBkWEp1SUh0dWRXMWlaWEo5SUNBZ0lDQWdJQ0JTWVc1a2IyMGdhVzUwWldkbGNpQmlaWFIzWldWdUlHeHZkMlZ5SUdGdVpDQjFjSEJsY2lCaWIzVnVaR0Z5ZVZ4dUlDb2dRR1Y0WVcxd2JHVmNiaUFxSUU1bGVIVnpMbkpwS0RFd0tTQWdJQ0F2THlCeVpYUjFjbTV6SUhKaGJtUnZiU0JwYm5RZ1puSnZiU0F3SUhSdklERXdYRzRnS2lCT1pYaDFjeTV5YVNneU1Dd3lNREF3S1NBdkx5QnlaWFIxY201eklISmhibVJ2YlNCcGJuUWdabkp2YlNBeU1DQjBieUF5TURBd1hHNGdLaTljYm1WNGNHOXlkSE11Y21rZ1BTQm1kVzVqZEdsdmJpaGliM1Z1WkRFc1ltOTFibVF5S1NCN1hHNGdJR2xtSUNnaFltOTFibVF5S1NCN1hHNGdJQ0FnWW05MWJtUXlJRDBnWW05MWJtUXhPMXh1SUNBZ0lHSnZkVzVrTVNBOUlEQTdYRzRnSUgxY2JpQWdkbUZ5SUd4dmR5QTlJRTFoZEdndWJXbHVLR0p2ZFc1a01TeGliM1Z1WkRJcE8xeHVJQ0IyWVhJZ2FHbG5hQ0E5SUUxaGRHZ3ViV0Y0S0dKdmRXNWtNU3hpYjNWdVpESXBPMXh1SUNCeVpYUjFjbTRnVFdGMGFDNW1iRzl2Y2loTllYUm9MbkpoYm1SdmJTZ3BLaWhvYVdkb0xXeHZkeWtyYkc5M0tUdGNibjA3WEc1Y2JpOHFLbHh1SUNvZ1VtRnVaRzl0SUdac2IyRjBJRzUxYldKbGNpQm5aVzVsY21GMGIzSXVJRWxtSUc1dklITmxZMjl1WkNCaGNtZDFiV1Z1ZENCcGN5Qm5hWFpsYml3Z2QybHNiQ0J5WlhSMWNtNGdjbUZ1Wkc5dElHWnNiMkYwSUdaeWIyMGdNQ0IwYnlCaWIzVnVaREV1WEc0Z0tpQkFjR0Z5WVcwZ0lIdHVkVzFpWlhKOUlHSnZkVzVrTVNCTmFXNXBiWFZ0SUhKaGJtUnZiU0IyWVd4MVpWeHVJQ29nUUhCaGNtRnRJQ0I3Ym5WdFltVnlmU0JpYjNWdVpESWdUV0Y0YVcxMWJTQnlZVzVrYjIwZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2UyNTFiV0psY24wZ0lDQWdJQ0FnSUZKaGJtUnZiU0JtYkc5aGRDQmlaWFIzWldWdUlHeHZkMlZ5SUdGdVpDQjFjSEJsY2lCaWIzVnVaR0Z5ZVZ4dUlDb2dRR1Y0WVcxd2JHVmNiaUFxSUU1bGVIVnpMbkptS0RFcElDQWdJQzh2SUhKbGRIVnlibk1nY21GdVpHOXRJR1pzYjJGMElHWnliMjBnTUNCMGJ5QXhYRzRnS2lCT1pYaDFjeTV5WmlneExESXBJQzh2SUhKbGRIVnlibk1nY21GdVpHOXRJR1pzYjJGMElHWnliMjBnTVNCMGJ5QXlYRzRnS2k5Y2JtVjRjRzl5ZEhNdWNtWWdQU0JtZFc1amRHbHZiaWhpYjNWdVpERXNZbTkxYm1ReUtTQjdYRzRnSUdsbUlDZ2hZbTkxYm1ReUtTQjdYRzRnSUNBZ1ltOTFibVF5SUQwZ1ltOTFibVF4TzF4dUlDQWdJR0p2ZFc1a01TQTlJREE3WEc0Z0lIMWNiaUFnZG1GeUlHeHZkeUE5SUUxaGRHZ3ViV2x1S0dKdmRXNWtNU3hpYjNWdVpESXBPMXh1SUNCMllYSWdhR2xuYUNBOUlFMWhkR2d1YldGNEtHSnZkVzVrTVN4aWIzVnVaRElwTzF4dUlDQnlaWFIxY200Z1RXRjBhQzV5WVc1a2IyMG9LU29vYUdsbmFDMXNiM2NwSzJ4dmR6dGNibjA3WEc1Y2JseHVaWGh3YjNKMGN5NWplV05zWlNBOUlHWjFibU4wYVc5dUtHbHVjSFYwTEcxcGJpeHRZWGdwSUh0Y2JpQWdhVzV3ZFhRckt6dGNiaUFnYVdZZ0tHbHVjSFYwSUQ0OUlHMWhlQ2tnZTF4dUlDQWdJR2x1Y0hWMElEMGdiV2x1TzF4dUlDQjlYRzRnSUhKbGRIVnliaUJwYm5CMWREdGNibjA3WEc1Y2JpOHFLbHh1SUNvZ1FYWmxjbUZuWlNCaGJpQmhjbkpoZVNCdlppQnVkVzFpWlhKelhHNGdLaUJBY0dGeVlXMGdJSHRCY25KaGVYMGdaR0YwWVNCQmNuSmhlU0J2WmlCdWRXMWlaWEp6SUhSdklHRjJaWEpoWjJWY2JpQXFJRUJ5WlhSMWNtNGdlMjUxYldKbGNuMGdJQ0FnSUNCQmRtVnlZV2RsSUc5bUlIUm9aU0JwYm5CMWRDQmtZWFJoWEc0Z0tpQkFaWGhoYlhCc1pWeHVJQ29nVG1WNGRYTXVZWFpsY21GblpTaGJNQ3d5TERRc05pdzRMREV3WFNrZ0lDQXZMeUJ5WlhSMWNtNXpJRFZjYmlBcUwxeHVaWGh3YjNKMGN5NWhkbVZ5WVdkbElEMGdablZ1WTNScGIyNG9aR0YwWVNrZ2UxeHVJQ0JzWlhRZ2RHOTBZV3dnUFNBd08xeHVJQ0JtYjNJZ0tIWmhjaUJwUFRBN2FUeGtZWFJoTG14bGJtZDBhRHRwS3lzcElIdGNiaUFnSUNCMGIzUmhiQ0FyUFNCa1lYUmhXMmxkTzF4dUlDQjlYRzRnSUhKbGRIVnliaUIwYjNSaGJDQXZJR1JoZEdFdWJHVnVaM1JvTzF4dWZUdGNibHh1THlvcVhHNGdLaUJIWlhRZ2RHaGxJR1JwYzNSaGJtTmxJR1p5YjIwZ2IyNWxJQ2g0TEhrcElIQnZhVzUwSUhSdklHRnViM1JvWlhJZ0tIZ3NlU2tnY0c5cGJuUmNiaUFxSUVCd1lYSmhiU0FnZTI1MWJXSmxjbjBnZURFZ2VDQnZaaUJtYVhKemRDQndiMmx1ZEZ4dUlDb2dRSEJoY21GdElDQjdiblZ0WW1WeWZTQjVNU0I1SUc5bUlHWnBjbk4wSUhCdmFXNTBYRzRnS2lCQWNHRnlZVzBnSUh0dWRXMWlaWEo5SUhneUlIZ2diMllnYzJWamIyNWtJSEJ2YVc1MFhHNGdLaUJBY0dGeVlXMGdJSHR1ZFcxaVpYSjlJSGt5SUhrZ2IyWWdjMlZqYjI1a0lIQnZhVzU1WEc0Z0tpQkFjbVYwZFhKdUlIdHVkVzFpWlhKOUlDQWdJRVJwYzNSaGJtTmxYRzRnS2lCQVpYaGhiWEJzWlZ4dUlDb2dUbVY0ZFhNdVpHbHpkR0Z1WTJVb01Dd3dMRE1zTkNrZ0lDQXZMeUJ5WlhSMWNtNXpJRFZjYmlBcUwxeHVaWGh3YjNKMGN5NWthWE4wWVc1alpTQTlJR1oxYm1OMGFXOXVLSGd4TEhreExIZ3lMSGt5S1NCN1hHNGdJR3hsZENCaElEMGdlREVnTFNCNE1qdGNiaUFnYkdWMElHSWdQU0I1TVNBdElIa3lPMXh1SUNCeVpYUjFjbTRnVFdGMGFDNXpjWEowS0NCaEttRWdLeUJpS21JZ0tUdGNibjA3WEc1Y2JtVjRjRzl5ZEhNdVoyRnBibFJ2UkVJZ1BTQm1kVzVqZEdsdmJpaG5ZV2x1S1NCN1hHNGdJSEpsZEhWeWJpQXlNQ0FxSUUxaGRHZ3ViRzluTVRBb1oyRnBiaWs3WEc1OU8xeHVYRzR2S2lwY2JpQXFJRVpzYVhBZ1lTQmpiMmx1TENCeVpYUjFjbTVwYm1jZ1pXbDBhR1Z5SURBZ2IzSWdNU0JoWTJOdmNtUnBibWNnZEc4Z1lTQndjbTlpWVdKcGJHbDBlVnh1SUNvZ1FIQmhjbUZ0SUNCN2JuVnRZbVZ5ZlNCYmIyUmtjejB3TGpWZElFeHBhMlZzYVdodmIyUWdiMllnY21WMGRYSnVhVzVuSURGY2JpQXFJRUJ5WlhSMWNtNGdlMjUxYldKbGNuMGdJQ0FnSUNBZ0lDQWdJQ0F4SUc5eUlEQmNiaUFxSUVCbGVHRnRjR3hsWEc0Z0tpQk9aWGgxY3k1amIybHVLREF1TVNrZ0lDQXZMeUJ5WlhSMWNtNXpJREVnS0RFd0pTQnZaaUIwYUdVZ2RHbHRaU2tnYjNJZ01DQW9PVEFsSUc5bUlIUm9aU0IwYVcxbEtWeHVJQ292WEc1bGVIQnZjblJ6TG1OdmFXNGdQU0JtZFc1amRHbHZiaWh2WkdSelBUQXVOU2tnZTF4dUlDQnBaaUFvWlhod2IzSjBjeTV5Wmlnd0xERXBJRHdnYjJSa2N5a2dlMXh1SUNBZ0lISmxkSFZ5YmlBeE8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lISmxkSFZ5YmlBd08xeHVJQ0I5WEc1OU8xeHVYRzVjYmx4dUx5OGdWMFZDVUVGRFN5QkdUMDlVUlZJZ0x5OWNiaTh2SUM0dmZpOXFjMmhwYm5RdGJHOWhaR1Z5SVM0dmJHbGlMM1YwYVd3dmJXRjBhQzVxY3lJc0lpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWJHVjBJSE4yWnlBOUlISmxjWFZwY21Vb0p5NHVMM1YwYVd3dmMzWm5KeWs3WEc1c1pYUWdaRzl0SUQwZ2NtVnhkV2x5WlNnbkxpNHZkWFJwYkM5a2IyMG5LVHRjYm14bGRDQjFkR2xzSUQwZ2NtVnhkV2x5WlNnbkxpNHZkWFJwYkM5MWRHbHNKeWs3WEc1c1pYUWdkRzkxWTJnZ1BTQnlaWEYxYVhKbEtDY3VMaTkxZEdsc0wzUnZkV05vSnlrN1hHNWpiMjV6ZENCRmRtVnVkRVZ0YVhSMFpYSWdQU0J5WlhGMWFYSmxLQ2RsZG1WdWRITW5LVHRjYmx4dWFXMXdiM0owSUhzZ1kyOXNiM0p6SUgwZ1puSnZiU0FuTGk0dmJXRnBiaWM3WEc1Y2JpOHFLbHh1U1c1MFpYSm1ZV05sWEc0cUwxeHVaWGh3YjNKMElHUmxabUYxYkhRZ1kyeGhjM01nU1c1MFpYSm1ZV05sSUdWNGRHVnVaSE1nUlhabGJuUkZiV2wwZEdWeUlIdGNibHh1SUNCamIyNXpkSEoxWTNSdmNpaGhjbWR6TEc5d2RHbHZibk1zWkdWbVlYVnNkSE1wSUh0Y2JpQWdJQ0J6ZFhCbGNpZ3BPMXh1SUNBZ0lIUm9hWE11ZEhsd1pTQTlJSFJvYVhNdVkyOXVjM1J5ZFdOMGIzSXVibUZ0WlR0Y2JpQWdJQ0IwYUdsekxuTmxkSFJwYm1keklEMGdkR2hwY3k1d1lYSnpaVk5sZEhScGJtZHpLR0Z5WjNNc2IzQjBhVzl1Y3l4a1pXWmhkV3gwY3lrN1hHNGdJQ0FnZEdocGN5NXRiM1Z6WlNBOUlIdDlPMXh1SUNBZ0lIUm9hWE11ZDJGcGRDQTlJR1poYkhObE8xeHVJQ0FnSUhSb2FYTXVZMjlzYjNKeklEMGdlMzA3WEc0Z0lDQWdiR1YwSUdSbFptRjFiSFJEYjJ4dmNuTWdQU0JqYjJ4dmNuTW9LVHNnTHk4Z2FuTm9hVzUwSUdsbmJtOXlaVHBzYVc1bFhHNGdJQ0FnZEdocGN5NWpiMnh2Y25NdVlXTmpaVzUwSUQwZ1pHVm1ZWFZzZEVOdmJHOXljeTVoWTJObGJuUTdYRzRnSUNBZ2RHaHBjeTVqYjJ4dmNuTXVabWxzYkNBOUlHUmxabUYxYkhSRGIyeHZjbk11Wm1sc2JEdGNiaUFnSUNCMGFHbHpMbU52Ykc5eWN5NXNhV2RvZENBOUlHUmxabUYxYkhSRGIyeHZjbk11YkdsbmFIUTdYRzRnSUNBZ2RHaHBjeTVqYjJ4dmNuTXVaR0Z5YXlBOUlHUmxabUYxYkhSRGIyeHZjbk11WkdGeWF6dGNiaUFnSUNCMGFHbHpMbU52Ykc5eWN5NXRaV1JwZFcxTWFXZG9kQ0E5SUdSbFptRjFiSFJEYjJ4dmNuTXViV1ZrYVhWdFRHbG5hSFE3WEc0Z0lDQWdkR2hwY3k1amIyeHZjbk11YldWa2FYVnRSR0Z5YXlBOUlHUmxabUYxYkhSRGIyeHZjbk11YldWa2FYVnRSR0Z5YXp0Y2JpQWdmVnh1WEc0Z0lIQmhjbk5sVTJWMGRHbHVaM01vWVhKbmN5eHZjSFJwYjI1ekxHUmxabUYxYkhSektTQjdYRzVjYmlBZ0lDQnZjSFJwYjI1ekxuVnVjMmhwWm5Rb0ozUmhjbWRsZENjcE8xeHVJQ0FnSUdSbFptRjFiSFJ6TG1SbFptRjFiSFJUYVhwbElEMGdaR1ZtWVhWc2RITXVjMmw2WlM1emNHeHBZMlVvTUN3eUtUdGNiaUFnSUNCa1pXWmhkV3gwY3k1emFYcGxJRDBnWm1Gc2MyVTdYRzVjYmlBZ0lDQnNaWFFnYzJWMGRHbHVaM01nUFNCN1hHNGdJQ0FnSUNBbmRHRnlaMlYwSnpvZ1pHOWpkVzFsYm5RdVltOWtlU3hjYmlBZ0lDQWdJQ2RqYjJ4dmNuTW5PaUI3ZlN3Z0x5OGdjMmh2ZFd4a0lHbHVhR1Z5YVhRZ1puSnZiU0JoSUdOdmJHOXljeUJ0YjJSMWJHVXNYRzRnSUNBZ0lDQW5jMjVoY0ZkcGRHaFFZWEpsYm5Rbk9pQjBjblZsTEZ4dUlDQWdJQ0FnSjJWMlpXNTBKem9nWm5WdVkzUnBiMjRvS1NCN2ZTeGNiaUFnSUNBZ0lDZGpiMjF3YjI1bGJuUW5PaUJtWVd4elpWeHVJQ0FnSUgwN1hHNWNiaUFnSUNCbWIzSWdLR3hsZENCclpYa2dhVzRnWkdWbVlYVnNkSE1wSUh0Y2JpQWdJQ0FnSUhObGRIUnBibWR6VzJ0bGVWMGdQU0JrWldaaGRXeDBjMXRyWlhsZE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdadmNpQW9iR1YwSUdrOU1Ec2dhVHhoY21kekxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0F2THlCbmNtRmljeUIwYUdVZ2JtVjRkQ0JoY21kMWJXVnVkRnh1SUNBZ0lDQWdiR1YwSUhObGRIUnBibWNnUFNCaGNtZHpXMmxkTzF4dUlDQWdJQ0FnTHk4Z2FXWWdhWFFuY3lCaGJpQnZZbXBsWTNRc0lHbDBJRzExYzNRZ1ltVWdkR2hsSUhObGRIUnBibWR6SUc5aWFtVmpkRnh1SUNBZ0lDQWdhV1lnS0NCMWRHbHNMbWx6VDJKcVpXTjBLSE5sZEhScGJtY3BJQ2tnZTF4dUlDQWdJQ0FnSUNCbWIzSWdLQ0JzWlhRZ2EyVjVJR2x1SUhObGRIUnBibWNnS1NCN1hHNGdJQ0FnSUNBZ0lDQWdjMlYwZEdsdVozTmJhMlY1WFNBOUlITmxkSFJwYm1kYmEyVjVYVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnTHk4Z2FXWWdhWFFuY3lCaElHWjFibU4wYVc5dUxDQnBkQ0J0ZFhOMElHSmxJSFJvWlNCbGRtVnVkQ0J6WlhSMGFXNW5YRzRnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLSFI1Y0dWdlppQnpaWFIwYVc1bklEMDlQU0FuWm5WdVkzUnBiMjRuS1NCN1hHNGdJQ0FnSUNBZ0lITmxkSFJwYm1kekxtVjJaVzUwSUQwZ2MyVjBkR2x1Wnp0Y2JpQWdJQ0FnSUM4dklHOTBhR1Z5ZDJselpTd2dZMjl1YzJsa1pYSWdhWFFnYjI1bElHOW1JSFJvWlNCM2FXUm5aWFFuY3lCamRYTjBiMjBnYjNCMGFXOXVjMXh1SUNBZ0lDQWdmU0JsYkhObElHbG1JQ2h2Y0hScGIyNXpMbXhsYm1kMGFENDlNU2tnZTF4dUlDQWdJQ0FnSUNBdkx5Qm5jbUZpSUhSb1pTQm1hWEp6ZENCdmNIUnBiMjRnTFMwZ2FTNWxMaUFuZEdGeVoyVjBKMXh1SUNBZ0lDQWdJQ0JzWlhRZ2EyVjVJRDBnYjNCMGFXOXVjeTV6Y0d4cFkyVW9NQ3d4S1Zzd1hUdGNiaUFnSUNBZ0lDQWdjMlYwZEdsdVozTmJhMlY1WFNBOUlITmxkSFJwYm1jN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHlvZ0lHaGhibVJzWlNCamIyMXRiMjRnYzJWMGRHbHVaM01nSUNvdlhHNWNiaUFnSUNBdkx5QjBZWEpuWlhSY2JpQWdJQ0IwYUdsekxuQmhjbVZ1ZENBOUlHUnZiUzV3WVhKelpVVnNaVzFsYm5Rb2MyVjBkR2x1WjNNdWRHRnlaMlYwS1R0Y2JseHVJQ0FnSUM4dklHNWxlSFZ6TFhWcElHRjBkSEpwWW5WMFpWeHVJQ0FnSUdsbUlDaDBhR2x6TG5CaGNtVnVkQ0FtSmlCMGFHbHpMbkJoY21WdWRDQnBibk4wWVc1alpXOW1JRWhVVFV4RmJHVnRaVzUwSUNZbUlDRnpaWFIwYVc1bmN5NWpiMjF3YjI1bGJuUXBJSHRjYmlBZ0lDQWdJR2xtSUNnaGRHaHBjeTV3WVhKbGJuUXVhR0Z6UVhSMGNtbGlkWFJsS0NkdVpYaDFjeTExYVNjcEtTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWNHRnlaVzUwTG5ObGRFRjBkSEpwWW5WMFpTZ25ibVY0ZFhNdGRXa25MQ2NuS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlCemFYcGxYRzVjYmlBZ0lDQnBaaUFvYzJWMGRHbHVaM011YzJsNlpTQW1KaUJCY25KaGVTNXBjMEZ5Y21GNUtITmxkSFJwYm1kekxuTnBlbVVwSUNZbUlITmxkSFJwYm1kekxuTnVZWEJYYVhSb1VHRnlaVzUwS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbmRwWkhSb0lEMGdjMlYwZEdsdVozTXVjMmw2WlZzd1hUdGNiaUFnSUNBZ0lIUm9hWE11YUdWcFoyaDBJRDBnYzJWMGRHbHVaM011YzJsNlpWc3hYVHRjYmlBZ0lDQWdJSFJvYVhNdWNHRnlaVzUwTG5OMGVXeGxMbmRwWkhSb0lEMGdkR2hwY3k1M2FXUjBhQ0FySUNkd2VDYzdYRzRnSUNBZ0lDQjBhR2x6TG5CaGNtVnVkQzV6ZEhsc1pTNW9aV2xuYUhRZ1BTQjBhR2x6TG1obGFXZG9kQ0FySUNkd2VDYzdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaHpaWFIwYVc1bmN5NXpibUZ3VjJsMGFGQmhjbVZ1ZENBbUppQWhjMlYwZEdsdVozTXVZMjl0Y0c5dVpXNTBLU0I3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVkMmxrZEdnZ1BTQndZWEp6WlVac2IyRjBLSGRwYm1SdmR5NW5aWFJEYjIxd2RYUmxaRk4wZVd4bEtIUm9hWE11Y0dGeVpXNTBMQ0J1ZFd4c0tTNW5aWFJRY205d1pYSjBlVlpoYkhWbEtDZDNhV1IwYUNjcExuSmxjR3hoWTJVb0ozQjRKeXduSnlrcE8xeHVJQ0FnSUNBZ2RHaHBjeTVvWldsbmFIUWdQU0J3WVhKelpVWnNiMkYwS0hkcGJtUnZkeTVuWlhSRGIyMXdkWFJsWkZOMGVXeGxLSFJvYVhNdWNHRnlaVzUwTENCdWRXeHNLUzVuWlhSUWNtOXdaWEowZVZaaGJIVmxLQ2RvWldsbmFIUW5LUzV5WlhCc1lXTmxLQ2R3ZUNjc0p5Y3BLVHRjYmx4dUlDQWdJQ0FnYVdZZ0tIUm9hWE11ZDJsa2RHZzlQVFV3TURBcElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1M2FXUjBhQ0E5SUhObGRIUnBibWR6TG1SbFptRjFiSFJUYVhwbFd6QmRPMXh1SUNBZ0lDQWdJQ0IwYUdsekxuQmhjbVZ1ZEM1emRIbHNaUzUzYVdSMGFDQTlJSFJvYVhNdWNHRnlaVzUwTG5kcFpIUm9JRDBnZEdocGN5NTNhV1IwYUNBcklDZHdlQ2M3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JwWmlBb2RHaHBjeTVvWldsbmFIUTlQVFV3TURBcElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1b1pXbG5hSFFnUFNCelpYUjBhVzVuY3k1a1pXWmhkV3gwVTJsNlpWc3hYVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXdZWEpsYm5RdWMzUjViR1V1YUdWcFoyaDBJRDBnZEdocGN5NXdZWEpsYm5RdWFHVnBaMmgwSUQwZ2RHaHBjeTVvWldsbmFIUWdLeUFuY0hnbk8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhObGRIUnBibWR6TG5OcGVtVWdQU0J6WlhSMGFXNW5jeTVrWldaaGRXeDBVMmw2WlR0Y2JpQWdJQ0FnSUhSb2FYTXVkMmxrZEdnZ1BTQnpaWFIwYVc1bmN5NXphWHBsV3pCZE8xeHVJQ0FnSUNBZ2RHaHBjeTVvWldsbmFIUWdQU0J6WlhSMGFXNW5jeTV6YVhwbFd6RmRPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJR1YyWlc1MFhHNGdJQ0FnYVdZZ0tITmxkSFJwYm1kekxtVjJaVzUwS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbVYyWlc1MElEMGdkR2hwY3k1dmJpZ25ZMmhoYm1kbEp5d2djMlYwZEdsdVozTXVaWFpsYm5RcE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0IwYUdsekxtVjJaVzUwSUQwZ1ptRnNjMlU3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlITmxkSFJwYm1kek8xeHVYRzRnSUgxY2JseHVJQ0JwYm1sMEtDa2dlMXh1SUNBZ0lIUm9hWE11WW5WcGJHUkdjbUZ0WlNncE8xeHVJQ0FnSUhSb2FYTXVZblZwYkdSSmJuUmxjbVpoWTJVb0tUdGNiaUFnSUNCMGFHbHpMbk5wZW1WSmJuUmxjbVpoWTJVb0tUdGNiaUFnSUNCMGFHbHpMbUYwZEdGamFFeHBjM1JsYm1WeWN5Z3BPMXh1SUNBZ0lIUm9hWE11WTI5c2IzSkpiblJsY21aaFkyVW9LVHRjYmlBZ0lDQjBhR2x6TG1acGJtRnNWRzkxWTJobGN5Z3BPMXh1SUNCOVhHNWNiaUFnWW5WcGJHUkdjbUZ0WlNncElIdGNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUWdQU0J6ZG1jdVkzSmxZWFJsS0NkemRtY25LVHRjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1YzJWMFFYUjBjbWxpZFhSbEtDZDNhV1IwYUNjc2RHaHBjeTUzYVdSMGFDazdYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbk5sZEVGMGRISnBZblYwWlNnbmFHVnBaMmgwSnl4MGFHbHpMbWhsYVdkb2RDazdYRzRnSUNBZ2RHaHBjeTV3WVhKbGJuUXVZWEJ3Wlc1a1EyaHBiR1FvZEdocGN5NWxiR1Z0Wlc1MEtUdGNiaUFnZlZ4dVhHNGdJR0oxYVd4a1NXNTBaWEptWVdObEtDa2dlMzFjYmlBZ2MybDZaVWx1ZEdWeVptRmpaU2dwSUh0OVhHNGdJR052Ykc5eVNXNTBaWEptWVdObEtDa2dlMzFjYmx4dUlDQmhkSFJoWTJoTWFYTjBaVzVsY25Nb0tTQjdYRzVjYmlBZ0lDQjBhR2x6TG1sdWRHVnlZV04wYVc5dVZHRnlaMlYwSUQwZ2RHaHBjeTVwYm5SbGNtRmpkR2x2YmxSaGNtZGxkQ0I4ZkNCMGFHbHpMbVZzWlcxbGJuUTdYRzVjYmlBZ0lDQXZMeUJUWlhSMWNDQnBiblJsY21GamRHbHZibHh1SUNBZ0lHbG1JQ2gwYjNWamFDNWxlR2x6ZEhNcElIdGNiaUFnSUNBZ0lIUm9hWE11YVc1MFpYSmhZM1JwYjI1VVlYSm5aWFF1WVdSa1JYWmxiblJNYVhOMFpXNWxjaWduZEc5MVkyaHpkR0Z5ZENjc0lHVjJkQ0E5UGlCMGFHbHpMbkJ5WlZSdmRXTm9LR1YyZENrcE8xeHVJQ0FnSUNBZ2RHaHBjeTVwYm5SbGNtRmpkR2x2YmxSaGNtZGxkQzVoWkdSRmRtVnVkRXhwYzNSbGJtVnlLQ2QwYjNWamFHMXZkbVVuTENCbGRuUWdQVDRnZEdocGN5NXdjbVZVYjNWamFFMXZkbVVvWlhaMEtTazdYRzRnSUNBZ0lDQjBhR2x6TG1sdWRHVnlZV04wYVc5dVZHRnlaMlYwTG1Ga1pFVjJaVzUwVEdsemRHVnVaWElvSjNSdmRXTm9aVzVrSnl3Z1pYWjBJRDArSUhSb2FYTXVjSEpsVkc5MVkyaFNaV3hsWVhObEtHVjJkQ2twTzF4dUlDQWdJSDFjYmlBZ0lDQjBhR2x6TG1KdmRXNWtVSEpsVFc5MlpTQTlJR1YyZENBOVBpQjBhR2x6TG5CeVpVMXZkbVVvWlhaMEtUdGNiaUFnSUNCMGFHbHpMbUp2ZFc1a1VISmxVbVZzWldGelpTQTlJR1YyZENBOVBpQjBhR2x6TG5CeVpWSmxiR1ZoYzJVb1pYWjBLVHRjYmlBZ0lDQjBhR2x6TG1sdWRHVnlZV04wYVc5dVZHRnlaMlYwTG1Ga1pFVjJaVzUwVEdsemRHVnVaWElvSjIxdmRYTmxaRzkzYmljc0lHVjJkQ0E5UGlCMGFHbHpMbkJ5WlVOc2FXTnJLR1YyZENrcE8xeHVJQ0I5WEc1Y2JpQWdabWx1WVd4VWIzVmphR1Z6S0NrZ2UxeHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNXpkSGxzWlM1amRYSnpiM0lnUFNBbmNHOXBiblJsY2ljN1hHNGdJSDFjYmx4dUlDQndjbVZEYkdsamF5aGxLU0I3WEc0Z0lDQWdMeThnTVRBd01EQWdaMlYwUTI5dGNIVjBaV1JUZEhsc1pTQmpZV3hzY3lCMFlXdGxjeUF4TURBZ2JYTXVYRzRnSUNBZ0x5OGdMam91SUc5dVpTQjBZV3RsY3lCaFltOTFkQ0F1TURGdGMxeHVJQ0FnSUdsbUlDaDBhR2x6TG1Wc1pXMWxiblFnYVc1emRHRnVZMlZ2WmlCSVZFMU1SV3hsYldWdWRDa2dlMXh1SUNBZ0lDQWdkR2hwY3k1M2FXUjBhQ0E5SUhkcGJtUnZkeTVuWlhSRGIyMXdkWFJsWkZOMGVXeGxLSFJvYVhNdVpXeGxiV1Z1ZEN3Z2JuVnNiQ2t1WjJWMFVISnZjR1Z5ZEhsV1lXeDFaU2duZDJsa2RHZ25LUzV5WlhCc1lXTmxLQ2R3ZUNjc0p5Y3BPMXh1SUNBZ0lIMWNiaUFnSUNBdkx5QXhNREF3TUNCblpYUkRiMjF3ZFhSbFpGTjBlV3hsSUdOaGJHeHpJSFJoYTJWeklEUXdJRzF6TGx4dUlDQWdJQzh2SUM0NkxpQnZibVVnZEdGclpYTWdZV0p2ZFhRZ0xqQXdORzF6WEc0Z0lDQWdkR2hwY3k1dlptWnpaWFFnUFNCa2IyMHVabWx1WkZCdmMybDBhVzl1S0hSb2FYTXVaV3hsYldWdWRDazdYRzRnSUNBZ2RHaHBjeTV0YjNWelpTQTlJR1J2YlM1c2IyTmhkR1ZOYjNWelpTaGxMSFJvYVhNdWIyWm1jMlYwS1R0Y2JpQWdJQ0IwYUdsekxtTnNhV05yWldRZ1BTQjBjblZsTzF4dUlDQWdJSFJvYVhNdVkyeHBZMnNvS1R0Y2JpQWdJQ0IwYUdsekxtMXZkbVZGZG1WdWRDQTlJR1J2WTNWdFpXNTBMbUZrWkVWMlpXNTBUR2x6ZEdWdVpYSW9KMjF2ZFhObGJXOTJaU2NzSUhSb2FYTXVZbTkxYm1SUWNtVk5iM1psS1R0Y2JpQWdJQ0IwYUdsekxuSmxiR1ZoYzJWRmRtVnVkQ0E5SUdSdlkzVnRaVzUwTG1Ga1pFVjJaVzUwVEdsemRHVnVaWElvSjIxdmRYTmxkWEFuTENCMGFHbHpMbUp2ZFc1a1VISmxVbVZzWldGelpTazdYRzRnSUNBZ2RHaHBjeTVsYldsMEtDZGpiR2xqYXljcE8xeHVJQ0FnSUdVdWNISmxkbVZ1ZEVSbFptRjFiSFFvS1R0Y2JpQWdJQ0JsTG5OMGIzQlFjbTl3WVdkaGRHbHZiaWdwTzF4dUlDQjlYRzVjYmlBZ2NISmxUVzkyWlNobEtTQjdYRzRnSUNBZ2FXWWdLQ0YwYUdsekxuZGhhWFFwSUh0Y2JpQWdJQ0FnSUhSb2FYTXViVzkxYzJVZ1BTQmtiMjB1Ykc5allYUmxUVzkxYzJVb1pTeDBhR2x6TG05bVpuTmxkQ2s3WEc0Z0lDQWdJQ0IwYUdsekxtMXZkbVVvS1R0Y2JpQWdJQ0FnSUhSb2FYTXVkMkZwZENBOUlIUnlkV1U3WEc0Z0lDQWdJQ0J6WlhSVWFXMWxiM1YwS0NncElEMCtJSHNnZEdocGN5NTNZV2wwSUQwZ1ptRnNjMlU3SUgwc01qVXBPMXh1SUNBZ0lIMWNiaUFnSUNCbExuQnlaWFpsYm5SRVpXWmhkV3gwS0NrN1hHNGdJQ0FnWlM1emRHOXdVSEp2Y0dGbllYUnBiMjRvS1R0Y2JpQWdmVnh1WEc0Z0lIQnlaVkpsYkdWaGMyVW9aU2tnZTF4dUlDQWdJSFJvYVhNdWJXOTFjMlVnUFNCa2IyMHViRzlqWVhSbFRXOTFjMlVvWlN4MGFHbHpMbTltWm5ObGRDazdYRzRnSUNBZ2RHaHBjeTVqYkdsamEyVmtJRDBnWm1Gc2MyVTdYRzRnSUNBZ2RHaHBjeTV5Wld4bFlYTmxLQ2s3WEc0Z0lDQWdkR2hwY3k1bGJXbDBLQ2R5Wld4bFlYTmxKeWs3WEc0Z0lDQWdaRzlqZFcxbGJuUXVjbVZ0YjNabFJYWmxiblJNYVhOMFpXNWxjaWduYlc5MWMyVnRiM1psSnl4MGFHbHpMbUp2ZFc1a1VISmxUVzkyWlNrN1hHNGdJQ0FnWkc5amRXMWxiblF1Y21WdGIzWmxSWFpsYm5STWFYTjBaVzVsY2lnbmJXOTFjMlYxY0Njc2RHaHBjeTVpYjNWdVpGQnlaVkpsYkdWaGMyVXBPMXh1SUNBZ0lHVXVjSEpsZG1WdWRFUmxabUYxYkhRb0tUdGNiaUFnSUNCbExuTjBiM0JRY205d1lXZGhkR2x2YmlncE8xeHVJQ0I5WEc1Y2JpQWdZMnhwWTJzb0tTQjdYRzVjYmlBZ2ZWeHVYRzRnSUcxdmRtVW9LU0I3WEc1Y2JpQWdmVnh1WEc0Z0lISmxiR1ZoYzJVb0tTQjdYRzVjYmlBZ2ZWeHVYRzVjYmlBZ0x5b2dkRzkxWTJnZ0tpOWNibHh1SUNCd2NtVlViM1ZqYUNobEtTQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdVpXeGxiV1Z1ZENCcGJuTjBZVzVqWlc5bUlFaFVUVXhGYkdWdFpXNTBLU0I3WEc0Z0lDQWdJQ0IwYUdsekxuZHBaSFJvSUQwZ2QybHVaRzkzTG1kbGRFTnZiWEIxZEdWa1UzUjViR1VvZEdocGN5NWxiR1Z0Wlc1MExDQnVkV3hzS1M1blpYUlFjbTl3WlhKMGVWWmhiSFZsS0NkM2FXUjBhQ2NwTG5KbGNHeGhZMlVvSjNCNEp5d25KeWs3WEc0Z0lDQWdmVnh1SUNBZ0lIUm9hWE11YjJabWMyVjBJRDBnWkc5dExtWnBibVJRYjNOcGRHbHZiaWgwYUdsekxtVnNaVzFsYm5RcE8xeHVJQ0FnSUhSb2FYTXViVzkxYzJVZ1BTQmtiMjB1Ykc5allYUmxWRzkxWTJnb1pTeDBhR2x6TG05bVpuTmxkQ2s3WEc0Z0lDQWdkR2hwY3k1amJHbGphMlZrSUQwZ2RISjFaVHRjYmlBZ0lDQjBhR2x6TG5SdmRXTm9LR1VwTzF4dUlDQWdJSFJvYVhNdVpXMXBkQ2duWTJ4cFkyc25LVHRjYmlBZ0lDQmxMbkJ5WlhabGJuUkVaV1poZFd4MEtDazdYRzRnSUNBZ1pTNXpkRzl3VUhKdmNHRm5ZWFJwYjI0b0tUdGNiaUFnZlZ4dVhHNGdJSEJ5WlZSdmRXTm9UVzkyWlNobEtTQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdVkyeHBZMnRsWkNrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV0YjNWelpTQTlJR1J2YlM1c2IyTmhkR1ZVYjNWamFDaGxMSFJvYVhNdWIyWm1jMlYwS1R0Y2JpQWdJQ0FnSUhSb2FYTXVkRzkxWTJoTmIzWmxLQ2s3WEc0Z0lDQWdJQ0JsTG5CeVpYWmxiblJFWldaaGRXeDBLQ2s3WEc0Z0lDQWdJQ0JsTG5OMGIzQlFjbTl3WVdkaGRHbHZiaWdwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhCeVpWUnZkV05vVW1Wc1pXRnpaU2hsS1NCN1hHNGdJQ0FnZEdocGN5NXRiM1Z6WlNBOUlHUnZiUzVzYjJOaGRHVlViM1ZqYUNobExDQjBhR2x6TG05bVpuTmxkQ2s3WEc0Z0lDQWdkR2hwY3k1amJHbGphMlZrSUQwZ1ptRnNjMlU3WEc0Z0lDQWdkR2hwY3k1MGIzVmphRkpsYkdWaGMyVW9LVHRjYmlBZ0lDQjBhR2x6TG1WdGFYUW9KM0psYkdWaGMyVW5LVHRjYmlBZ0lDQmxMbkJ5WlhabGJuUkVaV1poZFd4MEtDazdYRzRnSUNBZ1pTNXpkRzl3VUhKdmNHRm5ZWFJwYjI0b0tUdGNiaUFnZlZ4dVhHNGdJSFJ2ZFdOb0tDa2dlMXh1SUNBZ0lIUm9hWE11WTJ4cFkyc29LVHRjYmlBZ2ZWeHVYRzRnSUhSdmRXTm9UVzkyWlNncElIdGNiaUFnSUNCMGFHbHpMbTF2ZG1Vb0tUdGNiaUFnZlZ4dVhHNGdJSFJ2ZFdOb1VtVnNaV0Z6WlNncElIdGNiaUFnSUNCMGFHbHpMbkpsYkdWaGMyVW9LVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FxSUZKbGMybDZaU0IwYUdVZ2FXNTBaWEptWVdObFhHNGdJQ29nUUhCaGNtRnRJSGRwWkhSb0lIdHVkVzFpWlhKOUlFNWxkeUIzYVdSMGFDQnBiaUJ3YVhobGJITmNiaUFnS2lCQWNHRnlZVzBnYUdWcFoyaDBJSHR1ZFcxaVpYSjlJRTVsZHlCb1pXbG5hSFFnYVc0Z2NHbDRaV3h6WEc0Z0lDcGNiaUFnS2lCQVpYaGhiWEJzWlZ4dUlDQXFJR0oxZEhSdmJpNXlaWE5wZW1Vb01UQXdMREV3TUNrN1hHNGdJQ292WEc0Z0lISmxjMmw2WlNoM2FXUjBhQ3hvWldsbmFIUXBJSHRjYmlBZ0lDQjBhR2x6TG5kcFpIUm9JRDBnZDJsa2RHZzdYRzRnSUNBZ2RHaHBjeTVvWldsbmFIUWdQU0JvWldsbmFIUTdYRzRnSUNBZ2RHaHBjeTV3WVhKbGJuUXVjM1I1YkdVdWQybGtkR2dnUFNCMGFHbHpMbmRwWkhSb0t5ZHdlQ2M3WEc0Z0lDQWdkR2hwY3k1d1lYSmxiblF1YzNSNWJHVXVhR1ZwWjJoMElEMGdkR2hwY3k1b1pXbG5hSFFySjNCNEp6dGNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUXVjMlYwUVhSMGNtbGlkWFJsS0NkM2FXUjBhQ2NzZEdocGN5NTNhV1IwYUNrN1hHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExuTmxkRUYwZEhKcFluVjBaU2duYUdWcFoyaDBKeXgwYUdsekxtaGxhV2RvZENrN1hHNGdJQ0FnZEdocGN5NXphWHBsU1c1MFpYSm1ZV05sS0NrN1hHNGdJSDFjYmx4dUlDQmxiWEIwZVNncElIdGNiaUFnSUNCM2FHbHNaU0FvZEdocGN5NWxiR1Z0Wlc1MExteGhjM1JEYUdsc1pDa2dlMXh1SUNBZ0lDQWdkR2hwY3k1bGJHVnRaVzUwTG5KbGJXOTJaVU5vYVd4a0tIUm9hWE11Wld4bGJXVnVkQzVzWVhOMFEyaHBiR1FwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FxSUZKbGJXOTJaU0IwYUdVZ2FXNTBaWEptWVdObElHWnliMjBnZEdobElIQmhaMlVnWVc1a0lHTmhibU5sYkNCcGRITWdaWFpsYm5RZ2JHbHpkR1Z1WlhJb2N5a3VYRzRnSUNwY2JpQWdLaUJBWlhoaGJYQnNaVnh1SUNBcUlHSjFkSFJ2Ymk1a1pYTjBjbTk1S0NrN1hHNGdJQ292WEc0Z0lHUmxjM1J5YjNrb0tTQjdYRzRnSUNBZ2RHaHBjeTVsYlhCMGVTZ3BPMXh1SUNBZ0lIUm9hWE11Y0dGeVpXNTBMbkpsYlc5MlpVTm9hV3hrS0hSb2FYTXVaV3hsYldWdWRDazdYRzRnSUNBZ2RHaHBjeTV5WlcxdmRtVkJiR3hNYVhOMFpXNWxjbk1vS1R0Y2JpQWdJQ0JwWmlBb2RHaHBjeTVwYm5OMGNuVnRaVzUwS1NCN1hHNGdJQ0FnSUNCa1pXeGxkR1VnZEdocGN5NXBibk4wY25WdFpXNTBXM1JvYVhNdWFXUmRPMXh1SUNBZ0lIMWNiaUFnSUNCMGFHbHpMbU4xYzNSdmJVUmxjM1J5YjNrb0tUdGNiaUFnZlZ4dVhHNGdJR04xYzNSdmJVUmxjM1J5YjNrb0tTQjdYRzVjYmlBZ2ZWeHVYRzRnSUdOdmJHOXlhWHBsS0hSNWNHVXNZMjlzYjNJcElIdGNiaUFnSUNCMGFHbHpMbU52Ykc5eWMxdDBlWEJsWFNBOUlHTnZiRzl5TzF4dUlDQWdJSFJvYVhNdVkyOXNiM0pKYm5SbGNtWmhZMlVvS1R0Y2JpQWdmVnh1WEc1OVhHNWNibHh1WEc0dkx5QlhSVUpRUVVOTElFWlBUMVJGVWlBdkwxeHVMeThnTGk5K0wycHphR2x1ZEMxc2IyRmtaWEloTGk5c2FXSXZZMjl5WlM5cGJuUmxjbVpoWTJVdWFuTWlMQ0luZFhObElITjBjbWxqZENjN1hHNWNibVY0Y0c5eWRITXVabWx1WkZCdmMybDBhVzl1SUQwZ0tHVnNLU0E5UGlCN1hHNGdJR3hsZENCMmFXVjNjRzl5ZEU5bVpuTmxkQ0E5SUdWc0xtZGxkRUp2ZFc1a2FXNW5RMnhwWlc1MFVtVmpkQ2dwTzF4dUlDQnNaWFFnZEc5d0lEMGdkbWxsZDNCdmNuUlBabVp6WlhRdWRHOXdJQ3NnZDJsdVpHOTNMbk5qY205c2JGazdYRzRnSUd4bGRDQnNaV1owSUQwZ2RtbGxkM0J2Y25SUFptWnpaWFF1YkdWbWRDQXJJSGRwYm1SdmR5NXpZM0p2Ykd4WU8xeHVJQ0J5WlhSMWNtNGdlM1J2Y0N4c1pXWjBmVHRjYm4wN1hHNWNibVY0Y0c5eWRITXVjR0Z5YzJWRmJHVnRaVzUwSUQwZ0tIQmhjbVZ1ZENrZ1BUNGdlMXh1SUNCcFppQW9kSGx3Wlc5bUlIQmhjbVZ1ZENBOVBUMGdKM04wY21sdVp5Y3BJSHRjYmlBZ0lDQndZWEpsYm5RZ1BTQmtiMk4xYldWdWRDNW5aWFJGYkdWdFpXNTBRbmxKWkNod1lYSmxiblF1Y21Wd2JHRmpaU2duSXljc0p5Y3BLVHRjYmlBZ2ZWeHVYRzRnSUdsbUlDaHdZWEpsYm5RZ2FXNXpkR0Z1WTJWdlppQklWRTFNUld4bGJXVnVkQ0I4ZkNCd1lYSmxiblFnYVc1emRHRnVZMlZ2WmlCVFZrZEZiR1Z0Wlc1MEtYdGNiaUFnSUNCeVpYUjFjbTRnY0dGeVpXNTBPMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJSEpsZEhWeWJpQW5UbThnZG1Gc2FXUWdjR0Z5Wlc1MElHRnlaM1Z0Wlc1MEp6dGNiaUFnZlZ4dWZUdGNibHh1Wlhod2IzSjBjeTVzYjJOaGRHVk5iM1Z6WlNBOUlDaGxMRzltWm5ObGRDa2dQVDRnZTF4dUlDQnlaWFIxY200Z2UxeHVJQ0FnSUhnNklHVXVjR0ZuWlZnZ0xTQnZabVp6WlhRdWJHVm1kQ3hjYmlBZ0lDQjVPaUJsTG5CaFoyVlpJQzBnYjJabWMyVjBMblJ2Y0Z4dUlDQjlPMXh1ZlR0Y2JseHVaWGh3YjNKMGN5NXNiMk5oZEdWVWIzVmphQ0E5SUNobExHOW1abk5sZENrZ1BUNGdlMXh1SUNCeVpYUjFjbTRnZTF4dUlDQWdJSGc2SUdVdWRHRnlaMlYwVkc5MVkyaGxjeTVzWlc1bmRHZ2dQeUJsTG5SaGNtZGxkRlJ2ZFdOb1pYTmJNRjB1Y0dGblpWZ2dMU0J2Wm1aelpYUXViR1ZtZENBNklHWmhiSE5sTEZ4dUlDQWdJSGs2SUdVdWRHRnlaMlYwVkc5MVkyaGxjeTVzWlc1bmRHZ2dQeUJsTG5SaGNtZGxkRlJ2ZFdOb1pYTmJNRjB1Y0dGblpWa2dMU0J2Wm1aelpYUXVkRzl3SURvZ1ptRnNjMlZjYmlBZ2ZUdGNibjA3WEc1Y2JtVjRjRzl5ZEhNdVUyMWhjblJEWVc1MllYTWdQU0JtZFc1amRHbHZiaWh3WVhKbGJuUXBJSHRjYmx4dUlDQjBhR2x6TG1Wc1pXMWxiblFnUFNCa2IyTjFiV1Z1ZEM1amNtVmhkR1ZGYkdWdFpXNTBLQ2RqWVc1MllYTW5LVHRjYmlBZ2RHaHBjeTVqYjI1MFpYaDBJRDBnZEdocGN5NWxiR1Z0Wlc1MExtZGxkRU52Ym5SbGVIUW9KekprSnlrN1hHNGdJSEJoY21WdWRDNWhjSEJsYm1SRGFHbHNaQ2gwYUdsekxtVnNaVzFsYm5RcE8xeHVYRzRnSUhSb2FYTXVjbVZ6YVhwbElEMGdLSGNzYUNrZ1BUNGdlMXh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkQzUzYVdSMGFDQTlJSGNxTWp0Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdWFHVnBaMmgwSUQwZ2FDb3lPMXh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkQzV6ZEhsc1pTNTNhV1IwYUNBOUlIY3JKM0I0Snp0Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdWMzUjViR1V1YUdWcFoyaDBJRDBnYUNzbmNIZ25PMXh1SUNCOU8xeHVYRzU5TzF4dVhHNWNibHh1THk4Z1YwVkNVRUZEU3lCR1QwOVVSVklnTHk5Y2JpOHZJQzR2Zmk5cWMyaHBiblF0Ykc5aFpHVnlJUzR2YkdsaUwzVjBhV3d2Wkc5dExtcHpJaXdpSjNWelpTQnpkSEpwWTNRbk8xeHVYRzVsZUhCdmNuUnpMbWx6VDJKcVpXTjBJRDBnS0c5aWFpa2dQVDRnZTF4dUlDQnBaaUFvZEhsd1pXOW1JRzlpYWlBOVBUMGdKMjlpYW1WamRDY2dKaVlnSVVGeWNtRjVMbWx6UVhKeVlYa29iMkpxS1NBbUppQnZZbW9nSVQwOUlHNTFiR3dnSmlZZ2IySnFJR2x1YzNSaGJtTmxiMllnVTFaSFJXeGxiV1Z1ZENBOVBUMGdabUZzYzJVZ0ppWWdiMkpxSUdsdWMzUmhibU5sYjJZZ1NGUk5URVZzWlcxbGJuUWdQVDA5SUdaaGJITmxJQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBjblZsTzF4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUhKbGRIVnliaUJtWVd4elpUdGNiaUFnZlZ4dWZUdGNibHh1WEc1Y2JpOHZJRmRGUWxCQlEwc2dSazlQVkVWU0lDOHZYRzR2THlBdUwzNHZhbk5vYVc1MExXeHZZV1JsY2lFdUwyeHBZaTkxZEdsc0wzVjBhV3d1YW5NaUxDSW5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JtVjRjRzl5ZEhNdVpYaHBjM1J6SUQwZ0tDZHZiblJ2ZFdOb2MzUmhjblFuSUdsdUlHUnZZM1Z0Wlc1MExtUnZZM1Z0Wlc1MFJXeGxiV1Z1ZENrN1hHNWNibHh1WEc0dkx5QlhSVUpRUVVOTElFWlBUMVJGVWlBdkwxeHVMeThnTGk5K0wycHphR2x1ZEMxc2IyRmtaWEloTGk5c2FXSXZkWFJwYkM5MGIzVmphQzVxY3lJc0lpOHZJRU52Y0hseWFXZG9kQ0JLYjNsbGJuUXNJRWx1WXk0Z1lXNWtJRzkwYUdWeUlFNXZaR1VnWTI5dWRISnBZblYwYjNKekxseHVMeTljYmk4dklGQmxjbTFwYzNOcGIyNGdhWE1nYUdWeVpXSjVJR2R5WVc1MFpXUXNJR1p5WldVZ2IyWWdZMmhoY21kbExDQjBieUJoYm5rZ2NHVnljMjl1SUc5aWRHRnBibWx1WnlCaFhHNHZMeUJqYjNCNUlHOW1JSFJvYVhNZ2MyOW1kSGRoY21VZ1lXNWtJR0Z6YzI5amFXRjBaV1FnWkc5amRXMWxiblJoZEdsdmJpQm1hV3hsY3lBb2RHaGxYRzR2THlCY0lsTnZablIzWVhKbFhDSXBMQ0IwYnlCa1pXRnNJR2x1SUhSb1pTQlRiMlowZDJGeVpTQjNhWFJvYjNWMElISmxjM1J5YVdOMGFXOXVMQ0JwYm1Oc2RXUnBibWRjYmk4dklIZHBkR2h2ZFhRZ2JHbHRhWFJoZEdsdmJpQjBhR1VnY21sbmFIUnpJSFJ2SUhWelpTd2dZMjl3ZVN3Z2JXOWthV1o1TENCdFpYSm5aU3dnY0hWaWJHbHphQ3hjYmk4dklHUnBjM1J5YVdKMWRHVXNJSE4xWW14cFkyVnVjMlVzSUdGdVpDOXZjaUJ6Wld4c0lHTnZjR2xsY3lCdlppQjBhR1VnVTI5bWRIZGhjbVVzSUdGdVpDQjBieUJ3WlhKdGFYUmNiaTh2SUhCbGNuTnZibk1nZEc4Z2QyaHZiU0IwYUdVZ1UyOW1kSGRoY21VZ2FYTWdablZ5Ym1semFHVmtJSFJ2SUdSdklITnZMQ0J6ZFdKcVpXTjBJSFJ2SUhSb1pWeHVMeThnWm05c2JHOTNhVzVuSUdOdmJtUnBkR2x2Ym5NNlhHNHZMMXh1THk4Z1ZHaGxJR0ZpYjNabElHTnZjSGx5YVdkb2RDQnViM1JwWTJVZ1lXNWtJSFJvYVhNZ2NHVnliV2x6YzJsdmJpQnViM1JwWTJVZ2MyaGhiR3dnWW1VZ2FXNWpiSFZrWldSY2JpOHZJR2x1SUdGc2JDQmpiM0JwWlhNZ2IzSWdjM1ZpYzNSaGJuUnBZV3dnY0c5eWRHbHZibk1nYjJZZ2RHaGxJRk52Wm5SM1lYSmxMbHh1THk5Y2JpOHZJRlJJUlNCVFQwWlVWMEZTUlNCSlV5QlFVazlXU1VSRlJDQmNJa0ZUSUVsVFhDSXNJRmRKVkVoUFZWUWdWMEZTVWtGT1ZGa2dUMFlnUVU1WklFdEpUa1FzSUVWWVVGSkZVMU5jYmk4dklFOVNJRWxOVUV4SlJVUXNJRWxPUTB4VlJFbE9SeUJDVlZRZ1RrOVVJRXhKVFVsVVJVUWdWRThnVkVoRklGZEJVbEpCVGxSSlJWTWdUMFpjYmk4dklFMUZVa05JUVU1VVFVSkpURWxVV1N3Z1JrbFVUa1ZUVXlCR1QxSWdRU0JRUVZKVVNVTlZURUZTSUZCVlVsQlBVMFVnUVU1RUlFNVBUa2xPUmxKSlRrZEZUVVZPVkM0Z1NVNWNiaTh2SUU1UElFVldSVTVVSUZOSVFVeE1JRlJJUlNCQlZWUklUMUpUSUU5U0lFTlBVRmxTU1VkSVZDQklUMHhFUlZKVElFSkZJRXhKUVVKTVJTQkdUMUlnUVU1WklFTk1RVWxOTEZ4dUx5OGdSRUZOUVVkRlV5QlBVaUJQVkVoRlVpQk1TVUZDU1V4SlZGa3NJRmRJUlZSSVJWSWdTVTRnUVU0Z1FVTlVTVTlPSUU5R0lFTlBUbFJTUVVOVUxDQlVUMUpVSUU5U1hHNHZMeUJQVkVoRlVsZEpVMFVzSUVGU1NWTkpUa2NnUmxKUFRTd2dUMVZVSUU5R0lFOVNJRWxPSUVOUFRrNUZRMVJKVDA0Z1YwbFVTQ0JVU0VVZ1UwOUdWRmRCVWtVZ1QxSWdWRWhGWEc0dkx5QlZVMFVnVDFJZ1QxUklSVklnUkVWQlRFbE9SMU1nU1U0Z1ZFaEZJRk5QUmxSWFFWSkZMbHh1WEc1bWRXNWpkR2x2YmlCRmRtVnVkRVZ0YVhSMFpYSW9LU0I3WEc0Z0lIUm9hWE11WDJWMlpXNTBjeUE5SUhSb2FYTXVYMlYyWlc1MGN5QjhmQ0I3ZlR0Y2JpQWdkR2hwY3k1ZmJXRjRUR2x6ZEdWdVpYSnpJRDBnZEdocGN5NWZiV0Y0VEdsemRHVnVaWEp6SUh4OElIVnVaR1ZtYVc1bFpEdGNibjFjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnUlhabGJuUkZiV2wwZEdWeU8xeHVYRzR2THlCQ1lXTnJkMkZ5WkhNdFkyOXRjR0YwSUhkcGRHZ2dibTlrWlNBd0xqRXdMbmhjYmtWMlpXNTBSVzFwZEhSbGNpNUZkbVZ1ZEVWdGFYUjBaWElnUFNCRmRtVnVkRVZ0YVhSMFpYSTdYRzVjYmtWMlpXNTBSVzFwZEhSbGNpNXdjbTkwYjNSNWNHVXVYMlYyWlc1MGN5QTlJSFZ1WkdWbWFXNWxaRHRjYmtWMlpXNTBSVzFwZEhSbGNpNXdjbTkwYjNSNWNHVXVYMjFoZUV4cGMzUmxibVZ5Y3lBOUlIVnVaR1ZtYVc1bFpEdGNibHh1THk4Z1Fua2daR1ZtWVhWc2RDQkZkbVZ1ZEVWdGFYUjBaWEp6SUhkcGJHd2djSEpwYm5RZ1lTQjNZWEp1YVc1bklHbG1JRzF2Y21VZ2RHaGhiaUF4TUNCc2FYTjBaVzVsY25NZ1lYSmxYRzR2THlCaFpHUmxaQ0IwYnlCcGRDNGdWR2hwY3lCcGN5QmhJSFZ6WldaMWJDQmtaV1poZFd4MElIZG9hV05vSUdobGJIQnpJR1pwYm1ScGJtY2diV1Z0YjNKNUlHeGxZV3R6TGx4dVJYWmxiblJGYldsMGRHVnlMbVJsWm1GMWJIUk5ZWGhNYVhOMFpXNWxjbk1nUFNBeE1EdGNibHh1THk4Z1QySjJhVzkxYzJ4NUlHNXZkQ0JoYkd3Z1JXMXBkSFJsY25NZ2MyaHZkV3hrSUdKbElHeHBiV2wwWldRZ2RHOGdNVEF1SUZSb2FYTWdablZ1WTNScGIyNGdZV3hzYjNkelhHNHZMeUIwYUdGMElIUnZJR0psSUdsdVkzSmxZWE5sWkM0Z1UyVjBJSFJ2SUhwbGNtOGdabTl5SUhWdWJHbHRhWFJsWkM1Y2JrVjJaVzUwUlcxcGRIUmxjaTV3Y205MGIzUjVjR1V1YzJWMFRXRjRUR2x6ZEdWdVpYSnpJRDBnWm5WdVkzUnBiMjRvYmlrZ2UxeHVJQ0JwWmlBb0lXbHpUblZ0WW1WeUtHNHBJSHg4SUc0Z1BDQXdJSHg4SUdselRtRk9LRzRwS1Z4dUlDQWdJSFJvY205M0lGUjVjR1ZGY25KdmNpZ25iaUJ0ZFhOMElHSmxJR0VnY0c5emFYUnBkbVVnYm5WdFltVnlKeWs3WEc0Z0lIUm9hWE11WDIxaGVFeHBjM1JsYm1WeWN5QTlJRzQ3WEc0Z0lISmxkSFZ5YmlCMGFHbHpPMXh1ZlR0Y2JseHVSWFpsYm5SRmJXbDBkR1Z5TG5CeWIzUnZkSGx3WlM1bGJXbDBJRDBnWm5WdVkzUnBiMjRvZEhsd1pTa2dlMXh1SUNCMllYSWdaWElzSUdoaGJtUnNaWElzSUd4bGJpd2dZWEpuY3l3Z2FTd2diR2x6ZEdWdVpYSnpPMXh1WEc0Z0lHbG1JQ2doZEdocGN5NWZaWFpsYm5SektWeHVJQ0FnSUhSb2FYTXVYMlYyWlc1MGN5QTlJSHQ5TzF4dVhHNGdJQzh2SUVsbUlIUm9aWEpsSUdseklHNXZJQ2RsY25KdmNpY2daWFpsYm5RZ2JHbHpkR1Z1WlhJZ2RHaGxiaUIwYUhKdmR5NWNiaUFnYVdZZ0tIUjVjR1VnUFQwOUlDZGxjbkp2Y2ljcElIdGNiaUFnSUNCcFppQW9JWFJvYVhNdVgyVjJaVzUwY3k1bGNuSnZjaUI4ZkZ4dUlDQWdJQ0FnSUNBb2FYTlBZbXBsWTNRb2RHaHBjeTVmWlhabGJuUnpMbVZ5Y205eUtTQW1KaUFoZEdocGN5NWZaWFpsYm5SekxtVnljbTl5TG14bGJtZDBhQ2twSUh0Y2JpQWdJQ0FnSUdWeUlEMGdZWEpuZFcxbGJuUnpXekZkTzF4dUlDQWdJQ0FnYVdZZ0tHVnlJR2x1YzNSaGJtTmxiMllnUlhKeWIzSXBJSHRjYmlBZ0lDQWdJQ0FnZEdoeWIzY2daWEk3SUM4dklGVnVhR0Z1Wkd4bFpDQW5aWEp5YjNJbklHVjJaVzUwWEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0F2THlCQmRDQnNaV0Z6ZENCbmFYWmxJSE52YldVZ2EybHVaQ0J2WmlCamIyNTBaWGgwSUhSdklIUm9aU0IxYzJWeVhHNGdJQ0FnSUNBZ0lIWmhjaUJsY25JZ1BTQnVaWGNnUlhKeWIzSW9KMVZ1WTJGMVoyaDBMQ0IxYm5Od1pXTnBabWxsWkNCY0ltVnljbTl5WENJZ1pYWmxiblF1SUNnbklDc2daWElnS3lBbktTY3BPMXh1SUNBZ0lDQWdJQ0JsY25JdVkyOXVkR1Y0ZENBOUlHVnlPMXh1SUNBZ0lDQWdJQ0IwYUhKdmR5Qmxjbkk3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnYUdGdVpHeGxjaUE5SUhSb2FYTXVYMlYyWlc1MGMxdDBlWEJsWFR0Y2JseHVJQ0JwWmlBb2FYTlZibVJsWm1sdVpXUW9hR0Z1Wkd4bGNpa3BYRzRnSUNBZ2NtVjBkWEp1SUdaaGJITmxPMXh1WEc0Z0lHbG1JQ2hwYzBaMWJtTjBhVzl1S0doaGJtUnNaWElwS1NCN1hHNGdJQ0FnYzNkcGRHTm9JQ2hoY21kMWJXVnVkSE11YkdWdVozUm9LU0I3WEc0Z0lDQWdJQ0F2THlCbVlYTjBJR05oYzJWelhHNGdJQ0FnSUNCallYTmxJREU2WEc0Z0lDQWdJQ0FnSUdoaGJtUnNaWEl1WTJGc2JDaDBhR2x6S1R0Y2JpQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0JqWVhObElESTZYRzRnSUNBZ0lDQWdJR2hoYm1Sc1pYSXVZMkZzYkNoMGFHbHpMQ0JoY21kMWJXVnVkSE5iTVYwcE8xeHVJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUdOaGMyVWdNenBjYmlBZ0lDQWdJQ0FnYUdGdVpHeGxjaTVqWVd4c0tIUm9hWE1zSUdGeVozVnRaVzUwYzFzeFhTd2dZWEpuZFcxbGJuUnpXekpkS1R0Y2JpQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0F2THlCemJHOTNaWEpjYmlBZ0lDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQWdJR0Z5WjNNZ1BTQkJjbkpoZVM1d2NtOTBiM1I1Y0dVdWMyeHBZMlV1WTJGc2JDaGhjbWQxYldWdWRITXNJREVwTzF4dUlDQWdJQ0FnSUNCb1lXNWtiR1Z5TG1Gd2NHeDVLSFJvYVhNc0lHRnlaM01wTzF4dUlDQWdJSDFjYmlBZ2ZTQmxiSE5sSUdsbUlDaHBjMDlpYW1WamRDaG9ZVzVrYkdWeUtTa2dlMXh1SUNBZ0lHRnlaM01nUFNCQmNuSmhlUzV3Y205MGIzUjVjR1V1YzJ4cFkyVXVZMkZzYkNoaGNtZDFiV1Z1ZEhNc0lERXBPMXh1SUNBZ0lHeHBjM1JsYm1WeWN5QTlJR2hoYm1Sc1pYSXVjMnhwWTJVb0tUdGNiaUFnSUNCc1pXNGdQU0JzYVhOMFpXNWxjbk11YkdWdVozUm9PMXh1SUNBZ0lHWnZjaUFvYVNBOUlEQTdJR2tnUENCc1pXNDdJR2tyS3lsY2JpQWdJQ0FnSUd4cGMzUmxibVZ5YzF0cFhTNWhjSEJzZVNoMGFHbHpMQ0JoY21kektUdGNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQjBjblZsTzF4dWZUdGNibHh1UlhabGJuUkZiV2wwZEdWeUxuQnliM1J2ZEhsd1pTNWhaR1JNYVhOMFpXNWxjaUE5SUdaMWJtTjBhVzl1S0hSNWNHVXNJR3hwYzNSbGJtVnlLU0I3WEc0Z0lIWmhjaUJ0TzF4dVhHNGdJR2xtSUNnaGFYTkdkVzVqZEdsdmJpaHNhWE4wWlc1bGNpa3BYRzRnSUNBZ2RHaHliM2NnVkhsd1pVVnljbTl5S0Nkc2FYTjBaVzVsY2lCdGRYTjBJR0psSUdFZ1puVnVZM1JwYjI0bktUdGNibHh1SUNCcFppQW9JWFJvYVhNdVgyVjJaVzUwY3lsY2JpQWdJQ0IwYUdsekxsOWxkbVZ1ZEhNZ1BTQjdmVHRjYmx4dUlDQXZMeUJVYnlCaGRtOXBaQ0J5WldOMWNuTnBiMjRnYVc0Z2RHaGxJR05oYzJVZ2RHaGhkQ0IwZVhCbElEMDlQU0JjSW01bGQweHBjM1JsYm1WeVhDSWhJRUpsWm05eVpWeHVJQ0F2THlCaFpHUnBibWNnYVhRZ2RHOGdkR2hsSUd4cGMzUmxibVZ5Y3l3Z1ptbHljM1FnWlcxcGRDQmNJbTVsZDB4cGMzUmxibVZ5WENJdVhHNGdJR2xtSUNoMGFHbHpMbDlsZG1WdWRITXVibVYzVEdsemRHVnVaWElwWEc0Z0lDQWdkR2hwY3k1bGJXbDBLQ2R1WlhkTWFYTjBaVzVsY2ljc0lIUjVjR1VzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR2x6Um5WdVkzUnBiMjRvYkdsemRHVnVaWEl1YkdsemRHVnVaWElwSUQ5Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnYkdsemRHVnVaWEl1YkdsemRHVnVaWElnT2lCc2FYTjBaVzVsY2lrN1hHNWNiaUFnYVdZZ0tDRjBhR2x6TGw5bGRtVnVkSE5iZEhsd1pWMHBYRzRnSUNBZ0x5OGdUM0IwYVcxcGVtVWdkR2hsSUdOaGMyVWdiMllnYjI1bElHeHBjM1JsYm1WeUxpQkViMjRuZENCdVpXVmtJSFJvWlNCbGVIUnlZU0JoY25KaGVTQnZZbXBsWTNRdVhHNGdJQ0FnZEdocGN5NWZaWFpsYm5SelczUjVjR1ZkSUQwZ2JHbHpkR1Z1WlhJN1hHNGdJR1ZzYzJVZ2FXWWdLR2x6VDJKcVpXTjBLSFJvYVhNdVgyVjJaVzUwYzF0MGVYQmxYU2twWEc0Z0lDQWdMeThnU1dZZ2QyVW5kbVVnWVd4eVpXRmtlU0JuYjNRZ1lXNGdZWEp5WVhrc0lHcDFjM1FnWVhCd1pXNWtMbHh1SUNBZ0lIUm9hWE11WDJWMlpXNTBjMXQwZVhCbFhTNXdkWE5vS0d4cGMzUmxibVZ5S1R0Y2JpQWdaV3h6WlZ4dUlDQWdJQzh2SUVGa1pHbHVaeUIwYUdVZ2MyVmpiMjVrSUdWc1pXMWxiblFzSUc1bFpXUWdkRzhnWTJoaGJtZGxJSFJ2SUdGeWNtRjVMbHh1SUNBZ0lIUm9hWE11WDJWMlpXNTBjMXQwZVhCbFhTQTlJRnQwYUdsekxsOWxkbVZ1ZEhOYmRIbHdaVjBzSUd4cGMzUmxibVZ5WFR0Y2JseHVJQ0F2THlCRGFHVmpheUJtYjNJZ2JHbHpkR1Z1WlhJZ2JHVmhhMXh1SUNCcFppQW9hWE5QWW1wbFkzUW9kR2hwY3k1ZlpYWmxiblJ6VzNSNWNHVmRLU0FtSmlBaGRHaHBjeTVmWlhabGJuUnpXM1I1Y0dWZExuZGhjbTVsWkNrZ2UxeHVJQ0FnSUdsbUlDZ2hhWE5WYm1SbFptbHVaV1FvZEdocGN5NWZiV0Y0VEdsemRHVnVaWEp6S1NrZ2UxeHVJQ0FnSUNBZ2JTQTlJSFJvYVhNdVgyMWhlRXhwYzNSbGJtVnljenRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2JTQTlJRVYyWlc1MFJXMXBkSFJsY2k1a1pXWmhkV3gwVFdGNFRHbHpkR1Z1WlhKek8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaHRJQ1ltSUcwZ1BpQXdJQ1ltSUhSb2FYTXVYMlYyWlc1MGMxdDBlWEJsWFM1c1pXNW5kR2dnUGlCdEtTQjdYRzRnSUNBZ0lDQjBhR2x6TGw5bGRtVnVkSE5iZEhsd1pWMHVkMkZ5Ym1Wa0lEMGdkSEoxWlR0Y2JpQWdJQ0FnSUdOdmJuTnZiR1V1WlhKeWIzSW9KeWh1YjJSbEtTQjNZWEp1YVc1bk9pQndiM056YVdKc1pTQkZkbVZ1ZEVWdGFYUjBaWElnYldWdGIzSjVJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQW5iR1ZoYXlCa1pYUmxZM1JsWkM0Z0pXUWdiR2x6ZEdWdVpYSnpJR0ZrWkdWa0xpQW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0oxVnpaU0JsYldsMGRHVnlMbk5sZEUxaGVFeHBjM1JsYm1WeWN5Z3BJSFJ2SUdsdVkzSmxZWE5sSUd4cGJXbDBMaWNzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11WDJWMlpXNTBjMXQwZVhCbFhTNXNaVzVuZEdncE8xeHVJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQmpiMjV6YjJ4bExuUnlZV05sSUQwOVBTQW5ablZ1WTNScGIyNG5LU0I3WEc0Z0lDQWdJQ0FnSUM4dklHNXZkQ0J6ZFhCd2IzSjBaV1FnYVc0Z1NVVWdNVEJjYmlBZ0lDQWdJQ0FnWTI5dWMyOXNaUzUwY21GalpTZ3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQjBhR2x6TzF4dWZUdGNibHh1UlhabGJuUkZiV2wwZEdWeUxuQnliM1J2ZEhsd1pTNXZiaUE5SUVWMlpXNTBSVzFwZEhSbGNpNXdjbTkwYjNSNWNHVXVZV1JrVEdsemRHVnVaWEk3WEc1Y2JrVjJaVzUwUlcxcGRIUmxjaTV3Y205MGIzUjVjR1V1YjI1alpTQTlJR1oxYm1OMGFXOXVLSFI1Y0dVc0lHeHBjM1JsYm1WeUtTQjdYRzRnSUdsbUlDZ2hhWE5HZFc1amRHbHZiaWhzYVhOMFpXNWxjaWtwWEc0Z0lDQWdkR2h5YjNjZ1ZIbHdaVVZ5Y205eUtDZHNhWE4wWlc1bGNpQnRkWE4wSUdKbElHRWdablZ1WTNScGIyNG5LVHRjYmx4dUlDQjJZWElnWm1seVpXUWdQU0JtWVd4elpUdGNibHh1SUNCbWRXNWpkR2x2YmlCbktDa2dlMXh1SUNBZ0lIUm9hWE11Y21WdGIzWmxUR2x6ZEdWdVpYSW9kSGx3WlN3Z1p5azdYRzVjYmlBZ0lDQnBaaUFvSVdacGNtVmtLU0I3WEc0Z0lDQWdJQ0JtYVhKbFpDQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNCc2FYTjBaVzVsY2k1aGNIQnNlU2gwYUdsekxDQmhjbWQxYldWdWRITXBPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJR2N1YkdsemRHVnVaWElnUFNCc2FYTjBaVzVsY2p0Y2JpQWdkR2hwY3k1dmJpaDBlWEJsTENCbktUdGNibHh1SUNCeVpYUjFjbTRnZEdocGN6dGNibjA3WEc1Y2JpOHZJR1Z0YVhSeklHRWdKM0psYlc5MlpVeHBjM1JsYm1WeUp5QmxkbVZ1ZENCcFptWWdkR2hsSUd4cGMzUmxibVZ5SUhkaGN5QnlaVzF2ZG1Wa1hHNUZkbVZ1ZEVWdGFYUjBaWEl1Y0hKdmRHOTBlWEJsTG5KbGJXOTJaVXhwYzNSbGJtVnlJRDBnWm5WdVkzUnBiMjRvZEhsd1pTd2diR2x6ZEdWdVpYSXBJSHRjYmlBZ2RtRnlJR3hwYzNRc0lIQnZjMmwwYVc5dUxDQnNaVzVuZEdnc0lHazdYRzVjYmlBZ2FXWWdLQ0ZwYzBaMWJtTjBhVzl1S0d4cGMzUmxibVZ5S1NsY2JpQWdJQ0IwYUhKdmR5QlVlWEJsUlhKeWIzSW9KMnhwYzNSbGJtVnlJRzExYzNRZ1ltVWdZU0JtZFc1amRHbHZiaWNwTzF4dVhHNGdJR2xtSUNnaGRHaHBjeTVmWlhabGJuUnpJSHg4SUNGMGFHbHpMbDlsZG1WdWRITmJkSGx3WlYwcFhHNGdJQ0FnY21WMGRYSnVJSFJvYVhNN1hHNWNiaUFnYkdsemRDQTlJSFJvYVhNdVgyVjJaVzUwYzF0MGVYQmxYVHRjYmlBZ2JHVnVaM1JvSUQwZ2JHbHpkQzVzWlc1bmRHZzdYRzRnSUhCdmMybDBhVzl1SUQwZ0xURTdYRzVjYmlBZ2FXWWdLR3hwYzNRZ1BUMDlJR3hwYzNSbGJtVnlJSHg4WEc0Z0lDQWdJQ0FvYVhOR2RXNWpkR2x2Ymloc2FYTjBMbXhwYzNSbGJtVnlLU0FtSmlCc2FYTjBMbXhwYzNSbGJtVnlJRDA5UFNCc2FYTjBaVzVsY2lrcElIdGNiaUFnSUNCa1pXeGxkR1VnZEdocGN5NWZaWFpsYm5SelczUjVjR1ZkTzF4dUlDQWdJR2xtSUNoMGFHbHpMbDlsZG1WdWRITXVjbVZ0YjNabFRHbHpkR1Z1WlhJcFhHNGdJQ0FnSUNCMGFHbHpMbVZ0YVhRb0ozSmxiVzkyWlV4cGMzUmxibVZ5Snl3Z2RIbHdaU3dnYkdsemRHVnVaWElwTzF4dVhHNGdJSDBnWld4elpTQnBaaUFvYVhOUFltcGxZM1FvYkdsemRDa3BJSHRjYmlBZ0lDQm1iM0lnS0drZ1BTQnNaVzVuZEdnN0lHa3RMU0ErSURBN0tTQjdYRzRnSUNBZ0lDQnBaaUFvYkdsemRGdHBYU0E5UFQwZ2JHbHpkR1Z1WlhJZ2ZIeGNiaUFnSUNBZ0lDQWdJQ0FvYkdsemRGdHBYUzVzYVhOMFpXNWxjaUFtSmlCc2FYTjBXMmxkTG14cGMzUmxibVZ5SUQwOVBTQnNhWE4wWlc1bGNpa3BJSHRjYmlBZ0lDQWdJQ0FnY0c5emFYUnBiMjRnUFNCcE8xeHVJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2NHOXphWFJwYjI0Z1BDQXdLVnh1SUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE03WEc1Y2JpQWdJQ0JwWmlBb2JHbHpkQzVzWlc1bmRHZ2dQVDA5SURFcElIdGNiaUFnSUNBZ0lHeHBjM1F1YkdWdVozUm9JRDBnTUR0Y2JpQWdJQ0FnSUdSbGJHVjBaU0IwYUdsekxsOWxkbVZ1ZEhOYmRIbHdaVjA3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHeHBjM1F1YzNCc2FXTmxLSEJ2YzJsMGFXOXVMQ0F4S1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2RHaHBjeTVmWlhabGJuUnpMbkpsYlc5MlpVeHBjM1JsYm1WeUtWeHVJQ0FnSUNBZ2RHaHBjeTVsYldsMEtDZHlaVzF2ZG1WTWFYTjBaVzVsY2ljc0lIUjVjR1VzSUd4cGMzUmxibVZ5S1R0Y2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCMGFHbHpPMXh1ZlR0Y2JseHVSWFpsYm5SRmJXbDBkR1Z5TG5CeWIzUnZkSGx3WlM1eVpXMXZkbVZCYkd4TWFYTjBaVzVsY25NZ1BTQm1kVzVqZEdsdmJpaDBlWEJsS1NCN1hHNGdJSFpoY2lCclpYa3NJR3hwYzNSbGJtVnljenRjYmx4dUlDQnBaaUFvSVhSb2FYTXVYMlYyWlc1MGN5bGNiaUFnSUNCeVpYUjFjbTRnZEdocGN6dGNibHh1SUNBdkx5QnViM1FnYkdsemRHVnVhVzVuSUdadmNpQnlaVzF2ZG1WTWFYTjBaVzVsY2l3Z2JtOGdibVZsWkNCMGJ5QmxiV2wwWEc0Z0lHbG1JQ2doZEdocGN5NWZaWFpsYm5SekxuSmxiVzkyWlV4cGMzUmxibVZ5S1NCN1hHNGdJQ0FnYVdZZ0tHRnlaM1Z0Wlc1MGN5NXNaVzVuZEdnZ1BUMDlJREFwWEc0Z0lDQWdJQ0IwYUdsekxsOWxkbVZ1ZEhNZ1BTQjdmVHRjYmlBZ0lDQmxiSE5sSUdsbUlDaDBhR2x6TGw5bGRtVnVkSE5iZEhsd1pWMHBYRzRnSUNBZ0lDQmtaV3hsZEdVZ2RHaHBjeTVmWlhabGJuUnpXM1I1Y0dWZE8xeHVJQ0FnSUhKbGRIVnliaUIwYUdsek8xeHVJQ0I5WEc1Y2JpQWdMeThnWlcxcGRDQnlaVzF2ZG1WTWFYTjBaVzVsY2lCbWIzSWdZV3hzSUd4cGMzUmxibVZ5Y3lCdmJpQmhiR3dnWlhabGJuUnpYRzRnSUdsbUlDaGhjbWQxYldWdWRITXViR1Z1WjNSb0lEMDlQU0F3S1NCN1hHNGdJQ0FnWm05eUlDaHJaWGtnYVc0Z2RHaHBjeTVmWlhabGJuUnpLU0I3WEc0Z0lDQWdJQ0JwWmlBb2EyVjVJRDA5UFNBbmNtVnRiM1psVEdsemRHVnVaWEluS1NCamIyNTBhVzUxWlR0Y2JpQWdJQ0FnSUhSb2FYTXVjbVZ0YjNabFFXeHNUR2x6ZEdWdVpYSnpLR3RsZVNrN1hHNGdJQ0FnZlZ4dUlDQWdJSFJvYVhNdWNtVnRiM1psUVd4c1RHbHpkR1Z1WlhKektDZHlaVzF2ZG1WTWFYTjBaVzVsY2ljcE8xeHVJQ0FnSUhSb2FYTXVYMlYyWlc1MGN5QTlJSHQ5TzF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TzF4dUlDQjlYRzVjYmlBZ2JHbHpkR1Z1WlhKeklEMGdkR2hwY3k1ZlpYWmxiblJ6VzNSNWNHVmRPMXh1WEc0Z0lHbG1JQ2hwYzBaMWJtTjBhVzl1S0d4cGMzUmxibVZ5Y3lrcElIdGNiaUFnSUNCMGFHbHpMbkpsYlc5MlpVeHBjM1JsYm1WeUtIUjVjR1VzSUd4cGMzUmxibVZ5Y3lrN1hHNGdJSDBnWld4elpTQnBaaUFvYkdsemRHVnVaWEp6S1NCN1hHNGdJQ0FnTHk4Z1RFbEdUeUJ2Y21SbGNseHVJQ0FnSUhkb2FXeGxJQ2hzYVhOMFpXNWxjbk11YkdWdVozUm9LVnh1SUNBZ0lDQWdkR2hwY3k1eVpXMXZkbVZNYVhOMFpXNWxjaWgwZVhCbExDQnNhWE4wWlc1bGNuTmJiR2x6ZEdWdVpYSnpMbXhsYm1kMGFDQXRJREZkS1R0Y2JpQWdmVnh1SUNCa1pXeGxkR1VnZEdocGN5NWZaWFpsYm5SelczUjVjR1ZkTzF4dVhHNGdJSEpsZEhWeWJpQjBhR2x6TzF4dWZUdGNibHh1UlhabGJuUkZiV2wwZEdWeUxuQnliM1J2ZEhsd1pTNXNhWE4wWlc1bGNuTWdQU0JtZFc1amRHbHZiaWgwZVhCbEtTQjdYRzRnSUhaaGNpQnlaWFE3WEc0Z0lHbG1JQ2doZEdocGN5NWZaWFpsYm5SeklIeDhJQ0YwYUdsekxsOWxkbVZ1ZEhOYmRIbHdaVjBwWEc0Z0lDQWdjbVYwSUQwZ1cxMDdYRzRnSUdWc2MyVWdhV1lnS0dselJuVnVZM1JwYjI0b2RHaHBjeTVmWlhabGJuUnpXM1I1Y0dWZEtTbGNiaUFnSUNCeVpYUWdQU0JiZEdocGN5NWZaWFpsYm5SelczUjVjR1ZkWFR0Y2JpQWdaV3h6WlZ4dUlDQWdJSEpsZENBOUlIUm9hWE11WDJWMlpXNTBjMXQwZVhCbFhTNXpiR2xqWlNncE8xeHVJQ0J5WlhSMWNtNGdjbVYwTzF4dWZUdGNibHh1UlhabGJuUkZiV2wwZEdWeUxuQnliM1J2ZEhsd1pTNXNhWE4wWlc1bGNrTnZkVzUwSUQwZ1puVnVZM1JwYjI0b2RIbHdaU2tnZTF4dUlDQnBaaUFvZEdocGN5NWZaWFpsYm5SektTQjdYRzRnSUNBZ2RtRnlJR1YyYkdsemRHVnVaWElnUFNCMGFHbHpMbDlsZG1WdWRITmJkSGx3WlYwN1hHNWNiaUFnSUNCcFppQW9hWE5HZFc1amRHbHZiaWhsZG14cGMzUmxibVZ5S1NsY2JpQWdJQ0FnSUhKbGRIVnliaUF4TzF4dUlDQWdJR1ZzYzJVZ2FXWWdLR1YyYkdsemRHVnVaWElwWEc0Z0lDQWdJQ0J5WlhSMWNtNGdaWFpzYVhOMFpXNWxjaTVzWlc1bmRHZzdYRzRnSUgxY2JpQWdjbVYwZFhKdUlEQTdYRzU5TzF4dVhHNUZkbVZ1ZEVWdGFYUjBaWEl1YkdsemRHVnVaWEpEYjNWdWRDQTlJR1oxYm1OMGFXOXVLR1Z0YVhSMFpYSXNJSFI1Y0dVcElIdGNiaUFnY21WMGRYSnVJR1Z0YVhSMFpYSXViR2x6ZEdWdVpYSkRiM1Z1ZENoMGVYQmxLVHRjYm4wN1hHNWNibVoxYm1OMGFXOXVJR2x6Um5WdVkzUnBiMjRvWVhKbktTQjdYRzRnSUhKbGRIVnliaUIwZVhCbGIyWWdZWEpuSUQwOVBTQW5ablZ1WTNScGIyNG5PMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnBjMDUxYldKbGNpaGhjbWNwSUh0Y2JpQWdjbVYwZFhKdUlIUjVjR1Z2WmlCaGNtY2dQVDA5SUNkdWRXMWlaWEluTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJwYzA5aWFtVmpkQ2hoY21jcElIdGNiaUFnY21WMGRYSnVJSFI1Y0dWdlppQmhjbWNnUFQwOUlDZHZZbXBsWTNRbklDWW1JR0Z5WnlBaFBUMGdiblZzYkR0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnYVhOVmJtUmxabWx1WldRb1lYSm5LU0I3WEc0Z0lISmxkSFZ5YmlCaGNtY2dQVDA5SUhadmFXUWdNRHRjYm4xY2JseHVYRzVjYmk4dkx5OHZMeTh2THk4dkx5OHZMeTh2TDF4dUx5OGdWMFZDVUVGRFN5QkdUMDlVUlZKY2JpOHZJQzR2Zmk5bGRtVnVkSE12WlhabGJuUnpMbXB6WEc0dkx5QnRiMlIxYkdVZ2FXUWdQU0F4TUZ4dUx5OGdiVzlrZFd4bElHTm9kVzVyY3lBOUlEQWlMQ0luZFhObElITjBjbWxqZENjN1hHNWNibXhsZENCdFlYUm9JRDBnY21WeGRXbHlaU2duTGk0dmRYUnBiQzl0WVhSb0p5azdYRzVjYmk4cUtseHVJQ0JEY21WaGRHVnpJR0VnYzNSbGNIQmhZbXhsSUhaaGJIVmxJSGRwZEdnZ2JXbHVhVzExYlN3Z2JXRjRhVzExYlN3Z1lXNWtJSE4wWlhBZ2MybDZaUzRnVkdocGN5QnBjeUIxYzJWa0lHbHVJRzFoYm5rZ2FXNTBaWEptWVdObGN5QjBieUJqYjI1emRISnBZM1FnZEdobGFYSWdkbUZzZFdWeklIUnZJR05sY25SaGFXNGdjbUZ1WjJWekxseHVJQ0JBY0dGeVlXMGdlMjUxYldKbGNuMGdXMjFwYmowd1hTQnRhVzVwYlhWdFhHNGdJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQmJiV0Y0UFRGZElHMWhlR2x0ZFcxY2JpQWdRSEJoY21GdElIdHVkVzFpWlhKOUlGdHpkR1Z3UFRCZFhHNGdJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQmJkbUZzZFdVOU1GMGdhVzVwZEdsaGJDQjJZV3gxWlZ4dUlDQkFjbVYwZFhKdWN5QjdUMkpxWldOMGZTQlRkR1Z3WEc0cUwxeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQmpiR0Z6Y3lCVGRHVndJSHRjYmx4dUlDQmpiMjV6ZEhKMVkzUnZjaWh0YVc0Z1BTQXdMRzFoZUNBOUlERXNjM1JsY0NBOUlEQXNkbUZzZFdVZ1BTQXdLU0I3WEc0Z0lDQWdMeTlQWW1wbFkzUXVZWE56YVdkdUtIUm9hWE1zZTIxcGJpeHRZWGdzYzNSbGNIMHBPMXh1SUNBZ0lDOHZRMkZ1Ym05MElIVnpaU0JQWW1wbFkzUXVZWE56YVdkdUlHSmxZMkYxYzJVZ2JtOTBJSE4xY0hCdmNuUmxaQ0JwYmlCVFlXWmhjbWt1WEc0Z0lDQWdMeTlKSUhkdmRXeGtJR1Y0Y0dWamRDQm1iM0lnUW1GaVpXd2dkRzhnZEdGclpTQmpZWEpsSUc5bUlIUm9hWE1nWW5WMElHbDBJR2x6SUc1dmRDNWNiaUFnSUNCMGFHbHpMbTFwYmlBOUlHMXBianRjYmlBZ0lDQjBhR2x6TG0xaGVDQTlJRzFoZUR0Y2JpQWdJQ0IwYUdsekxuTjBaWEFnUFNCemRHVndPMXh1SUNBZ0lIUm9hWE11ZG1Gc2RXVWdQU0IyWVd4MVpUdGNiaUFnSUNCMGFHbHpMbU5vWVc1blpXUWdQU0JtWVd4elpUdGNiaUFnSUNCMGFHbHpMbTlzWkZaaGJIVmxJRDBnWm1Gc2MyVTdYRzRnSUNBZ2RHaHBjeTUxY0dSaGRHVW9kR2hwY3k1MllXeDFaU2s3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNCVmNHUmhkR1VnZDJsMGFDQmhJRzVsZHlCMllXeDFaUzRnVkdobElIWmhiSFZsSUhkcGJHd2dZbVVnWVhWMGJ5MWhaR3AxYzNSbFpDQjBieUJtYVhRZ2RHaGxJRzFwYmk5dFlYZ3ZjM1JsY0M1Y2JpQWdJQ0JBY0dGeVlXMGdlMjUxYldKbGNuMGdkbUZzZFdWY2JpQWdLaTljYmx4dUlDQjFjR1JoZEdVb2RtRnNkV1VwSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTV6ZEdWd0tTQjdYRzRnSUNBZ0lDQXZMeUIwYUdsekxuWmhiSFZsSUQwZ2JXRjBhQzVqYkdsd0tFMWhkR2d1Y205MWJtUW9kbUZzZFdVZ0x5QW9kR2hwY3k1emRHVndLU2tnS2lCMGFHbHpMbk4wWlhBc0lIUm9hWE11YldsdUxIUm9hWE11YldGNEtUdGNiaUFnSUNBZ0lIUm9hWE11ZG1Gc2RXVWdQU0J0WVhSb0xtTnNhWEFvVFdGMGFDNXliM1Z1WkNnb2RtRnNkV1V0ZEdocGN5NXRhVzRwSUM4Z0tIUm9hWE11YzNSbGNDa3BJQ29nZEdocGN5NXpkR1Z3SUNzZ2RHaHBjeTV0YVc0c0lIUm9hWE11YldsdUxIUm9hWE11YldGNEtUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnZEdocGN5NTJZV3gxWlNBOUlHMWhkR2d1WTJ4cGNDaDJZV3gxWlN4MGFHbHpMbTFwYml4MGFHbHpMbTFoZUNrN1hHNGdJQ0FnZlZ4dUlDQWdJR2xtSUNoMGFHbHpMbTlzWkZaaGJIVmxJQ0U5UFNCMGFHbHpMblpoYkhWbEtTQjdYRzRnSUNBZ0lDQjBhR2x6TG05c1pGWmhiSFZsSUQwZ2RHaHBjeTUyWVd4MVpUdGNiaUFnSUNBZ0lIUm9hWE11WTJoaGJtZGxaQ0E5SUhSeWRXVTdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhSb2FYTXVZMmhoYm1kbFpDQTlJR1poYkhObE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1MllXeDFaVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnSUZWd1pHRjBaU0IzYVhSb0lHRWdibTl5YldGc2FYcGxaQ0IyWVd4MVpTQXdMVEV1WEc0Z0lDQWdRSEJoY21GdElIdHVkVzFpWlhKOUlIWmhiSFZsWEc0Z0lDb3ZYRzRnSUhWd1pHRjBaVTV2Y20xaGJDaDJZV3gxWlNrZ2UxeHVJQ0FnSUhSb2FYTXVkbUZzZFdVZ1BTQnRZWFJvTG5OallXeGxLSFpoYkhWbExEQXNNU3gwYUdsekxtMXBiaXgwYUdsekxtMWhlQ2s3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11ZFhCa1lYUmxLSFJvYVhNdWRtRnNkV1VwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBZ1IyVjBJR0VnYm05eWJXRnNhWHBsWkNCMlpYSnphVzl1SUc5bUlIUm9hWE11ZG1Gc2RXVWdMaUJPYjNRZ2MyVjBkR0ZpYkdVdVhHNGdJQ292WEc0Z0lHZGxkQ0J1YjNKdFlXeHBlbVZrS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUJ0WVhSb0xtNXZjbTFoYkdsNlpTaDBhR2x6TG5aaGJIVmxMSFJvYVhNdWJXbHVMSFJvYVhNdWJXRjRLVHRjYmlBZ2ZWeHVYRzU5WEc1Y2JseHVYRzR2THlCWFJVSlFRVU5MSUVaUFQxUkZVaUF2TDF4dUx5OGdMaTkrTDJwemFHbHVkQzFzYjJGa1pYSWhMaTlzYVdJdmJXOWtaV3h6TDNOMFpYQXVhbk1pTENJbmRYTmxJSE4wY21samRDYzdYRzVjYm1sdGNHOXlkQ0J0WVhSb0lHWnliMjBnSnk0dUwzVjBhV3d2YldGMGFDYzdYRzVwYlhCdmNuUWdWRzluWjJ4bFRXOWtaV3dnWm5KdmJTQW5MaTR2Ylc5a1pXeHpMM1J2WjJkc1pTYzdYRzVjYmx4dUx5cGNibWh2ZHlCMGJ5QjFjMlVnT2x4dVhHNWthV0ZzTG1sdWRHVnlZV04wYVc5dUlEMGdibVYzSUVoaGJtUnNaU2duY21Ga2FXRnNKeXduY21Wc1lYUnBkbVVuTEhSb2FYTXVkMmxrZEdnc2RHaHBjeTVvWldsbmFIUXBPMXh1THk4Z1pHbGhiQzVwYm5SbGNtRmpkR2x2Ymk1dGIyUmxJRDBnSjNKbGJHRjBhWFpsSjF4dUx5OGdaR2xoYkM1cGJuUmxjbUZqZEdsdmJpNWthWEpsWTNScGIyNGdQU0FuY21Ga2FXRnNKMXh1WEc1dmJpQmpiR2xqYXpwY2JtUnBZV3d1YVc1MFpYSmhZM1JwYjI0dVlXNWphRzl5SUQwZ2RHaHBjeTV0YjNWelpUdGNibHh1YjI0Z2JXOTJaVHBjYm1ScFlXd3VhVzUwWlhKaFkzUnBiMjR1ZFhCa1lYUmxLSFJvYVhNdWJXOTFjMlVwTzF4dVhHNWpiMjV6YjJ4bExteHZaeWdnWkdsaGJDNXBiblJsY21GamRHbHZiaTUyWVd4MVpTQXBPeUJ6YUc5MWJHUWdZbVVnWVNCdWIzSnRZV3hwZW1Wa0lIWmhiSFZsTGx4dVhHNHFMMXh1WEc0dktseHVJQ0JoWW5OdmJIVjBaUzl5Wld4aGRHbDJaU0JoY21VZ2NISnZjR1Z5ZEhrNklHMXZaR1ZjYmlBZ2NtRmthV0ZzTDNabGNuUnBZMkZzTDJodmNtbDZiMjUwWVd3dk1tUWdZWEpsSUhCeWIzQmxjblI1T2lCa2FYSmxZM1JwYjI1Y2JseHVJQ0J3YkdGdUlEcGNibHh1SUNCcFppQnlaV3hoZEdsMlpTQXRMVnh1SUNCT1R5QnZiaUJqYkdsamF5d2daMlYwSUhaaGJIVmxJRzltWm5ObGRDQmlaWFIzWldWdUlHTjFjbkpsYm5RZ2RtRnNkV1VnWVc1a0lHTnNhV05ySUhaaGJIVmxMbHh1SUNCT1R5QnZiaUJ0YjNabExDQjFjMlVnWTJ4cFkyc2dkbUZzZFdVZ0xTQnZabVp6WlhSY2JpQWdTVTVUVkVWQlJGeHVJQ0IxYzJVZ1pHVnNkR0VnTFMwZ1ltTWdkbVZ5ZEdsallXd2diVzkwYVc5dUlHOXVJR1JwWVd3Z2FYTWdhVzF3YjNOemFXSnNaU0J2ZEdobGNuZHBjMlZjYmlBZ1lXeHpieUJoYkd4dmR5QjBieUJ6WlhRZ2MyVnVjMmwwYVhacGRIbGNibHh1S2k5Y2JseHVaWGh3YjNKMElHTnNZWE56SUVoaGJtUnNaU0I3WEc1Y2JpQWdZMjl1YzNSeWRXTjBiM0lvYlc5a1pUMG5ZV0p6YjJ4MWRHVW5MR1JwY21WamRHbHZiajBuZG1WeWRHbGpZV3duTEhoaWIzVnVaRDFiTUN3eE1EQmRMSGxpYjNWdVpEMWJNQ3d4TURCZEtTQjdYRzRnSUNBZ2RHaHBjeTV0YjJSbElEMGdiVzlrWlR0Y2JpQWdJQ0IwYUdsekxtUnBjbVZqZEdsdmJpQTlJR1JwY21WamRHbHZianRjYmlBZ0lDQjBhR2x6TG5CeVpYWnBiM1Z6SUQwZ01EdGNiaUFnSUNCMGFHbHpMblpoYkhWbElEMGdNRHRjYmlBZ0lDQjBhR2x6TG5ObGJuTnBkR2wyYVhSNUlEMGdNVHRjYmlBZ0lDQjBhR2x6TG5KbGMybDZaU2g0WW05MWJtUXNlV0p2ZFc1a0tUdGNiaUFnZlZ4dVhHNGdJSEpsYzJsNlpTaDRZbTkxYm1Rc2VXSnZkVzVrS1NCN1hHNGdJQ0FnZEdocGN5NWliM1Z1WkdGeWVTQTlJSHRjYmlBZ0lDQWdJRzFwYmpvZ2UxeHVJQ0FnSUNBZ0lDQjRPaUI0WW05MWJtUmJNRjBzWEc0Z0lDQWdJQ0FnSUhrNklIbGliM1Z1WkZzd1hWeHVJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lHMWhlRG9nZTF4dUlDQWdJQ0FnSUNCNE9pQjRZbTkxYm1SYk1WMHNYRzRnSUNBZ0lDQWdJSGs2SUhsaWIzVnVaRnN4WFZ4dUlDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUdObGJuUmxjam9nZTF4dUlDQWdJQ0FnSUNCNE9pQW9lR0p2ZFc1a1d6RmRJQzBnZUdKdmRXNWtXekJkS1M4eUlDc2dlR0p2ZFc1a1d6QmRMRnh1SUNBZ0lDQWdJQ0I1T2lBb2VXSnZkVzVrV3pGZElDMGdlV0p2ZFc1a1d6QmRLUzh5SUNzZ2VXSnZkVzVrV3pCZFhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlR0Y2JpQWdmVnh1WEc0Z0lITmxkQ0JoYm1Ob2IzSW9iVzkxYzJVcElIdGNiaUFnSUNCMGFHbHpMbDloYm1Ob2IzSWdQU0IwYUdsekxtTnZiblpsY25SUWIzTnBkR2x2YmxSdlZtRnNkV1VvYlc5MWMyVXBPMXh1SUNCOVhHNWNiaUFnWjJWMElHRnVZMmh2Y2lncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWZZVzVqYUc5eU8xeHVJQ0I5WEc1Y2JseHVJQ0IxY0dSaGRHVW9iVzkxYzJVcElIdGNiaUFnSUNCcFppQW9kR2hwY3k1dGIyUmxQVDA5SjNKbGJHRjBhWFpsSnlrZ2UxeHVJQ0FnSUNBZ2JHVjBJR2x1WTNKbGJXVnVkQ0E5SUhSb2FYTXVZMjl1ZG1WeWRGQnZjMmwwYVc5dVZHOVdZV3gxWlNodGIzVnpaU2tnTFNCMGFHbHpMbUZ1WTJodmNqdGNiaUFnSUNBZ0lHbG1JQ2hOWVhSb0xtRmljeWhwYm1OeVpXMWxiblFwSUQ0Z01DNDFLU0I3SUdsdVkzSmxiV1Z1ZENBOUlEQTdJSDFjYmlBZ0lDQWdJSFJvYVhNdVlXNWphRzl5SUQwZ2JXOTFjMlU3WEc0Z0lDQWdJQ0IwYUdsekxuWmhiSFZsSUQwZ2RHaHBjeTUyWVd4MVpTQXJJR2x1WTNKbGJXVnVkQ0FxSUhSb2FYTXVjMlZ1YzJsMGFYWnBkSGs3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lIUm9hWE11ZG1Gc2RXVWdQU0IwYUdsekxtTnZiblpsY25SUWIzTnBkR2x2YmxSdlZtRnNkV1VvYlc5MWMyVXBPMXh1SUNBZ0lIMWNiaUFnSUNCMGFHbHpMblpoYkhWbElEMGdiV0YwYUM1amJHbHdLSFJvYVhNdWRtRnNkV1VzTUN3eEtUdGNiaUFnZlZ4dVhHNGdJR052Ym5abGNuUlFiM05wZEdsdmJsUnZWbUZzZFdVb1kzVnljbVZ1ZENrZ2UxeHVJQ0FnSUhOM2FYUmphQ2gwYUdsekxtUnBjbVZqZEdsdmJpa2dlMXh1SUNBZ0lDQWdZMkZ6WlNBbmNtRmthV0ZzSnpwY2JpQWdJQ0FnSUNBZ2JHVjBJSEJ2YzJsMGFXOXVJRDBnYldGMGFDNTBiMUJ2YkdGeUtHTjFjbkpsYm5RdWVDQXRJSFJvYVhNdVltOTFibVJoY25rdVkyVnVkR1Z5TG5nc0lHTjFjbkpsYm5RdWVTQXRJSFJvYVhNdVltOTFibVJoY25rdVkyVnVkR1Z5TG5rcE8xeHVJQ0FnSUNBZ0lDQndiM05wZEdsdmJpQTlJSEJ2YzJsMGFXOXVMbUZ1WjJ4bElDOGdLRTFoZEdndVVFa3FNaWs3WEc0Z0lDQWdJQ0FnSUhCdmMybDBhVzl1SUQwZ0tDaHdiM05wZEdsdmJpQXRJREF1TWpVcElDc2dNU2tnSlNBeE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2NHOXphWFJwYjI0N1hHNGdJQ0FnSUNCallYTmxJQ2QyWlhKMGFXTmhiQ2M2WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ0WVhSb0xuTmpZV3hsS0dOMWNuSmxiblF1ZVN4MGFHbHpMbUp2ZFc1a1lYSjVMbTFwYmk1NUxIUm9hWE11WW05MWJtUmhjbmt1YldGNExua3NNQ3d4S1R0Y2JpQWdJQ0FnSUdOaGMyVWdKMmh2Y21sNmIyNTBZV3duT2x4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYldGMGFDNXpZMkZzWlNoamRYSnlaVzUwTG5nc2RHaHBjeTVpYjNWdVpHRnllUzV0YVc0dWVDeDBhR2x6TG1KdmRXNWtZWEo1TG0xaGVDNTRMREFzTVNrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYm4xY2JseHVYRzVsZUhCdmNuUWdZMnhoYzNNZ1FuVjBkRzl1SUh0Y2JseHVJQ0JqYjI1emRISjFZM1J2Y2lodGIyUmxQU2RpZFhSMGIyNG5LU0I3WEc0Z0lDQWdkR2hwY3k1dGIyUmxJRDBnYlc5a1pUdGNiaUFnSUNCMGFHbHpMbk4wWVhSbElEMGdibVYzSUZSdloyZHNaVTF2WkdWc0tDazdYRzRnSUNBZ2RHaHBjeTV3WVdsdWRHSnlkWE5vSUQwZ1ptRnNjMlU3WEc0Z0lIMWNibHh1SUNCamJHbGpheWdwSUh0Y2JpQWdJQ0J6ZDJsMFkyZ2dLSFJvYVhNdWJXOWtaU2tnZTF4dUlDQWdJQ0FnWTJGelpTQW5hVzF3ZFd4elpTYzZYRzRnSUNBZ0lDQWdJSFJvYVhNdWMzUmhkR1V1YjI0b0tUdGNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVkR2x0Wlc5MWRDa2dlMXh1SUNBZ0lDQWdJQ0FnSUdOc1pXRnlWR2x0Wlc5MWRDaDBhR2x6TG5ScGJXVnZkWFFwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIUm9hWE11ZEdsdFpXOTFkQ0E5SUhObGRGUnBiV1Z2ZFhRb2RHaHBjeTV6ZEdGMFpTNXZabVl1WW1sdVpDaDBhR2x6S1N3ek1DazdYRzRnSUNBZ0lDQWdJSFJvYVhNdVpXMXBkQ2duWTJoaGJtZGxKeXgwYUdsekxuTjBZWFJsS1R0Y2JpQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0JqWVhObElDZGlkWFIwYjI0bk9seHVJQ0FnSUNBZ0lDQjBhR2x6TG5SMWNtNVBiaWdwTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbVZ0YVhRb0oyTm9ZVzVuWlNjc2RHaHBjeTV6ZEdGMFpTazdYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ1kyRnpaU0FuWVdaMFpYSjBiM1ZqYUNjNlhHNGdJQ0FnSUNBZ0lIUm9hWE11Y0c5emFYUnBiMjRnUFNCN1hHNGdJQ0FnSUNBZ0lDQWdlRG9nYldGMGFDNWpiR2x3S0hSb2FYTXViVzkxYzJVdWVDQXZJSFJvYVhNdWQybGtkR2dzTUN3eEtTeGNiaUFnSUNBZ0lDQWdJQ0I1T2lCdFlYUm9MbU5zYVhBb01TQXRJSFJvYVhNdWJXOTFjMlV1ZVNBdklIUm9hWE11YUdWcFoyaDBMREFzTVNsY2JpQWdJQ0FnSUNBZ2ZUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1MGRYSnVUMjRvS1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVsYldsMEtDZGphR0Z1WjJVbkxIdGNiaUFnSUNBZ0lDQWdJQ0J6ZEdGMFpUb2dkR2hwY3k1emRHRjBaU3hjYmlBZ0lDQWdJQ0FnSUNCNE9pQjBhR2x6TG5CdmMybDBhVzl1TG5nc1hHNGdJQ0FnSUNBZ0lDQWdlVG9nZEdocGN5NXdiM05wZEdsdmJpNTVMRnh1SUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0JqWVhObElDZDBiMmRuYkdVbk9seHVJQ0FnSUNBZ0lDQjBhR2x6TG1ac2FYQW9LVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NWxiV2wwS0NkamFHRnVaMlVuTEhSb2FYTXVjM1JoZEdVcE8xeHVJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc1Y2JpQWdmVnh1WEc0Z0lHMXZkbVVvS1NCN1hHNGdJQ0FnYVdZZ0tIUm9hWE11Ylc5a1pUMDlQU2RoWm5SbGNuUnZkV05vSnlrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiaUE5SUh0Y2JpQWdJQ0FnSUNBZ2VEb2diV0YwYUM1amJHbHdLSFJvYVhNdWJXOTFjMlV1ZUNBdklIUm9hWE11ZDJsa2RHZ3NNQ3d4S1N4Y2JpQWdJQ0FnSUNBZ2VUb2diV0YwYUM1amJHbHdLREVnTFNCMGFHbHpMbTF2ZFhObExua2dMeUIwYUdsekxtaGxhV2RvZEN3d0xERXBYRzRnSUNBZ0lDQjlPMXh1SUNBZ0lDQWdkR2hwY3k1bGJXbDBLQ2RqYUdGdVoyVW5MSHRjYmlBZ0lDQWdJQ0FnYzNSaGRHVTZJSFJvYVhNdWMzUmhkR1VzWEc0Z0lDQWdJQ0FnSUhnNklIUm9hWE11Y0c5emFYUnBiMjR1ZUN4Y2JpQWdJQ0FnSUNBZ2VUb2dkR2hwY3k1d2IzTnBkR2x2Ymk1NUxGeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQjBhR2x6TG5KbGJtUmxjaWdwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhKbGJHVmhjMlVvS1NCN1hHNGdJQ0FnYzNkcGRHTm9JQ2gwYUdsekxtMXZaR1VwSUh0Y2JpQWdJQ0FnSUdOaGMyVWdKMkoxZEhSdmJpYzZYRzRnSUNBZ0lDQWdJSFJvYVhNdWRIVnliazltWmlncE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG1WdGFYUW9KMk5vWVc1blpTY3NkR2hwY3k1emRHRjBaU2s3WEc0Z0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdZMkZ6WlNBbllXWjBaWEowYjNWamFDYzZYRzRnSUNBZ0lDQWdJSFJvYVhNdWRIVnliazltWmlncE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5CdmMybDBhVzl1SUQwZ2UxeHVJQ0FnSUNBZ0lDQWdJSGc2SUhSb2FYTXViVzkxYzJVdWVDQXZJSFJvYVhNdWQybGtkR2dzWEc0Z0lDQWdJQ0FnSUNBZ2VUb2dNU0F0SUhSb2FYTXViVzkxYzJVdWVTQXZJSFJvYVhNdWFHVnBaMmgwWEc0Z0lDQWdJQ0FnSUgwN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WlcxcGRDZ25ZMmhoYm1kbEp5eDdYRzRnSUNBZ0lDQWdJQ0FnYzNSaGRHVTZJSFJvYVhNdWMzUmhkR1VzWEc0Z0lDQWdJQ0FnSUNBZ2VEb2dkR2hwY3k1d2IzTnBkR2x2Ymk1NExGeHVJQ0FnSUNBZ0lDQWdJSGs2SUhSb2FYTXVjRzl6YVhScGIyNHVlU3hjYmlBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmlBZ2ZWeHVmVnh1WEc1Y2JseHVMeThnVjBWQ1VFRkRTeUJHVDA5VVJWSWdMeTljYmk4dklDNHZmaTlxYzJocGJuUXRiRzloWkdWeUlTNHZiR2xpTDNWMGFXd3ZhVzUwWlhKaFkzUnBiMjR1YW5NaUxDSW5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdOc1lYTnpJRlJ2WjJkc1pTQjdYRzVjYmlBZ1kyOXVjM1J5ZFdOMGIzSW9jM1JoZEdVcElIdGNiaUFnSUNCMGFHbHpMbk4wWVhSbElEMGdjM1JoZEdVZ2ZId2dabUZzYzJVN1hHNGdJSDFjYmx4dUlDQm1iR2x3S0hOMFlYUmxLU0I3WEc0Z0lDQWdhV1lnS0hOMFlYUmxJSHg4SUhOMFlYUmxJRDA5UFNCbVlXeHpaU2tnZTF4dUlDQWdJQ0FnZEdocGN5NXpkR0YwWlNBOUlITjBZWFJsTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQjBhR2x6TG5OMFlYUmxJRDBnSVhSb2FYTXVjM1JoZEdVN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2IyNG9LU0I3WEc0Z0lDQWdkR2hwY3k1emRHRjBaU0E5SUhSeWRXVTdYRzRnSUgxY2JseHVJQ0J2Wm1Zb0tTQjdYRzRnSUNBZ2RHaHBjeTV6ZEdGMFpTQTlJR1poYkhObE8xeHVJQ0I5WEc1Y2JuMWNibHh1WEc1Y2JpOHZJRmRGUWxCQlEwc2dSazlQVkVWU0lDOHZYRzR2THlBdUwzNHZhbk5vYVc1MExXeHZZV1JsY2lFdUwyeHBZaTl0YjJSbGJITXZkRzluWjJ4bExtcHpJaXdpSjNWelpTQnpkSEpwWTNRbk8xeHVYRzVzWlhRZ2MzWm5JRDBnY21WeGRXbHlaU2duTGk0dmRYUnBiQzl6ZG1jbktUdGNibXhsZENCSmJuUmxjbVpoWTJVZ1BTQnlaWEYxYVhKbEtDY3VMaTlqYjNKbEwybHVkR1Z5Wm1GalpTY3BPMXh1YkdWMElGTjBaWEFnUFNCeVpYRjFhWEpsS0NjdUxpOXRiMlJsYkhNdmMzUmxjQ2NwTzF4dWFXMXdiM0owSUNvZ1lYTWdTVzUwWlhKaFkzUnBiMjRnWm5KdmJTQW5MaTR2ZFhScGJDOXBiblJsY21GamRHbHZiaWM3WEc1Y2JpOHFLbHh1S2lCVGJHbGtaWEpjYmlwY2Jpb2dRR1JsYzJOeWFYQjBhVzl1SUVodmNtbDZiMjUwWVd3Z2IzSWdkbVZ5ZEdsallXd2djMnhwWkdWeUlIZHBkR2dnYzJWMGRHRmliR1VnYVc1MFpYSmhZM1JwYjI0Z2JXOWtaWE11WEc0cVhHNHFJRUJrWlcxdklEeHpjR0Z1SUc1bGVIVnpMWFZwUFZ3aWMyeHBaR1Z5WENJZ2MzUmxjRDB3TGpJK1BDOXpjR0Z1UGx4dUtseHVLaUJBWlhoaGJYQnNaVnh1S2lCMllYSWdjMnhwWkdWeUlEMGdibVYzSUU1bGVIVnpMbE5zYVdSbGNpZ25JM1JoY21kbGRDY3BYRzRxWEc0cUlFQmxlR0Z0Y0d4bFhHNHFJSFpoY2lCemJHbGtaWElnUFNCdVpYY2dUbVY0ZFhNdVUyeHBaR1Z5S0NjamRHRnlaMlYwSnl4N1hHNHFJQ0FnSUNBbmMybDZaU2M2SUZzeE1qQXNNakJkTEZ4dUtpQWdJQ0FnSjIxdlpHVW5PaUFuY21Wc1lYUnBkbVVuTENBZ0x5OGdKM0psYkdGMGFYWmxKeUJ2Y2lBbllXSnpiMngxZEdVblhHNHFJQ0FnSUNBbmJXbHVKem9nTUN4Y2Jpb2dJQ0FnSUNkdFlYZ25PaUF4TEZ4dUtpQWdJQ0FnSjNOMFpYQW5PaUF3TEZ4dUtpQWdJQ0FnSjNaaGJIVmxKem9nTUZ4dUtpQjlLVnh1S2x4dUtpQkFiM1YwY0hWMFhHNHFJR05vWVc1blpWeHVLaUJHYVhKbGN5QjNhR1Z1SUhSb1pTQnBiblJsY21aaFkyVW5jeUIyWVd4MVpTQmphR0Z1WjJWekxpQThZbkkrWEc0cUlFVjJaVzUwSUdSaGRHRTZJRHhwUG01MWJXSmxjand2YVQ0Z1ZHaGxJRzUxYldKbGNpQjJZV3gxWlNCdlppQjBhR1VnYVc1MFpYSm1ZV05sTGx4dUtseHVLaUJBYjNWMGNIVjBaWGhoYlhCc1pWeHVLaUJ6Ykdsa1pYSXViMjRvSjJOb1lXNW5aU2NzWm5WdVkzUnBiMjRvZGlrZ2UxeHVLaUFnSUdOdmJuTnZiR1V1Ykc5bktIWXBPMXh1S2lCOUtWeHVLbHh1S2x4dUtpOWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdZMnhoYzNNZ1UyeHBaR1Z5SUdWNGRHVnVaSE1nU1c1MFpYSm1ZV05sSUh0Y2JseHVJQ0JqYjI1emRISjFZM1J2Y2lncElIdGNibHh1SUNBZ0lHeGxkQ0J2Y0hScGIyNXpJRDBnV3lkdGFXNG5MQ2R0WVhnbkxDZDJZV3gxWlNkZE8xeHVYRzRnSUNBZ2JHVjBJR1JsWm1GMWJIUnpJRDBnZTF4dUlDQWdJQ0FnSjNOcGVtVW5PaUJiTVRJd0xESXdYU3hjYmlBZ0lDQWdJQ2R0YjJSbEp6b2dKM0psYkdGMGFYWmxKeXdnSUM4dklDZHlaV3hoZEdsMlpTY2diM0lnSjJGaWMyOXNkWFJsSjF4dUlDQWdJQ0FnSjIxcGJpYzZJREFzWEc0Z0lDQWdJQ0FuYldGNEp6b2dNU3hjYmlBZ0lDQWdJQ2R6ZEdWd0p6b2dNQ3hjYmlBZ0lDQWdJQ2QyWVd4MVpTYzZJREJjYmlBZ0lDQjlPMXh1WEc0Z0lDQWdjM1Z3WlhJb1lYSm5kVzFsYm5SekxHOXdkR2x2Ym5Nc1pHVm1ZWFZzZEhNcE8xeHVYRzRnSUNBZ2RHaHBjeTV2Y21sbGJuUmhkR2x2YmlBOUlDZDJaWEowYVdOaGJDYzdJQzh2SUZSb2FYTWdkMmxzYkNCamFHRnVaMlVnWVhWMGIyMWhkR2xqWVd4c2VTQjBieUFuYUc5eWFYcHZiblJoYkNkcFppQjBhR1VnYVc1MFpYSm1ZV05sSUdseklIZHBaR1Z5SUhSb1lXNGdhWFFnYVhNZ2RHRnNiQzVjYmx4dUlDQWdJSFJvYVhNdVgzWmhiSFZsSUQwZ2JtVjNJRk4wWlhBb2RHaHBjeTV6WlhSMGFXNW5jeTV0YVc0c0lIUm9hWE11YzJWMGRHbHVaM011YldGNExDQjBhR2x6TG5ObGRIUnBibWR6TG5OMFpYQXNJSFJvYVhNdWMyVjBkR2x1WjNNdWRtRnNkV1VwTzF4dVhHNGdJQ0FnZEdocGN5NXdiM05wZEdsdmJpQTlJRzVsZHlCSmJuUmxjbUZqZEdsdmJpNUlZVzVrYkdVb2RHaHBjeTV6WlhSMGFXNW5jeTV0YjJSbExIUm9hWE11YjNKcFpXNTBZWFJwYjI0c1d6QXNkR2hwY3k1M2FXUjBhRjBzVzNSb2FYTXVhR1ZwWjJoMExEQmRLVHRjYmlBZ0lDQjBhR2x6TG5CdmMybDBhVzl1TG5aaGJIVmxJRDBnZEdocGN5NWZkbUZzZFdVdWJtOXliV0ZzYVhwbFpEdGNibHh1SUNBZ0lIUm9hWE11YVc1cGRDZ3BPMXh1WEc0Z0lDQWdkR2hwY3k1d2IzTnBkR2x2Ymk1a2FYSmxZM1JwYjI0Z1BTQjBhR2x6TG05eWFXVnVkR0YwYVc5dU8xeHVYRzRnSUNBZ2RHaHBjeTVsYldsMEtDZGphR0Z1WjJVbkxIUm9hWE11ZG1Gc2RXVXBPMXh1WEc0Z0lIMWNibHh1SUNCaWRXbHNaRWx1ZEdWeVptRmpaU2dwSUh0Y2JseHVJQ0FnSUhSb2FYTXVZbUZ5SUQwZ2MzWm5MbU55WldGMFpTZ25jbVZqZENjcE8xeHVJQ0FnSUhSb2FYTXVabWxzYkdKaGNpQTlJSE4yWnk1amNtVmhkR1VvSjNKbFkzUW5LVHRjYmlBZ0lDQjBhR2x6TG10dWIySWdQU0J6ZG1jdVkzSmxZWFJsS0NkamFYSmpiR1VuS1R0Y2JseHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNWhjSEJsYm1SRGFHbHNaQ2gwYUdsekxtSmhjaWs3WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG1Gd2NHVnVaRU5vYVd4a0tIUm9hWE11Wm1sc2JHSmhjaWs3WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG1Gd2NHVnVaRU5vYVd4a0tIUm9hWE11YTI1dllpazdYRzVjYmlBZ2ZWeHVYRzRnSUhOcGVtVkpiblJsY21aaFkyVW9LU0I3WEc1Y2JpQWdJQ0JwWmlBb2RHaHBjeTUzYVdSMGFDQThJSFJvYVhNdWFHVnBaMmgwS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbTl5YVdWdWRHRjBhVzl1SUQwZ0ozWmxjblJwWTJGc0p6dGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnZEdocGN5NXZjbWxsYm5SaGRHbHZiaUE5SUNkb2IzSnBlbTl1ZEdGc0p6dGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9kR2hwY3k1d2IzTnBkR2x2YmlrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiaTV5WlhOcGVtVW9XekFzZEdocGN5NTNhV1IwYUYwc1czUm9hWE11YUdWcFoyaDBMREJkS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JzWlhRZ2VDd2dlU3dnZHl3Z2FDd2dZbUZ5VDJabWMyVjBMQ0JqYjNKdVpYSlNZV1JwZFhNN1hHNGdJQ0FnZEdocGN5NXJibTlpUkdGMFlTQTlJSHRjYmlBZ0lDQWdJR3hsZG1Wc09pQXdMRnh1SUNBZ0lDQWdjam9nTUZ4dUlDQWdJSDA3WEc1Y2JpQWdJQ0JwWmlBb2RHaHBjeTV2Y21sbGJuUmhkR2x2YmlBOVBUMGdKM1psY25ScFkyRnNKeWtnZTF4dUlDQWdJQ0FnZEdocGN5NTBhR2xqYTI1bGMzTWdQU0IwYUdsekxuZHBaSFJvSUM4Z01qdGNiaUFnSUNCY2RIZ2dQU0IwYUdsekxuZHBaSFJvTHpJN1hHNGdJQ0FnWEhSNUlEMGdNRHRjYmlBZ0lDQmNkSGNnUFNCMGFHbHpMblJvYVdOcmJtVnpjenRjYmlBZ0lDQmNkR2dnUFNCMGFHbHpMbWhsYVdkb2REdGNiaUFnSUNBZ0lIUm9hWE11YTI1dllrUmhkR0V1Y2lBOUlIUm9hWE11ZEdocFkydHVaWE56SUNvZ01DNDRPMXh1SUNBZ0lGeDBkR2hwY3k1cmJtOWlSR0YwWVM1c1pYWmxiQ0E5SUdndGRHaHBjeTVyYm05aVJHRjBZUzV5TFhSb2FYTXVibTl5YldGc2FYcGxaQ29vYUMxMGFHbHpMbXR1YjJKRVlYUmhMbklxTWlrN1hHNGdJQ0FnSUNCaVlYSlBabVp6WlhRZ1BTQW5kSEpoYm5Oc1lYUmxLQ2NyZEdocGN5NTBhR2xqYTI1bGMzTXFLQzB4S1M4eUt5Y3NNQ2tuTzF4dUlDQWdJQ0FnWTI5eWJtVnlVbUZrYVhWeklEMGdkeTh5TzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQjBhR2x6TG5Sb2FXTnJibVZ6Y3lBOUlIUm9hWE11YUdWcFoyaDBJQzhnTWp0Y2JpQWdJQ0JjZEhnZ1BTQXdPMXh1SUNBZ0lGeDBlU0E5SUhSb2FYTXVhR1ZwWjJoMEx6STdYRzRnSUNBZ1hIUjNJRDBnZEdocGN5NTNhV1IwYUR0Y2JpQWdJQ0JjZEdnZ1BTQjBhR2x6TG5Sb2FXTnJibVZ6Y3p0Y2JpQWdJQ0FnSUhSb2FYTXVhMjV2WWtSaGRHRXVjaUE5SUhSb2FYTXVkR2hwWTJ0dVpYTnpJQ29nTUM0NE8xeHVJQ0FnSUZ4MGRHaHBjeTVyYm05aVJHRjBZUzVzWlhabGJDQTlJSFJvYVhNdWJtOXliV0ZzYVhwbFpDb29keTEwYUdsekxtdHViMkpFWVhSaExuSXFNaWtyZEdocGN5NXJibTlpUkdGMFlTNXlPMXh1SUNBZ0lDQWdZbUZ5VDJabWMyVjBJRDBnSjNSeVlXNXpiR0YwWlNnd0xDY3JkR2hwY3k1MGFHbGphMjVsYzNNcUtDMHhLUzh5S3ljcEp6dGNiaUFnSUNBZ0lHTnZjbTVsY2xKaFpHbDFjeUE5SUdndk1qdGNiaUFnSUNCOVhHNWNiaUFnSUNCMGFHbHpMbUpoY2k1elpYUkJkSFJ5YVdKMWRHVW9KM2duTEhncE8xeHVJQ0FnSUhSb2FYTXVZbUZ5TG5ObGRFRjBkSEpwWW5WMFpTZ25lU2NzZVNrN1hHNGdJQ0FnZEdocGN5NWlZWEl1YzJWMFFYUjBjbWxpZFhSbEtDZDBjbUZ1YzJadmNtMG5MR0poY2s5bVpuTmxkQ2s3WEc0Z0lDQWdkR2hwY3k1aVlYSXVjMlYwUVhSMGNtbGlkWFJsS0NkeWVDY3NZMjl5Ym1WeVVtRmthWFZ6S1RzZ0x5OGdZMjl5Ym1WeUlISmhaR2wxYzF4dUlDQWdJSFJvYVhNdVltRnlMbk5sZEVGMGRISnBZblYwWlNnbmNua25MR052Y201bGNsSmhaR2wxY3lrN1hHNGdJQ0FnZEdocGN5NWlZWEl1YzJWMFFYUjBjbWxpZFhSbEtDZDNhV1IwYUNjc2R5azdYRzRnSUNBZ2RHaHBjeTVpWVhJdWMyVjBRWFIwY21saWRYUmxLQ2RvWldsbmFIUW5MR2dwTzF4dVhHNGdJQ0FnYVdZZ0tIUm9hWE11YjNKcFpXNTBZWFJwYjI0Z1BUMDlJQ2QyWlhKMGFXTmhiQ2NwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVabWxzYkdKaGNpNXpaWFJCZEhSeWFXSjFkR1VvSjNnbkxIZ3BPMXh1SUNBZ0lDQWdkR2hwY3k1bWFXeHNZbUZ5TG5ObGRFRjBkSEpwWW5WMFpTZ25lU2NzZEdocGN5NXJibTlpUkdGMFlTNXNaWFpsYkNrN1hHNGdJQ0FnSUNCMGFHbHpMbVpwYkd4aVlYSXVjMlYwUVhSMGNtbGlkWFJsS0NkM2FXUjBhQ2NzZHlrN1hHNGdJQ0FnSUNCMGFHbHpMbVpwYkd4aVlYSXVjMlYwUVhSMGNtbGlkWFJsS0Nkb1pXbG5hSFFuTEdndGRHaHBjeTVyYm05aVJHRjBZUzVzWlhabGJDazdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhSb2FYTXVabWxzYkdKaGNpNXpaWFJCZEhSeWFXSjFkR1VvSjNnbkxEQXBPMXh1SUNBZ0lDQWdkR2hwY3k1bWFXeHNZbUZ5TG5ObGRFRjBkSEpwWW5WMFpTZ25lU2NzZVNrN1hHNGdJQ0FnSUNCMGFHbHpMbVpwYkd4aVlYSXVjMlYwUVhSMGNtbGlkWFJsS0NkM2FXUjBhQ2NzZEdocGN5NXJibTlpUkdGMFlTNXNaWFpsYkNrN1hHNGdJQ0FnSUNCMGFHbHpMbVpwYkd4aVlYSXVjMlYwUVhSMGNtbGlkWFJsS0Nkb1pXbG5hSFFuTEdncE8xeHVJQ0FnSUgxY2JpQWdJQ0IwYUdsekxtWnBiR3hpWVhJdWMyVjBRWFIwY21saWRYUmxLQ2QwY21GdWMyWnZjbTBuTEdKaGNrOW1abk5sZENrN1hHNGdJQ0FnZEdocGN5NW1hV3hzWW1GeUxuTmxkRUYwZEhKcFluVjBaU2duY25nbkxHTnZjbTVsY2xKaFpHbDFjeWs3WEc0Z0lDQWdkR2hwY3k1bWFXeHNZbUZ5TG5ObGRFRjBkSEpwWW5WMFpTZ25jbmtuTEdOdmNtNWxjbEpoWkdsMWN5azdYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NXZjbWxsYm5SaGRHbHZiaUE5UFQwZ0ozWmxjblJwWTJGc0p5a2dlMXh1SUNBZ0lDQWdkR2hwY3k1cmJtOWlMbk5sZEVGMGRISnBZblYwWlNnblkzZ25MSGdwTzF4dUlDQWdJQ0FnZEdocGN5NXJibTlpTG5ObGRFRjBkSEpwWW5WMFpTZ25ZM2tuTEhSb2FYTXVhMjV2WWtSaGRHRXViR1YyWld3cE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0IwYUdsekxtdHViMkl1YzJWMFFYUjBjbWxpZFhSbEtDZGplQ2NzZEdocGN5NXJibTlpUkdGMFlTNXNaWFpsYkNrN1hHNGdJQ0FnSUNCMGFHbHpMbXR1YjJJdWMyVjBRWFIwY21saWRYUmxLQ2RqZVNjc2VTazdYRzRnSUNBZ2ZWeHVJQ0FnSUhSb2FYTXVhMjV2WWk1elpYUkJkSFJ5YVdKMWRHVW9KM0luTEhSb2FYTXVhMjV2WWtSaGRHRXVjaWs3WEc1Y2JpQWdmVnh1WEc0Z0lHTnZiRzl5U1c1MFpYSm1ZV05sS0NrZ2UxeHVJQ0FnSUhSb2FYTXVZbUZ5TG5ObGRFRjBkSEpwWW5WMFpTZ25abWxzYkNjc0lIUm9hWE11WTI5c2IzSnpMbVpwYkd3cE8xeHVJQ0FnSUhSb2FYTXVabWxzYkdKaGNpNXpaWFJCZEhSeWFXSjFkR1VvSjJacGJHd25MQ0IwYUdsekxtTnZiRzl5Y3k1aFkyTmxiblFwTzF4dUlDQWdJSFJvYVhNdWEyNXZZaTV6WlhSQmRIUnlhV0oxZEdVb0oyWnBiR3duTENCMGFHbHpMbU52Ykc5eWN5NWhZMk5sYm5RcE8xeHVJQ0I5WEc1Y2JseHVJQ0J5Wlc1a1pYSW9LU0I3WEc0Z0lDQWdhV1lnS0NGMGFHbHpMbU5zYVdOclpXUXBJSHRjYmlBZ0lDQWdJSFJvYVhNdWEyNXZZa1JoZEdFdWNpQTlJSFJvYVhNdWRHaHBZMnR1WlhOektqQXVOelU3WEc0Z0lDQWdmVnh1SUNBZ0lIUm9hWE11YTI1dllpNXpaWFJCZEhSeWFXSjFkR1VvSjNJbkxIUm9hWE11YTI1dllrUmhkR0V1Y2lrN1hHNWNiaUFnSUNCcFppQW9kR2hwY3k1dmNtbGxiblJoZEdsdmJpQTlQVDBnSjNabGNuUnBZMkZzSnlrZ2UxeHVJQ0JjZENBZ0lIUm9hWE11YTI1dllrUmhkR0V1YkdWMlpXd2dQU0IwYUdsekxtdHViMkpFWVhSaExuSXJkR2hwY3k1ZmRtRnNkV1V1Ym05eWJXRnNhWHBsWkNvb2RHaHBjeTVvWldsbmFIUXRkR2hwY3k1cmJtOWlSR0YwWVM1eUtqSXBPMXh1SUNBZ0lDQWdJSFJvYVhNdWEyNXZZaTV6WlhSQmRIUnlhV0oxZEdVb0oyTjVKeXgwYUdsekxtaGxhV2RvZENBdElIUm9hWE11YTI1dllrUmhkR0V1YkdWMlpXd3BPMXh1SUNBZ0lDQWdJSFJvYVhNdVptbHNiR0poY2k1elpYUkJkSFJ5YVdKMWRHVW9KM2tuTEhSb2FYTXVhR1ZwWjJoMElDMGdkR2hwY3k1cmJtOWlSR0YwWVM1c1pYWmxiQ2s3WEc0Z0lDQWdJQ0FnZEdocGN5NW1hV3hzWW1GeUxuTmxkRUYwZEhKcFluVjBaU2duYUdWcFoyaDBKeXgwYUdsekxtdHViMkpFWVhSaExteGxkbVZzS1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNCY2RDQWdJSFJvYVhNdWEyNXZZa1JoZEdFdWJHVjJaV3dnUFNCMGFHbHpMbDkyWVd4MVpTNXViM0p0WVd4cGVtVmtLaWgwYUdsekxuZHBaSFJvTFhSb2FYTXVhMjV2WWtSaGRHRXVjaW95S1N0MGFHbHpMbXR1YjJKRVlYUmhMbkk3WEc0Z0lDQWdJQ0FnZEdocGN5NXJibTlpTG5ObGRFRjBkSEpwWW5WMFpTZ25ZM2duTEhSb2FYTXVhMjV2WWtSaGRHRXViR1YyWld3cE8xeHVJQ0FnSUNBZ0lIUm9hWE11Wm1sc2JHSmhjaTV6WlhSQmRIUnlhV0oxZEdVb0ozZ25MREFwTzF4dUlDQWdJQ0FnSUhSb2FYTXVabWxzYkdKaGNpNXpaWFJCZEhSeWFXSjFkR1VvSjNkcFpIUm9KeXgwYUdsekxtdHViMkpFWVhSaExteGxkbVZzS1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1WEc0Z0lHTnNhV05yS0NrZ2UxeHVJQ0FnSUhSb2FYTXVhMjV2WWtSaGRHRXVjaUE5SUhSb2FYTXVkR2hwWTJ0dVpYTnpLakF1T1R0Y2JpQWdJQ0IwYUdsekxuQnZjMmwwYVc5dUxtRnVZMmh2Y2lBOUlIUm9hWE11Ylc5MWMyVTdYRzRnSUNBZ2RHaHBjeTV0YjNabEtDazdYRzRnSUgxY2JseHVJQ0J0YjNabEtDa2dlMXh1SUNBZ0lHbG1JQ2gwYUdsekxtTnNhV05yWldRcElIdGNiaUFnSUNBZ0lIUm9hWE11Y0c5emFYUnBiMjR1ZFhCa1lYUmxLSFJvYVhNdWJXOTFjMlVwTzF4dUlDQWdJQ0FnZEdocGN5NWZkbUZzZFdVdWRYQmtZWFJsVG05eWJXRnNLQ0IwYUdsekxuQnZjMmwwYVc5dUxuWmhiSFZsSUNrN1hHNGdJQ0FnSUNCMGFHbHpMbVZ0YVhRb0oyTm9ZVzVuWlNjc2RHaHBjeTVmZG1Gc2RXVXVkbUZzZFdVcE8xeHVJQ0FnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmx4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhKbGJHVmhjMlVvS1NCN1hHNGdJQ0FnZEdocGN5NXlaVzVrWlhJb0tUdGNiaUFnZlZ4dVhHNGdJR2RsZENCdWIzSnRZV3hwZW1Wa0tDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDkyWVd4MVpTNXViM0p0WVd4cGVtVmtPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJRlJvWlNCemJHbGtaWEluY3lCamRYSnlaVzUwSUhaaGJIVmxMaUJKWmlCelpYUWdiV0Z1ZFdGc2JIa3NJSGRwYkd3Z2RYQmtZWFJsSUhSb1pTQnBiblJsY21aaFkyVWdZVzVrSUhSeWFXZG5aWElnZEdobElHOTFkSEIxZENCbGRtVnVkQzVjYmlBZ1FIUjVjR1VnZTI1MWJXSmxjbjFjYmlBZ1FHVjRZVzF3YkdVZ2MyeHBaR1Z5TG5aaGJIVmxJRDBnTVRBN1hHNGdJQ292WEc0Z0lHZGxkQ0IyWVd4MVpTZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVmZG1Gc2RXVXVkbUZzZFdVN1hHNGdJSDFjYmlBZ2MyVjBJSFpoYkhWbEtIWXBJSHRjYmlBZ0lDQjBhR2x6TGw5MllXeDFaUzUxY0dSaGRHVW9kaWs3WEc0Z0lDQWdkR2hwY3k1d2IzTnBkR2x2Ymk1MllXeDFaU0E5SUhSb2FYTXVYM1poYkhWbExtNXZjbTFoYkdsNlpXUTdYRzRnSUNBZ2RHaHBjeTVsYldsMEtDZGphR0Z1WjJVbkxIUm9hWE11WDNaaGJIVmxMblpoYkhWbEtUdGNiaUFnSUNCMGFHbHpMbkpsYm1SbGNpZ3BPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJRXh2ZDJWeUlHeHBiV2wwSUc5bUlIUm9aU0J6Ykdsa1pYSnpKM01nYjNWMGNIVjBJSEpoYm1kbFhHNGdJRUIwZVhCbElIdHVkVzFpWlhKOVhHNGdJRUJsZUdGdGNHeGxJSE5zYVdSbGNpNXRhVzRnUFNBeE1EQXdPMXh1SUNBcUwxeHVJQ0JuWlhRZ2JXbHVLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TGw5MllXeDFaUzV0YVc0N1hHNGdJSDFjYmlBZ2MyVjBJRzFwYmloMktTQjdYRzRnSUNBZ2RHaHBjeTVmZG1Gc2RXVXViV2x1SUQwZ2RqdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQlZjSEJsY2lCc2FXMXBkQ0J2WmlCMGFHVWdjMnhwWkdWeUozTWdiM1YwY0hWMElISmhibWRsWEc0Z0lFQjBlWEJsSUh0dWRXMWlaWEo5WEc0Z0lFQmxlR0Z0Y0d4bElITnNhV1JsY2k1dFlYZ2dQU0F4TURBd08xeHVJQ0FxTDF4dUlDQm5aWFFnYldGNEtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDkyWVd4MVpTNXRZWGc3WEc0Z0lIMWNiaUFnYzJWMElHMWhlQ2gyS1NCN1hHNGdJQ0FnZEdocGN5NWZkbUZzZFdVdWJXRjRJRDBnZGp0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNCVWFHVWdhVzVqY21WdFpXNTBJSFJvWVhRZ2RHaGxJSE5zYVdSbGNpZHpJSFpoYkhWbElHTm9ZVzVuWlhNZ1lua3VYRzRnSUVCMGVYQmxJSHR1ZFcxaVpYSjlYRzRnSUVCbGVHRnRjR3hsSUhOc2FXUmxjaTV6ZEdWd0lEMGdOVHRjYmlBZ0tpOWNiaUFnWjJWMElITjBaWEFvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVgzWmhiSFZsTG5OMFpYQTdYRzRnSUgxY2JpQWdjMlYwSUhOMFpYQW9kaWtnZTF4dUlDQWdJSFJvYVhNdVgzWmhiSFZsTG5OMFpYQWdQU0IyTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUVGaWMyOXNkWFJsSUcxdlpHVWdLSE5zYVdSbGNpZHpJSFpoYkhWbElHcDFiWEJ6SUhSdklHMXZkWE5sSUdOc2FXTnJJSEJ2YzJsMGFXOXVLU0J2Y2lCeVpXeGhkR2wyWlNCdGIyUmxJQ2h0YjNWelpTQmtjbUZuSUdOb1lXNW5aWE1nZG1Gc2RXVWdjbVZzWVhScGRtVWdkRzhnYVhSeklHTjFjbkpsYm5RZ2NHOXphWFJwYjI0cExpQkVaV1poZFd4ME9pQmNJbkpsYkdGMGFYWmxYQ0l1WEc0Z0lFQjBlWEJsSUh0emRISnBibWQ5WEc0Z0lFQmxlR0Z0Y0d4bElITnNhV1JsY2k1dGIyUmxJRDBnWENKeVpXeGhkR2wyWlZ3aU8xeHVJQ0FxTDF4dUlDQm5aWFFnYlc5a1pTZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTV3YjNOcGRHbHZiaTV0YjJSbE8xeHVJQ0I5WEc0Z0lITmxkQ0J0YjJSbEtIWXBJSHRjYmlBZ0lDQjBhR2x6TG5CdmMybDBhVzl1TG0xdlpHVWdQU0IyTzF4dUlDQjlYRzVjYmx4dVhHNTlYRzVjYmx4dVhHNHZMeUJYUlVKUVFVTkxJRVpQVDFSRlVpQXZMMXh1THk4Z0xpOStMMnB6YUdsdWRDMXNiMkZrWlhJaExpOXNhV0l2YVc1MFpYSm1ZV05sY3k5emJHbGtaWEl1YW5NaUxDSW5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JteGxkQ0J6ZG1jZ1BTQnlaWEYxYVhKbEtDY3VMaTkxZEdsc0wzTjJaeWNwTzF4dWJHVjBJRlJ2WjJkc1pVMXZaR1ZzSUQwZ2NtVnhkV2x5WlNnbkxpNHZiVzlrWld4ekwzUnZaMmRzWlNjcE8xeHViR1YwSUVsdWRHVnlabUZqWlNBOUlISmxjWFZwY21Vb0p5NHVMMk52Y21VdmFXNTBaWEptWVdObEp5azdYRzVjYmk4cUtseHVLaUJVYjJkbmJHVmNiaXBjYmlvZ1FHUmxjMk55YVhCMGFXOXVJRUpwYm1GeWVTQnpkMmwwWTJoY2JpcGNiaW9nUUdSbGJXOGdQSE53WVc0Z2JtVjRkWE10ZFdrOVhDSjBiMmRuYkdWY0lqNDhMM053WVc0K1hHNHFYRzRxSUVCbGVHRnRjR3hsWEc0cUlIWmhjaUIwYjJkbmJHVWdQU0J1WlhjZ1RtVjRkWE11Vkc5bloyeGxLQ2NqZEdGeVoyVjBKeWxjYmlwY2Jpb2dRR1Y0WVcxd2JHVmNiaW9nZG1GeUlIUnZaMmRzWlNBOUlHNWxkeUJPWlhoMWN5NVViMmRuYkdVb0p5TjBZWEpuWlhRbkxIdGNiaW9nSUNBZ0lDZHphWHBsSnpvZ1d6UXdMREl3WFN4Y2Jpb2dJQ0FnSUNkemRHRjBaU2M2SUdaaGJITmxYRzRxSUgwcFhHNHFYRzRxSUVCdmRYUndkWFJjYmlvZ1kyaGhibWRsWEc0cUlFWnBjbVZ6SUdGdWVTQjBhVzFsSUhSb1pTQnBiblJsY21aaFkyVW5jeUIyWVd4MVpTQmphR0Z1WjJWekxpQThZbkkrWEc0cUlGQmhjbUZ0WlhSbGNqb2dWR2hsSUdKdmIyeGxZVzRnYzNSaGRHVWdiMllnZEdobElHbHVkR1Z5Wm1GalpTNWNiaXBjYmlvZ1FHOTFkSEIxZEdWNFlXMXdiR1ZjYmlvZ2RHOW5aMnhsTG05dUtDZGphR0Z1WjJVbkxHWjFibU4wYVc5dUtIWXBJSHRjYmlvZ0lDQmpiMjV6YjJ4bExteHZaeWgyS1R0Y2Jpb2dmU2xjYmlwY2JpcGNiaW92WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5QlViMmRuYkdVZ1pYaDBaVzVrY3lCSmJuUmxjbVpoWTJVZ2UxeHVYRzRnSUdOdmJuTjBjblZqZEc5eUtDa2dlMXh1WEc0Z0lDQWdiR1YwSUc5d2RHbHZibk1nUFNCYkozWmhiSFZsSjEwN1hHNWNiaUFnSUNCc1pYUWdaR1ZtWVhWc2RITWdQU0I3WEc0Z0lDQWdJQ0FuYzJsNlpTYzZJRnMwTUN3eU1GMHNYRzRnSUNBZ0lDQW5kR0Z5WjJWMEp6b2dabUZzYzJVc1hHNGdJQ0FnSUNBbmMzUmhkR1VuT2lCbVlXeHpaVnh1SUNBZ0lIMDdYRzVjYmlBZ0lDQnpkWEJsY2loaGNtZDFiV1Z1ZEhNc2IzQjBhVzl1Y3l4a1pXWmhkV3gwY3lrN1hHNWNiaUFnSUNCMGFHbHpMbDl6ZEdGMFpTQTlJRzVsZHlCVWIyZG5iR1ZOYjJSbGJDaDBhR2x6TG5ObGRIUnBibWR6TG5OMFlYUmxLVHRjYmx4dUlDQWdJSFJvYVhNdWFXNXBkQ2dwTzF4dVhHNGdJSDFjYmx4dUlDQmlkV2xzWkVsdWRHVnlabUZqWlNncElIdGNibHh1SUNBZ0lIUm9hWE11WW1GeUlEMGdjM1puTG1OeVpXRjBaU2duY21WamRDY3BPMXh1SUNBZ0lIUm9hWE11YTI1dllpQTlJSE4yWnk1amNtVmhkR1VvSjJOcGNtTnNaU2NwTzF4dUlDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1aGNIQmxibVJEYUdsc1pDaDBhR2x6TG1KaGNpazdYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbUZ3Y0dWdVpFTm9hV3hrS0hSb2FYTXVhMjV2WWlrN1hHNWNiaUFnZlZ4dVhHNGdJSE5wZW1WSmJuUmxjbVpoWTJVb0tTQjdYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NW9aV2xuYUhRZ1BDQjBhR2x6TG5kcFpIUm9MeklwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVhMjV2WWxOcGVtVWdQU0IwYUdsekxtaGxhV2RvZEM4eU8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0IwYUdsekxtdHViMkpUYVhwbElEMGdkR2hwY3k1M2FXUjBhQzgwTzF4dUlDQWdJSDFjYmx4dUlDQWdJSFJvYVhNdVltRnlMbk5sZEVGMGRISnBZblYwWlNnbmVDY3NkR2hwY3k1M2FXUjBhQzh5SUMwZ2RHaHBjeTVyYm05aVUybDZaU294TGpVcE8xeHVJQ0FnSUhSb2FYTXVZbUZ5TG5ObGRFRjBkSEpwWW5WMFpTZ25lU2NzZEdocGN5NW9aV2xuYUhRdk1pQXRJSFJvYVhNdWEyNXZZbE5wZW1Vdk1pazdYRzRnSUNBZ2RHaHBjeTVpWVhJdWMyVjBRWFIwY21saWRYUmxLQ2R5ZUNjc2RHaHBjeTVyYm05aVUybDZaUzh5S1R0Y2JpQWdJQ0IwYUdsekxtSmhjaTV6WlhSQmRIUnlhV0oxZEdVb0ozSjVKeXgwYUdsekxtdHViMkpUYVhwbEx6SXBPMXh1SUNBZ0lIUm9hWE11WW1GeUxuTmxkRUYwZEhKcFluVjBaU2duZDJsa2RHZ25MSFJvYVhNdWEyNXZZbE5wZW1VcU15azdYRzRnSUNBZ2RHaHBjeTVpWVhJdWMyVjBRWFIwY21saWRYUmxLQ2RvWldsbmFIUW5MSFJvYVhNdWEyNXZZbE5wZW1VcE8xeHVYRzRnSUNBZ2RHaHBjeTVyYm05aUxuTmxkRUYwZEhKcFluVjBaU2duWTNnbkxIUm9hWE11ZDJsa2RHZ3ZNaUF0SUhSb2FYTXVhMjV2WWxOcGVtVXBPMXh1SUNBZ0lIUm9hWE11YTI1dllpNXpaWFJCZEhSeWFXSjFkR1VvSjJONUp5eDBhR2x6TG1obGFXZG9kQzh5S1R0Y2JpQWdJQ0IwYUdsekxtdHViMkl1YzJWMFFYUjBjbWxpZFhSbEtDZHlKeXgwYUdsekxtdHViMkpUYVhwbEtUdGNibHh1SUNCOVhHNWNiaUFnWTI5c2IzSkpiblJsY21aaFkyVW9LU0I3WEc0Z0lDQWdkR2hwY3k1cmJtOWlMbk5sZEVGMGRISnBZblYwWlNnblptbHNiQ2NzSUhSb2FYTXVZMjlzYjNKekxtRmpZMlZ1ZENrN1hHNGdJQ0FnZEdocGN5NXlaVzVrWlhJb0tUdGNiaUFnZlZ4dVhHNGdJSEpsYm1SbGNpZ3BJSHRjYmlBZ0lDQnBaaUFvSVhSb2FYTXVjM1JoZEdVcElIdGNiaUFnSUNBZ0lIUm9hWE11YTI1dllpNXpaWFJCZEhSeWFXSjFkR1VvSjJONEp5eDBhR2x6TG5kcFpIUm9MeklnTFNCMGFHbHpMbXR1YjJKVGFYcGxLVHRjYmlBZ0lDQWdJSFJvYVhNdVltRnlMbk5sZEVGMGRISnBZblYwWlNnblptbHNiQ2NzSUhSb2FYTXVZMjlzYjNKekxtWnBiR3dwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQjBhR2x6TG10dWIySXVjMlYwUVhSMGNtbGlkWFJsS0NkamVDY3NkR2hwY3k1M2FXUjBhQzh5SUNzZ2RHaHBjeTVyYm05aVUybDZaU2s3WEc0Z0lDQWdJQ0IwYUdsekxtSmhjaTV6WlhSQmRIUnlhV0oxZEdVb0oyWnBiR3duTENCMGFHbHpMbU52Ykc5eWN5NWhZMk5sYm5RcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lHTnNhV05yS0NrZ2UxeHVJQ0FnSUhSb2FYTXVabXhwY0NncE8xeHVJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtDazdYRzRnSUNBZ2RHaHBjeTVsYldsMEtDZGphR0Z1WjJVbkxIUm9hWE11YzNSaGRHVXBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJRmRvWlhSb1pYSWdkR2hsSUhSdloyZHNaU0JwY3lCamRYSnlaVzUwYkhrZ2IyNGdiM0lnYjJabUxpQlRaWFIwYVc1bklIUm9hWE1nY0hKdmNHVnlkSGtnZDJsc2JDQjFjR1JoZEdVZ2RHaGxJSFJ2WjJkc1pTQnBiblJsY21aaFkyVWdZVzVrSUhSeWFXZG5aWElnZEdobElHOTFkSEIxZENCbGRtVnVkQzVjYmlBZ1FIUjVjR1VnZTJKdmIyeGxZVzU5WEc0Z0lFQmxlR0Z0Y0d4bElIUnZaMmRzWlM1emRHRjBaU0E5SUdaaGJITmxPMXh1SUNBcUwxeHVJQ0JuWlhRZ2MzUmhkR1VvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVgzTjBZWFJsTG5OMFlYUmxPMXh1SUNCOVhHNGdJSE5sZENCemRHRjBaU2gyWVd4MVpTa2dlMXh1SUNBZ0lIUm9hWE11WDNOMFlYUmxMbVpzYVhBb2RtRnNkV1VwTzF4dUlDQWdJSFJvYVhNdVpXMXBkQ2duWTJoaGJtZGxKeXgwYUdsekxuTjBZWFJsS1R0Y2JpQWdJQ0IwYUdsekxuSmxibVJsY2lncE8xeHVJQ0I5WEc1Y2JseHVJQ0F2S2lwY2JpQWdLaUJUZDJsMFkyZ2dkR2hsSUhSdloyZHNaU0J6ZEdGMFpTQjBieUJwZEhNZ2IzQndiM05wZEdVZ2MzUmhkR1ZjYmlBZ0tpQkFaWGhoYlhCc1pWeHVJQ0FxSUhSdloyZHNaUzVtYkdsd0tDazdYRzRnSUNvdlhHNGdJR1pzYVhBb0tTQjdYRzRnSUNBZ2RHaHBjeTVmYzNSaGRHVXVabXhwY0NncE8xeHVJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtDazdYRzRnSUgxY2JseHVmVnh1WEc1Y2JseHVMeThnVjBWQ1VFRkRTeUJHVDA5VVJWSWdMeTljYmk4dklDNHZmaTlxYzJocGJuUXRiRzloWkdWeUlTNHZiR2xpTDJsdWRHVnlabUZqWlhNdmRHOW5aMnhsTG1weklpd2lKM1Z6WlNCemRISnBZM1FuTzF4dVhHNXNaWFFnYzNabklEMGdjbVZ4ZFdseVpTZ25MaTR2ZFhScGJDOXpkbWNuS1R0Y2JteGxkQ0JDZFhSMGIyNVVaVzF3YkdGMFpTQTlJSEpsY1hWcGNtVW9KeTR1TDJOdmJYQnZibVZ1ZEhNdlluVjBkRzl1ZEdWdGNHeGhkR1VuS1R0Y2JseHVMeW9xWEc0cUlFSjFkSFJ2Ymx4dUtseHVLaUJBWkdWelkzSnBjSFJwYjI0Z1EybHlZM1ZzWVhJZ1luVjBkRzl1SUhkcGRHZ2diM0IwYVc5dVlXd2dZV1owWlhKMGIzVmphQzVjYmlwY2Jpb2dRR1JsYlc4Z1BITndZVzRnYm1WNGRYTXRkV2s5WENKaWRYUjBiMjVjSWo0OEwzTndZVzQrWEc0cVhHNHFJRUJsZUdGdGNHeGxYRzRxSUhaaGNpQmlkWFIwYjI0Z1BTQnVaWGNnVG1WNGRYTXVRblYwZEc5dUtDY2pkR0Z5WjJWMEp5bGNiaXBjYmlvZ1FHVjRZVzF3YkdWY2Jpb2dkbUZ5SUdKMWRIUnZiaUE5SUc1bGR5Qk9aWGgxY3k1Q2RYUjBiMjRvSnlOMFlYSm5aWFFuTEh0Y2Jpb2dJQ0FuYzJsNlpTYzZJRnM0TUN3NE1GMHNYRzRxSUNBZ0oyMXZaR1VuT2lBbllXWjBaWEowYjNWamFDY3NYRzRxSUNBZ0ozTjBZWFJsSnpvZ1ptRnNjMlZjYmlvZ2ZTbGNiaXBjYmlvZ1FHOTFkSEIxZEZ4dUtpQmphR0Z1WjJWY2Jpb2dSbWx5WlhNZ1lXNTVJSFJwYldVZ2RHaGxJR2x1ZEdWeVptRmpaU2R6SUhaaGJIVmxJR05vWVc1blpYTXVJRHhpY2o1Y2Jpb2dTVzRnUEdJK1luVjBkRzl1SUcxdlpHVThMMkkrTENBOFlqNTBiMmRuYkdVZ2JXOWtaVHd2WWo0c0lHRnVaQ0E4WWo1cGJYQjFiSE5sSUcxdlpHVThMMkkrTENCMGFHVWdiM1YwY0hWMElHUmhkR0VnYVhNZ1lTQmliMjlzWldGdUlHUmxjMk55YVdKcGJtY2dkR2hsSUhOMFlYUmxJRzltSUhSb1pTQmlkWFIwYjI0dVBHSnlQbHh1S2lCSmJpQThZajVoWm5SbGNuUnZkV05vSUcxdlpHVThMMkkrTENCMGFHVWdiM1YwY0hWMElHUmhkR0VnYVhNZ1lXNGdiMkpxWldOMElHTnZiblJoYVc1cGJtY2dlQ0FvTUMweEtTQmhibVFnZVNBb01DMHhLU0J3YjNOcGRHbHZibk1nYjJZZ1lXWjBaWEowYjNWamFDNWNiaXBjYmlvZ1FHOTFkSEIxZEdWNFlXMXdiR1ZjYmlvZ1luVjBkRzl1TG05dUtDZGphR0Z1WjJVbkxHWjFibU4wYVc5dUtIWXBJSHRjYmlvZ0lDQXZMeUIySUdseklIUm9aU0IyWVd4MVpTQnZaaUIwYUdVZ1luVjBkRzl1WEc0cUlDQWdZMjl1YzI5c1pTNXNiMmNvZGlrN1hHNHFJSDBwWEc0cVhHNHFMMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5QkNkWFIwYjI0Z1pYaDBaVzVrY3lCQ2RYUjBiMjVVWlcxd2JHRjBaU0I3WEc1Y2JpQWdZMjl1YzNSeWRXTjBiM0lvS1NCN1hHNWNiaUFnSUNCc1pYUWdiM0IwYVc5dWN5QTlJRnNuYlc5a1pTZGRPMXh1WEc1Y2JpQWdJQ0JzWlhRZ1pHVm1ZWFZzZEhNZ1BTQjdYRzRnSUNBZ0lDQW5jMmw2WlNjNklGczRNQ3c0TUYwc1hHNGdJQ0FnSUNBbmJXOWtaU2M2SUNkaFpuUmxjblJ2ZFdOb0p5d2dMeThnWW5WMGRHOXVMQ0JoWm5SbGNuUnZkV05vTENCcGJYQjFiSE5sTENCMGIyZG5iR1ZjYmlBZ0lDQWdJQ2R6ZEdGMFpTYzZJR1poYkhObFhHNGdJQ0FnZlR0Y2JseHVJQ0FnSUhOMWNHVnlLR0Z5WjNWdFpXNTBjeXh2Y0hScGIyNXpMR1JsWm1GMWJIUnpLVHRjYmx4dVhHNGdJQ0FnTHlvcVhHNGdJQ0FnS2lCSmJuUmxjbUZqZEdsdmJpQnRiMlJsT2lCemRYQndiM0owY3lCY0ltSjFkSFJ2Ymx3aUxDQmNJbUZtZEdWeWRHOTFZMmhjSWl3Z1hDSnBiWEIxYkhObFhDSXNJRzl5SUZ3aWRHOW5aMnhsWENKY2JpQWdJQ0FxSUVCMGVYQmxJSHR6ZEhKcGJtZDlYRzRnSUNBZ0tpQkFaWGhoYlhCc1pTQmlkWFIwYjI0dWJXOWtaU0E5SUNkMGIyZG5iR1VuTzF4dUlDQWdJQ292WEc0Z0lDQWdkR2hwY3k1dGIyUmxJRDBnZEdocGN5NXpaWFIwYVc1bmN5NXRiMlJsTzF4dVhHNGdJQ0FnZEdocGN5NXBibWwwS0NrN1hHNGdJQ0FnZEdocGN5NXlaVzVrWlhJb0tUdGNibHh1SUNCOVhHNWNiaUFnWW5WcGJHUkpiblJsY21aaFkyVW9LU0I3WEc0Z0lDQWdkR2hwY3k1d1lXUWdQU0J6ZG1jdVkzSmxZWFJsS0NkamFYSmpiR1VuS1R0Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdVlYQndaVzVrUTJocGJHUW9kR2hwY3k1d1lXUXBPMXh1WEc0Z0lDQWdkR2hwY3k1cGJuUmxjbUZqZEdsdmJsUmhjbWRsZENBOUlIUm9hWE11Y0dGa08xeHVYRzRnSUNBZ0x5OGdiMjVzZVNCMWMyVmtJR2xtSUdsdUlDZGhablJsY25SdmRXTm9KeUJ0YjJSbFhHNGdJQ0FnZEdocGN5NWtaV1p6SUQwZ2MzWm5MbU55WldGMFpTZ25aR1ZtY3ljcE8xeHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNWhjSEJsYm1SRGFHbHNaQ2gwYUdsekxtUmxabk1wTzF4dVhHNGdJQ0FnZEdocGN5NW5jbUZrYVdWdWRDQTlJSE4yWnk1eVlXUnBZV3hIY21Ga2FXVnVkQ2gwYUdsekxtUmxabk1zTWlrN1hHNWNiaUFnSUNCMGFHbHpMbWR5WVdScFpXNTBMbk4wYjNCeld6QmRMbk5sZEVGMGRISnBZblYwWlNnbmIyWm1jMlYwSnl3Z0p6TXdKU2NwTzF4dVhHNGdJQ0FnZEdocGN5NW5jbUZrYVdWdWRDNXpkRzl3YzFzeFhTNXpaWFJCZEhSeWFXSjFkR1VvSjI5bVpuTmxkQ2NzSUNjeE1EQWxKeWs3WEc1Y2JpQWdmVnh1WEc0Z0lITnBlbVZKYm5SbGNtWmhZMlVvS1NCN1hHNWNiaUFnSUNCMGFHbHpMbkJoWkM1elpYUkJkSFJ5YVdKMWRHVW9KMk40Snl4MGFHbHpMbmRwWkhSb0x6SXBPMXh1SUNBZ0lIUm9hWE11Y0dGa0xuTmxkRUYwZEhKcFluVjBaU2duWTNrbkxIUm9hWE11YUdWcFoyaDBMeklwTzF4dUlDQWdJSFJvYVhNdWNHRmtMbk5sZEVGMGRISnBZblYwWlNnbmNpY3NJRTFoZEdndWJXbHVLSFJvYVhNdWQybGtkR2dzZEdocGN5NW9aV2xuYUhRcElDOGdNaUF0SUhSb2FYTXVkMmxrZEdndk5EQXBPMXh1SUNBZ0lIUm9hWE11Y0dGa0xuTmxkRUYwZEhKcFluVjBaU2duYzNSeWIydGxMWGRwWkhSb0p5d2dkR2hwY3k1M2FXUjBhQzh5TUNrN1hHNGdJSDFjYmx4dUlDQmpiMnh2Y2tsdWRHVnlabUZqWlNncElIdGNibHh1SUNBZ0lIUm9hWE11WjNKaFpHbGxiblF1YzNSdmNITmJNRjB1YzJWMFFYUjBjbWxpZFhSbEtDZHpkRzl3TFdOdmJHOXlKeXdnZEdocGN5NWpiMnh2Y25NdVlXTmpaVzUwS1R0Y2JpQWdJQ0IwYUdsekxtZHlZV1JwWlc1MExuTjBiM0J6V3pGZExuTmxkRUYwZEhKcFluVjBaU2duYzNSdmNDMWpiMnh2Y2ljc0lIUm9hWE11WTI5c2IzSnpMbVpwYkd3cE8xeHVJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtDazdYRzRnSUgxY2JseHVJQ0F2S2x4dUlDQXFJRlZ3WkdGMFpTQjBhR1VnZG1semRXRnNJR2x1ZEdWeVptRmpaU0IxYzJsdVp5QnBkSE1nWTNWeWNtVnVkQ0J6ZEdGMFpWeHVJQ0FxWEc0Z0lDb2dRR1Y0WVcxd2JHVmNiaUFnS2lCaWRYUjBiMjR1Y21WdVpHVnlLQ2s3WEc0Z0lDb3ZYRzRnSUhKbGJtUmxjaWdwSUh0Y2JpQWdJQ0JwWmlBb0lYUm9hWE11YzNSaGRHVXBJSHRjYmlBZ0lDQWdJSFJvYVhNdWNHRmtMbk5sZEVGMGRISnBZblYwWlNnblptbHNiQ2NzSUhSb2FYTXVZMjlzYjNKekxtWnBiR3dwTzF4dUlDQWdJQ0FnZEdocGN5NXdZV1F1YzJWMFFYUjBjbWxpZFhSbEtDZHpkSEp2YTJVbkxDQjBhR2x6TG1OdmJHOXljeTV0WldScGRXMU1hV2RvZENrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR2xtSUNoMGFHbHpMbTF2WkdVOVBUMG5ZV1owWlhKMGIzVmphQ2NwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV3WVdRdWMyVjBRWFIwY21saWRYUmxLQ2R6ZEhKdmEyVW5MQ0FuZFhKc0tDTW5LM1JvYVhNdVozSmhaR2xsYm5RdWFXUXJKeWtuS1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVuY21Ga2FXVnVkQzVsYkdWdFpXNTBMbk5sZEVGMGRISnBZblYwWlNnblkzZ25MQ0FvZEdocGN5NXdiM05wZEdsdmJpNTRLakV3TUNrckp5VW5LVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NW5jbUZrYVdWdWRDNWxiR1Z0Wlc1MExuTmxkRUYwZEhKcFluVjBaU2duWTNrbkxDQW9LREV0ZEdocGN5NXdiM05wZEdsdmJpNTVLU294TURBcEt5Y2xKeWs3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0IwYUdsekxuQmhaQzV6WlhSQmRIUnlhV0oxZEdVb0ozTjBjbTlyWlNjc0lIUm9hWE11WTI5c2IzSnpMbUZqWTJWdWRDazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQjBhR2x6TG5CaFpDNXpaWFJCZEhSeWFXSjFkR1VvSjJacGJHd25MQ0IwYUdsekxtTnZiRzl5Y3k1aFkyTmxiblFwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzU5WEc1Y2JseHVYRzR2THlCWFJVSlFRVU5MSUVaUFQxUkZVaUF2TDF4dUx5OGdMaTkrTDJwemFHbHVkQzFzYjJGa1pYSWhMaTlzYVdJdmFXNTBaWEptWVdObGN5OWlkWFIwYjI0dWFuTWlMQ0luZFhObElITjBjbWxqZENjN1hHNWNibXhsZENCemRtY2dQU0J5WlhGMWFYSmxLQ2N1TGk5MWRHbHNMM04yWnljcE8xeHViR1YwSUcxaGRHZ2dQU0J5WlhGMWFYSmxLQ2N1TGk5MWRHbHNMMjFoZEdnbktUdGNibXhsZENCVWIyZG5iR1ZOYjJSbGJDQTlJSEpsY1hWcGNtVW9KeTR1TDIxdlpHVnNjeTkwYjJkbmJHVW5LVHRjYm14bGRDQkpiblJsY21aaFkyVWdQU0J5WlhGMWFYSmxLQ2N1TGk5amIzSmxMMmx1ZEdWeVptRmpaU2NwTzF4dVhHNHZLaXBjYmtKMWRIUnZiaUJVWlcxd2JHRjBaVnh1S2k5Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1kyeGhjM01nUW5WMGRHOXVWR1Z0Y0d4aGRHVWdaWGgwWlc1a2N5QkpiblJsY21aaFkyVWdlMXh1WEc0Z0lHTnZibk4wY25WamRHOXlLR0Z5WjNNc2IzQjBhVzl1Y3l4a1pXWmhkV3gwY3lrZ2UxeHVYRzRnSUNBZ2MzVndaWElvWVhKbmN5eHZjSFJwYjI1ekxHUmxabUYxYkhSektUdGNibHh1SUNBZ0lIUm9hWE11Ylc5a1pTQTlJSFJvYVhNdWMyVjBkR2x1WjNNdWJXOWtaU0I4ZkNBblluVjBkRzl1Snp0Y2JseHVJQ0FnSUhSb2FYTXVjRzl6YVhScGIyNGdQU0I3WEc0Z0lDQWdJQ0I0T2lBd0xGeHVJQ0FnSUNBZ2VUb2dNRnh1SUNBZ0lIMDdYRzVjYmlBZ0lDQjBhR2x6TGw5emRHRjBaU0E5SUc1bGR5QlViMmRuYkdWTmIyUmxiQ2gwYUdsekxuTmxkSFJwYm1kekxuTjBZWFJsS1R0Y2JseHVJQ0I5WEc1Y2JpQWdZblZwYkdSSmJuUmxjbVpoWTJVb0tTQjdYRzRnSUNBZ2RHaHBjeTV3WVdRZ1BTQnpkbWN1WTNKbFlYUmxLQ2RqYVhKamJHVW5LVHRjYmlBZ0lDQjBhR2x6TG5CaFpDNXpaWFJCZEhSeWFXSjFkR1VvSjJacGJHd25MQ0FuSTJReE9DY3BPMXh1SUNBZ0lIUm9hWE11Y0dGa0xuTmxkRUYwZEhKcFluVjBaU2duYzNSeWIydGxKeXdnSnlOa01UZ25LVHRjYmlBZ0lDQjBhR2x6TG5CaFpDNXpaWFJCZEhSeWFXSjFkR1VvSjNOMGNtOXJaUzEzYVdSMGFDY3NJRFFwTzF4dVhHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExtRndjR1Z1WkVOb2FXeGtLSFJvYVhNdWNHRmtLVHRjYmx4dUlDQWdJSFJvYVhNdWFXNTBaWEpoWTNScGIyNVVZWEpuWlhRZ1BTQjBhR2x6TG5CaFpEdGNibHh1SUNBZ0lIUm9hWE11YzJsNlpVbHVkR1Z5Wm1GalpTZ3BPMXh1SUNCOVhHNWNiaUFnYzJsNlpVbHVkR1Z5Wm1GalpTZ3BJSHRjYmlBZ0lDQjBhR2x6TG5CaFpDNXpaWFJCZEhSeWFXSjFkR1VvSjJONEp5eDBhR2x6TG5kcFpIUm9MeklwTzF4dUlDQWdJSFJvYVhNdWNHRmtMbk5sZEVGMGRISnBZblYwWlNnblkza25MSFJvYVhNdWFHVnBaMmgwTHpJcE8xeHVJQ0FnSUhSb2FYTXVjR0ZrTG5ObGRFRjBkSEpwWW5WMFpTZ25jaWNzSUUxaGRHZ3ViV2x1S0hSb2FYTXVkMmxrZEdnc2RHaHBjeTVvWldsbmFIUXBJQzhnTWlBdElESXBPMXh1SUNCOVhHNWNiaUFnY21WdVpHVnlLQ2tnZTF4dUlDQWdJR2xtSUNnaGRHaHBjeTV6ZEdGMFpTa2dlMXh1SUNBZ0lDQWdkR2hwY3k1d1lXUXVjMlYwUVhSMGNtbGlkWFJsS0NkbWFXeHNKeXdnZEdocGN5NWpiMnh2Y25NdVptbHNiQ2s3WEc0Z0lDQWdJQ0IwYUdsekxuQmhaQzV6WlhSQmRIUnlhV0oxZEdVb0ozTjBjbTlyWlNjc0lIUm9hWE11WTI5c2IzSnpMbTFsWkdsMWJVeHBaMmgwS1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdkR2hwY3k1d1lXUXVjMlYwUVhSMGNtbGlkWFJsS0NkbWFXeHNKeXdnZEdocGN5NWpiMnh2Y25NdVlXTmpaVzUwS1R0Y2JpQWdJQ0FnSUhSb2FYTXVjR0ZrTG5ObGRFRjBkSEpwWW5WMFpTZ25jM1J5YjJ0bEp5d2dkR2hwY3k1amIyeHZjbk11WVdOalpXNTBLVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0JrYjNkdUtIQmhhVzUwWW5KMWMyZ3BJSHRjYmlBZ0lDQnpkMmwwWTJnZ0tIUm9hWE11Ylc5a1pTa2dlMXh1SUNBZ0lDQWdZMkZ6WlNBbmFXMXdkV3h6WlNjNlhHNGdJQ0FnSUNBZ0lIUm9hWE11ZEhWeWJrOXVLQ2s3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG5ScGJXVnZkWFFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQmpiR1ZoY2xScGJXVnZkWFFvZEdocGN5NTBhVzFsYjNWMEtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0IwYUdsekxuUnBiV1Z2ZFhRZ1BTQnpaWFJVYVcxbGIzVjBLSFJvYVhNdWRIVnliazltWmk1aWFXNWtLSFJvYVhNcExETXdLVHRjYmlBZ0lDQXZMeUFnSUNCMGFHbHpMbVZ0YVhRb0oyTm9ZVzVuWlNjc2RHaHBjeTV6ZEdGMFpTazdYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ1kyRnpaU0FuWW5WMGRHOXVKenBjYmlBZ0lDQWdJQ0FnZEdocGN5NTBkWEp1VDI0b0tUdGNiaUFnSUNBdkx5QWdJQ0IwYUdsekxtVnRhWFFvSjJOb1lXNW5aU2NzZEdocGN5NXpkR0YwWlNrN1hHNGdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnWTJGelpTQW5ZV1owWlhKMGIzVmphQ2M2WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjRzl6YVhScGIyNGdQU0I3WEc0Z0lDQWdJQ0FnSUNBZ2VEb2diV0YwYUM1amJHbHdLSFJvYVhNdWJXOTFjMlV1ZUNBdklIUm9hWE11ZDJsa2RHZ3NNQ3d4S1N4Y2JpQWdJQ0FnSUNBZ0lDQjVPaUJ0WVhSb0xtTnNhWEFvTVMxMGFHbHpMbTF2ZFhObExua2dMeUIwYUdsekxtaGxhV2RvZEN3d0xERXBYRzRnSUNBZ0lDQWdJSDA3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVkSFZ5Yms5dUtDazdYRzRnSUNBZ0x5OGdJQ0FnZEdocGN5NWxiV2wwS0NkamFHRnVaMlVuTEh0Y2JpQWdJQ0F2THlBZ0lDQWdJSE4wWVhSbE9pQjBhR2x6TG5OMFlYUmxMRnh1SUNBZ0lDOHZJQ0FnSUNBZ2VEb2dkR2hwY3k1d2IzTnBkR2x2Ymk1NExGeHVJQ0FnSUM4dklDQWdJQ0FnZVRvZ2RHaHBjeTV3YjNOcGRHbHZiaTU1TEZ4dUlDQWdJQzh2SUNBZ0lIMHBPMXh1SUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lHTmhjMlVnSjNSdloyZHNaU2M2WEc0Z0lDQWdJQ0FnSUhSb2FYTXVabXhwY0Nod1lXbHVkR0p5ZFhOb0tUdGNiaUFnSUNBdkx5QWdJQ0IwYUdsekxtVnRhWFFvSjJOb1lXNW5aU2NzZEdocGN5NXpkR0YwWlNrN1hHNGdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDFjYmx4dUlDQjlYRzVjYmlBZ1ltVnVaQ2h0YjNWelpTa2dlMXh1SUNBZ0lHbG1JQ2gwYUdsekxtMXZaR1U5UFQwbllXWjBaWEowYjNWamFDY3BJSHRjYmlBZ0lDQWdJSFJvYVhNdWJXOTFjMlVnUFNCdGIzVnpaU0I4ZkNCMGFHbHpMbTF2ZFhObE8xeHVJQ0FnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiaUE5SUh0Y2JpQWdJQ0FnSUNBZ2VEb2diV0YwYUM1amJHbHdLSFJvYVhNdWJXOTFjMlV1ZUNBdklIUm9hWE11ZDJsa2RHZ3NNQ3d4S1N4Y2JpQWdJQ0FnSUNBZ2VUb2diV0YwYUM1amJHbHdLREVnTFNCMGFHbHpMbTF2ZFhObExua2dMeUIwYUdsekxtaGxhV2RvZEN3d0xERXBYRzRnSUNBZ0lDQjlPMXh1SUNBZ0lDQWdkR2hwY3k1bGJXbDBLQ2RqYUdGdVoyVW5MSHRjYmlBZ0lDQWdJQ0FnYzNSaGRHVTZJSFJvYVhNdWMzUmhkR1VzWEc0Z0lDQWdJQ0FnSUhnNklIUm9hWE11Y0c5emFYUnBiMjR1ZUN4Y2JpQWdJQ0FnSUNBZ2VUb2dkR2hwY3k1d2IzTnBkR2x2Ymk1NUxGeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQjBhR2x6TG5KbGJtUmxjaWdwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhWd0tDa2dlMXh1SUNBZ0lITjNhWFJqYUNBb2RHaHBjeTV0YjJSbEtTQjdYRzRnSUNBZ0lDQmpZWE5sSUNkaWRYUjBiMjRuT2x4dUlDQWdJQ0FnSUNCMGFHbHpMblIxY201UFptWW9LVHRjYmlBZ0lDQWdJQzh2SUNCMGFHbHpMbVZ0YVhRb0oyTm9ZVzVuWlNjc2RHaHBjeTV6ZEdGMFpTazdYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ1kyRnpaU0FuWVdaMFpYSjBiM1ZqYUNjNlhHNGdJQ0FnSUNBZ0lIUm9hWE11ZEhWeWJrOW1aaWdwTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbkJ2YzJsMGFXOXVJRDBnZTF4dUlDQWdJQ0FnSUNBZ0lIZzZJRzFoZEdndVkyeHBjQ2gwYUdsekxtMXZkWE5sTG5nZ0x5QjBhR2x6TG5kcFpIUm9MREFzTVNrc1hHNGdJQ0FnSUNBZ0lDQWdlVG9nYldGMGFDNWpiR2x3S0RFZ0xTQjBhR2x6TG0xdmRYTmxMbmtnTHlCMGFHbHpMbWhsYVdkb2RDd3dMREVwWEc0Z0lDQWdJQ0FnSUgwN1hHNGdJQ0FnSUNBdkx5QWdkR2hwY3k1bGJXbDBLQ2RqYUdGdVoyVW5MSHRjYmlBZ0lDQWdJQzh2SUNBZ0lITjBZWFJsT2lCMGFHbHpMbk4wWVhSbExGeHVJQ0FnSUNBZ0x5OGdJQ0FnZURvZ2RHaHBjeTV3YjNOcGRHbHZiaTU0TEZ4dUlDQWdJQ0FnTHk4Z0lDQWdlVG9nZEdocGN5NXdiM05wZEdsdmJpNTVMRnh1SUNBZ0lDQWdMeThnSUgwcE8xeHVJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBdktpQnZkbVZ5ZDNKcGRHRmliR1VnYVc1MFpYSmhZM1JwYjI0Z2FHRnVaR3hsY25NZ0tpOWNibHh1SUNCamJHbGpheWdwSUh0Y2JpQWdJQ0IwYUdsekxtUnZkMjRvS1R0Y2JpQWdmVnh1SUNCdGIzWmxLQ2tnZTF4dUlDQWdJSFJvYVhNdVltVnVaQ2dwTzF4dUlDQjlYRzRnSUhKbGJHVmhjMlVvS1NCN1hHNGdJQ0FnZEdocGN5NTFjQ2dwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUZkb1pYUm9aWElnZEdobElHSjFkSFJ2YmlCcGN5QnZiaUFvY0hKbGMzTmxaQ2tnYjNJZ2IyWm1JQ2h1YjNRZ2NISmxjM05sWkNsY2JpQWdRSFI1Y0dVZ2UySnZiMnhsWVc1OVhHNGdJRUJsZUdGdGNHeGxJR0oxZEhSdmJpNXpkR0YwWlNBOUlIUnlkV1U3WEc0Z0lDb3ZYRzRnSUdkbGRDQnpkR0YwWlNncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWZjM1JoZEdVdWMzUmhkR1U3WEc0Z0lIMWNiaUFnYzJWMElITjBZWFJsS0haaGJIVmxLU0I3WEc0Z0lDQWdkR2hwY3k1ZmMzUmhkR1V1Wm14cGNDaDJZV3gxWlNrN1hHNGdJQ0FnYVdZZ0tIUm9hWE11Ylc5a1pUMDlQU2RoWm5SbGNuUnZkV05vSnlrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVsYldsMEtDZGphR0Z1WjJVbkxIdGNiaUFnSUNBZ0lDQWdjM1JoZEdVNklIUm9hWE11YzNSaGRHVXNYRzRnSUNBZ0lDQWdJSGc2SUhSb2FYTXVjRzl6YVhScGIyNHVlQ3hjYmlBZ0lDQWdJQ0FnZVRvZ2RHaHBjeTV3YjNOcGRHbHZiaTU1TEZ4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSFJvYVhNdVpXMXBkQ2duWTJoaGJtZGxKeXgwYUdsekxuTjBZWFJsS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdkR2hwY3k1eVpXNWtaWElvS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNCRGFHRnVaMlVnZEdobElHSjFkSFJ2YmlCMGJ5QnBkSE1nWVd4MFpYSnVZWFJsSUhOMFlYUmxJQ2h2Wm1ZOVBtOXVMQ0J2YmowK2IyWm1LU3dnYjNJZ1pteHBjQ0JwZENCMGJ5QmhJSE53WldOcFptbGxaQ0J6ZEdGMFpTNWNiaUFnUUhCaGNtRnRJSFpoYkhWbElIdGliMjlzWldGdWZTQW9UM0IwYVc5dVlXd3BJRk4wWVhSbElIUnZJR1pzYVhBZ2RHOHVYRzRnSUVCbGVHRnRjR3hsSUdKMWRIUnZiaTVtYkdsd0tDazdYRzRnSUNvdlhHNGdJR1pzYVhBb2RtRnNkV1VwSUh0Y2JpQWdJQ0IwYUdsekxsOXpkR0YwWlM1bWJHbHdLSFpoYkhWbEtUdGNiaUFnSUNCcFppQW9kR2hwY3k1dGIyUmxQVDA5SjJGbWRHVnlkRzkxWTJnbktTQjdYRzRnSUNBZ0lDQjBhR2x6TG1WdGFYUW9KMk5vWVc1blpTY3NlMXh1SUNBZ0lDQWdJQ0J6ZEdGMFpUb2dkR2hwY3k1emRHRjBaU3hjYmlBZ0lDQWdJQ0FnZURvZ2RHaHBjeTV3YjNOcGRHbHZiaTU0TEZ4dUlDQWdJQ0FnSUNCNU9pQjBhR2x6TG5CdmMybDBhVzl1TG5rc1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnZEdocGN5NWxiV2wwS0NkamFHRnVaMlVuTEhSb2FYTXVjM1JoZEdVcE8xeHVJQ0FnSUgxY2JpQWdJQ0IwYUdsekxuSmxibVJsY2lncE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lGUjFjbTRnZEdobElHSjFkSFJ2YmlkeklITjBZWFJsSUhSdklIUnlkV1V1WEc0Z0lFQmxlR0Z0Y0d4bElHSjFkSFJ2Ymk1MGRYSnVUMjRvS1R0Y2JpQWdLaTljYmlBZ2RIVnliazl1S0dWdGFYUjBhVzVuS1NCN1hHNGdJQ0FnZEdocGN5NWZjM1JoZEdVdWIyNG9LVHRjYmlBZ0lDQnBaaUFvWlcxcGRIUnBibWNoUFQxbVlXeHpaU2tnZTF4dUlDQWdJQ0FnYVdZZ0tIUm9hWE11Ylc5a1pUMDlQU2RoWm5SbGNuUnZkV05vSnlrZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG1WdGFYUW9KMk5vWVc1blpTY3NlMXh1SUNBZ0lDQWdJQ0FnSUhOMFlYUmxPaUIwYUdsekxuTjBZWFJsTEZ4dUlDQWdJQ0FnSUNBZ0lIZzZJSFJvYVhNdWNHOXphWFJwYjI0dWVDeGNiaUFnSUNBZ0lDQWdJQ0I1T2lCMGFHbHpMbkJ2YzJsMGFXOXVMbmtzWEc0Z0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVsYldsMEtDZGphR0Z1WjJVbkxIUm9hWE11YzNSaGRHVXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCMGFHbHpMbkpsYm1SbGNpZ3BPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJRlIxY200Z2RHaGxJR0oxZEhSdmJpZHpJSE4wWVhSbElIUnZJR1poYkhObExseHVJQ0JBWlhoaGJYQnNaU0JpZFhSMGIyNHVkSFZ5Yms5bVppZ3BPMXh1SUNBcUwxeHVJQ0IwZFhKdVQyWm1LR1Z0YVhSMGFXNW5LU0I3WEc0Z0lDQWdkR2hwY3k1ZmMzUmhkR1V1YjJabUtDazdYRzRnSUNBZ2FXWWdLR1Z0YVhSMGFXNW5JVDA5Wm1Gc2MyVXBJSHRjYmlBZ0lDQWdJR2xtSUNoMGFHbHpMbTF2WkdVOVBUMG5ZV1owWlhKMGIzVmphQ2NwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVsYldsMEtDZGphR0Z1WjJVbkxIdGNiaUFnSUNBZ0lDQWdJQ0J6ZEdGMFpUb2dkR2hwY3k1emRHRjBaU3hjYmlBZ0lDQWdJQ0FnSUNCNE9pQjBhR2x6TG5CdmMybDBhVzl1TG5nc1hHNGdJQ0FnSUNBZ0lDQWdlVG9nZEdocGN5NXdiM05wZEdsdmJpNTVMRnh1SUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVaVzFwZENnblkyaGhibWRsSnl4MGFHbHpMbk4wWVhSbEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnZEdocGN5NXlaVzVrWlhJb0tUdGNiaUFnZlZ4dVhHNTlYRzVjYmx4dVhHNHZMeUJYUlVKUVFVTkxJRVpQVDFSRlVpQXZMMXh1THk4Z0xpOStMMnB6YUdsdWRDMXNiMkZrWlhJaExpOXNhV0l2WTI5dGNHOXVaVzUwY3k5aWRYUjBiMjUwWlcxd2JHRjBaUzVxY3lJc0lpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWJHVjBJRUoxZEhSdmJsUmxiWEJzWVhSbElEMGdjbVZ4ZFdseVpTZ25MaTR2WTI5dGNHOXVaVzUwY3k5aWRYUjBiMjUwWlcxd2JHRjBaU2NwTzF4dVhHNHZLaXBjYmlvZ1ZHVjRkRUoxZEhSdmJseHVLbHh1S2lCQVpHVnpZM0pwY0hScGIyNGdWR1Y0ZENCaWRYUjBiMjVjYmlwY2Jpb2dRR1JsYlc4Z1BITndZVzRnYm1WNGRYTXRkV2s5WENKMFpYaDBRblYwZEc5dVhDSStQQzl6Y0dGdVBseHVLbHh1S2lCQVpYaGhiWEJzWlZ4dUtpQjJZWElnZEdWNGRHSjFkSFJ2YmlBOUlHNWxkeUJPWlhoMWN5NVVaWGgwUW5WMGRHOXVLQ2NqZEdGeVoyVjBKeWxjYmlwY2Jpb2dRR1Y0WVcxd2JHVmNiaW9nZG1GeUlIUmxlSFJpZFhSMGIyNGdQU0J1WlhjZ1RtVjRkWE11VkdWNGRFSjFkSFJ2YmlnbkkzUmhjbWRsZENjc2UxeHVLaUFnSUNBZ0ozTnBlbVVuT2lCYk1UVXdMRFV3WFN4Y2Jpb2dJQ0FnSUNkemRHRjBaU2M2SUdaaGJITmxMRnh1S2lBZ0lDQWdKM1JsZUhRbk9pQW5VR3hoZVNjc1hHNHFJQ0FnSUNBbllXeDBaWEp1WVhSbFZHVjRkQ2M2SUNkVGRHOXdKMXh1S2lCOUtWeHVLbHh1S2lCQWIzVjBjSFYwWEc0cUlHTm9ZVzVuWlZ4dUtpQkdhWEpsY3lCaGJua2dkR2x0WlNCMGFHVWdhVzUwWlhKbVlXTmxKM01nZG1Gc2RXVWdZMmhoYm1kbGN5NGdQR0p5UGx4dUtpQlVhR1VnWlhabGJuUWdaR0YwWVNCcGN5QmhJRHhwUG5OMGNtbHVaend2YVQ0Z2IyWWdkR2hsSUhSbGVIUWdiMjRnZEdobElHSjFkSFJ2YmlCaGRDQjBhR1VnYlc5dFpXNTBJR2wwSUhkaGN5QmpiR2xqYTJWa0xseHVLbHh1S2lCQWIzVjBjSFYwWlhoaGJYQnNaVnh1S2lCMFpYaDBZblYwZEc5dUxtOXVLQ2RqYUdGdVoyVW5MR1oxYm1OMGFXOXVLSFlwSUh0Y2Jpb2dJQ0JqYjI1emIyeGxMbXh2WnloMktUdGNiaW9nZlNsY2JpcGNiaW92WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdOc1lYTnpJRlJsZUhSQ2RYUjBiMjRnWlhoMFpXNWtjeUJDZFhSMGIyNVVaVzF3YkdGMFpTQjdYRzVjYmlBZ1kyOXVjM1J5ZFdOMGIzSW9LU0I3WEc1Y2JpQWdJQ0JzWlhRZ2IzQjBhVzl1Y3lBOUlGc25kbUZzZFdVblhUdGNibHh1SUNBZ0lHeGxkQ0JrWldaaGRXeDBjeUE5SUh0Y2JpQWdJQ0FnSUNkemFYcGxKem9nV3pFMU1DdzFNRjBzWEc0Z0lDQWdJQ0FuYzNSaGRHVW5PaUJtWVd4elpTeGNiaUFnSUNBZ0lDZDBaWGgwSnpvZ0oxQnNZWGtuWEc0Z0lDQWdmVHRjYmx4dUlDQWdJSE4xY0dWeUtHRnlaM1Z0Wlc1MGN5eHZjSFJwYjI1ekxHUmxabUYxYkhSektUdGNibHh1SUNBZ0lIUm9hWE11WDNSbGVIUWdQU0IwYUdsekxuTmxkSFJwYm1kekxuUmxlSFE3WEc1Y2JpQWdJQ0JwWmloMGFHbHpMbk5sZEhScGJtZHpMbUZzZEdWeWJtRjBaU2w3SUM4dlZFOUVUem9nVW1WdGIzWmxJSFJvYVhNZ1kyOXVaR2wwYVc5dVlXd2dhVzRnWVNCaWNtVmhhMmx1WnkxamFHRnVaMlZ6SUhKbGJHVmhjMlZjYmlBZ0lDQWdJSFJvYVhNdWMyVjBkR2x1WjNNdVlXeDBaWEp1WVhSbFZHVjRkQ0E5SUhSb2FYTXVjMlYwZEdsdVozTXVZV3gwWlhKdVlYUmxPMXh1SUNBZ0lDQWdZMjl1YzI5c1pTNTNZWEp1S0Z3aUoyRnNkR1Z5Ym1GMFpTY2dhVzVwZEdsaGRHOXlJR2x6SUdSbGNISmxZMkYwWldRdUlGVnpaU0FuWVd4MFpYSnVZWFJsVkdWNGRDY2dhVzV6ZEdWaFpDNWNJaWs3WEc0Z0lDQWdmVnh1SUNBZ0lIUm9hWE11WDJGc2RHVnlibUYwWlZSbGVIUWdQU0IwYUdsekxuTmxkSFJwYm1kekxtRnNkR1Z5Ym1GMFpWUmxlSFE3WEc0Z0lDQWdkR2hwY3k1dGIyUmxJRDBnS0hSb2FYTXVjMlYwZEdsdVozTXVZV3gwWlhKdVlYUmxWR1Y0ZENrZ1B5QW5kRzluWjJ4bEp5QTZJQ2RpZFhSMGIyNG5PMXh1SUNBZ0lIUm9hWE11YVc1cGRDZ3BPMXh1SUNBZ0lIUm9hWE11Y21WdVpHVnlLQ2s3WEc1Y2JpQWdJQ0IwYUdsekxuTjBZWFJsSUQwZ2RHaHBjeTV6WlhSMGFXNW5jeTV6ZEdGMFpUdGNibHh1SUNCOVhHNWNiaUFnWW5WcGJHUkdjbUZ0WlNncElIdGNibHh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkQ0E5SUdSdlkzVnRaVzUwTG1OeVpXRjBaVVZzWlcxbGJuUW9KMlJwZGljcE8xeHVJQ0FnSUhSb2FYTXVjR0Z5Wlc1MExtRndjR1Z1WkVOb2FXeGtLSFJvYVhNdVpXeGxiV1Z1ZENrN1hHNWNiaUFnSUNCMGFHbHpMblJsZUhSRmJHVnRaVzUwSUQwZ1pHOWpkVzFsYm5RdVkzSmxZWFJsUld4bGJXVnVkQ2duWkdsMkp5azdYRzRnSUNBZ2RHaHBjeTUwWlhoMFJXeGxiV1Z1ZEM1cGJtNWxja2hVVFV3Z1BTQjBhR2x6TGw5MFpYaDBPMXh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkQzVoY0hCbGJtUkRhR2xzWkNoMGFHbHpMblJsZUhSRmJHVnRaVzUwS1R0Y2JpQWdmVnh1WEc0Z0lHSjFhV3hrU1c1MFpYSm1ZV05sS0NrZ2UxeHVYRzRnSUgxY2JseHVJQ0JqYjJ4dmNrbHVkR1Z5Wm1GalpTZ3BJSHRjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1YzNSNWJHVXVZMjlzYjNJZ1BTQjBhR2x6TG1OdmJHOXljeTVrWVhKck8xeHVJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtDazdYRzRnSUgxY2JseHVJQ0J6YVhwbFNXNTBaWEptWVdObEtDa2dlMXh1SUNBZ0lDQWdiR1YwSUhSbGVIUnphWHBsSUQwZ2RHaHBjeTVvWldsbmFIUXZNenRjYmlBZ0lDQWdJR3hsZENCMFpYaDBjMmw2WlRJZ1BTQW9kR2hwY3k1M2FXUjBhQ0F2SUNoMGFHbHpMbDkwWlhoMExteGxibWQwYUNBcklESXBJQ2s3WEc0Z0lDQWdJQ0IwWlhoMGMybDZaU0E5SUUxaGRHZ3ViV2x1S0hSbGVIUnphWHBsTEhSbGVIUnphWHBsTWlrN1hHNGdJQ0FnSUNCcFppQW9kR2hwY3k1aGJIUmxjbTVoZEdWVVpYaDBLU0I3WEc0Z0lDQWdJQ0FnSUd4bGRDQjBaWGgwYzJsNlpUTWdQU0FvZEdocGN5NTNhV1IwYUNBdklDaDBhR2x6TG1Gc2RHVnlibUYwWlZSbGVIUXViR1Z1WjNSb0lDc2dNaWtnS1R0Y2JpQWdJQ0FnSUNBZ2RHVjRkSE5wZW1VZ1BTQk5ZWFJvTG0xcGJpaDBaWGgwYzJsNlpTeDBaWGgwYzJsNlpUTXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdiR1YwSUhOMGVXeGxjeUE5SUNkM2FXUjBhRG9nSnlBcklIUm9hWE11ZDJsa2RHZ2dLeUFuY0hnN0p6dGNiaUFnSUNBZ0lITjBlV3hsY3lBclBTQW5hR1ZwWjJoME9pQW5JQ3NnZEdocGN5NW9aV2xuYUhRZ0t5QW5jSGc3Snp0Y2JpQWdJQ0FnSUhOMGVXeGxjeUFyUFNBbmNHRmtaR2x1WnpvZ0p5c29kR2hwY3k1b1pXbG5hSFF0ZEdWNGRITnBlbVVwTHpJckozQjRJREJ3ZURzbk8xeHVJQ0FnSUNBZ2MzUjViR1Z6SUNzOUlDZGliM2d0YzJsNmFXNW5PaUJpYjNKa1pYSXRZbTk0T3ljN1hHNGdJQ0FnSUNCemRIbHNaWE1nS3owZ0ozUmxlSFF0WVd4cFoyNDZJR05sYm5SbGNqc25PMXh1SUNBZ0lDQWdjM1I1YkdWeklDczlJQ2RtYjI1MExXWmhiV2xzZVRvZ2FXNW9aWEpwZERzbk8xeHVJQ0FnSUNBZ2MzUjViR1Z6SUNzOUlDZG1iMjUwTFhkbGFXZG9kRG9nTnpBd095YzdYRzRnSUNBZ0lDQnpkSGxzWlhNZ0t6MGdKMjl3WVdOcGRIazZJREU3Snp0Y2JpQWdJQ0FnSUhOMGVXeGxjeUFyUFNBblptOXVkQzF6YVhwbE9pY2dLeUIwWlhoMGMybDZaU0FySUNkd2VEc25PMXh1SUNBZ0lDQWdkR2hwY3k1MFpYaDBSV3hsYldWdWRDNXpkSGxzWlM1amMzTlVaWGgwSUQwZ2MzUjViR1Z6TzF4dUlDQWdJQ0FnZEdocGN5NXlaVzVrWlhJb0tUdGNiaUFnZlZ4dVhHNGdJSEpsYm1SbGNpZ3BJSHRjYmlBZ0lDQnBaaUFvSVhSb2FYTXVjM1JoZEdVcElIdGNiaUFnSUNBZ0lIUm9hWE11Wld4bGJXVnVkQzV6ZEhsc1pTNWlZV05yWjNKdmRXNWtRMjlzYjNJZ1BTQjBhR2x6TG1OdmJHOXljeTVtYVd4c08xeHVJQ0FnSUNBZ2RHaHBjeTUwWlhoMFJXeGxiV1Z1ZEM1emRIbHNaUzVqYjJ4dmNpQTlJSFJvYVhNdVkyOXNiM0p6TG1SaGNtczdYRzRnSUNBZ0lDQjBhR2x6TG5SbGVIUkZiR1Z0Wlc1MExtbHVibVZ5U0ZSTlRDQTlJSFJvYVhNdVgzUmxlSFE3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lIUm9hWE11Wld4bGJXVnVkQzV6ZEhsc1pTNWlZV05yWjNKdmRXNWtRMjlzYjNJZ1BTQjBhR2x6TG1OdmJHOXljeTVoWTJObGJuUTdYRzRnSUNBZ0lDQjBhR2x6TG5SbGVIUkZiR1Z0Wlc1MExuTjBlV3hsTG1OdmJHOXlJRDBnZEdocGN5NWpiMnh2Y25NdVptbHNiRHRjYmlBZ0lDQWdJR2xtSUNoMGFHbHpMbUZzZEdWeWJtRjBaVlJsZUhRcElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1MFpYaDBSV3hsYldWdWRDNXBibTVsY2toVVRVd2dQU0IwYUdsekxsOWhiSFJsY201aGRHVlVaWGgwTzF4dUlDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NTBaWGgwUld4bGJXVnVkQzVwYm01bGNraFVUVXdnUFNCMGFHbHpMbDkwWlhoME8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNCVWFHVWdkR1Y0ZENCMGJ5QmthWE53YkdGNUlIZG9aVzRnZEdobElHSjFkSFJ2YmlCcGN5QnBiaUJwZEhNZ1hDSnZibHdpSUhOMFlYUmxMaUJKWmlCelpYUXNJSFJvYVhNZ2NIVjBjeUIwYUdVZ1luVjBkRzl1SUdsdUlGd2lkRzluWjJ4bFhDSWdiVzlrWlM1Y2JpQWdRSFI1Y0dVZ2UxTjBjbWx1WjMxY2JpQWdLaTljYmlBZ1oyVjBJR0ZzZEdWeWJtRjBaVlJsZUhRb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVYMkZzZEdWeWJtRjBaVlJsZUhRN1hHNGdJSDFjYmx4dUlDQnpaWFFnWVd4MFpYSnVZWFJsVkdWNGRDaDBaWGgwS1NCN1hHNGdJQ0FnYVdZZ0tIUmxlSFFwSUh0Y2JpQWdJQ0FnSUhSb2FYTXViVzlrWlNBOUlDZDBiMmRuYkdVbk8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0IwYUdsekxtMXZaR1VnUFNBblluVjBkRzl1Snp0Y2JpQWdJQ0I5WEc0Z0lDQWdkR2hwY3k1ZllXeDBaWEp1WVhSbFZHVjRkQ0E5SUhSbGVIUTdYRzRnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmlBZ2ZWeHVYRzVjYmlBZ0x5b3FYRzRnSUZSb1pTQjBaWGgwSUhSdklHUnBjM0JzWVhrdUlDaEpaaUF1WVd4MFpYSnVZWFJsVkdWNGRDQmxlR2x6ZEhNc0lIUm9aVzRnZEdocGN5QXVkR1Y0ZENCM2FXeHNJRzl1YkhrZ1ltVWdaR2x6Y0d4aGVXVmtJSGRvWlc0Z2RHaGxJR0oxZEhSdmJpQnBjeUJwYmlCcGRITWdYQ0p2Wm1aY0lpQnpkR0YwWlM0cFhHNGdJRUIwZVhCbElIdFRkSEpwYm1kOVhHNGdJQ292WEc0Z0lHZGxkQ0IwWlhoMEtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDkwWlhoME8xeHVJQ0I5WEc1Y2JpQWdjMlYwSUhSbGVIUW9kR1Y0ZENrZ2UxeHVJQ0FnSUhSb2FYTXVYM1JsZUhRZ1BTQjBaWGgwTzF4dUlDQWdJSFJvYVhNdWMybDZaVWx1ZEdWeVptRmpaU2dwTzF4dUlDQWdJSFJvYVhNdWNtVnVaR1Z5S0NrN1hHNGdJSDFjYmx4dVhHNTlYRzVjYmx4dVhHNHZMeUJYUlVKUVFVTkxJRVpQVDFSRlVpQXZMMXh1THk4Z0xpOStMMnB6YUdsdWRDMXNiMkZrWlhJaExpOXNhV0l2YVc1MFpYSm1ZV05sY3k5MFpYaDBZblYwZEc5dUxtcHpJaXdpSjNWelpTQnpkSEpwWTNRbk8xeHVYRzR2TDJ4bGRDQnpkbWNnUFNCeVpYRjFhWEpsS0NjdUxpOTFkR2xzTDNOMlp5Y3BPMXh1YkdWMElFbHVkR1Z5Wm1GalpTQTlJSEpsY1hWcGNtVW9KeTR1TDJOdmNtVXZhVzUwWlhKbVlXTmxKeWs3WEc1c1pYUWdRblYwZEc5dUlEMGdjbVZ4ZFdseVpTZ25MaTR2YVc1MFpYSm1ZV05sY3k5aWRYUjBiMjRuS1R0Y2JseHVMeW9xWEc0cUlGSmhaR2x2UW5WMGRHOXVYRzRxWEc0cUlFQmtaWE5qY21sd2RHbHZiaUJCYmlCaGNuSmhlU0J2WmlCaWRYUjBiMjV6TGlCQ2VTQmtaV1poZFd4MExDQnpaV3hsWTNScGJtY2diMjVsSUdKMWRIUnZiaUIzYVd4c0lHUmxjMlZzWldOMElHRnNiQ0J2ZEdobGNpQmlkWFIwYjI1ekxDQmlkWFFnZEdocGN5QmpZVzRnWW1VZ1kzVnpkRzl0YVhwbFpDQjFjMmx1WnlCMGFHVWdRVkJKSUdKbGJHOTNMbHh1S2x4dUtpQkFaR1Z0YnlBOFpHbDJJRzVsZUhWekxYVnBQVndpVW1Ga2FXOUNkWFIwYjI1Y0lqNDhMMlJwZGo1Y2JpcGNiaW9nUUdWNFlXMXdiR1ZjYmlvZ2RtRnlJSEpoWkdsdlluVjBkRzl1SUQwZ2JtVjNJRTVsZUhWekxsSmhaR2x2UW5WMGRHOXVLQ2NqZEdGeVoyVjBKeWxjYmlwY2Jpb2dRR1Y0WVcxd2JHVmNiaW9nZG1GeUlISmhaR2x2WW5WMGRHOXVJRDBnYm1WM0lFNWxlSFZ6TGxKaFpHbHZRblYwZEc5dUtDY2pkR0Z5WjJWMEp5eDdYRzRxSUNBZ0ozTnBlbVVuT2lCYk1USXdMREkxWFN4Y2Jpb2dJQ0FuYm5WdFltVnlUMlpDZFhSMGIyNXpKem9nTkN4Y2Jpb2dJQ0FuWVdOMGFYWmxKem9nTFRGY2Jpb2dmU2xjYmlwY2Jpb2dRRzkxZEhCMWRGeHVLaUJqYUdGdVoyVmNiaW9nUm1seVpYTWdZVzU1SUhScGJXVWdkR2hsSUdsdWRHVnlabUZqWlNkeklIWmhiSFZsSUdOb1lXNW5aWE11SUR4aWNqNWNiaW9nVkdobElHVjJaVzUwSUdSaGRHRWdZVzRnUEdrK2FXNTBaV2RsY2p3dmFUNHNJSFJvWlNCcGJtUmxlQ0J2WmlCMGFHVWdZblYwZEc5dUlIUm9ZWFFnYVhNZ1kzVnljbVZ1ZEd4NUlHOXVMaUJKWmlCdWJ5QmlkWFIwYjI0Z2FYTWdjMlZzWldOMFpXUXNJSFJvWlNCMllXeDFaU0IzYVd4c0lHSmxJQzB4TGx4dUtseHVLaUJBYjNWMGNIVjBaWGhoYlhCc1pWeHVLaUJ5WVdScGIySjFkSFJ2Ymk1dmJpZ25ZMmhoYm1kbEp5eG1kVzVqZEdsdmJpaDJLU0I3WEc0cUlDQWdZMjl1YzI5c1pTNXNiMmNvZGlrN1hHNHFJSDBwWEc0cVhHNHFMMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5QlNZV1JwYjBKMWRIUnZiaUJsZUhSbGJtUnpJRWx1ZEdWeVptRmpaU0I3WEc1Y2JpQWdZMjl1YzNSeWRXTjBiM0lvS1NCN1hHNWNiaUFnSUNCc1pYUWdiM0IwYVc5dWN5QTlJRnNuZG1Gc2RXVW5YVHRjYmx4dUlDQWdJR3hsZENCa1pXWmhkV3gwY3lBOUlIdGNiaUFnSUNBZ0lDZHphWHBsSnpvZ1d6RXlNQ3d5TlYwc1hHNGdJQ0FnSUNBbmJuVnRZbVZ5VDJaQ2RYUjBiMjV6SnpvZ05DeGNiaUFnSUNBZ0lDZGhZM1JwZG1Vbk9pQXRNVnh1SUNBZ0lIMDdYRzVjYmlBZ0lDQnpkWEJsY2loaGNtZDFiV1Z1ZEhNc2IzQjBhVzl1Y3l4a1pXWmhkV3gwY3lrN1hHNWNiaUFnSUNCMGFHbHpMbUoxZEhSdmJuTWdQU0JiWFR0Y2JpQWdJQ0IwYUdsekxsOXVkVzFpWlhKUFprSjFkSFJ2Ym5NZ1BTQjBhR2x6TG5ObGRIUnBibWR6TG01MWJXSmxjazltUW5WMGRHOXVjenRjYmlBZ0lDQjBhR2x6TG1GamRHbDJaU0E5SUhSb2FYTXVjMlYwZEdsdVozTXVZV04wYVhabE8xeHVYRzRnSUNBZ2RHaHBjeTVwYm1sMEtDazdYRzRnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmx4dUlDQjlYRzVjYmlBZ1luVnBiR1JHY21GdFpTZ3BJSHRjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblFnUFNCa2IyTjFiV1Z1ZEM1amNtVmhkR1ZGYkdWdFpXNTBLQ2RrYVhZbktUdGNiaUFnSUNCMGFHbHpMbkJoY21WdWRDNWhjSEJsYm1SRGFHbHNaQ2gwYUdsekxtVnNaVzFsYm5RcE8xeHVJQ0I5WEc1Y2JpQWdZblZwYkdSSmJuUmxjbVpoWTJVb0tTQjdYRzVjYmlBZ0lDQm1iM0lnS0d4bGRDQnBQVEE3YVR4MGFHbHpMbDl1ZFcxaVpYSlBaa0oxZEhSdmJuTTdhU3NyS1NCN1hHNGdJQ0FnSUNCc1pYUWdZMjl1ZEdGcGJtVnlJRDBnWkc5amRXMWxiblF1WTNKbFlYUmxSV3hsYldWdWRDZ25jM0JoYmljcE8xeHVYRzRnSUNBZ0lDQnNaWFFnWW5WMGRHOXVJRDBnYm1WM0lFSjFkSFJ2YmloamIyNTBZV2x1WlhJc0lIdGNiaUFnSUNBZ0lDQWdJQ0J0YjJSbE9pQW5kRzluWjJ4bEp5eGNiaUFnSUNBZ0lDQWdJQ0JqYjIxd2IyNWxiblE2SUhSeWRXVXNYRzRnSUNBZ0lDQWdJSDBzSUhSb2FYTXVkWEJrWVhSbExtSnBibVFvZEdocGN5eHBLU2s3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVZblYwZEc5dWN5NXdkWE5vS0dKMWRIUnZiaWs3WEc0Z0lDQWdJQ0IwYUdsekxtVnNaVzFsYm5RdVlYQndaVzVrUTJocGJHUW9ZMjl1ZEdGcGJtVnlLVHRjYmlBZ0lDQjlYRzVjYmlBZ2ZWeHVYRzRnSUhOcGVtVkpiblJsY21aaFkyVW9LU0I3WEc1Y2JpQWdJQ0JzWlhRZ1luVjBkRzl1VjJsa2RHZ2dQU0IwYUdsekxuZHBaSFJvSUM4Z2RHaHBjeTVmYm5WdFltVnlUMlpDZFhSMGIyNXpPMXh1SUNBZ0lHeGxkQ0JpZFhSMGIyNUlaV2xuYUhRZ1BTQjBhR2x6TG1obGFXZG9kRHRjYmx4dUlDQWdJR1p2Y2lBb2JHVjBJR2s5TUR0cFBIUm9hWE11WDI1MWJXSmxjazltUW5WMGRHOXVjenRwS3lzcElIdGNiaUFnSUNBZ0lIUm9hWE11WW5WMGRHOXVjMXRwWFM1eVpYTnBlbVVvWW5WMGRHOXVWMmxrZEdnc1luVjBkRzl1U0dWcFoyaDBLVHRjYmlBZ0lDQjlYRzVjYmlBZ2ZWeHVYRzRnSUdOdmJHOXlTVzUwWlhKbVlXTmxLQ2tnZTF4dUlDQWdJR1p2Y2lBb2JHVjBJR2s5TUR0cFBIUm9hWE11WDI1MWJXSmxjazltUW5WMGRHOXVjenRwS3lzcElIdGNiaUFnSUNBZ0lIUm9hWE11WW5WMGRHOXVjMXRwWFM1amIyeHZjbk1nUFNCMGFHbHpMbU52Ykc5eWN6dGNiaUFnSUNBZ0lIUm9hWE11WW5WMGRHOXVjMXRwWFM1eVpXNWtaWElvS1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCMWNHUmhkR1VvYVc1a1pYZ3BJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NWlkWFIwYjI1elcybHVaR1Y0WFM1emRHRjBaU2tnZTF4dUlDQWdJQ0FnZEdocGN5NXpaV3hsWTNRb2FXNWtaWGdwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQjBhR2x6TG1SbGMyVnNaV04wS0NrN1hHNGdJQ0FnZlZ4dUlDQXZMeUFnZEdocGN5NXlaVzVrWlhJb0tUdGNiaUFnZlZ4dVhHNGdJSEpsYm1SbGNpZ3BJSHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBQVEE3YVR4MGFHbHpMbUoxZEhSdmJuTXViR1Z1WjNSb08ya3JLeWtnZTF4dUlDQWdJQ0FnYVdZZ0tHazlQVDEwYUdsekxtRmpkR2wyWlNrZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG1KMWRIUnZibk5iYVYwdWRIVnliazl1S0daaGJITmxLVHRjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdVluVjBkRzl1YzF0cFhTNTBkWEp1VDJabUtHWmhiSE5sS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnVTJWc1pXTjBJRzl1WlNCaWRYUjBiMjRnWVc1a0lHUmxjMlZzWldOMElHRnNiQ0J2ZEdobGNpQmlkWFIwYjI1ekxseHVJQ0JBY0dGeVlXMGdhVzVrWlhnZ2UyNTFiV0psY24wZ1ZHaGxJR2x1WkdWNElHOW1JSFJvWlNCaWRYUjBiMjRnZEc4Z2MyVnNaV04wWEc0Z0lDb3ZYRzRnSUhObGJHVmpkQ2hwYm1SbGVDa2dlMXh1SUNBZ0lHbG1JQ2hwYm1SbGVENDlNQ0FtSmlCcGJtUmxlQ0E4SUhSb2FYTXVZblYwZEc5dWN5NXNaVzVuZEdncElIdGNiaUFnSUNBZ0lIUm9hWE11WVdOMGFYWmxJRDBnYVc1a1pYZzdYRzRnSUNBZ0lDQjBhR2x6TG1WdGFYUW9KMk5vWVc1blpTY3NkR2hwY3k1aFkzUnBkbVVwTzF4dUlDQWdJQ0FnZEdocGN5NXlaVzVrWlhJb0tUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ1JHVnpaV3hsWTNRZ1lXeHNJR0oxZEhSdmJuTXVYRzRnSUNvdlhHNGdJR1JsYzJWc1pXTjBLQ2tnZTF4dUlDQWdJSFJvYVhNdVlXTjBhWFpsSUQwZ0xURTdYRzRnSUNBZ2RHaHBjeTVsYldsMEtDZGphR0Z1WjJVbkxIUm9hWE11WVdOMGFYWmxLVHRjYmlBZ0lDQjBhR2x6TG5KbGJtUmxjaWdwTzF4dUlDQjlYRzVjYmlBZ1oyVjBJRzUxYldKbGNrOW1RblYwZEc5dWN5Z3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVmYm5WdFltVnlUMlpDZFhSMGIyNXpPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUZWd1pHRjBaU0JvYjNjZ2JXRnVlU0JpZFhSMGIyNXpJR0Z5WlNCcGJpQjBhR1VnYVc1MFpYSm1ZV05sWEc0Z0lDQXFJRUJ3WVhKaGJTQWdlMjUxYldKbGNuMGdZblYwZEc5dWN5QkliM2NnYldGdWVTQmlkWFIwYjI1eklHRnlaU0JwYmlCMGFHVWdhVzUwWlhKbVlXTmxYRzRnSUNBcUwxeHVJQ0J6WlhRZ2JuVnRZbVZ5VDJaQ2RYUjBiMjV6S0dKMWRIUnZibk1wSUh0Y2JpQWdJQ0IwYUdsekxsOXVkVzFpWlhKUFprSjFkSFJ2Ym5NZ1BTQmlkWFIwYjI1ek8xeHVJQ0FnSUdadmNpQW9iR1YwSUdrOU1EdHBQSFJvYVhNdVluVjBkRzl1Y3k1c1pXNW5kR2c3YVNzcktTQjdYRzRnSUNBZ0lDQjBhR2x6TG1KMWRIUnZibk5iYVYwdVpHVnpkSEp2ZVNncE8xeHVJQ0FnSUgxY2JpQWdJQ0IwYUdsekxtSjFkSFJ2Ym5NZ1BTQmJYVHRjYmlBZ0x5OGdJR1p2Y2lBb2JHVjBJR2s5TUR0cFBIUm9hWE11WW5WMGRHOXVjeTVzWlc1bmRHZzdhU3NyS1NCN1hHNGdJQzh2SUNBZ0lIUm9hWE11WW5WMGRHOXVjMXRwWFM1a1pYTjBjbTk1S0NrN1hHNGdJQzh2SUNCOVhHNGdJQ0FnZEdocGN5NWxiWEIwZVNncE8xeHVJQ0FnSUhSb2FYTXVZblZwYkdSSmJuUmxjbVpoWTJVb0tUdGNiaUFnZlZ4dVhHNTlYRzVjYmx4dVhHNHZMeUJYUlVKUVFVTkxJRVpQVDFSRlVpQXZMMXh1THk4Z0xpOStMMnB6YUdsdWRDMXNiMkZrWlhJaExpOXNhV0l2YVc1MFpYSm1ZV05sY3k5eVlXUnBiMkoxZEhSdmJpNXFjeUlzSWlkMWMyVWdjM1J5YVdOMEp6dGNibHh1YkdWMElFbHVkR1Z5Wm1GalpTQTlJSEpsY1hWcGNtVW9KeTR1TDJOdmNtVXZhVzUwWlhKbVlXTmxKeWs3WEc1c1pYUWdVM1JsY0NBOUlISmxjWFZwY21Vb0p5NHVMMjF2WkdWc2N5OXpkR1Z3SnlrN1hHNXNaWFFnYldGMGFDQTlJSEpsY1hWcGNtVW9KeTR1TDNWMGFXd3ZiV0YwYUNjcE8xeHVYRzR2S2lwY2Jpb2dUblZ0WW1WeVhHNHFYRzRxSUVCa1pYTmpjbWx3ZEdsdmJpQk9kVzFpWlhJZ2FXNTBaWEptWVdObElIZG9hV05vSUdseklHTnZiblJ5YjJ4c1lXSnNaU0JpZVNCa2NtRm5aMmx1WnlCdmNpQjBlWEJwYm1jdVhHNHFYRzRxSUVCa1pXMXZJRHh6Y0dGdUlHNWxlSFZ6TFhWcFBWd2liblZ0WW1WeVhDSStQQzl6Y0dGdVBseHVLbHh1S2lCQVpYaGhiWEJzWlZ4dUtpQjJZWElnYm5WdFltVnlJRDBnYm1WM0lFNWxlSFZ6TGs1MWJXSmxjaWduSTNSaGNtZGxkQ2NwWEc0cVhHNHFJRUJsZUdGdGNHeGxYRzRxSUhaaGNpQnVkVzFpWlhJZ1BTQnVaWGNnVG1WNGRYTXVUblZ0WW1WeUtDY2pkR0Z5WjJWMEp5eDdYRzRxSUNBZ0ozTnBlbVVuT2lCYk5qQXNNekJkTEZ4dUtpQWdJQ2QyWVd4MVpTYzZJREFzWEc0cUlDQWdKMjFwYmljNklEQXNYRzRxSUNBZ0oyMWhlQ2M2SURJd01EQXdMRnh1S2lBZ0lDZHpkR1Z3SnpvZ01WeHVLaUI5S1Z4dUtseHVLaUJBYjNWMGNIVjBYRzRxSUdOb1lXNW5aVnh1S2lCR2FYSmxjeUJoYm5rZ2RHbHRaU0IwYUdVZ2FXNTBaWEptWVdObEozTWdkbUZzZFdVZ1kyaGhibWRsY3k0Z1BHSnlQbHh1S2lCVWFHVWdaWFpsYm5RZ1pHRjBZU0JwY3lCMGFHVWdiblZ0WW1WeUlIWmhiSFZsSUc5bUlIUm9aU0JwYm5SbGNtWmhZMlV1WEc0cVhHNHFJRUJ2ZFhSd2RYUmxlR0Z0Y0d4bFhHNHFJRzUxYldKbGNpNXZiaWduWTJoaGJtZGxKeXhtZFc1amRHbHZiaWgyS1NCN1hHNHFJQ0FnWTI5dWMyOXNaUzVzYjJjb2RpazdYRzRxSUgwcFhHNHFYRzRxWEc0cUwxeHVYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR05zWVhOeklFNTFiV0psY2lCbGVIUmxibVJ6SUVsdWRHVnlabUZqWlNCN1hHNWNiaUFnWTI5dWMzUnlkV04wYjNJb0tTQjdYRzVjYmlBZ0lDQnNaWFFnYjNCMGFXOXVjeUE5SUZzbmRtRnNkV1VuWFR0Y2JseHVJQ0FnSUd4bGRDQmtaV1poZFd4MGN5QTlJSHRjYmlBZ0lDQWdJQ2R6YVhwbEp6b2dXell3TERNd1hTeGNiaUFnSUNBZ0lDZDJZV3gxWlNjNklEQXNYRzRnSUNBZ0lDQW5iV2x1SnpvZ01DeGNiaUFnSUNBZ0lDZHRZWGduT2lBeU1EQXdNQ3hjYmlBZ0lDQWdJQ2R6ZEdWd0p6b2dNVnh1SUNBZ0lIMDdYRzVjYmlBZ0lDQnpkWEJsY2loaGNtZDFiV1Z1ZEhNc2IzQjBhVzl1Y3l4a1pXWmhkV3gwY3lrN1hHNWNiaUFnSUNCMGFHbHpMbDkyWVd4MVpTQTlJRzVsZHlCVGRHVndLSFJvYVhNdWMyVjBkR2x1WjNNdWJXbHVMSFJvYVhNdWMyVjBkR2x1WjNNdWJXRjRMSFJvYVhNdWMyVjBkR2x1WjNNdWMzUmxjQ3gwYUdsekxuTmxkSFJwYm1kekxuWmhiSFZsS1R0Y2JseHVJQ0FnSUM4cVhHNGdJQ0FnUkdWbVlYVnNkRG9nTWk0Z1NHOTNJRzFoYm5rZ1pHVmphVzFoYkNCd2JHRmpaWE1nZEc4Z1kyeHBjQ0IwYUdVZ2JuVnRZbVZ5SjNNZ2RtbHpkV0ZzSUhKbGJtUmxjbWx1WnlCMGJ5NGdWR2hwY3lCa2IyVnpJRzV2ZENCaFptWmxZM1FnYm5WdFltVnlKM01nWVdOMGRXRnNJSFpoYkhWbElHOTFkSEIxZENBdExTQm1iM0lnZEdoaGRDd2djMlYwSUhSb1pTQnpkR1Z3SUhCeWIzQmxjblI1SUhSdklDNHdNU3dnTGpFc0lHOXlJREV1WEc0Z0lDQWdRSFI1Y0dVZ2UyNTFiV0psY24xY2JpQWdJQ0JBWlhoaGJYQnNaU0J1ZFcxaVpYSXVaR1ZqYVcxaGJGQnNZV05sY3lBOUlESTdYRzRnSUNBZ0tpOWNiaUFnSUNCMGFHbHpMbVJsWTJsdFlXeFFiR0ZqWlhNZ1BTQXlPMXh1SUNBZ0lIUm9hWE11WVdOMGRXRnNJRDBnTUR0Y2JseHVJQ0FnSUhSb2FYTXViV0Y0SUQwZ2RHaHBjeTVmZG1Gc2RXVXViV0Y0TzF4dVhHNGdJQ0FnZEdocGN5NXRhVzRnUFNCMGFHbHpMbDkyWVd4MVpTNXRhVzQ3WEc1Y2JpQWdJQ0IwYUdsekxuTjBaWEFnUFNCMGFHbHpMbDkyWVd4MVpTNXpkR1Z3TzF4dVhHNGdJQ0FnZEdocGN5NXBibWwwS0NrN1hHNGdJQ0FnZEdocGN5NXlaVzVrWlhJb0tUdGNibHh1SUNCOVhHNWNiaUFnWW5WcGJHUkdjbUZ0WlNncElIdGNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUWdQU0JrYjJOMWJXVnVkQzVqY21WaGRHVkZiR1Z0Wlc1MEtDZHBibkIxZENjcE8xeHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNTBlWEJsSUQwZ0ozUmxlSFFuTzF4dVhHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJb0oySnNkWEluTENCbWRXNWpkR2x2YmlBb0tTQjdYRzRnSUZ4MElDQjBhR2x6TG1Wc1pXMWxiblF1YzNSNWJHVXVZbUZqYTJkeWIzVnVaRU52Ykc5eUlEMGdkR2hwY3k1amIyeHZjbk11Wm1sc2JEdGNiaUFnWEhRZ0lIUm9hWE11Wld4bGJXVnVkQzV6ZEhsc1pTNWpiMnh2Y2lBOUlIUm9hWE11WTI5c2IzSnpMbVJoY21zN1hHNGdJRngwSUNCcFppQW9kR2hwY3k1bGJHVnRaVzUwTG5aaGJIVmxJQ0U5UFNCMGFHbHpMblpoYkhWbEtTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWRtRnNkV1VnUFNCd1lYSnpaVVpzYjJGMEtIUm9hWE11Wld4bGJXVnVkQzUyWVd4MVpTazdYRzRnSUNBZ0lDQWdJSFJvYVhNdWNtVnVaR1Z5S0NrN1hHNGdJRngwSUNCOVhHNGdJRngwZlM1aWFXNWtLSFJvYVhNcEtUdGNibHh1WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG1Ga1pFVjJaVzUwVEdsemRHVnVaWElvSjJ0bGVXUnZkMjRuTENCbWRXNWpkR2x2YmlBb1pTa2dlMXh1SUNCY2RDQWdhV1lnS0dVdWQyaHBZMmdnUENBME9DQjhmQ0JsTG5kb2FXTm9JRDRnTlRjcElIdGNiaUFnWEhRZ0lGeDBhV1lnS0dVdWQyaHBZMmdnSVQwOUlERTRPU0FtSmlCbExuZG9hV05vSUNFOVBTQXhPVEFnSmlZZ1pTNTNhR2xqYUNBaFBUMGdPQ2tnZTF4dUlDQmNkQ0FnWEhSY2RHVXVjSEpsZG1WdWRFUmxabUYxYkhRb0tUdGNiaUFnWEhRZ0lGeDBmVnh1SUNCY2RDQWdmVnh1SUNCY2RDQWdhV1lnS0dVdWQyaHBZMmc5UFQweE15a2dlMXh1SUNCY2RDQWdYSFIwYUdsekxtVnNaVzFsYm5RdVlteDFjaWdwTzF4dUlDQWdJQ0FnSUNCMGFHbHpMblpoYkhWbElEMGdkR2hwY3k1bGJHVnRaVzUwTG5aaGJIVmxPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtVnRhWFFvSjJOb1lXNW5aU2NzZEdocGN5NTJZV3gxWlNrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11Y21WdVpHVnlLQ2s3WEc0Z0lGeDBJQ0I5WEc0Z0lGeDBmUzVpYVc1a0tIUm9hWE1wS1R0Y2JseHVJQ0FnSUhSb2FYTXVjR0Z5Wlc1MExtRndjR1Z1WkVOb2FXeGtLSFJvYVhNdVpXeGxiV1Z1ZENrN1hHNWNiaUFnZlZ4dVhHNGdJSE5wZW1WSmJuUmxjbVpoWTJVb0tTQjdYRzVjYmlBZ0lDQjBhR2x6TGw5dGFXNUVhVzFsYm5OcGIyNGdQU0JOWVhSb0xtMXBiaWgwYUdsekxuZHBaSFJvTEhSb2FYTXVhR1ZwWjJoMEtUdGNibHh1SUNBZ0lHeGxkQ0J6ZEhsc1pYTWdQU0FuZDJsa2RHZzZJQ2NnS3lCMGFHbHpMbmRwWkhSb0lDc2dKM0I0T3ljN1hHNGdJQ0FnYzNSNWJHVnpJQ3M5SUNkb1pXbG5hSFE2SUNjZ0t5QjBhR2x6TG1obGFXZG9kQ0FySUNkd2VEc25PMXh1SUNBZ0lITjBlV3hsY3lBclBTQW5ZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMlUzWlRkbE56c25PMXh1SUNBZ0lITjBlV3hsY3lBclBTQW5ZMjlzYjNJNklDTXpNek03Snp0Y2JpQWdJQ0J6ZEhsc1pYTWdLejBnSjJadmJuUXRabUZ0YVd4NU9pQmhjbWxoYkRzbk8xeHVJQ0FnSUhOMGVXeGxjeUFyUFNBblptOXVkQzEzWldsbmFIUTZJRFV3TURzbk8xeHVJQ0FnSUhOMGVXeGxjeUFyUFNBblptOXVkQzF6YVhwbE9pY2dLeUIwYUdsekxsOXRhVzVFYVcxbGJuTnBiMjR2TWlBcklDZHdlRHNuTzF4dUlDQXZMeUFnYzNSNWJHVnpJQ3M5SUNkb2FXZG9iR2xuYUhRNklDTmtNVGc3Snp0Y2JpQWdJQ0J6ZEhsc1pYTWdLejBnSjJKdmNtUmxjam9nYm05dVpUc25PMXh1SUNBZ0lITjBlV3hsY3lBclBTQW5iM1YwYkdsdVpUb2dibTl1WlRzbk8xeHVJQ0FnSUhOMGVXeGxjeUFyUFNBbmNHRmtaR2x1WnpvZ0p5dDBhR2x6TGw5dGFXNUVhVzFsYm5OcGIyNHZOQ3NuY0hnZ0p5dDBhR2x6TGw5dGFXNUVhVzFsYm5OcGIyNHZOQ3NuY0hnN0p6dGNiaUFnSUNCemRIbHNaWE1nS3owZ0oySnZlQzF6YVhwcGJtYzZJR0p2Y21SbGNpMWliM2c3Snp0Y2JpQWdJQ0J6ZEhsc1pYTWdLejBnSjNWelpYSlRaV3hsWTNRNklIUmxlSFE3Snp0Y2JpQWdJQ0J6ZEhsc1pYTWdLejBnSjIxdmVsVnpaWEpUWld4bFkzUTZJSFJsZUhRN0p6dGNiaUFnSUNCemRIbHNaWE1nS3owZ0ozZGxZbXRwZEZWelpYSlRaV3hsWTNRNklIUmxlSFE3Snp0Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdWMzUjViR1V1WTNOelZHVjRkQ0FyUFNCemRIbHNaWE03WEc1Y2JpQWdJQ0F2THlCMGJ5QmhaR1FnWlhabGJuUjFZV3hzZVZ4dUlDQWdJQzh2SUhaaGNpQmpjM01nUFNBbkl5Y3JkR2hwY3k1bGJHVnRaVzUwU1VRckp6bzZjMlZzWldOMGFXOXVleUJpWVdOclozSnZkVzVrTFdOdmJHOXlPaUIwY21GdWMzQmhjbVZ1ZENCOUp6dGNibHh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkQzUyWVd4MVpTQTlJSFJvYVhNdWRtRnNkV1U3WEc1Y2JpQWdmVnh1WEc0Z0lHTnZiRzl5U1c1MFpYSm1ZV05sS0NrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbk4wZVd4bExtSmhZMnRuY205MWJtUkRiMnh2Y2lBOUlIUm9hWE11WTI5c2IzSnpMbVpwYkd3N1hHNGdJQ0FnSUNCMGFHbHpMbVZzWlcxbGJuUXVjM1I1YkdVdVkyOXNiM0lnUFNCMGFHbHpMbU52Ykc5eWN5NWtZWEpyTzF4dUlDQjlYRzVjYmlBZ2NtVnVaR1Z5S0NrZ2UxeHVYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMblpoYkhWbElEMGdiV0YwYUM1d2NuVnVaU2gwYUdsekxuWmhiSFZsTEhSb2FYTXVaR1ZqYVcxaGJGQnNZV05sY3lrN1hHNWNiaUFnZlZ4dVhHNGdJR05zYVdOcktDa2dlMXh1SUNBZ0lIUm9hWE11YUdGelRXOTJaV1FnUFNCbVlXeHpaVHRjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1Y21WaFpFOXViSGtnUFNCMGNuVmxPMXh1WEhRZ0lIUm9hWE11WVdOMGRXRnNJRDBnZEdocGN5NTJZV3gxWlR0Y2JpQWdJQ0IwYUdsekxtbHVhWFJwWVd3Z1BTQjdJSGs2SUhSb2FYTXViVzkxYzJVdWVTQjlPMXh1SUNBZ0lIUm9hWE11WTJoaGJtZGxSbUZqZEc5eUlEMGdiV0YwYUM1cGJuWmxjblFvSUhSb2FYTXViVzkxYzJVdWVDQXZJSFJvYVhNdWQybGtkR2dnS1R0Y2JpQWdJQ0JqYjI1emIyeGxMbXh2WnloMGFHbHpMbU5vWVc1blpVWmhZM1J2Y2lrN1hHNGdJSDFjYmx4dUlDQnRiM1psS0NrZ2UxeHVJQ0FnSUhSb2FYTXVhR0Z6VFc5MlpXUWdQU0IwY25WbE8xeHVJQ0FnSUdsbUlDaDBhR2x6TG1Oc2FXTnJaV1FwSUh0Y2JseHVJQ0FnSUNBZ2JHVjBJRzVsZDNaaGJIVmxJRDBnZEdocGN5NWhZM1IxWVd3Z0xTQW9kR2hwY3k1dGIzVnpaUzU1SUMwZ2RHaHBjeTVwYm1sMGFXRnNMbmtwSUNvZ0tDQnRZWFJvTG1Oc2FYQW9JSFJvYVhNdWJXRjRMWFJvYVhNdWJXbHVMQ0F3TENBeE1EQXdJQ2tnTHlBeU1EQWdLU0FxSUUxaGRHZ3VjRzkzS0hSb2FYTXVZMmhoYm1kbFJtRmpkRzl5TERJcE8xeHVJQ0FnSUNBZ2RHaHBjeTUyWVd4MVpTQTlJRzVsZDNaaGJIVmxPMXh1WEc0Z0lGeDBYSFIwYUdsekxuSmxibVJsY2lncE8xeHVJQ0FnSUNBZ2FXWWdLSFJvYVhNdVgzWmhiSFZsTG1Ob1lXNW5aV1FwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVsYldsMEtDZGphR0Z1WjJVbkxIUm9hWE11ZG1Gc2RXVXBPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lGeDBmVnh1SUNCOVhHNWNiaUFnY21Wc1pXRnpaU2dwSUh0Y2JpQWdJQ0JwWmlBb0lYUm9hWE11YUdGelRXOTJaV1FwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNXlaV0ZrVDI1c2VTQTlJR1poYkhObE8xeHVJQ0JjZEZ4MGRHaHBjeTVsYkdWdFpXNTBMbVp2WTNWektDazdYRzRnSUZ4MFhIUjBhR2x6TG1Wc1pXMWxiblF1YzJWMFUyVnNaV04wYVc5dVVtRnVaMlVvTUN3Z2RHaHBjeTVsYkdWdFpXNTBMblpoYkhWbExteGxibWQwYUNrN1hHNGdJRngwWEhSMGFHbHpMbVZzWlcxbGJuUXVjM1I1YkdVdVltRmphMmR5YjNWdVpFTnZiRzl5SUQwZ2RHaHBjeTVqYjJ4dmNuTXVZV05qWlc1ME8xeHVJQ0JjZEZ4MGRHaHBjeTVsYkdWdFpXNTBMbk4wZVd4bExtTnZiRzl5SUQwZ2RHaHBjeTVqYjJ4dmNuTXViR2xuYUhRN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR1J2WTNWdFpXNTBMbUp2WkhrdVptOWpkWE1vS1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnUTI5dWJtVmpkQ0IwYUdseklHNTFiV0psY2lCcGJuUmxjbVpoWTJVZ2RHOGdZU0JrYVdGc0lHOXlJSE5zYVdSbGNseHVJQ0JBY0dGeVlXMGdlMGx1ZEdWeVptRmpaWDBnWld4bGJXVnVkQ0JGYkdWdFpXNTBJSFJ2SUdOdmJtNWxZM1FnZEc4dVhHNGdJRUJsZUdGdGNHeGxJRzUxYldKbGNpNXNhVzVyS0hOc2FXUmxjaWxjYmlBZ0tpOWNiaUFnYkdsdWF5aGtaWE4wYVc1aGRHbHZiaWtnZTF4dUlDQWdJSFJvYVhNdWJXbHVJRDBnWkdWemRHbHVZWFJwYjI0dWJXbHVPMXh1SUNBZ0lIUm9hWE11YldGNElEMGdaR1Z6ZEdsdVlYUnBiMjR1YldGNE8xeHVJQ0FnSUhSb2FYTXVjM1JsY0NBOUlHUmxjM1JwYm1GMGFXOXVMbk4wWlhBN1hHNGdJQ0FnWkdWemRHbHVZWFJwYjI0dWIyNG9KMk5vWVc1blpTY3NLSFlwSUQwK0lIdGNiaUFnSUNBZ0lIUm9hWE11Y0dGemMybDJaVlZ3WkdGMFpTaDJLVHRjYmlBZ0lDQjlLVHRjYmlBZ0lDQjBhR2x6TG05dUtDZGphR0Z1WjJVbkxDaDJLU0E5UGlCN1hHNGdJQ0FnSUNCa1pYTjBhVzVoZEdsdmJpNTJZV3gxWlNBOUlIWTdYRzRnSUNBZ2ZTazdYRzRnSUNBZ2RHaHBjeTUyWVd4MVpTQTlJR1JsYzNScGJtRjBhVzl1TG5aaGJIVmxPMXh1SUNBdktpQWdjbVYwZFhKdUlIdGNiaUFnSUNBZ0lHeHBjM1JsYm1WeU1Ub2diR2x6ZEdWdVpYSXhMRnh1SUNBZ0lDQWdiR2x6ZEdWdVpYSXlPaUJzYVhOMFpXNWxjaklzWEc0Z0lDQWdJQ0JrWlhOMGNtOTVPaUFvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJR3hwYzNSbGJtVnlNUzV5WlcxdmRtVW9LU0FvYjNJZ2MybHRhV3hoY2lsY2JpQWdJQ0FnSUNBZ2JHbHpkR1Z1WlhJeUxuSmxiVzkyWlNncElDaHZjaUJ6YVcxcGJHRnlLVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMGdLaTljYmlBZ2ZWeHVYRzRnSUhCaGMzTnBkbVZWY0dSaGRHVW9kaWtnZTF4dUlDQWdJSFJvYVhNdVgzWmhiSFZsTG5Wd1pHRjBaU2gyS1R0Y2JpQWdJQ0IwYUdsekxuSmxibVJsY2lncE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lGUm9aU0JwYm5SbGNtWmhZMlVuY3lCamRYSnlaVzUwSUhaaGJIVmxMaUJKWmlCelpYUWdiV0Z1ZFdGc2JIa3NJSGRwYkd3Z2RYQmtZWFJsSUhSb1pTQnBiblJsY21aaFkyVWdZVzVrSUhSeWFXZG5aWElnZEdobElHOTFkSEIxZENCbGRtVnVkQzVjYmlBZ1FIUjVjR1VnZTI1MWJXSmxjbjFjYmlBZ1FHVjRZVzF3YkdVZ2JuVnRZbVZ5TG5aaGJIVmxJRDBnTVRBN1hHNGdJQ292WEc0Z0lHZGxkQ0IyWVd4MVpTZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVmZG1Gc2RXVXVkbUZzZFdVN1hHNGdJSDFjYmlBZ2MyVjBJSFpoYkhWbEtIWXBJSHRjYmlBZ0lDQjBhR2x6TGw5MllXeDFaUzUxY0dSaGRHVW9kaWs3WEc0Z0lDQWdkR2hwY3k1bGJXbDBLQ2RqYUdGdVoyVW5MSFJvYVhNdWRtRnNkV1VwTzF4dUlDQWdJSFJvYVhNdWNtVnVaR1Z5S0NrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ1RHOTNaWElnYkdsdGFYUWdiMllnZEdobElHNTFiV0psY2lkeklHOTFkSEIxZENCeVlXNW5aVnh1SUNCQWRIbHdaU0I3Ym5WdFltVnlmVnh1SUNCQVpYaGhiWEJzWlNCdWRXMWlaWEl1YldsdUlEMGdNVEF3TUR0Y2JpQWdLaTljYmlBZ1oyVjBJRzFwYmlncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWZkbUZzZFdVdWJXbHVPMXh1SUNCOVhHNGdJSE5sZENCdGFXNG9kaWtnZTF4dUlDQWdJSFJvYVhNdVgzWmhiSFZsTG0xcGJpQTlJSFk3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnVlhCd1pYSWdiR2x0YVhRZ2IyWWdkR2hsSUc1MWJXSmxjaWR6SUc5MWRIQjFkQ0J5WVc1blpWeHVJQ0JBZEhsd1pTQjdiblZ0WW1WeWZWeHVJQ0JBWlhoaGJYQnNaU0J1ZFcxaVpYSXViV0Y0SUQwZ01UQXdNRHRjYmlBZ0tpOWNiaUFnWjJWMElHMWhlQ2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1ZmRtRnNkV1V1YldGNE8xeHVJQ0I5WEc0Z0lITmxkQ0J0WVhnb2Rpa2dlMXh1SUNBZ0lIUm9hWE11WDNaaGJIVmxMbTFoZUNBOUlIWTdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdWR2hsSUdsdVkzSmxiV1Z1ZENCMGFHRjBJSFJvWlNCdWRXMWlaWEluY3lCMllXeDFaU0JqYUdGdVoyVnpJR0o1TGx4dUlDQkFkSGx3WlNCN2JuVnRZbVZ5ZlZ4dUlDQkFaWGhoYlhCc1pTQnVkVzFpWlhJdWMzUmxjQ0E5SURVN1hHNGdJQ292WEc0Z0lHZGxkQ0J6ZEdWd0tDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDkyWVd4MVpTNXpkR1Z3TzF4dUlDQjlYRzRnSUhObGRDQnpkR1Z3S0hZcElIdGNiaUFnSUNCMGFHbHpMbDkyWVd4MVpTNXpkR1Z3SUQwZ2RqdGNiaUFnZlZ4dVhHNTlYRzVjYmx4dVhHNHZMeUJYUlVKUVFVTkxJRVpQVDFSRlVpQXZMMXh1THk4Z0xpOStMMnB6YUdsdWRDMXNiMkZrWlhJaExpOXNhV0l2YVc1MFpYSm1ZV05sY3k5dWRXMWlaWEl1YW5NaUxDSW5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JteGxkQ0JKYm5SbGNtWmhZMlVnUFNCeVpYRjFhWEpsS0NjdUxpOWpiM0psTDJsdWRHVnlabUZqWlNjcE8xeHVYRzR2S2lwY2Jpb2dVMlZzWldOMFhHNHFYRzRxSUVCa1pYTmpjbWx3ZEdsdmJpQkVjbTl3Wkc5M2JpQnRaVzUxWEc0cVhHNHFJRUJrWlcxdklEeHpjR0Z1SUc1bGVIVnpMWFZwUFZ3aWMyVnNaV04wWENJK1BDOXpjR0Z1UGx4dUtseHVLaUJBWlhoaGJYQnNaVnh1S2lCMllYSWdjMlZzWldOMElEMGdibVYzSUU1bGVIVnpMbE5sYkdWamRDZ25JM1JoY21kbGRDY3BYRzRxWEc0cUlFQmxlR0Z0Y0d4bFhHNHFJSFpoY2lCelpXeGxZM1FnUFNCdVpYY2dUbVY0ZFhNdVUyVnNaV04wS0NjamRHRnlaMlYwSnl4N1hHNHFJQ0FnSjNOcGVtVW5PaUJiTVRBd0xETXdYU3hjYmlvZ0lDQW5iM0IwYVc5dWN5YzZJRnNuWkdWbVlYVnNkQ2NzSjI5d2RHbHZibk1uWFZ4dUtpQjlLVnh1S2x4dUtpQkFiM1YwY0hWMFhHNHFJR05vWVc1blpWeHVLaUJHYVhKbGN5QmhibmtnZEdsdFpTQjBhR1VnYVc1MFpYSm1ZV05sSjNNZ2RtRnNkV1VnWTJoaGJtZGxjeTRnUEdKeVBseHVLaUJVYUdVZ1pYWmxiblFnWkdGMFlTQnBjeUJoYmlCdlltcGxZM1FnWTI5dWRHRnBibWx1WnlCMGFHVWdkR1Y0ZENCMllXeDFaU0J2WmlCMGFHVWdjMlZzWldOMFpXUWdiM0IwYVc5dUxDQmhjeUIzWld4c0lHRnpJSFJvWlNCdWRXMWxjbWxqSUdsdVpHVjRJRzltSUhSb1pTQnpaV3hsWTNScGIyNHVYRzRxWEc0cUlFQnZkWFJ3ZFhSbGVHRnRjR3hsWEc0cUlITmxiR1ZqZEM1dmJpZ25ZMmhoYm1kbEp5eG1kVzVqZEdsdmJpaDJLU0I3WEc0cUlDQWdZMjl1YzI5c1pTNXNiMmNvZGlrN1hHNHFJSDBwWEc0cVhHNHFYRzRxTDF4dVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHTnNZWE56SUZObGJHVmpkQ0JsZUhSbGJtUnpJRWx1ZEdWeVptRmpaU0I3WEc1Y2JpQWdZMjl1YzNSeWRXTjBiM0lvS1NCN1hHNWNiaUFnSUNCc1pYUWdiM0IwYVc5dWN5QTlJRnNuZG1Gc2RXVW5YVHRjYmx4dUlDQWdJR3hsZENCa1pXWmhkV3gwY3lBOUlIdGNiaUFnSUNBZ0lDQW5jMmw2WlNjNklGc3hNREFzTXpCZExGeHVJQ0FnSUNBZ0lDZHZjSFJwYjI1ekp6b2dXeWRrWldaaGRXeDBKeXduYjNCMGFXOXVjeWRkWEc0Z0lDQWdmVHRjYmx4dUlDQWdJSE4xY0dWeUtHRnlaM1Z0Wlc1MGN5eHZjSFJwYjI1ekxHUmxabUYxYkhSektUdGNibHh1SUNBZ0lIUm9hWE11WDNObGJHVmpkR1ZrU1c1a1pYZ2dQU0F0TVR0Y2JpQWdJQ0IwYUdsekxsOTJZV3gxWlNBOUlHWmhiSE5sTzF4dVhHNGdJQ0FnZEdocGN5NWZiM0IwYVc5dWN5QTlJSFJvYVhNdWMyVjBkR2x1WjNNdWIzQjBhVzl1Y3p0Y2JseHVJQ0FnSUhSb2FYTXVhVzVwZENncE8xeHVJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtDazdYRzVjYmlBZ2ZWeHVYRzRnSUdKMWFXeGtSbkpoYldVb0tTQjdYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBJRDBnWkc5amRXMWxiblF1WTNKbFlYUmxSV3hsYldWdWRDZ25jMlZzWldOMEp5azdYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbk4wZVd4bExtWnZiblJUYVhwbElEMGdkR2hwY3k1b1pXbG5hSFF2TWlzbmNIZ25PMXh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkQzV6ZEhsc1pTNXZkWFJzYVc1bElEMGdKMjV2Ym1Vbk8xeHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNXpkSGxzWlM1b2FXZG9iR2xuYUhRZ1BTQW5ibTl1WlNjN1hHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExuTjBlV3hsTG5kcFpIUm9JRDBnZEdocGN5NTNhV1IwYUNzbmNIZ25PMXh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkQzV6ZEhsc1pTNW9aV2xuYUhRZ1BTQjBhR2x6TG1obGFXZG9kQ3NuY0hnbk8xeHVYRzRnSUNBZ2RHaHBjeTVpYjNWdVpGSmxibVJsY2lBOUlIUm9hWE11Y21WdVpHVnlMbUpwYm1Rb2RHaHBjeWs3WEc1Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdVlXUmtSWFpsYm5STWFYTjBaVzVsY2lnblkyaGhibWRsSnl3Z2RHaHBjeTVpYjNWdVpGSmxibVJsY2lrN1hHNWNiaUFnSUNCMGFHbHpMbkJoY21WdWRDNWhjSEJsYm1SRGFHbHNaQ2gwYUdsekxtVnNaVzFsYm5RcE8xeHVYRzRnSUgxY2JseHVJQ0JoZEhSaFkyaE1hWE4wWlc1bGNuTW9LU0I3WEc1Y2JpQWdmVnh1WEc0Z0lHSjFhV3hrU1c1MFpYSm1ZV05sS0NrZ2UxeHVYRzRnSUNBZ2RHaHBjeTVrWldacGJtVlBjSFJwYjI1ektDazdYRzVjYmlBZ2ZWeHVYRzRnSUdOdmJHOXlTVzUwWlhKbVlXTmxLQ2tnZTF4dUlDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1emRIbHNaUzVpWVdOclozSnZkVzVrUTI5c2IzSWdQU0IwYUdsekxtTnZiRzl5Y3k1bWFXeHNPMXh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkQzV6ZEhsc1pTNWpiMnh2Y2lBOUlIUm9hWE11WTI5c2IzSnpMbVJoY21zN1hHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExuTjBlV3hsTG1KdmNtUmxjaUE5SUNkemIyeHBaQ0F3Y0hnZ0p5dDBhR2x6TG1OdmJHOXljeTV0WldScGRXMU1hV2RvZER0Y2JpQWdmVnh1WEc0Z0lISmxibVJsY2lncElIdGNibHh1SUNBZ0lIUm9hWE11WDNaaGJIVmxJRDBnZEdocGN5NWxiR1Z0Wlc1MExtOXdkR2x2Ym5OYmRHaHBjeTVsYkdWdFpXNTBMbk5sYkdWamRHVmtTVzVrWlhoZExuUmxlSFE3WEc0Z0lDQWdkR2hwY3k1ZmMyVnNaV04wWldSSmJtUmxlQ0E5SUhSb2FYTXVaV3hsYldWdWRDNXpaV3hsWTNSbFpFbHVaR1Y0TzF4dUlDQWdJSFJvYVhNdVpXMXBkQ2duWTJoaGJtZGxKeXg3WEc0Z0lDQWdJQ0IyWVd4MVpUb2dkR2hwY3k1ZmRtRnNkV1VzWEc0Z0lDQWdJQ0JwYm1SbGVEb2dkR2hwY3k1ZmMyVnNaV04wWldSSmJtUmxlRnh1SUNBZ0lIMHBPMXh1WEc0Z0lIMWNibHh1SUNCamJHbGpheWdwSUh0Y2JseHVJQ0I5WEc1Y2JpQWdiVzkyWlNncElIdGNibHh1SUNCOVhHNWNiaUFnY21Wc1pXRnpaU2dwSUh0Y2JseHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRlZ3WkdGMFpTQjBhR1VnYkdsemRDQnZaaUJ2Y0hScGIyNXpMaUJVYUdseklISmxiVzkyWlhNZ1lXeHNJR1Y0YVhOMGFXNW5JRzl3ZEdsdmJuTWdZVzVrSUdOeVpXRjBaWE1nWVNCdVpYY2diR2x6ZENCdlppQnZjSFJwYjI1ekxseHVJQ0FnS2lCQWNHRnlZVzBnSUh0aGNuSmhlWDBnYjNCMGFXOXVjeUJPWlhjZ1lYSnlZWGtnYjJZZ2IzQjBhVzl1YzF4dUlDQWdLaTljYmx4dUlDQmtaV1pwYm1WUGNIUnBiMjV6S0c5d2RHbHZibk1wSUh0Y2JseHVJQ0F2S2lBZ1puVnVZM1JwYjI0Z2NtVnRiM1psVDNCMGFXOXVjeWh6Wld4bFkzUmliM2dwWEc0Z0lDQWdlMXh1SUNBZ0lDQWdJQ0IyWVhJZ2FUdGNiaUFnSUNBZ0lDQWdabTl5S0drZ1BTQnpaV3hsWTNSaWIzZ3ViM0IwYVc5dWN5NXNaVzVuZEdnZ0xTQXhJRHNnYVNBK1BTQXdJRHNnYVMwdEtWeHVJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCelpXeGxZM1JpYjNndWNtVnRiM1psS0drcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUM4dmRYTnBibWNnZEdobElHWjFibU4wYVc5dU9seHVJQ0FnSUhKbGJXOTJaVTl3ZEdsdmJuTW9aRzlqZFcxbGJuUXVaMlYwUld4bGJXVnVkRUo1U1dRb1hDSnRlVk5sYkdWamRFOWlhbVZqZEZ3aUtTazdJQ292WEc1Y2JseHVJQ0FnSUdsbUlDaHZjSFJwYjI1ektTQjdYRzRnSUNBZ0lDQjBhR2x6TGw5dmNIUnBiMjV6SUQwZ2IzQjBhVzl1Y3p0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JtYjNJb2JHVjBJR2s5ZEdocGN5NWxiR1Z0Wlc1MExtOXdkR2x2Ym5NdWJHVnVaM1JvTFRFN0lHa2dQajBnTURzZ2FTMHRLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtVnNaVzFsYm5RdWNtVnRiM1psS0drcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdadmNpaHNaWFFnYVQwd08yazhkR2hwY3k1ZmIzQjBhVzl1Y3k1c1pXNW5kR2c3YVNzcktTQjdYRzRnSUNBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1YjNCMGFXOXVjeTVoWkdRb2JtVjNJRTl3ZEdsdmJpaDBhR2x6TGw5dmNIUnBiMjV6VzJsZExDQnBLU2s3WEc0Z0lDQWdmVnh1WEc0Z0lIMWNibHh1WEc0Z0lDOHFLbHh1SUNCVWFHVWdkR1Y0ZENCdlppQjBhR1VnYjNCMGFXOXVJSFJvWVhRZ2FYTWdZM1Z5Y21WdWRHeDVJSE5sYkdWamRHVmtMaUJKWmlCelpYUXNJSGRwYkd3Z2RYQmtZWFJsSUhSb1pTQnBiblJsY21aaFkyVWdZVzVrSUhSeWFXZG5aWElnZEdobElHOTFkSEIxZENCbGRtVnVkQzVjYmlBZ1FIUjVjR1VnZTFOMGNtbHVaMzFjYmlBZ1FHVjRZVzF3YkdVZ2MyVnNaV04wTG5aaGJIVmxJRDBnWENKellYZDBiMjkwYUZ3aU8xeHVJQ0FxTDF4dUlDQm5aWFFnZG1Gc2RXVW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WDNaaGJIVmxPMXh1SUNCOVhHNGdJSE5sZENCMllXeDFaU2gyS1NCN1hHNGdJQ0FnZEdocGN5NWZkbUZzZFdVZ1BTQjJPMXh1SUNBZ0lHWnZjaWhzWlhRZ2FUMHdPMms4ZEdocGN5NWxiR1Z0Wlc1MExtOXdkR2x2Ym5NdWJHVnVaM1JvTzJrckt5a2dlMXh1SUNBZ0lDQWdhV1lnS0hZZ1BUMDlJSFJvYVhNdVpXeGxiV1Z1ZEM1dmNIUnBiMjV6VzJsZExuUmxlSFFwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV6Wld4bFkzUmxaRWx1WkdWNElEMGdhVHRjYmlBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JseHVJQ0F2S2lwY2JpQWdWR2hsSUc1MWJXVnlhV01nYVc1a1pYZ2diMllnZEdobElHOXdkR2x2YmlCMGFHRjBJR2x6SUdOMWNuSmxiblJzZVNCelpXeGxZM1JsWkM0Z1NXWWdjMlYwTENCM2FXeHNJSFZ3WkdGMFpTQjBhR1VnYVc1MFpYSm1ZV05sSUdGdVpDQjBjbWxuWjJWeUlIUm9aU0J2ZFhSd2RYUWdaWFpsYm5RdVhHNGdJRUIwZVhCbElIdHVkVzFpWlhKOVhHNGdJRUJsZUdGdGNHeGxJSE5sYkdWamRDNXpaV3hsWTNSbFpFbHVaR1Y0SUQwZ01qdGNiaUFnS2k5Y2JpQWdaMlYwSUhObGJHVmpkR1ZrU1c1a1pYZ29LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WDNObGJHVmpkR1ZrU1c1a1pYZzdYRzRnSUgxY2JpQWdjMlYwSUhObGJHVmpkR1ZrU1c1a1pYZ29kaWtnZTF4dUlDQWdJSFJvYVhNdVgzTmxiR1ZqZEdWa1NXNWtaWGdnUFNCMk8xeHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNXpaV3hsWTNSbFpFbHVaR1Y0SUQwZ2RqdGNiaUFnSUNCMGFHbHpMbkpsYm1SbGNpZ3BPMXh1SUNCOVhHNWNiaUFnWTNWemRHOXRSR1Z6ZEhKdmVTZ3BJSHRjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1Y21WdGIzWmxSWFpsYm5STWFYTjBaVzVsY2lnblkyaGhibWRsSnl3Z2RHaHBjeTVpYjNWdVpGSmxibVJsY2lrN1hHNGdJSDFjYmx4dVhHNTlYRzVjYmx4dVhHNHZMeUJYUlVKUVFVTkxJRVpQVDFSRlVpQXZMMXh1THk4Z0xpOStMMnB6YUdsdWRDMXNiMkZrWlhJaExpOXNhV0l2YVc1MFpYSm1ZV05sY3k5elpXeGxZM1F1YW5NaUxDSW5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JteGxkQ0J6ZG1jZ1BTQnlaWEYxYVhKbEtDY3VMaTkxZEdsc0wzTjJaeWNwTzF4dWJHVjBJRzFoZEdnZ1BTQnlaWEYxYVhKbEtDY3VMaTkxZEdsc0wyMWhkR2duS1R0Y2JteGxkQ0JKYm5SbGNtWmhZMlVnUFNCeVpYRjFhWEpsS0NjdUxpOWpiM0psTDJsdWRHVnlabUZqWlNjcE8xeHViR1YwSUZOMFpYQWdQU0J5WlhGMWFYSmxLQ2N1TGk5dGIyUmxiSE12YzNSbGNDY3BPMXh1YVcxd2IzSjBJQ29nWVhNZ1NXNTBaWEpoWTNScGIyNGdabkp2YlNBbkxpNHZkWFJwYkM5cGJuUmxjbUZqZEdsdmJpYzdYRzVjYmk4cUtseHVLaUJFYVdGc1hHNHFYRzRxWEc0cUlFQmtaWE5qY21sd2RHbHZiaUJFYVdGc0lIZHBkR2dnY21Ga2FXRnNJRzl5SUd4cGJtVmhjaUJwYm5SbGNtRmpkR2x2Ymk1Y2JpcGNiaW9nUUdSbGJXOGdQSE53WVc0Z2JtVjRkWE10ZFdrOVhDSmthV0ZzWENJK1BDOXpjR0Z1UGx4dUtseHVLaUJBWlhoaGJYQnNaVnh1S2lCMllYSWdaR2xoYkNBOUlHNWxkeUJPWlhoMWN5NUVhV0ZzS0NjamRHRnlaMlYwSnlsY2JpcGNiaW9nUUdWNFlXMXdiR1ZjYmlvZ2RtRnlJR1JwWVd3Z1BTQnVaWGNnVG1WNGRYTXVSR2xoYkNnbkkzUmhjbWRsZENjc2UxeHVLaUFnSUNkemFYcGxKem9nV3pjMUxEYzFYU3hjYmlvZ0lDQW5hVzUwWlhKaFkzUnBiMjRuT2lBbmNtRmthV0ZzSnl3Z0x5OGdYQ0p5WVdScFlXeGNJaXdnWENKMlpYSjBhV05oYkZ3aUxDQnZjaUJjSW1odmNtbDZiMjUwWVd4Y0lseHVLaUFnSUNkdGIyUmxKem9nSjNKbGJHRjBhWFpsSnl3Z0x5OGdYQ0poWW5OdmJIVjBaVndpSUc5eUlGd2ljbVZzWVhScGRtVmNJbHh1S2lBZ0lDZHRhVzRuT2lBd0xGeHVLaUFnSUNkdFlYZ25PaUF4TEZ4dUtpQWdJQ2R6ZEdWd0p6b2dNQ3hjYmlvZ0lDQW5kbUZzZFdVbk9pQXdYRzRxSUgwcFhHNHFYRzRxSUVCdmRYUndkWFJjYmlvZ1kyaGhibWRsWEc0cUlFWnBjbVZ6SUdGdWVTQjBhVzFsSUhSb1pTQnBiblJsY21aaFkyVW5jeUIyWVd4MVpTQmphR0Z1WjJWekxpQThZbkkrWEc0cUlGUm9aU0JsZG1WdWRDQmtZWFJoSUdseklIUm9aU0J1ZFcxaVpYSWdkbUZzZFdVZ2IyWWdkR2hsSUdsdWRHVnlabUZqWlM1Y2JpcGNiaW9nUUc5MWRIQjFkR1Y0WVcxd2JHVmNiaW9nWkdsaGJDNXZiaWduWTJoaGJtZGxKeXhtZFc1amRHbHZiaWgyS1NCN1hHNHFJQ0FnWTI5dWMyOXNaUzVzYjJjb2RpazdYRzRxSUgwcFhHNHFYRzRxSUVCMGRYUnZjbWxoYkZ4dUtpQkVhV0ZzWEc0cUlIbG5SMDE0Y1Z4dUtseHVLaTljYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnWTJ4aGMzTWdSR2xoYkNCbGVIUmxibVJ6SUVsdWRHVnlabUZqWlNCN1hHNWNiaUFnWTI5dWMzUnlkV04wYjNJb0tTQjdYRzVjYmlBZ0lDQnNaWFFnYjNCMGFXOXVjeUE5SUZzbmJXbHVKeXduYldGNEp5d25kbUZzZFdVblhUdGNibHh1SUNBZ0lHeGxkQ0JrWldaaGRXeDBjeUE5SUh0Y2JpQWdJQ0FnSUNkemFYcGxKem9nV3pjMUxEYzFYU3hjYmlBZ0lDQWdJQ2RwYm5SbGNtRmpkR2x2YmljNklDZHlZV1JwWVd3bkxDQXZMeUJ5WVdScFlXd3NJSFpsY25ScFkyRnNMQ0JvYjNKcGVtOXVkR0ZzWEc0Z0lDQWdJQ0FuYlc5a1pTYzZJQ2R5Wld4aGRHbDJaU2NzSUM4dklHRmljMjlzZFhSbExDQnlaV3hoZEdsMlpWeHVJQ0FnSUNBZ0oyMXBiaWM2SURBc1hHNGdJQ0FnSUNBbmJXRjRKem9nTVN4Y2JpQWdJQ0FnSUNkemRHVndKem9nTUN4Y2JpQWdJQ0FnSUNkMllXeDFaU2M2SURCY2JpQWdJQ0I5TzF4dVhHNGdJQ0FnYzNWd1pYSW9ZWEpuZFcxbGJuUnpMRzl3ZEdsdmJuTXNaR1ZtWVhWc2RITXBPMXh1WEc0Z0lDQWdkR2hwY3k1cGJuUmxjbUZqZEdsdmJpQTlJSFJvYVhNdWMyVjBkR2x1WjNNdWFXNTBaWEpoWTNScGIyNDdYRzVjYmlBZ0lDQjBhR2x6TGw5MllXeDFaU0E5SUc1bGR5QlRkR1Z3S0hSb2FYTXVjMlYwZEdsdVozTXViV2x1TENCMGFHbHpMbk5sZEhScGJtZHpMbTFoZUN3Z2RHaHBjeTV6WlhSMGFXNW5jeTV6ZEdWd0xDQjBhR2x6TG5ObGRIUnBibWR6TG5aaGJIVmxLVHRjYmx4dUlDQWdJSFJvYVhNdWNHOXphWFJwYjI0Z1BTQnVaWGNnU1c1MFpYSmhZM1JwYjI0dVNHRnVaR3hsS0hSb2FYTXVjMlYwZEdsdVozTXViVzlrWlN4MGFHbHpMbWx1ZEdWeVlXTjBhVzl1TEZzd0xIUm9hWE11ZDJsa2RHaGRMRnQwYUdsekxtaGxhV2RvZEN3d1hTazdYRzVjYmlBZ0lDQjBhR2x6TG1sdWFYUW9LVHRjYmx4dUlDQWdJSFJvYVhNdWRtRnNkV1VnUFNCMGFHbHpMbDkyWVd4MVpTNTJZV3gxWlR0Y2JseHVJQ0FnSUhSb2FYTXVjRzl6YVhScGIyNHVkbUZzZFdVZ1BTQjBhR2x6TGw5MllXeDFaUzV1YjNKdFlXeHBlbVZrTzF4dVhHNGdJQ0FnZEdocGN5NXdjbVYyYVc5MWMwRnVaMnhsSUQwZ1ptRnNjMlU3WEc1Y2JpQWdJQ0IwYUdsekxtVnRhWFFvSjJOb1lXNW5aU2NzZEdocGN5NTJZV3gxWlNrN1hHNWNiaUFnZlZ4dVhHNGdJR0oxYVd4a1NXNTBaWEptWVdObEtDa2dlMXh1WEc0Z0lDQWdkR2hwY3k1aVlXTnJaM0p2ZFc1a0lEMGdjM1puTG1OeVpXRjBaU2duWTJseVkyeGxKeWs3WEc0Z0lDQWdkR2hwY3k1elkzSmxkeUE5SUhOMlp5NWpjbVZoZEdVb0oyTnBjbU5zWlNjcE8xeHVJQ0FnSUhSb2FYTXVhR0Z1Wkd4bElEMGdjM1puTG1OeVpXRjBaU2duY0dGMGFDY3BPMXh1SUNBZ0lIUm9hWE11YUdGdVpHeGxNaUE5SUhOMlp5NWpjbVZoZEdVb0ozQmhkR2duS1R0Y2JpQWdJQ0IwYUdsekxtaGhibVJzWlVacGJHd2dQU0J6ZG1jdVkzSmxZWFJsS0Nkd1lYUm9KeWs3WEc0Z0lDQWdkR2hwY3k1b1lXNWtiR1V5Um1sc2JDQTlJSE4yWnk1amNtVmhkR1VvSjNCaGRHZ25LVHRjYmlBZ0lDQjBhR2x6TG1oaGJtUnNaVXhwYm1VZ1BTQnpkbWN1WTNKbFlYUmxLQ2R3WVhSb0p5azdYRzVjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1WVhCd1pXNWtRMmhwYkdRb2RHaHBjeTVpWVdOclozSnZkVzVrS1R0Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdVlYQndaVzVrUTJocGJHUW9kR2hwY3k1b1lXNWtiR1VwTzF4dUlDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1aGNIQmxibVJEYUdsc1pDaDBhR2x6TG1oaGJtUnNaVElwTzF4dUlDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1aGNIQmxibVJEYUdsc1pDaDBhR2x6TG1oaGJtUnNaVVpwYkd3cE8xeHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNWhjSEJsYm1SRGFHbHNaQ2gwYUdsekxtaGhibVJzWlRKR2FXeHNLVHRjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1WVhCd1pXNWtRMmhwYkdRb2RHaHBjeTVvWVc1a2JHVk1hVzVsS1R0Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdVlYQndaVzVrUTJocGJHUW9kR2hwY3k1elkzSmxkeWs3WEc1Y2JpQWdmVnh1WEc1Y2JpQWdjMmw2WlVsdWRHVnlabUZqWlNncElIdGNibHh1SUNBZ0lIUm9hWE11Y0c5emFYUnBiMjR1Y21WemFYcGxLRnN3TEhSb2FYTXVkMmxrZEdoZExGdDBhR2x6TG1obGFXZG9kQ3d3WFNrN1hHNWNiaUFnSUNCc1pYUWdZMlZ1ZEdWeUlEMGdlMXh1SUNBZ0lDQWdlRG9nZEdocGN5NTNhV1IwYUM4eUxGeHVJQ0FnSUNBZ2VUb2dkR2hwY3k1b1pXbG5hSFF2TWx4dUlDQWdJSDA3WEc1Y2JpQWdJQ0JzWlhRZ1pHbGhiV1YwWlhJZ1BTQk5ZWFJvTG0xcGJpaDBhR2x6TG5kcFpIUm9MSFJvYVhNdWFHVnBaMmgwS1R0Y2JseHVJQ0FnSUhSb2FYTXVZbUZqYTJkeWIzVnVaQzV6WlhSQmRIUnlhV0oxZEdVb0oyTjRKeXdnWTJWdWRHVnlMbmdwTzF4dUlDQWdJSFJvYVhNdVltRmphMmR5YjNWdVpDNXpaWFJCZEhSeWFXSjFkR1VvSjJONUp5d2dZMlZ1ZEdWeUxua3BPMXh1SUNBZ0lIUm9hWE11WW1GamEyZHliM1Z1WkM1elpYUkJkSFJ5YVdKMWRHVW9KM0luTENCa2FXRnRaWFJsY2k4eUxXUnBZVzFsZEdWeUx6UXdLVHRjYmx4dUlDQWdJSFJvYVhNdWMyTnlaWGN1YzJWMFFYUjBjbWxpZFhSbEtDZGplQ2NzSUdObGJuUmxjaTU0S1R0Y2JpQWdJQ0IwYUdsekxuTmpjbVYzTG5ObGRFRjBkSEpwWW5WMFpTZ25ZM2tuTENCalpXNTBaWEl1ZVNrN1hHNGdJQ0FnZEdocGN5NXpZM0psZHk1elpYUkJkSFJ5YVdKMWRHVW9KM0luTENCa2FXRnRaWFJsY2k4eE1pazdYRzVjYmlBZ0lDQnNaWFFnZG1Gc2RXVWdQU0IwYUdsekxuWmhiSFZsTzF4dVhHNGdJQ0FnYkdWMElHaGhibVJzWlZCdmFXNTBjeUE5SUh0Y2JpQWdJQ0FnSUhOMFlYSjBPaUJOWVhSb0xsQkpLakV1TlN4Y2JpQWdJQ0FnSUdWdVpEb2diV0YwYUM1amJHbHdLQ0J0WVhSb0xuTmpZV3hsS0haaGJIVmxMREFzTUM0MUxFMWhkR2d1VUVrcU1TNDFMRTFoZEdndVVFa3FNQzQxS1NBc0lFMWhkR2d1VUVrcU1DNDFMQ0JOWVhSb0xsQkpLakV1TlNBcFhHNGdJQ0FnZlR0Y2JpQWdJQ0JzWlhRZ2FHRnVaR3hsTWxCdmFXNTBjeUE5SUh0Y2JpQWdJQ0FnSUhOMFlYSjBPaUJOWVhSb0xsQkpLakl1TlN4Y2JpQWdJQ0FnSUdWdVpEb2diV0YwYUM1amJHbHdLQ0J0WVhSb0xuTmpZV3hsS0haaGJIVmxMREF1TlN3eExFMWhkR2d1VUVrcU1pNDFMRTFoZEdndVVFa3FNUzQxS1NBc0lFMWhkR2d1VUVrcU1TNDFMQ0JOWVhSb0xsQkpLakl1TlNBcFhHNGdJQ0FnZlR0Y2JseHVJQ0FnSUd4bGRDQm9ZVzVrYkdWUVlYUm9JRDBnYzNabkxtRnlZeWhqWlc1MFpYSXVlQ3dnWTJWdWRHVnlMbmtzSUdScFlXMWxkR1Z5THpJdFpHbGhiV1YwWlhJdk5EQXNJR2hoYm1Sc1pWQnZhVzUwY3k1emRHRnlkQ3dnYUdGdVpHeGxVRzlwYm5SekxtVnVaQ2s3WEc0Z0lDQWdiR1YwSUdoaGJtUnNaVEpRWVhSb0lEMGdjM1puTG1GeVl5aGpaVzUwWlhJdWVDd2dZMlZ1ZEdWeUxua3NJR1JwWVcxbGRHVnlMekl0WkdsaGJXVjBaWEl2TkRBc0lHaGhibVJzWlRKUWIybHVkSE11YzNSaGNuUXNJR2hoYm1Sc1pUSlFiMmx1ZEhNdVpXNWtLVHRjYmx4dUlDQWdJSFJvYVhNdWFHRnVaR3hsTG5ObGRFRjBkSEpwWW5WMFpTZ25aQ2NzYUdGdVpHeGxVR0YwYUNrN1hHNGdJQ0FnZEdocGN5NW9ZVzVrYkdVdWMyVjBRWFIwY21saWRYUmxLQ2R6ZEhKdmEyVXRkMmxrZEdnbkxDQmthV0Z0WlhSbGNpOHlNQ2s3WEc0Z0lDQWdkR2hwY3k1b1lXNWtiR1V1YzJWMFFYUjBjbWxpZFhSbEtDZG1hV3hzSnl3Z0oyNXZibVVuS1R0Y2JseHVJQ0FnSUhSb2FYTXVhR0Z1Wkd4bE1pNXpaWFJCZEhSeWFXSjFkR1VvSjJRbkxHaGhibVJzWlRKUVlYUm9LVHRjYmlBZ0lDQjBhR2x6TG1oaGJtUnNaVEl1YzJWMFFYUjBjbWxpZFhSbEtDZHpkSEp2YTJVdGQybGtkR2duTENCa2FXRnRaWFJsY2k4eU1DazdYRzRnSUNBZ2RHaHBjeTVvWVc1a2JHVXlMbk5sZEVGMGRISnBZblYwWlNnblptbHNiQ2NzSUNkdWIyNWxKeWs3WEc1Y2JpQWdJQ0JvWVc1a2JHVlFZWFJvSUNzOUlDY2dUQ0FuSzJObGJuUmxjaTU0S3ljZ0p5dGpaVzUwWlhJdWVUdGNibHh1SUNBZ0lIUm9hWE11YUdGdVpHeGxSbWxzYkM1elpYUkJkSFJ5YVdKMWRHVW9KMlFuTEdoaGJtUnNaVkJoZEdncE8xeHVJQ0FnSUhSb2FYTXVhR0Z1Wkd4bFJtbHNiQzV6WlhSQmRIUnlhV0oxZEdVb0oyWnBiR3d0YjNCaFkybDBlU2NzSUNjd0xqTW5LVHRjYmx4dUlDQWdJR2hoYm1Sc1pUSlFZWFJvSUNzOUlDY2dUQ0FuSzJObGJuUmxjaTU0S3ljZ0p5dGpaVzUwWlhJdWVUdGNibHh1SUNBZ0lIUm9hWE11YUdGdVpHeGxNa1pwYkd3dWMyVjBRWFIwY21saWRYUmxLQ2RrSnl4b1lXNWtiR1V5VUdGMGFDazdYRzRnSUNBZ2RHaHBjeTVvWVc1a2JHVXlSbWxzYkM1elpYUkJkSFJ5YVdKMWRHVW9KMlpwYkd3dGIzQmhZMmwwZVNjc0lDY3dMak1uS1R0Y2JseHVJQ0FnSUd4bGRDQmhjbU5GYm1ScGJtZEJPMXh1SUNBZ0lHbG1JQ2gyWVd4MVpTQThJREF1TlNrZ2UxeHVJQ0FnSUNBZ1lYSmpSVzVrYVc1blFTQTlJR2hoYm1Sc1pWQnZhVzUwY3k1bGJtUTdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUdGeVkwVnVaR2x1WjBFZ1BTQm9ZVzVrYkdVeVVHOXBiblJ6TG1WdVpEdGNiaUFnSUNCOVhHNWNiaUFnSUNCc1pYUWdZWEpqUlc1a2FXNW5XQ0E5SUdObGJuUmxjaTU0SUNzZ1RXRjBhQzVqYjNNb1lYSmpSVzVrYVc1blFTa2dLaUFvWkdsaGJXVjBaWEl2TWlrN1hHNGdJQ0FnYkdWMElHRnlZMFZ1WkdsdVoxa2dQU0JqWlc1MFpYSXVlU0FySUUxaGRHZ3VjMmx1S0dGeVkwVnVaR2x1WjBFcElDb2dLR1JwWVcxbGRHVnlMeklwSUNvZ0xURTdYRzVjYmlBZ0lDQjBhR2x6TG1oaGJtUnNaVXhwYm1VdWMyVjBRWFIwY21saWRYUmxLQ2RrSnl3blRTQW5LMk5sYm5SbGNpNTRLeWNnSnl0alpXNTBaWEl1ZVNzbklFd2dKeXRoY21ORmJtUnBibWRZS3ljZ0p5dGhjbU5GYm1ScGJtZFpLVHRjYmlBZ0lDQjBhR2x6TG1oaGJtUnNaVXhwYm1VdWMyVjBRWFIwY21saWRYUmxLQ2R6ZEhKdmEyVXRkMmxrZEdnbkxDQmthV0Z0WlhSbGNpOHlNQ2s3WEc1Y2JpQWdmVnh1WEc0Z0lHTnZiRzl5U1c1MFpYSm1ZV05sS0NrZ2UxeHVJQ0FnSUhSb2FYTXVZbUZqYTJkeWIzVnVaQzV6WlhSQmRIUnlhV0oxZEdVb0oyWnBiR3duTENCMGFHbHpMbU52Ykc5eWN5NW1hV3hzS1R0Y2JpQWdJQ0IwYUdsekxuTmpjbVYzTG5ObGRFRjBkSEpwWW5WMFpTZ25abWxzYkNjc0lIUm9hWE11WTI5c2IzSnpMbUZqWTJWdWRDazdYRzRnSUNBZ2RHaHBjeTVvWVc1a2JHVXVjMlYwUVhSMGNtbGlkWFJsS0NkemRISnZhMlVuTENCMGFHbHpMbU52Ykc5eWN5NWhZMk5sYm5RcE8xeHVJQ0FnSUhSb2FYTXVhR0Z1Wkd4bE1pNXpaWFJCZEhSeWFXSjFkR1VvSjNOMGNtOXJaU2NzSUhSb2FYTXVZMjlzYjNKekxtRmpZMlZ1ZENrN1hHNGdJQ0FnZEdocGN5NW9ZVzVrYkdWR2FXeHNMbk5sZEVGMGRISnBZblYwWlNnblptbHNiQ2NzSUhSb2FYTXVZMjlzYjNKekxtRmpZMlZ1ZENrN1hHNGdJQ0FnZEdocGN5NW9ZVzVrYkdVeVJtbHNiQzV6WlhSQmRIUnlhV0oxZEdVb0oyWnBiR3duTENCMGFHbHpMbU52Ykc5eWN5NWhZMk5sYm5RcE8xeHVJQ0FnSUhSb2FYTXVhR0Z1Wkd4bFRHbHVaUzV6WlhSQmRIUnlhV0oxZEdVb0ozTjBjbTlyWlNjc0lIUm9hWE11WTI5c2IzSnpMbUZqWTJWdWRDazdYRzVjYmlBZ2ZWeHVYRzRnSUhKbGJtUmxjaWdwSUh0Y2JpQWdJQ0JzWlhRZ2RtRnNkV1VnUFNCMGFHbHpMbDkyWVd4MVpTNXViM0p0WVd4cGVtVmtPMXh1WEc0Z0lDQWdiR1YwSUdObGJuUmxjaUE5SUh0Y2JpQWdJQ0FnSUhnNklIUm9hWE11ZDJsa2RHZ3ZNaXhjYmlBZ0lDQWdJSGs2SUhSb2FYTXVhR1ZwWjJoMEx6SmNiaUFnSUNCOU8xeHVYRzRnSUNBZ2JHVjBJR1JwWVcxbGRHVnlJRDBnVFdGMGFDNXRhVzRvZEdocGN5NTNhV1IwYUN4MGFHbHpMbWhsYVdkb2RDazdYRzVjYmlBZ0lDQnNaWFFnYUdGdVpHeGxVRzlwYm5SeklEMGdlMXh1SUNBZ0lDQWdjM1JoY25RNklFMWhkR2d1VUVrcU1TNDFMRnh1SUNBZ0lDQWdaVzVrT2lCdFlYUm9MbU5zYVhBb0lHMWhkR2d1YzJOaGJHVW9kbUZzZFdVc01Dd3dMalVzVFdGMGFDNVFTU294TGpVc1RXRjBhQzVRU1Nvd0xqVXBJQ3dnVFdGMGFDNVFTU293TGpVc0lFMWhkR2d1VUVrcU1TNDFJQ2xjYmlBZ0lDQjlPMXh1SUNBZ0lHeGxkQ0JvWVc1a2JHVXlVRzlwYm5SeklEMGdlMXh1SUNBZ0lDQWdjM1JoY25RNklFMWhkR2d1VUVrZ0tqSXVOU3hjYmlBZ0lDQWdJR1Z1WkRvZ2JXRjBhQzVqYkdsd0tDQnRZWFJvTG5OallXeGxLSFpoYkhWbExEQXVOU3d4TEUxaGRHZ3VVRWtxTWk0MUxFMWhkR2d1VUVrcU1TNDFLU0FzSUUxaGRHZ3VVRWtxTVM0MUxDQk5ZWFJvTGxCSktqSXVOU0FwWEc0Z0lDQWdmVHRjYmx4dUlDQWdJR3hsZENCb1lXNWtiR1ZRWVhSb0lEMGdjM1puTG1GeVl5aGpaVzUwWlhJdWVDd2dZMlZ1ZEdWeUxua3NJR1JwWVcxbGRHVnlMekl0WkdsaGJXVjBaWEl2TkRBc0lHaGhibVJzWlZCdmFXNTBjeTV6ZEdGeWRDd2dhR0Z1Wkd4bFVHOXBiblJ6TG1WdVpDazdYRzRnSUNBZ2JHVjBJR2hoYm1Sc1pUSlFZWFJvSUQwZ2MzWm5MbUZ5WXloalpXNTBaWEl1ZUN3Z1kyVnVkR1Z5TG5rc0lHUnBZVzFsZEdWeUx6SXRaR2xoYldWMFpYSXZOREFzSUdoaGJtUnNaVEpRYjJsdWRITXVjM1JoY25Rc0lHaGhibVJzWlRKUWIybHVkSE11Wlc1a0tUdGNibHh1SUNBZ0lIUm9hWE11YUdGdVpHeGxMbk5sZEVGMGRISnBZblYwWlNnblpDY3NhR0Z1Wkd4bFVHRjBhQ2s3WEc0Z0lDQWdkR2hwY3k1b1lXNWtiR1V5TG5ObGRFRjBkSEpwWW5WMFpTZ25aQ2NzYUdGdVpHeGxNbEJoZEdncE8xeHVYRzVjYmlBZ0lDQm9ZVzVrYkdWUVlYUm9JQ3M5SUNjZ1RDQW5LMk5sYm5SbGNpNTRLeWNnSnl0alpXNTBaWEl1ZVR0Y2JseHVJQ0FnSUhSb2FYTXVhR0Z1Wkd4bFJtbHNiQzV6WlhSQmRIUnlhV0oxZEdVb0oyUW5MR2hoYm1Sc1pWQmhkR2dwTzF4dVhHNGdJQ0FnYUdGdVpHeGxNbEJoZEdnZ0t6MGdKeUJNSUNjclkyVnVkR1Z5TG5nckp5QW5LMk5sYm5SbGNpNTVPMXh1WEc0Z0lDQWdkR2hwY3k1b1lXNWtiR1V5Um1sc2JDNXpaWFJCZEhSeWFXSjFkR1VvSjJRbkxHaGhibVJzWlRKUVlYUm9LVHRjYmx4dUlDQWdJR3hsZENCaGNtTkZibVJwYm1kQk8xeHVJQ0FnSUdsbUlDaDJZV3gxWlNBOFBTQXdMalVwSUh0Y2JpQWdJQ0FnSUdGeVkwVnVaR2x1WjBFZ1BTQm9ZVzVrYkdWUWIybHVkSE11Wlc1a08xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JoY21ORmJtUnBibWRCSUQwZ2FHRnVaR3hsTWxCdmFXNTBjeTVsYm1RN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYkdWMElHRnlZMFZ1WkdsdVoxZ2dQU0JqWlc1MFpYSXVlQ0FySUUxaGRHZ3VZMjl6S0dGeVkwVnVaR2x1WjBFcElDb2dLR1JwWVcxbGRHVnlMeklwTzF4dUlDQWdJR3hsZENCaGNtTkZibVJwYm1kWklEMGdZMlZ1ZEdWeUxua2dLeUJOWVhSb0xuTnBiaWhoY21ORmJtUnBibWRCS1NBcUlDaGthV0Z0WlhSbGNpOHlLU0FxSUMweE8xeHVYRzRnSUNBZ2RHaHBjeTVvWVc1a2JHVk1hVzVsTG5ObGRFRjBkSEpwWW5WMFpTZ25aQ2NzSjAwZ0p5dGpaVzUwWlhJdWVDc25JQ2NyWTJWdWRHVnlMbmtySnlCTUlDY3JZWEpqUlc1a2FXNW5XQ3NuSUNjcllYSmpSVzVrYVc1bldTazdYRzVjYmlBZ2ZWeHVYRzVjYmlBZ1kyeHBZMnNvS1NCN1hHNGdJQ0FnYVdZZ0tIUm9hWE11Ylc5a1pUMDlQU2R5Wld4aGRHbDJaU2NwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVjSEpsZG1sdmRYTkJibWRzWlNBOUlHWmhiSE5sTzF4dUlDQWdJSDFjYmlBZ0lDQjBhR2x6TG5CdmMybDBhVzl1TG1GdVkyaHZjaUE5SUhSb2FYTXViVzkxYzJVN1hHNGdJQ0FnZEdocGN5NXdiM05wZEdsdmJpNTJZV3gxWlNBOUlIUm9hWE11WDNaaGJIVmxMbTV2Y20xaGJHbDZaV1E3WEc0Z0lDQWdkR2hwY3k1dGIzWmxLQ2s3WEc0Z0lDQjlYRzVjYmlBZ2JXOTJaU2dwSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTVqYkdsamEyVmtLU0I3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVjRzl6YVhScGIyNHVkWEJrWVhSbEtIUm9hWE11Ylc5MWMyVXBPMXh1WEc0Z0lDQWdJQ0JzWlhRZ1lXNW5iR1VnUFNCMGFHbHpMbkJ2YzJsMGFXOXVMblpoYkhWbEtrMWhkR2d1VUVrcU1qdGNibHh1SUNBZ0lDQWdhV1lnS0dGdVoyeGxJRHdnTUNBcElIc2dZVzVuYkdVZ0t6MGdLRTFoZEdndVVFa3FNaWs3SUgxY2JseHVJQ0FnSUNBZ2FXWWdLSFJvYVhNdWJXOWtaU0E5UFQwZ0ozSmxiR0YwYVhabEp5a2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTV3Y21WMmFXOTFjMEZ1WjJ4bElDRTlQU0JtWVd4elpTQW1KaUJOWVhSb0xtRmljeWgwYUdsekxuQnlaWFpwYjNWelFXNW5iR1VnTFNCaGJtZHNaU2tnUGlBeUtTQjdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11Y0hKbGRtbHZkWE5CYm1kc1pTQStJRE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR0Z1WjJ4bElEMGdUV0YwYUM1UVNTb3lPMXh1SUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmhibWRzWlNBOUlEQTdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOUlDOHFJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NXdjbVYyYVc5MWMwRnVaMnhsSUNFOVBTQm1ZV3h6WlNBbUppQk5ZWFJvTG1GaWN5aDBhR2x6TG5CeVpYWnBiM1Z6UVc1bmJHVWdMU0JoYm1kc1pTa2dQaUF5S1NCN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0hSb2FYTXVjSEpsZG1sdmRYTkJibWRzWlNBK0lETXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHRnVaMnhsSUQwZ1RXRjBhQzVRU1NveU8xeHVJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCaGJtZHNaU0E5SURBN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5SUNvdlhHNGdJQ0FnSUNCMGFHbHpMbkJ5WlhacGIzVnpRVzVuYkdVZ1BTQmhibWRzWlR0Y2JseHVJQ0FnSUNBZ2JHVjBJSEpsWVd4V1lXeDFaU0E5SUdGdVoyeGxJQzhnS0UxaGRHZ3VVRWtxTWlrN1hHNWNiaUFnSUNBZ0lIUm9hWE11ZG1Gc2RXVWdQU0IwYUdsekxsOTJZV3gxWlM1MWNHUmhkR1ZPYjNKdFlXd29JSEpsWVd4V1lXeDFaU0FwTzF4dVhHNGdJQ0FnSUNCcFppQW9kR2hwY3k1dGIyUmxJRDA5UFNBbmNtVnNZWFJwZG1VbktTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWNHOXphWFJwYjI0dWRtRnNkV1VnUFNCeVpXRnNWbUZzZFdVN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lIUm9hWE11WlcxcGRDZ25ZMmhoYm1kbEp5eDBhR2x6TGw5MllXeDFaUzUyWVd4MVpTazdYRzVjYmlBZ0lDQWdJSFJvYVhNdWNtVnVaR1Z5S0NrN1hHNWNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQnlaV3hsWVhObEtDa2dlMXh1SUNCOVhHNWNiaUFnTHlwY2JpQWdSR2xoYkNkeklIWmhiSFZsTGlCWGFHVnVJSE5sZEN3Z2FYUWdkMmxzYkNCaGRYUnZiV0YwYVdOaGJHeDVJR0psSUdGa2FuVnpkQ0IwYnlCbWFYUWdiV2x1TDIxaGVDOXpkR1Z3SUhObGRIUnBibWR6SUc5bUlIUm9aU0JwYm5SbGNtWmhZMlV1WEc0Z0lFQjBlWEJsSUh0dWRXMWlaWEo5WEc0Z0lFQmxlR0Z0Y0d4bElHUnBZV3d1ZG1Gc2RXVWdQU0F4TUR0Y2JseHVJQ0JuWlhRZ2RtRnNkV1VvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVgzWmhiSFZsTG5aaGJIVmxPMXh1SUNCOVhHNWNiaUFnYzJWMElIWmhiSFZsS0haaGJIVmxLU0I3WEc0Z0lDQWdkR2hwY3k1ZmRtRnNkV1V1ZFhCa1lYUmxLSFpoYkhWbEtUdGNiaUFnSUNCMGFHbHpMbVZ0YVhRb0oyTm9ZVzVuWlNjc2RHaHBjeTUyWVd4MVpTazdYRzRnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmlBZ2ZWeHVLaTljYmx4dUlDQWdJQzhxS2x4dUlDQWdJRVJwWVd3bmN5QjJZV3gxWlM0Z1YyaGxiaUJ6WlhRc0lHbDBJSGRwYkd3Z1lYVjBiMjFoZEdsallXeHNlU0JpWlNCaFpHcDFjM1FnZEc4Z1ptbDBJRzFwYmk5dFlYZ3ZjM1JsY0NCelpYUjBhVzVuY3lCdlppQjBhR1VnYVc1MFpYSm1ZV05sTGx4dUlDQWdJRUIwZVhCbElIdHVkVzFpWlhKOVhHNGdJQ0FnUUdWNFlXMXdiR1VnWkdsaGJDNTJZV3gxWlNBOUlERXdPMXh1SUNBZ0lDb3ZYRzRnSUNBZ1oyVjBJSFpoYkhWbEtDa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11WDNaaGJIVmxMblpoYkhWbE8xeHVJQ0FnSUgxY2JpQWdJQ0J6WlhRZ2RtRnNkV1VvZGlrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVmZG1Gc2RXVXVkWEJrWVhSbEtIWXBPMXh1SUNBZ0lDQWdkR2hwY3k1d2IzTnBkR2x2Ymk1MllXeDFaU0E5SUhSb2FYTXVYM1poYkhWbExtNXZjbTFoYkdsNlpXUTdYRzRnSUNBZ0lDQjBhR2x6TG1WdGFYUW9KMk5vWVc1blpTY3NkR2hwY3k1ZmRtRnNkV1V1ZG1Gc2RXVXBPMXh1SUNBZ0lDQWdkR2hwY3k1eVpXNWtaWElvS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2S2lwY2JpQWdJQ0JNYjNkbGNpQnNhVzFwZENCdlppQjBhR1VnWkdsaGJDZHpJRzkxZEhCMWRDQnlZVzVuWlZ4dUlDQWdJRUIwZVhCbElIdHVkVzFpWlhKOVhHNGdJQ0FnUUdWNFlXMXdiR1VnWkdsaGJDNXRhVzRnUFNBeE1EQXdPMXh1SUNBZ0lDb3ZYRzRnSUNBZ1oyVjBJRzFwYmlncElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDkyWVd4MVpTNXRhVzQ3WEc0Z0lDQWdmVnh1SUNBZ0lITmxkQ0J0YVc0b2Rpa2dlMXh1SUNBZ0lDQWdkR2hwY3k1ZmRtRnNkV1V1YldsdUlEMGdkanRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZLaXBjYmlBZ0lDQlZjSEJsY2lCc2FXMXBkQ0J2WmlCMGFHVWdaR2xoYkNkeklHOTFkSEIxZENCeVlXNW5aVnh1SUNBZ0lFQjBlWEJsSUh0dWRXMWlaWEo5WEc0Z0lDQWdRR1Y0WVcxd2JHVWdaR2xoYkM1dFlYZ2dQU0F4TURBd08xeHVJQ0FnSUNvdlhHNGdJQ0FnWjJWMElHMWhlQ2dwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxsOTJZV3gxWlM1dFlYZzdYRzRnSUNBZ2ZWeHVJQ0FnSUhObGRDQnRZWGdvZGlrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVmZG1Gc2RXVXViV0Y0SUQwZ2RqdGNiaUFnSUNCOVhHNWNiaUFnSUNBdktpcGNiaUFnSUNCVWFHVWdhVzVqY21WdFpXNTBJSFJvWVhRZ2RHaGxJR1JwWVd3bmN5QjJZV3gxWlNCamFHRnVaMlZ6SUdKNUxseHVJQ0FnSUVCMGVYQmxJSHR1ZFcxaVpYSjlYRzRnSUNBZ1FHVjRZVzF3YkdVZ1pHbGhiQzV6ZEdWd0lEMGdOVHRjYmlBZ0lDQXFMMXh1SUNBZ0lHZGxkQ0J6ZEdWd0tDa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11WDNaaGJIVmxMbk4wWlhBN1hHNGdJQ0FnZlZ4dUlDQWdJSE5sZENCemRHVndLSFlwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVYM1poYkhWbExuTjBaWEFnUFNCMk8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4cUtseHVJQ0FnSUVGaWMyOXNkWFJsSUcxdlpHVWdLR1JwWVd3bmN5QjJZV3gxWlNCcWRXMXdjeUIwYnlCdGIzVnpaU0JqYkdsamF5QndiM05wZEdsdmJpa2diM0lnY21Wc1lYUnBkbVVnYlc5a1pTQW9iVzkxYzJVZ1pISmhaeUJqYUdGdVoyVnpJSFpoYkhWbElISmxiR0YwYVhabElIUnZJR2wwY3lCamRYSnlaVzUwSUhCdmMybDBhVzl1S1M0Z1JHVm1ZWFZzZERvZ1hDSnlaV3hoZEdsMlpWd2lMbHh1SUNBZ0lFQjBlWEJsSUh0emRISnBibWQ5WEc0Z0lDQWdRR1Y0WVcxd2JHVWdaR2xoYkM1dGIyUmxJRDBnWENKeVpXeGhkR2wyWlZ3aU8xeHVJQ0FnSUNvdlhHNGdJQ0FnWjJWMElHMXZaR1VvS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NXdiM05wZEdsdmJpNXRiMlJsTzF4dUlDQWdJSDFjYmlBZ0lDQnpaWFFnYlc5a1pTaDJLU0I3WEc0Z0lDQWdJQ0IwYUdsekxuQnZjMmwwYVc5dUxtMXZaR1VnUFNCMk8xeHVJQ0FnSUgxY2JseHVYRzRnSUM4cUtseHVJQ0JPYjNKdFlXeHBlbVZrSUhaaGJIVmxJRzltSUhSb1pTQmthV0ZzTGx4dUlDQkFkSGx3WlNCN2JuVnRZbVZ5ZlZ4dUlDQkFaWGhoYlhCc1pTQmthV0ZzTG01dmNtMWhiR2w2WldRZ1BTQXdMalU3WEc0Z0lDb3ZYRzRnSUdkbGRDQnViM0p0WVd4cGVtVmtLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TGw5MllXeDFaUzV1YjNKdFlXeHBlbVZrTzF4dUlDQjlYRzVjYmlBZ2MyVjBJRzV2Y20xaGJHbDZaV1FvZGlrZ2UxeHVJQ0FnSUhSb2FYTXVYM1poYkhWbExuVndaR0YwWlU1dmNtMWhiQ2gyS1R0Y2JpQWdJQ0IwYUdsekxtVnRhWFFvSjJOb1lXNW5aU2NzZEdocGN5NTJZV3gxWlNrN1hHNGdJSDFjYmx4dWZWeHVYRzVjYmx4dUx5OGdWMFZDVUVGRFN5QkdUMDlVUlZJZ0x5OWNiaTh2SUM0dmZpOXFjMmhwYm5RdGJHOWhaR1Z5SVM0dmJHbGlMMmx1ZEdWeVptRmpaWE12WkdsaGJDNXFjeUlzSWlkMWMyVWdjM1J5YVdOMEp6dGNibHh1YkdWMElITjJaeUE5SUhKbGNYVnBjbVVvSnk0dUwzVjBhV3d2YzNabkp5azdYRzVzWlhRZ1NXNTBaWEptWVdObElEMGdjbVZ4ZFdseVpTZ25MaTR2WTI5eVpTOXBiblJsY21aaFkyVW5LVHRjYm14bGRDQkNkWFIwYjI1VVpXMXdiR0YwWlNBOUlISmxjWFZwY21Vb0p5NHVMMk52YlhCdmJtVnVkSE12WW5WMGRHOXVkR1Z0Y0d4aGRHVW5LVHRjYm14bGRDQjBiM1ZqYUNBOUlISmxjWFZwY21Vb0p5NHVMM1YwYVd3dmRHOTFZMmduS1R0Y2JseHVZMnhoYzNNZ1VHbGhibTlMWlhrZ1pYaDBaVzVrY3lCQ2RYUjBiMjVVWlcxd2JHRjBaU0I3WEc1Y2JpQWdZMjl1YzNSeWRXTjBiM0lvS1NCN1hHNWNiaUFnSUNCc1pYUWdiM0IwYVc5dWN5QTlJRnNuZG1Gc2RXVW5MQ2R1YjNSbEp5d25ZMjlzYjNJblhUdGNibHh1SUNBZ0lHeGxkQ0JrWldaaGRXeDBjeUE5SUh0Y2JpQWdJQ0FnSUNkemFYcGxKem9nV3pnd0xEZ3dYU3hjYmlBZ0lDQWdJQ2QwWVhKblpYUW5PaUJtWVd4elpTeGNiaUFnSUNBZ0lDZHRiMlJsSnpvZ0oySjFkSFJ2Ymljc1hHNGdJQ0FnSUNBbmRtRnNkV1VuT2lBd1hHNGdJQ0FnZlR0Y2JseHVJQ0FnSUhOMWNHVnlLR0Z5WjNWdFpXNTBjeXh2Y0hScGIyNXpMR1JsWm1GMWJIUnpLVHRjYmx4dUlDQWdJSFJvYVhNdWJtOTBaU0E5SUhSb2FYTXVjMlYwZEdsdVozTXVibTkwWlR0Y2JpQWdJQ0IwYUdsekxtTnZiRzl5SUQwZ2RHaHBjeTV6WlhSMGFXNW5jeTVqYjJ4dmNqdGNibHh1SUNBZ0lIUm9hWE11WTI5c2IzSnpJRDBnZTF4dUlDQWdJQ0FnSjNjbk9pQW5JMlptWmljc1hHNGdJQ0FnSUNBbllpYzZJQ2NqTmpZMkp5eGNiaUFnSUNCOU8xeHVYRzRnSUNBZ2RHaHBjeTVwYm1sMEtDazdYRzRnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmx4dUlDQjlYRzVjYmlBZ1luVnBiR1JHY21GdFpTZ3BJSHRjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblFnUFNCemRtY3VZM0psWVhSbEtDZHpkbWNuS1R0Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdWMyVjBRWFIwY21saWRYUmxLQ2QzYVdSMGFDY3NkR2hwY3k1M2FXUjBhQ2s3WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG5ObGRFRjBkSEpwWW5WMFpTZ25hR1ZwWjJoMEp5eDBhR2x6TG1obGFXZG9kQ2s3WEc0Z0lDQWdkR2hwY3k1d1lYSmxiblF1WVhCd1pXNWtRMmhwYkdRb2RHaHBjeTVsYkdWdFpXNTBLVHRjYmlBZ2ZWeHVYRzRnSUdKMWFXeGtTVzUwWlhKbVlXTmxLQ2tnZTF4dVhHNGdJQ0FnZEdocGN5NXdZV1FnUFNCemRtY3VZM0psWVhSbEtDZHlaV04wSnlrN1hHNWNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUXVZWEJ3Wlc1a1EyaHBiR1FvZEdocGN5NXdZV1FwTzF4dVhHNGdJQ0FnZEdocGN5NXBiblJsY21GamRHbHZibFJoY21kbGRDQTlJSFJvYVhNdWNHRmtPMXh1WEc0Z0lDQWdMeW9nWlhabGJuUnpJQ292WEc1Y2JpQWdJQ0JwWmlBb0lYUnZkV05vTG1WNGFYTjBjeWtnZTF4dVhHNGdJQ0FnSUNCMGFHbHpMbU5zYVdOcklEMGdLQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0x5OGdJR052Ym5OdmJHVXViRzluS0NkamJHbGpheWNwTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbkJwWVc1dkxtbHVkR1Z5WVdOMGFXNW5JRDBnZEhKMVpUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1d2FXRnVieTV3WVdsdWRHSnlkWE5vSUQwZ0lYUm9hWE11YzNSaGRHVTdYRzRnSUNBZ0lDQWdJSFJvYVhNdVpHOTNiaWgwYUdsekxuQnBZVzV2TG5CaGFXNTBZbkoxYzJncE8xeHVJQ0FnSUNBZ2ZUdGNibHh1SUNBZ0lDQWdkR2hwY3k1d1lXUXVZV1JrUlhabGJuUk1hWE4wWlc1bGNpZ25iVzkxYzJWdmRtVnlKeXdnS0NrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTV3YVdGdWJ5NXBiblJsY21GamRHbHVaeWtnZTF4dUlDQWdJQ0FnTHk4Z0lDQWdZMjl1YzI5c1pTNXNiMmNvSjIxdmRYTmxiM1psY2ljcE8xeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVpHOTNiaWgwYUdsekxuQnBZVzV2TG5CaGFXNTBZbkoxYzJncE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlLVHRjYmx4dVhHNGdJQ0FnSUNCMGFHbHpMbTF2ZG1VZ1BTQW9LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxuQnBZVzV2TG1sdWRHVnlZV04wYVc1bktTQjdYRzRnSUNBZ0lDQWdJQzh2SUNCamIyNXpiMnhsTG14dlp5Z25iVzkyWlNjcE8xeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVltVnVaQ2dwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOU8xeHVYRzVjYmlBZ0lDQWdJSFJvYVhNdWNtVnNaV0Z6WlNBOUlDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV3YVdGdWJ5NXBiblJsY21GamRHbHVaeUE5SUdaaGJITmxPMXh1SUNBZ0lDQWdMeThnSUdOdmJuTnZiR1V1Ykc5bktDZHlaV3hsWVhObEp5azdYRzRnSUNBZ0lDQXZMeUFnZEdocGN5NTFjQ2dwTzF4dUlDQWdJQ0FnZlR0Y2JpQWdJQ0FnSUhSb2FYTXVjR0ZrTG1Ga1pFVjJaVzUwVEdsemRHVnVaWElvSjIxdmRYTmxkWEFuTENBb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG5CcFlXNXZMbWx1ZEdWeVlXTjBhVzVuS1NCN1hHNGdJQ0FnSUNBZ0lDOHZJQ0JqYjI1emIyeGxMbXh2WnlnbmJXOTFjMlYxY0NjcE8xeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWRYQW9LVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNCMGFHbHpMbkJoWkM1aFpHUkZkbVZ1ZEV4cGMzUmxibVZ5S0NkdGIzVnpaVzkxZENjc0lDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdWNHbGhibTh1YVc1MFpYSmhZM1JwYm1jcElIdGNiaUFnSUNBZ0lDQWdMeThnSUdOdmJuTnZiR1V1Ykc5bktDZHRiM1Z6Wlc5MWRDY3BPMXh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVkWEFvS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZTazdYRzVjYmlBZ0lDQjlYRzVjYmlBZ2ZWeHVYRzRnSUhOcGVtVkpiblJsY21aaFkyVW9LU0I3WEc1Y2JpQWdJQ0FnSUNBZ0x5OXNaWFFnY21Ga2FYVnpJRDBnVFdGMGFDNXRhVzRvZEdocGN5NTNhV1IwYUN4MGFHbHpMbWhsYVdkb2RDa2dMeUExTzF4dUlDQWdJQ0FnSUNCc1pYUWdjbUZrYVhWeklEMGdNRHRjYmx4dUlDQWdJQ0FnSUNCMGFHbHpMbkJoWkM1elpYUkJkSFJ5YVdKMWRHVW9KM2duTERBdU5TazdYRzRnSUNBZ0lDQWdJSFJvYVhNdWNHRmtMbk5sZEVGMGRISnBZblYwWlNnbmVTY3NNQzQxS1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdWQybGtkR2dnUGlBeUtTQjdYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NXdZV1F1YzJWMFFYUjBjbWxpZFhSbEtDZDNhV1IwYUNjc0lIUm9hWE11ZDJsa2RHZ2dMU0F4S1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG5CaFpDNXpaWFJCZEhSeWFXSjFkR1VvSjNkcFpIUm9KeXdnZEdocGN5NTNhV1IwYUNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVhR1ZwWjJoMElENGdNaWtnZTF4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11Y0dGa0xuTmxkRUYwZEhKcFluVjBaU2duYUdWcFoyaDBKeXdnZEdocGN5NW9aV2xuYUhRcE8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWNHRmtMbk5sZEVGMGRISnBZblYwWlNnbmFHVnBaMmgwSnl3Z2RHaHBjeTVvWldsbmFIUXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjR0ZrTG5ObGRFRjBkSEpwWW5WMFpTZ25jbmduTENCeVlXUnBkWE1wTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbkJoWkM1elpYUkJkSFJ5YVdKMWRHVW9KM0o1Snl3Z2NtRmthWFZ6S1R0Y2JseHVJQ0I5WEc1Y2JpQWdjbVZ1WkdWeUtDa2dlMXh1SUNBZ0lHbG1JQ2doZEdocGN5NXpkR0YwWlNrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV3WVdRdWMyVjBRWFIwY21saWRYUmxLQ2RtYVd4c0p5d2dkR2hwY3k1amIyeHZjbk5iZEdocGN5NWpiMnh2Y2wwcE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0IwYUdsekxuQmhaQzV6WlhSQmRIUnlhV0oxZEdVb0oyWnBiR3duTENCMGFHbHpMbU52Ykc5eWN5NWhZMk5sYm5RcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc1OVhHNWNiaThxS2x4dUtpQlFhV0Z1YjF4dUtseHVLaUJBWkdWelkzSnBjSFJwYjI0Z1VHbGhibThnYTJWNVltOWhjbVFnYVc1MFpYSm1ZV05sWEc0cVhHNHFJRUJrWlcxdklEeGthWFlnYm1WNGRYTXRkV2s5WENKd2FXRnViMXdpUGp3dlpHbDJQbHh1S2x4dUtpQkFaWGhoYlhCc1pWeHVLaUIyWVhJZ2NHbGhibThnUFNCdVpYY2dUbVY0ZFhNdVVHbGhibThvSnlOMFlYSm5aWFFuS1Z4dUtseHVLaUJBWlhoaGJYQnNaVnh1S2lCMllYSWdjR2xoYm04Z1BTQnVaWGNnVG1WNGRYTXVVR2xoYm04b0p5TjBZWEpuWlhRbkxIdGNiaW9nSUNBZ0lDZHphWHBsSnpvZ1d6VXdNQ3d4TWpWZExGeHVLaUFnSUNBZ0oyMXZaR1VuT2lBblluVjBkRzl1Snl3Z0lDOHZJQ2RpZFhSMGIyNG5MQ0FuZEc5bloyeGxKeXdnYjNJZ0oybHRjSFZzYzJVblhHNHFJQ0FnSUNBbmJHOTNUbTkwWlNjNklESTBMRnh1S2lBZ0lDQWdKMmhwWjJoT2IzUmxKem9nTmpCY2Jpb2dmU2xjYmlwY2Jpb2dRRzkxZEhCMWRGeHVLaUJqYUdGdVoyVmNiaW9nUm1seVpYTWdZVzU1SUhScGJXVWdZU0J1WlhjZ2EyVjVJR2x6SUhCeVpYTnpaV1FnYjNJZ2NtVnNaV0Z6WldRZ1BHSnlQbHh1S2lCVWFHVWdaWFpsYm5RZ1pHRjBZU0JwY3lCaGJpQnZZbXBsWTNRZ1kyOXVkR0ZwYm1sdVp5QThhVDV1YjNSbFBDOXBQaUJoYm1RZ1BHaytjM1JoZEdVOEwyaytJSEJ5YjNCbGNuUnBaWE11WEc0cVhHNHFJRUJ2ZFhSd2RYUmxlR0Z0Y0d4bFhHNHFJSEJwWVc1dkxtOXVLQ2RqYUdGdVoyVW5MR1oxYm1OMGFXOXVLSFlwSUh0Y2Jpb2dJQ0JqYjI1emIyeGxMbXh2WnloMktUdGNiaW9nZlNsY2JpcGNiaW92WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdOc1lYTnpJRkJwWVc1dklHVjRkR1Z1WkhNZ1NXNTBaWEptWVdObElIdGNibHh1SUNCamIyNXpkSEoxWTNSdmNpZ3BJSHRjYmx4dUlDQWdJR3hsZENCdmNIUnBiMjV6SUQwZ1d5ZDJZV3gxWlNkZE8xeHVYRzRnSUNBZ2JHVjBJR1JsWm1GMWJIUnpJRDBnZTF4dUlDQWdJQ0FnSjNOcGVtVW5PaUJiTlRBd0xERXlOVjBzWEc0Z0lDQWdJQ0FuYkc5M1RtOTBaU2M2SURJMExGeHVJQ0FnSUNBZ0oyaHBaMmhPYjNSbEp6b2dOakFzWEc0Z0lDQWdJQ0FuYlc5a1pTYzZJQ2RpZFhSMGIyNG5YRzRnSUNBZ2ZUdGNibHh1SUNBZ0lITjFjR1Z5S0dGeVozVnRaVzUwY3l4dmNIUnBiMjV6TEdSbFptRjFiSFJ6S1R0Y2JseHVJQ0FnSUhSb2FYTXVhMlY1VUdGMGRHVnliaUE5SUZzbmR5Y3NKMkluTENkM0p5d25ZaWNzSjNjbkxDZDNKeXduWWljc0ozY25MQ2RpSnl3bmR5Y3NKMkluTENkM0oxMDdYRzVjYmlBZ0lDQjBhR2x6TG5CaGFXNTBZbkoxYzJnZ1BTQm1ZV3h6WlR0Y2JseHVJQ0FnSUhSb2FYTXViVzlrWlNBOUlIUm9hWE11YzJWMGRHbHVaM011Ylc5a1pUdGNibHh1SUNBZ0lIUm9hWE11Y21GdVoyVWdQU0I3WEc0Z0lDQWdJQ0JzYjNjNklIUm9hWE11YzJWMGRHbHVaM011Ykc5M1RtOTBaU3hjYmlBZ0lDQWdJR2hwWjJnNklIUm9hWE11YzJWMGRHbHVaM011YUdsbmFFNXZkR1ZjYmlBZ0lDQjlPMXh1WEc0Z0lDQWdkR2hwY3k1eVlXNW5aUzV6YVhwbElEMGdkR2hwY3k1eVlXNW5aUzVvYVdkb0lDMGdkR2hwY3k1eVlXNW5aUzVzYjNjN1hHNWNiaUFnSUNCMGFHbHpMbXRsZVhNZ1BTQmJYVHRjYmx4dUlDQWdJSFJvYVhNdWRHOW5aMnhsVkc4Z1BTQm1ZV3h6WlR0Y2JseHVJQ0FnSUhSb2FYTXVhVzVwZENncE8xeHVJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtDazdYRzVjYmlBZ2ZWeHVYRzRnSUdKMWFXeGtSbkpoYldVb0tTQjdYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBJRDBnWkc5amRXMWxiblF1WTNKbFlYUmxSV3hsYldWdWRDZ25aR2wySnlrN1hHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExuTjBlV3hsTG5CdmMybDBhVzl1SUQwZ0ozSmxiR0YwYVhabEp6dGNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUXVjM1I1YkdVdVltOXlaR1Z5VW1Ga2FYVnpJRDBnSnpCd2VDYzdYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbk4wZVd4bExtUnBjM0JzWVhrZ1BTQW5ZbXh2WTJzbk8xeHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNXpkSGxzWlM1M2FXUjBhQ0E5SUNjeE1EQWxKenRjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1YzNSNWJHVXVhR1ZwWjJoMElEMGdKekV3TUNVbk8xeHVJQ0FnSUhSb2FYTXVjR0Z5Wlc1MExtRndjR1Z1WkVOb2FXeGtLSFJvYVhNdVpXeGxiV1Z1ZENrN1hHNGdJSDFjYmx4dUlDQmlkV2xzWkVsdWRHVnlabUZqWlNncElIdGNibHh1SUNBZ0lIUm9hWE11YTJWNWN5QTlJRnRkTzF4dVhHNGdJQ0FnWm05eUlDaHNaWFFnYVQwd08yazhkR2hwY3k1eVlXNW5aUzVvYVdkb0lDMGdkR2hwY3k1eVlXNW5aUzVzYjNjN2FTc3JLU0I3WEc1Y2JpQWdJQ0FnSUd4bGRDQmpiMjUwWVdsdVpYSWdQU0JrYjJOMWJXVnVkQzVqY21WaGRHVkZiR1Z0Wlc1MEtDZHpjR0Z1SnlrN1hHNGdJQ0FnSUNCc1pYUWdjMk5oYkdWSmJtUmxlQ0E5SUNocEszUm9hWE11Y21GdVoyVXViRzkzS1NBbElIUm9hWE11YTJWNVVHRjBkR1Z5Ymk1c1pXNW5kR2c3WEc1Y2JpQWdJQ0FnSUd4bGRDQnJaWGtnUFNCdVpYY2dVR2xoYm05TFpYa29ZMjl1ZEdGcGJtVnlMQ0I3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXRjRzl1Wlc1ME9pQjBjblZsTEZ4dUlDQWdJQ0FnSUNBZ0lHNXZkR1U2SUdrcmRHaHBjeTV5WVc1blpTNXNiM2NzWEc0Z0lDQWdJQ0FnSUNBZ1kyOXNiM0k2SUhSb2FYTXVhMlY1VUdGMGRHVnlibHR6WTJGc1pVbHVaR1Y0WFN4Y2JpQWdJQ0FnSUNBZ0lDQnRiMlJsT2lCMGFHbHpMbTF2WkdWY2JpQWdJQ0FnSUNBZ2ZTd2dkR2hwY3k1clpYbERhR0Z1WjJVdVltbHVaQ2gwYUdsekxHa3JkR2hwY3k1eVlXNW5aUzVzYjNjcEtUdGNibHh1SUNBZ0lDQWdhMlY1TG5CcFlXNXZJRDBnZEdocGN6dGNibHh1SUNBZ0lDQWdhV1lnS0hSdmRXTm9MbVY0YVhOMGN5a2dlMXh1SUNBZ0lDQWdJQ0JyWlhrdWNHRmtMbWx1WkdWNElEMGdhVHRjYmlBZ0lDQWdJQ0FnYTJWNUxuQnlaVU5zYVdOcklEMGdhMlY1TG5CeVpVMXZkbVVnUFNCclpYa3VjSEpsVW1Wc1pXRnpaU0E5SUNncElEMCtJSHQ5TzF4dUlDQWdJQ0FnSUNCclpYa3VZMnhwWTJzZ1BTQnJaWGt1Ylc5MlpTQTlJR3RsZVM1eVpXeGxZWE5sSUQwZ0tDa2dQVDRnZTMwN1hHNGdJQ0FnSUNBZ0lHdGxlUzV3Y21WVWIzVmphQ0E5SUd0bGVTNXdjbVZVYjNWamFFMXZkbVVnUFNCclpYa3VjSEpsVkc5MVkyaFNaV3hsWVhObElEMGdLQ2tnUFQ0Z2UzMDdYRzRnSUNBZ0lDQWdJR3RsZVM1MGIzVmphQ0E5SUd0bGVTNTBiM1ZqYUUxdmRtVWdQU0JyWlhrdWRHOTFZMmhTWld4bFlYTmxJRDBnS0NrZ1BUNGdlMzA3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUhSb2FYTXVhMlY1Y3k1d2RYTm9LR3RsZVNrN1hHNGdJQ0FnSUNCMGFHbHpMbVZzWlcxbGJuUXVZWEJ3Wlc1a1EyaHBiR1FvWTI5dWRHRnBibVZ5S1R0Y2JseHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb2RHOTFZMmd1WlhocGMzUnpLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtRmtaRlJ2ZFdOb1RHbHpkR1Z1WlhKektDazdYRzRnSUNBZ2ZWeHVYRzRnSUgxY2JseHVJQ0J6YVhwbFNXNTBaWEptWVdObEtDa2dlMXh1WEc0Z0lDQWdiR1YwSUd0bGVWZ2dQU0F3TzF4dVhHNGdJQ0FnYkdWMElHdGxlVkJ2YzJsMGFXOXVjeUE5SUZ0ZE8xeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FUMHdPMms4ZEdocGN5NXlZVzVuWlM1b2FXZG9JQzBnZEdocGN5NXlZVzVuWlM1c2IzYzdhU3NyS1NCN1hHNWNiaUFnSUNBZ0lHdGxlVkJ2YzJsMGFXOXVjeTV3ZFhOb0tHdGxlVmdwTzF4dVhHNGdJQ0FnSUNCc1pYUWdjMk5oYkdWSmJtUmxlQ0E5SUNocEszUm9hWE11Y21GdVoyVXViRzkzS1NBbElIUm9hWE11YTJWNVVHRjBkR1Z5Ymk1c1pXNW5kR2c3WEc0Z0lDQWdJQ0JzWlhRZ2JtVjRkRk5qWVd4bFNXNWtaWGdnUFNBb2FTc3hLM1JvYVhNdWNtRnVaMlV1Ykc5M0tTQWxJSFJvYVhNdWEyVjVVR0YwZEdWeWJpNXNaVzVuZEdnN1hHNGdJQ0FnSUNCcFppQW9hU3N4SzNSb2FYTXVjbUZ1WjJVdWJHOTNJRDQ5SUhSb2FYTXVjbUZ1WjJVdWFHbG5hQ2tnZTF4dUlDQWdJQ0FnSUNCclpYbFlJQ3M5SURFN1hHNGdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tIUm9hWE11YTJWNVVHRjBkR1Z5Ymx0elkyRnNaVWx1WkdWNFhTQTlQVDBnSjNjbklDWW1JSFJvYVhNdWEyVjVVR0YwZEdWeWJsdHVaWGgwVTJOaGJHVkpibVJsZUYwZ1BUMDlJQ2QzSnlrZ2UxeHVJQ0FnSUNBZ0lDQnJaWGxZSUNzOUlERTdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnJaWGxZSUNzOUlEQXVOVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ2JHVjBJR3RsZVhOWGFXUmxJRDBnYTJWNVdEdGNibHh1WEc0Z0lDOHZJQ0JzWlhRZ2NHRmtaR2x1WnlBOUlIUm9hWE11ZDJsa2RHZ2dMeUF4TWpBN1hHNGdJQ0FnYkdWMElIQmhaR1JwYm1jZ1BTQXhPMXh1SUNBZ0lHeGxkQ0JpZFhSMGIyNVhhV1IwYUNBOUlDaDBhR2x6TG5kcFpIUm9MWEJoWkdScGJtY3FNaWtnTHlCclpYbHpWMmxrWlR0Y2JpQWdJQ0JzWlhRZ1luVjBkRzl1U0dWcFoyaDBJRDBnS0hSb2FYTXVhR1ZwWjJoMExYQmhaR1JwYm1jcU1pa2dMeUF5TzF4dVhHNGdJQ0FnWm05eUlDaHNaWFFnYVQwd08yazhkR2hwY3k1clpYbHpMbXhsYm1kMGFEdHBLeXNwSUh0Y2JseHVJQ0FnSUNBZ2JHVjBJR052Ym5SaGFXNWxjaUE5SUhSb2FYTXVhMlY1YzF0cFhTNXdZWEpsYm5RN1hHNGdJQ0FnSUNCamIyNTBZV2x1WlhJdWMzUjViR1V1Y0c5emFYUnBiMjRnUFNBbllXSnpiMngxZEdVbk8xeHVJQ0FnSUNBZ1kyOXVkR0ZwYm1WeUxuTjBlV3hsTG14bFpuUWdQU0FvYTJWNVVHOXphWFJwYjI1elcybGRLbUoxZEhSdmJsZHBaSFJvSzNCaFpHUnBibWNwSUNzZ0ozQjRKenRjYmlBZ0lDQWdJR2xtSUNoMGFHbHpMbXRsZVhOYmFWMHVZMjlzYjNJZ1BUMDlJQ2QzSnlrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjUwWVdsdVpYSXVjM1I1YkdVdWRHOXdJRDBnS0hCaFpHUnBibWNwSUNzZ0ozQjRKenRjYmlBZ0lDQWdJQ0FnZEdocGN5NXJaWGx6VzJsZExuSmxjMmw2WlNoaWRYUjBiMjVYYVdSMGFDd2dZblYwZEc5dVNHVnBaMmgwS2pJcE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVkR0ZwYm1WeUxuTjBlV3hsTG5wSmJtUmxlQ0E5SURFN1hHNGdJQ0FnSUNBZ0lHTnZiblJoYVc1bGNpNXpkSGxzWlM1MGIzQWdQU0J3WVdSa2FXNW5LeWR3ZUNjN1hHNGdJQ0FnSUNBZ0lIUm9hWE11YTJWNWMxdHBYUzV5WlhOcGVtVW9ZblYwZEc5dVYybGtkR2dzSUdKMWRIUnZia2hsYVdkb2RDb3hMakVwTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnZlZ4dVhHNGdJSDFjYmx4dUlDQmpiMnh2Y2tsdWRHVnlabUZqWlNncElIdGNibHh1SUNBZ0lDOHZJRkJwWVc1dklHdGxlWE1nWkc5dUozUWdZV04wZFdGc2JIa2dhR0YyWlNCaElITjBjbTlyWlNCaWIzSmtaWEpjYmlBZ0lDQXZMeUJVYUdWNUlHaGhkbVVnYzNCaFkyVWdZbVYwZDJWbGJpQjBhR1Z0TENCM2FHbGphQ0J6YUc5M2N5QjBhR1VnVUdsaGJtOGdZbWNnWTI5c2IzSmNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUXVjM1I1YkdVdVltRmphMmR5YjNWdVpFTnZiRzl5SUQwZ2RHaHBjeTVqYjJ4dmNuTXViV1ZrYVhWdFRHbG5hSFE3WEc1Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwUFRBN2FUeDBhR2x6TG10bGVYTXViR1Z1WjNSb08ya3JLeWtnZTF4dUlDQWdJQ0FnZEdocGN5NXJaWGx6VzJsZExtTnZiRzl5Y3lBOUlIdGNiaUFnSUNBZ0lDQWdKM2NuT2lCMGFHbHpMbU52Ykc5eWN5NXNhV2RvZEN4Y2JpQWdJQ0FnSUNBZ0oySW5PaUIwYUdsekxtTnZiRzl5Y3k1a1lYSnJMRnh1SUNBZ0lDQWdJQ0FuWVdOalpXNTBKem9nZEdocGN5NWpiMnh2Y25NdVlXTmpaVzUwTEZ4dUlDQWdJQ0FnSUNBblltOXlaR1Z5SnpvZ2RHaHBjeTVqYjJ4dmNuTXViV1ZrYVhWdFRHbG5hSFJjYmlBZ0lDQWdJSDA3WEc0Z0lDQWdJQ0IwYUdsekxtdGxlWE5iYVYwdVkyOXNiM0pKYm5SbGNtWmhZMlVvS1R0Y2JpQWdJQ0FnSUhSb2FYTXVhMlY1YzF0cFhTNXlaVzVrWlhJb0tUdGNiaUFnSUNCOVhHNWNibHh1SUNCOVhHNWNiaUFnYTJWNVEyaGhibWRsS0c1dmRHVXNiMjRwSUh0Y2JpQWdJQ0F2THlCbGJXbDBJR1JoZEdFZ1ptOXlJR0Z1ZVNCclpYa2dkSFZ5Ym1sdVp5QnZiaTl2Wm1aY2JpQWdJQ0F2THlCY0ltNXZkR1ZjSWlCcGN5QjBhR1VnYm05MFpTQjJZV3gxWlZ4dUlDQWdJQzh2SUZ3aWIyNWNJaUJwY3lCaElHSnZiMnhsWVc0Z2QyaGxkR2hsY2lCcGRDQnBjeUJ2YmlCdmNpQnZabVpjYmlBZ0lDQXZMeUJwYmlCaFpuUmxjblJ2ZFdOb0lHMXZaR1VzSUZ3aWIyNDZJR2x6SUdGdUlHOWlhbVZqZENCM2FYUm9JSE4wWVhSbEwzZ3ZlU0J3Y205d1pYSjBhV1Z6WEc0Z0lDQWdkbUZ5SUdSaGRHRWdQU0I3WEc0Z0lDQWdJQ0J1YjNSbE9pQnViM1JsWEc0Z0lDQWdmVHRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JRzl1SUQwOVBTQW5iMkpxWldOMEp5a2dlMXh1SUNBZ0lDQWdaR0YwWVM1emRHRjBaU0E5SUc5dUxuTjBZWFJsTzF4dUlDQWdJQzh2SUNCa1lYUmhMbmdnUFNCdmJpNTRYRzRnSUNBZ0x5OGdJR1JoZEdFdWVTQTlJRzl1TG5sY2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdaR0YwWVM1emRHRjBaU0E5SUc5dU8xeHVJQ0FnSUgxY2JpQWdJQ0IwYUdsekxtVnRhWFFvSjJOb1lXNW5aU2NzWkdGMFlTazdYRzRnSUgxY2JseHVJQ0F2S2lCa2NtRm5LRzV2ZEdVc2IyNHBJSHRjYmlBZ0lDQjBhR2x6TG1WdGFYUW9KMk5vWVc1blpTY3NlMXh1SUNBZ0lDQWdibTkwWlRvZ2JtOTBaU3hjYmlBZ0lDQWdJSE4wWVhSbE9pQnZibHh1SUNBZ0lIMHBPMXh1SUNCOUlDb3ZYRzVjYmlBZ2NtVnVaR1Z5S0NrZ2UxeHVJQ0FnSUM4dklHeHZiM0FnZEdoeWIzVm5hQ0JoYm1RZ2NtVnVaR1Z5SUhSb1pTQnJaWGx6UDF4dUlDQjlYRzVjYmx4dUlDQmhaR1JVYjNWamFFeHBjM1JsYm1WeWN5Z3BJSHRjYmx4dUlDQWdJSFJvYVhNdWNISmxRMnhwWTJzZ1BTQjBhR2x6TG5CeVpVMXZkbVVnUFNCMGFHbHpMbkJ5WlZKbGJHVmhjMlVnUFNBb0tTQTlQaUI3ZlR0Y2JpQWdJQ0IwYUdsekxtTnNhV05ySUQwZ2RHaHBjeTV0YjNabElEMGdkR2hwY3k1eVpXeGxZWE5sSUQwZ0tDa2dQVDRnZTMwN1hHNGdJQ0FnZEdocGN5NXdjbVZVYjNWamFDQTlJSFJvYVhNdWNISmxWRzkxWTJoTmIzWmxJRDBnZEdocGN5NXdjbVZVYjNWamFGSmxiR1ZoYzJVZ1BTQW9LU0E5UGlCN2ZUdGNiaUFnSUNCMGFHbHpMblJ2ZFdOb0lEMGdkR2hwY3k1MGIzVmphRTF2ZG1VZ1BTQjBhR2x6TG5SdmRXTm9VbVZzWldGelpTQTlJQ2dwSUQwK0lIdDlPMXh1WEc0Z0lDQWdkR2hwY3k1amRYSnlaVzUwUld4bGJXVnVkQ0E5SUdaaGJITmxPMXh1WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG1Ga1pFVjJaVzUwVEdsemRHVnVaWElvSjNSdmRXTm9jM1JoY25RbkxDQW9aU2tnUFQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjMjlzWlM1c2IyY29KM1J2ZFdOb2MzUmhjblFuS1R0Y2JpQWdJQ0FnSUd4bGRDQmxiR1Z0Wlc1MElEMGdaRzlqZFcxbGJuUXVaV3hsYldWdWRFWnliMjFRYjJsdWRDaGxMblJoY21kbGRGUnZkV05vWlhOYk1GMHVZMnhwWlc1MFdDeGxMblJoY21kbGRGUnZkV05vWlhOYk1GMHVZMnhwWlc1MFdTazdYRzRnSUNBZ0lDQnNaWFFnYTJWNUlEMGdkR2hwY3k1clpYbHpXMlZzWlcxbGJuUXVhVzVrWlhoZE8xeHVJQ0FnSUNBZ2RHaHBjeTV3WVdsdWRHSnlkWE5vSUQwZ0lXdGxlUzV6ZEdGMFpUdGNiaUFnSUNBZ0lHdGxlUzVrYjNkdUtIUm9hWE11Y0dGcGJuUmljblZ6YUNrN1hHNGdJQ0FnSUNCMGFHbHpMbU4xY25KbGJuUkZiR1Z0Wlc1MElEMGdaV3hsYldWdWRDNXBibVJsZUR0Y2JpQWdJQ0FnSUdVdWNISmxkbVZ1ZEVSbFptRjFiSFFvS1R0Y2JpQWdJQ0FnSUdVdWMzUnZjRkJ5YjNCaFoyRjBhVzl1S0NrN1hHNGdJQ0FnZlNrN1hHNWNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUXVZV1JrUlhabGJuUk1hWE4wWlc1bGNpZ25kRzkxWTJodGIzWmxKeXdnS0dVcElEMCtJSHRjYmlBZ0lDQWdJR3hsZENCbGJHVnRaVzUwSUQwZ1pHOWpkVzFsYm5RdVpXeGxiV1Z1ZEVaeWIyMVFiMmx1ZENobExuUmhjbWRsZEZSdmRXTm9aWE5iTUYwdVkyeHBaVzUwV0N4bExuUmhjbWRsZEZSdmRXTm9aWE5iTUYwdVkyeHBaVzUwV1NrN1hHNGdJQ0FnSUNCc1pYUWdhMlY1SUQwZ2RHaHBjeTVyWlhselcyVnNaVzFsYm5RdWFXNWtaWGhkTzF4dUlDQWdJQ0FnYVdZZ0tHVnNaVzFsYm5RdWFXNWtaWGdoUFQxMGFHbHpMbU4xY25KbGJuUkZiR1Z0Wlc1MEtTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbU4xY25KbGJuUkZiR1Z0Wlc1MEtTQjdYRzRnSUNBZ0lDQWdJQ0FnYkdWMElIQmhjM1JMWlhrZ1BTQjBhR2x6TG10bGVYTmJkR2hwY3k1amRYSnlaVzUwUld4bGJXVnVkRjA3WEc0Z0lDQWdJQ0FnSUNBZ2NHRnpkRXRsZVM1MWNDZ3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUd0bGVTNWtiM2R1S0hSb2FYTXVjR0ZwYm5SaWNuVnphQ2s3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0JyWlhrdVltVnVaQ2dwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnZEdocGN5NWpkWEp5Wlc1MFJXeGxiV1Z1ZENBOUlHVnNaVzFsYm5RdWFXNWtaWGc3WEc0Z0lDQWdJQ0JsTG5CeVpYWmxiblJFWldaaGRXeDBLQ2s3WEc0Z0lDQWdJQ0JsTG5OMGIzQlFjbTl3WVdkaGRHbHZiaWdwTzF4dUlDQWdJSDBwTzF4dVhHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJb0ozUnZkV05vWlc1a0p5d2dLR1VwSUQwK0lIdGNiaUFnSUNBZ0lDOHZJRzV2SUhSdmRXTm9aWE1nZEc4Z1kyRnNZM1ZzWVhSbElHSmxZMkYxYzJVZ2JtOXVaU0J5WlcxaGFXNXBibWRjYmlBZ0lDQWdJR3hsZENCclpYa2dQU0IwYUdsekxtdGxlWE5iZEdocGN5NWpkWEp5Wlc1MFJXeGxiV1Z1ZEYwN1hHNGdJQ0FnSUNCclpYa3VkWEFvS1R0Y2JpQWdJQ0FnSUhSb2FYTXVhVzUwWlhKaFkzUnBibWNnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJSFJvYVhNdVkzVnljbVZ1ZEVWc1pXMWxiblFnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJR1V1Y0hKbGRtVnVkRVJsWm1GMWJIUW9LVHRjYmlBZ0lDQWdJR1V1YzNSdmNGQnliM0JoWjJGMGFXOXVLQ2s3WEc0Z0lDQWdmU2s3WEc1Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNCRVpXWnBibVVnZEdobElIQnBkR05vSUhKaGJtZGxJQ2hzYjNkbGMzUWdZVzVrSUdocFoyaGxjM1FnYm05MFpTa2diMllnZEdobElIQnBZVzV2SUd0bGVXSnZZWEprTGx4dUlDQkFjR0Z5WVcwZ2JHOTNJSHR1ZFcxaVpYSjlJRTFKUkVrZ2JtOTBaU0IyWVd4MVpTQnZaaUIwYUdVZ2JHOTNaWE4wSUc1dmRHVWdiMjRnZEdobElHdGxlV0p2WVhKa1hHNGdJRUJ3WVhKaGJTQm9hV2RvSUh0dWRXMWlaWEo5SUUxSlJFa2dibTkwWlNCMllXeDFaU0J2WmlCMGFHVWdhR2xuYUdWemRDQnViM1JsSUc5dUlIUm9aU0JyWlhsaWIyRnlaRnh1SUNBcUwxeHVJQ0J6WlhSU1lXNW5aU2hzYjNjc2FHbG5hQ2tnZTF4dUlDQWdJSFJvYVhNdWNtRnVaMlV1Ykc5M0lEMGdiRzkzTzF4dUlDQWdJSFJvYVhNdWNtRnVaMlV1YUdsbmFDQTlJR2hwWjJnN1hHNGdJQ0FnZEdocGN5NWxiWEIwZVNncE8xeHVJQ0FnSUhSb2FYTXVZblZwYkdSSmJuUmxjbVpoWTJVb0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQlVkWEp1SUdFZ2EyVjVJRzl1SUc5eUlHOW1aaUIxYzJsdVp5QnBkSE1nVFVsRVNTQnViM1JsSUhaaGJIVmxPMXh1SUNCQWNHRnlZVzBnYm05MFpTQjdiblZ0WW1WeWZTQk5TVVJKSUc1dmRHVWdkbUZzZFdVZ2IyWWdkR2hsSUd0bGVTQjBieUJqYUdGdVoyVmNiaUFnUUhCaGNtRnRJRzl1SUh0aWIyOXNaV0Z1ZlNCWGFHVjBhR1Z5SUhSb1pTQnViM1JsSUhOb2IzVnNaQ0IwZFhKdUlHOXVJRzl5SUc5bVpseHVJQ0FxTDF4dUlDQjBiMmRuYkdWTFpYa29ibTkwWlN3Z2IyNHBJSHRjYmlBZ0lDQjBhR2x6TG10bGVYTmJibTkwWlMxMGFHbHpMbkpoYm1kbExteHZkMTB1Wm14cGNDaHZiaWs3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnVkhWeWJpQmhJR3RsZVNCdmJpQnZjaUJ2Wm1ZZ2RYTnBibWNnYVhSeklHdGxlU0JwYm1SbGVDQnZiaUIwYUdVZ2NHbGhibThnYVc1MFpYSm1ZV05sTGx4dUlDQkFjR0Z5WVcwZ2FXNWtaWGdnZTI1MWJXSmxjbjBnU1c1a1pYZ2diMllnZEdobElHdGxlU0IwYnlCamFHRnVaMlZjYmlBZ1FIQmhjbUZ0SUc5dUlIdGliMjlzWldGdWZTQlhhR1YwYUdWeUlIUm9aU0J1YjNSbElITm9iM1ZzWkNCMGRYSnVJRzl1SUc5eUlHOW1abHh1SUNBcUwxeHVJQ0IwYjJkbmJHVkpibVJsZUNocGJtUmxlQ3dnYjI0cElIdGNiaUFnSUNCMGFHbHpMbXRsZVhOYmFXNWtaWGhkTG1ac2FYQW9iMjRwTzF4dUlDQjlYRzVjYm4xY2JseHVYRzVjYmk4dklGZEZRbEJCUTBzZ1JrOVBWRVZTSUM4dlhHNHZMeUF1TDM0dmFuTm9hVzUwTFd4dllXUmxjaUV1TDJ4cFlpOXBiblJsY21aaFkyVnpMM0JwWVc1dkxtcHpJaXdpSjNWelpTQnpkSEpwWTNRbk8xeHVYRzVzWlhRZ2MzWm5JRDBnY21WeGRXbHlaU2duTGk0dmRYUnBiQzl6ZG1jbktUdGNibXhsZENCa2IyMGdQU0J5WlhGMWFYSmxLQ2N1TGk5MWRHbHNMMlJ2YlNjcE8xeHViR1YwSUVsdWRHVnlabUZqWlNBOUlISmxjWFZwY21Vb0p5NHVMMk52Y21VdmFXNTBaWEptWVdObEp5azdYRzVzWlhRZ1FuVjBkRzl1VkdWdGNHeGhkR1VnUFNCeVpYRjFhWEpsS0NjdUxpOWpiMjF3YjI1bGJuUnpMMkoxZEhSdmJuUmxiWEJzWVhSbEp5azdYRzVzWlhRZ1RXRjBjbWw0VFc5a1pXd2dQU0J5WlhGMWFYSmxLQ2N1TGk5dGIyUmxiSE12YldGMGNtbDRKeWs3WEc1c1pYUWdRMjkxYm5SbGNrMXZaR1ZzSUQwZ2NtVnhkV2x5WlNnbkxpNHZiVzlrWld4ekwyTnZkVzUwWlhJbktUdGNibXhsZENCMGIzVmphQ0E5SUhKbGNYVnBjbVVvSnk0dUwzVjBhV3d2ZEc5MVkyZ25LVHRjYmx4dVhHNWNibU5zWVhOeklFMWhkSEpwZUVObGJHd2daWGgwWlc1a2N5QkNkWFIwYjI1VVpXMXdiR0YwWlNCN1hHNWNiaUFnWTI5dWMzUnlkV04wYjNJb0tTQjdYRzVjYmlBZ0lDQnNaWFFnYjNCMGFXOXVjeUE5SUZzbmRtRnNkV1VuTEYwN1hHNWNiaUFnSUNCc1pYUWdaR1ZtWVhWc2RITWdQU0I3WEc0Z0lDQWdJQ0FuYzJsNlpTYzZJRnM0TUN3NE1GMHNYRzRnSUNBZ0lDQW5kR0Z5WjJWMEp6b2dabUZzYzJVc1hHNGdJQ0FnSUNBbmJXOWtaU2M2SUNkMGIyZG5iR1VuTEZ4dUlDQWdJQ0FnSjNaaGJIVmxKem9nTUZ4dUlDQWdJSDA3WEc1Y2JpQWdJQ0J6ZFhCbGNpaGhjbWQxYldWdWRITXNiM0IwYVc5dWN5eGtaV1poZFd4MGN5azdYRzVjYmlBZ0lDQjBhR2x6TG1sdVpHVjRJRDBnZEdocGN5NXpaWFIwYVc1bmN5NXBibVJsZUR0Y2JpQWdJQ0IwYUdsekxuSnZkeUE5SUhSb2FYTXVjMlYwZEdsdVozTXVjbTkzTzF4dUlDQWdJSFJvYVhNdVkyOXNkVzF1SUQwZ2RHaHBjeTV6WlhSMGFXNW5jeTVqYjJ4MWJXNDdYRzVjYmlBZ0lDQjBhR2x6TG0xaGRISnBlQ0E5SUhSb2FYTXVjMlYwZEdsdVozTXViV0YwY21sNE8xeHVYRzRnSUNBZ2RHaHBjeTVwYm5SbGNtRmpkR2x1WnlBOUlHWmhiSE5sTzF4dUlDQWdJSFJvYVhNdWNHRnBiblJpY25WemFDQTlJR1poYkhObE8xeHVYRzRnSUNBZ2RHaHBjeTVwYm1sMEtDazdYRzRnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmx4dUlDQjlYRzVjYmlBZ1luVnBiR1JHY21GdFpTZ3BJSHRjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblFnUFNCemRtY3VZM0psWVhSbEtDZHpkbWNuS1R0Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdWMyVjBRWFIwY21saWRYUmxLQ2QzYVdSMGFDY3NkR2hwY3k1M2FXUjBhQ2s3WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG5ObGRFRjBkSEpwWW5WMFpTZ25hR1ZwWjJoMEp5eDBhR2x6TG1obGFXZG9kQ2s3WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG5OMGVXeGxMblJ2Y0NBOUlDY3djSGduTzF4dUlDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1emRIbHNaUzVzWldaMElEMGdKekJ3ZUNjN1hHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExuTjBlV3hsTG5CdmMybDBhVzl1SUQwZ0oyRmljMjlzZFhSbEp6dGNiaUFnSUNCMGFHbHpMbkJoY21WdWRDNWhjSEJsYm1SRGFHbHNaQ2gwYUdsekxtVnNaVzFsYm5RcE8xeHVJQ0I5WEc1Y2JpQWdZblZwYkdSSmJuUmxjbVpoWTJVb0tTQjdYRzVjYmlBZ0lDQjBhR2x6TG5CaFpDQTlJSE4yWnk1amNtVmhkR1VvSjNKbFkzUW5LVHRjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1WVhCd1pXNWtRMmhwYkdRb2RHaHBjeTV3WVdRcE8xeHVYRzRnSUNBZ2RHaHBjeTVwYm5SbGNtRmpkR2x2YmxSaGNtZGxkQ0E5SUhSb2FYTXVjR0ZrTzF4dVhHNGdJQ0FnTHlvZ1pYWmxiblJ6SUNvdlhHNWNiaUFnSUNCcFppQW9JWFJ2ZFdOb0xtVjRhWE4wY3lrZ2UxeHVYRzRnSUNBZ0lDQjBhR2x6TG1Oc2FXTnJJRDBnS0NrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0IwYUdsekxtMWhkSEpwZUM1cGJuUmxjbUZqZEdsdVp5QTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lIUm9hWE11YldGMGNtbDRMbkJoYVc1MFluSjFjMmdnUFNBaGRHaHBjeTV6ZEdGMFpUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1a2IzZHVLSFJvYVhNdWJXRjBjbWw0TG5CaGFXNTBZbkoxYzJncE8xeHVJQ0FnSUNBZ2ZUdGNiaUFnSUNBZ0lIUm9hWE11Y0dGa0xtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJb0oyMXZkWE5sYjNabGNpY3NJQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXViV0YwY21sNExtbHVkR1Z5WVdOMGFXNW5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTVrYjNkdUtIUm9hWE11YldGMGNtbDRMbkJoYVc1MFluSjFjMmdwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOUtUdGNibHh1WEc0Z0lDQWdJQ0IwYUdsekxtMXZkbVVnUFNBb0tTQTlQaUI3WEc0Z0lDQWdJQ0I5TzF4dUlDQWdJQ0FnZEdocGN5NXdZV1F1WVdSa1JYWmxiblJNYVhOMFpXNWxjaWduYlc5MWMyVnRiM1psSnl3Z0tHVXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdWJXRjBjbWw0TG1sdWRHVnlZV04wYVc1bktTQjdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tDRjBhR2x6TG05bVpuTmxkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1dlptWnpaWFFnUFNCa2IyMHVabWx1WkZCdmMybDBhVzl1S0hSb2FYTXVaV3hsYldWdWRDazdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11Ylc5MWMyVWdQU0JrYjIwdWJHOWpZWFJsVFc5MWMyVW9aU3gwYUdsekxtOW1abk5sZENrN1hHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1aVpXNWtLQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgwcE8xeHVYRzVjYmlBZ0lDQWdJSFJvYVhNdWNtVnNaV0Z6WlNBOUlDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV0WVhSeWFYZ3VhVzUwWlhKaFkzUnBibWNnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJSDA3WEc0Z0lDQWdJQ0IwYUdsekxuQmhaQzVoWkdSRmRtVnVkRXhwYzNSbGJtVnlLQ2R0YjNWelpYVndKeXdnS0NrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTV0WVhSeWFYZ3VhVzUwWlhKaFkzUnBibWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG5Wd0tDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnZEdocGN5NXdZV1F1WVdSa1JYWmxiblJNYVhOMFpXNWxjaWduYlc5MWMyVnZkWFFuTENBb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG0xaGRISnBlQzVwYm5SbGNtRmpkR2x1WnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWRYQW9LVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnZlZ4dVhHNGdJSDFjYmx4dUlDQnphWHBsU1c1MFpYSm1ZV05sS0NrZ2UxeHVYRzRnSUNBZ2RHaHBjeTV3WVdRdWMyVjBRWFIwY21saWRYUmxLQ2Q0Snl3eEtUdGNiaUFnSUNCMGFHbHpMbkJoWkM1elpYUkJkSFJ5YVdKMWRHVW9KM2tuTERFcE8xeHVJQ0FnSUdsbUlDaDBhR2x6TG5kcFpIUm9JRDRnTWlrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV3WVdRdWMyVjBRWFIwY21saWRYUmxLQ2QzYVdSMGFDY3NJSFJvYVhNdWQybGtkR2dnTFNBeUtUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnZEdocGN5NXdZV1F1YzJWMFFYUjBjbWxpZFhSbEtDZDNhV1IwYUNjc0lIUm9hWE11ZDJsa2RHZ3BPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9kR2hwY3k1b1pXbG5hSFFnUGlBeUtTQjdYRzRnSUNBZ0lDQjBhR2x6TG5CaFpDNXpaWFJCZEhSeWFXSjFkR1VvSjJobGFXZG9kQ2NzSUhSb2FYTXVhR1ZwWjJoMElDMGdNaWs3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lIUm9hWE11Y0dGa0xuTmxkRUYwZEhKcFluVjBaU2duYUdWcFoyaDBKeXdnZEdocGN5NW9aV2xuYUhRcE8xeHVJQ0FnSUgxY2JpQWdJQ0F2TDNSb2FYTXVjR0ZrTG5ObGRFRjBkSEpwWW5WMFpTZ25hR1ZwWjJoMEp5d2dkR2hwY3k1b1pXbG5hSFFnTFNBeUtUdGNiaUFnSUNCMGFHbHpMbkJoWkM1elpYUkJkSFJ5YVdKMWRHVW9KMlpwYkd3bkxDQjBhR2x6TG0xaGRISnBlQzVqYjJ4dmNuTXVabWxzYkNrN1hHNWNiaUFnZlZ4dVhHNGdJSEpsYm1SbGNpZ3BJSHRjYmlBZ0lDQnBaaUFvSVhSb2FYTXVjM1JoZEdVcElIdGNiaUFnSUNBZ0lIUm9hWE11Y0dGa0xuTmxkRUYwZEhKcFluVjBaU2duWm1sc2JDY3NJSFJvYVhNdWJXRjBjbWw0TG1OdmJHOXljeTVtYVd4c0tUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnZEdocGN5NXdZV1F1YzJWMFFYUjBjbWxpZFhSbEtDZG1hV3hzSnl3Z2RHaHBjeTV0WVhSeWFYZ3VZMjlzYjNKekxtRmpZMlZ1ZENrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYm4xY2JseHVMeW9xWEc0cUlGTmxjWFZsYm1ObGNseHVLbHh1S2lCQVpHVnpZM0pwY0hScGIyNGdSM0pwWkNCdlppQmlkWFIwYjI1eklIZHBkR2dnWW5WcGJIUXRhVzRnYzNSbGNDQnpaWEYxWlc1alpYSXVYRzRxWEc0cUlFQmtaVzF2SUR4a2FYWWdibVY0ZFhNdGRXazlYQ0p6WlhGMVpXNWpaWEpjSWlCemRIbHNaVDFjSW5kcFpIUm9PalF3TUhCNE8yaGxhV2RvZERveU1EQndlRHRjSWo0OEwyUnBkajVjYmlwY2Jpb2dRR1Y0WVcxd2JHVmNiaW9nZG1GeUlITmxjWFZsYm1ObGNpQTlJRzVsZHlCT1pYaDFjeTVUWlhGMVpXNWpaWElvSnlOMFlYSm5aWFFuS1Z4dUtseHVLaUJBWlhoaGJYQnNaVnh1S2lCMllYSWdjMlZ4ZFdWdVkyVnlJRDBnYm1WM0lFNWxlSFZ6TGxObGNYVmxibU5sY2lnbkkzUmhjbWRsZENjc2UxeHVLaUFnSjNOcGVtVW5PaUJiTkRBd0xESXdNRjBzWEc0cUlDQW5iVzlrWlNjNklDZDBiMmRuYkdVbkxGeHVLaUFnSjNKdmQzTW5PaUExTEZ4dUtpQWdKMk52YkhWdGJuTW5PaUF4TUZ4dUtuMHBYRzRxWEc0cUlFQnZkWFJ3ZFhSY2Jpb2dZMmhoYm1kbFhHNHFJRVpwY21WeklHRnVlU0IwYVcxbElIUm9aU0JwYm5SbGNtWmhZMlVuY3lCdFlYUnlhWGdnWTJoaGJtZGxjeTRnUEdKeVBseHVLaUJVYUdVZ1pYWmxiblFnWkdGMFlTQnBjeUJoYmlCdlltcGxZM1FnWTI5dWRHRnBibWx1WnlBOGFUNXliM2M4TDJrK0lDaHVkVzFpWlhJcExDQThhVDVqYjJ4MWJXNDhMMmsrSUNodWRXMWlaWElwTENCaGJtUWdQR2srYzNSaGRHVThMMmsrSUNoaWIyOXNaV0Z1S1NCd2NtOXdaWEowYVdWekxseHVLbHh1S2lCQWIzVjBjSFYwWlhoaGJYQnNaVnh1S2lCelpYRjFaVzVqWlhJdWIyNG9KMk5vWVc1blpTY3NablZ1WTNScGIyNG9kaWtnZTF4dUtpQWdJR052Ym5OdmJHVXViRzluS0hZcE8xeHVLaUI5S1Z4dUtseHVLaUJBYjNWMGNIVjBYRzRxSUhOMFpYQmNiaW9nUm1seVpYTWdZVzU1SUhScGJXVWdkR2hsSUhObGNYVmxibU5sY2lCemRHVndjeUIwYnlCMGFHVWdibVY0ZENCamIyeDFiVzRzSUdsdUlITmxjWFZsWTJVZ2JXOWtaUzRnUEdKeVBseHVLaUJVYUdVZ1pYWmxiblFnWkdGMFlTQnBjeUJoYmlBOGFUNWhjbkpoZVR3dmFUNGdZMjl1ZEdGcGJtbHVaeUJoYkd3Z2RtRnNkV1Z6SUdsdUlIUm9aU0JqYjJ4MWJXNHNJRHhwUG1KdmRIUnZiU0J5YjNjZ1ptbHljM1E4TDJrK0xseHVLbHh1S2lCQWIzVjBjSFYwWlhoaGJYQnNaVnh1S2lCelpYRjFaVzVqWlhJdWIyNG9KM04wWlhBbkxHWjFibU4wYVc5dUtIWXBJSHRjYmlvZ0lDQmpiMjV6YjJ4bExteHZaeWgyS1R0Y2Jpb2dmU2xjYmlvdlhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHTnNZWE56SUZObGNYVmxibU5sY2lCbGVIUmxibVJ6SUVsdWRHVnlabUZqWlNCN1hHNWNiaUFnWTI5dWMzUnlkV04wYjNJb0tTQjdYRzVjYmlBZ0lDQnNaWFFnYjNCMGFXOXVjeUE5SUZzbmRtRnNkV1VuWFR0Y2JseHVJQ0FnSUd4bGRDQmtaV1poZFd4MGN5QTlJSHRjYmlBZ0lDQWdJQ2R6YVhwbEp6b2dXelF3TUN3eU1EQmRMRnh1SUNBZ0lDQWdKMjF2WkdVbk9pQW5kRzluWjJ4bEp5eGNiaUFnSUNBZ0lDZHliM2R6SnpvZ05TeGNiaUFnSUNBZ0lDZGpiMngxYlc1ekp6b2dNVEJjYmlBZ0lDQjlPMXh1WEc0Z0lDQWdjM1Z3WlhJb1lYSm5kVzFsYm5SekxHOXdkR2x2Ym5Nc1pHVm1ZWFZzZEhNcE8xeHVYRzRnSUNBZ2RHaHBjeTVoWTNScGRtVWdQU0F0TVR0Y2JseHVJQ0FnSUM4cUtseHVJQ0FnSUNvZ1FuVjBkRzl1SUdsdWRHVnlZV04wYVc5dUlHMXZaR1U2SUhObFpTQkNkWFIwYjI1Y2JpQWdJQ0FxSUVCMGVYQmxJSHR6ZEhKcGJtZDlYRzRnSUNBZ0tpQkFaWGhoYlhCc1pTQmlkWFIwYjI0dWJXOWtaU0E5SUNkMGIyZG5iR1VuTzF4dUlDQWdJQ292WEc0Z0lDQWdkR2hwY3k1dGIyUmxJRDBnZEdocGN5NXpaWFIwYVc1bmN5NXRiMlJsTzF4dVhHNGdJQ0FnTHlvcVhHNGdJQ0FnS2lCVWFHVWdhVzUwWlhKMllXd2diMkpxWldOMElIZG9hV05vSUdOdmJuUnliMnh6SUhScGJXbHVaeUJoYm1RZ2MyVnhkV1Z1WTJVZ2MyTm9aV1IxYkdsdVp5NWNiaUFnSUNBcUlFQjBlWEJsSUh0cGJuUmxjblpoYkgxY2JpQWdJQ0FxTDF4dUlDQWdJSFJvYVhNdWFXNTBaWEoyWVd3Z1BTQnVaWGNnVG1WNGRYTXVTVzUwWlhKMllXd29NakF3TEdaMWJtTjBhVzl1S0NrZ2UzMHNabUZzYzJVcE95QXZMeUJxYzJocGJuUWdhV2R1YjNKbE9teHBibVZjYmx4dUlDQWdJQzhxS2x4dUlDQWdJQ29nUVNCTllYUnlhWGdnYlc5a1pXd2dZMjl1ZEdGcGJtbHVaeUJ0WlhSb2IyUnpJR1p2Y2lCdFlXNXBjSFZzWVhScGJtY2dkR2hsSUhObGNYVmxibU5sY2lkeklHRnljbUY1SUc5bUlIWmhiSFZsY3k0Z1ZHOGdiR1ZoY200Z2FHOTNJSFJ2SUcxaGJtbHdkV3hoZEdVZ2RHaGxJRzFoZEhKcGVDd2djbVZoWkNCaFltOTFkQ0IwYUdVZ2JXRjBjbWw0SUcxdlpHVnNMbHh1SUNBZ0lDb2dRSFI1Y0dVZ2UyMWhkSEpwZUgxY2JpQWdJQ0FxTDF4dUlDQWdJSFJvYVhNdWJXRjBjbWw0SUQwZ2JtVjNJRTFoZEhKcGVFMXZaR1ZzS0hSb2FYTXVjMlYwZEdsdVozTXVjbTkzY3l4MGFHbHpMbk5sZEhScGJtZHpMbU52YkhWdGJuTXBPMXh1SUNBZ0lIUm9hWE11YldGMGNtbDRMblZwSUQwZ2RHaHBjenRjYmx4dUlDQWdJQzhxS2x4dUlDQWdJQ29nUVNCRGIzVnVkR1Z5SUcxdlpHVnNJSGRvYVdOb0lIUm9aU0J6WlhGMVpXNWpaWElnYzNSbGNITWdkR2h5YjNWbmFDNGdSbTl5SUdWNFlXMXdiR1VzSUhsdmRTQmpiM1ZzWkNCMWMyVWdkR2hwY3lCdGIyUmxiQ0IwYnlCemRHVndJSFJvY205MVoyZ2dkR2hsSUhObGNYVmxibU5sY2lCcGJpQnlaWFpsY25ObExDQnlZVzVrYjIxc2VTd2diM0lnYVc0Z1lTQmtjblZ1YXlCM1lXeHJMbHh1SUNBZ0lDb2dRSFI1Y0dVZ2UyTnZkVzUwWlhKOVhHNGdJQ0FnS2k5Y2JpQWdJQ0IwYUdsekxuTjBaWEJ3WlhJZ1BTQnVaWGNnUTI5MWJuUmxjazF2WkdWc0tEQXNkR2hwY3k1amIyeDFiVzV6S1R0Y2JseHVJQ0FnSUhSb2FYTXVhVzVwZENncE8xeHVYRzRnSUgxY2JseHVJQ0JpZFdsc1pFWnlZVzFsS0NrZ2UxeHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRDQTlJR1J2WTNWdFpXNTBMbU55WldGMFpVVnNaVzFsYm5Rb0oyUnBkaWNwTzF4dUlDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1emRIbHNaUzV3YjNOcGRHbHZiaUE5SUNkeVpXeGhkR2wyWlNjN1hHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExuTjBlV3hsTG1ScGMzQnNZWGtnUFNBbllteHZZMnNuTzF4dUlDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1emRIbHNaUzUzYVdSMGFDQTlJQ2N4TURBbEp6dGNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUXVjM1I1YkdVdWFHVnBaMmgwSUQwZ0p6RXdNQ1VuTzF4dUlDQWdJSFJvYVhNdWNHRnlaVzUwTG1Gd2NHVnVaRU5vYVd4a0tIUm9hWE11Wld4bGJXVnVkQ2s3WEc0Z0lDQWdhV1lnS0hSdmRXTm9MbVY0YVhOMGN5a2dlMXh1SUNBZ0lDQWdkR2hwY3k1aFpHUlViM1ZqYUV4cGMzUmxibVZ5Y3lncE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lHSjFhV3hrU1c1MFpYSm1ZV05sS0NrZ2UxeHVYRzRnSUNBZ2RHaHBjeTVqWld4c2N5QTlJRnRkTzF4dUlDQWdJR1p2Y2lBb2JHVjBJR2s5TUR0cFBIUm9hWE11YldGMGNtbDRMbXhsYm1kMGFEdHBLeXNwSUh0Y2JseHVJQ0FnSUNBZ2JHVjBJR3h2WTJGMGFXOXVJRDBnZEdocGN5NXRZWFJ5YVhndWJHOWpZWFJsS0drcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z2NtVjBkWEp1Y3lCN2NtOTNMR052YkgxY2JseHVJQ0FnSUNBZ2JHVjBJR052Ym5SaGFXNWxjaUE5SUdSdlkzVnRaVzUwTG1OeVpXRjBaVVZzWlcxbGJuUW9KM053WVc0bktUdGNiaUFnSUNBZ0lHTnZiblJoYVc1bGNpNXpkSGxzWlM1d2IzTnBkR2x2YmlBOUlDZGhZbk52YkhWMFpTYzdYRzVjYmx4dUlDQWdJQ0FnYkdWMElHTmxiR3dnUFNCdVpYY2dUV0YwY21sNFEyVnNiQ2hqYjI1MFlXbHVaWElzSUh0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjF3YjI1bGJuUTZJSFJ5ZFdVc1hHNGdJQ0FnSUNBZ0lDQWdhVzVrWlhnNklHa3NYRzRnSUNBZ0lDQWdJQ0FnY205M09pQnNiMk5oZEdsdmJpNXliM2NzWEc0Z0lDQWdJQ0FnSUNBZ1kyOXNkVzF1T2lCc2IyTmhkR2x2Ymk1amIyeDFiVzRzWEc0Z0lDQWdJQ0FnSUNBZ2JXOWtaVG9nZEdocGN5NXRiMlJsTEZ4dUlDQWdJQ0FnSUNBZ0lHMWhkSEpwZURvZ2RHaHBjMXh1SUNBZ0lDQWdJQ0I5TENCMGFHbHpMbXRsZVVOb1lXNW5aUzVpYVc1a0tIUm9hWE1zYVNrcE8xeHVYRzRnSUNBZ0x5OGdJR05sYkd3dWJXRjBjbWw0SUQwZ2RHaHBjenRjYmlBZ0lDQWdJR2xtSUNoMGIzVmphQzVsZUdsemRITXBJSHRjYmlBZ0lDQWdJQ0FnWTJWc2JDNXdZV1F1YVc1a1pYZ2dQU0JwTzF4dUlDQWdJQ0FnSUNCalpXeHNMbkJ5WlVOc2FXTnJJRDBnWTJWc2JDNXdjbVZOYjNabElEMGdZMlZzYkM1d2NtVlNaV3hsWVhObElEMGdLQ2tnUFQ0Z2UzMDdYRzRnSUNBZ0lDQWdJR05sYkd3dVkyeHBZMnNnUFNCalpXeHNMbTF2ZG1VZ1BTQmpaV3hzTG5KbGJHVmhjMlVnUFNBb0tTQTlQaUI3ZlR0Y2JpQWdJQ0FnSUNBZ1kyVnNiQzV3Y21WVWIzVmphQ0E5SUdObGJHd3VjSEpsVkc5MVkyaE5iM1psSUQwZ1kyVnNiQzV3Y21WVWIzVmphRkpsYkdWaGMyVWdQU0FvS1NBOVBpQjdmVHRjYmlBZ0lDQWdJQ0FnWTJWc2JDNTBiM1ZqYUNBOUlHTmxiR3d1ZEc5MVkyaE5iM1psSUQwZ1kyVnNiQzUwYjNWamFGSmxiR1ZoYzJVZ1BTQW9LU0E5UGlCN2ZUdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdkR2hwY3k1alpXeHNjeTV3ZFhOb0tHTmxiR3dwTzF4dUlDQWdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExtRndjR1Z1WkVOb2FXeGtLR052Ym5SaGFXNWxjaWs3WEc1Y2JpQWdJQ0I5WEc0Z0lDQWdkR2hwY3k1emFYcGxTVzUwWlhKbVlXTmxLQ2s3WEc0Z0lIMWNibHh1SUNCemFYcGxTVzUwWlhKbVlXTmxLQ2tnZTF4dVhHNGdJQ0FnYkdWMElHTmxiR3hYYVdSMGFDQTlJSFJvYVhNdWQybGtkR2dnTHlCMGFHbHpMbU52YkhWdGJuTTdYRzRnSUNBZ2JHVjBJR05sYkd4SVpXbG5hSFFnUFNCMGFHbHpMbWhsYVdkb2RDQXZJSFJvYVhNdWNtOTNjenRjYmx4dUlDQWdJR1p2Y2lBb2JHVjBJR2s5TURzZ2FUeDBhR2x6TG1ObGJHeHpMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCc1pYUWdZMjl1ZEdGcGJtVnlJRDBnZEdocGN5NWpaV3hzYzF0cFhTNXdZWEpsYm5RN1hHNGdJQ0FnSUNCamIyNTBZV2x1WlhJdWMzUjViR1V1YkdWbWRDQTlJSFJvYVhNdVkyVnNiSE5iYVYwdVkyOXNkVzF1SUNvZ1kyVnNiRmRwWkhSb0lDc2dKM0I0Snp0Y2JpQWdJQ0FnSUdOdmJuUmhhVzVsY2k1emRIbHNaUzUwYjNBZ1BTQjBhR2x6TG1ObGJHeHpXMmxkTG5KdmR5QXFJR05sYkd4SVpXbG5hSFFnS3lBbmNIZ25PMXh1SUNBZ0lDQWdkR2hwY3k1alpXeHNjMXRwWFM1eVpYTnBlbVVvWTJWc2JGZHBaSFJvTEdObGJHeElaV2xuYUhRcE8xeHVJQ0FnSUgxY2JseHVYRzRnSUgxY2JseHVJQ0JqYjJ4dmNrbHVkR1Z5Wm1GalpTZ3BJSHRjYmlBZ0lDQm1iM0lnS0haaGNpQnBQVEE3SUdrOGRHaHBjeTVqWld4c2N5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnZEdocGN5NWpaV3hzYzF0cFhTNXlaVzVrWlhJb0tUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQjFjR1JoZEdVb0tTQjdYRzRnSUM4dklDQmpiMjV6YjJ4bExteHZaeWhjSW5Wd1pHRjBhVzVuTGk0dVhDSXBYRzRnSUNBZ0x5OXZiaUE5SUc5dUlIeDhJR1poYkhObE8xeHVJQ0FnSUhSb2FYTXViV0YwY21sNExtbDBaWEpoZEdVb0tISXNZeXhwS1NBOVBpQjdYRzRnSUNBZ0lDQXZMeUFnWTI5dWMyOXNaUzVzYjJjb2RHaHBjeTV0WVhSeWFYZ3VjR0YwZEdWeWJsdHlYVnRqWFN3Z2RHaHBjeTVqWld4c2MxdHBYUzV6ZEdGMFpTazdYRzRnSUNBZ0lDQnBaaUFvZEdocGN5NXRZWFJ5YVhndWNHRjBkR1Z5Ymx0eVhWdGpYU0FoUFQwZ2RHaHBjeTVqWld4c2MxdHBYUzV6ZEdGMFpTa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTV0WVhSeWFYZ3VjR0YwZEdWeWJsdHlYVnRqWFNBK0lEQXBJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbU5sYkd4elcybGRMblIxY201UGJpZ3BPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVZMlZzYkhOYmFWMHVkSFZ5Yms5bVppZ3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmU2s3WEc0Z0lIMWNibHh1THk4Z2RYQmtZWFJsSUQwK0lHTmxiR3d1ZEhWeWJrOXVJRDArSUdObGJHd3VaVzFwZENBOVBpQnJaWGxEYUdGdVoyVWdLSE5sY1M1bGJXbDBLU0E5UGlCdFlYUnlhWGd1YzJWMExtTmxiR3dnUFQ0Z2RYQmtZWFJsWEc0dkwxeHVMeThnYVc1MFpYSmhZM1JwYjI0Z1BUNGdhMlY1UTJoaGJtZGxJRDArSUcxaGRISnBlQzV6WlhRdVkyVnNiQ0E5UGlCMWNHUmhkR1VnUFQ0Z1kyVnNiQzUwZFhKdVQyNWNiaTh2SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUFQ0Z1pXMXBkRnh1THk5Y2JpOHZJSE5sZEM1alpXeHNJRDArSUhWd1pHRjBaU0E5UGlCdVpXVmtjeUIwYnlCbGJXbDBMbHh1WEc0Z0lHdGxlVU5vWVc1blpTaHViM1JsTEc5dUtTQjdYRzRnSUNBZ0x5OGdaVzFwZENCa1lYUmhJR1p2Y2lCaGJua2dhMlY1SUhSMWNtNXBibWNnYjI0dmIyWm1YRzRnSUNBZ0x5OGdhU0JwY3lCMGFHVWdibTkwWlNCcGJtUmxlRnh1SUNBZ0lDOHZJSFlnYVhNZ2QyaGxkR2hsY2lCcGRDQnBjeUJ2YmlCdmNpQnZabVpjYmlBZ0lDQnNaWFFnWTJWc2JDQTlJSFJvYVhNdWJXRjBjbWw0TG14dlkyRjBaU2h1YjNSbEtUdGNiaUFnTHk4Z0lIUm9hWE11YldGMGNtbDRMbk5sZEM1alpXeHNLR05sYkd3dVkyOXNkVzF1TEdObGJHd3VjbTkzTEc5dUtUdGNiaUFnSUNCMGFHbHpMbTFoZEhKcGVDNXdZWFIwWlhKdVcyTmxiR3d1Y205M1hWdGpaV3hzTG1OdmJIVnRibDBnUFNCdmJqdGNiaUFnSUNCMllYSWdaR0YwWVNBOUlIdGNiaUFnSUNBZ0lISnZkem9nWTJWc2JDNXliM2NzWEc0Z0lDQWdJQ0JqYjJ4MWJXNDZJR05sYkd3dVkyOXNkVzF1TEZ4dUlDQWdJQ0FnYzNSaGRHVTZJRzl1WEc0Z0lDQWdmVHRjYmlBZ0lDQjBhR2x6TG1WdGFYUW9KMk5vWVc1blpTY3NaR0YwWVNrN1hHNGdJSDFjYmx4dUlDQnlaVzVrWlhJb0tTQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdWMzUmxjSEJsY2k1MllXeDFaU0ErUFNBd0tTQjdYRzRnSUNBZ0lDQjBhR2x6TG0xaGRISnBlQzVwZEdWeVlYUmxLQ2h5TEdNc2FTa2dQVDRnZTF4dUlDQWdJQ0FnSUNCcFppQW9ZejA5UFhSb2FYTXVjM1JsY0hCbGNpNTJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVkyVnNiSE5iYVYwdWNHRmtMbk5sZEVGMGRISnBZblYwWlNnbmMzUnliMnRsSnl4MGFHbHpMbU52Ykc5eWN5NXRaV1JwZFcxTWFXZG9kQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTVqWld4c2MxdHBYUzV3WVdRdWMyVjBRWFIwY21saWRYUmxLQ2R6ZEhKdmEyVXRkMmxrZEdnbkxDY3hKeWs3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTVqWld4c2MxdHBYUzV3WVdRdWMyVjBRWFIwY21saWRYUmxLQ2R6ZEhKdmEyVXRiM0JoWTJsMGVTY3NKekVuS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG1ObGJHeHpXMmxkTG5CaFpDNXpaWFJCZEhSeWFXSjFkR1VvSjNOMGNtOXJaU2NzSjI1dmJtVW5LVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGTjBZWEowSUhObGNYVmxibU5wYm1kY2JpQWdJQ29nUUhCaGNtRnRJQ0I3Ym5WdFltVnlmU0J0Y3lCQ1pXRjBJSFJsYlhCdklHbHVJRzFwYkd4cGMyVmpiMjVrYzF4dUlDQWdLaTljYmlBZ2MzUmhjblFvYlhNcElIdGNiaUFnSUNCMGFHbHpMbWx1ZEdWeWRtRnNMbVYyWlc1MElEMGdkR2hwY3k1dVpYaDBMbUpwYm1Rb2RHaHBjeWs3WEc0Z0lDQWdhV1lnS0cxektTQjdYRzRnSUNBZ0lDQjBhR2x6TG1sdWRHVnlkbUZzTG0xektHMXpLVHRjYmlBZ0lDQjlYRzRnSUNBZ2RHaHBjeTVwYm5SbGNuWmhiQzV6ZEdGeWRDZ3BPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJRk4wYjNBZ2MyVnhkV1Z1WTJsdVoxeHVJQ0FxTDF4dUlDQnpkRzl3S0NrZ2UxeHVJQ0FnSUhSb2FYTXVhVzUwWlhKMllXd3VjM1J2Y0NncE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lFMWhiblZoYkd4NUlHcDFiWEFnZEc4Z2RHaGxJRzVsZUhRZ1kyOXNkVzF1SUdGdVpDQjBjbWxuWjJWeUlIUm9aU0FuWTJoaGJtZGxKeUJsZG1WdWRDNGdWR2hsSUZ3aWJtVjRkRndpSUdOdmJIVnRiaUJwY3lCa1pYUmxjbTFwYm1Wa0lHSjVJSGx2ZFhJZ2JXOWtaU0J2WmlCelpYRjFaVzVqYVc1bkxseHVJQ0FxTDF4dUlDQnVaWGgwS0NrZ2UxeHVJQ0FnSUhSb2FYTXVjM1JsY0hCbGNpNXVaWGgwS0NrN1hHNGdJQ0FnZEdocGN5NWxiV2wwS0NkemRHVndKeXgwYUdsekxtMWhkSEpwZUM1amIyeDFiVzRvZEdocGN5NXpkR1Z3Y0dWeUxuWmhiSFZsS1M1eVpYWmxjbk5sS0NrcE8xeHVJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtDazdYRzRnSUgxY2JseHVJQ0JoWkdSVWIzVmphRXhwYzNSbGJtVnljeWdwSUh0Y2JseHVJQ0FnSUhSb2FYTXVjSEpsUTJ4cFkyc2dQU0IwYUdsekxuQnlaVTF2ZG1VZ1BTQjBhR2x6TG5CeVpWSmxiR1ZoYzJVZ1BTQW9LU0E5UGlCN2ZUdGNiaUFnSUNCMGFHbHpMbU5zYVdOcklEMGdkR2hwY3k1dGIzWmxJRDBnZEdocGN5NXlaV3hsWVhObElEMGdLQ2tnUFQ0Z2UzMDdYRzRnSUNBZ2RHaHBjeTV3Y21WVWIzVmphQ0E5SUhSb2FYTXVjSEpsVkc5MVkyaE5iM1psSUQwZ2RHaHBjeTV3Y21WVWIzVmphRkpsYkdWaGMyVWdQU0FvS1NBOVBpQjdmVHRjYmlBZ0lDQjBhR2x6TG5SdmRXTm9JRDBnZEdocGN5NTBiM1ZqYUUxdmRtVWdQU0IwYUdsekxuUnZkV05vVW1Wc1pXRnpaU0E5SUNncElEMCtJSHQ5TzF4dVhHNGdJQ0FnZEdocGN5NWpkWEp5Wlc1MFJXeGxiV1Z1ZENBOUlHWmhiSE5sTzF4dVhHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJb0ozUnZkV05vYzNSaGNuUW5MQ0FvWlNrZ1BUNGdlMXh1SUNBZ0lDQWdiR1YwSUdWc1pXMWxiblFnUFNCa2IyTjFiV1Z1ZEM1bGJHVnRaVzUwUm5KdmJWQnZhVzUwS0dVdWRHRnlaMlYwVkc5MVkyaGxjMXN3WFM1amJHbGxiblJZTEdVdWRHRnlaMlYwVkc5MVkyaGxjMXN3WFM1amJHbGxiblJaS1R0Y2JpQWdJQ0FnSUd4bGRDQmpaV3hzSUQwZ2RHaHBjeTVqWld4c2MxdGxiR1Z0Wlc1MExtbHVaR1Y0WFR0Y2JpQWdJQ0FnSUhSb2FYTXVjR0ZwYm5SaWNuVnphQ0E5SUNGalpXeHNMbk4wWVhSbE8xeHVJQ0FnSUNBZ1kyVnNiQzVrYjNkdUtIUm9hWE11Y0dGcGJuUmljblZ6YUNrN1hHNGdJQ0FnSUNCMGFHbHpMbU4xY25KbGJuUkZiR1Z0Wlc1MElEMGdaV3hsYldWdWRDNXBibVJsZUR0Y2JpQWdJQ0FnSUdVdWNISmxkbVZ1ZEVSbFptRjFiSFFvS1R0Y2JpQWdJQ0FnSUdVdWMzUnZjRkJ5YjNCaFoyRjBhVzl1S0NrN1hHNGdJQ0FnZlNrN1hHNWNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUXVZV1JrUlhabGJuUk1hWE4wWlc1bGNpZ25kRzkxWTJodGIzWmxKeXdnS0dVcElEMCtJSHRjYmlBZ0lDQWdJR3hsZENCbGJHVnRaVzUwSUQwZ1pHOWpkVzFsYm5RdVpXeGxiV1Z1ZEVaeWIyMVFiMmx1ZENobExuUmhjbWRsZEZSdmRXTm9aWE5iTUYwdVkyeHBaVzUwV0N4bExuUmhjbWRsZEZSdmRXTm9aWE5iTUYwdVkyeHBaVzUwV1NrN1hHNGdJQ0FnSUNCc1pYUWdZMlZzYkNBOUlIUm9hWE11WTJWc2JITmJaV3hsYldWdWRDNXBibVJsZUYwN1hHNGdJQ0FnSUNCcFppQW9aV3hsYldWdWRDNXBibVJsZUNFOVBYUm9hWE11WTNWeWNtVnVkRVZzWlcxbGJuUXBJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11WTNWeWNtVnVkRVZzWlcxbGJuUWdQajBnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR3hsZENCd1lYTjBRMlZzYkNBOUlIUm9hWE11WTJWc2JITmJkR2hwY3k1amRYSnlaVzUwUld4bGJXVnVkRjA3WEc0Z0lDQWdJQ0FnSUNBZ2NHRnpkRU5sYkd3dWRYQW9LVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCalpXeHNMbVJ2ZDI0b2RHaHBjeTV3WVdsdWRHSnlkWE5vS1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUdObGJHd3VZbVZ1WkNncE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2RHaHBjeTVqZFhKeVpXNTBSV3hsYldWdWRDQTlJR1ZzWlcxbGJuUXVhVzVrWlhnN1hHNGdJQ0FnSUNCbExuQnlaWFpsYm5SRVpXWmhkV3gwS0NrN1hHNGdJQ0FnSUNCbExuTjBiM0JRY205d1lXZGhkR2x2YmlncE8xeHVJQ0FnSUgwcE8xeHVYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbUZrWkVWMlpXNTBUR2x6ZEdWdVpYSW9KM1J2ZFdOb1pXNWtKeXdnS0dVcElEMCtJSHRjYmlBZ0lDQWdJQzh2SUc1dklIUnZkV05vWlhNZ2RHOGdZMkZzWTNWc1lYUmxJR0psWTJGMWMyVWdibTl1WlNCeVpXMWhhVzVwYm1kY2JpQWdJQ0FnSUd4bGRDQmpaV3hzSUQwZ2RHaHBjeTVqWld4c2MxdDBhR2x6TG1OMWNuSmxiblJGYkdWdFpXNTBYVHRjYmlBZ0lDQWdJR05sYkd3dWRYQW9LVHRjYmlBZ0lDQWdJSFJvYVhNdWFXNTBaWEpoWTNScGJtY2dQU0JtWVd4elpUdGNiaUFnSUNBZ0lIUm9hWE11WTNWeWNtVnVkRVZzWlcxbGJuUWdQU0JtWVd4elpUdGNiaUFnSUNBZ0lHVXVjSEpsZG1WdWRFUmxabUYxYkhRb0tUdGNiaUFnSUNBZ0lHVXVjM1J2Y0ZCeWIzQmhaMkYwYVc5dUtDazdYRzRnSUNBZ2ZTazdYRzVjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0JPZFcxaVpYSWdiMllnY205M2N5QnBiaUIwYUdVZ2MyVnhkV1Z1WTJWeVhHNGdJRUIwZVhCbElIdHVkVzFpWlhKOVhHNGdJQ292WEc0Z0lHZGxkQ0J5YjNkektDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbTFoZEhKcGVDNXliM2R6TzF4dUlDQjlYRzVjYmlBZ2MyVjBJSEp2ZDNNb2Rpa2dlMXh1SUNBZ0lIUm9hWE11YldGMGNtbDRMbkp2ZDNNZ1BTQjJPMXh1SUNBZ0lIUm9hWE11Wlcxd2RIa29LVHRjYmlBZ0lDQjBhR2x6TG1KMWFXeGtTVzUwWlhKbVlXTmxLQ2s3WEc0Z0lDQWdkR2hwY3k1MWNHUmhkR1VvS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNCT2RXMWlaWElnYjJZZ1kyOXNkVzF1Y3lCcGJpQjBhR1VnYzJWeGRXVnVZMlZ5WEc0Z0lFQjBlWEJsSUh0dWRXMWlaWEo5WEc0Z0lDb3ZYRzRnSUdkbGRDQmpiMngxYlc1ektDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbTFoZEhKcGVDNWpiMngxYlc1ek8xeHVJQ0I5WEc1Y2JpQWdjMlYwSUdOdmJIVnRibk1vZGlrZ2UxeHVJQ0FnSUhSb2FYTXViV0YwY21sNExtTnZiSFZ0Ym5NZ1BTQjJPMXh1SUNBZ0lIUm9hWE11YzNSbGNIQmxjaTV0WVhnZ1BTQjJPMXh1SUNBZ0lIUm9hWE11Wlcxd2RIa29LVHRjYmlBZ0lDQjBhR2x6TG1KMWFXeGtTVzUwWlhKbVlXTmxLQ2s3WEc0Z0lDQWdkR2hwY3k1MWNHUmhkR1VvS1R0Y2JpQWdmVnh1WEc1OVhHNWNibHh1WEc0dkx5QlhSVUpRUVVOTElFWlBUMVJGVWlBdkwxeHVMeThnTGk5K0wycHphR2x1ZEMxc2IyRmtaWEloTGk5c2FXSXZhVzUwWlhKbVlXTmxjeTl6WlhGMVpXNWpaWEl1YW5NaUxDSW5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JtbHRjRzl5ZENCdFlYUm9JR1p5YjIwZ0p5NHVMM1YwYVd3dmJXRjBhQ2M3WEc1cGJYQnZjblFnVTJWeGRXVnVZMlVnWm5KdmJTQW5MaTR2Ylc5a1pXeHpMM05sY1hWbGJtTmxKenRjYmx4dUx5OGdSbTl5SUhSb1pTQjBkWFJ2Y21saGJDd2diRzl2YTJsdVp5QmhkRnh1WEc0dkwxQmhkSFJsY200Z2MyVmpkR2x2YmpwY2JpOHZJQzVqY21WaGRHVW9LU3dnTG5KdmQzTXNJQzVqYjJ4MWJXNXpMRnh1THk4Z0xuQmhkSFJsY200c0lDNXNaVzVuZEdnc0lDNW1iM0p0WVhSQmMxUmxlSFFvS1N3Z0xteHZaeWdwTEZ4dUx5OGdMbXh2WTJGMFpTaHBLU3dnTG1sdVpHVjRUMllvWXl4eUtWeHVMeThnY205M0tDa3NJR052YkhWdGJpZ3BJQ2h5WlhSMWNtNXpJR052Ym5SbGJuUnpJRzltSUhKdmR5QnZjaUJqYjJ4MWJTbGNibHh1THk5RGIyNTBjbTlzSUhObFkzUnBiMjQ2WEc0dkx5QjBiMmRuYkdVZ2VETmNiaTh2SUhObGRDQjRORnh1THk4Z2NtOTBZWFJsSUhnelhHNHZMeUJ3YjNCMWJHRjBaU0I0TTF4dUx5OGdaWEpoYzJVZ2VETmNibHh1WEc0dkx5QnphRzkxYkdRZ2MyOXRaU0IyWlhKemFXOXVJRzltSUhSb2FYTWdhR0YyWlNCaElHWnNiMkYwSUhaaGJIVmxJR1p2Y2lCbFlXTm9JR05sYkd3L1hHNHZMeUJqYjNWc1pDQmlaU0JzYVd0bElHRWdiV2x5Y205eUlDNXdZWFIwWlhKdUlIUm9ZWFFnYUdGeklIWmhiSFZsY3k0Z1lua2daR1ZtWVhWc2RDd2daWFpsY25sMGFHbHVaeUJwY3lBeExDQmlkWFFnWTI5MWJHUWdZbVVnYzJWMExpNHVYRzR2THlCdWIzUWdZU0JuYjI5a0lIZGhlU0IwYnlCa2J5QjBhR0YwSUc5dUlHbHVkR1Z5Wm1GalpTd2dZblYwSUdGeklHRWdiVzlrWld3Z2FYUWdkMjkxYkdRZ1ltVWdibWxqWlM0dUxseHVMeThnWm05eUlDNW1iM0p0WVhSQmMxUmxlSFFvS1N3Z1kyOTFiR1FnYlhWc2RHbHdiSGtnWW5rZ01UQXdJR0Z1WkNCbWJHOXZjaXdnYzI4Z1pXRmphQ0JqWld4c0lHbHpJR0Z1SUdsdWRDQm1jbTl0SURBZ2RHOGdPVnh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5Qk5ZWFJ5YVhnZ2UxeHVYRzRnSUdOdmJuTjBjblZqZEc5eUtISnZkM01zWTI5c2RXMXVjeWtnZTF4dUlDQWdJQzh2SUhOb2IzVnNaQ0JoYkhOdklHaGhkbVVnWVdKcGJHbDBlU0IwYnlCamNtVmhkR1VnZFhOcGJtY2dZVzRnWlhocGMzUnBibWNnYldGMGNtbDRJQ2d5WkNCaGNuSmhlU2xjYmlBZ0lDQjBhR2x6TG5CaGRIUmxjbTRnUFNCYlhUdGNiaUFnSUNCMGFHbHpMbU55WldGMFpTaHliM2R6TEdOdmJIVnRibk1wTzF4dVhHNGdJQ0FnZEdocGN5NTBiMmRuYkdVZ1BTQjdYRzRnSUNBZ0lDQmpaV3hzT2lBb1kyOXNkVzF1TENCeWIzY3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV3WVhSMFpYSnVXM0p2ZDExYlkyOXNkVzF1WFNBOUlDRjBhR2x6TG5CaGRIUmxjbTViY205M1hWdGpiMngxYlc1ZE95QXZMeUJ0WVhSb0xtbHVkbVZ5ZENoMGFHbHpMbkJoZEhSbGNtNWJjbTkzWFZ0amIyeDFiVzVkS1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdWRXa3BJSHNnZEdocGN5NTFhUzUxY0dSaGRHVW9LVHNnZlZ4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NXdZWFIwWlhKdVczSnZkMTFiWTI5c2RXMXVYVHRjYmlBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0JoYkd3NklDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVwZEdWeVlYUmxLQ2h5TEdNcElEMCtJSHNnZEdocGN5NTBiMmRuYkdVdVkyVnNiQ2hqTEhJcE95QjlLVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11ZFdrcElIc2dkR2hwY3k1MWFTNTFjR1JoZEdVb0tUc2dmVnh1SUNBZ0lDQWdmU3hjYmlBZ0lDQWdJSEp2ZHpvZ0tISnZkeWtnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQm1iM0lnS0d4bGRDQnBQVEE3SUdrOGRHaHBjeTVqYjJ4MWJXNXpPeUJwS3lzcElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxuUnZaMmRzWlM1alpXeHNLR2tzY205M0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTUxYVNrZ2V5QjBhR2x6TG5WcExuVndaR0YwWlNncE95QjlYRzRnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdZMjlzZFcxdU9pQW9ZMjlzZFcxdUtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUdadmNpQW9iR1YwSUdrOU1Ec2dhVHgwYUdsekxuSnZkM003SUdrckt5a2dlMXh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVkRzluWjJ4bExtTmxiR3dvWTI5c2RXMXVMR2twTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxuVnBLU0I3SUhSb2FYTXVkV2t1ZFhCa1lYUmxLQ2s3SUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5TzF4dVhHNGdJQ0FnZEdocGN5NXpaWFFnUFNCN1hHNGdJQ0FnSUNCalpXeHNPaUFvWTI5c2RXMXVMQ0J5YjNjc0lIWmhiSFZsS1NBOVBpQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWNHRjBkR1Z5Ymx0eWIzZGRXMk52YkhWdGJsMGdQU0IyWVd4MVpUdGNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVkV2twSUhzZ2RHaHBjeTUxYVM1MWNHUmhkR1VvS1RzZ2ZWeHVJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lHRnNiRG9nS0haaGJIVmxjeWtnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQXZMeUJ6WlhRZ2RHaGxJSGRvYjJ4bElHMWhkSEpwZUNCMWMybHVaeUJoSURKa0lHRnljbUY1SUdGeklHbHVjSFYwWEc0Z0lDQWdJQ0FnSUM4dklIUm9hWE1nYzJodmRXeGtJR0ZzYzI4Z2NtVnphWHBsSUhSb1pTQmhjbkpoZVQ5Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV3WVhSMFpYSnVJRDBnZG1Gc2RXVnpPMXh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTUxYVNrZ2V5QjBhR2x6TG5WcExuVndaR0YwWlNncE95QjlYRzRnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdjbTkzT2lBb2NtOTNMSFpoYkhWbGN5a2dQVDRnZTF4dUlDQWdJQ0FnSUNBdkx5QnpaWFFnWVNCeWIzY2dkWE5wYm1jZ1lXNGdZWEp5WVhrZ1lYTWdhVzV3ZFhSY2JpQWdJQ0FnSUNBZ2RHaHBjeTV3WVhSMFpYSnVXM0p2ZDEwZ1BTQjJZV3gxWlhNN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxuVnBLU0I3SUhSb2FYTXVkV2t1ZFhCa1lYUmxLQ2s3SUgxY2JpQWdJQ0FnSUgwc1hHNGdJQ0FnSUNCamIyeDFiVzQ2SUNoamIyeDFiVzRzZG1Gc2RXVnpLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDOHZJSE5sZENCaElHTnZiSFZ0YmlCMWMybHVaeUJoYmlCaGNuSmhlU0JoY3lCcGJuQjFkRnh1SUNBZ0lDQWdJQ0IwYUdsekxuQmhkSFJsY200dVptOXlSV0ZqYUNnb2NtOTNMR2twSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxuQmhkSFJsY201YmFWMWJZMjlzZFcxdVhTQTlJSFpoYkhWbGMxdHBYVHRjYmlBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxuVnBLU0I3SUhSb2FYTXVkV2t1ZFhCa1lYUmxLQ2s3SUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5TzF4dVhHNGdJQ0FnZEdocGN5NXliM1JoZEdVZ1BTQjdYRzRnSUNBZ0lDQXZMM05vYjNWc1pDQmxkbVZ1ZEhWaGJHeDVJR1J2SUNoaGJXOTFiblJZTENCaGJXOTFiblJaS1NCb1pYSmxYRzRnSUNBZ0lDQXZMeUJqYjNWc1pDQnFkWE4wSUhWelpTQmhJR3h2YjNBZ1lXNWtJSFJvYVhNdWNtOTBZWFJsTG5KdmR5aHBMR0Z0YjNWdWRGZ3BPMXh1SUNBZ0lDQWdZV3hzT2lBb1lXMXZkVzUwS1NBOVBpQjdYRzRnSUNBZ0lDQWdJR2xtSUNnaFlXMXZkVzUwSUNZbUlHRnRiM1Z1ZENFOVBUQXBJSHRjYmlBZ0lDQWdJQ0FnSUNCaGJXOTFiblFnUFNBeE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR0Z0YjNWdWRDQWxQU0IwYUdsekxuQmhkSFJsY201Yk1GMHViR1Z1WjNSb08xeHVJQ0FnSUNBZ0lDQnBaaUFvWVcxdmRXNTBJRHdnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR0Z0YjNWdWRDQTlJSFJvYVhNdWNHRjBkR1Z5Ymxzd1hTNXNaVzVuZEdnZ0t5QmhiVzkxYm5RN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdabTl5SUNoc1pYUWdhVDB3T3lCcFBIUm9hWE11Y205M2N6c2dhU3NyS1NCN1hHNGdJQ0FnSUNBZ0lDQWdiR1YwSUdOMWRDQTlJSFJvYVhNdWNHRjBkR1Z5Ymx0cFhTNXpjR3hwWTJVb0lIUm9hWE11Y0dGMGRHVnlibHRwWFM1c1pXNW5kR2dnTFNCaGJXOTFiblFzSUdGdGIzVnVkQ0FwTzF4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11Y0dGMGRHVnlibHRwWFNBOUlHTjFkQzVqYjI1allYUW9JSFJvYVhNdWNHRjBkR1Z5Ymx0cFhTQXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG5WcEtTQjdJSFJvYVhNdWRXa3VkWEJrWVhSbEtDazdJSDFjYmlBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0J5YjNjNklDaHliM2NzWVcxdmRXNTBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2doWVcxdmRXNTBJQ1ltSUdGdGIzVnVkQ0U5UFRBcElIdGNiaUFnSUNBZ0lDQWdJQ0JoYlc5MWJuUWdQU0F4TzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHRnRiM1Z1ZENBbFBTQjBhR2x6TG5CaGRIUmxjbTViTUYwdWJHVnVaM1JvTzF4dUlDQWdJQ0FnSUNCcFppQW9ZVzF2ZFc1MElEd2dNQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lHRnRiM1Z1ZENBOUlIUm9hWE11Y0dGMGRHVnlibHN3WFM1c1pXNW5kR2dnS3lCaGJXOTFiblE3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2JHVjBJR04xZENBOUlIUm9hWE11Y0dGMGRHVnlibHR5YjNkZExuTndiR2xqWlNnZ2RHaHBjeTV3WVhSMFpYSnVXM0p2ZDEwdWJHVnVaM1JvSUMwZ1lXMXZkVzUwTENCaGJXOTFiblFnS1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV3WVhSMFpYSnVXM0p2ZDEwZ1BTQmpkWFF1WTI5dVkyRjBLQ0IwYUdsekxuQmhkSFJsY201YmNtOTNYU0FwTzF4dUlDQWdJQ0FnSUNCcFppQW9kR2hwY3k1MWFTa2dleUIwYUdsekxuVnBMblZ3WkdGMFpTZ3BPeUI5WEc0Z0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnWTI5c2RXMXVPaUFvWTI5c2RXMXVMQ0JoYlc5MWJuUXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLQ0ZoYlc5MWJuUWdKaVlnWVcxdmRXNTBJVDA5TUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR0Z0YjNWdWRDQTlJREU3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ1lXMXZkVzUwSUNVOUlIUm9hWE11Y0dGMGRHVnliaTVzWlc1bmRHZzdYRzRnSUNBZ0lDQWdJR2xtSUNoaGJXOTFiblFnUENBd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnWVcxdmRXNTBJRDBnZEdocGN5NXdZWFIwWlhKdUxteGxibWQwYUNBcklHRnRiM1Z1ZER0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnNaWFFnY0hKdmVIa2dQU0JiWFR0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV3WVhSMFpYSnVMbVp2Y2tWaFkyZ29LSEp2ZHlrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUhCeWIzaDVMbkIxYzJnb0lISnZkMXRqYjJ4MWJXNWRJQ2s3WEc0Z0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQnNaWFFnWTNWMElEMGdjSEp2ZUhrdWMzQnNhV05sS0NCd2NtOTRlUzVzWlc1bmRHZ2dMU0JoYlc5MWJuUXNJR0Z0YjNWdWRDQXBPMXh1SUNBZ0lDQWdJQ0J3Y205NGVTQTlJR04xZEM1amIyNWpZWFFvSUhCeWIzaDVJQ2s3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjR0YwZEdWeWJpNW1iM0pGWVdOb0tDaHliM2NzYVNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUhKdmQxdGpiMngxYlc1ZElEMGdjSEp2ZUhsYmFWMDdYRzRnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNCcFppQW9kR2hwY3k1MWFTa2dleUIwYUdsekxuVnBMblZ3WkdGMFpTZ3BPeUI5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVHRjYmx4dUlDQWdJQzh2SUhSb1pTQnBaR1ZoSUdKbGFHbHVaQ0J3YjNCMWJHRjBaU0JwY3lCMGJ5QmlaU0JoWW14bElIUnZJSE5sZENCaElIZG9iMnhsSUhKdmR5QnZjaUJqYjJ4MWJXNGdkRzhnTUNCdmNpQXhYRzRnSUNBZ0x5OGdTVVlnZEdobElIWmhiSFZsSUdseklHRWdabXh2WVhRc0lITjFZMmdnWVhNZ01DNDNMQ0IwYUdWdUlHbDBJSGR2ZFd4a0lHSmxZMjl0WlNCaElIQnliMkpoWW1sc2FYUjVYRzRnSUNBZ0x5OGdjMjhnY0c5d2RXeGhkR1VvTUM0M0tTQjNiM1ZzWkNCbmFYWmxJR1ZoWTJnZ1kyVnNiQ0JoSURjd0pTQmphR0Z1WTJVZ2IyWWdZbVZwYm1jZ01WeHVJQ0FnSUhSb2FYTXVjRzl3ZFd4aGRHVWdQU0I3WEc0Z0lDQWdJQ0JoYkd3NklDaHZaR1J6S1NBOVBpQjdYRzRnSUNBZ0lDQWdJR3hsZENCdlpHUnpVMlZ4ZFdWdVkyVWdQU0J1WlhjZ1UyVnhkV1Z1WTJVb2IyUmtjeWs3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVhWFJsY21GMFpTZ29jaXhqS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NXdZWFIwWlhKdVczSmRXMk5kSUQwZ2JXRjBhQzVqYjJsdUtHOWtaSE5UWlhGMVpXNWpaUzV1WlhoMEtDa3BPMXh1SUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUNBZ0x5OGdWR2hwY3lCamIzVnNaQ0JpWlNCMWMyVmtJSE52SUhSb1lYUWdaV0ZqYUNCeWIzY2dhR0Z6SUhOaGJXVWdiMlJrY3lCd1lYUjBaWEp1TENCbGRtVnVJR2xtSUhKdmR5QnNaVzVuZEdnZ2FYTWdibTkwSUdScGRtbHphV0pzZVNCaWVTQnpaWEYxWlc1alpTQnNaVzVuZEdndVhHNGdJQ0FnSUNBZ0lDOHZMQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdMeThnSUc5a1pITXVjRzl6SUQwZ0xURTdYRzRnSUNBZ0lDQWdJQzh2SUgxY2JpQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdWRXa3BJSHNnZEdocGN5NTFhUzUxY0dSaGRHVW9LVHNnZlZ4dUlDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUhKdmR6b2dLSEp2ZHowd0xHOWtaSE05TVNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0JzWlhRZ2IyUmtjMU5sY1hWbGJtTmxJRDBnYm1WM0lGTmxjWFZsYm1ObEtHOWtaSE1wTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbkJoZEhSbGNtNWJjbTkzWFM1bWIzSkZZV05vS0NoalpXeHNMR2twSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxuQmhkSFJsY201YmNtOTNYVnRwWFNBOUlHMWhkR2d1WTI5cGJpaHZaR1J6VTJWeGRXVnVZMlV1Ym1WNGRDZ3BLVHRjYmlBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxuVnBLU0I3SUhSb2FYTXVkV2t1ZFhCa1lYUmxLQ2s3SUgxY2JpQWdJQ0FnSUgwc1hHNGdJQ0FnSUNCamIyeDFiVzQ2SUNoamIyeDFiVzQ5TUN4dlpHUnpQVEVwSUQwK0lIdGNiaUFnSUNBZ0lDQWdiR1YwSUc5a1pITlRaWEYxWlc1alpTQTlJRzVsZHlCVFpYRjFaVzVqWlNodlpHUnpLVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXdZWFIwWlhKdUxtWnZja1ZoWTJnb0tISnZkeXhwS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NXdZWFIwWlhKdVcybGRXMk52YkhWdGJsMGdQU0J0WVhSb0xtTnZhVzRvYjJSa2MxTmxjWFZsYm1ObExtNWxlSFFvS1NrN1hHNGdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTUxYVNrZ2V5QjBhR2x6TG5WcExuVndaR0YwWlNncE95QjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZUdGNibHh1SUNBZ0lDOHZJR1Z6YzJWdWRHbGhiR3dnY0c5d2RXeGhkR1VvTUNrZ2MyOGdhU2R0SUc1dmRDQnpkWEpsSUdsbUlIUm9hWE1nYVhNZ2JtVmpaWE56WVhKNUlHSjFkQ0JwY3lCdWFXTmxYRzRnSUNBZ2RHaHBjeTVsY21GelpTQTlJSHRjYmlBZ0lDQWdJR0ZzYkRvZ0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbk5sZEM1aGJHd29NQ2s3WEc0Z0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnY205M09pQW9jbTkzS1NBOVBpQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWMyVjBMbkp2ZHloeWIzY3NNQ2s3WEc0Z0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnWTI5c2RXMXVPaUFvWTI5c2RXMXVLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11YzJWMExtTnZiSFZ0YmloamIyeDFiVzRzTUNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlR0Y2JseHVJQ0F2THlCbGJtUWdZMjl1YzNSeWRXTjBiM0pjYmlBZ2ZWeHVYRzVjYmlBZ1kzSmxZWFJsS0hKdmQzTXNZMjlzZFcxdWN5a2dlMXh1SUNBZ0lIUm9hWE11Y0dGMGRHVnliaUE5SUZ0ZE8xeHVJQ0FnSUdadmNpQW9JR3hsZENCeWIzYzlNRHNnY205M0lEd2djbTkzY3pzZ2NtOTNLeXNnS1NCN1hHNGdJQ0FnSUNCc1pYUWdZWEp5SUQwZ2JtVjNJRUZ5Y21GNUtHTnZiSFZ0Ym5NcE8xeHVJQ0FnSUNBZ2RHaHBjeTV3WVhSMFpYSnVMbkIxYzJnb1lYSnlLVHRjYmlBZ0lDQjlYRzRnSUNBZ2RHaHBjeTVwZEdWeVlYUmxLQ2h5TEdNcElEMCtJSHNnZEdocGN5NXdZWFIwWlhKdVczSmRXMk5kSUQwZ1ptRnNjMlU3SUgwcE8xeHVJQ0I5WEc1Y2JpQWdhWFJsY21GMFpTaG1MQ0JtTWlrZ2UxeHVJQ0FnSUd4bGRDQnBJRDBnTUR0Y2JpQWdJQ0JtYjNJZ0tDQnNaWFFnY205M1BUQTdJSEp2ZHlBOElIUm9hWE11Y205M2N6c2djbTkzS3lzZ0tTQjdYRzRnSUNBZ0lDQnBaaUFvWmpJcElIc2daaklvY205M0tUc2dmVnh1SUNBZ0lDQWdabTl5SUNnZ2JHVjBJR052YkhWdGJqMHdPeUJqYjJ4MWJXNGdQQ0IwYUdsekxtTnZiSFZ0Ym5NN0lHTnZiSFZ0YmlzcklDa2dlMXh1SUNBZ0lDQWdJQ0JtS0hKdmR5eGpiMngxYlc0c2FTazdYRzRnSUNBZ0lDQWdJR2tyS3p0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCbWIzSnRZWFJCYzFSbGVIUW9LU0I3WEc0Z0lDQWdiR1YwSUhCaGRIUmxjbTVUZEhKcGJtY2dQU0FuSnp0Y2JpQWdJQ0IwYUdsekxtbDBaWEpoZEdVb1hHNGdJQ0FnSUNBb2NpeGpLU0E5UGlCN0lIQmhkSFJsY201VGRISnBibWNnS3owZ0tIUm9hWE11Y0dGMGRHVnlibHR5WFZ0alhTQS9JREVnT2lBd0tTQXJJQ2NnSnpzZ2ZTeGNiaUFnSUNBZ0lDZ3BJRDArSUhzZ2NHRjBkR1Z5YmxOMGNtbHVaeUFyUFNBblhGeHVKenNnZlZ4dUlDQWdJQ2s3WEc0Z0lDQWdjbVYwZFhKdUlIQmhkSFJsY201VGRISnBibWM3WEc0Z0lIMWNibHh1SUNCc2IyY29LU0I3WEc0Z0lDQWdZMjl1YzI5c1pTNXNiMmNvZEdocGN5NW1iM0p0WVhSQmMxUmxlSFFvS1NrN1hHNGdJSDFjYmx4dUlDQjFjR1JoZEdVb2NHRjBkR1Z5YmlrZ2UxeHVJQ0FnSUhSb2FYTXVjR0YwZEdWeWJpQTlJSEJoZEhSbGNtNGdmSHdnZEdocGN5NXdZWFIwWlhKdU8xeHVJQ0I5WEc1Y2JpQWdaMlYwSUd4bGJtZDBhQ2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1eWIzZHpLblJvYVhNdVkyOXNkVzF1Y3p0Y2JpQWdmVnh1WEc0Z0lHeHZZMkYwWlNocGJtUmxlQ2tnZTF4dUlDQWdJQzh2SUhKbGRIVnlibk1nY205M0lHRnVaQ0JqYjJ4MWJXNGdiMllnWTJWc2JDQmllU0JwYm1SbGVGeHVJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0J5YjNjNklINStLQ0JwYm1SbGVDQXZJSFJvYVhNdVkyOXNkVzF1Y3lBcExGeHVJQ0FnSUNBZ1kyOXNkVzF1T2lCcGJtUmxlQ0FsSUhSb2FYTXVZMjlzZFcxdWMxeHVJQ0FnSUgwN1hHNGdJSDFjYmx4dUlDQnBibVJsZUU5bUtISnZkeXhqYjJ4MWJXNHBJSHRjYmlBZ0lDQnlaWFIxY200Z1kyOXNkVzF1SUNzZ2NtOTNJQ29nZEdocGN5NWpiMngxYlc1ek8xeHVJQ0FnSUM4dklISmxkSFZ5Ym5NZ2FXNWtaWGdnYjJZZ1kyVnNiQ0JpZVNCeWIzY2dZVzVrSUdOdmJIVnRibHh1SUNCOVhHNWNiaUFnY205M0tISnZkeWtnZTF4dUlDQWdJR3hsZENCa1lYUmhJRDBnVzEwN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVQwd095QnBQSFJvYVhNdVkyOXNkVzF1Y3pzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JrWVhSaExuQjFjMmdvZEdocGN5NXdZWFIwWlhKdVczSnZkMTBnUHlBeElEb2dNQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCa1lYUmhPMXh1SUNCOVhHNWNiaUFnWTI5c2RXMXVLR052YkhWdGJpa2dlMXh1SUNBZ0lHeGxkQ0JrWVhSaElEMGdXMTA3WEc0Z0lDQWdabTl5SUNoc1pYUWdhVDB3T3lCcFBIUm9hWE11Y205M2N6c2dhU3NyS1NCN1hHNGdJQ0FnSUNCa1lYUmhMbkIxYzJnb2RHaHBjeTV3WVhSMFpYSnVXMmxkVzJOdmJIVnRibDBnUHlBeElEb2dNQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCa1lYUmhPMXh1SUNCOVhHNWNiaUFnWjJWMElISnZkM01vS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWNHRjBkR1Z5Ymk1c1pXNW5kR2c3WEc0Z0lIMWNiaUFnYzJWMElISnZkM01vZGlrZ2UxeHVJQ0FnSUd4bGRDQndjbVYyYVc5MWN5QTlJSFJvYVhNdWNHRjBkR1Z5Ymk1emJHbGpaU2d3S1R0Y2JpQWdJQ0IwYUdsekxtTnlaV0YwWlNoMkxIUm9hWE11WTI5c2RXMXVjeWs3WEc0Z0lDQWdkR2hwY3k1cGRHVnlZWFJsS0NoeUxHTXBJRDArSUh0Y2JpQWdJQ0FnSUdsbUlDaHdjbVYyYVc5MWMxdHlYU0FtSmlCd2NtVjJhVzkxYzF0eVhWdGpYU2tnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbkJoZEhSbGNtNWJjbDFiWTEwZ1BTQndjbVYyYVc5MWMxdHlYVnRqWFR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5S1R0Y2JpQWdmVnh1WEc0Z0lHZGxkQ0JqYjJ4MWJXNXpLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5CaGRIUmxjbTViTUYwdWJHVnVaM1JvTzF4dUlDQjlYRzRnSUhObGRDQmpiMngxYlc1ektIWXBJSHRjYmlBZ0lDQnNaWFFnY0hKbGRtbHZkWE1nUFNCMGFHbHpMbkJoZEhSbGNtNHVjMnhwWTJVb01DazdYRzRnSUNBZ2RHaHBjeTVqY21WaGRHVW9kR2hwY3k1eWIzZHpMSFlwTzF4dUlDQWdJSFJvYVhNdWFYUmxjbUYwWlNnb2NpeGpLU0E5UGlCN1hHNGdJQ0FnSUNCcFppQW9jSEpsZG1sdmRYTmJjbDBnSmlZZ2NISmxkbWx2ZFhOYmNsMWJZMTBwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV3WVhSMFpYSnVXM0pkVzJOZElEMGdjSEpsZG1sdmRYTmJjbDFiWTEwN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNrN1hHNGdJSDFjYmx4dWZWeHVYRzVjYmx4dUx5OGdWMFZDVUVGRFN5QkdUMDlVUlZJZ0x5OWNiaTh2SUM0dmZpOXFjMmhwYm5RdGJHOWhaR1Z5SVM0dmJHbGlMMjF2WkdWc2N5OXRZWFJ5YVhndWFuTWlMQ0luZFhObElITjBjbWxqZENjN1hISmNibHh5WEc1cGJYQnZjblFnYldGMGFDQm1jbTl0SUNjdUxpOTFkR2xzTDIxaGRHZ25PMXh5WEc1cGJYQnZjblFnUkhKMWJtc2dabkp2YlNBbkxpOWtjblZ1YXljN1hISmNibHh5WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5QlRaWEYxWlc1alpTQjdYSEpjYmx4eVhHNGdJQ0FnWTI5dWMzUnlkV04wYjNJb2MyVnhkV1Z1WTJVZ1BTQmJNQ3d4TUN3eU1Dd3pNRjBzSUcxdlpHVTlKM1Z3Snl3Z2NHOXphWFJwYjI0OVptRnNjMlVwSUh0Y2NseHVJQ0FnSUNBZ0lDQjBhR2x6TG5aaGJIVmxjeUE5SUhObGNYVmxibU5sTzF4eVhHNGdJQ0FnSUNBZ0lHbG1JQ2doUVhKeVlYa3VhWE5CY25KaGVTaDBhR2x6TG5aaGJIVmxjeWtwSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWRtRnNkV1Z6SUQwZ1czUm9hWE11ZG1Gc2RXVnpYVHRjY2x4dUlDQWdJQ0FnSUNCOVhISmNiaUFnSUNBZ0lDQWdkR2hwY3k1ZmJXOWtaU0E5SUcxdlpHVTdYSEpjYmlBZ0lDQWdJQ0FnZEdocGN5NXdiM05wZEdsdmJpQTlJSEJ2YzJsMGFXOXVPMXh5WEc1Y2NseHVJQ0FnSUNBZ0lDQjBhR2x6TG1SeWRXNXJWMkZzYXlBOUlHNWxkeUJFY25WdWF5Z3dMQ0IwYUdsekxuWmhiSFZsY3k1c1pXNW5kR2dnTFNBeEtUdGNjbHh1WEhKY2JpQWdJQ0FnSUNBZ2RHaHBjeTV6ZEdGeWRGWmhiSFZsY3lBOUlIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNkMWNDYzZJREFzWEhKY2JpQWdJQ0FnSUNBZ0lDQW5aRzkzYmljNklIUm9hWE11ZG1Gc2RXVnpMbXhsYm1kMGFDQXRJREVzWEhKY2JpQWdJQ0FnSUNBZ0lDQW5aSEoxYm1zbk9pQitmaWgwYUdsekxuWmhiSFZsY3k1c1pXNW5kR2d2TWlrc1hISmNiaUFnSUNBZ0lDQWdJQ0FuY21GdVpHOXRKem9nYldGMGFDNXlhU2gwYUdsekxuWmhiSFZsY3k1c1pXNW5kR2dwWEhKY2JpQWdJQ0FnSUNBZ2ZUdGNjbHh1WEhKY2JpQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdWNHOXphWFJwYjI0aFBUMW1ZV3h6WlNrZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NXVaWGgwSUQwZ2RHaHBjMXQwYUdsekxsOXRiMlJsWFR0Y2NseHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NXVaWGgwSUQwZ2RHaHBjeTVtYVhKemREdGNjbHh1SUNBZ0lDQWdJQ0I5WEhKY2JseHlYRzVjY2x4dUlDQWdJSDFjY2x4dVhISmNiaUFnSUNCblpYUWdiVzlrWlNncElIdGNjbHh1SUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11WDIxdlpHVTdYSEpjYmlBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnYzJWMElHMXZaR1VvYlc5a1pTa2dlMXh5WEc0Z0lDQWdJQ0FnSUdsbUlDZ2hLRzF2WkdVZ1BUMDlJQ2QxY0NjZ2ZId2diVzlrWlNBOVBUMGdKMlJ2ZDI0bklIeDhJRzF2WkdVZ1BUMDlJQ2R5WVc1a2IyMG5JSHg4SUcxdlpHVWdQVDA5SUNka2NuVnVheWNwS1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuTnZiR1V1WlhKeWIzSW9KMVJvWlNCdmJteDVJRzF2WkdWeklHTjFjbkpsYm5Sc2VTQmhiR3h2ZDJWa0lHRnlaVG9nZFhBc0lHUnZkMjRzSUhKaGJtUnZiU3dnWkhKMWJtc25LVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdU8xeHlYRzRnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJQ0FnSUNCMGFHbHpMbDl0YjJSbElEMGdiVzlrWlR0Y2NseHVJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NXdiM05wZEdsdmJpa2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTV1WlhoMElEMGdkR2hwYzF0MGFHbHpMbDl0YjJSbFhUdGNjbHh1SUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ1oyVjBJSFpoYkhWbEtDa2dlMXh5WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1MllXeDFaWE5iZEdocGN5NXdiM05wZEdsdmJsMDdYSEpjYmlBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnYzJWMElIWmhiSFZsS0hZcElIdGNjbHh1SUNBZ0lDQWdkR2hwY3k1d2IzTnBkR2x2YmlBOUlIUm9hWE11ZG1Gc2RXVnpMbWx1WkdWNFQyWW9kaWs3WEhKY2JpQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ1ptbHljM1FvS1NCN1hISmNiaUFnSUNBZ0lHbG1JQ2gwYUdsekxuQnZjMmwwYVc5dUlUMDlabUZzYzJVcElIdGNjbHh1SUNBZ0lDQWdJQ0IwYUdsekxtNWxlSFFnUFNCMGFHbHpXM1JvYVhNdVgyMXZaR1ZkTzF4eVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMbTVsZUhRb0tUdGNjbHh1SUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0IwYUdsekxuQnZjMmwwYVc5dUlEMGdkR2hwY3k1emRHRnlkRlpoYkhWbGMxdDBhR2x6TGw5dGIyUmxYVHRjY2x4dUlDQWdJQ0FnZEdocGN5NXVaWGgwSUQwZ2RHaHBjMXQwYUdsekxsOXRiMlJsWFR0Y2NseHVJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTXVkbUZzZFdVN1hISmNiaUFnSUNCOVhISmNibHh5WEc0Z0lDQWdkWEFvS1NCN1hISmNiaUFnSUNBZ0lIUm9hWE11Y0c5emFYUnBiMjRyS3p0Y2NseHVJQ0FnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiaUFsUFNCMGFHbHpMblpoYkhWbGN5NXNaVzVuZEdnN1hISmNiaUFnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMblpoYkhWbE8xeHlYRzRnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJR1J2ZDI0b0tTQjdYSEpjYmlBZ0lDQWdJSFJvYVhNdWNHOXphWFJwYjI0dExUdGNjbHh1SUNBZ0lDQWdhV1lnS0hSb2FYTXVjRzl6YVhScGIyNGdQQ0F3S1NCN1hISmNiaUFnSUNBZ0lDQWdkR2hwY3k1d2IzTnBkR2x2YmlBOUlDaDBhR2x6TG5CdmMybDBhVzl1SUNzZ2RHaHBjeTUyWVd4MVpYTXViR1Z1WjNSb0tTQWxJSFJvYVhNdWRtRnNkV1Z6TG14bGJtZDBhRHRjY2x4dUlDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NTJZV3gxWlR0Y2NseHVJQ0FnSUgxY2NseHVYSEpjYmlBZ0lDQnlZVzVrYjIwb0tTQjdYSEpjYmlBZ0lDQWdJSFJvYVhNdWNHOXphWFJwYjI0Z1BTQnRZWFJvTG5KcEtEQXNJSFJvYVhNdWRtRnNkV1Z6TG14bGJtZDBhQ2s3WEhKY2JpQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxuWmhiSFZsTzF4eVhHNGdJQ0FnZlZ4eVhHNWNjbHh1SUNBZ0lHUnlkVzVyS0NrZ2UxeHlYRzRnSUNBZ0lDQjBhR2x6TG1SeWRXNXJWMkZzYXk1dFlYZ2dQU0IwYUdsekxuWmhiSFZsY3k1c1pXNW5kR2c3WEhKY2JpQWdJQ0FnSUhSb2FYTXVaSEoxYm10WFlXeHJMblpoYkhWbElEMGdkR2hwY3k1d2IzTnBkR2x2Ymp0Y2NseHVJQ0FnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiaUE5SUhSb2FYTXVaSEoxYm10WFlXeHJMbTVsZUhRb0tUdGNjbHh1SUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11ZG1Gc2RXVTdYSEpjYmlBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnTHlvZ1puVjBkWEpsSUcxbGRHaHZaSE5jY2x4dUlDQWdJQzVuY205MWNDaHpkR0Z5ZEN4emRHOXdLU0F0TFNCdmRYUndkWFJ6SUdFZ1ozSnZkWEFnYjJZZ2JpQnBkR1Z0Y3lCbWNtOXRJSFJvWlNCc2FYTjBMQ0IzYVhSb0lIZHlZWEJ3YVc1blhISmNiaUFnSUNBdWJHOXZjQ2h6ZEdGeWRDeHpkRzl3S1NBdExTQmpiMjVtYVc1bGN5QnpaWEYxWlc1amFXNW5JSFJ2SUdFZ2MzVmljMlYwSUc5bUlIUm9aU0IyWVd4MVpYTmNjbHh1SUNBZ0lDQWdJQ0FvWTI5MWJHUWdaWFpsYmlCb1lYWmxJR0VnWkdsemRHbHVZM1JwYjI0Z1ltVjBkMlZsYmlBdWIzSnBaMmx1WVd4V1lXeDFaWE1nWVc1a0lIUm9aU0JoY25KaGVTQnZaaUIyWVd4MVpYTWdZbVZwYm1jZ2RYTmxaQ2xjY2x4dUlDQWdJQ292WEhKY2JuMWNjbHh1WEc1Y2JseHVMeThnVjBWQ1VFRkRTeUJHVDA5VVJWSWdMeTljYmk4dklDNHZmaTlxYzJocGJuUXRiRzloWkdWeUlTNHZiR2xpTDIxdlpHVnNjeTl6WlhGMVpXNWpaUzVxY3lJc0lpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWFXMXdiM0owSUcxaGRHZ2dabkp2YlNBbkxpNHZkWFJwYkM5dFlYUm9KenRjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnWTJ4aGMzTWdSSEoxYm1zZ2UxeHVYRzRnSUNBZ1kyOXVjM1J5ZFdOMGIzSW9iV2x1UFRBc0lHMWhlRDA1TENCMllXeDFaVDB3TENCcGJtTnlaVzFsYm5ROU1Td2diRzl2Y0QxbVlXeHpaU2tnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbTFwYmlBOUlHMXBianRjYmlBZ0lDQWdJQ0FnZEdocGN5NXRZWGdnUFNCdFlYZzdYRzRnSUNBZ0lDQWdJSFJvYVhNdWRtRnNkV1VnUFNCMllXeDFaVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXBibU55WlcxbGJuUWdQU0JwYm1OeVpXMWxiblE3WEc0Z0lDQWdJQ0FnSUhSb2FYTXViRzl2Y0NBOUlHeHZiM0E3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdibVY0ZENncElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1MllXeDFaU0FyUFNCdFlYUm9MbkJwWTJzb0xURWdLaUIwYUdsekxtbHVZM0psYldWdWRDd2dkR2hwY3k1cGJtTnlaVzFsYm5RcE8xeHVJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NTJZV3gxWlNBK0lIUm9hWE11YldGNEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kR2hwY3k1c2IyOXdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NTJZV3gxWlNBOUlIUm9hWE11YldsdU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxuWmhiSFZsSUQwZ2RHaHBjeTV0WVhnZ0xTQjBhR2x6TG1sdVkzSmxiV1Z1ZER0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxuWmhiSFZsSUR3Z2RHaHBjeTV0YVc0cElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG14dmIzQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxuWmhiSFZsSUQwZ2RHaHBjeTV0WVhnN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdWRtRnNkV1VnUFNCMGFHbHpMbTFwYmlBcklIUm9hWE11YVc1amNtVnRaVzUwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxuWmhiSFZsTzF4dUlDQWdJSDFjYm4xY2JseHVYRzVjYmk4dklGZEZRbEJCUTBzZ1JrOVBWRVZTSUM4dlhHNHZMeUF1TDM0dmFuTm9hVzUwTFd4dllXUmxjaUV1TDJ4cFlpOXRiMlJsYkhNdlpISjFibXN1YW5NaUxDSW5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JtbHRjRzl5ZENCdFlYUm9JR1p5YjIwZ0p5NHVMM1YwYVd3dmJXRjBhQ2M3WEc1cGJYQnZjblFnUkhKMWJtc2dabkp2YlNBbkxpOWtjblZ1YXljN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHTnNZWE56SUVOdmRXNTBaWElnZTF4dVhHNGdJQ0FnWTI5dWMzUnlkV04wYjNJb2JXbHVQVEFzSUcxaGVEMHhNQ3dnYlc5a1pUMG5kWEFuTENCMllXeDFaVDFtWVd4elpTa2dlMXh1SUNBZ0lDQWdJQ0IwYUdsekxtMXBiaUE5SUcxcGJqdGNiaUFnSUNBZ0lDQWdkR2hwY3k1dFlYZ2dQU0J0WVhnN1hHNGdJQ0FnSUNBZ0lIUm9hWE11ZG1Gc2RXVWdQU0IyWVd4MVpUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1dGIyUmxJRDBnYlc5a1pUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1a2NuVnVhMWRoYkdzZ1BTQnVaWGNnUkhKMWJtc29kR2hwY3k1dGFXNHNJSFJvYVhNdWJXRjRLVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11ZG1Gc2RXVWhQVDFtWVd4elpTa2dlMXh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVibVY0ZENBOUlIUm9hWE5iZEdocGN5NWZiVzlrWlYwN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1dVpYaDBJRDBnZEdocGN5NW1hWEp6ZER0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUhObGRDQnRiMlJsS0cxdlpHVXBJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tDRW9iVzlrWlNBOVBUMGdKM1Z3SnlCOGZDQnRiMlJsSUQwOVBTQW5aRzkzYmljZ2ZId2diVzlrWlNBOVBUMGdKM0poYm1SdmJTY2dmSHdnYlc5a1pTQTlQVDBnSjJSeWRXNXJKeWtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OdmJHVXVaWEp5YjNJb0oxUm9aU0J2Ym14NUlHMXZaR1Z6SUdOMWNuSmxiblJzZVNCaGJHeHZkMlZrSUdGeVpUb2dkWEFzSUdSdmQyNHNJSEpoYm1SdmJTd2daSEoxYm1zbktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCMGFHbHpMbDl0YjJSbElEMGdiVzlrWlR0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdWRtRnNkV1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG01bGVIUWdQU0IwYUdselczUm9hWE11WDIxdlpHVmRPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdaMlYwSUcxdlpHVW9LU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxsOXRiMlJsTzF4dUlDQWdJSDFjYmx4dUlDQWdJR1pwY25OMEtDa2dlMXh1SUNBZ0lDQWdhV1lnS0hSb2FYTXVkbUZzZFdVaFBUMW1ZV3h6WlNrZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG01bGVIUWdQU0IwYUdselczUm9hWE11WDIxdlpHVmRPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1dVpYaDBLQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0IwYUdsekxuTjBZWEowVm1Gc2RXVnpJRDBnZTF4dUlDQWdJQ0FnSUNBbmRYQW5PaUIwYUdsekxtMXBiaXhjYmlBZ0lDQWdJQ0FnSjJSdmQyNG5PaUIwYUdsekxtMWhlQ3hjYmlBZ0lDQWdJQ0FnSjJSeWRXNXJKem9nZm41dFlYUm9MbUYyWlhKaFoyVW9kR2hwY3k1dGFXNHNkR2hwY3k1dFlYZ3BMRnh1SUNBZ0lDQWdJQ0FuY21GdVpHOXRKem9nYldGMGFDNXlhU2gwYUdsekxtMXBiaXgwYUdsekxtMWhlQ2xjYmlBZ0lDQWdJSDA3WEc0Z0lDQWdJQ0IwYUdsekxuWmhiSFZsSUQwZ2RHaHBjeTV6ZEdGeWRGWmhiSFZsYzF0MGFHbHpMbDl0YjJSbFhUdGNiaUFnSUNBZ0lIUm9hWE11Ym1WNGRDQTlJSFJvYVhOYmRHaHBjeTVmYlc5a1pWMDdYRzRnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTUyWVd4MVpUdGNiaUFnSUNCOVhHNWNiaUFnSUNCMWNDZ3BJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NTJZV3gxWlNzck8xeHVJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NTJZV3gxWlNBK1BTQjBhR2x6TG0xaGVDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTUyWVd4MVpTQTlJSFJvYVhNdWJXbHVPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxuWmhiSFZsTzF4dUlDQWdJSDFjYmx4dUlDQWdJR1J2ZDI0b0tTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWRtRnNkV1V0TFR0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdWRtRnNkV1VnUENCMGFHbHpMbTFwYmlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NTJZV3gxWlNBOUlIUm9hWE11YldGNE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TG5aaGJIVmxPMXh1SUNBZ0lIMWNibHh1SUNBZ0lISmhibVJ2YlNncElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1MllXeDFaU0E5SUcxaGRHZ3VjbWtvZEdocGN5NXRhVzRzSUhSb2FYTXViV0Y0S1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTXVkbUZzZFdVN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnWkhKMWJtc29LU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVaSEoxYm10WFlXeHJMbTFwYmlBOUlIUm9hWE11YldsdU8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG1SeWRXNXJWMkZzYXk1dFlYZ2dQU0IwYUdsekxtMWhlRHRjYmlBZ0lDQWdJQ0FnZEdocGN5NWtjblZ1YTFkaGJHc3VkbUZzZFdVZ1BTQjBhR2x6TG5aaGJIVmxPMXh1SUNBZ0lDQWdJQ0IwYUdsekxuWmhiSFZsSUQwZ2RHaHBjeTVrY25WdWExZGhiR3N1Ym1WNGRDZ3BPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1MllXeDFaVHRjYmlBZ0lDQjlYRzU5WEc1Y2JseHVYRzR2THlCWFJVSlFRVU5MSUVaUFQxUkZVaUF2TDF4dUx5OGdMaTkrTDJwemFHbHVkQzFzYjJGa1pYSWhMaTlzYVdJdmJXOWtaV3h6TDJOdmRXNTBaWEl1YW5NaUxDSW5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JteGxkQ0J6ZG1jZ1BTQnlaWEYxYVhKbEtDY3VMaTkxZEdsc0wzTjJaeWNwTzF4dWJHVjBJRzFoZEdnZ1BTQnlaWEYxYVhKbEtDY3VMaTkxZEdsc0wyMWhkR2duS1R0Y2JteGxkQ0JKYm5SbGNtWmhZMlVnUFNCeVpYRjFhWEpsS0NjdUxpOWpiM0psTDJsdWRHVnlabUZqWlNjcE8xeHViR1YwSUZOMFpYQWdQU0J5WlhGMWFYSmxLQ2N1TGk5dGIyUmxiSE12YzNSbGNDY3BPMXh1YVcxd2IzSjBJQ29nWVhNZ1NXNTBaWEpoWTNScGIyNGdabkp2YlNBbkxpNHZkWFJwYkM5cGJuUmxjbUZqZEdsdmJpYzdYRzVjYmk4cUtseHVLaUJRWVc0eVJGeHVLbHh1S2lCQVpHVnpZM0pwY0hScGIyNGdTVzUwWlhKbVlXTmxJR1p2Y2lCdGIzWnBibWNnWVNCemIzVnVaQ0JoY205MWJtUWdZVzRnWVhKeVlYa2diMllnYzNCbFlXdGxjbk11SUZOd1pXRnJaWElnYkc5allYUnBiMjV6SUdOaGJpQmlaU0JqZFhOMGIyMXBlbVZrTGlCVWFHVWdhVzUwWlhKbVlXTmxJR05oYkdOMWJHRjBaWE1nZEdobElHTnNiM05sYm1WemN5QnZaaUIwYUdVZ2MyOTFibVFnYzI5MWNtTmxJSFJ2SUdWaFkyZ2djM0JsWVd0bGNpQmhibVFnY21WMGRYSnVjeUIwYUdGMElHUnBjM1JoYm1ObElHRnpJR0VnYm5WdFpYSnBZeUIyWVd4MVpTNWNiaXBjYmlvZ1FHUmxiVzhnUEhOd1lXNGdibVY0ZFhNdGRXazlYQ0p3WVc0eVJGd2lQand2YzNCaGJqNWNiaXBjYmlvZ1FHVjRZVzF3YkdWY2Jpb2dkbUZ5SUhCaGJqSmtJRDBnYm1WM0lFNWxlSFZ6TGxCaGJqSmtLQ2NqZEdGeVoyVjBKeWxjYmlwY2Jpb2dRR1Y0WVcxd2JHVmNiaW9nZG1GeUlIQmhiakprSUQwZ2JtVjNJRTVsZUhWekxsQmhiakpFS0NjamRHRnlaMlYwSnl4N1hHNHFJQ0FnSjNOcGVtVW5PaUJiTWpBd0xESXdNRjBzWEc0cUlDQWdKM0poYm1kbEp6b2dNQzQxTENBZ0x5OGdaR1YwWldOMGFXOXVJSEpoWkdsMWN5QnZaaUJsWVdOb0lITndaV0ZyWlhKY2Jpb2dJQ0FuYlc5a1pTYzZJQ2RoWW5OdmJIVjBaU2NzSUNBZ0x5OGdKMkZpYzI5c2RYUmxKeUJ2Y2lBbmNtVnNZWFJwZG1VbklITnZkVzVrSUcxdmRtVnRaVzUwWEc0cUlDQWdKM053WldGclpYSnpKem9nV3lBZ0x5OGdkR2hsSUhOd1pXRnJaWElnVzNnc2VWMGdjRzl6YVhScGIyNXpYRzRxSUNBZ0lDQWdJRnN3TGpVc01DNHlYU3hjYmlvZ0lDQWdJQ0FnV3pBdU56VXNNQzR5TlYwc1hHNHFJQ0FnSUNBZ0lGc3dMamdzTUM0MVhTeGNiaW9nSUNBZ0lDQWdXekF1TnpVc01DNDNOVjBzWEc0cUlDQWdJQ0FnSUZzd0xqVXNNQzQ0WFN4Y2Jpb2dJQ0FnSUNBZ1d6QXVNalVzTUM0M05WMWNiaW9nSUNBZ0lDQWdXekF1TWl3d0xqVmRMRnh1S2lBZ0lDQWdJQ0JiTUM0eU5Td3dMakkxWFZ4dUtpQWdJRjFjYmlvZ2ZTbGNiaXBjYmlvZ1FHOTFkSEIxZEZ4dUtpQmphR0Z1WjJWY2Jpb2dSbWx5WlhNZ1lXNTVJSFJwYldVZ2RHaGxJRndpYzI5MWNtTmxYQ0lnYm05a1pTZHpJSEJ2YzJsMGFXOXVJR05vWVc1blpYTXVJRHhpY2o1Y2Jpb2dWR2hsSUdWMlpXNTBJR1JoZEdFZ2FYTWdZVzRnWVhKeVlYa2diMllnZEdobElHRnRjR3hwZEhWa1pYTWdLREF0TVNrc0lISmxjSEpsYzJWdWRHbHVaeUIwYUdVZ2JHVjJaV3dnYjJZZ1pXRmphQ0J6Y0dWaGEyVnlJQ2hoY3lCallXeGpkV3hoZEdWa0lHSjVJR2wwY3lCa2FYTjBZVzVqWlNCMGJ5QjBhR1VnWVhWa2FXOGdjMjkxY21ObEtTNWNiaXBjYmlvZ1FHOTFkSEIxZEdWNFlXMXdiR1ZjYmlvZ2NHRnVNbVF1YjI0b0oyTm9ZVzVuWlNjc1puVnVZM1JwYjI0b2Rpa2dlMXh1S2lBZ0lHTnZibk52YkdVdWJHOW5LSFlwTzF4dUtpQjlLVnh1S2x4dUtpOWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdZMnhoYzNNZ1VHRnVNa1FnWlhoMFpXNWtjeUJKYm5SbGNtWmhZMlVnZTF4dVhHNGdJR052Ym5OMGNuVmpkRzl5S0NrZ2UxeHVYRzRnSUNBZ2JHVjBJRzl3ZEdsdmJuTWdQU0JiSjNKaGJtZGxKMTA3WEc1Y2JpQWdJQ0JzWlhRZ1pHVm1ZWFZzZEhNZ1BTQjdYRzRnSUNBZ0lDQW5jMmw2WlNjNklGc3lNREFzTWpBd1hTeGNiaUFnSUNBZ0lDZHlZVzVuWlNjNklEQXVOU3hjYmlBZ0lDQWdJQ2R0YjJSbEp6b2dKMkZpYzI5c2RYUmxKeXhjYmlBZ0lDQWdJQ2R6Y0dWaGEyVnljeWM2SUZ0Y2JpQWdJQ0FnSUNBZ1d6QXVOU3d3TGpKZExGeHVJQ0FnSUNBZ0lDQmJNQzQzTlN3d0xqSTFYU3hjYmlBZ0lDQWdJQ0FnV3pBdU9Dd3dMalZkTEZ4dUlDQWdJQ0FnSUNCYk1DNDNOU3d3TGpjMVhTeGNiaUFnSUNBZ0lDQWdXekF1TlN3d0xqaGRMRnh1SUNBZ0lDQWdJQ0JiTUM0eU5Td3dMamMxWFN4Y2JpQWdJQ0FnSUNBZ1d6QXVNaXd3TGpWZExGeHVJQ0FnSUNBZ0lDQmJNQzR5TlN3d0xqSTFYVnh1SUNBZ0lDQWdYVnh1SUNBZ0lIMDdYRzVjYmlBZ0lDQnpkWEJsY2loaGNtZDFiV1Z1ZEhNc2IzQjBhVzl1Y3l4a1pXWmhkV3gwY3lrN1hHNWNiaUFnSUNCMGFHbHpMblpoYkhWbElEMGdlMXh1SUNBZ0lDQWdlRG9nYm1WM0lGTjBaWEFvTUN3eExEQXNNQzQxS1N4Y2JpQWdJQ0FnSUhrNklHNWxkeUJUZEdWd0tEQXNNU3d3TERBdU5TbGNiaUFnSUNCOU8xeHVYRzRnSUNBZ0x5b3FYRzRnSUNBZ1FXSnpiMngxZEdVZ2IzSWdjbVZzWVhScGRtVWdiVzkxYzJVZ2FXNTBaWEpoWTNScGIyNHVJRWx1SUZ3aVlXSnpiMngxZEdWY0lpQnRiMlJsTENCMGFHVWdjMjkxY21ObElHNXZaR1VnZDJsc2JDQnFkVzF3SUhSdklIbHZkWElnYlc5MWMyVWdjRzl6YVhScGIyNGdiMjRnYlc5MWMyVWdZMnhwWTJzdUlFbHVJRndpY21Wc1lYUnBkbVZjSWlCdGIyUmxMQ0JwZENCa2IyVnpJRzV2ZEM1Y2JpQWdJQ0FxTDF4dUlDQWdJSFJvYVhNdWJXOWtaU0E5SUhSb2FYTXVjMlYwZEdsdVozTXViVzlrWlR0Y2JseHVJQ0FnSUhSb2FYTXVjRzl6YVhScGIyNGdQU0I3WEc0Z0lDQWdJQ0I0T2lCdVpYY2dTVzUwWlhKaFkzUnBiMjR1U0dGdVpHeGxLSFJvYVhNdWJXOWtaU3duYUc5eWFYcHZiblJoYkNjc1d6QXNkR2hwY3k1M2FXUjBhRjBzVzNSb2FYTXVhR1ZwWjJoMExEQmRLU3hjYmlBZ0lDQWdJSGs2SUc1bGR5QkpiblJsY21GamRHbHZiaTVJWVc1a2JHVW9kR2hwY3k1dGIyUmxMQ2QyWlhKMGFXTmhiQ2NzV3pBc2RHaHBjeTUzYVdSMGFGMHNXM1JvYVhNdWFHVnBaMmgwTERCZEtWeHVJQ0FnSUgwN1hHNGdJQ0FnZEdocGN5NXdiM05wZEdsdmJpNTRMblpoYkhWbElEMGdkR2hwY3k1MllXeDFaUzU0TG01dmNtMWhiR2w2WldRN1hHNGdJQ0FnZEdocGN5NXdiM05wZEdsdmJpNTVMblpoYkhWbElEMGdkR2hwY3k1MllXeDFaUzU1TG01dmNtMWhiR2w2WldRN1hHNWNiaUFnSUNBdktpcGNiaUFnSUNCQmJpQmhjbkpoZVNCdlppQnpjR1ZoYTJWeUlHeHZZMkYwYVc5dWN5NGdWWEJrWVhSbElIUm9hWE1nZDJsMGFDQXViVzkyWlZOd1pXRnJaWElvS1NCdmNpQXViVzkyWlVGc2JGTndaV0ZyWlhKektDbGNiaUFnSUNBcUwxeHVJQ0FnSUhSb2FYTXVjM0JsWVd0bGNuTWdQU0IwYUdsekxuTmxkSFJwYm1kekxuTndaV0ZyWlhKek8xeHVYRzRnSUNBZ0x5b3FYRzRnSUNBZ1VtVjNjbWwwWlRvZ1ZHaGxJRzFoZUdsdGRXMGdaR2x6ZEdGdVkyVWdabkp2YlNCaElITndaV0ZyWlhJZ2RHaGhkQ0IwYUdVZ2MyOTFjbU5sSUc1dlpHVWdZMkZ1SUdKbElHWnZjaUJwZENCMGJ5QmlaU0JvWldGeVpDQm1jbTl0SUhSb1lYUWdjM0JsWVd0bGNpNGdRU0JzYjNjZ2NtRnVaMlVnS0RBdU1Ta2dkMmxzYkNCeVpYTjFiSFFnYVc0Z2MzQmxZV3RsY25NZ2IyNXNlU0J3YkdGNWFXNW5JSGRvWlc0Z2RHaGxJSE52ZFc1a0lHbHpJSFpsY25rZ1kyeHZjMlVnYVhRdUlFUmxabUYxYkhRZ2FYTWdNQzQxSUNob1lXeG1JRzltSUhSb1pTQnBiblJsY21aaFkyVXBMbHh1SUNBZ0lDb3ZYRzRnSUNBZ2RHaHBjeTV5WVc1blpTQTlJSFJvYVhNdWMyVjBkR2x1WjNNdWNtRnVaMlU3WEc1Y2JpQWdJQ0F2S2lwY2JpQWdJQ0JVYUdVZ1kzVnljbVZ1ZENCc1pYWmxiSE1nWm05eUlHVmhZMmdnYzNCbFlXdGxjaTRnVkdocGN5QnBjeUJqWVd4amRXeGhkR1ZrSUhkb1pXNGdZU0J6YjNWeVkyVWdibTlrWlNCdmNpQnpjR1ZoYTJWeUlHNXZaR1VnYVhNZ2JXOTJaV1FnZEdoeWIzVm5hQ0JwYm5SbGNtRmpkR2x2YmlCdmNpQndjbTluY21GdFlYUnBZMkZzYkhrdVhHNGdJQ0FnS2k5Y2JpQWdJQ0IwYUdsekxteGxkbVZzY3lBOUlGdGRPMXh1WEc0Z0lDQWdkR2hwY3k1cGJtbDBLQ2s3WEc1Y2JpQWdJQ0IwYUdsekxtTmhiR04xYkdGMFpVeGxkbVZzY3lncE8xeHVJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtDazdYRzVjYmlBZ2ZWeHVYRzRnSUdKMWFXeGtTVzUwWlhKbVlXTmxLQ2tnZTF4dVhHNGdJQ0FnZEdocGN5NXJibTlpSUQwZ2MzWm5MbU55WldGMFpTZ25ZMmx5WTJ4bEp5azdYRzVjYmx4dUlDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1aGNIQmxibVJEYUdsc1pDaDBhR2x6TG10dWIySXBPMXh1WEc1Y2JpQWdJQ0F2THlCaFpHUWdjM0JsWVd0bGNuTmNiaUFnSUNCMGFHbHpMbk53WldGclpYSkZiR1Z0Wlc1MGN5QTlJRnRkTzF4dVhHNGdJQ0FnWm05eUlDaHNaWFFnYVQwd08yazhkR2hwY3k1emNHVmhhMlZ5Y3k1c1pXNW5kR2c3YVNzcktTQjdYRzRnSUNBZ0lDQnNaWFFnYzNCbFlXdGxja1ZzWlcxbGJuUWdQU0J6ZG1jdVkzSmxZWFJsS0NkamFYSmpiR1VuS1R0Y2JseHVJQ0FnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbUZ3Y0dWdVpFTm9hV3hrS0hOd1pXRnJaWEpGYkdWdFpXNTBLVHRjYmx4dUlDQWdJQ0FnZEdocGN5NXpjR1ZoYTJWeVJXeGxiV1Z1ZEhNdWNIVnphQ2h6Y0dWaGEyVnlSV3hsYldWdWRDazdYRzRnSUNBZ2ZWeHVYRzRnSUgxY2JseHVJQ0J6YVhwbFNXNTBaWEptWVdObEtDa2dlMXh1WEc0Z0lDQWdJQ0FnSUhSb2FYTXVYMjFwYmtScGJXVnVjMmx2YmlBOUlFMWhkR2d1YldsdUtIUm9hWE11ZDJsa2RHZ3NkR2hwY3k1b1pXbG5hSFFwTzF4dVhHNGdJQ0FnSUNBZ0lIUm9hWE11YTI1dllsSmhaR2wxY3lBOUlIdGNiaUFnSUNBZ0lDQWdJQ0J2Wm1ZNklINStLSFJvYVhNdVgyMXBia1JwYldWdWMybHZiaTh4TURBcElDb2dNeUFySURVc1hHNGdJQ0FnSUNBZ0lIMDdYRzRnSUNBZ0lDQWdJSFJvYVhNdWEyNXZZbEpoWkdsMWN5NXZiaUE5SUhSb2FYTXVhMjV2WWxKaFpHbDFjeTV2Wm1ZZ0tpQXlPMXh1WEc0Z0lDQWdJQ0FnSUhSb2FYTXVhMjV2WWk1elpYUkJkSFJ5YVdKMWRHVW9KMk40Snl4MGFHbHpMbmRwWkhSb0x6SXBPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtdHViMkl1YzJWMFFYUjBjbWxpZFhSbEtDZGplU2NzZEdocGN5NW9aV2xuYUhRdk1pazdYRzRnSUNBZ0lDQWdJSFJvYVhNdWEyNXZZaTV6WlhSQmRIUnlhV0oxZEdVb0ozSW5MSFJvYVhNdWEyNXZZbEpoWkdsMWN5NXZabVlwTzF4dVhHNGdJQ0FnSUNBZ0lHWnZjaUFvYkdWMElHazlNRHRwUEhSb2FYTXVjM0JsWVd0bGNuTXViR1Z1WjNSb08ya3JLeWtnZTF4dUlDQWdJQ0FnSUNBZ0lHeGxkQ0J6Y0dWaGEyVnlSV3hsYldWdWRDQTlJSFJvYVhNdWMzQmxZV3RsY2tWc1pXMWxiblJ6VzJsZE8xeHVJQ0FnSUNBZ0lDQWdJR3hsZENCemNHVmhhMlZ5SUQwZ2RHaHBjeTV6Y0dWaGEyVnljMXRwWFR0Y2JpQWdJQ0FnSUNBZ0lDQnpjR1ZoYTJWeVJXeGxiV1Z1ZEM1elpYUkJkSFJ5YVdKMWRHVW9KMk40Snl4emNHVmhhMlZ5V3pCZEtuUm9hWE11ZDJsa2RHZ3BPMXh1SUNBZ0lDQWdJQ0FnSUhOd1pXRnJaWEpGYkdWdFpXNTBMbk5sZEVGMGRISnBZblYwWlNnblkza25MSE53WldGclpYSmJNVjBxZEdocGN5NW9aV2xuYUhRcE8xeHVJQ0FnSUNBZ0lDQWdJSE53WldGclpYSkZiR1Z0Wlc1MExuTmxkRUYwZEhKcFluVjBaU2duY2ljc2RHaHBjeTVmYldsdVJHbHRaVzV6YVc5dUx6SXdJQ3NnTlNrN1hHNGdJQ0FnSUNBZ0lDQWdjM0JsWVd0bGNrVnNaVzFsYm5RdWMyVjBRWFIwY21saWRYUmxLQ2RtYVd4c0xXOXdZV05wZEhrbkxDQW5NQ2NwTzF4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lIUm9hWE11Y0c5emFYUnBiMjR1ZUM1eVpYTnBlbVVvV3pBc2RHaHBjeTUzYVdSMGFGMHNXM1JvYVhNdWFHVnBaMmgwTERCZEtUdGNiaUFnSUNBZ0lIUm9hWE11Y0c5emFYUnBiMjR1ZVM1eVpYTnBlbVVvV3pBc2RHaHBjeTUzYVdSMGFGMHNXM1JvYVhNdWFHVnBaMmgwTERCZEtUdGNibHh1SUNBZ0lDQWdJQ0F2THlCdVpYaDBMQ0J1WldWa0lIUnZYRzRnSUNBZ0lDQWdJQzh2SUhKbGMybDZaU0J3YjNOcGRHbHZibk5jYmlBZ0lDQWdJQ0FnTHk4Z1kyRnNZM1ZzWVhSbElITndaV0ZyWlhJZ1pHbHpkR0Z1WTJWelhHNGdJQ0FnSUNCMGFHbHpMbU5oYkdOMWJHRjBaVXhsZG1Wc2N5Z3BPMXh1SUNBZ0lDQWdkR2hwY3k1eVpXNWtaWElvS1R0Y2JseHVJQ0I5WEc1Y2JpQWdZMjlzYjNKSmJuUmxjbVpoWTJVb0tTQjdYRzVjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1YzNSNWJHVXVZbUZqYTJkeWIzVnVaRU52Ykc5eUlEMGdkR2hwY3k1amIyeHZjbk11Wm1sc2JEdGNiaUFnSUNCMGFHbHpMbXR1YjJJdWMyVjBRWFIwY21saWRYUmxLQ2RtYVd4c0p5d2dkR2hwY3k1amIyeHZjbk11YldWa2FYVnRUR2xuYUhRcE8xeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FUMHdPMms4ZEdocGN5NXpjR1ZoYTJWeWN5NXNaVzVuZEdnN2FTc3JLU0I3WEc0Z0lDQWdJQ0JzWlhRZ2MzQmxZV3RsY2tWc1pXMWxiblFnUFNCMGFHbHpMbk53WldGclpYSkZiR1Z0Wlc1MGMxdHBYVHRjYmlBZ0lDQWdJSE53WldGclpYSkZiR1Z0Wlc1MExuTmxkRUYwZEhKcFluVjBaU2duWm1sc2JDY3NJSFJvYVhNdVkyOXNiM0p6TG1GalkyVnVkQ2s3WEc0Z0lDQWdJQ0J6Y0dWaGEyVnlSV3hsYldWdWRDNXpaWFJCZEhSeWFXSjFkR1VvSjNOMGNtOXJaU2NzSUhSb2FYTXVZMjlzYjNKekxtRmpZMlZ1ZENrN1hHNGdJQ0FnZlZ4dVhHNGdJSDFjYmx4dUlDQnlaVzVrWlhJb0tTQjdYRzRnSUNBZ2RHaHBjeTVyYm05aVEyOXZjbVJwYm1GMFpYTWdQU0I3WEc0Z0lDQWdJQ0I0T2lCMGFHbHpMblpoYkhWbExuZ3VibTl5YldGc2FYcGxaQ0FxSUhSb2FYTXVkMmxrZEdnc1hHNGdJQ0FnSUNCNU9pQjBhR2x6TG1obGFXZG9kQ0F0SUhSb2FYTXVkbUZzZFdVdWVTNXViM0p0WVd4cGVtVmtJQ29nZEdocGN5NW9aV2xuYUhSY2JpQWdJQ0I5TzF4dVhHNGdJQ0FnZEdocGN5NXJibTlpTG5ObGRFRjBkSEpwWW5WMFpTZ25ZM2duTEhSb2FYTXVhMjV2WWtOdmIzSmthVzVoZEdWekxuZ3BPMXh1SUNBZ0lIUm9hWE11YTI1dllpNXpaWFJCZEhSeWFXSjFkR1VvSjJONUp5eDBhR2x6TG10dWIySkRiMjl5WkdsdVlYUmxjeTU1S1R0Y2JpQWdmVnh1WEc1Y2JpQWdZMnhwWTJzb0tTQjdYRzRnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiaTU0TG1GdVkyaHZjaUE5SUhSb2FYTXViVzkxYzJVN1hHNGdJQ0FnZEdocGN5NXdiM05wZEdsdmJpNTVMbUZ1WTJodmNpQTlJSFJvYVhNdWJXOTFjMlU3WEc0Z0lDQWdkR2hwY3k1dGIzWmxLQ2s3WEc0Z0lIMWNibHh1SUNCdGIzWmxLQ2tnZTF4dUlDQWdJR2xtSUNoMGFHbHpMbU5zYVdOclpXUXBJSHRjYmlBZ0lDQWdJSFJvYVhNdWNHOXphWFJwYjI0dWVDNTFjR1JoZEdVb2RHaHBjeTV0YjNWelpTazdYRzRnSUNBZ0lDQjBhR2x6TG5CdmMybDBhVzl1TG5rdWRYQmtZWFJsS0hSb2FYTXViVzkxYzJVcE8xeHVJQ0FnSUNBZ0x5OGdjRzl6YVhScGIyNHVlQ0JoYm1RZ2NHOXphWFJwYjI0dWVTQmhjbVVnYm05eWJXRnNhWHBsWkZ4dUlDQWdJQ0FnTHk4Z2MyOGdZWEpsSUhSb1pTQnNaWFpsYkhOY2JpQWdJQ0FnSUM4dklHeHBhMlZzZVNCa2IyNG5kQ0J1WldWa0lIUm9hWE11ZG1Gc2RXVWdZWFFnWVd4c0lDMHRJRzl1YkhrZ2RYTmxaQ0JtYjNJZ1pISmhkMmx1WjF4dUlDQWdJQ0FnTHk4Z2JtOTBJR2R2YVc1bklIUnZJR0psSUdFZ0ozTjBaWEFuSUc5eUlDZHRhVzRuSUdGdVpDQW5iV0Y0SnlCcGJpQjBhR2x6SUc5dVpTNWNiaUFnSUNBZ0lIUm9hWE11WTJGc1kzVnNZWFJsVEdWMlpXeHpLQ2s3WEc0Z0lDQWdJQ0IwYUdsekxtVnRhWFFvSjJOb1lXNW5aU2NzZEdocGN5NXNaWFpsYkhNcE8xeHVJQ0FnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0J5Wld4bFlYTmxLQ2tnZTF4dUlDQWdJSFJvYVhNdWNtVnVaR1Z5S0NrN1hHNGdJSDFjYmx4dUlDQm5aWFFnYm05eWJXRnNhWHBsWkNncElIdGNiaUFnSUNCeVpYUjFjbTRnZTF4dUlDQWdJQ0FnZURvZ2RHaHBjeTUyWVd4MVpTNTRMbTV2Y20xaGJHbDZaV1FzWEc0Z0lDQWdJQ0I1T2lCMGFHbHpMblpoYkhWbExua3VibTl5YldGc2FYcGxaRnh1SUNBZ0lIMDdYRzRnSUgxY2JseHVJQ0JqWVd4amRXeGhkR1ZNWlhabGJITW9LU0I3WEc0Z0lDQWdkR2hwY3k1MllXeDFaUzU0TG5Wd1pHRjBaVTV2Y20xaGJDZ2dkR2hwY3k1d2IzTnBkR2x2Ymk1NExuWmhiSFZsSUNrN1hHNGdJQ0FnZEdocGN5NTJZV3gxWlM1NUxuVndaR0YwWlU1dmNtMWhiQ2dnZEdocGN5NXdiM05wZEdsdmJpNTVMblpoYkhWbElDazdYRzRnSUNBZ2RHaHBjeTVzWlhabGJITWdQU0JiWFR0Y2JpQWdJQ0IwYUdsekxuTndaV0ZyWlhKekxtWnZja1ZoWTJnb0tITXNhU2tnUFQ0Z2UxeHVJQ0FnSUNBZ2JHVjBJR1JwYzNSaGJtTmxJRDBnYldGMGFDNWthWE4wWVc1alpTaHpXekJkS25Sb2FYTXVkMmxrZEdnc2Mxc3hYU3AwYUdsekxtaGxhV2RvZEN4MGFHbHpMbkJ2YzJsMGFXOXVMbmd1ZG1Gc2RXVXFkR2hwY3k1M2FXUjBhQ3dvTVMxMGFHbHpMbkJ2YzJsMGFXOXVMbmt1ZG1Gc2RXVXBLblJvYVhNdWFHVnBaMmgwS1R0Y2JpQWdJQ0FnSUd4bGRDQnNaWFpsYkNBOUlHMWhkR2d1WTJ4cGNDZ3hMV1JwYzNSaGJtTmxMeWgwYUdsekxuSmhibWRsS25Sb2FYTXVkMmxrZEdncExEQXNNU2s3WEc0Z0lDQWdJQ0IwYUdsekxteGxkbVZzY3k1d2RYTm9LR3hsZG1Wc0tUdGNiaUFnSUNBZ0lIUm9hWE11YzNCbFlXdGxja1ZzWlcxbGJuUnpXMmxkTG5ObGRFRjBkSEpwWW5WMFpTZ25abWxzYkMxdmNHRmphWFI1Snl3Z2JHVjJaV3dwTzF4dUlDQWdJSDBwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUUxdmRtVWdkR2hsSUdGMVpHbHZJSE52ZFhKalpTQnViMlJsSUdGdVpDQjBjbWxuWjJWeUlIUm9aU0J2ZFhSd2RYUWdaWFpsYm5RdVhHNGdJRUJ3WVhKaGJTQjRJSHR1ZFcxaVpYSjlJRTVsZHlCNElHeHZZMkYwYVc5dUxDQnViM0p0WVd4cGVtVmtJREF0TVZ4dUlDQkFjR0Z5WVcwZ2VTQjdiblZ0WW1WeWZTQk9aWGNnZVNCc2IyTmhkR2x2Yml3Z2JtOXliV0ZzYVhwbFpDQXdMVEZjYmlBZ0tpOWNiaUFnYlc5MlpWTnZkWEpqWlNoNExIa3BJSHRjYmlBZ0lDQnNaWFFnYkc5allYUnBiMjRnUFNCN1hHNGdJQ0FnSUNCNE9pQjRLblJvYVhNdWQybGtkR2dzWEc0Z0lDQWdJQ0I1T2lCNUtuUm9hWE11YUdWcFoyaDBYRzRnSUNBZ2ZUdGNiaUFnSUNCMGFHbHpMbkJ2YzJsMGFXOXVMbmd1ZFhCa1lYUmxLR3h2WTJGMGFXOXVLVHRjYmlBZ0lDQjBhR2x6TG5CdmMybDBhVzl1TG5rdWRYQmtZWFJsS0d4dlkyRjBhVzl1S1R0Y2JpQWdJQ0IwYUdsekxtTmhiR04xYkdGMFpVeGxkbVZzY3lncE8xeHVJQ0FnSUhSb2FYTXVaVzFwZENnblkyaGhibWRsSnl4MGFHbHpMbXhsZG1Wc2N5azdYRzRnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0JOYjNabElHRWdjM0JsWVd0bGNpQnViMlJsSUdGdVpDQjBjbWxuWjJWeUlIUm9aU0J2ZFhSd2RYUWdaWFpsYm5RdVhHNGdJRUJ3WVhKaGJTQnBibVJsZUNCN2JuVnRZbVZ5ZlNCSmJtUmxlQ0J2WmlCMGFHVWdjM0JsWVd0bGNpQjBieUJ0YjNabFhHNGdJRUJ3WVhKaGJTQjRJSHR1ZFcxaVpYSjlJRTVsZHlCNElHeHZZMkYwYVc5dUxDQnViM0p0WVd4cGVtVmtJREF0TVZ4dUlDQkFjR0Z5WVcwZ2VTQjdiblZ0WW1WeWZTQk9aWGNnZVNCc2IyTmhkR2x2Yml3Z2JtOXliV0ZzYVhwbFpDQXdMVEZjYmlBZ0tpOWNiaUFnYlc5MlpWTndaV0ZyWlhJb2FXNWtaWGdzZUN4NUtTQjdYRzVjYmlBZ0lDQjBhR2x6TG5Od1pXRnJaWEp6VzJsdVpHVjRYU0E5SUZ0NExIbGRPMXh1SUNBZ0lIUm9hWE11YzNCbFlXdGxja1ZzWlcxbGJuUnpXMmx1WkdWNFhTNXpaWFJCZEhSeWFXSjFkR1VvSjJONEp5d2dlQ3AwYUdsekxuZHBaSFJvS1R0Y2JpQWdJQ0IwYUdsekxuTndaV0ZyWlhKRmJHVnRaVzUwYzF0cGJtUmxlRjB1YzJWMFFYUjBjbWxpZFhSbEtDZGplU2NzSUhrcWRHaHBjeTVvWldsbmFIUXBPMXh1SUNBZ0lIUm9hWE11WTJGc1kzVnNZWFJsVEdWMlpXeHpLQ2s3WEc0Z0lDQWdkR2hwY3k1bGJXbDBLQ2RqYUdGdVoyVW5MSFJvYVhNdWJHVjJaV3h6S1R0Y2JpQWdJQ0IwYUdsekxuSmxibVJsY2lncE8xeHVYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdVMlYwSUdGc2JDQnpjR1ZoYTJWeUlHeHZZMkYwYVc5dWMxeHVJQ0JBY0dGeVlXMGdiRzlqWVhScGIyNXpJSHRCY25KaGVYMGdRWEp5WVhrZ2IyWWdjM0JsWVd0bGNpQnNiMk5oZEdsdmJuTXVJRVZoWTJnZ2FYUmxiU0JwYmlCMGFHVWdZWEp5WVhrZ2MyaHZkV3hrSUdKbElHRnVJR0Z5Y21GNUlHOW1JRzV2Y20xaGJHbDZaV1FnZUNCaGJtUWdlU0JqYjI5eVpHbHVZWFJsY3k1Y2JseHVJQ0J6WlhSVGNHVmhhMlZ5Y3loc2IyTmhkR2x2Ym5NcElIdGNibHh1SUNCOVhHNGdJQ292WEc1Y2JuMWNibHh1WEc1Y2JpOHZJRmRGUWxCQlEwc2dSazlQVkVWU0lDOHZYRzR2THlBdUwzNHZhbk5vYVc1MExXeHZZV1JsY2lFdUwyeHBZaTlwYm5SbGNtWmhZMlZ6TDNCaGJqSmtMbXB6SWl3aUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1c1pYUWdiV0YwYUNBOUlISmxjWFZwY21Vb0p5NHVMM1YwYVd3dmJXRjBhQ2NwTzF4dWJHVjBJSE4yWnlBOUlISmxjWFZwY21Vb0p5NHVMM1YwYVd3dmMzWm5KeWs3WEc1c1pYUWdTVzUwWlhKbVlXTmxJRDBnY21WeGRXbHlaU2duTGk0dlkyOXlaUzlwYm5SbGNtWmhZMlVuS1R0Y2JseHVMeW9xWEc0cUlGUnBiSFJjYmlwY2Jpb2dRR1JsYzJOeWFYQjBhVzl1SUVSbGRtbGpaU0IwYVd4MElITmxibk52Y2lCM2FYUm9JRElnYjNJZ015QmhlR1Z6SUNoa1pYQmxibVJwYm1jZ2IyNGdlVzkxY2lCa1pYWnBZMlVnWVc1a0lHSnliM2R6WlhJcExseHVLbHh1S2lCQVpHVnRieUE4YzNCaGJpQnVaWGgxY3kxMWFUMG5kR2xzZENjK1BDOXpjR0Z1UGx4dUtseHVLaUJBWlhoaGJYQnNaVnh1S2lCMllYSWdkR2xzZENBOUlHNWxkeUJPWlhoMWN5NVVhV3gwS0NjamRHRnlaMlYwSnlsY2JpcGNiaW9nUUc5MWRIQjFkRnh1S2lCamFHRnVaMlZjYmlvZ1JtbHlaWE1nWVhRZ1lTQnlaV2QxYkdGeUlHbHVkR1Z5ZG1Gc0xDQmhjeUJzYjI1bklHRnpJSFJvYVhNZ2FXNTBaWEptWVdObElHbHpJR0ZqZEdsMlpTQW9jMlZsSUhSb1pTQnBiblJsY21aaFkyVW5jeUE4YVQ0dVlXTjBhWFpsUEM5cFBpQndjbTl3WlhKMGVTazhZbkkrWEc0cUlGUm9aU0JsZG1WdWRDQmtZWFJoSUdseklHRnVJRHhwUG05aWFtVmpkRHd2YVQ0Z1kyOXVkR0ZwYm1sdVp5QjRJQ2h1ZFcxaVpYSXBJR0Z1WkNCNUlDaHVkVzFpWlhJcElIQnliM0JsY25ScFpYTWdkMmhwWTJnZ2NtVndjbVZ6Wlc1MElIUm9aU0JqZFhKeVpXNTBJSFJwYkhRZ2MzUmhkR1VnYjJZZ2RHaGxJR1JsZG1salpTNWNiaXBjYmlvZ1FHOTFkSEIxZEdWNFlXMXdiR1ZjYmlvZ2RHbHNkQzV2YmlnblkyaGhibWRsSnl4bWRXNWpkR2x2YmloMktTQjdYRzRxSUNBZ1kyOXVjMjlzWlM1c2IyY29kaWs3WEc0cUlIMHBYRzRxWEc0cVhHNHFMMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5QlVhV3gwSUdWNGRHVnVaSE1nU1c1MFpYSm1ZV05sSUh0Y2JseHVJQ0JqYjI1emRISjFZM1J2Y2lncElIdGNibHh1SUNBZ0lHeGxkQ0J2Y0hScGIyNXpJRDBnV3lkMllXeDFaU2RkTzF4dVhHNGdJQ0FnYkdWMElHUmxabUYxYkhSeklEMGdlMXh1SUNBZ0lDQWdKM05wZW1Vbk9pQmJPREFzT0RCZFhHNGdJQ0FnZlR0Y2JseHVJQ0FnSUhOMWNHVnlLR0Z5WjNWdFpXNTBjeXh2Y0hScGIyNXpMR1JsWm1GMWJIUnpLVHRjYmx4dUlDQWdJSFJvYVhNdVgyRmpkR2wyWlNBOUlIUnlkV1U3WEc1Y2JpQWdJQ0IwYUdsekxtbHVhWFFvS1R0Y2JseHVJQ0FnSUM4dklHRmtaQ0JsZG1WdWRDQnNhWE4wWlc1bGNpQm1iM0lnWkdWMmFXTmxJRzl5YVdWdWRHRjBhVzl1WEc1Y2JpQWdYSFIwYUdsekxtSnZkVzVrVlhCa1lYUmxJRDBnZEdocGN5NTFjR1JoZEdVdVltbHVaQ2gwYUdsektUdGNiaUFnTHk5Y2RIUm9hWE11WW05MWJtUk5iM3BVYVd4MElEMGdkR2hwY3k1dGIzcFVhV3gwTG1KcGJtUW9kR2hwY3lsY2JseHVJQ0JjZEdsbUlDaDNhVzVrYjNjdVJHVjJhV05sVDNKcFpXNTBZWFJwYjI1RmRtVnVkQ2tnZTF4dUlDQmNkRngwZEdocGN5NXZjbWxsYm5SaGRHbHZia3hwYzNSbGJtVnlJRDBnZDJsdVpHOTNMbUZrWkVWMlpXNTBUR2x6ZEdWdVpYSW9KMlJsZG1salpXOXlhV1Z1ZEdGMGFXOXVKeXdnZEdocGN5NWliM1Z1WkZWd1pHRjBaU3dnWm1Gc2MyVXBPMXh1SUNCY2RIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCMGFHbHpMbDloWTNScGRtVWdQU0JtWVd4elpUdGNiaUFnSUNBZ0lIUm9hWE11WTI5c2IzSkpiblJsY21aaFkyVW9LVHRjYmlBZ0lDQjlYRzVjYmx4dVhHNGdJQ0FnSUNBdkttVnNjMlVnYVdZZ0tIZHBibVJ2ZHk1UGNtbGxiblJoZEdsdmJrVjJaVzUwS1NCN1hHNGdJQzh2WEhRZ0lGeDBkMmx1Wkc5M0xtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJb0owMXZlazl5YVdWdWRHRjBhVzl1Snl3Z2RHaHBjeTVpYjNWdVpFMXZlbFJwYkhRc0lHWmhiSE5sS1R0Y2JpQWdYSFI5SUdWc2MyVWdlMXh1SUNCY2RDQWdYSFJqYjI1emIyeGxMbXh2WnlnblRtOTBJSE4xY0hCdmNuUmxaQ0J2YmlCNWIzVnlJR1JsZG1salpTQnZjaUJpY205M2MyVnlMaWNwTzF4dUlDQmNkSDBnS2k5Y2JseHVYRzRnSUgxY2JseHVYRzRnSUdKMWFXeGtTVzUwWlhKbVlXTmxLQ2tnZTF4dVhHNGdJQ0FnZEdocGN5NTBhWFJzWlNBOUlITjJaeTVqY21WaGRHVW9KM1JsZUhRbktUdGNiaUFnSUNCMGFHbHpMbU5wY21Oc1pWZ2dQU0J6ZG1jdVkzSmxZWFJsS0NkamFYSmpiR1VuS1R0Y2JpQWdJQ0IwYUdsekxtTnBjbU5zWlZrZ1BTQnpkbWN1WTNKbFlYUmxLQ2RqYVhKamJHVW5LVHRjYmlBZ0lDQjBhR2x6TG1OcGNtTnNaVm9nUFNCemRtY3VZM0psWVhSbEtDZGphWEpqYkdVbktUdGNibHh1SUNBZ0lIUm9hWE11WW1GeVdDQTlJSE4yWnk1amNtVmhkR1VvSjNCaGRHZ25LVHRjYmlBZ0lDQjBhR2x6TG1KaGNsa2dQU0J6ZG1jdVkzSmxZWFJsS0Nkd1lYUm9KeWs3WEc0Z0lDQWdkR2hwY3k1aVlYSmFJRDBnYzNabkxtTnlaV0YwWlNnbmNHRjBhQ2NwTzF4dVhHNGdJQ0FnZEdocGN5NWlZWEpZTWlBOUlITjJaeTVqY21WaGRHVW9KM0JoZEdnbktUdGNiaUFnSUNCMGFHbHpMbUpoY2xreUlEMGdjM1puTG1OeVpXRjBaU2duY0dGMGFDY3BPMXh1SUNBZ0lIUm9hWE11WW1GeVdqSWdQU0J6ZG1jdVkzSmxZWFJsS0Nkd1lYUm9KeWs3WEc1Y2JpQWdJQ0IwYUdsekxtSmhjbGd1YzJWMFFYUjBjbWxpZFhSbEtDZHZjR0ZqYVhSNUp5d25NQzQ0SnlrN1hHNGdJQ0FnZEdocGN5NWlZWEpaTG5ObGRFRjBkSEpwWW5WMFpTZ25iM0JoWTJsMGVTY3NKekF1T0NjcE8xeHVJQ0FnSUhSb2FYTXVZbUZ5V2k1elpYUkJkSFJ5YVdKMWRHVW9KMjl3WVdOcGRIa25MQ2N3TGpnbktUdGNiaUFnSUNCMGFHbHpMbUpoY2xneUxuTmxkRUYwZEhKcFluVjBaU2duYjNCaFkybDBlU2NzSnpBdU9DY3BPMXh1SUNBZ0lIUm9hWE11WW1GeVdUSXVjMlYwUVhSMGNtbGlkWFJsS0NkdmNHRmphWFI1Snl3bk1DNDRKeWs3WEc0Z0lDQWdkR2hwY3k1aVlYSmFNaTV6WlhSQmRIUnlhV0oxZEdVb0oyOXdZV05wZEhrbkxDY3dMamduS1R0Y2JseHVJQ0FnSUhSb2FYTXVZMmx5WTJ4bFdDNXpaWFJCZEhSeWFXSjFkR1VvSjJONEp5eDBhR2x6TG5kcFpIUm9Lak12TVRJcE8xeHVJQ0FnSUhSb2FYTXVZMmx5WTJ4bFdDNXpaWFJCZEhSeWFXSjFkR1VvSjJONUp5eDBhR2x6TG1obGFXZG9kQ296THpRcE8xeHVJQ0FnSUhSb2FYTXVZMmx5WTJ4bFdDNXpaWFJCZEhSeWFXSjFkR1VvSjNJbkxIUm9hWE11YUdWcFoyaDBMekV3S1R0Y2JpQWdJQ0IwYUdsekxtTnBjbU5zWlZndWMyVjBRWFIwY21saWRYUmxLQ2R2Y0dGamFYUjVKeXduTUM0MEp5azdYRzVjYmlBZ0lDQjBhR2x6TG1OcGNtTnNaVmt1YzJWMFFYUjBjbWxpZFhSbEtDZGplQ2NzZEdocGN5NTNhV1IwYUNvMkx6RXlLVHRjYmlBZ0lDQjBhR2x6TG1OcGNtTnNaVmt1YzJWMFFYUjBjbWxpZFhSbEtDZGplU2NzZEdocGN5NW9aV2xuYUhRcU15ODBLVHRjYmlBZ0lDQjBhR2x6TG1OcGNtTnNaVmt1YzJWMFFYUjBjbWxpZFhSbEtDZHlKeXgwYUdsekxtaGxhV2RvZEM4eE1DazdYRzRnSUNBZ2RHaHBjeTVqYVhKamJHVlpMbk5sZEVGMGRISnBZblYwWlNnbmIzQmhZMmwwZVNjc0p6QXVOQ2NwTzF4dVhHNGdJQ0FnZEdocGN5NWphWEpqYkdWYUxuTmxkRUYwZEhKcFluVjBaU2duWTNnbkxIUm9hWE11ZDJsa2RHZ3FPUzh4TWlrN1hHNGdJQ0FnZEdocGN5NWphWEpqYkdWYUxuTmxkRUYwZEhKcFluVjBaU2duWTNrbkxIUm9hWE11YUdWcFoyaDBLak12TkNrN1hHNGdJQ0FnZEdocGN5NWphWEpqYkdWYUxuTmxkRUYwZEhKcFluVjBaU2duY2ljc2RHaHBjeTVvWldsbmFIUXZNVEFwTzF4dUlDQWdJSFJvYVhNdVkybHlZMnhsV2k1elpYUkJkSFJ5YVdKMWRHVW9KMjl3WVdOcGRIa25MQ2N3TGpRbktUdGNibHh1WEc0Z0lDQWdkR2hwY3k1aVlYSllMbk5sZEVGMGRISnBZblYwWlNnbmMzUnliMnRsTFhkcFpIUm9KeXhOWVhSb0xuSnZkVzVrS0hSb2FYTXVhR1ZwWjJoMEx6TXdLU2s3WEc0Z0lDQWdkR2hwY3k1aVlYSlpMbk5sZEVGMGRISnBZblYwWlNnbmMzUnliMnRsTFhkcFpIUm9KeXhOWVhSb0xuSnZkVzVrS0hSb2FYTXVhR1ZwWjJoMEx6TXdLU2s3WEc0Z0lDQWdkR2hwY3k1aVlYSmFMbk5sZEVGMGRISnBZblYwWlNnbmMzUnliMnRsTFhkcFpIUm9KeXhOWVhSb0xuSnZkVzVrS0hSb2FYTXVhR1ZwWjJoMEx6TXdLU2s3WEc1Y2JpQWdJQ0IwYUdsekxtSmhjbGd1YzJWMFFYUjBjbWxpZFhSbEtDZG1hV3hzSnl3Z0oyNXZibVVuS1R0Y2JpQWdJQ0IwYUdsekxtSmhjbGt1YzJWMFFYUjBjbWxpZFhSbEtDZG1hV3hzSnl3Z0oyNXZibVVuS1R0Y2JpQWdJQ0IwYUdsekxtSmhjbG91YzJWMFFYUjBjbWxpZFhSbEtDZG1hV3hzSnl3Z0oyNXZibVVuS1R0Y2JseHVJQ0FnSUhSb2FYTXVZbUZ5V0RJdWMyVjBRWFIwY21saWRYUmxLQ2R6ZEhKdmEyVXRkMmxrZEdnbkxFMWhkR2d1Y205MWJtUW9kR2hwY3k1b1pXbG5hSFF2TXpBcEtUdGNiaUFnSUNCMGFHbHpMbUpoY2xreUxuTmxkRUYwZEhKcFluVjBaU2duYzNSeWIydGxMWGRwWkhSb0p5eE5ZWFJvTG5KdmRXNWtLSFJvYVhNdWFHVnBaMmgwTHpNd0tTazdYRzRnSUNBZ2RHaHBjeTVpWVhKYU1pNXpaWFJCZEhSeWFXSjFkR1VvSjNOMGNtOXJaUzEzYVdSMGFDY3NUV0YwYUM1eWIzVnVaQ2gwYUdsekxtaGxhV2RvZEM4ek1Da3BPMXh1WEc0Z0lDQWdkR2hwY3k1aVlYSllNaTV6WlhSQmRIUnlhV0oxZEdVb0oyWnBiR3duTENBbmJtOXVaU2NwTzF4dUlDQWdJSFJvYVhNdVltRnlXVEl1YzJWMFFYUjBjbWxpZFhSbEtDZG1hV3hzSnl3Z0oyNXZibVVuS1R0Y2JpQWdJQ0IwYUdsekxtSmhjbG95TG5ObGRFRjBkSEpwWW5WMFpTZ25abWxzYkNjc0lDZHViMjVsSnlrN1hHNWNibHh1SUNBZ0lIUm9hWE11ZEdsMGJHVXVjMlYwUVhSMGNtbGlkWFJsS0NkNEp5eDBhR2x6TG5kcFpIUm9MeklwTzF4dUlDQWdJSFJvYVhNdWRHbDBiR1V1YzJWMFFYUjBjbWxpZFhSbEtDZDVKeXgwYUdsekxtaGxhV2RvZEM4ekt6Y3BPMXh1SUNBZ0lIUm9hWE11ZEdsMGJHVXVjMlYwUVhSMGNtbGlkWFJsS0NkbWIyNTBMWE5wZW1VbkxDY3hOWEI0SnlrN1hHNGdJQ0FnZEdocGN5NTBhWFJzWlM1elpYUkJkSFJ5YVdKMWRHVW9KMlp2Ym5RdGQyVnBaMmgwSnl3blltOXNaQ2NwTzF4dUlDQWdJSFJvYVhNdWRHbDBiR1V1YzJWMFFYUjBjbWxpZFhSbEtDZHNaWFIwWlhJdGMzQmhZMmx1Wnljc0p6SndlQ2NwTzF4dUlDQWdJSFJvYVhNdWRHbDBiR1V1YzJWMFFYUjBjbWxpZFhSbEtDZHZjR0ZqYVhSNUp5d25NQzQzSnlrN1hHNGdJQ0FnZEdocGN5NTBhWFJzWlM1elpYUkJkSFJ5YVdKMWRHVW9KM1JsZUhRdFlXNWphRzl5Snl3bmJXbGtaR3hsSnlrN1hHNGdJQ0FnZEdocGN5NTBhWFJzWlM1MFpYaDBRMjl1ZEdWdWRDQTlJQ2RVU1V4VUp6dGNibHh1WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG1Gd2NHVnVaRU5vYVd4a0tIUm9hWE11WTJseVkyeGxXQ2s3WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG1Gd2NHVnVaRU5vYVd4a0tIUm9hWE11WTJseVkyeGxXU2s3WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG1Gd2NHVnVaRU5vYVd4a0tIUm9hWE11WTJseVkyeGxXaWs3WEc1Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdVlYQndaVzVrUTJocGJHUW9kR2hwY3k1aVlYSllLVHRjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1WVhCd1pXNWtRMmhwYkdRb2RHaHBjeTVpWVhKWktUdGNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUXVZWEJ3Wlc1a1EyaHBiR1FvZEdocGN5NWlZWEphS1R0Y2JseHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNWhjSEJsYm1SRGFHbHNaQ2gwYUdsekxtSmhjbGd5S1R0Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdVlYQndaVzVrUTJocGJHUW9kR2hwY3k1aVlYSlpNaWs3WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG1Gd2NHVnVaRU5vYVd4a0tIUm9hWE11WW1GeVdqSXBPMXh1WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG1Gd2NHVnVaRU5vYVd4a0tIUm9hWE11ZEdsMGJHVXBPMXh1WEc0Z0lIMWNibHh1SUNCamIyeHZja2x1ZEdWeVptRmpaU2dwSUh0Y2JseHVJQ0FnSUdsbUlDaDBhR2x6TGw5aFkzUnBkbVVwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNXpkSGxzWlM1aVlXTnJaM0p2ZFc1a1EyOXNiM0lnUFNCMGFHbHpMbU52Ykc5eWN5NWhZMk5sYm5RN1hHNGdJQ0FnSUNCMGFHbHpMbU5wY21Oc1pWZ3VjMlYwUVhSMGNtbGlkWFJsS0NkbWFXeHNKeXgwYUdsekxtTnZiRzl5Y3k1c2FXZG9kQ2s3WEc0Z0lDQWdJQ0IwYUdsekxtTnBjbU5zWlZrdWMyVjBRWFIwY21saWRYUmxLQ2RtYVd4c0p5eDBhR2x6TG1OdmJHOXljeTVzYVdkb2RDazdYRzRnSUNBZ0lDQjBhR2x6TG1OcGNtTnNaVm91YzJWMFFYUjBjbWxpZFhSbEtDZG1hV3hzSnl4MGFHbHpMbU52Ykc5eWN5NXNhV2RvZENrN1hHNGdJQ0FnSUNCMGFHbHpMbU5wY21Oc1pWZ3VjMlYwUVhSMGNtbGlkWFJsS0NkemRISnZhMlVuTEhSb2FYTXVZMjlzYjNKekxteHBaMmgwS1R0Y2JpQWdJQ0FnSUhSb2FYTXVZMmx5WTJ4bFdTNXpaWFJCZEhSeWFXSjFkR1VvSjNOMGNtOXJaU2NzZEdocGN5NWpiMnh2Y25NdWJHbG5hSFFwTzF4dUlDQWdJQ0FnZEdocGN5NWphWEpqYkdWYUxuTmxkRUYwZEhKcFluVjBaU2duYzNSeWIydGxKeXgwYUdsekxtTnZiRzl5Y3k1c2FXZG9kQ2s3WEc0Z0lDQWdJQ0IwYUdsekxtSmhjbGd1YzJWMFFYUjBjbWxpZFhSbEtDZHpkSEp2YTJVbkxIUm9hWE11WTI5c2IzSnpMbXhwWjJoMEtUdGNiaUFnSUNBZ0lIUm9hWE11WW1GeVdTNXpaWFJCZEhSeWFXSjFkR1VvSjNOMGNtOXJaU2NzZEdocGN5NWpiMnh2Y25NdWJHbG5hSFFwTzF4dUlDQWdJQ0FnZEdocGN5NWlZWEphTG5ObGRFRjBkSEpwWW5WMFpTZ25jM1J5YjJ0bEp5eDBhR2x6TG1OdmJHOXljeTVzYVdkb2RDazdYRzRnSUNBZ0lDQjBhR2x6TG1KaGNsZ3lMbk5sZEVGMGRISnBZblYwWlNnbmMzUnliMnRsSnl4MGFHbHpMbU52Ykc5eWN5NXNhV2RvZENrN1hHNGdJQ0FnSUNCMGFHbHpMbUpoY2xreUxuTmxkRUYwZEhKcFluVjBaU2duYzNSeWIydGxKeXgwYUdsekxtTnZiRzl5Y3k1c2FXZG9kQ2s3WEc0Z0lDQWdJQ0IwYUdsekxtSmhjbG95TG5ObGRFRjBkSEpwWW5WMFpTZ25jM1J5YjJ0bEp5eDBhR2x6TG1OdmJHOXljeTVzYVdkb2RDazdYRzRnSUNBZ0lDQjBhR2x6TG5ScGRHeGxMbk5sZEVGMGRISnBZblYwWlNnblptbHNiQ2NzZEdocGN5NWpiMnh2Y25NdWJHbG5hSFFwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1YzNSNWJHVXVZbUZqYTJkeWIzVnVaRU52Ykc5eUlEMGdkR2hwY3k1amIyeHZjbk11Wm1sc2JEdGNiaUFnSUNBZ0lIUm9hWE11WTJseVkyeGxXQzV6WlhSQmRIUnlhV0oxZEdVb0oyWnBiR3duTEhSb2FYTXVZMjlzYjNKekxtMWxaR2wxYlV4cFoyaDBLVHRjYmlBZ0lDQWdJSFJvYVhNdVkybHlZMnhsV1M1elpYUkJkSFJ5YVdKMWRHVW9KMlpwYkd3bkxIUm9hWE11WTI5c2IzSnpMbTFsWkdsMWJVeHBaMmgwS1R0Y2JpQWdJQ0FnSUhSb2FYTXVZMmx5WTJ4bFdpNXpaWFJCZEhSeWFXSjFkR1VvSjJacGJHd25MSFJvYVhNdVkyOXNiM0p6TG0xbFpHbDFiVXhwWjJoMEtUdGNiaUFnSUNBZ0lIUm9hWE11WTJseVkyeGxXQzV6WlhSQmRIUnlhV0oxZEdVb0ozTjBjbTlyWlNjc2RHaHBjeTVqYjJ4dmNuTXViV1ZrYVhWdFRHbG5hSFFwTzF4dUlDQWdJQ0FnZEdocGN5NWphWEpqYkdWWkxuTmxkRUYwZEhKcFluVjBaU2duYzNSeWIydGxKeXgwYUdsekxtTnZiRzl5Y3k1dFpXUnBkVzFNYVdkb2RDazdYRzRnSUNBZ0lDQjBhR2x6TG1OcGNtTnNaVm91YzJWMFFYUjBjbWxpZFhSbEtDZHpkSEp2YTJVbkxIUm9hWE11WTI5c2IzSnpMbTFsWkdsMWJVeHBaMmgwS1R0Y2JpQWdJQ0FnSUhSb2FYTXVZbUZ5V0M1elpYUkJkSFJ5YVdKMWRHVW9KM04wY205clpTY3NkR2hwY3k1amIyeHZjbk11YldWa2FYVnRUR2xuYUhRcE8xeHVJQ0FnSUNBZ2RHaHBjeTVpWVhKWkxuTmxkRUYwZEhKcFluVjBaU2duYzNSeWIydGxKeXgwYUdsekxtTnZiRzl5Y3k1dFpXUnBkVzFNYVdkb2RDazdYRzRnSUNBZ0lDQjBhR2x6TG1KaGNsb3VjMlYwUVhSMGNtbGlkWFJsS0NkemRISnZhMlVuTEhSb2FYTXVZMjlzYjNKekxtMWxaR2wxYlV4cFoyaDBLVHRjYmlBZ0lDQWdJSFJvYVhNdVltRnlXREl1YzJWMFFYUjBjbWxpZFhSbEtDZHpkSEp2YTJVbkxIUm9hWE11WTI5c2IzSnpMbTFsWkdsMWJVeHBaMmgwS1R0Y2JpQWdJQ0FnSUhSb2FYTXVZbUZ5V1RJdWMyVjBRWFIwY21saWRYUmxLQ2R6ZEhKdmEyVW5MSFJvYVhNdVkyOXNiM0p6TG0xbFpHbDFiVXhwWjJoMEtUdGNiaUFnSUNBZ0lIUm9hWE11WW1GeVdqSXVjMlYwUVhSMGNtbGlkWFJsS0NkemRISnZhMlVuTEhSb2FYTXVZMjlzYjNKekxtMWxaR2wxYlV4cFoyaDBLVHRjYmlBZ0lDQWdJSFJvYVhNdWRHbDBiR1V1YzJWMFFYUjBjbWxpZFhSbEtDZG1hV3hzSnl4MGFHbHpMbU52Ykc5eWN5NXRaV1JwZFcxTWFXZG9kQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lIMWNibHh1SUNCMWNHUmhkR1VvZGlrZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TGw5aFkzUnBkbVVwZTF4dVhHNGdJQ0FnSUNCc1pYUWdlU0E5SUhZdVltVjBZVHRjYmlBZ0lDQWdJR3hsZENCNElEMGdkaTVuWVcxdFlUdGNiaUFnSUNBZ0lHeGxkQ0I2SUQwZ2RpNWhiSEJvWVR0Y2JseHVJQ0FnSUNBZ0x5OGdkR0ZyWlNCMGFHVWdiM0pwWjJsdVlXd2dMVGt3SUhSdklEa3dJSE5qWVd4bElHRnVaQ0J1YjNKdFlXeHBlbVVnYVhRZ01DMHhYRzRnSUNBZ0lDQjRJRDBnYldGMGFDNXpZMkZzWlNoNExDMDVNQ3c1TUN3d0xERXBPMXh1SUNBZ0lDQWdlU0E5SUcxaGRHZ3VjMk5oYkdVb2VTd3RPVEFzT1RBc01Dd3hLVHRjYmlBZ0lDQWdJSG9nUFNCdFlYUm9Mbk5qWVd4bEtIb3NNQ3d6TmpBc01Dd3hLVHRjYmx4dVhHNGdJQ0FnSUNCc1pYUWdhR0Z1Wkd4bFVHOXBiblJ6SUQwZ2UxeHVJQ0FnSUNBZ0lDQnpkR0Z5ZERvZ1RXRjBhQzVRU1NveExqVXNYRzRnSUNBZ0lDQWdJR1Z1WkRvZ2JXRjBhQzVqYkdsd0tDQnRZWFJvTG5OallXeGxLSGdzTUN3d0xqVXNUV0YwYUM1UVNTb3hMalVzVFdGMGFDNVFTU293TGpVcElDd2dUV0YwYUM1UVNTb3dMalVzSUUxaGRHZ3VVRWtxTVM0MUlDbGNiaUFnSUNBZ0lIMDdYRzRnSUNBZ0lDQnNaWFFnYUdGdVpHeGxNbEJ2YVc1MGN5QTlJSHRjYmlBZ0lDQWdJQ0FnYzNSaGNuUTZJRTFoZEdndVVFa3FNaTQxTEZ4dUlDQWdJQ0FnSUNCbGJtUTZJRzFoZEdndVkyeHBjQ2dnYldGMGFDNXpZMkZzWlNoNExEQXVOU3d4TEUxaGRHZ3VVRWtxTWk0MUxFMWhkR2d1VUVrcU1TNDFLU0FzSUUxaGRHZ3VVRWtxTVM0MUxDQk5ZWFJvTGxCSktqSXVOU0FwWEc0Z0lDQWdJQ0I5TzF4dVhHNGdJQ0FnSUNCc1pYUWdhR0Z1Wkd4bFVHRjBhQ0E5SUhOMlp5NWhjbU1vZEdocGN5NWphWEpqYkdWWUxtTjRMbUpoYzJWV1lXd3VkbUZzZFdVc0lIUm9hWE11WTJseVkyeGxXQzVqZVM1aVlYTmxWbUZzTG5aaGJIVmxMQ0IwYUdsekxtTnBjbU5zWlZndWNpNWlZWE5sVm1Gc0xuWmhiSFZsTENCb1lXNWtiR1ZRYjJsdWRITXVjM1JoY25Rc0lHaGhibVJzWlZCdmFXNTBjeTVsYm1RcE8xeHVJQ0FnSUNBZ2JHVjBJR2hoYm1Sc1pUSlFZWFJvSUQwZ2MzWm5MbUZ5WXloMGFHbHpMbU5wY21Oc1pWZ3VZM2d1WW1GelpWWmhiQzUyWVd4MVpTd2dkR2hwY3k1amFYSmpiR1ZZTG1ONUxtSmhjMlZXWVd3dWRtRnNkV1VzSUhSb2FYTXVZMmx5WTJ4bFdDNXlMbUpoYzJWV1lXd3VkbUZzZFdVc0lHaGhibVJzWlRKUWIybHVkSE11YzNSaGNuUXNJR2hoYm1Sc1pUSlFiMmx1ZEhNdVpXNWtLVHRjYmx4dUlDQWdJQ0FnZEdocGN5NWlZWEpZTG5ObGRFRjBkSEpwWW5WMFpTZ25aQ2NzSUdoaGJtUnNaVkJoZEdncE8xeHVJQ0FnSUNBZ2RHaHBjeTVpWVhKWU1pNXpaWFJCZEhSeWFXSjFkR1VvSjJRbkxDQm9ZVzVrYkdVeVVHRjBhQ2s3WEc1Y2JseHVYRzVjYmx4dUlDQWdJQ0FnYUdGdVpHeGxVRzlwYm5SeklEMGdlMXh1SUNBZ0lDQWdJQ0J6ZEdGeWREb2dUV0YwYUM1UVNTb3hMalVzWEc0Z0lDQWdJQ0FnSUdWdVpEb2diV0YwYUM1amJHbHdLQ0J0WVhSb0xuTmpZV3hsS0hrc01Dd3dMalVzVFdGMGFDNVFTU294TGpVc1RXRjBhQzVRU1Nvd0xqVXBJQ3dnVFdGMGFDNVFTU293TGpVc0lFMWhkR2d1VUVrcU1TNDFJQ2xjYmlBZ0lDQWdJSDA3WEc0Z0lDQWdJQ0JvWVc1a2JHVXlVRzlwYm5SeklEMGdlMXh1SUNBZ0lDQWdJQ0J6ZEdGeWREb2dUV0YwYUM1UVNTb3lMalVzWEc0Z0lDQWdJQ0FnSUdWdVpEb2diV0YwYUM1amJHbHdLQ0J0WVhSb0xuTmpZV3hsS0hrc01DNDFMREVzVFdGMGFDNVFTU295TGpVc1RXRjBhQzVRU1NveExqVXBJQ3dnVFdGMGFDNVFTU294TGpVc0lFMWhkR2d1VUVrcU1pNDFJQ2xjYmlBZ0lDQWdJSDA3WEc1Y2JpQWdJQ0FnSUdoaGJtUnNaVkJoZEdnZ1BTQnpkbWN1WVhKaktIUm9hWE11WTJseVkyeGxXUzVqZUM1aVlYTmxWbUZzTG5aaGJIVmxMQ0IwYUdsekxtTnBjbU5zWlZrdVkza3VZbUZ6WlZaaGJDNTJZV3gxWlN3Z2RHaHBjeTVqYVhKamJHVlpMbkl1WW1GelpWWmhiQzUyWVd4MVpTd2dhR0Z1Wkd4bFVHOXBiblJ6TG5OMFlYSjBMQ0JvWVc1a2JHVlFiMmx1ZEhNdVpXNWtLVHRjYmlBZ0lDQWdJR2hoYm1Sc1pUSlFZWFJvSUQwZ2MzWm5MbUZ5WXloMGFHbHpMbU5wY21Oc1pWa3VZM2d1WW1GelpWWmhiQzUyWVd4MVpTd2dkR2hwY3k1amFYSmpiR1ZaTG1ONUxtSmhjMlZXWVd3dWRtRnNkV1VzSUhSb2FYTXVZMmx5WTJ4bFdTNXlMbUpoYzJWV1lXd3VkbUZzZFdVc0lHaGhibVJzWlRKUWIybHVkSE11YzNSaGNuUXNJR2hoYm1Sc1pUSlFiMmx1ZEhNdVpXNWtLVHRjYmx4dUlDQWdJQ0FnZEdocGN5NWlZWEpaTG5ObGRFRjBkSEpwWW5WMFpTZ25aQ2NzSUdoaGJtUnNaVkJoZEdncE8xeHVJQ0FnSUNBZ2RHaHBjeTVpWVhKWk1pNXpaWFJCZEhSeWFXSjFkR1VvSjJRbkxDQm9ZVzVrYkdVeVVHRjBhQ2s3WEc1Y2JseHVYRzVjYmx4dVhHNGdJQ0FnSUNCb1lXNWtiR1ZRYjJsdWRITWdQU0I3WEc0Z0lDQWdJQ0FnSUhOMFlYSjBPaUJOWVhSb0xsQkpLakV1TlN4Y2JpQWdJQ0FnSUNBZ1pXNWtPaUJ0WVhSb0xtTnNhWEFvSUcxaGRHZ3VjMk5oYkdVb2Vpd3dMREF1TlN4TllYUm9MbEJKS2pFdU5TeE5ZWFJvTGxCSktqQXVOU2tnTENCTllYUm9MbEJKS2pBdU5Td2dUV0YwYUM1UVNTb3hMalVnS1Z4dUlDQWdJQ0FnZlR0Y2JpQWdJQ0FnSUdoaGJtUnNaVEpRYjJsdWRITWdQU0I3WEc0Z0lDQWdJQ0FnSUhOMFlYSjBPaUJOWVhSb0xsQkpLakl1TlN4Y2JpQWdJQ0FnSUNBZ1pXNWtPaUJ0WVhSb0xtTnNhWEFvSUcxaGRHZ3VjMk5oYkdVb2Vpd3dMalVzTVN4TllYUm9MbEJKS2pJdU5TeE5ZWFJvTGxCSktqRXVOU2tnTENCTllYUm9MbEJKS2pFdU5Td2dUV0YwYUM1UVNTb3lMalVnS1Z4dUlDQWdJQ0FnZlR0Y2JseHVJQ0FnSUNBZ2FHRnVaR3hsVUdGMGFDQTlJSE4yWnk1aGNtTW9kR2hwY3k1amFYSmpiR1ZhTG1ONExtSmhjMlZXWVd3dWRtRnNkV1VzSUhSb2FYTXVZMmx5WTJ4bFdpNWplUzVpWVhObFZtRnNMblpoYkhWbExDQjBhR2x6TG1OcGNtTnNaVm91Y2k1aVlYTmxWbUZzTG5aaGJIVmxMQ0JvWVc1a2JHVlFiMmx1ZEhNdWMzUmhjblFzSUdoaGJtUnNaVkJ2YVc1MGN5NWxibVFwTzF4dUlDQWdJQ0FnYUdGdVpHeGxNbEJoZEdnZ1BTQnpkbWN1WVhKaktIUm9hWE11WTJseVkyeGxXaTVqZUM1aVlYTmxWbUZzTG5aaGJIVmxMQ0IwYUdsekxtTnBjbU5zWlZvdVkza3VZbUZ6WlZaaGJDNTJZV3gxWlN3Z2RHaHBjeTVqYVhKamJHVmFMbkl1WW1GelpWWmhiQzUyWVd4MVpTd2dhR0Z1Wkd4bE1sQnZhVzUwY3k1emRHRnlkQ3dnYUdGdVpHeGxNbEJ2YVc1MGN5NWxibVFwTzF4dVhHNGdJQ0FnSUNCMGFHbHpMbUpoY2xvdWMyVjBRWFIwY21saWRYUmxLQ2RrSnl3Z2FHRnVaR3hsVUdGMGFDazdYRzRnSUNBZ0lDQjBhR2x6TG1KaGNsb3lMbk5sZEVGMGRISnBZblYwWlNnblpDY3NJR2hoYm1Sc1pUSlFZWFJvS1R0Y2JseHVYRzRnSUNBZ0lDQXZLbHh1WEc0Z0lDQWdJQ0JzWlhRZ2NHOXBiblJ6V0NBOUlIdGNiaUFnSUNBZ0lDQWdjM1JoY25RNklEQXNYRzRnSUNBZ0lDQWdJR1Z1WkRvZ2JXRjBhQzV6WTJGc1pTZ2dlQ3dnTUN3Z01Td2dNQ3dnVFdGMGFDNVFTU295SUNsY2JpQWdJQ0FnSUgwN1hHNWNiaUFnSUNBdkx5QWdZMjl1YzI5c1pTNXNiMmNvZEdocGN5NWphWEpqYkdWWUxtTjRMbUpoYzJWV1lXd3VkbUZzZFdVcE8xeHVYRzRnSUNBZ0lDQnNaWFFnY0dGMGFGZ2dQU0J6ZG1jdVlYSmpLSFJvYVhNdVkybHlZMnhsV0M1amVDNWlZWE5sVm1Gc0xuWmhiSFZsTENCMGFHbHpMbU5wY21Oc1pWZ3VZM2t1WW1GelpWWmhiQzUyWVd4MVpTd2dkR2hwY3k1amFYSmpiR1ZZTG5JdVltRnpaVlpoYkM1MllXeDFaU295TENCd2IybHVkSE5ZTG5OMFlYSjBMQ0J3YjJsdWRITllMbVZ1WkNrN1hHNWNiaUFnSUNBZ0lIUm9hWE11WW1GeVdDNXpaWFJCZEhSeWFXSjFkR1VvSjJRbkxIQmhkR2hZS1RzZ0tpOWNibHh1SUNBZ0lDQWdMeTkwYUdsekxuUmxlSFJJTG5SbGVIUkRiMjUwWlc1MElEMGdiV0YwYUM1d2NuVnVaU2g0TERJcE8xeHVJQ0FnSUNBZ0x5OTBhR2x6TG5SbGVIUldMblJsZUhSRGIyNTBaVzUwSUQwZ2JXRjBhQzV3Y25WdVpTaDVMRElwTzF4dUlDQWdJQ0FnTHk5Y2JpQWdJQ0F2THlBZ2RHaHBjeTVqYVhKamJHVllMbk5sZEVGMGRISnBZblYwWlNnbmIzQmhZMmwwZVNjc2VDazdYRzRnSUNBZ0x5OGdJSFJvYVhNdVkybHlZMnhsV1M1elpYUkJkSFJ5YVdKMWRHVW9KMjl3WVdOcGRIa25MSGtwTzF4dUlDQWdJQzh2SUNCMGFHbHpMbU5wY21Oc1pWb3VjMlYwUVhSMGNtbGlkWFJsS0NkdmNHRmphWFI1Snl4NktUdGNibHh1SUNBZ0lDQWdkR2hwY3k1bGJXbDBLQ2RqYUdGdVoyVW5MQ0I3WEc0Z0lDQWdJQ0FnSUhnNklIZ3NYRzRnSUNBZ0lDQWdJSGs2SUhrc1hHNGdJQ0FnSUNBZ0lIbzZJSHBjYmlBZ0lDQWdJSDBwTzF4dVhHNGdJQ0FnZlZ4dVhHNGdJSDFjYmx4dUlDQmpiR2xqYXlncElIdGNiaUFnSUNCcFppQW9kMmx1Wkc5M0xrUmxkbWxqWlU5eWFXVnVkR0YwYVc5dVJYWmxiblFwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVZV04wYVhabElEMGdJWFJvYVhNdVlXTjBhWFpsTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0JYYUdWMGFHVnlJSFJvWlNCcGJuUmxjbVpoWTJVZ2FYTWdiMjRnS0dWdGFYUjBhVzVuSUhaaGJIVmxjeWtnYjNJZ2IyWm1JQ2h3WVhWelpXUWdKaUJ1YjNRZ1pXMXBkSFJwYm1jZ2RtRnNkV1Z6S1M0Z1UyVjBkR2x1WnlCMGFHbHpJSEJ5YjNCbGNuUjVJSGRwYkd3Z2RYQmtZWFJsSUdsMExseHVJQ0JBZEhsd1pTQjdZbTl2YkdWaGJuMWNiaUFnS2k5Y2JseHVJQ0JuWlhRZ1lXTjBhWFpsS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxsOWhZM1JwZG1VN1hHNGdJSDFjYmx4dUlDQnpaWFFnWVdOMGFYWmxLRzl1S1NCN1hHNGdJQ0FnZEdocGN5NWZZV04wYVhabElEMGdiMjQ3WEc0Z0lDQWdkR2hwY3k1amIyeHZja2x1ZEdWeVptRmpaU2dwTzF4dUlDQjlYRzVjYmlBZ1kzVnpkRzl0UkdWemRISnZlU2dwSUh0Y2JpQWdJQ0IzYVc1a2IzY3VjbVZ0YjNabFJYWmxiblJNYVhOMFpXNWxjaWduWkdWMmFXTmxiM0pwWlc1MFlYUnBiMjRuTENCMGFHbHpMbUp2ZFc1a1ZYQmtZWFJsTENCbVlXeHpaU2s3WEc0Z0lIMWNibHh1ZlZ4dVhHNWNibHh1THk4Z1YwVkNVRUZEU3lCR1QwOVVSVklnTHk5Y2JpOHZJQzR2Zmk5cWMyaHBiblF0Ykc5aFpHVnlJUzR2YkdsaUwybHVkR1Z5Wm1GalpYTXZkR2xzZEM1cWN5SXNJaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHViR1YwSUdSdmJTQTlJSEpsY1hWcGNtVW9KeTR1TDNWMGFXd3ZaRzl0SnlrN1hHNXNaWFFnYldGMGFDQTlJSEpsY1hWcGNtVW9KeTR1TDNWMGFXd3ZiV0YwYUNjcE8xeHViR1YwSUVsdWRHVnlabUZqWlNBOUlISmxjWFZwY21Vb0p5NHVMMk52Y21VdmFXNTBaWEptWVdObEp5azdYRzVzWlhRZ1UyeHBaR1Z5VkdWdGNHeGhkR1VnUFNCeVpYRjFhWEpsS0NjdUxpOWpiMjF3YjI1bGJuUnpMM05zYVdSbGNuUmxiWEJzWVhSbEp5azdYRzVzWlhRZ2RHOTFZMmdnUFNCeVpYRjFhWEpsS0NjdUxpOTFkR2xzTDNSdmRXTm9KeWs3WEc1Y2JseHVYRzVqYkdGemN5QlRhVzVuYkdWVGJHbGtaWElnWlhoMFpXNWtjeUJUYkdsa1pYSlVaVzF3YkdGMFpTQjdYRzVjYmlBZ1kyOXVjM1J5ZFdOMGIzSW9LU0I3WEc1Y2JpQWdJQ0JzWlhRZ2IzQjBhVzl1Y3lBOUlGc25jMk5oYkdVbkxDZDJZV3gxWlNkZE8xeHVYRzRnSUNBZ2JHVjBJR1JsWm1GMWJIUnpJRDBnZTF4dUlDQWdJQ0FnSjNOcGVtVW5PaUJiTVRJd0xESXdYU3hjYmlBZ0lDQWdJQ2R2Y21sbGJuUmhkR2x2YmljNklDZDJaWEowYVdOaGJDY3NYRzRnSUNBZ0lDQW5iVzlrWlNjNklDZGhZbk52YkhWMFpTY3NYRzRnSUNBZ0lDQW5jMk5oYkdVbk9pQmJNQ3d4WFN4Y2JpQWdJQ0FnSUNkemRHVndKem9nTUN4Y2JpQWdJQ0FnSUNkMllXeDFaU2M2SURBc1hHNGdJQ0FnSUNBbmFHRnpTMjV2WWljNklIUnlkV1ZjYmlBZ0lDQjlPMXh1WEc0Z0lDQWdjM1Z3WlhJb1lYSm5kVzFsYm5SekxHOXdkR2x2Ym5Nc1pHVm1ZWFZzZEhNcE8xeHVYRzVjYmlBZ0lDQXZLaUJsZG1WdWRITWdLaTljYmx4dUlDQWdJR2xtSUNnaGRHOTFZMmd1WlhocGMzUnpLU0I3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVZMnhwWTJzZ1BTQW9LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11YlhWc2RHbHpiR2xrWlhJdWFXNTBaWEpoWTNScGJtY2dQU0IwY25WbE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG0xMWJIUnBjMnhwWkdWeUxtbHVkR1Z5Y0c5c1lYUnBiMjRnUFNCN1hHNGdJQ0FnSUNBZ0lDQWdhVzVrWlhnNklIUm9hWE11YVc1a1pYZ3NYRzRnSUNBZ0lDQWdJQ0FnZG1Gc2RXVTZJSFJvYVhNdWRtRnNkV1ZjYmlBZ0lDQWdJQ0FnZlR0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVrYjNkdUtDazdYRzRnSUNBZ0lDQWdJSFJvYVhNdWJYVnNkR2x6Ykdsa1pYSXVkbUZzZFdWelczUm9hWE11YVc1a1pYaGRJRDBnZEdocGN5NTJZV3gxWlR0Y2JpQWdJQ0FnSUgwN1hHNGdJQ0FnSUNCMGFHbHpMbVZzWlcxbGJuUXVZV1JrUlhabGJuUk1hWE4wWlc1bGNpZ25iVzkxYzJWdmRtVnlKeXdnS0dVcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11YlhWc2RHbHpiR2xrWlhJdWFXNTBaWEpoWTNScGJtY3BJSHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9JWFJvYVhNdWIyWm1jMlYwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtOW1abk5sZENBOUlHUnZiUzVtYVc1a1VHOXphWFJwYjI0b2RHaHBjeTVsYkdWdFpXNTBLVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1dGIzVnpaU0E5SUdSdmJTNXNiMk5oZEdWTmIzVnpaU2hsTEhSb2FYTXViMlptYzJWMEtUdGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxtUnZkMjRvS1R0Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG0xMWJIUnBjMnhwWkdWeUxuWmhiSFZsYzF0MGFHbHpMbWx1WkdWNFhTQTlJSFJvYVhNdWRtRnNkV1U3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdWJYVnNkR2x6Ykdsa1pYSXVhVzUwWlhKd2IyeGhkR2x2YmlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHUnBjM1JoYm1ObElEMGdUV0YwYUM1aFluTW9kR2hwY3k1dGRXeDBhWE5zYVdSbGNpNXBiblJsY25CdmJHRjBhVzl1TG1sdVpHVjRMWFJvYVhNdWFXNWtaWGdwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0NCa2FYTjBZVzVqWlNBK0lERWdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR3hsZENCc2IzY2dQU0JOWVhSb0xtMXBiaWgwYUdsekxtMTFiSFJwYzJ4cFpHVnlMbWx1ZEdWeWNHOXNZWFJwYjI0dWFXNWtaWGdzZEdocGN5NXBibVJsZUNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUd4bGRDQm9hV2RvSUQwZ1RXRjBhQzV0WVhnb2RHaHBjeTV0ZFd4MGFYTnNhV1JsY2k1cGJuUmxjbkJ2YkdGMGFXOXVMbWx1WkdWNExIUm9hWE11YVc1a1pYZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnYkc5M1ZtRnNkV1VnUFNCMGFHbHpMbTExYkhScGMyeHBaR1Z5TG5Oc2FXUmxjbk5iYkc5M1hTNTJZV3gxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHaHBaMmhXWVd4MVpTQTlJSFJvYVhNdWJYVnNkR2x6Ykdsa1pYSXVjMnhwWkdWeWMxdG9hV2RvWFM1MllXeDFaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoc1pYUWdhVDFzYjNjN2FUeG9hV2RvTzJrckt5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdWJYVnNkR2x6Ykdsa1pYSXVjMnhwWkdWeWMxdHBYUzUyWVd4MVpTQTlJRzFoZEdndWFXNTBaWEp3S0NBb2FTMXNiM2NwTDJScGMzUmhibU5sTENCc2IzZFdZV3gxWlN3Z2FHbG5hRlpoYkhWbElDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiR1YwSUhOdGIyOTBhR1ZrVm1Gc2RXVWdQU0IwYUdsekxtMTFiSFJwYzJ4cFpHVnlMbk5zYVdSbGNuTmJhVjB1ZG1Gc2RXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1dGRXeDBhWE5zYVdSbGNpNTJZV3gxWlhOYmFWMGdQU0J6Ylc5dmRHaGxaRlpoYkhWbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11YlhWc2RHbHpiR2xrWlhJdWRYQmtZWFJsS0drc2MyMXZiM1JvWldSV1lXeDFaU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG0xMWJIUnBjMnhwWkdWeUxtbHVkR1Z5Y0c5c1lYUnBiMjRnUFNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwYm1SbGVEb2dkR2hwY3k1cGJtUmxlQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lIWmhiSFZsT2lCMGFHbHpMblpoYkhWbFhHNGdJQ0FnSUNBZ0lDQWdmVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlNrN1hHNWNibHh1SUNBZ0lDQWdkR2hwY3k1dGIzWmxJRDBnS0NrZ1BUNGdlMXh1SUNBZ0lDQWdmVHRjYmlBZ0lDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1aFpHUkZkbVZ1ZEV4cGMzUmxibVZ5S0NkdGIzVnpaVzF2ZG1VbkxDQW9aU2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NXRkV3gwYVhOc2FXUmxjaTVwYm5SbGNtRmpkR2x1WnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJR2xtSUNnaGRHaHBjeTV2Wm1aelpYUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11YjJabWMyVjBJRDBnWkc5dExtWnBibVJRYjNOcGRHbHZiaWgwYUdsekxtVnNaVzFsYm5RcE8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbTF2ZFhObElEMGdaRzl0TG14dlkyRjBaVTF2ZFhObEtHVXNkR2hwY3k1dlptWnpaWFFwTzF4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11YzJ4cFpHVW9LVHRjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbTExYkhScGMyeHBaR1Z5TG5aaGJIVmxjMXQwYUdsekxtbHVaR1Y0WFNBOUlIUm9hWE11ZG1Gc2RXVTdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDBwTzF4dVhHNWNiaUFnSUNBZ0lIUm9hWE11Y21Wc1pXRnpaU0E5SUNncElEMCtJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXRkV3gwYVhOc2FXUmxjaTVwYm5SbGNtRmpkR2x1WnlBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbTExYkhScGMyeHBaR1Z5TG1sdWRHVnljRzlzWVhScGIyNGdQU0JtWVd4elpUdGNiaUFnSUNBZ0lIMDdYRzRnSUNBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1WVdSa1JYWmxiblJNYVhOMFpXNWxjaWduYlc5MWMyVjFjQ2NzSUNncElEMCtJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11YlhWc2RHbHpiR2xrWlhJdWFXNTBaWEpoWTNScGJtY3BJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMblZ3S0NrN1hHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1dGRXeDBhWE5zYVdSbGNpNXBiblJsY25CdmJHRjBhVzl1SUQwZ1ptRnNjMlU3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTV0ZFd4MGFYTnNhV1JsY2k1MllXeDFaWE5iZEdocGN5NXBibVJsZUYwZ1BTQjBhR2x6TG5aaGJIVmxPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNWhaR1JGZG1WdWRFeHBjM1JsYm1WeUtDZHRiM1Z6Wlc5MWRDY3NJQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXViWFZzZEdsemJHbGtaWEl1YVc1MFpYSmhZM1JwYm1jcElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxuVndLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTV0ZFd4MGFYTnNhV1JsY2k1MllXeDFaWE5iZEdocGN5NXBibVJsZUYwZ1BTQjBhR2x6TG5aaGJIVmxPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5S1R0Y2JseHVJQ0FnSUgxY2JseHVJQ0FnSUhSb2FYTXVZM1Z6ZEc5dFUzUjViR1VvS1R0Y2JpQWdmVnh1WEc0Z0lHTjFjM1J2YlZOMGVXeGxLQ2tnZTF4dVhHNGdJQ0FnTHlvZ2MzUjViR1VnWTJoaGJtZGxjeUFxTDF4dVhHNGdJQ0FnZEdocGN5NWlZWEl1YzJWMFFYUjBjbWxpZFhSbEtDZDRKeXd3S1R0Y2JpQWdJQ0IwYUdsekxtSmhjaTV6WlhSQmRIUnlhV0oxZEdVb0ozUnlZVzV6Wm05eWJTY3NKM1J5WVc1emJHRjBaU2d3TERBcEp5azdYRzRnSUNBZ2RHaHBjeTVpWVhJdWMyVjBRWFIwY21saWRYUmxLQ2R5ZUNjc01DazdJQzh2SUdOdmNtNWxjaUJ5WVdScGRYTmNiaUFnSUNCMGFHbHpMbUpoY2k1elpYUkJkSFJ5YVdKMWRHVW9KM0o1Snl3d0tUdGNiaUFnSUNCMGFHbHpMbUpoY2k1elpYUkJkSFJ5YVdKMWRHVW9KM2RwWkhSb0p5eDBhR2x6TG5kcFpIUm9LVHRjYmlBZ0lDQjBhR2x6TG1KaGNpNXpaWFJCZEhSeWFXSjFkR1VvSjJobGFXZG9kQ2NzZEdocGN5NW9aV2xuYUhRcE8xeHVYRzRnSUNBZ2RHaHBjeTVtYVd4c1ltRnlMbk5sZEVGMGRISnBZblYwWlNnbmVDY3NNQ2s3WEc0Z0lDQWdkR2hwY3k1bWFXeHNZbUZ5TG5ObGRFRjBkSEpwWW5WMFpTZ25kSEpoYm5ObWIzSnRKeXduZEhKaGJuTnNZWFJsS0RBc01Da25LVHRjYmlBZ0lDQjBhR2x6TG1acGJHeGlZWEl1YzJWMFFYUjBjbWxpZFhSbEtDZHllQ2NzTUNrN0lDOHZJR052Y201bGNpQnlZV1JwZFhOY2JpQWdJQ0IwYUdsekxtWnBiR3hpWVhJdWMyVjBRWFIwY21saWRYUmxLQ2R5ZVNjc01DazdYRzRnSUNBZ2RHaHBjeTVtYVd4c1ltRnlMbk5sZEVGMGRISnBZblYwWlNnbmQybGtkR2duTEhSb2FYTXVkMmxrZEdncE8xeHVJQ0FnSUhSb2FYTXVabWxzYkdKaGNpNXpaWFJCZEhSeWFXSjFkR1VvSjJobGFXZG9kQ2NzZEdocGN5NW9aV2xuYUhRcE8xeHVYRzRnSUgxY2JseHVmVnh1WEc0dktpcGNiaW9nVFhWc2RHbHpiR2xrWlhKY2JpcGNiaW9nUUdSbGMyTnlhWEIwYVc5dUlFMTFiSFJwYzJ4cFpHVnlYRzRxWEc0cUlFQmtaVzF2SUR4emNHRnVJRzVsZUhWekxYVnBQVndpYlhWc2RHbHpiR2xrWlhKY0lqNDhMM053WVc0K1hHNHFYRzRxSUVCbGVHRnRjR3hsWEc0cUlIWmhjaUJ0ZFd4MGFYTnNhV1JsY2lBOUlHNWxkeUJPWlhoMWN5NU5kV3gwYVhOc2FXUmxjaWduSTNSaGNtZGxkQ2NwWEc0cVhHNHFJRUJsZUdGdGNHeGxYRzRxSUhaaGNpQnRkV3gwYVhOc2FXUmxjaUE5SUc1bGR5Qk9aWGgxY3k1TmRXeDBhWE5zYVdSbGNpZ25JM1JoY21kbGRDY3NlMXh1S2lBZ0ozTnBlbVVuT2lCYk1qQXdMREV3TUYwc1hHNHFJQ0FuYm5WdFltVnlUMlpUYkdsa1pYSnpKem9nTlN4Y2Jpb2dJQ2R0YVc0bk9pQXdMRnh1S2lBZ0oyMWhlQ2M2SURFc1hHNHFJQ0FuYzNSbGNDYzZJREFzWEc0cUlDQW5kbUZzZFdWekp6b2dXekF1Tnl3d0xqY3NNQzQzTERBdU55d3dMamRkWEc0cUlIMHBYRzRxWEc0cUlFQnZkWFJ3ZFhSY2Jpb2dZMmhoYm1kbFhHNHFJRVpwY21WeklHRnVlU0IwYVcxbElIUm9aU0JwYm5SbGNtWmhZMlVuY3lCMllXeDFaU0JqYUdGdVoyVnpMaUE4WW5JK1hHNHFJRlJvWlNCbGRtVnVkQ0JrWVhSaElHRnVJRzlpYW1WamRDQmpiMjUwWVdsdWFXNW5JRHhwUG1sdVpHVjRQQzlwUGlCaGJtUWdQR2srZG1Gc2RXVThMMmsrSUhCeWIzQmxjblJwWlhOY2JpcGNiaW9nUUc5MWRIQjFkR1Y0WVcxd2JHVmNiaW9nYlhWc2RHbHpiR2xrWlhJdWIyNG9KMk5vWVc1blpTY3NablZ1WTNScGIyNG9kaWtnZTF4dUtpQWdJR052Ym5OdmJHVXViRzluS0hZcE8xeHVLaUI5S1Z4dUtseHVLaTljYmx4dUx5cGNibEJ5YjNCbGNuUnBaWE5jYmk1MllXeDFaWE5jYmx4dUtpOWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdZMnhoYzNNZ1RYVnNkR2x6Ykdsa1pYSWdaWGgwWlc1a2N5QkpiblJsY21aaFkyVWdlMXh1WEc0Z0lHTnZibk4wY25WamRHOXlLQ2tnZTF4dVhHNGdJQ0FnYkdWMElHOXdkR2x2Ym5NZ1BTQmJKM1poYkhWbEoxMDdYRzVjYmlBZ0lDQnNaWFFnWkdWbVlYVnNkSE1nUFNCN1hHNGdJQ0FnSUNBbmMybDZaU2M2SUZzeU1EQXNNVEF3WFN4Y2JpQWdJQ0FnSUNkdWRXMWlaWEpQWmxOc2FXUmxjbk1uT2lBMUxGeHVJQ0FnSUNBZ0oyMXBiaWM2SURBc1hHNGdJQ0FnSUNBbmJXRjRKem9nTVN4Y2JpQWdJQ0FnSUNkemRHVndKem9nTUN4Y2JpQWdJQ0FnSUNkMllXeDFaWE1uT2lCYk1DNDNMREF1Tnl3d0xqY3NNQzQzTERBdU4xMWNiaUFnSUNCOU8xeHVYRzRnSUNBZ2MzVndaWElvWVhKbmRXMWxiblJ6TEc5d2RHbHZibk1zWkdWbVlYVnNkSE1wTzF4dVhHNGdJQ0FnZEdocGN5NWZiblZ0WW1WeVQyWlRiR2xrWlhKeklEMGdkR2hwY3k1elpYUjBhVzVuY3k1dWRXMWlaWEpQWmxOc2FXUmxjbk03WEc0Z0lDQWdkR2hwY3k1MllXeDFaWE1nUFNCMGFHbHpMbk5sZEhScGJtZHpMblpoYkhWbGN6dGNibHh1SUNBZ0lIUm9hWE11YzJ4cFpHVnljeUE5SUZ0ZE8xeHVYRzRnSUNBZ2RHaHBjeTVwYm5SbGNtRmpkR2x1WnlBOUlHWmhiSE5sTzF4dVhHNGdJQ0FnZEdocGN5NXBibWwwS0NrN1hHNWNiaUFnZlZ4dVhHNGdJR0oxYVd4a1JuSmhiV1VvS1NCN1hHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MElEMGdaRzlqZFcxbGJuUXVZM0psWVhSbFJXeGxiV1Z1ZENnblpHbDJKeWs3WEc0Z0lDQWdkR2hwY3k1d1lYSmxiblF1WVhCd1pXNWtRMmhwYkdRb2RHaHBjeTVsYkdWdFpXNTBLVHRjYmlBZ2ZWeHVYRzRnSUdKMWFXeGtTVzUwWlhKbVlXTmxLQ2tnZTF4dVhHNGdJQ0FnYkdWMElHMXBiaUE5SUhSb2FYTXVjMlYwZEdsdVozTXViV2x1TzF4dUlDQWdJR3hsZENCdFlYZ2dQU0IwYUdsekxuTmxkSFJwYm1kekxtMWhlRHRjYmlBZ0lDQnNaWFFnYzNSbGNDQTlJSFJvYVhNdWMyVjBkR2x1WjNNdWMzUmxjRHRjYmx4dUlDQWdJR2xtSUNoMGFHbHpMbk5zYVdSbGNuTXViR1Z1WjNSb0tTQjdYRzRnSUNBZ0lDQnRhVzRnUFNCMGFHbHpMbk5zYVdSbGNuTmJNRjB1YldsdU8xeHVJQ0FnSUNBZ2JXRjRJRDBnZEdocGN5NXpiR2xrWlhKeld6QmRMbTFoZUR0Y2JpQWdJQ0FnSUhOMFpYQWdQU0IwYUdsekxuTnNhV1JsY25OYk1GMHVjM1JsY0R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0IwYUdsekxuTnNhV1JsY25NZ1BTQmJYVHRjYmx4dUlDQWdJR1p2Y2lBb2JHVjBJR2s5TUR0cFBIUm9hWE11WDI1MWJXSmxjazltVTJ4cFpHVnljenRwS3lzcElIdGNiaUFnSUNBZ0lHeGxkQ0JqYjI1MFlXbHVaWElnUFNCa2IyTjFiV1Z1ZEM1amNtVmhkR1ZGYkdWdFpXNTBLQ2R6Y0dGdUp5azdYRzVjYmlBZ0lDQWdJR3hsZENCemJHbGtaWElnUFNCdVpYY2dVMmx1WjJ4bFUyeHBaR1Z5S0dOdmJuUmhhVzVsY2l3Z2UxeHVJQ0FnSUNBZ0lDQWdJSE5qWVd4bE9pQmJiV2x1TEcxaGVGMHNYRzRnSUNBZ0lDQWdJQ0FnYzNSbGNEb2djM1JsY0N4Y2JpQWdJQ0FnSUNBZ0lDQnRiMlJsT2lBbllXSnpiMngxZEdVbkxGeHVJQ0FnSUNBZ0lDQWdJRzl5YVdWdWRHRjBhVzl1T2lBbmRtVnlkR2xqWVd3bkxGeHVJQ0FnSUNBZ0lDQWdJSFpoYkhWbE9pQjBhR2x6TG5aaGJIVmxjMXRwWFN4Y2JpQWdJQ0FnSUNBZ0lDQm9ZWE5MYm05aU9pQm1ZV3h6WlN4Y2JpQWdJQ0FnSUNBZ0lDQmpiMjF3YjI1bGJuUTZJSFJ5ZFdVc1hHNGdJQ0FnSUNBZ0lIMHNkR2hwY3k1MWNHUmhkR1V1WW1sdVpDaDBhR2x6TEdrcEtUdGNiaUFnSUNBZ0lITnNhV1JsY2k1dGRXeDBhWE5zYVdSbGNpQTlJSFJvYVhNN1hHNWNiaUFnSUNBZ0lITnNhV1JsY2k1cGJtUmxlQ0E5SUdrN1hHNGdJQ0FnSUNCcFppQW9kRzkxWTJndVpYaHBjM1J6S1NCN1hHNGdJQ0FnSUNBZ0lITnNhV1JsY2k1aVlYSXVhVzVrWlhnZ1BTQnBPMXh1SUNBZ0lDQWdJQ0J6Ykdsa1pYSXVabWxzYkdKaGNpNXBibVJsZUNBOUlHazdYRzRnSUNBZ0lDQWdJSE5zYVdSbGNpNXdjbVZEYkdsamF5QTlJSE5zYVdSbGNpNXdjbVZOYjNabElEMGdjMnhwWkdWeUxuQnlaVkpsYkdWaGMyVWdQU0FvS1NBOVBpQjdmVHRjYmlBZ0lDQWdJQ0FnYzJ4cFpHVnlMbU5zYVdOcklEMGdjMnhwWkdWeUxtMXZkbVVnUFNCemJHbGtaWEl1Y21Wc1pXRnpaU0E5SUNncElEMCtJSHQ5TzF4dUlDQWdJQ0FnSUNCemJHbGtaWEl1Y0hKbFZHOTFZMmdnUFNCemJHbGtaWEl1Y0hKbFZHOTFZMmhOYjNabElEMGdjMnhwWkdWeUxuQnlaVlJ2ZFdOb1VtVnNaV0Z6WlNBOUlDZ3BJRDArSUh0OU8xeHVJQ0FnSUNBZ0lDQnpiR2xrWlhJdWRHOTFZMmdnUFNCemJHbGtaWEl1ZEc5MVkyaE5iM1psSUQwZ2MyeHBaR1Z5TG5SdmRXTm9VbVZzWldGelpTQTlJQ2dwSUQwK0lIdDlPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0IwYUdsekxuTnNhV1JsY25NdWNIVnphQ2h6Ykdsa1pYSXBPMXh1SUNBZ0lDQWdkR2hwY3k1bGJHVnRaVzUwTG1Gd2NHVnVaRU5vYVd4a0tHTnZiblJoYVc1bGNpazdYRzVjYmlBZ0lDQjlYRzRnSUNBZ2FXWWdLSFJ2ZFdOb0xtVjRhWE4wY3lrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVoWkdSVWIzVmphRXhwYzNSbGJtVnljeWdwTzF4dUlDQWdJSDFjYmx4dUlDQjlYRzVjYmlBZ1kyOXNiM0pKYm5SbGNtWmhZMlVvS1NCN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVQwd08yazhkR2hwY3k1emJHbGtaWEp6TG14bGJtZDBhRHRwS3lzcElIdGNiaUFnSUNBZ0lIUm9hWE11YzJ4cFpHVnljMXRwWFM1amIyeHZjbk1nUFNCMGFHbHpMbU52Ykc5eWN6dGNiaUFnSUNBZ0lIUm9hWE11YzJ4cFpHVnljMXRwWFM1amIyeHZja2x1ZEdWeVptRmpaU2dwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhOcGVtVkpiblJsY21aaFkyVW9LU0I3WEc1Y2JpQWdJQ0JzWlhRZ2MyeHBaR1Z5VjJsa2RHZ2dQU0IwYUdsekxuZHBaSFJvSUM4Z2RHaHBjeTV6Ykdsa1pYSnpMbXhsYm1kMGFEdGNiaUFnSUNCc1pYUWdjMnhwWkdWeVNHVnBaMmgwSUQwZ2RHaHBjeTVvWldsbmFIUTdYRzVjYmlBZ0lDQm1iM0lnS0d4bGRDQnBQVEE3YVR4MGFHbHpMbk5zYVdSbGNuTXViR1Z1WjNSb08ya3JLeWtnZTF4dUlDQWdJQ0FnZEdocGN5NXpiR2xrWlhKelcybGRMbkpsYzJsNlpTaHpiR2xrWlhKWGFXUjBhQ3h6Ykdsa1pYSklaV2xuYUhRcE8xeHVJQ0FnSUNBZ2RHaHBjeTV6Ykdsa1pYSnpXMmxkTG1OMWMzUnZiVk4wZVd4bEtDazdYRzRnSUNBZ2ZWeHVYRzVjYmlBZ2ZWeHVYRzRnSUhWd1pHRjBaU2hwYm1SbGVDeDJZV3gxWlNrZ2UxeHVJQ0FnSUhSb2FYTXVaVzFwZENnblkyaGhibWRsSnl4N1hHNGdJQ0FnSUNBbmFXNWtaWGduT2lCcGJtUmxlQ3hjYmlBZ0lDQWdJQ2QyWVd4MVpTYzZJSFpoYkhWbFhHNGdJQ0FnZlNrN1hHNGdJSDFjYmx4dUlDQmhaR1JVYjNWamFFeHBjM1JsYm1WeWN5Z3BJSHRjYmx4dUlDQWdJSFJvYVhNdWNISmxRMnhwWTJzZ1BTQjBhR2x6TG5CeVpVMXZkbVVnUFNCMGFHbHpMbkJ5WlZKbGJHVmhjMlVnUFNBb0tTQTlQaUI3ZlR0Y2JpQWdJQ0IwYUdsekxtTnNhV05ySUQwZ2RHaHBjeTV0YjNabElEMGdkR2hwY3k1eVpXeGxZWE5sSUQwZ0tDa2dQVDRnZTMwN1hHNGdJQ0FnZEdocGN5NXdjbVZVYjNWamFDQTlJSFJvYVhNdWNISmxWRzkxWTJoTmIzWmxJRDBnZEdocGN5NXdjbVZVYjNWamFGSmxiR1ZoYzJVZ1BTQW9LU0E5UGlCN2ZUdGNiaUFnSUNCMGFHbHpMblJ2ZFdOb0lEMGdkR2hwY3k1MGIzVmphRTF2ZG1VZ1BTQjBhR2x6TG5SdmRXTm9VbVZzWldGelpTQTlJQ2dwSUQwK0lIdDlPMXh1WEc0Z0lDQWdkR2hwY3k1amRYSnlaVzUwUld4bGJXVnVkQ0E5SUdaaGJITmxPMXh1WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG1Ga1pFVjJaVzUwVEdsemRHVnVaWElvSjNSdmRXTm9jM1JoY25RbkxDQW9aU2tnUFQ0Z2UxeHVJQ0FnSUNBZ2JHVjBJR1ZzWlcxbGJuUWdQU0JrYjJOMWJXVnVkQzVsYkdWdFpXNTBSbkp2YlZCdmFXNTBLR1V1ZEdGeVoyVjBWRzkxWTJobGMxc3dYUzVqYkdsbGJuUllMR1V1ZEdGeVoyVjBWRzkxWTJobGMxc3dYUzVqYkdsbGJuUlpLVHRjYmlBZ0lDQWdJR3hsZENCemJHbGtaWElnUFNCMGFHbHpMbk5zYVdSbGNuTmJaV3hsYldWdWRDNXBibVJsZUYwN1hHNGdJQ0FnSUNCcFppQW9JWE5zYVdSbGNpNXZabVp6WlhRcElIdGNiaUFnSUNBZ0lDQWdjMnhwWkdWeUxtOW1abk5sZENBOUlHUnZiUzVtYVc1a1VHOXphWFJwYjI0b2MyeHBaR1Z5TG1Wc1pXMWxiblFwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYzJ4cFpHVnlMbTF2ZFhObElEMGdaRzl0TG14dlkyRjBaVTF2ZFhObEtHVXNjMnhwWkdWeUxtOW1abk5sZENrN1hHNGdJQ0FnSUNCemJHbGtaWEl1Wkc5M2JpZ3BPMXh1SUNBZ0lDQWdkR2hwY3k1amRYSnlaVzUwUld4bGJXVnVkQ0E5SUdWc1pXMWxiblF1YVc1a1pYZzdYRzRnSUNBZ0lDQmxMbkJ5WlhabGJuUkVaV1poZFd4MEtDazdYRzRnSUNBZ0lDQmxMbk4wYjNCUWNtOXdZV2RoZEdsdmJpZ3BPMXh1SUNBZ0lIMHBPMXh1WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG1Ga1pFVjJaVzUwVEdsemRHVnVaWElvSjNSdmRXTm9iVzkyWlNjc0lDaGxLU0E5UGlCN1hHNGdJQ0FnSUNCc1pYUWdaV3hsYldWdWRDQTlJR1J2WTNWdFpXNTBMbVZzWlcxbGJuUkdjbTl0VUc5cGJuUW9aUzUwWVhKblpYUlViM1ZqYUdWeld6QmRMbU5zYVdWdWRGZ3NaUzUwWVhKblpYUlViM1ZqYUdWeld6QmRMbU5zYVdWdWRGa3BPMXh1SUNBZ0lDQWdiR1YwSUhOc2FXUmxjaUE5SUhSb2FYTXVjMnhwWkdWeWMxdGxiR1Z0Wlc1MExtbHVaR1Y0WFR0Y2JpQWdJQ0FnSUdsbUlDZ2hjMnhwWkdWeUxtOW1abk5sZENrZ2UxeHVJQ0FnSUNBZ0lDQnpiR2xrWlhJdWIyWm1jMlYwSUQwZ1pHOXRMbVpwYm1SUWIzTnBkR2x2YmloemJHbGtaWEl1Wld4bGJXVnVkQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0J6Ykdsa1pYSXViVzkxYzJVZ1BTQmtiMjB1Ykc5allYUmxUVzkxYzJVb1pTeHpiR2xrWlhJdWIyWm1jMlYwS1R0Y2JpQWdJQ0FnSUdsbUlDaGxiR1Z0Wlc1MExtbHVaR1Y0SVQwOWRHaHBjeTVqZFhKeVpXNTBSV3hsYldWdWRDa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTVqZFhKeVpXNTBSV3hsYldWdWRDQStQU0F3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdiR1YwSUhCaGMzUnpiR2xrWlhJZ1BTQjBhR2x6TG5Oc2FXUmxjbk5iZEdocGN5NWpkWEp5Wlc1MFJXeGxiV1Z1ZEYwN1hHNGdJQ0FnSUNBZ0lDQWdjR0Z6ZEhOc2FXUmxjaTUxY0NncE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSE5zYVdSbGNpNWtiM2R1S0NrN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCemJHbGtaWEl1YzJ4cFpHVW9LVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSFJvYVhNdVkzVnljbVZ1ZEVWc1pXMWxiblFnUFNCbGJHVnRaVzUwTG1sdVpHVjRPMXh1SUNBZ0lDQWdaUzV3Y21WMlpXNTBSR1ZtWVhWc2RDZ3BPMXh1SUNBZ0lDQWdaUzV6ZEc5d1VISnZjR0ZuWVhScGIyNG9LVHRjYmlBZ0lDQjlLVHRjYmx4dUlDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1aFpHUkZkbVZ1ZEV4cGMzUmxibVZ5S0NkMGIzVmphR1Z1WkNjc0lDaGxLU0E5UGlCN1hHNGdJQ0FnSUNBdkx5QnVieUIwYjNWamFHVnpJSFJ2SUdOaGJHTjFiR0YwWlNCaVpXTmhkWE5sSUc1dmJtVWdjbVZ0WVdsdWFXNW5YRzRnSUNBZ0lDQnNaWFFnYzJ4cFpHVnlJRDBnZEdocGN5NXpiR2xrWlhKelczUm9hWE11WTNWeWNtVnVkRVZzWlcxbGJuUmRPMXh1SUNBZ0lDQWdjMnhwWkdWeUxuVndLQ2s3WEc0Z0lDQWdJQ0IwYUdsekxtbHVkR1Z5WVdOMGFXNW5JRDBnWm1Gc2MyVTdYRzRnSUNBZ0lDQjBhR2x6TG1OMWNuSmxiblJGYkdWdFpXNTBJRDBnWm1Gc2MyVTdYRzRnSUNBZ0lDQmxMbkJ5WlhabGJuUkVaV1poZFd4MEtDazdYRzRnSUNBZ0lDQmxMbk4wYjNCUWNtOXdZV2RoZEdsdmJpZ3BPMXh1SUNBZ0lIMHBPMXh1WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnUjJWMElHOXlJSE5sZENCMGFHVWdiblZ0WW1WeUlHOW1JSE5zYVdSbGNuTmNiaUFnUUhSNWNHVWdlMDUxYldKbGNuMWNiaUFnS2k5Y2JpQWdaMlYwSUc1MWJXSmxjazltVTJ4cFpHVnljeWdwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1emJHbGtaWEp6TG14bGJtZDBhRHRjYmlBZ2ZWeHVYRzRnSUhObGRDQnVkVzFpWlhKUFpsTnNhV1JsY25Nb2Rpa2dlMXh1SUNBZ0lHbG1JQ2gyUFQwOWRHaHBjeTV6Ykdsa1pYSnpMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUgxY2JpQWdJQ0IwYUdsekxuTnNhV1JsY25NdVptOXlSV0ZqYUNnb2MyeHBaR1Z5S1QwK2UxeHVJQ0FnSUNBZ2MyeHBaR1Z5TG1SbGMzUnliM2tvS1R0Y2JpQWdJQ0I5S1R0Y2JpQWdJQ0IwYUdsekxtVnRjSFI1S0NrN1hHNGdJQ0FnZEdocGN5NWZiblZ0WW1WeVQyWlRiR2xrWlhKeklEMGdkanRjYmlBZ0lDQjBhR2x6TG1KMWFXeGtTVzUwWlhKbVlXTmxLQ2s3WEc0Z0lIMWNibHh1WEc1Y2JpQWdMeW9xWEc0Z0lFeHZkMlZ5SUd4cGJXbDBJRzltSUhSb1pTQnRkV3gwYVhOc2FXUmxjaWR6SUc5MWRIQjFkQ0J5WVc1blpWeHVJQ0JBZEhsd1pTQjdiblZ0WW1WeWZWeHVJQ0JBWlhoaGJYQnNaU0J0ZFd4MGFYTnNhV1JsY2k1dGFXNGdQU0F4TURBd08xeHVJQ0FxTDF4dUlDQm5aWFFnYldsdUtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbk5zYVdSbGNuTmJNRjB1YldsdU8xeHVJQ0I5WEc0Z0lITmxkQ0J0YVc0b2Rpa2dlMXh1SUNBZ0lIUm9hWE11YzJ4cFpHVnljeTVtYjNKRllXTm9LQ2h6Ykdsa1pYSXBQVDU3WEc0Z0lDQWdJQ0J6Ykdsa1pYSXViV2x1SUQwZ2RqdGNiaUFnSUNCOUtUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQlZjSEJsY2lCc2FXMXBkQ0J2WmlCMGFHVWdiWFZzZEdsemJHbGtaWEluY3lCdmRYUndkWFFnY21GdVoyVmNiaUFnUUhSNWNHVWdlMjUxYldKbGNuMWNiaUFnUUdWNFlXMXdiR1VnYlhWc2RHbHpiR2xrWlhJdWJXRjRJRDBnTVRBd01EdGNiaUFnS2k5Y2JpQWdaMlYwSUcxaGVDZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTV6Ykdsa1pYSnpXekJkTG0xaGVEdGNiaUFnZlZ4dUlDQnpaWFFnYldGNEtIWXBJSHRjYmlBZ0lDQjBhR2x6TG5Oc2FXUmxjbk11Wm05eVJXRmphQ2dvYzJ4cFpHVnlLVDArZTF4dUlDQWdJQ0FnYzJ4cFpHVnlMbTFoZUNBOUlIWTdYRzRnSUNBZ2ZTazdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdWR2hsSUdsdVkzSmxiV1Z1ZENCMGFHRjBJSFJvWlNCdGRXeDBhWE5zYVdSbGNpZHpJSFpoYkhWbElHTm9ZVzVuWlhNZ1lua3VYRzRnSUVCMGVYQmxJSHR1ZFcxaVpYSjlYRzRnSUVCbGVHRnRjR3hsSUcxMWJIUnBjMnhwWkdWeUxuTjBaWEFnUFNBMU8xeHVJQ0FxTDF4dUlDQm5aWFFnYzNSbGNDZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTV6Ykdsa1pYSnpXekJkTG5OMFpYQTdYRzRnSUgxY2JpQWdjMlYwSUhOMFpYQW9kaWtnZTF4dUlDQWdJSFJvYVhNdWMyeHBaR1Z5Y3k1bWIzSkZZV05vS0NoemJHbGtaWElwUFQ1N1hHNGdJQ0FnSUNCemJHbGtaWEl1YzNSbGNDQTlJSFk3WEc0Z0lDQWdmU2s3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnVTJWMElIUm9aU0IyWVd4MVpTQnZaaUJoYmlCcGJtUnBkbWxrZFdGc0lITnNhV1JsY2x4dUlDQkFjR0Z5WVcwZ2FXNWtaWGdnZTI1MWJXSmxjbjBnVTJ4cFpHVnlJR2x1WkdWNFhHNGdJRUJ3WVhKaGJTQjJZV3gxWlNCN2JuVnRZbVZ5ZlNCT1pYY2djMnhwWkdWeUlIWmhiSFZsWEc0Z0lFQmxlR0Z0Y0d4bFhHNGdJQzh2SUZObGRDQjBhR1VnWm1seWMzUWdjMnhwWkdWeUlIUnZJSFpoYkhWbElEQXVOVnh1SUNCdGRXeDBhWE5zYVdSbGNpNXpaWFJUYkdsa1pYSW9NQ3d3TGpVcFhHNGdJQ292WEc0Z0lITmxkRk5zYVdSbGNpaHBibVJsZUN4MllXeDFaU2tnZTF4dUlDQWdJSFJvYVhNdWMyeHBaR1Z5YzF0cGJtUmxlRjB1ZG1Gc2RXVWdQU0IyWVd4MVpUdGNiaUFnSUNCMGFHbHpMbVZ0YVhRb0oyTm9ZVzVuWlNjc2UxeHVJQ0FnSUNBZ0oybHVaR1Y0SnpvZ2FXNWtaWGdzWEc0Z0lDQWdJQ0FuZG1Gc2RXVW5PaUIyWVd4MVpWeHVJQ0FnSUgwcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lGTmxkQ0IwYUdVZ2RtRnNkV1VnYjJZZ1lXeHNJSE5zYVdSbGNuTWdZWFFnYjI1alpTNGdTV1lnZEdobElITnBlbVVnYjJZZ2RHaGxJR2x1Y0hWMElHRnljbUY1SUdSdlpYTWdibTkwSUcxaGRHTm9JSFJvWlNCamRYSnlaVzUwSUc1MWJXSmxjaUJ2WmlCemJHbGtaWEp6TENCMGFHVWdkbUZzZFdVZ1lYSnlZWGtnZDJsc2JDQnlaWEJsWVhRZ2RXNTBhV3dnWVd4c0lITnNhV1JsY25NZ2FHRjJaU0JpWldWdUlITmxkQzRnU1M1bExpQmhiaUJwYm5CMWRDQmhjbkpoZVNCdlppQnNaVzVuZEdnZ01TQjNhV3hzSUhObGRDQmhiR3dnYzJ4cFpHVnljeUIwYnlCMGFHRjBJSFpoYkhWbExseHVJQ0JBY0dGeVlXMGdkbUZzZFdWeklIdEJjbkpoZVgwZ1FXeHNJSE5zYVdSbGNpQjJZV3gxWlhOY2JpQWdRR1Y0WVcxd2JHVmNiaUFnYlhWc2RHbHpiR2xrWlhJdWMyVjBRV3hzVTJ4cFpHVnljeWhiTUM0eUxEQXVNeXd3TGpRc01DNDFMREF1TmwwcFhHNGdJQ292WEc0Z0lITmxkRUZzYkZOc2FXUmxjbk1vZG1Gc2RXVnpLU0I3WEc0Z0lDQWdkR2hwY3k1MllXeDFaWE1nUFNCMllXeDFaWE03WEc0Z0lDQWdkR2hwY3k1emJHbGtaWEp6TG1admNrVmhZMmdvS0hOc2FXUmxjaXhwS1QwK2UxeHVJQ0FnSUNBZ2MyeHBaR1Z5TG5aaGJIVmxJRDBnZG1Gc2RXVnpXMmtsZG1Gc2RXVnpMbXhsYm1kMGFGMDdYRzRnSUNBZ0lDQjBhR2x6TG1WdGFYUW9KMk5vWVc1blpTY3NlMXh1SUNBZ0lDQWdJQ0FuYVc1a1pYZ25PaUJwTEZ4dUlDQWdJQ0FnSUNBbmRtRnNkV1VuT2lCemJHbGtaWEl1ZG1Gc2RXVmNiaUFnSUNBZ0lIMHBPMXh1SUNBZ0lIMHBPMXh1SUNCOVhHNWNibjFjYmx4dVhHNWNiaTh2SUZkRlFsQkJRMHNnUms5UFZFVlNJQzh2WEc0dkx5QXVMMzR2YW5Ob2FXNTBMV3h2WVdSbGNpRXVMMnhwWWk5cGJuUmxjbVpoWTJWekwyMTFiSFJwYzJ4cFpHVnlMbXB6SWl3aUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1c1pYUWdjM1puSUQwZ2NtVnhkV2x5WlNnbkxpNHZkWFJwYkM5emRtY25LVHRjYm14bGRDQkpiblJsY21aaFkyVWdQU0J5WlhGMWFYSmxLQ2N1TGk5amIzSmxMMmx1ZEdWeVptRmpaU2NwTzF4dWJHVjBJRk4wWlhBZ1BTQnlaWEYxYVhKbEtDY3VMaTl0YjJSbGJITXZjM1JsY0NjcE8xeHVhVzF3YjNKMElDb2dZWE1nU1c1MFpYSmhZM1JwYjI0Z1puSnZiU0FuTGk0dmRYUnBiQzlwYm5SbGNtRmpkR2x2YmljN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHTnNZWE56SUZOc2FXUmxjbFJsYlhCc1lYUmxJR1Y0ZEdWdVpITWdTVzUwWlhKbVlXTmxJSHRjYmx4dUlDQmpiMjV6ZEhKMVkzUnZjaWhoY21kekxHOXdkR2x2Ym5Nc1pHVm1ZWFZzZEhNcElIdGNibHh1SUNBZ0lITjFjR1Z5S0dGeVozTXNiM0IwYVc5dWN5eGtaV1poZFd4MGN5azdYRzVjYmlBZ0lDQjBhR2x6TG05eWFXVnVkR0YwYVc5dUlEMGdkR2hwY3k1elpYUjBhVzVuY3k1dmNtbGxiblJoZEdsdmJqdGNibHh1SUNBdkx5QWdkR2hwY3k1dGIyUmxJRDBnZEdocGN5NXpaWFIwYVc1bmN5NXRiMlJsTzF4dVhHNGdJQ0FnZEdocGN5NW9ZWE5MYm05aUlEMGdkR2hwY3k1elpYUjBhVzVuY3k1b1lYTkxibTlpTzF4dVhHNGdJQ0FnTHk4Z2RHaHBjeTV6ZEdWd0lITm9iM1ZzWkNCbGRtVnVkSFZoYkd4NUlHSmxJR2RsZEM5elpYUmNiaUFnSUNBdkx5QjFjR1JoZEdsdVp5QnBkQ0IzYVd4c0lIVndaR0YwWlNCMGFHVWdYM1poYkhWbElITjBaWEFnYlc5a1pXeGNiaUFnTHk4Z0lIUm9hWE11YzNSbGNDQTlJSFJvYVhNdWMyVjBkR2x1WjNNdWMzUmxjRHNnTHk4Z1pteHZZWFJjYmx4dUlDQWdJSFJvYVhNdVgzWmhiSFZsSUQwZ2JtVjNJRk4wWlhBb2RHaHBjeTV6WlhSMGFXNW5jeTV6WTJGc1pWc3dYU3dnZEdocGN5NXpaWFIwYVc1bmN5NXpZMkZzWlZzeFhTd2dkR2hwY3k1elpYUjBhVzVuY3k1emRHVndMQ0IwYUdsekxuTmxkSFJwYm1kekxuWmhiSFZsS1R0Y2JseHVJQ0FnSUhSb2FYTXVhVzVwZENncE8xeHVYRzRnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiaUE5SUc1bGR5QkpiblJsY21GamRHbHZiaTVJWVc1a2JHVW9kR2hwY3k1elpYUjBhVzVuY3k1dGIyUmxMSFJvYVhNdWIzSnBaVzUwWVhScGIyNHNXekFzZEdocGN5NTNhV1IwYUYwc1czUm9hWE11YUdWcFoyaDBMREJkS1R0Y2JpQWdJQ0IwYUdsekxuQnZjMmwwYVc5dUxuWmhiSFZsSUQwZ2RHaHBjeTVmZG1Gc2RXVXVibTl5YldGc2FYcGxaRHRjYmx4dUlDQWdJSFJvYVhNdWRtRnNkV1VnUFNCMGFHbHpMbDkyWVd4MVpTNTJZV3gxWlR0Y2JseHVJQ0FnSUhSb2FYTXVaVzFwZENnblkyaGhibWRsSnl4MGFHbHpMblpoYkhWbEtUdGNibHh1SUNCOVhHNWNiaUFnWW5WcGJHUkpiblJsY21aaFkyVW9LU0I3WEc1Y2JpQWdJQ0IwYUdsekxtSmhjaUE5SUhOMlp5NWpjbVZoZEdVb0ozSmxZM1FuS1R0Y2JpQWdJQ0IwYUdsekxtWnBiR3hpWVhJZ1BTQnpkbWN1WTNKbFlYUmxLQ2R5WldOMEp5azdYRzRnSUNBZ2RHaHBjeTVyYm05aUlEMGdjM1puTG1OeVpXRjBaU2duWTJseVkyeGxKeWs3WEc1Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdVlYQndaVzVrUTJocGJHUW9kR2hwY3k1aVlYSXBPMXh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkQzVoY0hCbGJtUkRhR2xzWkNoMGFHbHpMbVpwYkd4aVlYSXBPMXh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkQzVoY0hCbGJtUkRhR2xzWkNoMGFHbHpMbXR1YjJJcE8xeHVYRzRnSUNBZ2RHaHBjeTV6YVhwbFNXNTBaWEptWVdObEtDazdYRzVjYmx4dVhHNGdJSDFjYmx4dUlDQnphWHBsU1c1MFpYSm1ZV05sS0NrZ2UxeHVYRzVjYmlBZ0lDQnBaaUFvSVhSb2FYTXVjMlYwZEdsdVozTXViM0pwWlc1MFlYUnBiMjRwSUh0Y2JpQWdJQ0FnSUdsbUlDaDBhR2x6TG5kcFpIUm9JRHdnZEdocGN5NW9aV2xuYUhRcElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1dmNtbGxiblJoZEdsdmJpQTlJQ2QyWlhKMGFXTmhiQ2M3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0IwYUdsekxtOXlhV1Z1ZEdGMGFXOXVJRDBnSjJodmNtbDZiMjUwWVd3bk8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUd4bGRDQjRMQ0I1TENCM0xDQm9MQ0JpWVhKUFptWnpaWFFzSUdOdmNtNWxjbEpoWkdsMWN6dGNiaUFnSUNCMGFHbHpMbXR1YjJKRVlYUmhJRDBnZTF4dUlDQWdJQ0FnYkdWMlpXdzZJREFzWEc0Z0lDQWdJQ0J5T2lBd1hHNGdJQ0FnZlR0Y2JseHVJQ0FnSUdsbUlDaDBhR2x6TG05eWFXVnVkR0YwYVc5dUlEMDlQU0FuZG1WeWRHbGpZV3duS1NCN1hHNGdJQ0FnSUNCMGFHbHpMblJvYVdOcmJtVnpjeUE5SUhSb2FYTXVkMmxrZEdnZ0x5QXlPMXh1SUNBZ0lGeDBlQ0E5SUhSb2FYTXVkMmxrZEdndk1qdGNiaUFnSUNCY2RIa2dQU0F3TzF4dUlDQWdJRngwZHlBOUlIUm9hWE11ZEdocFkydHVaWE56TzF4dUlDQWdJRngwYUNBOUlIUm9hWE11YUdWcFoyaDBPMXh1SUNBZ0lDQWdkR2hwY3k1cmJtOWlSR0YwWVM1eUlEMGdkR2hwY3k1MGFHbGphMjVsYzNNZ0tpQXdMamc3WEc0Z0lDQWdYSFIwYUdsekxtdHViMkpFWVhSaExteGxkbVZzSUQwZ2FDMTBhR2x6TG01dmNtMWhiR2w2WldRcWFEdGNiaUFnSUNBZ0lHSmhjazltWm5ObGRDQTlJQ2QwY21GdWMyeGhkR1VvSnl0MGFHbHpMblJvYVdOcmJtVnpjeW9vTFRFcEx6SXJKeXd3S1NjN1hHNGdJQ0FnSUNCamIzSnVaWEpTWVdScGRYTWdQU0IzTHpJN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSFJvYVhNdWRHaHBZMnR1WlhOeklEMGdkR2hwY3k1b1pXbG5hSFFnTHlBeU8xeHVJQ0FnSUZ4MGVDQTlJREE3WEc0Z0lDQWdYSFI1SUQwZ2RHaHBjeTVvWldsbmFIUXZNanRjYmlBZ0lDQmNkSGNnUFNCMGFHbHpMbmRwWkhSb08xeHVJQ0FnSUZ4MGFDQTlJSFJvYVhNdWRHaHBZMnR1WlhOek8xeHVJQ0FnSUNBZ2RHaHBjeTVyYm05aVJHRjBZUzV5SUQwZ2RHaHBjeTUwYUdsamEyNWxjM01nS2lBd0xqZzdYRzRnSUNBZ1hIUjBhR2x6TG10dWIySkVZWFJoTG14bGRtVnNJRDBnZEdocGN5NXViM0p0WVd4cGVtVmtLbmM3WEc0Z0lDQWdJQ0JpWVhKUFptWnpaWFFnUFNBbmRISmhibk5zWVhSbEtEQXNKeXQwYUdsekxuUm9hV05yYm1WemN5b29MVEVwTHpJckp5a25PMXh1SUNBZ0lDQWdZMjl5Ym1WeVVtRmthWFZ6SUQwZ2FDOHlPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11WW1GeUxuTmxkRUYwZEhKcFluVjBaU2duZUNjc2VDazdYRzRnSUNBZ2RHaHBjeTVpWVhJdWMyVjBRWFIwY21saWRYUmxLQ2Q1Snl4NUtUdGNiaUFnSUNCMGFHbHpMbUpoY2k1elpYUkJkSFJ5YVdKMWRHVW9KM1J5WVc1elptOXliU2NzWW1GeVQyWm1jMlYwS1R0Y2JpQWdJQ0IwYUdsekxtSmhjaTV6WlhSQmRIUnlhV0oxZEdVb0ozSjRKeXhqYjNKdVpYSlNZV1JwZFhNcE95QXZMeUJqYjNKdVpYSWdjbUZrYVhWelhHNGdJQ0FnZEdocGN5NWlZWEl1YzJWMFFYUjBjbWxpZFhSbEtDZHllU2NzWTI5eWJtVnlVbUZrYVhWektUdGNiaUFnSUNCMGFHbHpMbUpoY2k1elpYUkJkSFJ5YVdKMWRHVW9KM2RwWkhSb0p5eDNLVHRjYmlBZ0lDQjBhR2x6TG1KaGNpNXpaWFJCZEhSeWFXSjFkR1VvSjJobGFXZG9kQ2NzYUNrN1hHNWNiaUFnSUNCcFppQW9kR2hwY3k1dmNtbGxiblJoZEdsdmJpQTlQVDBnSjNabGNuUnBZMkZzSnlrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVtYVd4c1ltRnlMbk5sZEVGMGRISnBZblYwWlNnbmVDY3NlQ2s3WEc0Z0lDQWdJQ0IwYUdsekxtWnBiR3hpWVhJdWMyVjBRWFIwY21saWRYUmxLQ2Q1Snl4MGFHbHpMbXR1YjJKRVlYUmhMbXhsZG1Wc0tUdGNiaUFnSUNBZ0lIUm9hWE11Wm1sc2JHSmhjaTV6WlhSQmRIUnlhV0oxZEdVb0ozZHBaSFJvSnl4M0tUdGNiaUFnSUNBZ0lIUm9hWE11Wm1sc2JHSmhjaTV6WlhSQmRIUnlhV0oxZEdVb0oyaGxhV2RvZENjc2FDMTBhR2x6TG10dWIySkVZWFJoTG14bGRtVnNLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVtYVd4c1ltRnlMbk5sZEVGMGRISnBZblYwWlNnbmVDY3NNQ2s3WEc0Z0lDQWdJQ0IwYUdsekxtWnBiR3hpWVhJdWMyVjBRWFIwY21saWRYUmxLQ2Q1Snl4NUtUdGNiaUFnSUNBZ0lIUm9hWE11Wm1sc2JHSmhjaTV6WlhSQmRIUnlhV0oxZEdVb0ozZHBaSFJvSnl4MGFHbHpMbXR1YjJKRVlYUmhMbXhsZG1Wc0tUdGNiaUFnSUNBZ0lIUm9hWE11Wm1sc2JHSmhjaTV6WlhSQmRIUnlhV0oxZEdVb0oyaGxhV2RvZENjc2FDazdYRzRnSUNBZ2ZWeHVJQ0FnSUhSb2FYTXVabWxzYkdKaGNpNXpaWFJCZEhSeWFXSjFkR1VvSjNSeVlXNXpabTl5YlNjc1ltRnlUMlptYzJWMEtUdGNiaUFnSUNCMGFHbHpMbVpwYkd4aVlYSXVjMlYwUVhSMGNtbGlkWFJsS0NkeWVDY3NZMjl5Ym1WeVVtRmthWFZ6S1R0Y2JpQWdJQ0IwYUdsekxtWnBiR3hpWVhJdWMyVjBRWFIwY21saWRYUmxLQ2R5ZVNjc1kyOXlibVZ5VW1Ga2FYVnpLVHRjYmx4dUlDQWdJR2xtSUNoMGFHbHpMbTl5YVdWdWRHRjBhVzl1SUQwOVBTQW5kbVZ5ZEdsallXd25LU0I3WEc0Z0lDQWdJQ0IwYUdsekxtdHViMkl1YzJWMFFYUjBjbWxpZFhSbEtDZGplQ2NzZUNrN1hHNGdJQ0FnSUNCMGFHbHpMbXR1YjJJdWMyVjBRWFIwY21saWRYUmxLQ2RqZVNjc2RHaHBjeTVyYm05aVJHRjBZUzVzWlhabGJDazdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhSb2FYTXVhMjV2WWk1elpYUkJkSFJ5YVdKMWRHVW9KMk40Snl4MGFHbHpMbXR1YjJKRVlYUmhMbXhsZG1Wc0tUdGNiaUFnSUNBZ0lIUm9hWE11YTI1dllpNXpaWFJCZEhSeWFXSjFkR1VvSjJONUp5eDVLVHRjYmlBZ0lDQjlYRzRnSUNBZ2RHaHBjeTVyYm05aUxuTmxkRUYwZEhKcFluVjBaU2duY2ljc2RHaHBjeTVyYm05aVJHRjBZUzV5S1R0Y2JseHVYRzRnSUNBZ2FXWWdLSFJvYVhNdWNHOXphWFJwYjI0cElIdGNiaUFnSUNBZ0lIUm9hWE11Y0c5emFYUnBiMjR1Y21WemFYcGxLRnN3TEhSb2FYTXVkMmxrZEdoZExGdDBhR2x6TG1obGFXZG9kQ3d3WFNrN1hHNGdJQ0FnZlZ4dVhHNGdJSDFjYmx4dUlDQmpiMnh2Y2tsdWRHVnlabUZqWlNncElIdGNibHh1SUNBZ0lIUm9hWE11WW1GeUxuTmxkRUYwZEhKcFluVjBaU2duWm1sc2JDY3NJSFJvYVhNdVkyOXNiM0p6TG1acGJHd3BPMXh1SUNBZ0lIUm9hWE11Wm1sc2JHSmhjaTV6WlhSQmRIUnlhV0oxZEdVb0oyWnBiR3duTENCMGFHbHpMbU52Ykc5eWN5NWhZMk5sYm5RcE8xeHVJQ0FnSUhSb2FYTXVhMjV2WWk1elpYUkJkSFJ5YVdKMWRHVW9KMlpwYkd3bkxDQjBhR2x6TG1OdmJHOXljeTVoWTJObGJuUXBPMXh1SUNBZ0lHbG1JQ2doZEdocGN5NW9ZWE5MYm05aUtTQjdYRzRnSUNBZ0lDQjBhR2x6TG10dWIySXVjMlYwUVhSMGNtbGlkWFJsS0NkbWFXeHNKeXduYm05dVpTY3BPMXh1SUNBZ0lIMWNibHh1SUNCOVhHNWNiaUFnY21WdVpHVnlLQ2tnZTF4dUlDQWdJR2xtSUNnaGRHaHBjeTVqYkdsamEyVmtLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtdHViMkpFWVhSaExuSWdQU0IwYUdsekxuUm9hV05yYm1WemN5b3dMamMxTzF4dUlDQWdJSDFjYmlBZ0lDQjBhR2x6TG10dWIySXVjMlYwUVhSMGNtbGlkWFJsS0NkeUp5eDBhR2x6TG10dWIySkVZWFJoTG5JcE8xeHVYRzRnSUNBZ2FXWWdLSFJvYVhNdWIzSnBaVzUwWVhScGIyNGdQVDA5SUNkMlpYSjBhV05oYkNjcElIdGNiaUFnSUNBZ0lDQjBhR2x6TG10dWIySkVZWFJoTG14bGRtVnNJRDBnZEdocGN5NWZkbUZzZFdVdWJtOXliV0ZzYVhwbFpDcDBhR2x6TG1obGFXZG9kRHRjYmlBZ0lDQWdJQ0IwYUdsekxtdHViMkl1YzJWMFFYUjBjbWxpZFhSbEtDZGplU2NzZEdocGN5NW9aV2xuYUhRZ0xTQjBhR2x6TG10dWIySkVZWFJoTG14bGRtVnNLVHRjYmlBZ0lDQWdJQ0IwYUdsekxtWnBiR3hpWVhJdWMyVjBRWFIwY21saWRYUmxLQ2Q1Snl4MGFHbHpMbWhsYVdkb2RDQXRJSFJvYVhNdWEyNXZZa1JoZEdFdWJHVjJaV3dwTzF4dUlDQWdJQ0FnSUhSb2FYTXVabWxzYkdKaGNpNXpaWFJCZEhSeWFXSjFkR1VvSjJobGFXZG9kQ2NzZEdocGN5NXJibTlpUkdGMFlTNXNaWFpsYkNrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0IwYUdsekxtdHViMkpFWVhSaExteGxkbVZzSUQwZ2RHaHBjeTVmZG1Gc2RXVXVibTl5YldGc2FYcGxaQ3AwYUdsekxuZHBaSFJvTzF4dUlDQWdJQ0FnSUhSb2FYTXVhMjV2WWk1elpYUkJkSFJ5YVdKMWRHVW9KMk40Snl4MGFHbHpMbXR1YjJKRVlYUmhMbXhsZG1Wc0tUdGNiaUFnSUNBZ0lDQjBhR2x6TG1acGJHeGlZWEl1YzJWMFFYUjBjbWxpZFhSbEtDZDRKeXd3S1R0Y2JpQWdJQ0FnSUNCMGFHbHpMbVpwYkd4aVlYSXVjMlYwUVhSMGNtbGlkWFJsS0NkM2FXUjBhQ2NzZEdocGN5NXJibTlpUkdGMFlTNXNaWFpsYkNrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ1pHOTNiaWdwSUh0Y2JpQWdJQ0IwYUdsekxtTnNhV05yWldRZ1BTQjBjblZsTzF4dUlDQWdJSFJvYVhNdWEyNXZZa1JoZEdFdWNpQTlJSFJvYVhNdWRHaHBZMnR1WlhOektqQXVPVHRjYmlBZ0lDQjBhR2x6TG5CdmMybDBhVzl1TG1GdVkyaHZjaUE5SUhSb2FYTXViVzkxYzJVN1hHNGdJQ0FnZEdocGN5NXpiR2xrWlNncE8xeHVJQ0I5WEc1Y2JpQWdjMnhwWkdVb0tTQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdVkyeHBZMnRsWkNrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiaTUxY0dSaGRHVW9kR2hwY3k1dGIzVnpaU2s3WEc0Z0lDQWdJQ0IwYUdsekxuWmhiSFZsSUQwZ2RHaHBjeTVmZG1Gc2RXVXVkWEJrWVhSbFRtOXliV0ZzS0NCMGFHbHpMbkJ2YzJsMGFXOXVMblpoYkhWbElDazdYRzRnSUNBZ0lDQjBhR2x6TG1WdGFYUW9KMk5vWVc1blpTY3NkR2hwY3k1MllXeDFaU2s3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnZFhBb0tTQjdYRzRnSUNBZ2RHaHBjeTVqYkdsamEyVmtJRDBnWm1Gc2MyVTdYRzRnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmlBZ2ZWeHVYRzRnSUdkbGRDQnViM0p0WVd4cGVtVmtLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TGw5MllXeDFaUzV1YjNKdFlXeHBlbVZrTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUZSb1pTQnpiR2xrWlhJbmN5QmpkWEp5Wlc1MElIWmhiSFZsTGlCSlppQnpaWFFnYldGdWRXRnNiSGtzSUhkcGJHd2dkWEJrWVhSbElIUm9aU0JwYm5SbGNtWmhZMlVnWVc1a0lIUnlhV2RuWlhJZ2RHaGxJRzkxZEhCMWRDQmxkbVZ1ZEM1Y2JpQWdRSFI1Y0dVZ2UyNTFiV0psY24xY2JpQWdRR1Y0WVcxd2JHVWdjMnhwWkdWeUxuWmhiSFZsSUQwZ01UQTdYRzRnSUNvdlhHNGdJR2RsZENCMllXeDFaU2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1ZmRtRnNkV1V1ZG1Gc2RXVTdYRzRnSUgxY2JpQWdjMlYwSUhaaGJIVmxLSFlwSUh0Y2JpQWdJQ0IwYUdsekxsOTJZV3gxWlM1MWNHUmhkR1VvZGlrN1hHNGdJQ0FnZEdocGN5NXdiM05wZEdsdmJpNTJZV3gxWlNBOUlIUm9hWE11WDNaaGJIVmxMbTV2Y20xaGJHbDZaV1E3WEc0Z0lDQWdkR2hwY3k1eVpXNWtaWElvS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNCTWIzZGxjaUJzYVcxcGRDQnZaaUIwYUdVZ2MyeHBaR1Z5Y3lkeklHOTFkSEIxZENCeVlXNW5aVnh1SUNCQWRIbHdaU0I3Ym5WdFltVnlmVnh1SUNCQVpYaGhiWEJzWlNCemJHbGtaWEl1YldsdUlEMGdNVEF3TUR0Y2JpQWdLaTljYmlBZ1oyVjBJRzFwYmlncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWZkbUZzZFdVdWJXbHVPMXh1SUNCOVhHNGdJSE5sZENCdGFXNG9kaWtnZTF4dUlDQWdJSFJvYVhNdVgzWmhiSFZsTG0xcGJpQTlJSFk3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnVlhCd1pYSWdiR2x0YVhRZ2IyWWdkR2hsSUhOc2FXUmxjaWR6SUc5MWRIQjFkQ0J5WVc1blpWeHVJQ0JBZEhsd1pTQjdiblZ0WW1WeWZWeHVJQ0JBWlhoaGJYQnNaU0J6Ykdsa1pYSXViV0Y0SUQwZ01UQXdNRHRjYmlBZ0tpOWNiaUFnWjJWMElHMWhlQ2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1ZmRtRnNkV1V1YldGNE8xeHVJQ0I5WEc0Z0lITmxkQ0J0WVhnb2Rpa2dlMXh1SUNBZ0lIUm9hWE11WDNaaGJIVmxMbTFoZUNBOUlIWTdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdWR2hsSUdsdVkzSmxiV1Z1ZENCMGFHRjBJSFJvWlNCemJHbGtaWEluY3lCMllXeDFaU0JqYUdGdVoyVnpJR0o1TGx4dUlDQkFkSGx3WlNCN2JuVnRZbVZ5ZlZ4dUlDQkFaWGhoYlhCc1pTQnpiR2xrWlhJdWMzUmxjQ0E5SURVN1hHNGdJQ292WEc0Z0lHZGxkQ0J6ZEdWd0tDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDkyWVd4MVpTNXpkR1Z3TzF4dUlDQjlYRzRnSUhObGRDQnpkR1Z3S0hZcElIdGNiaUFnSUNCMGFHbHpMbDkyWVd4MVpTNXpkR1Z3SUQwZ2RqdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQkJZbk52YkhWMFpTQnRiMlJsSUNoemJHbGtaWEluY3lCMllXeDFaU0JxZFcxd2N5QjBieUJ0YjNWelpTQmpiR2xqYXlCd2IzTnBkR2x2YmlrZ2IzSWdjbVZzWVhScGRtVWdiVzlrWlNBb2JXOTFjMlVnWkhKaFp5QmphR0Z1WjJWeklIWmhiSFZsSUhKbGJHRjBhWFpsSUhSdklHbDBjeUJqZFhKeVpXNTBJSEJ2YzJsMGFXOXVLUzRnUkdWbVlYVnNkRG9nWENKeVpXeGhkR2wyWlZ3aUxseHVJQ0JBZEhsd1pTQjdjM1J5YVc1bmZWeHVJQ0JBWlhoaGJYQnNaU0J6Ykdsa1pYSXViVzlrWlNBOUlGd2ljbVZzWVhScGRtVmNJanRjYmlBZ0tpOWNiaUFnWjJWMElHMXZaR1VvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWNHOXphWFJwYjI0dWJXOWtaVHRjYmlBZ2ZWeHVJQ0J6WlhRZ2JXOWtaU2gyS1NCN1hHNGdJQ0FnZEdocGN5NXdiM05wZEdsdmJpNXRiMlJsSUQwZ2RqdGNiaUFnZlZ4dVhHNWNibjFjYmx4dVhHNWNiaTh2SUZkRlFsQkJRMHNnUms5UFZFVlNJQzh2WEc0dkx5QXVMMzR2YW5Ob2FXNTBMV3h2WVdSbGNpRXVMMnhwWWk5amIyMXdiMjVsYm5SekwzTnNhV1JsY25SbGJYQnNZWFJsTG1weklpd2lKM1Z6WlNCemRISnBZM1FuTzF4dVhHNXNaWFFnYzNabklEMGdjbVZ4ZFdseVpTZ25MaTR2ZFhScGJDOXpkbWNuS1R0Y2JteGxkQ0J0WVhSb0lEMGdjbVZ4ZFdseVpTZ25MaTR2ZFhScGJDOXRZWFJvSnlrN1hHNXNaWFFnU1c1MFpYSm1ZV05sSUQwZ2NtVnhkV2x5WlNnbkxpNHZZMjl5WlM5cGJuUmxjbVpoWTJVbktUdGNibXhsZENCVGRHVndJRDBnY21WeGRXbHlaU2duTGk0dmJXOWtaV3h6TDNOMFpYQW5LVHRjYm1sdGNHOXlkQ0FxSUdGeklFbHVkR1Z5WVdOMGFXOXVJR1p5YjIwZ0p5NHVMM1YwYVd3dmFXNTBaWEpoWTNScGIyNG5PMXh1WEc0dktpcGNiaW9nVUdGdVhHNHFYRzRxSUVCa1pYTmpjbWx3ZEdsdmJpQlRkR1Z5Wlc4Z1kzSnZjM05tWVdSbGNpNWNiaXBjYmlvZ1FHUmxiVzhnUEhOd1lXNGdibVY0ZFhNdGRXazlYQ0p3WVc1Y0lqNDhMM053WVc0K1hHNHFYRzRxSUVCbGVHRnRjR3hsWEc0cUlIWmhjaUJ3WVc0Z1BTQnVaWGNnVG1WNGRYTXVVR0Z1S0NjamRHRnlaMlYwSnlsY2JpcGNiaW9nUUc5MWRIQjFkRnh1S2lCamFHRnVaMlZjYmlvZ1JtbHlaWE1nWVc1NUlIUnBiV1VnZEdobElHbHVkR1Z5Wm1GalpTZHpJSFpoYkhWbElHTm9ZVzVuWlhNdUlEeGljajVjYmlvZ1ZHaGxJR1YyWlc1MElHUmhkR0VnYVhNZ1lXNGdiMkpxWldOMElHTnZiblJoYVc1cGJtY2dkR2hsSUdsdWRHVnlabUZqWlNkeklEeHBQblpoYkhWbFBDOXBQaUFvTFRFZ2RHOGdNU2tzSUdGeklIZGxiR3dnWVhNZ1BHaytURHd2YVQ0Z1lXNWtJRHhwUGxJOEwyaytJR0Z0Y0d4cGRIVmtaU0IyWVd4MVpYTWdLREF0TVNrZ1ptOXlJR3hsWm5RZ1lXNWtJSEpwWjJoMElITndaV0ZyWlhKekxDQmpZV3hqZFd4aGRHVmtJR0o1SUdFZ2MzRjFZWEpsTFhKdmIzUWdZM0p2YzNObVlXUmxJR0ZzWjI5eWFYUm9iUzVjYmlwY2Jpb2dRRzkxZEhCMWRHVjRZVzF3YkdWY2Jpb2djR0Z1TG05dUtDZGphR0Z1WjJVbkxHWjFibU4wYVc5dUtIWXBJSHRjYmlvZ0lDQmpiMjV6YjJ4bExteHZaeWgyS1R0Y2Jpb2dmU2xjYmlwY2JpcGNiaW92WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdOc1lYTnpJRkJoYmlCbGVIUmxibVJ6SUVsdWRHVnlabUZqWlNCN1hHNWNiaUFnWTI5dWMzUnlkV04wYjNJb0tTQjdYRzVjYmlBZ0lDQnNaWFFnYjNCMGFXOXVjeUE5SUZzbmMyTmhiR1VuTENkMllXeDFaU2RkTzF4dVhHNGdJQ0FnYkdWMElHUmxabUYxYkhSeklEMGdlMXh1SUNBZ0lDQWdKM05wZW1Vbk9pQmJNVEl3TERJd1hTeGNiaUFnSUNBZ0lDZHZjbWxsYm5SaGRHbHZiaWM2SUNkb2IzSnBlbTl1ZEdGc0p5eGNiaUFnSUNBZ0lDZHRiMlJsSnpvZ0ozSmxiR0YwYVhabEp5eGNiaUFnSUNBZ0lDZHpZMkZzWlNjNklGc3RNU3d4WFN4Y2JpQWdJQ0FnSUNkemRHVndKem9nTUN4Y2JpQWdJQ0FnSUNkMllXeDFaU2M2SURBc1hHNGdJQ0FnSUNBbmFHRnpTMjV2WWljNklIUnlkV1ZjYmlBZ0lDQjlPMXh1WEc0Z0lDQWdjM1Z3WlhJb1lYSm5kVzFsYm5SekxHOXdkR2x2Ym5Nc1pHVm1ZWFZzZEhNcE8xeHVYRzRnSUNBZ2RHaHBjeTV2Y21sbGJuUmhkR2x2YmlBOUlIUm9hWE11YzJWMGRHbHVaM011YjNKcFpXNTBZWFJwYjI0N1hHNWNiaUFnSUNCMGFHbHpMbTF2WkdVZ1BTQjBhR2x6TG5ObGRIUnBibWR6TG0xdlpHVTdYRzVjYmlBZ0lDQjBhR2x6TG1oaGMwdHViMklnUFNCMGFHbHpMbk5sZEhScGJtZHpMbWhoYzB0dWIySTdYRzVjYmlBZ0lDQXZMeUIwYUdsekxuTjBaWEFnYzJodmRXeGtJR1YyWlc1MGRXRnNiSGtnWW1VZ1oyVjBMM05sZEZ4dUlDQWdJQzh2SUhWd1pHRjBhVzVuSUdsMElIZHBiR3dnZFhCa1lYUmxJSFJvWlNCZmRtRnNkV1VnYzNSbGNDQnRiMlJsYkZ4dUlDQWdJSFJvYVhNdWMzUmxjQ0E5SUhSb2FYTXVjMlYwZEdsdVozTXVjM1JsY0RzZ0x5OGdabXh2WVhSY2JseHVJQ0FnSUhSb2FYTXVYM1poYkhWbElEMGdibVYzSUZOMFpYQW9kR2hwY3k1elpYUjBhVzVuY3k1elkyRnNaVnN3WFN3Z2RHaHBjeTV6WlhSMGFXNW5jeTV6WTJGc1pWc3hYU3dnZEdocGN5NXpaWFIwYVc1bmN5NXpkR1Z3TENCMGFHbHpMbk5sZEhScGJtZHpMblpoYkhWbEtUdGNibHh1SUNBZ0lIUm9hWE11YVc1cGRDZ3BPMXh1WEc0Z0lDQWdkR2hwY3k1d2IzTnBkR2x2YmlBOUlHNWxkeUJKYm5SbGNtRmpkR2x2Ymk1SVlXNWtiR1VvZEdocGN5NXRiMlJsTEhSb2FYTXViM0pwWlc1MFlYUnBiMjRzV3pBc2RHaHBjeTUzYVdSMGFGMHNXM1JvYVhNdWFHVnBaMmgwTERCZEtUdGNiaUFnSUNCMGFHbHpMbkJ2YzJsMGFXOXVMblpoYkhWbElEMGdkR2hwY3k1ZmRtRnNkV1V1Ym05eWJXRnNhWHBsWkR0Y2JseHVJQ0FnSUhSb2FYTXVkbUZzZFdVZ1BTQjBhR2x6TGw5MllXeDFaUzUyWVd4MVpUdGNibHh1SUNBZ0lIUm9hWE11WlcxcGRDZ25ZMmhoYm1kbEp5eDBhR2x6TG5aaGJIVmxLVHRjYmx4dUlDQjlYRzVjYmlBZ1luVnBiR1JKYm5SbGNtWmhZMlVvS1NCN1hHNWNiaUFnSUNCMGFHbHpMbUpoY2lBOUlITjJaeTVqY21WaGRHVW9KM0psWTNRbktUdGNiaUFnSUNCMGFHbHpMbXR1YjJJZ1BTQnpkbWN1WTNKbFlYUmxLQ2RqYVhKamJHVW5LVHRjYmx4dUlDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1aGNIQmxibVJEYUdsc1pDaDBhR2x6TG1KaGNpazdYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbUZ3Y0dWdVpFTm9hV3hrS0hSb2FYTXVhMjV2WWlrN1hHNWNiaUFnZlZ4dVhHNGdJSE5wZW1WSmJuUmxjbVpoWTJVb0tTQjdYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NXdiM05wZEdsdmJpa2dlMXh1SUNBZ0lDQWdkR2hwY3k1d2IzTnBkR2x2Ymk1eVpYTnBlbVVvV3pBc2RHaHBjeTUzYVdSMGFGMHNXM1JvYVhNdWFHVnBaMmgwTERCZEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9kR2hwY3k1M2FXUjBhQ0E4SUhSb2FYTXVhR1ZwWjJoMEtTQjdYRzRnSUNBZ0lDQjBhR2x6TG05eWFXVnVkR0YwYVc5dUlEMGdKM1psY25ScFkyRnNKenRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV2Y21sbGJuUmhkR2x2YmlBOUlDZG9iM0pwZW05dWRHRnNKenRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnNaWFFnZUN3Z2VTd2dkeXdnYUN3Z1ltRnlUMlptYzJWMExDQmpiM0p1WlhKU1lXUnBkWE03WEc0Z0lDQWdkR2hwY3k1cmJtOWlSR0YwWVNBOUlIdGNiaUFnSUNBZ0lHeGxkbVZzT2lBd0xGeHVJQ0FnSUNBZ2Nqb2dNRnh1SUNBZ0lIMDdYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NXZjbWxsYm5SaGRHbHZiaUE5UFQwZ0ozWmxjblJwWTJGc0p5a2dlMXh1SUNBZ0lDQWdkR2hwY3k1MGFHbGphMjVsYzNNZ1BTQjBhR2x6TG5kcFpIUm9JQzhnTWp0Y2JpQWdJQ0JjZEhnZ1BTQjBhR2x6TG5kcFpIUm9Mekk3WEc0Z0lDQWdYSFI1SUQwZ01EdGNiaUFnSUNCY2RIY2dQU0IwYUdsekxuUm9hV05yYm1WemN6dGNiaUFnSUNCY2RHZ2dQU0IwYUdsekxtaGxhV2RvZER0Y2JpQWdJQ0FnSUhSb2FYTXVhMjV2WWtSaGRHRXVjaUE5SUhSb2FYTXVkR2hwWTJ0dVpYTnpJQ29nTUM0NE8xeHVJQ0FnSUZ4MGRHaHBjeTVyYm05aVJHRjBZUzVzWlhabGJDQTlJR2d0ZEdocGN5NXJibTlpUkdGMFlTNXlMWFJvYVhNdWJtOXliV0ZzYVhwbFpDb29hQzEwYUdsekxtdHViMkpFWVhSaExuSXFNaWs3WEc0Z0lDQWdJQ0JpWVhKUFptWnpaWFFnUFNBbmRISmhibk5zWVhSbEtDY3JkR2hwY3k1MGFHbGphMjVsYzNNcUtDMHhLUzh5S3ljc01Da25PMXh1SUNBZ0lDQWdZMjl5Ym1WeVVtRmthWFZ6SUQwZ2R5OHlPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCMGFHbHpMblJvYVdOcmJtVnpjeUE5SUhSb2FYTXVhR1ZwWjJoMElDOGdNanRjYmlBZ0lDQmNkSGdnUFNBd08xeHVJQ0FnSUZ4MGVTQTlJSFJvYVhNdWFHVnBaMmgwTHpJN1hHNGdJQ0FnWEhSM0lEMGdkR2hwY3k1M2FXUjBhRHRjYmlBZ0lDQmNkR2dnUFNCMGFHbHpMblJvYVdOcmJtVnpjenRjYmlBZ0lDQWdJSFJvYVhNdWEyNXZZa1JoZEdFdWNpQTlJSFJvYVhNdWRHaHBZMnR1WlhOeklDb2dNQzQ0TzF4dUlDQWdJRngwZEdocGN5NXJibTlpUkdGMFlTNXNaWFpsYkNBOUlIUm9hWE11Ym05eWJXRnNhWHBsWkNvb2R5MTBhR2x6TG10dWIySkVZWFJoTG5JcU1pa3JkR2hwY3k1cmJtOWlSR0YwWVM1eU8xeHVJQ0FnSUNBZ1ltRnlUMlptYzJWMElEMGdKM1J5WVc1emJHRjBaU2d3TENjcmRHaHBjeTUwYUdsamEyNWxjM01xS0MweEtTOHlLeWNwSnp0Y2JpQWdJQ0FnSUdOdmNtNWxjbEpoWkdsMWN5QTlJR2d2TWp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0IwYUdsekxtSmhjaTV6WlhSQmRIUnlhV0oxZEdVb0ozZ25MSGdwTzF4dUlDQWdJSFJvYVhNdVltRnlMbk5sZEVGMGRISnBZblYwWlNnbmVTY3NlU2s3WEc0Z0lDQWdkR2hwY3k1aVlYSXVjMlYwUVhSMGNtbGlkWFJsS0NkMGNtRnVjMlp2Y20wbkxHSmhjazltWm5ObGRDazdYRzRnSUNBZ2RHaHBjeTVpWVhJdWMyVjBRWFIwY21saWRYUmxLQ2R5ZUNjc1kyOXlibVZ5VW1Ga2FYVnpLVHNnTHk4Z1kyOXlibVZ5SUhKaFpHbDFjMXh1SUNBZ0lIUm9hWE11WW1GeUxuTmxkRUYwZEhKcFluVjBaU2duY25rbkxHTnZjbTVsY2xKaFpHbDFjeWs3WEc0Z0lDQWdkR2hwY3k1aVlYSXVjMlYwUVhSMGNtbGlkWFJsS0NkM2FXUjBhQ2NzZHlrN1hHNGdJQ0FnZEdocGN5NWlZWEl1YzJWMFFYUjBjbWxpZFhSbEtDZG9aV2xuYUhRbkxHZ3BPMXh1WEc0Z0lDQWdhV1lnS0hSb2FYTXViM0pwWlc1MFlYUnBiMjRnUFQwOUlDZDJaWEowYVdOaGJDY3BJSHRjYmlBZ0lDQWdJSFJvYVhNdWEyNXZZaTV6WlhSQmRIUnlhV0oxZEdVb0oyTjRKeXg0S1R0Y2JpQWdJQ0FnSUhSb2FYTXVhMjV2WWk1elpYUkJkSFJ5YVdKMWRHVW9KMk41Snl4MGFHbHpMbXR1YjJKRVlYUmhMbXhsZG1Wc0tUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnZEdocGN5NXJibTlpTG5ObGRFRjBkSEpwWW5WMFpTZ25ZM2duTEhSb2FYTXVhMjV2WWtSaGRHRXViR1YyWld3cE8xeHVJQ0FnSUNBZ2RHaHBjeTVyYm05aUxuTmxkRUYwZEhKcFluVjBaU2duWTNrbkxIa3BPMXh1SUNBZ0lIMWNiaUFnSUNCMGFHbHpMbXR1YjJJdWMyVjBRWFIwY21saWRYUmxLQ2R5Snl4MGFHbHpMbXR1YjJKRVlYUmhMbklwTzF4dVhHNGdJSDFjYmx4dUlDQmpiMnh2Y2tsdWRHVnlabUZqWlNncElIdGNibHh1SUNBZ0lIUm9hWE11WW1GeUxuTmxkRUYwZEhKcFluVjBaU2duWm1sc2JDY3NJSFJvYVhNdVkyOXNiM0p6TG1acGJHd3BPMXh1SUNBZ0lIUm9hWE11YTI1dllpNXpaWFJCZEhSeWFXSjFkR1VvSjJacGJHd25MQ0IwYUdsekxtTnZiRzl5Y3k1aFkyTmxiblFwTzF4dVhHNGdJQ0FnYVdZZ0tDRjBhR2x6TG1oaGMwdHViMklwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVhMjV2WWk1elpYUkJkSFJ5YVdKMWRHVW9KMlpwYkd3bkxDZDBjbUZ1YzNCaGNtVnVkQ2NwTzF4dUlDQWdJSDFjYmx4dUlDQjlYRzVjYmlBZ2NtVnVaR1Z5S0NrZ2UxeHVJQ0FnSUdsbUlDZ2hkR2hwY3k1amJHbGphMlZrS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbXR1YjJKRVlYUmhMbklnUFNCMGFHbHpMblJvYVdOcmJtVnpjeW93TGpjMU8xeHVJQ0FnSUgxY2JpQWdJQ0IwYUdsekxtdHViMkl1YzJWMFFYUjBjbWxpZFhSbEtDZHlKeXgwYUdsekxtdHViMkpFWVhSaExuSXBPMXh1WEc0Z0lDQWdhV1lnS0hSb2FYTXViM0pwWlc1MFlYUnBiMjRnUFQwOUlDZDJaWEowYVdOaGJDY3BJSHRjYmlBZ1hIUWdJQ0IwYUdsekxtdHViMkpFWVhSaExteGxkbVZzSUQwZ2RHaHBjeTVyYm05aVJHRjBZUzV5SzNSb2FYTXVYM1poYkhWbExtNXZjbTFoYkdsNlpXUXFLSFJvYVhNdWFHVnBaMmgwTFhSb2FYTXVhMjV2WWtSaGRHRXVjaW95S1R0Y2JpQWdJQ0FnSUNCMGFHbHpMbXR1YjJJdWMyVjBRWFIwY21saWRYUmxLQ2RqZVNjc2RHaHBjeTVvWldsbmFIUWdMU0IwYUdsekxtdHViMkpFWVhSaExteGxkbVZzS1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNCY2RDQWdJSFJvYVhNdWEyNXZZa1JoZEdFdWJHVjJaV3dnUFNCMGFHbHpMbDkyWVd4MVpTNXViM0p0WVd4cGVtVmtLaWgwYUdsekxuZHBaSFJvTFhSb2FYTXVhMjV2WWtSaGRHRXVjaW95S1N0MGFHbHpMbXR1YjJKRVlYUmhMbkk3WEc0Z0lDQWdJQ0FnZEdocGN5NXJibTlpTG5ObGRFRjBkSEpwWW5WMFpTZ25ZM2duTEhSb2FYTXVhMjV2WWtSaGRHRXViR1YyWld3cE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc1Y2JpQWdZMnhwWTJzb0tTQjdYRzRnSUNBZ2RHaHBjeTVyYm05aVJHRjBZUzV5SUQwZ2RHaHBjeTUwYUdsamEyNWxjM01xTUM0NU8xeHVJQ0FnSUhSb2FYTXVjRzl6YVhScGIyNHVZVzVqYUc5eUlEMGdkR2hwY3k1dGIzVnpaVHRjYmlBZ0lDQjBhR2x6TG0xdmRtVW9LVHRjYmlBZ2ZWeHVYRzRnSUcxdmRtVW9LU0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVZMnhwWTJ0bFpDa2dlMXh1SUNBZ0lDQWdkR2hwY3k1d2IzTnBkR2x2Ymk1MWNHUmhkR1VvZEdocGN5NXRiM1Z6WlNrN1hHNWNiaUFnSUNBZ0lIUm9hWE11ZG1Gc2RXVWdQU0IwYUdsekxsOTJZV3gxWlM1MWNHUmhkR1ZPYjNKdFlXd29JSFJvYVhNdWNHOXphWFJwYjI0dWRtRnNkV1VnS1R0Y2JseHVJQ0FnSUNBZ2RHaHBjeTVsYldsMEtDZGphR0Z1WjJVbkxIdGNiaUFnSUNBZ0lDQWdkbUZzZFdVNklIUm9hWE11ZG1Gc2RXVXNYRzRnSUNBZ0lDQWdJRXc2SUUxaGRHZ3VjRzkzS0NCdFlYUm9Mbk5qWVd4bEtIUm9hWE11ZG1Gc2RXVXNMVEVzTVN3eExEQXBMQ0F5S1N4Y2JpQWdJQ0FnSUNBZ1Vqb2dUV0YwYUM1d2IzY29JRzFoZEdndWMyTmhiR1VvZEdocGN5NTJZV3gxWlN3dE1Td3hMREFzTVNrc0lESXBYRzRnSUNBZ0lDQjlLVHRjYmx4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhKbGJHVmhjMlVvS1NCN1hHNGdJQ0FnZEdocGN5NXlaVzVrWlhJb0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQlVhR1VnY0c5emFYUnBiMjRnYjJZZ1kzSnZjM05tWVdSbGNpd2dabkp2YlNBdE1TQW9iR1ZtZENrZ2RHOGdNU0FvY21sbmFIUXBMaUJUWlhSMGFXNW5JSFJvYVhNZ2RtRnNkV1VnZFhCa1lYUmxjeUIwYUdVZ2FXNTBaWEptWVdObElHRnVaQ0IwY21sbloyVnljeUIwYUdVZ2IzVjBjSFYwSUdWMlpXNTBMbHh1SUNCQWRIbHdaU0I3Ym5WdFltVnlmVnh1SUNBcUwxeHVJQ0JuWlhRZ2RtRnNkV1VvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVgzWmhiSFZsTG5aaGJIVmxPMXh1SUNCOVhHNWNiaUFnYzJWMElIWmhiSFZsS0haaGJIVmxLU0I3WEc0Z0lDQWdkR2hwY3k1ZmRtRnNkV1V1ZFhCa1lYUmxLSFpoYkhWbEtUdGNiaUFnSUNCMGFHbHpMbkJ2YzJsMGFXOXVMblpoYkhWbElEMGdkR2hwY3k1ZmRtRnNkV1V1Ym05eWJXRnNhWHBsWkR0Y2JpQWdJQ0IwYUdsekxtVnRhWFFvSjJOb1lXNW5aU2NzZTF4dUlDQWdJQ0FnZG1Gc2RXVTZJSFJvYVhNdWRtRnNkV1VzWEc0Z0lDQWdJQ0JNT2lCTllYUm9MbkJ2ZHlnZ2JXRjBhQzV6WTJGc1pTaDBhR2x6TG5aaGJIVmxMQzB4TERFc01Td3dLU3dnTWlrc1hHNGdJQ0FnSUNCU09pQk5ZWFJvTG5CdmR5Z2diV0YwYUM1elkyRnNaU2gwYUdsekxuWmhiSFZsTEMweExERXNNQ3d4S1N3Z01pbGNiaUFnSUNCOUtUdGNiaUFnSUNCMGFHbHpMbkpsYm1SbGNpZ3BPMXh1SUNCOVhHNWNiaUFnWjJWMElHNXZjbTFoYkdsNlpXUW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WDNaaGJIVmxMbTV2Y20xaGJHbDZaV1E3WEc0Z0lIMWNibHh1ZlZ4dVhHNWNibHh1THk4Z1YwVkNVRUZEU3lCR1QwOVVSVklnTHk5Y2JpOHZJQzR2Zmk5cWMyaHBiblF0Ykc5aFpHVnlJUzR2YkdsaUwybHVkR1Z5Wm1GalpYTXZjR0Z1TG1weklpd2lKM1Z6WlNCemRISnBZM1FuTzF4dVhHNXNaWFFnYldGMGFDQTlJSEpsY1hWcGNtVW9KeTR1TDNWMGFXd3ZiV0YwYUNjcE8xeHViR1YwSUhOMlp5QTlJSEpsY1hWcGNtVW9KeTR1TDNWMGFXd3ZjM1puSnlrN1hHNXNaWFFnU1c1MFpYSm1ZV05sSUQwZ2NtVnhkV2x5WlNnbkxpNHZZMjl5WlM5cGJuUmxjbVpoWTJVbktUdGNibHh1WEc1c1pYUWdVRzlwYm5RZ1BTQm1kVzVqZEdsdmJpaHdiMmx1ZEN4bGJuWmxiRzl3WlNrZ2UxeHVYRzRnSUhSb2FYTXVlQ0E5SUhCdmFXNTBMbmc3WEc0Z0lIUm9hWE11ZVNBOUlIQnZhVzUwTG5rN1hHNGdJSFJvYVhNdVpXNTJaV3h2Y0dVZ1BTQmxiblpsYkc5d1pUdGNibHh1SUNCMGFHbHpMbVZzWlcxbGJuUWdQU0J6ZG1jdVkzSmxZWFJsS0NkamFYSmpiR1VuS1R0Y2JpQWdkR2hwY3k1bGJHVnRaVzUwTG5ObGRFRjBkSEpwWW5WMFpTZ25abWxzYkNjc2RHaHBjeTVsYm5abGJHOXdaUzVqYjJ4dmNuTXVZV05qWlc1MEtUdGNibHh1SUNCMGFHbHpMbVZ1ZG1Wc2IzQmxMbVZzWlcxbGJuUXVZWEJ3Wlc1a1EyaHBiR1FvZEdocGN5NWxiR1Z0Wlc1MEtUdGNibHh1SUNCMGFHbHpMbkpsYzJsNlpTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJR3hsZENCeUlEMGdmbjRvVFdGMGFDNXRhVzRvZEdocGN5NWxiblpsYkc5d1pTNTNhV1IwYUN4MGFHbHpMbVZ1ZG1Wc2IzQmxMbWhsYVdkb2RDa3ZOVEFwS3pJN1hHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExuTmxkRUYwZEhKcFluVjBaU2duY2ljc2NpazdYRzRnSUgwN1hHNWNiaUFnZEdocGN5NXRiM1psSUQwZ1puVnVZM1JwYjI0b2VDeDVLU0I3WEc1Y2JpQWdJQ0IwYUdsekxuZ2dQU0FvZUNCOGZDQjRQVDA5TUNrZ1B5QjRJRG9nZEdocGN5NTRPMXh1SUNBZ0lIUm9hWE11ZVNBOUlDaDVJSHg4SUhrOVBUMHdLU0EvSUhrZ09pQjBhR2x6TG5rN1hHNWNiaUFnSUNCcFppQW9kR2hwY3k1bGJuWmxiRzl3WlM1dWIyUmxjeTVwYm1SbGVFOW1LSFJvYVhNcFBqMHdLU0I3WEc1Y2JpQWdJQ0FnSUd4bGRDQndjbVYyU1c1a1pYZ2dQU0IwYUdsekxtVnVkbVZzYjNCbExtNXZaR1Z6TG1sdVpHVjRUMllvZEdocGN5a3RNVHRjYmlBZ0lDQWdJR3hsZENCdVpYaDBTVzVrWlhnZ1BTQjBhR2x6TG1WdWRtVnNiM0JsTG01dlpHVnpMbWx1WkdWNFQyWW9kR2hwY3lrck1UdGNibHh1SUNBZ0lDQWdiR1YwSUhCeVpYWk9iMlJsSUQwZ2RHaHBjeTVsYm5abGJHOXdaUzV1YjJSbGMxdHdjbVYyU1c1a1pYaGRPMXh1SUNBZ0lDQWdiR1YwSUc1bGVIUk9iMlJsSUQwZ2RHaHBjeTVsYm5abGJHOXdaUzV1YjJSbGMxdHVaWGgwU1c1a1pYaGRPMXh1WEc0Z0lDQWdJQ0JzWlhRZ2JHOTNXQ0E5SUhCeVpYWkpibVJsZUNBK1BTQXdJRDhnY0hKbGRrNXZaR1V1ZUNBNklEQTdYRzRnSUNBZ0lDQnNaWFFnYUdsbmFGZ2dQU0J1WlhoMFNXNWtaWGdnUENCMGFHbHpMbVZ1ZG1Wc2IzQmxMbTV2WkdWekxteGxibWQwYUNBL0lHNWxlSFJPYjJSbExuZ2dPaUF4TzF4dVhHNGdJQ0FnSUNCcFppQW9kR2hwY3k1NElEd2diRzkzV0NrZ2V5QjBhR2x6TG5nZ1BTQnNiM2RZT3lCOVhHNGdJQ0FnSUNCcFppQW9kR2hwY3k1NElENGdhR2xuYUZncElIc2dkR2hwY3k1NElEMGdhR2xuYUZnN0lIMWNibHh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11Ykc5allYUnBiMjRnUFNCMGFHbHpMbWRsZEVOdmIzSmthVzVoZEdWektDazdYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbk5sZEVGMGRISnBZblYwWlNnblkzZ25MQ0IwYUdsekxteHZZMkYwYVc5dUxuZ3BPMXh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkQzV6WlhSQmRIUnlhV0oxZEdVb0oyTjVKeXdnZEdocGN5NXNiMk5oZEdsdmJpNTVLVHRjYmlBZ2ZUdGNibHh1SUNCMGFHbHpMbWRsZEVOdmIzSmthVzVoZEdWeklEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIdGNiaUFnSUNBZ0lIZzZJSFJvYVhNdWVDQXFJSFJvYVhNdVpXNTJaV3h2Y0dVdWQybGtkR2dzWEc0Z0lDQWdJQ0I1T2lBb01TMTBhR2x6TG5rcElDb2dkR2hwY3k1bGJuWmxiRzl3WlM1b1pXbG5hSFJjYmlBZ0lDQjlPMXh1SUNCOU8xeHVYRzRnSUhSb2FYTXViVzkyWlNoMGFHbHpMbmdzZEdocGN5NTVMSFJ5ZFdVcE8xeHVJQ0IwYUdsekxuSmxjMmw2WlNncE8xeHVYRzRnSUhSb2FYTXVaR1Z6ZEhKdmVTQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJSFJvYVhNdVpXNTJaV3h2Y0dVdVpXeGxiV1Z1ZEM1eVpXMXZkbVZEYUdsc1pDaDBhR2x6TG1Wc1pXMWxiblFwTzF4dUlDQWdJSFJvYVhNdVpXNTJaV3h2Y0dVdWJtOWtaWE11YzNCc2FXTmxLSFJvYVhNdVpXNTJaV3h2Y0dVdWJtOWtaWE11YVc1a1pYaFBaaWgwYUdsektTd3hLVHRjYmlBZ2ZUdGNibHh1WEc1OU8xeHVYRzVjYmk4cUtseHVLaUJGYm5abGJHOXdaVnh1S2x4dUtpQkFaR1Z6WTNKcGNIUnBiMjRnU1c1MFpYSmhZM1JwZG1VZ2JHbHVaV0Z5SUhKaGJYQWdkbWx6ZFdGc2FYcGhkR2x2Ymk1Y2JpcGNiaW9nUUdSbGJXOGdQSE53WVc0Z2JtVjRkWE10ZFdrOVhDSmxiblpsYkc5d1pWd2lQand2YzNCaGJqNWNiaXBjYmlvZ1FHVjRZVzF3YkdWY2Jpb2dkbUZ5SUdWdWRtVnNiM0JsSUQwZ2JtVjNJRTVsZUhWekxrVnVkbVZzYjNCbEtDY2pkR0Z5WjJWMEp5bGNiaXBjYmlvZ1FHVjRZVzF3YkdWY2Jpb2dkbUZ5SUdWdWRtVnNiM0JsSUQwZ2JtVjNJRTVsZUhWekxrVnVkbVZzYjNCbEtDY2pkR0Z5WjJWMEp5eDdYRzRxSUNBZ0ozTnBlbVVuT2lCYk16QXdMREUxTUYwc1hHNHFJQ0FnSjNCdmFXNTBjeWM2SUZ0Y2Jpb2dJQ0FnSUh0Y2Jpb2dJQ0FnSUNBZ2VEb2dNQzR4TEZ4dUtpQWdJQ0FnSUNCNU9pQXdMalJjYmlvZ0lDQWdJSDBzWEc0cUlDQWdJQ0I3WEc0cUlDQWdJQ0FnSUhnNklEQXVNelVzWEc0cUlDQWdJQ0FnSUhrNklEQXVObHh1S2lBZ0lDQWdmU3hjYmlvZ0lDQWdJSHRjYmlvZ0lDQWdJQ0FnZURvZ01DNDJOU3hjYmlvZ0lDQWdJQ0FnZVRvZ01DNHlYRzRxSUNBZ0lDQjlMRnh1S2lBZ0lDQWdlMXh1S2lBZ0lDQWdJQ0I0T2lBd0xqa3NYRzRxSUNBZ0lDQWdJSGs2SURBdU5GeHVLaUFnSUNBZ2ZTeGNiaW9nSUNCZFhHNHFJSDBwWEc0cVhHNHFJRUJ2ZFhSd2RYUmNiaW9nWTJoaGJtZGxYRzRxSUVacGNtVnpJR0Z1ZVNCMGFXMWxJR0VnYm05a1pTQnBjeUJ0YjNabFpDNGdQR0p5UGx4dUtpQlVhR1VnWlhabGJuUWdaR0YwWVNCcGN5QmhiaUJoY25KaGVTQnZaaUJ3YjJsdWRDQnNiMk5oZEdsdmJuTXVJRVZoWTJnZ2FYUmxiU0JwYmlCMGFHVWdZWEp5WVhrZ2FYTWdZVzRnYjJKcVpXTjBJR052Ym5SaGFXNXBibWNnUEdrK2VEd3ZhVDRnWVc1a0lEeHBQbms4TDJrK0lIQnliM0JsY25ScFpYTWdaR1Z6WTNKcFltbHVaeUIwYUdVZ2JHOWpZWFJwYjI0Z2IyWWdZU0J3YjJsdWRDQnZiaUIwYUdVZ1pXNTJaV3h2Y0dVdVhHNHFYRzRxSUVCdmRYUndkWFJsZUdGdGNHeGxYRzRxSUdWdWRtVnNiM0JsTG05dUtDZGphR0Z1WjJVbkxHWjFibU4wYVc5dUtIWXBJSHRjYmlvZ0lDQmpiMjV6YjJ4bExteHZaeWgyS1R0Y2Jpb2dmU2xjYmlwY2Jpb3ZYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR05zWVhOeklFVnVkbVZzYjNCbElHVjRkR1Z1WkhNZ1NXNTBaWEptWVdObElIdGNibHh1SUNCamIyNXpkSEoxWTNSdmNpZ3BJSHRjYmx4dUlDQWdJR3hsZENCdmNIUnBiMjV6SUQwZ1d5ZDJZV3gxWlNkZE8xeHVYRzRnSUNBZ2JHVjBJR1JsWm1GMWJIUnpJRDBnZTF4dUlDQWdJQ0FnSjNOcGVtVW5PaUJiTXpBd0xERTFNRjBzWEc0Z0lDQWdJQ0FuY0c5cGJuUnpKem9nVzF4dUlDQmNkRngwWEhSN1hHNGdJRngwWEhSY2RGeDBlRG9nTUM0eExGeHVJQ0JjZEZ4MFhIUmNkSGs2SURBdU5GeHVJQ0JjZEZ4MFhIUjlMRnh1SUNCY2RGeDBYSFI3WEc0Z0lGeDBYSFJjZEZ4MGVEb2dNQzR6TlN4Y2JpQWdYSFJjZEZ4MFhIUjVPaUF3TGpaY2JpQWdYSFJjZEZ4MGZTeGNiaUFnWEhSY2RGeDBlMXh1SUNCY2RGeDBYSFJjZEhnNklEQXVOalVzWEc0Z0lGeDBYSFJjZEZ4MGVUb2dNQzR5WEc0Z0lGeDBYSFJjZEgwc1hHNGdJRngwWEhSY2RIdGNiaUFnWEhSY2RGeDBYSFI0T2lBd0xqa3NYRzRnSUZ4MFhIUmNkRngwZVRvZ01DNDBYRzRnSUZ4MFhIUmNkSDFjYmlBZ1hIUmNkRjFjYmlBZ0lDQjlPMXh1WEc0Z0lDQWdjM1Z3WlhJb1lYSm5kVzFsYm5SekxHOXdkR2x2Ym5Nc1pHVm1ZWFZzZEhNcE8xeHVYRzRnSUNBZ2RHaHBjeTV3YjJsdWRITWdQU0IwYUdsekxuTmxkSFJwYm1kekxuQnZhVzUwY3p0Y2JseHVJQ0FnSUhSb2FYTXVibTlrWlhNZ1BTQmJYVHRjYmx4dUlDQWdJSFJvYVhNdWMyVnNaV04wWldRZ1BTQm1ZV3h6WlR0Y2JseHVJQ0FnSUhSb2FYTXVhVzVwZENncE8xeHVYRzVjYmlBZ2ZWeHVYRzRnSUdKMWFXeGtTVzUwWlhKbVlXTmxLQ2tnZTF4dVhHNWNiaUFnSUNCMGFHbHpMbkJ2YVc1MGN5NW1iM0pGWVdOb0tDaHdiMmx1ZENrZ1BUNGdlMXh1SUNBZ0lDQWdiR1YwSUc1dlpHVWdQU0J1WlhjZ1VHOXBiblFvY0c5cGJuUXNkR2hwY3lrN1hHNGdJQ0FnSUNCMGFHbHpMbTV2WkdWekxuQjFjMmdvYm05a1pTazdYRzRnSUNBZ2ZTazdYRzVjYmlBZ0lDQjBhR2x6TG5OdmNuUlFiMmx1ZEhNb0tUdGNibHh1SUNBZ0lIUm9hWE11YkdsdVpTQTlJSE4yWnk1amNtVmhkR1VvSjNCdmJIbHNhVzVsSnlrN1hHNGdJQ0FnZEdocGN5NXNhVzVsTG5ObGRFRjBkSEpwWW5WMFpTZ25jM1J5YjJ0bExYZHBaSFJvSnl3Z01pazdYRzRnSUNBZ2RHaHBjeTVzYVc1bExuTmxkRUYwZEhKcFluVjBaU2duWm1sc2JDY3NJQ2R1YjI1bEp5azdYRzVjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1WVhCd1pXNWtRMmhwYkdRb2RHaHBjeTVzYVc1bEtUdGNibHh1SUNBZ0lIUm9hWE11Wm1sc2JDQTlJSE4yWnk1amNtVmhkR1VvSjNCdmJIbHNhVzVsSnlrN1hHNGdJQ0FnZEdocGN5NW1hV3hzTG5ObGRFRjBkSEpwWW5WMFpTZ25abWxzYkMxdmNHRmphWFI1Snl3Z0p6QXVNaWNwTzF4dVhHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExtRndjR1Z1WkVOb2FXeGtLSFJvYVhNdVptbHNiQ2s3WEc1Y2JpQWdmVnh1WEc0Z0lITnBlbVZKYm5SbGNtWmhZMlVvS1NCN1hHNWNiaUFnSUNCbWIzSWdLR3hsZENCcFBUQTdJR2s4ZEdocGN5NXViMlJsY3k1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lDQWdkR2hwY3k1dWIyUmxjMXRwWFM1eVpYTnBlbVVvS1R0Y2JpQWdJQ0FnSUhSb2FYTXVibTlrWlhOYmFWMHViVzkyWlNncE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtDazdYRzVjYmlBZ2ZWeHVYRzRnSUdOdmJHOXlTVzUwWlhKbVlXTmxLQ2tnZTF4dVhHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExuTjBlV3hsTG1KaFkydG5jbTkxYm1SRGIyeHZjaUE5SUhSb2FYTXVZMjlzYjNKekxtWnBiR3c3WEc0Z0lDQWdkR2hwY3k1c2FXNWxMbk5sZEVGMGRISnBZblYwWlNnbmMzUnliMnRsSnl3Z2RHaHBjeTVqYjJ4dmNuTXVZV05qWlc1MEtUdGNiaUFnSUNCMGFHbHpMbVpwYkd3dWMyVjBRWFIwY21saWRYUmxLQ2RtYVd4c0p5d2dkR2hwY3k1amIyeHZjbk11WVdOalpXNTBLVHRjYmlBZ0lDQjBhR2x6TG01dlpHVnpMbVp2Y2tWaFkyZ29LRzV2WkdVcElEMCtJSHRjYmlBZ0lDQWdJRzV2WkdVdVpXeGxiV1Z1ZEM1elpYUkJkSFJ5YVdKMWRHVW9KMlpwYkd3bkxIUm9hWE11WTI5c2IzSnpMbUZqWTJWdWRDazdYRzRnSUNBZ2ZTazdYRzVjYmlBZ2ZWeHVYRzRnSUhKbGJtUmxjaWdwSUh0Y2JpQWdMeThnSUhSb2FYTXVibTlrWlhOYmRHaHBjeTV6Wld4bFkzUmxaRjB1Ylc5MlpTZ2dkR2hwY3k1d2IybHVkSE1nS1Z4dUlDQWdJSFJvYVhNdVkyRnNZM1ZzWVhSbFVHRjBhQ2dwTzF4dUlDQjlYRzVjYmlBZ1kyRnNZM1ZzWVhSbFVHOXBiblJ6S0NrZ2UxeHVJQ0FnSUhSb2FYTXVjRzlwYm5SeklEMGdXMTA3WEc0Z0lDQWdkR2hwY3k1dWIyUmxjeTVtYjNKRllXTm9LQ2h1YjJSbEtTQTlQaUI3WEc0Z0lDQWdJQ0IwYUdsekxuQnZhVzUwY3k1d2RYTm9LSHNnZURvZ2JtOWtaUzU0TENCNU9pQnViMlJsTG5rZ2ZTazdYRzRnSUNBZ2ZTazdYRzRnSUgxY2JseHVJQ0JqWVd4amRXeGhkR1ZRWVhSb0tDa2dlMXh1WEc0Z0lDQWdMeTl6ZEhKdmEyVWdaR0YwWVZ4dUlDQWdJR3hsZENCa1lYUmhJRDBnSnpBZ0p5c2dkR2hwY3k1dWIyUmxjMXN3WFM1c2IyTmhkR2x2Ymk1NUt5Y3NJQ2M3WEc1Y2JpQWdJQ0F2THlCa1lYUmhJSE5vYjNWc1pDQmlaU0J5WlMxdmNtUmxjbVZrSUdKaGMyVmtJRzl1SUhnZ2JHOWpZWFJwYjI0dVhHNGdJQ0FnTHk4Z2QyaGhkR1YyWlhJZ1puVnVZM1JwYjI0Z1lXUmtjeUJoSUc1dlpHVWdjMmh2ZFd4a0lHRmtaQ0JwZENCaGRDQjBhR1VnY21sbmFIUWdhVzVrWlhoY2JseHVJQ0FnSUhSb2FYTXVibTlrWlhNdVptOXlSV0ZqYUNnb2JtOWtaU2tnUFQ0Z2UxeHVJQ0FnSUM4dklDQnNaWFFnYkc5allYUnBiMjRnUFNCdWIyUmxMbWRsZEVOdmIzSmthVzVoZEdWektDazdYRzRnSUNBZ0lDQmtZWFJoSUNzOUlHNXZaR1V1Ykc5allYUnBiMjR1ZUNBcklDY2dKeUFySUc1dlpHVXViRzlqWVhScGIyNHVlU0FySUNjc0lDYzdYRzRnSUNBZ2ZTazdYRzVjYmx4dUlDQXZMeUFnWkdGMFlTQXJQU0J3YjJsdWRDNTRLblJvYVhNdWQybGtkR2dySnlBbkt5QndiMmx1ZEM1NUtuUm9hWE11YUdWcFoyaDBLeWNzSUNjN1hHNGdJQ0FnWkdGMFlTQXJQU0IwYUdsekxuZHBaSFJvSUNzZ0p5QW5LeUIwYUdsekxtNXZaR1Z6VzNSb2FYTXVibTlrWlhNdWJHVnVaM1JvTFRGZExteHZZMkYwYVc5dUxuazdYRzVjYmlBZ0lDQjBhR2x6TG14cGJtVXVjMlYwUVhSMGNtbGlkWFJsS0Nkd2IybHVkSE1uTENCa1lYUmhLVHRjYmx4dUlDQWdJQzh2SUdacGJHd2daR0YwWVZ4dUlDQWdJQzh2SUdGa1pDQmliM1IwYjIwZ1kyOXlibVZ5YzF4dVhHNGdJQ0FnWkdGMFlTQXJQU0FuTENBbkszUm9hWE11ZDJsa2RHZ2dLeWNnSnl0MGFHbHpMbWhsYVdkb2RDc25MQ0FuTzF4dUlDQWdJR1JoZEdFZ0t6MGdKekFnSnl0MGFHbHpMbWhsYVdkb2REdGNibHh1SUNBZ0lIUm9hWE11Wm1sc2JDNXpaWFJCZEhSeWFXSjFkR1VvSjNCdmFXNTBjeWNzSUdSaGRHRXBPMXh1WEc0Z0lIMWNibHh1WEc1Y2JpQWdZMnhwWTJzb0tTQjdYRzRnSUZ4MEx5OGdabWx1WkNCdVpXRnlaWE4wSUc1dlpHVWdZVzVrSUhObGRDQjBhR2x6TG5ObGJHVmpkR1ZrSUNocGJtUmxlQ2xjYmlBZ0lDQjBhR2x6TG1oaGMwMXZkbVZrSUQwZ1ptRnNjMlU3WEc0Z0lGeDBkR2hwY3k1elpXeGxZM1JsWkNBOUlIUm9hWE11Wm1sdVpFNWxZWEpsYzNST2IyUmxLQ2s3WEc1Y2JpQWdJQ0IwYUdsekxtNXZaR1Z6VzNSb2FYTXVjMlZzWldOMFpXUmRMbTF2ZG1Vb2RHaHBjeTV0YjNWelpTNTRMM1JvYVhNdWQybGtkR2dzTVMxMGFHbHpMbTF2ZFhObExua3ZkR2hwY3k1b1pXbG5hSFFwTzF4dUlDQWdJSFJvYVhNdWMyTmhiR1ZPYjJSbEtIUm9hWE11YzJWc1pXTjBaV1FwTzF4dVhHNGdJQ0FnTHk4Z2JYVnpkQ0JrYnlCMGFHbHpJR0l2WXlCdVpYY2dibTlrWlNCdFlYa2dhR0YyWlNCaVpXVnVJR055WldGMFpXUmNiaUFnSUNCMGFHbHpMbU5oYkdOMWJHRjBaVkJ2YVc1MGN5Z3BPMXh1SUNBZ0lIUm9hWE11WlcxcGRDZ25ZMmhoYm1kbEp5eDBhR2x6TG5CdmFXNTBjeWs3WEc0Z0lGeDBkR2hwY3k1eVpXNWtaWElvS1R0Y2JpQWdmVnh1WEc0Z0lHMXZkbVVvS1NCN1hHNGdJRngwYVdZZ0tIUm9hWE11WTJ4cFkydGxaQ2tnZTF4dUlDQWdJQ0FnZEdocGN5NXRiM1Z6WlM1NElEMGdiV0YwYUM1amJHbHdLSFJvYVhNdWJXOTFjMlV1ZUN3d0xIUm9hWE11ZDJsa2RHZ3BPMXh1SUNBZ0lDQWdkR2hwY3k1b1lYTk5iM1psWkNBOUlIUnlkV1U3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVibTlrWlhOYmRHaHBjeTV6Wld4bFkzUmxaRjB1Ylc5MlpTaDBhR2x6TG0xdmRYTmxMbmd2ZEdocGN5NTNhV1IwYUN3eExYUm9hWE11Ylc5MWMyVXVlUzkwYUdsekxtaGxhV2RvZENrN1hHNGdJQ0FnWEhSMGFHbHpMbk5qWVd4bFRtOWtaU2gwYUdsekxuTmxiR1ZqZEdWa0tUdGNibHh1SUNBZ0lDQWdkR2hwY3k1allXeGpkV3hoZEdWUWIybHVkSE1vS1R0Y2JpQWdYSFJjZEhSb2FYTXVaVzFwZENnblkyaGhibWRsSnl4MGFHbHpMbkJ2YVc1MGN5azdYRzRnSUZ4MFhIUjBhR2x6TG5KbGJtUmxjaWdwTzF4dUlDQmNkSDFjYmlBZ2ZWeHVYRzRnSUhKbGJHVmhjMlVvS1NCN1hHNWNiaUFnWEhScFppQW9JWFJvYVhNdWFHRnpUVzkyWldRcElIdGNiaUFnSUNBZ0lIUm9hWE11Ym05a1pYTmJkR2hwY3k1elpXeGxZM1JsWkYwdVpHVnpkSEp2ZVNncE8xeHVJQ0JjZEgxY2JseHVJQ0FnSUhSb2FYTXVZMkZzWTNWc1lYUmxVRzlwYm5SektDazdYRzRnSUNBZ2RHaHBjeTVsYldsMEtDZGphR0Z1WjJVbkxIUm9hWE11Y0c5cGJuUnpLVHRjYmlBZ1hIUjBhR2x6TG5KbGJtUmxjaWdwTzF4dVhHNGdJRngwTHk4Z2NtVnpaWFFnZEdocGN5NXpaV3hsWTNSbFpGeHVJQ0JjZEhSb2FYTXVjMlZzWldOMFpXUWdQU0J1ZFd4c08xeHVJQ0I5WEc1Y2JseHVJQ0JtYVc1a1RtVmhjbVZ6ZEU1dlpHVW9LU0I3WEc0Z0lGeDBkbUZ5SUc1bFlYSmxjM1JKYm1SbGVDQTlJRzUxYkd3N1hHNGdJQ0FnTHk4Z2MyVjBJSFJvYVhNZ2RXNXlaV0Z6YjI1aFlteDVJR2hwWjJnZ2MyOGdkR2hoZENCbGRtVnllU0JrYVhOMFlXNWpaU0IzYVd4c0lHSmxJR3h2ZDJWeUlIUm9ZVzRnYVhRdVhHNGdJRngwZG1GeUlHNWxZWEpsYzNSRWFYTjBJRDBnTVRBd01EQTdYRzRnSUZ4MGRtRnlJR0psWm05eVpTQTlJR1poYkhObE8xeHVJQ0FnSUd4bGRDQjRJRDBnZEdocGN5NXRiM1Z6WlM1NEwzUm9hWE11ZDJsa2RHZzdYRzRnSUNBZ2JHVjBJSGtnUFNBeExYUm9hWE11Ylc5MWMyVXVlUzkwYUdsekxtaGxhV2RvZER0Y2JpQWdJQ0JzWlhRZ2JtOWtaWE1nUFNCMGFHbHpMbTV2WkdWek8xeHVJQ0JjZEdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwUEc1dlpHVnpMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNWNiaUFnSUNBZ0lDOHZJR05oYkdOMWJHRjBaU0IwYUdVZ1pHbHpkR0Z1WTJVZ1puSnZiU0J0YjNWelpTQjBieUIwYUdseklHNXZaR1VnZFhOcGJtY2djSGwwYUdGbmIzSmxZVzRnZEdobGIzSmxiVnh1SUNCY2RGeDBkbUZ5SUdScGMzUmhibU5sSUQwZ1RXRjBhQzV6Y1hKMEtDQWdUV0YwYUM1d2IzY29JQ2h1YjJSbGMxdHBYUzU0SUMwZ2VDa3NJRElwSUNzZ1RXRjBhQzV3YjNjb0tHNXZaR1Z6VzJsZExua2dMU0I1S1N3Z01pa2dLVHRjYmx4dUlDQWdJQ0FnTHk4Z2FXWWdkR2hwY3lCa2FYTjBZVzVqWlNCcGN5QnNaWE56SUhSb1lXNGdkR2hsSUhCeVpYWnBiM1Z6SUhOb2IzSjBaWE4wSUdScGMzUmhibU5sTENCMWMyVWdkR2hwY3lCcGJtUmxlRnh1SUNCY2RGeDBhV1lnS0dScGMzUmhibU5sSUR3Z2JtVmhjbVZ6ZEVScGMzUXBJSHRjYmlBZ1hIUmNkRngwYm1WaGNtVnpkRVJwYzNRZ1BTQmthWE4wWVc1alpUdGNiaUFnWEhSY2RGeDBibVZoY21WemRFbHVaR1Y0SUQwZ2FUdGNiaUFnWEhSY2RGeDBZbVZtYjNKbElEMGdlQ0ErSUc1dlpHVnpXMmxkTG5nN1hHNGdJRngwWEhSOVhHNWNiaUFnWEhSOVhHNWNiaUFnSUNBdkx5QnBaaUJ1YjNRZ2RtVnllU0JqYkc5elpTQjBieUJoYm5rZ2JtOWtaU3dnWTNKbFlYUmxJR0VnYm05a1pWeHVJQ0JjZEdsbUlDaHVaV0Z5WlhOMFJHbHpkRDR3TGpBM0tTQjdYRzVjYmlBZ0lDQWdJRzVsWVhKbGMzUkpibVJsZUNBOUlIUm9hWE11WjJWMFNXNWtaWGhHY205dFdDaDBhR2x6TG0xdmRYTmxMbmd2ZEdocGN5NTNhV1IwYUNrN1hHNWNiaUFnWEhSY2RIUm9hWE11Ym05a1pYTXVjM0JzYVdObEtHNWxZWEpsYzNSSmJtUmxlQ3d3TENCdVpYY2dVRzlwYm5Rb2UxeHVJQ0JjZEZ4MFhIUjRPaUIwYUdsekxtMXZkWE5sTG5ndmRHaHBjeTUzYVdSMGFDeGNiaUFnWEhSY2RGeDBlVG9nTVMxMGFHbHpMbTF2ZFhObExua3ZkR2hwY3k1b1pXbG5hSFJjYmlBZ1hIUmNkSDBzSUhSb2FYTXBLVHRjYmlBZ0lDQWdJSFJvYVhNdWFHRnpUVzkyWldRZ1BTQjBjblZsTzF4dVhHNGdJRngwZlZ4dVhHNGdJRngwY21WMGRYSnVJRzVsWVhKbGMzUkpibVJsZUR0Y2JpQWdmVnh1WEc0Z0lHZGxkRWx1WkdWNFJuSnZiVmdvZUNrZ2UxeHVJQ0FnSUd4bGRDQnBibVJsZUNBOUlEQTdYRzRnSUNBZ2RHaHBjeTV1YjJSbGN5NW1iM0pGWVdOb0tDaHViMlJsTEdrcElEMCtJSHRjYmlBZ0lDQWdJR2xtSUNoMGFHbHpMbTV2WkdWelcybGRMbmdnUEQwZ2VDa2dlMXh1SUNBZ0lDQWdJQ0JwYm1SbGVDQTlJR2tyTVR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5S1R0Y2JpQWdJQ0J5WlhSMWNtNGdhVzVrWlhnN1hHNGdJSDFjYmx4dUlDQnpZMkZzWlU1dlpHVW9hU2tnZTF4dVhHNGdJRngwYkdWMElHTnNhWEJ3WldSWUlEMGdiV0YwYUM1amJHbHdLSFJvYVhNdWJtOWtaWE5iYVYwdWVDd2dNQ3dnTVNrN1hHNGdJRngwYkdWMElHTnNhWEJ3WldSWklEMGdiV0YwYUM1amJHbHdLSFJvYVhNdWJtOWtaWE5iYVYwdWVTd2dNQ3dnTVNrN1hHNWNiaUFnSUNCMGFHbHpMbTV2WkdWelcybGRMbTF2ZG1Vb0lHTnNhWEJ3WldSWUxDQmpiR2x3Y0dWa1dTQXBPMXh1WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnVTI5eWRDQjBhR1VnZEdocGN5NXdiMmx1ZEhNZ1lYSnlZWGtnWm5KdmJTQnNaV1owTFcxdmMzUWdjRzlwYm5RZ2RHOGdjbWxuYUhRdGJXOXpkQ0J3YjJsdWRDNGdXVzkxSUhOb2IzVnNaQ0J1YjNRZ2NtVm5kV3hoY214NUlHNWxaV1FnZEc4Z2RYTmxJSFJvYVhNc0lHaHZkMlYyWlhJZ2FYUWdiV0Y1SUdKbElIVnpaV1oxYkNCcFppQjBhR1VnY0c5cGJuUnpJR2RsZENCMWJtOXlaR1Z5WldRdVhHNGdJQ292WEc0Z0lITnZjblJRYjJsdWRITW9LU0I3WEc0Z0lDQWdkR2hwY3k1dWIyUmxjeTV6YjNKMEtHWjFibU4wYVc5dUtHRXNJR0lwZTF4dUlDQWdJQ0FnY21WMGRYSnVJR0V1ZUNBK0lHSXVlRHRjYmlBZ0lDQjlLVHRjYmlBZ2ZWeHVYRzVjYmlBZ0x5b3FYRzRnSUVGa1pDQmhJR0p5WldGcmNHOXBiblFnYjI0Z2RHaGxJR1Z1ZG1Wc2IzQmxMbHh1SUNCQWNHRnlZVzBnZUNCN2JuVnRZbVZ5ZlNCNElHeHZZMkYwYVc5dUlHOW1JSFJvWlNCd2IybHVkQ3dnYm05eWJXRnNhWHBsWkNBb01DMHhLVnh1SUNCQWNHRnlZVzBnZVNCN2JuVnRZbVZ5ZlNCNUlHeHZZMkYwYVc5dUlHOW1JSFJvWlNCd2IybHVkQ3dnYm05eWJXRnNhWHBsWkNBb01DMHhLVnh1SUNBcUwxeHVJQ0JoWkdSUWIybHVkQ2g0TEhrcElIdGNiaUFnSUNCc1pYUWdhVzVrWlhnZ1BTQjBhR2x6TG01dlpHVnpMbXhsYm1kMGFEdGNibHh1SUNBZ0lIUm9hWE11YzI5eWRGQnZhVzUwY3lncE8xeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrOGRHaHBjeTV1YjJSbGN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnYVdZZ0tIZ2dQQ0IwYUdsekxtNXZaR1Z6VzJsZExuZ3BJSHRjYmlBZ0lDQWdJQ0FnYVc1a1pYZ2dQU0JwTzF4dUlDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJSDFjYmlBZ1hIUjlYRzVjYmlBZ0lDQjBhR2x6TG01dlpHVnpMbk53YkdsalpTaHBibVJsZUN3Z01Dd2dibVYzSUZCdmFXNTBLSHRjYmlBZ0lDQWdJSGc2SUhnc1hHNGdJQ0FnSUNCNU9pQjVYRzRnSUNBZ2ZTd2dkR2hwY3lrcE8xeHVYRzRnSUNBZ2RHaHBjeTV6WTJGc1pVNXZaR1VvYVc1a1pYZ3BPMXh1WEc0Z0lDQWdkR2hwY3k1allXeGpkV3hoZEdWUWIybHVkSE1vS1R0Y2JpQWdJQ0IwYUdsekxtVnRhWFFvSjJOb1lXNW5aU2NzZEdocGN5NXdiMmx1ZEhNcE8xeHVYRzRnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmlBZ2ZWeHVYRzVjYmlBZ0x5b3FYRzRnSUVacGJtUWdkR2hsSUd4bGRtVnNJR0YwSUdFZ1kyVnlkR0ZwYmlCNElHeHZZMkYwYVc5dUlHOXVJSFJvWlNCbGJuWmxiRzl3WlM1Y2JpQWdRSEJoY21GdElIZ2dlMjUxYldKbGNuMGdWR2hsSUhnZ2JHOWpZWFJwYjI0Z2RHOGdabWx1WkNCMGFHVWdiR1YyWld3Z2IyWXNJRzV2Y20xaGJHbDZaV1FnTUMweFhHNGdJQ292WEc0Z0lITmpZVzRvZUNrZ2UxeHVJQ0FnSUM4dklHWnBibVFnYzNWeWNtOTFibVJwYm1jZ2NHOXBiblJ6WEc0Z0lDQWdiR1YwSUc1bGVIUkpibVJsZUNBOUlIUm9hWE11WjJWMFNXNWtaWGhHY205dFdDaDRLVHRjYmlBZ0lDQnNaWFFnY0hKcGIzSkpibVJsZUNBOUlHNWxlSFJKYm1SbGVDMHhPMXh1SUNBZ0lHbG1JQ2h3Y21sdmNrbHVaR1Y0SUR3Z01Da2dlMXh1SUNBZ0lDQWdjSEpwYjNKSmJtUmxlQ0E5SURBN1hHNGdJQ0FnZlZ4dUlDQWdJR2xtSUNodVpYaDBTVzVrWlhnZ1BqMGdkR2hwY3k1dWIyUmxjeTVzWlc1bmRHZ3BJSHRjYmlBZ0lDQWdJRzVsZUhSSmJtUmxlQ0E5SUhSb2FYTXVibTlrWlhNdWJHVnVaM1JvTFRFN1hHNGdJQ0FnZlZ4dUlDQWdJR3hsZENCd2NtbHZjbEJ2YVc1MElEMGdkR2hwY3k1dWIyUmxjMXR3Y21sdmNrbHVaR1Y0WFR0Y2JpQWdJQ0JzWlhRZ2JtVjRkRkJ2YVc1MElEMGdkR2hwY3k1dWIyUmxjMXR1WlhoMFNXNWtaWGhkTzF4dUlDQWdJR3hsZENCc2IyTWdQU0J0WVhSb0xuTmpZV3hsS0hnc2NISnBiM0pRYjJsdWRDNTRMQ0J1WlhoMFVHOXBiblF1ZUN3Z01Dd2dNU2s3WEc0Z0lDQWdiR1YwSUhaaGJIVmxJRDBnYldGMGFDNXBiblJsY25Bb2JHOWpMSEJ5YVc5eVVHOXBiblF1ZVN4dVpYaDBVRzlwYm5RdWVTazdYRzRnSUNBZ2RHaHBjeTVsYldsMEtDZHpZMkZ1Snl4MllXeDFaU2s3WEc0Z0lDQWdjbVYwZFhKdUlIWmhiSFZsTzF4dUlDQjlYRzVjYmx4dUlDQXZLaXBjYmlBZ1RXOTJaU0JoSUdKeVpXRnJjRzlwYm5RZ2IyNGdkR2hsSUdWdWRtVnNiM0JsTGx4dUlDQkFjR0Z5WVcwZ2FXNWtaWGdnZTI1MWJXSmxjbjBnVkdobElHbHVaR1Y0SUc5bUlIUm9aU0JpY21WaGEzQnZhVzUwSUhSdklHMXZkbVZjYmlBZ1FIQmhjbUZ0SUhnZ2UyNTFiV0psY24wZ1RtVjNJSGdnYkc5allYUnBiMjRzSUc1dmNtMWhiR2w2WldRZ01DMHhYRzRnSUVCd1lYSmhiU0I1SUh0dWRXMWlaWEo5SUU1bGR5QjVJR3h2WTJGMGFXOXVMQ0J1YjNKdFlXeHBlbVZrSURBdE1WeHVJQ0FxTDF4dUlDQnRiM1psVUc5cGJuUW9hVzVrWlhnc2VDeDVLU0I3WEc0Z0lDQWdkR2hwY3k1dWIyUmxjMXRwYm1SbGVGMHViVzkyWlNoNExIa3BPMXh1SUNBZ0lIUm9hWE11YzJOaGJHVk9iMlJsS0dsdVpHVjRLVHRjYmlBZ0lDQjBhR2x6TG1OaGJHTjFiR0YwWlZCdmFXNTBjeWdwTzF4dUlDQWdJSFJvYVhNdVpXMXBkQ2duWTJoaGJtZGxKeXgwYUdsekxuQnZhVzUwY3lrN1hHNGdJQ0FnZEdocGN5NXlaVzVrWlhJb0tUdGNiaUFnZlZ4dVhHNWNiaUFnTHlvcVhHNGdJRTF2ZG1VZ1lTQmljbVZoYTNCdmFXNTBJRzl1SUhSb1pTQmxiblpsYkc5d1pTQmllU0JoSUdObGNuUmhhVzRnWVcxdmRXNTBMbHh1SUNCQWNHRnlZVzBnYVc1a1pYZ2dlMjUxYldKbGNuMGdWR2hsSUdsdVpHVjRJRzltSUhSb1pTQmljbVZoYTNCdmFXNTBJSFJ2SUcxdmRtVmNiaUFnUUhCaGNtRnRJSGhQWm1aelpYUWdlMjUxYldKbGNuMGdXQ0JrYVhOd2JHRmpaVzFsYm5Rc0lHNXZjbTFoYkdsNlpXUWdNQzB4WEc0Z0lFQndZWEpoYlNCNVQyWm1jMlYwSUh0dWRXMWlaWEo5SUZrZ1pHbHpjR3hoWTJWdFpXNTBMQ0J1YjNKdFlXeHBlbVZrSURBdE1WeHVJQ0FxTDF4dUlDQmhaR3AxYzNSUWIybHVkQ2hwYm1SbGVDeDRUMlptYzJWMExIbFBabVp6WlhRcElIdGNiaUFnSUNCMGFHbHpMbTV2WkdWelcybHVaR1Y0WFM1dGIzWmxLSFJvYVhNdWJtOWtaWE5iYVc1a1pYaGRMbmdyZUU5bVpuTmxkQ3gwYUdsekxtNXZaR1Z6VzJsdVpHVjRYUzU1SzNsUFptWnpaWFFwTzF4dUlDQWdJSFJvYVhNdWMyTmhiR1ZPYjJSbEtHbHVaR1Y0S1R0Y2JpQWdJQ0IwYUdsekxtTmhiR04xYkdGMFpWQnZhVzUwY3lncE8xeHVJQ0FnSUhSb2FYTXVaVzFwZENnblkyaGhibWRsSnl4MGFHbHpMbkJ2YVc1MGN5azdYRzRnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmlBZ2ZWeHVYRzVjYmlBZ0x5b3FYRzRnSUZKbGJXOTJaU0JoSUdKeVpXRnJjRzlwYm5RZ1puSnZiU0IwYUdVZ1pXNTJaV3h2Y0dVdVhHNGdJRUJ3WVhKaGJTQnBibVJsZUNCN2JuVnRZbVZ5ZlNCSmJtUmxlQ0J2WmlCMGFHVWdZbkpsWVd0d2IybHVkQ0IwYnlCeVpXMXZkbVZjYmlBZ0tpOWNiaUFnWkdWemRISnZlVkJ2YVc1MEtHbHVaR1Y0S1NCN1hHNGdJQ0FnZEdocGN5NXViMlJsYzF0cGJtUmxlRjB1WkdWemRISnZlU2dwTzF4dUlDQWdJSFJvYVhNdVkyRnNZM1ZzWVhSbFVHOXBiblJ6S0NrN1hHNGdJQ0FnZEdocGN5NWxiV2wwS0NkamFHRnVaMlVuTEhSb2FYTXVjRzlwYm5SektUdGNiaUFnSUNCMGFHbHpMbkpsYm1SbGNpZ3BPMXh1SUNCOVhHNWNibHh1SUNBdktpcGNiaUFnVW1WdGIzWmxJR0ZzYkNCbGVHbHpkR2x1WnlCaWNtVmhhM0J2YVc1MGN5QmhibVFnWVdSa0lHRnVJR1Z1ZEdseVpXeDVJRzVsZHlCelpYUWdiMllnWW5KbFlXdHdiMmx1ZEhNdVhHNGdJRUJ3WVhKaGJTQmhiR3hRYjJsdWRITWdlMkZ5Y21GNWZTQkJiaUJoY25KaGVTQnZaaUJ2WW1wbFkzUnpJSGRwZEdnZ2VDOTVJSEJ5YjNCbGNuUnBaWE1nS0c1dmNtMWhiR2w2WldRZ01DMHhLUzRnUldGamFDQnZZbXBsWTNRZ2FXNGdkR2hsSUdGeWNtRjVJSE53WldOcFptbGpaWE1nZEdobElIZ3ZlU0JzYjJOaGRHbHZiaUJ2WmlCaElHNWxkeUJpY21WaGEzQnZhVzUwSUhSdklHSmxJR0ZrWkdWa0xseHVJQ0FxTDF4dUlDQnpaWFJRYjJsdWRITW9ZV3hzVUc5cGJuUnpLU0I3WEc0Z0lDQWdkMmhwYkdVZ0tIUm9hWE11Ym05a1pYTXViR1Z1WjNSb0tTQjdYRzRnSUNBZ0lDQjBhR2x6TG01dlpHVnpXekJkTG1SbGMzUnliM2tvS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdZV3hzVUc5cGJuUnpMbVp2Y2tWaFkyZ29LSEJ2YVc1MEtTQTlQaUI3WEc0Z0lDQWdJQ0IwYUdsekxtRmtaRkJ2YVc1MEtIQnZhVzUwTG5nc2NHOXBiblF1ZVNrN1hHNGdJQ0FnZlNrN1hHNGdJQ0FnZEdocGN5NWpZV3hqZFd4aGRHVlFiMmx1ZEhNb0tUdGNiaUFnSUNCMGFHbHpMbVZ0YVhRb0oyTm9ZVzVuWlNjc2RHaHBjeTV3YjJsdWRITXBPMXh1SUNBZ0lIUm9hWE11Y21WdVpHVnlLQ2s3WEc0Z0lIMWNibHh1ZlZ4dVhHNWNibHh1THk4Z1YwVkNVRUZEU3lCR1QwOVVSVklnTHk5Y2JpOHZJQzR2Zmk5cWMyaHBiblF0Ykc5aFpHVnlJUzR2YkdsaUwybHVkR1Z5Wm1GalpYTXZaVzUyWld4dmNHVXVhbk1pTENJbmRYTmxJSE4wY21samRDYzdYRzVjYm14bGRDQmtiMjBnUFNCeVpYRjFhWEpsS0NjdUxpOTFkR2xzTDJSdmJTY3BPMXh1THk5c1pYUWdiV0YwYUNBOUlISmxjWFZwY21Vb0p5NHVMM1YwYVd3dmJXRjBhQ2NwTzF4dWJHVjBJRWx1ZEdWeVptRmpaU0E5SUhKbGNYVnBjbVVvSnk0dUwyTnZjbVV2YVc1MFpYSm1ZV05sSnlrN1hHNWNiaThxS2x4dUtpQlRjR1ZqZEhKdlozSmhiVnh1S2x4dUtpQkFaR1Z6WTNKcGNIUnBiMjRnUVhWa2FXOGdjM0JsWTNSeWRXMGdkbWx6ZFdGc2FYcGhkR2x2Ymx4dUtseHVLaUJBWkdWdGJ5QThjM0JoYmlCdVpYaDFjeTExYVQxY0luTndaV04wY205bmNtRnRYQ0krUEM5emNHRnVQbHh1S2x4dUtpQkFaWGhoYlhCc1pWeHVLaUIyWVhJZ2MzQmxZM1J5YjJkeVlXMGdQU0J1WlhjZ1RtVjRkWE11VTNCbFkzUnliMmR5WVcwb0p5TjBZWEpuWlhRbktWeHVLbHh1S2lCQVpYaGhiWEJzWlZ4dUtpQjJZWElnYzNCbFkzUnliMmR5WVcwZ1BTQnVaWGNnVG1WNGRYTXVVM0JsWTNSeWIyZHlZVzBvSnlOMFlYSm5aWFFuTEh0Y2Jpb2dJQ0FuYzJsNlpTYzZJRnN6TURBc01UVXdYVnh1S2lCOUtWeHVLbHh1S2lCQWIzVjBjSFYwWEc0cUlDWnVZbk53TzF4dUtpQk9ieUJsZG1WdWRITmNiaXBjYmlvdlhHNWNibWx0Y0c5eWRDQjdJR052Ym5SbGVIUWdmU0JtY205dElDY3VMaTl0WVdsdUp6dGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdZMnhoYzNNZ1UzQmxZM1J5YjJkeVlXMGdaWGgwWlc1a2N5QkpiblJsY21aaFkyVWdlMXh1WEc0Z0lHTnZibk4wY25WamRHOXlLQ2tnZTF4dVhHNGdJQ0FnYkdWMElHOXdkR2x2Ym5NZ1BTQmJKM05qWVd4bEp5d25kbUZzZFdVblhUdGNibHh1SUNBZ0lHeGxkQ0JrWldaaGRXeDBjeUE5SUh0Y2JpQWdJQ0FnSUNkemFYcGxKem9nV3pNd01Dd3hOVEJkWEc0Z0lDQWdmVHRjYmx4dUlDQWdJSE4xY0dWeUtHRnlaM1Z0Wlc1MGN5eHZjSFJwYjI1ekxHUmxabUYxYkhSektUdGNibHh1SUNBZ0lIUm9hWE11WTI5dWRHVjRkQ0E5SUdOdmJuUmxlSFFvS1RzZ0x5OGdhbk5vYVc1MElHbG5ibTl5WlRwc2FXNWxYRzVjYmlBZ0lDQjBhR2x6TG1GdVlXeDVjMlZ5SUQwZ2RHaHBjeTVqYjI1MFpYaDBMbU55WldGMFpVRnVZV3g1YzJWeUtDazdYRzRnSUNBZ2RHaHBjeTVoYm1Gc2VYTmxjaTVtWm5SVGFYcGxJRDBnTWpBME9EdGNiaUFnSUNCMGFHbHpMbUoxWm1abGNreGxibWQwYUNBOUlIUm9hWE11WVc1aGJIbHpaWEl1Wm5KbGNYVmxibU41UW1sdVEyOTFiblE3WEc0Z0lDQWdkR2hwY3k1a1lYUmhRWEp5WVhrZ1BTQnVaWGNnVldsdWREaEJjbkpoZVNoMGFHbHpMbUoxWm1abGNreGxibWQwYUNrN1hHNWNiaUFnSUNCMGFHbHpMbUZqZEdsMlpTQTlJSFJ5ZFdVN1hHNWNiaUFnSUNCMGFHbHpMbk52ZFhKalpTQTlJR1poYkhObE8xeHVYRzRnSUNBZ2RHaHBjeTVwYm1sMEtDazdYRzVjYmlBZ2ZWeHVYRzRnSUdKMWFXeGtSbkpoYldVb0tTQjdYRzRnSUNBZ2RHaHBjeTVqWVc1MllYTWdQU0J1WlhjZ1pHOXRMbE50WVhKMFEyRnVkbUZ6S0hSb2FYTXVjR0Z5Wlc1MEtUdGNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUWdQU0IwYUdsekxtTmhiblpoY3k1bGJHVnRaVzUwTzF4dUlDQjlYRzVjYmlBZ2MybDZaVWx1ZEdWeVptRmpaU2dwSUh0Y2JpQWdJQ0IwYUdsekxtTmhiblpoY3k1eVpYTnBlbVVvZEdocGN5NTNhV1IwYUN4MGFHbHpMbWhsYVdkb2RDazdYRzRnSUgxY2JseHVJQ0JqYjJ4dmNrbHVkR1Z5Wm1GalpTZ3BJSHRjYmlBZ0lDQjBhR2x6TG1OaGJuWmhjeTVsYkdWdFpXNTBMbk4wZVd4bExtSmhZMnRuY205MWJtUkRiMnh2Y2lBOUlIUm9hWE11WTI5c2IzSnpMbVpwYkd3N1hHNGdJSDFjYmx4dUlDQnlaVzVrWlhJb0tTQjdYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NWhZM1JwZG1VcElIdGNiaUFnSUNBZ0lISmxjWFZsYzNSQmJtbHRZWFJwYjI1R2NtRnRaU2gwYUdsekxuSmxibVJsY2k1aWFXNWtLSFJvYVhNcEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCMGFHbHpMbUZ1WVd4NWMyVnlMbWRsZEVKNWRHVkdjbVZ4ZFdWdVkzbEVZWFJoS0hSb2FYTXVaR0YwWVVGeWNtRjVLVHRjYmx4dUlDQWdJSFJvYVhNdVkyRnVkbUZ6TG1OdmJuUmxlSFF1Wm1sc2JGTjBlV3hsSUQwZ2RHaHBjeTVqYjJ4dmNuTXVabWxzYkR0Y2JpQWdJQ0IwYUdsekxtTmhiblpoY3k1amIyNTBaWGgwTG1acGJHeFNaV04wS0RBc0lEQXNJSFJvYVhNdVkyRnVkbUZ6TG1Wc1pXMWxiblF1ZDJsa2RHZ3NJSFJvYVhNdVkyRnVkbUZ6TG1Wc1pXMWxiblF1YUdWcFoyaDBLVHRjYmx4dUlDQWdJR2xtSUNoMGFHbHpMbk52ZFhKalpTQW1KaUIwYUdsekxtUmhkR0ZCY25KaGVTa2dlMXh1WEc0Z0lDQWdJQ0F2TDJOdmJuTnZiR1V1Ykc5bktIUm9hWE11WkdGMFlVRnljbUY1S1R0Y2JseHVJQ0FnSUNBZ2JHVjBJR0poY2xkcFpIUm9JRDBnS0hSb2FYTXVZMkZ1ZG1GekxtVnNaVzFsYm5RdWQybGtkR2dnTHlCMGFHbHpMbUoxWm1abGNreGxibWQwYUNrN1hHNGdJQ0FnSUNCc1pYUWdZbUZ5U0dWcFoyaDBPMXh1SUNBZ0lDQWdiR1YwSUhnZ1BTQXdPMXh1WEc0Z0lDQWdJQ0JzWlhRZ1pHVm1hVzVwZEdsdmJpQTlJSFJvYVhNdVkyRnVkbUZ6TG1Wc1pXMWxiblF1ZDJsa2RHZ3ZOVEE3WEc1Y2JpQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2RHaHBjeTVpZFdabVpYSk1aVzVuZEdnN0lHa2dQU0JwSzJSbFptbHVhWFJwYjI0cElIdGNiaUFnSUNBZ0lDQWdZbUZ5U0dWcFoyaDBJRDBnVFdGMGFDNXRZWGd1WVhCd2JIa29iblZzYkN3Z2RHaHBjeTVrWVhSaFFYSnlZWGt1YzNWaVlYSnlZWGtvYVN4cEsyUmxabWx1YVhScGIyNHBLVHRjYmlBZ0lDQWdJQ0FnWW1GeVNHVnBaMmgwSUM4OUlESTFOVHRjYmlBZ0lDQWdJQ0FnWW1GeVNHVnBaMmgwSUNvOUlIUm9hWE11WTJGdWRtRnpMbVZzWlcxbGJuUXVhR1ZwWjJoME8xeHVYRzRnSUNBZ0lDQWdJSFJvYVhNdVkyRnVkbUZ6TG1OdmJuUmxlSFF1Wm1sc2JGTjBlV3hsSUQwZ2RHaHBjeTVqYjJ4dmNuTXVZV05qWlc1ME8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG1OaGJuWmhjeTVqYjI1MFpYaDBMbVpwYkd4U1pXTjBLSGdzZEdocGN5NWpZVzUyWVhNdVpXeGxiV1Z1ZEM1b1pXbG5hSFF0WW1GeVNHVnBaMmgwTEdKaGNsZHBaSFJvS21SbFptbHVhWFJwYjI0c1ltRnlTR1ZwWjJoMEtUdGNibHh1SUNBZ0lDQWdJQ0I0SUNzOUlDaGlZWEpYYVdSMGFDcGtaV1pwYm1sMGFXOXVLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdSWEYxYVhaaGJHVnVkQ0IwYnlCY0luQmhkR05vYVc1bklHbHVYQ0lnWVc0Z1lYVmthVzhnYm05a1pTQjBieUIyYVhOMVlXeHBlbVV1SUU1UFZFVTZJRmx2ZFNCallXNXViM1FnWTI5dWJtVmpkQ0JoZFdScGJ5QnViMlJsY3lCaFkzSnZjM01nZEhkdklHUnBabVpsY21WdWRDQmhkV1JwYnlCamIyNTBaWGgwY3k0Z1RtVjRkWE5WU1NCeWRXNXpJR2wwY3lCaGRXUnBieUJoYm1Gc2VYTnBjeUJ2YmlCcGRITWdiM2R1SUdGMVpHbHZJR052Ym5SbGVIUXNJRTVsZUhWekxtTnZiblJsZUhRdUlFbG1JSFJvWlNCaGRXUnBieUJ1YjJSbElIbHZkU0JoY21VZ2RtbHpkV0ZzYVhwcGJtY2dhWE1nWTNKbFlYUmxaQ0J2YmlCaElHUnBabVpsY21WdWRDQmhkV1JwYnlCamIyNTBaWGgwTENCNWIzVWdkMmxzYkNCdVpXVmtJSFJ2SUhSbGJHd2dUbVY0ZFhOVlNTQjBieUIxYzJVZ2RHaGhkQ0JqYjI1MFpYaDBJR2x1YzNSbFlXUTZJR2t1WlM0Z1RtVjRkWE11WTI5dWRHVjRkQ0E5SUZsdmRYSkJkV1JwYjBOdmJuUmxlSFJPWVcxbExpQkdiM0lnWlhoaGJYQnNaU3dnYVc0Z1ZHOXVaVXBUSUhCeWIycGxZM1J6TENCMGFHVWdiR2x1WlNCM2IzVnNaQ0JpWlRvZ1RtVjRkWE11WTI5dWRHVjRkQ0E5SUZSdmJtVXVZMjl1ZEdWNGRDQXVJRmRsSUhKbFkyOXRiV1Z1WkNCMGFHRjBJSGx2ZFNCM2NtbDBaU0IwYUdGMElHeHBibVVnYjJZZ1kyOWtaU0J2Ym14NUlHOXVZMlVnWVhRZ2RHaGxJR0psWjJsdWJtbHVaeUJ2WmlCNWIzVnlJSEJ5YjJwbFkzUXVYRzRnSUVCd1lYSmhiU0J1YjJSbElIdEJkV1JwYjA1dlpHVjlJRlJvWlNCaGRXUnBieUJ1YjJSbElIUnZJSFpwYzNWaGJHbDZaVnh1SUNCQVpYaGhiWEJzWlNCT1pYaDFjeTVqYjI1MFpYaDBJRDBnVkc5dVpTNWpiMjUwWlhoMElDOHZJRzl5SUdGdWIzUm9aWElnWVhWa2FXOGdZMjl1ZEdWNGRDQjViM1VnYUdGMlpTQmpjbVZoZEdWa1hHNGdJSE53WldOMGNtOW5jbUZ0TG1OdmJtNWxZM1FvSUZSdmJtVXVUV0Z6ZEdWeUlDazdYRzRnSUNvdlhHNGdJR052Ym01bFkzUW9ibTlrWlNrZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TG5OdmRYSmpaU2tnZTF4dUlDQWdJQ0FnZEdocGN5NWthWE5qYjI1dVpXTjBLQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lIUm9hWE11YzI5MWNtTmxJRDBnYm05a1pUdGNiaUFnSUNCMGFHbHpMbk52ZFhKalpTNWpiMjV1WldOMEtIUm9hWE11WVc1aGJIbHpaWElwTzF4dUlDQWdJSFJvYVhNdWNtVnVaR1Z5S0NrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ1UzUnZjQ0IyYVhOMVlXeHBlbWx1WnlCMGFHVWdjMjkxY21ObElHNXZaR1VnWVc1a0lHUnBjMk52Ym01bFkzUWdhWFF1WEc0Z0lDb3ZYRzRnSUdScGMyTnZibTVsWTNRb0tTQjdYRzRnSUNBZ2RHaHBjeTV6YjNWeVkyVXVaR2x6WTI5dWJtVmpkQ2gwYUdsekxtRnVZV3g1YzJWeUtUdGNiaUFnSUNCMGFHbHpMbk52ZFhKalpTQTlJRzUxYkd3N1hHNGdJSDFjYmx4dUlDQmpiR2xqYXlncElIdGNiaUFnSUNCMGFHbHpMbUZqZEdsMlpTQTlJQ0YwYUdsekxtRmpkR2wyWlR0Y2JpQWdJQ0IwYUdsekxuSmxibVJsY2lncE8xeHVJQ0I5WEc1Y2JpQWdZM1Z6ZEc5dFJHVnpkSEp2ZVNncElIdGNiaUFnSUNCMGFHbHpMbUZqZEdsMlpTQTlJR1poYkhObE8xeHVJQ0I5WEc1Y2JuMWNibHh1WEc1Y2JpOHZJRmRGUWxCQlEwc2dSazlQVkVWU0lDOHZYRzR2THlBdUwzNHZhbk5vYVc1MExXeHZZV1JsY2lFdUwyeHBZaTlwYm5SbGNtWmhZMlZ6TDNOd1pXTjBjbTluY21GdExtcHpJaXdpSjNWelpTQnpkSEpwWTNRbk8xeHVYRzVzWlhRZ1pHOXRJRDBnY21WeGRXbHlaU2duTGk0dmRYUnBiQzlrYjIwbktUdGNibXhsZENCdFlYUm9JRDBnY21WeGRXbHlaU2duTGk0dmRYUnBiQzl0WVhSb0p5azdYRzVzWlhRZ1NXNTBaWEptWVdObElEMGdjbVZ4ZFdseVpTZ25MaTR2WTI5eVpTOXBiblJsY21aaFkyVW5LVHRjYmx4dVhHNHZLaXBjYmlvZ1RXVjBaWEpjYmlwY2Jpb2dRR1JsYzJOeWFYQjBhVzl1SUZOMFpYSmxieUJrWldOcFltVnNJRzFsZEdWeVhHNHFYRzRxSUVCa1pXMXZJRHh6Y0dGdUlHNWxlSFZ6TFhWcFBWd2liV1YwWlhKY0lqNDhMM053WVc0K1hHNHFYRzRxSUVCbGVHRnRjR3hsWEc0cUlIWmhjaUJ0WlhSbGNpQTlJRzVsZHlCT1pYaDFjeTVOWlhSbGNpZ25JM1JoY21kbGRDY3BYRzRxWEc0cUlFQmxlR0Z0Y0d4bFhHNHFJSFpoY2lCdFpYUmxjaUE5SUc1bGR5Qk9aWGgxY3k1TlpYUmxjaWduSTNSaGNtZGxkQ2NzZTF4dUtpQWdJSE5wZW1VNklGczNOU3czTlYxY2Jpb2dmU2xjYmlwY2Jpb2dRRzkxZEhCMWRGeHVLaUFtYm1KemNEdGNiaW9nVG04Z1pYWmxiblJ6WEc0cVhHNHFMMXh1WEc1cGJYQnZjblFnZXlCamIyNTBaWGgwSUgwZ1puSnZiU0FuTGk0dmJXRnBiaWM3WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdOc1lYTnpJRTFsZEdWeUlHVjRkR1Z1WkhNZ1NXNTBaWEptWVdObElIdGNibHh1SUNCamIyNXpkSEoxWTNSdmNpZ3BJSHRjYmx4dUlDQWdJR3hsZENCdmNIUnBiMjV6SUQwZ1d5ZHpZMkZzWlNjc0ozWmhiSFZsSjEwN1hHNWNiaUFnSUNCc1pYUWdaR1ZtWVhWc2RITWdQU0I3WEc0Z0lDQWdJQ0FuYzJsNlpTYzZJRnN6TUN3eE1EQmRYRzRnSUNBZ2ZUdGNibHh1SUNBZ0lITjFjR1Z5S0dGeVozVnRaVzUwY3l4dmNIUnBiMjV6TEdSbFptRjFiSFJ6S1R0Y2JseHVJQ0FnSUhSb2FYTXVZMjl1ZEdWNGRDQTlJR052Ym5SbGVIUW9LVHNnTHk4Z2FuTm9hVzUwSUdsbmJtOXlaVHBzYVc1bFhHNWNiaUFnSUNCMGFHbHpMbU5vWVc1dVpXeHpJRDBnTWp0Y2JseHVJQ0FnSUhSb2FYTXVjM0JzYVhSMFpYSWdQU0IwYUdsekxtTnZiblJsZUhRdVkzSmxZWFJsUTJoaGJtNWxiRk53YkdsMGRHVnlLQ0IwYUdsekxtTm9ZVzV1Wld4eklDazdYRzVjYmlBZ0lDQjBhR2x6TG1GdVlXeDVjMlZ5Y3lBOUlGdGRPMXh1WEc0Z0lDQWdabTl5SUNoc1pYUWdhVDB3T3lCcFBIUm9hWE11WTJoaGJtNWxiSE03SUdrckt5a2dlMXh1SUNBZ0lDQWdiR1YwSUdGdVlXeDVjMlZ5SUQwZ2RHaHBjeTVqYjI1MFpYaDBMbU55WldGMFpVRnVZV3g1YzJWeUtDazdYRzRnSUNBZ0lDQjBhR2x6TG5Od2JHbDBkR1Z5TG1OdmJtNWxZM1FvWVc1aGJIbHpaWElzYVNrN1hHNGdJQ0FnSUNCaGJtRnNlWE5sY2k1bVpuUlRhWHBsSUQwZ01UQXlORHRjYmlBZ0lDQWdJR0Z1WVd4NWMyVnlMbk50YjI5MGFHbHVaMVJwYldWRGIyNXpkR0Z1ZENBOUlERTdYRzRnSUNBZ0lDQjBhR2x6TG1GdVlXeDVjMlZ5Y3k1d2RYTm9LQ0JoYm1Gc2VYTmxjaUFwTzF4dUlDQWdJSDFjYmlBZ0lDQjBhR2x6TG1KMVptWmxja3hsYm1kMGFDQTlJSFJvYVhNdVlXNWhiSGx6WlhKeld6QmRMbVp5WlhGMVpXNWplVUpwYmtOdmRXNTBPMXh1SUNBZ0lIUm9hWE11WkdGMFlVRnljbUY1SUQwZ2JtVjNJRVpzYjJGME16SkJjbkpoZVNoMGFHbHpMbUoxWm1abGNreGxibWQwYUNrN1hHNWNiaThxWEc0Z0lDQWdMeThnWVdSa0lHeHBibVZoY2lCbmNtRmthV1Z1ZEZ4dUlDQWdJSFpoY2lCbmNtUWdQU0JqWVc1MllYTkRkSGd1WTNKbFlYUmxUR2x1WldGeVIzSmhaR2xsYm5Rb01Dd2dNQ3dnTUN3Z1kyRnVkbUZ6TG1obGFXZG9kQ2s3WEc0Z0lDQWdMeThnYkdsbmFIUWdZbXgxWlZ4dUlDQWdJR2R5WkM1aFpHUkRiMnh2Y2xOMGIzQW9NQ3dnSnlNd01EQW5LVHRjYmlBZ0lDQm5jbVF1WVdSa1EyOXNiM0pUZEc5d0tEQXVNaXdnSnlOaVltSW5LVHRjYmlBZ0lDQm5jbVF1WVdSa1EyOXNiM0pUZEc5d0tEQXVOQ3dnSnlOa01UZ25LVHRjYmlBZ0lDQXZMeUJrWVhKcklHSnNkV1ZjYmlBZ0lDQm5jbVF1WVdSa1EyOXNiM0pUZEc5d0tERXNJQ2NqWkRFNEp5azdYRzRnSUNBZ1kyRnVkbUZ6UTNSNExtWnBiR3hUZEhsc1pTQTlJR2R5WkRzZ0tpOWNibHh1SUNBZ0lIUm9hWE11WVdOMGFYWmxJRDBnZEhKMVpUdGNibHh1SUNBZ0lIUm9hWE11WkdJZ1BTQXRTVzVtYVc1cGRIazdYRzVjYmlBZ0lDQjBhR2x6TG1sdWFYUW9LVHRjYmx4dUlDQWdJSFJvYVhNdWJXVjBaWEpYYVdSMGFDQTlJSFJvYVhNdVkyRnVkbUZ6TG1Wc1pXMWxiblF1ZDJsa2RHZ3ZkR2hwY3k1amFHRnVibVZzY3p0Y2JseHVJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtDazdYRzVjYmlBZ2ZWeHVYRzRnSUdKMWFXeGtSbkpoYldVb0tTQjdYRzRnSUNBZ2RHaHBjeTVqWVc1MllYTWdQU0J1WlhjZ1pHOXRMbE50WVhKMFEyRnVkbUZ6S0hSb2FYTXVjR0Z5Wlc1MEtUdGNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUWdQU0IwYUdsekxtTmhiblpoY3k1bGJHVnRaVzUwTzF4dUlDQjlYRzVjYmlBZ2MybDZaVWx1ZEdWeVptRmpaU2dwSUh0Y2JpQWdJQ0IwYUdsekxtTmhiblpoY3k1eVpYTnBlbVVvZEdocGN5NTNhV1IwYUN4MGFHbHpMbWhsYVdkb2RDazdYRzRnSUgxY2JseHVJQ0JqYjJ4dmNrbHVkR1Z5Wm1GalpTZ3BJSHRjYmlBZ0lDQjBhR2x6TG1OaGJuWmhjeTVsYkdWdFpXNTBMbk4wZVd4bExtSmhZMnRuY205MWJtUkRiMnh2Y2lBOUlIUm9hWE11WTI5c2IzSnpMbVpwYkd3N1hHNGdJSDFjYmx4dUlDQnlaVzVrWlhJb0tTQjdYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NWhZM1JwZG1VcElIdGNiaUFnSUNBZ0lISmxjWFZsYzNSQmJtbHRZWFJwYjI1R2NtRnRaU2gwYUdsekxuSmxibVJsY2k1aWFXNWtLSFJvYVhNcEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCMGFHbHpMbU5oYm5aaGN5NWpiMjUwWlhoMExtWnBiR3hUZEhsc1pTQTlJSFJvYVhNdVkyOXNiM0p6TG1acGJHdzdYRzRnSUNBZ2RHaHBjeTVqWVc1MllYTXVZMjl1ZEdWNGRDNW1hV3hzVW1WamRDZ3dMQ0F3TENCMGFHbHpMbU5oYm5aaGN5NWxiR1Z0Wlc1MExuZHBaSFJvSUN3Z2RHaHBjeTVqWVc1MllYTXVaV3hsYldWdWRDNW9aV2xuYUhRcE8xeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FUMHdPMms4ZEdocGN5NWhibUZzZVhObGNuTXViR1Z1WjNSb08ya3JLeWtnZTF4dVhHNGdJQ0FnSUNCcFppQW9kR2hwY3k1emIzVnlZMlVwSUh0Y2JseHVJQ0FnSUNBZ0lDQjBhR2x6TG1GdVlXeDVjMlZ5YzF0cFhTNW5aWFJHYkc5aGRGUnBiV1ZFYjIxaGFXNUVZWFJoS0hSb2FYTXVaR0YwWVVGeWNtRjVLVHRjYmx4dUlDQWdJQ0FnSUNCc1pYUWdjbTF6SUQwZ01EdGNibHh1SUNBZ0lDQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhSb2FYTXVaR0YwWVVGeWNtRjVMbXhsYm1kMGFEc2dhU3NyS1h0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0J5YlhNZ0t6MGdLSFJvYVhNdVpHRjBZVUZ5Y21GNVcybGRJQ29nZEdocGN5NWtZWFJoUVhKeVlYbGJhVjBwTzF4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdjbTF6SUQwZ1RXRjBhQzV6Y1hKMEtISnRjeUF2SUhSb2FYTXVaR0YwWVVGeWNtRjVMbXhsYm1kMGFDazdYRzVjYmlBZ0lDQWdJQ0FnZEdocGN5NWtZaUE5SURJd0lDb2dUV0YwYUM1c2IyY3hNQ2h5YlhNcE8xeHVYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLSFJvYVhNdVpHSWdQaUF0TWpBd0lDWW1JSFJvYVhNdVpHSWdJVDA5SUMxSmJtWnBibWwwZVNrZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG1SaUlDMDlJREU3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0IwYUdsekxtUmlJRDBnTFVsdVptbHVhWFI1TzF4dUlDQWdJQ0FnZlZ4dVhHNWNiaUFnSUNBZ0lDOHZZMjl1YzI5c1pTNXNiMmNvWkdJcFhHNWNiaUFnSUNBZ0lHbG1JQ2gwYUdsekxtUmlJRDRnTFRjd0tTQjdYRzVjYmlBZ0lDQWdJQ0FnYkdWMElHeHBibVZoY2lBOUlHMWhkR2d1Ym05eWJXRnNhWHBsS0hSb2FYTXVaR0lzTFRjd0xEVXBPMXh1SUNBZ0lDQWdJQ0JzWlhRZ1pYaHdJRDBnYkdsdVpXRnlJQ29nYkdsdVpXRnlPMXh1SUNBZ0lDQWdJQ0JzWlhRZ2VTQTlJRzFoZEdndWMyTmhiR1VvWlhod0xEQXNNU3gwYUdsekxtVnNaVzFsYm5RdWFHVnBaMmgwTERBcE8xeHVYRzRnSUNBZ0lDQWdJSFJvYVhNdVkyRnVkbUZ6TG1OdmJuUmxlSFF1Wm1sc2JGTjBlV3hsSUQwZ2RHaHBjeTVqYjJ4dmNuTXVZV05qWlc1ME8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG1OaGJuWmhjeTVqYjI1MFpYaDBMbVpwYkd4U1pXTjBLSFJvYVhNdWJXVjBaWEpYYVdSMGFDcHBMSGtzZEdocGN5NXRaWFJsY2xkcFpIUm9MSFJvYVhNdVkyRnVkbUZ6TG1Wc1pXMWxiblF1YUdWcFoyaDBJQzBnZVNrN1hHNWNiaUFnSUNBZ0lDQWdMeTlqYjI1emIyeGxMbXh2WnloY0luSmxibVJsY21sdVp5NHVMbHdpS1Z4dVhHNGdJQ0FnSUNCOVhHNWNiaUFnSUNCOVhHNWNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQkZjWFZwZG1Gc1pXNTBJSFJ2SUZ3aWNHRjBZMmhwYm1jZ2FXNWNJaUJoYmlCaGRXUnBieUJ1YjJSbElIUnZJSFpwYzNWaGJHbDZaUzRnVGs5VVJUb2dXVzkxSUdOaGJtNXZkQ0JqYjI1dVpXTjBJR0YxWkdsdklHNXZaR1Z6SUdGamNtOXpjeUIwZDI4Z1pHbG1abVZ5Wlc1MElHRjFaR2x2SUdOdmJuUmxlSFJ6TGlCT1pYaDFjMVZKSUhKMWJuTWdhWFJ6SUdGMVpHbHZJR0Z1WVd4NWMybHpJRzl1SUdsMGN5QnZkMjRnWVhWa2FXOGdZMjl1ZEdWNGRDd2dUbVY0ZFhNdVkyOXVkR1Y0ZEM0Z1NXWWdkR2hsSUdGMVpHbHZJRzV2WkdVZ2VXOTFJR0Z5WlNCMmFYTjFZV3hwZW1sdVp5QnBjeUJqY21WaGRHVmtJRzl1SUdFZ1pHbG1abVZ5Wlc1MElHRjFaR2x2SUdOdmJuUmxlSFFzSUhsdmRTQjNhV3hzSUc1bFpXUWdkRzhnZEdWc2JDQk9aWGgxYzFWSklIUnZJSFZ6WlNCMGFHRjBJR052Ym5SbGVIUWdhVzV6ZEdWaFpEb2dhUzVsTGlCT1pYaDFjeTVqYjI1MFpYaDBJRDBnV1c5MWNrRjFaR2x2UTI5dWRHVjRkRTVoYldVdUlFWnZjaUJsZUdGdGNHeGxMQ0JwYmlCVWIyNWxTbE1nY0hKdmFtVmpkSE1zSUhSb1pTQnNhVzVsSUhkdmRXeGtJR0psT2lCT1pYaDFjeTVqYjI1MFpYaDBJRDBnVkc5dVpTNWpiMjUwWlhoMElDNGdWMlVnY21WamIyMXRaVzVrSUhSb1lYUWdlVzkxSUhkeWFYUmxJSFJvWVhRZ2JHbHVaU0J2WmlCamIyUmxJRzl1YkhrZ2IyNWpaU0JoZENCMGFHVWdZbVZuYVc1dWFXNW5JRzltSUhsdmRYSWdjSEp2YW1WamRDNWNiaUFnUUhCaGNtRnRJRzV2WkdVZ2UwRjFaR2x2VG05a1pYMGdWR2hsSUdGMVpHbHZJRzV2WkdVZ2RHOGdkbWx6ZFdGc2FYcGxYRzRnSUVCd1lYSmhiU0JqYUdGdWJtVnNjeUI3Ym5WdFltVnlmU0FvYjNCMGFXOXVZV3dwSUZSb1pTQnVkVzFpWlhJZ2IyWWdZMmhoYm01bGJITWdhVzRnZEdobElITnZkWEpqWlNCdWIyUmxJSFJ2SUhkaGRHTm9MaUJKWmlCdWIzUWdjM0JsWTJsbWFXVmtMQ0IwYUdVZ2FXNTBaWEptWVdObElIZHBiR3dnYkc5dmF5Qm1iM0lnWVNBdVkyaGhibTVsYkVOdmRXNTBJSEJ5YjNCbGNuUjVJRzl1SUhSb1pTQnBibkIxZENCdWIyUmxMaUJKWmlCcGRDQmtiMlZ6SUc1dmRDQmxlR2x6ZEN3Z2RHaGxJR2x1ZEdWeVptRmpaU0IzYVd4c0lHUmxabUYxYkhRZ2RHOGdNU0JqYUdGdWJtVnNMbHh1SUNCQVpYaGhiWEJzWlNCT1pYaDFjeTVqYjI1MFpYaDBJRDBnVkc5dVpTNWpiMjUwWlhoMElDOHZJRzl5SUdGdWIzUm9aWElnWVhWa2FXOGdZMjl1ZEdWNGRDQjViM1VnYUdGMlpTQmpjbVZoZEdWa1hHNGdJRzFsZEdWeUxtTnZibTVsWTNRb0lGUnZibVV1VFdGemRHVnlMQ0F5SUNrN1hHNGdJQ292WEc1Y2JpQWdZMjl1Ym1WamRDaHViMlJsTEdOb1lXNXVaV3h6S1NCN1hHNGdJQ0FnYVdZZ0tIUm9hWE11YzI5MWNtTmxLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtUnBjMk52Ym01bFkzUW9LVHRjYmlBZ0lDQjlYRzRnSUNBZ0x5OTBhR2x6TG1SMWJXMTVMbVJwYzJOdmJtNWxZM1FvZEdocGN5NXpjR3hwZEhSbGNpazdYRzVjYmlBZ0lDQnBaaUFvWTJoaGJtNWxiSE1wSUh0Y2JpQWdJQ0FnSUhSb2FYTXVZMmhoYm01bGJITWdQU0JqYUdGdWJtVnNjenRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLRzV2WkdVdVkyaGhibTVsYkVOdmRXNTBLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtTm9ZVzV1Wld4eklEMGdibTlrWlM1amFHRnVibVZzUTI5MWJuUTdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhSb2FYTXVZMmhoYm01bGJITWdQU0F5TzF4dUlDQWdJSDFjYmlBZ0lDQjBhR2x6TG0xbGRHVnlWMmxrZEdnZ1BTQjBhR2x6TG1OaGJuWmhjeTVsYkdWdFpXNTBMbmRwWkhSb0wzUm9hWE11WTJoaGJtNWxiSE03WEc1Y2JpQWdJQ0IwYUdsekxuTnZkWEpqWlNBOUlHNXZaR1U3WEc0Z0lDQWdkR2hwY3k1emIzVnlZMlV1WTI5dWJtVmpkQ2gwYUdsekxuTndiR2wwZEdWeUtUdGNibHh1SUNBdkx5QWdkR2hwY3k1eVpXNWtaWElvS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNCVGRHOXdJSFpwYzNWaGJHbDZhVzVuSUhSb1pTQnpiM1Z5WTJVZ2JtOWtaU0JoYm1RZ1pHbHpZMjl1Ym1WamRDQnBkQzVjYmlBZ0tpOWNiaUFnWkdselkyOXVibVZqZENncElIdGNibHh1SUNBZ0lIUm9hWE11YzI5MWNtTmxMbVJwYzJOdmJtNWxZM1FvZEdocGN5NXpjR3hwZEhSbGNpazdYRzRnSUNBZ2RHaHBjeTV6YjNWeVkyVWdQU0JtWVd4elpUdGNiaUFnTHk4Z0lIUm9hWE11WkhWdGJYa3VZMjl1Ym1WamRDaDBhR2x6TG5Od2JHbDBkR1Z5S1R0Y2JpQWdJQ0IwYUdsekxtMWxkR1Z5VjJsa2RHZ2dQU0IwYUdsekxtTmhiblpoY3k1bGJHVnRaVzUwTG5kcFpIUm9MM1JvYVhNdVkyaGhibTVsYkhNN1hHNWNiaUFnZlZ4dVhHNGdJR05zYVdOcktDa2dlMXh1SUNBZ0lIUm9hWE11WVdOMGFYWmxJRDBnSVhSb2FYTXVZV04wYVhabE8xeHVJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtDazdYRzRnSUgxY2JseHVJQ0JqZFhOMGIyMUVaWE4wY205NUtDa2dlMXh1SUNBZ0lIUm9hWE11WVdOMGFYWmxJRDBnWm1Gc2MyVTdYRzRnSUgxY2JseHVmVnh1WEc1Y2JseHVMeThnVjBWQ1VFRkRTeUJHVDA5VVJWSWdMeTljYmk4dklDNHZmaTlxYzJocGJuUXRiRzloWkdWeUlTNHZiR2xpTDJsdWRHVnlabUZqWlhNdmJXVjBaWEl1YW5NaUxDSW5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JteGxkQ0JrYjIwZ1BTQnlaWEYxYVhKbEtDY3VMaTkxZEdsc0wyUnZiU2NwTzF4dWJHVjBJRWx1ZEdWeVptRmpaU0E5SUhKbGNYVnBjbVVvSnk0dUwyTnZjbVV2YVc1MFpYSm1ZV05sSnlrN1hHNWNiaThxS2x4dUtpQlBjMk5wYkd4dmMyTnZjR1ZjYmlwY2Jpb2dRR1JsYzJOeWFYQjBhVzl1SUZacGMzVmhiR2w2WlhNZ1lTQjNZWFpsWm05eWJTZHpJSE4wY21WaGJTQnZaaUIyWVd4MVpYTXVYRzRxWEc0cUlFQmtaVzF2SUR4emNHRnVJRzVsZUhWekxYVnBQVndpYjNOamFXeHNiM05qYjNCbFhDSStQQzl6Y0dGdVBseHVLbHh1S2lCQVpYaGhiWEJzWlZ4dUtpQjJZWElnYjNOamFXeHNiM05qYjNCbElEMGdibVYzSUU1bGVIVnpMazl6WTJsc2JHOXpZMjl3WlNnbkkzUmhjbWRsZENjcFhHNHFYRzRxSUVCbGVHRnRjR3hsWEc0cUlIWmhjaUJ2YzJOcGJHeHZjMk52Y0dVZ1BTQnVaWGNnVG1WNGRYTXVUM05qYVd4c2IzTmpiM0JsS0NjamRHRnlaMlYwSnl4N1hHNHFJQ0FnSjNOcGVtVW5PaUJiTXpBd0xERTFNRjFjYmlvZ2ZTbGNiaXBjYmlvZ1FHOTFkSEIxZEZ4dUtpQW1ibUp6Y0R0Y2Jpb2dUbThnWlhabGJuUnpYRzRxWEc0cUwxeHVYRzVwYlhCdmNuUWdleUJqYjI1MFpYaDBJSDBnWm5KdmJTQW5MaTR2YldGcGJpYzdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR05zWVhOeklFOXpZMmxzYkc5elkyOXdaU0JsZUhSbGJtUnpJRWx1ZEdWeVptRmpaU0I3WEc1Y2JpQWdZMjl1YzNSeWRXTjBiM0lvS1NCN1hHNWNiaUFnSUNCc1pYUWdiM0IwYVc5dWN5QTlJRnNuYzJOaGJHVW5MQ2QyWVd4MVpTZGRPMXh1WEc0Z0lDQWdiR1YwSUdSbFptRjFiSFJ6SUQwZ2UxeHVJQ0FnSUNBZ0ozTnBlbVVuT2lCYk16QXdMREUxTUYxY2JpQWdJQ0I5TzF4dVhHNGdJQ0FnYzNWd1pYSW9ZWEpuZFcxbGJuUnpMRzl3ZEdsdmJuTXNaR1ZtWVhWc2RITXBPMXh1WEc0Z0lDQWdkR2hwY3k1amIyNTBaWGgwSUQwZ1kyOXVkR1Y0ZENncE95QXZMeUJxYzJocGJuUWdhV2R1YjNKbE9teHBibVZjYmx4dUlDQWdJSFJvYVhNdVlXNWhiSGx6WlhJZ1BTQjBhR2x6TG1OdmJuUmxlSFF1WTNKbFlYUmxRVzVoYkhselpYSW9LVHRjYmlBZ0lDQjBhR2x6TG1GdVlXeDVjMlZ5TG1abWRGTnBlbVVnUFNBeU1EUTRPMXh1SUNBZ0lIUm9hWE11WW5WbVptVnlUR1Z1WjNSb0lEMGdkR2hwY3k1aGJtRnNlWE5sY2k1bWNtVnhkV1Z1WTNsQ2FXNURiM1Z1ZER0Y2JpQWdJQ0IwYUdsekxtUmhkR0ZCY25KaGVTQTlJRzVsZHlCVmFXNTBPRUZ5Y21GNUtIUm9hWE11WW5WbVptVnlUR1Z1WjNSb0tUdGNiaUFnSUNCMGFHbHpMbUZ1WVd4NWMyVnlMbWRsZEVKNWRHVlVhVzFsUkc5dFlXbHVSR0YwWVNoMGFHbHpMbVJoZEdGQmNuSmhlU2s3WEc1Y2JpQWdJQ0IwYUdsekxtRmpkR2wyWlNBOUlIUnlkV1U3WEc1Y2JpQWdJQ0IwYUdsekxuTnZkWEpqWlNBOUlHWmhiSE5sTzF4dVhHNGdJQ0FnZEdocGN5NXBibWwwS0NrN1hHNWNiaUFnSUNCMGFHbHpMbkpsYm1SbGNpZ3BPMXh1SUNCOVhHNWNiaUFnWW5WcGJHUkdjbUZ0WlNncElIdGNiaUFnSUNCMGFHbHpMbU5oYm5aaGN5QTlJRzVsZHlCa2IyMHVVMjFoY25SRFlXNTJZWE1vZEdocGN5NXdZWEpsYm5RcE8xeHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRDQTlJSFJvYVhNdVkyRnVkbUZ6TG1Wc1pXMWxiblE3WEc0Z0lIMWNibHh1SUNCemFYcGxTVzUwWlhKbVlXTmxLQ2tnZTF4dUlDQWdJSFJvYVhNdVkyRnVkbUZ6TG5KbGMybDZaU2gwYUdsekxuZHBaSFJvTEhSb2FYTXVhR1ZwWjJoMEtUdGNiaUFnZlZ4dVhHNGdJR052Ykc5eVNXNTBaWEptWVdObEtDa2dlMXh1SUNBZ0lIUm9hWE11WTJGdWRtRnpMbVZzWlcxbGJuUXVjM1I1YkdVdVltRmphMmR5YjNWdVpFTnZiRzl5SUQwZ2RHaHBjeTVqYjJ4dmNuTXVabWxzYkR0Y2JpQWdmVnh1WEc0Z0lISmxibVJsY2lncElIdGNibHh1SUNBZ0lHbG1JQ2gwYUdsekxtRmpkR2wyWlNrZ2UxeHVJQ0FnSUNBZ2NtVnhkV1Z6ZEVGdWFXMWhkR2x2YmtaeVlXMWxLSFJvYVhNdWNtVnVaR1Z5TG1KcGJtUW9kR2hwY3lrcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhSb2FYTXVZVzVoYkhselpYSXVaMlYwUW5sMFpWUnBiV1ZFYjIxaGFXNUVZWFJoS0hSb2FYTXVaR0YwWVVGeWNtRjVLVHRjYmx4dUlDQWdJSFJvYVhNdVkyRnVkbUZ6TG1OdmJuUmxlSFF1Wm1sc2JGTjBlV3hsSUQwZ2RHaHBjeTVqYjJ4dmNuTXVabWxzYkR0Y2JpQWdJQ0IwYUdsekxtTmhiblpoY3k1amIyNTBaWGgwTG1acGJHeFNaV04wS0RBc0lEQXNJSFJvYVhNdVkyRnVkbUZ6TG1Wc1pXMWxiblF1ZDJsa2RHZ3NJSFJvYVhNdVkyRnVkbUZ6TG1Wc1pXMWxiblF1YUdWcFoyaDBLVHRjYmx4dUlDQWdJSFJvYVhNdVkyRnVkbUZ6TG1OdmJuUmxlSFF1YkdsdVpWZHBaSFJvSUQwZ2ZuNG9kR2hwY3k1b1pXbG5hSFFnTHlBeE1EQWdLeUF5S1R0Y2JpQWdJQ0IwYUdsekxtTmhiblpoY3k1amIyNTBaWGgwTG5OMGNtOXJaVk4wZVd4bElEMGdkR2hwY3k1amIyeHZjbk11WVdOalpXNTBPMXh1WEc0Z0lDQWdkR2hwY3k1allXNTJZWE11WTI5dWRHVjRkQzVpWldkcGJsQmhkR2dvS1R0Y2JseHVJQ0FnSUdsbUlDaDBhR2x6TG5OdmRYSmpaU2tnZTF4dVhHNGdJQ0FnSUNCMllYSWdjMnhwWTJWWGFXUjBhQ0E5SUhSb2FYTXVZMkZ1ZG1GekxtVnNaVzFsYm5RdWQybGtkR2dnS2lBeExqQWdMeUIwYUdsekxtSjFabVpsY2t4bGJtZDBhRHRjYmlBZ0lDQWdJSFpoY2lCNElEMGdNRHRjYmx4dUlDQWdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUENCMGFHbHpMbUoxWm1abGNreGxibWQwYURzZ2FTc3JLU0I3WEc1Y2JpQWdJQ0FnSUNBZ2RtRnlJSFlnUFNCMGFHbHpMbVJoZEdGQmNuSmhlVnRwWFNBdklERXlPQzR3TzF4dUlDQWdJQ0FnSUNCMllYSWdlU0E5SUhZZ0tpQjBhR2x6TG1OaGJuWmhjeTVsYkdWdFpXNTBMbWhsYVdkb2RDQXZJREk3WEc1Y2JpQWdJQ0FnSUNBZ2FXWWdLR2tnUFQwOUlEQXBJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbU5oYm5aaGN5NWpiMjUwWlhoMExtMXZkbVZVYnloNExDQjVLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbU5oYm5aaGN5NWpiMjUwWlhoMExteHBibVZVYnloNExDQjVLVHRjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lIZ2dLejBnYzJ4cFkyVlhhV1IwYUR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0IwYUdsekxtTmhiblpoY3k1amIyNTBaWGgwTG0xdmRtVlVieWd3TENCMGFHbHpMbU5oYm5aaGN5NWxiR1Z0Wlc1MExtaGxhV2RvZEM4eUtUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1allXNTJZWE11WTI5dWRHVjRkQzVzYVc1bFZHOG9kR2hwY3k1allXNTJZWE11Wld4bGJXVnVkQzUzYVdSMGFDd2dkR2hwY3k1allXNTJZWE11Wld4bGJXVnVkQzVvWldsbmFIUXZNaWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdkR2hwY3k1allXNTJZWE11WTI5dWRHVjRkQzV6ZEhKdmEyVW9LVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0JGY1hWcGRtRnNaVzUwSUhSdklGd2ljR0YwWTJocGJtY2dhVzVjSWlCaGJpQmhkV1JwYnlCdWIyUmxJSFJ2SUhacGMzVmhiR2w2WlM0Z1RrOVVSVG9nV1c5MUlHTmhibTV2ZENCamIyNXVaV04wSUdGMVpHbHZJRzV2WkdWeklHRmpjbTl6Y3lCMGQyOGdaR2xtWm1WeVpXNTBJR0YxWkdsdklHTnZiblJsZUhSekxpQk9aWGgxYzFWSklISjFibk1nYVhSeklHRjFaR2x2SUdGdVlXeDVjMmx6SUc5dUlHbDBjeUJ2ZDI0Z1lYVmthVzhnWTI5dWRHVjRkQ3dnVG1WNGRYTXVZMjl1ZEdWNGRDNGdTV1lnZEdobElHRjFaR2x2SUc1dlpHVWdlVzkxSUdGeVpTQjJhWE4xWVd4cGVtbHVaeUJwY3lCamNtVmhkR1ZrSUc5dUlHRWdaR2xtWm1WeVpXNTBJR0YxWkdsdklHTnZiblJsZUhRc0lIbHZkU0IzYVd4c0lHNWxaV1FnZEc4Z2RHVnNiQ0JPWlhoMWMxVkpJSFJ2SUhWelpTQjBhR0YwSUdOdmJuUmxlSFFnYVc1emRHVmhaRG9nYVM1bExpQk9aWGgxY3k1amIyNTBaWGgwSUQwZ1dXOTFja0YxWkdsdlEyOXVkR1Y0ZEU1aGJXVXVJRVp2Y2lCbGVHRnRjR3hsTENCcGJpQlViMjVsU2xNZ2NISnZhbVZqZEhNc0lIUm9aU0JzYVc1bElIZHZkV3hrSUdKbE9pQk9aWGgxY3k1amIyNTBaWGgwSUQwZ1ZHOXVaUzVqYjI1MFpYaDBJQzRnVjJVZ2NtVmpiMjF0Wlc1a0lIUm9ZWFFnZVc5MUlIZHlhWFJsSUhSb1lYUWdiR2x1WlNCdlppQmpiMlJsSUc5dWJIa2diMjVqWlNCaGRDQjBhR1VnWW1WbmFXNXVhVzVuSUc5bUlIbHZkWElnY0hKdmFtVmpkQzVjYmlBZ1FIQmhjbUZ0SUc1dlpHVWdlMEYxWkdsdlRtOWtaWDBnVkdobElHRjFaR2x2SUc1dlpHVWdkRzhnZG1semRXRnNhWHBsWEc0Z0lFQmxlR0Z0Y0d4bElFNWxlSFZ6TG1OdmJuUmxlSFFnUFNCVWIyNWxMbU52Ym5SbGVIUWdMeThnYjNJZ1lXNXZkR2hsY2lCaGRXUnBieUJqYjI1MFpYaDBJSGx2ZFNCb1lYWmxJR055WldGMFpXUmNiaUFnYjNOamFXeHNiM05qYjNCbExtTnZibTVsWTNRb0lGUnZibVV1VFdGemRHVnlJQ2s3WEc0Z0lDb3ZYRzVjYmlBZ1kyOXVibVZqZENodWIyUmxLU0I3WEc1Y2JpQWdJQ0JwWmlBb2RHaHBjeTV6YjNWeVkyVXBJSHRjYmlBZ0lDQWdJSFJvYVhNdVpHbHpZMjl1Ym1WamRDZ3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11YzI5MWNtTmxJRDBnYm05a1pUdGNiaUFnSUNCMGFHbHpMbk52ZFhKalpTNWpiMjV1WldOMEtIUm9hWE11WVc1aGJIbHpaWElwTzF4dVhHNGdJQ0FnZEdocGN5NXlaVzVrWlhJb0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQlRkRzl3SUhacGMzVmhiR2w2YVc1bklIUm9aU0J6YjNWeVkyVWdibTlrWlNCaGJtUWdaR2x6WTI5dWJtVmpkQ0JwZEM1Y2JpQWdLaTljYmlBZ1pHbHpZMjl1Ym1WamRDZ3BJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NXpiM1Z5WTJVcElIdGNiaUFnSUNBZ0lIUm9hWE11YzI5MWNtTmxMbVJwYzJOdmJtNWxZM1FvZEdocGN5NWhibUZzZVhObGNpazdYRzRnSUNBZ0lDQjBhR2x6TG5OdmRYSmpaU0E5SUc1MWJHdzdYRzRnSUNBZ2ZWeHVYRzRnSUgxY2JseHVJQ0JqYkdsamF5Z3BJSHRjYmlBZ0lDQjBhR2x6TG1GamRHbDJaU0E5SUNGMGFHbHpMbUZqZEdsMlpUdGNiaUFnSUNCMGFHbHpMbkpsYm1SbGNpZ3BPMXh1SUNCOVhHNWNiaUFnWTNWemRHOXRSR1Z6ZEhKdmVTZ3BJSHRjYmlBZ0lDQjBhR2x6TG1GamRHbDJaU0E5SUdaaGJITmxPMXh1SUNCOVhHNWNibjFjYmx4dVhHNWNiaTh2SUZkRlFsQkJRMHNnUms5UFZFVlNJQzh2WEc0dkx5QXVMMzR2YW5Ob2FXNTBMV3h2WVdSbGNpRXVMMnhwWWk5cGJuUmxjbVpoWTJWekwyOXpZMmxzYkc5elkyOXdaUzVxY3lJc0lpOHFYRzVOWVdsdUlHTnZibU5sY0hRNlhHNXplVzUwYUNBOUlHNWxkeUJPWlhoMWN5NVNZV05yS0NkbGJHVnRaVzUwU1VRbktUdGNibHh1VkhKaGJuTm1iM0p0SUdGc2JDQmxiR1Z0Wlc1MGN5QnBibk5wWkdVZ2RHaGxJR1JwZGx4dWMzbHVkR2d1Wld4bGJXVnVkRWxFSUhkcGJHd2dhRzlzWkNCMGFHVWdabWx5YzNRZ2MyeHBaR1Z5SUdsdWRHVnlabUZqWlZ4dVhHNHlLU0JKYmlCbWRYUjFjbVVzSUhCdmRHVnVkR2xoYkd4NUlIZHlhWFJwYm1jZ1lTQnlZV05ySUhSb1lYUWdhWE1nY21VdGRYTmhZbXhsUDF4dVEyOTFiR1FnWVd4emJ5QjBZV3RsSUVwVFQwNWNibHh1Ym1WM0lFNWxlSFZ6TGxKaFkyc29KeU4wWVhKblpYUW5MSHRjYmlBZ2NISmxPaUFvS1NBOVBpQjdYRzRnSUNBZ1kzSmxZWFJsSUhOdmJXVWdaR2wyY3lCb1pYSmxMQ0J2Y2lCemIyMWxJR0YxWkdsdklHTnZaR1ZjYmlBZ2ZTeGNiaUFnYVc1MFpYSm1ZV05sT2lCN1hHNGdJQ0FnYzJ4cFpHVnlNVG9nVG1WNGRYTXVZV1JrTG5Oc2FXUmxjaWg3WEc0Z0lDQWdJQ0IwYjNBNk1UQXNYRzRnSUNBZ0lDQnNaV1owT2pFd0xGeHVJQ0FnSUNBZ2QybGtkR2c2TlRBc1hHNGdJQ0FnSUNCb1pXbG5hSFE2TVRBd0xGeHVJQ0FnSUNBZ2JXbHVPaUF3TEZ4dUlDQWdJQ0FnYldGNE9pQXhNREFzWEc0Z0lDQWdJQ0J6ZEdWd09pQXhYRzRnSUNBZ2ZTa3NYRzRnSUNBZ2QyRjJaVEU2SUU1bGVIVnpMbUZrWkM1M1lYWmxabTl5YlNoN1hHNGdJQ0FnSUNCbWFXeGxPaUFuTGk5d1lYUm9MM1J2TDJacGJHVXViWEF6Snl4Y2JpQWdJQ0FnSUhkcFpIUm9PalV3TUN4Y2JpQWdJQ0FnSUdobGFXZG9kRG94TURBc1hHNGdJQ0FnSUNCdGIyUmxPaUFuY21GdVoyVW5YRzRnSUNBZ2ZTbGNiaUFnZlN4Y2JpQWdhVzVwZERvZ0tDa2dQVDRnZTF4dUlDQWdJQzh2SUhOdmJXVWdZWFZrYVc4Z2FXNXBkQ0JqYjJSbElHZHZaWE1nYUdWeVpTNHVMbHh1SUNCOVhHNTlLVHRjYmx4dUtpOWNibHh1YVcxd2IzSjBJQ29nWVhNZ2RISmhibk5tYjNKdElHWnliMjBnSnk0dUwzVjBhV3d2ZEhKaGJuTm1iM0p0Snp0Y2JtbHRjRzl5ZENCa2IyMGdabkp2YlNBbkxpNHZkWFJwYkM5a2IyMG5PMXh1WEc1cGJYQnZjblFnZXlCamIyeHZjbk1nZlNCbWNtOXRJQ2N1TGk5dFlXbHVKenRjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnWTJ4aGMzTWdVbUZqYXlCN1hHNWNiaUFnWTI5dWMzUnlkV04wYjNJb2RHRnlaMlYwTENCelpYUjBhVzVuY3lrZ2UxeHVYRzRnSUNBZ2RHaHBjeTV0WlhSaElEMGdlMzA3WEc0Z0lDQWdkR2hwY3k1dFpYUmhMblJoY21kbGRDQTlJSFJoY21kbGREdGNiaUFnSUNCMGFHbHpMbTFsZEdFdWNHRnlaVzUwSUQwZ1pHOXRMbkJoY25ObFJXeGxiV1Z1ZENoMFlYSm5aWFFwT3lBdkx5QnphRzkxYkdRZ1ltVWdZU0JuWlc1bGNtbGpJR1oxYm1OMGFXOXVJR1p2Y2lCd1lYSnphVzVuSUdFZ0ozUmhjbWRsZENjZ1lYSm5kVzFsYm5RZ2RHaGhkQ0JqYUdWamEzTWdabTl5SUhOMGNtbHVaeTlFVDAwdmFsRlZSVkpaWEc0Z0lDQWdkR2hwY3k1dFpYUmhMbU52Ykc5eWN5QTlJSHQ5TzF4dVhHNGdJQ0FnYVdZZ0tITmxkSFJwYm1kektTQjdYRzRnSUNBZ0lDQjBhR2x6TG0xbGRHRXVZWFIwY21saWRYUmxJRDBnYzJWMGRHbHVaM011WVhSMGNtbGlkWFJsSUh4OElDZHVaWGgxY3kxMWFTYzdYRzRnSUNBZ0lDQjBhR2x6TG0xbGRHRXVkR2wwYkdVZ1BTQnpaWFIwYVc1bmN5NXVZVzFsSUh4OElHWmhiSE5sTzF4dUlDQWdJQ0FnZEdocGN5NXRaWFJoTG05d1pXNGdQU0J6WlhSMGFXNW5jeTV2Y0dWdUlIeDhJR1poYkhObE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0IwYUdsekxtMWxkR0V1WVhSMGNtbGlkWFJsSUQwZ0oyNWxlSFZ6TFhWcEp6dGNiaUFnSUNBZ0lIUm9hWE11YldWMFlTNTBhWFJzWlNBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnZEdocGN5NXRaWFJoTG05d1pXNGdQU0JtWVd4elpUdGNiaUFnSUNCOVhHNWNiaUFnSUNCc1pYUWdaR1ZtWVhWc2RFTnZiRzl5Y3lBOUlHTnZiRzl5Y3lncE95QXZMeUJxYzJocGJuUWdhV2R1YjNKbE9teHBibVZjYmlBZ0lDQjBhR2x6TG0xbGRHRXVZMjlzYjNKekxtRmpZMlZ1ZENBOUlHUmxabUYxYkhSRGIyeHZjbk11WVdOalpXNTBPMXh1SUNBZ0lIUm9hWE11YldWMFlTNWpiMnh2Y25NdVptbHNiQ0E5SUdSbFptRjFiSFJEYjJ4dmNuTXVabWxzYkR0Y2JpQWdJQ0IwYUdsekxtMWxkR0V1WTI5c2IzSnpMbXhwWjJoMElEMGdaR1ZtWVhWc2RFTnZiRzl5Y3k1c2FXZG9kRHRjYmlBZ0lDQjBhR2x6TG0xbGRHRXVZMjlzYjNKekxtUmhjbXNnUFNCa1pXWmhkV3gwUTI5c2IzSnpMbVJoY21zN1hHNGdJQ0FnZEdocGN5NXRaWFJoTG1OdmJHOXljeTV0WldScGRXMU1hV2RvZENBOUlHUmxabUYxYkhSRGIyeHZjbk11YldWa2FYVnRUR2xuYUhRN1hHNGdJQ0FnZEdocGN5NXRaWFJoTG1OdmJHOXljeTV0WldScGRXMUVZWEpySUQwZ1pHVm1ZWFZzZEVOdmJHOXljeTV0WldScGRXMUVZWEpyTzF4dUlDQWdJSFJvYVhNdVluVnBiR1JKYm5SbGNtWmhZMlVvS1R0Y2JpQWdJQ0IwYUdsekxtTnZiRzl5U1c1MFpYSm1ZV05sS0NrN1hHNGdJSDFjYmx4dUlDQmlkV2xzWkVsdWRHVnlabUZqWlNncElIdGNiaUFnSUNCMGFHbHpMbTFsZEdFdWNHRnlaVzUwTG5OMGVXeGxMbUp2ZUZOcGVtbHVaeUE5SUNkaWIzSmtaWEl0WW05NEp6dGNiaUFnSUNCMGFHbHpMbTFsZEdFdWNHRnlaVzUwTG5OMGVXeGxMblZ6WlhKVFpXeGxZM1FnUFNBbmJtOXVaU2M3WEc0Z0lDQWdkR2hwY3k1dFpYUmhMbkJoY21WdWRDNXpkSGxzWlM1dGIzcFZjMlZ5VTJWc1pXTjBJRDBnSjI1dmJtVW5PMXh1SUNBZ0lIUm9hWE11YldWMFlTNXdZWEpsYm5RdWMzUjViR1V1ZDJWaWEybDBWWE5sY2xObGJHVmpkQ0E5SUNkdWIyNWxKenRjYmx4dUlDQWdJSFJvYVhNdWJXVjBZUzVqYjI1MFpXNTBjeUE5SUdSdlkzVnRaVzUwTG1OeVpXRjBaVVZzWlcxbGJuUW9KMlJwZGljcE8xeHVYRzRnSUNBZ2QyaHBiR1VnS0hSb2FYTXViV1YwWVM1d1lYSmxiblF1WTJocGJHUk9iMlJsY3k1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWJXVjBZUzVqYjI1MFpXNTBjeTVoY0hCbGJtUkRhR2xzWkNoMGFHbHpMbTFsZEdFdWNHRnlaVzUwTG1Ob2FXeGtUbTlrWlhOYk1GMHBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11YldWMFlTNWpiMjUwWlc1MGN5NXpkSGxzWlM1d1lXUmthVzVuSUQwZ0p6QndlQ2M3WEc0Z0lDQWdkR2hwY3k1dFpYUmhMbU52Ym5SbGJuUnpMbk4wZVd4bExtSnZlRk5wZW1sdVp5QTlJQ2RpYjNKa1pYSXRZbTk0Snp0Y2JseHVJQ0FnSUdsbUlDaDBhR2x6TG0xbGRHRXVkR2wwYkdVcElIdGNiaUFnSUNBZ0lIUm9hWE11YldWMFlTNTBhWFJzWlVKaGNpQTlJR1J2WTNWdFpXNTBMbU55WldGMFpVVnNaVzFsYm5Rb0oyUnBkaWNwTzF4dUlDQWdJQ0FnZEdocGN5NXRaWFJoTG5ScGRHeGxRbUZ5TG1sdWJtVnlTRlJOVENBOUlIUm9hWE11YldWMFlTNTBhWFJzWlR0Y2JpQWdJQ0FnSUhSb2FYTXViV1YwWVM1MGFYUnNaVUpoY2k1emRIbHNaUzVtYjI1MFJtRnRhV3g1SUQwZ0oyRnlhV0ZzSnp0Y2JpQWdJQ0FnSUhSb2FYTXViV1YwWVM1MGFYUnNaVUpoY2k1emRIbHNaUzV3YjNOcGRHbHZiaUE5SUNkeVpXeGhkR2wyWlNjN1hHNGdJQ0FnSUNCMGFHbHpMbTFsZEdFdWRHbDBiR1ZDWVhJdWMzUjViR1V1WTI5c2IzSWdQU0FuSXpnNE9DYzdYRzRnSUNBZ0lDQjBhR2x6TG0xbGRHRXVkR2wwYkdWQ1lYSXVjM1I1YkdVdWNHRmtaR2x1WnlBOUlDYzNjSGduTzF4dUlDQWdJQ0FnZEdocGN5NXRaWFJoTG5ScGRHeGxRbUZ5TG5OMGVXeGxMbVp2Ym5SVGFYcGxJRDBnSnpFeWNIZ25PMXh1WEc0Z0lDQWdJQ0IwYUdsekxtMWxkR0V1WW5WMGRHOXVJRDBnWkc5amRXMWxiblF1WTNKbFlYUmxSV3hsYldWdWRDZ25aR2wySnlrN1hHNGdJQ0FnSUNCMGFHbHpMbTFsZEdFdVluVjBkRzl1TG5OMGVXeGxMbkJ2YzJsMGFXOXVJRDBnSjJGaWMyOXNkWFJsSnp0Y2JpQWdJQ0FnSUhSb2FYTXViV1YwWVM1aWRYUjBiMjR1YzNSNWJHVXVkRzl3SUQwZ0p6VndlQ2NnTzF4dUlDQWdJQ0FnZEdocGN5NXRaWFJoTG1KMWRIUnZiaTV6ZEhsc1pTNXlhV2RvZENBOUlDYzFjSGduSUR0Y2JpQWdJQ0FnSUhSb2FYTXViV1YwWVM1aWRYUjBiMjR1YVc1dVpYSklWRTFNSUQwZ0p5MG5PMXh1SUNBZ0lDQWdkR2hwY3k1dFpYUmhMbUoxZEhSdmJpNXpkSGxzWlM1d1lXUmthVzVuSUQwZ0p6QndlQ0ExY0hnZ01uQjRKenRjYmlBZ0lDQWdJSFJvYVhNdWJXVjBZUzVpZFhSMGIyNHVjM1I1YkdVdWJHbHVaVWhsYVdkb2RDQTlJQ2N4TW5CNEp6dGNiaUFnSUNBZ0lIUm9hWE11YldWMFlTNWlkWFIwYjI0dWMzUjViR1V1Wm05dWRGTnBlbVVnUFNBbk1UVndlQ2M3WEc1Y2JpQWdJQ0FnSUhSb2FYTXViV1YwWVM1aWRYUjBiMjR1YzNSNWJHVXVZM1Z5YzI5eUlEMGdKM0J2YVc1MFpYSW5PMXh1WEc0Z0lDQWdJQ0IwYUdsekxtMWxkR0V1WW5WMGRHOXVMbUZrWkVWMlpXNTBUR2x6ZEdWdVpYSW9KMjF2ZFhObGIzWmxjaWNzSUNncElEMCtJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXRaWFJoTG1KMWRIUnZiaTV6ZEhsc1pTNWlZV05yWjNKdmRXNWtRMjlzYjNJZ1BTQjBhR2x6TG0xbGRHRXVZMjlzYjNKekxtMWxaR2wxYlVSaGNtczdYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJSFJvYVhNdWJXVjBZUzVpZFhSMGIyNHVZV1JrUlhabGJuUk1hWE4wWlc1bGNpZ25iVzkxYzJWc1pXRjJaU2NzSUNncElEMCtJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXRaWFJoTG1KMWRIUnZiaTV6ZEhsc1pTNWlZV05yWjNKdmRXNWtRMjlzYjNJZ1BTQjBhR2x6TG0xbGRHRXVZMjlzYjNKekxtMWxaR2wxYlV4cFoyaDBPMXh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0IwYUdsekxtMWxkR0V1WW5WMGRHOXVMbUZrWkVWMlpXNTBUR2x6ZEdWdVpYSW9KMk5zYVdOckp5d2dLQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NXRaWFJoTG05d1pXNHBJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbWhwWkdVb0tUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxuTm9iM2NvS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZTazdYRzVjYmx4dUlDQWdJQ0FnZEdocGN5NXRaWFJoTG5ScGRHeGxRbUZ5TG1Gd2NHVnVaRU5vYVd4a0tIUm9hWE11YldWMFlTNWlkWFIwYjI0cE8xeHVYRzRnSUNBZ0lDQjBhR2x6TG0xbGRHRXVjR0Z5Wlc1MExtRndjR1Z1WkVOb2FXeGtLSFJvYVhNdWJXVjBZUzUwYVhSc1pVSmhjaWs3WEc0Z0lDQWdmVnh1SUNBZ0lIUm9hWE11YldWMFlTNXdZWEpsYm5RdVlYQndaVzVrUTJocGJHUW9kR2hwY3k1dFpYUmhMbU52Ym5SbGJuUnpLVHRjYmx4dUlDQXZMeUFnZG1GeUlIZHBaSFJvSUQwZ2RHaHBjeTV0WlhSaExuQmhjbVZ1ZEM1emRIbHNaUzUzYVdSMGFDQTlJR2RsZEVOdmJYQjFkR1ZrVTNSNWJHVW9kR2hwY3k1dFpYUmhMbkJoY21WdWRDa3VaMlYwVUhKdmNHVnlkSGxXWVd4MVpTZ25kMmxrZEdnbktUdGNiaTh2SUNBZ0lIUm9hWE11YldWMFlTNXdZWEpsYm5RdWMzUjViR1V1ZDJsa2RHZ2dQU0IzYVdSMGFEdGNibHh1SUNBZ0lHeGxkQ0IxYVNBOUlIUnlZVzV6Wm05eWJTNXpaV04wYVc5dUtIUm9hWE11YldWMFlTNTBZWEpuWlhRc0lIUm9hWE11YldWMFlTNWhkSFJ5YVdKMWRHVXBPMXh1SUNBZ0lHWnZjaUFvZG1GeUlHdGxlU0JwYmlCMWFTa2dlMXh1SUNBZ0lDQWdkR2hwYzF0clpYbGRJRDBnZFdsYmEyVjVYVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0JqYjJ4dmNrbHVkR1Z5Wm1GalpTZ3BJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NXRaWFJoTG5ScGRHeGxLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtMWxkR0V1WW5WMGRHOXVMbk4wZVd4bExtSmhZMnRuY205MWJtUkRiMnh2Y2lBOUlIUm9hWE11YldWMFlTNWpiMnh2Y25NdWJXVmthWFZ0VEdsbmFIUTdYRzRnSUNBZ0lDQjBhR2x6TG0xbGRHRXVZblYwZEc5dUxuTjBlV3hsTG1KdmNtUmxjaUE5SUNkemIyeHBaQ0F3Y0hnZ0p5dDBhR2x6TG0xbGRHRXVZMjlzYjNKekxtWnBiR3c3WEc0Z0lDQWdJQ0IwYUdsekxtMWxkR0V1Y0dGeVpXNTBMbk4wZVd4bExtSnZjbVJsY2lBOUlDZHpiMnhwWkNBeGNIZ2dKeXQwYUdsekxtMWxkR0V1WTI5c2IzSnpMbTFsWkdsMWJVeHBaMmgwTzF4dUlDQWdJQ0FnZEdocGN5NXRaWFJoTG5CaGNtVnVkQzV6ZEhsc1pTNWlZV05yWjNKdmRXNWtRMjlzYjNJZ1BTQjBhR2x6TG0xbGRHRXVZMjlzYjNKekxteHBaMmgwTzF4dUlDQWdJQ0FnZEdocGN5NXRaWFJoTG5ScGRHeGxRbUZ5TG5OMGVXeGxMbUpoWTJ0bmNtOTFibVJEYjJ4dmNpQTlJSFJvYVhNdWJXVjBZUzVqYjJ4dmNuTXVabWxzYkR0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCemFHOTNLQ2tnZTF4dUlDQWdJSFJvYVhNdWJXVjBZUzVqYjI1MFpXNTBjeTV6ZEhsc1pTNWthWE53YkdGNUlEMGdKMkpzYjJOckp6dGNiaUFnSUNCMGFHbHpMbTFsZEdFdWIzQmxiaUE5SUhSeWRXVTdYRzRnSUgxY2JseHVJQ0JvYVdSbEtDa2dlMXh1SUNBZ0lIUm9hWE11YldWMFlTNWpiMjUwWlc1MGN5NXpkSGxzWlM1a2FYTndiR0Y1SUQwZ0oyNXZibVVuTzF4dUlDQWdJSFJvYVhNdWJXVjBZUzV2Y0dWdUlEMGdabUZzYzJVN1hHNGdJSDFjYmx4dUlDQmpiMnh2Y21sNlpTaDBlWEJsTEdOdmJHOXlLU0I3WEc0Z0lDQWdabTl5SUNoMllYSWdhMlY1SUdsdUlIUm9hWE1wSUh0Y2JpQWdJQ0FnSUdsbUlDaDBhR2x6VzJ0bGVWMHVZMjlzYjNKcGVtVXBJSHRjYmlBZ0lDQWdJQ0FnZEdocGMxdHJaWGxkTG1OdmJHOXlhWHBsS0hSNWNHVXNZMjlzYjNJcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0IwYUdsekxtMWxkR0V1WTI5c2IzSnpXM1I1Y0dWZElEMGdZMjlzYjNJN1hHNGdJQ0FnZEdocGN5NWpiMnh2Y2tsdWRHVnlabUZqWlNncE8xeHVJQ0I5WEc1Y2JpQWdaVzF3ZEhrb0tTQjdYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2EyVjVJR2x1SUhSb2FYTXBJSHRjYmlBZ0lDQWdJR2xtSUNoMGFHbHpXMnRsZVYwdVpHVnpkSEp2ZVNrZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6VzJ0bGVWMHVaR1Z6ZEhKdmVTZ3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnZlZ4dVhHNTlYRzVjYmx4dVhHNHZMeUJYUlVKUVFVTkxJRVpQVDFSRlVpQXZMMXh1THk4Z0xpOStMMnB6YUdsdWRDMXNiMkZrWlhJaExpOXNhV0l2WTI5eVpTOXlZV05yTG1weklpd2lKM1Z6WlNCemRISnBZM1FuTzF4dVhHNXBiWEJ2Y25RZ1pHOXRJR1p5YjIwZ0p5NHVMM1YwYVd3dlpHOXRKenRjYm1sdGNHOXlkQ0JKYm5SbGNtWmhZMlZ6SUdaeWIyMGdKeTR1TDJsdWRHVnlabUZqWlhNdkp6dGNibHh1YkdWMElHTnlaV0YwWlVsdWRHVnlabUZqWlVsRUlEMGdLSGRwWkdkbGRDeHBiblJsY21aaFkyVkpSSE1wSUQwK0lIdGNiaUFnYkdWMElIUjVjR1VnUFNCM2FXUm5aWFF1ZEhsd1pUdGNiaUFnYVdZZ0tHbHVkR1Z5Wm1GalpVbEVjMXQwZVhCbFhTa2dlMXh1SUNBZ0lHbHVkR1Z5Wm1GalpVbEVjMXQwZVhCbFhTc3JPMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJR2x1ZEdWeVptRmpaVWxFYzF0MGVYQmxYU0E5SURFN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUNnZ2RIbHdaU0FySUdsdWRHVnlabUZqWlVsRWMxdDBlWEJsWFNBcE8xeHVmVHRjYmx4dWJHVjBJR1ZzWlcxbGJuUWdQU0FvWld4bGJXVnVkQ3gwZVhCbExHOXdkR2x2Ym5NcElEMCtJSHRjYmlBZ2IzQjBhVzl1Y3lBOUlHOXdkR2x2Ym5NZ2ZId2dlMzA3WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2daV3hsYldWdWRDNWhkSFJ5YVdKMWRHVnpMbXhsYm1kMGFEc2dhU3NyS1h0Y2JpQWdJQ0JzWlhRZ1lYUjBJRDBnWld4bGJXVnVkQzVoZEhSeWFXSjFkR1Z6VzJsZE8xeHVJQ0F2THlBZ2RISjVJSHRjYmlBZ0x5OGdJQ0FnYjNCMGFXOXVjMXRoZEhRdWJtOWtaVTVoYldWZElEMGdaWFpoYkNoaGRIUXVibTlrWlZaaGJIVmxLVHRjYmlBZ0x5OGdJSDBnWTJGMFkyZ29aU2tnZTF4dUlDQWdJQ0FnYjNCMGFXOXVjMXRoZEhRdWJtOWtaVTVoYldWZElEMGdZWFIwTG01dlpHVldZV3gxWlR0Y2JpQWdMeThnSUgxY2JpQWdmVnh1SUNCMGVYQmxJRDBnZEhsd1pWc3dYUzUwYjFWd2NHVnlRMkZ6WlNncElDc2dkSGx3WlM1emJHbGpaU2d4S1R0Y2JpQWdiR1YwSUhkcFpHZGxkQ0E5SUc1bGR5QkpiblJsY21aaFkyVnpXM1I1Y0dWZEtHVnNaVzFsYm5Rc2IzQjBhVzl1Y3lrN1hHNGdJSGRwWkdkbGRDNXBaQ0E5SUdWc1pXMWxiblF1YVdRN1hHNGdJSEpsZEhWeWJpQjNhV1JuWlhRN1hHNTlPMXh1WEc1Y2JteGxkQ0J6WldOMGFXOXVJRDBnS0hCaGNtVnVkQ3hyWlhsM2IzSmtLU0E5UGlCN1hHNWNiaUFnYTJWNWQyOXlaQ0E5SUd0bGVYZHZjbVFnZkh3Z0oyNWxlSFZ6TFhWcEp6dGNibHh1SUNCc1pYUWdhVzUwWlhKbVlXTmxTVVJ6SUQwZ2UzMDdYRzVjYmlBZ2JHVjBJR052Ym5SaGFXNWxjaUE5SUdSdmJTNXdZWEp6WlVWc1pXMWxiblFvY0dGeVpXNTBLVHRjYmx4dUlDQnNaWFFnZFdrZ1BTQjdmVHRjYmx4dUlDQnNaWFFnYUhSdGJFVnNaVzFsYm5SeklEMGdZMjl1ZEdGcGJtVnlMbWRsZEVWc1pXMWxiblJ6UW5sVVlXZE9ZVzFsS0NjcUp5azdYRzRnSUd4bGRDQmxiR1Z0Wlc1MGN5QTlJRnRkTzF4dUlDQm1iM0lnS0d4bGRDQnBQVEE3SUdrOGFIUnRiRVZzWlcxbGJuUnpMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnWld4bGJXVnVkSE11Y0hWemFDaG9kRzFzUld4bGJXVnVkSE5iYVYwcE8xeHVJQ0I5WEc0Z0lHWnZjaUFvYkdWMElHazlNRHRwUEdWc1pXMWxiblJ6TG14bGJtZDBhRHRwS3lzcElIdGNiaUFnSUNCc1pYUWdkSGx3WlNBOUlHVnNaVzFsYm5SelcybGRMbWRsZEVGMGRISnBZblYwWlNoclpYbDNiM0prS1R0Y2JpQWdJQ0JwWmlBb2RIbHdaU2tnZTF4dUlDQWdJQ0FnYkdWMElHWnZjbTFoZEhSbFpGUjVjR1VnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJR1p2Y2lBb2JHVjBJR3RsZVNCcGJpQkpiblJsY21aaFkyVnpLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBlWEJsTG5SdlRHOTNaWEpEWVhObEtDazlQVDFyWlhrdWRHOU1iM2RsY2tOaGMyVW9LU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHWnZjbTFoZEhSbFpGUjVjR1VnUFNCclpYazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR052Ym5OdmJHVXViRzluS0dadmNtMWhkSFJsWkZSNWNHVXBPMXh1SUNBZ0lDQWdiR1YwSUhkcFpHZGxkQ0E5SUdWc1pXMWxiblFvWld4bGJXVnVkSE5iYVYwc1ptOXliV0YwZEdWa1ZIbHdaU2s3WEc0Z0lDQWdJQ0JwWmlBb2QybGtaMlYwTG1sa0tTQjdYRzRnSUNBZ0lDQWdJSFZwVzNkcFpHZGxkQzVwWkYwZ1BTQjNhV1JuWlhRN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCc1pYUWdhV1FnUFNCamNtVmhkR1ZKYm5SbGNtWmhZMlZKUkNoM2FXUm5aWFFzYVc1MFpYSm1ZV05sU1VSektUdGNiaUFnSUNBZ0lDQWdkV2xiYVdSZElEMGdkMmxrWjJWME8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCMWFUdGNibHh1ZlR0Y2JseHViR1YwSUdGa1pDQTlJQ2gwZVhCbExIQmhjbVZ1ZEN4dmNIUnBiMjV6S1NBOVBpQjdYRzRnSUd4bGRDQjBZWEpuWlhRZ1BTQmtiMk4xYldWdWRDNWpjbVZoZEdWRmJHVnRaVzUwS0Nka2FYWW5LVHRjYmlBZ2IzQjBhVzl1Y3lBOUlHOXdkR2x2Ym5NZ2ZId2dlMzA3WEc0Z0lHbG1JQ2h3WVhKbGJuUXBJSHRjYmlBZ0lDQndZWEpsYm5RZ1BTQmtiMjB1Y0dGeWMyVkZiR1Z0Wlc1MEtIQmhjbVZ1ZENrN1hHNGdJSDBnWld4elpTQjdYRzRnSUNBZ2NHRnlaVzUwSUQwZ1pHOWpkVzFsYm5RdVltOWtlVHRjYmlBZ2ZWeHVJQ0J3WVhKbGJuUXVZWEJ3Wlc1a1EyaHBiR1FvZEdGeVoyVjBLVHRjYmlBZ2IzQjBhVzl1Y3k1MFlYSm5aWFFnUFNCMFlYSm5aWFE3WEc0Z0lHbG1JQ2h2Y0hScGIyNXpMbk5wZW1VcElIdGNiaUFnSUNCMFlYSm5aWFF1YzNSNWJHVXVkMmxrZEdnZ1BTQnZjSFJwYjI1ekxuTnBlbVZiTUYwZ0t5QW5jSGduTzF4dUlDQWdJSFJoY21kbGRDNXpkSGxzWlM1b1pXbG5hSFFnUFNCdmNIUnBiMjV6TG5OcGVtVmJNVjBnS3lBbmNIZ25PMXh1SUNCOVhHNGdJSEpsZEhWeWJpQmxiR1Z0Wlc1MEtIUmhjbWRsZEN4MGVYQmxMRzl3ZEdsdmJuTXBPMXh1ZlR0Y2JseHVaWGh3YjNKMElIc2daV3hsYldWdWRDQjlPMXh1Wlhod2IzSjBJSHNnYzJWamRHbHZiaUI5TzF4dVpYaHdiM0owSUhzZ1lXUmtJSDA3WEc1Y2JseHVYRzR2THlCWFJVSlFRVU5MSUVaUFQxUkZVaUF2TDF4dUx5OGdMaTkrTDJwemFHbHVkQzFzYjJGa1pYSWhMaTlzYVdJdmRYUnBiQzkwY21GdWMyWnZjbTB1YW5NaUxDSW5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JtbHRjRzl5ZENCdFlYUm9JR1p5YjIwZ0p5NHVMM1YwYVd3dmJXRjBhQ2M3WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdOc1lYTnpJRlIxYm1VZ2UxeHVYRzRnSUdOdmJuTjBjblZqZEc5eUtDa2dlMXh1WEc0Z0lGeDBMeThnZEdobElITmpZV3hsSUdGeklISmhkR2x2YzF4dUlDQmNkSFJvYVhNdWMyTmhiR1VnUFNCYlhUdGNibHh1SUNCY2RDOHZJR2t2YnlCdGIyUmxjMXh1SUNCY2RIUm9hWE11Ylc5a1pTQTlJSHRjYmlBZ1hIUmNkRzkxZEhCMWREb2dKMlp5WlhGMVpXNWplU2NzWEc0Z0lGeDBYSFJwYm5CMWREb2dKM04wWlhBblhHNGdJRngwZlR0Y2JseHVJQ0JjZEM4dklFVlVJRzFoYW05eVhHNGdJRngwZEdocGN5NWxkRzFoYW05eUlEMGdXeUF5TmpFdU5qSTFOVGdzWEc0Z0lGeDBYSFF5T1RNdU5qWTBOelkwTEZ4dUlDQmNkRngwTXpJNUxqWXlOelUyTXl4Y2JpQWdYSFJjZERNME9TNHlNamd5TkRFc1hHNGdJRngwWEhRek9URXVPVGsxTkRJeUxGeHVJQ0JjZEZ4ME5EUXdMRnh1SUNCY2RGeDBORGt6TGpnNE16TXdNU3hjYmlBZ1hIUmNkRFV5TXk0eU5URXhObHh1SUNCY2RGMDdYRzVjYmlBZ1hIUXZMeUJTYjI5MElHWnlaWEYxWlc1amVTNWNiaUFnWEhSMGFHbHpMbkp2YjNRZ1BTQnRZWFJvTG0xMGIyWW9OakFwT3lBZ0lDQWdMeThnS2lCTllYUm9MbkJ2ZHlneUxDZzJNQzAyT1Nrdk1USXBPMXh1WEc0Z0lDQWdMeThnWkdWbVlYVnNkQ0JwY3lCaElHMWhhbTl5SUhOallXeGxYRzRnSUNBZ2RHaHBjeTVqY21WaGRHVlRZMkZzWlNnd0xESXNOQ3cxTERjc09Td3hNU2s3WEc1Y2JpQWdmVnh1WEc0Z0lDOHFJRkpsZEhWeWJpQmtZWFJoSUdsdUlIUm9aU0J0YjJSbElIbHZkU0JoY21VZ2FXNGdLR1p5WlhFc0lISmhkR2x2TENCdmNpQnRhV1JwS1NBcUwxeHVJQ0J1YjNSbEtHbHVjSFYwTEc5amRHRjJaU2tnZTF4dVhHNGdJRngwYkdWMElHNWxkM1poYkhWbE8xeHVYRzRnSUZ4MGFXWWdLSFJvYVhNdWJXOWtaUzV2ZFhSd2RYUWdQVDA5SUNkbWNtVnhkV1Z1WTNrbktTQjdYRzRnSUZ4MFhIUnVaWGQyWVd4MVpTQTlJSFJvYVhNdVpuSmxjWFZsYm1ONUtHbHVjSFYwTEc5amRHRjJaU2s3WEc0Z0lGeDBmU0JsYkhObElHbG1JQ2gwYUdsekxtMXZaR1V1YjNWMGNIVjBJRDA5UFNBbmNtRjBhVzhuS1NCN1hHNGdJRngwWEhSdVpYZDJZV3gxWlNBOUlIUm9hWE11Y21GMGFXOG9hVzV3ZFhRc2IyTjBZWFpsS1R0Y2JpQWdYSFI5SUdWc2MyVWdhV1lnS0hSb2FYTXViVzlrWlM1dmRYUndkWFFnUFQwOUlDZE5TVVJKSnlrZ2UxeHVJQ0JjZEZ4MGJtVjNkbUZzZFdVZ1BTQjBhR2x6TGsxSlJFa29hVzV3ZFhRc2IyTjBZWFpsS1R0Y2JpQWdYSFI5SUdWc2MyVWdlMXh1SUNCY2RGeDBibVYzZG1Gc2RXVWdQU0IwYUdsekxtWnlaWEYxWlc1amVTaHBibkIxZEN4dlkzUmhkbVVwTzF4dUlDQmNkSDFjYmx4dUlDQmNkSEpsZEhWeWJpQnVaWGQyWVd4MVpUdGNibHh1SUNCOVhHNWNibHh1SUNBdktpQlNaWFIxY200Z1puSmxjU0JrWVhSaElDb3ZYRzRnSUdaeVpYRjFaVzVqZVNoemRHVndTVzRzSUc5amRHRjJaVWx1S1NCN1hHNWNiaUFnWEhScFppQW9kR2hwY3k1dGIyUmxMbWx1Y0hWMElEMDlQU0FuYldsa2FTY2dmSHdnZEdocGN5NXRiMlJsTG1sdWNIVjBJRDA5UFNBblRVbEVTU2NnS1NCN1hHNGdJRngwWEhSMGFHbHpMbk4wWlhCSmJpQXJQU0EyTUR0Y2JpQWdYSFI5WEc1Y2JpQWdYSFF2THlCM2FHRjBJRzlqZEdGMlpTQnBjeUJ2ZFhJZ2FXNXdkWFJjYmlBZ1hIUnNaWFFnYjJOMFlYWmxJRDBnVFdGMGFDNW1iRzl2Y2loemRHVndTVzR2ZEdocGN5NXpZMkZzWlM1c1pXNW5kR2dwTzF4dVhHNGdJRngwYVdZZ0tHOWpkR0YyWlVsdUtTQjdYRzRnSUZ4MFhIUnZZM1JoZG1VZ0t6MGdiMk4wWVhabFNXNDdYRzRnSUZ4MGZWeHVYRzRnSUZ4MEx5OGdkMmhwWTJnZ2MyTmhiR1VnWkdWbmNtVmxJQ2d3SUMwZ2MyTmhiR1VnYkdWdVozUm9LU0JwY3lCdmRYSWdhVzV3ZFhSY2JpQWdYSFJzWlhRZ2MyTmhiR1ZFWldkeVpXVWdQU0J6ZEdWd1NXNGdKU0IwYUdsekxuTmpZV3hsTG14bGJtZDBhRHRjYmx4dUlDQmNkSGRvYVd4bElDaHpZMkZzWlVSbFozSmxaU0E4SURBcElIdGNiaUFnWEhSY2RITmpZV3hsUkdWbmNtVmxJQ3M5SUhSb2FYTXVjMk5oYkdVdWJHVnVaM1JvTzF4dUlDQmNkSDFjYmx4dUlDQWdJR3hsZENCeVlYUnBieUE5SUhSb2FYTXVjMk5oYkdWYmMyTmhiR1ZFWldkeVpXVmRPMXh1WEc0Z0lGeDBiR1YwSUdaeVpYRWdQU0IwYUdsekxuSnZiM1FnS2lCeVlYUnBienRjYmx4dUlDQmNkR1p5WlhFZ1BTQm1jbVZ4S2loTllYUm9MbkJ2ZHlneUxHOWpkR0YyWlNrcE8xeHVYRzRnSUZ4MEx5OGdkSEoxYm1OaGRHVWdhWEp5WVhScGIyNWhiQ0J1ZFcxaVpYSnpYRzRnSUZ4MFpuSmxjU0E5SUUxaGRHZ3VabXh2YjNJb1puSmxjU294TURBd01EQXdNREF3TURBcEx6RXdNREF3TURBd01EQXdNRHRjYmx4dUlDQmNkSEpsZEhWeWJpQm1jbVZ4TzF4dVhHNGdJSDFjYmx4dUlDQXZLaUJHYjNKalpTQnlaWFIxY200Z2NtRjBhVzhnWkdGMFlTQXFMMXh1WEc0Z0lISmhkR2x2S0hOMFpYQkpiaXdnYjJOMFlYWmxTVzRwSUh0Y2JseHVJQ0JjZEdsbUlDaDBhR2x6TG0xdlpHVXVhVzV3ZFhRZ1BUMDlJQ2R0YVdScEp5QjhmQ0IwYUdsekxtMXZaR1V1YVc1d2RYUWdQVDA5SUNkTlNVUkpKeUFwSUh0Y2JpQWdYSFJjZEhSb2FYTXVjM1JsY0VsdUlDczlJRFl3TzF4dUlDQmNkSDFjYmx4dUlDQmNkQzh2SUhkb1lYUWdiMk4wWVhabElHbHpJRzkxY2lCcGJuQjFkRnh1SUNCY2RHeGxkQ0J2WTNSaGRtVWdQU0JOWVhSb0xtWnNiMjl5S0hOMFpYQkpiaTkwYUdsekxuTmpZV3hsTG14bGJtZDBhQ2s3WEc1Y2JpQWdYSFJwWmlBb2IyTjBZWFpsU1c0cElIdGNiaUFnWEhSY2RHOWpkR0YyWlNBclBTQnZZM1JoZG1WSmJqdGNiaUFnWEhSOVhHNWNiaUFnWEhRdkx5QjNhR2xqYUNCelkyRnNaU0JrWldkeVpXVWdLREFnTFNCelkyRnNaU0JzWlc1bmRHZ3BJR2x6SUc5MWNpQnBibkIxZEZ4dUlDQmNkR3hsZENCelkyRnNaVVJsWjNKbFpTQTlJSE4wWlhCSmJpQWxJSFJvYVhNdWMyTmhiR1V1YkdWdVozUm9PMXh1WEc0Z0lGeDBMeThnZDJoaGRDQnlZWFJwYnlCcGN5QnZkWElnYVc1d2RYUWdkRzhnYjNWeUlHdGxlVnh1SUNCY2RHeGxkQ0J5WVhScGJ5QTlJRTFoZEdndWNHOTNLRElzYjJOMFlYWmxLU3AwYUdsekxuTmpZV3hsVzNOallXeGxSR1ZuY21WbFhUdGNibHh1SUNCY2RISmhkR2x2SUQwZ1RXRjBhQzVtYkc5dmNpaHlZWFJwYnlveE1EQXdNREF3TURBd01EQXBMekV3TURBd01EQXdNREF3TUR0Y2JseHVJQ0JjZEhKbGRIVnliaUJ5WVhScGJ6dGNibHh1SUNCOVhHNWNiaUFnTHlvZ1JtOXlZMlVnY21WMGRYSnVJR0ZrYW5WemRHVmtJRTFKUkVrZ1pHRjBZU0FxTDF4dVhHNGdJRTFKUkVrb2MzUmxjRWx1TEc5amRHRjJaVWx1S1NCN1hHNWNiaUFnWEhSc1pYUWdibVYzZG1Gc2RXVWdQU0IwYUdsekxtWnlaWEYxWlc1amVTaHpkR1Z3U1c0c2IyTjBZWFpsU1c0cE8xeHVYRzRnSUZ4MGJHVjBJRzRnUFNBMk9TQXJJREV5S2sxaGRHZ3ViRzluS0c1bGQzWmhiSFZsTHpRME1Da3ZUV0YwYUM1c2IyY29NaWs3WEc1Y2JpQWdYSFJ1SUQwZ1RXRjBhQzVtYkc5dmNpaHVLakV3TURBd01EQXdNREFwTHpFd01EQXdNREF3TURBN1hHNWNiaUFnWEhSeVpYUjFjbTRnYmp0Y2JseHVJQ0I5WEc1Y2JpQWdZM0psWVhSbFUyTmhiR1VvS1NCN1hHNGdJQ0FnYkdWMElHNWxkMU5qWVd4bElEMGdXMTA3WEc0Z0lDQWdabTl5SUNoc1pYUWdhVDB3TzJrOFlYSm5kVzFsYm5SekxteGxibWQwYUR0cEt5c3BJSHRjYmlBZ0lDQWdJRzVsZDFOallXeGxMbkIxYzJnb0lHMWhkR2d1YlhSdlppZ2dOakFnS3lCaGNtZDFiV1Z1ZEhOYmFWMGdLU0FwTzF4dUlDQWdJSDFjYmlBZ0lDQjBhR2x6TG14dllXUlRZMkZzWlVaeWIyMUdjbVZ4ZFdWdVkybGxjeWh1WlhkVFkyRnNaU2s3WEc0Z0lIMWNibHh1SUNCamNtVmhkR1ZLU1ZOallXeGxLQ2tnZTF4dUlDQWdJSFJvYVhNdWMyTmhiR1VnUFNCYlhUdGNiaUFnSUNCbWIzSWdLR3hsZENCcFBUQTdhVHhoY21kMWJXVnVkSE11YkdWdVozUm9PMmtyS3lrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV6WTJGc1pTNXdkWE5vS0dGeVozVnRaVzUwYzF0cFhTazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdiRzloWkZOallXeGxSbkp2YlVaeVpYRjFaVzVqYVdWektHWnlaWEZ6S1NCN1hHNGdJQ0FnZEdocGN5NXpZMkZzWlNBOUlGdGRPMXh1SUNBZ0lHWnZjaUFvYkdWMElHazlNRHRwUEdaeVpYRnpMbXhsYm1kMGFDMHhPMmtyS3lrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV6WTJGc1pTNXdkWE5vS0daeVpYRnpXMmxkTDJaeVpYRnpXekJkS1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBdktpQk1iMkZrSUdFZ2JtVjNJSE5qWVd4bElDb3ZYRzVjYmlBZ2JHOWhaRk5qWVd4bEtHNWhiV1VwZTF4dVhHNGdJRngwTHlvZ2JHOWhaQ0IwYUdVZ2MyTmhiR1VnS2k5Y2JpQWdYSFJzWlhRZ1puSmxjWE1nUFNCMGFHbHpMbk5qWVd4bGMxdHVZVzFsWFM1bWNtVnhkV1Z1WTJsbGN6dGNiaUFnSUNCMGFHbHpMbXh2WVdSVFkyRnNaVVp5YjIxR2NtVnhkV1Z1WTJsbGN5aG1jbVZ4Y3lrN1hHNWNiaUFnZlZ4dVhHNGdJQzhxSUZObFlYSmphQ0IwYUdVZ2JtRnRaWE1nYjJZZ2RIVnVhVzVuYzF4dUlDQmNkQ0JTWlhSMWNtNXpJR0Z1SUdGeWNtRjVJRzltSUc1aGJXVnpJRzltSUhSMWJtbHVaM01nS2k5Y2JseHVJQ0J6WldGeVkyZ29iR1YwZEdWeWN5a2dlMXh1SUNCY2RHeGxkQ0J3YjNOemFXSnNaU0E5SUZ0ZE8xeHVJQ0JjZEdadmNpQW9iR1YwSUd0bGVTQnBiaUIwYUdsekxuTmpZV3hsY3lrZ2UxeHVJQ0JjZEZ4MGFXWWdLR3RsZVM1MGIweHZkMlZ5UTJGelpTZ3BMbWx1WkdWNFQyWW9iR1YwZEdWeWN5NTBiMHh2ZDJWeVEyRnpaU2dwS1NBaFBUMGdMVEVwSUh0Y2JpQWdYSFJjZEZ4MGNHOXpjMmxpYkdVdWNIVnphQ2hyWlhrcE8xeHVJQ0JjZEZ4MGZWeHVJQ0JjZEgxY2JpQWdYSFJ5WlhSMWNtNGdjRzl6YzJsaWJHVTdYRzRnSUgxY2JseHVJQ0F2S2lCU1pYUjFjbTRnWVNCamIyeHNaV04wYVc5dUlHOW1JRzV2ZEdWeklHRnpJR0Z1SUdGeWNtRjVJQ292WEc1Y2JpQWdZMmh2Y21Rb2JXbGthWE1wSUh0Y2JpQWdYSFJzWlhRZ2IzVjBjSFYwSUQwZ1cxMDdYRzRnSUZ4MFptOXlJQ2hzWlhRZ2FUMHdPMms4Yldsa2FYTXViR1Z1WjNSb08ya3JLeWtnZTF4dUlDQmNkRngwYjNWMGNIVjBMbkIxYzJnb2RHaHBjeTV1YjNSbEtHMXBaR2x6VzJsZEtTazdYRzRnSUZ4MGZWeHVJQ0JjZEhKbGRIVnliaUJ2ZFhSd2RYUTdYRzRnSUgxY2JseHVmVnh1WEc1Y2JseHVMeThnVjBWQ1VFRkRTeUJHVDA5VVJWSWdMeTljYmk4dklDNHZmaTlxYzJocGJuUXRiRzloWkdWeUlTNHZiR2xpTDNSMWJtbHVaeTkwZFc1cGJtY3Vhbk1pTENJbmRYTmxJSE4wY21samRDYzdYRzVjYmk4dlJHbHpZV0pzWlNCcWMyaHBiblFnZDJGeWJtbHVaeUJqYjI1alpYSnVhVzVuSUhSeVlXbHNhVzVuSUhKbFozVnNZWElnY0dGeVlXMXpYRzR2S21wemFHbHVkQ0F0VnpFek9DQXFMMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5QlNZV1JwYnlCN1hHNGdJQ0FnTHk5cFppQnViMjR0WlhocGMzUmxiblFnWW5WMGRHOXVjeUJoY21VZ2MzZHBkR05vWldRc0lIUm9aWGtnWVhKbElHbG5ibTl5WldSY2JseHVJQ0FnSUdOdmJuTjBjblZqZEc5eUtHeGxibWQwYUNBOUlETXNJQzR1TG05dVZtRnNjeWtnZTF4dUlDQWdJQ0FnSUNBdkwyVmhZMmdnYjNCMGFXOXVZV3dnSjI5dVZtRnNjeWNnWVhKbmRXMWxiblFnYzNkcGRHTm9aWE1nYjI0Z2RHaGhkQ0IyWVd4MVpTQnBiaUIwYUdVZ1VtRmthVzhnYVdZZ2FYUWdaWGhwYzNSelhHNGdJQ0FnSUNBZ0lDOHZTVzRnZEdobElHVjRZVzF3YkdVZ1ltVnNiM2NzSUdFZ015MWlkWFIwYjI0Z2NtRmthVzhnYVhNZ1kzSmxZWFJsWkN3Z2FXNWtaWGdnTUNCcGN5QnpkMmwwWTJobFpDQnZiaXdnYVc1a1pYZ2dNU0JwY3lCemQybDBZMmhsWkNCdmJpQjBhR1Z1SUhSb1pXNGdZWFIwWlcxd2RHVmtJR0ZuWVdsdUlIQnliMlIxWTJsdVp5QmhiaUIzWVhKdWFXNW5MQ0JoYm1RZ2RHaGxJR1pwYm1Gc0lHRnlaM1Z0Wlc1MElIQnliMlIxWTJWeklHRWdkMkZ5Ym1sdVp5QmlaV05oZFhObElIUm9aU0JwYm1SbGVDQjJZV3gxWlNCa2IyVnpJRzV2ZENCbGVHbHpkQzVjYmlBZ0lDQWdJQ0FnTHk5RmVHRnRjR3hsT2x4dUlDQWdJQ0FnSUNBdkwyQWdJSEpoWkdsdklEMGdibVYzSUZKaFpHbHZLRE1zSURBc0lERXNJREVzSURNcE8xeHVJQ0FnSUNBZ0lDQXZMK0tBcGlBZ1d6RXNNU3d3WFZ4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2hzWlc1bmRHZ2dQQ0F3S1NCN0lHeGxibWQwYUNBOUlERTdJSDFjYmx4dUlDQWdJQ0FnSUNCMGFHbHpMbXhsYm1kMGFDQTlJR3hsYm1kMGFEdGNiaUFnSUNBZ0lDQWdkR2hwY3k1dmJsWmhiSE1nUFNCdmJsWmhiSE03WEc0Z0lDQWdJQ0FnSUhSb2FYTXVZWEp5WVhrZ1BTQnVaWGNnUVhKeVlYa29iR1Z1WjNSb0tTNW1hV3hzS0RBcE8xeHVYRzRnSUNBZ0lDQWdJR2xtSUNodmJsWmhiSE11YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NXZiaWd1TGk1dmJsWmhiSE1wTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnYzJWc1pXTjBLSFpoYkhWbEtTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdVlYSnlZWGt1Wm1sc2JDZ3dLVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NWhjbkpoZVZ0MllXeDFaVjBnUFNBeE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTVoY25KaGVUdGNiaUFnSUNCOVhHNWNiaUFnSUNCbWJHbHdLQzR1TG5aaGJIVmxjeWtnZTF4dUlDQWdJQ0FnSUNBdkwyWnNhWEJ6SUhSb1pTQnpjR1ZqYVdacFpXUWdkbUZzZFdWekxpQnBaaUJ1YnlCMllXeDFaU0JwY3lCemNHVmphV1pwWldRc0lHWnNhWEJ6SUdGc2JDQmlkWFIwYjI1elhHNGdJQ0FnSUNBZ0lHeGxkQ0JoSUQwZ2RHaHBjeTVoY25KaGVUdGNiaUFnSUNBZ0lDQWdhV1lnS0haaGJIVmxjeTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IyWVd4MVpYTXVabTl5UldGamFDaG1kVzVqZEdsdmJpaDJLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIWWdQaUJoTG14bGJtZDBhQ0F0SURFcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMyOXNaUzUzWVhKdUtDZFhZWEp1YVc1bk9pQkJibTl1VW1Ga2FXOWJKeUFySUhZZ0t5QW5YU0JrYjJWeklHNXZkQ0JsZUdsemRDY3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdGYmRsMGdQU0FvWVZ0MlhTQS9JREFnT2lBeEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdFdVptOXlSV0ZqYUNobWRXNWpkR2x2YmloMkxDQnBMQ0JoY25JcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmhjbkpiYVYwZ1BTQW9kaUEvSURBZ09pQXhLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJoTzF4dUlDQWdJSDFjYmx4dUlDQWdJRzl1S0M0dUxuWmhiSFZsY3lrZ2UxeHVJQ0FnSUNBZ0lDQXZMM04zYVhSamFDQnZiaUIwYUdVZ2MzQmxZMmxtYVdWa0lIWmhiSFZsY3k0Z2FXWWdibThnZG1Gc2RXVWdjM0JsWTJsbWFXVmtMQ0JtYkdsd2N5QnZiaUJoYkd3Z1luVjBkRzl1YzF4dUlDQWdJQ0FnSUNCc1pYUWdZU0E5SUhSb2FYTXVZWEp5WVhrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gyWVd4MVpYTXViR1Z1WjNSb0lENGdNQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkbUZzZFdWekxtWnZja1ZoWTJnb1puVnVZM1JwYjI0b2Rpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoMklENGdZUzVzWlc1bmRHZ2dMU0F4S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052Ym5OdmJHVXVkMkZ5YmlnblYyRnlibWx1WnpvZ1FXNXZibEpoWkdsdld5Y2dLeUIySUNzZ0oxMGdaWGhqWldWa2N5QnphWHBsSUc5bUlHOWlhbVZqZENjcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoaFczWmRJRDA5UFNBeEtTQjdJR052Ym5OdmJHVXVkMkZ5YmlnblYyRnlibWx1WnpvZ1FXNXZibEpoWkdsdld5Y2dLeUIySUNzZ0oxMGdkMkZ6SUdGc2NtVmhaSGtnYjI0dUp5azdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1lWdDJYU0E5SURFN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JoTG1acGJHd29NU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdFN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYjJabUtDNHVMblpoYkhWbGN5a2dlMXh1SUNBZ0lDQWdJQ0F2TDNOM2FYUmphQ0J2Wm1ZZ2RHaGxJSE53WldOcFptbGxaQ0IyWVd4MVpYTXVJR2xtSUc1dklIWmhiSFZsSUhOd1pXTnBabWxsWkN3Z1pteHBjSE1nYjJabUlHRnNiQ0JpZFhSMGIyNXpYRzRnSUNBZ0lDQWdJR3hsZENCaElEMGdkR2hwY3k1aGNuSmhlVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIWmhiSFZsY3k1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMllXeDFaWE11Wm05eVJXRmphQ2htZFc1amRHbHZiaWgyS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1lWdDJYU0E5SURBN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR0V1Wm1sc2JDZ3dLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnWVR0Y2JpQWdJQ0I5WEc1OVhHNWNibHh1WEc0dkx5QlhSVUpRUVVOTElFWlBUMVJGVWlBdkwxeHVMeThnTGk5K0wycHphR2x1ZEMxc2IyRmtaWEloTGk5c2FXSXZiVzlrWld4ekwzSmhaR2x2TG1weklpd2lkbUZ5SUZkQlFVTnNiMk5ySUQwZ2NtVnhkV2x5WlNnbkxpOXNhV0l2VjBGQlEyeHZZMnNuS1Z4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlGZEJRVU5zYjJOclhHNXBaaUFvZEhsd1pXOW1JSGRwYm1SdmR5QWhQVDBnSjNWdVpHVm1hVzVsWkNjcElIZHBibVJ2ZHk1WFFVRkRiRzlqYXlBOUlGZEJRVU5zYjJOclhHNWNibHh1WEc0dkx5OHZMeTh2THk4dkx5OHZMeTh2THk5Y2JpOHZJRmRGUWxCQlEwc2dSazlQVkVWU1hHNHZMeUF1TDM0dmQyRmhZMnh2WTJzdmFXNWtaWGd1YW5OY2JpOHZJRzF2WkhWc1pTQnBaQ0E5SURReVhHNHZMeUJ0YjJSMWJHVWdZMmgxYm10eklEMGdNQ0lzSW5aaGNpQnBjMEp5YjNkelpYSWdQU0FvZEhsd1pXOW1JSGRwYm1SdmR5QWhQVDBnSjNWdVpHVm1hVzVsWkNjcFhHNWNiblpoY2lCRFRFOURTMTlFUlVaQlZVeFVVeUE5SUh0Y2JpQWdkRzlzWlhKaGJtTmxUR0YwWlRvZ01DNHhNQ3hjYmlBZ2RHOXNaWEpoYm1ObFJXRnliSGs2SURBdU1EQXhYRzU5WEc1Y2JpOHZJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5SUVWMlpXNTBJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5SUM4dlhHNTJZWElnUlhabGJuUWdQU0JtZFc1amRHbHZiaWhqYkc5amF5d2daR1ZoWkd4cGJtVXNJR1oxYm1NcElIdGNiaUFnZEdocGN5NWpiRzlqYXlBOUlHTnNiMk5yWEc0Z0lIUm9hWE11Wm5WdVl5QTlJR1oxYm1OY2JpQWdkR2hwY3k1ZlkyeGxZWEpsWkNBOUlHWmhiSE5sSUM4dklFWnNZV2NnZFhObFpDQjBieUJqYkdWaGNpQmhiaUJsZG1WdWRDQnBibk5wWkdVZ1kyRnNiR0poWTJ0Y2JseHVJQ0IwYUdsekxuUnZiR1Z5WVc1alpVeGhkR1VnUFNCamJHOWpheTUwYjJ4bGNtRnVZMlZNWVhSbFhHNGdJSFJvYVhNdWRHOXNaWEpoYm1ObFJXRnliSGtnUFNCamJHOWpheTUwYjJ4bGNtRnVZMlZGWVhKc2VWeHVJQ0IwYUdsekxsOXNZWFJsYzNSVWFXMWxJRDBnYm5Wc2JGeHVJQ0IwYUdsekxsOWxZWEpzYVdWemRGUnBiV1VnUFNCdWRXeHNYRzRnSUhSb2FYTXVaR1ZoWkd4cGJtVWdQU0J1ZFd4c1hHNGdJSFJvYVhNdWNtVndaV0YwVkdsdFpTQTlJRzUxYkd4Y2JseHVJQ0IwYUdsekxuTmphR1ZrZFd4bEtHUmxZV1JzYVc1bEtWeHVmVnh1WEc0dkx5QlZibk5qYUdWa2RXeGxjeUIwYUdVZ1pYWmxiblJjYmtWMlpXNTBMbkJ5YjNSdmRIbHdaUzVqYkdWaGNpQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQjBhR2x6TG1Oc2IyTnJMbDl5WlcxdmRtVkZkbVZ1ZENoMGFHbHpLVnh1SUNCMGFHbHpMbDlqYkdWaGNtVmtJRDBnZEhKMVpWeHVJQ0J5WlhSMWNtNGdkR2hwYzF4dWZWeHVYRzR2THlCVFpYUnpJSFJvWlNCbGRtVnVkQ0IwYnlCeVpYQmxZWFFnWlhabGNua2dZSFJwYldWZ0lITmxZMjl1WkhNdVhHNUZkbVZ1ZEM1d2NtOTBiM1I1Y0dVdWNtVndaV0YwSUQwZ1puVnVZM1JwYjI0b2RHbHRaU2tnZTF4dUlDQnBaaUFvZEdsdFpTQTlQVDBnTUNsY2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMlJsYkdGNUlHTmhibTV2ZENCaVpTQXdKeWxjYmlBZ2RHaHBjeTV5WlhCbFlYUlVhVzFsSUQwZ2RHbHRaVnh1SUNCcFppQW9JWFJvYVhNdVkyeHZZMnN1WDJoaGMwVjJaVzUwS0hSb2FYTXBLVnh1SUNBZ0lIUm9hWE11YzJOb1pXUjFiR1VvZEdocGN5NWtaV0ZrYkdsdVpTQXJJSFJvYVhNdWNtVndaV0YwVkdsdFpTbGNiaUFnY21WMGRYSnVJSFJvYVhOY2JuMWNibHh1THk4Z1UyVjBjeUIwYUdVZ2RHbHRaU0IwYjJ4bGNtRnVZMlVnYjJZZ2RHaGxJR1YyWlc1MExseHVMeThnVkdobElHVjJaVzUwSUhkcGJHd2dZbVVnWlhobFkzVjBaV1FnYVc0Z2RHaGxJR2x1ZEdWeWRtRnNJR0JiWkdWaFpHeHBibVVnTFNCbFlYSnNlU3dnWkdWaFpHeHBibVVnS3lCc1lYUmxYV0JjYmk4dklFbG1JSFJvWlNCamJHOWpheUJtWVdsc2N5QjBieUJsZUdWamRYUmxJSFJvWlNCbGRtVnVkQ0JwYmlCMGFXMWxMQ0IwYUdVZ1pYWmxiblFnZDJsc2JDQmlaU0JrY205d2NHVmtMbHh1UlhabGJuUXVjSEp2ZEc5MGVYQmxMblJ2YkdWeVlXNWpaU0E5SUdaMWJtTjBhVzl1S0haaGJIVmxjeWtnZTF4dUlDQnBaaUFvZEhsd1pXOW1JSFpoYkhWbGN5NXNZWFJsSUQwOVBTQW5iblZ0WW1WeUp5bGNiaUFnSUNCMGFHbHpMblJ2YkdWeVlXNWpaVXhoZEdVZ1BTQjJZV3gxWlhNdWJHRjBaVnh1SUNCcFppQW9kSGx3Wlc5bUlIWmhiSFZsY3k1bFlYSnNlU0E5UFQwZ0oyNTFiV0psY2ljcFhHNGdJQ0FnZEdocGN5NTBiMnhsY21GdVkyVkZZWEpzZVNBOUlIWmhiSFZsY3k1bFlYSnNlVnh1SUNCMGFHbHpMbDl5WldaeVpYTm9SV0Z5YkhsTVlYUmxSR0YwWlhNb0tWeHVJQ0JwWmlBb2RHaHBjeTVqYkc5amF5NWZhR0Z6UlhabGJuUW9kR2hwY3lrcElIdGNiaUFnSUNCMGFHbHpMbU5zYjJOckxsOXlaVzF2ZG1WRmRtVnVkQ2gwYUdsektWeHVJQ0FnSUhSb2FYTXVZMnh2WTJzdVgybHVjMlZ5ZEVWMlpXNTBLSFJvYVhNcFhHNGdJSDFjYmlBZ2NtVjBkWEp1SUhSb2FYTmNibjFjYmx4dUx5OGdVbVYwZFhKdWN5QjBjblZsSUdsbUlIUm9aU0JsZG1WdWRDQnBjeUJ5WlhCbFlYUmxaQ3dnWm1Gc2MyVWdiM1JvWlhKM2FYTmxYRzVGZG1WdWRDNXdjbTkwYjNSNWNHVXVhWE5TWlhCbFlYUmxaQ0E5SUdaMWJtTjBhVzl1S0NrZ2V5QnlaWFIxY200Z2RHaHBjeTV5WlhCbFlYUlVhVzFsSUNFOVBTQnVkV3hzSUgxY2JseHVMeThnVTJOb1pXUjFiR1Z6SUhSb1pTQmxkbVZ1ZENCMGJ5QmlaU0J5WVc0Z1ltVm1iM0psSUdCa1pXRmtiR2x1WldBdVhHNHZMeUJKWmlCMGFHVWdkR2x0WlNCcGN5QjNhWFJvYVc0Z2RHaGxJR1YyWlc1MElIUnZiR1Z5WVc1alpTd2dkMlVnYUdGdVpHeGxJSFJvWlNCbGRtVnVkQ0JwYlcxbFpHbGhkR1ZzZVM1Y2JpOHZJRWxtSUhSb1pTQmxkbVZ1ZENCM1lYTWdZV3h5WldGa2VTQnpZMmhsWkhWc1pXUWdZWFFnWVNCa2FXWm1aWEpsYm5RZ2RHbHRaU3dnYVhRZ2FYTWdjbVZ6WTJobFpIVnNaV1F1WEc1RmRtVnVkQzV3Y205MGIzUjVjR1V1YzJOb1pXUjFiR1VnUFNCbWRXNWpkR2x2Ymloa1pXRmtiR2x1WlNrZ2UxeHVJQ0IwYUdsekxsOWpiR1ZoY21Wa0lEMGdabUZzYzJWY2JpQWdkR2hwY3k1a1pXRmtiR2x1WlNBOUlHUmxZV1JzYVc1bFhHNGdJSFJvYVhNdVgzSmxabkpsYzJoRllYSnNlVXhoZEdWRVlYUmxjeWdwWEc1Y2JpQWdhV1lnS0hSb2FYTXVZMnh2WTJzdVkyOXVkR1Y0ZEM1amRYSnlaVzUwVkdsdFpTQStQU0IwYUdsekxsOWxZWEpzYVdWemRGUnBiV1VwSUh0Y2JpQWdJQ0IwYUdsekxsOWxlR1ZqZFhSbEtDbGNiaUFnWEc0Z0lIMGdaV3h6WlNCcFppQW9kR2hwY3k1amJHOWpheTVmYUdGelJYWmxiblFvZEdocGN5a3BJSHRjYmlBZ0lDQjBhR2x6TG1Oc2IyTnJMbDl5WlcxdmRtVkZkbVZ1ZENoMGFHbHpLVnh1SUNBZ0lIUm9hWE11WTJ4dlkyc3VYMmx1YzJWeWRFVjJaVzUwS0hSb2FYTXBYRzRnSUZ4dUlDQjlJR1ZzYzJVZ2RHaHBjeTVqYkc5amF5NWZhVzV6WlhKMFJYWmxiblFvZEdocGN5bGNibjFjYmx4dVJYWmxiblF1Y0hKdmRHOTBlWEJsTG5ScGJXVlRkSEpsZEdOb0lEMGdablZ1WTNScGIyNG9kRkpsWml3Z2NtRjBhVzhwSUh0Y2JpQWdhV1lnS0hSb2FYTXVhWE5TWlhCbFlYUmxaQ2dwS1Z4dUlDQWdJSFJvYVhNdWNtVndaV0YwVkdsdFpTQTlJSFJvYVhNdWNtVndaV0YwVkdsdFpTQXFJSEpoZEdsdlhHNWNiaUFnZG1GeUlHUmxZV1JzYVc1bElEMGdkRkpsWmlBcklISmhkR2x2SUNvZ0tIUm9hWE11WkdWaFpHeHBibVVnTFNCMFVtVm1LVnh1SUNBdkx5QkpaaUIwYUdVZ1pHVmhaR3hwYm1VZ2FYTWdkRzl2SUdOc2IzTmxJRzl5SUhCaGMzUXNJR0Z1WkNCMGFHVWdaWFpsYm5RZ2FHRnpJR0VnY21Wd1pXRjBMRnh1SUNBdkx5QjNaU0JqWVd4amRXeGhkR1VnZEdobElHNWxlSFFnY21Wd1pXRjBJSEJ2YzNOcFlteGxJR2x1SUhSb1pTQnpkSEpsZEdOb1pXUWdjM0JoWTJVdVhHNGdJR2xtSUNoMGFHbHpMbWx6VW1Wd1pXRjBaV1FvS1NrZ2UxeHVJQ0FnSUhkb2FXeGxJQ2gwYUdsekxtTnNiMk5yTG1OdmJuUmxlSFF1WTNWeWNtVnVkRlJwYldVZ1BqMGdaR1ZoWkd4cGJtVWdMU0IwYUdsekxuUnZiR1Z5WVc1alpVVmhjbXg1S1Z4dUlDQWdJQ0FnWkdWaFpHeHBibVVnS3owZ2RHaHBjeTV5WlhCbFlYUlVhVzFsWEc0Z0lIMWNiaUFnZEdocGN5NXpZMmhsWkhWc1pTaGtaV0ZrYkdsdVpTbGNibjFjYmx4dUx5OGdSWGhsWTNWMFpYTWdkR2hsSUdWMlpXNTBYRzVGZG1WdWRDNXdjbTkwYjNSNWNHVXVYMlY0WldOMWRHVWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdhV1lnS0hSb2FYTXVZMnh2WTJzdVgzTjBZWEowWldRZ1BUMDlJR1poYkhObEtTQnlaWFIxY201Y2JpQWdkR2hwY3k1amJHOWpheTVmY21WdGIzWmxSWFpsYm5Rb2RHaHBjeWxjYmx4dUlDQnBaaUFvZEdocGN5NWpiRzlqYXk1amIyNTBaWGgwTG1OMWNuSmxiblJVYVcxbElEd2dkR2hwY3k1ZmJHRjBaWE4wVkdsdFpTbGNiaUFnSUNCMGFHbHpMbVoxYm1Nb2RHaHBjeWxjYmlBZ1pXeHpaU0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXViMjVsZUhCcGNtVmtLU0IwYUdsekxtOXVaWGh3YVhKbFpDaDBhR2x6S1Z4dUlDQWdJR052Ym5OdmJHVXVkMkZ5YmlnblpYWmxiblFnWlhod2FYSmxaQ2NwWEc0Z0lIMWNiaUFnTHk4Z1NXNGdkR2hsSUdOaGMyVWdZSE5qYUdWa2RXeGxZQ0JwY3lCallXeHNaV1FnYVc1emFXUmxJR0JtZFc1allDd2dkMlVnYm1WbFpDQjBieUJoZG05cFpGeHVJQ0F2THlCdmRtVnljbmR5YVhScGJtY2dkMmwwYUNCNVpYUWdZVzV2ZEdobGNpQmdjMk5vWldSMWJHVmdMbHh1SUNCcFppQW9JWFJvYVhNdVkyeHZZMnN1WDJoaGMwVjJaVzUwS0hSb2FYTXBJQ1ltSUhSb2FYTXVhWE5TWlhCbFlYUmxaQ2dwSUNZbUlDRjBhR2x6TGw5amJHVmhjbVZrS1Z4dUlDQWdJSFJvYVhNdWMyTm9aV1IxYkdVb2RHaHBjeTVrWldGa2JHbHVaU0FySUhSb2FYTXVjbVZ3WldGMFZHbHRaU2tnWEc1OVhHNWNiaTh2SUZWd1pHRjBaWE1nWTJGamFHVmtJSFJwYldWelhHNUZkbVZ1ZEM1d2NtOTBiM1I1Y0dVdVgzSmxabkpsYzJoRllYSnNlVXhoZEdWRVlYUmxjeUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0IwYUdsekxsOXNZWFJsYzNSVWFXMWxJRDBnZEdocGN5NWtaV0ZrYkdsdVpTQXJJSFJvYVhNdWRHOXNaWEpoYm1ObFRHRjBaVnh1SUNCMGFHbHpMbDlsWVhKc2FXVnpkRlJwYldVZ1BTQjBhR2x6TG1SbFlXUnNhVzVsSUMwZ2RHaHBjeTUwYjJ4bGNtRnVZMlZGWVhKc2VWeHVmVnh1WEc0dkx5QTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQU0JYUVVGRGJHOWpheUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFNBdkwxeHVkbUZ5SUZkQlFVTnNiMk5ySUQwZ2JXOWtkV3hsTG1WNGNHOXlkSE1nUFNCbWRXNWpkR2x2YmloamIyNTBaWGgwTENCdmNIUnpLU0I3WEc0Z0lIWmhjaUJ6Wld4bUlEMGdkR2hwYzF4dUlDQnZjSFJ6SUQwZ2IzQjBjeUI4ZkNCN2ZWeHVJQ0IwYUdsekxuUnBZMnROWlhSb2IyUWdQU0J2Y0hSekxuUnBZMnROWlhSb2IyUWdmSHdnSjFOamNtbHdkRkJ5YjJObGMzTnZjazV2WkdVblhHNGdJSFJvYVhNdWRHOXNaWEpoYm1ObFJXRnliSGtnUFNCdmNIUnpMblJ2YkdWeVlXNWpaVVZoY214NUlIeDhJRU5NVDBOTFgwUkZSa0ZWVEZSVExuUnZiR1Z5WVc1alpVVmhjbXg1WEc0Z0lIUm9hWE11ZEc5c1pYSmhibU5sVEdGMFpTQTlJRzl3ZEhNdWRHOXNaWEpoYm1ObFRHRjBaU0I4ZkNCRFRFOURTMTlFUlVaQlZVeFVVeTUwYjJ4bGNtRnVZMlZNWVhSbFhHNGdJSFJvYVhNdVkyOXVkR1Y0ZENBOUlHTnZiblJsZUhSY2JpQWdkR2hwY3k1ZlpYWmxiblJ6SUQwZ1cxMWNiaUFnZEdocGN5NWZjM1JoY25SbFpDQTlJR1poYkhObFhHNTlYRzVjYmk4dklDMHRMUzB0TFMwdExTMGdVSFZpYkdsaklFRlFTU0F0TFMwdExTMHRMUzB0SUM4dlhHNHZMeUJUWTJobFpIVnNaWE1nWUdaMWJtTmdJSFJ2SUhKMWJpQmhablJsY2lCZ1pHVnNZWGxnSUhObFkyOXVaSE11WEc1WFFVRkRiRzlqYXk1d2NtOTBiM1I1Y0dVdWMyVjBWR2x0Wlc5MWRDQTlJR1oxYm1OMGFXOXVLR1oxYm1Nc0lHUmxiR0Y1S1NCN1hHNGdJSEpsZEhWeWJpQjBhR2x6TGw5amNtVmhkR1ZGZG1WdWRDaG1kVzVqTENCMGFHbHpMbDloWW5OVWFXMWxLR1JsYkdGNUtTbGNibjFjYmx4dUx5OGdVMk5vWldSMWJHVnpJR0JtZFc1allDQjBieUJ5ZFc0Z1ltVm1iM0psSUdCa1pXRmtiR2x1WldBdVhHNVhRVUZEYkc5amF5NXdjbTkwYjNSNWNHVXVZMkZzYkdKaFkydEJkRlJwYldVZ1BTQm1kVzVqZEdsdmJpaG1kVzVqTENCa1pXRmtiR2x1WlNrZ2UxeHVJQ0J5WlhSMWNtNGdkR2hwY3k1ZlkzSmxZWFJsUlhabGJuUW9ablZ1WXl3Z1pHVmhaR3hwYm1VcFhHNTlYRzVjYmk4dklGTjBjbVYwWTJobGN5QmdaR1ZoWkd4cGJtVmdJR0Z1WkNCZ2NtVndaV0YwWUNCdlppQmhiR3dnYzJOb1pXUjFiR1ZrSUdCbGRtVnVkSE5nSUdKNUlHQnlZWFJwYjJBc0lHdGxaWEJwYm1kY2JpOHZJSFJvWldseUlISmxiR0YwYVhabElHUnBjM1JoYm1ObElIUnZJR0IwVW1WbVlDNGdTVzRnWm1GamRDQjBhR2x6SUdseklHVnhkV2wyWVd4bGJuUWdkRzhnWTJoaGJtZHBibWNnZEdobElIUmxiWEJ2TGx4dVYwRkJRMnh2WTJzdWNISnZkRzkwZVhCbExuUnBiV1ZUZEhKbGRHTm9JRDBnWm5WdVkzUnBiMjRvZEZKbFppd2daWFpsYm5SekxDQnlZWFJwYnlrZ2UxeHVJQ0JsZG1WdWRITXVabTl5UldGamFDaG1kVzVqZEdsdmJpaGxkbVZ1ZENrZ2V5QmxkbVZ1ZEM1MGFXMWxVM1J5WlhSamFDaDBVbVZtTENCeVlYUnBieWtnZlNsY2JpQWdjbVYwZFhKdUlHVjJaVzUwYzF4dWZWeHVYRzR2THlCU1pXMXZkbVZ6SUdGc2JDQnpZMmhsWkhWc1pXUWdaWFpsYm5SeklHRnVaQ0J6ZEdGeWRITWdkR2hsSUdOc2IyTnJJRnh1VjBGQlEyeHZZMnN1Y0hKdmRHOTBlWEJsTG5OMFlYSjBJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJR2xtSUNoMGFHbHpMbDl6ZEdGeWRHVmtJRDA5UFNCbVlXeHpaU2tnZTF4dUlDQWdJSFpoY2lCelpXeG1JRDBnZEdocGMxeHVJQ0FnSUhSb2FYTXVYM04wWVhKMFpXUWdQU0IwY25WbFhHNGdJQ0FnZEdocGN5NWZaWFpsYm5SeklEMGdXMTFjYmx4dUlDQWdJR2xtSUNoMGFHbHpMblJwWTJ0TlpYUm9iMlFnUFQwOUlDZFRZM0pwY0hSUWNtOWpaWE56YjNKT2IyUmxKeWtnZTF4dUlDQWdJQ0FnZG1GeUlHSjFabVpsY2xOcGVtVWdQU0F5TlRaY2JpQWdJQ0FnSUM4dklGZGxJR2hoZG1VZ2RHOGdhMlZsY0NCaElISmxabVZ5Wlc1alpTQjBieUIwYUdVZ2JtOWtaU0IwYnlCaGRtOXBaQ0JuWVhKaVlXZGxJR052Ykd4bFkzUnBiMjVjYmlBZ0lDQWdJSFJvYVhNdVgyTnNiMk5yVG05a1pTQTlJSFJvYVhNdVkyOXVkR1Y0ZEM1amNtVmhkR1ZUWTNKcGNIUlFjbTlqWlhOemIzSW9ZblZtWm1WeVUybDZaU3dnTVN3Z01TbGNiaUFnSUNBZ0lIUm9hWE11WDJOc2IyTnJUbTlrWlM1amIyNXVaV04wS0hSb2FYTXVZMjl1ZEdWNGRDNWtaWE4wYVc1aGRHbHZiaWxjYmlBZ0lDQWdJSFJvYVhNdVgyTnNiMk5yVG05a1pTNXZibUYxWkdsdmNISnZZMlZ6Y3lBOUlHWjFibU4wYVc5dUlDZ3BJSHRjYmlBZ0lDQWdJQ0FnY0hKdlkyVnpjeTV1WlhoMFZHbGpheWhtZFc1amRHbHZiaWdwSUhzZ2MyVnNaaTVmZEdsamF5Z3BJSDBwWEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2gwYUdsekxuUnBZMnROWlhSb2IyUWdQVDA5SUNkdFlXNTFZV3duS1NCdWRXeHNJQzh2SUY5MGFXTnJJR2x6SUdOaGJHeGxaQ0J0WVc1MVlXeHNlVnh1WEc0Z0lDQWdaV3h6WlNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjJsdWRtRnNhV1FnZEdsamEwMWxkR2h2WkNBbklDc2dkR2hwY3k1MGFXTnJUV1YwYUc5a0tWeHVJQ0I5WEc1OVhHNWNiaTh2SUZOMGIzQnpJSFJvWlNCamJHOWphMXh1VjBGQlEyeHZZMnN1Y0hKdmRHOTBlWEJsTG5OMGIzQWdQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdhV1lnS0hSb2FYTXVYM04wWVhKMFpXUWdQVDA5SUhSeWRXVXBJSHRjYmlBZ0lDQjBhR2x6TGw5emRHRnlkR1ZrSUQwZ1ptRnNjMlZjYmlBZ0lDQjBhR2x6TGw5amJHOWphMDV2WkdVdVpHbHpZMjl1Ym1WamRDZ3BYRzRnSUgwZ0lGeHVmVnh1WEc0dkx5QXRMUzB0TFMwdExTMHRJRkJ5YVhaaGRHVWdMUzB0TFMwdExTMHRMU0F2TDF4dVhHNHZMeUJVYUdseklHWjFibU4wYVc5dUlHbHpJSEpoYmlCd1pYSnBiMlJwWTJGc2JIa3NJR0Z1WkNCaGRDQmxZV05vSUhScFkyc2dhWFFnWlhobFkzVjBaWE5jYmk4dklHVjJaVzUwY3lCbWIzSWdkMmhwWTJnZ1lHTjFjbkpsYm5SVWFXMWxZQ0JwY3lCcGJtTnNkV1JsWkNCcGJpQjBhR1ZwY2lCMGIyeGxjbUZ1WTJVZ2FXNTBaWEoyWVd3dVhHNVhRVUZEYkc5amF5NXdjbTkwYjNSNWNHVXVYM1JwWTJzZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2RtRnlJR1YyWlc1MElEMGdkR2hwY3k1ZlpYWmxiblJ6TG5Ob2FXWjBLQ2xjYmx4dUlDQjNhR2xzWlNobGRtVnVkQ0FtSmlCbGRtVnVkQzVmWldGeWJHbGxjM1JVYVcxbElEdzlJSFJvYVhNdVkyOXVkR1Y0ZEM1amRYSnlaVzUwVkdsdFpTa2dlMXh1SUNBZ0lHVjJaVzUwTGw5bGVHVmpkWFJsS0NsY2JpQWdJQ0JsZG1WdWRDQTlJSFJvYVhNdVgyVjJaVzUwY3k1emFHbG1kQ2dwWEc0Z0lIMWNibHh1SUNBdkx5QlFkWFFnWW1GamF5QjBhR1VnYkdGemRDQmxkbVZ1ZEZ4dUlDQnBaaWhsZG1WdWRDa2dkR2hwY3k1ZlpYWmxiblJ6TG5WdWMyaHBablFvWlhabGJuUXBYRzU5WEc1Y2JpOHZJRU55WldGMFpYTWdZVzRnWlhabGJuUWdZVzVrSUdsdWMyVnlkQ0JwZENCMGJ5QjBhR1VnYkdsemRGeHVWMEZCUTJ4dlkyc3VjSEp2ZEc5MGVYQmxMbDlqY21WaGRHVkZkbVZ1ZENBOUlHWjFibU4wYVc5dUtHWjFibU1zSUdSbFlXUnNhVzVsS1NCN1hHNGdJSEpsZEhWeWJpQnVaWGNnUlhabGJuUW9kR2hwY3l3Z1pHVmhaR3hwYm1Vc0lHWjFibU1wWEc1OVhHNWNiaTh2SUVsdWMyVnlkSE1nWVc0Z1pYWmxiblFnZEc4Z2RHaGxJR3hwYzNSY2JsZEJRVU5zYjJOckxuQnliM1J2ZEhsd1pTNWZhVzV6WlhKMFJYWmxiblFnUFNCbWRXNWpkR2x2YmlobGRtVnVkQ2tnZTF4dUlDQjBhR2x6TGw5bGRtVnVkSE11YzNCc2FXTmxLSFJvYVhNdVgybHVaR1Y0UW5sVWFXMWxLR1YyWlc1MExsOWxZWEpzYVdWemRGUnBiV1VwTENBd0xDQmxkbVZ1ZENsY2JuMWNibHh1THk4Z1VtVnRiM1psY3lCaGJpQmxkbVZ1ZENCbWNtOXRJSFJvWlNCc2FYTjBYRzVYUVVGRGJHOWpheTV3Y205MGIzUjVjR1V1WDNKbGJXOTJaVVYyWlc1MElEMGdablZ1WTNScGIyNG9aWFpsYm5RcElIdGNiaUFnZG1GeUlHbHVaQ0E5SUhSb2FYTXVYMlYyWlc1MGN5NXBibVJsZUU5bUtHVjJaVzUwS1Z4dUlDQnBaaUFvYVc1a0lDRTlQU0F0TVNrZ2RHaHBjeTVmWlhabGJuUnpMbk53YkdsalpTaHBibVFzSURFcFhHNTlYRzVjYmk4dklGSmxkSFZ5Ym5NZ2RISjFaU0JwWmlCZ1pYWmxiblJnSUdseklHbHVJSEYxWlhWbExDQm1ZV3h6WlNCdmRHaGxjbmRwYzJWY2JsZEJRVU5zYjJOckxuQnliM1J2ZEhsd1pTNWZhR0Z6UlhabGJuUWdQU0JtZFc1amRHbHZiaWhsZG1WdWRDa2dlMXh1SUhKbGRIVnliaUIwYUdsekxsOWxkbVZ1ZEhNdWFXNWtaWGhQWmlobGRtVnVkQ2tnSVQwOUlDMHhYRzU5WEc1Y2JpOHZJRkpsZEhWeWJuTWdkR2hsSUdsdVpHVjRJRzltSUhSb1pTQm1hWEp6ZENCbGRtVnVkQ0IzYUc5elpTQmtaV0ZrYkdsdVpTQnBjeUErUFNCMGJ5QmdaR1ZoWkd4cGJtVmdYRzVYUVVGRGJHOWpheTV3Y205MGIzUjVjR1V1WDJsdVpHVjRRbmxVYVcxbElEMGdablZ1WTNScGIyNG9aR1ZoWkd4cGJtVXBJSHRjYmlBZ0x5OGdjR1Z5Wm05eWJYTWdZU0JpYVc1aGNua2djMlZoY21Ob1hHNGdJSFpoY2lCc2IzY2dQU0F3WEc0Z0lDQWdMQ0JvYVdkb0lEMGdkR2hwY3k1ZlpYWmxiblJ6TG14bGJtZDBhRnh1SUNBZ0lDd2diV2xrWEc0Z0lIZG9hV3hsSUNoc2IzY2dQQ0JvYVdkb0tTQjdYRzRnSUNBZ2JXbGtJRDBnVFdGMGFDNW1iRzl2Y2lnb2JHOTNJQ3NnYUdsbmFDa2dMeUF5S1Z4dUlDQWdJR2xtSUNoMGFHbHpMbDlsZG1WdWRITmJiV2xrWFM1ZlpXRnliR2xsYzNSVWFXMWxJRHdnWkdWaFpHeHBibVVwWEc0Z0lDQWdJQ0JzYjNjZ1BTQnRhV1FnS3lBeFhHNGdJQ0FnWld4elpTQm9hV2RvSUQwZ2JXbGtYRzRnSUgxY2JpQWdjbVYwZFhKdUlHeHZkMXh1ZlZ4dVhHNHZMeUJEYjI1MlpYSjBjeUJtY205dElISmxiR0YwYVhabElIUnBiV1VnZEc4Z1lXSnpiMngxZEdVZ2RHbHRaVnh1VjBGQlEyeHZZMnN1Y0hKdmRHOTBlWEJsTGw5aFluTlVhVzFsSUQwZ1puVnVZM1JwYjI0b2NtVnNWR2x0WlNrZ2UxeHVJQ0J5WlhSMWNtNGdjbVZzVkdsdFpTQXJJSFJvYVhNdVkyOXVkR1Y0ZEM1amRYSnlaVzUwVkdsdFpWeHVmVnh1WEc0dkx5QkRiMjUyWlhKMGN5Qm1jbTl0SUdGaWMyOXNkWFJsSUhScGJXVWdkRzhnY21Wc1lYUnBkbVVnZEdsdFpTQmNibGRCUVVOc2IyTnJMbkJ5YjNSdmRIbHdaUzVmY21Wc1ZHbHRaU0E5SUdaMWJtTjBhVzl1S0dGaWMxUnBiV1VwSUh0Y2JpQWdjbVYwZFhKdUlHRmljMVJwYldVZ0xTQjBhR2x6TG1OdmJuUmxlSFF1WTNWeWNtVnVkRlJwYldWY2JuMWNibHh1WEc0dkx5OHZMeTh2THk4dkx5OHZMeTh2THk5Y2JpOHZJRmRGUWxCQlEwc2dSazlQVkVWU1hHNHZMeUF1TDM0dmQyRmhZMnh2WTJzdmJHbGlMMWRCUVVOc2IyTnJMbXB6WEc0dkx5QnRiMlIxYkdVZ2FXUWdQU0EwTTF4dUx5OGdiVzlrZFd4bElHTm9kVzVyY3lBOUlEQWlMQ0l2THlCemFHbHRJR1p2Y2lCMWMybHVaeUJ3Y205alpYTnpJR2x1SUdKeWIzZHpaWEpjYm5aaGNpQndjbTlqWlhOeklEMGdiVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQjdmVHRjYmx4dUx5OGdZMkZqYUdWa0lHWnliMjBnZDJoaGRHVjJaWElnWjJ4dlltRnNJR2x6SUhCeVpYTmxiblFnYzI4Z2RHaGhkQ0IwWlhOMElISjFibTVsY25NZ2RHaGhkQ0J6ZEhWaUlHbDBYRzR2THlCa2IyNG5kQ0JpY21WaGF5QjBhR2x1WjNNdUlDQkNkWFFnZDJVZ2JtVmxaQ0IwYnlCM2NtRndJR2wwSUdsdUlHRWdkSEo1SUdOaGRHTm9JR2x1SUdOaGMyVWdhWFFnYVhOY2JpOHZJSGR5WVhCd1pXUWdhVzRnYzNSeWFXTjBJRzF2WkdVZ1kyOWtaU0IzYUdsamFDQmtiMlZ6YmlkMElHUmxabWx1WlNCaGJua2daMnh2WW1Gc2N5NGdJRWwwSjNNZ2FXNXphV1JsSUdGY2JpOHZJR1oxYm1OMGFXOXVJR0psWTJGMWMyVWdkSEo1TDJOaGRHTm9aWE1nWkdWdmNIUnBiV2w2WlNCcGJpQmpaWEowWVdsdUlHVnVaMmx1WlhNdVhHNWNiblpoY2lCallXTm9aV1JUWlhSVWFXMWxiM1YwTzF4dWRtRnlJR05oWTJobFpFTnNaV0Z5VkdsdFpXOTFkRHRjYmx4dVpuVnVZM1JwYjI0Z1pHVm1ZWFZzZEZObGRGUnBiVzkxZENncElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjNObGRGUnBiV1Z2ZFhRZ2FHRnpJRzV2ZENCaVpXVnVJR1JsWm1sdVpXUW5LVHRjYm4xY2JtWjFibU4wYVc5dUlHUmxabUYxYkhSRGJHVmhjbFJwYldWdmRYUWdLQ2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25ZMnhsWVhKVWFXMWxiM1YwSUdoaGN5QnViM1FnWW1WbGJpQmtaV1pwYm1Wa0p5azdYRzU5WEc0b1puVnVZM1JwYjI0Z0tDa2dlMXh1SUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBlWEJsYjJZZ2MyVjBWR2x0Wlc5MWRDQTlQVDBnSjJaMWJtTjBhVzl1SnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGamFHVmtVMlYwVkdsdFpXOTFkQ0E5SUhObGRGUnBiV1Z2ZFhRN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVdOb1pXUlRaWFJVYVcxbGIzVjBJRDBnWkdWbVlYVnNkRk5sZEZScGJXOTFkRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDBnWTJGMFkyZ2dLR1VwSUh0Y2JpQWdJQ0FnSUNBZ1kyRmphR1ZrVTJWMFZHbHRaVzkxZENBOUlHUmxabUYxYkhSVFpYUlVhVzF2ZFhRN1hHNGdJQ0FnZlZ4dUlDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMnhsWVhKVWFXMWxiM1YwSUQwOVBTQW5ablZ1WTNScGIyNG5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZV05vWldSRGJHVmhjbFJwYldWdmRYUWdQU0JqYkdWaGNsUnBiV1Z2ZFhRN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVdOb1pXUkRiR1ZoY2xScGJXVnZkWFFnUFNCa1pXWmhkV3gwUTJ4bFlYSlVhVzFsYjNWME8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmpZWFJqYUNBb1pTa2dlMXh1SUNBZ0lDQWdJQ0JqWVdOb1pXUkRiR1ZoY2xScGJXVnZkWFFnUFNCa1pXWmhkV3gwUTJ4bFlYSlVhVzFsYjNWME8xeHVJQ0FnSUgxY2JuMGdLQ2twWEc1bWRXNWpkR2x2YmlCeWRXNVVhVzFsYjNWMEtHWjFiaWtnZTF4dUlDQWdJR2xtSUNoallXTm9aV1JUWlhSVWFXMWxiM1YwSUQwOVBTQnpaWFJVYVcxbGIzVjBLU0I3WEc0Z0lDQWdJQ0FnSUM4dmJtOXliV0ZzSUdWdWRtbHliMjFsYm5SeklHbHVJSE5oYm1VZ2MybDBkV0YwYVc5dWMxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2MyVjBWR2x0Wlc5MWRDaG1kVzRzSURBcE8xeHVJQ0FnSUgxY2JpQWdJQ0F2THlCcFppQnpaWFJVYVcxbGIzVjBJSGRoYzI0bmRDQmhkbUZwYkdGaWJHVWdZblYwSUhkaGN5QnNZWFIwWlhJZ1pHVm1hVzVsWkZ4dUlDQWdJR2xtSUNnb1kyRmphR1ZrVTJWMFZHbHRaVzkxZENBOVBUMGdaR1ZtWVhWc2RGTmxkRlJwYlc5MWRDQjhmQ0FoWTJGamFHVmtVMlYwVkdsdFpXOTFkQ2tnSmlZZ2MyVjBWR2x0Wlc5MWRDa2dlMXh1SUNBZ0lDQWdJQ0JqWVdOb1pXUlRaWFJVYVcxbGIzVjBJRDBnYzJWMFZHbHRaVzkxZER0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhObGRGUnBiV1Z2ZFhRb1puVnVMQ0F3S1R0Y2JpQWdJQ0I5WEc0Z0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ0x5OGdkMmhsYmlCM2FHVnVJSE52YldWaWIyUjVJR2hoY3lCelkzSmxkMlZrSUhkcGRHZ2djMlYwVkdsdFpXOTFkQ0JpZFhRZ2JtOGdTUzVGTGlCdFlXUmtibVZ6YzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnWTJGamFHVmtVMlYwVkdsdFpXOTFkQ2htZFc0c0lEQXBPMXh1SUNBZ0lIMGdZMkYwWTJnb1pTbDdYRzRnSUNBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCWGFHVnVJSGRsSUdGeVpTQnBiaUJKTGtVdUlHSjFkQ0IwYUdVZ2MyTnlhWEIwSUdoaGN5QmlaV1Z1SUdWMllXeGxaQ0J6YnlCSkxrVXVJR1J2WlhOdUozUWdkSEoxYzNRZ2RHaGxJR2RzYjJKaGJDQnZZbXBsWTNRZ2QyaGxiaUJqWVd4c1pXUWdibTl5YldGc2JIbGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJqWVdOb1pXUlRaWFJVYVcxbGIzVjBMbU5oYkd3b2JuVnNiQ3dnWm5WdUxDQXdLVHRjYmlBZ0lDQWdJQ0FnZlNCallYUmphQ2hsS1h0Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SUhOaGJXVWdZWE1nWVdKdmRtVWdZblYwSUhkb1pXNGdhWFFuY3lCaElIWmxjbk5wYjI0Z2IyWWdTUzVGTGlCMGFHRjBJRzExYzNRZ2FHRjJaU0IwYUdVZ1oyeHZZbUZzSUc5aWFtVmpkQ0JtYjNJZ0ozUm9hWE1uTENCb2IzQm1kV3hzZVNCdmRYSWdZMjl1ZEdWNGRDQmpiM0p5WldOMElHOTBhR1Z5ZDJselpTQnBkQ0IzYVd4c0lIUm9jbTkzSUdFZ1oyeHZZbUZzSUdWeWNtOXlYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWTJGamFHVmtVMlYwVkdsdFpXOTFkQzVqWVd4c0tIUm9hWE1zSUdaMWJpd2dNQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JseHVmVnh1Wm5WdVkzUnBiMjRnY25WdVEyeGxZWEpVYVcxbGIzVjBLRzFoY210bGNpa2dlMXh1SUNBZ0lHbG1JQ2hqWVdOb1pXUkRiR1ZoY2xScGJXVnZkWFFnUFQwOUlHTnNaV0Z5VkdsdFpXOTFkQ2tnZTF4dUlDQWdJQ0FnSUNBdkwyNXZjbTFoYkNCbGJuWnBjbTl0Wlc1MGN5QnBiaUJ6WVc1bElITnBkSFZoZEdsdmJuTmNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHTnNaV0Z5VkdsdFpXOTFkQ2h0WVhKclpYSXBPMXh1SUNBZ0lIMWNiaUFnSUNBdkx5QnBaaUJqYkdWaGNsUnBiV1Z2ZFhRZ2QyRnpiaWQwSUdGMllXbHNZV0pzWlNCaWRYUWdkMkZ6SUd4aGRIUmxjaUJrWldacGJtVmtYRzRnSUNBZ2FXWWdLQ2hqWVdOb1pXUkRiR1ZoY2xScGJXVnZkWFFnUFQwOUlHUmxabUYxYkhSRGJHVmhjbFJwYldWdmRYUWdmSHdnSVdOaFkyaGxaRU5zWldGeVZHbHRaVzkxZENrZ0ppWWdZMnhsWVhKVWFXMWxiM1YwS1NCN1hHNGdJQ0FnSUNBZ0lHTmhZMmhsWkVOc1pXRnlWR2x0Wlc5MWRDQTlJR05zWldGeVZHbHRaVzkxZER0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdOc1pXRnlWR2x0Wlc5MWRDaHRZWEpyWlhJcE8xeHVJQ0FnSUgxY2JpQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQXZMeUIzYUdWdUlIZG9aVzRnYzI5dFpXSnZaSGtnYUdGeklITmpjbVYzWldRZ2QybDBhQ0J6WlhSVWFXMWxiM1YwSUdKMWRDQnVieUJKTGtVdUlHMWhaR1J1WlhOelhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCallXTm9aV1JEYkdWaGNsUnBiV1Z2ZFhRb2JXRnlhMlZ5S1R0Y2JpQWdJQ0I5SUdOaGRHTm9JQ2hsS1h0Y2JpQWdJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJRmRvWlc0Z2QyVWdZWEpsSUdsdUlFa3VSUzRnWW5WMElIUm9aU0J6WTNKcGNIUWdhR0Z6SUdKbFpXNGdaWFpoYkdWa0lITnZJRWt1UlM0Z1pHOWxjMjRuZENBZ2RISjFjM1FnZEdobElHZHNiMkpoYkNCdlltcGxZM1FnZDJobGJpQmpZV3hzWldRZ2JtOXliV0ZzYkhsY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmpZV05vWldSRGJHVmhjbFJwYldWdmRYUXVZMkZzYkNodWRXeHNMQ0J0WVhKclpYSXBPMXh1SUNBZ0lDQWdJQ0I5SUdOaGRHTm9JQ2hsS1h0Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SUhOaGJXVWdZWE1nWVdKdmRtVWdZblYwSUhkb1pXNGdhWFFuY3lCaElIWmxjbk5wYjI0Z2IyWWdTUzVGTGlCMGFHRjBJRzExYzNRZ2FHRjJaU0IwYUdVZ1oyeHZZbUZzSUc5aWFtVmpkQ0JtYjNJZ0ozUm9hWE1uTENCb2IzQm1kV3hzZVNCdmRYSWdZMjl1ZEdWNGRDQmpiM0p5WldOMElHOTBhR1Z5ZDJselpTQnBkQ0IzYVd4c0lIUm9jbTkzSUdFZ1oyeHZZbUZzSUdWeWNtOXlMbHh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGdVMjl0WlNCMlpYSnphVzl1Y3lCdlppQkpMa1V1SUdoaGRtVWdaR2xtWm1WeVpXNTBJSEoxYkdWeklHWnZjaUJqYkdWaGNsUnBiV1Z2ZFhRZ2RuTWdjMlYwVkdsdFpXOTFkRnh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdOaFkyaGxaRU5zWldGeVZHbHRaVzkxZEM1allXeHNLSFJvYVhNc0lHMWhjbXRsY2lrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOVhHNWNibHh1WEc1OVhHNTJZWElnY1hWbGRXVWdQU0JiWFR0Y2JuWmhjaUJrY21GcGJtbHVaeUE5SUdaaGJITmxPMXh1ZG1GeUlHTjFjbkpsYm5SUmRXVjFaVHRjYm5aaGNpQnhkV1YxWlVsdVpHVjRJRDBnTFRFN1hHNWNibVoxYm1OMGFXOXVJR05zWldGdVZYQk9aWGgwVkdsamF5Z3BJSHRjYmlBZ0lDQnBaaUFvSVdSeVlXbHVhVzVuSUh4OElDRmpkWEp5Wlc1MFVYVmxkV1VwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJSDFjYmlBZ0lDQmtjbUZwYm1sdVp5QTlJR1poYkhObE8xeHVJQ0FnSUdsbUlDaGpkWEp5Wlc1MFVYVmxkV1V1YkdWdVozUm9LU0I3WEc0Z0lDQWdJQ0FnSUhGMVpYVmxJRDBnWTNWeWNtVnVkRkYxWlhWbExtTnZibU5oZENoeGRXVjFaU2s3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdjWFZsZFdWSmJtUmxlQ0E5SUMweE8xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb2NYVmxkV1V1YkdWdVozUm9LU0I3WEc0Z0lDQWdJQ0FnSUdSeVlXbHVVWFZsZFdVb0tUdGNiaUFnSUNCOVhHNTlYRzVjYm1aMWJtTjBhVzl1SUdSeVlXbHVVWFZsZFdVb0tTQjdYRzRnSUNBZ2FXWWdLR1J5WVdsdWFXNW5LU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJSFJwYldWdmRYUWdQU0J5ZFc1VWFXMWxiM1YwS0dOc1pXRnVWWEJPWlhoMFZHbGpheWs3WEc0Z0lDQWdaSEpoYVc1cGJtY2dQU0IwY25WbE8xeHVYRzRnSUNBZ2RtRnlJR3hsYmlBOUlIRjFaWFZsTG14bGJtZDBhRHRjYmlBZ0lDQjNhR2xzWlNoc1pXNHBJSHRjYmlBZ0lDQWdJQ0FnWTNWeWNtVnVkRkYxWlhWbElEMGdjWFZsZFdVN1hHNGdJQ0FnSUNBZ0lIRjFaWFZsSUQwZ1cxMDdYRzRnSUNBZ0lDQWdJSGRvYVd4bElDZ3JLM0YxWlhWbFNXNWtaWGdnUENCc1pXNHBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hqZFhKeVpXNTBVWFZsZFdVcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpkWEp5Wlc1MFVYVmxkV1ZiY1hWbGRXVkpibVJsZUYwdWNuVnVLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnY1hWbGRXVkpibVJsZUNBOUlDMHhPMXh1SUNBZ0lDQWdJQ0JzWlc0Z1BTQnhkV1YxWlM1c1pXNW5kR2c3WEc0Z0lDQWdmVnh1SUNBZ0lHTjFjbkpsYm5SUmRXVjFaU0E5SUc1MWJHdzdYRzRnSUNBZ1pISmhhVzVwYm1jZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0J5ZFc1RGJHVmhjbFJwYldWdmRYUW9kR2x0Wlc5MWRDazdYRzU5WEc1Y2JuQnliMk5sYzNNdWJtVjRkRlJwWTJzZ1BTQm1kVzVqZEdsdmJpQW9ablZ1S1NCN1hHNGdJQ0FnZG1GeUlHRnlaM01nUFNCdVpYY2dRWEp5WVhrb1lYSm5kVzFsYm5SekxteGxibWQwYUNBdElERXBPMXh1SUNBZ0lHbG1JQ2hoY21kMWJXVnVkSE11YkdWdVozUm9JRDRnTVNrZ2UxeHVJQ0FnSUNBZ0lDQm1iM0lnS0haaGNpQnBJRDBnTVRzZ2FTQThJR0Z5WjNWdFpXNTBjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWVhKbmMxdHBJQzBnTVYwZ1BTQmhjbWQxYldWdWRITmJhVjA3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdjWFZsZFdVdWNIVnphQ2h1WlhjZ1NYUmxiU2htZFc0c0lHRnlaM01wS1R0Y2JpQWdJQ0JwWmlBb2NYVmxkV1V1YkdWdVozUm9JRDA5UFNBeElDWW1JQ0ZrY21GcGJtbHVaeWtnZTF4dUlDQWdJQ0FnSUNCeWRXNVVhVzFsYjNWMEtHUnlZV2x1VVhWbGRXVXBPMXh1SUNBZ0lIMWNibjA3WEc1Y2JpOHZJSFk0SUd4cGEyVnpJSEJ5WldScFkzUnBZbXhsSUc5aWFtVmpkSE5jYm1aMWJtTjBhVzl1SUVsMFpXMG9ablZ1TENCaGNuSmhlU2tnZTF4dUlDQWdJSFJvYVhNdVpuVnVJRDBnWm5WdU8xeHVJQ0FnSUhSb2FYTXVZWEp5WVhrZ1BTQmhjbkpoZVR0Y2JuMWNia2wwWlcwdWNISnZkRzkwZVhCbExuSjFiaUE5SUdaMWJtTjBhVzl1SUNncElIdGNiaUFnSUNCMGFHbHpMbVoxYmk1aGNIQnNlU2h1ZFd4c0xDQjBhR2x6TG1GeWNtRjVLVHRjYm4wN1hHNXdjbTlqWlhOekxuUnBkR3hsSUQwZ0oySnliM2R6WlhJbk8xeHVjSEp2WTJWemN5NWljbTkzYzJWeUlEMGdkSEoxWlR0Y2JuQnliMk5sYzNNdVpXNTJJRDBnZTMwN1hHNXdjbTlqWlhOekxtRnlaM1lnUFNCYlhUdGNibkJ5YjJObGMzTXVkbVZ5YzJsdmJpQTlJQ2NuT3lBdkx5QmxiWEIwZVNCemRISnBibWNnZEc4Z1lYWnZhV1FnY21WblpYaHdJR2x6YzNWbGMxeHVjSEp2WTJWemN5NTJaWEp6YVc5dWN5QTlJSHQ5TzF4dVhHNW1kVzVqZEdsdmJpQnViMjl3S0NrZ2UzMWNibHh1Y0hKdlkyVnpjeTV2YmlBOUlHNXZiM0E3WEc1d2NtOWpaWE56TG1Ga1pFeHBjM1JsYm1WeUlEMGdibTl2Y0R0Y2JuQnliMk5sYzNNdWIyNWpaU0E5SUc1dmIzQTdYRzV3Y205alpYTnpMbTltWmlBOUlHNXZiM0E3WEc1d2NtOWpaWE56TG5KbGJXOTJaVXhwYzNSbGJtVnlJRDBnYm05dmNEdGNibkJ5YjJObGMzTXVjbVZ0YjNabFFXeHNUR2x6ZEdWdVpYSnpJRDBnYm05dmNEdGNibkJ5YjJObGMzTXVaVzFwZENBOUlHNXZiM0E3WEc1d2NtOWpaWE56TG5CeVpYQmxibVJNYVhOMFpXNWxjaUE5SUc1dmIzQTdYRzV3Y205alpYTnpMbkJ5WlhCbGJtUlBibU5sVEdsemRHVnVaWElnUFNCdWIyOXdPMXh1WEc1d2NtOWpaWE56TG14cGMzUmxibVZ5Y3lBOUlHWjFibU4wYVc5dUlDaHVZVzFsS1NCN0lISmxkSFZ5YmlCYlhTQjlYRzVjYm5CeWIyTmxjM011WW1sdVpHbHVaeUE5SUdaMWJtTjBhVzl1SUNodVlXMWxLU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZHdjbTlqWlhOekxtSnBibVJwYm1jZ2FYTWdibTkwSUhOMWNIQnZjblJsWkNjcE8xeHVmVHRjYmx4dWNISnZZMlZ6Y3k1amQyUWdQU0JtZFc1amRHbHZiaUFvS1NCN0lISmxkSFZ5YmlBbkx5Y2dmVHRjYm5CeWIyTmxjM011WTJoa2FYSWdQU0JtZFc1amRHbHZiaUFvWkdseUtTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0Nkd2NtOWpaWE56TG1Ob1pHbHlJR2x6SUc1dmRDQnpkWEJ3YjNKMFpXUW5LVHRjYm4wN1hHNXdjbTlqWlhOekxuVnRZWE5ySUQwZ1puVnVZM1JwYjI0b0tTQjdJSEpsZEhWeWJpQXdPeUI5TzF4dVhHNWNibHh1THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2WEc0dkx5QlhSVUpRUVVOTElFWlBUMVJGVWx4dUx5OGdMaTkrTDNCeWIyTmxjM012WW5KdmQzTmxjaTVxYzF4dUx5OGdiVzlrZFd4bElHbGtJRDBnTkRSY2JpOHZJRzF2WkhWc1pTQmphSFZ1YTNNZ1BTQXdJaXdpSjNWelpTQnpkSEpwWTNRbk8xeHVYRzVwYlhCdmNuUWdleUJqYkc5amF5QjlJR1p5YjIwZ0p5NHVMMjFoYVc0bk8xeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQmpiR0Z6Y3lCSmJuUmxjblpoYkNCN1hHNWNiaUFnWTI5dWMzUnlkV04wYjNJb2NtRjBaU3htZFc1akxHOXVLU0I3WEc1Y2JpQWdJQ0IwYUdsekxuSmhkR1VnUFNCeVlYUmxPMXh1SUNBZ0lIUm9hWE11YjI0Z1BTQnZianRjYmlBZ0lDQjBhR2x6TG1Oc2IyTnJJRDBnWTJ4dlkyc29LVHNnTHk4Z2FuTm9hVzUwSUdsbmJtOXlaVHBzYVc1bFhHNWNiaUFnSUNCMGFHbHpMbkJoZEhSbGNtNGdQU0JiTVYwN1hHNGdJQ0FnZEdocGN5NXBibVJsZUNBOUlEQTdYRzVjYmlBZ0lDQjBhR2x6TG1WMlpXNTBJRDBnWm5WdVl5QS9JR1oxYm1NZ09pQm1kVzVqZEdsdmJpZ3BJSHNnZlR0Y2JseHVJQ0FnSUdsbUlDaDBhR2x6TG05dUtTQjdYRzRnSUNBZ0lDQjBhR2x6TG5OMFlYSjBLQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lIMWNibHh1SUNCZlpYWmxiblFvWlNrZ2UxeHVJQ0F2THlBZ2FXWWdLSFJvYVhNdWNHRjBkR1Z5Ymx0MGFHbHpMbWx1WkdWNEpYUm9hWE11Y0dGMGRHVnliaTVzWlc1bmRHaGRLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtVjJaVzUwS0dVcE8xeHVJQ0F2THlBZ2ZWeHVJQ0FnSUhSb2FYTXVhVzVrWlhnckt6dGNiaUFnZlZ4dVhHNGdJSE4wYjNBb0tTQjdYRzRnSUNBZ2RHaHBjeTV2YmlBOUlHWmhiSE5sTzF4dUlDQWdJSFJvYVhNdWFXNTBaWEoyWVd3dVkyeGxZWElvS1R0Y2JpQWdmVnh1WEc0Z0lITjBZWEowS0NrZ2UxeHVJQ0FnSUhSb2FYTXViMjRnUFNCMGNuVmxPMXh1SUNBZ0lIUm9hWE11YVc1MFpYSjJZV3dnUFNCMGFHbHpMbU5zYjJOckxtTmhiR3hpWVdOclFYUlVhVzFsS0hSb2FYTXVYMlYyWlc1MExtSnBibVFvZEdocGN5a3NJSFJvYVhNdVkyeHZZMnN1WTI5dWRHVjRkQzVqZFhKeVpXNTBWR2x0WlNrdWNtVndaV0YwS0hSb2FYTXVjbUYwWlM4eE1EQXdLUzUwYjJ4bGNtRnVZMlVvZTJWaGNteDVPaUF3TGpFc0lHeGhkR1U2TVgwcE8xeHVJQ0I5WEc1Y2JpQWdiWE1vYm1WM2NtRjBaU2tnZTF4dUlDQWdJR2xtSUNoMGFHbHpMbTl1S1NCN1hHNGdJQ0FnSUNCMllYSWdjbUYwYVc4Z1BTQnVaWGR5WVhSbEwzUm9hWE11Y21GMFpUdGNiaUFnSUNBZ0lIUm9hWE11Y21GMFpTQTlJRzVsZDNKaGRHVTdYRzRnSUNBZ0lDQjBhR2x6TG1Oc2IyTnJMblJwYldWVGRISmxkR05vS0hSb2FYTXVZMnh2WTJzdVkyOXVkR1Y0ZEM1amRYSnlaVzUwVkdsdFpTd2dXM1JvYVhNdWFXNTBaWEoyWVd4ZExDQnlZWFJwYnlrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSFJvYVhNdWNtRjBaU0E5SUc1bGQzSmhkR1U3WEc0Z0lDQWdmVnh1SUNCOVhHNWNibjFjYmx4dVhHNWNiaTh2SUZkRlFsQkJRMHNnUms5UFZFVlNJQzh2WEc0dkx5QXVMMzR2YW5Ob2FXNTBMV3h2WVdSbGNpRXVMMnhwWWk5MGFXMWxMMmx1ZEdWeWRtRnNMbXB6SWwwc0luTnZkWEpqWlZKdmIzUWlPaUlpZlE9PVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9uZXh1c3VpL2Rpc3QvTmV4dXNVSS5qc1xuLy8gbW9kdWxlIGlkID0gNTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9hc3NpZ25cIiksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9hc3NpZ24uanNcbi8vIG1vZHVsZSBpZCA9IDU3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faHRtbC5qc1xuLy8gbW9kdWxlIGlkID0gNThcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbigpe1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywge2dldDogZnVuY3Rpb24oKXsgcmV0dXJuIDc7IH19KS5hICE9IDc7XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2llOC1kb20tZGVmaW5lLmpzXG4vLyBtb2R1bGUgaWQgPSA1OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lvYmplY3QuanNcbi8vIG1vZHVsZSBpZCA9IDYwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3JcbnZhciBJdGVyYXRvcnMgID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJylcbiAgLCBJVEVSQVRPUiAgID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJylcbiAgLCBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzXG4vLyBtb2R1bGUgaWQgPSA2MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcyl7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVudHJpZXMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgfSBjYXRjaChlKXtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmKHJldCAhPT0gdW5kZWZpbmVkKWFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItY2FsbC5qc1xuLy8gbW9kdWxlIGlkID0gNjJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgICAgICAgID0gcmVxdWlyZSgnLi9fbGlicmFyeScpXG4gICwgJGV4cG9ydCAgICAgICAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIHJlZGVmaW5lICAgICAgID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKVxuICAsIGhpZGUgICAgICAgICAgID0gcmVxdWlyZSgnLi9faGlkZScpXG4gICwgaGFzICAgICAgICAgICAgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIEl0ZXJhdG9ycyAgICAgID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJylcbiAgLCAkaXRlckNyZWF0ZSAgICA9IHJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJylcbiAgLCBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJylcbiAgLCBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKVxuICAsIElURVJBVE9SICAgICAgID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJylcbiAgLCBCVUdHWSAgICAgICAgICA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKSAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gICwgRkZfSVRFUkFUT1IgICAgPSAnQEBpdGVyYXRvcidcbiAgLCBLRVlTICAgICAgICAgICA9ICdrZXlzJ1xuICAsIFZBTFVFUyAgICAgICAgID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKXtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24oa2luZCl7XG4gICAgaWYoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaChraW5kKXtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKXsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCl7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHICAgICAgICA9IE5BTUUgKyAnIEl0ZXJhdG9yJ1xuICAgICwgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTXG4gICAgLCBWQUxVRVNfQlVHID0gZmFsc2VcbiAgICAsIHByb3RvICAgICAgPSBCYXNlLnByb3RvdHlwZVxuICAgICwgJG5hdGl2ZSAgICA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXVxuICAgICwgJGRlZmF1bHQgICA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpXG4gICAgLCAkZW50cmllcyAgID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZFxuICAgICwgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmVcbiAgICAsIG1ldGhvZHMsIGtleSwgSXRlcmF0b3JQcm90b3R5cGU7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYoJGFueU5hdGl2ZSl7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UpKTtcbiAgICBpZihJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSl7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYoIUxJQlJBUlkgJiYgIWhhcyhJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IpKWhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZihERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpe1xuICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCl7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKXtcbiAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICB9XG4gIC8vIFBsdWcgZm9yIGxpYnJhcnlcbiAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gIEl0ZXJhdG9yc1tUQUddICA9IHJldHVyblRoaXM7XG4gIGlmKERFRkFVTFQpe1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6ICBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6ICAgIElTX1NFVCAgICAgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZihGT1JDRUQpZm9yKGtleSBpbiBtZXRob2RzKXtcbiAgICAgIGlmKCEoa2V5IGluIHByb3RvKSlyZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1kZWZpbmUuanNcbi8vIG1vZHVsZSBpZCA9IDYzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBJVEVSQVRPUiAgICAgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKVxuICAsIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uKCl7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uKCl7IHRocm93IDI7IH0pO1xufSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGV4ZWMsIHNraXBDbG9zaW5nKXtcbiAgaWYoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpcmV0dXJuIGZhbHNlO1xuICB2YXIgc2FmZSA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBhcnIgID0gWzddXG4gICAgICAsIGl0ZXIgPSBhcnJbSVRFUkFUT1JdKCk7XG4gICAgaXRlci5uZXh0ID0gZnVuY3Rpb24oKXsgcmV0dXJuIHtkb25lOiBzYWZlID0gdHJ1ZX07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uKCl7IHJldHVybiBpdGVyOyB9O1xuICAgIGV4ZWMoYXJyKTtcbiAgfSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWRldGVjdC5qc1xuLy8gbW9kdWxlIGlkID0gNjRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgICAgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIGRQcyAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpXG4gICwgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJylcbiAgLCBJRV9QUk9UTyAgICA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKVxuICAsIEVtcHR5ICAgICAgID0gZnVuY3Rpb24oKXsgLyogZW1wdHkgKi8gfVxuICAsIFBST1RPVFlQRSAgID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24oKXtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJylcbiAgICAsIGkgICAgICA9IGVudW1CdWdLZXlzLmxlbmd0aFxuICAgICwgbHQgICAgID0gJzwnXG4gICAgLCBndCAgICAgPSAnPidcbiAgICAsIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlKGktLSlkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgcmV0dXJuIGNyZWF0ZURpY3QoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcyl7XG4gIHZhciByZXN1bHQ7XG4gIGlmKE8gIT09IG51bGwpe1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzXG4vLyBtb2R1bGUgaWQgPSA2NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJylcbiAgLCBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pe1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanNcbi8vIG1vZHVsZSBpZCA9IDY2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBoYXMgICAgICAgICAgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIHRvSU9iamVjdCAgICA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpXG4gICwgSUVfUFJPVE8gICAgID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iamVjdCwgbmFtZXMpe1xuICB2YXIgTyAgICAgID0gdG9JT2JqZWN0KG9iamVjdClcbiAgICAsIGkgICAgICA9IDBcbiAgICAsIHJlc3VsdCA9IFtdXG4gICAgLCBrZXk7XG4gIGZvcihrZXkgaW4gTylpZihrZXkgIT0gSUVfUFJPVE8paGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZShuYW1lcy5sZW5ndGggPiBpKWlmKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSl7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzXG4vLyBtb2R1bGUgaWQgPSA2N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3JlZGVmaW5lLmpzXG4vLyBtb2R1bGUgaWQgPSA2OFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgY3R4ICAgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBpbnZva2UgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19pbnZva2UnKVxuICAsIGh0bWwgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2h0bWwnKVxuICAsIGNlbCAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKVxuICAsIGdsb2JhbCAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgcHJvY2VzcyAgICAgICAgICAgID0gZ2xvYmFsLnByb2Nlc3NcbiAgLCBzZXRUYXNrICAgICAgICAgICAgPSBnbG9iYWwuc2V0SW1tZWRpYXRlXG4gICwgY2xlYXJUYXNrICAgICAgICAgID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlXG4gICwgTWVzc2FnZUNoYW5uZWwgICAgID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsXG4gICwgY291bnRlciAgICAgICAgICAgID0gMFxuICAsIHF1ZXVlICAgICAgICAgICAgICA9IHt9XG4gICwgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSdcbiAgLCBkZWZlciwgY2hhbm5lbCwgcG9ydDtcbnZhciBydW4gPSBmdW5jdGlvbigpe1xuICB2YXIgaWQgPSArdGhpcztcbiAgaWYocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKXtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnQpe1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZighc2V0VGFzayB8fCAhY2xlYXJUYXNrKXtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbil7XG4gICAgdmFyIGFyZ3MgPSBbXSwgaSA9IDE7XG4gICAgd2hpbGUoYXJndW1lbnRzLmxlbmd0aCA+IGkpYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24oKXtcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCl7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJyl7XG4gICAgZGVmZXIgPSBmdW5jdGlvbihpZCl7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYoTWVzc2FnZUNoYW5uZWwpe1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWw7XG4gICAgcG9ydCAgICA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaXN0ZW5lcjtcbiAgICBkZWZlciA9IGN0eChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0LCAxKTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZihnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpe1xuICAgIGRlZmVyID0gZnVuY3Rpb24oaWQpe1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKXtcbiAgICBkZWZlciA9IGZ1bmN0aW9uKGlkKXtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uKGlkKXtcbiAgICAgIHNldFRpbWVvdXQoY3R4KHJ1biwgaWQsIDEpLCAwKTtcbiAgICB9O1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiAgIHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190YXNrLmpzXG4vLyBtb2R1bGUgaWQgPSA2OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9pc2FycmF5L2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA3MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhZGFibGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgcHJvY2Vzc05leHRUaWNrID0gcmVxdWlyZSgncHJvY2Vzcy1uZXh0aWNrLWFyZ3MnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5Jyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBEdXBsZXg7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuUmVhZGFibGUuUmVhZGFibGVTdGF0ZSA9IFJlYWRhYmxlU3RhdGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRUUgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG5cbnZhciBFRWxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiAoZW1pdHRlciwgdHlwZSkge1xuICByZXR1cm4gZW1pdHRlci5saXN0ZW5lcnModHlwZSkubGVuZ3RoO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0nKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBidWZmZXJTaGltID0gcmVxdWlyZSgnYnVmZmVyLXNoaW1zJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGRlYnVnVXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBkZWJ1ZyA9IHZvaWQgMDtcbmlmIChkZWJ1Z1V0aWwgJiYgZGVidWdVdGlsLmRlYnVnbG9nKSB7XG4gIGRlYnVnID0gZGVidWdVdGlsLmRlYnVnbG9nKCdzdHJlYW0nKTtcbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24gKCkge307XG59XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlckxpc3QgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvQnVmZmVyTGlzdCcpO1xudmFyIFN0cmluZ0RlY29kZXI7XG5cbnV0aWwuaW5oZXJpdHMoUmVhZGFibGUsIFN0cmVhbSk7XG5cbnZhciBrUHJveHlFdmVudHMgPSBbJ2Vycm9yJywgJ2Nsb3NlJywgJ2Rlc3Ryb3knLCAncGF1c2UnLCAncmVzdW1lJ107XG5cbmZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4pIHtcbiAgLy8gU2FkbHkgdGhpcyBpcyBub3QgY2FjaGVhYmxlIGFzIHNvbWUgbGlicmFyaWVzIGJ1bmRsZSB0aGVpciBvd25cbiAgLy8gZXZlbnQgZW1pdHRlciBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZW0uXG4gIGlmICh0eXBlb2YgZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIoZXZlbnQsIGZuKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGlzIGEgaGFjayB0byBtYWtlIHN1cmUgdGhhdCBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgYW55XG4gICAgLy8gdXNlcmxhbmQgb25lcy4gIE5FVkVSIERPIFRISVMuIFRoaXMgaXMgaGVyZSBvbmx5IGJlY2F1c2UgdGhpcyBjb2RlIG5lZWRzXG4gICAgLy8gdG8gY29udGludWUgdG8gd29yayB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIE5vZGUuanMgdGhhdCBkbyBub3QgaW5jbHVkZVxuICAgIC8vIHRoZSBwcmVwZW5kTGlzdGVuZXIoKSBtZXRob2QuIFRoZSBnb2FsIGlzIHRvIGV2ZW50dWFsbHkgcmVtb3ZlIHRoaXMgaGFjay5cbiAgICBpZiAoIWVtaXR0ZXIuX2V2ZW50cyB8fCAhZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkgZW1pdHRlci5vbihldmVudCwgZm4pO2Vsc2UgaWYgKGlzQXJyYXkoZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkpIGVtaXR0ZXIuX2V2ZW50c1tldmVudF0udW5zaGlmdChmbik7ZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdID0gW2ZuLCBlbWl0dGVyLl9ldmVudHNbZXZlbnRdXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSkge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIC8vIG9iamVjdCBzdHJlYW0gZmxhZy4gVXNlZCB0byBtYWtlIHJlYWQobikgaWdub3JlIG4gYW5kIHRvXG4gIC8vIG1ha2UgYWxsIHRoZSBidWZmZXIgbWVyZ2luZyBhbmQgbGVuZ3RoIGNoZWNrcyBnbyBhd2F5XG4gIHRoaXMub2JqZWN0TW9kZSA9ICEhb3B0aW9ucy5vYmplY3RNb2RlO1xuXG4gIGlmIChzdHJlYW0gaW5zdGFuY2VvZiBEdXBsZXgpIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fCAhIW9wdGlvbnMucmVhZGFibGVPYmplY3RNb2RlO1xuXG4gIC8vIHRoZSBwb2ludCBhdCB3aGljaCBpdCBzdG9wcyBjYWxsaW5nIF9yZWFkKCkgdG8gZmlsbCB0aGUgYnVmZmVyXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgXCJkb24ndCBjYWxsIF9yZWFkIHByZWVtcHRpdmVseSBldmVyXCJcbiAgdmFyIGh3bSA9IG9wdGlvbnMuaGlnaFdhdGVyTWFyaztcbiAgdmFyIGRlZmF1bHRId20gPSB0aGlzLm9iamVjdE1vZGUgPyAxNiA6IDE2ICogMTAyNDtcbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaHdtIHx8IGh3bSA9PT0gMCA/IGh3bSA6IGRlZmF1bHRId207XG5cbiAgLy8gY2FzdCB0byBpbnRzLlxuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSB+fnRoaXMuaGlnaFdhdGVyTWFyaztcblxuICAvLyBBIGxpbmtlZCBsaXN0IGlzIHVzZWQgdG8gc3RvcmUgZGF0YSBjaHVua3MgaW5zdGVhZCBvZiBhbiBhcnJheSBiZWNhdXNlIHRoZVxuICAvLyBsaW5rZWQgbGlzdCBjYW4gcmVtb3ZlIGVsZW1lbnRzIGZyb20gdGhlIGJlZ2lubmluZyBmYXN0ZXIgdGhhblxuICAvLyBhcnJheS5zaGlmdCgpXG4gIHRoaXMuYnVmZmVyID0gbmV3IEJ1ZmZlckxpc3QoKTtcbiAgdGhpcy5sZW5ndGggPSAwO1xuICB0aGlzLnBpcGVzID0gbnVsbDtcbiAgdGhpcy5waXBlc0NvdW50ID0gMDtcbiAgdGhpcy5mbG93aW5nID0gbnVsbDtcbiAgdGhpcy5lbmRlZCA9IGZhbHNlO1xuICB0aGlzLmVuZEVtaXR0ZWQgPSBmYWxzZTtcbiAgdGhpcy5yZWFkaW5nID0gZmFsc2U7XG5cbiAgLy8gYSBmbGFnIHRvIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgb253cml0ZSBjYiBpcyBjYWxsZWQgaW1tZWRpYXRlbHksXG4gIC8vIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2UgYW55XG4gIC8vIGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHdyaXRlIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWU7XG5cbiAgLy8gd2hlbmV2ZXIgd2UgcmV0dXJuIG51bGwsIHRoZW4gd2Ugc2V0IGEgZmxhZyB0byBzYXlcbiAgLy8gdGhhdCB3ZSdyZSBhd2FpdGluZyBhICdyZWFkYWJsZScgZXZlbnQgZW1pc3Npb24uXG4gIHRoaXMubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMucmVhZGFibGVMaXN0ZW5pbmcgPSBmYWxzZTtcbiAgdGhpcy5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JztcblxuICAvLyB3aGVuIHBpcGluZywgd2Ugb25seSBjYXJlIGFib3V0ICdyZWFkYWJsZScgZXZlbnRzIHRoYXQgaGFwcGVuXG4gIC8vIGFmdGVyIHJlYWQoKWluZyBhbGwgdGhlIGJ5dGVzIGFuZCBub3QgZ2V0dGluZyBhbnkgcHVzaGJhY2suXG4gIHRoaXMucmFuT3V0ID0gZmFsc2U7XG5cbiAgLy8gdGhlIG51bWJlciBvZiB3cml0ZXJzIHRoYXQgYXJlIGF3YWl0aW5nIGEgZHJhaW4gZXZlbnQgaW4gLnBpcGUoKXNcbiAgdGhpcy5hd2FpdERyYWluID0gMDtcblxuICAvLyBpZiB0cnVlLCBhIG1heWJlUmVhZE1vcmUgaGFzIGJlZW4gc2NoZWR1bGVkXG4gIHRoaXMucmVhZGluZ01vcmUgPSBmYWxzZTtcblxuICB0aGlzLmRlY29kZXIgPSBudWxsO1xuICB0aGlzLmVuY29kaW5nID0gbnVsbDtcbiAgaWYgKG9wdGlvbnMuZW5jb2RpbmcpIHtcbiAgICBpZiAoIVN0cmluZ0RlY29kZXIpIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2Rlci8nKS5TdHJpbmdEZWNvZGVyO1xuICAgIHRoaXMuZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKG9wdGlvbnMuZW5jb2RpbmcpO1xuICAgIHRoaXMuZW5jb2RpbmcgPSBvcHRpb25zLmVuY29kaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIFJlYWRhYmxlKG9wdGlvbnMpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVhZGFibGUpKSByZXR1cm4gbmV3IFJlYWRhYmxlKG9wdGlvbnMpO1xuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUgPSBuZXcgUmVhZGFibGVTdGF0ZShvcHRpb25zLCB0aGlzKTtcblxuICAvLyBsZWdhY3lcbiAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG5cbiAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMucmVhZCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fcmVhZCA9IG9wdGlvbnMucmVhZDtcblxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cblxuLy8gTWFudWFsbHkgc2hvdmUgc29tZXRoaW5nIGludG8gdGhlIHJlYWQoKSBidWZmZXIuXG4vLyBUaGlzIHJldHVybnMgdHJ1ZSBpZiB0aGUgaGlnaFdhdGVyTWFyayBoYXMgbm90IGJlZW4gaGl0IHlldCxcbi8vIHNpbWlsYXIgdG8gaG93IFdyaXRhYmxlLndyaXRlKCkgcmV0dXJucyB0cnVlIGlmIHlvdSBzaG91bGRcbi8vIHdyaXRlKCkgc29tZSBtb3JlLlxuUmVhZGFibGUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmIHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGVuY29kaW5nIHx8IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcbiAgICBpZiAoZW5jb2RpbmcgIT09IHN0YXRlLmVuY29kaW5nKSB7XG4gICAgICBjaHVuayA9IGJ1ZmZlclNoaW0uZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgZW5jb2RpbmcgPSAnJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBzdGF0ZSwgY2h1bmssIGVuY29kaW5nLCBmYWxzZSk7XG59O1xuXG4vLyBVbnNoaWZ0IHNob3VsZCAqYWx3YXlzKiBiZSBzb21ldGhpbmcgZGlyZWN0bHkgb3V0IG9mIHJlYWQoKVxuUmVhZGFibGUucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgc3RhdGUsIGNodW5rLCAnJywgdHJ1ZSk7XG59O1xuXG5SZWFkYWJsZS5wcm90b3R5cGUuaXNQYXVzZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPT09IGZhbHNlO1xufTtcblxuZnVuY3Rpb24gcmVhZGFibGVBZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZW5jb2RpbmcsIGFkZFRvRnJvbnQpIHtcbiAgdmFyIGVyID0gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuayk7XG4gIGlmIChlcikge1xuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgfSBlbHNlIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpO1xuICB9IGVsc2UgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsgJiYgY2h1bmsubGVuZ3RoID4gMCkge1xuICAgIGlmIChzdGF0ZS5lbmRlZCAmJiAhYWRkVG9Gcm9udCkge1xuICAgICAgdmFyIGUgPSBuZXcgRXJyb3IoJ3N0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GJyk7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmVuZEVtaXR0ZWQgJiYgYWRkVG9Gcm9udCkge1xuICAgICAgdmFyIF9lID0gbmV3IEVycm9yKCdzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCcpO1xuICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgX2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc2tpcEFkZDtcbiAgICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFhZGRUb0Zyb250ICYmICFlbmNvZGluZykge1xuICAgICAgICBjaHVuayA9IHN0YXRlLmRlY29kZXIud3JpdGUoY2h1bmspO1xuICAgICAgICBza2lwQWRkID0gIXN0YXRlLm9iamVjdE1vZGUgJiYgY2h1bmsubGVuZ3RoID09PSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWFkZFRvRnJvbnQpIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcblxuICAgICAgLy8gRG9uJ3QgYWRkIHRvIHRoZSBidWZmZXIgaWYgd2UndmUgZGVjb2RlZCB0byBhbiBlbXB0eSBzdHJpbmcgY2h1bmsgYW5kXG4gICAgICAvLyB3ZSdyZSBub3QgaW4gb2JqZWN0IG1vZGVcbiAgICAgIGlmICghc2tpcEFkZCkge1xuICAgICAgICAvLyBpZiB3ZSB3YW50IHRoZSBkYXRhIG5vdywganVzdCBlbWl0IGl0LlxuICAgICAgICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgIXN0YXRlLnN5bmMpIHtcbiAgICAgICAgICBzdHJlYW0uZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICAgICAgICBzdHJlYW0ucmVhZCgwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB1cGRhdGUgdGhlIGJ1ZmZlciBpbmZvLlxuICAgICAgICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICAgICAgICBpZiAoYWRkVG9Gcm9udCkgc3RhdGUuYnVmZmVyLnVuc2hpZnQoY2h1bmspO2Vsc2Ugc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLm5lZWRSZWFkYWJsZSkgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIWFkZFRvRnJvbnQpIHtcbiAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gbmVlZE1vcmVEYXRhKHN0YXRlKTtcbn1cblxuLy8gaWYgaXQncyBwYXN0IHRoZSBoaWdoIHdhdGVyIG1hcmssIHdlIGNhbiBwdXNoIGluIHNvbWUgbW9yZS5cbi8vIEFsc28sIGlmIHdlIGhhdmUgbm8gZGF0YSB5ZXQsIHdlIGNhbiBzdGFuZCBzb21lXG4vLyBtb3JlIGJ5dGVzLiAgVGhpcyBpcyB0byB3b3JrIGFyb3VuZCBjYXNlcyB3aGVyZSBod209MCxcbi8vIHN1Y2ggYXMgdGhlIHJlcGwuICBBbHNvLCBpZiB0aGUgcHVzaCgpIHRyaWdnZXJlZCBhXG4vLyByZWFkYWJsZSBldmVudCwgYW5kIHRoZSB1c2VyIGNhbGxlZCByZWFkKGxhcmdlTnVtYmVyKSBzdWNoIHRoYXRcbi8vIG5lZWRSZWFkYWJsZSB3YXMgc2V0LCB0aGVuIHdlIG91Z2h0IHRvIHB1c2ggbW9yZSwgc28gdGhhdCBhbm90aGVyXG4vLyAncmVhZGFibGUnIGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkLlxuZnVuY3Rpb24gbmVlZE1vcmVEYXRhKHN0YXRlKSB7XG4gIHJldHVybiAhc3RhdGUuZW5kZWQgJiYgKHN0YXRlLm5lZWRSZWFkYWJsZSB8fCBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmxlbmd0aCA9PT0gMCk7XG59XG5cbi8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuUmVhZGFibGUucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24gKGVuYykge1xuICBpZiAoIVN0cmluZ0RlY29kZXIpIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2Rlci8nKS5TdHJpbmdEZWNvZGVyO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihlbmMpO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nID0gZW5jO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIERvbid0IHJhaXNlIHRoZSBod20gPiA4TUJcbnZhciBNQVhfSFdNID0gMHg4MDAwMDA7XG5mdW5jdGlvbiBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKSB7XG4gIGlmIChuID49IE1BWF9IV00pIHtcbiAgICBuID0gTUFYX0hXTTtcbiAgfSBlbHNlIHtcbiAgICAvLyBHZXQgdGhlIG5leHQgaGlnaGVzdCBwb3dlciBvZiAyIHRvIHByZXZlbnQgaW5jcmVhc2luZyBod20gZXhjZXNzaXZlbHkgaW5cbiAgICAvLyB0aW55IGFtb3VudHNcbiAgICBuLS07XG4gICAgbiB8PSBuID4+PiAxO1xuICAgIG4gfD0gbiA+Pj4gMjtcbiAgICBuIHw9IG4gPj4+IDQ7XG4gICAgbiB8PSBuID4+PiA4O1xuICAgIG4gfD0gbiA+Pj4gMTY7XG4gICAgbisrO1xuICB9XG4gIHJldHVybiBuO1xufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGhvd011Y2hUb1JlYWQobiwgc3RhdGUpIHtcbiAgaWYgKG4gPD0gMCB8fCBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIHJldHVybiAwO1xuICBpZiAoc3RhdGUub2JqZWN0TW9kZSkgcmV0dXJuIDE7XG4gIGlmIChuICE9PSBuKSB7XG4gICAgLy8gT25seSBmbG93IG9uZSBidWZmZXIgYXQgYSB0aW1lXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoKSByZXR1cm4gc3RhdGUuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg7ZWxzZSByZXR1cm4gc3RhdGUubGVuZ3RoO1xuICB9XG4gIC8vIElmIHdlJ3JlIGFza2luZyBmb3IgbW9yZSB0aGFuIHRoZSBjdXJyZW50IGh3bSwgdGhlbiByYWlzZSB0aGUgaHdtLlxuICBpZiAobiA+IHN0YXRlLmhpZ2hXYXRlck1hcmspIHN0YXRlLmhpZ2hXYXRlck1hcmsgPSBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKTtcbiAgaWYgKG4gPD0gc3RhdGUubGVuZ3RoKSByZXR1cm4gbjtcbiAgLy8gRG9uJ3QgaGF2ZSBlbm91Z2hcbiAgaWYgKCFzdGF0ZS5lbmRlZCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbn1cblxuLy8geW91IGNhbiBvdmVycmlkZSBlaXRoZXIgdGhpcyBtZXRob2QsIG9yIHRoZSBhc3luYyBfcmVhZChuKSBiZWxvdy5cblJlYWRhYmxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgZGVidWcoJ3JlYWQnLCBuKTtcbiAgbiA9IHBhcnNlSW50KG4sIDEwKTtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIG5PcmlnID0gbjtcblxuICBpZiAobiAhPT0gMCkgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG5cbiAgLy8gaWYgd2UncmUgZG9pbmcgcmVhZCgwKSB0byB0cmlnZ2VyIGEgcmVhZGFibGUgZXZlbnQsIGJ1dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYSBidW5jaCBvZiBkYXRhIGluIHRoZSBidWZmZXIsIHRoZW4ganVzdCB0cmlnZ2VyXG4gIC8vIHRoZSAncmVhZGFibGUnIGV2ZW50IGFuZCBtb3ZlIG9uLlxuICBpZiAobiA9PT0gMCAmJiBzdGF0ZS5uZWVkUmVhZGFibGUgJiYgKHN0YXRlLmxlbmd0aCA+PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmVuZGVkKSkge1xuICAgIGRlYnVnKCdyZWFkOiBlbWl0UmVhZGFibGUnLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLmVuZGVkKTtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKSBlbmRSZWFkYWJsZSh0aGlzKTtlbHNlIGVtaXRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG4gPSBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKTtcblxuICAvLyBpZiB3ZSd2ZSBlbmRlZCwgYW5kIHdlJ3JlIG5vdyBjbGVhciwgdGhlbiBmaW5pc2ggaXQgdXAuXG4gIGlmIChuID09PSAwICYmIHN0YXRlLmVuZGVkKSB7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgZW5kUmVhZGFibGUodGhpcyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBBbGwgdGhlIGFjdHVhbCBjaHVuayBnZW5lcmF0aW9uIGxvZ2ljIG5lZWRzIHRvIGJlXG4gIC8vICpiZWxvdyogdGhlIGNhbGwgdG8gX3JlYWQuICBUaGUgcmVhc29uIGlzIHRoYXQgaW4gY2VydGFpblxuICAvLyBzeW50aGV0aWMgc3RyZWFtIGNhc2VzLCBzdWNoIGFzIHBhc3N0aHJvdWdoIHN0cmVhbXMsIF9yZWFkXG4gIC8vIG1heSBiZSBhIGNvbXBsZXRlbHkgc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoaWNoIG1heSBjaGFuZ2VcbiAgLy8gdGhlIHN0YXRlIG9mIHRoZSByZWFkIGJ1ZmZlciwgcHJvdmlkaW5nIGVub3VnaCBkYXRhIHdoZW5cbiAgLy8gYmVmb3JlIHRoZXJlIHdhcyAqbm90KiBlbm91Z2guXG4gIC8vXG4gIC8vIFNvLCB0aGUgc3RlcHMgYXJlOlxuICAvLyAxLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHN0YXRlIG9mIHRoaW5ncyB3aWxsIGJlIGFmdGVyIHdlIGRvXG4gIC8vIGEgcmVhZCBmcm9tIHRoZSBidWZmZXIuXG4gIC8vXG4gIC8vIDIuIElmIHRoYXQgcmVzdWx0aW5nIHN0YXRlIHdpbGwgdHJpZ2dlciBhIF9yZWFkLCB0aGVuIGNhbGwgX3JlYWQuXG4gIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBiZSBhc3luY2hyb25vdXMsIG9yIHN5bmNocm9ub3VzLiAgWWVzLCBpdCBpc1xuICAvLyBkZWVwbHkgdWdseSB0byB3cml0ZSBBUElzIHRoaXMgd2F5LCBidXQgdGhhdCBzdGlsbCBkb2Vzbid0IG1lYW5cbiAgLy8gdGhhdCB0aGUgUmVhZGFibGUgY2xhc3Mgc2hvdWxkIGJlaGF2ZSBpbXByb3Blcmx5LCBhcyBzdHJlYW1zIGFyZVxuICAvLyBkZXNpZ25lZCB0byBiZSBzeW5jL2FzeW5jIGFnbm9zdGljLlxuICAvLyBUYWtlIG5vdGUgaWYgdGhlIF9yZWFkIGNhbGwgaXMgc3luYyBvciBhc3luYyAoaWUsIGlmIHRoZSByZWFkIGNhbGxcbiAgLy8gaGFzIHJldHVybmVkIHlldCksIHNvIHRoYXQgd2Uga25vdyB3aGV0aGVyIG9yIG5vdCBpdCdzIHNhZmUgdG8gZW1pdFxuICAvLyAncmVhZGFibGUnIGV0Yy5cbiAgLy9cbiAgLy8gMy4gQWN0dWFsbHkgcHVsbCB0aGUgcmVxdWVzdGVkIGNodW5rcyBvdXQgb2YgdGhlIGJ1ZmZlciBhbmQgcmV0dXJuLlxuXG4gIC8vIGlmIHdlIG5lZWQgYSByZWFkYWJsZSBldmVudCwgdGhlbiB3ZSBuZWVkIHRvIGRvIHNvbWUgcmVhZGluZy5cbiAgdmFyIGRvUmVhZCA9IHN0YXRlLm5lZWRSZWFkYWJsZTtcbiAgZGVidWcoJ25lZWQgcmVhZGFibGUnLCBkb1JlYWQpO1xuXG4gIC8vIGlmIHdlIGN1cnJlbnRseSBoYXZlIGxlc3MgdGhhbiB0aGUgaGlnaFdhdGVyTWFyaywgdGhlbiBhbHNvIHJlYWQgc29tZVxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwIHx8IHN0YXRlLmxlbmd0aCAtIG4gPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgZG9SZWFkID0gdHJ1ZTtcbiAgICBkZWJ1ZygnbGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsnLCBkb1JlYWQpO1xuICB9XG5cbiAgLy8gaG93ZXZlciwgaWYgd2UndmUgZW5kZWQsIHRoZW4gdGhlcmUncyBubyBwb2ludCwgYW5kIGlmIHdlJ3JlIGFscmVhZHlcbiAgLy8gcmVhZGluZywgdGhlbiBpdCdzIHVubmVjZXNzYXJ5LlxuICBpZiAoc3RhdGUuZW5kZWQgfHwgc3RhdGUucmVhZGluZykge1xuICAgIGRvUmVhZCA9IGZhbHNlO1xuICAgIGRlYnVnKCdyZWFkaW5nIG9yIGVuZGVkJywgZG9SZWFkKTtcbiAgfSBlbHNlIGlmIChkb1JlYWQpIHtcbiAgICBkZWJ1ZygnZG8gcmVhZCcpO1xuICAgIHN0YXRlLnJlYWRpbmcgPSB0cnVlO1xuICAgIHN0YXRlLnN5bmMgPSB0cnVlO1xuICAgIC8vIGlmIHRoZSBsZW5ndGggaXMgY3VycmVudGx5IHplcm8sIHRoZW4gd2UgKm5lZWQqIGEgcmVhZGFibGUgZXZlbnQuXG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAvLyBjYWxsIGludGVybmFsIHJlYWQgbWV0aG9kXG4gICAgdGhpcy5fcmVhZChzdGF0ZS5oaWdoV2F0ZXJNYXJrKTtcbiAgICBzdGF0ZS5zeW5jID0gZmFsc2U7XG4gICAgLy8gSWYgX3JlYWQgcHVzaGVkIGRhdGEgc3luY2hyb25vdXNseSwgdGhlbiBgcmVhZGluZ2Agd2lsbCBiZSBmYWxzZSxcbiAgICAvLyBhbmQgd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBob3cgbXVjaCBkYXRhIHdlIGNhbiByZXR1cm4gdG8gdGhlIHVzZXIuXG4gICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSBuID0gaG93TXVjaFRvUmVhZChuT3JpZywgc3RhdGUpO1xuICB9XG5cbiAgdmFyIHJldDtcbiAgaWYgKG4gPiAwKSByZXQgPSBmcm9tTGlzdChuLCBzdGF0ZSk7ZWxzZSByZXQgPSBudWxsO1xuXG4gIGlmIChyZXQgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIG4gPSAwO1xuICB9IGVsc2Uge1xuICAgIHN0YXRlLmxlbmd0aCAtPSBuO1xuICB9XG5cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIElmIHdlIGhhdmUgbm90aGluZyBpbiB0aGUgYnVmZmVyLCB0aGVuIHdlIHdhbnQgdG8ga25vd1xuICAgIC8vIGFzIHNvb24gYXMgd2UgKmRvKiBnZXQgc29tZXRoaW5nIGludG8gdGhlIGJ1ZmZlci5cbiAgICBpZiAoIXN0YXRlLmVuZGVkKSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuXG4gICAgLy8gSWYgd2UgdHJpZWQgdG8gcmVhZCgpIHBhc3QgdGhlIEVPRiwgdGhlbiBlbWl0IGVuZCBvbiB0aGUgbmV4dCB0aWNrLlxuICAgIGlmIChuT3JpZyAhPT0gbiAmJiBzdGF0ZS5lbmRlZCkgZW5kUmVhZGFibGUodGhpcyk7XG4gIH1cblxuICBpZiAocmV0ICE9PSBudWxsKSB0aGlzLmVtaXQoJ2RhdGEnLCByZXQpO1xuXG4gIHJldHVybiByZXQ7XG59O1xuXG5mdW5jdGlvbiBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKSB7XG4gIHZhciBlciA9IG51bGw7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGNodW5rKSAmJiB0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmIGNodW5rICE9PSBudWxsICYmIGNodW5rICE9PSB1bmRlZmluZWQgJiYgIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBlciA9IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsnKTtcbiAgfVxuICByZXR1cm4gZXI7XG59XG5cbmZ1bmN0aW9uIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUuZW5kZWQpIHJldHVybjtcbiAgaWYgKHN0YXRlLmRlY29kZXIpIHtcbiAgICB2YXIgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLmVuZCgpO1xuICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIHtcbiAgICAgIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKTtcbiAgICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICB9XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuXG4gIC8vIGVtaXQgJ3JlYWRhYmxlJyBub3cgdG8gbWFrZSBzdXJlIGl0IGdldHMgcGlja2VkIHVwLlxuICBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbn1cblxuLy8gRG9uJ3QgZW1pdCByZWFkYWJsZSByaWdodCBhd2F5IGluIHN5bmMgbW9kZSwgYmVjYXVzZSB0aGlzIGNhbiB0cmlnZ2VyXG4vLyBhbm90aGVyIHJlYWQoKSBjYWxsID0+IHN0YWNrIG92ZXJmbG93LiAgVGhpcyB3YXksIGl0IG1pZ2h0IHRyaWdnZXJcbi8vIGEgbmV4dFRpY2sgcmVjdXJzaW9uIHdhcm5pbmcsIGJ1dCB0aGF0J3Mgbm90IHNvIGJhZC5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgaWYgKCFzdGF0ZS5lbWl0dGVkUmVhZGFibGUpIHtcbiAgICBkZWJ1ZygnZW1pdFJlYWRhYmxlJywgc3RhdGUuZmxvd2luZyk7XG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICBpZiAoc3RhdGUuc3luYykgcHJvY2Vzc05leHRUaWNrKGVtaXRSZWFkYWJsZV8sIHN0cmVhbSk7ZWxzZSBlbWl0UmVhZGFibGVfKHN0cmVhbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlXyhzdHJlYW0pIHtcbiAgZGVidWcoJ2VtaXQgcmVhZGFibGUnKTtcbiAgc3RyZWFtLmVtaXQoJ3JlYWRhYmxlJyk7XG4gIGZsb3coc3RyZWFtKTtcbn1cblxuLy8gYXQgdGhpcyBwb2ludCwgdGhlIHVzZXIgaGFzIHByZXN1bWFibHkgc2VlbiB0aGUgJ3JlYWRhYmxlJyBldmVudCxcbi8vIGFuZCBjYWxsZWQgcmVhZCgpIHRvIGNvbnN1bWUgc29tZSBkYXRhLiAgdGhhdCBtYXkgaGF2ZSB0cmlnZ2VyZWRcbi8vIGluIHR1cm4gYW5vdGhlciBfcmVhZChuKSBjYWxsLCBpbiB3aGljaCBjYXNlIHJlYWRpbmcgPSB0cnVlIGlmXG4vLyBpdCdzIGluIHByb2dyZXNzLlxuLy8gSG93ZXZlciwgaWYgd2UncmUgbm90IGVuZGVkLCBvciByZWFkaW5nLCBhbmQgdGhlIGxlbmd0aCA8IGh3bSxcbi8vIHRoZW4gZ28gYWhlYWQgYW5kIHRyeSB0byByZWFkIHNvbWUgbW9yZSBwcmVlbXB0aXZlbHkuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nTW9yZSkge1xuICAgIHN0YXRlLnJlYWRpbmdNb3JlID0gdHJ1ZTtcbiAgICBwcm9jZXNzTmV4dFRpY2sobWF5YmVSZWFkTW9yZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1heWJlUmVhZE1vcmVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgdmFyIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgd2hpbGUgKCFzdGF0ZS5yZWFkaW5nICYmICFzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5lbmRlZCAmJiBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgZGVidWcoJ21heWJlUmVhZE1vcmUgcmVhZCAwJyk7XG4gICAgc3RyZWFtLnJlYWQoMCk7XG4gICAgaWYgKGxlbiA9PT0gc3RhdGUubGVuZ3RoKVxuICAgICAgLy8gZGlkbid0IGdldCBhbnkgZGF0YSwgc3RvcCBzcGlubmluZy5cbiAgICAgIGJyZWFrO2Vsc2UgbGVuID0gc3RhdGUubGVuZ3RoO1xuICB9XG4gIHN0YXRlLnJlYWRpbmdNb3JlID0gZmFsc2U7XG59XG5cbi8vIGFic3RyYWN0IG1ldGhvZC4gIHRvIGJlIG92ZXJyaWRkZW4gaW4gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vIGNhbGwgY2IoZXIsIGRhdGEpIHdoZXJlIGRhdGEgaXMgPD0gbiBpbiBsZW5ndGguXG4vLyBmb3IgdmlydHVhbCAobm9uLXN0cmluZywgbm9uLWJ1ZmZlcikgc3RyZWFtcywgXCJsZW5ndGhcIiBpcyBzb21ld2hhdFxuLy8gYXJiaXRyYXJ5LCBhbmQgcGVyaGFwcyBub3QgdmVyeSBtZWFuaW5nZnVsLlxuUmVhZGFibGUucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignX3JlYWQoKSBpcyBub3QgaW1wbGVtZW50ZWQnKSk7XG59O1xuXG5SZWFkYWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uIChkZXN0LCBwaXBlT3B0cykge1xuICB2YXIgc3JjID0gdGhpcztcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICBzd2l0Y2ggKHN0YXRlLnBpcGVzQ291bnQpIHtcbiAgICBjYXNlIDA6XG4gICAgICBzdGF0ZS5waXBlcyA9IGRlc3Q7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6XG4gICAgICBzdGF0ZS5waXBlcyA9IFtzdGF0ZS5waXBlcywgZGVzdF07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgc3RhdGUucGlwZXMucHVzaChkZXN0KTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHN0YXRlLnBpcGVzQ291bnQgKz0gMTtcbiAgZGVidWcoJ3BpcGUgY291bnQ9JWQgb3B0cz0laicsIHN0YXRlLnBpcGVzQ291bnQsIHBpcGVPcHRzKTtcblxuICB2YXIgZG9FbmQgPSAoIXBpcGVPcHRzIHx8IHBpcGVPcHRzLmVuZCAhPT0gZmFsc2UpICYmIGRlc3QgIT09IHByb2Nlc3Muc3Rkb3V0ICYmIGRlc3QgIT09IHByb2Nlc3Muc3RkZXJyO1xuXG4gIHZhciBlbmRGbiA9IGRvRW5kID8gb25lbmQgOiBjbGVhbnVwO1xuICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkgcHJvY2Vzc05leHRUaWNrKGVuZEZuKTtlbHNlIHNyYy5vbmNlKCdlbmQnLCBlbmRGbik7XG5cbiAgZGVzdC5vbigndW5waXBlJywgb251bnBpcGUpO1xuICBmdW5jdGlvbiBvbnVucGlwZShyZWFkYWJsZSkge1xuICAgIGRlYnVnKCdvbnVucGlwZScpO1xuICAgIGlmIChyZWFkYWJsZSA9PT0gc3JjKSB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgZGVidWcoJ29uZW5kJyk7XG4gICAgZGVzdC5lbmQoKTtcbiAgfVxuXG4gIC8vIHdoZW4gdGhlIGRlc3QgZHJhaW5zLCBpdCByZWR1Y2VzIHRoZSBhd2FpdERyYWluIGNvdW50ZXJcbiAgLy8gb24gdGhlIHNvdXJjZS4gIFRoaXMgd291bGQgYmUgbW9yZSBlbGVnYW50IHdpdGggYSAub25jZSgpXG4gIC8vIGhhbmRsZXIgaW4gZmxvdygpLCBidXQgYWRkaW5nIGFuZCByZW1vdmluZyByZXBlYXRlZGx5IGlzXG4gIC8vIHRvbyBzbG93LlxuICB2YXIgb25kcmFpbiA9IHBpcGVPbkRyYWluKHNyYyk7XG4gIGRlc3Qub24oJ2RyYWluJywgb25kcmFpbik7XG5cbiAgdmFyIGNsZWFuZWRVcCA9IGZhbHNlO1xuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIGRlYnVnKCdjbGVhbnVwJyk7XG4gICAgLy8gY2xlYW51cCBldmVudCBoYW5kbGVycyBvbmNlIHRoZSBwaXBlIGlzIGJyb2tlblxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2RyYWluJywgb25kcmFpbik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCd1bnBpcGUnLCBvbnVucGlwZSk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBjbGVhbnVwKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbmRhdGEpO1xuXG4gICAgY2xlYW5lZFVwID0gdHJ1ZTtcblxuICAgIC8vIGlmIHRoZSByZWFkZXIgaXMgd2FpdGluZyBmb3IgYSBkcmFpbiBldmVudCBmcm9tIHRoaXNcbiAgICAvLyBzcGVjaWZpYyB3cml0ZXIsIHRoZW4gaXQgd291bGQgY2F1c2UgaXQgdG8gbmV2ZXIgc3RhcnRcbiAgICAvLyBmbG93aW5nIGFnYWluLlxuICAgIC8vIFNvLCBpZiB0aGlzIGlzIGF3YWl0aW5nIGEgZHJhaW4sIHRoZW4gd2UganVzdCBjYWxsIGl0IG5vdy5cbiAgICAvLyBJZiB3ZSBkb24ndCBrbm93LCB0aGVuIGFzc3VtZSB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBvbmUuXG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gJiYgKCFkZXN0Ll93cml0YWJsZVN0YXRlIHx8IGRlc3QuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSkgb25kcmFpbigpO1xuICB9XG5cbiAgLy8gSWYgdGhlIHVzZXIgcHVzaGVzIG1vcmUgZGF0YSB3aGlsZSB3ZSdyZSB3cml0aW5nIHRvIGRlc3QgdGhlbiB3ZSdsbCBlbmQgdXBcbiAgLy8gaW4gb25kYXRhIGFnYWluLiBIb3dldmVyLCB3ZSBvbmx5IHdhbnQgdG8gaW5jcmVhc2UgYXdhaXREcmFpbiBvbmNlIGJlY2F1c2VcbiAgLy8gZGVzdCB3aWxsIG9ubHkgZW1pdCBvbmUgJ2RyYWluJyBldmVudCBmb3IgdGhlIG11bHRpcGxlIHdyaXRlcy5cbiAgLy8gPT4gSW50cm9kdWNlIGEgZ3VhcmQgb24gaW5jcmVhc2luZyBhd2FpdERyYWluLlxuICB2YXIgaW5jcmVhc2VkQXdhaXREcmFpbiA9IGZhbHNlO1xuICBzcmMub24oJ2RhdGEnLCBvbmRhdGEpO1xuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBkZWJ1Zygnb25kYXRhJyk7XG4gICAgaW5jcmVhc2VkQXdhaXREcmFpbiA9IGZhbHNlO1xuICAgIHZhciByZXQgPSBkZXN0LndyaXRlKGNodW5rKTtcbiAgICBpZiAoZmFsc2UgPT09IHJldCAmJiAhaW5jcmVhc2VkQXdhaXREcmFpbikge1xuICAgICAgLy8gSWYgdGhlIHVzZXIgdW5waXBlZCBkdXJpbmcgYGRlc3Qud3JpdGUoKWAsIGl0IGlzIHBvc3NpYmxlXG4gICAgICAvLyB0byBnZXQgc3R1Y2sgaW4gYSBwZXJtYW5lbnRseSBwYXVzZWQgc3RhdGUgaWYgdGhhdCB3cml0ZVxuICAgICAgLy8gYWxzbyByZXR1cm5lZCBmYWxzZS5cbiAgICAgIC8vID0+IENoZWNrIHdoZXRoZXIgYGRlc3RgIGlzIHN0aWxsIGEgcGlwaW5nIGRlc3RpbmF0aW9uLlxuICAgICAgaWYgKChzdGF0ZS5waXBlc0NvdW50ID09PSAxICYmIHN0YXRlLnBpcGVzID09PSBkZXN0IHx8IHN0YXRlLnBpcGVzQ291bnQgPiAxICYmIGluZGV4T2Yoc3RhdGUucGlwZXMsIGRlc3QpICE9PSAtMSkgJiYgIWNsZWFuZWRVcCkge1xuICAgICAgICBkZWJ1ZygnZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlJywgc3JjLl9yZWFkYWJsZVN0YXRlLmF3YWl0RHJhaW4pO1xuICAgICAgICBzcmMuX3JlYWRhYmxlU3RhdGUuYXdhaXREcmFpbisrO1xuICAgICAgICBpbmNyZWFzZWRBd2FpdERyYWluID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHNyYy5wYXVzZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBkZXN0IGhhcyBhbiBlcnJvciwgdGhlbiBzdG9wIHBpcGluZyBpbnRvIGl0LlxuICAvLyBob3dldmVyLCBkb24ndCBzdXBwcmVzcyB0aGUgdGhyb3dpbmcgYmVoYXZpb3IgZm9yIHRoaXMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBkZWJ1Zygnb25lcnJvcicsIGVyKTtcbiAgICB1bnBpcGUoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGlmIChFRWxpc3RlbmVyQ291bnQoZGVzdCwgJ2Vycm9yJykgPT09IDApIGRlc3QuZW1pdCgnZXJyb3InLCBlcik7XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgb3VyIGVycm9yIGhhbmRsZXIgaXMgYXR0YWNoZWQgYmVmb3JlIHVzZXJsYW5kIG9uZXMuXG4gIHByZXBlbmRMaXN0ZW5lcihkZXN0LCAnZXJyb3InLCBvbmVycm9yKTtcblxuICAvLyBCb3RoIGNsb3NlIGFuZCBmaW5pc2ggc2hvdWxkIHRyaWdnZXIgdW5waXBlLCBidXQgb25seSBvbmNlLlxuICBmdW5jdGlvbiBvbmNsb3NlKCkge1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICB1bnBpcGUoKTtcbiAgfVxuICBkZXN0Lm9uY2UoJ2Nsb3NlJywgb25jbG9zZSk7XG4gIGZ1bmN0aW9uIG9uZmluaXNoKCkge1xuICAgIGRlYnVnKCdvbmZpbmlzaCcpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG4gICAgdW5waXBlKCk7XG4gIH1cbiAgZGVzdC5vbmNlKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG5cbiAgZnVuY3Rpb24gdW5waXBlKCkge1xuICAgIGRlYnVnKCd1bnBpcGUnKTtcbiAgICBzcmMudW5waXBlKGRlc3QpO1xuICB9XG5cbiAgLy8gdGVsbCB0aGUgZGVzdCB0aGF0IGl0J3MgYmVpbmcgcGlwZWQgdG9cbiAgZGVzdC5lbWl0KCdwaXBlJywgc3JjKTtcblxuICAvLyBzdGFydCB0aGUgZmxvdyBpZiBpdCBoYXNuJ3QgYmVlbiBzdGFydGVkIGFscmVhZHkuXG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwaXBlIHJlc3VtZScpO1xuICAgIHNyYy5yZXN1bWUoKTtcbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufTtcblxuZnVuY3Rpb24gcGlwZU9uRHJhaW4oc3JjKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN0YXRlID0gc3JjLl9yZWFkYWJsZVN0YXRlO1xuICAgIGRlYnVnKCdwaXBlT25EcmFpbicsIHN0YXRlLmF3YWl0RHJhaW4pO1xuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluKSBzdGF0ZS5hd2FpdERyYWluLS07XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gPT09IDAgJiYgRUVsaXN0ZW5lckNvdW50KHNyYywgJ2RhdGEnKSkge1xuICAgICAgc3RhdGUuZmxvd2luZyA9IHRydWU7XG4gICAgICBmbG93KHNyYyk7XG4gICAgfVxuICB9O1xufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUudW5waXBlID0gZnVuY3Rpb24gKGRlc3QpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICAvLyBpZiB3ZSdyZSBub3QgcGlwaW5nIGFueXdoZXJlLCB0aGVuIGRvIG5vdGhpbmcuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAwKSByZXR1cm4gdGhpcztcblxuICAvLyBqdXN0IG9uZSBkZXN0aW5hdGlvbi4gIG1vc3QgY29tbW9uIGNhc2UuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSB7XG4gICAgLy8gcGFzc2VkIGluIG9uZSwgYnV0IGl0J3Mgbm90IHRoZSByaWdodCBvbmUuXG4gICAgaWYgKGRlc3QgJiYgZGVzdCAhPT0gc3RhdGUucGlwZXMpIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKCFkZXN0KSBkZXN0ID0gc3RhdGUucGlwZXM7XG5cbiAgICAvLyBnb3QgYSBtYXRjaC5cbiAgICBzdGF0ZS5waXBlcyA9IG51bGw7XG4gICAgc3RhdGUucGlwZXNDb3VudCA9IDA7XG4gICAgc3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIGlmIChkZXN0KSBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gc2xvdyBjYXNlLiBtdWx0aXBsZSBwaXBlIGRlc3RpbmF0aW9ucy5cblxuICBpZiAoIWRlc3QpIHtcbiAgICAvLyByZW1vdmUgYWxsLlxuICAgIHZhciBkZXN0cyA9IHN0YXRlLnBpcGVzO1xuICAgIHZhciBsZW4gPSBzdGF0ZS5waXBlc0NvdW50O1xuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBkZXN0c1tpXS5lbWl0KCd1bnBpcGUnLCB0aGlzKTtcbiAgICB9cmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB0cnkgdG8gZmluZCB0aGUgcmlnaHQgb25lLlxuICB2YXIgaW5kZXggPSBpbmRleE9mKHN0YXRlLnBpcGVzLCBkZXN0KTtcbiAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIHRoaXM7XG5cbiAgc3RhdGUucGlwZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgc3RhdGUucGlwZXNDb3VudCAtPSAxO1xuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMSkgc3RhdGUucGlwZXMgPSBzdGF0ZS5waXBlc1swXTtcblxuICBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gc2V0IHVwIGRhdGEgZXZlbnRzIGlmIHRoZXkgYXJlIGFza2VkIGZvclxuLy8gRW5zdXJlIHJlYWRhYmxlIGxpc3RlbmVycyBldmVudHVhbGx5IGdldCBzb21ldGhpbmdcblJlYWRhYmxlLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldiwgZm4pIHtcbiAgdmFyIHJlcyA9IFN0cmVhbS5wcm90b3R5cGUub24uY2FsbCh0aGlzLCBldiwgZm4pO1xuXG4gIGlmIChldiA9PT0gJ2RhdGEnKSB7XG4gICAgLy8gU3RhcnQgZmxvd2luZyBvbiBuZXh0IHRpY2sgaWYgc3RyZWFtIGlzbid0IGV4cGxpY2l0bHkgcGF1c2VkXG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyAhPT0gZmFsc2UpIHRoaXMucmVzdW1lKCk7XG4gIH0gZWxzZSBpZiAoZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICAgIGlmICghc3RhdGUuZW5kRW1pdHRlZCAmJiAhc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcpIHtcbiAgICAgIHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nID0gc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgICAgIHByb2Nlc3NOZXh0VGljayhuUmVhZGluZ05leHRUaWNrLCB0aGlzKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGVuZ3RoKSB7XG4gICAgICAgIGVtaXRSZWFkYWJsZSh0aGlzLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG5SZWFkYWJsZS5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBSZWFkYWJsZS5wcm90b3R5cGUub247XG5cbmZ1bmN0aW9uIG5SZWFkaW5nTmV4dFRpY2soc2VsZikge1xuICBkZWJ1ZygncmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwJyk7XG4gIHNlbGYucmVhZCgwKTtcbn1cblxuLy8gcGF1c2UoKSBhbmQgcmVzdW1lKCkgYXJlIHJlbW5hbnRzIG9mIHRoZSBsZWdhY3kgcmVhZGFibGUgc3RyZWFtIEFQSVxuLy8gSWYgdGhlIHVzZXIgdXNlcyB0aGVtLCB0aGVuIHN3aXRjaCBpbnRvIG9sZCBtb2RlLlxuUmVhZGFibGUucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZScpO1xuICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlO1xuICAgIHJlc3VtZSh0aGlzLCBzdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiByZXN1bWUoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlc3VtZVNjaGVkdWxlZCkge1xuICAgIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IHRydWU7XG4gICAgcHJvY2Vzc05leHRUaWNrKHJlc3VtZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3VtZV8oc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICBkZWJ1ZygncmVzdW1lIHJlYWQgMCcpO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICB9XG5cbiAgc3RhdGUucmVzdW1lU2NoZWR1bGVkID0gZmFsc2U7XG4gIHN0YXRlLmF3YWl0RHJhaW4gPSAwO1xuICBzdHJlYW0uZW1pdCgncmVzdW1lJyk7XG4gIGZsb3coc3RyZWFtKTtcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLnJlYWRpbmcpIHN0cmVhbS5yZWFkKDApO1xufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gIGRlYnVnKCdjYWxsIHBhdXNlIGZsb3dpbmc9JWonLCB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpO1xuICBpZiAoZmFsc2UgIT09IHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwYXVzZScpO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIHRoaXMuZW1pdCgncGF1c2UnKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIGZsb3coc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgZGVidWcoJ2Zsb3cnLCBzdGF0ZS5mbG93aW5nKTtcbiAgd2hpbGUgKHN0YXRlLmZsb3dpbmcgJiYgc3RyZWFtLnJlYWQoKSAhPT0gbnVsbCkge31cbn1cblxuLy8gd3JhcCBhbiBvbGQtc3R5bGUgc3RyZWFtIGFzIHRoZSBhc3luYyBkYXRhIHNvdXJjZS5cbi8vIFRoaXMgaXMgKm5vdCogcGFydCBvZiB0aGUgcmVhZGFibGUgc3RyZWFtIGludGVyZmFjZS5cbi8vIEl0IGlzIGFuIHVnbHkgdW5mb3J0dW5hdGUgbWVzcyBvZiBoaXN0b3J5LlxuUmVhZGFibGUucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciBwYXVzZWQgPSBmYWxzZTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgIGRlYnVnKCd3cmFwcGVkIGVuZCcpO1xuICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIHNlbGYucHVzaChjaHVuayk7XG4gICAgfVxuXG4gICAgc2VsZi5wdXNoKG51bGwpO1xuICB9KTtcblxuICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBkYXRhJyk7XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG5cbiAgICAvLyBkb24ndCBza2lwIG92ZXIgZmFsc3kgdmFsdWVzIGluIG9iamVjdE1vZGVcbiAgICBpZiAoc3RhdGUub2JqZWN0TW9kZSAmJiAoY2h1bmsgPT09IG51bGwgfHwgY2h1bmsgPT09IHVuZGVmaW5lZCkpIHJldHVybjtlbHNlIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiAoIWNodW5rIHx8ICFjaHVuay5sZW5ndGgpKSByZXR1cm47XG5cbiAgICB2YXIgcmV0ID0gc2VsZi5wdXNoKGNodW5rKTtcbiAgICBpZiAoIXJldCkge1xuICAgICAgcGF1c2VkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5wYXVzZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gcHJveHkgYWxsIHRoZSBvdGhlciBtZXRob2RzLlxuICAvLyBpbXBvcnRhbnQgd2hlbiB3cmFwcGluZyBmaWx0ZXJzIGFuZCBkdXBsZXhlcy5cbiAgZm9yICh2YXIgaSBpbiBzdHJlYW0pIHtcbiAgICBpZiAodGhpc1tpXSA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBzdHJlYW1baV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNbaV0gPSBmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHN0cmVhbVttZXRob2RdLmFwcGx5KHN0cmVhbSwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgIH0oaSk7XG4gICAgfVxuICB9XG5cbiAgLy8gcHJveHkgY2VydGFpbiBpbXBvcnRhbnQgZXZlbnRzLlxuICBmb3IgKHZhciBuID0gMDsgbiA8IGtQcm94eUV2ZW50cy5sZW5ndGg7IG4rKykge1xuICAgIHN0cmVhbS5vbihrUHJveHlFdmVudHNbbl0sIHNlbGYuZW1pdC5iaW5kKHNlbGYsIGtQcm94eUV2ZW50c1tuXSkpO1xuICB9XG5cbiAgLy8gd2hlbiB3ZSB0cnkgdG8gY29uc3VtZSBzb21lIG1vcmUgYnl0ZXMsIHNpbXBseSB1bnBhdXNlIHRoZVxuICAvLyB1bmRlcmx5aW5nIHN0cmVhbS5cbiAgc2VsZi5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgX3JlYWQnLCBuKTtcbiAgICBpZiAocGF1c2VkKSB7XG4gICAgICBwYXVzZWQgPSBmYWxzZTtcbiAgICAgIHN0cmVhbS5yZXN1bWUoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHNlbGY7XG59O1xuXG4vLyBleHBvc2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuXG5SZWFkYWJsZS5fZnJvbUxpc3QgPSBmcm9tTGlzdDtcblxuLy8gUGx1Y2sgb2ZmIG4gYnl0ZXMgZnJvbSBhbiBhcnJheSBvZiBidWZmZXJzLlxuLy8gTGVuZ3RoIGlzIHRoZSBjb21iaW5lZCBsZW5ndGhzIG9mIGFsbCB0aGUgYnVmZmVycyBpbiB0aGUgbGlzdC5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gZnJvbUxpc3Qobiwgc3RhdGUpIHtcbiAgLy8gbm90aGluZyBidWZmZXJlZFxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICB2YXIgcmV0O1xuICBpZiAoc3RhdGUub2JqZWN0TW9kZSkgcmV0ID0gc3RhdGUuYnVmZmVyLnNoaWZ0KCk7ZWxzZSBpZiAoIW4gfHwgbiA+PSBzdGF0ZS5sZW5ndGgpIHtcbiAgICAvLyByZWFkIGl0IGFsbCwgdHJ1bmNhdGUgdGhlIGxpc3RcbiAgICBpZiAoc3RhdGUuZGVjb2RlcikgcmV0ID0gc3RhdGUuYnVmZmVyLmpvaW4oJycpO2Vsc2UgaWYgKHN0YXRlLmJ1ZmZlci5sZW5ndGggPT09IDEpIHJldCA9IHN0YXRlLmJ1ZmZlci5oZWFkLmRhdGE7ZWxzZSByZXQgPSBzdGF0ZS5idWZmZXIuY29uY2F0KHN0YXRlLmxlbmd0aCk7XG4gICAgc3RhdGUuYnVmZmVyLmNsZWFyKCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gcmVhZCBwYXJ0IG9mIGxpc3RcbiAgICByZXQgPSBmcm9tTGlzdFBhcnRpYWwobiwgc3RhdGUuYnVmZmVyLCBzdGF0ZS5kZWNvZGVyKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbi8vIEV4dHJhY3RzIG9ubHkgZW5vdWdoIGJ1ZmZlcmVkIGRhdGEgdG8gc2F0aXNmeSB0aGUgYW1vdW50IHJlcXVlc3RlZC5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gZnJvbUxpc3RQYXJ0aWFsKG4sIGxpc3QsIGhhc1N0cmluZ3MpIHtcbiAgdmFyIHJldDtcbiAgaWYgKG4gPCBsaXN0LmhlYWQuZGF0YS5sZW5ndGgpIHtcbiAgICAvLyBzbGljZSBpcyB0aGUgc2FtZSBmb3IgYnVmZmVycyBhbmQgc3RyaW5nc1xuICAgIHJldCA9IGxpc3QuaGVhZC5kYXRhLnNsaWNlKDAsIG4pO1xuICAgIGxpc3QuaGVhZC5kYXRhID0gbGlzdC5oZWFkLmRhdGEuc2xpY2Uobik7XG4gIH0gZWxzZSBpZiAobiA9PT0gbGlzdC5oZWFkLmRhdGEubGVuZ3RoKSB7XG4gICAgLy8gZmlyc3QgY2h1bmsgaXMgYSBwZXJmZWN0IG1hdGNoXG4gICAgcmV0ID0gbGlzdC5zaGlmdCgpO1xuICB9IGVsc2Uge1xuICAgIC8vIHJlc3VsdCBzcGFucyBtb3JlIHRoYW4gb25lIGJ1ZmZlclxuICAgIHJldCA9IGhhc1N0cmluZ3MgPyBjb3B5RnJvbUJ1ZmZlclN0cmluZyhuLCBsaXN0KSA6IGNvcHlGcm9tQnVmZmVyKG4sIGxpc3QpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbi8vIENvcGllcyBhIHNwZWNpZmllZCBhbW91bnQgb2YgY2hhcmFjdGVycyBmcm9tIHRoZSBsaXN0IG9mIGJ1ZmZlcmVkIGRhdGFcbi8vIGNodW5rcy5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gY29weUZyb21CdWZmZXJTdHJpbmcobiwgbGlzdCkge1xuICB2YXIgcCA9IGxpc3QuaGVhZDtcbiAgdmFyIGMgPSAxO1xuICB2YXIgcmV0ID0gcC5kYXRhO1xuICBuIC09IHJldC5sZW5ndGg7XG4gIHdoaWxlIChwID0gcC5uZXh0KSB7XG4gICAgdmFyIHN0ciA9IHAuZGF0YTtcbiAgICB2YXIgbmIgPSBuID4gc3RyLmxlbmd0aCA/IHN0ci5sZW5ndGggOiBuO1xuICAgIGlmIChuYiA9PT0gc3RyLmxlbmd0aCkgcmV0ICs9IHN0cjtlbHNlIHJldCArPSBzdHIuc2xpY2UoMCwgbik7XG4gICAgbiAtPSBuYjtcbiAgICBpZiAobiA9PT0gMCkge1xuICAgICAgaWYgKG5iID09PSBzdHIubGVuZ3RoKSB7XG4gICAgICAgICsrYztcbiAgICAgICAgaWYgKHAubmV4dCkgbGlzdC5oZWFkID0gcC5uZXh0O2Vsc2UgbGlzdC5oZWFkID0gbGlzdC50YWlsID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpc3QuaGVhZCA9IHA7XG4gICAgICAgIHAuZGF0YSA9IHN0ci5zbGljZShuYik7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgKytjO1xuICB9XG4gIGxpc3QubGVuZ3RoIC09IGM7XG4gIHJldHVybiByZXQ7XG59XG5cbi8vIENvcGllcyBhIHNwZWNpZmllZCBhbW91bnQgb2YgYnl0ZXMgZnJvbSB0aGUgbGlzdCBvZiBidWZmZXJlZCBkYXRhIGNodW5rcy5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gY29weUZyb21CdWZmZXIobiwgbGlzdCkge1xuICB2YXIgcmV0ID0gYnVmZmVyU2hpbS5hbGxvY1Vuc2FmZShuKTtcbiAgdmFyIHAgPSBsaXN0LmhlYWQ7XG4gIHZhciBjID0gMTtcbiAgcC5kYXRhLmNvcHkocmV0KTtcbiAgbiAtPSBwLmRhdGEubGVuZ3RoO1xuICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgIHZhciBidWYgPSBwLmRhdGE7XG4gICAgdmFyIG5iID0gbiA+IGJ1Zi5sZW5ndGggPyBidWYubGVuZ3RoIDogbjtcbiAgICBidWYuY29weShyZXQsIHJldC5sZW5ndGggLSBuLCAwLCBuYik7XG4gICAgbiAtPSBuYjtcbiAgICBpZiAobiA9PT0gMCkge1xuICAgICAgaWYgKG5iID09PSBidWYubGVuZ3RoKSB7XG4gICAgICAgICsrYztcbiAgICAgICAgaWYgKHAubmV4dCkgbGlzdC5oZWFkID0gcC5uZXh0O2Vsc2UgbGlzdC5oZWFkID0gbGlzdC50YWlsID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpc3QuaGVhZCA9IHA7XG4gICAgICAgIHAuZGF0YSA9IGJ1Zi5zbGljZShuYik7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgKytjO1xuICB9XG4gIGxpc3QubGVuZ3RoIC09IGM7XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGVuZFJlYWRhYmxlKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG5cbiAgLy8gSWYgd2UgZ2V0IGhlcmUgYmVmb3JlIGNvbnN1bWluZyBhbGwgdGhlIGJ5dGVzLCB0aGVuIHRoYXQgaXMgYVxuICAvLyBidWcgaW4gbm9kZS4gIFNob3VsZCBuZXZlciBoYXBwZW4uXG4gIGlmIChzdGF0ZS5sZW5ndGggPiAwKSB0aHJvdyBuZXcgRXJyb3IoJ1wiZW5kUmVhZGFibGUoKVwiIGNhbGxlZCBvbiBub24tZW1wdHkgc3RyZWFtJyk7XG5cbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgIHByb2Nlc3NOZXh0VGljayhlbmRSZWFkYWJsZU5ULCBzdGF0ZSwgc3RyZWFtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbmRSZWFkYWJsZU5UKHN0YXRlLCBzdHJlYW0pIHtcbiAgLy8gQ2hlY2sgdGhhdCB3ZSBkaWRuJ3QgZ2V0IG9uZSBsYXN0IHVuc2hpZnQuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICBzdGF0ZS5lbmRFbWl0dGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0ucmVhZGFibGUgPSBmYWxzZTtcbiAgICBzdHJlYW0uZW1pdCgnZW5kJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9yRWFjaCh4cywgZikge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGYoeHNbaV0sIGkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoeHNbaV0gPT09IHgpIHJldHVybiBpO1xuICB9XG4gIHJldHVybiAtMTtcbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzXG4vLyBtb2R1bGUgaWQgPSA3MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBhIHRyYW5zZm9ybSBzdHJlYW0gaXMgYSByZWFkYWJsZS93cml0YWJsZSBzdHJlYW0gd2hlcmUgeW91IGRvXG4vLyBzb21ldGhpbmcgd2l0aCB0aGUgZGF0YS4gIFNvbWV0aW1lcyBpdCdzIGNhbGxlZCBhIFwiZmlsdGVyXCIsXG4vLyBidXQgdGhhdCdzIG5vdCBhIGdyZWF0IG5hbWUgZm9yIGl0LCBzaW5jZSB0aGF0IGltcGxpZXMgYSB0aGluZyB3aGVyZVxuLy8gc29tZSBiaXRzIHBhc3MgdGhyb3VnaCwgYW5kIG90aGVycyBhcmUgc2ltcGx5IGlnbm9yZWQuICAoVGhhdCB3b3VsZFxuLy8gYmUgYSB2YWxpZCBleGFtcGxlIG9mIGEgdHJhbnNmb3JtLCBvZiBjb3Vyc2UuKVxuLy9cbi8vIFdoaWxlIHRoZSBvdXRwdXQgaXMgY2F1c2FsbHkgcmVsYXRlZCB0byB0aGUgaW5wdXQsIGl0J3Mgbm90IGFcbi8vIG5lY2Vzc2FyaWx5IHN5bW1ldHJpYyBvciBzeW5jaHJvbm91cyB0cmFuc2Zvcm1hdGlvbi4gIEZvciBleGFtcGxlLFxuLy8gYSB6bGliIHN0cmVhbSBtaWdodCB0YWtlIG11bHRpcGxlIHBsYWluLXRleHQgd3JpdGVzKCksIGFuZCB0aGVuXG4vLyBlbWl0IGEgc2luZ2xlIGNvbXByZXNzZWQgY2h1bmsgc29tZSB0aW1lIGluIHRoZSBmdXR1cmUuXG4vL1xuLy8gSGVyZSdzIGhvdyB0aGlzIHdvcmtzOlxuLy9cbi8vIFRoZSBUcmFuc2Zvcm0gc3RyZWFtIGhhcyBhbGwgdGhlIGFzcGVjdHMgb2YgdGhlIHJlYWRhYmxlIGFuZCB3cml0YWJsZVxuLy8gc3RyZWFtIGNsYXNzZXMuICBXaGVuIHlvdSB3cml0ZShjaHVuayksIHRoYXQgY2FsbHMgX3dyaXRlKGNodW5rLGNiKVxuLy8gaW50ZXJuYWxseSwgYW5kIHJldHVybnMgZmFsc2UgaWYgdGhlcmUncyBhIGxvdCBvZiBwZW5kaW5nIHdyaXRlc1xuLy8gYnVmZmVyZWQgdXAuICBXaGVuIHlvdSBjYWxsIHJlYWQoKSwgdGhhdCBjYWxscyBfcmVhZChuKSB1bnRpbFxuLy8gdGhlcmUncyBlbm91Z2ggcGVuZGluZyByZWFkYWJsZSBkYXRhIGJ1ZmZlcmVkIHVwLlxuLy9cbi8vIEluIGEgdHJhbnNmb3JtIHN0cmVhbSwgdGhlIHdyaXR0ZW4gZGF0YSBpcyBwbGFjZWQgaW4gYSBidWZmZXIuICBXaGVuXG4vLyBfcmVhZChuKSBpcyBjYWxsZWQsIGl0IHRyYW5zZm9ybXMgdGhlIHF1ZXVlZCB1cCBkYXRhLCBjYWxsaW5nIHRoZVxuLy8gYnVmZmVyZWQgX3dyaXRlIGNiJ3MgYXMgaXQgY29uc3VtZXMgY2h1bmtzLiAgSWYgY29uc3VtaW5nIGEgc2luZ2xlXG4vLyB3cml0dGVuIGNodW5rIHdvdWxkIHJlc3VsdCBpbiBtdWx0aXBsZSBvdXRwdXQgY2h1bmtzLCB0aGVuIHRoZSBmaXJzdFxuLy8gb3V0cHV0dGVkIGJpdCBjYWxscyB0aGUgcmVhZGNiLCBhbmQgc3Vic2VxdWVudCBjaHVua3MganVzdCBnbyBpbnRvXG4vLyB0aGUgcmVhZCBidWZmZXIsIGFuZCB3aWxsIGNhdXNlIGl0IHRvIGVtaXQgJ3JlYWRhYmxlJyBpZiBuZWNlc3NhcnkuXG4vL1xuLy8gVGhpcyB3YXksIGJhY2stcHJlc3N1cmUgaXMgYWN0dWFsbHkgZGV0ZXJtaW5lZCBieSB0aGUgcmVhZGluZyBzaWRlLFxuLy8gc2luY2UgX3JlYWQgaGFzIHRvIGJlIGNhbGxlZCB0byBzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGNodW5rLiAgSG93ZXZlcixcbi8vIGEgcGF0aG9sb2dpY2FsIGluZmxhdGUgdHlwZSBvZiB0cmFuc2Zvcm0gY2FuIGNhdXNlIGV4Y2Vzc2l2ZSBidWZmZXJpbmdcbi8vIGhlcmUuICBGb3IgZXhhbXBsZSwgaW1hZ2luZSBhIHN0cmVhbSB3aGVyZSBldmVyeSBieXRlIG9mIGlucHV0IGlzXG4vLyBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyIGZyb20gMC0yNTUsIGFuZCB0aGVuIHJlc3VsdHMgaW4gdGhhdCBtYW55XG4vLyBieXRlcyBvZiBvdXRwdXQuICBXcml0aW5nIHRoZSA0IGJ5dGVzIHtmZixmZixmZixmZn0gd291bGQgcmVzdWx0IGluXG4vLyAxa2Igb2YgZGF0YSBiZWluZyBvdXRwdXQuICBJbiB0aGlzIGNhc2UsIHlvdSBjb3VsZCB3cml0ZSBhIHZlcnkgc21hbGxcbi8vIGFtb3VudCBvZiBpbnB1dCwgYW5kIGVuZCB1cCB3aXRoIGEgdmVyeSBsYXJnZSBhbW91bnQgb2Ygb3V0cHV0LiAgSW5cbi8vIHN1Y2ggYSBwYXRob2xvZ2ljYWwgaW5mbGF0aW5nIG1lY2hhbmlzbSwgdGhlcmUnZCBiZSBubyB3YXkgdG8gdGVsbFxuLy8gdGhlIHN5c3RlbSB0byBzdG9wIGRvaW5nIHRoZSB0cmFuc2Zvcm0uICBBIHNpbmdsZSA0TUIgd3JpdGUgY291bGRcbi8vIGNhdXNlIHRoZSBzeXN0ZW0gdG8gcnVuIG91dCBvZiBtZW1vcnkuXG4vL1xuLy8gSG93ZXZlciwgZXZlbiBpbiBzdWNoIGEgcGF0aG9sb2dpY2FsIGNhc2UsIG9ubHkgYSBzaW5nbGUgd3JpdHRlbiBjaHVua1xuLy8gd291bGQgYmUgY29uc3VtZWQsIGFuZCB0aGVuIHRoZSByZXN0IHdvdWxkIHdhaXQgKHVuLXRyYW5zZm9ybWVkKSB1bnRpbFxuLy8gdGhlIHJlc3VsdHMgb2YgdGhlIHByZXZpb3VzIHRyYW5zZm9ybWVkIGNodW5rIHdlcmUgY29uc3VtZWQuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm07XG5cbnZhciBEdXBsZXggPSByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudXRpbC5pbmhlcml0cyhUcmFuc2Zvcm0sIER1cGxleCk7XG5cbmZ1bmN0aW9uIFRyYW5zZm9ybVN0YXRlKHN0cmVhbSkge1xuICB0aGlzLmFmdGVyVHJhbnNmb3JtID0gZnVuY3Rpb24gKGVyLCBkYXRhKSB7XG4gICAgcmV0dXJuIGFmdGVyVHJhbnNmb3JtKHN0cmVhbSwgZXIsIGRhdGEpO1xuICB9O1xuXG4gIHRoaXMubmVlZFRyYW5zZm9ybSA9IGZhbHNlO1xuICB0aGlzLnRyYW5zZm9ybWluZyA9IGZhbHNlO1xuICB0aGlzLndyaXRlY2IgPSBudWxsO1xuICB0aGlzLndyaXRlY2h1bmsgPSBudWxsO1xuICB0aGlzLndyaXRlZW5jb2RpbmcgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBhZnRlclRyYW5zZm9ybShzdHJlYW0sIGVyLCBkYXRhKSB7XG4gIHZhciB0cyA9IHN0cmVhbS5fdHJhbnNmb3JtU3RhdGU7XG4gIHRzLnRyYW5zZm9ybWluZyA9IGZhbHNlO1xuXG4gIHZhciBjYiA9IHRzLndyaXRlY2I7XG5cbiAgaWYgKCFjYikgcmV0dXJuIHN0cmVhbS5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignbm8gd3JpdGVjYiBpbiBUcmFuc2Zvcm0gY2xhc3MnKSk7XG5cbiAgdHMud3JpdGVjaHVuayA9IG51bGw7XG4gIHRzLndyaXRlY2IgPSBudWxsO1xuXG4gIGlmIChkYXRhICE9PSBudWxsICYmIGRhdGEgIT09IHVuZGVmaW5lZCkgc3RyZWFtLnB1c2goZGF0YSk7XG5cbiAgY2IoZXIpO1xuXG4gIHZhciBycyA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgcnMucmVhZGluZyA9IGZhbHNlO1xuICBpZiAocnMubmVlZFJlYWRhYmxlIHx8IHJzLmxlbmd0aCA8IHJzLmhpZ2hXYXRlck1hcmspIHtcbiAgICBzdHJlYW0uX3JlYWQocnMuaGlnaFdhdGVyTWFyayk7XG4gIH1cbn1cblxuZnVuY3Rpb24gVHJhbnNmb3JtKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRyYW5zZm9ybSkpIHJldHVybiBuZXcgVHJhbnNmb3JtKG9wdGlvbnMpO1xuXG4gIER1cGxleC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIHRoaXMuX3RyYW5zZm9ybVN0YXRlID0gbmV3IFRyYW5zZm9ybVN0YXRlKHRoaXMpO1xuXG4gIHZhciBzdHJlYW0gPSB0aGlzO1xuXG4gIC8vIHN0YXJ0IG91dCBhc2tpbmcgZm9yIGEgcmVhZGFibGUgZXZlbnQgb25jZSBkYXRhIGlzIHRyYW5zZm9ybWVkLlxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG5cbiAgLy8gd2UgaGF2ZSBpbXBsZW1lbnRlZCB0aGUgX3JlYWQgbWV0aG9kLCBhbmQgZG9uZSB0aGUgb3RoZXIgdGhpbmdzXG4gIC8vIHRoYXQgUmVhZGFibGUgd2FudHMgYmVmb3JlIHRoZSBmaXJzdCBfcmVhZCBjYWxsLCBzbyB1bnNldCB0aGVcbiAgLy8gc3luYyBndWFyZCBmbGFnLlxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmMgPSBmYWxzZTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHRoaXMuX3RyYW5zZm9ybSA9IG9wdGlvbnMudHJhbnNmb3JtO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZsdXNoID09PSAnZnVuY3Rpb24nKSB0aGlzLl9mbHVzaCA9IG9wdGlvbnMuZmx1c2g7XG4gIH1cblxuICAvLyBXaGVuIHRoZSB3cml0YWJsZSBzaWRlIGZpbmlzaGVzLCB0aGVuIGZsdXNoIG91dCBhbnl0aGluZyByZW1haW5pbmcuXG4gIHRoaXMub25jZSgncHJlZmluaXNoJywgZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5fZmx1c2ggPT09ICdmdW5jdGlvbicpIHRoaXMuX2ZsdXNoKGZ1bmN0aW9uIChlciwgZGF0YSkge1xuICAgICAgZG9uZShzdHJlYW0sIGVyLCBkYXRhKTtcbiAgICB9KTtlbHNlIGRvbmUoc3RyZWFtKTtcbiAgfSk7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcpIHtcbiAgdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybSA9IGZhbHNlO1xuICByZXR1cm4gRHVwbGV4LnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcywgY2h1bmssIGVuY29kaW5nKTtcbn07XG5cbi8vIFRoaXMgaXMgdGhlIHBhcnQgd2hlcmUgeW91IGRvIHN0dWZmIVxuLy8gb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiBpbiBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLlxuLy8gJ2NodW5rJyBpcyBhbiBpbnB1dCBjaHVuay5cbi8vXG4vLyBDYWxsIGBwdXNoKG5ld0NodW5rKWAgdG8gcGFzcyBhbG9uZyB0cmFuc2Zvcm1lZCBvdXRwdXRcbi8vIHRvIHRoZSByZWFkYWJsZSBzaWRlLiAgWW91IG1heSBjYWxsICdwdXNoJyB6ZXJvIG9yIG1vcmUgdGltZXMuXG4vL1xuLy8gQ2FsbCBgY2IoZXJyKWAgd2hlbiB5b3UgYXJlIGRvbmUgd2l0aCB0aGlzIGNodW5rLiAgSWYgeW91IHBhc3Ncbi8vIGFuIGVycm9yLCB0aGVuIHRoYXQnbGwgcHV0IHRoZSBodXJ0IG9uIHRoZSB3aG9sZSBvcGVyYXRpb24uICBJZiB5b3Vcbi8vIG5ldmVyIGNhbGwgY2IoKSwgdGhlbiB5b3UnbGwgbmV2ZXIgZ2V0IGFub3RoZXIgY2h1bmsuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aHJvdyBuZXcgRXJyb3IoJ190cmFuc2Zvcm0oKSBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG4gIHRzLndyaXRlY2IgPSBjYjtcbiAgdHMud3JpdGVjaHVuayA9IGNodW5rO1xuICB0cy53cml0ZWVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIGlmICghdHMudHJhbnNmb3JtaW5nKSB7XG4gICAgdmFyIHJzID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgICBpZiAodHMubmVlZFRyYW5zZm9ybSB8fCBycy5uZWVkUmVhZGFibGUgfHwgcnMubGVuZ3RoIDwgcnMuaGlnaFdhdGVyTWFyaykgdGhpcy5fcmVhZChycy5oaWdoV2F0ZXJNYXJrKTtcbiAgfVxufTtcblxuLy8gRG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgYXJncyBhcmUgaGVyZS5cbi8vIF90cmFuc2Zvcm0gZG9lcyBhbGwgdGhlIHdvcmsuXG4vLyBUaGF0IHdlIGdvdCBoZXJlIG1lYW5zIHRoYXQgdGhlIHJlYWRhYmxlIHNpZGUgd2FudHMgbW9yZSBkYXRhLlxuVHJhbnNmb3JtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gIHZhciB0cyA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlO1xuXG4gIGlmICh0cy53cml0ZWNodW5rICE9PSBudWxsICYmIHRzLndyaXRlY2IgJiYgIXRzLnRyYW5zZm9ybWluZykge1xuICAgIHRzLnRyYW5zZm9ybWluZyA9IHRydWU7XG4gICAgdGhpcy5fdHJhbnNmb3JtKHRzLndyaXRlY2h1bmssIHRzLndyaXRlZW5jb2RpbmcsIHRzLmFmdGVyVHJhbnNmb3JtKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBtYXJrIHRoYXQgd2UgbmVlZCBhIHRyYW5zZm9ybSwgc28gdGhhdCBhbnkgZGF0YSB0aGF0IGNvbWVzIGluXG4gICAgLy8gd2lsbCBnZXQgcHJvY2Vzc2VkLCBub3cgdGhhdCB3ZSd2ZSBhc2tlZCBmb3IgaXQuXG4gICAgdHMubmVlZFRyYW5zZm9ybSA9IHRydWU7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGRvbmUoc3RyZWFtLCBlciwgZGF0YSkge1xuICBpZiAoZXIpIHJldHVybiBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG5cbiAgaWYgKGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdW5kZWZpbmVkKSBzdHJlYW0ucHVzaChkYXRhKTtcblxuICAvLyBpZiB0aGVyZSdzIG5vdGhpbmcgaW4gdGhlIHdyaXRlIGJ1ZmZlciwgdGhlbiB0aGF0IG1lYW5zXG4gIC8vIHRoYXQgbm90aGluZyBtb3JlIHdpbGwgZXZlciBiZSBwcm92aWRlZFxuICB2YXIgd3MgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG4gIHZhciB0cyA9IHN0cmVhbS5fdHJhbnNmb3JtU3RhdGU7XG5cbiAgaWYgKHdzLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCdDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDAnKTtcblxuICBpZiAodHMudHJhbnNmb3JtaW5nKSB0aHJvdyBuZXcgRXJyb3IoJ0NhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiBzdGlsbCB0cmFuc2Zvcm1pbmcnKTtcblxuICByZXR1cm4gc3RyZWFtLnB1c2gobnVsbCk7XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanNcbi8vIG1vZHVsZSBpZCA9IDczXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0tYnJvd3Nlci5qc1xuLy8gbW9kdWxlIGlkID0gNzRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGFwcGx5ID0gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O1xuXG4vLyBET00gQVBJcywgZm9yIGNvbXBsZXRlbmVzc1xuXG5leHBvcnRzLnNldFRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0VGltZW91dCwgd2luZG93LCBhcmd1bWVudHMpLCBjbGVhclRpbWVvdXQpO1xufTtcbmV4cG9ydHMuc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0SW50ZXJ2YWwsIHdpbmRvdywgYXJndW1lbnRzKSwgY2xlYXJJbnRlcnZhbCk7XG59O1xuZXhwb3J0cy5jbGVhclRpbWVvdXQgPVxuZXhwb3J0cy5jbGVhckludGVydmFsID0gZnVuY3Rpb24odGltZW91dCkge1xuICBpZiAodGltZW91dCkge1xuICAgIHRpbWVvdXQuY2xvc2UoKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gVGltZW91dChpZCwgY2xlYXJGbikge1xuICB0aGlzLl9pZCA9IGlkO1xuICB0aGlzLl9jbGVhckZuID0gY2xlYXJGbjtcbn1cblRpbWVvdXQucHJvdG90eXBlLnVucmVmID0gVGltZW91dC5wcm90b3R5cGUucmVmID0gZnVuY3Rpb24oKSB7fTtcblRpbWVvdXQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2NsZWFyRm4uY2FsbCh3aW5kb3csIHRoaXMuX2lkKTtcbn07XG5cbi8vIERvZXMgbm90IHN0YXJ0IHRoZSB0aW1lLCBqdXN0IHNldHMgdXAgdGhlIG1lbWJlcnMgbmVlZGVkLlxuZXhwb3J0cy5lbnJvbGwgPSBmdW5jdGlvbihpdGVtLCBtc2Vjcykge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gbXNlY3M7XG59O1xuXG5leHBvcnRzLnVuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gLTE7XG59O1xuXG5leHBvcnRzLl91bnJlZkFjdGl2ZSA9IGV4cG9ydHMuYWN0aXZlID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG5cbiAgdmFyIG1zZWNzID0gaXRlbS5faWRsZVRpbWVvdXQ7XG4gIGlmIChtc2VjcyA+PSAwKSB7XG4gICAgaXRlbS5faWRsZVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gb25UaW1lb3V0KCkge1xuICAgICAgaWYgKGl0ZW0uX29uVGltZW91dClcbiAgICAgICAgaXRlbS5fb25UaW1lb3V0KCk7XG4gICAgfSwgbXNlY3MpO1xuICB9XG59O1xuXG4vLyBzZXRpbW1lZGlhdGUgYXR0YWNoZXMgaXRzZWxmIHRvIHRoZSBnbG9iYWwgb2JqZWN0XG5yZXF1aXJlKFwic2V0aW1tZWRpYXRlXCIpO1xuZXhwb3J0cy5zZXRJbW1lZGlhdGUgPSBzZXRJbW1lZGlhdGU7XG5leHBvcnRzLmNsZWFySW1tZWRpYXRlID0gY2xlYXJJbW1lZGlhdGU7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qc1xuLy8gbW9kdWxlIGlkID0gNzVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiY29uc3QgZmlsZXMgPSBbXG4gIC8vIFwiZ3VuX3Zpb2xlbmNlXCIsXG4gIFwibWFzc19zaG9vdGluZ3NfbGl0ZVwiLFxuICBcImd1bl92aW9sZW5jZV9ieV9tb250aFwiLFxuXVxuY29uc3QgcGFyc2UgPSByZXF1aXJlKCdjc3YtcGFyc2UnKVxuXG5jb25zdCBkYXRhUHJvbWlzZXMgPSBmaWxlcy5tYXAobmFtZSA9PiB7XG4gIHJldHVybiBmZXRjaCgnLi9kYXRhLycgKyBuYW1lICsgJy5jc3YnKS50aGVuKHJvd3MgPT4ge1xuICAgIHJldHVybiByb3dzLnRleHQoKVxuICB9KS50aGVuKHRleHQgPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBwYXJzZSh0ZXh0LCB7fSwgKF8sIGxpbmVzKSA9PiByZXNvbHZlKGxpbmVzKSlcbiAgICB9KVxuICB9KS50aGVuKGxpbmVzID0+IHtcbiAgICAvLyBjb25zb2xlLmxvZyhuYW1lLCBsaW5lcylcbiAgICBjb25zdCBoID0gbGluZXMuc2hpZnQoKVxuICAgIHJldHVybiB7XG4gICAgICBuYW1lLFxuICAgICAgaCxcbiAgICAgIGxpbmVzOiBsaW5lcy5maWx0ZXIocyA9PiAhIXMpXG4gICAgfVxuICB9KVxufSlcbmNvbnN0IGFsbFByb21pc2VzID0gUHJvbWlzZS5hbGwoZGF0YVByb21pc2VzKS50aGVuKGRhdGEgPT4ge1xuICByZXR1cm4gZGF0YS5yZWR1Y2UoKGEsYikgPT4ge1xuICAgIC8vIGNvbnNvbGUubG9nKGIpXG4gICAgYVtiLm5hbWVdID0gYlxuICAgIHJldHVybiBhXG4gIH0sIHt9KVxufSlcbmNvbnN0IGxvYWQgPSAoKSA9PiB7XG4gIHJldHVybiBhbGxQcm9taXNlc1xufVxuXG5leHBvcnQgeyBsb2FkIH1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvZGF0YS5qcyIsImNvbnN0IGtleXMgPSB7fVxuY29uc3Qga2V5X251bWJlcnMgPSB7fVxuY29uc3QgbGV0dGVycyA9IFwienhjdmJubWFzZGZnaGprbHF3ZXJ0eXVpb3BcIlxuY29uc3QgbnVtYmVycyA9IFwiMTIzNDU2Nzg5MFwiXG5cbmxldCBjYWxsYmFjayA9IGZ1bmN0aW9uKCl7fVxuXG5sZXR0ZXJzLnRvVXBwZXJDYXNlKCkuc3BsaXQoXCJcIikubWFwKGZ1bmN0aW9uKGssaSl7XG4gIGtleXNbay5jaGFyQ29kZUF0KDApXSA9IGlcbn0pXG5cbm51bWJlcnMuc3BsaXQoXCJcIikubWFwKGZ1bmN0aW9uKGssaSl7XG4gIGtleXNbay5jaGFyQ29kZUF0KDApXSA9IGkrbGV0dGVycy5sZW5ndGhcbiAga2V5X251bWJlcnNbay5jaGFyQ29kZUF0KDApXSA9IHRydWVcbn0pXG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBrZXlkb3duLCB0cnVlKVxuZnVuY3Rpb24ga2V5ZG93biAoZSkge1xuICBpZiAoZS5hbHRLZXkgfHwgZS5jdHJsS2V5IHx8IGUubWV0YUtleSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiZcbiAgICAgIChlLmtleUNvZGUgaW4ga2V5X251bWJlcnMpKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHJldHVyblxuICB9XG4gIGlmICghIChlLmtleUNvZGUgaW4ga2V5cykpIHJldHVyblxuICB2YXIgaW5kZXggPSBrZXlzW2Uua2V5Q29kZV1cbiAgaWYgKGUuc2hpZnRLZXkpIGluZGV4ICs9IGxldHRlcnMubGVuZ3RoXG4gIGluZGV4IC09IDdcbiAgY2FsbGJhY2soaW5kZXgpXG59XG5cbmZ1bmN0aW9uIGxpc3RlbiAoZm4pIHtcbiAgY2FsbGJhY2sgPSBmblxufVxuXG5leHBvcnQgZGVmYXVsdCB7IGxpc3RlbiB9XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2xpYi9rZXlzLmpzIiwiaW1wb3J0IFRvbmUgZnJvbSAndG9uZSdcbmltcG9ydCBXZWJNaWRpIGZyb20gJ3dlYm1pZGknXG5pbXBvcnQgc2NhbGVzIGZyb20gJy4vc2NhbGVzJ1xuaW1wb3J0IHsgZnRvbSwgbm9ybSwgZGF0YVVSSXRvQmxvYiB9IGZyb20gJy4vdXRpbCdcbmltcG9ydCBrYWxpbWJhIGZyb20gJy4va2FsaW1iYSdcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXIvRmlsZVNhdmVyJ1xuXG5pbXBvcnQgeyBueCB9IGZyb20gJy4vdWknXG5cbmxldCBtaWRpRGV2aWNlXG5sZXQgc2VuZFBpdGNoQmVuZCA9IGZhbHNlXG5cbmV4cG9ydCBjb25zdCBNaWRpV3JpdGVyID0gcmVxdWlyZSgnbWlkaS13cml0ZXItanMnKVxuXG5leHBvcnQgY29uc3Qgbm90ZV92YWx1ZXMgPSBbXG4gIFs4LCAnOCBtZWFzdXJlcycsIDggKiA1MTJdLFxuICBbNCwgJzQgbWVhc3VyZXMnLCA0ICogNTEyXSxcbiAgWzIsICcyIG1lYXN1cmVzJywgMiAqIDUxMl0sXG4gIFsxLCAnd2hvbGUgbm90ZScsIDUxMl0sXG4gIFsxLzIsICdoYWxmIG5vdGUnLCAyNTZdLFxuICBbMS8zLCAndGhpcmQgbm90ZScsIFsxNzAsIDE3MCwgMTcxXV0sXG4gIFsxLzQsICdxdWFydGVyIG5vdGUnLCAxMjhdLFxuICBbMS81LCAnZmlmdGggbm90ZScsIFs1MSw1MSw1MSw1MSw1Ml1dLFxuICBbMS82LCAnc2l4dGggbm90ZScsIFs4NSwgODUsIDg2LCA4NSwgODUsIDg2XV0sXG4gIFsxLzgsICdlaWdodGggbm90ZScsIDY0XSxcbiAgWzEvMTAsICd0ZW50aCBub3RlJywgWzI1LDI2LDI2LDI1LDI2LDI1LDI2LDI2LDI1LDI2XV0sXG4gIFsxLzEyLCAndHdlbGZ0aCBub3RlJywgWzIxLDIxLDIyLCAyMSwyMSwyMiwgMjEsMjEsMjIsIDIxLDIxLDIyXV0sXG4gIFsxLzE2LCAnc2l4dGVlbnRoIG5vdGUnLCAzMl0sXG4gIFsxLzMyLCAndGhpcnR5c2Vjb25kIG5vdGUnLCAxNl0sXG5dXG5cbmV4cG9ydCBmdW5jdGlvbiBtaWRpX2luaXQoKSB7XG4gIFdlYk1pZGkuZW5hYmxlKG1pZGlfcmVhZHkpXG4gIGZ1bmN0aW9uIG1pZGlfcmVhZHkoZXJyKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignd2VibWlkaSBmYWlsZWQgdG8gaW5pdGlhbGl6ZScpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKCFXZWJNaWRpLm91dHB1dHMubGVuZ3RoKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdubyBNSURJIG91dHB1dCBmb3VuZCcpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc29sZS5sb2coV2ViTWlkaS5pbnB1dHMpXG4gICAgY29uc29sZS5sb2coV2ViTWlkaS5vdXRwdXRzKVxuICAgIGlmIChXZWJNaWRpLm91dHB1dHMubGVuZ3RoID4gMSkge1xuICAgICAgY29uc3QgZmlsdGVyZWQgPSBXZWJNaWRpLm91dHB1dHMuZmlsdGVyKG91dHB1dCA9PiBvdXRwdXQubmFtZS5tYXRjaCgvcHJvZGlwZS9pKSlcbiAgICAgIGlmIChmaWx0ZXJlZC5sZW5ndGgpIHtcbiAgICAgICAgLy8gbWlkaURldmljZSA9IGZpbHRlcmVkWzBdXG4gICAgICB9XG4gICAgfVxuICAgIC8vIG1pZGlEZXZpY2UgPSBtaWRpRGV2aWNlIHx8IFdlYk1pZGkub3V0cHV0c1swXVxuICAgIC8vIGNvbnNvbGUubG9nKG1pZGlEZXZpY2UubmFtZSlcbiAgfVxufVxuXG4vKiBwbGF5IGEgc2luZ2xlIG5vdGUgKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBsYXlfbm90ZShpbmRleCwgZHVyYXRpb24sIGNoYW5uZWw9XCJhbGxcIiwgZXhwb3J0aW5nPWZhbHNlLCByZXN0PTAsIGRlZmVyPTApe1xuICAvLyBjb25zb2xlLmxvZyhpbmRleClcbiAgY29uc3Qgc2NhbGUgPSBzY2FsZXMuY3VycmVudCgpXG4gIGNvbnN0IGZyZXEgPSBzY2FsZS5pbmRleChpbmRleCArIE1hdGgucm91bmQobngub2Zmc2V0LnZhbHVlKSwgbngub2N0YXZlLnZhbHVlKVxuICBsZXQgbWlkaV9ub3RlID0gZnRvbShmcmVxKVxuICBsZXQgY2VudHMgPSBtaWRpX25vdGUgJSAxXG4gIGlmIChjZW50cyA+IDAuNSkge1xuICAgIG1pZGlfbm90ZSArPSAxXG4gICAgY2VudHMgLT0gMVxuICB9XG4gIGNlbnRzICo9IDJcbiAgbWlkaV9ub3RlID0gTWF0aC5mbG9vcihtaWRpX25vdGUpXG4gIGlmICgobWlkaURldmljZSB8fCBleHBvcnRpbmcpICYmIG1pZGlfbm90ZSA+IDEyNykgcmV0dXJuIDBcbiAgY29uc3Qgbm90ZSA9IFRvbmUuRnJlcXVlbmN5KE1hdGguZmxvb3IobWlkaV9ub3RlKSwgXCJtaWRpXCIpLnRvTm90ZSgpXG4gIGNvbnN0IGRlZmVyX3RpbWUgPSAzMDAwMCAvIFRvbmUuVHJhbnNwb3J0LmJwbS52YWx1ZSAqIGRlZmVyIC8gMTI4XG4gIGNvbnNvbGUubG9nKGRlZmVyLCBkZWZlcl90aW1lKVxuICBpZiAoZXhwb3J0aW5nKSB7XG4gICAgcmV0dXJuIG5vdGVcbiAgfVxuICBpZiAobWlkaURldmljZSkge1xuICAgIGR1cmF0aW9uID0gZHVyYXRpb24gfHwgNjAwMDAgLyBUb25lLlRyYW5zcG9ydC5icG0udmFsdWVcbiAgICBpZiAoISBleHBvcnRpbmcpIHtcbiAgICAgIGlmIChkZWZlcikge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBwbGF5X21pZGlfbm90ZShub3RlLCBjZW50cywgY2hhbm5lbCwgZHVyYXRpb24pXG4gICAgICAgIH0sIGRlZmVyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGxheV9taWRpX25vdGUobm90ZSwgY2VudHMsIGNoYW5uZWwsIGR1cmF0aW9uKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBlbHNlIGlmIChkZWZlcikge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAga2FsaW1iYS5wbGF5KGZyZXEpXG4gICAgfSwgZGVmZXJfdGltZSlcbiAgfSBlbHNlIHtcbiAgICBrYWxpbWJhLnBsYXkoZnJlcSlcbiAgfVxuICByZXR1cm4gbm90ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGxheV9taWRpX25vdGUobm90ZSwgY2VudHMsIGNoYW5uZWwsIGR1cmF0aW9uKSB7XG4gIG1pZGlEZXZpY2UucGxheU5vdGUobm90ZSwgY2hhbm5lbCwgeyBkdXJhdGlvbiB9KVxuICBpZiAoc2VuZFBpdGNoQmVuZCkge1xuICAgIG1pZGlEZXZpY2Uuc2VuZFBpdGNoQmVuZChjZW50cywgY2hhbm5lbClcbiAgfVxufVxuXG4vKiBwbGF5IHRoZSBuZXh0IG5vdGUgaW4gc2VxdWVuY2UgKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBsYXlfc2VxdWVuY2UoaSwgYm91bmRzLCBkaWZmLCBub3RlX3RpbWUsIGNoYW5uZWw9XCJhbGxcIiwgZXhwb3J0aW5nKSB7XG4gIGNvbnN0IHsgcm93cywgbWluLCBtYXggfSA9IGJvdW5kc1xuICBjb25zdCBjb3VudCA9IHJvd3MubGVuZ3RoICogcm93c1swXS5sZW5ndGhcbiAgaWYgKGkgPj0gY291bnQpIGkgPSAwXG4gIGNvbnN0IHkgPSBNYXRoLmZsb29yKGkgLyByb3dzWzBdLmxlbmd0aClcbiAgY29uc3QgeCA9IGkgJSByb3dzWzBdLmxlbmd0aFxuICAvLyBpZiAoIXgpIGNvbnNvbGUubG9nKHkpXG4gIGNvbnN0IG4gPSByb3dzW3ldW3hdXG4gIGkgKz0gMVxuICBpZiAoaSA+PSBjb3VudCkgaSA9IDBcbiAgY29uc3QgbWlkaV9ub3RlID0gcGxheV9ub3RlKCBub3JtKG4sIG1pbiwgbWF4KSAqIG54Lm11bHRpcGx5LnZhbHVlLCBub3RlX3RpbWUsIGNoYW5uZWwsIGV4cG9ydGluZylcbiAgcmV0dXJuIFtpLCBbbWlkaV9ub3RlXV1cbn1cblxuLyogcGxheSB0aGUgbmV4dCByb3cgYXMgYW4gaW50ZXJ2YWwgKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBsYXlfaW50ZXJ2YWxfc2VxdWVuY2UoaSwgYm91bmRzLCBkaWZmLCBub3RlX3RpbWUsIGNoYW5uZWw9XCJhbGxcIiwgZXhwb3J0aW5nKSB7XG4gIGNvbnN0IHsgcm93cywgbWluLCBtYXggfSA9IGJvdW5kc1xuICBjb25zdCBjb3VudCA9IHJvd3MubGVuZ3RoXG4gIGlmIChpID49IGNvdW50KSBpID0gMFxuICBjb25zdCB5ID0gaSAlIGNvdW50XG4gIGNvbnN0IHJvdyA9IHJvd3NbeV1cbiAgaWYgKCEgcm93KSB7IGkgPSAwOyByZXR1cm4gfVxuICBjb25zdCByb3dfbWluID0gTWF0aC5taW4uYXBwbHkoTWF0aCwgcm93KVxuICAvLyBjb25zdCByb3dfbWF4ID0gTWF0aC5tYXguYXBwbHkoTWF0aCwgcm93KVxuICBjb25zdCByb3dfZjAgPSBub3JtKHJvd19taW4sIG1pbiwgbWF4KVxuICBjb25zdCByb3dfcm9vdCA9IHJvd19mMCAqIG54Lm11bHRpcGx5LnZhbHVlXG4gIGNvbnN0IG5vdGVzID0gcm93Lm1hcChuID0+IHtcbiAgICBjb25zdCBub3RlID0gcm93X3Jvb3QgKyBub3JtKG4gLSByb3dfbWluLCBkaWZmLm1pbiwgZGlmZi5tYXgpICogbnguaW50ZXJ2YWwudmFsdWVcbiAgICBwbGF5X25vdGUobm90ZSwgbm90ZV90aW1lLCBjaGFubmVsLCBleHBvcnRpbmcpXG4gIH0pXG4gIGkgKz0gMVxuICByZXR1cm4gW2ksIG5vdGVzXVxufVxuXG4vKiBnZW5lcmF0ZSBhIDEtdHJhY2sgbWlkaSBmaWxlIGJ5IGNhbGxpbmcgdGhlIHBsYXkgZnVuY3Rpb24gcmVwZWF0ZWRseSAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0X3BhdHRlcm5fYXNfbWlkaShkYXRhc2V0TmFtZSwgYm91bmRzLCBkaWZmLCB0ZW1wbywgdGltaW5nSW5kZXgsIHBsYXlfZm4pIHtcbiAgLy8gY29uc3QgYmVoYXZpb3IgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYmVoYXZpb3InKS52YWx1ZVxuICBjb25zdCB7IHJvd3MgfSA9IGJvdW5kc1xuICAvLyBsZXQgY291bnQgPSBiZWhhdmlvciA9PT0gJ3NlcXVlbmNlJyA/IHJvd3NbMF0ubGVuZ3RoICogcm93cy5sZW5ndGggOiByb3dzLmxlbmd0aFxuICBsZXQgY291bnQgPSByb3dzWzBdLmxlbmd0aFxuICBsZXQgbm90ZXMsIHRpbWluZ3MsIHdhaXRcbiAgbGV0IG5vdGVfdGltZVxuICAvLyBsZXQgdGltaW5nID0gbm90ZV92YWx1ZXNbdGltaW5nSW5kZXhdWzJdXG4gIGxldCBtaWRpX3RyYWNrID0gbmV3IE1pZGlXcml0ZXIuVHJhY2soKVxuICBtaWRpX3RyYWNrLnNldFRlbXBvKHRlbXBvKVxuICBmb3IgKGxldCBpID0gMCwgbGVuID0gY291bnQ7IGkgPCBsZW47IGkrKykge1xuICAgIFtpLCBub3RlcywgdGltaW5ncywgd2FpdF0gPSBwbGF5X2ZuKGksIGJvdW5kcywgbm90ZV90aW1lLCBcImFsbFwiLCB0cnVlKVxuICAgIC8vIGlmICh0aW1pbmcubGVuZ3RoKSB7XG4gICAgLy8gICBub3RlX3RpbWUgPSB0aW1pbmdbaSAlIHRpbWluZy5sZW5ndGhdXG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyAgIG5vdGVfdGltZSA9IHRpbWluZ1xuICAgIC8vIH1cbiAgICAvLyBtaWRpX3RyYWNrLmFkZEV2ZW50KG5ldyBNaWRpV3JpdGVyLk5vdGVFdmVudCh7IHBpdGNoOiBub3RlcywgZHVyYXRpb246ICd0JyArIG5vdGVfdGltZSB9KSlcbiAgICBjb25zb2xlLmxvZyhpLCBub3RlcywgdGltaW5ncywgd2FpdClcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG5vdGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICBtaWRpX3RyYWNrLmFkZEV2ZW50KG5ldyBNaWRpV3JpdGVyLk5vdGVFdmVudCh7XG4gICAgICAgIHBpdGNoOiBub3Rlc1tqXSxcbiAgICAgICAgZHVyYXRpb246ICd0JyArIHRpbWluZ3Nbal0sXG4gICAgICAgIHdhaXQ6IChqID09PSAwKSA/IHdhaXQgOiAwLFxuICAgICAgfSkpXG4gICAgfVxuICB9XG4gIGNvbnN0IHdyaXRlciA9IG5ldyBNaWRpV3JpdGVyLldyaXRlcihbbWlkaV90cmFja10pXG4gIGNvbnN0IGJsb2IgPSBkYXRhVVJJdG9CbG9iKHdyaXRlci5kYXRhVXJpKCkpXG4gIHNhdmVBcyhibG9iLCAnUmVjb3JkaW5nIC0gJyArIGRhdGFzZXROYW1lICsgJy5taWQnKVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2xpYi9taWRpLmpzIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZnJvbSA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL2FycmF5L2Zyb21cIik7XG5cbnZhciBfZnJvbTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9mcm9tKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhcnIpID8gYXJyIDogKDAsIF9mcm9tMi5kZWZhdWx0KShhcnIpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYmFiZWwtcnVudGltZS9oZWxwZXJzL3RvQXJyYXkuanNcbi8vIG1vZHVsZSBpZCA9IDc5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCBUb25lIGZyb20gJ3RvbmUnXG5pbXBvcnQgTmV4dXMgZnJvbSAnbmV4dXN1aSdcblxuaW1wb3J0IGtleXMgZnJvbSAnLi9saWIva2V5cydcbmltcG9ydCBzY2FsZXMgZnJvbSAnLi9saWIvc2NhbGVzJ1xuaW1wb3J0IGthbGltYmEgZnJvbSAnLi9saWIva2FsaW1iYSdcbmltcG9ydCB7XG4gIG1pZGlfaW5pdCxcbiAgcGxheV9ub3RlLFxuICBwbGF5X3NlcXVlbmNlLFxuICBleHBvcnRfcGF0dGVybl9hc19taWRpLFxuICBub3RlX3ZhbHVlcyxcbiAgTWlkaVdyaXRlcixcbn0gZnJvbSAnLi9saWIvbWlkaSdcbmltcG9ydCB7XG4gIHJlcXVlc3RBdWRpb0NvbnRleHQsIG5vcm0sIGRhdGFVUkl0b0Jsb2IsXG4gIGdldF9ib3VuZHMsIGdldF9kaWZmX2JvdW5kcyxcbiAgdHJhbnNwb3NlLFxufSBmcm9tICcuL2xpYi91dGlsJ1xuaW1wb3J0IHtcbiAgdXBkYXRlX3ZhbHVlX29uX2NoYW5nZSxcbiAgdXBkYXRlX3JhZGlvX3ZhbHVlX29uX2NoYW5nZSxcbiAgYnVpbGRfb3B0aW9ucyxcbiAgbnhcbn0gZnJvbSAnLi9saWIvdWknXG5cbmltcG9ydCAqIGFzIGRhdGEgZnJvbSAnLi9kYXRhJ1xuXG5jb25zdCBERUZBVUxUX0JQTSA9IDYwXG5cbmxldCByZWNvcmRlciA9IG51bGxcbmxldCByZWNvcmRpbmcgPSBmYWxzZVxuXG5taWRpX2luaXQoKVxuXG4vKiBpbml0aWFsaXphdGlvbiAqL1xuXG5jb25zdCBtYXNzX2ZpZWxkcyA9IFtcbiAgXCJkYXRlXCIsIFwidGltZXN0YW1wXCIsXG4gIFwiZmF0YWxpdGllc1wiLCBcImluanVyZWRcIiwgXCJ0b3RhbF92aWN0aW1zXCIsXG4gIFwiYWdlXCIsIFwiY2FzZVwiLCBcIndlYXBvbl90eXBlXCIsIFwid2VhcG9uX2RldGFpbHNcIlxuXS5yZWR1Y2UoKGEsYixpKSA9PiB7XG4gIGFbYl0gPSBpXG4gIHJldHVybiBhXG59LCB7fSlcblxubGV0IGkgPSAwLCBtYXNzX2kgPSAwLCBkYXRhc2V0cyA9IHt9LCBkYXRhc2V0ID0ge30sIGJvdW5kcyA9IHt9LCBkaWZmID0gW11cbmxldCBwbGF5X2ZuID0gcGxheV9zZXF1ZW5jZVxuZGF0YS5sb2FkKCkudGhlbihsaXN0cyA9PiB7XG4gIGNvbnNvbGUubG9nKGxpc3RzKVxuICB0cmFuc3Bvc2UobGlzdHMuZ3VuX3Zpb2xlbmNlX2J5X21vbnRoLmxpbmVzKS5mb3JFYWNoKChyb3csIGkpID0+IHtcbiAgICBjb25zdCBuYW1lID0gbGlzdHMuZ3VuX3Zpb2xlbmNlX2J5X21vbnRoLmhbaV1cbiAgICBpZiAobmFtZSA9PT0gJ0RhdGUnKSByZXR1cm5cbiAgICBjb25zb2xlLmxvZyhuYW1lLCByb3cpXG4gICAgZGF0YXNldHNbbmFtZV0gPSB7XG4gICAgICBuYW1lLFxuICAgICAgaDogW25hbWVdLFxuICAgICAgbGluZXM6IFtyb3cubWFwKG4gPT4gcGFyc2VJbnQobikpXSxcbiAgICAgIHBsYXlfZm46IHBsYXlfc2VxdWVuY2UsXG4gICAgfVxuICB9KVxuICBkYXRhc2V0c1tcIk1hc3MgU2hvb3RpbmdzXCJdID0gbGlzdHMubWFzc19zaG9vdGluZ3NfbGl0ZVxuICBkYXRhc2V0c1tcIk1hc3MgU2hvb3RpbmdzXCJdLm5hbWUgPSBcIk1hc3MgU2hvb3RpbmdzXCJcbiAgZGF0YXNldHNbXCJNYXNzIFNob290aW5nc1wiXS5wbGF5X2ZuID0gcGxheV9tYXNzX3Nob290aW5nc1xuICBjb25zdCBsaW5lcyA9IGRhdGFzZXRzW1wiTWFzcyBTaG9vdGluZ3NcIl0ubGluZXMucmV2ZXJzZSgpXG4gIGNvbnN0IFttaW5feSwgLi4ucmVzdF0gPSBsaW5lc1swXVttYXNzX2ZpZWxkcy5kYXRlXS5zcGxpdCgnLycpXG5cbiAgZGF0YXNldHNbXCJNYXNzIFNob290aW5nc1wiXS5kYXRlcyA9IGxpbmVzLm1hcChyb3cgPT4ge1xuICAgIGNvbnN0IFt5LCBtLCBkXSA9IHJvd1ttYXNzX2ZpZWxkcy5kYXRlXS5zcGxpdCgnLycpXG4gICAgcmV0dXJuIChwYXJzZUludCh5KSAtIHBhcnNlSW50KG1pbl95KSkgKiAxMiArIHBhcnNlSW50KG0pXG4gIH0pXG4gIGRhdGFzZXRzW1wiTWFzcyBTaG9vdGluZ3NcIl0uZGF0YSA9IGxpbmVzXG4gIGRhdGFzZXRzW1wiTWFzcyBTaG9vdGluZ3NcIl0ubGluZXMgPSBbbGluZXMubWFwKHJvdyA9PiByb3dbbWFzc19maWVsZHMudG90YWxfdmljdGltc10pXVxuICByZXF1ZXN0QXVkaW9Db250ZXh0KHJlYWR5KVxufSlcblxuLyogcGxheSBmdW5jdGlvbiBmb3IgbWFzcyBzaG9vdGluZyBkYXRhIHcvIGN1c3RvbSB0aW1pbmcgKi9cblxubGV0IG1hc3NfcmVzdCA9IDBcblxuLy8gZXhwb3J0IGNvbnN0IG5vdGVfdmFsdWVzID0gW1xuLy8gICBbOCwgJzggbWVhc3VyZXMnLCA4ICogNTEyXSxcbi8vICAgWzQsICc0IG1lYXN1cmVzJywgNCAqIDUxMl0sXG4vLyAgIFsyLCAnMiBtZWFzdXJlcycsIDIgKiA1MTJdLFxuLy8gICBbMSwgJ3dob2xlIG5vdGUnLCA1MTJdLFxuLy8gICBbMS8yLCAnaGFsZiBub3RlJywgMjU2XSxcbi8vICAgWzEvMywgJ3RoaXJkIG5vdGUnLCBbMTcwLCAxNzAsIDE3MV1dLFxuLy8gICBbMS80LCAncXVhcnRlciBub3RlJywgMTI4XSxcbi8vICAgWzEvNSwgJ2ZpZnRoIG5vdGUnLCBbNTEsNTEsNTEsNTEsNTJdXSxcbi8vICAgWzEvNiwgJ3NpeHRoIG5vdGUnLCBbODUsIDg1LCA4NiwgODUsIDg1LCA4Nl1dLFxuLy8gICBbMS84LCAnZWlnaHRoIG5vdGUnLCA2NF0sXG4vLyAgIFsxLzEwLCAndGVudGggbm90ZScsIFsyNSwyNiwyNiwyNSwyNiwyNSwyNiwyNiwyNSwyNl1dLFxuLy8gICBbMS8xMiwgJ3R3ZWxmdGggbm90ZScsIFsyMSwyMSwyMiwgMjEsMjEsMjIsIDIxLDIxLDIyLCAyMSwyMSwyMl1dLFxuLy8gICBbMS8xNiwgJ3NpeHRlZW50aCBub3RlJywgMzJdLFxuLy8gICBbMS8zMiwgJ3RoaXJ0eXNlY29uZCBub3RlJywgMTZdLFxuLy8gXVxuXG5mdW5jdGlvbiBwbGF5X21hc3Nfc2hvb3RpbmdzKGksIGJvdW5kcywgZGlmZiwgbm90ZV90aW1lLCBjaGFubmVsPVwiYWxsXCIsIGV4cG9ydGluZykge1xuICBjb25zdCB7IHJvd3MsIG1pbiwgbWF4IH0gPSBib3VuZHNcbiAgY29uc3QgeSA9IDBcbiAgY29uc3QgeCA9IGkgJSByb3dzWzBdLmxlbmd0aFxuICBjb25zdCBuID0gcm93c1t5XVt4XVxuICBjb25zdCB0b3RhbCA9IGRhdGFzZXQuZGF0ZXMubGVuZ3RoXG4gIGxldCBub3RlcyA9IFtdLCBtaWRpX25vdGVzID0gW10sIGNhc2VzID0gW10sIHRpbWluZ3NcbiAgY29uc29sZS5sb2coaSwgbWFzc19pLCBkYXRhc2V0LmRhdGVzW21hc3NfaV0pXG4gIHdoaWxlIChpID49IGRhdGFzZXQuZGF0ZXNbbWFzc19pXSAmJiBtYXNzX2kgPCB0b3RhbCkge1xuICAgIG5vdGVzLnB1c2goZGF0YXNldC5saW5lc1swXVttYXNzX2ldKVxuICAgIGNhc2VzLnB1c2goZGF0YXNldC5kYXRhW21hc3NfaV1bbWFzc19maWVsZHMuZGF0ZV0gKyAnICcgKyBkYXRhc2V0LmRhdGFbbWFzc19pXVttYXNzX2ZpZWxkcy5jYXNlXSArXG4gICAgICBcIiwgXCIgKyBkYXRhc2V0LmRhdGFbbWFzc19pXVttYXNzX2ZpZWxkcy5mYXRhbGl0aWVzXSArICcgZGVhZCwgJyArIGRhdGFzZXQuZGF0YVttYXNzX2ldW21hc3NfZmllbGRzLmluanVyZWRdICsgJyBpbmp1cmVkJylcbiAgICBjb25zb2xlLmxvZygncHVzaCBjYXNlJywgZGF0YXNldC5kYXRhW21hc3NfaV1bbWFzc19maWVsZHMuZGF0ZV0gKyAnICcgKyBkYXRhc2V0LmRhdGFbbWFzc19pXVttYXNzX2ZpZWxkcy5jYXNlXSlcbiAgICBtYXNzX2kgKz0gMVxuICB9XG4gIHN3aXRjaCAobm90ZXMubGVuZ3RoKSB7XG4gICAgZGVmYXVsdDpcbiAgICBjYXNlIDA6XG4gICAgICBtYXNzX3Jlc3QgKz0gMVxuICAgICAgYnJlYWtcbiAgICBjYXNlIDE6XG4gICAgICBtaWRpX25vdGVzLnB1c2gocGxheV9ub3RlKCBub3JtKG5vdGVzWzBdLCBtaW4sIG1heCkgKiBueC5tdWx0aXBseS52YWx1ZSwgMTI4LCBjaGFubmVsLCBleHBvcnRpbmcsIG1hc3NfcmVzdCwgMCkpXG4gICAgICB0aW1pbmdzID0gWzEyOF1cbiAgICAgIGJyZWFrXG4gICAgY2FzZSAyOlxuICAgICAgbWlkaV9ub3Rlcy5wdXNoKHBsYXlfbm90ZSggbm9ybShub3Rlc1swXSwgbWluLCBtYXgpICogbngubXVsdGlwbHkudmFsdWUsIDY0LCBjaGFubmVsLCBleHBvcnRpbmcsIG1hc3NfcmVzdCwgMCkpXG4gICAgICBtaWRpX25vdGVzLnB1c2gocGxheV9ub3RlKCBub3JtKG5vdGVzWzFdLCBtaW4sIG1heCkgKiBueC5tdWx0aXBseS52YWx1ZSwgNjQsIGNoYW5uZWwsIGV4cG9ydGluZywgMCwgNjQpKVxuICAgICAgdGltaW5ncyA9IFs2NCwgNjRdXG4gICAgICBicmVha1xuICAgIGNhc2UgMzpcbiAgICAgIG1pZGlfbm90ZXMucHVzaChwbGF5X25vdGUoIG5vcm0obm90ZXNbMF0sIG1pbiwgbWF4KSAqIG54Lm11bHRpcGx5LnZhbHVlLCA0MywgY2hhbm5lbCwgZXhwb3J0aW5nLCBtYXNzX3Jlc3QsIDApKVxuICAgICAgbWlkaV9ub3Rlcy5wdXNoKHBsYXlfbm90ZSggbm9ybShub3Rlc1sxXSwgbWluLCBtYXgpICogbngubXVsdGlwbHkudmFsdWUsIDQzLCBjaGFubmVsLCBleHBvcnRpbmcsIDAsIDQzKSlcbiAgICAgIG1pZGlfbm90ZXMucHVzaChwbGF5X25vdGUoIG5vcm0obm90ZXNbMl0sIG1pbiwgbWF4KSAqIG54Lm11bHRpcGx5LnZhbHVlLCA0MiwgY2hhbm5lbCwgZXhwb3J0aW5nLCAwLCA4NSkpXG4gICAgICB0aW1pbmdzID0gWzQzLCA0MyAsNDJdXG4gICAgICBicmVha1xuICAgIGNhc2UgNDpcbiAgICAgIG1pZGlfbm90ZXMucHVzaChwbGF5X25vdGUoIG5vcm0obm90ZXNbMF0sIG1pbiwgbWF4KSAqIG54Lm11bHRpcGx5LnZhbHVlLCAzMiwgY2hhbm5lbCwgZXhwb3J0aW5nLCBtYXNzX3Jlc3QsIDApKVxuICAgICAgbWlkaV9ub3Rlcy5wdXNoKHBsYXlfbm90ZSggbm9ybShub3Rlc1sxXSwgbWluLCBtYXgpICogbngubXVsdGlwbHkudmFsdWUsIDMyLCBjaGFubmVsLCBleHBvcnRpbmcsIDAsIDMyKSlcbiAgICAgIG1pZGlfbm90ZXMucHVzaChwbGF5X25vdGUoIG5vcm0obm90ZXNbMl0sIG1pbiwgbWF4KSAqIG54Lm11bHRpcGx5LnZhbHVlLCAzMiwgY2hhbm5lbCwgZXhwb3J0aW5nLCAwLCA2NCkpXG4gICAgICBtaWRpX25vdGVzLnB1c2gocGxheV9ub3RlKCBub3JtKG5vdGVzWzNdLCBtaW4sIG1heCkgKiBueC5tdWx0aXBseS52YWx1ZSwgMzIsIGNoYW5uZWwsIGV4cG9ydGluZywgMCwgOTYpKVxuICAgICAgdGltaW5ncyA9IFszMiwgMzIsIDMyLCAzMl1cbiAgICAgIGJyZWFrXG4gIH1cbiAgaWYgKGNhc2VzLmxlbmd0aCkge1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjYXNlcycpLmlubmVySFRNTCA9IGNhc2VzLmpvaW4oJzxicj4nKVxuICB9XG4gIGlmICh0b3RhbCA8PSBtYXNzX2kpIHtcbiAgICBtYXNzX3Jlc3QgPSAwXG4gICAgbWFzc19pID0gMFxuICAgIGkgPSAwXG4gIH0gZWxzZSB7XG4gICAgaSArPSAxXG4gIH1cbiAga2FsaW1iYS5wbGF5KDIyMCwgLTEyKVxuICBpZiAobm90ZXMubGVuZ3RoKSB7XG4gICAgbWFzc19yZXN0ID0gMFxuICAgIHJldHVybiBbaSwgbWlkaV9ub3RlcywgdGltaW5ncywgbWFzc19yZXN0XVxuICB9XG4gIG1hc3NfcmVzdCArPSAxMjhcbiAgcmV0dXJuIFtpLCBbXSwgW10sIDBdXG59XG5cbi8qIHBsYXkgbmV4dCBub3RlIGFjY29yZGluZyB0byBzb25pZmljYXRpb24gKi9cblxuZnVuY3Rpb24gcGxheV9uZXh0KCl7XG4gIGxldCBub3RlX3RpbWUgPSAxMjAwMDAgLyBUb25lLlRyYW5zcG9ydC5icG0udmFsdWUgKiBub3RlX3ZhbHVlc1tueC50aW1pbmcuYWN0aXZlXVswXVxuICBzZXRUaW1lb3V0KHBsYXlfbmV4dCwgbm90ZV90aW1lKVxuICBsZXQgW25ld19pLCBub3RlcywgdGltaW5nc10gPSBwbGF5X2ZuKGksIGJvdW5kcywgZGlmZiwgbm90ZV90aW1lKVxuICBpID0gbmV3X2lcbiAgaWYgKHJlY29yZGluZykge1xuICAgIGxldCB0aW1pbmcgPSBub3RlX3ZhbHVlc1tueC50aW1pbmcuYWN0aXZlXVsyXVxuICAgIGlmICh0aW1pbmcubGVuZ3RoKSB0aW1pbmcgPSB0aW1pbmdbaSAlIHRpbWluZy5sZW5ndGhdXG4gICAgcmVjb3JkZXIuYWRkRXZlbnQobmV3IE1pZGlXcml0ZXIuTm90ZUV2ZW50KHsgcGl0Y2g6IG5vdGVzLCBkdXJhdGlvbjogJ3QnICsgdGltaW5nIH0pKVxuICB9XG59XG5cbi8qIGJpbmQgc2VsZWN0cyAqL1xuXG5mdW5jdGlvbiBwaWNrX2RhdGFzZXQoa2V5KXtcbiAgY29uc29sZS5sb2coJ3BpY2sgZGF0YXNldDonLCBrZXksIGRhdGFzZXRzW2tleV0pXG4gIGkgPSAwXG4gIG1hc3NfaSA9IDBcbiAgbWFzc19yZXN0ID0gMFxuICBkYXRhc2V0ID0gZGF0YXNldHNba2V5XVxuICBib3VuZHMgPSBnZXRfYm91bmRzKGRhdGFzZXQpXG4gIGRpZmYgPSBnZXRfZGlmZl9ib3VuZHMoYm91bmRzLnJvd3MpXG4gIHBsYXlfZm4gPSBkYXRhc2V0LnBsYXlfZm5cbn1cblxuLyogYnVpbGQgYW5kIGJpbmQgdGhlIFVJICovXG5cbmZ1bmN0aW9uIHJlYWR5KCkge1xuICBzY2FsZXMuYnVpbGRfb3B0aW9ucyhkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2NhbGUnKSlcbiAgYnVpbGRfb3B0aW9ucyhkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjZGF0YXNldCcpLCBkYXRhc2V0cywgcGlja19kYXRhc2V0KVxuXG4gIGNvbnN0IGRpYWxfc2l6ZSA9IFs1MCwgNTBdXG5cblx0VG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlID0gREVGQVVMVF9CUE1cbiAgbngudGVtcG8gPSBuZXcgTmV4dXMuRGlhbCgnI3RlbXBvJywge1xuICAgIHNpemU6IGRpYWxfc2l6ZSxcbiAgICBtaW46IDEwLFxuICAgIG1heDogMzAwLFxuICAgIHN0ZXA6IDEsXG4gICAgdmFsdWU6IERFRkFVTFRfQlBNLFxuICB9KVxuICB1cGRhdGVfdmFsdWVfb25fY2hhbmdlKG54LnRlbXBvLCAnI3RlbXBvJywgdHJ1ZSwgdiA9PiBUb25lLlRyYW5zcG9ydC5icG0udmFsdWUgPSB2KVxuXG4gIG54LnRpbWluZyA9IG5ldyBOZXh1cy5SYWRpb0J1dHRvbignI3RpbWluZycsIHtcbiAgICBzaXplOiBbNDAwLDI1XSxcbiAgICBudW1iZXJPZkJ1dHRvbnM6IG5vdGVfdmFsdWVzLmxlbmd0aCxcbiAgICBhY3RpdmU6IDYsXG4gIH0pXG4gIHVwZGF0ZV9yYWRpb192YWx1ZV9vbl9jaGFuZ2UobngudGltaW5nLCAnI3RpbWluZycsIG5vdGVfdmFsdWVzKVxuXG4gIG54LmR1cmF0aW9uID0gbmV3IE5leHVzLkRpYWwoJyNkdXJhdGlvbicsIHtcbiAgICBzaXplOiBkaWFsX3NpemUsXG4gICAgbWluOiAwLFxuICAgIG1heDogMixcbiAgICBzdGVwOiAwLjAxLFxuICAgIHZhbHVlOiAwLjgsXG4gIH0pXG4gIHVwZGF0ZV92YWx1ZV9vbl9jaGFuZ2UobnguZHVyYXRpb24sICcjZHVyYXRpb24nLCBmYWxzZSlcblxuICBueC5vZmZzZXQgPSBuZXcgTmV4dXMuRGlhbCgnI29mZnNldCcsIHtcbiAgICBzaXplOiBkaWFsX3NpemUsXG4gICAgbWluOiAtMjQsXG4gICAgbWF4OiAyNCxcbiAgICBzdGVwOiAxLFxuICAgIHZhbHVlOiAtNSxcbiAgfSlcbiAgdXBkYXRlX3ZhbHVlX29uX2NoYW5nZShueC5vZmZzZXQsICcjb2Zmc2V0JywgdHJ1ZSlcblxuICBueC5vY3RhdmUgPSBuZXcgTmV4dXMuRGlhbCgnI29jdGF2ZScsIHtcbiAgICBzaXplOiBkaWFsX3NpemUsXG4gICAgbWluOiAtNCxcbiAgICBtYXg6IDQsXG4gICAgc3RlcDogMSxcbiAgICB2YWx1ZTogMCxcbiAgfSlcbiAgdXBkYXRlX3ZhbHVlX29uX2NoYW5nZShueC5vY3RhdmUsICcjb2N0YXZlJywgdHJ1ZSlcblxuICBueC5tdWx0aXBseSA9IG5ldyBOZXh1cy5EaWFsKCcjbXVsdGlwbHknLCB7XG4gICAgc2l6ZTogZGlhbF9zaXplLFxuICAgIG1pbjogLTY0LFxuICAgIG1heDogNjQsXG4gICAgc3RlcDogMSxcbiAgICB2YWx1ZTogMTcsXG4gIH0pXG4gIHVwZGF0ZV92YWx1ZV9vbl9jaGFuZ2UobngubXVsdGlwbHksICcjbXVsdGlwbHknLCB0cnVlKVxuXG4gIG54LmludGVydmFsID0gbmV3IE5leHVzLkRpYWwoJyNpbnRlcnZhbCcsIHtcbiAgICBzaXplOiBkaWFsX3NpemUsXG4gICAgbWluOiAtNjQsXG4gICAgbWF4OiA2NCxcbiAgICBzdGVwOiAxLFxuICAgIHZhbHVlOiAxMCxcbiAgfSlcbiAgdXBkYXRlX3ZhbHVlX29uX2NoYW5nZShueC5pbnRlcnZhbCwgJyNpbnRlcnZhbCcsIHRydWUpXG5cbiAgY29uc3QgZXhwb3J0X21pZGlfYnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2V4cG9ydF9taWRpJylcbiAgZXhwb3J0X21pZGlfYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIGV4cG9ydF9wYXR0ZXJuX2FzX21pZGkoZGF0YXNldC5uYW1lLCBib3VuZHMsIGRpZmYsIG54LnRlbXBvLnZhbHVlLCBueC50aW1pbmcuYWN0aXZlLCBwbGF5X2ZuKVxuICB9KVxuXG4gIGNvbnN0IHJlY29yZF9taWRpX2J1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNyZWNvcmRfbWlkaScpXG4gIHJlY29yZF9taWRpX2J1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBpZiAocmVjb3JkaW5nKSB7XG4gICAgICByZWNvcmRfbWlkaV9idXR0b24uaW5uZXJIVE1MID0gJ1JlY29yZCBNSURJJ1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdyZWNvcmRpbmcnKVxuICAgICAgcmVjb3JkaW5nID0gZmFsc2VcbiAgICAgIGNvbnN0IHdyaXRlciA9IG5ldyBNaWRpV3JpdGVyLldyaXRlcihbcmVjb3JkZXJdKVxuICAgICAgY29uc3QgYmxvYiA9IGRhdGFVUkl0b0Jsb2Iod3JpdGVyLmRhdGFVcmkoKSlcbiAgICAgIHNhdmVBcyhibG9iLCAnUmVjb3JkaW5nIC0gJyArIGRhdGFzZXQubmFtZSArICcubWlkJylcbiAgICB9IGVsc2Uge1xuICAgICAgcmVjb3JkX21pZGlfYnV0dG9uLmlubmVySFRNTCA9ICdTYXZlIFJlY29yZGluZydcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgncmVjb3JkaW5nJylcbiAgICAgIHJlY29yZGluZyA9IHRydWVcbiAgICAgIHJlY29yZGVyID0gbmV3IE1pZGlXcml0ZXIuVHJhY2soKVxuICAgICAgcmVjb3JkZXIuc2V0VGVtcG8obngudGVtcG8udmFsdWUpXG4gICAgfVxuICB9KVxuXG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sb2FkaW5nJykuY2xhc3NMaXN0LnJlbW92ZSgnbG9hZGluZycpXG5cbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2RhdGFzZXQnKS52YWx1ZSA9ICdNYXNzIFNob290aW5ncydcbiAgcGlja19kYXRhc2V0KCdNYXNzIFNob290aW5ncycpXG5cbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3NjYWxlJykudmFsdWUgPSAnMTQnXG4gIHNjYWxlcy5waWNrKDE0KVxuXG4gIHBsYXlfbmV4dCgpXG59XG5cbi8qIGtleXMgKi9cblxua2V5cy5saXN0ZW4oaW5kZXggPT4ge1xuICBueC5vZmZzZXQudmFsdWUgPSBpbmRleFxuICBueC5vZmZzZXQudXBkYXRlKGluZGV4KVxufSlcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9pbmRleC5qcyIsIm1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uKCl7XG4gIHZhciBJbnRvbmF0aW9uID0gZnVuY3Rpb24ob3B0KXtcbiAgICBvcHQgPSB0aGlzLm9wdCA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgbmFtZTogXCJcIixcbiAgICAgIHJvb3Q6IDQ0MCxcbiAgICAgIG9jdGF2ZTogMCxcbiAgICAgIGludGVydmFsOiAyLFxuICAgICAgdGV0OiAwLFxuICAgICAgaW50ZXJ2YWxzOiBudWxsLFxuICAgIH0sIG9wdCB8fCB7fSlcbiAgICB0aGlzLmdlbmVyYXRlKClcbiAgfVxuICBJbnRvbmF0aW9uLnByb3RvdHlwZS5nZW5lcmF0ZSA9IGZ1bmN0aW9uKG9wdCl7XG4gICAgb3B0ID0gT2JqZWN0LmFzc2lnbih0aGlzLm9wdCwgb3B0IHx8IHt9KVxuICAgIGlmIChvcHQuc2NsKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlX3NjbCgpXG4gICAgfVxuICAgIGVsc2UgaWYgKG9wdC50ZXQpIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVfdGV0KClcbiAgICB9XG4gICAgZWxzZSBpZiAob3B0LmludGVydmFscykge1xuICAgICAgdGhpcy5nZW5lcmF0ZV9pbnRlcnZhbHMoKVxuICAgIH1cbiAgfVxuICBJbnRvbmF0aW9uLnByb3RvdHlwZS5nZW5lcmF0ZV9pbnRlcnZhbHMgPSBmdW5jdGlvbigpe1xuICAgIHZhciByb290ID0gdGhpcy5vcHQucm9vdFxuICAgIHZhciBpbnRlcnZhbF9saXN0ID0gdGhpcy5vcHQuaW50ZXJ2YWxzXG4gICAgaWYgKHR5cGVvZiBpbnRlcnZhbF9saXN0ID09IFwic3RyaW5nXCIpIHtcbiAgICAgIGludGVydmFsX2xpc3QgPSBpbnRlcnZhbF9saXN0LnNwbGl0KFwiIFwiKVxuICAgIH1cbiAgICB0aGlzLm5hbWUgPSB0aGlzLm9wdC5uYW1lIHx8IFwiaW50ZXJ2YWwgbGlzdFwiXG4gICAgdGhpcy5pbnRlcnZhbHMgPSBpbnRlcnZhbF9saXN0XG4gICAgdGhpcy5pbnRlcnZhbCA9IHRoaXMub3B0LmludGVydmFsID0gcGFyc2VJbnRlcnZhbC5jYWxsKHRoaXMsIGludGVydmFsX2xpc3QucG9wKCkgKVxuICAgIHRoaXMuc2NhbGUgPSBpbnRlcnZhbF9saXN0Lm1hcCggcGFyc2VJbnRlcnZhbFN0cmluZy5iaW5kKHRoaXMpICkuZmlsdGVyKGZ1bmN0aW9uKHYpe1xuICAgICAgcmV0dXJuICEhIHZcbiAgICB9KVxuICB9XG4gIEludG9uYXRpb24ucHJvdG90eXBlLmdlbmVyYXRlX3RldCA9IGZ1bmN0aW9uKCl7XG4gICAgdmFyIHNjYWxlID0gdGhpcy5zY2FsZSA9IFtdXG4gICAgdmFyIHJvb3QgPSB0aGlzLm9wdC5yb290XG4gICAgdmFyIHRldCA9IHRoaXMub3B0LnRldFxuICAgIHZhciBpbnRlcnZhbCA9IHRoaXMuaW50ZXJ2YWwgPSB0aGlzLm9wdC5pbnRlcnZhbFxuICAgIHZhciByYXRpbyA9IE1hdGgucG93KCBpbnRlcnZhbCwgMS90ZXQgKVxuICAgIHZhciBuID0gcm9vdFxuICAgIHNjYWxlLnB1c2gobilcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRldC0xOyBpKyspIHtcbiAgICAgIG4gKj0gcmF0aW9cbiAgICAgIHNjYWxlLnB1c2gobilcbiAgICB9XG4gICAgdGhpcy5uYW1lID0gdGhpcy5vcHQubmFtZSB8fCB0ZXQgKyBcIi10b25lIGVxdWFsIHRlbXBlcmFtZW50XCJcbiAgICB0aGlzLmludGVydmFscyA9IG51bGxcbiAgfVxuICBJbnRvbmF0aW9uLnByb3RvdHlwZS5nZW5lcmF0ZV9zY2wgPSBmdW5jdGlvbigpe1xuICAgIHZhciByb290ID0gdGhpcy5vcHQucm9vdFxuICAgIHZhciBzY2wgPSB0aGlzLnBhcnNlX3NjbCggdGhpcy5vcHQuc2NsIClcbiAgICB0aGlzLmludGVydmFscyA9IHNjbC5ub3Rlc1xuICAgIHRoaXMuaW50ZXJ2YWwgPSBzY2wubm90ZXMucG9wKClcbiAgICB0aGlzLm5hbWUgPSB0aGlzLm9wdC5uYW1lIHx8IHNjbC5kZXNjcmlwdGlvblxuICAgIHRoaXMuc2NhbGUgPSBzY2wubm90ZXMubWFwKGZ1bmN0aW9uKHYpe1xuICAgICAgcmV0dXJuIHYgKiByb290XG4gICAgfSlcbiAgfVxuICBJbnRvbmF0aW9uLnByb3RvdHlwZS5wYXJzZV9zY2wgPSBmdW5jdGlvbihzKXtcbiAgICB2YXIgc2NsID0ge31cbiAgICBzY2wuY29tbWVudHMgPSBbXVxuICAgIHNjbC5ub3RlcyA9IFtdXG4gICAgcy50cmltKCkuc3BsaXQoXCJcXG5cIikuZm9yRWFjaChmdW5jdGlvbihsaW5lKXtcbiAgICAgIC8vIExpbmVzIGJlZ2lubmluZyB3aXRoIGFuIGV4Y2xhbWF0aW9uIG1hcmsgYXJlIHJlZ2FyZGVkIGFzIGNvbW1lbnRzXG4gICAgICAvLyBhbmQgYXJlIHRvIGJlIGlnbm9yZWQuXG4gICAgICBpZiAoIGxpbmUuaW5kZXhPZihcIiFcIikgIT09IC0xICkge1xuICAgICAgICBzY2wuY29tbWVudHMucHVzaChsaW5lKVxuICAgICAgfVxuICAgICAgLy8gVGhlIGZpcnN0IChub24gY29tbWVudCkgbGluZSBjb250YWlucyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBzY2FsZS5cbiAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGRlc2NyaXB0aW9uLCB0aGVyZSBzaG91bGQgYmUgYW4gZW1wdHkgbGluZS4gKG5iOiB3aGljaCBpcyBmYWxzZXkpXG4gICAgICBlbHNlIGlmICggISAoJ2Rlc2NyaXB0aW9uJyBpbiBzY2wpICkge1xuICAgICAgICBzY2wuZGVzY3JpcHRpb24gPSBsaW5lXG4gICAgICB9XG4gICAgICAvLyBUaGUgc2Vjb25kIGxpbmUgY29udGFpbnMgdGhlIG51bWJlciBvZiBub3Rlcy5cbiAgICAgIC8vIFRoZSBmaXJzdCBub3RlIG9mIDEvMSBvciAwLjAgY2VudHMgaXMgaW1wbGljaXQgYW5kIG5vdCBpbiB0aGUgZmlsZXMuXG4gICAgICBlbHNlIGlmICggISBzY2wubm90ZXMubGVuZ3RoKSB7XG4gICAgICAgIHNjbC5ub3Rlcy5wdXNoKDEpXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGNvbnRhaW5zIGEgcGVyaW9kLCBpdCBpcyBhIGNlbnRzIHZhbHVlLCBvdGhlcndpc2UgYSByYXRpby5cbiAgICAgICAgdmFyIG5vdGUgPSBsaW5lLnJlcGxhY2UoL15bXi1cXC4wLTldKy8sXCJcIikucmVwbGFjZSgvW14tXFwvXFwuMC05XSskLyxcIlwiKVxuICAgICAgICBpZiAoIG5vdGUuaW5kZXhPZihcIi5cIikgIT09IC0xICkge1xuICAgICAgICAgIG5vdGUgPSBNYXRoLnBvdyggMiwgKHBhcnNlRmxvYXQobm90ZSkgLyAxMjAwKSApXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgbm90ZSA9IHBhcnNlSW50ZXJ2YWwobm90ZSlcbiAgICAgICAgfVxuICAgICAgICBpZiAobm90ZSkge1xuICAgICAgICAgIHNjbC5ub3Rlcy5wdXNoKG5vdGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBzY2xcbiAgfVxuICBJbnRvbmF0aW9uLnByb3RvdHlwZS5pbmRleCA9IGZ1bmN0aW9uKGksIG9jdGF2ZSl7XG4gICAgb2N0YXZlID0gb2N0YXZlIHx8IHRoaXMub3B0Lm9jdGF2ZVxuICAgIHZhciBmID0gdGhpcy5zY2FsZVsgbW9kKGksIHRoaXMuc2NhbGUubGVuZ3RoKXwwIF1cbiAgICB2YXIgcG93ID0gTWF0aC5mbG9vcihub3JtKGksIDAsIHRoaXMuc2NhbGUubGVuZ3RoKSkgKyBvY3RhdmVcbiAgICBmICo9IE1hdGgucG93KHRoaXMuaW50ZXJ2YWwsIHBvdylcbiAgICByZXR1cm4gZlxuICB9XG4gIEludG9uYXRpb24ucHJvdG90eXBlLnJhbmdlID0gZnVuY3Rpb24obWluLCBtYXgpe1xuICAgIHZhciBhID0gW11cbiAgICBmb3IgKHZhciBpID0gbWluOyBpIDwgbWF4OyBpKyspIHtcbiAgICAgIGEucHVzaCggdGhpcy5pbmRleChpKSApXG4gICAgfVxuICAgIHJldHVybiBhXG4gIH1cbiAgSW50b25hdGlvbi5wcm90b3R5cGUuc2V0X3Jvb3QgPSBmdW5jdGlvbihmKXtcbiAgICB0aGlzLm9wdC5yb290ID0gZlxuICAgIHRoaXMuZ2VuZXJhdGUoKVxuICB9XG4gIEludG9uYXRpb24ucHJvdG90eXBlLnF1YW50aXplX2ZyZXF1ZW5jeSA9IGZ1bmN0aW9uKGYpe1xuICAgIGlmIChmID09IDApIHJldHVybiAwXG4gICAgdmFyIHNjYWxlX2YgPSBmXG4gICAgdmFyIHBvdyA9IDBcbiAgICB2YXIgaW50ZXJ2YWwgPSB0aGlzLmludGVydmFsXG4gICAgdmFyIHNjYWxlID0gdGhpcy5zY2FsZVxuICAgIHdoaWxlIChzY2FsZV9mIDwgcm9vdCkge1xuICAgICAgc2NhbGVfZiAqPSBpbnRlcnZhbFxuICAgICAgcG93IC09IDFcbiAgICB9XG4gICAgd2hpbGUgKHNjYWxlX2YgPiByb290ICogaW50ZXJ2YWwpIHtcbiAgICAgIHNjYWxlX2YgLz0gaW50ZXJ2YWxcbiAgICAgIHBvdyArPSAxXG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NhbGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChzY2FsZV9mID4gc2NhbGVbaV0pIGNvbnRpbnVlXG4gICAgICBzY2FsZV9mID0gc2NhbGVbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIHNjYWxlX2YgKj0gTWF0aC5wb3coMiwgcG93KVxuICAgIHJldHVybiBzY2FsZV9mXG4gIH1cbiAgSW50b25hdGlvbi5wcm90b3R5cGUucXVhbnRpemVfaW5kZXggPSBmdW5jdGlvbihpKXtcbiAgICByZXR1cm4gbW9kKGluZGV4LTEsIHRoaXMuc2NhbGUubGVuZ3RoKXwwXG4gIH1cbiAgdmFyIHBhcnNlSW50ZXJ2YWwgPSBJbnRvbmF0aW9uLnByb3RvdHlwZS5wYXJzZV9pbnRlcnZhbCA9IGZ1bmN0aW9uIChzKSB7XG4gICAgaWYgKHR5cGVvZiBzID09IFwibnVtYmVyXCIpIHJldHVybiBzXG4gICAgaWYgKCEgcy5pbmRleE9mKFwiL1wiKSA9PSAtMSkgcmV0dXJuIHBhcnNlSW50KHMpXG4gICAgdmFyIHBwID0gcy5zcGxpdChcIi9cIilcbiAgICB2YXIgbnVtID0gcGFyc2VJbnQocHBbMF0pXG4gICAgdmFyIGRlbiA9IHBhcnNlSW50KHBwWzFdKVxuICAgIGlmIChpc05hTihudW0pKSByZXR1cm4gMVxuICAgIGlmIChpc05hTihkZW4pIHx8IGRlbiA9PSAwKSByZXR1cm4gbnVtXG4gICAgaWYgKG51bSA9PSBkZW4pIHJldHVybiAxXG4gICAgcmV0dXJuIG51bSAvIGRlblxuICB9XG4gIHZhciBwYXJzZUludGVydmFsU3RyaW5nID0gSW50b25hdGlvbi5wcm90b3R5cGUucGFyc2VfaW50ZXJ2YWxfc3RyaW5nID0gZnVuY3Rpb24ocyl7XG4gICAgaWYgKHMuaW5kZXhPZihcIi9cIikgIT09IC0xKSByZXR1cm4gcGFyc2VJbnRlcnZhbChzKSAqIHRoaXMub3B0LnJvb3QgLy8gaW50ZXJ2YWxzXG4gICAgaWYgKHMuaW5kZXhPZihcImZcIikgIT09IC0xKSByZXR1cm4gcGFyc2VGbG9hdChzKSAgICAvLyBwdXJlIGZyZXF1ZW5jaWVzXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQocylcbiAgfVxuICBmdW5jdGlvbiBub3JtKG4sYSxiKXsgcmV0dXJuIChuLWEpIC8gKGItYSkgfVxuICBmdW5jdGlvbiBtb2QobixtKXsgcmV0dXJuIG4tKG0gKiBNYXRoLmZsb29yKG4vbSkpIH1cblxuICByZXR1cm4gSW50b25hdGlvblxufSkoKVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2xpYi9pbnRvbmF0aW9uLmpzIiwiLyoqXG4gKiAgU3RhcnRBdWRpb0NvbnRleHQuanNcbiAqICBAYXV0aG9yIFlvdGFtIE1hbm5cbiAqICBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVCBMaWNlbnNlXG4gKiAgQGNvcHlyaWdodCAyMDE2IFlvdGFtIE1hbm5cbiAqL1xuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShbXSwgZmFjdG9yeSk7XG4gICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICB9IGVsc2Uge1xuICAgIHJvb3QuU3RhcnRBdWRpb0NvbnRleHQgPSBmYWN0b3J5KCk7XG4gIH1cbn0odGhpcywgZnVuY3Rpb24gKCkge1xuXG4gIC8qKlxuICAgKiBUaGUgU3RhcnRBdWRpb0NvbnRleHQgb2JqZWN0XG4gICAqL1xuICB2YXIgU3RhcnRBdWRpb0NvbnRleHQgPSB7XG4gICAgLyoqXG4gICAgICogVGhlIGF1ZGlvIGNvbnRleHQgcGFzc2VkIGluIGJ5IHRoZSB1c2VyXG4gICAgICogQHR5cGUge0F1ZGlvQ29udGV4dH1cbiAgICAgKi9cbiAgICBjb250ZXh0IDogbnVsbCxcbiAgICAvKipcbiAgICAgKiBUaGUgVGFwTGlzdGVuZXJzIGJvdW5kIHRvIHRoZSBlbGVtZW50c1xuICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90YXBMaXN0ZW5lcnMgOiBbXSxcbiAgICAvKipcbiAgICAgKiBDYWxsYmFja3MgdG8gaW52b2tlIHdoZW4gdGhlIGF1ZGlvIGNvbnRleHQgaXMgc3RhcnRlZFxuICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9vblN0YXJ0ZWQgOiBbXSxcbiAgfTtcblxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNvbnRleHRcbiAgICogQHBhcmFtIHtBdWRpb0NvbnRleHR9IGN0eFxuICAgKiBAcmV0dXJucyB7U3RhcnRBdWRpb0NvbnRleHR9XG4gICAqL1xuICBTdGFydEF1ZGlvQ29udGV4dC5zZXRDb250ZXh0ID0gZnVuY3Rpb24oY3R4KXtcbiAgICBTdGFydEF1ZGlvQ29udGV4dC5jb250ZXh0ID0gY3R4O1xuICAgIHJldHVybiBTdGFydEF1ZGlvQ29udGV4dDtcbiAgfTtcblxuICAvKipcbiAgICogQWRkIGEgdGFwIGxpc3RlbmVyIHRvIHRoZSBhdWRpbyBjb250ZXh0XG4gICAqIEBwYXJhbSAge0FycmF5fEVsZW1lbnR8U3RyaW5nfGpRdWVyeX0gZWxlbWVudFxuICAgKiBAcmV0dXJucyB7U3RhcnRBdWRpb0NvbnRleHR9XG4gICAqL1xuICBTdGFydEF1ZGlvQ29udGV4dC5vbiA9IGZ1bmN0aW9uKGVsZW1lbnQpe1xuICAgIGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnQpIHx8IChOb2RlTGlzdCAmJiBlbGVtZW50IGluc3RhbmNlb2YgTm9kZUxpc3QpKXtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudC5sZW5ndGg7IGkrKyl7XG4gICAgICAgIFN0YXJ0QXVkaW9Db250ZXh0Lm9uKGVsZW1lbnRbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQgPT09IFwic3RyaW5nXCIpe1xuICAgICAgU3RhcnRBdWRpb0NvbnRleHQub24oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlbGVtZW50KSk7XG4gICAgfSBlbHNlIGlmIChlbGVtZW50LmpxdWVyeSAmJiB0eXBlb2YgZWxlbWVudC50b0FycmF5ID09PSBcImZ1bmN0aW9uXCIpe1xuICAgICAgU3RhcnRBdWRpb0NvbnRleHQub24oZWxlbWVudC50b0FycmF5KCkpO1xuICAgIH0gZWxzZSBpZiAoRWxlbWVudCAmJiBlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudCl7XG4gICAgICAvL2lmIGl0J3MgYW4gZWxlbWVudCwgY3JlYXRlIGEgVGFwTGlzdGVuZXJcbiAgICAgIHZhciB0YXAgPSBuZXcgVGFwTGlzdGVuZXIoZWxlbWVudCwgb25UYXApO1xuICAgICAgU3RhcnRBdWRpb0NvbnRleHQuX3RhcExpc3RlbmVycy5wdXNoKHRhcCk7XG4gICAgfSBcbiAgICByZXR1cm4gU3RhcnRBdWRpb0NvbnRleHQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIEJpbmQgYSBjYWxsYmFjayB0byB3aGVuIHRoZSBhdWRpbyBjb250ZXh0IGlzIHN0YXJ0ZWQuIFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYlxuICAgKiBAcmV0dXJuIHtTdGFydEF1ZGlvQ29udGV4dH1cbiAgICovXG4gIFN0YXJ0QXVkaW9Db250ZXh0Lm9uU3RhcnRlZCA9IGZ1bmN0aW9uKGNiKXtcbiAgICAvL2lmIGl0J3MgYWxyZWFkeSBzdGFydGVkLCBpbnZva2UgdGhlIGNhbGxiYWNrXG4gICAgaWYgKFN0YXJ0QXVkaW9Db250ZXh0LmlzU3RhcnRlZCgpKXtcbiAgICAgIGNiKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFN0YXJ0QXVkaW9Db250ZXh0Ll9vblN0YXJ0ZWQucHVzaChjYik7XG4gICAgfVxuICAgIHJldHVybiBTdGFydEF1ZGlvQ29udGV4dDtcbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJucyB0cnVlIGlmIHRoZSBjb250ZXh0IGlzIHN0YXJ0ZWRcbiAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICovXG4gIFN0YXJ0QXVkaW9Db250ZXh0LmlzU3RhcnRlZCA9IGZ1bmN0aW9uKCl7XG4gICAgcmV0dXJuIChTdGFydEF1ZGlvQ29udGV4dC5jb250ZXh0ICE9PSBudWxsICYmIFN0YXJ0QXVkaW9Db250ZXh0LmNvbnRleHQuc3RhdGUgPT09IFwicnVubmluZ1wiKTtcbiAgfTtcblxuICAvKipcbiAgICogQGNsYXNzICBMaXN0ZW5zIGZvciBub24tZHJhZ2dpbmcgdGFwIGVuZHMgb24gdGhlIGdpdmVuIGVsZW1lbnRcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdmFyIFRhcExpc3RlbmVyID0gZnVuY3Rpb24oZWxlbWVudCl7XG5cbiAgICB0aGlzLl9kcmFnZ2VkID0gZmFsc2U7XG5cbiAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMuX2JpbmRlZE1vdmUgPSB0aGlzLl9tb3ZlZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JpbmRlZEVuZCA9IHRoaXMuX2VuZGVkLmJpbmQodGhpcyk7XG5cbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgdGhpcy5fYmluZGVkTW92ZSk7XG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgdGhpcy5fYmluZGVkRW5kKTtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIHRoaXMuX2JpbmRlZEVuZCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIGRyYWcgbW92ZSBldmVudFxuICAgKi9cbiAgVGFwTGlzdGVuZXIucHJvdG90eXBlLl9tb3ZlZCA9IGZ1bmN0aW9uKGUpe1xuICAgIHRoaXMuX2RyYWdnZWQgPSB0cnVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiB0YXAgZW5kZWQgbGlzdGVuZXJcbiAgICovXG4gIFRhcExpc3RlbmVyLnByb3RvdHlwZS5fZW5kZWQgPSBmdW5jdGlvbihlKXtcbiAgICBpZiAoIXRoaXMuX2RyYWdnZWQpe1xuICAgICAgb25UYXAoKTtcbiAgICB9XG4gICAgdGhpcy5fZHJhZ2dlZCA9IGZhbHNlO1xuICB9O1xuXG4gIC8qKlxuICAgKiByZW1vdmUgYWxsIHRoZSBib3VuZCBldmVudHNcbiAgICovXG4gIFRhcExpc3RlbmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24oKXtcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgdGhpcy5fYmluZGVkTW92ZSk7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgdGhpcy5fYmluZGVkRW5kKTtcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIHRoaXMuX2JpbmRlZEVuZCk7XG4gICAgdGhpcy5fYmluZGVkTW92ZSA9IG51bGw7XG4gICAgdGhpcy5fYmluZGVkRW5kID0gbnVsbDtcbiAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgfTtcblxuICAvKipcbiAgICogSW52b2tlZCB0aGUgZmlyc3QgdGltZSBvZiB0aGUgZWxlbWVudHMgaXMgdGFwcGVkLlxuICAgKiBDcmVhdGVzIGEgc2lsZW50IG9zY2lsbGF0b3Igd2hlbiBhIG5vbi1kcmFnZ2luZyB0b3VjaGVuZCBcbiAgICogZXZlbnQgaGFzIGJlZW4gdHJpZ2dlcmVkLlxuICAgKi9cbiAgZnVuY3Rpb24gb25UYXAoKXtcbiAgICAvL3N0YXJ0IHRoZSBhdWRpbyBjb250ZXh0IHdpdGggYSBzaWxlbnQgb3NjaWxsYXRvclxuICAgIGlmIChTdGFydEF1ZGlvQ29udGV4dC5jb250ZXh0ICYmICFTdGFydEF1ZGlvQ29udGV4dC5pc1N0YXJ0ZWQoKSl7XG4gICAgICB2YXIgb3NjID0gU3RhcnRBdWRpb0NvbnRleHQuY29udGV4dC5jcmVhdGVPc2NpbGxhdG9yKCk7XG4gICAgICB2YXIgc2lsZW50ID0gU3RhcnRBdWRpb0NvbnRleHQuY29udGV4dC5jcmVhdGVHYWluKCk7XG4gICAgICBzaWxlbnQuZ2Fpbi52YWx1ZSA9IDA7XG4gICAgICBvc2MuY29ubmVjdChzaWxlbnQpO1xuICAgICAgc2lsZW50LmNvbm5lY3QoU3RhcnRBdWRpb0NvbnRleHQuY29udGV4dC5kZXN0aW5hdGlvbik7XG4gICAgICB2YXIgbm93ID0gU3RhcnRBdWRpb0NvbnRleHQuY29udGV4dC5jdXJyZW50VGltZTtcbiAgICAgIG9zYy5zdGFydChub3cpO1xuICAgICAgb3NjLnN0b3Aobm93KzAuNSk7XG4gICAgfVxuXG4gICAgLy9kaXNwb3NlIGFsbCB0aGUgdGFwIGxpc3RlbmVyc1xuICAgIGlmIChTdGFydEF1ZGlvQ29udGV4dC5fdGFwTGlzdGVuZXJzKXtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgU3RhcnRBdWRpb0NvbnRleHQuX3RhcExpc3RlbmVycy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIFN0YXJ0QXVkaW9Db250ZXh0Ll90YXBMaXN0ZW5lcnNbaV0uZGlzcG9zZSgpO1xuICAgICAgfVxuICAgICAgU3RhcnRBdWRpb0NvbnRleHQuX3RhcExpc3RlbmVycyA9IG51bGw7XG4gICAgfVxuICAgIC8vdGhlIG9uc3RhcnRlZCBjYWxsYmFja3NcbiAgICBpZiAoU3RhcnRBdWRpb0NvbnRleHQuX29uU3RhcnRlZCl7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IFN0YXJ0QXVkaW9Db250ZXh0Ll9vblN0YXJ0ZWQubGVuZ3RoOyBqKyspe1xuICAgICAgICBTdGFydEF1ZGlvQ29udGV4dC5fb25TdGFydGVkW2pdKCk7XG4gICAgICB9XG4gICAgICBTdGFydEF1ZGlvQ29udGV4dC5fb25TdGFydGVkID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gU3RhcnRBdWRpb0NvbnRleHQ7XG59KSk7XG5cblxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2xpYi9zdGFydEF1ZGlvQ29udGV4dC5qcyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9hcnJheS9mcm9tXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9hcnJheS9mcm9tLmpzXG4vLyBtb2R1bGUgaWQgPSA4M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vZ2V0LWl0ZXJhdG9yXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9nZXQtaXRlcmF0b3IuanNcbi8vIG1vZHVsZSBpZCA9IDg0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9pcy1pdGVyYWJsZVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9iYWJlbC1ydW50aW1lL2NvcmUtanMvaXMtaXRlcmFibGUuanNcbi8vIG1vZHVsZSBpZCA9IDg1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9tYXRoL2xvZzJcIiksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYmFiZWwtcnVudGltZS9jb3JlLWpzL21hdGgvbG9nMi5qc1xuLy8gbW9kdWxlIGlkID0gODZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9rZXlzXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qva2V5cy5qc1xuLy8gbW9kdWxlIGlkID0gODdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2VcIiksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2UuanNcbi8vIG1vZHVsZSBpZCA9IDg4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9zeW1ib2xcIiksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbC5qc1xuLy8gbW9kdWxlIGlkID0gODlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pdGVyYXRvclwiKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9iYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sL2l0ZXJhdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSA5MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9pdGVyYXRvciA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL3N5bWJvbC9pdGVyYXRvclwiKTtcblxudmFyIF9pdGVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pdGVyYXRvcik7XG5cbnZhciBfc3ltYm9sID0gcmVxdWlyZShcIi4uL2NvcmUtanMvc3ltYm9sXCIpO1xuXG52YXIgX3N5bWJvbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zeW1ib2wpO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIF9pdGVyYXRvcjIuZGVmYXVsdCA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IF9zeW1ib2wyLmRlZmF1bHQgJiYgb2JqICE9PSBfc3ltYm9sMi5kZWZhdWx0LnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIF90eXBlb2YoX2l0ZXJhdG9yMi5kZWZhdWx0KSA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihvYmopO1xufSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gX3N5bWJvbDIuZGVmYXVsdCAmJiBvYmogIT09IF9zeW1ib2wyLmRlZmF1bHQucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihvYmopO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYmFiZWwtcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qc1xuLy8gbW9kdWxlIGlkID0gOTFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gcGxhY2VIb2xkZXJzQ291bnQgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gdGhlIG51bWJlciBvZiBlcXVhbCBzaWducyAocGxhY2UgaG9sZGVycylcbiAgLy8gaWYgdGhlcmUgYXJlIHR3byBwbGFjZWhvbGRlcnMsIHRoYW4gdGhlIHR3byBjaGFyYWN0ZXJzIGJlZm9yZSBpdFxuICAvLyByZXByZXNlbnQgb25lIGJ5dGVcbiAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUsIHRoZW4gdGhlIHRocmVlIGNoYXJhY3RlcnMgYmVmb3JlIGl0IHJlcHJlc2VudCAyIGJ5dGVzXG4gIC8vIHRoaXMgaXMganVzdCBhIGNoZWFwIGhhY2sgdG8gbm90IGRvIGluZGV4T2YgdHdpY2VcbiAgcmV0dXJuIGI2NFtsZW4gLSAyXSA9PT0gJz0nID8gMiA6IGI2NFtsZW4gLSAxXSA9PT0gJz0nID8gMSA6IDBcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIC8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuICByZXR1cm4gYjY0Lmxlbmd0aCAqIDMgLyA0IC0gcGxhY2VIb2xkZXJzQ291bnQoYjY0KVxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciBpLCBqLCBsLCB0bXAsIHBsYWNlSG9sZGVycywgYXJyXG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG4gIHBsYWNlSG9sZGVycyA9IHBsYWNlSG9sZGVyc0NvdW50KGI2NClcblxuICBhcnIgPSBuZXcgQXJyKGxlbiAqIDMgLyA0IC0gcGxhY2VIb2xkZXJzKVxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgbCA9IHBsYWNlSG9sZGVycyA+IDAgPyBsZW4gLSA0IDogbGVuXG5cbiAgdmFyIEwgPSAwXG5cbiAgZm9yIChpID0gMCwgaiA9IDA7IGkgPCBsOyBpICs9IDQsIGogKz0gMykge1xuICAgIHRtcCA9IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfCAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfCByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltMKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW0wrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltMKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVycyA9PT0gMikge1xuICAgIHRtcCA9IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW0wrK10gPSB0bXAgJiAweEZGXG4gIH0gZWxzZSBpZiAocGxhY2VIb2xkZXJzID09PSAxKSB7XG4gICAgdG1wID0gKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW0wrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltMKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICsgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICsgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gKyBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID0gKHVpbnQ4W2ldIDw8IDE2KSArICh1aW50OFtpICsgMV0gPDwgOCkgKyAodWludDhbaSArIDJdKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgb3V0cHV0ID0gJydcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIG91dHB1dCArPSBsb29rdXBbdG1wID4+IDJdXG4gICAgb3V0cHV0ICs9IGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl1cbiAgICBvdXRwdXQgKz0gJz09J1xuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyAodWludDhbbGVuIC0gMV0pXG4gICAgb3V0cHV0ICs9IGxvb2t1cFt0bXAgPj4gMTBdXG4gICAgb3V0cHV0ICs9IGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl1cbiAgICBvdXRwdXQgKz0gbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXVxuICAgIG91dHB1dCArPSAnPSdcbiAgfVxuXG4gIHBhcnRzLnB1c2gob3V0cHV0KVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2Jhc2U2NC1qcy9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gOTJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5BcnJheS5mcm9tO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvZm4vYXJyYXkvZnJvbS5qc1xuLy8gbW9kdWxlIGlkID0gOTNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwicmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvcicpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvZm4vZ2V0LWl0ZXJhdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSA5NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJyZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9tb2R1bGVzL2NvcmUuaXMtaXRlcmFibGUnKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L2ZuL2lzLWl0ZXJhYmxlLmpzXG4vLyBtb2R1bGUgaWQgPSA5NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzInKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk1hdGgubG9nMjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L2ZuL21hdGgvbG9nMi5qc1xuLy8gbW9kdWxlIGlkID0gOTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0LmFzc2lnbjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9hc3NpZ24uanNcbi8vIG1vZHVsZSBpZCA9IDk3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3Qua2V5cztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9rZXlzLmpzXG4vLyBtb2R1bGUgaWQgPSA5OFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJyZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYucHJvbWlzZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9tb2R1bGVzL19jb3JlJykuUHJvbWlzZTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2UuanNcbi8vIG1vZHVsZSBpZCA9IDk5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuU3ltYm9sO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAxMDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fd2tzLWV4dCcpLmYoJ2l0ZXJhdG9yJyk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9mbi9zeW1ib2wvaXRlcmF0b3IuanNcbi8vIG1vZHVsZSBpZCA9IDEwMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCl7IC8qIGVtcHR5ICovIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanNcbi8vIG1vZHVsZSBpZCA9IDEwMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpe1xuICBpZighKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSl7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4taW5zdGFuY2UuanNcbi8vIG1vZHVsZSBpZCA9IDEwM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIHRvTGVuZ3RoICA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpXG4gICwgdG9JbmRleCAgID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oSVNfSU5DTFVERVMpe1xuICByZXR1cm4gZnVuY3Rpb24oJHRoaXMsIGVsLCBmcm9tSW5kZXgpe1xuICAgIHZhciBPICAgICAgPSB0b0lPYmplY3QoJHRoaXMpXG4gICAgICAsIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKVxuICAgICAgLCBpbmRleCAgPSB0b0luZGV4KGZyb21JbmRleCwgbGVuZ3RoKVxuICAgICAgLCB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgaWYoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpd2hpbGUobGVuZ3RoID4gaW5kZXgpe1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgaWYodmFsdWUgIT0gdmFsdWUpcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjdG9JbmRleCBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKWlmKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pe1xuICAgICAgaWYoT1tpbmRleF0gPT09IGVsKXJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qc1xuLy8gbW9kdWxlIGlkID0gMTA0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKVxuICAsIGNyZWF0ZURlc2MgICAgICA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmplY3QsIGluZGV4LCB2YWx1ZSl7XG4gIGlmKGluZGV4IGluIG9iamVjdCkkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qc1xuLy8gbW9kdWxlIGlkID0gMTA1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJylcbiAgLCBnT1BTICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKVxuICAsIHBJRSAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgdmFyIHJlc3VsdCAgICAgPSBnZXRLZXlzKGl0KVxuICAgICwgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgaWYoZ2V0U3ltYm9scyl7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KVxuICAgICAgLCBpc0VudW0gID0gcElFLmZcbiAgICAgICwgaSAgICAgICA9IDBcbiAgICAgICwga2V5O1xuICAgIHdoaWxlKHN5bWJvbHMubGVuZ3RoID4gaSlpZihpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSlyZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZW51bS1rZXlzLmpzXG4vLyBtb2R1bGUgaWQgPSAxMDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGN0eCAgICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBjYWxsICAgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpXG4gICwgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJylcbiAgLCBhbk9iamVjdCAgICA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgdG9MZW5ndGggICAgPSByZXF1aXJlKCcuL190by1sZW5ndGgnKVxuICAsIGdldEl0ZXJGbiAgID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKVxuICAsIEJSRUFLICAgICAgID0ge31cbiAgLCBSRVRVUk4gICAgICA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1Ipe1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbigpeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpXG4gICAgLCBmICAgICAgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSlcbiAgICAsIGluZGV4ICA9IDBcbiAgICAsIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKXRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYoaXNBcnJheUl0ZXIoaXRlckZuKSlmb3IobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4Kyspe1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZihyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKXJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgKXtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZihyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKXJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLICA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mb3Itb2YuanNcbi8vIG1vZHVsZSBpZCA9IDEwN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZm4sIGFyZ3MsIHRoYXQpe1xuICB2YXIgdW4gPSB0aGF0ID09PSB1bmRlZmluZWQ7XG4gIHN3aXRjaChhcmdzLmxlbmd0aCl7XG4gICAgY2FzZSAwOiByZXR1cm4gdW4gPyBmbigpXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQpO1xuICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gIH0gcmV0dXJuICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pbnZva2UuanNcbi8vIG1vZHVsZSBpZCA9IDEwOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKXtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXkuanNcbi8vIG1vZHVsZSBpZCA9IDEwOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJylcbiAgLCBkZXNjcmlwdG9yICAgICA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKVxuICAsIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKVxuICAsIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19oaWRlJykoSXRlcmF0b3JQcm90b3R5cGUsIHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpLCBmdW5jdGlvbigpeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpe1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHtuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpfSk7XG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBOQU1FICsgJyBJdGVyYXRvcicpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzXG4vLyBtb2R1bGUgaWQgPSAxMTBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihkb25lLCB2YWx1ZSl7XG4gIHJldHVybiB7dmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmV9O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItc3RlcC5qc1xuLy8gbW9kdWxlIGlkID0gMTExXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBnZXRLZXlzICAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpXG4gICwgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmplY3QsIGVsKXtcbiAgdmFyIE8gICAgICA9IHRvSU9iamVjdChvYmplY3QpXG4gICAgLCBrZXlzICAgPSBnZXRLZXlzKE8pXG4gICAgLCBsZW5ndGggPSBrZXlzLmxlbmd0aFxuICAgICwgaW5kZXggID0gMFxuICAgICwga2V5O1xuICB3aGlsZShsZW5ndGggPiBpbmRleClpZihPW2tleSA9IGtleXNbaW5kZXgrK11dID09PSBlbClyZXR1cm4ga2V5O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2tleW9mLmpzXG4vLyBtb2R1bGUgaWQgPSAxMTJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIE1FVEEgICAgID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKVxuICAsIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0JylcbiAgLCBoYXMgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgc2V0RGVzYyAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mXG4gICwgaWQgICAgICAgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24oKXtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24oaXQpe1xuICBzZXREZXNjKGl0LCBNRVRBLCB7dmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9fSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbihpdCwgY3JlYXRlKXtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZighaXNPYmplY3QoaXQpKXJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmKCFoYXMoaXQsIE1FVEEpKXtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmKCFpc0V4dGVuc2libGUoaXQpKXJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZighY3JlYXRlKXJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24oaXQsIGNyZWF0ZSl7XG4gIGlmKCFoYXMoaXQsIE1FVEEpKXtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmKCFpc0V4dGVuc2libGUoaXQpKXJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYoIWNyZWF0ZSlyZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKXNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiAgICAgIE1FVEEsXG4gIE5FRUQ6ICAgICBmYWxzZSxcbiAgZmFzdEtleTogIGZhc3RLZXksXG4gIGdldFdlYWs6ICBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19tZXRhLmpzXG4vLyBtb2R1bGUgaWQgPSAxMTNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGdsb2JhbCAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldFxuICAsIE9ic2VydmVyICA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyXG4gICwgcHJvY2VzcyAgID0gZ2xvYmFsLnByb2Nlc3NcbiAgLCBQcm9taXNlICAgPSBnbG9iYWwuUHJvbWlzZVxuICAsIGlzTm9kZSAgICA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpe1xuICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uKCl7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZShoZWFkKXtcbiAgICAgIGZuICAgPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoKGUpe1xuICAgICAgICBpZihoZWFkKW5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmKHBhcmVudClwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmKGlzTm9kZSl7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlclxuICB9IGVsc2UgaWYoT2JzZXJ2ZXIpe1xuICAgIHZhciB0b2dnbGUgPSB0cnVlXG4gICAgICAsIG5vZGUgICA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwge2NoYXJhY3RlckRhdGE6IHRydWV9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBub3RpZnkgPSBmdW5jdGlvbigpe1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpe1xuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcbiAgICAgIHByb21pc2UudGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uKCl7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKGZuKXtcbiAgICB2YXIgdGFzayA9IHtmbjogZm4sIG5leHQ6IHVuZGVmaW5lZH07XG4gICAgaWYobGFzdClsYXN0Lm5leHQgPSB0YXNrO1xuICAgIGlmKCFoZWFkKXtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19taWNyb3Rhc2suanNcbi8vIG1vZHVsZSBpZCA9IDExNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgZ2V0S2V5cyAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpXG4gICwgZ09QUyAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpXG4gICwgcElFICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJylcbiAgLCB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpXG4gICwgSU9iamVjdCAgPSByZXF1aXJlKCcuL19pb2JqZWN0JylcbiAgLCAkYXNzaWduICA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uKCl7XG4gIHZhciBBID0ge31cbiAgICAsIEIgPSB7fVxuICAgICwgUyA9IFN5bWJvbCgpXG4gICAgLCBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24oayl7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSl7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgICAgID0gdG9PYmplY3QodGFyZ2V0KVxuICAgICwgYUxlbiAgPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBpbmRleCA9IDFcbiAgICAsIGdldFN5bWJvbHMgPSBnT1BTLmZcbiAgICAsIGlzRW51bSAgICAgPSBwSUUuZjtcbiAgd2hpbGUoYUxlbiA+IGluZGV4KXtcbiAgICB2YXIgUyAgICAgID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pXG4gICAgICAsIGtleXMgICA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUylcbiAgICAgICwgbGVuZ3RoID0ga2V5cy5sZW5ndGhcbiAgICAgICwgaiAgICAgID0gMFxuICAgICAgLCBrZXk7XG4gICAgd2hpbGUobGVuZ3RoID4gailpZihpc0VudW0uY2FsbChTLCBrZXkgPSBrZXlzW2orK10pKVRba2V5XSA9IFNba2V5XTtcbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qc1xuLy8gbW9kdWxlIGlkID0gMTE1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkUCAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpXG4gICwgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIGdldEtleXMgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpe1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgICA9IGdldEtleXMoUHJvcGVydGllcylcbiAgICAsIGxlbmd0aCA9IGtleXMubGVuZ3RoXG4gICAgLCBpID0gMFxuICAgICwgUDtcbiAgd2hpbGUobGVuZ3RoID4gaSlkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHBzLmpzXG4vLyBtb2R1bGUgaWQgPSAxMTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHBJRSAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpXG4gICwgY3JlYXRlRGVzYyAgICAgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJylcbiAgLCB0b0lPYmplY3QgICAgICA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIHRvUHJpbWl0aXZlICAgID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJylcbiAgLCBoYXMgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpXG4gICwgZ09QRCAgICAgICAgICAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKXtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZihJRThfRE9NX0RFRklORSl0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoKGUpeyAvKiBlbXB0eSAqLyB9XG4gIGlmKGhhcyhPLCBQKSlyZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanNcbi8vIG1vZHVsZSBpZCA9IDExN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpXG4gICwgZ09QTiAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mXG4gICwgdG9TdHJpbmcgID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbihpdCl7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGdPUE4oaXQpO1xuICB9IGNhdGNoKGUpe1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCl7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiB0b1N0cmluZy5jYWxsKGl0KSA9PSAnW29iamVjdCBXaW5kb3ddJyA/IGdldFdpbmRvd05hbWVzKGl0KSA6IGdPUE4odG9JT2JqZWN0KGl0KSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanNcbi8vIG1vZHVsZSBpZCA9IDExOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyAxOS4xLjIuOSAvIDE1LjIuMy4yIE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIGhhcyAgICAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCB0b09iamVjdCAgICA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpXG4gICwgSUVfUFJPVE8gICAgPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJylcbiAgLCBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uKE8pe1xuICBPID0gdG9PYmplY3QoTyk7XG4gIGlmKGhhcyhPLCBJRV9QUk9UTykpcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZih0eXBlb2YgTy5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIE8gaW5zdGFuY2VvZiBPLmNvbnN0cnVjdG9yKXtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdwby5qc1xuLy8gbW9kdWxlIGlkID0gMTE5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIGNvcmUgICAgPSByZXF1aXJlKCcuL19jb3JlJylcbiAgLCBmYWlscyAgID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oS0VZLCBleGVjKXtcbiAgdmFyIGZuICA9IChjb3JlLk9iamVjdCB8fCB7fSlbS0VZXSB8fCBPYmplY3RbS0VZXVxuICAgICwgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24oKXsgZm4oMSk7IH0pLCAnT2JqZWN0JywgZXhwKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qtc2FwLmpzXG4vLyBtb2R1bGUgaWQgPSAxMjBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHRhcmdldCwgc3JjLCBzYWZlKXtcbiAgZm9yKHZhciBrZXkgaW4gc3JjKXtcbiAgICBpZihzYWZlICYmIHRhcmdldFtrZXldKXRhcmdldFtrZXldID0gc3JjW2tleV07XG4gICAgZWxzZSBoaWRlKHRhcmdldCwga2V5LCBzcmNba2V5XSk7XG4gIH0gcmV0dXJuIHRhcmdldDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19yZWRlZmluZS1hbGwuanNcbi8vIG1vZHVsZSBpZCA9IDEyMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGNvcmUgICAgICAgID0gcmVxdWlyZSgnLi9fY29yZScpXG4gICwgZFAgICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKVxuICAsIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKVxuICAsIFNQRUNJRVMgICAgID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihLRVkpe1xuICB2YXIgQyA9IHR5cGVvZiBjb3JlW0tFWV0gPT0gJ2Z1bmN0aW9uJyA/IGNvcmVbS0VZXSA6IGdsb2JhbFtLRVldO1xuICBpZihERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKWRQLmYoQywgU1BFQ0lFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC1zcGVjaWVzLmpzXG4vLyBtb2R1bGUgaWQgPSAxMjJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJylcbiAgLCBTUEVDSUVTICAgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihPLCBEKXtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvciwgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBEIDogYUZ1bmN0aW9uKFMpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanNcbi8vIG1vZHVsZSBpZCA9IDEyM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpXG4gICwgZGVmaW5lZCAgID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuLy8gdHJ1ZSAgLT4gU3RyaW5nI2F0XG4vLyBmYWxzZSAtPiBTdHJpbmcjY29kZVBvaW50QXRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oVE9fU1RSSU5HKXtcbiAgcmV0dXJuIGZ1bmN0aW9uKHRoYXQsIHBvcyl7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSlcbiAgICAgICwgaSA9IHRvSW50ZWdlcihwb3MpXG4gICAgICAsIGwgPSBzLmxlbmd0aFxuICAgICAgLCBhLCBiO1xuICAgIGlmKGkgPCAwIHx8IGkgPj0gbClyZXR1cm4gVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgYSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICByZXR1cm4gYSA8IDB4ZDgwMCB8fCBhID4gMHhkYmZmIHx8IGkgKyAxID09PSBsIHx8IChiID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgYiA+IDB4ZGZmZlxuICAgICAgPyBUT19TVFJJTkcgPyBzLmNoYXJBdChpKSA6IGFcbiAgICAgIDogVE9fU1RSSU5HID8gcy5zbGljZShpLCBpICsgMikgOiAoYSAtIDB4ZDgwMCA8PCAxMCkgKyAoYiAtIDB4ZGMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3N0cmluZy1hdC5qc1xuLy8gbW9kdWxlIGlkID0gMTI0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJylcbiAgLCBtYXggICAgICAgPSBNYXRoLm1heFxuICAsIG1pbiAgICAgICA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpbmRleCwgbGVuZ3RoKXtcbiAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMTI1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgZ2V0ICAgICAgPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3IgPSBmdW5jdGlvbihpdCl7XG4gIHZhciBpdGVyRm4gPSBnZXQoaXQpO1xuICBpZih0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIHJldHVybiBhbk9iamVjdChpdGVyRm4uY2FsbChpdCkpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3IuanNcbi8vIG1vZHVsZSBpZCA9IDEyNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgY2xhc3NvZiAgID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpXG4gICwgSVRFUkFUT1IgID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJylcbiAgLCBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmlzSXRlcmFibGUgPSBmdW5jdGlvbihpdCl7XG4gIHZhciBPID0gT2JqZWN0KGl0KTtcbiAgcmV0dXJuIE9bSVRFUkFUT1JdICE9PSB1bmRlZmluZWRcbiAgICB8fCAnQEBpdGVyYXRvcicgaW4gT1xuICAgIHx8IEl0ZXJhdG9ycy5oYXNPd25Qcm9wZXJ0eShjbGFzc29mKE8pKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2NvcmUuaXMtaXRlcmFibGUuanNcbi8vIG1vZHVsZSBpZCA9IDEyN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG52YXIgY3R4ICAgICAgICAgICAgPSByZXF1aXJlKCcuL19jdHgnKVxuICAsICRleHBvcnQgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCB0b09iamVjdCAgICAgICA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpXG4gICwgY2FsbCAgICAgICAgICAgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKVxuICAsIGlzQXJyYXlJdGVyICAgID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpXG4gICwgdG9MZW5ndGggICAgICAgPSByZXF1aXJlKCcuL190by1sZW5ndGgnKVxuICAsIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5JylcbiAgLCBnZXRJdGVyRm4gICAgICA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24oaXRlcil7IEFycmF5LmZyb20oaXRlcik7IH0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4xIEFycmF5LmZyb20oYXJyYXlMaWtlLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UvKiwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQqLyl7XG4gICAgdmFyIE8gICAgICAgPSB0b09iamVjdChhcnJheUxpa2UpXG4gICAgICAsIEMgICAgICAgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5XG4gICAgICAsIGFMZW4gICAgPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgICAsIG1hcGZuICAgPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZFxuICAgICAgLCBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZFxuICAgICAgLCBpbmRleCAgID0gMFxuICAgICAgLCBpdGVyRm4gID0gZ2V0SXRlckZuKE8pXG4gICAgICAsIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZihtYXBwaW5nKW1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXIoaXRlckZuKSkpe1xuICAgICAgZm9yKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4Kyspe1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvcihyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKyl7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5LmZyb20uanNcbi8vIG1vZHVsZSBpZCA9IDEyOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpXG4gICwgc3RlcCAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpXG4gICwgSXRlcmF0b3JzICAgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpXG4gICwgdG9JT2JqZWN0ICAgICAgICA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbihpdGVyYXRlZCwga2luZCl7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24oKXtcbiAgdmFyIE8gICAgID0gdGhpcy5fdFxuICAgICwga2luZCAgPSB0aGlzLl9rXG4gICAgLCBpbmRleCA9IHRoaXMuX2krKztcbiAgaWYoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpe1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYoa2luZCA9PSAna2V5cycgIClyZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmKGtpbmQgPT0gJ3ZhbHVlcycpcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanNcbi8vIG1vZHVsZSBpZCA9IDEyOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyAyMC4yLjIuMjIgTWF0aC5sb2cyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCl7XG4gICAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYubWF0aC5sb2cyLmpzXG4vLyBtb2R1bGUgaWQgPSAxMzBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0Jywge2Fzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpfSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzXG4vLyBtb2R1bGUgaWQgPSAxMzFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKVxuICAsICRrZXlzICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24oKXtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpe1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qc1xuLy8gbW9kdWxlIGlkID0gMTMyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZICAgICAgICAgICAgPSByZXF1aXJlKCcuL19saWJyYXJ5JylcbiAgLCBnbG9iYWwgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGN0eCAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2N0eCcpXG4gICwgY2xhc3NvZiAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpXG4gICwgJGV4cG9ydCAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCBpc09iamVjdCAgICAgICAgICAgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIGFGdW5jdGlvbiAgICAgICAgICA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKVxuICAsIGFuSW5zdGFuY2UgICAgICAgICA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJylcbiAgLCBmb3JPZiAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19mb3Itb2YnKVxuICAsIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKVxuICAsIHRhc2sgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXRcbiAgLCBtaWNyb3Rhc2sgICAgICAgICAgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpXG4gICwgUFJPTUlTRSAgICAgICAgICAgID0gJ1Byb21pc2UnXG4gICwgVHlwZUVycm9yICAgICAgICAgID0gZ2xvYmFsLlR5cGVFcnJvclxuICAsIHByb2Nlc3MgICAgICAgICAgICA9IGdsb2JhbC5wcm9jZXNzXG4gICwgJFByb21pc2UgICAgICAgICAgID0gZ2xvYmFsW1BST01JU0VdXG4gICwgcHJvY2VzcyAgICAgICAgICAgID0gZ2xvYmFsLnByb2Nlc3NcbiAgLCBpc05vZGUgICAgICAgICAgICAgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJ1xuICAsIGVtcHR5ICAgICAgICAgICAgICA9IGZ1bmN0aW9uKCl7IC8qIGVtcHR5ICovIH1cbiAgLCBJbnRlcm5hbCwgR2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBXcmFwcGVyO1xuXG52YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24oKXtcbiAgdHJ5IHtcbiAgICAvLyBjb3JyZWN0IHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgICB2YXIgcHJvbWlzZSAgICAgPSAkUHJvbWlzZS5yZXNvbHZlKDEpXG4gICAgICAsIEZha2VQcm9taXNlID0gKHByb21pc2UuY29uc3RydWN0b3IgPSB7fSlbcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKV0gPSBmdW5jdGlvbihleGVjKXsgZXhlYyhlbXB0eSwgZW1wdHkpOyB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpICYmIHByb21pc2UudGhlbihlbXB0eSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZTtcbiAgfSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxufSgpO1xuXG4vLyBoZWxwZXJzXG52YXIgc2FtZUNvbnN0cnVjdG9yID0gZnVuY3Rpb24oYSwgYil7XG4gIC8vIHdpdGggbGlicmFyeSB3cmFwcGVyIHNwZWNpYWwgY2FzZVxuICByZXR1cm4gYSA9PT0gYiB8fCBhID09PSAkUHJvbWlzZSAmJiBiID09PSBXcmFwcGVyO1xufTtcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24oaXQpe1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xufTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uKEMpe1xuICByZXR1cm4gc2FtZUNvbnN0cnVjdG9yKCRQcm9taXNlLCBDKVxuICAgID8gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgOiBuZXcgR2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IEdlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uKEMpe1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbigkJHJlc29sdmUsICQkcmVqZWN0KXtcbiAgICBpZihyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ICA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCAgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn07XG52YXIgcGVyZm9ybSA9IGZ1bmN0aW9uKGV4ZWMpe1xuICB0cnkge1xuICAgIGV4ZWMoKTtcbiAgfSBjYXRjaChlKXtcbiAgICByZXR1cm4ge2Vycm9yOiBlfTtcbiAgfVxufTtcbnZhciBub3RpZnkgPSBmdW5jdGlvbihwcm9taXNlLCBpc1JlamVjdCl7XG4gIGlmKHByb21pc2UuX24pcmV0dXJuO1xuICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgbWljcm90YXNrKGZ1bmN0aW9uKCl7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdlxuICAgICAgLCBvayAgICA9IHByb21pc2UuX3MgPT0gMVxuICAgICAgLCBpICAgICA9IDA7XG4gICAgdmFyIHJ1biA9IGZ1bmN0aW9uKHJlYWN0aW9uKXtcbiAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWxcbiAgICAgICAgLCByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZVxuICAgICAgICAsIHJlamVjdCAgPSByZWFjdGlvbi5yZWplY3RcbiAgICAgICAgLCBkb21haW4gID0gcmVhY3Rpb24uZG9tYWluXG4gICAgICAgICwgcmVzdWx0LCB0aGVuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYoaGFuZGxlcil7XG4gICAgICAgICAgaWYoIW9rKXtcbiAgICAgICAgICAgIGlmKHByb21pc2UuX2ggPT0gMilvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihoYW5kbGVyID09PSB0cnVlKXJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYoZG9tYWluKWRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7XG4gICAgICAgICAgICBpZihkb21haW4pZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKXtcbiAgICAgICAgICAgIHJlamVjdChUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICAgICAgfSBlbHNlIGlmKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpe1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdoaWxlKGNoYWluLmxlbmd0aCA+IGkpcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYoaXNSZWplY3QgJiYgIXByb21pc2UuX2gpb25VbmhhbmRsZWQocHJvbWlzZSk7XG4gIH0pO1xufTtcbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uKHByb21pc2Upe1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbigpe1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3ZcbiAgICAgICwgYWJydXB0LCBoYW5kbGVyLCBjb25zb2xlO1xuICAgIGlmKGlzVW5oYW5kbGVkKHByb21pc2UpKXtcbiAgICAgIGFicnVwdCA9IHBlcmZvcm0oZnVuY3Rpb24oKXtcbiAgICAgICAgaWYoaXNOb2RlKXtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmKGhhbmRsZXIgPSBnbG9iYWwub251bmhhbmRsZWRyZWplY3Rpb24pe1xuICAgICAgICAgIGhhbmRsZXIoe3Byb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWV9KTtcbiAgICAgICAgfSBlbHNlIGlmKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3Ipe1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZihhYnJ1cHQpdGhyb3cgYWJydXB0LmVycm9yO1xuICB9KTtcbn07XG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbihwcm9taXNlKXtcbiAgaWYocHJvbWlzZS5faCA9PSAxKXJldHVybiBmYWxzZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYSB8fCBwcm9taXNlLl9jXG4gICAgLCBpICAgICA9IDBcbiAgICAsIHJlYWN0aW9uO1xuICB3aGlsZShjaGFpbi5sZW5ndGggPiBpKXtcbiAgICByZWFjdGlvbiA9IGNoYWluW2krK107XG4gICAgaWYocmVhY3Rpb24uZmFpbCB8fCAhaXNVbmhhbmRsZWQocmVhY3Rpb24ucHJvbWlzZSkpcmV0dXJuIGZhbHNlO1xuICB9IHJldHVybiB0cnVlO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uKHByb21pc2Upe1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbigpe1xuICAgIHZhciBoYW5kbGVyO1xuICAgIGlmKGlzTm9kZSl7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYoaGFuZGxlciA9IGdsb2JhbC5vbnJlamVjdGlvbmhhbmRsZWQpe1xuICAgICAgaGFuZGxlcih7cHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92fSk7XG4gICAgfVxuICB9KTtcbn07XG52YXIgJHJlamVjdCA9IGZ1bmN0aW9uKHZhbHVlKXtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZihwcm9taXNlLl9kKXJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICBwcm9taXNlLl92ID0gdmFsdWU7XG4gIHByb21pc2UuX3MgPSAyO1xuICBpZighcHJvbWlzZS5fYSlwcm9taXNlLl9hID0gcHJvbWlzZS5fYy5zbGljZSgpO1xuICBub3RpZnkocHJvbWlzZSwgdHJ1ZSk7XG59O1xudmFyICRyZXNvbHZlID0gZnVuY3Rpb24odmFsdWUpe1xuICB2YXIgcHJvbWlzZSA9IHRoaXNcbiAgICAsIHRoZW47XG4gIGlmKHByb21pc2UuX2QpcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYocHJvbWlzZSA9PT0gdmFsdWUpdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgaWYodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKXtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbigpe1xuICAgICAgICB2YXIgd3JhcHBlciA9IHtfdzogcHJvbWlzZSwgX2Q6IGZhbHNlfTsgLy8gd3JhcFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgY3R4KCRyZXNvbHZlLCB3cmFwcGVyLCAxKSwgY3R4KCRyZWplY3QsIHdyYXBwZXIsIDEpKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAkcmVqZWN0LmNhbGwod3JhcHBlciwgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9taXNlLl92ID0gdmFsdWU7XG4gICAgICBwcm9taXNlLl9zID0gMTtcbiAgICAgIG5vdGlmeShwcm9taXNlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoKGUpe1xuICAgICRyZWplY3QuY2FsbCh7X3c6IHByb21pc2UsIF9kOiBmYWxzZX0sIGUpOyAvLyB3cmFwXG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZighVVNFX05BVElWRSl7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gICRQcm9taXNlID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcil7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkUHJvbWlzZSwgUFJPTUlTRSwgJ19oJyk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHRoaXMsIDEpLCBjdHgoJHJlamVjdCwgdGhpcywgMSkpO1xuICAgIH0gY2F0Y2goZXJyKXtcbiAgICAgICRyZWplY3QuY2FsbCh0aGlzLCBlcnIpO1xuICAgIH1cbiAgfTtcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKXtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpe1xuICAgICAgdmFyIHJlYWN0aW9uICAgID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRQcm9taXNlKSk7XG4gICAgICByZWFjdGlvbi5vayAgICAgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgICA9IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgJiYgb25SZWplY3RlZDtcbiAgICAgIHJlYWN0aW9uLmRvbWFpbiA9IGlzTm9kZSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fYy5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmKHRoaXMuX2EpdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmKHRoaXMuX3Mpbm90aWZ5KHRoaXMsIGZhbHNlKTtcbiAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICAgIH0sXG4gICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbihvblJlamVjdGVkKXtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xuICBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uKCl7XG4gICAgdmFyIHByb21pc2UgID0gbmV3IEludGVybmFsO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gY3R4KCRyZXNvbHZlLCBwcm9taXNlLCAxKTtcbiAgICB0aGlzLnJlamVjdCAgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHtQcm9taXNlOiAkUHJvbWlzZX0pO1xucmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKSgkUHJvbWlzZSwgUFJPTUlTRSk7XG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKFBST01JU0UpO1xuV3JhcHBlciA9IHJlcXVpcmUoJy4vX2NvcmUnKVtQUk9NSVNFXTtcblxuLy8gc3RhdGljc1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNSBQcm9taXNlLnJlamVjdChyKVxuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKXtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpXG4gICAgICAsICQkcmVqZWN0ICAgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICAkJHJlamVjdChyKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKExJQlJBUlkgfHwgIVVTRV9OQVRJVkUpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC42IFByb21pc2UucmVzb2x2ZSh4KVxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpe1xuICAgIC8vIGluc3RhbmNlb2YgaW5zdGVhZCBvZiBpbnRlcm5hbCBzbG90IGNoZWNrIGJlY2F1c2Ugd2Ugc2hvdWxkIGZpeCBpdCB3aXRob3V0IHJlcGxhY2VtZW50IG5hdGl2ZSBQcm9taXNlIGNvcmVcbiAgICBpZih4IGluc3RhbmNlb2YgJFByb21pc2UgJiYgc2FtZUNvbnN0cnVjdG9yKHguY29uc3RydWN0b3IsIHRoaXMpKXJldHVybiB4O1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcylcbiAgICAgICwgJCRyZXNvbHZlICA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICAkJHJlc29sdmUoeCk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoVVNFX05BVElWRSAmJiByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uKGl0ZXIpe1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSl7XG4gICAgdmFyIEMgICAgICAgICAgPSB0aGlzXG4gICAgICAsIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgLCByZXNvbHZlICAgID0gY2FwYWJpbGl0eS5yZXNvbHZlXG4gICAgICAsIHJlamVjdCAgICAgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgYWJydXB0ID0gcGVyZm9ybShmdW5jdGlvbigpe1xuICAgICAgdmFyIHZhbHVlcyAgICA9IFtdXG4gICAgICAgICwgaW5kZXggICAgID0gMFxuICAgICAgICAsIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uKHByb21pc2Upe1xuICAgICAgICB2YXIgJGluZGV4ICAgICAgICA9IGluZGV4KytcbiAgICAgICAgICAsIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgICAgICBpZihhbHJlYWR5Q2FsbGVkKXJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkICA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZihhYnJ1cHQpcmVqZWN0KGFicnVwdC5lcnJvcik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKXtcbiAgICB2YXIgQyAgICAgICAgICA9IHRoaXNcbiAgICAgICwgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICAsIHJlamVjdCAgICAgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgYWJydXB0ID0gcGVyZm9ybShmdW5jdGlvbigpe1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbihwcm9taXNlKXtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYoYWJydXB0KXJlamVjdChhYnJ1cHQuZXJyb3IpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYucHJvbWlzZS5qc1xuLy8gbW9kdWxlIGlkID0gMTMzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgICAgICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgaGFzICAgICAgICAgICAgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIERFU0NSSVBUT1JTICAgID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKVxuICAsICRleHBvcnQgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCByZWRlZmluZSAgICAgICA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJylcbiAgLCBNRVRBICAgICAgICAgICA9IHJlcXVpcmUoJy4vX21ldGEnKS5LRVlcbiAgLCAkZmFpbHMgICAgICAgICA9IHJlcXVpcmUoJy4vX2ZhaWxzJylcbiAgLCBzaGFyZWQgICAgICAgICA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpXG4gICwgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpXG4gICwgdWlkICAgICAgICAgICAgPSByZXF1aXJlKCcuL191aWQnKVxuICAsIHdrcyAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fd2tzJylcbiAgLCB3a3NFeHQgICAgICAgICA9IHJlcXVpcmUoJy4vX3drcy1leHQnKVxuICAsIHdrc0RlZmluZSAgICAgID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpXG4gICwga2V5T2YgICAgICAgICAgPSByZXF1aXJlKCcuL19rZXlvZicpXG4gICwgZW51bUtleXMgICAgICAgPSByZXF1aXJlKCcuL19lbnVtLWtleXMnKVxuICAsIGlzQXJyYXkgICAgICAgID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKVxuICAsIGFuT2JqZWN0ICAgICAgID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCB0b0lPYmplY3QgICAgICA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIHRvUHJpbWl0aXZlICAgID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJylcbiAgLCBjcmVhdGVEZXNjICAgICA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKVxuICAsIF9jcmVhdGUgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpXG4gICwgZ09QTkV4dCAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKVxuICAsICRHT1BEICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKVxuICAsICREUCAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJylcbiAgLCAka2V5cyAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJylcbiAgLCBnT1BEICAgICAgICAgICA9ICRHT1BELmZcbiAgLCBkUCAgICAgICAgICAgICA9ICREUC5mXG4gICwgZ09QTiAgICAgICAgICAgPSBnT1BORXh0LmZcbiAgLCAkU3ltYm9sICAgICAgICA9IGdsb2JhbC5TeW1ib2xcbiAgLCAkSlNPTiAgICAgICAgICA9IGdsb2JhbC5KU09OXG4gICwgX3N0cmluZ2lmeSAgICAgPSAkSlNPTiAmJiAkSlNPTi5zdHJpbmdpZnlcbiAgLCBQUk9UT1RZUEUgICAgICA9ICdwcm90b3R5cGUnXG4gICwgSElEREVOICAgICAgICAgPSB3a3MoJ19oaWRkZW4nKVxuICAsIFRPX1BSSU1JVElWRSAgID0gd2tzKCd0b1ByaW1pdGl2ZScpXG4gICwgaXNFbnVtICAgICAgICAgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZVxuICAsIFN5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtcmVnaXN0cnknKVxuICAsIEFsbFN5bWJvbHMgICAgID0gc2hhcmVkKCdzeW1ib2xzJylcbiAgLCBPUFN5bWJvbHMgICAgICA9IHNoYXJlZCgnb3Atc3ltYm9scycpXG4gICwgT2JqZWN0UHJvdG8gICAgPSBPYmplY3RbUFJPVE9UWVBFXVxuICAsIFVTRV9OQVRJVkUgICAgID0gdHlwZW9mICRTeW1ib2wgPT0gJ2Z1bmN0aW9uJ1xuICAsIFFPYmplY3QgICAgICAgID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBfY3JlYXRlKGRQKHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiBkUCh0aGlzLCAnYScsIHt2YWx1ZTogN30pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24oaXQsIGtleSwgRCl7XG4gIHZhciBwcm90b0Rlc2MgPSBnT1BEKE9iamVjdFByb3RvLCBrZXkpO1xuICBpZihwcm90b0Rlc2MpZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZihwcm90b0Rlc2MgJiYgaXQgIT09IE9iamVjdFByb3RvKWRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24odGFnKXtcbiAgdmFyIHN5bSA9IEFsbFN5bWJvbHNbdGFnXSA9IF9jcmVhdGUoJFN5bWJvbFtQUk9UT1RZUEVdKTtcbiAgc3ltLl9rID0gdGFnO1xuICByZXR1cm4gc3ltO1xufTtcblxudmFyIGlzU3ltYm9sID0gVVNFX05BVElWRSAmJiB0eXBlb2YgJFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJyA/IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCl7XG4gIGlmKGl0ID09PSBPYmplY3RQcm90bykkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZihoYXMoQWxsU3ltYm9scywga2V5KSl7XG4gICAgaWYoIUQuZW51bWVyYWJsZSl7XG4gICAgICBpZighaGFzKGl0LCBISURERU4pKWRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0paXRbSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBEID0gX2NyZWF0ZShELCB7ZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSl9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKXtcbiAgYW5PYmplY3QoaXQpO1xuICB2YXIga2V5cyA9IGVudW1LZXlzKFAgPSB0b0lPYmplY3QoUCkpXG4gICAgLCBpICAgID0gMFxuICAgICwgbCA9IGtleXMubGVuZ3RoXG4gICAgLCBrZXk7XG4gIHdoaWxlKGwgPiBpKSRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApe1xuICByZXR1cm4gUCA9PT0gdW5kZWZpbmVkID8gX2NyZWF0ZShpdCkgOiAkZGVmaW5lUHJvcGVydGllcyhfY3JlYXRlKGl0KSwgUCk7XG59O1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKGtleSl7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKXJldHVybiBmYWxzZTtcbiAgcmV0dXJuIEUgfHwgIWhhcyh0aGlzLCBrZXkpIHx8ICFoYXMoQWxsU3ltYm9scywga2V5KSB8fCBoYXModGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1ba2V5XSA/IEUgOiB0cnVlO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpe1xuICBpdCAgPSB0b0lPYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBpZihpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmKEQgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSlELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KXtcbiAgdmFyIG5hbWVzICA9IGdPUE4odG9JT2JqZWN0KGl0KSlcbiAgICAsIHJlc3VsdCA9IFtdXG4gICAgLCBpICAgICAgPSAwXG4gICAgLCBrZXk7XG4gIHdoaWxlKG5hbWVzLmxlbmd0aCA+IGkpe1xuICAgIGlmKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSlyZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpe1xuICB2YXIgSVNfT1AgID0gaXQgPT09IE9iamVjdFByb3RvXG4gICAgLCBuYW1lcyAgPSBnT1BOKElTX09QID8gT1BTeW1ib2xzIDogdG9JT2JqZWN0KGl0KSlcbiAgICAsIHJlc3VsdCA9IFtdXG4gICAgLCBpICAgICAgPSAwXG4gICAgLCBrZXk7XG4gIHdoaWxlKG5hbWVzLmxlbmd0aCA+IGkpe1xuICAgIGlmKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSlyZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmKCFVU0VfTkFUSVZFKXtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpe1xuICAgIGlmKHRoaXMgaW5zdGFuY2VvZiAkU3ltYm9sKXRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24odmFsdWUpe1xuICAgICAgaWYodGhpcyA9PT0gT2JqZWN0UHJvdG8pJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYoaGFzKHRoaXMsIEhJRERFTikgJiYgaGFzKHRoaXNbSElEREVOXSwgdGFnKSl0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmKERFU0NSSVBUT1JTICYmIHNldHRlcilzZXRTeW1ib2xEZXNjKE9iamVjdFByb3RvLCB0YWcsIHtjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKXtcbiAgICByZXR1cm4gdGhpcy5faztcbiAgfSk7XG5cbiAgJEdPUEQuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gICREUC5mICAgPSAkZGVmaW5lUHJvcGVydHk7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZiAgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJykuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSl7XG4gICAgcmVkZWZpbmUoT2JqZWN0UHJvdG8sICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgdHJ1ZSk7XG4gIH1cblxuICB3a3NFeHQuZiA9IGZ1bmN0aW9uKG5hbWUpe1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH1cbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwge1N5bWJvbDogJFN5bWJvbH0pO1xuXG5mb3IodmFyIHN5bWJvbHMgPSAoXG4gIC8vIDE5LjQuMi4yLCAxOS40LjIuMywgMTkuNC4yLjQsIDE5LjQuMi42LCAxOS40LjIuOCwgMTkuNC4yLjksIDE5LjQuMi4xMCwgMTkuNC4yLjExLCAxOS40LjIuMTIsIDE5LjQuMi4xMywgMTkuNC4yLjE0XG4gICdoYXNJbnN0YW5jZSxpc0NvbmNhdFNwcmVhZGFibGUsaXRlcmF0b3IsbWF0Y2gscmVwbGFjZSxzZWFyY2gsc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlcydcbikuc3BsaXQoJywnKSwgaSA9IDA7IHN5bWJvbHMubGVuZ3RoID4gaTsgKXdrcyhzeW1ib2xzW2krK10pO1xuXG5mb3IodmFyIHN5bWJvbHMgPSAka2V5cyh3a3Muc3RvcmUpLCBpID0gMDsgc3ltYm9scy5sZW5ndGggPiBpOyApd2tzRGVmaW5lKHN5bWJvbHNbaSsrXSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdTeW1ib2wnLCB7XG4gIC8vIDE5LjQuMi4xIFN5bWJvbC5mb3Ioa2V5KVxuICAnZm9yJzogZnVuY3Rpb24oa2V5KXtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKGtleSl7XG4gICAgaWYoaXNTeW1ib2woa2V5KSlyZXR1cm4ga2V5T2YoU3ltYm9sUmVnaXN0cnksIGtleSk7XG4gICAgdGhyb3cgVHlwZUVycm9yKGtleSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICB9LFxuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uKCl7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24oKXsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gMjQuMy4yIEpTT04uc3RyaW5naWZ5KHZhbHVlIFssIHJlcGxhY2VyIFssIHNwYWNlXV0pXG4kSlNPTiAmJiAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghVVNFX05BVElWRSB8fCAkZmFpbHMoZnVuY3Rpb24oKXtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoe2E6IFN9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpe1xuICAgIGlmKGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKXJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIHZhciBhcmdzID0gW2l0XVxuICAgICAgLCBpICAgID0gMVxuICAgICAgLCByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlKGFyZ3VtZW50cy5sZW5ndGggPiBpKWFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgcmVwbGFjZXIgPSBhcmdzWzFdO1xuICAgIGlmKHR5cGVvZiByZXBsYWNlciA9PSAnZnVuY3Rpb24nKSRyZXBsYWNlciA9IHJlcGxhY2VyO1xuICAgIGlmKCRyZXBsYWNlciB8fCAhaXNBcnJheShyZXBsYWNlcikpcmVwbGFjZXIgPSBmdW5jdGlvbihrZXksIHZhbHVlKXtcbiAgICAgIGlmKCRyZXBsYWNlcil2YWx1ZSA9ICRyZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgaWYoIWlzU3ltYm9sKHZhbHVlKSlyZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3ltYm9sLmpzXG4vLyBtb2R1bGUgaWQgPSAxMzRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdhc3luY0l0ZXJhdG9yJyk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanNcbi8vIG1vZHVsZSBpZCA9IDEzNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ29ic2VydmFibGUnKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlLmpzXG4vLyBtb2R1bGUgaWQgPSAxMzZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAyLjMuMVxuLy8gIyBDU1YgUGFyc2VyXG5cbi8vIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgQ1NWIHBhcnNlciB0ZXN0ZWQgYW5kIHVzZWQgYWdhaW5zdCBsYXJnZSBkYXRhc2V0cy4gT3ZlclxuLy8gdGhlIHllYXIsIGl0IGhhcyBiZWVuIGVuaGFuY2UgYW5kIGlzIG5vdyBmdWxsIG9mIHVzZWZ1bCBvcHRpb25zLlxuXG4vLyBQbGVhc2UgbG9vayBhdCB0aGUgW1JFQURNRV0sIHRoZSBbcHJvamVjdCB3ZWJzaXRlXVtzaXRlXSB0aGUgW3NhbXBsZXNdIGFuZCB0aGVcbi8vIFt0ZXN0c10gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uXG52YXIgUGFyc2VyLCBTdHJpbmdEZWNvZGVyLCBpc09iakxpdGVyYWwsIHN0cmVhbSwgdXRpbDtcblxuc3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG5cbnV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cblN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpLlN0cmluZ0RlY29kZXI7XG5cbi8vICMjIFVzYWdlXG5cbi8vIENhbGxiYWNrIGFwcHJvYWNoLCBmb3IgZWFzZSBvZiB1c2U6ICAgXG5cbi8vIGBwYXJzZShkYXRhLCBbb3B0aW9uc10sIGNhbGxiYWNrKWAgICAgIFxuXG4vLyBbTm9kZS5qcyBTdHJlYW0gQVBJXVtzdHJlYW1dLCBmb3IgbWF4aW11bSBvZiBwb3dlcjogICBcblxuLy8gYHBhcnNlKFtvcHRpb25zXSwgW2NhbGxiYWNrXSlgICAgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgY2FsbGJhY2ssIGNhbGxlZCwgY2h1bmtzLCBkYXRhLCBlcnIsIG9wdGlvbnMsIHBhcnNlcjtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBkYXRhID0gYXJndW1lbnRzWzBdO1xuICAgIG9wdGlvbnMgPSBhcmd1bWVudHNbMV07XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMl07XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgY2FsbGJhY2sgYXJndW1lbnQ6ICR7SlNPTi5zdHJpbmdpZnkoY2FsbGJhY2spfWApO1xuICAgIH1cbiAgICBpZiAoISh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgfHwgQnVmZmVyLmlzQnVmZmVyKGFyZ3VtZW50c1swXSkpKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soRXJyb3IoYEludmFsaWQgZGF0YSBhcmd1bWVudDogJHtKU09OLnN0cmluZ2lmeShkYXRhKX1gKSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAvLyAxc3QgYXJnIGlzIGRhdGE6c3RyaW5nIG9yIG9wdGlvbnM6b2JqZWN0XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdzdHJpbmcnIHx8IEJ1ZmZlci5pc0J1ZmZlcihhcmd1bWVudHNbMF0pKSB7XG4gICAgICBkYXRhID0gYXJndW1lbnRzWzBdO1xuICAgIH0gZWxzZSBpZiAoaXNPYmpMaXRlcmFsKGFyZ3VtZW50c1swXSkpIHtcbiAgICAgIG9wdGlvbnMgPSBhcmd1bWVudHNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGVyciA9IGBJbnZhbGlkIGZpcnN0IGFyZ3VtZW50OiAke0pTT04uc3RyaW5naWZ5KGFyZ3VtZW50c1swXSl9YDtcbiAgICB9XG4gICAgLy8gMm5kIGFyZyBpcyBvcHRpb25zOm9iamVjdCBvciBjYWxsYmFjazpmdW5jdGlvblxuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgICB9IGVsc2UgaWYgKGlzT2JqTGl0ZXJhbChhcmd1bWVudHNbMV0pKSB7XG4gICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBlcnIgPSAnSW52YWxpZCBhcmd1bWVudHM6IGdvdCBvcHRpb25zIHR3aWNlIGFzIGZpcnN0IGFuZCBzZWNvbmQgYXJndW1lbnRzJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMgPSBhcmd1bWVudHNbMV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVyciA9IGBJbnZhbGlkIGZpcnN0IGFyZ3VtZW50OiAke0pTT04uc3RyaW5naWZ5KGFyZ3VtZW50c1sxXSl9YDtcbiAgICB9XG4gICAgaWYgKGVycikge1xuICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICB0aHJvdyBFcnJvcihlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKEVycm9yKGVycikpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zID0gYXJndW1lbnRzWzBdO1xuICAgIH1cbiAgfVxuICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHBhcnNlciA9IG5ldyBQYXJzZXIob3B0aW9ucyk7XG4gIGlmIChkYXRhICE9IG51bGwpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgcGFyc2VyLndyaXRlKGRhdGEpO1xuICAgICAgcmV0dXJuIHBhcnNlci5lbmQoKTtcbiAgICB9KTtcbiAgfVxuICBpZiAoY2FsbGJhY2spIHtcbiAgICBjYWxsZWQgPSBmYWxzZTtcbiAgICBjaHVua3MgPSBvcHRpb25zLm9iam5hbWUgPyB7fSA6IFtdO1xuICAgIHBhcnNlci5vbigncmVhZGFibGUnLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBjaHVuaywgcmVzdWx0cztcbiAgICAgIHJlc3VsdHMgPSBbXTtcbiAgICAgIHdoaWxlIChjaHVuayA9IHBhcnNlci5yZWFkKCkpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMub2JqbmFtZSkge1xuICAgICAgICAgIHJlc3VsdHMucHVzaChjaHVua3NbY2h1bmtbMF1dID0gY2h1bmtbMV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdHMucHVzaChjaHVua3MucHVzaChjaHVuaykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9KTtcbiAgICBwYXJzZXIub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgfSk7XG4gICAgcGFyc2VyLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBjaHVua3MpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBwYXJzZXI7XG59O1xuXG4vLyAjIyBgUGFyc2VyKFtvcHRpb25zXSlgXG5cbi8vIE9wdGlvbnMgYXJlIGRvY3VtZW50ZWQgW2hlcmVdKGh0dHA6Ly9jc3YuYWRhbHRhcy5jb20vcGFyc2UvKS5cblBhcnNlciA9IGZ1bmN0aW9uKG9wdGlvbnMgPSB7fSkge1xuICB2YXIgYmFzZSwgYmFzZTEsIGJhc2UxMCwgYmFzZTExLCBiYXNlMTIsIGJhc2UxMywgYmFzZTE0LCBiYXNlMTUsIGJhc2UxNiwgYmFzZTE3LCBiYXNlMiwgYmFzZTMsIGJhc2U0LCBiYXNlNSwgYmFzZTYsIGJhc2U3LCBiYXNlOCwgYmFzZTksIGssIHY7XG4gIC8vIEBvcHRpb25zID0gb3B0aW9uc1xuICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgZm9yIChrIGluIG9wdGlvbnMpIHtcbiAgICB2ID0gb3B0aW9uc1trXTtcbiAgICB0aGlzLm9wdGlvbnNba10gPSB2O1xuICB9XG4gIHRoaXMub3B0aW9ucy5vYmplY3RNb2RlID0gdHJ1ZTtcbiAgc3RyZWFtLlRyYW5zZm9ybS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucyk7XG4gIGlmICgoYmFzZSA9IHRoaXMub3B0aW9ucykucm93RGVsaW1pdGVyID09IG51bGwpIHtcbiAgICBiYXNlLnJvd0RlbGltaXRlciA9IG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMucm93RGVsaW1pdGVyID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMub3B0aW9ucy5yb3dEZWxpbWl0ZXIgPSBbdGhpcy5vcHRpb25zLnJvd0RlbGltaXRlcl07XG4gIH1cbiAgaWYgKChiYXNlMSA9IHRoaXMub3B0aW9ucykuZGVsaW1pdGVyID09IG51bGwpIHtcbiAgICBiYXNlMS5kZWxpbWl0ZXIgPSAnLCc7XG4gIH1cbiAgaWYgKHRoaXMub3B0aW9ucy5xdW90ZSAhPT0gdm9pZCAwICYmICF0aGlzLm9wdGlvbnMucXVvdGUpIHtcbiAgICB0aGlzLm9wdGlvbnMucXVvdGUgPSAnJztcbiAgfVxuICBpZiAoKGJhc2UyID0gdGhpcy5vcHRpb25zKS5xdW90ZSA9PSBudWxsKSB7XG4gICAgYmFzZTIucXVvdGUgPSAnXCInO1xuICB9XG4gIGlmICgoYmFzZTMgPSB0aGlzLm9wdGlvbnMpLmVzY2FwZSA9PSBudWxsKSB7XG4gICAgYmFzZTMuZXNjYXBlID0gJ1wiJztcbiAgfVxuICBpZiAoKGJhc2U0ID0gdGhpcy5vcHRpb25zKS5jb2x1bW5zID09IG51bGwpIHtcbiAgICBiYXNlNC5jb2x1bW5zID0gbnVsbDtcbiAgfVxuICBpZiAoKGJhc2U1ID0gdGhpcy5vcHRpb25zKS5jb21tZW50ID09IG51bGwpIHtcbiAgICBiYXNlNS5jb21tZW50ID0gJyc7XG4gIH1cbiAgaWYgKChiYXNlNiA9IHRoaXMub3B0aW9ucykub2JqbmFtZSA9PSBudWxsKSB7XG4gICAgYmFzZTYub2JqbmFtZSA9IGZhbHNlO1xuICB9XG4gIGlmICgoYmFzZTcgPSB0aGlzLm9wdGlvbnMpLnRyaW0gPT0gbnVsbCkge1xuICAgIGJhc2U3LnRyaW0gPSBmYWxzZTtcbiAgfVxuICBpZiAoKGJhc2U4ID0gdGhpcy5vcHRpb25zKS5sdHJpbSA9PSBudWxsKSB7XG4gICAgYmFzZTgubHRyaW0gPSBmYWxzZTtcbiAgfVxuICBpZiAoKGJhc2U5ID0gdGhpcy5vcHRpb25zKS5ydHJpbSA9PSBudWxsKSB7XG4gICAgYmFzZTkucnRyaW0gPSBmYWxzZTtcbiAgfVxuICBpZiAodGhpcy5vcHRpb25zLmF1dG9fcGFyc2UgIT0gbnVsbCkge1xuICAgIHRoaXMub3B0aW9ucy5jYXN0ID0gdGhpcy5vcHRpb25zLmF1dG9fcGFyc2U7XG4gIH1cbiAgaWYgKChiYXNlMTAgPSB0aGlzLm9wdGlvbnMpLmNhc3QgPT0gbnVsbCkge1xuICAgIGJhc2UxMC5jYXN0ID0gZmFsc2U7XG4gIH1cbiAgaWYgKHRoaXMub3B0aW9ucy5hdXRvX3BhcnNlX2RhdGUgIT0gbnVsbCkge1xuICAgIHRoaXMub3B0aW9ucy5jYXN0X2RhdGUgPSB0aGlzLm9wdGlvbnMuYXV0b19wYXJzZV9kYXRlO1xuICB9XG4gIGlmICgoYmFzZTExID0gdGhpcy5vcHRpb25zKS5jYXN0X2RhdGUgPT0gbnVsbCkge1xuICAgIGJhc2UxMS5jYXN0X2RhdGUgPSBmYWxzZTtcbiAgfVxuICBpZiAodGhpcy5vcHRpb25zLmNhc3RfZGF0ZSA9PT0gdHJ1ZSkge1xuICAgIHRoaXMub3B0aW9ucy5jYXN0X2RhdGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIG07XG4gICAgICBtID0gRGF0ZS5wYXJzZSh2YWx1ZSk7XG4gICAgICBpZiAoIWlzTmFOKG0pKSB7XG4gICAgICAgIHZhbHVlID0gbmV3IERhdGUobSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgfVxuICBpZiAoKGJhc2UxMiA9IHRoaXMub3B0aW9ucykucmVsYXggPT0gbnVsbCkge1xuICAgIGJhc2UxMi5yZWxheCA9IGZhbHNlO1xuICB9XG4gIGlmICgoYmFzZTEzID0gdGhpcy5vcHRpb25zKS5yZWxheF9jb2x1bW5fY291bnQgPT0gbnVsbCkge1xuICAgIGJhc2UxMy5yZWxheF9jb2x1bW5fY291bnQgPSBmYWxzZTtcbiAgfVxuICBpZiAoKGJhc2UxNCA9IHRoaXMub3B0aW9ucykuc2tpcF9lbXB0eV9saW5lcyA9PSBudWxsKSB7XG4gICAgYmFzZTE0LnNraXBfZW1wdHlfbGluZXMgPSBmYWxzZTtcbiAgfVxuICBpZiAoKGJhc2UxNSA9IHRoaXMub3B0aW9ucykubWF4X2xpbWl0X29uX2RhdGFfcmVhZCA9PSBudWxsKSB7XG4gICAgYmFzZTE1Lm1heF9saW1pdF9vbl9kYXRhX3JlYWQgPSAxMjgwMDA7XG4gIH1cbiAgaWYgKChiYXNlMTYgPSB0aGlzLm9wdGlvbnMpLnNraXBfbGluZXNfd2l0aF9lbXB0eV92YWx1ZXMgPT0gbnVsbCkge1xuICAgIGJhc2UxNi5za2lwX2xpbmVzX3dpdGhfZW1wdHlfdmFsdWVzID0gZmFsc2U7XG4gIH1cbiAgaWYgKChiYXNlMTcgPSB0aGlzLm9wdGlvbnMpLnNraXBfbGluZXNfd2l0aF9lcnJvciA9PSBudWxsKSB7XG4gICAgYmFzZTE3LnNraXBfbGluZXNfd2l0aF9lcnJvciA9IGZhbHNlO1xuICB9XG4gIC8vIENvdW50ZXJzXG4gIC8vIGxpbmVzID0gY291bnQgKyBza2lwcGVkX2xpbmVfY291bnQgKyBlbXB0eV9saW5lX2NvdW50XG4gIHRoaXMubGluZXMgPSAwOyAvLyBOdW1iZXIgb2YgbGluZXMgZW5jb3VudGVyZWQgaW4gdGhlIHNvdXJjZSBkYXRhc2V0XG4gIHRoaXMuY291bnQgPSAwOyAvLyBOdW1iZXIgb2YgcmVjb3JkcyBiZWluZyBwcm9jZXNzZWRcbiAgdGhpcy5za2lwcGVkX2xpbmVfY291bnQgPSAwOyAvLyBOdW1iZXIgb2YgcmVjb3JkcyBza2lwcGVkIGR1ZSB0byBlcnJvcnNcbiAgdGhpcy5lbXB0eV9saW5lX2NvdW50ID0gMDsgLy8gTnVtYmVyIG9mIGVtcHR5IGxpbmVzXG4gIC8vIENvbnN0YW50c1xuICB0aGlzLmlzX2ludCA9IC9eKFxcLXxcXCspPyhbMS05XStbMC05XSopJC87XG4gIC8vIEBpc19mbG9hdCA9IC9eKFxcLXxcXCspPyhbMC05XSsoXFwuWzAtOV0rKShbZUVdWzAtOV0rKT98SW5maW5pdHkpJC9cbiAgLy8gQGlzX2Zsb2F0ID0gL14oXFwtfFxcKyk/KCgoWzAtOV0pfChbMS05XStbMC05XSopKShcXC5bMC05XSspKFtlRV1bMC05XSspP3xJbmZpbml0eSkkL1xuICB0aGlzLmlzX2Zsb2F0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlIC0gcGFyc2VGbG9hdCh2YWx1ZSkgKyAxKSA+PSAwOyAvLyBCb3Jyb3dlZCBmcm9tIGpxdWVyeVxuICB9O1xuICAvLyBJbnRlcm5hbCBzdGF0ZVxuICB0aGlzLl8gPSB7XG4gICAgZGVjb2RlcjogbmV3IFN0cmluZ0RlY29kZXIoKSxcbiAgICBxdW90aW5nOiBmYWxzZSxcbiAgICBjb21tZW50aW5nOiBmYWxzZSxcbiAgICBmaWVsZDogbnVsbCxcbiAgICBuZXh0Q2hhcjogbnVsbCxcbiAgICBjbG9zaW5nUXVvdGU6IDAsXG4gICAgbGluZTogW10sXG4gICAgY2h1bmtzOiBbXSxcbiAgICByYXdCdWY6ICcnLFxuICAgIGJ1ZjogJycsXG4gICAgcm93RGVsaW1pdGVyTGVuZ3RoOiB0aGlzLm9wdGlvbnMucm93RGVsaW1pdGVyID8gTWF0aC5tYXgoLi4udGhpcy5vcHRpb25zLnJvd0RlbGltaXRlci5tYXAoZnVuY3Rpb24odikge1xuICAgICAgcmV0dXJuIHYubGVuZ3RoO1xuICAgIH0pKSA6IHZvaWQgMCxcbiAgICBsaW5lSGFzRXJyb3I6IGZhbHNlLFxuICAgIGlzRW5kZWQ6IGZhbHNlXG4gIH07XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gIyMgSW50ZXJuYWwgQVBJXG5cbi8vIFRoZSBQYXJzZXIgaW1wbGVtZW50IGEgW2BzdHJlYW0uVHJhbnNmb3JtYCBjbGFzc11bdHJhbnNmb3JtXS5cblxuLy8gIyMjIEV2ZW50c1xuXG4vLyBUaGUgbGlicmFyeSBleHRlbmRzIE5vZGUgW0V2ZW50RW1pdHRlcl1bZXZlbnRdIGNsYXNzIGFuZCBlbWl0IGFsbFxuLy8gdGhlIGV2ZW50cyBvZiB0aGUgV3JpdGFibGUgYW5kIFJlYWRhYmxlIFtTdHJlYW0gQVBJXVtzdHJlYW1dLiBcbnV0aWwuaW5oZXJpdHMoUGFyc2VyLCBzdHJlYW0uVHJhbnNmb3JtKTtcblxuLy8gRm9yIGV4dHJhIGZsZXhpYmlsaXR5LCB5b3UgY2FuIGdldCBhY2Nlc3MgdG8gdGhlIG9yaWdpbmFsIFBhcnNlclxuLy8gY2xhc3M6IGByZXF1aXJlKCdjc3YtcGFyc2UnKS5QYXJzZXJgLlxubW9kdWxlLmV4cG9ydHMuUGFyc2VyID0gUGFyc2VyO1xuXG4vLyAjIyMgYF90cmFuc2Zvcm0oY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaylgXG5cbi8vICogICBgY2h1bmtgIEJ1ZmZlciB8IFN0cmluZyAgIFxuLy8gICAgIFRoZSBjaHVuayB0byBiZSB0cmFuc2Zvcm1lZC4gV2lsbCBhbHdheXMgYmUgYSBidWZmZXIgdW5sZXNzIHRoZSBkZWNvZGVTdHJpbmdzIG9wdGlvbiB3YXMgc2V0IHRvIGZhbHNlLlxuLy8gKiAgIGBlbmNvZGluZ2AgU3RyaW5nICAgXG4vLyAgICAgSWYgdGhlIGNodW5rIGlzIGEgc3RyaW5nLCB0aGVuIHRoaXMgaXMgdGhlIGVuY29kaW5nIHR5cGUuIChJZ25vcmUgaWYgZGVjb2RlU3RyaW5ncyBjaHVuayBpcyBhIGJ1ZmZlci4pXG4vLyAqICAgYGNhbGxiYWNrYCBGdW5jdGlvbiAgIFxuLy8gICAgIENhbGwgdGhpcyBmdW5jdGlvbiAob3B0aW9uYWxseSB3aXRoIGFuIGVycm9yIGFyZ3VtZW50KSB3aGVuIHlvdSBhcmUgZG9uZSBwcm9jZXNzaW5nIHRoZSBzdXBwbGllZCBjaHVuay5cblxuLy8gSW1wbGVtZW50YXRpb24gb2YgdGhlIFtgc3RyZWFtLlRyYW5zZm9ybWAgQVBJXVt0cmFuc2Zvcm1dXG5QYXJzZXIucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgIHZhciBlcnI7XG4gICAgaWYgKGNodW5rIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICBjaHVuayA9IHRoaXMuXy5kZWNvZGVyLndyaXRlKGNodW5rKTtcbiAgICB9XG4gICAgZXJyID0gdGhpcy5fX3dyaXRlKGNodW5rLCBmYWxzZSk7XG4gICAgaWYgKGVycikge1xuICAgICAgcmV0dXJuIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIH1cbiAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgfSk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9mbHVzaCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHJldHVybiBjYWxsYmFjayh0aGlzLl9fZmx1c2goKSk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9fZmx1c2ggPSBmdW5jdGlvbigpIHtcbiAgdmFyIGVycjtcbiAgZXJyID0gdGhpcy5fX3dyaXRlKHRoaXMuXy5kZWNvZGVyLmVuZCgpLCB0cnVlKTtcbiAgaWYgKGVycikge1xuICAgIHJldHVybiBlcnI7XG4gIH1cbiAgaWYgKHRoaXMuXy5xdW90aW5nKSB7XG4gICAgZXJyID0gdGhpcy5lcnJvcihgUXVvdGVkIGZpZWxkIG5vdCB0ZXJtaW5hdGVkIGF0IGxpbmUgJHt0aGlzLmxpbmVzICsgMX1gKTtcbiAgICByZXR1cm4gZXJyO1xuICB9XG4gIGlmICh0aGlzLl8ubGluZS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHRoaXMuX19wdXNoKHRoaXMuXy5saW5lKTtcbiAgfVxufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fX3B1c2ggPSBmdW5jdGlvbihsaW5lKSB7XG4gIHZhciBjYWxsX2NvbHVtbl91ZGYsIGNvbHVtbnMsIGVyciwgZmllbGQsIGksIGosIGxlbiwgbGluZUFzQ29sdW1ucywgcmVjb3JkO1xuICBpZiAodGhpcy5fLmlzRW5kZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHRoaXMub3B0aW9ucy5za2lwX2xpbmVzX3dpdGhfZW1wdHlfdmFsdWVzICYmIGxpbmUuam9pbignJykudHJpbSgpID09PSAnJykge1xuICAgIHJldHVybjtcbiAgfVxuICByZWNvcmQgPSBudWxsO1xuICBpZiAodGhpcy5vcHRpb25zLmNvbHVtbnMgPT09IHRydWUpIHtcbiAgICB0aGlzLm9wdGlvbnMuY29sdW1ucyA9IGxpbmU7XG4gICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuY29sdW1ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxfY29sdW1uX3VkZiA9IGZ1bmN0aW9uKGZuLCBsaW5lKSB7XG4gICAgICB2YXIgY29sdW1ucywgZXJyO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29sdW1ucyA9IGZuLmNhbGwobnVsbCwgbGluZSk7XG4gICAgICAgIHJldHVybiBbbnVsbCwgY29sdW1uc107XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBlcnIgPSBlcnJvcjtcbiAgICAgICAgcmV0dXJuIFtlcnJdO1xuICAgICAgfVxuICAgIH07XG4gICAgW2VyciwgY29sdW1uc10gPSBjYWxsX2NvbHVtbl91ZGYodGhpcy5vcHRpb25zLmNvbHVtbnMsIGxpbmUpO1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHJldHVybiBlcnI7XG4gICAgfVxuICAgIHRoaXMub3B0aW9ucy5jb2x1bW5zID0gY29sdW1ucztcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCF0aGlzLl8ubGluZV9sZW5ndGggJiYgbGluZS5sZW5ndGggPiAwKSB7XG4gICAgdGhpcy5fLmxpbmVfbGVuZ3RoID0gdGhpcy5vcHRpb25zLmNvbHVtbnMgPyB0aGlzLm9wdGlvbnMuY29sdW1ucy5sZW5ndGggOiBsaW5lLmxlbmd0aDtcbiAgfVxuICAvLyBEb250IGNoZWNrIGNvbHVtbiBjb3VudCBvbiBlbXB0eSBsaW5lc1xuICBpZiAobGluZS5sZW5ndGggPT09IDEgJiYgbGluZVswXSA9PT0gJycpIHtcbiAgICB0aGlzLmVtcHR5X2xpbmVfY291bnQrKztcbiAgfSBlbHNlIGlmIChsaW5lLmxlbmd0aCAhPT0gdGhpcy5fLmxpbmVfbGVuZ3RoKSB7XG4gICAgLy8gRG9udCBjaGVjayBjb2x1bW4gY291bnQgd2l0aCByZWxheF9jb2x1bW5fY291bnRcbiAgICBpZiAodGhpcy5vcHRpb25zLnJlbGF4X2NvbHVtbl9jb3VudCkge1xuICAgICAgdGhpcy5jb3VudCsrO1xuICAgICAgdGhpcy5za2lwcGVkX2xpbmVfY291bnQrKztcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jb2x1bW5zICE9IG51bGwpIHtcbiAgICAgIC8vIFN1Z2dlc3Q6IEluY29uc2lzdGVudCBoZWFkZXIgYW5kIGNvbHVtbiBudW1iZXJzOiBoZWFkZXIgaXMgMSBhbmQgbnVtYmVyIG9mIGNvbHVtbnMgaXMgMSBvbiBsaW5lIDFcbiAgICAgIGVyciA9IHRoaXMuZXJyb3IoYE51bWJlciBvZiBjb2x1bW5zIG9uIGxpbmUgJHt0aGlzLmxpbmVzfSBkb2VzIG5vdCBtYXRjaCBoZWFkZXJgKTtcbiAgICAgIHJldHVybiBlcnI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVyciA9IHRoaXMuZXJyb3IoYE51bWJlciBvZiBjb2x1bW5zIGlzIGluY29uc2lzdGVudCBvbiBsaW5lICR7dGhpcy5saW5lc31gKTtcbiAgICAgIHJldHVybiBlcnI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMuY291bnQrKztcbiAgfVxuICBpZiAodGhpcy5vcHRpb25zLmNvbHVtbnMgIT0gbnVsbCkge1xuICAgIGxpbmVBc0NvbHVtbnMgPSB7fTtcbiAgICBmb3IgKGkgPSBqID0gMCwgbGVuID0gbGluZS5sZW5ndGg7IGogPCBsZW47IGkgPSArK2opIHtcbiAgICAgIGZpZWxkID0gbGluZVtpXTtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29sdW1uc1tpXSA9PT0gZmFsc2UpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBsaW5lQXNDb2x1bW5zW3RoaXMub3B0aW9ucy5jb2x1bW5zW2ldXSA9IGZpZWxkO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLm9iam5hbWUpIHtcbiAgICAgIHJlY29yZCA9IFtsaW5lQXNDb2x1bW5zW3RoaXMub3B0aW9ucy5vYmpuYW1lXSwgbGluZUFzQ29sdW1uc107XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlY29yZCA9IGxpbmVBc0NvbHVtbnM7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJlY29yZCA9IGxpbmU7XG4gIH1cbiAgaWYgKHRoaXMuY291bnQgPCB0aGlzLm9wdGlvbnMuZnJvbSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAodGhpcy5vcHRpb25zLnJhdykge1xuICAgIHRoaXMucHVzaCh7XG4gICAgICByYXc6IHRoaXMuXy5yYXdCdWYsXG4gICAgICByb3c6IHJlY29yZFxuICAgIH0pO1xuICAgIHRoaXMuXy5yYXdCdWYgPSAnJztcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnB1c2gocmVjb3JkKTtcbiAgfVxuICBpZiAodGhpcy5saXN0ZW5lckNvdW50KCdyZWNvcmQnKSkge1xuICAgIHRoaXMuZW1pdCgncmVjb3JkJywgcmVjb3JkKTtcbiAgfVxuICAvLyBXaGVuIHRvIGlzIHJlYWNoZWQgc2V0IGlnbm9yZSBhbnkgZnV0dXJlIGNhbGxzXG4gIGlmICh0aGlzLmNvdW50ID49IHRoaXMub3B0aW9ucy50bykge1xuICAgIHRoaXMuXy5pc0VuZGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5wdXNoKG51bGwpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fX3dyaXRlID0gZnVuY3Rpb24oY2hhcnMsIGVuZCkge1xuICB2YXIgYXJlTmV4dENoYXJzRGVsaW1pdGVyLCBhcmVOZXh0Q2hhcnNSb3dEZWxpbWl0ZXJzLCBjYXN0LCBjaGFyLCBlcnIsIGVzY2FwZUlzUXVvdGUsIGksIGlzRGVsaW1pdGVyLCBpc0VzY2FwZSwgaXNOZXh0Q2hhckFDb21tZW50LCBpc05leHRDaGFyVHJpbWFibGUsIGlzUXVvdGUsIGlzUm93RGVsaW1pdGVyLCBpc1Jvd0RlbGltaXRlckxlbmd0aCwgaXNfZmxvYXQsIGlzX2ludCwgbCwgbHRyaW0sIG5leHRDaGFyUG9zLCByZWYsIHJlZjEsIHJlZjIsIHJlZjMsIHJlZjQsIHJlZjUsIHJlZjYsIHJlbWFpbmluZ0J1ZmZlciwgcm93RGVsaW1pdGVyLCBydHJpbSwgd2FzQ29tbWVudGluZztcbiAgaXNfaW50ID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmlzX2ludCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNfaW50KHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaXNfaW50LnRlc3QodmFsdWUpO1xuICAgIH1cbiAgfTtcbiAgaXNfZmxvYXQgPSAodmFsdWUpID0+IHtcbiAgICBpZiAodHlwZW9mIHRoaXMuaXNfZmxvYXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzX2Zsb2F0KHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaXNfZmxvYXQudGVzdCh2YWx1ZSk7XG4gICAgfVxuICB9O1xuICBjYXN0ID0gKHZhbHVlLCBjb250ZXh0ID0ge30pID0+IHtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5jYXN0KSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChjb250ZXh0LnF1b3RpbmcgPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5xdW90aW5nID0gISF0aGlzLl8uY2xvc2luZ1F1b3RlO1xuICAgIH1cbiAgICBpZiAoY29udGV4dC5saW5lcyA9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmxpbmVzID0gdGhpcy5saW5lcztcbiAgICB9XG4gICAgaWYgKGNvbnRleHQuY291bnQgPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5jb3VudCA9IHRoaXMuY291bnQ7XG4gICAgfVxuICAgIGlmIChjb250ZXh0LmluZGV4ID09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuaW5kZXggPSB0aGlzLl8ubGluZS5sZW5ndGg7XG4gICAgfVxuICAgIC8vIGNvbnRleHQuaGVhZGVyID89IGlmIEBvcHRpb25zLmNvbHVtbiBhbmQgQGxpbmVzIGlzIDEgYW5kIEBjb3VudCBpcyAwIHRoZW4gdHJ1ZSBlbHNlIGZhbHNlXG4gICAgaWYgKGNvbnRleHQuaGVhZGVyID09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuaGVhZGVyID0gdGhpcy5vcHRpb25zLmNvbHVtbnMgPT09IHRydWU7XG4gICAgfVxuICAgIGlmIChjb250ZXh0LmNvbHVtbiA9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmNvbHVtbiA9IEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zLmNvbHVtbnMpID8gdGhpcy5vcHRpb25zLmNvbHVtbnNbY29udGV4dC5pbmRleF0gOiBjb250ZXh0LmluZGV4O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5jYXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNhc3QodmFsdWUsIGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAoaXNfaW50KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChpc19mbG9hdCh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY2FzdF9kYXRlKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMub3B0aW9ucy5jYXN0X2RhdGUodmFsdWUsIGNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG4gIGx0cmltID0gdGhpcy5vcHRpb25zLnRyaW0gfHwgdGhpcy5vcHRpb25zLmx0cmltO1xuICBydHJpbSA9IHRoaXMub3B0aW9ucy50cmltIHx8IHRoaXMub3B0aW9ucy5ydHJpbTtcbiAgY2hhcnMgPSB0aGlzLl8uYnVmICsgY2hhcnM7XG4gIGwgPSBjaGFycy5sZW5ndGg7XG4gIGkgPSAwO1xuICBpZiAodGhpcy5saW5lcyA9PT0gMCAmJiAweEZFRkYgPT09IGNoYXJzLmNoYXJDb2RlQXQoMCkpIHtcbiAgICAvLyBTdHJpcCBCT00gaGVhZGVyXG4gICAgaSsrO1xuICB9XG4gIHdoaWxlIChpIDwgbCkge1xuICAgIC8vIEVuc3VyZSB3ZSBnZXQgZW5vdWdoIHNwYWNlIHRvIGxvb2sgYWhlYWRcbiAgICBpZiAoIWVuZCkge1xuICAgICAgcmVtYWluaW5nQnVmZmVyID0gY2hhcnMuc3Vic3RyKGksIGwgLSBpKTtcbiAgICAgIC8vIChpKzEwMDAgPj0gbCkgb3JcbiAgICAgIC8vIFNraXAgaWYgdGhlIHJlbWFpbmluZyBidWZmZXIgY2FuIGJlIGNvbW1lbnRcbiAgICAgIC8vIFNraXAgaWYgdGhlIHJlbWFpbmluZyBidWZmZXIgY2FuIGJlIHJvdyBkZWxpbWl0ZXJcbiAgICAgIGlmICgoIXRoaXMub3B0aW9ucy5yb3dEZWxpbWl0ZXIgJiYgaSArIDMgPiBsKSB8fCAoIXRoaXMuXy5jb21tZW50aW5nICYmIGwgLSBpIDwgdGhpcy5vcHRpb25zLmNvbW1lbnQubGVuZ3RoICYmIHRoaXMub3B0aW9ucy5jb21tZW50LnN1YnN0cigwLCBsIC0gaSkgPT09IHJlbWFpbmluZ0J1ZmZlcikgfHwgKHRoaXMub3B0aW9ucy5yb3dEZWxpbWl0ZXIgJiYgbCAtIGkgPCB0aGlzLl8ucm93RGVsaW1pdGVyTGVuZ3RoICYmIHRoaXMub3B0aW9ucy5yb3dEZWxpbWl0ZXIuc29tZShmdW5jdGlvbihyZCkge1xuICAgICAgICByZXR1cm4gcmQuc3Vic3RyKDAsIGwgLSBpKSA9PT0gcmVtYWluaW5nQnVmZmVyO1xuICAgICAgLy8gU2tpcCBpZiB0aGUgcmVtYWluaW5nIGJ1ZmZlciBjYW4gYmUgcm93IGRlbGltaXRlciBmb2xsb3dpbmcgdGhlIGNsb3NpbmcgcXVvdGVcbiAgICAgIH0pKSB8fCAodGhpcy5vcHRpb25zLnJvd0RlbGltaXRlciAmJiB0aGlzLl8ucXVvdGluZyAmJiBsIC0gaSA8ICh0aGlzLm9wdGlvbnMucXVvdGUubGVuZ3RoICsgdGhpcy5fLnJvd0RlbGltaXRlckxlbmd0aCkgJiYgdGhpcy5vcHRpb25zLnJvd0RlbGltaXRlci5zb21lKChyZCkgPT4ge1xuICAgICAgICByZXR1cm4gKHRoaXMub3B0aW9ucy5xdW90ZSArIHJkKS5zdWJzdHIoMCwgbCAtIGkpID09PSByZW1haW5pbmdCdWZmZXI7XG4gICAgICAvLyBTa2lwIGlmIHRoZSByZW1haW5pbmcgYnVmZmVyIGNhbiBiZSBkZWxpbWl0ZXJcbiAgICAgIC8vIFNraXAgaWYgdGhlIHJlbWFpbmluZyBidWZmZXIgY2FuIGJlIGVzY2FwZSBzZXF1ZW5jZVxuICAgICAgfSkpIHx8IChsIC0gaSA8PSB0aGlzLm9wdGlvbnMuZGVsaW1pdGVyLmxlbmd0aCAmJiB0aGlzLm9wdGlvbnMuZGVsaW1pdGVyLnN1YnN0cigwLCBsIC0gaSkgPT09IHJlbWFpbmluZ0J1ZmZlcikgfHwgKGwgLSBpIDw9IHRoaXMub3B0aW9ucy5lc2NhcGUubGVuZ3RoICYmIHRoaXMub3B0aW9ucy5lc2NhcGUuc3Vic3RyKDAsIGwgLSBpKSA9PT0gcmVtYWluaW5nQnVmZmVyKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgY2hhciA9IHRoaXMuXy5uZXh0Q2hhciA/IHRoaXMuXy5uZXh0Q2hhciA6IGNoYXJzLmNoYXJBdChpKTtcbiAgICB0aGlzLl8ubmV4dENoYXIgPSBsID4gaSArIDEgPyBjaGFycy5jaGFyQXQoaSArIDEpIDogbnVsbDtcbiAgICBpZiAodGhpcy5vcHRpb25zLnJhdykge1xuICAgICAgdGhpcy5fLnJhd0J1ZiArPSBjaGFyO1xuICAgIH1cbiAgICAvLyBBdXRvIGRpc2NvdmVyeSBvZiByb3dEZWxpbWl0ZXIsIHVuaXgsIG1hYyBhbmQgd2luZG93cyBzdXBwb3J0ZWRcbiAgICBpZiAodGhpcy5vcHRpb25zLnJvd0RlbGltaXRlciA9PSBudWxsKSB7XG4gICAgICBuZXh0Q2hhclBvcyA9IGk7XG4gICAgICByb3dEZWxpbWl0ZXIgPSBudWxsO1xuICAgICAgLy8gRmlyc3QgZW1wdHkgbGluZVxuICAgICAgaWYgKCF0aGlzLl8ucXVvdGluZyAmJiAoY2hhciA9PT0gJ1xcbicgfHwgY2hhciA9PT0gJ1xccicpKSB7XG4gICAgICAgIHJvd0RlbGltaXRlciA9IGNoYXI7XG4gICAgICAgIG5leHRDaGFyUG9zICs9IDE7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuXy5xdW90aW5nICYmIGNoYXIgPT09IHRoaXMub3B0aW9ucy5xdW90ZSAmJiAoKHJlZiA9IHRoaXMuXy5uZXh0Q2hhcikgPT09ICdcXG4nIHx8IHJlZiA9PT0gJ1xccicpKSB7XG4gICAgICAgIHJvd0RlbGltaXRlciA9IHRoaXMuXy5uZXh0Q2hhcjtcbiAgICAgICAgbmV4dENoYXJQb3MgKz0gMjtcbiAgICAgIH1cbiAgICAgIGlmIChyb3dEZWxpbWl0ZXIpIHtcbiAgICAgICAgaWYgKHJvd0RlbGltaXRlciA9PT0gJ1xccicgJiYgY2hhcnMuY2hhckF0KG5leHRDaGFyUG9zKSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICByb3dEZWxpbWl0ZXIgKz0gJ1xcbic7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zLnJvd0RlbGltaXRlciA9IFtyb3dEZWxpbWl0ZXJdO1xuICAgICAgICB0aGlzLl8ucm93RGVsaW1pdGVyTGVuZ3RoID0gcm93RGVsaW1pdGVyLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUGFyc2UgdGhhdCBkYW1uIGNoYXJcbiAgICAvLyBOb3RlLCBzaG91bGRuJ3Qgd2UgaGF2ZSBzdGggbGlrZSBjaGFycy5zdWJzdHIoaSwgQG9wdGlvbnMuZXNjYXBlLmxlbmd0aClcbiAgICBpZiAoIXRoaXMuXy5jb21tZW50aW5nICYmIGNoYXIgPT09IHRoaXMub3B0aW9ucy5lc2NhcGUpIHtcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZXNjYXBlIGlzIHJlYWxseSBoZXJlIGZvciBlc2NhcGluZzpcbiAgICAgIC8vIElmIGVzY2FwZSBpcyBzYW1lIGFzIHF1b3RlLCBhbmQgZXNjYXBlIGlzIGZpcnN0IGNoYXIgb2YgYSBmaWVsZCBcbiAgICAgIC8vIGFuZCBpdCdzIG5vdCBxdW90ZWQsIHRoZW4gaXQgaXMgYSBxdW90ZVxuICAgICAgLy8gTmV4dCBjaGFyIHNob3VsZCBiZSBhbiBlc2NhcGUgb3IgYSBxdW90ZVxuICAgICAgZXNjYXBlSXNRdW90ZSA9IHRoaXMub3B0aW9ucy5lc2NhcGUgPT09IHRoaXMub3B0aW9ucy5xdW90ZTtcbiAgICAgIGlzRXNjYXBlID0gdGhpcy5fLm5leHRDaGFyID09PSB0aGlzLm9wdGlvbnMuZXNjYXBlO1xuICAgICAgaXNRdW90ZSA9IHRoaXMuXy5uZXh0Q2hhciA9PT0gdGhpcy5vcHRpb25zLnF1b3RlO1xuICAgICAgaWYgKCEoZXNjYXBlSXNRdW90ZSAmJiAhdGhpcy5fLmZpZWxkICYmICF0aGlzLl8ucXVvdGluZykgJiYgKGlzRXNjYXBlIHx8IGlzUXVvdGUpKSB7XG4gICAgICAgIGkrKztcbiAgICAgICAgY2hhciA9IHRoaXMuXy5uZXh0Q2hhcjtcbiAgICAgICAgdGhpcy5fLm5leHRDaGFyID0gY2hhcnMuY2hhckF0KGkgKyAxKTtcbiAgICAgICAgaWYgKHRoaXMuXy5maWVsZCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5fLmZpZWxkID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fLmZpZWxkICs9IGNoYXI7XG4gICAgICAgIC8vIFNpbmNlIHdlJ3JlIHNraXBwaW5nIHRoZSBuZXh0IG9uZSwgYmV0dGVyIGFkZCBpdCBub3cgaWYgaW4gcmF3IG1vZGUuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmF3KSB7XG4gICAgICAgICAgdGhpcy5fLnJhd0J1ZiArPSBjaGFyO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIENoYXIgbWF0Y2ggcXVvdGVcbiAgICBpZiAoIXRoaXMuXy5jb21tZW50aW5nICYmIGNoYXIgPT09IHRoaXMub3B0aW9ucy5xdW90ZSkge1xuICAgICAgaWYgKHRoaXMuXy5hY2NlcHRPbmx5RW1wdHlDaGFycyAmJiAoY2hhciAhPT0gJyAnICYmIGNoYXIgIT09ICdcXHQnKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5lcnJvcignT25seSB0cmltYWJsZSBjaGFyYWN0ZXJzIGFyZSBhY2NlcHRlZCBhZnRlciBxdW90ZXMnKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl8ucXVvdGluZykge1xuICAgICAgICAvLyBNYWtlIHN1cmUgYSBjbG9zaW5nIHF1b3RlIGlzIGZvbGxvd2VkIGJ5IGEgZGVsaW1pdGVyXG4gICAgICAgIC8vIElmIHdlIGhhdmUgYSBuZXh0IGNoYXJhY3RlciBhbmQgXG4gICAgICAgIC8vIGl0IGlzbnQgYSByb3dEZWxpbWl0ZXIgYW5kIFxuICAgICAgICAvLyBpdCBpc250IGFuIGNvbHVtbiBkZWxpbWl0ZXIgYW5kXG4gICAgICAgIC8vIGl0IGlzbnQgdGhlIGJlZ2luaW5nIG9mIGEgY29tbWVudFxuICAgICAgICAvLyBPdGhlcndpc2UsIGlmIHRoaXMgaXMgbm90IFwicmVsYXhcIiBtb2RlLCB0aHJvdyBhbiBlcnJvclxuICAgICAgICBpc05leHRDaGFyVHJpbWFibGUgPSBydHJpbSAmJiAoKHJlZjEgPSB0aGlzLl8ubmV4dENoYXIpID09PSAnICcgfHwgcmVmMSA9PT0gJ1xcdCcpO1xuICAgICAgICBhcmVOZXh0Q2hhcnNSb3dEZWxpbWl0ZXJzID0gdGhpcy5vcHRpb25zLnJvd0RlbGltaXRlciAmJiB0aGlzLm9wdGlvbnMucm93RGVsaW1pdGVyLnNvbWUoZnVuY3Rpb24ocmQpIHtcbiAgICAgICAgICByZXR1cm4gY2hhcnMuc3Vic3RyKGkgKyAxLCByZC5sZW5ndGgpID09PSByZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGFyZU5leHRDaGFyc0RlbGltaXRlciA9IGNoYXJzLnN1YnN0cihpICsgMSwgdGhpcy5vcHRpb25zLmRlbGltaXRlci5sZW5ndGgpID09PSB0aGlzLm9wdGlvbnMuZGVsaW1pdGVyO1xuICAgICAgICBpc05leHRDaGFyQUNvbW1lbnQgPSB0aGlzLl8ubmV4dENoYXIgPT09IHRoaXMub3B0aW9ucy5jb21tZW50O1xuICAgICAgICBpZiAoKHRoaXMuXy5uZXh0Q2hhciAhPSBudWxsKSAmJiAhaXNOZXh0Q2hhclRyaW1hYmxlICYmICFhcmVOZXh0Q2hhcnNSb3dEZWxpbWl0ZXJzICYmICFhcmVOZXh0Q2hhcnNEZWxpbWl0ZXIgJiYgIWlzTmV4dENoYXJBQ29tbWVudCkge1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVsYXgpIHtcbiAgICAgICAgICAgIHRoaXMuXy5xdW90aW5nID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5fLmZpZWxkKSB7XG4gICAgICAgICAgICAgIHRoaXMuXy5maWVsZCA9IGAke3RoaXMub3B0aW9ucy5xdW90ZX0ke3RoaXMuXy5maWVsZH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZXJyID0gdGhpcy5lcnJvcihgSW52YWxpZCBjbG9zaW5nIHF1b3RlIGF0IGxpbmUgJHt0aGlzLmxpbmVzICsgMX07IGZvdW5kICR7SlNPTi5zdHJpbmdpZnkodGhpcy5fLm5leHRDaGFyKX0gaW5zdGVhZCBvZiBkZWxpbWl0ZXIgJHtKU09OLnN0cmluZ2lmeSh0aGlzLm9wdGlvbnMuZGVsaW1pdGVyKX1gKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgodGhpcy5fLm5leHRDaGFyICE9IG51bGwpICYmIGlzTmV4dENoYXJUcmltYWJsZSkge1xuICAgICAgICAgIGkrKztcbiAgICAgICAgICB0aGlzLl8ucXVvdGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuXy5jbG9zaW5nUXVvdGUgPSB0aGlzLm9wdGlvbnMucXVvdGUubGVuZ3RoO1xuICAgICAgICAgIHRoaXMuXy5hY2NlcHRPbmx5RW1wdHlDaGFycyA9IHRydWU7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICAgIHRoaXMuXy5xdW90aW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fLmNsb3NpbmdRdW90ZSA9IHRoaXMub3B0aW9ucy5xdW90ZS5sZW5ndGg7XG4gICAgICAgICAgaWYgKGVuZCAmJiBpID09PSBsKSB7XG4gICAgICAgICAgICB0aGlzLl8ubGluZS5wdXNoKGNhc3QodGhpcy5fLmZpZWxkIHx8ICcnKSk7XG4gICAgICAgICAgICB0aGlzLl8uZmllbGQgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghdGhpcy5fLmZpZWxkKSB7XG4gICAgICAgIHRoaXMuXy5xdW90aW5nID0gdHJ1ZTtcbiAgICAgICAgaSsrO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAoKHRoaXMuXy5maWVsZCAhPSBudWxsKSAmJiAhdGhpcy5vcHRpb25zLnJlbGF4KSB7XG4gICAgICAgIGlmIChlcnIgPSB0aGlzLmVycm9yKGBJbnZhbGlkIG9wZW5pbmcgcXVvdGUgYXQgbGluZSAke3RoaXMubGluZXMgKyAxfWApKSB7XG4gICAgICAgICAgcmV0dXJuIGVycjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBPdGhlcndpc2UsIHRyZWF0IHF1b3RlIGFzIGEgcmVndWxhciBjaGFyYWN0ZXJcbiAgICBpc1Jvd0RlbGltaXRlciA9IHRoaXMub3B0aW9ucy5yb3dEZWxpbWl0ZXIgJiYgdGhpcy5vcHRpb25zLnJvd0RlbGltaXRlci5zb21lKGZ1bmN0aW9uKHJkKSB7XG4gICAgICByZXR1cm4gY2hhcnMuc3Vic3RyKGksIHJkLmxlbmd0aCkgPT09IHJkO1xuICAgIH0pO1xuICAgIGlmIChpc1Jvd0RlbGltaXRlciB8fCAoZW5kICYmIGkgPT09IGwgLSAxKSkge1xuICAgICAgdGhpcy5saW5lcysrO1xuICAgIH1cbiAgICAvLyBTZXQgdGhlIGNvbW1lbnRpbmcgZmxhZ1xuICAgIHdhc0NvbW1lbnRpbmcgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMuXy5jb21tZW50aW5nICYmICF0aGlzLl8ucXVvdGluZyAmJiB0aGlzLm9wdGlvbnMuY29tbWVudCAmJiBjaGFycy5zdWJzdHIoaSwgdGhpcy5vcHRpb25zLmNvbW1lbnQubGVuZ3RoKSA9PT0gdGhpcy5vcHRpb25zLmNvbW1lbnQpIHtcbiAgICAgIHRoaXMuXy5jb21tZW50aW5nID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuXy5jb21tZW50aW5nICYmIGlzUm93RGVsaW1pdGVyKSB7XG4gICAgICB3YXNDb21tZW50aW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuXy5jb21tZW50aW5nID0gZmFsc2U7XG4gICAgfVxuICAgIGlzRGVsaW1pdGVyID0gY2hhcnMuc3Vic3RyKGksIHRoaXMub3B0aW9ucy5kZWxpbWl0ZXIubGVuZ3RoKSA9PT0gdGhpcy5vcHRpb25zLmRlbGltaXRlcjtcbiAgICBpZiAodGhpcy5fLmFjY2VwdE9ubHlFbXB0eUNoYXJzKSB7XG4gICAgICBpZiAoaXNEZWxpbWl0ZXIgfHwgaXNSb3dEZWxpbWl0ZXIpIHtcbiAgICAgICAgdGhpcy5fLmFjY2VwdE9ubHlFbXB0eUNoYXJzID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY2hhciA9PT0gJyAnIHx8IGNoYXIgPT09ICdcXHQnKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yKCdPbmx5IHRyaW1hYmxlIGNoYXJhY3RlcnMgYXJlIGFjY2VwdGVkIGFmdGVyIHF1b3RlcycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdGhpcy5fLmNvbW1lbnRpbmcgJiYgIXRoaXMuXy5xdW90aW5nICYmIChpc0RlbGltaXRlciB8fCBpc1Jvd0RlbGltaXRlcikpIHtcbiAgICAgIGlmIChpc1Jvd0RlbGltaXRlcikge1xuICAgICAgICBpc1Jvd0RlbGltaXRlckxlbmd0aCA9IHRoaXMub3B0aW9ucy5yb3dEZWxpbWl0ZXIuZmlsdGVyKGZ1bmN0aW9uKHJkKSB7XG4gICAgICAgICAgcmV0dXJuIGNoYXJzLnN1YnN0cihpLCByZC5sZW5ndGgpID09PSByZDtcbiAgICAgICAgfSlbMF0ubGVuZ3RoO1xuICAgICAgfVxuICAgICAgLy8gRW1wdHkgbGluZXNcbiAgICAgIGlmIChpc1Jvd0RlbGltaXRlciAmJiB0aGlzLl8ubGluZS5sZW5ndGggPT09IDAgJiYgKHRoaXMuXy5maWVsZCA9PSBudWxsKSkge1xuICAgICAgICBpZiAod2FzQ29tbWVudGluZyB8fCB0aGlzLm9wdGlvbnMuc2tpcF9lbXB0eV9saW5lcykge1xuICAgICAgICAgIGkgKz0gaXNSb3dEZWxpbWl0ZXJMZW5ndGg7XG4gICAgICAgICAgdGhpcy5fLm5leHRDaGFyID0gY2hhcnMuY2hhckF0KGkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocnRyaW0pIHtcbiAgICAgICAgaWYgKCF0aGlzLl8uY2xvc2luZ1F1b3RlKSB7XG4gICAgICAgICAgdGhpcy5fLmZpZWxkID0gKHJlZjIgPSB0aGlzLl8uZmllbGQpICE9IG51bGwgPyByZWYyLnRyaW1SaWdodCgpIDogdm9pZCAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLl8ubGluZS5wdXNoKGNhc3QodGhpcy5fLmZpZWxkIHx8ICcnKSk7XG4gICAgICB0aGlzLl8uY2xvc2luZ1F1b3RlID0gMDtcbiAgICAgIHRoaXMuXy5maWVsZCA9IG51bGw7XG4gICAgICBpZiAoaXNEZWxpbWl0ZXIpIHsgLy8gRW5kIG9mIGZpZWxkXG4gICAgICAgIGkgKz0gdGhpcy5vcHRpb25zLmRlbGltaXRlci5sZW5ndGg7XG4gICAgICAgIHRoaXMuXy5uZXh0Q2hhciA9IGNoYXJzLmNoYXJBdChpKTtcbiAgICAgICAgaWYgKGVuZCAmJiAhdGhpcy5fLm5leHRDaGFyKSB7XG4gICAgICAgICAgaXNSb3dEZWxpbWl0ZXIgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuXy5saW5lLnB1c2goJycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNSb3dEZWxpbWl0ZXIpIHsgLy8gRW5kIG9mIHJlY29yZFxuICAgICAgICBpZiAoIXRoaXMuXy5saW5lSGFzRXJyb3IpIHtcbiAgICAgICAgICBlcnIgPSB0aGlzLl9fcHVzaCh0aGlzLl8ubGluZSk7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGVycjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuXy5saW5lSGFzRXJyb3IpIHtcbiAgICAgICAgICB0aGlzLl8ubGluZUhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29tZSBjbGVhbnVwIGZvciB0aGUgbmV4dCByZWNvcmRcbiAgICAgICAgdGhpcy5fLmxpbmUgPSBbXTtcbiAgICAgICAgaSArPSBpc1Jvd0RlbGltaXRlckxlbmd0aDtcbiAgICAgICAgdGhpcy5fLm5leHRDaGFyID0gY2hhcnMuY2hhckF0KGkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCF0aGlzLl8uY29tbWVudGluZyAmJiAhdGhpcy5fLnF1b3RpbmcgJiYgKGNoYXIgPT09ICcgJyB8fCBjaGFyID09PSAnXFx0JykpIHtcbiAgICAgIGlmICh0aGlzLl8uZmllbGQgPT0gbnVsbCkge1xuICAgICAgICAvLyBMZWZ0IHRyaW0gdW5sZXNzIHdlIGFyZSBxdW90aW5nIG9yIGZpZWxkIGFscmVhZHkgZmlsbGVkXG4gICAgICAgIHRoaXMuXy5maWVsZCA9ICcnO1xuICAgICAgfVxuICAgICAgaWYgKCEobHRyaW0gJiYgIXRoaXMuXy5maWVsZCkpIHtcbiAgICAgICAgdGhpcy5fLmZpZWxkICs9IGNoYXI7XG4gICAgICB9XG4gICAgICBpKys7XG4gICAgfSBlbHNlIGlmICghdGhpcy5fLmNvbW1lbnRpbmcpIHtcbiAgICAgIGlmICh0aGlzLl8uZmllbGQgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl8uZmllbGQgPSAnJztcbiAgICAgIH1cbiAgICAgIHRoaXMuXy5maWVsZCArPSBjaGFyO1xuICAgICAgaSsrO1xuICAgIH0gZWxzZSB7XG4gICAgICBpKys7XG4gICAgfVxuICAgIGlmICghdGhpcy5fLmNvbW1lbnRpbmcgJiYgKChyZWYzID0gdGhpcy5fLmZpZWxkKSAhPSBudWxsID8gcmVmMy5sZW5ndGggOiB2b2lkIDApID4gdGhpcy5vcHRpb25zLm1heF9saW1pdF9vbl9kYXRhX3JlYWQpIHtcbiAgICAgIHJldHVybiBFcnJvcihgRmllbGQgZXhjZWVkcyBtYXhfbGltaXRfb25fZGF0YV9yZWFkIHNldHRpbmcgKCR7dGhpcy5vcHRpb25zLm1heF9saW1pdF9vbl9kYXRhX3JlYWR9KSAke0pTT04uc3RyaW5naWZ5KHRoaXMub3B0aW9ucy5kZWxpbWl0ZXIpfWApO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuXy5jb21tZW50aW5nICYmICgocmVmNCA9IHRoaXMuXy5saW5lKSAhPSBudWxsID8gcmVmNC5sZW5ndGggOiB2b2lkIDApID4gdGhpcy5vcHRpb25zLm1heF9saW1pdF9vbl9kYXRhX3JlYWQpIHtcbiAgICAgIHJldHVybiBFcnJvcihgUm93IGRlbGltaXRlciBub3QgZm91bmQgaW4gdGhlIGZpbGUgJHtKU09OLnN0cmluZ2lmeSh0aGlzLm9wdGlvbnMucm93RGVsaW1pdGVyKX1gKTtcbiAgICB9XG4gIH1cbiAgLy8gRmx1c2ggcmVtYWluaW5nIGZpZWxkcyBhbmQgbGluZXNcbiAgaWYgKGVuZCkge1xuICAgIGlmIChsID09PSAwKSB7XG4gICAgICB0aGlzLmxpbmVzKys7XG4gICAgfVxuICAgIGlmICh0aGlzLl8uZmllbGQgIT0gbnVsbCkge1xuICAgICAgaWYgKHJ0cmltKSB7XG4gICAgICAgIGlmICghdGhpcy5fLmNsb3NpbmdRdW90ZSkge1xuICAgICAgICAgIHRoaXMuXy5maWVsZCA9IChyZWY1ID0gdGhpcy5fLmZpZWxkKSAhPSBudWxsID8gcmVmNS50cmltUmlnaHQoKSA6IHZvaWQgMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5fLmxpbmUucHVzaChjYXN0KHRoaXMuXy5maWVsZCB8fCAnJykpO1xuICAgICAgdGhpcy5fLmZpZWxkID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKCgocmVmNiA9IHRoaXMuXy5maWVsZCkgIT0gbnVsbCA/IHJlZjYubGVuZ3RoIDogdm9pZCAwKSA+IHRoaXMub3B0aW9ucy5tYXhfbGltaXRfb25fZGF0YV9yZWFkKSB7XG4gICAgICByZXR1cm4gRXJyb3IoYERlbGltaXRlciBub3QgZm91bmQgaW4gdGhlIGZpbGUgJHtKU09OLnN0cmluZ2lmeSh0aGlzLm9wdGlvbnMuZGVsaW1pdGVyKX1gKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuXy5saW5lLmxlbmd0aCA+IHRoaXMub3B0aW9ucy5tYXhfbGltaXRfb25fZGF0YV9yZWFkKSB7XG4gICAgICByZXR1cm4gRXJyb3IoYFJvdyBkZWxpbWl0ZXIgbm90IGZvdW5kIGluIHRoZSBmaWxlICR7SlNPTi5zdHJpbmdpZnkodGhpcy5vcHRpb25zLnJvd0RlbGltaXRlcil9YCk7XG4gICAgfVxuICB9XG4gIC8vIFN0b3JlIHVuLXBhcnNlZCBjaGFycyBmb3IgbmV4dCBjYWxsXG4gIHRoaXMuXy5idWYgPSBjaGFycy5zdWJzdHIoaSk7XG4gIHJldHVybiBudWxsO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKG1zZykge1xuICB2YXIgZXJyO1xuICBlcnIgPSBFcnJvcihtc2cpO1xuICBpZiAoIXRoaXMub3B0aW9ucy5za2lwX2xpbmVzX3dpdGhfZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyO1xuICB9IGVsc2Uge1xuICAgIGlmICghdGhpcy5fLmxpbmVIYXNFcnJvcikge1xuICAgICAgdGhpcy5fLmxpbmVIYXNFcnJvciA9IHRydWU7XG4gICAgICB0aGlzLmVtaXQoJ3NraXAnLCBlcnIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbi8vICMjIFV0aWxzXG5pc09iakxpdGVyYWwgPSBmdW5jdGlvbihfb2JqKSB7XG4gIHZhciBfdGVzdDtcbiAgX3Rlc3QgPSBfb2JqO1xuICBpZiAodHlwZW9mIF9vYmogIT09ICdvYmplY3QnIHx8IF9vYmogPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShfb2JqKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKGZ1bmN0aW9uKCkge1xuICAgICAgd2hpbGUgKCFmYWxzZSkge1xuICAgICAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKF90ZXN0ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKF90ZXN0KSkgPT09IG51bGwpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihfb2JqID09PSBfdGVzdCk7XG4gICAgfSkoKTtcbiAgfVxufTtcblxuLy8gW3JlYWRtZV06IGh0dHBzOi8vZ2l0aHViLmNvbS93ZGF2aWR3L25vZGUtY3N2LXBhcnNlXG4vLyBbc2l0ZV06IGh0dHA6Ly9jc3YuYWRhbHRhcy5jb20vcGFyc2UvXG4vLyBbc2FtcGxlc106IGh0dHBzOi8vZ2l0aHViLmNvbS93ZGF2aWR3L25vZGUtY3N2LXBhcnNlL3RyZWUvbWFzdGVyL3NhbXBsZXNcbi8vIFt0ZXN0c106IGh0dHBzOi8vZ2l0aHViLmNvbS93ZGF2aWR3L25vZGUtY3N2LXBhcnNlL3RyZWUvbWFzdGVyL3Rlc3Rcbi8vIFtzdHJlYW1dOiAoaHR0cDovL25vZGVqcy5vcmcvYXBpL3N0cmVhbS5odG1sXG4vLyBbdHJhbnNmb3JtXTogKGh0dHA6Ly9ub2RlanMub3JnL2FwaS9zdHJlYW0uaHRtbCNzdHJlYW1fY2xhc3Nfc3RyZWFtX3RyYW5zZm9ybV8xKVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2Nzdi1wYXJzZS9saWIvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDEzN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiBGaWxlU2F2ZXIuanNcbiAqIEEgc2F2ZUFzKCkgRmlsZVNhdmVyIGltcGxlbWVudGF0aW9uLlxuICogMS4zLjJcbiAqIDIwMTYtMDYtMTYgMTg6MjU6MTlcbiAqXG4gKiBCeSBFbGkgR3JleSwgaHR0cDovL2VsaWdyZXkuY29tXG4gKiBMaWNlbnNlOiBNSVRcbiAqICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGlncmV5L0ZpbGVTYXZlci5qcy9ibG9iL21hc3Rlci9MSUNFTlNFLm1kXG4gKi9cblxuLypnbG9iYWwgc2VsZiAqL1xuLypqc2xpbnQgYml0d2lzZTogdHJ1ZSwgaW5kZW50OiA0LCBsYXhicmVhazogdHJ1ZSwgbGF4Y29tbWE6IHRydWUsIHNtYXJ0dGFiczogdHJ1ZSwgcGx1c3BsdXM6IHRydWUgKi9cblxuLyohIEBzb3VyY2UgaHR0cDovL3B1cmwuZWxpZ3JleS5jb20vZ2l0aHViL0ZpbGVTYXZlci5qcy9ibG9iL21hc3Rlci9GaWxlU2F2ZXIuanMgKi9cblxudmFyIHNhdmVBcyA9IHNhdmVBcyB8fCAoZnVuY3Rpb24odmlldykge1xuXHRcInVzZSBzdHJpY3RcIjtcblx0Ly8gSUUgPDEwIGlzIGV4cGxpY2l0bHkgdW5zdXBwb3J0ZWRcblx0aWYgKHR5cGVvZiB2aWV3ID09PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiYgL01TSUUgWzEtOV1cXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0dmFyXG5cdFx0ICBkb2MgPSB2aWV3LmRvY3VtZW50XG5cdFx0ICAvLyBvbmx5IGdldCBVUkwgd2hlbiBuZWNlc3NhcnkgaW4gY2FzZSBCbG9iLmpzIGhhc24ndCBvdmVycmlkZGVuIGl0IHlldFxuXHRcdCwgZ2V0X1VSTCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHZpZXcuVVJMIHx8IHZpZXcud2Via2l0VVJMIHx8IHZpZXc7XG5cdFx0fVxuXHRcdCwgc2F2ZV9saW5rID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIiwgXCJhXCIpXG5cdFx0LCBjYW5fdXNlX3NhdmVfbGluayA9IFwiZG93bmxvYWRcIiBpbiBzYXZlX2xpbmtcblx0XHQsIGNsaWNrID0gZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0dmFyIGV2ZW50ID0gbmV3IE1vdXNlRXZlbnQoXCJjbGlja1wiKTtcblx0XHRcdG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cdFx0fVxuXHRcdCwgaXNfc2FmYXJpID0gL2NvbnN0cnVjdG9yL2kudGVzdCh2aWV3LkhUTUxFbGVtZW50KSB8fCB2aWV3LnNhZmFyaVxuXHRcdCwgaXNfY2hyb21lX2lvcyA9L0NyaU9TXFwvW1xcZF0rLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpXG5cdFx0LCB0aHJvd19vdXRzaWRlID0gZnVuY3Rpb24oZXgpIHtcblx0XHRcdCh2aWV3LnNldEltbWVkaWF0ZSB8fCB2aWV3LnNldFRpbWVvdXQpKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aHJvdyBleDtcblx0XHRcdH0sIDApO1xuXHRcdH1cblx0XHQsIGZvcmNlX3NhdmVhYmxlX3R5cGUgPSBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiXG5cdFx0Ly8gdGhlIEJsb2IgQVBJIGlzIGZ1bmRhbWVudGFsbHkgYnJva2VuIGFzIHRoZXJlIGlzIG5vIFwiZG93bmxvYWRmaW5pc2hlZFwiIGV2ZW50IHRvIHN1YnNjcmliZSB0b1xuXHRcdCwgYXJiaXRyYXJ5X3Jldm9rZV90aW1lb3V0ID0gMTAwMCAqIDQwIC8vIGluIG1zXG5cdFx0LCByZXZva2UgPSBmdW5jdGlvbihmaWxlKSB7XG5cdFx0XHR2YXIgcmV2b2tlciA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGZpbGUgPT09IFwic3RyaW5nXCIpIHsgLy8gZmlsZSBpcyBhbiBvYmplY3QgVVJMXG5cdFx0XHRcdFx0Z2V0X1VSTCgpLnJldm9rZU9iamVjdFVSTChmaWxlKTtcblx0XHRcdFx0fSBlbHNlIHsgLy8gZmlsZSBpcyBhIEZpbGVcblx0XHRcdFx0XHRmaWxlLnJlbW92ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0c2V0VGltZW91dChyZXZva2VyLCBhcmJpdHJhcnlfcmV2b2tlX3RpbWVvdXQpO1xuXHRcdH1cblx0XHQsIGRpc3BhdGNoID0gZnVuY3Rpb24oZmlsZXNhdmVyLCBldmVudF90eXBlcywgZXZlbnQpIHtcblx0XHRcdGV2ZW50X3R5cGVzID0gW10uY29uY2F0KGV2ZW50X3R5cGVzKTtcblx0XHRcdHZhciBpID0gZXZlbnRfdHlwZXMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHR2YXIgbGlzdGVuZXIgPSBmaWxlc2F2ZXJbXCJvblwiICsgZXZlbnRfdHlwZXNbaV1dO1xuXHRcdFx0XHRpZiAodHlwZW9mIGxpc3RlbmVyID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0bGlzdGVuZXIuY2FsbChmaWxlc2F2ZXIsIGV2ZW50IHx8IGZpbGVzYXZlcik7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXgpIHtcblx0XHRcdFx0XHRcdHRocm93X291dHNpZGUoZXgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHQsIGF1dG9fYm9tID0gZnVuY3Rpb24oYmxvYikge1xuXHRcdFx0Ly8gcHJlcGVuZCBCT00gZm9yIFVURi04IFhNTCBhbmQgdGV4dC8qIHR5cGVzIChpbmNsdWRpbmcgSFRNTClcblx0XHRcdC8vIG5vdGU6IHlvdXIgYnJvd3NlciB3aWxsIGF1dG9tYXRpY2FsbHkgY29udmVydCBVVEYtMTYgVStGRUZGIHRvIEVGIEJCIEJGXG5cdFx0XHRpZiAoL15cXHMqKD86dGV4dFxcL1xcUyp8YXBwbGljYXRpb25cXC94bWx8XFxTKlxcL1xcUypcXCt4bWwpXFxzKjsuKmNoYXJzZXRcXHMqPVxccyp1dGYtOC9pLnRlc3QoYmxvYi50eXBlKSkge1xuXHRcdFx0XHRyZXR1cm4gbmV3IEJsb2IoW1N0cmluZy5mcm9tQ2hhckNvZGUoMHhGRUZGKSwgYmxvYl0sIHt0eXBlOiBibG9iLnR5cGV9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBibG9iO1xuXHRcdH1cblx0XHQsIEZpbGVTYXZlciA9IGZ1bmN0aW9uKGJsb2IsIG5hbWUsIG5vX2F1dG9fYm9tKSB7XG5cdFx0XHRpZiAoIW5vX2F1dG9fYm9tKSB7XG5cdFx0XHRcdGJsb2IgPSBhdXRvX2JvbShibG9iKTtcblx0XHRcdH1cblx0XHRcdC8vIEZpcnN0IHRyeSBhLmRvd25sb2FkLCB0aGVuIHdlYiBmaWxlc3lzdGVtLCB0aGVuIG9iamVjdCBVUkxzXG5cdFx0XHR2YXJcblx0XHRcdFx0ICBmaWxlc2F2ZXIgPSB0aGlzXG5cdFx0XHRcdCwgdHlwZSA9IGJsb2IudHlwZVxuXHRcdFx0XHQsIGZvcmNlID0gdHlwZSA9PT0gZm9yY2Vfc2F2ZWFibGVfdHlwZVxuXHRcdFx0XHQsIG9iamVjdF91cmxcblx0XHRcdFx0LCBkaXNwYXRjaF9hbGwgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRkaXNwYXRjaChmaWxlc2F2ZXIsIFwid3JpdGVzdGFydCBwcm9ncmVzcyB3cml0ZSB3cml0ZWVuZFwiLnNwbGl0KFwiIFwiKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gb24gYW55IGZpbGVzeXMgZXJyb3JzIHJldmVydCB0byBzYXZpbmcgd2l0aCBvYmplY3QgVVJMc1xuXHRcdFx0XHQsIGZzX2Vycm9yID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKChpc19jaHJvbWVfaW9zIHx8IChmb3JjZSAmJiBpc19zYWZhcmkpKSAmJiB2aWV3LkZpbGVSZWFkZXIpIHtcblx0XHRcdFx0XHRcdC8vIFNhZmFyaSBkb2Vzbid0IGFsbG93IGRvd25sb2FkaW5nIG9mIGJsb2IgdXJsc1xuXHRcdFx0XHRcdFx0dmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cdFx0XHRcdFx0XHRyZWFkZXIub25sb2FkZW5kID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB1cmwgPSBpc19jaHJvbWVfaW9zID8gcmVhZGVyLnJlc3VsdCA6IHJlYWRlci5yZXN1bHQucmVwbGFjZSgvXmRhdGE6W147XSo7LywgJ2RhdGE6YXR0YWNobWVudC9maWxlOycpO1xuXHRcdFx0XHRcdFx0XHR2YXIgcG9wdXAgPSB2aWV3Lm9wZW4odXJsLCAnX2JsYW5rJyk7XG5cdFx0XHRcdFx0XHRcdGlmKCFwb3B1cCkgdmlldy5sb2NhdGlvbi5ocmVmID0gdXJsO1xuXHRcdFx0XHRcdFx0XHR1cmw9dW5kZWZpbmVkOyAvLyByZWxlYXNlIHJlZmVyZW5jZSBiZWZvcmUgZGlzcGF0Y2hpbmdcblx0XHRcdFx0XHRcdFx0ZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuRE9ORTtcblx0XHRcdFx0XHRcdFx0ZGlzcGF0Y2hfYWxsKCk7XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0cmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XG5cdFx0XHRcdFx0XHRmaWxlc2F2ZXIucmVhZHlTdGF0ZSA9IGZpbGVzYXZlci5JTklUO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBkb24ndCBjcmVhdGUgbW9yZSBvYmplY3QgVVJMcyB0aGFuIG5lZWRlZFxuXHRcdFx0XHRcdGlmICghb2JqZWN0X3VybCkge1xuXHRcdFx0XHRcdFx0b2JqZWN0X3VybCA9IGdldF9VUkwoKS5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChmb3JjZSkge1xuXHRcdFx0XHRcdFx0dmlldy5sb2NhdGlvbi5ocmVmID0gb2JqZWN0X3VybDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dmFyIG9wZW5lZCA9IHZpZXcub3BlbihvYmplY3RfdXJsLCBcIl9ibGFua1wiKTtcblx0XHRcdFx0XHRcdGlmICghb3BlbmVkKSB7XG5cdFx0XHRcdFx0XHRcdC8vIEFwcGxlIGRvZXMgbm90IGFsbG93IHdpbmRvdy5vcGVuLCBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvc2FmYXJpL2RvY3VtZW50YXRpb24vVG9vbHMvQ29uY2VwdHVhbC9TYWZhcmlFeHRlbnNpb25HdWlkZS9Xb3JraW5nd2l0aFdpbmRvd3NhbmRUYWJzL1dvcmtpbmd3aXRoV2luZG93c2FuZFRhYnMuaHRtbFxuXHRcdFx0XHRcdFx0XHR2aWV3LmxvY2F0aW9uLmhyZWYgPSBvYmplY3RfdXJsO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRmaWxlc2F2ZXIucmVhZHlTdGF0ZSA9IGZpbGVzYXZlci5ET05FO1xuXHRcdFx0XHRcdGRpc3BhdGNoX2FsbCgpO1xuXHRcdFx0XHRcdHJldm9rZShvYmplY3RfdXJsKTtcblx0XHRcdFx0fVxuXHRcdFx0O1xuXHRcdFx0ZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuSU5JVDtcblxuXHRcdFx0aWYgKGNhbl91c2Vfc2F2ZV9saW5rKSB7XG5cdFx0XHRcdG9iamVjdF91cmwgPSBnZXRfVVJMKCkuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHNhdmVfbGluay5ocmVmID0gb2JqZWN0X3VybDtcblx0XHRcdFx0XHRzYXZlX2xpbmsuZG93bmxvYWQgPSBuYW1lO1xuXHRcdFx0XHRcdGNsaWNrKHNhdmVfbGluayk7XG5cdFx0XHRcdFx0ZGlzcGF0Y2hfYWxsKCk7XG5cdFx0XHRcdFx0cmV2b2tlKG9iamVjdF91cmwpO1xuXHRcdFx0XHRcdGZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLkRPTkU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGZzX2Vycm9yKCk7XG5cdFx0fVxuXHRcdCwgRlNfcHJvdG8gPSBGaWxlU2F2ZXIucHJvdG90eXBlXG5cdFx0LCBzYXZlQXMgPSBmdW5jdGlvbihibG9iLCBuYW1lLCBub19hdXRvX2JvbSkge1xuXHRcdFx0cmV0dXJuIG5ldyBGaWxlU2F2ZXIoYmxvYiwgbmFtZSB8fCBibG9iLm5hbWUgfHwgXCJkb3dubG9hZFwiLCBub19hdXRvX2JvbSk7XG5cdFx0fVxuXHQ7XG5cdC8vIElFIDEwKyAobmF0aXZlIHNhdmVBcylcblx0aWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiYgbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24oYmxvYiwgbmFtZSwgbm9fYXV0b19ib20pIHtcblx0XHRcdG5hbWUgPSBuYW1lIHx8IGJsb2IubmFtZSB8fCBcImRvd25sb2FkXCI7XG5cblx0XHRcdGlmICghbm9fYXV0b19ib20pIHtcblx0XHRcdFx0YmxvYiA9IGF1dG9fYm9tKGJsb2IpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKGJsb2IsIG5hbWUpO1xuXHRcdH07XG5cdH1cblxuXHRGU19wcm90by5hYm9ydCA9IGZ1bmN0aW9uKCl7fTtcblx0RlNfcHJvdG8ucmVhZHlTdGF0ZSA9IEZTX3Byb3RvLklOSVQgPSAwO1xuXHRGU19wcm90by5XUklUSU5HID0gMTtcblx0RlNfcHJvdG8uRE9ORSA9IDI7XG5cblx0RlNfcHJvdG8uZXJyb3IgPVxuXHRGU19wcm90by5vbndyaXRlc3RhcnQgPVxuXHRGU19wcm90by5vbnByb2dyZXNzID1cblx0RlNfcHJvdG8ub253cml0ZSA9XG5cdEZTX3Byb3RvLm9uYWJvcnQgPVxuXHRGU19wcm90by5vbmVycm9yID1cblx0RlNfcHJvdG8ub253cml0ZWVuZCA9XG5cdFx0bnVsbDtcblxuXHRyZXR1cm4gc2F2ZUFzO1xufShcblx0ICAgdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZlxuXHR8fCB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvd1xuXHR8fCB0aGlzLmNvbnRlbnRcbikpO1xuLy8gYHNlbGZgIGlzIHVuZGVmaW5lZCBpbiBGaXJlZm94IGZvciBBbmRyb2lkIGNvbnRlbnQgc2NyaXB0IGNvbnRleHRcbi8vIHdoaWxlIGB0aGlzYCBpcyBuc0lDb250ZW50RnJhbWVNZXNzYWdlTWFuYWdlclxuLy8gd2l0aCBhbiBhdHRyaWJ1dGUgYGNvbnRlbnRgIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHdpbmRvd1xuXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBtb2R1bGUuZXhwb3J0cykge1xuICBtb2R1bGUuZXhwb3J0cy5zYXZlQXMgPSBzYXZlQXM7XG59IGVsc2UgaWYgKCh0eXBlb2YgZGVmaW5lICE9PSBcInVuZGVmaW5lZFwiICYmIGRlZmluZSAhPT0gbnVsbCkgJiYgKGRlZmluZS5hbWQgIT09IG51bGwpKSB7XG4gIGRlZmluZShcIkZpbGVTYXZlci5qc1wiLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gc2F2ZUFzO1xuICB9KTtcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9maWxlLXNhdmVyL0ZpbGVTYXZlci5qc1xuLy8gbW9kdWxlIGlkID0gMTM4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2llZWU3NTQvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDEzOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuXHR2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLldyaXRlciA9IGV4cG9ydHMuVmV4RmxvdyA9IGV4cG9ydHMuVXRpbHMgPSBleHBvcnRzLlRyYWNrID0gZXhwb3J0cy5Qcm9ncmFtQ2hhbmdlRXZlbnQgPSBleHBvcnRzLk5vdGVPbkV2ZW50ID0gZXhwb3J0cy5Ob3RlT2ZmRXZlbnQgPSBleHBvcnRzLk5vdGVFdmVudCA9IGV4cG9ydHMuTWV0YUV2ZW50ID0gZXhwb3J0cy5Db250cm9sbGVyQ2hhbmdlRXZlbnQgPSBleHBvcnRzLkNvbnN0YW50cyA9IGV4cG9ydHMuQ2h1bmsgPSB1bmRlZmluZWQ7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxudmFyIF90b25hbE1pZGkgPSByZXF1aXJlKCd0b25hbC1taWRpJyk7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbi8qKlxuICogT2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjaHVuayBzZWN0aW9uIG9mIGEgTUlESSBmaWxlLlxuICogQHBhcmFtIHtvYmplY3R9IGZpZWxkcyAtIHt0eXBlOiBudW1iZXIsIGRhdGE6IGFycmF5LCBzaXplOiBhcnJheX1cbiAqIEByZXR1cm4ge0NodW5rfVxuICovXG52YXIgQ2h1bmsgPSBmdW5jdGlvbiBDaHVuayhmaWVsZHMpIHtcblx0X2NsYXNzQ2FsbENoZWNrKHRoaXMsIENodW5rKTtcblxuXHR0aGlzLnR5cGUgPSBmaWVsZHMudHlwZTtcblx0dGhpcy5kYXRhID0gZmllbGRzLmRhdGE7XG5cdHRoaXMuc2l6ZSA9IFswLCAwLCAwLCBmaWVsZHMuZGF0YS5sZW5ndGhdO1xufTtcblxuZXhwb3J0cy5DaHVuayA9IENodW5rO1xuLyoqXG4gKiBNSURJIGZpbGUgZm9ybWF0IGNvbnN0YW50cywgaW5jbHVkaW5nIG5vdGUgLT4gTUlESSBudW1iZXIgdHJhbnNsYXRpb24uXG4gKiBAcmV0dXJuIHtDb25zdGFudHN9XG4gKi9cblxudmFyIENvbnN0YW50cyA9IHtcblx0VkVSU0lPTjogJzEuNS4yJyxcblx0SEVBREVSX0NIVU5LX1RZUEU6IFsweDRkLCAweDU0LCAweDY4LCAweDY0XSwgLy8gTXRoZFxuXHRIRUFERVJfQ0hVTktfTEVOR1RIOiBbMHgwMCwgMHgwMCwgMHgwMCwgMHgwNl0sIC8vIEhlYWRlciBzaXplIGZvciBTTUZcblx0SEVBREVSX0NIVU5LX0ZPUk1BVDA6IFsweDAwLCAweDAwXSwgLy8gTWlkaSBUeXBlIDAgaWRcblx0SEVBREVSX0NIVU5LX0ZPUk1BVDE6IFsweDAwLCAweDAxXSwgLy8gTWlkaSBUeXBlIDEgaWRcblx0SEVBREVSX0NIVU5LX0RJVklTSU9OOiBbMHgwMCwgMHg4MF0sIC8vIERlZmF1bHRzIHRvIDEyOCB0aWNrcyBwZXIgYmVhdFxuXHRUUkFDS19DSFVOS19UWVBFOiBbMHg0ZCwgMHg1NCwgMHg3MiwgMHg2Yl0sIC8vIE1UcmssXG5cdE1FVEFfRVZFTlRfSUQ6IDB4RkYsXG5cdE1FVEFfVEVYVF9JRDogMHgwMSxcblx0TUVUQV9DT1BZUklHSFRfSUQ6IDB4MDIsXG5cdE1FVEFfVFJBQ0tfTkFNRV9JRDogMHgwMyxcblx0TUVUQV9JTlNUUlVNRU5UX05BTUVfSUQ6IDB4MDQsXG5cdE1FVEFfTFlSSUNfSUQ6IDB4MDUsXG5cdE1FVEFfTUFSS0VSX0lEOiAweDA2LFxuXHRNRVRBX0NVRV9QT0lOVDogMHgwNyxcblx0TUVUQV9URU1QT19JRDogMHg1MSxcblx0TUVUQV9TTVRQRV9PRkZTRVQ6IDB4NTQsXG5cdE1FVEFfVElNRV9TSUdOQVRVUkVfSUQ6IDB4NTgsXG5cdE1FVEFfS0VZX1NJR05BVFVSRV9JRDogMHg1OSxcblx0TUVUQV9FTkRfT0ZfVFJBQ0tfSUQ6IFsweDJGLCAweDAwXSxcblx0Q09OVFJPTExFUl9DSEFOR0VfU1RBVFVTOiAweEIwLCAvLyBpbmNsdWRlcyBjaGFubmVsIG51bWJlciAoMClcblx0UFJPR1JBTV9DSEFOR0VfU1RBVFVTOiAweEMwIC8vIGluY2x1ZGVzIGNoYW5uZWwgbnVtYmVyICgwKVxufTtcblxuZXhwb3J0cy5Db25zdGFudHMgPSBDb25zdGFudHM7XG4vKipcbiAqIEhvbGRzIGFsbCBkYXRhIGZvciBhIFwiY29udHJvbGxlciBjaGFuZ2VcIiBNSURJIGV2ZW50XG4gKiBAcGFyYW0ge29iamVjdH0gZmllbGRzIHtjb250cm9sbGVyTnVtYmVyOiBpbnRlZ2VyLCBjb250cm9sbGVyVmFsdWU6IGludGVnZXJ9XG4gKiBAcmV0dXJuIHtDb250cm9sbGVyQ2hhbmdlRXZlbnR9XG4gKi9cblxudmFyIENvbnRyb2xsZXJDaGFuZ2VFdmVudCA9IGZ1bmN0aW9uIENvbnRyb2xsZXJDaGFuZ2VFdmVudChmaWVsZHMpIHtcblx0X2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbnRyb2xsZXJDaGFuZ2VFdmVudCk7XG5cblx0dGhpcy50eXBlID0gJ2NvbnRyb2xsZXInO1xuXHQvLyBkZWx0YSB0aW1lIGRlZmF1bHRzIHRvIDAuXG5cdHRoaXMuZGF0YSA9IFV0aWxzLm51bWJlclRvVmFyaWFibGVMZW5ndGgoMHgwMCkuY29uY2F0KENvbnN0YW50cy5DT05UUk9MTEVSX0NIQU5HRV9TVEFUVVMsIGZpZWxkcy5jb250cm9sbGVyTnVtYmVyLCBmaWVsZHMuY29udHJvbGxlclZhbHVlKTtcbn07XG5cbmV4cG9ydHMuQ29udHJvbGxlckNoYW5nZUV2ZW50ID0gQ29udHJvbGxlckNoYW5nZUV2ZW50O1xuLyoqXG4gKiBPYmplY3QgcmVwcmVzZW50YXRpb24gb2YgYSBtZXRhIGV2ZW50LlxuICogQHBhcmFtIHtvYmplY3R9IGZpZWxkcyAtIHR5cGUsIGRhdGFcbiAqIEByZXR1cm4ge01ldGFFdmVudH1cbiAqL1xuXG52YXIgTWV0YUV2ZW50ID0gZnVuY3Rpb24gTWV0YUV2ZW50KGZpZWxkcykge1xuXHRfY2xhc3NDYWxsQ2hlY2sodGhpcywgTWV0YUV2ZW50KTtcblxuXHR0aGlzLnR5cGUgPSAnbWV0YSc7XG5cdHRoaXMuZGF0YSA9IFV0aWxzLm51bWJlclRvVmFyaWFibGVMZW5ndGgoMHgwMCk7IC8vIFN0YXJ0IHdpdGggemVybyB0aW1lIGRlbHRhXG5cdHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5jb25jYXQoQ29uc3RhbnRzLk1FVEFfRVZFTlRfSUQsIGZpZWxkcy5kYXRhKTtcbn07XG5cbmV4cG9ydHMuTWV0YUV2ZW50ID0gTWV0YUV2ZW50O1xuLyoqXG4gKiBXcmFwcGVyIGZvciBub3RlT25FdmVudC9ub3RlT2ZmRXZlbnQgb2JqZWN0cyB0aGF0IGJ1aWxkcyBib3RoIGV2ZW50cy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBmaWVsZHMgLSB7cGl0Y2g6ICdbQzRdJywgZHVyYXRpb246ICc0Jywgd2FpdDogJzQnLCB2ZWxvY2l0eTogMS0xMDB9XG4gKiBAcmV0dXJuIHtOb3RlRXZlbnR9XG4gKi9cblxudmFyIE5vdGVFdmVudCA9IGZ1bmN0aW9uICgpIHtcblx0ZnVuY3Rpb24gTm90ZUV2ZW50KGZpZWxkcykge1xuXHRcdF9jbGFzc0NhbGxDaGVjayh0aGlzLCBOb3RlRXZlbnQpO1xuXG5cdFx0dGhpcy50eXBlID0gJ25vdGUnO1xuXHRcdHRoaXMucGl0Y2ggPSBVdGlscy50b0FycmF5KGZpZWxkcy5waXRjaCk7XG5cdFx0dGhpcy53YWl0ID0gZmllbGRzLndhaXQgfHwgMDtcblx0XHR0aGlzLmR1cmF0aW9uID0gZmllbGRzLmR1cmF0aW9uO1xuXHRcdHRoaXMuc2VxdWVudGlhbCA9IGZpZWxkcy5zZXF1ZW50aWFsIHx8IGZhbHNlO1xuXHRcdHRoaXMudmVsb2NpdHkgPSBmaWVsZHMudmVsb2NpdHkgfHwgNTA7XG5cdFx0dGhpcy5jaGFubmVsID0gZmllbGRzLmNoYW5uZWwgfHwgMTtcblx0XHR0aGlzLnJlcGVhdCA9IGZpZWxkcy5yZXBlYXQgfHwgMTtcblx0XHR0aGlzLnZlbG9jaXR5ID0gdGhpcy5jb252ZXJ0VmVsb2NpdHkodGhpcy52ZWxvY2l0eSk7XG5cdFx0dGhpcy5ncmFjZSA9IGZpZWxkcy5ncmFjZTtcblx0XHR0aGlzLmJ1aWxkRGF0YSgpO1xuXHR9XG5cblx0LyoqXG4gICogQnVpbGRzIGludCBhcnJheSBmb3IgdGhpcyBldmVudC5cbiAgKiBAcmV0dXJuIHtOb3RlRXZlbnR9XG4gICovXG5cblxuXHRfY3JlYXRlQ2xhc3MoTm90ZUV2ZW50LCBbe1xuXHRcdGtleTogJ2J1aWxkRGF0YScsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGJ1aWxkRGF0YSgpIHtcblx0XHRcdHRoaXMuZGF0YSA9IFtdO1xuXG5cdFx0XHR2YXIgdGlja0R1cmF0aW9uID0gdGhpcy5nZXRUaWNrRHVyYXRpb24odGhpcy5kdXJhdGlvbiwgJ25vdGUnKTtcblx0XHRcdHZhciByZXN0RHVyYXRpb24gPSB0aGlzLmdldFRpY2tEdXJhdGlvbih0aGlzLndhaXQsICdyZXN0Jyk7XG5cblx0XHRcdC8vIEFwcGx5IGdyYWNlIG5vdGUocykgYW5kIHN1YnRyYWN0IHRpY2tzIChjdXJyZW50bHkgMSB0aWNrIHBlciBncmFjZSBub3RlKSBmcm9tIHRpY2tEdXJhdGlvbiBzbyBuZXQgdmFsdWUgaXMgdGhlIHNhbWVcblx0XHRcdGlmICh0aGlzLmdyYWNlKSB7XG5cdFx0XHRcdHZhciBncmFjZUR1cmF0aW9uID0gMTtcblx0XHRcdFx0dGhpcy5ncmFjZSA9IFV0aWxzLnRvQXJyYXkodGhpcy5ncmFjZSk7XG5cdFx0XHRcdHRoaXMuZ3JhY2UuZm9yRWFjaChmdW5jdGlvbiAocGl0Y2gpIHtcblx0XHRcdFx0XHR2YXIgbm90ZUV2ZW50ID0gbmV3IE5vdGVFdmVudCh7IHBpdGNoOiB0aGlzLmdyYWNlLCBkdXJhdGlvbjogJ1QnICsgZ3JhY2VEdXJhdGlvbiB9KTtcblx0XHRcdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEuY29uY2F0KG5vdGVFdmVudC5kYXRhKTtcblxuXHRcdFx0XHRcdHRpY2tEdXJhdGlvbiAtPSBncmFjZUR1cmF0aW9uO1xuXHRcdFx0XHR9LCB0aGlzKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gZmllbGRzLnBpdGNoIGNvdWxkIGJlIGFuIGFycmF5IG9mIHBpdGNoZXMuXG5cdFx0XHQvLyBJZiBzbyBjcmVhdGUgbm90ZSBldmVudHMgZm9yIGVhY2ggYW5kIGFwcGx5IHRoZSBzYW1lIGR1cmF0aW9uLlxuXHRcdFx0dmFyIG5vdGVPbiwgbm90ZU9mZjtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KHRoaXMucGl0Y2gpKSB7XG5cdFx0XHRcdC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyBhIGNob3JkIGlmIGl0J3MgYW4gYXJyYXkgb2Ygbm90ZXMgdGhhdCByZXF1aXJlcyBvbmUgTm90ZU9uRXZlbnQuXG5cdFx0XHRcdC8vIElmIHRoaXMuc2VxdWVudGlhbCA9PT0gdHJ1ZSB0aGVuIGl0J3MgYSBzZXF1ZW50aWFsIHN0cmluZyBvZiBub3RlcyB0aGF0IHJlcXVpcmVzIHNlcGFyYXRlIE5vdGVPbkV2ZW50cy5cblx0XHRcdFx0aWYgKCF0aGlzLnNlcXVlbnRpYWwpIHtcblx0XHRcdFx0XHQvLyBIYW5kbGUgcmVwZWF0XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLnJlcGVhdDsgaisrKSB7XG5cdFx0XHRcdFx0XHQvLyBOb3RlIG9uXG5cdFx0XHRcdFx0XHR0aGlzLnBpdGNoLmZvckVhY2goZnVuY3Rpb24gKHAsIGkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGkgPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdG5vdGVPbiA9IG5ldyBOb3RlT25FdmVudCh7IGRhdGE6IFV0aWxzLm51bWJlclRvVmFyaWFibGVMZW5ndGgocmVzdER1cmF0aW9uKS5jb25jYXQodGhpcy5nZXROb3RlT25TdGF0dXMoKSwgVXRpbHMuZ2V0UGl0Y2gocCksIHRoaXMudmVsb2NpdHkpIH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFJ1bm5pbmcgc3RhdHVzIChjYW4gb21taXQgdGhlIG5vdGUgb24gc3RhdHVzKVxuXHRcdFx0XHRcdFx0XHRcdG5vdGVPbiA9IG5ldyBOb3RlT25FdmVudCh7IGRhdGE6IFswLCBVdGlscy5nZXRQaXRjaChwKSwgdGhpcy52ZWxvY2l0eV0gfSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEuY29uY2F0KG5vdGVPbi5kYXRhKTtcblx0XHRcdFx0XHRcdH0sIHRoaXMpO1xuXG5cdFx0XHRcdFx0XHQvLyBOb3RlIG9mZlxuXHRcdFx0XHRcdFx0dGhpcy5waXRjaC5mb3JFYWNoKGZ1bmN0aW9uIChwLCBpKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChpID09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRub3RlT2ZmID0gbmV3IE5vdGVPZmZFdmVudCh7IGRhdGE6IFV0aWxzLm51bWJlclRvVmFyaWFibGVMZW5ndGgodGlja0R1cmF0aW9uKS5jb25jYXQodGhpcy5nZXROb3RlT2ZmU3RhdHVzKCksIFV0aWxzLmdldFBpdGNoKHApLCB0aGlzLnZlbG9jaXR5KSB9KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBSdW5uaW5nIHN0YXR1cyAoY2FuIG9tbWl0IHRoZSBub3RlIG9mZiBzdGF0dXMpXG5cdFx0XHRcdFx0XHRcdFx0bm90ZU9mZiA9IG5ldyBOb3RlT2ZmRXZlbnQoeyBkYXRhOiBbMCwgVXRpbHMuZ2V0UGl0Y2gocCksIHRoaXMudmVsb2NpdHldIH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5kYXRhID0gdGhpcy5kYXRhLmNvbmNhdChub3RlT2ZmLmRhdGEpO1xuXHRcdFx0XHRcdFx0fSwgdGhpcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIEhhbmRsZSByZXBlYXRcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMucmVwZWF0OyBqKyspIHtcblx0XHRcdFx0XHRcdHRoaXMucGl0Y2guZm9yRWFjaChmdW5jdGlvbiAocCwgaSkge1xuXHRcdFx0XHRcdFx0XHQvLyByZXN0RHVyYXRpb24gb25seSBhcHBsaWVzIHRvIGZpcnN0IG5vdGVcblx0XHRcdFx0XHRcdFx0aWYgKGkgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdER1cmF0aW9uID0gMDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIElmIGR1cmF0aW9uIGlzIDh0aCB0cmlwbGV0cyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB0b3RhbCB0aWNrcyA9PSBxdWFydGVyIG5vdGUuXG5cdFx0XHRcdFx0XHRcdC8vIFNvLCB0aGUgbGFzdCBvbmUgd2lsbCBuZWVkIHRvIGJlIHRoZSByZW1haW5kZXJcblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuZHVyYXRpb24gPT09ICc4dCcgJiYgaSA9PSB0aGlzLnBpdGNoLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcXVhcnRlclRpY2tzID0gVXRpbHMubnVtYmVyRnJvbUJ5dGVzKENvbnN0YW50cy5IRUFERVJfQ0hVTktfRElWSVNJT04pO1xuXHRcdFx0XHRcdFx0XHRcdHRpY2tEdXJhdGlvbiA9IHF1YXJ0ZXJUaWNrcyAtIHRpY2tEdXJhdGlvbiAqIDI7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRub3RlT24gPSBuZXcgTm90ZU9uRXZlbnQoeyBkYXRhOiBVdGlscy5udW1iZXJUb1ZhcmlhYmxlTGVuZ3RoKHJlc3REdXJhdGlvbikuY29uY2F0KFt0aGlzLmdldE5vdGVPblN0YXR1cygpLCBVdGlscy5nZXRQaXRjaChwKSwgdGhpcy52ZWxvY2l0eV0pIH0pO1xuXHRcdFx0XHRcdFx0XHRub3RlT2ZmID0gbmV3IE5vdGVPZmZFdmVudCh7IGRhdGE6IFV0aWxzLm51bWJlclRvVmFyaWFibGVMZW5ndGgodGlja0R1cmF0aW9uKS5jb25jYXQoW3RoaXMuZ2V0Tm90ZU9mZlN0YXR1cygpLCBVdGlscy5nZXRQaXRjaChwKSwgdGhpcy52ZWxvY2l0eV0pIH0pO1xuXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5jb25jYXQobm90ZU9uLmRhdGEsIG5vdGVPZmYuZGF0YSk7XG5cdFx0XHRcdFx0XHR9LCB0aGlzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgJ3BpdGNoIG11c3QgYmUgYW4gYXJyYXkuJztcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdjb252ZXJ0VmVsb2NpdHknLFxuXG5cblx0XHQvKipcbiAgICogQ29udmVydHMgdmVsb2NpdHkgdG8gdmFsdWUgMC0xMjdcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZlbG9jaXR5IC0gVmVsb2NpdHkgdmFsdWUgMS0xMDBcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cblx0XHR2YWx1ZTogZnVuY3Rpb24gY29udmVydFZlbG9jaXR5KHZlbG9jaXR5KSB7XG5cdFx0XHQvLyBNYXggcGFzc2VkIHZhbHVlIGxpbWl0ZWQgdG8gMTAwXG5cdFx0XHR2ZWxvY2l0eSA9IHZlbG9jaXR5ID4gMTAwID8gMTAwIDogdmVsb2NpdHk7XG5cdFx0XHRyZXR1cm4gTWF0aC5yb3VuZCh2ZWxvY2l0eSAvIDEwMCAqIDEyNyk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnZ2V0VGlja0R1cmF0aW9uJyxcblxuXG5cdFx0LyoqXG4gICAqIEdldHMgdGhlIHRvdGFsIG51bWJlciBvZiB0aWNrcyBiYXNlZCBvbiBwYXNzZWQgZHVyYXRpb24uXG4gICAqIE5vdGU6IHR5cGU9PSdub3RlJyBkZWZhdWx0cyB0byBxdWFydGVyIG5vdGUsIHR5cGU9PT0ncmVzdCcgZGVmYXVsdHMgdG8gMFxuICAgKiBAcGFyYW0geyhzdHJpbmd8YXJyYXkpfSBkdXJhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBbJ25vdGUnLCAncmVzdCddXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGdldFRpY2tEdXJhdGlvbihkdXJhdGlvbiwgdHlwZSkge1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoZHVyYXRpb24pKSB7XG5cdFx0XHRcdC8vIFJlY3Vyc2l2ZWx5IGV4ZWN1dGUgdGhpcyBtZXRob2QgZm9yIGVhY2ggaXRlbSBpbiB0aGUgYXJyYXkgYW5kIHJldHVybiB0aGUgc3VtIG9mIHRpY2sgZHVyYXRpb25zLlxuXHRcdFx0XHRyZXR1cm4gZHVyYXRpb24ubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmdldFRpY2tEdXJhdGlvbih2YWx1ZSwgdHlwZSk7XG5cdFx0XHRcdH0sIHRoaXMpLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuXHRcdFx0XHRcdHJldHVybiBhICsgYjtcblx0XHRcdFx0fSwgMCk7XG5cdFx0XHR9XG5cblx0XHRcdGR1cmF0aW9uID0gZHVyYXRpb24udG9TdHJpbmcoKTtcblxuXHRcdFx0aWYgKGR1cmF0aW9uLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAndCcpIHtcblx0XHRcdFx0Ly8gSWYgZHVyYXRpb24gc3RhcnRzIHdpdGggJ3QnIHRoZW4gdGhlIG51bWJlciB0aGF0IGZvbGxvd3MgaXMgYW4gZXhwbGljaXQgdGljayBjb3VudFxuXHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoZHVyYXRpb24uc3Vic3RyaW5nKDEpKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTmVlZCB0byBhcHBseSBkdXJhdGlvbiBoZXJlLiAgUXVhcnRlciBub3RlID09IENvbnN0YW50cy5IRUFERVJfQ0hVTktfRElWSVNJT05cblx0XHRcdC8vIFJvdW5kaW5nIG9ubHkgYXBwbGllcyB0byB0cmlwbGV0cywgd2hpY2ggdGhlIHJlbWFpbmRlciBpcyBoYW5kbGVkIGJlbG93XG5cdFx0XHR2YXIgcXVhcnRlclRpY2tzID0gVXRpbHMubnVtYmVyRnJvbUJ5dGVzKENvbnN0YW50cy5IRUFERVJfQ0hVTktfRElWSVNJT04pO1xuXHRcdFx0cmV0dXJuIE1hdGgucm91bmQocXVhcnRlclRpY2tzICogdGhpcy5nZXREdXJhdGlvbk11bHRpcGxpZXIoZHVyYXRpb24sIHR5cGUpKTtcblx0XHR9XG5cblx0XHQvKipcbiAgICogR2V0cyB3aGF0IHRvIG11bHRpcGxlIHRpY2tzL3F1YXJ0ZXIgbm90ZSBieSB0byBnZXQgdGhlIHNwZWNpZmllZCBkdXJhdGlvbi5cbiAgICogTm90ZTogdHlwZT09J25vdGUnIGRlZmF1bHRzIHRvIHF1YXJ0ZXIgbm90ZSwgdHlwZT09PSdyZXN0JyBkZWZhdWx0cyB0byAwXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkdXJhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBbJ25vdGUnLCdyZXN0J11cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cblxuXHR9LCB7XG5cdFx0a2V5OiAnZ2V0RHVyYXRpb25NdWx0aXBsaWVyJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gZ2V0RHVyYXRpb25NdWx0aXBsaWVyKGR1cmF0aW9uLCB0eXBlKSB7XG5cdFx0XHQvLyBOZWVkIHRvIGFwcGx5IGR1cmF0aW9uIGhlcmUuICBRdWFydGVyIG5vdGUgPT0gQ29uc3RhbnRzLkhFQURFUl9DSFVOS19ESVZJU0lPTlxuXHRcdFx0c3dpdGNoIChkdXJhdGlvbikge1xuXHRcdFx0XHRjYXNlICcwJzpcblx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0Y2FzZSAnMSc6XG5cdFx0XHRcdFx0cmV0dXJuIDQ7XG5cdFx0XHRcdGNhc2UgJzInOlxuXHRcdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0XHRjYXNlICdkMic6XG5cdFx0XHRcdFx0cmV0dXJuIDM7XG5cdFx0XHRcdGNhc2UgJzQnOlxuXHRcdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0XHRjYXNlICc0dCc6XG5cdFx0XHRcdFx0cmV0dXJuIDAuNjY2O1xuXHRcdFx0XHRjYXNlICdkNCc6XG5cdFx0XHRcdFx0cmV0dXJuIDEuNTtcblx0XHRcdFx0Y2FzZSAnOCc6XG5cdFx0XHRcdFx0cmV0dXJuIDAuNTtcblx0XHRcdFx0Y2FzZSAnOHQnOlxuXHRcdFx0XHRcdC8vIEZvciA4dGggdHJpcGxldHMsIGxldCdzIGRpdmlkZSBhIHF1YXJ0ZXIgYnkgMywgcm91bmQgdG8gdGhlIG5lYXJlc3QgaW50LCBhbmQgc3Vic3RyYWN0IHRoZSByZW1haW5kZXIgdG8gdGhlIGxhc3Qgb25lLlxuXHRcdFx0XHRcdHJldHVybiAwLjMzO1xuXHRcdFx0XHRjYXNlICdkOCc6XG5cdFx0XHRcdFx0cmV0dXJuIDAuNzU7XG5cdFx0XHRcdGNhc2UgJzE2Jzpcblx0XHRcdFx0XHRyZXR1cm4gMC4yNTtcblx0XHRcdFx0Y2FzZSAnMTZ0Jzpcblx0XHRcdFx0XHRyZXR1cm4gMC4xNjY7XG5cdFx0XHRcdGNhc2UgJzMyJzpcblx0XHRcdFx0XHRyZXR1cm4gMC4xMjU7XG5cdFx0XHRcdGNhc2UgJzY0Jzpcblx0XHRcdFx0XHRyZXR1cm4gMC4wNjI1O1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHQvLyBOb3RlcyBkZWZhdWx0IHRvIGEgcXVhcnRlciwgcmVzdHMgZGVmYXVsdCB0byAwXG5cdFx0XHRcdC8vcmV0dXJuIHR5cGUgPT09ICdub3RlJyA/IDEgOiAwO1xuXHRcdFx0fVxuXG5cdFx0XHR0aHJvdyBkdXJhdGlvbiArICcgaXMgbm90IGEgdmFsaWQgZHVyYXRpb24uJztcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdnZXROb3RlT25TdGF0dXMnLFxuXG5cblx0XHQvKipcbiAgICogR2V0cyB0aGUgbm90ZSBvbiBzdGF0dXMgY29kZSBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQgY2hhbm5lbC4gMHg5ezAtRn1cbiAgICogTm90ZSBvbiBhdCBjaGFubmVsIDAgaXMgMHg5MCAoMTQ0KVxuICAgKiAwID0gQ2ggMVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBnZXROb3RlT25TdGF0dXMoKSB7XG5cdFx0XHRyZXR1cm4gMTQ0ICsgdGhpcy5jaGFubmVsIC0gMTtcblx0XHR9XG5cblx0XHQvKipcbiAgICogR2V0cyB0aGUgbm90ZSBvZmYgc3RhdHVzIGNvZGUgYmFzZWQgb24gdGhlIHNlbGVjdGVkIGNoYW5uZWwuIDB4OHswLUZ9XG4gICAqIE5vdGUgb2ZmIGF0IGNoYW5uZWwgMCBpcyAweDgwICgxMjgpXG4gICAqIDAgPSBDaCAxXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG5cblx0fSwge1xuXHRcdGtleTogJ2dldE5vdGVPZmZTdGF0dXMnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBnZXROb3RlT2ZmU3RhdHVzKCkge1xuXHRcdFx0cmV0dXJuIDEyOCArIHRoaXMuY2hhbm5lbCAtIDE7XG5cdFx0fVxuXHR9XSk7XG5cblx0cmV0dXJuIE5vdGVFdmVudDtcbn0oKTtcblxuZXhwb3J0cy5Ob3RlRXZlbnQgPSBOb3RlRXZlbnQ7XG4vKipcbiAqIEhvbGRzIGFsbCBkYXRhIGZvciBhIFwibm90ZSBvZmZcIiBNSURJIGV2ZW50XG4gKiBAcGFyYW0ge29iamVjdH0gZmllbGRzIHtkYXRhOiBbXX1cbiAqIEByZXR1cm4ge05vdGVPZmZFdmVudH1cbiAqL1xuXG52YXIgTm90ZU9mZkV2ZW50ID0gZnVuY3Rpb24gTm90ZU9mZkV2ZW50KGZpZWxkcykge1xuXHRfY2xhc3NDYWxsQ2hlY2sodGhpcywgTm90ZU9mZkV2ZW50KTtcblxuXHR0aGlzLmRhdGEgPSBmaWVsZHMuZGF0YTtcbn07XG5cbmV4cG9ydHMuTm90ZU9mZkV2ZW50ID0gTm90ZU9mZkV2ZW50O1xuLyoqXG4gKiBIb2xkcyBhbGwgZGF0YSBmb3IgYSBcIm5vdGUgb25cIiBNSURJIGV2ZW50XG4gKiBAcGFyYW0ge29iamVjdH0gZmllbGRzIHtkYXRhOiBbXX1cbiAqIEByZXR1cm4ge05vdGVPbkV2ZW50fVxuICovXG5cbnZhciBOb3RlT25FdmVudCA9IGZ1bmN0aW9uIE5vdGVPbkV2ZW50KGZpZWxkcykge1xuXHRfY2xhc3NDYWxsQ2hlY2sodGhpcywgTm90ZU9uRXZlbnQpO1xuXG5cdHRoaXMuZGF0YSA9IGZpZWxkcy5kYXRhO1xufTtcblxuZXhwb3J0cy5Ob3RlT25FdmVudCA9IE5vdGVPbkV2ZW50O1xuLyoqXG4gKiBIb2xkcyBhbGwgZGF0YSBmb3IgYSBcInByb2dyYW0gY2hhbmdlXCIgTUlESSBldmVudFxuICogQHBhcmFtIHtvYmplY3R9IGZpZWxkcyB7aW5zdHJ1bWVudDogaW50ZWdlcn1cbiAqIEByZXR1cm4ge1Byb2dyYW1DaGFuZ2VFdmVudH1cbiAqL1xuXG52YXIgUHJvZ3JhbUNoYW5nZUV2ZW50ID0gZnVuY3Rpb24gUHJvZ3JhbUNoYW5nZUV2ZW50KGZpZWxkcykge1xuXHRfY2xhc3NDYWxsQ2hlY2sodGhpcywgUHJvZ3JhbUNoYW5nZUV2ZW50KTtcblxuXHR0aGlzLnR5cGUgPSAncHJvZ3JhbSc7XG5cdC8vIGRlbHRhIHRpbWUgZGVmYXVsdHMgdG8gMC5cblx0dGhpcy5kYXRhID0gVXRpbHMubnVtYmVyVG9WYXJpYWJsZUxlbmd0aCgweDAwKS5jb25jYXQoQ29uc3RhbnRzLlBST0dSQU1fQ0hBTkdFX1NUQVRVUywgZmllbGRzLmluc3RydW1lbnQpO1xufTtcblxuZXhwb3J0cy5Qcm9ncmFtQ2hhbmdlRXZlbnQgPSBQcm9ncmFtQ2hhbmdlRXZlbnQ7XG4vKipcbiAqIEhvbGRzIGFsbCBkYXRhIGZvciBhIHRyYWNrLlxuICogQHBhcmFtIHtvYmplY3R9IGZpZWxkcyB7dHlwZTogbnVtYmVyLCBkYXRhOiBhcnJheSwgc2l6ZTogYXJyYXksIGV2ZW50czogYXJyYXl9XG4gKiBAcmV0dXJuIHtUcmFja31cbiAqL1xuXG52YXIgVHJhY2sgPSBmdW5jdGlvbiAoKSB7XG5cdGZ1bmN0aW9uIFRyYWNrKCkge1xuXHRcdF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcmFjayk7XG5cblx0XHR0aGlzLnR5cGUgPSBDb25zdGFudHMuVFJBQ0tfQ0hVTktfVFlQRTtcblx0XHR0aGlzLmRhdGEgPSBbXTtcblx0XHR0aGlzLnNpemUgPSBbXTtcblx0XHR0aGlzLmV2ZW50cyA9IFtdO1xuXHR9XG5cblx0LyoqXG4gICogQWRkcyBhbnkgZXZlbnQgdHlwZSB0byB0aGUgdHJhY2suXG4gICogQHBhcmFtIHsoTm90ZUV2ZW50fE1ldGFFdmVudHxQcm9ncmFtQ2hhbmdlRXZlbnQpfSBldmVudCAtIEV2ZW50IG9iamVjdC5cbiAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtYXBGdW5jdGlvbiAtIENhbGxiYWNrIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGFwcGx5IHNwZWNpZmljIHByb3BlcnRpZXMgdG8gYWxsIGV2ZW50cy4gXG4gICogQHJldHVybiB7VHJhY2t9XG4gICovXG5cblxuXHRfY3JlYXRlQ2xhc3MoVHJhY2ssIFt7XG5cdFx0a2V5OiAnYWRkRXZlbnQnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBhZGRFdmVudChldmVudCwgbWFwRnVuY3Rpb24pIHtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSkge1xuXHRcdFx0XHRldmVudC5mb3JFYWNoKGZ1bmN0aW9uIChlLCBpKSB7XG5cdFx0XHRcdFx0Ly8gSGFuZGxlIG1hcCBmdW5jdGlvbiBpZiBwcm92aWRlZFxuXHRcdFx0XHRcdGlmICh0eXBlb2YgbWFwRnVuY3Rpb24gPT09ICdmdW5jdGlvbicgJiYgZS50eXBlID09PSAnbm90ZScpIHtcblx0XHRcdFx0XHRcdHZhciBwcm9wZXJ0aWVzID0gbWFwRnVuY3Rpb24oaSwgZSk7XG5cblx0XHRcdFx0XHRcdGlmICgodHlwZW9mIHByb3BlcnRpZXMgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKHByb3BlcnRpZXMpKSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiBpbiBwcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdFx0XHRcdFx0c3dpdGNoIChqKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGUuZHVyYXRpb24gPSBwcm9wZXJ0aWVzW2pdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJ3NlcXVlbnRpYWwnOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlLnNlcXVlbnRpYWwgPSBwcm9wZXJ0aWVzW2pdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJ3ZlbG9jaXR5Jzpcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZS52ZWxvY2l0eSA9IGUuY29udmVydFZlbG9jaXR5KHByb3BlcnRpZXNbal0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyBHb3R0YSBidWlsZCB0aGF0IGRhdGFcblx0XHRcdFx0XHRcdFx0ZS5idWlsZERhdGEoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEuY29uY2F0KGUuZGF0YSk7XG5cdFx0XHRcdFx0dGhpcy5zaXplID0gVXRpbHMubnVtYmVyVG9CeXRlcyh0aGlzLmRhdGEubGVuZ3RoLCA0KTsgLy8gNCBieXRlcyBsb25nXG5cdFx0XHRcdFx0dGhpcy5ldmVudHMucHVzaChlKTtcblx0XHRcdFx0fSwgdGhpcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEuY29uY2F0KGV2ZW50LmRhdGEpO1xuXHRcdFx0XHR0aGlzLnNpemUgPSBVdGlscy5udW1iZXJUb0J5dGVzKHRoaXMuZGF0YS5sZW5ndGgsIDQpOyAvLyA0IGJ5dGVzIGxvbmdcblx0XHRcdFx0dGhpcy5ldmVudHMucHVzaChldmVudCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdC8qKlxuICAgKiBTZXRzIHRlbXBvIG9mIHRoZSBNSURJIGZpbGUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBicG0gLSBUZW1wbyBpbiBiZWF0cyBwZXIgbWludXRlLlxuICAgKiBAcmV0dXJuIHtUcmFja31cbiAgICovXG5cblx0fSwge1xuXHRcdGtleTogJ3NldFRlbXBvJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gc2V0VGVtcG8oYnBtKSB7XG5cdFx0XHR2YXIgZXZlbnQgPSBuZXcgTWV0YUV2ZW50KHsgZGF0YTogW0NvbnN0YW50cy5NRVRBX1RFTVBPX0lEXSB9KTtcblx0XHRcdGV2ZW50LmRhdGEucHVzaCgweDAzKTsgLy8gU2l6ZVxuXHRcdFx0dmFyIHRlbXBvID0gTWF0aC5yb3VuZCg2MDAwMDAwMCAvIGJwbSk7XG5cdFx0XHRldmVudC5kYXRhID0gZXZlbnQuZGF0YS5jb25jYXQoVXRpbHMubnVtYmVyVG9CeXRlcyh0ZW1wbywgMykpOyAvLyBUZW1wbywgMyBieXRlc1xuXHRcdFx0cmV0dXJuIHRoaXMuYWRkRXZlbnQoZXZlbnQpO1xuXHRcdH1cblxuXHRcdC8qKlxuICAgKiBTZXRzIHRpbWUgc2lnbmF0dXJlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtZXJhdG9yIC0gVG9wIG51bWJlciBvZiB0aGUgdGltZSBzaWduYXR1cmUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZW5vbWluYXRvciAtIEJvdHRvbSBudW1iZXIgb2YgdGhlIHRpbWUgc2lnbmF0dXJlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbWlkaWNsb2Nrc3BlcnRpY2sgLSBEZWZhdWx0cyB0byAyNC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG5vdGVzcGVybWlkaWNsb2NrIC0gRGVmYXVsdHMgdG8gOC5cbiAgICogQHJldHVybiB7VHJhY2t9XG4gICAqL1xuXG5cdH0sIHtcblx0XHRrZXk6ICdzZXRUaW1lU2lnbmF0dXJlJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gc2V0VGltZVNpZ25hdHVyZShudW1lcmF0b3IsIGRlbm9taW5hdG9yLCBtaWRpY2xvY2tzcGVydGljaywgbm90ZXNwZXJtaWRpY2xvY2spIHtcblx0XHRcdG1pZGljbG9ja3NwZXJ0aWNrID0gbWlkaWNsb2Nrc3BlcnRpY2sgfHwgMjQ7XG5cdFx0XHRub3Rlc3Blcm1pZGljbG9jayA9IG5vdGVzcGVybWlkaWNsb2NrIHx8IDg7XG5cblx0XHRcdHZhciBldmVudCA9IG5ldyBNZXRhRXZlbnQoeyBkYXRhOiBbQ29uc3RhbnRzLk1FVEFfVElNRV9TSUdOQVRVUkVfSURdIH0pO1xuXHRcdFx0ZXZlbnQuZGF0YS5wdXNoKDB4MDQpOyAvLyBTaXplXG5cdFx0XHRldmVudC5kYXRhID0gZXZlbnQuZGF0YS5jb25jYXQoVXRpbHMubnVtYmVyVG9CeXRlcyhudW1lcmF0b3IsIDEpKTsgLy8gTnVtZXJhdG9yLCAxIGJ5dGVzXG5cblx0XHRcdHZhciBfZGVub21pbmF0b3IgPSBNYXRoLmxvZzIoZGVub21pbmF0b3IpOyAvLyBEZW5vbWluYXRvciBpcyBleHByZXNzZWQgYXMgcG93IG9mIDJcblx0XHRcdGV2ZW50LmRhdGEgPSBldmVudC5kYXRhLmNvbmNhdChVdGlscy5udW1iZXJUb0J5dGVzKF9kZW5vbWluYXRvciwgMSkpOyAvLyBEZW5vbWluYXRvciwgMSBieXRlc1xuXHRcdFx0ZXZlbnQuZGF0YSA9IGV2ZW50LmRhdGEuY29uY2F0KFV0aWxzLm51bWJlclRvQnl0ZXMobWlkaWNsb2Nrc3BlcnRpY2ssIDEpKTsgLy8gTUlESSBDbG9ja3MgcGVyIHRpY2ssIDEgYnl0ZXNcblx0XHRcdGV2ZW50LmRhdGEgPSBldmVudC5kYXRhLmNvbmNhdChVdGlscy5udW1iZXJUb0J5dGVzKG5vdGVzcGVybWlkaWNsb2NrLCAxKSk7IC8vIE51bWJlciBvZiAxLzMyIG5vdGVzIHBlciBNSURJIGNsb2NrcywgMSBieXRlc1xuXHRcdFx0cmV0dXJuIHRoaXMuYWRkRXZlbnQoZXZlbnQpO1xuXHRcdH1cblxuXHRcdC8qKlxuICAgKiBTZXRzIGtleSBzaWduYXR1cmUuXG4gICAqIEBwYXJhbSB7Kn0gc2YgLSBcbiAgICogQHBhcmFtIHsqfSBtaSAtXG4gICAqIEByZXR1cm4ge1RyYWNrfVxuICAgKi9cblxuXHR9LCB7XG5cdFx0a2V5OiAnc2V0S2V5U2lnbmF0dXJlJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gc2V0S2V5U2lnbmF0dXJlKHNmLCBtaSkge1xuXHRcdFx0dmFyIGV2ZW50ID0gbmV3IE1ldGFFdmVudCh7IGRhdGE6IFtDb25zdGFudHMuTUVUQV9LRVlfU0lHTkFUVVJFX0lEXSB9KTtcblx0XHRcdGV2ZW50LmRhdGEucHVzaCgweDAyKTsgLy8gU2l6ZVxuXG5cdFx0XHR2YXIgbW9kZSA9IG1pIHx8IDA7XG5cdFx0XHRzZiA9IHNmIHx8IDA7XG5cblx0XHRcdC8vXHRGdW5jdGlvbiBjYWxsZWQgd2l0aCBzdHJpbmcgbm90YXRpb25cblx0XHRcdGlmICh0eXBlb2YgbWkgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHZhciBmaWZ0aHMgPSBbWydDYicsICdHYicsICdEYicsICdBYicsICdFYicsICdCYicsICdGJywgJ0MnLCAnRycsICdEJywgJ0EnLCAnRScsICdCJywgJ0YjJywgJ0MjJ10sIFsnYWInLCAnZWInLCAnYmInLCAnZicsICdjJywgJ2cnLCAnZCcsICdhJywgJ2UnLCAnYicsICdmIycsICdjIycsICdnIycsICdkIycsICdhIyddXTtcblx0XHRcdFx0dmFyIF9zZmxlbiA9IHNmLmxlbmd0aDtcblx0XHRcdFx0dmFyIG5vdGUgPSBzZiB8fCAnQyc7XG5cblx0XHRcdFx0aWYgKHNmWzBdID09PSBzZlswXS50b0xvd2VyQ2FzZSgpKSBtb2RlID0gMTtcblxuXHRcdFx0XHRpZiAoX3NmbGVuID4gMSkge1xuXHRcdFx0XHRcdHN3aXRjaCAoc2YuY2hhckF0KF9zZmxlbiAtIDEpKSB7XG5cdFx0XHRcdFx0XHRjYXNlICdtJzpcblx0XHRcdFx0XHRcdFx0bW9kZSA9IDE7XG5cdFx0XHRcdFx0XHRcdG5vdGUgPSBzZi5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRcdFx0bm90ZSA9IG5vdGUuY29uY2F0KHNmLnN1YnN0cmluZygxLCBfc2ZsZW4gLSAxKSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnLSc6XG5cdFx0XHRcdFx0XHRcdG1vZGUgPSAxO1xuXHRcdFx0XHRcdFx0XHRub3RlID0gc2YuY2hhckF0KDApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRcdG5vdGUgPSBub3RlLmNvbmNhdChzZi5zdWJzdHJpbmcoMSwgX3NmbGVuIC0gMSkpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ00nOlxuXHRcdFx0XHRcdFx0XHRtb2RlID0gMDtcblx0XHRcdFx0XHRcdFx0bm90ZSA9IHNmLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0XHRub3RlID0gbm90ZS5jb25jYXQoc2Yuc3Vic3RyaW5nKDEsIF9zZmxlbiAtIDEpKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICcrJzpcblx0XHRcdFx0XHRcdFx0bW9kZSA9IDA7XG5cdFx0XHRcdFx0XHRcdG5vdGUgPSBzZi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTtcblx0XHRcdFx0XHRcdFx0bm90ZSA9IG5vdGUuY29uY2F0KHNmLnN1YnN0cmluZygxLCBfc2ZsZW4gLSAxKSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBmaWZ0aGluZGV4ID0gZmlmdGhzW21vZGVdLmluZGV4T2Yobm90ZSk7XG5cdFx0XHRcdHNmID0gZmlmdGhpbmRleCA9PT0gLTEgPyAwIDogZmlmdGhpbmRleCAtIDc7XG5cdFx0XHR9XG5cblx0XHRcdGV2ZW50LmRhdGEgPSBldmVudC5kYXRhLmNvbmNhdChVdGlscy5udW1iZXJUb0J5dGVzKHNmLCAxKSk7IC8vIE51bWJlciBvZiBzaGFycCBvciBmbGF0cyAoIDwgMCBmbGF0OyA+IDAgc2hhcnApXG5cdFx0XHRldmVudC5kYXRhID0gZXZlbnQuZGF0YS5jb25jYXQoVXRpbHMubnVtYmVyVG9CeXRlcyhtb2RlLCAxKSk7IC8vIE1vZGU6IDAgbWFqb3IsIDEgbWlub3Jcblx0XHRcdHJldHVybiB0aGlzLmFkZEV2ZW50KGV2ZW50KTtcblx0XHR9XG5cblx0XHQvKipcbiAgICogQWRkcyB0ZXh0IHRvIE1JREkgZmlsZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUZXh0IHRvIGFkZC5cbiAgICogQHJldHVybiB7VHJhY2t9XG4gICAqL1xuXG5cdH0sIHtcblx0XHRrZXk6ICdhZGRUZXh0Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gYWRkVGV4dCh0ZXh0KSB7XG5cdFx0XHR2YXIgZXZlbnQgPSBuZXcgTWV0YUV2ZW50KHsgZGF0YTogW0NvbnN0YW50cy5NRVRBX1RFWFRfSURdIH0pO1xuXHRcdFx0dmFyIHN0cmluZ0J5dGVzID0gVXRpbHMuc3RyaW5nVG9CeXRlcyh0ZXh0KTtcblx0XHRcdGV2ZW50LmRhdGEgPSBldmVudC5kYXRhLmNvbmNhdChVdGlscy5udW1iZXJUb1ZhcmlhYmxlTGVuZ3RoKHN0cmluZ0J5dGVzLmxlbmd0aCkpOyAvLyBTaXplXG5cdFx0XHRldmVudC5kYXRhID0gZXZlbnQuZGF0YS5jb25jYXQoc3RyaW5nQnl0ZXMpOyAvLyBUZXh0XG5cdFx0XHRyZXR1cm4gdGhpcy5hZGRFdmVudChldmVudCk7XG5cdFx0fVxuXG5cdFx0LyoqXG4gICAqIEFkZHMgY29weXJpZ2h0IHRvIE1JREkgZmlsZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUZXh0IG9mIGNvcHlyaWdodCBsaW5lLlxuICAgKiBAcmV0dXJuIHtUcmFja31cbiAgICovXG5cblx0fSwge1xuXHRcdGtleTogJ2FkZENvcHlyaWdodCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGFkZENvcHlyaWdodCh0ZXh0KSB7XG5cdFx0XHR2YXIgZXZlbnQgPSBuZXcgTWV0YUV2ZW50KHsgZGF0YTogW0NvbnN0YW50cy5NRVRBX0NPUFlSSUdIVF9JRF0gfSk7XG5cdFx0XHR2YXIgc3RyaW5nQnl0ZXMgPSBVdGlscy5zdHJpbmdUb0J5dGVzKHRleHQpO1xuXHRcdFx0ZXZlbnQuZGF0YSA9IGV2ZW50LmRhdGEuY29uY2F0KFV0aWxzLm51bWJlclRvVmFyaWFibGVMZW5ndGgoc3RyaW5nQnl0ZXMubGVuZ3RoKSk7IC8vIFNpemVcblx0XHRcdGV2ZW50LmRhdGEgPSBldmVudC5kYXRhLmNvbmNhdChzdHJpbmdCeXRlcyk7IC8vIFRleHRcblx0XHRcdHJldHVybiB0aGlzLmFkZEV2ZW50KGV2ZW50KTtcblx0XHR9XG5cblx0XHQvKipcbiAgICogQWRkcyBTZXF1ZW5jZS9UcmFjayBOYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRleHQgb2YgdHJhY2sgbmFtZS5cbiAgICogQHJldHVybiB7VHJhY2t9XG4gICAqL1xuXG5cdH0sIHtcblx0XHRrZXk6ICdhZGRUcmFja05hbWUnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBhZGRUcmFja05hbWUodGV4dCkge1xuXHRcdFx0dmFyIGV2ZW50ID0gbmV3IE1ldGFFdmVudCh7IGRhdGE6IFtDb25zdGFudHMuTUVUQV9UUkFDS19OQU1FX0lEXSB9KTtcblx0XHRcdHZhciBzdHJpbmdCeXRlcyA9IFV0aWxzLnN0cmluZ1RvQnl0ZXModGV4dCk7XG5cdFx0XHRldmVudC5kYXRhID0gZXZlbnQuZGF0YS5jb25jYXQoVXRpbHMubnVtYmVyVG9WYXJpYWJsZUxlbmd0aChzdHJpbmdCeXRlcy5sZW5ndGgpKTsgLy8gU2l6ZVxuXHRcdFx0ZXZlbnQuZGF0YSA9IGV2ZW50LmRhdGEuY29uY2F0KHN0cmluZ0J5dGVzKTsgLy8gVGV4dFxuXHRcdFx0cmV0dXJuIHRoaXMuYWRkRXZlbnQoZXZlbnQpO1xuXHRcdH1cblxuXHRcdC8qKlxuICAgKiBTZXRzIGluc3RydW1lbnQgbmFtZSBvZiB0cmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBOYW1lIG9mIGluc3RydW1lbnQuXG4gICAqIEByZXR1cm4ge1RyYWNrfVxuICAgKi9cblxuXHR9LCB7XG5cdFx0a2V5OiAnYWRkSW5zdHJ1bWVudE5hbWUnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBhZGRJbnN0cnVtZW50TmFtZSh0ZXh0KSB7XG5cdFx0XHR2YXIgZXZlbnQgPSBuZXcgTWV0YUV2ZW50KHsgZGF0YTogW0NvbnN0YW50cy5NRVRBX0lOU1RSVU1FTlRfTkFNRV9JRF0gfSk7XG5cdFx0XHR2YXIgc3RyaW5nQnl0ZXMgPSBVdGlscy5zdHJpbmdUb0J5dGVzKHRleHQpO1xuXHRcdFx0ZXZlbnQuZGF0YSA9IGV2ZW50LmRhdGEuY29uY2F0KFV0aWxzLm51bWJlclRvVmFyaWFibGVMZW5ndGgoc3RyaW5nQnl0ZXMubGVuZ3RoKSk7IC8vIFNpemVcblx0XHRcdGV2ZW50LmRhdGEgPSBldmVudC5kYXRhLmNvbmNhdChzdHJpbmdCeXRlcyk7IC8vIFRleHRcblx0XHRcdHJldHVybiB0aGlzLmFkZEV2ZW50KGV2ZW50KTtcblx0XHR9XG5cblx0XHQvKipcbiAgICogQWRkcyBtYXJrZXIgdG8gTUlESSBmaWxlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIE1hcmtlciB0ZXh0LlxuICAgKiBAcmV0dXJuIHtUcmFja31cbiAgICovXG5cblx0fSwge1xuXHRcdGtleTogJ2FkZE1hcmtlcicsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGFkZE1hcmtlcih0ZXh0KSB7XG5cdFx0XHR2YXIgZXZlbnQgPSBuZXcgTWV0YUV2ZW50KHsgZGF0YTogW0NvbnN0YW50cy5NRVRBX01BUktFUl9JRF0gfSk7XG5cdFx0XHR2YXIgc3RyaW5nQnl0ZXMgPSBVdGlscy5zdHJpbmdUb0J5dGVzKHRleHQpO1xuXHRcdFx0ZXZlbnQuZGF0YSA9IGV2ZW50LmRhdGEuY29uY2F0KFV0aWxzLm51bWJlclRvVmFyaWFibGVMZW5ndGgoc3RyaW5nQnl0ZXMubGVuZ3RoKSk7IC8vIFNpemVcblx0XHRcdGV2ZW50LmRhdGEgPSBldmVudC5kYXRhLmNvbmNhdChzdHJpbmdCeXRlcyk7IC8vIFRleHRcblx0XHRcdHJldHVybiB0aGlzLmFkZEV2ZW50KGV2ZW50KTtcblx0XHR9XG5cblx0XHQvKipcbiAgICogQWRkcyBjdWUgcG9pbnQgdG8gTUlESSBmaWxlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRleHQgb2YgY3VlIHBvaW50LlxuICAgKiBAcmV0dXJuIHtUcmFja31cbiAgICovXG5cblx0fSwge1xuXHRcdGtleTogJ2FkZEN1ZVBvaW50Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gYWRkQ3VlUG9pbnQodGV4dCkge1xuXHRcdFx0dmFyIGV2ZW50ID0gbmV3IE1ldGFFdmVudCh7IGRhdGE6IFtDb25zdGFudHMuTUVUQV9DVUVfUE9JTlRdIH0pO1xuXHRcdFx0dmFyIHN0cmluZ0J5dGVzID0gVXRpbHMuc3RyaW5nVG9CeXRlcyh0ZXh0KTtcblx0XHRcdGV2ZW50LmRhdGEgPSBldmVudC5kYXRhLmNvbmNhdChVdGlscy5udW1iZXJUb1ZhcmlhYmxlTGVuZ3RoKHN0cmluZ0J5dGVzLmxlbmd0aCkpOyAvLyBTaXplXG5cdFx0XHRldmVudC5kYXRhID0gZXZlbnQuZGF0YS5jb25jYXQoc3RyaW5nQnl0ZXMpOyAvLyBUZXh0XG5cdFx0XHRyZXR1cm4gdGhpcy5hZGRFdmVudChldmVudCk7XG5cdFx0fVxuXG5cdFx0LyoqXG4gICAqIEFkZHMgbHlyaWMgdG8gTUlESSBmaWxlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbHlyaWMgLSBMeXJpYyB0ZXh0IHRvIGFkZC5cbiAgICogQHJldHVybiB7VHJhY2t9XG4gICAqL1xuXG5cdH0sIHtcblx0XHRrZXk6ICdhZGRMeXJpYycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGFkZEx5cmljKGx5cmljKSB7XG5cdFx0XHR2YXIgZXZlbnQgPSBuZXcgTWV0YUV2ZW50KHsgZGF0YTogW0NvbnN0YW50cy5NRVRBX0xZUklDX0lEXSB9KTtcblx0XHRcdHZhciBzdHJpbmdCeXRlcyA9IFV0aWxzLnN0cmluZ1RvQnl0ZXMobHlyaWMpO1xuXHRcdFx0ZXZlbnQuZGF0YSA9IGV2ZW50LmRhdGEuY29uY2F0KFV0aWxzLm51bWJlclRvVmFyaWFibGVMZW5ndGgoc3RyaW5nQnl0ZXMubGVuZ3RoKSk7IC8vIFNpemVcblx0XHRcdGV2ZW50LmRhdGEgPSBldmVudC5kYXRhLmNvbmNhdChzdHJpbmdCeXRlcyk7IC8vIEx5cmljXG5cdFx0XHRyZXR1cm4gdGhpcy5hZGRFdmVudChldmVudCk7XG5cdFx0fVxuXG5cdFx0LyoqXG4gICAqIENoYW5uZWwgbW9kZSBtZXNzYWdlc1xuICAgKiBAcmV0dXJuIHtUcmFja31cbiAgICovXG5cblx0fSwge1xuXHRcdGtleTogJ3BvbHlNb2RlT24nLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBwb2x5TW9kZU9uKCkge1xuXHRcdFx0dmFyIGV2ZW50ID0gbmV3IE5vdGVPbkV2ZW50KHsgZGF0YTogWzB4MDAsIDB4QjAsIDB4N0UsIDB4MDBdIH0pO1xuXHRcdFx0cmV0dXJuIHRoaXMuYWRkRXZlbnQoZXZlbnQpO1xuXHRcdH1cblx0fV0pO1xuXG5cdHJldHVybiBUcmFjaztcbn0oKTtcblxuZXhwb3J0cy5UcmFjayA9IFRyYWNrO1xuXG4vKipcbiAqIFN0YXRpYyB1dGlsaXR5IGZ1bmN0aW9ucyB1c2VkIHRocm91Z2hvdXQgdGhlIGxpYnJhcnkuXG4gKi9cbnZhciBVdGlscyA9IGZ1bmN0aW9uICgpIHtcblx0ZnVuY3Rpb24gVXRpbHMoKSB7XG5cdFx0X2NsYXNzQ2FsbENoZWNrKHRoaXMsIFV0aWxzKTtcblx0fVxuXG5cdF9jcmVhdGVDbGFzcyhVdGlscywgbnVsbCwgW3tcblx0XHRrZXk6ICd2ZXJzaW9uJyxcblxuXG5cdFx0LyoqXG4gICAqIEdldHMgTWlkaVdyaXRlckpTIHZlcnNpb24gbnVtYmVyLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXHRcdHZhbHVlOiBmdW5jdGlvbiB2ZXJzaW9uKCkge1xuXHRcdFx0cmV0dXJuIENvbnN0YW50cy5WRVJTSU9OO1xuXHRcdH1cblxuXHRcdC8qKlxuICAgKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIGFycmF5IG9mIGJ5dGVzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAgICogQHJldHVybiB7YXJyYXl9XG4gICAqL1xuXG5cdH0sIHtcblx0XHRrZXk6ICdzdHJpbmdUb0J5dGVzJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gc3RyaW5nVG9CeXRlcyhzdHJpbmcpIHtcblx0XHRcdHJldHVybiBzdHJpbmcuc3BsaXQoJycpLm1hcChmdW5jdGlvbiAoY2hhcikge1xuXHRcdFx0XHRyZXR1cm4gY2hhci5jaGFyQ29kZUF0KCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvKipcbiAgICogQ2hlY2tzIGlmIGFyZ3VtZW50IGlzIGEgdmFsaWQgbnVtYmVyLlxuICAgKiBAcGFyYW0geyp9IG4gLSBWYWx1ZSB0byBjaGVja1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuXHR9LCB7XG5cdFx0a2V5OiAnaXNOdW1lcmljJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gaXNOdW1lcmljKG4pIHtcblx0XHRcdHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdChuKSkgJiYgaXNGaW5pdGUobik7XG5cdFx0fVxuXG5cdFx0LyoqXG4gICAgICAqIFJldHVybnMgdGhlIGNvcnJlY3QgTUlESSBudW1iZXIgZm9yIHRoZSBzcGVjaWZpZWQgcGl0Y2guXG4gICAgICAqIFVzZXMgVG9uYWwgTWlkaSAtIGh0dHBzOi8vZ2l0aHViLmNvbS9kYW5pZ2IvdG9uYWwvdHJlZS9tYXN0ZXIvcGFja2FnZXMvbWlkaVxuICAgICAgKiBAcGFyYW0geyhzdHJpbmd8bnVtYmVyKX0gcGl0Y2ggLSAnQyM0JyBvciBtaWRpIG5vdGUgY29kZVxuICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICAqL1xuXG5cdH0sIHtcblx0XHRrZXk6ICdnZXRQaXRjaCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGdldFBpdGNoKHBpdGNoKSB7XG5cdFx0XHRyZXR1cm4gKDAsIF90b25hbE1pZGkudG9NaWRpKShwaXRjaCk7XG5cdFx0fVxuXG5cdFx0LyoqXG4gICAqIFRyYW5zbGF0ZXMgbnVtYmVyIG9mIHRpY2tzIHRvIE1JREkgdGltZXN0YW1wIGZvcm1hdCwgcmV0dXJuaW5nIGFuIGFycmF5IG9mXG4gICAqIGhleCBzdHJpbmdzIHdpdGggdGhlIHRpbWUgdmFsdWVzLiBNaWRpIGhhcyBhIHZlcnkgcGFydGljdWxhciB0aW1lIHRvIGV4cHJlc3MgdGltZSxcbiAgICogdGFrZSBhIGdvb2QgbG9vayBhdCB0aGUgc3BlYyBiZWZvcmUgZXZlciB0b3VjaGluZyB0aGlzIGZ1bmN0aW9uLlxuICAgKiBUaGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL3NlcmdpL2pzbWlkaVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdGlja3MgLSBOdW1iZXIgb2YgdGlja3MgdG8gYmUgdHJhbnNsYXRlZFxuICAgKiBAcmV0dXJuIHthcnJheX0gLSBCeXRlcyB0aGF0IGZvcm0gdGhlIE1JREkgdGltZSB2YWx1ZVxuICAgKi9cblxuXHR9LCB7XG5cdFx0a2V5OiAnbnVtYmVyVG9WYXJpYWJsZUxlbmd0aCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIG51bWJlclRvVmFyaWFibGVMZW5ndGgodGlja3MpIHtcblx0XHRcdHZhciBidWZmZXIgPSB0aWNrcyAmIDB4N0Y7XG5cblx0XHRcdHdoaWxlICh0aWNrcyA9IHRpY2tzID4+IDcpIHtcblx0XHRcdFx0YnVmZmVyIDw8PSA4O1xuXHRcdFx0XHRidWZmZXIgfD0gdGlja3MgJiAweDdGIHwgMHg4MDtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGJMaXN0ID0gW107XG5cdFx0XHR3aGlsZSAodHJ1ZSkge1xuXHRcdFx0XHRiTGlzdC5wdXNoKGJ1ZmZlciAmIDB4ZmYpO1xuXG5cdFx0XHRcdGlmIChidWZmZXIgJiAweDgwKSBidWZmZXIgPj49IDg7ZWxzZSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGJMaXN0O1xuXHRcdH1cblxuXHRcdC8qKlxuICAgKiBDb3VudHMgbnVtYmVyIG9mIGJ5dGVzIGluIHN0cmluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gc1xuICAgKiBAcmV0dXJuIHthcnJheX1cbiAgICovXG5cblx0fSwge1xuXHRcdGtleTogJ3N0cmluZ0J5dGVDb3VudCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHN0cmluZ0J5dGVDb3VudChzKSB7XG5cdFx0XHRyZXR1cm4gZW5jb2RlVVJJKHMpLnNwbGl0KC8lLi58Li8pLmxlbmd0aCAtIDE7XG5cdFx0fVxuXG5cdFx0LyoqXG4gICAqIEdldCBhbiBpbnQgZnJvbSBhbiBhcnJheSBvZiBieXRlcy5cbiAgICogQHBhcmFtIHthcnJheX0gYnl0ZXNcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cblxuXHR9LCB7XG5cdFx0a2V5OiAnbnVtYmVyRnJvbUJ5dGVzJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gbnVtYmVyRnJvbUJ5dGVzKGJ5dGVzKSB7XG5cdFx0XHR2YXIgaGV4ID0gJyc7XG5cdFx0XHR2YXIgc3RyaW5nUmVzdWx0O1xuXG5cdFx0XHRieXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChieXRlKSB7XG5cdFx0XHRcdHN0cmluZ1Jlc3VsdCA9IGJ5dGUudG9TdHJpbmcoMTYpO1xuXG5cdFx0XHRcdC8vIGVuc3VyZSBzdHJpbmcgaXMgMiBjaGFyc1xuXHRcdFx0XHRpZiAoc3RyaW5nUmVzdWx0Lmxlbmd0aCA9PSAxKSBzdHJpbmdSZXN1bHQgPSBcIjBcIiArIHN0cmluZ1Jlc3VsdDtcblxuXHRcdFx0XHRoZXggKz0gc3RyaW5nUmVzdWx0O1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBwYXJzZUludChoZXgsIDE2KTtcblx0XHR9XG5cblx0XHQvKipcbiAgICogVGFrZXMgYSBudW1iZXIgYW5kIHNwbGl0cyBpdCB1cCBpbnRvIGFuIGFycmF5IG9mIGJ5dGVzLiAgQ2FuIGJlIHBhZGRlZCBieSBwYXNzaW5nIGEgbnVtYmVyIHRvIGJ5dGVzTmVlZGVkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGJ5dGVzTmVlZGVkXG4gICAqIEByZXR1cm4ge2FycmF5fSAtIEFycmF5IG9mIGJ5dGVzXG4gICAqL1xuXG5cdH0sIHtcblx0XHRrZXk6ICdudW1iZXJUb0J5dGVzJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gbnVtYmVyVG9CeXRlcyhudW1iZXIsIGJ5dGVzTmVlZGVkKSB7XG5cdFx0XHRieXRlc05lZWRlZCA9IGJ5dGVzTmVlZGVkIHx8IDE7XG5cblx0XHRcdHZhciBoZXhTdHJpbmcgPSBudW1iZXIudG9TdHJpbmcoMTYpO1xuXG5cdFx0XHRpZiAoaGV4U3RyaW5nLmxlbmd0aCAmIDEpIHtcblx0XHRcdFx0Ly8gTWFrZSBzdXJlIGhleCBzdHJpbmcgaXMgZXZlbiBudW1iZXIgb2YgY2hhcnNcblx0XHRcdFx0aGV4U3RyaW5nID0gJzAnICsgaGV4U3RyaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTcGxpdCBoZXggc3RyaW5nIGludG8gYW4gYXJyYXkgb2YgdHdvIGNoYXIgZWxlbWVudHNcblx0XHRcdHZhciBoZXhBcnJheSA9IGhleFN0cmluZy5tYXRjaCgvLnsyfS9nKTtcblxuXHRcdFx0Ly8gTm93IHBhcnNlIHRoZW0gb3V0IGFzIGludGVnZXJzXG5cdFx0XHRoZXhBcnJheSA9IGhleEFycmF5Lm1hcChmdW5jdGlvbiAoaXRlbSkge1xuXHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoaXRlbSwgMTYpO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIFByZXBlbmQgZW1wdHkgYnl0ZXMgaWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2hcblx0XHRcdGlmIChoZXhBcnJheS5sZW5ndGggPCBieXRlc05lZWRlZCkge1xuXHRcdFx0XHR3aGlsZSAoYnl0ZXNOZWVkZWQgLSBoZXhBcnJheS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0aGV4QXJyYXkudW5zaGlmdCgwKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gaGV4QXJyYXk7XG5cdFx0fVxuXG5cdFx0LyoqXHRcbiAgICogQ29udmVydHMgdmFsdWUgdG8gYXJyYXkgaWYgbmVlZGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICogQHJldHVybiB7YXJyYXl9XG4gICAqL1xuXG5cdH0sIHtcblx0XHRrZXk6ICd0b0FycmF5Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSkge1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWU7XG5cdFx0XHRyZXR1cm4gW3ZhbHVlXTtcblx0XHR9XG5cdH1dKTtcblxuXHRyZXR1cm4gVXRpbHM7XG59KCk7XG5cbmV4cG9ydHMuVXRpbHMgPSBVdGlscztcblxudmFyIFZleEZsb3cgPSBmdW5jdGlvbiAoKSB7XG5cdGZ1bmN0aW9uIFZleEZsb3coKSB7XG5cdFx0X2NsYXNzQ2FsbENoZWNrKHRoaXMsIFZleEZsb3cpO1xuXHR9XG5cdC8vIGNvZGUuLi5cblxuXG5cdC8qKlxuICAqIFN1cHBvcnQgZm9yIGNvbnZlcnRpbmcgVmV4RmxvdyB2b2ljZSBpbnRvIE1pZGlXcml0ZXJKUyB0cmFja1xuICAqIEByZXR1cm4gTWlkaVdyaXRpZXIuVHJhY2sgb2JqZWN0XG4gICovXG5cblxuXHRfY3JlYXRlQ2xhc3MoVmV4RmxvdywgW3tcblx0XHRrZXk6ICd0cmFja0Zyb21Wb2ljZScsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHRyYWNrRnJvbVZvaWNlKHZvaWNlKSB7XG5cdFx0XHR2YXIgdHJhY2sgPSBuZXcgVHJhY2soKTtcblx0XHRcdHZhciB3YWl0O1xuXHRcdFx0dmFyIHBpdGNoZXMgPSBbXTtcblxuXHRcdFx0dm9pY2UudGlja2FibGVzLmZvckVhY2goZnVuY3Rpb24gKHRpY2thYmxlKSB7XG5cdFx0XHRcdHBpdGNoZXMgPSBbXTtcblxuXHRcdFx0XHRpZiAodGlja2FibGUubm90ZVR5cGUgPT09ICduJykge1xuXHRcdFx0XHRcdHRpY2thYmxlLmtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRcdFx0XHQvLyBidWlsZCBhcnJheSBvZiBwaXRjaGVzXG5cdFx0XHRcdFx0XHRwaXRjaGVzLnB1c2godGhpcy5jb252ZXJ0UGl0Y2goa2V5KSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAodGlja2FibGUubm90ZVR5cGUgPT09ICdyJykge1xuXHRcdFx0XHRcdC8vIG1vdmUgb24gdG8gdGhlIG5leHQgdGlja2FibGUgYW5kIHVzZSB0aGlzIHJlc3QgYXMgYSBgd2FpdGAgcHJvcGVydHkgZm9yIHRoZSBuZXh0IGV2ZW50XG5cdFx0XHRcdFx0d2FpdCA9IHRoaXMuY29udmVydER1cmF0aW9uKHRpY2thYmxlKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cmFjay5hZGRFdmVudChuZXcgTm90ZUV2ZW50KHsgcGl0Y2g6IHBpdGNoZXMsIGR1cmF0aW9uOiB0aGlzLmNvbnZlcnREdXJhdGlvbih0aWNrYWJsZSksIHdhaXQ6IHdhaXQgfSkpO1xuXG5cdFx0XHRcdC8vIHJlc2V0IHdhaXRcblx0XHRcdFx0d2FpdCA9IDA7XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIHRyYWNrO1xuXHRcdH1cblxuXHRcdC8qKlxuICAgKiBDb252ZXJ0cyBWZXhGbG93IHBpdGNoIHN5bnRheCB0byBNaWRpV3JpdGVySlMgc3ludGF4XG4gICAqIEBwYXJhbSBwaXRjaCBzdHJpbmdcbiAgICovXG5cblx0fSwge1xuXHRcdGtleTogJ2NvbnZlcnRQaXRjaCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNvbnZlcnRQaXRjaChwaXRjaCkge1xuXHRcdFx0cmV0dXJuIHBpdGNoLnJlcGxhY2UoJy8nLCAnJyk7XG5cdFx0fVxuXG5cdFx0LyoqXG4gICAqIENvbnZlcnRzIFZleEZsb3cgZHVyYXRpb24gc3ludGF4IHRvIE1pZGlXcml0ZXJKUyBzeW50YXhcbiAgICogQHBhcmFtIG5vdGUgc3RydWN0IGZyb20gVmV4Rmxvd1xuICAgKi9cblxuXHR9LCB7XG5cdFx0a2V5OiAnY29udmVydER1cmF0aW9uJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gY29udmVydER1cmF0aW9uKG5vdGUpIHtcblx0XHRcdHN3aXRjaCAobm90ZS5kdXJhdGlvbikge1xuXHRcdFx0XHRjYXNlICd3Jzpcblx0XHRcdFx0XHRyZXR1cm4gJzEnO1xuXHRcdFx0XHRjYXNlICdoJzpcblx0XHRcdFx0XHRyZXR1cm4gbm90ZS5pc0RvdHRlZCgpID8gJ2QyJyA6ICcyJztcblx0XHRcdFx0Y2FzZSAncSc6XG5cdFx0XHRcdFx0cmV0dXJuIG5vdGUuaXNEb3R0ZWQoKSA/ICdkNCcgOiAnNCc7XG5cdFx0XHRcdGNhc2UgJzgnOlxuXHRcdFx0XHRcdHJldHVybiBub3RlLmlzRG90dGVkKCkgPyAnZDgnIDogJzgnO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbm90ZS5kdXJhdGlvbjtcblx0XHR9XG5cdH1dKTtcblxuXHRyZXR1cm4gVmV4Rmxvdztcbn0oKTtcblxuZXhwb3J0cy5WZXhGbG93ID0gVmV4Rmxvdztcbi8qKlxuICogT2JqZWN0IHRoYXQgcHV0cyB0b2dldGhlciB0cmFja3MgYW5kIHByb3ZpZGVzIG1ldGhvZHMgZm9yIGZpbGUgb3V0cHV0LlxuICogQHBhcmFtIHthcnJheX0gdHJhY2tzIC0gQW4gYXJyYXkgb2Yge1RyYWNrfSBvYmplY3RzLlxuICogQHJldHVybiB7V3JpdGVyfVxuICovXG5cbnZhciBXcml0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdGZ1bmN0aW9uIFdyaXRlcih0cmFja3MpIHtcblx0XHRfY2xhc3NDYWxsQ2hlY2sodGhpcywgV3JpdGVyKTtcblxuXHRcdHRoaXMuZGF0YSA9IFtdO1xuXG5cdFx0dmFyIHRyYWNrVHlwZSA9IHRyYWNrcy5sZW5ndGggPiAxID8gQ29uc3RhbnRzLkhFQURFUl9DSFVOS19GT1JNQVQxIDogQ29uc3RhbnRzLkhFQURFUl9DSFVOS19GT1JNQVQwO1xuXHRcdHZhciBudW1iZXJPZlRyYWNrcyA9IFV0aWxzLm51bWJlclRvQnl0ZXModHJhY2tzLmxlbmd0aCwgMik7IC8vIHR3byBieXRlcyBsb25nXG5cblx0XHQvLyBIZWFkZXIgY2h1bmtcblx0XHR0aGlzLmRhdGEucHVzaChuZXcgQ2h1bmsoe1xuXHRcdFx0dHlwZTogQ29uc3RhbnRzLkhFQURFUl9DSFVOS19UWVBFLFxuXHRcdFx0ZGF0YTogdHJhY2tUeXBlLmNvbmNhdChudW1iZXJPZlRyYWNrcywgQ29uc3RhbnRzLkhFQURFUl9DSFVOS19ESVZJU0lPTikgfSkpO1xuXG5cdFx0Ly8gVHJhY2sgY2h1bmtzXG5cdFx0dHJhY2tzLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrLCBpKSB7XG5cdFx0XHR0cmFjay5hZGRFdmVudChuZXcgTWV0YUV2ZW50KHsgZGF0YTogQ29uc3RhbnRzLk1FVEFfRU5EX09GX1RSQUNLX0lEIH0pKTtcblx0XHRcdHRoaXMuZGF0YS5wdXNoKHRyYWNrKTtcblx0XHR9LCB0aGlzKTtcblx0fVxuXG5cdC8qKlxuICAqIEJ1aWxkcyB0aGUgZmlsZSBpbnRvIGEgVWludDhBcnJheVxuICAqIEByZXR1cm4ge1VpbnQ4QXJyYXl9XG4gICovXG5cblxuXHRfY3JlYXRlQ2xhc3MoV3JpdGVyLCBbe1xuXHRcdGtleTogJ2J1aWxkRmlsZScsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGJ1aWxkRmlsZSgpIHtcblx0XHRcdHZhciBidWlsZCA9IFtdO1xuXG5cdFx0XHQvLyBEYXRhIGNvbnNpc3RzIG9mIGNodW5rcyB3aGljaCBjb25zaXN0cyBvZiBkYXRhXG5cdFx0XHR0aGlzLmRhdGEuZm9yRWFjaChmdW5jdGlvbiAoZCkge1xuXHRcdFx0XHRyZXR1cm4gYnVpbGQgPSBidWlsZC5jb25jYXQoZC50eXBlLCBkLnNpemUsIGQuZGF0YSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1aWxkKTtcblx0XHR9XG5cblx0XHQvKipcbiAgICogQ29udmVydCBmaWxlIGJ1ZmZlciB0byBhIGJhc2U2NCBzdHJpbmcuICBEaWZmZXJlbnQgbWV0aG9kcyBkZXBlbmRpbmcgb24gaWYgYnJvd3NlciBvciBub2RlLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cdH0sIHtcblx0XHRrZXk6ICdiYXNlNjQnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBiYXNlNjQoKSB7XG5cdFx0XHRpZiAodHlwZW9mIGJ0b2EgPT09ICdmdW5jdGlvbicpIHJldHVybiBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgdGhpcy5idWlsZEZpbGUoKSkpO1xuXHRcdFx0cmV0dXJuIG5ldyBCdWZmZXIodGhpcy5idWlsZEZpbGUoKSkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXHRcdH1cblxuXHRcdC8qKlxuICAgKiBHZXQgdGhlIGRhdGEgVVJJLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cdH0sIHtcblx0XHRrZXk6ICdkYXRhVXJpJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gZGF0YVVyaSgpIHtcblx0XHRcdHJldHVybiAnZGF0YTphdWRpby9taWRpO2Jhc2U2NCwnICsgdGhpcy5iYXNlNjQoKTtcblx0XHR9XG5cblx0XHQvKipcbiAgICogT3V0cHV0IHRvIHN0ZG91dFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cdH0sIHtcblx0XHRrZXk6ICdzdGRvdXQnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBzdGRvdXQoKSB7XG5cdFx0XHRyZXR1cm4gcHJvY2Vzcy5zdGRvdXQud3JpdGUobmV3IEJ1ZmZlcih0aGlzLmJ1aWxkRmlsZSgpKSk7XG5cdFx0fVxuXG5cdFx0LyoqXG4gICAqIFNhdmUgdG8gTUlESSBmaWxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZVxuICAgKi9cblxuXHR9LCB7XG5cdFx0a2V5OiAnc2F2ZU1JREknLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBzYXZlTUlESShmaWxlbmFtZSkge1xuXHRcdFx0dmFyIGJ1ZmZlciA9IG5ldyBCdWZmZXIodGhpcy5idWlsZEZpbGUoKSk7XG5cdFx0XHRmcy53cml0ZUZpbGUoZmlsZW5hbWUgKyAnLm1pZCcsIGJ1ZmZlciwgZnVuY3Rpb24gKGVycikge1xuXHRcdFx0XHRpZiAoZXJyKSByZXR1cm4gY29uc29sZS5sb2coZXJyKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fV0pO1xuXG5cdHJldHVybiBXcml0ZXI7XG59KCk7XG5cbmV4cG9ydHMuV3JpdGVyID0gV3JpdGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW1sdVpHVjRMbXB6SWwwc0ltNWhiV1Z6SWpwYklrTm9kVzVySWl3aVptbGxiR1J6SWl3aWRIbHdaU0lzSW1SaGRHRWlMQ0p6YVhwbElpd2liR1Z1WjNSb0lpd2lRMjl1YzNSaGJuUnpJaXdpVmtWU1UwbFBUaUlzSWtoRlFVUkZVbDlEU0ZWT1MxOVVXVkJGSWl3aVNFVkJSRVZTWDBOSVZVNUxYMHhGVGtkVVNDSXNJa2hGUVVSRlVsOURTRlZPUzE5R1QxSk5RVlF3SWl3aVNFVkJSRVZTWDBOSVZVNUxYMFpQVWsxQlZERWlMQ0pJUlVGRVJWSmZRMGhWVGt0ZlJFbFdTVk5KVDA0aUxDSlVVa0ZEUzE5RFNGVk9TMTlVV1ZCRklpd2lUVVZVUVY5RlZrVk9WRjlKUkNJc0lrMUZWRUZmVkVWWVZGOUpSQ0lzSWsxRlZFRmZRMDlRV1ZKSlIwaFVYMGxFSWl3aVRVVlVRVjlVVWtGRFMxOU9RVTFGWDBsRUlpd2lUVVZVUVY5SlRsTlVVbFZOUlU1VVgwNUJUVVZmU1VRaUxDSk5SVlJCWDB4WlVrbERYMGxFSWl3aVRVVlVRVjlOUVZKTFJWSmZTVVFpTENKTlJWUkJYME5WUlY5UVQwbE9WQ0lzSWsxRlZFRmZWRVZOVUU5ZlNVUWlMQ0pOUlZSQlgxTk5WRkJGWDA5R1JsTkZWQ0lzSWsxRlZFRmZWRWxOUlY5VFNVZE9RVlJWVWtWZlNVUWlMQ0pOUlZSQlgwdEZXVjlUU1VkT1FWUlZVa1ZmU1VRaUxDSk5SVlJCWDBWT1JGOVBSbDlVVWtGRFMxOUpSQ0lzSWtOUFRsUlNUMHhNUlZKZlEwaEJUa2RGWDFOVVFWUlZVeUlzSWxCU1QwZFNRVTFmUTBoQlRrZEZYMU5VUVZSVlV5SXNJa052Ym5SeWIyeHNaWEpEYUdGdVoyVkZkbVZ1ZENJc0lsVjBhV3h6SWl3aWJuVnRZbVZ5Vkc5V1lYSnBZV0pzWlV4bGJtZDBhQ0lzSW1OdmJtTmhkQ0lzSW1OdmJuUnliMnhzWlhKT2RXMWlaWElpTENKamIyNTBjbTlzYkdWeVZtRnNkV1VpTENKTlpYUmhSWFpsYm5RaUxDSk9iM1JsUlhabGJuUWlMQ0p3YVhSamFDSXNJblJ2UVhKeVlYa2lMQ0ozWVdsMElpd2laSFZ5WVhScGIyNGlMQ0p6WlhGMVpXNTBhV0ZzSWl3aWRtVnNiMk5wZEhraUxDSmphR0Z1Ym1Wc0lpd2ljbVZ3WldGMElpd2lZMjl1ZG1WeWRGWmxiRzlqYVhSNUlpd2laM0poWTJVaUxDSmlkV2xzWkVSaGRHRWlMQ0owYVdOclJIVnlZWFJwYjI0aUxDSm5aWFJVYVdOclJIVnlZWFJwYjI0aUxDSnlaWE4wUkhWeVlYUnBiMjRpTENKbmNtRmpaVVIxY21GMGFXOXVJaXdpWm05eVJXRmphQ0lzSW01dmRHVkZkbVZ1ZENJc0ltNXZkR1ZQYmlJc0ltNXZkR1ZQWm1ZaUxDSkJjbkpoZVNJc0ltbHpRWEp5WVhraUxDSnFJaXdpY0NJc0lta2lMQ0pPYjNSbFQyNUZkbVZ1ZENJc0ltZGxkRTV2ZEdWUGJsTjBZWFIxY3lJc0ltZGxkRkJwZEdOb0lpd2lUbTkwWlU5bVprVjJaVzUwSWl3aVoyVjBUbTkwWlU5bVpsTjBZWFIxY3lJc0luRjFZWEowWlhKVWFXTnJjeUlzSW01MWJXSmxja1p5YjIxQ2VYUmxjeUlzSWsxaGRHZ2lMQ0p5YjNWdVpDSXNJbTFoY0NJc0luWmhiSFZsSWl3aWNtVmtkV05sSWl3aVlTSXNJbUlpTENKMGIxTjBjbWx1WnlJc0luUnZURzkzWlhKRFlYTmxJaXdpWTJoaGNrRjBJaXdpY0dGeWMyVkpiblFpTENKemRXSnpkSEpwYm1jaUxDSm5aWFJFZFhKaGRHbHZiazExYkhScGNHeHBaWElpTENKUWNtOW5jbUZ0UTJoaGJtZGxSWFpsYm5RaUxDSnBibk4wY25WdFpXNTBJaXdpVkhKaFkyc2lMQ0psZG1WdWRITWlMQ0psZG1WdWRDSXNJbTFoY0VaMWJtTjBhVzl1SWl3aVpTSXNJbkJ5YjNCbGNuUnBaWE1pTENKdWRXMWlaWEpVYjBKNWRHVnpJaXdpY0hWemFDSXNJbUp3YlNJc0luUmxiWEJ2SWl3aVlXUmtSWFpsYm5RaUxDSnVkVzFsY21GMGIzSWlMQ0prWlc1dmJXbHVZWFJ2Y2lJc0ltMXBaR2xqYkc5amEzTndaWEowYVdOcklpd2libTkwWlhOd1pYSnRhV1JwWTJ4dlkyc2lMQ0pmWkdWdWIyMXBibUYwYjNJaUxDSnNiMmN5SWl3aWMyWWlMQ0p0YVNJc0ltMXZaR1VpTENKbWFXWjBhSE1pTENKZmMyWnNaVzRpTENKdWIzUmxJaXdpZEc5VmNIQmxja05oYzJVaUxDSm1hV1owYUdsdVpHVjRJaXdpYVc1a1pYaFBaaUlzSW5SbGVIUWlMQ0p6ZEhKcGJtZENlWFJsY3lJc0luTjBjbWx1WjFSdlFubDBaWE1pTENKc2VYSnBZeUlzSW5OMGNtbHVaeUlzSW5Od2JHbDBJaXdpWTJoaGNpSXNJbU5vWVhKRGIyUmxRWFFpTENKdUlpd2lhWE5PWVU0aUxDSndZWEp6WlVac2IyRjBJaXdpYVhOR2FXNXBkR1VpTENKMGFXTnJjeUlzSW1KMVptWmxjaUlzSW1KTWFYTjBJaXdpY3lJc0ltVnVZMjlrWlZWU1NTSXNJbUo1ZEdWeklpd2lhR1Y0SWl3aWMzUnlhVzVuVW1WemRXeDBJaXdpWW5sMFpTSXNJbTUxYldKbGNpSXNJbUo1ZEdWelRtVmxaR1ZrSWl3aWFHVjRVM1J5YVc1bklpd2lhR1Y0UVhKeVlYa2lMQ0p0WVhSamFDSXNJbWwwWlcwaUxDSjFibk5vYVdaMElpd2lWbVY0Um14dmR5SXNJblp2YVdObElpd2lkSEpoWTJzaUxDSndhWFJqYUdWeklpd2lkR2xqYTJGaWJHVnpJaXdpZEdsamEyRmliR1VpTENKdWIzUmxWSGx3WlNJc0ltdGxlWE1pTENKclpYa2lMQ0pqYjI1MlpYSjBVR2wwWTJnaUxDSmpiMjUyWlhKMFJIVnlZWFJwYjI0aUxDSnlaWEJzWVdObElpd2lhWE5FYjNSMFpXUWlMQ0pYY21sMFpYSWlMQ0owY21GamEzTWlMQ0owY21GamExUjVjR1VpTENKdWRXMWlaWEpQWmxSeVlXTnJjeUlzSW1KMWFXeGtJaXdpWkNJc0lsVnBiblE0UVhKeVlYa2lMQ0ppZEc5aElpd2lVM1J5YVc1bklpd2labkp2YlVOb1lYSkRiMlJsSWl3aVlYQndiSGtpTENKaWRXbHNaRVpwYkdVaUxDSkNkV1ptWlhJaUxDSmlZWE5sTmpRaUxDSndjbTlqWlhOeklpd2ljM1JrYjNWMElpd2lkM0pwZEdVaUxDSm1hV3hsYm1GdFpTSXNJbVp6SWl3aWQzSnBkR1ZHYVd4bElpd2laWEp5SWl3aVkyOXVjMjlzWlNJc0lteHZaeUpkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN096czdRVUZ6YTBKQk96czdPMEZCZEd0Q1FUczdPenM3U1VGTFRVRXNTeXhIUVVOTUxHVkJRVmxETEUxQlFWb3NSVUZCYjBJN1FVRkJRVHM3UVVGRGJrSXNUVUZCUzBNc1NVRkJUQ3hIUVVGWlJDeFBRVUZQUXl4SlFVRnVRanRCUVVOQkxFMUJRVXRETEVsQlFVd3NSMEZCV1VZc1QwRkJUMFVzU1VGQmJrSTdRVUZEUVN4TlFVRkxReXhKUVVGTUxFZEJRVmtzUTBGQlF5eERRVUZFTEVWQlFVa3NRMEZCU2l4RlFVRlBMRU5CUVZBc1JVRkJWVWdzVDBGQlQwVXNTVUZCVUN4RFFVRlpSU3hOUVVGMFFpeERRVUZhTzBGQlEwRXNRenM3VVVGSFRVd3NTeXhIUVVGQlFTeExPMEZCUTFJN096czdPMEZCUzBFc1NVRkJTVTBzV1VGQldUdEJRVU5tUXl4VlFVRmpMRTlCUkVNN1FVRkZaa01zYjBKQlFYVkNMRU5CUVVNc1NVRkJSQ3hGUVVGUExFbEJRVkFzUlVGQllTeEpRVUZpTEVWQlFXMUNMRWxCUVc1Q0xFTkJSbElzUlVGRmEwTTdRVUZEYWtSRExITkNRVUYzUWl4RFFVRkRMRWxCUVVRc1JVRkJUeXhKUVVGUUxFVkJRV0VzU1VGQllpeEZRVUZ0UWl4SlFVRnVRaXhEUVVoVUxFVkJSMjFETzBGQlEyeEVReXgxUWtGQk1FSXNRMEZCUXl4SlFVRkVMRVZCUVU4c1NVRkJVQ3hEUVVwWUxFVkJTWGxDTzBGQlEzaERReXgxUWtGQk1FSXNRMEZCUXl4SlFVRkVMRVZCUVU4c1NVRkJVQ3hEUVV4WUxFVkJTM2xDTzBGQlEzaERReXgzUWtGQk1FSXNRMEZCUXl4SlFVRkVMRVZCUVU4c1NVRkJVQ3hEUVU1WUxFVkJUWGxDTzBGQlEzaERReXh0UWtGQmIwSXNRMEZCUXl4SlFVRkVMRVZCUVU4c1NVRkJVQ3hGUVVGaExFbEJRV0lzUlVGQmJVSXNTVUZCYmtJc1EwRlFUQ3hGUVU4clFqdEJRVU01UTBNc1owSkJRV3RDTEVsQlVrZzdRVUZUWmtNc1pVRkJhVUlzU1VGVVJqdEJRVlZtUXl4dlFrRkJjVUlzU1VGV1RqdEJRVmRtUXl4eFFrRkJjMElzU1VGWVVEdEJRVmxtUXl3d1FrRkJNRUlzU1VGYVdEdEJRV0ZtUXl4blFrRkJhMElzU1VGaVNEdEJRV05tUXl4cFFrRkJiVUlzU1VGa1NqdEJRV1ZtUXl4cFFrRkJiVUlzU1VGbVNqdEJRV2RDWmtNc1owSkJRV3RDTEVsQmFFSklPMEZCYVVKbVF5eHZRa0ZCY1VJc1NVRnFRazQ3UVVGclFtWkRMSGxDUVVGNVFpeEpRV3hDVmp0QlFXMUNaa01zZDBKQlFYZENMRWxCYmtKVU8wRkJiMEptUXl4MVFrRkJkVUlzUTBGQlF5eEpRVUZFTEVWQlFVOHNTVUZCVUN4RFFYQkNVanRCUVhGQ1prTXNNa0pCUVRCQ0xFbEJja0pZTEVWQmNVSnBRanRCUVVOb1EwTXNkMEpCUVhkQ0xFbEJkRUpVTEVOQmMwSmxPMEZCZEVKbUxFTkJRV2hDT3p0UlFYbENVWFJDTEZNc1IwRkJRVUVzVXp0QlFVTlNPenM3T3pzN1NVRkxUWFZDTEhGQ0xFZEJRMHdzSzBKQlFWazFRaXhOUVVGYUxFVkJRVzlDTzBGQlFVRTdPMEZCUTI1Q0xFMUJRVXRETEVsQlFVd3NSMEZCV1N4WlFVRmFPMEZCUTBFN1FVRkRRU3hOUVVGTFF5eEpRVUZNTEVkQlFWa3lRaXhOUVVGTlF5eHpRa0ZCVGl4RFFVRTJRaXhKUVVFM1FpeEZRVUZ0UTBNc1RVRkJia01zUTBGQk1FTXhRaXhWUVVGVmNVSXNkMEpCUVhCRUxFVkJRVGhGTVVJc1QwRkJUMmRETEdkQ1FVRnlSaXhGUVVGMVIyaERMRTlCUVU5cFF5eGxRVUU1Unl4RFFVRmFPMEZCUTBFc1F6czdVVUZIVFV3c2NVSXNSMEZCUVVFc2NVSTdRVUZEVWpzN096czdPMGxCUzAxTkxGTXNSMEZEVEN4dFFrRkJXV3hETEUxQlFWb3NSVUZCYjBJN1FVRkJRVHM3UVVGRGJrSXNUVUZCUzBNc1NVRkJUQ3hIUVVGWkxFMUJRVm83UVVGRFFTeE5RVUZMUXl4SlFVRk1MRWRCUVZreVFpeE5RVUZOUXl4elFrRkJUaXhEUVVFMlFpeEpRVUUzUWl4RFFVRmFMRU5CUm0xQ0xFTkJSVFJDTzBGQlF5OURMRTFCUVVzMVFpeEpRVUZNTEVkQlFWa3NTMEZCUzBFc1NVRkJUQ3hEUVVGVk5rSXNUVUZCVml4RFFVRnBRakZDTEZWQlFWVlJMR0ZCUVROQ0xFVkJRVEJEWWl4UFFVRlBSU3hKUVVGcVJDeERRVUZhTzBGQlEwRXNRenM3VVVGSFRXZERMRk1zUjBGQlFVRXNVenRCUVVOU096czdPenM3U1VGTFRVTXNVenRCUVVOTUxHOUNRVUZaYmtNc1RVRkJXaXhGUVVGdlFqdEJRVUZCT3p0QlFVTnVRaXhQUVVGTFF5eEpRVUZNTEVkQlFXTXNUVUZCWkR0QlFVTkJMRTlCUVV0dFF5eExRVUZNTEVkQlFXVlFMRTFCUVUxUkxFOUJRVTRzUTBGQlkzSkRMRTlCUVU5dlF5eExRVUZ5UWl4RFFVRm1PMEZCUTBFc1QwRkJTMFVzU1VGQlRDeEhRVUZqZEVNc1QwRkJUM05ETEVsQlFWQXNTVUZCWlN4RFFVRTNRanRCUVVOQkxFOUJRVXRETEZGQlFVd3NSMEZCYVVKMlF5eFBRVUZQZFVNc1VVRkJlRUk3UVVGRFFTeFBRVUZMUXl4VlFVRk1MRWRCUVd0Q2VFTXNUMEZCVDNkRExGVkJRVkFzU1VGQmNVSXNTMEZCZGtNN1FVRkRRU3hQUVVGTFF5eFJRVUZNTEVkQlFXbENla01zVDBGQlQzbERMRkZCUVZBc1NVRkJiVUlzUlVGQmNFTTdRVUZEUVN4UFFVRkxReXhQUVVGTUxFZEJRV2RDTVVNc1QwRkJUekJETEU5QlFWQXNTVUZCYTBJc1EwRkJiRU03UVVGRFFTeFBRVUZMUXl4TlFVRk1MRWRCUVdVelF5eFBRVUZQTWtNc1RVRkJVQ3hKUVVGcFFpeERRVUZvUXp0QlFVTkJMRTlCUVV0R0xGRkJRVXdzUjBGQmFVSXNTMEZCUzBjc1pVRkJUQ3hEUVVGeFFpeExRVUZMU0N4UlFVRXhRaXhEUVVGcVFqdEJRVU5CTEU5QlFVdEpMRXRCUVV3c1IwRkJZemRETEU5QlFVODJReXhMUVVGeVFqdEJRVU5CTEU5QlFVdERMRk5CUVV3N1FVRkRRVHM3UVVGRlJEczdPenM3T3pzN09FSkJTVms3UVVGRFdDeFJRVUZMTlVNc1NVRkJUQ3hIUVVGWkxFVkJRVm83TzBGQlJVRXNUMEZCU1RaRExHVkJRV1VzUzBGQlMwTXNaVUZCVEN4RFFVRnhRaXhMUVVGTFZDeFJRVUV4UWl4RlFVRnZReXhOUVVGd1F5eERRVUZ1UWp0QlFVTkJMRTlCUVVsVkxHVkJRV1VzUzBGQlMwUXNaVUZCVEN4RFFVRnhRaXhMUVVGTFZpeEpRVUV4UWl4RlFVRm5ReXhOUVVGb1F5eERRVUZ1UWpzN1FVRkZRVHRCUVVOQkxFOUJRVWtzUzBGQlMwOHNTMEZCVkN4RlFVRm5RanRCUVVObUxGRkJRVWxMTEdkQ1FVRm5RaXhEUVVGd1FqdEJRVU5CTEZOQlFVdE1MRXRCUVV3c1IwRkJZV2hDTEUxQlFVMVJMRTlCUVU0c1EwRkJZeXhMUVVGTFVTeExRVUZ1UWl4RFFVRmlPMEZCUTBFc1UwRkJTMEVzUzBGQlRDeERRVUZYVFN4UFFVRllMRU5CUVcxQ0xGVkJRVk5tTEV0QlFWUXNSVUZCWjBJN1FVRkRiRU1zVTBGQlNXZENMRmxCUVZrc1NVRkJTV3BDTEZOQlFVb3NRMEZCWXl4RlFVRkRReXhQUVVGTkxFdEJRVXRUTEV0QlFWb3NSVUZCYlVKT0xGVkJRVk1zVFVGQlRWY3NZVUZCYkVNc1JVRkJaQ3hEUVVGb1FqdEJRVU5CTEZWQlFVdG9SQ3hKUVVGTUxFZEJRVmtzUzBGQlMwRXNTVUZCVEN4RFFVRlZOa0lzVFVGQlZpeERRVUZwUW5GQ0xGVkJRVlZzUkN4SlFVRXpRaXhEUVVGYU96dEJRVVZCTmtNc2NVSkJRV2RDUnl4aFFVRm9RanRCUVVOQkxFdEJURVFzUlVGTFJ5eEpRVXhJTzBGQlRVRTdPMEZCUlVRN1FVRkRRVHRCUVVOQkxFOUJRVWxITEUxQlFVb3NSVUZCV1VNc1QwRkJXanRCUVVOQkxFOUJRVWxETEUxQlFVMURMRTlCUVU0c1EwRkJZeXhMUVVGTGNFSXNTMEZCYmtJc1EwRkJTaXhGUVVFclFqdEJRVU01UWp0QlFVTkJPMEZCUTBFc1VVRkJTeXhEUVVGRkxFdEJRVXRKTEZWQlFWb3NSVUZCZDBJN1FVRkRka0k3UVVGRFFTeFZRVUZMTEVsQlFVbHBRaXhKUVVGSkxFTkJRV0lzUlVGQlowSkJMRWxCUVVrc1MwRkJTMlFzVFVGQmVrSXNSVUZCYVVOakxFZEJRV3BETEVWQlFYTkRPMEZCUTNKRE8wRkJRMEVzVjBGQlMzSkNMRXRCUVV3c1EwRkJWMlVzVDBGQldDeERRVUZ0UWl4VlFVRlRUeXhEUVVGVUxFVkJRVmxETEVOQlFWb3NSVUZCWlR0QlFVTnFReXhYUVVGSlFTeExRVUZMTEVOQlFWUXNSVUZCV1R0QlFVTllUaXhwUWtGQlV5eEpRVUZKVHl4WFFVRktMRU5CUVdkQ0xFVkJRVU14UkN4TlFVRk5Na0lzVFVGQlRVTXNjMEpCUVU0c1EwRkJOa0p0UWl4WlFVRTNRaXhGUVVFeVEyeENMRTFCUVRORExFTkJRV3RFTEV0QlFVczRRaXhsUVVGTUxFVkJRV3hFTEVWQlFUQkZhRU1zVFVGQlRXbERMRkZCUVU0c1EwRkJaVW9zUTBGQlppeERRVUV4UlN4RlFVRTJSaXhMUVVGTGFrSXNVVUZCYkVjc1EwRkJVQ3hGUVVGb1FpeERRVUZVTzBGQlJVRXNVVUZJUkN4TlFVZFBPMEZCUTA0N1FVRkRRVmtzYVVKQlFWTXNTVUZCU1U4c1YwRkJTaXhEUVVGblFpeEZRVUZETVVRc1RVRkJUU3hEUVVGRExFTkJRVVFzUlVGQlNUSkNMRTFCUVUxcFF5eFJRVUZPTEVOQlFXVktMRU5CUVdZc1EwRkJTaXhGUVVGMVFpeExRVUZMYWtJc1VVRkJOVUlzUTBGQlVDeEZRVUZvUWl4RFFVRlVPMEZCUTBFN08wRkJSVVFzV1VGQlMzWkRMRWxCUVV3c1IwRkJXU3hMUVVGTFFTeEpRVUZNTEVOQlFWVTJRaXhOUVVGV0xFTkJRV2xDYzBJc1QwRkJUMjVFTEVsQlFYaENMRU5CUVZvN1FVRkRRU3hQUVZaRUxFVkJWVWNzU1VGV1NEczdRVUZaUVR0QlFVTkJMRmRCUVV0clF5eExRVUZNTEVOQlFWZGxMRTlCUVZnc1EwRkJiVUlzVlVGQlUwOHNRMEZCVkN4RlFVRlpReXhEUVVGYUxFVkJRV1U3UVVGRGFrTXNWMEZCU1VFc1MwRkJTeXhEUVVGVUxFVkJRVms3UVVGRFdFd3NhMEpCUVZVc1NVRkJTVk1zV1VGQlNpeERRVUZwUWl4RlFVRkROMFFzVFVGQlRUSkNMRTFCUVUxRExITkNRVUZPTEVOQlFUWkNhVUlzV1VGQk4wSXNSVUZCTWtOb1FpeE5RVUV6UXl4RFFVRnJSQ3hMUVVGTGFVTXNaMEpCUVV3c1JVRkJiRVFzUlVGQk1rVnVReXhOUVVGTmFVTXNVVUZCVGl4RFFVRmxTaXhEUVVGbUxFTkJRVE5GTEVWQlFUaEdMRXRCUVV0cVFpeFJRVUZ1Unl4RFFVRlFMRVZCUVdwQ0xFTkJRVlk3UVVGRlFTeFJRVWhFTEUxQlIwODdRVUZEVGp0QlFVTkJZU3hyUWtGQlZTeEpRVUZKVXl4WlFVRktMRU5CUVdsQ0xFVkJRVU0zUkN4TlFVRk5MRU5CUVVNc1EwRkJSQ3hGUVVGSk1rSXNUVUZCVFdsRExGRkJRVTRzUTBGQlpVb3NRMEZCWml4RFFVRktMRVZCUVhWQ0xFdEJRVXRxUWl4UlFVRTFRaXhEUVVGUUxFVkJRV3BDTEVOQlFWWTdRVUZEUVRzN1FVRkZSQ3haUVVGTGRrTXNTVUZCVEN4SFFVRlpMRXRCUVV0QkxFbEJRVXdzUTBGQlZUWkNMRTFCUVZZc1EwRkJhVUoxUWl4UlFVRlJjRVFzU1VGQmVrSXNRMEZCV2p0QlFVTkJMRTlCVmtRc1JVRlZSeXhKUVZaSU8wRkJWMEU3UVVGRlJDeExRVGxDUkN4TlFUaENUenRCUVVOT08wRkJRMEVzVlVGQlN5eEpRVUZKZFVRc1NVRkJTU3hEUVVGaUxFVkJRV2RDUVN4SlFVRkpMRXRCUVV0a0xFMUJRWHBDTEVWQlFXbERZeXhIUVVGcVF5eEZRVUZ6UXp0QlFVTnlReXhYUVVGTGNrSXNTMEZCVEN4RFFVRlhaU3hQUVVGWUxFTkJRVzFDTEZWQlFWTlBMRU5CUVZRc1JVRkJXVU1zUTBGQldpeEZRVUZsTzBGQlEycERPMEZCUTBFc1YwRkJTVUVzU1VGQlNTeERRVUZTTEVWQlFWYzdRVUZEVmxZc2RVSkJRV1VzUTBGQlpqdEJRVU5CT3p0QlFVVkVPMEZCUTBFN1FVRkRRU3hYUVVGSkxFdEJRVXRXTEZGQlFVd3NTMEZCYTBJc1NVRkJiRUlzU1VGQk1FSnZRaXhMUVVGTExFdEJRVXQyUWl4TFFVRk1MRU5CUVZkb1F5eE5RVUZZTEVkQlFXOUNMRU5CUVhaRUxFVkJRVEJFTzBGQlEzcEVMRmxCUVVrMlJDeGxRVUZsY0VNc1RVRkJUWEZETEdWQlFVNHNRMEZCYzBJM1JDeFZRVUZWVFN4eFFrRkJhRU1zUTBGQmJrSTdRVUZEUVc5RExIVkNRVUZsYTBJc1pVRkJaMEpzUWl4bFFVRmxMRU5CUVRsRE8wRkJRMEU3TzBGQlJVUk5MR2RDUVVGVExFbEJRVWxQTEZkQlFVb3NRMEZCWjBJc1JVRkJRekZFTEUxQlFVMHlRaXhOUVVGTlF5eHpRa0ZCVGl4RFFVRTJRbTFDTEZsQlFUZENMRVZCUVRKRGJFSXNUVUZCTTBNc1EwRkJhMFFzUTBGQlF5eExRVUZMT0VJc1pVRkJUQ3hGUVVGRUxFVkJRWGxDYUVNc1RVRkJUV2xETEZGQlFVNHNRMEZCWlVvc1EwRkJaaXhEUVVGNlFpeEZRVUUwUXl4TFFVRkxha0lzVVVGQmFrUXNRMEZCYkVRc1EwRkJVQ3hGUVVGb1FpeERRVUZVTzBGQlEwRmhMR2xDUVVGVkxFbEJRVWxUTEZsQlFVb3NRMEZCYVVJc1JVRkJRemRFTEUxQlFVMHlRaXhOUVVGTlF5eHpRa0ZCVGl4RFFVRTJRbWxDTEZsQlFUZENMRVZCUVRKRGFFSXNUVUZCTTBNc1EwRkJhMFFzUTBGQlF5eExRVUZMYVVNc1owSkJRVXdzUlVGQlJDeEZRVUV3UW01RExFMUJRVTFwUXl4UlFVRk9MRU5CUVdWS0xFTkJRV1lzUTBGQk1VSXNSVUZCTmtNc1MwRkJTMnBDTEZGQlFXeEVMRU5CUVd4RUxFTkJRVkFzUlVGQmFrSXNRMEZCVmpzN1FVRkZRU3haUVVGTGRrTXNTVUZCVEN4SFFVRlpMRXRCUVV0QkxFbEJRVXdzUTBGQlZUWkNMRTFCUVZZc1EwRkJhVUp6UWl4UFFVRlBia1FzU1VGQmVFSXNSVUZCT0VKdlJDeFJRVUZSY0VRc1NVRkJkRU1zUTBGQldqdEJRVU5CTEU5QmFrSkVMRVZCYVVKSExFbEJha0pJTzBGQmEwSkJPMEZCUTBRN08wRkJSVVFzVjBGQlR5eEpRVUZRTzBGQlEwRTdPMEZCUlVRc1UwRkJUU3g1UWtGQlRqdEJRVU5CT3pzN096dEJRVVZFT3pzN096dHJRMEZMWjBKMVF5eFJMRVZCUVZVN1FVRkRla0k3UVVGRFFVRXNZMEZCVjBFc1YwRkJWeXhIUVVGWUxFZEJRV2xDTEVkQlFXcENMRWRCUVhWQ1FTeFJRVUZzUXp0QlFVTkJMRlZCUVU4d1FpeExRVUZMUXl4TFFVRk1MRU5CUVZjelFpeFhRVUZYTEVkQlFWZ3NSMEZCYVVJc1IwRkJOVUlzUTBGQlVEdEJRVU5CT3pzN096dEJRVVZFT3pzN096czdPMnREUVU5blFrWXNVU3hGUVVGVmRFTXNTU3hGUVVGTk8wRkJReTlDTEU5QlFVbHpSQ3hOUVVGTlF5eFBRVUZPTEVOQlFXTnFRaXhSUVVGa0xFTkJRVW9zUlVGQk5rSTdRVUZETlVJN1FVRkRRU3hYUVVGUFFTeFRRVUZUT0VJc1IwRkJWQ3hEUVVGaExGVkJRVk5ETEV0QlFWUXNSVUZCWjBJN1FVRkRia01zV1VGQlR5eExRVUZMZEVJc1pVRkJUQ3hEUVVGeFFuTkNMRXRCUVhKQ0xFVkJRVFJDY2tVc1NVRkJOVUlzUTBGQlVEdEJRVU5CTEV0QlJrMHNSVUZGU2l4SlFVWkpMRVZCUlVWelJTeE5RVVpHTEVOQlJWTXNWVUZCVTBNc1EwRkJWQ3hGUVVGWlF5eERRVUZhTEVWQlFXVTdRVUZET1VJc1dVRkJUMFFzU1VGQlNVTXNRMEZCV0R0QlFVTkJMRXRCU2swc1JVRkpTaXhEUVVwSkxFTkJRVkE3UVVGTFFUczdRVUZGUkd4RExHTkJRVmRCTEZOQlFWTnRReXhSUVVGVUxFVkJRVmc3TzBGQlJVRXNUMEZCU1c1RExGTkJRVk52UXl4WFFVRlVMRWRCUVhWQ1F5eE5RVUYyUWl4RFFVRTRRaXhEUVVFNVFpeE5RVUZ4UXl4SFFVRjZReXhGUVVFNFF6dEJRVU0zUXp0QlFVTkJMRmRCUVU5RExGTkJRVk4wUXl4VFFVRlRkVU1zVTBGQlZDeERRVUZ0UWl4RFFVRnVRaXhEUVVGVUxFTkJRVkE3UVVGRFFUczdRVUZGUkR0QlFVTkJPMEZCUTBFc1QwRkJTV0lzWlVGQlpYQkRMRTFCUVUxeFF5eGxRVUZPTEVOQlFYTkNOMFFzVlVGQlZVMHNjVUpCUVdoRExFTkJRVzVDTzBGQlEwRXNWVUZCVDNkRUxFdEJRVXRETEV0QlFVd3NRMEZCVjBnc1pVRkJaU3hMUVVGTFl5eHhRa0ZCVEN4RFFVRXlRbmhETEZGQlFUTkNMRVZCUVhGRGRFTXNTVUZCY2tNc1EwRkJNVUlzUTBGQlVEdEJRVU5CT3p0QlFVVkVPenM3T3pzN096czdPM2REUVU5elFuTkRMRkVzUlVGQlZYUkRMRWtzUlVGQlRUdEJRVU55UXp0QlFVTkJMRmRCUVZGelF5eFJRVUZTTzBGQlEwTXNVMEZCU3l4SFFVRk1PMEZCUTBNc1dVRkJUeXhEUVVGUU8wRkJRMFFzVTBGQlN5eEhRVUZNTzBGQlEwTXNXVUZCVHl4RFFVRlFPMEZCUTBRc1UwRkJTeXhIUVVGTU8wRkJRME1zV1VGQlR5eERRVUZRTzBGQlEwUXNVMEZCU3l4SlFVRk1PMEZCUTBNc1dVRkJUeXhEUVVGUU8wRkJRMFFzVTBGQlN5eEhRVUZNTzBGQlEwTXNXVUZCVHl4RFFVRlFPMEZCUTBRc1UwRkJTeXhKUVVGTU8wRkJRME1zV1VGQlR5eExRVUZRTzBGQlEwUXNVMEZCU3l4SlFVRk1PMEZCUTBNc1dVRkJUeXhIUVVGUU8wRkJRMFFzVTBGQlN5eEhRVUZNTzBGQlEwTXNXVUZCVHl4SFFVRlFPMEZCUTBRc1UwRkJTeXhKUVVGTU8wRkJRME03UVVGRFFTeFpRVUZQTEVsQlFWQTdRVUZEUkN4VFFVRkxMRWxCUVV3N1FVRkRReXhaUVVGUExFbEJRVkE3UVVGRFJDeFRRVUZMTEVsQlFVdzdRVUZEUXl4WlFVRlBMRWxCUVZBN1FVRkRSQ3hUUVVGTExFdEJRVXc3UVVGRFF5eFpRVUZQTEV0QlFWQTdRVUZEUkN4VFFVRkxMRWxCUVV3N1FVRkRReXhaUVVGUExFdEJRVkE3UVVGRFJDeFRRVUZMTEVsQlFVdzdRVUZEUXl4WlFVRlBMRTFCUVZBN1FVRkRSRHRCUVVORE8wRkJRMEU3UVVGb1EwWTdPMEZCYlVOQkxGTkJRVTFCTEZkQlFWY3NNa0pCUVdwQ08wRkJRMEU3T3pzN08wRkJSVVE3T3pzN096dHZRMEZOYTBJN1FVRkJReXhWUVVGUExFMUJRVTBzUzBGQlMwY3NUMEZCV0N4SFFVRnhRaXhEUVVFMVFqdEJRVUU0UWpzN1FVRkZha1E3T3pzN096czdPenR4UTBGTmJVSTdRVUZCUXl4VlFVRlBMRTFCUVUwc1MwRkJTMEVzVDBGQldDeEhRVUZ4UWl4RFFVRTFRanRCUVVFNFFqczdPenM3TzFGQlJ6TkRVQ3hUTEVkQlFVRkJMRk03UVVGRFVqczdPenM3TzBsQlMwMDBRaXhaTEVkQlEwd3NjMEpCUVZrdlJDeE5RVUZhTEVWQlFXOUNPMEZCUVVFN08wRkJRMjVDTEUxQlFVdEZMRWxCUVV3c1IwRkJXVVlzVDBGQlQwVXNTVUZCYmtJN1FVRkRRU3hET3p0UlFVZE5Oa1FzV1N4SFFVRkJRU3haTzBGQlExSTdPenM3T3p0SlFVdE5TQ3hYTEVkQlEwd3NjVUpCUVZrMVJDeE5RVUZhTEVWQlFXOUNPMEZCUVVFN08wRkJRMjVDTEUxQlFVdEZMRWxCUVV3c1IwRkJXVVlzVDBGQlQwVXNTVUZCYmtJN1FVRkRRU3hET3p0UlFVZE5NRVFzVnl4SFFVRkJRU3hYTzBGQlExSTdPenM3T3p0SlFVdE5iMElzYTBJc1IwRkRUQ3cwUWtGQldXaEdMRTFCUVZvc1JVRkJiMEk3UVVGQlFUczdRVUZEYmtJc1RVRkJTME1zU1VGQlRDeEhRVUZaTEZOQlFWbzdRVUZEUVR0QlFVTkJMRTFCUVV0RExFbEJRVXdzUjBGQldUSkNMRTFCUVUxRExITkNRVUZPTEVOQlFUWkNMRWxCUVRkQ0xFVkJRVzFEUXl4TlFVRnVReXhEUVVFd1F6RkNMRlZCUVZWelFpeHhRa0ZCY0VRc1JVRkJNa1V6UWl4UFFVRlBhVVlzVlVGQmJFWXNRMEZCV2p0QlFVTkJMRU03TzFGQlIwMUVMR3RDTEVkQlFVRkJMR3RDTzBGQlExSTdPenM3T3p0SlFVdE5SU3hMTzBGQlEwd3NhMEpCUVdNN1FVRkJRVHM3UVVGRFlpeFBRVUZMYWtZc1NVRkJUQ3hIUVVGWlNTeFZRVUZWVHl4blFrRkJkRUk3UVVGRFFTeFBRVUZMVml4SlFVRk1MRWRCUVZrc1JVRkJXanRCUVVOQkxFOUJRVXRETEVsQlFVd3NSMEZCV1N4RlFVRmFPMEZCUTBFc1QwRkJTMmRHTEUxQlFVd3NSMEZCWXl4RlFVRmtPMEZCUTBFN08wRkJSVVE3T3pzN096czdPenM3TWtKQlRWTkRMRXNzUlVGQlQwTXNWeXhGUVVGaE8wRkJRelZDTEU5QlFVazVRaXhOUVVGTlF5eFBRVUZPTEVOQlFXTTBRaXhMUVVGa0xFTkJRVW9zUlVGQk1FSTdRVUZEZWtKQkxGVkJRVTFxUXl4UFFVRk9MRU5CUVdNc1ZVRkJVMjFETEVOQlFWUXNSVUZCV1ROQ0xFTkJRVm9zUlVGQlpUdEJRVU0xUWp0QlFVTkJMRk5CUVVrc1QwRkJUekJDTEZkQlFWQXNTMEZCZFVJc1ZVRkJka0lzU1VGQmNVTkRMRVZCUVVWeVJpeEpRVUZHTEV0QlFWY3NUVUZCY0VRc1JVRkJORVE3UVVGRE0wUXNWVUZCU1hOR0xHRkJRV0ZHTEZsQlFWa3hRaXhEUVVGYUxFVkJRV1V5UWl4RFFVRm1MRU5CUVdwQ096dEJRVVZCTEZWQlFVa3NVVUZCVDBNc1ZVRkJVQ3g1UTBGQlQwRXNWVUZCVUN4UFFVRnpRaXhSUVVFeFFpeEZRVUZ2UXp0QlFVTnVReXhaUVVGTExFbEJRVWs1UWl4RFFVRlVMRWxCUVdNNFFpeFZRVUZrTEVWQlFUQkNPMEZCUTNwQ0xHZENRVUZQT1VJc1EwRkJVRHRCUVVORExHTkJRVXNzVlVGQlREdEJRVU5ETmtJc1dVRkJSUzlETEZGQlFVWXNSMEZCWVdkRUxGZEJRVmM1UWl4RFFVRllMRU5CUVdJN1FVRkRRVHRCUVVORUxHTkJRVXNzV1VGQlREdEJRVU5ETmtJc1dVRkJSVGxETEZWQlFVWXNSMEZCWlN0RExGZEJRVmM1UWl4RFFVRllMRU5CUVdZN1FVRkRRVHRCUVVORUxHTkJRVXNzVlVGQlREdEJRVU5ETmtJc1dVRkJSVGRETEZGQlFVWXNSMEZCWVRaRExFVkJRVVV4UXl4bFFVRkdMRU5CUVd0Q01rTXNWMEZCVnpsQ0xFTkJRVmdzUTBGQmJFSXNRMEZCWWp0QlFVTkJPMEZCVkVZN1FVRlhRVHM3UVVGRlJEdEJRVU5CTmtJc1UwRkJSWGhETEZOQlFVWTdRVUZEUVR0QlFVTkVPenRCUVVWRUxGVkJRVXMxUXl4SlFVRk1MRWRCUVZrc1MwRkJTMEVzU1VGQlRDeERRVUZWTmtJc1RVRkJWaXhEUVVGcFFuVkVMRVZCUVVWd1JpeEpRVUZ1UWl4RFFVRmFPMEZCUTBFc1ZVRkJTME1zU1VGQlRDeEhRVUZaTUVJc1RVRkJUVEpFTEdGQlFVNHNRMEZCYjBJc1MwRkJTM1JHTEVsQlFVd3NRMEZCVlVVc1RVRkJPVUlzUlVGQmMwTXNRMEZCZEVNc1EwRkJXaXhEUVRGQ05FSXNRMEV3UWpCQ08wRkJRM1JFTEZWQlFVc3JSU3hOUVVGTUxFTkJRVmxOTEVsQlFWb3NRMEZCYVVKSUxFTkJRV3BDTzBGQlEwRXNTMEUxUWtRc1JVRTBRa2NzU1VFMVFrZzdRVUU0UWtFc1NVRXZRa1FzVFVFclFrODdRVUZEVGl4VFFVRkxjRVlzU1VGQlRDeEhRVUZaTEV0QlFVdEJMRWxCUVV3c1EwRkJWVFpDTEUxQlFWWXNRMEZCYVVKeFJDeE5RVUZOYkVZc1NVRkJka0lzUTBGQldqdEJRVU5CTEZOQlFVdERMRWxCUVV3c1IwRkJXVEJDTEUxQlFVMHlSQ3hoUVVGT0xFTkJRVzlDTEV0QlFVdDBSaXhKUVVGTUxFTkJRVlZGTEUxQlFUbENMRVZCUVhORExFTkJRWFJETEVOQlFWb3NRMEZHVFN4RFFVVm5SRHRCUVVOMFJDeFRRVUZMSzBVc1RVRkJUQ3hEUVVGWlRTeEpRVUZhTEVOQlFXbENUQ3hMUVVGcVFqdEJRVU5CT3p0QlFVVkVMRlZCUVU4c1NVRkJVRHRCUVVOQk96dEJRVVZFT3pzN096czdPenN5UWtGTFUwMHNSeXhGUVVGTE8wRkJRMklzVDBGQlNVNHNVVUZCVVN4SlFVRkpiRVFzVTBGQlNpeERRVUZqTEVWQlFVTm9ReXhOUVVGTkxFTkJRVU5ITEZWQlFWVm5RaXhoUVVGWUxFTkJRVkFzUlVGQlpDeERRVUZhTzBGQlEwRXJSQ3hUUVVGTmJFWXNTVUZCVGl4RFFVRlhkVVlzU1VGQldDeERRVUZuUWl4SlFVRm9RaXhGUVVaaExFTkJSVlU3UVVGRGRrSXNUMEZCU1VVc1VVRkJVWGhDTEV0QlFVdERMRXRCUVV3c1EwRkJWeXhYUVVGWGMwSXNSMEZCZEVJc1EwRkJXanRCUVVOQlRpeFRRVUZOYkVZc1NVRkJUaXhIUVVGaGEwWXNUVUZCVFd4R0xFbEJRVTRzUTBGQlZ6WkNMRTFCUVZnc1EwRkJhMEpHTEUxQlFVMHlSQ3hoUVVGT0xFTkJRVzlDUnl4TFFVRndRaXhGUVVFeVFpeERRVUV6UWl4RFFVRnNRaXhEUVVGaUxFTkJTbUVzUTBGSmEwUTdRVUZETDBRc1ZVRkJUeXhMUVVGTFF5eFJRVUZNTEVOQlFXTlNMRXRCUVdRc1EwRkJVRHRCUVVOQk96dEJRVVZFT3pzN096czdPenM3T3p0dFEwRlJhVUpUTEZNc1JVRkJWME1zVnl4RlFVRmhReXhwUWl4RlFVRnRRa01zYVVJc1JVRkJiVUk3UVVGRE9VVkVMSFZDUVVGdlFrRXNjVUpCUVhGQ0xFVkJRWHBETzBGQlEwRkRMSFZDUVVGdlFrRXNjVUpCUVhGQ0xFTkJRWHBET3p0QlFVVkJMRTlCUVVsYUxGRkJRVkVzU1VGQlNXeEVMRk5CUVVvc1EwRkJZeXhGUVVGRGFFTXNUVUZCVFN4RFFVRkRSeXhWUVVGVmEwSXNjMEpCUVZnc1EwRkJVQ3hGUVVGa0xFTkJRVm83UVVGRFFUWkVMRk5CUVUxc1JpeEpRVUZPTEVOQlFWZDFSaXhKUVVGWUxFTkJRV2RDTEVsQlFXaENMRVZCVERoRkxFTkJTM1pFTzBGQlEzWkNUQ3hUUVVGTmJFWXNTVUZCVGl4SFFVRmhhMFlzVFVGQlRXeEdMRWxCUVU0c1EwRkJWelpDTEUxQlFWZ3NRMEZCYTBKR0xFMUJRVTB5UkN4aFFVRk9MRU5CUVc5Q1N5eFRRVUZ3UWl4RlFVRXJRaXhEUVVFdlFpeERRVUZzUWl4RFFVRmlMRU5CVGpoRkxFTkJUVmc3TzBGQlJXNUZMRTlCUVVsSkxHVkJRV1U1UWl4TFFVRkxLMElzU1VGQlRDeERRVUZWU2l4WFFVRldMRU5CUVc1Q0xFTkJVamhGTEVOQlVXNURPMEZCUXpORFZpeFRRVUZOYkVZc1NVRkJUaXhIUVVGaGEwWXNUVUZCVFd4R0xFbEJRVTRzUTBGQlZ6WkNMRTFCUVZnc1EwRkJhMEpHTEUxQlFVMHlSQ3hoUVVGT0xFTkJRVzlDVXl4WlFVRndRaXhGUVVGclF5eERRVUZzUXl4RFFVRnNRaXhEUVVGaUxFTkJWRGhGTEVOQlUxSTdRVUZEZEVWaUxGTkJRVTFzUml4SlFVRk9MRWRCUVdGclJpeE5RVUZOYkVZc1NVRkJUaXhEUVVGWE5rSXNUVUZCV0N4RFFVRnJRa1lzVFVGQlRUSkVMR0ZCUVU0c1EwRkJiMEpQTEdsQ1FVRndRaXhGUVVGMVF5eERRVUYyUXl4RFFVRnNRaXhEUVVGaUxFTkJWamhGTEVOQlZVZzdRVUZETTBWWUxGTkJRVTFzUml4SlFVRk9MRWRCUVdGclJpeE5RVUZOYkVZc1NVRkJUaXhEUVVGWE5rSXNUVUZCV0N4RFFVRnJRa1lzVFVGQlRUSkVMR0ZCUVU0c1EwRkJiMEpSTEdsQ1FVRndRaXhGUVVGMVF5eERRVUYyUXl4RFFVRnNRaXhEUVVGaUxFTkJXRGhGTEVOQlYwZzdRVUZETTBVc1ZVRkJUeXhMUVVGTFNpeFJRVUZNTEVOQlFXTlNMRXRCUVdRc1EwRkJVRHRCUVVOQk96dEJRVVZFT3pzN096czdPenM3YTBOQlRXZENaU3hGTEVWQlFVbERMRVVzUlVGQlNUdEJRVU4yUWl4UFFVRkphRUlzVVVGQlVTeEpRVUZKYkVRc1UwRkJTaXhEUVVGakxFVkJRVU5vUXl4TlFVRk5MRU5CUVVOSExGVkJRVlZ0UWl4eFFrRkJXQ3hEUVVGUUxFVkJRV1FzUTBGQldqdEJRVU5CTkVRc1UwRkJUV3hHTEVsQlFVNHNRMEZCVjNWR0xFbEJRVmdzUTBGQlowSXNTVUZCYUVJc1JVRkdkVUlzUTBGRlFUczdRVUZGZGtJc1QwRkJTVmtzVDBGQlQwUXNUVUZCVFN4RFFVRnFRanRCUVVOQlJDeFJRVUZMUVN4TlFVRk5MRU5CUVZnN08wRkJSVUU3UVVGRFFTeFBRVUZKTEU5QlFVOURMRVZCUVZBc1MwRkJZeXhYUVVGc1FpeEZRVUVyUWp0QlFVTTVRaXhSUVVGSlJTeFRRVUZUTEVOQlExb3NRMEZCUXl4SlFVRkVMRVZCUVU4c1NVRkJVQ3hGUVVGaExFbEJRV0lzUlVGQmJVSXNTVUZCYmtJc1JVRkJlVUlzU1VGQmVrSXNSVUZCSzBJc1NVRkJMMElzUlVGQmNVTXNSMEZCY2tNc1JVRkJNRU1zUjBGQk1VTXNSVUZCSzBNc1IwRkJMME1zUlVGQmIwUXNSMEZCY0VRc1JVRkJlVVFzUjBGQmVrUXNSVUZCT0VRc1IwRkJPVVFzUlVGQmJVVXNSMEZCYmtVc1JVRkJkMFVzU1VGQmVFVXNSVUZCT0VVc1NVRkJPVVVzUTBGRVdTeEZRVVZhTEVOQlFVTXNTVUZCUkN4RlFVRlBMRWxCUVZBc1JVRkJZU3hKUVVGaUxFVkJRVzFDTEVkQlFXNUNMRVZCUVhkQ0xFZEJRWGhDTEVWQlFUWkNMRWRCUVRkQ0xFVkJRV3RETEVkQlFXeERMRVZCUVhWRExFZEJRWFpETEVWQlFUUkRMRWRCUVRWRExFVkJRV2xFTEVkQlFXcEVMRVZCUVhORUxFbEJRWFJFTEVWQlFUUkVMRWxCUVRWRUxFVkJRV3RGTEVsQlFXeEZMRVZCUVhkRkxFbEJRWGhGTEVWQlFUaEZMRWxCUVRsRkxFTkJSbGtzUTBGQllqdEJRVWxCTEZGQlFVbERMRk5CUVZOS0xFZEJRVWN2Uml4TlFVRm9RanRCUVVOQkxGRkJRVWx2Unl4UFFVRlBUQ3hOUVVGTkxFZEJRV3BDT3p0QlFVVkJMRkZCUVVsQkxFZEJRVWNzUTBGQlNDeE5RVUZWUVN4SFFVRkhMRU5CUVVnc1JVRkJUWGhDTEZkQlFVNHNSVUZCWkN4RlFVRnRRekJDTEU5QlFVOHNRMEZCVURzN1FVRkZia01zVVVGQlNVVXNVMEZCVXl4RFFVRmlMRVZCUVdkQ08wRkJRMllzWVVGQlVVb3NSMEZCUjNaQ0xFMUJRVWdzUTBGQlZUSkNMRk5CUVZNc1EwRkJia0lzUTBGQlVqdEJRVU5ETEZkQlFVc3NSMEZCVER0QlFVTkRSaXhqUVVGUExFTkJRVkE3UVVGRFFVY3NZMEZCVDB3c1IwRkJSM1pDTEUxQlFVZ3NRMEZCVlN4RFFVRldMRVZCUVdGRUxGZEJRV0lzUlVGQlVEdEJRVU5CTmtJc1kwRkJUMEVzUzBGQlMzcEZMRTFCUVV3c1EwRkJXVzlGTEVkQlFVZHlRaXhUUVVGSUxFTkJRV0VzUTBGQllpeEZRVUZuUW5sQ0xGTkJRVk1zUTBGQmVrSXNRMEZCV2l4RFFVRlFPMEZCUTBFN1FVRkRSQ3hYUVVGTExFZEJRVXc3UVVGRFEwWXNZMEZCVHl4RFFVRlFPMEZCUTBGSExHTkJRVTlNTEVkQlFVZDJRaXhOUVVGSUxFTkJRVlVzUTBGQlZpeEZRVUZoUkN4WFFVRmlMRVZCUVZBN1FVRkRRVFpDTEdOQlFVOUJMRXRCUVV0NlJTeE5RVUZNTEVOQlFWbHZSU3hIUVVGSGNrSXNVMEZCU0N4RFFVRmhMRU5CUVdJc1JVRkJaMEo1UWl4VFFVRlRMRU5CUVhwQ0xFTkJRVm9zUTBGQlVEdEJRVU5CTzBGQlEwUXNWMEZCU3l4SFFVRk1PMEZCUTBOR0xHTkJRVThzUTBGQlVEdEJRVU5CUnl4alFVRlBUQ3hIUVVGSGRrSXNUVUZCU0N4RFFVRlZMRU5CUVZZc1JVRkJZVFpDTEZkQlFXSXNSVUZCVUR0QlFVTkJSQ3hqUVVGUFFTeExRVUZMZWtVc1RVRkJUQ3hEUVVGWmIwVXNSMEZCUjNKQ0xGTkJRVWdzUTBGQllTeERRVUZpTEVWQlFXZENlVUlzVTBGQlV5eERRVUY2UWl4RFFVRmFMRU5CUVZBN1FVRkRRVHRCUVVORUxGZEJRVXNzUjBGQlREdEJRVU5EUml4alFVRlBMRU5CUVZBN1FVRkRRVWNzWTBGQlQwd3NSMEZCUjNaQ0xFMUJRVWdzUTBGQlZTeERRVUZXTEVWQlFXRTJRaXhYUVVGaUxFVkJRVkE3UVVGRFFVUXNZMEZCVDBFc1MwRkJTM3BGTEUxQlFVd3NRMEZCV1c5RkxFZEJRVWR5UWl4VFFVRklMRU5CUVdFc1EwRkJZaXhGUVVGblFubENMRk5CUVZNc1EwRkJla0lzUTBGQldpeERRVUZRTzBGQlEwRTdRVUZ3UWtZN1FVRnpRa0U3TzBGQlJVUXNVVUZCU1Vjc1lVRkJZVW9zVDBGQlQwUXNTVUZCVUN4RlFVRmhUU3hQUVVGaUxFTkJRWEZDU0N4SlFVRnlRaXhEUVVGcVFqdEJRVU5CVEN4VFFVRkxUeXhsUVVGbExFTkJRVU1zUTBGQmFFSXNSMEZCYjBJc1EwRkJjRUlzUjBGQmQwSkJMR0ZCUVdFc1EwRkJNVU03UVVGRFFUczdRVUZGUkhSQ0xGTkJRVTFzUml4SlFVRk9MRWRCUVdGclJpeE5RVUZOYkVZc1NVRkJUaXhEUVVGWE5rSXNUVUZCV0N4RFFVRnJRa1lzVFVGQlRUSkVMR0ZCUVU0c1EwRkJiMEpYTEVWQlFYQkNMRVZCUVhkQ0xFTkJRWGhDTEVOQlFXeENMRU5CUVdJc1EwRXZRM1ZDTEVOQkswTnhRenRCUVVNMVJHWXNVMEZCVFd4R0xFbEJRVTRzUjBGQllXdEdMRTFCUVUxc1JpeEpRVUZPTEVOQlFWYzJRaXhOUVVGWUxFTkJRV3RDUml4TlFVRk5Na1FzWVVGQlRpeERRVUZ2UW1Fc1NVRkJjRUlzUlVGQk1FSXNRMEZCTVVJc1EwRkJiRUlzUTBGQllpeERRV2hFZFVJc1EwRm5SSFZETzBGQlF6bEVMRlZCUVU4c1MwRkJTMVFzVVVGQlRDeERRVUZqVWl4TFFVRmtMRU5CUVZBN1FVRkRRVHM3UVVGRlJEczdPenM3T3pzN01FSkJTMUYzUWl4SkxFVkJRVTA3UVVGRFlpeFBRVUZKZUVJc1VVRkJVU3hKUVVGSmJFUXNVMEZCU2l4RFFVRmpMRVZCUVVOb1F5eE5RVUZOTEVOQlFVTkhMRlZCUVZWVExGbEJRVmdzUTBGQlVDeEZRVUZrTEVOQlFWbzdRVUZEUVN4UFFVRkpLMFlzWTBGQlkyaEdMRTFCUVUxcFJpeGhRVUZPTEVOQlFXOUNSaXhKUVVGd1FpeERRVUZzUWp0QlFVTkJlRUlzVTBGQlRXeEdMRWxCUVU0c1IwRkJZV3RHTEUxQlFVMXNSaXhKUVVGT0xFTkJRVmMyUWl4TlFVRllMRU5CUVd0Q1JpeE5RVUZOUXl4elFrRkJUaXhEUVVFMlFpdEZMRmxCUVZsNlJ5eE5RVUY2UXl4RFFVRnNRaXhEUVVGaUxFTkJTR0VzUTBGSGNVVTdRVUZEYkVablJpeFRRVUZOYkVZc1NVRkJUaXhIUVVGaGEwWXNUVUZCVFd4R0xFbEJRVTRzUTBGQlZ6WkNMRTFCUVZnc1EwRkJhMEk0UlN4WFFVRnNRaXhEUVVGaUxFTkJTbUVzUTBGSlowTTdRVUZETjBNc1ZVRkJUeXhMUVVGTGFrSXNVVUZCVEN4RFFVRmpVaXhMUVVGa0xFTkJRVkE3UVVGRFFUczdRVUZGUkRzN096czdPenM3SzBKQlMyRjNRaXhKTEVWQlFVMDdRVUZEYkVJc1QwRkJTWGhDTEZGQlFWRXNTVUZCU1d4RUxGTkJRVW9zUTBGQll5eEZRVUZEYUVNc1RVRkJUU3hEUVVGRFJ5eFZRVUZWVlN4cFFrRkJXQ3hEUVVGUUxFVkJRV1FzUTBGQldqdEJRVU5CTEU5QlFVazRSaXhqUVVGamFFWXNUVUZCVFdsR0xHRkJRVTRzUTBGQmIwSkdMRWxCUVhCQ0xFTkJRV3hDTzBGQlEwRjRRaXhUUVVGTmJFWXNTVUZCVGl4SFFVRmhhMFlzVFVGQlRXeEdMRWxCUVU0c1EwRkJWelpDTEUxQlFWZ3NRMEZCYTBKR0xFMUJRVTFETEhOQ1FVRk9MRU5CUVRaQ0swVXNXVUZCV1hwSExFMUJRWHBETEVOQlFXeENMRU5CUVdJc1EwRklhMElzUTBGSFowVTdRVUZEYkVablJpeFRRVUZOYkVZc1NVRkJUaXhIUVVGaGEwWXNUVUZCVFd4R0xFbEJRVTRzUTBGQlZ6WkNMRTFCUVZnc1EwRkJhMEk0UlN4WFFVRnNRaXhEUVVGaUxFTkJTbXRDTEVOQlNUSkNPMEZCUXpkRExGVkJRVThzUzBGQlMycENMRkZCUVV3c1EwRkJZMUlzUzBGQlpDeERRVUZRTzBGQlEwRTdPMEZCUlVRN096czdPenM3T3l0Q1FVdGhkMElzU1N4RlFVRk5PMEZCUTJ4Q0xFOUJRVWw0UWl4UlFVRlJMRWxCUVVsc1JDeFRRVUZLTEVOQlFXTXNSVUZCUTJoRExFMUJRVTBzUTBGQlEwY3NWVUZCVlZjc2EwSkJRVmdzUTBGQlVDeEZRVUZrTEVOQlFWbzdRVUZEUVN4UFFVRkpOa1lzWTBGQlkyaEdMRTFCUVUxcFJpeGhRVUZPTEVOQlFXOUNSaXhKUVVGd1FpeERRVUZzUWp0QlFVTkJlRUlzVTBGQlRXeEdMRWxCUVU0c1IwRkJZV3RHTEUxQlFVMXNSaXhKUVVGT0xFTkJRVmMyUWl4TlFVRllMRU5CUVd0Q1JpeE5RVUZOUXl4elFrRkJUaXhEUVVFMlFpdEZMRmxCUVZsNlJ5eE5RVUY2UXl4RFFVRnNRaXhEUVVGaUxFTkJTR3RDTEVOQlIyZEZPMEZCUTJ4R1owWXNVMEZCVFd4R0xFbEJRVTRzUjBGQllXdEdMRTFCUVUxc1JpeEpRVUZPTEVOQlFWYzJRaXhOUVVGWUxFTkJRV3RDT0VVc1YwRkJiRUlzUTBGQllpeERRVXByUWl4RFFVa3lRanRCUVVNM1F5eFZRVUZQTEV0QlFVdHFRaXhSUVVGTUxFTkJRV05TTEV0QlFXUXNRMEZCVUR0QlFVTkJPenRCUVVWRU96czdPenM3T3p0dlEwRkxhMEozUWl4SkxFVkJRVTA3UVVGRGRrSXNUMEZCU1hoQ0xGRkJRVkVzU1VGQlNXeEVMRk5CUVVvc1EwRkJZeXhGUVVGRGFFTXNUVUZCVFN4RFFVRkRSeXhWUVVGVldTeDFRa0ZCV0N4RFFVRlFMRVZCUVdRc1EwRkJXanRCUVVOQkxFOUJRVWswUml4alFVRmphRVlzVFVGQlRXbEdMR0ZCUVU0c1EwRkJiMEpHTEVsQlFYQkNMRU5CUVd4Q08wRkJRMEY0UWl4VFFVRk5iRVlzU1VGQlRpeEhRVUZoYTBZc1RVRkJUV3hHTEVsQlFVNHNRMEZCVnpaQ0xFMUJRVmdzUTBGQmEwSkdMRTFCUVUxRExITkNRVUZPTEVOQlFUWkNLMFVzV1VGQldYcEhMRTFCUVhwRExFTkJRV3hDTEVOQlFXSXNRMEZJZFVJc1EwRkhNa1E3UVVGRGJFWm5SaXhUUVVGTmJFWXNTVUZCVGl4SFFVRmhhMFlzVFVGQlRXeEdMRWxCUVU0c1EwRkJWelpDTEUxQlFWZ3NRMEZCYTBJNFJTeFhRVUZzUWl4RFFVRmlMRU5CU25WQ0xFTkJTWE5DTzBGQlF6ZERMRlZCUVU4c1MwRkJTMnBDTEZGQlFVd3NRMEZCWTFJc1MwRkJaQ3hEUVVGUU8wRkJRMEU3TzBGQlJVUTdPenM3T3pzN096UkNRVXRWZDBJc1NTeEZRVUZOTzBGQlEyWXNUMEZCU1hoQ0xGRkJRVkVzU1VGQlNXeEVMRk5CUVVvc1EwRkJZeXhGUVVGRGFFTXNUVUZCVFN4RFFVRkRSeXhWUVVGVll5eGpRVUZZTEVOQlFWQXNSVUZCWkN4RFFVRmFPMEZCUTBFc1QwRkJTVEJHTEdOQlFXTm9SaXhOUVVGTmFVWXNZVUZCVGl4RFFVRnZRa1lzU1VGQmNFSXNRMEZCYkVJN1FVRkRRWGhDTEZOQlFVMXNSaXhKUVVGT0xFZEJRV0ZyUml4TlFVRk5iRVlzU1VGQlRpeERRVUZYTmtJc1RVRkJXQ3hEUVVGclFrWXNUVUZCVFVNc2MwSkJRVTRzUTBGQk5rSXJSU3haUVVGWmVrY3NUVUZCZWtNc1EwRkJiRUlzUTBGQllpeERRVWhsTEVOQlIyMUZPMEZCUTJ4R1owWXNVMEZCVFd4R0xFbEJRVTRzUjBGQllXdEdMRTFCUVUxc1JpeEpRVUZPTEVOQlFWYzJRaXhOUVVGWUxFTkJRV3RDT0VVc1YwRkJiRUlzUTBGQllpeERRVXBsTEVOQlNUaENPMEZCUXpkRExGVkJRVThzUzBGQlMycENMRkZCUVV3c1EwRkJZMUlzUzBGQlpDeERRVUZRTzBGQlEwRTdPMEZCUlVRN096czdPenM3T3poQ1FVdFpkMElzU1N4RlFVRk5PMEZCUTJwQ0xFOUJRVWw0UWl4UlFVRlJMRWxCUVVsc1JDeFRRVUZLTEVOQlFXTXNSVUZCUTJoRExFMUJRVTBzUTBGQlEwY3NWVUZCVldVc1kwRkJXQ3hEUVVGUUxFVkJRV1FzUTBGQldqdEJRVU5CTEU5QlFVbDVSaXhqUVVGamFFWXNUVUZCVFdsR0xHRkJRVTRzUTBGQmIwSkdMRWxCUVhCQ0xFTkJRV3hDTzBGQlEwRjRRaXhUUVVGTmJFWXNTVUZCVGl4SFFVRmhhMFlzVFVGQlRXeEdMRWxCUVU0c1EwRkJWelpDTEUxQlFWZ3NRMEZCYTBKR0xFMUJRVTFETEhOQ1FVRk9MRU5CUVRaQ0swVXNXVUZCV1hwSExFMUJRWHBETEVOQlFXeENMRU5CUVdJc1EwRklhVUlzUTBGSGFVVTdRVUZEYkVablJpeFRRVUZOYkVZc1NVRkJUaXhIUVVGaGEwWXNUVUZCVFd4R0xFbEJRVTRzUTBGQlZ6WkNMRTFCUVZnc1EwRkJhMEk0UlN4WFFVRnNRaXhEUVVGaUxFTkJTbWxDTEVOQlNUUkNPMEZCUXpkRExGVkJRVThzUzBGQlMycENMRkZCUVV3c1EwRkJZMUlzUzBGQlpDeERRVUZRTzBGQlEwRTdPMEZCUlVRN096czdPenM3T3pKQ1FVdFRNa0lzU3l4RlFVRlBPMEZCUTJZc1QwRkJTVE5DTEZGQlFWRXNTVUZCU1d4RUxGTkJRVW9zUTBGQll5eEZRVUZEYUVNc1RVRkJUU3hEUVVGRFJ5eFZRVUZWWVN4aFFVRllMRU5CUVZBc1JVRkJaQ3hEUVVGYU8wRkJRMEVzVDBGQlNUSkdMR05CUVdOb1JpeE5RVUZOYVVZc1lVRkJUaXhEUVVGdlFrTXNTMEZCY0VJc1EwRkJiRUk3UVVGRFFUTkNMRk5CUVUxc1JpeEpRVUZPTEVkQlFXRnJSaXhOUVVGTmJFWXNTVUZCVGl4RFFVRlhOa0lzVFVGQldDeERRVUZyUWtZc1RVRkJUVU1zYzBKQlFVNHNRMEZCTmtJclJTeFpRVUZaZWtjc1RVRkJla01zUTBGQmJFSXNRMEZCWWl4RFFVaGxMRU5CUjIxRk8wRkJRMnhHWjBZc1UwRkJUV3hHTEVsQlFVNHNSMEZCWVd0R0xFMUJRVTFzUml4SlFVRk9MRU5CUVZjMlFpeE5RVUZZTEVOQlFXdENPRVVzVjBGQmJFSXNRMEZCWWl4RFFVcGxMRU5CU1RoQ08wRkJRemRETEZWQlFVOHNTMEZCUzJwQ0xGRkJRVXdzUTBGQlkxSXNTMEZCWkN4RFFVRlFPMEZCUTBFN08wRkJSVVE3T3pzN096czdLMEpCU1dFN1FVRkRXaXhQUVVGSlFTeFJRVUZSTEVsQlFVbDRRaXhYUVVGS0xFTkJRV2RDTEVWQlFVTXhSQ3hOUVVGTkxFTkJRVU1zU1VGQlJDeEZRVUZQTEVsQlFWQXNSVUZCWVN4SlFVRmlMRVZCUVcxQ0xFbEJRVzVDTEVOQlFWQXNSVUZCYUVJc1EwRkJXanRCUVVOQkxGVkJRVThzUzBGQlN6QkdMRkZCUVV3c1EwRkJZMUlzUzBGQlpDeERRVUZRTzBGQlEwRTdPenM3T3p0UlFVbE5SaXhMTEVkQlFVRkJMRXM3TzBGQlIxSTdPenRKUVVkTmNrUXNTenM3T3pzN096czdPMEZCUlV3N096czdORUpCU1dsQ08wRkJRMmhDTEZWQlFVOTRRaXhWUVVGVlF5eFBRVUZxUWp0QlFVTkJPenRCUVVWRU96czdPenM3T3p0blEwRkxjVUl3Unl4TkxFVkJRVkU3UVVGRE5VSXNWVUZCVDBFc1QwRkJUME1zUzBGQlVDeERRVUZoTEVWQlFXSXNSVUZCYVVJMVF5eEhRVUZxUWl4RFFVRnhRanRCUVVGQkxGZEJRVkUyUXl4TFFVRkxReXhWUVVGTUxFVkJRVkk3UVVGQlFTeEpRVUZ5UWl4RFFVRlFPMEZCUTBFN08wRkJSVVE3T3pzN096czdPelJDUVV0cFFrTXNReXhGUVVGSE8wRkJRMjVDTEZWQlFVOHNRMEZCUTBNc1RVRkJUVU1zVjBGQlYwWXNRMEZCV0N4RFFVRk9MRU5CUVVRc1NVRkJlVUpITEZOQlFWTklMRU5CUVZRc1EwRkJhRU03UVVGRFFUczdRVUZGUkRzN096czdPenM3T3pKQ1FVMXZRbWhHTEVzc1JVRkJUenRCUVVOMFFpeFZRVUZQTEhWQ1FVRlBRU3hMUVVGUUxFTkJRVkE3UVVGRFFUczdRVUZGVERzN096czdPenM3T3pzN08zbERRVk00UW05R0xFc3NSVUZCVHp0QlFVTnFReXhQUVVGSlF5eFRRVUZUUkN4UlFVRlJMRWxCUVhKQ096dEJRVVZCTEZWQlFVOUJMRkZCUVZGQkxGTkJRVk1zUTBGQmVFSXNSVUZCTWtJN1FVRkRka0pETEdWQlFWY3NRMEZCV0R0QlFVTkJRU3hqUVVGWlJDeFJRVUZSTEVsQlFWUXNSMEZCYVVJc1NVRkJOVUk3UVVGRFNEczdRVUZGUkN4UFFVRkpSU3hSUVVGUkxFVkJRVm83UVVGRFFTeFZRVUZQTEVsQlFWQXNSVUZCWVR0QlFVTlVRU3hWUVVGTmFrTXNTVUZCVGl4RFFVRlhaME1zVTBGQlV5eEpRVUZ3UWpzN1FVRkZRU3hSUVVGSlFTeFRRVUZUTEVsQlFXSXNSVUZCYlVKQkxGZEJRVmNzUTBGQldDeERRVUZ1UWl4TFFVTkxPMEZCUVVVN1FVRkJVVHRCUVVOc1FqczdRVUZGUkN4VlFVRlBReXhMUVVGUU8wRkJRMGc3TzBGQlJVUTdPenM3T3pzN08ydERRVXQxUWtNc1F5eEZRVUZITzBGQlEzcENMRlZCUVU5RExGVkJRVlZFTEVOQlFWWXNSVUZCWVZZc1MwRkJZaXhEUVVGdFFpeFBRVUZ1UWl4RlFVRTBRamRITEUxQlFUVkNMRWRCUVhGRExFTkJRVFZETzBGQlEwRTdPMEZCUlVRN096czdPenM3TzJ0RFFVdDFRbmxJTEVzc1JVRkJUenRCUVVNM1FpeFBRVUZKUXl4TlFVRk5MRVZCUVZZN1FVRkRRU3hQUVVGSlF5eFpRVUZLT3p0QlFVVkJSaXhUUVVGTk1VVXNUMEZCVGl4RFFVRmpMRlZCUVZNMlJTeEpRVUZVTEVWQlFXVTdRVUZETlVKRUxHMUNRVUZsUXl4TFFVRkxkRVFzVVVGQlRDeERRVUZqTEVWQlFXUXNRMEZCWmpzN1FVRkZRVHRCUVVOQkxGRkJRVWx4UkN4aFFVRmhNMGdzVFVGQllpeEpRVUYxUWl4RFFVRXpRaXhGUVVFNFFqSklMR1ZCUVdVc1RVRkJUVUVzV1VGQmNrSTdPMEZCUlRsQ1JDeFhRVUZQUXl4WlFVRlFPMEZCUTBFc1NVRlFSRHM3UVVGVFFTeFZRVUZQYkVRc1UwRkJVMmxFTEVkQlFWUXNSVUZCWXl4RlFVRmtMRU5CUVZBN1FVRkRRVHM3UVVGRlJEczdPenM3T3pzN08yZERRVTF4UWtjc1RTeEZRVUZSUXl4WExFVkJRV0U3UVVGRGVrTkJMR2xDUVVGalFTeGxRVUZsTEVOQlFUZENPenRCUVVWQkxFOUJRVWxETEZsQlFWbEdMRTlCUVU5MlJDeFJRVUZRTEVOQlFXZENMRVZCUVdoQ0xFTkJRV2hDT3p0QlFVVkJMRTlCUVVsNVJDeFZRVUZWTDBnc1RVRkJWaXhIUVVGdFFpeERRVUYyUWl4RlFVRXdRanRCUVVGRk8wRkJRek5DSzBnc1owSkJRVmtzVFVGQlRVRXNVMEZCYkVJN1FVRkRRVHM3UVVGRlJEdEJRVU5CTEU5QlFVbERMRmRCUVZkRUxGVkJRVlZGTEV0QlFWWXNRMEZCWjBJc1QwRkJhRUlzUTBGQlpqczdRVUZGUVR0QlFVTkJSQ3hqUVVGWFFTeFRRVUZUTDBRc1IwRkJWQ3hEUVVGaE8wRkJRVUVzVjBGQlVWRXNVMEZCVTNsRUxFbEJRVlFzUlVGQlpTeEZRVUZtTEVOQlFWSTdRVUZCUVN4SlFVRmlMRU5CUVZnN08wRkJSVUU3UVVGRFFTeFBRVUZKUml4VFFVRlRhRWtzVFVGQlZDeEhRVUZyUWpoSUxGZEJRWFJDTEVWQlFXMURPMEZCUTJ4RExGZEJRVTlCTEdOQlFXTkZMRk5CUVZOb1NTeE5RVUYyUWl4SFFVRm5ReXhEUVVGMlF5eEZRVUV3UXp0QlFVTjZRMmRKTEdOQlFWTkhMRTlCUVZRc1EwRkJhVUlzUTBGQmFrSTdRVUZEUVR0QlFVTkVPenRCUVVWRUxGVkJRVTlJTEZGQlFWQTdRVUZEUVRzN1FVRkZSRHM3T3pzN096czdNRUpCUzJVNVJDeExMRVZCUVU4N1FVRkRja0lzVDBGQlNXWXNUVUZCVFVNc1QwRkJUaXhEUVVGall5eExRVUZrTEVOQlFVb3NSVUZCTUVJc1QwRkJUMEVzUzBGQlVEdEJRVU14UWl4VlFVRlBMRU5CUVVOQkxFdEJRVVFzUTBGQlVEdEJRVU5CT3pzN096czdVVUZIVFhwRExFc3NSMEZCUVVFc1N6czdTVUZEUmpKSExFODdRVUZGVEN4dlFrRkJZenRCUVVGQk8wRkJSV0k3UVVGRVFUczdPMEZCUjBRN096czdPenM3TzJsRFFVbGxReXhMTEVWQlFVODdRVUZEY2tJc1QwRkJTVU1zVVVGQlVTeEpRVUZKZUVRc1MwRkJTaXhGUVVGYU8wRkJRMEVzVDBGQlNUVkRMRWxCUVVvN1FVRkRRU3hQUVVGSmNVY3NWVUZCVlN4RlFVRmtPenRCUVVWQlJpeFRRVUZOUnl4VFFVRk9MRU5CUVdkQ2VrWXNUMEZCYUVJc1EwRkJkMElzVlVGQlV6QkdMRkZCUVZRc1JVRkJiVUk3UVVGRE1VTkdMR05CUVZVc1JVRkJWanM3UVVGRlFTeFJRVUZKUlN4VFFVRlRReXhSUVVGVUxFdEJRWE5DTEVkQlFURkNMRVZCUVN0Q08wRkJRemxDUkN4alFVRlRSU3hKUVVGVUxFTkJRV00xUml4UFFVRmtMRU5CUVhOQ0xGVkJRVk0yUml4SFFVRlVMRVZCUVdNN1FVRkRia003UVVGRFFVd3NZMEZCVVd4RUxFbEJRVklzUTBGQllTeExRVUZMZDBRc1dVRkJUQ3hEUVVGclFrUXNSMEZCYkVJc1EwRkJZanRCUVVOQkxFMUJTRVE3UVVGTFFTeExRVTVFTEUxQlRVOHNTVUZCU1Vnc1UwRkJVME1zVVVGQlZDeExRVUZ6UWl4SFFVRXhRaXhGUVVFclFqdEJRVU55UXp0QlFVTkJlRWNzV1VGQlR5eExRVUZMTkVjc1pVRkJUQ3hEUVVGeFFrd3NVVUZCY2tJc1EwRkJVRHRCUVVOQk8wRkJRMEU3TzBGQlJVUklMRlZCUVUwNVF5eFJRVUZPTEVOQlFXVXNTVUZCU1hwRUxGTkJRVW9zUTBGQll5eEZRVUZEUXl4UFFVRlBkVWNzVDBGQlVpeEZRVUZwUW5CSExGVkJRVlVzUzBGQlN6SkhMR1ZCUVV3c1EwRkJjVUpNTEZGQlFYSkNMRU5CUVROQ0xFVkJRVEpFZGtjc1RVRkJUVUVzU1VGQmFrVXNSVUZCWkN4RFFVRm1PenRCUVVWQk8wRkJRMEZCTEZkQlFVOHNRMEZCVUR0QlFVTkJMRWxCYmtKRU96dEJRWEZDUVN4VlFVRlBiMGNzUzBGQlVEdEJRVU5CT3p0QlFVZEVPenM3T3pzN095dENRVWxoZEVjc1N5eEZRVUZQTzBGQlEyNUNMRlZCUVU5QkxFMUJRVTByUnl4UFFVRk9MRU5CUVdNc1IwRkJaQ3hGUVVGdFFpeEZRVUZ1UWl4RFFVRlFPMEZCUTBFN08wRkJSMFE3T3pzN096czdhME5CU1dkQ00wTXNTU3hGUVVGTk8wRkJRM0pDTEZkQlFWRkJMRXRCUVV0cVJTeFJRVUZpTzBGQlEwTXNVMEZCU3l4SFFVRk1PMEZCUTBNc1dVRkJUeXhIUVVGUU8wRkJRMFFzVTBGQlN5eEhRVUZNTzBGQlEwTXNXVUZCVDJsRkxFdEJRVXMwUXl4UlFVRk1MRXRCUVd0Q0xFbEJRV3hDTEVkQlFYbENMRWRCUVdoRE8wRkJRMFFzVTBGQlN5eEhRVUZNTzBGQlEwTXNXVUZCVHpWRExFdEJRVXMwUXl4UlFVRk1MRXRCUVd0Q0xFbEJRV3hDTEVkQlFYbENMRWRCUVdoRE8wRkJRMFFzVTBGQlN5eEhRVUZNTzBGQlEwTXNXVUZCVHpWRExFdEJRVXMwUXl4UlFVRk1MRXRCUVd0Q0xFbEJRV3hDTEVkQlFYbENMRWRCUVdoRE8wRkJVa1k3TzBGQlYwRXNWVUZCVHpWRExFdEJRVXRxUlN4UlFVRmFPMEZCUTBFN096czdPenRSUVVkTmFVY3NUeXhIUVVGQlFTeFBPMEZCUTFJN096czdPenRKUVV0TllTeE5PMEZCUTB3c2FVSkJRVmxETEUxQlFWb3NSVUZCYjBJN1FVRkJRVHM3UVVGRGJrSXNUMEZCUzNCS0xFbEJRVXdzUjBGQldTeEZRVUZhT3p0QlFVVkJMRTFCUVVseFNpeFpRVUZaUkN4UFFVRlBiRW9zVFVGQlVDeEhRVUZuUWl4RFFVRm9RaXhIUVVGdlFrTXNWVUZCVlVzc2IwSkJRVGxDTEVkQlFYRkVUQ3hWUVVGVlNTeHZRa0ZCTDBVN1FVRkRRU3hOUVVGSkswa3NhVUpCUVdsQ00wZ3NUVUZCVFRKRUxHRkJRVTRzUTBGQmIwSTRSQ3hQUVVGUGJFb3NUVUZCTTBJc1JVRkJiVU1zUTBGQmJrTXNRMEZCY2tJc1EwRktiVUlzUTBGSmVVTTdPMEZCUlRWRU8wRkJRMEVzVDBGQlMwWXNTVUZCVEN4RFFVRlZkVVlzU1VGQlZpeERRVUZsTEVsQlFVa3hSaXhMUVVGS0xFTkJRVlU3UVVGRGJrSkZMRk5CUVUxSkxGVkJRVlZGTEdsQ1FVUkhPMEZCUlc1Q1RDeFRRVUZOY1Vvc1ZVRkJWWGhJTEUxQlFWWXNRMEZCYVVKNVNDeGpRVUZxUWl4RlFVRnBRMjVLTEZWQlFWVk5MSEZDUVVFelF5eERRVVpoTEVWQlFWWXNRMEZCWmpzN1FVRkpRVHRCUVVOQk1ra3NVMEZCVDI1SExFOUJRVkFzUTBGQlpTeFZRVUZUZFVZc1MwRkJWQ3hGUVVGblFpOUZMRU5CUVdoQ0xFVkJRVzFDTzBGQlEycERLMFVzVTBGQlRUbERMRkZCUVU0c1EwRkJaU3hKUVVGSk1VUXNVMEZCU2l4RFFVRmpMRVZCUVVOb1F5eE5RVUZOUnl4VlFVRlZiMElzYjBKQlFXcENMRVZCUVdRc1EwRkJaanRCUVVOQkxGRkJRVXQyUWl4SlFVRk1MRU5CUVZWMVJpeEpRVUZXTEVOQlFXVnBSQ3hMUVVGbU8wRkJRMEVzUjBGSVJDeEZRVWRITEVsQlNFZzdRVUZKUVRzN1FVRkZSRHM3T3pzN096czdPRUpCU1ZrN1FVRkRXQ3hQUVVGSlpTeFJRVUZSTEVWQlFWbzdPMEZCUlVFN1FVRkRRU3hSUVVGTGRrb3NTVUZCVEN4RFFVRlZhVVFzVDBGQlZpeERRVUZyUWl4VlFVRkRkVWNzUTBGQlJEdEJRVUZCTEZkQlFVOUVMRkZCUVZGQkxFMUJRVTB4U0N4TlFVRk9MRU5CUVdFeVNDeEZRVUZGZWtvc1NVRkJaaXhGUVVGeFFubEtMRVZCUVVWMlNpeEpRVUYyUWl4RlFVRTJRblZLTEVWQlFVVjRTaXhKUVVFdlFpeERRVUZtTzBGQlFVRXNTVUZCYkVJN08wRkJSVUVzVlVGQlR5eEpRVUZKZVVvc1ZVRkJTaXhEUVVGbFJpeExRVUZtTEVOQlFWQTdRVUZEUVRzN1FVRkZSRHM3T3pzN096c3lRa0ZKVXp0QlFVTlNMRTlCUVVrc1QwRkJUMGNzU1VGQlVDeExRVUZuUWl4VlFVRndRaXhGUVVGblF5eFBRVUZQUVN4TFFVRkxReXhQUVVGUFF5eFpRVUZRTEVOQlFXOUNReXhMUVVGd1FpeERRVUV3UWl4SlFVRXhRaXhGUVVGblF5eExRVUZMUXl4VFFVRk1MRVZCUVdoRExFTkJRVXdzUTBGQlVEdEJRVU5vUXl4VlFVRlBMRWxCUVVsRExFMUJRVW9zUTBGQlZ5eExRVUZMUkN4VFFVRk1MRVZCUVZnc1JVRkJOa0owUml4UlFVRTNRaXhEUVVGelF5eFJRVUYwUXl4RFFVRlFPMEZCUTBFN08wRkJSVVU3T3pzN096czdORUpCU1ZVN1FVRkRWQ3hWUVVGUExEUkNRVUUwUWl4TFFVRkxkMFlzVFVGQlRDeEZRVUZ1UXp0QlFVTkJPenRCUVVWS096czdPenM3T3pKQ1FVbFpPMEZCUTFJc1ZVRkJUME1zVVVGQlVVTXNUVUZCVWl4RFFVRmxReXhMUVVGbUxFTkJRWEZDTEVsQlFVbEtMRTFCUVVvc1EwRkJWeXhMUVVGTFJDeFRRVUZNTEVWQlFWZ3NRMEZCY2tJc1EwRkJVRHRCUVVOQk96dEJRVVZLT3pzN096czdPekpDUVVsVFRTeFJMRVZCUVZVN1FVRkRiRUlzVDBGQlNUZERMRk5CUVZNc1NVRkJTWGRETEUxQlFVb3NRMEZCVnl4TFFVRkxSQ3hUUVVGTUxFVkJRVmdzUTBGQllqdEJRVU5CVHl4TlFVRkhReXhUUVVGSUxFTkJRV0ZHTEZkQlFWY3NUVUZCZUVJc1JVRkJaME0zUXl4TlFVRm9ReXhGUVVGM1F5eFZRVUZWWjBRc1IwRkJWaXhGUVVGbE8wRkJRM1JFTEZGQlFVZEJMRWRCUVVnc1JVRkJVU3hQUVVGUFF5eFJRVUZSUXl4SFFVRlNMRU5CUVZsR0xFZEJRVm9zUTBGQlVEdEJRVU5TTEVsQlJrUTdRVUZIUVRzN096czdPMUZCUjAxd1FpeE5MRWRCUVVGQkxFMGlMQ0ptYVd4bElqb2lhVzVrWlhndWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRTlpYW1WamRDQnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQjBhR1VnWTJoMWJtc2djMlZqZEdsdmJpQnZaaUJoSUUxSlJFa2dabWxzWlM1Y2JpQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQm1hV1ZzWkhNZ0xTQjdkSGx3WlRvZ2JuVnRZbVZ5TENCa1lYUmhPaUJoY25KaGVTd2djMmw2WlRvZ1lYSnlZWGw5WEc0Z0tpQkFjbVYwZFhKdUlIdERhSFZ1YTMxY2JpQXFMMXh1WTJ4aGMzTWdRMmgxYm1zZ2UxeHVYSFJqYjI1emRISjFZM1J2Y2lobWFXVnNaSE1wSUh0Y2JseDBYSFIwYUdsekxuUjVjR1VnUFNCbWFXVnNaSE11ZEhsd1pUdGNibHgwWEhSMGFHbHpMbVJoZEdFZ1BTQm1hV1ZzWkhNdVpHRjBZVHRjYmx4MFhIUjBhR2x6TG5OcGVtVWdQU0JiTUN3Z01Dd2dNQ3dnWm1sbGJHUnpMbVJoZEdFdWJHVnVaM1JvWFR0Y2JseDBmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ2UwTm9kVzVyZlR0Y2JpOHFLbHh1SUNvZ1RVbEVTU0JtYVd4bElHWnZjbTFoZENCamIyNXpkR0Z1ZEhNc0lHbHVZMngxWkdsdVp5QnViM1JsSUMwK0lFMUpSRWtnYm5WdFltVnlJSFJ5WVc1emJHRjBhVzl1TGx4dUlDb2dRSEpsZEhWeWJpQjdRMjl1YzNSaGJuUnpmVnh1SUNvdlhHNWNiblpoY2lCRGIyNXpkR0Z1ZEhNZ1BTQjdYRzVjZEZaRlVsTkpUMDVjZEZ4MFhIUmNkRngwT2lBbk1TNDFMakluTEZ4dVhIUklSVUZFUlZKZlEwaFZUa3RmVkZsUVJTQWdYSFJjZERvZ1d6QjROR1FzSURCNE5UUXNJREI0Tmpnc0lEQjROalJkTENBdkx5Qk5kR2hrWEc1Y2RFaEZRVVJGVWw5RFNGVk9TMTlNUlU1SFZFZ2dJRngwT2lCYk1IZ3dNQ3dnTUhnd01Dd2dNSGd3TUN3Z01IZ3dObDBzSUM4dklFaGxZV1JsY2lCemFYcGxJR1p2Y2lCVFRVWmNibHgwU0VWQlJFVlNYME5JVlU1TFgwWlBVazFCVkRBZ0lDQWdPaUJiTUhnd01Dd2dNSGd3TUYwc0lDOHZJRTFwWkdrZ1ZIbHdaU0F3SUdsa1hHNWNkRWhGUVVSRlVsOURTRlZPUzE5R1QxSk5RVlF4SUNBZ0lEb2dXekI0TURBc0lEQjRNREZkTENBdkx5Qk5hV1JwSUZSNWNHVWdNU0JwWkZ4dVhIUklSVUZFUlZKZlEwaFZUa3RmUkVsV1NWTkpUMDRnSUNBNklGc3dlREF3TENBd2VEZ3dYU3dnTHk4Z1JHVm1ZWFZzZEhNZ2RHOGdNVEk0SUhScFkydHpJSEJsY2lCaVpXRjBYRzVjZEZSU1FVTkxYME5JVlU1TFgxUlpVRVZjZEZ4ME9pQmJNSGcwWkN3Z01IZzFOQ3dnTUhnM01pd2dNSGcyWWwwc0lDOHZJRTFVY21zc1hHNWNkRTFGVkVGZlJWWkZUbFJmU1VSY2RGeDBYSFE2SURCNFJrWXNYRzVjZEUxRlZFRmZWRVZZVkY5SlJGeDBYSFJjZERvZ01IZ3dNU3hjYmx4MFRVVlVRVjlEVDFCWlVrbEhTRlJmU1VSY2RGeDBPaUF3ZURBeUxGeHVYSFJOUlZSQlgxUlNRVU5MWDA1QlRVVmZTVVJjZEZ4ME9pQXdlREF6TEZ4dVhIUk5SVlJCWDBsT1UxUlNWVTFGVGxSZlRrRk5SVjlKUkNBNklEQjRNRFFzWEc1Y2RFMUZWRUZmVEZsU1NVTmZTVVJjZEZ4MFhIUTZJREI0TURVc1hHNWNkRTFGVkVGZlRVRlNTMFZTWDBsRVhIUmNkRngwT2lBd2VEQTJMRnh1WEhSTlJWUkJYME5WUlY5UVQwbE9WRngwWEhSY2REb2dNSGd3Tnl4Y2JseDBUVVZVUVY5VVJVMVFUMTlKUkZ4MFhIUmNkRG9nTUhnMU1TeGNibHgwVFVWVVFWOVRUVlJRUlY5UFJrWlRSVlJjZEZ4ME9pQXdlRFUwTEZ4dVhIUk5SVlJCWDFSSlRVVmZVMGxIVGtGVVZWSkZYMGxFWEhRNklEQjROVGdzWEc1Y2RFMUZWRUZmUzBWWlgxTkpSMDVCVkZWU1JWOUpSRngwT2lBd2VEVTVMRnh1WEhSTlJWUkJYMFZPUkY5UFJsOVVVa0ZEUzE5SlJGeDBPaUJiTUhneVJpd2dNSGd3TUYwc1hHNWNkRU5QVGxSU1QweE1SVkpmUTBoQlRrZEZYMU5VUVZSVlV6b2dNSGhDTUN3Z0x5OGdhVzVqYkhWa1pYTWdZMmhoYm01bGJDQnVkVzFpWlhJZ0tEQXBYRzVjZEZCU1QwZFNRVTFmUTBoQlRrZEZYMU5VUVZSVlUxeDBPaUF3ZUVNd0xDQXZMeUJwYm1Oc2RXUmxjeUJqYUdGdWJtVnNJRzUxYldKbGNpQW9NQ2xjYm4wN1hHNWNibVY0Y0c5eWRDQjdRMjl1YzNSaGJuUnpmVHRjYmk4cUtseHVJQ29nU0c5c1pITWdZV3hzSUdSaGRHRWdabTl5SUdFZ1hDSmpiMjUwY205c2JHVnlJR05vWVc1blpWd2lJRTFKUkVrZ1pYWmxiblJjYmlBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCbWFXVnNaSE1nZTJOdmJuUnliMnhzWlhKT2RXMWlaWEk2SUdsdWRHVm5aWElzSUdOdmJuUnliMnhzWlhKV1lXeDFaVG9nYVc1MFpXZGxjbjFjYmlBcUlFQnlaWFIxY200Z2UwTnZiblJ5YjJ4c1pYSkRhR0Z1WjJWRmRtVnVkSDFjYmlBcUwxeHVZMnhoYzNNZ1EyOXVkSEp2Ykd4bGNrTm9ZVzVuWlVWMlpXNTBJSHRjYmx4MFkyOXVjM1J5ZFdOMGIzSW9abWxsYkdSektTQjdYRzVjZEZ4MGRHaHBjeTUwZVhCbElEMGdKMk52Ym5SeWIyeHNaWEluTzF4dVhIUmNkQzh2SUdSbGJIUmhJSFJwYldVZ1pHVm1ZWFZzZEhNZ2RHOGdNQzVjYmx4MFhIUjBhR2x6TG1SaGRHRWdQU0JWZEdsc2N5NXVkVzFpWlhKVWIxWmhjbWxoWW14bFRHVnVaM1JvS0RCNE1EQXBMbU52Ym1OaGRDaERiMjV6ZEdGdWRITXVRMDlPVkZKUFRFeEZVbDlEU0VGT1IwVmZVMVJCVkZWVExDQm1hV1ZzWkhNdVkyOXVkSEp2Ykd4bGNrNTFiV0psY2l3Z1ptbGxiR1J6TG1OdmJuUnliMnhzWlhKV1lXeDFaU2s3WEc1Y2RIMWNibjFjYmx4dVpYaHdiM0owSUh0RGIyNTBjbTlzYkdWeVEyaGhibWRsUlhabGJuUjlPMXh1THlvcVhHNGdLaUJQWW1wbFkzUWdjbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdZU0J0WlhSaElHVjJaVzUwTGx4dUlDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlHWnBaV3hrY3lBdElIUjVjR1VzSUdSaGRHRmNiaUFxSUVCeVpYUjFjbTRnZTAxbGRHRkZkbVZ1ZEgxY2JpQXFMMXh1WTJ4aGMzTWdUV1YwWVVWMlpXNTBJSHRjYmx4MFkyOXVjM1J5ZFdOMGIzSW9abWxsYkdSektTQjdYRzVjZEZ4MGRHaHBjeTUwZVhCbElEMGdKMjFsZEdFbk8xeHVYSFJjZEhSb2FYTXVaR0YwWVNBOUlGVjBhV3h6TG01MWJXSmxjbFJ2Vm1GeWFXRmliR1ZNWlc1bmRHZ29NSGd3TUNrN0x5OGdVM1JoY25RZ2QybDBhQ0I2WlhKdklIUnBiV1VnWkdWc2RHRmNibHgwWEhSMGFHbHpMbVJoZEdFZ1BTQjBhR2x6TG1SaGRHRXVZMjl1WTJGMEtFTnZibk4wWVc1MGN5NU5SVlJCWDBWV1JVNVVYMGxFTENCbWFXVnNaSE11WkdGMFlTazdYRzVjZEgxY2JuMWNibHh1Wlhod2IzSjBJSHROWlhSaFJYWmxiblI5TzF4dUx5b3FYRzRnS2lCWGNtRndjR1Z5SUdadmNpQnViM1JsVDI1RmRtVnVkQzl1YjNSbFQyWm1SWFpsYm5RZ2IySnFaV04wY3lCMGFHRjBJR0oxYVd4a2N5QmliM1JvSUdWMlpXNTBjeTVjYmlBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCbWFXVnNaSE1nTFNCN2NHbDBZMmc2SUNkYlF6UmRKeXdnWkhWeVlYUnBiMjQ2SUNjMEp5d2dkMkZwZERvZ0p6UW5MQ0IyWld4dlkybDBlVG9nTVMweE1EQjlYRzRnS2lCQWNtVjBkWEp1SUh0T2IzUmxSWFpsYm5SOVhHNGdLaTljYm1Oc1lYTnpJRTV2ZEdWRmRtVnVkQ0I3WEc1Y2RHTnZibk4wY25WamRHOXlLR1pwWld4a2N5a2dlMXh1WEhSY2RIUm9hWE11ZEhsd1pTQmNkRngwUFNBbmJtOTBaU2M3WEc1Y2RGeDBkR2hwY3k1d2FYUmphQ0JjZEZ4MFBTQlZkR2xzY3k1MGIwRnljbUY1S0dacFpXeGtjeTV3YVhSamFDazdYRzVjZEZ4MGRHaHBjeTUzWVdsMElGeDBYSFE5SUdacFpXeGtjeTUzWVdsMElIeDhJREE3WEc1Y2RGeDBkR2hwY3k1a2RYSmhkR2x2YmlCY2REMGdabWxsYkdSekxtUjFjbUYwYVc5dU8xeHVYSFJjZEhSb2FYTXVjMlZ4ZFdWdWRHbGhiQ0E5SUdacFpXeGtjeTV6WlhGMVpXNTBhV0ZzSUh4OElHWmhiSE5sTzF4dVhIUmNkSFJvYVhNdWRtVnNiMk5wZEhrZ1hIUTlJR1pwWld4a2N5NTJaV3h2WTJsMGVTQjhmQ0ExTUR0Y2JseDBYSFIwYUdsekxtTm9ZVzV1Wld3Z1hIUTlJR1pwWld4a2N5NWphR0Z1Ym1Wc0lIeDhJREU3WEc1Y2RGeDBkR2hwY3k1eVpYQmxZWFFnWEhROUlHWnBaV3hrY3k1eVpYQmxZWFFnZkh3Z01UdGNibHgwWEhSMGFHbHpMblpsYkc5amFYUjVJRngwUFNCMGFHbHpMbU52Ym5abGNuUldaV3h2WTJsMGVTaDBhR2x6TG5abGJHOWphWFI1S1R0Y2JseDBYSFIwYUdsekxtZHlZV05sWEhSY2REMGdabWxsYkdSekxtZHlZV05sTzF4dVhIUmNkSFJvYVhNdVluVnBiR1JFWVhSaEtDazdYRzVjZEgxY2JseHVYSFF2S2lwY2JseDBJQ29nUW5WcGJHUnpJR2x1ZENCaGNuSmhlU0JtYjNJZ2RHaHBjeUJsZG1WdWRDNWNibHgwSUNvZ1FISmxkSFZ5YmlCN1RtOTBaVVYyWlc1MGZWeHVYSFFnS2k5Y2JseDBZblZwYkdSRVlYUmhLQ2tnZTF4dVhIUmNkSFJvYVhNdVpHRjBZU0E5SUZ0ZE8xeHVYRzVjZEZ4MGRtRnlJSFJwWTJ0RWRYSmhkR2x2YmlBOUlIUm9hWE11WjJWMFZHbGphMFIxY21GMGFXOXVLSFJvYVhNdVpIVnlZWFJwYjI0c0lDZHViM1JsSnlrN1hHNWNkRngwZG1GeUlISmxjM1JFZFhKaGRHbHZiaUE5SUhSb2FYTXVaMlYwVkdsamEwUjFjbUYwYVc5dUtIUm9hWE11ZDJGcGRDd2dKM0psYzNRbktUdGNibHh1WEhSY2RDOHZJRUZ3Y0d4NUlHZHlZV05sSUc1dmRHVW9jeWtnWVc1a0lITjFZblJ5WVdOMElIUnBZMnR6SUNoamRYSnlaVzUwYkhrZ01TQjBhV05ySUhCbGNpQm5jbUZqWlNCdWIzUmxLU0JtY205dElIUnBZMnRFZFhKaGRHbHZiaUJ6YnlCdVpYUWdkbUZzZFdVZ2FYTWdkR2hsSUhOaGJXVmNibHgwWEhScFppQW9kR2hwY3k1bmNtRmpaU2tnZTF4dVhIUmNkRngwYkdWMElHZHlZV05sUkhWeVlYUnBiMjRnUFNBeE8xeHVYSFJjZEZ4MGRHaHBjeTVuY21GalpTQTlJRlYwYVd4ekxuUnZRWEp5WVhrb2RHaHBjeTVuY21GalpTazdYRzVjZEZ4MFhIUjBhR2x6TG1keVlXTmxMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNG9jR2wwWTJncElIdGNibHgwWEhSY2RGeDBiR1YwSUc1dmRHVkZkbVZ1ZENBOUlHNWxkeUJPYjNSbFJYWmxiblFvZTNCcGRHTm9PblJvYVhNdVozSmhZMlVzSUdSMWNtRjBhVzl1T2lkVUp5QXJJR2R5WVdObFJIVnlZWFJwYjI1OUtUdGNibHgwWEhSY2RGeDBkR2hwY3k1a1lYUmhJRDBnZEdocGN5NWtZWFJoTG1OdmJtTmhkQ2h1YjNSbFJYWmxiblF1WkdGMFlTbGNibHh1WEhSY2RGeDBYSFIwYVdOclJIVnlZWFJwYjI0Z0xUMGdaM0poWTJWRWRYSmhkR2x2Ymp0Y2JseDBYSFJjZEgwc0lIUm9hWE1wTzF4dVhIUmNkSDFjYmx4dVhIUmNkQzh2SUdacFpXeGtjeTV3YVhSamFDQmpiM1ZzWkNCaVpTQmhiaUJoY25KaGVTQnZaaUJ3YVhSamFHVnpMbHh1WEhSY2RDOHZJRWxtSUhOdklHTnlaV0YwWlNCdWIzUmxJR1YyWlc1MGN5Qm1iM0lnWldGamFDQmhibVFnWVhCd2JIa2dkR2hsSUhOaGJXVWdaSFZ5WVhScGIyNHVYRzVjZEZ4MGRtRnlJRzV2ZEdWUGJpd2dibTkwWlU5bVpqdGNibHgwWEhScFppQW9RWEp5WVhrdWFYTkJjbkpoZVNoMGFHbHpMbkJwZEdOb0tTa2dlMXh1WEhSY2RGeDBMeThnUW5rZ1pHVm1ZWFZzZENCMGFHbHpJR2x6SUdFZ1kyaHZjbVFnYVdZZ2FYUW5jeUJoYmlCaGNuSmhlU0J2WmlCdWIzUmxjeUIwYUdGMElISmxjWFZwY21WeklHOXVaU0JPYjNSbFQyNUZkbVZ1ZEM1Y2JseDBYSFJjZEM4dklFbG1JSFJvYVhNdWMyVnhkV1Z1ZEdsaGJDQTlQVDBnZEhKMVpTQjBhR1Z1SUdsMEozTWdZU0J6WlhGMVpXNTBhV0ZzSUhOMGNtbHVaeUJ2WmlCdWIzUmxjeUIwYUdGMElISmxjWFZwY21WeklITmxjR0Z5WVhSbElFNXZkR1ZQYmtWMlpXNTBjeTVjYmx4MFhIUmNkR2xtSUNnZ0lTQjBhR2x6TG5ObGNYVmxiblJwWVd3cElIdGNibHgwWEhSY2RGeDBMeThnU0dGdVpHeGxJSEpsY0dWaGRGeHVYSFJjZEZ4MFhIUm1iM0lnS0haaGNpQnFJRDBnTURzZ2FpQThJSFJvYVhNdWNtVndaV0YwT3lCcUt5c3BJSHRjYmx4MFhIUmNkRngwWEhRdkx5Qk9iM1JsSUc5dVhHNWNkRngwWEhSY2RGeDBkR2hwY3k1d2FYUmphQzVtYjNKRllXTm9LR1oxYm1OMGFXOXVLSEFzSUdrcElIdGNibHgwWEhSY2RGeDBYSFJjZEdsbUlDaHBJRDA5SURBcElIdGNibHgwWEhSY2RGeDBYSFJjZEZ4MGJtOTBaVTl1SUQwZ2JtVjNJRTV2ZEdWUGJrVjJaVzUwS0h0a1lYUmhPaUJWZEdsc2N5NXVkVzFpWlhKVWIxWmhjbWxoWW14bFRHVnVaM1JvS0hKbGMzUkVkWEpoZEdsdmJpa3VZMjl1WTJGMEtIUm9hWE11WjJWMFRtOTBaVTl1VTNSaGRIVnpLQ2tzSUZWMGFXeHpMbWRsZEZCcGRHTm9LSEFwTENCMGFHbHpMblpsYkc5amFYUjVLWDBwTzF4dVhHNWNkRngwWEhSY2RGeDBYSFI5SUdWc2MyVWdlMXh1WEhSY2RGeDBYSFJjZEZ4MFhIUXZMeUJTZFc1dWFXNW5JSE4wWVhSMWN5QW9ZMkZ1SUc5dGJXbDBJSFJvWlNCdWIzUmxJRzl1SUhOMFlYUjFjeWxjYmx4MFhIUmNkRngwWEhSY2RGeDBibTkwWlU5dUlEMGdibVYzSUU1dmRHVlBia1YyWlc1MEtIdGtZWFJoT2lCYk1Dd2dWWFJwYkhNdVoyVjBVR2wwWTJnb2NDa3NJSFJvYVhNdWRtVnNiMk5wZEhsZGZTazdYRzVjZEZ4MFhIUmNkRngwWEhSOVhHNWNibHgwWEhSY2RGeDBYSFJjZEhSb2FYTXVaR0YwWVNBOUlIUm9hWE11WkdGMFlTNWpiMjVqWVhRb2JtOTBaVTl1TG1SaGRHRXBPMXh1WEhSY2RGeDBYSFJjZEgwc0lIUm9hWE1wTzF4dVhHNWNkRngwWEhSY2RGeDBMeThnVG05MFpTQnZabVpjYmx4MFhIUmNkRngwWEhSMGFHbHpMbkJwZEdOb0xtWnZja1ZoWTJnb1puVnVZM1JwYjI0b2NDd2dhU2tnZTF4dVhIUmNkRngwWEhSY2RGeDBhV1lnS0drZ1BUMGdNQ2tnZTF4dVhIUmNkRngwWEhSY2RGeDBYSFJ1YjNSbFQyWm1JRDBnYm1WM0lFNXZkR1ZQWm1aRmRtVnVkQ2g3WkdGMFlUb2dWWFJwYkhNdWJuVnRZbVZ5Vkc5V1lYSnBZV0pzWlV4bGJtZDBhQ2gwYVdOclJIVnlZWFJwYjI0cExtTnZibU5oZENoMGFHbHpMbWRsZEU1dmRHVlBabVpUZEdGMGRYTW9LU3dnVlhScGJITXVaMlYwVUdsMFkyZ29jQ2tzSUhSb2FYTXVkbVZzYjJOcGRIa3BmU2s3WEc1Y2JseDBYSFJjZEZ4MFhIUmNkSDBnWld4elpTQjdYRzVjZEZ4MFhIUmNkRngwWEhSY2RDOHZJRkoxYm01cGJtY2djM1JoZEhWeklDaGpZVzRnYjIxdGFYUWdkR2hsSUc1dmRHVWdiMlptSUhOMFlYUjFjeWxjYmx4MFhIUmNkRngwWEhSY2RGeDBibTkwWlU5bVppQTlJRzVsZHlCT2IzUmxUMlptUlhabGJuUW9lMlJoZEdFNklGc3dMQ0JWZEdsc2N5NW5aWFJRYVhSamFDaHdLU3dnZEdocGN5NTJaV3h2WTJsMGVWMTlLVHRjYmx4MFhIUmNkRngwWEhSY2RIMWNibHh1WEhSY2RGeDBYSFJjZEZ4MGRHaHBjeTVrWVhSaElEMGdkR2hwY3k1a1lYUmhMbU52Ym1OaGRDaHViM1JsVDJabUxtUmhkR0VwTzF4dVhIUmNkRngwWEhSY2RIMHNJSFJvYVhNcE8xeHVYSFJjZEZ4MFhIUjlYRzVjYmx4MFhIUmNkSDBnWld4elpTQjdYRzVjZEZ4MFhIUmNkQzh2SUVoaGJtUnNaU0J5WlhCbFlYUmNibHgwWEhSY2RGeDBabTl5SUNoMllYSWdhaUE5SURBN0lHb2dQQ0IwYUdsekxuSmxjR1ZoZERzZ2Fpc3JLU0I3WEc1Y2RGeDBYSFJjZEZ4MGRHaHBjeTV3YVhSamFDNW1iM0pGWVdOb0tHWjFibU4wYVc5dUtIQXNJR2twSUh0Y2JseDBYSFJjZEZ4MFhIUmNkQzh2SUhKbGMzUkVkWEpoZEdsdmJpQnZibXg1SUdGd2NHeHBaWE1nZEc4Z1ptbHljM1FnYm05MFpWeHVYSFJjZEZ4MFhIUmNkRngwYVdZZ0tHa2dQaUF3S1NCN1hHNWNkRngwWEhSY2RGeDBYSFJjZEhKbGMzUkVkWEpoZEdsdmJpQTlJREE3WEc1Y2RGeDBYSFJjZEZ4MFhIUjlYRzVjYmx4MFhIUmNkRngwWEhSY2RDOHZJRWxtSUdSMWNtRjBhVzl1SUdseklEaDBhQ0IwY21sd2JHVjBjeUIzWlNCdVpXVmtJSFJ2SUcxaGEyVWdjM1Z5WlNCMGFHRjBJSFJvWlNCMGIzUmhiQ0IwYVdOcmN5QTlQU0J4ZFdGeWRHVnlJRzV2ZEdVdVhHNWNkRngwWEhSY2RGeDBYSFF2THlCVGJ5d2dkR2hsSUd4aGMzUWdiMjVsSUhkcGJHd2dibVZsWkNCMGJ5QmlaU0IwYUdVZ2NtVnRZV2x1WkdWeVhHNWNkRngwWEhSY2RGeDBYSFJwWmlBb2RHaHBjeTVrZFhKaGRHbHZiaUE5UFQwZ0p6aDBKeUFtSmlCcElEMDlJSFJvYVhNdWNHbDBZMmd1YkdWdVozUm9JQzBnTVNrZ2UxeHVYSFJjZEZ4MFhIUmNkRngwWEhSc1pYUWdjWFZoY25SbGNsUnBZMnR6SUQwZ1ZYUnBiSE11Ym5WdFltVnlSbkp2YlVKNWRHVnpLRU52Ym5OMFlXNTBjeTVJUlVGRVJWSmZRMGhWVGt0ZlJFbFdTVk5KVDA0cE8xeHVYSFJjZEZ4MFhIUmNkRngwWEhSMGFXTnJSSFZ5WVhScGIyNGdQU0J4ZFdGeWRHVnlWR2xqYTNNZ0xTQW9kR2xqYTBSMWNtRjBhVzl1SUNvZ01pazdYRzVjZEZ4MFhIUmNkRngwWEhSOVhHNWNibHgwWEhSY2RGeDBYSFJjZEc1dmRHVlBiaUE5SUc1bGR5Qk9iM1JsVDI1RmRtVnVkQ2g3WkdGMFlUb2dWWFJwYkhNdWJuVnRZbVZ5Vkc5V1lYSnBZV0pzWlV4bGJtZDBhQ2h5WlhOMFJIVnlZWFJwYjI0cExtTnZibU5oZENoYmRHaHBjeTVuWlhST2IzUmxUMjVUZEdGMGRYTW9LU3dnVlhScGJITXVaMlYwVUdsMFkyZ29jQ2tzSUhSb2FYTXVkbVZzYjJOcGRIbGRLWDBwTzF4dVhIUmNkRngwWEhSY2RGeDBibTkwWlU5bVppQTlJRzVsZHlCT2IzUmxUMlptUlhabGJuUW9lMlJoZEdFNklGVjBhV3h6TG01MWJXSmxjbFJ2Vm1GeWFXRmliR1ZNWlc1bmRHZ29kR2xqYTBSMWNtRjBhVzl1S1M1amIyNWpZWFFvVzNSb2FYTXVaMlYwVG05MFpVOW1abE4wWVhSMWN5Z3BMQ0JWZEdsc2N5NW5aWFJRYVhSamFDaHdLU3dnZEdocGN5NTJaV3h2WTJsMGVWMHBmU2s3WEc1Y2JseDBYSFJjZEZ4MFhIUmNkSFJvYVhNdVpHRjBZU0E5SUhSb2FYTXVaR0YwWVM1amIyNWpZWFFvYm05MFpVOXVMbVJoZEdFc0lHNXZkR1ZQWm1ZdVpHRjBZU2s3WEc1Y2RGeDBYSFJjZEZ4MGZTd2dkR2hwY3lrN1hHNWNkRngwWEhSY2RIMWNibHgwWEhSY2RIMWNibHh1WEhSY2RGeDBjbVYwZFhKdUlIUm9hWE03WEc1Y2RGeDBmVnh1WEc1Y2RGeDBkR2h5YjNjZ0ozQnBkR05vSUcxMWMzUWdZbVVnWVc0Z1lYSnlZWGt1Snp0Y2JseDBmVHRjYmx4dVhIUXZLaXBjYmx4MElDb2dRMjl1ZG1WeWRITWdkbVZzYjJOcGRIa2dkRzhnZG1Gc2RXVWdNQzB4TWpkY2JseDBJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJSFpsYkc5amFYUjVJQzBnVm1Wc2IyTnBkSGtnZG1Gc2RXVWdNUzB4TURCY2JseDBJQ29nUUhKbGRIVnliaUI3Ym5WdFltVnlmVnh1WEhRZ0tpOWNibHgwWTI5dWRtVnlkRlpsYkc5amFYUjVLSFpsYkc5amFYUjVLU0I3WEc1Y2RGeDBMeThnVFdGNElIQmhjM05sWkNCMllXeDFaU0JzYVcxcGRHVmtJSFJ2SURFd01GeHVYSFJjZEhabGJHOWphWFI1SUQwZ2RtVnNiMk5wZEhrZ1BpQXhNREFnUHlBeE1EQWdPaUIyWld4dlkybDBlVHRjYmx4MFhIUnlaWFIxY200Z1RXRjBhQzV5YjNWdVpDaDJaV3h2WTJsMGVTQXZJREV3TUNBcUlERXlOeWs3WEc1Y2RIMDdYRzVjYmx4MEx5b3FYRzVjZENBcUlFZGxkSE1nZEdobElIUnZkR0ZzSUc1MWJXSmxjaUJ2WmlCMGFXTnJjeUJpWVhObFpDQnZiaUJ3WVhOelpXUWdaSFZ5WVhScGIyNHVYRzVjZENBcUlFNXZkR1U2SUhSNWNHVTlQU2R1YjNSbEp5QmtaV1poZFd4MGN5QjBieUJ4ZFdGeWRHVnlJRzV2ZEdVc0lIUjVjR1U5UFQwbmNtVnpkQ2NnWkdWbVlYVnNkSE1nZEc4Z01GeHVYSFFnS2lCQWNHRnlZVzBnZXloemRISnBibWQ4WVhKeVlYa3BmU0JrZFhKaGRHbHZibHh1WEhRZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RIbHdaU0JiSjI1dmRHVW5MQ0FuY21WemRDZGRYRzVjZENBcUlFQnlaWFIxY200Z2UyNTFiV0psY24xY2JseDBJQ292WEc1Y2RHZGxkRlJwWTJ0RWRYSmhkR2x2Ymloa2RYSmhkR2x2Yml3Z2RIbHdaU2tnZTF4dVhIUmNkR2xtSUNoQmNuSmhlUzVwYzBGeWNtRjVLR1IxY21GMGFXOXVLU2tnZTF4dVhIUmNkRngwTHk4Z1VtVmpkWEp6YVhabGJIa2daWGhsWTNWMFpTQjBhR2x6SUcxbGRHaHZaQ0JtYjNJZ1pXRmphQ0JwZEdWdElHbHVJSFJvWlNCaGNuSmhlU0JoYm1RZ2NtVjBkWEp1SUhSb1pTQnpkVzBnYjJZZ2RHbGpheUJrZFhKaGRHbHZibk11WEc1Y2RGeDBYSFJ5WlhSMWNtNGdaSFZ5WVhScGIyNHViV0Z3S0daMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc1Y2RGeDBYSFJjZEhKbGRIVnliaUIwYUdsekxtZGxkRlJwWTJ0RWRYSmhkR2x2YmloMllXeDFaU3dnZEhsd1pTazdYRzVjZEZ4MFhIUjlMQ0IwYUdsektTNXlaV1IxWTJVb1puVnVZM1JwYjI0b1lTd2dZaWtnZTF4dVhIUmNkRngwWEhSeVpYUjFjbTRnWVNBcklHSTdYRzVjZEZ4MFhIUjlMQ0F3S1R0Y2JseDBYSFI5WEc1Y2JseDBYSFJrZFhKaGRHbHZiaUE5SUdSMWNtRjBhVzl1TG5SdlUzUnlhVzVuS0NrN1hHNWNibHgwWEhScFppQW9aSFZ5WVhScGIyNHVkRzlNYjNkbGNrTmhjMlVvS1M1amFHRnlRWFFvTUNrZ1BUMDlJQ2QwSnlrZ2UxeHVYSFJjZEZ4MEx5OGdTV1lnWkhWeVlYUnBiMjRnYzNSaGNuUnpJSGRwZEdnZ0ozUW5JSFJvWlc0Z2RHaGxJRzUxYldKbGNpQjBhR0YwSUdadmJHeHZkM01nYVhNZ1lXNGdaWGh3YkdsamFYUWdkR2xqYXlCamIzVnVkRnh1WEhSY2RGeDBjbVYwZFhKdUlIQmhjbk5sU1c1MEtHUjFjbUYwYVc5dUxuTjFZbk4wY21sdVp5Z3hLU2s3WEc1Y2RGeDBmVnh1WEc1Y2RGeDBMeThnVG1WbFpDQjBieUJoY0hCc2VTQmtkWEpoZEdsdmJpQm9aWEpsTGlBZ1VYVmhjblJsY2lCdWIzUmxJRDA5SUVOdmJuTjBZVzUwY3k1SVJVRkVSVkpmUTBoVlRrdGZSRWxXU1ZOSlQwNWNibHgwWEhRdkx5QlNiM1Z1WkdsdVp5QnZibXg1SUdGd2NHeHBaWE1nZEc4Z2RISnBjR3hsZEhNc0lIZG9hV05vSUhSb1pTQnlaVzFoYVc1a1pYSWdhWE1nYUdGdVpHeGxaQ0JpWld4dmQxeHVYSFJjZEhaaGNpQnhkV0Z5ZEdWeVZHbGphM01nUFNCVmRHbHNjeTV1ZFcxaVpYSkdjbTl0UW5sMFpYTW9RMjl1YzNSaGJuUnpMa2hGUVVSRlVsOURTRlZPUzE5RVNWWkpVMGxQVGlrN1hHNWNkRngwY21WMGRYSnVJRTFoZEdndWNtOTFibVFvY1hWaGNuUmxjbFJwWTJ0eklDb2dkR2hwY3k1blpYUkVkWEpoZEdsdmJrMTFiSFJwY0d4cFpYSW9aSFZ5WVhScGIyNHNJSFI1Y0dVcEtUdGNibHgwZlZ4dVhHNWNkQzhxS2x4dVhIUWdLaUJIWlhSeklIZG9ZWFFnZEc4Z2JYVnNkR2x3YkdVZ2RHbGphM012Y1hWaGNuUmxjaUJ1YjNSbElHSjVJSFJ2SUdkbGRDQjBhR1VnYzNCbFkybG1hV1ZrSUdSMWNtRjBhVzl1TGx4dVhIUWdLaUJPYjNSbE9pQjBlWEJsUFQwbmJtOTBaU2NnWkdWbVlYVnNkSE1nZEc4Z2NYVmhjblJsY2lCdWIzUmxMQ0IwZVhCbFBUMDlKM0psYzNRbklHUmxabUYxYkhSeklIUnZJREJjYmx4MElDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHUjFjbUYwYVc5dVhHNWNkQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0IwZVhCbElGc25ibTkwWlNjc0ozSmxjM1FuWFZ4dVhIUWdLaUJBY21WMGRYSnVJSHR1ZFcxaVpYSjlYRzVjZENBcUwxeHVYSFJuWlhSRWRYSmhkR2x2YmsxMWJIUnBjR3hwWlhJb1pIVnlZWFJwYjI0c0lIUjVjR1VwSUh0Y2JseDBYSFF2THlCT1pXVmtJSFJ2SUdGd2NHeDVJR1IxY21GMGFXOXVJR2hsY21VdUlDQlJkV0Z5ZEdWeUlHNXZkR1VnUFQwZ1EyOXVjM1JoYm5SekxraEZRVVJGVWw5RFNGVk9TMTlFU1ZaSlUwbFBUbHh1WEhSY2RITjNhWFJqYUNBb1pIVnlZWFJwYjI0cElIdGNibHgwWEhSY2RHTmhjMlVnSnpBbk9seHVYSFJjZEZ4MFhIUnlaWFIxY200Z01EdGNibHgwWEhSY2RHTmhjMlVnSnpFbk9seHVYSFJjZEZ4MFhIUnlaWFIxY200Z05EdGNibHgwWEhSY2RHTmhjMlVnSnpJbk9seHVYSFJjZEZ4MFhIUnlaWFIxY200Z01qdGNibHgwWEhSY2RHTmhjMlVnSjJReUp6cGNibHgwWEhSY2RGeDBjbVYwZFhKdUlETTdYRzVjZEZ4MFhIUmpZWE5sSUNjMEp6cGNibHgwWEhSY2RGeDBjbVYwZFhKdUlERTdYRzVjZEZ4MFhIUmpZWE5sSUNjMGRDYzZYRzVjZEZ4MFhIUmNkSEpsZEhWeWJpQXdMalkyTmp0Y2JseDBYSFJjZEdOaGMyVWdKMlEwSnpwY2JseDBYSFJjZEZ4MGNtVjBkWEp1SURFdU5UdGNibHgwWEhSY2RHTmhjMlVnSnpnbk9seHVYSFJjZEZ4MFhIUnlaWFIxY200Z01DNDFPMXh1WEhSY2RGeDBZMkZ6WlNBbk9IUW5PbHh1WEhSY2RGeDBYSFF2THlCR2IzSWdPSFJvSUhSeWFYQnNaWFJ6TENCc1pYUW5jeUJrYVhacFpHVWdZU0J4ZFdGeWRHVnlJR0o1SURNc0lISnZkVzVrSUhSdklIUm9aU0J1WldGeVpYTjBJR2x1ZEN3Z1lXNWtJSE4xWW5OMGNtRmpkQ0IwYUdVZ2NtVnRZV2x1WkdWeUlIUnZJSFJvWlNCc1lYTjBJRzl1WlM1Y2JseDBYSFJjZEZ4MGNtVjBkWEp1SURBdU16TTdYRzVjZEZ4MFhIUmpZWE5sSUNka09DYzZYRzVjZEZ4MFhIUmNkSEpsZEhWeWJpQXdMamMxTzF4dVhIUmNkRngwWTJGelpTQW5NVFluT2x4dVhIUmNkRngwWEhSeVpYUjFjbTRnTUM0eU5UdGNibHgwWEhSY2RHTmhjMlVnSnpFMmRDYzZYRzVjZEZ4MFhIUmNkSEpsZEhWeWJpQXdMakUyTmp0Y2JseDBYSFJjZEdOaGMyVWdKek15SnpwY2JseDBYSFJjZEZ4MGNtVjBkWEp1SURBdU1USTFPMXh1WEhSY2RGeDBZMkZ6WlNBbk5qUW5PbHh1WEhSY2RGeDBYSFJ5WlhSMWNtNGdNQzR3TmpJMU8xeHVYSFJjZEZ4MFpHVm1ZWFZzZERwY2JseDBYSFJjZEZ4MEx5OGdUbTkwWlhNZ1pHVm1ZWFZzZENCMGJ5QmhJSEYxWVhKMFpYSXNJSEpsYzNSeklHUmxabUYxYkhRZ2RHOGdNRnh1WEhSY2RGeDBYSFF2TDNKbGRIVnliaUIwZVhCbElEMDlQU0FuYm05MFpTY2dQeUF4SURvZ01EdGNibHgwWEhSOVhHNWNibHgwWEhSMGFISnZkeUJrZFhKaGRHbHZiaUFySUNjZ2FYTWdibTkwSUdFZ2RtRnNhV1FnWkhWeVlYUnBiMjR1Snp0Y2JseDBmVHRjYmx4dVhIUXZLaXBjYmx4MElDb2dSMlYwY3lCMGFHVWdibTkwWlNCdmJpQnpkR0YwZFhNZ1kyOWtaU0JpWVhObFpDQnZiaUIwYUdVZ2MyVnNaV04wWldRZ1kyaGhibTVsYkM0Z01IZzVlekF0Um4xY2JseDBJQ29nVG05MFpTQnZiaUJoZENCamFHRnVibVZzSURBZ2FYTWdNSGc1TUNBb01UUTBLVnh1WEhRZ0tpQXdJRDBnUTJnZ01WeHVYSFFnS2lCQWNtVjBkWEp1SUh0dWRXMWlaWEo5WEc1Y2RDQXFMMXh1WEhSblpYUk9iM1JsVDI1VGRHRjBkWE1vS1NCN2NtVjBkWEp1SURFME5DQXJJSFJvYVhNdVkyaGhibTVsYkNBdElERjlYRzVjYmx4MEx5b3FYRzVjZENBcUlFZGxkSE1nZEdobElHNXZkR1VnYjJabUlITjBZWFIxY3lCamIyUmxJR0poYzJWa0lHOXVJSFJvWlNCelpXeGxZM1JsWkNCamFHRnVibVZzTGlBd2VEaDdNQzFHZlZ4dVhIUWdLaUJPYjNSbElHOW1aaUJoZENCamFHRnVibVZzSURBZ2FYTWdNSGc0TUNBb01USTRLVnh1WEhRZ0tpQXdJRDBnUTJnZ01WeHVYSFFnS2lCQWNtVjBkWEp1SUh0dWRXMWlaWEo5WEc1Y2RDQXFMMXh1WEhSblpYUk9iM1JsVDJabVUzUmhkSFZ6S0NrZ2UzSmxkSFZ5YmlBeE1qZ2dLeUIwYUdsekxtTm9ZVzV1Wld3Z0xTQXhmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ2UwNXZkR1ZGZG1WdWRIMDdYRzR2S2lwY2JpQXFJRWh2YkdSeklHRnNiQ0JrWVhSaElHWnZjaUJoSUZ3aWJtOTBaU0J2Wm1aY0lpQk5TVVJKSUdWMlpXNTBYRzRnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnWm1sbGJHUnpJSHRrWVhSaE9pQmJYWDFjYmlBcUlFQnlaWFIxY200Z2UwNXZkR1ZQWm1aRmRtVnVkSDFjYmlBcUwxeHVZMnhoYzNNZ1RtOTBaVTltWmtWMlpXNTBJSHRjYmx4MFkyOXVjM1J5ZFdOMGIzSW9abWxsYkdSektTQjdYRzVjZEZ4MGRHaHBjeTVrWVhSaElEMGdabWxsYkdSekxtUmhkR0U3WEc1Y2RIMWNibjFjYmx4dVpYaHdiM0owSUh0T2IzUmxUMlptUlhabGJuUjlPMXh1THlvcVhHNGdLaUJJYjJ4a2N5QmhiR3dnWkdGMFlTQm1iM0lnWVNCY0ltNXZkR1VnYjI1Y0lpQk5TVVJKSUdWMlpXNTBYRzRnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnWm1sbGJHUnpJSHRrWVhSaE9pQmJYWDFjYmlBcUlFQnlaWFIxY200Z2UwNXZkR1ZQYmtWMlpXNTBmVnh1SUNvdlhHNWpiR0Z6Y3lCT2IzUmxUMjVGZG1WdWRDQjdYRzVjZEdOdmJuTjBjblZqZEc5eUtHWnBaV3hrY3lrZ2UxeHVYSFJjZEhSb2FYTXVaR0YwWVNBOUlHWnBaV3hrY3k1a1lYUmhPMXh1WEhSOVhHNTlYRzVjYm1WNGNHOXlkQ0I3VG05MFpVOXVSWFpsYm5SOU8xeHVMeW9xWEc0Z0tpQkliMnhrY3lCaGJHd2daR0YwWVNCbWIzSWdZU0JjSW5CeWIyZHlZVzBnWTJoaGJtZGxYQ0lnVFVsRVNTQmxkbVZ1ZEZ4dUlDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlHWnBaV3hrY3lCN2FXNXpkSEoxYldWdWREb2dhVzUwWldkbGNuMWNiaUFxSUVCeVpYUjFjbTRnZTFCeWIyZHlZVzFEYUdGdVoyVkZkbVZ1ZEgxY2JpQXFMMXh1WTJ4aGMzTWdVSEp2WjNKaGJVTm9ZVzVuWlVWMlpXNTBJSHRjYmx4MFkyOXVjM1J5ZFdOMGIzSW9abWxsYkdSektTQjdYRzVjZEZ4MGRHaHBjeTUwZVhCbElEMGdKM0J5YjJkeVlXMG5PMXh1WEhSY2RDOHZJR1JsYkhSaElIUnBiV1VnWkdWbVlYVnNkSE1nZEc4Z01DNWNibHgwWEhSMGFHbHpMbVJoZEdFZ1BTQlZkR2xzY3k1dWRXMWlaWEpVYjFaaGNtbGhZbXhsVEdWdVozUm9LREI0TURBcExtTnZibU5oZENoRGIyNXpkR0Z1ZEhNdVVGSlBSMUpCVFY5RFNFRk9SMFZmVTFSQlZGVlRMQ0JtYVdWc1pITXVhVzV6ZEhKMWJXVnVkQ2s3WEc1Y2RIMWNibjFjYmx4dVpYaHdiM0owSUh0UWNtOW5jbUZ0UTJoaGJtZGxSWFpsYm5SOU8xeHVMeW9xWEc0Z0tpQkliMnhrY3lCaGJHd2daR0YwWVNCbWIzSWdZU0IwY21GamF5NWNiaUFxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0JtYVdWc1pITWdlM1I1Y0dVNklHNTFiV0psY2l3Z1pHRjBZVG9nWVhKeVlYa3NJSE5wZW1VNklHRnljbUY1TENCbGRtVnVkSE02SUdGeWNtRjVmVnh1SUNvZ1FISmxkSFZ5YmlCN1ZISmhZMnQ5WEc0Z0tpOWNibU5zWVhOeklGUnlZV05ySUh0Y2JseDBZMjl1YzNSeWRXTjBiM0lvS1NCN1hHNWNkRngwZEdocGN5NTBlWEJsSUQwZ1EyOXVjM1JoYm5SekxsUlNRVU5MWDBOSVZVNUxYMVJaVUVVN1hHNWNkRngwZEdocGN5NWtZWFJoSUQwZ1cxMDdYRzVjZEZ4MGRHaHBjeTV6YVhwbElEMGdXMTA3WEc1Y2RGeDBkR2hwY3k1bGRtVnVkSE1nUFNCYlhUdGNibHgwZlZ4dVhHNWNkQzhxS2x4dVhIUWdLaUJCWkdSeklHRnVlU0JsZG1WdWRDQjBlWEJsSUhSdklIUm9aU0IwY21GamF5NWNibHgwSUNvZ1FIQmhjbUZ0SUhzb1RtOTBaVVYyWlc1MGZFMWxkR0ZGZG1WdWRIeFFjbTluY21GdFEyaGhibWRsUlhabGJuUXBmU0JsZG1WdWRDQXRJRVYyWlc1MElHOWlhbVZqZEM1Y2JseDBJQ29nUUhCaGNtRnRJSHRtZFc1amRHbHZibjBnYldGd1JuVnVZM1JwYjI0Z0xTQkRZV3hzWW1GamF5QjNhR2xqYUNCallXNGdZbVVnZFhObFpDQjBieUJoY0hCc2VTQnpjR1ZqYVdacFl5QndjbTl3WlhKMGFXVnpJSFJ2SUdGc2JDQmxkbVZ1ZEhNdUlGeHVYSFFnS2lCQWNtVjBkWEp1SUh0VWNtRmphMzFjYmx4MElDb3ZYRzVjZEdGa1pFVjJaVzUwS0dWMlpXNTBMQ0J0WVhCR2RXNWpkR2x2YmlrZ2UxeHVYSFJjZEdsbUlDaEJjbkpoZVM1cGMwRnljbUY1S0dWMlpXNTBLU2tnZTF4dVhIUmNkRngwWlhabGJuUXVabTl5UldGamFDaG1kVzVqZEdsdmJpaGxMQ0JwS1NCN1hHNWNkRngwWEhSY2RDOHZJRWhoYm1Sc1pTQnRZWEFnWm5WdVkzUnBiMjRnYVdZZ2NISnZkbWxrWldSY2JseDBYSFJjZEZ4MGFXWWdLSFI1Y0dWdlppQnRZWEJHZFc1amRHbHZiaUE5UFQwZ0oyWjFibU4wYVc5dUp5QW1KaUJsTG5SNWNHVWdQVDA5SUNkdWIzUmxKeWtnZTF4dVhIUmNkRngwWEhSY2RIWmhjaUJ3Y205d1pYSjBhV1Z6SUQwZ2JXRndSblZ1WTNScGIyNG9hU3dnWlNrN1hHNWNibHgwWEhSY2RGeDBYSFJwWmlBb2RIbHdaVzltSUhCeWIzQmxjblJwWlhNZ1BUMDlJQ2R2WW1wbFkzUW5LU0I3WEc1Y2RGeDBYSFJjZEZ4MFhIUm1iM0lnS0haaGNpQnFJR2x1SUhCeWIzQmxjblJwWlhNcElIdGNibHgwWEhSY2RGeDBYSFJjZEZ4MGMzZHBkR05vS0dvcElIdGNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmpZWE5sSUNka2RYSmhkR2x2YmljNlhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmxMbVIxY21GMGFXOXVJRDBnY0hKdmNHVnlkR2xsYzF0cVhUdGNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkR0p5WldGck8xeHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RHTmhjMlVnSjNObGNYVmxiblJwWVd3bk9seHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBaUzV6WlhGMVpXNTBhV0ZzSUQwZ2NISnZjR1Z5ZEdsbGMxdHFYVHRjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEdKeVpXRnJPMXh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkR05oYzJVZ0ozWmxiRzlqYVhSNUp6cGNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkR1V1ZG1Wc2IyTnBkSGtnUFNCbExtTnZiblpsY25SV1pXeHZZMmwwZVNod2NtOXdaWEowYVdWelcycGRLVHRjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEdKeVpXRnJPMXh1WEhSY2RGeDBYSFJjZEZ4MFhIUjlYRzVjZEZ4MFhIUmNkRngwWEhSOVhIUmNkRnh1WEc1Y2RGeDBYSFJjZEZ4MFhIUXZMeUJIYjNSMFlTQmlkV2xzWkNCMGFHRjBJR1JoZEdGY2JseDBYSFJjZEZ4MFhIUmNkR1V1WW5WcGJHUkVZWFJoS0NrN1hHNWNkRngwWEhSY2RGeDBmVnh1WEhSY2RGeDBYSFI5WEc1Y2JseDBYSFJjZEZ4MGRHaHBjeTVrWVhSaElEMGdkR2hwY3k1a1lYUmhMbU52Ym1OaGRDaGxMbVJoZEdFcE8xeHVYSFJjZEZ4MFhIUjBhR2x6TG5OcGVtVWdQU0JWZEdsc2N5NXVkVzFpWlhKVWIwSjVkR1Z6S0hSb2FYTXVaR0YwWVM1c1pXNW5kR2dzSURRcE95QXZMeUEwSUdKNWRHVnpJR3h2Ym1kY2JseDBYSFJjZEZ4MGRHaHBjeTVsZG1WdWRITXVjSFZ6YUNobEtUdGNibHgwWEhSY2RIMHNJSFJvYVhNcE8xeHVYRzVjZEZ4MGZTQmxiSE5sSUh0Y2JseDBYSFJjZEhSb2FYTXVaR0YwWVNBOUlIUm9hWE11WkdGMFlTNWpiMjVqWVhRb1pYWmxiblF1WkdGMFlTazdYRzVjZEZ4MFhIUjBhR2x6TG5OcGVtVWdQU0JWZEdsc2N5NXVkVzFpWlhKVWIwSjVkR1Z6S0hSb2FYTXVaR0YwWVM1c1pXNW5kR2dzSURRcE95QXZMeUEwSUdKNWRHVnpJR3h2Ym1kY2JseDBYSFJjZEhSb2FYTXVaWFpsYm5SekxuQjFjMmdvWlhabGJuUXBPMXh1WEhSY2RIMWNibHh1WEhSY2RISmxkSFZ5YmlCMGFHbHpPMXh1WEhSOVhHNWNibHgwTHlvcVhHNWNkQ0FxSUZObGRITWdkR1Z0Y0c4Z2IyWWdkR2hsSUUxSlJFa2dabWxzWlM1Y2JseDBJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJR0p3YlNBdElGUmxiWEJ2SUdsdUlHSmxZWFJ6SUhCbGNpQnRhVzUxZEdVdVhHNWNkQ0FxSUVCeVpYUjFjbTRnZTFSeVlXTnJmVnh1WEhRZ0tpOWNibHgwYzJWMFZHVnRjRzhvWW5CdEtTQjdYRzVjZEZ4MGRtRnlJR1YyWlc1MElEMGdibVYzSUUxbGRHRkZkbVZ1ZENoN1pHRjBZVG9nVzBOdmJuTjBZVzUwY3k1TlJWUkJYMVJGVFZCUFgwbEVYWDBwTzF4dVhIUmNkR1YyWlc1MExtUmhkR0V1Y0hWemFDZ3dlREF6S1RzZ0x5OGdVMmw2WlZ4dVhIUmNkSFpoY2lCMFpXMXdieUE5SUUxaGRHZ3VjbTkxYm1Rb05qQXdNREF3TURBZ0x5QmljRzBwTzF4dVhIUmNkR1YyWlc1MExtUmhkR0VnUFNCbGRtVnVkQzVrWVhSaExtTnZibU5oZENoVmRHbHNjeTV1ZFcxaVpYSlViMEo1ZEdWektIUmxiWEJ2TENBektTazdJQzh2SUZSbGJYQnZMQ0F6SUdKNWRHVnpYRzVjZEZ4MGNtVjBkWEp1SUhSb2FYTXVZV1JrUlhabGJuUW9aWFpsYm5RcE8xeHVYSFI5WEc1Y2JseDBMeW9xWEc1Y2RDQXFJRk5sZEhNZ2RHbHRaU0J6YVdkdVlYUjFjbVV1WEc1Y2RDQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQnVkVzFsY21GMGIzSWdMU0JVYjNBZ2JuVnRZbVZ5SUc5bUlIUm9aU0IwYVcxbElITnBaMjVoZEhWeVpTNWNibHgwSUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUdSbGJtOXRhVzVoZEc5eUlDMGdRbTkwZEc5dElHNTFiV0psY2lCdlppQjBhR1VnZEdsdFpTQnphV2R1WVhSMWNtVXVYRzVjZENBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCdGFXUnBZMnh2WTJ0emNHVnlkR2xqYXlBdElFUmxabUYxYkhSeklIUnZJREkwTGx4dVhIUWdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdibTkwWlhOd1pYSnRhV1JwWTJ4dlkyc2dMU0JFWldaaGRXeDBjeUIwYnlBNExseHVYSFFnS2lCQWNtVjBkWEp1SUh0VWNtRmphMzFjYmx4MElDb3ZYRzVjZEhObGRGUnBiV1ZUYVdkdVlYUjFjbVVvYm5WdFpYSmhkRzl5TENCa1pXNXZiV2x1WVhSdmNpd2diV2xrYVdOc2IyTnJjM0JsY25ScFkyc3NJRzV2ZEdWemNHVnliV2xrYVdOc2IyTnJLU0I3WEc1Y2RGeDBiV2xrYVdOc2IyTnJjM0JsY25ScFkyc2dQU0J0YVdScFkyeHZZMnR6Y0dWeWRHbGpheUI4ZkNBeU5EdGNibHgwWEhSdWIzUmxjM0JsY20xcFpHbGpiRzlqYXlBOUlHNXZkR1Z6Y0dWeWJXbGthV05zYjJOcklIeDhJRGc3WEc1Y2RGeDBYRzVjZEZ4MGRtRnlJR1YyWlc1MElEMGdibVYzSUUxbGRHRkZkbVZ1ZENoN1pHRjBZVG9nVzBOdmJuTjBZVzUwY3k1TlJWUkJYMVJKVFVWZlUwbEhUa0ZVVlZKRlgwbEVYWDBwTzF4dVhIUmNkR1YyWlc1MExtUmhkR0V1Y0hWemFDZ3dlREEwS1RzZ0x5OGdVMmw2WlZ4dVhIUmNkR1YyWlc1MExtUmhkR0VnUFNCbGRtVnVkQzVrWVhSaExtTnZibU5oZENoVmRHbHNjeTV1ZFcxaVpYSlViMEo1ZEdWektHNTFiV1Z5WVhSdmNpd2dNU2twT3lBdkx5Qk9kVzFsY21GMGIzSXNJREVnWW5sMFpYTmNibHgwWEhSY2JseDBYSFIyWVhJZ1gyUmxibTl0YVc1aGRHOXlJRDBnVFdGMGFDNXNiMmN5S0dSbGJtOXRhVzVoZEc5eUtUdGNkQzh2SUVSbGJtOXRhVzVoZEc5eUlHbHpJR1Y0Y0hKbGMzTmxaQ0JoY3lCd2IzY2diMllnTWx4dVhIUmNkR1YyWlc1MExtUmhkR0VnUFNCbGRtVnVkQzVrWVhSaExtTnZibU5oZENoVmRHbHNjeTV1ZFcxaVpYSlViMEo1ZEdWektGOWtaVzV2YldsdVlYUnZjaXdnTVNrcE95QXZMeUJFWlc1dmJXbHVZWFJ2Y2l3Z01TQmllWFJsYzF4dVhIUmNkR1YyWlc1MExtUmhkR0VnUFNCbGRtVnVkQzVrWVhSaExtTnZibU5oZENoVmRHbHNjeTV1ZFcxaVpYSlViMEo1ZEdWektHMXBaR2xqYkc5amEzTndaWEowYVdOckxDQXhLU2s3SUM4dklFMUpSRWtnUTJ4dlkydHpJSEJsY2lCMGFXTnJMQ0F4SUdKNWRHVnpYRzVjZEZ4MFpYWmxiblF1WkdGMFlTQTlJR1YyWlc1MExtUmhkR0V1WTI5dVkyRjBLRlYwYVd4ekxtNTFiV0psY2xSdlFubDBaWE1vYm05MFpYTndaWEp0YVdScFkyeHZZMnNzSURFcEtUc2dMeThnVG5WdFltVnlJRzltSURFdk16SWdibTkwWlhNZ2NHVnlJRTFKUkVrZ1kyeHZZMnR6TENBeElHSjVkR1Z6WEc1Y2RGeDBjbVYwZFhKdUlIUm9hWE11WVdSa1JYWmxiblFvWlhabGJuUXBPMXh1WEhSOVhHNWNibHgwTHlvcVhHNWNkQ0FxSUZObGRITWdhMlY1SUhOcFoyNWhkSFZ5WlM1Y2JseDBJQ29nUUhCaGNtRnRJSHNxZlNCelppQXRJRnh1WEhRZ0tpQkFjR0Z5WVcwZ2V5cDlJRzFwSUMxY2JseDBJQ29nUUhKbGRIVnliaUI3VkhKaFkydDlYRzVjZENBcUwxeHVYSFJ6WlhSTFpYbFRhV2R1WVhSMWNtVW9jMllzSUcxcEtTQjdYRzVjZEZ4MGRtRnlJR1YyWlc1MElEMGdibVYzSUUxbGRHRkZkbVZ1ZENoN1pHRjBZVG9nVzBOdmJuTjBZVzUwY3k1TlJWUkJYMHRGV1Y5VFNVZE9RVlJWVWtWZlNVUmRmU2s3WEc1Y2RGeDBaWFpsYm5RdVpHRjBZUzV3ZFhOb0tEQjRNRElwT3lBdkx5QlRhWHBsWEc1Y2JseDBYSFIyWVhJZ2JXOWtaU0E5SUcxcElIeDhJREE3WEc1Y2RGeDBjMllnUFNCelppQjhmQ0F3TzF4dVhHNWNkRngwTHk5Y2RFWjFibU4wYVc5dUlHTmhiR3hsWkNCM2FYUm9JSE4wY21sdVp5QnViM1JoZEdsdmJseHVYSFJjZEdsbUlDaDBlWEJsYjJZZ2JXa2dQVDA5SUNkMWJtUmxabWx1WldRbktTQjdYRzVjZEZ4MFhIUjJZWElnWm1sbWRHaHpJRDBnVzF4dVhIUmNkRngwWEhSYkowTmlKeXdnSjBkaUp5d2dKMFJpSnl3Z0owRmlKeXdnSjBWaUp5d2dKMEppSnl3Z0owWW5MQ0FuUXljc0lDZEhKeXdnSjBRbkxDQW5RU2NzSUNkRkp5d2dKMEluTENBblJpTW5MQ0FuUXlNblhTeGNibHgwWEhSY2RGeDBXeWRoWWljc0lDZGxZaWNzSUNkaVlpY3NJQ2RtSnl3Z0oyTW5MQ0FuWnljc0lDZGtKeXdnSjJFbkxDQW5aU2NzSUNkaUp5d2dKMllqSnl3Z0oyTWpKeXdnSjJjakp5d2dKMlFqSnl3Z0oyRWpKMTFjYmx4MFhIUmNkRjA3WEc1Y2RGeDBYSFIyWVhJZ1gzTm1iR1Z1SUQwZ2MyWXViR1Z1WjNSb08xeHVYSFJjZEZ4MGRtRnlJRzV2ZEdVZ1BTQnpaaUI4ZkNBblF5YzdYRzVjYmx4MFhIUmNkR2xtSUNoelpsc3dYU0E5UFQwZ2MyWmJNRjB1ZEc5TWIzZGxja05oYzJVb0tTa2diVzlrWlNBOUlERmNibHh1WEhSY2RGeDBhV1lnS0Y5elpteGxiaUErSURFcElIdGNibHgwWEhSY2RGeDBjM2RwZEdOb0lDaHpaaTVqYUdGeVFYUW9YM05tYkdWdUlDMGdNU2twSUh0Y2JseDBYSFJjZEZ4MFhIUmpZWE5sSUNkdEp6cGNibHgwWEhSY2RGeDBYSFJjZEcxdlpHVWdQU0F4TzF4dVhIUmNkRngwWEhSY2RGeDBibTkwWlNBOUlITm1MbU5vWVhKQmRDZ3dLUzUwYjB4dmQyVnlRMkZ6WlNncE8xeHVYSFJjZEZ4MFhIUmNkRngwYm05MFpTQTlJRzV2ZEdVdVkyOXVZMkYwS0hObUxuTjFZbk4wY21sdVp5Z3hMQ0JmYzJac1pXNGdMU0F4S1NrN1hHNWNkRngwWEhSY2RGeDBYSFJpY21WaGF6dGNibHgwWEhSY2RGeDBYSFJqWVhObElDY3RKenBjYmx4MFhIUmNkRngwWEhSY2RHMXZaR1VnUFNBeE8xeHVYSFJjZEZ4MFhIUmNkRngwYm05MFpTQTlJSE5tTG1Ob1lYSkJkQ2d3S1M1MGIweHZkMlZ5UTJGelpTZ3BPMXh1WEhSY2RGeDBYSFJjZEZ4MGJtOTBaU0E5SUc1dmRHVXVZMjl1WTJGMEtITm1Mbk4xWW5OMGNtbHVaeWd4TENCZmMyWnNaVzRnTFNBeEtTazdYRzVjZEZ4MFhIUmNkRngwWEhSaWNtVmhhenRjYmx4MFhIUmNkRngwWEhSallYTmxJQ2ROSnpwY2JseDBYSFJjZEZ4MFhIUmNkRzF2WkdVZ1BTQXdPMXh1WEhSY2RGeDBYSFJjZEZ4MGJtOTBaU0E5SUhObUxtTm9ZWEpCZENnd0tTNTBiMVZ3Y0dWeVEyRnpaU2dwTzF4dVhIUmNkRngwWEhSY2RGeDBibTkwWlNBOUlHNXZkR1V1WTI5dVkyRjBLSE5tTG5OMVluTjBjbWx1WnlneExDQmZjMlpzWlc0Z0xTQXhLU2s3WEc1Y2RGeDBYSFJjZEZ4MFhIUmljbVZoYXp0Y2JseDBYSFJjZEZ4MFhIUmpZWE5sSUNjckp6cGNibHgwWEhSY2RGeDBYSFJjZEcxdlpHVWdQU0F3TzF4dVhIUmNkRngwWEhSY2RGeDBibTkwWlNBOUlITm1MbU5vWVhKQmRDZ3dLUzUwYjFWd2NHVnlRMkZ6WlNncE8xeHVYSFJjZEZ4MFhIUmNkRngwYm05MFpTQTlJRzV2ZEdVdVkyOXVZMkYwS0hObUxuTjFZbk4wY21sdVp5Z3hMQ0JmYzJac1pXNGdMU0F4S1NrN1hHNWNkRngwWEhSY2RGeDBYSFJpY21WaGF6dGNibHgwWEhSY2RGeDBmVnh1WEhSY2RGeDBmVnh1WEc1Y2RGeDBYSFIyWVhJZ1ptbG1kR2hwYm1SbGVDQTlJR1pwWm5Sb2MxdHRiMlJsWFM1cGJtUmxlRTltS0c1dmRHVXBPMXh1WEhSY2RGeDBjMllnUFNCbWFXWjBhR2x1WkdWNElEMDlQU0F0TVNBL0lEQWdPaUJtYVdaMGFHbHVaR1Y0SUMwZ056dGNibHgwWEhSOVhHNWNibHgwWEhSbGRtVnVkQzVrWVhSaElEMGdaWFpsYm5RdVpHRjBZUzVqYjI1allYUW9WWFJwYkhNdWJuVnRZbVZ5Vkc5Q2VYUmxjeWh6Wml3Z01Ta3BPeUF2THlCT2RXMWlaWElnYjJZZ2MyaGhjbkFnYjNJZ1pteGhkSE1nS0NBOElEQWdabXhoZERzZ1BpQXdJSE5vWVhKd0tWeHVYSFJjZEdWMlpXNTBMbVJoZEdFZ1BTQmxkbVZ1ZEM1a1lYUmhMbU52Ym1OaGRDaFZkR2xzY3k1dWRXMWlaWEpVYjBKNWRHVnpLRzF2WkdVc0lERXBLVHNnTHk4Z1RXOWtaVG9nTUNCdFlXcHZjaXdnTVNCdGFXNXZjbHh1WEhSY2RISmxkSFZ5YmlCMGFHbHpMbUZrWkVWMlpXNTBLR1YyWlc1MEtUdGNibHgwZlZ4dVhHNWNkQzhxS2x4dVhIUWdLaUJCWkdSeklIUmxlSFFnZEc4Z1RVbEVTU0JtYVd4bExseHVYSFFnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZEdWNGRDQXRJRlJsZUhRZ2RHOGdZV1JrTGx4dVhIUWdLaUJBY21WMGRYSnVJSHRVY21GamEzMWNibHgwSUNvdlhHNWNkR0ZrWkZSbGVIUW9kR1Y0ZENrZ2UxeHVYSFJjZEhaaGNpQmxkbVZ1ZENBOUlHNWxkeUJOWlhSaFJYWmxiblFvZTJSaGRHRTZJRnREYjI1emRHRnVkSE11VFVWVVFWOVVSVmhVWDBsRVhYMHBPMXh1WEhSY2RIWmhjaUJ6ZEhKcGJtZENlWFJsY3lBOUlGVjBhV3h6TG5OMGNtbHVaMVJ2UW5sMFpYTW9kR1Y0ZENrN1hHNWNkRngwWlhabGJuUXVaR0YwWVNBOUlHVjJaVzUwTG1SaGRHRXVZMjl1WTJGMEtGVjBhV3h6TG01MWJXSmxjbFJ2Vm1GeWFXRmliR1ZNWlc1bmRHZ29jM1J5YVc1blFubDBaWE11YkdWdVozUm9LU2s3SUM4dklGTnBlbVZjYmx4MFhIUmxkbVZ1ZEM1a1lYUmhJRDBnWlhabGJuUXVaR0YwWVM1amIyNWpZWFFvYzNSeWFXNW5RbmwwWlhNcE95QXZMeUJVWlhoMFhHNWNkRngwY21WMGRYSnVJSFJvYVhNdVlXUmtSWFpsYm5Rb1pYWmxiblFwTzF4dVhIUjlYRzVjYmx4MEx5b3FYRzVjZENBcUlFRmtaSE1nWTI5d2VYSnBaMmgwSUhSdklFMUpSRWtnWm1sc1pTNWNibHgwSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhSbGVIUWdMU0JVWlhoMElHOW1JR052Y0hseWFXZG9kQ0JzYVc1bExseHVYSFFnS2lCQWNtVjBkWEp1SUh0VWNtRmphMzFjYmx4MElDb3ZYRzVjZEdGa1pFTnZjSGx5YVdkb2RDaDBaWGgwS1NCN1hHNWNkRngwZG1GeUlHVjJaVzUwSUQwZ2JtVjNJRTFsZEdGRmRtVnVkQ2g3WkdGMFlUb2dXME52Ym5OMFlXNTBjeTVOUlZSQlgwTlBVRmxTU1VkSVZGOUpSRjE5S1R0Y2JseDBYSFIyWVhJZ2MzUnlhVzVuUW5sMFpYTWdQU0JWZEdsc2N5NXpkSEpwYm1kVWIwSjVkR1Z6S0hSbGVIUXBPMXh1WEhSY2RHVjJaVzUwTG1SaGRHRWdQU0JsZG1WdWRDNWtZWFJoTG1OdmJtTmhkQ2hWZEdsc2N5NXVkVzFpWlhKVWIxWmhjbWxoWW14bFRHVnVaM1JvS0hOMGNtbHVaMEo1ZEdWekxteGxibWQwYUNrcE95QXZMeUJUYVhwbFhHNWNkRngwWlhabGJuUXVaR0YwWVNBOUlHVjJaVzUwTG1SaGRHRXVZMjl1WTJGMEtITjBjbWx1WjBKNWRHVnpLVHNnTHk4Z1ZHVjRkRnh1WEhSY2RISmxkSFZ5YmlCMGFHbHpMbUZrWkVWMlpXNTBLR1YyWlc1MEtUdGNibHgwZlZ4dVhHNWNkQzhxS2x4dVhIUWdLaUJCWkdSeklGTmxjWFZsYm1ObEwxUnlZV05ySUU1aGJXVXVYRzVjZENBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMFpYaDBJQzBnVkdWNGRDQnZaaUIwY21GamF5QnVZVzFsTGx4dVhIUWdLaUJBY21WMGRYSnVJSHRVY21GamEzMWNibHgwSUNvdlhHNWNkR0ZrWkZSeVlXTnJUbUZ0WlNoMFpYaDBLU0I3WEc1Y2RGeDBkbUZ5SUdWMlpXNTBJRDBnYm1WM0lFMWxkR0ZGZG1WdWRDaDdaR0YwWVRvZ1cwTnZibk4wWVc1MGN5NU5SVlJCWDFSU1FVTkxYMDVCVFVWZlNVUmRmU2s3WEc1Y2RGeDBkbUZ5SUhOMGNtbHVaMEo1ZEdWeklEMGdWWFJwYkhNdWMzUnlhVzVuVkc5Q2VYUmxjeWgwWlhoMEtUdGNibHgwWEhSbGRtVnVkQzVrWVhSaElEMGdaWFpsYm5RdVpHRjBZUzVqYjI1allYUW9WWFJwYkhNdWJuVnRZbVZ5Vkc5V1lYSnBZV0pzWlV4bGJtZDBhQ2h6ZEhKcGJtZENlWFJsY3k1c1pXNW5kR2dwS1RzZ0x5OGdVMmw2WlZ4dVhIUmNkR1YyWlc1MExtUmhkR0VnUFNCbGRtVnVkQzVrWVhSaExtTnZibU5oZENoemRISnBibWRDZVhSbGN5azdJQzh2SUZSbGVIUmNibHgwWEhSeVpYUjFjbTRnZEdocGN5NWhaR1JGZG1WdWRDaGxkbVZ1ZENrN1hHNWNkSDFjYmx4dVhIUXZLaXBjYmx4MElDb2dVMlYwY3lCcGJuTjBjblZ0Wlc1MElHNWhiV1VnYjJZZ2RISmhZMnN1WEc1Y2RDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQjBaWGgwSUMwZ1RtRnRaU0J2WmlCcGJuTjBjblZ0Wlc1MExseHVYSFFnS2lCQWNtVjBkWEp1SUh0VWNtRmphMzFjYmx4MElDb3ZYRzVjZEdGa1pFbHVjM1J5ZFcxbGJuUk9ZVzFsS0hSbGVIUXBJSHRjYmx4MFhIUjJZWElnWlhabGJuUWdQU0J1WlhjZ1RXVjBZVVYyWlc1MEtIdGtZWFJoT2lCYlEyOXVjM1JoYm5SekxrMUZWRUZmU1U1VFZGSlZUVVZPVkY5T1FVMUZYMGxFWFgwcE8xeHVYSFJjZEhaaGNpQnpkSEpwYm1kQ2VYUmxjeUE5SUZWMGFXeHpMbk4wY21sdVoxUnZRbmwwWlhNb2RHVjRkQ2s3WEc1Y2RGeDBaWFpsYm5RdVpHRjBZU0E5SUdWMlpXNTBMbVJoZEdFdVkyOXVZMkYwS0ZWMGFXeHpMbTUxYldKbGNsUnZWbUZ5YVdGaWJHVk1aVzVuZEdnb2MzUnlhVzVuUW5sMFpYTXViR1Z1WjNSb0tTazdJQzh2SUZOcGVtVmNibHgwWEhSbGRtVnVkQzVrWVhSaElEMGdaWFpsYm5RdVpHRjBZUzVqYjI1allYUW9jM1J5YVc1blFubDBaWE1wT3lBdkx5QlVaWGgwWEc1Y2RGeDBjbVYwZFhKdUlIUm9hWE11WVdSa1JYWmxiblFvWlhabGJuUXBPMXh1WEhSOVhHNWNibHgwTHlvcVhHNWNkQ0FxSUVGa1pITWdiV0Z5YTJWeUlIUnZJRTFKUkVrZ1ptbHNaUzVjYmx4MElDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIUmxlSFFnTFNCTllYSnJaWElnZEdWNGRDNWNibHgwSUNvZ1FISmxkSFZ5YmlCN1ZISmhZMnQ5WEc1Y2RDQXFMMXh1WEhSaFpHUk5ZWEpyWlhJb2RHVjRkQ2tnZTF4dVhIUmNkSFpoY2lCbGRtVnVkQ0E5SUc1bGR5Qk5aWFJoUlhabGJuUW9lMlJoZEdFNklGdERiMjV6ZEdGdWRITXVUVVZVUVY5TlFWSkxSVkpmU1VSZGZTazdYRzVjZEZ4MGRtRnlJSE4wY21sdVowSjVkR1Z6SUQwZ1ZYUnBiSE11YzNSeWFXNW5WRzlDZVhSbGN5aDBaWGgwS1R0Y2JseDBYSFJsZG1WdWRDNWtZWFJoSUQwZ1pYWmxiblF1WkdGMFlTNWpiMjVqWVhRb1ZYUnBiSE11Ym5WdFltVnlWRzlXWVhKcFlXSnNaVXhsYm1kMGFDaHpkSEpwYm1kQ2VYUmxjeTVzWlc1bmRHZ3BLVHNnTHk4Z1UybDZaVnh1WEhSY2RHVjJaVzUwTG1SaGRHRWdQU0JsZG1WdWRDNWtZWFJoTG1OdmJtTmhkQ2h6ZEhKcGJtZENlWFJsY3lrN0lDOHZJRlJsZUhSY2JseDBYSFJ5WlhSMWNtNGdkR2hwY3k1aFpHUkZkbVZ1ZENobGRtVnVkQ2s3WEc1Y2RIMWNibHh1WEhRdktpcGNibHgwSUNvZ1FXUmtjeUJqZFdVZ2NHOXBiblFnZEc4Z1RVbEVTU0JtYVd4bExseHVYSFFnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZEdWNGRDQXRJRlJsZUhRZ2IyWWdZM1ZsSUhCdmFXNTBMbHh1WEhRZ0tpQkFjbVYwZFhKdUlIdFVjbUZqYTMxY2JseDBJQ292WEc1Y2RHRmtaRU4xWlZCdmFXNTBLSFJsZUhRcElIdGNibHgwWEhSMllYSWdaWFpsYm5RZ1BTQnVaWGNnVFdWMFlVVjJaVzUwS0h0a1lYUmhPaUJiUTI5dWMzUmhiblJ6TGsxRlZFRmZRMVZGWDFCUFNVNVVYWDBwTzF4dVhIUmNkSFpoY2lCemRISnBibWRDZVhSbGN5QTlJRlYwYVd4ekxuTjBjbWx1WjFSdlFubDBaWE1vZEdWNGRDazdYRzVjZEZ4MFpYWmxiblF1WkdGMFlTQTlJR1YyWlc1MExtUmhkR0V1WTI5dVkyRjBLRlYwYVd4ekxtNTFiV0psY2xSdlZtRnlhV0ZpYkdWTVpXNW5kR2dvYzNSeWFXNW5RbmwwWlhNdWJHVnVaM1JvS1NrN0lDOHZJRk5wZW1WY2JseDBYSFJsZG1WdWRDNWtZWFJoSUQwZ1pYWmxiblF1WkdGMFlTNWpiMjVqWVhRb2MzUnlhVzVuUW5sMFpYTXBPeUF2THlCVVpYaDBYRzVjZEZ4MGNtVjBkWEp1SUhSb2FYTXVZV1JrUlhabGJuUW9aWFpsYm5RcE8xeHVYSFI5WEc1Y2JseDBMeW9xWEc1Y2RDQXFJRUZrWkhNZ2JIbHlhV01nZEc4Z1RVbEVTU0JtYVd4bExseHVYSFFnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYkhseWFXTWdMU0JNZVhKcFl5QjBaWGgwSUhSdklHRmtaQzVjYmx4MElDb2dRSEpsZEhWeWJpQjdWSEpoWTJ0OVhHNWNkQ0FxTDF4dVhIUmhaR1JNZVhKcFl5aHNlWEpwWXlrZ2UxeHVYSFJjZEhaaGNpQmxkbVZ1ZENBOUlHNWxkeUJOWlhSaFJYWmxiblFvZTJSaGRHRTZJRnREYjI1emRHRnVkSE11VFVWVVFWOU1XVkpKUTE5SlJGMTlLVHRjYmx4MFhIUjJZWElnYzNSeWFXNW5RbmwwWlhNZ1BTQlZkR2xzY3k1emRISnBibWRVYjBKNWRHVnpLR3g1Y21saktUdGNibHgwWEhSbGRtVnVkQzVrWVhSaElEMGdaWFpsYm5RdVpHRjBZUzVqYjI1allYUW9WWFJwYkhNdWJuVnRZbVZ5Vkc5V1lYSnBZV0pzWlV4bGJtZDBhQ2h6ZEhKcGJtZENlWFJsY3k1c1pXNW5kR2dwS1RzZ0x5OGdVMmw2WlZ4dVhIUmNkR1YyWlc1MExtUmhkR0VnUFNCbGRtVnVkQzVrWVhSaExtTnZibU5oZENoemRISnBibWRDZVhSbGN5azdJQzh2SUV4NWNtbGpYRzVjZEZ4MGNtVjBkWEp1SUhSb2FYTXVZV1JrUlhabGJuUW9aWFpsYm5RcE8xeHVYSFI5WEc1Y2JseDBMeW9xWEc1Y2RDQXFJRU5vWVc1dVpXd2diVzlrWlNCdFpYTnpZV2RsYzF4dVhIUWdLaUJBY21WMGRYSnVJSHRVY21GamEzMWNibHgwSUNvdlhHNWNkSEJ2YkhsTmIyUmxUMjRvS1NCN1hHNWNkRngwZG1GeUlHVjJaVzUwSUQwZ2JtVjNJRTV2ZEdWUGJrVjJaVzUwS0h0a1lYUmhPaUJiTUhnd01Dd2dNSGhDTUN3Z01IZzNSU3dnTUhnd01GMTlLVHRjYmx4MFhIUnlaWFIxY200Z2RHaHBjeTVoWkdSRmRtVnVkQ2hsZG1WdWRDazdYRzVjZEgxY2JseHVmVnh1WEc1bGVIQnZjblFnZTFSeVlXTnJmVHRjYm1sdGNHOXlkQ0I3ZEc5TmFXUnBmU0JtY205dElDZDBiMjVoYkMxdGFXUnBKenRjYmx4dUx5b3FYRzRnS2lCVGRHRjBhV01nZFhScGJHbDBlU0JtZFc1amRHbHZibk1nZFhObFpDQjBhSEp2ZFdkb2IzVjBJSFJvWlNCc2FXSnlZWEo1TGx4dUlDb3ZYRzVqYkdGemN5QlZkR2xzY3lCN1hHNWNibHgwTHlvcVhHNWNkQ0FxSUVkbGRITWdUV2xrYVZkeWFYUmxja3BUSUhabGNuTnBiMjRnYm5WdFltVnlMbHh1WEhRZ0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNWNkQ0FxTDF4dVhIUnpkR0YwYVdNZ2RtVnljMmx2YmlncElIdGNibHgwWEhSeVpYUjFjbTRnUTI5dWMzUmhiblJ6TGxaRlVsTkpUMDQ3WEc1Y2RIMWNibHh1WEhRdktpcGNibHgwSUNvZ1EyOXVkbVZ5ZENCaElITjBjbWx1WnlCMGJ5QmhiaUJoY25KaGVTQnZaaUJpZVhSbGMxeHVYSFFnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYzNSeWFXNW5YRzVjZENBcUlFQnlaWFIxY200Z2UyRnljbUY1ZlZ4dVhIUWdLaTljYmx4MGMzUmhkR2xqSUhOMGNtbHVaMVJ2UW5sMFpYTW9jM1J5YVc1bktTQjdYRzVjZEZ4MGNtVjBkWEp1SUhOMGNtbHVaeTV6Y0d4cGRDZ25KeWt1YldGd0tHTm9ZWElnUFQ0Z1kyaGhjaTVqYUdGeVEyOWtaVUYwS0NrcFhHNWNkSDFjYmx4dVhIUXZLaXBjYmx4MElDb2dRMmhsWTJ0eklHbG1JR0Z5WjNWdFpXNTBJR2x6SUdFZ2RtRnNhV1FnYm5WdFltVnlMbHh1WEhRZ0tpQkFjR0Z5WVcwZ2V5cDlJRzRnTFNCV1lXeDFaU0IwYnlCamFHVmphMXh1WEhRZ0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVYSFFnS2k5Y2JseDBjM1JoZEdsaklHbHpUblZ0WlhKcFl5aHVLU0I3WEc1Y2RGeDBjbVYwZFhKdUlDRnBjMDVoVGlod1lYSnpaVVpzYjJGMEtHNHBLU0FtSmlCcGMwWnBibWwwWlNodUtWeHVYSFI5WEc1Y2JseDBMeW9xWEc0Z0lDQWdJQ29nVW1WMGRYSnVjeUIwYUdVZ1kyOXljbVZqZENCTlNVUkpJRzUxYldKbGNpQm1iM0lnZEdobElITndaV05wWm1sbFpDQndhWFJqYUM1Y2JpQWdJQ0FnS2lCVmMyVnpJRlJ2Ym1Gc0lFMXBaR2tnTFNCb2RIUndjem92TDJkcGRHaDFZaTVqYjIwdlpHRnVhV2RpTDNSdmJtRnNMM1J5WldVdmJXRnpkR1Z5TDNCaFkydGhaMlZ6TDIxcFpHbGNiaUFnSUNBZ0tpQkFjR0Z5WVcwZ2V5aHpkSEpwYm1kOGJuVnRZbVZ5S1gwZ2NHbDBZMmdnTFNBblF5TTBKeUJ2Y2lCdGFXUnBJRzV2ZEdVZ1kyOWtaVnh1SUNBZ0lDQXFJRUJ5WlhSMWNtNGdlMjUxYldKbGNuMWNiaUFnSUNBZ0tpOWNiaUFnSUNBZ2MzUmhkR2xqSUdkbGRGQnBkR05vS0hCcGRHTm9LU0I3WEc0Z0lDQWdJRngwY21WMGRYSnVJSFJ2VFdsa2FTaHdhWFJqYUNrN1hHNGdJQ0FnSUgxY2JseHVYSFF2S2lwY2JseDBJQ29nVkhKaGJuTnNZWFJsY3lCdWRXMWlaWElnYjJZZ2RHbGphM01nZEc4Z1RVbEVTU0IwYVcxbGMzUmhiWEFnWm05eWJXRjBMQ0J5WlhSMWNtNXBibWNnWVc0Z1lYSnlZWGtnYjJaY2JseDBJQ29nYUdWNElITjBjbWx1WjNNZ2QybDBhQ0IwYUdVZ2RHbHRaU0IyWVd4MVpYTXVJRTFwWkdrZ2FHRnpJR0VnZG1WeWVTQndZWEowYVdOMWJHRnlJSFJwYldVZ2RHOGdaWGh3Y21WemN5QjBhVzFsTEZ4dVhIUWdLaUIwWVd0bElHRWdaMjl2WkNCc2IyOXJJR0YwSUhSb1pTQnpjR1ZqSUdKbFptOXlaU0JsZG1WeUlIUnZkV05vYVc1bklIUm9hWE1nWm5WdVkzUnBiMjR1WEc1Y2RDQXFJRlJvWVc1cmN5QjBieUJvZEhSd2N6b3ZMMmRwZEdoMVlpNWpiMjB2YzJWeVoya3Zhbk50YVdScFhHNWNkQ0FxWEc1Y2RDQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQjBhV05yY3lBdElFNTFiV0psY2lCdlppQjBhV05yY3lCMGJ5QmlaU0IwY21GdWMyeGhkR1ZrWEc1Y2RDQXFJRUJ5WlhSMWNtNGdlMkZ5Y21GNWZTQXRJRUo1ZEdWeklIUm9ZWFFnWm05eWJTQjBhR1VnVFVsRVNTQjBhVzFsSUhaaGJIVmxYRzVjZENBcUwxeHVYSFJ6ZEdGMGFXTWdiblZ0WW1WeVZHOVdZWEpwWVdKc1pVeGxibWQwYUNoMGFXTnJjeWtnZTF4dVhIUWdJQ0FnZG1GeUlHSjFabVpsY2lBOUlIUnBZMnR6SUNZZ01IZzNSanRjYmx4dVhIUWdJQ0FnZDJocGJHVWdLSFJwWTJ0eklEMGdkR2xqYTNNZ1BqNGdOeWtnZTF4dVhIUWdJQ0FnSUNBZ0lHSjFabVpsY2lBOFBEMGdPRHRjYmx4MElDQWdJQ0FnSUNCaWRXWm1aWElnZkQwZ0tDaDBhV05yY3lBbUlEQjROMFlwSUh3Z01IZzRNQ2s3WEc1Y2RDQWdJQ0I5WEc1Y2JseDBJQ0FnSUhaaGNpQmlUR2x6ZENBOUlGdGRPMXh1WEhRZ0lDQWdkMmhwYkdVZ0tIUnlkV1VwSUh0Y2JseDBJQ0FnSUNBZ0lDQmlUR2x6ZEM1d2RYTm9LR0oxWm1abGNpQW1JREI0Wm1ZcE8xeHVYRzVjZENBZ0lDQWdJQ0FnYVdZZ0tHSjFabVpsY2lBbUlEQjRPREFwSUdKMVptWmxjaUErUGowZ09GeHVYSFFnSUNBZ0lDQWdJR1ZzYzJVZ2V5QmljbVZoYXpzZ2ZWeHVYSFFnSUNBZ2ZWeHVYRzVjZENBZ0lDQnlaWFIxY200Z1lreHBjM1E3WEc1Y2RIMWNibHh1WEhRdktpcGNibHgwSUNvZ1EyOTFiblJ6SUc1MWJXSmxjaUJ2WmlCaWVYUmxjeUJwYmlCemRISnBibWRjYmx4MElDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlITmNibHgwSUNvZ1FISmxkSFZ5YmlCN1lYSnlZWGw5WEc1Y2RDQXFMMXh1WEhSemRHRjBhV01nYzNSeWFXNW5RbmwwWlVOdmRXNTBLSE1wSUh0Y2JseDBYSFJ5WlhSMWNtNGdaVzVqYjJSbFZWSkpLSE1wTG5Od2JHbDBLQzhsTGk1OExpOHBMbXhsYm1kMGFDQXRJREZjYmx4MGZWeHVYRzVjZEM4cUtseHVYSFFnS2lCSFpYUWdZVzRnYVc1MElHWnliMjBnWVc0Z1lYSnlZWGtnYjJZZ1lubDBaWE11WEc1Y2RDQXFJRUJ3WVhKaGJTQjdZWEp5WVhsOUlHSjVkR1Z6WEc1Y2RDQXFJRUJ5WlhSMWNtNGdlMjUxYldKbGNuMWNibHgwSUNvdlhHNWNkSE4wWVhScFl5QnVkVzFpWlhKR2NtOXRRbmwwWlhNb1lubDBaWE1wSUh0Y2JseDBYSFIyWVhJZ2FHVjRJRDBnSnljN1hHNWNkRngwZG1GeUlITjBjbWx1WjFKbGMzVnNkRHRjYmx4dVhIUmNkR0o1ZEdWekxtWnZja1ZoWTJnb1puVnVZM1JwYjI0b1lubDBaU2tnZTF4dVhIUmNkRngwYzNSeWFXNW5VbVZ6ZFd4MElEMGdZbmwwWlM1MGIxTjBjbWx1WnlneE5pazdYRzVjYmx4MFhIUmNkQzh2SUdWdWMzVnlaU0J6ZEhKcGJtY2dhWE1nTWlCamFHRnljMXh1WEhSY2RGeDBhV1lnS0hOMGNtbHVaMUpsYzNWc2RDNXNaVzVuZEdnZ1BUMGdNU2tnYzNSeWFXNW5VbVZ6ZFd4MElEMGdYQ0l3WENJZ0t5QnpkSEpwYm1kU1pYTjFiSFJjYmx4dVhIUmNkRngwYUdWNElDczlJSE4wY21sdVoxSmxjM1ZzZER0Y2JseDBYSFI5S1R0Y2JseHVYSFJjZEhKbGRIVnliaUJ3WVhKelpVbHVkQ2hvWlhnc0lERTJLVHRjYmx4MGZWeHVYRzVjZEM4cUtseHVYSFFnS2lCVVlXdGxjeUJoSUc1MWJXSmxjaUJoYm1RZ2MzQnNhWFJ6SUdsMElIVndJR2x1ZEc4Z1lXNGdZWEp5WVhrZ2IyWWdZbmwwWlhNdUlDQkRZVzRnWW1VZ2NHRmtaR1ZrSUdKNUlIQmhjM05wYm1jZ1lTQnVkVzFpWlhJZ2RHOGdZbmwwWlhOT1pXVmtaV1JjYmx4MElDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHNTFiV0psY2x4dVhIUWdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdZbmwwWlhOT1pXVmtaV1JjYmx4MElDb2dRSEpsZEhWeWJpQjdZWEp5WVhsOUlDMGdRWEp5WVhrZ2IyWWdZbmwwWlhOY2JseDBJQ292WEc1Y2RITjBZWFJwWXlCdWRXMWlaWEpVYjBKNWRHVnpLRzUxYldKbGNpd2dZbmwwWlhOT1pXVmtaV1FwSUh0Y2JseDBYSFJpZVhSbGMwNWxaV1JsWkNBOUlHSjVkR1Z6VG1WbFpHVmtJSHg4SURFN1hHNWNibHgwWEhSMllYSWdhR1Y0VTNSeWFXNW5JRDBnYm5WdFltVnlMblJ2VTNSeWFXNW5LREUyS1R0Y2JseHVYSFJjZEdsbUlDaG9aWGhUZEhKcGJtY3ViR1Z1WjNSb0lDWWdNU2tnZXlBdkx5Qk5ZV3RsSUhOMWNtVWdhR1Y0SUhOMGNtbHVaeUJwY3lCbGRtVnVJRzUxYldKbGNpQnZaaUJqYUdGeWMxeHVYSFJjZEZ4MGFHVjRVM1J5YVc1bklEMGdKekFuSUNzZ2FHVjRVM1J5YVc1bk8xeHVYSFJjZEgxY2JseHVYSFJjZEM4dklGTndiR2wwSUdobGVDQnpkSEpwYm1jZ2FXNTBieUJoYmlCaGNuSmhlU0J2WmlCMGQyOGdZMmhoY2lCbGJHVnRaVzUwYzF4dVhIUmNkSFpoY2lCb1pYaEJjbkpoZVNBOUlHaGxlRk4wY21sdVp5NXRZWFJqYUNndkxuc3lmUzluS1R0Y2JseHVYSFJjZEM4dklFNXZkeUJ3WVhKelpTQjBhR1Z0SUc5MWRDQmhjeUJwYm5SbFoyVnljMXh1WEhSY2RHaGxlRUZ5Y21GNUlEMGdhR1Y0UVhKeVlYa3ViV0Z3S0dsMFpXMGdQVDRnY0dGeWMyVkpiblFvYVhSbGJTd2dNVFlwS1Z4dVhHNWNkRngwTHk4Z1VISmxjR1Z1WkNCbGJYQjBlU0JpZVhSbGN5QnBaaUIzWlNCa2IyNG5kQ0JvWVhabElHVnViM1ZuYUZ4dVhIUmNkR2xtSUNob1pYaEJjbkpoZVM1c1pXNW5kR2dnUENCaWVYUmxjMDVsWldSbFpDa2dlMXh1WEhSY2RGeDBkMmhwYkdVZ0tHSjVkR1Z6VG1WbFpHVmtJQzBnYUdWNFFYSnlZWGt1YkdWdVozUm9JRDRnTUNrZ2UxeHVYSFJjZEZ4MFhIUm9aWGhCY25KaGVTNTFibk5vYVdaMEtEQXBPMXh1WEhSY2RGeDBmVnh1WEhSY2RIMWNibHh1WEhSY2RISmxkSFZ5YmlCb1pYaEJjbkpoZVR0Y2JseDBmVnh1WEc1Y2RDOHFLbHgwWEc1Y2RDQXFJRU52Ym5abGNuUnpJSFpoYkhWbElIUnZJR0Z5Y21GNUlHbG1JRzVsWldSbFpDNWNibHgwSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhaaGJIVmxYRzVjZENBcUlFQnlaWFIxY200Z2UyRnljbUY1ZlZ4dVhIUWdLaTljYmx4MGMzUmhkR2xqSUhSdlFYSnlZWGtvZG1Gc2RXVXBJSHRjYmx4MFhIUnBaaUFvUVhKeVlYa3VhWE5CY25KaGVTaDJZV3gxWlNrcElISmxkSFZ5YmlCMllXeDFaVHRjYmx4MFhIUnlaWFIxY200Z1czWmhiSFZsWFR0Y2JseDBmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ2UxVjBhV3h6ZlR0Y2JtTnNZWE56SUZabGVFWnNiM2NnZTF4dVhIUmNibHgwWTI5dWMzUnlkV04wYjNJb0tTQjdYRzVjZEZ4MEx5OGdZMjlrWlM0dUxseHVYSFI5WEc1Y2JseDBMeW9xWEc1Y2RDQXFJRk4xY0hCdmNuUWdabTl5SUdOdmJuWmxjblJwYm1jZ1ZtVjRSbXh2ZHlCMmIybGpaU0JwYm5SdklFMXBaR2xYY21sMFpYSktVeUIwY21GamExeHVYSFFnS2lCQWNtVjBkWEp1SUUxcFpHbFhjbWwwYVdWeUxsUnlZV05ySUc5aWFtVmpkRnh1WEhRZ0tpOWNibHgwZEhKaFkydEdjbTl0Vm05cFkyVW9kbTlwWTJVcElIdGNibHgwWEhSMllYSWdkSEpoWTJzZ1BTQnVaWGNnVkhKaFkyc29LVHRjYmx4MFhIUjJZWElnZDJGcGREdGNibHgwWEhSMllYSWdjR2wwWTJobGN5QTlJRnRkTzF4dVhHNWNkRngwZG05cFkyVXVkR2xqYTJGaWJHVnpMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNG9kR2xqYTJGaWJHVXBJSHRjYmx4MFhIUmNkSEJwZEdOb1pYTWdQU0JiWFR0Y2JseHVYSFJjZEZ4MGFXWWdLSFJwWTJ0aFlteGxMbTV2ZEdWVWVYQmxJRDA5UFNBbmJpY3BJSHRjYmx4MFhIUmNkRngwZEdsamEyRmliR1V1YTJWNWN5NW1iM0pGWVdOb0tHWjFibU4wYVc5dUtHdGxlU2tnZTF4dVhIUmNkRngwWEhSY2RDOHZJR0oxYVd4a0lHRnljbUY1SUc5bUlIQnBkR05vWlhOY2JseDBYSFJjZEZ4MFhIUndhWFJqYUdWekxuQjFjMmdvZEdocGN5NWpiMjUyWlhKMFVHbDBZMmdvYTJWNUtTazdYRzVjZEZ4MFhIUmNkSDBwTzF4dVhHNWNkRngwWEhSOUlHVnNjMlVnYVdZZ0tIUnBZMnRoWW14bExtNXZkR1ZVZVhCbElEMDlQU0FuY2ljcElIdGNibHgwWEhSY2RGeDBMeThnYlc5MlpTQnZiaUIwYnlCMGFHVWdibVY0ZENCMGFXTnJZV0pzWlNCaGJtUWdkWE5sSUhSb2FYTWdjbVZ6ZENCaGN5QmhJR0IzWVdsMFlDQndjbTl3WlhKMGVTQm1iM0lnZEdobElHNWxlSFFnWlhabGJuUmNibHgwWEhSY2RGeDBkMkZwZENBOUlIUm9hWE11WTI5dWRtVnlkRVIxY21GMGFXOXVLSFJwWTJ0aFlteGxLVHRjYmx4MFhIUmNkRngwY21WMGRYSnVPMXh1WEhSY2RGeDBmVnh1WEc1Y2RGeDBYSFIwY21GamF5NWhaR1JGZG1WdWRDaHVaWGNnVG05MFpVVjJaVzUwS0h0d2FYUmphRG9nY0dsMFkyaGxjeXdnWkhWeVlYUnBiMjQ2SUhSb2FYTXVZMjl1ZG1WeWRFUjFjbUYwYVc5dUtIUnBZMnRoWW14bEtTd2dkMkZwZERvZ2QyRnBkSDBwS1R0Y2JseDBYSFJjZEZ4dVhIUmNkRngwTHk4Z2NtVnpaWFFnZDJGcGRGeHVYSFJjZEZ4MGQyRnBkQ0E5SURBN1hHNWNkRngwZlNrN1hHNWNibHgwWEhSeVpYUjFjbTRnZEhKaFkyczdYRzVjZEgxY2JseHVYRzVjZEM4cUtseHVYSFFnS2lCRGIyNTJaWEowY3lCV1pYaEdiRzkzSUhCcGRHTm9JSE41Ym5SaGVDQjBieUJOYVdScFYzSnBkR1Z5U2xNZ2MzbHVkR0Y0WEc1Y2RDQXFJRUJ3WVhKaGJTQndhWFJqYUNCemRISnBibWRjYmx4MElDb3ZYRzVjZEdOdmJuWmxjblJRYVhSamFDaHdhWFJqYUNrZ2UxeHVYSFJjZEhKbGRIVnliaUJ3YVhSamFDNXlaWEJzWVdObEtDY3ZKeXdnSnljcE8xeHVYSFI5SUZ4dVhHNWNibHgwTHlvcVhHNWNkQ0FxSUVOdmJuWmxjblJ6SUZabGVFWnNiM2NnWkhWeVlYUnBiMjRnYzNsdWRHRjRJSFJ2SUUxcFpHbFhjbWwwWlhKS1V5QnplVzUwWVhoY2JseDBJQ29nUUhCaGNtRnRJRzV2ZEdVZ2MzUnlkV04wSUdaeWIyMGdWbVY0Um14dmQxeHVYSFFnS2k5Y2JseDBZMjl1ZG1WeWRFUjFjbUYwYVc5dUtHNXZkR1VwSUh0Y2JseDBYSFJ6ZDJsMFkyZ2dLRzV2ZEdVdVpIVnlZWFJwYjI0cElIdGNibHgwWEhSY2RHTmhjMlVnSjNjbk9seHVYSFJjZEZ4MFhIUnlaWFIxY200Z0p6RW5PMXh1WEhSY2RGeDBZMkZ6WlNBbmFDYzZYRzVjZEZ4MFhIUmNkSEpsZEhWeWJpQnViM1JsTG1selJHOTBkR1ZrS0NrZ1B5QW5aREluSURvZ0p6SW5PMXh1WEhSY2RGeDBZMkZ6WlNBbmNTYzZYRzVjZEZ4MFhIUmNkSEpsZEhWeWJpQnViM1JsTG1selJHOTBkR1ZrS0NrZ1B5QW5aRFFuSURvZ0p6UW5PMXh1WEhSY2RGeDBZMkZ6WlNBbk9DYzZYRzVjZEZ4MFhIUmNkSEpsZEhWeWJpQnViM1JsTG1selJHOTBkR1ZrS0NrZ1B5QW5aRGduSURvZ0p6Z25PMXh1WEhSY2RIMWNibHh1WEhSY2RISmxkSFZ5YmlCdWIzUmxMbVIxY21GMGFXOXVPMXh1WEhSOU8xeHVmVnh1WEc1bGVIQnZjblFnZTFabGVFWnNiM2Q5TzF4dUx5b3FYRzRnS2lCUFltcGxZM1FnZEdoaGRDQndkWFJ6SUhSdloyVjBhR1Z5SUhSeVlXTnJjeUJoYm1RZ2NISnZkbWxrWlhNZ2JXVjBhRzlrY3lCbWIzSWdabWxzWlNCdmRYUndkWFF1WEc0Z0tpQkFjR0Z5WVcwZ2UyRnljbUY1ZlNCMGNtRmphM01nTFNCQmJpQmhjbkpoZVNCdlppQjdWSEpoWTJ0OUlHOWlhbVZqZEhNdVhHNGdLaUJBY21WMGRYSnVJSHRYY21sMFpYSjlYRzRnS2k5Y2JtTnNZWE56SUZkeWFYUmxjaUI3WEc1Y2RHTnZibk4wY25WamRHOXlLSFJ5WVdOcmN5a2dlMXh1WEhSY2RIUm9hWE11WkdGMFlTQTlJRnRkTzF4dVhHNWNkRngwZG1GeUlIUnlZV05yVkhsd1pTQTlJSFJ5WVdOcmN5NXNaVzVuZEdnZ1BpQXhJRDhnUTI5dWMzUmhiblJ6TGtoRlFVUkZVbDlEU0ZWT1MxOUdUMUpOUVZReElEb2dRMjl1YzNSaGJuUnpMa2hGUVVSRlVsOURTRlZPUzE5R1QxSk5RVlF3TzF4dVhIUmNkSFpoY2lCdWRXMWlaWEpQWmxSeVlXTnJjeUE5SUZWMGFXeHpMbTUxYldKbGNsUnZRbmwwWlhNb2RISmhZMnR6TG14bGJtZDBhQ3dnTWlrN0lDOHZJSFIzYnlCaWVYUmxjeUJzYjI1blhHNWNibHgwWEhRdkx5QklaV0ZrWlhJZ1kyaDFibXRjYmx4MFhIUjBhR2x6TG1SaGRHRXVjSFZ6YUNodVpYY2dRMmgxYm1zb2UxeHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RIUjVjR1U2SUVOdmJuTjBZVzUwY3k1SVJVRkVSVkpmUTBoVlRrdGZWRmxRUlN4Y2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSa1lYUmhPaUIwY21GamExUjVjR1V1WTI5dVkyRjBLRzUxYldKbGNrOW1WSEpoWTJ0ekxDQkRiMjV6ZEdGdWRITXVTRVZCUkVWU1gwTklWVTVMWDBSSlZrbFRTVTlPS1gwcEtUdGNibHh1WEhSY2RDOHZJRlJ5WVdOcklHTm9kVzVyYzF4dVhIUmNkSFJ5WVdOcmN5NW1iM0pGWVdOb0tHWjFibU4wYVc5dUtIUnlZV05yTENCcEtTQjdYRzVjZEZ4MFhIUjBjbUZqYXk1aFpHUkZkbVZ1ZENodVpYY2dUV1YwWVVWMlpXNTBLSHRrWVhSaE9pQkRiMjV6ZEdGdWRITXVUVVZVUVY5RlRrUmZUMFpmVkZKQlEwdGZTVVI5S1NrN1hHNWNkRngwWEhSMGFHbHpMbVJoZEdFdWNIVnphQ2gwY21GamF5azdYRzVjZEZ4MGZTd2dkR2hwY3lrN1hHNWNkSDFjYmx4dVhIUXZLaXBjYmx4MElDb2dRblZwYkdSeklIUm9aU0JtYVd4bElHbHVkRzhnWVNCVmFXNTBPRUZ5Y21GNVhHNWNkQ0FxSUVCeVpYUjFjbTRnZTFWcGJuUTRRWEp5WVhsOVhHNWNkQ0FxTDF4dVhIUmlkV2xzWkVacGJHVW9LU0I3WEc1Y2RGeDBkbUZ5SUdKMWFXeGtJRDBnVzEwN1hHNWNibHgwWEhRdkx5QkVZWFJoSUdOdmJuTnBjM1J6SUc5bUlHTm9kVzVyY3lCM2FHbGphQ0JqYjI1emFYTjBjeUJ2WmlCa1lYUmhYRzVjZEZ4MGRHaHBjeTVrWVhSaExtWnZja1ZoWTJnb0tHUXBJRDArSUdKMWFXeGtJRDBnWW5WcGJHUXVZMjl1WTJGMEtHUXVkSGx3WlN3Z1pDNXphWHBsTENCa0xtUmhkR0VwS1R0Y2JseHVYSFJjZEhKbGRIVnliaUJ1WlhjZ1ZXbHVkRGhCY25KaGVTaGlkV2xzWkNrN1hHNWNkSDFjYmx4dVhIUXZLaXBjYmx4MElDb2dRMjl1ZG1WeWRDQm1hV3hsSUdKMVptWmxjaUIwYnlCaElHSmhjMlUyTkNCemRISnBibWN1SUNCRWFXWm1aWEpsYm5RZ2JXVjBhRzlrY3lCa1pYQmxibVJwYm1jZ2IyNGdhV1lnWW5KdmQzTmxjaUJ2Y2lCdWIyUmxMbHh1WEhRZ0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNWNkQ0FxTDF4dVhIUmlZWE5sTmpRb0tTQjdYRzVjZEZ4MGFXWWdLSFI1Y0dWdlppQmlkRzloSUQwOVBTQW5ablZ1WTNScGIyNG5LU0J5WlhSMWNtNGdZblJ2WVNoVGRISnBibWN1Wm5KdmJVTm9ZWEpEYjJSbExtRndjR3g1S0c1MWJHd3NJSFJvYVhNdVluVnBiR1JHYVd4bEtDa3BLVHRjYmx4MFhIUnlaWFIxY200Z2JtVjNJRUoxWm1abGNpaDBhR2x6TG1KMWFXeGtSbWxzWlNncEtTNTBiMU4wY21sdVp5Z25ZbUZ6WlRZMEp5azdYRzVjZEgxY2JseHVJQ0FnSUM4cUtseHVJQ0FnSUNBcUlFZGxkQ0IwYUdVZ1pHRjBZU0JWVWtrdVhHNGdJQ0FnSUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlZ4dUlDQWdJQ0FxTDF4dUlDQWdJR1JoZEdGVmNta29LU0I3WEc0Z0lDQWdYSFJ5WlhSMWNtNGdKMlJoZEdFNllYVmthVzh2Yldsa2FUdGlZWE5sTmpRc0p5QXJJSFJvYVhNdVltRnpaVFkwS0NrN1hHNGdJQ0FnZlZ4dVhHNWNkQzhxS2x4dVhIUWdLaUJQZFhSd2RYUWdkRzhnYzNSa2IzVjBYRzVjZENBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMxY2JseDBJQ292WEc0Z0lDQWdjM1JrYjNWMEtDa2dlMXh1SUNBZ0lGeDBjbVYwZFhKdUlIQnliMk5sYzNNdWMzUmtiM1YwTG5keWFYUmxLRzVsZHlCQ2RXWm1aWElvZEdocGN5NWlkV2xzWkVacGJHVW9LU2twTzF4dUlDQWdJSDFjYmx4dVhIUXZLaXBjYmx4MElDb2dVMkYyWlNCMGJ5Qk5TVVJKSUdacGJHVmNibHgwSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUdacGJHVnVZVzFsWEc1Y2RDQXFMMXh1WEhSellYWmxUVWxFU1NobWFXeGxibUZ0WlNrZ2UxeHVYSFJjZEhaaGNpQmlkV1ptWlhJZ1BTQnVaWGNnUW5WbVptVnlLSFJvYVhNdVluVnBiR1JHYVd4bEtDa3BPMXh1WEhSY2RHWnpMbmR5YVhSbFJtbHNaU2htYVd4bGJtRnRaU0FySUNjdWJXbGtKeXdnWW5WbVptVnlMQ0JtZFc1amRHbHZiaUFvWlhKeUtTQjdYRzVjZEZ4MFhIUnBaaWhsY25JcElISmxkSFZ5YmlCamIyNXpiMnhsTG14dlp5aGxjbklwTzF4dVhIUmNkSDBwTzF4dVhIUjlYRzU5WEc1Y2JtVjRjRzl5ZENCN1YzSnBkR1Z5ZlR0Y2JpSmRmUT09XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vbWlkaS13cml0ZXItanMvYnVpbGQvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDE0MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCdcblxuLy8gdXRpbFxuZnVuY3Rpb24gZmlsbFN0ciAocywgbnVtKSB7IHJldHVybiBBcnJheShudW0gKyAxKS5qb2luKHMpIH1cbmZ1bmN0aW9uIGlzTnVtICh4KSB7IHJldHVybiB0eXBlb2YgeCA9PT0gJ251bWJlcicgfVxuZnVuY3Rpb24gaXNTdHIgKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnc3RyaW5nJyB9XG5mdW5jdGlvbiBpc0RlZiAoeCkgeyByZXR1cm4gdHlwZW9mIHggIT09ICd1bmRlZmluZWQnIH1cbmZ1bmN0aW9uIG1pZGlUb0ZyZXEgKG1pZGksIHR1bmluZykge1xuICByZXR1cm4gTWF0aC5wb3coMiwgKG1pZGkgLSA2OSkgLyAxMikgKiAodHVuaW5nIHx8IDQ0MClcbn1cblxudmFyIFJFR0VYID0gL14oW2EtZ0EtR10pKCN7MSx9fGJ7MSx9fHh7MSx9fCkoLT9cXGQqKVxccyooLiopXFxzKiQvXG4vKipcbiAqIEEgcmVnZXggZm9yIG1hdGNoaW5nIG5vdGUgc3RyaW5ncyBpbiBzY2llbnRpZmljIG5vdGF0aW9uLlxuICpcbiAqIEBuYW1lIHJlZ2V4XG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm4ge1JlZ0V4cH0gdGhlIHJlZ2V4cCB1c2VkIHRvIHBhcnNlIHRoZSBub3RlIG5hbWVcbiAqXG4gKiBUaGUgbm90ZSBzdHJpbmcgc2hvdWxkIGhhdmUgdGhlIGZvcm0gYGxldHRlclthY2NpZGVudGFsc11bb2N0YXZlXVtlbGVtZW50XWBcbiAqIHdoZXJlOlxuICpcbiAqIC0gbGV0dGVyOiAoUmVxdWlyZWQpIGlzIGEgbGV0dGVyIGZyb20gQSB0byBHIGVpdGhlciB1cHBlciBvciBsb3dlciBjYXNlXG4gKiAtIGFjY2lkZW50YWxzOiAoT3B0aW9uYWwpIGNhbiBiZSBvbmUgb3IgbW9yZSBgYmAgKGZsYXRzKSwgYCNgIChzaGFycHMpIG9yIGB4YCAoZG91YmxlIHNoYXJwcykuXG4gKiBUaGV5IGNhbiBOT1QgYmUgbWl4ZWQuXG4gKiAtIG9jdGF2ZTogKE9wdGlvbmFsKSBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGludGVnZXJcbiAqIC0gZWxlbWVudDogKE9wdGlvbmFsKSBhZGRpdGlvbmFsbHkgYW55dGhpbmcgYWZ0ZXIgdGhlIGR1cmF0aW9uIGlzIGNvbnNpZGVyZWQgdG9cbiAqIGJlIHRoZSBlbGVtZW50IG5hbWUgKGZvciBleGFtcGxlOiAnQzIgZG9yaWFuJylcbiAqXG4gKiBUaGUgZXhlY3V0ZWQgcmVnZXggY29udGFpbnMgKGJ5IGFycmF5IGluZGV4KTpcbiAqXG4gKiAtIDA6IHRoZSBjb21wbGV0ZSBzdHJpbmdcbiAqIC0gMTogdGhlIG5vdGUgbGV0dGVyXG4gKiAtIDI6IHRoZSBvcHRpb25hbCBhY2NpZGVudGFsc1xuICogLSAzOiB0aGUgb3B0aW9uYWwgb2N0YXZlXG4gKiAtIDQ6IHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgKHRyaW1tZWQpXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciBwYXJzZXIgPSByZXF1aXJlKCdub3RlLXBhcnNlcicpXG4gKiBwYXJzZXIucmVnZXguZXhlYygnYyM0JylcbiAqIC8vID0+IFsnYyM0JywgJ2MnLCAnIycsICc0JywgJyddXG4gKiBwYXJzZXIucmVnZXguZXhlYygnYyM0IG1ham9yJylcbiAqIC8vID0+IFsnYyM0bWFqb3InLCAnYycsICcjJywgJzQnLCAnbWFqb3InXVxuICogcGFyc2VyLnJlZ2V4KCkuZXhlYygnQ01hajcnKVxuICogLy8gPT4gWydDTWFqNycsICdDJywgJycsICcnLCAnTWFqNyddXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdleCAoKSB7IHJldHVybiBSRUdFWCB9XG5cbnZhciBTRU1JVE9ORVMgPSBbMCwgMiwgNCwgNSwgNywgOSwgMTFdXG4vKipcbiAqIFBhcnNlIGEgbm90ZSBuYW1lIGluIHNjaWVudGlmaWMgbm90YXRpb24gYW4gcmV0dXJuIGl0J3MgY29tcG9uZW50cyxcbiAqIGFuZCBzb21lIG51bWVyaWMgcHJvcGVydGllcyBpbmNsdWRpbmcgbWlkaSBudW1iZXIgYW5kIGZyZXF1ZW5jeS5cbiAqXG4gKiBAbmFtZSBwYXJzZVxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge1N0cmluZ30gbm90ZSAtIHRoZSBub3RlIHN0cmluZyB0byBiZSBwYXJzZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNUb25pYyAtIHRydWUgdGhlIHN0cmluZ3MgaXQncyBzdXBwb3NlZCB0byBjb250YWluIGEgbm90ZSBudW1iZXJcbiAqIGFuZCBzb21lIGNhdGVnb3J5IChmb3IgZXhhbXBsZSBhbiBzY2FsZTogJ0MjIG1ham9yJykuIEl0J3MgZmFsc2UgYnkgZGVmYXVsdCxcbiAqIGJ1dCB3aGVuIHRydWUsIGVuIGV4dHJhIHRvbmljT2YgcHJvcGVydHkgaXMgcmV0dXJuZWQgd2l0aCB0aGUgY2F0ZWdvcnkgKCdtYWpvcicpXG4gKiBAcGFyYW0ge0Zsb2F0fSB0dW5uaW5nIC0gVGhlIGZyZXF1ZW5jeSBvZiBBNCBub3RlIHRvIGNhbGN1bGF0ZSBmcmVxdWVuY2llcy5cbiAqIEJ5IGRlZmF1bHQgaXQgNDQwLlxuICogQHJldHVybiB7T2JqZWN0fSB0aGUgcGFyc2VkIG5vdGUgbmFtZSBvciBudWxsIGlmIG5vdCBhIHZhbGlkIG5vdGVcbiAqXG4gKiBUaGUgcGFyc2VkIG5vdGUgbmFtZSBvYmplY3Qgd2lsbCBBTFdBWVMgY29udGFpbnM6XG4gKiAtIGxldHRlcjogdGhlIHVwcGVyY2FzZSBsZXR0ZXIgb2YgdGhlIG5vdGVcbiAqIC0gYWNjOiB0aGUgYWNjaWRlbnRhbHMgb2YgdGhlIG5vdGUgKG9ubHkgc2hhcnBzIG9yIGZsYXRzKVxuICogLSBwYzogdGhlIHBpdGNoIGNsYXNzIChsZXR0ZXIgKyBhY2MpXG4gKiAtIHN0ZXA6IHMgYSBudW1lcmljIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBsZXR0ZXIuIEl0J3MgYW4gaW50ZWdlciBmcm9tIDAgdG8gNlxuICogd2hlcmUgMCA9IEMsIDEgPSBEIC4uLiA2ID0gQlxuICogLSBhbHQ6IGEgbnVtZXJpYyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWNjaWRlbnRhbHMuIDAgbWVhbnMgbm8gYWx0ZXJhdGlvbixcbiAqIHBvc2l0aXZlIG51bWJlcnMgYXJlIGZvciBzaGFycHMgYW5kIG5lZ2F0aXZlIGZvciBmbGF0c1xuICogLSBjaHJvbWE6IGEgbnVtZXJpYyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGl0Y2ggY2xhc3MuIEl0J3MgbGlrZSBtaWRpIGZvclxuICogcGl0Y2ggY2xhc3Nlcy4gMCA9IEMsIDEgPSBDIywgMiA9IEQgLi4uIDExID0gQi4gQ2FuIGJlIHVzZWQgdG8gZmluZCBlbmhhcm1vbmljc1xuICogc2luY2UsIGZvciBleGFtcGxlLCBjaHJvbWEgb2YgJ0NiJyBhbmQgJ0InIGFyZSBib3RoIDExXG4gKlxuICogSWYgdGhlIG5vdGUgaGFzIG9jdGF2ZSwgdGhlIHBhcnNlciBvYmplY3Qgd2lsbCBjb250YWluOlxuICogLSBvY3Q6IHRoZSBvY3RhdmUgbnVtYmVyIChhcyBpbnRlZ2VyKVxuICogLSBtaWRpOiB0aGUgbWlkaSBudW1iZXJcbiAqIC0gZnJlcTogdGhlIGZyZXF1ZW5jeSAodXNpbmcgdHVuaW5nIHBhcmFtZXRlciBhcyBiYXNlKVxuICpcbiAqIElmIHRoZSBwYXJhbWV0ZXIgYGlzVG9uaWNgIGlzIHNldCB0byB0cnVlLCB0aGUgcGFyc2VkIG9iamVjdCB3aWxsIGNvbnRhaW46XG4gKiAtIHRvbmljT2Y6IHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgdGhhdCBmb2xsb3dzIG5vdGUgbmFtZSAobGVmdCBhbmQgcmlnaHQgdHJpbW1lZClcbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIHBhcnNlID0gcmVxdWlyZSgnbm90ZS1wYXJzZXInKS5wYXJzZVxuICogcGFyc2UoJ0NiNCcpXG4gKiAvLyA9PiB7IGxldHRlcjogJ0MnLCBhY2M6ICdiJywgcGM6ICdDYicsIHN0ZXA6IDAsIGFsdDogLTEsIGNocm9tYTogLTEsXG4gKiAgICAgICAgIG9jdDogNCwgbWlkaTogNTksIGZyZXE6IDI0Ni45NDE2NTA2MjgwNjIwNiB9XG4gKiAvLyBpZiBubyBvY3RhdmUsIG5vIG1pZGksIG5vIGZyZXFcbiAqIHBhcnNlKCdmeCcpXG4gKiAvLyA9PiB7IGxldHRlcjogJ0YnLCBhY2M6ICcjIycsIHBjOiAnRiMjJywgc3RlcDogMywgYWx0OiAyLCBjaHJvbWE6IDcgfSlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlIChzdHIsIGlzVG9uaWMsIHR1bmluZykge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHJldHVybiBudWxsXG4gIHZhciBtID0gUkVHRVguZXhlYyhzdHIpXG4gIGlmICghbSB8fCAoIWlzVG9uaWMgJiYgbVs0XSkpIHJldHVybiBudWxsXG5cbiAgdmFyIHAgPSB7IGxldHRlcjogbVsxXS50b1VwcGVyQ2FzZSgpLCBhY2M6IG1bMl0ucmVwbGFjZSgveC9nLCAnIyMnKSB9XG4gIHAucGMgPSBwLmxldHRlciArIHAuYWNjXG4gIHAuc3RlcCA9IChwLmxldHRlci5jaGFyQ29kZUF0KDApICsgMykgJSA3XG4gIHAuYWx0ID0gcC5hY2NbMF0gPT09ICdiJyA/IC1wLmFjYy5sZW5ndGggOiBwLmFjYy5sZW5ndGhcbiAgdmFyIHBvcyA9IFNFTUlUT05FU1twLnN0ZXBdICsgcC5hbHRcbiAgcC5jaHJvbWEgPSBwb3MgPCAwID8gMTIgKyBwb3MgOiBwb3MgJSAxMlxuICBpZiAobVszXSkgeyAvLyBoYXMgb2N0YXZlXG4gICAgcC5vY3QgPSArbVszXVxuICAgIHAubWlkaSA9IHBvcyArIDEyICogKHAub2N0ICsgMSlcbiAgICBwLmZyZXEgPSBtaWRpVG9GcmVxKHAubWlkaSwgdHVuaW5nKVxuICB9XG4gIGlmIChpc1RvbmljKSBwLnRvbmljT2YgPSBtWzRdXG4gIHJldHVybiBwXG59XG5cbnZhciBMRVRURVJTID0gJ0NERUZHQUInXG5mdW5jdGlvbiBhY2NTdHIgKG4pIHsgcmV0dXJuICFpc051bShuKSA/ICcnIDogbiA8IDAgPyBmaWxsU3RyKCdiJywgLW4pIDogZmlsbFN0cignIycsIG4pIH1cbmZ1bmN0aW9uIG9jdFN0ciAobikgeyByZXR1cm4gIWlzTnVtKG4pID8gJycgOiAnJyArIG4gfVxuXG4vKipcbiAqIENyZWF0ZSBhIHN0cmluZyBmcm9tIGEgcGFyc2VkIG9iamVjdCBvciBgc3RlcCwgYWx0ZXJhdGlvbiwgb2N0YXZlYCBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gdGhlIHBhcnNlZCBkYXRhIG9iamVjdFxuICogQHJldHVybiB7U3RyaW5nfSBhIG5vdGUgc3RyaW5nIG9yIG51bGwgaWYgbm90IHZhbGlkIHBhcmFtZXRlcnNcbiAqIEBzaW5jZSAxLjJcbiAqIEBleGFtcGxlXG4gKiBwYXJzZXIuYnVpbGQocGFyc2VyLnBhcnNlKCdjYjInKSkgLy8gPT4gJ0NiMidcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gaXQgYWNjZXB0cyAoc3RlcCwgYWx0ZXJhdGlvbiwgb2N0YXZlKSBwYXJhbWV0ZXJzOlxuICogcGFyc2VyLmJ1aWxkKDMpIC8vID0+ICdGJ1xuICogcGFyc2VyLmJ1aWxkKDMsIC0xKSAvLyA9PiAnRmInXG4gKiBwYXJzZXIuYnVpbGQoMywgLTEsIDQpIC8vID0+ICdGYjQnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZCAocywgYSwgbykge1xuICBpZiAocyA9PT0gbnVsbCB8fCB0eXBlb2YgcyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBudWxsXG4gIGlmIChzLnN0ZXApIHJldHVybiBidWlsZChzLnN0ZXAsIHMuYWx0LCBzLm9jdClcbiAgaWYgKHMgPCAwIHx8IHMgPiA2KSByZXR1cm4gbnVsbFxuICByZXR1cm4gTEVUVEVSUy5jaGFyQXQocykgKyBhY2NTdHIoYSkgKyBvY3RTdHIobylcbn1cblxuLyoqXG4gKiBHZXQgbWlkaSBvZiBhIG5vdGVcbiAqXG4gKiBAbmFtZSBtaWRpXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7U3RyaW5nfEludGVnZXJ9IG5vdGUgLSB0aGUgbm90ZSBuYW1lIG9yIG1pZGkgbnVtYmVyXG4gKiBAcmV0dXJuIHtJbnRlZ2VyfSB0aGUgbWlkaSBudW1iZXIgb2YgdGhlIG5vdGUgb3IgbnVsbCBpZiBub3QgYSB2YWxpZCBub3RlXG4gKiBvciB0aGUgbm90ZSBkb2VzIE5PVCBjb250YWlucyBvY3RhdmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgcGFyc2VyID0gcmVxdWlyZSgnbm90ZS1wYXJzZXInKVxuICogcGFyc2VyLm1pZGkoJ0E0JykgLy8gPT4gNjlcbiAqIHBhcnNlci5taWRpKCdBJykgLy8gPT4gbnVsbFxuICogQGV4YW1wbGVcbiAqIC8vIG1pZGkgbnVtYmVycyBhcmUgYnlwYXNzZWQgKGV2ZW4gYXMgc3RyaW5ncylcbiAqIHBhcnNlci5taWRpKDYwKSAvLyA9PiA2MFxuICogcGFyc2VyLm1pZGkoJzYwJykgLy8gPT4gNjBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pZGkgKG5vdGUpIHtcbiAgaWYgKChpc051bShub3RlKSB8fCBpc1N0cihub3RlKSkgJiYgbm90ZSA+PSAwICYmIG5vdGUgPCAxMjgpIHJldHVybiArbm90ZVxuICB2YXIgcCA9IHBhcnNlKG5vdGUpXG4gIHJldHVybiBwICYmIGlzRGVmKHAubWlkaSkgPyBwLm1pZGkgOiBudWxsXG59XG5cbi8qKlxuICogR2V0IGZyZXEgb2YgYSBub3RlIGluIGhlcnR6cyAoaW4gYSB3ZWxsIHRlbXBlcmVkIDQ0MEh6IEE0KVxuICpcbiAqIEBuYW1lIGZyZXFcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtTdHJpbmd9IG5vdGUgLSB0aGUgbm90ZSBuYW1lIG9yIG5vdGUgbWlkaSBudW1iZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSB0dW5pbmcgLSAoT3B0aW9uYWwpIHRoZSBBNCBmcmVxdWVuY3kgKDQ0MCBieSBkZWZhdWx0KVxuICogQHJldHVybiB7RmxvYXR9IHRoZSBmcmVxIG9mIHRoZSBudW1iZXIgaWYgaGVydHpzIG9yIG51bGwgaWYgbm90IHZhbGlkIG5vdGVcbiAqIEBleGFtcGxlXG4gKiB2YXIgcGFyc2VyID0gcmVxdWlyZSgnbm90ZS1wYXJzZXInKVxuICogcGFyc2VyLmZyZXEoJ0E0JykgLy8gPT4gNDQwXG4gKiBwYXJzZXIuZnJlcSgnQScpIC8vID0+IG51bGxcbiAqIEBleGFtcGxlXG4gKiAvLyBjYW4gY2hhbmdlIHR1bmluZyAoNDQwIGJ5IGRlZmF1bHQpXG4gKiBwYXJzZXIuZnJlcSgnQTQnLCA0NDQpIC8vID0+IDQ0NFxuICogcGFyc2VyLmZyZXEoJ0EzJywgNDQ0KSAvLyA9PiAyMjJcbiAqIEBleGFtcGxlXG4gKiAvLyBpdCBhY2NlcHRzIG1pZGkgbnVtYmVycyAoYXMgbnVtYmVycyBhbmQgYXMgc3RyaW5ncylcbiAqIHBhcnNlci5mcmVxKDY5KSAvLyA9PiA0NDBcbiAqIHBhcnNlci5mcmVxKCc2OScsIDQ0MikgLy8gPT4gNDQyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcmVxIChub3RlLCB0dW5pbmcpIHtcbiAgdmFyIG0gPSBtaWRpKG5vdGUpXG4gIHJldHVybiBtID09PSBudWxsID8gbnVsbCA6IG1pZGlUb0ZyZXEobSwgdHVuaW5nKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGV0dGVyIChzcmMpIHsgcmV0dXJuIChwYXJzZShzcmMpIHx8IHt9KS5sZXR0ZXIgfVxuZXhwb3J0IGZ1bmN0aW9uIGFjYyAoc3JjKSB7IHJldHVybiAocGFyc2Uoc3JjKSB8fCB7fSkuYWNjIH1cbmV4cG9ydCBmdW5jdGlvbiBwYyAoc3JjKSB7IHJldHVybiAocGFyc2Uoc3JjKSB8fCB7fSkucGMgfVxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXAgKHNyYykgeyByZXR1cm4gKHBhcnNlKHNyYykgfHwge30pLnN0ZXAgfVxuZXhwb3J0IGZ1bmN0aW9uIGFsdCAoc3JjKSB7IHJldHVybiAocGFyc2Uoc3JjKSB8fCB7fSkuYWx0IH1cbmV4cG9ydCBmdW5jdGlvbiBjaHJvbWEgKHNyYykgeyByZXR1cm4gKHBhcnNlKHNyYykgfHwge30pLmNocm9tYSB9XG5leHBvcnQgZnVuY3Rpb24gb2N0IChzcmMpIHsgcmV0dXJuIChwYXJzZShzcmMpIHx8IHt9KS5vY3QgfVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L25vdGUtcGFyc2VyL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAxNDFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX2R1cGxleC5qcycpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3JlYWRhYmxlLXN0cmVhbS9kdXBsZXgtYnJvd3Nlci5qc1xuLy8gbW9kdWxlIGlkID0gMTQyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIGEgcGFzc3Rocm91Z2ggc3RyZWFtLlxuLy8gYmFzaWNhbGx5IGp1c3QgdGhlIG1vc3QgbWluaW1hbCBzb3J0IG9mIFRyYW5zZm9ybSBzdHJlYW0uXG4vLyBFdmVyeSB3cml0dGVuIGNodW5rIGdldHMgb3V0cHV0IGFzLWlzLlxuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUGFzc1Rocm91Z2g7XG5cbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL19zdHJlYW1fdHJhbnNmb3JtJyk7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudXRpbC5pbmhlcml0cyhQYXNzVGhyb3VnaCwgVHJhbnNmb3JtKTtcblxuZnVuY3Rpb24gUGFzc1Rocm91Z2gob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGFzc1Rocm91Z2gpKSByZXR1cm4gbmV3IFBhc3NUaHJvdWdoKG9wdGlvbnMpO1xuXG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuXG5QYXNzVGhyb3VnaC5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG51bGwsIGNodW5rKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qc1xuLy8gbW9kdWxlIGlkID0gMTQzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbi8qPHJlcGxhY2VtZW50PiovXG52YXIgYnVmZmVyU2hpbSA9IHJlcXVpcmUoJ2J1ZmZlci1zaGltcycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyTGlzdDtcblxuZnVuY3Rpb24gQnVmZmVyTGlzdCgpIHtcbiAgdGhpcy5oZWFkID0gbnVsbDtcbiAgdGhpcy50YWlsID0gbnVsbDtcbiAgdGhpcy5sZW5ndGggPSAwO1xufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKHYpIHtcbiAgdmFyIGVudHJ5ID0geyBkYXRhOiB2LCBuZXh0OiBudWxsIH07XG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHRoaXMudGFpbC5uZXh0ID0gZW50cnk7ZWxzZSB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgdGhpcy50YWlsID0gZW50cnk7XG4gICsrdGhpcy5sZW5ndGg7XG59O1xuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS51bnNoaWZ0ID0gZnVuY3Rpb24gKHYpIHtcbiAgdmFyIGVudHJ5ID0geyBkYXRhOiB2LCBuZXh0OiB0aGlzLmhlYWQgfTtcbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgdGhpcy5oZWFkID0gZW50cnk7XG4gICsrdGhpcy5sZW5ndGg7XG59O1xuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5zaGlmdCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIHZhciByZXQgPSB0aGlzLmhlYWQuZGF0YTtcbiAgaWYgKHRoaXMubGVuZ3RoID09PSAxKSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO2Vsc2UgdGhpcy5oZWFkID0gdGhpcy5oZWFkLm5leHQ7XG4gIC0tdGhpcy5sZW5ndGg7XG4gIHJldHVybiByZXQ7XG59O1xuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtcbiAgdGhpcy5sZW5ndGggPSAwO1xufTtcblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuam9pbiA9IGZ1bmN0aW9uIChzKSB7XG4gIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICB2YXIgcCA9IHRoaXMuaGVhZDtcbiAgdmFyIHJldCA9ICcnICsgcC5kYXRhO1xuICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgIHJldCArPSBzICsgcC5kYXRhO1xuICB9cmV0dXJuIHJldDtcbn07XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLmNvbmNhdCA9IGZ1bmN0aW9uIChuKSB7XG4gIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGJ1ZmZlclNoaW0uYWxsb2MoMCk7XG4gIGlmICh0aGlzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHRoaXMuaGVhZC5kYXRhO1xuICB2YXIgcmV0ID0gYnVmZmVyU2hpbS5hbGxvY1Vuc2FmZShuID4+PiAwKTtcbiAgdmFyIHAgPSB0aGlzLmhlYWQ7XG4gIHZhciBpID0gMDtcbiAgd2hpbGUgKHApIHtcbiAgICBwLmRhdGEuY29weShyZXQsIGkpO1xuICAgIGkgKz0gcC5kYXRhLmxlbmd0aDtcbiAgICBwID0gcC5uZXh0O1xuICB9XG4gIHJldHVybiByZXQ7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvQnVmZmVyTGlzdC5qc1xuLy8gbW9kdWxlIGlkID0gMTQ0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9yZWFkYWJsZScpLlBhc3NUaHJvdWdoXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vcmVhZGFibGUtc3RyZWFtL3Bhc3N0aHJvdWdoLmpzXG4vLyBtb2R1bGUgaWQgPSAxNDVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL3JlYWRhYmxlJykuVHJhbnNmb3JtXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vcmVhZGFibGUtc3RyZWFtL3RyYW5zZm9ybS5qc1xuLy8gbW9kdWxlIGlkID0gMTQ2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV93cml0YWJsZS5qcycpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3JlYWRhYmxlLXN0cmVhbS93cml0YWJsZS1icm93c2VyLmpzXG4vLyBtb2R1bGUgaWQgPSAxNDdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiKGZ1bmN0aW9uIChnbG9iYWwsIHVuZGVmaW5lZCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgaWYgKGdsb2JhbC5zZXRJbW1lZGlhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBuZXh0SGFuZGxlID0gMTsgLy8gU3BlYyBzYXlzIGdyZWF0ZXIgdGhhbiB6ZXJvXG4gICAgdmFyIHRhc2tzQnlIYW5kbGUgPSB7fTtcbiAgICB2YXIgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgdmFyIGRvYyA9IGdsb2JhbC5kb2N1bWVudDtcbiAgICB2YXIgcmVnaXN0ZXJJbW1lZGlhdGU7XG5cbiAgICBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoY2FsbGJhY2spIHtcbiAgICAgIC8vIENhbGxiYWNrIGNhbiBlaXRoZXIgYmUgYSBmdW5jdGlvbiBvciBhIHN0cmluZ1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNhbGxiYWNrID0gbmV3IEZ1bmN0aW9uKFwiXCIgKyBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgICAvLyBDb3B5IGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMV07XG4gICAgICB9XG4gICAgICAvLyBTdG9yZSBhbmQgcmVnaXN0ZXIgdGhlIHRhc2tcbiAgICAgIHZhciB0YXNrID0geyBjYWxsYmFjazogY2FsbGJhY2ssIGFyZ3M6IGFyZ3MgfTtcbiAgICAgIHRhc2tzQnlIYW5kbGVbbmV4dEhhbmRsZV0gPSB0YXNrO1xuICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUobmV4dEhhbmRsZSk7XG4gICAgICByZXR1cm4gbmV4dEhhbmRsZSsrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGhhbmRsZSkge1xuICAgICAgICBkZWxldGUgdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bih0YXNrKSB7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IHRhc2suY2FsbGJhY2s7XG4gICAgICAgIHZhciBhcmdzID0gdGFzay5hcmdzO1xuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bklmUHJlc2VudChoYW5kbGUpIHtcbiAgICAgICAgLy8gRnJvbSB0aGUgc3BlYzogXCJXYWl0IHVudGlsIGFueSBpbnZvY2F0aW9ucyBvZiB0aGlzIGFsZ29yaXRobSBzdGFydGVkIGJlZm9yZSB0aGlzIG9uZSBoYXZlIGNvbXBsZXRlZC5cIlxuICAgICAgICAvLyBTbyBpZiB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBhIHRhc2ssIHdlJ2xsIG5lZWQgdG8gZGVsYXkgdGhpcyBpbnZvY2F0aW9uLlxuICAgICAgICBpZiAoY3VycmVudGx5UnVubmluZ0FUYXNrKSB7XG4gICAgICAgICAgICAvLyBEZWxheSBieSBkb2luZyBhIHNldFRpbWVvdXQuIHNldEltbWVkaWF0ZSB3YXMgdHJpZWQgaW5zdGVhZCwgYnV0IGluIEZpcmVmb3ggNyBpdCBnZW5lcmF0ZWQgYVxuICAgICAgICAgICAgLy8gXCJ0b28gbXVjaCByZWN1cnNpb25cIiBlcnJvci5cbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgICAgICAgICBpZiAodGFzaykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IHRydWU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcnVuKHRhc2spO1xuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW1tZWRpYXRlKGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7IHJ1bklmUHJlc2VudChoYW5kbGUpOyB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYW5Vc2VQb3N0TWVzc2FnZSgpIHtcbiAgICAgICAgLy8gVGhlIHRlc3QgYWdhaW5zdCBgaW1wb3J0U2NyaXB0c2AgcHJldmVudHMgdGhpcyBpbXBsZW1lbnRhdGlvbiBmcm9tIGJlaW5nIGluc3RhbGxlZCBpbnNpZGUgYSB3ZWIgd29ya2VyLFxuICAgICAgICAvLyB3aGVyZSBgZ2xvYmFsLnBvc3RNZXNzYWdlYCBtZWFucyBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQgYW5kIGNhbid0IGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS5cbiAgICAgICAgaWYgKGdsb2JhbC5wb3N0TWVzc2FnZSAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICAgICAgICAgIHZhciBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBvbGRPbk1lc3NhZ2UgPSBnbG9iYWwub25tZXNzYWdlO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSBmYWxzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoXCJcIiwgXCIqXCIpO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IG9sZE9uTWVzc2FnZTtcbiAgICAgICAgICAgIHJldHVybiBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIC8vIEluc3RhbGxzIGFuIGV2ZW50IGhhbmRsZXIgb24gYGdsb2JhbGAgZm9yIHRoZSBgbWVzc2FnZWAgZXZlbnQ6IHNlZVxuICAgICAgICAvLyAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0RPTS93aW5kb3cucG9zdE1lc3NhZ2VcbiAgICAgICAgLy8gKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9jb21tcy5odG1sI2Nyb3NzRG9jdW1lbnRNZXNzYWdlc1xuXG4gICAgICAgIHZhciBtZXNzYWdlUHJlZml4ID0gXCJzZXRJbW1lZGlhdGUkXCIgKyBNYXRoLnJhbmRvbSgpICsgXCIkXCI7XG4gICAgICAgIHZhciBvbkdsb2JhbE1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnNvdXJjZSA9PT0gZ2xvYmFsICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGV2ZW50LmRhdGEgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhLmluZGV4T2YobWVzc2FnZVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoK2V2ZW50LmRhdGEuc2xpY2UobWVzc2FnZVByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbC5hdHRhY2hFdmVudChcIm9ubWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShtZXNzYWdlUHJlZml4ICsgaGFuZGxlLCBcIipcIik7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBldmVudC5kYXRhO1xuICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSA8c2NyaXB0PiBlbGVtZW50OyBpdHMgcmVhZHlzdGF0ZWNoYW5nZSBldmVudCB3aWxsIGJlIGZpcmVkIGFzeW5jaHJvbm91c2x5IG9uY2UgaXQgaXMgaW5zZXJ0ZWRcbiAgICAgICAgICAgIC8vIGludG8gdGhlIGRvY3VtZW50LiBEbyBzbywgdGh1cyBxdWV1aW5nIHVwIHRoZSB0YXNrLiBSZW1lbWJlciB0byBjbGVhbiB1cCBvbmNlIGl0J3MgYmVlbiBjYWxsZWQuXG4gICAgICAgICAgICB2YXIgc2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgICAgICAgICBzY3JpcHQgPSBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSWYgc3VwcG9ydGVkLCB3ZSBzaG91bGQgYXR0YWNoIHRvIHRoZSBwcm90b3R5cGUgb2YgZ2xvYmFsLCBzaW5jZSB0aGF0IGlzIHdoZXJlIHNldFRpbWVvdXQgZXQgYWwuIGxpdmUuXG4gICAgdmFyIGF0dGFjaFRvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihnbG9iYWwpO1xuICAgIGF0dGFjaFRvID0gYXR0YWNoVG8gJiYgYXR0YWNoVG8uc2V0VGltZW91dCA/IGF0dGFjaFRvIDogZ2xvYmFsO1xuXG4gICAgLy8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBlLmcuIGJyb3dzZXJpZnkgZW52aXJvbm1lbnRzLlxuICAgIGlmICh7fS50b1N0cmluZy5jYWxsKGdsb2JhbC5wcm9jZXNzKSA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCIpIHtcbiAgICAgICAgLy8gRm9yIE5vZGUuanMgYmVmb3JlIDAuOVxuICAgICAgICBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChjYW5Vc2VQb3N0TWVzc2FnZSgpKSB7XG4gICAgICAgIC8vIEZvciBub24tSUUxMCBtb2Rlcm4gYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZ2xvYmFsLk1lc3NhZ2VDaGFubmVsKSB7XG4gICAgICAgIC8vIEZvciB3ZWIgd29ya2Vycywgd2hlcmUgc3VwcG9ydGVkXG4gICAgICAgIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGRvYyAmJiBcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiIGluIGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKSB7XG4gICAgICAgIC8vIEZvciBJRSA24oCTOFxuICAgICAgICBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igb2xkZXIgYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpO1xuICAgIH1cblxuICAgIGF0dGFjaFRvLnNldEltbWVkaWF0ZSA9IHNldEltbWVkaWF0ZTtcbiAgICBhdHRhY2hUby5jbGVhckltbWVkaWF0ZSA9IGNsZWFySW1tZWRpYXRlO1xufSh0eXBlb2Ygc2VsZiA9PT0gXCJ1bmRlZmluZWRcIiA/IHR5cGVvZiBnbG9iYWwgPT09IFwidW5kZWZpbmVkXCIgPyB0aGlzIDogZ2xvYmFsIDogc2VsZikpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanNcbi8vIG1vZHVsZSBpZCA9IDE0OFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxubW9kdWxlLmV4cG9ydHMgPSBTdHJlYW07XG5cbnZhciBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmluaGVyaXRzKFN0cmVhbSwgRUUpO1xuU3RyZWFtLlJlYWRhYmxlID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL3JlYWRhYmxlLmpzJyk7XG5TdHJlYW0uV3JpdGFibGUgPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0vd3JpdGFibGUuanMnKTtcblN0cmVhbS5EdXBsZXggPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0vZHVwbGV4LmpzJyk7XG5TdHJlYW0uVHJhbnNmb3JtID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL3RyYW5zZm9ybS5qcycpO1xuU3RyZWFtLlBhc3NUaHJvdWdoID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL3Bhc3N0aHJvdWdoLmpzJyk7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuNC54XG5TdHJlYW0uU3RyZWFtID0gU3RyZWFtO1xuXG5cblxuLy8gb2xkLXN0eWxlIHN0cmVhbXMuICBOb3RlIHRoYXQgdGhlIHBpcGUgbWV0aG9kICh0aGUgb25seSByZWxldmFudFxuLy8gcGFydCBvZiB0aGlzIGNsYXNzKSBpcyBvdmVycmlkZGVuIGluIHRoZSBSZWFkYWJsZSBjbGFzcy5cblxuZnVuY3Rpb24gU3RyZWFtKCkge1xuICBFRS5jYWxsKHRoaXMpO1xufVxuXG5TdHJlYW0ucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbihkZXN0LCBvcHRpb25zKSB7XG4gIHZhciBzb3VyY2UgPSB0aGlzO1xuXG4gIGZ1bmN0aW9uIG9uZGF0YShjaHVuaykge1xuICAgIGlmIChkZXN0LndyaXRhYmxlKSB7XG4gICAgICBpZiAoZmFsc2UgPT09IGRlc3Qud3JpdGUoY2h1bmspICYmIHNvdXJjZS5wYXVzZSkge1xuICAgICAgICBzb3VyY2UucGF1c2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzb3VyY2Uub24oJ2RhdGEnLCBvbmRhdGEpO1xuXG4gIGZ1bmN0aW9uIG9uZHJhaW4oKSB7XG4gICAgaWYgKHNvdXJjZS5yZWFkYWJsZSAmJiBzb3VyY2UucmVzdW1lKSB7XG4gICAgICBzb3VyY2UucmVzdW1lKCk7XG4gICAgfVxuICB9XG5cbiAgZGVzdC5vbignZHJhaW4nLCBvbmRyYWluKTtcblxuICAvLyBJZiB0aGUgJ2VuZCcgb3B0aW9uIGlzIG5vdCBzdXBwbGllZCwgZGVzdC5lbmQoKSB3aWxsIGJlIGNhbGxlZCB3aGVuXG4gIC8vIHNvdXJjZSBnZXRzIHRoZSAnZW5kJyBvciAnY2xvc2UnIGV2ZW50cy4gIE9ubHkgZGVzdC5lbmQoKSBvbmNlLlxuICBpZiAoIWRlc3QuX2lzU3RkaW8gJiYgKCFvcHRpb25zIHx8IG9wdGlvbnMuZW5kICE9PSBmYWxzZSkpIHtcbiAgICBzb3VyY2Uub24oJ2VuZCcsIG9uZW5kKTtcbiAgICBzb3VyY2Uub24oJ2Nsb3NlJywgb25jbG9zZSk7XG4gIH1cblxuICB2YXIgZGlkT25FbmQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgaWYgKGRpZE9uRW5kKSByZXR1cm47XG4gICAgZGlkT25FbmQgPSB0cnVlO1xuXG4gICAgZGVzdC5lbmQoKTtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBpZiAoZGlkT25FbmQpIHJldHVybjtcbiAgICBkaWRPbkVuZCA9IHRydWU7XG5cbiAgICBpZiAodHlwZW9mIGRlc3QuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgZGVzdC5kZXN0cm95KCk7XG4gIH1cblxuICAvLyBkb24ndCBsZWF2ZSBkYW5nbGluZyBwaXBlcyB3aGVuIHRoZXJlIGFyZSBlcnJvcnMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBjbGVhbnVwKCk7XG4gICAgaWYgKEVFLmxpc3RlbmVyQ291bnQodGhpcywgJ2Vycm9yJykgPT09IDApIHtcbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgc3RyZWFtIGVycm9yIGluIHBpcGUuXG4gICAgfVxuICB9XG5cbiAgc291cmNlLm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuICBkZXN0Lm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuXG4gIC8vIHJlbW92ZSBhbGwgdGhlIGV2ZW50IGxpc3RlbmVycyB0aGF0IHdlcmUgYWRkZWQuXG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25kYXRhKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pO1xuXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG5cbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIGNsZWFudXApO1xuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBjbGVhbnVwKTtcblxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgY2xlYW51cCk7XG4gIH1cblxuICBzb3VyY2Uub24oJ2VuZCcsIGNsZWFudXApO1xuICBzb3VyY2Uub24oJ2Nsb3NlJywgY2xlYW51cCk7XG5cbiAgZGVzdC5vbignY2xvc2UnLCBjbGVhbnVwKTtcblxuICBkZXN0LmVtaXQoJ3BpcGUnLCBzb3VyY2UpO1xuXG4gIC8vIEFsbG93IGZvciB1bml4LWxpa2UgdXNhZ2U6IEEucGlwZShCKS5waXBlKEMpXG4gIHJldHVybiBkZXN0O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9zdHJlYW0tYnJvd3NlcmlmeS9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMTQ5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQSBtaWRpIG5vdGUgbnVtYmVyIGlzIGEgbnVtYmVyIHJlcHJlc2VudGF0aW9uIG9mIGEgbm90ZSBwaXRjaC4gSXQgY2FuIGJlXG4gKiBpbnRlZ2VycyBzbyBpdCdzIGVxdWFsIHRlbXBlcmVkIHR1bmVkLCBvciBmbG9hdCB0byBpbmRpY2F0ZSBpdCdzIG5vdFxuICogdHVuZWQgaW50byBlcXVhbCB0ZW1lcGVyZWQgc2NhbGUuXG4gKlxuICogVGhpcyBtb2R1bGUgY29udGFpbnMgZnVuY3Rpb25zIHRvIGNvbnZlcnQgdG8gYW5kIGZyb20gbWlkaSBub3Rlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIG1pZGkgPSByZXF1aXJlKCd0b25hbC1taWRpJylcbiAqIG1pZGkudG9NaWRpKCdBNCcpIC8vID0+IDY5XG4gKiBtaWRpLm5vdGUoNjkpIC8vID0+ICdBNCdcbiAqIG1pZGkubm90ZSg2MSkgLy8gPT4gJ0RiNCdcbiAqIG1pZGkubm90ZSg2MSwgdHJ1ZSkgLy8gPT4gJ0MjNCdcbiAqXG4gKiBAbW9kdWxlIG1pZGlcbiAqL1xuXG5pbXBvcnQgeyBtaWRpIH0gZnJvbSAnbm90ZS1wYXJzZXInXG5cbi8qKlxuICogQ29udmVydCB0aGUgZ2l2ZW4gbm90ZSB0byBhIG1pZGkgbm90ZSBudW1iZXIuIElmIHlvdSBwYXNzIGEgbWlkaSBudW1iZXIgaXRcbiAqIHdpbGwgcmV0dXJuZWQgYXMgaXMuXG4gKlxuICogQHBhcmFtIHtBcnJheXxTdHJpbmd8TnVtYmVyfSBub3RlIC0gdGhlIG5vdGUgdG8gZ2V0IHRoZSBtaWRpIG51bWJlciBmcm9tXG4gKiBAcmV0dXJuIHtJbnRlZ2VyfSB0aGUgbWlkaSBudW1iZXIgb3IgbnVsbCBpZiBub3QgdmFsaWQgcGl0Y2hcbiAqIEBleGFtcGxlXG4gKiBtaWRpLnRvTWlkaSgnQzQnKSAvLyA9PiA2MFxuICogbWlkaS50b01pZGkoNjApIC8vID0+IDYwXG4gKiBtaWRpLnRvTWlkaSgnNjAnKSAvLyA9PiA2MFxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9NaWRpICh2YWwpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSAmJiB2YWwubGVuZ3RoID09PSAyKSByZXR1cm4gdmFsWzBdICogNyArIHZhbFsxXSAqIDEyICsgMTJcbiAgcmV0dXJuIG1pZGkodmFsKVxufVxuXG52YXIgRkxBVFMgPSAnQyBEYiBEIEViIEUgRiBHYiBHIEFiIEEgQmIgQicuc3BsaXQoJyAnKVxudmFyIFNIQVJQUyA9ICdDIEMjIEQgRCMgRSBGIEYjIEcgRyMgQSBBIyBCJy5zcGxpdCgnICcpXG5cbi8qKlxuICogR2l2ZW4gYSBtaWRpIG51bWJlciwgcmV0dXJucyBhIG5vdGUgbmFtZS4gVGhlIGFsdGVyZWQgbm90ZXMgd2lsbCBoYXZlXG4gKiBmbGF0cyB1bmxlc3MgZXhwbGljaXRseSBzZXQgd2l0aCB0aGUgb3B0aW9uYWwgYHVzZVNoYXJwc2AgcGFyYW1ldGVyLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtJbnRlZ2VyfSBtaWRpIC0gdGhlIG1pZGkgbm90ZSBudW1iZXJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gdXNlU2hhcnBzIC0gKE9wdGlvbmFsKSBzZXQgdG8gdHJ1ZSB0byB1c2Ugc2hhcnBzIGluc3RlYWQgb2YgZmxhdHNcbiAqIEByZXR1cm4ge1N0cmluZ30gdGhlIG5vdGUgbmFtZVxuICogQGV4YW1wbGVcbiAqIHZhciBtaWRpID0gcmVxdWlyZSgndG9uYWwtbWlkaScpXG4gKiBtaWRpLm5vdGUoNjEpIC8vID0+ICdEYjQnXG4gKiBtaWRpLm5vdGUoNjEsIHRydWUpIC8vID0+ICdDIzQnXG4gKiAvLyBpdCByb3VuZHMgdG8gbmVhcmVzdCBub3RlXG4gKiBtaWRpLm5vdGUoNjEuNykgLy8gPT4gJ0Q0J1xuICovXG5leHBvcnQgZnVuY3Rpb24gbm90ZSAobnVtLCBzaGFycHMpIHtcbiAgaWYgKG51bSA9PT0gdHJ1ZSB8fCBudW0gPT09IGZhbHNlKSByZXR1cm4gZnVuY3Rpb24gKG0pIHsgcmV0dXJuIG5vdGUobSwgbnVtKSB9XG4gIG51bSA9IE1hdGgucm91bmQobnVtKVxuICB2YXIgcGNzID0gc2hhcnBzID09PSB0cnVlID8gU0hBUlBTIDogRkxBVFNcbiAgdmFyIHBjID0gcGNzW251bSAlIDEyXVxuICB2YXIgbyA9IE1hdGguZmxvb3IobnVtIC8gMTIpIC0gMVxuICByZXR1cm4gcGMgKyBvXG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdG9uYWwtbWlkaS9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMTUwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIlxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlcHJlY2F0ZTtcblxuLyoqXG4gKiBNYXJrIHRoYXQgYSBtZXRob2Qgc2hvdWxkIG5vdCBiZSB1c2VkLlxuICogUmV0dXJucyBhIG1vZGlmaWVkIGZ1bmN0aW9uIHdoaWNoIHdhcm5zIG9uY2UgYnkgZGVmYXVsdC5cbiAqXG4gKiBJZiBgbG9jYWxTdG9yYWdlLm5vRGVwcmVjYXRpb24gPSB0cnVlYCBpcyBzZXQsIHRoZW4gaXQgaXMgYSBuby1vcC5cbiAqXG4gKiBJZiBgbG9jYWxTdG9yYWdlLnRocm93RGVwcmVjYXRpb24gPSB0cnVlYCBpcyBzZXQsIHRoZW4gZGVwcmVjYXRlZCBmdW5jdGlvbnNcbiAqIHdpbGwgdGhyb3cgYW4gRXJyb3Igd2hlbiBpbnZva2VkLlxuICpcbiAqIElmIGBsb2NhbFN0b3JhZ2UudHJhY2VEZXByZWNhdGlvbiA9IHRydWVgIGlzIHNldCwgdGhlbiBkZXByZWNhdGVkIGZ1bmN0aW9uc1xuICogd2lsbCBpbnZva2UgYGNvbnNvbGUudHJhY2UoKWAgaW5zdGVhZCBvZiBgY29uc29sZS5lcnJvcigpYC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIHRoZSBmdW5jdGlvbiB0byBkZXByZWNhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgLSB0aGUgc3RyaW5nIHRvIHByaW50IHRvIHRoZSBjb25zb2xlIHdoZW4gYGZuYCBpcyBpbnZva2VkXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IGEgbmV3IFwiZGVwcmVjYXRlZFwiIHZlcnNpb24gb2YgYGZuYFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBkZXByZWNhdGUgKGZuLCBtc2cpIHtcbiAgaWYgKGNvbmZpZygnbm9EZXByZWNhdGlvbicpKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgIGlmICghd2FybmVkKSB7XG4gICAgICBpZiAoY29uZmlnKCd0aHJvd0RlcHJlY2F0aW9uJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZygndHJhY2VEZXByZWNhdGlvbicpKSB7XG4gICAgICAgIGNvbnNvbGUudHJhY2UobXNnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2Fybihtc2cpO1xuICAgICAgfVxuICAgICAgd2FybmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gZGVwcmVjYXRlZDtcbn1cblxuLyoqXG4gKiBDaGVja3MgYGxvY2FsU3RvcmFnZWAgZm9yIGJvb2xlYW4gdmFsdWVzIGZvciB0aGUgZ2l2ZW4gYG5hbWVgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNvbmZpZyAobmFtZSkge1xuICAvLyBhY2Nlc3NpbmcgZ2xvYmFsLmxvY2FsU3RvcmFnZSBjYW4gdHJpZ2dlciBhIERPTUV4Y2VwdGlvbiBpbiBzYW5kYm94ZWQgaWZyYW1lc1xuICB0cnkge1xuICAgIGlmICghZ2xvYmFsLmxvY2FsU3RvcmFnZSkgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB2YWwgPSBnbG9iYWwubG9jYWxTdG9yYWdlW25hbWVdO1xuICBpZiAobnVsbCA9PSB2YWwpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIFN0cmluZyh2YWwpLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJztcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi91dGlsLWRlcHJlY2F0ZS9icm93c2VyLmpzXG4vLyBtb2R1bGUgaWQgPSAxNTFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICB9XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdXRpbC9+L2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IDE1MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQnVmZmVyKGFyZykge1xuICByZXR1cm4gYXJnICYmIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnXG4gICAgJiYgdHlwZW9mIGFyZy5jb3B5ID09PSAnZnVuY3Rpb24nXG4gICAgJiYgdHlwZW9mIGFyZy5maWxsID09PSAnZnVuY3Rpb24nXG4gICAgJiYgdHlwZW9mIGFyZy5yZWFkVUludDggPT09ICdmdW5jdGlvbic7XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3V0aWwvc3VwcG9ydC9pc0J1ZmZlckJyb3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IDE1M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIGZvcm1hdFJlZ0V4cCA9IC8lW3NkaiVdL2c7XG5leHBvcnRzLmZvcm1hdCA9IGZ1bmN0aW9uKGYpIHtcbiAgaWYgKCFpc1N0cmluZyhmKSkge1xuICAgIHZhciBvYmplY3RzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9iamVjdHMucHVzaChpbnNwZWN0KGFyZ3VtZW50c1tpXSkpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0cy5qb2luKCcgJyk7XG4gIH1cblxuICB2YXIgaSA9IDE7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBzdHIgPSBTdHJpbmcoZikucmVwbGFjZShmb3JtYXRSZWdFeHAsIGZ1bmN0aW9uKHgpIHtcbiAgICBpZiAoeCA9PT0gJyUlJykgcmV0dXJuICclJztcbiAgICBpZiAoaSA+PSBsZW4pIHJldHVybiB4O1xuICAgIHN3aXRjaCAoeCkge1xuICAgICAgY2FzZSAnJXMnOiByZXR1cm4gU3RyaW5nKGFyZ3NbaSsrXSk7XG4gICAgICBjYXNlICclZCc6IHJldHVybiBOdW1iZXIoYXJnc1tpKytdKTtcbiAgICAgIGNhc2UgJyVqJzpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJnc1tpKytdKTtcbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIHJldHVybiAnW0NpcmN1bGFyXSc7XG4gICAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgfSk7XG4gIGZvciAodmFyIHggPSBhcmdzW2ldOyBpIDwgbGVuOyB4ID0gYXJnc1srK2ldKSB7XG4gICAgaWYgKGlzTnVsbCh4KSB8fCAhaXNPYmplY3QoeCkpIHtcbiAgICAgIHN0ciArPSAnICcgKyB4O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgKz0gJyAnICsgaW5zcGVjdCh4KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn07XG5cblxuLy8gTWFyayB0aGF0IGEgbWV0aG9kIHNob3VsZCBub3QgYmUgdXNlZC5cbi8vIFJldHVybnMgYSBtb2RpZmllZCBmdW5jdGlvbiB3aGljaCB3YXJucyBvbmNlIGJ5IGRlZmF1bHQuXG4vLyBJZiAtLW5vLWRlcHJlY2F0aW9uIGlzIHNldCwgdGhlbiBpdCBpcyBhIG5vLW9wLlxuZXhwb3J0cy5kZXByZWNhdGUgPSBmdW5jdGlvbihmbiwgbXNnKSB7XG4gIC8vIEFsbG93IGZvciBkZXByZWNhdGluZyB0aGluZ3MgaW4gdGhlIHByb2Nlc3Mgb2Ygc3RhcnRpbmcgdXAuXG4gIGlmIChpc1VuZGVmaW5lZChnbG9iYWwucHJvY2VzcykpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZXhwb3J0cy5kZXByZWNhdGUoZm4sIG1zZykuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKHByb2Nlc3Mubm9EZXByZWNhdGlvbiA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gZGVwcmVjYXRlZCgpIHtcbiAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgaWYgKHByb2Nlc3MudGhyb3dEZXByZWNhdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy50cmFjZURlcHJlY2F0aW9uKSB7XG4gICAgICAgIGNvbnNvbGUudHJhY2UobXNnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobXNnKTtcbiAgICAgIH1cbiAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIGRlcHJlY2F0ZWQ7XG59O1xuXG5cbnZhciBkZWJ1Z3MgPSB7fTtcbnZhciBkZWJ1Z0Vudmlyb247XG5leHBvcnRzLmRlYnVnbG9nID0gZnVuY3Rpb24oc2V0KSB7XG4gIGlmIChpc1VuZGVmaW5lZChkZWJ1Z0Vudmlyb24pKVxuICAgIGRlYnVnRW52aXJvbiA9IHByb2Nlc3MuZW52Lk5PREVfREVCVUcgfHwgJyc7XG4gIHNldCA9IHNldC50b1VwcGVyQ2FzZSgpO1xuICBpZiAoIWRlYnVnc1tzZXRdKSB7XG4gICAgaWYgKG5ldyBSZWdFeHAoJ1xcXFxiJyArIHNldCArICdcXFxcYicsICdpJykudGVzdChkZWJ1Z0Vudmlyb24pKSB7XG4gICAgICB2YXIgcGlkID0gcHJvY2Vzcy5waWQ7XG4gICAgICBkZWJ1Z3Nbc2V0XSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbXNnID0gZXhwb3J0cy5mb3JtYXQuYXBwbHkoZXhwb3J0cywgYXJndW1lbnRzKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignJXMgJWQ6ICVzJywgc2V0LCBwaWQsIG1zZyk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1Z3Nbc2V0XSA9IGZ1bmN0aW9uKCkge307XG4gICAgfVxuICB9XG4gIHJldHVybiBkZWJ1Z3Nbc2V0XTtcbn07XG5cblxuLyoqXG4gKiBFY2hvcyB0aGUgdmFsdWUgb2YgYSB2YWx1ZS4gVHJ5cyB0byBwcmludCB0aGUgdmFsdWUgb3V0XG4gKiBpbiB0aGUgYmVzdCB3YXkgcG9zc2libGUgZ2l2ZW4gdGhlIGRpZmZlcmVudCB0eXBlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gcHJpbnQgb3V0LlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uYWwgb3B0aW9ucyBvYmplY3QgdGhhdCBhbHRlcnMgdGhlIG91dHB1dC5cbiAqL1xuLyogbGVnYWN5OiBvYmosIHNob3dIaWRkZW4sIGRlcHRoLCBjb2xvcnMqL1xuZnVuY3Rpb24gaW5zcGVjdChvYmosIG9wdHMpIHtcbiAgLy8gZGVmYXVsdCBvcHRpb25zXG4gIHZhciBjdHggPSB7XG4gICAgc2VlbjogW10sXG4gICAgc3R5bGl6ZTogc3R5bGl6ZU5vQ29sb3JcbiAgfTtcbiAgLy8gbGVnYWN5Li4uXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDMpIGN0eC5kZXB0aCA9IGFyZ3VtZW50c1syXTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gNCkgY3R4LmNvbG9ycyA9IGFyZ3VtZW50c1szXTtcbiAgaWYgKGlzQm9vbGVhbihvcHRzKSkge1xuICAgIC8vIGxlZ2FjeS4uLlxuICAgIGN0eC5zaG93SGlkZGVuID0gb3B0cztcbiAgfSBlbHNlIGlmIChvcHRzKSB7XG4gICAgLy8gZ290IGFuIFwib3B0aW9uc1wiIG9iamVjdFxuICAgIGV4cG9ydHMuX2V4dGVuZChjdHgsIG9wdHMpO1xuICB9XG4gIC8vIHNldCBkZWZhdWx0IG9wdGlvbnNcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5zaG93SGlkZGVuKSkgY3R4LnNob3dIaWRkZW4gPSBmYWxzZTtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5kZXB0aCkpIGN0eC5kZXB0aCA9IDI7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguY29sb3JzKSkgY3R4LmNvbG9ycyA9IGZhbHNlO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmN1c3RvbUluc3BlY3QpKSBjdHguY3VzdG9tSW5zcGVjdCA9IHRydWU7XG4gIGlmIChjdHguY29sb3JzKSBjdHguc3R5bGl6ZSA9IHN0eWxpemVXaXRoQ29sb3I7XG4gIHJldHVybiBmb3JtYXRWYWx1ZShjdHgsIG9iaiwgY3R4LmRlcHRoKTtcbn1cbmV4cG9ydHMuaW5zcGVjdCA9IGluc3BlY3Q7XG5cblxuLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BTlNJX2VzY2FwZV9jb2RlI2dyYXBoaWNzXG5pbnNwZWN0LmNvbG9ycyA9IHtcbiAgJ2JvbGQnIDogWzEsIDIyXSxcbiAgJ2l0YWxpYycgOiBbMywgMjNdLFxuICAndW5kZXJsaW5lJyA6IFs0LCAyNF0sXG4gICdpbnZlcnNlJyA6IFs3LCAyN10sXG4gICd3aGl0ZScgOiBbMzcsIDM5XSxcbiAgJ2dyZXknIDogWzkwLCAzOV0sXG4gICdibGFjaycgOiBbMzAsIDM5XSxcbiAgJ2JsdWUnIDogWzM0LCAzOV0sXG4gICdjeWFuJyA6IFszNiwgMzldLFxuICAnZ3JlZW4nIDogWzMyLCAzOV0sXG4gICdtYWdlbnRhJyA6IFszNSwgMzldLFxuICAncmVkJyA6IFszMSwgMzldLFxuICAneWVsbG93JyA6IFszMywgMzldXG59O1xuXG4vLyBEb24ndCB1c2UgJ2JsdWUnIG5vdCB2aXNpYmxlIG9uIGNtZC5leGVcbmluc3BlY3Quc3R5bGVzID0ge1xuICAnc3BlY2lhbCc6ICdjeWFuJyxcbiAgJ251bWJlcic6ICd5ZWxsb3cnLFxuICAnYm9vbGVhbic6ICd5ZWxsb3cnLFxuICAndW5kZWZpbmVkJzogJ2dyZXknLFxuICAnbnVsbCc6ICdib2xkJyxcbiAgJ3N0cmluZyc6ICdncmVlbicsXG4gICdkYXRlJzogJ21hZ2VudGEnLFxuICAvLyBcIm5hbWVcIjogaW50ZW50aW9uYWxseSBub3Qgc3R5bGluZ1xuICAncmVnZXhwJzogJ3JlZCdcbn07XG5cblxuZnVuY3Rpb24gc3R5bGl6ZVdpdGhDb2xvcihzdHIsIHN0eWxlVHlwZSkge1xuICB2YXIgc3R5bGUgPSBpbnNwZWN0LnN0eWxlc1tzdHlsZVR5cGVdO1xuXG4gIGlmIChzdHlsZSkge1xuICAgIHJldHVybiAnXFx1MDAxYlsnICsgaW5zcGVjdC5jb2xvcnNbc3R5bGVdWzBdICsgJ20nICsgc3RyICtcbiAgICAgICAgICAgJ1xcdTAwMWJbJyArIGluc3BlY3QuY29sb3JzW3N0eWxlXVsxXSArICdtJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG59XG5cblxuZnVuY3Rpb24gc3R5bGl6ZU5vQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgcmV0dXJuIHN0cjtcbn1cblxuXG5mdW5jdGlvbiBhcnJheVRvSGFzaChhcnJheSkge1xuICB2YXIgaGFzaCA9IHt9O1xuXG4gIGFycmF5LmZvckVhY2goZnVuY3Rpb24odmFsLCBpZHgpIHtcbiAgICBoYXNoW3ZhbF0gPSB0cnVlO1xuICB9KTtcblxuICByZXR1cm4gaGFzaDtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRWYWx1ZShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMpIHtcbiAgLy8gUHJvdmlkZSBhIGhvb2sgZm9yIHVzZXItc3BlY2lmaWVkIGluc3BlY3QgZnVuY3Rpb25zLlxuICAvLyBDaGVjayB0aGF0IHZhbHVlIGlzIGFuIG9iamVjdCB3aXRoIGFuIGluc3BlY3QgZnVuY3Rpb24gb24gaXRcbiAgaWYgKGN0eC5jdXN0b21JbnNwZWN0ICYmXG4gICAgICB2YWx1ZSAmJlxuICAgICAgaXNGdW5jdGlvbih2YWx1ZS5pbnNwZWN0KSAmJlxuICAgICAgLy8gRmlsdGVyIG91dCB0aGUgdXRpbCBtb2R1bGUsIGl0J3MgaW5zcGVjdCBmdW5jdGlvbiBpcyBzcGVjaWFsXG4gICAgICB2YWx1ZS5pbnNwZWN0ICE9PSBleHBvcnRzLmluc3BlY3QgJiZcbiAgICAgIC8vIEFsc28gZmlsdGVyIG91dCBhbnkgcHJvdG90eXBlIG9iamVjdHMgdXNpbmcgdGhlIGNpcmN1bGFyIGNoZWNrLlxuICAgICAgISh2YWx1ZS5jb25zdHJ1Y3RvciAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgPT09IHZhbHVlKSkge1xuICAgIHZhciByZXQgPSB2YWx1ZS5pbnNwZWN0KHJlY3Vyc2VUaW1lcywgY3R4KTtcbiAgICBpZiAoIWlzU3RyaW5nKHJldCkpIHtcbiAgICAgIHJldCA9IGZvcm1hdFZhbHVlKGN0eCwgcmV0LCByZWN1cnNlVGltZXMpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLy8gUHJpbWl0aXZlIHR5cGVzIGNhbm5vdCBoYXZlIHByb3BlcnRpZXNcbiAgdmFyIHByaW1pdGl2ZSA9IGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKTtcbiAgaWYgKHByaW1pdGl2ZSkge1xuICAgIHJldHVybiBwcmltaXRpdmU7XG4gIH1cblxuICAvLyBMb29rIHVwIHRoZSBrZXlzIG9mIHRoZSBvYmplY3QuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpO1xuICB2YXIgdmlzaWJsZUtleXMgPSBhcnJheVRvSGFzaChrZXlzKTtcblxuICBpZiAoY3R4LnNob3dIaWRkZW4pIHtcbiAgICBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUpO1xuICB9XG5cbiAgLy8gSUUgZG9lc24ndCBtYWtlIGVycm9yIGZpZWxkcyBub24tZW51bWVyYWJsZVxuICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvZHd3NTJzYnQodj12cy45NCkuYXNweFxuICBpZiAoaXNFcnJvcih2YWx1ZSlcbiAgICAgICYmIChrZXlzLmluZGV4T2YoJ21lc3NhZ2UnKSA+PSAwIHx8IGtleXMuaW5kZXhPZignZGVzY3JpcHRpb24nKSA+PSAwKSkge1xuICAgIHJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gIH1cblxuICAvLyBTb21lIHR5cGUgb2Ygb2JqZWN0IHdpdGhvdXQgcHJvcGVydGllcyBjYW4gYmUgc2hvcnRjdXR0ZWQuXG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgdmFyIG5hbWUgPSB2YWx1ZS5uYW1lID8gJzogJyArIHZhbHVlLm5hbWUgOiAnJztcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZSgnW0Z1bmN0aW9uJyArIG5hbWUgKyAnXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICAgIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAncmVnZXhwJyk7XG4gICAgfVxuICAgIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdkYXRlJyk7XG4gICAgfVxuICAgIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgYmFzZSA9ICcnLCBhcnJheSA9IGZhbHNlLCBicmFjZXMgPSBbJ3snLCAnfSddO1xuXG4gIC8vIE1ha2UgQXJyYXkgc2F5IHRoYXQgdGhleSBhcmUgQXJyYXlcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgYXJyYXkgPSB0cnVlO1xuICAgIGJyYWNlcyA9IFsnWycsICddJ107XG4gIH1cblxuICAvLyBNYWtlIGZ1bmN0aW9ucyBzYXkgdGhhdCB0aGV5IGFyZSBmdW5jdGlvbnNcbiAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgdmFyIG4gPSB2YWx1ZS5uYW1lID8gJzogJyArIHZhbHVlLm5hbWUgOiAnJztcbiAgICBiYXNlID0gJyBbRnVuY3Rpb24nICsgbiArICddJztcbiAgfVxuXG4gIC8vIE1ha2UgUmVnRXhwcyBzYXkgdGhhdCB0aGV5IGFyZSBSZWdFeHBzXG4gIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgfVxuXG4gIC8vIE1ha2UgZGF0ZXMgd2l0aCBwcm9wZXJ0aWVzIGZpcnN0IHNheSB0aGUgZGF0ZVxuICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgfVxuXG4gIC8vIE1ha2UgZXJyb3Igd2l0aCBtZXNzYWdlIGZpcnN0IHNheSB0aGUgZXJyb3JcbiAgaWYgKGlzRXJyb3IodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCAmJiAoIWFycmF5IHx8IHZhbHVlLmxlbmd0aCA9PSAwKSkge1xuICAgIHJldHVybiBicmFjZXNbMF0gKyBiYXNlICsgYnJhY2VzWzFdO1xuICB9XG5cbiAgaWYgKHJlY3Vyc2VUaW1lcyA8IDApIHtcbiAgICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ3JlZ2V4cCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ1tPYmplY3RdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cblxuICBjdHguc2Vlbi5wdXNoKHZhbHVlKTtcblxuICB2YXIgb3V0cHV0O1xuICBpZiAoYXJyYXkpIHtcbiAgICBvdXRwdXQgPSBmb3JtYXRBcnJheShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXlzKTtcbiAgfSBlbHNlIHtcbiAgICBvdXRwdXQgPSBrZXlzLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KTtcbiAgICB9KTtcbiAgfVxuXG4gIGN0eC5zZWVuLnBvcCgpO1xuXG4gIHJldHVybiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsIGJhc2UsIGJyYWNlcyk7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0UHJpbWl0aXZlKGN0eCwgdmFsdWUpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ3VuZGVmaW5lZCcsICd1bmRlZmluZWQnKTtcbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHZhciBzaW1wbGUgPSAnXFwnJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKS5yZXBsYWNlKC9eXCJ8XCIkL2csICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKSArICdcXCcnO1xuICAgIHJldHVybiBjdHguc3R5bGl6ZShzaW1wbGUsICdzdHJpbmcnKTtcbiAgfVxuICBpZiAoaXNOdW1iZXIodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnJyArIHZhbHVlLCAnbnVtYmVyJyk7XG4gIGlmIChpc0Jvb2xlYW4odmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnJyArIHZhbHVlLCAnYm9vbGVhbicpO1xuICAvLyBGb3Igc29tZSByZWFzb24gdHlwZW9mIG51bGwgaXMgXCJvYmplY3RcIiwgc28gc3BlY2lhbCBjYXNlIGhlcmUuXG4gIGlmIChpc051bGwodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnbnVsbCcsICdudWxsJyk7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0RXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuICdbJyArIEVycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSArICddJztcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRBcnJheShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXlzKSB7XG4gIHZhciBvdXRwdXQgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkodmFsdWUsIFN0cmluZyhpKSkpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsXG4gICAgICAgICAgU3RyaW5nKGkpLCB0cnVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dC5wdXNoKCcnKTtcbiAgICB9XG4gIH1cbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgIGlmICgha2V5Lm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgb3V0cHV0LnB1c2goZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cyxcbiAgICAgICAgICBrZXksIHRydWUpKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3V0cHV0O1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgYXJyYXkpIHtcbiAgdmFyIG5hbWUsIHN0ciwgZGVzYztcbiAgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodmFsdWUsIGtleSkgfHwgeyB2YWx1ZTogdmFsdWVba2V5XSB9O1xuICBpZiAoZGVzYy5nZXQpIHtcbiAgICBpZiAoZGVzYy5zZXQpIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbR2V0dGVyL1NldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoZGVzYy5zZXQpIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbU2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG4gIGlmICghaGFzT3duUHJvcGVydHkodmlzaWJsZUtleXMsIGtleSkpIHtcbiAgICBuYW1lID0gJ1snICsga2V5ICsgJ10nO1xuICB9XG4gIGlmICghc3RyKSB7XG4gICAgaWYgKGN0eC5zZWVuLmluZGV4T2YoZGVzYy52YWx1ZSkgPCAwKSB7XG4gICAgICBpZiAoaXNOdWxsKHJlY3Vyc2VUaW1lcykpIHtcbiAgICAgICAgc3RyID0gZm9ybWF0VmFsdWUoY3R4LCBkZXNjLnZhbHVlLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgcmVjdXJzZVRpbWVzIC0gMSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyLmluZGV4T2YoJ1xcbicpID4gLTEpIHtcbiAgICAgICAgaWYgKGFycmF5KSB7XG4gICAgICAgICAgc3RyID0gc3RyLnNwbGl0KCdcXG4nKS5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICcgICcgKyBsaW5lO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpLnN1YnN0cigyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHIgPSAnXFxuJyArIHN0ci5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAgJyArIGxpbmU7XG4gICAgICAgICAgfSkuam9pbignXFxuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tDaXJjdWxhcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuICBpZiAoaXNVbmRlZmluZWQobmFtZSkpIHtcbiAgICBpZiAoYXJyYXkgJiYga2V5Lm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgbmFtZSA9IEpTT04uc3RyaW5naWZ5KCcnICsga2V5KTtcbiAgICBpZiAobmFtZS5tYXRjaCgvXlwiKFthLXpBLVpfXVthLXpBLVpfMC05XSopXCIkLykpIHtcbiAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cigxLCBuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgbmFtZSA9IGN0eC5zdHlsaXplKG5hbWUsICduYW1lJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKVxuICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFwiL2csICdcIicpXG4gICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oXlwifFwiJCkvZywgXCInXCIpO1xuICAgICAgbmFtZSA9IGN0eC5zdHlsaXplKG5hbWUsICdzdHJpbmcnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmFtZSArICc6ICcgKyBzdHI7XG59XG5cblxuZnVuY3Rpb24gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LCBiYXNlLCBicmFjZXMpIHtcbiAgdmFyIG51bUxpbmVzRXN0ID0gMDtcbiAgdmFyIGxlbmd0aCA9IG91dHB1dC5yZWR1Y2UoZnVuY3Rpb24ocHJldiwgY3VyKSB7XG4gICAgbnVtTGluZXNFc3QrKztcbiAgICBpZiAoY3VyLmluZGV4T2YoJ1xcbicpID49IDApIG51bUxpbmVzRXN0Kys7XG4gICAgcmV0dXJuIHByZXYgKyBjdXIucmVwbGFjZSgvXFx1MDAxYlxcW1xcZFxcZD9tL2csICcnKS5sZW5ndGggKyAxO1xuICB9LCAwKTtcblxuICBpZiAobGVuZ3RoID4gNjApIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICtcbiAgICAgICAgICAgKGJhc2UgPT09ICcnID8gJycgOiBiYXNlICsgJ1xcbiAnKSArXG4gICAgICAgICAgICcgJyArXG4gICAgICAgICAgIG91dHB1dC5qb2luKCcsXFxuICAnKSArXG4gICAgICAgICAgICcgJyArXG4gICAgICAgICAgIGJyYWNlc1sxXTtcbiAgfVxuXG4gIHJldHVybiBicmFjZXNbMF0gKyBiYXNlICsgJyAnICsgb3V0cHV0LmpvaW4oJywgJykgKyAnICcgKyBicmFjZXNbMV07XG59XG5cblxuLy8gTk9URTogVGhlc2UgdHlwZSBjaGVja2luZyBmdW5jdGlvbnMgaW50ZW50aW9uYWxseSBkb24ndCB1c2UgYGluc3RhbmNlb2ZgXG4vLyBiZWNhdXNlIGl0IGlzIGZyYWdpbGUgYW5kIGNhbiBiZSBlYXNpbHkgZmFrZWQgd2l0aCBgT2JqZWN0LmNyZWF0ZSgpYC5cbmZ1bmN0aW9uIGlzQXJyYXkoYXIpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXIpO1xufVxuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcblxuZnVuY3Rpb24gaXNCb29sZWFuKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nO1xufVxuZXhwb3J0cy5pc0Jvb2xlYW4gPSBpc0Jvb2xlYW47XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsID0gaXNOdWxsO1xuXG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGxPclVuZGVmaW5lZCA9IGlzTnVsbE9yVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuZXhwb3J0cy5pc051bWJlciA9IGlzTnVtYmVyO1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnO1xufVxuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuXG5mdW5jdGlvbiBpc1N5bWJvbChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnO1xufVxuZXhwb3J0cy5pc1N5bWJvbCA9IGlzU3ltYm9sO1xuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gdm9pZCAwO1xufVxuZXhwb3J0cy5pc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc1JlZ0V4cChyZSkge1xuICByZXR1cm4gaXNPYmplY3QocmUpICYmIG9iamVjdFRvU3RyaW5nKHJlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5leHBvcnRzLmlzUmVnRXhwID0gaXNSZWdFeHA7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuXG5mdW5jdGlvbiBpc0RhdGUoZCkge1xuICByZXR1cm4gaXNPYmplY3QoZCkgJiYgb2JqZWN0VG9TdHJpbmcoZCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cbmV4cG9ydHMuaXNEYXRlID0gaXNEYXRlO1xuXG5mdW5jdGlvbiBpc0Vycm9yKGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGUpICYmXG4gICAgICAob2JqZWN0VG9TdHJpbmcoZSkgPT09ICdbb2JqZWN0IEVycm9yXScgfHwgZSBpbnN0YW5jZW9mIEVycm9yKTtcbn1cbmV4cG9ydHMuaXNFcnJvciA9IGlzRXJyb3I7XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcblxuZnVuY3Rpb24gaXNQcmltaXRpdmUoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGwgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3ltYm9sJyB8fCAgLy8gRVM2IHN5bWJvbFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3VuZGVmaW5lZCc7XG59XG5leHBvcnRzLmlzUHJpbWl0aXZlID0gaXNQcmltaXRpdmU7XG5cbmV4cG9ydHMuaXNCdWZmZXIgPSByZXF1aXJlKCcuL3N1cHBvcnQvaXNCdWZmZXInKTtcblxuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuXG5cbmZ1bmN0aW9uIHBhZChuKSB7XG4gIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuLnRvU3RyaW5nKDEwKSA6IG4udG9TdHJpbmcoMTApO1xufVxuXG5cbnZhciBtb250aHMgPSBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJyxcbiAgICAgICAgICAgICAgJ09jdCcsICdOb3YnLCAnRGVjJ107XG5cbi8vIDI2IEZlYiAxNjoxOTozNFxuZnVuY3Rpb24gdGltZXN0YW1wKCkge1xuICB2YXIgZCA9IG5ldyBEYXRlKCk7XG4gIHZhciB0aW1lID0gW3BhZChkLmdldEhvdXJzKCkpLFxuICAgICAgICAgICAgICBwYWQoZC5nZXRNaW51dGVzKCkpLFxuICAgICAgICAgICAgICBwYWQoZC5nZXRTZWNvbmRzKCkpXS5qb2luKCc6Jyk7XG4gIHJldHVybiBbZC5nZXREYXRlKCksIG1vbnRoc1tkLmdldE1vbnRoKCldLCB0aW1lXS5qb2luKCcgJyk7XG59XG5cblxuLy8gbG9nIGlzIGp1c3QgYSB0aGluIHdyYXBwZXIgdG8gY29uc29sZS5sb2cgdGhhdCBwcmVwZW5kcyBhIHRpbWVzdGFtcFxuZXhwb3J0cy5sb2cgPSBmdW5jdGlvbigpIHtcbiAgY29uc29sZS5sb2coJyVzIC0gJXMnLCB0aW1lc3RhbXAoKSwgZXhwb3J0cy5mb3JtYXQuYXBwbHkoZXhwb3J0cywgYXJndW1lbnRzKSk7XG59O1xuXG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyLlxuICpcbiAqIFRoZSBGdW5jdGlvbi5wcm90b3R5cGUuaW5oZXJpdHMgZnJvbSBsYW5nLmpzIHJld3JpdHRlbiBhcyBhIHN0YW5kYWxvbmVcbiAqIGZ1bmN0aW9uIChub3Qgb24gRnVuY3Rpb24ucHJvdG90eXBlKS4gTk9URTogSWYgdGhpcyBmaWxlIGlzIHRvIGJlIGxvYWRlZFxuICogZHVyaW5nIGJvb3RzdHJhcHBpbmcgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSByZXdyaXR0ZW4gdXNpbmcgc29tZSBuYXRpdmVcbiAqIGZ1bmN0aW9ucyBhcyBwcm90b3R5cGUgc2V0dXAgdXNpbmcgbm9ybWFsIEphdmFTY3JpcHQgZG9lcyBub3Qgd29yayBhc1xuICogZXhwZWN0ZWQgZHVyaW5nIGJvb3RzdHJhcHBpbmcgKHNlZSBtaXJyb3IuanMgaW4gcjExNDkwMykuXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY3RvciBDb25zdHJ1Y3RvciBmdW5jdGlvbiB3aGljaCBuZWVkcyB0byBpbmhlcml0IHRoZVxuICogICAgIHByb3RvdHlwZS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ3RvciBDb25zdHJ1Y3RvciBmdW5jdGlvbiB0byBpbmhlcml0IHByb3RvdHlwZSBmcm9tLlxuICovXG5leHBvcnRzLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxuZXhwb3J0cy5fZXh0ZW5kID0gZnVuY3Rpb24ob3JpZ2luLCBhZGQpIHtcbiAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgYWRkIGlzbid0IGFuIG9iamVjdFxuICBpZiAoIWFkZCB8fCAhaXNPYmplY3QoYWRkKSkgcmV0dXJuIG9yaWdpbjtcblxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGFkZCk7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICBvcmlnaW5ba2V5c1tpXV0gPSBhZGRba2V5c1tpXV07XG4gIH1cbiAgcmV0dXJuIG9yaWdpbjtcbn07XG5cbmZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdXRpbC91dGlsLmpzXG4vLyBtb2R1bGUgaWQgPSAxNTRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLypcblxuV2ViTWlkaSB2Mi4yLjBcblxuV2ViTWlkaS5qcyBoZWxwcyB5b3UgdGFtZSB0aGUgV2ViIE1JREkgQVBJLiBTZW5kIGFuZCByZWNlaXZlIE1JREkgbWVzc2FnZXMgd2l0aCBlYXNlLiBDb250cm9sIGluc3RydW1lbnRzIHdpdGggdXNlci1mcmllbmRseSBmdW5jdGlvbnMgKHBsYXlOb3RlLCBzZW5kUGl0Y2hCZW5kLCBldGMuKS4gUmVhY3QgdG8gTUlESSBpbnB1dCB3aXRoIHNpbXBsZSBldmVudCBsaXN0ZW5lcnMgKG5vdGVvbiwgcGl0Y2hiZW5kLCBjb250cm9sY2hhbmdlLCBldGMuKS5cbmh0dHBzOi8vZ2l0aHViLmNvbS9kamlwY28vd2VibWlkaVxuXG5cblRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG5Db3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwgSmVhbi1QaGlsaXBwZSBDw7R0w6lcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZFxuYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbixcbmluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsXG5zdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWxcbnBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUXG5OT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFU1xuT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG5DT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4qL1xuXG4hZnVuY3Rpb24oc2NvcGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIFdlYk1pZGkoKXtpZihXZWJNaWRpLnByb3RvdHlwZS5fc2luZ2xldG9uKXRocm93IG5ldyBFcnJvcihcIldlYk1pZGkgaXMgYSBzaW5nbGV0b24sIGl0IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHkuXCIpO1dlYk1pZGkucHJvdG90eXBlLl9zaW5nbGV0b249dGhpcyx0aGlzLl9pbnB1dHM9W10sdGhpcy5fb3V0cHV0cz1bXSx0aGlzLl91c2VySGFuZGxlcnM9e30sdGhpcy5fc3RhdGVDaGFuZ2VRdWV1ZT1bXSx0aGlzLl9wcm9jZXNzaW5nU3RhdGVDaGFuZ2U9ITEsdGhpcy5fbWlkaUludGVyZmFjZUV2ZW50cz1bXCJjb25uZWN0ZWRcIixcImRpc2Nvbm5lY3RlZFwiXSx0aGlzLl9ub3Rlcz1bXCJDXCIsXCJDI1wiLFwiRFwiLFwiRCNcIixcIkVcIixcIkZcIixcIkYjXCIsXCJHXCIsXCJHI1wiLFwiQVwiLFwiQSNcIixcIkJcIl0sdGhpcy5fc2VtaXRvbmVzPXtDOjAsRDoyLEU6NCxGOjUsRzo3LEE6OSxCOjExfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtNSURJX1NZU1RFTV9NRVNTQUdFUzp7dmFsdWU6e3N5c2V4OjI0MCx0aW1lY29kZToyNDEsc29uZ3Bvc2l0aW9uOjI0Mixzb25nc2VsZWN0OjI0Myx0dW5pbmdyZXF1ZXN0OjI0NixzeXNleGVuZDoyNDcsY2xvY2s6MjQ4LHN0YXJ0OjI1MCxcImNvbnRpbnVlXCI6MjUxLHN0b3A6MjUyLGFjdGl2ZXNlbnNpbmc6MjU0LHJlc2V0OjI1NSxtaWRpbWVzc2FnZTowLHVua25vd25zeXN0ZW1tZXNzYWdlOi0xfSx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0sTUlESV9DSEFOTkVMX01FU1NBR0VTOnt2YWx1ZTp7bm90ZW9mZjo4LG5vdGVvbjo5LGtleWFmdGVydG91Y2g6MTAsY29udHJvbGNoYW5nZToxMSxjaGFubmVsbW9kZToxMSxwcm9ncmFtY2hhbmdlOjEyLGNoYW5uZWxhZnRlcnRvdWNoOjEzLHBpdGNoYmVuZDoxNH0sd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9LE1JRElfUkVHSVNURVJFRF9QQVJBTUVURVI6e3ZhbHVlOntwaXRjaGJlbmRyYW5nZTpbMCwwXSxjaGFubmVsZmluZXR1bmluZzpbMCwxXSxjaGFubmVsY29hcnNldHVuaW5nOlswLDJdLHR1bmluZ3Byb2dyYW06WzAsM10sdHVuaW5nYmFuazpbMCw0XSxtb2R1bGF0aW9ucmFuZ2U6WzAsNV0sYXppbXV0aGFuZ2xlOls2MSwwXSxlbGV2YXRpb25hbmdsZTpbNjEsMV0sZ2FpbjpbNjEsMl0sZGlzdGFuY2VyYXRpbzpbNjEsM10sbWF4aW11bWRpc3RhbmNlOls2MSw0XSxtYXhpbXVtZGlzdGFuY2VnYWluOls2MSw1XSxyZWZlcmVuY2VkaXN0YW5jZXJhdGlvOls2MSw2XSxwYW5zcHJlYWRhbmdsZTpbNjEsN10scm9sbGFuZ2xlOls2MSw4XX0sd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9LE1JRElfQ09OVFJPTF9DSEFOR0VfTUVTU0FHRVM6e3ZhbHVlOntiYW5rc2VsZWN0Y29hcnNlOjAsbW9kdWxhdGlvbndoZWVsY29hcnNlOjEsYnJlYXRoY29udHJvbGxlcmNvYXJzZToyLGZvb3Rjb250cm9sbGVyY29hcnNlOjQscG9ydGFtZW50b3RpbWVjb2Fyc2U6NSxkYXRhZW50cnljb2Fyc2U6Nix2b2x1bWVjb2Fyc2U6NyxiYWxhbmNlY29hcnNlOjgscGFuY29hcnNlOjEwLGV4cHJlc3Npb25jb2Fyc2U6MTEsZWZmZWN0Y29udHJvbDFjb2Fyc2U6MTIsZWZmZWN0Y29udHJvbDJjb2Fyc2U6MTMsZ2VuZXJhbHB1cnBvc2VzbGlkZXIxOjE2LGdlbmVyYWxwdXJwb3Nlc2xpZGVyMjoxNyxnZW5lcmFscHVycG9zZXNsaWRlcjM6MTgsZ2VuZXJhbHB1cnBvc2VzbGlkZXI0OjE5LGJhbmtzZWxlY3RmaW5lOjMyLG1vZHVsYXRpb253aGVlbGZpbmU6MzMsYnJlYXRoY29udHJvbGxlcmZpbmU6MzQsZm9vdGNvbnRyb2xsZXJmaW5lOjM2LHBvcnRhbWVudG90aW1lZmluZTozNyxkYXRhZW50cnlmaW5lOjM4LHZvbHVtZWZpbmU6MzksYmFsYW5jZWZpbmU6NDAscGFuZmluZTo0MixleHByZXNzaW9uZmluZTo0MyxlZmZlY3Rjb250cm9sMWZpbmU6NDQsZWZmZWN0Y29udHJvbDJmaW5lOjQ1LGhvbGRwZWRhbDo2NCxwb3J0YW1lbnRvOjY1LHN1c3RlbnV0b3BlZGFsOjY2LHNvZnRwZWRhbDo2NyxsZWdhdG9wZWRhbDo2OCxob2xkMnBlZGFsOjY5LHNvdW5kdmFyaWF0aW9uOjcwLHJlc29uYW5jZTo3MSxzb3VuZHJlbGVhc2V0aW1lOjcyLHNvdW5kYXR0YWNrdGltZTo3MyxicmlnaHRuZXNzOjc0LHNvdW5kY29udHJvbDY6NzUsc291bmRjb250cm9sNzo3Nixzb3VuZGNvbnRyb2w4Ojc3LHNvdW5kY29udHJvbDk6Nzgsc291bmRjb250cm9sMTA6NzksZ2VuZXJhbHB1cnBvc2VidXR0b24xOjgwLGdlbmVyYWxwdXJwb3NlYnV0dG9uMjo4MSxnZW5lcmFscHVycG9zZWJ1dHRvbjM6ODIsZ2VuZXJhbHB1cnBvc2VidXR0b240OjgzLHJldmVyYmxldmVsOjkxLHRyZW1vbG9sZXZlbDo5MixjaG9ydXNsZXZlbDo5MyxjZWxlc3RlbGV2ZWw6OTQscGhhc2VybGV2ZWw6OTUsZGF0YWJ1dHRvbmluY3JlbWVudDo5NixkYXRhYnV0dG9uZGVjcmVtZW50Ojk3LG5vbnJlZ2lzdGVyZWRwYXJhbWV0ZXJjb2Fyc2U6OTgsbm9ucmVnaXN0ZXJlZHBhcmFtZXRlcmZpbmU6OTkscmVnaXN0ZXJlZHBhcmFtZXRlcmNvYXJzZToxMDAscmVnaXN0ZXJlZHBhcmFtZXRlcmZpbmU6MTAxfSx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0sTUlESV9DSEFOTkVMX01PREVfTUVTU0FHRVM6e3ZhbHVlOnthbGxzb3VuZG9mZjoxMjAscmVzZXRhbGxjb250cm9sbGVyczoxMjEsbG9jYWxjb250cm9sOjEyMixhbGxub3Rlc29mZjoxMjMsb21uaW1vZGVvZmY6MTI0LG9tbmltb2Rlb246MTI1LG1vbm9tb2Rlb246MTI2LHBvbHltb2Rlb246MTI3fSx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0sb2N0YXZlT2Zmc2V0Ont2YWx1ZTowLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3N1cHBvcnRlZDp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5cInJlcXVlc3RNSURJQWNjZXNzXCJpbiBuYXZpZ2F0b3J9fSxlbmFibGVkOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzW1wiaW50ZXJmYWNlXCJdfS5iaW5kKHRoaXMpfSxpbnB1dHM6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lucHV0c30uYmluZCh0aGlzKX0sb3V0cHV0czp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3V0cHV0c30uYmluZCh0aGlzKX0sc3lzZXhFbmFibGVkOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiEoIXRoaXNbXCJpbnRlcmZhY2VcIl18fCF0aGlzW1wiaW50ZXJmYWNlXCJdLnN5c2V4RW5hYmxlZCl9LmJpbmQodGhpcyl9LHRpbWU6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfX19KX1mdW5jdGlvbiBJbnB1dChtaWRpSW5wdXQpe3ZhciB0aGF0PXRoaXM7dGhpcy5fdXNlckhhbmRsZXJzPXtjaGFubmVsOnt9LHN5c3RlbTp7fX0sdGhpcy5fbWlkaUlucHV0PW1pZGlJbnB1dCxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtjb25uZWN0aW9uOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGF0Ll9taWRpSW5wdXQuY29ubmVjdGlvbn19LGlkOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGF0Ll9taWRpSW5wdXQuaWR9fSxtYW51ZmFjdHVyZXI6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoYXQuX21pZGlJbnB1dC5tYW51ZmFjdHVyZXJ9fSxuYW1lOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGF0Ll9taWRpSW5wdXQubmFtZX19LHN0YXRlOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGF0Ll9taWRpSW5wdXQuc3RhdGV9fSx0eXBlOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGF0Ll9taWRpSW5wdXQudHlwZX19fSksdGhpcy5faW5pdGlhbGl6ZVVzZXJIYW5kbGVycygpLHRoaXMuX21pZGlJbnB1dC5vbm1pZGltZXNzYWdlPXRoaXMuX29uTWlkaU1lc3NhZ2UuYmluZCh0aGlzKX1mdW5jdGlvbiBPdXRwdXQobWlkaU91dHB1dCl7dmFyIHRoYXQ9dGhpczt0aGlzLl9taWRpT3V0cHV0PW1pZGlPdXRwdXQsT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7Y29ubmVjdGlvbjp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhhdC5fbWlkaU91dHB1dC5jb25uZWN0aW9ufX0saWQ6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoYXQuX21pZGlPdXRwdXQuaWR9fSxtYW51ZmFjdHVyZXI6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoYXQuX21pZGlPdXRwdXQubWFudWZhY3R1cmVyfX0sbmFtZTp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhhdC5fbWlkaU91dHB1dC5uYW1lfX0sc3RhdGU6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoYXQuX21pZGlPdXRwdXQuc3RhdGV9fSx0eXBlOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGF0Ll9taWRpT3V0cHV0LnR5cGV9fX0pfXZhciB3bT1uZXcgV2ViTWlkaTtXZWJNaWRpLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oY2FsbGJhY2ssc3lzZXgpe3JldHVybiB0aGlzLmVuYWJsZWQ/dm9pZCAwOnRoaXMuc3VwcG9ydGVkP3ZvaWQgbmF2aWdhdG9yLnJlcXVlc3RNSURJQWNjZXNzKHtzeXNleDpzeXNleH0pLnRoZW4oZnVuY3Rpb24obWlkaUFjY2Vzcyl7ZnVuY3Rpb24gb25Qb3J0c09wZW4oKXtjbGVhclRpbWVvdXQocHJvbWlzZVRpbWVvdXQpLHRoaXMuX3VwZGF0ZUlucHV0c0FuZE91dHB1dHMoKSx0aGlzW1wiaW50ZXJmYWNlXCJdLm9uc3RhdGVjaGFuZ2U9dGhpcy5fb25JbnRlcmZhY2VTdGF0ZUNoYW5nZS5iaW5kKHRoaXMpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGNhbGxiYWNrJiZjYWxsYmFjay5jYWxsKHRoaXMpLGV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXt0aGlzLl9vbkludGVyZmFjZVN0YXRlQ2hhbmdlKGV2ZW50KX0uYmluZCh0aGlzKSl9dmFyIHByb21pc2VUaW1lb3V0LGV2ZW50cz1bXSxwcm9taXNlcz1bXTt0aGlzW1wiaW50ZXJmYWNlXCJdPW1pZGlBY2Nlc3MsdGhpcy5fcmVzZXRJbnRlcmZhY2VVc2VySGFuZGxlcnMoKSx0aGlzW1wiaW50ZXJmYWNlXCJdLm9uc3RhdGVjaGFuZ2U9ZnVuY3Rpb24oZSl7ZXZlbnRzLnB1c2goZSl9O2Zvcih2YXIgaW5wdXRzPW1pZGlBY2Nlc3MuaW5wdXRzLnZhbHVlcygpLGlucHV0PWlucHV0cy5uZXh0KCk7aW5wdXQmJiFpbnB1dC5kb25lO2lucHV0PWlucHV0cy5uZXh0KCkpcHJvbWlzZXMucHVzaChpbnB1dC52YWx1ZS5vcGVuKCkpO2Zvcih2YXIgb3V0cHV0cz1taWRpQWNjZXNzLm91dHB1dHMudmFsdWVzKCksb3V0cHV0PW91dHB1dHMubmV4dCgpO291dHB1dCYmIW91dHB1dC5kb25lO291dHB1dD1vdXRwdXRzLm5leHQoKSlwcm9taXNlcy5wdXNoKG91dHB1dC52YWx1ZS5vcGVuKCkpO3Byb21pc2VUaW1lb3V0PXNldFRpbWVvdXQob25Qb3J0c09wZW4uYmluZCh0aGlzKSwyMDApLFByb21pc2UmJlByb21pc2UuYWxsKHByb21pc2VzKVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycil7fSkudGhlbihvblBvcnRzT3Blbi5iaW5kKHRoaXMpKX0uYmluZCh0aGlzKSxmdW5jdGlvbihlcnIpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGNhbGxiYWNrJiZjYWxsYmFjay5jYWxsKHRoaXMsZXJyKX0uYmluZCh0aGlzKSk6dm9pZChcImZ1bmN0aW9uXCI9PXR5cGVvZiBjYWxsYmFjayYmY2FsbGJhY2sobmV3IEVycm9yKFwiVGhlIFdlYiBNSURJIEFQSSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3Nlci5cIikpKX0sV2ViTWlkaS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe2lmKCF0aGlzLnN1cHBvcnRlZCl0aHJvdyBuZXcgRXJyb3IoXCJUaGUgV2ViIE1JREkgQVBJIGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBicm93c2VyLlwiKTt0aGlzW1wiaW50ZXJmYWNlXCJdJiYodGhpc1tcImludGVyZmFjZVwiXS5vbnN0YXRlY2hhbmdlPXZvaWQgMCksdGhpc1tcImludGVyZmFjZVwiXT12b2lkIDAsdGhpcy5faW5wdXRzPVtdLHRoaXMuX291dHB1dHM9W10sdGhpcy5fcmVzZXRJbnRlcmZhY2VVc2VySGFuZGxlcnMoKX0sV2ViTWlkaS5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24odHlwZSxsaXN0ZW5lcil7aWYoIXRoaXMuZW5hYmxlZCl0aHJvdyBuZXcgRXJyb3IoXCJXZWJNaWRpIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgYWRkaW5nIGV2ZW50IGxpc3RlbmVycy5cIik7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgbGlzdGVuZXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSAnbGlzdGVuZXInIHBhcmFtZXRlciBtdXN0IGJlIGEgZnVuY3Rpb24uXCIpO2lmKCEodGhpcy5fbWlkaUludGVyZmFjZUV2ZW50cy5pbmRleE9mKHR5cGUpPj0wKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIHNwZWNpZmllZCBldmVudCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQuXCIpO3JldHVybiB0aGlzLl91c2VySGFuZGxlcnNbdHlwZV0ucHVzaChsaXN0ZW5lciksdGhpc30sV2ViTWlkaS5wcm90b3R5cGUuaGFzTGlzdGVuZXI9ZnVuY3Rpb24odHlwZSxsaXN0ZW5lcil7aWYoIXRoaXMuZW5hYmxlZCl0aHJvdyBuZXcgRXJyb3IoXCJXZWJNaWRpIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgY2hlY2tpbmcgZXZlbnQgbGlzdGVuZXJzLlwiKTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBsaXN0ZW5lcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlICdsaXN0ZW5lcicgcGFyYW1ldGVyIG11c3QgYmUgYSBmdW5jdGlvbi5cIik7aWYoISh0aGlzLl9taWRpSW50ZXJmYWNlRXZlbnRzLmluZGV4T2YodHlwZSk+PTApKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgc3BlY2lmaWVkIGV2ZW50IHR5cGUgaXMgbm90IHN1cHBvcnRlZC5cIik7Zm9yKHZhciBvPTA7bzx0aGlzLl91c2VySGFuZGxlcnNbdHlwZV0ubGVuZ3RoO28rKylpZih0aGlzLl91c2VySGFuZGxlcnNbdHlwZV1bb109PT1saXN0ZW5lcilyZXR1cm4hMDtyZXR1cm4hMX0sV2ViTWlkaS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24odHlwZSxsaXN0ZW5lcil7aWYoIXRoaXMuZW5hYmxlZCl0aHJvdyBuZXcgRXJyb3IoXCJXZWJNaWRpIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgcmVtb3ZpbmcgZXZlbnQgbGlzdGVuZXJzLlwiKTtpZih2b2lkIDAhPT1saXN0ZW5lciYmXCJmdW5jdGlvblwiIT10eXBlb2YgbGlzdGVuZXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSAnbGlzdGVuZXInIHBhcmFtZXRlciBtdXN0IGJlIGEgZnVuY3Rpb24uXCIpO2lmKHRoaXMuX21pZGlJbnRlcmZhY2VFdmVudHMuaW5kZXhPZih0eXBlKT49MClpZihsaXN0ZW5lcilmb3IodmFyIG89MDtvPHRoaXMuX3VzZXJIYW5kbGVyc1t0eXBlXS5sZW5ndGg7bysrKXRoaXMuX3VzZXJIYW5kbGVyc1t0eXBlXVtvXT09PWxpc3RlbmVyJiZ0aGlzLl91c2VySGFuZGxlcnNbdHlwZV0uc3BsaWNlKG8sMSk7ZWxzZSB0aGlzLl91c2VySGFuZGxlcnNbdHlwZV09W107ZWxzZXtpZih2b2lkIDAhPT10eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgc3BlY2lmaWVkIGV2ZW50IHR5cGUgaXMgbm90IHN1cHBvcnRlZC5cIik7dGhpcy5fcmVzZXRJbnRlcmZhY2VVc2VySGFuZGxlcnMoKX1yZXR1cm4gdGhpc30sV2ViTWlkaS5wcm90b3R5cGUudG9NSURJQ2hhbm5lbHM9ZnVuY3Rpb24oY2hhbm5lbCl7dmFyIGNoYW5uZWxzO3JldHVybiBjaGFubmVscz1cImFsbFwiPT09Y2hhbm5lbHx8dm9pZCAwPT09Y2hhbm5lbD9bXCJhbGxcIl06QXJyYXkuaXNBcnJheShjaGFubmVsKT9jaGFubmVsOltjaGFubmVsXSxjaGFubmVscy5pbmRleE9mKFwiYWxsXCIpPi0xJiYoY2hhbm5lbHM9WzEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2XSksY2hhbm5lbHMubWFwKGZ1bmN0aW9uKGNoKXtyZXR1cm4gcGFyc2VJbnQoY2gpfSkuZmlsdGVyKGZ1bmN0aW9uKGNoKXtyZXR1cm4gY2g+PTEmJjE2Pj1jaH0pfSxXZWJNaWRpLnByb3RvdHlwZS5nZXRJbnB1dEJ5SWQ9ZnVuY3Rpb24oaWQpe2lmKCF0aGlzLmVuYWJsZWQpdGhyb3cgbmV3IEVycm9yKFwiV2ViTWlkaSBpcyBub3QgZW5hYmxlZC5cIik7Zm9yKHZhciBpPTA7aTx0aGlzLmlucHV0cy5sZW5ndGg7aSsrKWlmKHRoaXMuaW5wdXRzW2ldLmlkPT09aWQpcmV0dXJuIHRoaXMuaW5wdXRzW2ldO3JldHVybiExfSxXZWJNaWRpLnByb3RvdHlwZS5nZXRPdXRwdXRCeUlkPWZ1bmN0aW9uKGlkKXtpZighdGhpcy5lbmFibGVkKXRocm93IG5ldyBFcnJvcihcIldlYk1pZGkgaXMgbm90IGVuYWJsZWQuXCIpO2Zvcih2YXIgaT0wO2k8dGhpcy5vdXRwdXRzLmxlbmd0aDtpKyspaWYodGhpcy5vdXRwdXRzW2ldLmlkPT09aWQpcmV0dXJuIHRoaXMub3V0cHV0c1tpXTtyZXR1cm4hMX0sV2ViTWlkaS5wcm90b3R5cGUuZ2V0SW5wdXRCeU5hbWU9ZnVuY3Rpb24obmFtZSl7aWYoIXRoaXMuZW5hYmxlZCl0aHJvdyBuZXcgRXJyb3IoXCJXZWJNaWRpIGlzIG5vdCBlbmFibGVkLlwiKTtmb3IodmFyIGk9MDtpPHRoaXMuaW5wdXRzLmxlbmd0aDtpKyspaWYofnRoaXMuaW5wdXRzW2ldLm5hbWUuaW5kZXhPZihuYW1lKSlyZXR1cm4gdGhpcy5pbnB1dHNbaV07cmV0dXJuITF9LFdlYk1pZGkucHJvdG90eXBlLmdldE9jdGF2ZT1mdW5jdGlvbihudW1iZXIpe3JldHVybiBudWxsIT1udW1iZXImJm51bWJlcj49MCYmMTI3Pj1udW1iZXI/TWF0aC5mbG9vcihNYXRoLmZsb29yKG51bWJlcikvMTItMSkrTWF0aC5mbG9vcih3bS5vY3RhdmVPZmZzZXQpOnZvaWQgMH0sV2ViTWlkaS5wcm90b3R5cGUuZ2V0T3V0cHV0QnlOYW1lPWZ1bmN0aW9uKG5hbWUpe2lmKCF0aGlzLmVuYWJsZWQpdGhyb3cgbmV3IEVycm9yKFwiV2ViTWlkaSBpcyBub3QgZW5hYmxlZC5cIik7Zm9yKHZhciBpPTA7aTx0aGlzLm91dHB1dHMubGVuZ3RoO2krKylpZih+dGhpcy5vdXRwdXRzW2ldLm5hbWUuaW5kZXhPZihuYW1lKSlyZXR1cm4gdGhpcy5vdXRwdXRzW2ldO3JldHVybiExfSxXZWJNaWRpLnByb3RvdHlwZS5ndWVzc05vdGVOdW1iZXI9ZnVuY3Rpb24oaW5wdXQpe3ZhciBvdXRwdXQ9ITE7aWYoaW5wdXQmJmlucHV0LnRvRml4ZWQmJmlucHV0Pj0wJiYxMjc+PWlucHV0P291dHB1dD1NYXRoLnJvdW5kKGlucHV0KTpwYXJzZUludChpbnB1dCk+PTAmJnBhcnNlSW50KGlucHV0KTw9MTI3P291dHB1dD1wYXJzZUludChpbnB1dCk6KFwic3RyaW5nXCI9PXR5cGVvZiBpbnB1dHx8aW5wdXQgaW5zdGFuY2VvZiBTdHJpbmcpJiYob3V0cHV0PXRoaXMubm90ZU5hbWVUb051bWJlcihpbnB1dCkpLG91dHB1dD09PSExKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaW5wdXQgdmFsdWUgKFwiK2lucHV0K1wiKS5cIik7cmV0dXJuIG91dHB1dH0sV2ViTWlkaS5wcm90b3R5cGUubm90ZU5hbWVUb051bWJlcj1mdW5jdGlvbihuYW1lKXtcInN0cmluZ1wiIT10eXBlb2YgbmFtZSYmKG5hbWU9XCJcIik7dmFyIG1hdGNoZXM9bmFtZS5tYXRjaCgvKFtDREVGR0FCXSkoI3swLDJ9fGJ7MCwyfSkoLT9cXGQrKS9pKTtpZighbWF0Y2hlcyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgbm90ZSBuYW1lLlwiKTt2YXIgc2VtaXRvbmVzPXdtLl9zZW1pdG9uZXNbbWF0Y2hlc1sxXS50b1VwcGVyQ2FzZSgpXSxvY3RhdmU9cGFyc2VJbnQobWF0Y2hlc1szXSkscmVzdWx0PTEyKihvY3RhdmUrMS1NYXRoLmZsb29yKHdtLm9jdGF2ZU9mZnNldCkpK3NlbWl0b25lcztpZihtYXRjaGVzWzJdLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImJcIik+LTE/cmVzdWx0LT1tYXRjaGVzWzJdLmxlbmd0aDptYXRjaGVzWzJdLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcIiNcIik+LTEmJihyZXN1bHQrPW1hdGNoZXNbMl0ubGVuZ3RoKSwwPnJlc3VsdHx8cmVzdWx0PjEyNyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgbm90ZSBuYW1lIG9yIG5vdGUgb3V0c2lkZSB2YWxpZCByYW5nZS5cIik7cmV0dXJuIHJlc3VsdH0sV2ViTWlkaS5wcm90b3R5cGUuX3VwZGF0ZUlucHV0c0FuZE91dHB1dHM9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVJbnB1dHMoKSx0aGlzLl91cGRhdGVPdXRwdXRzKCl9LFdlYk1pZGkucHJvdG90eXBlLl91cGRhdGVJbnB1dHM9ZnVuY3Rpb24oKXtmb3IodmFyIGk9MDtpPHRoaXMuX2lucHV0cy5sZW5ndGg7aSsrKXtmb3IodmFyIHJlbW92ZT0hMCx1cGRhdGVkPXRoaXNbXCJpbnRlcmZhY2VcIl0uaW5wdXRzLnZhbHVlcygpLGlucHV0PXVwZGF0ZWQubmV4dCgpO2lucHV0JiYhaW5wdXQuZG9uZTtpbnB1dD11cGRhdGVkLm5leHQoKSlpZih0aGlzLl9pbnB1dHNbaV0uX21pZGlJbnB1dD09PWlucHV0LnZhbHVlKXtyZW1vdmU9ITE7YnJlYWt9cmVtb3ZlJiZ0aGlzLl9pbnB1dHMuc3BsaWNlKGksMSl9dGhpc1tcImludGVyZmFjZVwiXSYmdGhpc1tcImludGVyZmFjZVwiXS5pbnB1dHMuZm9yRWFjaChmdW5jdGlvbihuSW5wdXQpe2Zvcih2YXIgYWRkPSEwLGo9MDtqPHRoaXMuX2lucHV0cy5sZW5ndGg7aisrKXRoaXMuX2lucHV0c1tqXS5fbWlkaUlucHV0PT09bklucHV0JiYoYWRkPSExKTthZGQmJnRoaXMuX2lucHV0cy5wdXNoKG5ldyBJbnB1dChuSW5wdXQpKX0uYmluZCh0aGlzKSl9LFdlYk1pZGkucHJvdG90eXBlLl91cGRhdGVPdXRwdXRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBpPTA7aTx0aGlzLl9vdXRwdXRzLmxlbmd0aDtpKyspe2Zvcih2YXIgcmVtb3ZlPSEwLHVwZGF0ZWQ9dGhpc1tcImludGVyZmFjZVwiXS5vdXRwdXRzLnZhbHVlcygpLG91dHB1dD11cGRhdGVkLm5leHQoKTtvdXRwdXQmJiFvdXRwdXQuZG9uZTtvdXRwdXQ9dXBkYXRlZC5uZXh0KCkpaWYodGhpcy5fb3V0cHV0c1tpXS5fbWlkaU91dHB1dD09PW91dHB1dC52YWx1ZSl7cmVtb3ZlPSExO2JyZWFrfXJlbW92ZSYmdGhpcy5fb3V0cHV0cy5zcGxpY2UoaSwxKX10aGlzW1wiaW50ZXJmYWNlXCJdJiZ0aGlzW1wiaW50ZXJmYWNlXCJdLm91dHB1dHMuZm9yRWFjaChmdW5jdGlvbihuT3V0cHV0KXtmb3IodmFyIGFkZD0hMCxqPTA7ajx0aGlzLl9vdXRwdXRzLmxlbmd0aDtqKyspdGhpcy5fb3V0cHV0c1tqXS5fbWlkaU91dHB1dD09PW5PdXRwdXQmJihhZGQ9ITEpO2FkZCYmdGhpcy5fb3V0cHV0cy5wdXNoKG5ldyBPdXRwdXQobk91dHB1dCkpfS5iaW5kKHRoaXMpKX0sV2ViTWlkaS5wcm90b3R5cGUuX29uSW50ZXJmYWNlU3RhdGVDaGFuZ2U9ZnVuY3Rpb24oZSl7dGhpcy5fdXBkYXRlSW5wdXRzQW5kT3V0cHV0cygpO3ZhciBldmVudD17dGltZXN0YW1wOmUudGltZVN0YW1wLHR5cGU6ZS5wb3J0LnN0YXRlfTt0aGlzW1wiaW50ZXJmYWNlXCJdJiZcImNvbm5lY3RlZFwiPT09ZS5wb3J0LnN0YXRlP1wib3V0cHV0XCI9PT1lLnBvcnQudHlwZT9ldmVudC5wb3J0PXRoaXMuZ2V0T3V0cHV0QnlJZChlLnBvcnQuaWQpOlwiaW5wdXRcIj09PWUucG9ydC50eXBlJiYoZXZlbnQucG9ydD10aGlzLmdldElucHV0QnlJZChlLnBvcnQuaWQpKTpldmVudC5wb3J0PXtjb25uZWN0aW9uOlwiY2xvc2VkXCIsaWQ6ZS5wb3J0LmlkLG1hbnVmYWN0dXJlcjplLnBvcnQubWFudWZhY3R1cmVyLG5hbWU6ZS5wb3J0Lm5hbWUsc3RhdGU6ZS5wb3J0LnN0YXRlLHR5cGU6ZS5wb3J0LnR5cGV9LHRoaXMuX3VzZXJIYW5kbGVyc1tlLnBvcnQuc3RhdGVdLmZvckVhY2goZnVuY3Rpb24oaGFuZGxlcil7aGFuZGxlcihldmVudCl9KX0sV2ViTWlkaS5wcm90b3R5cGUuX3Jlc2V0SW50ZXJmYWNlVXNlckhhbmRsZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciBpPTA7aTx0aGlzLl9taWRpSW50ZXJmYWNlRXZlbnRzLmxlbmd0aDtpKyspdGhpcy5fdXNlckhhbmRsZXJzW3RoaXMuX21pZGlJbnRlcmZhY2VFdmVudHNbaV1dPVtdfSxJbnB1dC5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24odHlwZSxjaGFubmVsLGxpc3RlbmVyKXt2YXIgdGhhdD10aGlzO2lmKHZvaWQgMD09PWNoYW5uZWwmJihjaGFubmVsPVwiYWxsXCIpLEFycmF5LmlzQXJyYXkoY2hhbm5lbCl8fChjaGFubmVsPVtjaGFubmVsXSksY2hhbm5lbC5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pe2lmKFwiYWxsXCIhPT1pdGVtJiYhKGl0ZW0+PTEmJjE2Pj1pdGVtKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSAnY2hhbm5lbCcgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpfSksXCJmdW5jdGlvblwiIT10eXBlb2YgbGlzdGVuZXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSAnbGlzdGVuZXInIHBhcmFtZXRlciBtdXN0IGJlIGEgZnVuY3Rpb24uXCIpO2lmKHZvaWQgMCE9PXdtLk1JRElfU1lTVEVNX01FU1NBR0VTW3R5cGVdKXRoaXMuX3VzZXJIYW5kbGVycy5zeXN0ZW1bdHlwZV18fCh0aGlzLl91c2VySGFuZGxlcnMuc3lzdGVtW3R5cGVdPVtdKSx0aGlzLl91c2VySGFuZGxlcnMuc3lzdGVtW3R5cGVdLnB1c2gobGlzdGVuZXIpO2Vsc2V7aWYodm9pZCAwPT09d20uTUlESV9DSEFOTkVMX01FU1NBR0VTW3R5cGVdKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgc3BlY2lmaWVkIGV2ZW50IHR5cGUgaXMgbm90IHN1cHBvcnRlZC5cIik7aWYoY2hhbm5lbC5pbmRleE9mKFwiYWxsXCIpPi0xKXtjaGFubmVsPVtdO2Zvcih2YXIgaj0xOzE2Pj1qO2orKyljaGFubmVsLnB1c2goail9dGhpcy5fdXNlckhhbmRsZXJzLmNoYW5uZWxbdHlwZV18fCh0aGlzLl91c2VySGFuZGxlcnMuY2hhbm5lbFt0eXBlXT1bXSksY2hhbm5lbC5mb3JFYWNoKGZ1bmN0aW9uKGNoKXt0aGF0Ll91c2VySGFuZGxlcnMuY2hhbm5lbFt0eXBlXVtjaF18fCh0aGF0Ll91c2VySGFuZGxlcnMuY2hhbm5lbFt0eXBlXVtjaF09W10pLHRoYXQuX3VzZXJIYW5kbGVycy5jaGFubmVsW3R5cGVdW2NoXS5wdXNoKGxpc3RlbmVyKX0pfXJldHVybiB0aGlzfSxJbnB1dC5wcm90b3R5cGUub249SW5wdXQucHJvdG90eXBlLmFkZExpc3RlbmVyLElucHV0LnByb3RvdHlwZS5oYXNMaXN0ZW5lcj1mdW5jdGlvbih0eXBlLGNoYW5uZWwsbGlzdGVuZXIpe3ZhciB0aGF0PXRoaXM7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgbGlzdGVuZXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSAnbGlzdGVuZXInIHBhcmFtZXRlciBtdXN0IGJlIGEgZnVuY3Rpb24uXCIpO2lmKHZvaWQgMD09PWNoYW5uZWwmJihjaGFubmVsPVwiYWxsXCIpLGNoYW5uZWwuY29uc3RydWN0b3IhPT1BcnJheSYmKGNoYW5uZWw9W2NoYW5uZWxdKSx2b2lkIDAhPT13bS5NSURJX1NZU1RFTV9NRVNTQUdFU1t0eXBlXSl7Zm9yKHZhciBvPTA7bzx0aGlzLl91c2VySGFuZGxlcnMuc3lzdGVtW3R5cGVdLmxlbmd0aDtvKyspaWYodGhpcy5fdXNlckhhbmRsZXJzLnN5c3RlbVt0eXBlXVtvXT09PWxpc3RlbmVyKXJldHVybiEwfWVsc2UgaWYodm9pZCAwIT09d20uTUlESV9DSEFOTkVMX01FU1NBR0VTW3R5cGVdKXtpZihjaGFubmVsLmluZGV4T2YoXCJhbGxcIik+LTEpe2NoYW5uZWw9W107Zm9yKHZhciBqPTE7MTY+PWo7aisrKWNoYW5uZWwucHVzaChqKX1yZXR1cm4gdGhpcy5fdXNlckhhbmRsZXJzLmNoYW5uZWxbdHlwZV0/Y2hhbm5lbC5ldmVyeShmdW5jdGlvbihjaE51bSl7dmFyIGxpc3RlbmVycz10aGF0Ll91c2VySGFuZGxlcnMuY2hhbm5lbFt0eXBlXVtjaE51bV07cmV0dXJuIGxpc3RlbmVycyYmbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpPi0xfSk6ITF9cmV0dXJuITF9LElucHV0LnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbih0eXBlLGNoYW5uZWwsbGlzdGVuZXIpe3ZhciB0aGF0PXRoaXM7aWYodm9pZCAwIT09bGlzdGVuZXImJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGxpc3RlbmVyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgJ2xpc3RlbmVyJyBwYXJhbWV0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uLlwiKTtpZih2b2lkIDA9PT1jaGFubmVsJiYoY2hhbm5lbD1cImFsbFwiKSxjaGFubmVsLmNvbnN0cnVjdG9yIT09QXJyYXkmJihjaGFubmVsPVtjaGFubmVsXSksdm9pZCAwIT09d20uTUlESV9TWVNURU1fTUVTU0FHRVNbdHlwZV0paWYodm9pZCAwPT09bGlzdGVuZXIpdGhpcy5fdXNlckhhbmRsZXJzLnN5c3RlbVt0eXBlXT1bXTtlbHNlIGZvcih2YXIgbz0wO288dGhpcy5fdXNlckhhbmRsZXJzLnN5c3RlbVt0eXBlXS5sZW5ndGg7bysrKXRoaXMuX3VzZXJIYW5kbGVycy5zeXN0ZW1bdHlwZV1bb109PT1saXN0ZW5lciYmdGhpcy5fdXNlckhhbmRsZXJzLnN5c3RlbVt0eXBlXS5zcGxpY2UobywxKTtlbHNlIGlmKHZvaWQgMCE9PXdtLk1JRElfQ0hBTk5FTF9NRVNTQUdFU1t0eXBlXSl7aWYoY2hhbm5lbC5pbmRleE9mKFwiYWxsXCIpPi0xKXtjaGFubmVsPVtdO2Zvcih2YXIgaj0xOzE2Pj1qO2orKyljaGFubmVsLnB1c2goail9aWYoIXRoaXMuX3VzZXJIYW5kbGVycy5jaGFubmVsW3R5cGVdKXJldHVybiB0aGlzO2NoYW5uZWwuZm9yRWFjaChmdW5jdGlvbihjaE51bSl7dmFyIGxpc3RlbmVycz10aGF0Ll91c2VySGFuZGxlcnMuY2hhbm5lbFt0eXBlXVtjaE51bV07aWYobGlzdGVuZXJzKWlmKHZvaWQgMD09PWxpc3RlbmVyKXRoYXQuX3VzZXJIYW5kbGVycy5jaGFubmVsW3R5cGVdW2NoTnVtXT1bXTtlbHNlIGZvcih2YXIgbD0wO2w8bGlzdGVuZXJzLmxlbmd0aDtsKyspbGlzdGVuZXJzW2xdPT09bGlzdGVuZXImJmxpc3RlbmVycy5zcGxpY2UobCwxKX0pfWVsc2V7aWYodm9pZCAwIT09dHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIHNwZWNpZmllZCBldmVudCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQuXCIpO3RoaXMuX2luaXRpYWxpemVVc2VySGFuZGxlcnMoKX1yZXR1cm4gdGhpc30sSW5wdXQucHJvdG90eXBlLl9pbml0aWFsaXplVXNlckhhbmRsZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciBwcm9wMSBpbiB3bS5NSURJX0NIQU5ORUxfTUVTU0FHRVMpd20uTUlESV9DSEFOTkVMX01FU1NBR0VTLmhhc093blByb3BlcnR5KHByb3AxKSYmKHRoaXMuX3VzZXJIYW5kbGVycy5jaGFubmVsW3Byb3AxXT17fSk7Zm9yKHZhciBwcm9wMiBpbiB3bS5NSURJX1NZU1RFTV9NRVNTQUdFUyl3bS5NSURJX1NZU1RFTV9NRVNTQUdFUy5oYXNPd25Qcm9wZXJ0eShwcm9wMikmJih0aGlzLl91c2VySGFuZGxlcnMuc3lzdGVtW3Byb3AyXT1bXSl9LElucHV0LnByb3RvdHlwZS5fb25NaWRpTWVzc2FnZT1mdW5jdGlvbihlKXtpZih0aGlzLl91c2VySGFuZGxlcnMuc3lzdGVtLm1pZGltZXNzYWdlLmxlbmd0aD4wKXt2YXIgZXZlbnQ9e3RhcmdldDp0aGlzLGRhdGE6ZS5kYXRhLHRpbWVzdGFtcDplLnRpbWVTdGFtcCx0eXBlOlwibWlkaW1lc3NhZ2VcIn07dGhpcy5fdXNlckhhbmRsZXJzLnN5c3RlbS5taWRpbWVzc2FnZS5mb3JFYWNoKGZ1bmN0aW9uKGNhbGxiYWNrKXtjYWxsYmFjayhldmVudCl9KX1lLmRhdGFbMF08MjQwP3RoaXMuX3BhcnNlQ2hhbm5lbEV2ZW50KGUpOmUuZGF0YVswXTw9MjU1JiZ0aGlzLl9wYXJzZVN5c3RlbUV2ZW50KGUpfSxJbnB1dC5wcm90b3R5cGUuX3BhcnNlQ2hhbm5lbEV2ZW50PWZ1bmN0aW9uKGUpe3ZhciBkYXRhMSxkYXRhMixjb21tYW5kPWUuZGF0YVswXT4+NCxjaGFubmVsPSgxNSZlLmRhdGFbMF0pKzE7ZS5kYXRhLmxlbmd0aD4xJiYoZGF0YTE9ZS5kYXRhWzFdLGRhdGEyPWUuZGF0YS5sZW5ndGg+Mj9lLmRhdGFbMl06dm9pZCAwKTt2YXIgZXZlbnQ9e3RhcmdldDp0aGlzLGRhdGE6ZS5kYXRhLHRpbWVzdGFtcDplLnRpbWVTdGFtcCxjaGFubmVsOmNoYW5uZWx9O2NvbW1hbmQ9PT13bS5NSURJX0NIQU5ORUxfTUVTU0FHRVMubm90ZW9mZnx8Y29tbWFuZD09PXdtLk1JRElfQ0hBTk5FTF9NRVNTQUdFUy5ub3Rlb24mJjA9PT1kYXRhMj8oZXZlbnQudHlwZT1cIm5vdGVvZmZcIixldmVudC5ub3RlPXtudW1iZXI6ZGF0YTEsbmFtZTp3bS5fbm90ZXNbZGF0YTElMTJdLG9jdGF2ZTp3bS5nZXRPY3RhdmUoZGF0YTEpfSxldmVudC52ZWxvY2l0eT1kYXRhMi8xMjcsZXZlbnQucmF3VmVsb2NpdHk9ZGF0YTIpOmNvbW1hbmQ9PT13bS5NSURJX0NIQU5ORUxfTUVTU0FHRVMubm90ZW9uPyhldmVudC50eXBlPVwibm90ZW9uXCIsZXZlbnQubm90ZT17bnVtYmVyOmRhdGExLG5hbWU6d20uX25vdGVzW2RhdGExJTEyXSxvY3RhdmU6d20uZ2V0T2N0YXZlKGRhdGExKX0sZXZlbnQudmVsb2NpdHk9ZGF0YTIvMTI3LGV2ZW50LnJhd1ZlbG9jaXR5PWRhdGEyKTpjb21tYW5kPT09d20uTUlESV9DSEFOTkVMX01FU1NBR0VTLmtleWFmdGVydG91Y2g/KGV2ZW50LnR5cGU9XCJrZXlhZnRlcnRvdWNoXCIsZXZlbnQubm90ZT17bnVtYmVyOmRhdGExLG5hbWU6d20uX25vdGVzW2RhdGExJTEyXSxvY3RhdmU6d20uZ2V0T2N0YXZlKGRhdGExKX0sZXZlbnQudmFsdWU9ZGF0YTIvMTI3KTpjb21tYW5kPT09d20uTUlESV9DSEFOTkVMX01FU1NBR0VTLmNvbnRyb2xjaGFuZ2UmJmRhdGExPj0wJiYxMTk+PWRhdGExPyhldmVudC50eXBlPVwiY29udHJvbGNoYW5nZVwiLGV2ZW50LmNvbnRyb2xsZXI9e251bWJlcjpkYXRhMSxuYW1lOnRoaXMuZ2V0Q2NOYW1lQnlOdW1iZXIoZGF0YTEpfSxldmVudC52YWx1ZT1kYXRhMik6Y29tbWFuZD09PXdtLk1JRElfQ0hBTk5FTF9NRVNTQUdFUy5jaGFubmVsbW9kZSYmZGF0YTE+PTEyMCYmMTI3Pj1kYXRhMT8oZXZlbnQudHlwZT1cImNoYW5uZWxtb2RlXCIsZXZlbnQuY29udHJvbGxlcj17bnVtYmVyOmRhdGExLG5hbWU6dGhpcy5nZXRDaGFubmVsTW9kZUJ5TnVtYmVyKGRhdGExKX0sZXZlbnQudmFsdWU9ZGF0YTIpOmNvbW1hbmQ9PT13bS5NSURJX0NIQU5ORUxfTUVTU0FHRVMucHJvZ3JhbWNoYW5nZT8oZXZlbnQudHlwZT1cInByb2dyYW1jaGFuZ2VcIixldmVudC52YWx1ZT1kYXRhMSk6Y29tbWFuZD09PXdtLk1JRElfQ0hBTk5FTF9NRVNTQUdFUy5jaGFubmVsYWZ0ZXJ0b3VjaD8oZXZlbnQudHlwZT1cImNoYW5uZWxhZnRlcnRvdWNoXCIsZXZlbnQudmFsdWU9ZGF0YTEvMTI3KTpjb21tYW5kPT09d20uTUlESV9DSEFOTkVMX01FU1NBR0VTLnBpdGNoYmVuZD8oZXZlbnQudHlwZT1cInBpdGNoYmVuZFwiLGV2ZW50LnZhbHVlPSgoZGF0YTI8PDcpK2RhdGExLTgxOTIpLzgxOTIpOmV2ZW50LnR5cGU9XCJ1bmtub3duY2hhbm5lbG1lc3NhZ2VcIix0aGlzLl91c2VySGFuZGxlcnMuY2hhbm5lbFtldmVudC50eXBlXSYmdGhpcy5fdXNlckhhbmRsZXJzLmNoYW5uZWxbZXZlbnQudHlwZV1bY2hhbm5lbF0mJnRoaXMuX3VzZXJIYW5kbGVycy5jaGFubmVsW2V2ZW50LnR5cGVdW2NoYW5uZWxdLmZvckVhY2goZnVuY3Rpb24oY2FsbGJhY2spe2NhbGxiYWNrKGV2ZW50KX0pfSxJbnB1dC5wcm90b3R5cGUuZ2V0Q2NOYW1lQnlOdW1iZXI9ZnVuY3Rpb24obnVtYmVyKXtpZihudW1iZXI9TWF0aC5mbG9vcihudW1iZXIpLCEobnVtYmVyPj0wJiYxMTk+PW51bWJlcikpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgY29udHJvbCBjaGFuZ2UgbnVtYmVyIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMTkuXCIpO2Zvcih2YXIgY2MgaW4gd20uTUlESV9DT05UUk9MX0NIQU5HRV9NRVNTQUdFUylpZih3bS5NSURJX0NPTlRST0xfQ0hBTkdFX01FU1NBR0VTLmhhc093blByb3BlcnR5KGNjKSYmbnVtYmVyPT09d20uTUlESV9DT05UUk9MX0NIQU5HRV9NRVNTQUdFU1tjY10pcmV0dXJuIGNjO3JldHVybiB2b2lkIDB9LElucHV0LnByb3RvdHlwZS5nZXRDaGFubmVsTW9kZUJ5TnVtYmVyPWZ1bmN0aW9uKG51bWJlcil7aWYobnVtYmVyPU1hdGguZmxvb3IobnVtYmVyKSwhKG51bWJlcj49MTIwJiZzdGF0dXM8PTEyNykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgY29udHJvbCBjaGFuZ2UgbnVtYmVyIG11c3QgYmUgYmV0d2VlbiAxMjAgYW5kIDEyNy5cIik7Zm9yKHZhciBjbSBpbiB3bS5NSURJX0NIQU5ORUxfTU9ERV9NRVNTQUdFUylpZih3bS5NSURJX0NIQU5ORUxfTU9ERV9NRVNTQUdFUy5oYXNPd25Qcm9wZXJ0eShjbSkmJm51bWJlcj09PXdtLk1JRElfQ0hBTk5FTF9NT0RFX01FU1NBR0VTW2NtXSlyZXR1cm4gY219LElucHV0LnByb3RvdHlwZS5fcGFyc2VTeXN0ZW1FdmVudD1mdW5jdGlvbihlKXt2YXIgY29tbWFuZD1lLmRhdGFbMF0sZXZlbnQ9e3RhcmdldDp0aGlzLGRhdGE6ZS5kYXRhLHRpbWVzdGFtcDplLnRpbWVTdGFtcH07Y29tbWFuZD09PXdtLk1JRElfU1lTVEVNX01FU1NBR0VTLnN5c2V4P2V2ZW50LnR5cGU9XCJzeXNleFwiOmNvbW1hbmQ9PT13bS5NSURJX1NZU1RFTV9NRVNTQUdFUy50aW1lY29kZT9ldmVudC50eXBlPVwidGltZWNvZGVcIjpjb21tYW5kPT09d20uTUlESV9TWVNURU1fTUVTU0FHRVMuc29uZ3Bvc2l0aW9uP2V2ZW50LnR5cGU9XCJzb25ncG9zaXRpb25cIjpjb21tYW5kPT09d20uTUlESV9TWVNURU1fTUVTU0FHRVMuc29uZ3NlbGVjdD8oZXZlbnQudHlwZT1cInNvbmdzZWxlY3RcIixldmVudC5zb25nPWUuZGF0YVsxXSk6Y29tbWFuZD09PXdtLk1JRElfU1lTVEVNX01FU1NBR0VTLnR1bmluZ3JlcXVlc3Q/ZXZlbnQudHlwZT1cInR1bmluZ3JlcXVlc3RcIjpjb21tYW5kPT09d20uTUlESV9TWVNURU1fTUVTU0FHRVMuY2xvY2s/ZXZlbnQudHlwZT1cImNsb2NrXCI6Y29tbWFuZD09PXdtLk1JRElfU1lTVEVNX01FU1NBR0VTLnN0YXJ0P2V2ZW50LnR5cGU9XCJzdGFydFwiOmNvbW1hbmQ9PT13bS5NSURJX1NZU1RFTV9NRVNTQUdFU1tcImNvbnRpbnVlXCJdP2V2ZW50LnR5cGU9XCJjb250aW51ZVwiOmNvbW1hbmQ9PT13bS5NSURJX1NZU1RFTV9NRVNTQUdFUy5zdG9wP2V2ZW50LnR5cGU9XCJzdG9wXCI6Y29tbWFuZD09PXdtLk1JRElfU1lTVEVNX01FU1NBR0VTLmFjdGl2ZXNlbnNpbmc/ZXZlbnQudHlwZT1cImFjdGl2ZXNlbnNpbmdcIjpjb21tYW5kPT09d20uTUlESV9TWVNURU1fTUVTU0FHRVMucmVzZXQ/ZXZlbnQudHlwZT1cInJlc2V0XCI6ZXZlbnQudHlwZT1cInVua25vd25zeXN0ZW1tZXNzYWdlXCIsdGhpcy5fdXNlckhhbmRsZXJzLnN5c3RlbVtldmVudC50eXBlXSYmdGhpcy5fdXNlckhhbmRsZXJzLnN5c3RlbVtldmVudC50eXBlXS5mb3JFYWNoKGZ1bmN0aW9uKGNhbGxiYWNrKXtjYWxsYmFjayhldmVudCl9KX0sT3V0cHV0LnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKHN0YXR1cyxkYXRhLHRpbWVzdGFtcCl7aWYoIShzdGF0dXM+PTEyOCYmMjU1Pj1zdGF0dXMpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIHN0YXR1cyBieXRlIG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDEyOCAoMHg4MCkgYW5kIDI1NSAoMHhGRikuXCIpO3ZvaWQgMD09PWRhdGEmJihkYXRhPVtdKSxBcnJheS5pc0FycmF5KGRhdGEpfHwoZGF0YT1bZGF0YV0pO3ZhciBtZXNzYWdlPVtdO3JldHVybiBkYXRhLmZvckVhY2goZnVuY3Rpb24oaXRlbSxpbmRleCl7dmFyIHBhcnNlZD1NYXRoLmZsb29yKGl0ZW0pO2lmKCEocGFyc2VkPj0wJiYyNTU+PXBhcnNlZCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJEYXRhIGJ5dGVzIG11c3QgYmUgaW50ZWdlcnMgYmV0d2VlbiAwICgweDAwKSBhbmQgMjU1ICgweEZGKS5cIik7bWVzc2FnZS5wdXNoKHBhcnNlZCl9KSx0aGlzLl9taWRpT3V0cHV0LnNlbmQoW3N0YXR1c10uY29uY2F0KG1lc3NhZ2UpLHBhcnNlRmxvYXQodGltZXN0YW1wKXx8MCksdGhpc30sT3V0cHV0LnByb3RvdHlwZS5zZW5kU3lzZXg9ZnVuY3Rpb24obWFudWZhY3R1cmVyLGRhdGEsb3B0aW9ucyl7aWYoIXdtLnN5c2V4RW5hYmxlZCl0aHJvdyBuZXcgRXJyb3IoXCJTeXNleCBtZXNzYWdlIHN1cHBvcnQgbXVzdCBmaXJzdCBiZSBhY3RpdmF0ZWQuXCIpO3JldHVybiBvcHRpb25zPW9wdGlvbnN8fHt9LG1hbnVmYWN0dXJlcj1bXS5jb25jYXQobWFudWZhY3R1cmVyKSxkYXRhLmZvckVhY2goZnVuY3Rpb24oaXRlbSl7aWYoMD5pdGVtfHxpdGVtPjEyNyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSBkYXRhIGJ5dGVzIG9mIGEgc3lzZXggbWVzc2FnZSBtdXN0IGJlIGludGVnZXJzIGJldHdlZW4gMCAoMHgwMCkgYW5kIDEyNyAoMHg3RikuXCIpfSksZGF0YT1tYW51ZmFjdHVyZXIuY29uY2F0KGRhdGEsd20uTUlESV9TWVNURU1fTUVTU0FHRVMuc3lzZXhlbmQpLHRoaXMuc2VuZCh3bS5NSURJX1NZU1RFTV9NRVNTQUdFUy5zeXNleCxkYXRhLHRoaXMuX3BhcnNlVGltZVBhcmFtZXRlcihvcHRpb25zLnRpbWUpKSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLnNlbmRUaW1lY29kZVF1YXJ0ZXJGcmFtZT1mdW5jdGlvbih2YWx1ZSxvcHRpb25zKXtyZXR1cm4gb3B0aW9ucz1vcHRpb25zfHx7fSx0aGlzLnNlbmQod20uTUlESV9TWVNURU1fTUVTU0FHRVMudGltZWNvZGUsdmFsdWUsdGhpcy5fcGFyc2VUaW1lUGFyYW1ldGVyKG9wdGlvbnMudGltZSkpLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuc2VuZFNvbmdQb3NpdGlvbj1mdW5jdGlvbih2YWx1ZSxvcHRpb25zKXt2YWx1ZT1NYXRoLmZsb29yKHZhbHVlKXx8MCxvcHRpb25zPW9wdGlvbnN8fHt9O3ZhciBtc2I9dmFsdWU+PjcmMTI3LGxzYj0xMjcmdmFsdWU7cmV0dXJuIHRoaXMuc2VuZCh3bS5NSURJX1NZU1RFTV9NRVNTQUdFUy5zb25ncG9zaXRpb24sW21zYixsc2JdLHRoaXMuX3BhcnNlVGltZVBhcmFtZXRlcihvcHRpb25zLnRpbWUpKSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLnNlbmRTb25nU2VsZWN0PWZ1bmN0aW9uKHZhbHVlLG9wdGlvbnMpe2lmKHZhbHVlPU1hdGguZmxvb3IodmFsdWUpLG9wdGlvbnM9b3B0aW9uc3x8e30sISh2YWx1ZT49MCYmMTI3Pj12YWx1ZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgc29uZyBudW1iZXIgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEyNy5cIik7cmV0dXJuIHRoaXMuc2VuZCh3bS5NSURJX1NZU1RFTV9NRVNTQUdFUy5zb25nc2VsZWN0LFt2YWx1ZV0sdGhpcy5fcGFyc2VUaW1lUGFyYW1ldGVyKG9wdGlvbnMudGltZSkpLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuc2VuZFR1bmluZ1JlcXVlc3Q9ZnVuY3Rpb24ob3B0aW9ucyl7cmV0dXJuIG9wdGlvbnM9b3B0aW9uc3x8e30sdGhpcy5zZW5kKHdtLk1JRElfU1lTVEVNX01FU1NBR0VTLnR1bmluZ3JlcXVlc3Qsdm9pZCAwLHRoaXMuX3BhcnNlVGltZVBhcmFtZXRlcihvcHRpb25zLnRpbWUpKSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLnNlbmRDbG9jaz1mdW5jdGlvbihvcHRpb25zKXtyZXR1cm4gb3B0aW9ucz1vcHRpb25zfHx7fSx0aGlzLnNlbmQod20uTUlESV9TWVNURU1fTUVTU0FHRVMuY2xvY2ssdm9pZCAwLHRoaXMuX3BhcnNlVGltZVBhcmFtZXRlcihvcHRpb25zLnRpbWUpKSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLnNlbmRTdGFydD1mdW5jdGlvbihvcHRpb25zKXtyZXR1cm4gb3B0aW9ucz1vcHRpb25zfHx7fSx0aGlzLnNlbmQod20uTUlESV9TWVNURU1fTUVTU0FHRVMuc3RhcnQsdm9pZCAwLHRoaXMuX3BhcnNlVGltZVBhcmFtZXRlcihvcHRpb25zLnRpbWUpKSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLnNlbmRDb250aW51ZT1mdW5jdGlvbihvcHRpb25zKXtyZXR1cm4gb3B0aW9ucz1vcHRpb25zfHx7fSx0aGlzLnNlbmQod20uTUlESV9TWVNURU1fTUVTU0FHRVNbXCJjb250aW51ZVwiXSx2b2lkIDAsdGhpcy5fcGFyc2VUaW1lUGFyYW1ldGVyKG9wdGlvbnMudGltZSkpLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuc2VuZFN0b3A9ZnVuY3Rpb24ob3B0aW9ucyl7cmV0dXJuIG9wdGlvbnM9b3B0aW9uc3x8e30sdGhpcy5zZW5kKHdtLk1JRElfU1lTVEVNX01FU1NBR0VTLnN0b3Asdm9pZCAwLHRoaXMuX3BhcnNlVGltZVBhcmFtZXRlcihvcHRpb25zLnRpbWUpKSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLnNlbmRBY3RpdmVTZW5zaW5nPWZ1bmN0aW9uKG9wdGlvbnMpe3JldHVybiBvcHRpb25zPW9wdGlvbnN8fHt9LHRoaXMuc2VuZCh3bS5NSURJX1NZU1RFTV9NRVNTQUdFUy5hY3RpdmVzZW5zaW5nLFtdLHRoaXMuX3BhcnNlVGltZVBhcmFtZXRlcihvcHRpb25zLnRpbWUpKSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLnNlbmRSZXNldD1mdW5jdGlvbihvcHRpb25zKXtyZXR1cm4gb3B0aW9ucz1vcHRpb25zfHx7fSx0aGlzLnNlbmQod20uTUlESV9TWVNURU1fTUVTU0FHRVMucmVzZXQsdm9pZCAwLHRoaXMuX3BhcnNlVGltZVBhcmFtZXRlcihvcHRpb25zLnRpbWUpKSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLnN0b3BOb3RlPWZ1bmN0aW9uKG5vdGUsY2hhbm5lbCxvcHRpb25zKXtpZihcImFsbFwiPT09bm90ZSlyZXR1cm4gdGhpcy5zZW5kQ2hhbm5lbE1vZGUoXCJhbGxub3Rlc29mZlwiLDAsY2hhbm5lbCxvcHRpb25zKTt2YXIgblZlbG9jaXR5PTY0O3JldHVybiBvcHRpb25zPW9wdGlvbnN8fHt9LG9wdGlvbnMucmF3VmVsb2NpdHk/IWlzTmFOKG9wdGlvbnMudmVsb2NpdHkpJiZvcHRpb25zLnZlbG9jaXR5Pj0wJiZvcHRpb25zLnZlbG9jaXR5PD0xMjcmJihuVmVsb2NpdHk9b3B0aW9ucy52ZWxvY2l0eSk6IWlzTmFOKG9wdGlvbnMudmVsb2NpdHkpJiZvcHRpb25zLnZlbG9jaXR5Pj0wJiZvcHRpb25zLnZlbG9jaXR5PD0xJiYoblZlbG9jaXR5PTEyNypvcHRpb25zLnZlbG9jaXR5KSx0aGlzLl9jb252ZXJ0Tm90ZVRvQXJyYXkobm90ZSkuZm9yRWFjaChmdW5jdGlvbihpdGVtKXt3bS50b01JRElDaGFubmVscyhjaGFubmVsKS5mb3JFYWNoKGZ1bmN0aW9uKGNoKXt0aGlzLnNlbmQoKHdtLk1JRElfQ0hBTk5FTF9NRVNTQUdFUy5ub3Rlb2ZmPDw0KSsoY2gtMSksW2l0ZW0sTWF0aC5yb3VuZChuVmVsb2NpdHkpXSx0aGlzLl9wYXJzZVRpbWVQYXJhbWV0ZXIob3B0aW9ucy50aW1lKSl9LmJpbmQodGhpcykpfS5iaW5kKHRoaXMpKSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLnBsYXlOb3RlPWZ1bmN0aW9uKG5vdGUsY2hhbm5lbCxvcHRpb25zKXt2YXIgblZlbG9jaXR5PTY0O2lmKG9wdGlvbnM9b3B0aW9uc3x8e30sb3B0aW9ucy5yYXdWZWxvY2l0eT8haXNOYU4ob3B0aW9ucy52ZWxvY2l0eSkmJm9wdGlvbnMudmVsb2NpdHk+PTAmJm9wdGlvbnMudmVsb2NpdHk8PTEyNyYmKG5WZWxvY2l0eT1vcHRpb25zLnZlbG9jaXR5KTohaXNOYU4ob3B0aW9ucy52ZWxvY2l0eSkmJm9wdGlvbnMudmVsb2NpdHk+PTAmJm9wdGlvbnMudmVsb2NpdHk8PTEmJihuVmVsb2NpdHk9MTI3Km9wdGlvbnMudmVsb2NpdHkpLG9wdGlvbnMudGltZT10aGlzLl9wYXJzZVRpbWVQYXJhbWV0ZXIob3B0aW9ucy50aW1lKSx0aGlzLl9jb252ZXJ0Tm90ZVRvQXJyYXkobm90ZSkuZm9yRWFjaChmdW5jdGlvbihpdGVtKXt3bS50b01JRElDaGFubmVscyhjaGFubmVsKS5mb3JFYWNoKGZ1bmN0aW9uKGNoKXt0aGlzLnNlbmQoKHdtLk1JRElfQ0hBTk5FTF9NRVNTQUdFUy5ub3Rlb248PDQpKyhjaC0xKSxbaXRlbSxNYXRoLnJvdW5kKG5WZWxvY2l0eSldLG9wdGlvbnMudGltZSl9LmJpbmQodGhpcykpfS5iaW5kKHRoaXMpKSwhaXNOYU4ob3B0aW9ucy5kdXJhdGlvbikpe29wdGlvbnMuZHVyYXRpb248PTAmJihvcHRpb25zLmR1cmF0aW9uPTApO3ZhciBuUmVsZWFzZT02NDtvcHRpb25zLnJhd1ZlbG9jaXR5PyFpc05hTihvcHRpb25zLnJlbGVhc2UpJiZvcHRpb25zLnJlbGVhc2U+PTAmJm9wdGlvbnMucmVsZWFzZTw9MTI3JiYoblJlbGVhc2U9b3B0aW9ucy5yZWxlYXNlKTohaXNOYU4ob3B0aW9ucy5yZWxlYXNlKSYmb3B0aW9ucy5yZWxlYXNlPj0wJiZvcHRpb25zLnJlbGVhc2U8PTEmJihuUmVsZWFzZT0xMjcqb3B0aW9ucy5yZWxlYXNlKSx0aGlzLl9jb252ZXJ0Tm90ZVRvQXJyYXkobm90ZSkuZm9yRWFjaChmdW5jdGlvbihpdGVtKXt3bS50b01JRElDaGFubmVscyhjaGFubmVsKS5mb3JFYWNoKGZ1bmN0aW9uKGNoKXt0aGlzLnNlbmQoKHdtLk1JRElfQ0hBTk5FTF9NRVNTQUdFUy5ub3Rlb2ZmPDw0KSsoY2gtMSksW2l0ZW0sTWF0aC5yb3VuZChuUmVsZWFzZSldLChvcHRpb25zLnRpbWV8fHdtLnRpbWUpK29wdGlvbnMuZHVyYXRpb24pfS5iaW5kKHRoaXMpKX0uYmluZCh0aGlzKSl9cmV0dXJuIHRoaXN9LE91dHB1dC5wcm90b3R5cGUuc2VuZEtleUFmdGVydG91Y2g9ZnVuY3Rpb24obm90ZSxjaGFubmVsLHByZXNzdXJlLG9wdGlvbnMpe3ZhciB0aGF0PXRoaXM7aWYob3B0aW9ucz1vcHRpb25zfHx7fSwxPmNoYW5uZWx8fGNoYW5uZWw+MTYpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgY2hhbm5lbCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTYuXCIpOyhpc05hTihwcmVzc3VyZSl8fDA+cHJlc3N1cmV8fHByZXNzdXJlPjEpJiYocHJlc3N1cmU9LjUpO3ZhciBuUHJlc3N1cmU9TWF0aC5yb3VuZCgxMjcqcHJlc3N1cmUpO3JldHVybiB0aGlzLl9jb252ZXJ0Tm90ZVRvQXJyYXkobm90ZSkuZm9yRWFjaChmdW5jdGlvbihpdGVtKXt3bS50b01JRElDaGFubmVscyhjaGFubmVsKS5mb3JFYWNoKGZ1bmN0aW9uKGNoKXt0aGF0LnNlbmQoKHdtLk1JRElfQ0hBTk5FTF9NRVNTQUdFUy5rZXlhZnRlcnRvdWNoPDw0KSsoY2gtMSksW2l0ZW0sblByZXNzdXJlXSx0aGF0Ll9wYXJzZVRpbWVQYXJhbWV0ZXIob3B0aW9ucy50aW1lKSl9KX0pLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuc2VuZENvbnRyb2xDaGFuZ2U9ZnVuY3Rpb24oY29udHJvbGxlcix2YWx1ZSxjaGFubmVsLG9wdGlvbnMpe2lmKG9wdGlvbnM9b3B0aW9uc3x8e30sXCJzdHJpbmdcIj09dHlwZW9mIGNvbnRyb2xsZXIpe2lmKGNvbnRyb2xsZXI9d20uTUlESV9DT05UUk9MX0NIQU5HRV9NRVNTQUdFU1tjb250cm9sbGVyXSwhY29udHJvbGxlcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBjb250cm9sbGVyIG5hbWUuXCIpfWVsc2UgaWYoY29udHJvbGxlcj1NYXRoLmZsb29yKGNvbnRyb2xsZXIpLCEoY29udHJvbGxlcj49MCYmMTE5Pj1jb250cm9sbGVyKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNvbnRyb2xsZXIgbnVtYmVycyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTE5LlwiKTtpZih2YWx1ZT1NYXRoLmZsb29yKHZhbHVlKXx8MCwhKHZhbHVlPj0wJiYxMjc+PXZhbHVlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNvbnRyb2xsZXIgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEyNy5cIik7cmV0dXJuIHdtLnRvTUlESUNoYW5uZWxzKGNoYW5uZWwpLmZvckVhY2goZnVuY3Rpb24oY2gpe3RoaXMuc2VuZCgod20uTUlESV9DSEFOTkVMX01FU1NBR0VTLmNvbnRyb2xjaGFuZ2U8PDQpKyhjaC0xKSxbY29udHJvbGxlcix2YWx1ZV0sdGhpcy5fcGFyc2VUaW1lUGFyYW1ldGVyKG9wdGlvbnMudGltZSkpfS5iaW5kKHRoaXMpKSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLl9zZWxlY3RSZWdpc3RlcmVkUGFyYW1ldGVyPWZ1bmN0aW9uKHBhcmFtZXRlcixjaGFubmVsLHRpbWUpe3ZhciB0aGF0PXRoaXM7aWYocGFyYW1ldGVyWzBdPU1hdGguZmxvb3IocGFyYW1ldGVyWzBdKSwhKHBhcmFtZXRlclswXT49MCYmcGFyYW1ldGVyWzBdPD0xMjcpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIGNvbnRyb2w2NSB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTI3XCIpO2lmKHBhcmFtZXRlclsxXT1NYXRoLmZsb29yKHBhcmFtZXRlclsxXSksIShwYXJhbWV0ZXJbMV0+PTAmJnBhcmFtZXRlclsxXTw9MTI3KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSBjb250cm9sNjQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEyN1wiKTtyZXR1cm4gd20udG9NSURJQ2hhbm5lbHMoY2hhbm5lbCkuZm9yRWFjaChmdW5jdGlvbihjaCl7dGhhdC5zZW5kQ29udHJvbENoYW5nZSgxMDEscGFyYW1ldGVyWzBdLGNoYW5uZWwse3RpbWU6dGltZX0pLHRoYXQuc2VuZENvbnRyb2xDaGFuZ2UoMTAwLHBhcmFtZXRlclsxXSxjaGFubmVsLHt0aW1lOnRpbWV9KX0pLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuX3NlbGVjdE5vblJlZ2lzdGVyZWRQYXJhbWV0ZXI9ZnVuY3Rpb24ocGFyYW1ldGVyLGNoYW5uZWwsdGltZSl7dmFyIHRoYXQ9dGhpcztpZihwYXJhbWV0ZXJbMF09TWF0aC5mbG9vcihwYXJhbWV0ZXJbMF0pLCEocGFyYW1ldGVyWzBdPj0wJiZwYXJhbWV0ZXJbMF08PTEyNykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgY29udHJvbDYzIHZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMjdcIik7aWYocGFyYW1ldGVyWzFdPU1hdGguZmxvb3IocGFyYW1ldGVyWzFdKSwhKHBhcmFtZXRlclsxXT49MCYmcGFyYW1ldGVyWzFdPD0xMjcpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIGNvbnRyb2w2MiB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTI3XCIpO3JldHVybiB3bS50b01JRElDaGFubmVscyhjaGFubmVsKS5mb3JFYWNoKGZ1bmN0aW9uKGNoKXt0aGF0LnNlbmRDb250cm9sQ2hhbmdlKDk5LHBhcmFtZXRlclswXSxjaGFubmVsLHt0aW1lOnRpbWV9KSx0aGF0LnNlbmRDb250cm9sQ2hhbmdlKDk4LHBhcmFtZXRlclsxXSxjaGFubmVsLHt0aW1lOnRpbWV9KX0pLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuX3NldEN1cnJlbnRSZWdpc3RlcmVkUGFyYW1ldGVyPWZ1bmN0aW9uKGRhdGEsY2hhbm5lbCx0aW1lKXt2YXIgdGhhdD10aGlzO2lmKGRhdGE9W10uY29uY2F0KGRhdGEpLGRhdGFbMF09TWF0aC5mbG9vcihkYXRhWzBdKSwhKGRhdGFbMF0+PTAmJmRhdGFbMF08PTEyNykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgbXNiIHZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMjdcIik7cmV0dXJuIHdtLnRvTUlESUNoYW5uZWxzKGNoYW5uZWwpLmZvckVhY2goZnVuY3Rpb24oY2gpe3RoYXQuc2VuZENvbnRyb2xDaGFuZ2UoNixkYXRhWzBdLGNoYW5uZWwse3RpbWU6dGltZX0pfSksZGF0YVsxXT1NYXRoLmZsb29yKGRhdGFbMV0pLGRhdGFbMV0+PTAmJmRhdGFbMV08PTEyNyYmd20udG9NSURJQ2hhbm5lbHMoY2hhbm5lbCkuZm9yRWFjaChmdW5jdGlvbihjaCl7dGhhdC5zZW5kQ29udHJvbENoYW5nZSgzOCxkYXRhWzFdLGNoYW5uZWwse3RpbWU6dGltZX0pfSksdGhpc30sT3V0cHV0LnByb3RvdHlwZS5fZGVzZWxlY3RSZWdpc3RlcmVkUGFyYW1ldGVyPWZ1bmN0aW9uKGNoYW5uZWwsdGltZSl7dmFyIHRoYXQ9dGhpcztyZXR1cm4gd20udG9NSURJQ2hhbm5lbHMoY2hhbm5lbCkuZm9yRWFjaChmdW5jdGlvbihjaCl7dGhhdC5zZW5kQ29udHJvbENoYW5nZSgxMDEsMTI3LGNoYW5uZWwse3RpbWU6dGltZX0pLHRoYXQuc2VuZENvbnRyb2xDaGFuZ2UoMTAwLDEyNyxjaGFubmVsLHt0aW1lOnRpbWV9KX0pLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuc2V0UmVnaXN0ZXJlZFBhcmFtZXRlcj1mdW5jdGlvbihwYXJhbWV0ZXIsZGF0YSxjaGFubmVsLG9wdGlvbnMpe3ZhciB0aGF0PXRoaXM7aWYob3B0aW9ucz1vcHRpb25zfHx7fSwhQXJyYXkuaXNBcnJheShwYXJhbWV0ZXIpKXtpZighd20uTUlESV9SRUdJU1RFUkVEX1BBUkFNRVRFUltwYXJhbWV0ZXJdKXRocm93IG5ldyBFcnJvcihcIlRoZSBzcGVjaWZpZWQgcGFyYW1ldGVyIGlzIG5vdCBhdmFpbGFibGUuXCIpO3BhcmFtZXRlcj13bS5NSURJX1JFR0lTVEVSRURfUEFSQU1FVEVSW3BhcmFtZXRlcl19cmV0dXJuIHdtLnRvTUlESUNoYW5uZWxzKGNoYW5uZWwpLmZvckVhY2goZnVuY3Rpb24oY2gpe3RoYXQuX3NlbGVjdFJlZ2lzdGVyZWRQYXJhbWV0ZXIocGFyYW1ldGVyLGNoYW5uZWwsb3B0aW9ucy50aW1lKSx0aGF0Ll9zZXRDdXJyZW50UmVnaXN0ZXJlZFBhcmFtZXRlcihkYXRhLGNoYW5uZWwsb3B0aW9ucy50aW1lKSx0aGF0Ll9kZXNlbGVjdFJlZ2lzdGVyZWRQYXJhbWV0ZXIoY2hhbm5lbCxvcHRpb25zLnRpbWUpfSksdGhpc30sT3V0cHV0LnByb3RvdHlwZS5zZXROb25SZWdpc3RlcmVkUGFyYW1ldGVyPWZ1bmN0aW9uKHBhcmFtZXRlcixkYXRhLGNoYW5uZWwsb3B0aW9ucyl7dmFyIHRoYXQ9dGhpcztpZihvcHRpb25zPW9wdGlvbnN8fHt9LCEocGFyYW1ldGVyWzBdPj0wJiZwYXJhbWV0ZXJbMF08PTEyNyYmcGFyYW1ldGVyWzFdPj0wJiZwYXJhbWV0ZXJbMV08PTEyNykpdGhyb3cgbmV3IEVycm9yKFwiUG9zaXRpb24gMCBhbmQgMSBvZiB0aGUgMi1wb3NpdGlvbiBwYXJhbWV0ZXIgYXJyYXkgbXVzdCBib3RoIGJlIGJldHdlZW4gMCBhbmQgMTI3LlwiKTtyZXR1cm4gZGF0YT1bXS5jb25jYXQoZGF0YSksd20udG9NSURJQ2hhbm5lbHMoY2hhbm5lbCkuZm9yRWFjaChmdW5jdGlvbihjaCl7dGhhdC5fc2VsZWN0Tm9uUmVnaXN0ZXJlZFBhcmFtZXRlcihwYXJhbWV0ZXIsY2hhbm5lbCxvcHRpb25zLnRpbWUpLHRoYXQuX3NldEN1cnJlbnRSZWdpc3RlcmVkUGFyYW1ldGVyKGRhdGEsY2hhbm5lbCxvcHRpb25zLnRpbWUpLHRoYXQuX2Rlc2VsZWN0UmVnaXN0ZXJlZFBhcmFtZXRlcihjaGFubmVsLG9wdGlvbnMudGltZSl9KSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLmluY3JlbWVudFJlZ2lzdGVyZWRQYXJhbWV0ZXI9ZnVuY3Rpb24ocGFyYW1ldGVyLGNoYW5uZWwsb3B0aW9ucyl7dmFyIHRoYXQ9dGhpcztpZihvcHRpb25zPW9wdGlvbnN8fHt9LCFBcnJheS5pc0FycmF5KHBhcmFtZXRlcikpe2lmKCF3bS5NSURJX1JFR0lTVEVSRURfUEFSQU1FVEVSW3BhcmFtZXRlcl0pdGhyb3cgbmV3IEVycm9yKFwiVGhlIHNwZWNpZmllZCBwYXJhbWV0ZXIgaXMgbm90IGF2YWlsYWJsZS5cIik7cGFyYW1ldGVyPXdtLk1JRElfUkVHSVNURVJFRF9QQVJBTUVURVJbcGFyYW1ldGVyXX1yZXR1cm4gd20udG9NSURJQ2hhbm5lbHMoY2hhbm5lbCkuZm9yRWFjaChmdW5jdGlvbihjaCl7dGhhdC5fc2VsZWN0UmVnaXN0ZXJlZFBhcmFtZXRlcihwYXJhbWV0ZXIsY2hhbm5lbCxvcHRpb25zLnRpbWUpLHRoYXQuc2VuZENvbnRyb2xDaGFuZ2UoOTYsMCxjaGFubmVsLHt0aW1lOm9wdGlvbnMudGltZX0pLHRoYXQuX2Rlc2VsZWN0UmVnaXN0ZXJlZFBhcmFtZXRlcihjaGFubmVsLG9wdGlvbnMudGltZSl9KSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLmRlY3JlbWVudFJlZ2lzdGVyZWRQYXJhbWV0ZXI9ZnVuY3Rpb24ocGFyYW1ldGVyLGNoYW5uZWwsb3B0aW9ucyl7aWYob3B0aW9ucz1vcHRpb25zfHx7fSwhQXJyYXkuaXNBcnJheShwYXJhbWV0ZXIpKXtpZighd20uTUlESV9SRUdJU1RFUkVEX1BBUkFNRVRFUltwYXJhbWV0ZXJdKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgc3BlY2lmaWVkIHBhcmFtZXRlciBpcyBub3QgYXZhaWxhYmxlLlwiKTtwYXJhbWV0ZXI9d20uTUlESV9SRUdJU1RFUkVEX1BBUkFNRVRFUltwYXJhbWV0ZXJdfXJldHVybiB3bS50b01JRElDaGFubmVscyhjaGFubmVsKS5mb3JFYWNoKGZ1bmN0aW9uKGNoKXt0aGlzLl9zZWxlY3RSZWdpc3RlcmVkUGFyYW1ldGVyKHBhcmFtZXRlcixjaGFubmVsLG9wdGlvbnMudGltZSksdGhpcy5zZW5kQ29udHJvbENoYW5nZSg5NywwLGNoYW5uZWwse3RpbWU6b3B0aW9ucy50aW1lfSksdGhpcy5fZGVzZWxlY3RSZWdpc3RlcmVkUGFyYW1ldGVyKGNoYW5uZWwsb3B0aW9ucy50aW1lKX0uYmluZCh0aGlzKSksdGhpc30sT3V0cHV0LnByb3RvdHlwZS5zZXRQaXRjaEJlbmRSYW5nZT1mdW5jdGlvbihzZW1pdG9uZXMsY2VudHMsY2hhbm5lbCxvcHRpb25zKXt2YXIgdGhhdD10aGlzO2lmKG9wdGlvbnM9b3B0aW9uc3x8e30sc2VtaXRvbmVzPU1hdGguZmxvb3Ioc2VtaXRvbmVzKXx8MCwhKHNlbWl0b25lcz49MCYmMTI3Pj1zZW1pdG9uZXMpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIHNlbWl0b25lcyB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTI3XCIpO2lmKGNlbnRzPU1hdGguZmxvb3IoY2VudHMpfHwwLCEoY2VudHM+PTAmJjEyNz49Y2VudHMpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIGNlbnRzIHZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMjdcIik7cmV0dXJuIHdtLnRvTUlESUNoYW5uZWxzKGNoYW5uZWwpLmZvckVhY2goZnVuY3Rpb24oY2gpe3RoYXQuc2V0UmVnaXN0ZXJlZFBhcmFtZXRlcihcInBpdGNoYmVuZHJhbmdlXCIsW3NlbWl0b25lcyxjZW50c10sY2hhbm5lbCx7dGltZTpvcHRpb25zLnRpbWV9KX0pLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuc2V0TW9kdWxhdGlvblJhbmdlPWZ1bmN0aW9uKHNlbWl0b25lcyxjZW50cyxjaGFubmVsLG9wdGlvbnMpe3ZhciB0aGF0PXRoaXM7aWYob3B0aW9ucz1vcHRpb25zfHx7fSxzZW1pdG9uZXM9TWF0aC5mbG9vcihzZW1pdG9uZXMpfHwwLCEoc2VtaXRvbmVzPj0wJiYxMjc+PXNlbWl0b25lcykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgc2VtaXRvbmVzIHZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMjdcIik7aWYoY2VudHM9TWF0aC5mbG9vcihjZW50cyl8fDAsIShjZW50cz49MCYmMTI3Pj1jZW50cykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgY2VudHMgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEyN1wiKTtyZXR1cm4gd20udG9NSURJQ2hhbm5lbHMoY2hhbm5lbCkuZm9yRWFjaChmdW5jdGlvbihjaCl7dGhhdC5zZXRSZWdpc3RlcmVkUGFyYW1ldGVyKFwibW9kdWxhdGlvbnJhbmdlXCIsW3NlbWl0b25lcyxjZW50c10sY2hhbm5lbCx7dGltZTpvcHRpb25zLnRpbWV9KX0pLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuc2V0TWFzdGVyVHVuaW5nPWZ1bmN0aW9uKHZhbHVlLGNoYW5uZWwsb3B0aW9ucyl7dmFyIHRoYXQ9dGhpcztpZihvcHRpb25zPW9wdGlvbnN8fHt9LHZhbHVlPXBhcnNlRmxvYXQodmFsdWUpfHwwLC02NT49dmFsdWV8fHZhbHVlPj02NCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSB2YWx1ZSBtdXN0IGJlIGEgZGVjaW1hbCBudW1iZXIgbGFyZ2VyIHRoYW4gLTY1IGFuZCBzbWFsbGVyIHRoYW4gNjQuXCIpO3ZhciBjb2Fyc2U9TWF0aC5mbG9vcih2YWx1ZSkrNjQsZmluZT12YWx1ZS1NYXRoLmZsb29yKHZhbHVlKTtmaW5lPU1hdGgucm91bmQoKGZpbmUrMSkvMioxNjM4Myk7dmFyIG1zYj1maW5lPj43JjEyNyxsc2I9MTI3JmZpbmU7cmV0dXJuIHdtLnRvTUlESUNoYW5uZWxzKGNoYW5uZWwpLmZvckVhY2goZnVuY3Rpb24oY2gpe3RoYXQuc2V0UmVnaXN0ZXJlZFBhcmFtZXRlcihcImNoYW5uZWxjb2Fyc2V0dW5pbmdcIixjb2Fyc2UsY2hhbm5lbCx7dGltZTpvcHRpb25zLnRpbWV9KSx0aGF0LnNldFJlZ2lzdGVyZWRQYXJhbWV0ZXIoXCJjaGFubmVsZmluZXR1bmluZ1wiLFttc2IsbHNiXSxjaGFubmVsLHt0aW1lOm9wdGlvbnMudGltZX0pfSksdGhpc30sT3V0cHV0LnByb3RvdHlwZS5zZXRUdW5pbmdQcm9ncmFtPWZ1bmN0aW9uKHZhbHVlLGNoYW5uZWwsb3B0aW9ucyl7dmFyIHRoYXQ9dGhpcztpZihvcHRpb25zPW9wdGlvbnN8fHt9LHZhbHVlPU1hdGguZmxvb3IodmFsdWUpLCEodmFsdWU+PTAmJjEyNz49dmFsdWUpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIHByb2dyYW0gdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEyN1wiKTtyZXR1cm4gd20udG9NSURJQ2hhbm5lbHMoY2hhbm5lbCkuZm9yRWFjaChmdW5jdGlvbihjaCl7dGhhdC5zZXRSZWdpc3RlcmVkUGFyYW1ldGVyKFwidHVuaW5ncHJvZ3JhbVwiLHZhbHVlLGNoYW5uZWwse3RpbWU6b3B0aW9ucy50aW1lfSl9KSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLnNldFR1bmluZ0Jhbms9ZnVuY3Rpb24odmFsdWUsY2hhbm5lbCxvcHRpb25zKXt2YXIgdGhhdD10aGlzO2lmKG9wdGlvbnM9b3B0aW9uc3x8e30sdmFsdWU9TWF0aC5mbG9vcih2YWx1ZSl8fDAsISh2YWx1ZT49MCYmMTI3Pj12YWx1ZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgYmFuayB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTI3XCIpO3JldHVybiB3bS50b01JRElDaGFubmVscyhjaGFubmVsKS5mb3JFYWNoKGZ1bmN0aW9uKGNoKXt0aGF0LnNldFJlZ2lzdGVyZWRQYXJhbWV0ZXIoXCJ0dW5pbmdiYW5rXCIsdmFsdWUsY2hhbm5lbCx7dGltZTpvcHRpb25zLnRpbWV9KX0pLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuc2VuZENoYW5uZWxNb2RlPWZ1bmN0aW9uKGNvbW1hbmQsdmFsdWUsY2hhbm5lbCxvcHRpb25zKXtpZihvcHRpb25zPW9wdGlvbnN8fHt9LFwic3RyaW5nXCI9PXR5cGVvZiBjb21tYW5kKXtpZihjb21tYW5kPXdtLk1JRElfQ0hBTk5FTF9NT0RFX01FU1NBR0VTW2NvbW1hbmRdLCFjb21tYW5kKXRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGNoYW5uZWwgbW9kZSBtZXNzYWdlIG5hbWUuXCIpfWVsc2UgaWYoY29tbWFuZD1NYXRoLmZsb29yKGNvbW1hbmQpLCEoY29tbWFuZD49MTIwJiYxMjc+PWNvbW1hbmQpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQ2hhbm5lbCBtb2RlIG51bWVyaWNhbCBpZGVudGlmaWVycyBtdXN0IGJlIGJldHdlZW4gMTIwIGFuZCAxMjcuXCIpO2lmKHZhbHVlPU1hdGguZmxvb3IodmFsdWUpfHwwLDA+dmFsdWV8fHZhbHVlPjEyNyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlZhbHVlIG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDEyNy5cIik7cmV0dXJuIHdtLnRvTUlESUNoYW5uZWxzKGNoYW5uZWwpLmZvckVhY2goZnVuY3Rpb24oY2gpe3RoaXMuc2VuZCgod20uTUlESV9DSEFOTkVMX01FU1NBR0VTLmNoYW5uZWxtb2RlPDw0KSsoY2gtMSksW2NvbW1hbmQsdmFsdWVdLHRoaXMuX3BhcnNlVGltZVBhcmFtZXRlcihvcHRpb25zLnRpbWUpKX0uYmluZCh0aGlzKSksdGhpc30sT3V0cHV0LnByb3RvdHlwZS5zZW5kUHJvZ3JhbUNoYW5nZT1mdW5jdGlvbihwcm9ncmFtLGNoYW5uZWwsb3B0aW9ucyl7XG52YXIgdGhhdD10aGlzO2lmKG9wdGlvbnM9b3B0aW9uc3x8e30scHJvZ3JhbT1NYXRoLmZsb29yKHByb2dyYW0pLGlzTmFOKHByb2dyYW0pfHwwPnByb2dyYW18fHByb2dyYW0+MTI3KXRocm93IG5ldyBSYW5nZUVycm9yKFwiUHJvZ3JhbSBudW1iZXJzIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMjcuXCIpO3JldHVybiB3bS50b01JRElDaGFubmVscyhjaGFubmVsKS5mb3JFYWNoKGZ1bmN0aW9uKGNoKXt0aGF0LnNlbmQoKHdtLk1JRElfQ0hBTk5FTF9NRVNTQUdFUy5wcm9ncmFtY2hhbmdlPDw0KSsoY2gtMSksW3Byb2dyYW1dLHRoYXQuX3BhcnNlVGltZVBhcmFtZXRlcihvcHRpb25zLnRpbWUpKX0pLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuc2VuZENoYW5uZWxBZnRlcnRvdWNoPWZ1bmN0aW9uKHByZXNzdXJlLGNoYW5uZWwsb3B0aW9ucyl7dmFyIHRoYXQ9dGhpcztvcHRpb25zPW9wdGlvbnN8fHt9LHByZXNzdXJlPXBhcnNlRmxvYXQocHJlc3N1cmUpLChpc05hTihwcmVzc3VyZSl8fDA+cHJlc3N1cmV8fHByZXNzdXJlPjEpJiYocHJlc3N1cmU9LjUpO3ZhciBuUHJlc3N1cmU9TWF0aC5yb3VuZCgxMjcqcHJlc3N1cmUpO3JldHVybiB3bS50b01JRElDaGFubmVscyhjaGFubmVsKS5mb3JFYWNoKGZ1bmN0aW9uKGNoKXt0aGF0LnNlbmQoKHdtLk1JRElfQ0hBTk5FTF9NRVNTQUdFUy5jaGFubmVsYWZ0ZXJ0b3VjaDw8NCkrKGNoLTEpLFtuUHJlc3N1cmVdLHRoYXQuX3BhcnNlVGltZVBhcmFtZXRlcihvcHRpb25zLnRpbWUpKX0pLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuc2VuZFBpdGNoQmVuZD1mdW5jdGlvbihiZW5kLGNoYW5uZWwsb3B0aW9ucyl7dmFyIHRoYXQ9dGhpcztpZihvcHRpb25zPW9wdGlvbnN8fHt9LGlzTmFOKGJlbmQpfHwtMT5iZW5kfHxiZW5kPjEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJQaXRjaCBiZW5kIHZhbHVlIG11c3QgYmUgYmV0d2VlbiAtMSBhbmQgMS5cIik7dmFyIG5MZXZlbD1NYXRoLnJvdW5kKChiZW5kKzEpLzIqMTYzODMpLG1zYj1uTGV2ZWw+PjcmMTI3LGxzYj0xMjcmbkxldmVsO3JldHVybiB3bS50b01JRElDaGFubmVscyhjaGFubmVsKS5mb3JFYWNoKGZ1bmN0aW9uKGNoKXt0aGF0LnNlbmQoKHdtLk1JRElfQ0hBTk5FTF9NRVNTQUdFUy5waXRjaGJlbmQ8PDQpKyhjaC0xKSxbbHNiLG1zYl0sdGhhdC5fcGFyc2VUaW1lUGFyYW1ldGVyKG9wdGlvbnMudGltZSkpfSksdGhpc30sT3V0cHV0LnByb3RvdHlwZS5fcGFyc2VUaW1lUGFyYW1ldGVyPWZ1bmN0aW9uKHRpbWUpe3ZhciBwYXJzZWQsdmFsdWU7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHRpbWUmJlwiK1wiPT09dGltZS5zdWJzdHJpbmcoMCwxKT8ocGFyc2VkPXBhcnNlRmxvYXQodGltZSkscGFyc2VkJiZwYXJzZWQ+MCYmKHZhbHVlPXdtLnRpbWUrcGFyc2VkKSk6KHBhcnNlZD1wYXJzZUZsb2F0KHRpbWUpLHBhcnNlZD53bS50aW1lJiYodmFsdWU9cGFyc2VkKSksdmFsdWV9LE91dHB1dC5wcm90b3R5cGUuX2NvbnZlcnROb3RlVG9BcnJheT1mdW5jdGlvbihub3RlKXt2YXIgbm90ZXM9W107cmV0dXJuIEFycmF5LmlzQXJyYXkobm90ZSl8fChub3RlPVtub3RlXSksbm90ZS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pe25vdGVzLnB1c2god20uZ3Vlc3NOb3RlTnVtYmVyKGl0ZW0pKX0pLG5vdGVzfSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJlwib2JqZWN0XCI9PXR5cGVvZiBkZWZpbmUuYW1kP2RlZmluZShbXSxmdW5jdGlvbigpe3JldHVybiB3bX0pOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPXdtOnNjb3BlLldlYk1pZGl8fChzY29wZS5XZWJNaWRpPXdtKX0odGhpcyk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3dlYm1pZGkvd2VibWlkaS5taW4uanNcbi8vIG1vZHVsZSBpZCA9IDE1NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG5cdHRocm93IG5ldyBFcnJvcihcImRlZmluZSBjYW5ub3QgYmUgdXNlZCBpbmRpcmVjdFwiKTtcclxufTtcclxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gKHdlYnBhY2spL2J1aWxkaW4vYW1kLWRlZmluZS5qc1xuLy8gbW9kdWxlIGlkID0gMTU2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIGdsb2JhbHMgX193ZWJwYWNrX2FtZF9vcHRpb25zX18gKi9cclxubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXztcclxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gKHdlYnBhY2spL2J1aWxkaW4vYW1kLW9wdGlvbnMuanNcbi8vIG1vZHVsZSBpZCA9IDE1N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAoaWdub3JlZCkgKi9cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyB1dGlsIChpZ25vcmVkKVxuLy8gbW9kdWxlIGlkID0gMTU4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgNjNlOTgzOWRkZTIyMTk5YmUyNDkiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL193a3MuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL34vYnVmZmVyL2luZGV4LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oaWRlLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vfi9wcm9jZXNzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fZHVwbGV4LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ZhaWxzLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9+L2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29mLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2N0eC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLXV0aWwtaXMvbGliL3V0aWwuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9+L3RvbmUvYnVpbGQvVG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1waWUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2xpYi91dGlsLmpzIiwid2VicGFjazovLy8uL34vYnVmZmVyLXNoaW1zL2luZGV4LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZWZpbmVkLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RvbS1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQta2V5LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pbnRlZ2VyLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL193a3MtZXh0LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovLy8uL34vZXZlbnRzL2V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9+L25vZGUtbGlicy1icm93c2VyL34vc3RyaW5nX2RlY29kZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9wcm9jZXNzLW5leHRpY2stYXJncy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV93cml0YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWRhYmxlLXN0cmVhbS9yZWFkYWJsZS1icm93c2VyLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9saWIva2FsaW1iYS5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbGliL3NjYWxlcy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbGliL3VpLmpzIiwid2VicGFjazovLy8uL34vYmFiZWwtcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vfi9uZXh1c3VpL2Rpc3QvTmV4dXNVSS5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvYXNzaWduLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2h0bWwuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItY2FsbC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWRldGVjdC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BuLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Rhc2suanMiLCJ3ZWJwYWNrOi8vLy4vfi9pc2FycmF5L2luZGV4LmpzIiwid2VicGFjazovLy8uL34vcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIiwid2VicGFjazovLy8uL34vcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0tYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9+L3RpbWVycy1icm93c2VyaWZ5L21haW4uanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2RhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2xpYi9rZXlzLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9saWIvbWlkaS5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvaGVscGVycy90b0FycmF5LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbGliL2ludG9uYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2xpYi9zdGFydEF1ZGlvQ29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9hcnJheS9mcm9tLmpzIiwid2VicGFjazovLy8uL34vYmFiZWwtcnVudGltZS9jb3JlLWpzL2dldC1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9pcy1pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9tYXRoL2xvZzIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9iYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vfi9iYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sL2l0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL34vYmFiZWwtcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly8vLi9+L2Jhc2U2NC1qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9mbi9hcnJheS9mcm9tLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L2ZuL2dldC1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9mbi9pcy1pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9mbi9tYXRoL2xvZzIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2Fzc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9mbi9wcm9taXNlLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9mbi9zeW1ib2wvaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19lbnVtLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZm9yLW9mLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ludm9rZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLXN0ZXAuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fa2V5b2YuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbWV0YS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19taWNyb3Rhc2suanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHBzLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BuLWV4dC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ3BvLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1zYXAuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC1zcGVjaWVzLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWluZGV4LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmlzLWl0ZXJhYmxlLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5LmZyb20uanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYubWF0aC5sb2cyLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovLy8uL34vY3N2LXBhcnNlL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L2ZpbGUtc2F2ZXIvRmlsZVNhdmVyLmpzIiwid2VicGFjazovLy8uL34vaWVlZTc1NC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L21pZGktd3JpdGVyLWpzL2J1aWxkL2luZGV4LmpzIiwid2VicGFjazovLy8uL34vbm90ZS1wYXJzZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFkYWJsZS1zdHJlYW0vZHVwbGV4LWJyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvQnVmZmVyTGlzdC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWRhYmxlLXN0cmVhbS9wYXNzdGhyb3VnaC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWRhYmxlLXN0cmVhbS90cmFuc2Zvcm0uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFkYWJsZS1zdHJlYW0vd3JpdGFibGUtYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9+L3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9zdHJlYW0tYnJvd3NlcmlmeS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3RvbmFsLW1pZGkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi91dGlsLWRlcHJlY2F0ZS9icm93c2VyLmpzIiwid2VicGFjazovLy8uL34vdXRpbC9+L2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi91dGlsL3N1cHBvcnQvaXNCdWZmZXJCcm93c2VyLmpzIiwid2VicGFjazovLy8uL34vdXRpbC91dGlsLmpzIiwid2VicGFjazovLy8uL34vd2VibWlkaS93ZWJtaWRpLm1pbi5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vYW1kLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vYW1kLW9wdGlvbnMuanMiLCJ3ZWJwYWNrOi8vL3V0aWwgKGlnbm9yZWQpIl0sIm5hbWVzIjpbImNob2ljZSIsIm1vZCIsIm5vcm0iLCJyZXF1ZXN0QXVkaW9Db250ZXh0IiwiZGF0YVVSSXRvQmxvYiIsImZ0b20iLCJtdG9mIiwidGFwIiwiZ2V0X2RpZmZfYm91bmRzIiwiZ2V0X2JvdW5kcyIsInRyYW5zcG9zZSIsImlzSXBob25lIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwibWF0Y2giLCJpc0lwYWQiLCJpc0FuZHJvaWQiLCJpc01vYmlsZSIsImlzRGVza3RvcCIsImRvY3VtZW50IiwiYm9keSIsImNsYXNzTGlzdCIsImFkZCIsImJyb3dzZXIiLCJhIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwibGVuZ3RoIiwibiIsIm0iLCJtaW4iLCJtYXgiLCJmbiIsImNvbnRhaW5lciIsImNyZWF0ZUVsZW1lbnQiLCJidXR0b24iLCJpbm5lckhUTUwiLCJzdHlsZSIsInBvc2l0aW9uIiwid2lkdGgiLCJoZWlnaHQiLCJ6SW5kZXgiLCJ0b3AiLCJsZWZ0IiwiYmFja2dyb3VuZENvbG9yIiwicGFkZGluZyIsImNvbG9yIiwiZm9udEZhbWlseSIsImJvcmRlclJhZGl1cyIsInRyYW5zZm9ybSIsInRleHRBbGlnbiIsImxpbmVIZWlnaHQiLCJhcHBlbmRDaGlsZCIsIlN0YXJ0QXVkaW9Db250ZXh0Iiwic2V0Q29udGV4dCIsIlRvbmUiLCJjb250ZXh0Iiwib24iLCJvblN0YXJ0ZWQiLCJyZW1vdmUiLCJkYXRhVVJJIiwiYnl0ZVN0cmluZyIsImF0b2IiLCJzcGxpdCIsIm1pbWVTdHJpbmciLCJhYiIsIkFycmF5QnVmZmVyIiwiaWEiLCJVaW50OEFycmF5IiwiaSIsImNoYXJDb2RlQXQiLCJibG9iIiwiQmxvYiIsInR5cGUiLCJmIiwicG93IiwiZSIsInByZXNzIiwicm93cyIsImRpZmZzIiwibWFwIiwicm93X21pbiIsImFwcGx5Iiwicm93Iiwicm93X21heCIsImRhdGFzZXQiLCJsaW5lcyIsInBhcnNlRmxvYXQiLCJyZWR1Y2UiLCJiIiwieiIsImJiIiwiSW5maW5pdHkiLCJpX2xlbiIsImpfbGVuIiwiVCIsIkFycmF5IiwiaiIsInBsYXllcl9jb3VudCIsInNhbXBsZV9pbmRleCIsImNvbXByZXNzb3IiLCJDb21wcmVzc29yIiwidG9NYXN0ZXIiLCJzYW1wbGVzIiwicm9vdCIsImZvckVhY2giLCJzYW1wbGUiLCJwbGF5ZXJzIiwiaW5kZXgiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJwbGF5ZXIiLCJQbGF5ZXIiLCJ1cmwiLCJyZXRyaWdnZXIiLCJwbGF5YmFja1JhdGUiLCJjb25uZWN0IiwicHVzaCIsInBsYXkiLCJmcmVxIiwidm9sdW1lIiwiYmVzdCIsInZhbHVlIiwic2V0VGltZW91dCIsInN0YXJ0IiwibWVhbnRvbmUiLCJzaGFyZXMiLCJzaGFyZXNfc3VtIiwibWF2aWxhIiwiY2FybG9zX2FscGhhIiwibGFtb250ZSIsImNvbHVuZGkiLCJsaXVfbWFqb3IiLCJsaXVfcGVudGF0b25pYyIsImxpdV9taW5vciIsImxpdV9tZWxvZGljX21pbm9yIiwic2NhbGVzIiwiaW50ZXJ2YWxzIiwibmFtZSIsInRldCIsInNjbCIsIm9wdCIsIkludG9uYXRpb24iLCJzY2FsZSIsImhhbmRsZUNoYW5nZSIsImJ1aWxkIiwiaGVhZGluZyIsImFkZEV2ZW50TGlzdGVuZXIiLCJwaWNrIiwic2NhbGVfbGlzdCIsImJ1aWxkX29wdGlvbnMiLCJlbCIsIm9wdGlvbiIsInRhcmdldCIsImN1cnJlbnQiLCJvbkNoYW5nZSIsIm5hbWVzIiwidXBkYXRlX3ZhbHVlX29uX2NoYW5nZSIsInVwZGF0ZV9yYWRpb192YWx1ZV9vbl9jaGFuZ2UiLCJueCIsImlkIiwiaXNfaW50IiwibGFiZWwiLCJxdWVyeVNlbGVjdG9yIiwidXBkYXRlIiwicGFyc2VJbnQiLCJ2IiwidG9GaXhlZCIsInZhbHVlcyIsIm9sZF92IiwiYWN0aXZlIiwibGlzdHMiLCJsaXN0Iiwia2V5IiwiZmlsZXMiLCJwYXJzZSIsInJlcXVpcmUiLCJkYXRhUHJvbWlzZXMiLCJmZXRjaCIsInRoZW4iLCJ0ZXh0IiwicmVzb2x2ZSIsInJlamVjdCIsIl8iLCJoIiwic2hpZnQiLCJmaWx0ZXIiLCJzIiwiYWxsUHJvbWlzZXMiLCJhbGwiLCJkYXRhIiwibG9hZCIsImtleXMiLCJrZXlfbnVtYmVycyIsImxldHRlcnMiLCJudW1iZXJzIiwiY2FsbGJhY2siLCJ0b1VwcGVyQ2FzZSIsImsiLCJrZXlkb3duIiwiYWx0S2V5IiwiY3RybEtleSIsIm1ldGFLZXkiLCJzdG9wUHJvcGFnYXRpb24iLCJhY3RpdmVFbGVtZW50IiwiSFRNTElucHV0RWxlbWVudCIsImtleUNvZGUiLCJzaGlmdEtleSIsImxpc3RlbiIsIm1pZGlfaW5pdCIsInBsYXlfbm90ZSIsInBsYXlfbWlkaV9ub3RlIiwicGxheV9zZXF1ZW5jZSIsInBsYXlfaW50ZXJ2YWxfc2VxdWVuY2UiLCJleHBvcnRfcGF0dGVybl9hc19taWRpIiwibWlkaURldmljZSIsInNlbmRQaXRjaEJlbmQiLCJNaWRpV3JpdGVyIiwibm90ZV92YWx1ZXMiLCJXZWJNaWRpIiwiZW5hYmxlIiwibWlkaV9yZWFkeSIsImVyciIsImNvbnNvbGUiLCJlcnJvciIsIm91dHB1dHMiLCJsb2ciLCJpbnB1dHMiLCJmaWx0ZXJlZCIsIm91dHB1dCIsImR1cmF0aW9uIiwiY2hhbm5lbCIsImV4cG9ydGluZyIsInJlc3QiLCJkZWZlciIsInJvdW5kIiwib2Zmc2V0Iiwib2N0YXZlIiwibWlkaV9ub3RlIiwiY2VudHMiLCJub3RlIiwiRnJlcXVlbmN5IiwidG9Ob3RlIiwiZGVmZXJfdGltZSIsIlRyYW5zcG9ydCIsImJwbSIsImthbGltYmEiLCJwbGF5Tm90ZSIsImJvdW5kcyIsImRpZmYiLCJub3RlX3RpbWUiLCJjb3VudCIsInkiLCJ4IiwibXVsdGlwbHkiLCJyb3dfZjAiLCJyb3dfcm9vdCIsIm5vdGVzIiwiaW50ZXJ2YWwiLCJkYXRhc2V0TmFtZSIsInRlbXBvIiwidGltaW5nSW5kZXgiLCJwbGF5X2ZuIiwidGltaW5ncyIsIndhaXQiLCJtaWRpX3RyYWNrIiwiVHJhY2siLCJzZXRUZW1wbyIsImxlbiIsImFkZEV2ZW50IiwiTm90ZUV2ZW50IiwicGl0Y2giLCJ3cml0ZXIiLCJXcml0ZXIiLCJkYXRhVXJpIiwiREVGQVVMVF9CUE0iLCJyZWNvcmRlciIsInJlY29yZGluZyIsIm1hc3NfZmllbGRzIiwibWFzc19pIiwiZGF0YXNldHMiLCJndW5fdmlvbGVuY2VfYnlfbW9udGgiLCJtYXNzX3Nob290aW5nc19mcm9tX2NvbHVtYmluZSIsInBsYXlfbWFzc19zaG9vdGluZ3MiLCJyZXZlcnNlIiwiZGF0ZSIsIm1pbl95IiwiZGF0ZXMiLCJkIiwidG90YWxfdmljdGltcyIsInJlYWR5IiwibWFzc19yZXN0IiwidG90YWwiLCJtaWRpX25vdGVzIiwiY2FzZXMiLCJjYXNlIiwiZmF0YWxpdGllcyIsImluanVyZWQiLCJqb2luIiwicGxheV9uZXh0IiwidGltaW5nIiwibmV3X2kiLCJwaWNrX2RhdGFzZXQiLCJkaWFsX3NpemUiLCJOZXh1cyIsIkRpYWwiLCJzaXplIiwic3RlcCIsIlJhZGlvQnV0dG9uIiwibnVtYmVyT2ZCdXR0b25zIiwiZXhwb3J0X21pZGlfYnV0dG9uIiwicmVjb3JkX21pZGlfYnV0dG9uIiwic2F2ZUFzIiwibW9kdWxlIiwiZXhwb3J0cyIsImdlbmVyYXRlIiwicHJvdG90eXBlIiwiZ2VuZXJhdGVfc2NsIiwiZ2VuZXJhdGVfdGV0IiwiZ2VuZXJhdGVfaW50ZXJ2YWxzIiwiaW50ZXJ2YWxfbGlzdCIsInBhcnNlSW50ZXJ2YWwiLCJjYWxsIiwicG9wIiwicGFyc2VJbnRlcnZhbFN0cmluZyIsImJpbmQiLCJyYXRpbyIsInBhcnNlX3NjbCIsImRlc2NyaXB0aW9uIiwiY29tbWVudHMiLCJ0cmltIiwibGluZSIsImluZGV4T2YiLCJyZXBsYWNlIiwicmFuZ2UiLCJzZXRfcm9vdCIsInF1YW50aXplX2ZyZXF1ZW5jeSIsInNjYWxlX2YiLCJxdWFudGl6ZV9pbmRleCIsInBhcnNlX2ludGVydmFsIiwicHAiLCJudW0iLCJkZW4iLCJpc05hTiIsInBhcnNlX2ludGVydmFsX3N0cmluZyIsImZhY3RvcnkiLCJkZWZpbmUiLCJfdGFwTGlzdGVuZXJzIiwiX29uU3RhcnRlZCIsImN0eCIsImVsZW1lbnQiLCJpc0FycmF5IiwiTm9kZUxpc3QiLCJxdWVyeVNlbGVjdG9yQWxsIiwianF1ZXJ5IiwidG9BcnJheSIsIkVsZW1lbnQiLCJUYXBMaXN0ZW5lciIsIm9uVGFwIiwiY2IiLCJpc1N0YXJ0ZWQiLCJzdGF0ZSIsIl9kcmFnZ2VkIiwiX2VsZW1lbnQiLCJfYmluZGVkTW92ZSIsIl9tb3ZlZCIsIl9iaW5kZWRFbmQiLCJfZW5kZWQiLCJkaXNwb3NlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm9zYyIsImNyZWF0ZU9zY2lsbGF0b3IiLCJzaWxlbnQiLCJjcmVhdGVHYWluIiwiZ2FpbiIsImRlc3RpbmF0aW9uIiwibm93IiwiY3VycmVudFRpbWUiLCJzdG9wIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1EQUEyQyxjQUFjOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7QUNoRUEsNkJBQTZCO0FBQzdCLHFDQUFxQyxnQzs7Ozs7O0FDRHJDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCOzs7Ozs7QUNWQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsZ0M7Ozs7Ozs7QUNIdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsbURBQW1EO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsVUFBVTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHVDQUF1QyxTQUFTO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELEVBQUU7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGVBQWU7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0Esd0JBQXdCLFFBQVE7QUFDaEM7QUFDQSxxQkFBcUIsZUFBZTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLG1CQUFtQixjQUFjO0FBQ2pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQsT0FBTztBQUM5RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdURBQXVELE9BQU87QUFDOUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNB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Q0w7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDdEJBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBLEU7Ozs7OztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRTs7Ozs7O0FDbkJBO0FBQ0E7QUFDQSxFOzs7Ozs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEU7Ozs7Ozs7QUNQQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0IsY0FBYztBQUNkO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0EsVUFBVTtBQUNWLENBQUMsRTs7Ozs7O0FDaEJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOzs7Ozs7OztBQzFHQTs7QUFFQTtBQUNBO0FBQ0E7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QUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsVUFBVTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLGFBQWE7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFF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QUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRkFBbUY7QUFDbkY7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLGNBQWM7QUFDNUIsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOERBQThELDBCQUEwQjtBQUN4RjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsZUFBZSxLQUFLO0FBQ3BCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEIsZUFBZSxRQUFRO0FBQ3ZCLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQixlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixlQUFlLE1BQU07QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQixlQUFlLE1BQU07QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixlQUFlLFdBQVc7QUFDMUIsZUFBZSxVQUFVO0FBQ3pCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckIsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsY0FBYyxLQUFLO0FBQ25CO0FBQ0EsY0FBYyxLQUFLO0FBQ25CO0FBQ0EsY0FBYyxZQUFZO0FBQzFCO0FBQ0EsY0FBYyxLQUFLO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFD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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsZ0JBQWdCLGNBQWM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBLGNBQWMsZ0JBQWdCO0FBQzlCLGNBQWMsU0FBUztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsY0FBYyxRQUFRO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsY0FBYyxRQUFRO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGNBQWM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixZQUFZO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBLGNBQWMsUUFBUTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2YsYUFBYSxZQUFZO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGVBQWU7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixjQUFjLGlCQUFpQjtBQUMvQixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsZUFBZSxjQUFjO0FBQzdCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsT0FBTztBQUNyQixnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLFFBQVE7QUFDdEIsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxNQUFNO0FBQ3BCLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGNBQWMsT0FBTztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLEtBQUs7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsb0JBQW9CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixjQUFjLE9BQU87QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLDBCQUEwQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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L0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsTUFBTTtBQUNwQixjQUFjLGVBQWU7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxjQUFjLGNBQWM7QUFDNUIsY0FBYyxjQUFjO0FBQzVCLGdCQUFnQixlQUFlO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FB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QSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxnQkFBZ0IsWUFBWTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxjQUFjLGVBQWU7QUFDN0I7QUFDQSxnQkFBZ0IsWUFBWTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixZQUFZO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGVBQWU7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCLGdCQUFnQixZQUFZO0FBQzVCO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCLGdCQUFnQixZQUFZO0FBQzVCO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixZQUFZO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixZQUFZO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsNEJBQTRCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsWUFBWTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxvQkFBb0I7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGlCQUFpQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGNBQWMsbUJBQW1CO0FBQ2pDLGNBQWMsVUFBVTtBQUN4QjtBQUNBO0FBQ0EsY0FBYyxVQUFVO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyx3QkFBd0I7QUFDdEMsZ0JBQWdCLFlBQVk7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsWUFBWTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixZQUFZO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxjQUFjLGFBQWE7QUFDM0IsZUFBZSxZQUFZO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixjQUFjO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxRQUFRO0FBQ3RCLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0Esa0NBQWtDLHVCQUF1QjtBQUN6RDtBQUNBLGdDQUFnQyx5QkFBeUI7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxRQUFRO0FBQ3RCLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBLDRCQUE0QiwyQkFBMkI7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZ0JBQWdCLGFBQWE7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLEtBQUs7QUFDbkIsY0FBYyxNQUFNO0FBQ3BCO0FBQ0EsZUFBZSxZQUFZO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwyQkFBMkI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsWUFBWTtBQUMzQjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsMkJBQTJCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLGFBQWE7QUFDM0IsZUFBZSxZQUFZO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxPQUFPO0FBQ3JCLGNBQWMscUJBQXFCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckIsY0FBYyxTQUFTO0FBQ3ZCLGNBQWMsU0FBUztBQUN2QixjQUFjLFNBQVM7QUFDdkIsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix1QkFBdUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix1Q0FBdUM7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEIsY0FBYztBQUNkO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMsa0RBQWtEO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGVBQWUsd0JBQXdCO0FBQ3ZDLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEIsZ0JBQWdCLFdBQVc7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLE1BQU07QUFDdkIsaUJBQWlCLGVBQWU7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixhQUFhO0FBQzlCLGlCQUFpQixlQUFlO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLE1BQU07QUFDdkIsaUJBQWlCLGVBQWU7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsY0FBYyxVQUFVO0FBQ3hCLGNBQWMsT0FBTztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsTUFBTTtBQUNwQixjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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YjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHVCQUF1QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsVUFBVTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBLGNBQWMsT0FBTztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGNBQWMsWUFBWTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsWUFBWTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGNBQWMsT0FBTztBQUNyQixjQUFjLE9BQU87QUFDckIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsY0FBYztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsY0FBYztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0Es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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsY0FBYztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsY0FBYztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGdCQUFnQixjQUFjO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxnQkFBZ0IsWUFBWTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixjQUFjLDBCQUEwQjtBQUN4QztBQUNBLGNBQWMsVUFBVTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsT0FBTztBQUNy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QUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGNBQWMsVUFBVTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUIsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsZ0JBQWdCLGdCQUFnQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGVBQWUsd0JBQXdCO0FBQ3ZDLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEIsZ0JBQWdCLFdBQVc7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCLGVBQWUsS0FBSztBQUNwQjtBQUNBLGVBQWUsTUFBTTtBQUNyQjtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCLGVBQWUsTUFBTTtBQUNyQixnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLE1BQU07QUFDckIsZ0JBQWdCLGtCQUFrQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGtCQUFrQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxnQkFBZ0IsYUFBYTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsY0FBYyxTQUFTO0FBQ3ZCLGNBQWMsRUFBRTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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O0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsZ0JBQWdCLFVBQVU7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7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QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxlQUFlLHFCQUFxQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0EsY0FBYyxVQUFVO0FBQ3hCLGNBQWMsVUFBVTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7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Q2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGVBQWUsa0JBQWtCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0EsY0FBYyxVQUFVO0FBQ3hCLGNBQWMsT0FBTztBQUNyQixjQUFjLE9BQU87QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDhCQUE4QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxnQ0FBZ0MsV0FBVztBQUMzQztBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxlQUFlLG1CQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0EsY0FBYyxVQUFVO0FBQ3hCLGNBQWMsT0FBTztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLEtBQUs7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLEtBQUs7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZ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QTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGVBQWU7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckIsY0FBYyw2QkFBNkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsT0FBTztBQUNyQixjQUFjLDZCQUE2QjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGNBQWM7QUFDN0IsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckIsY0FBYyxjQUFjO0FBQzVCLGNBQWMsNkJBQTZCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckIsY0FBYyxjQUFjO0FBQzVCLGNBQWMsNkJBQTZCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckIsY0FBYyxjQUFjO0FBQzVCLGNBQWMsNkJBQTZCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZUFBZTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxjQUFjLGVBQWU7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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UDtBQUNELEM7Ozs7Ozs7OENDNUlEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUMzR0E7QUFDQTtBQUNBO0FBQ0EsRTs7Ozs7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsa0JBQWtCLEVBQUU7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxVQUFVO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRTs7Ozs7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRTs7Ozs7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRTs7Ozs7O0FDTkE7QUFDQTtBQUNBO0FBQ0EsYTs7Ozs7O0FDSEEseUM7Ozs7OztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRTs7Ozs7O0FDSkE7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBLHVDQUF1QztBQUN2QyxFOzs7Ozs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRTs7Ozs7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0QsRTs7Ozs7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEU7Ozs7OztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRCxzQkFBc0I7QUFDaEYsZ0ZBQWdGLHNCQUFzQjtBQUN0RyxFOzs7Ozs7QUNSQSxtQzs7Ozs7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFOzs7Ozs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7QUFDSCxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7Ozs7OztBQzdTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUSxPQUFPO0FBQ2Y7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OzsrQ0M1TkE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7Ozs7Ozs7O0FDMUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0gsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDOztBQUVqQzs7QUFFQSwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQ7QUFDbkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0NBQW9DOztBQUVwQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLG9EQUFvRDtBQUNwRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEM7Ozs7Ozs7QUMvaEJBO0FBQ0E7QUFDQTtBQUNB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBLEVBQUU7O0FBRUY7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLElBQUk7O0FBRUo7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLElBQUk7O0FBRUo7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLG9CQUFvQixtQkFBbUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsT0FBTztBQUNwQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsT0FBTztBQUNwQixhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsT0FBTztBQUNwQixhQUFhLE9B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WUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBLHVCQUF1QixPQUFPO0FBQzlCLHdCQUF3QixPQUFPO0FBQy9CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQSxFQUFFOztBQUVGOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEIsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSTtBQUNKLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQSxrQ0FBa0MsMkNBQTJDLHlCQUF5Qix1QkFBdUIsMEJBQTBCLHNDQUFzQyxFQUFFLHdDQUF3QyxFQUFFLHlEQUF5RCxxRUFBcUUsNkRBQTZELG9CQUFvQixHQUFHLEVBQUU7O0FBRTdiLHlEQUF5RCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRS9KOztBQUVBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsYUFBYSxPQUFPO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSwyQkFBMkIsYUFBYTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsT0FBTztBQUN4Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsT0FBTztBQUN4Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0EsRUFBRTs7QUFFRjs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQSx1Q0FBdUMscURBQXFEOztBQUU1RixrQ0FBa0MsMkNBQTJDLHlCQUF5Qix1QkFBdUIsMEJBQTBCLHNDQUFzQyxFQUFFLHdDQUF3QyxFQUFFLHlEQUF5RCxxRUFBcUUsNkRBQTZELG9CQUFvQixHQUFHLEVBQUU7O0FBRTdiLHlEQUF5RCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRS9KO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVDQUF1Qzs7QUFFdkM7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBLEVBQUU7O0FBRUYsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUEsa0NBQWtDLDJDQUEyQyx5QkFBeUIsdUJBQXVCLDBCQUEwQixzQ0FBc0MsRUFBRSx3Q0FBd0MsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUU3Yix5REFBeUQsMENBQTBDLDBEQUEwRCxFQUFFOztBQUUvSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBLEVBQUU7O0FBRUY7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUEsK0NBQStDLHVDQUF1QyxrQkFBa0I7O0FBRXhHLGtDQUFrQywyQ0FBMkMseUJBQXlCLHVCQUF1QiwwQkFBMEIsc0NBQXNDLEVBQUUsd0NBQXdDLEVBQUUseURBQXlELHFFQUFxRSw2REFBNkQsb0JBQW9CLEdBQUcsRUFBRTs7QUFFN2Isc0RBQXNELDhEQUE4RCwwQkFBMEIsNENBQTRDLHVCQUF1QixrQkFBa0IsRUFBRSxPQUFPLHdDQUF3QyxFQUFFLEVBQUUsNkNBQTZDLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRTs7QUFFeGMsa0RBQWtELCtEQUErRCxxR0FBcUcsRUFBRSx5RUFBeUUsZUFBZSx5RUFBeUUsRUFBRSxFQUFFLGlEQUFpRDs7QUFFOWEseURBQXlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFL0o7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLG1DQUFtQzs7QUFFbkM7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNB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O0FBRS9KO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQSxFQUFFOztBQUVGOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBLGtDQUFrQywyQ0FBMkMseUJBQXlCLHVCQUF1QiwwQkFBMEIsc0NBQXNDLEVBQUUsd0NBQXdDLEVBQUUseURBQXlELHFFQUFxRSw2REFBNkQsb0JBQW9CLEdBQUcsRUFBRTs7QUFFN2Isc0RBQXNELDhEQUE4RCwwQkFBMEIsNENBQTRDLHVCQUF1QixrQkFBa0IsRUFBRSxPQUFPLHdDQUF3QyxFQUFFLEVBQUUsNkNBQTZDLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRTs7QUFFeGMsa0RBQWtELCtEQUErRCxxR0FBcUcsRUFBRSx5RUFBeUUsZUFBZSx5RUFBeUUsRUFBRSxFQUFFLGlEQUFpRDs7QUFFOWEseURBQXlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFL0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7O0FBRUEsd0JBQXdCLHNDQUFzQzs7QUFFOUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBOztBQUVBOztBQUVBLHdCQUF3QixzQ0FBc0M7O0FBRTlEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdCQUF3QixzQkFBc0I7O0FBRTlDO0FBQ0E7QUFD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QVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRCxhQUFhO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsMkRBQTJELFNBQVM7O0FBRXBFO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0Isd0JBQXdCOztBQUVoRDtBQUNBLHVCQUF1Qjs7QUFFdkI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx3QkFBd0IsMkJBQTJCO0FBQ25EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0Esd0JBQXdCLHlCQUF5QjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsd0JBQXdCLHlCQUF5QjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7QUFFVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7QUFFVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBLFFB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QUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7O0FBRVY7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBLHdCQUF3Qix1QkFBdUI7QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDhCQUE4Qix1QkFBdUI7QUFDckQsVUFBVTtBQUNWO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBDQUEwQzs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxpQ0FBaUM7QUFDcEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLGVBQWU7QUFDckQ7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7O0FBRTdCLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0JBQXNCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0M7O0FB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QTtBQUNBO0FBQ0E7QUFDQSxFOzs7Ozs7QUNoQkEsd0M7Ozs7OztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEU7Ozs7Ozs7Ozs7OztBQzFFQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTs7Ozs7Ozs7K0NDSkE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkVBQTJFLDZFQUE2RTtBQUN4SjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLHNEQUFzRDs7QUFFdEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEVBQTRFO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNDQUFzQzs7QUFFdEM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSwrQ0FBK0M7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixTQUFTO0FBQzVCO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDRFQUE0RTs7QUFFNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLHlCQUF5QjtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtREFBbUQ7QUFDbkQ7QUFDQSxtREFBbUQsaUVBQWlFO0FBQ3BIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0MsT0FBTztBQUN2QztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0MsT0FBTztBQUN2QztBQUNBO0FBQ0E7QUFDQSxDOzs7Ozs7OztBQ3Q2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsWUFBWTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixpQkFBaUI7QUFDakIsOEJBQThCO0FBQzlCLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQsZUFBZTtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLG9EQUFvRCxXQUFXO0FBQy9EO0FBQ0EsS0FBSztBQUNMLG9FQUFvRSxXQUFXO0FBQy9FO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsU0FBUztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxtQkFBbUIsRUFBRSxhQUFhO0FBQ2xFO0FBQ0EsV0FBVztBQUNYLGtFQUFrRSxnQkFBZ0IsU0FBUyxnQ0FBZ0Msd0JBQXdCLHVDQUF1QztBQUMxTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDBDQUEwQyxzQkFBc0IsRUFBRTtBQUNsRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7Ozs7QUN6TEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7O0FBSUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7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QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRDQUE0QyxLQUFLOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsbUNBQW1DLE9BQU87QUFDMUM7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7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dUQsMkdBQTJHLE9BQU8scURBQXFELGlCQUFpQix5TEFBeUwscURBQXFELGFBQWEsc0VBQXNFLHFDQUFxQyxRQUFRLHVGQUE2RSxVQUFVO0FBQUEsb01BQWlHLE87Ozs7OztBQzlCeHhEO0FBQ0E7QUFDQTs7Ozs7OztBQ0ZBO0FBQ0E7Ozs7Ozs7O0FDREEsZSIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gODApO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIDYzZTk4MzlkZGUyMjE5OWJlMjQ5IiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHt2ZXJzaW9uOiAnMi40LjAnfTtcbmlmKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpX19lID0gY29yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qc1xuLy8gbW9kdWxlIGlkID0gMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgc3RvcmUgICAgICA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKVxuICAsIHVpZCAgICAgICAgPSByZXF1aXJlKCcuL191aWQnKVxuICAsIFN5bWJvbCAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2xcbiAgLCBVU0VfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PSAnZnVuY3Rpb24nO1xuXG52YXIgJGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG5hbWUpe1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy5qc1xuLy8gbW9kdWxlIGlkID0gMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanNcbi8vIG1vZHVsZSBpZCA9IDJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCdiYXNlNjQtanMnKVxudmFyIGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpXG5cbmV4cG9ydHMuQnVmZmVyID0gQnVmZmVyXG5leHBvcnRzLlNsb3dCdWZmZXIgPSBTbG93QnVmZmVyXG5leHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTID0gNTBcblxuLyoqXG4gKiBJZiBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgVXNlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogRHVlIHRvIHZhcmlvdXMgYnJvd3NlciBidWdzLCBzb21ldGltZXMgdGhlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHVzZWQgZXZlblxuICogd2hlbiB0aGUgYnJvd3NlciBzdXBwb3J0cyB0eXBlZCBhcnJheXMuXG4gKlxuICogTm90ZTpcbiAqXG4gKiAgIC0gRmlyZWZveCA0LTI5IGxhY2tzIHN1cHBvcnQgZm9yIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBgVWludDhBcnJheWAgaW5zdGFuY2VzLFxuICogICAgIFNlZTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NDM4LlxuICpcbiAqICAgLSBDaHJvbWUgOS0xMCBpcyBtaXNzaW5nIHRoZSBgVHlwZWRBcnJheS5wcm90b3R5cGUuc3ViYXJyYXlgIGZ1bmN0aW9uLlxuICpcbiAqICAgLSBJRTEwIGhhcyBhIGJyb2tlbiBgVHlwZWRBcnJheS5wcm90b3R5cGUuc3ViYXJyYXlgIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYXJyYXlzIG9mXG4gKiAgICAgaW5jb3JyZWN0IGxlbmd0aCBpbiBzb21lIHNpdHVhdGlvbnMuXG5cbiAqIFdlIGRldGVjdCB0aGVzZSBidWdneSBicm93c2VycyBhbmQgc2V0IGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGAgdG8gYGZhbHNlYCBzbyB0aGV5XG4gKiBnZXQgdGhlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaXMgc2xvd2VyIGJ1dCBiZWhhdmVzIGNvcnJlY3RseS5cbiAqL1xuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVCAhPT0gdW5kZWZpbmVkXG4gID8gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlRcbiAgOiB0eXBlZEFycmF5U3VwcG9ydCgpXG5cbi8qXG4gKiBFeHBvcnQga01heExlbmd0aCBhZnRlciB0eXBlZCBhcnJheSBzdXBwb3J0IGlzIGRldGVybWluZWQuXG4gKi9cbmV4cG9ydHMua01heExlbmd0aCA9IGtNYXhMZW5ndGgoKVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCAoKSB7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gICAgYXJyLl9fcHJvdG9fXyA9IHtfX3Byb3RvX186IFVpbnQ4QXJyYXkucHJvdG90eXBlLCBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH19XG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDIgJiYgLy8gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWRcbiAgICAgICAgdHlwZW9mIGFyci5zdWJhcnJheSA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyBjaHJvbWUgOS0xMCBsYWNrIGBzdWJhcnJheWBcbiAgICAgICAgYXJyLnN1YmFycmF5KDEsIDEpLmJ5dGVMZW5ndGggPT09IDAgLy8gaWUxMCBoYXMgYnJva2VuIGBzdWJhcnJheWBcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGtNYXhMZW5ndGggKCkge1xuICByZXR1cm4gQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRcbiAgICA/IDB4N2ZmZmZmZmZcbiAgICA6IDB4M2ZmZmZmZmZcbn1cblxuZnVuY3Rpb24gY3JlYXRlQnVmZmVyICh0aGF0LCBsZW5ndGgpIHtcbiAgaWYgKGtNYXhMZW5ndGgoKSA8IGxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCcpXG4gIH1cbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UsIGZvciBiZXN0IHBlcmZvcm1hbmNlXG4gICAgdGhhdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgaWYgKHRoYXQgPT09IG51bGwpIHtcbiAgICAgIHRoYXQgPSBuZXcgQnVmZmVyKGxlbmd0aClcbiAgICB9XG4gICAgdGhhdC5sZW5ndGggPSBsZW5ndGhcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogVGhlIEJ1ZmZlciBjb25zdHJ1Y3RvciByZXR1cm5zIGluc3RhbmNlcyBvZiBgVWludDhBcnJheWAgdGhhdCBoYXZlIHRoZWlyXG4gKiBwcm90b3R5cGUgY2hhbmdlZCB0byBgQnVmZmVyLnByb3RvdHlwZWAuIEZ1cnRoZXJtb3JlLCBgQnVmZmVyYCBpcyBhIHN1YmNsYXNzIG9mXG4gKiBgVWludDhBcnJheWAsIHNvIHRoZSByZXR1cm5lZCBpbnN0YW5jZXMgd2lsbCBoYXZlIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBtZXRob2RzXG4gKiBhbmQgdGhlIGBVaW50OEFycmF5YCBtZXRob2RzLiBTcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3b3JrcyBhcyBleHBlY3RlZCAtLSBpdFxuICogcmV0dXJucyBhIHNpbmdsZSBvY3RldC5cbiAqXG4gKiBUaGUgYFVpbnQ4QXJyYXlgIHByb3RvdHlwZSByZW1haW5zIHVubW9kaWZpZWQuXG4gKi9cblxuZnVuY3Rpb24gQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmICEodGhpcyBpbnN0YW5jZW9mIEJ1ZmZlcikpIHtcbiAgICByZXR1cm4gbmV3IEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIC8vIENvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nT3JPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZydcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFsbG9jVW5zYWZlKHRoaXMsIGFyZylcbiAgfVxuICByZXR1cm4gZnJvbSh0aGlzLCBhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnBvb2xTaXplID0gODE5MiAvLyBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uXG5cbi8vIFRPRE86IExlZ2FjeSwgbm90IG5lZWRlZCBhbnltb3JlLiBSZW1vdmUgaW4gbmV4dCBtYWpvciB2ZXJzaW9uLlxuQnVmZmVyLl9hdWdtZW50ID0gZnVuY3Rpb24gKGFycikge1xuICBhcnIuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIGZyb20gKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpXG4gIH1cblxuICByZXR1cm4gZnJvbU9iamVjdCh0aGF0LCB2YWx1ZSlcbn1cblxuLyoqXG4gKiBGdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBCdWZmZXIoYXJnLCBlbmNvZGluZykgYnV0IHRocm93cyBhIFR5cGVFcnJvclxuICogaWYgdmFsdWUgaXMgYSBudW1iZXIuXG4gKiBCdWZmZXIuZnJvbShzdHJbLCBlbmNvZGluZ10pXG4gKiBCdWZmZXIuZnJvbShhcnJheSlcbiAqIEJ1ZmZlci5mcm9tKGJ1ZmZlcilcbiAqIEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyWywgYnl0ZU9mZnNldFssIGxlbmd0aF1dKVxuICoqL1xuQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gZnJvbShudWxsLCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5pZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgQnVmZmVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBVaW50OEFycmF5LnByb3RvdHlwZVxuICBCdWZmZXIuX19wcm90b19fID0gVWludDhBcnJheVxuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnNwZWNpZXMgJiZcbiAgICAgIEJ1ZmZlcltTeW1ib2wuc3BlY2llc10gPT09IEJ1ZmZlcikge1xuICAgIC8vIEZpeCBzdWJhcnJheSgpIGluIEVTMjAxNi4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzk3XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlciwgU3ltYm9sLnNwZWNpZXMsIHtcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRTaXplIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfSBlbHNlIGlmIChzaXplIDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2MgKHRoYXQsIHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSlcbiAgfVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT25seSBwYXkgYXR0ZW50aW9uIHRvIGVuY29kaW5nIGlmIGl0J3MgYSBzdHJpbmcuIFRoaXNcbiAgICAvLyBwcmV2ZW50cyBhY2NpZGVudGFsbHkgc2VuZGluZyBpbiBhIG51bWJlciB0aGF0IHdvdWxkXG4gICAgLy8gYmUgaW50ZXJwcmV0dGVkIGFzIGEgc3RhcnQgb2Zmc2V0LlxuICAgIHJldHVybiB0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnXG4gICAgICA/IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKS5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgICAgOiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsKVxuICB9XG4gIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSlcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiBhbGxvYyhzaXplWywgZmlsbFssIGVuY29kaW5nXV0pXG4gKiovXG5CdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGFsbG9jKG51bGwsIHNpemUsIGZpbGwsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZSAodGhhdCwgc2l6ZSkge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSA8IDAgPyAwIDogY2hlY2tlZChzaXplKSB8IDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7ICsraSkge1xuICAgICAgdGhhdFtpXSA9IDBcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShudWxsLCBzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShudWxsLCBzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nICh0aGF0LCBzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZW5jb2RpbmdcIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJylcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbmd0aClcblxuICB2YXIgYWN0dWFsID0gdGhhdC53cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuXG4gIGlmIChhY3R1YWwgIT09IGxlbmd0aCkge1xuICAgIC8vIFdyaXRpbmcgYSBoZXggc3RyaW5nLCBmb3IgZXhhbXBsZSwgdGhhdCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMgd2lsbFxuICAgIC8vIGNhdXNlIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IGludmFsaWQgY2hhcmFjdGVyIHRvIGJlIGlnbm9yZWQuIChlLmcuXG4gICAgLy8gJ2FieHhjZCcgd2lsbCBiZSB0cmVhdGVkIGFzICdhYicpXG4gICAgdGhhdCA9IHRoYXQuc2xpY2UoMCwgYWN0dWFsKVxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZSAodGhhdCwgYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbmd0aClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoYXRbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAodGhhdCwgYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICBhcnJheS5ieXRlTGVuZ3RoIC8vIHRoaXMgdGhyb3dzIGlmIGBhcnJheWAgaXMgbm90IGEgdmFsaWQgQXJyYXlCdWZmZXJcblxuICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnb2Zmc2V0XFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdsZW5ndGhcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkICYmIGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSlcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UsIGZvciBiZXN0IHBlcmZvcm1hbmNlXG4gICAgdGhhdCA9IGFycmF5XG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIHRoYXQgPSBmcm9tQXJyYXlMaWtlKHRoYXQsIGFycmF5KVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKHRoYXQsIG9iaikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iaikpIHtcbiAgICB2YXIgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbilcblxuICAgIGlmICh0aGF0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoYXRcbiAgICB9XG5cbiAgICBvYmouY29weSh0aGF0LCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIHRoYXRcbiAgfVxuXG4gIGlmIChvYmopIHtcbiAgICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgb2JqLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB8fCAnbGVuZ3RoJyBpbiBvYmopIHtcbiAgICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgaXNuYW4ob2JqLmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCAwKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqKVxuICAgIH1cblxuICAgIGlmIChvYmoudHlwZSA9PT0gJ0J1ZmZlcicgJiYgaXNBcnJheShvYmouZGF0YSkpIHtcbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iai5kYXRhKVxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4nKVxufVxuXG5mdW5jdGlvbiBjaGVja2VkIChsZW5ndGgpIHtcbiAgLy8gTm90ZTogY2Fubm90IHVzZSBgbGVuZ3RoIDwga01heExlbmd0aCgpYCBoZXJlIGJlY2F1c2UgdGhhdCBmYWlscyB3aGVuXG4gIC8vIGxlbmd0aCBpcyBOYU4gKHdoaWNoIGlzIG90aGVyd2lzZSBjb2VyY2VkIHRvIHplcm8uKVxuICBpZiAobGVuZ3RoID49IGtNYXhMZW5ndGgoKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplOiAweCcgKyBrTWF4TGVuZ3RoKCkudG9TdHJpbmcoMTYpICsgJyBieXRlcycpXG4gIH1cbiAgcmV0dXJuIGxlbmd0aCB8IDBcbn1cblxuZnVuY3Rpb24gU2xvd0J1ZmZlciAobGVuZ3RoKSB7XG4gIGlmICgrbGVuZ3RoICE9IGxlbmd0aCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGVxZXFlcVxuICAgIGxlbmd0aCA9IDBcbiAgfVxuICByZXR1cm4gQnVmZmVyLmFsbG9jKCtsZW5ndGgpXG59XG5cbkJ1ZmZlci5pc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyIChiKSB7XG4gIHJldHVybiAhIShiICE9IG51bGwgJiYgYi5faXNCdWZmZXIpXG59XG5cbkJ1ZmZlci5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAoYSwgYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycycpXG4gIH1cblxuICBpZiAoYSA9PT0gYikgcmV0dXJuIDBcblxuICB2YXIgeCA9IGEubGVuZ3RoXG4gIHZhciB5ID0gYi5sZW5ndGhcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gTWF0aC5taW4oeCwgeSk7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICB4ID0gYVtpXVxuICAgICAgeSA9IGJbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG5CdWZmZXIuaXNFbmNvZGluZyA9IGZ1bmN0aW9uIGlzRW5jb2RpbmcgKGVuY29kaW5nKSB7XG4gIHN3aXRjaCAoU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgY2FzZSAnYmluYXJ5JzpcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5CdWZmZXIuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0IChsaXN0LCBsZW5ndGgpIHtcbiAgaWYgKCFpc0FycmF5KGxpc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMClcbiAgfVxuXG4gIHZhciBpXG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGxlbmd0aCA9IDBcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgbGVuZ3RoICs9IGxpc3RbaV0ubGVuZ3RoXG4gICAgfVxuICB9XG5cbiAgdmFyIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW5ndGgpXG4gIHZhciBwb3MgPSAwXG4gIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGJ1ZiA9IGxpc3RbaV1cbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICAgIH1cbiAgICBidWYuY29weShidWZmZXIsIHBvcylcbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBzdHJpbmcgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpIHtcbiAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICBzdHJpbmcgPSAnJyArIHN0cmluZ1xuICB9XG5cbiAgdmFyIGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBVc2UgYSBmb3IgbG9vcCB0byBhdm9pZCByZWN1cnNpb25cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGVuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cbkJ1ZmZlci5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuXG5mdW5jdGlvbiBzbG93VG9TdHJpbmcgKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG5cbiAgLy8gTm8gbmVlZCB0byB2ZXJpZnkgdGhhdCBcInRoaXMubGVuZ3RoIDw9IE1BWF9VSU5UMzJcIiBzaW5jZSBpdCdzIGEgcmVhZC1vbmx5XG4gIC8vIHByb3BlcnR5IG9mIGEgdHlwZWQgYXJyYXkuXG5cbiAgLy8gVGhpcyBiZWhhdmVzIG5laXRoZXIgbGlrZSBTdHJpbmcgbm9yIFVpbnQ4QXJyYXkgaW4gdGhhdCB3ZSBzZXQgc3RhcnQvZW5kXG4gIC8vIHRvIHRoZWlyIHVwcGVyL2xvd2VyIGJvdW5kcyBpZiB0aGUgdmFsdWUgcGFzc2VkIGlzIG91dCBvZiByYW5nZS5cbiAgLy8gdW5kZWZpbmVkIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGFzIHBlciBFQ01BLTI2MiA2dGggRWRpdGlvbixcbiAgLy8gU2VjdGlvbiAxMy4zLjMuNyBSdW50aW1lIFNlbWFudGljczogS2V5ZWRCaW5kaW5nSW5pdGlhbGl6YXRpb24uXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkIHx8IHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIC8vIFJldHVybiBlYXJseSBpZiBzdGFydCA+IHRoaXMubGVuZ3RoLiBEb25lIGhlcmUgdG8gcHJldmVudCBwb3RlbnRpYWwgdWludDMyXG4gIC8vIGNvZXJjaW9uIGZhaWwgYmVsb3cuXG4gIGlmIChzdGFydCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKGVuZCA8PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyBGb3JjZSBjb2Vyc2lvbiB0byB1aW50MzIuIFRoaXMgd2lsbCBhbHNvIGNvZXJjZSBmYWxzZXkvTmFOIHZhbHVlcyB0byAwLlxuICBlbmQgPj4+PSAwXG4gIHN0YXJ0ID4+Pj0gMFxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG4vLyBUaGUgcHJvcGVydHkgaXMgdXNlZCBieSBgQnVmZmVyLmlzQnVmZmVyYCBhbmQgYGlzLWJ1ZmZlcmAgKGluIFNhZmFyaSA1LTcpIHRvIGRldGVjdFxuLy8gQnVmZmVyIGluc3RhbmNlcy5cbkJ1ZmZlci5wcm90b3R5cGUuX2lzQnVmZmVyID0gdHJ1ZVxuXG5mdW5jdGlvbiBzd2FwIChiLCBuLCBtKSB7XG4gIHZhciBpID0gYltuXVxuICBiW25dID0gYlttXVxuICBiW21dID0gaVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAzKVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyAyKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA4ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA4KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgNylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNilcbiAgICBzd2FwKHRoaXMsIGkgKyAyLCBpICsgNSlcbiAgICBzd2FwKHRoaXMsIGkgKyAzLCBpICsgNClcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggfCAwXG4gIGlmIChsZW5ndGggPT09IDApIHJldHVybiAnJ1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCAwLCBsZW5ndGgpXG4gIHJldHVybiBzbG93VG9TdHJpbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIGlmICh0aGlzID09PSBiKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYikgPT09IDBcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHZhciBzdHIgPSAnJ1xuICB2YXIgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgc3RyID0gdGhpcy50b1N0cmluZygnaGV4JywgMCwgbWF4KS5tYXRjaCgvLnsyfS9nKS5qb2luKCcgJylcbiAgICBpZiAodGhpcy5sZW5ndGggPiBtYXgpIHN0ciArPSAnIC4uLiAnXG4gIH1cbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAodGFyZ2V0LCBzdGFydCwgZW5kLCB0aGlzU3RhcnQsIHRoaXNFbmQpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0YXJnZXQgPyB0YXJnZXQubGVuZ3RoIDogMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNTdGFydCA9IDBcbiAgfVxuICBpZiAodGhpc0VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMVxuICB9XG5cbiAgc3RhcnQgPj4+PSAwXG4gIGVuZCA+Pj49IDBcbiAgdGhpc1N0YXJ0ID4+Pj0gMFxuICB0aGlzRW5kID4+Pj0gMFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQpIHJldHVybiAwXG5cbiAgdmFyIHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0XG4gIHZhciB5ID0gZW5kIC0gc3RhcnRcbiAgdmFyIGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgdmFyIHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpXG4gIHZhciB0YXJnZXRDb3B5ID0gdGFyZ2V0LnNsaWNlKHN0YXJ0LCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzQ29weVtpXSAhPT0gdGFyZ2V0Q29weVtpXSkge1xuICAgICAgeCA9IHRoaXNDb3B5W2ldXG4gICAgICB5ID0gdGFyZ2V0Q29weVtpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbi8vIEZpbmRzIGVpdGhlciB0aGUgZmlyc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0ID49IGBieXRlT2Zmc2V0YCxcbi8vIE9SIHRoZSBsYXN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA8PSBgYnl0ZU9mZnNldGAuXG4vL1xuLy8gQXJndW1lbnRzOlxuLy8gLSBidWZmZXIgLSBhIEJ1ZmZlciB0byBzZWFyY2hcbi8vIC0gdmFsIC0gYSBzdHJpbmcsIEJ1ZmZlciwgb3IgbnVtYmVyXG4vLyAtIGJ5dGVPZmZzZXQgLSBhbiBpbmRleCBpbnRvIGBidWZmZXJgOyB3aWxsIGJlIGNsYW1wZWQgdG8gYW4gaW50MzJcbi8vIC0gZW5jb2RpbmcgLSBhbiBvcHRpb25hbCBlbmNvZGluZywgcmVsZXZhbnQgaXMgdmFsIGlzIGEgc3RyaW5nXG4vLyAtIGRpciAtIHRydWUgZm9yIGluZGV4T2YsIGZhbHNlIGZvciBsYXN0SW5kZXhPZlxuZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YgKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIC8vIEVtcHR5IGJ1ZmZlciBtZWFucyBubyBtYXRjaFxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXRcbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIHtcbiAgICBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMHg4MDAwMDAwMCkge1xuICAgIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICB9XG4gIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldCAgLy8gQ29lcmNlIHRvIE51bWJlci5cbiAgaWYgKGlzTmFOKGJ5dGVPZmZzZXQpKSB7XG4gICAgLy8gYnl0ZU9mZnNldDogaXQgaXQncyB1bmRlZmluZWQsIG51bGwsIE5hTiwgXCJmb29cIiwgZXRjLCBzZWFyY2ggd2hvbGUgYnVmZmVyXG4gICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiAoYnVmZmVyLmxlbmd0aCAtIDEpXG4gIH1cblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldDogbmVnYXRpdmUgb2Zmc2V0cyBzdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICBpZiAoYnl0ZU9mZnNldCA8IDApIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoICsgYnl0ZU9mZnNldFxuICBpZiAoYnl0ZU9mZnNldCA+PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgaWYgKGRpcikgcmV0dXJuIC0xXG4gICAgZWxzZSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCAtIDFcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGlmIChkaXIpIGJ5dGVPZmZzZXQgPSAwXG4gICAgZWxzZSByZXR1cm4gLTFcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSB2YWxcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgfVxuXG4gIC8vIEZpbmFsbHksIHNlYXJjaCBlaXRoZXIgaW5kZXhPZiAoaWYgZGlyIGlzIHRydWUpIG9yIGxhc3RJbmRleE9mXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsKSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogbG9va2luZyBmb3IgZW1wdHkgc3RyaW5nL2J1ZmZlciBhbHdheXMgZmFpbHNcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAweEZGIC8vIFNlYXJjaCBmb3IgYSBieXRlIHZhbHVlIFswLTI1NV1cbiAgICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiZcbiAgICAgICAgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgWyB2YWwgXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbmZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgdmFyIGluZGV4U2l6ZSA9IDFcbiAgdmFyIGFyckxlbmd0aCA9IGFyci5sZW5ndGhcbiAgdmFyIHZhbExlbmd0aCA9IHZhbC5sZW5ndGhcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGVuY29kaW5nID09PSAndWNzMicgfHwgZW5jb2RpbmcgPT09ICd1Y3MtMicgfHxcbiAgICAgICAgZW5jb2RpbmcgPT09ICd1dGYxNmxlJyB8fCBlbmNvZGluZyA9PT0gJ3V0Zi0xNmxlJykge1xuICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfVxuICAgICAgaW5kZXhTaXplID0gMlxuICAgICAgYXJyTGVuZ3RoIC89IDJcbiAgICAgIHZhbExlbmd0aCAvPSAyXG4gICAgICBieXRlT2Zmc2V0IC89IDJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkIChidWYsIGkpIHtcbiAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gYnVmW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkgKiBpbmRleFNpemUpXG4gICAgfVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGRpcikge1xuICAgIHZhciBmb3VuZEluZGV4ID0gLTFcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIGkgLT0gaSAtIGZvdW5kSW5kZXhcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKSBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBmb3VuZCA9IHRydWVcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgdmFyIHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIC8vIG11c3QgYmUgYW4gZXZlbiBudW1iZXIgb2YgZGlnaXRzXG4gIHZhciBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChzdHJMZW4gJSAyICE9PSAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGhleCBzdHJpbmcnKVxuXG4gIGlmIChsZW5ndGggPiBzdHJMZW4gLyAyKSB7XG4gICAgbGVuZ3RoID0gc3RyTGVuIC8gMlxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nLnN1YnN0cihpICogMiwgMiksIDE2KVxuICAgIGlmIChpc05hTihwYXJzZWQpKSByZXR1cm4gaVxuICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHBhcnNlZFxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIHV0ZjhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjhUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGFzY2lpV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihhc2NpaVRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gbGF0aW4xV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYXNjaWlXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGJhc2U2NFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYmFzZTY0VG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiB1Y3MyV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGYxNmxlVG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUgKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcpXG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgb2Zmc2V0WywgbGVuZ3RoXVssIGVuY29kaW5nXSlcbiAgfSBlbHNlIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggfCAwXG4gICAgICBpZiAoZW5jb2RpbmcgPT09IHVuZGVmaW5lZCkgZW5jb2RpbmcgPSAndXRmOCdcbiAgICB9IGVsc2Uge1xuICAgICAgZW5jb2RpbmcgPSBsZW5ndGhcbiAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgLy8gbGVnYWN5IHdyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldCwgbGVuZ3RoKSAtIHJlbW92ZSBpbiB2MC4xM1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA+IHJlbWFpbmluZykgbGVuZ3RoID0gcmVtYWluaW5nXG5cbiAgaWYgKChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICAvLyBXYXJuaW5nOiBtYXhMZW5ndGggbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBiYXNlNjRXcml0ZVxuICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG4gIHZhciByZXMgPSBbXVxuXG4gIHZhciBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICB2YXIgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgdmFyIGNvZGVQb2ludCA9IG51bGxcbiAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKSA/IDRcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4REYpID8gM1xuICAgICAgOiAoZmlyc3RCeXRlID4gMHhCRikgPyAyXG4gICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIHZhciBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbnZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMFxuXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkgKGNvZGVQb2ludHMpIHtcbiAgdmFyIGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgdmFyIHJlcyA9ICcnXG4gIHZhciBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGxhdGluMVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICB2YXIgb3V0ID0gJydcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gdG9IZXgoYnVmW2ldKVxuICB9XG4gIHJldHVybiBvdXRcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGJ5dGVzID0gYnVmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHZhciByZXMgPSAnJ1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0gKyBieXRlc1tpICsgMV0gKiAyNTYpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIHN0YXJ0ID0gfn5zdGFydFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IH5+ZW5kXG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IGxlblxuICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlblxuICAgIGlmIChlbmQgPCAwKSBlbmQgPSAwXG4gIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7XG4gICAgZW5kID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgdmFyIG5ld0J1ZlxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gICAgbmV3QnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2xpY2VMZW4gPSBlbmQgLSBzdGFydFxuICAgIG5ld0J1ZiA9IG5ldyBCdWZmZXIoc2xpY2VMZW4sIHVuZGVmaW5lZClcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWNlTGVuOyArK2kpIHtcbiAgICAgIG5ld0J1ZltpXSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdCdWZcbn1cblxuLypcbiAqIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYnVmZmVyIGlzbid0IHRyeWluZyB0byB3cml0ZSBvdXQgb2YgYm91bmRzLlxuICovXG5mdW5jdGlvbiBjaGVja09mZnNldCAob2Zmc2V0LCBleHQsIGxlbmd0aCkge1xuICBpZiAoKG9mZnNldCAlIDEpICE9PSAwIHx8IG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdvZmZzZXQgaXMgbm90IHVpbnQnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gbGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIHZhciBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkUgPSBmdW5jdGlvbiByZWFkVUludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICgodGhpc1tvZmZzZXRdKSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikpICtcbiAgICAgICh0aGlzW29mZnNldCArIDNdICogMHgxMDAwMDAwKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdICogMHgxMDAwMDAwKSArXG4gICAgKCh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgIHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoXG4gIHZhciBtdWwgPSAxXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0taV1cbiAgd2hpbGUgKGkgPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1pXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbiByZWFkSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgKHRoaXNbb2Zmc2V0XSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiByZWFkSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdKSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10gPDwgMjQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDI0KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgNTIsIDgpXG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJidWZmZXJcIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJylcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50OCA9IGZ1bmN0aW9uIHdyaXRlVUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5mdW5jdGlvbiBvYmplY3RXcml0ZVVJbnQxNiAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4pIHtcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCAyKTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSAmICgweGZmIDw8ICg4ICogKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkpKSkgPj4+XG4gICAgICAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSAqIDhcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5mdW5jdGlvbiBvYmplY3RXcml0ZVVJbnQzMiAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4pIHtcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgNCk7IGkgPCBqOyArK2kpIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgPj4+IChsaXR0bGVFbmRpYW4gPyBpIDogMyAtIGkpICogOCkgJiAweGZmXG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gMFxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgLSAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50QkUgPSBmdW5jdGlvbiB3cml0ZUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgKyAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50OCA9IGZ1bmN0aW9uIHdyaXRlSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweDdmLCAtMHg4MClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvYXQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgNCwgMy40MDI4MjM0NjYzODUyODg2ZSszOCwgLTMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgMjMsIDQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdExFID0gZnVuY3Rpb24gd3JpdGVGbG9hdExFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0QkUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgaWYgKGVuZCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcycpXG5cbiAgLy8gQXJlIHdlIG9vYj9cbiAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0IDwgZW5kIC0gc3RhcnQpIHtcbiAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydFxuICB9XG5cbiAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0XG4gIHZhciBpXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiBzdGFydCA8IHRhcmdldFN0YXJ0ICYmIHRhcmdldFN0YXJ0IDwgZW5kKSB7XG4gICAgLy8gZGVzY2VuZGluZyBjb3B5IGZyb20gZW5kXG4gICAgZm9yIChpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2UgaWYgKGxlbiA8IDEwMDAgfHwgIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gYXNjZW5kaW5nIGNvcHkgZnJvbSBzdGFydFxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoXG4gICAgICB0YXJnZXQsXG4gICAgICB0aGlzLnN1YmFycmF5KHN0YXJ0LCBzdGFydCArIGxlbiksXG4gICAgICB0YXJnZXRTdGFydFxuICAgIClcbiAgfVxuXG4gIHJldHVybiBsZW5cbn1cblxuLy8gVXNhZ2U6XG4vLyAgICBidWZmZXIuZmlsbChudW1iZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKGJ1ZmZlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoc3RyaW5nWywgb2Zmc2V0WywgZW5kXV1bLCBlbmNvZGluZ10pXG5CdWZmZXIucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiBmaWxsICh2YWwsIHN0YXJ0LCBlbmQsIGVuY29kaW5nKSB7XG4gIC8vIEhhbmRsZSBzdHJpbmcgY2FzZXM6XG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIGlmICh0eXBlb2Ygc3RhcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IHN0YXJ0XG4gICAgICBzdGFydCA9IDBcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZW5kID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBlbmRcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfVxuICAgIGlmICh2YWwubGVuZ3RoID09PSAxKSB7XG4gICAgICB2YXIgY29kZSA9IHZhbC5jaGFyQ29kZUF0KDApXG4gICAgICBpZiAoY29kZSA8IDI1Nikge1xuICAgICAgICB2YWwgPSBjb2RlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VuY29kaW5nIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJyAmJiAhQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMjU1XG4gIH1cblxuICAvLyBJbnZhbGlkIHJhbmdlcyBhcmUgbm90IHNldCB0byBhIGRlZmF1bHQsIHNvIGNhbiByYW5nZSBjaGVjayBlYXJseS5cbiAgaWYgKHN0YXJ0IDwgMCB8fCB0aGlzLmxlbmd0aCA8IHN0YXJ0IHx8IHRoaXMubGVuZ3RoIDwgZW5kKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ091dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXJ0ID0gc3RhcnQgPj4+IDBcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyB0aGlzLmxlbmd0aCA6IGVuZCA+Pj4gMFxuXG4gIGlmICghdmFsKSB2YWwgPSAwXG5cbiAgdmFyIGlcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgdGhpc1tpXSA9IHZhbFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgYnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIodmFsKVxuICAgICAgPyB2YWxcbiAgICAgIDogdXRmOFRvQnl0ZXMobmV3IEJ1ZmZlcih2YWwsIGVuY29kaW5nKS50b1N0cmluZygpKVxuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBmb3IgKGkgPSAwOyBpIDwgZW5kIC0gc3RhcnQ7ICsraSkge1xuICAgICAgdGhpc1tpICsgc3RhcnRdID0gYnl0ZXNbaSAlIGxlbl1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09XG5cbnZhciBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXitcXC8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHJpbmd0cmltKHN0cikucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gc3RyaW5ndHJpbSAoc3RyKSB7XG4gIGlmIChzdHIudHJpbSkgcmV0dXJuIHN0ci50cmltKClcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJylcbn1cblxuZnVuY3Rpb24gdG9IZXggKG4pIHtcbiAgaWYgKG4gPCAxNikgcmV0dXJuICcwJyArIG4udG9TdHJpbmcoMTYpXG4gIHJldHVybiBuLnRvU3RyaW5nKDE2KVxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyaW5nLCB1bml0cykge1xuICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5XG4gIHZhciBjb2RlUG9pbnRcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIHZhciBieXRlcyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIC8vIE5vZGUncyBjb2RlIHNlZW1zIHRvIGJlIGRvaW5nIHRoaXMgYW5kIG5vdCAmIDB4N0YuLlxuICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRilcbiAgfVxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzIChzdHIsIHVuaXRzKSB7XG4gIHZhciBjLCBoaSwgbG9cbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG5cbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzIChzdHIpIHtcbiAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiBpc25hbiAodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IHZhbCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2J1ZmZlci9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICBpZighaXNPYmplY3QoaXQpKXRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLW9iamVjdC5qc1xuLy8gbW9kdWxlIGlkID0gNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgYW5PYmplY3QgICAgICAgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKVxuICAsIHRvUHJpbWl0aXZlICAgID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJylcbiAgLCBkUCAgICAgICAgICAgICA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpe1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYoSUU4X0RPTV9ERUZJTkUpdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cbiAgaWYoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKXRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmKCd2YWx1ZScgaW4gQXR0cmlidXRlcylPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwLmpzXG4vLyBtb2R1bGUgaWQgPSA1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7Z2V0OiBmdW5jdGlvbigpeyByZXR1cm4gNzsgfX0pLmEgIT0gNztcbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanNcbi8vIG1vZHVsZSBpZCA9IDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGdsb2JhbCAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgY29yZSAgICAgID0gcmVxdWlyZSgnLi9fY29yZScpXG4gICwgY3R4ICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBoaWRlICAgICAgPSByZXF1aXJlKCcuL19oaWRlJylcbiAgLCBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbih0eXBlLCBuYW1lLCBzb3VyY2Upe1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRlxuICAgICwgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuR1xuICAgICwgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuU1xuICAgICwgSVNfUFJPVE8gID0gdHlwZSAmICRleHBvcnQuUFxuICAgICwgSVNfQklORCAgID0gdHlwZSAmICRleHBvcnQuQlxuICAgICwgSVNfV1JBUCAgID0gdHlwZSAmICRleHBvcnQuV1xuICAgICwgZXhwb3J0cyAgID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSlcbiAgICAsIGV4cFByb3RvICA9IGV4cG9ydHNbUFJPVE9UWVBFXVxuICAgICwgdGFyZ2V0ICAgID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXVxuICAgICwga2V5LCBvd24sIG91dDtcbiAgaWYoSVNfR0xPQkFMKXNvdXJjZSA9IG5hbWU7XG4gIGZvcihrZXkgaW4gc291cmNlKXtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIGlmKG93biAmJiBrZXkgaW4gZXhwb3J0cyljb250aW51ZTtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IG93biA/IHRhcmdldFtrZXldIDogc291cmNlW2tleV07XG4gICAgLy8gcHJldmVudCBnbG9iYWwgcG9sbHV0aW9uIGZvciBuYW1lc3BhY2VzXG4gICAgZXhwb3J0c1trZXldID0gSVNfR0xPQkFMICYmIHR5cGVvZiB0YXJnZXRba2V5XSAhPSAnZnVuY3Rpb24nID8gc291cmNlW2tleV1cbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIDogSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpXG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5nZSB0aGVtIGluIGxpYnJhcnlcbiAgICA6IElTX1dSQVAgJiYgdGFyZ2V0W2tleV0gPT0gb3V0ID8gKGZ1bmN0aW9uKEMpe1xuICAgICAgdmFyIEYgPSBmdW5jdGlvbihhLCBiLCBjKXtcbiAgICAgICAgaWYodGhpcyBpbnN0YW5jZW9mIEMpe1xuICAgICAgICAgIHN3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtcbiAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBDO1xuICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IEMoYSk7XG4gICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgQyhhLCBiKTtcbiAgICAgICAgICB9IHJldHVybiBuZXcgQyhhLCBiLCBjKTtcbiAgICAgICAgfSByZXR1cm4gQy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICAgIEZbUFJPVE9UWVBFXSA9IENbUFJPVE9UWVBFXTtcbiAgICAgIHJldHVybiBGO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIH0pKG91dCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUubWV0aG9kcy4lTkFNRSVcbiAgICBpZihJU19QUk9UTyl7XG4gICAgICAoZXhwb3J0cy52aXJ0dWFsIHx8IChleHBvcnRzLnZpcnR1YWwgPSB7fSkpW2tleV0gPSBvdXQ7XG4gICAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUucHJvdG90eXBlLiVOQU1FJVxuICAgICAgaWYodHlwZSAmICRleHBvcnQuUiAmJiBleHBQcm90byAmJiAhZXhwUHJvdG9ba2V5XSloaWRlKGV4cFByb3RvLCBrZXksIG91dCk7XG4gICAgfVxuICB9XG59O1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwXG4kZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmVcbiRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YCBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2V4cG9ydC5qc1xuLy8gbW9kdWxlIGlkID0gN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQsIGtleSl7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hhcy5qc1xuLy8gbW9kdWxlIGlkID0gOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZFAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpXG4gICwgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uKG9iamVjdCwga2V5LCB2YWx1ZSl7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24ob2JqZWN0LCBrZXksIHZhbHVlKXtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oaWRlLmpzXG4vLyBtb2R1bGUgaWQgPSA5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0JylcbiAgLCBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pb2JqZWN0LmpzXG4vLyBtb2R1bGUgaWQgPSAxMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Byb2Nlc3MvYnJvd3Nlci5qc1xuLy8gbW9kdWxlIGlkID0gMTFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gYSBkdXBsZXggc3RyZWFtIGlzIGp1c3QgYSBzdHJlYW0gdGhhdCBpcyBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZS5cbi8vIFNpbmNlIEpTIGRvZXNuJ3QgaGF2ZSBtdWx0aXBsZSBwcm90b3R5cGFsIGluaGVyaXRhbmNlLCB0aGlzIGNsYXNzXG4vLyBwcm90b3R5cGFsbHkgaW5oZXJpdHMgZnJvbSBSZWFkYWJsZSwgYW5kIHRoZW4gcGFyYXNpdGljYWxseSBmcm9tXG4vLyBXcml0YWJsZS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGtleXMucHVzaChrZXkpO1xuICB9cmV0dXJuIGtleXM7XG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbm1vZHVsZS5leHBvcnRzID0gRHVwbGV4O1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHByb2Nlc3NOZXh0VGljayA9IHJlcXVpcmUoJ3Byb2Nlc3MtbmV4dGljay1hcmdzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgUmVhZGFibGUgPSByZXF1aXJlKCcuL19zdHJlYW1fcmVhZGFibGUnKTtcbnZhciBXcml0YWJsZSA9IHJlcXVpcmUoJy4vX3N0cmVhbV93cml0YWJsZScpO1xuXG51dGlsLmluaGVyaXRzKER1cGxleCwgUmVhZGFibGUpO1xuXG52YXIga2V5cyA9IG9iamVjdEtleXMoV3JpdGFibGUucHJvdG90eXBlKTtcbmZvciAodmFyIHYgPSAwOyB2IDwga2V5cy5sZW5ndGg7IHYrKykge1xuICB2YXIgbWV0aG9kID0ga2V5c1t2XTtcbiAgaWYgKCFEdXBsZXgucHJvdG90eXBlW21ldGhvZF0pIER1cGxleC5wcm90b3R5cGVbbWV0aG9kXSA9IFdyaXRhYmxlLnByb3RvdHlwZVttZXRob2RdO1xufVxuXG5mdW5jdGlvbiBEdXBsZXgob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRHVwbGV4KSkgcmV0dXJuIG5ldyBEdXBsZXgob3B0aW9ucyk7XG5cbiAgUmVhZGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgV3JpdGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnJlYWRhYmxlID09PSBmYWxzZSkgdGhpcy5yZWFkYWJsZSA9IGZhbHNlO1xuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMud3JpdGFibGUgPT09IGZhbHNlKSB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG5cbiAgdGhpcy5hbGxvd0hhbGZPcGVuID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5hbGxvd0hhbGZPcGVuID09PSBmYWxzZSkgdGhpcy5hbGxvd0hhbGZPcGVuID0gZmFsc2U7XG5cbiAgdGhpcy5vbmNlKCdlbmQnLCBvbmVuZCk7XG59XG5cbi8vIHRoZSBuby1oYWxmLW9wZW4gZW5mb3JjZXJcbmZ1bmN0aW9uIG9uZW5kKCkge1xuICAvLyBpZiB3ZSBhbGxvdyBoYWxmLW9wZW4gc3RhdGUsIG9yIGlmIHRoZSB3cml0YWJsZSBzaWRlIGVuZGVkLFxuICAvLyB0aGVuIHdlJ3JlIG9rLlxuICBpZiAodGhpcy5hbGxvd0hhbGZPcGVuIHx8IHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQpIHJldHVybjtcblxuICAvLyBubyBtb3JlIGRhdGEgY2FuIGJlIHdyaXR0ZW4uXG4gIC8vIEJ1dCBhbGxvdyBtb3JlIHdyaXRlcyB0byBoYXBwZW4gaW4gdGhpcyB0aWNrLlxuICBwcm9jZXNzTmV4dFRpY2sob25FbmROVCwgdGhpcyk7XG59XG5cbmZ1bmN0aW9uIG9uRW5kTlQoc2VsZikge1xuICBzZWxmLmVuZCgpO1xufVxuXG5mdW5jdGlvbiBmb3JFYWNoKHhzLCBmKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZih4c1tpXSwgaSk7XG4gIH1cbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qc1xuLy8gbW9kdWxlIGlkID0gMTJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihleGVjKXtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2goZSl7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qc1xuLy8gbW9kdWxlIGlkID0gMTNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXJhdG9ycy5qc1xuLy8gbW9kdWxlIGlkID0gMTRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpXG4gICwgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKXtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy5qc1xuLy8gbW9kdWxlIGlkID0gMTVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICB9XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qc1xuLy8gbW9kdWxlIGlkID0gMTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvZi5qc1xuLy8gbW9kdWxlIGlkID0gMTdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihmbiwgdGhhdCwgbGVuZ3RoKXtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYodGhhdCA9PT0gdW5kZWZpbmVkKXJldHVybiBmbjtcbiAgc3dpdGNoKGxlbmd0aCl7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24oYSl7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uKGEsIGIpe1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbihhLCBiLCBjKXtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKC8qIC4uLmFyZ3MgKi8pe1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2N0eC5qc1xuLy8gbW9kdWxlIGlkID0gMThcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtb2JqZWN0LmpzXG4vLyBtb2R1bGUgaWQgPSAxOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGJpdG1hcCwgdmFsdWUpe1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGUgIDogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGUgICAgOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlICAgICAgIDogdmFsdWVcbiAgfTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzXG4vLyBtb2R1bGUgaWQgPSAyMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG52YXIgJGF0ICA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uKGl0ZXJhdGVkKXtcbiAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuLy8gMjEuMS41LjIuMSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24oKXtcbiAgdmFyIE8gICAgID0gdGhpcy5fdFxuICAgICwgaW5kZXggPSB0aGlzLl9pXG4gICAgLCBwb2ludDtcbiAgaWYoaW5kZXggPj0gTy5sZW5ndGgpcmV0dXJuIHt2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHt2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlfTtcbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSAyMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gTk9URTogVGhlc2UgdHlwZSBjaGVja2luZyBmdW5jdGlvbnMgaW50ZW50aW9uYWxseSBkb24ndCB1c2UgYGluc3RhbmNlb2ZgXG4vLyBiZWNhdXNlIGl0IGlzIGZyYWdpbGUgYW5kIGNhbiBiZSBlYXNpbHkgZmFrZWQgd2l0aCBgT2JqZWN0LmNyZWF0ZSgpYC5cblxuZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhcmcpO1xuICB9XG4gIHJldHVybiBvYmplY3RUb1N0cmluZyhhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xufVxuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcblxuZnVuY3Rpb24gaXNCb29sZWFuKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nO1xufVxuZXhwb3J0cy5pc0Jvb2xlYW4gPSBpc0Jvb2xlYW47XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsID0gaXNOdWxsO1xuXG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGxPclVuZGVmaW5lZCA9IGlzTnVsbE9yVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuZXhwb3J0cy5pc051bWJlciA9IGlzTnVtYmVyO1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnO1xufVxuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuXG5mdW5jdGlvbiBpc1N5bWJvbChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnO1xufVxuZXhwb3J0cy5pc1N5bWJvbCA9IGlzU3ltYm9sO1xuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gdm9pZCAwO1xufVxuZXhwb3J0cy5pc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc1JlZ0V4cChyZSkge1xuICByZXR1cm4gb2JqZWN0VG9TdHJpbmcocmUpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cbmV4cG9ydHMuaXNSZWdFeHAgPSBpc1JlZ0V4cDtcblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5leHBvcnRzLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG5cbmZ1bmN0aW9uIGlzRGF0ZShkKSB7XG4gIHJldHVybiBvYmplY3RUb1N0cmluZyhkKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuZXhwb3J0cy5pc0RhdGUgPSBpc0RhdGU7XG5cbmZ1bmN0aW9uIGlzRXJyb3IoZSkge1xuICByZXR1cm4gKG9iamVjdFRvU3RyaW5nKGUpID09PSAnW29iamVjdCBFcnJvcl0nIHx8IGUgaW5zdGFuY2VvZiBFcnJvcik7XG59XG5leHBvcnRzLmlzRXJyb3IgPSBpc0Vycm9yO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnYm9vbGVhbicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdudW1iZXInIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCcgfHwgIC8vIEVTNiBzeW1ib2xcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICd1bmRlZmluZWQnO1xufVxuZXhwb3J0cy5pc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlO1xuXG5leHBvcnRzLmlzQnVmZmVyID0gQnVmZmVyLmlzQnVmZmVyO1xuXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyhvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyk7XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS11dGlsLWlzL2xpYi91dGlsLmpzXG4vLyBtb2R1bGUgaWQgPSAyMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZztcclxuXHJcbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXHJcbmcgPSAoZnVuY3Rpb24oKSB7XHJcblx0cmV0dXJuIHRoaXM7XHJcbn0pKCk7XHJcblxyXG50cnkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxyXG5cdGcgPSBnIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSB8fCAoMSxldmFsKShcInRoaXNcIik7XHJcbn0gY2F0Y2goZSkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXHJcblx0aWYodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIilcclxuXHRcdGcgPSB3aW5kb3c7XHJcbn1cclxuXHJcbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cclxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3NcclxuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBnO1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAod2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanNcbi8vIG1vZHVsZSBpZCA9IDIzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KXtcblxuXHQvL1VNRFxuXHRpZiAoIHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kICkge1xuXHRcdGRlZmluZShmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBmYWN0b3J5KCk7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuIFx0fSBlbHNlIHtcblx0XHRyb290LlRvbmUgPSBmYWN0b3J5KCk7XG5cdH1cblxufSh0aGlzLCBmdW5jdGlvbigpe1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIFRvbmU7XG5cdC8vY29uc3RydWN0cyB0aGUgbWFpbiBUb25lIG9iamVjdFxuXHRmdW5jdGlvbiBNYWluKGZ1bmMpe1xuXHRcdFRvbmUgPSBmdW5jKCk7XG5cdH1cblx0Ly9pbnZva2VzIGVhY2ggb2YgdGhlIG1vZHVsZXMgd2l0aCB0aGUgbWFpbiBUb25lIG9iamVjdCBhcyB0aGUgYXJndW1lbnRcblx0ZnVuY3Rpb24gTW9kdWxlKGZ1bmMpe1xuXHRcdGZ1bmMoVG9uZSk7XG5cdH1cdC8qKlxuXHQgKiAgVG9uZS5qc1xuXHQgKiAgQGF1dGhvciBZb3RhbSBNYW5uXG5cdCAqICBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVCBMaWNlbnNlXG5cdCAqICBAY29weXJpZ2h0IDIwMTQtMjAxOCBZb3RhbSBNYW5uXG5cdCAqL1xuXHRNYWluKGZ1bmN0aW9uICgpIHtcblx0ICAgIFxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VE9ORVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lIGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBvdGhlciBjbGFzc2VzLlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIHZhciBUb25lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUb25lKSkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbnN0cnVjdG9yIG5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIHRoZSBcXCduZXdcXCcga2V5d29yZCcpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICogIEByZXR1cm5zIHtTdHJpbmd9IHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNsYXNzIGFzIGEgc3RyaW5nXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBmb3IgKHZhciBjbGFzc05hbWUgaW4gVG9uZSkge1xuXHQgICAgICAgICAgICB2YXIgaXNMZXR0ZXIgPSBjbGFzc05hbWVbMF0ubWF0Y2goL15bQS1aXSQvKTtcblx0ICAgICAgICAgICAgdmFyIHNhbWVDb25zdHJ1Y3RvciA9IFRvbmVbY2xhc3NOYW1lXSA9PT0gdGhpcy5jb25zdHJ1Y3Rvcjtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNGdW5jdGlvbihUb25lW2NsYXNzTmFtZV0pICYmIGlzTGV0dGVyICYmIHNhbWVDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gJ1RvbmUnO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgZGlzY29ubmVjdCBhbmQgZGlzcG9zZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRHRVQvU0VUXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIHBhcmFtZXRlcnMgYXQgb25jZS4gRWl0aGVyIHBhc3MgaW4gYW5cblx0XHQgKiAgb2JqZWN0IG1hcHBpbmcgcGFyYW1ldGVycyB0byB2YWx1ZXMsIG9yIHRvIHNldCBhXG5cdFx0ICogIHNpbmdsZSBwYXJhbWV0ZXIsIGJ5IHBhc3NpbmcgaW4gYSBzdHJpbmcgYW5kIHZhbHVlLlxuXHRcdCAqICBUaGUgbGFzdCBhcmd1bWVudCBpcyBhbiBvcHRpb25hbCByYW1wIHRpbWUgd2hpY2hcblx0XHQgKiAgd2lsbCByYW1wIGFueSBzaWduYWwgdmFsdWVzIHRvIHRoZWlyIGRlc3RpbmF0aW9uIHZhbHVlXG5cdFx0ICogIG92ZXIgdGhlIGR1cmF0aW9uIG9mIHRoZSByYW1wVGltZS5cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBwYXJhbXNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXI9fSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSByYW1wVGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZX0gdGhpc1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NldCB2YWx1ZXMgdXNpbmcgYW4gb2JqZWN0XG5cdFx0ICogZmlsdGVyLnNldCh7XG5cdFx0ICogXHRcImZyZXF1ZW5jeVwiIDogMzAwLFxuXHRcdCAqIFx0XCJ0eXBlXCIgOiBoaWdocGFzc1xuXHRcdCAqIH0pO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGZpbHRlci5zZXQoXCJ0eXBlXCIsIFwiaGlnaHBhc3NcIik7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9yYW1wIHRvIHRoZSB2YWx1ZSAyMjAgb3ZlciAzIHNlY29uZHMuXG5cdFx0ICogb3NjaWxsYXRvci5zZXQoe1xuXHRcdCAqIFx0XCJmcmVxdWVuY3lcIiA6IDIyMFxuXHRcdCAqIH0sIDMpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHBhcmFtcywgdmFsdWUsIHJhbXBUaW1lKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QocGFyYW1zKSkge1xuXHQgICAgICAgICAgICByYW1wVGltZSA9IHZhbHVlO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyhwYXJhbXMpKSB7XG5cdCAgICAgICAgICAgIHZhciB0bXBPYmogPSB7fTtcblx0ICAgICAgICAgICAgdG1wT2JqW3BhcmFtc10gPSB2YWx1ZTtcblx0ICAgICAgICAgICAgcGFyYW1zID0gdG1wT2JqO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBwYXJhbUxvb3A6XG5cdCAgICAgICAgICAgIGZvciAodmFyIGF0dHIgaW4gcGFyYW1zKSB7XG5cdCAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcmFtc1thdHRyXTtcblx0ICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzO1xuXHQgICAgICAgICAgICAgICAgaWYgKGF0dHIuaW5kZXhPZignLicpICE9PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyU3BsaXQgPSBhdHRyLnNwbGl0KCcuJyk7XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyU3BsaXQubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudFthdHRyU3BsaXRbaV1dO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgVG9uZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0clNwbGl0LnNwbGljZSgwLCBpICsgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5uZXJQYXJhbSA9IGF0dHJTcGxpdC5qb2luKCcuJyk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQuc2V0KGlubmVyUGFyYW0sIHZhbHVlKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHBhcmFtTG9vcDtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBhdHRyID0gYXR0clNwbGl0W2F0dHJTcGxpdC5sZW5ndGggLSAxXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHZhciBwYXJhbSA9IHBhcmVudFthdHRyXTtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYocGFyYW0pKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5TaWduYWwgJiYgcGFyYW0gaW5zdGFuY2VvZiBUb25lLlNpZ25hbCB8fCBUb25lLlBhcmFtICYmIHBhcmFtIGluc3RhbmNlb2YgVG9uZS5QYXJhbSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS52YWx1ZSAhPT0gdmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihyYW1wVGltZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLnZhbHVlID0gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5yYW1wVG8odmFsdWUsIHJhbXBUaW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBBdWRpb1BhcmFtKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnZhbHVlICE9PSB2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS52YWx1ZSA9IHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5UaW1lQmFzZSAmJiBwYXJhbSBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgICAgICAgICBwYXJlbnRbYXR0cl0gPSB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBUb25lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcGFyYW0uc2V0KHZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gIT09IHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcGFyZW50W2F0dHJdID0gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBvYmplY3QncyBhdHRyaWJ1dGVzLiBHaXZlbiBubyBhcmd1bWVudHMgZ2V0XG5cdFx0ICogIHdpbGwgcmV0dXJuIGFsbCBhdmFpbGFibGUgb2JqZWN0IHByb3BlcnRpZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmdcblx0XHQgKiAgdmFsdWVzLiBQYXNzIGluIGEgc2luZ2xlIGF0dHJpYnV0ZSB0byByZXRyaWV2ZSBvciBhbiBhcnJheVxuXHRcdCAqICBvZiBhdHRyaWJ1dGVzLiBUaGUgYXR0cmlidXRlIHN0cmluZ3MgY2FuIGFsc28gaW5jbHVkZSBhIFwiLlwiXG5cdFx0ICogIHRvIGFjY2VzcyBkZWVwZXIgcHJvcGVydGllcy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogb3NjLmdldCgpO1xuXHRcdCAqIC8vcmV0dXJucyB7XCJ0eXBlXCIgOiBcInNpbmVcIiwgXCJmcmVxdWVuY3lcIiA6IDQ0MCwgLi4uZXRjfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIG9zYy5nZXQoXCJ0eXBlXCIpO1xuXHRcdCAqIC8vcmV0dXJucyB7IFwidHlwZVwiIDogXCJzaW5lXCJ9XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL3VzZSBkb3Qgbm90YXRpb24gdG8gYWNjZXNzIGRlZXAgcHJvcGVydGllc1xuXHRcdCAqIHN5bnRoLmdldChbXCJlbnZlbG9wZS5hdHRhY2tcIiwgXCJlbnZlbG9wZS5yZWxlYXNlXCJdKTtcblx0XHQgKiAvL3JldHVybnMge1wiZW52ZWxvcGVcIiA6IHtcImF0dGFja1wiIDogMC4yLCBcInJlbGVhc2VcIiA6IDAuNH19XG5cdFx0ICogIEBwYXJhbSB7QXJyYXk9fHN0cmluZ3x1bmRlZmluZWR9IHBhcmFtcyB0aGUgcGFyYW1ldGVycyB0byBnZXQsIG90aGVyd2lzZSB3aWxsIHJldHVyblxuXHRcdCAqICBcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgYWxsIGF2YWlsYWJsZS5cblx0XHQgKiAgQHJldHVybnMge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHBhcmFtcykpIHtcblx0ICAgICAgICAgICAgcGFyYW1zID0gdGhpcy5fY29sbGVjdERlZmF1bHRzKHRoaXMuY29uc3RydWN0b3IpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyhwYXJhbXMpKSB7XG5cdCAgICAgICAgICAgIHBhcmFtcyA9IFtwYXJhbXNdO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmV0ID0ge307XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGF0dHIgPSBwYXJhbXNbaV07XG5cdCAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzO1xuXHQgICAgICAgICAgICB2YXIgc3ViUmV0ID0gcmV0O1xuXHQgICAgICAgICAgICBpZiAoYXR0ci5pbmRleE9mKCcuJykgIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYXR0clNwbGl0ID0gYXR0ci5zcGxpdCgnLicpO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRyU3BsaXQubGVuZ3RoIC0gMTsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHN1YkF0dHIgPSBhdHRyU3BsaXRbal07XG5cdCAgICAgICAgICAgICAgICAgICAgc3ViUmV0W3N1YkF0dHJdID0gc3ViUmV0W3N1YkF0dHJdIHx8IHt9O1xuXHQgICAgICAgICAgICAgICAgICAgIHN1YlJldCA9IHN1YlJldFtzdWJBdHRyXTtcblx0ICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRbc3ViQXR0cl07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBhdHRyID0gYXR0clNwbGl0W2F0dHJTcGxpdC5sZW5ndGggLSAxXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB2YXIgcGFyYW0gPSBwYXJlbnRbYXR0cl07XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KHBhcmFtc1thdHRyXSkpIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtLmdldCgpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuU2lnbmFsICYmIHBhcmFtIGluc3RhbmNlb2YgVG9uZS5TaWduYWwpIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtLnZhbHVlO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuUGFyYW0gJiYgcGFyYW0gaW5zdGFuY2VvZiBUb25lLlBhcmFtKSB7XG5cdCAgICAgICAgICAgICAgICBzdWJSZXRbYXR0cl0gPSBwYXJhbS52YWx1ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbnN0YW5jZW9mIEF1ZGlvUGFyYW0pIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtLnZhbHVlO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtIGluc3RhbmNlb2YgVG9uZSkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW0uZ2V0KCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoIVRvbmUuaXNGdW5jdGlvbihwYXJhbSkgJiYgVG9uZS5pc0RlZmluZWQocGFyYW0pKSB7XG5cdCAgICAgICAgICAgICAgICBzdWJSZXRbYXR0cl0gPSBwYXJhbTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcmV0O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjb2xsZWN0IGFsbCBvZiB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGluIG9uZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjb25zdHIgdGhlIGNvbnN0cnVjdG9yIHRvIGZpbmQgdGhlIGRlZmF1bHRzIGZyb21cblx0XHQgKiAgQHJldHVybiB7QXJyYXl9IGFsbCBvZiB0aGUgYXR0cmlidXRlcyB3aGljaCBiZWxvbmcgdG8gdGhlIGNsYXNzXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5fY29sbGVjdERlZmF1bHRzID0gZnVuY3Rpb24gKGNvbnN0cikge1xuXHQgICAgICAgIHZhciByZXQgPSBbXTtcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoY29uc3RyLmRlZmF1bHRzKSkge1xuXHQgICAgICAgICAgICByZXQgPSBPYmplY3Qua2V5cyhjb25zdHIuZGVmYXVsdHMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoY29uc3RyLl9zdXBlcikpIHtcblx0ICAgICAgICAgICAgdmFyIHN1cGVyRGVmcyA9IHRoaXMuX2NvbGxlY3REZWZhdWx0cyhjb25zdHIuX3N1cGVyKTtcblx0ICAgICAgICAgICAgLy9maWx0ZXIgb3V0IHJlcGVhdHNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdXBlckRlZnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmIChyZXQuaW5kZXhPZihzdXBlckRlZnNbaV0pID09PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKHN1cGVyRGVmc1tpXSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHJldDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRERUZBVUxUU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICB2YWx1ZXMgIFRoZSBhcmd1bWVudHMgYXJyYXlcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICBrZXlzICAgIFRoZSBuYW1lcyBvZiB0aGUgYXJndW1lbnRzXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fSBjb25zdHIgVGhlIGNsYXNzIGNvbnN0cnVjdG9yXG5cdFx0ICogIEByZXR1cm4gIHtPYmplY3R9ICBBbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlICBkZWZhdWx0cyBiZXR3ZWVuIHRoZSBjbGFzcycgZGVmYXVsdHNcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgcGFzc2VkIGluIGFyZ3VtZW50cy5cblx0XHQgKi9cblx0ICAgIFRvbmUuZGVmYXVsdHMgPSBmdW5jdGlvbiAodmFsdWVzLCBrZXlzLCBjb25zdHIpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IHt9O1xuXHQgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAxICYmIFRvbmUuaXNPYmplY3QodmFsdWVzWzBdKSkge1xuXHQgICAgICAgICAgICBvcHRpb25zID0gdmFsdWVzWzBdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgb3B0aW9uc1trZXlzW2ldXSA9IHZhbHVlc1tpXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoY29uc3RyLmRlZmF1bHRzKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIGNvbnN0ci5kZWZhdWx0cyk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzT2JqZWN0KGNvbnN0cikpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBjb25zdHIpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBvcHRpb25zO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSWYgdGhlIGBnaXZlbmAgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCwgdXNlIHRoZSBgZmFsbGJhY2tgLlxuXHRcdCAqICBJZiBib3RoIGBnaXZlbmAgYW5kIGBmYWxsYmFja2AgYXJlIG9iamVjdCBsaXRlcmFscywgaXQgd2lsbFxuXHRcdCAqICByZXR1cm4gYSBkZWVwIGNvcHkgd2hpY2ggaW5jbHVkZXMgYWxsIG9mIHRoZSBwYXJhbWV0ZXJzIGZyb20gYm90aFxuXHRcdCAqICBvYmplY3RzLiBJZiBhIHBhcmFtZXRlciBpcyB1bmRlZmluZWQgaW4gZ2l2ZW4sIGl0IHdpbGwgcmV0dXJuXG5cdFx0ICogIHRoZSBmYWxsYmFjayBwcm9wZXJ0eS5cblx0XHQgKiAgPGJyPjxicj5cblx0XHQgKiAgV0FSTklORzogaWYgb2JqZWN0IGlzIHNlbGYgcmVmZXJlbnRpYWwsIGl0IHdpbGwgZ28gaW50byBhbiBhblxuXHRcdCAqICBpbmZpbml0ZSByZWN1cnNpdmUgbG9vcC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHBhcmFtICB7Kn0gZ2l2ZW5cblx0XHQgKiAgQHBhcmFtICB7Kn0gZmFsbGJhY2tcblx0XHQgKiAgQHJldHVybiB7Kn1cblx0XHQgKi9cblx0ICAgIFRvbmUuZGVmYXVsdEFyZyA9IGZ1bmN0aW9uIChnaXZlbiwgZmFsbGJhY2spIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc09iamVjdChnaXZlbikgJiYgVG9uZS5pc09iamVjdChmYWxsYmFjaykpIHtcblx0ICAgICAgICAgICAgdmFyIHJldCA9IHt9O1xuXHQgICAgICAgICAgICAvL21ha2UgYSBkZWVwIGNvcHkgb2YgdGhlIGdpdmVuIG9iamVjdFxuXHQgICAgICAgICAgICBmb3IgKHZhciBnaXZlblByb3AgaW4gZ2l2ZW4pIHtcblx0ICAgICAgICAgICAgICAgIHJldFtnaXZlblByb3BdID0gVG9uZS5kZWZhdWx0QXJnKGZhbGxiYWNrW2dpdmVuUHJvcF0sIGdpdmVuW2dpdmVuUHJvcF0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGZvciAodmFyIGZhbGxiYWNrUHJvcCBpbiBmYWxsYmFjaykge1xuXHQgICAgICAgICAgICAgICAgcmV0W2ZhbGxiYWNrUHJvcF0gPSBUb25lLmRlZmF1bHRBcmcoZ2l2ZW5bZmFsbGJhY2tQcm9wXSwgZmFsbGJhY2tbZmFsbGJhY2tQcm9wXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHJldDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5pc1VuZGVmKGdpdmVuKSA/IGZhbGxiYWNrIDogZ2l2ZW47XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdENPTk5FQ1RJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBjb25uZWN0IHRvZ2V0aGVyIGFsbCBvZiB0aGUgYXJndW1lbnRzIGluIHNlcmllc1xuXHRcdCAqICBAcGFyYW0gey4uLkF1ZGlvUGFyYW18VG9uZXxBdWRpb05vZGV9IG5vZGVzXG5cdFx0ICogIEByZXR1cm5zIHtUb25lfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLmNvbm5lY3RTZXJpZXMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRVbml0ID0gYXJndW1lbnRzWzBdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciB0b1VuaXQgPSBhcmd1bWVudHNbaV07XG5cdCAgICAgICAgICAgIGN1cnJlbnRVbml0LmNvbm5lY3QodG9Vbml0KTtcblx0ICAgICAgICAgICAgY3VycmVudFVuaXQgPSB0b1VuaXQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBUb25lO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gVFlQRSBDSEVDS0lOR1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJnIGlzIHVuZGVmaW5lZFxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIHVuZGVmaW5lZFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzVW5kZWYgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmcgaXMgbm90IHVuZGVmaW5lZFxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIHVuZGVmaW5lZFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzRGVmaW5lZCA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICByZXR1cm4gIVRvbmUuaXNVbmRlZih2YWwpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmcgaXMgYSBmdW5jdGlvblxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGEgZnVuY3Rpb25cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc0Z1bmN0aW9uID0gZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlci5cblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhIG51bWJlclxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzTnVtYmVyID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgZ2l2ZW4gYXJndW1lbnQgaXMgYW4gb2JqZWN0IGxpdGVyYWwgKGkuZS4gYHt9YCk7XG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYW4gb2JqZWN0IGxpdGVyYWwuXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNPYmplY3QgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBPYmplY3RdJyAmJiBhcmcuY29uc3RydWN0b3IgPT09IE9iamVjdDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJndW1lbnQgaXMgYSBib29sZWFuLlxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGEgYm9vbGVhblxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzQm9vbGVhbiA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBhbiBBcnJheVxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGFuIGFycmF5XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNBcnJheSA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhcmcpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBhIHN0cmluZy5cblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhIHN0cmluZ1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzU3RyaW5nID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJndW1lbnQgaXMgaW4gdGhlIGZvcm0gb2YgYSBub3RlIGluIHNjaWVudGlmaWMgcGl0Y2ggbm90YXRpb24uXG5cdFx0ICogIGUuZy4gXCJDNFwiXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYSBzdHJpbmdcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc05vdGUgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuaXNTdHJpbmcoYXJnKSAmJiAvXihbYS1nXXsxfSg/OmJ8I3x4fGJiKT8pKC0/WzAtOV0rKS9pLnRlc3QoYXJnKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQW4gZW1wdHkgZnVuY3Rpb24uXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUubm9PcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTWFrZSB0aGUgcHJvcGVydHkgbm90IHdyaXRhYmxlLiBJbnRlcm5hbCB1c2Ugb25seS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgcHJvcGVydHkgIHRoZSBwcm9wZXJ0eSB0byBtYWtlIG5vdCB3cml0YWJsZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuX3JlYWRPbmx5ID0gZnVuY3Rpb24gKHByb3BlcnR5KSB7XG5cdCAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHkpKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydHkubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRPbmx5KHByb3BlcnR5W2ldKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eSwge1xuXHQgICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuXHQgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIE1ha2UgYW4gYXR0cmlidXRlIHdyaXRlYWJsZS4gSW50ZXJhbCB1c2Ugb25seS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgcHJvcGVydHkgIHRoZSBwcm9wZXJ0eSB0byBtYWtlIHdyaXRhYmxlXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5fd3JpdGFibGUgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcblx0ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0eSkpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0eS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fd3JpdGFibGUocHJvcGVydHlbaV0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5LCB7IHdyaXRhYmxlOiB0cnVlIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBQb3NzaWJsZSBwbGF5IHN0YXRlcy5cblx0XHQgKiBAZW51bSB7U3RyaW5nfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGF0ZSA9IHtcblx0ICAgICAgICBTdGFydGVkOiAnc3RhcnRlZCcsXG5cdCAgICAgICAgU3RvcHBlZDogJ3N0b3BwZWQnLFxuXHQgICAgICAgIFBhdXNlZDogJ3BhdXNlZCdcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBFcXVhbCBwb3dlciBnYWluIHNjYWxlLiBHb29kIGZvciBjcm9zcy1mYWRpbmcuXG5cdFx0ICogIEBwYXJhbSAge05vcm1hbFJhbmdlfSBwZXJjZW50ICgwLTEpXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn0gICAgICAgICBvdXRwdXQgZ2FpbiAoMC0xKVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmVxdWFsUG93ZXJTY2FsZSA9IGZ1bmN0aW9uIChwZXJjZW50KSB7XG5cdCAgICAgICAgdmFyIHBpRmFjdG9yID0gMC41ICogTWF0aC5QSTtcblx0ICAgICAgICByZXR1cm4gTWF0aC5zaW4ocGVyY2VudCAqIHBpRmFjdG9yKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBkZWNpYmVscyBpbnRvIGdhaW4uXG5cdFx0ICogIEBwYXJhbSAge0RlY2liZWxzfSBkYlxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuZGJUb0dhaW4gPSBmdW5jdGlvbiAoZGIpIHtcblx0ICAgICAgICByZXR1cm4gTWF0aC5wb3coMTAsIGRiIC8gMjApO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGdhaW4gdG8gZGVjaWJlbHMuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gZ2FpbiAoMC0xKVxuXHRcdCAqICBAcmV0dXJuIHtEZWNpYmVsc31cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5nYWluVG9EYiA9IGZ1bmN0aW9uIChnYWluKSB7XG5cdCAgICAgICAgcmV0dXJuIDIwICogKE1hdGgubG9nKGdhaW4pIC8gTWF0aC5MTjEwKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhbiBpbnRlcnZhbCAoaW4gc2VtaXRvbmVzKSB0byBhIGZyZXF1ZW5jeSByYXRpby5cblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWx9IGludGVydmFsIHRoZSBudW1iZXIgb2Ygc2VtaXRvbmVzIGFib3ZlIHRoZSBiYXNlIG5vdGVcblx0XHQgKiAgQHJldHVybiB7TnVtYmVyfSAgICAgICAgICB0aGUgZnJlcXVlbmN5IHJhdGlvXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB0b25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbygwKTsgLy8gMVxuXHRcdCAqIHRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKDEyKTsgLy8gMlxuXHRcdCAqIHRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKC0xMik7IC8vIDAuNVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8gPSBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICByZXR1cm4gTWF0aC5wb3coMiwgaW50ZXJ2YWwgLyAxMik7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VElNSU5HXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBvZiB0aGUgQXVkaW9Db250ZXh0IGNsb2NrLlxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9IHRoZSBjdXJyZW50VGltZSBmcm9tIHRoZSBBdWRpb0NvbnRleHRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuY29udGV4dC5ub3coKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgb2YgdGhlIEF1ZGlvQ29udGV4dCBjbG9jay5cblx0XHQgKiAgQHJldHVybiB7TnVtYmVyfSB0aGUgY3VycmVudFRpbWUgZnJvbSB0aGUgQXVkaW9Db250ZXh0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUubm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLmNvbnRleHQubm93KCk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0SU5IRVJJVEFOQ0Vcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIGhhdmUgYSBjaGlsZCBpbmhlcml0IGFsbCBvZiBUb25lJ3MgKG9yIGEgcGFyZW50J3MpIHByb3RvdHlwZVxuXHRcdCAqICB0byBpbmhlcml0IHRoZSBwYXJlbnQncyBwcm9wZXJ0aWVzLCBtYWtlIHN1cmUgdG8gY2FsbFxuXHRcdCAqICBQYXJlbnQuY2FsbCh0aGlzKSBpbiB0aGUgY2hpbGQncyBjb25zdHJ1Y3RvclxuXHRcdCAqXG5cdFx0ICogIGJhc2VkIG9uIGNsb3N1cmUgbGlicmFyeSdzIGluaGVyaXQgZnVuY3Rpb25cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSBcdGNoaWxkXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gcGFyZW50IChvcHRpb25hbCkgcGFyZW50IHRvIGluaGVyaXQgZnJvbVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBubyBwYXJlbnQgaXMgc3VwcGxpZWQsIHRoZSBjaGlsZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGluaGVyaXQgZnJvbSBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmV4dGVuZCA9IGZ1bmN0aW9uIChjaGlsZCwgcGFyZW50KSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihwYXJlbnQpKSB7XG5cdCAgICAgICAgICAgIHBhcmVudCA9IFRvbmU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIFRlbXBDb25zdHJ1Y3RvcigpIHtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVGVtcENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7XG5cdCAgICAgICAgY2hpbGQucHJvdG90eXBlID0gbmV3IFRlbXBDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgIC8qKiBAb3ZlcnJpZGUgKi9cblx0ICAgICAgICBjaGlsZC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjaGlsZDtcblx0ICAgICAgICBjaGlsZC5fc3VwZXIgPSBwYXJlbnQ7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0Q09OVEVYVFxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUHJpdmF0ZSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBBdWRpb0NvbnRleHRcblx0XHQgKiAgQHR5cGUge0F1ZGlvQ29udGV4dH1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIHZhciBhdWRpb0NvbnRleHQgPSBudWxsO1xuXHQgICAgLyoqXG5cdFx0ICogIEEgc3RhdGljIHBvaW50ZXIgdG8gdGhlIGF1ZGlvIGNvbnRleHQgYWNjZXNzaWJsZSBhcyBUb25lLmNvbnRleHQuXG5cdFx0ICogIEB0eXBlIHtUb25lLkNvbnRleHR9XG5cdFx0ICogIEBuYW1lIGNvbnRleHRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLCAnY29udGV4dCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGF1ZGlvQ29udGV4dDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuQ29udGV4dCAmJiBjb250ZXh0IGluc3RhbmNlb2YgVG9uZS5Db250ZXh0KSB7XG5cdCAgICAgICAgICAgICAgICBhdWRpb0NvbnRleHQgPSBjb250ZXh0O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgYXVkaW9Db250ZXh0ID0gbmV3IFRvbmUuQ29udGV4dChjb250ZXh0KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL2luaXRpYWxpemUgdGhlIG5ldyBhdWRpbyBjb250ZXh0XG5cdCAgICAgICAgICAgIFRvbmUuQ29udGV4dC5lbWl0KCdpbml0JywgYXVkaW9Db250ZXh0KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgQXVkaW9Db250ZXh0XG5cdFx0ICogIEB0eXBlIHtUb25lLkNvbnRleHR9XG5cdFx0ICogIEBuYW1lIGNvbnRleHRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUucHJvdG90eXBlLCAnY29udGV4dCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuY29udGV4dDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUb25lIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBhIGNvbnRleHQgb24gaW5pdCwgYnV0IGlmIHlvdSBhcmUgd29ya2luZ1xuXHRcdCAqICB3aXRoIG90aGVyIGxpYnJhcmllcyB3aGljaCBhbHNvIGNyZWF0ZSBhbiBBdWRpb0NvbnRleHQsIGl0IGNhbiBiZVxuXHRcdCAqICB1c2VmdWwgdG8gc2V0IHlvdXIgb3duLiBJZiB5b3UgYXJlIGdvaW5nIHRvIHNldCB5b3VyIG93biBjb250ZXh0LFxuXHRcdCAqICBiZSBzdXJlIHRvIGRvIGl0IGF0IHRoZSBzdGFydCBvZiB5b3VyIGNvZGUsIGJlZm9yZSBjcmVhdGluZyBhbnkgb2JqZWN0cy5cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcGFyYW0ge0F1ZGlvQ29udGV4dH0gY3R4IFRoZSBuZXcgYXVkaW8gY29udGV4dCB0byBzZXRcblx0XHQgKi9cblx0ICAgIFRvbmUuc2V0Q29udGV4dCA9IGZ1bmN0aW9uIChjdHgpIHtcblx0ICAgICAgICBUb25lLmNvbnRleHQgPSBjdHg7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QVRUUklCVVRFU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBzZWNvbmRzIG9mIDEgcHJvY2Vzc2luZyBibG9jayAoMTI4IHNhbXBsZXMpXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIGJsb2NrVGltZVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUucHJvdG90eXBlLCAnYmxvY2tUaW1lJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gMTI4IC8gdGhpcy5jb250ZXh0LnNhbXBsZVJhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGR1cmF0aW9uIGluIHNlY29uZHMgb2Ygb25lIHNhbXBsZS5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgc2FtcGxlVGltZVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUucHJvdG90eXBlLCAnc2FtcGxlVGltZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIDEgLyB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBXaGV0aGVyIG9yIG5vdCBhbGwgdGhlIHRlY2hub2xvZ2llcyB0aGF0IFRvbmUuanMgcmVsaWVzIG9uIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnJvd3Nlci5cblx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogIEBuYW1lIHN1cHBvcnRlZFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUsICdzdXBwb3J0ZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBoYXNBdWRpb0NvbnRleHQgPSB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ0F1ZGlvQ29udGV4dCcpIHx8IHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnd2Via2l0QXVkaW9Db250ZXh0Jyk7XG5cdCAgICAgICAgICAgIHZhciBoYXNQcm9taXNlcyA9IHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnUHJvbWlzZScpO1xuXHQgICAgICAgICAgICB2YXIgaGFzV29ya2VycyA9IHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnV29ya2VyJyk7XG5cdCAgICAgICAgICAgIHJldHVybiBoYXNBdWRpb0NvbnRleHQgJiYgaGFzUHJvbWlzZXMgJiYgaGFzV29ya2Vycztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBCb29sZWFuIHZhbHVlIGlmIHRoZSBhdWRpbyBjb250ZXh0IGhhcyBiZWVuIGluaXRpYWxpemVkLlxuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbmFtZSBpbml0aWFsaXplZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUsICdpbml0aWFsaXplZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGF1ZGlvQ29udGV4dCAhPT0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGNvbnRleHQgd2hlbiBpdCBiZWNvbWVzIGF2YWlsYWJsZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIHJlc29sdmUgIENhbGxiYWNrIHdoZW4gdGhlIGNvbnRleHQgaXMgaW5pdGlhbGl6ZWRcblx0XHQgKiAgQHJldHVybiAge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLmdldENvbnRleHQgPSBmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHQgICAgICAgIGlmIChUb25lLmluaXRpYWxpemVkKSB7XG5cdCAgICAgICAgICAgIHJlc29sdmUoVG9uZS5jb250ZXh0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgcmVzQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXNvbHZlKFRvbmUuY29udGV4dCk7XG5cdCAgICAgICAgICAgICAgICBUb25lLkNvbnRleHQub2ZmKCdpbml0JywgcmVzQ2FsbGJhY2spO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCByZXNDYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBUb25lO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB2ZXJzaW9uIG51bWJlclxuXHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS52ZXJzaW9uID0gJ3IxMic7XG5cdCAgICByZXR1cm4gVG9uZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRW1pdHRlciBnaXZlcyBjbGFzc2VzIHdoaWNoIGV4dGVuZCBpdFxuXHRcdCAqICAgICAgICAgdGhlIGFiaWxpdHkgdG8gbGlzdGVuIGZvciBhbmQgZW1pdCBldmVudHMuXG5cdFx0ICogICAgICAgICBJbnNwaXJhdGlvbiBhbmQgcmVmZXJlbmNlIGZyb20gSmVyb21lIEV0aWVubmUncyBbTWljcm9FdmVudF0oaHR0cHM6Ly9naXRodWIuY29tL2plcm9tZWV0aWVubmUvbWljcm9ldmVudC5qcykuXG5cdFx0ICogICAgICAgICBNSVQgKGMpIDIwMTEgSmVyb21lIEV0aWVubmUuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIENvbnRhaW5zIGFsbCBvZiB0aGUgZXZlbnRzLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSB7fTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkVtaXR0ZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIEJpbmQgYSBjYWxsYmFjayB0byBhIHNwZWNpZmljIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICAgIGV2ZW50ICAgICBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgdG8gbGlzdGVuIGZvci5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCBpcyBlbWl0dGVkXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkVtaXR0ZXJ9ICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9zcGxpdCB0aGUgZXZlbnRcblx0ICAgICAgICB2YXIgZXZlbnRzID0gZXZlbnQuc3BsaXQoL1xcVysvKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnROYW1lID0gZXZlbnRzW2ldO1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMuX2V2ZW50cy5oYXNPd25Qcm9wZXJ0eShldmVudE5hbWUpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbZXZlbnROYW1lXSA9IFtdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50c1tldmVudE5hbWVdLnB1c2goY2FsbGJhY2spO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQmluZCBhIGNhbGxiYWNrIHdoaWNoIGlzIG9ubHkgaW52b2tlZCBvbmNlXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gICAgZXZlbnQgICAgIFRoZSBuYW1lIG9mIHRoZSBldmVudCB0byBsaXN0ZW4gZm9yLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50IGlzIGVtaXR0ZWRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaykge1xuXHQgICAgICAgIHZhciBib3VuZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvL2ludm9rZSB0aGUgY2FsbGJhY2tcblx0ICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgdGhpcy5vZmYoZXZlbnQsIGJvdW5kQ2FsbGJhY2spO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm9uKGV2ZW50LCBib3VuZENhbGxiYWNrKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIHRoZSBldmVudCBsaXN0ZW5lci5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgICBldmVudCAgICAgVGhlIGV2ZW50IHRvIHN0b3AgbGlzdGVuaW5nIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHdoaWNoIHdhcyBib3VuZCB0b1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZXZlbnQgd2l0aCBUb25lLkVtaXR0ZXIub24uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vIGNhbGxiYWNrIGlzIGdpdmVuLCBhbGwgY2FsbGJhY2tzXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50cyBhcmUgcmVtb3ZlZC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50cyA9IGV2ZW50LnNwbGl0KC9cXFcrLyk7XG5cdCAgICAgICAgZm9yICh2YXIgZXYgPSAwOyBldiA8IGV2ZW50cy5sZW5ndGg7IGV2KyspIHtcblx0ICAgICAgICAgICAgZXZlbnQgPSBldmVudHNbZXZdO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50KSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihjYWxsYmFjaykpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbZXZlbnRdID0gW107XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBldmVudExpc3QgPSB0aGlzLl9ldmVudHNbZXZlbnRdO1xuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRMaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudExpc3RbaV0gPT09IGNhbGxiYWNrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudExpc3Quc3BsaWNlKGksIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnZva2UgYWxsIG9mIHRoZSBjYWxsYmFja3MgYm91bmQgdG8gdGhlIGV2ZW50XG5cdFx0ICogIHdpdGggYW55IGFyZ3VtZW50cyBwYXNzZWQgaW4uXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGV2ZW50ICBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJncy4uLiBUaGUgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9ucyBsaXN0ZW5pbmcuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkVtaXR0ZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzKSB7XG5cdCAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5zbGljZSgxKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2V2ZW50cy5oYXNPd25Qcm9wZXJ0eShldmVudCkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBldmVudExpc3QgPSB0aGlzLl9ldmVudHNbZXZlbnRdLnNsaWNlKDApO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGV2ZW50TGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50TGlzdFtpXS5hcHBseSh0aGlzLCBhcmdzKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIEVtaXR0ZXIgZnVuY3Rpb25zIChvbi9vZmYvZW1pdCkgdG8gdGhlIG9iamVjdFxuXHRcdCAqICBAcGFyYW0gIHtPYmplY3R8RnVuY3Rpb259ICBvYmplY3QgIFRoZSBvYmplY3Qgb3IgY2xhc3MgdG8gZXh0ZW5kLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FbWl0dGVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLm1peGluID0gZnVuY3Rpb24gKG9iamVjdCkge1xuXHQgICAgICAgIHZhciBmdW5jdGlvbnMgPSBbXG5cdCAgICAgICAgICAgICdvbicsXG5cdCAgICAgICAgICAgICdvbmNlJyxcblx0ICAgICAgICAgICAgJ29mZicsXG5cdCAgICAgICAgICAgICdlbWl0J1xuXHQgICAgICAgIF07XG5cdCAgICAgICAgb2JqZWN0Ll9ldmVudHMgPSB7fTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZnVuYyA9IGZ1bmN0aW9uc1tpXTtcblx0ICAgICAgICAgICAgdmFyIGVtaXR0ZXJGdW5jID0gVG9uZS5FbWl0dGVyLnByb3RvdHlwZVtmdW5jXTtcblx0ICAgICAgICAgICAgb2JqZWN0W2Z1bmNdID0gZW1pdHRlckZ1bmM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBUb25lLkVtaXR0ZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkVtaXR0ZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRW1pdHRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgVGltZWxpbmUgY2xhc3MgZm9yIHNjaGVkdWxpbmcgYW5kIG1haW50YWluaW5nIHN0YXRlXG5cdFx0ICogICAgICAgICBhbG9uZyBhIHRpbWVsaW5lLiBBbGwgZXZlbnRzIG11c3QgaGF2ZSBhIFwidGltZVwiIHByb3BlcnR5LlxuXHRcdCAqICAgICAgICAgSW50ZXJuYWxseSwgZXZlbnRzIGFyZSBzdG9yZWQgaW4gdGltZSBvcmRlciBmb3IgZmFzdFxuXHRcdCAqICAgICAgICAgcmV0cmlldmFsLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtQb3NpdGl2ZX0gW21lbW9yeT1JbmZpbml0eV0gVGhlIG51bWJlciBvZiBwcmV2aW91cyBldmVudHMgdGhhdCBhcmUgcmV0YWluZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnbWVtb3J5J10sIFRvbmUuVGltZWxpbmUpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYXJyYXkgb2Ygc2NoZWR1bGVkIHRpbWVsaW5lIGV2ZW50c1xuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1lbW9yeSBvZiB0aGUgdGltZWxpbmUsIGkuZS5cblx0XHRcdCAqICBob3cgbWFueSBldmVudHMgaW4gdGhlIHBhc3QgaXQgd2lsbCByZXRhaW5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1lbW9yeSA9IG9wdGlvbnMubWVtb3J5O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGltZWxpbmUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUuZGVmYXVsdHMgPSB7ICdtZW1vcnknOiBJbmZpbml0eSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UaW1lbGluZSNcblx0XHQgKiAgQG5hbWUgbGVuZ3RoXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVGltZWxpbmUucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmUubGVuZ3RoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEluc2VydCBhbiBldmVudCBvYmplY3Qgb250byB0aGUgdGltZWxpbmUuIEV2ZW50cyBtdXN0IGhhdmUgYSBcInRpbWVcIiBhdHRyaWJ1dGUuXG5cdFx0ICogIEBwYXJhbSAge09iamVjdH0gIGV2ZW50ICBUaGUgZXZlbnQgb2JqZWN0IHRvIGluc2VydCBpbnRvIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmUuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAvL3RoZSBldmVudCBuZWVkcyB0byBoYXZlIGEgdGltZSBhdHRyaWJ1dGVcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKGV2ZW50LnRpbWUpKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5UaW1lbGluZTogZXZlbnRzIG11c3QgaGF2ZSBhIHRpbWUgYXR0cmlidXRlJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGV2ZW50LnRpbWUgPSBldmVudC50aW1lLnZhbHVlT2YoKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2goZXZlbnQudGltZSk7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUuc3BsaWNlKGluZGV4ICsgMSwgMCwgZXZlbnQpO1xuXHQgICAgICAgIC8vaWYgdGhlIGxlbmd0aCBpcyBtb3JlIHRoYW4gdGhlIG1lbW9yeSwgcmVtb3ZlIHRoZSBwcmV2aW91cyBvbmVzXG5cdCAgICAgICAgaWYgKHRoaXMubGVuZ3RoID4gdGhpcy5tZW1vcnkpIHtcblx0ICAgICAgICAgICAgdmFyIGRpZmYgPSB0aGlzLmxlbmd0aCAtIHRoaXMubWVtb3J5O1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lbGluZS5zcGxpY2UoMCwgZGlmZik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgYW4gZXZlbnQgZnJvbSB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge09iamVjdH0gIGV2ZW50ICBUaGUgZXZlbnQgb2JqZWN0IHRvIHJlbW92ZSBmcm9tIHRoZSBsaXN0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fdGltZWxpbmUuaW5kZXhPZihldmVudCk7XG5cdCAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lbGluZS5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBuZWFyZXN0IGV2ZW50IHdob3NlIHRpbWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgY29tcGFyYXRvciBXaGljaCB2YWx1ZSBpbiB0aGUgb2JqZWN0IHRvIGNvbXBhcmVcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGV2ZW50IG9iamVjdCBzZXQgYWZ0ZXIgdGhhdCB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHRpbWUsIGNvbXBhcmF0b3IpIHtcblx0ICAgICAgICBjb21wYXJhdG9yID0gVG9uZS5kZWZhdWx0QXJnKGNvbXBhcmF0b3IsICd0aW1lJyk7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUsIGNvbXBhcmF0b3IpO1xuXHQgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lW2luZGV4XTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZmlyc3QgZXZlbnQgaW4gdGhlIHRpbWVsaW5lIHdpdGhvdXQgcmVtb3ZpbmcgaXRcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGZpcnN0IGV2ZW50IG9iamVjdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUucGVlayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbMF07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZmlyc3QgZXZlbnQgaW4gdGhlIHRpbWVsaW5lIGFuZCByZW1vdmUgaXRcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGZpcnN0IGV2ZW50IG9iamVjdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuc2hpZnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lLnNoaWZ0KCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgZXZlbnQgd2hpY2ggaXMgc2NoZWR1bGVkIGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgY29tcGFyYXRvciBXaGljaCB2YWx1ZSBpbiB0aGUgb2JqZWN0IHRvIGNvbXBhcmVcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGV2ZW50IG9iamVjdCBhZnRlciB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZ2V0QWZ0ZXIgPSBmdW5jdGlvbiAodGltZSwgY29tcGFyYXRvcikge1xuXHQgICAgICAgIGNvbXBhcmF0b3IgPSBUb25lLmRlZmF1bHRBcmcoY29tcGFyYXRvciwgJ3RpbWUnKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSwgY29tcGFyYXRvcik7XG5cdCAgICAgICAgaWYgKGluZGV4ICsgMSA8IHRoaXMuX3RpbWVsaW5lLmxlbmd0aCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbaW5kZXggKyAxXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgZXZlbnQgYmVmb3JlIHRoZSBldmVudCBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGNvbXBhcmF0b3IgV2hpY2ggdmFsdWUgaW4gdGhlIG9iamVjdCB0byBjb21wYXJlXG5cdFx0ICogIEByZXR1cm5zIHtPYmplY3R9IFRoZSBldmVudCBvYmplY3QgYmVmb3JlIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5nZXRCZWZvcmUgPSBmdW5jdGlvbiAodGltZSwgY29tcGFyYXRvcikge1xuXHQgICAgICAgIGNvbXBhcmF0b3IgPSBUb25lLmRlZmF1bHRBcmcoY29tcGFyYXRvciwgJ3RpbWUnKTtcblx0ICAgICAgICB2YXIgbGVuID0gdGhpcy5fdGltZWxpbmUubGVuZ3RoO1xuXHQgICAgICAgIC8vaWYgaXQncyBhZnRlciB0aGUgbGFzdCBpdGVtLCByZXR1cm4gdGhlIGxhc3QgaXRlbVxuXHQgICAgICAgIGlmIChsZW4gPiAwICYmIHRoaXMuX3RpbWVsaW5lW2xlbiAtIDFdW2NvbXBhcmF0b3JdIDwgdGltZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbbGVuIC0gMV07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lLCBjb21wYXJhdG9yKTtcblx0ICAgICAgICBpZiAoaW5kZXggLSAxID49IDApIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lW2luZGV4IC0gMV07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgZXZlbnRzIGFmdGVyIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lLmxlbmd0aCA+IDEpIHtcblx0ICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKGFmdGVyKTtcblx0ICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl90aW1lbGluZVtpbmRleF0udGltZSA9PT0gYWZ0ZXIpIHtcblx0ICAgICAgICAgICAgICAgICAgICAvL2dldCB0aGUgZmlyc3QgaXRlbSB3aXRoIHRoYXQgdGltZVxuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBpbmRleDsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lW2ldLnRpbWUgPT09IGFmdGVyKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IHRoaXMuX3RpbWVsaW5lLnNsaWNlKDAsIGluZGV4KTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSB0aGlzLl90aW1lbGluZS5zbGljZSgwLCBpbmRleCArIDEpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSBbXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGltZWxpbmUubGVuZ3RoID09PSAxKSB7XG5cdCAgICAgICAgICAgIC8vdGhlIGZpcnN0IGl0ZW0ncyB0aW1lXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90aW1lbGluZVswXS50aW1lID49IGFmdGVyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IFtdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgZXZlbnRzIGJlZm9yZSBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gY2FuY2VsIGJlZm9yZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmNhbmNlbEJlZm9yZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gdGhpcy5fdGltZWxpbmUuc2xpY2UoaW5kZXggKyAxKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJucyB0aGUgcHJldmlvdXMgZXZlbnQgaWYgdGhlcmUgaXMgb25lLiBudWxsIG90aGVyd2lzZVxuXHRcdCAqIEBwYXJhbSAge09iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHRvIGZpbmQgdGhlIHByZXZpb3VzIG9uZSBvZlxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gICAgICAgVGhlIGV2ZW50IHJpZ2h0IGJlZm9yZSB0aGUgZ2l2ZW4gZXZlbnRcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLnByZXZpb3VzRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl90aW1lbGluZS5pbmRleE9mKGV2ZW50KTtcblx0ICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVtpbmRleCAtIDFdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgRG9lcyBhIGJpbmFyeSBzZWFyY2ggb24gdGhlIHRpbWVsaW5lIGFycmF5IGFuZCByZXR1cm5zIHRoZVxuXHRcdCAqICBuZWFyZXN0IGV2ZW50IGluZGV4IHdob3NlIHRpbWUgaXMgYWZ0ZXIgb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIElmIGEgdGltZSBpcyBzZWFyY2hlZCBiZWZvcmUgdGhlIGZpcnN0IGluZGV4IGluIHRoZSB0aW1lbGluZSwgLTEgaXMgcmV0dXJuZWQuXG5cdFx0ICogIElmIHRoZSB0aW1lIGlzIGFmdGVyIHRoZSBlbmQsIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBpdGVtIGlzIHJldHVybmVkLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGNvbXBhcmF0b3IgV2hpY2ggdmFsdWUgaW4gdGhlIG9iamVjdCB0byBjb21wYXJlXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9IHRoZSBpbmRleCBpbiB0aGUgdGltZWxpbmUgYXJyYXlcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLl9zZWFyY2ggPSBmdW5jdGlvbiAodGltZSwgY29tcGFyYXRvcikge1xuXHQgICAgICAgIGlmICh0aGlzLl90aW1lbGluZS5sZW5ndGggPT09IDApIHtcblx0ICAgICAgICAgICAgcmV0dXJuIC0xO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBjb21wYXJhdG9yID0gVG9uZS5kZWZhdWx0QXJnKGNvbXBhcmF0b3IsICd0aW1lJyk7XG5cdCAgICAgICAgdmFyIGJlZ2lubmluZyA9IDA7XG5cdCAgICAgICAgdmFyIGxlbiA9IHRoaXMuX3RpbWVsaW5lLmxlbmd0aDtcblx0ICAgICAgICB2YXIgZW5kID0gbGVuO1xuXHQgICAgICAgIGlmIChsZW4gPiAwICYmIHRoaXMuX3RpbWVsaW5lW2xlbiAtIDFdW2NvbXBhcmF0b3JdIDw9IHRpbWUpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGxlbiAtIDE7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHdoaWxlIChiZWdpbm5pbmcgPCBlbmQpIHtcblx0ICAgICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBtaWRwb2ludCBmb3Igcm91Z2hseSBlcXVhbCBwYXJ0aXRpb25cblx0ICAgICAgICAgICAgdmFyIG1pZFBvaW50ID0gTWF0aC5mbG9vcihiZWdpbm5pbmcgKyAoZW5kIC0gYmVnaW5uaW5nKSAvIDIpO1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl90aW1lbGluZVttaWRQb2ludF07XG5cdCAgICAgICAgICAgIHZhciBuZXh0RXZlbnQgPSB0aGlzLl90aW1lbGluZVttaWRQb2ludCArIDFdO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnRbY29tcGFyYXRvcl0gPT09IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIC8vY2hvb3NlIHRoZSBsYXN0IG9uZSB0aGF0IGhhcyB0aGUgc2FtZSB0aW1lXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gbWlkUG9pbnQ7IGkgPCB0aGlzLl90aW1lbGluZS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0ZXN0RXZlbnQgPSB0aGlzLl90aW1lbGluZVtpXTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGVzdEV2ZW50W2NvbXBhcmF0b3JdID09PSB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG1pZFBvaW50ID0gaTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbWlkUG9pbnQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRbY29tcGFyYXRvcl0gPCB0aW1lICYmIG5leHRFdmVudFtjb21wYXJhdG9yXSA+IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBtaWRQb2ludDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudFtjb21wYXJhdG9yXSA+IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIC8vc2VhcmNoIGxvd2VyXG5cdCAgICAgICAgICAgICAgICBlbmQgPSBtaWRQb2ludDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vc2VhcmNoIHVwcGVyXG5cdCAgICAgICAgICAgICAgICBiZWdpbm5pbmcgPSBtaWRQb2ludCArIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIC0xO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBpdGVyYXRvci4gQXBwbGllcyBleHRyYSBzYWZldHkgY2hlY2tzIGZvclxuXHRcdCAqICByZW1vdmluZyBpdGVtcyBmcm9tIHRoZSBhcnJheS5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFja1xuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXI9fSAgICBsb3dlckJvdW5kXG5cdFx0ICogIEBwYXJhbSAge051bWJlcj19ICAgIHVwcGVyQm91bmRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLl9pdGVyYXRlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBsb3dlckJvdW5kLCB1cHBlckJvdW5kKSB7XG5cdCAgICAgICAgbG93ZXJCb3VuZCA9IFRvbmUuZGVmYXVsdEFyZyhsb3dlckJvdW5kLCAwKTtcblx0ICAgICAgICB1cHBlckJvdW5kID0gVG9uZS5kZWZhdWx0QXJnKHVwcGVyQm91bmQsIHRoaXMuX3RpbWVsaW5lLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lLnNsaWNlKGxvd2VyQm91bmQsIHVwcGVyQm91bmQgKyAxKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGV2ZW50KTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXlcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2spO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgYXQgb3IgYmVmb3JlIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEJlZm9yZSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vaXRlcmF0ZSBvdmVyIHRoZSBpdGVtcyBpbiByZXZlcnNlIHNvIHRoYXQgcmVtb3ZpbmcgYW4gaXRlbSBkb2Vzbid0IGJyZWFrIHRoaW5nc1xuXHQgICAgICAgIHZhciB1cHBlckJvdW5kID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIGlmICh1cHBlckJvdW5kICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLl9pdGVyYXRlKGNhbGxiYWNrLCAwLCB1cHBlckJvdW5kKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBhZnRlciB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSBUaGUgdGltZSB0byBjaGVjayBpZiBpdGVtcyBhcmUgYmVmb3JlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2hBZnRlciA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vaXRlcmF0ZSBvdmVyIHRoZSBpdGVtcyBpbiByZXZlcnNlIHNvIHRoYXQgcmVtb3ZpbmcgYW4gaXRlbSBkb2Vzbid0IGJyZWFrIHRoaW5nc1xuXHQgICAgICAgIHZhciBsb3dlckJvdW5kID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIGxvd2VyQm91bmQgKyAxKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGJldHdlZW4gdGhlIHN0YXJ0VGltZSBhbmQgZW5kVGltZS4gXG5cdFx0ICogIFRoZSB0aW1lcmFuZ2UgaXMgaW5jbHVzaXZlIG9mIHRoZSBzdGFydFRpbWUsIGJ1dCBleGNsdXNpdmUgb2YgdGhlIGVuZFRpbWUuIFxuXHRcdCAqICByYW5nZSA9IFtzdGFydFRpbWUsIGVuZFRpbWUpLiBcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgc3RhcnRUaW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgZW5kVGltZSBUaGUgZW5kIG9mIHRoZSB0ZXN0IGludGVydmFsLiBcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEJldHdlZW4gPSBmdW5jdGlvbiAoc3RhcnRUaW1lLCBlbmRUaW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIHZhciBsb3dlckJvdW5kID0gdGhpcy5fc2VhcmNoKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdmFyIHVwcGVyQm91bmQgPSB0aGlzLl9zZWFyY2goZW5kVGltZSk7XG5cdCAgICAgICAgaWYgKGxvd2VyQm91bmQgIT09IC0xICYmIHVwcGVyQm91bmQgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90aW1lbGluZVtsb3dlckJvdW5kXS50aW1lICE9PSBzdGFydFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGxvd2VyQm91bmQgKz0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL2V4Y2x1c2l2ZSBvZiB0aGUgZW5kIHRpbWVcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lW3VwcGVyQm91bmRdLnRpbWUgPT09IGVuZFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIHVwcGVyQm91bmQgLT0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9pdGVyYXRlKGNhbGxiYWNrLCBsb3dlckJvdW5kLCB1cHBlckJvdW5kKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGxvd2VyQm91bmQgPT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIDAsIHVwcGVyQm91bmQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGF0IG9yIGFmdGVyIHRoZSBnaXZlbiB0aW1lLiBTaW1pbGFyIHRvXG5cdFx0ICogIGZvckVhY2hBZnRlciwgYnV0IGluY2x1ZGVzIHRoZSBpdGVtKHMpIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEZyb20gPSBmdW5jdGlvbiAodGltZSwgY2FsbGJhY2spIHtcblx0ICAgICAgICAvL2l0ZXJhdGUgb3ZlciB0aGUgaXRlbXMgaW4gcmV2ZXJzZSBzbyB0aGF0IHJlbW92aW5nIGFuIGl0ZW0gZG9lc24ndCBicmVhayB0aGluZ3Ncblx0ICAgICAgICB2YXIgbG93ZXJCb3VuZCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICAvL3dvcmsgYmFja3dhcmRzIHVudGlsIHRoZSBldmVudCB0aW1lIGlzIGxlc3MgdGhhbiB0aW1lXG5cdCAgICAgICAgd2hpbGUgKGxvd2VyQm91bmQgPj0gMCAmJiB0aGlzLl90aW1lbGluZVtsb3dlckJvdW5kXS50aW1lID49IHRpbWUpIHtcblx0ICAgICAgICAgICAgbG93ZXJCb3VuZC0tO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9pdGVyYXRlKGNhbGxiYWNrLCBsb3dlckJvdW5kICsgMSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vaXRlcmF0ZSBvdmVyIHRoZSBpdGVtcyBpbiByZXZlcnNlIHNvIHRoYXQgcmVtb3ZpbmcgYW4gaXRlbSBkb2Vzbid0IGJyZWFrIHRoaW5nc1xuXHQgICAgICAgIHZhciB1cHBlckJvdW5kID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIGlmICh1cHBlckJvdW5kICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLl9pdGVyYXRlKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnRpbWUgPT09IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGV2ZW50KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSwgMCwgdXBwZXJCb3VuZCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuVGltZWxpbmV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl90aW1lbGluZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGltZWxpbmU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIGlmICghd2luZG93Lmhhc093blByb3BlcnR5KCdPZmZsaW5lQXVkaW9Db250ZXh0JykgJiYgd2luZG93Lmhhc093blByb3BlcnR5KCd3ZWJraXRPZmZsaW5lQXVkaW9Db250ZXh0JykpIHtcblx0ICAgICAgICAgICAgd2luZG93Lk9mZmxpbmVBdWRpb0NvbnRleHQgPSB3aW5kb3cud2Via2l0T2ZmbGluZUF1ZGlvQ29udGV4dDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9yZXR1cm5zIHByb21pc2U/XG5cdCAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgT2ZmbGluZUF1ZGlvQ29udGV4dCgxLCAxLCA0NDEwMCk7XG5cdCAgICAgICAgdmFyIHJldCA9IGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTtcblx0ICAgICAgICBpZiAoIShyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuXHQgICAgICAgICAgICBPZmZsaW5lQXVkaW9Db250ZXh0LnByb3RvdHlwZS5fbmF0aXZlX3N0YXJ0UmVuZGVyaW5nID0gT2ZmbGluZUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuc3RhcnRSZW5kZXJpbmc7XG5cdCAgICAgICAgICAgIE9mZmxpbmVBdWRpb0NvbnRleHQucHJvdG90eXBlLnN0YXJ0UmVuZGVyaW5nID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChkb25lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5vbmNvbXBsZXRlID0gZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlLnJlbmRlcmVkQnVmZmVyKTtcblx0ICAgICAgICAgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX25hdGl2ZV9zdGFydFJlbmRlcmluZygpO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIGlmICghd2luZG93Lmhhc093blByb3BlcnR5KCdBdWRpb0NvbnRleHQnKSAmJiB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ3dlYmtpdEF1ZGlvQ29udGV4dCcpKSB7XG5cdCAgICAgICAgICAgIHdpbmRvdy5BdWRpb0NvbnRleHQgPSB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL25vdCBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCwgYnV0IG9ubHkgYW4gQVBJIHBsYWNlaG9sZGVyXG5cdCAgICAgICAgaWYgKCFBdWRpb0NvbnRleHQucHJvdG90eXBlLmNsb3NlKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0Z1bmN0aW9uKHRoaXMuc3VzcGVuZCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnN1c3BlbmQoKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9ub3QgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnRcblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUucmVzdW1lKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NyZWF0ZUdhaW5cblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2FpbiAmJiBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUdhaW5Ob2RlKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2FpbiA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2Fpbk5vZGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY3JlYXRlRGVsYXlcblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlRGVsYXkgJiYgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVEZWxheU5vZGUpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVEZWxheSA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlRGVsYXlOb2RlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3Rlc3QgZGVjb2RlQXVkaW9EYXRhIHJldHVybnMgYSBwcm9taXNlXG5cdCAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vaGF5b25hby93ZWItYXVkaW8tYXBpLXNoaW0vYmxvYi9tYXN0ZXIvc3JjL0F1ZGlvQ29udGV4dC5qc1xuXHQgICAgICAgIC8vIE1JVCBMaWNlbnNlIChjKSAyMDE1IEBtb2hheW9uYW9cblx0ICAgICAgICB2YXIgZGVjb2RlQXVkaW9EYXRhUHJvbWlzZSA9IGZhbHNlO1xuXHQgICAgICAgIHZhciBvZmZsaW5lQ29udGV4dCA9IG5ldyBPZmZsaW5lQXVkaW9Db250ZXh0KDEsIDEsIDQ0MTAwKTtcblx0ICAgICAgICB2YXIgYXVkaW9EYXRhID0gbmV3IFVpbnQzMkFycmF5KFtcblx0ICAgICAgICAgICAgMTE3OTAxMTQxMCxcblx0ICAgICAgICAgICAgNDgsXG5cdCAgICAgICAgICAgIDExNjMyODA3MjcsXG5cdCAgICAgICAgICAgIDU0NDUwMTA5NCxcblx0ICAgICAgICAgICAgMTYsXG5cdCAgICAgICAgICAgIDEzMTA3Myxcblx0ICAgICAgICAgICAgNDQxMDAsXG5cdCAgICAgICAgICAgIDE3NjQwMCxcblx0ICAgICAgICAgICAgMTA0ODU4MCxcblx0ICAgICAgICAgICAgMTYzNTAxNzA2MCxcblx0ICAgICAgICAgICAgOCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMFxuXHQgICAgICAgIF0pLmJ1ZmZlcjtcblx0ICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICB2YXIgcmV0ID0gb2ZmbGluZUNvbnRleHQuZGVjb2RlQXVkaW9EYXRhKGF1ZGlvRGF0YSk7XG5cdCAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdCAgICAgICAgICAgICAgICBkZWNvZGVBdWRpb0RhdGFQcm9taXNlID0gdHJ1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgZGVjb2RlQXVkaW9EYXRhUHJvbWlzZSA9IGZhbHNlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIWRlY29kZUF1ZGlvRGF0YVByb21pc2UpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5fbmF0aXZlX2RlY29kZUF1ZGlvRGF0YSA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuZGVjb2RlQXVkaW9EYXRhO1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmRlY29kZUF1ZGlvRGF0YSA9IGZ1bmN0aW9uIChhdWRpb0RhdGEpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoc3VjY2VzcywgZXJyb3IpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9uYXRpdmVfZGVjb2RlQXVkaW9EYXRhKGF1ZGlvRGF0YSwgc3VjY2VzcywgZXJyb3IpO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBBdWRpb0NvbnRleHQuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVtaXR0ZXJ9XG5cdFx0ICogIEBwYXJhbSB7QXVkaW9Db250ZXh0PX0gY29udGV4dCBvcHRpb25hbGx5IHBhc3MgaW4gYSBjb250ZXh0XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbWl0dGVyLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydjb250ZXh0J10sIFRvbmUuQ29udGV4dCk7XG5cdCAgICAgICAgaWYgKCFvcHRpb25zLmNvbnRleHQpIHtcblx0ICAgICAgICAgICAgb3B0aW9ucy5jb250ZXh0ID0gbmV3IHdpbmRvdy5BdWRpb0NvbnRleHQoKTtcblx0ICAgICAgICAgICAgaWYgKCFvcHRpb25zLmNvbnRleHQpIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGNyZWF0ZSBBdWRpb0NvbnRleHQuIFBvc3NpYmx5IHRvbyBtYW55IEF1ZGlvQ29udGV4dHMgcnVubmluZyBhbHJlYWR5LicpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2NvbnRleHQgPSBvcHRpb25zLmNvbnRleHQ7XG5cdCAgICAgICAgLy8gZXh0ZW5kIGFsbCBvZiB0aGUgbWV0aG9kc1xuXHQgICAgICAgIGZvciAodmFyIHByb3AgaW4gdGhpcy5fY29udGV4dCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kZWZpbmVQcm9wZXJ0eSh0aGlzLl9jb250ZXh0LCBwcm9wKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlZmF1bHQgbGF0ZW5jeSBoaW50XG5cdFx0XHQgKiAgQHR5cGUgIHtTdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xhdGVuY3lIaW50ID0gb3B0aW9ucy5sYXRlbmN5SGludDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbiBvYmplY3QgY29udGFpbmluZyBhbGwgb2YgdGhlIGNvbnN0YW50cyBBdWRpb0J1ZmZlclNvdXJjZU5vZGVzXG5cdFx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbnN0YW50cyA9IHt9O1xuXHQgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgLy8gV09SS0VSXG5cdCAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIHRpbWUgZXZlbnRzIGFyZSBzY2hlZHVsZWRcblx0XHRcdCAqICBpbnRvIHRoZSBmdXR1cmVcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG9va0FoZWFkID0gb3B0aW9ucy5sb29rQWhlYWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSByZWZlcmVuY2UgdG8gdGhlIGFjdHVhbCBjb21wdXRlZCB1cGRhdGUgaW50ZXJ2YWxcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29tcHV0ZWRVcGRhdGVJbnRlcnZhbCA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSByZWxpYWJsZSBjYWxsYmFjayBtZXRob2Rcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlICB7VGlja2VyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGlja2VyID0gbmV3IFRpY2tlcih0aGlzLmVtaXQuYmluZCh0aGlzLCAndGljaycpLCBvcHRpb25zLmNsb2NrU291cmNlLCBvcHRpb25zLnVwZGF0ZUludGVydmFsKTtcblx0ICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgIC8vIFRJTUVPVVRTXG5cdCAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGwgb2YgdGhlIHNldFRpbWVvdXQgZXZlbnRzLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5UaW1lbGluZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGltZW91dHMgPSBuZXcgVG9uZS5UaW1lbGluZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0aW1lb3V0IGlkIGNvdW50ZXJcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aW1lb3V0SWRzID0gMDtcblx0ICAgICAgICB0aGlzLm9uKCd0aWNrJywgdGhpcy5fdGltZW91dExvb3AuYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Db250ZXh0LCBUb25lLkVtaXR0ZXIpO1xuXHQgICAgVG9uZS5FbWl0dGVyLm1peGluKFRvbmUuQ29udGV4dCk7XG5cdCAgICAvKipcblx0XHQgKiBkZWZhdWx0c1xuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdjbG9ja1NvdXJjZSc6ICd3b3JrZXInLFxuXHQgICAgICAgICdsYXRlbmN5SGludCc6ICdpbnRlcmFjdGl2ZScsXG5cdCAgICAgICAgJ2xvb2tBaGVhZCc6IDAuMSxcblx0ICAgICAgICAndXBkYXRlSW50ZXJ2YWwnOiAwLjAzXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmluZSBhIHByb3BlcnR5IG9uIHRoaXMgVG9uZS5Db250ZXh0LlxuXHRcdCAqICBUaGlzIGlzIHVzZWQgdG8gZXh0ZW5kIHRoZSBuYXRpdmUgQXVkaW9Db250ZXh0XG5cdFx0ICogIEBwYXJhbSAge0F1ZGlvQ29udGV4dH0gIGNvbnRleHRcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgcHJvcFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5fZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAoY29udGV4dCwgcHJvcCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGhpc1twcm9wXSkpIHtcblx0ICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3AsIHtcblx0ICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29udGV4dFtwcm9wXSA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dFtwcm9wXS5iaW5kKGNvbnRleHQpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0W3Byb3BdO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjb250ZXh0W3Byb3BdID0gdmFsO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjdXJyZW50IGF1ZGlvIGNvbnRleHQgdGltZVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQuY3VycmVudFRpbWUgKyB0aGlzLmxvb2tBaGVhZDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUHJvbWlzZSB3aGljaCBpcyBpbnZva2VkIHdoZW4gdGhlIGNvbnRleHQgaXMgcnVubmluZy5cblx0XHQgKiAgVHJpZXMgdG8gcmVzdW1lIHRoZSBjb250ZXh0IGlmIGl0J3Mgbm90IHN0YXJ0ZWQuXG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5yZWFkeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGRvbmUpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRleHQuc3RhdGUgPT09ICdydW5uaW5nJykge1xuXHQgICAgICAgICAgICAgICAgZG9uZSgpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC5yZXN1bWUoKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFByb21pc2Ugd2hpY2ggaXMgaW52b2tlZCB3aGVuIHRoZSBjb250ZXh0IGlzIHJ1bm5pbmcuXG5cdFx0ICogIFRyaWVzIHRvIHJlc3VtZSB0aGUgY29udGV4dCBpZiBpdCdzIG5vdCBzdGFydGVkLlxuXHRcdCAqICBAcmV0dXJuICB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQuY2xvc2UoKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgVG9uZS5Db250ZXh0LmVtaXQoJ2Nsb3NlJywgdGhpcyk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2VuZXJhdGUgYSBsb29wZWQgYnVmZmVyIGF0IHNvbWUgY29uc3RhbnQgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHZhbFxuXHRcdCAqICBAcmV0dXJuICB7QnVmZmVyU291cmNlTm9kZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuZ2V0Q29uc3RhbnQgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX2NvbnN0YW50c1t2YWxdKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb25zdGFudHNbdmFsXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5fY29udGV4dC5jcmVhdGVCdWZmZXIoMSwgMTI4LCB0aGlzLl9jb250ZXh0LnNhbXBsZVJhdGUpO1xuXHQgICAgICAgICAgICB2YXIgYXJyID0gYnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgYXJyW2ldID0gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBjb25zdGFudCA9IHRoaXMuX2NvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7XG5cdCAgICAgICAgICAgIGNvbnN0YW50LmNoYW5uZWxDb3VudCA9IDE7XG5cdCAgICAgICAgICAgIGNvbnN0YW50LmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgICAgICBjb25zdGFudC5idWZmZXIgPSBidWZmZXI7XG5cdCAgICAgICAgICAgIGNvbnN0YW50Lmxvb3AgPSB0cnVlO1xuXHQgICAgICAgICAgICBjb25zdGFudC5zdGFydCgwKTtcblx0ICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRzW3ZhbF0gPSBjb25zdGFudDtcblx0ICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50O1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByaXZhdGUgbG9vcCB3aGljaCBrZWVwcyB0cmFjayBvZiB0aGUgY29udGV4dCBzY2hlZHVsZWQgdGltZW91dHNcblx0XHQgKiAgSXMgaW52b2tlZCBmcm9tIHRoZSBjbG9jayBzb3VyY2Vcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuX3RpbWVvdXRMb29wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgIHdoaWxlICh0aGlzLl90aW1lb3V0cyAmJiB0aGlzLl90aW1lb3V0cy5sZW5ndGggJiYgdGhpcy5fdGltZW91dHMucGVlaygpLnRpbWUgPD0gbm93KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVvdXRzLnNoaWZ0KCkuY2FsbGJhY2soKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEEgc2V0VGltZW91dCB3aGljaCBpcyBnYXVyZW50ZWVkIGJ5IHRoZSBjbG9jayBzb3VyY2UuXG5cdFx0ICogIEFsc28gcnVucyBpbiB0aGUgb2ZmbGluZSBjb250ZXh0LlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGZuICAgICAgIFRoZSBjYWxsYmFjayB0byBpbnZva2Vcblx0XHQgKiAgQHBhcmFtICB7U2Vjb25kc30gICAgdGltZW91dCAgVGhlIHRpbWVvdXQgaW4gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJucyB7TnVtYmVyfSBJRCB0byB1c2Ugd2hlbiBpbnZva2luZyBUb25lLkNvbnRleHQuY2xlYXJUaW1lb3V0XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLnNldFRpbWVvdXQgPSBmdW5jdGlvbiAoZm4sIHRpbWVvdXQpIHtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0SWRzKys7XG5cdCAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgdGhpcy5fdGltZW91dHMuYWRkKHtcblx0ICAgICAgICAgICAgY2FsbGJhY2s6IGZuLFxuXHQgICAgICAgICAgICB0aW1lOiBub3cgKyB0aW1lb3V0LFxuXHQgICAgICAgICAgICBpZDogdGhpcy5fdGltZW91dElkc1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aW1lb3V0SWRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhcnMgYSBwcmV2aW91c2x5IHNjaGVkdWxlZCB0aW1lb3V0IHdpdGggVG9uZS5jb250ZXh0LnNldFRpbWVvdXRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgaWQgIFRoZSBJRCByZXR1cm5lZCBmcm9tIHNldFRpbWVvdXRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQ29udGV4dH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuY2xlYXJUaW1lb3V0ID0gZnVuY3Rpb24gKGlkKSB7XG5cdCAgICAgICAgdGhpcy5fdGltZW91dHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50LmlkID09PSBpZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmUoZXZlbnQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEhvdyBvZnRlbiB0aGUgV2ViIFdvcmtlciBjYWxsYmFjayBpcyBpbnZva2VkLlxuXHRcdCAqICBUaGlzIG51bWJlciBjb3JyZXNwb25kcyB0byBob3cgcmVzcG9uc2l2ZSB0aGUgc2NoZWR1bGluZ1xuXHRcdCAqICBjYW4gYmUuIENvbnRleHQudXBkYXRlSW50ZXJ2YWwgKyBDb250ZXh0Lmxvb2tBaGVhZCBnaXZlcyB5b3UgdGhlXG5cdFx0ICogIHRvdGFsIGxhdGVuY3kgYmV0d2VlbiBzY2hlZHVsaW5nIGFuIGV2ZW50IGFuZCBoZWFyaW5nIGl0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Db250ZXh0I1xuXHRcdCAqICBAbmFtZSB1cGRhdGVJbnRlcnZhbFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ29udGV4dC5wcm90b3R5cGUsICd1cGRhdGVJbnRlcnZhbCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tlci51cGRhdGVJbnRlcnZhbDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tlci51cGRhdGVJbnRlcnZhbCA9IGludGVydmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFdoYXQgdGhlIHNvdXJjZSBvZiB0aGUgY2xvY2sgaXMsIGVpdGhlciBcIndvcmtlclwiIChXZWIgV29ya2VyIFtkZWZhdWx0XSksXG5cdFx0ICogIFwidGltZW91dFwiIChzZXRUaW1lb3V0KSwgb3IgXCJvZmZsaW5lXCIgKG5vbmUpLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Db250ZXh0I1xuXHRcdCAqICBAbmFtZSBjbG9ja1NvdXJjZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ29udGV4dC5wcm90b3R5cGUsICdjbG9ja1NvdXJjZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tlci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrZXIudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHR5cGUgb2YgcGxheWJhY2ssIHdoaWNoIGFmZmVjdHMgdHJhZGVvZmZzIGJldHdlZW4gYXVkaW9cblx0XHQgKiAgb3V0cHV0IGxhdGVuY3kgYW5kIHJlc3BvbnNpdmVuZXNzLlxuXHRcdCAqXG5cdFx0ICogIEluIGFkZGl0aW9uIHRvIHNldHRpbmcgdGhlIHZhbHVlIGluIHNlY29uZHMsIHRoZSBsYXRlbmN5SGludCBhbHNvXG5cdFx0ICogIGFjY2VwdHMgdGhlIHN0cmluZ3MgXCJpbnRlcmFjdGl2ZVwiIChwcmlvcml0aXplcyBsb3cgbGF0ZW5jeSksXG5cdFx0ICogIFwicGxheWJhY2tcIiAocHJpb3JpdGl6ZXMgc3VzdGFpbmVkIHBsYXliYWNrKSwgXCJiYWxhbmNlZFwiIChiYWxhbmNlc1xuXHRcdCAqICBsYXRlbmN5IGFuZCBwZXJmb3JtYW5jZSksIGFuZCBcImZhc3Rlc3RcIiAobG93ZXN0IGxhdGVuY3ksIG1pZ2h0IGdsaXRjaCBtb3JlIG9mdGVuKS5cblx0XHQgKiAgQHR5cGUge1N0cmluZ3xTZWNvbmRzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Db250ZXh0I1xuXHRcdCAqICBAbmFtZSBsYXRlbmN5SGludFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc2V0IHRoZSBsb29rQWhlYWQgdG8gMC4zIHNlY29uZHNcblx0XHQgKiBUb25lLmNvbnRleHQubGF0ZW5jeUhpbnQgPSAwLjM7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Db250ZXh0LnByb3RvdHlwZSwgJ2xhdGVuY3lIaW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGF0ZW5jeUhpbnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChoaW50KSB7XG5cdCAgICAgICAgICAgIHZhciBsb29rQWhlYWQgPSBoaW50O1xuXHQgICAgICAgICAgICB0aGlzLl9sYXRlbmN5SGludCA9IGhpbnQ7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzU3RyaW5nKGhpbnQpKSB7XG5cdCAgICAgICAgICAgICAgICBzd2l0Y2ggKGhpbnQpIHtcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ2ludGVyYWN0aXZlJzpcblx0ICAgICAgICAgICAgICAgICAgICBsb29rQWhlYWQgPSAwLjE7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC5sYXRlbmN5SGludCA9IGhpbnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdwbGF5YmFjayc6XG5cdCAgICAgICAgICAgICAgICAgICAgbG9va0FoZWFkID0gMC44O1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHQubGF0ZW5jeUhpbnQgPSBoaW50O1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnYmFsYW5jZWQnOlxuXHQgICAgICAgICAgICAgICAgICAgIGxvb2tBaGVhZCA9IDAuMjU7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC5sYXRlbmN5SGludCA9IGhpbnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdmYXN0ZXN0Jzpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LmxhdGVuY3lIaW50ID0gJ2ludGVyYWN0aXZlJztcblx0ICAgICAgICAgICAgICAgICAgICBsb29rQWhlYWQgPSAwLjAxO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMubG9va0FoZWFkID0gbG9va0FoZWFkO1xuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZUludGVydmFsID0gbG9va0FoZWFkIC8gMztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBVbmxpa2Ugb3RoZXIgZGlzcG9zZSBtZXRob2RzLCB0aGlzIHJldHVybnMgYSBQcm9taXNlXG5cdFx0ICogIHdoaWNoIGV4ZWN1dGVzIHdoZW4gdGhlIGNvbnRleHQgaXMgY2xvc2VkIGFuZCBkaXNwb3NlZFxuXHRcdCAqICBAcmV0dXJucyB7UHJvbWlzZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLmNsb3NlKCkudGhlbihmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrZXIgPSBudWxsO1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lb3V0cy5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVvdXRzID0gbnVsbDtcblx0ICAgICAgICAgICAgZm9yICh2YXIgY29uIGluIHRoaXMuX2NvbnN0YW50cykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRzW2Nvbl0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50cyA9IG51bGw7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgQSBjbGFzcyB3aGljaCBwcm92aWRlcyBhIHJlbGlhYmxlIGNhbGxiYWNrIHVzaW5nIGVpdGhlclxuXHRcdCAqICAgICAgICBhIFdlYiBXb3JrZXIsIG9yIGlmIHRoYXQgaXNuJ3Qgc3VwcG9ydGVkLCBmYWxscyBiYWNrIHRvIHNldFRpbWVvdXQuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIHZhciBUaWNrZXIgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHR5cGUsIHVwZGF0ZUludGVydmFsKSB7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBFaXRoZXIgXCJ3b3JrZXJcIiBvciBcInRpbWVvdXRcIlxuXHRcdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB1cGRhdGUgaW50ZXJ2YWwgb2YgdGhlIHdvcmtlclxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl91cGRhdGVJbnRlcnZhbCA9IHVwZGF0ZUludGVydmFsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGNhbGxiYWNrIHRvIGludm9rZSBhdCByZWd1bGFyIGludGVydmFsc1xuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NhbGxiYWNrID0gVG9uZS5kZWZhdWx0QXJnKGNhbGxiYWNrLCBUb25lLm5vT3ApO1xuXHQgICAgICAgIC8vY3JlYXRlIHRoZSBjbG9jayBzb3VyY2UgZm9yIHRoZSBmaXJzdCB0aW1lXG5cdCAgICAgICAgdGhpcy5fY3JlYXRlQ2xvY2soKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcG9zc2libGUgdGlja2VyIHR5cGVzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLlR5cGUgPSB7XG5cdCAgICAgICAgV29ya2VyOiAnd29ya2VyJyxcblx0ICAgICAgICBUaW1lb3V0OiAndGltZW91dCcsXG5cdCAgICAgICAgT2ZmbGluZTogJ29mZmxpbmUnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdlbmVyYXRlIGEgd2ViIHdvcmtlclxuXHRcdCAqICBAcmV0dXJuICB7V2ViV29ya2VyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLnByb3RvdHlwZS5fY3JlYXRlV29ya2VyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vVVJMIFNoaW1cblx0ICAgICAgICB3aW5kb3cuVVJMID0gd2luZG93LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMO1xuXHQgICAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoWy8vdGhlIGluaXRpYWwgdGltZW91dCB0aW1lXG5cdCAgICAgICAgICAgICd2YXIgdGltZW91dFRpbWUgPSAnICsgKHRoaXMuX3VwZGF0ZUludGVydmFsICogMTAwMCkudG9GaXhlZCgxKSArICc7JyArIC8vb25tZXNzYWdlIGNhbGxiYWNrXG5cdCAgICAgICAgICAgICdzZWxmLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKG1zZyl7JyArICdcXHR0aW1lb3V0VGltZSA9IHBhcnNlSW50KG1zZy5kYXRhKTsnICsgJ307JyArIC8vdGhlIHRpY2sgZnVuY3Rpb24gd2hpY2ggcG9zdHMgYSBtZXNzYWdlXG5cdCAgICAgICAgICAgIC8vYW5kIHNjaGVkdWxlcyBhIG5ldyB0aWNrXG5cdCAgICAgICAgICAgICdmdW5jdGlvbiB0aWNrKCl7JyArICdcXHRzZXRUaW1lb3V0KHRpY2ssIHRpbWVvdXRUaW1lKTsnICsgJ1xcdHNlbGYucG9zdE1lc3NhZ2UoXFwndGlja1xcJyk7JyArICd9JyArIC8vY2FsbCB0aWNrIGluaXRpYWxseVxuXHQgICAgICAgICAgICAndGljaygpOyddKTtcblx0ICAgICAgICB2YXIgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cdCAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoYmxvYlVybCk7XG5cdCAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IHRoaXMuX2NhbGxiYWNrLmJpbmQodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd29ya2VyID0gd29ya2VyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENyZWF0ZSBhIHRpbWVvdXQgbG9vcFxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUaWNrZXIucHJvdG90eXBlLl9jcmVhdGVUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY3JlYXRlVGltZW91dCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9jYWxsYmFjaygpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5fdXBkYXRlSW50ZXJ2YWwgKiAxMDAwKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDcmVhdGUgdGhlIGNsb2NrIHNvdXJjZS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLnByb3RvdHlwZS5fY3JlYXRlQ2xvY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRpY2tlci5UeXBlLldvcmtlcikge1xuXHQgICAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlV29ya2VyKCk7XG5cdCAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgICAgIC8vIHdvcmtlcnMgbm90IHN1cHBvcnRlZCwgZmFsbGJhY2sgdG8gdGltZW91dFxuXHQgICAgICAgICAgICAgICAgdGhpcy5fdHlwZSA9IFRpY2tlci5UeXBlLlRpbWVvdXQ7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVDbG9jaygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUaWNrZXIuVHlwZS5UaW1lb3V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVRpbWVvdXQoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQG1lbWJlck9mIFRpY2tlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHVwZGF0ZUludGVydmFsXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUaWNrZXIucHJvdG90eXBlLCAndXBkYXRlSW50ZXJ2YWwnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVJbnRlcnZhbDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUludGVydmFsID0gTWF0aC5tYXgoaW50ZXJ2YWwsIDEyOCAvIDQ0MTAwKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRpY2tlci5UeXBlLldvcmtlcikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fd29ya2VyLnBvc3RNZXNzYWdlKE1hdGgubWF4KGludGVydmFsICogMTAwMCwgMSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgdGlja2VyLCBlaXRoZXIgYSB3b3JrZXIgb3IgYSB0aW1lb3V0XG5cdFx0ICogQG1lbWJlck9mIFRpY2tlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRpY2tlci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGlzcG9zZUNsb2NrKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9jcmVhdGVDbG9jaygpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXAgdGhlIGN1cnJlbnQgY2xvY2sgc291cmNlXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRpY2tlci5wcm90b3R5cGUuX2Rpc3Bvc2VDbG9jayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fdGltZW91dCkge1xuXHQgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5fd29ya2VyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3dvcmtlci50ZXJtaW5hdGUoKTtcblx0ICAgICAgICAgICAgdGhpcy5fd29ya2VyLm9ubWVzc2FnZSA9IG51bGw7XG5cdCAgICAgICAgICAgIHRoaXMuX3dvcmtlciA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRpY2tlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9kaXNwb3NlQ2xvY2soKTtcblx0ICAgICAgICB0aGlzLl9jYWxsYmFjayA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNoaW0gYWxsIGNvbm5lY3QvZGlzY29ubmVjdCBhbmQgc29tZSBkZXByZWNhdGVkIG1ldGhvZHMgd2hpY2ggYXJlIHN0aWxsIGluXG5cdFx0ICogIHNvbWUgb2xkZXIgaW1wbGVtZW50YXRpb25zLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5nZXRDb250ZXh0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbmF0aXZlQ29ubmVjdCA9IEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdDtcblx0ICAgICAgICB2YXIgbmF0aXZlRGlzY29ubmVjdCA9IEF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzY29ubmVjdDtcblx0ICAgICAgICAvL3JlcGxhY2UgdGhlIG9sZCBjb25uZWN0IG1ldGhvZFxuXHQgICAgICAgIGZ1bmN0aW9uIHRvbmVDb25uZWN0KEIsIG91dE51bSwgaW5OdW0pIHtcblx0ICAgICAgICAgICAgaWYgKEIuaW5wdXQpIHtcblx0ICAgICAgICAgICAgICAgIGluTnVtID0gVG9uZS5kZWZhdWx0QXJnKGluTnVtLCAwKTtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkoQi5pbnB1dCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0KEIuaW5wdXRbaW5OdW1dKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdChCLmlucHV0LCBvdXROdW0sIGluTnVtKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKEIgaW5zdGFuY2VvZiBBdWRpb05vZGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlQ29ubmVjdC5jYWxsKHRoaXMsIEIsIG91dE51bSwgaW5OdW0pO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQjtcblx0ICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVDb25uZWN0LmNhbGwodGhpcywgQiwgb3V0TnVtKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEI7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXJyb3IgY29ubmVjdGluZyB0byBub2RlOiAnICsgQiArICdcXG4nICsgZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9yZXBsYWNlIHRoZSBvbGQgZGlzY29ubmVjdCBtZXRob2Rcblx0ICAgICAgICBmdW5jdGlvbiB0b25lRGlzY29ubmVjdChCLCBvdXROdW0sIGluTnVtKSB7XG5cdCAgICAgICAgICAgIGlmIChCICYmIEIuaW5wdXQgJiYgVG9uZS5pc0FycmF5KEIuaW5wdXQpKSB7XG5cdCAgICAgICAgICAgICAgICBpbk51bSA9IFRvbmUuZGVmYXVsdEFyZyhpbk51bSwgMCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoQi5pbnB1dFtpbk51bV0sIG91dE51bSwgMCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoQiAmJiBCLmlucHV0KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoQi5pbnB1dCwgb3V0TnVtLCBpbk51bSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICAgICAgICAgIG5hdGl2ZURpc2Nvbm5lY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Vycm9yIGRpc2Nvbm5lY3Rpbmcgbm9kZTogJyArIEIgKyAnXFxuJyArIGUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChBdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3QgIT09IHRvbmVDb25uZWN0KSB7XG5cdCAgICAgICAgICAgIEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IHRvbmVDb25uZWN0O1xuXHQgICAgICAgICAgICBBdWRpb05vZGUucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSB0b25lRGlzY29ubmVjdDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8vIHNldCB0aGUgYXVkaW8gY29udGV4dCBpbml0aWFsbHksIGFuZCBpZiBvbmUgaXMgbm90IGFscmVhZHkgY3JlYXRlZFxuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkICYmICFUb25lLmluaXRpYWxpemVkKSB7XG5cdCAgICAgICAgVG9uZS5jb250ZXh0ID0gbmV3IFRvbmUuQ29udGV4dCgpO1xuXHQgICAgICAgIC8vIGxvZyBvbiBmaXJzdCBpbml0aWFsaXphdGlvblxuXHQgICAgICAgIC8vIGFsbG93IG9wdGlvbmFsIHNpbGVuY2luZyBvZiB0aGlzIGxvZ1xuXHQgICAgICAgIGlmICghd2luZG93LlRPTkVfU0lMRU5DRV9WRVJTSU9OX0xPR0dJTkcpIHtcblx0ICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblx0ICAgICAgICAgICAgY29uc29sZS5sb2coJyVjICogVG9uZS5qcyAnICsgVG9uZS52ZXJzaW9uICsgJyAqICcsICdiYWNrZ3JvdW5kOiAjMDAwOyBjb2xvcjogI2ZmZicpO1xuXHQgICAgICAgIH1cblx0ICAgIH0gZWxzZSBpZiAoIVRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblx0ICAgICAgICBjb25zb2xlLndhcm4oJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IFRvbmUuanMnKTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBUb25lLkNvbnRleHQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5BdWRpb05vZGUgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNsYXNzZXMgd2hpY2ggcHJvY2VzcyBhdWRpby5cblx0XHQgKiAgICAgICAgIEF1ZGlvTm9kZXMgaGF2ZSBpbnB1dHMgYW5kIG91dHB1dHMuXG5cdFx0ICogIEBwYXJhbVx0e0F1ZGlvQ29udGV4dD19IGNvbnRleHRcdFRoZSBhdWRpbyBjb250ZXh0IHRvIHVzZSB3aXRoIHRoZSBjbGFzc1xuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvL3VzZSB0aGUgZGVmYXVsdCBjb250ZXh0IGlmIG9uZSBpcyBub3QgcGFzc2VkIGluXG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydjb250ZXh0J10sIHsgJ2NvbnRleHQnOiBUb25lLmNvbnRleHQgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgQXVkaW9Db250ZXh0IG9mIHRoaXMgaW5zdGFuY2Vcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSB7QXVkaW9Db250ZXh0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29udGV4dCA9IG9wdGlvbnMuY29udGV4dDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIGF1ZGlvIGNvbnRleHQgYmVsb25naW5nIHRvIHRoaXMgaW5zdGFuY2UuXG5cdFx0ICogQHR5cGUge1RvbmUuQ29udGV4dH1cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogQG5hbWUgY29udGV4dFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ2NvbnRleHQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENyZWF0ZSBpbnB1dCBhbmQgb3V0cHV0cyBmb3IgdGhpcyBvYmplY3QuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIFtpbnB1dD0wXSAgIFRoZSBudW1iZXIgb2YgaW5wdXRzXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIFtvdXRwdXRzPTBdICBUaGUgbnVtYmVyIG9mIG91dHB1dHNcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQXVkaW9Ob2RlfSAgdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmNyZWF0ZUluc091dHMgPSBmdW5jdGlvbiAoaW5wdXRzLCBvdXRwdXRzKSB7XG5cdCAgICAgICAgaWYgKGlucHV0cyA9PT0gMSkge1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGlucHV0cyA+IDEpIHtcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dCA9IG5ldyBBcnJheShpbnB1dHMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAob3V0cHV0cyA9PT0gMSkge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChvdXRwdXRzID4gMSkge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBBcnJheShvdXRwdXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNoYW5uZWxDb3VudCBpcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIHVzZWQgd2hlbiB1cC1taXhpbmcgYW5kIGRvd24tbWl4aW5nXG5cdFx0ICogIGNvbm5lY3Rpb25zIHRvIGFueSBpbnB1dHMgdG8gdGhlIG5vZGUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDIgZXhjZXB0IGZvclxuXHRcdCAqICBzcGVjaWZpYyBub2RlcyB3aGVyZSBpdHMgdmFsdWUgaXMgc3BlY2lhbGx5IGRldGVybWluZWQuXG5cdFx0ICpcblx0XHQgKiAgQG1lbWJlcm9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBjaGFubmVsQ291bnRcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLCAnY2hhbm5lbENvdW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbENvdW50O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYykge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbENvdW50ID0gYztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjaGFubmVsQ291bnRNb2RlIGRldGVybWluZXMgaG93IGNoYW5uZWxzIHdpbGwgYmUgY291bnRlZCB3aGVuIHVwLW1peGluZyBhbmRcblx0XHQgKiAgZG93bi1taXhpbmcgY29ubmVjdGlvbnMgdG8gYW55IGlucHV0cyB0byB0aGUgbm9kZS5cblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCJtYXhcIi4gVGhpcyBhdHRyaWJ1dGUgaGFzIG5vIGVmZmVjdCBmb3Igbm9kZXMgd2l0aCBubyBpbnB1dHMuXG5cdFx0ICogIEBtZW1iZXJvZiBUb25lLkF1ZGlvTm9kZSNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgY2hhbm5lbENvdW50TW9kZVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdjaGFubmVsQ291bnRNb2RlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbENvdW50TW9kZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG0pIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0LmNoYW5uZWxDb3VudE1vZGUgPSBtO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNoYW5uZWxJbnRlcnByZXRhdGlvbiBkZXRlcm1pbmVzIGhvdyBpbmRpdmlkdWFsIGNoYW5uZWxzIHdpbGwgYmUgdHJlYXRlZFxuXHRcdCAqICB3aGVuIHVwLW1peGluZyBhbmQgZG93bi1taXhpbmcgY29ubmVjdGlvbnMgdG8gYW55IGlucHV0cyB0byB0aGUgbm9kZS5cblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCJzcGVha2Vyc1wiLlxuXHRcdCAqICBAbWVtYmVyb2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBuYW1lIGNoYW5uZWxJbnRlcnByZXRhdGlvblxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdjaGFubmVsSW50ZXJwcmV0YXRpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsSW50ZXJwcmV0YXRpb247XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsSW50ZXJwcmV0YXRpb24gPSBpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgaW5wdXRzIGZlZWRpbmcgaW50byB0aGUgQXVkaW9Ob2RlLlxuXHRcdCAqICBGb3Igc291cmNlIG5vZGVzLCB0aGlzIHdpbGwgYmUgMC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgbnVtYmVyT2ZJbnB1dHNcblx0XHQgKiAgQG1lbWJlcm9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdudW1iZXJPZklucHV0cycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXQpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGhpcy5pbnB1dCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dC5sZW5ndGg7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIG91dHB1dHMgY29taW5nIG91dCBvZiB0aGUgQXVkaW9Ob2RlLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBudW1iZXJPZk91dHB1dHNcblx0XHQgKiAgQG1lbWJlcm9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdudW1iZXJPZk91dHB1dHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aGlzLm91dHB1dCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQubGVuZ3RoO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBDYWxsZWQgd2hlbiBhbiBhdWRpbyBwYXJhbSBjb25uZWN0cyB0byB0aGlzIG5vZGVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLl9vbkNvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbm5lY3QgdGhlIG91dHB1dCBvZiBhIFRvbmVOb2RlIHRvIGFuIEF1ZGlvUGFyYW0sIEF1ZGlvTm9kZSwgb3IgVG9uZU5vZGVcblx0XHQgKiAgQHBhcmFtICB7VG9uZSB8IEF1ZGlvUGFyYW0gfCBBdWRpb05vZGV9IHVuaXRcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXROdW09MF0gb3B0aW9uYWxseSB3aGljaCBvdXRwdXQgdG8gY29ubmVjdCBmcm9tXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbaW5wdXROdW09MF0gb3B0aW9uYWxseSB3aGljaCBpbnB1dCB0byBjb25uZWN0IHRvXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAodW5pdCwgb3V0cHV0TnVtLCBpbnB1dE51bSkge1xuXHQgICAgICAgIGlmICh1bml0Ll9vbkNvbm5lY3QpIHtcblx0ICAgICAgICAgICAgdW5pdC5fb25Db25uZWN0KHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHRoaXMub3V0cHV0KSkge1xuXHQgICAgICAgICAgICBvdXRwdXROdW0gPSBUb25lLmRlZmF1bHRBcmcob3V0cHV0TnVtLCAwKTtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXRbb3V0cHV0TnVtXS5jb25uZWN0KHVuaXQsIDAsIGlucHV0TnVtKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dC5jb25uZWN0KHVuaXQsIG91dHB1dE51bSwgaW5wdXROdW0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgZGlzY29ubmVjdCB0aGUgb3V0cHV0XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfEF1ZGlvTm9kZX0gb3V0cHV0IEVpdGhlciB0aGUgb3V0cHV0IGluZGV4IHRvIGRpc2Nvbm5lY3Rcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIG91dHB1dCBpcyBhbiBhcnJheSwgb3IgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgdG8gZGlzY29ubmVjdCBmcm9tLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdWRpb05vZGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uLCBvdXRwdXROdW0sIGlucHV0TnVtKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aGlzLm91dHB1dCkpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIoZGVzdGluYXRpb24pKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLm91dHB1dFtkZXN0aW5hdGlvbl0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgb3V0cHV0TnVtID0gVG9uZS5kZWZhdWx0QXJnKG91dHB1dE51bSwgMCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLm91dHB1dFtvdXRwdXROdW1dLmRpc2Nvbm5lY3QoZGVzdGluYXRpb24sIDAsIGlucHV0TnVtKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0LmRpc2Nvbm5lY3QuYXBwbHkodGhpcy5vdXRwdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb25uZWN0IHRoZSBvdXRwdXQgb2YgdGhpcyBub2RlIHRvIHRoZSByZXN0IG9mIHRoZSBub2RlcyBpbiBzZXJpZXMuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIC8vY29ubmVjdCBhIG5vZGUgdG8gYW4gZWZmZWN0LCBwYW5Wb2wgYW5kIHRoZW4gdG8gdGhlIG1hc3RlciBvdXRwdXRcblx0XHQgKiAgbm9kZS5jaGFpbihlZmZlY3QsIHBhblZvbCwgVG9uZS5NYXN0ZXIpO1xuXHRcdCAqICBAcGFyYW0gey4uLkF1ZGlvUGFyYW18VG9uZXxBdWRpb05vZGV9IG5vZGVzXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmNoYWluID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBjdXJyZW50VW5pdCA9IHRoaXM7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHRvVW5pdCA9IGFyZ3VtZW50c1tpXTtcblx0ICAgICAgICAgICAgY3VycmVudFVuaXQuY29ubmVjdCh0b1VuaXQpO1xuXHQgICAgICAgICAgICBjdXJyZW50VW5pdCA9IHRvVW5pdDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbm5lY3QgdGhlIG91dHB1dCBvZiB0aGlzIG5vZGUgdG8gdGhlIHJlc3Qgb2YgdGhlIG5vZGVzIGluIHBhcmFsbGVsLlxuXHRcdCAqICBAcGFyYW0gey4uLkF1ZGlvUGFyYW18VG9uZXxBdWRpb05vZGV9IG5vZGVzXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmZhbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLmNvbm5lY3QoYXJndW1lbnRzW2ldKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgaWYgKHdpbmRvdy5BdWRpb05vZGUpIHtcblx0ICAgICAgICAvL2dpdmUgbmF0aXZlIG5vZGVzIGNoYWluIGFuZCBmYW4gbWV0aG9kc1xuXHQgICAgICAgIEF1ZGlvTm9kZS5wcm90b3R5cGUuY2hhaW4gPSBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY2hhaW47XG5cdCAgICAgICAgQXVkaW9Ob2RlLnByb3RvdHlwZS5mYW4gPSBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZmFuO1xuXHQgICAgfVxuXHQgICAgLyoqXG5cdFx0ICogRGlzcG9zZSBhbmQgZGlzY29ubmVjdFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodGhpcy5pbnB1dCkpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXQgaW5zdGFuY2VvZiBBdWRpb05vZGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodGhpcy5vdXRwdXQpKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dCBpbnN0YW5jZW9mIEF1ZGlvTm9kZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXQuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0ID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY29udGV4dCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXVkaW9Ob2RlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEJhc2UgY2xhc3MgZm9yIGFsbCBTaWduYWxzLiBVc2VkIEludGVybmFsbHkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWxCYXNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TaWduYWxCYXNlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgV2hlbiBzaWduYWxzIGNvbm5lY3QgdG8gb3RoZXIgc2lnbmFscyBvciBBdWRpb1BhcmFtcyxcblx0XHQgKiAgdGhleSB0YWtlIG92ZXIgdGhlIG91dHB1dCB2YWx1ZSBvZiB0aGF0IHNpZ25hbCBvciBBdWRpb1BhcmFtLlxuXHRcdCAqICBGb3IgYWxsIG90aGVyIG5vZGVzLCB0aGUgYmVoYXZpb3IgaXMgdGhlIHNhbWUgYXMgYSBkZWZhdWx0IDxjb2RlPmNvbm5lY3Q8L2NvZGU+LlxuXHRcdCAqXG5cdFx0ICogIEBvdmVycmlkZVxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvUGFyYW18QXVkaW9Ob2RlfFRvbmUuU2lnbmFsfFRvbmV9IG5vZGVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXROdW1iZXI9MF0gVGhlIG91dHB1dCBudW1iZXIgdG8gY29ubmVjdCBmcm9tLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW2lucHV0TnVtYmVyPTBdIFRoZSBpbnB1dCBudW1iZXIgdG8gY29ubmVjdCB0by5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2lnbmFsQmFzZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKG5vZGUsIG91dHB1dE51bWJlciwgaW5wdXROdW1iZXIpIHtcblx0ICAgICAgICAvL3plcm8gaXQgb3V0IHNvIHRoYXQgdGhlIHNpZ25hbCBjYW4gaGF2ZSBmdWxsIGNvbnRyb2xcblx0ICAgICAgICBpZiAoVG9uZS5TaWduYWwgJiYgVG9uZS5TaWduYWwgPT09IG5vZGUuY29uc3RydWN0b3IgfHwgVG9uZS5QYXJhbSAmJiBUb25lLlBhcmFtID09PSBub2RlLmNvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgIC8vY2FuY2VsIGNoYW5nZXNcblx0ICAgICAgICAgICAgbm9kZS5fcGFyYW0uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKDApO1xuXHQgICAgICAgICAgICAvL3Jlc2V0IHRoZSB2YWx1ZVxuXHQgICAgICAgICAgICBub2RlLl9wYXJhbS52YWx1ZSA9IDA7XG5cdCAgICAgICAgICAgIC8vbWFyayB0aGUgdmFsdWUgYXMgb3ZlcnJpZGRlblxuXHQgICAgICAgICAgICBub2RlLm92ZXJyaWRkZW4gPSB0cnVlO1xuXHQgICAgICAgIH0gZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIEF1ZGlvUGFyYW0pIHtcblx0ICAgICAgICAgICAgbm9kZS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMoMCk7XG5cdCAgICAgICAgICAgIG5vZGUudmFsdWUgPSAwO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdC5jYWxsKHRoaXMsIG5vZGUsIG91dHB1dE51bWJlciwgaW5wdXROdW1iZXIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNpZ25hbEJhc2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIC8vZml4ZXMgc2FmYXJpIG9ubHkgYnVnIHdoaWNoIGlzIHN0aWxsIHByZXNlbnQgaW4gMTFcblx0ICAgICAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG5cdCAgICAgICAgdmFyIGlzU2FmYXJpID0gdWEuaW5jbHVkZXMoJ3NhZmFyaScpICYmICF1YS5pbmNsdWRlcygnY2hyb21lJyk7XG5cdCAgICAgICAgaWYgKGlzU2FmYXJpKSB7XG5cdCAgICAgICAgICAgIHZhciBXYXZlU2hhcGVyTm9kZSA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbE5vZGUgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBjb250ZXh0Ll9uYXRpdmVfY3JlYXRlV2F2ZVNoYXBlcigpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3VydmUgPSBudWxsO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiB0aGlzLl9pbnRlcm5hbE5vZGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZpbmVQcm9wZXJ0eSh0aGlzLl9pbnRlcm5hbE5vZGUsIHByb3ApO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2F2ZVNoYXBlck5vZGUucHJvdG90eXBlLCAnY3VydmUnLCB7XG5cdCAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY3VydmU7XG5cdCAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoY3VydmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IGN1cnZlO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoY3VydmUubGVuZ3RoICsgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgYXJyYXkuc2V0KGN1cnZlLCAxKTtcblx0ICAgICAgICAgICAgICAgICAgICBhcnJheVswXSA9IGN1cnZlWzBdO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsTm9kZS5jdXJ2ZSA9IGFycmF5O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgV2F2ZVNoYXBlck5vZGUucHJvdG90eXBlLl9kZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChjb250ZXh0LCBwcm9wKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRoaXNbcHJvcF0pKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3AsIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRleHRbcHJvcF0gPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dFtwcm9wXS5iaW5kKGNvbnRleHQpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dFtwcm9wXTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0W3Byb3BdID0gdmFsO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuX25hdGl2ZV9jcmVhdGVXYXZlU2hhcGVyID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVXYXZlU2hhcGVyO1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVdhdmVTaGFwZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdhdmVTaGFwZXJOb2RlKHRoaXMpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBzIHRoZSBuYXRpdmUgV2ViIEF1ZGlvIEFQSVxuXHRcdCAqICAgICAgICAgW1dhdmVTaGFwZXJOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS13YXZlc2hhcGVybm9kZS1pbnRlcmZhY2UpLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9ufEFycmF5fE51bWJlcn0gbWFwcGluZyBUaGUgZnVuY3Rpb24gdXNlZCB0byBkZWZpbmUgdGhlIHZhbHVlcy5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXBwaW5nIGZ1bmN0aW9uIHNob3VsZCB0YWtlIHR3byBhcmd1bWVudHM6XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlyc3QgaXMgdGhlIHZhbHVlIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIHNlY29uZCBpcyB0aGUgYXJyYXkgcG9zaXRpb24uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgYW4gYXJyYXksIHRoYXQgYXJyYXkgd2lsbCBiZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGFzIHRoZSB3YXZlIHNoYXBpbmcgZnVuY3Rpb24uIFRoZSBpbnB1dFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsIGlzIGFuIEF1ZGlvUmFuZ2UgWy0xLCAxXSB2YWx1ZSBhbmQgdGhlIG91dHB1dFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsIGNhbiB0YWtlIG9uIGFueSBudW1lcmljYWwgdmFsdWVzLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBbYnVmZmVyTGVuPTEwMjRdIFRoZSBsZW5ndGggb2YgdGhlIFdhdmVTaGFwZXJOb2RlIGJ1ZmZlci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgdGltZXNUd28gPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uKHZhbCl7XG5cdFx0ICogXHRyZXR1cm4gdmFsICogMjtcblx0XHQgKiB9LCAyMDQ4KTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Egd2F2ZXNoYXBlciBjYW4gYWxzbyBiZSBjb25zdHJ1Y3RlZCB3aXRoIGFuIGFycmF5IG9mIHZhbHVlc1xuXHRcdCAqIHZhciBpbnZlcnQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKFsxLCAtMV0pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlU2hhcGVyID0gZnVuY3Rpb24gKG1hcHBpbmcsIGJ1ZmZlckxlbikge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB3YXZlc2hhcGVyXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlV2F2ZVNoYXBlcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB3YXZlc2hhcGVycyBjdXJ2ZVxuXHRcdFx0ICogIEB0eXBlIHtGbG9hdDMyQXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2N1cnZlID0gbnVsbDtcblx0ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtYXBwaW5nKSkge1xuXHQgICAgICAgICAgICB0aGlzLmN1cnZlID0gbWFwcGluZztcblx0ICAgICAgICB9IGVsc2UgaWYgKGlzRmluaXRlKG1hcHBpbmcpIHx8IFRvbmUuaXNVbmRlZihtYXBwaW5nKSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IG5ldyBGbG9hdDMyQXJyYXkoVG9uZS5kZWZhdWx0QXJnKG1hcHBpbmcsIDEwMjQpKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNGdW5jdGlvbihtYXBwaW5nKSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IG5ldyBGbG9hdDMyQXJyYXkoVG9uZS5kZWZhdWx0QXJnKGJ1ZmZlckxlbiwgMTAyNCkpO1xuXHQgICAgICAgICAgICB0aGlzLnNldE1hcChtYXBwaW5nKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5XYXZlU2hhcGVyLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIFVzZXMgYSBtYXBwaW5nIGZ1bmN0aW9uIHRvIHNldCB0aGUgdmFsdWUgb2YgdGhlIGN1cnZlLlxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9ufSBtYXBwaW5nIFRoZSBmdW5jdGlvbiB1c2VkIHRvIGRlZmluZSB0aGUgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXBwaW5nIGZ1bmN0aW9uIHRha2UgdHdvIGFyZ3VtZW50czpcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlyc3QgaXMgdGhlIHZhbHVlIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggZ29lcyBmcm9tIC0xIHRvIDEgb3ZlciB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGN1cnZlIGFycmF5LiBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBhcnJheSBwb3NpdGlvbi5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuV2F2ZVNoYXBlcn0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbWFwIHRoZSBpbnB1dCBzaWduYWwgZnJvbSBbLTEsIDFdIHRvIFswLCAxMF1cblx0XHQgKiBzaGFwZXIuc2V0TWFwKGZ1bmN0aW9uKHZhbCwgaW5kZXgpe1xuXHRcdCAqIFx0cmV0dXJuICh2YWwgKyAxKSAqIDU7XG5cdFx0ICogfSlcblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZVNoYXBlci5wcm90b3R5cGUuc2V0TWFwID0gZnVuY3Rpb24gKG1hcHBpbmcpIHtcblx0ICAgICAgICB2YXIgYXJyYXkgPSBuZXcgQXJyYXkodGhpcy5fY3VydmUubGVuZ3RoKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5fY3VydmUubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZWQgPSBpIC8gKGxlbiAtIDEpICogMiAtIDE7XG5cdCAgICAgICAgICAgIGFycmF5W2ldID0gbWFwcGluZyhub3JtYWxpemVkLCBpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5jdXJ2ZSA9IGFycmF5O1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBhcnJheSB0byBzZXQgYXMgdGhlIHdhdmVzaGFwZXIgY3VydmUuIEZvciBsaW5lYXIgY3VydmVzXG5cdFx0ICogYXJyYXkgbGVuZ3RoIGRvZXMgbm90IG1ha2UgbXVjaCBkaWZmZXJlbmNlLCBidXQgZm9yIGNvbXBsZXggY3VydmVzXG5cdFx0ICogbG9uZ2VyIGFycmF5cyB3aWxsIHByb3ZpZGUgc21vb3RoZXIgaW50ZXJwb2xhdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5XYXZlU2hhcGVyI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBjdXJ2ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuV2F2ZVNoYXBlci5wcm90b3R5cGUsICdjdXJ2ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXBlci5jdXJ2ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1hcHBpbmcpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY3VydmUgPSBuZXcgRmxvYXQzMkFycmF5KG1hcHBpbmcpO1xuXHQgICAgICAgICAgICB0aGlzLl9zaGFwZXIuY3VydmUgPSB0aGlzLl9jdXJ2ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFNwZWNpZmllcyB3aGF0IHR5cGUgb2Ygb3ZlcnNhbXBsaW5nIChpZiBhbnkpIHNob3VsZCBiZSB1c2VkIHdoZW5cblx0XHQgKiBhcHBseWluZyB0aGUgc2hhcGluZyBjdXJ2ZS4gQ2FuIGVpdGhlciBiZSBcIm5vbmVcIiwgXCIyeFwiIG9yIFwiNHhcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5XYXZlU2hhcGVyI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgb3ZlcnNhbXBsZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuV2F2ZVNoYXBlci5wcm90b3R5cGUsICdvdmVyc2FtcGxlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvdmVyc2FtcGxpbmcpIHtcblx0ICAgICAgICAgICAgaWYgKFtcblx0ICAgICAgICAgICAgICAgICAgICAnbm9uZScsXG5cdCAgICAgICAgICAgICAgICAgICAgJzJ4Jyxcblx0ICAgICAgICAgICAgICAgICAgICAnNHgnXG5cdCAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKG92ZXJzYW1wbGluZykpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlID0gb3ZlcnNhbXBsaW5nO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RvbmUuV2F2ZVNoYXBlcjogb3ZlcnNhbXBsaW5nIG11c3QgYmUgZWl0aGVyIFxcJ25vbmVcXCcsIFxcJzJ4XFwnLCBvciBcXCc0eFxcJycpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLldhdmVTaGFwZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZVNoYXBlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY3VydmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLldhdmVTaGFwZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UaW1lQmFzZSBpcyBhIGZsZXhpYmxlIGVuY29kaW5nIG9mIHRpbWVcblx0XHQgKiAgICAgICAgIHdoaWNoIGNhbiBiZSBldmFsdWF0ZWQgdG8gYW5kIGZyb20gYSBzdHJpbmcuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlIGFzIGEgbnVtYmVyIG9yIHN0cmluZ1xuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFVuaXQgdmFsdWVzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UaW1lQmFzZSg0LCBcIm5cIilcblx0XHQgKiBUb25lLlRpbWVCYXNlKDIsIFwidFwiKVxuXHRcdCAqIFRvbmUuVGltZUJhc2UoXCIydFwiKVxuXHRcdCAqIFRvbmUuVGltZUJhc2UoXCIydFwiKSArIFRvbmUuVGltZUJhc2UoXCI0blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIC8vYWxsb3dzIGl0IHRvIGJlIGNvbnN0cnVjdGVkIHdpdGggb3Igd2l0aG91dCAnbmV3J1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFRoZSB2YWx1ZVxuXHRcdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ8U3RyaW5nfFRvbmUuVGltZUJhc2V9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogVGhlIHVuaXRzXG5cdFx0XHRcdCAqIEB0eXBlIHtTdHJpbmc/fVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB1bml0cztcblx0ICAgICAgICAgICAgLy90ZXN0IGlmIHRoZSB2YWx1ZSBpcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG51bWJlclxuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRoaXMuX3VuaXRzKSAmJiBUb25lLmlzU3RyaW5nKHRoaXMuX3ZhbCkgJiYgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHQgICAgICAgICAgICAgICAgcGFyc2VGbG9hdCh0aGlzLl92YWwpID09IHRoaXMuX3ZhbCAmJiB0aGlzLl92YWwuY2hhckF0KDApICE9PSAnKycpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHBhcnNlRmxvYXQodGhpcy5fdmFsKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3VuaXRzID0gdGhpcy5fZGVmYXVsdFVuaXRzO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbCAmJiB2YWwuY29uc3RydWN0b3IgPT09IHRoaXMuY29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgICAgIC8vaWYgdGhleSdyZSB0aGUgc2FtZSB0eXBlLCBqdXN0IGNvcHkgdmFsdWVzIG92ZXJcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbC5fdmFsO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB2YWwuX3VuaXRzO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbCBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fZGVmYXVsdFVuaXRzKSB7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdzJzpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWwudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdpJzpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWwudG9UaWNrcygpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnaHonOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbC50b0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnbWlkaSc6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsLnRvTWlkaSgpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZCBkZWZhdWx0IHVuaXRzICcgKyB0aGlzLl9kZWZhdWx0VW5pdHMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpbWVCYXNlKHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpbWVCYXNlKTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEFCU1RSQUNUIFNZTlRBWCBUUkVFIFBBUlNFUlxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQWxsIHRoZSBwcmltYXJ5IGV4cHJlc3Npb25zLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9leHByZXNzaW9ucyA9IHtcblx0ICAgICAgICAnbic6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKW4oXFwuPykkL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlLCBkb3QpIHtcblx0ICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNjYWxhciA9IGRvdCA9PT0gJy4nID8gMS41IDogMTtcblx0ICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9iZWF0c1RvVW5pdHModGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpKSAqIHNjYWxhcjtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JlYXRzVG9Vbml0cyg0IC8gdmFsdWUpICogc2NhbGFyO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAndCc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKXQkL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9iZWF0c1RvVW5pdHMoOCAvIChwYXJzZUludCh2YWx1ZSkgKiAzKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdtJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCspbSQvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9iZWF0c1RvVW5pdHMocGFyc2VJbnQodmFsdWUpICogdGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2knOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKylpJC9pLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tzVG9Vbml0cyhwYXJzZUludCh2YWx1ZSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnaHonOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPyloeiQvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcmVxdWVuY3lUb1VuaXRzKHBhcnNlRmxvYXQodmFsdWUpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3RyJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCsoPzpcXC5cXGQrKT8pOihcXGQrKD86XFwuXFxkKyk/KTo/KFxcZCsoPzpcXC5cXGQrKT8pPyQvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uIChtLCBxLCBzKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdG90YWwgPSAwO1xuXHQgICAgICAgICAgICAgICAgaWYgKG0gJiYgbSAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5fYmVhdHNUb1VuaXRzKHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKSAqIHBhcnNlRmxvYXQobSkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHEgJiYgcSAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5fYmVhdHNUb1VuaXRzKHBhcnNlRmxvYXQocSkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHMgJiYgcyAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5fYmVhdHNUb1VuaXRzKHBhcnNlRmxvYXQocykgLyA0KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3MnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPylzJC8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2Vjb25kc1RvVW5pdHMocGFyc2VGbG9hdCh2YWx1ZSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnc2FtcGxlcyc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKXNhbXBsZXMkLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSkgLyB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2RlZmF1bHQnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPykkLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHByZXNzaW9uc1t0aGlzLl9kZWZhdWx0VW5pdHNdLm1ldGhvZC5jYWxsKHRoaXMsIHZhbHVlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdW5pdHMgaWYgbm9uZSBhcmUgZ2l2ZW4uXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZGVmYXVsdFVuaXRzID0gJ3MnO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VFJBTlNQT1JUIEZBTExCQUNLU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGJwbSwgb3IgMTIwIGlmIFRyYW5zcG9ydCBpcyBub3QgYXZhaWxhYmxlXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2dldEJwbSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0LmJwbS52YWx1ZTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gMTIwO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIHRpbWVTaWduYXR1cmUgb3IgNCBpZiBUcmFuc3BvcnQgaXMgbm90IGF2YWlsYWJsZVxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9nZXRUaW1lU2lnbmF0dXJlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQudGltZVNpZ25hdHVyZTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gNDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJuIHRoZSBQUFEgb3IgMTkyIGlmIFRyYW5zcG9ydCBpcyBub3QgYXZhaWxhYmxlXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2dldFBQUSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0LlBQUTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gMTkyO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBpbiB3aGljaGV2ZXIgY29udGV4dCBpcyByZWxldmFudFxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMubm93KCk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VU5JVCBDT05WRVJTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBmcmVxdWVuY3kgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXFcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9mcmVxdWVuY3lUb1VuaXRzID0gZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICByZXR1cm4gMSAvIGZyZXE7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGJlYXRzIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBiZWF0c1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cyA9IGZ1bmN0aW9uIChiZWF0cykge1xuXHQgICAgICAgIHJldHVybiA2MCAvIHRoaXMuX2dldEJwbSgpICogYmVhdHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgc2Vjb25kIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7U2Vjb25kc30gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzID0gZnVuY3Rpb24gKHNlY29uZHMpIHtcblx0ICAgICAgICByZXR1cm4gc2Vjb25kcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB0aWNrIGluIHRoZSBjdXJyZW50IHRpbWUgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtUaWNrc30gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl90aWNrc1RvVW5pdHMgPSBmdW5jdGlvbiAodGlja3MpIHtcblx0ICAgICAgICByZXR1cm4gdGlja3MgKiAodGhpcy5fYmVhdHNUb1VuaXRzKDEpIC8gdGhpcy5fZ2V0UFBRKCkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFdpdGggbm8gYXJndW1lbnRzLCByZXR1cm4gJ25vdydcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9ub0FyZyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fbm93KCk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0RVhQUkVTU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIEV2YWx1YXRlIHRoZSB0aW1lIHZhbHVlLiBSZXR1cm5zIHRoZSB0aW1lXG5cdFx0ICogIGluIHNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRoaXMuX3ZhbCkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vQXJnKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKHRoaXMuX3ZhbCkgJiYgVG9uZS5pc1VuZGVmKHRoaXMuX3VuaXRzKSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciB1bml0cyBpbiB0aGlzLl9leHByZXNzaW9ucykge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2V4cHJlc3Npb25zW3VuaXRzXS5yZWdleHAudGVzdCh0aGlzLl92YWwudHJpbSgpKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VuaXRzID0gdW5pdHM7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKHRoaXMuX3VuaXRzKSkge1xuXHQgICAgICAgICAgICB2YXIgZXhwciA9IHRoaXMuX2V4cHJlc3Npb25zW3RoaXMuX3VuaXRzXTtcblx0ICAgICAgICAgICAgdmFyIG1hdGNoaW5nID0gdGhpcy5fdmFsLnRvU3RyaW5nKCkudHJpbSgpLm1hdGNoKGV4cHIucmVnZXhwKTtcblx0ICAgICAgICAgICAgaWYgKG1hdGNoaW5nKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZXhwci5tZXRob2QuYXBwbHkodGhpcywgbWF0Y2hpbmcuc2xpY2UoMSkpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGV4cHIubWV0aG9kLmNhbGwodGhpcywgcGFyc2VGbG9hdCh0aGlzLl92YWwpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIGluIHNlY29uZHNcblx0XHQgKiAgQHJldHVybiB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLnRvU2Vjb25kcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgaW4gaGVydHpcblx0XHQgKiAgQHJldHVybiB7RnJlcXVlbmN5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9GcmVxdWVuY3kgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyB0aGlzLnRvU2Vjb25kcygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gc2FtcGxlc1xuXHRcdCAqICBAcmV0dXJuICB7U2FtcGxlc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLnRvU2FtcGxlcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy50b1NlY29uZHMoKSAqIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7TWlsbGlzZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9NaWxsaXNlY29uZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudG9TZWNvbmRzKCkgKiAxMDAwO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlRpbWVCYXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3ZhbCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdW5pdHMgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpbWVCYXNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRnJlcXVlbmN5IGlzIGEgcHJpbWl0aXZlIHR5cGUgZm9yIGVuY29kaW5nIEZyZXF1ZW5jeSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBFdmVudHVhbGx5IGFsbCB0aW1lIHZhbHVlcyBhcmUgZXZhbHVhdGVkIHRvIGhlcnR6XG5cdFx0ICogICAgICAgICB1c2luZyB0aGUgYGV2YWxgIG1ldGhvZC5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRpbWVCYXNlfVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFRoZSB1bml0cyBvZiB0aGUgdmFsdWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJDM1wiKSAvLyAyNjFcblx0XHQgKiBUb25lLkZyZXF1ZW5jeSgzOCwgXCJtaWRpXCIpIC8vXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJDM1wiKS50cmFuc3Bvc2UoNCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeSA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLkZyZXF1ZW5jeSkge1xuXHQgICAgICAgICAgICBUb25lLlRpbWVCYXNlLmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLkZyZXF1ZW5jeSh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GcmVxdWVuY3ksIFRvbmUuVGltZUJhc2UpO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QVVHTUVOVCBCQVNFIEVYUFJFU1NJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fZXhwcmVzc2lvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZXhwcmVzc2lvbnMsIHtcblx0ICAgICAgICAnbWlkaSc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/bWlkaSkvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRVbml0cyA9PT0gJ21pZGknKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kubXRvZih2YWx1ZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdub3RlJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFthLWddezF9KD86YnwjfHh8YmIpPykoLT9bMC05XSspL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHBpdGNoLCBvY3RhdmUpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IG5vdGVUb1NjYWxlSW5kZXhbcGl0Y2gudG9Mb3dlckNhc2UoKV07XG5cdCAgICAgICAgICAgICAgICB2YXIgbm90ZU51bWJlciA9IGluZGV4ICsgKHBhcnNlSW50KG9jdGF2ZSkgKyAxKSAqIDEyO1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRVbml0cyA9PT0gJ21pZGknKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vdGVOdW1iZXI7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5tdG9mKG5vdGVOdW1iZXIpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAndHInOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPyk6KFxcZCsoPzpcXC5cXGQrKT8pOj8oXFxkKyg/OlxcLlxcZCspPyk/Lyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAobSwgcSwgcykge1xuXHQgICAgICAgICAgICAgICAgdmFyIHRvdGFsID0gMTtcblx0ICAgICAgICAgICAgICAgIGlmIChtICYmIG0gIT09ICcwJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICo9IHRoaXMuX2JlYXRzVG9Vbml0cyh0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCkgKiBwYXJzZUZsb2F0KG0pKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmIChxICYmIHEgIT09ICcwJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICo9IHRoaXMuX2JlYXRzVG9Vbml0cyhwYXJzZUZsb2F0KHEpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmIChzICYmIHMgIT09ICcwJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICo9IHRoaXMuX2JlYXRzVG9Vbml0cyhwYXJzZUZsb2F0KHMpIC8gNCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdG90YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEVYUFJFU1NJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBUcmFuc3Bvc2VzIHRoZSBmcmVxdWVuY3kgYnkgdGhlIGdpdmVuIG51bWJlciBvZiBzZW1pdG9uZXMuXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsfSAgaW50ZXJ2YWxcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRnJlcXVlbmN5fSBBIG5ldyB0cmFuc3Bvc2VkIGZyZXF1ZW5jeVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQTRcIikudHJhbnNwb3NlKDMpOyAvL1wiQzVcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRyYW5zcG9zZSA9IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLnZhbHVlT2YoKSAqIFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKGludGVydmFsKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRha2VzIGFuIGFycmF5IG9mIHNlbWl0b25lIGludGVydmFscyBhbmQgcmV0dXJuc1xuXHRcdCAqICBhbiBhcnJheSBvZiBmcmVxdWVuY2llcyB0cmFuc3Bvc2VkIGJ5IHRob3NlIGludGVydmFscy5cblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICBpbnRlcnZhbHNcblx0XHQgKiAgQHJldHVybiAge0FycmF5PFRvbmUuRnJlcXVlbmN5Pn0gUmV0dXJucyBhbiBhcnJheSBvZiBGcmVxdWVuY2llc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQTRcIikuaGFybW9uaXplKFswLCAzLCA3XSk7IC8vW1wiQTRcIiwgXCJDNVwiLCBcIkU1XCJdXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuaGFybW9uaXplID0gZnVuY3Rpb24gKGludGVydmFscykge1xuXHQgICAgICAgIHJldHVybiBpbnRlcnZhbHMubWFwKGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc3Bvc2UoaW50ZXJ2YWwpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VU5JVCBDT05WRVJTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZnJlcXVlbmN5IGFzIGEgTUlESSBub3RlXG5cdFx0ICogIEByZXR1cm4gIHtNSURJfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQzRcIikudG9NaWRpKCk7IC8vNjBcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS50b01pZGkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LmZ0b20odGhpcy52YWx1ZU9mKCkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgaW4gU2NpZW50aWZpYyBQaXRjaCBOb3RhdGlvblxuXHRcdCAqICBAcmV0dXJuICB7Tm90ZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeSg2OSwgXCJtaWRpXCIpLnRvTm90ZSgpOyAvL1wiQTRcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRvTm90ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgZnJlcSA9IHRoaXMudG9GcmVxdWVuY3koKTtcblx0ICAgICAgICB2YXIgbG9nID0gTWF0aC5sb2cyKGZyZXEgLyBUb25lLkZyZXF1ZW5jeS5BNCk7XG5cdCAgICAgICAgdmFyIG5vdGVOdW1iZXIgPSBNYXRoLnJvdW5kKDEyICogbG9nKSArIDU3O1xuXHQgICAgICAgIHZhciBvY3RhdmUgPSBNYXRoLmZsb29yKG5vdGVOdW1iZXIgLyAxMik7XG5cdCAgICAgICAgaWYgKG9jdGF2ZSA8IDApIHtcblx0ICAgICAgICAgICAgbm90ZU51bWJlciArPSAtMTIgKiBvY3RhdmU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBub3RlTmFtZSA9IHNjYWxlSW5kZXhUb05vdGVbbm90ZU51bWJlciAlIDEyXTtcblx0ICAgICAgICByZXR1cm4gbm90ZU5hbWUgKyBvY3RhdmUudG9TdHJpbmcoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBkdXJhdGlvbiBvZiBvbmUgY3ljbGUgaW4gc2Vjb25kcy5cblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiAxIC8gVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9TZWNvbmRzLmNhbGwodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgaW4gSGVydHpcblx0XHQgKiAgQHJldHVybiAge0ZyZXF1ZW5jeX1cblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS50b0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9GcmVxdWVuY3kuY2FsbCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBkdXJhdGlvbiBvZiBvbmUgY3ljbGUgaW4gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge1RpY2tzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRvVGlja3MgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJUaW1lID0gdGhpcy5fYmVhdHNUb1VuaXRzKDEpO1xuXHQgICAgICAgIHZhciBxdWFydGVycyA9IHRoaXMudmFsdWVPZigpIC8gcXVhcnRlclRpbWU7XG5cdCAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IocXVhcnRlcnMgKiBUb25lLlRyYW5zcG9ydC5QUFEpO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFVOSVQgQ09OVkVSU0lPTlMgSEVMUEVSU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgV2l0aCBubyBhcmd1bWVudHMsIHJldHVybiAwXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX25vQXJnID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiAwO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIGZyZXF1ZW5jeSBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9mcmVxdWVuY3lUb1VuaXRzID0gZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICByZXR1cm4gZnJlcTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB0aWNrIGluIHRoZSBjdXJyZW50IHRpbWUgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtUaWNrc30gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fdGlja3NUb1VuaXRzID0gZnVuY3Rpb24gKHRpY2tzKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyAodGlja3MgKiA2MCAvIChUb25lLlRyYW5zcG9ydC5icG0udmFsdWUgKiBUb25lLlRyYW5zcG9ydC5QUFEpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYmVhdHMgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJlYXRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cyA9IGZ1bmN0aW9uIChiZWF0cykge1xuXHQgICAgICAgIHJldHVybiAxIC8gVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cy5jYWxsKHRoaXMsIGJlYXRzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBzZWNvbmQgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtTZWNvbmRzfSBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzID0gZnVuY3Rpb24gKHNlY29uZHMpIHtcblx0ICAgICAgICByZXR1cm4gMSAvIHNlY29uZHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHVuaXRzIGlmIG5vbmUgYXJlIGdpdmVuLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9kZWZhdWx0VW5pdHMgPSAnaHonO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0RlJFUVVFTkNZIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBOb3RlIHRvIHNjYWxlIGluZGV4XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgdmFyIG5vdGVUb1NjYWxlSW5kZXggPSB7XG5cdCAgICAgICAgJ2NiYic6IC0yLFxuXHQgICAgICAgICdjYic6IC0xLFxuXHQgICAgICAgICdjJzogMCxcblx0ICAgICAgICAnYyMnOiAxLFxuXHQgICAgICAgICdjeCc6IDIsXG5cdCAgICAgICAgJ2RiYic6IDAsXG5cdCAgICAgICAgJ2RiJzogMSxcblx0ICAgICAgICAnZCc6IDIsXG5cdCAgICAgICAgJ2QjJzogMyxcblx0ICAgICAgICAnZHgnOiA0LFxuXHQgICAgICAgICdlYmInOiAyLFxuXHQgICAgICAgICdlYic6IDMsXG5cdCAgICAgICAgJ2UnOiA0LFxuXHQgICAgICAgICdlIyc6IDUsXG5cdCAgICAgICAgJ2V4JzogNixcblx0ICAgICAgICAnZmJiJzogMyxcblx0ICAgICAgICAnZmInOiA0LFxuXHQgICAgICAgICdmJzogNSxcblx0ICAgICAgICAnZiMnOiA2LFxuXHQgICAgICAgICdmeCc6IDcsXG5cdCAgICAgICAgJ2diYic6IDUsXG5cdCAgICAgICAgJ2diJzogNixcblx0ICAgICAgICAnZyc6IDcsXG5cdCAgICAgICAgJ2cjJzogOCxcblx0ICAgICAgICAnZ3gnOiA5LFxuXHQgICAgICAgICdhYmInOiA3LFxuXHQgICAgICAgICdhYic6IDgsXG5cdCAgICAgICAgJ2EnOiA5LFxuXHQgICAgICAgICdhIyc6IDEwLFxuXHQgICAgICAgICdheCc6IDExLFxuXHQgICAgICAgICdiYmInOiA5LFxuXHQgICAgICAgICdiYic6IDEwLFxuXHQgICAgICAgICdiJzogMTEsXG5cdCAgICAgICAgJ2IjJzogMTIsXG5cdCAgICAgICAgJ2J4JzogMTNcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc2NhbGUgaW5kZXggdG8gbm90ZSAoc2hhcnBzKVxuXHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIHNjYWxlSW5kZXhUb05vdGUgPSBbXG5cdCAgICAgICAgJ0MnLFxuXHQgICAgICAgICdDIycsXG5cdCAgICAgICAgJ0QnLFxuXHQgICAgICAgICdEIycsXG5cdCAgICAgICAgJ0UnLFxuXHQgICAgICAgICdGJyxcblx0ICAgICAgICAnRiMnLFxuXHQgICAgICAgICdHJyxcblx0ICAgICAgICAnRyMnLFxuXHQgICAgICAgICdBJyxcblx0ICAgICAgICAnQSMnLFxuXHQgICAgICAgICdCJ1xuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgW2NvbmNlcnQgcGl0Y2hdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbmNlcnRfcGl0Y2gpXG5cdFx0ICogIEE0J3MgdmFsdWVzIGluIEhlcnR6LlxuXHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5BNCA9IDQ0MDtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGEgTUlESSBub3RlIHRvIGZyZXF1ZW5jeSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7TUlESX0gbWlkaSBUaGUgbWlkaSBudW1iZXIgdG8gY29udmVydC5cblx0XHQgKiAgQHJldHVybiB7RnJlcXVlbmN5fSB0aGUgY29ycmVzcG9uZGluZyBmcmVxdWVuY3kgdmFsdWVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5Lm10b2YoNjkpOyAvLyByZXR1cm5zIDQ0MFxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kubXRvZiA9IGZ1bmN0aW9uIChtaWRpKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LkE0ICogTWF0aC5wb3coMiwgKG1pZGkgLSA2OSkgLyAxMik7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYSBmcmVxdWVuY3kgdmFsdWUgdG8gYSBNSURJIG5vdGUuXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHZhbHVlIHRvIGZyZXF1ZW5jeSB2YWx1ZSB0byBjb252ZXJ0LlxuXHRcdCAqICBAcmV0dXJucyAge01JREl9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeS5mdG9tKDQ0MCk7IC8vIHJldHVybnMgNjlcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LmZ0b20gPSBmdW5jdGlvbiAoZnJlcXVlbmN5KSB7XG5cdCAgICAgICAgcmV0dXJuIDY5ICsgTWF0aC5yb3VuZCgxMiAqIE1hdGgubG9nMihmcmVxdWVuY3kgLyBUb25lLkZyZXF1ZW5jeS5BNCkpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRpbWUgaXMgYSBwcmltaXRpdmUgdHlwZSBmb3IgZW5jb2RpbmcgVGltZSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBUb25lLlRpbWUgY2FuIGJlIGNvbnN0cnVjdGVkIHdpdGggb3Igd2l0aG91dCB0aGUgYG5ld2Aga2V5d29yZC4gVG9uZS5UaW1lIGNhbiBiZSBwYXNzZWRcblx0XHQgKiAgICAgICAgIGludG8gdGhlIHBhcmFtZXRlciBvZiBhbnkgbWV0aG9kIHdoaWNoIHRha2VzIHRpbWUgYXMgYW4gYXJndW1lbnQuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UaW1lQmFzZX1cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIHZhbCAgICBUaGUgdGltZSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nPX0gIHVuaXRzICBUaGUgdW5pdHMgb2YgdGhlIHZhbHVlLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciB0ID0gVG9uZS5UaW1lKFwiNG5cIik7Ly9hIHF1YXJ0ZXIgbm90ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lID0gZnVuY3Rpb24gKHZhbCwgdW5pdHMpIHtcblx0ICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFRvbmUuVGltZSkge1xuXHQgICAgICAgICAgICBUb25lLlRpbWVCYXNlLmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpbWUodmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGltZSwgVG9uZS5UaW1lQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiBFeHRlbmQgdGhlIGJhc2UgZXhwcmVzc2lvbnNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUuX2V4cHJlc3Npb25zID0gT2JqZWN0LmFzc2lnbih7fSwgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2V4cHJlc3Npb25zLCB7XG5cdCAgICAgICAgJ3F1YW50aXplJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eQCguKykvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uIChjYXB0dXJlKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgcXVhbnRUbyA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGNhcHR1cmUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC5uZXh0U3ViZGl2aXNpb24ocXVhbnRUbyk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnbm93Jzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eXFwrKC4rKS8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKGNhcHR1cmUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3coKSArIG5ldyB0aGlzLmNvbnN0cnVjdG9yKGNhcHR1cmUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUXVhbnRpemUgdGhlIHRpbWUgYnkgdGhlIGdpdmVuIHN1YmRpdmlzaW9uLiBPcHRpb25hbGx5IGFkZCBhXG5cdFx0ICogIHBlcmNlbnRhZ2Ugd2hpY2ggd2lsbCBtb3ZlIHRoZSB0aW1lIHZhbHVlIHRvd2FyZHMgdGhlIGlkZWFsXG5cdFx0ICogIHF1YW50aXplZCB2YWx1ZSBieSB0aGF0IHBlcmNlbnRhZ2UuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcnxUaW1lfSAgdmFsICAgIFRoZSBzdWJkaXZpc2lvbiB0byBxdWFudGl6ZSB0b1xuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIFtwZXJjZW50PTFdICBNb3ZlIHRoZSB0aW1lIHZhbHVlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvd2FyZHMgdGhlIHF1YW50aXplZCB2YWx1ZSBieVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHBlcmNlbnRhZ2UuXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UaW1lKDIxKS5xdWFudGl6ZSgyKSAvL3JldHVybnMgMjJcblx0XHQgKiBUb25lLlRpbWUoMC42KS5xdWFudGl6ZShcIjRuXCIsIDAuNSkgLy9yZXR1cm5zIDAuNTVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUucXVhbnRpemUgPSBmdW5jdGlvbiAoc3ViZGl2LCBwZXJjZW50KSB7XG5cdCAgICAgICAgcGVyY2VudCA9IFRvbmUuZGVmYXVsdEFyZyhwZXJjZW50LCAxKTtcblx0ICAgICAgICB2YXIgc3ViZGl2aXNpb24gPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcihzdWJkaXYpO1xuXHQgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWVPZigpO1xuXHQgICAgICAgIHZhciBtdWx0aXBsZSA9IE1hdGgucm91bmQodmFsdWUgLyBzdWJkaXZpc2lvbik7XG5cdCAgICAgICAgdmFyIGlkZWFsID0gbXVsdGlwbGUgKiBzdWJkaXZpc2lvbjtcblx0ICAgICAgICB2YXIgZGlmZiA9IGlkZWFsIC0gdmFsdWU7XG5cdCAgICAgICAgcmV0dXJuIHZhbHVlICsgZGlmZiAqIHBlcmNlbnQ7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBDT05WRVJTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhIFRpbWUgdG8gTm90YXRpb24uIFRoZSBub3RhdGlvbiB2YWx1ZXMgYXJlIHdpbGwgYmUgdGhlXG5cdFx0ICogIGNsb3Nlc3QgcmVwcmVzZW50YXRpb24gYmV0d2VlbiAxbSB0byAxMjh0aCBub3RlLlxuXHRcdCAqICBAcmV0dXJuIHtOb3RhdGlvbn1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2lmIHRoZSBUcmFuc3BvcnQgaXMgYXQgMTIwYnBtOlxuXHRcdCAqIFRvbmUuVGltZSgyKS50b05vdGF0aW9uKCk7Ly9yZXR1cm5zIFwiMW1cIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS50b05vdGF0aW9uID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciB0aW1lID0gdGhpcy50b1NlY29uZHMoKTtcblx0ICAgICAgICB2YXIgdGVzdE5vdGF0aW9ucyA9IFsnMW0nXTtcblx0ICAgICAgICBmb3IgKHZhciBwb3dlciA9IDE7IHBvd2VyIDwgODsgcG93ZXIrKykge1xuXHQgICAgICAgICAgICB2YXIgc3ViZGl2ID0gTWF0aC5wb3coMiwgcG93ZXIpO1xuXHQgICAgICAgICAgICB0ZXN0Tm90YXRpb25zLnB1c2goc3ViZGl2ICsgJ24uJyk7XG5cdCAgICAgICAgICAgIHRlc3ROb3RhdGlvbnMucHVzaChzdWJkaXYgKyAnbicpO1xuXHQgICAgICAgICAgICB0ZXN0Tm90YXRpb25zLnB1c2goc3ViZGl2ICsgJ3QnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGVzdE5vdGF0aW9ucy5wdXNoKCcwJyk7XG5cdCAgICAgICAgLy9maW5kIHRoZSBjbG9zZXRzIG5vdGF0aW9uIHJlcHJlc2VudGF0aW9uXG5cdCAgICAgICAgdmFyIGNsb3Nlc3QgPSB0ZXN0Tm90YXRpb25zWzBdO1xuXHQgICAgICAgIHZhciBjbG9zZXN0U2Vjb25kcyA9IFRvbmUuVGltZSh0ZXN0Tm90YXRpb25zWzBdKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB0ZXN0Tm90YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG5vdGF0aW9uKSB7XG5cdCAgICAgICAgICAgIHZhciBub3RhdGlvblNlY29uZHMgPSBUb25lLlRpbWUobm90YXRpb24pLnRvU2Vjb25kcygpO1xuXHQgICAgICAgICAgICBpZiAoTWF0aC5hYnMobm90YXRpb25TZWNvbmRzIC0gdGltZSkgPCBNYXRoLmFicyhjbG9zZXN0U2Vjb25kcyAtIHRpbWUpKSB7XG5cdCAgICAgICAgICAgICAgICBjbG9zZXN0ID0gbm90YXRpb247XG5cdCAgICAgICAgICAgICAgICBjbG9zZXN0U2Vjb25kcyA9IG5vdGF0aW9uU2Vjb25kcztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiBjbG9zZXN0O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgZW5jb2RlZCBhcyBCYXJzOkJlYXRzOlNpeHRlZW50aHMuXG5cdFx0ICogIEByZXR1cm4gIHtCYXJzQmVhdHNTaXh0ZWVudGhzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS50b0JhcnNCZWF0c1NpeHRlZW50aHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJUaW1lID0gdGhpcy5fYmVhdHNUb1VuaXRzKDEpO1xuXHQgICAgICAgIHZhciBxdWFydGVycyA9IHRoaXMudmFsdWVPZigpIC8gcXVhcnRlclRpbWU7XG5cdCAgICAgICAgdmFyIG1lYXN1cmVzID0gTWF0aC5mbG9vcihxdWFydGVycyAvIHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKSk7XG5cdCAgICAgICAgdmFyIHNpeHRlZW50aHMgPSBxdWFydGVycyAlIDEgKiA0O1xuXHQgICAgICAgIHF1YXJ0ZXJzID0gTWF0aC5mbG9vcihxdWFydGVycykgJSB0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCk7XG5cdCAgICAgICAgc2l4dGVlbnRocyA9IHNpeHRlZW50aHMudG9TdHJpbmcoKTtcblx0ICAgICAgICBpZiAoc2l4dGVlbnRocy5sZW5ndGggPiAzKSB7XG5cdCAgICAgICAgICAgIC8vIHRoZSBhZGRpdGlvbmFsIHBhcnNlRmxvYXQgcmVtb3ZlcyBpbnNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9lc1xuXHQgICAgICAgICAgICBzaXh0ZWVudGhzID0gcGFyc2VGbG9hdChwYXJzZUZsb2F0KHNpeHRlZW50aHMpLnRvRml4ZWQoMykpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcHJvZ3Jlc3MgPSBbXG5cdCAgICAgICAgICAgIG1lYXN1cmVzLFxuXHQgICAgICAgICAgICBxdWFydGVycyxcblx0ICAgICAgICAgICAgc2l4dGVlbnRoc1xuXHQgICAgICAgIF07XG5cdCAgICAgICAgcmV0dXJuIHByb2dyZXNzLmpvaW4oJzonKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIHRpY2tzLlxuXHRcdCAqICBAcmV0dXJuICB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnRvVGlja3MgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJUaW1lID0gdGhpcy5fYmVhdHNUb1VuaXRzKDEpO1xuXHQgICAgICAgIHZhciBxdWFydGVycyA9IHRoaXMudmFsdWVPZigpIC8gcXVhcnRlclRpbWU7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgucm91bmQocXVhcnRlcnMgKiB0aGlzLl9nZXRQUFEoKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiBzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBhcyBhIG1pZGkgbm90ZS5cblx0XHQgKiAgQHJldHVybiAge01pZGl9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnRvTWlkaSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbSh0aGlzLnRvRnJlcXVlbmN5KCkpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpbWU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UcmFuc3BvcnRUaW1lIGlzIGEgdGhlIHRpbWUgYWxvbmcgdGhlIFRyYW5zcG9ydCdzXG5cdFx0ICogICAgICAgICB0aW1lbGluZS4gSXQgaXMgc2ltaWxhciB0byBUb25lLlRpbWUsIGJ1dCBpbnN0ZWFkIG9mIGV2YWx1YXRpbmdcblx0XHQgKiAgICAgICAgIGFnYWluc3QgdGhlIEF1ZGlvQ29udGV4dCdzIGNsb2NrLCBpdCBpcyBldmFsdWF0ZWQgYWdhaW5zdFxuXHRcdCAqICAgICAgICAgdGhlIFRyYW5zcG9ydCdzIHBvc2l0aW9uLiBTZWUgW1RyYW5zcG9ydFRpbWUgd2lraV0oaHR0cHM6Ly9naXRodWIuY29tL1RvbmVqcy9Ub25lLmpzL3dpa2kvVHJhbnNwb3J0VGltZSkuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlIGFzIGEgbnVtYmVyIG9yIHN0cmluZ1xuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFVuaXQgdmFsdWVzXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRpbWV9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWUgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5UcmFuc3BvcnRUaW1lKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVGltZS5jYWxsKHRoaXMsIHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5UcmFuc3BvcnRUaW1lKHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyYW5zcG9ydFRpbWUsIFRvbmUuVGltZSk7XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBpbiB3aGljaGV2ZXIgY29udGV4dCBpcyByZWxldmFudFxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZS5wcm90b3R5cGUuX25vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQuc2Vjb25kcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnRUaW1lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRUWVBFU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiBVbml0cyB3aGljaCBhIHZhbHVlIGNhbiB0YWtlIG9uLlxuXHRcdCAqIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICovXG5cdCAgICBUb25lLlR5cGUgPSB7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgRGVmYXVsdCB1bml0c1xuXHRcdFx0ICogIEB0eXBlZGVmIHtEZWZhdWx0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgRGVmYXVsdDogJ251bWJlcicsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGltZSBjYW4gYmUgZGVzY3JpYmVkIGluIGEgbnVtYmVyIG9mIHdheXMuIFJlYWQgbW9yZSBbVGltZV0oaHR0cHM6Ly9naXRodWIuY29tL1RvbmVqcy9Ub25lLmpzL3dpa2kvVGltZSkuXG5cdFx0XHQgKlxuXHRcdFx0ICogICogTnVtYmVycywgd2hpY2ggd2lsbCBiZSB0YWtlbiBsaXRlcmFsbHkgYXMgdGhlIHRpbWUgKGluIHNlY29uZHMpLlxuXHRcdFx0ICogICogTm90YXRpb24sIChcIjRuXCIsIFwiOHRcIikgZGVzY3JpYmVzIHRpbWUgaW4gQlBNIGFuZCB0aW1lIHNpZ25hdHVyZSByZWxhdGl2ZSB2YWx1ZXMuXG5cdFx0XHQgKiAgKiBUcmFuc3BvcnRUaW1lLCAoXCI0OjM6MlwiKSB3aWxsIGFsc28gcHJvdmlkZSB0ZW1wbyBhbmQgdGltZSBzaWduYXR1cmUgcmVsYXRpdmUgdGltZXNcblx0XHRcdCAqICBpbiB0aGUgZm9ybSBCQVJTOlFVQVJURVJTOlNJWFRFRU5USFMuXG5cdFx0XHQgKiAgKiBGcmVxdWVuY3ksIChcIjhoelwiKSBpcyBjb252ZXJ0ZWQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgY3ljbGUgaW4gc2Vjb25kcy5cblx0XHRcdCAqICAqIE5vdy1SZWxhdGl2ZSwgKFwiKzFcIikgcHJlZml4IGFueSBvZiB0aGUgYWJvdmUgd2l0aCBcIitcIiBhbmQgaXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhc1xuXHRcdFx0ICogIFwidGhlIGN1cnJlbnQgdGltZSBwbHVzIHdoYXRldmVyIGV4cHJlc3Npb24gZm9sbG93c1wiLlxuXHRcdFx0ICogICogRXhwcmVzc2lvbnMsIChcIjM6MCArIDIgLSAoMW0gLyA3KVwiKSBhbnkgb2YgdGhlIGFib3ZlIGNhbiBhbHNvIGJlIGNvbWJpbmVkXG5cdFx0XHQgKiAgaW50byBhIG1hdGhlbWF0aWNhbCBleHByZXNzaW9uIHdoaWNoIHdpbGwgYmUgZXZhbHVhdGVkIHRvIGNvbXB1dGUgdGhlIGRlc2lyZWQgdGltZS5cblx0XHRcdCAqICAqIE5vIEFyZ3VtZW50LCBmb3IgbWV0aG9kcyB3aGljaCBhY2NlcHQgdGltZSwgbm8gYXJndW1lbnQgd2lsbCBiZSBpbnRlcnByZXRlZCBhc1xuXHRcdFx0ICogIFwibm93XCIgKGkuZS4gdGhlIGN1cnJlbnRUaW1lKS5cblx0XHRcdCAqXG5cdFx0XHQgKiAgQHR5cGVkZWYge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICBUaW1lOiAndGltZScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgRnJlcXVlbmN5IGNhbiBiZSBkZXNjcmliZWQgc2ltaWxhciB0byB0aW1lLCBleGNlcHQgdWx0aW1hdGVseSB0aGVcblx0XHRcdCAqICB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byBmcmVxdWVuY3kgaW5zdGVhZCBvZiBzZWNvbmRzLiBBIG51bWJlclxuXHRcdFx0ICogIGlzIHRha2VuIGxpdGVyYWxseSBhcyB0aGUgdmFsdWUgaW4gaGVydHouIEFkZGl0aW9uYWxseSBhbnkgb2YgdGhlXG5cdFx0XHQgKiAgVGltZSBlbmNvZGluZ3MgY2FuIGJlIHVzZWQuIE5vdGUgbmFtZXMgaW4gdGhlIGZvcm1cblx0XHRcdCAqICBvZiBOT1RFIE9DVEFWRSAoaS5lLiBDNCkgYXJlIGFsc28gYWNjZXB0ZWQgYW5kIGNvbnZlcnRlZCB0byB0aGVpclxuXHRcdFx0ICogIGZyZXF1ZW5jeSB2YWx1ZS5cblx0XHRcdCAqICBAdHlwZWRlZiB7RnJlcXVlbmN5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgRnJlcXVlbmN5OiAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUcmFuc3BvcnRUaW1lIGRlc2NyaWJlcyBhIHBvc2l0aW9uIGFsb25nIHRoZSBUcmFuc3BvcnQncyB0aW1lbGluZS4gSXQgaXNcblx0XHRcdCAqICBzaW1pbGFyIHRvIFRpbWUgaW4gdGhhdCBpdCB1c2VzIGFsbCB0aGUgc2FtZSBlbmNvZGluZ3MsIGJ1dCBUcmFuc3BvcnRUaW1lIHNwZWNpZmljYWxseVxuXHRcdFx0ICogIHBlcnRhaW5zIHRvIHRoZSBUcmFuc3BvcnQncyB0aW1lbGluZSwgd2hpY2ggaXMgc3RhcnRhYmxlLCBzdG9wcGFibGUsIGxvb3BhYmxlLCBhbmQgc2Vla2FibGUuXG5cdFx0XHQgKiAgW1JlYWQgbW9yZV0oaHR0cHM6Ly9naXRodWIuY29tL1RvbmVqcy9Ub25lLmpzL3dpa2kvVHJhbnNwb3J0VGltZSlcblx0XHRcdCAqICBAdHlwZWRlZiB7VHJhbnNwb3J0VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIFRyYW5zcG9ydFRpbWU6ICd0cmFuc3BvcnRUaW1lJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaWNrcyBhcmUgdGhlIGJhc2ljIHN1YnVuaXQgb2YgdGhlIFRyYW5zcG9ydC4gVGhleSBhcmVcblx0XHRcdCAqICB0aGUgc21hbGxlc3QgdW5pdCBvZiB0aW1lIHRoYXQgdGhlIFRyYW5zcG9ydCBzdXBwb3J0cy5cblx0XHRcdCAqICBAdHlwZWRlZiB7VGlja3N9XG5cdFx0XHQgKi9cblx0ICAgICAgICBUaWNrczogJ3RpY2tzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBOb3JtYWwgdmFsdWVzIGFyZSB3aXRoaW4gdGhlIHJhbmdlIFswLCAxXS5cblx0XHRcdCAqICBAdHlwZWRlZiB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKi9cblx0ICAgICAgICBOb3JtYWxSYW5nZTogJ25vcm1hbFJhbmdlJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBdWRpb1JhbmdlIHZhbHVlcyBhcmUgYmV0d2VlbiBbLTEsIDFdLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtBdWRpb1JhbmdlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgQXVkaW9SYW5nZTogJ2F1ZGlvUmFuZ2UnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIERlY2liZWxzIGFyZSBhIGxvZ2FyaXRobWljIHVuaXQgb2YgbWVhc3VyZW1lbnQgd2hpY2ggaXMgdXNlZnVsIGZvciB2b2x1bWVcblx0XHRcdCAqICBiZWNhdXNlIG9mIHRoZSBsb2dhcml0aG1pYyB3YXkgdGhhdCB3ZSBwZXJjZWl2ZSBsb3VkbmVzcy4gMCBkZWNpYmVsc1xuXHRcdFx0ICogIG1lYW5zIG5vIGNoYW5nZSBpbiB2b2x1bWUuIC0xMGRiIGlzIGFwcHJveGltYXRlbHkgaGFsZiBhcyBsb3VkIGFuZCAxMGRiXG5cdFx0XHQgKiAgaXMgdHdpY2UgaXMgbG91ZC5cblx0XHRcdCAqICBAdHlwZWRlZiB7RGVjaWJlbHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBEZWNpYmVsczogJ2RiJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIYWxmLXN0ZXAgbm90ZSBpbmNyZW1lbnRzLCBpLmUuIDEyIGlzIGFuIG9jdGF2ZSBhYm92ZSB0aGUgcm9vdC4gYW5kIDEgaXMgYSBoYWxmLXN0ZXAgdXAuXG5cdFx0XHQgKiAgQHR5cGVkZWYge0ludGVydmFsfVxuXHRcdFx0ICovXG5cdCAgICAgICAgSW50ZXJ2YWw6ICdpbnRlcnZhbCcsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQmVhdHMgcGVyIG1pbnV0ZS5cblx0XHRcdCAqICBAdHlwZWRlZiB7QlBNfVxuXHRcdFx0ICovXG5cdCAgICAgICAgQlBNOiAnYnBtJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMC5cblx0XHRcdCAqICBAdHlwZWRlZiB7UG9zaXRpdmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICBQb3NpdGl2ZTogJ3Bvc2l0aXZlJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBHYWluIGlzIHRoZSByYXRpbyBiZXR3ZWVuIGlucHV0IGFuZCBvdXRwdXQgb2YgYSBzaWduYWwuXG5cdFx0XHQgKiAgQSBnYWluIG9mIDAgaXMgdGhlIHNhbWUgYXMgc2lsZW5jaW5nIHRoZSBzaWduYWwuIEEgZ2FpbiBvZlxuXHRcdFx0ICogIDEsIGNhdXNlcyBubyBjaGFuZ2UgdG8gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZWRlZiB7R2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIEdhaW46ICdnYWluJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGNlbnQgaXMgYSBodW5kcmVkdGggb2YgYSBzZW1pdG9uZS5cblx0XHRcdCAqICBAdHlwZWRlZiB7Q2VudHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBDZW50czogJ2NlbnRzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbmdsZSBiZXR3ZWVuIDAgYW5kIDM2MC5cblx0XHRcdCAqICBAdHlwZWRlZiB7RGVncmVlc31cblx0XHRcdCAqL1xuXHQgICAgICAgIERlZ3JlZXM6ICdkZWdyZWVzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIG51bWJlciByZXByZXNlbnRpbmcgYSBtaWRpIG5vdGUuXG5cdFx0XHQgKiAgQHR5cGVkZWYge01JREl9XG5cdFx0XHQgKi9cblx0ICAgICAgICBNSURJOiAnbWlkaScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBjb2xvbi1zZXBhcmF0ZWQgcmVwcmVzZW50YXRpb24gb2YgdGltZSBpbiB0aGUgZm9ybSBvZlxuXHRcdFx0ICogIEJhcnM6QmVhdHM6U2l4dGVlbnRocy5cblx0XHRcdCAqICBAdHlwZWRlZiB7QmFyc0JlYXRzU2l4dGVlbnRoc31cblx0XHRcdCAqL1xuXHQgICAgICAgIEJhcnNCZWF0c1NpeHRlZW50aHM6ICdiYXJzQmVhdHNTaXh0ZWVudGhzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTYW1wbGluZyBpcyB0aGUgcmVkdWN0aW9uIG9mIGEgY29udGludW91cyBzaWduYWwgdG8gYSBkaXNjcmV0ZSBzaWduYWwuXG5cdFx0XHQgKiAgQXVkaW8gaXMgdHlwaWNhbGx5IHNhbXBsZWQgNDQxMDAgdGltZXMgcGVyIHNlY29uZC5cblx0XHRcdCAqICBAdHlwZWRlZiB7U2FtcGxlc31cblx0XHRcdCAqL1xuXHQgICAgICAgIFNhbXBsZXM6ICdzYW1wbGVzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIZXJ0eiBhcmUgYSBmcmVxdWVuY3kgcmVwcmVzZW50YXRpb24gZGVmaW5lZCBhcyBvbmUgY3ljbGUgcGVyIHNlY29uZC5cblx0XHRcdCAqICBAdHlwZWRlZiB7SGVydHp9XG5cdFx0XHQgKi9cblx0ICAgICAgICBIZXJ0ejogJ2hlcnR6Jyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGZyZXF1ZW5jeSByZXByZXNlbnRlZCBieSBhIGxldHRlciBuYW1lLFxuXHRcdFx0ICogIGFjY2lkZW50YWwgYW5kIG9jdGF2ZS4gVGhpcyBzeXN0ZW0gaXMga25vd24gYXNcblx0XHRcdCAqICBbU2NpZW50aWZpYyBQaXRjaCBOb3RhdGlvbl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2NpZW50aWZpY19waXRjaF9ub3RhdGlvbikuXG5cdFx0XHQgKiAgQHR5cGVkZWYge05vdGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICBOb3RlOiAnbm90ZScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgT25lIG1pbGxpc2Vjb25kIGlzIGEgdGhvdXNhbmR0aCBvZiBhIHNlY29uZC5cblx0XHRcdCAqICBAdHlwZWRlZiB7TWlsbGlzZWNvbmRzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgTWlsbGlzZWNvbmRzOiAnbWlsbGlzZWNvbmRzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTZWNvbmRzIGFyZSB0aGUgdGltZSB1bml0IG9mIHRoZSBBdWRpb0NvbnRleHQuIEluIHRoZSBlbmQsXG5cdFx0XHQgKiAgYWxsIHZhbHVlcyBuZWVkIHRvIGJlIGV2YWx1YXRlZCB0byBzZWNvbmRzLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtTZWNvbmRzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgU2Vjb25kczogJ3NlY29uZHMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGR1cmF0aW9uIHJlbGF0aXZlIHRvIGEgbWVhc3VyZS5cblx0XHRcdCAqICAqIFwiNG5cIiA9IHF1YXJ0ZXIgbm90ZVxuXHRcdFx0ICogICogXCIybVwiID0gdHdvIG1lYXN1cmVzXG5cdFx0XHQgKiAgKiBcIjh0XCIgPSBlaWdodGgtbm90ZSB0cmlwbGV0XG5cdFx0XHQgKiAgQHR5cGVkZWYge05vdGF0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgTm90YXRpb246ICdub3RhdGlvbidcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIEFVR01FTlQgVE9ORSdzIFBST1RPVFlQRVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBUaW1lIGludG8gc2Vjb25kcy5cblx0XHQgKlxuXHRcdCAqICBVbmxpa2UgdGhlIG1ldGhvZCB3aGljaCBpdCBvdmVycmlkZXMsIHRoaXMgdGFrZXMgaW50byBhY2NvdW50XG5cdFx0ICogIHRyYW5zcG9ydHRpbWUgYW5kIG11c2ljYWwgbm90YXRpb24uXG5cdFx0ICpcblx0XHQgKiAgVGltZSA6IDEuNDBcblx0XHQgKiAgTm90YXRpb246IDRuIG9yIDFtIG9yIDJ0XG5cdFx0ICogIE5vdyBSZWxhdGl2ZTogKzNuXG5cdFx0ICogIE1hdGg6IDNuKzE2biBvciBldmVuIGNvbXBsaWNhdGVkIGV4cHJlc3Npb25zICgoM24qMikvNiArIDEpXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJuIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcih0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGltZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNVbmRlZih0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5ub3coKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcodGltZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpbWUodGltZSkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aW1lIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGltZS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYSBmcmVxdWVuY3kgcmVwcmVzZW50YXRpb24gaW50byBhIG51bWJlci5cblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fSBmcmVxXG5cdFx0ICogIEByZXR1cm4ge0hlcnR6fSAgICAgIHRoZSBmcmVxdWVuY3kgaW4gaGVydHpcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnRvRnJlcXVlbmN5ID0gZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcihmcmVxKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gZnJlcTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcoZnJlcSkgfHwgVG9uZS5pc1VuZGVmKGZyZXEpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5GcmVxdWVuY3koZnJlcSkudmFsdWVPZigpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoZnJlcSBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZyZXEudG9GcmVxdWVuY3koKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYSB0aW1lIHJlcHJlc2VudGF0aW9uIGludG8gdGlja3MuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWVcblx0XHQgKiAgQHJldHVybiB7VGlja3N9ICB0aGUgdGltZSBpbiB0aWNrc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUudG9UaWNrcyA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIodGltZSkgfHwgVG9uZS5pc1N0cmluZyh0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKS50b1RpY2tzKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzVW5kZWYodGltZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0LnRpY2tzO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGltZSBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRpbWUudG9UaWNrcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGFyYW0gd3JhcHMgdGhlIG5hdGl2ZSBXZWIgQXVkaW8ncyBBdWRpb1BhcmFtIHRvIHByb3ZpZGVcblx0XHQgKiAgICAgICAgIGFkZGl0aW9uYWwgdW5pdCBjb252ZXJzaW9uIGZ1bmN0aW9uYWxpdHkuIEl0IGFsc29cblx0XHQgKiAgICAgICAgIHNlcnZlcyBhcyBhIGJhc2UtY2xhc3MgZm9yIGNsYXNzZXMgd2hpY2ggaGF2ZSBhIHNpbmdsZSxcblx0XHQgKiAgICAgICAgIGF1dG9tYXRhYmxlIHBhcmFtZXRlci5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0gIHtBdWRpb1BhcmFtfSAgcGFyYW0gIFRoZSBwYXJhbWV0ZXIgdG8gd3JhcC5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5UeXBlfSB1bml0cyBUaGUgdW5pdHMgb2YgdGhlIGF1ZGlvIHBhcmFtLlxuXHRcdCAqICBAcGFyYW0gIHtCb29sZWFufSBjb252ZXJ0IElmIHRoZSBwYXJhbSBzaG91bGQgYmUgY29udmVydGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdwYXJhbScsXG5cdCAgICAgICAgICAgICd1bml0cycsXG5cdCAgICAgICAgICAgICdjb252ZXJ0J1xuXHQgICAgICAgIF0sIFRvbmUuUGFyYW0pO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG5hdGl2ZSBwYXJhbWV0ZXIgdG8gY29udHJvbFxuXHRcdFx0ICogIEB0eXBlICB7QXVkaW9QYXJhbX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSB0aGlzLmlucHV0ID0gb3B0aW9ucy5wYXJhbTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdW5pdHMgb2YgdGhlIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlR5cGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnVuaXRzID0gb3B0aW9ucy51bml0cztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBJZiB0aGUgdmFsdWUgc2hvdWxkIGJlIGNvbnZlcnRlZCBvciBub3Rcblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY29udmVydCA9IG9wdGlvbnMuY29udmVydDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUcnVlIGlmIHRoZSBzaWduYWwgdmFsdWUgaXMgYmVpbmcgb3ZlcnJpZGRlbiBieVxuXHRcdFx0ICogIGEgY29ubmVjdGVkIHNpZ25hbC5cblx0XHRcdCAqICBAcmVhZE9ubHlcblx0XHRcdCAqICBAdHlwZSAge2Jvb2xlYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3ZlcnJpZGRlbiA9IGZhbHNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHRpbWVsaW5lIHdoaWNoIHRyYWNrcyBhbGwgb2YgdGhlIGF1dG9tYXRpb25zLlxuXHRcdFx0ICogQHR5cGUge1RvbmUuVGltZWxpbmV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbmV3IFRvbmUuVGltZWxpbmUoMTAwMCk7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKG9wdGlvbnMudmFsdWUpICYmIHRoaXMuX3BhcmFtKSB7XG5cdCAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhcmFtLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuRGVmYXVsdCxcblx0ICAgICAgICAnY29udmVydCc6IHRydWUsXG5cdCAgICAgICAgJ3BhcmFtJzogdW5kZWZpbmVkXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QYXJhbSNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJhbS5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90b1VuaXRzKHRoaXMuZ2V0VmFsdWVBdFRpbWUobm93KSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9pbml0aWFsVmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgICAgICB0aGlzLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLnNldFZhbHVlQXRUaW1lKHZhbHVlLCB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbmltdW0gb3V0cHV0IHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXJcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QYXJhbSNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJhbS5wcm90b3R5cGUsICdtaW5WYWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5UaW1lIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5GcmVxdWVuY3kgfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLk5vcm1hbFJhbmdlIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5Qb3NpdGl2ZSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuQlBNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuQXVkaW9SYW5nZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5EZWNpYmVscykge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIC1JbmZpbml0eTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJhbS5taW5WYWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gb3V0cHV0IHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXJcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QYXJhbSNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJhbS5wcm90b3R5cGUsICdtYXhWYWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuQXVkaW9SYW5nZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFyYW0ubWF4VmFsdWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IHRoZSBnaXZlbiB2YWx1ZSBmcm9tIHRoZSB0eXBlIHNwZWNpZmllZCBieSBUb25lLlBhcmFtLnVuaXRzXG5cdFx0ICogIGludG8gdGhlIGRlc3RpbmF0aW9uIHZhbHVlIChzdWNoIGFzIEdhaW4gb3IgRnJlcXVlbmN5KS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtICB7Kn0gdmFsIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG5cdFx0ICogIEByZXR1cm4ge251bWJlcn0gICAgIHRoZSBudW1iZXIgd2hpY2ggdGhlIHZhbHVlIHNob3VsZCBiZSBzZXQgdG9cblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLl9mcm9tVW5pdHMgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgaWYgKCh0aGlzLmNvbnZlcnQgfHwgVG9uZS5pc1VuZGVmKHRoaXMuY29udmVydCkpICYmICF0aGlzLm92ZXJyaWRkZW4pIHtcblx0ICAgICAgICAgICAgc3dpdGNoICh0aGlzLnVuaXRzKSB7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLlRpbWU6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b1NlY29uZHModmFsKTtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuRnJlcXVlbmN5OlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9GcmVxdWVuY3kodmFsKTtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuRGVjaWJlbHM6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5kYlRvR2Fpbih2YWwpO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZTpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh2YWwsIDApLCAxKTtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuQXVkaW9SYW5nZTpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh2YWwsIC0xKSwgMSk7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLlBvc2l0aXZlOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KHZhbCwgMCk7XG5cdCAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ29udmVydCB0aGUgcGFyYW1ldGVycyB2YWx1ZSBpbnRvIHRoZSB1bml0cyBzcGVjaWZpZWQgYnkgVG9uZS5QYXJhbS51bml0cy5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwYXJhbSAge251bWJlcn0gdmFsIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG5cdFx0ICogQHJldHVybiB7bnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX3RvVW5pdHMgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY29udmVydCB8fCBUb25lLmlzVW5kZWYodGhpcy5jb252ZXJ0KSkge1xuXHQgICAgICAgICAgICBzd2l0Y2ggKHRoaXMudW5pdHMpIHtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuRGVjaWJlbHM6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5nYWluVG9EYih2YWwpO1xuXHQgICAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgbWluaW11bSBvdXRwdXQgdmFsdWVcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLl9taW5PdXRwdXQgPSAwLjAwMDAxO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBldmVudCB0eXBlc1xuXHRcdCAqICBAZW51bSB7U3RyaW5nfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZSA9IHtcblx0ICAgICAgICBMaW5lYXI6ICdsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZScsXG5cdCAgICAgICAgRXhwb25lbnRpYWw6ICdleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lJyxcblx0ICAgICAgICBUYXJnZXQ6ICdzZXRUYXJnZXRBdFRpbWUnLFxuXHQgICAgICAgIFNldFZhbHVlOiAnc2V0VmFsdWVBdFRpbWUnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhIHBhcmFtZXRlciB2YWx1ZSBjaGFuZ2UgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7Kn1cdHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQgdGhlIHNpZ25hbC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSAgdGltZSBUaGUgdGltZSB3aGVuIHRoZSBjaGFuZ2Ugc2hvdWxkIG9jY3VyLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc2V0IHRoZSBmcmVxdWVuY3kgdG8gXCJHNFwiIGluIGV4YWN0bHkgMSBzZWNvbmQgZnJvbSBub3cuXG5cdFx0ICogZnJlcS5zZXRWYWx1ZUF0VGltZShcIkc0XCIsIFwiKzFcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5zZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5TZXRWYWx1ZSxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWUsXG5cdCAgICAgICAgICAgICd0aW1lJzogdGltZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLnNldFZhbHVlQXRUaW1lKHZhbHVlLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBzaWduYWxzIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLiBTdWJzZXF1ZW50IHNjaGVkdWxpbmdcblx0XHQgKiAgbWF5IGludmFsaWRhdGUgdGhlIHJldHVybmVkIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWUgV2hlbiB0byBnZXQgdGhlIHZhbHVlXG5cdFx0ICogIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgYWZ0ZXIgPSB0aGlzLl9ldmVudHMuZ2V0QWZ0ZXIodGltZSk7XG5cdCAgICAgICAgdmFyIGJlZm9yZSA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgdmFyIGluaXRpYWxWYWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyh0aGlzLl9pbml0aWFsVmFsdWUsIHRoaXMuX3BhcmFtLmRlZmF1bHRWYWx1ZSk7XG5cdCAgICAgICAgdmFyIHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXHQgICAgICAgIC8vaWYgaXQgd2FzIHNldCBieVxuXHQgICAgICAgIGlmIChiZWZvcmUgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSBpbml0aWFsVmFsdWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChiZWZvcmUudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5UYXJnZXQpIHtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzID0gdGhpcy5fZXZlbnRzLmdldEJlZm9yZShiZWZvcmUudGltZSk7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c1ZhbDtcblx0ICAgICAgICAgICAgaWYgKHByZXZpb3VzID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICBwcmV2aW91c1ZhbCA9IGluaXRpYWxWYWx1ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsID0gcHJldmlvdXMudmFsdWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9leHBvbmVudGlhbEFwcHJvYWNoKGJlZm9yZS50aW1lLCBwcmV2aW91c1ZhbCwgYmVmb3JlLnZhbHVlLCBiZWZvcmUuY29uc3RhbnQsIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYWZ0ZXIgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSBiZWZvcmUudmFsdWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChhZnRlci50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkxpbmVhcikge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2xpbmVhckludGVycG9sYXRlKGJlZm9yZS50aW1lLCBiZWZvcmUudmFsdWUsIGFmdGVyLnRpbWUsIGFmdGVyLnZhbHVlLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGFmdGVyLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuRXhwb25lbnRpYWwpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9leHBvbmVudGlhbEludGVycG9sYXRlKGJlZm9yZS50aW1lLCBiZWZvcmUudmFsdWUsIGFmdGVyLnRpbWUsIGFmdGVyLnZhbHVlLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IGJlZm9yZS52YWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHZhbHVlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDcmVhdGVzIGEgc2NoZWR1bGUgcG9pbnQgd2l0aCB0aGUgY3VycmVudCB2YWx1ZSBhdCB0aGUgY3VycmVudCB0aW1lLlxuXHRcdCAqICBUaGlzIGlzIHVzZWZ1bCBmb3IgY3JlYXRpbmcgYW4gYXV0b21hdGlvbiBhbmNob3IgcG9pbnQgaW4gb3JkZXIgdG9cblx0XHQgKiAgc2NoZWR1bGUgY2hhbmdlcyBmcm9tIHRoZSBjdXJyZW50IHZhbHVlLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gbm93IChPcHRpb25hbGx5KSBwYXNzIHRoZSBub3cgdmFsdWUgaW4uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5zZXRSYW1wUG9pbnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgY3VycmVudFZhbCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICAgICAgdGhpcy5jYW5jZWxBbmRIb2xkQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmIChjdXJyZW50VmFsID09PSAwKSB7XG5cdCAgICAgICAgICAgIGN1cnJlbnRWYWwgPSB0aGlzLl9taW5PdXRwdXQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuc2V0VmFsdWVBdFRpbWUodGhpcy5fdG9Vbml0cyhjdXJyZW50VmFsKSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhIGxpbmVhciBjb250aW51b3VzIGNoYW5nZSBpbiBwYXJhbWV0ZXIgdmFsdWUgZnJvbSB0aGVcblx0XHQgKiAgcHJldmlvdXMgc2NoZWR1bGVkIHBhcmFtZXRlciB2YWx1ZSB0byB0aGUgZ2l2ZW4gdmFsdWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBlbmRUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5kVGltZSkge1xuXHQgICAgICAgIHZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICBlbmRUaW1lID0gdGhpcy50b1NlY29uZHMoZW5kVGltZSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5MaW5lYXIsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlLFxuXHQgICAgICAgICAgICAndGltZSc6IGVuZFRpbWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgZW5kVGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhbiBleHBvbmVudGlhbCBjb250aW51b3VzIGNoYW5nZSBpbiBwYXJhbWV0ZXIgdmFsdWUgZnJvbVxuXHRcdCAqICB0aGUgcHJldmlvdXMgc2NoZWR1bGVkIHBhcmFtZXRlciB2YWx1ZSB0byB0aGUgZ2l2ZW4gdmFsdWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBlbmRUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCBlbmRUaW1lKSB7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIHZhbHVlID0gTWF0aC5tYXgodGhpcy5fbWluT3V0cHV0LCB2YWx1ZSk7XG5cdCAgICAgICAgZW5kVGltZSA9IHRoaXMudG9TZWNvbmRzKGVuZFRpbWUpO1xuXHQgICAgICAgIC8vc3RvcmUgdGhlIGV2ZW50XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5FeHBvbmVudGlhbCxcblx0ICAgICAgICAgICAgJ3RpbWUnOiBlbmRUaW1lLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUodmFsdWUsIGVuZFRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYW4gZXhwb25lbnRpYWwgY29udGludW91cyBjaGFuZ2UgaW4gcGFyYW1ldGVyIHZhbHVlIGZyb21cblx0XHQgKiAgdGhlIGN1cnJlbnQgdGltZSBhbmQgY3VycmVudCB2YWx1ZSB0byB0aGUgZ2l2ZW4gdmFsdWUgb3ZlciB0aGVcblx0XHQgKiAgZHVyYXRpb24gb2YgdGhlIHJhbXBUaW1lLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWUgICBUaGUgdmFsdWUgdG8gcmFtcCB0by5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gcmFtcFRpbWUgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0byByYW1wIGZyb20gaXQncyBjdXJyZW50IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX1cdFtzdGFydFRpbWU9bm93XSBcdFdoZW4gdGhlIHJhbXAgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vZXhwb25lbnRpYWxseSByYW1wIHRvIHRoZSB2YWx1ZSAyIG92ZXIgNCBzZWNvbmRzLlxuXHRcdCAqIHNpZ25hbC5leHBvbmVudGlhbFJhbXBUbygyLCA0KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmV4cG9uZW50aWFsUmFtcFRvID0gZnVuY3Rpb24gKHZhbHVlLCByYW1wVGltZSwgc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gdGhpcy50b1NlY29uZHMoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLnNldFJhbXBQb2ludChzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgc3RhcnRUaW1lICsgdGhpcy50b1NlY29uZHMocmFtcFRpbWUpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGFuIGxpbmVhciBjb250aW51b3VzIGNoYW5nZSBpbiBwYXJhbWV0ZXIgdmFsdWUgZnJvbVxuXHRcdCAqICB0aGUgY3VycmVudCB0aW1lIGFuZCBjdXJyZW50IHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZSBvdmVyIHRoZVxuXHRcdCAqICBkdXJhdGlvbiBvZiB0aGUgcmFtcFRpbWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byByYW1wIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSByYW1wVGltZSB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHRvIHJhbXAgZnJvbSBpdCdzIGN1cnJlbnQgdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfVx0W3N0YXJ0VGltZT1ub3ddIFx0V2hlbiB0aGUgcmFtcCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9saW5lYXJseSByYW1wIHRvIHRoZSB2YWx1ZSA0IG92ZXIgMyBzZWNvbmRzLlxuXHRcdCAqIHNpZ25hbC5saW5lYXJSYW1wVG8oNCwgMyk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5saW5lYXJSYW1wVG8gPSBmdW5jdGlvbiAodmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0UmFtcFBvaW50KHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgc3RhcnRUaW1lICsgdGhpcy50b1NlY29uZHMocmFtcFRpbWUpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgZXhwb25lbnRpYWxseSBhcHByb2FjaGluZyB0aGUgdGFyZ2V0IHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLiBTaW5jZSBpdFxuXHRcdCAqICBpcyBhbiBleHBvbmVudGlhbCBhcHByb2FjaCBpdCB3aWxsIGNvbnRpbnVlIGFwcHJvYWNoaW5nIGFmdGVyIHRoZSByYW1wIGR1cmF0aW9uLiBUaGVcblx0XHQgKiAgcmFtcFRpbWUgaXMgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0byByZWFjaCBvdmVyIDk5JSBvZiB0aGUgd2F5IHRvd2FyZHMgdGhlIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlICAgVGhlIHZhbHVlIHRvIHJhbXAgdG8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHJhbXBUaW1lIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdG8gcmFtcCBmcm9tIGl0J3MgY3VycmVudCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9XHRbc3RhcnRUaW1lPW5vd10gXHRXaGVuIHRoZSByYW1wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2V4cG9uZW50aWFsbHkgcmFtcCB0byB0aGUgdmFsdWUgMiBvdmVyIDQgc2Vjb25kcy5cblx0XHQgKiBzaWduYWwuZXhwb25lbnRpYWxSYW1wVG8oMiwgNCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS50YXJnZXRSYW1wVG8gPSBmdW5jdGlvbiAodmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0UmFtcFBvaW50KHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5leHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUodmFsdWUsIHN0YXJ0VGltZSwgcmFtcFRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCBleHBvbmVudGlhbGx5IGFwcHJvYWNoaW5nIHRoZSB0YXJnZXQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuIFNpbmNlIGl0XG5cdFx0ICogIGlzIGFuIGV4cG9uZW50aWFsIGFwcHJvYWNoIGl0IHdpbGwgY29udGludWUgYXBwcm9hY2hpbmcgYWZ0ZXIgdGhlIHJhbXAgZHVyYXRpb24uIFRoZVxuXHRcdCAqICByYW1wVGltZSBpcyB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRvIHJlYWNoIG92ZXIgOTklIG9mIHRoZSB3YXkgdG93YXJkcyB0aGUgdmFsdWUuIFRoaXMgbWV0aG9kc1xuXHRcdCAqICBpcyBzaW1pbGFyIHRvIHNldFRhcmdldEF0VGltZSBleGNlcHQgdGhlIHRoaXJkIGFyZ3VtZW50IGlzIGEgdGltZSBpbnN0ZWFkIG9mIGEgJ3RpbWVDb25zdGFudCdcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byByYW1wIHRvLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9XHR0aW1lIFx0V2hlbiB0aGUgcmFtcCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHJhbXBUaW1lIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdG8gcmFtcCBmcm9tIGl0J3MgY3VycmVudCB2YWx1ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vZXhwb25lbnRpYWxseSByYW1wIHRvIHRoZSB2YWx1ZSAyIG92ZXIgNCBzZWNvbmRzLlxuXHRcdCAqIHNpZ25hbC5leHBvbmVudGlhbFJhbXBUbygyLCA0KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSwgcmFtcFRpbWUpIHtcblx0ICAgICAgICB2YXIgdGltZUNvbnN0YW50ID0gTWF0aC5sb2codGhpcy50b1NlY29uZHMocmFtcFRpbWUpICsgMSkgLyBNYXRoLmxvZygyMDApO1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5zZXRUYXJnZXRBdFRpbWUodmFsdWUsIHRpbWUsIHRpbWVDb25zdGFudCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IGV4cG9uZW50aWFsbHkgYXBwcm9hY2hpbmcgdGhlIHRhcmdldCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZSB3aXRoXG5cdFx0ICogIGEgcmF0ZSBoYXZpbmcgdGhlIGdpdmVuIHRpbWUgY29uc3RhbnQuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdGltZUNvbnN0YW50XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5zZXRUYXJnZXRBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHN0YXJ0VGltZSwgdGltZUNvbnN0YW50KSB7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIC8vIFRoZSB2YWx1ZSB3aWxsIG5ldmVyIGJlIGFibGUgdG8gYXBwcm9hY2ggd2l0aG91dCB0aW1lQ29uc3RhbnQgPiAwLlxuXHQgICAgICAgIGlmICh0aW1lQ29uc3RhbnQgPD0gMCkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RpbWVDb25zdGFudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5UYXJnZXQsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlLFxuXHQgICAgICAgICAgICAndGltZSc6IHN0YXJ0VGltZSxcblx0ICAgICAgICAgICAgJ2NvbnN0YW50JzogdGltZUNvbnN0YW50XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uc2V0VGFyZ2V0QXRUaW1lKHZhbHVlLCBzdGFydFRpbWUsIHRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldHMgYW4gYXJyYXkgb2YgYXJiaXRyYXJ5IHBhcmFtZXRlciB2YWx1ZXMgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgZm9yIHRoZSBnaXZlbiBkdXJhdGlvbi5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge0FycmF5fSB2YWx1ZXNcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBkdXJhdGlvblxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbc2NhbGluZz0xXSBJZiB0aGUgdmFsdWVzIGluIHRoZSBjdXJ2ZSBzaG91bGQgYmUgc2NhbGVkIGJ5IHNvbWUgdmFsdWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnNldFZhbHVlQ3VydmVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWVzLCBzdGFydFRpbWUsIGR1cmF0aW9uLCBzY2FsaW5nKSB7XG5cdCAgICAgICAgc2NhbGluZyA9IFRvbmUuZGVmYXVsdEFyZyhzY2FsaW5nLCAxKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0VmFsdWVBdFRpbWUodmFsdWVzWzBdICogc2NhbGluZywgc3RhcnRUaW1lKTtcblx0ICAgICAgICB2YXIgc2VnVGltZSA9IGR1cmF0aW9uIC8gKHZhbHVlcy5sZW5ndGggLSAxKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlc1tpXSAqIHNjYWxpbmcsIHN0YXJ0VGltZSArIGkgKiBzZWdUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbHMgYWxsIHNjaGVkdWxlZCBwYXJhbWV0ZXIgY2hhbmdlcyB3aXRoIHRpbWVzIGdyZWF0ZXIgdGhhbiBvclxuXHRcdCAqICBlcXVhbCB0byBzdGFydFRpbWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuY2FuY2VsU2NoZWR1bGVkVmFsdWVzID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoaXMgaXMgc2ltaWxhciB0byBbY2FuY2VsU2NoZWR1bGVkVmFsdWVzXSgjY2FuY2VsU2NoZWR1bGVkVmFsdWVzKSBleGNlcHRcblx0XHQgKiAgaXQgaG9sZHMgdGhlIGF1dG9tYXRlZCB2YWx1ZSBhdCB0aW1lIHVudGlsIHRoZSBuZXh0IGF1dG9tYXRlZCBldmVudC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuY2FuY2VsQW5kSG9sZEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIHZhbHVlQXRUaW1lID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICAvL2lmIHRoZXJlIGlzIGFuIGV2ZW50IGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgICAgLy9hbmQgdGhhdCBldmVuIGlzIG5vdCBhIFwic2V0XCJcblx0ICAgICAgICB2YXIgYmVmb3JlID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICB2YXIgYWZ0ZXIgPSB0aGlzLl9ldmVudHMuZ2V0QWZ0ZXIodGltZSk7XG5cdCAgICAgICAgaWYgKGJlZm9yZSAmJiBiZWZvcmUudGltZSA9PT0gdGltZSkge1xuXHQgICAgICAgICAgICAvL3JlbW92ZSBldmVyeXRoaW5nIGFmdGVyXG5cdCAgICAgICAgICAgIGlmIChhZnRlcikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbChhZnRlci50aW1lKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5jYW5jZWwodGltZSArIDAuMDAwMDAxKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAoYWZ0ZXIpIHtcblx0ICAgICAgICAgICAgLy9jYW5jZWwgdGhlIG5leHQgZXZlbnQocylcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbChhZnRlci50aW1lKTtcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLl9wYXJhbS5jYW5jZWxBbmRIb2xkQXRUaW1lKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9wYXJhbS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKGFmdGVyLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuTGluZWFyKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlQXRUaW1lLCB0aW1lKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5MaW5lYXIsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlQXRUaW1lLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAndGltZSc6IHRpbWVcblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChhZnRlci50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkV4cG9uZW50aWFsKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUodmFsdWVBdFRpbWUsIHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkV4cG9uZW50aWFsLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZUF0VGltZSxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3RpbWUnOiB0aW1lXG5cdCAgICAgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9zZXQgdGhlIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5TZXRWYWx1ZSxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVBdFRpbWUsXG5cdCAgICAgICAgICAgICd0aW1lJzogdGltZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIGlmICh0aGlzLl9wYXJhbS5jYW5jZWxBbmRIb2xkQXRUaW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUodGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFyYW0uc2V0VmFsdWVBdFRpbWUodmFsdWVBdFRpbWUsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmFtcHMgdG8gdGhlIGdpdmVuIHZhbHVlIG92ZXIgdGhlIGR1cmF0aW9uIG9mIHRoZSByYW1wVGltZS5cblx0XHQgKiAgQXV0b21hdGljYWxseSBzZWxlY3RzIHRoZSBiZXN0IHJhbXAgdHlwZSAoZXhwb25lbnRpYWwgb3IgbGluZWFyKVxuXHRcdCAqICBkZXBlbmRpbmcgb24gdGhlIGB1bml0c2Agb2YgdGhlIHNpZ25hbFxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gcmFtcFRpbWUgXHRUaGUgdGltZSB0aGF0IGl0IHRha2VzIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdG8gcmFtcCBmcm9tIGl0J3MgY3VycmVudCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9XHRbc3RhcnRUaW1lPW5vd10gXHRXaGVuIHRoZSByYW1wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3JhbXAgdG8gdGhlIHZhbHVlIGVpdGhlciBsaW5lYXJseSBvciBleHBvbmVudGlhbGx5XG5cdFx0ICogLy9kZXBlbmRpbmcgb24gdGhlIFwidW5pdHNcIiB2YWx1ZSBvZiB0aGUgc2lnbmFsXG5cdFx0ICogc2lnbmFsLnJhbXBUbygwLCAxMCk7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zY2hlZHVsZSBpdCB0byByYW1wIHN0YXJ0aW5nIGF0IGEgc3BlY2lmaWMgdGltZVxuXHRcdCAqIHNpZ25hbC5yYW1wVG8oMCwgMTAsIDUpXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5yYW1wVG8gPSBmdW5jdGlvbiAodmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpIHtcblx0ICAgICAgICByYW1wVGltZSA9IFRvbmUuZGVmYXVsdEFyZyhyYW1wVGltZSwgMC4xKTtcblx0ICAgICAgICBpZiAodGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkZyZXF1ZW5jeSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuQlBNIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5EZWNpYmVscykge1xuXHQgICAgICAgICAgICB0aGlzLmV4cG9uZW50aWFsUmFtcFRvKHZhbHVlLCByYW1wVGltZSwgc3RhcnRUaW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUbyh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEFVVE9NQVRJT04gQ1VSVkUgQ0FMQ1VMQVRJT05TXG5cdCAgICAvL1x0TUlUIExpY2Vuc2UsIGNvcHlyaWdodCAoYykgMjAxNCBKb3JkYW4gU2FudGVsbFxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBDYWxjdWxhdGVzIHRoZSB0aGUgdmFsdWUgYWxvbmcgdGhlIGN1cnZlIHByb2R1Y2VkIGJ5IHNldFRhcmdldEF0VGltZVxuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX2V4cG9uZW50aWFsQXBwcm9hY2ggPSBmdW5jdGlvbiAodDAsIHYwLCB2MSwgdGltZUNvbnN0YW50LCB0KSB7XG5cdCAgICAgICAgcmV0dXJuIHYxICsgKHYwIC0gdjEpICogTWF0aC5leHAoLSh0IC0gdDApIC8gdGltZUNvbnN0YW50KTtcblx0ICAgIH07XG5cdCAgICAvLyBDYWxjdWxhdGVzIHRoZSB0aGUgdmFsdWUgYWxvbmcgdGhlIGN1cnZlIHByb2R1Y2VkIGJ5IGxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fbGluZWFySW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAodDAsIHYwLCB0MSwgdjEsIHQpIHtcblx0ICAgICAgICByZXR1cm4gdjAgKyAodjEgLSB2MCkgKiAoKHQgLSB0MCkgLyAodDEgLSB0MCkpO1xuXHQgICAgfTtcblx0ICAgIC8vIENhbGN1bGF0ZXMgdGhlIHRoZSB2YWx1ZSBhbG9uZyB0aGUgY3VydmUgcHJvZHVjZWQgYnkgZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZVxuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX2V4cG9uZW50aWFsSW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAodDAsIHYwLCB0MSwgdjEsIHQpIHtcblx0ICAgICAgICByZXR1cm4gdjAgKiBNYXRoLnBvdyh2MSAvIHYwLCAodCAtIHQwKSAvICh0MSAtIHQwKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGFyYW07XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHBlciBhcm91bmQgdGhlIE9mZmxpbmVBdWRpb0NvbnRleHRcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQ29udGV4dH1cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgY2hhbm5lbHMgIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgdG8gcmVuZGVyXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIGR1cmF0aW9uICBUaGUgZHVyYXRpb24gdG8gcmVuZGVyIGluIHNhbXBsZXNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IHNhbXBsZVJhdGUgdGhlIHNhbXBsZSByYXRlIHRvIHJlbmRlciBhdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5PZmZsaW5lQ29udGV4dCA9IGZ1bmN0aW9uIChjaGFubmVscywgZHVyYXRpb24sIHNhbXBsZVJhdGUpIHtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb2ZmbGluZSBjb250ZXh0XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSAge09mZmxpbmVBdWRpb0NvbnRleHR9XG5cdFx0XHQgKi9cblx0ICAgICAgICB2YXIgb2ZmbGluZUNvbnRleHQgPSBuZXcgT2ZmbGluZUF1ZGlvQ29udGV4dChjaGFubmVscywgZHVyYXRpb24gKiBzYW1wbGVSYXRlLCBzYW1wbGVSYXRlKTtcblx0ICAgICAgICAvL3dyYXAgdGhlIG1ldGhvZHMvbWVtYmVyc1xuXHQgICAgICAgIFRvbmUuQ29udGV4dC5jYWxsKHRoaXMsIHtcblx0ICAgICAgICAgICAgJ2NvbnRleHQnOiBvZmZsaW5lQ29udGV4dCxcblx0ICAgICAgICAgICAgJ2Nsb2NrU291cmNlJzogJ29mZmxpbmUnLFxuXHQgICAgICAgICAgICAnbG9va0FoZWFkJzogMCxcblx0ICAgICAgICAgICAgJ3VwZGF0ZUludGVydmFsJzogMTI4IC8gc2FtcGxlUmF0ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgcHJpdmF0ZSByZWZlcmVuY2UgdG8gdGhlIGR1cmF0aW9uXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb247XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQW4gYXJ0aWZpY2lhbCBjbG9jayBzb3VyY2Vcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgPSAwO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuT2ZmbGluZUNvbnRleHQsIFRvbmUuQ29udGV4dCk7XG5cdCAgICAvKipcblx0XHQgKiAgT3ZlcnJpZGUgdGhlIG5vdyBtZXRob2QgdG8gcG9pbnQgdG8gdGhlIGludGVybmFsIGNsb2NrIHRpbWVcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuT2ZmbGluZUNvbnRleHQucHJvdG90eXBlLm5vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFRpbWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbmRlciB0aGUgb3V0cHV0IG9mIHRoZSBPZmZsaW5lQ29udGV4dFxuXHRcdCAqICBAcmV0dXJuICB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuT2ZmbGluZUNvbnRleHQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB3aGlsZSAodGhpcy5fZHVyYXRpb24gLSB0aGlzLl9jdXJyZW50VGltZSA+PSAwKSB7XG5cdCAgICAgICAgICAgIC8vaW52b2tlIGFsbCB0aGUgY2FsbGJhY2tzIG9uIHRoYXQgdGltZVxuXHQgICAgICAgICAgICB0aGlzLmVtaXQoJ3RpY2snKTtcblx0ICAgICAgICAgICAgLy9pbmNyZW1lbnQgdGhlIGNsb2NrXG5cdCAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IHRoaXMuYmxvY2tUaW1lO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dC5zdGFydFJlbmRlcmluZygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbG9zZSB0aGUgY29udGV4dFxuXHRcdCAqICBAcmV0dXJuICB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuT2ZmbGluZUNvbnRleHQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2NvbnRleHQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5PZmZsaW5lQ29udGV4dDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuXHQgICAgICAgIHZhciBpc01vYmlsZVNhZmFyaSA9IHVhLmluY2x1ZGVzKCdzYWZhcmknKSAmJiAhdWEuaW5jbHVkZXMoJ2Nocm9tZScpICYmIHVhLmluY2x1ZGVzKCdtb2JpbGUnKTtcblx0ICAgICAgICBpZiAoaXNNb2JpbGVTYWZhcmkpIHtcblx0ICAgICAgICAgICAgLy9tb2JpbGUgc2FmYXJpIGhhcyBhIGJpemFycmUgYnVnIHdpdGggdGhlIG9mZmxpbmUgY29udGV4dFxuXHQgICAgICAgICAgICAvL3doZW4gYSBCdWZmZXJTb3VyY2VOb2RlIGlzIHN0YXJ0ZWQsIGl0IHN0YXJ0cyB0aGUgb2ZmbGluZSBjb250ZXh0XG5cdCAgICAgICAgICAgIC8vXG5cdCAgICAgICAgICAgIC8vZGVmZXJyaW5nIGFsbCBCdWZmZXJTb3VyY2Ugc3RhcnRzIHRpbGwgdGhlIGxhc3QgcG9zc2libGUgbW9tZW50XG5cdCAgICAgICAgICAgIC8vcmVkdWNlcyB0aGUgbGlrZWxpaG9vZCBvZiB0aGlzIGhhcHBlbmluZ1xuXHQgICAgICAgICAgICBUb25lLk9mZmxpbmVDb250ZXh0LnByb3RvdHlwZS5jcmVhdGVCdWZmZXJTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYnVmZmVyU291cmNlID0gdGhpcy5fY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcblx0ICAgICAgICAgICAgICAgIHZhciBfbmF0aXZlX3N0YXJ0ID0gYnVmZmVyU291cmNlLnN0YXJ0O1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyU291cmNlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBfbmF0aXZlX3N0YXJ0LmNhbGwoYnVmZmVyU291cmNlLCB0aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIDApO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclNvdXJjZTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIHRoaW4gd3JhcHBlciBhcm91bmQgdGhlIE5hdGl2ZSBXZWIgQXVkaW8gR2Fpbk5vZGUuXG5cdFx0ICogICAgICAgICBUaGUgR2Fpbk5vZGUgaXMgYSBiYXNpYyBidWlsZGluZyBibG9jayBvZiB0aGUgV2ViIEF1ZGlvXG5cdFx0ICogICAgICAgICBBUEkgYW5kIGlzIHVzZWZ1bCBmb3Igcm91dGluZyBhdWRpbyBhbmQgYWRqdXN0aW5nIGdhaW5zLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyPX0gIGdhaW4gIFRoZSBpbml0aWFsIGdhaW4gb2YgdGhlIEdhaW5Ob2RlXG5cdFx0ICogIEBwYXJhbSB7VG9uZS5UeXBlPX0gdW5pdHMgVGhlIHVuaXRzIG9mIHRoZSBnYWluIHBhcmFtZXRlci5cblx0XHQgKi9cblx0ICAgIFRvbmUuR2FpbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdnYWluJyxcblx0ICAgICAgICAgICAgJ3VuaXRzJ1xuXHQgICAgICAgIF0sIFRvbmUuR2Fpbik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgR2Fpbk5vZGVcblx0XHRcdCAqICBAdHlwZSAge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLl9nYWluTm9kZSA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gcGFyYW1ldGVyIG9mIHRoZSBnYWluIG5vZGUuXG5cdFx0XHQgKiAgQHR5cGUge0dhaW59XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5nYWluID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9nYWluTm9kZS5nYWluLFxuXHQgICAgICAgICAgICAndW5pdHMnOiBvcHRpb25zLnVuaXRzLFxuXHQgICAgICAgICAgICAndmFsdWUnOiBvcHRpb25zLmdhaW4sXG5cdCAgICAgICAgICAgICdjb252ZXJ0Jzogb3B0aW9ucy5jb252ZXJ0XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2dhaW4nKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdhaW4sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HYWluLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdnYWluJzogMSxcblx0ICAgICAgICAnY29udmVydCc6IHRydWVcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkdhaW59ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdhaW4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdnYWluJyk7XG5cdCAgICAgICAgdGhpcy5nYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmdhaW4gPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdhaW47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCAmJiAhQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVDb25zdGFudFNvdXJjZSkge1xuXHQgICAgICAgIHZhciBDb25zdGFudFNvdXJjZU5vZGUgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZmZXIoMSwgMTI4LCBjb250ZXh0LnNhbXBsZVJhdGUpO1xuXHQgICAgICAgICAgICB2YXIgYXJyID0gYnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgYXJyW2ldID0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UuY2hhbm5lbENvdW50ID0gMTtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UuYnVmZmVyID0gYnVmZmVyO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UubG9vcCA9IHRydWU7XG5cdCAgICAgICAgICAgIHZhciBnYWluTm9kZSA9IHRoaXMuX291dHB1dCA9IGNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHQgICAgICAgICAgICB0aGlzLm9mZnNldCA9IGdhaW5Ob2RlLmdhaW47XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5jb25uZWN0KGdhaW5Ob2RlKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIENvbnN0YW50U291cmNlTm9kZS5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2Uuc3RhcnQodGltZSk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQ29uc3RhbnRTb3VyY2VOb2RlLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLnN0b3AodGltZSk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQ29uc3RhbnRTb3VyY2VOb2RlLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXQuY29ubmVjdC5hcHBseSh0aGlzLl9vdXRwdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQ29uc3RhbnRTb3VyY2VOb2RlLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXQuZGlzY29ubmVjdC5hcHBseSh0aGlzLl9vdXRwdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVDb25zdGFudFNvdXJjZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdGFudFNvdXJjZU5vZGUodGhpcyk7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLmNyZWF0ZUNvbnN0YW50U291cmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50U291cmNlTm9kZSh0aGlzKTtcblx0ICAgICAgICB9O1xuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgc2lnbmFsIGlzIGFuIGF1ZGlvLXJhdGUgdmFsdWUuIFRvbmUuU2lnbmFsIGlzIGEgY29yZSBjb21wb25lbnQgb2YgdGhlIGxpYnJhcnkuXG5cdFx0ICogICAgICAgICAgVW5saWtlIGEgbnVtYmVyLCBTaWduYWxzIGNhbiBiZSBzY2hlZHVsZWQgd2l0aCBzYW1wbGUtbGV2ZWwgYWNjdXJhY3kuIFRvbmUuU2lnbmFsXG5cdFx0ICogICAgICAgICAgaGFzIGFsbCBvZiB0aGUgbWV0aG9kcyBhdmFpbGFibGUgdG8gbmF0aXZlIFdlYiBBdWRpb1xuXHRcdCAqICAgICAgICAgIFtBdWRpb1BhcmFtXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS1hdWRpb3BhcmFtLWludGVyZmFjZSlcblx0XHQgKiAgICAgICAgICBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgY29udmVuaWVuY2VzLiBSZWFkIG1vcmUgYWJvdXQgd29ya2luZyB3aXRoIHNpZ25hbHNcblx0XHQgKiAgICAgICAgICBbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL1RvbmVqcy9Ub25lLmpzL3dpa2kvU2lnbmFscykuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlBhcmFtfVxuXHRcdCAqICBAcGFyYW0ge051bWJlcnxBdWRpb1BhcmFtfSBbdmFsdWVdIEluaXRpYWwgdmFsdWUgb2YgdGhlIHNpZ25hbC4gSWYgYW4gQXVkaW9QYXJhbVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHBhc3NlZCBpbiwgdGhhdCBwYXJhbWV0ZXIgd2lsbCBiZSB3cmFwcGVkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNvbnRyb2xsZWQgYnkgdGhlIFNpZ25hbC5cblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd9IFt1bml0cz1OdW1iZXJdIHVuaXQgVGhlIHVuaXRzIHRoZSBzaWduYWwgaXMgaW4uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbCgxMCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd2YWx1ZScsXG5cdCAgICAgICAgICAgICd1bml0cydcblx0ICAgICAgICBdLCBUb25lLlNpZ25hbCk7XG5cdCAgICAgICAgVG9uZS5QYXJhbS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0KiBXaGVuIGEgc2lnbmFsIGlzIGNvbm5lY3RlZCB0byBhbm90aGVyIHNpZ25hbCBvciBhdWRpbyBwYXJhbSxcblx0XHRcdCogdGhpcyBzaWduYWwgYmVjb21lcyBhIHByb3h5IGZvciBpdFxuXHRcdFx0KiBAdHlwZSB7QXJyYXl9XG5cdFx0XHQqIEBwcml2YXRlXG5cdFx0XHQqL1xuXHQgICAgICAgIHRoaXMuX3Byb3hpZXMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCogSW5kaWNhdGVzIGlmIHRoZSBjb25zdGFudCBzb3VyY2Ugd2FzIHN0YXJ0ZWQgb3Igbm90XG5cdFx0XHQqIEBwcml2YXRlXG5cdFx0XHQqIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0Ki9cblx0ICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gZmFsc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgY29uc3RhbnQgc291cmNlIG5vZGUgd2hpY2ggZ2VuZXJhdGVzIHRoZSBzaWduYWxcblx0XHRcdCAqIEB0eXBlIHtDb25zdGFudFNvdXJjZU5vZGV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29uc3RhbnRTb3VyY2UgPSB0aGlzLmNvbnRleHQuY3JlYXRlQ29uc3RhbnRTb3VyY2UoKTtcblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuX2NvbnN0YW50U291cmNlLm9mZnNldDtcblx0ICAgICAgICB0aGlzLnZhbHVlID0gb3B0aW9ucy52YWx1ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBub2RlIHdoZXJlIHRoZSBjb25zdGFudCBzaWduYWwgdmFsdWUgaXMgc2NhbGVkLlxuXHRcdFx0ICogQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gdGhpcy5fY29uc3RhbnRTb3VyY2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgbm9kZSB3aGVyZSB0aGUgdmFsdWUgaXMgc2V0LlxuXHRcdFx0ICogQHR5cGUge1RvbmUuUGFyYW19XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMuX3BhcmFtID0gdGhpcy5vdXRwdXQub2Zmc2V0O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU2lnbmFsLCBUb25lLlBhcmFtKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndmFsdWUnOiAwLFxuXHQgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5EZWZhdWx0LFxuXHQgICAgICAgICdjb252ZXJ0JzogdHJ1ZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBXaGVuIHNpZ25hbHMgY29ubmVjdCB0byBvdGhlciBzaWduYWxzIG9yIEF1ZGlvUGFyYW1zLFxuXHRcdCAqICB0aGV5IHRha2Ugb3ZlciB0aGUgb3V0cHV0IHZhbHVlIG9mIHRoYXQgc2lnbmFsIG9yIEF1ZGlvUGFyYW0uXG5cdFx0ICogIEZvciBhbGwgb3RoZXIgbm9kZXMsIHRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZSBhcyBhIGRlZmF1bHQgPGNvZGU+Y29ubmVjdDwvY29kZT4uXG5cdFx0ICpcblx0XHQgKiAgQG92ZXJyaWRlXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9QYXJhbXxBdWRpb05vZGV8VG9uZS5TaWduYWx8VG9uZX0gbm9kZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE51bWJlcj0wXSBUaGUgb3V0cHV0IG51bWJlciB0byBjb25uZWN0IGZyb20uXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbaW5wdXROdW1iZXI9MF0gVGhlIGlucHV0IG51bWJlciB0byBjb25uZWN0IHRvLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWx9IHRoaXNcblx0XHQgKiAgQG1ldGhvZFxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIC8vdGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gd2hlcmUgdGhpcyBub2RlIHdpbGwgZm9yd2FyZCBhdXRvbWF0aW9uc1xuXHQgICAgICAgIC8vdG8gY29ubmVjdGVkIG5vZGVzIHdpdGhvdXQgYW55IHNpZ25hbCBpZiBwb3NzaWJsZS5cblx0ICAgICAgICBpZiAodGhpcy5faXNQYXJhbShub2RlKSAmJiAhdGhpcy5fc291cmNlU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9wcm94aWVzLnB1c2gobm9kZSk7XG5cdCAgICAgICAgICAgIG5vZGUub3ZlcnJpZGRlbiA9IHRydWU7XG5cdCAgICAgICAgICAgIHRoaXMuX2FwcGx5QXV0b21hdGlvbnMobm9kZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5fc291cmNlU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc291cmNlU3RhcnRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jb25zdGFudFNvdXJjZS5zdGFydCgwKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUYWtlcyBhIG5vZGUgYXMgYW4gYXJndW1lbnQgYW5kIHJldHVybnMgaWYgaXQgaXMgYSBQYXJhbSBvciBBdWRpb1BhcmFtXG5cdFx0ICogQHBhcmFtICB7Kn0gbm9kZSBUaGUgbm9kZSB0byB0ZXN0XG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLl9pc1BhcmFtID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5QYXJhbSAmJiBUb25lLlBhcmFtID09PSBub2RlLmNvbnN0cnVjdG9yIHx8IG5vZGUgaW5zdGFuY2VvZiBBdWRpb1BhcmFtO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIERpc2NhcmQgdGhlIG9wdGltaXphdGlvbiBhbmQgY29ubmVjdCBhbGwgb2YgdGhlIHByb3hpZXNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLl9jb25uZWN0UHJveGllcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoIXRoaXMuX3NvdXJjZVN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlU3RhcnRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50U291cmNlLnN0YXJ0KDApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9wcm94aWVzLmZvckVhY2goZnVuY3Rpb24gKHByb3h5KSB7XG5cdCAgICAgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuY29ubmVjdC5jYWxsKHRoaXMsIHByb3h5KTtcblx0ICAgICAgICAgICAgaWYgKHByb3h5Ll9wcm94aWVzKSB7XG5cdCAgICAgICAgICAgICAgICBwcm94eS5fY29ubmVjdFByb3hpZXMoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlZCB3aGVuIGEgbm9kZSBpcyBjb25uZWN0ZWQgdG8gdGhpc1xuXHRcdCAqIEBwYXJhbSAge0F1ZGlvTm9kZX0gZnJvbVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuX29uQ29ubmVjdCA9IGZ1bmN0aW9uIChmcm9tKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLl9pc1BhcmFtKGZyb20pKSB7XG5cdCAgICAgICAgICAgIC8vY29ubmVjdCBhbGwgdGhlIHByb3hpZXNcblx0ICAgICAgICAgICAgdGhpcy5fY29ubmVjdFByb3hpZXMoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQXBwbHkgYWxsIHRoZSBjdXJyZW50IGF1dG9tYXRpb25zIHRvIHRoZSBnaXZlbiBwYXJhbWV0ZXJcblx0XHQgKiBAcGFyYW0gIHtBdWRpb1BhcmFtfSBwYXJhbVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuX2FwcGx5QXV0b21hdGlvbnMgPSBmdW5jdGlvbiAocGFyYW0pIHtcblx0ICAgICAgICB2YXIgbm93ID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lO1xuXHQgICAgICAgIHBhcmFtLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhub3cpO1xuXHQgICAgICAgIHZhciBjdXJyZW50VmFsID0gdGhpcy5nZXRWYWx1ZUF0VGltZShub3cpO1xuXHQgICAgICAgIHBhcmFtLnNldFZhbHVlQXRUaW1lKGN1cnJlbnRWYWwsIG5vdyk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmZvckVhY2hGcm9tKG5vdywgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIHBhcmFtW2V2ZW50LnR5cGVdKGV2ZW50LnZhbHVlLCBldmVudC50aW1lLCBldmVudC5jb25zdGFudCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogRGlzY29ubmVjdCBmcm9tIHRoZSBnaXZlbiBub2RlIG9yIGFsbCBub2RlcyBpZiBubyBwYXJhbSBpcyBnaXZlbi5cblx0XHQgKiBAcGFyYW0gIHtBdWRpb05vZGV8QXVkaW9QYXJhbX0gbm9kZVxuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2lnbmFsfSAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fcHJveGllcy5pbmNsdWRlcyhub2RlKSkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9wcm94aWVzLmluZGV4T2Yobm9kZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMuc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKCFub2RlKSB7XG5cdCAgICAgICAgICAgIC8vbm8gYXJndW1lbnQsIGRpc2Nvbm5lY3QgZXZlcnl0aGluZ1xuXHQgICAgICAgICAgICB0aGlzLl9wcm94aWVzID0gW107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc2Nvbm5lY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGN1cnJlbnQgc2lnbmFsIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgV2hlbiB0byBnZXQgdGhlIHNpZ25hbCB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge051bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3BhcmFtLmdldFZhbHVlQXRUaW1lKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJhbS5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5QYXJhbS5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLy93cmFwIGFsbCBvZiB0aGUgYXV0b21hdGlvbiBtZXRob2RzXG5cdCAgICBbXG5cdCAgICAgICAgJ3NldFZhbHVlQXRUaW1lJyxcblx0ICAgICAgICAnbGluZWFyUmFtcFRvVmFsdWVBdFRpbWUnLFxuXHQgICAgICAgICdleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lJyxcblx0ICAgICAgICAnc2V0VGFyZ2V0QXRUaW1lJ1xuXHQgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcblx0ICAgICAgICB2YXIgcHJldmlvdXNNZXRob2QgPSBUb25lLlNpZ25hbC5wcm90b3R5cGVbbWV0aG9kXTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cdCAgICAgICAgICAgIHByZXZpb3VzTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIGFyZ3NbMF0gPSB0aGlzLl9mcm9tVW5pdHMoYXJnc1swXSk7XG5cdCAgICAgICAgICAgIGFyZ3NbMV0gPSB0aGlzLnRvU2Vjb25kcyhhcmdzWzFdKTtcblx0ICAgICAgICAgICAgLy9hcHBseSBpdCB0byB0aGUgcHJveGllc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm94aWVzLmZvckVhY2goZnVuY3Rpb24gKHNpZ25hbCkge1xuXHQgICAgICAgICAgICAgICAgc2lnbmFsW21ldGhvZF0uYXBwbHkoc2lnbmFsLCBhcmdzKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfTtcblx0ICAgIH0pO1xuXHQgICAgW1xuXHQgICAgICAgICdjYW5jZWxTY2hlZHVsZWRWYWx1ZXMnLFxuXHQgICAgICAgICdjYW5jZWxBbmRIb2xkQXRUaW1lJ1xuXHQgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcblx0ICAgICAgICB2YXIgcHJldmlvdXNNZXRob2QgPSBUb25lLlNpZ25hbC5wcm90b3R5cGVbbWV0aG9kXTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cdCAgICAgICAgICAgIHByZXZpb3VzTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIGFyZ3NbMF0gPSB0aGlzLnRvU2Vjb25kcyhhcmdzWzBdKTtcblx0ICAgICAgICAgICAgLy9hcHBseSBpdCB0byB0aGUgcHJveGllc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm94aWVzLmZvckVhY2goZnVuY3Rpb24gKHNpZ25hbCkge1xuXHQgICAgICAgICAgICAgICAgc2lnbmFsW21ldGhvZF0uYXBwbHkoc2lnbmFsLCBhcmdzKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfTtcblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgYW5kIGRpc2Nvbm5lY3Rcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fY29uc3RhbnRTb3VyY2UuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2NvbnN0YW50U291cmNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wcm94aWVzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TaWduYWw7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBQb3cgYXBwbGllcyBhbiBleHBvbmVudCB0byB0aGUgaW5jb21pbmcgc2lnbmFsLiBUaGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0ICogICAgICAgICBtdXN0IGJlIEF1ZGlvUmFuZ2UuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7UG9zaXRpdmV9IGV4cCBUaGUgZXhwb25lbnQgdG8gYXBwbHkgdG8gdGhlIGluY29taW5nIHNpZ25hbCwgbXVzdCBiZSBhdCBsZWFzdCAyLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcG93ID0gbmV3IFRvbmUuUG93KDIpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoMC41KS5jb25uZWN0KHBvdyk7XG5cdFx0ICogLy9vdXRwdXQgb2YgcG93IGlzIDAuMjUuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb3cgPSBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiB0aGUgZXhwb25lbnRcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXhwID0gVG9uZS5kZWZhdWx0QXJnKGV4cCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9leHBTY2FsZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKHRoaXMuX2V4cEZ1bmModGhpcy5fZXhwKSwgODE5Mik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Qb3csIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdmFsdWUgb2YgdGhlIGV4cG9uZW50LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBvdyNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Qb3cucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHA7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXhwID0gZXhwO1xuXHQgICAgICAgICAgICB0aGlzLl9leHBTY2FsZXIuc2V0TWFwKHRoaXMuX2V4cEZ1bmModGhpcy5fZXhwKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGZ1bmN0aW9uIHdoaWNoIG1hcHMgdGhlIHdhdmVzaGFwZXJcblx0XHQgKiAgQHBhcmFtICAge251bWJlcn0gZXhwXG5cdFx0ICogIEByZXR1cm4ge2Z1bmN0aW9ufVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb3cucHJvdG90eXBlLl9leHBGdW5jID0gZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBNYXRoLnBvdyhNYXRoLmFicyh2YWwpLCBleHApO1xuXHQgICAgICAgIH07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb3d9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUG93LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2V4cFNjYWxlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXhwU2NhbGVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Qb3c7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5FbnZlbG9wZSBpcyBhbiBbQURTUl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3ludGhlc2l6ZXIjQURTUl9lbnZlbG9wZSlcblx0XHQgKiAgICAgICAgICBlbnZlbG9wZSBnZW5lcmF0b3IuIFRvbmUuRW52ZWxvcGUgb3V0cHV0cyBhIHNpZ25hbCB3aGljaFxuXHRcdCAqICAgICAgICAgIGNhbiBiZSBjb25uZWN0ZWQgdG8gYW4gQXVkaW9QYXJhbSBvciBUb25lLlNpZ25hbC5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvZS9lYS9BRFNSX3BhcmFtZXRlci5zdmdcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFthdHRhY2tdIFRoZSBhbW91bnQgb2YgdGltZSBpdCB0YWtlcyBmb3IgdGhlIGVudmVsb3BlIHRvIGdvIGZyb21cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAwIHRvIGl0J3MgbWF4aW11bSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbZGVjYXldXHRUaGUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgdGhlIGF0dGFjayB0aGF0IGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgXHR0byBmYWxsIHRvIHRoZSBzdXN0YWluIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbc3VzdGFpbl1cdFRoZSBwZXJjZW50IG9mIHRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgdGhlIGVudmVsb3BlIHJlc3RzIGF0IHVudGlsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0dGhlIHJlbGVhc2UgaXMgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtyZWxlYXNlXVx0VGhlIGFtb3VudCBvZiB0aW1lIGFmdGVyIHRoZSByZWxlYXNlIGlzIHRyaWdnZXJlZCBpdCB0YWtlcyB0byByZWFjaCAwLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYW4gYW1wbGl0dWRlIGVudmVsb3BlXG5cdFx0ICogdmFyIGdhaW5Ob2RlID0gVG9uZS5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0XHQgKiB2YXIgZW52ID0gbmV3IFRvbmUuRW52ZWxvcGUoe1xuXHRcdCAqIFx0XCJhdHRhY2tcIiA6IDAuMSxcblx0XHQgKiBcdFwiZGVjYXlcIiA6IDAuMixcblx0XHQgKiBcdFwic3VzdGFpblwiIDogMSxcblx0XHQgKiBcdFwicmVsZWFzZVwiIDogMC44LFxuXHRcdCAqIH0pO1xuXHRcdCAqIGVudi5jb25uZWN0KGdhaW5Ob2RlLmdhaW4pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL2dldCBhbGwgb2YgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ2RlY2F5Jyxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nLFxuXHQgICAgICAgICAgICAncmVsZWFzZSdcblx0ICAgICAgICBdLCBUb25lLkVudmVsb3BlKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZW4gdHJpZ2dlckF0dGFjayBpcyBjYWxsZWQsIHRoZSBhdHRhY2sgdGltZSBpcyB0aGUgYW1vdW50IG9mXG5cdFx0XHQgKiAgdGltZSBpdCB0YWtlcyBmb3IgdGhlIGVudmVsb3BlIHRvIHJlYWNoIGl0J3MgbWF4aW11bSB2YWx1ZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYXR0YWNrID0gb3B0aW9ucy5hdHRhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWZ0ZXIgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZSwgdGhlIHZhbHVlIHdpbGwgZmFsbFxuXHRcdFx0ICogIG92ZXIgdGhlIGR1cmF0aW9uIG9mIHRoZSBkZWNheSB0aW1lIHRvIGl0J3Mgc3VzdGFpbiB2YWx1ZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVjYXkgPSBvcHRpb25zLmRlY2F5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogXHRUaGUgc3VzdGFpbiB2YWx1ZSBpcyB0aGUgdmFsdWVcblx0XHRcdCAqIFx0d2hpY2ggdGhlIGVudmVsb3BlIHJlc3RzIGF0IGFmdGVyIHRyaWdnZXJBdHRhY2sgaXNcblx0XHRcdCAqIFx0Y2FsbGVkLCBidXQgYmVmb3JlIHRyaWdnZXJSZWxlYXNlIGlzIGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zdXN0YWluID0gb3B0aW9ucy5zdXN0YWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFmdGVyIHRyaWdnZXJSZWxlYXNlIGlzIGNhbGxlZCwgdGhlIGVudmVsb3BlJ3Ncblx0XHRcdCAqICB2YWx1ZSB3aWxsIGZhbGwgdG8gaXQncyBtaW1pbnVtIHZhbHVlIG92ZXIgdGhlXG5cdFx0XHQgKiAgZHVyYXRpb24gb2YgdGhlIHJlbGVhc2UgdGltZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVsZWFzZSA9IG9wdGlvbnMucmVsZWFzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbmV4dCB0aW1lIHRoZSBlbnZlbG9wZSBpcyBhdCBzdGFuZGJ5XG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSAnbGluZWFyJztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbmV4dCB0aW1lIHRoZSBlbnZlbG9wZSBpcyBhdCBzdGFuZGJ5XG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmVsZWFzZUN1cnZlID0gJ2V4cG9uZW50aWFsJztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaWcgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlNpZ25hbCgwKTtcblx0ICAgICAgICAvL3NldCB0aGUgYXR0YWNrQ3VydmUgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5hdHRhY2tDdXJ2ZSA9IG9wdGlvbnMuYXR0YWNrQ3VydmU7XG5cdCAgICAgICAgdGhpcy5yZWxlYXNlQ3VydmUgPSBvcHRpb25zLnJlbGVhc2VDdXJ2ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkVudmVsb3BlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAnZGVjYXknOiAwLjEsXG5cdCAgICAgICAgJ3N1c3RhaW4nOiAwLjUsXG5cdCAgICAgICAgJ3JlbGVhc2UnOiAxLFxuXHQgICAgICAgICdhdHRhY2tDdXJ2ZSc6ICdsaW5lYXInLFxuXHQgICAgICAgICdyZWxlYXNlQ3VydmUnOiAnZXhwb25lbnRpYWwnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVhZCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZW52ZWxvcGUuIFVzZWZ1bCBmb3Jcblx0XHQgKiBzeW5jcm9uaXppbmcgdmlzdWFsIG91dHB1dCB0byB0aGUgZW52ZWxvcGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSB2YWx1ZVxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHNoYXBlIG9mIHRoZSBhdHRhY2suXG5cdFx0ICogQ2FuIGJlIGFueSBvZiB0aGVzZSBzdHJpbmdzOlxuXHRcdCAqIDx1bD5cblx0XHQgKiAgIDxsaT5saW5lYXI8L2xpPlxuXHRcdCAqICAgPGxpPmV4cG9uZW50aWFsPC9saT5cblx0XHQgKiAgIDxsaT5zaW5lPC9saT5cblx0XHQgKiAgIDxsaT5jb3NpbmU8L2xpPlxuXHRcdCAqICAgPGxpPmJvdW5jZTwvbGk+XG5cdFx0ICogICA8bGk+cmlwcGxlPC9saT5cblx0XHQgKiAgIDxsaT5zdGVwPC9saT5cblx0XHQgKiA8L3VsPlxuXHRcdCAqIENhbiBhbHNvIGJlIGFuIGFycmF5IHdoaWNoIGRlc2NyaWJlcyB0aGUgY3VydmUuIFZhbHVlc1xuXHRcdCAqIGluIHRoZSBhcnJheSBhcmUgZXZlbmx5IHN1YmRpdmlkZWQgYW5kIGxpbmVhcmx5XG5cdFx0ICogaW50ZXJwb2xhdGVkIG92ZXIgdGhlIGR1cmF0aW9uIG9mIHRoZSBhdHRhY2suXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge1N0cmluZ3xBcnJheX1cblx0XHQgKiBAbmFtZSBhdHRhY2tDdXJ2ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogZW52LmF0dGFja0N1cnZlID0gXCJsaW5lYXJcIjtcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vY2FuIGFsc28gYmUgYW4gYXJyYXlcblx0XHQgKiBlbnYuYXR0YWNrQ3VydmUgPSBbMCwgMC4yLCAwLjMsIDAuNCwgMV1cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkVudmVsb3BlLnByb3RvdHlwZSwgJ2F0dGFja0N1cnZlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc1N0cmluZyh0aGlzLl9hdHRhY2tDdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2tDdXJ2ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzQXJyYXkodGhpcy5fYXR0YWNrQ3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICAvL2xvb2sgdXAgdGhlIG5hbWUgaW4gdGhlIGN1cnZlcyBhcnJheVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgdHlwZSBpbiBUb25lLkVudmVsb3BlLlR5cGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5FbnZlbG9wZS5UeXBlW3R5cGVdLkluID09PSB0aGlzLl9hdHRhY2tDdXJ2ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAvL290aGVyd2lzZSBqdXN0IHJldHVybiB0aGUgYXJyYXlcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2tDdXJ2ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoY3VydmUpIHtcblx0ICAgICAgICAgICAgLy9jaGVjayBpZiBpdCdzIGEgdmFsaWQgdHlwZVxuXHQgICAgICAgICAgICBpZiAoVG9uZS5FbnZlbG9wZS5UeXBlLmhhc093blByb3BlcnR5KGN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGN1cnZlRGVmID0gVG9uZS5FbnZlbG9wZS5UeXBlW2N1cnZlXTtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KGN1cnZlRGVmKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2F0dGFja0N1cnZlID0gY3VydmVEZWYuSW47XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2F0dGFja0N1cnZlID0gY3VydmVEZWY7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc0FycmF5KGN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSBjdXJ2ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5FbnZlbG9wZTogaW52YWxpZCBjdXJ2ZTogJyArIGN1cnZlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHNoYXBlIG9mIHRoZSByZWxlYXNlLiBTZWUgdGhlIGF0dGFjayBjdXJ2ZSB0eXBlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5FbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfEFycmF5fVxuXHRcdCAqIEBuYW1lIHJlbGVhc2VDdXJ2ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogZW52LnJlbGVhc2VDdXJ2ZSA9IFwibGluZWFyXCI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUsICdyZWxlYXNlQ3VydmUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzU3RyaW5nKHRoaXMuX3JlbGVhc2VDdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWxlYXNlQ3VydmU7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc0FycmF5KHRoaXMuX3JlbGVhc2VDdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIC8vbG9vayB1cCB0aGUgbmFtZSBpbiB0aGUgY3VydmVzIGFycmF5XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciB0eXBlIGluIFRvbmUuRW52ZWxvcGUuVHlwZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLkVudmVsb3BlLlR5cGVbdHlwZV0uT3V0ID09PSB0aGlzLl9yZWxlYXNlQ3VydmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgLy9vdGhlcndpc2UganVzdCByZXR1cm4gdGhlIGFycmF5XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVsZWFzZUN1cnZlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjdXJ2ZSkge1xuXHQgICAgICAgICAgICAvL2NoZWNrIGlmIGl0J3MgYSB2YWxpZCB0eXBlXG5cdCAgICAgICAgICAgIGlmIChUb25lLkVudmVsb3BlLlR5cGUuaGFzT3duUHJvcGVydHkoY3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY3VydmVEZWYgPSBUb25lLkVudmVsb3BlLlR5cGVbY3VydmVdO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QoY3VydmVEZWYpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVsZWFzZUN1cnZlID0gY3VydmVEZWYuT3V0O1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSBjdXJ2ZURlZjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzQXJyYXkoY3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSBjdXJ2ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5FbnZlbG9wZTogaW52YWxpZCBjdXJ2ZTogJyArIGN1cnZlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjay9kZWNheSBwb3J0aW9uIG9mIHRoZSBBRFNSIGVudmVsb3BlLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIGF0dGFjayBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSBUaGUgdmVsb2NpdHkgb2YgdGhlIGVudmVsb3BlIHNjYWxlcyB0aGUgdmFsZXMuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIGJldHdlZW4gMC0xXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVudmVsb3BlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIC8vdHJpZ2dlciB0aGUgYXR0YWNrIDAuNSBzZWNvbmRzIGZyb20gbm93IHdpdGggYSB2ZWxvY2l0eSBvZiAwLjJcblx0XHQgKiAgZW52LnRyaWdnZXJBdHRhY2soXCIrMC41XCIsIDAuMik7XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBvcmlnaW5hbEF0dGFjayA9IHRoaXMudG9TZWNvbmRzKHRoaXMuYXR0YWNrKTtcblx0ICAgICAgICB2YXIgYXR0YWNrID0gb3JpZ2luYWxBdHRhY2s7XG5cdCAgICAgICAgdmFyIGRlY2F5ID0gdGhpcy50b1NlY29uZHModGhpcy5kZWNheSk7XG5cdCAgICAgICAgdmVsb2NpdHkgPSBUb25lLmRlZmF1bHRBcmcodmVsb2NpdHksIDEpO1xuXHQgICAgICAgIC8vY2hlY2sgaWYgaXQncyBub3QgYSBjb21wbGV0ZSBhdHRhY2tcblx0ICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICBpZiAoY3VycmVudFZhbHVlID4gMCkge1xuXHQgICAgICAgICAgICAvL3N1YnRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIGZyb20gdGhlIGF0dGFjayB0aW1lXG5cdCAgICAgICAgICAgIHZhciBhdHRhY2tSYXRlID0gMSAvIGF0dGFjaztcblx0ICAgICAgICAgICAgdmFyIHJlbWFpbmluZ0Rpc3RhbmNlID0gMSAtIGN1cnJlbnRWYWx1ZTtcblx0ICAgICAgICAgICAgLy90aGUgYXR0YWNrIGlzIG5vdyB0aGUgcmVtYWluaW5nIHRpbWVcblx0ICAgICAgICAgICAgYXR0YWNrID0gcmVtYWluaW5nRGlzdGFuY2UgLyBhdHRhY2tSYXRlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2F0dGFja1xuXHQgICAgICAgIGlmICh0aGlzLl9hdHRhY2tDdXJ2ZSA9PT0gJ2xpbmVhcicpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2lnLmxpbmVhclJhbXBUbyh2ZWxvY2l0eSwgYXR0YWNrLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2F0dGFja0N1cnZlID09PSAnZXhwb25lbnRpYWwnKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NpZy50YXJnZXRSYW1wVG8odmVsb2NpdHksIGF0dGFjaywgdGltZSk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChhdHRhY2sgPiAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NpZy5jYW5jZWxBbmRIb2xkQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgY3VydmUgPSB0aGlzLl9hdHRhY2tDdXJ2ZTtcblx0ICAgICAgICAgICAgLy90YWtlIG9ubHkgYSBwb3J0aW9uIG9mIHRoZSBjdXJ2ZVxuXHQgICAgICAgICAgICBpZiAoYXR0YWNrIDwgb3JpZ2luYWxBdHRhY2spIHtcblx0ICAgICAgICAgICAgICAgIHZhciBwZXJjZW50Q29tcGxldGUgPSAxIC0gYXR0YWNrIC8gb3JpZ2luYWxBdHRhY2s7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2xpY2VJbmRleCA9IE1hdGguZmxvb3IocGVyY2VudENvbXBsZXRlICogdGhpcy5fYXR0YWNrQ3VydmUubGVuZ3RoKTtcblx0ICAgICAgICAgICAgICAgIGN1cnZlID0gdGhpcy5fYXR0YWNrQ3VydmUuc2xpY2Uoc2xpY2VJbmRleCk7XG5cdCAgICAgICAgICAgICAgICAvL3RoZSBmaXJzdCBpbmRleCBpcyB0aGUgY3VycmVudCB2YWx1ZVxuXHQgICAgICAgICAgICAgICAgY3VydmVbMF0gPSBjdXJyZW50VmFsdWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fc2lnLnNldFZhbHVlQ3VydmVBdFRpbWUoY3VydmUsIHRpbWUsIGF0dGFjaywgdmVsb2NpdHkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2RlY2F5XG5cdCAgICAgICAgaWYgKGRlY2F5KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NpZy50YXJnZXRSYW1wVG8odmVsb2NpdHkgKiB0aGlzLnN1c3RhaW4sIGRlY2F5LCBhdHRhY2sgKyB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXJzIHRoZSByZWxlYXNlIG9mIHRoZSBlbnZlbG9wZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgLy90cmlnZ2VyIHJlbGVhc2UgaW1tZWRpYXRlbHlcblx0XHQgKiAgZW52LnRyaWdnZXJSZWxlYXNlKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmIChjdXJyZW50VmFsdWUgPiAwKSB7XG5cdCAgICAgICAgICAgIHZhciByZWxlYXNlID0gdGhpcy50b1NlY29uZHModGhpcy5yZWxlYXNlKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3JlbGVhc2VDdXJ2ZSA9PT0gJ2xpbmVhcicpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NpZy5saW5lYXJSYW1wVG8oMCwgcmVsZWFzZSwgdGltZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fcmVsZWFzZUN1cnZlID09PSAnZXhwb25lbnRpYWwnKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zaWcudGFyZ2V0UmFtcFRvKDAsIHJlbGVhc2UsIHRpbWUpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdmFyIGN1cnZlID0gdGhpcy5fcmVsZWFzZUN1cnZlO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheShjdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaWcuY2FuY2VsQW5kSG9sZEF0VGltZSh0aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaWcuc2V0VmFsdWVDdXJ2ZUF0VGltZShjdXJ2ZSwgdGltZSwgcmVsZWFzZSwgY3VycmVudFZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBzY2hlZHVsZWQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuIFRoaXMgd2lsbFxuXHRcdCAqICByZXR1cm4gdGhlIHVuY29udmVydGVkIChyYXcpIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSBpbiBzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSAgVGhlIHNjaGVkdWxlZCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc2lnLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0cmlnZ2VyQXR0YWNrUmVsZWFzZSBpcyBzaG9ydGhhbmQgZm9yIHRyaWdnZXJBdHRhY2ssIHRoZW4gd2FpdGluZ1xuXHRcdCAqICBzb21lIGR1cmF0aW9uLCB0aGVuIHRyaWdnZXJSZWxlYXNlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGR1cmF0aW9uIFRoZSBkdXJhdGlvbiBvZiB0aGUgc3VzdGFpbi5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIGF0dGFjayBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIFRoZSB2ZWxvY2l0eSBvZiB0aGUgZW52ZWxvcGUuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVudmVsb3BlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHRoZW4gdGhlIHJlbGVhc2UgYWZ0ZXIgMC42IHNlY29uZHMuXG5cdFx0ICogZW52LnRyaWdnZXJBdHRhY2tSZWxlYXNlKDAuNik7XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKHRpbWUgKyB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbikpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWxzIGFsbCBzY2hlZHVsZWQgZW52ZWxvcGUgY2hhbmdlcyBhZnRlciB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gYWZ0ZXJcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIHRoaXMuX3NpZy5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMoYWZ0ZXIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBCb3Jyb3dzIHRoZSBjb25uZWN0IG1ldGhvZCBmcm9tIFRvbmUuU2lnbmFsLlxuXHRcdCAqICBAZnVuY3Rpb25cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmNvbm5lY3QgPSBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3Q7XG5cdCAgICAvKipcblx0IFx0ICogIEdlbmVyYXRlIHNvbWUgY29tcGxleCBlbnZlbG9wZSBjdXJ2ZXMuXG5cdCBcdCAqL1xuXHQgICAgKGZ1bmN0aW9uIF9jcmVhdGVDdXJ2ZXMoKSB7XG5cdCAgICAgICAgdmFyIGN1cnZlTGVuID0gMTI4O1xuXHQgICAgICAgIHZhciBpLCBrO1xuXHQgICAgICAgIC8vY29zaW5lIGN1cnZlXG5cdCAgICAgICAgdmFyIGNvc2luZUN1cnZlID0gW107XG5cdCAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1cnZlTGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgY29zaW5lQ3VydmVbaV0gPSBNYXRoLnNpbihpIC8gKGN1cnZlTGVuIC0gMSkgKiAoTWF0aC5QSSAvIDIpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9yaXBwbGUgY3VydmVcblx0ICAgICAgICB2YXIgcmlwcGxlQ3VydmUgPSBbXTtcblx0ICAgICAgICB2YXIgcmlwcGxlQ3VydmVGcmVxID0gNi40O1xuXHQgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdXJ2ZUxlbiAtIDE7IGkrKykge1xuXHQgICAgICAgICAgICBrID0gaSAvIChjdXJ2ZUxlbiAtIDEpO1xuXHQgICAgICAgICAgICB2YXIgc2luZVdhdmUgPSBNYXRoLnNpbihrICogKE1hdGguUEkgKiAyKSAqIHJpcHBsZUN1cnZlRnJlcSAtIE1hdGguUEkgLyAyKSArIDE7XG5cdCAgICAgICAgICAgIHJpcHBsZUN1cnZlW2ldID0gc2luZVdhdmUgLyAxMCArIGsgKiAwLjgzO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByaXBwbGVDdXJ2ZVtjdXJ2ZUxlbiAtIDFdID0gMTtcblx0ICAgICAgICAvL3N0YWlycyBjdXJ2ZVxuXHQgICAgICAgIHZhciBzdGFpcnNDdXJ2ZSA9IFtdO1xuXHQgICAgICAgIHZhciBzdGVwcyA9IDU7XG5cdCAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1cnZlTGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgc3RhaXJzQ3VydmVbaV0gPSBNYXRoLmNlaWwoaSAvIChjdXJ2ZUxlbiAtIDEpICogc3RlcHMpIC8gc3RlcHM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vaW4tb3V0IGVhc2luZyBjdXJ2ZVxuXHQgICAgICAgIHZhciBzaW5lQ3VydmUgPSBbXTtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VydmVMZW47IGkrKykge1xuXHQgICAgICAgICAgICBrID0gaSAvIChjdXJ2ZUxlbiAtIDEpO1xuXHQgICAgICAgICAgICBzaW5lQ3VydmVbaV0gPSAwLjUgKiAoMSAtIE1hdGguY29zKE1hdGguUEkgKiBrKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vYSBib3VuY2UgY3VydmVcblx0ICAgICAgICB2YXIgYm91bmNlQ3VydmUgPSBbXTtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VydmVMZW47IGkrKykge1xuXHQgICAgICAgICAgICBrID0gaSAvIChjdXJ2ZUxlbiAtIDEpO1xuXHQgICAgICAgICAgICB2YXIgZnJlcSA9IE1hdGgucG93KGssIDMpICogNCArIDAuMjtcblx0ICAgICAgICAgICAgdmFyIHZhbCA9IE1hdGguY29zKGZyZXEgKiBNYXRoLlBJICogMiAqIGspO1xuXHQgICAgICAgICAgICBib3VuY2VDdXJ2ZVtpXSA9IE1hdGguYWJzKHZhbCAqICgxIC0gaykpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBJbnZlcnQgYSB2YWx1ZSBjdXJ2ZSB0byBtYWtlIGl0IHdvcmsgZm9yIHRoZSByZWxlYXNlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIGZ1bmN0aW9uIGludmVydEN1cnZlKGN1cnZlKSB7XG5cdCAgICAgICAgICAgIHZhciBvdXQgPSBuZXcgQXJyYXkoY3VydmUubGVuZ3RoKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjdXJ2ZS5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgb3V0W2pdID0gMSAtIGN1cnZlW2pdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBvdXQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHJldmVyc2UgdGhlIGN1cnZlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIGZ1bmN0aW9uIHJldmVyc2VDdXJ2ZShjdXJ2ZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gY3VydmUuc2xpY2UoMCkucmV2ZXJzZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBhdHRhY2sgYW5kIHJlbGVhc2UgY3VydmUgYXJyYXlzXG5cdFx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIFRvbmUuRW52ZWxvcGUuVHlwZSA9IHtcblx0ICAgICAgICAgICAgJ2xpbmVhcic6ICdsaW5lYXInLFxuXHQgICAgICAgICAgICAnZXhwb25lbnRpYWwnOiAnZXhwb25lbnRpYWwnLFxuXHQgICAgICAgICAgICAnYm91bmNlJzoge1xuXHQgICAgICAgICAgICAgICAgSW46IGludmVydEN1cnZlKGJvdW5jZUN1cnZlKSxcblx0ICAgICAgICAgICAgICAgIE91dDogYm91bmNlQ3VydmVcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ2Nvc2luZSc6IHtcblx0ICAgICAgICAgICAgICAgIEluOiBjb3NpbmVDdXJ2ZSxcblx0ICAgICAgICAgICAgICAgIE91dDogcmV2ZXJzZUN1cnZlKGNvc2luZUN1cnZlKVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnc3RlcCc6IHtcblx0ICAgICAgICAgICAgICAgIEluOiBzdGFpcnNDdXJ2ZSxcblx0ICAgICAgICAgICAgICAgIE91dDogaW52ZXJ0Q3VydmUoc3RhaXJzQ3VydmUpXG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdyaXBwbGUnOiB7XG5cdCAgICAgICAgICAgICAgICBJbjogcmlwcGxlQ3VydmUsXG5cdCAgICAgICAgICAgICAgICBPdXQ6IGludmVydEN1cnZlKHJpcHBsZUN1cnZlKVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnc2luZSc6IHtcblx0ICAgICAgICAgICAgICAgIEluOiBzaW5lQ3VydmUsXG5cdCAgICAgICAgICAgICAgICBPdXQ6IGludmVydEN1cnZlKHNpbmVDdXJ2ZSlcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH07XG5cdCAgICB9KCkpO1xuXHQgICAgLyoqXG5cdFx0ICogIERpc2Nvbm5lY3QgYW5kIGRpc3Bvc2UuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVudmVsb3BlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2lnLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaWcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2F0dGFja0N1cnZlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkVudmVsb3BlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUgaXMgYSBUb25lLkVudmVsb3BlIGNvbm5lY3RlZCB0byBhIGdhaW4gbm9kZS5cblx0XHQgKiAgICAgICAgICBVbmxpa2UgVG9uZS5FbnZlbG9wZSwgd2hpY2ggb3V0cHV0cyB0aGUgZW52ZWxvcGUncyB2YWx1ZSwgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSBhY2NlcHRzXG5cdFx0ICogICAgICAgICAgYW4gYXVkaW8gc2lnbmFsIGFzIHRoZSBpbnB1dCBhbmQgd2lsbCBhcHBseSB0aGUgZW52ZWxvcGUgdG8gdGhlIGFtcGxpdHVkZVxuXHRcdCAqICAgICAgICAgIG9mIHRoZSBzaWduYWwuIFJlYWQgbW9yZSBhYm91dCBBRFNSIEVudmVsb3BlcyBvbiBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TeW50aGVzaXplciNBRFNSX2VudmVsb3BlKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW52ZWxvcGV9XG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFthdHRhY2tdIFRoZSBhbW91bnQgb2YgdGltZSBpdCB0YWtlcyBmb3IgdGhlIGVudmVsb3BlIHRvIGdvIGZyb21cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIHRvIGl0J3MgbWF4aW11bSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbZGVjYXldXHRUaGUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgdGhlIGF0dGFjayB0aGF0IGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgXHR0byBmYWxsIHRvIHRoZSBzdXN0YWluIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbc3VzdGFpbl1cdFRoZSBwZXJjZW50IG9mIHRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgdGhlIGVudmVsb3BlIHJlc3RzIGF0IHVudGlsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0dGhlIHJlbGVhc2UgaXMgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtyZWxlYXNlXVx0VGhlIGFtb3VudCBvZiB0aW1lIGFmdGVyIHRoZSByZWxlYXNlIGlzIHRyaWdnZXJlZCBpdCB0YWtlcyB0byByZWFjaCAwLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBhbXBFbnYgPSBuZXcgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSh7XG5cdFx0ICogXHRcImF0dGFja1wiOiAwLjEsXG5cdFx0ICogXHRcImRlY2F5XCI6IDAuMixcblx0XHQgKiBcdFwic3VzdGFpblwiOiAxLjAsXG5cdFx0ICogXHRcInJlbGVhc2VcIjogMC44XG5cdFx0ICogfSkudG9NYXN0ZXIoKTtcblx0XHQgKiAvL2NyZWF0ZSBhbiBvc2NpbGxhdG9yIGFuZCBjb25uZWN0IGl0XG5cdFx0ICogdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS5jb25uZWN0KGFtcEVudikuc3RhcnQoKTtcblx0XHQgKiAvL3RyaWdnZXIgdGhlIGVudmVsb3BlcyBhdHRhY2sgYW5kIHJlbGVhc2UgXCI4dFwiIGFwYXJ0XG5cdFx0ICogYW1wRW52LnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiOHRcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkFtcGxpdHVkZUVudmVsb3BlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW52ZWxvcGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgaW5wdXQgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIHRoaXMuX3NpZy5jb25uZWN0KHRoaXMub3V0cHV0LmdhaW4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUsIFRvbmUuRW52ZWxvcGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBBbmFseXNlck5vZGUuZ2V0RmxvYXRUaW1lRG9tYWluRGF0YSBwb2x5ZmlsbFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCFBbmFseXNlck5vZGUucHJvdG90eXBlLmdldEZsb2F0VGltZURvbWFpbkRhdGEpIHtcblx0ICAgICAgICAgICAgLy9yZWZlcmVuY2VkIGh0dHBzOi8vZ2l0aHViLmNvbS9tb2hheW9uYW8vZ2V0LWZsb2F0LXRpbWUtZG9tYWluLWRhdGFcblx0ICAgICAgICAgICAgQW5hbHlzZXJOb2RlLnByb3RvdHlwZS5nZXRGbG9hdFRpbWVEb21haW5EYXRhID0gZnVuY3Rpb24gKGFycmF5KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdWludDggPSBuZXcgVWludDhBcnJheShhcnJheS5sZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5nZXRCeXRlVGltZURvbWFpbkRhdGEodWludDgpO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1aW50OC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGFycmF5W2ldID0gKHVpbnQ4W2ldIC0gMTI4KSAvIDEyODtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgV3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBXZWIgQXVkaW8nc1xuXHRcdCAqICAgICAgICAgIFtBbmFseXNlck5vZGVdKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jaWRsLWRlZi1BbmFseXNlck5vZGUpLlxuXHRcdCAqICAgICAgICAgIEV4dHJhY3RzIEZGVCBvciBXYXZlZm9ybSBkYXRhIGZyb20gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge1N0cmluZz19IHR5cGUgVGhlIHJldHVybiB0eXBlIG9mIHRoZSBhbmFseXNpcywgZWl0aGVyIFwiZmZ0XCIsIG9yIFwid2F2ZWZvcm1cIi5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXI9fSBzaXplIFRoZSBzaXplIG9mIHRoZSBGRlQuIFZhbHVlIG11c3QgYmUgYSBwb3dlciBvZlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICB0d28gaW4gdGhlIHJhbmdlIDMyIHRvIDMyNzY4LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5BbmFseXNlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd0eXBlJyxcblx0ICAgICAgICAgICAgJ3NpemUnXG5cdCAgICAgICAgXSwgVG9uZS5BbmFseXNlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW5hbHlzZXIgbm9kZS5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtBbmFseXNlck5vZGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVBbmFseXNlcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNpcyB0eXBlXG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYnVmZmVyIHRoYXQgdGhlIEZGVCBkYXRhIGlzIHdyaXR0ZW4gdG9cblx0XHRcdCAqICBAdHlwZSB7VHlwZWRBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICAvL3NldCB0aGUgdmFsdWVzIGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMuc2l6ZSA9IG9wdGlvbnMuc2l6ZTtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BbmFseXNlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy5cblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkFuYWx5c2VyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdzaXplJzogMTAyNCxcblx0ICAgICAgICAndHlwZSc6ICdmZnQnLFxuXHQgICAgICAgICdzbW9vdGhpbmcnOiAwLjhcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUG9zc2libGUgcmV0dXJuIHR5cGVzIG9mIGFuYWx5c2VyLmdldFZhbHVlKClcblx0XHQgKiAgQGVudW0ge1N0cmluZ31cblx0XHQgKi9cblx0ICAgIFRvbmUuQW5hbHlzZXIuVHlwZSA9IHtcblx0ICAgICAgICBXYXZlZm9ybTogJ3dhdmVmb3JtJyxcblx0ICAgICAgICBGRlQ6ICdmZnQnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJ1biB0aGUgYW5hbHlzaXMgZ2l2ZW4gdGhlIGN1cnJlbnQgc2V0dGluZ3MgYW5kIHJldHVybiB0aGVcblx0XHQgKiAgcmVzdWx0IGFzIGEgVHlwZWRBcnJheS5cblx0XHQgKiAgQHJldHVybnMge1R5cGVkQXJyYXl9XG5cdFx0ICovXG5cdCAgICBUb25lLkFuYWx5c2VyLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5BbmFseXNlci5UeXBlLkZGVCkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5nZXRGbG9hdEZyZXF1ZW5jeURhdGEodGhpcy5fYnVmZmVyKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQW5hbHlzZXIuVHlwZS5XYXZlZm9ybSkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5nZXRGbG9hdFRpbWVEb21haW5EYXRhKHRoaXMuX2J1ZmZlcik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzaXplIG9mIGFuYWx5c2lzLiBUaGlzIG11c3QgYmUgYSBwb3dlciBvZiB0d28gaW4gdGhlIHJhbmdlIDMyIHRvIDMyNzY4LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5BbmFseXNlciNcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgc2l6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQW5hbHlzZXIucHJvdG90eXBlLCAnc2l6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2l6ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5mZnRTaXplID0gc2l6ZSAqIDI7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoc2l6ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGFuYWx5c2lzIGZ1bmN0aW9uIHJldHVybmVkIGJ5IGFuYWx5c2VyLmdldFZhbHVlKCksIGVpdGhlciBcImZmdFwiIG9yIFwid2F2ZWZvcm1cIi5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQW5hbHlzZXIjXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFuYWx5c2VyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICBpZiAodHlwZSAhPT0gVG9uZS5BbmFseXNlci5UeXBlLldhdmVmb3JtICYmIHR5cGUgIT09IFRvbmUuQW5hbHlzZXIuVHlwZS5GRlQpIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RvbmUuQW5hbHlzZXI6IGludmFsaWQgdHlwZTogJyArIHR5cGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIDAgcmVwcmVzZW50cyBubyB0aW1lIGF2ZXJhZ2luZyB3aXRoIHRoZSBsYXN0IGFuYWx5c2lzIGZyYW1lLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5BbmFseXNlciNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBzbW9vdGhpbmdcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFuYWx5c2VyLnByb3RvdHlwZSwgJ3Ntb290aGluZycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLnNtb290aGluZ1RpbWVDb25zdGFudDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5zbW9vdGhpbmdUaW1lQ29uc3RhbnQgPSB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkFuYWx5c2VyfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BbmFseXNlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BbmFseXNlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ29tcHJlc3NvciBpcyBhIHRoaW4gd3JhcHBlciBhcm91bmQgdGhlIFdlYiBBdWRpb1xuXHRcdCAqICAgICAgICAgW0R5bmFtaWNzQ29tcHJlc3Nvck5vZGVdKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jdGhlLWR5bmFtaWNzY29tcHJlc3Nvcm5vZGUtaW50ZXJmYWNlKS5cblx0XHQgKiAgICAgICAgIENvbXByZXNzaW9uIHJlZHVjZXMgdGhlIHZvbHVtZSBvZiBsb3VkIHNvdW5kcyBvciBhbXBsaWZpZXMgcXVpZXQgc291bmRzXG5cdFx0ICogICAgICAgICBieSBuYXJyb3dpbmcgb3IgXCJjb21wcmVzc2luZ1wiIGFuIGF1ZGlvIHNpZ25hbCdzIGR5bmFtaWMgcmFuZ2UuXG5cdFx0ICogICAgICAgICBSZWFkIG1vcmUgb24gW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRHluYW1pY19yYW5nZV9jb21wcmVzc2lvbikuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc3xPYmplY3R9IFt0aHJlc2hvbGRdIFRoZSB2YWx1ZSBhYm92ZSB3aGljaCB0aGUgY29tcHJlc3Npb24gc3RhcnRzIHRvIGJlIGFwcGxpZWQuXG5cdFx0ICogIEBwYXJhbSB7UG9zaXRpdmV9IFtyYXRpb10gVGhlIGdhaW4gcmVkdWN0aW9uIHJhdGlvLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBjb21wID0gbmV3IFRvbmUuQ29tcHJlc3NvcigtMzAsIDMpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db21wcmVzc29yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCcsXG5cdCAgICAgICAgICAgICdyYXRpbydcblx0ICAgICAgICBdLCBUb25lLkNvbXByZXNzb3IpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGNvbXByZXNzb3Igbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtEeW5hbWljc0NvbXByZXNzb3JOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB0aHJlc2hvbGQgdmF1ZVxuXHRcdFx0ICogIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnRocmVzaG9sZCA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fY29tcHJlc3Nvci50aHJlc2hvbGQsXG5cdCAgICAgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5EZWNpYmVscyxcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnOiBmYWxzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhdHRhY2sgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hdHRhY2sgPSBuZXcgVG9uZS5QYXJhbSh0aGlzLl9jb21wcmVzc29yLmF0dGFjaywgVG9uZS5UeXBlLlRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByZWxlYXNlIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVsZWFzZSA9IG5ldyBUb25lLlBhcmFtKHRoaXMuX2NvbXByZXNzb3IucmVsZWFzZSwgVG9uZS5UeXBlLlRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBrbmVlIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmtuZWUgPSBuZXcgVG9uZS5QYXJhbSh7XG5cdCAgICAgICAgICAgICdwYXJhbSc6IHRoaXMuX2NvbXByZXNzb3Iua25lZSxcblx0ICAgICAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkRlY2liZWxzLFxuXHQgICAgICAgICAgICAnY29udmVydCc6IGZhbHNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJhdGlvIHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJhdGlvID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9jb21wcmVzc29yLnJhdGlvLFxuXHQgICAgICAgICAgICAnY29udmVydCc6IGZhbHNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAna25lZScsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJyxcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdyYXRpbycsXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5zZXQob3B0aW9ucyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Db21wcmVzc29yLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29tcHJlc3Nvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncmF0aW8nOiAxMixcblx0ICAgICAgICAndGhyZXNob2xkJzogLTI0LFxuXHQgICAgICAgICdyZWxlYXNlJzogMC4yNSxcblx0ICAgICAgICAnYXR0YWNrJzogMC4wMDMsXG5cdCAgICAgICAgJ2tuZWUnOiAzMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Db21wcmVzc29yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbXByZXNzb3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdrbmVlJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnLFxuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ3JhdGlvJyxcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmF0dGFjay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5hdHRhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmVsZWFzZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yZWxlYXNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnRocmVzaG9sZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy50aHJlc2hvbGQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmF0aW8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucmF0aW8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMua25lZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5rbmVlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Db21wcmVzc29yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQWRkIGEgc2lnbmFsIGFuZCBhIG51bWJlciBvciB0d28gc2lnbmFscy4gV2hlbiBubyB2YWx1ZSBpc1xuXHRcdCAqICAgICAgICAgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yLCBUb25lLkFkZCB3aWxsIHN1bSA8Y29kZT5pbnB1dFswXTwvY29kZT5cblx0XHQgKiAgICAgICAgIGFuZCA8Y29kZT5pbnB1dFsxXTwvY29kZT4uIElmIGEgdmFsdWUgaXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yLCBcblx0XHQgKiAgICAgICAgIHRoZSBpdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBpbnB1dC5cblx0XHQgKiAgXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gdmFsdWUgSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIFRvbmUuQWRkIHdpbGwgc3VtIHRoZSBmaXJzdFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzZWNvbmQgaW5wdXRzLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKDIpO1xuXHRcdCAqIHZhciBhZGQgPSBuZXcgVG9uZS5BZGQoMik7XG5cdFx0ICogc2lnbmFsLmNvbm5lY3QoYWRkKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgYWRkIGVxdWFscyA0XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9pZiBjb25zdHJ1Y3RlZCB3aXRoIG5vIGFyZ3VtZW50c1xuXHRcdCAqIC8vaXQgd2lsbCBhZGQgdGhlIGZpcnN0IGFuZCBzZWNvbmQgaW5wdXRzXG5cdFx0ICogdmFyIGFkZCA9IG5ldyBUb25lLkFkZCgpO1xuXHRcdCAqIHZhciBzaWcwID0gbmV3IFRvbmUuU2lnbmFsKDMpLmNvbm5lY3QoYWRkLCAwLCAwKTtcblx0XHQgKiB2YXIgc2lnMSA9IG5ldyBUb25lLlNpZ25hbCg0KS5jb25uZWN0KGFkZCwgMCwgMSk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIGFkZCBlcXVhbHMgNy4gXG5cdFx0ICovXG5cdCAgICBUb25lLkFkZCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzdW1taW5nIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1bSA9IHRoaXMuaW5wdXRbMF0gPSB0aGlzLmlucHV0WzFdID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuaW5wdXRbMV0gPSBuZXcgVG9uZS5TaWduYWwodmFsdWUpO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLmNvbm5lY3QodGhpcy5fc3VtKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFkZCwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BZGR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQWRkLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3VtLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdW0gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFkZDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBNdWx0aXBseSB0d28gaW5jb21pbmcgc2lnbmFscy4gT3IsIGlmIGEgbnVtYmVyIGlzIGdpdmVuIGluIHRoZSBjb25zdHJ1Y3Rvcixcblx0XHQgKiAgICAgICAgICBtdWx0aXBsaWVzIHRoZSBpbmNvbWluZyBzaWduYWwgYnkgdGhhdCB2YWx1ZS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsfVxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHZhbHVlIENvbnN0YW50IHZhbHVlIHRvIG11bHRpcGxlLiBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCxcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBpdCB3aWxsIHJldHVybiB0aGUgcHJvZHVjdCBvZiB0aGUgZmlyc3QgYW5kIHNlY29uZCBpbnB1dHNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbXVsdCA9IG5ldyBUb25lLk11bHRpcGx5KCk7XG5cdFx0ICogdmFyIHNpZ0EgPSBuZXcgVG9uZS5TaWduYWwoMyk7XG5cdFx0ICogdmFyIHNpZ0IgPSBuZXcgVG9uZS5TaWduYWwoNCk7XG5cdFx0ICogc2lnQS5jb25uZWN0KG11bHQsIDAsIDApO1xuXHRcdCAqIHNpZ0IuY29ubmVjdChtdWx0LCAwLCAxKTtcblx0XHQgKiAvL291dHB1dCBvZiBtdWx0IGlzIDEyLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoMTApO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoMikuY29ubmVjdChtdWx0KTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgbXVsdCBpcyAyMC5cblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGlwbHkgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgaW5wdXQgbm9kZSBpcyB0aGUgc2FtZSBhcyB0aGUgb3V0cHV0IG5vZGVcblx0XHRcdCAqICBpdCBpcyBhbHNvIHRoZSBHYWluTm9kZSB3aGljaCBoYW5kbGVzIHRoZSBzY2FsaW5nIG9mIGluY29taW5nIHNpZ25hbFxuXHRcdFx0ICpcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHQgPSB0aGlzLmlucHV0WzBdID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHNjYWxpbmcgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvUGFyYW19XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5pbnB1dFsxXSA9IHRoaXMub3V0cHV0LmdhaW47XG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyh2YWx1ZSwgMCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NdWx0aXBseSwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk11bHRpcGx5fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpcGx5LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbXVsdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk11bHRpcGx5O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgTmVnYXRlIHRoZSBpbmNvbWluZyBzaWduYWwuIGkuZS4gYW4gaW5wdXQgc2lnbmFsIG9mIDEwIHdpbGwgb3V0cHV0IC0xMFxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBuZWcgPSBuZXcgVG9uZS5OZWdhdGUoKTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKC0yKS5jb25uZWN0KG5lZyk7XG5cdFx0ICogLy9vdXRwdXQgb2YgbmVnIGlzIHBvc2l0aXZlIDIuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5OZWdhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgbmVnYXRpb24gaXMgZG9uZSBieSBtdWx0aXBseWluZyBieSAtMVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tdWx0aXBseSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk11bHRpcGx5KC0xKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk5lZ2F0ZSwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5OZWdhdGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTmVnYXRlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aXBseSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTmVnYXRlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgU3VidHJhY3QgdGhlIHNpZ25hbCBjb25uZWN0ZWQgdG8gPGNvZGU+aW5wdXRbMV08L2NvZGU+IGZyb20gdGhlIHNpZ25hbCBjb25uZWN0ZWQgXG5cdFx0ICogICAgICAgICB0byA8Y29kZT5pbnB1dFswXTwvY29kZT4uIElmIGFuIGFyZ3VtZW50IGlzIHByb3ZpZGVkIGluIHRoZSBjb25zdHJ1Y3RvciwgdGhlIFxuXHRcdCAqICAgICAgICAgc2lnbmFscyA8Y29kZT4udmFsdWU8L2NvZGU+IHdpbGwgYmUgc3VidHJhY3RlZCBmcm9tIHRoZSBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSB2YWx1ZSBUaGUgdmFsdWUgdG8gc3VidHJhY3QgZnJvbSB0aGUgaW5jb21pbmcgc2lnbmFsLiBJZiB0aGUgdmFsdWVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBpcyBvbWl0dGVkLCBpdCB3aWxsIHN1YnRyYWN0IHRoZSBzZWNvbmQgc2lnbmFsIGZyb20gdGhlIGZpcnN0LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzdWIgPSBuZXcgVG9uZS5TdWJ0cmFjdCgxKTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDQpLmNvbm5lY3Qoc3ViKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2Ygc3ViIGlzIDMuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzdWIgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHRcdCAqIHZhciBzaWdBID0gbmV3IFRvbmUuU2lnbmFsKDEwKTtcblx0XHQgKiB2YXIgc2lnQiA9IG5ldyBUb25lLlNpZ25hbCgyLjUpO1xuXHRcdCAqIHNpZ0EuY29ubmVjdChzdWIsIDAsIDApO1xuXHRcdCAqIHNpZ0IuY29ubmVjdChzdWIsIDAsIDEpO1xuXHRcdCAqIC8vb3V0cHV0IG9mIHN1YiBpcyA3LjVcblx0XHQgKi9cblx0ICAgIFRvbmUuU3VidHJhY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc3VtbWluZyBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdW0gPSB0aGlzLmlucHV0WzBdID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgbmVnYXRlIHRoZSBpbnB1dCBvZiB0aGUgc2Vjb25kIGlucHV0IGJlZm9yZSBjb25uZWN0aW5nIGl0XG5cdFx0XHQgKiAgdG8gdGhlIHN1bW1pbmcgbm9kZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5OZWdhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25lZyA9IG5ldyBUb25lLk5lZ2F0ZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBub2RlIHdoZXJlIHRoZSB2YWx1ZSBpcyBzZXRcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5pbnB1dFsxXSA9IG5ldyBUb25lLlNpZ25hbCh2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uY2hhaW4odGhpcy5fbmVnLCB0aGlzLl9zdW0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3VidHJhY3QsIFRvbmUuU2lnbmFsKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2lnbmFsQmFzZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TdWJ0cmFjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX25lZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbmVnID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdW0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3N1bSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3VidHJhY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBDb252ZXJ0IGFuIGluY29taW5nIHNpZ25hbCBiZXR3ZWVuIDAsIDEgdG8gYW4gZXF1YWwgcG93ZXIgZ2FpbiBzY2FsZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZXFQb3dHYWluID0gbmV3IFRvbmUuRXF1YWxQb3dlckdhaW4oKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRXF1YWxQb3dlckdhaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXFQb3dlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBpZiAoTWF0aC5hYnModmFsKSA8IDAuMDAxKSB7XG5cdCAgICAgICAgICAgICAgICAvL3Nob3VsZCBvdXRwdXQgMCB3aGVuIGlucHV0IGlzIDBcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuZXF1YWxQb3dlclNjYWxlKHZhbCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcyksIDQwOTYpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRXF1YWxQb3dlckdhaW4sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRXF1YWxQb3dlckdhaW59IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRXF1YWxQb3dlckdhaW4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZXFQb3dlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXFQb3dlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRXF1YWxQb3dlckdhaW47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzICBUb25lLkNyb3NzZmFkZSBwcm92aWRlcyBlcXVhbCBwb3dlciBmYWRpbmcgYmV0d2VlbiB0d28gaW5wdXRzLlxuXHRcdCAqICAgICAgICAgTW9yZSBvbiBjcm9zc2ZhZGluZyB0ZWNobmlxdWUgW2hlcmVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ZhZGVfKGF1ZGlvX2VuZ2luZWVyaW5nKSNDcm9zc2ZhZGluZykuXG5cdFx0ICpcblx0XHQgKiBAY29uc3RydWN0b3Jcblx0XHQgKiBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogQHBhcmFtIHtOb3JtYWxSYW5nZX0gW2luaXRpYWxGYWRlPTAuNV1cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHZhciBjcm9zc0ZhZGUgPSBuZXcgVG9uZS5Dcm9zc0ZhZGUoMC41KTtcblx0XHQgKiAvL2Nvbm5lY3QgZWZmZWN0IEEgdG8gY3Jvc3NmYWRlIGZyb21cblx0XHQgKiAvL2VmZmVjdCBvdXRwdXQgMCB0byBjcm9zc2ZhZGUgaW5wdXQgMFxuXHRcdCAqIGVmZmVjdEEuY29ubmVjdChjcm9zc0ZhZGUsIDAsIDApO1xuXHRcdCAqIC8vY29ubmVjdCBlZmZlY3QgQiB0byBjcm9zc2ZhZGUgZnJvbVxuXHRcdCAqIC8vZWZmZWN0IG91dHB1dCAwIHRvIGNyb3NzZmFkZSBpbnB1dCAxXG5cdFx0ICogZWZmZWN0Qi5jb25uZWN0KGNyb3NzRmFkZSwgMCwgMSk7XG5cdFx0ICogY3Jvc3NGYWRlLmZhZGUudmFsdWUgPSAwO1xuXHRcdCAqIC8vIF4gb25seSBlZmZlY3RBIGlzIG91dHB1dFxuXHRcdCAqIGNyb3NzRmFkZS5mYWRlLnZhbHVlID0gMTtcblx0XHQgKiAvLyBeIG9ubHkgZWZmZWN0QiBpcyBvdXRwdXRcblx0XHQgKiBjcm9zc0ZhZGUuZmFkZS52YWx1ZSA9IDAuNTtcblx0XHQgKiAvLyBeIHRoZSB0d28gc2lnbmFscyBhcmUgbWl4ZWQgZXF1YWxseS5cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3Jvc3NGYWRlID0gZnVuY3Rpb24gKGluaXRpYWxGYWRlKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPmlucHV0WzBdPC9jb2RlPi5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hID0gdGhpcy5pbnB1dFswXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+aW5wdXRbMV08L2NvZGU+LlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmIgPSB0aGlzLmlucHV0WzFdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogXHRUaGUgbWl4IGJldHdlZW4gdGhlIHR3byBpbnB1dHMuIEEgZmFkZSB2YWx1ZSBvZiAwXG5cdFx0XHQgKiBcdHdpbGwgb3V0cHV0IDEwMCUgPGNvZGU+aW5wdXRbMF08L2NvZGU+IGFuZFxuXHRcdFx0ICogXHRhIHZhbHVlIG9mIDEgd2lsbCBvdXRwdXQgMTAwJSA8Y29kZT5pbnB1dFsxXTwvY29kZT4uXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmFkZSA9IG5ldyBUb25lLlNpZ25hbChUb25lLmRlZmF1bHRBcmcoaW5pdGlhbEZhZGUsIDAuNSksIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgZXF1YWwgcG93ZXIgZ2FpbiBjcm9zcyBmYWRlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5FcXVhbFBvd2VyR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2VxdWFsUG93ZXJBID0gbmV3IFRvbmUuRXF1YWxQb3dlckdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBlcXVhbCBwb3dlciBnYWluIGNyb3NzIGZhZGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkVxdWFsUG93ZXJHYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckIgPSBuZXcgVG9uZS5FcXVhbFBvd2VyR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGludmVydCB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29uZSA9IHRoaXMuY29udGV4dC5nZXRDb25zdGFudCgxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpbnZlcnQgdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbnZlcnQgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmEuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5iLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuZmFkZS5jaGFpbih0aGlzLl9lcXVhbFBvd2VyQiwgdGhpcy5iLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX29uZS5jb25uZWN0KHRoaXMuX2ludmVydCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5mYWRlLmNvbm5lY3QodGhpcy5faW52ZXJ0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9pbnZlcnQuY2hhaW4odGhpcy5fZXF1YWxQb3dlckEsIHRoaXMuYS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZmFkZScpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ3Jvc3NGYWRlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ3Jvc3NGYWRlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNyb3NzRmFkZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdmYWRlJyk7XG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2VxdWFsUG93ZXJBID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmFkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mYWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9pbnZlcnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ludmVydCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fb25lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuYSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5iLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNyb3NzRmFkZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkZpbHRlciBpcyBhIGZpbHRlciB3aGljaCBhbGxvd3MgZm9yIGFsbCBvZiB0aGUgc2FtZSBuYXRpdmUgbWV0aG9kc1xuXHRcdCAqICAgICAgICAgIGFzIHRoZSBbQmlxdWFkRmlsdGVyTm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtYmlxdWFkZmlsdGVybm9kZS1pbnRlcmZhY2UpLlxuXHRcdCAqICAgICAgICAgIFRvbmUuRmlsdGVyIGhhcyB0aGUgYWRkZWQgYWJpbGl0eSB0byBzZXQgdGhlIGZpbHRlciByb2xsb2ZmIGF0IC0xMlxuXHRcdCAqICAgICAgICAgIChkZWZhdWx0KSwgLTI0IGFuZCAtNDguXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbZnJlcXVlbmN5XSBUaGUgY3V0b2ZmIGZyZXF1ZW5jeSBvZiB0aGUgZmlsdGVyLlxuXHRcdCAqICBAcGFyYW0ge3N0cmluZz19IHR5cGUgVGhlIHR5cGUgb2YgZmlsdGVyLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHJvbGxvZmYgVGhlIGRyb3AgaW4gZGVjaWJlbHMgcGVyIG9jdGF2ZSBhZnRlciB0aGUgY3V0b2ZmIGZyZXF1ZW5jeS5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIGNob2ljZXM6IC0xMiwgLTI0LCBhbmQgLTQ4XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBmaWx0ZXIgPSBuZXcgVG9uZS5GaWx0ZXIoMjAwLCBcImhpZ2hwYXNzXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GaWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnLFxuXHQgICAgICAgICAgICAncm9sbG9mZidcblx0ICAgICAgICBdLCBUb25lLkZpbHRlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGZpbHRlcihzKVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmlsdGVycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjdXRvZmYgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXIuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBwYXJhbWV0ZXJcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwoMCwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBvZiB0aGUgZmlsdGVyLCBvbmx5IHVzZWQgaW4gY2VydGFpbiBmaWx0ZXIgdHlwZXNcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IG5ldyBUb25lLlNpZ25hbCh7XG5cdCAgICAgICAgICAgICd2YWx1ZSc6IG9wdGlvbnMuZ2Fpbixcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnOiBmYWxzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBRIG9yIFF1YWxpdHkgb2YgdGhlIGZpbHRlclxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlEgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5RKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgdHlwZSBvZiB0aGUgZmlsdGVyXG5cdFx0XHQgKiAgQHR5cGUge3N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcm9sbG9mZiB2YWx1ZSBvZiB0aGUgZmlsdGVyXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcm9sbG9mZiA9IG9wdGlvbnMucm9sbG9mZjtcblx0ICAgICAgICAvL3NldCB0aGUgcm9sbG9mZjtcblx0ICAgICAgICB0aGlzLnJvbGxvZmYgPSBvcHRpb25zLnJvbGxvZmY7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdnYWluJyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GaWx0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICpcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GaWx0ZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3R5cGUnOiAnbG93cGFzcycsXG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDM1MCxcblx0ICAgICAgICAncm9sbG9mZic6IC0xMixcblx0ICAgICAgICAnUSc6IDEsXG5cdCAgICAgICAgJ2dhaW4nOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIGZpbHRlci4gVHlwZXM6IFwibG93cGFzc1wiLCBcImhpZ2hwYXNzXCIsXG5cdFx0ICogXCJiYW5kcGFzc1wiLCBcImxvd3NoZWxmXCIsIFwiaGlnaHNoZWxmXCIsIFwibm90Y2hcIiwgXCJhbGxwYXNzXCIsIG9yIFwicGVha2luZ1wiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZpbHRlciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZpbHRlci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdmFyIHR5cGVzID0gW1xuXHQgICAgICAgICAgICAgICAgJ2xvd3Bhc3MnLFxuXHQgICAgICAgICAgICAgICAgJ2hpZ2hwYXNzJyxcblx0ICAgICAgICAgICAgICAgICdiYW5kcGFzcycsXG5cdCAgICAgICAgICAgICAgICAnbG93c2hlbGYnLFxuXHQgICAgICAgICAgICAgICAgJ2hpZ2hzaGVsZicsXG5cdCAgICAgICAgICAgICAgICAnbm90Y2gnLFxuXHQgICAgICAgICAgICAgICAgJ2FsbHBhc3MnLFxuXHQgICAgICAgICAgICAgICAgJ3BlYWtpbmcnXG5cdCAgICAgICAgICAgIF07XG5cdCAgICAgICAgICAgIGlmICh0eXBlcy5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVG9uZS5GaWx0ZXI6IGludmFsaWQgdHlwZSAnICsgdHlwZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZmlsdGVycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tpXS50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJvbGxvZmYgb2YgdGhlIGZpbHRlciB3aGljaCBpcyB0aGUgZHJvcCBpbiBkYlxuXHRcdCAqIHBlciBvY3RhdmUuIEltcGxlbWVudGVkIGludGVybmFsbHkgYnkgY2FzY2FkaW5nIGZpbHRlcnMuXG5cdFx0ICogT25seSBhY2NlcHRzIHRoZSB2YWx1ZXMgLTEyLCAtMjQsIC00OCBhbmQgLTk2LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZpbHRlciNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHJvbGxvZmZcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZpbHRlci5wcm90b3R5cGUsICdyb2xsb2ZmJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcm9sbG9mZjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJvbGxvZmYpIHtcblx0ICAgICAgICAgICAgcm9sbG9mZiA9IHBhcnNlSW50KHJvbGxvZmYsIDEwKTtcblx0ICAgICAgICAgICAgdmFyIHBvc3NpYmlsaXRpZXMgPSBbXG5cdCAgICAgICAgICAgICAgICAtMTIsXG5cdCAgICAgICAgICAgICAgICAtMjQsXG5cdCAgICAgICAgICAgICAgICAtNDgsXG5cdCAgICAgICAgICAgICAgICAtOTZcblx0ICAgICAgICAgICAgXTtcblx0ICAgICAgICAgICAgdmFyIGNhc2NhZGluZ0NvdW50ID0gcG9zc2liaWxpdGllcy5pbmRleE9mKHJvbGxvZmYpO1xuXHQgICAgICAgICAgICAvL2NoZWNrIHRoZSByb2xsb2ZmIGlzIHZhbGlkXG5cdCAgICAgICAgICAgIGlmIChjYXNjYWRpbmdDb3VudCA9PT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUb25lLkZpbHRlcjogcm9sbG9mZiBjYW4gb25seSBiZSAtMTIsIC0yNCwgLTQ4IG9yIC05NicpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGNhc2NhZGluZ0NvdW50ICs9IDE7XG5cdCAgICAgICAgICAgIHRoaXMuX3JvbGxvZmYgPSByb2xsb2ZmO1xuXHQgICAgICAgICAgICAvL2ZpcnN0IGRpc2Nvbm5lY3QgdGhlIGZpbHRlcnMgYW5kIHRocm93IHRoZW0gYXdheVxuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9maWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2ldLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbaV0gPSBudWxsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnMgPSBuZXcgQXJyYXkoY2FzY2FkaW5nQ291bnQpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjb3VudCA9IDA7IGNvdW50IDwgY2FzY2FkaW5nQ291bnQ7IGNvdW50KyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBmaWx0ZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgICAgICAgICBmaWx0ZXIudHlwZSA9IHRoaXMuX3R5cGU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KGZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdChmaWx0ZXIuZGV0dW5lKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuUS5jb25uZWN0KGZpbHRlci5RKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZ2Fpbi5jb25uZWN0KGZpbHRlci5nYWluKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbY291bnRdID0gZmlsdGVyO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vY29ubmVjdCB0aGVtIHVwXG5cdCAgICAgICAgICAgIHZhciBjb25uZWN0aW9uQ2hhaW4gPSBbdGhpcy5pbnB1dF0uY29uY2F0KHRoaXMuX2ZpbHRlcnMpLmNvbmNhdChbdGhpcy5vdXRwdXRdKTtcblx0ICAgICAgICAgICAgVG9uZS5jb25uZWN0U2VyaWVzLmFwcGx5KFRvbmUsIGNvbm5lY3Rpb25DaGFpbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZpbHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZmlsdGVycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2ldLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tpXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZ2FpbicsXG5cdCAgICAgICAgICAgICdRJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLlEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLlEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5nYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmdhaW4gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZpbHRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFNwbGl0IHRoZSBpbmNvbWluZyBzaWduYWwgaW50byB0aHJlZSBiYW5kcyAobG93LCBtaWQsIGhpZ2gpXG5cdFx0ICogICAgICAgICB3aXRoIHR3byBjcm9zc292ZXIgZnJlcXVlbmN5IGNvbnRyb2xzLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2xvd0ZyZXF1ZW5jeV0gdGhlIGxvdy9taWQgY3Jvc3NvdmVyIGZyZXF1ZW5jeVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gW2hpZ2hGcmVxdWVuY3ldIHRoZSBtaWQvaGlnaCBjcm9zc292ZXIgZnJlcXVlbmN5XG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZFNwbGl0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5J1xuXHQgICAgICAgIF0sIFRvbmUuTXVsdGliYW5kU3BsaXQpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGlucHV0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgb3V0cHV0c1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSBuZXcgQXJyYXkoMyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxvdyBiYW5kLiBBbGlhcyBmb3IgPGNvZGU+b3V0cHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93ID0gdGhpcy5vdXRwdXRbMF0gPSBuZXcgVG9uZS5GaWx0ZXIoMCwgJ2xvd3Bhc3MnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbG93ZXIgZmlsdGVyIG9mIHRoZSBtaWQgYmFuZFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG93TWlkRmlsdGVyID0gbmV3IFRvbmUuRmlsdGVyKDAsICdoaWdocGFzcycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQgYmFuZCBvdXRwdXQuIEFsaWFzIGZvciA8Y29kZT5vdXRwdXRbMV08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSB0aGlzLm91dHB1dFsxXSA9IG5ldyBUb25lLkZpbHRlcigwLCAnbG93cGFzcycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBoaWdoIGJhbmQgb3V0cHV0LiBBbGlhcyBmb3IgPGNvZGU+b3V0cHV0WzJdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaCA9IHRoaXMub3V0cHV0WzJdID0gbmV3IFRvbmUuRmlsdGVyKDAsICdoaWdocGFzcycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsb3cvbWlkIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmxvd0ZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZC9oaWdoIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5oaWdoRnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcXVhbGl0eSBvZiBhbGwgdGhlIGZpbHRlcnNcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuUSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLlEpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuZmFuKHRoaXMubG93LCB0aGlzLmhpZ2gpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY2hhaW4odGhpcy5fbG93TWlkRmlsdGVyLCB0aGlzLm1pZCk7XG5cdCAgICAgICAgLy90aGUgZnJlcXVlbmN5IGNvbnRyb2wgc2lnbmFsXG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kuY29ubmVjdCh0aGlzLmxvdy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fbG93TWlkRmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5LmNvbm5lY3QodGhpcy5taWQuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kuY29ubmVjdCh0aGlzLmhpZ2guZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3RoZSBRIHZhbHVlXG5cdCAgICAgICAgdGhpcy5RLmNvbm5lY3QodGhpcy5sb3cuUSk7XG5cdCAgICAgICAgdGhpcy5RLmNvbm5lY3QodGhpcy5fbG93TWlkRmlsdGVyLlEpO1xuXHQgICAgICAgIHRoaXMuUS5jb25uZWN0KHRoaXMubWlkLlEpO1xuXHQgICAgICAgIHRoaXMuUS5jb25uZWN0KHRoaXMuaGlnaC5RKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdoaWdoJyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NdWx0aWJhbmRTcGxpdCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kU3BsaXQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2xvd0ZyZXF1ZW5jeSc6IDQwMCxcblx0ICAgICAgICAnaGlnaEZyZXF1ZW5jeSc6IDI1MDAsXG5cdCAgICAgICAgJ1EnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NdWx0aWJhbmRTcGxpdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRTcGxpdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmxvdy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5sb3cgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xvd01pZEZpbHRlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbG93TWlkRmlsdGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oaWdoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLlEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuUSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTXVsdGliYW5kU3BsaXQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkVRMyBpcyBhIHRocmVlIGJhbmQgRVEgd2l0aCBjb250cm9sIG92ZXIgbG93LCBtaWQsIGFuZCBoaWdoIGdhaW4gYXNcblx0XHQgKiAgICAgICAgIHdlbGwgYXMgdGhlIGxvdyBhbmQgaGlnaCBjcm9zc292ZXIgZnJlcXVlbmNpZXMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfE9iamVjdH0gW2xvd0xldmVsXSBUaGUgZ2FpbiBhcHBsaWVkIHRvIHRoZSBsb3dzLlxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfSBbbWlkTGV2ZWxdIFRoZSBnYWluIGFwcGxpZWQgdG8gdGhlIG1pZC5cblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc30gW2hpZ2hMZXZlbF0gVGhlIGdhaW4gYXBwbGllZCB0byB0aGUgaGlnaC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZXEgPSBuZXcgVG9uZS5FUTMoLTEwLCAzLCAtMjApO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FUTMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdoaWdoJ1xuXHQgICAgICAgIF0sIFRvbmUuRVEzKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBvdXRwdXQgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG11bHRpYmFuZCBzcGxpdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpYmFuZFNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdCA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5NdWx0aWJhbmRTcGxpdCh7XG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knOiBvcHRpb25zLmxvd0ZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knOiBvcHRpb25zLmhpZ2hGcmVxdWVuY3lcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBmb3IgdGhlIGxvd2VyIHNpZ25hbHNcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG93R2FpbiA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5sb3csIFRvbmUuVHlwZS5EZWNpYmVscyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gZm9yIHRoZSBtaWQgc2lnbmFsc1xuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRHYWluID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLm1pZCwgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBnYWluIGluIGRlY2liZWxzIG9mIHRoZSBoaWdoIHBhcnRcblx0XHRcdCAqIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faGlnaEdhaW4gPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMuaGlnaCwgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBnYWluIGluIGRlY2liZWxzIG9mIHRoZSBsb3cgcGFydFxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb3cgPSB0aGlzLl9sb3dHYWluLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZ2FpbiBpbiBkZWNpYmVscyBvZiB0aGUgbWlkIHBhcnRcblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkID0gdGhpcy5fbWlkR2Fpbi5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGdhaW4gaW4gZGVjaWJlbHMgb2YgdGhlIGhpZ2ggcGFydFxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoID0gdGhpcy5faGlnaEdhaW4uZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgUSB2YWx1ZSBmb3IgYWxsIG9mIHRoZSBmaWx0ZXJzLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlEgPSB0aGlzLl9tdWx0aWJhbmRTcGxpdC5RO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsb3cvbWlkIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IHRoaXMuX211bHRpYmFuZFNwbGl0Lmxvd0ZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkL2hpZ2ggY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeSA9IHRoaXMuX211bHRpYmFuZFNwbGl0LmhpZ2hGcmVxdWVuY3k7XG5cdCAgICAgICAgLy90aGUgZnJlcXVlbmN5IGJhbmRzXG5cdCAgICAgICAgdGhpcy5fbXVsdGliYW5kU3BsaXQubG93LmNoYWluKHRoaXMuX2xvd0dhaW4sIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdC5taWQuY2hhaW4odGhpcy5fbWlkR2FpbiwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0LmhpZ2guY2hhaW4odGhpcy5faGlnaEdhaW4sIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5FUTMsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRVEzLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdsb3cnOiAwLFxuXHQgICAgICAgICdtaWQnOiAwLFxuXHQgICAgICAgICdoaWdoJzogMCxcblx0ICAgICAgICAnbG93RnJlcXVlbmN5JzogNDAwLFxuXHQgICAgICAgICdoaWdoRnJlcXVlbmN5JzogMjUwMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FUTN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRVEzLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdoaWdoJyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbG93R2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbG93R2FpbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkR2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkR2FpbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5faGlnaEdhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2hpZ2hHYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmxvdyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5RID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FUTM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgUGVyZm9ybXMgYSBsaW5lYXIgc2NhbGluZyBvbiBhbiBpbnB1dCBzaWduYWwuXG5cdFx0ICogICAgICAgICAgU2NhbGVzIGEgTm9ybWFsUmFuZ2UgaW5wdXQgdG8gYmV0d2VlblxuXHRcdCAqICAgICAgICAgIG91dHB1dE1pbiBhbmQgb3V0cHV0TWF4LlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE1pbj0wXSBUaGUgb3V0cHV0IHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIDAuIFxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE1heD0xXVx0VGhlIG91dHB1dCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyAxLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2NhbGUgPSBuZXcgVG9uZS5TY2FsZSg1MCwgMTAwKTtcblx0XHQgKiB2YXIgc2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKDAuNSkuY29ubmVjdChzY2FsZSk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIHNjYWxlIGVxdWFscyA3NVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZSA9IGZ1bmN0aW9uIChvdXRwdXRNaW4sIG91dHB1dE1heCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKiBcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vdXRwdXRNaW4gPSBUb25lLmRlZmF1bHRBcmcob3V0cHV0TWluLCAwKTtcblx0ICAgICAgICAvKiogXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3V0cHV0TWF4ID0gVG9uZS5kZWZhdWx0QXJnKG91dHB1dE1heCwgMSk7XG5cdCAgICAgICAgLyoqIFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk11bHRpcGx5KDEpO1xuXHQgICAgICAgIC8qKiBcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFkZH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWRkID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5BZGQoMCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuY29ubmVjdCh0aGlzLl9hZGQpO1xuXHQgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TY2FsZSwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtaW5pbXVtIG91dHB1dCB2YWx1ZS4gVGhpcyBudW1iZXIgaXMgb3V0cHV0IHdoZW4gXG5cdFx0ICogdGhlIHZhbHVlIGlucHV0IHZhbHVlIGlzIDAuIFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZS5wcm90b3R5cGUsICdtaW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRNaW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3V0cHV0TWluID0gbWluO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSYW5nZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gb3V0cHV0IHZhbHVlLiBUaGlzIG51bWJlciBpcyBvdXRwdXQgd2hlbiBcblx0XHQgKiB0aGUgdmFsdWUgaW5wdXQgdmFsdWUgaXMgMS4gXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtYXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlLnByb3RvdHlwZSwgJ21heCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dE1heDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1heCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXRNYXggPSBtYXg7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgc2V0IHRoZSB2YWx1ZXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGUucHJvdG90eXBlLl9zZXRSYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9hZGQudmFsdWUgPSB0aGlzLl9vdXRwdXRNaW47XG5cdCAgICAgICAgdGhpcy5fc2NhbGUudmFsdWUgPSB0aGlzLl9vdXRwdXRNYXggLSB0aGlzLl9vdXRwdXRNaW47XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TY2FsZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hZGQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FkZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TY2FsZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgUGVyZm9ybXMgYW4gZXhwb25lbnRpYWwgc2NhbGluZyBvbiBhbiBpbnB1dCBzaWduYWwuXG5cdFx0ICogICAgICAgICAgU2NhbGVzIGEgTm9ybWFsUmFuZ2UgdmFsdWUgWzAsMV0gZXhwb25lbnRpYWxseVxuXHRcdCAqICAgICAgICAgIHRvIHRoZSBvdXRwdXQgcmFuZ2Ugb2Ygb3V0cHV0TWluIHRvIG91dHB1dE1heC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXRNaW49MF0gVGhlIG91dHB1dCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyAwLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE1heD0xXVx0VGhlIG91dHB1dCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyAxLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW2V4cG9uZW50PTJdIFRoZSBleHBvbmVudCB3aGljaCBzY2FsZXMgdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2NhbGVFeHAgPSBuZXcgVG9uZS5TY2FsZUV4cCgwLCAxMDAsIDIpO1xuXHRcdCAqIHZhciBzaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoMC41KS5jb25uZWN0KHNjYWxlRXhwKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVFeHAgPSBmdW5jdGlvbiAob3V0cHV0TWluLCBvdXRwdXRNYXgsIGV4cG9uZW50KSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc2NhbGUgdGhlIGlucHV0IHRvIHRoZSBvdXRwdXQgcmFuZ2Vcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TY2FsZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlNjYWxlKG91dHB1dE1pbiwgb3V0cHV0TWF4KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlBvd31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXhwID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLlBvdyhUb25lLmRlZmF1bHRBcmcoZXhwb25lbnQsIDIpKTtcblx0ICAgICAgICB0aGlzLl9leHAuY29ubmVjdCh0aGlzLl9zY2FsZSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TY2FsZUV4cCwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIEluc3RlYWQgb2YgaW50ZXJwb2xhdGluZyBsaW5lYXJseSBiZXR3ZWVuIHRoZSA8Y29kZT5taW48L2NvZGU+IGFuZFxuXHRcdCAqIDxjb2RlPm1heDwvY29kZT4gdmFsdWVzLCBzZXR0aW5nIHRoZSBleHBvbmVudCB3aWxsIGludGVycG9sYXRlIGJldHdlZW5cblx0XHQgKiB0aGUgdHdvIHZhbHVlcyB3aXRoIGFuIGV4cG9uZW50aWFsIGN1cnZlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlRXhwI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgZXhwb25lbnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlRXhwLnByb3RvdHlwZSwgJ2V4cG9uZW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhwLnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V4cC52YWx1ZSA9IGV4cDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtaW5pbXVtIG91dHB1dCB2YWx1ZS4gVGhpcyBudW1iZXIgaXMgb3V0cHV0IHdoZW5cblx0XHQgKiB0aGUgdmFsdWUgaW5wdXQgdmFsdWUgaXMgMC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZUV4cCNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVFeHAucHJvdG90eXBlLCAnbWluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGUubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWluKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1pbiA9IG1pbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIG91dHB1dCB2YWx1ZS4gVGhpcyBudW1iZXIgaXMgb3V0cHV0IHdoZW5cblx0XHQgKiB0aGUgdmFsdWUgaW5wdXQgdmFsdWUgaXMgMS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZUV4cCNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1heFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVFeHAucHJvdG90eXBlLCAnbWF4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGUubWF4O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWF4KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1heCA9IG1heDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2NhbGVFeHB9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVFeHAucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9leHAuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2V4cCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2NhbGVFeHA7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcGVyIGFyb3VuZCBXZWIgQXVkaW8ncyBuYXRpdmUgW0RlbGF5Tm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtZGVsYXlub2RlLWludGVyZmFjZSkuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSBkZWxheVRpbWUgVGhlIGRlbGF5IGFwcGxpZWQgdG8gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gbWF4RGVsYXkgVGhlIG1heGltdW0gZGVsYXkgdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuRGVsYXkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ21heERlbGF5J1xuXHQgICAgICAgIF0sIFRvbmUuRGVsYXkpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgbWF4aW11bSBkZWxheSB0aW1lIGluaXRpYWxpemVkIHdpdGggdGhlIG5vZGVcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWF4RGVsYXkgPSBNYXRoLm1heCh0aGlzLnRvU2Vjb25kcyhvcHRpb25zLm1heERlbGF5KSwgdGhpcy50b1NlY29uZHMob3B0aW9ucy5kZWxheVRpbWUpKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbmF0aXZlIGRlbGF5IG5vZGVcblx0XHRcdCAqICBAdHlwZSB7RGVsYXlOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlRGVsYXkodGhpcy5fbWF4RGVsYXkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgdGltZSB0aGUgaW5jb21pbmcgc2lnbmFsIGlzXG5cdFx0XHQgKiAgZGVsYXllZC5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fZGVsYXlOb2RlLmRlbGF5VGltZSxcblx0ICAgICAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLlRpbWUsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IG9wdGlvbnMuZGVsYXlUaW1lXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2RlbGF5VGltZScpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRGVsYXksIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EZWxheS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbWF4RGVsYXknOiAxLFxuXHQgICAgICAgICdkZWxheVRpbWUnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gZGVsYXkgdGltZS4gVGhpcyBjYW5ub3QgYmUgY2hhbmdlZC4gVGhlIHZhbHVlIGlzIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3Rvci5cblx0XHQgKiBAbWVtYmVyb2YgVG9uZS5EZWxheSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBtYXhEZWxheVxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRGVsYXkucHJvdG90eXBlLCAnbWF4RGVsYXknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXhEZWxheTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRGVsYXl9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkRlbGF5LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdkZWxheVRpbWUnKTtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRGVsYXk7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBDb21iIGZpbHRlcnMgYXJlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrcyBmb3IgcGh5c2ljYWwgbW9kZWxpbmcuIFJlYWQgbW9yZVxuXHRcdCAqICAgICAgICAgYWJvdXQgY29tYiBmaWx0ZXJzIG9uIFtDQ1JNQSdzIHdlYnNpdGVdKGh0dHBzOi8vY2NybWEuc3RhbmZvcmQuZWR1L35qb3MvcGFzcC9GZWVkYmFja19Db21iX0ZpbHRlcnMuaHRtbCkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2RlbGF5VGltZV0gVGhlIGRlbGF5IHRpbWUgb2YgdGhlIGZpbHRlci5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZT19IHJlc29uYW5jZSBUaGUgYW1vdW50IG9mIGZlZWRiYWNrIHRoZSBmaWx0ZXIgaGFzLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZSdcblx0ICAgICAgICBdLCBUb25lLkZlZWRiYWNrQ29tYkZpbHRlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtEZWxheU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuRGVsYXkob3B0aW9ucy5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZGVsYXkgb2YgdGhlIGNvbWIgZmlsdGVyLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gdGhpcy5fZGVsYXkuZGVsYXlUaW1lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBmZWVkYmFjayBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFjayA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5yZXNvbmFuY2UsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBmZWVkYmFjayBvZiB0aGUgZGVsYXllZCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gdGhpcy5fZmVlZGJhY2suZ2Fpbjtcblx0ICAgICAgICB0aGlzLl9kZWxheS5jaGFpbih0aGlzLl9mZWVkYmFjaywgdGhpcy5fZGVsYXkpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrQ29tYkZpbHRlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMC4xLFxuXHQgICAgICAgICdyZXNvbmFuY2UnOiAwLjVcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRmVlZGJhY2tDb21iRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrQ29tYkZpbHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJlc29uYW5jZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBHZXQgdGhlIGN1cnJlbnQgd2F2ZWZvcm0gZGF0YSBvZiB0aGUgY29ubmVjdGVkIGF1ZGlvIHNvdXJjZS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IHNpemUgVGhlIHNpemUgb2YgdGhlIEZGVC4gVmFsdWUgbXVzdCBiZSBhIHBvd2VyIG9mXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICovXG5cdCAgICBUb25lLkZGVCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3NpemUnXSwgVG9uZS5GRlQpO1xuXHQgICAgICAgIG9wdGlvbnMudHlwZSA9IFRvbmUuQW5hbHlzZXIuVHlwZS5GRlQ7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW5hbHlzZXIgbm9kZS5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFuYWx5c2VyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5BbmFseXNlcihvcHRpb25zKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZGVCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy5cblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkZGVC5kZWZhdWx0cyA9IHsgJ3NpemUnOiAxMDI0IH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0cyB0aGUgd2F2ZWZvcm0gb2YgdGhlIGF1ZGlvIHNvdXJjZS4gUmV0dXJucyB0aGUgd2F2ZWZvcm0gZGF0YVxuXHRcdCAqICBvZiBsZW5ndGggW3NpemVdKCNzaXplKSBhcyBhIEZsb2F0MzJBcnJheSB3aXRoIHZhbHVlcyBiZXR3ZWVuIC0xIGFuZCAxLlxuXHRcdCAqICBAcmV0dXJucyB7VHlwZWRBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuRkZULnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuZ2V0VmFsdWUoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHNpemUgb2YgYW5hbHlzaXMuIFRoaXMgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkZGVCNcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgc2l6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRkZULnByb3RvdHlwZSwgJ3NpemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5zaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2l6ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5zaXplID0gc2l6ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRkZUfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GRlQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZGVDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFJldHVybiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYW4gaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoLTEpO1xuXHRcdCAqIHZhciBhYnMgPSBuZXcgVG9uZS5BYnMoKTtcblx0XHQgKiBzaWduYWwuY29ubmVjdChhYnMpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBhYnMgaXMgMS5cblx0XHQgKi9cblx0ICAgIFRvbmUuQWJzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxlc3NUaGFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hYnMgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgaWYgKE1hdGguYWJzKHZhbCkgPCAwLjAwMSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5hYnModmFsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sIDEwMjQpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQWJzLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgbWV0aG9kXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkFic30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BYnMucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYWJzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hYnMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFicztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkZvbGxvd2VyIGlzIGEgIGNydWRlIGVudmVsb3BlIGZvbGxvd2VyIHdoaWNoIHdpbGwgZm9sbG93XG5cdFx0ICogICAgICAgICAgdGhlIGFtcGxpdHVkZSBvZiBhbiBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogICAgICAgICAgVGFrZSBjYXJlIHdpdGggc21hbGwgKDwgMC4wMikgYXR0YWNrIG9yIGRlY2F5IHZhbHVlc1xuXHRcdCAqICAgICAgICAgIGFzIGZvbGxvd2VyIGhhcyBzb21lIHJpcHBsZSB3aGljaCBpcyBleGFnZ2VyYXRlZFxuXHRcdCAqICAgICAgICAgIGF0IHRoZXNlIHZhbHVlcy4gUmVhZCBtb3JlIGFib3V0IGVudmVsb3BlIGZvbGxvd2VycyAoYWxzbyBrbm93blxuXHRcdCAqICAgICAgICAgIGFzIGVudmVsb3BlIGRldGVjdG9ycykgb24gW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRW52ZWxvcGVfZGV0ZWN0b3IpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFthdHRhY2tdIFRoZSByYXRlIGF0IHdoaWNoIHRoZSBmb2xsb3dlciByaXNlcy5cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gcmVsZWFzZSBUaGUgcmF0ZSBhdCB3aGljaCB0aGUgZm9sb3dlciBmYWxscy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZm9sbG93ZXIgPSBuZXcgVG9uZS5Gb2xsb3dlcigwLjIsIDAuNCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkZvbGxvd2VyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJ1xuXHQgICAgICAgIF0sIFRvbmUuRm9sbG93ZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFic31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWJzID0gbmV3IFRvbmUuQWJzKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxvd3Bhc3MgZmlsdGVyIHdoaWNoIHNtb290aHMgdGhlIGlucHV0XG5cdFx0XHQgKiAgQHR5cGUge0JpcXVhZEZpbHRlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlciA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXIudHlwZSA9ICdsb3dwYXNzJztcblx0ICAgICAgICB0aGlzLl9maWx0ZXIuZnJlcXVlbmN5LnZhbHVlID0gMDtcblx0ICAgICAgICB0aGlzLl9maWx0ZXIuUS52YWx1ZSA9IC0xMDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1YiA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gbmV3IFRvbmUuRGVsYXkodGhpcy5ibG9ja1RpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoaXMga2VlcHMgaXQgZmFyIGZyb20gMCwgZXZlbiBmb3IgdmVyeSBzbWFsbCBkaWZmZXJlbmNlc1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoMTAwMDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2F0dGFjayA9IG9wdGlvbnMuYXR0YWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3JlbGVhc2UgPSBvcHRpb25zLnJlbGVhc2U7XG5cdCAgICAgICAgLy90aGUgc21vb3RoZWQgc2lnbmFsIHRvIGdldCB0aGUgdmFsdWVzXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jaGFpbih0aGlzLl9hYnMsIHRoaXMuX2ZpbHRlciwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIC8vdGhlIGRpZmZlcmVuY2UgcGF0aFxuXHQgICAgICAgIHRoaXMuX2Ficy5jb25uZWN0KHRoaXMuX3N1YiwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyLmNoYWluKHRoaXMuX2RlbGF5LCB0aGlzLl9zdWIpO1xuXHQgICAgICAgIC8vdGhyZXNob2xkIHRoZSBkaWZmZXJlbmNlIGFuZCB1c2UgdGhlIHRocmVzaCB0byBzZXQgdGhlIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuX3N1Yi5jaGFpbih0aGlzLl9tdWx0LCB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMsIHRoaXMuX2ZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBhdHRhY2sgYW5kIHJlbGVhc2UgdmFsdWVzIGluIHRoZSB0YWJsZVxuXHQgICAgICAgIHRoaXMuX3NldEF0dGFja1JlbGVhc2UodGhpcy5fYXR0YWNrLCB0aGlzLl9yZWxlYXNlKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZvbGxvd2VyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Gb2xsb3dlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYXR0YWNrJzogMC4wNSxcblx0ICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzZXRzIHRoZSBhdHRhY2sgYW5kIHJlbGVhc2UgdGltZXMgaW4gdGhlIHdhdmUgc2hhcGVyXG5cdFx0ICogIEBwYXJhbSAgIHtUaW1lfSBhdHRhY2tcblx0XHQgKiAgQHBhcmFtICAge1RpbWV9IHJlbGVhc2Vcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRm9sbG93ZXIucHJvdG90eXBlLl9zZXRBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKGF0dGFjaywgcmVsZWFzZSkge1xuXHQgICAgICAgIHZhciBtaW5UaW1lID0gdGhpcy5ibG9ja1RpbWU7XG5cdCAgICAgICAgYXR0YWNrID0gVG9uZS5UaW1lKGF0dGFjaykudG9GcmVxdWVuY3koKTtcblx0ICAgICAgICByZWxlYXNlID0gVG9uZS5UaW1lKHJlbGVhc2UpLnRvRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgYXR0YWNrID0gTWF0aC5tYXgoYXR0YWNrLCBtaW5UaW1lKTtcblx0ICAgICAgICByZWxlYXNlID0gTWF0aC5tYXgocmVsZWFzZSwgbWluVGltZSk7XG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5VmFsdWVzLnNldE1hcChmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGlmICh2YWwgPD0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGF0dGFjaztcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiByZWxlYXNlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGF0dGFjayB0aW1lLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZvbGxvd2VyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGF0dGFja1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRm9sbG93ZXIucHJvdG90eXBlLCAnYXR0YWNrJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNrO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYXR0YWNrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2F0dGFjayA9IGF0dGFjaztcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QXR0YWNrUmVsZWFzZSh0aGlzLl9hdHRhY2ssIHRoaXMuX3JlbGVhc2UpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJlbGVhc2UgdGltZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Gb2xsb3dlciNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSByZWxlYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Gb2xsb3dlci5wcm90b3R5cGUsICdyZWxlYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVsZWFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJlbGVhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcmVsZWFzZSA9IHJlbGVhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldEF0dGFja1JlbGVhc2UodGhpcy5fYXR0YWNrLCB0aGlzLl9yZWxlYXNlKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBCb3Jyb3dzIHRoZSBjb25uZWN0IG1ldGhvZCBmcm9tIFNpZ25hbCBzbyB0aGF0IHRoZSBvdXRwdXQgY2FuIGJlIHVzZWRcblx0XHQgKiAgYXMgYSBUb25lLlNpZ25hbCBjb250cm9sIHNpZ25hbC5cblx0XHQgKiAgQGZ1bmN0aW9uXG5cdFx0ICovXG5cdCAgICBUb25lLkZvbGxvd2VyLnByb3RvdHlwZS5jb25uZWN0ID0gVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0O1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2Vcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRm9sbG93ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRm9sbG93ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5VmFsdWVzLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3ViLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9zdWIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2Ficy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYWJzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tdWx0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRm9sbG93ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlNjYWxlZEVudmVsb3AgaXMgYW4gZW52ZWxvcGUgd2hpY2ggY2FuIGJlIHNjYWxlZFxuXHRcdCAqICAgICAgICAgdG8gYW55IHJhbmdlLiBJdCdzIHVzZWZ1bCBmb3IgYXBwbHlpbmcgYW4gZW52ZWxvcGVcblx0XHQgKiAgICAgICAgIHRvIGEgZnJlcXVlbmN5IG9yIGFueSBvdGhlciBub24tTm9ybWFsUmFuZ2Ugc2lnbmFsXG5cdFx0ICogICAgICAgICBwYXJhbWV0ZXIuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW52ZWxvcGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbYXR0YWNrXVx0dGhlIGF0dGFjayB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbZGVjYXldXHR0aGUgZGVjYXkgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbc3VzdGFpbl0gXHRhIHBlcmNlbnRhZ2UgKDAtMSkgb2YgdGhlIGZ1bGwgYW1wbGl0dWRlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3JlbGVhc2VdXHR0aGUgcmVsZWFzZSB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIHNjYWxlZEVudiA9IG5ldyBUb25lLlNjYWxlZEVudmVsb3BlKHtcblx0XHQgKiAgXHRcImF0dGFja1wiIDogMC4yLFxuXHRcdCAqICBcdFwibWluXCIgOiAyMDAsXG5cdFx0ICogIFx0XCJtYXhcIiA6IDIwMDBcblx0XHQgKiAgfSk7XG5cdFx0ICogIHNjYWxlZEVudi5jb25uZWN0KG9zY2lsbGF0b3IuZnJlcXVlbmN5KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVkRW52ZWxvcGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9nZXQgYWxsIG9mIHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdkZWNheScsXG5cdCAgICAgICAgICAgICdzdXN0YWluJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnXG5cdCAgICAgICAgXSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAgICAgVG9uZS5FbnZlbG9wZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5TY2FsZWRFbnZlbG9wZS5kZWZhdWx0cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc2NhbGUgdGhlIGluY29taW5nIHNpZ25hbCBieSBhbiBleHBvbmVudFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlBvd31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXhwID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Qb3cob3B0aW9ucy5leHBvbmVudCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc2NhbGUgdGhlIHNpZ25hbCB0byB0aGUgZGVzaXJlZCByYW5nZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuU2NhbGUob3B0aW9ucy5taW4sIG9wdGlvbnMubWF4KTtcblx0ICAgICAgICB0aGlzLl9zaWcuY2hhaW4odGhpcy5fZXhwLCB0aGlzLl9zY2FsZSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TY2FsZWRFbnZlbG9wZSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlZEVudmVsb3BlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICdtYXgnOiAxLFxuXHQgICAgICAgICdleHBvbmVudCc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZW52ZWxvcGUncyBtaW4gb3V0cHV0IHZhbHVlLiBUaGlzIGlzIHRoZSB2YWx1ZSB3aGljaCBpdFxuXHRcdCAqIHN0YXJ0cyBhdC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZWRFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVkRW52ZWxvcGUucHJvdG90eXBlLCAnbWluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGUubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWluKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1pbiA9IG1pbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBlbnZlbG9wZSdzIG1heCBvdXRwdXQgdmFsdWUuIEluIG90aGVyIHdvcmRzLCB0aGUgdmFsdWVcblx0XHQgKiBhdCB0aGUgcGVhayBvZiB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlZEVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWF4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZWRFbnZlbG9wZS5wcm90b3R5cGUsICdtYXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZS5tYXg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWF4ID0gbWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGVudmVsb3BlJ3MgZXhwb25lbnQgdmFsdWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGVkRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBleHBvbmVudFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVkRW52ZWxvcGUucHJvdG90eXBlLCAnZXhwb25lbnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHAudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXhwLnZhbHVlID0gZXhwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNjYWxlZEVudmVsb3BlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlZEVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2V4cC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXhwID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TY2FsZWRFbnZlbG9wZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUgaXMgYSBUb25lLlNjYWxlZEVudmVsb3BlLCBidXQgaW5zdGVhZCBvZiBgbWluYCBhbmQgYG1heGBcblx0XHQgKiAgICAgICAgIGl0J3MgZ290IGEgYGJhc2VGcmVxdWVuY3lgIGFuZCBgb2N0YXZlc2AgcGFyYW1ldGVyLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVudmVsb3BlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2F0dGFja11cdHRoZSBhdHRhY2sgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW2RlY2F5XVx0dGhlIGRlY2F5IHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3N1c3RhaW5dIFx0YSBwZXJjZW50YWdlICgwLTEpIG9mIHRoZSBmdWxsIGFtcGxpdHVkZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtyZWxlYXNlXVx0dGhlIHJlbGVhc2UgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBmcmVxRW52ID0gbmV3IFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUoe1xuXHRcdCAqICBcdFwiYXR0YWNrXCIgOiAwLjIsXG5cdFx0ICogIFx0XCJiYXNlRnJlcXVlbmN5XCIgOiBcIkMyXCIsXG5cdFx0ICogIFx0XCJvY3RhdmVzXCIgOiA0XG5cdFx0ICogIH0pO1xuXHRcdCAqICBmcmVxRW52LmNvbm5lY3Qob3NjaWxsYXRvci5mcmVxdWVuY3kpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAnZGVjYXknLFxuXHQgICAgICAgICAgICAnc3VzdGFpbicsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJ1xuXHQgICAgICAgIF0sIFRvbmUuRW52ZWxvcGUpO1xuXHQgICAgICAgIFRvbmUuU2NhbGVkRW52ZWxvcGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvL21lcmdlIGl0IHdpdGggdGhlIGZyZXF1ZW5jeSBlbnZlbG9wZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5kZWZhdWx0cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU3RvcmVzIHRoZSBvY3RhdmUgdmFsdWVcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLy9zZXR1cFxuXHQgICAgICAgIHRoaXMuYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICB0aGlzLm9jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeUVudmVsb3BlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdiYXNlRnJlcXVlbmN5JzogMjAwLFxuXHQgICAgICAgICdvY3RhdmVzJzogNCxcblx0ICAgICAgICAnZXhwb25lbnQnOiAyXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGVudmVsb3BlJ3MgbWluaW51bSBvdXRwdXQgdmFsdWUuIFRoaXMgaXMgdGhlIHZhbHVlIHdoaWNoIGl0XG5cdFx0ICogc3RhcnRzIGF0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZyZXF1ZW5jeUVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogQG5hbWUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUucHJvdG90eXBlLCAnYmFzZUZyZXF1ZW5jeScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjYWxlLm1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZS5taW4gPSB0aGlzLnRvRnJlcXVlbmN5KG1pbik7XG5cdCAgICAgICAgICAgIC8vYWxzbyB1cGRhdGUgdGhlIG9jdGF2ZXNcblx0ICAgICAgICAgICAgdGhpcy5vY3RhdmVzID0gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyBhYm92ZSB0aGUgYmFzZUZyZXF1ZW5jeSB0aGF0IHRoZVxuXHRcdCAqIGVudmVsb3BlIHdpbGwgc2NhbGUgdG8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBuYW1lIG9jdGF2ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZyZXF1ZW5jeUVudmVsb3BlLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0YXZlcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0YXZlcztcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWF4ID0gdGhpcy5iYXNlRnJlcXVlbmN5ICogTWF0aC5wb3coMiwgb2N0YXZlcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZW52ZWxvcGUncyBleHBvbmVudCB2YWx1ZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIGV4cG9uZW50XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5wcm90b3R5cGUsICdleHBvbmVudCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cC52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgICAgICB0aGlzLl9leHAudmFsdWUgPSBleHA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRnJlcXVlbmN5RW52ZWxvcGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TY2FsZWRFbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeUVudmVsb3BlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEdyZWF0ZXJUaGFuWmVybyBvdXRwdXRzIDEgd2hlbiB0aGUgaW5wdXQgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIHplcm9cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZ3QwID0gbmV3IFRvbmUuR3JlYXRlclRoYW5aZXJvKCk7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCgwLjAxKS5jb25uZWN0KGd0MCk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIGd0MCBpcyAxLlxuXHRcdCAqIHNpZy52YWx1ZSA9IDA7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIGd0MCBpcyAwLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmVhdGVyVGhhblplcm8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGhyZXNoID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgaWYgKHZhbCA8PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSwgMTI3KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgZmlyc3QgdGhyZXNob2xkZWQgc2lnbmFsIGJ5IGEgbGFyZ2UgdmFsdWUuXG5cdFx0XHQgKiAgdGhpcyB3aWxsIGhlbHAgd2l0aCB2YWx1ZXMgd2hpY2ggYXJlIHZlcnkgY2xvc2UgdG8gMFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5NdWx0aXBseSgxMDAwMCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmNvbm5lY3QodGhpcy5fdGhyZXNoKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdyZWF0ZXJUaGFuWmVybywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNwb3NlIG1ldGhvZFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5HcmVhdGVyVGhhblplcm99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JlYXRlclRoYW5aZXJvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdGhyZXNoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aHJlc2ggPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdyZWF0ZXJUaGFuWmVybztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBPdXRwdXQgMSBpZiB0aGUgc2lnbmFsIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUsIG90aGVyd2lzZSBvdXRwdXRzIDAuXG5cdFx0ICogICAgICAgICAgY2FuIGNvbXBhcmUgdHdvIHNpZ25hbHMgb3IgYSBzaWduYWwgYW5kIGEgbnVtYmVyLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmFsdWU9MF0gdGhlIHZhbHVlIHRvIGNvbXBhcmUgdG8gdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBndCA9IG5ldyBUb25lLkdyZWF0ZXJUaGFuKDIpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoNCkuY29ubmVjdChndCk7XG5cdFx0ICogLy9vdXRwdXQgb2YgZ3QgaXMgZXF1YWwgMS5cblx0XHQgKi9cblx0ICAgIFRvbmUuR3JlYXRlclRoYW4gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzdWJ0cmFjdCB0aGUgYW1vdW50IGZyb20gdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuaW5wdXRbMF0gPSBuZXcgVG9uZS5TdWJ0cmFjdCh2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5pbnB1dFsxXSA9IHRoaXMuX3BhcmFtLmlucHV0WzFdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbXBhcmUgdGhhdCBhbW91bnQgdG8gemVyb1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdyZWF0ZXJUaGFuWmVyb31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ3R6ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HcmVhdGVyVGhhblplcm8oKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rcblx0ICAgICAgICB0aGlzLl9wYXJhbS5jb25uZWN0KHRoaXMuX2d0eik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5HcmVhdGVyVGhhbiwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgbWV0aG9kXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkdyZWF0ZXJUaGFufSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdyZWF0ZXJUaGFuLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZ3R6LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ndHogPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdyZWF0ZXJUaGFuO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuR2F0ZSBvbmx5IHBhc3NlcyBhIHNpZ25hbCB0aHJvdWdoIHdoZW4gdGhlIGluY29taW5nXG5cdFx0ICogICAgICAgICAgc2lnbmFsIGV4Y2VlZHMgYSBzcGVjaWZpZWQgdGhyZXNob2xkLiBUbyBkbyB0aGlzLCBHYXRlIHVzZXNcblx0XHQgKiAgICAgICAgICBhIFRvbmUuRm9sbG93ZXIgdG8gZm9sbG93IHRoZSBhbXBsaXR1ZGUgb2YgdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgICAgICAgICBBIGNvbW1vbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzIGlzIGEgW05vaXNlIEdhdGVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL05vaXNlX2dhdGUpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN8T2JqZWN0fSBbdGhyZXNob2xkXSBUaGUgdGhyZXNob2xkIGFib3ZlIHdoaWNoIHRoZSBnYXRlIHdpbGwgb3Blbi5cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gYXR0YWNrIFRoZSBmb2xsb3dlcidzIGF0dGFjayB0aW1lXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHJlbGVhc2UgVGhlIGZvbGxvd2VyJ3MgcmVsZWFzZSB0aW1lXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGdhdGUgPSBuZXcgVG9uZS5HYXRlKC0zMCwgMC4yLCAwLjMpLnRvTWFzdGVyKCk7XG5cdFx0ICogdmFyIG1pYyA9IG5ldyBUb25lLlVzZXJNZWRpYSgpLmNvbm5lY3QoZ2F0ZSk7XG5cdFx0ICogLy90aGUgZ2F0ZSB3aWxsIG9ubHkgcGFzcyB0aHJvdWdoIHRoZSBpbmNvbWluZ1xuXHRcdCAqIC8vc2lnbmFsIHdoZW4gaXQncyBsb3VkZXIgdGhhbiAtMzBkYlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HYXRlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCcsXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAncmVsZWFzZSdcblx0ICAgICAgICBdLCBUb25lLkdhdGUpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZvbGxvd2VyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mb2xsb3dlciA9IG5ldyBUb25lLkZvbGxvd2VyKG9wdGlvbnMuYXR0YWNrLCBvcHRpb25zLnJlbGVhc2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdyZWF0ZXJUaGFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ndCA9IG5ldyBUb25lLkdyZWF0ZXJUaGFuKFRvbmUuZGJUb0dhaW4ob3B0aW9ucy50aHJlc2hvbGQpKTtcblx0ICAgICAgICAvL3RoZSBjb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgLy90aGUgY29udHJvbCBzaWduYWxcblx0ICAgICAgICB0aGlzLmlucHV0LmNoYWluKHRoaXMuX2d0LCB0aGlzLl9mb2xsb3dlciwgdGhpcy5vdXRwdXQuZ2Fpbik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5HYXRlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuR2F0ZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYXR0YWNrJzogMC4xLFxuXHQgICAgICAgICdyZWxlYXNlJzogMC4xLFxuXHQgICAgICAgICd0aHJlc2hvbGQnOiAtNDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdGhyZXNob2xkIG9mIHRoZSBnYXRlIGluIGRlY2liZWxzXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR2F0ZSNcblx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0ICogQG5hbWUgdGhyZXNob2xkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HYXRlLnByb3RvdHlwZSwgJ3RocmVzaG9sZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuZ2FpblRvRGIodGhpcy5fZ3QudmFsdWUpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodGhyZXNoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2d0LnZhbHVlID0gVG9uZS5kYlRvR2Fpbih0aHJlc2gpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGF0dGFjayBzcGVlZCBvZiB0aGUgZ2F0ZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdhdGUjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgYXR0YWNrXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HYXRlLnByb3RvdHlwZSwgJ2F0dGFjaycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbGxvd2VyLmF0dGFjaztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGF0dGFja1RpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZm9sbG93ZXIuYXR0YWNrID0gYXR0YWNrVGltZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSByZWxlYXNlIHNwZWVkIG9mIHRoZSBnYXRlXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR2F0ZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSByZWxlYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HYXRlLnByb3RvdHlwZSwgJ3JlbGVhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb2xsb3dlci5yZWxlYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmVsZWFzZVRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZm9sbG93ZXIucmVsZWFzZSA9IHJlbGVhc2VUaW1lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5HYXRlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdhdGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9mb2xsb3dlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZ3QuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZvbGxvd2VyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9ndCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR2F0ZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzIFRvbmUuVGlja1NpZ25hbCBleHRlbmRzIFRvbmUuU2lnbmFsLCBidXQgYWRkcyB0aGUgY2FwYWJpbGl0eVxuXHRcdCAqICAgICAgICB0byBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBlbGFwc2VkIHRpY2tzLiBleHBvbmVudGlhbCBhbmQgdGFyZ2V0IGN1cnZlc1xuXHRcdCAqICAgICAgICBhcmUgYXBwcm94aW1hdGVkIHdpdGggbXVsdGlwbGUgbGluZWFyIHJhbXBzLlxuXHRcdCAqXG5cdFx0ICogICAgICAgIFRoYW5rIHlvdSBCcnVubyBEaWFzLCBILiBTb2ZpYSBQaW50bywgYW5kIERhdmlkIE0uIE1hdG9zLCBmb3IgeW91ciBbV0FDIHBhcGVyXShodHRwczovL3NtYXJ0ZWNoLmdhdGVjaC5lZHUvYml0c3RyZWFtL2hhbmRsZS8xODUzLzU0NTg4L1dBQzIwMTYtNDkucGRmKVxuXHRcdCAqICAgICAgICBkZXNjcmliaW5nIGludGVncmF0aW5nIHRpbWluZyBmdW5jdGlvbnMgZm9yIHRlbXBvIGNhbGN1bGF0aW9ucy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgc2lnbmFsXG5cdFx0ICogQGV4dGVuZHMge1RvbmUuU2lnbmFsfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgdmFsdWUgPSBUb25lLmRlZmF1bHRBcmcodmFsdWUsIDEpO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcywge1xuXHQgICAgICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuVGlja3MsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9leHRlbmQgdGhlIG1lbW9yeVxuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5tZW1vcnkgPSBJbmZpbml0eTtcblx0ICAgICAgICAvL2NsZWFyIHRoZSBjbG9jayBmcm9tIHRoZSBiZWdpbm5pbmdcblx0ICAgICAgICB0aGlzLmNhbmNlbFNjaGVkdWxlZFZhbHVlcygwKTtcblx0ICAgICAgICAvL3NldCBhbiBpbml0aWFsIGV2ZW50XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5TZXRWYWx1ZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiAwLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGlja1NpZ25hbCwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogV3JhcHMgVG9uZS5TaWduYWwgbWV0aG9kcyBzbyB0aGF0IHRoZXkgYWxzb1xuXHRcdCAqIHJlY29yZCB0aGUgdGlja3MuXG5cdFx0ICogQHBhcmFtICB7RnVuY3Rpb259IG1ldGhvZFxuXHRcdCAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBmdW5jdGlvbiBfd3JhcFNjaGVkdWxlTWV0aG9kcyhtZXRob2QpIHtcblx0ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAgICAgbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c0V2ZW50ID0gdGhpcy5fZXZlbnRzLnByZXZpb3VzRXZlbnQoZXZlbnQpO1xuXHQgICAgICAgICAgICB2YXIgdGlja3NVbnRpbFRpbWUgPSB0aGlzLl9nZXRUaWNrc1VudGlsRXZlbnQocHJldmlvdXNFdmVudCwgdGltZSk7XG5cdCAgICAgICAgICAgIGV2ZW50LnRpY2tzID0gTWF0aC5tYXgodGlja3NVbnRpbFRpbWUsIDApO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9O1xuXHQgICAgfVxuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUF0VGltZSA9IF93cmFwU2NoZWR1bGVNZXRob2RzKFRvbmUuU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUF0VGltZSk7XG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lID0gX3dyYXBTY2hlZHVsZU1ldGhvZHMoVG9uZS5TaWduYWwucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCBleHBvbmVudGlhbGx5IGFwcHJvYWNoaW5nIHRoZSB0YXJnZXQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUgd2l0aFxuXHRcdCAqICBhIHJhdGUgaGF2aW5nIHRoZSBnaXZlbiB0aW1lIGNvbnN0YW50LlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHRpbWVDb25zdGFudFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaWNrU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLnNldFRhcmdldEF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSwgY29uc3RhbnQpIHtcblx0ICAgICAgICAvL2Fwcm94aW1hdGUgaXQgd2l0aCBtdWx0aXBsZSBsaW5lYXIgcmFtcHNcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRSYW1wUG9pbnQodGltZSk7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIC8vc3RhcnQgZnJvbSBwcmV2aW91c2x5IHNjaGVkdWxlZCB2YWx1ZVxuXHQgICAgICAgIHZhciBwcmV2RXZlbnQgPSB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIHZhciBzZWdtZW50cyA9IE1hdGgucm91bmQoTWF0aC5tYXgoMSAvIGNvbnN0YW50LCAxKSk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gc2VnbWVudHM7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgc2VnVGltZSA9IGNvbnN0YW50ICogaSArIHRpbWU7XG5cdCAgICAgICAgICAgIHZhciByYW1wVmFsID0gdGhpcy5fZXhwb25lbnRpYWxBcHByb2FjaChwcmV2RXZlbnQudGltZSwgcHJldkV2ZW50LnZhbHVlLCB2YWx1ZSwgY29uc3RhbnQsIHNlZ1RpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHRoaXMuX3RvVW5pdHMocmFtcFZhbCksIHNlZ1RpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGFuIGV4cG9uZW50aWFsIGNvbnRpbnVvdXMgY2hhbmdlIGluIHBhcmFtZXRlciB2YWx1ZSBmcm9tXG5cdFx0ICogIHRoZSBwcmV2aW91cyBzY2hlZHVsZWQgcGFyYW1ldGVyIHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBlbmRUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIC8vYXByb3hpbWF0ZSBpdCB3aXRoIG11bHRpcGxlIGxpbmVhciByYW1wc1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgLy9zdGFydCBmcm9tIHByZXZpb3VzbHkgc2NoZWR1bGVkIHZhbHVlXG5cdCAgICAgICAgdmFyIHByZXZFdmVudCA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgaWYgKHByZXZFdmVudCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICBwcmV2RXZlbnQgPSB7XG5cdCAgICAgICAgICAgICAgICAndmFsdWUnOiB0aGlzLl9pbml0aWFsVmFsdWUsXG5cdCAgICAgICAgICAgICAgICAndGltZSc6IDBcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9hcHByb3ggMTAgc2VnbWVudHMgcGVyIHNlY29uZFxuXHQgICAgICAgIHZhciBzZWdtZW50cyA9IE1hdGgucm91bmQoTWF0aC5tYXgoKHRpbWUgLSBwcmV2RXZlbnQudGltZSkgKiAxMCwgMSkpO1xuXHQgICAgICAgIHZhciBzZWdtZW50RHVyID0gKHRpbWUgLSBwcmV2RXZlbnQudGltZSkgLyBzZWdtZW50cztcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBzZWdtZW50czsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBzZWdUaW1lID0gc2VnbWVudER1ciAqIGkgKyBwcmV2RXZlbnQudGltZTtcblx0ICAgICAgICAgICAgdmFyIHJhbXBWYWwgPSB0aGlzLl9leHBvbmVudGlhbEludGVycG9sYXRlKHByZXZFdmVudC50aW1lLCBwcmV2RXZlbnQudmFsdWUsIHRpbWUsIHZhbHVlLCBzZWdUaW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh0aGlzLl90b1VuaXRzKHJhbXBWYWwpLCBzZWdUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJucyB0aGUgdGljayB2YWx1ZSBhdCB0aGUgdGltZS4gVGFrZXMgaW50byBhY2NvdW50XG5cdFx0ICogYW55IGF1dG9tYXRpb24gY3VydmVzIHNjaGVkdWxlZCBvbiB0aGUgc2lnbmFsLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSBUaGUgdGltZSB0byBnZXQgdGhlIHRpY2sgY291bnQgYXRcblx0XHQgKiBAcmV0dXJuIHtUaWNrc30gICAgICBUaGUgbnVtYmVyIG9mIHRpY2tzIHdoaWNoIGhhdmUgZWxhcHNlZCBhdCB0aGUgdGltZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZlbiBhbnkgYXV0b21hdGlvbnMuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLl9nZXRUaWNrc1VudGlsRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQsIHRpbWUpIHtcblx0ICAgICAgICBpZiAoZXZlbnQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgZXZlbnQgPSB7XG5cdCAgICAgICAgICAgICAgICAndGlja3MnOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3RpbWUnOiAwXG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzVW5kZWYoZXZlbnQudGlja3MpKSB7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c0V2ZW50ID0gdGhpcy5fZXZlbnRzLnByZXZpb3VzRXZlbnQoZXZlbnQpO1xuXHQgICAgICAgICAgICBldmVudC50aWNrcyA9IHRoaXMuX2dldFRpY2tzVW50aWxFdmVudChwcmV2aW91c0V2ZW50LCBldmVudC50aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHZhbDAgPSB0aGlzLmdldFZhbHVlQXRUaW1lKGV2ZW50LnRpbWUpO1xuXHQgICAgICAgIHZhciB2YWwxID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICAvL2lmIGl0J3MgcmlnaHQgb24gdGhlIGxpbmUsIHRha2UgdGhlIHByZXZpb3VzIHZhbHVlXG5cdCAgICAgICAgaWYgKHRoaXMuX2V2ZW50cy5nZXQodGltZSkudGltZSA9PT0gdGltZSAmJiB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuU2V0VmFsdWUpIHtcblx0ICAgICAgICAgICAgdmFsMSA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUodGltZSAtIHRoaXMuc2FtcGxlVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiAwLjUgKiAodGltZSAtIGV2ZW50LnRpbWUpICogKHZhbDAgKyB2YWwxKSArIGV2ZW50LnRpY2tzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIHRpY2sgdmFsdWUgYXQgdGhlIHRpbWUuIFRha2VzIGludG8gYWNjb3VudFxuXHRcdCAqIGFueSBhdXRvbWF0aW9uIGN1cnZlcyBzY2hlZHVsZWQgb24gdGhlIHNpZ25hbC5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIGdldCB0aGUgdGljayBjb3VudCBhdFxuXHRcdCAqIEByZXR1cm4ge1RpY2tzfSAgICAgIFRoZSBudW1iZXIgb2YgdGlja3Mgd2hpY2ggaGF2ZSBlbGFwc2VkIGF0IHRoZSB0aW1lXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIGFueSBhdXRvbWF0aW9ucy5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuZ2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLl9nZXRUaWNrc1VudGlsRXZlbnQoZXZlbnQsIHRpbWUpLCAwKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGVsYXBzZWQgdGltZSBvZiB0aGUgbnVtYmVyIG9mIHRpY2tzIGZyb20gdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0ge1RpY2tzfSB0aWNrcyBUaGUgbnVtYmVyIG9mIHRpY2tzIHRvIGNhbGN1bGF0ZVxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgVGhlIHRpbWUgdG8gZ2V0IHRoZSBuZXh0IHRpY2sgZnJvbVxuXHRcdCAqIEByZXR1cm4ge1NlY29uZHN9IFRoZSBkdXJhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIHRpY2tzIGZyb20gdGhlIGdpdmVuIHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5nZXREdXJhdGlvbk9mVGlja3MgPSBmdW5jdGlvbiAodGlja3MsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRUaWNrID0gdGhpcy5nZXRUaWNrc0F0VGltZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5nZXRUaW1lT2ZUaWNrKGN1cnJlbnRUaWNrICsgdGlja3MpIC0gdGltZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHaXZlbiBhIHRpY2ssIHJldHVybnMgdGhlIHRpbWUgdGhhdCB0aWNrIG9jY3VycyBhdC5cblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja1xuXHRcdCAqIEByZXR1cm4ge1RpbWV9ICAgICAgVGhlIHRpbWUgdGhhdCB0aGUgdGljayBvY2N1cnMuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLmdldFRpbWVPZlRpY2sgPSBmdW5jdGlvbiAodGljaykge1xuXHQgICAgICAgIHZhciBiZWZvcmUgPSB0aGlzLl9ldmVudHMuZ2V0KHRpY2ssICd0aWNrcycpO1xuXHQgICAgICAgIHZhciBhZnRlciA9IHRoaXMuX2V2ZW50cy5nZXRBZnRlcih0aWNrLCAndGlja3MnKTtcblx0ICAgICAgICBpZiAoYmVmb3JlICYmIGJlZm9yZS50aWNrcyA9PT0gdGljaykge1xuXHQgICAgICAgICAgICByZXR1cm4gYmVmb3JlLnRpbWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChiZWZvcmUgJiYgYWZ0ZXIgJiYgYWZ0ZXIudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5MaW5lYXIgJiYgYmVmb3JlLnZhbHVlICE9PSBhZnRlci52YWx1ZSkge1xuXHQgICAgICAgICAgICB2YXIgdmFsMCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUoYmVmb3JlLnRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgdmFsMSA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUoYWZ0ZXIudGltZSk7XG5cdCAgICAgICAgICAgIHZhciBkZWx0YSA9ICh2YWwxIC0gdmFsMCkgLyAoYWZ0ZXIudGltZSAtIGJlZm9yZS50aW1lKTtcblx0ICAgICAgICAgICAgdmFyIGsgPSBNYXRoLnNxcnQoTWF0aC5wb3codmFsMCwgMikgLSAyICogZGVsdGEgKiAoYmVmb3JlLnRpY2tzIC0gdGljaykpO1xuXHQgICAgICAgICAgICB2YXIgc29sMSA9ICgtdmFsMCArIGspIC8gZGVsdGE7XG5cdCAgICAgICAgICAgIHZhciBzb2wyID0gKC12YWwwIC0gaykgLyBkZWx0YTtcblx0ICAgICAgICAgICAgcmV0dXJuIChzb2wxID4gMCA/IHNvbDEgOiBzb2wyKSArIGJlZm9yZS50aW1lO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYmVmb3JlKSB7XG5cdCAgICAgICAgICAgIGlmIChiZWZvcmUudmFsdWUgPT09IDApIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBiZWZvcmUudGltZSArICh0aWNrIC0gYmVmb3JlLnRpY2tzKSAvIGJlZm9yZS52YWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aWNrIC8gdGhpcy5faW5pdGlhbFZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDb252ZXJ0IHNvbWUgbnVtYmVyIG9mIHRpY2tzIHRoZWlyIHRoZSBkdXJhdGlvbiBpbiBzZWNvbmRzIGFjY291bnRpbmdcblx0XHQgKiBmb3IgYW55IGF1dG9tYXRpb24gY3VydmVzIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrcyBUaGUgbnVtYmVyIG9mIHRpY2tzIHRvIGNvbnZlcnQgdG8gc2Vjb25kcy5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSBbd2hlbj1ub3ddICBXaGVuIGFsb25nIHRoZSBhdXRvbWF0aW9uIHRpbWVsaW5lIHRvIGNvbnZlcnQgdGhlIHRpY2tzLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVGltZX0gICAgICAgVGhlIGR1cmF0aW9uIGluIHNlY29uZHMgb2YgdGhlIHRpY2tzLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS50aWNrc1RvVGltZSA9IGZ1bmN0aW9uICh0aWNrcywgd2hlbikge1xuXHQgICAgICAgIHdoZW4gPSB0aGlzLnRvU2Vjb25kcyh3aGVuKTtcblx0ICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGltZSh0aGlzLmdldER1cmF0aW9uT2ZUaWNrcyh0aWNrcywgd2hlbikpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBpbnZlcnNlIG9mIFt0aWNrc1RvVGltZV0oI3RpY2tzdG90aW1lKS4gQ29udmVydCBhIGR1cmF0aW9uIGluXG5cdFx0ICogc2Vjb25kcyB0byB0aGUgY29ycmVzcG9uZGluZyBudW1iZXIgb2YgdGlja3MgYWNjb3VudGluZyBmb3IgYW55XG5cdFx0ICogYXV0b21hdGlvbiBjdXJ2ZXMgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gZHVyYXRpb24gVGhlIHRpbWUgaW50ZXJ2YWwgdG8gY29udmVydCB0byB0aWNrcy5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSBbd2hlbj1ub3ddICAgICBXaGVuIGFsb25nIHRoZSBhdXRvbWF0aW9uIHRpbWVsaW5lIHRvIGNvbnZlcnQgdGhlIHRpY2tzLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVGlja3N9ICAgICAgICAgIFRoZSBkdXJhdGlvbiBpbiB0aWNrcy5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUudGltZVRvVGlja3MgPSBmdW5jdGlvbiAoZHVyYXRpb24sIHdoZW4pIHtcblx0ICAgICAgICB3aGVuID0gdGhpcy50b1NlY29uZHMod2hlbik7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgdmFyIHN0YXJ0VGlja3MgPSB0aGlzLmdldFRpY2tzQXRUaW1lKHdoZW4pO1xuXHQgICAgICAgIHZhciBlbmRUaWNrcyA9IHRoaXMuZ2V0VGlja3NBdFRpbWUod2hlbiArIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGlja3MoZW5kVGlja3MgLSBzdGFydFRpY2tzKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaWNrU2lnbmFsO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgVGltZWxpbmUgU3RhdGUuIFByb3ZpZGVzIHRoZSBtZXRob2RzOiA8Y29kZT5zZXRTdGF0ZUF0VGltZShcInN0YXRlXCIsIHRpbWUpPC9jb2RlPlxuXHRcdCAqICAgICAgICAgIGFuZCA8Y29kZT5nZXRWYWx1ZUF0VGltZSh0aW1lKTwvY29kZT4uXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuVGltZWxpbmV9XG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSBpbml0aWFsIFRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBUaW1lbGluZVN0YXRlLiBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gPGNvZGU+dW5kZWZpbmVkPC9jb2RlPlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZVN0YXRlID0gZnVuY3Rpb24gKGluaXRpYWwpIHtcblx0ICAgICAgICBUb25lLlRpbWVsaW5lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGluaXRpYWwgc3RhdGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbml0aWFsID0gaW5pdGlhbDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpbWVsaW5lU3RhdGUsIFRvbmUuVGltZWxpbmUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHNjaGVkdWxlZCBzdGF0ZSBzY2hlZHVsZWQgYmVmb3JlIG9yIGF0XG5cdFx0ICogIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybiAge1N0cmluZ30gIFRoZSBuYW1lIG9mIHRoZSBzdGF0ZSBpbnB1dCBpbiBzZXRTdGF0ZUF0VGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmVTdGF0ZS5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciBldmVudCA9IHRoaXMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIGlmIChldmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICByZXR1cm4gZXZlbnQuc3RhdGU7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRpYWw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYSBzdGF0ZSB0byB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIHN0YXRlIFRoZSBuYW1lIG9mIHRoZSBzdGF0ZSB0byBzZXQuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZVN0YXRlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lU3RhdGUucHJvdG90eXBlLnNldFN0YXRlQXRUaW1lID0gZnVuY3Rpb24gKHN0YXRlLCB0aW1lKSB7XG5cdCAgICAgICAgLy9hbGwgc3RhdGUgY2hhbmdlcyBuZWVkIHRvIGJlID49IHRoZSBwcmV2aW91cyBzdGF0ZSB0aW1lXG5cdCAgICAgICAgLy9UT0RPIHRocm93IGVycm9yIGlmIHRpbWUgPCB0aGUgcHJldmlvdXMgZXZlbnQgdGltZVxuXHQgICAgICAgIHRoaXMuYWRkKHtcblx0ICAgICAgICAgICAgJ3N0YXRlJzogc3RhdGUsXG5cdCAgICAgICAgICAgICd0aW1lJzogdGltZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGV2ZW50IGJlZm9yZSB0aGUgdGltZSB3aXRoIHRoZSBnaXZlbiBzdGF0ZVxuXHRcdCAqICBAcGFyYW0ge1RvbmUuU3RhdGV9IHN0YXRlIFRoZSBzdGF0ZSB0byBsb29rIGZvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgV2hlbiB0byBjaGVjayBiZWZvcmVcdFx0XHRcblx0XHQgKiAgQHJldHVybiAge09iamVjdH0gIFRoZSBldmVudCB3aXRoIHRoZSBnaXZlbiBzdGF0ZSBiZWZvcmUgdGhlIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmVTdGF0ZS5wcm90b3R5cGUuZ2V0TGFzdFN0YXRlID0gZnVuY3Rpb24gKHN0YXRlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gaW5kZXg7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3RpbWVsaW5lW2ldO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQuc3RhdGUgPT09IHN0YXRlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZXZlbnQgYWZ0ZXIgdGhlIHRpbWUgd2l0aCB0aGUgZ2l2ZW4gc3RhdGVcblx0XHQgKiAgQHBhcmFtIHtUb25lLlN0YXRlfSBzdGF0ZSBUaGUgc3RhdGUgdG8gbG9vayBmb3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFdoZW4gdG8gY2hlY2sgZnJvbVxuXHRcdCAqICBAcmV0dXJuICB7T2JqZWN0fSAgVGhlIGV2ZW50IHdpdGggdGhlIGdpdmVuIHN0YXRlIGFmdGVyIHRoZSB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lU3RhdGUucHJvdG90eXBlLmdldE5leHRTdGF0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gaW5kZXg7IGkgPCB0aGlzLl90aW1lbGluZS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fdGltZWxpbmVbaV07XG5cdCAgICAgICAgICAgICAgICBpZiAoZXZlbnQuc3RhdGUgPT09IHN0YXRlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpbWVsaW5lU3RhdGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVXNlcyBbVG9uZS5UaWNrU2lnbmFsXShUaWNrU2lnbmFsKSB0byB0cmFjayBlbGFwc2VkIHRpY2tzIHdpdGhcblx0XHQgKiAgXHRcdGNvbXBsZXggYXV0b21hdGlvbiBjdXJ2ZXMuXG5cdFx0ICpcblx0XHQgKiBcdEBjb25zdHJ1Y3RvclxuXHQgICAgICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIGluaXRpYWwgZnJlcXVlbmN5IHRoYXQgdGhlIHNpZ25hbCB0aWNrcyBhdFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2ZyZXF1ZW5jeSddLCBUb25lLlRpY2tTb3VyY2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHNob3VsZCBiZSBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlICB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuVGlja1NpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2ZyZXF1ZW5jeScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzdGF0ZSB0aW1lbGluZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlRpbWVsaW5lU3RhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFRvbmUuVGltZWxpbmVTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgb2Zmc2V0IHZhbHVlcyBvZiB0aGUgdGlja3Ncblx0XHRcdCAqIEB0eXBlIHtUb25lLlRpbWVsaW5lfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQgPSBuZXcgVG9uZS5UaW1lbGluZSgpO1xuXHQgICAgICAgIC8vYWRkIHRoZSBmaXJzdCBldmVudFxuXHQgICAgICAgIHRoaXMuc2V0VGlja3NBdFRpbWUoMCwgMCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaWNrU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLmRlZmF1bHRzID0geyAnZnJlcXVlbmN5JzogMSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiwgXCJzdG9wcGVkXCIgb3IgXCJwYXVzZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UaWNrU291cmNlI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBjbG9jayBhdCB0aGUgZ2l2ZW4gdGltZS4gT3B0aW9uYWxseSBwYXNzIGluIGFuIG9mZnNldFxuXHRcdCAqICBvZiB3aGVyZSB0byBzdGFydCB0aGUgdGljayBjb3VudGVyIGZyb20uXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgdGltZSAgICBUaGUgdGltZSB0aGUgY2xvY2sgc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEBwYXJhbSB7VGlja3M9MH0gb2Zmc2V0IFRoZSBudW1iZXIgb2YgdGlja3MgdG8gc3RhcnQgdGhlIHNvdXJjZSBhdFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5UaWNrU291cmNlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdGFydGVkLCB0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKG9mZnNldCkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuc2V0VGlja3NBdFRpbWUob2Zmc2V0LCB0aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgY2xvY2suIFN0b3BwaW5nIHRoZSBjbG9jayByZXNldHMgdGhlIHRpY2sgY291bnRlciB0byAwLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgY2xvY2sgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTb3VyY2V9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBjbG9jay5zdG9wKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL2NhbmNlbCB0aGUgcHJldmlvdXMgc3RvcFxuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3N0YXRlLmdldCh0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50LnRpbWUgPiAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmNhbmNlbChldmVudC50aW1lKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbChldmVudC50aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICB0aGlzLnNldFRpY2tzQXRUaW1lKDAsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQYXVzZSB0aGUgY2xvY2suIFBhdXNpbmcgZG9lcyBub3QgcmVzZXQgdGhlIHRpY2sgY291bnRlci5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIGNsb2NrIHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaWNrU291cmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5QYXVzZWQsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIHN0YXJ0L3N0b3AvcGF1c2UgYW5kIHNldFRpY2tBdFRpbWUgZXZlbnRzIHNjaGVkdWxlZCBhZnRlciB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdG8gY2xlYXIgdGhlIGV2ZW50cyBhZnRlclxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaWNrU291cmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIGVsYXBzZWQgdGlja3MgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBXaGVuIHRvIGdldCB0aGUgdGljayB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge1RpY2tzfSAgICAgVGhlIG51bWJlciBvZiB0aWNrc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5nZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBzdG9wRXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXRMYXN0U3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICAvL3RoaXMgZXZlbnQgYWxsb3dzIGZvckVhY2hCZXR3ZWVuIHRvIGl0ZXJhdGUgdW50aWwgdGhlIGN1cnJlbnQgdGltZVxuXHQgICAgICAgIHZhciB0bXBFdmVudCA9IHtcblx0ICAgICAgICAgICAgc3RhdGU6IFRvbmUuU3RhdGUuUGF1c2VkLFxuXHQgICAgICAgICAgICB0aW1lOiB0aW1lXG5cdCAgICAgICAgfTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5hZGQodG1wRXZlbnQpO1xuXHQgICAgICAgIC8va2VlcCB0cmFjayBvZiB0aGUgcHJldmlvdXMgb2Zmc2V0IGV2ZW50XG5cdCAgICAgICAgdmFyIGxhc3RTdGF0ZSA9IHN0b3BFdmVudDtcblx0ICAgICAgICB2YXIgZWxhcHNlZFRpY2tzID0gMDtcblx0ICAgICAgICAvL2l0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIGV2ZW50cyBzaW5jZSB0aGUgbGFzdCBzdG9wXG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEJldHdlZW4oc3RvcEV2ZW50LnRpbWUsIHRpbWUgKyB0aGlzLnNhbXBsZVRpbWUsIGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgIHZhciBwZXJpb2RTdGFydFRpbWUgPSBsYXN0U3RhdGUudGltZTtcblx0ICAgICAgICAgICAgLy9pZiB0aGVyZSBpcyBhbiBvZmZzZXQgZXZlbnQgaW4gdGhpcyBwZXJpb2QgdXNlIHRoYXRcblx0ICAgICAgICAgICAgdmFyIG9mZnNldEV2ZW50ID0gdGhpcy5fdGlja09mZnNldC5nZXQoZS50aW1lKTtcblx0ICAgICAgICAgICAgaWYgKG9mZnNldEV2ZW50LnRpbWUgPj0gbGFzdFN0YXRlLnRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGVsYXBzZWRUaWNrcyA9IG9mZnNldEV2ZW50LnRpY2tzO1xuXHQgICAgICAgICAgICAgICAgcGVyaW9kU3RhcnRUaW1lID0gb2Zmc2V0RXZlbnQudGltZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAobGFzdFN0YXRlLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgZS5zdGF0ZSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICBlbGFwc2VkVGlja3MgKz0gdGhpcy5mcmVxdWVuY3kuZ2V0VGlja3NBdFRpbWUoZS50aW1lKSAtIHRoaXMuZnJlcXVlbmN5LmdldFRpY2tzQXRUaW1lKHBlcmlvZFN0YXJ0VGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgbGFzdFN0YXRlID0gZTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIC8vcmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZXZlbnRcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5yZW1vdmUodG1wRXZlbnQpO1xuXHQgICAgICAgIC8vcmV0dXJuIHRoZSB0aWNrc1xuXHQgICAgICAgIHJldHVybiBlbGFwc2VkVGlja3M7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGNhbGxiYWNrIHdhcyBpbnZva2VkLiBTdGFydHMgY291bnRpbmcgYXQgMFxuXHRcdCAqICBhbmQgaW5jcmVtZW50cyBhZnRlciB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQuIFJldHVybnMgLTEgd2hlbiBzdG9wcGVkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UaWNrU291cmNlI1xuXHRcdCAqICBAbmFtZSB0aWNrc1xuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZSwgJ3RpY2tzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUaWNrc0F0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHQpIHtcblx0ICAgICAgICAgICAgdGhpcy5zZXRUaWNrc0F0VGltZSh0LCB0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdGltZSBzaW5jZSB0aWNrcz0wIHRoYXQgdGhlIFRpY2tTb3VyY2UgaGFzIGJlZW4gcnVubmluZy4gQWNjb3VudHNcblx0XHQgKiAgZm9yIHRlbXBvIGN1cnZlc1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UaWNrU291cmNlI1xuXHRcdCAqICBAbmFtZSBzZWNvbmRzXG5cdFx0ICogIEB0eXBlIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUsICdzZWNvbmRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWNvbmRzQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocykge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5mcmVxdWVuY3kudGltZVRvVGlja3Mocywgbm93KTtcblx0ICAgICAgICAgICAgdGhpcy5zZXRUaWNrc0F0VGltZSh0aWNrcywgbm93KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGVsYXBzZWQgc2Vjb25kcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSBlbGFwc2VkIHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9ICBUaGUgbnVtYmVyIG9mIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5nZXRTZWNvbmRzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIHN0b3BFdmVudCA9IHRoaXMuX3N0YXRlLmdldExhc3RTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgIC8vdGhpcyBldmVudCBhbGxvd3MgZm9yRWFjaEJldHdlZW4gdG8gaXRlcmF0ZSB1bnRpbCB0aGUgY3VycmVudCB0aW1lXG5cdCAgICAgICAgdmFyIHRtcEV2ZW50ID0ge1xuXHQgICAgICAgICAgICBzdGF0ZTogVG9uZS5TdGF0ZS5QYXVzZWQsXG5cdCAgICAgICAgICAgIHRpbWU6IHRpbWVcblx0ICAgICAgICB9O1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmFkZCh0bXBFdmVudCk7XG5cdCAgICAgICAgLy9rZWVwIHRyYWNrIG9mIHRoZSBwcmV2aW91cyBvZmZzZXQgZXZlbnRcblx0ICAgICAgICB2YXIgbGFzdFN0YXRlID0gc3RvcEV2ZW50O1xuXHQgICAgICAgIHZhciBlbGFwc2VkU2Vjb25kcyA9IDA7XG5cdCAgICAgICAgLy9pdGVyYXRlIHRocm91Z2ggYWxsIHRoZSBldmVudHMgc2luY2UgdGhlIGxhc3Qgc3RvcFxuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hCZXR3ZWVuKHN0b3BFdmVudC50aW1lLCB0aW1lICsgdGhpcy5zYW1wbGVUaW1lLCBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgICB2YXIgcGVyaW9kU3RhcnRUaW1lID0gbGFzdFN0YXRlLnRpbWU7XG5cdCAgICAgICAgICAgIC8vaWYgdGhlcmUgaXMgYW4gb2Zmc2V0IGV2ZW50IGluIHRoaXMgcGVyaW9kIHVzZSB0aGF0XG5cdCAgICAgICAgICAgIHZhciBvZmZzZXRFdmVudCA9IHRoaXMuX3RpY2tPZmZzZXQuZ2V0KGUudGltZSk7XG5cdCAgICAgICAgICAgIGlmIChvZmZzZXRFdmVudC50aW1lID49IGxhc3RTdGF0ZS50aW1lKSB7XG5cdCAgICAgICAgICAgICAgICBlbGFwc2VkU2Vjb25kcyA9IG9mZnNldEV2ZW50LnNlY29uZHM7XG5cdCAgICAgICAgICAgICAgICBwZXJpb2RTdGFydFRpbWUgPSBvZmZzZXRFdmVudC50aW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChsYXN0U3RhdGUuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCAmJiBlLnN0YXRlICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIGVsYXBzZWRTZWNvbmRzICs9IGUudGltZSAtIHBlcmlvZFN0YXJ0VGltZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBsYXN0U3RhdGUgPSBlO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgLy9yZW1vdmUgdGhlIHRlbXBvcmFyeSBldmVudFxuXHQgICAgICAgIHRoaXMuX3N0YXRlLnJlbW92ZSh0bXBFdmVudCk7XG5cdCAgICAgICAgLy9yZXR1cm4gdGhlIHRpY2tzXG5cdCAgICAgICAgcmV0dXJuIGVsYXBzZWRTZWNvbmRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFNldCB0aGUgY2xvY2sncyB0aWNrcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja3MgVGhlIHRpY2sgdmFsdWUgdG8gc2V0XG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSAgV2hlbiB0byBzZXQgdGhlIHRpY2sgdmFsdWVcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRpY2tTb3VyY2V9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuc2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGlja3MsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fdGlja09mZnNldC5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fdGlja09mZnNldC5hZGQoe1xuXHQgICAgICAgICAgICAndGltZSc6IHRpbWUsXG5cdCAgICAgICAgICAgICd0aWNrcyc6IHRpY2tzLFxuXHQgICAgICAgICAgICAnc2Vjb25kcyc6IHRoaXMuZnJlcXVlbmN5LmdldER1cmF0aW9uT2ZUaWNrcyh0aWNrcywgdGltZSlcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgc2NoZWR1bGVkIHN0YXRlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEByZXR1cm4gIHtTdHJpbmd9ICBUaGUgbmFtZSBvZiB0aGUgc3RhdGUgaW5wdXQgaW4gc2V0U3RhdGVBdFRpbWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc291cmNlLnN0YXJ0KFwiKzAuMVwiKTtcblx0XHQgKiBzb3VyY2UuZ2V0U3RhdGVBdFRpbWUoXCIrMC4xXCIpOyAvL3JldHVybnMgXCJzdGFydGVkXCJcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuZ2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSB0aW1lIG9mIHRoZSBnaXZlbiB0aWNrLiBUaGUgc2Vjb25kIGFyZ3VtZW50XG5cdFx0ICogaXMgd2hlbiB0byB0ZXN0IGJlZm9yZS4gU2luY2UgdGlja3MgY2FuIGJlIHNldCAod2l0aCBzZXRUaWNrc0F0VGltZSlcblx0XHQgKiB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgdGltZXMgZm9yIGEgZ2l2ZW4gdGljayB2YWx1ZS4gXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tzIFRoZSB0aWNrIG51bWJlci5cblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gYmVmb3JlIFdoZW4gdG8gbWVhc3VyZSB0aGUgdGljayB2YWx1ZSBmcm9tLiBcblx0XHQgKiBAcmV0dXJuIHtUaW1lfSAgICAgICBUaGUgdGltZSBvZiB0aGUgdGlja1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5nZXRUaW1lT2ZUaWNrID0gZnVuY3Rpb24gKHRpY2ssIGJlZm9yZSkge1xuXHQgICAgICAgIGJlZm9yZSA9IFRvbmUuZGVmYXVsdEFyZyhiZWZvcmUsIHRoaXMubm93KCkpO1xuXHQgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl90aWNrT2Zmc2V0LmdldChiZWZvcmUpO1xuXHQgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3N0YXRlLmdldChiZWZvcmUpO1xuXHQgICAgICAgIHZhciBzdGFydFRpbWUgPSBNYXRoLm1heChvZmZzZXQudGltZSwgZXZlbnQudGltZSk7XG5cdCAgICAgICAgdmFyIGFic29sdXRlVGlja3MgPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaWNrc0F0VGltZShzdGFydFRpbWUpICsgdGljayAtIG9mZnNldC50aWNrcztcblx0ICAgICAgICByZXR1cm4gdGhpcy5mcmVxdWVuY3kuZ2V0VGltZU9mVGljayhhYnNvbHV0ZVRpY2tzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW52b2tlIHRoZSBjYWxsYmFjayBldmVudCBhdCBhbGwgc2NoZWR1bGVkIHRpY2tzIGJldHdlZW4gdGhlIFxuXHRcdCAqICBzdGFydCB0aW1lIGFuZCB0aGUgZW5kIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gICAgc3RhcnRUaW1lICBUaGUgYmVnaW5uaW5nIG9mIHRoZSBzZWFyY2ggcmFuZ2Vcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gICAgZW5kVGltZSAgICBUaGUgZW5kIG9mIHRoZSBzZWFyY2ggcmFuZ2Vcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb248VGltZSxUaWNrcz59ICBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBlYWNoIHRpY2tcblx0XHQgKiAgQHJldHVybiAge1RvbmUuVGlja1NvdXJjZX0gICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5mb3JFYWNoVGlja0JldHdlZW4gPSBmdW5jdGlvbiAoc3RhcnRUaW1lLCBlbmRUaW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vb25seSBpdGVyYXRlIHRocm91Z2ggdGhlIHNlY3Rpb25zIHdoZXJlIGl0IGlzIFwic3RhcnRlZFwiXG5cdCAgICAgICAgdmFyIGxhc3RTdGF0ZUV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEJldHdlZW4oc3RhcnRUaW1lLCBlbmRUaW1lLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgaWYgKGxhc3RTdGF0ZUV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgZXZlbnQuc3RhdGUgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5mb3JFYWNoVGlja0JldHdlZW4oTWF0aC5tYXgobGFzdFN0YXRlRXZlbnQudGltZSwgc3RhcnRUaW1lKSwgZXZlbnQudGltZSAtIHRoaXMuc2FtcGxlVGltZSwgY2FsbGJhY2spO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGxhc3RTdGF0ZUV2ZW50ID0gZXZlbnQ7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICBzdGFydFRpbWUgPSBNYXRoLm1heChsYXN0U3RhdGVFdmVudC50aW1lLCBzdGFydFRpbWUpO1xuXHQgICAgICAgIGlmIChsYXN0U3RhdGVFdmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIHRoaXMuX3N0YXRlKSB7XG5cdCAgICAgICAgICAgIC8vZmlndXJlIG91dCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBmcmVxdWVuY3kgdGlja3MgYW5kIHRoZSBcblx0ICAgICAgICAgICAgdmFyIHN0YXJ0VGlja3MgPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaWNrc0F0VGltZShzdGFydFRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgdGlja3NBdFN0YXJ0ID0gdGhpcy5mcmVxdWVuY3kuZ2V0VGlja3NBdFRpbWUobGFzdFN0YXRlRXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgIHZhciBkaWZmID0gc3RhcnRUaWNrcyAtIHRpY2tzQXRTdGFydDtcblx0ICAgICAgICAgICAgdmFyIG9mZnNldCA9IGRpZmYgJSAxO1xuXHQgICAgICAgICAgICBpZiAob2Zmc2V0ICE9PSAwKSB7XG5cdCAgICAgICAgICAgICAgICBvZmZzZXQgPSAxIC0gb2Zmc2V0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBuZXh0VGlja1RpbWUgPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaW1lT2ZUaWNrKHN0YXJ0VGlja3MgKyBvZmZzZXQpO1xuXHQgICAgICAgICAgICB2YXIgZXJyb3IgPSBudWxsO1xuXHQgICAgICAgICAgICB3aGlsZSAobmV4dFRpY2tUaW1lIDwgZW5kVGltZSAmJiB0aGlzLl9zdGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXh0VGlja1RpbWUsIE1hdGgucm91bmQodGhpcy5nZXRUaWNrc0F0VGltZShuZXh0VGlja1RpbWUpKSk7XG5cdCAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2tUaW1lICs9IHRoaXMuZnJlcXVlbmN5LmdldER1cmF0aW9uT2ZUaWNrcygxLCBuZXh0VGlja1RpbWUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChlcnJvcikge1xuXHQgICAgICAgICAgICB0aHJvdyBlcnJvcjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZnJlcXVlbmN5Jyk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaWNrU291cmNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgc2FtcGxlIGFjY3VyYXRlIGNsb2NrIHdoaWNoIHByb3ZpZGVzIGEgY2FsbGJhY2sgYXQgdGhlIGdpdmVuIHJhdGUuXG5cdFx0ICogICAgICAgICAgV2hpbGUgdGhlIGNhbGxiYWNrIGlzIG5vdCBzYW1wbGUtYWNjdXJhdGUgKGl0IGlzIHN0aWxsIHN1c2NlcHRpYmxlIHRvXG5cdFx0ICogICAgICAgICAgbG9vc2UgSlMgdGltaW5nKSwgdGhlIHRpbWUgcGFzc2VkIGluIGFzIHRoZSBhcmd1bWVudCB0byB0aGUgY2FsbGJhY2tcblx0XHQgKiAgICAgICAgICBpcyBwcmVjaXNlLiBGb3IgbW9zdCBhcHBsaWNhdGlvbnMsIGl0IGlzIGJldHRlciB0byB1c2UgVG9uZS5UcmFuc3BvcnRcblx0XHQgKiAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBDbG9jayBieSBpdHNlbGYgc2luY2UgeW91IGNhbiBzeW5jaHJvbml6ZSBtdWx0aXBsZSBjYWxsYmFja3MuXG5cdFx0ICpcblx0XHQgKiBcdEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbWl0dGVyfVxuXHRcdCAqIFx0QHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2l0aCB0aGUgdGltZSBvZiB0aGUgYXVkaW8gZXZlbnRcblx0XHQgKiBcdEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHJhdGUgb2YgdGhlIGNhbGxiYWNrXG5cdFx0ICogXHRAZXhhbXBsZVxuXHRcdCAqIC8vdGhlIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCBhcHByb3hpbWF0ZWx5IG9uY2UgYSBzZWNvbmRcblx0XHQgKiAvL2FuZCB3aWxsIHByaW50IHRoZSB0aW1lIGV4YWN0bHkgb25jZSBhIHNlY29uZCBhcGFydC5cblx0XHQgKiB2YXIgY2xvY2sgPSBuZXcgVG9uZS5DbG9jayhmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdGNvbnNvbGUubG9nKHRpbWUpO1xuXHRcdCAqIH0sIDEpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdjYWxsYmFjaycsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knXG5cdCAgICAgICAgXSwgVG9uZS5DbG9jayk7XG5cdCAgICAgICAgVG9uZS5FbWl0dGVyLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGludm9rZSBhdCB0aGUgc2NoZWR1bGVkIHRpY2suXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBuZXh0IHRpbWUgdGhlIGNhbGxiYWNrIGlzIHNjaGVkdWxlZC5cblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9uZXh0VGljayA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRpY2sgY291bnRlclxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5UaWNrU291cmNlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlID0gbmV3IFRvbmUuVGlja1NvdXJjZShvcHRpb25zLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxhc3QgdGltZSB0aGUgbG9vcCBjYWxsYmFjayB3YXMgaW52b2tlZFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xhc3RVcGRhdGUgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByYXRlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBzaG91bGQgYmUgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSAge0JQTX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX3RpY2tTb3VyY2UuZnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdmcmVxdWVuY3knKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc3RhdGUgdGltZWxpbmVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UaW1lbGluZVN0YXRlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG5ldyBUb25lLlRpbWVsaW5lU3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkKTtcblx0ICAgICAgICAvL2FkZCBhbiBpbml0aWFsIHN0YXRlXG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbG9vcCBmdW5jdGlvbiBib3VuZCB0byBpdHMgY29udGV4dC5cblx0XHRcdCAqICBUaGlzIGlzIG5lY2Vzc2FyeSB0byByZW1vdmUgdGhlIGV2ZW50IGluIHRoZSBlbmQuXG5cdFx0XHQgKiAgQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ib3VuZExvb3AgPSB0aGlzLl9sb29wLmJpbmQodGhpcyk7XG5cdCAgICAgICAgLy9iaW5kIGEgY2FsbGJhY2sgdG8gdGhlIHdvcmtlciB0aHJlYWRcblx0ICAgICAgICB0aGlzLmNvbnRleHQub24oJ3RpY2snLCB0aGlzLl9ib3VuZExvb3ApO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ2xvY2ssIFRvbmUuRW1pdHRlcik7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2suZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdmcmVxdWVuY3knOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiwgXCJzdG9wcGVkXCIgb3IgXCJwYXVzZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DbG9jayNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNsb2NrLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGNsb2NrIGF0IHRoZSBnaXZlbiB0aW1lLiBPcHRpb25hbGx5IHBhc3MgaW4gYW4gb2Zmc2V0XG5cdFx0ICogIG9mIHdoZXJlIHRvIHN0YXJ0IHRoZSB0aWNrIGNvdW50ZXIgZnJvbS5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICB0aW1lICAgIFRoZSB0aW1lIHRoZSBjbG9jayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtICB7VGlja3M9fSAgb2Zmc2V0ICBXaGVyZSB0aGUgdGljayBjb3VudGVyIHN0YXJ0cyBjb3VudGluZyBmcm9tLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5DbG9ja30gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0YXJ0ZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrU291cmNlLnN0YXJ0KHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgICAgIGlmICh0aW1lIDwgdGhpcy5fbGFzdFVwZGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdGFydCcsIHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIGNsb2NrLiBTdG9wcGluZyB0aGUgY2xvY2sgcmVzZXRzIHRoZSB0aWNrIGNvdW50ZXIgdG8gMC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIGNsb2NrIHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DbG9ja30gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGNsb2NrLnN0b3AoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlLnN0b3AodGltZSk7XG5cdCAgICAgICAgaWYgKHRpbWUgPCB0aGlzLl9sYXN0VXBkYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RvcCcsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUGF1c2UgdGhlIGNsb2NrLiBQYXVzaW5nIGRvZXMgbm90IHJlc2V0IHRoZSB0aWNrIGNvdW50ZXIuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSBjbG9jayBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ2xvY2t9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5QYXVzZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrU291cmNlLnBhdXNlKHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAodGltZSA8IHRoaXMuX2xhc3RVcGRhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncGF1c2UnLCB0aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiB0aW1lcyB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQuIFN0YXJ0cyBjb3VudGluZyBhdCAwXG5cdFx0ICogIGFuZCBpbmNyZW1lbnRzIGFmdGVyIHRoZSBjYWxsYmFjayB3YXMgaW52b2tlZC5cblx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2xvY2sucHJvdG90eXBlLCAndGlja3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5nZXRUaWNrc0F0VGltZSh0aGlzLm5vdygpKSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UudGlja3MgPSB0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0aW1lIHNpbmNlIHRpY2tzPTAgdGhhdCB0aGUgQ2xvY2sgaGFzIGJlZW4gcnVubmluZy4gQWNjb3VudHNcblx0XHQgKiAgZm9yIHRlbXBvIGN1cnZlc1xuXHRcdCAqICBAdHlwZSB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNsb2NrLnByb3RvdHlwZSwgJ3NlY29uZHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aWNrU291cmNlLnNlY29uZHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2Uuc2Vjb25kcyA9IHM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBlbGFwc2VkIHNlY29uZHMgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBXaGVuIHRvIGdldCB0aGUgZWxhcHNlZCBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtTZWNvbmRzfSAgVGhlIG51bWJlciBvZiBlbGFwc2VkIHNlY29uZHNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLmdldFNlY29uZHNBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aWNrU291cmNlLmdldFNlY29uZHNBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU2V0IHRoZSBjbG9jaydzIHRpY2tzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrcyBUaGUgdGljayB2YWx1ZSB0byBzZXRcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBXaGVuIHRvIHNldCB0aGUgdGljayB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge1RvbmUuQ2xvY2t9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLnNldFRpY2tzQXRUaW1lID0gZnVuY3Rpb24gKHRpY2tzLCB0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5zZXRUaWNrc0F0VGltZSh0aWNrcywgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSBjbG9jaydzIHRpY2tzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSB0aWNrIHZhbHVlXG5cdFx0ICogQHJldHVybiB7VGlja3N9ICAgICAgIFRoZSB0aWNrIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuZ2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aWNrU291cmNlLmdldFRpY2tzQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgdGltZSBvZiB0aGUgbmV4dCB0aWNrXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tzIFRoZSB0aWNrIG51bWJlci5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSBiZWZvcmUgXG5cdFx0ICogQHJldHVybiB7VG9uZS5DbG9ja30gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUubmV4dFRpY2tUaW1lID0gZnVuY3Rpb24gKG9mZnNldCwgd2hlbikge1xuXHQgICAgICAgIHdoZW4gPSB0aGlzLnRvU2Vjb25kcyh3aGVuKTtcblx0ICAgICAgICB2YXIgY3VycmVudFRpY2sgPSB0aGlzLmdldFRpY2tzQXRUaW1lKHdoZW4pO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aWNrU291cmNlLmdldFRpbWVPZlRpY2soY3VycmVudFRpY2sgKyBvZmZzZXQsIHdoZW4pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc2NoZWR1bGluZyBsb29wLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuX2xvb3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHN0YXJ0VGltZSA9IHRoaXMuX2xhc3RVcGRhdGU7XG5cdCAgICAgICAgdmFyIGVuZFRpbWUgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgIHRoaXMuX2xhc3RVcGRhdGUgPSBlbmRUaW1lO1xuXHQgICAgICAgIGlmIChzdGFydFRpbWUgIT09IGVuZFRpbWUpIHtcblx0ICAgICAgICAgICAgLy90aGUgc3RhdGUgY2hhbmdlIGV2ZW50c1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoQmV0d2VlbihzdGFydFRpbWUsIGVuZFRpbWUsIGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgICAgICBzd2l0Y2ggKGUuc3RhdGUpIHtcblx0ICAgICAgICAgICAgICAgIGNhc2UgVG9uZS5TdGF0ZS5TdGFydGVkOlxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl90aWNrU291cmNlLmdldFRpY2tzQXRUaW1lKGUudGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdGFydCcsIGUudGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgVG9uZS5TdGF0ZS5TdG9wcGVkOlxuXHQgICAgICAgICAgICAgICAgICAgIGlmIChlLnRpbWUgIT09IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdG9wJywgZS50aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlIFRvbmUuU3RhdGUuUGF1c2VkOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncGF1c2UnLCBlLnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgICAgICAvL3RoZSB0aWNrIGNhbGxiYWNrc1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrU291cmNlLmZvckVhY2hUaWNrQmV0d2VlbihzdGFydFRpbWUsIGVuZFRpbWUsIGZ1bmN0aW9uICh0aW1lLCB0aWNrcykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lLCB0aWNrcyk7XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBzY2hlZHVsZWQgc3RhdGUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybiAge1N0cmluZ30gIFRoZSBuYW1lIG9mIHRoZSBzdGF0ZSBpbnB1dCBpbiBzZXRTdGF0ZUF0VGltZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBjbG9jay5zdGFydChcIiswLjFcIik7XG5cdFx0ICogY2xvY2suZ2V0U3RhdGVBdFRpbWUoXCIrMC4xXCIpOyAvL3JldHVybnMgXCJzdGFydGVkXCJcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLmdldFN0YXRlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DbG9ja30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQub2ZmKCd0aWNrJywgdGhpcy5fYm91bmRMb29wKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZnJlcXVlbmN5Jyk7XG5cdCAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGlja1NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2JvdW5kTG9vcCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbmV4dFRpY2sgPSBJbmZpbml0eTtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNsb2NrO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgU2ltaWxhciB0byBUb25lLlRpbWVsaW5lLCBidXQgYWxsIGV2ZW50cyByZXByZXNlbnRcblx0XHQgKiAgICAgICAgIGludGVydmFscyB3aXRoIGJvdGggXCJ0aW1lXCIgYW5kIFwiZHVyYXRpb25cIiB0aW1lcy4gVGhlXG5cdFx0ICogICAgICAgICBldmVudHMgYXJlIHBsYWNlZCBpbiBhIHRyZWUgc3RydWN0dXJlIG9wdGltaXplZFxuXHRcdCAqICAgICAgICAgZm9yIHF1ZXJ5aW5nIGFuIGludGVyc2VjdGlvbiBwb2ludCB3aXRoIHRoZSB0aW1lbGluZVxuXHRcdCAqICAgICAgICAgZXZlbnRzLiBJbnRlcm5hbGx5IHVzZXMgYW4gW0ludGVydmFsIFRyZWVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ludGVydmFsX3RyZWUpXG5cdFx0ICogICAgICAgICB0byByZXByZXNlbnQgdGhlIGRhdGEuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcm9vdCBub2RlIG9mIHRoZSBpbnRldmFsIHRyZWVcblx0XHRcdCAqICBAdHlwZSAge0ludGVydmFsTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcm9vdCA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgS2VlcCB0cmFjayBvZiB0aGUgbGVuZ3RoIG9mIHRoZSB0aW1lbGluZS5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGVuZ3RoID0gMDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkludGVydmFsVGltZWxpbmUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBldmVudCB0byBhZGQgdG8gdGhlIHRpbWVsaW5lLiBBbGwgZXZlbnRzIG11c3Rcblx0XHQgKiAgaGF2ZSBhIHRpbWUgYW5kIGR1cmF0aW9uIHZhbHVlXG5cdFx0ICogIEBwYXJhbSAge09iamVjdH0gIGV2ZW50ICBUaGUgZXZlbnQgdG8gYWRkIHRvIHRoZSB0aW1lbGluZVxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKGV2ZW50LnRpbWUpIHx8IFRvbmUuaXNVbmRlZihldmVudC5kdXJhdGlvbikpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkludGVydmFsVGltZWxpbmU6IGV2ZW50cyBtdXN0IGhhdmUgdGltZSBhbmQgZHVyYXRpb24gcGFyYW1ldGVycycpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBldmVudC50aW1lID0gZXZlbnQudGltZS52YWx1ZU9mKCk7XG5cdCAgICAgICAgdmFyIG5vZGUgPSBuZXcgSW50ZXJ2YWxOb2RlKGV2ZW50LnRpbWUsIGV2ZW50LnRpbWUgKyBldmVudC5kdXJhdGlvbiwgZXZlbnQpO1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSBub2RlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QuaW5zZXJ0KG5vZGUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9sZW5ndGgrKztcblx0ICAgICAgICAvLyBSZXN0cnVjdHVyZSB0cmVlIHRvIGJlIGJhbGFuY2VkXG5cdCAgICAgICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgbm9kZS51cGRhdGVIZWlnaHQoKTtcblx0ICAgICAgICAgICAgbm9kZS51cGRhdGVNYXgoKTtcblx0ICAgICAgICAgICAgdGhpcy5fcmViYWxhbmNlKG5vZGUpO1xuXHQgICAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgYW4gZXZlbnQgZnJvbSB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge09iamVjdH0gIGV2ZW50ICBUaGUgZXZlbnQgdG8gcmVtb3ZlIGZyb20gdGhlIHRpbWVsaW5lXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkludGVydmFsVGltZWxpbmV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3Quc2VhcmNoKGV2ZW50LnRpbWUsIHJlc3VsdHMpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBub2RlID0gcmVzdWx0c1tpXTtcblx0ICAgICAgICAgICAgICAgIGlmIChub2RlLmV2ZW50ID09PSBldmVudCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZU5vZGUobm9kZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGVuZ3RoLS07XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5JbnRlcnZhbFRpbWVsaW5lI1xuXHRcdCAqICBAbmFtZSBsZW5ndGhcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xlbmd0aDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgZXZlbnRzIHdob3NlIHRpbWUgdGltZSBpcyBhZnRlciB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICB0aGlzLmZvckVhY2hGcm9tKGFmdGVyLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5yZW1vdmUoZXZlbnQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgcm9vdCBub2RlIGFzIHRoZSBnaXZlbiBub2RlXG5cdFx0ICogIEBwYXJhbSB7SW50ZXJ2YWxOb2RlfSBub2RlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLl9zZXRSb290ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICB0aGlzLl9yb290ID0gbm9kZTtcblx0ICAgICAgICBpZiAodGhpcy5fcm9vdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yb290LnBhcmVudCA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXBsYWNlIHRoZSByZWZlcmVuY2VzIHRvIHRoZSBub2RlIGluIHRoZSBub2RlJ3MgcGFyZW50XG5cdFx0ICogIHdpdGggdGhlIHJlcGxhY2VtZW50IG5vZGUuXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgcmVwbGFjZW1lbnRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3JlcGxhY2VOb2RlSW5QYXJlbnQgPSBmdW5jdGlvbiAobm9kZSwgcmVwbGFjZW1lbnQpIHtcblx0ICAgICAgICBpZiAobm9kZS5wYXJlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgaWYgKG5vZGUuaXNMZWZ0Q2hpbGQoKSkge1xuXHQgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQubGVmdCA9IHJlcGxhY2VtZW50O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQucmlnaHQgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9yZWJhbGFuY2Uobm9kZS5wYXJlbnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJvb3QocmVwbGFjZW1lbnQpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIHRoZSBub2RlIGZyb20gdGhlIHRyZWUgYW5kIHJlcGxhY2UgaXQgd2l0aFxuXHRcdCAqICBhIHN1Y2Nlc3NvciB3aGljaCBmb2xsb3dzIHRoZSBzY2hlbWEuXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3JlbW92ZU5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIGlmIChub2RlLmxlZnQgPT09IG51bGwgJiYgbm9kZS5yaWdodCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yZXBsYWNlTm9kZUluUGFyZW50KG5vZGUsIG51bGwpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAobm9kZS5yaWdodCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yZXBsYWNlTm9kZUluUGFyZW50KG5vZGUsIG5vZGUubGVmdCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChub2RlLmxlZnQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcmVwbGFjZU5vZGVJblBhcmVudChub2RlLCBub2RlLnJpZ2h0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgYmFsYW5jZSA9IG5vZGUuZ2V0QmFsYW5jZSgpO1xuXHQgICAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQsIHRlbXA7XG5cdCAgICAgICAgICAgIGlmIChiYWxhbmNlID4gMCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKG5vZGUubGVmdC5yaWdodCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnJpZ2h0ID0gbm9kZS5yaWdodDtcblx0ICAgICAgICAgICAgICAgICAgICB0ZW1wID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gbm9kZS5sZWZ0LnJpZ2h0O1xuXHQgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZXBsYWNlbWVudC5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50LnJpZ2h0O1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5wYXJlbnQucmlnaHQgPSByZXBsYWNlbWVudC5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgICAgIHRlbXAgPSByZXBsYWNlbWVudC5wYXJlbnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQubGVmdCA9IG5vZGUubGVmdDtcblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5yaWdodCA9IG5vZGUucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5yaWdodC5sZWZ0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IG5vZGUucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5sZWZ0ID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgdGVtcCA9IHJlcGxhY2VtZW50O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSBub2RlLnJpZ2h0LmxlZnQ7XG5cdCAgICAgICAgICAgICAgICB3aGlsZSAocmVwbGFjZW1lbnQubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQubGVmdDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnBhcmVudCA9IHJlcGxhY2VtZW50LnBhcmVudDtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnBhcmVudC5sZWZ0ID0gcmVwbGFjZW1lbnQucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICB0ZW1wID0gcmVwbGFjZW1lbnQucGFyZW50O1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQubGVmdCA9IG5vZGUubGVmdDtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnJpZ2h0ID0gbm9kZS5yaWdodDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAobm9kZS5wYXJlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChub2RlLmlzTGVmdENoaWxkKCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBub2RlLnBhcmVudC5sZWZ0ID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50LnJpZ2h0ID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zZXRSb290KHJlcGxhY2VtZW50KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvLyB0aGlzLl9yZXBsYWNlTm9kZUluUGFyZW50KG5vZGUsIHJlcGxhY2VtZW50KTtcblx0ICAgICAgICAgICAgdGhpcy5fcmViYWxhbmNlKHRlbXApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBub2RlLmRpc3Bvc2UoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUm90YXRlIHRoZSB0cmVlIHRvIHRoZSBsZWZ0XG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3JvdGF0ZUxlZnQgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudDtcblx0ICAgICAgICB2YXIgaXNMZWZ0Q2hpbGQgPSBub2RlLmlzTGVmdENoaWxkKCk7XG5cdCAgICAgICAgLy8gTWFrZSBub2RlLnJpZ2h0IHRoZSBuZXcgcm9vdCBvZiB0aGlzIHN1YiB0cmVlIChpbnN0ZWFkIG9mIG5vZGUpXG5cdCAgICAgICAgdmFyIHBpdm90Tm9kZSA9IG5vZGUucmlnaHQ7XG5cdCAgICAgICAgbm9kZS5yaWdodCA9IHBpdm90Tm9kZS5sZWZ0O1xuXHQgICAgICAgIHBpdm90Tm9kZS5sZWZ0ID0gbm9kZTtcblx0ICAgICAgICBpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGlmIChpc0xlZnRDaGlsZCkge1xuXHQgICAgICAgICAgICAgICAgcGFyZW50LmxlZnQgPSBwaXZvdE5vZGU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBwYXJlbnQucmlnaHQgPSBwaXZvdE5vZGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSb290KHBpdm90Tm9kZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSb3RhdGUgdGhlIHRyZWUgdG8gdGhlIHJpZ2h0XG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3JvdGF0ZVJpZ2h0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cdCAgICAgICAgdmFyIGlzTGVmdENoaWxkID0gbm9kZS5pc0xlZnRDaGlsZCgpO1xuXHQgICAgICAgIC8vIE1ha2Ugbm9kZS5sZWZ0IHRoZSBuZXcgcm9vdCBvZiB0aGlzIHN1YiB0cmVlIChpbnN0ZWFkIG9mIG5vZGUpXG5cdCAgICAgICAgdmFyIHBpdm90Tm9kZSA9IG5vZGUubGVmdDtcblx0ICAgICAgICBub2RlLmxlZnQgPSBwaXZvdE5vZGUucmlnaHQ7XG5cdCAgICAgICAgcGl2b3ROb2RlLnJpZ2h0ID0gbm9kZTtcblx0ICAgICAgICBpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGlmIChpc0xlZnRDaGlsZCkge1xuXHQgICAgICAgICAgICAgICAgcGFyZW50LmxlZnQgPSBwaXZvdE5vZGU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBwYXJlbnQucmlnaHQgPSBwaXZvdE5vZGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSb290KHBpdm90Tm9kZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBCYWxhbmNlIHRoZSBCU1Rcblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcmViYWxhbmNlID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICB2YXIgYmFsYW5jZSA9IG5vZGUuZ2V0QmFsYW5jZSgpO1xuXHQgICAgICAgIGlmIChiYWxhbmNlID4gMSkge1xuXHQgICAgICAgICAgICBpZiAobm9kZS5sZWZ0LmdldEJhbGFuY2UoKSA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZUxlZnQobm9kZS5sZWZ0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZVJpZ2h0KG5vZGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmIChiYWxhbmNlIDwgLTEpIHtcblx0ICAgICAgICAgICAgaWYgKG5vZGUucmlnaHQuZ2V0QmFsYW5jZSgpID4gMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlUmlnaHQobm9kZS5yaWdodCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yb3RhdGVMZWZ0KG5vZGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgYW4gZXZlbnQgd2hvc2UgdGltZSBhbmQgZHVyYXRpb24gc3BhbiB0aGUgZ2l2ZSB0aW1lLiBXaWxsXG5cdFx0ICogIHJldHVybiB0aGUgbWF0Y2ggd2hvc2UgXCJ0aW1lXCIgdmFsdWUgaXMgY2xvc2VzdCB0byB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCB0byBhZGQgdG8gdGhlIHRpbWVsaW5lXG5cdFx0ICogIEByZXR1cm4gIHtPYmplY3R9ICBUaGUgZXZlbnQgd2hpY2ggc3BhbnMgdGhlIGRlc2lyZWQgdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3Quc2VhcmNoKHRpbWUsIHJlc3VsdHMpO1xuXHQgICAgICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggPiAwKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWF4ID0gcmVzdWx0c1swXTtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzW2ldLmxvdyA+IG1heC5sb3cpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbWF4ID0gcmVzdWx0c1tpXTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbWF4LmV2ZW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIGFsbE5vZGVzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QudHJhdmVyc2UoZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgICAgICAgIGFsbE5vZGVzLnB1c2gobm9kZSk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXYgPSBhbGxOb2Rlc1tpXS5ldmVudDtcblx0ICAgICAgICAgICAgICAgIGlmIChldikge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGluIHdoaWNoIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIG92ZXJsYXBzIHdpdGggdGhlIHRpbWUgYW5kIGR1cmF0aW9uIHRpbWUgb2YgdGhlIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBvdmVybGFwcGluZ1xuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkludGVydmFsVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3Quc2VhcmNoKHRpbWUsIHJlc3VsdHMpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gcmVzdWx0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGV2ID0gcmVzdWx0c1tpXS5ldmVudDtcblx0ICAgICAgICAgICAgICAgIGlmIChldikge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGluIHdoaWNoIHRoZSB0aW1lIGlzIGdyZWF0ZXJcblx0XHQgKiAgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSBUaGUgdGltZSB0byBjaGVjayBpZiBpdGVtcyBhcmUgYmVmb3JlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoRnJvbSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3Quc2VhcmNoQWZ0ZXIodGltZSwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSByZXN1bHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXYgPSByZXN1bHRzW2ldLmV2ZW50O1xuXHQgICAgICAgICAgICAgICAgY2FsbGJhY2soZXYpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBhbGxOb2RlcyA9IFtdO1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QudHJhdmVyc2UoZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgICAgICAgIGFsbE5vZGVzLnB1c2gobm9kZSk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGFsbE5vZGVzW2ldLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgYWxsTm9kZXMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3Jvb3QgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdElOVEVSVkFMIE5PREUgSEVMUEVSXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBSZXByZXNlbnRzIGEgbm9kZSBpbiB0aGUgYmluYXJ5IHNlYXJjaCB0cmVlLCB3aXRoIHRoZSBhZGRpdGlvblxuXHRcdCAqICBvZiBhIFwiaGlnaFwiIHZhbHVlIHdoaWNoIGtlZXBzIHRyYWNrIG9mIHRoZSBoaWdoZXN0IHZhbHVlIG9mXG5cdFx0ICogIGl0cyBjaGlsZHJlbi5cblx0XHQgKiAgUmVmZXJlbmNlczpcblx0XHQgKiAgaHR0cHM6Ly9icm9va25vdmFrLndvcmRwcmVzcy5jb20vMjAxMy8xMi8wNy9hdWdtZW50ZWQtaW50ZXJ2YWwtdHJlZS1pbi1jL1xuXHRcdCAqICBodHRwOi8vd3d3Lm1pZi52dS5sdC9+dmFsZGFzL0FMR09SSVRNQUkvTElURVJBVFVSQS9Db3JtZW4vQ29ybWVuLnBkZlxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gbG93XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBoaWdoXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICB2YXIgSW50ZXJ2YWxOb2RlID0gZnVuY3Rpb24gKGxvdywgaGlnaCwgZXZlbnQpIHtcblx0ICAgICAgICAvL3RoZSBldmVudCBjb250YWluZXJcblx0ICAgICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7XG5cdCAgICAgICAgLy90aGUgbG93IHZhbHVlXG5cdCAgICAgICAgdGhpcy5sb3cgPSBsb3c7XG5cdCAgICAgICAgLy90aGUgaGlnaCB2YWx1ZVxuXHQgICAgICAgIHRoaXMuaGlnaCA9IGhpZ2g7XG5cdCAgICAgICAgLy90aGUgaGlnaCB2YWx1ZSBmb3IgdGhpcyBhbmQgYWxsIGNoaWxkIG5vZGVzXG5cdCAgICAgICAgdGhpcy5tYXggPSB0aGlzLmhpZ2g7XG5cdCAgICAgICAgLy90aGUgbm9kZXMgdG8gdGhlIGxlZnRcblx0ICAgICAgICB0aGlzLl9sZWZ0ID0gbnVsbDtcblx0ICAgICAgICAvL3RoZSBub2RlcyB0byB0aGUgcmlnaHRcblx0ICAgICAgICB0aGlzLl9yaWdodCA9IG51bGw7XG5cdCAgICAgICAgLy90aGUgcGFyZW50IG5vZGVcblx0ICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cdCAgICAgICAgLy90aGUgbnVtYmVyIG9mIGNoaWxkIG5vZGVzXG5cdCAgICAgICAgdGhpcy5oZWlnaHQgPSAwO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnNlcnQgYSBub2RlIGludG8gdGhlIGNvcnJlY3Qgc3BvdCBpbiB0aGUgdHJlZVxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICBub2RlXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgaWYgKG5vZGUubG93IDw9IHRoaXMubG93KSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmxlZnQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMubGVmdCA9IG5vZGU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmxlZnQuaW5zZXJ0KG5vZGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJpZ2h0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMucmlnaHQgPSBub2RlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMucmlnaHQuaW5zZXJ0KG5vZGUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2VhcmNoIHRoZSB0cmVlIGZvciBub2RlcyB3aGljaCBvdmVybGFwXG5cdFx0ICogIHdpdGggdGhlIGdpdmVuIHBvaW50XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHBvaW50ICBUaGUgcG9pbnQgdG8gcXVlcnlcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICByZXN1bHRzICBUaGUgYXJyYXkgdG8gcHV0IHRoZSByZXN1bHRzXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLnNlYXJjaCA9IGZ1bmN0aW9uIChwb2ludCwgcmVzdWx0cykge1xuXHQgICAgICAgIC8vIElmIHAgaXMgdG8gdGhlIHJpZ2h0IG9mIHRoZSByaWdodG1vc3QgcG9pbnQgb2YgYW55IGludGVydmFsXG5cdCAgICAgICAgLy8gaW4gdGhpcyBub2RlIGFuZCBhbGwgY2hpbGRyZW4sIHRoZXJlIHdvbid0IGJlIGFueSBtYXRjaGVzLlxuXHQgICAgICAgIGlmIChwb2ludCA+IHRoaXMubWF4KSB7XG5cdCAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gU2VhcmNoIGxlZnQgY2hpbGRyZW5cblx0ICAgICAgICBpZiAodGhpcy5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMubGVmdC5zZWFyY2gocG9pbnQsIHJlc3VsdHMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBDaGVjayB0aGlzIG5vZGVcblx0ICAgICAgICBpZiAodGhpcy5sb3cgPD0gcG9pbnQgJiYgdGhpcy5oaWdoID4gcG9pbnQpIHtcblx0ICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBJZiBwIGlzIHRvIHRoZSBsZWZ0IG9mIHRoZSB0aW1lIG9mIHRoaXMgaW50ZXJ2YWwsXG5cdCAgICAgICAgLy8gdGhlbiBpdCBjYW4ndCBiZSBpbiBhbnkgY2hpbGQgdG8gdGhlIHJpZ2h0LlxuXHQgICAgICAgIGlmICh0aGlzLmxvdyA+IHBvaW50KSB7XG5cdCAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gU2VhcmNoIHJpZ2h0IGNoaWxkcmVuXG5cdCAgICAgICAgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodC5zZWFyY2gocG9pbnQsIHJlc3VsdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2VhcmNoIHRoZSB0cmVlIGZvciBub2RlcyB3aGljaCBhcmUgbGVzc1xuXHRcdCAqICB0aGFuIHRoZSBnaXZlbiBwb2ludFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBwb2ludCAgVGhlIHBvaW50IHRvIHF1ZXJ5XG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgcmVzdWx0cyAgVGhlIGFycmF5IHRvIHB1dCB0aGUgcmVzdWx0c1xuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS5zZWFyY2hBZnRlciA9IGZ1bmN0aW9uIChwb2ludCwgcmVzdWx0cykge1xuXHQgICAgICAgIC8vIENoZWNrIHRoaXMgbm9kZVxuXHQgICAgICAgIGlmICh0aGlzLmxvdyA+PSBwb2ludCkge1xuXHQgICAgICAgICAgICByZXN1bHRzLnB1c2godGhpcyk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMubGVmdC5zZWFyY2hBZnRlcihwb2ludCwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gc2VhcmNoIHRoZSByaWdodCBzaWRlXG5cdCAgICAgICAgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodC5zZWFyY2hBZnRlcihwb2ludCwgcmVzdWx0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnZva2UgdGhlIGNhbGxiYWNrIG9uIHRoaXMgZWxlbWVudCBhbmQgYm90aCBpdCdzIGJyYW5jaGVzXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2tcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUudHJhdmVyc2UgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICBpZiAodGhpcy5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMubGVmdC50cmF2ZXJzZShjYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMucmlnaHQudHJhdmVyc2UoY2FsbGJhY2spO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVXBkYXRlIHRoZSBoZWlnaHQgb2YgdGhlIG5vZGVcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUudXBkYXRlSGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwgJiYgdGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLmhlaWdodCA9IE1hdGgubWF4KHRoaXMubGVmdC5oZWlnaHQsIHRoaXMucmlnaHQuaGVpZ2h0KSArIDE7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5yaWdodC5oZWlnaHQgKyAxO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5sZWZ0LmhlaWdodCArIDE7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSAwO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVXBkYXRlIHRoZSBoZWlnaHQgb2YgdGhlIG5vZGVcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUudXBkYXRlTWF4ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMubWF4ID0gdGhpcy5oaWdoO1xuXHQgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5tYXggPSBNYXRoLm1heCh0aGlzLm1heCwgdGhpcy5sZWZ0Lm1heCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMubWF4ID0gTWF0aC5tYXgodGhpcy5tYXgsIHRoaXMucmlnaHQubWF4KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBiYWxhbmNlIGlzIGhvdyB0aGUgbGVhZnMgYXJlIGRpc3RyaWJ1dGVkIG9uIHRoZSBub2RlXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICBOZWdhdGl2ZSBudW1iZXJzIGFyZSBiYWxhbmNlZCB0byB0aGUgcmlnaHRcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuZ2V0QmFsYW5jZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgYmFsYW5jZSA9IDA7XG5cdCAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCAmJiB0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGJhbGFuY2UgPSB0aGlzLmxlZnQuaGVpZ2h0IC0gdGhpcy5yaWdodC5oZWlnaHQ7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgYmFsYW5jZSA9IHRoaXMubGVmdC5oZWlnaHQgKyAxO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBiYWxhbmNlID0gLSh0aGlzLnJpZ2h0LmhlaWdodCArIDEpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gYmFsYW5jZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhpcyBub2RlIGlzIHRoZSBsZWZ0IGNoaWxkXG5cdFx0ICogIG9mIGl0cyBwYXJlbnRcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuaXNMZWZ0Q2hpbGQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50ICE9PSBudWxsICYmIHRoaXMucGFyZW50LmxlZnQgPT09IHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGdldC9zZXQgdGhlIGxlZnQgbm9kZVxuXHRcdCAqICBAdHlwZSB7SW50ZXJ2YWxOb2RlfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEludGVydmFsTm9kZS5wcm90b3R5cGUsICdsZWZ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGVmdDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGVmdCA9IG5vZGU7XG5cdCAgICAgICAgICAgIGlmIChub2RlICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICBub2RlLnBhcmVudCA9IHRoaXM7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy51cGRhdGVIZWlnaHQoKTtcblx0ICAgICAgICAgICAgdGhpcy51cGRhdGVNYXgoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBnZXQvc2V0IHRoZSByaWdodCBub2RlXG5cdFx0ICogIEB0eXBlIHtJbnRlcnZhbE5vZGV9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW50ZXJ2YWxOb2RlLnByb3RvdHlwZSwgJ3JpZ2h0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmlnaHQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3JpZ2h0ID0gbm9kZTtcblx0ICAgICAgICAgICAgaWYgKG5vZGUgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gdGhpcztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZUhlaWdodCgpO1xuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZU1heCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIG51bGwgb3V0IHJlZmVyZW5jZXMuXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xlZnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmV2ZW50ID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRFTkQgSU5URVJWQUwgTk9ERSBIRUxQRVJcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgcmV0dXJuIFRvbmUuSW50ZXJ2YWxUaW1lbGluZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRpY2tzIGlzIGEgcHJpbWl0aXZlIHR5cGUgZm9yIGVuY29kaW5nIFRpbWUgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgVG9uZS5UaWNrcyBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBvciB3aXRob3V0IHRoZSBgbmV3YCBrZXl3b3JkLiBUb25lLlRpY2tzIGNhbiBiZSBwYXNzZWRcblx0XHQgKiAgICAgICAgIGludG8gdGhlIHBhcmFtZXRlciBvZiBhbnkgbWV0aG9kIHdoaWNoIHRha2VzIHRpbWUgYXMgYW4gYXJndW1lbnQuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UcmFuc3BvcnRUaW1lfVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFRoZSB1bml0cyBvZiB0aGUgdmFsdWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHQgPSBUb25lLlRpY2tzKFwiNG5cIik7Ly9hIHF1YXJ0ZXIgbm90ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcyA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLlRpY2tzKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0VGltZS5jYWxsKHRoaXMsIHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5UaWNrcyh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaWNrcywgVG9uZS5UcmFuc3BvcnRUaW1lKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB1bml0cyBpZiBub25lIGFyZSBnaXZlbi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLl9kZWZhdWx0VW5pdHMgPSAnaSc7XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIGN1cnJlbnQgdGltZSBpbiB0aGUgZ2l2ZW4gdW5pdHNcblx0XHQgKiBAcmV0dXJuIHtUaWNrc31cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX25vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQudGlja3M7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGJlYXRzIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBiZWF0c1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cyA9IGZ1bmN0aW9uIChiZWF0cykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9nZXRQUFEoKSAqIGJlYXRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHNlY29uZCBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1NlY29uZHN9IHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLl9zZWNvbmRzVG9Vbml0cyA9IGZ1bmN0aW9uIChzZWNvbmRzKSB7XG5cdCAgICAgICAgcmV0dXJuIHNlY29uZHMgLyAoNjAgLyB0aGlzLl9nZXRCcG0oKSkgKiB0aGlzLl9nZXRQUFEoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB0aWNrIGluIHRoZSBjdXJyZW50IHRpbWUgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtUaWNrc30gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLl90aWNrc1RvVW5pdHMgPSBmdW5jdGlvbiAodGlja3MpIHtcblx0ICAgICAgICByZXR1cm4gdGlja3M7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS50b1RpY2tzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLnRvU2Vjb25kcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgLyB0aGlzLl9nZXRQUFEoKSAqICg2MCAvIHRoaXMuX2dldEJwbSgpKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaWNrcztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRyYW5zcG9ydEV2ZW50IGlzIGFuIGludGVybmFsIGNsYXNzIHVzZWQgYnkgKFRvbmUuVHJhbnNwb3J0KVtUcmFuc3BvcnRdXG5cdFx0ICogICAgICAgICB0byBzY2hlZHVsZSBldmVudHMuIERvIG5vIGludm9rZSB0aGlzIGNsYXNzIGRpcmVjdGx5LCBpdCBpc1xuXHRcdCAqICAgICAgICAgaGFuZGxlZCBmcm9tIHdpdGhpbiBUb25lLlRyYW5zcG9ydC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydEV2ZW50ID0gZnVuY3Rpb24gKFRyYW5zcG9ydCwgb3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5UcmFuc3BvcnRFdmVudC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogUmVmZXJlbmNlIHRvIHRoZSBUcmFuc3BvcnQgdGhhdCBjcmVhdGVkIGl0XG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5UcmFuc3BvcnR9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydCA9IFRyYW5zcG9ydDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB1bmlxdWUgaWQgb2YgdGhlIGV2ZW50XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pZCA9IFRvbmUuVHJhbnNwb3J0RXZlbnQuX2V2ZW50SWQrKztcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB0aW1lIHRoZSBldmVudCBzdGFydHNcblx0XHRcdCAqIEB0eXBlIHtUaWNrc31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudGltZSA9IFRvbmUuVGlja3Mob3B0aW9ucy50aW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBjYWxsYmFjayB0byBpbnZva2Vcblx0XHRcdCAqIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogSWYgdGhlIGV2ZW50IHNob3VsZCBiZSByZW1vdmVkIGFmdGVyIGJlaW5nIGNyZWF0ZWQuXG5cdFx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vbmNlID0gb3B0aW9ucy5vbmNlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJhbnNwb3J0RXZlbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlZmF1bHRzXG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydEV2ZW50LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvbmNlJzogZmFsc2UsXG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ3VycmVudCBJRCBjb3VudGVyXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAc3RhdGljXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQuX2V2ZW50SWQgPSAwO1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlIHRoZSBldmVudCBjYWxsYmFjay5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBUaGUgQXVkaW9Db250ZXh0IHRpbWUgaW4gc2Vjb25kcyBvZiB0aGUgZXZlbnRcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQucHJvdG90eXBlLmludm9rZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX29uY2UgJiYgdGhpcy5UcmFuc3BvcnQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuaWQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRFdmVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0RXZlbnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudCBpcyBhbiBpbnRlcm5hbCBjbGFzcyB1c2VkIGJ5IFRvbmUuVHJhbnNwb3J0XG5cdFx0ICogICAgICAgICB0byBzY2hlZHVsZSByZXBlYXQgZXZlbnRzLiBUaGlzIGNsYXNzIHNob3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIGRpcmVjdGx5LlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UcmFuc3BvcnRFdmVudH1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQgPSBmdW5jdGlvbiAoVHJhbnNwb3J0LCBvcHRpb25zKSB7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5jYWxsKHRoaXMsIFRyYW5zcG9ydCwgb3B0aW9ucyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFdoZW4gdGhlIGV2ZW50IHNob3VsZCBzdG9wIHJlcGVhdGluZ1xuXHRcdFx0ICogQHR5cGUge1RpY2tzfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZHVyYXRpb24gPSBUb25lLlRpY2tzKG9wdGlvbnMuZHVyYXRpb24pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGludGVydmFsIG9mIHRoZSByZXBlYXRlZCBldmVudFxuXHRcdFx0ICogQHR5cGUge1RpY2tzfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ludGVydmFsID0gVG9uZS5UaWNrcyhvcHRpb25zLmludGVydmFsKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBJRCBvZiB0aGUgY3VycmVudCB0aW1lbGluZSBldmVudFxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBJRCBvZiB0aGUgbmV4dCB0aW1lbGluZSBldmVudFxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9uZXh0SWQgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAgKiBUaGUgdGltZSBvZiB0aGUgbmV4dCBldmVudFxuXHRcdFx0ICAqIEB0eXBlIHtUaWNrc31cblx0XHRcdCAgKiBAcHJpdmF0ZVxuXHRcdFx0ICAqL1xuXHQgICAgICAgIHRoaXMuX25leHRUaWNrID0gdGhpcy50aW1lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogYSByZWZlcmVuY2UgdG8gdGhlIGJvdW5kIHN0YXJ0IG1ldGhvZFxuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2JvdW5kUmVzdGFydCA9IHRoaXMuX3Jlc3RhcnQuYmluZCh0aGlzKTtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5vbignc3RhcnQgbG9vcFN0YXJ0JywgdGhpcy5fYm91bmRSZXN0YXJ0KTtcblx0ICAgICAgICB0aGlzLl9yZXN0YXJ0KCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudCwgVG9uZS5UcmFuc3BvcnRFdmVudCk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVmYXVsdHNcblx0XHQgKiBAc3RhdGljXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2R1cmF0aW9uJzogSW5maW5pdHksXG5cdCAgICAgICAgJ2ludGVydmFsJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludm9rZSB0aGUgY2FsbGJhY2suIFJldHVybnMgdGhlIHRpY2sgdGltZSB3aGljaFxuXHRcdCAqIHRoZSBuZXh0IGV2ZW50IHNob3VsZCBiZSBzY2hlZHVsZWQgYXQuXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB0aW1lICBUaGUgQXVkaW9Db250ZXh0IHRpbWUgaW4gc2Vjb25kcyBvZiB0aGUgZXZlbnRcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQucHJvdG90eXBlLmludm9rZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgLy9jcmVhdGUgbW9yZSBldmVudHMgaWYgbmVjZXNzYXJ5XG5cdCAgICAgICAgdGhpcy5fY3JlYXRlRXZlbnRzKHRpbWUpO1xuXHQgICAgICAgIC8vY2FsbCB0aGUgc3VwZXIgY2xhc3Ncblx0ICAgICAgICBUb25lLlRyYW5zcG9ydEV2ZW50LnByb3RvdHlwZS5pbnZva2UuY2FsbCh0aGlzLCB0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBQdXNoIG1vcmUgZXZlbnRzIG9udG8gdGhlIHRpbWVsaW5lIHRvIGtlZXAgdXAgd2l0aCB0aGUgcG9zaXRpb24gb2YgdGhlIHRpbWVsaW5lXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQucHJvdG90eXBlLl9jcmVhdGVFdmVudHMgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vIHNjaGVkdWxlIHRoZSBuZXh0IGV2ZW50XG5cdCAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5UcmFuc3BvcnQuZ2V0VGlja3NBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKHRpY2tzID49IHRoaXMudGltZSAmJiB0aWNrcyA+PSB0aGlzLl9uZXh0VGljayAmJiB0aGlzLl9uZXh0VGljayArIHRoaXMuX2ludGVydmFsIDwgdGhpcy50aW1lICsgdGhpcy5kdXJhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9uZXh0VGljayArPSB0aGlzLl9pbnRlcnZhbDtcblx0ICAgICAgICAgICAgdGhpcy5fY3VycmVudElkID0gdGhpcy5fbmV4dElkO1xuXHQgICAgICAgICAgICB0aGlzLl9uZXh0SWQgPSB0aGlzLlRyYW5zcG9ydC5zY2hlZHVsZU9uY2UodGhpcy5pbnZva2UuYmluZCh0aGlzKSwgVG9uZS5UaWNrcyh0aGlzLl9uZXh0VGljaykpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBQdXNoIG1vcmUgZXZlbnRzIG9udG8gdGhlIHRpbWVsaW5lIHRvIGtlZXAgdXAgd2l0aCB0aGUgcG9zaXRpb24gb2YgdGhlIHRpbWVsaW5lXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQucHJvdG90eXBlLl9yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5jbGVhcih0aGlzLl9jdXJyZW50SWQpO1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX25leHRJZCk7XG5cdCAgICAgICAgdGhpcy5fbmV4dFRpY2sgPSB0aGlzLnRpbWU7XG5cdCAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5UcmFuc3BvcnQuZ2V0VGlja3NBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKHRpY2tzID4gdGhpcy50aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX25leHRUaWNrID0gdGhpcy50aW1lICsgTWF0aC5jZWlsKCh0aWNrcyAtIHRoaXMudGltZSkgLyB0aGlzLl9pbnRlcnZhbCkgKiB0aGlzLl9pbnRlcnZhbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY3VycmVudElkID0gdGhpcy5UcmFuc3BvcnQuc2NoZWR1bGVPbmNlKHRoaXMuaW52b2tlLmJpbmQodGhpcyksIFRvbmUuVGlja3ModGhpcy5fbmV4dFRpY2spKTtcblx0ICAgICAgICB0aGlzLl9uZXh0VGljayArPSB0aGlzLl9pbnRlcnZhbDtcblx0ICAgICAgICB0aGlzLl9uZXh0SWQgPSB0aGlzLlRyYW5zcG9ydC5zY2hlZHVsZU9uY2UodGhpcy5pbnZva2UuYmluZCh0aGlzKSwgVG9uZS5UaWNrcyh0aGlzLl9uZXh0VGljaykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5jbGVhcih0aGlzLl9jdXJyZW50SWQpO1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX25leHRJZCk7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQub2ZmKCdzdGFydCBsb29wU3RhcnQnLCB0aGlzLl9ib3VuZFJlc3RhcnQpO1xuXHQgICAgICAgIHRoaXMuX2JvdW5kQ3JlYXRlRXZlbnRzID0gbnVsbDtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydEV2ZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5kdXJhdGlvbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRyYW5zcG9ydCBmb3IgdGltaW5nIG11c2ljYWwgZXZlbnRzLlxuXHRcdCAqICAgICAgICAgIFN1cHBvcnRzIHRlbXBvIGN1cnZlcyBhbmQgdGltZSBjaGFuZ2VzLiBVbmxpa2UgYnJvd3Nlci1iYXNlZCB0aW1pbmcgKHNldEludGVydmFsLCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUpXG5cdFx0ICogICAgICAgICAgVG9uZS5UcmFuc3BvcnQgdGltaW5nIGV2ZW50cyBwYXNzIGluIHRoZSBleGFjdCB0aW1lIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnRcblx0XHQgKiAgICAgICAgICBpbiB0aGUgYXJndW1lbnQgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLiBQYXNzIHRoYXQgdGltZSB2YWx1ZSB0byB0aGUgb2JqZWN0XG5cdFx0ICogICAgICAgICAgeW91J3JlIHNjaGVkdWxpbmcuIDxicj48YnI+XG5cdFx0ICogICAgICAgICAgQSBzaW5nbGUgdHJhbnNwb3J0IGlzIGNyZWF0ZWQgZm9yIHlvdSB3aGVuIHRoZSBsaWJyYXJ5IGlzIGluaXRpYWxpemVkLlxuXHRcdCAqICAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICAgVGhlIHRyYW5zcG9ydCBlbWl0cyB0aGUgZXZlbnRzOiBcInN0YXJ0XCIsIFwic3RvcFwiLCBcInBhdXNlXCIsIGFuZCBcImxvb3BcIiB3aGljaCBhcmVcblx0XHQgKiAgICAgICAgICBjYWxsZWQgd2l0aCB0aGUgdGltZSBvZiB0aGF0IGV2ZW50IGFzIHRoZSBhcmd1bWVudC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbWl0dGVyfVxuXHRcdCAqICBAc2luZ2xldG9uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9yZXBlYXRlZCBldmVudCBldmVyeSA4dGggbm90ZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlUmVwZWF0KGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0Ly9kbyBzb21ldGhpbmcgd2l0aCB0aGUgdGltZVxuXHRcdCAqIH0sIFwiOG5cIik7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zY2hlZHVsZSBhbiBldmVudCBvbiB0aGUgMTZ0aCBtZWFzdXJlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHQvL2RvIHNvbWV0aGluZyB3aXRoIHRoZSB0aW1lXG5cdFx0ICogfSwgXCIxNjowOjBcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIuY2FsbCh0aGlzKTtcblx0ICAgICAgICBUb25lLmdldENvbnRleHQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvL1x0TE9PUElOR1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBcdElmIHRoZSB0cmFuc3BvcnQgbG9vcHMgb3Igbm90LlxuXHRcdFx0XHQgKiAgQHR5cGUge2Jvb2xlYW59XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLmxvb3AgPSBmYWxzZTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFx0VGhlIGxvb3Agc3RhcnQgcG9zaXRpb24gaW4gdGlja3Ncblx0XHRcdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSAwO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogXHRUaGUgbG9vcCBlbmQgcG9zaXRpb24gaW4gdGlja3Ncblx0XHRcdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gMDtcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLy9cdENMT0NLL1RFTVBPXG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBQdWxzZXMgcGVyIHF1YXJ0ZXIgaXMgdGhlIG51bWJlciBvZiB0aWNrcyBwZXIgcXVhcnRlciBub3RlLlxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fcHBxID0gVHJhbnNwb3J0Q29uc3RydWN0b3IuZGVmYXVsdHMuUFBRO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIHdhdGNoZXMgdGhlIG1haW4gb3NjaWxsYXRvciBmb3IgdGltaW5nIHRpY2tzXG5cdFx0XHRcdCAqICBpbml0aWFsbHkgc3RhcnRzIGF0IDEyMGJwbVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICogIEB0eXBlIHtUb25lLkNsb2NrfVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fY2xvY2sgPSBuZXcgVG9uZS5DbG9jayh7XG5cdCAgICAgICAgICAgICAgICAnY2FsbGJhY2snOiB0aGlzLl9wcm9jZXNzVGljay5iaW5kKHRoaXMpLFxuXHQgICAgICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IDBcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2JpbmRDbG9ja0V2ZW50cygpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFRoZSBCZWF0cyBQZXIgTWludXRlIG9mIHRoZSBUcmFuc3BvcnQuXG5cdFx0XHRcdCAqICBAdHlwZSB7QlBNfVxuXHRcdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdFx0ICogVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlID0gODA7XG5cdFx0XHRcdCAqIC8vcmFtcCB0aGUgYnBtIHRvIDEyMCBvdmVyIDEwIHNlY29uZHNcblx0XHRcdFx0ICogVG9uZS5UcmFuc3BvcnQuYnBtLnJhbXBUbygxMjAsIDEwKTtcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuYnBtID0gdGhpcy5fY2xvY2suZnJlcXVlbmN5O1xuXHQgICAgICAgICAgICB0aGlzLmJwbS5fdG9Vbml0cyA9IHRoaXMuX3RvVW5pdHMuYmluZCh0aGlzKTtcblx0ICAgICAgICAgICAgdGhpcy5icG0uX2Zyb21Vbml0cyA9IHRoaXMuX2Zyb21Vbml0cy5iaW5kKHRoaXMpO1xuXHQgICAgICAgICAgICB0aGlzLmJwbS51bml0cyA9IFRvbmUuVHlwZS5CUE07XG5cdCAgICAgICAgICAgIHRoaXMuYnBtLnZhbHVlID0gVHJhbnNwb3J0Q29uc3RydWN0b3IuZGVmYXVsdHMuYnBtO1xuXHQgICAgICAgICAgICB0aGlzLl9yZWFkT25seSgnYnBtJyk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHRpbWUgc2lnbmF0dXJlLCBvciBtb3JlIGFjY3VyYXRlbHkgdGhlIG51bWVyYXRvclxuXHRcdFx0XHQgKiAgb2YgdGhlIHRpbWUgc2lnbmF0dXJlIG92ZXIgYSBkZW5vbWluYXRvciBvZiA0LlxuXHRcdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lU2lnbmF0dXJlID0gVHJhbnNwb3J0Q29uc3RydWN0b3IuZGVmYXVsdHMudGltZVNpZ25hdHVyZTtcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLy9cdFRJTUVMSU5FIEVWRU5UU1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgQWxsIHRoZSBldmVudHMgaW4gYW4gb2JqZWN0IHRvIGtlZXAgdHJhY2sgYnkgSURcblx0XHRcdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzID0ge307XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBcdFRoZSBzY2hlZHVsZWQgZXZlbnRzLlxuXHRcdFx0XHQgKiAgQHR5cGUge1RvbmUuVGltZWxpbmV9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSBuZXcgVG9uZS5UaW1lbGluZSgpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFJlcGVhdGVkIGV2ZW50c1xuXHRcdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3JlcGVhdGVkRXZlbnRzID0gbmV3IFRvbmUuSW50ZXJ2YWxUaW1lbGluZSgpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIEFsbCBvZiB0aGUgc3luY2VkIFNpZ25hbHNcblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9zeW5jZWRTaWduYWxzID0gW107XG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8vXHRTV0lOR1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHN1YmRpdmlzaW9uIG9mIHRoZSBzd2luZ1xuXHRcdFx0XHQgKiAgQHR5cGUgIHtUaWNrc31cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9zd2luZ1RpY2tzID0gVHJhbnNwb3J0Q29uc3RydWN0b3IuZGVmYXVsdHMuUFBRIC8gMjtcblx0ICAgICAgICAgICAgLy84blxuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFRoZSBzd2luZyBhbW91bnRcblx0XHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9zd2luZ0Ftb3VudCA9IDA7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyYW5zcG9ydCwgVG9uZS5FbWl0dGVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdHNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdicG0nOiAxMjAsXG5cdCAgICAgICAgJ3N3aW5nJzogMCxcblx0ICAgICAgICAnc3dpbmdTdWJkaXZpc2lvbic6ICc4bicsXG5cdCAgICAgICAgJ3RpbWVTaWduYXR1cmUnOiA0LFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdsb29wRW5kJzogJzRtJyxcblx0ICAgICAgICAnUFBRJzogMTkyXG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFRJQ0tTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgY2FsbGVkIG9uIGV2ZXJ5IHRpY2tcblx0XHQgKiAgQHBhcmFtICAge251bWJlcn0gdGlja1RpbWUgY2xvY2sgcmVsYXRpdmUgdGljayB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuX3Byb2Nlc3NUaWNrID0gZnVuY3Rpb24gKHRpY2tUaW1lLCB0aWNrcykge1xuXHQgICAgICAgIC8vaGFuZGxlIHN3aW5nXG5cdCAgICAgICAgaWYgKHRoaXMuX3N3aW5nQW1vdW50ID4gMCAmJiB0aWNrcyAlIHRoaXMuX3BwcSAhPT0gMCAmJiAvL25vdCBvbiBhIGRvd25iZWF0XG5cdCAgICAgICAgICAgIHRpY2tzICUgKHRoaXMuX3N3aW5nVGlja3MgKiAyKSAhPT0gMCkge1xuXHQgICAgICAgICAgICAvL2FkZCBzb21lIHN3aW5nXG5cdCAgICAgICAgICAgIHZhciBwcm9ncmVzcyA9IHRpY2tzICUgKHRoaXMuX3N3aW5nVGlja3MgKiAyKSAvICh0aGlzLl9zd2luZ1RpY2tzICogMik7XG5cdCAgICAgICAgICAgIHZhciBhbW91bnQgPSBNYXRoLnNpbihwcm9ncmVzcyAqIE1hdGguUEkpICogdGhpcy5fc3dpbmdBbW91bnQ7XG5cdCAgICAgICAgICAgIHRpY2tUaW1lICs9IFRvbmUuVGlja3ModGhpcy5fc3dpbmdUaWNrcyAqIDIgLyAzKS50b1NlY29uZHMoKSAqIGFtb3VudDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9kbyB0aGUgbG9vcCB0ZXN0XG5cdCAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICBpZiAodGlja3MgPj0gdGhpcy5fbG9vcEVuZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb29wRW5kJywgdGlja1RpbWUpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY2xvY2suc2V0VGlja3NBdFRpbWUodGhpcy5fbG9vcFN0YXJ0LCB0aWNrVGltZSk7XG5cdCAgICAgICAgICAgICAgICB0aWNrcyA9IHRoaXMuX2xvb3BTdGFydDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9vcFN0YXJ0JywgdGlja1RpbWUsIHRoaXMuX2Nsb2NrLmdldFNlY29uZHNBdFRpbWUodGlja1RpbWUpKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9vcCcsIHRpY2tUaW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2ludm9rZSB0aGUgdGltZWxpbmUgZXZlbnRzIHNjaGVkdWxlZCBvbiB0aGlzIHRpY2tcblx0ICAgICAgICB0aGlzLl90aW1lbGluZS5mb3JFYWNoQXRUaW1lKHRpY2tzLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnQuaW52b2tlKHRpY2tUaW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0U0NIRURVTEFCTEUgRVZFTlRTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGUgYW4gZXZlbnQgYWxvbmcgdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBhdCB0aGUgdGltZS5cblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSAgdGltZSBUaGUgdGltZSB0byBpbnZva2UgdGhlIGNhbGxiYWNrIGF0LlxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9IFRoZSBpZCBvZiB0aGUgZXZlbnQgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGNhbmNlbGluZyB0aGUgZXZlbnQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIHRoZSBjYWxsYmFjayB3aGVuIHRoZSBUcmFuc3BvcnQgcmVhY2hlcyB0aGUgZGVzaXJlZCB0aW1lXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHRlbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUpO1xuXHRcdCAqIH0sIFwiMTI4aVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChjYWxsYmFjaywgdGltZSkge1xuXHQgICAgICAgIHZhciBldmVudCA9IG5ldyBUb25lLlRyYW5zcG9ydEV2ZW50KHRoaXMsIHtcblx0ICAgICAgICAgICAgJ3RpbWUnOiBUb25lLlRyYW5zcG9ydFRpbWUodGltZSksXG5cdCAgICAgICAgICAgICdjYWxsYmFjayc6IGNhbGxiYWNrXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEV2ZW50KGV2ZW50LCB0aGlzLl90aW1lbGluZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlIGEgcmVwZWF0ZWQgZXZlbnQgYWxvbmcgdGhlIHRpbWVsaW5lLiBUaGUgZXZlbnQgd2lsbCBmaXJlXG5cdFx0ICogIGF0IHRoZSBgaW50ZXJ2YWxgIHN0YXJ0aW5nIGF0IHRoZSBgc3RhcnRUaW1lYCBhbmQgZm9yIHRoZSBzcGVjaWZpZWRcblx0XHQgKiAgYGR1cmF0aW9uYC5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayB0byBpbnZva2UuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICAgIGludGVydmFsICAgVGhlIGR1cmF0aW9uIGJldHdlZW4gc3VjY2Vzc2l2ZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy4gTXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlci5cblx0XHQgKiAgQHBhcmFtICB7VHJhbnNwb3J0VGltZT19ICAgIHN0YXJ0VGltZSAgV2hlbiBhbG9uZyB0aGUgdGltZWxpbmUgdGhlIGV2ZW50cyBzaG91bGRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCBiZWluZyBpbnZva2VkLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtkdXJhdGlvbj1JbmZpbml0eV0gSG93IGxvbmcgdGhlIGV2ZW50IHNob3VsZCByZXBlYXQuXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICAgIFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50LiBVc2UgdGhpcyB0byBjYW5jZWxcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBldmVudC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2EgY2FsbGJhY2sgaW52b2tlZCBldmVyeSBlaWdodGggbm90ZSBhZnRlciB0aGUgZmlyc3QgbWVhc3VyZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlUmVwZWF0KGNhbGxiYWNrLCBcIjhuXCIsIFwiMW1cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc2NoZWR1bGVSZXBlYXQgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGludGVydmFsLCBzdGFydFRpbWUsIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gbmV3IFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQodGhpcywge1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snOiBjYWxsYmFjayxcblx0ICAgICAgICAgICAgJ2ludGVydmFsJzogVG9uZS5UaW1lKGludGVydmFsKSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiBUb25lLlRyYW5zcG9ydFRpbWUoc3RhcnRUaW1lKSxcblx0ICAgICAgICAgICAgJ2R1cmF0aW9uJzogVG9uZS5UaW1lKFRvbmUuZGVmYXVsdEFyZyhkdXJhdGlvbiwgSW5maW5pdHkpKVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8va2ljayBpdCBvZmYgaWYgdGhlIFRyYW5zcG9ydCBpcyBzdGFydGVkXG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEV2ZW50KGV2ZW50LCB0aGlzLl9yZXBlYXRlZEV2ZW50cyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlIGFuIGV2ZW50IHRoYXQgd2lsbCBiZSByZW1vdmVkIGFmdGVyIGl0IGlzIGludm9rZWQuXG5cdFx0ICogIE5vdGUgdGhhdCBpZiB0aGUgZ2l2ZW4gdGltZSBpcyBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgdHJhbnNwb3J0IHRpbWUsXG5cdFx0ICogIHRoZSBldmVudCB3aWxsIGJlIGludm9rZWQgaW1tZWRpYXRlbHkuXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugb25jZS5cblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSB0aW1lIFRoZSB0aW1lIHRoZSBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZC5cblx0XHQgKiAgQHJldHVybnMge051bWJlcn0gVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQuXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc2NoZWR1bGVPbmNlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCB0aW1lKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gbmV3IFRvbmUuVHJhbnNwb3J0RXZlbnQodGhpcywge1xuXHQgICAgICAgICAgICAndGltZSc6IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKSxcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJzogY2FsbGJhY2ssXG5cdCAgICAgICAgICAgICdvbmNlJzogdHJ1ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9hZGRFdmVudChldmVudCwgdGhpcy5fdGltZWxpbmUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhciB0aGUgcGFzc2VkIGluIGV2ZW50IGlkIGZyb20gdGhlIHRpbWVsaW5lXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBldmVudElkIFRoZSBpZCBvZiB0aGUgZXZlbnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGV2ZW50SWQpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc2NoZWR1bGVkRXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50SWQpKSB7XG5cdCAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5fc2NoZWR1bGVkRXZlbnRzW2V2ZW50SWQudG9TdHJpbmcoKV07XG5cdCAgICAgICAgICAgIGl0ZW0udGltZWxpbmUucmVtb3ZlKGl0ZW0uZXZlbnQpO1xuXHQgICAgICAgICAgICBpdGVtLmV2ZW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3NjaGVkdWxlZEV2ZW50c1tldmVudElkLnRvU3RyaW5nKCldO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBBZGQgYW4gZXZlbnQgdG8gdGhlIGNvcnJlY3QgdGltZWxpbmUuIEtlZXAgdHJhY2sgb2YgdGhlXG5cdFx0ICogdGltZWxpbmUgaXQgd2FzIGFkZGVkIHRvLlxuXHRcdCAqIEBwYXJhbSB7VG9uZS5UcmFuc3BvcnRFdmVudH1cdGV2ZW50XG5cdFx0ICogQHBhcmFtIHtUb25lLlRpbWVsaW5lfSB0aW1lbGluZVxuXHRcdCAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSBldmVudCBpZCB3aGljaCB3YXMganVzdCBhZGRlZFxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuX2FkZEV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50LCB0aW1lbGluZSkge1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50c1tldmVudC5pZC50b1N0cmluZygpXSA9IHtcblx0ICAgICAgICAgICAgJ2V2ZW50JzogZXZlbnQsXG5cdCAgICAgICAgICAgICd0aW1lbGluZSc6IHRpbWVsaW5lXG5cdCAgICAgICAgfTtcblx0ICAgICAgICB0aW1lbGluZS5hZGQoZXZlbnQpO1xuXHQgICAgICAgIHJldHVybiBldmVudC5pZDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIHNjaGVkdWxlZCBldmVudHMgZnJvbSB0aGUgdGltZWxpbmUgYWZ0ZXJcblx0XHQgKiAgdGhlIGdpdmVuIHRpbWUuIFJlcGVhdGVkIGV2ZW50cyB3aWxsIGJlIHJlbW92ZWRcblx0XHQgKiAgaWYgdGhlaXIgc3RhcnRUaW1lIGlzIGFmdGVyIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gW2FmdGVyPTBdIENsZWFyIGFsbCBldmVudHMgYWZ0ZXJcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyB0aW1lLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICBhZnRlciA9IFRvbmUuZGVmYXVsdEFyZyhhZnRlciwgMCk7XG5cdCAgICAgICAgYWZ0ZXIgPSB0aGlzLnRvVGlja3MoYWZ0ZXIpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lLmZvckVhY2hGcm9tKGFmdGVyLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5jbGVhcihldmVudC5pZCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB0aGlzLl9yZXBlYXRlZEV2ZW50cy5mb3JFYWNoRnJvbShhZnRlciwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2xlYXIoZXZlbnQuaWQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFNUQVJUL1NUT1AvUEFVU0Vcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBCaW5kIHN0YXJ0L3N0b3AvcGF1c2UgZXZlbnRzIGZyb20gdGhlIGNsb2NrIGFuZCBlbWl0IHRoZW0uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuX2JpbmRDbG9ja0V2ZW50cyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9jbG9jay5vbignc3RhcnQnLCBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuVGlja3Mob2Zmc2V0KS50b1NlY29uZHMoKTtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KCdzdGFydCcsIHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB0aGlzLl9jbG9jay5vbignc3RvcCcsIGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RvcCcsIHRpbWUpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sub24oJ3BhdXNlJywgZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KCdwYXVzZScsIHRpbWUpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiwgXCJzdG9wcGVkXCIsIG9yIFwicGF1c2VkXCJcblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbG9jay5nZXRTdGF0ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgdHJhbnNwb3J0IGFuZCBhbGwgc291cmNlcyBzeW5jZWQgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSB0cmFuc3BvcnQgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lPX0gb2Zmc2V0IFRoZSB0aW1lbGluZSBvZmZzZXQgdG8gc3RhcnQgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IGluIG9uZSBzZWNvbmQgc3RhcnRpbmcgYXQgYmVnaW5uaW5nIG9mIHRoZSA1dGggbWVhc3VyZS5cblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdGFydChcIisxXCIsIFwiNDowOjBcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgY2xvY2tcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQob2Zmc2V0KSkge1xuXHQgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLnRvVGlja3Mob2Zmc2V0KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY2xvY2suc3RhcnQodGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgdHJhbnNwb3J0IGFuZCBhbGwgc291cmNlcyBzeW5jZWQgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSB0cmFuc3BvcnQgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0b3AoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9jbG9jay5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQYXVzZSB0aGUgdHJhbnNwb3J0IGFuZCBhbGwgc291cmNlcyBzeW5jZWQgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sucGF1c2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVG9nZ2xlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB0cmFuc3BvcnQuIElmIGl0IGlzXG5cdFx0ICogc3RhcnRlZCwgaXQgd2lsbCBzdG9wIGl0LCBvdGhlcndpc2UgaXQgd2lsbCBzdGFydCB0aGUgVHJhbnNwb3J0LlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lIFRoZSB0aW1lIG9mIHRoZSBldmVudFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0fSAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fY2xvY2suZ2V0U3RhdGVBdFRpbWUodGltZSkgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFNFVFRFUlMvR0VUVEVSU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0aW1lIHNpZ25hdHVyZSBhcyBqdXN0IHRoZSBudW1lcmF0b3Igb3ZlciA0LlxuXHRcdCAqICBGb3IgZXhhbXBsZSA0LzQgd291bGQgYmUganVzdCA0IGFuZCA2Lzggd291bGQgYmUgMy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfEFycmF5fVxuXHRcdCAqICBAbmFtZSB0aW1lU2lnbmF0dXJlXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jb21tb24gdGltZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnRpbWVTaWduYXR1cmUgPSA0O1xuXHRcdCAqIC8vIDcvOFxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnRpbWVTaWduYXR1cmUgPSBbNywgOF07XG5cdFx0ICogLy90aGlzIHdpbGwgYmUgcmVkdWNlZCB0byBhIHNpbmdsZSBudW1iZXJcblx0XHQgKiBUb25lLlRyYW5zcG9ydC50aW1lU2lnbmF0dXJlOyAvL3JldHVybnMgMy41XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAndGltZVNpZ25hdHVyZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVTaWduYXR1cmU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aW1lU2lnKSB7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGltZVNpZykpIHtcblx0ICAgICAgICAgICAgICAgIHRpbWVTaWcgPSB0aW1lU2lnWzBdIC8gdGltZVNpZ1sxXSAqIDQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fdGltZVNpZ25hdHVyZSA9IHRpbWVTaWc7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBXaGVuIHRoZSBUb25lLlRyYW5zcG9ydC5sb29wID0gdHJ1ZSwgdGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIGxvb3AuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcFN0YXJ0KS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHN0YXJ0UG9zaXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gdGhpcy50b1RpY2tzKHN0YXJ0UG9zaXRpb24pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogV2hlbiB0aGUgVG9uZS5UcmFuc3BvcnQubG9vcCA9IHRydWUsIHRoaXMgaXMgdGhlIGVuZGluZyBwb3NpdGlvbiBvZiB0aGUgbG9vcC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX2xvb3BFbmQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZW5kUG9zaXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IHRoaXMudG9UaWNrcyhlbmRQb3NpdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBsb29wIHN0YXJ0IGFuZCBzdG9wIGF0IHRoZSBzYW1lIHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gc3RhcnRQb3NpdGlvblxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9IGVuZFBvc2l0aW9uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbG9vcCBvdmVyIHRoZSBmaXJzdCBtZWFzdXJlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2V0TG9vcFBvaW50cygwLCBcIjFtXCIpO1xuXHRcdCAqIFRvbmUuVHJhbnNwb3J0Lmxvb3AgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnNldExvb3BQb2ludHMgPSBmdW5jdGlvbiAoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHtcblx0ICAgICAgICB0aGlzLmxvb3BTdGFydCA9IHN0YXJ0UG9zaXRpb247XG5cdCAgICAgICAgdGhpcy5sb29wRW5kID0gZW5kUG9zaXRpb247XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzd2luZyB2YWx1ZS4gQmV0d2VlbiAwLTEgd2hlcmUgMSBlcXVhbCB0b1xuXHRcdCAqICB0aGUgbm90ZSArIGhhbGYgdGhlIHN1YmRpdmlzaW9uLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgc3dpbmdcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdzd2luZycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N3aW5nQW1vdW50O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYW1vdW50KSB7XG5cdCAgICAgICAgICAgIC8vc2NhbGUgdGhlIHZhbHVlcyB0byBhIG5vcm1hbCByYW5nZVxuXHQgICAgICAgICAgICB0aGlzLl9zd2luZ0Ftb3VudCA9IGFtb3VudDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIHN1YmRpdmlzaW9uIHdoaWNoIHRoZSBzd2luZyB3aWxsIGJlIGFwcGxpZWQgdG8uXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGFuIDh0aCBub3RlLiBWYWx1ZSBtdXN0IGJlIGxlc3Ncblx0XHQgKiAgdGhhbiBhIHF1YXJ0ZXIgbm90ZS5cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBzd2luZ1N1YmRpdmlzaW9uXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnc3dpbmdTdWJkaXZpc2lvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fc3dpbmdUaWNrcykudG9Ob3RhdGlvbigpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3ViZGl2aXNpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3dpbmdUaWNrcyA9IHRoaXMudG9UaWNrcyhzdWJkaXZpc2lvbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIFRyYW5zcG9ydCdzIHBvc2l0aW9uIGluIEJhcnM6QmVhdHM6U2l4dGVlbnRocy5cblx0XHQgKiAgU2V0dGluZyB0aGUgdmFsdWUgd2lsbCBqdW1wIHRvIHRoYXQgcG9zaXRpb24gcmlnaHQgYXdheS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7QmFyc0JlYXRzU2l4dGVlbnRoc31cblx0XHQgKiAgQG5hbWUgcG9zaXRpb25cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdwb3NpdGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHZhciB0aWNrcyA9IHRoaXMuX2Nsb2NrLmdldFRpY2tzQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRpY2tzKS50b0JhcnNCZWF0c1NpeHRlZW50aHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHByb2dyZXNzKSB7XG5cdCAgICAgICAgICAgIHZhciB0aWNrcyA9IHRoaXMudG9UaWNrcyhwcm9ncmVzcyk7XG5cdCAgICAgICAgICAgIHRoaXMudGlja3MgPSB0aWNrcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgVHJhbnNwb3J0J3MgcG9zaXRpb24gaW4gc2Vjb25kc1xuXHRcdCAqICBTZXR0aW5nIHRoZSB2YWx1ZSB3aWxsIGp1bXAgdG8gdGhhdCBwb3NpdGlvbiByaWdodCBhd2F5LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtTZWNvbmRzfVxuXHRcdCAqICBAbmFtZSBzZWNvbmRzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnc2Vjb25kcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLnNlY29uZHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB2YXIgdGlja3MgPSB0aGlzLmJwbS50aW1lVG9UaWNrcyhzLCBub3cpO1xuXHQgICAgICAgICAgICB0aGlzLnRpY2tzID0gdGlja3M7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIFRyYW5zcG9ydCdzIGxvb3AgcG9zaXRpb24gYXMgYSBub3JtYWxpemVkIHZhbHVlLiBBbHdheXNcblx0XHQgKiAgcmV0dXJucyAwIGlmIHRoZSB0cmFuc3BvcnQgaWYgbG9vcCBpcyBub3QgdHJ1ZS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAbmFtZSBwcm9ncmVzc1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAncHJvZ3Jlc3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5fY2xvY2suZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAodGlja3MgLSB0aGlzLl9sb29wU3RhcnQpIC8gKHRoaXMuX2xvb3BFbmQgLSB0aGlzLl9sb29wU3RhcnQpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdHJhbnNwb3J0cyBjdXJyZW50IHRpY2sgcG9zaXRpb24uXG5cdFx0ICpcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICogIEBuYW1lIHRpY2tzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAndGlja3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbG9jay50aWNrcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2Nsb2NrLnRpY2tzICE9PSB0KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgICAgIC8vc3RvcCBldmVyeXRoaW5nIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdG9wJywgbm93KTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbG9jay5zZXRUaWNrc0F0VGltZSh0LCBub3cpO1xuXHQgICAgICAgICAgICAgICAgICAgIC8vcmVzdGFydCBpdCB3aXRoIHRoZSBuZXcgdGltZVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RhcnQnLCBub3csIHRoaXMuc2Vjb25kcyk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb2NrLnNldFRpY2tzQXRUaW1lKHQsIG5vdyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgY2xvY2sncyB0aWNrcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBXaGVuIHRvIGdldCB0aGUgdGljayB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge1RpY2tzfSAgICAgICBUaGUgdGljayB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5nZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgucm91bmQodGhpcy5fY2xvY2suZ2V0VGlja3NBdFRpbWUodGltZSkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGVsYXBzZWQgc2Vjb25kcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSBlbGFwc2VkIHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9ICBUaGUgbnVtYmVyIG9mIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmdldFNlY29uZHNBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9jbG9jay5nZXRTZWNvbmRzQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQdWxzZXMgUGVyIFF1YXJ0ZXIgbm90ZS4gVGhpcyBpcyB0aGUgc21hbGxlc3QgcmVzb2x1dGlvblxuXHRcdCAqICB0aGUgVHJhbnNwb3J0IHRpbWluZyBzdXBwb3J0cy4gVGhpcyBzaG91bGQgYmUgc2V0IG9uY2Vcblx0XHQgKiAgb24gaW5pdGlhbGl6YXRpb24gYW5kIG5vdCBzZXQgYWdhaW4uIENoYW5naW5nIHRoaXMgdmFsdWVcblx0XHQgKiAgYWZ0ZXIgb3RoZXIgb2JqZWN0cyBoYXZlIGJlZW4gY3JlYXRlZCBjYW4gY2F1c2UgcHJvYmxlbXMuXG5cdFx0ICpcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBQUFFcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdQUFEnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcHE7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcHEpIHtcblx0ICAgICAgICAgICAgdmFyIGJwbSA9IHRoaXMuYnBtLnZhbHVlO1xuXHQgICAgICAgICAgICB0aGlzLl9wcHEgPSBwcHE7XG5cdCAgICAgICAgICAgIHRoaXMuYnBtLnZhbHVlID0gYnBtO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgZnJvbSBCUE0gdG8gZnJlcXVlbmN5IChmYWN0b3JpbmcgaW4gUFBRKVxuXHRcdCAqICBAcGFyYW0gIHtCUE19ICBicG0gVGhlIEJQTSB2YWx1ZSB0byBjb252ZXJ0IHRvIGZyZXF1ZW5jeVxuXHRcdCAqICBAcmV0dXJuICB7RnJlcXVlbmN5fSAgVGhlIEJQTSBhcyBhIGZyZXF1ZW5jeSB3aXRoIFBQUSBmYWN0b3JlZCBpbi5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fZnJvbVVuaXRzID0gZnVuY3Rpb24gKGJwbSkge1xuXHQgICAgICAgIHJldHVybiAxIC8gKDYwIC8gYnBtIC8gdGhpcy5QUFEpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGZyb20gZnJlcXVlbmN5ICh3aXRoIFBQUSkgaW50byBCUE1cblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fSAgZnJlcSBUaGUgY2xvY2tzIGZyZXF1ZW5jeSB0byBjb252ZXJ0IHRvIEJQTVxuXHRcdCAqICBAcmV0dXJuICB7QlBNfSAgVGhlIGZyZXF1ZW5jeSB2YWx1ZSBhcyBCUE0uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuX3RvVW5pdHMgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIHJldHVybiBmcmVxIC8gdGhpcy5QUFEgKiA2MDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0U1lOQ0lOR1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHRpbWUgYWxpZ25lZCB0byB0aGUgbmV4dCBzdWJkaXZpc2lvblxuXHRcdCAqICBvZiB0aGUgVHJhbnNwb3J0LiBJZiB0aGUgVHJhbnNwb3J0IGlzIG5vdCBzdGFydGVkLFxuXHRcdCAqICBpdCB3aWxsIHJldHVybiAwLlxuXHRcdCAqICBOb3RlOiB0aGlzIHdpbGwgbm90IHdvcmsgcHJlY2lzZWx5IGR1cmluZyB0ZW1wbyByYW1wcy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHN1YmRpdmlzaW9uICBUaGUgc3ViZGl2aXNpb24gdG8gcXVhbnRpemUgdG9cblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gIFRoZSBjb250ZXh0IHRpbWUgb2YgdGhlIG5leHQgc3ViZGl2aXNpb24uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RhcnQoKTsgLy90aGUgdHJhbnNwb3J0IG11c3QgYmUgc3RhcnRlZFxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0Lm5leHRTdWJkaXZpc2lvbihcIjRuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLm5leHRTdWJkaXZpc2lvbiA9IGZ1bmN0aW9uIChzdWJkaXZpc2lvbikge1xuXHQgICAgICAgIHN1YmRpdmlzaW9uID0gdGhpcy50b1RpY2tzKHN1YmRpdmlzaW9uKTtcblx0ICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIC8vaWYgdGhlIHRyYW5zcG9ydCdzIG5vdCBzdGFydGVkLCByZXR1cm4gMFxuXHQgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgLy90aGUgcmVtYWluZGVyIG9mIHRoZSBjdXJyZW50IHRpY2tzIGFuZCB0aGUgc3ViZGl2aXNpb25cblx0ICAgICAgICAgICAgdmFyIHRyYW5zcG9ydFBvcyA9IHRoaXMuZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgdmFyIHJlbWFpbmluZ1RpY2tzID0gc3ViZGl2aXNpb24gLSB0cmFuc3BvcnRQb3MgJSBzdWJkaXZpc2lvbjtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLm5leHRUaWNrVGltZShyZW1haW5pbmdUaWNrcywgbm93KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEF0dGFjaGVzIHRoZSBzaWduYWwgdG8gdGhlIHRlbXBvIGNvbnRyb2wgc2lnbmFsIHNvIHRoYXRcblx0XHQgKiAgYW55IGNoYW5nZXMgaW4gdGhlIHRlbXBvIHdpbGwgY2hhbmdlIHRoZSBzaWduYWwgaW4gdGhlIHNhbWVcblx0XHQgKiAgcmF0aW8uXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VG9uZS5TaWduYWx9IHNpZ25hbFxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHJhdGlvIE9wdGlvbmFsbHkgcGFzcyBpbiB0aGUgcmF0aW8gYmV0d2VlblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0d28gc2lnbmFscy4gT3RoZXJ3aXNlIGl0IHdpbGwgYmUgY29tcHV0ZWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiB0aGVpciBjdXJyZW50IHZhbHVlcy5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc3luY1NpZ25hbCA9IGZ1bmN0aW9uIChzaWduYWwsIHJhdGlvKSB7XG5cdCAgICAgICAgaWYgKCFyYXRpbykge1xuXHQgICAgICAgICAgICAvL2dldCB0aGUgc3luYyByYXRpb1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgaWYgKHNpZ25hbC5nZXRWYWx1ZUF0VGltZShub3cpICE9PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByYXRpbyA9IHNpZ25hbC5nZXRWYWx1ZUF0VGltZShub3cpIC8gdGhpcy5icG0uZ2V0VmFsdWVBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJhdGlvID0gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmF0aW9TaWduYWwgPSBuZXcgVG9uZS5HYWluKHJhdGlvKTtcblx0ICAgICAgICB0aGlzLmJwbS5jaGFpbihyYXRpb1NpZ25hbCwgc2lnbmFsLl9wYXJhbSk7XG5cdCAgICAgICAgdGhpcy5fc3luY2VkU2lnbmFscy5wdXNoKHtcblx0ICAgICAgICAgICAgJ3JhdGlvJzogcmF0aW9TaWduYWwsXG5cdCAgICAgICAgICAgICdzaWduYWwnOiBzaWduYWwsXG5cdCAgICAgICAgICAgICdpbml0aWFsJzogc2lnbmFsLnZhbHVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgc2lnbmFsLnZhbHVlID0gMDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVW5zeW5jcyBhIHByZXZpb3VzbHkgc3luY2VkIHNpZ25hbCBmcm9tIHRoZSB0cmFuc3BvcnQncyBjb250cm9sLlxuXHRcdCAqICBTZWUgVG9uZS5UcmFuc3BvcnQuc3luY1NpZ25hbC5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5TaWduYWx9IHNpZ25hbFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS51bnN5bmNTaWduYWwgPSBmdW5jdGlvbiAoc2lnbmFsKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX3N5bmNlZFNpZ25hbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgdmFyIHN5bmNlZFNpZ25hbCA9IHRoaXMuX3N5bmNlZFNpZ25hbHNbaV07XG5cdCAgICAgICAgICAgIGlmIChzeW5jZWRTaWduYWwuc2lnbmFsID09PSBzaWduYWwpIHtcblx0ICAgICAgICAgICAgICAgIHN5bmNlZFNpZ25hbC5yYXRpby5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgICAgICBzeW5jZWRTaWduYWwuc2lnbmFsLnZhbHVlID0gc3luY2VkU2lnbmFsLmluaXRpYWw7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zeW5jZWRTaWduYWxzLnNwbGljZShpLCAxKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fY2xvY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnYnBtJyk7XG5cdCAgICAgICAgdGhpcy5icG0gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aW1lbGluZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmVwZWF0ZWRFdmVudHMuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3JlcGVhdGVkRXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0SU5JVElBTElaQVRJT05cblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIHZhciBUcmFuc3BvcnRDb25zdHJ1Y3RvciA9IFRvbmUuVHJhbnNwb3J0O1xuXHQgICAgVG9uZS5UcmFuc3BvcnQgPSBuZXcgVHJhbnNwb3J0Q29uc3RydWN0b3IoKTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuVHJhbnNwb3J0IGluc3RhbmNlb2YgVHJhbnNwb3J0Q29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnQgPSBjb250ZXh0LlRyYW5zcG9ydDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydCA9IG5ldyBUcmFuc3BvcnRDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3N0b3JlIHRoZSBUcmFuc3BvcnQgb24gdGhlIGNvbnRleHQgc28gaXQgY2FuIGJlIHJldHJpZXZlZCBsYXRlclxuXHQgICAgICAgIGNvbnRleHQuVHJhbnNwb3J0ID0gVG9uZS5UcmFuc3BvcnQ7XG5cdCAgICB9KTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignY2xvc2UnLCBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgIGlmIChjb250ZXh0LlRyYW5zcG9ydCBpbnN0YW5jZW9mIFRyYW5zcG9ydENvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgIGNvbnRleHQuVHJhbnNwb3J0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIHJldHVybiBUb25lLlRyYW5zcG9ydDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVm9sdW1lIGlzIGEgc2ltcGxlIHZvbHVtZSBub2RlLCB1c2VmdWwgZm9yIGNyZWF0aW5nIGEgdm9sdW1lIGZhZGVyLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN9IFt2b2x1bWU9MF0gdGhlIGluaXRpYWwgdm9sdW1lXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHZvbCA9IG5ldyBUb25lLlZvbHVtZSgtMTIpO1xuXHRcdCAqIGluc3RydW1lbnQuY2hhaW4odm9sLCBUb25lLk1hc3Rlcik7XG5cdFx0ICovXG5cdCAgICBUb25lLlZvbHVtZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3ZvbHVtZSddLCBUb25lLlZvbHVtZSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHRoZSBvdXRwdXQgbm9kZVxuXHRcdFx0ICogQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy52b2x1bWUsIFRvbmUuVHlwZS5EZWNpYmVscyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdW5tdXRlZCB2b2x1bWVcblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl91bm11dGVkVm9sdW1lID0gb3B0aW9ucy52b2x1bWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZvbHVtZSBjb250cm9sIGluIGRlY2liZWxzLlxuXHRcdFx0ICogIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMub3V0cHV0LmdhaW47XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3ZvbHVtZScpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBtdXRlIGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMubXV0ZSA9IG9wdGlvbnMubXV0ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlZvbHVtZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Wb2x1bWUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUgdGhlIG91dHB1dC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Wb2x1bWUjXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9tdXRlIHRoZSBvdXRwdXRcblx0XHQgKiB2b2x1bWUubXV0ZSA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Wb2x1bWUucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMudm9sdW1lLnZhbHVlID09PSAtSW5maW5pdHk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5tdXRlICYmIG11dGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3VubXV0ZWRWb2x1bWUgPSB0aGlzLnZvbHVtZS52YWx1ZTtcblx0ICAgICAgICAgICAgICAgIC8vbWF5YmUgaXQgc2hvdWxkIHJhbXAgaGVyZT9cblx0ICAgICAgICAgICAgICAgIHRoaXMudm9sdW1lLnZhbHVlID0gLUluZmluaXR5O1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubXV0ZSAmJiAhbXV0ZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy52b2x1bWUudmFsdWUgPSB0aGlzLl91bm11dGVkVm9sdW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVm9sdW1lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlZvbHVtZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmlucHV0LmRpc3Bvc2UoKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLnZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlZvbHVtZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBIHNpbmdsZSBtYXN0ZXIgb3V0cHV0IHdoaWNoIGlzIGNvbm5lY3RlZCB0byB0aGVcblx0XHQgKiAgICAgICAgICBBdWRpb0Rlc3RpbmF0aW9uTm9kZSAoYWthIHlvdXIgc3BlYWtlcnMpLlxuXHRcdCAqICAgICAgICAgIEl0IHByb3ZpZGVzIHVzZWZ1bCBjb252ZW5pZW5jZXMgc3VjaCBhcyB0aGUgYWJpbGl0eVxuXHRcdCAqICAgICAgICAgIHRvIHNldCB0aGUgdm9sdW1lIGFuZCBtdXRlIHRoZSBlbnRpcmUgYXBwbGljYXRpb24uXG5cdFx0ICogICAgICAgICAgSXQgYWxzbyBnaXZlcyB5b3UgdGhlIGFiaWxpdHkgdG8gYXBwbHkgbWFzdGVyIGVmZmVjdHMgdG8geW91ciBhcHBsaWNhdGlvbi5cblx0XHQgKiAgICAgICAgICA8YnI+PGJyPlxuXHRcdCAqICAgICAgICAgIExpa2UgVG9uZS5UcmFuc3BvcnQsIEEgc2luZ2xlIFRvbmUuTWFzdGVyIGlzIGNyZWF0ZWRcblx0XHQgKiAgICAgICAgICBvbiBpbml0aWFsaXphdGlvbiBhbmQgeW91IGRvIG5vdCBuZWVkIHRvIGV4cGxpY2l0bHkgY29uc3RydWN0IG9uZS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBzaW5nbGV0b25cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RoZSBhdWRpbyB3aWxsIGdvIGZyb20gdGhlIG9zY2lsbGF0b3IgdG8gdGhlIHNwZWFrZXJzXG5cdFx0ICogb3NjaWxsYXRvci5jb25uZWN0KFRvbmUuTWFzdGVyKTtcblx0XHQgKiAvL2EgY29udmVuaWVuY2UgZm9yIGNvbm5lY3RpbmcgdG8gdGhlIG1hc3RlciBvdXRwdXQgaXMgYWxzbyBwcm92aWRlZDpcblx0XHQgKiBvc2NpbGxhdG9yLnRvTWFzdGVyKCk7XG5cdFx0ICogLy90aGUgYWJvdmUgdHdvIGV4YW1wbGVzIGFyZSBlcXVpdmFsZW50LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5NYXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICBUb25lLmdldENvbnRleHQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHByaXZhdGUgdm9sdW1lIG5vZGVcblx0XHRcdFx0ICogIEB0eXBlICB7VG9uZS5Wb2x1bWV9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUoKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSB2b2x1bWUgb2YgdGhlIG1hc3RlciBvdXRwdXQuXG5cdFx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dC5jaGFpbih0aGlzLm91dHB1dCwgdGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWFzdGVyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLk1hc3Rlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk1hc3RlciNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIFRvbmUuTWFzdGVyLm11dGUgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWFzdGVyLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWUubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIG1hc3RlciBlZmZlY3RzIGNoYWluLiBOT1RFOiB0aGlzIHdpbGwgZGlzY29ubmVjdCBhbnkgbm9kZXMgd2hpY2ggd2VyZSBwcmV2aW91c2x5XG5cdFx0ICogIGNoYWluZWQgaW4gdGhlIG1hc3RlciBlZmZlY3RzIGNoYWluLlxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvTm9kZXxUb25lfSBhcmdzLi4uIEFsbCBhcmd1bWVudHMgd2lsbCBiZSBjb25uZWN0ZWQgaW4gYSByb3dcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIE1hc3RlciB3aWxsIGJlIHJvdXRlZCB0aHJvdWdoIGl0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NYXN0ZXJ9ICB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zb21lIG92ZXJhbGwgY29tcHJlc3Npb24gdG8ga2VlcCB0aGUgbGV2ZWxzIGluIGNoZWNrXG5cdFx0ICogdmFyIG1hc3RlckNvbXByZXNzb3IgPSBuZXcgVG9uZS5Db21wcmVzc29yKHtcblx0XHQgKiBcdFwidGhyZXNob2xkXCIgOiAtNixcblx0XHQgKiBcdFwicmF0aW9cIiA6IDMsXG5cdFx0ICogXHRcImF0dGFja1wiIDogMC41LFxuXHRcdCAqIFx0XCJyZWxlYXNlXCIgOiAwLjFcblx0XHQgKiB9KTtcblx0XHQgKiAvL2dpdmUgYSBsaXR0bGUgYm9vc3QgdG8gdGhlIGxvd3Ncblx0XHQgKiB2YXIgbG93QnVtcCA9IG5ldyBUb25lLkZpbHRlcigyMDAsIFwibG93c2hlbGZcIik7XG5cdFx0ICogLy9yb3V0ZSBldmVyeXRoaW5nIHRocm91Z2ggdGhlIGZpbHRlclxuXHRcdCAqIC8vYW5kIGNvbXByZXNzb3IgYmVmb3JlIGdvaW5nIHRvIHRoZSBzcGVha2Vyc1xuXHRcdCAqIFRvbmUuTWFzdGVyLmNoYWluKGxvd0J1bXAsIG1hc3RlckNvbXByZXNzb3IpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NYXN0ZXIucHJvdG90eXBlLmNoYWluID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuaW5wdXQuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY2hhaW4uYXBwbHkodGhpcy5pbnB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NYXN0ZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1hc3Rlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEFVR01FTlQgVE9ORSdzIFBST1RPVFlQRVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQ29ubmVjdCAndGhpcycgdG8gdGhlIG1hc3RlciBvdXRwdXQuIFNob3J0aGFuZCBmb3IgdGhpcy5jb25uZWN0KFRvbmUuTWFzdGVyKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdWRpb05vZGV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Nvbm5lY3QgYW4gb3NjaWxsYXRvciB0byB0aGUgbWFzdGVyIG91dHB1dFxuXHRcdCAqIHZhciBvc2MgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkudG9NYXN0ZXIoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS50b01hc3RlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIGlmICh3aW5kb3cuQXVkaW9Ob2RlKSB7XG5cdCAgICAgICAgLy8gQWxzbyBhdWdtZW50IEF1ZGlvTm9kZSdzIHByb3RvdHlwZSB0byBpbmNsdWRlIHRvTWFzdGVyIGFzIGEgY29udmVuaWVuY2Vcblx0ICAgICAgICBBdWRpb05vZGUucHJvdG90eXBlLnRvTWFzdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9O1xuXHQgICAgfVxuXHQgICAgLyoqXG5cdFx0ICogIGluaXRpYWxpemUgdGhlIG1vZHVsZSBhbmQgbGlzdGVuIGZvciBuZXcgYXVkaW8gY29udGV4dHNcblx0XHQgKi9cblx0ICAgIHZhciBNYXN0ZXJDb25zdHJ1Y3RvciA9IFRvbmUuTWFzdGVyO1xuXHQgICAgVG9uZS5NYXN0ZXIgPSBuZXcgTWFzdGVyQ29uc3RydWN0b3IoKTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgLy8gaWYgaXQgYWxyZWFkeSBleGlzdHMsIGp1c3QgcmVzdG9yZSBpdFxuXHQgICAgICAgIGlmIChjb250ZXh0Lk1hc3RlciBpbnN0YW5jZW9mIE1hc3RlckNvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgIFRvbmUuTWFzdGVyID0gY29udGV4dC5NYXN0ZXI7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgVG9uZS5NYXN0ZXIgPSBuZXcgTWFzdGVyQ29uc3RydWN0b3IoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgY29udGV4dC5NYXN0ZXIgPSBUb25lLk1hc3Rlcjtcblx0ICAgIH0pO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdjbG9zZScsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuTWFzdGVyIGluc3RhbmNlb2YgTWFzdGVyQ29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgY29udGV4dC5NYXN0ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIFRvbmUuTWFzdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEJhc2UgY2xhc3MgZm9yIHNvdXJjZXMuIFNvdXJjZXMgaGF2ZSBzdGFydC9zdG9wIG1ldGhvZHNcblx0XHQgKiAgICAgICAgICBhbmQgdGhlIGFiaWxpdHkgdG8gYmUgc3luY2VkIHRvIHRoZVxuXHRcdCAqICAgICAgICAgIHN0YXJ0L3N0b3Agb2YgVG9uZS5UcmFuc3BvcnQuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL011bHRpcGxlIHN0YXRlIGNoYW5nZSBldmVudHMgY2FuIGJlIGNoYWluZWQgdG9nZXRoZXIsXG5cdFx0ICogLy9idXQgbXVzdCBiZSBzZXQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIgYW5kIHdpdGggYXNjZW5kaW5nIHRpbWVzXG5cdFx0ICpcblx0XHQgKiAvLyBPS1xuXHRcdCAqIHN0YXRlLnN0YXJ0KCkuc3RvcChcIiswLjJcIik7XG5cdFx0ICogLy8gQU5EXG5cdFx0ICogc3RhdGUuc3RhcnQoKS5zdG9wKFwiKzAuMlwiKS5zdGFydChcIiswLjRcIikuc3RvcChcIiswLjdcIilcblx0XHQgKlxuXHRcdCAqIC8vIEJBRFxuXHRcdCAqIHN0YXRlLnN0b3AoXCIrMC4yXCIpLnN0YXJ0KCk7XG5cdFx0ICogLy8gT1Jcblx0XHQgKiBzdGF0ZS5zdGFydChcIiswLjNcIikuc3RvcChcIiswLjJcIik7XG5cdFx0ICpcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuU291cmNlLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvdXRwdXQgdm9sdW1lIG5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVm9sdW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlZvbHVtZShvcHRpb25zLnZvbHVtZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdm9sdW1lIG9mIHRoZSBvdXRwdXQgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKiBAZXhhbXBsZVxuXHRcdFx0ICogc291cmNlLnZvbHVtZS52YWx1ZSA9IC02O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFx0S2VlcCB0cmFjayBvZiB0aGUgc2NoZWR1bGVkIHN0YXRlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlRpbWVsaW5lU3RhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFRvbmUuVGltZWxpbmVTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLm1lbW9yeSA9IDEwMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc3luY2VkIGBzdGFydGAgY2FsbGJhY2sgZnVuY3Rpb24gZnJvbSB0aGUgdHJhbnNwb3J0XG5cdFx0XHQgKiAgQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zeW5jZWQgPSBmYWxzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBLZWVwIHRyYWNrIG9mIGFsbCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50IGlkc1xuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZCA9IFtdO1xuXHQgICAgICAgIC8vbWFrZSB0aGUgb3V0cHV0IGV4cGxpY2l0bHkgc3RlcmVvXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLm91dHB1dC5vdXRwdXQuY2hhbm5lbENvdW50ID0gMjtcblx0ICAgICAgICB0aGlzLl92b2x1bWUub3V0cHV0Lm91dHB1dC5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgICAgICAvL211dGUgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU291cmNlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuU291cmNlI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU291cmNlLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZShUb25lLlRyYW5zcG9ydC5zZWNvbmRzKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuU3RhdGUuU3RvcHBlZDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNvdXJjZSNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIHNvdXJjZS5tdXRlID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNvdXJjZS5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1lLm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3ZvbHVtZS5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8vb3ZlcndyaXRlIHRoZXNlIGZ1bmN0aW9uc1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLl9zdGFydCA9IFRvbmUubm9PcDtcblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5yZXN0YXJ0ID0gVG9uZS5ub09wO1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLl9zdG9wID0gVG9uZS5ub09wO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBzb3VyY2UgYXQgdGhlIHNwZWNpZmllZCB0aW1lLiBJZiBubyB0aW1lIGlzIGdpdmVuLFxuXHRcdCAqICBzdGFydCB0aGUgc291cmNlIG5vdy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBzb3VyY2Ugc2hvdWxkIGJlIHN0YXJ0ZWQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNvdXJjZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHNvdXJjZS5zdGFydChcIiswLjVcIik7IC8vc3RhcnRzIHRoZSBzb3VyY2UgMC41IHNlY29uZHMgZnJvbSBub3dcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih0aW1lKSAmJiB0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0LnNlY29uZHM7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2lmIGl0J3Mgc3RhcnRlZCwgc3RvcCBpdCBhbmQgcmVzdGFydCBpdFxuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdGFydGVkLCB0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5yZXN0YXJ0KHRpbWUsIG9mZnNldCwgZHVyYXRpb24pO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RhcnRlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgb2Zmc2V0IHRpbWUgdG8gdGhlIGV2ZW50XG5cdCAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXQodGltZSk7XG5cdCAgICAgICAgICAgICAgICBldmVudC5vZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCAwKTtcblx0ICAgICAgICAgICAgICAgIGV2ZW50LmR1cmF0aW9uID0gZHVyYXRpb247XG5cdCAgICAgICAgICAgICAgICB2YXIgc2NoZWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbiAodCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHQsIG9mZnNldCwgZHVyYXRpb24pO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCB0aW1lKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlZC5wdXNoKHNjaGVkKTtcblx0ICAgICAgICAgICAgICAgIC8vaWYgaXQncyBhbHJlYWR5IHN0YXJ0ZWRcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3luY2VkU3RhcnQodGhpcy5ub3coKSwgVG9uZS5UcmFuc3BvcnQuc2Vjb25kcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdGFydC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBzb3VyY2UgYXQgdGhlIHNwZWNpZmllZCB0aW1lLiBJZiBubyB0aW1lIGlzIGdpdmVuLFxuXHRcdCAqICBzdG9wIHRoZSBzb3VyY2Ugbm93LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHNvdXJjZSBzaG91bGQgYmUgc3RvcHBlZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU291cmNlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc291cmNlLnN0b3AoKTsgLy8gc3RvcHMgdGhlIHNvdXJjZSBpbW1lZGlhdGVseVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGltZSkgJiYgdGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydC5zZWNvbmRzO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCF0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBzY2hlZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKHRoaXMuX3N0b3AuYmluZCh0aGlzKSwgdGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlZC5wdXNoKHNjaGVkKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN5bmMgdGhlIHNvdXJjZSB0byB0aGUgVHJhbnNwb3J0IHNvIHRoYXQgYWxsIHN1YnNlcXVlbnRcblx0XHQgKiAgY2FsbHMgdG8gYHN0YXJ0YCBhbmQgYHN0b3BgIGFyZSBzeW5jZWQgdG8gdGhlIFRyYW5zcG9ydFRpbWVcblx0XHQgKiAgaW5zdGVhZCBvZiB0aGUgQXVkaW9Db250ZXh0IHRpbWUuXG5cdFx0ICpcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU291cmNlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zeW5jIHRoZSBzb3VyY2Ugc28gdGhhdCBpdCBwbGF5cyBiZXR3ZWVuIDAgYW5kIDAuMyBvbiB0aGUgVHJhbnNwb3J0J3MgdGltZWxpbmVcblx0XHQgKiBzb3VyY2Uuc3luYygpLnN0YXJ0KDApLnN0b3AoMC4zKTtcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RhcnQoKTtcblx0XHQgKlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB3aXRoIGFuIG9mZnNldCBhbmQgdGhlIHN5bmMnZWQgc291cmNlc1xuXHRcdCAqIC8vd2lsbCBzdGFydCBpbiB0aGUgY29ycmVjdCBwb3NpdGlvblxuXHRcdCAqIHNvdXJjZS5zeW5jKCkuc3RhcnQoMC4xKTtcblx0XHQgKiAvL3RoZSBzb3VyY2Ugd2lsbCBiZSBpbnZva2VkIHdpdGggYW4gb2Zmc2V0IG9mIDAuNFxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0YXJ0KFwiKzAuNVwiLCAwLjUpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY2VkID0gdHJ1ZTtcblx0ICAgICAgICB0aGlzLl9zeW5jZWRTdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgaWYgKG9mZnNldCA+IDApIHtcblx0ICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgcGxheWJhY2sgc3RhdGUgYXQgdGhhdCB0aW1lXG5cdCAgICAgICAgICAgICAgICB2YXIgc3RhdGVFdmVudCA9IHRoaXMuX3N0YXRlLmdldChvZmZzZXQpO1xuXHQgICAgICAgICAgICAgICAgLy8gbGlzdGVuIGZvciBzdGFydCBldmVudHMgd2hpY2ggbWF5IG9jY3VyIGluIHRoZSBtaWRkbGUgb2YgdGhlIHN5bmMnZWQgdGltZVxuXHQgICAgICAgICAgICAgICAgaWYgKHN0YXRlRXZlbnQgJiYgc3RhdGVFdmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIHN0YXRlRXZlbnQudGltZSAhPT0gb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBvZmZzZXRcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRPZmZzZXQgPSBvZmZzZXQgLSB0aGlzLnRvU2Vjb25kcyhzdGF0ZUV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBkdXJhdGlvbjtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGVFdmVudC5kdXJhdGlvbikge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKHN0YXRlRXZlbnQuZHVyYXRpb24pIC0gc3RhcnRPZmZzZXQ7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHRpbWUsIHRoaXMudG9TZWNvbmRzKHN0YXRlRXZlbnQub2Zmc2V0KSArIHN0YXJ0T2Zmc2V0LCBkdXJhdGlvbik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3luY2VkU3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHZhciBzZWNvbmRzID0gVG9uZS5UcmFuc3BvcnQuZ2V0U2Vjb25kc0F0VGltZShNYXRoLm1heCh0aW1lIC0gdGhpcy5zYW1wbGVUaW1lLCAwKSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZShzZWNvbmRzKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdG9wKHRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9uKCdzdGFydCBsb29wU3RhcnQnLCB0aGlzLl9zeW5jZWRTdGFydCk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQub24oJ3N0b3AgcGF1c2UgbG9vcEVuZCcsIHRoaXMuX3N5bmNlZFN0b3ApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBVbnN5bmMgdGhlIHNvdXJjZSB0byB0aGUgVHJhbnNwb3J0LiBTZWUgVG9uZS5Tb3VyY2Uuc3luY1xuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Tb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS51bnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5vZmYoJ3N0b3AgcGF1c2UgbG9vcEVuZCcsIHRoaXMuX3N5bmNlZFN0b3ApO1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5vZmYoJ3N0YXJ0IGxvb3BTdGFydCcsIHRoaXMuX3N5bmNlZFN0YXJ0KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc3luY2VkID0gZmFsc2U7XG5cdCAgICAgICAgLy8gY2xlYXIgYWxsIG9mIHRoZSBzY2hlZHVsZWQgaWRzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zY2hlZHVsZWQubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5fc2NoZWR1bGVkW2ldO1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5jbGVhcihpZCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZCA9IFtdO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCgwKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKlx0Q2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuU291cmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMudW5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNvdXJjZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEF1ZGlvQnVmZmVyLmNvcHlUby9Gcm9tQ2hhbm5lbCBwb2x5ZmlsbFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCFBdWRpb0J1ZmZlci5wcm90b3R5cGUuY29weVRvQ2hhbm5lbCkge1xuXHQgICAgICAgICAgICBBdWRpb0J1ZmZlci5wcm90b3R5cGUuY29weVRvQ2hhbm5lbCA9IGZ1bmN0aW9uIChzcmMsIGNoYW5OdW0sIHN0YXJ0KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbCA9IHRoaXMuZ2V0Q2hhbm5lbERhdGEoY2hhbk51bSk7XG5cdCAgICAgICAgICAgICAgICBzdGFydCA9IHN0YXJ0IHx8IDA7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5uZWwubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBjaGFubmVsW2kgKyBzdGFydF0gPSBzcmNbaV07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIEF1ZGlvQnVmZmVyLnByb3RvdHlwZS5jb3B5RnJvbUNoYW5uZWwgPSBmdW5jdGlvbiAoZGVzdCwgY2hhbk51bSwgc3RhcnQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gdGhpcy5nZXRDaGFubmVsRGF0YShjaGFuTnVtKTtcblx0ICAgICAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnQgfHwgMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVzdC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGRlc3RbaV0gPSBjaGFubmVsW2kgKyBzdGFydF07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEJ1ZmZlciBsb2FkaW5nIGFuZCBzdG9yYWdlLiBUb25lLkJ1ZmZlciBpcyB1c2VkIGludGVybmFsbHkgYnkgYWxsXG5cdFx0ICogICAgICAgICAgY2xhc3NlcyB0aGF0IG1ha2UgcmVxdWVzdHMgZm9yIGF1ZGlvIGZpbGVzIHN1Y2ggYXMgVG9uZS5QbGF5ZXIsXG5cdFx0ICogICAgICAgICAgVG9uZS5TYW1wbGVyIGFuZCBUb25lLkNvbnZvbHZlci5cblx0XHQgKlxuXHRcdCAqICAgICAgICAgIEFzaWRlIGZyb20gbG9hZCBjYWxsYmFja3MgZnJvbSBpbmRpdmlkdWFsIGJ1ZmZlcnMsIFRvbmUuQnVmZmVyXG5cdFx0ICogIFx0XHRwcm92aWRlcyBldmVudHMgd2hpY2gga2VlcCB0cmFjayBvZiB0aGUgbG9hZGluZyBwcm9ncmVzc1xuXHRcdCAqICBcdFx0b2YgX2FsbF8gb2YgdGhlIGJ1ZmZlcnMuIFRoZXNlIGFyZSBUb25lLkJ1ZmZlci5vbihcImxvYWRcIiAvIFwicHJvZ3Jlc3NcIiAvIFwiZXJyb3JcIilcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7QXVkaW9CdWZmZXJ8U3RyaW5nfSB1cmwgVGhlIHVybCB0byBsb2FkLCBvciB0aGUgYXVkaW8gYnVmZmVyIHRvIHNldC5cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbj19IG9ubG9hZCBBIGNhbGxiYWNrIHdoaWNoIGlzIGludm9rZWQgYWZ0ZXIgdGhlIGJ1ZmZlciBpcyBsb2FkZWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQncyByZWNvbW1lbmRlZCB0byB1c2UgYFRvbmUuQnVmZmVyLm9uKCdsb2FkJywgY2FsbGJhY2spYCBpbnN0ZWFkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luY2UgaXQgd2lsbCBnaXZlIHlvdSBhIGNhbGxiYWNrIHdoZW4gX2FsbF8gYnVmZmVycyBhcmUgbG9hZGVkLlxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9uPX0gb25lcnJvciBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGlmIHRoZXJlIGlzIGFuIGVycm9yXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGJ1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcihcInBhdGgvdG8vc291bmQubXAzXCIsIGZ1bmN0aW9uKCl7XG5cdFx0ICogXHQvL3RoZSBidWZmZXIgaXMgbm93IGF2YWlsYWJsZS5cblx0XHQgKiBcdHZhciBidWZmID0gYnVmZmVyLmdldCgpO1xuXHRcdCAqIH0pO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY2FuIGxvYWQgcHJvdmlkZSBmYWxsYmFjayBleHRlbnNpb24gdHlwZXMgaWYgdGhlIGZpcnN0IHR5cGUgaXMgbm90IHN1cHBvcnRlZC5cblx0XHQgKiB2YXIgYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKFwicGF0aC90by9zb3VuZC5bbXAzfG9nZ3x3YXZdXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndXJsJyxcblx0ICAgICAgICAgICAgJ29ubG9hZCcsXG5cdCAgICAgICAgICAgICdvbmVycm9yJ1xuXHQgICAgICAgIF0sIFRvbmUuQnVmZmVyKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc3RvcmVzIHRoZSBsb2FkZWQgQXVkaW9CdWZmZXJcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9CdWZmZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaW5kaWNhdGVzIGlmIHRoZSBidWZmZXIgc2hvdWxkIGJlIHJldmVyc2VkIG9yIG5vdFxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yZXZlcnNlZCA9IG9wdGlvbnMucmV2ZXJzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgWEhSXG5cdFx0XHQgKiAgQHR5cGUgIHtYTUxIdHRwUmVxdWVzdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5feGhyID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFByaXZhdGUgY2FsbGJhY2sgd2hlbiB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHRcdCAqIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vbmxvYWQgPSBUb25lLm5vT3A7XG5cdCAgICAgICAgaWYgKG9wdGlvbnMudXJsIGluc3RhbmNlb2YgQXVkaW9CdWZmZXIgfHwgb3B0aW9ucy51cmwgaW5zdGFuY2VvZiBUb25lLkJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLnNldChvcHRpb25zLnVybCk7XG5cdCAgICAgICAgICAgIC8vIGludm9rZSB0aGUgb25sb2FkIGNhbGxiYWNrXG5cdCAgICAgICAgICAgIGlmIChvcHRpb25zLm9ubG9hZCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9hZGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vbmxvYWQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX29ubG9hZCA9IG9wdGlvbnMub25sb2FkO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKG9wdGlvbnMudXJsKSkge1xuXHQgICAgICAgICAgICB0aGlzLmxvYWQob3B0aW9ucy51cmwpLnRoZW4ob3B0aW9ucy5vbmxvYWQpLmNhdGNoKG9wdGlvbnMub25lcnJvcik7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQnVmZmVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndXJsJzogdW5kZWZpbmVkLFxuXHQgICAgICAgICdyZXZlcnNlJzogZmFsc2UsXG5cdCAgICAgICAgJ29ubG9hZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnb25lcnJvcic6IFRvbmUubm9PcFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQYXNzIGluIGFuIEF1ZGlvQnVmZmVyIG9yIFRvbmUuQnVmZmVyIHRvIHNldCB0aGUgdmFsdWVcblx0XHQgKiAgb2YgdGhpcyBidWZmZXIuXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9CdWZmZXJ8VG9uZS5CdWZmZXJ9IGJ1ZmZlciB0aGUgYnVmZmVyXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkJ1ZmZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICBpZiAoYnVmZmVyIGluc3RhbmNlb2YgVG9uZS5CdWZmZXIpIHtcblx0ICAgICAgICAgICAgaWYgKGJ1ZmZlci5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2J1ZmZlciA9IGJ1ZmZlci5nZXQoKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGJ1ZmZlci5fb25sb2FkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KGJ1ZmZlcik7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25sb2FkKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyID0gYnVmZmVyO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQHJldHVybiB7QXVkaW9CdWZmZXJ9IFRoZSBhdWRpbyBidWZmZXIgc3RvcmVkIGluIHRoZSBvYmplY3QuXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIE1ha2VzIGFuIHhociByZXFlc3QgZm9yIHRoZSBzZWxlY3RlZCB1cmwgdGhlbiBkZWNvZGVzXG5cdFx0ICogIHRoZSBmaWxlIGFzIGFuIGF1ZGlvIGJ1ZmZlci4gSW52b2tlc1xuXHRcdCAqICB0aGUgY2FsbGJhY2sgb25jZSB0aGUgYXVkaW8gYnVmZmVyIGxvYWRzLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSB1cmwgb2YgdGhlIGJ1ZmZlciB0byBsb2FkLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIGZpbGV0eXBlIHN1cHBvcnQgZGVwZW5kcyBvbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICBicm93c2VyLlxuXHRcdCAqICBAcmV0dXJucyB7UHJvbWlzZX0gcmV0dXJucyBhIFByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2l0aCB0aGUgVG9uZS5CdWZmZXJcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKHVybCwgb25sb2FkLCBvbmVycm9yKSB7XG5cdCAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAobG9hZCwgZXJyb3IpIHtcblx0ICAgICAgICAgICAgdGhpcy5feGhyID0gVG9uZS5CdWZmZXIubG9hZCh1cmwsIC8vc3VjY2Vzc1xuXHQgICAgICAgICAgICBmdW5jdGlvbiAoYnVmZikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5feGhyID0gbnVsbDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuc2V0KGJ1ZmYpO1xuXHQgICAgICAgICAgICAgICAgbG9hZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29ubG9hZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIGlmIChvbmxvYWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvbmxvYWQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgLy9lcnJvclxuXHQgICAgICAgICAgICBmdW5jdGlvbiAoZXJyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl94aHIgPSBudWxsO1xuXHQgICAgICAgICAgICAgICAgZXJyb3IoZXJyKTtcblx0ICAgICAgICAgICAgICAgIGlmIChvbmVycm9yKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb25lcnJvcihlcnIpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHByb21pc2U7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgYW5kIGRpc2Nvbm5lY3Rcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQnVmZmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICBpZiAodGhpcy5feGhyKSB7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZSh0aGlzLl94aHIpO1xuXHQgICAgICAgICAgICB0aGlzLl94aHIuYWJvcnQoKTtcblx0ICAgICAgICAgICAgdGhpcy5feGhyID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgdGhlIGJ1ZmZlciBpcyBsb2FkZWQgb3Igbm90XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvYWRlZFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyLnByb3RvdHlwZSwgJ2xvYWRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoID4gMDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgYnVmZmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIGR1cmF0aW9uXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXIucHJvdG90eXBlLCAnZHVyYXRpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9idWZmZXIpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIuZHVyYXRpb247XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIGluIHNhbXBsZXNcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBsZW5ndGhcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlci5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9idWZmZXIpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubGVuZ3RoO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2YgZGlzY3JldGUgYXVkaW8gY2hhbm5lbHMuIFJldHVybnMgMCBpZiBubyBidWZmZXJcblx0XHQgKiBpcyBsb2FkZWQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgbnVtYmVyT2ZDaGFubmVsc1xuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyLnByb3RvdHlwZSwgJ251bWJlck9mQ2hhbm5lbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9idWZmZXIpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubnVtYmVyT2ZDaGFubmVscztcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBhdWRpbyBidWZmZXIgZnJvbSB0aGUgYXJyYXkuIFRvIGNyZWF0ZSBhIG11bHRpY2hhbm5lbCBBdWRpb0J1ZmZlcixcblx0XHQgKiAgcGFzcyBpbiBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXkuXG5cdFx0ICogIEBwYXJhbSB7RmxvYXQzMkFycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmlsbCB0aGUgYXVkaW8gYnVmZmVyXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQnVmZmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KSB7XG5cdCAgICAgICAgdmFyIGlzTXVsdGlkaW1lbnNpb25hbCA9IGFycmF5WzBdLmxlbmd0aCA+IDA7XG5cdCAgICAgICAgdmFyIGNoYW5uZWxzID0gaXNNdWx0aWRpbWVuc2lvbmFsID8gYXJyYXkubGVuZ3RoIDogMTtcblx0ICAgICAgICB2YXIgbGVuID0gaXNNdWx0aWRpbWVuc2lvbmFsID8gYXJyYXlbMF0ubGVuZ3RoIDogYXJyYXkubGVuZ3RoO1xuXHQgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQnVmZmVyKGNoYW5uZWxzLCBsZW4sIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlKTtcblx0ICAgICAgICBpZiAoIWlzTXVsdGlkaW1lbnNpb25hbCAmJiBjaGFubmVscyA9PT0gMSkge1xuXHQgICAgICAgICAgICBhcnJheSA9IFthcnJheV07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY2hhbm5lbHM7IGMrKykge1xuXHQgICAgICAgICAgICBidWZmZXIuY29weVRvQ2hhbm5lbChhcnJheVtjXSwgYyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IGJ1ZmZlcjtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBcdFN1bXMgbXVsaXBsZSBjaGFubmVscyBpbnRvIDEgY2hhbm5lbFxuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IGNoYW5uZWwgT3B0aW9uYWxseSBvbmx5IGNvcHkgYSBzaW5nbGUgY2hhbm5lbCBmcm9tIHRoZSBhcnJheS5cblx0XHQgKiAgQHJldHVybiB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUudG9Nb25vID0gZnVuY3Rpb24gKGNoYW5OdW0pIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcihjaGFuTnVtKSkge1xuXHQgICAgICAgICAgICB0aGlzLmZyb21BcnJheSh0aGlzLnRvQXJyYXkoY2hhbk51bSkpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBvdXRwdXRBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5sZW5ndGgpO1xuXHQgICAgICAgICAgICB2YXIgbnVtQ2hhbm5lbHMgPSB0aGlzLm51bWJlck9mQ2hhbm5lbHM7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgbnVtQ2hhbm5lbHM7IGNoYW5uZWwrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWxBcnJheSA9IHRoaXMudG9BcnJheShjaGFubmVsKTtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbm5lbEFycmF5Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb3V0cHV0QXJyYXlbaV0gKz0gY2hhbm5lbEFycmF5W2ldO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vZGl2aWRlIGJ5IHRoZSBudW1iZXIgb2YgY2hhbm5lbHNcblx0ICAgICAgICAgICAgb3V0cHV0QXJyYXkgPSBvdXRwdXRBcnJheS5tYXAoZnVuY3Rpb24gKHNhbXBsZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHNhbXBsZSAvIG51bUNoYW5uZWxzO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5mcm9tQXJyYXkob3V0cHV0QXJyYXkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBcdEdldCB0aGUgYnVmZmVyIGFzIGFuIGFycmF5LiBTaW5nbGUgY2hhbm5lbCBidWZmZXJzIHdpbGwgcmV0dXJuIGEgMS1kaW1lbnNpb25hbFxuXHRcdCAqIFx0RmxvYXQzMkFycmF5LCBhbmQgbXVsdGljaGFubmVsIGJ1ZmZlcnMgd2lsbCByZXR1cm4gbXVsdGlkaW1lbnNpb25hbCBhcnJheXMuXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gY2hhbm5lbCBPcHRpb25hbGx5IG9ubHkgY29weSBhIHNpbmdsZSBjaGFubmVsIGZyb20gdGhlIGFycmF5LlxuXHRcdCAqICBAcmV0dXJuIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKGNoYW5uZWwpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcihjaGFubmVsKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDaGFubmVsRGF0YShjaGFubmVsKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMubnVtYmVyT2ZDaGFubmVscyA9PT0gMSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy50b0FycmF5KDApO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciByZXQgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCB0aGlzLm51bWJlck9mQ2hhbm5lbHM7IGMrKykge1xuXHQgICAgICAgICAgICAgICAgcmV0W2NdID0gdGhpcy5nZXRDaGFubmVsRGF0YShjKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gcmV0O1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgRmxvYXQzMkFycmF5IHJlcHJlc2VudGluZyB0aGUgUENNIGF1ZGlvIGRhdGEgZm9yIHRoZSBzcGVjaWZpYyBjaGFubmVsLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBjaGFubmVsICBUaGUgY2hhbm5lbCBudW1iZXIgdG8gcmV0dXJuXG5cdFx0ICogIEByZXR1cm4gIHtGbG9hdDMyQXJyYXl9ICBUaGUgYXVkaW8gYXMgYSBUeXBlZEFycmF5XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuZ2V0Q2hhbm5lbERhdGEgPSBmdW5jdGlvbiAoY2hhbm5lbCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2hhbm5lbCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEN1dCBhIHN1YnNlY3Rpb24gb2YgdGhlIGFycmF5IGFuZCByZXR1cm4gYSBidWZmZXIgb2YgdGhlXG5cdFx0ICogIHN1YnNlY3Rpb24uIERvZXMgbm90IG1vZGlmeSB0aGUgb3JpZ2luYWwgYnVmZmVyXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gc3RhcnQgVGhlIHRpbWUgdG8gc3RhcnQgdGhlIHNsaWNlXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IGVuZCBUaGUgZW5kIHRpbWUgdG8gc2xpY2UuIElmIG5vbmUgaXMgZ2l2ZW5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgIHdpbGwgZGVmYXVsdCB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXJcblx0XHQgKiAgQHJldHVybiB7VG9uZS5CdWZmZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIChzdGFydCwgZW5kKSB7XG5cdCAgICAgICAgZW5kID0gVG9uZS5kZWZhdWx0QXJnKGVuZCwgdGhpcy5kdXJhdGlvbik7XG5cdCAgICAgICAgdmFyIHN0YXJ0U2FtcGxlcyA9IE1hdGguZmxvb3IodGhpcy5jb250ZXh0LnNhbXBsZVJhdGUgKiB0aGlzLnRvU2Vjb25kcyhzdGFydCkpO1xuXHQgICAgICAgIHZhciBlbmRTYW1wbGVzID0gTWF0aC5mbG9vcih0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZSAqIHRoaXMudG9TZWNvbmRzKGVuZCkpO1xuXHQgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFtdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1iZXJPZkNoYW5uZWxzOyBpKyspIHtcblx0ICAgICAgICAgICAgcmVwbGFjZW1lbnRbaV0gPSB0aGlzLnRvQXJyYXkoaSkuc2xpY2Uoc3RhcnRTYW1wbGVzLCBlbmRTYW1wbGVzKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHJldEJ1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcigpLmZyb21BcnJheShyZXBsYWNlbWVudCk7XG5cdCAgICAgICAgcmV0dXJuIHJldEJ1ZmZlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV2ZXJzZSB0aGUgYnVmZmVyLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkJ1ZmZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLl9yZXZlcnNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmxvYWRlZCkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubnVtYmVyT2ZDaGFubmVsczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKHRoaXMuZ2V0Q2hhbm5lbERhdGEoaSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldmVyc2UgdGhlIGJ1ZmZlci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgcmV2ZXJzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyLnByb3RvdHlwZSwgJ3JldmVyc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZlcnNlZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJldikge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fcmV2ZXJzZWQgIT09IHJldikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmV2ZXJzZWQgPSByZXY7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZXZlcnNlKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gU1RBVElDIE1FVEhPRFNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9zdGF0aWNhbGx5IGluaGVyaXRzIEVtaXR0ZXIgbWV0aG9kc1xuXHQgICAgVG9uZS5FbWl0dGVyLm1peGluKFRvbmUuQnVmZmVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgc3RhdGljIHF1ZXVlIGZvciBhbGwgb2YgdGhlIHhociByZXF1ZXN0c1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZSA9IFtdO1xuXHQgICAgLyoqXG5cdFx0ICogIEEgcGF0aCB3aGljaCBpcyBwcmVmaXhlZCBiZWZvcmUgZXZlcnkgdXJsLlxuXHRcdCAqICBAdHlwZSAge1N0cmluZ31cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuYmFzZVVybCA9ICcnO1xuXHQgICAgLyoqXG5cdFx0ICogIENyZWF0ZSBhIFRvbmUuQnVmZmVyIGZyb20gdGhlIGFycmF5LiBUbyBjcmVhdGUgYSBtdWx0aWNoYW5uZWwgQXVkaW9CdWZmZXIsXG5cdFx0ICogIHBhc3MgaW4gYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5LlxuXHRcdCAqICBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZpbGwgdGhlIGF1ZGlvIGJ1ZmZlclxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkJ1ZmZlcn0gQSBUb25lLkJ1ZmZlciBjcmVhdGVkIGZyb20gdGhlIGFycmF5XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpIHtcblx0ICAgICAgICByZXR1cm4gbmV3IFRvbmUuQnVmZmVyKCkuZnJvbUFycmF5KGFycmF5KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDcmVhdGVzIGEgVG9uZS5CdWZmZXIgZnJvbSBhIFVSTCwgcmV0dXJucyBhIHByb21pc2Vcblx0XHQgKiB3aGljaCByZXNvbHZlcyB0byBhIFRvbmUuQnVmZmVyXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSB1cmwgVGhlIHVybCB0byBsb2FkLlxuXHRcdCAqIEByZXR1cm4ge1Byb21pc2U8VG9uZS5CdWZmZXI+fSAgICAgQSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHRvIGEgVG9uZS5CdWZmZXJcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmZyb21VcmwgPSBmdW5jdGlvbiAodXJsKSB7XG5cdCAgICAgICAgdmFyIGJ1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcigpO1xuXHQgICAgICAgIHJldHVybiBidWZmZXIubG9hZCh1cmwpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlbW92ZSBhbiB4aHIgcmVxdWVzdCBmcm9tIHRoZSBkb3dubG9hZCBxdWV1ZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5fcmVtb3ZlRnJvbURvd25sb2FkUXVldWUgPSBmdW5jdGlvbiAocmVxdWVzdCkge1xuXHQgICAgICAgIHZhciBpbmRleCA9IFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlLmluZGV4T2YocmVxdWVzdCk7XG5cdCAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTG9hZHMgYSB1cmwgdXNpbmcgWE1MSHR0cFJlcXVlc3QuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB1cmxcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gb25sb2FkXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IG9uZXJyb3Jcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gb25wcm9ncmVzc1xuXHRcdCAqICBAcmV0dXJuIHtYTUxIdHRwUmVxdWVzdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmxvYWQgPSBmdW5jdGlvbiAodXJsLCBvbmxvYWQsIG9uZXJyb3IpIHtcblx0ICAgICAgICAvL2RlZmF1bHRcblx0ICAgICAgICBvbmxvYWQgPSBUb25lLmRlZmF1bHRBcmcob25sb2FkLCBUb25lLm5vT3ApO1xuXHQgICAgICAgIC8vIHRlc3QgaWYgdGhlIHVybCBjb250YWlucyBtdWx0aXBsZSBleHRlbnNpb25zXG5cdCAgICAgICAgdmFyIG1hdGNoZXMgPSB1cmwubWF0Y2goL1xcWyguK1xcfD8pK1xcXSQvKTtcblx0ICAgICAgICBpZiAobWF0Y2hlcykge1xuXHQgICAgICAgICAgICB2YXIgZXh0ZW5zaW9ucyA9IG1hdGNoZXNbMV0uc3BsaXQoJ3wnKTtcblx0ICAgICAgICAgICAgdmFyIGV4dGVuc2lvbiA9IGV4dGVuc2lvbnNbMF07XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuQnVmZmVyLnN1cHBvcnRzVHlwZShleHRlbnNpb25zW2ldKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbnNbaV07XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UobWF0Y2hlc1swXSwgZXh0ZW5zaW9uKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gb25FcnJvcihlKSB7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZShyZXF1ZXN0KTtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuZW1pdCgnZXJyb3InLCBlKTtcblx0ICAgICAgICAgICAgaWYgKG9uZXJyb3IpIHtcblx0ICAgICAgICAgICAgICAgIG9uZXJyb3IoZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIG9uUHJvZ3Jlc3MoKSB7XG5cdCAgICAgICAgICAgIC8vY2FsY3VsYXRlIHRoZSBwcm9ncmVzc1xuXHQgICAgICAgICAgICB2YXIgdG90YWxQcm9ncmVzcyA9IDA7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRvdGFsUHJvZ3Jlc3MgKz0gVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWVbaV0ucHJvZ3Jlc3M7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuZW1pdCgncHJvZ3Jlc3MnLCB0b3RhbFByb2dyZXNzIC8gVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUubGVuZ3RoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0ICAgICAgICByZXF1ZXN0Lm9wZW4oJ0dFVCcsIFRvbmUuQnVmZmVyLmJhc2VVcmwgKyB1cmwsIHRydWUpO1xuXHQgICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcblx0ICAgICAgICAvL3N0YXJ0IG91dCBhcyAwXG5cdCAgICAgICAgcmVxdWVzdC5wcm9ncmVzcyA9IDA7XG5cdCAgICAgICAgVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUucHVzaChyZXF1ZXN0KTtcblx0ICAgICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMjAwKSB7XG5cdCAgICAgICAgICAgICAgICBUb25lLmNvbnRleHQuZGVjb2RlQXVkaW9EYXRhKHJlcXVlc3QucmVzcG9uc2UpLnRoZW4oZnVuY3Rpb24gKGJ1ZmYpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnByb2dyZXNzID0gMTtcblx0ICAgICAgICAgICAgICAgICAgICBvblByb2dyZXNzKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgb25sb2FkKGJ1ZmYpO1xuXHQgICAgICAgICAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZShyZXF1ZXN0KTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUubGVuZ3RoID09PSAwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vZW1pdCB0aGUgZXZlbnQgYXQgdGhlIGVuZFxuXHQgICAgICAgICAgICAgICAgICAgICAgICBUb25lLkJ1ZmZlci5lbWl0KCdsb2FkJyk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZShyZXF1ZXN0KTtcblx0ICAgICAgICAgICAgICAgICAgICBvbkVycm9yKCdUb25lLkJ1ZmZlcjogY291bGQgbm90IGRlY29kZSBhdWRpbyBkYXRhOiAnICsgdXJsKTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgb25FcnJvcignVG9uZS5CdWZmZXI6IGNvdWxkIG5vdCBsb2NhdGUgZmlsZTogJyArIHVybCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcik7XG5cdCAgICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuXHQgICAgICAgICAgICAgICAgLy9vbmx5IGdvIHRvIDk1JSwgdGhlIGxhc3QgNSUgaXMgd2hlbiB0aGUgYXVkaW8gaXMgZGVjb2RlZFxuXHQgICAgICAgICAgICAgICAgcmVxdWVzdC5wcm9ncmVzcyA9IGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsICogMC45NTtcblx0ICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3MoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJlcXVlc3Quc2VuZCgpO1xuXHQgICAgICAgIHJldHVybiByZXF1ZXN0O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIGFsbCBvZiB0aGUgZG93bmxvYWRzIGluIHByb2dyZXNzXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQnVmZmVyfVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5jYW5jZWxEb3dubG9hZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUuc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZShyZXF1ZXN0KTtcblx0ICAgICAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiBUb25lLkJ1ZmZlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2hlY2tzIGEgdXJsJ3MgZXh0ZW5zaW9uIHRvIHNlZSBpZiB0aGUgY3VycmVudCBicm93c2VyIGNhbiBwbGF5IHRoYXQgZmlsZSB0eXBlLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSB1cmwvZXh0ZW5zaW9uIHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybiB7Qm9vbGVhbn0gSWYgdGhlIGZpbGUgZXh0ZW5zaW9uIGNhbiBiZSBwbGF5ZWRcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuQnVmZmVyLnN1cHBvcnRzVHlwZShcIndhdlwiKTsgLy9yZXR1cm5zIHRydWVcblx0XHQgKiBUb25lLkJ1ZmZlci5zdXBwb3J0c1R5cGUoXCJwYXRoL3RvL2ZpbGUud2F2XCIpOyAvL3JldHVybnMgdHJ1ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuc3VwcG9ydHNUeXBlID0gZnVuY3Rpb24gKHVybCkge1xuXHQgICAgICAgIHZhciBleHRlbnNpb24gPSB1cmwuc3BsaXQoJy4nKTtcblx0ICAgICAgICBleHRlbnNpb24gPSBleHRlbnNpb25bZXh0ZW5zaW9uLmxlbmd0aCAtIDFdO1xuXHQgICAgICAgIHZhciByZXNwb25zZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2F1ZGlvJykuY2FuUGxheVR5cGUoJ2F1ZGlvLycgKyBleHRlbnNpb24pO1xuXHQgICAgICAgIHJldHVybiByZXNwb25zZSAhPT0gJyc7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgYSBQcm9taXNlIHdoaWNoIHJlc29sdmVzIHdoZW4gYWxsIG9mIHRoZSBidWZmZXJzIGhhdmUgbG9hZGVkXG5cdFx0ICogIEByZXR1cm4ge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLmxvYWRlZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb25sb2FkLCBvbmVycm9yO1xuXHQgICAgICAgIGZ1bmN0aW9uIHJlbW92ZUV2ZW50cygpIHtcblx0ICAgICAgICAgICAgLy9yZW1vdmUgdGhlIGV2ZW50cyB3aGVuIGl0J3MgcmVzb2x2ZWRcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIub2ZmKCdsb2FkJywgb25sb2FkKTtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIub2ZmKCdlcnJvcicsIG9uZXJyb3IpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHN1Y2Nlc3MsIGZhaWwpIHtcblx0ICAgICAgICAgICAgb25sb2FkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgc3VjY2VzcygpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBvbmVycm9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgZmFpbCgpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICAvL2FkZCB0aGUgZXZlbnQgbGlzdGVuZXJzXG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLm9uKCdsb2FkJywgb25sb2FkKTtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIub24oJ2Vycm9yJywgb25lcnJvcik7XG5cdCAgICAgICAgfSkudGhlbihyZW1vdmVFdmVudHMpLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgIHJlbW92ZUV2ZW50cygpO1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQnVmZmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBwZXIgYXJvdW5kIHRoZSBuYXRpdmUgZmlyZS1hbmQtZm9yZ2V0IE9zY2lsbGF0b3JOb2RlLiBBZGRzIHRoZVxuXHRcdCAqICAgICBhYmlsaXR5IHRvIHJlc2NoZWR1bGUgdGhlIHN0b3AgbWV0aG9kLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSAge0F1ZGlvQnVmZmVyfFRvbmUuQnVmZmVyfSAgYnVmZmVyICAgVGhlIGJ1ZmZlciB0byBwbGF5XG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgb25sb2FkICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIGlzIGRvbmUgcGxheWluZy5cblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5Pc2NpbGxhdG9yTm9kZSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGFmdGVyIHRoZVxuXHRcdFx0ICogIGJ1ZmZlciBzb3VyY2UgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdFx0ICogIEB0eXBlICB7RnVuY3Rpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9uZW5kZWQgPSBvcHRpb25zLm9uZW5kZWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3Igc3RhcnQgdGltZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvciBzdG9wIHRpbWVcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBub2RlIHdoaWNoIGVudmVsb3BlcyB0aGUgT3NjaWxsYXRvck5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIHRoaXMuY29udGV4dC5jdXJyZW50VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSAge09zY2lsbGF0b3JOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gdGhpcy5jb250ZXh0LmNyZWF0ZU9zY2lsbGF0b3IoKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNvbm5lY3QodGhpcy5fZ2Fpbk5vZGUpO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlBhcmFtKHRoaXMuX29zY2lsbGF0b3IuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS52YWx1ZSA9IG9wdGlvbnMuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuUGFyYW0odGhpcy5fb3NjaWxsYXRvci5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUudmFsdWUgPSBvcHRpb25zLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmFsdWUgdGhhdCB0aGUgYnVmZmVyIHJhbXBzIHRvXG5cdFx0XHQgKiAgQHR5cGUge0dhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dhaW4gPSAxO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuT3NjaWxsYXRvck5vZGUsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdvbmVuZGVkJzogVG9uZS5ub09wXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBvc2NpbGxhdG9yLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuT3NjaWxsYXRvck5vZGUjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RhdGVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBwbGF5YmFjayBzdGF0ZSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgVGhlIHRpbWUgdG8gdGVzdCB0aGUgc3RhdGUgYXRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuU3RhdGV9ICBUaGUgcGxheWJhY2sgc3RhdGUuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuZ2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSAmJiB0aW1lID49IHRoaXMuX3N0YXJ0VGltZSAmJiAodGhpcy5fc3RvcFRpbWUgPT09IC0xIHx8IHRpbWUgPD0gdGhpcy5fc3RvcFRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlN0YXRlLlN0YXJ0ZWQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuU3RhdGUuU3RvcHBlZDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdCAgICAgKiBTdGFydCB0aGUgb3NjaWxsYXRvciBub2RlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSBXaGVuIHRvIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdCAgICAgKiBAcmV0dXJuIHtPc2NpbGxhdG9yTm9kZX0gICAgICB0aGlzXG5cdCAgICAgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lID09PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdGFydCh0aGlzLl9zdGFydFRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhub3cpO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIG5vdyk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMSwgdGhpcy5fc3RhcnRUaW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBjYWxsIE9zY2lsbGF0b3JOb2RlLnN0YXJ0IG1vcmUgdGhhbiBvbmNlJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHQgICAgICogU2V0cyBhbiBhcmJpdHJhcnkgY3VzdG9tIHBlcmlvZGljIHdhdmVmb3JtIGdpdmVuIGEgUGVyaW9kaWNXYXZlLlxuXHQgICAgICogQHBhcmFtICB7UGVyaW9kaWNXYXZlfSBwZXJpb2RpY1dhdmUgUGVyaW9kaWNXYXZlIHNob3VsZCBiZSBjcmVhdGVkIHdpdGggY29udGV4dC5jcmVhdGVQZXJpb2RpY1dhdmVcblx0ICAgICAqIEByZXR1cm4ge09zY2lsbGF0b3JOb2RlfSB0aGlzXG5cdCAgICAgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnNldFBlcmlvZGljV2F2ZSA9IGZ1bmN0aW9uIChwZXJpb2RpY1dhdmUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnNldFBlcmlvZGljV2F2ZShwZXJpb2RpY1dhdmUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHQgICAgICogU3RvcCB0aGUgb3NjaWxsYXRvciBub2RlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSBXaGVuIHRvIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0ICAgICAqIEByZXR1cm4ge09zY2lsbGF0b3JOb2RlfSAgICAgIHRoaXNcblx0ICAgICAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgLy9jYW5jZWwgdGhlIHByZXZpb3VzIHN0b3Bcblx0ICAgICAgICB0aGlzLmNhbmNlbFN0b3AoKTtcblx0ICAgICAgICAvL3Jlc2NoZWR1bGUgaXRcblx0ICAgICAgICB0aGlzLl9zdG9wVGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgdGhpcy5fc3RvcFRpbWUpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgICAgdGhpcy5fdGltZW91dCA9IHRoaXMuY29udGV4dC5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdG9wKHRoaXMubm93KCkpO1xuXHQgICAgICAgICAgICB0aGlzLm9uZW5kZWQoKTtcblx0ICAgICAgICB9LmJpbmQodGhpcyksIHRoaXMuX3N0b3BUaW1lIC0gdGhpcy5ub3coKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBhIHNjaGVkdWxlZCBzdG9wIGV2ZW50XG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk9zY2lsbGF0b3JOb2RlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuY2FuY2VsU3RvcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSkge1xuXHQgICAgICAgICAgICAvL2NhbmNlbCB0aGUgc3RvcCBlbnZlbG9wZVxuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aGlzLl9zdGFydFRpbWUgKyB0aGlzLnNhbXBsZVRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDEsIE1hdGgubWF4KHRoaXMubm93KCksIHRoaXMuX3N0YXJ0VGltZSkpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wVGltZSA9IC0xO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3NjaWxsYXRvciB0eXBlLiBFaXRoZXIgJ3NpbmUnLCAnc2F3dG9vdGgnLCAnc3F1YXJlJywgb3IgJ3RyaWFuZ2xlJ1xuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9zY2lsbGF0b3JOb2RlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk9zY2lsbGF0b3JOb2RlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5vbmVuZGVkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Pc2NpbGxhdG9yTm9kZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuT3NjaWxsYXRvciBzdXBwb3J0cyBhIG51bWJlciBvZiBmZWF0dXJlcyBpbmNsdWRpbmdcblx0XHQgKiAgICAgICAgIHBoYXNlIHJvdGF0aW9uLCBtdWx0aXBsZSBvc2NpbGxhdG9yIHR5cGVzIChzZWUgVG9uZS5Pc2NpbGxhdG9yLnR5cGUpLFxuXHRcdCAqICAgICAgICAgYW5kIFRyYW5zcG9ydCBzeW5jaW5nIChzZWUgVG9uZS5Pc2NpbGxhdG9yLnN5bmNGcmVxdWVuY3kpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbZnJlcXVlbmN5XSBTdGFydGluZyBmcmVxdWVuY3lcblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd9IFt0eXBlXSBUaGUgb3NjaWxsYXRvciB0eXBlLiBSZWFkIG1vcmUgYWJvdXQgdHlwZSBiZWxvdy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL21ha2UgYW5kIHN0YXJ0IGEgNDQwaHogc2luZSB0b25lXG5cdFx0ICogdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoNDQwLCBcInNpbmVcIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJ1xuXHQgICAgICAgIF0sIFRvbmUuT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWFpbiBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge09zY2lsbGF0b3JOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHBlcmlvZGljIHdhdmVcblx0XHRcdCAqICBAdHlwZSB7UGVyaW9kaWNXYXZlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl93YXZlID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGFydGlhbHMgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcnRpYWxzID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMucGFydGlhbHMsIFsxXSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgYmV0d2VlbiAwIC0gMzYwXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGhhc2UgPSBvcHRpb25zLnBoYXNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge3N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG51bGw7XG5cdCAgICAgICAgLy9zZXR1cFxuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5fcGhhc2U7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk9zY2lsbGF0b3IsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdwYXJ0aWFscyc6IFtdXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBPc2NpbGxhdG9yIHR5cGVzXG5cdFx0ICogIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IuVHlwZSA9IHtcblx0ICAgICAgICBTaW5lOiAnc2luZScsXG5cdCAgICAgICAgVHJpYW5nbGU6ICd0cmlhbmdsZScsXG5cdCAgICAgICAgU2F3dG9vdGg6ICdzYXd0b290aCcsXG5cdCAgICAgICAgU3F1YXJlOiAnc3F1YXJlJyxcblx0ICAgICAgICBDdXN0b206ICdjdXN0b20nXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL25ldyBvc2NpbGxhdG9yIHdpdGggcHJldmlvdXMgdmFsdWVzXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3JOb2RlKCk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3dhdmUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zZXRQZXJpb2RpY1dhdmUodGhpcy5fd2F2ZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBjb250cm9sIHNpZ25hbCB0byB0aGUgb3NjaWxsYXRvciBmcmVxdWVuY3kgJiBkZXR1bmVcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fb3NjaWxsYXRvci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3QodGhpcy5fb3NjaWxsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fb3NjaWxsYXRvcikge1xuXHQgICAgICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVzdGFydCB0aGUgb3NjaWxsYXRvci4gRG9lcyBub3Qgc3RvcCB0aGUgb3NjaWxsYXRvciwgYnV0IGluc3RlYWRcblx0XHQgKiBqdXN0IGNhbmNlbHMgYW55IHNjaGVkdWxlZCAnc3RvcCcgZnJvbSBiZWluZyBpbnZva2VkLlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lXG5cdFx0ICogQHJldHVybiB7VG9uZS5Pc2NpbGxhdG9yfSAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5jYW5jZWxTdG9wKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRoaXMudG9TZWNvbmRzKHRpbWUpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3luYyB0aGUgc2lnbmFsIHRvIHRoZSBUcmFuc3BvcnQncyBicG0uIEFueSBjaGFuZ2VzIHRvIHRoZSB0cmFuc3BvcnRzIGJwbSxcblx0XHQgKiAgd2lsbCBhbHNvIGFmZmVjdCB0aGUgb3NjaWxsYXRvcnMgZnJlcXVlbmN5LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlID0gMTIwO1xuXHRcdCAqIG9zYy5mcmVxdWVuY3kudmFsdWUgPSA0NDA7XG5cdFx0ICogLy90aGUgcmF0aW9uIGJldHdlZW4gdGhlIGJwbSBhbmQgdGhlIGZyZXF1ZW5jeSB3aWxsIGJlIG1haW50YWluZWRcblx0XHQgKiBvc2Muc3luY0ZyZXF1ZW5jeSgpO1xuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LmJwbS52YWx1ZSA9IDI0MDtcblx0XHQgKiAvLyB0aGUgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yIGlzIGRvdWJsZWQgdG8gODgwXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLnN5bmNGcmVxdWVuY3kgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQuc3luY1NpZ25hbCh0aGlzLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFVuc3luYyB0aGUgb3NjaWxsYXRvcidzIGZyZXF1ZW5jeSBmcm9tIHRoZSBUcmFuc3BvcnQuXG5cdFx0ICogIFNlZSBUb25lLk9zY2lsbGF0b3Iuc3luY0ZyZXF1ZW5jeVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLnVuc3luY0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC51bnN5bmNTaWduYWwodGhpcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yOiBlaXRoZXIgc2luZSwgc3F1YXJlLCB0cmlhbmdsZSwgb3Igc2F3dG9vdGguIEFsc28gY2FwYWJsZSBvZlxuXHRcdCAqIHNldHRpbmcgdGhlIGZpcnN0IHggbnVtYmVyIG9mIHBhcnRpYWxzIG9mIHRoZSBvc2NpbGxhdG9yLiBGb3IgZXhhbXBsZTogXCJzaW5lNFwiIHdvdWxkXG5cdFx0ICogc2V0IGJlIHRoZSBmaXJzdCA0IHBhcnRpYWxzIG9mIHRoZSBzaW5lIHdhdmUgYW5kIFwidHJpYW5nbGU4XCIgd291bGQgc2V0IHRoZSBmaXJzdFxuXHRcdCAqIDggcGFydGlhbHMgb2YgdGhlIHRyaWFuZ2xlIHdhdmUuXG5cdFx0ICogPGJyPjxicj5cblx0XHQgKiBVc2VzIFBlcmlvZGljV2F2ZSBpbnRlcm5hbGx5IGV2ZW4gZm9yIG5hdGl2ZSB0eXBlcyBzbyB0aGF0IGl0IGNhbiBzZXQgdGhlIHBoYXNlLlxuXHRcdCAqIFBlcmlvZGljV2F2ZSBlcXVhdGlvbnMgYXJlIGZyb20gdGhlXG5cdFx0ICogW1dlYmtpdCBXZWIgQXVkaW8gaW1wbGVtZW50YXRpb25dKGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vY29kZXNlYXJjaCNjaHJvbWl1bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1NvdXJjZS9tb2R1bGVzL3dlYmF1ZGlvL1BlcmlvZGljV2F2ZS5jcHAmc3E9cGFja2FnZTpjaHJvbWl1bSkuXG5cdFx0ICpcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9zZXQgaXQgdG8gYSBzcXVhcmUgd2F2ZVxuXHRcdCAqIG9zYy50eXBlID0gXCJzcXVhcmVcIjtcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vc2V0IHRoZSBmaXJzdCA2IHBhcnRpYWxzIG9mIGEgc2F3dG9vdGggd2F2ZVxuXHRcdCAqIG9zYy50eXBlID0gXCJzYXd0b290aDZcIjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHZhciBpc0Jhc2ljVHlwZSA9IFtcblx0ICAgICAgICAgICAgICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNpbmUsXG5cdCAgICAgICAgICAgICAgICBUb25lLk9zY2lsbGF0b3IuVHlwZS5TcXVhcmUsXG5cdCAgICAgICAgICAgICAgICBUb25lLk9zY2lsbGF0b3IuVHlwZS5UcmlhbmdsZSxcblx0ICAgICAgICAgICAgICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNhd3Rvb3RoXG5cdCAgICAgICAgICAgIF0uaW5jbHVkZXModHlwZSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9waGFzZSA9PT0gMCAmJiBpc0Jhc2ljVHlwZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fd2F2ZSA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICAvL2p1c3QgZ28gd2l0aCB0aGUgYmFzaWMgYXBwcm9hY2hcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID09PSB0eXBlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNvZWZzID0gdGhpcy5fZ2V0UmVhbEltYWdpbmFyeSh0eXBlLCB0aGlzLl9waGFzZSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgcGVyaW9kaWNXYXZlID0gdGhpcy5jb250ZXh0LmNyZWF0ZVBlcmlvZGljV2F2ZShjb2Vmc1swXSwgY29lZnNbMV0pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fd2F2ZSA9IHBlcmlvZGljV2F2ZTtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zZXRQZXJpb2RpY1dhdmUodGhpcy5fd2F2ZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcmVhbCBhbmQgaW1hZ2luYXJ5IGNvbXBvbmVudHMgYmFzZWRcblx0XHQgKiAgb24gdGhlIG9zY2lsbGF0b3IgdHlwZS5cblx0XHQgKiAgQHJldHVybnMge0FycmF5fSBbcmVhbCwgaW1hZ2luYXJ5XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5fZ2V0UmVhbEltYWdpbmFyeSA9IGZ1bmN0aW9uICh0eXBlLCBwaGFzZSkge1xuXHQgICAgICAgIHZhciBmZnRTaXplID0gNDA5Njtcblx0ICAgICAgICB2YXIgcGVyaW9kaWNXYXZlU2l6ZSA9IGZmdFNpemUgLyAyO1xuXHQgICAgICAgIHZhciByZWFsID0gbmV3IEZsb2F0MzJBcnJheShwZXJpb2RpY1dhdmVTaXplKTtcblx0ICAgICAgICB2YXIgaW1hZyA9IG5ldyBGbG9hdDMyQXJyYXkocGVyaW9kaWNXYXZlU2l6ZSk7XG5cdCAgICAgICAgdmFyIHBhcnRpYWxDb3VudCA9IDE7XG5cdCAgICAgICAgaWYgKHR5cGUgPT09IFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbSkge1xuXHQgICAgICAgICAgICBwYXJ0aWFsQ291bnQgPSB0aGlzLl9wYXJ0aWFscy5sZW5ndGggKyAxO1xuXHQgICAgICAgICAgICBwZXJpb2RpY1dhdmVTaXplID0gcGFydGlhbENvdW50O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBwYXJ0aWFsID0gL14oc2luZXx0cmlhbmdsZXxzcXVhcmV8c2F3dG9vdGgpKFxcZCspJC8uZXhlYyh0eXBlKTtcblx0ICAgICAgICAgICAgaWYgKHBhcnRpYWwpIHtcblx0ICAgICAgICAgICAgICAgIHBhcnRpYWxDb3VudCA9IHBhcnNlSW50KHBhcnRpYWxbMl0pICsgMTtcblx0ICAgICAgICAgICAgICAgIHR5cGUgPSBwYXJ0aWFsWzFdO1xuXHQgICAgICAgICAgICAgICAgcGFydGlhbENvdW50ID0gTWF0aC5tYXgocGFydGlhbENvdW50LCAyKTtcblx0ICAgICAgICAgICAgICAgIHBlcmlvZGljV2F2ZVNpemUgPSBwYXJ0aWFsQ291bnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgZm9yICh2YXIgbiA9IDE7IG4gPCBwZXJpb2RpY1dhdmVTaXplOyArK24pIHtcblx0ICAgICAgICAgICAgdmFyIHBpRmFjdG9yID0gMiAvIChuICogTWF0aC5QSSk7XG5cdCAgICAgICAgICAgIHZhciBiO1xuXHQgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5TaW5lOlxuXHQgICAgICAgICAgICAgICAgYiA9IG4gPD0gcGFydGlhbENvdW50ID8gMSA6IDA7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5TcXVhcmU6XG5cdCAgICAgICAgICAgICAgICBiID0gbiAmIDEgPyAyICogcGlGYWN0b3IgOiAwO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuU2F3dG9vdGg6XG5cdCAgICAgICAgICAgICAgICBiID0gcGlGYWN0b3IgKiAobiAmIDEgPyAxIDogLTEpO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuVHJpYW5nbGU6XG5cdCAgICAgICAgICAgICAgICBpZiAobiAmIDEpIHtcblx0ICAgICAgICAgICAgICAgICAgICBiID0gMiAqIChwaUZhY3RvciAqIHBpRmFjdG9yKSAqIChuIC0gMSA+PiAxICYgMSA/IC0xIDogMSk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGIgPSAwO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tOlxuXHQgICAgICAgICAgICAgICAgYiA9IHRoaXMuX3BhcnRpYWxzW24gLSAxXTtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVG9uZS5Pc2NpbGxhdG9yOiBpbnZhbGlkIHR5cGU6ICcgKyB0eXBlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAoYiAhPT0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmVhbFtuXSA9IC1iICogTWF0aC5zaW4ocGhhc2UgKiBuKTtcblx0ICAgICAgICAgICAgICAgIGltYWdbbl0gPSBiICogTWF0aC5jb3MocGhhc2UgKiBuKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJlYWxbbl0gPSAwO1xuXHQgICAgICAgICAgICAgICAgaW1hZ1tuXSA9IDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFtcblx0ICAgICAgICAgICAgcmVhbCxcblx0ICAgICAgICAgICAgaW1hZ1xuXHQgICAgICAgIF07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbXB1dGUgdGhlIGludmVyc2UgRkZUIGZvciBhIGdpdmVuIHBoYXNlLlxuXHRcdCAqICBAcGFyYW0gIHtGbG9hdDMyQXJyYXl9ICByZWFsXG5cdFx0ICogIEBwYXJhbSAge0Zsb2F0MzJBcnJheX0gIGltYWdcblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9ICBwaGFzZVxuXHRcdCAqICBAcmV0dXJuICB7QXVkaW9SYW5nZX1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuX2ludmVyc2VGRlQgPSBmdW5jdGlvbiAocmVhbCwgaW1hZywgcGhhc2UpIHtcblx0ICAgICAgICB2YXIgc3VtID0gMDtcblx0ICAgICAgICB2YXIgbGVuID0gcmVhbC5sZW5ndGg7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICBzdW0gKz0gcmVhbFtpXSAqIE1hdGguY29zKGkgKiBwaGFzZSkgKyBpbWFnW2ldICogTWF0aC5zaW4oaSAqIHBoYXNlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHN1bTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHJldHVybiAge0F1ZGlvUmFuZ2V9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLl9nZXRJbml0aWFsVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGNvZWZzID0gdGhpcy5fZ2V0UmVhbEltYWdpbmFyeSh0aGlzLl90eXBlLCAwKTtcblx0ICAgICAgICB2YXIgcmVhbCA9IGNvZWZzWzBdO1xuXHQgICAgICAgIHZhciBpbWFnID0gY29lZnNbMV07XG5cdCAgICAgICAgdmFyIG1heFZhbHVlID0gMDtcblx0ICAgICAgICB2YXIgdHdvUGkgPSBNYXRoLlBJICogMjtcblx0ICAgICAgICAvL2NoZWNrIGZvciBwZWFrcyBpbiA4IHBsYWNlc1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdCAgICAgICAgICAgIG1heFZhbHVlID0gTWF0aC5tYXgodGhpcy5faW52ZXJzZUZGVChyZWFsLCBpbWFnLCBpIC8gOCAqIHR3b1BpKSwgbWF4VmFsdWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gLXRoaXMuX2ludmVyc2VGRlQocmVhbCwgaW1hZywgdGhpcy5fcGhhc2UpIC8gbWF4VmFsdWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSB3YXZlZm9ybS4gQSBwYXJ0aWFsIHJlcHJlc2VudHNcblx0XHQgKiB0aGUgYW1wbGl0dWRlIGF0IGEgaGFybW9uaWMuIFRoZSBmaXJzdCBoYXJtb25pYyBpcyB0aGVcblx0XHQgKiBmdW5kYW1lbnRhbCBmcmVxdWVuY3ksIHRoZSBzZWNvbmQgaXMgdGhlIG9jdGF2ZSBhbmQgc28gb25cblx0XHQgKiBmb2xsb3dpbmcgdGhlIGhhcm1vbmljIHNlcmllcy5cblx0XHQgKiBTZXR0aW5nIHRoaXMgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgdHlwZSB0byBcImN1c3RvbVwiLlxuXHRcdCAqIFRoZSB2YWx1ZSBpcyBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSB0eXBlIGlzIG5vdCBcImN1c3RvbVwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGFydGlhbHMgPSBbMSwgMC4yLCAwLjAxXTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlICE9PSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b20pIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBbXTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJ0aWFscztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBwYXJ0aWFscztcblx0ICAgICAgICAgICAgdGhpcy50eXBlID0gVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBoYXNlID0gMTgwOyAvL2ZsaXBzIHRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BoYXNlICogKDE4MCAvIE1hdGguUEkpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGhhc2UgPSBwaGFzZSAqIE1hdGguUEkgLyAxODA7XG5cdCAgICAgICAgICAgIC8vcmVzZXQgdGhlIHR5cGVcblx0ICAgICAgICAgICAgdGhpcy50eXBlID0gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBEaXNwb3NlIGFuZCBkaXNjb25uZWN0LlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLk9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fd2F2ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBdWRpb1RvR2FpbiBjb252ZXJ0cyBhbiBpbnB1dCBpbiBBdWRpb1JhbmdlIFstMSwxXSB0byBOb3JtYWxSYW5nZSBbMCwxXS4gXG5cdFx0ICogICAgICAgICBTZWUgVG9uZS5HYWluVG9BdWRpby5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIGEyZyA9IG5ldyBUb25lLkF1ZGlvVG9HYWluKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvVG9HYWluID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtXYXZlU2hhcGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbm9ybSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuICh4ICsgMSkgLyAyO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXVkaW9Ub0dhaW4sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ub0dhaW59IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ub0dhaW4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbm9ybS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbm9ybSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXVkaW9Ub0dhaW47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5aZXJvIG91dHB1dHMgMCdzIGF0IGF1ZGlvLXJhdGUuIFRoZSByZWFzb24gdGhpcyBoYXMgdG8gYmVcblx0XHQgKiAgICAgICAgIGl0J3Mgb3duIGNsYXNzIGlzIHRoYXQgbWFueSBicm93c2VycyBvcHRpbWl6ZSBvdXQgVG9uZS5TaWduYWxcblx0XHQgKiAgICAgICAgIHdpdGggYSB2YWx1ZSBvZiAwIGFuZCB3aWxsIG5vdCBwcm9jZXNzIG5vZGVzIGZ1cnRoZXIgZG93biB0aGUgZ3JhcGguXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLlplcm8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9nYWluID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5nZXRDb25zdGFudCgwKS5jb25uZWN0KHRoaXMuX2dhaW4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuWmVybywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5aZXJvfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5aZXJvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2dhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2dhaW4gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlplcm87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgTEZPIHN0YW5kcyBmb3IgbG93IGZyZXF1ZW5jeSBvc2NpbGxhdG9yLiBUb25lLkxGTyBwcm9kdWNlcyBhbiBvdXRwdXQgc2lnbmFsXG5cdFx0ICogICAgICAgICAgd2hpY2ggY2FuIGJlIGF0dGFjaGVkIHRvIGFuIEF1ZGlvUGFyYW0gb3IgVG9uZS5TaWduYWxcblx0XHQgKiAgICAgICAgICBpbiBvcmRlciB0byBtb2R1bGF0ZSB0aGF0IHBhcmFtZXRlciB3aXRoIGFuIG9zY2lsbGF0b3IuIFRoZSBMRk8gY2FuXG5cdFx0ICogICAgICAgICAgYWxzbyBiZSBzeW5jZWQgdG8gdGhlIHRyYW5zcG9ydCB0byBzdGFydC9zdG9wIGFuZCBjaGFuZ2Ugd2hlbiB0aGUgdGVtcG8gY2hhbmdlcy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeXxPYmplY3R9IFtmcmVxdWVuY3ldIFRoZSBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0aW9uLiBUeXBpY2FsbHksIExGT3Mgd2lsbCBiZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBmcmVxdWVuY3kgcmFuZ2Ugb2YgMC4xIHRvIDEwIGhlcnR6LlxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IG1pbiBUaGUgbWluaW11bSBvdXRwdXQgdmFsdWUgb2YgdGhlIExGTy5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSBtYXggVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIExGTy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbGZvID0gbmV3IFRvbmUuTEZPKFwiNG5cIiwgNDAwLCA0MDAwKTtcblx0XHQgKiBsZm8uY29ubmVjdChmaWx0ZXIuZnJlcXVlbmN5KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdtaW4nLFxuXHQgICAgICAgICAgICAnbWF4J1xuXHQgICAgICAgIF0sIFRvbmUuTEZPKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAndHlwZSc6IG9wdGlvbnMudHlwZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZm8ncyBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fb3NjaWxsYXRvci5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgYW1wbGl0dWRlIG9mIHRoZSBMRk8sIHdoaWNoIGNvbnRyb2xzIHRoZSBvdXRwdXQgcmFuZ2UgYmV0d2VlblxuXHRcdFx0ICogdGhlIG1pbiBhbmQgbWF4IG91dHB1dC4gRm9yIGV4YW1wbGUgaWYgdGhlIG1pbiBpcyAtMTAgYW5kIHRoZSBtYXhcblx0XHRcdCAqIGlzIDEwLCBzZXR0aW5nIHRoZSBhbXBsaXR1ZGUgdG8gMC41IHdvdWxkIG1ha2UgdGhlIExGTyBtb2R1bGF0ZVxuXHRcdFx0ICogYmV0d2VlbiAtNSBhbmQgNS5cblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmFtcGxpdHVkZSA9IHRoaXMuX29zY2lsbGF0b3Iudm9sdW1lO1xuXHQgICAgICAgIHRoaXMuYW1wbGl0dWRlLnVuaXRzID0gVG9uZS5UeXBlLk5vcm1hbFJhbmdlO1xuXHQgICAgICAgIHRoaXMuYW1wbGl0dWRlLnZhbHVlID0gb3B0aW9ucy5hbXBsaXR1ZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHNpZ25hbCB3aGljaCBpcyBvdXRwdXQgd2hlbiB0aGUgTEZPIGlzIHN0b3BwZWRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKDAsIFRvbmUuVHlwZS5BdWRpb1JhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBKdXN0IG91dHB1dHMgemVyb3MuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuWmVyb31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5femVyb3MgPSBuZXcgVG9uZS5aZXJvKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlIHRoYXQgdGhlIExGTyBvdXRwdXRzIHdoZW4gaXQncyBzdG9wcGVkXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvUmFuZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRWYWx1ZSA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQXVkaW9Ub0dhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2EyZyA9IG5ldyBUb25lLkF1ZGlvVG9HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2NhbGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlciA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuU2NhbGUob3B0aW9ucy5taW4sIG9wdGlvbnMubWF4KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgdW5pdHMgb2YgdGhlIExGTyAodXNlZCBmb3IgY29udmVydGluZylcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UeXBlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl91bml0cyA9IFRvbmUuVHlwZS5EZWZhdWx0O1xuXHQgICAgICAgIHRoaXMudW5pdHMgPSBvcHRpb25zLnVuaXRzO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY2hhaW4odGhpcy5fYTJnLCB0aGlzLl9zY2FsZXIpO1xuXHQgICAgICAgIHRoaXMuX3plcm9zLmNvbm5lY3QodGhpcy5fYTJnKTtcblx0ICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLmNvbm5lY3QodGhpcy5fYTJnKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdhbXBsaXR1ZGUnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMucGhhc2UgPSBvcHRpb25zLnBoYXNlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTEZPLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAnbWF4JzogMSxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdmcmVxdWVuY3knOiAnNG4nLFxuXHQgICAgICAgICdhbXBsaXR1ZGUnOiAxLFxuXHQgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5EZWZhdWx0XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBMRk8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIExGTyB3aWxsIHN0YXJ0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC5zZXRWYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBMRk8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIExGTyB3aWxsIHN0b3Bcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwuc2V0VmFsdWVBdFRpbWUodGhpcy5fc3RvcHBlZFZhbHVlLCB0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN5bmMgdGhlIHN0YXJ0L3N0b3AvcGF1c2UgdG8gdGhlIHRyYW5zcG9ydFxuXHRcdCAqICBhbmQgdGhlIGZyZXF1ZW5jeSB0byB0aGUgYnBtIG9mIHRoZSB0cmFuc3BvcnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIGxmby5mcmVxdWVuY3kudmFsdWUgPSBcIjhuXCI7XG5cdFx0ICogIGxmby5zeW5jKCkuc3RhcnQoMClcblx0XHQgKiAgLy90aGUgcmF0ZSBvZiB0aGUgTEZPIHdpbGwgYWx3YXlzIGJlIGFuIGVpZ2h0aCBub3RlLFxuXHRcdCAqICAvL2V2ZW4gYXMgdGhlIHRlbXBvIGNoYW5nZXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3luYygpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3luY0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB1bnN5bmMgdGhlIExGTyBmcm9tIHRyYW5zcG9ydCBjb250cm9sXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnVuc3luYygpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudW5zeW5jRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbml1bXVtIG91dHB1dCBvZiB0aGUgTEZPLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ21pbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RvVW5pdHModGhpcy5fc2NhbGVyLm1pbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgbWluID0gdGhpcy5fZnJvbVVuaXRzKG1pbik7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlci5taW4gPSBtaW47XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSBvdXRwdXQgb2YgdGhlIExGTy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtYXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICdtYXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90b1VuaXRzKHRoaXMuX3NjYWxlci5tYXgpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWF4KSB7XG5cdCAgICAgICAgICAgIG1heCA9IHRoaXMuX2Zyb21Vbml0cyhtYXgpO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZXIubWF4ID0gbWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3I6IHNpbmUsIHNxdWFyZSwgc2F3dG9vdGgsIHRyaWFuZ2xlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wcGVkVmFsdWUgPSB0aGlzLl9vc2NpbGxhdG9yLl9nZXRJbml0aWFsVmFsdWUoKTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC52YWx1ZSA9IHRoaXMuX3N0b3BwZWRWYWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgTEZPLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wcGVkVmFsdWUgPSB0aGlzLl9vc2NpbGxhdG9yLl9nZXRJbml0aWFsVmFsdWUoKTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC52YWx1ZSA9IHRoaXMuX3N0b3BwZWRWYWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvdXRwdXQgdW5pdHMgb2YgdGhlIExGTy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogQHR5cGUge1RvbmUuVHlwZX1cblx0XHQgKiBAbmFtZSB1bml0c1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ3VuaXRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdW5pdHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgdmFyIGN1cnJlbnRNaW4gPSB0aGlzLm1pbjtcblx0ICAgICAgICAgICAgdmFyIGN1cnJlbnRNYXggPSB0aGlzLm1heDtcblx0ICAgICAgICAgICAgLy9jb252ZXJ0IHRoZSBtaW4gYW5kIHRoZSBtYXhcblx0ICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB2YWw7XG5cdCAgICAgICAgICAgIHRoaXMubWluID0gY3VycmVudE1pbjtcblx0ICAgICAgICAgICAgdGhpcy5tYXggPSBjdXJyZW50TWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5zdGF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb25uZWN0IHRoZSBvdXRwdXQgb2YgdGhlIExGTyB0byBhbiBBdWRpb1BhcmFtLCBBdWRpb05vZGUsIG9yIFRvbmUgTm9kZS5cblx0XHQgKiAgVG9uZS5MRk8gd2lsbCBhdXRvbWF0aWNhbGx5IGNvbnZlcnQgdG8gdGhlIGRlc3RpbmF0aW9uIHVuaXRzIG9mIHRoZVxuXHRcdCAqICB3aWxsIGdldCB0aGUgdW5pdHMgZnJvbSB0aGUgY29ubmVjdGVkIG5vZGUuXG5cdFx0ICogIEBwYXJhbSAge1RvbmUgfCBBdWRpb1BhcmFtIHwgQXVkaW9Ob2RlfSBub2RlXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TnVtPTBdIG9wdGlvbmFsbHkgd2hpY2ggb3V0cHV0IHRvIGNvbm5lY3QgZnJvbVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW2lucHV0TnVtPTBdIG9wdGlvbmFsbHkgd2hpY2ggaW5wdXQgdG8gY29ubmVjdCB0b1xuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MRk99IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICBpZiAobm9kZS5jb25zdHJ1Y3RvciA9PT0gVG9uZS5TaWduYWwgfHwgbm9kZS5jb25zdHJ1Y3RvciA9PT0gVG9uZS5QYXJhbSkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnZlcnQgPSBub2RlLmNvbnZlcnQ7XG5cdCAgICAgICAgICAgIHRoaXMudW5pdHMgPSBub2RlLnVuaXRzO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgcHJpdmF0ZSBtZXRob2QgYm9ycm93ZWQgZnJvbSBQYXJhbSBjb252ZXJ0c1xuXHRcdCAqICB1bml0cyBmcm9tIHRoZWlyIGRlc3RpbmF0aW9uIHZhbHVlXG5cdFx0ICogIEBmdW5jdGlvblxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLl9mcm9tVW5pdHMgPSBUb25lLlBhcmFtLnByb3RvdHlwZS5fZnJvbVVuaXRzO1xuXHQgICAgLyoqXG5cdFx0ICogIHByaXZhdGUgbWV0aG9kIGJvcnJvd2VkIGZyb20gUGFyYW0gY29udmVydHNcblx0XHQgKiAgdW5pdHMgdG8gdGhlaXIgZGVzdGluYXRpb24gdmFsdWVcblx0XHQgKiAgQGZ1bmN0aW9uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuX3RvVW5pdHMgPSBUb25lLlBhcmFtLnByb3RvdHlwZS5fdG9Vbml0cztcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNjb25uZWN0IGFuZCBkaXNwb3NlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdhbXBsaXR1ZGUnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3plcm9zLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl96ZXJvcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2NhbGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2EyZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYTJnID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5hbXBsaXR1ZGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkxGTztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTGltaXRlciB3aWxsIGxpbWl0IHRoZSBsb3VkbmVzcyBvZiBhbiBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogICAgICAgICBJdCBpcyBjb21wb3NlZCBvZiBhIFRvbmUuQ29tcHJlc3NvciB3aXRoIGEgZmFzdCBhdHRhY2tcblx0XHQgKiAgICAgICAgIGFuZCByZWxlYXNlLiBMaW1pdGVycyBhcmUgY29tbW9ubHkgdXNlZCB0byBzYWZlZ3VhcmQgYWdhaW5zdFxuXHRcdCAqICAgICAgICAgc2lnbmFsIGNsaXBwaW5nLiBVbmxpa2UgYSBjb21wcmVzc29yLCBsaW1pdGVycyBkbyBub3QgcHJvdmlkZVxuXHRcdCAqICAgICAgICAgc21vb3RoIGdhaW4gcmVkdWN0aW9uIGFuZCBhbG1vc3QgY29tcGxldGVseSBwcmV2ZW50XG5cdFx0ICogICAgICAgICBhZGRpdGlvbmFsIGdhaW4gYWJvdmUgdGhlIHRocmVzaG9sZC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdGhyZXNob2xkIFRoZSB0aGVzaG9sZCBhYm92ZSB3aGljaCB0aGUgbGltaXRpbmcgaXMgYXBwbGllZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIGxpbWl0ZXIgPSBuZXcgVG9uZS5MaW1pdGVyKC02KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTGltaXRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3RocmVzaG9sZCddLCBUb25lLkxpbWl0ZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGNvbXByZXNzb3Jcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuQ29tcHJlc3Nvcih7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAwMSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4wMDEsXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnOiBvcHRpb25zLnRocmVzaG9sZFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHRocmVzaG9sZCBvZiBvZiB0aGUgbGltaXRlclxuXHRcdFx0ICogQHR5cGUge0RlY2liZWx9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnRocmVzaG9sZCA9IHRoaXMuX2NvbXByZXNzb3IudGhyZXNob2xkO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd0aHJlc2hvbGQnKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkxpbWl0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZVxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MaW1pdGVyLmRlZmF1bHRzID0geyAndGhyZXNob2xkJzogLTEyIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxpbWl0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTGltaXRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd0aHJlc2hvbGQnKTtcblx0ICAgICAgICB0aGlzLnRocmVzaG9sZCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTGltaXRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTG93cGFzcyBpcyBhIGxvd3Bhc3MgZmVlZGJhY2sgY29tYiBmaWx0ZXIuIEl0IGlzIHNpbWlsYXIgdG9cblx0XHQgKiAgICAgICAgIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyLCBidXQgaW5jbHVkZXMgYSBsb3dwYXNzIGZpbHRlci5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZGVsYXlUaW1lXSBUaGUgZGVsYXkgdGltZSBvZiB0aGUgY29tYiBmaWx0ZXJcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZT19IHJlc29uYW5jZSBUaGUgcmVzb25hbmNlIChmZWVkYmFjaykgb2YgdGhlIGNvbWIgZmlsdGVyXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5PX0gZGFtcGVuaW5nIFRoZSBjdXRvZmYgb2YgdGhlIGxvd3Bhc3MgZmlsdGVyIGRhbXBlbnMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbCBhcyBpdCBpcyBmZWRiYWNrLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb3dwYXNzQ29tYkZpbHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZydcblx0ICAgICAgICBdLCBUb25lLkxvd3Bhc3NDb21iRmlsdGVyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtEZWxheU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLkRlbGF5KG9wdGlvbnMuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVsYXlUaW1lIG9mIHRoZSBjb21iIGZpbHRlci5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IHRoaXMuX2RlbGF5LmRlbGF5VGltZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbG93cGFzcyBmaWx0ZXJcblx0XHRcdCAqICBAdHlwZSAge0JpcXVhZEZpbHRlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICB0aGlzLl9sb3dwYXNzLlEudmFsdWUgPSAtMy4wMTAyOTk5NTY2Mzk4MTI1O1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MudHlwZSA9ICdsb3dwYXNzJztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGFtcGVuaW5nIGNvbnRyb2wgb2YgdGhlIGZlZWRiYWNrXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fbG93cGFzcy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5GcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IG9wdGlvbnMuZGFtcGVuaW5nXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGZlZWRiYWNrIGdhaW5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFjayA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5yZXNvbmFuY2UsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBmZWVkYmFjayBvZiB0aGUgZGVsYXllZCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gdGhpcy5fZmVlZGJhY2suZ2Fpbjtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fZGVsYXkuY2hhaW4odGhpcy5fbG93cGFzcywgdGhpcy5fZmVlZGJhY2ssIHRoaXMuX2RlbGF5KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnLFxuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkxvd3Bhc3NDb21iRmlsdGVyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb3dwYXNzQ29tYkZpbHRlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMC4xLFxuXHQgICAgICAgICdyZXNvbmFuY2UnOiAwLjUsXG5cdCAgICAgICAgJ2RhbXBlbmluZyc6IDMwMDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxvd3Bhc3NDb21iRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxvd3Bhc3NDb21iRmlsdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJyxcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJlc29uYW5jZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFjayA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTG93cGFzc0NvbWJGaWx0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5NZXJnZSBicmluZ3MgdHdvIHNpZ25hbHMgaW50byB0aGUgbGVmdCBhbmQgcmlnaHRcblx0XHQgKiAgICAgICAgICBjaGFubmVscyBvZiBhIHNpbmdsZSBzdGVyZW8gY2hhbm5lbC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtZXJnZSA9IG5ldyBUb25lLk1lcmdlKCkudG9NYXN0ZXIoKTtcblx0XHQgKiAvL3JvdXRpbmcgYSBzaW5lIHRvbmUgaW4gdGhlIGxlZnQgY2hhbm5lbFxuXHRcdCAqIC8vYW5kIG5vaXNlIGluIHRoZSByaWdodCBjaGFubmVsXG5cdFx0ICogdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS5jb25uZWN0KG1lcmdlLmxlZnQpO1xuXHRcdCAqIHZhciBub2lzZSA9IG5ldyBUb25lLk5vaXNlKCkuY29ubmVjdChtZXJnZS5yaWdodCk7XG5cdFx0ICogLy9zdGFydGluZyBvdXIgb3NjaWxsYXRvcnNcblx0XHQgKiBub2lzZS5zdGFydCgpO1xuXHRcdCAqIG9zYy5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXJnZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbGVmdCBpbnB1dCBjaGFubmVsLlxuXHRcdFx0ICogIEFsaWFzIGZvciA8Y29kZT5pbnB1dFswXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxlZnQgPSB0aGlzLmlucHV0WzBdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByaWdodCBpbnB1dCBjaGFubmVsLlxuXHRcdFx0ICogIEFsaWFzIGZvciA8Y29kZT5pbnB1dFsxXTwvY29kZT4uXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yaWdodCA9IHRoaXMuaW5wdXRbMV0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1lcmdlciBub2RlIGZvciB0aGUgdHdvIGNoYW5uZWxzXG5cdFx0XHQgKiAgQHR5cGUge0NoYW5uZWxNZXJnZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tZXJnZXIgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVDaGFubmVsTWVyZ2VyKDIpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmxlZnQuY29ubmVjdCh0aGlzLl9tZXJnZXIsIDAsIDApO1xuXHQgICAgICAgIHRoaXMucmlnaHQuY29ubmVjdCh0aGlzLl9tZXJnZXIsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMubGVmdC5jaGFubmVsQ291bnQgPSAxO1xuXHQgICAgICAgIHRoaXMucmlnaHQuY2hhbm5lbENvdW50ID0gMTtcblx0ICAgICAgICB0aGlzLmxlZnQuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgdGhpcy5yaWdodC5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1lcmdlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1lcmdlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1lcmdlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5sZWZ0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmxlZnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmlnaHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21lcmdlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2VyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NZXJnZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk1ldGVyIGdldHMgdGhlIFtSTVNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Jvb3RfbWVhbl9zcXVhcmUpXG5cdFx0ICogICAgICAgICAgb2YgYW4gaW5wdXQgc2lnbmFsIHdpdGggc29tZSBhdmVyYWdpbmcgYXBwbGllZC4gSXQgY2FuIGFsc28gZ2V0IHRoZSByYXdcblx0XHQgKiAgICAgICAgICB2YWx1ZSBvZiB0aGUgaW5wdXQgc2lnbmFsLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBzbW9vdGhpbmcgVGhlIGFtb3VudCBvZiBzbW9vdGhpbmcgYXBwbGllZCBiZXR3ZWVuIGZyYW1lcy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbWV0ZXIgPSBuZXcgVG9uZS5NZXRlcigpO1xuXHRcdCAqIHZhciBtaWMgPSBuZXcgVG9uZS5Vc2VyTWVkaWEoKS5vcGVuKCk7XG5cdFx0ICogLy9jb25uZWN0IG1pYyB0byB0aGUgbWV0ZXJcblx0XHQgKiBtaWMuY29ubmVjdChtZXRlcik7XG5cdFx0ICogLy90aGUgY3VycmVudCBsZXZlbCBvZiB0aGUgbWljIGlucHV0IGluIGRlY2liZWxzXG5cdFx0ICogdmFyIGxldmVsID0gbWV0ZXIuZ2V0VmFsdWUoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydzbW9vdGhpbmcnXSwgVG9uZS5NZXRlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW5hbHlzZXIgbm9kZSB3aGljaCBjb21wdXRlcyB0aGUgbGV2ZWxzLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkFuYWx5c2VyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5fYW5hbHlzZXIgPSBuZXcgVG9uZS5BbmFseXNlcignd2F2ZWZvcm0nLCAxMDI0KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGNhcnJ5b3ZlciBiZXR3ZWVuIHRoZSBjdXJyZW50IGFuZCBsYXN0IGZyYW1lLlxuXHRcdFx0ICogIE9ubHkgYXBwbGllZCBtZXRlciBmb3IgXCJsZXZlbFwiIHR5cGUuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNtb290aGluZyA9IG9wdGlvbnMuc21vb3RoaW5nO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWV0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIuZGVmYXVsdHMgPSB7ICdzbW9vdGhpbmcnOiAwLjggfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGN1cnJlbnQgZGVjaWJlbCB2YWx1ZSBvZiB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0ICogIEByZXR1cm5zIHtEZWNpYmVsc31cblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIucHJvdG90eXBlLmdldExldmVsID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLnR5cGUgPSAnZmZ0Jztcblx0ICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy5fYW5hbHlzZXIuZ2V0VmFsdWUoKTtcblx0ICAgICAgICB2YXIgb2Zmc2V0ID0gMjg7XG5cdCAgICAgICAgLy8gbm9ybWFsaXplcyBtb3N0IHNpZ25hbCBsZXZlbHNcblx0ICAgICAgICAvLyBUT0RPOiBjb21wdXRlIGxvdWRuZXNzIGZyb20gRkZUXG5cdCAgICAgICAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KHRoaXMsIHZhbHVlcykgKyBvZmZzZXQ7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgc2lnbmFsIHZhbHVlIG9mIHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHQgKiAgQHJldHVybnMge051bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLnR5cGUgPSAnd2F2ZWZvcm0nO1xuXHQgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuX2FuYWx5c2VyLmdldFZhbHVlKCk7XG5cdCAgICAgICAgcmV0dXJuIHZhbHVlWzBdO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEEgdmFsdWUgZnJvbSAwIC0+IDEgd2hlcmUgMCByZXByZXNlbnRzIG5vIHRpbWUgYXZlcmFnaW5nIHdpdGggdGhlIGxhc3QgYW5hbHlzaXMgZnJhbWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTWV0ZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBzbW9vdGhpbmdcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1ldGVyLnByb3RvdHlwZSwgJ3Ntb290aGluZycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLnNtb290aGluZztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5zbW9vdGhpbmcgPSB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1ldGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NZXRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKlx0QGNsYXNzICBUb25lLlNwbGl0IHNwbGl0cyBhbiBpbmNvbWluZyBzaWduYWwgaW50byBsZWZ0IGFuZCByaWdodCBjaGFubmVscy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzcGxpdCA9IG5ldyBUb25lLlNwbGl0KCk7XG5cdFx0ICogc3RlcmVvU2lnbmFsLmNvbm5lY3Qoc3BsaXQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TcGxpdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygwLCAyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7Q2hhbm5lbFNwbGl0dGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUNoYW5uZWxTcGxpdHRlcigyKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5jaGFubmVsQ291bnQgPSAyO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIExlZnQgY2hhbm5lbCBvdXRwdXQuXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPm91dHB1dFswXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sZWZ0ID0gdGhpcy5vdXRwdXRbMF0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgUmlnaHQgY2hhbm5lbCBvdXRwdXQuXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPm91dHB1dFsxXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yaWdodCA9IHRoaXMub3V0cHV0WzFdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5jb25uZWN0KHRoaXMubGVmdCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuY29ubmVjdCh0aGlzLnJpZ2h0LCAxLCAwKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNwbGl0LCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNwbGl0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNwbGl0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMubGVmdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5sZWZ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJpZ2h0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3BsaXQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBNaWQvU2lkZSBwcm9jZXNzaW5nIHNlcGFyYXRlcyB0aGUgdGhlICdtaWQnIHNpZ25hbFxuXHRcdCAqICAgICAgICAgKHdoaWNoIGNvbWVzIG91dCBvZiBib3RoIHRoZSBsZWZ0IGFuZCB0aGUgcmlnaHQgY2hhbm5lbClcblx0XHQgKiAgICAgICAgIGFuZCB0aGUgJ3NpZGUnICh3aGljaCBvbmx5IGNvbWVzIG91dCBvZiB0aGUgdGhlIHNpZGUgY2hhbm5lbHMpLiA8YnI+PGJyPlxuXHRcdCAqICAgICAgICAgPGNvZGU+XG5cdFx0ICogICAgICAgICBNaWQgPSAoTGVmdCtSaWdodCkvc3FydCgyKTsgICAvLyBvYnRhaW4gbWlkLXNpZ25hbCBmcm9tIGxlZnQgYW5kIHJpZ2h0PGJyPlxuXHRcdCAqICAgICAgICAgU2lkZSA9IChMZWZ0LVJpZ2h0KS9zcXJ0KDIpOyAgIC8vIG9idGFpbiBzaWRlLXNpZ25hbCBmcm9tIGxlZnQgYW5kIHJpZ2g8YnI+XG5cdFx0ICogICAgICAgICA8L2NvZGU+XG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZVNwbGl0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDAsIDIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNwbGl0IHRoZSBpbmNvbWluZyBzaWduYWwgaW50byBsZWZ0IGFuZCByaWdodCBjaGFubmVsc1xuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5TcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3BsaXQgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuU3BsaXQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkIHNlbmQuIENvbm5lY3QgdG8gbWlkIHByb2Nlc3NpbmcuIEFsaWFzIGZvclxuXHRcdFx0ICogIDxjb2RlPm91dHB1dFswXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BZGR9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRBZGQgPSBuZXcgVG9uZS5BZGQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIE11bHRpcGx5IHRoZSBfbWlkQWRkIGJ5IHNxcnQoMS8yKVxuXHRcdFx0ICogQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IHRoaXMub3V0cHV0WzBdID0gbmV3IFRvbmUuTXVsdGlwbHkoTWF0aC5TUVJUMV8yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lkZSBvdXRwdXQuIENvbm5lY3QgdG8gc2lkZSBwcm9jZXNzaW5nLiBBbHNvIE91dHB1dCAxXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaWRlU3VidHJhY3QgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogTXVsdGlwbHkgdGhlIF9taWRBZGQgYnkgc3FydCgxLzIpXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc2lkZSA9IHRoaXMub3V0cHV0WzFdID0gbmV3IFRvbmUuTXVsdGlwbHkoTWF0aC5TUVJUMV8yKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5jb25uZWN0KHRoaXMuX21pZEFkZCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQuY29ubmVjdCh0aGlzLl9taWRBZGQsIDEsIDEpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmNvbm5lY3QodGhpcy5fc2lkZVN1YnRyYWN0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5jb25uZWN0KHRoaXMuX3NpZGVTdWJ0cmFjdCwgMSwgMSk7XG5cdCAgICAgICAgdGhpcy5fbWlkQWRkLmNvbm5lY3QodGhpcy5taWQpO1xuXHQgICAgICAgIHRoaXMuX3NpZGVTdWJ0cmFjdC5jb25uZWN0KHRoaXMuc2lkZSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NaWRTaWRlU3BsaXQsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NaWRTaWRlU3BsaXR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZVNwbGl0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5taWQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubWlkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnNpZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuc2lkZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkQWRkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRBZGQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NpZGVTdWJ0cmFjdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2lkZVN1YnRyYWN0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1pZFNpZGVTcGxpdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE1pZC9TaWRlIHByb2Nlc3Npbmcgc2VwYXJhdGVzIHRoZSB0aGUgJ21pZCcgc2lnbmFsXG5cdFx0ICogICAgICAgICAod2hpY2ggY29tZXMgb3V0IG9mIGJvdGggdGhlIGxlZnQgYW5kIHRoZSByaWdodCBjaGFubmVsKVxuXHRcdCAqICAgICAgICAgYW5kIHRoZSAnc2lkZScgKHdoaWNoIG9ubHkgY29tZXMgb3V0IG9mIHRoZSB0aGUgc2lkZSBjaGFubmVscykuXG5cdFx0ICogICAgICAgICBNaWRTaWRlTWVyZ2UgbWVyZ2VzIHRoZSBtaWQgYW5kIHNpZGUgc2lnbmFsIGFmdGVyIHRoZXkndmUgYmVlbiBzZXBlcmF0ZWRcblx0XHQgKiAgICAgICAgIGJ5IFRvbmUuTWlkU2lkZVNwbGl0Ljxicj48YnI+XG5cdFx0ICogICAgICAgICA8Y29kZT5cblx0XHQgKiAgICAgICAgIExlZnQgPSAoTWlkK1NpZGUpL3NxcnQoMik7ICAgLy8gb2J0YWluIGxlZnQgc2lnbmFsIGZyb20gbWlkIGFuZCBzaWRlPGJyPlxuXHRcdCAqICAgICAgICAgUmlnaHQgPSAoTWlkLVNpZGUpL3NxcnQoMik7ICAgLy8gb2J0YWluIHJpZ2h0IHNpZ25hbCBmcm9tIG1pZCBhbmQgc2lkZTxicj5cblx0XHQgKiAgICAgICAgIDwvY29kZT5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlTWVyZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZCBzaWduYWwgaW5wdXQuIEFsaWFzIGZvclxuXHRcdFx0ICogIDxjb2RlPmlucHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSB0aGlzLmlucHV0WzBdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHJlY29tYmluZSB0aGUgbWlkL3NpZGUgaW50byBMZWZ0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQWRkfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZWZ0ID0gbmV3IFRvbmUuQWRkKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBNdWx0aXBseSB0aGUgbGVmdCBieSBzcXJ0KDEvMilcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29MZWZ0ID0gbmV3IFRvbmUuTXVsdGlwbHkoTWF0aC5TUVJUMV8yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lkZSBzaWduYWwgaW5wdXQuIEFsaWFzIGZvclxuXHRcdFx0ICogIDxjb2RlPmlucHV0WzFdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zaWRlID0gdGhpcy5pbnB1dFsxXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICByZWNvbWJpbmUgdGhlIG1pZC9zaWRlIGludG8gUmlnaHRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmlnaHQgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogTXVsdGlwbHkgdGhlIHJpZ2h0IGJ5IHNxcnQoMS8yKVxuXHRcdFx0ICogQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aW1lc1R3b1JpZ2h0ID0gbmV3IFRvbmUuTXVsdGlwbHkoTWF0aC5TUVJUMV8yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBNZXJnZSB0aGUgbGVmdC9yaWdodCBzaWduYWwgYmFjayBpbnRvIGEgc3RlcmVvIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NZXJnZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgdGhpcy5taWQuY29ubmVjdCh0aGlzLl9sZWZ0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLnNpZGUuY29ubmVjdCh0aGlzLl9sZWZ0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLm1pZC5jb25uZWN0KHRoaXMuX3JpZ2h0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLnNpZGUuY29ubmVjdCh0aGlzLl9yaWdodCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fbGVmdC5jb25uZWN0KHRoaXMuX3RpbWVzVHdvTGVmdCk7XG5cdCAgICAgICAgdGhpcy5fcmlnaHQuY29ubmVjdCh0aGlzLl90aW1lc1R3b1JpZ2h0KTtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b0xlZnQuY29ubmVjdCh0aGlzLl9tZXJnZSwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29SaWdodC5jb25uZWN0KHRoaXMuX21lcmdlLCAwLCAxKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1pZFNpZGVNZXJnZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1pZFNpZGVNZXJnZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlTWVyZ2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5zaWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZWZ0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZWZ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b0xlZnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvTGVmdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmlnaHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b1JpZ2h0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b1JpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tZXJnZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1pZFNpZGVNZXJnZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTWlkU2lkZUNvbXByZXNzb3IgYXBwbGllcyB0d28gZGlmZmVyZW50IGNvbXByZXNzb3JzIHRvIHRoZSBtaWRcblx0XHQgKiAgICAgICAgIGFuZCBzaWRlIHNpZ25hbCBjb21wb25lbnRzLiBTZWUgVG9uZS5NaWRTaWRlU3BsaXQuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBUaGUgb3B0aW9ucyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlIG1pZCBhbmQgc2lkZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc29ycy5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVDb21wcmVzc29yID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5NaWRTaWRlQ29tcHJlc3Nvci5kZWZhdWx0cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1pZC9zaWRlIHNwbGl0XG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk1pZFNpZGVTcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk1pZFNpZGVTcGxpdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtaWQvc2lkZSByZWNvbWJpbmF0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk1pZFNpZGVNZXJnZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5NaWRTaWRlTWVyZ2UoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY29tcHJlc3NvciBhcHBsaWVkIHRvIHRoZSBtaWQgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5taWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjb21wcmVzc29yIGFwcGxpZWQgdG8gdGhlIHNpZGUgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNpZGUgPSBuZXcgVG9uZS5Db21wcmVzc29yKG9wdGlvbnMuc2lkZSk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0Lm1pZC5jaGFpbih0aGlzLm1pZCwgdGhpcy5fbWlkU2lkZU1lcmdlLm1pZCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0LnNpZGUuY2hhaW4odGhpcy5zaWRlLCB0aGlzLl9taWRTaWRlTWVyZ2Uuc2lkZSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ3NpZGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NaWRTaWRlQ29tcHJlc3NvciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVDb21wcmVzc29yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtaWQnOiB7XG5cdCAgICAgICAgICAgICdyYXRpbyc6IDMsXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnOiAtMjQsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC4wMyxcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDIsXG5cdCAgICAgICAgICAgICdrbmVlJzogMTZcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdzaWRlJzoge1xuXHQgICAgICAgICAgICAncmF0aW8nOiA2LFxuXHQgICAgICAgICAgICAndGhyZXNob2xkJzogLTMwLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuMjUsXG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAzLFxuXHQgICAgICAgICAgICAna25lZSc6IDEwXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWlkU2lkZUNvbXByZXNzb3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZUNvbXByZXNzb3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnc2lkZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5zaWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1pZFNpZGVDb21wcmVzc29yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Nb25vIGNvZXJjZXMgdGhlIGluY29taW5nIG1vbm8gb3Igc3RlcmVvIHNpZ25hbCBpbnRvIGEgbW9ubyBzaWduYWxcblx0XHQgKiAgICAgICAgIHdoZXJlIGJvdGggbGVmdCBhbmQgcmlnaHQgY2hhbm5lbHMgaGF2ZSB0aGUgc2FtZSB2YWx1ZS4gVGhpcyBjYW4gYmUgdXNlZnVsXG5cdFx0ICogICAgICAgICBmb3IgW3N0ZXJlbyBpbWFnaW5nXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TdGVyZW9faW1hZ2luZykuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ubyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBtZXJnZSB0aGUgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTWVyZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21lcmdlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5NZXJnZSgpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLl9tZXJnZSwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuX21lcmdlLCAwLCAxKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1vbm8sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1vbm87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIGNvbXByZXNzb3Igd2l0aCBzZXBlcmF0ZSBjb250cm9scyBvdmVyIGxvdy9taWQvaGlnaCBkeW5hbWljc1xuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBsb3cvbWlkL2hpZ2ggY29tcHJlc3NvciBzZXR0aW5ncy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIG11bHRpYmFuZCA9IG5ldyBUb25lLk11bHRpYmFuZENvbXByZXNzb3Ioe1xuXHRcdCAqICBcdFwibG93RnJlcXVlbmN5XCIgOiAyMDAsXG5cdFx0ICogIFx0XCJoaWdoRnJlcXVlbmN5XCIgOiAxMzAwXG5cdFx0ICogIFx0XCJsb3dcIiA6IHtcblx0XHQgKiAgXHRcdFwidGhyZXNob2xkXCIgOiAtMTJcblx0XHQgKiAgXHR9XG5cdFx0ICogIH0pXG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZENvbXByZXNzb3IgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhhcmd1bWVudHMsIFRvbmUuTXVsdGliYW5kQ29tcHJlc3Nvci5kZWZhdWx0cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc3BsaXQgdGhlIGluY29taW5nIHNpZ25hbCBpbnRvIGhpZ2gvbWlkL2xvd1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpYmFuZFNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcGxpdHRlciA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5NdWx0aWJhbmRTcGxpdCh7XG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knOiBvcHRpb25zLmxvd0ZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knOiBvcHRpb25zLmhpZ2hGcmVxdWVuY3lcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBsb3cvbWlkIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IHRoaXMuX3NwbGl0dGVyLmxvd0ZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBtaWQvaGlnaCBjcm9zc292ZXIgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gdGhpcy5fc3BsaXR0ZXIuaGlnaEZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgb3V0cHV0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNvbXByZXNzb3IgYXBwbGllZCB0byB0aGUgbG93IGZyZXF1ZW5jaWVzLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvdyA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5sb3cpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjb21wcmVzc29yIGFwcGxpZWQgdG8gdGhlIG1pZCBmcmVxdWVuY2llcy5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Db21wcmVzc29yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSBuZXcgVG9uZS5Db21wcmVzc29yKG9wdGlvbnMubWlkKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY29tcHJlc3NvciBhcHBsaWVkIHRvIHRoZSBoaWdoIGZyZXF1ZW5jaWVzLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2ggPSBuZXcgVG9uZS5Db21wcmVzc29yKG9wdGlvbnMuaGlnaCk7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBjb21wcmVzc29yXG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIubG93LmNoYWluKHRoaXMubG93LCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIubWlkLmNoYWluKHRoaXMubWlkLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuaGlnaC5jaGFpbih0aGlzLmhpZ2gsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdoaWdoJyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kQ29tcHJlc3Nvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbG93JzogVG9uZS5Db21wcmVzc29yLmRlZmF1bHRzLFxuXHQgICAgICAgICdtaWQnOiBUb25lLkNvbXByZXNzb3IuZGVmYXVsdHMsXG5cdCAgICAgICAgJ2hpZ2gnOiBUb25lLkNvbXByZXNzb3IuZGVmYXVsdHMsXG5cdCAgICAgICAgJ2xvd0ZyZXF1ZW5jeSc6IDI1MCxcblx0ICAgICAgICAnaGlnaEZyZXF1ZW5jeSc6IDIwMDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTXVsdGliYW5kQ29tcHJlc3Nvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmxvdy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGlnaC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubG93ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQgJiYgIXdpbmRvdy5TdGVyZW9QYW5uZXJOb2RlKSB7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBAY2xhc3MgU2hpbW1lZCBTdGVyZW9QYW5uZXJOb2RlXG5cdFx0XHQgKiBAcGFyYW0gIHtBdWRpb0NvbnRleHR9IGNvbnRleHRcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB2YXIgU3RlcmVvUGFubmVyTm9kZSA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgYXVkaW8gY29udGV4dFxuXHRcdFx0XHQgKiBAdHlwZSB7QXVkaW9Db250ZXh0fVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSBsZWZ0L3JpZ2h0IHBhbm5pbmcuIFstMSwgMV1cblx0XHRcdFx0ICogQHR5cGUge0F1ZGlvUmFuZ2V9XG5cdFx0XHRcdCAqIEBzaWduYWxcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMucGFuID0gbmV3IFRvbmUuU2lnbmFsKDAsIFRvbmUuVHlwZS5BdWRpb1JhbmdlKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIEVxdWFsIHBvd2VyIHNjYWxpbmcgb2YgdGhlIHJpZ2h0IGdhaW5cblx0XHRcdFx0ICogQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciByaWdodFdhdmVTaGFwZXIgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBUb25lLmVxdWFsUG93ZXJTY2FsZSgodmFsICsgMSkgLyAyKTtcblx0ICAgICAgICAgICAgfSwgNDA5Nik7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBFcXVhbCBwb3dlciBzY2FsaW5nIG9mIHRoZSBsZWZ0IGdhaW5cblx0XHRcdFx0ICogQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciBsZWZ0V2F2ZVNoYXBlciA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuZXF1YWxQb3dlclNjYWxlKDEgLSAodmFsICsgMSkgLyAyKTtcblx0ICAgICAgICAgICAgfSwgNDA5Nik7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgbGVmdCBnYWluIHZhbHVlXG5cdFx0XHRcdCAqIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgbGVmdEdhaW4gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgcmlnaHQgZ2FpbiB2YWx1ZVxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIHJpZ2h0R2FpbiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFNwbGl0IHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHRcdFx0ICogQHR5cGUge1RvbmUuU3BsaXR9XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgc3BsaXQgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuU3BsaXQoKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIEtlZXBzIHRoZSB3YXZlc2hhcGVycyBmcm9tIG9wdGltaXppbmcgMHNcblx0XHRcdFx0ICogQHR5cGUge1RvbmUuWmVyb31cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciB6ZXJvID0gbmV3IFRvbmUuWmVybygpO1xuXHQgICAgICAgICAgICB6ZXJvLmZhbihyaWdodFdhdmVTaGFwZXIsIGxlZnRXYXZlU2hhcGVyKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIE1lcmdlIHRoZSBvdXRnb2luZyBzaWduYWxcblx0XHRcdFx0ICogQHR5cGUge1RvbmUuTWVyZ2V9XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgbWVyZ2UgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICAgICAgc3BsaXQubGVmdC5jaGFpbihsZWZ0R2FpbiwgbWVyZ2UubGVmdCk7XG5cdCAgICAgICAgICAgIHNwbGl0LnJpZ2h0LmNoYWluKHJpZ2h0R2FpbiwgbWVyZ2UucmlnaHQpO1xuXHQgICAgICAgICAgICB0aGlzLnBhbi5jaGFpbihsZWZ0V2F2ZVNoYXBlciwgbGVmdEdhaW4uZ2Fpbik7XG5cdCAgICAgICAgICAgIHRoaXMucGFuLmNoYWluKHJpZ2h0V2F2ZVNoYXBlciwgcmlnaHRHYWluLmdhaW4pO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgU3RlcmVvUGFubmVyTm9kZS5wcm90b3R5cGUuZGlzY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQuZGlzY29ubmVjdC5hcHBseSh0aGlzLm91dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIFN0ZXJlb1Bhbm5lck5vZGUucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0LmNvbm5lY3QuYXBwbHkodGhpcy5vdXRwdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICAvL2FkZCBpdCB0byB0aGUgQXVkaW9Db250ZXh0XG5cdCAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVTdGVyZW9QYW5uZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgU3RlcmVvUGFubmVyTm9kZSh0aGlzKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlU3RlcmVvUGFubmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFN0ZXJlb1Bhbm5lck5vZGUodGhpcyk7XG5cdCAgICAgICAgfTtcblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlBhbm5lciBpcyBhbiBlcXVhbCBwb3dlciBMZWZ0L1JpZ2h0IFBhbm5lciBhbmQgZG9lcyBub3Rcblx0XHQgKiAgICAgICAgICBzdXBwb3J0IDNELiBQYW5uZXIgdXNlcyB0aGUgU3RlcmVvUGFubmVyTm9kZSB3aGVuIGF2YWlsYWJsZS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbaW5pdGlhbFBhbj0wXSBUaGUgaW5pdGFpbCBwYW5uZXIgdmFsdWUgKGNlbnRlcikuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIC8vcGFuIHRoZSBpbnB1dCBzaWduYWwgaGFyZCByaWdodC5cblx0XHQgKiAgdmFyIHBhbm5lciA9IG5ldyBUb25lLlBhbm5lcigxKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyID0gZnVuY3Rpb24gKGluaXRpYWxQYW4pIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0KiAgdGhlIHBhbm5lciBub2RlXG5cdFx0XHQqICBAdHlwZSB7U3RlcmVvUGFubmVyTm9kZX1cblx0XHRcdCogIEBwcml2YXRlXG5cdFx0XHQqL1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVTdGVyZW9QYW5uZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCogIFRoZSBwYW4gY29udHJvbC4gLTEgPSBoYXJkIGxlZnQsIDEgPSBoYXJkIHJpZ2h0LlxuXHRcdFx0KiAgQHR5cGUge0F1ZGlvUmFuZ2V9XG5cdFx0XHQqICBAc2lnbmFsXG5cdFx0XHQqL1xuXHQgICAgICAgIHRoaXMucGFuID0gdGhpcy5fcGFubmVyLnBhbjtcblx0ICAgICAgICAvL2luaXRpYWwgdmFsdWVcblx0ICAgICAgICB0aGlzLnBhbi52YWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyhpbml0aWFsUGFuLCAwKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgncGFuJyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYW5uZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFubmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdwYW4nKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5wYW4gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBhbm5lcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBIHNwYXRpYWxpemVkIHBhbm5lciBub2RlIHdoaWNoIHN1cHBvcnRzIGVxdWFscG93ZXIgb3IgSFJURiBwYW5uaW5nLlxuXHRcdCAqICAgICAgICAgIFRyaWVzIHRvIG5vcm1hbGl6ZSB0aGUgQVBJIGFjcm9zcyB2YXJpb3VzIGJyb3dzZXJzLiBTZWUgVG9uZS5MaXN0ZW5lclxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBwb3NpdGlvblggVGhlIGluaXRpYWwgeCBwb3NpdGlvbi5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IHBvc2l0aW9uWSBUaGUgaW5pdGlhbCB5IHBvc2l0aW9uLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gcG9zaXRpb25aIFRoZSBpbml0aWFsIHogcG9zaXRpb24uXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNEID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3Bvc2l0aW9uWCcsXG5cdCAgICAgICAgICAgICdwb3NpdGlvblknLFxuXHQgICAgICAgICAgICAncG9zaXRpb25aJ1xuXHQgICAgICAgIF0sIFRvbmUuUGFubmVyM0QpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBhbm5lciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1Bhbm5lck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVQYW5uZXIoKTtcblx0ICAgICAgICAvL3NldCBzb21lIHZhbHVlc1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5wYW5uaW5nTW9kZWwgPSBvcHRpb25zLnBhbm5pbmdNb2RlbDtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIubWF4RGlzdGFuY2UgPSBvcHRpb25zLm1heERpc3RhbmNlO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5kaXN0YW5jZU1vZGVsID0gb3B0aW9ucy5kaXN0YW5jZU1vZGVsO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5jb25lT3V0ZXJHYWluID0gb3B0aW9ucy5jb25lT3V0ZXJHYWluO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5jb25lT3V0ZXJBbmdsZSA9IG9wdGlvbnMuY29uZU91dGVyQW5nbGU7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmNvbmVJbm5lckFuZ2xlID0gb3B0aW9ucy5jb25lSW5uZXJBbmdsZTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIucmVmRGlzdGFuY2UgPSBvcHRpb25zLnJlZkRpc3RhbmNlO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5yb2xsb2ZmRmFjdG9yID0gb3B0aW9ucy5yb2xsb2ZmRmFjdG9yO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGRzIHRoZSBjdXJyZW50IG9yaWVudGF0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBbXG5cdCAgICAgICAgICAgIG9wdGlvbnMub3JpZW50YXRpb25YLFxuXHQgICAgICAgICAgICBvcHRpb25zLm9yaWVudGF0aW9uWSxcblx0ICAgICAgICAgICAgb3B0aW9ucy5vcmllbnRhdGlvblpcblx0ICAgICAgICBdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGRzIHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBbXG5cdCAgICAgICAgICAgIG9wdGlvbnMucG9zaXRpb25YLFxuXHQgICAgICAgICAgICBvcHRpb25zLnBvc2l0aW9uWSxcblx0ICAgICAgICAgICAgb3B0aW9ucy5wb3NpdGlvblpcblx0ICAgICAgICBdO1xuXHQgICAgICAgIC8vIHNldCB0aGUgZGVmYXVsdCBwb3NpdGlvbi9vcmllbnRhdGlvblxuXHQgICAgICAgIHRoaXMub3JpZW50YXRpb25YID0gb3B0aW9ucy5vcmllbnRhdGlvblg7XG5cdCAgICAgICAgdGhpcy5vcmllbnRhdGlvblkgPSBvcHRpb25zLm9yaWVudGF0aW9uWTtcblx0ICAgICAgICB0aGlzLm9yaWVudGF0aW9uWiA9IG9wdGlvbnMub3JpZW50YXRpb25aO1xuXHQgICAgICAgIHRoaXMucG9zaXRpb25YID0gb3B0aW9ucy5wb3NpdGlvblg7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvblkgPSBvcHRpb25zLnBvc2l0aW9uWTtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uWiA9IG9wdGlvbnMucG9zaXRpb25aO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGFubmVyM0QsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZhdWx0cyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb25cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3Bvc2l0aW9uWCc6IDAsXG5cdCAgICAgICAgJ3Bvc2l0aW9uWSc6IDAsXG5cdCAgICAgICAgJ3Bvc2l0aW9uWic6IDAsXG5cdCAgICAgICAgJ29yaWVudGF0aW9uWCc6IDAsXG5cdCAgICAgICAgJ29yaWVudGF0aW9uWSc6IDAsXG5cdCAgICAgICAgJ29yaWVudGF0aW9uWic6IDAsXG5cdCAgICAgICAgJ3Bhbm5pbmdNb2RlbCc6ICdlcXVhbHBvd2VyJyxcblx0ICAgICAgICAnbWF4RGlzdGFuY2UnOiAxMDAwMCxcblx0ICAgICAgICAnZGlzdGFuY2VNb2RlbCc6ICdpbnZlcnNlJyxcblx0ICAgICAgICAnY29uZU91dGVyR2Fpbic6IDAsXG5cdCAgICAgICAgJ2NvbmVPdXRlckFuZ2xlJzogMzYwLFxuXHQgICAgICAgICdjb25lSW5uZXJBbmdsZSc6IDM2MCxcblx0ICAgICAgICAncmVmRGlzdGFuY2UnOiAxLFxuXHQgICAgICAgICdyb2xsb2ZmRmFjdG9yJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSByYW1wIHRpbWUgd2hpY2ggaXMgYXBwbGllZCB0byB0aGUgc2V0VGFyZ2V0QXRUaW1lXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUuX3JhbXBUaW1lQ29uc3RhbnQgPSAwLjAxO1xuXHQgICAgLyoqXG5cdFx0ICogIFNldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBzb3VyY2UgaW4gM2Qgc3BhY2UuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHhcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB6XG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUGFubmVyM0R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QucHJvdG90eXBlLnNldFBvc2l0aW9uID0gZnVuY3Rpb24gKHgsIHksIHopIHtcblx0ICAgICAgICBpZiAodGhpcy5fcGFubmVyLnBvc2l0aW9uWCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLnBvc2l0aW9uWC5zZXRUYXJnZXRBdFRpbWUoeCwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLnBvc2l0aW9uWS5zZXRUYXJnZXRBdFRpbWUoeSwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLnBvc2l0aW9uWi5zZXRUYXJnZXRBdFRpbWUoeiwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIuc2V0UG9zaXRpb24oeCwgeSwgeik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHNvdXJjZSBpbiAzZCBzcGFjZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB5XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHpcblx0XHQgKiAgQHJldHVybiB7VG9uZS5QYW5uZXIzRH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUuc2V0T3JpZW50YXRpb24gPSBmdW5jdGlvbiAoeCwgeSwgeikge1xuXHQgICAgICAgIGlmICh0aGlzLl9wYW5uZXIub3JpZW50YXRpb25YKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIub3JpZW50YXRpb25YLnNldFRhcmdldEF0VGltZSh4LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIub3JpZW50YXRpb25ZLnNldFRhcmdldEF0VGltZSh5LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIub3JpZW50YXRpb25aLnNldFRhcmdldEF0VGltZSh6LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5zZXRPcmllbnRhdGlvbih4LCB5LCB6KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAncG9zaXRpb25YJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblswXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzBdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25ZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdwb3NpdGlvblknLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzFdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMV07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHogcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvblpcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ3Bvc2l0aW9uWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMl0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblsyXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBvcmllbnRhdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIG9yaWVudGF0aW9uWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAnb3JpZW50YXRpb25YJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblswXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzBdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IG9yaWVudGF0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgb3JpZW50YXRpb25ZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdvcmllbnRhdGlvblknLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzFdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMV07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHogb3JpZW50YXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBvcmllbnRhdGlvblpcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ29yaWVudGF0aW9uWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMl0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblsyXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBQcm94eSBhIHByb3BlcnR5IG9uIHRoZSBwYW5uZXIgdG8gYW4gZXhwb3NlZCBwdWJsaWMgcHJvcGVyeVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBwcm9wXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5ID0gZnVuY3Rpb24gKHByb3ApIHtcblx0ICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsIHByb3AsIHtcblx0ICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9wYW5uZXJbcHJvcF0gPSB2YWw7XG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bhbm5lcltwcm9wXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGFubmluZyBtb2RlbC4gRWl0aGVyIFwiZXF1YWxwb3dlclwiIG9yIFwiSFJURlwiLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcGFubmluZ01vZGVsXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdwYW5uaW5nTW9kZWwnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBBIHJlZmVyZW5jZSBkaXN0YW5jZSBmb3IgcmVkdWNpbmcgdm9sdW1lIGFzIHNvdXJjZSBtb3ZlIGZ1cnRoZXIgZnJvbSB0aGUgbGlzdGVuZXJcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHJlZkRpc3RhbmNlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdyZWZEaXN0YW5jZScpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlc2NyaWJlcyBob3cgcXVpY2tseSB0aGUgdm9sdW1lIGlzIHJlZHVjZWQgYXMgc291cmNlIG1vdmVzIGF3YXkgZnJvbSBsaXN0ZW5lci5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHJvbGxvZmZGYWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ3JvbGxvZmZGYWN0b3InKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGlzdGFuY2UgbW9kZWwgdXNlZCBieSwgIFwibGluZWFyXCIsIFwiaW52ZXJzZVwiLCBvciBcImV4cG9uZW50aWFsXCIuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBkaXN0YW5jZU1vZGVsXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdkaXN0YW5jZU1vZGVsJyk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGFuZ2xlLCBpbiBkZWdyZWVzLCBpbnNpZGUgb2Ygd2hpY2ggdGhlcmUgd2lsbCBiZSBubyB2b2x1bWUgcmVkdWN0aW9uXG5cdFx0ICogIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgY29uZUlubmVyQW5nbGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ2NvbmVJbm5lckFuZ2xlJyk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGFuZ2xlLCBpbiBkZWdyZWVzLCBvdXRzaWRlIG9mIHdoaWNoIHRoZSB2b2x1bWUgd2lsbCBiZSByZWR1Y2VkXG5cdFx0ICogIHRvIGEgY29uc3RhbnQgdmFsdWUgb2YgY29uZU91dGVyR2FpblxuXHRcdCAqICBAdHlwZSB7RGVncmVlc31cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIGNvbmVPdXRlckFuZ2xlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdjb25lT3V0ZXJBbmdsZScpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBnYWluIG91dHNpZGUgb2YgdGhlIGNvbmVPdXRlckFuZ2xlXG5cdFx0ICogIEB0eXBlIHtHYWlufVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgY29uZU91dGVyR2FpblxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgnY29uZU91dGVyR2FpbicpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBtYXhpbXVtIGRpc3RhbmNlIGJldHdlZW4gc291cmNlIGFuZCBsaXN0ZW5lcixcblx0XHQgKiAgYWZ0ZXIgd2hpY2ggdGhlIHZvbHVtZSB3aWxsIG5vdCBiZSByZWR1Y2VkIGFueSBmdXJ0aGVyLlxuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBtYXhEaXN0YW5jZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgnbWF4RGlzdGFuY2UnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFubmVyM0R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYW5uZXIzRDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGFuVm9sIGlzIGEgVG9uZS5QYW5uZXIgYW5kIFRvbmUuVm9sdW1lIGluIG9uZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvUmFuZ2V9IHBhbiB0aGUgaW5pdGlhbCBwYW5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHZvbHVtZSBUaGUgb3V0cHV0IHZvbHVtZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3BhbiB0aGUgaW5jb21pbmcgc2lnbmFsIGxlZnQgYW5kIGRyb3AgdGhlIHZvbHVtZVxuXHRcdCAqIHZhciBwYW5Wb2wgPSBuZXcgVG9uZS5QYW5Wb2woLTAuMjUsIC0xMik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhblZvbCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdwYW4nLFxuXHQgICAgICAgICAgICAndm9sdW1lJ1xuXHQgICAgICAgIF0sIFRvbmUuUGFuVm9sKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwYW5uaW5nIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5QYW5uZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5QYW5uZXIob3B0aW9ucy5wYW4pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBML1IgcGFubmluZyBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtBdWRpb1JhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucGFuID0gdGhpcy5fcGFubmVyLnBhbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdm9sdW1lIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Wb2x1bWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKG9wdGlvbnMudm9sdW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdm9sdW1lIGNvbnRyb2wgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiAgQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmNvbm5lY3QodGhpcy5fdm9sdW1lKTtcblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAncGFuJyxcblx0ICAgICAgICAgICAgJ3ZvbHVtZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhblZvbCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFuVm9sLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwYW4nOiAwLFxuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBNdXRlL3VubXV0ZSB0aGUgdm9sdW1lXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGFuVm9sI1xuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhblZvbC5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1lLm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3ZvbHVtZS5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYW5Wb2x9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFuVm9sLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAncGFuJyxcblx0ICAgICAgICAgICAgJ3ZvbHVtZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5wYW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGFuVm9sO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuU29sbyBsZXRzIHlvdSBpc29sYXRlIGEgc3BlY2lmaWMgYXVkaW8gc3RyZWFtLiBXaGVuXG5cdFx0ICogICAgICAgICBhbiBpbnN0YW5jZSBpcyBzZXQgdG8gYHNvbG89dHJ1ZWAsIGl0IHdpbGwgbXV0ZSBhbGwgb3RoZXIgaW5zdGFuY2VzLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNvbG9BID0gbmV3IFRvbmUuU29sbygpXG5cdFx0ICogdmFyIHNvbG9CID0gbmV3IFRvbmUuU29sbygpXG5cdFx0ICogc29sb0Euc29sbyA9IHRydWVcblx0XHQgKiAvL25vIGF1ZGlvIHdpbGwgcGFzcyB0aHJvdWdoIHNvbG9CXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydzb2xvJ10sIFRvbmUuU29sbyk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgaW5wdXQgYW5kIG91dHB1dCBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBib3VuZCBfc29sb2VkIG1ldGhvZFxuXHRcdFx0ICogIEB0eXBlICB7RnVuY3Rpb259XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvbG9CaW5kID0gdGhpcy5fc29sb2VkLmJpbmQodGhpcyk7XG5cdCAgICAgICAgLy9saXN0ZW4gZm9yIHNvbG8gZXZlbnRzIGNsYXNzLXdpZGUuXG5cdCAgICAgICAgdGhpcy5jb250ZXh0Lm9uKCdzb2xvJywgdGhpcy5fc29sb0JpbmQpO1xuXHQgICAgICAgIC8vc2V0IGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMuc29sbyA9IG9wdGlvbnMuc29sbztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNvbG8sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5kZWZhdWx0cyA9IHsgc29sbzogZmFsc2UgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJc29sYXRlcyB0aGlzIGluc3RhbmNlIGFuZCBtdXRlcyBhbGwgb3RoZXIgaW5zdGFuY2VzIG9mIFRvbmUuU29sby5cblx0XHQgKiAgT25seSBvbmUgaW5zdGFuY2UgY2FuIGJlIHNvbG9lZCBhdCBhIHRpbWUuIEEgc29sb2VkXG5cdFx0ICogIGluc3RhbmNlIHdpbGwgcmVwb3J0IGBzb2xvPWZhbHNlYCB3aGVuIGFub3RoZXIgaW5zdGFuY2UgaXMgc29sb2VkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Tb2xvI1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiAgQG5hbWUgc29sb1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU29sby5wcm90b3R5cGUsICdzb2xvJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNTb2xvZWQoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNvbG8pIHtcblx0ICAgICAgICAgICAgaWYgKHNvbG8pIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FkZFNvbG8oKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVNvbG8oKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuZW1pdCgnc29sbycsIHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIElmIHRoZSBjdXJyZW50IGluc3RhbmNlIGlzIG11dGVkLCBpLmUuIGFub3RoZXIgaW5zdGFuY2UgaXMgc29sb2VkXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlNvbG8jXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqICBAbmFtZSBtdXRlZFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNvbG8ucHJvdG90eXBlLCAnbXV0ZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0LmdhaW4udmFsdWUgPT09IDA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBBZGQgdGhpcyB0byB0aGUgc29sb2VkIGFycmF5XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuX2FkZFNvbG8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKCFUb25lLmlzQXJyYXkodGhpcy5jb250ZXh0Ll9jdXJyZW50U29sbykpIHtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sbyA9IFtdO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIXRoaXMuX2lzU29sb2VkKCkpIHtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5wdXNoKHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZW1vdmUgdGhpcyBmcm9tIHRoZSBzb2xvZWQgYXJyYXlcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5fcmVtb3ZlU29sbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5faXNTb2xvZWQoKSkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvLmluZGV4T2YodGhpcyk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8uc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn0gSXMgdGhpcyBvbiB0aGUgc29sb2VkIGFycmF5XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuX2lzU29sb2VkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGhpcy5jb250ZXh0Ll9jdXJyZW50U29sbykpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8ubGVuZ3RoICE9PSAwICYmIHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8uaW5kZXhPZih0aGlzKSAhPT0gLTE7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgbm8gb25lIGlzIHNvbG9lZFxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8ucHJvdG90eXBlLl9ub1NvbG9zID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiAhVG9uZS5pc0FycmF5KHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8pIHx8IHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8ubGVuZ3RoID09PSAwO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTb2xvIHRoZSBjdXJyZW50IGluc3RhbmNlIGFuZCB1bnNvbG8gYWxsIG90aGVyIGluc3RhbmNlcy5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5Tb2xvfSAgaW5zdGFuY2UgIFRoZSBpbnN0YW5jZSB3aGljaCBpcyBiZWluZyBzb2xvZWQvdW5zb2xvZWQuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8ucHJvdG90eXBlLl9zb2xvZWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX2lzU29sb2VkKCkpIHtcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dC5nYWluLnZhbHVlID0gMTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX25vU29sb3MoKSkge1xuXHQgICAgICAgICAgICAvL25vIG9uZSBpcyBzb2xvZWRcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dC5nYWluLnZhbHVlID0gMTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmdhaW4udmFsdWUgPSAwO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuU29sb30gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmNvbnRleHQub2ZmKCdzb2xvJywgdGhpcy5fc29sb0JpbmQpO1xuXHQgICAgICAgIHRoaXMuX3JlbW92ZVNvbG8oKTtcblx0ICAgICAgICB0aGlzLl9zb2xvQmluZCA9IG51bGw7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Tb2xvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBHZXQgdGhlIGN1cnJlbnQgd2F2ZWZvcm0gZGF0YSBvZiB0aGUgY29ubmVjdGVkIGF1ZGlvIHNvdXJjZS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IHNpemUgVGhlIHNpemUgb2YgdGhlIEZGVC4gVmFsdWUgbXVzdCBiZSBhIHBvd2VyIG9mXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVmb3JtID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnc2l6ZSddLCBUb25lLldhdmVmb3JtKTtcblx0ICAgICAgICBvcHRpb25zLnR5cGUgPSBUb25lLkFuYWx5c2VyLlR5cGUuV2F2ZWZvcm07XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW5hbHlzZXIgbm9kZS5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFuYWx5c2VyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5BbmFseXNlcihvcHRpb25zKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLldhdmVmb3JtLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZWZvcm0uZGVmYXVsdHMgPSB7ICdzaXplJzogMTAyNCB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldHMgdGhlIHdhdmVmb3JtIG9mIHRoZSBhdWRpbyBzb3VyY2UuIFJldHVybnMgdGhlIHdhdmVmb3JtIGRhdGFcblx0XHQgKiAgb2YgbGVuZ3RoIFtzaXplXSgjc2l6ZSkgYXMgYSBGbG9hdDMyQXJyYXkgd2l0aCB2YWx1ZXMgYmV0d2VlbiAtMSBhbmQgMS5cblx0XHQgKiAgQHJldHVybnMge1R5cGVkQXJyYXl9XG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVmb3JtLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuZ2V0VmFsdWUoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHNpemUgb2YgYW5hbHlzaXMuIFRoaXMgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLldhdmVmb3JtI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBzaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5XYXZlZm9ybS5wcm90b3R5cGUsICdzaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuc2l6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNpemUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYW5hbHlzZXIuc2l6ZSA9IHNpemU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLldhdmVmb3JtfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlZm9ybS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuV2F2ZWZvcm07XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkN0cmxJbnRlcnBvbGF0ZSB3aWxsIGludGVycG9sYXRlIGJldHdlZW4gZ2l2ZW4gdmFsdWVzIGJhc2VkXG5cdFx0ICogICAgICAgICBvbiB0aGUgXCJpbmRleFwiIHByb3BlcnR5LiBQYXNzaW5nIGluIGFuIGFycmF5IG9yIG9iamVjdCBsaXRlcmFsXG5cdFx0ICogICAgICAgICB3aWxsIGludGVycG9sYXRlIGVhY2ggb2YgdGhlIHBhcmFtZXRlcnMuIE5vdGUgKGkuZS4gXCJDM1wiKVxuXHRcdCAqICAgICAgICAgYW5kIFRpbWUgKGkuZS4gXCI0biArIDJcIikgY2FuIGJlIGludGVycG9sYXRlZC4gQWxsIG90aGVyIHZhbHVlcyBhcmVcblx0XHQgKiAgICAgICAgIGFzc3VtZWQgdG8gYmUgbnVtYmVycy4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGludGVycCA9IG5ldyBUb25lLkN0cmxJbnRlcnBvbGF0ZShbMCwgMiwgOSwgNF0pO1xuXHRcdCAqIGludGVycC5pbmRleCA9IDAuNzU7XG5cdFx0ICogaW50ZXJwLnZhbHVlOyAvL3JldHVybnMgMS41XG5cdFx0ICpcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgaW50ZXJwID0gbmV3IFRvbmUuQ3RybEludGVycG9sYXRlKFtcblx0XHQgKiBcdFsyLCA0LCA1XSxcblx0XHQgKiBcdFs5LCAzLCAyXSxcblx0XHQgKiBdKTtcblx0XHQgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIGFycmF5IG9mIHZhbHVlcyB0byBpbnRlcnBvbGF0ZSBvdmVyXG5cdFx0ICogQHBhcmFtIHtQb3NpdGl2ZX0gaW5kZXggVGhlIGluaXRpYWwgaW50ZXJwb2xhdGlvbiBpbmRleC5cblx0XHQgKiBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybEludGVycG9sYXRlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3ZhbHVlcycsXG5cdCAgICAgICAgICAgICdpbmRleCdcblx0ICAgICAgICBdLCBUb25lLkN0cmxJbnRlcnBvbGF0ZSk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZXMgdG8gaW50ZXJwb2xhdGUgYmV0d2VlblxuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZhbHVlcyA9IG9wdGlvbnMudmFsdWVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBpbnRlcnBvbGF0ZWQgaW5kZXggYmV0d2VlbiB2YWx1ZXMuIEZvciBleGFtcGxlOiBhIHZhbHVlIG9mIDEuNVxuXHRcdFx0ICogIHdvdWxkIGludGVycG9sYXRlIGVxdWFsbHkgYmV0d2VlbiB0aGUgdmFsdWUgYXQgaW5kZXggMVxuXHRcdFx0ICogIGFuZCB0aGUgdmFsdWUgYXQgaW5kZXggMi4gXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIGludGVycC5pbmRleCA9IDA7IFxuXHRcdFx0ICogaW50ZXJwLnZhbHVlOyAvL3JldHVybnMgdGhlIHZhbHVlIGF0IDBcblx0XHRcdCAqIGludGVycC5pbmRleCA9IDAuNTtcblx0XHRcdCAqIGludGVycC52YWx1ZTsgLy9yZXR1cm5zIHRoZSB2YWx1ZSBiZXR3ZWVuIGluZGljZXMgMCBhbmQgMS4gXG5cdFx0XHQgKiAgQHR5cGUgIHtQb3NpdGl2ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5kZXggPSBvcHRpb25zLmluZGV4O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ3RybEludGVycG9sYXRlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsSW50ZXJwb2xhdGUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2luZGV4JzogMCxcblx0ICAgICAgICAndmFsdWVzJzogW11cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGN1cnJlbnQgaW50ZXJwb2xhdGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBpbmRleFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ3RybEludGVycG9sYXRlI1xuXHRcdCAqICBAdHlwZSB7Kn1cblx0XHQgKiAgQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkN0cmxJbnRlcnBvbGF0ZS5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleDtcblx0ICAgICAgICAgICAgaW5kZXggPSBNYXRoLm1pbihpbmRleCwgdGhpcy52YWx1ZXMubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgICAgIHZhciBsb3dlclBvc2l0aW9uID0gTWF0aC5mbG9vcihpbmRleCk7XG5cdCAgICAgICAgICAgIHZhciBsb3dlciA9IHRoaXMudmFsdWVzW2xvd2VyUG9zaXRpb25dO1xuXHQgICAgICAgICAgICB2YXIgdXBwZXIgPSB0aGlzLnZhbHVlc1tNYXRoLmNlaWwoaW5kZXgpXTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVycG9sYXRlKGluZGV4IC0gbG93ZXJQb3NpdGlvbiwgbG93ZXIsIHVwcGVyKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBpbnRlcnBvbGF0aW9uIHJvdXRpbmVcblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9ICBpbmRleCAgVGhlIGluZGV4IGJldHdlZW4gdGhlIGxvd2VyIGFuZCB1cHBlclxuXHRcdCAqICBAcGFyYW0gIHsqfSAgbG93ZXIgXG5cdFx0ICogIEBwYXJhbSAgeyp9ICB1cHBlciBcblx0XHQgKiAgQHJldHVybiAgeyp9ICBUaGUgaW50ZXJwb2xhdGVkIHZhbHVlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxJbnRlcnBvbGF0ZS5wcm90b3R5cGUuX2ludGVycG9sYXRlID0gZnVuY3Rpb24gKGluZGV4LCBsb3dlciwgdXBwZXIpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KGxvd2VyKSkge1xuXHQgICAgICAgICAgICB2YXIgcmV0QXJyYXkgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb3dlci5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgcmV0QXJyYXlbaV0gPSB0aGlzLl9pbnRlcnBvbGF0ZShpbmRleCwgbG93ZXJbaV0sIHVwcGVyW2ldKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gcmV0QXJyYXk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzT2JqZWN0KGxvd2VyKSkge1xuXHQgICAgICAgICAgICB2YXIgcmV0T2JqID0ge307XG5cdCAgICAgICAgICAgIGZvciAodmFyIGF0dHIgaW4gbG93ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHJldE9ialthdHRyXSA9IHRoaXMuX2ludGVycG9sYXRlKGluZGV4LCBsb3dlclthdHRyXSwgdXBwZXJbYXR0cl0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiByZXRPYmo7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgbG93ZXIgPSB0aGlzLl90b051bWJlcihsb3dlcik7XG5cdCAgICAgICAgICAgIHVwcGVyID0gdGhpcy5fdG9OdW1iZXIodXBwZXIpO1xuXHQgICAgICAgICAgICByZXR1cm4gKDEgLSBpbmRleCkgKiBsb3dlciArIGluZGV4ICogdXBwZXI7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGZyb20gdGhlIGdpdmVuIHR5cGUgaW50byBhIG51bWJlclxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ8U3RyaW5nfSAgdmFsdWVcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybEludGVycG9sYXRlLnByb3RvdHlwZS5fdG9OdW1iZXIgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIodmFsKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGFzc3VtZSB0aGF0IGl0J3MgVGltZS4uLlxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy50b1NlY29uZHModmFsKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkN0cmxJbnRlcnBvbGF0ZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybEludGVycG9sYXRlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DdHJsSW50ZXJwb2xhdGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkN0cmxNYXJrb3YgcmVwcmVzZW50cyBhIE1hcmtvdiBDaGFpbiB3aGVyZSBlYWNoIGNhbGxcblx0XHQgKiAgICAgICAgIHRvIFRvbmUuQ3RybE1hcmtvdi5uZXh0IHdpbGwgbW92ZSB0byB0aGUgbmV4dCBzdGF0ZS4gSWYgdGhlIG5leHRcblx0XHQgKiAgICAgICAgIHN0YXRlIGNob2ljZSBpcyBhbiBhcnJheSwgdGhlIG5leHQgc3RhdGUgaXMgY2hvc2VuIHJhbmRvbWx5IHdpdGhcblx0XHQgKiAgICAgICAgIGV2ZW4gcHJvYmFiaWxpdHkgZm9yIGFsbCBvZiB0aGUgY2hvaWNlcy4gRm9yIGEgd2VpZ2h0ZWQgcHJvYmFiaWxpdHlcblx0XHQgKiAgICAgICAgIG9mIHRoZSBuZXh0IGNob2ljZXMsIHBhc3MgaW4gYW4gb2JqZWN0IHdpdGggXCJzdGF0ZVwiIGFuZCBcInByb2JhYmlsaXR5XCIgYXR0cmlidXRlcy4gXG5cdFx0ICogICAgICAgICBUaGUgcHJvYmFiaWxpdGllcyB3aWxsIGJlIG5vcm1hbGl6ZWQgYW5kIHRoZW4gY2hvc2VuLiBJZiBubyBuZXh0IG9wdGlvbnNcblx0XHQgKiAgICAgICAgIGFyZSBnaXZlbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUsIHRoZSBzdGF0ZSB3aWxsIHN0YXkgdGhlcmUuIFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgY2hhaW4gPSBuZXcgVG9uZS5DdHJsTWFya292KHtcblx0XHQgKiBcdFwiYmVnaW5uaW5nXCIgOiBbXCJlbmRcIiwgXCJtaWRkbGVcIl0sXG5cdFx0ICogXHRcIm1pZGRsZVwiIDogXCJlbmRcIlxuXHRcdCAqIH0pO1xuXHRcdCAqIGNoYWluLnZhbHVlID0gXCJiZWdpbm5pbmdcIjtcblx0XHQgKiBjaGFpbi5uZXh0KCk7IC8vcmV0dXJucyBcImVuZFwiIG9yIFwibWlkZGxlXCIgd2l0aCA1MCUgcHJvYmFiaWxpdHlcblx0XHQgKlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBjaGFpbiA9IG5ldyBUb25lLkN0cmxNYXJrb3Yoe1xuXHRcdCAqIFx0XCJiZWdpbm5pbmdcIiA6IFt7XCJ2YWx1ZVwiIDogXCJlbmRcIiwgXCJwcm9iYWJpbGl0eVwiIDogMC44fSwgXG5cdFx0ICogXHRcdFx0XHRcdHtcInZhbHVlXCIgOiBcIm1pZGRsZVwiLCBcInByb2JhYmlsaXR5XCIgOiAwLjJ9XSxcblx0XHQgKiBcdFwibWlkZGxlXCIgOiBcImVuZFwiXG5cdFx0ICogfSk7XG5cdFx0ICogY2hhaW4udmFsdWUgPSBcImJlZ2lubmluZ1wiO1xuXHRcdCAqIGNoYWluLm5leHQoKTsgLy9yZXR1cm5zIFwiZW5kXCIgd2l0aCA4MCUgcHJvYmFiaWxpdHkgb3IgXCJtaWRkbGVcIiB3aXRoIDIwJS5cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IHZhbHVlcyBBbiBvYmplY3Qgd2l0aCB0aGUgc3RhdGUgbmFtZXMgYXMgdGhlIGtleXNcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIG5leHQgc3RhdGUocykgYXMgdGhlIHZhbHVlcy4gXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxNYXJrb3YgPSBmdW5jdGlvbiAodmFsdWVzLCBpbml0aWFsKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBNYXJrb3YgdmFsdWVzIHdpdGggc3RhdGVzIGFzIHRoZSBrZXlzXG5cdFx0XHQgKiAgYW5kIG5leHQgc3RhdGUocykgYXMgdGhlIHZhbHVlcy4gXG5cdFx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gVG9uZS5kZWZhdWx0QXJnKHZhbHVlcywge30pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBNYXJrb3YgdmFsdWVzLiBUaGUgbmV4dFxuXHRcdFx0ICogIHN0YXRlIHdpbGwgYmUgZXZhbHVhdGVkIGFuZCByZXR1cm5lZCB3aGVuIFRvbmUuQ3RybE1hcmtvdi5uZXh0XG5cdFx0XHQgKiAgaXMgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyhpbml0aWFsLCBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcylbMF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ3RybE1hcmtvdik7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgbmV4dCBzdGF0ZSBvZiB0aGUgTWFya292IHZhbHVlcy4gXG5cdFx0ICogIEByZXR1cm4gIHtTdHJpbmd9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxNYXJrb3YucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMudmFsdWVzLmhhc093blByb3BlcnR5KHRoaXMudmFsdWUpKSB7XG5cdCAgICAgICAgICAgIHZhciBuZXh0ID0gdGhpcy52YWx1ZXNbdGhpcy52YWx1ZV07XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkobmV4dCkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBkaXN0cmlidXRpb24gPSB0aGlzLl9nZXRQcm9iRGlzdHJpYnV0aW9uKG5leHQpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHJhbmQgPSBNYXRoLnJhbmRvbSgpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHRvdGFsID0gMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzdHJpYnV0aW9uLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3QgPSBkaXN0cmlidXRpb25baV07XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmQgPiB0b3RhbCAmJiByYW5kIDwgdG90YWwgKyBkaXN0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaG9zZW4gPSBuZXh0W2ldO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc09iamVjdChjaG9zZW4pKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gY2hvc2VuLnZhbHVlO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNob3Nlbjtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBkaXN0O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5leHQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENob29zZSByYW5kb21seSBmcm9tIGFuIGFycmF5IHdlaWdodGVkIG9wdGlvbnMgaW4gdGhlIGZvcm0gXG5cdFx0ICogIHtcInN0YXRlXCIgOiBzdHJpbmcsIFwicHJvYmFiaWxpdHlcIiA6IG51bWJlcn0gb3IgYW4gYXJyYXkgb2YgdmFsdWVzXG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgb3B0aW9ucyBcblx0XHQgKiAgQHJldHVybiAge0FycmF5fSAgVGhlIHJhbmRvbWx5IHNlbGVjdGVkIGNob2ljZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsTWFya292LnByb3RvdHlwZS5fZ2V0UHJvYkRpc3RyaWJ1dGlvbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgdmFyIGRpc3RyaWJ1dGlvbiA9IFtdO1xuXHQgICAgICAgIHZhciB0b3RhbCA9IDA7XG5cdCAgICAgICAgdmFyIG5lZWRzTm9ybWFsaXppbmcgPSBmYWxzZTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIG9wdGlvbiA9IG9wdGlvbnNbaV07XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KG9wdGlvbikpIHtcblx0ICAgICAgICAgICAgICAgIG5lZWRzTm9ybWFsaXppbmcgPSB0cnVlO1xuXHQgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uW2ldID0gb3B0aW9uLnByb2JhYmlsaXR5O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uW2ldID0gMSAvIG9wdGlvbnMubGVuZ3RoO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRvdGFsICs9IGRpc3RyaWJ1dGlvbltpXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKG5lZWRzTm9ybWFsaXppbmcpIHtcblx0ICAgICAgICAgICAgLy9ub3JtYWxpemUgdGhlIHZhbHVlc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRpc3RyaWJ1dGlvbi5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uW2pdID0gZGlzdHJpYnV0aW9uW2pdIC8gdG90YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGRpc3RyaWJ1dGlvbjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQ3RybE1hcmtvdn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybE1hcmtvdi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLnZhbHVlcyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ3RybE1hcmtvdjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEdlbmVyYXRlIHBhdHRlcm5zIGZyb20gYW4gYXJyYXkgb2YgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgSGFzIGEgbnVtYmVyIG9mIGFycGVnZ2lhdGlvbiBhbmQgcmFuZG9taXplZFxuXHRcdCAqICAgICAgICAgc2VsZWN0aW9uIHBhdHRlcm5zLiBcblx0XHQgKiAgICAgICAgICAgPHVsPlxuXHRcdCAqICBcdCAgICAgICAgPGxpPlwidXBcIiAtIGN5Y2xlcyB1cHdhcmQ8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJkb3duXCIgLSBjeWNsZXMgZG93bndhcmQ8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJ1cERvd25cIiAtIHVwIHRoZW4gYW5kIGRvd248L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJkb3duVXBcIiAtIGN5Y2xlcyBkb3duIHRoZW4gYW5kIHVwPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwiYWx0ZXJuYXRlVXBcIiAtIGp1bXAgdXAgdHdvIGFuZCBkb3duIG9uZTwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cImFsdGVybmF0ZURvd25cIiAtIGp1bXAgZG93biB0d28gYW5kIHVwIG9uZTwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cInJhbmRvbVwiIC0gcmFuZG9tbHkgc2VsZWN0IGFuIGluZGV4PC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwicmFuZG9tV2Fsa1wiIC0gcmFuZG9tbHkgbW92ZXMgb25lIGluZGV4IGF3YXkgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbjwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cInJhbmRvbU9uY2VcIiAtIHJhbmRvbWx5IHNlbGVjdCBhbiBpbmRleCB3aXRob3V0IHJlcGVhdGluZyB1bnRpbCBhbGwgdmFsdWVzIGhhdmUgYmVlbiBjaG9zZW4uPC9saT5cblx0XHQgKiAgICAgXHRcdDwvdWw+XG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgdmFsdWVzICAgQW4gYXJyYXkgb2Ygb3B0aW9ucyB0byBjaG9vc2UgZnJvbS5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5DdHJsUGF0dGVybi5UeXBlPX0gIHR5cGUgIFRoZSBuYW1lIG9mIHRoZSBwYXR0ZXJuLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndmFsdWVzJyxcblx0ICAgICAgICAgICAgJ3R5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5DdHJsUGF0dGVybik7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhcnJheSBvZiB2YWx1ZXMgdG8gYXJwZWdnaWF0ZSBvdmVyXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBvcHRpb25zLnZhbHVlcztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgdmFsdWVzIGFycmF5XG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdHlwZSBwbGFjZWhvbGRlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkN0cmxQYXR0ZXJuLlR5cGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNodWZmbGVkIHZhbHVlcyBmb3IgdGhlIFJhbmRvbU9uY2UgdHlwZVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2h1ZmZsZWQgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkaXJlY3Rpb24gb2YgdGhlIG1vdmVtZW50XG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DdHJsUGF0dGVybik7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIENvbnRyb2wgUGF0dGVybnNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4uVHlwZSA9IHtcblx0ICAgICAgICBVcDogJ3VwJyxcblx0ICAgICAgICBEb3duOiAnZG93bicsXG5cdCAgICAgICAgVXBEb3duOiAndXBEb3duJyxcblx0ICAgICAgICBEb3duVXA6ICdkb3duVXAnLFxuXHQgICAgICAgIEFsdGVybmF0ZVVwOiAnYWx0ZXJuYXRlVXAnLFxuXHQgICAgICAgIEFsdGVybmF0ZURvd246ICdhbHRlcm5hdGVEb3duJyxcblx0ICAgICAgICBSYW5kb206ICdyYW5kb20nLFxuXHQgICAgICAgIFJhbmRvbVdhbGs6ICdyYW5kb21XYWxrJyxcblx0ICAgICAgICBSYW5kb21PbmNlOiAncmFuZG9tT25jZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLiBcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxQYXR0ZXJuLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd0eXBlJzogVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwLFxuXHQgICAgICAgICd2YWx1ZXMnOiBbXVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdmFsdWUgYXQgdGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIHBhdHRlcm4uXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DdHJsUGF0dGVybiNcblx0XHQgKiAgQHR5cGUgeyp9XG5cdFx0ICogIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DdHJsUGF0dGVybi5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy9zb21lIHNhZmVndWFyZHNcblx0ICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzBdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLm1pbih0aGlzLmluZGV4LCB0aGlzLnZhbHVlcy5sZW5ndGggLSAxKTtcblx0ICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWVzW3RoaXMuaW5kZXhdO1xuXHQgICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tT25jZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzLmxlbmd0aCAhPT0gdGhpcy5fc2h1ZmZsZWQubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2h1ZmZsZVZhbHVlcygpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdmFsID0gdGhpcy52YWx1ZXNbdGhpcy5fc2h1ZmZsZWRbdGhpcy5pbmRleF1dO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHBhdHRlcm4gdXNlZCB0byBzZWxlY3QgdGhlIG5leHRcblx0XHQgKiAgaXRlbSBmcm9tIHRoZSB2YWx1ZXMgYXJyYXlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ3RybFBhdHRlcm4jXG5cdFx0ICogIEB0eXBlIHtUb25lLkN0cmxQYXR0ZXJuLlR5cGV9XG5cdFx0ICogIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkN0cmxQYXR0ZXJuLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgdGhpcy5fc2h1ZmZsZWQgPSBudWxsO1xuXHQgICAgICAgICAgICAvL3RoZSBmaXJzdCBpbmRleFxuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcERvd24gfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbU9uY2UgfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkFsdGVybmF0ZVVwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93biB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93blVwIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVEb3duKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy52YWx1ZXMubGVuZ3RoIC0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL3RoZSBkaXJlY3Rpb25cblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcERvd24gfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkFsdGVybmF0ZVVwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXA7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd25VcCB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlRG93bikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd247XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9yYW5kb21zXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tT25jZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2h1ZmZsZVZhbHVlcygpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uUmFuZG9tKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy52YWx1ZXMubGVuZ3RoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgbmV4dCB2YWx1ZSBnaXZlbiB0aGUgY3VycmVudCBwb3NpdGlvblxuXHRcdCAqICBhbmQgcGF0dGVybi5cblx0XHQgKiAgQHJldHVybiB7Kn0gVGhlIG5leHQgdmFsdWVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4ucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cdCAgICAgICAgLy9jaG9vc2UgdGhlIG5leHQgaW5kZXhcblx0ICAgICAgICBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPj0gdGhpcy52YWx1ZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd24pIHtcblx0ICAgICAgICAgICAgdGhpcy5pbmRleC0tO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSB0aGlzLnZhbHVlcy5sZW5ndGggLSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXBEb3duIHx8IHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duVXApIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RpcmVjdGlvbiA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4Kys7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4LS07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPCAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluZGV4ID49IHRoaXMudmFsdWVzLmxlbmd0aCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHRoaXMudmFsdWVzLmxlbmd0aCAtIDI7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbSkge1xuXHQgICAgICAgICAgICB0aGlzLmluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy52YWx1ZXMubGVuZ3RoKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb21XYWxrKSB7XG5cdCAgICAgICAgICAgIGlmIChNYXRoLnJhbmRvbSgpIDwgMC41KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4LS07XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gTWF0aC5tYXgodGhpcy5pbmRleCwgMCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4Kys7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gTWF0aC5taW4odGhpcy5pbmRleCwgdGhpcy52YWx1ZXMubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb21PbmNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPj0gdGhpcy52YWx1ZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICAgICAgICAgIC8vcmVzaHVmZmxlIHRoZSB2YWx1ZXMgZm9yIG5leHQgdGltZVxuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2h1ZmZsZVZhbHVlcygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlVXApIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RpcmVjdGlvbiA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ICs9IDI7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bjtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggLT0gMTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA+PSB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlRG93bikge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGlyZWN0aW9uID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCAtPSAyO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmluZGV4IDwgMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHRoaXMudmFsdWVzLmxlbmd0aCAtIDE7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2h1ZmZsZXMgdGhlIHZhbHVlcyBhbmQgcGxhY2VzIHRoZSByZXN1bHRzIGludG8gdGhlIF9zaHVmZmxlZFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybi5wcm90b3R5cGUuX3NodWZmbGVWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGNvcHkgPSBbXTtcblx0ICAgICAgICB0aGlzLl9zaHVmZmxlZCA9IFtdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy52YWx1ZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgY29weVtpXSA9IGk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHdoaWxlIChjb3B5Lmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgdmFyIHJhbmRWYWwgPSBjb3B5LnNwbGljZShNYXRoLmZsb29yKGNvcHkubGVuZ3RoICogTWF0aC5yYW5kb20oKSksIDEpO1xuXHQgICAgICAgICAgICB0aGlzLl9zaHVmZmxlZC5wdXNoKHJhbmRWYWxbMF0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ3RybFBhdHRlcm59IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc2h1ZmZsZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DdHJsUGF0dGVybjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBDaG9vc2UgYSByYW5kb20gdmFsdWUuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciByYW5kb21XYWxrID0gbmV3IFRvbmUuQ3RybFJhbmRvbSh7XG5cdFx0ICogXHRcIm1pblwiIDogMCxcblx0XHQgKiBcdFwibWF4XCIgOiAxMCxcblx0XHQgKiBcdFwiaW50ZWdlclwiIDogdHJ1ZVxuXHRcdCAqIH0pO1xuXHRcdCAqIHJhbmRvbVdhbGsuZXZhbCgpO1xuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfFRpbWU9fSBtaW4gVGhlIG1pbmltdW0gcmV0dXJuIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcnxUaW1lPX0gbWF4IFRoZSBtYXhpbXVtIHJldHVybiB2YWx1ZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFJhbmRvbSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdtaW4nLFxuXHQgICAgICAgICAgICAnbWF4J1xuXHQgICAgICAgIF0sIFRvbmUuQ3RybFJhbmRvbSk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaW5pbXVtIHJldHVybiB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfFRpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pbiA9IG9wdGlvbnMubWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtYXhpbXVtIHJldHVybiB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfFRpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1heCA9IG9wdGlvbnMubWF4O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIElmIHRoZSByZXR1cm4gdmFsdWUgc2hvdWxkIGJlIGFuIGludGVnZXJcblx0XHRcdCAqICBAdHlwZSAge0Jvb2xlYW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmludGVnZXIgPSBvcHRpb25zLmludGVnZXI7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DdHJsUmFuZG9tKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUmFuZG9tLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICdtYXgnOiAxLFxuXHQgICAgICAgICdpbnRlZ2VyJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIGEgcmFuZG9tIHZhbHVlIGJldHdlZW4gbWluIGFuZCBtYXguIFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ3RybFJhbmRvbSNcblx0XHQgKiAgQHR5cGUgeyp9XG5cdFx0ICogIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DdHJsUmFuZG9tLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgbWluID0gdGhpcy50b1NlY29uZHModGhpcy5taW4pO1xuXHQgICAgICAgICAgICB2YXIgbWF4ID0gdGhpcy50b1NlY29uZHModGhpcy5tYXgpO1xuXHQgICAgICAgICAgICB2YXIgcmFuZCA9IE1hdGgucmFuZG9tKCk7XG5cdCAgICAgICAgICAgIHZhciB2YWwgPSByYW5kICogbWluICsgKDEgLSByYW5kKSAqIG1heDtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW50ZWdlcikge1xuXHQgICAgICAgICAgICAgICAgdmFsID0gTWF0aC5mbG9vcih2YWwpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gVG9uZS5DdHJsUmFuZG9tO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgZGF0YSBzdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgbXVsdGlwbGUgYnVmZmVycy5cblx0XHQgKiAgXG5cdFx0ICogIEBwYXJhbSAge09iamVjdHxBcnJheX0gICAgdXJscyAgICAgIEFuIG9iamVjdCBsaXRlcmFsIG9yIGFycmF5XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHVybHMgdG8gbG9hZC5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlcnMgYXJlIGxvYWRlZC4gXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbG9hZCBhIHdob2xlIGJhbmsgb2YgcGlhbm8gc2FtcGxlc1xuXHRcdCAqIHZhciBwaWFub1NhbXBsZXMgPSBuZXcgVG9uZS5CdWZmZXJzKHtcblx0XHQgKiBcdFwiQzRcIiA6IFwicGF0aC90by9DNC5tcDNcIlxuXHRcdCAqIFx0XCJDIzRcIiA6IFwicGF0aC90by9DIzQubXAzXCJcblx0XHQgKiBcdFwiRDRcIiA6IFwicGF0aC90by9ENC5tcDNcIlxuXHRcdCAqIFx0XCJEIzRcIiA6IFwicGF0aC90by9EIzQubXAzXCJcblx0XHQgKiBcdC4uLlxuXHRcdCAqIH0sIGZ1bmN0aW9uKCl7XG5cdFx0ICogXHQvL3BsYXkgb25lIG9mIHRoZSBzYW1wbGVzIHdoZW4gdGhleSBhbGwgbG9hZFxuXHRcdCAqIFx0cGxheWVyLmJ1ZmZlciA9IHBpYW5vU2FtcGxlcy5nZXQoXCJDNFwiKTtcblx0XHQgKiBcdHBsYXllci5zdGFydCgpO1xuXHRcdCAqIH0pO1xuXHRcdCAqIFx0QGV4YW1wbGVcblx0XHQgKiAvL1RvIHBhc3MgaW4gYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGluIHRoZSBzZWNvbmQgcGFyYW1ldGVyXG5cdFx0ICogdmFyIGJ1ZmZlcnMgPSBuZXcgVG9uZS5CdWZmZXJzKHVybHMsIHtcblx0XHQgKiBcdFwib25sb2FkXCIgOiBjYWxsYmFjayxcblx0XHQgKiBcdFwiYmFzZVVybFwiIDogXCIuLi9wYXRoL3RvL2F1ZGlvL1wiXG5cdFx0ICogfSlcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycyA9IGZ1bmN0aW9uICh1cmxzKSB7XG5cdCAgICAgICAgLy9yZW1vdmUgdGhlIHVybHMgZnJvbSB0aGUgb3B0aW9uc1xuXHQgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICBhcmdzLnNoaWZ0KCk7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3MsIFtcblx0ICAgICAgICAgICAgJ29ubG9hZCcsXG5cdCAgICAgICAgICAgICdiYXNlVXJsJ1xuXHQgICAgICAgIF0sIFRvbmUuQnVmZmVycyk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsbCBvZiB0aGUgYnVmZmVyc1xuXHRcdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXJzID0ge307XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBwYXRoIHdoaWNoIGlzIHByZWZpeGVkIGJlZm9yZSBldmVyeSB1cmwuXG5cdFx0XHQgKiAgQHR5cGUgIHtTdHJpbmd9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmJhc2VVcmwgPSBvcHRpb25zLmJhc2VVcmw7XG5cdCAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50ID0gMDtcblx0ICAgICAgICAvL2FkZCBlYWNoIG9uZVxuXHQgICAgICAgIGZvciAodmFyIGtleSBpbiB1cmxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudCsrO1xuXHQgICAgICAgICAgICB0aGlzLmFkZChrZXksIHVybHNba2V5XSwgdGhpcy5fYnVmZmVyTG9hZGVkLmJpbmQodGhpcywgb3B0aW9ucy5vbmxvYWQpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5CdWZmZXJzKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdiYXNlVXJsJzogJydcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJ1ZSBpZiB0aGUgYnVmZmVycyBvYmplY3QgaGFzIGEgYnVmZmVyIGJ5IHRoYXQgbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIG5hbWUgIFRoZSBrZXkgb3IgaW5kZXggb2YgdGhlIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLlxuXHRcdCAqICBAcmV0dXJuICB7Qm9vbGVhbn1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVycy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IGEgYnVmZmVyIGJ5IG5hbWUuIElmIGFuIGFycmF5IHdhcyBsb2FkZWQsIFxuXHRcdCAqICB0aGVuIHVzZSB0aGUgYXJyYXkgaW5kZXguXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICBuYW1lICBUaGUga2V5IG9yIGluZGV4IG9mIHRoZSBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAobmFtZSkge1xuXHQgICAgICAgIGlmICh0aGlzLmhhcyhuYW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyc1tuYW1lXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuQnVmZmVyczogbm8gYnVmZmVyIG5hbWVkICcgKyBuYW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEEgYnVmZmVyIHdhcyBsb2FkZWQuIGRlY3JlbWVudCB0aGUgY291bnRlci5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5wcm90b3R5cGUuX2J1ZmZlckxvYWRlZCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudC0tO1xuXHQgICAgICAgIGlmICh0aGlzLl9sb2FkaW5nQ291bnQgPT09IDAgJiYgY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIHRoZSBidWZmZXJzIGFyZSBsb2FkZWQgb3Igbm90XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVycyNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb2FkZWRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlcnMucHJvdG90eXBlLCAnbG9hZGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaXNMb2FkZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBidWZmTmFtZSBpbiB0aGlzLl9idWZmZXJzKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYnVmZiA9IHRoaXMuZ2V0KGJ1ZmZOYW1lKTtcblx0ICAgICAgICAgICAgICAgIGlzTG9hZGVkID0gaXNMb2FkZWQgJiYgYnVmZi5sb2FkZWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIGlzTG9hZGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIGJ1ZmZlciBieSBuYW1lIGFuZCB1cmwgdG8gdGhlIEJ1ZmZlcnNcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgICBuYW1lICAgICAgQSB1bmlxdWUgbmFtZSB0byBnaXZlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBidWZmZXJcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfFRvbmUuQnVmZmVyfEF1ZGlvYnVmZmVyfSAgdXJsICBFaXRoZXIgdGhlIHVybCBvZiB0aGUgYnVmZXIsIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGEgYnVmZmVyIHdoaWNoIHdpbGwgYmUgYWRkZWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBnaXZlbiBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIHVybCBpcyBsb2FkZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlcnMucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgY2FsbGJhY2sgPSBUb25lLmRlZmF1bHRBcmcoY2FsbGJhY2ssIFRvbmUubm9PcCk7XG5cdCAgICAgICAgaWYgKHVybCBpbnN0YW5jZW9mIFRvbmUuQnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbbmFtZV0gPSB1cmw7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodXJsIGluc3RhbmNlb2YgQXVkaW9CdWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tuYW1lXSA9IG5ldyBUb25lLkJ1ZmZlcih1cmwpO1xuXHQgICAgICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcodXJsKSkge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzW25hbWVdID0gbmV3IFRvbmUuQnVmZmVyKHRoaXMuYmFzZVVybCArIHVybCwgY2FsbGJhY2spO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkJ1ZmZlcnN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl9idWZmZXJzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbbmFtZV0uZGlzcG9zZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5CdWZmZXJzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBidXNlcyBhcmUgYW5vdGhlciB3YXkgb2Ygcm91dGluZyBhdWRpb1xuXHRcdCAqXG5cdFx0ICogIGF1Z21lbnRzIFRvbmUucHJvdG90eXBlIHRvIGluY2x1ZGUgc2VuZCBhbmQgcmVjaWV2ZVxuXHRcdCAqL1xuXHQgICAgLyoqXG5cdFx0ICogIEFsbCBvZiB0aGUgcm91dGVzXG5cdFx0ICpcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgdmFyIEJ1c2VzID0ge307XG5cdCAgICAvKipcblx0XHQgKiAgU2VuZCB0aGlzIHNpZ25hbCB0byB0aGUgY2hhbm5lbCBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9IGNoYW5uZWxOYW1lIEEgbmFtZWQgY2hhbm5lbCB0byBzZW5kIHRoZSBzaWduYWwgdG8uXG5cdFx0ICogIEBwYXJhbSAge0RlY2liZWxzfSBhbW91bnQgVGhlIGFtb3VudCBvZiB0aGUgc291cmNlIHRvIHNlbmQgdG8gdGhlIGJ1cy5cblx0XHQgKiAgQHJldHVybiB7R2Fpbk5vZGV9IFRoZSBnYWluIG5vZGUgd2hpY2ggY29ubmVjdHMgdGhpcyBub2RlIHRvIHRoZSBkZXNpcmVkIGNoYW5uZWwuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCB0byBhZGp1c3QgdGhlIGxldmVscyBvZiB0aGUgc2VuZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzb3VyY2Uuc2VuZChcInJldmVyYlwiLCAtMTIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uIChjaGFubmVsTmFtZSwgYW1vdW50KSB7XG5cdCAgICAgICAgaWYgKCFCdXNlcy5oYXNPd25Qcm9wZXJ0eShjaGFubmVsTmFtZSkpIHtcblx0ICAgICAgICAgICAgQnVzZXNbY2hhbm5lbE5hbWVdID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgYW1vdW50ID0gVG9uZS5kZWZhdWx0QXJnKGFtb3VudCwgMCk7XG5cdCAgICAgICAgdmFyIHNlbmRLbm9iID0gbmV3IFRvbmUuR2FpbihhbW91bnQsIFRvbmUuVHlwZS5EZWNpYmVscyk7XG5cdCAgICAgICAgdGhpcy5jb25uZWN0KHNlbmRLbm9iKTtcblx0ICAgICAgICBzZW5kS25vYi5jb25uZWN0KEJ1c2VzW2NoYW5uZWxOYW1lXSk7XG5cdCAgICAgICAgcmV0dXJuIHNlbmRLbm9iO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZWNpZXZlIHRoZSBpbnB1dCBmcm9tIHRoZSBkZXNpcmVkIGNoYW5uZWxOYW1lIHRvIHRoZSBpbnB1dFxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gY2hhbm5lbE5hbWUgQSBuYW1lZCBjaGFubmVsIHRvIHNlbmQgdGhlIHNpZ25hbCB0by5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyPX0gY2hhbm5lbE51bWJlciBUaGUgY2hhbm5lbCB0byBjb25uZWN0IHRvXG5cdFx0ICogIEByZXR1cm5zIHtUb25lfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogcmV2ZXJiRWZmZWN0LnJlY2VpdmUoXCJyZXZlcmJcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5yZWNlaXZlID0gZnVuY3Rpb24gKGNoYW5uZWxOYW1lLCBpbnB1dE51bSkge1xuXHQgICAgICAgIGlmICghQnVzZXMuaGFzT3duUHJvcGVydHkoY2hhbm5lbE5hbWUpKSB7XG5cdCAgICAgICAgICAgIEJ1c2VzW2NoYW5uZWxOYW1lXSA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIEJ1c2VzW2NoYW5uZWxOYW1lXS5jb25uZWN0KHRoaXMsIDAsIGlucHV0TnVtKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvL3JlbW92ZSBhbGwgdGhlIHNlbmQvcmVjZWl2ZXMgd2hlbiBhIG5ldyBhdWRpbyBjb250ZXh0IGlzIHBhc3NlZCBpblxuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICBpZiAoY29udGV4dC5CdXNlcykge1xuXHQgICAgICAgICAgICBCdXNlcyA9IGNvbnRleHQuQnVzZXM7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgQnVzZXMgPSB7fTtcblx0ICAgICAgICAgICAgY29udGV4dC5CdXNlcyA9IEJ1c2VzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIFRvbmU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkRyYXcgaXMgdXNlZnVsIGZvciBzeW5jaHJvbml6aW5nIHZpc3VhbHMgYW5kIGF1ZGlvIGV2ZW50cy5cblx0XHQgKiAgICAgICAgIENhbGxiYWNrcyBmcm9tIFRvbmUuVHJhbnNwb3J0IG9yIGFueSBvZiB0aGUgVG9uZS5FdmVudCBjbGFzc2VzXG5cdFx0ICogICAgICAgICBhbHdheXMgaGFwcGVuIF9iZWZvcmVfIHRoZSBzY2hlZHVsZWQgdGltZSBhbmQgYXJlIG5vdCBzeW5jaHJvbml6ZWRcblx0XHQgKiAgICAgICAgIHRvIHRoZSBhbmltYXRpb24gZnJhbWUgc28gdGhleSBhcmUgbm90IGdvb2QgZm9yIHRyaWdnZXJpbmcgdGlnaHRseVxuXHRcdCAqICAgICAgICAgc3luY2hyb25pemVkIHZpc3VhbHMgYW5kIHNvdW5kLiBUb25lLkRyYXcgbWFrZXMgaXQgZWFzeSB0byBzY2hlZHVsZVxuXHRcdCAqICAgICAgICAgY2FsbGJhY2tzIHVzaW5nIHRoZSBBdWRpb0NvbnRleHQgdGltZSBhbmQgdXNlcyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuXG5cdFx0ICogICAgICAgICBcblx0XHQgKiAgQHNpbmdsZXRvblxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdC8vdXNlIHRoZSB0aW1lIGFyZ3VtZW50IHRvIHNjaGVkdWxlIGEgY2FsbGJhY2sgd2l0aCBUb25lLkRyYXdcblx0XHQgKiBcdFRvbmUuRHJhdy5zY2hlZHVsZShmdW5jdGlvbigpe1xuXHRcdCAqIFx0XHQvL2RvIGRyYXdpbmcgb3IgRE9NIG1hbmlwdWxhdGlvbiBoZXJlXG5cdFx0ICogXHR9LCB0aW1lKVxuXHRcdCAqIH0sIFwiKzAuNVwiKVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EcmF3ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGwgb2YgdGhlIGV2ZW50cy5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVGltZWxpbmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBUb25lLlRpbWVsaW5lKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGR1cmF0aW9uIGFmdGVyIHdoaWNoIGV2ZW50cyBhcmUgbm90IGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQGRlZmF1bHQgMC4yNVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5leHBpcmF0aW9uID0gMC4yNTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIHRpbWUgYmVmb3JlIHRoZSBzY2hlZHVsZWQgdGltZSBcblx0XHRcdCAqICB0aGF0IHRoZSBjYWxsYmFjayBjYW4gYmUgaW52b2tlZC4gRGVmYXVsdCBpc1xuXHRcdFx0ICogIGhhbGYgdGhlIHRpbWUgb2YgYW4gYW5pbWF0aW9uIGZyYW1lICgwLjAwOCBzZWNvbmRzKS5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAZGVmYXVsdCAwLjAwOFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hbnRpY2lwYXRpb24gPSAwLjAwODtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZHJhdyBsb29wXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYm91bmREcmF3TG9vcCA9IHRoaXMuX2RyYXdMb29wLmJpbmQodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5EcmF3KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZSBhIGZ1bmN0aW9uIGF0IHRoZSBnaXZlbiB0aW1lIHRvIGJlIGludm9rZWRcblx0XHQgKiAgb24gdGhlIG5lYXJlc3QgYW5pbWF0aW9uIGZyYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBDYWxsYmFjayBpcyBpbnZva2VkIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgICB0aW1lICAgICAgVGhlIHRpbWUgcmVsYXRpdmUgdG8gdGhlIEF1ZGlvQ29udGV4dCB0aW1lXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBpbnZva2UgdGhlIGNhbGxiYWNrLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5EcmF3fSAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkRyYXcucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCB0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayxcblx0ICAgICAgICAgICAgdGltZTogdGhpcy50b1NlY29uZHModGltZSlcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBkcmF3IGxvb3Agb24gdGhlIGZpcnN0IGV2ZW50XG5cdCAgICAgICAgaWYgKHRoaXMuX2V2ZW50cy5sZW5ndGggPT09IDEpIHtcblx0ICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2JvdW5kRHJhd0xvb3ApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGV2ZW50cyBzY2hlZHVsZWQgYWZ0ZXIgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICBhZnRlciAgVGltZSBhZnRlciB3aGljaCBzY2hlZHVsZWQgZXZlbnRzIHdpbGwgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2NoZWR1bGluZyB0aW1lbGluZS5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRHJhd30gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRHJhdy5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbCh0aGlzLnRvU2Vjb25kcyhhZnRlcikpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZHJhdyBsb29wXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkRyYXcucHJvdG90eXBlLl9kcmF3TG9vcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm93ID0gVG9uZS5ub3coKTtcblx0ICAgICAgICB3aGlsZSAodGhpcy5fZXZlbnRzLmxlbmd0aCAmJiB0aGlzLl9ldmVudHMucGVlaygpLnRpbWUgLSB0aGlzLmFudGljaXBhdGlvbiA8PSBub3cpIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRzLnNoaWZ0KCk7XG5cdCAgICAgICAgICAgIGlmIChub3cgLSBldmVudC50aW1lIDw9IHRoaXMuZXhwaXJhdGlvbikge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuY2FsbGJhY2soKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2JvdW5kRHJhd0xvb3ApO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvL21ha2UgYSBzaW5nbGV0b25cblx0ICAgIFRvbmUuRHJhdyA9IG5ldyBUb25lLkRyYXcoKTtcblx0ICAgIHJldHVybiBUb25lLkRyYXc7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQm90aCBUb25lLlBhbm5lcjNEIGFuZCBUb25lLkxpc3RlbmVyIGhhdmUgYSBwb3NpdGlvbiBpbiAzRCBzcGFjZVxuXHRcdCAqICAgICAgICAgIHVzaW5nIGEgcmlnaHQtaGFuZGVkIGNhcnRlc2lhbiBjb29yZGluYXRlIHN5c3RlbS5cblx0XHQgKiAgICAgICAgICBUaGUgdW5pdHMgdXNlZCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gYXJlIG5vdCBkZWZpbmVkO1xuXHRcdCAqICAgICAgICAgIHRoZXNlIGNvb3JkaW5hdGVzIGFyZSBpbmRlcGVuZGVudC9pbnZhcmlhbnQgb2YgYW55IHBhcnRpY3VsYXJcblx0XHQgKiAgICAgICAgICB1bml0cyBzdWNoIGFzIG1ldGVycyBvciBmZWV0LiBUb25lLlBhbm5lcjNEIG9iamVjdHMgaGF2ZSBhbiBmb3J3YXJkXG5cdFx0ICogICAgICAgICAgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgZGlyZWN0aW9uIHRoZSBzb3VuZCBpcyBwcm9qZWN0aW5nLiBBZGRpdGlvbmFsbHksXG5cdFx0ICogICAgICAgICAgdGhleSBoYXZlIGEgc291bmQgY29uZSByZXByZXNlbnRpbmcgaG93IGRpcmVjdGlvbmFsIHRoZSBzb3VuZCBpcy5cblx0XHQgKiAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIHNvdW5kIGNvdWxkIGJlIG9tbmlkaXJlY3Rpb25hbCwgaW4gd2hpY2ggY2FzZSBpdCB3b3VsZFxuXHRcdCAqICAgICAgICAgIGJlIGhlYXJkIGFueXdoZXJlIHJlZ2FyZGxlc3Mgb2YgaXRzIGZvcndhcmQsIG9yIGl0IGNhbiBiZSBtb3JlIGRpcmVjdGlvbmFsXG5cdFx0ICogICAgICAgICAgYW5kIGhlYXJkIG9ubHkgaWYgaXQgaXMgZmFjaW5nIHRoZSBsaXN0ZW5lci4gVG9uZS5MaXN0ZW5lciBvYmplY3RzXG5cdFx0ICogICAgICAgICAgKHJlcHJlc2VudGluZyBhIHBlcnNvbidzIGVhcnMpIGhhdmUgYW4gZm9yd2FyZCBhbmQgdXAgdmVjdG9yXG5cdFx0ICogICAgICAgICAgcmVwcmVzZW50aW5nIGluIHdoaWNoIGRpcmVjdGlvbiB0aGUgcGVyc29uIGlzIGZhY2luZy4gQmVjYXVzZSBib3RoIHRoZVxuXHRcdCAqICAgICAgICAgIHNvdXJjZSBzdHJlYW0gYW5kIHRoZSBsaXN0ZW5lciBjYW4gYmUgbW92aW5nLCB0aGV5IGJvdGggaGF2ZSBhIHZlbG9jaXR5XG5cdFx0ICogICAgICAgICAgdmVjdG9yIHJlcHJlc2VudGluZyBib3RoIHRoZSBzcGVlZCBhbmQgZGlyZWN0aW9uIG9mIG1vdmVtZW50LiBUYWtlbiB0b2dldGhlcixcblx0XHQgKiAgICAgICAgICB0aGVzZSB0d28gdmVsb2NpdGllcyBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBhIGRvcHBsZXIgc2hpZnQgZWZmZWN0IHdoaWNoIGNoYW5nZXMgdGhlIHBpdGNoLlxuXHRcdCAqICAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICAgTm90ZTogdGhlIHBvc2l0aW9uIG9mIHRoZSBMaXN0ZW5lciB3aWxsIGhhdmUgbm8gZWZmZWN0IG9uIG5vZGVzIG5vdCBjb25uZWN0ZWQgdG8gYSBUb25lLlBhbm5lcjNEXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAc2luZ2xldG9uXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIb2xkcyB0aGUgY3VycmVudCBmb3J3YXJkIG9yaWVudGF0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBbXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDBcblx0ICAgICAgICBdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGRzIHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBbXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDBcblx0ICAgICAgICBdO1xuXHQgICAgICAgIFRvbmUuZ2V0Q29udGV4dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIHNldCB0aGUgZGVmYXVsdCBwb3NpdGlvbi9mb3J3YXJkXG5cdCAgICAgICAgICAgIHRoaXMuc2V0KExpc3RlbmVyQ29uc3RydWN0b3IuZGVmYXVsdHMpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5MaXN0ZW5lcik7XG5cdCAgICAvKipcblx0XHQgKiAgRGVmYXVsdHMgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwb3NpdGlvblgnOiAwLFxuXHQgICAgICAgICdwb3NpdGlvblknOiAwLFxuXHQgICAgICAgICdwb3NpdGlvblonOiAwLFxuXHQgICAgICAgICdmb3J3YXJkWCc6IDAsXG5cdCAgICAgICAgJ2ZvcndhcmRZJzogMCxcblx0ICAgICAgICAnZm9yd2FyZFonOiAxLFxuXHQgICAgICAgICd1cFgnOiAwLFxuXHQgICAgICAgICd1cFknOiAxLFxuXHQgICAgICAgICd1cFonOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJhbXAgdGltZSB3aGljaCBpcyBhcHBsaWVkIHRvIHRoZSBzZXRUYXJnZXRBdFRpbWVcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLnByb3RvdHlwZS5fcmFtcFRpbWVDb25zdGFudCA9IDAuMDE7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIGxpc3RlbmVyIGluIDNkIHNwYWNlLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB4XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHlcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgelxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkxpc3RlbmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLnByb3RvdHlwZS5zZXRQb3NpdGlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY29udGV4dC5saXN0ZW5lci5wb3NpdGlvblgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5wb3NpdGlvblguc2V0VGFyZ2V0QXRUaW1lKHgsIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5wb3NpdGlvblkuc2V0VGFyZ2V0QXRUaW1lKHksIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5wb3NpdGlvblouc2V0VGFyZ2V0QXRUaW1lKHosIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnNldFBvc2l0aW9uKHgsIHksIHopO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldHMgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBsaXN0ZW5lciB1c2luZyB0d28gdmVjdG9ycywgdGhlIGZvcndhcmRcblx0XHQgKiAgdmVjdG9yICh3aGljaCBkaXJlY3Rpb24gdGhlIGxpc3RlbmVyIGlzIGZhY2luZykgYW5kIHRoZSB1cCB2ZWN0b3Jcblx0XHQgKiAgKHdoaWNoIHRoZSB1cCBkaXJlY3Rpb24gb2YgdGhlIGxpc3RlbmVyKS4gQW4gdXAgdmVjdG9yXG5cdFx0ICogIG9mIDAsIDAsIDEgaXMgZXF1aXZhbGVudCB0byB0aGUgbGlzdGVuZXIgc3RhbmRpbmcgdXAgaW4gdGhlIFogZGlyZWN0aW9uLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB4XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHlcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgelxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB1cFhcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdXBZXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHVwWlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkxpc3RlbmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLnByb3RvdHlwZS5zZXRPcmllbnRhdGlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6LCB1cFgsIHVwWSwgdXBaKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY29udGV4dC5saXN0ZW5lci5mb3J3YXJkWCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLmZvcndhcmRYLnNldFRhcmdldEF0VGltZSh4LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuZm9yd2FyZFkuc2V0VGFyZ2V0QXRUaW1lKHksIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5mb3J3YXJkWi5zZXRUYXJnZXRBdFRpbWUoeiwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnVwWC5zZXRUYXJnZXRBdFRpbWUodXBYLCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIudXBZLnNldFRhcmdldEF0VGltZSh1cFksIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci51cFouc2V0VGFyZ2V0QXRUaW1lKHVwWiwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuc2V0T3JpZW50YXRpb24oeCwgeSwgeiwgdXBYLCB1cFksIHVwWik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX29yaWVudGF0aW9uID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHggcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvblhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3Bvc2l0aW9uWCcsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMF0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblswXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAncG9zaXRpb25ZJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblsxXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzFdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB6IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25aXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdwb3NpdGlvblonLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzJdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMl07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXJzIGZyb250IGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB3aGljaCB3YXkgdGhleSBhcmUgZmFjaW5nLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgZm9yd2FyZFhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ2ZvcndhcmRYJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblswXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzBdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVycyBmcm9udCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgd2hpY2ggd2F5IHRoZXkgYXJlIGZhY2luZy5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIGZvcndhcmRZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdmb3J3YXJkWScsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMV0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblsxXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeiBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcnMgZnJvbnQgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHdoaWNoIHdheSB0aGV5IGFyZSBmYWNpbmcuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBmb3J3YXJkWlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAnZm9yd2FyZFonLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzJdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMl07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXIncyB1cCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgdGhlIGRpcmVjdGlvbiB0aGUgbGlzdGVuZXIgaXMgc3RhbmRpbmcgaW4uXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSB1cFhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3VwWCcsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bM10gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblszXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcidzIHVwIGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB0aGUgZGlyZWN0aW9uIHRoZSBsaXN0ZW5lciBpcyBzdGFuZGluZyBpbi5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHVwWVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAndXBZJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvbls0XSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzRdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB6IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVyJ3MgdXAgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHRoZSBkaXJlY3Rpb24gdGhlIGxpc3RlbmVyIGlzIHN0YW5kaW5nIGluLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgdXBaXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICd1cFonLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzVdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bNV07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxpc3RlbmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX29yaWVudGF0aW9uID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy9TSU5HTEVUT04gU0VUVVBcblx0ICAgIHZhciBMaXN0ZW5lckNvbnN0cnVjdG9yID0gVG9uZS5MaXN0ZW5lcjtcblx0ICAgIFRvbmUuTGlzdGVuZXIgPSBuZXcgTGlzdGVuZXJDb25zdHJ1Y3RvcigpO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICBpZiAoY29udGV4dC5MaXN0ZW5lciBpbnN0YW5jZW9mIExpc3RlbmVyQ29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgLy9hIHNpbmdsZSBsaXN0ZW5lciBvYmplY3Rcblx0ICAgICAgICAgICAgVG9uZS5MaXN0ZW5lciA9IGNvbnRleHQuTGlzdGVuZXI7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy9tYWtlIG5ldyBMaXN0ZW5lciBpbnNpZGVzXG5cdCAgICAgICAgICAgIFRvbmUuTGlzdGVuZXIgPSBuZXcgTGlzdGVuZXJDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBjb250ZXh0Lkxpc3RlbmVyID0gVG9uZS5MaXN0ZW5lcjtcblx0ICAgIH0pO1xuXHQgICAgLy9FTkQgU0lOR0xFVE9OIFNFVFVQXG5cdCAgICByZXR1cm4gVG9uZS5MaXN0ZW5lcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogQmVjYXVzZSBvZiBhIGJ1ZyBpbiBpT1MgY2F1c2luZyB0aGUgY3VycmVudFRpbWUgdG8gaW5jcmVtZW50XG5cdFx0ICogYmVmb3JlIHRoZSByZW5kZXJpbmcgaXMgc3RhcnRlZCwgc29tZXRpbWVzIGl0IHRha2VzIG11bHRpcGxlXG5cdFx0ICogYXR0ZW1wdHMgdG8gcmVuZGVyIHRoZSBhdWRpbyBjb3JyZWN0bHkuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIGZ1bmN0aW9uIGF0dGVtcHRSZW5kZXIoY2FsbGJhY2ssIGR1cmF0aW9uLCBzYW1wbGVSYXRlLCB0cmllcykge1xuXHQgICAgICAgIHRyaWVzID0gVG9uZS5kZWZhdWx0QXJnKHRyaWVzLCAwKTtcblx0ICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBUb25lLk9mZmxpbmVDb250ZXh0KDIsIGR1cmF0aW9uLCBzYW1wbGVSYXRlKTtcblx0ICAgICAgICBUb25lLmNvbnRleHQgPSBjb250ZXh0O1xuXHQgICAgICAgIC8vaW52b2tlIHRoZSBjYWxsYmFjay9zY2hlZHVsaW5nXG5cdCAgICAgICAgdmFyIHJlc3BvbnNlID0gY2FsbGJhY2soVG9uZS5UcmFuc3BvcnQpO1xuXHQgICAgICAgIGlmIChjb250ZXh0LmN1cnJlbnRUaW1lID4gMCAmJiB0cmllcyA8IDEwMDApIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRSZW5kZXIoY2FsbGJhY2ssIGR1cmF0aW9uLCBzYW1wbGVSYXRlLCArK3RyaWVzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgICAgICAgJ3Jlc3BvbnNlJzogcmVzcG9uc2UsXG5cdCAgICAgICAgICAgICAgICAnY29udGV4dCc6IGNvbnRleHRcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdCAgICAvKipcblx0XHQgKiAgR2VuZXJhdGUgYSBidWZmZXIgYnkgcmVuZGVyaW5nIGFsbCBvZiB0aGUgVG9uZS5qcyBjb2RlIHdpdGhpbiB0aGUgY2FsbGJhY2sgdXNpbmcgdGhlIE9mZmxpbmVBdWRpb0NvbnRleHQuXG5cdFx0ICogIFRoZSBPZmZsaW5lQXVkaW9Db250ZXh0IGlzIGNhcGFibGUgb2YgcmVuZGVyaW5nIG11Y2ggZmFzdGVyIHRoYW4gcmVhbCB0aW1lIGluIG1hbnkgY2FzZXMuXG5cdFx0ICogIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBhbHNvIHBhc3NlcyBpbiBhbiBvZmZsaW5lIGluc3RhbmNlIG9mIFRvbmUuVHJhbnNwb3J0IHdoaWNoIGNhbiBiZSB1c2VkXG5cdFx0ICogIHRvIHNjaGVkdWxlIGV2ZW50cyBhbG9uZyB0aGUgVHJhbnNwb3J0LiAqKk5PVEUqKiBPZmZsaW5lQXVkaW9Db250ZXh0IGhhcyB0aGUgc2FtZSByZXN0cmljdGlvbnNcblx0XHQgKiAgYXMgdGhlIEF1ZGlvQ29udGV4dCBpbiB0aGF0IG9uIGNlcnRhaW4gcGxhdGZvcm1zIChsaWtlIGlPUykgaXQgbXVzdCBiZSBpbnZva2VkIGJ5IGFuIGV4cGxpY2l0XG5cdFx0ICogIHVzZXIgYWN0aW9uIGxpa2UgYSBjbGljayBvciB0YXAuIFxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBBbGwgVG9uZS5qcyBub2RlcyB3aGljaCBhcmUgY3JlYXRlZCBhbmQgc2NoZWR1bGVkIHdpdGhpbiB0aGlzIGNhbGxiYWNrIGFyZSByZWNvcmRlZCBpbnRvIHRoZSBvdXRwdXQgQnVmZmVyLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgZHVyYXRpb24gICAgIHRoZSBhbW91bnQgb2YgdGltZSB0byByZWNvcmQgZm9yLlxuXHRcdCAqICBAcmV0dXJuICB7UHJvbWlzZX0gIFRoZSBwcm9taXNlIHdoaWNoIGlzIGludm9rZWQgd2l0aCB0aGUgVG9uZS5CdWZmZXIgb2YgdGhlIHJlY29yZGVkIG91dHB1dC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3JlbmRlciAyIHNlY29uZHMgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiBUb25lLk9mZmxpbmUoZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vb25seSBub2RlcyBjcmVhdGVkIGluIHRoaXMgY2FsbGJhY2sgd2lsbCBiZSByZWNvcmRlZFxuXHRcdCAqIFx0dmFyIG9zY2lsbGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkudG9NYXN0ZXIoKS5zdGFydCgwKVxuXHRcdCAqIFx0Ly9zY2hlZHVsZSB0aGVpciBldmVudHNcblx0XHQgKiB9LCAyKS50aGVuKGZ1bmN0aW9uKGJ1ZmZlcil7XG5cdFx0ICogXHQvL2RvIHNvbWV0aGluZyB3aXRoIHRoZSBvdXRwdXQgYnVmZmVyXG5cdFx0ICogfSlcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vY2FuIGFsc28gc2NoZWR1bGUgZXZlbnRzIGFsb25nIHRoZSBUcmFuc3BvcnRcblx0XHQgKiAvL3VzaW5nIHRoZSBwYXNzZWQgaW4gT2ZmbGluZSBUcmFuc3BvcnRcblx0XHQgKiBUb25lLk9mZmxpbmUoZnVuY3Rpb24oVHJhbnNwb3J0KXtcblx0XHQgKiBcdHZhciBvc2MgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkudG9NYXN0ZXIoKVxuXHRcdCAqIFx0VHJhbnNwb3J0LnNjaGVkdWxlKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0XHRvc2Muc3RhcnQodGltZSkuc3RvcCh0aW1lICsgMC4xKVxuXHRcdCAqIFx0fSwgMSlcblx0XHQgKiBcdFRyYW5zcG9ydC5zdGFydCgwLjIpXG5cdFx0ICogfSwgNCkudGhlbihmdW5jdGlvbihidWZmZXIpe1xuXHRcdCAqIFx0Ly9kbyBzb21ldGhpbmcgd2l0aCB0aGUgb3V0cHV0IGJ1ZmZlclxuXHRcdCAqIH0pXG5cdFx0ICovXG5cdCAgICBUb25lLk9mZmxpbmUgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgLy9zZXQgdGhlIE9mZmxpbmVBdWRpb0NvbnRleHRcblx0ICAgICAgICB2YXIgc2FtcGxlUmF0ZSA9IFRvbmUuY29udGV4dC5zYW1wbGVSYXRlO1xuXHQgICAgICAgIHZhciBvcmlnaW5hbENvbnRleHQgPSBUb25lLmNvbnRleHQ7XG5cdCAgICAgICAgdmFyIHJlbmRlclJldCA9IGF0dGVtcHRSZW5kZXIoY2FsbGJhY2ssIGR1cmF0aW9uLCBzYW1wbGVSYXRlKTtcblx0ICAgICAgICB2YXIgcmVzcG9uc2UgPSByZW5kZXJSZXQucmVzcG9uc2U7XG5cdCAgICAgICAgdmFyIGNvbnRleHQgPSByZW5kZXJSZXQuY29udGV4dDtcblx0ICAgICAgICB2YXIgcmV0O1xuXHQgICAgICAgIGlmIChyZXNwb25zZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0ICAgICAgICAgICAgLy93YWl0IGZvciB0aGUgcHJvbWlzZSB0byByZXNvbHZlXG5cdCAgICAgICAgICAgIHJldCA9IHJlc3BvbnNlLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgLy90aGVuIHJlbmRlciB0aGUgYXVkaW9cblx0ICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnJlbmRlcigpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvL3Byb2Nlc3MgdGhlIGF1ZGlvXG5cdCAgICAgICAgICAgIHJldCA9IGNvbnRleHQucmVuZGVyKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vcmV0dXJuIHRoZSBvcmlnaW5hbCBBdWRpb0NvbnRleHRcblx0ICAgICAgICBUb25lLmNvbnRleHQgPSBvcmlnaW5hbENvbnRleHQ7XG5cdCAgICAgICAgLy9yZXR1cm4gdGhlIGF1ZGlvXG5cdCAgICAgICAgcmV0dXJuIHJldC50aGVuKGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgLy93cmFwIGl0IGluIGEgVG9uZS5CdWZmZXJcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLkJ1ZmZlcihidWZmZXIpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk9mZmxpbmU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogXHRAY2xhc3MgIFRvbmUuRWZmZWN0IGlzIHRoZSBiYXNlIGNsYXNzIGZvciBlZmZlY3RzLiBDb25uZWN0IHRoZSBlZmZlY3QgYmV0d2VlblxuXHRcdCAqIFx0ICAgICAgICB0aGUgZWZmZWN0U2VuZCBhbmQgZWZmZWN0UmV0dXJuIEdhaW5Ob2RlcywgdGhlbiBjb250cm9sIHRoZSBhbW91bnQgb2Zcblx0XHQgKiBcdCAgICAgICAgZWZmZWN0IHdoaWNoIGdvZXMgdG8gdGhlIG91dHB1dCB1c2luZyB0aGUgd2V0IGNvbnRyb2wuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZXxPYmplY3R9IFt3ZXRdIFRoZSBzdGFydGluZyB3ZXQgdmFsdWUuXG5cdFx0ICovXG5cdCAgICBUb25lLkVmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3dldCddLCBUb25lLkVmZmVjdCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRyeXdldCBrbm9iIHRvIGNvbnRyb2wgdGhlIGFtb3VudCBvZiBlZmZlY3Rcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Dcm9zc0ZhZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RyeVdldCA9IG5ldyBUb25lLkNyb3NzRmFkZShvcHRpb25zLndldCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHdldCBjb250cm9sIGlzIGhvdyBtdWNoIG9mIHRoZSBlZmZlY3RlZFxuXHRcdFx0ICogIHdpbGwgcGFzcyB0aHJvdWdoIHRvIHRoZSBvdXRwdXQuIDEgPSAxMDAlIGVmZmVjdGVkXG5cdFx0XHQgKiAgc2lnbmFsLCAwID0gMTAwJSBkcnkgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLndldCA9IHRoaXMuX2RyeVdldC5mYWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbm5lY3QgdGhlIGVmZmVjdFNlbmQgdG8gdGhlIGlucHV0IG9mIGh0ZSBlZmZlY3Rcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29ubmVjdCB0aGUgb3V0cHV0IG9mIHRoZSBlZmZlY3QgdG8gdGhlIGVmZmVjdFJldHVyblxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5fZHJ5V2V0LmEpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLmVmZmVjdFNlbmQpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuLmNvbm5lY3QodGhpcy5fZHJ5V2V0LmIpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldC5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ3dldCddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkVmZmVjdCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRWZmZWN0LmRlZmF1bHRzID0geyAnd2V0JzogMSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNoYWlucyB0aGUgZWZmZWN0IGluIGJldHdlZW4gdGhlIGVmZmVjdFNlbmQgYW5kIGVmZmVjdFJldHVyblxuXHRcdCAqICBAcGFyYW0gIHtUb25lfSBlZmZlY3Rcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuY29ubmVjdEVmZmVjdCA9IGZ1bmN0aW9uIChlZmZlY3QpIHtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuY2hhaW4oZWZmZWN0LCB0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnd2V0J10pO1xuXHQgICAgICAgIHRoaXMud2V0ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkF1dG9GaWx0ZXIgaXMgYSBUb25lLkZpbHRlciB3aXRoIGEgVG9uZS5MRk8gY29ubmVjdGVkIHRvIHRoZSBmaWx0ZXIgY3V0b2ZmIGZyZXF1ZW5jeS5cblx0XHQgKiAgICAgICAgIFNldHRpbmcgdGhlIExGTyByYXRlIGFuZCBkZXB0aCBhbGxvd3MgZm9yIGNvbnRyb2wgb3ZlciB0aGUgZmlsdGVyIG1vZHVsYXRpb24gcmF0ZSBcblx0XHQgKiAgICAgICAgIGFuZCBkZXB0aC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZnJlcXVlbmN5XSBUaGUgcmF0ZSBvZiB0aGUgTEZPLlxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeT19IGJhc2VGcmVxdWVuY3kgVGhlIGxvd2VyIHZhbHVlIG9mIHRoZSBMRk9zIG9zY2lsbGF0aW9uXG5cdCBcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeT19IG9jdGF2ZXMgVGhlIG51bWJlciBvZiBvY3RhdmVzIGFib3ZlIHRoZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jcmVhdGUgYW4gYXV0b2ZpbHRlciBhbmQgc3RhcnQgaXQncyBMRk9cblx0XHQgKiB2YXIgYXV0b0ZpbHRlciA9IG5ldyBUb25lLkF1dG9GaWx0ZXIoXCI0blwiKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICogLy9yb3V0ZSBhbiBvc2NpbGxhdG9yIHRocm91Z2ggdGhlIGZpbHRlciBhbmQgc3RhcnQgaXRcblx0XHQgKiB2YXIgb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS5jb25uZWN0KGF1dG9GaWx0ZXIpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2Jhc2VGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnb2N0YXZlcydcblx0ICAgICAgICBdLCBUb25lLkF1dG9GaWx0ZXIpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBkcml2ZXMgdGhlIGZpbHRlciBjdXRvZmZcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2FtcGxpdHVkZSc6IG9wdGlvbnMuZGVwdGhcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSByYW5nZSBvZiB0aGUgZmlsdGVyIG1vZHVsYXRpbmcgYmV0d2VlbiB0aGUgbWluIGFuZCBtYXggZnJlcXVlbmN5LiBcblx0XHRcdCAqIDAgPSBubyBtb2R1bGF0aW9uLiAxID0gZnVsbCBtb2R1bGF0aW9uLlxuXHRcdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IHRoaXMuX2xmby5hbXBsaXR1ZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBIb3cgZmFzdCB0aGUgZmlsdGVyIG1vZHVsYXRlcyBiZXR3ZWVuIG1pbiBhbmQgbWF4LiBcblx0XHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2xmby5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpbHRlciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5maWx0ZXIgPSBuZXcgVG9uZS5GaWx0ZXIob3B0aW9ucy5maWx0ZXIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvY3RhdmVzIHBsYWNlaG9sZGVyXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vY3RhdmVzID0gMDtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuZmlsdGVyKTtcblx0ICAgICAgICB0aGlzLl9sZm8uY29ubmVjdCh0aGlzLmZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIHRoaXMuYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgIH07XG5cdCAgICAvL2V4dGVuZCBFZmZlY3Rcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXV0b0ZpbHRlciwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHRzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMSxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnZGVwdGgnOiAxLFxuXHQgICAgICAgICdiYXNlRnJlcXVlbmN5JzogMjAwLFxuXHQgICAgICAgICdvY3RhdmVzJzogMi42LFxuXHQgICAgICAgICdmaWx0ZXInOiB7XG5cdCAgICAgICAgICAgICd0eXBlJzogJ2xvd3Bhc3MnLFxuXHQgICAgICAgICAgICAncm9sbG9mZic6IC0xMixcblx0ICAgICAgICAgICAgJ1EnOiAxXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0YXJ0IHRoZSBlZmZlY3QuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIExGTyB3aWxsIHN0YXJ0LiBcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9sZm8uc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RvcCB0aGUgZWZmZWN0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBMRk8gd2lsbCBzdG9wLiBcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGZpbHRlciB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW2RlbGF5PTBdIERlbGF5IHRpbWUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBlZmZlY3QgYWZ0ZXIgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNwb3J0IGhhcyBzdGFydGVkLiBcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoZGVsYXkpIHtcblx0ICAgICAgICB0aGlzLl9sZm8uc3luYyhkZWxheSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVW5zeW5jIHRoZSBmaWx0ZXIgZnJvbSB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2xmby51bnN5bmMoKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUeXBlIG9mIG9zY2lsbGF0b3IgYXR0YWNoZWQgdG8gdGhlIEF1dG9GaWx0ZXIuIFxuXHRcdCAqIFBvc3NpYmxlIHZhbHVlczogXCJzaW5lXCIsIFwic3F1YXJlXCIsIFwidHJpYW5nbGVcIiwgXCJzYXd0b290aFwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9GaWx0ZXIjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm8udHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbmltdW0gdmFsdWUgb2YgdGhlIGZpbHRlcidzIGN1dG9mZiBmcmVxdWVuY3kuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b0ZpbHRlciNcblx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUsICdiYXNlRnJlcXVlbmN5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvLm1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvLm1pbiA9IHRoaXMudG9GcmVxdWVuY3koZnJlcSk7XG5cdCAgICAgICAgICAgIC8vYW5kIHNldCB0aGUgbWF4XG5cdCAgICAgICAgICAgIHRoaXMub2N0YXZlcyA9IHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgZmlsdGVyJ3MgY3V0b2ZmIGZyZXF1ZW5jeS4gXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b0ZpbHRlciNcblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQG5hbWUgb2N0YXZlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUsICdvY3RhdmVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9jdCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0O1xuXHQgICAgICAgICAgICB0aGlzLl9sZm8ubWF4ID0gdGhpcy5iYXNlRnJlcXVlbmN5ICogTWF0aC5wb3coMiwgb2N0KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC4gXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2xmby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZpbHRlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5maWx0ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXV0b0ZpbHRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQXV0b1Bhbm5lciBpcyBhIFRvbmUuUGFubmVyIHdpdGggYW4gTEZPIGNvbm5lY3RlZCB0byB0aGUgcGFuIGFtb3VudC4gXG5cdFx0ICogICAgICAgICBNb3JlIG9uIHVzaW5nIGF1dG9wYW5uZXJzIFtoZXJlXShodHRwczovL3d3dy5hYmxldG9uLmNvbS9lbi9ibG9nL2F1dG9wYW4tY2hvcHBlci1lZmZlY3QtYW5kLW1vcmUtbGl2ZXNjaG9vbC8pLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2ZyZXF1ZW5jeV0gUmF0ZSBvZiBsZWZ0LXJpZ2h0IG9zY2lsbGF0aW9uLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NyZWF0ZSBhbiBhdXRvcGFubmVyIGFuZCBzdGFydCBpdCdzIExGT1xuXHRcdCAqIHZhciBhdXRvUGFubmVyID0gbmV3IFRvbmUuQXV0b1Bhbm5lcihcIjRuXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKiAvL3JvdXRlIGFuIG9zY2lsbGF0b3IgdGhyb3VnaCB0aGUgcGFubmVyIGFuZCBzdGFydCBpdFxuXHRcdCAqIHZhciBvc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QoYXV0b1Bhbm5lcikuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2ZyZXF1ZW5jeSddLCBUb25lLkF1dG9QYW5uZXIpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBkcml2ZXMgdGhlIHBhbm5pbmdcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2FtcGxpdHVkZSc6IG9wdGlvbnMuZGVwdGgsXG5cdCAgICAgICAgICAgICdtaW4nOiAtMSxcblx0ICAgICAgICAgICAgJ21heCc6IDFcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBhbW91bnQgb2YgcGFubmluZyBiZXR3ZWVuIGxlZnQgYW5kIHJpZ2h0LiBcblx0XHRcdCAqIDAgPSBhbHdheXMgY2VudGVyLiAxID0gZnVsbCByYW5nZSBiZXR3ZWVuIGxlZnQgYW5kIHJpZ2h0LiBcblx0XHRcdCAqIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSB0aGlzLl9sZm8uYW1wbGl0dWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwYW5uZXIgbm9kZSB3aGljaCBkb2VzIHRoZSBwYW5uaW5nXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuUGFubmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYW5uZXIgPSBuZXcgVG9uZS5QYW5uZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEhvdyBmYXN0IHRoZSBwYW5uZXIgbW9kdWxhdGVzIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQuIFxuXHRcdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbGZvLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuX3Bhbm5lcik7XG5cdCAgICAgICAgdGhpcy5fbGZvLmNvbm5lY3QodGhpcy5fcGFubmVyLnBhbik7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2RlcHRoJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICAvL2V4dGVuZCBFZmZlY3Rcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXV0b1Bhbm5lciwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHRzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMSxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnZGVwdGgnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RhcnQgdGhlIGVmZmVjdC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgTEZPIHdpbGwgc3RhcnQuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIHRoZSBlZmZlY3QuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIExGTyB3aWxsIHN0b3AuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgcGFubmVyIHRvIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbZGVsYXk9MF0gRGVsYXkgdGltZSBiZWZvcmUgc3RhcnRpbmcgdGhlIGVmZmVjdCBhZnRlciB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc3BvcnQgaGFzIHN0YXJ0ZWQuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uIChkZWxheSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zeW5jKGRlbGF5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBVbnN5bmMgdGhlIHBhbm5lciBmcm9tIHRoZSB0cmFuc3BvcnRcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvUGFubmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9QYW5uZXIucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9sZm8udW5zeW5jKCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVHlwZSBvZiBvc2NpbGxhdG9yIGF0dGFjaGVkIHRvIHRoZSBBdXRvRmlsdGVyLiBcblx0XHQgKiBQb3NzaWJsZSB2YWx1ZXM6IFwic2luZVwiLCBcInNxdWFyZVwiLCBcInRyaWFuZ2xlXCIsIFwic2F3dG9vdGhcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmby50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdXRvUGFubmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9QYW5uZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9sZm8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2RlcHRoJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXV0b1Bhbm5lcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkF1dG9XYWggY29ubmVjdHMgYSBUb25lLkZvbGxvd2VyIHRvIGEgYmFuZHBhc3MgZmlsdGVyIChUb25lLkZpbHRlcikuXG5cdFx0ICogICAgICAgICAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgZmlsdGVyIGlzIGFkanVzdGVkIHByb3BvcnRpb25hbGx5IHRvIHRoZVxuXHRcdCAqICAgICAgICAgIGluY29taW5nIHNpZ25hbCdzIGFtcGxpdHVkZS4gSW5zcGlyYXRpb24gZnJvbSBbVHVuYS5qc10oaHR0cHM6Ly9naXRodWIuY29tL0RpbmFobW9lL3R1bmEpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2Jhc2VGcmVxdWVuY3ldIFRoZSBmcmVxdWVuY3kgdGhlIGZpbHRlciBpcyBzZXRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYXQgdGhlIGxvdyBwb2ludCBvZiB0aGUgd2FoXG5cdFx0ICogIEBwYXJhbSB7UG9zaXRpdmV9IFtvY3RhdmVzXSBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgYWJvdmUgdGhlIGJhc2VGcmVxdWVuY3lcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpbHRlciB3aWxsIHN3ZWVwIHRvIHdoZW4gZnVsbHkgb3BlblxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfSBbc2Vuc2l0aXZpdHldIFRoZSBkZWNpYmVsIHRocmVzaG9sZCBzZW5zaXRpdml0eSBmb3Jcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGluY29taW5nIHNpZ25hbC4gTm9ybWFsIHJhbmdlIG9mIC00MCB0byAwLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBhdXRvV2FoID0gbmV3IFRvbmUuQXV0b1dhaCg1MCwgNiwgLTMwKS50b01hc3RlcigpO1xuXHRcdCAqIC8vaW5pdGlhbGl6ZSB0aGUgc3ludGggYW5kIGNvbm5lY3QgdG8gYXV0b3dhaFxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBTeW50aC5jb25uZWN0KGF1dG9XYWgpO1xuXHRcdCAqIC8vUSB2YWx1ZSBpbmZsdWVuY2VzIHRoZSBlZmZlY3Qgb2YgdGhlIHdhaCAtIGRlZmF1bHQgaXMgMlxuXHRcdCAqIGF1dG9XYWguUS52YWx1ZSA9IDY7XG5cdFx0ICogLy9tb3JlIGF1ZGlibGUgb24gaGlnaGVyIG5vdGVzXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjhuXCIpXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9XYWggPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYmFzZUZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdvY3RhdmVzJyxcblx0ICAgICAgICAgICAgJ3NlbnNpdGl2aXR5J1xuXHQgICAgICAgIF0sIFRvbmUuQXV0b1dhaCk7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZW52ZWxvcGUgZm9sbG93ZXIuIFNldCB0aGUgYXR0YWNrL3JlbGVhc2Vcblx0XHRcdCAqICB0aW1pbmcgdG8gYWRqdXN0IGhvdyB0aGUgZW52ZWxvcGUgaXMgZm9sbG93ZWQuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRm9sbG93ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZm9sbG93ZXIgPSBuZXcgVG9uZS5Gb2xsb3dlcihvcHRpb25zLmZvbGxvd2VyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZXMgdGhlIGZvbGxvd2VyIHZhbHVlIHRvIHRoZSBmcmVxdWVuY3kgZG9tYWluXG5cdFx0XHQgKiAgQHR5cGUge1RvbmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UgPSBuZXcgVG9uZS5TY2FsZUV4cCgwLCAxLCAwLjUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Jhc2VGcmVxdWVuY3kgPSBvcHRpb25zLmJhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgaW5wdXQgZ2FpbiB0byBhZGp1c3QgdGhlIHNlbnNpdGl2aXR5XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW5wdXRCb29zdCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7QmlxdWFkRmlsdGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYmFuZHBhc3MgPSBuZXcgVG9uZS5GaWx0ZXIoe1xuXHQgICAgICAgICAgICAncm9sbG9mZic6IC00OCxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IDAsXG5cdCAgICAgICAgICAgICdRJzogb3B0aW9ucy5RXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wZWFraW5nID0gbmV3IFRvbmUuRmlsdGVyKDAsICdwZWFraW5nJyk7XG5cdCAgICAgICAgdGhpcy5fcGVha2luZy5nYWluLnZhbHVlID0gb3B0aW9ucy5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGdhaW4gb2YgdGhlIGZpbHRlci5cblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmdhaW4gPSB0aGlzLl9wZWFraW5nLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgcXVhbGl0eSBvZiB0aGUgZmlsdGVyLlxuXHRcdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5RID0gdGhpcy5fYmFuZHBhc3MuUTtcblx0ICAgICAgICAvL3RoZSBjb250cm9sIHNpZ25hbCBwYXRoXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmNoYWluKHRoaXMuX2lucHV0Qm9vc3QsIHRoaXMuZm9sbG93ZXIsIHRoaXMuX3N3ZWVwUmFuZ2UpO1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UuY29ubmVjdCh0aGlzLl9iYW5kcGFzcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UuY29ubmVjdCh0aGlzLl9wZWFraW5nLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy90aGUgZmlsdGVyZWQgcGF0aFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5jaGFpbih0aGlzLl9iYW5kcGFzcywgdGhpcy5fcGVha2luZywgdGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgICAgIC8vc2V0IHRoZSBpbml0aWFsIHZhbHVlXG5cdCAgICAgICAgdGhpcy5fc2V0U3dlZXBSYW5nZSgpO1xuXHQgICAgICAgIHRoaXMuc2Vuc2l0aXZpdHkgPSBvcHRpb25zLnNlbnNpdGl2aXR5O1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2dhaW4nLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkF1dG9XYWgsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9XYWguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2Jhc2VGcmVxdWVuY3knOiAxMDAsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiA2LFxuXHQgICAgICAgICdzZW5zaXRpdml0eSc6IDAsXG5cdCAgICAgICAgJ1EnOiAyLFxuXHQgICAgICAgICdnYWluJzogMixcblx0ICAgICAgICAnZm9sbG93ZXInOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjMsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyB0aGF0IHRoZSBmaWx0ZXIgd2lsbCBzd2VlcCBhYm92ZSB0aGVcblx0XHQgKiBiYXNlRnJlcXVlbmN5LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9XYWgjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBvY3RhdmVzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvV2FoLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0YXZlcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0YXZlcztcblx0ICAgICAgICAgICAgdGhpcy5fc2V0U3dlZXBSYW5nZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGJhc2UgZnJlcXVlbmN5IGZyb20gd2hpY2ggdGhlIHN3ZWVwIHdpbGwgc3RhcnQgZnJvbS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvV2FoI1xuXHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogQG5hbWUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b1dhaC5wcm90b3R5cGUsICdiYXNlRnJlcXVlbmN5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJhc2VGcmVxKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2Jhc2VGcmVxdWVuY3kgPSBiYXNlRnJlcTtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0U3dlZXBSYW5nZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHNlbnNpdGl2aXR5IHRvIGNvbnRyb2wgaG93IHJlc3BvbnNpdmUgdG8gdGhlIGlucHV0IHNpZ25hbCB0aGUgZmlsdGVyIGlzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9XYWgjXG5cdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdCAqIEBuYW1lIHNlbnNpdGl2aXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvV2FoLnByb3RvdHlwZSwgJ3NlbnNpdGl2aXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5nYWluVG9EYigxIC8gdGhpcy5faW5wdXRCb29zdC5nYWluLnZhbHVlKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNlbnNpdGl2eSkge1xuXHQgICAgICAgICAgICB0aGlzLl9pbnB1dEJvb3N0LmdhaW4udmFsdWUgPSAxIC8gVG9uZS5kYlRvR2FpbihzZW5zaXRpdnkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIHNldHMgdGhlIHN3ZWVwIHJhbmdlIG9mIHRoZSBzY2FsZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1dhaC5wcm90b3R5cGUuX3NldFN3ZWVwUmFuZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5taW4gPSB0aGlzLl9iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UubWF4ID0gTWF0aC5taW4odGhpcy5fYmFzZUZyZXF1ZW5jeSAqIE1hdGgucG93KDIsIHRoaXMuX29jdGF2ZXMpLCB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZSAvIDIpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXV0b1dhaH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvV2FoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5mb2xsb3dlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mb2xsb3dlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYmFuZHBhc3MuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2JhbmRwYXNzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wZWFraW5nLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9wZWFraW5nID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9pbnB1dEJvb3N0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9pbnB1dEJvb3N0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdnYWluJyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5nYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLlEgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkF1dG9XYWg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBTaWduYWwtcmF0ZSBtb2R1bG8gb3BlcmF0b3IuIE9ubHkgd29ya3MgaW4gQXVkaW9SYW5nZSBbLTEsIDFdIGFuZCBmb3IgbW9kdWx1c1xuXHRcdCAqICAgICAgICAgdmFsdWVzIGluIHRoZSBOb3JtYWxSYW5nZS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gbW9kdWx1cyBUaGUgbW9kdWx1cyB0byBhcHBseS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbW9kID0gbmV3IFRvbmUuTW9kdWxvKDAuMilcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDAuNSkuY29ubmVjdChtb2QpO1xuXHRcdCAqIC8vbW9kIG91dHB1dHMgMC4xXG5cdFx0ICovXG5cdCAgICBUb25lLk1vZHVsbyA9IGZ1bmN0aW9uIChtb2R1bHVzKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgd2F2ZXNoYXBlciBnZXRzIHRoZSBpbnRlZ2VyIG11bHRpcGxlIG9mXG5cdFx0XHQgKiAgdGhlIGlucHV0IHNpZ25hbCBhbmQgdGhlIG1vZHVsdXMuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihNYXRoLnBvdygyLCAxNikpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBpbnRlZ2VyIG11bHRpcGxlIGlzIG11bHRpcGxpZWQgYnkgdGhlIG1vZHVsdXNcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5ID0gbmV3IFRvbmUuTXVsdGlwbHkoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBhbmQgc3VidHJhY3RlZCBmcm9tIHRoZSBpbnB1dCBzaWduYWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtb2R1bHVzIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZFNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbChtb2R1bHVzKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5pbnB1dC5mYW4odGhpcy5fc2hhcGVyLCB0aGlzLl9zdWJ0cmFjdCk7XG5cdCAgICAgICAgdGhpcy5fbW9kU2lnbmFsLmNvbm5lY3QodGhpcy5fbXVsdGlwbHksIDAsIDApO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5jb25uZWN0KHRoaXMuX211bHRpcGx5LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aXBseS5jb25uZWN0KHRoaXMuX3N1YnRyYWN0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9zZXRXYXZlU2hhcGVyKG1vZHVsdXMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTW9kdWxvLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gIG1vZCAgdGhlIG1vZHVsdXMgdG8gYXBwbHlcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9kdWxvLnByb3RvdHlwZS5fc2V0V2F2ZVNoYXBlciA9IGZ1bmN0aW9uIChtb2QpIHtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuc2V0TWFwKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgdmFyIG11bHRpcGxlID0gTWF0aC5mbG9vcigodmFsICsgMC4wMDAxKSAvIG1vZCk7XG5cdCAgICAgICAgICAgIHJldHVybiBtdWx0aXBsZTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbW9kdWx1cyB2YWx1ZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Nb2R1bG8jXG5cdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Nb2R1bG8ucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2RTaWduYWwudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtb2QpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kU2lnbmFsLnZhbHVlID0gbW9kO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRXYXZlU2hhcGVyKG1vZCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb2R1bG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9kdWxvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tdWx0aXBseS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kU2lnbmFsLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2RTaWduYWwgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1vZHVsbztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQml0Y3J1c2hlciBkb3duc2FtcGxlcyB0aGUgaW5jb21pbmcgc2lnbmFsIHRvIGEgZGlmZmVyZW50IGJpdGRlcHRoLlxuXHRcdCAqICAgICAgICAgTG93ZXJpbmcgdGhlIGJpdGRlcHRoIG9mIHRoZSBzaWduYWwgY3JlYXRlcyBkaXN0b3J0aW9uLiBSZWFkIG1vcmUgYWJvdXQgQml0Y3J1c2hpbmdcblx0XHQgKiAgICAgICAgIG9uIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JpdGNydXNoZXIpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBiaXRzIFRoZSBudW1iZXIgb2YgYml0cyB0byBkb3duc2FtcGxlIHRoZSBzaWduYWwuIE5vbWluYWwgcmFuZ2Vcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgb2YgMSB0byA4LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vaW5pdGlhbGl6ZSBjcnVzaGVyIGFuZCByb3V0ZSBhIHN5bnRoIHRocm91Z2ggaXRcblx0XHQgKiB2YXIgY3J1c2hlciA9IG5ldyBUb25lLkJpdENydXNoZXIoNCkudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5Nb25vU3ludGgoKS5jb25uZWN0KGNydXNoZXIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CaXRDcnVzaGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnYml0cyddLCBUb25lLkJpdENydXNoZXIpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgdmFyIGludlN0ZXBTaXplID0gMSAvIE1hdGgucG93KDIsIG9wdGlvbnMuYml0cyAtIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFN1YnRyYWN0IHRoZSBpbnB1dCBzaWduYWwgYW5kIHRoZSBtb2R1bHVzIG9mIHRoZSBpbnB1dCBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2QgZnVuY3Rpb25cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTW9kdWxvfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bG8gPSBuZXcgVG9uZS5Nb2R1bG8oaW52U3RlcFNpemUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGtlZXBzIHRyYWNrIG9mIHRoZSBiaXRzXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYml0cyA9IG9wdGlvbnMuYml0cztcblx0ICAgICAgICAvL2Nvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuZmFuKHRoaXMuX3N1YnRyYWN0LCB0aGlzLl9tb2R1bG8pO1xuXHQgICAgICAgIHRoaXMuX21vZHVsby5jb25uZWN0KHRoaXMuX3N1YnRyYWN0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdC5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkJpdENydXNoZXIsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CaXRDcnVzaGVyLmRlZmF1bHRzID0geyAnYml0cyc6IDQgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBiaXQgZGVwdGggb2YgdGhlIGVmZmVjdC4gTm9taW5hbCByYW5nZSBvZiAxLTguXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQml0Q3J1c2hlciNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIGJpdHNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJpdENydXNoZXIucHJvdG90eXBlLCAnYml0cycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JpdHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChiaXRzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2JpdHMgPSBiaXRzO1xuXHQgICAgICAgICAgICB2YXIgaW52U3RlcFNpemUgPSAxIC8gTWF0aC5wb3coMiwgYml0cyAtIDEpO1xuXHQgICAgICAgICAgICB0aGlzLl9tb2R1bG8udmFsdWUgPSBpbnZTdGVwU2l6ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQml0Q3J1c2hlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CaXRDcnVzaGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bG8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsbyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQml0Q3J1c2hlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ2hlYnlTaGV2IGlzIGEgQ2hlYnlzaGV2IHdhdmVzaGFwZXIsIGFuIGVmZmVjdCB3aGljaCBpcyBnb29kIFxuXHRcdCAqICAgICAgICAgZm9yIG1ha2luZyBkaWZmZXJlbnQgdHlwZXMgb2YgZGlzdG9ydGlvbiBzb3VuZHMuXG5cdFx0ICogICAgICAgICBOb3RlIHRoYXQgb2RkIG9yZGVycyBzb3VuZCB2ZXJ5IGRpZmZlcmVudCBmcm9tIGV2ZW4gb25lcywgXG5cdFx0ICogICAgICAgICBhbmQgb3JkZXIgPSAxIGlzIG5vIGNoYW5nZS4gXG5cdFx0ICogICAgICAgICBSZWFkIG1vcmUgYXQgW211c2ljLmNvbHVtYmlhLmVkdV0oaHR0cDovL211c2ljLmNvbHVtYmlhLmVkdS9jbWMvbXVzaWNhbmRjb21wdXRlcnMvY2hhcHRlcjQvMDRfMDYucGhwKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1Bvc2l0aXZlfE9iamVjdH0gW29yZGVyXSBUaGUgb3JkZXIgb2YgdGhlIGNoZWJ5c2hldiBwb2x5bm9taWFsLiBOb3JtYWwgcmFuZ2UgYmV0d2VlbiAxLTEwMC4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jcmVhdGUgYSBuZXcgY2hlYnlcblx0XHQgKiB2YXIgY2hlYnkgPSBuZXcgVG9uZS5DaGVieXNoZXYoNTApO1xuXHRcdCAqIC8vY3JlYXRlIGEgbW9ub3N5bnRoIGNvbm5lY3RlZCB0byBvdXIgY2hlYnlcblx0XHQgKiBzeW50aCA9IG5ldyBUb25lLk1vbm9TeW50aCgpLmNvbm5lY3QoY2hlYnkpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DaGVieXNoZXYgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydvcmRlciddLCBUb25lLkNoZWJ5c2hldik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG5ldyBUb25lLldhdmVTaGFwZXIoNDA5Nik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBob2xkcyBvbnRvIHRoZSBvcmRlciBvZiB0aGUgZmlsdGVyXG5cdFx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29yZGVyID0gb3B0aW9ucy5vcmRlcjtcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fc2hhcGVyKTtcblx0ICAgICAgICB0aGlzLm9yZGVyID0gb3B0aW9ucy5vcmRlcjtcblx0ICAgICAgICB0aGlzLm92ZXJzYW1wbGUgPSBvcHRpb25zLm92ZXJzYW1wbGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DaGVieXNoZXYsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DaGVieXNoZXYuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29yZGVyJzogMSxcblx0ICAgICAgICAnb3ZlcnNhbXBsZSc6ICdub25lJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBnZXQgdGhlIGNvZWZmaWNpZW50IGZvciB0aGF0IGRlZ3JlZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0geCB0aGUgeCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gICB7bnVtYmVyfSBkZWdyZWUgXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBtZW1vIG1lbW9pemUgdGhlIGNvbXB1dGVkIHZhbHVlLiBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBzcGVlZHMgdXAgY29tcHV0YXRpb24gZ3JlYXRseS4gXG5cdFx0ICogIEByZXR1cm4gIHtudW1iZXJ9ICAgICAgIHRoZSBjb2VmZmljaWVudCBcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hlYnlzaGV2LnByb3RvdHlwZS5fZ2V0Q29lZmZpY2llbnQgPSBmdW5jdGlvbiAoeCwgZGVncmVlLCBtZW1vKSB7XG5cdCAgICAgICAgaWYgKG1lbW8uaGFzT3duUHJvcGVydHkoZGVncmVlKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gbWVtb1tkZWdyZWVdO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoZGVncmVlID09PSAwKSB7XG5cdCAgICAgICAgICAgIG1lbW9bZGVncmVlXSA9IDA7XG5cdCAgICAgICAgfSBlbHNlIGlmIChkZWdyZWUgPT09IDEpIHtcblx0ICAgICAgICAgICAgbWVtb1tkZWdyZWVdID0geDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBtZW1vW2RlZ3JlZV0gPSAyICogeCAqIHRoaXMuX2dldENvZWZmaWNpZW50KHgsIGRlZ3JlZSAtIDEsIG1lbW8pIC0gdGhpcy5fZ2V0Q29lZmZpY2llbnQoeCwgZGVncmVlIC0gMiwgbWVtbyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBtZW1vW2RlZ3JlZV07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG9yZGVyIG9mIHRoZSBDaGVieXNoZXYgcG9seW5vbWlhbCB3aGljaCBjcmVhdGVzXG5cdFx0ICogdGhlIGVxdWF0aW9uIHdoaWNoIGlzIGFwcGxpZWQgdG8gdGhlIGluY29taW5nIFxuXHRcdCAqIHNpZ25hbCB0aHJvdWdoIGEgVG9uZS5XYXZlU2hhcGVyLiBUaGUgZXF1YXRpb25zXG5cdFx0ICogYXJlIGluIHRoZSBmb3JtOjxicj5cblx0XHQgKiBvcmRlciAyOiAyeF4yICsgMTxicj5cblx0XHQgKiBvcmRlciAzOiA0eF4zICsgM3ggPGJyPlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkNoZWJ5c2hldiNcblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQG5hbWUgb3JkZXJcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNoZWJ5c2hldi5wcm90b3R5cGUsICdvcmRlcicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yZGVyO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob3JkZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JkZXIgPSBvcmRlcjtcblx0ICAgICAgICAgICAgdmFyIGN1cnZlID0gbmV3IEFycmF5KDQwOTYpO1xuXHQgICAgICAgICAgICB2YXIgbGVuID0gY3VydmUubGVuZ3RoO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgeCA9IGkgKiAyIC8gbGVuIC0gMTtcblx0ICAgICAgICAgICAgICAgIGlmICh4ID09PSAwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9zaG91bGQgb3V0cHV0IDAgd2hlbiBpbnB1dCBpcyAwXG5cdCAgICAgICAgICAgICAgICAgICAgY3VydmVbaV0gPSAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBjdXJ2ZVtpXSA9IHRoaXMuX2dldENvZWZmaWNpZW50KHgsIG9yZGVyLCB7fSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fc2hhcGVyLmN1cnZlID0gY3VydmU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3ZlcnNhbXBsaW5nIG9mIHRoZSBlZmZlY3QuIENhbiBlaXRoZXIgYmUgXCJub25lXCIsIFwiMnhcIiBvciBcIjR4XCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hlYnlzaGV2I1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgb3ZlcnNhbXBsZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2hlYnlzaGV2LnByb3RvdHlwZSwgJ292ZXJzYW1wbGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaGFwZXIub3ZlcnNhbXBsZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG92ZXJzYW1wbGluZykge1xuXHQgICAgICAgICAgICB0aGlzLl9zaGFwZXIub3ZlcnNhbXBsZSA9IG92ZXJzYW1wbGluZztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC4gXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNoZWJ5c2hldn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DaGVieXNoZXYucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ2hlYnlzaGV2O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQmFzZSBjbGFzcyBmb3IgU3RlcmVvIGVmZmVjdHMuIFByb3ZpZGVzIGVmZmVjdFNlbmRML1IgYW5kIGVmZmVjdFJldHVybkwvUi5cblx0XHQgKlxuXHRcdCAqXHRAY29uc3RydWN0b3Jcblx0XHQgKlx0QGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9FZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3dldCddLCBUb25lLkVmZmVjdCk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkcnl3ZXQga25vYiB0byBjb250cm9sIHRoZSBhbW91bnQgb2YgZWZmZWN0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ3Jvc3NGYWRlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kcnlXZXQgPSBuZXcgVG9uZS5Dcm9zc0ZhZGUob3B0aW9ucy53ZXQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB3ZXQgY29udHJvbCwgaS5lLiBob3cgbXVjaCBvZiB0aGUgZWZmZWN0ZWRcblx0XHRcdCAqICB3aWxsIHBhc3MgdGhyb3VnaCB0byB0aGUgb3V0cHV0LlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLndldCA9IHRoaXMuX2RyeVdldC5mYWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZW4gc3BsaXQgaXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3BsaXQgPSBuZXcgVG9uZS5TcGxpdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBlZmZlY3RzIHNlbmQgTEVGVFxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTCA9IHRoaXMuX3NwbGl0LmxlZnQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGVmZmVjdHMgc2VuZCBSSUdIVFxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUiA9IHRoaXMuX3NwbGl0LnJpZ2h0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzdGVyZW8gZWZmZWN0IG1lcmdlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk1lcmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGVmZmVjdCByZXR1cm4gTEVGVFxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5MID0gdGhpcy5fbWVyZ2UubGVmdDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZWZmZWN0IHJldHVybiBSSUdIVFxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5SID0gdGhpcy5fbWVyZ2UucmlnaHQ7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLl9zcGxpdCk7XG5cdCAgICAgICAgLy9kcnkgd2V0IGNvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuX2RyeVdldCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UuY29ubmVjdCh0aGlzLl9kcnlXZXQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldC5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ3dldCddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlN0ZXJlb0VmZmVjdCwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TdGVyZW9FZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21lcmdlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybkwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWyd3ZXQnXSk7XG5cdCAgICAgICAgdGhpcy53ZXQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlN0ZXJlb0VmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ2hvcnVzIGlzIGEgc3RlcmVvIGNob3J1cyBlZmZlY3QgY29tcG9zZWQgb2Zcblx0XHQgKiAgICAgICAgIGEgbGVmdCBhbmQgcmlnaHQgZGVsYXkgd2l0aCBhIFRvbmUuTEZPIGFwcGxpZWQgdG8gdGhlIGRlbGF5VGltZSBvZiBlYWNoIGNoYW5uZWwuXG5cdFx0ICogICAgICAgICBJbnNwaXJhdGlvbiBmcm9tIFtUdW5hLmpzXShodHRwczovL2dpdGh1Yi5jb20vRGluYWhtb2UvdHVuYS9ibG9iL21hc3Rlci90dW5hLmpzKS5cblx0XHQgKiAgICAgICAgIFJlYWQgbW9yZSBvbiB0aGUgY2hvcnVzIGVmZmVjdCBvbiBbU291bmRPblNvdW5kXShodHRwOi8vd3d3LnNvdW5kb25zb3VuZC5jb20vc29zL2p1bjA0L2FydGljbGVzL3N5bnRoc2VjcmV0cy5odG0pLlxuXHRcdCAqXG5cdFx0ICpcdEBjb25zdHJ1Y3RvclxuXHRcdCAqXHRAZXh0ZW5kcyB7VG9uZS5TdGVyZW9FZmZlY3R9XG5cdFx0ICpcdEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2ZyZXF1ZW5jeV0gVGhlIGZyZXF1ZW5jeSBvZiB0aGUgTEZPLlxuXHRcdCAqXHRAcGFyYW0ge01pbGxpc2Vjb25kc30gW2RlbGF5VGltZV0gVGhlIGRlbGF5IG9mIHRoZSBjaG9ydXMgZWZmZWN0IGluIG1zLlxuXHRcdCAqXHRAcGFyYW0ge05vcm1hbFJhbmdlfSBbZGVwdGhdIFRoZSBkZXB0aCBvZiB0aGUgY2hvcnVzLlxuXHRcdCAqXHRAZXhhbXBsZVxuXHRcdCAqIHZhciBjaG9ydXMgPSBuZXcgVG9uZS5DaG9ydXMoNCwgMi41LCAwLjUpO1xuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLlBvbHlTeW50aCg0LCBUb25lLk1vbm9TeW50aCkuY29ubmVjdChjaG9ydXMpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFtcIkMzXCIsXCJFM1wiLFwiRzNcIl0sIFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkNob3J1cyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0sIFRvbmUuQ2hvcnVzKTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZXB0aCBvZiB0aGUgY2hvcnVzXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVwdGggPSBvcHRpb25zLmRlcHRoO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheVRpbWVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheVRpbWUgPSBvcHRpb25zLmRlbGF5VGltZSAvIDEwMDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBjb250cm9scyB0aGUgZGVsYXlUaW1lXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9MID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDFcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBhbm90aGVyIExGTyBmb3IgdGhlIHJpZ2h0IHNpZGUgd2l0aCBhIDE4MCBkZWdyZWUgcGhhc2UgZGlmZlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgICAgICdtYXgnOiAxLFxuXHQgICAgICAgICAgICAncGhhc2UnOiAxODBcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBkZWxheSBmb3IgbGVmdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGVMID0gbmV3IFRvbmUuRGVsYXkoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBkZWxheSBmb3IgcmlnaHRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlUiA9IG5ldyBUb25lLkRlbGF5KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZnJlcXVlbmN5IG9mIHRoZSBMRk8gd2hpY2ggbW9kdWxhdGVzIHRoZSBkZWxheVRpbWUuXG5cdFx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9sZm9MLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jaGFpbih0aGlzLl9kZWxheU5vZGVMLCB0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY2hhaW4odGhpcy5fZGVsYXlOb2RlUiwgdGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICAvL2FuZCBwYXNzIHRocm91Z2ggdG8gbWFrZSB0aGUgZGV0dW5lIGFwcGFyZW50XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgLy9sZm8gc2V0dXBcblx0ICAgICAgICB0aGlzLl9sZm9MLmNvbm5lY3QodGhpcy5fZGVsYXlOb2RlTC5kZWxheVRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IuY29ubmVjdCh0aGlzLl9kZWxheU5vZGVSLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgbGZvXG5cdCAgICAgICAgdGhpcy5fbGZvTC5zdGFydCgpO1xuXHQgICAgICAgIHRoaXMuX2xmb1Iuc3RhcnQoKTtcblx0ICAgICAgICAvL2hhdmUgb25lIExGTyBmcmVxdWVuY3kgY29udHJvbCB0aGUgb3RoZXJcblx0ICAgICAgICB0aGlzLl9sZm9MLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX2xmb1IuZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3NldCB0aGUgaW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICB0aGlzLmRlcHRoID0gdGhpcy5fZGVwdGg7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kudmFsdWUgPSBvcHRpb25zLmZyZXF1ZW5jeTtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydmcmVxdWVuY3knXSk7XG5cdCAgICAgICAgdGhpcy5zcHJlYWQgPSBvcHRpb25zLnNwcmVhZDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNob3J1cywgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hvcnVzLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAxLjUsXG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDMuNSxcblx0ICAgICAgICAnZGVwdGgnOiAwLjcsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ3NwcmVhZCc6IDE4MFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZXB0aCBvZiB0aGUgZWZmZWN0LiBBIGRlcHRoIG9mIDEgbWFrZXMgdGhlIGRlbGF5VGltZVxuXHRcdCAqIG1vZHVsYXRlIGJldHdlZW4gMCBhbmQgMipkZWxheVRpbWUgKGNlbnRlcmVkIGFyb3VuZCB0aGUgZGVsYXlUaW1lKS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaG9ydXMjXG5cdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqIEBuYW1lIGRlcHRoXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaG9ydXMucHJvdG90eXBlLCAnZGVwdGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXB0aDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGRlcHRoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlcHRoID0gZGVwdGg7XG5cdCAgICAgICAgICAgIHZhciBkZXZpYXRpb24gPSB0aGlzLl9kZWxheVRpbWUgKiBkZXB0aDtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5taW4gPSBNYXRoLm1heCh0aGlzLl9kZWxheVRpbWUgLSBkZXZpYXRpb24sIDApO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLm1heCA9IHRoaXMuX2RlbGF5VGltZSArIGRldmlhdGlvbjtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi5taW4gPSBNYXRoLm1heCh0aGlzLl9kZWxheVRpbWUgLSBkZXZpYXRpb24sIDApO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLm1heCA9IHRoaXMuX2RlbGF5VGltZSArIGRldmlhdGlvbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWxheVRpbWUgaW4gbWlsbGlzZWNvbmRzIG9mIHRoZSBjaG9ydXMuIEEgbGFyZ2VyIGRlbGF5VGltZVxuXHRcdCAqIHdpbGwgZ2l2ZSBhIG1vcmUgcHJvbm91bmNlZCBlZmZlY3QuIE5vbWluYWwgcmFuZ2UgYSBkZWxheVRpbWVcblx0XHQgKiBpcyBiZXR3ZWVuIDIgYW5kIDIwbXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hvcnVzI1xuXHRcdCAqIEB0eXBlIHtNaWxsaXNlY29uZHN9XG5cdFx0ICogQG5hbWUgZGVsYXlUaW1lXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaG9ydXMucHJvdG90eXBlLCAnZGVsYXlUaW1lJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVsYXlUaW1lICogMTAwMDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGRlbGF5VGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9kZWxheVRpbWUgPSBkZWxheVRpbWUgLyAxMDAwO1xuXHQgICAgICAgICAgICB0aGlzLmRlcHRoID0gdGhpcy5fZGVwdGg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3NjaWxsYXRvciB0eXBlIG9mIHRoZSBMRk8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hvcnVzI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2hvcnVzLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm9MLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBBbW91bnQgb2Ygc3RlcmVvIHNwcmVhZC4gV2hlbiBzZXQgdG8gMCwgYm90aCBMRk8ncyB3aWxsIGJlIHBhbm5lZCBjZW50cmFsbHkuXG5cdFx0ICogV2hlbiBzZXQgdG8gMTgwLCBMRk8ncyB3aWxsIGJlIHBhbm5lZCBoYXJkIGxlZnQgYW5kIHJpZ2h0IHJlc3BlY3RpdmVseS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaG9ydXMjXG5cdFx0ICogQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogQG5hbWUgc3ByZWFkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaG9ydXMucHJvdG90eXBlLCAnc3ByZWFkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvUi5waGFzZSAtIHRoaXMuX2xmb0wucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzcHJlYWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5waGFzZSA9IDkwIC0gc3ByZWFkIC8gMjtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi5waGFzZSA9IHNwcmVhZCAvIDIgKyA5MDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ2hvcnVzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNob3J1cy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2xmb0wuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb1IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZUwuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZUwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZVIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZVIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdmcmVxdWVuY3knKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ2hvcnVzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuQ29udm9sdmVyIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIE5hdGl2ZSBXZWIgQXVkaW9cblx0XHQgKiAgICAgICAgICBbQ29udm9sdmVyTm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtY29udm9sdmVybm9kZS1pbnRlcmZhY2UpLlxuXHRcdCAqICAgICAgICAgIENvbnZvbHV0aW9uIGlzIHVzZWZ1bCBmb3IgcmV2ZXJiIGFuZCBmaWx0ZXIgZW11bGF0aW9uLiBSZWFkIG1vcmUgYWJvdXQgY29udm9sdXRpb24gcmV2ZXJiIG9uXG5cdFx0ICogICAgICAgICAgW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29udm9sdXRpb25fcmV2ZXJiKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ3xUb25lLkJ1ZmZlcnxPYmplY3R9IFt1cmxdIFRoZSBVUkwgb2YgdGhlIGltcHVsc2UgcmVzcG9uc2Ugb3IgdGhlIFRvbmUuQnVmZmVyXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlhbmluZyB0aGUgaW1wdWxzZSByZXNwb25zZS5cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbj19IG9ubG9hZCBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIHVybCBpcyBsb2FkZWQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9pbml0aWFsaXppbmcgdGhlIGNvbnZvbHZlciB3aXRoIGFuIGltcHVsc2UgcmVzcG9uc2Vcblx0XHQgKiB2YXIgY29udm9sdmVyID0gbmV3IFRvbmUuQ29udm9sdmVyKFwiLi9wYXRoL3RvL2lyLndhdlwiKS50b01hc3RlcigpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db252b2x2ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndXJsJyxcblx0ICAgICAgICAgICAgJ29ubG9hZCdcblx0ICAgICAgICBdLCBUb25lLkNvbnZvbHZlcik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb252b2x2ZXIgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtDb252b2x2ZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb252b2x2ZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQ29udm9sdmVyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGNvbnZvbHV0aW9uIGJ1ZmZlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKG9wdGlvbnMudXJsLCBmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnZvbHZlci5idWZmZXIgPSBidWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgICAgIG9wdGlvbnMub25sb2FkKCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fY29udm9sdmVyKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNvbnZvbHZlciwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db252b2x2ZXIuZGVmYXVsdHMgPSB7ICdvbmxvYWQnOiBUb25lLm5vT3AgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY29udm9sdmVyJ3MgYnVmZmVyXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNvbnZvbHZlciNcblx0XHQgKiAgQHR5cGUge0F1ZGlvQnVmZmVyfVxuXHRcdCAqICBAbmFtZSBidWZmZXJcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNvbnZvbHZlci5wcm90b3R5cGUsICdidWZmZXInLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnNldChidWZmZXIpO1xuXHQgICAgICAgICAgICB0aGlzLl9jb252b2x2ZXIuYnVmZmVyID0gdGhpcy5fYnVmZmVyLmdldCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIExvYWQgYW4gaW1wdWxzZSByZXNwb25zZSB1cmwgYXMgYW4gYXVkaW8gYnVmZmVyLlxuXHRcdCAqICBEZWNvZGVzIHRoZSBhdWRpbyBhc3luY2hyb25vdXNseSBhbmQgaW52b2tlc1xuXHRcdCAqICB0aGUgY2FsbGJhY2sgb25jZSB0aGUgYXVkaW8gYnVmZmVyIGxvYWRzLlxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSB1cmwgb2YgdGhlIGJ1ZmZlciB0byBsb2FkLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIGZpbGV0eXBlIHN1cHBvcnQgZGVwZW5kcyBvbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICBicm93c2VyLlxuXHRcdCAqICBAcGFyYW0gIHtmdW5jdGlvbj19IGNhbGxiYWNrXG5cdFx0ICogIEByZXR1cm5zIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db252b2x2ZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubG9hZCh1cmwsIGZ1bmN0aW9uIChidWZmKSB7XG5cdCAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gYnVmZjtcblx0ICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNvbnZvbHZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db252b2x2ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9jb252b2x2ZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNvbnZvbHZlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRGlzdG9ydGlvbiBpcyBhIHNpbXBsZSBkaXN0b3J0aW9uIGVmZmVjdCB1c2luZyBUb25lLldhdmVTaGFwZXIuXG5cdFx0ICogICAgICAgICBBbGdvcml0aG0gZnJvbSBbYSBzdGFja292ZXJmbG93IGFuc3dlcl0oaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjIzMTM0MDgpLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfE9iamVjdH0gW2Rpc3RvcnRpb25dIFRoZSBhbW91bnQgb2YgZGlzdG9ydGlvbiAobm9taW5hbCByYW5nZSBvZiAwLTEpXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGRpc3QgPSBuZXcgVG9uZS5EaXN0b3J0aW9uKDAuOCkudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgZm0gPSBuZXcgVG9uZS5TaW1wbGVGTSgpLmNvbm5lY3QoZGlzdCk7XG5cdFx0ICogLy90aGlzIHNvdW5kcyBnb29kIG9uIGJhc3Mgbm90ZXNcblx0XHQgKiBmbS50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkExXCIsIFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkRpc3RvcnRpb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydkaXN0b3J0aW9uJ10sIFRvbmUuRGlzdG9ydGlvbik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKDQwOTYpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogaG9sZHMgdGhlIGRpc3RvcnRpb24gYW1vdW50XG5cdFx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Rpc3RvcnRpb24gPSBvcHRpb25zLmRpc3RvcnRpb247XG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuX3NoYXBlcik7XG5cdCAgICAgICAgdGhpcy5kaXN0b3J0aW9uID0gb3B0aW9ucy5kaXN0b3J0aW9uO1xuXHQgICAgICAgIHRoaXMub3ZlcnNhbXBsZSA9IG9wdGlvbnMub3ZlcnNhbXBsZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkRpc3RvcnRpb24sIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EaXN0b3J0aW9uLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkaXN0b3J0aW9uJzogMC40LFxuXHQgICAgICAgICdvdmVyc2FtcGxlJzogJ25vbmUnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGFtb3VudCBvZiBkaXN0b3J0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkRpc3RvcnRpb24jXG5cdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqIEBuYW1lIGRpc3RvcnRpb25cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkRpc3RvcnRpb24ucHJvdG90eXBlLCAnZGlzdG9ydGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3RvcnRpb247XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChhbW91bnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGlzdG9ydGlvbiA9IGFtb3VudDtcblx0ICAgICAgICAgICAgdmFyIGsgPSBhbW91bnQgKiAxMDA7XG5cdCAgICAgICAgICAgIHZhciBkZWcgPSBNYXRoLlBJIC8gMTgwO1xuXHQgICAgICAgICAgICB0aGlzLl9zaGFwZXIuc2V0TWFwKGZ1bmN0aW9uICh4KSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMoeCkgPCAwLjAwMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vc2hvdWxkIG91dHB1dCAwIHdoZW4gaW5wdXQgaXMgMFxuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDMgKyBrKSAqIHggKiAyMCAqIGRlZyAvIChNYXRoLlBJICsgayAqIE1hdGguYWJzKHgpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3ZlcnNhbXBsaW5nIG9mIHRoZSBlZmZlY3QuIENhbiBlaXRoZXIgYmUgXCJub25lXCIsIFwiMnhcIiBvciBcIjR4XCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRGlzdG9ydGlvbiNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIG92ZXJzYW1wbGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkRpc3RvcnRpb24ucHJvdG90eXBlLCAnb3ZlcnNhbXBsZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob3ZlcnNhbXBsaW5nKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlID0gb3ZlcnNhbXBsaW5nO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLiBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRGlzdG9ydGlvbn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EaXN0b3J0aW9uLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkRpc3RvcnRpb247XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogXHRAY2xhc3MgIFRvbmUuRmVlZGJhY2tFZmZlY3QgcHJvdmlkZXMgYSBsb29wIGJldHdlZW4gYW4gXG5cdFx0ICogXHQgICAgICAgIGF1ZGlvIHNvdXJjZSBhbmQgaXRzIG93biBvdXRwdXQuIFRoaXMgaXMgYSBiYXNlLWNsYXNzXG5cdFx0ICogXHQgICAgICAgIGZvciBmZWVkYmFjayBlZmZlY3RzLiBcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfE9iamVjdH0gW2ZlZWRiYWNrXSBUaGUgaW5pdGlhbCBmZWVkYmFjayB2YWx1ZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydmZWVkYmFjayddLCBUb25lLkZlZWRiYWNrRWZmZWN0KTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBnYWluIHdoaWNoIGNvbnRyb2xzIHRoZSBmZWVkYmFja1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrR2FpbiA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5mZWVkYmFjaywgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIHNpZ25hbCB3aGljaCBpcyBmZWQgYmFjayBpbnRvIHRoZSBlZmZlY3QgaW5wdXQuIFxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gdGhpcy5fZmVlZGJhY2tHYWluLmdhaW47XG5cdCAgICAgICAgLy90aGUgZmVlZGJhY2sgbG9vcFxuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuLmNoYWluKHRoaXMuX2ZlZWRiYWNrR2FpbiwgdGhpcy5lZmZlY3RTZW5kKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRmVlZGJhY2tFZmZlY3QsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrRWZmZWN0LmRlZmF1bHRzID0geyAnZmVlZGJhY2snOiAwLjEyNSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLiBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRmVlZGJhY2tFZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrR2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tHYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GZWVkYmFja0VmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkZlZWRiYWNrRGVsYXkgaXMgYSBEZWxheU5vZGUgaW4gd2hpY2ggcGFydCBvZiBvdXRwdXRcblx0XHQgKiAgICAgICAgICBzaWduYWwgaXMgZmVkIGJhY2sgaW50byB0aGUgZGVsYXkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkZlZWRiYWNrRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZGVsYXlUaW1lXSBUaGUgZGVsYXkgYXBwbGllZCB0byB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlPX0gZmVlZGJhY2sgVGhlIGFtb3VudCBvZiB0aGUgZWZmZWN0ZWQgc2lnbmFsIHdoaWNoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZmVkIGJhY2sgdGhyb3VnaCB0aGUgZGVsYXkuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGZlZWRiYWNrRGVsYXkgPSBuZXcgVG9uZS5GZWVkYmFja0RlbGF5KFwiOG5cIiwgMC41KS50b01hc3RlcigpO1xuXHRcdCAqIHZhciB0b20gPSBuZXcgVG9uZS5EcnVtU3ludGgoe1xuXHRcdCAqIFx0XCJvY3RhdmVzXCIgOiA0LFxuXHRcdCAqIFx0XCJwaXRjaERlY2F5XCIgOiAwLjFcblx0XHQgKiB9KS5jb25uZWN0KGZlZWRiYWNrRGVsYXkpO1xuXHRcdCAqIHRvbS50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkEyXCIsXCIzMm5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrRGVsYXkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ2ZlZWRiYWNrJ1xuXHQgICAgICAgIF0sIFRvbmUuRmVlZGJhY2tEZWxheSk7XG5cdCAgICAgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IG5ldyBUb25lLkRlbGF5KG9wdGlvbnMuZGVsYXlUaW1lLCBvcHRpb25zLm1heERlbGF5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVsYXlUaW1lIG9mIHRoZSBEZWxheU5vZGUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSB0aGlzLl9kZWxheU5vZGUuZGVsYXlUaW1lO1xuXHQgICAgICAgIC8vIGNvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fZGVsYXlOb2RlKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2RlbGF5VGltZSddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZlZWRiYWNrRGVsYXksIFRvbmUuRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy5cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tEZWxheS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMC4yNSxcblx0ICAgICAgICAnbWF4RGVsYXknOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZlZWRiYWNrRGVsYXl9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tEZWxheS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnZGVsYXlUaW1lJ10pO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GZWVkYmFja0RlbGF5O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBhbiBhcnJheSBvZiBjb21iIGZpbHRlciBkZWxheSB2YWx1ZXMgZnJvbSBGcmVldmVyYiBpbXBsZW1lbnRhdGlvblxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBjb21iRmlsdGVyVHVuaW5ncyA9IFtcblx0ICAgICAgICAxNTU3IC8gNDQxMDAsXG5cdCAgICAgICAgMTYxNyAvIDQ0MTAwLFxuXHQgICAgICAgIDE0OTEgLyA0NDEwMCxcblx0ICAgICAgICAxNDIyIC8gNDQxMDAsXG5cdCAgICAgICAgMTI3NyAvIDQ0MTAwLFxuXHQgICAgICAgIDEzNTYgLyA0NDEwMCxcblx0ICAgICAgICAxMTg4IC8gNDQxMDAsXG5cdCAgICAgICAgMTExNiAvIDQ0MTAwXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIGFuIGFycmF5IG9mIGFsbHBhc3MgZmlsdGVyIGZyZXF1ZW5jeSB2YWx1ZXMgZnJvbSBGcmVldmVyYiBpbXBsZW1lbnRhdGlvblxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXMgPSBbXG5cdCAgICAgICAgMjI1LFxuXHQgICAgICAgIDU1Nixcblx0ICAgICAgICA0NDEsXG5cdCAgICAgICAgMzQxXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkZyZWV2ZXJiIGlzIGEgcmV2ZXJiIGJhc2VkIG9uIFtGcmVldmVyYl0oaHR0cHM6Ly9jY3JtYS5zdGFuZm9yZC5lZHUvfmpvcy9wYXNwL0ZyZWV2ZXJiLmh0bWwpLlxuXHRcdCAqICAgICAgICAgUmVhZCBtb3JlIG9uIHJldmVyYiBvbiBbU291bmQgT24gU291bmRdKGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE2MDQwNDA4MzkwMi9odHRwOi8vd3d3LnNvdW5kb25zb3VuZC5jb206ODAvc29zL2ZlYjAxL2FydGljbGVzL3N5bnRoc2VjcmV0cy5hc3ApLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V8T2JqZWN0fSBbcm9vbVNpemVdIENvcnJlbGF0ZWQgdG8gdGhlIGRlY2F5IHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbZGFtcGVuaW5nXSBUaGUgY3V0b2ZmIGZyZXF1ZW5jeSBvZiBhIGxvd3Bhc3MgZmlsdGVyIGFzIHBhcnRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSByZXZlcmIuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGZyZWV2ZXJiID0gbmV3IFRvbmUuRnJlZXZlcmIoKS50b01hc3RlcigpO1xuXHRcdCAqIGZyZWV2ZXJiLmRhbXBlbmluZy52YWx1ZSA9IDEwMDA7XG5cdFx0ICogLy9yb3V0aW5nIHN5bnRoIHRocm91Z2ggdGhlIHJldmVyYlxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLkFNU3ludGgoKS5jb25uZWN0KGZyZWV2ZXJiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlZXZlcmIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAncm9vbVNpemUnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0sIFRvbmUuRnJlZXZlcmIpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJvb21TaXplIHZhbHVlIGJldHdlZW4uIEEgbGFyZ2VyIHJvb21TaXplXG5cdFx0XHQgKiAgd2lsbCByZXN1bHQgaW4gYSBsb25nZXIgZGVjYXkuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5yb29tU2l6ZSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGRhbXBlbmluZyBvZiB0aGUgcmV2ZXJiZXJhbnQgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kYW1wZW5pbmcsIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBjb21iIGZpbHRlcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbWJGaWx0ZXJzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFsbHBhc3MgZmlsdGVycyBvbiB0aGUgbGVmdFxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFsbHBhc3MgZmlsdGVycyBvbiB0aGUgcmlnaHRcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUiA9IFtdO1xuXHQgICAgICAgIC8vbWFrZSB0aGUgYWxscGFzcyBmaWx0ZXJzIG9uIHRoZSByaWdodFxuXHQgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgYWxscGFzc0ZpbHRlckZyZXF1ZW5jaWVzLmxlbmd0aDsgbCsrKSB7XG5cdCAgICAgICAgICAgIHZhciBhbGxwYXNzTCA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICAgICAgYWxscGFzc0wudHlwZSA9ICdhbGxwYXNzJztcblx0ICAgICAgICAgICAgYWxscGFzc0wuZnJlcXVlbmN5LnZhbHVlID0gYWxscGFzc0ZpbHRlckZyZXF1ZW5jaWVzW2xdO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0wucHVzaChhbGxwYXNzTCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vbWFrZSB0aGUgYWxscGFzcyBmaWx0ZXJzIG9uIHRoZSBsZWZ0XG5cdCAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXMubGVuZ3RoOyByKyspIHtcblx0ICAgICAgICAgICAgdmFyIGFsbHBhc3NSID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgICAgICBhbGxwYXNzUi50eXBlID0gJ2FsbHBhc3MnO1xuXHQgICAgICAgICAgICBhbGxwYXNzUi5mcmVxdWVuY3kudmFsdWUgPSBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXNbcl07XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUi5wdXNoKGFsbHBhc3NSKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9tYWtlIHRoZSBjb21iIGZpbHRlcnNcblx0ICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNvbWJGaWx0ZXJUdW5pbmdzLmxlbmd0aDsgYysrKSB7XG5cdCAgICAgICAgICAgIHZhciBsZnBmID0gbmV3IFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIoY29tYkZpbHRlclR1bmluZ3NbY10pO1xuXHQgICAgICAgICAgICBpZiAoYyA8IGNvbWJGaWx0ZXJUdW5pbmdzLmxlbmd0aCAvIDIpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY2hhaW4obGZwZiwgdGhpcy5fYWxscGFzc0ZpbHRlcnNMWzBdKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY2hhaW4obGZwZiwgdGhpcy5fYWxscGFzc0ZpbHRlcnNSWzBdKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnJvb21TaXplLmNvbm5lY3QobGZwZi5yZXNvbmFuY2UpO1xuXHQgICAgICAgICAgICB0aGlzLmRhbXBlbmluZy5jb25uZWN0KGxmcGYuZGFtcGVuaW5nKTtcblx0ICAgICAgICAgICAgdGhpcy5fY29tYkZpbHRlcnMucHVzaChsZnBmKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jaGFpbiB0aGUgYWxscGFzcyBmaWx0ZXJzIHRvZ2V0ZWhyXG5cdCAgICAgICAgVG9uZS5jb25uZWN0U2VyaWVzLmFwcGx5KFRvbmUsIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTCk7XG5cdCAgICAgICAgVG9uZS5jb25uZWN0U2VyaWVzLmFwcGx5KFRvbmUsIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUik7XG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMW3RoaXMuX2FsbHBhc3NGaWx0ZXJzTC5sZW5ndGggLSAxXS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSW3RoaXMuX2FsbHBhc3NGaWx0ZXJzUi5sZW5ndGggLSAxXS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAncm9vbVNpemUnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRnJlZXZlcmIsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZWV2ZXJiLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdyb29tU2l6ZSc6IDAuNyxcblx0ICAgICAgICAnZGFtcGVuaW5nJzogMzAwMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRnJlZXZlcmJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlZXZlcmIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBhbCA9IDA7IGFsIDwgdGhpcy5fYWxscGFzc0ZpbHRlcnNMLmxlbmd0aDsgYWwrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0xbYWxdLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMW2FsXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTCA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgYXIgPSAwOyBhciA8IHRoaXMuX2FsbHBhc3NGaWx0ZXJzUi5sZW5ndGg7IGFyKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSW2FyXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUlthcl0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1IgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIGNmID0gMDsgY2YgPCB0aGlzLl9jb21iRmlsdGVycy5sZW5ndGg7IGNmKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fY29tYkZpbHRlcnNbY2ZdLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fY29tYkZpbHRlcnNbY2ZdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY29tYkZpbHRlcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3Jvb21TaXplJyxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZydcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLnJvb21TaXplLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJvb21TaXplID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRhbXBlbmluZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZyZWV2ZXJiO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBhbiBhcnJheSBvZiB0aGUgY29tYiBmaWx0ZXIgZGVsYXkgdGltZSB2YWx1ZXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgY29tYkZpbHRlckRlbGF5VGltZXMgPSBbXG5cdCAgICAgICAgMTY4NyAvIDI1MDAwLFxuXHQgICAgICAgIDE2MDEgLyAyNTAwMCxcblx0ICAgICAgICAyMDUzIC8gMjUwMDAsXG5cdCAgICAgICAgMjI1MSAvIDI1MDAwXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSByZXNvbmFuY2VzIG9mIGVhY2ggb2YgdGhlIGNvbWIgZmlsdGVyc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBjb21iRmlsdGVyUmVzb25hbmNlcyA9IFtcblx0ICAgICAgICAwLjc3Myxcblx0ICAgICAgICAwLjgwMixcblx0ICAgICAgICAwLjc1Myxcblx0ICAgICAgICAwLjczM1xuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgYWxscGFzcyBmaWx0ZXIgZnJlcXVlbmNpZXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgYWxscGFzc0ZpbHRlckZyZXFzID0gW1xuXHQgICAgICAgIDM0Nyxcblx0ICAgICAgICAxMTMsXG5cdCAgICAgICAgMzdcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuSkNSZXZlcmIgaXMgYSBzaW1wbGUgW1NjaHJvZWRlciBSZXZlcmJlcmF0b3JdKGh0dHBzOi8vY2NybWEuc3RhbmZvcmQuZWR1L35qb3MvcGFzcC9TY2hyb2VkZXJfUmV2ZXJiZXJhdG9ycy5odG1sKVxuXHRcdCAqICAgICAgICAgdHVuZWQgYnkgSm9obiBDaG93bmluZyBpbiAxOTcwLlxuXHRcdCAqICAgICAgICAgSXQgaXMgbWFkZSB1cCBvZiB0aHJlZSBhbGxwYXNzIGZpbHRlcnMgYW5kIGZvdXIgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIuXG5cdFx0ICpcblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfE9iamVjdH0gW3Jvb21TaXplXSBDb29yZWxhdGVzIHRvIHRoZSBkZWNheSB0aW1lLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciByZXZlcmIgPSBuZXcgVG9uZS5KQ1JldmVyYigwLjQpLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHRcdCAqIHZhciBkZWxheSA9IG5ldyBUb25lLkZlZWRiYWNrRGVsYXkoMC41KTtcblx0XHQgKiAvL2Nvbm5lY3RpbmcgdGhlIHN5bnRoIHRvIHJldmVyYiB0aHJvdWdoIGRlbGF5XG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuRHVvU3ludGgoKS5jaGFpbihkZWxheSwgcmV2ZXJiKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkE0XCIsXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuSkNSZXZlcmIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydyb29tU2l6ZSddLCBUb25lLkpDUmV2ZXJiKTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHJvb20gc2l6ZSBjb250cm9sIHZhbHVlcyBiZXR3ZWVuIFswLDFdXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5yb29tU2l6ZSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgcm9vbSBzaXplXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2NhbGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlUm9vbVNpemUgPSBuZXcgVG9uZS5TY2FsZSgtMC43MzMsIDAuMTk3KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBhIHNlcmllcyBvZiBhbGxwYXNzIGZpbHRlcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcGFyYWxsZWwgZmVlZGJhY2sgY29tYiBmaWx0ZXJzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzID0gW107XG5cdCAgICAgICAgLy9tYWtlIHRoZSBhbGxwYXNzIGZpbHRlcnNcblx0ICAgICAgICBmb3IgKHZhciBhZiA9IDA7IGFmIDwgYWxscGFzc0ZpbHRlckZyZXFzLmxlbmd0aDsgYWYrKykge1xuXHQgICAgICAgICAgICB2YXIgYWxscGFzcyA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICAgICAgYWxscGFzcy50eXBlID0gJ2FsbHBhc3MnO1xuXHQgICAgICAgICAgICBhbGxwYXNzLmZyZXF1ZW5jeS52YWx1ZSA9IGFsbHBhc3NGaWx0ZXJGcmVxc1thZl07XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzLnB1c2goYWxscGFzcyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vYW5kIHRoZSBjb21iIGZpbHRlcnNcblx0ICAgICAgICBmb3IgKHZhciBjZiA9IDA7IGNmIDwgY29tYkZpbHRlckRlbGF5VGltZXMubGVuZ3RoOyBjZisrKSB7XG5cdCAgICAgICAgICAgIHZhciBmYmNmID0gbmV3IFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyKGNvbWJGaWx0ZXJEZWxheVRpbWVzW2NmXSwgMC4xKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGVSb29tU2l6ZS5jb25uZWN0KGZiY2YucmVzb25hbmNlKTtcblx0ICAgICAgICAgICAgZmJjZi5yZXNvbmFuY2UudmFsdWUgPSBjb21iRmlsdGVyUmVzb25hbmNlc1tjZl07XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzW3RoaXMuX2FsbHBhc3NGaWx0ZXJzLmxlbmd0aCAtIDFdLmNvbm5lY3QoZmJjZik7XG5cdCAgICAgICAgICAgIGlmIChjZiA8IGNvbWJGaWx0ZXJEZWxheVRpbWVzLmxlbmd0aCAvIDIpIHtcblx0ICAgICAgICAgICAgICAgIGZiY2YuY29ubmVjdCh0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgZmJjZi5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVycy5wdXNoKGZiY2YpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NoYWluIHRoZSBhbGxwYXNzIGZpbHRlcnMgdG9nZXRoZXJcblx0ICAgICAgICB0aGlzLnJvb21TaXplLmNvbm5lY3QodGhpcy5fc2NhbGVSb29tU2l6ZSk7XG5cdCAgICAgICAgVG9uZS5jb25uZWN0U2VyaWVzLmFwcGx5KFRvbmUsIHRoaXMuX2FsbHBhc3NGaWx0ZXJzKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNvbm5lY3QodGhpcy5fYWxscGFzc0ZpbHRlcnNbMF0pO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY29ubmVjdCh0aGlzLl9hbGxwYXNzRmlsdGVyc1swXSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydyb29tU2l6ZSddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkpDUmV2ZXJiLCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkpDUmV2ZXJiLmRlZmF1bHRzID0geyAncm9vbVNpemUnOiAwLjUgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSkNSZXZlcmJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSkNSZXZlcmIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBhcGYgPSAwOyBhcGYgPCB0aGlzLl9hbGxwYXNzRmlsdGVycy5sZW5ndGg7IGFwZisrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzW2FwZl0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1thcGZdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnMgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIGZiY2YgPSAwOyBmYmNmIDwgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVycy5sZW5ndGg7IGZiY2YrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzW2ZiY2ZdLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVyc1tmYmNmXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrQ29tYkZpbHRlcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsncm9vbVNpemUnXSk7XG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2NhbGVSb29tU2l6ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGVSb29tU2l6ZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuSkNSZXZlcmI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBNaWQvU2lkZSBwcm9jZXNzaW5nIHNlcGFyYXRlcyB0aGUgdGhlICdtaWQnIHNpZ25hbFxuXHRcdCAqICAgICAgICAgKHdoaWNoIGNvbWVzIG91dCBvZiBib3RoIHRoZSBsZWZ0IGFuZCB0aGUgcmlnaHQgY2hhbm5lbClcblx0XHQgKiAgICAgICAgIGFuZCB0aGUgJ3NpZGUnICh3aGljaCBvbmx5IGNvbWVzIG91dCBvZiB0aGUgdGhlIHNpZGUgY2hhbm5lbHMpXG5cdFx0ICogICAgICAgICBhbmQgZWZmZWN0cyB0aGVtIHNlcGFyYXRlbHkgYmVmb3JlIGJlaW5nIHJlY29tYmluZWQuXG5cdFx0ICogICAgICAgICBBcHBsaWVzIGEgTWlkL1NpZGUgc2VwZXJhdGlvbiBhbmQgcmVjb21iaW5hdGlvbi5cblx0XHQgKiAgICAgICAgIEFsZ29yaXRobSBmb3VuZCBpbiBba3ZyYXVkaW8gZm9ydW1zXShodHRwOi8vd3d3Lmt2cmF1ZGlvLmNvbS9mb3J1bS92aWV3dG9waWMucGhwP3Q9MjEyNTg3KS5cblx0XHQgKiAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICBUaGlzIGlzIGEgYmFzZS1jbGFzcyBmb3IgTWlkL1NpZGUgRWZmZWN0cy5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlRWZmZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZC9zaWRlIHNwbGl0XG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk1pZFNpZGVTcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0ID0gbmV3IFRvbmUuTWlkU2lkZVNwbGl0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZC9zaWRlIG1lcmdlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk1pZFNpZGVNZXJnZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlID0gbmV3IFRvbmUuTWlkU2lkZU1lcmdlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZCBzZW5kLiBDb25uZWN0IHRvIG1pZCBwcm9jZXNzaW5nXG5cdFx0XHQgKiAgQHR5cGUge1RvbmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkU2VuZCA9IHRoaXMuX21pZFNpZGVTcGxpdC5taWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHNpZGUgc2VuZC4gQ29ubmVjdCB0byBzaWRlIHByb2Nlc3Npbmdcblx0XHRcdCAqICBAdHlwZSB7VG9uZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zaWRlU2VuZCA9IHRoaXMuX21pZFNpZGVTcGxpdC5zaWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQgcmV0dXJuIGNvbm5lY3Rpb25cblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkUmV0dXJuID0gdGhpcy5fbWlkU2lkZU1lcmdlLm1pZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lkZSByZXR1cm4gY29ubmVjdGlvblxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zaWRlUmV0dXJuID0gdGhpcy5fbWlkU2lkZU1lcmdlLnNpZGU7XG5cdCAgICAgICAgLy90aGUgY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuY29ubmVjdCh0aGlzLl9taWRTaWRlU3BsaXQpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1pZFNpZGVFZmZlY3QsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWlkU2lkZUVmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1pZFNlbmQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZVNlbmQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWlkUmV0dXJuID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnNpZGVSZXR1cm4gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1pZFNpZGVFZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBoYXNlciBpcyBhIHBoYXNlciBlZmZlY3QuIFBoYXNlcnMgd29yayBieSBjaGFuZ2luZyB0aGUgcGhhc2Vcblx0XHQgKiAgICAgICAgIG9mIGRpZmZlcmVudCBmcmVxdWVuY3kgY29tcG9uZW50cyBvZiBhbiBpbmNvbWluZyBzaWduYWwuIFJlYWQgbW9yZSBvblxuXHRcdCAqICAgICAgICAgW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUGhhc2VyXyhlZmZlY3QpKS5cblx0XHQgKiAgICAgICAgIEluc3BpcmF0aW9uIGZvciB0aGlzIHBoYXNlciBjb21lcyBmcm9tIFtUdW5hLmpzXShodHRwczovL2dpdGh1Yi5jb20vRGluYWhtb2UvdHVuYS8pLlxuXHRcdCAqXG5cdFx0ICpcdEBleHRlbmRzIHtUb25lLlN0ZXJlb0VmZmVjdH1cblx0XHQgKlx0QGNvbnN0cnVjdG9yXG5cdFx0ICpcdEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2ZyZXF1ZW5jeV0gVGhlIHNwZWVkIG9mIHRoZSBwaGFzaW5nLlxuXHRcdCAqXHRAcGFyYW0ge251bWJlcn0gW29jdGF2ZXNdIFRoZSBvY3RhdmVzIG9mIHRoZSBlZmZlY3QuXG5cdFx0ICpcdEBwYXJhbSB7RnJlcXVlbmN5fSBbYmFzZUZyZXF1ZW5jeV0gVGhlIGJhc2UgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXJzLlxuXHRcdCAqXHRAZXhhbXBsZVxuXHRcdCAqIHZhciBwaGFzZXIgPSBuZXcgVG9uZS5QaGFzZXIoe1xuXHRcdCAqIFx0XCJmcmVxdWVuY3lcIiA6IDE1LFxuXHRcdCAqIFx0XCJvY3RhdmVzXCIgOiA1LFxuXHRcdCAqIFx0XCJiYXNlRnJlcXVlbmN5XCIgOiAxMDAwXG5cdFx0ICogfSkudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5GTVN5bnRoKCkuY29ubmVjdChwaGFzZXIpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiRTNcIiwgXCIyblwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGhhc2VyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vc2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdvY3RhdmVzJyxcblx0ICAgICAgICAgICAgJ2Jhc2VGcmVxdWVuY3knXG5cdCAgICAgICAgXSwgVG9uZS5QaGFzZXIpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBjb250cm9scyB0aGUgZnJlcXVlbmN5IG9uIHRoZSBsZWZ0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBuZXcgVG9uZS5MRk8ob3B0aW9ucy5mcmVxdWVuY3ksIDAsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZm8gd2hpY2ggY29udHJvbHMgdGhlIGZyZXF1ZW5jeSBvbiB0aGUgcmlnaHQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG5ldyBUb25lLkxGTyhvcHRpb25zLmZyZXF1ZW5jeSwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5waGFzZSA9IDE4MDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYmFzZSBtb2R1bGF0aW9uIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Jhc2VGcmVxdWVuY3kgPSBvcHRpb25zLmJhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG9jdGF2ZXMgb2YgdGhlIHBoYXNpbmdcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBxdWFsaXR5IGZhY3RvciBvZiB0aGUgZmlsdGVyc1xuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlEgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5RLCBUb25lLlR5cGUuUG9zaXRpdmUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhcnJheSBvZiBmaWx0ZXJzIGZvciB0aGUgbGVmdCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzTCA9IHRoaXMuX21ha2VGaWx0ZXJzKG9wdGlvbnMuc3RhZ2VzLCB0aGlzLl9sZm9MLCB0aGlzLlEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhcnJheSBvZiBmaWx0ZXJzIGZvciB0aGUgbGVmdCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzUiA9IHRoaXMuX21ha2VGaWx0ZXJzKG9wdGlvbnMuc3RhZ2VzLCB0aGlzLl9sZm9SLCB0aGlzLlEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogdGhlIGZyZXF1ZW5jeSBvZiB0aGUgZWZmZWN0XG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2xmb0wuZnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LnZhbHVlID0gb3B0aW9ucy5mcmVxdWVuY3k7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZW0gdXBcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNvbm5lY3QodGhpcy5fZmlsdGVyc0xbMF0pO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY29ubmVjdCh0aGlzLl9maWx0ZXJzUlswXSk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyc0xbb3B0aW9ucy5zdGFnZXMgLSAxXS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyc1Jbb3B0aW9ucy5zdGFnZXMgLSAxXS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgLy9jb250cm9sIHRoZSBmcmVxdWVuY3kgd2l0aCBvbmUgTEZPXG5cdCAgICAgICAgdGhpcy5fbGZvTC5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9sZm9SLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIG9wdGlvbnNcblx0ICAgICAgICB0aGlzLmJhc2VGcmVxdWVuY3kgPSBvcHRpb25zLmJhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy5vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIGxmb1xuXHQgICAgICAgIHRoaXMuX2xmb0wuc3RhcnQoKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnN0YXJ0KCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QaGFzZXIsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0c1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtvYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBoYXNlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMC41LFxuXHQgICAgICAgICdvY3RhdmVzJzogMyxcblx0ICAgICAgICAnc3RhZ2VzJzogMTAsXG5cdCAgICAgICAgJ1EnOiAxMCxcblx0ICAgICAgICAnYmFzZUZyZXF1ZW5jeSc6IDM1MFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gc3RhZ2VzXG5cdFx0ICogIEByZXR1cm5zIHtBcnJheX0gdGhlIG51bWJlciBvZiBmaWx0ZXJzIGFsbCBjb25uZWN0ZWQgdG9nZXRoZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGhhc2VyLnByb3RvdHlwZS5fbWFrZUZpbHRlcnMgPSBmdW5jdGlvbiAoc3RhZ2VzLCBjb25uZWN0VG9GcmVxLCBRKSB7XG5cdCAgICAgICAgdmFyIGZpbHRlcnMgPSBuZXcgQXJyYXkoc3RhZ2VzKTtcblx0ICAgICAgICAvL21ha2UgYWxsIHRoZSBmaWx0ZXJzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFnZXM7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZmlsdGVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgICAgICBmaWx0ZXIudHlwZSA9ICdhbGxwYXNzJztcblx0ICAgICAgICAgICAgUS5jb25uZWN0KGZpbHRlci5RKTtcblx0ICAgICAgICAgICAgY29ubmVjdFRvRnJlcS5jb25uZWN0KGZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgICAgICBmaWx0ZXJzW2ldID0gZmlsdGVyO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgZmlsdGVycyk7XG5cdCAgICAgICAgcmV0dXJuIGZpbHRlcnM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBvY3RhdmVzIHRoZSBwaGFzZSBnb2VzIGFib3ZlXG5cdFx0ICogdGhlIGJhc2VGcmVxdWVuY3lcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QaGFzZXIjXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBuYW1lIG9jdGF2ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBoYXNlci5wcm90b3R5cGUsICdvY3RhdmVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9jdGF2ZXMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9jdGF2ZXM7XG5cdCAgICAgICAgICAgIHZhciBtYXggPSB0aGlzLl9iYXNlRnJlcXVlbmN5ICogTWF0aC5wb3coMiwgb2N0YXZlcyk7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wubWF4ID0gbWF4O1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLm1heCA9IG1heDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0aGUgYmFzZSBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlcnMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGhhc2VyI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGhhc2VyLnByb3RvdHlwZSwgJ2Jhc2VGcmVxdWVuY3knLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgICAgICB0aGlzLl9iYXNlRnJlcXVlbmN5ID0gZnJlcTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5taW4gPSBmcmVxO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLm1pbiA9IGZyZXE7XG5cdCAgICAgICAgICAgIHRoaXMub2N0YXZlcyA9IHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGhhc2VyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBoYXNlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdRJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuUS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5RID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9MLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9MID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9SLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9SID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ZpbHRlcnNMLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNMW2ldLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc0xbaV0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzTCA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl9maWx0ZXJzUi5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzUltqXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNSW2pdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyc1IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QaGFzZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBKdXN0IGxpa2UgYSBzdGVyZW8gZmVlZGJhY2sgZWZmZWN0LCBidXQgdGhlIGZlZWRiYWNrIGlzIHJvdXRlZCBmcm9tIGxlZnQgdG8gcmlnaHRcblx0XHQgKiAgICAgICAgIGFuZCByaWdodCB0byBsZWZ0IGluc3RlYWQgb2Ygb24gdGhlIHNhbWUgY2hhbm5lbC5cblx0XHQgKlxuXHRcdCAqXHRAY29uc3RydWN0b3Jcblx0XHQgKlx0QGV4dGVuZHMge1RvbmUuU3RlcmVvRWZmZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydmZWVkYmFjayddLCBUb25lLkZlZWRiYWNrRWZmZWN0KTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZmVlZGJhY2sgZnJvbSB0aGUgb3V0cHV0XG5cdFx0XHQgKiAgYmFjayBpbnRvIHRoZSBpbnB1dCBvZiB0aGUgZWZmZWN0IChyb3V0ZWRcblx0XHRcdCAqICBhY3Jvc3MgbGVmdCBhbmQgcmlnaHQgY2hhbm5lbHMpLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZmVlZGJhY2ssIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxlZnQgc2lkZSBmZWViYWNrXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcmlnaHQgc2lkZSBmZWViYWNrXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSTCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybkwuY2hhaW4odGhpcy5fZmVlZGJhY2tMUiwgdGhpcy5lZmZlY3RTZW5kUik7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5SLmNoYWluKHRoaXMuX2ZlZWRiYWNrUkwsIHRoaXMuZWZmZWN0U2VuZEwpO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2suZmFuKHRoaXMuX2ZlZWRiYWNrTFIuZ2FpbiwgdGhpcy5fZmVlZGJhY2tSTC5nYWluKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0LCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnZmVlZGJhY2snXSk7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSTCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUGluZ1BvbmdEZWxheSBpcyBhIGZlZWRiYWNrIGRlbGF5IGVmZmVjdCB3aGVyZSB0aGUgZWNobyBpcyBoZWFyZFxuXHRcdCAqICAgICAgICAgIGZpcnN0IGluIG9uZSBjaGFubmVsIGFuZCBuZXh0IGluIHRoZSBvcHBvc2l0ZSBjaGFubmVsLiBJbiBhIHN0ZXJlb1xuXHRcdCAqICAgICAgICAgIHN5c3RlbSB0aGVzZSBhcmUgdGhlIHJpZ2h0IGFuZCBsZWZ0IGNoYW5uZWxzLlxuXHRcdCAqICAgICAgICAgIFBpbmdQb25nRGVsYXkgaW4gbW9yZSBzaW1wbGlmaWVkIHRlcm1zIGlzIHR3byBUb25lLkZlZWRiYWNrRGVsYXlzXG5cdFx0ICogICAgICAgICAgd2l0aCBpbmRlcGVuZGVudCBkZWxheSB2YWx1ZXMuIEVhY2ggZGVsYXkgaXMgcm91dGVkIHRvIG9uZSBjaGFubmVsXG5cdFx0ICogICAgICAgICAgKGxlZnQgb3IgcmlnaHQpLCBhbmQgdGhlIGNoYW5uZWwgdHJpZ2dlcmVkIHNlY29uZCB3aWxsIGFsd2F5c1xuXHRcdCAqICAgICAgICAgIHRyaWdnZXIgYXQgdGhlIHNhbWUgaW50ZXJ2YWwgYWZ0ZXIgdGhlIGZpcnN0LlxuXHRcdCAqXG5cdFx0ICogXHRAY29uc3RydWN0b3Jcblx0XHQgKiBcdEBleHRlbmRzIHtUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2RlbGF5VGltZV0gVGhlIGRlbGF5VGltZSBiZXR3ZWVuIGNvbnNlY3V0aXZlIGVjaG9zLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlPX0gZmVlZGJhY2sgVGhlIGFtb3VudCBvZiB0aGUgZWZmZWN0ZWQgc2lnbmFsIHdoaWNoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBmZWQgYmFjayB0aHJvdWdoIHRoZSBkZWxheS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcGluZ1BvbmcgPSBuZXcgVG9uZS5QaW5nUG9uZ0RlbGF5KFwiNG5cIiwgMC4yKS50b01hc3RlcigpO1xuXHRcdCAqIHZhciBkcnVtID0gbmV3IFRvbmUuRHJ1bVN5bnRoKCkuY29ubmVjdChwaW5nUG9uZyk7XG5cdFx0ICogZHJ1bS50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiMzJuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QaW5nUG9uZ0RlbGF5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZScsXG5cdCAgICAgICAgICAgICdmZWVkYmFjaydcblx0ICAgICAgICBdLCBUb25lLlBpbmdQb25nRGVsYXkpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5IG5vZGUgb24gdGhlIGxlZnQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZWZ0RGVsYXkgPSBuZXcgVG9uZS5EZWxheSgwLCBvcHRpb25zLm1heERlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5IG5vZGUgb24gdGhlIHJpZ2h0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmlnaHREZWxheSA9IG5ldyBUb25lLkRlbGF5KDAsIG9wdGlvbnMubWF4RGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcHJlZGVsYXkgb24gdGhlIHJpZ2h0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmlnaHRQcmVEZWxheSA9IG5ldyBUb25lLkRlbGF5KDAsIG9wdGlvbnMubWF4RGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgdGltZSBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRlbGF5VGltZSwgVG9uZS5UeXBlLlRpbWUpO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY2hhaW4odGhpcy5fbGVmdERlbGF5LCB0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY2hhaW4odGhpcy5fcmlnaHRQcmVEZWxheSwgdGhpcy5fcmlnaHREZWxheSwgdGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZS5mYW4odGhpcy5fbGVmdERlbGF5LmRlbGF5VGltZSwgdGhpcy5fcmlnaHREZWxheS5kZWxheVRpbWUsIHRoaXMuX3JpZ2h0UHJlRGVsYXkuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvL3JlYXJyYW5nZWQgdGhlIGZlZWRiYWNrIHRvIGJlIGFmdGVyIHRoZSByaWdodFByZURlbGF5XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUi5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUi5jb25uZWN0KHRoaXMuX3JpZ2h0RGVsYXkpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZGVsYXlUaW1lJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGluZ1BvbmdEZWxheSwgVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGluZ1BvbmdEZWxheS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMC4yNSxcblx0ICAgICAgICAnbWF4RGVsYXlUaW1lJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGluZ1BvbmdEZWxheX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QaW5nUG9uZ0RlbGF5LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbGVmdERlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZWZ0RGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0RGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0RGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0UHJlRGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0UHJlRGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnZGVsYXlUaW1lJ10pO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGluZ1BvbmdEZWxheTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGl0Y2hTaGlmdCBkb2VzIG5lYXItcmVhbHRpbWUgcGl0Y2ggc2hpZnRpbmcgdG8gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgICAgICAgIFRoZSBlZmZlY3QgaXMgYWNoaWV2ZWQgYnkgc3BlZWRpbmcgdXAgb3Igc2xvd2luZyBkb3duIHRoZSBkZWxheVRpbWVcblx0XHQgKiAgICAgICAgIG9mIGEgRGVsYXlOb2RlIHVzaW5nIGEgc2F3dG9vdGggd2F2ZS5cblx0XHQgKiAgICAgICAgIEFsZ29yaXRobSBmb3VuZCBpbiBbdGhpcyBwZGZdKGh0dHA6Ly9kc3AtYm9vay5uYXJvZC5ydS9zb3VuZHByb2MucGRmKS5cblx0XHQgKiAgICAgICAgIEFkZGl0aW9uYWwgcmVmZXJlbmNlIGJ5IFtNaWxsZXIgUHVja2V0XShodHRwOi8vbXNwLnVjc2QuZWR1L3RlY2huaXF1ZXMvdjAuMTEvYm9vay1odG1sL25vZGUxMTUuaHRtbCkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRmVlZGJhY2tFZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7SW50ZXJ2YWw9fSBwaXRjaCBUaGUgaW50ZXJ2YWwgdG8gdHJhbnNwb3NlIHRoZSBpbmNvbWluZyBzaWduYWwgYnkuXG5cdFx0ICovXG5cdCAgICBUb25lLlBpdGNoU2hpZnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydwaXRjaCddLCBUb25lLlBpdGNoU2hpZnQpO1xuXHQgICAgICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGl0Y2ggc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFVzZXMgdHdvIERlbGF5Tm9kZXMgdG8gY292ZXIgdXAgdGhlIGp1bXAgaW5cblx0XHRcdCAqICB0aGUgc2F3dG9vdGggd2F2ZS5cblx0XHRcdCAqICBAdHlwZSAge0RlbGF5Tm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlBID0gbmV3IFRvbmUuRGVsYXkoMCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpcnN0IExGTy5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9BID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgICAgICdtYXgnOiAwLjEsXG5cdCAgICAgICAgICAgICd0eXBlJzogJ3Nhd3Rvb3RoJ1xuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5fZGVsYXlBLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHNlY29uZCBEZWxheU5vZGVcblx0XHRcdCAqICBAdHlwZSAge0RlbGF5Tm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlCID0gbmV3IFRvbmUuRGVsYXkoMCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpcnN0IExGTy5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9CID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgICAgICdtYXgnOiAwLjEsXG5cdCAgICAgICAgICAgICd0eXBlJzogJ3Nhd3Rvb3RoJyxcblx0ICAgICAgICAgICAgJ3BoYXNlJzogMTgwXG5cdCAgICAgICAgfSkuY29ubmVjdCh0aGlzLl9kZWxheUIuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBDcm9zc2ZhZGUgcXVpY2tseSBiZXR3ZWVuIHRoZSB0d28gZGVsYXkgbGluZXNcblx0XHRcdCAqICB0byBjb3ZlciB1cCB0aGUganVtcCBpbiB0aGUgc2F3dG9vdGggd2F2ZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Dcm9zc0ZhZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZSA9IG5ldyBUb25lLkNyb3NzRmFkZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIExGTyB3aGljaCBhbHRlcm5hdGVzIGJldHdlZW4gdGhlIHR3b1xuXHRcdFx0ICogIGRlbGF5IGxpbmVzIHRvIGNvdmVyIHVwIHRoZSBkaXNwYXJpdHkgaW4gdGhlXG5cdFx0XHQgKiAgc2F3dG9vdGggd2F2ZS5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGVMRk8gPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDEsXG5cdCAgICAgICAgICAgICd0eXBlJzogJ3RyaWFuZ2xlJyxcblx0ICAgICAgICAgICAgJ3BoYXNlJzogOTBcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMuX2Nyb3NzRmFkZS5mYWRlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVsYXkgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0RlbGF5ID0gbmV3IFRvbmUuRGVsYXkob3B0aW9ucy5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZGVsYXkgb24gdGhlIGlucHV0IHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gdGhpcy5fZmVlZGJhY2tEZWxheS5kZWxheVRpbWU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2RlbGF5VGltZScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGQgdGhlIGN1cnJlbnQgcGl0Y2hcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9waXRjaCA9IG9wdGlvbnMucGl0Y2g7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZCB0aGUgY3VycmVudCB3aW5kb3dTaXplXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fd2luZG93U2l6ZSA9IG9wdGlvbnMud2luZG93U2l6ZTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIHR3byBkZWxheSBsaW5lcyB1cFxuXHQgICAgICAgIHRoaXMuX2RlbGF5QS5jb25uZWN0KHRoaXMuX2Nyb3NzRmFkZS5hKTtcblx0ICAgICAgICB0aGlzLl9kZWxheUIuY29ubmVjdCh0aGlzLl9jcm9zc0ZhZGUuYik7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBmcmVxdWVuY3lcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3kuZmFuKHRoaXMuX2xmb0EuZnJlcXVlbmN5LCB0aGlzLl9sZm9CLmZyZXF1ZW5jeSwgdGhpcy5fY3Jvc3NGYWRlTEZPLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy9yb3V0ZSB0aGUgaW5wdXRcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuZmFuKHRoaXMuX2RlbGF5QSwgdGhpcy5fZGVsYXlCKTtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGUuY2hhaW4odGhpcy5fZmVlZGJhY2tEZWxheSwgdGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIExGT3MgYXQgdGhlIHNhbWUgdGltZVxuXHQgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgIHRoaXMuX2xmb0Euc3RhcnQobm93KTtcblx0ICAgICAgICB0aGlzLl9sZm9CLnN0YXJ0KG5vdyk7XG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlTEZPLnN0YXJ0KG5vdyk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGluaXRpYWwgdmFsdWVcblx0ICAgICAgICB0aGlzLndpbmRvd1NpemUgPSB0aGlzLl93aW5kb3dTaXplO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGl0Y2hTaGlmdCwgVG9uZS5GZWVkYmFja0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuUGl0Y2hTaGlmdC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncGl0Y2gnOiAwLFxuXHQgICAgICAgICd3aW5kb3dTaXplJzogMC4xLFxuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLFxuXHQgICAgICAgICdmZWVkYmFjayc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXBpdGNoIHRoZSBpbmNvbWluZyBzaWduYWwgYnkgc29tZSBpbnRlcnZhbCAobWVhc3VyZWRcblx0XHQgKiBpbiBzZW1pLXRvbmVzKS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QaXRjaFNoaWZ0I1xuXHRcdCAqIEB0eXBlIHtJbnRlcnZhbH1cblx0XHQgKiBAbmFtZSBwaXRjaFxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogcGl0Y2hTaGlmdC5waXRjaCA9IC0xMjsgLy9kb3duIG9uZSBvY3RhdmVcblx0XHQgKiBwaXRjaFNoaWZ0LnBpdGNoID0gNzsgLy91cCBhIGZpZnRoXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QaXRjaFNoaWZ0LnByb3RvdHlwZSwgJ3BpdGNoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGl0Y2g7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9waXRjaCA9IGludGVydmFsO1xuXHQgICAgICAgICAgICB2YXIgZmFjdG9yID0gMDtcblx0ICAgICAgICAgICAgaWYgKGludGVydmFsIDwgMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQS5taW4gPSAwO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQS5tYXggPSB0aGlzLl93aW5kb3dTaXplO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQi5taW4gPSAwO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQi5tYXggPSB0aGlzLl93aW5kb3dTaXplO1xuXHQgICAgICAgICAgICAgICAgZmFjdG9yID0gVG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oaW50ZXJ2YWwgLSAxKSArIDE7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9BLm1pbiA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9BLm1heCA9IDA7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9CLm1pbiA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9CLm1heCA9IDA7XG5cdCAgICAgICAgICAgICAgICBmYWN0b3IgPSBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyhpbnRlcnZhbCkgLSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeS52YWx1ZSA9IGZhY3RvciAqICgxLjIgLyB0aGlzLl93aW5kb3dTaXplKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB3aW5kb3cgc2l6ZSBjb3JyZXNwb25kcyByb3VnaGx5IHRvIHRoZSBzYW1wbGUgbGVuZ3RoIGluIGEgbG9vcGluZyBzYW1wbGVyLlxuXHRcdCAqIFNtYWxsZXIgdmFsdWVzIGFyZSBkZXNpcmFibGUgZm9yIGEgbGVzcyBub3RpY2VhYmxlIGRlbGF5IHRpbWUgb2YgdGhlIHBpdGNoIHNoaWZ0ZWRcblx0XHQgKiBzaWduYWwsIGJ1dCBsYXJnZXIgdmFsdWVzIHdpbGwgcmVzdWx0IGluIHNtb290aGVyIHBpdGNoIHNoaWZ0aW5nIGZvciBsYXJnZXIgaW50ZXJ2YWxzLlxuXHRcdCAqIEEgbm9taW5hbCByYW5nZSBvZiAwLjAzIHRvIDAuMSBpcyByZWNvbW1lbmRlZC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QaXRjaFNoaWZ0I1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIHdpbmRvd1NpemVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHBpdGNoU2hpZnQud2luZG93U2l6ZSA9IDAuMTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBpdGNoU2hpZnQucHJvdG90eXBlLCAnd2luZG93U2l6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3dpbmRvd1NpemUgPSB0aGlzLnRvU2Vjb25kcyhzaXplKTtcblx0ICAgICAgICAgICAgdGhpcy5waXRjaCA9IHRoaXMuX3BpdGNoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QaXRjaFNoaWZ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QaXRjaFNoaWZ0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlBLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheUEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Qi5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlCID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9BLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9BID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9CLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9CID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlTEZPLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGVMRk8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdkZWxheVRpbWUnKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0RlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0RlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGl0Y2hTaGlmdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIEJ1ZmZlclNvdXJjZU5vZGUuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtICB7QXVkaW9CdWZmZXJ8VG9uZS5CdWZmZXJ9ICBidWZmZXIgICBUaGUgYnVmZmVyIHRvIHBsYXlcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBvbmxvYWQgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYnVmZmVyJyxcblx0ICAgICAgICAgICAgJ29ubG9hZCdcblx0ICAgICAgICBdLCBUb25lLkJ1ZmZlclNvdXJjZSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGFmdGVyIHRoZVxuXHRcdFx0ICogIGJ1ZmZlciBzb3VyY2UgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdFx0ICogIEB0eXBlICB7RnVuY3Rpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9uZW5kZWQgPSBvcHRpb25zLm9uZW5kZWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRpbWUgdGhhdCB0aGUgYnVmZmVyIHdhcyBzdGFydGVkLlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbiBhZGRpdGlvbmFsIGZsYWcgaWYgdGhlIGFjdHVhbCBCdWZmZXJTb3VyY2VOb2RlXG5cdFx0XHQgKiAgaGFzIGJlZW4gc3RhcnRlZC4gYi9jIHN0b3BwaW5nIGFuIHVuc3RhcnRlZCBidWZmZXJcblx0XHRcdCAqICB3aWxsIHRocm93IGl0IGludG8gYW4gaW52YWxpZCBzdGF0ZVxuXHRcdFx0ICogIEB0eXBlICB7Qm9vbGVhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlU3RhcnRlZCA9IGZhbHNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEZsYWcgaWYgdGhlIHNvdXJjZSBoYXMgYWxyZWFkeSBiZWVuIHN0b3BwZWRcblx0XHRcdCAqICBAdHlwZSAge0Jvb2xlYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZVN0b3BwZWQgPSBmYWxzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdGltZSB0aGF0IHRoZSBidWZmZXIgaXMgc2NoZWR1bGVkIHRvIHN0b3AuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0b3BUaW1lID0gLTE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gbm9kZSB3aGljaCBlbnZlbG9wZXMgdGhlIEJ1ZmZlclNvdXJjZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9nYWluTm9kZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBidWZmZXIgc291cmNlXG5cdFx0XHQgKiAgQHR5cGUgIHtBdWRpb0J1ZmZlclNvdXJjZU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZSA9IHRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UuY29ubmVjdCh0aGlzLl9nYWluTm9kZSk7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLm9uZW5kZWQgPSB0aGlzLl9vbmVuZGVkLmJpbmQodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgcHJpdmF0ZSBidWZmZXIgaW5zdGFuY2Vcblx0XHRcdCAqIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIob3B0aW9ucy5idWZmZXIsIG9wdGlvbnMub25sb2FkKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGxheWJhY2tSYXRlIG9mIHRoZSBidWZmZXJcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSBuZXcgVG9uZS5QYXJhbSh0aGlzLl9zb3VyY2UucGxheWJhY2tSYXRlLCBUb25lLlR5cGUuUG9zaXRpdmUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmYWRlSW4gdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mYWRlSW4gPSBvcHRpb25zLmZhZGVJbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmFkZU91dCB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZhZGVPdXQgPSBvcHRpb25zLmZhZGVPdXQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgY3VydmUgYXBwbGllZCB0byB0aGUgZmFkZXMsIGVpdGhlciBcImxpbmVhclwiIG9yIFwiZXhwb25lbnRpYWxcIlxuXHRcdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY3VydmUgPSBvcHRpb25zLmN1cnZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZSB0aGF0IHRoZSBidWZmZXIgcmFtcHMgdG9cblx0XHRcdCAqICBAdHlwZSB7R2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ2FpbiA9IDE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgb25lbmRlZCB0aW1lb3V0XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29uZW5kZWRUaW1lb3V0ID0gLTE7XG5cdCAgICAgICAgLy9zZXQgc29tZSB2YWx1ZXMgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5sb29wID0gb3B0aW9ucy5sb29wO1xuXHQgICAgICAgIHRoaXMubG9vcFN0YXJ0ID0gb3B0aW9ucy5sb29wU3RhcnQ7XG5cdCAgICAgICAgdGhpcy5sb29wRW5kID0gb3B0aW9ucy5sb29wRW5kO1xuXHQgICAgICAgIHRoaXMucGxheWJhY2tSYXRlLnZhbHVlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5CdWZmZXJTb3VyY2UsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29uZW5kZWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ29ubG9hZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnbG9vcCc6IGZhbHNlLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdsb29wRW5kJzogMCxcblx0ICAgICAgICAnZmFkZUluJzogMCxcblx0ICAgICAgICAnZmFkZU91dCc6IDAsXG5cdCAgICAgICAgJ2N1cnZlJzogJ2xpbmVhcicsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiIG9yIFwic3RvcHBlZFwiLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkJ1ZmZlclNvdXJjZSNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RhdGVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBwbGF5YmFjayBzdGF0ZSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgVGhlIHRpbWUgdG8gdGVzdCB0aGUgc3RhdGUgYXRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuU3RhdGV9ICBUaGUgcGxheWJhY2sgc3RhdGUuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLmdldFN0YXRlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXJ0VGltZSAhPT0gLTEgJiYgdGltZSA+PSB0aGlzLl9zdGFydFRpbWUgJiYgIXRoaXMuX3NvdXJjZVN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuU3RhdGUuU3RhcnRlZDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5TdGF0ZS5TdG9wcGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGJ1ZmZlclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbc3RhcnRUaW1lPW5vd10gV2hlbiB0aGUgcGxheWVyIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW29mZnNldD0wXSBUaGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2FtcGxlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzdGFydCBhdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19IGR1cmF0aW9uIEhvdyBsb25nIHRoZSBzYW1wbGUgc2hvdWxkIHBsYXkuIElmIG5vIGR1cmF0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGdpdmVuLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIGZ1bGwgbGVuZ3RoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzYW1wbGUgKG1pbnVzIGFueSBvZmZzZXQpXG5cdFx0ICogIEBwYXJhbSAge0dhaW59ICBbZ2Fpbj0xXSAgVGhlIGdhaW4gdG8gcGxheSB0aGUgYnVmZmVyIGJhY2sgYXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgZmFkZUluVGltZSAgVGhlIG9wdGlvbmFsIGZhZGVJbiByYW1wIHRpbWUuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkJ1ZmZlclNvdXJjZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uLCBnYWluLCBmYWRlSW5UaW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXJ0VGltZSAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkJ1ZmZlclNvdXJjZSBjYW4gb25seSBiZSBzdGFydGVkIG9uY2UuJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICghdGhpcy5idWZmZXIubG9hZGVkKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5CdWZmZXJTb3VyY2U6IGJ1ZmZlciBpcyBlaXRoZXIgbm90IHNldCBvciBub3QgbG9hZGVkLicpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy9pZiBpdCdzIGEgbG9vcCB0aGUgZGVmYXVsdCBvZmZzZXQgaXMgdGhlIGxvb3BzdGFydCBwb2ludFxuXHQgICAgICAgIGlmICh0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgdGhpcy5sb29wU3RhcnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IG9mZnNldCBpcyAwXG5cdCAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBvZmZzZXQgPSB0aGlzLnRvU2Vjb25kcyhvZmZzZXQpO1xuXHQgICAgICAgIGdhaW4gPSBUb25lLmRlZmF1bHRBcmcoZ2FpbiwgMSk7XG5cdCAgICAgICAgdGhpcy5fZ2FpbiA9IGdhaW47XG5cdCAgICAgICAgZmFkZUluVGltZSA9IHRoaXMudG9TZWNvbmRzKFRvbmUuZGVmYXVsdEFyZyhmYWRlSW5UaW1lLCB0aGlzLmZhZGVJbikpO1xuXHQgICAgICAgIHRoaXMuZmFkZUluID0gZmFkZUluVGltZTtcblx0ICAgICAgICBpZiAoZmFkZUluVGltZSA+IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuY3VydmUgPT09ICdsaW5lYXInKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHRoaXMuX2dhaW4sIHRpbWUgKyBmYWRlSW5UaW1lKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lKHRoaXMuX2dhaW4sIHRpbWUsIGZhZGVJblRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZShnYWluLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gdGltZTtcblx0ICAgICAgICB2YXIgY29tcHV0ZWREdXIgPSB0aGlzLnRvU2Vjb25kcyhUb25lLmRlZmF1bHRBcmcoZHVyYXRpb24sIHRoaXMuYnVmZmVyLmR1cmF0aW9uIC0gb2Zmc2V0ICUgdGhpcy5idWZmZXIuZHVyYXRpb24pKTtcblx0ICAgICAgICBjb21wdXRlZER1ciA9IE1hdGgubWF4KGNvbXB1dGVkRHVyLCAwKTtcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoZHVyYXRpb24pKSB7XG5cdCAgICAgICAgICAgIC8vY2xpcCB0aGUgZHVyYXRpb24gd2hlbiBub3QgbG9vcGluZ1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICAgICAgY29tcHV0ZWREdXIgPSBNYXRoLm1pbihjb21wdXRlZER1ciwgdGhpcy5idWZmZXIuZHVyYXRpb24gLSBvZmZzZXQgJSB0aGlzLmJ1ZmZlci5kdXJhdGlvbik7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5zdG9wKHRpbWUgKyBjb21wdXRlZER1ciwgdGhpcy5mYWRlT3V0KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9zdGFydCB0aGUgYnVmZmVyIHNvdXJjZVxuXHQgICAgICAgIGlmICh0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgLy9tb2RpZnkgdGhlIG9mZnNldCBpZiBpdCdzIGdyZWF0ZXIgdGhhbiB0aGUgbG9vcCB0aW1lXG5cdCAgICAgICAgICAgIHZhciBsb29wRW5kID0gdGhpcy5sb29wRW5kIHx8IHRoaXMuYnVmZmVyLmR1cmF0aW9uO1xuXHQgICAgICAgICAgICB2YXIgbG9vcFN0YXJ0ID0gdGhpcy5sb29wU3RhcnQ7XG5cdCAgICAgICAgICAgIHZhciBsb29wRHVyYXRpb24gPSBsb29wRW5kIC0gbG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICAvL21vdmUgdGhlIG9mZnNldCBiYWNrXG5cdCAgICAgICAgICAgIGlmIChvZmZzZXQgPj0gbG9vcEVuZCkge1xuXHQgICAgICAgICAgICAgICAgb2Zmc2V0ID0gKG9mZnNldCAtIGxvb3BTdGFydCkgJSBsb29wRHVyYXRpb24gKyBsb29wU3RhcnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc291cmNlLmJ1ZmZlciA9IHRoaXMuYnVmZmVyLmdldCgpO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5sb29wRW5kID0gdGhpcy5sb29wRW5kIHx8IHRoaXMuYnVmZmVyLmR1cmF0aW9uO1xuXHQgICAgICAgIGlmIChvZmZzZXQgPCB0aGlzLmJ1ZmZlci5kdXJhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlLnN0YXJ0KHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBidWZmZXIuIE9wdGlvbmFsbHkgYWRkIGEgcmFtcCB0aW1lIHRvIGZhZGUgdGhlXG5cdFx0ICogIGJ1ZmZlciBvdXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgdGltZSAgICAgICAgIFRoZSB0aW1lIHRoZSBidWZmZXIgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgZmFkZU91dFRpbWUgIEhvdyBsb25nIHRoZSBnYWluIHNob3VsZCBmYWRlIG91dCBmb3Jcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyU291cmNlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSwgZmFkZU91dFRpbWUpIHtcblx0ICAgICAgICBpZiAoIXRoaXMuYnVmZmVyLmxvYWRlZCkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuQnVmZmVyU291cmNlOiBidWZmZXIgaXMgZWl0aGVyIG5vdCBzZXQgb3Igbm90IGxvYWRlZC4nKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy9pZiB0aGUgZXZlbnQgaGFzIGFscmVhZHkgYmVlbiBzY2hlZHVsZWQsIGNsZWFyIGl0XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0b3BUaW1lICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLmNhbmNlbFN0b3AoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9zdG9wIGlmIGl0J3Mgc2NoZWR1bGUgYmVmb3JlIHRoZSBzdGFydCB0aW1lXG5cdCAgICAgICAgaWYgKHRpbWUgPD0gdGhpcy5fc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnZhbHVlID0gMDtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSBNYXRoLm1heCh0aGlzLl9zdGFydFRpbWUgKyB0aGlzLmZhZGVJbiArIHRoaXMuc2FtcGxlVGltZSwgdGltZSk7XG5cdCAgICAgICAgLy9jYW5jZWwgdGhlIHByZXZpb3VzIGN1cnZlXG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSB0aW1lO1xuXHQgICAgICAgIC8vdGhlIGZhZGVPdXQgdGltZVxuXHQgICAgICAgIGZhZGVPdXRUaW1lID0gdGhpcy50b1NlY29uZHMoVG9uZS5kZWZhdWx0QXJnKGZhZGVPdXRUaW1lLCB0aGlzLmZhZGVPdXQpKTtcblx0ICAgICAgICB2YXIgaGVsZER1cmF0aW9uID0gdGltZSAtIHRoaXMuX3N0YXJ0VGltZSAtIHRoaXMuZmFkZUluIC0gdGhpcy5zYW1wbGVUaW1lO1xuXHQgICAgICAgIGlmICghdGhpcy5sb29wKSB7XG5cdCAgICAgICAgICAgIC8vbWFrZSBzdXJlIHRoZSBmYWRlIGRvZXMgbm90IGdvIGJleW9uZCB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXJcblx0ICAgICAgICAgICAgaGVsZER1cmF0aW9uID0gTWF0aC5taW4oaGVsZER1cmF0aW9uLCB0aGlzLmJ1ZmZlci5kdXJhdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZhZGVPdXRUaW1lID0gTWF0aC5taW4oaGVsZER1cmF0aW9uLCBmYWRlT3V0VGltZSk7XG5cdCAgICAgICAgdmFyIHN0YXJ0RmFkZSA9IHRpbWUgLSBmYWRlT3V0VGltZTtcblx0ICAgICAgICBpZiAoZmFkZU91dFRpbWUgPiB0aGlzLnNhbXBsZVRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSh0aGlzLl9nYWluLCBzdGFydEZhZGUpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5jdXJ2ZSA9PT0gJ2xpbmVhcicpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoMCwgdGltZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSgwLCBzdGFydEZhZGUsIGZhZGVPdXRUaW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fb25lbmRlZFRpbWVvdXQpO1xuXHQgICAgICAgIHRoaXMuX29uZW5kZWRUaW1lb3V0ID0gVG9uZS5jb250ZXh0LnNldFRpbWVvdXQodGhpcy5fb25lbmRlZC5iaW5kKHRoaXMpLCB0aGlzLl9zdG9wVGltZSAtIHRoaXMubm93KCkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgYSBzY2hlZHVsZWQgc3RvcCBldmVudFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJTb3VyY2V9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuY2FuY2VsU3RvcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSAmJiAhdGhpcy5fc291cmNlU3RvcHBlZCkge1xuXHQgICAgICAgICAgICAvL2NhbmNlbCB0aGUgc3RvcCBlbnZlbG9wZVxuXHQgICAgICAgICAgICB2YXIgZmFkZUluVGltZSA9IHRoaXMudG9TZWNvbmRzKHRoaXMuZmFkZUluKTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGhpcy5fc3RhcnRUaW1lICsgZmFkZUluVGltZSArIHRoaXMuc2FtcGxlVGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMSwgTWF0aC5tYXgodGhpcy5ub3coKSwgdGhpcy5fc3RhcnRUaW1lICsgZmFkZUluVGltZSArIHRoaXMuc2FtcGxlVGltZSkpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJUaW1lb3V0KHRoaXMuX29uZW5kZWRUaW1lb3V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSAtMTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGNhbGxiYWNrIHdoZW4gdGhlIGJ1ZmZlciBpcyBlbmRlZC5cblx0XHQgKiAgSW52b2tlcyBgb25lbmRlZGAgYW5kIGRpc3Bvc2VzIHRoZSBub2RlLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLl9vbmVuZGVkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICghdGhpcy5fc291cmNlU3RvcHBlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2VTdG9wcGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgLy9hbGxvdyBhZGRpdGlvbmFsIHRpbWUgZm9yIHRoZSBleHBvbmVudGlhbCBjdXJ2ZSB0byBmdWxseSBkZWNheVxuXHQgICAgICAgICAgICB2YXIgYWRkaXRpb25hbFRhaWwgPSB0aGlzLmN1cnZlID09PSAnZXhwb25lbnRpYWwnID8gdGhpcy5mYWRlT3V0ICogMiA6IDA7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VTdGFydGVkICYmIHRoaXMuX3N0b3BUaW1lICE9PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc291cmNlLnN0b3AodGhpcy5fc3RvcFRpbWUgKyBhZGRpdGlvbmFsVGFpbCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5vbmVuZGVkKHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiBsb29wIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgc3RhcnQgYXQgdGhpcyBwb3NpdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJTb3VyY2UjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlLmxvb3BTdGFydDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BTdGFydCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UubG9vcFN0YXJ0ID0gdGhpcy50b1NlY29uZHMobG9vcFN0YXJ0KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGxvb3AgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBlbmQgYXQgdGhpcyBwb3NpdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJTb3VyY2UjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2UubG9vcEVuZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BFbmQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlLmxvb3BFbmQgPSB0aGlzLnRvU2Vjb25kcyhsb29wRW5kKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBhdWRpbyBidWZmZXIgYmVsb25naW5nIHRvIHRoZSBwbGF5ZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyU291cmNlI1xuXHRcdCAqIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHQgKiBAbmFtZSBidWZmZXJcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUsICdidWZmZXInLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnNldChidWZmZXIpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogSWYgdGhlIGJ1ZmZlciBzaG91bGQgbG9vcCBvbmNlIGl0J3Mgb3Zlci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJTb3VyY2UjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9vcFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZSwgJ2xvb3AnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2UubG9vcDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3ApIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlLmxvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICB0aGlzLmNhbmNlbFN0b3AoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyU291cmNlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm9uZW5kZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5vbmVuZGVkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9idWZmZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gLTE7XG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSBudWxsO1xuXHQgICAgICAgIFRvbmUuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fb25lbmRlZFRpbWVvdXQpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkJ1ZmZlclNvdXJjZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk5vaXNlIGlzIGEgbm9pc2UgZ2VuZXJhdG9yLiBJdCB1c2VzIGxvb3BlZCBub2lzZSBidWZmZXJzIHRvIHNhdmUgb24gcGVyZm9ybWFuY2UuXG5cdFx0ICogICAgICAgICAgVG9uZS5Ob2lzZSBzdXBwb3J0cyB0aGUgbm9pc2UgdHlwZXM6IFwicGlua1wiLCBcIndoaXRlXCIsIGFuZCBcImJyb3duXCIuIFJlYWQgbW9yZSBhYm91dFxuXHRcdCAqICAgICAgICAgIGNvbG9ycyBvZiBub2lzZSBvbiBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db2xvcnNfb2Zfbm9pc2UpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfSB0eXBlIHRoZSBub2lzZSB0eXBlICh3aGl0ZXxwaW5rfGJyb3duKVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vaW5pdGlhbGl6ZSB0aGUgbm9pc2UgYW5kIHN0YXJ0XG5cdFx0ICogdmFyIG5vaXNlID0gbmV3IFRvbmUuTm9pc2UoXCJwaW5rXCIpLnN0YXJ0KCk7XG5cdFx0ICpcblx0XHQgKiAvL21ha2UgYW4gYXV0b2ZpbHRlciB0byBzaGFwZSB0aGUgbm9pc2Vcblx0XHQgKiB2YXIgYXV0b0ZpbHRlciA9IG5ldyBUb25lLkF1dG9GaWx0ZXIoe1xuXHRcdCAqIFx0XCJmcmVxdWVuY3lcIiA6IFwiOG1cIixcblx0XHQgKiBcdFwibWluXCIgOiA4MDAsXG5cdFx0ICogXHRcIm1heFwiIDogMTUwMDBcblx0XHQgKiB9KS5jb25uZWN0KFRvbmUuTWFzdGVyKTtcblx0XHQgKlxuXHRcdCAqIC8vY29ubmVjdCB0aGUgbm9pc2Vcblx0XHQgKiBub2lzZS5jb25uZWN0KGF1dG9GaWx0ZXIpO1xuXHRcdCAqIC8vc3RhcnQgdGhlIGF1dG9maWx0ZXIgTEZPXG5cdFx0ICogYXV0b0ZpbHRlci5zdGFydCgpXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsndHlwZSddLCBUb25lLk5vaXNlKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvQnVmZmVyU291cmNlTm9kZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGJ1ZmZlclxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvQnVmZmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgbm9pc2UuIEFmZmVjdHNcblx0XHRcdCAqICB0aGUgXCJmcmVxdWVuY3lcIiBvZiB0aGUgbm9pc2UuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IG9wdGlvbnMucGxheWJhY2tSYXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTm9pc2UsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICpcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3R5cGUnOiAnd2hpdGUnLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG5vaXNlLiBDYW4gYmUgXCJ3aGl0ZVwiLCBcImJyb3duXCIsIG9yIFwicGlua1wiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk5vaXNlI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogbm9pc2UudHlwZSA9IFwid2hpdGVcIjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk5vaXNlLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSAhPT0gdHlwZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHR5cGUgaW4gX25vaXNlQnVmZmVycykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICAgICAgICAgIC8vaWYgaXQncyBwbGF5aW5nLCBzdG9wIGFuZCByZXN0YXJ0IGl0XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcChub3cpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydChub3cpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVG9uZS5Ob2lzZTogaW52YWxpZCB0eXBlOiAnICsgdHlwZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgbm9pc2UuIEFmZmVjdHNcblx0XHQgKiAgdGhlIFwiZnJlcXVlbmN5XCIgb2YgdGhlIG5vaXNlLlxuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBzaWduYWxcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk5vaXNlLnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc291cmNlLnBsYXliYWNrUmF0ZS52YWx1ZSA9IHJhdGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBpbnRlcm5hbCBzdGFydCBtZXRob2Rcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIGJ1ZmZlciA9IF9ub2lzZUJ1ZmZlcnNbdGhpcy5fdHlwZV07XG5cdCAgICAgICAgdGhpcy5fc291cmNlID0gbmV3IFRvbmUuQnVmZmVyU291cmNlKGJ1ZmZlcikuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLmxvb3AgPSB0cnVlO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5wbGF5YmFja1JhdGUudmFsdWUgPSB0aGlzLl9wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLnN0YXJ0KHRoaXMudG9TZWNvbmRzKHRpbWUpLCBNYXRoLnJhbmRvbSgpICogKGJ1ZmZlci5kdXJhdGlvbiAtIDAuMDAxKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGludGVybmFsIHN0b3AgbWV0aG9kXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2Uuc3RvcCh0aGlzLnRvU2Vjb25kcyh0aW1lKSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlc3RhcnRzIHRoZSBub2lzZS5cblx0XHQgKiBAcGFyYW0gIHtbdHlwZV19IHRpbWUgW2Rlc2NyaXB0aW9uXVxuXHRcdCAqIEByZXR1cm4ge1t0eXBlXX0gICAgICBbZGVzY3JpcHRpb25dXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL1RPRE8gY291bGQgYmUgb3B0aW1pemVkIGJ5IGNhbmNlbGxpbmcgdGhlIGJ1ZmZlciBzb3VyY2UgJ3N0b3AnXG5cdCAgICAgICAgLy9zdG9wIGFuZCByZXN0YXJ0XG5cdCAgICAgICAgdGhpcy5fc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vaXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gVEhFIEJVRkZFUlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9Ob2lzZSBidWZmZXIgc3RhdHNcblx0ICAgIHZhciBidWZmZXJMZW5ndGggPSA0NDEwMCAqIDU7XG5cdCAgICB2YXIgY2hhbm5lbHMgPSAyO1xuXHQgICAgLyoqXG5cdFx0ICpcdFRoZSBub2lzZSBhcnJheXMuIEdlbmVyYXRlZCBvbiBpbml0aWFsaXphdGlvbi5cblx0XHQgKiAgYm9ycm93ZWQgaGVhdmlseSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS96YWNoYXJ5ZGVudG9uL25vaXNlLmpzXG5cdFx0ICogIChjKSAyMDEzIFphY2ggRGVudG9uIChNSVQpXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIF9ub2lzZUFycmF5cyA9IHtcblx0ICAgICAgICAncGluayc6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjaGFubmVsTnVtID0gMDsgY2hhbm5lbE51bSA8IGNoYW5uZWxzOyBjaGFubmVsTnVtKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJMZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyW2NoYW5uZWxOdW1dID0gY2hhbm5lbDtcblx0ICAgICAgICAgICAgICAgIHZhciBiMCwgYjEsIGIyLCBiMywgYjQsIGI1LCBiNjtcblx0ICAgICAgICAgICAgICAgIGIwID0gYjEgPSBiMiA9IGIzID0gYjQgPSBiNSA9IGI2ID0gMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgd2hpdGUgPSBNYXRoLnJhbmRvbSgpICogMiAtIDE7XG5cdCAgICAgICAgICAgICAgICAgICAgYjAgPSAwLjk5ODg2ICogYjAgKyB3aGl0ZSAqIDAuMDU1NTE3OTtcblx0ICAgICAgICAgICAgICAgICAgICBiMSA9IDAuOTkzMzIgKiBiMSArIHdoaXRlICogMC4wNzUwNzU5O1xuXHQgICAgICAgICAgICAgICAgICAgIGIyID0gMC45NjkgKiBiMiArIHdoaXRlICogMC4xNTM4NTI7XG5cdCAgICAgICAgICAgICAgICAgICAgYjMgPSAwLjg2NjUgKiBiMyArIHdoaXRlICogMC4zMTA0ODU2O1xuXHQgICAgICAgICAgICAgICAgICAgIGI0ID0gMC41NSAqIGI0ICsgd2hpdGUgKiAwLjUzMjk1MjI7XG5cdCAgICAgICAgICAgICAgICAgICAgYjUgPSAtMC43NjE2ICogYjUgLSB3aGl0ZSAqIDAuMDE2ODk4O1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gPSBiMCArIGIxICsgYjIgKyBiMyArIGI0ICsgYjUgKyBiNiArIHdoaXRlICogMC41MzYyO1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gKj0gMC4xMTtcblx0ICAgICAgICAgICAgICAgICAgICAvLyAocm91Z2hseSkgY29tcGVuc2F0ZSBmb3IgZ2FpblxuXHQgICAgICAgICAgICAgICAgICAgIGI2ID0gd2hpdGUgKiAwLjExNTkyNjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuXHQgICAgICAgIH0oKSxcblx0ICAgICAgICAnYnJvd24nOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgY2hhbm5lbE51bSA9IDA7IGNoYW5uZWxOdW0gPCBjaGFubmVsczsgY2hhbm5lbE51bSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyTGVuZ3RoKTtcblx0ICAgICAgICAgICAgICAgIGJ1ZmZlcltjaGFubmVsTnVtXSA9IGNoYW5uZWw7XG5cdCAgICAgICAgICAgICAgICB2YXIgbGFzdE91dCA9IDA7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlckxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHdoaXRlID0gTWF0aC5yYW5kb20oKSAqIDIgLSAxO1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gPSAobGFzdE91dCArIDAuMDIgKiB3aGl0ZSkgLyAxLjAyO1xuXHQgICAgICAgICAgICAgICAgICAgIGxhc3RPdXQgPSBjaGFubmVsW2ldO1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gKj0gMy41OyAgICAvLyAocm91Z2hseSkgY29tcGVuc2F0ZSBmb3IgZ2FpblxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG5cdCAgICAgICAgfSgpLFxuXHQgICAgICAgICd3aGl0ZSc6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjaGFubmVsTnVtID0gMDsgY2hhbm5lbE51bSA8IGNoYW5uZWxzOyBjaGFubmVsTnVtKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJMZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyW2NoYW5uZWxOdW1dID0gY2hhbm5lbDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBjaGFubmVsW2ldID0gTWF0aC5yYW5kb20oKSAqIDIgLSAxO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG5cdCAgICAgICAgfSgpXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICpcdHN0YXRpYyBub2lzZSBidWZmZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdCAqL1xuXHQgICAgdmFyIF9ub2lzZUJ1ZmZlcnMgPSB7fTtcblx0ICAgIC8vY3JlYXRlIHRoZSBUb25lLkJ1ZmZlcnNcblx0ICAgIGZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlcnMoKSB7XG5cdCAgICAgICAgZm9yICh2YXIgdHlwZSBpbiBfbm9pc2VBcnJheXMpIHtcblx0ICAgICAgICAgICAgX25vaXNlQnVmZmVyc1t0eXBlXSA9IG5ldyBUb25lLkJ1ZmZlcigpLmZyb21BcnJheShfbm9pc2VBcnJheXNbdHlwZV0pO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0ICAgIC8vY3JlYXRlIHRoZSBub2lzZSBidWZmZXJzXG5cdCAgICBUb25lLmdldENvbnRleHQoY3JlYXRlQnVmZmVycyk7XG5cdCAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCBjcmVhdGVCdWZmZXJzKTtcblx0ICAgIHJldHVybiBUb25lLk5vaXNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgU2ltcGxlIGNvbnZvbHV0aW9uIGNyZWF0ZWQgd2l0aCBkZWNheWluZyBub2lzZS5cblx0XHQgKiAgXHRcdEdlbmVyYXRlcyBhbiBJbXB1bHNlIFJlc3BvbnNlIEJ1ZmZlclxuXHRcdCAqIFx0XHRcdHdpdGggVG9uZS5PZmZsaW5lIHRoZW4gZmVlZHMgdGhlIElSIGludG8gQ29udm9sdmVyTm9kZS5cblx0XHQgKiBcdFx0XHROb3RlOiB0aGUgUmV2ZXJiIHdpbGwgbm90IG1ha2UgYW55IHNvdW5kIHVudGlsIFtnZW5lcmF0ZV0oI2dlbmVyYXRlKVxuXHRcdCAqIFx0XHRcdGhhcyBiZWVuIGludm9rZWQgYW5kIHJlc29sdmVkLlxuXHRcdCAqXG5cdFx0ICogXHRcdFx0SW5zcGlyYXRpb24gZnJvbSBbUmV2ZXJiR2VuXShodHRwczovL2dpdGh1Yi5jb20vYWRlbGVzcGluYXNzZS9yZXZlcmJHZW4pLlxuXHRcdCAqIFx0XHRcdENvcHlyaWdodCAoYykgMjAxNCBBbGFuIGRlTGVzcGluYXNzZSBBcGFjaGUgMi4wIExpY2Vuc2UuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQ29udm9sdmVyfVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSBkZWNheSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgd2lsbCByZXZlcmJlcmF0ZSBmb3IuXG5cdFx0ICovXG5cdCAgICBUb25lLlJldmVyYiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2RlY2F5J10sIFRvbmUuUmV2ZXJiKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIENvbnZvbHZlciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0NvbnZvbHZlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlciA9IHRoaXMuY29udGV4dC5jcmVhdGVDb252b2x2ZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgcmV2ZXJiXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVjYXkgPSBvcHRpb25zLmRlY2F5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGFtb3VudCBvZiB0aW1lIGJlZm9yZSB0aGUgcmV2ZXJiIGlzIGZ1bGx5XG5cdFx0XHQgKiByYW1wZWQgaW4uXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucHJlRGVsYXkgPSBvcHRpb25zLnByZURlbGF5O1xuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9jb252b2x2ZXIpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUmV2ZXJiLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVmYXVsdHNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuUmV2ZXJiLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWNheSc6IDEuNSxcblx0ICAgICAgICAncHJlRGVsYXknOiAwLjAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2VuZXJhdGUgdGhlIEltcHVsc2UgUmVzcG9uc2UuIFJldHVybnMgYSBwcm9taXNlIHdoaWxlIHRoZSBJUiBpcyBiZWluZ1xuXHRcdCAqIGdlbmVyYXRlZC5cblx0XHQgKiBAcmV0dXJuIHtQcm9taXNlPFRvbmUuUmV2ZXJiPn0gUHJvbWlzZSB3aGljaCByZXR1cm5zIHRoaXMgb2JqZWN0LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5SZXZlcmIucHJvdG90eXBlLmdlbmVyYXRlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLk9mZmxpbmUoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvL2NyZWF0ZSBhIG5vaXNlIGJ1cnN0IHdoaWNoIGRlY2F5cyBvdmVyIHRoZSBkdXJhdGlvblxuXHQgICAgICAgICAgICB2YXIgbm9pc2VMID0gbmV3IFRvbmUuTm9pc2UoKTtcblx0ICAgICAgICAgICAgdmFyIG5vaXNlUiA9IG5ldyBUb25lLk5vaXNlKCk7XG5cdCAgICAgICAgICAgIHZhciBtZXJnZSA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgICAgIG5vaXNlTC5jb25uZWN0KG1lcmdlLmxlZnQpO1xuXHQgICAgICAgICAgICBub2lzZVIuY29ubmVjdChtZXJnZS5yaWdodCk7XG5cdCAgICAgICAgICAgIHZhciBnYWluTm9kZSA9IG5ldyBUb25lLkdhaW4oKS50b01hc3RlcigpO1xuXHQgICAgICAgICAgICBtZXJnZS5jb25uZWN0KGdhaW5Ob2RlKTtcblx0ICAgICAgICAgICAgbm9pc2VMLnN0YXJ0KDApO1xuXHQgICAgICAgICAgICBub2lzZVIuc3RhcnQoMCk7XG5cdCAgICAgICAgICAgIC8vc2hvcnQgZmFkZSBpblxuXHQgICAgICAgICAgICBnYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIDApO1xuXHQgICAgICAgICAgICBnYWluTm9kZS5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKDEsIHRoaXMucHJlRGVsYXkpO1xuXHQgICAgICAgICAgICAvL2RlY2F5XG5cdCAgICAgICAgICAgIGdhaW5Ob2RlLmdhaW4uZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lKDAsIHRoaXMucHJlRGVsYXksIHRoaXMuZGVjYXkgLSB0aGlzLnByZURlbGF5KTtcblx0ICAgICAgICB9LmJpbmQodGhpcyksIHRoaXMuZGVjYXkpLnRoZW4oZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9jb252b2x2ZXIuYnVmZmVyID0gYnVmZmVyLmdldCgpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUmV2ZXJifSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5SZXZlcmIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9jb252b2x2ZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUmV2ZXJiO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQmFzZSBjbGFzcyBmb3Igc3RlcmVvIGZlZWRiYWNrIGVmZmVjdHMgd2hlcmUgdGhlIGVmZmVjdFJldHVyblxuXHRcdCAqICAgICAgICAgaXMgZmVkIGJhY2sgaW50byB0aGUgc2FtZSBjaGFubmVsLlxuXHRcdCAqXG5cdFx0ICpcdEBjb25zdHJ1Y3RvclxuXHRcdCAqXHRAZXh0ZW5kcyB7VG9uZS5TdGVyZW9FZmZlY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZmVlZGJhY2snXSwgVG9uZS5GZWVkYmFja0VmZmVjdCk7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb250cm9scyB0aGUgYW1vdW50IG9mIGZlZWRiYWNrXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mZWVkYmFjaywgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGVmdCBzaWRlIGZlZWJhY2tcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0wgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHJpZ2h0IHNpZGUgZmVlYmFja1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrUiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybkwuY2hhaW4odGhpcy5fZmVlZGJhY2tMLCB0aGlzLmVmZmVjdFNlbmRMKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVyblIuY2hhaW4odGhpcy5fZmVlZGJhY2tSLCB0aGlzLmVmZmVjdFNlbmRSKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrLmZhbih0aGlzLl9mZWVkYmFja0wuZ2FpbiwgdGhpcy5fZmVlZGJhY2tSLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZmVlZGJhY2snXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TdGVyZW9GZWVkYmFja0VmZmVjdCwgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydmZWVkYmFjayddKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0wuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1IgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQXBwbGllcyBhIHdpZHRoIGZhY3RvciB0byB0aGUgbWlkL3NpZGUgc2VwZXJhdGlvbi5cblx0XHQgKiAgICAgICAgIDAgaXMgYWxsIG1pZCBhbmQgMSBpcyBhbGwgc2lkZS5cblx0XHQgKiAgICAgICAgIEFsZ29yaXRobSBmb3VuZCBpbiBba3ZyYXVkaW8gZm9ydW1zXShodHRwOi8vd3d3Lmt2cmF1ZGlvLmNvbS9mb3J1bS92aWV3dG9waWMucGhwP3Q9MjEyNTg3KS5cblx0XHQgKiAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICA8Y29kZT5cblx0XHQgKiAgICAgICAgIE1pZCAqPSAyKigxLXdpZHRoKTxicj5cblx0XHQgKiAgICAgICAgIFNpZGUgKj0gMip3aWR0aFxuXHRcdCAqICAgICAgICAgPC9jb2RlPlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1pZFNpZGVFZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfE9iamVjdH0gW3dpZHRoXSBUaGUgc3RlcmVvIHdpZHRoLiBBIHdpZHRoIG9mIDAgaXMgbW9ubyBhbmQgMSBpcyBzdGVyZW8uIDAuNSBpcyBubyBjaGFuZ2UuXG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1dpZGVuZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd3aWR0aCddLCBUb25lLlN0ZXJlb1dpZGVuZXIpO1xuXHQgICAgICAgIFRvbmUuTWlkU2lkZUVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB3aWR0aCBjb250cm9sLiAwID0gMTAwJSBtaWQuIDEgPSAxMDAlIHNpZGUuIDAuNSA9IG5vIGNoYW5nZS5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy53aWR0aCA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLndpZHRoLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnd2lkdGgnXSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUd28gdGltZXMgdGhlICgxLXdpZHRoKSBmb3IgdGhlIG1pZCBjaGFubmVsXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoTWlkID0gbmV3IFRvbmUuTXVsdGlwbHkoMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUd28gdGltZXMgdGhlIHdpZHRoIGZvciB0aGUgc2lkZSBjaGFubmVsXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoU2lkZSA9IG5ldyBUb25lLk11bHRpcGx5KDIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIE1pZCBtdWx0aXBsaWVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZE11bHQgPSBuZXcgVG9uZS5NdWx0aXBseSgpO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQuY29ubmVjdCh0aGlzLl9taWRNdWx0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLm1pZFNlbmQuY2hhaW4odGhpcy5fbWlkTXVsdCwgdGhpcy5taWRSZXR1cm4pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogMSAtIHdpZHRoXG5cdFx0XHQgKiBAdHlwZSB7VG9uZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29uZU1pbnVzV2lkdGggPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIHRoaXMuX29uZU1pbnVzV2lkdGguY29ubmVjdCh0aGlzLl90d29UaW1lc1dpZHRoTWlkKTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuZ2V0Q29uc3RhbnQoMSkuY29ubmVjdCh0aGlzLl9vbmVNaW51c1dpZHRoLCAwLCAwKTtcblx0ICAgICAgICB0aGlzLndpZHRoLmNvbm5lY3QodGhpcy5fb25lTWludXNXaWR0aCwgMCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2lkZSBtdWx0aXBsaWVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NpZGVNdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoKTtcblx0ICAgICAgICB0aGlzLndpZHRoLmNvbm5lY3QodGhpcy5fdHdvVGltZXNXaWR0aFNpZGUpO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhTaWRlLmNvbm5lY3QodGhpcy5fc2lkZU11bHQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuc2lkZVNlbmQuY2hhaW4odGhpcy5fc2lkZU11bHQsIHRoaXMuc2lkZVJldHVybik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TdGVyZW9XaWRlbmVyLCBUb25lLk1pZFNpZGVFZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1dpZGVuZXIuZGVmYXVsdHMgPSB7ICd3aWR0aCc6IDAuNSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TdGVyZW9XaWRlbmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1dpZGVuZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5NaWRTaWRlRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWyd3aWR0aCddKTtcblx0ICAgICAgICB0aGlzLndpZHRoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLndpZHRoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRNdWx0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRNdWx0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zaWRlTXVsdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2lkZU11bHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhTaWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoU2lkZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fb25lTWludXNXaWR0aC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fb25lTWludXNXaWR0aCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3RlcmVvV2lkZW5lcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVHJlbW9sbyBtb2R1bGF0ZXMgdGhlIGFtcGxpdHVkZSBvZiBhbiBpbmNvbWluZyBzaWduYWwgdXNpbmcgYSBUb25lLkxGTy5cblx0XHQgKiAgICAgICAgIFRoZSB0eXBlLCBmcmVxdWVuY3ksIGFuZCBkZXB0aCBvZiB0aGUgTEZPIGlzIGNvbnRyb2xsYWJsZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TdGVyZW9FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gW2ZyZXF1ZW5jeV0gVGhlIHJhdGUgb2YgdGhlIGVmZmVjdC5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW2RlcHRoXSBUaGUgZGVwdGggb2YgdGhlIGVmZmVjdC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NyZWF0ZSBhIHRyZW1vbG8gYW5kIHN0YXJ0IGl0J3MgTEZPXG5cdFx0ICogdmFyIHRyZW1vbG8gPSBuZXcgVG9uZS5UcmVtb2xvKDksIDAuNzUpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKiAvL3JvdXRlIGFuIG9zY2lsbGF0b3IgdGhyb3VnaCB0aGUgdHJlbW9sbyBhbmQgc3RhcnQgaXRcblx0XHQgKiB2YXIgb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS5jb25uZWN0KHRyZW1vbG8pLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0sIFRvbmUuVHJlbW9sbyk7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdHJlbWVsbyBMRk8gaW4gdGhlIGxlZnQgY2hhbm5lbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAncGhhc2UnOiBvcHRpb25zLnNwcmVhZCxcblx0ICAgICAgICAgICAgJ21pbic6IDEsXG5cdCAgICAgICAgICAgICdtYXgnOiAwXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRyZW1lbG8gTEZPIGluIHRoZSBsZWZ0IGNoYW5uZWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9SID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ3BoYXNlJzogb3B0aW9ucy5zcHJlYWQsXG5cdCAgICAgICAgICAgICdtaW4nOiAxLFxuXHQgICAgICAgICAgICAnbWF4JzogMFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZXJlIHRoZSBnYWluIGlzIG11bHRpcGxpZWRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlTCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBXaGVyZSB0aGUgZ2FpbiBpcyBtdWx0aXBsaWVkXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVkZVIgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgdHJlbW9sby5cblx0XHRcdCAqICBAdHlwZSAge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlcHRoIG9mIHRoZSBlZmZlY3QuIEEgZGVwdGggb2YgMCwgaGFzIG5vIGVmZmVjdFxuXHRcdFx0ICogIG9uIHRoZSBhbXBsaXR1ZGUsIGFuZCBhIGRlcHRoIG9mIDEgbWFrZXMgdGhlIGFtcGxpdHVkZVxuXHRcdFx0ICogIG1vZHVsYXRlIGZ1bGx5IGJldHdlZW4gMCBhbmQgMS5cblx0XHRcdCAqICBAdHlwZSAge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXB0aCwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jaGFpbih0aGlzLl9hbXBsaXR1ZGVMLCB0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY2hhaW4odGhpcy5fYW1wbGl0dWRlUiwgdGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICB0aGlzLl9sZm9MLmNvbm5lY3QodGhpcy5fYW1wbGl0dWRlTC5nYWluKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLmNvbm5lY3QodGhpcy5fYW1wbGl0dWRlUi5nYWluKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5mYW4odGhpcy5fbGZvTC5mcmVxdWVuY3ksIHRoaXMuX2xmb1IuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmRlcHRoLmZhbih0aGlzLl9sZm9SLmFtcGxpdHVkZSwgdGhpcy5fbGZvTC5hbXBsaXR1ZGUpO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLnNwcmVhZCA9IG9wdGlvbnMuc3ByZWFkO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJlbW9sbywgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDEwLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdkZXB0aCc6IDAuNSxcblx0ICAgICAgICAnc3ByZWFkJzogMTgwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RhcnQgdGhlIHRyZW1vbG8uXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHRyZW1vbG8gYmVnaW5zLlxuXHRcdCAqIEByZXR1cm5zIHtUb25lLlRyZW1vbG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmb0wuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIHRoZSB0cmVtb2xvLlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSB0cmVtb2xvIHN0b3BzLlxuXHRcdCAqIEByZXR1cm5zIHtUb25lLlRyZW1vbG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2xmb1Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBlZmZlY3QgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFtkZWxheT0wXSBEZWxheSB0aW1lIGJlZm9yZSBzdGFydGluZyB0aGUgZWZmZWN0IGFmdGVyIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNwb3J0IGhhcyBzdGFydGVkLlxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uIChkZWxheSkge1xuXHQgICAgICAgIHRoaXMuX2xmb0wuc3luYyhkZWxheSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5zeW5jKGRlbGF5KTtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5zeW5jU2lnbmFsKHRoaXMuZnJlcXVlbmN5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBVbnN5bmMgdGhlIGZpbHRlciBmcm9tIHRoZSB0cmFuc3BvcnRcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5UcmVtb2xvfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8ucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9sZm9MLnVuc3luYygpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IudW5zeW5jKCk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQudW5zeW5jU2lnbmFsKHRoaXMuZnJlcXVlbmN5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgVHJlbW9sbydzIG9zY2lsbGF0b3IgdHlwZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5UcmVtb2xvI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJlbW9sby5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvTC50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQW1vdW50IG9mIHN0ZXJlbyBzcHJlYWQuIFdoZW4gc2V0IHRvIDAsIGJvdGggTEZPJ3Mgd2lsbCBiZSBwYW5uZWQgY2VudHJhbGx5LlxuXHRcdCAqIFdoZW4gc2V0IHRvIDE4MCwgTEZPJ3Mgd2lsbCBiZSBwYW5uZWQgaGFyZCBsZWZ0IGFuZCByaWdodCByZXNwZWN0aXZlbHkuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVHJlbW9sbyNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBzcHJlYWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyZW1vbG8ucHJvdG90eXBlLCAnc3ByZWFkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvUi5waGFzZSAtIHRoaXMuX2xmb0wucGhhc2U7ICAgIC8vMTgwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzcHJlYWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5waGFzZSA9IDkwIC0gc3ByZWFkIC8gMjtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi5waGFzZSA9IHNwcmVhZCAvIDIgKyA5MDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmVtb2xvfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRyZW1vbG87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIFZpYnJhdG8gZWZmZWN0IGNvbXBvc2VkIG9mIGEgVG9uZS5EZWxheSBhbmQgYSBUb25lLkxGTy4gVGhlIExGT1xuXHRcdCAqICAgICAgICAgbW9kdWxhdGVzIHRoZSBkZWxheVRpbWUgb2YgdGhlIGRlbGF5LCBjYXVzaW5nIHRoZSBwaXRjaCB0byByaXNlXG5cdFx0ICogICAgICAgICBhbmQgZmFsbC4gXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgZnJlcXVlbmN5IG9mIHRoZSB2aWJyYXRvLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBkZXB0aCBUaGUgYW1vdW50IHRoZSBwaXRjaCBpcyBtb2R1bGF0ZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlZpYnJhdG8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0sIFRvbmUuVmlicmF0byk7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVsYXkgbm9kZSB1c2VkIGZvciB0aGUgdmlicmF0byBlZmZlY3Rcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlID0gbmV3IFRvbmUuRGVsYXkoMCwgb3B0aW9ucy5tYXhEZWxheSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIExGTyB1c2VkIHRvIGNvbnRyb2wgdGhlIHZpYnJhdG9cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICd0eXBlJzogb3B0aW9ucy50eXBlLFxuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IG9wdGlvbnMubWF4RGVsYXksXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ3BoYXNlJzogLTkwICAgIC8vb2Zmc2UgdGhlIHBoYXNlIHNvIHRoZSByZXN0aW5nIHBvc2l0aW9uIGlzIGluIHRoZSBjZW50ZXJcblx0ICAgICAgICB9KS5zdGFydCgpLmNvbm5lY3QodGhpcy5fZGVsYXlOb2RlLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgdmlicmF0b1xuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9sZm8uZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXB0aCBvZiB0aGUgdmlicmF0by4gXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSB0aGlzLl9sZm8uYW1wbGl0dWRlO1xuXHQgICAgICAgIHRoaXMuZGVwdGgudmFsdWUgPSBvcHRpb25zLmRlcHRoO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuY2hhaW4odGhpcy5fZGVsYXlOb2RlLCB0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5WaWJyYXRvLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuVmlicmF0by5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbWF4RGVsYXknOiAwLjAwNSxcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNSxcblx0ICAgICAgICAnZGVwdGgnOiAwLjEsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUeXBlIG9mIG9zY2lsbGF0b3IgYXR0YWNoZWQgdG8gdGhlIFZpYnJhdG8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVmlicmF0byNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlZpYnJhdG8ucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmby50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm8udHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlZpYnJhdG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVmlicmF0by5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlcHRoID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5WaWJyYXRvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRXZlbnQgYWJzdHJhY3RzIGF3YXkgVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUgYW5kIHByb3ZpZGVzIGEgc2NoZWR1bGFibGVcblx0XHQgKiAgICAgICAgICBjYWxsYmFjayBmb3IgYSBzaW5nbGUgb3IgcmVwZWF0YWJsZSBldmVudHMgYWxvbmcgdGhlIHRpbWVsaW5lLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGF0IHRoZSB0aW1lLlxuXHRcdCAqICBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSBvciB2YWx1ZXMgd2hpY2ggc2hvdWxkIGJlIHBhc3NlZCB0b1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBvbiBpbnZvY2F0aW9uLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBjaG9yZCA9IG5ldyBUb25lLkV2ZW50KGZ1bmN0aW9uKHRpbWUsIGNob3JkKXtcblx0XHQgKiBcdC8vdGhlIGNob3JkIGFzIHdlbGwgYXMgdGhlIGV4YWN0IHRpbWUgb2YgdGhlIGV2ZW50XG5cdFx0ICogXHQvL2FyZSBwYXNzZWQgaW4gYXMgYXJndW1lbnRzIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvblxuXHRcdCAqIH0sIFtcIkQ0XCIsIFwiRTRcIiwgXCJGNFwiXSk7XG5cdFx0ICogLy9zdGFydCB0aGUgY2hvcmQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJhbnNwb3J0IHRpbWVsaW5lXG5cdFx0ICogY2hvcmQuc3RhcnQoKTtcblx0XHQgKiAvL2xvb3AgaXQgZXZlcnkgbWVhc3VyZSBmb3IgOCBtZWFzdXJlc1xuXHRcdCAqIGNob3JkLmxvb3AgPSA4O1xuXHRcdCAqIGNob3JkLmxvb3BFbmQgPSBcIjFtXCI7XG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ3ZhbHVlJ1xuXHQgICAgICAgIF0sIFRvbmUuRXZlbnQpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBMb29wIHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUgIHtCb29sZWFufFBvc2l0aXZlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wID0gb3B0aW9ucy5sb29wO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYWxsYmFjayB0byBpbnZva2UuXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZSB3aGljaCBpcyBwYXNzZWQgdG8gdGhlXG5cdFx0XHQgKiAgY2FsbGJhY2sgZnVuY3Rpb24uXG5cdFx0XHQgKiAgQHR5cGUgIHsqfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZhbHVlID0gb3B0aW9ucy52YWx1ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBXaGVuIHRoZSBub3RlIGlzIHNjaGVkdWxlZCB0byBzdGFydC5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gdGhpcy50b1RpY2tzKG9wdGlvbnMubG9vcFN0YXJ0KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBXaGVuIHRoZSBub3RlIGlzIHNjaGVkdWxlZCB0byBzdGFydC5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcEVuZCA9IHRoaXMudG9UaWNrcyhvcHRpb25zLmxvb3BFbmQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRyYWNrcyB0aGUgc2NoZWR1bGVkIGV2ZW50c1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLlRpbWVsaW5lU3RhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFRvbmUuVGltZWxpbmVTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwbGF5YmFjayBzcGVlZCBvZiB0aGUgbm90ZS4gQSBzcGVlZCBvZiAxXG5cdFx0XHQgKiAgaXMgbm8gY2hhbmdlLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGRlbGF5IHRpbWUgZnJvbSB3aGVuIHRoZSBldmVudCBpcyBzY2hlZHVsZWQgdG8gc3RhcnRcblx0XHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0T2Zmc2V0ID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBwcml2YXRlIGhvbGRlciBvZiBwcm9iYWJpbGl0eSB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcHJvYmFiaWxpdHkgPSBvcHRpb25zLnByb2JhYmlsaXR5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhbW91bnQgb2YgdmFyaWF0aW9uIGZyb20gdGhlXG5cdFx0XHQgKiAgZ2l2ZW4gdGltZS5cblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxUaW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9odW1hbml6ZSA9IG9wdGlvbnMuaHVtYW5pemU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSWYgbXV0ZSBpcyB0cnVlLCB0aGUgY2FsbGJhY2sgd29uJ3QgYmVcblx0XHRcdCAqICBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgICAgIC8vc2V0IHRoZSBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgIHRoaXMucGxheWJhY2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5FdmVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdsb29wJzogZmFsc2UsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAnMW0nLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxLFxuXHQgICAgICAgICd2YWx1ZSc6IG51bGwsXG5cdCAgICAgICAgJ3Byb2JhYmlsaXR5JzogMSxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlLFxuXHQgICAgICAgICdodW1hbml6ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlc2NoZWR1bGUgYWxsIG9mIHRoZSBldmVudHMgYWxvbmcgdGhlIHRpbWVsaW5lXG5cdFx0ICogIHdpdGggdGhlIHVwZGF0ZWQgdmFsdWVzLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGFmdGVyIE9ubHkgcmVzY2hlZHVsZXMgZXZlbnRzIGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FdmVudH0gIHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLl9yZXNjaGVkdWxlRXZlbnRzID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgLy9pZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgc2NoZWR1bGVzIGFsbCBvZiB0aGUgZXZlbnRzXG5cdCAgICAgICAgYWZ0ZXIgPSBUb25lLmRlZmF1bHRBcmcoYWZ0ZXIsIC0xKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoRnJvbShhZnRlciwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIHZhciBkdXJhdGlvbjtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChldmVudC5pZCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5jbGVhcihldmVudC5pZCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB2YXIgc3RhcnRUaWNrID0gZXZlbnQudGltZSArIE1hdGgucm91bmQodGhpcy5zdGFydE9mZnNldCAvIHRoaXMuX3BsYXliYWNrUmF0ZSk7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gSW5maW5pdHk7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIodGhpcy5fbG9vcCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSB0aGlzLl9sb29wICogdGhpcy5fZ2V0TG9vcER1cmF0aW9uKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0RXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXRBZnRlcihzdGFydFRpY2spO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0RXZlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSBNYXRoLm1pbihkdXJhdGlvbiwgbmV4dEV2ZW50LnRpbWUgLSBzdGFydFRpY2spO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBpZiAoZHVyYXRpb24gIT09IEluZmluaXR5KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vc2NoZWR1bGUgYSBzdG9wIHNpbmNlIGl0J3MgZmluaXRlIGR1cmF0aW9uXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgc3RhcnRUaWNrICsgZHVyYXRpb24gKyAxKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSBUb25lLlRpY2tzKGR1cmF0aW9uKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGludGVydmFsID0gVG9uZS5UaWNrcyh0aGlzLl9nZXRMb29wRHVyYXRpb24oKSk7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQuaWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZVJlcGVhdCh0aGlzLl90aWNrLmJpbmQodGhpcyksIGludGVydmFsLCBUb25lLlRpY2tzKHN0YXJ0VGljayksIGR1cmF0aW9uKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQuaWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZSh0aGlzLl90aWNrLmJpbmQodGhpcyksIFRvbmUuVGlja3Moc3RhcnRUaWNrKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgbm90ZSwgZWl0aGVyIFwic3RhcnRlZFwiIG9yIFwic3RvcHBlZFwiLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKFRvbmUuVHJhbnNwb3J0LnRpY2tzKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc3RhcnQgZnJvbSB0aGUgc2NoZWR1bGVkIHN0YXJ0IHRpbWVcblx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQG5hbWUgc3RhcnRPZmZzZXRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ3N0YXJ0T2Zmc2V0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRPZmZzZXQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhcnRPZmZzZXQgPSBvZmZzZXQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByb2JhYmlsaXR5IG9mIHRoZSBub3RlcyBiZWluZyB0cmlnZ2VyZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHByb2JhYmlsaXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdwcm9iYWJpbGl0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2JhYmlsaXR5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocHJvYikge1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9iYWJpbGl0eSA9IHByb2I7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSWYgc2V0IHRvIHRydWUsIHdpbGwgYXBwbHkgc21hbGwgcmFuZG9tIHZhcmlhdGlvblxuXHRcdCAqICB0byB0aGUgY2FsbGJhY2sgdGltZS4gSWYgdGhlIHZhbHVlIGlzIGdpdmVuIGFzIGEgdGltZSwgaXQgd2lsbCByYW5kb21pemVcblx0XHQgKiAgYnkgdGhhdCBhbW91bnQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogZXZlbnQuaHVtYW5pemUgPSB0cnVlO1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxUaW1lfVxuXHRcdCAqICBAbmFtZSBodW1hbml6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnaHVtYW5pemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9odW1hbml6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhcmlhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9odW1hbml6ZSA9IHZhcmlhdGlvbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbn0gIHRpbWUgIFdoZW4gdGhlIG5vdGUgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FdmVudH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLmFkZCh7XG5cdCAgICAgICAgICAgICAgICAnc3RhdGUnOiBUb25lLlN0YXRlLlN0YXJ0ZWQsXG5cdCAgICAgICAgICAgICAgICAndGltZSc6IHRpbWUsXG5cdCAgICAgICAgICAgICAgICAnaWQnOiB1bmRlZmluZWRcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHModGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBFdmVudCBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbn0gIHRpbWUgIFdoZW4gdGhlIG5vdGUgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkV2ZW50fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgcHJldmlvdXNFdmVudCA9IHRoaXMuX3N0YXRlLmdldEJlZm9yZSh0aW1lKTtcblx0ICAgICAgICAgICAgdmFyIHJlc2NoZWR1bFRpbWUgPSB0aW1lO1xuXHQgICAgICAgICAgICBpZiAocHJldmlvdXNFdmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgcmVzY2hlZHVsVGltZSA9IHByZXZpb3VzRXZlbnQudGltZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9yZXNjaGVkdWxlRXZlbnRzKHJlc2NoZWR1bFRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGFsbCBzY2hlZHVsZWQgZXZlbnRzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9ufSAgW3RpbWU9MF0gIFRoZSB0aW1lIGFmdGVyIHdoaWNoIGV2ZW50cyB3aWxsIGJlIGNhbmNlbC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRXZlbnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLmRlZmF1bHRBcmcodGltZSwgLUluZmluaXR5KTtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hGcm9tKHRpbWUsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5jbGVhcihldmVudC5pZCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlci4gQWxzb1xuXHRcdCAqICBjaGVja3MgaWYgdGhlIEV2ZW50IGlzIGRvbmUgcGxheWluZ1xuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSBvZiB0aGUgZXZlbnQgaW4gc2Vjb25kc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciB0aWNrcyA9IFRvbmUuVHJhbnNwb3J0LmdldFRpY2tzQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmICghdGhpcy5tdXRlICYmIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpY2tzKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnByb2JhYmlsaXR5IDwgMSAmJiBNYXRoLnJhbmRvbSgpID4gdGhpcy5wcm9iYWJpbGl0eSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmh1bWFuaXplKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdmFyaWF0aW9uID0gMC4wMjtcblx0ICAgICAgICAgICAgICAgIGlmICghVG9uZS5pc0Jvb2xlYW4odGhpcy5odW1hbml6ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24gPSB0aGlzLnRvU2Vjb25kcyh0aGlzLmh1bWFuaXplKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHRpbWUgKz0gKE1hdGgucmFuZG9tKCkgKiAyIC0gMSkgKiB2YXJpYXRpb247XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lLCB0aGlzLnZhbHVlKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgZHVyYXRpb24gb2YgdGhlIGxvb3AuXG5cdFx0ICogIEByZXR1cm4gIHtUaWNrc31cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLl9nZXRMb29wRHVyYXRpb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoKHRoaXMuX2xvb3BFbmQgLSB0aGlzLl9sb29wU3RhcnQpIC8gdGhpcy5fcGxheWJhY2tSYXRlKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSWYgdGhlIG5vdGUgc2hvdWxkIGxvb3Agb3Igbm90XG5cdFx0ICogIGJldHdlZW4gVG9uZS5FdmVudC5sb29wU3RhcnQgYW5kXG5cdFx0ICogIFRvbmUuRXZlbnQubG9vcEVuZC4gQW4gaW50ZWdlclxuXHRcdCAqICB2YWx1ZSBjb3JyZXNwb25kcyB0byB0aGUgbnVtYmVyIG9mXG5cdFx0ICogIGxvb3BzIHRoZSBFdmVudCBkb2VzIGFmdGVyIGl0IHN0YXJ0cy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufFBvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBsb29wXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdsb29wJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3ApIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcCA9IGxvb3A7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHMoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0VGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIG5vdGUuIERlZmF1bHRzIHRvIDEuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIHBsYXliYWNrUmF0ZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIG5vdGUubG9vcCA9IHRydWU7XG5cdFx0ICogLy9yZXBlYXQgdGhlIG5vdGUgdHdpY2UgYXMgZmFzdFxuXHRcdCAqIG5vdGUucGxheWJhY2tSYXRlID0gMjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cygpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBsb29wRW5kIHBvaW50IGlzIHRoZSB0aW1lIHRoZSBldmVudCB3aWxsIGxvb3Bcblx0XHQgKiAgaWYgVG9uZS5FdmVudC5sb29wIGlzIHRydWUuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcEVuZCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wRW5kKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSB0aGlzLnRvVGlja3MobG9vcEVuZCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZXNjaGVkdWxlRXZlbnRzKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdGltZSB3aGVuIHRoZSBsb29wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBsb29wU3RhcnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcFN0YXJ0KS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BTdGFydCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvVGlja3MobG9vcFN0YXJ0KTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHMoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjdXJyZW50IHByb2dyZXNzIG9mIHRoZSBsb29wIGludGVydmFsLlxuXHRcdCAqICBSZXR1cm5zIDAgaWYgdGhlIGV2ZW50IGlzIG5vdCBzdGFydGVkIHlldCBvclxuXHRcdCAqICBpdCBpcyBub3Qgc2V0IHRvIGxvb3AuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHByb2dyZXNzXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAncHJvZ3Jlc3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdGlja3MgPSBUb25lLlRyYW5zcG9ydC50aWNrcztcblx0ICAgICAgICAgICAgICAgIHZhciBsYXN0RXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXQodGlja3MpO1xuXHQgICAgICAgICAgICAgICAgaWYgKGxhc3RFdmVudCAhPT0gbnVsbCAmJiBsYXN0RXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBsb29wRHVyYXRpb24gPSB0aGlzLl9nZXRMb29wRHVyYXRpb24oKTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgcHJvZ3Jlc3MgPSAodGlja3MgLSBsYXN0RXZlbnQudGltZSkgJSBsb29wRHVyYXRpb247XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb2dyZXNzIC8gbG9vcER1cmF0aW9uO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRXZlbnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuY2FuY2VsKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FdmVudDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkxvb3AgY3JlYXRlcyBhIGxvb3BlZCBjYWxsYmFjayBhdCB0aGUgXG5cdFx0ICogICAgICAgICBzcGVjaWZpZWQgaW50ZXJ2YWwuIFRoZSBjYWxsYmFjayBjYW4gYmUgXG5cdFx0ICogICAgICAgICBzdGFydGVkLCBzdG9wcGVkIGFuZCBzY2hlZHVsZWQgYWxvbmdcblx0XHQgKiAgICAgICAgIHRoZSBUcmFuc3BvcnQncyB0aW1lbGluZS4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGxvb3AgPSBuZXcgVG9uZS5Mb29wKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0Ly90cmlnZ2VyZWQgZXZlcnkgZWlnaHRoIG5vdGUuIFxuXHRcdCAqIFx0Y29uc29sZS5sb2codGltZSk7XG5cdFx0ICogfSwgXCI4blwiKS5zdGFydCgwKTtcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdGFydCgpO1xuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIHRoZSBldmVudC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBpbnRlcnZhbCBUaGUgdGltZSBiZXR3ZWVuIHN1Y2Nlc3NpdmUgY2FsbGJhY2sgY2FsbHMuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ2ludGVydmFsJ1xuXHQgICAgICAgIF0sIFRvbmUuTG9vcCk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBldmVudCB3aGljaCBwcm9kdWNlcyB0aGUgY2FsbGJhY2tzXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ldmVudCA9IG5ldyBUb25lLkV2ZW50KHtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJzogdGhpcy5fdGljay5iaW5kKHRoaXMpLFxuXHQgICAgICAgICAgICAnbG9vcCc6IHRydWUsXG5cdCAgICAgICAgICAgICdsb29wRW5kJzogb3B0aW9ucy5pbnRlcnZhbCxcblx0ICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IG9wdGlvbnMucGxheWJhY2tSYXRlLFxuXHQgICAgICAgICAgICAncHJvYmFiaWxpdHknOiBvcHRpb25zLnByb2JhYmlsaXR5XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIHRoZSBuZXh0IGV2ZW50IGluIHRoZSBwYXR0ZXJuXG5cdFx0XHQgKiAgQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG5cdCAgICAgICAgLy9zZXQgdGhlIGl0ZXJhdGlvbnNcblx0ICAgICAgICB0aGlzLml0ZXJhdGlvbnMgPSBvcHRpb25zLml0ZXJhdGlvbnM7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Mb29wKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdpbnRlcnZhbCc6ICc0bicsXG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxLFxuXHQgICAgICAgICdpdGVyYXRpb25zJzogSW5maW5pdHksXG5cdCAgICAgICAgJ3Byb2JhYmlsaXR5JzogdHJ1ZSxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBsb29wIGF0IHRoZSBzcGVjaWZpZWQgdGltZSBhbG9uZyB0aGUgVHJhbnNwb3J0J3Ncblx0XHQgKiAgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb249fSAgdGltZSAgV2hlbiB0byBzdGFydCB0aGUgTG9vcC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTG9vcH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2V2ZW50LnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBsb29wIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9uPX0gIHRpbWUgIFdoZW4gdG8gc3RvcCB0aGUgQXJwZWdnaW9cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTG9vcH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnQuc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGFsbCBzY2hlZHVsZWQgZXZlbnRzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9ufSAgW3RpbWU9MF0gIFRoZSB0aW1lIGFmdGVyIHdoaWNoIGV2ZW50cyB3aWxsIGJlIGNhbmNlbC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTG9vcH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudC5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBub3RlcyBzaG91bGQgYmUgY2FsbGVkXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRoZSBldmVudCBvY2N1cnNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzdGF0ZSBvZiB0aGUgTG9vcCwgZWl0aGVyIHN0YXJ0ZWQgb3Igc3RvcHBlZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQuc3RhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByb2dyZXNzIG9mIHRoZSBsb29wIGFzIGEgdmFsdWUgYmV0d2VlbiAwLTEuIDAsIHdoZW5cblx0XHQgKiAgdGhlIGxvb3AgaXMgc3RvcHBlZCBvciBkb25lIGl0ZXJhdGluZy4gXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgcHJvZ3Jlc3Ncblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ3Byb2dyZXNzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQucHJvZ3Jlc3M7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHRpbWUgYmV0d2VlbiBzdWNjZXNzaXZlIGNhbGxiYWNrcy4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogbG9vcC5pbnRlcnZhbCA9IFwiOG5cIjsgLy9sb29wIGV2ZXJ5IDhuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBpbnRlcnZhbFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdpbnRlcnZhbCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50Lmxvb3BFbmQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9ldmVudC5sb29wRW5kID0gaW50ZXJ2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIGxvb3AuIFRoZSBub3JtYWwgcGxheWJhY2sgcmF0ZSBpcyAxIChubyBjaGFuZ2UpLiBcblx0XHQgKiAgQSBgcGxheWJhY2tSYXRlYCBvZiAyIHdvdWxkIGJlIHR3aWNlIGFzIGZhc3QuIFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgcGxheWJhY2tSYXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50LnBsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnQucGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSYW5kb20gdmFyaWF0aW9uICsvLTAuMDFzIHRvIHRoZSBzY2hlZHVsZWQgdGltZS4gXG5cdFx0ICogIE9yIGdpdmUgaXQgYSB0aW1lIHZhbHVlIHdoaWNoIGl0IHdpbGwgcmFuZG9taXplIGJ5LlxuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxUaW1lfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAbmFtZSBodW1hbml6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdodW1hbml6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50Lmh1bWFuaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFyaWF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50Lmh1bWFuaXplID0gdmFyaWF0aW9uO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwcm9iYWJseSBvZiB0aGUgY2FsbGJhY2sgYmVpbmcgaW52b2tlZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBwcm9iYWJpbGl0eVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdwcm9iYWJpbGl0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50LnByb2JhYmlsaXR5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocHJvYikge1xuXHQgICAgICAgICAgICB0aGlzLl9ldmVudC5wcm9iYWJpbGl0eSA9IHByb2I7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgTXV0aW5nIHRoZSBMb29wIG1lYW5zIHRoYXQgbm8gY2FsbGJhY2tzIGFyZSBpbnZva2VkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiAgQG5hbWUgbXV0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnQubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIHRoZSBsb29wLiBUaGUgZGVmYXVsdFxuXHRcdCAqICB2YWx1ZSBpcyBJbmZpbml0eSAobG9vcCBmb3JldmVyKS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBpdGVyYXRpb25zXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ2l0ZXJhdGlvbnMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9ldmVudC5sb29wID09PSB0cnVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQubG9vcDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaXRlcnMpIHtcblx0ICAgICAgICAgICAgaWYgKGl0ZXJzID09PSBJbmZpbml0eSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnQubG9vcCA9IHRydWU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9ldmVudC5sb29wID0gaXRlcnM7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Mb29wfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2V2ZW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ldmVudCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTG9vcDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGFydCBpcyBhIGNvbGxlY3Rpb24gVG9uZS5FdmVudHMgd2hpY2ggY2FuIGJlXG5cdFx0ICogICAgICAgICBzdGFydGVkL3N0b3BwZWQgYW5kIGxvb3BlZCBhcyBhIHNpbmdsZSB1bml0LlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkV2ZW50fVxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIG9uIGVhY2ggZXZlbnRcblx0XHQgKiAgQHBhcmFtIHtBcnJheX0gZXZlbnRzIHRoZSBhcnJheSBvZiBldmVudHNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcGFydCA9IG5ldyBUb25lLlBhcnQoZnVuY3Rpb24odGltZSwgbm90ZSl7XG5cdFx0ICogXHQvL3RoZSBub3RlcyBnaXZlbiBhcyB0aGUgc2Vjb25kIGVsZW1lbnQgaW4gdGhlIGFycmF5XG5cdFx0ICogXHQvL3dpbGwgYmUgcGFzc2VkIGluIGFzIHRoZSBzZWNvbmQgYXJndW1lbnRcblx0XHQgKiBcdHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKG5vdGUsIFwiOG5cIiwgdGltZSk7XG5cdFx0ICogfSwgW1swLCBcIkMyXCJdLCBbXCIwOjJcIiwgXCJDM1wiXSwgW1wiMDozOjJcIiwgXCJHMlwiXV0pO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdXNlIGFuIGFycmF5IG9mIG9iamVjdHMgYXMgbG9uZyBhcyB0aGUgb2JqZWN0IGhhcyBhIFwidGltZVwiIGF0dHJpYnV0ZVxuXHRcdCAqIHZhciBwYXJ0ID0gbmV3IFRvbmUuUGFydChmdW5jdGlvbih0aW1lLCB2YWx1ZSl7XG5cdFx0ICogXHQvL3RoZSB2YWx1ZSBpcyBhbiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYm90aCB0aGUgbm90ZSBhbmQgdGhlIHZlbG9jaXR5XG5cdFx0ICogXHRzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSh2YWx1ZS5ub3RlLCBcIjhuXCIsIHRpbWUsIHZhbHVlLnZlbG9jaXR5KTtcblx0XHQgKiB9LCBbe1widGltZVwiIDogMCwgXCJub3RlXCIgOiBcIkMzXCIsIFwidmVsb2NpdHlcIjogMC45fSxcblx0XHQgKiBcdCAgIHtcInRpbWVcIiA6IFwiMDoyXCIsIFwibm90ZVwiIDogXCJDNFwiLCBcInZlbG9jaXR5XCI6IDAuNX1cblx0XHQgKiBdKS5zdGFydCgwKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdjYWxsYmFjaycsXG5cdCAgICAgICAgICAgICdldmVudHMnXG5cdCAgICAgICAgXSwgVG9uZS5QYXJ0KTtcblx0ICAgICAgICBUb25lLkV2ZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQW4gYXJyYXkgb2YgT2JqZWN0cy5cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBbXTtcblx0ICAgICAgICAvL2FkZCB0aGUgZXZlbnRzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmV2ZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmV2ZW50c1tpXSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuYWRkKG9wdGlvbnMuZXZlbnRzW2ldWzBdLCBvcHRpb25zLmV2ZW50c1tpXVsxXSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmFkZChvcHRpb25zLmV2ZW50c1tpXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYXJ0LCBUb25lLkV2ZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdjYWxsYmFjayc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnbG9vcCc6IGZhbHNlLFxuXHQgICAgICAgICdsb29wRW5kJzogJzFtJyxcblx0ICAgICAgICAnbG9vcFN0YXJ0JzogMCxcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMSxcblx0ICAgICAgICAncHJvYmFiaWxpdHknOiAxLFxuXHQgICAgICAgICdodW1hbml6ZSc6IGZhbHNlLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2UsXG5cdCAgICAgICAgJ2V2ZW50cyc6IFtdXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBwYXJ0IGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSAgdGltZSAgICBXaGVuIHRvIHN0YXJ0IHRoZSBwYXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIG9mZnNldCAgVGhlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFydFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmVnaW4gcGxheWluZyBhdC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgdmFyIHRpY2tzID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aWNrcykgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgdGhpcy5fbG9vcFN0YXJ0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIG9mZnNldCA9IHRoaXMudG9UaWNrcyhvZmZzZXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5hZGQoe1xuXHQgICAgICAgICAgICAgICAgJ3N0YXRlJzogVG9uZS5TdGF0ZS5TdGFydGVkLFxuXHQgICAgICAgICAgICAgICAgJ3RpbWUnOiB0aWNrcyxcblx0ICAgICAgICAgICAgICAgICdvZmZzZXQnOiBvZmZzZXRcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdGFydE5vdGUoZXZlbnQsIHRpY2tzLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBldmVudCBpbiB0aGUgZ2l2ZW4gZXZlbnQgYXQgdGhlIGNvcnJlY3QgdGltZSBnaXZlblxuXHRcdCAqICB0aGUgdGlja3MgYW5kIG9mZnNldCBhbmQgbG9vcGluZy5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5FdmVudH0gIGV2ZW50XG5cdFx0ICogIEBwYXJhbSAge1RpY2tzfSAgdGlja3Ncblx0XHQgKiAgQHBhcmFtICB7VGlja3N9ICBvZmZzZXRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX3N0YXJ0Tm90ZSA9IGZ1bmN0aW9uIChldmVudCwgdGlja3MsIG9mZnNldCkge1xuXHQgICAgICAgIHRpY2tzIC09IG9mZnNldDtcblx0ICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPj0gdGhpcy5fbG9vcFN0YXJ0ICYmIGV2ZW50LnN0YXJ0T2Zmc2V0IDwgdGhpcy5fbG9vcEVuZCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnN0YXJ0T2Zmc2V0IDwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9zdGFydCBpdCBvbiB0aGUgbmV4dCBsb29wXG5cdCAgICAgICAgICAgICAgICAgICAgdGlja3MgKz0gdGhpcy5fZ2V0TG9vcER1cmF0aW9uKCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBldmVudC5zdGFydChUb25lLlRpY2tzKHRpY2tzKSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPCB0aGlzLl9sb29wU3RhcnQgJiYgZXZlbnQuc3RhcnRPZmZzZXQgPj0gb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5sb29wID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICBldmVudC5zdGFydChUb25lLlRpY2tzKHRpY2tzKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXJ0T2Zmc2V0ID49IG9mZnNldCkge1xuXHQgICAgICAgICAgICBldmVudC5zdGFydChUb25lLlRpY2tzKHRpY2tzKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc3RhcnQgZnJvbSB0aGUgc2NoZWR1bGVkIHN0YXJ0IHRpbWVcblx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAbmFtZSBzdGFydE9mZnNldFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdzdGFydE9mZnNldCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0T2Zmc2V0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXJ0T2Zmc2V0ID0gb2Zmc2V0O1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuc3RhcnRPZmZzZXQgKz0gdGhpcy5fc3RhcnRPZmZzZXQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIHBhcnQgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb259ICB0aW1lICBXaGVuIHRvIHN0b3AgdGhlIHBhcnQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhcnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciB0aWNrcyA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGlja3MpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGlja3MpO1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGV2ZW50LnN0b3AodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldC9TZXQgYW4gRXZlbnQncyB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgSWYgYSB2YWx1ZSBpcyBwYXNzZWQgaW4gYW5kIG5vIGV2ZW50IGV4aXN0cyBhdFxuXHRcdCAqICB0aGUgZ2l2ZW4gdGltZSwgb25lIHdpbGwgYmUgY3JlYXRlZCB3aXRoIHRoYXQgdmFsdWUuXG5cdFx0ICogIElmIHR3byBldmVudHMgYXJlIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBmaXJzdCBvbmUgd2lsbFxuXHRcdCAqICBiZSByZXR1cm5lZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBwYXJ0LmF0KFwiMW1cIik7IC8vcmV0dXJucyB0aGUgcGFydCBhdCB0aGUgZmlyc3QgbWVhc3VyZVxuXHRcdCAqXG5cdFx0ICogcGFydC5hdChcIjJtXCIsIFwiQzJcIik7IC8vc2V0IHRoZSB2YWx1ZSBhdCBcIjJtXCIgdG8gQzIuXG5cdFx0ICogLy9pZiBhbiBldmVudCBkaWRuJ3QgZXhpc3QgYXQgdGhhdCB0aW1lLCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gdGltZSBUaGUgdGltZSBvZiB0aGUgZXZlbnQgdG8gZ2V0IG9yIHNldC5cblx0XHQgKiAgQHBhcmFtIHsqPX0gdmFsdWUgSWYgYSB2YWx1ZSBpcyBwYXNzZWQgaW4sIHRoZSB2YWx1ZSBvZiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgZXZlbnQgYXQgdGhlIGdpdmVuIHRpbWUgd2lsbCBiZSBzZXQgdG8gaXQuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuRXZlbnR9IHRoZSBldmVudCBhdCB0aGUgdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5hdCA9IGZ1bmN0aW9uICh0aW1lLCB2YWx1ZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgdmFyIHRpY2tUaW1lID0gVG9uZS5UaWNrcygxKS50b1NlY29uZHMoKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2V2ZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHNbaV07XG5cdCAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aW1lLnRvVGlja3MoKSAtIGV2ZW50LnN0YXJ0T2Zmc2V0KSA8IHRpY2tUaW1lKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodmFsdWUpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQudmFsdWUgPSB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiBldmVudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2lmIHRoZXJlIHdhcyBubyBldmVudCBhdCB0aGF0IHRpbWUsIGNyZWF0ZSBvbmVcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodmFsdWUpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuYWRkKHRpbWUsIHZhbHVlKTtcblx0ICAgICAgICAgICAgLy9yZXR1cm4gdGhlIG5ldyBldmVudFxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzW3RoaXMuX2V2ZW50cy5sZW5ndGggLSAxXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIGFuIGV2ZW50IHRvIHRoZSBwYXJ0LlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWUgVGhlIHRpbWUgdGhlIG5vdGUgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW4sIGl0IHNob3VsZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgYSAndGltZScgYXR0cmlidXRlIGFuZCB0aGUgcmVzdFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBvYmplY3Qgd2lsbCBiZSB1c2VkIGFzIHRoZSAndmFsdWUnLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkV2ZW50fCp9ICB2YWx1ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJ0fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogcGFydC5hZGQoXCIxbVwiLCBcIkMjKzExXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodGltZSwgdmFsdWUpIHtcblx0ICAgICAgICAvL2V4dHJhY3QgdGhlIHBhcmFtZXRlcnNcblx0ICAgICAgICBpZiAodGltZS5oYXNPd25Qcm9wZXJ0eSgndGltZScpKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gdGltZTtcblx0ICAgICAgICAgICAgdGltZSA9IHZhbHVlLnRpbWU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgdmFyIGV2ZW50O1xuXHQgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRvbmUuRXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnQgPSB2YWx1ZTtcblx0ICAgICAgICAgICAgZXZlbnQuY2FsbGJhY2sgPSB0aGlzLl90aWNrLmJpbmQodGhpcyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgZXZlbnQgPSBuZXcgVG9uZS5FdmVudCh7XG5cdCAgICAgICAgICAgICAgICAnY2FsbGJhY2snOiB0aGlzLl90aWNrLmJpbmQodGhpcyksXG5cdCAgICAgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy90aGUgc3RhcnQgb2Zmc2V0XG5cdCAgICAgICAgZXZlbnQuc3RhcnRPZmZzZXQgPSB0aW1lO1xuXHQgICAgICAgIC8vaW5pdGlhbGl6ZSB0aGUgdmFsdWVzXG5cdCAgICAgICAgZXZlbnQuc2V0KHtcblx0ICAgICAgICAgICAgJ2xvb3BFbmQnOiB0aGlzLmxvb3BFbmQsXG5cdCAgICAgICAgICAgICdsb29wU3RhcnQnOiB0aGlzLmxvb3BTdGFydCxcblx0ICAgICAgICAgICAgJ2xvb3AnOiB0aGlzLmxvb3AsXG5cdCAgICAgICAgICAgICdodW1hbml6ZSc6IHRoaXMuaHVtYW5pemUsXG5cdCAgICAgICAgICAgICdwbGF5YmFja1JhdGUnOiB0aGlzLnBsYXliYWNrUmF0ZSxcblx0ICAgICAgICAgICAgJ3Byb2JhYmlsaXR5JzogdGhpcy5wcm9iYWJpbGl0eVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5wdXNoKGV2ZW50KTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBub3RlIGlmIGl0IHNob3VsZCBiZSBwbGF5ZWQgcmlnaHQgbm93XG5cdCAgICAgICAgdGhpcy5fcmVzdGFydEV2ZW50KGV2ZW50KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVzdGFydCB0aGUgZ2l2ZW4gZXZlbnRcblx0XHQgKiAgQHBhcmFtICB7VG9uZS5FdmVudH0gIGV2ZW50XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl9yZXN0YXJ0RXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoKGZ1bmN0aW9uIChzdGF0ZUV2ZW50KSB7XG5cdCAgICAgICAgICAgIGlmIChzdGF0ZUV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0Tm90ZShldmVudCwgc3RhdGVFdmVudC50aW1lLCBzdGF0ZUV2ZW50Lm9mZnNldCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvL3N0b3AgdGhlIG5vdGVcblx0ICAgICAgICAgICAgICAgIGV2ZW50LnN0b3AoVG9uZS5UaWNrcyhzdGF0ZUV2ZW50LnRpbWUpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBhbiBldmVudCBmcm9tIHRoZSBwYXJ0LiBXaWxsIHJlY3Vyc2l2ZWx5IGl0ZXJhdGVcblx0XHQgKiAgaW50byBuZXN0ZWQgcGFydHMgdG8gZmluZCB0aGUgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSBvZiB0aGUgZXZlbnRcblx0XHQgKiAgQHBhcmFtIHsqfSB2YWx1ZSBPcHRpb25hbGx5IHNlbGVjdCBvbmx5IGEgc3BlY2lmaWMgZXZlbnQgdmFsdWVcblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHRpbWUsIHZhbHVlKSB7XG5cdCAgICAgICAgLy9leHRyYWN0IHRoZSBwYXJhbWV0ZXJzXG5cdCAgICAgICAgaWYgKHRpbWUuaGFzT3duUHJvcGVydHkoJ3RpbWUnKSkge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IHRpbWU7XG5cdCAgICAgICAgICAgIHRpbWUgPSB2YWx1ZS50aW1lO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9ldmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRzW2ldO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBUb25lLlBhcnQpIHtcblx0ICAgICAgICAgICAgICAgIGV2ZW50LnJlbW92ZSh0aW1lLCB2YWx1ZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPT09IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYodmFsdWUpIHx8IFRvbmUuaXNEZWZpbmVkKHZhbHVlKSAmJiBldmVudC52YWx1ZSA9PT0gdmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuc3BsaWNlKGksIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIGFsbCBvZiB0aGUgbm90ZXMgZnJvbSB0aGUgZ3JvdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhcnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBldmVudC5kaXNwb3NlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gW107XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBzY2hlZHVsZWQgc3RhdGUgY2hhbmdlIGV2ZW50czogaS5lLiBcInN0YXJ0XCIgYW5kIFwic3RvcFwiLlxuXHRcdCAqICBAcGFyYW0ge1RpbWVsaW5lUG9zaXRpb259IGFmdGVyIFRoZSB0aW1lIGFmdGVyIHdoaWNoIHRvIGNhbmNlbCB0aGUgc2NoZWR1bGVkIGV2ZW50cy5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnQuY2FuY2VsKGFmdGVyKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGhpcy50b1RpY2tzKGFmdGVyKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBhbGwgb2YgdGhlIGV2ZW50c1xuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gY3R4IFRoZSBjb250ZXh0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl9mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBjdHgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzKSB7XG5cdCAgICAgICAgICAgIGN0eCA9IFRvbmUuZGVmYXVsdEFyZyhjdHgsIHRoaXMpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fZXZlbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZSA9IHRoaXMuX2V2ZW50c1tpXTtcblx0ICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgVG9uZS5QYXJ0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZS5fZm9yRWFjaChjYWxsYmFjaywgY3R4KTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChjdHgsIGUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIGF0dHJpYnV0ZSBvZiBhbGwgb2YgdGhlIGV2ZW50c1xuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBhdHRyICB0aGUgYXR0cmlidXRlIHRvIHNldFxuXHRcdCAqICBAcGFyYW0gIHsqfSAgdmFsdWUgICAgICBUaGUgdmFsdWUgdG8gc2V0IGl0IHRvXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl9zZXRBbGwgPSBmdW5jdGlvbiAoYXR0ciwgdmFsdWUpIHtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBldmVudFthdHRyXSA9IHZhbHVlO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCB0aWNrIG1ldGhvZFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSBvZiB0aGUgZXZlbnQgaW4gc2Vjb25kc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uICh0aW1lLCB2YWx1ZSkge1xuXHQgICAgICAgIGlmICghdGhpcy5tdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSwgdmFsdWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgRGV0ZXJtaW5lIGlmIHRoZSBldmVudCBzaG91bGQgYmUgY3VycmVudGx5IGxvb3Bpbmdcblx0XHQgKiAgZ2l2ZW4gdGhlIGxvb3AgYm91bmRyaWVzIG9mIHRoaXMgUGFydC5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5FdmVudH0gIGV2ZW50ICBUaGUgZXZlbnQgdG8gdGVzdFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5fdGVzdExvb3BCb3VuZHJpZXMgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPCB0aGlzLl9sb29wU3RhcnQgfHwgZXZlbnQuc3RhcnRPZmZzZXQgPj0gdGhpcy5fbG9vcEVuZCkge1xuXHQgICAgICAgICAgICBldmVudC5jYW5jZWwoMCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIC8vcmVzY2hlZHVsZSBpdCBpZiBpdCdzIHN0b3BwZWRcblx0ICAgICAgICAgICAgdGhpcy5fcmVzdGFydEV2ZW50KGV2ZW50KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwcm9iYWJpbGl0eSBvZiB0aGUgbm90ZXMgYmVpbmcgdHJpZ2dlcmVkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHByb2JhYmlsaXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ3Byb2JhYmlsaXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvYmFiaWxpdHk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcm9iKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2JhYmlsaXR5ID0gcHJvYjtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QWxsKCdwcm9iYWJpbGl0eScsIHByb2IpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIElmIHNldCB0byB0cnVlLCB3aWxsIGFwcGx5IHNtYWxsIHJhbmRvbSB2YXJpYXRpb25cblx0XHQgKiAgdG8gdGhlIGNhbGxiYWNrIHRpbWUuIElmIHRoZSB2YWx1ZSBpcyBnaXZlbiBhcyBhIHRpbWUsIGl0IHdpbGwgcmFuZG9taXplXG5cdFx0ICogIGJ5IHRoYXQgYW1vdW50LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGV2ZW50Lmh1bWFuaXplID0gdHJ1ZTtcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW58VGltZX1cblx0XHQgKiAgQG5hbWUgaHVtYW5pemVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAnaHVtYW5pemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9odW1hbml6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhcmlhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9odW1hbml6ZSA9IHZhcmlhdGlvbjtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QWxsKCdodW1hbml6ZScsIHZhcmlhdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSWYgdGhlIHBhcnQgc2hvdWxkIGxvb3Agb3Igbm90XG5cdFx0ICogIGJldHdlZW4gVG9uZS5QYXJ0Lmxvb3BTdGFydCBhbmRcblx0XHQgKiAgVG9uZS5QYXJ0Lmxvb3BFbmQuIEFuIGludGVnZXJcblx0XHQgKiAgdmFsdWUgY29ycmVzcG9uZHMgdG8gdGhlIG51bWJlciBvZlxuXHRcdCAqICBsb29wcyB0aGUgUGFydCBkb2VzIGFmdGVyIGl0IHN0YXJ0cy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW58UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGxvb3Bcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2xvb3AgdGhlIHBhcnQgOCB0aW1lc1xuXHRcdCAqIHBhcnQubG9vcCA9IDg7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ2xvb3AnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Ll9sb29wU3RhcnQgPSB0aGlzLl9sb29wU3RhcnQ7XG5cdCAgICAgICAgICAgICAgICBldmVudC5fbG9vcEVuZCA9IHRoaXMuX2xvb3BFbmQ7XG5cdCAgICAgICAgICAgICAgICBldmVudC5sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3Rlc3RMb29wQm91bmRyaWVzKGV2ZW50KTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGxvb3BFbmQgcG9pbnQgZGV0ZXJtaW5lcyB3aGVuIGl0IHdpbGxcblx0XHQgKiAgbG9vcCBpZiBUb25lLlBhcnQubG9vcCBpcyB0cnVlLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdsb29wRW5kJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wRW5kKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BFbmQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IHRoaXMudG9UaWNrcyhsb29wRW5kKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQubG9vcEVuZCA9IGxvb3BFbmQ7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGVzdExvb3BCb3VuZHJpZXMoZXZlbnQpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbG9vcFN0YXJ0IHBvaW50IGRldGVybWluZXMgd2hlbiBpdCB3aWxsXG5cdFx0ICogIGxvb3AgaWYgVG9uZS5QYXJ0Lmxvb3AgaXMgdHJ1ZS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdsb29wU3RhcnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX2xvb3BTdGFydCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wU3RhcnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gdGhpcy50b1RpY2tzKGxvb3BTdGFydCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50Lmxvb3BTdGFydCA9IHRoaXMubG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rlc3RMb29wQm91bmRyaWVzKGV2ZW50KTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBcdFRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBwYXJ0XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgcGxheWJhY2tSYXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QWxsKCdwbGF5YmFja1JhdGUnLCByYXRlKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0VGhlIG51bWJlciBvZiBzY2hlZHVsZWQgbm90ZXMgaW4gdGhlIHBhcnQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgbGVuZ3RoXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudHMubGVuZ3RoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhcnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5yZW1vdmVBbGwoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGFydDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBhdHRlcm4gYXJwZWdnaWF0ZXMgYmV0d2VlbiB0aGUgZ2l2ZW4gbm90ZXNcblx0XHQgKiAgICAgICAgIGluIGEgbnVtYmVyIG9mIHBhdHRlcm5zLiBTZWUgVG9uZS5DdHJsUGF0dGVybiBmb3Jcblx0XHQgKiAgICAgICAgIGEgZnVsbCBsaXN0IG9mIHBhdHRlcm5zLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwYXR0ZXJuID0gbmV3IFRvbmUuUGF0dGVybihmdW5jdGlvbih0aW1lLCBub3RlKXtcblx0XHQgKiAgIC8vdGhlIG9yZGVyIG9mIHRoZSBub3RlcyBwYXNzZWQgaW4gZGVwZW5kcyBvbiB0aGUgcGF0dGVyblxuXHRcdCAqIH0sIFtcIkMyXCIsIFwiRDRcIiwgXCJFNVwiLCBcIkE2XCJdLCBcInVwRG93blwiKTtcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTG9vcH1cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5cblx0XHQgKiAgQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXJwZWdnaWF0ZSBvdmVyLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXR0ZXJuID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ3ZhbHVlcycsXG5cdCAgICAgICAgICAgICdwYXR0ZXJuJ1xuXHQgICAgICAgIF0sIFRvbmUuUGF0dGVybik7XG5cdCAgICAgICAgVG9uZS5Mb29wLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBhdHRlcm4gbWFuYWdlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkN0cmxQYXR0ZXJufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXR0ZXJuID0gbmV3IFRvbmUuQ3RybFBhdHRlcm4oe1xuXHQgICAgICAgICAgICAndmFsdWVzJzogb3B0aW9ucy52YWx1ZXMsXG5cdCAgICAgICAgICAgICd0eXBlJzogb3B0aW9ucy5wYXR0ZXJuLFxuXHQgICAgICAgICAgICAnaW5kZXgnOiBvcHRpb25zLmluZGV4XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYXR0ZXJuLCBUb25lLkxvb3ApO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBhdHRlcm4uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3BhdHRlcm4nOiBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXAsXG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICd2YWx1ZXMnOiBbXVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgbm90ZXMgc2hvdWxkIGJlIGNhbGxlZFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0aGUgZXZlbnQgb2NjdXJzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhdHRlcm4ucHJvdG90eXBlLl90aWNrID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUsIHRoaXMuX3BhdHRlcm4udmFsdWUpO1xuXHQgICAgICAgIHRoaXMuX3BhdHRlcm4ubmV4dCgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY3VycmVudCBpbmRleCBpbiB0aGUgdmFsdWVzIGFycmF5LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGluZGV4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXR0ZXJuLnByb3RvdHlwZSwgJ2luZGV4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGF0dGVybi5pbmRleDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGkpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGF0dGVybi5pbmRleCA9IGk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGFycmF5IG9mIGV2ZW50cy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGF0dGVybiNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqICBAbmFtZSB2YWx1ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhdHRlcm4ucHJvdG90eXBlLCAndmFsdWVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGF0dGVybi52YWx1ZXM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BhdHRlcm4udmFsdWVzID0gdmFscztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcGF0dGVybi5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGF0dGVybiNcblx0XHQgKiAgQHR5cGUgeyp9XG5cdFx0ICogIEBuYW1lIHZhbHVlXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGF0dGVybi5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhdHRlcm4udmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHBhdHRlcm4gdHlwZS4gU2VlIFRvbmUuQ3RybFBhdHRlcm4gZm9yIHRoZSBmdWxsIGxpc3Qgb2YgcGF0dGVybnMuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhdHRlcm4jXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBuYW1lIHBhdHRlcm5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhdHRlcm4ucHJvdG90eXBlLCAncGF0dGVybicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhdHRlcm4udHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBhdHRlcm4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGF0dGVybi50eXBlID0gcGF0dGVybjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXR0ZXJufSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXR0ZXJuLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3BhdHRlcm4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3BhdHRlcm4gPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBhdHRlcm47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIHNlcXVlbmNlIGlzIGFuIGFsdGVybmF0ZSBub3RhdGlvbiBvZiBhIHBhcnQuIEluc3RlYWRcblx0XHQgKiAgICAgICAgIG9mIHBhc3NpbmcgaW4gYW4gYXJyYXkgb2YgW3RpbWUsIGV2ZW50XSBwYWlycywgcGFzc1xuXHRcdCAqICAgICAgICAgaW4gYW4gYXJyYXkgb2YgZXZlbnRzIHdoaWNoIHdpbGwgYmUgc3BhY2VkIGF0IHRoZVxuXHRcdCAqICAgICAgICAgZ2l2ZW4gc3ViZGl2aXNpb24uIFN1Yi1hcnJheXMgd2lsbCBzdWJkaXZpZGUgdGhhdCBiZWF0XG5cdFx0ICogICAgICAgICBieSB0aGUgbnVtYmVyIG9mIGl0ZW1zIGFyZSBpbiB0aGUgYXJyYXkuXG5cdFx0ICogICAgICAgICBTZXF1ZW5jZSBub3RhdGlvbiBpbnNwaXJhdGlvbiBmcm9tIFtUaWRhbF0oaHR0cDovL3lheHUub3JnL3RpZGFsLylcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IG5vdGVcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICAgIGV2ZW50cyAgVGhlIHNlcXVlbmNlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHN1YmRpdmlzaW9uICBUaGUgc3ViZGl2aXNpb24gYmV0d2VlbiB3aGljaCBldmVudHMgYXJlIHBsYWNlZC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuUGFydH1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2VxID0gbmV3IFRvbmUuU2VxdWVuY2UoZnVuY3Rpb24odGltZSwgbm90ZSl7XG5cdFx0ICogXHRjb25zb2xlLmxvZyhub3RlKTtcblx0XHQgKiAvL3N0cmFpZ2h0IHF1YXRlciBub3Rlc1xuXHRcdCAqIH0sIFtcIkM0XCIsIFwiRTRcIiwgXCJHNFwiLCBcIkE0XCJdLCBcIjRuXCIpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzZXEgPSBuZXcgVG9uZS5TZXF1ZW5jZShmdW5jdGlvbih0aW1lLCBub3RlKXtcblx0XHQgKiBcdGNvbnNvbGUubG9nKG5vdGUpO1xuXHRcdCAqIC8vc3ViZGl2aXNpb25zIGFyZSBnaXZlbiBhcyBzdWJhcnJheXNcblx0XHQgKiB9LCBbXCJDNFwiLCBbXCJFNFwiLCBcIkQ0XCIsIFwiRTRcIl0sIFwiRzRcIiwgW1wiQTRcIiwgXCJHNFwiXV0pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdjYWxsYmFjaycsXG5cdCAgICAgICAgICAgICdldmVudHMnLFxuXHQgICAgICAgICAgICAnc3ViZGl2aXNpb24nXG5cdCAgICAgICAgXSwgVG9uZS5TZXF1ZW5jZSk7XG5cdCAgICAgICAgLy9yZW1vdmUgdGhlIGV2ZW50c1xuXHQgICAgICAgIHZhciBldmVudHMgPSBvcHRpb25zLmV2ZW50cztcblx0ICAgICAgICBkZWxldGUgb3B0aW9ucy5ldmVudHM7XG5cdCAgICAgICAgVG9uZS5QYXJ0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHN1YmRpdmlzb24gb2YgZWFjaCBub3RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUaWNrc31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3ViZGl2aXNpb24gPSB0aGlzLnRvVGlja3Mob3B0aW9ucy5zdWJkaXZpc2lvbik7XG5cdCAgICAgICAgLy9pZiBubyB0aW1lIHdhcyBwYXNzZWQgaW4sIHRoZSBsb29wIGVuZCBpcyB0aGUgZW5kIG9mIHRoZSBjeWNsZVxuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYob3B0aW9ucy5sb29wRW5kKSAmJiBUb25lLmlzRGVmaW5lZChldmVudHMpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSBldmVudHMubGVuZ3RoICogdGhpcy5fc3ViZGl2aXNpb247XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vZGVmYXVsdHMgdG8gbG9vcGluZ1xuXHQgICAgICAgIHRoaXMuX2xvb3AgPSB0cnVlO1xuXHQgICAgICAgIC8vYWRkIGFsbCBvZiB0aGUgZXZlbnRzXG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKGV2ZW50cykpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuYWRkKGksIGV2ZW50c1tpXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TZXF1ZW5jZSwgVG9uZS5QYXJ0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXMuXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5kZWZhdWx0cyA9IHsgJ3N1YmRpdmlzaW9uJzogJzRuJyB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzdWJkaXZpc2lvbiBvZiB0aGUgc2VxdWVuY2UuIFRoaXMgY2FuIG9ubHkgYmVcblx0XHQgKiAgc2V0IGluIHRoZSBjb25zdHJ1Y3Rvci4gVGhlIHN1YmRpdmlzaW9uIGlzIHRoZVxuXHRcdCAqICBpbnRlcnZhbCBiZXR3ZWVuIHN1Y2Nlc3NpdmUgc3RlcHMuXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5TZXF1ZW5jZSNcblx0XHQgKiAgQG5hbWUgc3ViZGl2aXNpb25cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUsICdzdWJkaXZpc2lvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fc3ViZGl2aXNpb24pLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEdldC9TZXQgYW4gaW5kZXggb2YgdGhlIHNlcXVlbmNlLiBJZiB0aGUgaW5kZXggY29udGFpbnMgYSBzdWJhcnJheSxcblx0XHQgKiAgYSBUb25lLlNlcXVlbmNlIHJlcHJlc2VudGluZyB0aGF0IHN1Yi1hcnJheSB3aWxsIGJlIHJldHVybmVkLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzZXF1ZW5jZSA9IG5ldyBUb25lLlNlcXVlbmNlKHBsYXlOb3RlLCBbXCJFNFwiLCBcIkM0XCIsIFwiRiM0XCIsIFtcIkE0XCIsIFwiQmIzXCJdXSlcblx0XHQgKiBzZXF1ZW5jZS5hdCgwKS8vID0+IHJldHVybnMgXCJFNFwiXG5cdFx0ICogLy9zZXQgYSB2YWx1ZVxuXHRcdCAqIHNlcXVlbmNlLmF0KDAsIFwiRzNcIik7XG5cdFx0ICogLy9nZXQgYSBuZXN0ZWQgc2VxdWVuY2Vcblx0XHQgKiBzZXF1ZW5jZS5hdCgzKS5hdCgxKS8vID0+IHJldHVybnMgXCJCYjNcIlxuXHRcdCAqIEBwYXJhbSB7UG9zaXRpdmV9IGluZGV4IFRoZSBpbmRleCB0byBnZXQgb3Igc2V0XG5cdFx0ICogQHBhcmFtIHsqfSB2YWx1ZSBPcHRpb25hbGx5IHBhc3MgaW4gdGhlIHZhbHVlIHRvIHNldCBhdCB0aGUgZ2l2ZW4gaW5kZXguXG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLnByb3RvdHlwZS5hdCA9IGZ1bmN0aW9uIChpbmRleCwgdmFsdWUpIHtcblx0ICAgICAgICAvL2lmIHRoZSB2YWx1ZSBpcyBhbiBhcnJheSxcblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHZhbHVlKSkge1xuXHQgICAgICAgICAgICAvL3JlbW92ZSB0aGUgY3VycmVudCBldmVudCBhdCB0aGF0IGluZGV4XG5cdCAgICAgICAgICAgIHRoaXMucmVtb3ZlKGluZGV4KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jYWxsIHRoZSBwYXJlbnQncyBtZXRob2Rcblx0ICAgICAgICByZXR1cm4gVG9uZS5QYXJ0LnByb3RvdHlwZS5hdC5jYWxsKHRoaXMsIHRoaXMuX2luZGV4VGltZShpbmRleCksIHZhbHVlKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGFuIGV2ZW50IGF0IGFuIGluZGV4LCBpZiB0aGVyZSdzIGFscmVhZHkgc29tZXRoaW5nXG5cdFx0ICogIGF0IHRoYXQgaW5kZXgsIG92ZXJ3cml0ZSBpdC4gSWYgYHZhbHVlYCBpcyBhbiBhcnJheSxcblx0XHQgKiAgaXQgd2lsbCBiZSBwYXJzZWQgYXMgYSBzdWJzZXF1ZW5jZS5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGluZGV4IFRoZSBpbmRleCB0byBhZGQgdGhlIGV2ZW50IHRvXG5cdFx0ICogIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFkZCBhdCB0aGF0IGluZGV4XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNlcXVlbmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7XG5cdCAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHZhbHVlKSkge1xuXHQgICAgICAgICAgICAvL21ha2UgYSBzdWJzZXF1ZW5jZSBhbmQgYWRkIHRoYXQgdG8gdGhlIHNlcXVlbmNlXG5cdCAgICAgICAgICAgIHZhciBzdWJTdWJkaXZpc2lvbiA9IE1hdGgucm91bmQodGhpcy5fc3ViZGl2aXNpb24gLyB2YWx1ZS5sZW5ndGgpO1xuXHQgICAgICAgICAgICB2YWx1ZSA9IG5ldyBUb25lLlNlcXVlbmNlKHRoaXMuX3RpY2suYmluZCh0aGlzKSwgdmFsdWUsIFRvbmUuVGlja3Moc3ViU3ViZGl2aXNpb24pKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5hZGQuY2FsbCh0aGlzLCB0aGlzLl9pbmRleFRpbWUoaW5kZXgpLCB2YWx1ZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBhIHZhbHVlIGZyb20gdGhlIHNlcXVlbmNlIGJ5IGluZGV4XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGV2ZW50IHRvIHJlbW92ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TZXF1ZW5jZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuUGFydC5wcm90b3R5cGUucmVtb3ZlLmNhbGwodGhpcywgdGhpcy5faW5kZXhUaW1lKGluZGV4KSwgdmFsdWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHRpbWUgb2YgdGhlIGluZGV4IGdpdmVuIHRoZSBTZXF1ZW5jZSdzIHN1YmRpdmlzaW9uXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIGluZGV4XG5cdFx0ICogIEByZXR1cm4gIHtUaW1lfSAgVGhlIHRpbWUgb2YgdGhhdCBpbmRleFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUuX2luZGV4VGltZSA9IGZ1bmN0aW9uIChpbmRleCkge1xuXHQgICAgICAgIGlmIChpbmRleCBpbnN0YW5jZW9mIFRvbmUuVHJhbnNwb3J0VGltZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gaW5kZXg7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3MoaW5kZXggKiB0aGlzLl9zdWJkaXZpc2lvbiArIHRoaXMuc3RhcnRPZmZzZXQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuU2VxdWVuY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2VxdWVuY2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlB1bHNlT3NjaWxsYXRvciBpcyBhIHB1bHNlIG9zY2lsbGF0b3Igd2l0aCBjb250cm9sIG92ZXIgcHVsc2Ugd2lkdGgsXG5cdFx0ICogICAgICAgICBhbHNvIGtub3duIGFzIHRoZSBkdXR5IGN5Y2xlLiBBdCA1MCUgZHV0eSBjeWNsZSAod2lkdGggPSAwLjUpIHRoZSB3YXZlIGlzXG5cdFx0ICogICAgICAgICBhIHNxdWFyZSBhbmQgb25seSBvZGQtbnVtYmVyZWQgaGFybW9uaWNzIGFyZSBwcmVzZW50LiBBdCBhbGwgb3RoZXIgd2lkdGhzXG5cdFx0ICogICAgICAgICBldmVuLW51bWJlcmVkIGhhcm1vbmljcyBhcmUgcHJlc2VudC4gUmVhZCBtb3JlXG5cdFx0ICogICAgICAgICBbaGVyZV0oaHR0cHM6Ly93aWdnbGV3YXZlLndvcmRwcmVzcy5jb20vMjAxNC8wOC8xNi9wdWxzZS13YXZlZm9ybXMtYW5kLWhhcm1vbmljcy8pLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbZnJlcXVlbmN5XSBUaGUgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFt3aWR0aF0gVGhlIHdpZHRoIG9mIHRoZSBwdWxzZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwdWxzZSA9IG5ldyBUb25lLlB1bHNlT3NjaWxsYXRvcihcIkU1XCIsIDAuNCkudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3dpZHRoJ1xuXHQgICAgICAgIF0sIFRvbmUuT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgd2lkdGggb2YgdGhlIHB1bHNlLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLndpZHRoID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMud2lkdGgsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgZ2F0ZSB0aGUgd2lkdGggYW1vdW50XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzYXd0b290aCBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGggPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKHtcblx0ICAgICAgICAgICAgZnJlcXVlbmN5OiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgZGV0dW5lOiBvcHRpb25zLmRldHVuZSxcblx0ICAgICAgICAgICAgdHlwZTogJ3Nhd3Rvb3RoJyxcblx0ICAgICAgICAgICAgcGhhc2U6IG9wdGlvbnMucGhhc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX3Nhd3Rvb3RoLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGluIGNlbnRzLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IHRoaXMuX3Nhd3Rvb3RoLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaHJlc2hvbGQgdGhlIHNpZ25hbCB0byB0dXJuIGl0IGludG8gYSBzcXVhcmVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aHJlc2ggPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgaWYgKHZhbCA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAtMTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoLmNoYWluKHRoaXMuX3RocmVzaCwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMud2lkdGguY2hhaW4odGhpcy5fd2lkdGhHYXRlLCB0aGlzLl90aHJlc2gpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ3dpZHRoJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QdWxzZU9zY2lsbGF0b3IsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCBwYXJhbWV0ZXJzLlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICd3aWR0aCc6IDAuMlxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGguc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMSwgdGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGguc3RvcCh0aW1lKTtcblx0ICAgICAgICAvL3RoZSB3aWR0aCBpcyBzdGlsbCBjb25uZWN0ZWQgdG8gdGhlIG91dHB1dC5cblx0ICAgICAgICAvL3RoYXQgbmVlZHMgdG8gYmUgc3RvcHBlZCBhbHNvXG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgdGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHJlc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9zYXd0b290aC5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlB1bHNlT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2F3dG9vdGgucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zYXd0b290aC5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3IuIEFsd2F5cyByZXR1cm5zIFwicHVsc2VcIi5cblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QdWxzZU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuICdwdWxzZSc7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIHdhdmVmb3JtLiBDYW5ub3Qgc2V0IHBhcnRpYWxzIGZvciB0aGlzIHdhdmVmb3JtIHR5cGVcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QdWxzZU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFtdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwIG1ldGhvZC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5QdWxzZU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICd3aWR0aCcsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMud2lkdGguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMud2lkdGggPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dpZHRoR2F0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aHJlc2guZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RocmVzaCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QdWxzZU9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBXTU9zY2lsbGF0b3IgbW9kdWxhdGVzIHRoZSB3aWR0aCBvZiBhIFRvbmUuUHVsc2VPc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICBhdCB0aGUgbW9kdWxhdGlvbkZyZXF1ZW5jeS4gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBjb250aW51b3VzbHlcblx0XHQgKiAgICAgICAgIGNoYW5naW5nIHRoZSB0aW1icmUgb2YgdGhlIG9zY2lsbGF0b3IgYnkgYWx0ZXJpbmcgdGhlIGhhcm1vbmljc1xuXHRcdCAqICAgICAgICAgZ2VuZXJhdGVkLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IG1vZHVsYXRpb25GcmVxdWVuY3kgVGhlIG1vZHVsYXRpb24gZnJlcXVlbmN5IG9mIHRoZSB3aWR0aCBvZiB0aGUgcHVsc2UuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBwd20gPSBuZXcgVG9uZS5QV01Pc2NpbGxhdG9yKFwiQWIzXCIsIDAuMykudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRnJlcXVlbmN5J1xuXHQgICAgICAgIF0sIFRvbmUuUFdNT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcHVsc2Ugb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlB1bHNlT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcHVsc2UgPSBuZXcgVG9uZS5QdWxzZU9zY2lsbGF0b3Iob3B0aW9ucy5tb2R1bGF0aW9uRnJlcXVlbmN5KTtcblx0ICAgICAgICAvL2NoYW5nZSB0aGUgcHVsc2Ugb3NjaWxsYXRvciB0eXBlXG5cdCAgICAgICAgdGhpcy5fcHVsc2UuX3Nhd3Rvb3RoLnR5cGUgPSAnc2luZSc7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1vZHVsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3Ioe1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICdkZXR1bmUnOiBvcHRpb25zLmRldHVuZSxcblx0ICAgICAgICAgICAgJ3BoYXNlJzogb3B0aW9ucy5waGFzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNjYWxlIHRoZSBvc2NpbGxhdG9yIHNvIGl0IGRvZXNuJ3QgZ28gc2lsZW50XG5cdFx0XHQgKiAgYXQgdGhlIGV4dHJlbWUgdmFsdWVzLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IG5ldyBUb25lLk11bHRpcGx5KDIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IHRoaXMuX21vZHVsYXRvci5kZXR1bmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRpb24gcmF0ZSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkZyZXF1ZW5jeSA9IHRoaXMuX3B1bHNlLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmNoYWluKHRoaXMuX3NjYWxlLCB0aGlzLl9wdWxzZS53aWR0aCk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2UuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUFdNT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdtb2R1bGF0aW9uRnJlcXVlbmN5JzogMC40XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlLnN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2Uuc3RvcCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgcmVzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IucmVzdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZS5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yLiBBbHdheXMgcmV0dXJucyBcInB3bVwiLlxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBXTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAncHdtJztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwYXJ0aWFscyBvZiB0aGUgd2F2ZWZvcm0uIENhbm5vdCBzZXQgcGFydGlhbHMgZm9yIHRoaXMgd2F2ZWZvcm0gdHlwZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBXTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBbXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBXTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vZHVsYXRvci5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBXTU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QV01Pc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5GTU9zY2lsbGF0b3Jcblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSBzdGFydGluZyBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSBtb2R1bGF0aW9uVHlwZSBUaGUgdHlwZSBvZiB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hIHNpbmUgb3NjaWxsYXRvciBmcmVxdWVuY3ktbW9kdWxhdGVkIGJ5IGEgc3F1YXJlIHdhdmVcblx0XHQgKiB2YXIgZm1Pc2MgPSBuZXcgVG9uZS5GTU9zY2lsbGF0b3IoXCJBYjNcIiwgXCJzaW5lXCIsIFwic3F1YXJlXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1Pc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25UeXBlJ1xuXHQgICAgICAgIF0sIFRvbmUuRk1Pc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbmV3IFRvbmUuT3NjaWxsYXRvcihvcHRpb25zLmZyZXF1ZW5jeSwgb3B0aW9ucy50eXBlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvcidzIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5fY2Fycmllci5kZXR1bmU7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUudmFsdWUgPSBvcHRpb25zLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdGlvbiBpbmRleCB3aGljaCBpcyBpbiBlc3NlbmNlIHRoZSBkZXB0aCBvciBhbW91bnQgb2YgdGhlIG1vZHVsYXRpb24uIEluIG90aGVyIHRlcm1zIGl0IGlzIHRoZVxuXHRcdFx0ICogIHJhdGlvIG9mIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG1vZHVsYXRpbmcgc2lnbmFsIChtZikgdG8gdGhlIGFtcGxpdHVkZSBvZiB0aGVcblx0XHRcdCAqICBtb2R1bGF0aW5nIHNpZ25hbCAobWEpIC0tIGFzIGluIG1hL21mLlxuXHRcdFx0ICpcdEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqXHRAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleCA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMubW9kdWxhdGlvbkluZGV4KTtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleC51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdGluZyBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3Iob3B0aW9ucy5mcmVxdWVuY3ksIG9wdGlvbnMubW9kdWxhdGlvblR5cGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhcm1vbmljaXR5IGlzIHRoZSBmcmVxdWVuY3kgcmF0aW8gYmV0d2VlbiB0aGUgY2FycmllciBhbmQgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9ycy5cblx0XHRcdCAqICBBIGhhcm1vbmljaXR5IG9mIDEgZ2l2ZXMgYm90aCBvc2NpbGxhdG9ycyB0aGUgc2FtZSBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHRoZSBtb2R1bGF0b3IgYW4gb2N0YXZlIGJlbG93IGNhcnJpZXJcblx0XHRcdCAqIHN5bnRoLmhhcm1vbmljaXR5LnZhbHVlID0gMC41O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMuaGFybW9uaWNpdHkpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5vZGUgd2hlcmUgdGhlIG1vZHVsYXRpb24gaGFwcGVuc1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbmV3IFRvbmUuR2FpbigwKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9jYXJyaWVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5tb2R1bGF0aW9uSW5kZXgsIHRoaXMuX21vZHVsYXRpb25Ob2RlKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY29ubmVjdCh0aGlzLl9tb2R1bGF0aW9uTm9kZS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5jb25uZWN0KHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3QodGhpcy5fbW9kdWxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgdGhpcy5waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkluZGV4Jyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GTU9zY2lsbGF0b3IsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnOiAyLFxuXHQgICAgICAgICdtb2R1bGF0aW9uVHlwZSc6ICdzcXVhcmUnLFxuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5zdG9wKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnJlc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3Jcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBuYW1lIG1vZHVsYXRpb25UeXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLCAnbW9kdWxhdGlvblR5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2R1bGF0b3IudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRk1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSBjYXJyaWVyIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRk1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBhcnRpYWxzID0gWzEsIDAuMiwgMC4wMV07XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXJyaWVyLnBhcnRpYWxzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci5wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkZNT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uSW5kZXggPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZNT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQU1Pc2NpbGxhdG9yXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuT3NjaWxsYXRvcn1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IG1vZHVsYXRpb25UeXBlIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Egc2luZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeS1tb2R1bGF0ZWQgYnkgYSBzcXVhcmUgd2F2ZVxuXHRcdCAqIHZhciBmbU9zYyA9IG5ldyBUb25lLkFNT3NjaWxsYXRvcihcIkFiM1wiLCBcInNpbmVcIiwgXCJzcXVhcmVcIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvblR5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5BTU9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKG9wdGlvbnMuZnJlcXVlbmN5LCBvcHRpb25zLnR5cGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yJ3MgZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5fY2Fycmllci5kZXR1bmU7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUudmFsdWUgPSBvcHRpb25zLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdGluZyBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3Iob3B0aW9ucy5mcmVxdWVuY3ksIG9wdGlvbnMubW9kdWxhdGlvblR5cGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbnZlcnQgdGhlIC0xLDEgb3V0cHV0IHRvIDAsMVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkF1ZGlvVG9HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUgPSBuZXcgVG9uZS5BdWRpb1RvR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhcm1vbmljaXR5IGlzIHRoZSBmcmVxdWVuY3kgcmF0aW8gYmV0d2VlbiB0aGUgY2FycmllciBhbmQgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9ycy5cblx0XHRcdCAqICBBIGhhcm1vbmljaXR5IG9mIDEgZ2l2ZXMgYm90aCBvc2NpbGxhdG9ycyB0aGUgc2FtZSBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHRoZSBtb2R1bGF0b3IgYW4gb2N0YXZlIGJlbG93IGNhcnJpZXJcblx0XHRcdCAqIHN5bnRoLmhhcm1vbmljaXR5LnZhbHVlID0gMC41O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMuaGFybW9uaWNpdHkpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5vZGUgd2hlcmUgdGhlIG1vZHVsYXRpb24gaGFwcGVuc1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbmV3IFRvbmUuR2FpbigwKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdCh0aGlzLl9tb2R1bGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY2hhaW4odGhpcy5fbW9kdWxhdGlvblNjYWxlLCB0aGlzLl9tb2R1bGF0aW9uTm9kZS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmNoYWluKHRoaXMuX21vZHVsYXRpb25Ob2RlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFNT3NjaWxsYXRvciwgVG9uZS5Pc2NpbGxhdG9yKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdtb2R1bGF0aW9uVHlwZSc6ICdzcXVhcmUnLFxuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5zdG9wKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICByZXN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnJlc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3Jcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkFNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIG1vZHVsYXRpb25UeXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLCAnbW9kdWxhdGlvblR5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2R1bGF0b3IudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQU1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSBjYXJyaWVyIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQU1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBhcnRpYWxzID0gWzEsIDAuMiwgMC4wMV07XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXJyaWVyLnBhcnRpYWxzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci5wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkFNT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvblNjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFNT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRmF0T3NjaWxsYXRvclxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IG1vZHVsYXRpb25UeXBlIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Egc2luZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeS1tb2R1bGF0ZWQgYnkgYSBzcXVhcmUgd2F2ZVxuXHRcdCAqIHZhciBmbU9zYyA9IG5ldyBUb25lLkZhdE9zY2lsbGF0b3IoXCJBYjNcIiwgXCJzaW5lXCIsIFwic3F1YXJlXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZScsXG5cdCAgICAgICAgICAgICdzcHJlYWQnXG5cdCAgICAgICAgXSwgVG9uZS5GYXRPc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yJ3MgZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFycmF5IG9mIG9zY2lsbGF0b3JzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0b3RhbCBzcHJlYWQgb2YgdGhlIG9zY2lsbGF0b3JzXG5cdFx0XHQgKiAgQHR5cGUgIHtDZW50c31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3ByZWFkID0gb3B0aW9ucy5zcHJlYWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvcnNcblx0XHRcdCAqICBAdHlwZSB7RGVncmVlc31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGhhc2UgPSBvcHRpb25zLnBoYXNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwYXJ0aWFscyBhcnJheVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucy5wYXJ0aWFscywgW10pO1xuXHQgICAgICAgIC8vc2V0IHRoZSBjb3VudCBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLmNvdW50ID0gb3B0aW9ucy5jb3VudDtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRmF0T3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdzcHJlYWQnOiAyMCxcblx0ICAgICAgICAnY291bnQnOiAzLFxuXHQgICAgICAgICd0eXBlJzogJ3Nhd3Rvb3RoJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICBvc2Muc3RhcnQodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICBvc2Muc3RvcCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgcmVzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgYWxsIG9mIHRoZSBvc2NpbGxhdG9yc1xuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGl0ZXJhdG9yICBUaGUgaXRlcmF0b3IgZnVuY3Rpb25cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUuX2ZvckVhY2ggPSBmdW5jdGlvbiAoaXRlcmF0b3IpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwodGhpcywgdGhpcy5fb3NjaWxsYXRvcnNbaV0sIGkpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgY2FycmllciBvc2NpbGxhdG9yXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmF0T3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgIG9zYy50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGV0dW5lIHNwcmVhZCBiZXR3ZWVuIHRoZSBvc2NpbGxhdG9ycy4gSWYgXCJjb3VudFwiIGlzXG5cdFx0ICogc2V0IHRvIDMgb3NjaWxsYXRvcnMgYW5kIHRoZSBcInNwcmVhZFwiIGlzIHNldCB0byA0MCxcblx0XHQgKiB0aGUgdGhyZWUgb3NjaWxsYXRvcnMgd291bGQgYmUgZGV0dW5lZCBsaWtlIHRoaXM6IFstMjAsIDAsIDIwXVxuXHRcdCAqIGZvciBhIHRvdGFsIGRldHVuZSBzcHJlYWQgb2YgNDAgY2VudHMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmF0T3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7Q2VudHN9XG5cdFx0ICogQG5hbWUgc3ByZWFkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3NwcmVhZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NwcmVhZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNwcmVhZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zcHJlYWQgPSBzcHJlYWQ7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGggPiAxKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSAtc3ByZWFkIC8gMjtcblx0ICAgICAgICAgICAgICAgIHZhciBzdGVwID0gc3ByZWFkIC8gKHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjLCBpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb3NjLmRldHVuZS52YWx1ZSA9IHN0YXJ0ICsgc3RlcCAqIGk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBkZXR1bmVkIG9zY2lsbGF0b3JzXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmF0T3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIGNvdW50XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ2NvdW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoY291bnQpIHtcblx0ICAgICAgICAgICAgY291bnQgPSBNYXRoLm1heChjb3VudCwgMSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGggIT09IGNvdW50KSB7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgcGFydGlhbHMgPSB0aGlzLnBhcnRpYWxzO1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cdCAgICAgICAgICAgICAgICAvL2Rpc3Bvc2UgdGhlIHByZXZpb3VzIG9zY2lsbGF0b3JzXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvc2MuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycyA9IFtdO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b20pIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgb3NjLnBhcnRpYWxzID0gdGhpcy5fcGFydGlhbHM7XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgb3NjLnR5cGUgPSB0aGlzLl90eXBlO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBvc2MucGhhc2UgPSB0aGlzLl9waGFzZTtcblx0ICAgICAgICAgICAgICAgICAgICBvc2Mudm9sdW1lLnZhbHVlID0gLTYgLSBjb3VudCAqIDEuMTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KG9zYy5mcmVxdWVuY3kpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3Qob3NjLmRldHVuZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgb3NjLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldID0gb3NjO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgLy9zZXQgdGhlIHNwcmVhZFxuXHQgICAgICAgICAgICAgICAgdGhpcy5zcHJlYWQgPSB0aGlzLl9zcHJlYWQ7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG9zYy5zdGFydCgpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgb3NjLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSBjYXJyaWVyIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmF0T3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9zYy5wYXJ0aWFscyA9IFsxLCAwLjIsIDAuMDFdO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnRpYWxzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBwYXJ0aWFscztcblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbTtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgICAgICBvc2MucGFydGlhbHMgPSBwYXJ0aWFscztcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuRmF0T3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5kaXNwb3NlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3BhcnRpYWxzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GYXRPc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5PbW5pT3NjaWxsYXRvciBhZ2dyZWdhdGVzIFRvbmUuT3NjaWxsYXRvciwgVG9uZS5QdWxzZU9zY2lsbGF0b3IsXG5cdFx0ICogICAgICAgICBUb25lLlBXTU9zY2lsbGF0b3IsIFRvbmUuRk1Pc2NpbGxhdG9yLCBUb25lLkFNT3NjaWxsYXRvciwgYW5kIFRvbmUuRmF0T3NjaWxsYXRvclxuXHRcdCAqICAgICAgICAgaW50byBvbmUgY2xhc3MuIFRoZSBvc2NpbGxhdG9yIGNsYXNzIGNhbiBiZSBjaGFuZ2VkIGJ5IHNldHRpbmcgdGhlIGB0eXBlYC5cblx0XHQgKiAgICAgICAgIGBvbW5pT3NjLnR5cGUgPSBcInB3bVwiYCB3aWxsIHNldCBpdCB0byB0aGUgVG9uZS5QV01Pc2NpbGxhdG9yLiBQcmVmaXhpbmdcblx0XHQgKiAgICAgICAgIGFueSBvZiB0aGUgYmFzaWMgdHlwZXMgKFwic2luZVwiLCBcInNxdWFyZTRcIiwgZXRjLikgd2l0aCBcImZtXCIsIFwiYW1cIiwgb3IgXCJmYXRcIlxuXHRcdCAqICAgICAgICAgd2lsbCB1c2UgdGhlIEZNT3NjaWxsYXRvciwgQU1Pc2NpbGxhdG9yIG9yIEZhdE9zY2lsbGF0b3IgcmVzcGVjdGl2ZWx5LlxuXHRcdCAqICAgICAgICAgRm9yIGV4YW1wbGU6IGBvbW5pT3NjLnR5cGUgPSBcImZhdHNhd3Rvb3RoXCJgIHdpbGwgY3JlYXRlIHNldCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICAgICAgICAgdG8gYSBGYXRPc2NpbGxhdG9yIG9mIHR5cGUgXCJzYXd0b290aFwiLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIGluaXRpYWwgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIG9tbmlPc2MgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcihcIkMjNFwiLCBcInB3bVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5PbW5pT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yIHNvdXJjZVxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZVR5cGUgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICAvL3NldCB0aGUgb3NjaWxsYXRvclxuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIC8vc2V0IHRoZSBvcHRpb25zXG5cdCAgICAgICAgdGhpcy5zZXQob3B0aW9ucyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5PbW5pT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiA0NDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ3BoYXNlJzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAZW51bSB7U3RyaW5nfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgdmFyIE9tbmlPc2NUeXBlID0ge1xuXHQgICAgICAgIFB1bHNlOiAnUHVsc2VPc2NpbGxhdG9yJyxcblx0ICAgICAgICBQV006ICdQV01Pc2NpbGxhdG9yJyxcblx0ICAgICAgICBPc2M6ICdPc2NpbGxhdG9yJyxcblx0ICAgICAgICBGTTogJ0ZNT3NjaWxsYXRvcicsXG5cdCAgICAgICAgQU06ICdBTU9zY2lsbGF0b3InLFxuXHQgICAgICAgIEZhdDogJ0ZhdE9zY2lsbGF0b3InXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0byBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdG8gc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0b3AodGltZSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yLiBDYW4gYmUgYW55IG9mIHRoZSBiYXNpYyB0eXBlczogc2luZSwgc3F1YXJlLCB0cmlhbmdsZSwgc2F3dG9vdGguIE9yXG5cdFx0ICogcHJlZml4IHRoZSBiYXNpYyB0eXBlcyB3aXRoIFwiZm1cIiwgXCJhbVwiLCBvciBcImZhdFwiIHRvIHVzZSB0aGUgRk1Pc2NpbGxhdG9yLCBBTU9zY2lsbGF0b3Igb3IgRmF0T3NjaWxsYXRvclxuXHRcdCAqIHR5cGVzLiBUaGUgb3NjaWxsYXRvciBjb3VsZCBhbHNvIGJlIHNldCB0byBcInB3bVwiIG9yIFwicHVsc2VcIi4gQWxsIG9mIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZVxuXHRcdCAqIG9zY2lsbGF0b3IncyBjbGFzcyBhcmUgYWNjZXNzaWJsZSB3aGVuIHRoZSBvc2NpbGxhdG9yIGlzIHNldCB0byB0aGF0IHR5cGUsIGJ1dCB0aHJvd3MgYW4gZXJyb3Jcblx0XHQgKiB3aGVuIGl0J3Mgbm90LlxuXHRcdCAqXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvbW5pT3NjLnR5cGUgPSBcInB3bVwiO1xuXHRcdCAqIC8vbW9kdWxhdGlvbkZyZXF1ZW5jeSBpcyBwYXJhbWV0ZXIgd2hpY2ggaXMgYXZhaWxhYmxlXG5cdFx0ICogLy9vbmx5IHdoZW4gdGhlIHR5cGUgaXMgXCJwd21cIi5cblx0XHQgKiBvbW5pT3NjLm1vZHVsYXRpb25GcmVxdWVuY3kudmFsdWUgPSAwLjU7XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL2FuIHNxdWFyZSB3YXZlIGZyZXF1ZW5jeSBtb2R1bGF0ZWQgYnkgYSBzYXd0b290aFxuXHRcdCAqIG9tbmlPc2MudHlwZSA9IFwiZm1zcXVhcmVcIjtcblx0XHQgKiBvbW5pT3NjLm1vZHVsYXRpb25UeXBlID0gXCJzYXd0b290aFwiO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIHByZWZpeCA9ICcnO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRk0pIHtcblx0ICAgICAgICAgICAgICAgIHByZWZpeCA9ICdmbSc7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuQU0pIHtcblx0ICAgICAgICAgICAgICAgIHByZWZpeCA9ICdhbSc7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRmF0KSB7XG5cdCAgICAgICAgICAgICAgICBwcmVmaXggPSAnZmF0Jztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgdGhpcy5fb3NjaWxsYXRvci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICBpZiAodHlwZS5zdWJzdHIoMCwgMikgPT09ICdmbScpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuRk0pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZS5zdWJzdHIoMik7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5zdWJzdHIoMCwgMikgPT09ICdhbScpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuQU0pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZS5zdWJzdHIoMik7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5zdWJzdHIoMCwgMykgPT09ICdmYXQnKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdPc2NpbGxhdG9yKE9tbmlPc2NUeXBlLkZhdCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlLnN1YnN0cigzKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAncHdtJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5QV00pO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdwdWxzZScpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuUHVsc2UpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5Pc2MpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSB3YXZlZm9ybS4gQSBwYXJ0aWFsIHJlcHJlc2VudHNcblx0XHQgKiB0aGUgYW1wbGl0dWRlIGF0IGEgaGFybW9uaWMuIFRoZSBmaXJzdCBoYXJtb25pYyBpcyB0aGVcblx0XHQgKiBmdW5kYW1lbnRhbCBmcmVxdWVuY3ksIHRoZSBzZWNvbmQgaXMgdGhlIG9jdGF2ZSBhbmQgc28gb25cblx0XHQgKiBmb2xsb3dpbmcgdGhlIGhhcm1vbmljIHNlcmllcy5cblx0XHQgKiBTZXR0aW5nIHRoaXMgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgdHlwZSB0byBcImN1c3RvbVwiLlxuXHRcdCAqIFRoZSB2YWx1ZSBpcyBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSB0eXBlIGlzIG5vdCBcImN1c3RvbVwiLlxuXHRcdCAqIFRoaXMgaXMgbm90IGF2YWlsYWJsZSBvbiBcInB3bVwiIGFuZCBcInB1bHNlXCIgb3NjaWxsYXRvciB0eXBlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9zYy5wYXJ0aWFscyA9IFsxLCAwLjIsIDAuMDFdO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnBhcnRpYWxzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCBhIG1lbWJlci9hdHRyaWJ1dGUgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gcGFyYW1zXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gcmFtcFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuT21uaU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChwYXJhbXMsIHZhbHVlKSB7XG5cdCAgICAgICAgLy9tYWtlIHN1cmUgdGhlIHR5cGUgaXMgc2V0IGZpcnN0XG5cdCAgICAgICAgaWYgKHBhcmFtcyA9PT0gJ3R5cGUnKSB7XG5cdCAgICAgICAgICAgIHRoaXMudHlwZSA9IHZhbHVlO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc09iamVjdChwYXJhbXMpICYmIHBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgndHlwZScpKSB7XG5cdCAgICAgICAgICAgIHRoaXMudHlwZSA9IHBhcmFtcy50eXBlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3RoZW4gc2V0IHRoZSByZXN0XG5cdCAgICAgICAgVG9uZS5wcm90b3R5cGUuc2V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbm5lY3QgdGhlIG9zY2lsbGF0b3IgdG8gdGhlIGZyZXF1ZW5jeSBhbmQgZGV0dW5lIHNpZ25hbHNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLl9jcmVhdGVOZXdPc2NpbGxhdG9yID0gZnVuY3Rpb24gKG9zY1R5cGUpIHtcblx0ICAgICAgICBpZiAob3NjVHlwZSAhPT0gdGhpcy5fc291cmNlVHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2VUeXBlID0gb3NjVHlwZTtcblx0ICAgICAgICAgICAgdmFyIE9zY2lsbGF0b3JDb25zdHJ1Y3RvciA9IFRvbmVbb3NjVHlwZV07XG5cdCAgICAgICAgICAgIC8vc2hvcnQgZGVsYXkgdG8gYXZvaWQgY2xpY2tzIG9uIHRoZSBjaGFuZ2Vcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgb2xkT3NjID0gdGhpcy5fb3NjaWxsYXRvcjtcblx0ICAgICAgICAgICAgICAgIG9sZE9zYy5zdG9wKG5vdyk7XG5cdCAgICAgICAgICAgICAgICAvL2Rpc3Bvc2UgdGhlIG9sZCBvbmVcblx0ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvbGRPc2MuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICAgICAgICAgIG9sZE9zYyA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICB9LCB0aGlzLmJsb2NrVGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG5ldyBPc2NpbGxhdG9yQ29uc3RydWN0b3IoKTtcblx0ICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9vc2NpbGxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3QodGhpcy5fb3NjaWxsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KG5vdyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB3aWR0aCBvZiB0aGUgb3NjaWxsYXRvciAob25seSBpZiB0aGUgb3NjaWxsYXRvciBpcyBzZXQgdG8gXCJwdWxzZVwiKVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiBAc2lnbmFsXG5cdFx0ICogQG5hbWUgd2lkdGhcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHZhciBvbW5pT3NjID0gbmV3IFRvbmUuT21uaU9zY2lsbGF0b3IoNDQwLCBcInB1bHNlXCIpO1xuXHRcdCAqIC8vY2FuIGFjY2VzcyB0aGUgd2lkdGggYXR0cmlidXRlIG9ubHkgaWYgdHlwZSA9PT0gXCJwdWxzZVwiXG5cdFx0ICogb21uaU9zYy53aWR0aC52YWx1ZSA9IDAuMjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3dpZHRoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuUHVsc2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLndpZHRoO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbnVtYmVyIG9mIGRldHVuZWQgb3NjaWxsYXRvcnNcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIGNvdW50XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdjb3VudCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZhdCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IuY291bnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGNvdW50KSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GYXQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY291bnQgPSBjb3VudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRldHVuZSBzcHJlYWQgYmV0d2VlbiB0aGUgb3NjaWxsYXRvcnMuIElmIFwiY291bnRcIiBpc1xuXHRcdCAqIHNldCB0byAzIG9zY2lsbGF0b3JzIGFuZCB0aGUgXCJzcHJlYWRcIiBpcyBzZXQgdG8gNDAsXG5cdFx0ICogdGhlIHRocmVlIG9zY2lsbGF0b3JzIHdvdWxkIGJlIGRldHVuZWQgbGlrZSB0aGlzOiBbLTIwLCAwLCAyMF1cblx0XHQgKiBmb3IgYSB0b3RhbCBkZXR1bmUgc3ByZWFkIG9mIDQwIGNlbnRzLiBTZWUgVG9uZS5GYXRPc2NpbGxhdG9yXG5cdFx0ICogZm9yIG1vcmUgaW5mby5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7Q2VudHN9XG5cdFx0ICogQG5hbWUgc3ByZWFkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdzcHJlYWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GYXQpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnNwcmVhZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3ByZWFkKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GYXQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3ByZWFkID0gc3ByZWFkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3IuIE9ubHkgaWYgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiBpcyBzZXQgdG8gXCJhbVwiIG9yIFwiZm1cIiB0eXBlcy4gc2VlLiBUb25lLkFNT3NjaWxsYXRvciBvciBUb25lLkZNT3NjaWxsYXRvclxuXHRcdCAqIGZvciBtb3JlIGluZm8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHQgKiBAbmFtZSBtb2R1bGF0aW9uVHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnbW9kdWxhdGlvblR5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GTSB8fCB0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5BTSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IubW9kdWxhdGlvblR5cGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1UeXBlKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GTSB8fCB0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5BTSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5tb2R1bGF0aW9uVHlwZSA9IG1UeXBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbW9kdWxhdGlvbiBpbmRleCB3aGljaCBpcyBpbiBlc3NlbmNlIHRoZSBkZXB0aCBvciBhbW91bnQgb2YgdGhlIG1vZHVsYXRpb24uIEluIG90aGVyIHRlcm1zIGl0IGlzIHRoZVxuXHRcdCAqIHJhdGlvIG9mIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG1vZHVsYXRpbmcgc2lnbmFsIChtZikgdG8gdGhlIGFtcGxpdHVkZSBvZiB0aGVcblx0XHQgKiBtb2R1bGF0aW5nIHNpZ25hbCAobWEpIC0tIGFzIGluIG1hL21mLlxuXHRcdCAqIFNlZSBUb25lLkZNT3NjaWxsYXRvciBmb3IgbW9yZSBpbmZvLlxuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAc2lnbmFsXG5cdFx0ICogQG5hbWUgbW9kdWxhdGlvbkluZGV4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uSW5kZXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GTSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IubW9kdWxhdGlvbkluZGV4O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIGZyZXF1ZW5jeSByYXRpbyBiZXR3ZWVuIHRoZSBjYXJyaWVyIGFuZCB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3JzLlxuXHRcdCAqICBBIGhhcm1vbmljaXR5IG9mIDEgZ2l2ZXMgYm90aCBvc2NpbGxhdG9ycyB0aGUgc2FtZSBmcmVxdWVuY3kuXG5cdFx0ICogIEhhcm1vbmljaXR5ID0gMiBtZWFucyBhIGNoYW5nZSBvZiBhbiBvY3RhdmUuIFNlZSBUb25lLkFNT3NjaWxsYXRvciBvciBUb25lLkZNT3NjaWxsYXRvclxuXHRcdCAqICBmb3IgbW9yZSBpbmZvLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiAgQHNpZ25hbFxuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGhhcm1vbmljaXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdoYXJtb25pY2l0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZNIHx8IHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkFNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5oYXJtb25pY2l0eTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1vZHVsYXRpb25GcmVxdWVuY3kgU2lnbmFsIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogKG9ubHkgaWYgdGhlIG9zY2lsbGF0b3IgdHlwZSBpcyBzZXQgdG8gcHdtKS4gU2VlXG5cdFx0ICogVG9uZS5QV01Pc2NpbGxhdG9yIGZvciBtb3JlIGluZm8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiBAc2lnbmFsXG5cdFx0ICogQG5hbWUgbW9kdWxhdGlvbkZyZXF1ZW5jeVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIG9tbmlPc2MgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcig0NDAsIFwicHdtXCIpO1xuXHRcdCAqIC8vY2FuIGFjY2VzcyB0aGUgbW9kdWxhdGlvbkZyZXF1ZW5jeSBhdHRyaWJ1dGUgb25seSBpZiB0eXBlID09PSBcInB3bVwiXG5cdFx0ICogb21uaU9zYy5tb2R1bGF0aW9uRnJlcXVlbmN5LnZhbHVlID0gMC4yO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnbW9kdWxhdGlvbkZyZXF1ZW5jeScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLlBXTSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IubW9kdWxhdGlvbkZyZXF1ZW5jeTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLk9tbmlPc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc291cmNlVHlwZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuT21uaU9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQmFzZS1jbGFzcyBmb3IgYWxsIGluc3RydW1lbnRzXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkluc3RydW1lbnQuZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG91dHB1dCBhbmQgdm9sdW1lIHRyaW1pbmcgbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Wb2x1bWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKG9wdGlvbnMudm9sdW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCBpbiBkZWNpYmVscy5cblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiBzb3VyY2Uudm9sdW1lLnZhbHVlID0gLTY7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZS52b2x1bWU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3ZvbHVtZScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogS2VlcCB0cmFjayBvZiBhbGwgZXZlbnRzIHNjaGVkdWxlZCB0byB0aGUgdHJhbnNwb3J0XG5cdFx0XHQgKiB3aGVuIHRoZSBpbnN0cnVtZW50IGlzICdzeW5jZWQnXG5cdFx0XHQgKiBAdHlwZSB7QXJyYXk8TnVtYmVyPn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMgPSBbXTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkluc3RydW1lbnQsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzXG5cdFx0ICogIEB0eXBlIHtvYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgLyoqIHRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCBpbiBkZWNpYmVscyAqL1xuXHQgICAgICAgICd2b2x1bWUnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEBhYnN0cmFjdFxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG5vdGUgdGhlIG5vdGUgdG8gdHJpZ2dlclxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdG8gdHJpZ2dlciB0aGUgbnRvZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSB0byB0cmlnZ2VyIHRoZSBub3RlXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBUb25lLm5vT3A7XG5cdCAgICAvKipcblx0XHQgKiAgQGFic3RyYWN0XG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB3aGVuIHRvIHRyaWdnZXIgdGhlIHJlbGVhc2Vcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBUb25lLm5vT3A7XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBpbnN0cnVtZW50IHRvIHRoZSBUcmFuc3BvcnQuIEFsbCBzdWJzZXF1ZW50IGNhbGxzIG9mXG5cdFx0ICogW3RyaWdnZXJBdHRhY2tdKCN0cmlnZ2VyYXR0YWNrKSBhbmQgW3RyaWdnZXJSZWxlYXNlXSgjdHJpZ2dlcnJlbGVhc2UpXG5cdFx0ICogd2lsbCBiZSBzY2hlZHVsZWQgYWxvbmcgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIGluc3RydW1lbnQuc3luYygpXG5cdFx0ICogLy9zY2hlZHVsZSAzIG5vdGVzIHdoZW4gdGhlIHRyYW5zcG9ydCBmaXJzdCBzdGFydHNcblx0XHQgKiBpbnN0cnVtZW50LnRyaWdnZXJBdHRhY2tSZWxlYXNlKCdDNCcsICc4bicsIDApXG5cdFx0ICogaW5zdHJ1bWVudC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnRTQnLCAnOG4nLCAnOG4nKVxuXHRcdCAqIGluc3RydW1lbnQudHJpZ2dlckF0dGFja1JlbGVhc2UoJ0c0JywgJzhuJywgJzRuJylcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgdG8gaGVhciB0aGUgbm90ZXNcblx0XHQgKiBUcmFuc3BvcnQuc3RhcnQoKVxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyQXR0YWNrJywgMSk7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlclJlbGVhc2UnLCAwKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBXcmFwIHRoZSBnaXZlbiBtZXRob2Qgc28gdGhhdCBpdCBjYW4gYmUgc3luY2hyb25pemVkXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG1ldGhvZCBXaGljaCBtZXRob2QgdG8gd3JhcCBhbmQgc3luY1xuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdGltZVBvc2l0aW9uIFdoYXQgcG9zaXRpb24gdGhlIHRpbWUgYXJndW1lbnQgYXBwZWFycyBpblxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLl9zeW5jTWV0aG9kID0gZnVuY3Rpb24gKG1ldGhvZCwgdGltZVBvc2l0aW9uKSB7XG5cdCAgICAgICAgdmFyIG9yaWdpbmFsTWV0aG9kID0gdGhpc1snX29yaWdpbmFsXycgKyBtZXRob2RdID0gdGhpc1ttZXRob2RdO1xuXHQgICAgICAgIHRoaXNbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICB2YXIgdGltZSA9IGFyZ3NbdGltZVBvc2l0aW9uXTtcblx0ICAgICAgICAgICAgdmFyIGlkID0gVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24gKHQpIHtcblx0ICAgICAgICAgICAgICAgIGFyZ3NbdGltZVBvc2l0aW9uXSA9IHQ7XG5cdCAgICAgICAgICAgICAgICBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTtcblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCB0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzLnB1c2goaWQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBVbnN5bmMgdGhlIGluc3RydW1lbnQgZnJvbSB0aGUgVHJhbnNwb3J0XG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS51bnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKGlkKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMgPSBbXTtcblx0ICAgICAgICBpZiAodGhpcy5fb3JpZ2luYWxfdHJpZ2dlckF0dGFjaykge1xuXHQgICAgICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sgPSB0aGlzLl9vcmlnaW5hbF90cmlnZ2VyQXR0YWNrO1xuXHQgICAgICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlID0gdGhpcy5fb3JpZ2luYWxfdHJpZ2dlclJlbGVhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHRoZW4gdGhlIHJlbGVhc2UgYWZ0ZXIgdGhlIGR1cmF0aW9uLlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIFRoZSBub3RlIHRvIHRyaWdnZXIuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGR1cmF0aW9uIEhvdyBsb25nIHRoZSBub3RlIHNob3VsZCBiZSBoZWxkIGZvciBiZWZvcmVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmluZyB0aGUgcmVsZWFzZS4gVGhpcyB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gIFdoZW4gdGhlIG5vdGUgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSBUaGUgdmVsb2NpdHkgdGhlIG5vdGUgc2hvdWxkIGJlIHRyaWdnZXJlZCBhdC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciBcIkM0XCIgZm9yIHRoZSBkdXJhdGlvbiBvZiBhbiA4dGggbm90ZVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAobm90ZSwgZHVyYXRpb24sIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayhub3RlLCB0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZSh0aW1lICsgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWyd2b2x1bWUnXSk7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudW5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5JbnN0cnVtZW50O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRoaXMgaXMgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3Igb3RoZXIgbW9ub3Bob25pYyBpbnN0cnVtZW50cyB0byBcblx0XHQgKiAgICAgICAgICBleHRlbmQuIElNUE9SVEFOVDogSXQgZG9lcyBub3QgbWFrZSBhbnkgc291bmQgb24gaXRzIG93biBhbmRcblx0XHQgKiAgICAgICAgICBzaG91bGRuJ3QgYmUgZGlyZWN0bHkgaW5zdGFudGlhdGVkLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAYWJzdHJhY3Rcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLk1vbm9waG9uaWMuZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnbGlkZSB0aW1lIGJldHdlZW4gbm90ZXMuIFxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5wb3J0YW1lbnRvID0gb3B0aW9ucy5wb3J0YW1lbnRvO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTW9ub3Bob25pYywgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLmRlZmF1bHRzID0geyAncG9ydGFtZW50byc6IDAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgb2YgdGhlIG5vdGUgb3B0aW9uYWxseSB3aXRoIGEgZ2l2ZW4gdmVsb2NpdHkuIFxuXHRcdCAqICBcblx0XHQgKiAgXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgVGhlIG5vdGUgdG8gdHJpZ2dlci5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAgICAgV2hlbiB0aGUgbm90ZSBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gW3ZlbG9jaXR5PTFdIHZlbG9jaXR5IFRoZSB2ZWxvY2l0eSBzY2FsZXIgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZXMgaG93IFwibG91ZFwiIHRoZSBub3RlIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTW9ub3Bob25pY30gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2soXCJDNFwiKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgdGhlIG5vdGUgYSBoYWxmIHNlY29uZCBmcm9tIG5vdyBhdCBoYWxmIHZlbG9jaXR5XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFjayhcIkM0XCIsIFwiKzAuNVwiLCAwLjUpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy5zZXROb3RlKG5vdGUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gSWYgbm8gdGltZSBpcyBnaXZlbiwgdGhlIHJlbGVhc2UgaGFwcGVucyBpbW1lZGlhdGx5XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9waG9uaWN9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzeW50aC50cmlnZ2VyUmVsZWFzZSgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHdpdGggdGhlIGFjdHVhbCBtZXRob2Rcblx0XHQgKiAgQGFic3RyYWN0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHdpdGggdGhlIGFjdHVhbCBtZXRob2Rcblx0XHQgKiAgQGFic3RyYWN0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGxldmVsIG9mIHRoZSBvdXRwdXQgYXQgdGhlIGdpdmVuIHRpbWUuIE1lYXN1cmVzXG5cdFx0ICogIHRoZSBlbnZlbG9wZShzKSB2YWx1ZSBhdCB0aGUgdGltZS4gXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSB0byBxdWVyeSB0aGUgZW52ZWxvcGUgdmFsdWVcblx0XHQgKiAgQHJldHVybiB7Tm9ybWFsUmFuZ2V9IFRoZSBvdXRwdXQgbGV2ZWwgYmV0d2VlbiAwLTFcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZ2V0TGV2ZWxBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5lbnZlbG9wZS5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBub3RlIGF0IHRoZSBnaXZlbiB0aW1lLiBJZiBubyB0aW1lIGlzIGdpdmVuLCB0aGUgbm90ZVxuXHRcdCAqICB3aWxsIHNldCBpbW1lZGlhdGVseS4gXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBub3RlIFRoZSBub3RlIHRvIGNoYW5nZSB0by5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSBub3RlIHNob3VsZCBiZSBzZXQuIFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vcGhvbmljfSB0aGlzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL2NoYW5nZSB0byBGIzYgaW4gb25lIHF1YXJ0ZXIgbm90ZSBmcm9tIG5vdy5cblx0XHQgKiBzeW50aC5zZXROb3RlKFwiRiM2XCIsIFwiKzRuXCIpO1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9jaGFuZ2UgdG8gQmI0IHJpZ2h0IG5vd1xuXHRcdCAqIHN5bnRoLnNldE5vdGUoXCJCYjRcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLnNldE5vdGUgPSBmdW5jdGlvbiAobm90ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5wb3J0YW1lbnRvID4gMCAmJiB0aGlzLmdldExldmVsQXRUaW1lKHRpbWUpID4gMC4wNSkge1xuXHQgICAgICAgICAgICB2YXIgcG9ydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aGlzLnBvcnRhbWVudG8pO1xuXHQgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5leHBvbmVudGlhbFJhbXBUbyhub3RlLCBwb3J0VGltZSwgdGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3kuc2V0VmFsdWVBdFRpbWUobm90ZSwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1vbm9waG9uaWM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5TeW50aCBpcyBjb21wb3NlZCBzaW1wbHkgb2YgYSBUb25lLk9tbmlPc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICAgcm91dGVkIHRocm91Z2ggYSBUb25lLkFtcGxpdHVkZUVudmVsb3BlLlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZHJhd2luZ3MvZC8xLTFfMFlXMloxSjJFUEkzNlA4Zk5DTWNaRzdOMXcxR1psdVBzNG9nNGV2by9wdWI/dz0xMTYzJmg9MjMxXCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIC8vZ2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5TeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT21uaU9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcihvcHRpb25zLm9zY2lsbGF0b3IpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5vc2NpbGxhdG9yLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5vc2NpbGxhdG9yLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG5ldyBUb25lLkFtcGxpdHVkZUVudmVsb3BlKG9wdGlvbnMuZW52ZWxvcGUpO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgb3NjaWxsYXRvcnMgdG8gdGhlIG91dHB1dFxuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5jaGFpbih0aGlzLmVudmVsb3BlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3RyaWFuZ2xlJyB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDA1LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjEsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMC4zLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDFcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBhdHRhY2sgc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlICgwLTEpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgLy9pZiB0aGVyZSBpcyBubyByZWxlYXNlIHBvcnRpb24sIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0ICAgICAgICBpZiAodGhpcy5lbnZlbG9wZS5zdXN0YWluID09PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLmF0dGFjayArIHRoaXMuZW52ZWxvcGUuZGVjYXkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSByZWxlYXNlIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLnJlbGVhc2UpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQU1TeW50aCB1c2VzIHRoZSBvdXRwdXQgb2Ygb25lIFRvbmUuU3ludGggdG8gbW9kdWxhdGUgdGhlXG5cdFx0ICogICAgICAgICAgYW1wbGl0dWRlIG9mIGFub3RoZXIgVG9uZS5TeW50aC4gVGhlIGhhcm1vbmljaXR5ICh0aGUgcmF0aW8gYmV0d2VlblxuXHRcdCAqICAgICAgICAgIHRoZSB0d28gc2lnbmFscykgYWZmZWN0cyB0aGUgdGltYnJlIG9mIHRoZSBvdXRwdXQgc2lnbmFsIGdyZWF0bHkuXG5cdFx0ICogICAgICAgICAgUmVhZCBtb3JlIGFib3V0IEFtcGxpdHVkZSBNb2R1bGF0aW9uIFN5bnRoZXNpcyBvblxuXHRcdCAqICAgICAgICAgIFtTb3VuZE9uU291bmRdKGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE2MDQwNDEwMzY1My9odHRwOi8vd3d3LnNvdW5kb25zb3VuZC5jb206ODAvc29zL21hcjAwL2FydGljbGVzL3N5bnRoc2VjcmV0cy5odG0pLlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZHJhd2luZ3MvZC8xVFF1OEVkNGlGcjFZVExLcEIzVTFfaHVyLVV3QnJoNWdkQlhjOEJ4ZkdLdy9wdWI/dz0xMDA5Jmg9NDU3XCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5BTVN5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiNG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkFNU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5BTVN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllciB2b2ljZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TeW50aH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG5ldyBUb25lLlN5bnRoKCk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci52b2x1bWUudmFsdWUgPSAtMTA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIncyBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IHRoaXMuX2NhcnJpZXIub3NjaWxsYXRvcjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllcidzIGVudmVsb3BlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gdGhpcy5fY2Fycmllci5lbnZlbG9wZS5zZXQob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRvciB2b2ljZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TeW50aH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbmV3IFRvbmUuU3ludGgoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3IncyBvc2NpbGxhdG9yIHdoaWNoIGlzIGFwcGxpZWRcblx0XHRcdCAqICB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbiA9IHRoaXMuX21vZHVsYXRvci5vc2NpbGxhdG9yLnNldChvcHRpb25zLm1vZHVsYXRpb24pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3IncyBlbnZlbG9wZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRW52ZWxvcGUgPSB0aGlzLl9tb2R1bGF0b3IuZW52ZWxvcGUuc2V0KG9wdGlvbnMubW9kdWxhdGlvbkVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwoNDQwLCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGluIGNlbnRzXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhcm1vbmljaXR5IGlzIHRoZSByYXRpbyBiZXR3ZWVuIHRoZSB0d28gdm9pY2VzLiBBIGhhcm1vbmljaXR5IG9mXG5cdFx0XHQgKiAgMSBpcyBubyBjaGFuZ2UuIEhhcm1vbmljaXR5ID0gMiBtZWFucyBhIGNoYW5nZSBvZiBhbiBvY3RhdmUuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogLy9waXRjaCB2b2ljZTEgYW4gb2N0YXZlIGJlbG93IHZvaWNlMFxuXHRcdFx0ICogc3ludGguaGFybW9uaWNpdHkudmFsdWUgPSAwLjU7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5oYXJtb25pY2l0eSk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb252ZXJ0IHRoZSAtMSwxIG91dHB1dCB0byAwLDFcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BdWRpb1RvR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvblNjYWxlID0gbmV3IFRvbmUuQXVkaW9Ub0dhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbm9kZSB3aGVyZSB0aGUgbW9kdWxhdGlvbiBoYXBwZW5zXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLy9jb250cm9sIHRoZSB0d28gdm9pY2VzIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fY2Fycmllci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMuaGFybW9uaWNpdHksIHRoaXMuX21vZHVsYXRvci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmZhbih0aGlzLl9jYXJyaWVyLmRldHVuZSwgdGhpcy5fbW9kdWxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmNoYWluKHRoaXMuX21vZHVsYXRpb25TY2FsZSwgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5jaGFpbih0aGlzLl9tb2R1bGF0aW9uTm9kZSwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eScsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb24nLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFNU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BTVN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDMsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3NpbmUnIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4wMSxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ21vZHVsYXRpb24nOiB7ICd0eXBlJzogJ3NxdWFyZScgfSxcblx0ICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC41LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0cmlnZ2VyIHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIG5vdGUgd2lsbCBvY2N1clxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkFNU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIC8vdGhlIHBvcnQgZ2xpZGVcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgdHJpZ2dlciB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgbm90ZSB3aWxsIHJlbGVhc2Vcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQU1TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTVN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkFNU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1TeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25FbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb24gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFNU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Nb25vU3ludGggaXMgY29tcG9zZWQgb2Ygb25lIG9zY2lsbGF0b3IsIG9uZSBmaWx0ZXIsIGFuZCB0d28gZW52ZWxvcGVzLlxuXHRcdCAqICAgICAgICAgIFRoZSBhbXBsaXR1ZGUgb2YgdGhlIFRvbmUuT3NjaWxsYXRvciBhbmQgdGhlIGN1dG9mZiBmcmVxdWVuY3kgb2YgdGhlXG5cdFx0ICogICAgICAgICAgVG9uZS5GaWx0ZXIgYXJlIGNvbnRyb2xsZWQgYnkgVG9uZS5FbnZlbG9wZXMuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFnYVkxREY5X0h6a29kcWY4SkkxQ2cyVlpmd1NFbHBGUWZJOTRJUXdhZDM4L3B1Yj93PTkyNCZoPTI0MFwiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Nb25vcGhvbmljfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLk1vbm9TeW50aCh7XG5cdFx0ICogXHRcIm9zY2lsbGF0b3JcIiA6IHtcblx0XHQgKiBcdFx0XCJ0eXBlXCIgOiBcInNxdWFyZVwiXG5cdFx0ICogIH0sXG5cdFx0ICogIFwiZW52ZWxvcGVcIiA6IHtcblx0XHQgKiAgXHRcImF0dGFja1wiIDogMC4xXG5cdFx0ICogIH1cblx0XHQgKiB9KS50b01hc3RlcigpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTW9ub1N5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5PbW5pT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKG9wdGlvbnMub3NjaWxsYXRvcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLm9zY2lsbGF0b3IuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLm9zY2lsbGF0b3IuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmaWx0ZXIuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5maWx0ZXIgPSBuZXcgVG9uZS5GaWx0ZXIob3B0aW9ucy5maWx0ZXIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmaWx0ZXIgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRnJlcXVlbmN5RW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZpbHRlckVudmVsb3BlID0gbmV3IFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUob3B0aW9ucy5maWx0ZXJFbnZlbG9wZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBuZXcgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZShvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIG9zY2lsbGF0b3JzIHRvIHRoZSBvdXRwdXRcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuY2hhaW4odGhpcy5maWx0ZXIsIHRoaXMuZW52ZWxvcGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIGZpbHRlciBlbnZlbG9wZVxuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUuY29ubmVjdCh0aGlzLmZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdmaWx0ZXInLFxuXHQgICAgICAgICAgICAnZmlsdGVyRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Nb25vU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAnQzQnLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzcXVhcmUnIH0sXG5cdCAgICAgICAgJ2ZpbHRlcic6IHtcblx0ICAgICAgICAgICAgJ1EnOiA2LFxuXHQgICAgICAgICAgICAndHlwZSc6ICdsb3dwYXNzJyxcblx0ICAgICAgICAgICAgJ3JvbGxvZmYnOiAtMjRcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDA1LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjEsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMC45LFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDFcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdmaWx0ZXJFbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDYsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMixcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwLjUsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMixcblx0ICAgICAgICAgICAgJ2Jhc2VGcmVxdWVuY3knOiAyMDAsXG5cdCAgICAgICAgICAgICdvY3RhdmVzJzogNyxcblx0ICAgICAgICAgICAgJ2V4cG9uZW50JzogMlxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIGF0dGFjayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZSAoMC0xKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIC8vdGhlIGVudmVsb3Blc1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5lbnZlbG9wZS5zdXN0YWluID09PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLmF0dGFjayArIHRoaXMuZW52ZWxvcGUuZGVjYXkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSByZWxlYXNlIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLmZpbHRlckVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLnJlbGVhc2UpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdmaWx0ZXInLFxuXHQgICAgICAgICAgICAnZmlsdGVyRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZpbHRlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Nb25vU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5EdW9TeW50aCBpcyBhIG1vbm9waG9uaWMgc3ludGggY29tcG9zZWQgb2YgdHdvXG5cdFx0ICogICAgICAgICAgTW9ub1N5bnRocyBydW4gaW4gcGFyYWxsZWwgd2l0aCBjb250cm9sIG92ZXIgdGhlXG5cdFx0ICogICAgICAgICAgZnJlcXVlbmN5IHJhdGlvIGJldHdlZW4gdGhlIHR3byB2b2ljZXMgYW5kIHZpYnJhdG8gZWZmZWN0LlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZHJhd2luZ3MvZC8xYkw0R1h2ZlJNTWxxUzdYeUJtOUNqTDlLSlBTVUtiY2RCTnBxT2xrRkx4ay9wdWI/dz0xMDEyJmg9NDQ4XCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGR1b1N5bnRoID0gbmV3IFRvbmUuRHVvU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIGR1b1N5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCIyblwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5EdW9TeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGZpcnN0IHZvaWNlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTW9ub1N5bnRofVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2ljZTAgPSBuZXcgVG9uZS5Nb25vU3ludGgob3B0aW9ucy52b2ljZTApO1xuXHQgICAgICAgIHRoaXMudm9pY2UwLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc2Vjb25kIHZvaWNlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTW9ub1N5bnRofVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2ljZTEgPSBuZXcgVG9uZS5Nb25vU3ludGgob3B0aW9ucy52b2ljZTEpO1xuXHQgICAgICAgIHRoaXMudm9pY2UxLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmlicmF0byBMRk8uXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92aWJyYXRvID0gbmV3IFRvbmUuTEZPKG9wdGlvbnMudmlicmF0b1JhdGUsIC01MCwgNTApO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG8uc3RhcnQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHRoZSB2aWJyYXRvIGZyZXF1ZW5jeVxuXHRcdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmlicmF0b1JhdGUgPSB0aGlzLl92aWJyYXRvLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgdmlicmF0byBnYWluXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdmlicmF0b0dhaW4gPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMudmlicmF0b0Ftb3VudCwgVG9uZS5UeXBlLlBvc2l0aXZlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBhbW91bnQgb2YgdmlicmF0b1xuXHRcdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52aWJyYXRvQW1vdW50ID0gdGhpcy5fdmlicmF0b0dhaW4uZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZnJlcXVlbmN5IGNvbnRyb2xcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKDQ0MCwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIHJhdGlvIGJldHdlZW4gdGhlIHR3byB2b2ljZXMuIEEgaGFybW9uaWNpdHkgb2Zcblx0XHRcdCAqICAxIGlzIG5vIGNoYW5nZS4gSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHZvaWNlMSBhbiBvY3RhdmUgYmVsb3cgdm9pY2UwXG5cdFx0XHQgKiBkdW9TeW50aC5oYXJtb25pY2l0eS52YWx1ZSA9IDAuNTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLmhhcm1vbmljaXR5KTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8vY29udHJvbCB0aGUgdHdvIHZvaWNlcyBmcmVxdWVuY3lcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMudm9pY2UwLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy52b2ljZTEuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl92aWJyYXRvLmNvbm5lY3QodGhpcy5fdmlicmF0b0dhaW4pO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG9HYWluLmZhbih0aGlzLnZvaWNlMC5kZXR1bmUsIHRoaXMudm9pY2UxLmRldHVuZSk7XG5cdCAgICAgICAgdGhpcy52b2ljZTAuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy52b2ljZTEuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAndm9pY2UwJyxcblx0ICAgICAgICAgICAgJ3ZvaWNlMScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndmlicmF0b0Ftb3VudCcsXG5cdCAgICAgICAgICAgICd2aWJyYXRvUmF0ZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkR1b1N5bnRoLCBUb25lLk1vbm9waG9uaWMpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZpYnJhdG9BbW91bnQnOiAwLjUsXG5cdCAgICAgICAgJ3ZpYnJhdG9SYXRlJzogNSxcblx0ICAgICAgICAnaGFybW9uaWNpdHknOiAxLjUsXG5cdCAgICAgICAgJ3ZvaWNlMCc6IHtcblx0ICAgICAgICAgICAgJ3ZvbHVtZSc6IC0xMCxcblx0ICAgICAgICAgICAgJ3BvcnRhbWVudG8nOiAwLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAgICAgJ2ZpbHRlckVudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3ZvaWNlMSc6IHtcblx0ICAgICAgICAgICAgJ3ZvbHVtZSc6IC0xMCxcblx0ICAgICAgICAgICAgJ3BvcnRhbWVudG8nOiAwLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAgICAgJ2ZpbHRlckVudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZXNcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIGF0dGFjayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZSAoMC0xKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5EdW9TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMC5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnZvaWNlMS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVzXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSByZWxlYXNlIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5EdW9TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMudm9pY2UwLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMudm9pY2UxLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGxldmVsIG9mIHRoZSBvdXRwdXQgYXQgdGhlIGdpdmVuIHRpbWUuIE1lYXN1cmVzXG5cdFx0ICogIHRoZSBlbnZlbG9wZShzKSB2YWx1ZSBhdCB0aGUgdGltZS4gXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSB0byBxdWVyeSB0aGUgZW52ZWxvcGUgdmFsdWVcblx0XHQgKiAgQHJldHVybiB7Tm9ybWFsUmFuZ2V9IFRoZSBvdXRwdXQgbGV2ZWwgYmV0d2VlbiAwLTFcblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGgucHJvdG90eXBlLmdldExldmVsQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gKHRoaXMudm9pY2UwLmdldExldmVsQXRUaW1lKHRpbWUpICsgdGhpcy52b2ljZTEuZ2V0TGV2ZWxBdFRpbWUodGltZSkpIC8gMjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRHVvU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAndm9pY2UwJyxcblx0ICAgICAgICAgICAgJ3ZvaWNlMScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndmlicmF0b0Ftb3VudCcsXG5cdCAgICAgICAgICAgICd2aWJyYXRvUmF0ZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy52b2ljZTAgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9pY2UxLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl92aWJyYXRvR2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0b0dhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudmlicmF0b0Ftb3VudC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy52aWJyYXRvQW1vdW50ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZpYnJhdG9SYXRlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5EdW9TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBGTVN5bnRoIGlzIGNvbXBvc2VkIG9mIHR3byBUb25lLlN5bnRocyB3aGVyZSBvbmUgVG9uZS5TeW50aCBtb2R1bGF0ZXNcblx0XHQgKiAgICAgICAgICB0aGUgZnJlcXVlbmN5IG9mIGEgc2Vjb25kIFRvbmUuU3ludGguIEEgbG90IG9mIHNwZWN0cmFsIGNvbnRlbnRcblx0XHQgKiAgICAgICAgICBjYW4gYmUgZXhwbG9yZWQgdXNpbmcgdGhlIG1vZHVsYXRpb25JbmRleCBwYXJhbWV0ZXIuIFJlYWQgbW9yZSBhYm91dFxuXHRcdCAqICAgICAgICAgIGZyZXF1ZW5jeSBtb2R1bGF0aW9uIHN5bnRoZXNpcyBvbiBTb3VuZCBPbiBTb3VuZDogW1BhcnQgMV0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNDAzMTIzNzA0L2h0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbS9zb3MvYXByMDAvYXJ0aWNsZXMvc3ludGhzZWNyZXRzLmh0bSksIFtQYXJ0IDJdKGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE2MDQwMzExNTgzNS9odHRwOi8vd3d3LnNvdW5kb25zb3VuZC5jb20vc29zL21heTAwL2FydGljbGVzL3N5bnRoLmh0bSkuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFoMFBVRFpYUGdpNElreDZiVlQ2b25jcllQTGx1Rkt5N2xqNTNwdXhqLURNL3B1Yj93PTkwMiZoPTQ2MlwiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Nb25vcGhvbmljfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBmbVN5bnRoID0gbmV3IFRvbmUuRk1TeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogZm1TeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM1XCIsIFwiNG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkZNU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5GTVN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllciB2b2ljZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TeW50aH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG5ldyBUb25lLlN5bnRoKG9wdGlvbnMuY2Fycmllcik7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci52b2x1bWUudmFsdWUgPSAtMTA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIncyBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IHRoaXMuX2NhcnJpZXIub3NjaWxsYXRvcjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllcidzIGVudmVsb3BlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSB0aGlzLl9jYXJyaWVyLmVudmVsb3BlLnNldChvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yIHZvaWNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN5bnRofVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBuZXcgVG9uZS5TeW50aChvcHRpb25zLm1vZHVsYXRvcik7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yJ3Mgb3NjaWxsYXRvciB3aGljaCBpcyBhcHBsaWVkXG5cdFx0XHQgKiAgdG8gdGhlIGFtcGxpdHVkZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb24gPSB0aGlzLl9tb2R1bGF0b3Iub3NjaWxsYXRvci5zZXQob3B0aW9ucy5tb2R1bGF0aW9uKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yJ3MgZW52ZWxvcGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRW52ZWxvcGUgPSB0aGlzLl9tb2R1bGF0b3IuZW52ZWxvcGUuc2V0KG9wdGlvbnMubW9kdWxhdGlvbkVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbCg0NDAsIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgaW4gY2VudHNcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIHJhdGlvIGJldHdlZW4gdGhlIHR3byB2b2ljZXMuIEEgaGFybW9uaWNpdHkgb2Zcblx0XHRcdCAqICAxIGlzIG5vIGNoYW5nZS4gSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHZvaWNlMSBhbiBvY3RhdmUgYmVsb3cgdm9pY2UwXG5cdFx0XHQgKiBzeW50aC5oYXJtb25pY2l0eS52YWx1ZSA9IDAuNTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLmhhcm1vbmljaXR5KTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0aW9uIGluZGV4IHdoaWNoIGVzc2VudGlhbGx5IHRoZSBkZXB0aCBvciBhbW91bnQgb2YgdGhlIG1vZHVsYXRpb24uIEl0IGlzIHRoZVxuXHRcdFx0ICogIHJhdGlvIG9mIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG1vZHVsYXRpbmcgc2lnbmFsIChtZikgdG8gdGhlIGFtcGxpdHVkZSBvZiB0aGVcblx0XHRcdCAqICBtb2R1bGF0aW5nIHNpZ25hbCAobWEpIC0tIGFzIGluIG1hL21mLlxuXHRcdFx0ICpcdEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqXHRAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleCA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMubW9kdWxhdGlvbkluZGV4KTtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleC51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbm9kZSB3aGVyZSB0aGUgbW9kdWxhdGlvbiBoYXBwZW5zXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG5ldyBUb25lLkdhaW4oMCk7XG5cdCAgICAgICAgLy9jb250cm9sIHRoZSB0d28gdm9pY2VzIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fY2Fycmllci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMuaGFybW9uaWNpdHksIHRoaXMuX21vZHVsYXRvci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMubW9kdWxhdGlvbkluZGV4LCB0aGlzLl9tb2R1bGF0aW9uTm9kZSk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZmFuKHRoaXMuX2NhcnJpZXIuZGV0dW5lLCB0aGlzLl9tb2R1bGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY29ubmVjdCh0aGlzLl9tb2R1bGF0aW9uTm9kZS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5jb25uZWN0KHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25FbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GTVN5bnRoLCBUb25lLk1vbm9waG9uaWMpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRk1TeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnaGFybW9uaWNpdHknOiAzLFxuXHQgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnOiAxMCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjAxLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnbW9kdWxhdGlvbic6IHsgJ3R5cGUnOiAnc3F1YXJlJyB9LFxuXHQgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjUsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogXHR0cmlnZ2VyIHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIG5vdGUgd2lsbCBvY2N1clxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GTVN5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZNU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgdHJpZ2dlciB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgbm90ZSB3aWxsIHJlbGVhc2Vcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRk1TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTVN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GTVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZNU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5Jyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25JbmRleCcsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb24nLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb24gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZNU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5NZW1icmFuZVN5bnRoIG1ha2VzIGtpY2sgYW5kIHRvbSBzb3VuZHMgdXNpbmcgYSBzaW5nbGUgb3NjaWxsYXRvclxuXHRcdCAqICAgICAgICAgIHdpdGggYW4gYW1wbGl0dWRlIGVudmVsb3BlIGFuZCBmcmVxdWVuY3kgcmFtcC4gQSBUb25lLk9tbmlPc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICAgaXMgcm91dGVkIHRocm91Z2ggYSBUb25lLkFtcGxpdHVkZUVudmVsb3BlIHRvIHRoZSBvdXRwdXQuIFRoZSBkcnVtXG5cdFx0ICogICAgICAgICAgcXVhbGl0eSBvZiB0aGUgc291bmQgY29tZXMgZnJvbSB0aGUgZnJlcXVlbmN5IGVudmVsb3BlIGFwcGxpZWRcblx0XHQgKiAgICAgICAgICBkdXJpbmcgVG9uZS5NZW1icmFuZVN5bnRoLnRyaWdnZXJBdHRhY2sobm90ZSkuIFRoZSBmcmVxdWVuY3kgZW52ZWxvcGVcblx0XHQgKiAgICAgICAgICBzdGFydHMgYXQgPGNvZGU+bm90ZSAqIC5vY3RhdmVzPC9jb2RlPiBhbmQgcmFtcHMgdG8gPGNvZGU+bm90ZTwvY29kZT5cblx0XHQgKiAgICAgICAgICBvdmVyIHRoZSBkdXJhdGlvbiBvZiA8Y29kZT4ucGl0Y2hEZWNheTwvY29kZT4uXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuTWVtYnJhbmVTeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDMlwiLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZW1icmFuZVN5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTWVtYnJhbmVTeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT21uaU9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcihvcHRpb25zLm9zY2lsbGF0b3IpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbmV3IFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG51bWJlciBvZiBvY3RhdmVzIHRoZSBwaXRjaCBlbnZlbG9wZSByYW1wcy5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiB0aW1lIHRoZSBmcmVxdWVuY3kgZW52ZWxvcGUgdGFrZXMuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnBpdGNoRGVjYXkgPSBvcHRpb25zLnBpdGNoRGVjYXk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmNoYWluKHRoaXMuZW52ZWxvcGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWVtYnJhbmVTeW50aCwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk1lbWJyYW5lU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3BpdGNoRGVjYXknOiAwLjA1LFxuXHQgICAgICAgICdvY3RhdmVzJzogMTAsXG5cdCAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3NpbmUnIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDEsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuNCxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwLjAxLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDEuNCxcblx0ICAgICAgICAgICAgJ2F0dGFja0N1cnZlJzogJ2V4cG9uZW50aWFsJ1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gdGltZSB3aXRoIHRoZSBnaXZlbiB2ZWxvY2l0eS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIHRoZSBub3RlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gICAgIHRoZSB0aW1lLCBpZiBub3QgZ2l2ZW4gaXMgbm93XG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gW3ZlbG9jaXR5PTFdIHZlbG9jaXR5IGRlZmF1bHRzIHRvIDFcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWVtYnJhbmVTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICBraWNrLnRyaWdnZXJBdHRhY2soNjApO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZW1icmFuZVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIG5vdGUgPSB0aGlzLnRvRnJlcXVlbmN5KG5vdGUpO1xuXHQgICAgICAgIHZhciBtYXhOb3RlID0gbm90ZSAqIHRoaXMub2N0YXZlcztcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuZnJlcXVlbmN5LnNldFZhbHVlQXRUaW1lKG1heE5vdGUsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5mcmVxdWVuY3kuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZShub3RlLCB0aW1lICsgdGhpcy50b1NlY29uZHModGhpcy5waXRjaERlY2F5KSk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgbm90ZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBub3RlIHdpbGwgcmVsZWFzZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NZW1icmFuZVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1lbWJyYW5lU3ludGgucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RvcCh0aW1lICsgdGhpcy5lbnZlbG9wZS5yZWxlYXNlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1lbWJyYW5lU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWVtYnJhbmVTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NZW1icmFuZVN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgSW5oYXJtb25pYyByYXRpbyBvZiBmcmVxdWVuY2llcyBiYXNlZCBvbiB0aGUgUm9sYW5kIFRSLTgwOFxuXHRcdCAqICBUYWtlbiBmcm9tIGh0dHBzOi8vY2NybWEuc3RhbmZvcmQuZWR1L3BhcGVycy90ci04MDgtY3ltYmFsLXBoeXNpY2FsbHktaW5mb3JtZWQtY2lyY3VpdC1iZW5kYWJsZS1kaWdpdGFsLW1vZGVsXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGluaGFybVJhdGlvcyA9IFtcblx0ICAgICAgICAxLFxuXHQgICAgICAgIDEuNDgzLFxuXHQgICAgICAgIDEuOTMyLFxuXHQgICAgICAgIDIuNTQ2LFxuXHQgICAgICAgIDIuNjMsXG5cdCAgICAgICAgMy44OTdcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBIGhpZ2hseSBpbmhhcm1vbmljIGFuZCBzcGVjdHJhbGx5IGNvbXBsZXggc291cmNlIHdpdGggYSBoaWdocGFzcyBmaWx0ZXJcblx0XHQgKiAgICAgICAgICBhbmQgYW1wbGl0dWRlIGVudmVsb3BlIHdoaWNoIGlzIGdvb2QgZm9yIG1ha2luZyBtZXRhbG9waG9uZSBzb3VuZHMuIEJhc2VkXG5cdFx0ICogICAgICAgICAgb24gQ3ltYmFsU3ludGggYnkgW0Bwb2x5cmh5dGhtYXRpY10oaHR0cHM6Ly9naXRodWIuY29tL3BvbHlyaHl0aG1hdGljKS5cblx0XHQgKiAgICAgICAgICBJbnNwaXJhdGlvbiBmcm9tIFtTb3VuZCBvbiBTb3VuZF0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNjEwMTQzOTI0L2h0dHBzOi8vd3d3LnNvdW5kb25zb3VuZC5jb20vc29zL2p1bDAyL2FydGljbGVzL3N5bnRoc2VjcmV0czA3MDIuYXNwKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBUaGUgb3B0aW9ucyBhdmFpbGJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTWV0YWxTeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgY3ltYmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhcnJheSBvZiBGTU9zY2lsbGF0b3JzXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG11bHRpcGxpZXJzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mcmVxTXVsdGlwbGllcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1wbGl0dWRlIGZvciB0aGUgYm9keVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVlID0gbmV3IFRvbmUuR2FpbigwKS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBoaWdocGFzcyB0aGUgb3V0cHV0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9oaWdocGFzcyA9IG5ldyBUb25lLkZpbHRlcih7XG5cdCAgICAgICAgICAgICd0eXBlJzogJ2hpZ2hwYXNzJyxcblx0ICAgICAgICAgICAgJ1EnOiAtMy4wMTAyOTk5NTY2Mzk4MTI1XG5cdCAgICAgICAgfSkuY29ubmVjdCh0aGlzLl9hbXBsaXR1ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG51bWJlciBvZiBvY3RhdmVzIHRoZSBoaWdocGFzc1xuXHRcdFx0ICogIGZpbHRlciBmcmVxdWVuY3kgcmFtcHNcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNjYWxlIHRoZSBib2R5IGVudmVsb3BlXG5cdFx0XHQgKiAgZm9yIHRoZSBiYW5kcGFzc1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNjYWxlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyID0gbmV3IFRvbmUuU2NhbGUob3B0aW9ucy5yZXNvbmFuY2UsIDcwMDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBlbnZlbG9wZSB3aGljaCBpcyBjb25uZWN0ZWQgYm90aCB0byB0aGVcblx0XHRcdCAqICBhbXBsaXR1ZGUgYW5kIGhpZ2hwYXNzIGZpbHRlcidzIGN1dG9mZiBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbmV3IFRvbmUuRW52ZWxvcGUoe1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogb3B0aW9ucy5lbnZlbG9wZS5hdHRhY2ssXG5cdCAgICAgICAgICAgICdhdHRhY2tDdXJ2ZSc6ICdsaW5lYXInLFxuXHQgICAgICAgICAgICAnZGVjYXknOiBvcHRpb25zLmVudmVsb3BlLmRlY2F5LFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDAsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogb3B0aW9ucy5lbnZlbG9wZS5yZWxlYXNlXG5cdCAgICAgICAgfSkuY2hhaW4odGhpcy5fZmlsdGVyRnJlcVNjYWxlciwgdGhpcy5faGlnaHBhc3MuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmNvbm5lY3QodGhpcy5fYW1wbGl0dWUuZ2Fpbik7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmhhcm1SYXRpb3MubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIG9zYyA9IG5ldyBUb25lLkZNT3NjaWxsYXRvcih7XG5cdCAgICAgICAgICAgICAgICAndHlwZSc6ICdzcXVhcmUnLFxuXHQgICAgICAgICAgICAgICAgJ21vZHVsYXRpb25UeXBlJzogJ3NxdWFyZScsXG5cdCAgICAgICAgICAgICAgICAnaGFybW9uaWNpdHknOiBvcHRpb25zLmhhcm1vbmljaXR5LFxuXHQgICAgICAgICAgICAgICAgJ21vZHVsYXRpb25JbmRleCc6IG9wdGlvbnMubW9kdWxhdGlvbkluZGV4XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICBvc2MuY29ubmVjdCh0aGlzLl9oaWdocGFzcyk7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldID0gb3NjO1xuXHQgICAgICAgICAgICB2YXIgbXVsdCA9IG5ldyBUb25lLk11bHRpcGx5KGluaGFybVJhdGlvc1tpXSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZyZXFNdWx0aXBsaWVyc1tpXSA9IG11bHQ7XG5cdCAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKG11bHQsIG9zYy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3NldCB0aGUgb2N0YXZlc1xuXHQgICAgICAgIHRoaXMub2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1ldGFsU3ludGgsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0YWxTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMjAwLFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDAxLFxuXHQgICAgICAgICAgICAnZGVjYXknOiAxLjQsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC4yXG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnaGFybW9uaWNpdHknOiA1LjEsXG5cdCAgICAgICAgJ21vZHVsYXRpb25JbmRleCc6IDMyLFxuXHQgICAgICAgICdyZXNvbmFuY2UnOiA0MDAwLFxuXHQgICAgICAgICdvY3RhdmVzJzogMS41XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjay5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgICAgICBXaGVuIHRoZSBhdHRhY2sgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9ICBbdmVsb2NpdHk9MV0gIFRoZSB2ZWxvY2l0eSB0aGF0IHRoZSBlbnZlbG9wZSBzaG91bGQgYmUgdHJpZ2dlcmVkIGF0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NZXRhbFN5bnRofSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbCkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2ZWwgPSBUb25lLmRlZmF1bHRBcmcodmVsLCAxKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8vaWYgdGhlIHN1c3RhaW4gaXMgMCwgc3RvcCB0aGUgb3NjaWxsYXRvciBhcyB3ZWxsXG5cdCAgICAgICAgaWYgKHRoaXMuZW52ZWxvcGUuc3VzdGFpbiA9PT0gMCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgIG9zYy5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLmF0dGFjayArIHRoaXMuZW52ZWxvcGUuZGVjYXkpO1xuXHQgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgcmVsZWFzZSBvZiB0aGUgZW52ZWxvcGUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICAgICAgV2hlbiB0aGUgcmVsZWFzZSBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NZXRhbFN5bnRofSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMuZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLnJlbGVhc2UpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgaW5zdHJ1bWVudCB0byB0aGUgVHJhbnNwb3J0LiBBbGwgc3Vic2VxdWVudCBjYWxscyBvZlxuXHRcdCAqIFt0cmlnZ2VyQXR0YWNrXSgjdHJpZ2dlcmF0dGFjaykgYW5kIFt0cmlnZ2VyUmVsZWFzZV0oI3RyaWdnZXJyZWxlYXNlKVxuXHRcdCAqIHdpbGwgYmUgc2NoZWR1bGVkIGFsb25nIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBzeW50aC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsIDApXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzhuJylcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAwKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHJlbGVhc2Ugb2YgdGhlIGVudmVsb3BlIGFmdGVyIHRoZSBnaXZlblxuXHRcdCAqICBkdXJhdGlvbi5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIGR1cmF0aW9uICBUaGUgZHVyYXRpb24gYmVmb3JlIHRyaWdnZXJpbmcgdGhlIHJlbGVhc2Vcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgICAgICBXaGVuIHRoZSBhdHRhY2sgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9ICBbdmVsb2NpdHk9MV0gIFRoZSB2ZWxvY2l0eSB0aGF0IHRoZSBlbnZlbG9wZSBzaG91bGQgYmUgdHJpZ2dlcmVkIGF0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NZXRhbFN5bnRofSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKHRpbWUgKyBkdXJhdGlvbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBtb2R1bGF0aW9uSW5kZXggb2YgdGhlIG9zY2lsbGF0b3JzIHdoaWNoIG1ha2UgdXAgdGhlIHNvdXJjZS5cblx0XHQgKiAgc2VlIFRvbmUuRk1Pc2NpbGxhdG9yLm1vZHVsYXRpb25JbmRleFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5NZXRhbFN5bnRoI1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lICBtb2R1bGF0aW9uSW5kZXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLCAnbW9kdWxhdGlvbkluZGV4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvcnNbMF0ubW9kdWxhdGlvbkluZGV4LnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldLm1vZHVsYXRpb25JbmRleC52YWx1ZSA9IHZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBoYXJtb25pY2l0eSBvZiB0aGUgb3NjaWxsYXRvcnMgd2hpY2ggbWFrZSB1cCB0aGUgc291cmNlLlxuXHRcdCAqICBzZWUgVG9uZS5GTU9zY2lsbGF0b3IuaGFybW9uaWNpdHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTWV0YWxTeW50aCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSAgaGFybW9uaWNpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLCAnaGFybW9uaWNpdHknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yc1swXS5oYXJtb25pY2l0eS52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yc1tpXS5oYXJtb25pY2l0eS52YWx1ZSA9IHZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBmcmVxdWVuY3kgb2YgdGhlIGhpZ2hwYXNzIGZpbHRlciBhdHRhY2hlZCB0byB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTWV0YWxTeW50aCNcblx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiAgQG5hbWUgIHJlc29uYW5jZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUsICdyZXNvbmFuY2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLm1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLm1pbiA9IHZhbDtcblx0ICAgICAgICAgICAgdGhpcy5vY3RhdmVzID0gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgYWJvdmUgdGhlIFwicmVzb25hbmNlXCIgZnJlcXVlbmN5XG5cdFx0ICogIHRoYXQgdGhlIGZpbHRlciByYW1wcyBkdXJpbmcgdGhlIGF0dGFjay9kZWNheSBlbnZlbG9wZVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5NZXRhbFN5bnRoI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSAgb2N0YXZlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUsICdvY3RhdmVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9jdHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9jdHM7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIubWF4ID0gdGhpcy5fZmlsdGVyRnJlcVNjYWxlci5taW4gKiBNYXRoLnBvdygyLCBvY3RzKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NZXRhbFN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yc1tpXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZyZXFNdWx0aXBsaWVyc1tpXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mcmVxTXVsdGlwbGllcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyRnJlcVNjYWxlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyRnJlcVNjYWxlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9oaWdocGFzcy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5faGlnaHBhc3MgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1ldGFsU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Ob2lzZVN5bnRoIGlzIGNvbXBvc2VkIG9mIGEgbm9pc2UgZ2VuZXJhdG9yIChUb25lLk5vaXNlKSwgb25lIGZpbHRlciAoVG9uZS5GaWx0ZXIpLFxuXHRcdCAqICAgICAgICAgIGFuZCB0d28gZW52ZWxvcGVzIChUb25lLkVudmVsb3ApLiBPbmUgZW52ZWxvcGUgY29udHJvbHMgdGhlIGFtcGxpdHVkZVxuXHRcdCAqICAgICAgICAgIG9mIHRoZSBub2lzZSBhbmQgdGhlIG90aGVyIGlzIGNvbnRyb2xzIHRoZSBjdXRvZmYgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXIuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFycXp1WDlyQmxoVDUwTVJ2RDJUS21sOWJuWmhjWm16WEYxcmZfbzd2ZG5FL3B1Yj93PTkxOCZoPTI0MlwiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIG5vaXNlU3ludGggPSBuZXcgVG9uZS5Ob2lzZVN5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBub2lzZVN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIC8vZ2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5Ob2lzZVN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbm9pc2Ugc291cmNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk5vaXNlfVxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiBub2lzZVN5bnRoLnNldChcIm5vaXNlLnR5cGVcIiwgXCJicm93blwiKTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubm9pc2UgPSBuZXcgVG9uZS5Ob2lzZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbmV3IFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBub2lzZSB0byB0aGUgb3V0cHV0XG5cdCAgICAgICAgdGhpcy5ub2lzZS5jaGFpbih0aGlzLmVudmVsb3BlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnbm9pc2UnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Ob2lzZVN5bnRoLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ25vaXNlJzogeyAndHlwZSc6ICd3aGl0ZScgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAwNSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4xLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDBcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVzLiBVbmxpa2Ugb3RoZXJcblx0XHQgKiAgaW5zdHJ1bWVudHMsIFRvbmUuTm9pc2VTeW50aCBkb2Vzbid0IGhhdmUgYSBub3RlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIGF0dGFjayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIG5vdGUgKDAtMSlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9pc2VTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIG5vaXNlU3ludGgudHJpZ2dlckF0dGFjaygpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBub2lzZVxuXHQgICAgICAgIHRoaXMubm9pc2Uuc3RhcnQodGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuZW52ZWxvcGUuc3VzdGFpbiA9PT0gMCkge1xuXHQgICAgICAgICAgICB0aGlzLm5vaXNlLnN0b3AodGltZSA9IHRoaXMuZW52ZWxvcGUuYXR0YWNrICsgdGhpcy5lbnZlbG9wZS5kZWNheSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZXMuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgcmVsZWFzZSBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9pc2VTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLm5vaXNlLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUucmVsZWFzZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgaW5zdHJ1bWVudCB0byB0aGUgVHJhbnNwb3J0LiBBbGwgc3Vic2VxdWVudCBjYWxscyBvZlxuXHRcdCAqIFt0cmlnZ2VyQXR0YWNrXSgjdHJpZ2dlcmF0dGFjaykgYW5kIFt0cmlnZ2VyUmVsZWFzZV0oI3RyaWdnZXJyZWxlYXNlKVxuXHRcdCAqIHdpbGwgYmUgc2NoZWR1bGVkIGFsb25nIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBzeW50aC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsIDApXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzhuJylcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAwKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHRoZW4gdGhlIHJlbGVhc2UuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGR1cmF0aW9uIHRoZSBkdXJhdGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICAgICB0aGUgdGltZSBvZiB0aGUgYXR0YWNrXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Ob2lzZVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2UodGltZSArIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vaXNlU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdub2lzZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm5vaXNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm5vaXNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Ob2lzZVN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgS2FycGx1cy1TdHJpbmcgc3RyaW5nIHN5bnRoZXNpcy4gT2Z0ZW4gb3V0IG9mIHR1bmUuXG5cdFx0ICogICAgICAgICBXaWxsIGNoYW5nZSB3aGVuIHRoZSBBdWRpb1dvcmtlck5vZGUgaXMgYXZhaWxhYmxlIGFjcm9zc1xuXHRcdCAqICAgICAgICAgYnJvd3NlcnMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gc2VlIHRoZSBkZWZhdWx0c1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwbHVja3kgPSBuZXcgVG9uZS5QbHVja1N5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBwbHVja3kudHJpZ2dlckF0dGFjayhcIkM0XCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbHVja1N5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuUGx1Y2tTeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTm9pc2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25vaXNlID0gbmV3IFRvbmUuTm9pc2UoJ3BpbmsnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIG5vaXNlIGF0IHRoZSBhdHRhY2suXG5cdFx0XHQgKiAgTm9taW5hbCByYW5nZSBvZiBbMC4xLCAyMF1cblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hdHRhY2tOb2lzZSA9IG9wdGlvbnMuYXR0YWNrTm9pc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIExGQ0Zcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Mb3dwYXNzQ29tYkZpbHRlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZjZiA9IG5ldyBUb25lLkxvd3Bhc3NDb21iRmlsdGVyKHtcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZSc6IG9wdGlvbnMucmVzb25hbmNlLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJzogb3B0aW9ucy5kYW1wZW5pbmdcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcmVzb25hbmNlIGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gdGhpcy5fbGZjZi5yZXNvbmFuY2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRhbXBlbmluZyBjb250cm9sLiBpLmUuIHRoZSBsb3dwYXNzIGZpbHRlciBmcmVxdWVuY3kgb2YgdGhlIGNvbWIgZmlsdGVyXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IHRoaXMuX2xmY2YuZGFtcGVuaW5nO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9ub2lzZS5jb25uZWN0KHRoaXMuX2xmY2YpO1xuXHQgICAgICAgIHRoaXMuX2xmY2YuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZydcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBsdWNrU3ludGgsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGx1Y2tTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYXR0YWNrTm9pc2UnOiAxLFxuXHQgICAgICAgICdkYW1wZW5pbmcnOiA0MDAwLFxuXHQgICAgICAgICdyZXNvbmFuY2UnOiAwLjdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgbm90ZS5cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IG5vdGUgVGhlIG5vdGUgdG8gdHJpZ2dlci5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIG5vdGUgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGx1Y2tTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbHVja1N5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUpIHtcblx0ICAgICAgICBub3RlID0gdGhpcy50b0ZyZXF1ZW5jeShub3RlKTtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGRlbGF5QW1vdW50ID0gMSAvIG5vdGU7XG5cdCAgICAgICAgdGhpcy5fbGZjZi5kZWxheVRpbWUuc2V0VmFsdWVBdFRpbWUoZGVsYXlBbW91bnQsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX25vaXNlLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX25vaXNlLnN0b3AodGltZSArIGRlbGF5QW1vdW50ICogdGhpcy5hdHRhY2tOb2lzZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbHVja1N5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsdWNrU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbm9pc2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmY2YuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX25vaXNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZmNmID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJlc29uYW5jZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGx1Y2tTeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlBvbHlTeW50aCBoYW5kbGVzIHZvaWNlIGNyZWF0aW9uIGFuZCBhbGxvY2F0aW9uIGZvciBhbnlcblx0XHQgKiAgICAgICAgICBpbnN0cnVtZW50cyBwYXNzZWQgaW4gYXMgdGhlIHNlY29uZCBwYXJhbXRlci4gUG9seVN5bnRoIGlzXG5cdFx0ICogICAgICAgICAgbm90IGEgc3ludGhlc2l6ZXIgYnkgaXRzZWxmLCBpdCBtZXJlbHkgbWFuYWdlcyB2b2ljZXMgb2Zcblx0XHQgKiAgICAgICAgICBvbmUgb2YgdGhlIG90aGVyIHR5cGVzIG9mIHN5bnRocywgYWxsb3dpbmcgYW55IG9mIHRoZVxuXHRcdCAqICAgICAgICAgIG1vbm9waG9uaWMgc3ludGhlc2l6ZXJzIHRvIGJlIHBvbHlwaG9uaWMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfE9iamVjdH0gW3BvbHlwaG9ueT00XSBUaGUgbnVtYmVyIG9mIHZvaWNlcyB0byBjcmVhdGVcblx0XHQgKiAgQHBhcmFtIHtmdW5jdGlvbn0gW3ZvaWNlPVRvbmUuU3ludGhdIFRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgdm9pY2VzXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXMgVG9uZS5TeW50aCBieSBkZWZhdWx0LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSBwb2x5c3ludGggY29tcG9zZWQgb2YgNiBWb2ljZXMgb2YgU3ludGhcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5Qb2x5U3ludGgoNiwgVG9uZS5TeW50aCkudG9NYXN0ZXIoKTtcblx0XHQgKiAvL3NldCB0aGUgYXR0cmlidXRlcyB1c2luZyB0aGUgc2V0IGludGVyZmFjZVxuXHRcdCAqIHN5bnRoLnNldChcImRldHVuZVwiLCAtMTIwMCk7XG5cdFx0ICogLy9wbGF5IGEgY2hvcmRcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShbXCJDNFwiLCBcIkU0XCIsIFwiQTRcIl0sIFwiNG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdwb2x5cGhvbnknLFxuXHQgICAgICAgICAgICAndm9pY2UnXG5cdCAgICAgICAgXSwgVG9uZS5Qb2x5U3ludGgpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5JbnN0cnVtZW50LmRlZmF1bHRzKTtcblx0ICAgICAgICAvL21heCBwb2x5cGhvbnlcblx0ICAgICAgICBvcHRpb25zLnBvbHlwaG9ueSA9IE1hdGgubWluKFRvbmUuUG9seVN5bnRoLk1BWF9QT0xZUEhPTlksIG9wdGlvbnMucG9seXBob255KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYXJyYXkgb2Ygdm9pY2VzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2ljZXMgPSBuZXcgQXJyYXkob3B0aW9ucy5wb2x5cGhvbnkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBxdWV1ZSBvZiB2b2ljZXMgd2l0aCBkYXRhIGFib3V0IGxhc3QgdHJpZ2dlclxuXHRcdFx0ICogIGFuZCB0aGUgdHJpZ2dlcmVkIG5vdGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RyaWdnZXJzID0gbmV3IEFycmF5KG9wdGlvbnMucG9seXBob255KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGluIGNlbnRzXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdkZXR1bmUnKTtcblx0ICAgICAgICAvL2NyZWF0ZSB0aGUgdm9pY2VzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLnBvbHlwaG9ueTsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciB2ID0gbmV3IG9wdGlvbnMudm9pY2UoYXJndW1lbnRzWzJdLCBhcmd1bWVudHNbM10pO1xuXHQgICAgICAgICAgICBpZiAoISh2IGluc3RhbmNlb2YgVG9uZS5Nb25vcGhvbmljKSkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTeW50aCBjb25zdHJ1Y3RvciBtdXN0IGJlIGluc3RhbmNlIG9mIFRvbmUuTW9ub3Bob25pYycpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMudm9pY2VzW2ldID0gdjtcblx0ICAgICAgICAgICAgdi5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAgICAgaWYgKHYuaGFzT3duUHJvcGVydHkoJ2RldHVuZScpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KHYuZGV0dW5lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl90cmlnZ2Vyc1tpXSA9IHtcblx0ICAgICAgICAgICAgICAgIHJlbGVhc2U6IC0xLFxuXHQgICAgICAgICAgICAgICAgbm90ZTogbnVsbCxcblx0ICAgICAgICAgICAgICAgIHZvaWNlOiB2XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUG9seVN5bnRoLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3BvbHlwaG9ueSc6IDQsXG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3ZvaWNlJzogVG9uZS5TeW50aFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l8QXJyYXl9IG5vdGVzIFRoZSBub3RlcyB0byBwbGF5LiBBY2NlcHRzIGEgc2luZ2xlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlcXVlbmN5IG9yIGFuIGFycmF5IG9mIGZyZXF1ZW5jaWVzLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICBUaGUgc3RhcnQgdGltZSBvZiB0aGUgbm90ZS5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSBUaGUgdmVsb2NpdHkgb2YgdGhlIG5vdGUuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciBhIGNob3JkIGltbWVkaWF0ZWx5IHdpdGggYSB2ZWxvY2l0eSBvZiAwLjJcblx0XHQgKiBwb2x5LnRyaWdnZXJBdHRhY2soW1wiQWIzXCIsIFwiQzRcIiwgXCJGNVwiXSwgdW5kZWZpbmVkLCAwLjIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZXMsIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG5vdGVzKSkge1xuXHQgICAgICAgICAgICBub3RlcyA9IFtub3Rlc107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciB2YWwgPSBub3Rlc1tpXTtcblx0ICAgICAgICAgICAgLy90cmlnZ2VyIHRoZSBvbGRlc3Qgdm9pY2Vcblx0ICAgICAgICAgICAgdmFyIG9sZGVzdCA9IHRoaXMuX3RyaWdnZXJzWzBdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHRoaXMuX3RyaWdnZXJzLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJpZ2dlcnNbal0ucmVsZWFzZSA8IG9sZGVzdC5yZWxlYXNlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb2xkZXN0ID0gdGhpcy5fdHJpZ2dlcnNbal07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgb2xkZXN0LnJlbGVhc2UgPSBJbmZpbml0eTtcblx0ICAgICAgICAgICAgb2xkZXN0Lm5vdGUgPSBKU09OLnN0cmluZ2lmeSh2YWwpO1xuXHQgICAgICAgICAgICBvbGRlc3Qudm9pY2UudHJpZ2dlckF0dGFjayh2YWwsIHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBhbmQgcmVsZWFzZSBhZnRlciB0aGUgc3BlY2lmaWVkIGR1cmF0aW9uXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fEFycmF5fSBub3RlcyBUaGUgbm90ZXMgdG8gcGxheS4gQWNjZXB0cyBhIHNpbmdsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZXF1ZW5jeSBvciBhbiBhcnJheSBvZiBmcmVxdWVuY2llcy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gZHVyYXRpb24gdGhlIGR1cmF0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gICAgIGlmIG5vIHRpbWUgaXMgZ2l2ZW4sIGRlZmF1bHRzIHRvIG5vd1xuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIGF0dGFjayAoMC0xKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb2x5U3ludGh9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgYSBjaG9yZCBmb3IgYSBkdXJhdGlvbiBvZiBhIGhhbGYgbm90ZVxuXHRcdCAqIHBvbHkudHJpZ2dlckF0dGFja1JlbGVhc2UoW1wiRWIzXCIsIFwiRzRcIiwgXCJDNVwiXSwgXCIyblwiKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NhbiBwYXNzIGluIGFuIGFycmF5IG9mIGR1cmF0aW9ucyBhcyB3ZWxsXG5cdFx0ICogcG9seS50cmlnZ2VyQXR0YWNrUmVsZWFzZShbXCJFYjNcIiwgXCJHNFwiLCBcIkM1XCJdLCBbXCIyblwiLCBcIjRuXCIsIFwiNG5cIl0pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKG5vdGVzLCBkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKG5vdGVzLCB0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheShkdXJhdGlvbikgJiYgVG9uZS5pc0FycmF5KG5vdGVzKSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZCA9IGR1cmF0aW9uW01hdGgubWluKGksIGR1cmF0aW9uLmxlbmd0aCAtIDEpXTtcblx0ICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2Uobm90ZXNbaV0sIHRpbWUgKyB0aGlzLnRvU2Vjb25kcyhkKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKG5vdGVzLCB0aW1lICsgdGhpcy50b1NlY29uZHMoZHVyYXRpb24pKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIHJlbGVhc2Ugb2YgdGhlIG5vdGUuIFVubGlrZSBtb25vcGhvbmljIGluc3RydW1lbnRzLFxuXHRcdCAqICBhIG5vdGUgKG9yIGFycmF5IG9mIG5vdGVzKSBuZWVkcyB0byBiZSBwYXNzZWQgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l8QXJyYXl9IG5vdGVzIFRoZSBub3RlcyB0byBwbGF5LiBBY2NlcHRzIGEgc2luZ2xlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlcXVlbmN5IG9yIGFuIGFycmF5IG9mIGZyZXF1ZW5jaWVzLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICBXaGVuIHRoZSByZWxlYXNlIHdpbGwgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb2x5U3ludGh9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBwb2x5LnRyaWdnZXJSZWxlYXNlKFtcIkFiM1wiLCBcIkM0XCIsIFwiRjVcIl0sIFwiKzJuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKG5vdGVzLCB0aW1lKSB7XG5cdCAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG5vdGVzKSkge1xuXHQgICAgICAgICAgICBub3RlcyA9IFtub3Rlc107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIC8vZ2V0IHRoZSB2b2ljZVxuXHQgICAgICAgICAgICB2YXIgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeShub3Rlc1tpXSk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIHYgPSAwOyB2IDwgdGhpcy5fdHJpZ2dlcnMubGVuZ3RoOyB2KyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBkZXNjID0gdGhpcy5fdHJpZ2dlcnNbdl07XG5cdCAgICAgICAgICAgICAgICBpZiAoZGVzYy5ub3RlID09PSBzdHJpbmdpZmllZCAmJiBkZXNjLnJlbGVhc2UgPiB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZGVzYy52b2ljZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICBkZXNjLnJlbGVhc2UgPSB0aW1lO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGluc3RydW1lbnQgdG8gdGhlIFRyYW5zcG9ydC4gQWxsIHN1YnNlcXVlbnQgY2FsbHMgb2Zcblx0XHQgKiBbdHJpZ2dlckF0dGFja10oI3RyaWdnZXJhdHRhY2spIGFuZCBbdHJpZ2dlclJlbGVhc2VdKCN0cmlnZ2VycmVsZWFzZSlcblx0XHQgKiB3aWxsIGJlIHNjaGVkdWxlZCBhbG9uZyB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogc3ludGguc3luYygpXG5cdFx0ICogLy9zY2hlZHVsZSAzIG5vdGVzIHdoZW4gdGhlIHRyYW5zcG9ydCBmaXJzdCBzdGFydHNcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAwKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc4bicpXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzRuJylcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgdG8gaGVhciB0aGUgbm90ZXNcblx0XHQgKiBUcmFuc3BvcnQuc3RhcnQoKVxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAxKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDEpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgYSBtZW1iZXIvYXR0cmlidXRlIG9mIHRoZSB2b2ljZXMuXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fHN0cmluZ30gcGFyYW1zXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gcmFtcFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogcG9seS5zZXQoe1xuXHRcdCAqIFx0XCJmaWx0ZXJcIiA6IHtcblx0XHQgKiBcdFx0XCJ0eXBlXCIgOiBcImhpZ2hwYXNzXCJcblx0XHQgKiBcdH0sXG5cdFx0ICogXHRcImVudmVsb3BlXCIgOiB7XG5cdFx0ICogXHRcdFwiYXR0YWNrXCIgOiAwLjI1XG5cdFx0ICogXHR9XG5cdFx0ICogfSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHBhcmFtcywgdmFsdWUsIHJhbXBUaW1lKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZvaWNlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLnZvaWNlc1tpXS5zZXQocGFyYW1zLCB2YWx1ZSwgcmFtcFRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBzeW50aCdzIGF0dHJpYnV0ZXMuIEdpdmVuIG5vIGFyZ3VtZW50cyBnZXRcblx0XHQgKiAgd2lsbCByZXR1cm4gYWxsIGF2YWlsYWJsZSBvYmplY3QgcHJvcGVydGllcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZ1xuXHRcdCAqICB2YWx1ZXMuIFBhc3MgaW4gYSBzaW5nbGUgYXR0cmlidXRlIHRvIHJldHJpZXZlIG9yIGFuIGFycmF5XG5cdFx0ICogIG9mIGF0dHJpYnV0ZXMuIFRoZSBhdHRyaWJ1dGUgc3RyaW5ncyBjYW4gYWxzbyBpbmNsdWRlIGEgXCIuXCJcblx0XHQgKiAgdG8gYWNjZXNzIGRlZXBlciBwcm9wZXJ0aWVzLlxuXHRcdCAqICBAcGFyYW0ge0FycmF5PX0gcGFyYW1zIHRoZSBwYXJhbWV0ZXJzIHRvIGdldCwgb3RoZXJ3aXNlIHdpbGwgcmV0dXJuXG5cdFx0ICogIFx0XHRcdFx0XHQgICBhbGwgYXZhaWxhYmxlLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52b2ljZXNbMF0uZ2V0KHBhcmFtcyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiBhbGwgdGhlIGN1cnJlbnRseSBhY3RpdmUgdm9pY2VzLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgbm90ZXMgc2hvdWxkIGJlIHJlbGVhc2VkLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnJlbGVhc2VBbGwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RyaWdnZXJzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBkZXNjID0gdGhpcy5fdHJpZ2dlcnNbaV07XG5cdCAgICAgICAgICAgIGlmIChkZXNjLnJlbGVhc2UgPiB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICBkZXNjLnJlbGVhc2UgPSB0aW1lO1xuXHQgICAgICAgICAgICAgICAgZGVzYy52b2ljZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZvaWNlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLnZvaWNlc1tpXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMudm9pY2VzW2ldID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2RldHVuZScpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2ljZXMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RyaWdnZXJzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG1heGltdW0gbnVtYmVyIG9mIG5vdGVzIHRoYXQgY2FuIGJlIGFsbG9jYXRlZFxuXHRcdCAqICB0byBhIHBvbHlzeW50aC5cblx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLk1BWF9QT0xZUEhPTlkgPSAyMDtcblx0ICAgIHJldHVybiBUb25lLlBvbHlTeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzIEF1dG9tYXRpY2FsbHkgaW50ZXJwb2xhdGVzIGJldHdlZW4gYSBzZXQgb2YgcGl0Y2hlZCBzYW1wbGVzLiBQYXNzIGluIGFuIG9iamVjdCB3aGljaCBtYXBzIHRoZSBub3RlJ3MgcGl0Y2ggb3IgbWlkaSB2YWx1ZSB0byB0aGUgdXJsLCB0aGVuIHlvdSBjYW4gdHJpZ2dlciB0aGUgYXR0YWNrIGFuZCByZWxlYXNlIG9mIHRoYXQgbm90ZSBsaWtlIG90aGVyIGluc3RydW1lbnRzLiBCeSBhdXRvbWF0aWNhbGx5IHJlcGl0Y2hpbmcgdGhlIHNhbXBsZXMsIGl0IGlzIHBvc3NpYmxlIHRvIHBsYXkgcGl0Y2hlcyB3aGljaCB3ZXJlIG5vdCBleHBsaWNpdGx5IGluY2x1ZGVkIHdoaWNoIGNhbiBzYXZlIGxvYWRpbmcgdGltZS5cblx0XHQgKiAgICAgICAgRm9yIHNhbXBsZSBvciBidWZmZXIgcGxheWJhY2sgd2hlcmUgcmVwaXRjaGluZyBpcyBub3QgbmVjZXNzYXJ5LCB1c2UgW1RvbmUuUGxheWVyXShodHRwczovL3RvbmVqcy5naXRodWIuaW8vZG9jcy9QbGF5ZXIpLlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzYW1wbGVzIEFuIG9iamVjdCBvZiBzYW1wbGVzIG1hcHBpbmcgZWl0aGVyIE1pZGlcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlIE51bWJlcnMgb3IgU2NpZW50aWZpYyBQaXRjaCBOb3RhdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSB1cmwgb2YgdGhhdCBzYW1wbGUuXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbj19IG9ubG9hZCBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYWxsIG9mIHRoZSBzYW1wbGVzIGFyZSBsb2FkZWQuXG5cdFx0ICogQHBhcmFtIHtTdHJpbmc9fSBiYXNlVXJsIFRoZSByb290IFVSTCBvZiBhbGwgb2YgdGhlIHNhbXBsZXMsIHdoaWNoIGlzIHByZXBlbmRlZCB0byBhbGwgdGhlIFVSTHMuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiB2YXIgc2FtcGxlciA9IG5ldyBUb25lLlNhbXBsZXIoe1xuXHRcdCAqIFx0XCJDM1wiIDogXCJwYXRoL3RvL0MzLm1wM1wiLFxuXHRcdCAqIFx0XCJEIzNcIiA6IFwicGF0aC90by9Ec2hhcnAzLm1wM1wiLFxuXHRcdCAqIFx0XCJGIzNcIiA6IFwicGF0aC90by9Gc2hhcnAzLm1wM1wiLFxuXHRcdCAqIFx0XCJBM1wiIDogXCJwYXRoL3RvL0EzLm1wM1wiLFxuXHRcdCAqIH0sIGZ1bmN0aW9uKCl7XG5cdFx0ICogXHQvL3NhbXBsZXIgd2lsbCByZXBpdGNoIHRoZSBjbG9zZXN0IHNhbXBsZVxuXHRcdCAqIFx0c2FtcGxlci50cmlnZ2VyQXR0YWNrKFwiRDNcIilcblx0XHQgKiB9KVxuXHRcdCAqIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIgPSBmdW5jdGlvbiAodXJscykge1xuXHQgICAgICAgIC8vIHNoaWZ0IGFyZ3VtZW50cyBvdmVyIG9uZS4gVGhvc2UgYXJlIHRoZSByZW1haW5kZXIgb2YgdGhlIG9wdGlvbnNcblx0ICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgYXJncy5zaGlmdCgpO1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmdzLCBbXG5cdCAgICAgICAgICAgICdvbmxvYWQnLFxuXHQgICAgICAgICAgICAnYmFzZVVybCdcblx0ICAgICAgICBdLCBUb25lLlNhbXBsZXIpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIHZhciB1cmxNYXAgPSB7fTtcblx0ICAgICAgICBmb3IgKHZhciBub3RlIGluIHVybHMpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNOb3RlKG5vdGUpKSB7XG5cdCAgICAgICAgICAgICAgICAvL2NvbnZlcnQgdGhlIG5vdGUgbmFtZSB0byBNSURJXG5cdCAgICAgICAgICAgICAgICB2YXIgbWlkID0gVG9uZS5GcmVxdWVuY3kobm90ZSkudG9NaWRpKCk7XG5cdCAgICAgICAgICAgICAgICB1cmxNYXBbbWlkXSA9IHVybHNbbm90ZV07XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzTmFOKHBhcnNlRmxvYXQobm90ZSkpKSB7XG5cdCAgICAgICAgICAgICAgICAvL290aGVyd2lzZSBpZiBpdCdzIG51bWJlcnMgYXNzdW1lIGl0J3MgbWlkaVxuXHQgICAgICAgICAgICAgICAgdXJsTWFwW25vdGVdID0gdXJsc1tub3RlXTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5TYW1wbGVyOiB1cmwga2V5cyBtdXN0IGJlIHRoZSBub3RlXFwncyBwaXRjaCcpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHN0b3JlZCBhbmQgbG9hZGVkIGJ1ZmZlcnNcblx0XHRcdCAqIEB0eXBlIHtUb25lLkJ1ZmZlcnN9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVycyA9IG5ldyBUb25lLkJ1ZmZlcnModXJsTWFwLCBvcHRpb25zLm9ubG9hZCwgb3B0aW9ucy5iYXNlVXJsKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBvYmplY3Qgb2YgYWxsIGN1cnJlbnRseSBwbGF5aW5nIEJ1ZmZlclNvdXJjZXNcblx0XHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IHt9O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGVudmVsb3BlIGFwcGxpZWQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2FtcGxlLlxuXHRcdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmF0dGFjayA9IG9wdGlvbnMuYXR0YWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGVudmVsb3BlIGFwcGxpZWQgdG8gdGhlIGVuZCBvZiB0aGUgZW52ZWxvcGUuXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVsZWFzZSA9IG9wdGlvbnMucmVsZWFzZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNhbXBsZXIsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVmYXVsdHNcblx0XHQgKiBAY29uc3Rcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgIGF0dGFjazogMCxcblx0ICAgICAgICByZWxlYXNlOiAwLjEsXG5cdCAgICAgICAgb25sb2FkOiBUb25lLm5vT3AsXG5cdCAgICAgICAgYmFzZVVybDogJydcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIGluIHN0ZXBzIGJldHdlZW4gdGhlIGdpdmVuIG1pZGkgbm90ZSBhdCB0aGUgY2xvc2V0cyBzYW1wbGUuXG5cdFx0ICogQHBhcmFtICB7TWlkaX0gbWlkaVxuXHRcdCAqIEByZXR1cm4ge0ludGVydmFsfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLl9maW5kQ2xvc2VzdCA9IGZ1bmN0aW9uIChtaWRpKSB7XG5cdCAgICAgICAgLy9zZWFyY2hlcyB3aXRoaW4gOCBvY3RhdmVzIG9mIHRoZSBnaXZlbiBtaWRpIG5vdGVcblx0ICAgICAgICB2YXIgTUFYX0lOVEVSVkFMID0gOTY7XG5cdCAgICAgICAgdmFyIGludGVydmFsID0gMDtcblx0ICAgICAgICB3aGlsZSAoaW50ZXJ2YWwgPCBNQVhfSU5URVJWQUwpIHtcblx0ICAgICAgICAgICAgLy8gY2hlY2sgYWJvdmUgYW5kIGJlbG93XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9idWZmZXJzLmhhcyhtaWRpICsgaW50ZXJ2YWwpKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gLWludGVydmFsO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2J1ZmZlcnMuaGFzKG1pZGkgLSBpbnRlcnZhbCkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcnZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpbnRlcnZhbCsrO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIFRoZSBub3RlIHRvIHBsYXlcblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSAgICAgV2hlbiB0byBwbGF5IHRoZSBub3RlXG5cdFx0ICogQHBhcmFtICB7Tm9ybWFsUmFuZ2U9fSB2ZWxvY2l0eSBUaGUgdmVsb2NpdHkgdG8gcGxheSB0aGUgc2FtcGxlIGJhY2suXG5cdFx0ICogQHJldHVybiB7VG9uZS5TYW1wbGVyfSAgICAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZSwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB2YXIgbWlkaSA9IFRvbmUuRnJlcXVlbmN5KG5vdGUpLnRvTWlkaSgpO1xuXHQgICAgICAgIC8vIGZpbmQgdGhlIGNsb3Nlc3Qgbm90ZSBwaXRjaFxuXHQgICAgICAgIHZhciBkaWZmZXJlbmNlID0gdGhpcy5fZmluZENsb3Nlc3QobWlkaSk7XG5cdCAgICAgICAgaWYgKGRpZmZlcmVuY2UgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb3Nlc3ROb3RlID0gbWlkaSAtIGRpZmZlcmVuY2U7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLl9idWZmZXJzLmdldChjbG9zZXN0Tm90ZSk7XG5cdCAgICAgICAgICAgIC8vIHBsYXkgdGhhdCBub3RlXG5cdCAgICAgICAgICAgIHZhciBzb3VyY2UgPSBuZXcgVG9uZS5CdWZmZXJTb3VyY2Uoe1xuXHQgICAgICAgICAgICAgICAgJ2J1ZmZlcic6IGJ1ZmZlcixcblx0ICAgICAgICAgICAgICAgICdwbGF5YmFja1JhdGUnOiBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyhkaWZmZXJlbmNlKSxcblx0ICAgICAgICAgICAgICAgICdmYWRlSW4nOiB0aGlzLmF0dGFjayxcblx0ICAgICAgICAgICAgICAgICdmYWRlT3V0JzogdGhpcy5yZWxlYXNlLFxuXHQgICAgICAgICAgICAgICAgJ2N1cnZlJzogJ2V4cG9uZW50aWFsJ1xuXHQgICAgICAgICAgICB9KS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAgICAgc291cmNlLnN0YXJ0KHRpbWUsIDAsIGJ1ZmZlci5kdXJhdGlvbiwgdmVsb2NpdHkpO1xuXHQgICAgICAgICAgICAvLyBhZGQgaXQgdG8gdGhlIGFjdGl2ZSBzb3VyY2VzXG5cdCAgICAgICAgICAgIGlmICghVG9uZS5pc0FycmF5KHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0pKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldID0gW107XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXS5wdXNoKHtcblx0ICAgICAgICAgICAgICAgIG5vdGU6IG1pZGksXG5cdCAgICAgICAgICAgICAgICBzb3VyY2U6IHNvdXJjZVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQHBhcmFtICB7RnJlcXVlbmN5fSBub3RlICAgICBUaGUgbm90ZSB0byByZWxlYXNlLlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lICAgICBcdFdoZW4gdG8gcmVsZWFzZSB0aGUgbm90ZS5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9XHR0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUpIHtcblx0ICAgICAgICB2YXIgbWlkaSA9IFRvbmUuRnJlcXVlbmN5KG5vdGUpLnRvTWlkaSgpO1xuXHQgICAgICAgIC8vIGZpbmQgdGhlIG5vdGVcblx0ICAgICAgICBpZiAodGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXSAmJiB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldLmxlbmd0aCkge1xuXHQgICAgICAgICAgICB2YXIgc291cmNlID0gdGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXS5zaGlmdCgpLnNvdXJjZTtcblx0ICAgICAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RvcCh0aW1lICsgdGhpcy5yZWxlYXNlLCB0aGlzLnJlbGVhc2UpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZWxlYXNlIGFsbCBjdXJyZW50bHkgYWN0aXZlIG5vdGVzLlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lICAgICBcdFdoZW4gdG8gcmVsZWFzZSB0aGUgbm90ZXMuXG5cdFx0ICogQHJldHVybiB7VG9uZS5TYW1wbGVyfVx0dGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS5yZWxlYXNlQWxsID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZm9yICh2YXIgbm90ZSBpbiB0aGlzLl9hY3RpdmVTb3VyY2VzKSB7XG5cdCAgICAgICAgICAgIHZhciBzb3VyY2VzID0gdGhpcy5fYWN0aXZlU291cmNlc1tub3RlXTtcblx0ICAgICAgICAgICAgd2hpbGUgKHNvdXJjZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gc291cmNlcy5zaGlmdCgpLnNvdXJjZTtcblx0ICAgICAgICAgICAgICAgIHNvdXJjZS5zdG9wKHRpbWUgKyB0aGlzLnJlbGVhc2UsIHRoaXMucmVsZWFzZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgaW5zdHJ1bWVudCB0byB0aGUgVHJhbnNwb3J0LiBBbGwgc3Vic2VxdWVudCBjYWxscyBvZlxuXHRcdCAqIFt0cmlnZ2VyQXR0YWNrXSgjdHJpZ2dlcmF0dGFjaykgYW5kIFt0cmlnZ2VyUmVsZWFzZV0oI3RyaWdnZXJyZWxlYXNlKVxuXHRcdCAqIHdpbGwgYmUgc2NoZWR1bGVkIGFsb25nIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBzeW50aC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsIDApXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzhuJylcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAxKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDEpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludm9rZSB0aGUgYXR0YWNrIHBoYXNlLCB0aGVuIGFmdGVyIHRoZSBkdXJhdGlvbiwgaW52b2tlIHRoZSByZWxlYXNlLlxuXHRcdCAqIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgVGhlIG5vdGUgdG8gcGxheVxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IGR1cmF0aW9uIFRoZSB0aW1lIHRoZSBub3RlIHNob3VsZCBiZSBoZWxkXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWUgICAgIFdoZW4gdG8gc3RhcnQgdGhlIGF0dGFja1xuXHRcdCAqIEBwYXJhbSAge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gVGhlIHZlbG9jaXR5IG9mIHRoZSBhdHRhY2tcblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9ICAgICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAobm90ZSwgZHVyYXRpb24sIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayhub3RlLCB0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZShub3RlLCB0aW1lICsgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYSBub3RlIHRvIHRoZSBzYW1wbGVyLlxuXHRcdCAqICBAcGFyYW0gIHtOb3RlfE1pZGl9ICAgbm90ZSAgICAgIFRoZSBidWZmZXIncyBwaXRjaC5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfFRvbmUuQnVmZmVyfEF1ZGlvYnVmZmVyfSAgdXJsICBFaXRoZXIgdGhlIHVybCBvZiB0aGUgYnVmZXIsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhZGRlZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGdpdmVuIG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSB1cmwgaXMgbG9hZGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAobm90ZSwgdXJsLCBjYWxsYmFjaykge1xuXHQgICAgICAgIGlmIChUb25lLmlzTm90ZShub3RlKSkge1xuXHQgICAgICAgICAgICAvL2NvbnZlcnQgdGhlIG5vdGUgbmFtZSB0byBNSURJXG5cdCAgICAgICAgICAgIHZhciBtaWQgPSBUb25lLkZyZXF1ZW5jeShub3RlKS50b01pZGkoKTtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVycy5hZGQobWlkLCB1cmwsIGNhbGxiYWNrKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKCFpc05hTihwYXJzZUZsb2F0KG5vdGUpKSkge1xuXHQgICAgICAgICAgICAvL290aGVyd2lzZSBpZiBpdCdzIG51bWJlcnMgYXNzdW1lIGl0J3MgbWlkaVxuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzLmFkZChub3RlLCB1cmwsIGNhbGxiYWNrKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuU2FtcGxlcjogbm90ZSBtdXN0IGJlIHRoZSBub3RlXFwncyBwaXRjaC4gSW5zdGVhZCBnb3QgJyArIG5vdGUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiB0aGUgYnVmZmVycyBhcmUgbG9hZGVkIG9yIG5vdFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNhbXBsZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9hZGVkXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TYW1wbGVyLnByb3RvdHlwZSwgJ2xvYWRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcnMubG9hZGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXJzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBtaWRpIGluIHRoaXMuX2FjdGl2ZVNvdXJjZXMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuc291cmNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNhbXBsZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIGlmICghT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnNldFBlcmlvZGljV2F2ZSkge1xuXHQgICAgICAgICAgICBPc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc2V0UGVyaW9kaWNXYXZlID0gT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnNldFdhdmVUYWJsZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCFBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVBlcmlvZGljV2F2ZSkge1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVBlcmlvZGljV2F2ZSA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlV2F2ZVRhYmxlO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE1hcHMgYSBOb3JtYWxSYW5nZSBbMCwgMV0gdG8gYW4gQXVkaW9SYW5nZSBbLTEsIDFdLiBcblx0XHQgKiAgICAgICAgIFNlZSBhbHNvIFRvbmUuQXVkaW9Ub0dhaW4uIFxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBnMmEgPSBuZXcgVG9uZS5HYWluVG9BdWRpbygpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HYWluVG9BdWRpbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25vcm0gPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh4KSB7XG5cdCAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh4KSAqIDIgLSAxO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR2FpblRvQXVkaW8sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuR2FpblRvQXVkaW99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR2FpblRvQXVkaW8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbm9ybS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbm9ybSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR2FpblRvQXVkaW87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBOb3JtYWxpemUgdGFrZXMgYW4gaW5wdXQgbWluIGFuZCBtYXggYW5kIG1hcHMgaXQgbGluZWFybHkgdG8gTm9ybWFsUmFuZ2UgWzAsMV1cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IGlucHV0TWluIHRoZSBtaW4gaW5wdXQgdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IGlucHV0TWF4IHRoZSBtYXggaW5wdXQgdmFsdWVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbm9ybSA9IG5ldyBUb25lLk5vcm1hbGl6ZSgyLCA0KTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDMpLmNvbm5lY3Qobm9ybSk7XG5cdFx0ICogLy9vdXRwdXQgb2Ygbm9ybSBpcyAwLjUuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob3JtYWxpemUgPSBmdW5jdGlvbiAoaW5wdXRNaW4sIGlucHV0TWF4KSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1pbiBpbnB1dCB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2lucHV0TWluID0gVG9uZS5kZWZhdWx0QXJnKGlucHV0TWluLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWF4IGlucHV0IHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW5wdXRNYXggPSBUb25lLmRlZmF1bHRBcmcoaW5wdXRNYXgsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHN1YnRyYWN0IHRoZSBtaW4gZnJvbSB0aGUgaW5wdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BZGR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1YiA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5BZGQoMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgZGl2aWRlIGJ5IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGlucHV0IGFuZCBvdXRwdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGl2ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5NdWx0aXBseSgxKTtcblx0ICAgICAgICB0aGlzLl9zdWIuY29ubmVjdCh0aGlzLl9kaXYpO1xuXHQgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Ob3JtYWxpemUsIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaW11bSB2YWx1ZSB0aGUgaW5wdXQgc2lnbmFsIHdpbGwgcmVhY2guXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTm9ybWFsaXplI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Ob3JtYWxpemUucHJvdG90eXBlLCAnbWluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRNaW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5faW5wdXRNaW4gPSBtaW47XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSB2YWx1ZSB0aGUgaW5wdXQgc2lnbmFsIHdpbGwgcmVhY2guXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTm9ybWFsaXplI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWF4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Ob3JtYWxpemUucHJvdG90eXBlLCAnbWF4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRNYXg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faW5wdXRNYXggPSBtYXg7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgc2V0IHRoZSB2YWx1ZXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9ybWFsaXplLnByb3RvdHlwZS5fc2V0UmFuZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3ViLnZhbHVlID0gLXRoaXMuX2lucHV0TWluO1xuXHQgICAgICAgIHRoaXMuX2Rpdi52YWx1ZSA9IDEgLyAodGhpcy5faW5wdXRNYXggLSB0aGlzLl9pbnB1dE1pbik7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vcm1hbGl6ZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob3JtYWxpemUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3ViLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdWIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2Rpdi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGl2ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Ob3JtYWxpemU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqIEBjbGFzcyBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsIGV4dGVuZHMgVG9uZS5TaWduYWwsIGJ1dCBhZGRzIHRoZSBhYmlsaXR5IHRvIHN5bmNocm9uaXplIHRoZSBzaWduYWwgdG8gdGhlIHNpZ25hbCB0byB0aGUgVG9uZS5UcmFuc3BvcnRcblx0XHQgKiBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgcmVhbCBzaWduYWwgb3V0cHV0XG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSB0aGlzLl9vdXRwdXRTaWcgPSBuZXcgVG9uZS5TaWduYWwodGhpcy5faW5pdGlhbFZhbHVlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEtlZXAgdHJhY2sgb2YgdGhlIGxhc3QgdmFsdWUuIChzbWFsbCBvcHRpbWl6YXRpb24pXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xhc3RWYWwgPSB0aGlzLnZhbHVlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGV2ZW50IGlkIG9mIHRoZSB0aWNrIHVwZGF0ZSBsb29wXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N5bmNlZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlUmVwZWF0KHRoaXMuX29uVGljay5iaW5kKHRoaXMpLCAnMWknKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEEgYm91bmQgdmVyc2lvbiBvZiB0aGUgYW5jaG9yIHZhbHVlIG1ldGhvZHNcblx0XHRcdCAqIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9iaW5kQW5jaG9yVmFsdWUgPSB0aGlzLl9hbmNob3JWYWx1ZS5iaW5kKHRoaXMpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9uKCdzdGFydCBzdG9wIHBhdXNlJywgdGhpcy5fYmluZEFuY2hvclZhbHVlKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMubWVtb3J5ID0gSW5maW5pdHk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbCwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogQ2FsbGJhY2sgd2hpY2ggaXMgaW52b2tlZCBldmVyeSB0aWNrLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB0aW1lXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5fb25UaWNrID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgdmFsID0gdGhpcy5nZXRWYWx1ZUF0VGltZShUb25lLlRyYW5zcG9ydC5zZWNvbmRzKTtcblx0ICAgICAgICBpZiAodGhpcy5fbGFzdFZhbCAhPT0gdmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xhc3RWYWwgPSB2YWw7XG5cdCAgICAgICAgICAgIC8vYXBwcm94aW1hdGUgcmFtcCBjdXJ2ZXMgd2l0aCBsaW5lYXIgcmFtcHNcblx0ICAgICAgICAgICAgdGhpcy5fb3V0cHV0U2lnLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbCwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEFuY2hvciB0aGUgdmFsdWUgYXQgdGhlIHN0YXJ0IGFuZCBzdG9wIG9mIHRoZSBUcmFuc3BvcnRcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHRpbWUgVGhlIHRpbWUgb2YgdGhlIGV2ZW50XG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICB0aGlzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLl9hbmNob3JWYWx1ZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIHZhbCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUoVG9uZS5UcmFuc3BvcnQuc2Vjb25kcyk7XG5cdCAgICAgICAgdGhpcy5fbGFzdFZhbCA9IHZhbDtcblx0ICAgICAgICB0aGlzLl9vdXRwdXRTaWcuY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX291dHB1dFNpZy5zZXRWYWx1ZUF0VGltZSh2YWwsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHNjaGVkdWxlZCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS4gVGhpcyB3aWxsXG5cdFx0ICogIHJldHVybiB0aGUgdW5jb252ZXJ0ZWQgKHJhdykgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge1RyYW5zcG9ydFRpbWV9ICB0aW1lICBUaGUgdGltZSBpbiBzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSAgVGhlIHNjaGVkdWxlZCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiBUb25lLlNpZ25hbC5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTZXQgdGhlIG91dHB1dCBvZiB0aGUgc2lnbmFsIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hhbmdlIHRvIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gdGltZSAgVGhlIHRpbWUgdG8gY2hhbmdlIHRoZSBzaWduYWxcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lLmNhbGwodGhpcywgdmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIExpbmVhciByYW1wIHRvIHRoZSBnaXZlbiB2YWx1ZSBmcm9tIHRoZSBwcmV2aW91cyBzY2hlZHVsZWQgcG9pbnQgdG8gdGhlIGdpdmVuIHZhbHVlXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hhbmdlIHRvIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gdGltZSAgVGhlIHRpbWUgdG8gY2hhbmdlIHRoZSBzaWduYWxcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lLmNhbGwodGhpcywgdmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEV4cG9uZW50aWFsIHJhbXAgdG8gdGhlIGdpdmVuIHZhbHVlIGZyb20gdGhlIHByZXZpb3VzIHNjaGVkdWxlZCBwb2ludCB0byB0aGUgZ2l2ZW4gdmFsdWVcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGFuZ2UgdG8gYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSB0aW1lICBUaGUgdGltZSB0byBjaGFuZ2UgdGhlIHNpZ25hbFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lLmNhbGwodGhpcywgdmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCBleHBvbmVudGlhbGx5IGFwcHJvYWNoaW5nIHRoZSB0YXJnZXQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUgd2l0aFxuXHRcdCAqICBhIHJhdGUgaGF2aW5nIHRoZSBnaXZlbiB0aW1lIGNvbnN0YW50LlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHRpbWVDb25zdGFudFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLnNldFRhcmdldEF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgc3RhcnRUaW1lLCB0aW1lQ29uc3RhbnQpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUoc3RhcnRUaW1lKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuc2V0VGFyZ2V0QXRUaW1lLmNhbGwodGhpcywgdmFsdWUsIHN0YXJ0VGltZSwgdGltZUNvbnN0YW50KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VscyBhbGwgc2NoZWR1bGVkIHBhcmFtZXRlciBjaGFuZ2VzIHdpdGggdGltZXMgZ3JlYXRlciB0aGFuIG9yXG5cdFx0ICogIGVxdWFsIHRvIHN0YXJ0VGltZS5cblx0XHQgKiAgQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gc3RhcnRUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMgPSBmdW5jdGlvbiAoc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmNhbmNlbFNjaGVkdWxlZFZhbHVlcy5jYWxsKHRoaXMsIHN0YXJ0VGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCBhbiBhcnJheSBvZiBhcmJpdHJhcnkgdmFsdWVzIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiB0aW1lIGZvciB0aGUgZ2l2ZW4gZHVyYXRpb24uXG5cdFx0ICogIEBwYXJhbSB7RmxvYXQzMkFycmF5fSB2YWx1ZXNcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBkdXJhdGlvblxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbc2NhbGluZz0xXSBJZiB0aGUgdmFsdWVzIGluIHRoZSBjdXJ2ZSBzaG91bGQgYmUgc2NhbGVkIGJ5IHNvbWUgdmFsdWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUN1cnZlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlcywgc3RhcnRUaW1lLCBkdXJhdGlvbiwgc2NhbGluZykge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZShzdGFydFRpbWUpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gVG9uZS5UcmFuc3BvcnRUaW1lKGR1cmF0aW9uKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuc2V0VmFsdWVDdXJ2ZUF0VGltZS5jYWxsKHRoaXMsIHZhbHVlcywgc3RhcnRUaW1lLCBkdXJhdGlvbiwgc2NhbGluZyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoaXMgaXMgc2ltaWxhciB0byBbY2FuY2VsU2NoZWR1bGVkVmFsdWVzXSgjY2FuY2VsU2NoZWR1bGVkVmFsdWVzKSBleGNlcHRcblx0XHQgKiAgaXQgaG9sZHMgdGhlIGF1dG9tYXRlZCB2YWx1ZSBhdCB0aW1lIHVudGlsIHRoZSBuZXh0IGF1dG9tYXRlZCBldmVudC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuY2FuY2VsQW5kSG9sZEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5jYW5jZWxBbmRIb2xkQXRUaW1lLmNhbGwodGhpcywgVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBEaXNwb3NlIGFuZCBkaXNjb25uZWN0XG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5jbGVhcih0aGlzLl9zeW5jZWQpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9mZignc3RhcnQgc3RvcCBwYXVzZScsIHRoaXMuX3N5bmNlZENhbGxiYWNrKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKDApO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fb3V0cHV0U2lnLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9vdXRwdXRTaWcgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgVG9uZS5HcmFpblBsYXllciBpbXBsZW1lbnRzIFtncmFudWxhciBzeW50aGVzaXNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dyYW51bGFyX3N5bnRoZXNpcykuXG5cdFx0ICogICAgICAgIEdyYW51bGFyIFN5bnRoZXNpcyBlbmFibGVzIHlvdSB0byBhZGp1c3QgcGl0Y2ggYW5kIHBsYXliYWNrIHJhdGUgaW5kZXBlbmRlbnRseS4gVGhlIGdyYWluU2l6ZSBpcyB0aGVcblx0XHQgKiAgICAgICAgYW1vdW50IG9mIHRpbWUgZWFjaCBzbWFsbCBjaHVuayBvZiBhdWRpbyBpcyBwbGF5ZWQgZm9yIGFuZCB0aGUgb3ZlcmxhcCBpcyB0aGVcblx0XHQgKiAgICAgICAgYW1vdW50IG9mIGNyb3NzZmFkaW5nIHRyYW5zaXRpb24gdGltZSBiZXR3ZWVuIHN1Y2Nlc3NpdmUgZ3JhaW5zLlxuXHRcdCAqIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiBAcGFyYW0ge1N0cmluZ3xUb25lLkJ1ZmZlcn0gdXJsXHRUaGUgdXJsIHRvIGxvYWQsIG9yIHRoZSBUb25lLkJ1ZmZlciB0byBwbGF5LlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGFmdGVyIHRoZSB1cmwgaXMgbG9hZGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd1cmwnLFxuXHQgICAgICAgICAgICAnb25sb2FkJ1xuXHQgICAgICAgIF0sIFRvbmUuR3JhaW5QbGF5ZXIpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGF1ZGlvIGJ1ZmZlciBiZWxvbmdpbmcgdG8gdGhlIHBsYXllci5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQnVmZmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5idWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIob3B0aW9ucy51cmwsIG9wdGlvbnMub25sb2FkKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBDcmVhdGUgYSByZXBlYXRpbmcgdGljayB0byBzY2hlZHVsZVxuXHRcdFx0ICogIHRoZSBncmFpbnMuXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkNsb2NrfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jbG9jayA9IG5ldyBUb25lLkNsb2NrKHRoaXMuX3RpY2suYmluZCh0aGlzKSwgb3B0aW9ucy5ncmFpblNpemUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wRW5kID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEFsbCBvZiB0aGUgY3VycmVudGx5IHBsYXlpbmcgQnVmZmVyU291cmNlc1xuXHRcdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dyYWluU2l6ZSA9IG9wdGlvbnMuZ3JhaW5TaXplO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX292ZXJsYXAgPSBvcHRpb25zLm92ZXJsYXA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWRqdXN0IHRoZSBwaXRjaCBpbmRlcGVuZGVudGx5IG9mIHRoZSBwbGF5YmFja1JhdGUuXG5cdFx0XHQgKiAgQHR5cGUgIHtDZW50c31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gb3B0aW9ucy5kZXR1bmU7XG5cdCAgICAgICAgLy9zZXR1cFxuXHQgICAgICAgIHRoaXMub3ZlcmxhcCA9IG9wdGlvbnMub3ZlcmxhcDtcblx0ICAgICAgICB0aGlzLmxvb3AgPSBvcHRpb25zLmxvb3A7XG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgICAgICB0aGlzLmdyYWluU2l6ZSA9IG9wdGlvbnMuZ3JhaW5TaXplO1xuXHQgICAgICAgIHRoaXMubG9vcFN0YXJ0ID0gb3B0aW9ucy5sb29wU3RhcnQ7XG5cdCAgICAgICAgdGhpcy5sb29wRW5kID0gb3B0aW9ucy5sb29wRW5kO1xuXHQgICAgICAgIHRoaXMucmV2ZXJzZSA9IG9wdGlvbnMucmV2ZXJzZTtcblx0ICAgICAgICB0aGlzLl9jbG9jay5vbignc3RvcCcsIHRoaXMuX29uc3RvcC5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdyYWluUGxheWVyLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdvdmVybGFwJzogMC4xLFxuXHQgICAgICAgICdncmFpblNpemUnOiAwLjIsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDEsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ2xvb3AnOiBmYWxzZSxcblx0ICAgICAgICAnbG9vcFN0YXJ0JzogMCxcblx0ICAgICAgICAnbG9vcEVuZCc6IDAsXG5cdCAgICAgICAgJ3JldmVyc2UnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQbGF5IHRoZSBidWZmZXIgYXQgdGhlIGdpdmVuIHN0YXJ0VGltZS4gT3B0aW9uYWxseSBhZGQgYW4gb2Zmc2V0XG5cdFx0ICogIGFuZC9vciBkdXJhdGlvbiB3aGljaCB3aWxsIHBsYXkgdGhlIGJ1ZmZlciBmcm9tIGEgcG9zaXRpb25cblx0XHQgKiAgd2l0aGluIHRoZSBidWZmZXIgZm9yIHRoZSBnaXZlbiBkdXJhdGlvbi5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbc3RhcnRUaW1lPW5vd10gV2hlbiB0aGUgcGxheWVyIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW29mZnNldD0wXSBUaGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2FtcGxlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzdGFydCBhdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19IGR1cmF0aW9uIEhvdyBsb25nIHRoZSBzYW1wbGUgc2hvdWxkIHBsYXkuIElmIG5vIGR1cmF0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGdpdmVuLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIGZ1bGwgbGVuZ3RoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzYW1wbGUgKG1pbnVzIGFueSBvZmZzZXQpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkdyYWluUGxheWVyfSB0aGlzXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqICBAbWV0aG9kIHN0YXJ0XG5cdFx0ICogIEBuYW1lIHN0YXJ0XG5cdFx0ICovXG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgc3RhcnQgbWV0aG9kXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IG9mZnNldFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCwgZHVyYXRpb24pIHtcblx0ICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCAwKTtcblx0ICAgICAgICBvZmZzZXQgPSB0aGlzLnRvU2Vjb25kcyhvZmZzZXQpO1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vZmZzZXQgPSBvZmZzZXQ7XG5cdCAgICAgICAgdGhpcy5fY2xvY2suc3RhcnQodGltZSk7XG5cdCAgICAgICAgaWYgKGR1cmF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RvcCh0aW1lICsgdGhpcy50b1NlY29uZHMoZHVyYXRpb24pKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIHN0YXJ0IG1ldGhvZFxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9jbG9jay5zdG9wKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludm9rZWQgd2hlbiB0aGUgY2xvY2sgaXMgc3RvcHBlZFxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdGltZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5fb25zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL3N0b3AgdGhlIHBsYXllcnNcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RvcCh0aW1lLCAwKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW52b2tlZCBvbiBlYWNoIGNsb2NrIHRpY2suIHNjaGVkdWxlZCBhIG5ld1xuXHRcdCAqICBncmFpbiBhdCB0aGlzIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIGZhZGVJbiA9IHRoaXMuX29mZnNldCA8IHRoaXMuX292ZXJsYXAgPyAwIDogdGhpcy5fb3ZlcmxhcDtcblx0ICAgICAgICB2YXIgc291cmNlID0gbmV3IFRvbmUuQnVmZmVyU291cmNlKHtcblx0ICAgICAgICAgICAgJ2J1ZmZlcic6IHRoaXMuYnVmZmVyLFxuXHQgICAgICAgICAgICAnZmFkZUluJzogZmFkZUluLFxuXHQgICAgICAgICAgICAnZmFkZU91dCc6IHRoaXMuX292ZXJsYXAsXG5cdCAgICAgICAgICAgICdsb29wJzogdGhpcy5sb29wLFxuXHQgICAgICAgICAgICAnbG9vcFN0YXJ0JzogdGhpcy5fbG9vcFN0YXJ0LFxuXHQgICAgICAgICAgICAnbG9vcEVuZCc6IHRoaXMuX2xvb3BFbmQsXG5cdCAgICAgICAgICAgICdwbGF5YmFja1JhdGUnOiBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyh0aGlzLmRldHVuZSAvIDEwMClcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICBzb3VyY2Uuc3RhcnQodGltZSwgdGhpcy5fb2Zmc2V0KTtcblx0ICAgICAgICB0aGlzLl9vZmZzZXQgKz0gdGhpcy5ncmFpblNpemU7XG5cdCAgICAgICAgc291cmNlLnN0b3AodGltZSArIHRoaXMuZ3JhaW5TaXplKTtcblx0ICAgICAgICAvL2FkZCBpdCB0byB0aGUgYWN0aXZlIHNvdXJjZXNcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLnB1c2goc291cmNlKTtcblx0ICAgICAgICAvL3JlbW92ZSBpdCB3aGVuIGl0J3MgZG9uZVxuXHQgICAgICAgIHNvdXJjZS5vbmVuZGVkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9hY3RpdmVTb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcblx0ICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBKdW1wIHRvIGEgc3BlY2lmaWMgdGltZSBhbmQgcGxheSBpdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIG9mZnNldCAgVGhlIG9mZnNldCB0byBqdW1wIHRvLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSB0aW1lIFdoZW4gdG8gbWFrZSB0aGUganVtcC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuR3JhaW5QbGF5ZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5zZWVrID0gZnVuY3Rpb24gKG9mZnNldCwgdGltZSkge1xuXHQgICAgICAgIHRoaXMuX29mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgdGhpcy5fdGljayh0aGlzLnRvU2Vjb25kcyh0aW1lKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIHNhbXBsZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAbmFtZSBwbGF5YmFja1JhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgdGhpcy5ncmFpblNpemUgPSB0aGlzLl9ncmFpblNpemU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbG9vcCBzdGFydCB0aW1lLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcFN0YXJ0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBsb29wIGVuZCB0aW1lLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BFbmRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wRW5kO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGlyZWN0aW9uIHRoZSBidWZmZXIgc2hvdWxkIHBsYXkgaW5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HcmFpblBsYXllciNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSByZXZlcnNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdyZXZlcnNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5idWZmZXIucmV2ZXJzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJldikge1xuXHQgICAgICAgICAgICB0aGlzLmJ1ZmZlci5yZXZlcnNlID0gcmV2O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHNpemUgb2YgZWFjaCBjaHVuayBvZiBhdWRpbyB0aGF0IHRoZVxuXHRcdCAqIGJ1ZmZlciBpcyBjaG9wcGVkIGludG8gYW5kIHBsYXllZCBiYWNrIGF0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGdyYWluU2l6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAnZ3JhaW5TaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ3JhaW5TaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2l6ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9ncmFpblNpemUgPSB0aGlzLnRvU2Vjb25kcyhzaXplKTtcblx0ICAgICAgICAgICAgdGhpcy5fY2xvY2suZnJlcXVlbmN5LnZhbHVlID0gdGhpcy5fcGxheWJhY2tSYXRlIC8gdGhpcy5fZ3JhaW5TaXplO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhpcyBpcyB0aGUgZHVyYXRpb24gb2YgdGhlIGNyb3NzLWZhZGUgYmV0d2VlblxuXHRcdCAqIHN1Y2Vzc2l2ZSBncmFpbnMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgb3ZlcmxhcFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAnb3ZlcmxhcCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX292ZXJsYXA7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX292ZXJsYXAgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwXG5cdFx0ICogQHJldHVybiB7VG9uZS5HcmFpblBsYXllcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuYnVmZmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmJ1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY2xvY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICBzb3VyY2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdyYWluUGxheWVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUGxheWVyIGlzIGFuIGF1ZGlvIGZpbGUgcGxheWVyIHdpdGggc3RhcnQsIGxvb3AsIGFuZCBzdG9wIGZ1bmN0aW9ucy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ3xBdWRpb0J1ZmZlcn0gdXJsIEVpdGhlciB0aGUgQXVkaW9CdWZmZXIgb3IgdGhlIHVybCBmcm9tXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggdG8gbG9hZCB0aGUgQXVkaW9CdWZmZXJcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbj19IG9ubG9hZCBUaGUgZnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gdGhlIGJ1ZmZlciBpcyBsb2FkZWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjb21tZW5kZWQgdG8gdXNlIFRvbmUuQnVmZmVyLm9uKCdsb2FkJykgaW5zdGVhZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcGxheWVyID0gbmV3IFRvbmUuUGxheWVyKFwiLi9wYXRoL3RvL3NhbXBsZS5tcDNcIikudG9NYXN0ZXIoKTtcblx0XHQgKiAvL3BsYXkgYXMgc29vbiBhcyB0aGUgYnVmZmVyIGlzIGxvYWRlZFxuXHRcdCAqIHBsYXllci5hdXRvc3RhcnQgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIgPSBmdW5jdGlvbiAodXJsKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnM7XG5cdCAgICAgICAgaWYgKHVybCBpbnN0YW5jZW9mIFRvbmUuQnVmZmVyICYmIHVybC5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgdXJsID0gdXJsLmdldCgpO1xuXHQgICAgICAgICAgICBvcHRpb25zID0gVG9uZS5QbGF5ZXIuZGVmYXVsdHM7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICAgICAndXJsJyxcblx0ICAgICAgICAgICAgICAgICdvbmxvYWQnXG5cdCAgICAgICAgICAgIF0sIFRvbmUuUGxheWVyKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBJZiB0aGUgZmlsZSBzaG91bGQgcGxheSBhcyBzb29uXG5cdFx0XHQgKiAgYXMgdGhlIGJ1ZmZlciBpcyBsb2FkZWQuXG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vd2lsbCBwbGF5IGFzIHNvb24gYXMgaXQncyBsb2FkZWRcblx0XHRcdCAqIHZhciBwbGF5ZXIgPSBuZXcgVG9uZS5QbGF5ZXIoe1xuXHRcdFx0ICogXHRcInVybFwiIDogXCIuL3BhdGgvdG8vc2FtcGxlLm1wM1wiLFxuXHRcdFx0ICogXHRcImF1dG9zdGFydFwiIDogdHJ1ZSxcblx0XHRcdCAqIH0pLnRvTWFzdGVyKCk7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmF1dG9zdGFydCA9IG9wdGlvbnMuYXV0b3N0YXJ0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBidWZmZXJcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcih7XG5cdCAgICAgICAgICAgICd1cmwnOiBvcHRpb25zLnVybCxcblx0ICAgICAgICAgICAgJ29ubG9hZCc6IHRoaXMuX29ubG9hZC5iaW5kKHRoaXMsIG9wdGlvbnMub25sb2FkKSxcblx0ICAgICAgICAgICAgJ3JldmVyc2UnOiBvcHRpb25zLnJldmVyc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICBpZiAodXJsIGluc3RhbmNlb2YgQXVkaW9CdWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnNldCh1cmwpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpZiB0aGUgYnVmZmVyIHNob3VsZCBsb29wIG9uY2UgaXQncyBvdmVyXG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3AgPSBvcHRpb25zLmxvb3A7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaWYgJ2xvb3AnIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgc3RhcnQgYXQgdGhpcyBwb3NpdGlvblxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSBvcHRpb25zLmxvb3BTdGFydDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpZiAnbG9vcCcgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBlbmQgYXQgdGhpcyBwb3NpdGlvblxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wRW5kID0gb3B0aW9ucy5sb29wRW5kO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwbGF5YmFjayByYXRlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWxsIG9mIHRoZSBhY3RpdmUgYnVmZmVyIHNvdXJjZSBub2Rlc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheTxUb25lLkJ1ZmZlclNvdXJjZT59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZWxhcHNlZCB0aW1lIGNvdW50ZXIuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVGlja1NvdXJjZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUgPSBuZXcgVG9uZS5UaWNrU291cmNlKG9wdGlvbnMucGxheWJhY2tSYXRlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmFkZUluIHRpbWUgb2YgdGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmFkZUluID0gb3B0aW9ucy5mYWRlSW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZhZGVPdXQgdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mYWRlT3V0ID0gb3B0aW9ucy5mYWRlT3V0O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGxheWVyLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29ubG9hZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMSxcblx0ICAgICAgICAnbG9vcCc6IGZhbHNlLFxuXHQgICAgICAgICdhdXRvc3RhcnQnOiBmYWxzZSxcblx0ICAgICAgICAnbG9vcFN0YXJ0JzogMCxcblx0ICAgICAgICAnbG9vcEVuZCc6IDAsXG5cdCAgICAgICAgJ3JldHJpZ2dlcic6IGZhbHNlLFxuXHQgICAgICAgICdyZXZlcnNlJzogZmFsc2UsXG5cdCAgICAgICAgJ2ZhZGVJbic6IDAsXG5cdCAgICAgICAgJ2ZhZGVPdXQnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIExvYWQgdGhlIGF1ZGlvIGZpbGUgYXMgYW4gYXVkaW8gYnVmZmVyLlxuXHRcdCAqICBEZWNvZGVzIHRoZSBhdWRpbyBhc3luY2hyb25vdXNseSBhbmQgaW52b2tlc1xuXHRcdCAqICB0aGUgY2FsbGJhY2sgb25jZSB0aGUgYXVkaW8gYnVmZmVyIGxvYWRzLlxuXHRcdCAqICBOb3RlOiB0aGlzIGRvZXMgbm90IG5lZWQgdG8gYmUgY2FsbGVkIGlmIGEgdXJsXG5cdFx0ICogIHdhcyBwYXNzZWQgaW4gdG8gdGhlIGNvbnN0cnVjdG9yLiBPbmx5IHVzZSB0aGlzXG5cdFx0ICogIGlmIHlvdSB3YW50IHRvIG1hbnVhbGx5IGxvYWQgYSBuZXcgdXJsLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgYnVmZmVyIHRvIGxvYWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICBGaWxldHlwZSBzdXBwb3J0IGRlcGVuZHMgb24gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICBicm93c2VyLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0byBpbnZva2Ugb25jZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzYW1wbGUgaXMgbG9hZGVkLlxuXHRcdCAqICBAcmV0dXJucyB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKHVybCwgY2FsbGJhY2spIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmxvYWQodXJsLCB0aGlzLl9vbmxvYWQuYmluZCh0aGlzLCBjYWxsYmFjaykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludGVybmFsIGNhbGxiYWNrIHdoZW4gdGhlIGJ1ZmZlciBpcyBsb2FkZWQuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5fb25sb2FkID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgY2FsbGJhY2sgPSBUb25lLmRlZmF1bHRBcmcoY2FsbGJhY2ssIFRvbmUubm9PcCk7XG5cdCAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgaWYgKHRoaXMuYXV0b3N0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RhcnQoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW50ZXJuYWwgY2FsbGJhY2sgd2hlbiB0aGUgYnVmZmVyIGlzIGRvbmUgcGxheWluZy5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9vblNvdXJjZUVuZCA9IGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9hY3RpdmVTb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBsYXkgdGhlIGJ1ZmZlciBhdCB0aGUgZ2l2ZW4gc3RhcnRUaW1lLiBPcHRpb25hbGx5IGFkZCBhbiBvZmZzZXRcblx0XHQgKiAgYW5kL29yIGR1cmF0aW9uIHdoaWNoIHdpbGwgcGxheSB0aGUgYnVmZmVyIGZyb20gYSBwb3NpdGlvblxuXHRcdCAqICB3aXRoaW4gdGhlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtzdGFydFRpbWU9bm93XSBXaGVuIHRoZSBwbGF5ZXIgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbb2Zmc2V0PTBdIFRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGF0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIHNhbXBsZSBzaG91bGQgcGxheS4gSWYgbm8gZHVyYXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZ2l2ZW4sIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgZnVsbCBsZW5ndGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNhbXBsZSAobWludXMgYW55IG9mZnNldClcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiAgQG1ldGhvZCBzdGFydFxuXHRcdCAqICBAbmFtZSBzdGFydFxuXHRcdCAqL1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIHN0YXJ0IG1ldGhvZFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIG9mZnNldCwgZHVyYXRpb24pIHtcblx0ICAgICAgICAvL2lmIGl0J3MgYSBsb29wIHRoZSBkZWZhdWx0IG9mZnNldCBpcyB0aGUgbG9vcHN0YXJ0IHBvaW50XG5cdCAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgdGhpcy5fbG9vcFN0YXJ0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvL290aGVyd2lzZSB0aGUgZGVmYXVsdCBvZmZzZXQgaXMgMFxuXHQgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCAwKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jb21wdXRlIHRoZSB2YWx1ZXMgaW4gc2Vjb25kc1xuXHQgICAgICAgIG9mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgdmFyIGNvbXB1dGVkRHVyYXRpb24gPSBUb25lLmRlZmF1bHRBcmcoZHVyYXRpb24sIE1hdGgubWF4KHRoaXMuX2J1ZmZlci5kdXJhdGlvbiAtIG9mZnNldCwgMCkpO1xuXHQgICAgICAgIGNvbXB1dGVkRHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhjb21wdXRlZER1cmF0aW9uKTtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIGVsYXBzZWQgdGltZSBjb3VudGVyXG5cdCAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUuc3RhcnQoc3RhcnRUaW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIC8vbWFrZSB0aGUgc291cmNlXG5cdCAgICAgICAgdmFyIHNvdXJjZSA9IG5ldyBUb25lLkJ1ZmZlclNvdXJjZSh7XG5cdCAgICAgICAgICAgICdidWZmZXInOiB0aGlzLl9idWZmZXIsXG5cdCAgICAgICAgICAgICdsb29wJzogdGhpcy5fbG9vcCxcblx0ICAgICAgICAgICAgJ2xvb3BTdGFydCc6IHRoaXMuX2xvb3BTdGFydCxcblx0ICAgICAgICAgICAgJ2xvb3BFbmQnOiB0aGlzLl9sb29wRW5kLFxuXHQgICAgICAgICAgICAnb25lbmRlZCc6IHRoaXMuX29uU291cmNlRW5kLmJpbmQodGhpcyksXG5cdCAgICAgICAgICAgICdwbGF5YmFja1JhdGUnOiB0aGlzLl9wbGF5YmFja1JhdGUsXG5cdCAgICAgICAgICAgICdmYWRlSW4nOiB0aGlzLmZhZGVJbixcblx0ICAgICAgICAgICAgJ2ZhZGVPdXQnOiB0aGlzLmZhZGVPdXRcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAvL3NldCB0aGUgbG9vcGluZyBwcm9wZXJ0aWVzXG5cdCAgICAgICAgaWYgKCF0aGlzLl9sb29wICYmICF0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgLy9pZiBpdCdzIG5vdCBsb29waW5nLCBzZXQgdGhlIHN0YXRlIGNoYW5nZSBhdCB0aGUgZW5kIG9mIHRoZSBzYW1wbGVcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCBzdGFydFRpbWUgKyBjb21wdXRlZER1cmF0aW9uIC8gdGhpcy5fcGxheWJhY2tSYXRlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9hZGQgaXQgdG8gdGhlIGFycmF5IG9mIGFjdGl2ZSBzb3VyY2VzXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5wdXNoKHNvdXJjZSk7XG5cdCAgICAgICAgLy9zdGFydCBpdFxuXHQgICAgICAgIGlmICh0aGlzLl9sb29wICYmIFRvbmUuaXNVbmRlZihkdXJhdGlvbikpIHtcblx0ICAgICAgICAgICAgc291cmNlLnN0YXJ0KHN0YXJ0VGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RhcnQoc3RhcnRUaW1lLCBvZmZzZXQsIGNvbXB1dGVkRHVyYXRpb24pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCBwbGF5YmFjay5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgc291cmNlLnN0b3AodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RvcCBhbmQgdGhlbiByZXN0YXJ0IHRoZSBwbGF5ZXIgZnJvbSB0aGUgYmVnaW5uaW5nIChvciBvZmZzZXQpXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtzdGFydFRpbWU9bm93XSBXaGVuIHRoZSBwbGF5ZXIgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbb2Zmc2V0PTBdIFRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGF0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIHNhbXBsZSBzaG91bGQgcGxheS4gSWYgbm8gZHVyYXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZ2l2ZW4sIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgZnVsbCBsZW5ndGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNhbXBsZSAobWludXMgYW55IG9mZnNldClcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgdGhpcy5fc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGFydCh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2VlayB0byBhIHNwZWNpZmljIHRpbWUgaW4gdGhlIHBsYXllcidzIGJ1ZmZlci4gSWYgdGhlXG5cdFx0ICogIHNvdXJjZSBpcyBubyBsb25nZXIgcGxheWluZyBhdCB0aGF0IHRpbWUsIGl0IHdpbGwgc3RvcC5cblx0XHQgKiAgSWYgeW91IHNlZWsgdG8gYSB0aW1lIHRoYXRcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBvZmZzZXQgVGhlIHRpbWUgdG8gc2VlayB0by5cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gdGltZSBUaGUgdGltZSBmb3IgdGhlIHNlZWsgZXZlbnQgdG8gb2NjdXIuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc291cmNlLnN0YXJ0KDAuMik7XG5cdFx0ICogc291cmNlLnN0b3AoMC40KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5zZWVrID0gZnVuY3Rpb24gKG9mZnNldCwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLnRvU2Vjb25kcyhvZmZzZXQpO1xuXHQgICAgICAgICAgICAvLyBpZiBpdCdzIGN1cnJlbnRseSBwbGF5aW5nLCBzdG9wIGl0XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3AodGltZSk7XG5cdCAgICAgICAgICAgIC8vcmVzdGFydCBpdCBhdCB0aGUgZ2l2ZW4gdGltZVxuXHQgICAgICAgICAgICB0aGlzLl9zdGFydCh0aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBsb29wIHN0YXJ0IGFuZCBlbmQuIFdpbGwgb25seSBsb29wIGlmIGxvb3AgaXNcblx0XHQgKiAgc2V0IHRvIHRydWUuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gbG9vcFN0YXJ0IFRoZSBsb29wIGVuZCB0aW1lXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gbG9vcEVuZCBUaGUgbG9vcCBlbmQgdGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2xvb3AgMC4xIHNlY29uZHMgb2YgdGhlIGZpbGUuXG5cdFx0ICogcGxheWVyLnNldExvb3BQb2ludHMoMC4yLCAwLjMpO1xuXHRcdCAqIHBsYXllci5sb29wID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5zZXRMb29wUG9pbnRzID0gZnVuY3Rpb24gKGxvb3BTdGFydCwgbG9vcEVuZCkge1xuXHQgICAgICAgIHRoaXMubG9vcFN0YXJ0ID0gbG9vcFN0YXJ0O1xuXHQgICAgICAgIHRoaXMubG9vcEVuZCA9IGxvb3BFbmQ7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgbG9vcCBpcyB0cnVlLCB0aGUgbG9vcCB3aWxsIHN0YXJ0IGF0IHRoaXMgcG9zaXRpb24uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3BTdGFydDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BTdGFydCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSBsb29wU3RhcnQ7XG5cdCAgICAgICAgICAgIC8vZ2V0IHRoZSBjdXJyZW50IHNvdXJjZVxuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgc291cmNlLmxvb3BTdGFydCA9IGxvb3BTdGFydDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBJZiBsb29wIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgZW5kIGF0IHRoaXMgcG9zaXRpb24uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BFbmRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdsb29wRW5kJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcEVuZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BFbmQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IGxvb3BFbmQ7XG5cdCAgICAgICAgICAgIC8vZ2V0IHRoZSBjdXJyZW50IHNvdXJjZVxuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgc291cmNlLmxvb3BFbmQgPSBsb29wRW5kO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBhdWRpbyBidWZmZXIgYmVsb25naW5nIHRvIHRoZSBwbGF5ZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHQgKiBAbmFtZSBidWZmZXJcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdidWZmZXInLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnNldChidWZmZXIpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogSWYgdGhlIGJ1ZmZlciBzaG91bGQgbG9vcCBvbmNlIGl0J3Mgb3Zlci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9vcFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2xvb3AnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcCkge1xuXHQgICAgICAgICAgICAvL2lmIG5vIGNoYW5nZSwgZG8gbm90aGluZ1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCA9PT0gbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgaWYgKCFsb29wKSB7XG5cdCAgICAgICAgICAgICAgICAvL3N0b3AgdGhlIHBsYXliYWNrIG9uIHRoZSBuZXh0IGN5Y2xlXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdG9wQXROZXh0SXRlcmF0aW9uKG5vdyk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvL3JlbW92ZSB0aGUgbmV4dCBzdG9wRXZlbnRcblx0ICAgICAgICAgICAgICAgIHZhciBzdG9wRXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXROZXh0U3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkLCBub3cpO1xuXHQgICAgICAgICAgICAgICAgaWYgKHN0b3BFdmVudCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwoc3RvcEV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lLmNhbmNlbChzdG9wRXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYSBzdG9wIGV2ZW50IGF0IHRoZSBuZXh0IGZ1bGwgaXRlcmF0aW9uLiBVc2VkXG5cdFx0ICogIGZvciBzY2hlZHVsaW5nIHN0b3Agd2hlbiB0aGUgbG9vcCBzdGF0ZSBvciBwbGF5YmFja1JhdGUgY2hhbmdlc1xuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBub3cgIFRoZSBjdXJyZW50IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5fc3RvcEF0TmV4dEl0ZXJhdGlvbiA9IGZ1bmN0aW9uIChub3cpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUobm93KSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHZhciBuZXh0U3RvcCA9IHRoaXMuX3N0YXRlLmdldE5leHRTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQsIG5vdyk7XG5cdCAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuX2VsYXBzZWRUaW1lLmdldFRpY2tzQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgICAgIHZhciBpdGVyYXRpb25zID0gTWF0aC5tYXgoTWF0aC5jZWlsKHBvc2l0aW9uIC8gdGhpcy5idWZmZXIuZHVyYXRpb24pLCAxKTtcblx0ICAgICAgICAgICAgdmFyIHN0b3BUaW1lID0gdGhpcy5fZWxhcHNlZFRpbWUuZ2V0VGltZU9mVGljayhpdGVyYXRpb25zICogdGhpcy5idWZmZXIuZHVyYXRpb24sIG5leHRTdG9wID8gbmV4dFN0b3AudGltZSAtIHRoaXMuc2FtcGxlVGltZSA6IEluZmluaXR5KTtcblx0ICAgICAgICAgICAgdGhpcy5zdG9wKHN0b3BUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBsYXliYWNrIHNwZWVkLiAxIGlzIG5vcm1hbCBzcGVlZC4gVGhpcyBpcyBub3QgYSBzaWduYWwgYmVjYXVzZVxuXHRcdCAqIFNhZmFyaSBhbmQgaU9TIGN1cnJlbnRseSBkb24ndCBzdXBwb3J0IHBsYXliYWNrUmF0ZSBhcyBhIHNpZ25hbC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBwbGF5YmFja1JhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdwbGF5YmFja1JhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IHJhdGU7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB0aGlzLl9lbGFwc2VkVGltZS5mcmVxdWVuY3kuc2V0VmFsdWVBdFRpbWUocmF0ZSwgbm93KTtcblx0ICAgICAgICAgICAgLy9pZiBpdCdzIG5vdCBsb29waW5nXG5cdCAgICAgICAgICAgIGlmICghdGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RvcEF0TmV4dEl0ZXJhdGlvbihub3cpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vc2V0IGFsbCB0aGUgc291cmNlc1xuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgc291cmNlLnBsYXliYWNrUmF0ZS5zZXRWYWx1ZUF0VGltZShyYXRlLCBub3cpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uIG9mIHRoZSBidWZmZXIuIFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBvc2l0aW9uXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAncG9zaXRpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUobm93KSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIHRoaXMubG9hZGVkKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZHVyYXRpb24gPSB0aGlzLmJ1ZmZlci5kdXJhdGlvbjtcblx0ICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuX2VsYXBzZWRUaW1lLmdldFRpY2tzQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gJSBkdXJhdGlvbjtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGlyZWN0aW9uIHRoZSBidWZmZXIgc2hvdWxkIHBsYXkgaW5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgcmV2ZXJzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ3JldmVyc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIucmV2ZXJzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJldikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIucmV2ZXJzZSA9IHJldjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGFsbCB0aGUgYnVmZmVyIGlzIGxvYWRlZFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb2FkZWRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdsb2FkZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubG9hZGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIERpc3Bvc2UgYW5kIGRpc2Nvbm5lY3QuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL2Rpc2Nvbm5lY3QgYWxsIG9mIHRoZSBwbGF5ZXJzXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgc291cmNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzID0gbnVsbDtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9lbGFwc2VkVGltZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBsYXllcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlBsYXllcnMgY29tYmluZXMgbXVsdGlwbGUgW1RvbmUuUGxheWVyXShQbGF5ZXIpIG9iamVjdHMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IHVybHMgQW4gb2JqZWN0IG1hcHBpbmcgYSBuYW1lIHRvIGEgdXJsLlxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9uPX0gb25sb2FkIFRoZSBmdW5jdGlvbiB0byBpbnZva2Ugd2hlbiBhbGwgYnVmZmVycyBhcmUgbG9hZGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzID0gZnVuY3Rpb24gKHVybHMpIHtcblx0ICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgYXJncy5zaGlmdCgpO1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmdzLCBbJ29ubG9hZCddLCBUb25lLlBsYXllcnMpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3V0cHV0IHZvbHVtZSBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlZvbHVtZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUob3B0aW9ucy52b2x1bWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHZvbHVtZSBvZiB0aGUgb3V0cHV0IGluIGRlY2liZWxzLlxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICogQGV4YW1wbGVcblx0XHRcdCAqIHNvdXJjZS52b2x1bWUudmFsdWUgPSAtNjtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgLy9tYWtlIHRoZSBvdXRwdXQgZXhwbGljaXRseSBzdGVyZW9cblx0ICAgICAgICB0aGlzLl92b2x1bWUub3V0cHV0Lm91dHB1dC5jaGFubmVsQ291bnQgPSAyO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5vdXRwdXQub3V0cHV0LmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgIC8vbXV0ZSBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgY29udGFpbmVyIG9mIGFsbCBvZiB0aGUgcGxheWVyc1xuXHRcdFx0ICogQHR5cGUge09iamVjdH1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wbGF5ZXJzID0ge307XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgbG9hZGluZyBjb3VudFxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb2FkaW5nQ291bnQgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogcHJpdmF0ZSBob2xkZXIgb2YgdGhlIGZhZGVJbiB0aW1lXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mYWRlSW4gPSBvcHRpb25zLmZhZGVJbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHByaXZhdGUgaG9sZGVyIG9mIHRoZSBmYWRlT3V0IHRpbWVcblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZhZGVPdXQgPSBvcHRpb25zLmZhZGVPdXQ7XG5cdCAgICAgICAgLy9hZGQgYWxsIG9mIHRoZSBwbGF5ZXJzXG5cdCAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB1cmxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudCsrO1xuXHQgICAgICAgICAgICB0aGlzLmFkZChuYW1lLCB1cmxzW25hbWVdLCB0aGlzLl9idWZmZXJMb2FkZWQuYmluZCh0aGlzLCBvcHRpb25zLm9ubG9hZCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBsYXllcnMsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZSxcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdmYWRlSW4nOiAwLFxuXHQgICAgICAgICdmYWRlT3V0JzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBIGJ1ZmZlciB3YXMgbG9hZGVkLiBkZWNyZW1lbnQgdGhlIGNvdW50ZXIuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2tcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuX2J1ZmZlckxvYWRlZCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudC0tO1xuXHQgICAgICAgIGlmICh0aGlzLl9sb2FkaW5nQ291bnQgPT09IDAgJiYgY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUgdGhlIG91dHB1dC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Tb3VyY2UjXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9tdXRlIHRoZSBvdXRwdXRcblx0XHQgKiBzb3VyY2UubXV0ZSA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXJzLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWUubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGZhZGVJbiB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU291cmNlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGZhZGVJblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVycy5wcm90b3R5cGUsICdmYWRlSW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9mYWRlSW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmYWRlSW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fZmFkZUluID0gZmFkZUluO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHBsYXllci5mYWRlSW4gPSBmYWRlSW47XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGZhZGVPdXQgdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNvdXJjZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBmYWRlT3V0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXJzLnByb3RvdHlwZSwgJ2ZhZGVPdXQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9mYWRlT3V0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZmFkZU91dCkge1xuXHQgICAgICAgICAgICB0aGlzLl9mYWRlT3V0ID0gZmFkZU91dDtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAocGxheWVyKSB7XG5cdCAgICAgICAgICAgICAgICBwbGF5ZXIuZmFkZU91dCA9IGZhZGVPdXQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHN0YXRlIG9mIHRoZSBwbGF5ZXJzIG9iamVjdC4gUmV0dXJucyBcInN0YXJ0ZWRcIiBpZiBhbnkgb2YgdGhlIHBsYXllcnMgYXJlIHBsYXlpbmcuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVycyNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBuYW1lIHN0YXRlXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXJzLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgcGxheWluZyA9IGZhbHNlO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHBsYXlpbmcgPSBwbGF5aW5nIHx8IHBsYXllci5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgcmV0dXJuIHBsYXlpbmcgPyBUb25lLlN0YXRlLlN0YXJ0ZWQgOiBUb25lLlN0YXRlLlN0b3BwZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVHJ1ZSBpZiB0aGUgYnVmZmVycyBvYmplY3QgaGFzIGEgYnVmZmVyIGJ5IHRoYXQgbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIG5hbWUgIFRoZSBrZXkgb3IgaW5kZXggb2YgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuXG5cdFx0ICogIEByZXR1cm4gIHtCb29sZWFufVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAobmFtZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXJzLmhhc093blByb3BlcnR5KG5hbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgYSBwbGF5ZXIgYnkgbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgbmFtZSAgVGhlIHBsYXllcnMgbmFtZSBhcyBkZWZpbmVkIGluXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25zdHJ1Y3RvciBvYmplY3Qgb3IgYGFkZGAgbWV0aG9kLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QbGF5ZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuaGFzKG5hbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXJzW25hbWVdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5QbGF5ZXJzOiBubyBwbGF5ZXIgbmFtZWQgJyArIG5hbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJdGVyYXRlIG92ZXIgYWxsIG9mIHRoZSBwbGF5ZXJzXG5cdFx0ICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG5cdFx0ICogQHJldHVybiB7VG9uZS5QbGF5ZXJzfSAgICAgICAgICAgIHRoaXNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5fZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIGZvciAodmFyIHBsYXllck5hbWUgaW4gdGhpcy5fcGxheWVycykge1xuXHQgICAgICAgICAgICBjYWxsYmFjayh0aGlzLl9wbGF5ZXJzW3BsYXllck5hbWVdLCBwbGF5ZXJOYW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgYWxsIHRoZSBidWZmZXJzIGFyZSBsb2FkZWQgb3Igbm90XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVycyNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb2FkZWRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllcnMucHJvdG90eXBlLCAnbG9hZGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaXNMb2FkZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgICAgIGlzTG9hZGVkID0gaXNMb2FkZWQgJiYgcGxheWVyLmxvYWRlZDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHJldHVybiBpc0xvYWRlZDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYSBwbGF5ZXIgYnkgbmFtZSBhbmQgdXJsIHRvIHRoZSBQbGF5ZXJzXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gICAgbmFtZSAgICAgIEEgdW5pcXVlIG5hbWUgdG8gZ2l2ZSB0aGUgcGxheWVyXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xUb25lLkJ1ZmZlcnxBdWRpb2J1ZmZlcn0gIHVybCAgRWl0aGVyIHRoZSB1cmwgb2YgdGhlIGJ1ZmVyLFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGEgYnVmZmVyIHdoaWNoIHdpbGwgYmUgYWRkZWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBnaXZlbiBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgdXJsIGlzIGxvYWRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgY2FsbGJhY2spIHtcblx0ICAgICAgICB0aGlzLl9wbGF5ZXJzW25hbWVdID0gbmV3IFRvbmUuUGxheWVyKHVybCwgY2FsbGJhY2spLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3BsYXllcnNbbmFtZV0uZmFkZUluID0gdGhpcy5fZmFkZUluO1xuXHQgICAgICAgIHRoaXMuX3BsYXllcnNbbmFtZV0uZmFkZU91dCA9IHRoaXMuX2ZhZGVPdXQ7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RvcCBhbGwgb2YgdGhlIHBsYXllcnMgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0ge1RpbWV9IHRpbWUgVGhlIHRpbWUgdG8gc3RvcCBhbGwgb2YgdGhlIHBsYXllcnMuXG5cdFx0ICogQHJldHVybiB7VG9uZS5QbGF5ZXJzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLnN0b3BBbGwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICBwbGF5ZXIuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgRGlzcG9zZSBhbmQgZGlzY29ubmVjdC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5QbGF5ZXJzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm91dHB1dCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAocGxheWVyKSB7XG5cdCAgICAgICAgICAgIHBsYXllci5kaXNwb3NlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcGxheWVycyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGxheWVycztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlVzZXJNZWRpYSB1c2VzIE1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEgdG8gb3BlbiB1cFxuXHRcdCAqICAgICAgICAgIGFuZCBleHRlcm5hbCBtaWNyb3Bob25lIG9yIGF1ZGlvIGlucHV0LiBDaGVja1xuXHRcdCAqICAgICAgICAgIFtNZWRpYURldmljZXMgQVBJIFN1cHBvcnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9NZWRpYURldmljZXMvZ2V0VXNlck1lZGlhKVxuXHRcdCAqICAgICAgICAgIHRvIHNlZSB3aGljaCBicm93c2VycyBhcmUgc3VwcG9ydGVkLiBBY2Nlc3MgdG8gYW4gZXh0ZXJuYWwgaW5wdXRcblx0XHQgKiAgICAgICAgICBpcyBsaW1pdGVkIHRvIHNlY3VyZSAoSFRUUFMpIGNvbm5lY3Rpb25zLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHM9fSB2b2x1bWUgVGhlIGxldmVsIG9mIHRoZSBpbnB1dFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbGlzdCB0aGUgaW5wdXRzIGFuZCBvcGVuIHRoZSB0aGlyZCBvbmVcblx0XHQgKiB2YXIgbW90dSA9IG5ldyBUb25lLlVzZXJNZWRpYSgpO1xuXHRcdCAqXG5cdFx0ICogLy9vcGVuaW5nIHRoZSBpbnB1dCBhc2tzIHRoZSB1c2VyIHRvIGFjdGl2YXRlIHRoZWlyIG1pY1xuXHRcdCAqIG1vdHUub3BlbigpLnRoZW4oZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vcHJvbWlzZSByZXNvbHZlcyB3aGVuIGlucHV0IGlzIGF2YWlsYWJsZVxuXHRcdCAqIH0pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd2b2x1bWUnXSwgVG9uZS5Vc2VyTWVkaWEpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIE1lZGlhU3RyZWFtTm9kZVxuXHRcdFx0ICogIEB0eXBlIHtNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0gPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtZWRpYSBzdHJlYW0gY3JlYXRlZCBieSBnZXRVc2VyTWVkaWEuXG5cdFx0XHQgKiAgQHR5cGUge0xvY2FsTWVkaWFTdHJlYW19XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0cmVhbSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9wZW4gZGV2aWNlXG5cdFx0XHQgKiAgQHR5cGUgIHtNZWRpYURldmljZUluZm99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RldmljZSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG91dHB1dCB2b2x1bWUgbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Wb2x1bWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKG9wdGlvbnMudm9sdW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCBpbiBkZWNpYmVscy5cblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiBpbnB1dC52b2x1bWUudmFsdWUgPSAtNjtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVXNlck1lZGlhLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVXNlck1lZGlhLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgT3BlbiB0aGUgbWVkaWEgc3RyZWFtLiBJZiBhIHN0cmluZyBpcyBwYXNzZWQgaW4sIGl0IGlzIGFzc3VtZWRcblx0XHQgKiAgdG8gYmUgdGhlIGxhYmVsIG9yIGlkIG9mIHRoZSBzdHJlYW0sIGlmIGEgbnVtYmVyIGlzIHBhc3NlZCBpbixcblx0XHQgKiAgaXQgaXMgdGhlIGlucHV0IG51bWJlciBvZiB0aGUgc3RyZWFtLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSBbbGFiZWxPcklkPVwiZGVmYXVsdFwiXSBUaGUgbGFiZWwgb3IgaWQgb2YgdGhlIGF1ZGlvIGlucHV0IG1lZGlhIGRldmljZS5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpdGggbm8gYXJndW1lbnQsIHRoZSBkZWZhdWx0IHN0cmVhbSBpcyBvcGVuZWQuXG5cdFx0ICogIEByZXR1cm4ge1Byb21pc2V9IFRoZSBwcm9taXNlIGlzIHJlc29sdmVkIHdoZW4gdGhlIHN0cmVhbSBpcyBvcGVuLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiAobGFiZWxPcklkKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuVXNlck1lZGlhLmVudW1lcmF0ZURldmljZXMoKS50aGVuKGZ1bmN0aW9uIChkZXZpY2VzKSB7XG5cdCAgICAgICAgICAgIHZhciBkZXZpY2U7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKGxhYmVsT3JJZCkpIHtcblx0ICAgICAgICAgICAgICAgIGRldmljZSA9IGRldmljZXNbbGFiZWxPcklkXTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGRldmljZSA9IGRldmljZXMuZmluZChmdW5jdGlvbiAoZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRldmljZS5sYWJlbCA9PT0gbGFiZWxPcklkIHx8IGRldmljZS5kZXZpY2VJZCA9PT0gbGFiZWxPcklkO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICAvL2RpZG4ndCBmaW5kIGEgbWF0Y2hpbmcgZGV2aWNlXG5cdCAgICAgICAgICAgICAgICBpZiAoIWRldmljZSAmJiBkZXZpY2VzLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICBkZXZpY2UgPSBkZXZpY2VzWzBdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZGV2aWNlICYmIFRvbmUuaXNEZWZpbmVkKGxhYmVsT3JJZCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuVXNlck1lZGlhOiBubyBtYXRjaGluZyBkZXZpY2U6ICcgKyBsYWJlbE9ySWQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2RldmljZSA9IGRldmljZTtcblx0ICAgICAgICAgICAgLy9kbyBnZXRVc2VyTWVkaWFcblx0ICAgICAgICAgICAgdmFyIGNvbnN0cmFpbnRzID0ge1xuXHQgICAgICAgICAgICAgICAgYXVkaW86IHtcblx0ICAgICAgICAgICAgICAgICAgICAnZWNob0NhbmNlbGxhdGlvbic6IGZhbHNlLFxuXHQgICAgICAgICAgICAgICAgICAgICdzYW1wbGVSYXRlJzogdGhpcy5jb250ZXh0LnNhbXBsZVJhdGVcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgaWYgKGRldmljZSkge1xuXHQgICAgICAgICAgICAgICAgY29uc3RyYWludHMuYXVkaW8uZGV2aWNlSWQgPSBkZXZpY2UuZGV2aWNlSWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKGNvbnN0cmFpbnRzKS50aGVuKGZ1bmN0aW9uIChzdHJlYW0pIHtcblx0ICAgICAgICAgICAgICAgIC8vc3RhcnQgYSBuZXcgc291cmNlIG9ubHkgaWYgdGhlIHByZXZpb3VzIG9uZSBpcyBjbG9zZWRcblx0ICAgICAgICAgICAgICAgIGlmICghdGhpcy5fc3RyZWFtKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuXHQgICAgICAgICAgICAgICAgICAgIC8vV3JhcCBhIE1lZGlhU3RyZWFtU291cmNlTm9kZSBhcm91bmQgdGhlIGxpdmUgaW5wdXQgc3RyZWFtLlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX21lZGlhU3RyZWFtID0gdGhpcy5jb250ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKHN0cmVhbSk7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9Db25uZWN0IHRoZSBNZWRpYVN0cmVhbVNvdXJjZU5vZGUgdG8gYSBnYXRlIGdhaW4gbm9kZVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX21lZGlhU3RyZWFtLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xvc2UgdGhlIG1lZGlhIHN0cmVhbVxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlVzZXJNZWRpYX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdHJlYW0pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RyZWFtLmdldEF1ZGlvVHJhY2tzKCkuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcblx0ICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0cmVhbSA9IG51bGw7XG5cdCAgICAgICAgICAgIC8vcmVtb3ZlIHRoZSBvbGQgbWVkaWEgc3RyZWFtXG5cdCAgICAgICAgICAgIHRoaXMuX21lZGlhU3RyZWFtLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9kZXZpY2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIGEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aXRoIHRoZSBsaXN0IG9mIGF1ZGlvIGlucHV0IGRldmljZXMgYXZhaWxhYmxlLlxuXHRcdCAqICBAcmV0dXJuIHtQcm9taXNlfSBUaGUgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdpdGggdGhlIGRldmljZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVXNlck1lZGlhLmVudW1lcmF0ZURldmljZXMoKS50aGVuKGZ1bmN0aW9uKGRldmljZXMpe1xuXHRcdCAqIFx0Y29uc29sZS5sb2coZGV2aWNlcylcblx0XHQgKiB9KVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEuZW51bWVyYXRlRGV2aWNlcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzKCkudGhlbihmdW5jdGlvbiAoZGV2aWNlcykge1xuXHQgICAgICAgICAgICByZXR1cm4gZGV2aWNlcy5maWx0ZXIoZnVuY3Rpb24gKGRldmljZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGRldmljZS5raW5kID09PSAnYXVkaW9pbnB1dCc7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBcInN0YXJ0ZWRcIiB3aGVuIHRoZSBtaWNyb3Bob25lIGlzIG9wZW5cblx0XHQgKiAgYW5kIFwic3RvcHBlZFwiIHdoZW4gdGhlIG1pYyBpcyBjbG9zZWQuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RyZWFtICYmIHRoaXMuX3N0cmVhbS5hY3RpdmUgPyBUb25lLlN0YXRlLlN0YXJ0ZWQgOiBUb25lLlN0YXRlLlN0b3BwZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBcdFJldHVybnMgYW4gaWRlbnRpZmllciBmb3IgdGhlIHJlcHJlc2VudGVkIGRldmljZSB0aGF0IGlzXG5cdFx0ICogXHRwZXJzaXN0ZWQgYWNyb3NzIHNlc3Npb25zLiBJdCBpcyB1bi1ndWVzc2FibGUgYnkgb3RoZXIgYXBwbGljYXRpb25zIGFuZFxuXHRcdCAqIFx0dW5pcXVlIHRvIHRoZSBvcmlnaW4gb2YgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24uIEl0IGlzIHJlc2V0IHdoZW4gdGhlXG5cdFx0ICogXHR1c2VyIGNsZWFycyBjb29raWVzIChmb3IgUHJpdmF0ZSBCcm93c2luZywgYSBkaWZmZXJlbnQgaWRlbnRpZmllciBpc1xuXHRcdCAqIFx0dXNlZCB0aGF0IGlzIG5vdCBwZXJzaXN0ZWQgYWNyb3NzIHNlc3Npb25zKS4gUmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGVcblx0XHQgKiBcdGRldmljZSBpcyBub3Qgb3Blbi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlVzZXJNZWRpYSNcblx0XHQgKiAgQG5hbWUgZGV2aWNlSWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUsICdkZXZpY2VJZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RldmljZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RldmljZS5kZXZpY2VJZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRSZXR1cm5zIGEgZ3JvdXAgaWRlbnRpZmllci4gVHdvIGRldmljZXMgaGF2ZSB0aGVcblx0XHQgKiBcdHNhbWUgZ3JvdXAgaWRlbnRpZmllciBpZiB0aGV5IGJlbG9uZyB0byB0aGUgc2FtZSBwaHlzaWNhbCBkZXZpY2UuXG5cdFx0ICogXHRSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHRoZSBkZXZpY2UgaXMgbm90IG9wZW4uXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogIEBuYW1lIGdyb3VwSWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUsICdncm91cElkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGV2aWNlLmdyb3VwSWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0UmV0dXJucyBhIGxhYmVsIGRlc2NyaWJpbmcgdGhpcyBkZXZpY2UgKGZvciBleGFtcGxlIFwiQnVpbHQtaW4gTWljcm9waG9uZVwiKS5cblx0XHQgKiBcdFJldHVybnMgdW5kZWZpbmVkIHdoZW4gdGhlIGRldmljZSBpcyBub3Qgb3BlbiBvciBsYWJlbCBpcyBub3QgYXZhaWxhYmxlXG5cdFx0ICogXHRiZWNhdXNlIG9mIHBlcm1pc3Npb25zLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqICBAbmFtZSBncm91cElkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLCAnbGFiZWwnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9kZXZpY2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXZpY2UubGFiZWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUgdGhlIG91dHB1dC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9tdXRlIHRoZSBvdXRwdXRcblx0XHQgKiB1c2VyTWVkaWEubXV0ZSA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZvbHVtZS5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cC5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlVzZXJNZWRpYX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNsb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIElmIGdldFVzZXJNZWRpYSBpcyBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIuXG5cdFx0ICogIEB0eXBlICB7Qm9vbGVhbn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqICBAbmFtZSBzdXBwb3J0ZWRcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYSwgJ3N1cHBvcnRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuaXNEZWZpbmVkKG5hdmlnYXRvci5tZWRpYURldmljZXMpICYmIFRvbmUuaXNGdW5jdGlvbihuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gVG9uZS5Vc2VyTWVkaWE7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5NaWRpIGlzIGEgcHJpbWl0aXZlIHR5cGUgZm9yIGVuY29kaW5nIFRpbWUgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgVG9uZS5NaWRpIGNhbiBiZSBjb25zdHJ1Y3RlZCB3aXRoIG9yIHdpdGhvdXQgdGhlIGBuZXdgIGtleXdvcmQuIFRvbmUuTWlkaSBjYW4gYmUgcGFzc2VkXG5cdFx0ICogICAgICAgICBpbnRvIHRoZSBwYXJhbWV0ZXIgb2YgYW55IG1ldGhvZCB3aGljaCB0YWtlcyB0aW1lIGFzIGFuIGFyZ3VtZW50LlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRnJlcXVlbmN5fVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFRoZSB1bml0cyBvZiB0aGUgdmFsdWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHQgPSBUb25lLk1pZGkoXCI0blwiKTsvL2EgcXVhcnRlciBub3RlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5NaWRpKSB7XG5cdCAgICAgICAgICAgIFRvbmUuRnJlcXVlbmN5LmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLk1pZGkodmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWlkaSwgVG9uZS5GcmVxdWVuY3kpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHVuaXRzIGlmIG5vbmUgYXJlIGdpdmVuLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS5fZGVmYXVsdFVuaXRzID0gJ21pZGknO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgZnJlcXVlbmN5IGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLl9mcmVxdWVuY3lUb1VuaXRzID0gZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbShUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2ZyZXF1ZW5jeVRvVW5pdHMuY2FsbCh0aGlzLCBmcmVxKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgdGljayBpbiB0aGUgY3VycmVudCB0aW1lIHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7VGlja3N9IHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLl90aWNrc1RvVW5pdHMgPSBmdW5jdGlvbiAodGlja3MpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbShUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX3RpY2tzVG9Vbml0cy5jYWxsKHRoaXMsIHRpY2tzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGJlYXRzIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBiZWF0c1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzID0gZnVuY3Rpb24gKGJlYXRzKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LmZ0b20oVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9iZWF0c1RvVW5pdHMuY2FsbCh0aGlzLCBiZWF0cykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHNlY29uZCBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1NlY29uZHN9IHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzID0gZnVuY3Rpb24gKHNlY29uZHMpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbShUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzLmNhbGwodGhpcywgc2Vjb25kcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgYXMgYSBNSURJIG5vdGVcblx0XHQgKiAgQHJldHVybiAge01JREl9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5NaWRpKDYwKS50b01pZGkoKTsgLy82MFxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS50b01pZGkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgYXMgYSBNSURJIG5vdGVcblx0XHQgKiAgQHJldHVybiAge01JREl9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5NaWRpKDYwKS50b01pZGkoKTsgLy82MFxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS50b0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kubXRvZih0aGlzLnRvTWlkaSgpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJhbnNwb3NlcyB0aGUgZnJlcXVlbmN5IGJ5IHRoZSBnaXZlbiBudW1iZXIgb2Ygc2VtaXRvbmVzLlxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbH0gIGludGVydmFsXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkZyZXF1ZW5jeX0gQSBuZXcgdHJhbnNwb3NlZCBmcmVxdWVuY3lcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeShcIkE0XCIpLnRyYW5zcG9zZSgzKTsgLy9cIkM1XCJcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUudHJhbnNwb3NlID0gZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMudG9NaWRpKCkgKyBpbnRlcnZhbCk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkaTtcblx0fSk7XG5cdFxuXHRyZXR1cm4gVG9uZTtcbn0pKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdG9uZS9idWlsZC9Ub25lLmpzXG4vLyBtb2R1bGUgaWQgPSAyNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHRydWU7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19saWJyYXJ5LmpzXG4vLyBtb2R1bGUgaWQgPSAyNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1waWUuanNcbi8vIG1vZHVsZSBpZCA9IDI2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkZWYgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mXG4gICwgaGFzID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwgdGFnLCBzdGF0KXtcbiAgaWYoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSlkZWYoaXQsIFRBRywge2NvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZ30pO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzXG4vLyBtb2R1bGUgaWQgPSAyN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1vYmplY3QuanNcbi8vIG1vZHVsZSBpZCA9IDI4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBpZCA9IDBcbiAgLCBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdWlkLmpzXG4vLyBtb2R1bGUgaWQgPSAyOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJyZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xudmFyIGdsb2JhbCAgICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGhpZGUgICAgICAgICAgPSByZXF1aXJlKCcuL19oaWRlJylcbiAgLCBJdGVyYXRvcnMgICAgID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJylcbiAgLCBUT19TVFJJTkdfVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbmZvcih2YXIgY29sbGVjdGlvbnMgPSBbJ05vZGVMaXN0JywgJ0RPTVRva2VuTGlzdCcsICdNZWRpYUxpc3QnLCAnU3R5bGVTaGVldExpc3QnLCAnQ1NTUnVsZUxpc3QnXSwgaSA9IDA7IGkgPCA1OyBpKyspe1xuICB2YXIgTkFNRSAgICAgICA9IGNvbGxlY3Rpb25zW2ldXG4gICAgLCBDb2xsZWN0aW9uID0gZ2xvYmFsW05BTUVdXG4gICAgLCBwcm90byAgICAgID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgaWYocHJvdG8gJiYgIXByb3RvW1RPX1NUUklOR19UQUddKWhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICBJdGVyYXRvcnNbTkFNRV0gPSBJdGVyYXRvcnMuQXJyYXk7XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanNcbi8vIG1vZHVsZSBpZCA9IDMwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCBUb25lIGZyb20gJ3RvbmUnXG5pbXBvcnQgU3RhcnRBdWRpb0NvbnRleHQgZnJvbSAnLi9zdGFydEF1ZGlvQ29udGV4dCdcblxuZXhwb3J0IGNvbnN0IGlzSXBob25lID0gKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZS9pKSkgfHwgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQb2QvaSkpXG5leHBvcnQgY29uc3QgaXNJcGFkID0gKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQYWQvaSkpXG5leHBvcnQgY29uc3QgaXNBbmRyb2lkID0gKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpXG5leHBvcnQgY29uc3QgaXNNb2JpbGUgPSBpc0lwaG9uZSB8fCBpc0lwYWQgfHwgaXNBbmRyb2lkXG5leHBvcnQgY29uc3QgaXNEZXNrdG9wID0gISBpc01vYmlsZVxuXG5kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoaXNNb2JpbGUgPyAnbW9iaWxlJyA6ICdkZXNrdG9wJylcblxuZXhwb3J0IGNvbnN0IGJyb3dzZXIgPSB7IGlzSXBob25lLCBpc0lwYWQsIGlzTW9iaWxlLCBpc0Rlc2t0b3AgfVxuXG5leHBvcnQgZnVuY3Rpb24gY2hvaWNlIChhKXsgcmV0dXJuIGFbIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGEubGVuZ3RoKSBdIH1cbmV4cG9ydCBmdW5jdGlvbiBtb2QobixtKXsgcmV0dXJuIG4tKG0gKiBNYXRoLmZsb29yKG4vbSkpIH1cbmV4cG9ydCBmdW5jdGlvbiBub3JtKG4sIG1pbiwgbWF4KXsgcmV0dXJuIChuIC0gbWluKSAvIChtYXggLSBtaW4pIH1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3RBdWRpb0NvbnRleHQgKGZuKSB7XG5cdGlmIChpc01vYmlsZSkge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBidXR0b24uaW5uZXJIVE1MID0gJ1RhcCB0byBzdGFydCAtIHBsZWFzZSB1bm11dGUgeW91ciBwaG9uZSdcbiAgICBPYmplY3QuYXNzaWduKGNvbnRhaW5lci5zdHlsZSwge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICB6SW5kZXg6ICcxMDAwMCcsXG4gICAgICB0b3A6ICcwcHgnLFxuICAgICAgbGVmdDogJzBweCcsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuOCknLFxuICAgIH0pXG5cdFx0T2JqZWN0LmFzc2lnbihidXR0b24uc3R5bGUsIHtcblx0XHQgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuXHRcdCAgbGVmdDogJzUwJScsXG5cdFx0ICB0b3A6ICc1MCUnLFxuXHRcdFx0cGFkZGluZzogJzIwcHgnLFxuXHRcdCAgYmFja2dyb3VuZENvbG9yOiAnIzdGMzNFRCcsXG5cdFx0ICBjb2xvcjogJ3doaXRlJyxcblx0XHQgIGZvbnRGYW1pbHk6ICdtb25vc3BhY2UnLFxuXHRcdCAgYm9yZGVyUmFkaXVzOiAnM3B4Jyxcblx0XHQgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZTNEKC01MCUsLTUwJSwwKScsXG5cdFx0ICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuXHRcdFx0bGluZUhlaWdodDogJzEuNScsXG4gICAgfSlcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoYnV0dG9uKVxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKVxuICAgIFN0YXJ0QXVkaW9Db250ZXh0LnNldENvbnRleHQoVG9uZS5jb250ZXh0KVxuICAgIFN0YXJ0QXVkaW9Db250ZXh0Lm9uKGJ1dHRvbilcbiAgICBTdGFydEF1ZGlvQ29udGV4dC5vblN0YXJ0ZWQoXyA9PiB7XG4gICAgICBjb250YWluZXIucmVtb3ZlKClcblx0XHRcdGZuKClcbiAgXHR9KVxuXHR9IGVsc2Uge1xuXHRcdGZuKClcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGF0YVVSSXRvQmxvYihkYXRhVVJJKSB7XG4gIC8vIGNvbnZlcnQgYmFzZTY0IHRvIHJhdyBiaW5hcnkgZGF0YSBoZWxkIGluIGEgc3RyaW5nXG4gIC8vIGRvZXNuJ3QgaGFuZGxlIFVSTEVuY29kZWQgRGF0YVVSSXMgLSBzZWUgU08gYW5zd2VyICM2ODUwMjc2IGZvciBjb2RlIHRoYXQgZG9lcyB0aGlzXG4gIHZhciBieXRlU3RyaW5nID0gYXRvYihkYXRhVVJJLnNwbGl0KCcsJylbMV0pO1xuXG4gIC8vIHNlcGFyYXRlIG91dCB0aGUgbWltZSBjb21wb25lbnRcbiAgdmFyIG1pbWVTdHJpbmcgPSBkYXRhVVJJLnNwbGl0KCcsJylbMF0uc3BsaXQoJzonKVsxXS5zcGxpdCgnOycpWzBdXG5cbiAgLy8gd3JpdGUgdGhlIGJ5dGVzIG9mIHRoZSBzdHJpbmcgdG8gYW4gQXJyYXlCdWZmZXJcbiAgdmFyIGFiID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVTdHJpbmcubGVuZ3RoKTtcblxuICAvLyBjcmVhdGUgYSB2aWV3IGludG8gdGhlIGJ1ZmZlclxuICB2YXIgaWEgPSBuZXcgVWludDhBcnJheShhYik7XG5cbiAgLy8gc2V0IHRoZSBieXRlcyBvZiB0aGUgYnVmZmVyIHRvIHRoZSBjb3JyZWN0IHZhbHVlc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlhW2ldID0gYnl0ZVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICB9XG5cbiAgLy8gd3JpdGUgdGhlIEFycmF5QnVmZmVyIHRvIGEgYmxvYiwgYW5kIHlvdSdyZSBkb25lXG4gIHZhciBibG9iID0gbmV3IEJsb2IoW2FiXSwge3R5cGU6IG1pbWVTdHJpbmd9KTtcbiAgcmV0dXJuIGJsb2I7XG5cbn1cbmV4cG9ydCBmdW5jdGlvbiBmdG9tKGYpIHtcbiAgLy8gcmV0dXJuIChNYXRoLmxvZyhmKSAtIE1hdGgubG9nKDI2MS42MjYpKSAvIE1hdGgubG9nKDIpICsgNC4wXG4gIHJldHVybiA2OSArIDEyICogTWF0aC5sb2cyKGYgLyA0NDApXG59XG5leHBvcnQgZnVuY3Rpb24gbXRvZihtKSB7XG4gIHJldHVybiA0NDAgKiBNYXRoLnBvdygyLCAobSAtIDY5KSAvIDEyKVxufVxuZXhwb3J0IGZ1bmN0aW9uIHRhcCAoZm4pIHtcbiAgcmV0dXJuIChlKSA9PiB7XG4gICAgaWYgKGJyb3dzZXIuaXNNb2JpbGUpIGZuKClcbiAgICBlbHNlIGlmIChlLnByZXNzKSBmbigpXG4gIH1cbn1cblxuLyogZ2V0IG1pbmltdW0gYW5kIG1heGltdW0gdmFyaWFuY2UgZnJvbSByb3ctdG8tcm93ICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRfZGlmZl9ib3VuZHMocm93cyl7XG4gIGNvbnN0IGRpZmZzID0gcm93cy5tYXAocm93ID0+IHtcbiAgICBjb25zdCByb3dfbWluID0gTWF0aC5taW4uYXBwbHkoTWF0aCwgcm93KVxuICAgIGNvbnN0IHJvd19tYXggPSBNYXRoLm1heC5hcHBseShNYXRoLCByb3cpXG4gICAgcmV0dXJuIHJvd19tYXggLSByb3dfbWluXG4gIH0pXG4gIGNvbnN0IG1pbiA9IE1hdGgubWluLmFwcGx5KE1hdGgsIGRpZmZzKVxuICBjb25zdCBtYXggPSBNYXRoLm1heC5hcHBseShNYXRoLCBkaWZmcylcbiAgcmV0dXJuIHsgbWluLCBtYXggfVxufVxuXG4vKiBnZXQgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMgZnJvbSBhIGRhdGFzZXQgKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldF9ib3VuZHMoZGF0YXNldCl7XG4gIGxldCByb3dzID0gZGF0YXNldC5saW5lc1xuICAvLyByb3dzLmZvckVhY2gocm93ID0+IHJvdy5zaGlmdCgpKVxuICByb3dzID0gcm93cy5tYXAoYSA9PiBhLm1hcChuID0+IHBhcnNlRmxvYXQobikpKVxuICBjb25zdCBtYXggPSByb3dzLnJlZHVjZSgoYSxiKSA9PiB7XG4gICAgcmV0dXJuIGIucmVkdWNlKCh6LGJiKSA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoeiwgYmIpXG4gICAgfSwgYSlcbiAgfSwgLUluZmluaXR5KVxuICBjb25zdCBtaW4gPSByb3dzLnJlZHVjZSgoYSxiKSA9PiB7XG4gICAgcmV0dXJuIGIucmVkdWNlKCh6LGJiKSA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5taW4oeiwgYmIpXG4gICAgfSwgYSlcbiAgfSwgSW5maW5pdHkpXG4gIHJldHVybiB7IHJvd3MsIG1heCwgbWluIH1cbn1cblxuLyogdHJhbnNwb3NlIGEgMkQgYXJyYXkgKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zcG9zZShhKSB7XG4gIGxldCBpX2xlbiA9IGFbMF0ubGVuZ3RoXG4gIGxldCBqX2xlbiA9IGEubGVuZ3RoXG4gIGxldCBUID0gbmV3IEFycmF5KGlfbGVuKVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlfbGVuOyBpKyspIHtcbiAgICBUW2ldID0gbmV3IEFycmF5KGpfbGVuKVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgal9sZW47IGorKykge1xuICAgICAgVFtpXVtqXSA9IGFbal1baV1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIFRcbn1cblxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2xpYi91dGlsLmpzIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJyk7XG52YXIgQnVmZmVyID0gYnVmZmVyLkJ1ZmZlcjtcbnZhciBTbG93QnVmZmVyID0gYnVmZmVyLlNsb3dCdWZmZXI7XG52YXIgTUFYX0xFTiA9IGJ1ZmZlci5rTWF4TGVuZ3RoIHx8IDIxNDc0ODM2NDc7XG5leHBvcnRzLmFsbG9jID0gZnVuY3Rpb24gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBCdWZmZXIuYWxsb2MgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKHNpemUsIGZpbGwsIGVuY29kaW5nKTtcbiAgfVxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VuY29kaW5nIG11c3Qgbm90IGJlIG51bWJlcicpO1xuICB9XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzaXplIG11c3QgYmUgYSBudW1iZXInKTtcbiAgfVxuICBpZiAoc2l6ZSA+IE1BWF9MRU4pIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc2l6ZSBpcyB0b28gbGFyZ2UnKTtcbiAgfVxuICB2YXIgZW5jID0gZW5jb2Rpbmc7XG4gIHZhciBfZmlsbCA9IGZpbGw7XG4gIGlmIChfZmlsbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jID0gdW5kZWZpbmVkO1xuICAgIF9maWxsID0gMDtcbiAgfVxuICB2YXIgYnVmID0gbmV3IEJ1ZmZlcihzaXplKTtcbiAgaWYgKHR5cGVvZiBfZmlsbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgZmlsbEJ1ZiA9IG5ldyBCdWZmZXIoX2ZpbGwsIGVuYyk7XG4gICAgdmFyIGZsZW4gPSBmaWxsQnVmLmxlbmd0aDtcbiAgICB2YXIgaSA9IC0xO1xuICAgIHdoaWxlICgrK2kgPCBzaXplKSB7XG4gICAgICBidWZbaV0gPSBmaWxsQnVmW2kgJSBmbGVuXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYnVmLmZpbGwoX2ZpbGwpO1xuICB9XG4gIHJldHVybiBidWY7XG59XG5leHBvcnRzLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gYWxsb2NVbnNhZmUoc2l6ZSkge1xuICBpZiAodHlwZW9mIEJ1ZmZlci5hbGxvY1Vuc2FmZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2NVbnNhZmUoc2l6ZSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpemUgbXVzdCBiZSBhIG51bWJlcicpO1xuICB9XG4gIGlmIChzaXplID4gTUFYX0xFTikge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdzaXplIGlzIHRvbyBsYXJnZScpO1xuICB9XG4gIHJldHVybiBuZXcgQnVmZmVyKHNpemUpO1xufVxuZXhwb3J0cy5mcm9tID0gZnVuY3Rpb24gZnJvbSh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgQnVmZmVyLmZyb20gPT09ICdmdW5jdGlvbicgJiYgKCFnbG9iYWwuVWludDhBcnJheSB8fCBVaW50OEFycmF5LmZyb20gIT09IEJ1ZmZlci5mcm9tKSkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpO1xuICB9XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICB2YXIgb2Zmc2V0ID0gZW5jb2RpbmdPck9mZnNldDtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIG5ldyBCdWZmZXIodmFsdWUpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG9mZnNldCA9IDA7XG4gICAgfVxuICAgIHZhciBsZW4gPSBsZW5ndGg7XG4gICAgaWYgKHR5cGVvZiBsZW4gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsZW4gPSB2YWx1ZS5ieXRlTGVuZ3RoIC0gb2Zmc2V0O1xuICAgIH1cbiAgICBpZiAob2Zmc2V0ID49IHZhbHVlLmJ5dGVMZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdvZmZzZXRcXCcgaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cbiAgICBpZiAobGVuID4gdmFsdWUuYnl0ZUxlbmd0aCAtIG9mZnNldCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ2xlbmd0aFxcJyBpcyBvdXQgb2YgYm91bmRzJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQnVmZmVyKHZhbHVlLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgbGVuKSk7XG4gIH1cbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICB2YXIgb3V0ID0gbmV3IEJ1ZmZlcih2YWx1ZS5sZW5ndGgpO1xuICAgIHZhbHVlLmNvcHkob3V0LCAwLCAwLCB2YWx1ZS5sZW5ndGgpO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpIHx8ICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB8fCAnbGVuZ3RoJyBpbiB2YWx1ZSkge1xuICAgICAgcmV0dXJuIG5ldyBCdWZmZXIodmFsdWUpO1xuICAgIH1cbiAgICBpZiAodmFsdWUudHlwZSA9PT0gJ0J1ZmZlcicgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZS5kYXRhKSkge1xuICAgICAgcmV0dXJuIG5ldyBCdWZmZXIodmFsdWUuZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCAnICsgJ0FycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuJyk7XG59XG5leHBvcnRzLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIGFsbG9jVW5zYWZlU2xvdyhzaXplKSB7XG4gIGlmICh0eXBlb2YgQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2NVbnNhZmVTbG93KHNpemUpO1xuICB9XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzaXplIG11c3QgYmUgYSBudW1iZXInKTtcbiAgfVxuICBpZiAoc2l6ZSA+PSBNQVhfTEVOKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NpemUgaXMgdG9vIGxhcmdlJyk7XG4gIH1cbiAgcmV0dXJuIG5ldyBTbG93QnVmZmVyKHNpemUpO1xufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2J1ZmZlci1zaGltcy9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMzJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIGlmKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKXRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzXG4vLyBtb2R1bGUgaWQgPSAzM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpXG4gICwgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJylcbiAgLy8gRVMzIHdyb25nIGhlcmVcbiAgLCBBUkcgPSBjb2YoZnVuY3Rpb24oKXsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbihpdCwga2V5KXtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY2xhc3NvZi5qc1xuLy8gbW9kdWxlIGlkID0gMzRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICBpZihpdCA9PSB1bmRlZmluZWQpdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVmaW5lZC5qc1xuLy8gbW9kdWxlIGlkID0gMzVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0JylcbiAgLCBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50XG4gIC8vIGluIG9sZCBJRSB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0J1xuICAsIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qc1xuLy8gbW9kdWxlIGlkID0gMzZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzXG4vLyBtb2R1bGUgaWQgPSAzN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanNcbi8vIG1vZHVsZSBpZCA9IDM4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpXG4gICwgdWlkICAgID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLWtleS5qc1xuLy8gbW9kdWxlIGlkID0gMzlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXydcbiAgLCBzdG9yZSAgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0ge30pO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC5qc1xuLy8gbW9kdWxlIGlkID0gNDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCAgPSBNYXRoLmNlaWxcbiAgLCBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW50ZWdlci5qc1xuLy8gbW9kdWxlIGlkID0gNDFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gNy4xLjE1IFRvTGVuZ3RoXG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpXG4gICwgbWluICAgICAgID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1sZW5ndGguanNcbi8vIG1vZHVsZSBpZCA9IDQyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQsIFMpe1xuICBpZighaXNPYmplY3QoaXQpKXJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpcmV0dXJuIHZhbDtcbiAgaWYodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSlyZXR1cm4gdmFsO1xuICBpZighUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSlyZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzXG4vLyBtb2R1bGUgaWQgPSA0M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZ2xvYmFsICAgICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGNvcmUgICAgICAgICAgID0gcmVxdWlyZSgnLi9fY29yZScpXG4gICwgTElCUkFSWSAgICAgICAgPSByZXF1aXJlKCcuL19saWJyYXJ5JylcbiAgLCB3a3NFeHQgICAgICAgICA9IHJlcXVpcmUoJy4vX3drcy1leHQnKVxuICAsIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obmFtZSl7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4gJFN5bWJvbCkpZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwge3ZhbHVlOiB3a3NFeHQuZihuYW1lKX0pO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy1kZWZpbmUuanNcbi8vIG1vZHVsZSBpZCA9IDQ0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX3drcycpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLWV4dC5qc1xuLy8gbW9kdWxlIGlkID0gNDVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGNsYXNzb2YgICA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKVxuICAsIElURVJBVE9SICA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpXG4gICwgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoaXQgIT0gdW5kZWZpbmVkKXJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qc1xuLy8gbW9kdWxlIGlkID0gNDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgdGhpcy5fZXZlbnRzID0gdGhpcy5fZXZlbnRzIHx8IHt9O1xuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufVxubW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG5FdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbihuKSB7XG4gIGlmICghaXNOdW1iZXIobikgfHwgbiA8IDAgfHwgaXNOYU4obikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCduIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtcbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciBlciwgaGFuZGxlciwgbGVuLCBhcmdzLCBpLCBsaXN0ZW5lcnM7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpXG4gICAgdGhpcy5fZXZlbnRzID0ge307XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAodHlwZSA9PT0gJ2Vycm9yJykge1xuICAgIGlmICghdGhpcy5fZXZlbnRzLmVycm9yIHx8XG4gICAgICAgIChpc09iamVjdCh0aGlzLl9ldmVudHMuZXJyb3IpICYmICF0aGlzLl9ldmVudHMuZXJyb3IubGVuZ3RoKSkge1xuICAgICAgZXIgPSBhcmd1bWVudHNbMV07XG4gICAgICBpZiAoZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEF0IGxlYXN0IGdpdmUgc29tZSBraW5kIG9mIGNvbnRleHQgdG8gdGhlIHVzZXJcbiAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5jYXVnaHQsIHVuc3BlY2lmaWVkIFwiZXJyb3JcIiBldmVudC4gKCcgKyBlciArICcpJyk7XG4gICAgICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVyID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChpc1VuZGVmaW5lZChoYW5kbGVyKSlcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKGlzRnVuY3Rpb24oaGFuZGxlcikpIHtcbiAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIC8vIGZhc3QgY2FzZXNcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMsIGFyZ3VtZW50c1sxXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRzWzFdLCBhcmd1bWVudHNbMl0pO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIHNsb3dlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIGhhbmRsZXIuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KGhhbmRsZXIpKSB7XG4gICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgbGlzdGVuZXJzID0gaGFuZGxlci5zbGljZSgpO1xuICAgIGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgICAgbGlzdGVuZXJzW2ldLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIG07XG5cbiAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKVxuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXG4gIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gIC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJcIi5cbiAgaWYgKHRoaXMuX2V2ZW50cy5uZXdMaXN0ZW5lcilcbiAgICB0aGlzLmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgaXNGdW5jdGlvbihsaXN0ZW5lci5saXN0ZW5lcikgP1xuICAgICAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1t0eXBlXSlcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgZWxzZSBpZiAoaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5cGVdKSlcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgdGhpcy5fZXZlbnRzW3R5cGVdLnB1c2gobGlzdGVuZXIpO1xuICBlbHNlXG4gICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgdGhpcy5fZXZlbnRzW3R5cGVdID0gW3RoaXMuX2V2ZW50c1t0eXBlXSwgbGlzdGVuZXJdO1xuXG4gIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gIGlmIChpc09iamVjdCh0aGlzLl9ldmVudHNbdHlwZV0pICYmICF0aGlzLl9ldmVudHNbdHlwZV0ud2FybmVkKSB7XG4gICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9tYXhMaXN0ZW5lcnMpKSB7XG4gICAgICBtID0gdGhpcy5fbWF4TGlzdGVuZXJzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gICAgfVxuXG4gICAgaWYgKG0gJiYgbSA+IDAgJiYgdGhpcy5fZXZlbnRzW3R5cGVdLmxlbmd0aCA+IG0pIHtcbiAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQgPSB0cnVlO1xuICAgICAgY29uc29sZS5lcnJvcignKG5vZGUpIHdhcm5pbmc6IHBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgJyArXG4gICAgICAgICAgICAgICAgICAgICdsZWFrIGRldGVjdGVkLiAlZCBsaXN0ZW5lcnMgYWRkZWQuICcgK1xuICAgICAgICAgICAgICAgICAgICAnVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQuJyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzW3R5cGVdLmxlbmd0aCk7XG4gICAgICBpZiAodHlwZW9mIGNvbnNvbGUudHJhY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gbm90IHN1cHBvcnRlZCBpbiBJRSAxMFxuICAgICAgICBjb25zb2xlLnRyYWNlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXG4gIHZhciBmaXJlZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGcoKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBnKTtcblxuICAgIGlmICghZmlyZWQpIHtcbiAgICAgIGZpcmVkID0gdHJ1ZTtcbiAgICAgIGxpc3RlbmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9XG5cbiAgZy5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICB0aGlzLm9uKHR5cGUsIGcpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWRcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgbGlzdCwgcG9zaXRpb24sIGxlbmd0aCwgaTtcblxuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1t0eXBlXSlcbiAgICByZXR1cm4gdGhpcztcblxuICBsaXN0ID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuICBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgcG9zaXRpb24gPSAtMTtcblxuICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHxcbiAgICAgIChpc0Z1bmN0aW9uKGxpc3QubGlzdGVuZXIpICYmIGxpc3QubGlzdGVuZXIgPT09IGxpc3RlbmVyKSkge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG4gICAgaWYgKHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0ZW5lcik7XG5cbiAgfSBlbHNlIGlmIChpc09iamVjdChsaXN0KSkge1xuICAgIGZvciAoaSA9IGxlbmd0aDsgaS0tID4gMDspIHtcbiAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fFxuICAgICAgICAgIChsaXN0W2ldLmxpc3RlbmVyICYmIGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSkge1xuICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICByZXR1cm4gdGhpcztcblxuICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgbGlzdC5sZW5ndGggPSAwO1xuICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGlzdC5zcGxpY2UocG9zaXRpb24sIDEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdGVuZXIpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdmFyIGtleSwgbGlzdGVuZXJzO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgaWYgKCF0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuICAgIGVsc2UgaWYgKHRoaXMuX2V2ZW50c1t0eXBlXSlcbiAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICBmb3IgKGtleSBpbiB0aGlzLl9ldmVudHMpIHtcbiAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICB9XG4gICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgdGhpcy5fZXZlbnRzID0ge307XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgaWYgKGlzRnVuY3Rpb24obGlzdGVuZXJzKSkge1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzKTtcbiAgfSBlbHNlIGlmIChsaXN0ZW5lcnMpIHtcbiAgICAvLyBMSUZPIG9yZGVyXG4gICAgd2hpbGUgKGxpc3RlbmVycy5sZW5ndGgpXG4gICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyc1tsaXN0ZW5lcnMubGVuZ3RoIC0gMV0pO1xuICB9XG4gIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdmFyIHJldDtcbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1t0eXBlXSlcbiAgICByZXQgPSBbXTtcbiAgZWxzZSBpZiAoaXNGdW5jdGlvbih0aGlzLl9ldmVudHNbdHlwZV0pKVxuICAgIHJldCA9IFt0aGlzLl9ldmVudHNbdHlwZV1dO1xuICBlbHNlXG4gICAgcmV0ID0gdGhpcy5fZXZlbnRzW3R5cGVdLnNsaWNlKCk7XG4gIHJldHVybiByZXQ7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbih0eXBlKSB7XG4gIGlmICh0aGlzLl9ldmVudHMpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICAgIGlmIChpc0Z1bmN0aW9uKGV2bGlzdGVuZXIpKVxuICAgICAgcmV0dXJuIDE7XG4gICAgZWxzZSBpZiAoZXZsaXN0ZW5lcilcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gMDtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xufTtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGlzTnVtYmVyKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gdm9pZCAwO1xufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2V2ZW50cy9ldmVudHMuanNcbi8vIG1vZHVsZSBpZCA9IDQ3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuXG52YXIgaXNCdWZmZXJFbmNvZGluZyA9IEJ1ZmZlci5pc0VuY29kaW5nXG4gIHx8IGZ1bmN0aW9uKGVuY29kaW5nKSB7XG4gICAgICAgc3dpdGNoIChlbmNvZGluZyAmJiBlbmNvZGluZy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICBjYXNlICdoZXgnOiBjYXNlICd1dGY4JzogY2FzZSAndXRmLTgnOiBjYXNlICdhc2NpaSc6IGNhc2UgJ2JpbmFyeSc6IGNhc2UgJ2Jhc2U2NCc6IGNhc2UgJ3VjczInOiBjYXNlICd1Y3MtMic6IGNhc2UgJ3V0ZjE2bGUnOiBjYXNlICd1dGYtMTZsZSc6IGNhc2UgJ3Jhdyc6IHJldHVybiB0cnVlO1xuICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGZhbHNlO1xuICAgICAgIH1cbiAgICAgfVxuXG5cbmZ1bmN0aW9uIGFzc2VydEVuY29kaW5nKGVuY29kaW5nKSB7XG4gIGlmIChlbmNvZGluZyAmJiAhaXNCdWZmZXJFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZyk7XG4gIH1cbn1cblxuLy8gU3RyaW5nRGVjb2RlciBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIGVmZmljaWVudGx5IHNwbGl0dGluZyBhIHNlcmllcyBvZlxuLy8gYnVmZmVycyBpbnRvIGEgc2VyaWVzIG9mIEpTIHN0cmluZ3Mgd2l0aG91dCBicmVha2luZyBhcGFydCBtdWx0aS1ieXRlXG4vLyBjaGFyYWN0ZXJzLiBDRVNVLTggaXMgaGFuZGxlZCBhcyBwYXJ0IG9mIHRoZSBVVEYtOCBlbmNvZGluZy5cbi8vXG4vLyBAVE9ETyBIYW5kbGluZyBhbGwgZW5jb2RpbmdzIGluc2lkZSBhIHNpbmdsZSBvYmplY3QgbWFrZXMgaXQgdmVyeSBkaWZmaWN1bHRcbi8vIHRvIHJlYXNvbiBhYm91dCB0aGlzIGNvZGUsIHNvIGl0IHNob3VsZCBiZSBzcGxpdCB1cCBpbiB0aGUgZnV0dXJlLlxuLy8gQFRPRE8gVGhlcmUgc2hvdWxkIGJlIGEgdXRmOC1zdHJpY3QgZW5jb2RpbmcgdGhhdCByZWplY3RzIGludmFsaWQgVVRGLTggY29kZVxuLy8gcG9pbnRzIGFzIHVzZWQgYnkgQ0VTVS04LlxudmFyIFN0cmluZ0RlY29kZXIgPSBleHBvcnRzLlN0cmluZ0RlY29kZXIgPSBmdW5jdGlvbihlbmNvZGluZykge1xuICB0aGlzLmVuY29kaW5nID0gKGVuY29kaW5nIHx8ICd1dGY4JykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9dLywgJycpO1xuICBhc3NlcnRFbmNvZGluZyhlbmNvZGluZyk7XG4gIHN3aXRjaCAodGhpcy5lbmNvZGluZykge1xuICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgLy8gQ0VTVS04IHJlcHJlc2VudHMgZWFjaCBvZiBTdXJyb2dhdGUgUGFpciBieSAzLWJ5dGVzXG4gICAgICB0aGlzLnN1cnJvZ2F0ZVNpemUgPSAzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICAvLyBVVEYtMTYgcmVwcmVzZW50cyBlYWNoIG9mIFN1cnJvZ2F0ZSBQYWlyIGJ5IDItYnl0ZXNcbiAgICAgIHRoaXMuc3Vycm9nYXRlU2l6ZSA9IDI7XG4gICAgICB0aGlzLmRldGVjdEluY29tcGxldGVDaGFyID0gdXRmMTZEZXRlY3RJbmNvbXBsZXRlQ2hhcjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAvLyBCYXNlLTY0IHN0b3JlcyAzIGJ5dGVzIGluIDQgY2hhcnMsIGFuZCBwYWRzIHRoZSByZW1haW5kZXIuXG4gICAgICB0aGlzLnN1cnJvZ2F0ZVNpemUgPSAzO1xuICAgICAgdGhpcy5kZXRlY3RJbmNvbXBsZXRlQ2hhciA9IGJhc2U2NERldGVjdEluY29tcGxldGVDaGFyO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRoaXMud3JpdGUgPSBwYXNzVGhyb3VnaFdyaXRlO1xuICAgICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRW5vdWdoIHNwYWNlIHRvIHN0b3JlIGFsbCBieXRlcyBvZiBhIHNpbmdsZSBjaGFyYWN0ZXIuIFVURi04IG5lZWRzIDRcbiAgLy8gYnl0ZXMsIGJ1dCBDRVNVLTggbWF5IHJlcXVpcmUgdXAgdG8gNiAoMyBieXRlcyBwZXIgc3Vycm9nYXRlKS5cbiAgdGhpcy5jaGFyQnVmZmVyID0gbmV3IEJ1ZmZlcig2KTtcbiAgLy8gTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGZvciB0aGUgY3VycmVudCBpbmNvbXBsZXRlIG11bHRpLWJ5dGUgY2hhcmFjdGVyLlxuICB0aGlzLmNoYXJSZWNlaXZlZCA9IDA7XG4gIC8vIE51bWJlciBvZiBieXRlcyBleHBlY3RlZCBmb3IgdGhlIGN1cnJlbnQgaW5jb21wbGV0ZSBtdWx0aS1ieXRlIGNoYXJhY3Rlci5cbiAgdGhpcy5jaGFyTGVuZ3RoID0gMDtcbn07XG5cblxuLy8gd3JpdGUgZGVjb2RlcyB0aGUgZ2l2ZW4gYnVmZmVyIGFuZCByZXR1cm5zIGl0IGFzIEpTIHN0cmluZyB0aGF0IGlzXG4vLyBndWFyYW50ZWVkIHRvIG5vdCBjb250YWluIGFueSBwYXJ0aWFsIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4gQW55IHBhcnRpYWxcbi8vIGNoYXJhY3RlciBmb3VuZCBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgaXMgYnVmZmVyZWQgdXAsIGFuZCB3aWxsIGJlXG4vLyByZXR1cm5lZCB3aGVuIGNhbGxpbmcgd3JpdGUgYWdhaW4gd2l0aCB0aGUgcmVtYWluaW5nIGJ5dGVzLlxuLy9cbi8vIE5vdGU6IENvbnZlcnRpbmcgYSBCdWZmZXIgY29udGFpbmluZyBhbiBvcnBoYW4gc3Vycm9nYXRlIHRvIGEgU3RyaW5nXG4vLyBjdXJyZW50bHkgd29ya3MsIGJ1dCBjb252ZXJ0aW5nIGEgU3RyaW5nIHRvIGEgQnVmZmVyICh2aWEgYG5ldyBCdWZmZXJgLCBvclxuLy8gQnVmZmVyI3dyaXRlKSB3aWxsIHJlcGxhY2UgaW5jb21wbGV0ZSBzdXJyb2dhdGVzIHdpdGggdGhlIHVuaWNvZGVcbi8vIHJlcGxhY2VtZW50IGNoYXJhY3Rlci4gU2VlIGh0dHBzOi8vY29kZXJldmlldy5jaHJvbWl1bS5vcmcvMTIxMTczMDA5LyAuXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1ZmZlcikge1xuICB2YXIgY2hhclN0ciA9ICcnO1xuICAvLyBpZiBvdXIgbGFzdCB3cml0ZSBlbmRlZCB3aXRoIGFuIGluY29tcGxldGUgbXVsdGlieXRlIGNoYXJhY3RlclxuICB3aGlsZSAodGhpcy5jaGFyTGVuZ3RoKSB7XG4gICAgLy8gZGV0ZXJtaW5lIGhvdyBtYW55IHJlbWFpbmluZyBieXRlcyB0aGlzIGJ1ZmZlciBoYXMgdG8gb2ZmZXIgZm9yIHRoaXMgY2hhclxuICAgIHZhciBhdmFpbGFibGUgPSAoYnVmZmVyLmxlbmd0aCA+PSB0aGlzLmNoYXJMZW5ndGggLSB0aGlzLmNoYXJSZWNlaXZlZCkgP1xuICAgICAgICB0aGlzLmNoYXJMZW5ndGggLSB0aGlzLmNoYXJSZWNlaXZlZCA6XG4gICAgICAgIGJ1ZmZlci5sZW5ndGg7XG5cbiAgICAvLyBhZGQgdGhlIG5ldyBieXRlcyB0byB0aGUgY2hhciBidWZmZXJcbiAgICBidWZmZXIuY29weSh0aGlzLmNoYXJCdWZmZXIsIHRoaXMuY2hhclJlY2VpdmVkLCAwLCBhdmFpbGFibGUpO1xuICAgIHRoaXMuY2hhclJlY2VpdmVkICs9IGF2YWlsYWJsZTtcblxuICAgIGlmICh0aGlzLmNoYXJSZWNlaXZlZCA8IHRoaXMuY2hhckxlbmd0aCkge1xuICAgICAgLy8gc3RpbGwgbm90IGVub3VnaCBjaGFycyBpbiB0aGlzIGJ1ZmZlcj8gd2FpdCBmb3IgbW9yZSAuLi5cbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyByZW1vdmUgYnl0ZXMgYmVsb25naW5nIHRvIHRoZSBjdXJyZW50IGNoYXJhY3RlciBmcm9tIHRoZSBidWZmZXJcbiAgICBidWZmZXIgPSBidWZmZXIuc2xpY2UoYXZhaWxhYmxlLCBidWZmZXIubGVuZ3RoKTtcblxuICAgIC8vIGdldCB0aGUgY2hhcmFjdGVyIHRoYXQgd2FzIHNwbGl0XG4gICAgY2hhclN0ciA9IHRoaXMuY2hhckJ1ZmZlci5zbGljZSgwLCB0aGlzLmNoYXJMZW5ndGgpLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpO1xuXG4gICAgLy8gQ0VTVS04OiBsZWFkIHN1cnJvZ2F0ZSAoRDgwMC1EQkZGKSBpcyBhbHNvIHRoZSBpbmNvbXBsZXRlIGNoYXJhY3RlclxuICAgIHZhciBjaGFyQ29kZSA9IGNoYXJTdHIuY2hhckNvZGVBdChjaGFyU3RyLmxlbmd0aCAtIDEpO1xuICAgIGlmIChjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGKSB7XG4gICAgICB0aGlzLmNoYXJMZW5ndGggKz0gdGhpcy5zdXJyb2dhdGVTaXplO1xuICAgICAgY2hhclN0ciA9ICcnO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHRoaXMuY2hhclJlY2VpdmVkID0gdGhpcy5jaGFyTGVuZ3RoID0gMDtcblxuICAgIC8vIGlmIHRoZXJlIGFyZSBubyBtb3JlIGJ5dGVzIGluIHRoaXMgYnVmZmVyLCBqdXN0IGVtaXQgb3VyIGNoYXJcbiAgICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGNoYXJTdHI7XG4gICAgfVxuICAgIGJyZWFrO1xuICB9XG5cbiAgLy8gZGV0ZXJtaW5lIGFuZCBzZXQgY2hhckxlbmd0aCAvIGNoYXJSZWNlaXZlZFxuICB0aGlzLmRldGVjdEluY29tcGxldGVDaGFyKGJ1ZmZlcik7XG5cbiAgdmFyIGVuZCA9IGJ1ZmZlci5sZW5ndGg7XG4gIGlmICh0aGlzLmNoYXJMZW5ndGgpIHtcbiAgICAvLyBidWZmZXIgdGhlIGluY29tcGxldGUgY2hhcmFjdGVyIGJ5dGVzIHdlIGdvdFxuICAgIGJ1ZmZlci5jb3B5KHRoaXMuY2hhckJ1ZmZlciwgMCwgYnVmZmVyLmxlbmd0aCAtIHRoaXMuY2hhclJlY2VpdmVkLCBlbmQpO1xuICAgIGVuZCAtPSB0aGlzLmNoYXJSZWNlaXZlZDtcbiAgfVxuXG4gIGNoYXJTdHIgKz0gYnVmZmVyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsIDAsIGVuZCk7XG5cbiAgdmFyIGVuZCA9IGNoYXJTdHIubGVuZ3RoIC0gMTtcbiAgdmFyIGNoYXJDb2RlID0gY2hhclN0ci5jaGFyQ29kZUF0KGVuZCk7XG4gIC8vIENFU1UtODogbGVhZCBzdXJyb2dhdGUgKEQ4MDAtREJGRikgaXMgYWxzbyB0aGUgaW5jb21wbGV0ZSBjaGFyYWN0ZXJcbiAgaWYgKGNoYXJDb2RlID49IDB4RDgwMCAmJiBjaGFyQ29kZSA8PSAweERCRkYpIHtcbiAgICB2YXIgc2l6ZSA9IHRoaXMuc3Vycm9nYXRlU2l6ZTtcbiAgICB0aGlzLmNoYXJMZW5ndGggKz0gc2l6ZTtcbiAgICB0aGlzLmNoYXJSZWNlaXZlZCArPSBzaXplO1xuICAgIHRoaXMuY2hhckJ1ZmZlci5jb3B5KHRoaXMuY2hhckJ1ZmZlciwgc2l6ZSwgMCwgc2l6ZSk7XG4gICAgYnVmZmVyLmNvcHkodGhpcy5jaGFyQnVmZmVyLCAwLCAwLCBzaXplKTtcbiAgICByZXR1cm4gY2hhclN0ci5zdWJzdHJpbmcoMCwgZW5kKTtcbiAgfVxuXG4gIC8vIG9yIGp1c3QgZW1pdCB0aGUgY2hhclN0clxuICByZXR1cm4gY2hhclN0cjtcbn07XG5cbi8vIGRldGVjdEluY29tcGxldGVDaGFyIGRldGVybWluZXMgaWYgdGhlcmUgaXMgYW4gaW5jb21wbGV0ZSBVVEYtOCBjaGFyYWN0ZXIgYXRcbi8vIHRoZSBlbmQgb2YgdGhlIGdpdmVuIGJ1ZmZlci4gSWYgc28sIGl0IHNldHMgdGhpcy5jaGFyTGVuZ3RoIHRvIHRoZSBieXRlXG4vLyBsZW5ndGggdGhhdCBjaGFyYWN0ZXIsIGFuZCBzZXRzIHRoaXMuY2hhclJlY2VpdmVkIHRvIHRoZSBudW1iZXIgb2YgYnl0ZXNcbi8vIHRoYXQgYXJlIGF2YWlsYWJsZSBmb3IgdGhpcyBjaGFyYWN0ZXIuXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5kZXRlY3RJbmNvbXBsZXRlQ2hhciA9IGZ1bmN0aW9uKGJ1ZmZlcikge1xuICAvLyBkZXRlcm1pbmUgaG93IG1hbnkgYnl0ZXMgd2UgaGF2ZSB0byBjaGVjayBhdCB0aGUgZW5kIG9mIHRoaXMgYnVmZmVyXG4gIHZhciBpID0gKGJ1ZmZlci5sZW5ndGggPj0gMykgPyAzIDogYnVmZmVyLmxlbmd0aDtcblxuICAvLyBGaWd1cmUgb3V0IGlmIG9uZSBvZiB0aGUgbGFzdCBpIGJ5dGVzIG9mIG91ciBidWZmZXIgYW5ub3VuY2VzIGFuXG4gIC8vIGluY29tcGxldGUgY2hhci5cbiAgZm9yICg7IGkgPiAwOyBpLS0pIHtcbiAgICB2YXIgYyA9IGJ1ZmZlcltidWZmZXIubGVuZ3RoIC0gaV07XG5cbiAgICAvLyBTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VVEYtOCNEZXNjcmlwdGlvblxuXG4gICAgLy8gMTEwWFhYWFhcbiAgICBpZiAoaSA9PSAxICYmIGMgPj4gNSA9PSAweDA2KSB7XG4gICAgICB0aGlzLmNoYXJMZW5ndGggPSAyO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gMTExMFhYWFhcbiAgICBpZiAoaSA8PSAyICYmIGMgPj4gNCA9PSAweDBFKSB7XG4gICAgICB0aGlzLmNoYXJMZW5ndGggPSAzO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gMTExMTBYWFhcbiAgICBpZiAoaSA8PSAzICYmIGMgPj4gMyA9PSAweDFFKSB7XG4gICAgICB0aGlzLmNoYXJMZW5ndGggPSA0O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHRoaXMuY2hhclJlY2VpdmVkID0gaTtcbn07XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKGJ1ZmZlcikge1xuICB2YXIgcmVzID0gJyc7XG4gIGlmIChidWZmZXIgJiYgYnVmZmVyLmxlbmd0aClcbiAgICByZXMgPSB0aGlzLndyaXRlKGJ1ZmZlcik7XG5cbiAgaWYgKHRoaXMuY2hhclJlY2VpdmVkKSB7XG4gICAgdmFyIGNyID0gdGhpcy5jaGFyUmVjZWl2ZWQ7XG4gICAgdmFyIGJ1ZiA9IHRoaXMuY2hhckJ1ZmZlcjtcbiAgICB2YXIgZW5jID0gdGhpcy5lbmNvZGluZztcbiAgICByZXMgKz0gYnVmLnNsaWNlKDAsIGNyKS50b1N0cmluZyhlbmMpO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG5cbmZ1bmN0aW9uIHBhc3NUaHJvdWdoV3JpdGUoYnVmZmVyKSB7XG4gIHJldHVybiBidWZmZXIudG9TdHJpbmcodGhpcy5lbmNvZGluZyk7XG59XG5cbmZ1bmN0aW9uIHV0ZjE2RGV0ZWN0SW5jb21wbGV0ZUNoYXIoYnVmZmVyKSB7XG4gIHRoaXMuY2hhclJlY2VpdmVkID0gYnVmZmVyLmxlbmd0aCAlIDI7XG4gIHRoaXMuY2hhckxlbmd0aCA9IHRoaXMuY2hhclJlY2VpdmVkID8gMiA6IDA7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NERldGVjdEluY29tcGxldGVDaGFyKGJ1ZmZlcikge1xuICB0aGlzLmNoYXJSZWNlaXZlZCA9IGJ1ZmZlci5sZW5ndGggJSAzO1xuICB0aGlzLmNoYXJMZW5ndGggPSB0aGlzLmNoYXJSZWNlaXZlZCA/IDMgOiAwO1xufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L25vZGUtbGlicy1icm93c2VyL34vc3RyaW5nX2RlY29kZXIvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDQ4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcblxuaWYgKCFwcm9jZXNzLnZlcnNpb24gfHxcbiAgICBwcm9jZXNzLnZlcnNpb24uaW5kZXhPZigndjAuJykgPT09IDAgfHxcbiAgICBwcm9jZXNzLnZlcnNpb24uaW5kZXhPZigndjEuJykgPT09IDAgJiYgcHJvY2Vzcy52ZXJzaW9uLmluZGV4T2YoJ3YxLjguJykgIT09IDApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBuZXh0VGljaztcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcHJvY2Vzcy5uZXh0VGljaztcbn1cblxuZnVuY3Rpb24gbmV4dFRpY2soZm4sIGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiY2FsbGJhY2tcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGFyZ3MsIGk7XG4gIHN3aXRjaCAobGVuKSB7XG4gIGNhc2UgMDpcbiAgY2FzZSAxOlxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZuKTtcbiAgY2FzZSAyOlxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGlja09uZSgpIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgYXJnMSk7XG4gICAgfSk7XG4gIGNhc2UgMzpcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2tUd28oKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIGFyZzEsIGFyZzIpO1xuICAgIH0pO1xuICBjYXNlIDQ6XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gYWZ0ZXJUaWNrVGhyZWUoKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgIH0pO1xuICBkZWZhdWx0OlxuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gMSk7XG4gICAgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBhcmdzLmxlbmd0aCkge1xuICAgICAgYXJnc1tpKytdID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2soKSB7XG4gICAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9KTtcbiAgfVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Byb2Nlc3MtbmV4dGljay1hcmdzL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA0OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBBIGJpdCBzaW1wbGVyIHRoYW4gcmVhZGFibGUgc3RyZWFtcy5cbi8vIEltcGxlbWVudCBhbiBhc3luYyAuX3dyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpLCBhbmQgaXQnbGwgaGFuZGxlIGFsbFxuLy8gdGhlIGRyYWluIGV2ZW50IGVtaXNzaW9uIGFuZCBidWZmZXJpbmcuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBXcml0YWJsZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBwcm9jZXNzTmV4dFRpY2sgPSByZXF1aXJlKCdwcm9jZXNzLW5leHRpY2stYXJncycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgYXN5bmNXcml0ZSA9ICFwcm9jZXNzLmJyb3dzZXIgJiYgWyd2MC4xMCcsICd2MC45LiddLmluZGV4T2YocHJvY2Vzcy52ZXJzaW9uLnNsaWNlKDAsIDUpKSA+IC0xID8gc2V0SW1tZWRpYXRlIDogcHJvY2Vzc05leHRUaWNrO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbldyaXRhYmxlLldyaXRhYmxlU3RhdGUgPSBXcml0YWJsZVN0YXRlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSByZXF1aXJlKCdjb3JlLXV0aWwtaXMnKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgaW50ZXJuYWxVdGlsID0ge1xuICBkZXByZWNhdGU6IHJlcXVpcmUoJ3V0aWwtZGVwcmVjYXRlJylcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBTdHJlYW0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbi8qPHJlcGxhY2VtZW50PiovXG52YXIgYnVmZmVyU2hpbSA9IHJlcXVpcmUoJ2J1ZmZlci1zaGltcycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnV0aWwuaW5oZXJpdHMoV3JpdGFibGUsIFN0cmVhbSk7XG5cbmZ1bmN0aW9uIG5vcCgpIHt9XG5cbmZ1bmN0aW9uIFdyaXRlUmVxKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdGhpcy5jaHVuayA9IGNodW5rO1xuICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHRoaXMuY2FsbGJhY2sgPSBjYjtcbiAgdGhpcy5uZXh0ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gV3JpdGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0pIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBvYmplY3Qgc3RyZWFtIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhpcyBzdHJlYW1cbiAgLy8gY29udGFpbnMgYnVmZmVycyBvciBvYmplY3RzLlxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcblxuICBpZiAoc3RyZWFtIGluc3RhbmNlb2YgRHVwbGV4KSB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLndyaXRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyB0aGUgcG9pbnQgYXQgd2hpY2ggd3JpdGUoKSBzdGFydHMgcmV0dXJuaW5nIGZhbHNlXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgdGhhdCB3ZSBhbHdheXMgcmV0dXJuIGZhbHNlIGlmXG4gIC8vIHRoZSBlbnRpcmUgYnVmZmVyIGlzIG5vdCBmbHVzaGVkIGltbWVkaWF0ZWx5IG9uIHdyaXRlKClcbiAgdmFyIGh3bSA9IG9wdGlvbnMuaGlnaFdhdGVyTWFyaztcbiAgdmFyIGRlZmF1bHRId20gPSB0aGlzLm9iamVjdE1vZGUgPyAxNiA6IDE2ICogMTAyNDtcbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaHdtIHx8IGh3bSA9PT0gMCA/IGh3bSA6IGRlZmF1bHRId207XG5cbiAgLy8gY2FzdCB0byBpbnRzLlxuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSB+fnRoaXMuaGlnaFdhdGVyTWFyaztcblxuICAvLyBkcmFpbiBldmVudCBmbGFnLlxuICB0aGlzLm5lZWREcmFpbiA9IGZhbHNlO1xuICAvLyBhdCB0aGUgc3RhcnQgb2YgY2FsbGluZyBlbmQoKVxuICB0aGlzLmVuZGluZyA9IGZhbHNlO1xuICAvLyB3aGVuIGVuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIHJldHVybmVkXG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgLy8gd2hlbiAnZmluaXNoJyBpcyBlbWl0dGVkXG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZTtcblxuICAvLyBzaG91bGQgd2UgZGVjb2RlIHN0cmluZ3MgaW50byBidWZmZXJzIGJlZm9yZSBwYXNzaW5nIHRvIF93cml0ZT9cbiAgLy8gdGhpcyBpcyBoZXJlIHNvIHRoYXQgc29tZSBub2RlLWNvcmUgc3RyZWFtcyBjYW4gb3B0aW1pemUgc3RyaW5nXG4gIC8vIGhhbmRsaW5nIGF0IGEgbG93ZXIgbGV2ZWwuXG4gIHZhciBub0RlY29kZSA9IG9wdGlvbnMuZGVjb2RlU3RyaW5ncyA9PT0gZmFsc2U7XG4gIHRoaXMuZGVjb2RlU3RyaW5ncyA9ICFub0RlY29kZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JztcblxuICAvLyBub3QgYW4gYWN0dWFsIGJ1ZmZlciB3ZSBrZWVwIHRyYWNrIG9mLCBidXQgYSBtZWFzdXJlbWVudFxuICAvLyBvZiBob3cgbXVjaCB3ZSdyZSB3YWl0aW5nIHRvIGdldCBwdXNoZWQgdG8gc29tZSB1bmRlcmx5aW5nXG4gIC8vIHNvY2tldCBvciBmaWxlLlxuICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgLy8gYSBmbGFnIHRvIHNlZSB3aGVuIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSB3cml0ZS5cbiAgdGhpcy53cml0aW5nID0gZmFsc2U7XG5cbiAgLy8gd2hlbiB0cnVlIGFsbCB3cml0ZXMgd2lsbCBiZSBidWZmZXJlZCB1bnRpbCAudW5jb3JrKCkgY2FsbFxuICB0aGlzLmNvcmtlZCA9IDA7XG5cbiAgLy8gYSBmbGFnIHRvIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgb253cml0ZSBjYiBpcyBjYWxsZWQgaW1tZWRpYXRlbHksXG4gIC8vIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2UgYW55XG4gIC8vIGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHdyaXRlIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWU7XG5cbiAgLy8gYSBmbGFnIHRvIGtub3cgaWYgd2UncmUgcHJvY2Vzc2luZyBwcmV2aW91c2x5IGJ1ZmZlcmVkIGl0ZW1zLCB3aGljaFxuICAvLyBtYXkgY2FsbCB0aGUgX3dyaXRlKCkgY2FsbGJhY2sgaW4gdGhlIHNhbWUgdGljaywgc28gdGhhdCB3ZSBkb24ndFxuICAvLyBlbmQgdXAgaW4gYW4gb3ZlcmxhcHBlZCBvbndyaXRlIHNpdHVhdGlvbi5cbiAgdGhpcy5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2U7XG5cbiAgLy8gdGhlIGNhbGxiYWNrIHRoYXQncyBwYXNzZWQgdG8gX3dyaXRlKGNodW5rLGNiKVxuICB0aGlzLm9ud3JpdGUgPSBmdW5jdGlvbiAoZXIpIHtcbiAgICBvbndyaXRlKHN0cmVhbSwgZXIpO1xuICB9O1xuXG4gIC8vIHRoZSBjYWxsYmFjayB0aGF0IHRoZSB1c2VyIHN1cHBsaWVzIHRvIHdyaXRlKGNodW5rLGVuY29kaW5nLGNiKVxuICB0aGlzLndyaXRlY2IgPSBudWxsO1xuXG4gIC8vIHRoZSBhbW91bnQgdGhhdCBpcyBiZWluZyB3cml0dGVuIHdoZW4gX3dyaXRlIGlzIGNhbGxlZC5cbiAgdGhpcy53cml0ZWxlbiA9IDA7XG5cbiAgdGhpcy5idWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICB0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuXG4gIC8vIG51bWJlciBvZiBwZW5kaW5nIHVzZXItc3VwcGxpZWQgd3JpdGUgY2FsbGJhY2tzXG4gIC8vIHRoaXMgbXVzdCBiZSAwIGJlZm9yZSAnZmluaXNoJyBjYW4gYmUgZW1pdHRlZFxuICB0aGlzLnBlbmRpbmdjYiA9IDA7XG5cbiAgLy8gZW1pdCBwcmVmaW5pc2ggaWYgdGhlIG9ubHkgdGhpbmcgd2UncmUgd2FpdGluZyBmb3IgaXMgX3dyaXRlIGNic1xuICAvLyBUaGlzIGlzIHJlbGV2YW50IGZvciBzeW5jaHJvbm91cyBUcmFuc2Zvcm0gc3RyZWFtc1xuICB0aGlzLnByZWZpbmlzaGVkID0gZmFsc2U7XG5cbiAgLy8gVHJ1ZSBpZiB0aGUgZXJyb3Igd2FzIGFscmVhZHkgZW1pdHRlZCBhbmQgc2hvdWxkIG5vdCBiZSB0aHJvd24gYWdhaW5cbiAgdGhpcy5lcnJvckVtaXR0ZWQgPSBmYWxzZTtcblxuICAvLyBjb3VudCBidWZmZXJlZCByZXF1ZXN0c1xuICB0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50ID0gMDtcblxuICAvLyBhbGxvY2F0ZSB0aGUgZmlyc3QgQ29ya2VkUmVxdWVzdCwgdGhlcmUgaXMgYWx3YXlzXG4gIC8vIG9uZSBhbGxvY2F0ZWQgYW5kIGZyZWUgdG8gdXNlLCBhbmQgd2UgbWFpbnRhaW4gYXQgbW9zdCB0d29cbiAgdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBuZXcgQ29ya2VkUmVxdWVzdCh0aGlzKTtcbn1cblxuV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24gZ2V0QnVmZmVyKCkge1xuICB2YXIgY3VycmVudCA9IHRoaXMuYnVmZmVyZWRSZXF1ZXN0O1xuICB2YXIgb3V0ID0gW107XG4gIHdoaWxlIChjdXJyZW50KSB7XG4gICAgb3V0LnB1c2goY3VycmVudCk7XG4gICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgfVxuICByZXR1cm4gb3V0O1xufTtcblxuKGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUsICdidWZmZXInLCB7XG4gICAgICBnZXQ6IGludGVybmFsVXRpbC5kZXByZWNhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRCdWZmZXIoKTtcbiAgICAgIH0sICdfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciAnICsgJ2luc3RlYWQuJylcbiAgICB9KTtcbiAgfSBjYXRjaCAoXykge31cbn0pKCk7XG5cbi8vIFRlc3QgX3dyaXRhYmxlU3RhdGUgZm9yIGluaGVyaXRhbmNlIHRvIGFjY291bnQgZm9yIER1cGxleCBzdHJlYW1zLFxuLy8gd2hvc2UgcHJvdG90eXBlIGNoYWluIG9ubHkgcG9pbnRzIHRvIFJlYWRhYmxlLlxudmFyIHJlYWxIYXNJbnN0YW5jZTtcbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5oYXNJbnN0YW5jZSAmJiB0eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgcmVhbEhhc0luc3RhbmNlID0gRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV07XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZSwgU3ltYm9sLmhhc0luc3RhbmNlLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIGlmIChyZWFsSGFzSW5zdGFuY2UuY2FsbCh0aGlzLCBvYmplY3QpKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgcmV0dXJuIG9iamVjdCAmJiBvYmplY3QuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBXcml0YWJsZVN0YXRlO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICByZWFsSGFzSW5zdGFuY2UgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIHRoaXM7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFdyaXRhYmxlKG9wdGlvbnMpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICAvLyBXcml0YWJsZSBjdG9yIGlzIGFwcGxpZWQgdG8gRHVwbGV4ZXMsIHRvby5cbiAgLy8gYHJlYWxIYXNJbnN0YW5jZWAgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdXNpbmcgcGxhaW4gYGluc3RhbmNlb2ZgXG4gIC8vIHdvdWxkIHJldHVybiBmYWxzZSwgYXMgbm8gYF93cml0YWJsZVN0YXRlYCBwcm9wZXJ0eSBpcyBhdHRhY2hlZC5cblxuICAvLyBUcnlpbmcgdG8gdXNlIHRoZSBjdXN0b20gYGluc3RhbmNlb2ZgIGZvciBXcml0YWJsZSBoZXJlIHdpbGwgYWxzbyBicmVhayB0aGVcbiAgLy8gTm9kZS5qcyBMYXp5VHJhbnNmb3JtIGltcGxlbWVudGF0aW9uLCB3aGljaCBoYXMgYSBub24tdHJpdmlhbCBnZXR0ZXIgZm9yXG4gIC8vIGBfd3JpdGFibGVTdGF0ZWAgdGhhdCB3b3VsZCBsZWFkIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgaWYgKCFyZWFsSGFzSW5zdGFuY2UuY2FsbChXcml0YWJsZSwgdGhpcykgJiYgISh0aGlzIGluc3RhbmNlb2YgRHVwbGV4KSkge1xuICAgIHJldHVybiBuZXcgV3JpdGFibGUob3B0aW9ucyk7XG4gIH1cblxuICB0aGlzLl93cml0YWJsZVN0YXRlID0gbmV3IFdyaXRhYmxlU3RhdGUob3B0aW9ucywgdGhpcyk7XG5cbiAgLy8gbGVnYWN5LlxuICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGUgPSBvcHRpb25zLndyaXRlO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLndyaXRldiA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGV2ID0gb3B0aW9ucy53cml0ZXY7XG4gIH1cblxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cblxuLy8gT3RoZXJ3aXNlIHBlb3BsZSBjYW4gcGlwZSBXcml0YWJsZSBzdHJlYW1zLCB3aGljaCBpcyBqdXN0IHdyb25nLlxuV3JpdGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ0Nhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUnKSk7XG59O1xuXG5mdW5jdGlvbiB3cml0ZUFmdGVyRW5kKHN0cmVhbSwgY2IpIHtcbiAgdmFyIGVyID0gbmV3IEVycm9yKCd3cml0ZSBhZnRlciBlbmQnKTtcbiAgLy8gVE9ETzogZGVmZXIgZXJyb3IgZXZlbnRzIGNvbnNpc3RlbnRseSBldmVyeXdoZXJlLCBub3QganVzdCB0aGUgY2JcbiAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuICBwcm9jZXNzTmV4dFRpY2soY2IsIGVyKTtcbn1cblxuLy8gQ2hlY2tzIHRoYXQgYSB1c2VyLXN1cHBsaWVkIGNodW5rIGlzIHZhbGlkLCBlc3BlY2lhbGx5IGZvciB0aGUgcGFydGljdWxhclxuLy8gbW9kZSB0aGUgc3RyZWFtIGlzIGluLiBDdXJyZW50bHkgdGhpcyBtZWFucyB0aGF0IGBudWxsYCBpcyBuZXZlciBhY2NlcHRlZFxuLy8gYW5kIHVuZGVmaW5lZC9ub24tc3RyaW5nIHZhbHVlcyBhcmUgb25seSBhbGxvd2VkIGluIG9iamVjdCBtb2RlLlxuZnVuY3Rpb24gdmFsaWRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgY2IpIHtcbiAgdmFyIHZhbGlkID0gdHJ1ZTtcbiAgdmFyIGVyID0gZmFsc2U7XG5cbiAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgZXIgPSBuZXcgVHlwZUVycm9yKCdNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbScpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBjaHVuayAhPT0gJ3N0cmluZycgJiYgY2h1bmsgIT09IHVuZGVmaW5lZCAmJiAhc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGVyID0gbmV3IFR5cGVFcnJvcignSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVuaycpO1xuICB9XG4gIGlmIChlcikge1xuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICBwcm9jZXNzTmV4dFRpY2soY2IsIGVyKTtcbiAgICB2YWxpZCA9IGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWxpZDtcbn1cblxuV3JpdGFibGUucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHJldCA9IGZhbHNlO1xuICB2YXIgaXNCdWYgPSBCdWZmZXIuaXNCdWZmZXIoY2h1bmspO1xuXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIGlmIChpc0J1ZikgZW5jb2RpbmcgPSAnYnVmZmVyJztlbHNlIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gc3RhdGUuZGVmYXVsdEVuY29kaW5nO1xuXG4gIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIGNiID0gbm9wO1xuXG4gIGlmIChzdGF0ZS5lbmRlZCkgd3JpdGVBZnRlckVuZCh0aGlzLCBjYik7ZWxzZSBpZiAoaXNCdWYgfHwgdmFsaWRDaHVuayh0aGlzLCBzdGF0ZSwgY2h1bmssIGNiKSkge1xuICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgIHJldCA9IHdyaXRlT3JCdWZmZXIodGhpcywgc3RhdGUsIGlzQnVmLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuY29yayA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcblxuICBzdGF0ZS5jb3JrZWQrKztcbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS51bmNvcmsgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZC0tO1xuXG4gICAgaWYgKCFzdGF0ZS53cml0aW5nICYmICFzdGF0ZS5jb3JrZWQgJiYgIXN0YXRlLmZpbmlzaGVkICYmICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCkgY2xlYXJCdWZmZXIodGhpcywgc3RhdGUpO1xuICB9XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nID0gZnVuY3Rpb24gc2V0RGVmYXVsdEVuY29kaW5nKGVuY29kaW5nKSB7XG4gIC8vIG5vZGU6OlBhcnNlRW5jb2RpbmcoKSByZXF1aXJlcyBsb3dlciBjYXNlLlxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJykgZW5jb2RpbmcgPSBlbmNvZGluZy50b0xvd2VyQ2FzZSgpO1xuICBpZiAoIShbJ2hleCcsICd1dGY4JywgJ3V0Zi04JywgJ2FzY2lpJywgJ2JpbmFyeScsICdiYXNlNjQnLCAndWNzMicsICd1Y3MtMicsICd1dGYxNmxlJywgJ3V0Zi0xNmxlJywgJ3JhdyddLmluZGV4T2YoKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKCkpID4gLTEpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpO1xuICB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZyA9IGVuY29kaW5nO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIGRlY29kZUNodW5rKHN0YXRlLCBjaHVuaywgZW5jb2RpbmcpIHtcbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmIHN0YXRlLmRlY29kZVN0cmluZ3MgIT09IGZhbHNlICYmIHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICBjaHVuayA9IGJ1ZmZlclNoaW0uZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICB9XG4gIHJldHVybiBjaHVuaztcbn1cblxuLy8gaWYgd2UncmUgYWxyZWFkeSB3cml0aW5nIHNvbWV0aGluZywgdGhlbiBqdXN0IHB1dCB0aGlzXG4vLyBpbiB0aGUgcXVldWUsIGFuZCB3YWl0IG91ciB0dXJuLiAgT3RoZXJ3aXNlLCBjYWxsIF93cml0ZVxuLy8gSWYgd2UgcmV0dXJuIGZhbHNlLCB0aGVuIHdlIG5lZWQgYSBkcmFpbiBldmVudCwgc28gc2V0IHRoYXQgZmxhZy5cbmZ1bmN0aW9uIHdyaXRlT3JCdWZmZXIoc3RyZWFtLCBzdGF0ZSwgaXNCdWYsIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgaWYgKCFpc0J1Zikge1xuICAgIGNodW5rID0gZGVjb2RlQ2h1bmsoc3RhdGUsIGNodW5rLCBlbmNvZGluZyk7XG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpIGVuY29kaW5nID0gJ2J1ZmZlcic7XG4gIH1cbiAgdmFyIGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuXG4gIHN0YXRlLmxlbmd0aCArPSBsZW47XG5cbiAgdmFyIHJldCA9IHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIC8vIHdlIG11c3QgZW5zdXJlIHRoYXQgcHJldmlvdXMgbmVlZERyYWluIHdpbGwgbm90IGJlIHJlc2V0IHRvIGZhbHNlLlxuICBpZiAoIXJldCkgc3RhdGUubmVlZERyYWluID0gdHJ1ZTtcblxuICBpZiAoc3RhdGUud3JpdGluZyB8fCBzdGF0ZS5jb3JrZWQpIHtcbiAgICB2YXIgbGFzdCA9IHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q7XG4gICAgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG5ldyBXcml0ZVJlcShjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgICBpZiAobGFzdCkge1xuICAgICAgbGFzdC5uZXh0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9XG4gICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQgKz0gMTtcbiAgfSBlbHNlIHtcbiAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCB3cml0ZXYsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBzdGF0ZS53cml0ZWxlbiA9IGxlbjtcbiAgc3RhdGUud3JpdGVjYiA9IGNiO1xuICBzdGF0ZS53cml0aW5nID0gdHJ1ZTtcbiAgc3RhdGUuc3luYyA9IHRydWU7XG4gIGlmICh3cml0ZXYpIHN0cmVhbS5fd3JpdGV2KGNodW5rLCBzdGF0ZS5vbndyaXRlKTtlbHNlIHN0cmVhbS5fd3JpdGUoY2h1bmssIGVuY29kaW5nLCBzdGF0ZS5vbndyaXRlKTtcbiAgc3RhdGUuc3luYyA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKSB7XG4gIC0tc3RhdGUucGVuZGluZ2NiO1xuICBpZiAoc3luYykgcHJvY2Vzc05leHRUaWNrKGNiLCBlcik7ZWxzZSBjYihlcik7XG5cbiAgc3RyZWFtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbn1cblxuZnVuY3Rpb24gb253cml0ZVN0YXRlVXBkYXRlKHN0YXRlKSB7XG4gIHN0YXRlLndyaXRpbmcgPSBmYWxzZTtcbiAgc3RhdGUud3JpdGVjYiA9IG51bGw7XG4gIHN0YXRlLmxlbmd0aCAtPSBzdGF0ZS53cml0ZWxlbjtcbiAgc3RhdGUud3JpdGVsZW4gPSAwO1xufVxuXG5mdW5jdGlvbiBvbndyaXRlKHN0cmVhbSwgZXIpIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuICB2YXIgc3luYyA9IHN0YXRlLnN5bmM7XG4gIHZhciBjYiA9IHN0YXRlLndyaXRlY2I7XG5cbiAgb253cml0ZVN0YXRlVXBkYXRlKHN0YXRlKTtcblxuICBpZiAoZXIpIG9ud3JpdGVFcnJvcihzdHJlYW0sIHN0YXRlLCBzeW5jLCBlciwgY2IpO2Vsc2Uge1xuICAgIC8vIENoZWNrIGlmIHdlJ3JlIGFjdHVhbGx5IHJlYWR5IHRvIGZpbmlzaCwgYnV0IGRvbid0IGVtaXQgeWV0XG4gICAgdmFyIGZpbmlzaGVkID0gbmVlZEZpbmlzaChzdGF0ZSk7XG5cbiAgICBpZiAoIWZpbmlzaGVkICYmICFzdGF0ZS5jb3JrZWQgJiYgIXN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgJiYgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0KSB7XG4gICAgICBjbGVhckJ1ZmZlcihzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAoc3luYykge1xuICAgICAgLyo8cmVwbGFjZW1lbnQ+Ki9cbiAgICAgIGFzeW5jV3JpdGUoYWZ0ZXJXcml0ZSwgc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKTtcbiAgICAgIC8qPC9yZXBsYWNlbWVudD4qL1xuICAgIH0gZWxzZSB7XG4gICAgICBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKSB7XG4gIGlmICghZmluaXNoZWQpIG9ud3JpdGVEcmFpbihzdHJlYW0sIHN0YXRlKTtcbiAgc3RhdGUucGVuZGluZ2NiLS07XG4gIGNiKCk7XG4gIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xufVxuXG4vLyBNdXN0IGZvcmNlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBvbiBuZXh0VGljaywgc28gdGhhdCB3ZSBkb24ndFxuLy8gZW1pdCAnZHJhaW4nIGJlZm9yZSB0aGUgd3JpdGUoKSBjb25zdW1lciBnZXRzIHRoZSAnZmFsc2UnIHJldHVyblxuLy8gdmFsdWUsIGFuZCBoYXMgYSBjaGFuY2UgdG8gYXR0YWNoIGEgJ2RyYWluJyBsaXN0ZW5lci5cbmZ1bmN0aW9uIG9ud3JpdGVEcmFpbihzdHJlYW0sIHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUubmVlZERyYWluKSB7XG4gICAgc3RhdGUubmVlZERyYWluID0gZmFsc2U7XG4gICAgc3RyZWFtLmVtaXQoJ2RyYWluJyk7XG4gIH1cbn1cblxuLy8gaWYgdGhlcmUncyBzb21ldGhpbmcgaW4gdGhlIGJ1ZmZlciB3YWl0aW5nLCB0aGVuIHByb2Nlc3MgaXRcbmZ1bmN0aW9uIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpIHtcbiAgc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyA9IHRydWU7XG4gIHZhciBlbnRyeSA9IHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdDtcblxuICBpZiAoc3RyZWFtLl93cml0ZXYgJiYgZW50cnkgJiYgZW50cnkubmV4dCkge1xuICAgIC8vIEZhc3QgY2FzZSwgd3JpdGUgZXZlcnl0aGluZyB1c2luZyBfd3JpdGV2KClcbiAgICB2YXIgbCA9IHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50O1xuICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXkobCk7XG4gICAgdmFyIGhvbGRlciA9IHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZTtcbiAgICBob2xkZXIuZW50cnkgPSBlbnRyeTtcblxuICAgIHZhciBjb3VudCA9IDA7XG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICBidWZmZXJbY291bnRdID0gZW50cnk7XG4gICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICBjb3VudCArPSAxO1xuICAgIH1cblxuICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgdHJ1ZSwgc3RhdGUubGVuZ3RoLCBidWZmZXIsICcnLCBob2xkZXIuZmluaXNoKTtcblxuICAgIC8vIGRvV3JpdGUgaXMgYWxtb3N0IGFsd2F5cyBhc3luYywgZGVmZXIgdGhlc2UgdG8gc2F2ZSBhIGJpdCBvZiB0aW1lXG4gICAgLy8gYXMgdGhlIGhvdCBwYXRoIGVuZHMgd2l0aCBkb1dyaXRlXG4gICAgc3RhdGUucGVuZGluZ2NiKys7XG4gICAgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gICAgaWYgKGhvbGRlci5uZXh0KSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBob2xkZXIubmV4dDtcbiAgICAgIGhvbGRlci5uZXh0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlID0gbmV3IENvcmtlZFJlcXVlc3Qoc3RhdGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBTbG93IGNhc2UsIHdyaXRlIGNodW5rcyBvbmUtYnktb25lXG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICB2YXIgY2h1bmsgPSBlbnRyeS5jaHVuaztcbiAgICAgIHZhciBlbmNvZGluZyA9IGVudHJ5LmVuY29kaW5nO1xuICAgICAgdmFyIGNiID0gZW50cnkuY2FsbGJhY2s7XG4gICAgICB2YXIgbGVuID0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG5cbiAgICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmFsc2UsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYik7XG4gICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICAvLyBpZiB3ZSBkaWRuJ3QgY2FsbCB0aGUgb253cml0ZSBpbW1lZGlhdGVseSwgdGhlblxuICAgICAgLy8gaXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgaXQgZG9lcy5cbiAgICAgIC8vIGFsc28sIHRoYXQgbWVhbnMgdGhhdCB0aGUgY2h1bmsgYW5kIGNiIGFyZSBjdXJyZW50bHlcbiAgICAgIC8vIGJlaW5nIHByb2Nlc3NlZCwgc28gbW92ZSB0aGUgYnVmZmVyIGNvdW50ZXIgcGFzdCB0aGVtLlxuICAgICAgaWYgKHN0YXRlLndyaXRpbmcpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVudHJ5ID09PSBudWxsKSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgfVxuXG4gIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50ID0gMDtcbiAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gZW50cnk7XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZTtcbn1cblxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG5ldyBFcnJvcignX3dyaXRlKCkgaXMgbm90IGltcGxlbWVudGVkJykpO1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZXYgPSBudWxsO1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcblxuICBpZiAodHlwZW9mIGNodW5rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBjaHVuaztcbiAgICBjaHVuayA9IG51bGw7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgaWYgKGNodW5rICE9PSBudWxsICYmIGNodW5rICE9PSB1bmRlZmluZWQpIHRoaXMud3JpdGUoY2h1bmssIGVuY29kaW5nKTtcblxuICAvLyAuZW5kKCkgZnVsbHkgdW5jb3Jrc1xuICBpZiAoc3RhdGUuY29ya2VkKSB7XG4gICAgc3RhdGUuY29ya2VkID0gMTtcbiAgICB0aGlzLnVuY29yaygpO1xuICB9XG5cbiAgLy8gaWdub3JlIHVubmVjZXNzYXJ5IGVuZCgpIGNhbGxzLlxuICBpZiAoIXN0YXRlLmVuZGluZyAmJiAhc3RhdGUuZmluaXNoZWQpIGVuZFdyaXRhYmxlKHRoaXMsIHN0YXRlLCBjYik7XG59O1xuXG5mdW5jdGlvbiBuZWVkRmluaXNoKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5lbmRpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCA9PT0gbnVsbCAmJiAhc3RhdGUuZmluaXNoZWQgJiYgIXN0YXRlLndyaXRpbmc7XG59XG5cbmZ1bmN0aW9uIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucHJlZmluaXNoZWQpIHtcbiAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpIHtcbiAgdmFyIG5lZWQgPSBuZWVkRmluaXNoKHN0YXRlKTtcbiAgaWYgKG5lZWQpIHtcbiAgICBpZiAoc3RhdGUucGVuZGluZ2NiID09PSAwKSB7XG4gICAgICBwcmVmaW5pc2goc3RyZWFtLCBzdGF0ZSk7XG4gICAgICBzdGF0ZS5maW5pc2hlZCA9IHRydWU7XG4gICAgICBzdHJlYW0uZW1pdCgnZmluaXNoJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5lZWQ7XG59XG5cbmZ1bmN0aW9uIGVuZFdyaXRhYmxlKHN0cmVhbSwgc3RhdGUsIGNiKSB7XG4gIHN0YXRlLmVuZGluZyA9IHRydWU7XG4gIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICBpZiAoY2IpIHtcbiAgICBpZiAoc3RhdGUuZmluaXNoZWQpIHByb2Nlc3NOZXh0VGljayhjYik7ZWxzZSBzdHJlYW0ub25jZSgnZmluaXNoJywgY2IpO1xuICB9XG4gIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgc3RyZWFtLndyaXRhYmxlID0gZmFsc2U7XG59XG5cbi8vIEl0IHNlZW1zIGEgbGlua2VkIGxpc3QgYnV0IGl0IGlzIG5vdFxuLy8gdGhlcmUgd2lsbCBiZSBvbmx5IDIgb2YgdGhlc2UgZm9yIGVhY2ggc3RyZWFtXG5mdW5jdGlvbiBDb3JrZWRSZXF1ZXN0KHN0YXRlKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdGhpcy5uZXh0ID0gbnVsbDtcbiAgdGhpcy5lbnRyeSA9IG51bGw7XG4gIHRoaXMuZmluaXNoID0gZnVuY3Rpb24gKGVycikge1xuICAgIHZhciBlbnRyeSA9IF90aGlzLmVudHJ5O1xuICAgIF90aGlzLmVudHJ5ID0gbnVsbDtcbiAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgIHZhciBjYiA9IGVudHJ5LmNhbGxiYWNrO1xuICAgICAgc3RhdGUucGVuZGluZ2NiLS07XG4gICAgICBjYihlcnIpO1xuICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgIH1cbiAgICBpZiAoc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlKSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dCA9IF90aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBfdGhpcztcbiAgICB9XG4gIH07XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV93cml0YWJsZS5qc1xuLy8gbW9kdWxlIGlkID0gNTBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcycpO1xuZXhwb3J0cy5TdHJlYW0gPSBleHBvcnRzO1xuZXhwb3J0cy5SZWFkYWJsZSA9IGV4cG9ydHM7XG5leHBvcnRzLldyaXRhYmxlID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV93cml0YWJsZS5qcycpO1xuZXhwb3J0cy5EdXBsZXggPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX2R1cGxleC5qcycpO1xuZXhwb3J0cy5UcmFuc2Zvcm0gPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcycpO1xuZXhwb3J0cy5QYXNzVGhyb3VnaCA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMnKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9yZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUtYnJvd3Nlci5qc1xuLy8gbW9kdWxlIGlkID0gNTFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IFRvbmUgZnJvbSAndG9uZSdcbmltcG9ydCB7IGNob2ljZSB9IGZyb20gJy4vdXRpbCdcblxuY29uc3QgcGxheWVyX2NvdW50ID0gMlxubGV0IHNhbXBsZV9pbmRleCA9IDBcblxuY29uc3QgY29tcHJlc3NvciA9IG5ldyBUb25lLkNvbXByZXNzb3IoLTMwLCAzKS50b01hc3RlcigpXG5cbmNvbnN0IHNhbXBsZXMgPSBbXG4gIHsgcm9vdDogMjI2LCBmbjogJ3NhbXBsZXMvMzgwNzM3X19jYWJsZWQtbWVzc19fc2Fuc3VsYS0wMS1hLXJhdy5tcDMnLCB9LFxuICB7IHJvb3Q6IDI2NywgZm46ICdzYW1wbGVzLzM4MDczNl9fY2FibGVkLW1lc3NfX3NhbnN1bGEtMDItYy1yYXcubXAzJywgfSxcbiAgeyByb290OiAzNDAsIGZuOiAnc2FtcGxlcy8zODA3MzVfX2NhYmxlZC1tZXNzX19zYW5zdWxhLTAzLWUtcmF3Lm1wMycsIH0sXG4gIHsgcm9vdDogNDUyLCBmbjogJ3NhbXBsZXMvMzgwNzMzX19jYWJsZWQtbWVzc19fc2Fuc3VsYS0wNi1hLTAyLXJhdy5tcDMnLCB9LFxuLy8gIHsgcm9vdDogNTA3LCBmbjogJ3NhbXBsZXMvMzgwNzM0X19jYWJsZWQtbWVzc19fc2Fuc3VsYS0wNy1iLWgtcmF3Lm1wMycsIH0sXG4vLyAgeyByb290OiA1MzUsIGZuOiAnc2FtcGxlcy8zODA3MzFfX2NhYmxlZC1tZXNzX19zYW5zdWxhLTA4LWMtcmF3Lm1wMycsIH0sXG4vLyAgeyByb290OiA2NzEsIGZuOiAnc2FtcGxlcy8zODA3MzJfX2NhYmxlZC1tZXNzX19zYW5zdWxhLTA5LWUtcmF3Lm1wMycsIH0sXG5dXG5cbnNhbXBsZXMuZm9yRWFjaCgoc2FtcGxlKSA9PiB7XG4gIHNhbXBsZS5wbGF5ZXJzID0gW11cbiAgc2FtcGxlLmluZGV4ID0gLTFcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbGF5ZXJfY291bnQ7IGkrKykge1xuICAgIGxldCBmbiA9IHNhbXBsZS5mblxuICAgIGlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5tYXRjaCgvYXNkZi51cy8pKSB7XG4gICAgICBmbiA9ICcvL2FzZGYudXMva2FsaW1iYS8nICsgZm5cbiAgICB9XG4gICAgbGV0IHBsYXllciA9IG5ldyBUb25lLlBsYXllcih7XG4gICAgICB1cmw6IGZuLFxuICAgICAgcmV0cmlnZ2VyOiB0cnVlLFxuICAgICAgcGxheWJhY2tSYXRlOiAxLFxuICAgIH0pXG4gICAgcGxheWVyLmNvbm5lY3QoY29tcHJlc3NvcilcbiAgICBzYW1wbGUucGxheWVycy5wdXNoKHBsYXllcilcbiAgfVxufSlcblxuZnVuY3Rpb24gcGxheSAoZnJlcSwgdm9sdW1lID0gMC4wKSB7XG4gIGNvbnN0IGJlc3QgPSB7IHNhbXBsZTogc2FtcGxlc1tzYW1wbGVfaW5kZXhdIH1cbiAgc2FtcGxlX2luZGV4ID0gKHNhbXBsZV9pbmRleCArIDEpICUgc2FtcGxlcy5sZW5ndGhcbiAgYmVzdC5zYW1wbGUuaW5kZXggPSAoYmVzdC5zYW1wbGUuaW5kZXggKyAxKSAlIHBsYXllcl9jb3VudFxuXG4gIGNvbnN0IHBsYXllciA9IGJlc3Quc2FtcGxlLnBsYXllcnNbIGJlc3Quc2FtcGxlLmluZGV4IF1cbiAgcGxheWVyLnBsYXliYWNrUmF0ZSA9IGZyZXEgLyBiZXN0LnNhbXBsZS5yb290XG4gIC8vIGNvbnNvbGUubG9nKHBsYXllcilcbiAgcGxheWVyLnZvbHVtZS52YWx1ZSA9IHZvbHVtZVxuICBzZXRUaW1lb3V0KCgpID0+IHsgcGxheWVyLnN0YXJ0KCkgfSwgMClcbn1cblxuZXhwb3J0IGRlZmF1bHQgeyBwbGF5IH1cblxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2xpYi9rYWxpbWJhLmpzIiwiaW1wb3J0IEludG9uYXRpb24gZnJvbSAnLi9pbnRvbmF0aW9uJ1xuXG5jb25zdCBtZWFudG9uZSA9IGAhIG1lYW5xdWFyLnNjbFxuIVxuMS80LWNvbW1hIG1lYW50b25lIHNjYWxlLiBQaWV0cm8gQWFyb24ncyB0ZW1wZXJhbWVudCAoMTUyMylcbiAxMlxuIVxuIDc2LjA0OTAwXG4gMTkzLjE1Njg2XG4gMzEwLjI2NDcxXG4gNS80XG4gNTAzLjQyMTU3XG4gNTc5LjQ3MDU3XG4gNjk2LjU3ODQzXG4gMjUvMTZcbiA4ODkuNzM1MjlcbiAxMDA2Ljg0MzE0XG4gMTA4Mi44OTIxNFxuIDIvMVxuYFxuXG5jb25zdCBzaGFyZXMgPSBgISBzaGFyZXMuc2NsXG4hXG5BIHNjYWxlIGJhc2VkIG9uIHNoYXJlcyBvZiB3ZWFsdGhcbiFcbjEuXG41LlxuMTUuXG4zMi5cbjUyLlxuNzguXG4xMTYuXG4xODIuXG41MjEuXG4xMDAwLlxuYFxuXG5jb25zdCBzaGFyZXNfc3VtID0gYCEgc2hhcmVzX3N1bS5zY2xcbiFcbkEgc2NhbGUgYmFzZWQgb24gc3VtbWluZyBzaGFyZXMgb2Ygd2VhbHRoXG4hXG4xXG42LjBcbjIxLjBcbjUzLjBcbjEwNS4wXG4xODMuMFxuMjk5LjBcbjQ4MS4wXG4xMDAyLjBcbjIvMVxuYFxuXG5jb25zdCBtYXZpbGEgPSBgISBtYXZpbGExMi5zY2xcbiFcbkEgMTItbm90ZSBtYXZpbGEgc2NhbGUgKGZvciB3YXJwaW5nIG1lYW50b25lLWJhc2VkIG11c2ljKSwgNS1saW1pdCBUT1BcbiAxMlxuIVxuLTMwLjk5NzE5XG4gMTYzLjUwNzcwXG4gMzU4LjAxMjU4XG4gMzI3LjAxNTQwXG4gNTIxLjUyMDI4XG4gNDkwLjUyMzEwXG4gNjg1LjAyNzk4XG4gNjU0LjAzMDgwXG4gODQ4LjUzNTY4XG4gMTA0My4wNDA1N1xuIDEwMTIuMDQzMzhcbiAxMjA2LjU0ODI2XG5gXG5cbmNvbnN0IGNhcmxvc19hbHBoYSA9IGAhIGNhcmxvc19hbHBoYS5zY2xcbiFcbldlbmR5IENhcmxvcycgQWxwaGEgc2NhbGUgd2l0aCBwZXJmZWN0IGZpZnRoIGRpdmlkZWQgaW4gbmluZVxuIDE4XG4hXG4gNzguMDAwMDBcbiAxNTYuMDAwMDBcbiAyMzQuMDAwMDBcbiAzMTIuMDAwMDBcbiAzOTAuMDAwMDBcbiA0NjguMDAwMDBcbiA1NDYuMDAwMDBcbiA2MjQuMDAwMDBcbiA3MDIuMDAwMDBcbiA3ODAuMDAwMDBcbiA4NTguMDAwMDBcbiA5MzYuMDAwMDBcbiAxMDE0LjAwMDAwXG4gMTA5Mi4wMDAwMFxuIDExNzAuMDAwMDBcbiAxMjQ4LjAwMDAwXG4gMTMyNi4wMDAwMFxuIDE0MDQuMDAwMDBcbmBcblxuY29uc3QgbGFtb250ZSA9IGAhIHlvdW5nLWxtX3BpYW5vLnNjbFxuIVxuTGFNb250ZSBZb3VuZydzIFdlbGwtVGVtcGVyZWQgUGlhbm9cbjEyXG4hXG41NjcvNTEyXG45LzhcbjE0Ny8xMjhcbjIxLzE2XG4xMzIzLzEwMjRcbjE4OS8xMjhcbjMvMlxuNDkvMzJcbjcvNFxuNDQxLzI1NlxuNjMvMzJcbjIvMVxuYFxuXG5jb25zdCBjb2x1bmRpID0gYCEgY29sdW5kaS5zY2xcbiFcbkNvbHVuZGkgc2NhbGVcbjEwXG4hXG45LzhcbjE3MS8xNDBcbjEzNy8xMTJcbjQzLzM1XG4zLzJcbjQyMS8yODBcbjIxMy8xNDBcbjI2My8xNTBcbjY2LzM1XG4yLzFcbmBcblxuY29uc3QgbGl1X21ham9yID0gYCEgbGl1X21ham9yLnNjbFxuIVxuTGludXMgTGl1J3MgTWFqb3IgU2NhbGUsIHNlZSBoaXMgMTk3OCBib29rLCBcIkludG9uYXRpb24gVGhlb3J5XCIgICAgICAgICAgICAgICAgIFxuIDdcbiFcbiAxMC85XG4gMTAwLzgxXG4gNC8zXG4gMy8yXG4gNS8zXG4gNTAvMjdcbiAyLzFcbmBcbmNvbnN0IGxpdV9wZW50YXRvbmljID0gYCEgbGl1X3BlbnQuc2NsXG4hXG5MaW51cyBMaXUncyBcInBlbnRhdG9uaWMgc2NhbGVcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gN1xuIVxuIDkvOFxuIDgxLzY0XG4gMjcvMjBcbiAzLzJcbiAyNy8xNlxuIDI0My8xMjhcbiA4MS80MFxuYFxuXG5jb25zdCBsaXVfbWlub3IgPSBgISBMSVVfTUlOb3Iuc2NsXG4hXG5MaW51cyBMaXUncyBIYXJtb25pYyBNaW5vciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIDdcbiFcbiAxMC85XG4gNi81XG4gNC8zXG4gNDAvMjdcbiA4LzVcbiA1MC8yN1xuIDIvMVxuYFxuXG5jb25zdCBsaXVfbWVsb2RpY19taW5vciA9IGAhIGxpdV9tZWwuc2NsXG4hXG5MaW51cyBMaXUncyBNZWxvZGljIE1pbm9yLCB1c2UgNSBhbmQgNyBkZXNjZW5kaW5nIGFuZCA2IGFuZCA4IGFzY2VuZGluZyAgICAgICAgIFxuIDlcbiFcbiAxMC85XG4gNi81XG4gNC8zXG4gMy8yXG4gODEvNTBcbiA1LzNcbiA5LzVcbiA1MC8yN1xuIDIvMVxuYFxuXG5jb25zdCBzY2FsZXMgPSBbXG4gIHtcbiAgICBpbnRlcnZhbHM6ICcxLzEgOS84IDUvNCA0LzMgMy8yIDUvMyAxNS84IDIvMScsXG4gICAgbmFtZTogXCJoYXJtb25pYyBzY2FsZVwiLFxuICB9LFxuICB7XG4gICAgcm9vdDogNDUwLFxuICAgIGludGVydmFsczogJzEvMSA5LzggNS80IDQvMyAzLzIgNS8zIDE1LzggMi8xJyxcbiAgICBuYW1lOiBcImhhcm1vbmljIHNjYWxlIEAgNDUwXCIsXG4gIH0sXG4gIHtcbiAgICB0ZXQ6IDUsXG4gIH0sXG4gIHtcbiAgICB0ZXQ6IDEyLFxuICB9LFxuICB7XG4gICAgdGV0OiAxNyxcbiAgfSxcbiAge1xuICAgIGludGVydmFsczogJzEvMSA4MS84MCAzMy8zMiAyMS8yMCAxNi8xNSAxMi8xMSAxMS8xMCAxMC85IDkvOCA4LzcgNy82IDMyLzI3IDYvNSAxMS85IDUvNCAxNC8xMSA5LzcgMjEvMTYgNC8zIDI3LzIwIDExLzggNy81IDEwLzcgMTYvMTEgNDAvMjcgMy8yIDMyLzIxIDE0LzkgMTEvNyA4LzUgMTgvMTEgNS8zIDI3LzE2IDEyLzcgNy80IDE2LzkgOS81IDIwLzExIDExLzYgMTUvOCA0MC8yMSA2NC8zMyAxNjAvODEgMi8xJyxcbiAgICBuYW1lOiBcImhhcnJ5IHBhcnRjaCBzY2FsZVwiLFxuICB9LFxuICB7XG4gICAgc2NsOiBsYW1vbnRlLFxuICB9LFxuICB7XG4gICAgc2NsOiBtZWFudG9uZSxcbiAgfSxcbiAge1xuICAgIHNjbDogbWF2aWxhLFxuICB9LFxuICB7XG4gICAgc2NsOiBjYXJsb3NfYWxwaGEsXG4gIH0sXG4gIHtcbiAgICBzY2w6IGNvbHVuZGksXG4gIH0sXG4gIHtcbiAgICBzY2w6IHNoYXJlcyxcbiAgfSxcbiAge1xuICAgIHNjbDogc2hhcmVzX3N1bSxcbiAgfSxcbiAge1xuICAgIHNjbDogbGl1X21ham9yLFxuICB9LFxuICB7XG4gICAgc2NsOiBsaXVfbWlub3IsXG4gIH0sXG4gIHtcbiAgICBzY2w6IGxpdV9tZWxvZGljX21pbm9yLFxuICB9LFxuICB7XG4gICAgc2NsOiBsaXVfcGVudGF0b25pYyxcbiAgfVxuXS5tYXAoIChvcHQpID0+IG5ldyBJbnRvbmF0aW9uKG9wdCkgKVxuXG5sZXQgc2NhbGUgPSBzY2FsZXNbMF1cbmxldCBoYW5kbGVDaGFuZ2UgPSBmdW5jdGlvbigpe31cblxuZnVuY3Rpb24gYnVpbGQgKCkge1xuICBzY2FsZXMuZm9yRWFjaCggKHNjYWxlLCBpKSA9PiB7XG4gICAgc2NhbGUuaGVhZGluZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgc2NhbGUuaGVhZGluZy5pbm5lckhUTUwgPSBzY2FsZS5uYW1lXG4gICAgc2NhbGUuaGVhZGluZy5jbGFzc0xpc3QuYWRkKCdoZWFkaW5nJylcbiAgICBzY2FsZS5oZWFkaW5nLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXtcbiAgICAgIHBpY2soaSlcbiAgICB9KVxuICAgIHNjYWxlX2xpc3QuYXBwZW5kQ2hpbGQoc2NhbGUuaGVhZGluZylcbiAgfSlcbiAgcGljaygwKVxufVxuZnVuY3Rpb24gYnVpbGRfb3B0aW9ucyhlbCkge1xuICBzY2FsZXMuZm9yRWFjaCggKHNjYWxlLCBpKSA9PiB7XG4gICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJylcbiAgICBvcHRpb24uaW5uZXJIVE1MID0gc2NhbGUubmFtZVxuICAgIG9wdGlvbi52YWx1ZSA9IGlcbiAgICBlbC5hcHBlbmRDaGlsZChvcHRpb24pXG4gIH0pXG4gIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24oZSl7XG4gICAgcGljayhlLnRhcmdldC52YWx1ZSlcbiAgfSlcbiAgcGljaygwKVxufVxuXG5mdW5jdGlvbiBwaWNrIChpKSB7XG4gIGlmIChzY2FsZSkge1xuICAgIHNjYWxlLmhlYWRpbmcgJiYgc2NhbGUuaGVhZGluZy5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3RlZCcpXG4gIH1cbiAgc2NhbGUgPSBzY2FsZXNbaV1cbiAgc2NhbGUuaGVhZGluZyAmJiBzY2FsZS5oZWFkaW5nLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdGVkJylcblx0aGFuZGxlQ2hhbmdlKHNjYWxlKVxufVxuXG5mdW5jdGlvbiBjdXJyZW50ICgpIHtcbiAgcmV0dXJuIHNjYWxlXG59XG5cbmZ1bmN0aW9uIG9uQ2hhbmdlIChmbikge1xuXHRoYW5kbGVDaGFuZ2UgPSBmblxufVxuXG5mdW5jdGlvbiBuYW1lcyAoKSB7XG5cdHJldHVybiBzY2FsZXMubWFwKCBzY2FsZSA9PiBzY2FsZS5uYW1lIClcbn1cblxuXG5leHBvcnQgZGVmYXVsdCB7IHNjYWxlcywgY3VycmVudCwgYnVpbGQsIGJ1aWxkX29wdGlvbnMsIHBpY2ssIG5hbWVzLCBvbkNoYW5nZSB9XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvbGliL3NjYWxlcy5qcyIsImltcG9ydCBOZXh1cyBmcm9tICduZXh1c3VpJ1xuXG5leHBvcnQgY29uc3QgbnggPSB3aW5kb3cubnggPSB7fVxuXG4vKiB1aSAtIHVwZGF0ZSBhbiBpbnQvZmxvYXQgdmFsdWUgKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZV92YWx1ZV9vbl9jaGFuZ2UoZWwsIGlkLCBpc19pbnQsIGZuKSB7XG4gIGNvbnN0IGxhYmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihpZCArICcgKyAudmFsJylcbiAgY29uc3QgdXBkYXRlID0gdiA9PiB7XG4gICAgbGFiZWwuaW5uZXJIVE1MID0gaXNfaW50ID8gcGFyc2VJbnQodikgOiB2LnRvRml4ZWQoMilcbiAgICBmbiAmJiBmbih2KVxuICB9XG4gIGVsLm9uKCdjaGFuZ2UnLCB1cGRhdGUpXG4gIHVwZGF0ZShlbC52YWx1ZSlcbiAgZWwudXBkYXRlID0gdXBkYXRlXG59XG5cbi8qIHVpIC0gdXBkYXRlIGEgcmFkaW8gYnV0dG9uICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVfcmFkaW9fdmFsdWVfb25fY2hhbmdlKGVsLCBpZCwgdmFsdWVzLCBmbikge1xuICBsZXQgb2xkX3YgPSBlbC5hY3RpdmVcbiAgY29uc3QgbGFiZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGlkICsgJyArIC52YWwnKVxuICBjb25zdCB1cGRhdGUgPSB2ID0+IHtcbiAgICBpZiAodiA9PT0gLTEpIHtcbiAgICAgIHYgPSBlbC5hY3RpdmUgPSBvbGRfdlxuICAgIH0gZWxzZSB7XG4gICAgICBvbGRfdiA9IHZcbiAgICB9XG4gICAgbGFiZWwuaW5uZXJIVE1MID0gdmFsdWVzW3ZdWzFdXG4gICAgZm4gJiYgZm4odilcbiAgfVxuICBlbC5vbignY2hhbmdlJywgdXBkYXRlKVxuICB1cGRhdGUoZWwuYWN0aXZlKVxuICBlbC51cGRhdGUgPSB1cGRhdGVcbn1cblxuLyogdWkgLSBiaW5kL2J1aWxkIGEgc2VsZWN0IGRyb3Bkb3duICovXG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZF9vcHRpb25zKGVsLCBsaXN0cywgZm4pIHtcbiAgT2JqZWN0LmtleXMobGlzdHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICBjb25zdCBsaXN0ID0gbGlzdHNba2V5XVxuICAgIGNvbnN0IG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpXG4gICAgb3B0aW9uLmlubmVySFRNTCA9IGxpc3QubmFtZVxuICAgIG9wdGlvbi52YWx1ZSA9IGtleVxuICAgIGVsLmFwcGVuZENoaWxkKG9wdGlvbilcbiAgfSlcbiAgZWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbihlKXtcbiAgICBmbihlLnRhcmdldC52YWx1ZSlcbiAgfSlcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9saWIvdWkuanMiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9pc0l0ZXJhYmxlMiA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL2lzLWl0ZXJhYmxlXCIpO1xuXG52YXIgX2lzSXRlcmFibGUzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaXNJdGVyYWJsZTIpO1xuXG52YXIgX2dldEl0ZXJhdG9yMiA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL2dldC1pdGVyYXRvclwiKTtcblxudmFyIF9nZXRJdGVyYXRvcjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRJdGVyYXRvcjIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIHNsaWNlSXRlcmF0b3IoYXJyLCBpKSB7XG4gICAgdmFyIF9hcnIgPSBbXTtcbiAgICB2YXIgX24gPSB0cnVlO1xuICAgIHZhciBfZCA9IGZhbHNlO1xuICAgIHZhciBfZSA9IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBfaSA9ICgwLCBfZ2V0SXRlcmF0b3IzLmRlZmF1bHQpKGFyciksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG4gICAgICAgIF9hcnIucHVzaChfcy52YWx1ZSk7XG5cbiAgICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgX2QgPSB0cnVlO1xuICAgICAgX2UgPSBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0pIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBfYXJyO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChhcnIsIGkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9pc0l0ZXJhYmxlMy5kZWZhdWx0KShPYmplY3QoYXJyKSkpIHtcbiAgICAgIHJldHVybiBzbGljZUl0ZXJhdG9yKGFyciwgaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpO1xuICAgIH1cbiAgfTtcbn0oKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYmFiZWwtcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXkuanNcbi8vIG1vZHVsZSBpZCA9IDU1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIk5leHVzXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIk5leHVzXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge30sXG4vKioqKioqLyBcdFx0XHRpZDogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsb2FkZWQ6IGZhbHNlXG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgX2ludGVyb3BSZXF1aXJlID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqW1wiZGVmYXVsdFwiXSA6IG9iajsgfTtcblx0XG5cdHZhciBOZXh1c1VJID0gX2ludGVyb3BSZXF1aXJlKF9fd2VicGFja19yZXF1aXJlX18oMSkpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBOZXh1c1VJO1xuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9O1xuXHRcblx0dmFyIF9pbnRlcm9wUmVxdWlyZSA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialtcImRlZmF1bHRcIl0gOiBvYmo7IH07XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGtleSBpbiBwcm9wcykgeyB2YXIgcHJvcCA9IHByb3BzW2tleV07IHByb3AuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKHByb3AudmFsdWUpIHByb3Aud3JpdGFibGUgPSB0cnVlOyB9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpOyB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH07XG5cdFxuXHRleHBvcnRzLmNvbG9ycyA9IGNvbG9ycztcblx0ZXhwb3J0cy5jb250ZXh0ID0gY29udGV4dDtcblx0ZXhwb3J0cy5jbG9jayA9IGNsb2NrO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcblx0ICB2YWx1ZTogdHJ1ZVxuXHR9KTtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgSW50ZXJmYWNlcyA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDIpKTtcblx0XG5cdHZhciBtYXRoID0gX2ludGVyb3BSZXF1aXJlKF9fd2VicGFja19yZXF1aXJlX18oNSkpO1xuXHRcblx0dmFyIFJhY2sgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXygzOCkpO1xuXHRcblx0dmFyIFR1bmUgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXyg0MCkpO1xuXHRcblx0dmFyIFRyYW5zZm9ybSA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9fd2VicGFja19yZXF1aXJlX18oMzkpKTtcblx0XG5cdHZhciBDb3VudGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOCk7XG5cdHZhciBSYWRpbyA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xuXHR2YXIgRHJ1bmsgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KTtcblx0dmFyIFNlcXVlbmNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNik7XG5cdHZhciBNYXRyaXggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcblx0XG5cdHZhciBXQUFDbG9jayA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDQyKSk7XG5cdFxuXHR2YXIgSW50ZXJ2YWwgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXyg0NSkpO1xuXHRcblx0LyoqXG5cdE5leHVzVUkgPT4gY3JlYXRlZCBhcyBOZXh1c1xuXHQqL1xuXHRcblx0dmFyIE5leHVzVUkgPSAoZnVuY3Rpb24gKCkge1xuXHQgIGZ1bmN0aW9uIE5leHVzVUkoY29udGV4dCkge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE5leHVzVUkpO1xuXHRcblx0ICAgIGZvciAodmFyIGtleSBpbiBJbnRlcmZhY2VzKSB7XG5cdCAgICAgIHRoaXNba2V5XSA9IEludGVyZmFjZXNba2V5XTtcblx0ICAgIH1cblx0XG5cdCAgICBmb3IgKHZhciBrZXkgaW4gbWF0aCkge1xuXHQgICAgICB0aGlzW2tleV0gPSBtYXRoW2tleV07XG5cdCAgICB9XG5cdFxuXHQgICAgdmFyIENvcmUgPSB7XG5cdCAgICAgIFJhY2s6IFJhY2tcblx0ICAgIH07XG5cdFxuXHQgICAgdmFyIE1vZGVscyA9IHtcblx0ICAgICAgQ291bnRlcjogQ291bnRlcixcblx0ICAgICAgUmFkaW86IFJhZGlvLFxuXHQgICAgICBEcnVuazogRHJ1bmssXG5cdCAgICAgIFNlcXVlbmNlOiBTZXF1ZW5jZSxcblx0ICAgICAgTWF0cml4OiBNYXRyaXhcblx0ICAgIH07XG5cdFxuXHQgICAgZm9yICh2YXIga2V5IGluIE1vZGVscykge1xuXHQgICAgICB0aGlzW2tleV0gPSBNb2RlbHNba2V5XTtcblx0ICAgIH1cblx0XG5cdCAgICBmb3IgKHZhciBrZXkgaW4gQ29yZSkge1xuXHQgICAgICB0aGlzW2tleV0gPSBDb3JlW2tleV07XG5cdCAgICB9XG5cdFxuXHQgICAgdmFyIERlZmF1bHRDb250ZXh0ID0gd2luZG93LkF1ZGlvQ29udGV4dCB8fCB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0O1xuXHQgICAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQgfHwgbmV3IERlZmF1bHRDb250ZXh0KCk7XG5cdFxuXHQgICAgdGhpcy50dW5lID0gbmV3IFR1bmUoKTtcblx0ICAgIHRoaXMubm90ZSA9IHRoaXMudHVuZS5ub3RlLmJpbmQodGhpcy50dW5lKTtcblx0XG5cdCAgICB0aGlzLmNsb2NrID0gbmV3IFdBQUNsb2NrKHRoaXMuX2NvbnRleHQpO1xuXHQgICAgdGhpcy5jbG9jay5zdGFydCgpO1xuXHQgICAgdGhpcy5JbnRlcnZhbCA9IEludGVydmFsO1xuXHRcblx0ICAgIHRoaXMuY29sb3JzID0ge1xuXHQgICAgICBhY2NlbnQ6IFwiIzJiYlwiLFxuXHQgICAgICBmaWxsOiBcIiNlZWVcIixcblx0ICAgICAgbGlnaHQ6IFwiI2ZmZlwiLFxuXHQgICAgICBkYXJrOiBcIiMzMzNcIixcblx0ICAgICAgbWVkaXVtTGlnaHQ6IFwiI2NjY1wiLFxuXHQgICAgICBtZWRpdW1EYXJrOiBcIiM2NjZcIlxuXHQgICAgfTtcblx0XG5cdCAgICB0aGlzLnRyYW5zZm9ybSA9IFRyYW5zZm9ybTtcblx0ICAgIHRoaXMuYWRkID0gVHJhbnNmb3JtLmFkZDtcblx0XG5cdCAgICB0aGlzLkFkZCA9IHt9O1xuXHQgICAgZm9yICh2YXIga2V5IGluIEludGVyZmFjZXMpIHtcblx0ICAgICAgdGhpcy5BZGRba2V5XSA9IFRyYW5zZm9ybS5hZGQuYmluZCh0aGlzLCBrZXkpO1xuXHQgICAgfVxuXHRcblx0ICAgIC8qIGNyZWF0ZSBkZWZhdWx0IGNvbXBvbmVudCBzaXplICovXG5cdCAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG5cdCAgICB2YXIgZXhpc3RpbmdTdHlsZXNoZWV0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic3R5bGVcIik7XG5cdCAgICB2YXIgZGVmYXVsdFNpemVEZWNsYXJhdGlvbiA9IFwiW25leHVzLXVpXXtoZWlnaHQ6NTAwMHB4O3dpZHRoOjUwMDBweH1cIjtcblx0ICAgIHZhciBkZWZhdWx0U3R5bGVOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuXHQgICAgZGVmYXVsdFN0eWxlTm9kZS50eXBlID0gXCJ0ZXh0L2Nzc1wiO1xuXHQgICAgZGVmYXVsdFN0eWxlTm9kZS5pbm5lckhUTUwgPSBkZWZhdWx0U2l6ZURlY2xhcmF0aW9uO1xuXHQgICAgaWYgKGV4aXN0aW5nU3R5bGVzaGVldHMubGVuZ3RoID4gMCkge1xuXHQgICAgICB2YXIgcGFyZW50ID0gZXhpc3RpbmdTdHlsZXNoZWV0c1swXS5wYXJlbnROb2RlO1xuXHQgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGRlZmF1bHRTdHlsZU5vZGUsIGV4aXN0aW5nU3R5bGVzaGVldHNbMF0pO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgZG9jdW1lbnQud3JpdGUoXCI8c3R5bGU+XCIgKyBkZWZhdWx0U2l6ZURlY2xhcmF0aW9uICsgXCI8L3N0eWxlPlwiKTtcblx0ICAgIH1cblx0ICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cdCAgfVxuXHRcblx0ICBfY3JlYXRlQ2xhc3MoTmV4dXNVSSwge1xuXHQgICAgY29udGV4dDoge1xuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dDtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAoY3R4KSB7XG5cdCAgICAgICAgdGhpcy5jbG9jay5zdG9wKCk7XG5cdCAgICAgICAgdGhpcy5fY29udGV4dCA9IGN0eDtcblx0ICAgICAgICB0aGlzLmNsb2NrID0gbmV3IFdBQUNsb2NrKHRoaXMuY29udGV4dCk7XG5cdCAgICAgICAgdGhpcy5jbG9jay5zdGFydCgpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBOZXh1c1VJO1xuXHR9KSgpO1xuXHRcblx0dmFyIE5leHVzID0gbmV3IE5leHVzVUkoKTtcblx0XG5cdGZ1bmN0aW9uIGNvbG9ycygpIHtcblx0ICByZXR1cm4gTmV4dXMuY29sb3JzO1xuXHR9XG5cdFxuXHRmdW5jdGlvbiBjb250ZXh0KCkge1xuXHQgIHJldHVybiBOZXh1cy5jb250ZXh0O1xuXHR9XG5cdFxuXHRmdW5jdGlvbiBjbG9jaygpIHtcblx0ICByZXR1cm4gTmV4dXMuY2xvY2s7XG5cdH1cblx0XG5cdGV4cG9ydHNbXCJkZWZhdWx0XCJdID0gTmV4dXM7XG5cbi8qKiovIH0pLFxuLyogMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSB7XG5cdCAgUG9zaXRpb246IF9fd2VicGFja19yZXF1aXJlX18oMyksXG5cdCAgU2xpZGVyOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KSxcblx0ICBUb2dnbGU6IF9fd2VicGFja19yZXF1aXJlX18oMTUpLFxuXHQgIC8qICBSYW5nZTogcmVxdWlyZSgnLi9yYW5nZXNsaWRlcicpLFxuXHQgICAgV2F2ZWZvcm06IHJlcXVpcmUoJy4vd2F2ZWZvcm0nKSwgKi9cblx0ICBCdXR0b246IF9fd2VicGFja19yZXF1aXJlX18oMTYpLFxuXHQgIFRleHRCdXR0b246IF9fd2VicGFja19yZXF1aXJlX18oMTgpLFxuXHQgIFJhZGlvQnV0dG9uOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KSxcblx0ICBOdW1iZXI6IF9fd2VicGFja19yZXF1aXJlX18oMjApLFxuXHQgIFNlbGVjdDogX193ZWJwYWNrX3JlcXVpcmVfXygyMSksXG5cdCAgRGlhbDogX193ZWJwYWNrX3JlcXVpcmVfXygyMiksXG5cdCAgUGlhbm86IF9fd2VicGFja19yZXF1aXJlX18oMjMpLFxuXHQgIFNlcXVlbmNlcjogX193ZWJwYWNrX3JlcXVpcmVfXygyNCksXG5cdCAgUGFuMkQ6IF9fd2VicGFja19yZXF1aXJlX18oMjkpLFxuXHQgIFRpbHQ6IF9fd2VicGFja19yZXF1aXJlX18oMzApLFxuXHQgIE11bHRpc2xpZGVyOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKSxcblx0ICBQYW46IF9fd2VicGFja19yZXF1aXJlX18oMzMpLFxuXHQgIEVudmVsb3BlOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KSxcblx0ICBTcGVjdHJvZ3JhbTogX193ZWJwYWNrX3JlcXVpcmVfXygzNSksXG5cdCAgTWV0ZXI6IF9fd2VicGFja19yZXF1aXJlX18oMzYpLFxuXHQgIE9zY2lsbG9zY29wZTogX193ZWJwYWNrX3JlcXVpcmVfXygzNylcblx0fTtcblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH07XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGtleSBpbiBwcm9wcykgeyB2YXIgcHJvcCA9IHByb3BzW2tleV07IHByb3AuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKHByb3AudmFsdWUpIHByb3Aud3JpdGFibGUgPSB0cnVlOyB9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpOyB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHR2YXIgX2dldCA9IGZ1bmN0aW9uIGdldChvYmplY3QsIHByb3BlcnR5LCByZWNlaXZlcikgeyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IHJldHVybiBnZXQocGFyZW50LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpOyB9IH0gZWxzZSBpZiAoXCJ2YWx1ZVwiIGluIGRlc2MgJiYgZGVzYy53cml0YWJsZSkgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH07XG5cdFxuXHR2YXIgX2luaGVyaXRzID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH07XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH07XG5cdFxuXHR2YXIgc3ZnID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblx0dmFyIEludGVyZmFjZSA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5cdHZhciBTdGVwID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG5cdFxuXHR2YXIgSW50ZXJhY3Rpb24gPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKSk7XG5cdFxuXHQvKipcblx0KiBQb3NpdGlvblxuXHQqXG5cdCogQGRlc2NyaXB0aW9uIFR3by1kaW1lbnNpb25hbCB0b3VjaCBzbGlkZXIuXG5cdCpcblx0KiBAZGVtbyA8c3BhbiBuZXh1cy11aT1cInBvc2l0aW9uXCI+PC9zcGFuPlxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgcG9zaXRpb24gPSBuZXcgTmV4dXMuUG9zaXRpb24oJyN0YXJnZXQnKVxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgcG9zaXRpb24gPSBuZXcgTmV4dXMuUG9zaXRpb24oJyN0YXJnZXQnLHtcblx0KiAgICdzaXplJzogWzIwMCwyMDBdLFxuXHQqICAgJ21vZGUnOiAnYWJzb2x1dGUnLCAgLy8gXCJhYnNvbHV0ZVwiIG9yIFwicmVsYXRpdmVcIlxuXHQqICAgJ3gnOiAwLjUsICAvLyBpbml0aWFsIHggdmFsdWVcblx0KiAgICdtaW5YJzogMCxcblx0KiAgICdtYXhYJzogMSxcblx0KiAgICdzdGVwWCc6IDAsXG5cdCogICAneSc6IDAuNSwgIC8vIGluaXRpYWwgeSB2YWx1ZVxuXHQqICAgJ21pblknOiAwLFxuXHQqICAgJ21heFknOiAxLFxuXHQqICAgJ3N0ZXBZJzogMFxuXHQqIH0pXG5cdCpcblx0KiBAb3V0cHV0XG5cdCogY2hhbmdlXG5cdCogRmlyZXMgYW55IHRpbWUgdGhlIGludGVyZmFjZSdzIHZhbHVlIGNoYW5nZXMuIDxicj5cblx0KiBUaGUgZXZlbnQgZGF0YSBpcyBhbiBvYmplY3Qgd2l0aCB4IGFuZCB5IHByb3BlcnRpZXMgY29udGFpbmluZyB0aGUgeCBhbmQgeSB2YWx1ZXMgb2YgdGhlIGludGVyZmFjZS5cblx0KlxuXHQqIEBvdXRwdXRleGFtcGxlXG5cdCogcG9zaXRpb24ub24oJ2NoYW5nZScsZnVuY3Rpb24odikge1xuXHQqICAgY29uc29sZS5sb2codik7XG5cdCogfSlcblx0KlxuXHQqXG5cdCovXG5cdFxuXHR2YXIgUG9zaXRpb24gPSAoZnVuY3Rpb24gKF9JbnRlcmZhY2UpIHtcblx0ICBmdW5jdGlvbiBQb3NpdGlvbigpIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQb3NpdGlvbik7XG5cdFxuXHQgICAgdmFyIG9wdGlvbnMgPSBbXCJ2YWx1ZVwiXTtcblx0XG5cdCAgICB2YXIgZGVmYXVsdHMgPSB7XG5cdCAgICAgIHNpemU6IFsyMDAsIDIwMF0sXG5cdCAgICAgIG1vZGU6IFwiYWJzb2x1dGVcIixcblx0ICAgICAgbWluWDogMCxcblx0ICAgICAgbWF4WDogMSxcblx0ICAgICAgc3RlcFg6IDAsXG5cdCAgICAgIHg6IDAuNSxcblx0ICAgICAgbWluWTogMCxcblx0ICAgICAgbWF4WTogMSxcblx0ICAgICAgc3RlcFk6IDAsXG5cdCAgICAgIHk6IDAuNVxuXHQgICAgfTtcblx0XG5cdCAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihQb3NpdGlvbi5wcm90b3R5cGUpLCBcImNvbnN0cnVjdG9yXCIsIHRoaXMpLmNhbGwodGhpcywgYXJndW1lbnRzLCBvcHRpb25zLCBkZWZhdWx0cyk7XG5cdFxuXHQgICAgdGhpcy5feCA9IG5ldyBTdGVwKHRoaXMuc2V0dGluZ3MubWluWCwgdGhpcy5zZXR0aW5ncy5tYXhYLCB0aGlzLnNldHRpbmdzLnN0ZXBYLCB0aGlzLnNldHRpbmdzLngpO1xuXHQgICAgdGhpcy5feSA9IG5ldyBTdGVwKHRoaXMuc2V0dGluZ3MubWluWSwgdGhpcy5zZXR0aW5ncy5tYXhZLCB0aGlzLnNldHRpbmdzLnN0ZXBZLCB0aGlzLnNldHRpbmdzLnkpO1xuXHRcblx0ICAgIHRoaXMucG9zaXRpb24gPSB7XG5cdCAgICAgIHg6IG5ldyBJbnRlcmFjdGlvbi5IYW5kbGUodGhpcy5zZXR0aW5ncy5tb2RlLCBcImhvcml6b250YWxcIiwgWzAsIHRoaXMud2lkdGhdLCBbdGhpcy5oZWlnaHQsIDBdKSxcblx0ICAgICAgeTogbmV3IEludGVyYWN0aW9uLkhhbmRsZSh0aGlzLnNldHRpbmdzLm1vZGUsIFwidmVydGljYWxcIiwgWzAsIHRoaXMud2lkdGhdLCBbdGhpcy5oZWlnaHQsIDBdKVxuXHQgICAgfTtcblx0ICAgIHRoaXMucG9zaXRpb24ueC52YWx1ZSA9IHRoaXMuX3gubm9ybWFsaXplZDtcblx0ICAgIHRoaXMucG9zaXRpb24ueS52YWx1ZSA9IHRoaXMuX3kubm9ybWFsaXplZDtcblx0XG5cdCAgICB0aGlzLmluaXQoKTtcblx0ICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgfVxuXHRcblx0ICBfaW5oZXJpdHMoUG9zaXRpb24sIF9JbnRlcmZhY2UpO1xuXHRcblx0ICBfY3JlYXRlQ2xhc3MoUG9zaXRpb24sIHtcblx0ICAgIGJ1aWxkSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgdGhpcy5rbm9iID0gc3ZnLmNyZWF0ZShcImNpcmNsZVwiKTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5rbm9iKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNpemVJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNpemVJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIHRoaXMucG9zaXRpb24ueC5yZXNpemUoWzAsIHRoaXMud2lkdGhdLCBbdGhpcy5oZWlnaHQsIDBdKTtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uLnkucmVzaXplKFswLCB0aGlzLndpZHRoXSwgW3RoaXMuaGVpZ2h0LCAwXSk7XG5cdFxuXHQgICAgICAgIHRoaXMuX21pbkRpbWVuc2lvbiA9IE1hdGgubWluKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblx0XG5cdCAgICAgICAgdGhpcy5rbm9iUmFkaXVzID0ge1xuXHQgICAgICAgICAgb2ZmOiB+IH4odGhpcy5fbWluRGltZW5zaW9uIC8gMTAwKSAqIDUgKyA1IH07XG5cdCAgICAgICAgdGhpcy5rbm9iUmFkaXVzLm9uID0gdGhpcy5rbm9iUmFkaXVzLm9mZiAqIDI7XG5cdFxuXHQgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJjeFwiLCB0aGlzLndpZHRoIC8gMik7XG5cdCAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImN5XCIsIHRoaXMuaGVpZ2h0IC8gMik7XG5cdCAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcInJcIiwgdGhpcy5rbm9iUmFkaXVzLm9mZik7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjb2xvckludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY29sb3JJbnRlcmZhY2UoKSB7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuY29sb3JzLmZpbGw7XG5cdCAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5jb2xvcnMuYWNjZW50KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlbmRlcjoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmNsaWNrZWQpIHtcblx0ICAgICAgICAgIC8vICB0aGlzLmtub2JSYWRpdXMgPSAzMDtcblx0ICAgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJyXCIsIHRoaXMua25vYlJhZGl1cy5vbik7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIC8vICB0aGlzLmtub2JSYWRpdXMgPSAxNTtcblx0ICAgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJyXCIsIHRoaXMua25vYlJhZGl1cy5vZmYpO1xuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgdGhpcy5rbm9iQ29vcmRpbmF0ZXMgPSB7XG5cdCAgICAgICAgICB4OiB0aGlzLl94Lm5vcm1hbGl6ZWQgKiB0aGlzLndpZHRoLFxuXHQgICAgICAgICAgeTogdGhpcy5oZWlnaHQgLSB0aGlzLl95Lm5vcm1hbGl6ZWQgKiB0aGlzLmhlaWdodFxuXHQgICAgICAgIH07XG5cdFxuXHQgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJjeFwiLCB0aGlzLmtub2JDb29yZGluYXRlcy54KTtcblx0ICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiY3lcIiwgdGhpcy5rbm9iQ29vcmRpbmF0ZXMueSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjbGljazoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xpY2soKSB7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvbi54LmFuY2hvciA9IHRoaXMubW91c2U7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvbi55LmFuY2hvciA9IHRoaXMubW91c2U7XG5cdCAgICAgICAgdGhpcy5tb3ZlKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtb3ZlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBtb3ZlKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmNsaWNrZWQpIHtcblx0ICAgICAgICAgIHRoaXMucG9zaXRpb24ueC51cGRhdGUodGhpcy5tb3VzZSk7XG5cdCAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkudXBkYXRlKHRoaXMubW91c2UpO1xuXHQgICAgICAgICAgdGhpcy5feC51cGRhdGVOb3JtYWwodGhpcy5wb3NpdGlvbi54LnZhbHVlKTtcblx0ICAgICAgICAgIHRoaXMuX3kudXBkYXRlTm9ybWFsKHRoaXMucG9zaXRpb24ueS52YWx1ZSk7XG5cdCAgICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwge1xuXHQgICAgICAgICAgICB4OiB0aGlzLl94LnZhbHVlLFxuXHQgICAgICAgICAgICB5OiB0aGlzLl95LnZhbHVlXG5cdCAgICAgICAgICB9KTtcblx0ICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVsZWFzZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVsZWFzZSgpIHtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgeDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgICogVGhlIGludGVyZmFjZSdzIHggdmFsdWUuIFdoZW4gc2V0LCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgYWRqdXN0IHRvIGZpdCBtaW4vbWF4L3N0ZXAgc2V0dGluZ3Mgb2YgdGhlIGludGVyZmFjZS5cblx0ICAgICAgKiBAdHlwZSB7b2JqZWN0fVxuXHQgICAgICAqIEBleGFtcGxlIHBvc2l0aW9uLnggPSAwLjU7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5feC52YWx1ZTtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICB0aGlzLl94LnVwZGF0ZSh2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHtcblx0ICAgICAgICAgIHg6IHRoaXMuX3gudmFsdWUsXG5cdCAgICAgICAgICB5OiB0aGlzLl95LnZhbHVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHk6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICAqIFRoZSBpbnRlcmZhY2UncyB5IHZhbHVlcy4gV2hlbiBzZXQsIGl0IHdpbGwgYXV0b21hdGljYWxseSBhZGp1c3QgdG8gZml0IG1pbi9tYXgvc3RlcCBzZXR0aW5ncyBvZiB0aGUgaW50ZXJmYWNlLlxuXHQgICAgICAqIEB0eXBlIHtvYmplY3R9XG5cdCAgICAgICogQGV4YW1wbGUgcG9zaXRpb24ueCA9IDAuNTtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl95LnZhbHVlO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIHRoaXMuX3kudXBkYXRlKHZhbHVlKTtcblx0ICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwge1xuXHQgICAgICAgICAgeDogdGhpcy5feC52YWx1ZSxcblx0ICAgICAgICAgIHk6IHRoaXMuX3kudmFsdWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbm9ybWFsaXplZDoge1xuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgeDogdGhpcy5feC5ub3JtYWxpemVkLFxuXHQgICAgICAgICAgeTogdGhpcy5feS5ub3JtYWxpemVkXG5cdCAgICAgICAgfTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1pblg6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICAqIFRoZSBsb3dlciBsaW1pdCBvZiB2YWx1ZSBvbiB0aGUgeCBheGlzXG5cdCAgICAgICogQHR5cGUge29iamVjdH1cblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl94Lm1pbjtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuXHQgICAgICAgIHRoaXMuX3gubWluID0gdjtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbWluWToge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgICogVGhlIGxvd2VyIGxpbWl0IG9mIHZhbHVlIG9uIHRoZSB5IGF4aXNcblx0ICAgICAgKiBAdHlwZSB7b2JqZWN0fVxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3kubWluO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5feS5taW4gPSB2O1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtYXhYOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgKiBUaGUgdXBwZXIgbGltaXQgb2YgdmFsdWUgb24gdGhlIHggYXhpc1xuXHQgICAgICAqIEB0eXBlIHtvYmplY3R9XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5feC5tYXg7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLl94Lm1heCA9IHY7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1heFk6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICAqIFRoZSB1cHBlciBsaW1pdCBvZiB2YWx1ZSBvbiB0aGUgeSBheGlzXG5cdCAgICAgICogQHR5cGUge29iamVjdH1cblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl95Lm1heDtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuXHQgICAgICAgIHRoaXMuX3kubWF4ID0gdjtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc3RlcFg6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICAqIFRoZSBpbmNyZW1lbnRhbCBzdGVwIG9mIHZhbHVlcyBvbiB0aGUgeCBheGlzXG5cdCAgICAgICogQHR5cGUge29iamVjdH1cblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl94LnN0ZXA7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLl94LnN0ZXAgPSB2O1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzdGVwWToge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgICogVGhlIGluY3JlbWVudGFsIHN0ZXAgb2YgdmFsdWVzIG9uIHRoZSB5IGF4aXNcblx0ICAgICAgKiBAdHlwZSB7b2JqZWN0fVxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3kuc3RlcDtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuXHQgICAgICAgIHRoaXMuX3kuc3RlcCA9IHY7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1vZGU6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBBYnNvbHV0ZSBtb2RlIChwb3NpdGlvbidzIHZhbHVlIGp1bXBzIHRvIG1vdXNlIGNsaWNrIHBvc2l0aW9uKSBvciByZWxhdGl2ZSBtb2RlIChtb3VzZSBkcmFnIGNoYW5nZXMgdmFsdWUgcmVsYXRpdmUgdG8gaXRzIGN1cnJlbnQgcG9zaXRpb24pLiBEZWZhdWx0OiBcImFic29sdXRlXCIuXG5cdCAgICAgIEB0eXBlIHtzdHJpbmd9XG5cdCAgICAgIEBleGFtcGxlIHBvc2l0aW9uLm1vZGUgPSBcInJlbGF0aXZlXCI7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbi54Lm1vZGU7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uLngubW9kZSA9IHY7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvbi55Lm1vZGUgPSB2O1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBQb3NpdGlvbjtcblx0fSkoSW50ZXJmYWNlKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gUG9zaXRpb247XG5cbi8qKiovIH0pLFxuLyogNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIG1hdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSB7XG5cdFxuXHQgIGNyZWF0ZTogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB0eXBlKTtcblx0ICB9LFxuXHRcblx0ICBhcmM6IGZ1bmN0aW9uICh4LCB5LCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlKSB7XG5cdFxuXHQgICAgdmFyIHN0YXJ0ID0gbWF0aC50b0NhcnRlc2lhbihyYWRpdXMsIGVuZEFuZ2xlKTtcblx0ICAgIHZhciBlbmQgPSBtYXRoLnRvQ2FydGVzaWFuKHJhZGl1cywgc3RhcnRBbmdsZSk7XG5cdFxuXHQgICAgdmFyIGxhcmdlQXJjRmxhZyA9IGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSA8PSAxODAgPyBcIjBcIiA6IFwiMVwiO1xuXHRcblx0ICAgIHZhciBkID0gW1wiTVwiLCBzdGFydC54ICsgeCwgc3RhcnQueSArIHksIFwiQVwiLCByYWRpdXMsIHJhZGl1cywgMCwgbGFyZ2VBcmNGbGFnLCAwLCBlbmQueCArIHgsIGVuZC55ICsgeV0uam9pbihcIiBcIik7XG5cdFxuXHQgICAgcmV0dXJuIGQ7XG5cdCAgfSxcblx0XG5cdCAgcmFkaWFsR3JhZGllbnQ6IGZ1bmN0aW9uIChkZWZzLCBudW1iZXJPZlN0b3BzKSB7XG5cdFxuXHQgICAgdmFyIGlkID0gXCJncmFkaWVudFwiICsgbWF0aC5yaSgxMDAwMDAwMDAwMDApO1xuXHQgICAgdmFyIHN0b3BzID0gW107XG5cdFxuXHQgICAgdmFyIGdyYWRpZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJyYWRpYWxHcmFkaWVudFwiKTtcblx0ICAgIGdyYWRpZW50LnNldEF0dHJpYnV0ZShcImlkXCIsIGlkKTtcblx0ICAgIGdyYWRpZW50LnNldEF0dHJpYnV0ZShcImN4XCIsIFwiNTAlXCIpO1xuXHQgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlKFwiY3lcIiwgXCI1MCVcIik7XG5cdCAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGUoXCJyXCIsIFwiNTAlXCIpO1xuXHRcblx0ICAgIGRlZnMuYXBwZW5kQ2hpbGQoZ3JhZGllbnQpO1xuXHRcblx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZTdG9wczsgaSsrKSB7XG5cdCAgICAgIHZhciBfc3RvcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwic3RvcFwiKTtcblx0ICAgICAgX3N0b3Auc2V0QXR0cmlidXRlKFwiaWRcIiwgXCJzdG9wXCIgKyBpKTtcblx0ICAgICAgLy9zdG9wLnNldEF0dHJpYnV0ZSgnb2Zmc2V0JywgJzcwJScpO1xuXHQgICAgICAvL3N0b3Auc2V0QXR0cmlidXRlKCdzdG9wLWNvbG9yJywgJ1doaXRlJyk7XG5cdCAgICAgIGdyYWRpZW50LmFwcGVuZENoaWxkKF9zdG9wKTtcblx0ICAgICAgc3RvcHMucHVzaChfc3RvcCk7XG5cdCAgICB9XG5cdFxuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgaWQ6IGlkLFxuXHQgICAgICBzdG9wczogc3RvcHMsXG5cdCAgICAgIGVsZW1lbnQ6IGdyYWRpZW50XG5cdCAgICB9O1xuXHQgIH1cblx0XG5cdH07XG5cbi8qKiovIH0pLFxuLyogNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0LyoqXG5cdCAqIExpbWl0IGEgbnVtYmVyIHRvIHdpdGhpbiBhIG1pbmltdW0gYW5kIG1heGltdW1cblx0ICogQHBhcmFtICB7bnVtYmVyfSB2YWx1ZSBJbnB1dCB2YWx1ZVxuXHQgKiBAcGFyYW0gIHtudW1iZXJ9IG1pbiAgIExvd2VyIGxpbWl0XG5cdCAqIEBwYXJhbSAge251bWJlcn0gbWF4ICAgVXBwZXIgbGltaXRcblx0ICogQHJldHVybiB7bnVtYmVyfSAgICAgICBUaGUgaW5wdXQgdmFsdWUgY29uc3RyYWluZWQgd2l0aGluIHRoZSBsb3dlciBhbmQgdXBwZXIgbGltaXRzXG5cdCAqIEBleGFtcGxlXG5cdCAqIE5leHVzLmNsaXAoMTEsMCwxMCkgICAvLyByZXR1cm5zIDEwXG5cdCAqIE5leHVzLmNsaXAoLTEsMCwxMCkgICAvLyByZXR1cm5zIDBcblx0ICogTmV4dXMuY2xpcCg1LDAsMTApICAgIC8vIHJldHVybnMgNVxuXHQgKi9cblx0XG5cdGV4cG9ydHMuY2xpcCA9IGZ1bmN0aW9uICh2YWx1ZSwgbWluLCBtYXgpIHtcblx0ICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgodmFsdWUsIG1pbiksIG1heCk7XG5cdH07XG5cdFxuXHRleHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uICh2YWx1ZSwgbWluLCBtYXgpIHtcblx0ICByZXR1cm4gKHZhbHVlIC0gbWluKSAvIChtYXggLSBtaW4pO1xuXHR9O1xuXHRcblx0LyoqXG5cdCAqIFNjYWxlIGEgdmFsdWUgZnJvbSBvbmUgcmFuZ2UgdG8gYW5vdGhlciByYW5nZS5cblx0ICogQHBhcmFtICB7bnVtYmVyfSBpbk51bSAgSW5wdXQgdmFsdWVcblx0ICogQHBhcmFtICB7bnVtYmVyfSBpbk1pbiAgSW5wdXQgcmFuZ2UgbWluaW11bVxuXHQgKiBAcGFyYW0gIHtudW1iZXJ9IGluTWF4ICBJbnB1dCByYW5nZSBtYXhpbXVtXG5cdCAqIEBwYXJhbSAge251bWJlcn0gb3V0TWluIE91dHB1dCByYW5nZSBtaW5pbXVtXG5cdCAqIEBwYXJhbSAge251bWJlcn0gb3V0TWF4IE91dHB1dCByYW5nZSBtYXhpbXVtXG5cdCAqIEByZXR1cm4ge251bWJlcn0gICAgICAgIFRoZSBpbnB1dCB2YWx1ZSBzY2FsZWQgdG8gaXRzIG5ldyByYW5nZVxuXHQgKiBAZXhhbXBsZVxuXHQgKiBOZXh1cy5zY2FsZSgwLjUsMCwxLDAsMTApICAgLy8gcmV0dXJucyA1XG5cdCAqIE5leHVzLnNjYWxlKDAuOSwwLDEsMSwwKSAgICAvLyByZXR1cm5zIDAuMVxuXHQgKi9cblx0ZXhwb3J0cy5zY2FsZSA9IGZ1bmN0aW9uIChpbk51bSwgaW5NaW4sIGluTWF4LCBvdXRNaW4sIG91dE1heCkge1xuXHQgIGlmIChpbk1pbiA9PT0gaW5NYXgpIHtcblx0ICAgIHJldHVybiBvdXRNaW47XG5cdCAgfVxuXHQgIHJldHVybiAoaW5OdW0gLSBpbk1pbikgKiAob3V0TWF4IC0gb3V0TWluKSAvIChpbk1heCAtIGluTWluKSArIG91dE1pbjtcblx0fTtcblx0XG5cdGV4cG9ydHMudG9Qb2xhciA9IGZ1bmN0aW9uICh4LCB5KSB7XG5cdCAgdmFyIHIgPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG5cdFxuXHQgIHZhciB0aGV0YSA9IE1hdGguYXRhbjIoeSwgeCk7XG5cdCAgaWYgKHRoZXRhIDwgMCkge1xuXHQgICAgdGhldGEgPSB0aGV0YSArIDIgKiBNYXRoLlBJO1xuXHQgIH1cblx0ICByZXR1cm4geyByYWRpdXM6IHIsIGFuZ2xlOiB0aGV0YSB9O1xuXHR9O1xuXHRcblx0ZXhwb3J0cy50b0NhcnRlc2lhbiA9IGZ1bmN0aW9uIChyYWRpdXMsIGFuZ2xlKSB7XG5cdCAgdmFyIGNvcyA9IE1hdGguY29zKGFuZ2xlKTtcblx0ICB2YXIgc2luID0gTWF0aC5zaW4oYW5nbGUpO1xuXHQgIHJldHVybiB7IHg6IHJhZGl1cyAqIGNvcywgeTogcmFkaXVzICogc2luICogLTEgfTtcblx0fTtcblx0Lypcblx0ZXhwb3J0cy5wb2xhclRvQ2FydGVzaWFuKGNlbnRlclgsIGNlbnRlclksIHJhZGl1cywgYW5nbGVJbkRlZ3JlZXMpIHtcblx0ICB2YXIgYW5nbGVJblJhZGlhbnMgPSAoYW5nbGVJbkRlZ3JlZXMtOTApICogTWF0aC5QSSAvIDE4MC4wO1xuXHRcblx0ICByZXR1cm4ge1xuXHQgICAgeDogY2VudGVyWCArIChyYWRpdXMgKiBNYXRoLmNvcyhhbmdsZUluUmFkaWFucykpLFxuXHQgICAgeTogY2VudGVyWSArIChyYWRpdXMgKiBNYXRoLnNpbihhbmdsZUluUmFkaWFucykpXG5cdCAgfTtcblx0fSAgKi9cblx0XG5cdGV4cG9ydHMucHJ1bmUgPSBmdW5jdGlvbiAoZGF0YSwgc2NhbGUpIHtcblx0ICByZXR1cm4gcGFyc2VGbG9hdChkYXRhLnRvRml4ZWQoc2NhbGUpKTtcblx0fTtcblx0XG5cdGV4cG9ydHMuaW52ZXJ0ID0gZnVuY3Rpb24gKGluTnVtKSB7XG5cdCAgcmV0dXJuIGV4cG9ydHMuc2NhbGUoaW5OdW0sIDEsIDAsIDAsIDEpO1xuXHR9O1xuXHRcblx0LyoqXG5cdCAqIENvbnZlcnQgYSBNSURpIG5vdGUgbnVtYmVyIHRvIGEgZnJlcXVlbmN5IHZhbHVlIGluIGVxdWFsIHRlbXBlcmFtZW50LlxuXHQgKiBAcGFyYW0gIHtudW1iZXJ9IG1pZGkgTUlESSBub3RlIHZhbHVlXG5cdCAqIEByZXR1cm4ge251bWJlcn0gICAgICBGcmVxdWVuY2UgdmFsdWVcblx0ICogQGV4YW1wbGVcblx0ICogTmV4dXMubXRvZig2MCkgIC8vIHJldHVybnMgdGhlIGZyZXF1ZW5jeSBudW1iZXIgb2YgTWlkZGxlIENcblx0ICovXG5cdGV4cG9ydHMubXRvZiA9IGZ1bmN0aW9uIChtaWRpKSB7XG5cdCAgcmV0dXJuIE1hdGgucG93KDIsIChtaWRpIC0gNjkpIC8gMTIpICogNDQwO1xuXHR9O1xuXHRcblx0LyoqXG5cdCAqIEludGVycG9sYXRlIGJldHdlZW4gdHdvIG51bWJlcnNcblx0ICogQHBhcmFtICB7bnVtYmVyfSBsb2MgSW50ZXJwb2xhdGlvbiBpbmRleCAoMC0xKVxuXHQgKiBAcGFyYW0gIHtudW1iZXJ9IG1pbiBMb3dlciB2YWx1ZVxuXHQgKiBAcGFyYW0gIHtudW1iZXJ9IG1heCBVcHBlciB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtudW1iZXJ9ICAgICBJbnRlcnBvbGF0ZWQgdmFsdWVcblx0ICogQGV4YW1wbGVcblx0ICogTmV4dXMuaW50ZXJwKDAuNSwyLDQpICAgLy8gcmV0dXJucyAzXG5cdCAqIE5leHVzLmludGVycCgwLjEsMCwxMCkgICAgIC8vIHJldHVybnMgMVxuXHQgKi9cblx0ZXhwb3J0cy5pbnRlcnAgPSBmdW5jdGlvbiAobG9jLCBtaW4sIG1heCkge1xuXHQgIHJldHVybiBsb2MgKiAobWF4IC0gbWluKSArIG1pbjtcblx0fTtcblx0XG5cdC8qKlxuXHQgKiBSZXR1cm4gYSByYW5kb20gY2hvaWNlIGZyb20gYSBsaXN0IG9mIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJuIHt2YXJpb3VzfSBPbmUgcmFuZG9tIGFyZ3VtZW50XG5cdCAqIEBleGFtcGxlXG5cdCAqIE5leHVzLnBpY2soMSwyLDMsNCkgICAvLyByZXR1cm5zIDEsIDIsIDMsIG9yIDRcblx0ICogTmV4dXMucGljayhmdW5jdGlvbjEsZnVuY3Rpb24yKSAgIC8vIHJldHVybnMgZWl0aGVyIGZ1bmN0aW9uMSBvciBmdW5jdGlvbjJcblx0ICovXG5cdGV4cG9ydHMucGljayA9IGZ1bmN0aW9uICgpIHtcblx0ICByZXR1cm4gYXJndW1lbnRzW34gfihNYXRoLnJhbmRvbSgpICogYXJndW1lbnRzLmxlbmd0aCldO1xuXHR9O1xuXHRcblx0LyoqXG5cdCAqIFJldHVybnMgYW4gb2N0YXZlIG11bHRpcGxpZXIgZm9yIGZyZXF1ZW5jeSB2YWx1ZXNcblx0ICogQHBhcmFtICB7bnVtYmVyfSBudW0gUmVsYXRpdmUgb2N0YXZlIG51bWJlciAoZS5nLiAtMSBmb3Igb25lIG9jdGF2ZSBkb3duLCAxIGZvciBvbmUgb2N0YXZlIHVwKVxuXHQgKiBAcmV0dXJuIHtudW1iZXJ9ICAgICBPY3RhdmUgbXVsdGlwbGllclxuXHQgKiBAZXhhbXBsZVxuXHQgKiBOZXh1cy5vY3RhdmUoLTEpICAvLyByZXR1cm5zIDAuNVxuXHQgKiBOZXh1cy5vY3RhdmUoMCkgICAvLyByZXR1cm5zIDFcblx0ICogTmV4dXMub2N0YXZlKDEpICAgLy8gcmV0dXJucyAyXG5cdCAqIE5leHVzLm9jdGF2ZSgyKSAgIC8vIHJldHVybnMgNFxuXHQgKi9cblx0ZXhwb3J0cy5vY3RhdmUgPSBmdW5jdGlvbiAobnVtKSB7XG5cdCAgcmV0dXJuIE1hdGgucG93KDIsIG51bSk7XG5cdH07XG5cdFxuXHQvKipcblx0ICogUmFuZG9tIGludGVnZXIgZ2VuZXJhdG9yLiBJZiBubyBzZWNvbmQgYXJndW1lbnQgaXMgZ2l2ZW4sIHdpbGwgcmV0dXJuIHJhbmRvbSBpbnRlZ2VyIGZyb20gMCB0byBib3VuZDEuXG5cdCAqIEBwYXJhbSAge251bWJlcn0gYm91bmQxIE1pbmltdW0gcmFuZG9tIHZhbHVlXG5cdCAqIEBwYXJhbSAge251bWJlcn0gYm91bmQyIE1heGltdW0gcmFuZG9tIHZhbHVlXG5cdCAqIEByZXR1cm4ge251bWJlcn0gICAgICAgIFJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbG93ZXIgYW5kIHVwcGVyIGJvdW5kYXJ5XG5cdCAqIEBleGFtcGxlXG5cdCAqIE5leHVzLnJpKDEwKSAgICAvLyByZXR1cm5zIHJhbmRvbSBpbnQgZnJvbSAwIHRvIDEwXG5cdCAqIE5leHVzLnJpKDIwLDIwMDApIC8vIHJldHVybnMgcmFuZG9tIGludCBmcm9tIDIwIHRvIDIwMDBcblx0ICovXG5cdGV4cG9ydHMucmkgPSBmdW5jdGlvbiAoYm91bmQxLCBib3VuZDIpIHtcblx0ICBpZiAoIWJvdW5kMikge1xuXHQgICAgYm91bmQyID0gYm91bmQxO1xuXHQgICAgYm91bmQxID0gMDtcblx0ICB9XG5cdCAgdmFyIGxvdyA9IE1hdGgubWluKGJvdW5kMSwgYm91bmQyKTtcblx0ICB2YXIgaGlnaCA9IE1hdGgubWF4KGJvdW5kMSwgYm91bmQyKTtcblx0ICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKGhpZ2ggLSBsb3cpICsgbG93KTtcblx0fTtcblx0XG5cdC8qKlxuXHQgKiBSYW5kb20gZmxvYXQgbnVtYmVyIGdlbmVyYXRvci4gSWYgbm8gc2Vjb25kIGFyZ3VtZW50IGlzIGdpdmVuLCB3aWxsIHJldHVybiByYW5kb20gZmxvYXQgZnJvbSAwIHRvIGJvdW5kMS5cblx0ICogQHBhcmFtICB7bnVtYmVyfSBib3VuZDEgTWluaW11bSByYW5kb20gdmFsdWVcblx0ICogQHBhcmFtICB7bnVtYmVyfSBib3VuZDIgTWF4aW11bSByYW5kb20gdmFsdWVcblx0ICogQHJldHVybiB7bnVtYmVyfSAgICAgICAgUmFuZG9tIGZsb2F0IGJldHdlZW4gbG93ZXIgYW5kIHVwcGVyIGJvdW5kYXJ5XG5cdCAqIEBleGFtcGxlXG5cdCAqIE5leHVzLnJmKDEpICAgIC8vIHJldHVybnMgcmFuZG9tIGZsb2F0IGZyb20gMCB0byAxXG5cdCAqIE5leHVzLnJmKDEsMikgLy8gcmV0dXJucyByYW5kb20gZmxvYXQgZnJvbSAxIHRvIDJcblx0ICovXG5cdGV4cG9ydHMucmYgPSBmdW5jdGlvbiAoYm91bmQxLCBib3VuZDIpIHtcblx0ICBpZiAoIWJvdW5kMikge1xuXHQgICAgYm91bmQyID0gYm91bmQxO1xuXHQgICAgYm91bmQxID0gMDtcblx0ICB9XG5cdCAgdmFyIGxvdyA9IE1hdGgubWluKGJvdW5kMSwgYm91bmQyKTtcblx0ICB2YXIgaGlnaCA9IE1hdGgubWF4KGJvdW5kMSwgYm91bmQyKTtcblx0ICByZXR1cm4gTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSArIGxvdztcblx0fTtcblx0XG5cdGV4cG9ydHMuY3ljbGUgPSBmdW5jdGlvbiAoaW5wdXQsIG1pbiwgbWF4KSB7XG5cdCAgaW5wdXQrKztcblx0ICBpZiAoaW5wdXQgPj0gbWF4KSB7XG5cdCAgICBpbnB1dCA9IG1pbjtcblx0ICB9XG5cdCAgcmV0dXJuIGlucHV0O1xuXHR9O1xuXHRcblx0LyoqXG5cdCAqIEF2ZXJhZ2UgYW4gYXJyYXkgb2YgbnVtYmVyc1xuXHQgKiBAcGFyYW0gIHtBcnJheX0gZGF0YSBBcnJheSBvZiBudW1iZXJzIHRvIGF2ZXJhZ2Vcblx0ICogQHJldHVybiB7bnVtYmVyfSAgICAgIEF2ZXJhZ2Ugb2YgdGhlIGlucHV0IGRhdGFcblx0ICogQGV4YW1wbGVcblx0ICogTmV4dXMuYXZlcmFnZShbMCwyLDQsNiw4LDEwXSkgICAvLyByZXR1cm5zIDVcblx0ICovXG5cdGV4cG9ydHMuYXZlcmFnZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgdmFyIHRvdGFsID0gMDtcblx0ICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcblx0ICAgIHRvdGFsICs9IGRhdGFbaV07XG5cdCAgfVxuXHQgIHJldHVybiB0b3RhbCAvIGRhdGEubGVuZ3RoO1xuXHR9O1xuXHRcblx0LyoqXG5cdCAqIEdldCB0aGUgZGlzdGFuY2UgZnJvbSBvbmUgKHgseSkgcG9pbnQgdG8gYW5vdGhlciAoeCx5KSBwb2ludFxuXHQgKiBAcGFyYW0gIHtudW1iZXJ9IHgxIHggb2YgZmlyc3QgcG9pbnRcblx0ICogQHBhcmFtICB7bnVtYmVyfSB5MSB5IG9mIGZpcnN0IHBvaW50XG5cdCAqIEBwYXJhbSAge251bWJlcn0geDIgeCBvZiBzZWNvbmQgcG9pbnRcblx0ICogQHBhcmFtICB7bnVtYmVyfSB5MiB5IG9mIHNlY29uZCBwb2lueVxuXHQgKiBAcmV0dXJuIHtudW1iZXJ9ICAgIERpc3RhbmNlXG5cdCAqIEBleGFtcGxlXG5cdCAqIE5leHVzLmRpc3RhbmNlKDAsMCwzLDQpICAgLy8gcmV0dXJucyA1XG5cdCAqL1xuXHRleHBvcnRzLmRpc3RhbmNlID0gZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyKSB7XG5cdCAgdmFyIGEgPSB4MSAtIHgyO1xuXHQgIHZhciBiID0geTEgLSB5Mjtcblx0ICByZXR1cm4gTWF0aC5zcXJ0KGEgKiBhICsgYiAqIGIpO1xuXHR9O1xuXHRcblx0ZXhwb3J0cy5nYWluVG9EQiA9IGZ1bmN0aW9uIChnYWluKSB7XG5cdCAgcmV0dXJuIDIwICogTWF0aC5sb2cxMChnYWluKTtcblx0fTtcblx0XG5cdC8qKlxuXHQgKiBGbGlwIGEgY29pbiwgcmV0dXJuaW5nIGVpdGhlciAwIG9yIDEgYWNjb3JkaW5nIHRvIGEgcHJvYmFiaWxpdHlcblx0ICogQHBhcmFtICB7bnVtYmVyfSBbb2Rkcz0wLjVdIExpa2VsaWhvb2Qgb2YgcmV0dXJuaW5nIDFcblx0ICogQHJldHVybiB7bnVtYmVyfSAgICAgICAgICAgIDEgb3IgMFxuXHQgKiBAZXhhbXBsZVxuXHQgKiBOZXh1cy5jb2luKDAuMSkgICAvLyByZXR1cm5zIDEgKDEwJSBvZiB0aGUgdGltZSkgb3IgMCAoOTAlIG9mIHRoZSB0aW1lKVxuXHQgKi9cblx0ZXhwb3J0cy5jb2luID0gZnVuY3Rpb24gKCkge1xuXHQgIHZhciBvZGRzID0gYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyAwLjUgOiBhcmd1bWVudHNbMF07XG5cdFxuXHQgIGlmIChleHBvcnRzLnJmKDAsIDEpIDwgb2Rkcykge1xuXHQgICAgcmV0dXJuIDE7XG5cdCAgfSBlbHNlIHtcblx0ICAgIHJldHVybiAwO1xuXHQgIH1cblx0fTtcblxuLyoqKi8gfSksXG4vKiA2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGtleSBpbiBwcm9wcykgeyB2YXIgcHJvcCA9IHByb3BzW2tleV07IHByb3AuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKHByb3AudmFsdWUpIHByb3Aud3JpdGFibGUgPSB0cnVlOyB9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpOyB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHR2YXIgX2dldCA9IGZ1bmN0aW9uIGdldChvYmplY3QsIHByb3BlcnR5LCByZWNlaXZlcikgeyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IHJldHVybiBnZXQocGFyZW50LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpOyB9IH0gZWxzZSBpZiAoXCJ2YWx1ZVwiIGluIGRlc2MgJiYgZGVzYy53cml0YWJsZSkgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH07XG5cdFxuXHR2YXIgX2luaGVyaXRzID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH07XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH07XG5cdFxuXHR2YXIgc3ZnID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblx0dmFyIGRvbSA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG5cdHZhciB1dGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcblx0dmFyIHRvdWNoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcblx0dmFyIEV2ZW50RW1pdHRlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xuXHRcblx0dmFyIGNvbG9ycyA9IF9fd2VicGFja19yZXF1aXJlX18oMSkuY29sb3JzO1xuXHRcblx0LyoqXG5cdEludGVyZmFjZVxuXHQqL1xuXHRcblx0dmFyIEludGVyZmFjZSA9IChmdW5jdGlvbiAoX0V2ZW50RW1pdHRlcikge1xuXHQgIGZ1bmN0aW9uIEludGVyZmFjZShhcmdzLCBvcHRpb25zLCBkZWZhdWx0cykge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEludGVyZmFjZSk7XG5cdFxuXHQgICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoSW50ZXJmYWNlLnByb3RvdHlwZSksIFwiY29uc3RydWN0b3JcIiwgdGhpcykuY2FsbCh0aGlzKTtcblx0ICAgIHRoaXMudHlwZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcblx0ICAgIHRoaXMuc2V0dGluZ3MgPSB0aGlzLnBhcnNlU2V0dGluZ3MoYXJncywgb3B0aW9ucywgZGVmYXVsdHMpO1xuXHQgICAgdGhpcy5tb3VzZSA9IHt9O1xuXHQgICAgdGhpcy53YWl0ID0gZmFsc2U7XG5cdCAgICB0aGlzLmNvbG9ycyA9IHt9O1xuXHQgICAgdmFyIGRlZmF1bHRDb2xvcnMgPSBjb2xvcnMoKTsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cdCAgICB0aGlzLmNvbG9ycy5hY2NlbnQgPSBkZWZhdWx0Q29sb3JzLmFjY2VudDtcblx0ICAgIHRoaXMuY29sb3JzLmZpbGwgPSBkZWZhdWx0Q29sb3JzLmZpbGw7XG5cdCAgICB0aGlzLmNvbG9ycy5saWdodCA9IGRlZmF1bHRDb2xvcnMubGlnaHQ7XG5cdCAgICB0aGlzLmNvbG9ycy5kYXJrID0gZGVmYXVsdENvbG9ycy5kYXJrO1xuXHQgICAgdGhpcy5jb2xvcnMubWVkaXVtTGlnaHQgPSBkZWZhdWx0Q29sb3JzLm1lZGl1bUxpZ2h0O1xuXHQgICAgdGhpcy5jb2xvcnMubWVkaXVtRGFyayA9IGRlZmF1bHRDb2xvcnMubWVkaXVtRGFyaztcblx0ICB9XG5cdFxuXHQgIF9pbmhlcml0cyhJbnRlcmZhY2UsIF9FdmVudEVtaXR0ZXIpO1xuXHRcblx0ICBfY3JlYXRlQ2xhc3MoSW50ZXJmYWNlLCB7XG5cdCAgICBwYXJzZVNldHRpbmdzOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZVNldHRpbmdzKGFyZ3MsIG9wdGlvbnMsIGRlZmF1bHRzKSB7XG5cdFxuXHQgICAgICAgIG9wdGlvbnMudW5zaGlmdChcInRhcmdldFwiKTtcblx0ICAgICAgICBkZWZhdWx0cy5kZWZhdWx0U2l6ZSA9IGRlZmF1bHRzLnNpemUuc3BsaWNlKDAsIDIpO1xuXHQgICAgICAgIGRlZmF1bHRzLnNpemUgPSBmYWxzZTtcblx0XG5cdCAgICAgICAgdmFyIHNldHRpbmdzID0ge1xuXHQgICAgICAgICAgdGFyZ2V0OiBkb2N1bWVudC5ib2R5LFxuXHQgICAgICAgICAgY29sb3JzOiB7fSwgLy8gc2hvdWxkIGluaGVyaXQgZnJvbSBhIGNvbG9ycyBtb2R1bGUsXG5cdCAgICAgICAgICBzbmFwV2l0aFBhcmVudDogdHJ1ZSxcblx0ICAgICAgICAgIGV2ZW50OiBmdW5jdGlvbiBldmVudCgpIHt9LFxuXHQgICAgICAgICAgY29tcG9uZW50OiBmYWxzZVxuXHQgICAgICAgIH07XG5cdFxuXHQgICAgICAgIGZvciAodmFyIGtleSBpbiBkZWZhdWx0cykge1xuXHQgICAgICAgICAgc2V0dGluZ3Nba2V5XSA9IGRlZmF1bHRzW2tleV07XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgIC8vIGdyYWJzIHRoZSBuZXh0IGFyZ3VtZW50XG5cdCAgICAgICAgICB2YXIgc2V0dGluZyA9IGFyZ3NbaV07XG5cdCAgICAgICAgICAvLyBpZiBpdCdzIGFuIG9iamVjdCwgaXQgbXVzdCBiZSB0aGUgc2V0dGluZ3Mgb2JqZWN0XG5cdCAgICAgICAgICBpZiAodXRpbC5pc09iamVjdChzZXR0aW5nKSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gc2V0dGluZykge1xuXHQgICAgICAgICAgICAgIHNldHRpbmdzW2tleV0gPSBzZXR0aW5nW2tleV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy8gaWYgaXQncyBhIGZ1bmN0aW9uLCBpdCBtdXN0IGJlIHRoZSBldmVudCBzZXR0aW5nXG5cdCAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZXR0aW5nID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgICAgICAgc2V0dGluZ3MuZXZlbnQgPSBzZXR0aW5nO1xuXHQgICAgICAgICAgICAvLyBvdGhlcndpc2UsIGNvbnNpZGVyIGl0IG9uZSBvZiB0aGUgd2lkZ2V0J3MgY3VzdG9tIG9wdGlvbnNcblx0ICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5sZW5ndGggPj0gMSkge1xuXHQgICAgICAgICAgICAvLyBncmFiIHRoZSBmaXJzdCBvcHRpb24gLS0gaS5lLiAndGFyZ2V0J1xuXHQgICAgICAgICAgICB2YXIga2V5ID0gb3B0aW9ucy5zcGxpY2UoMCwgMSlbMF07XG5cdCAgICAgICAgICAgIHNldHRpbmdzW2tleV0gPSBzZXR0aW5nO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgLyogIGhhbmRsZSBjb21tb24gc2V0dGluZ3MgICovXG5cdFxuXHQgICAgICAgIC8vIHRhcmdldFxuXHQgICAgICAgIHRoaXMucGFyZW50ID0gZG9tLnBhcnNlRWxlbWVudChzZXR0aW5ncy50YXJnZXQpO1xuXHRcblx0ICAgICAgICAvLyBuZXh1cy11aSBhdHRyaWJ1dGVcblx0ICAgICAgICBpZiAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiAhc2V0dGluZ3MuY29tcG9uZW50KSB7XG5cdCAgICAgICAgICBpZiAoIXRoaXMucGFyZW50Lmhhc0F0dHJpYnV0ZShcIm5leHVzLXVpXCIpKSB7XG5cdCAgICAgICAgICAgIHRoaXMucGFyZW50LnNldEF0dHJpYnV0ZShcIm5leHVzLXVpXCIsIFwiXCIpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgLy8gc2l6ZVxuXHRcblx0ICAgICAgICBpZiAoc2V0dGluZ3Muc2l6ZSAmJiBBcnJheS5pc0FycmF5KHNldHRpbmdzLnNpemUpICYmIHNldHRpbmdzLnNuYXBXaXRoUGFyZW50KSB7XG5cdCAgICAgICAgICB0aGlzLndpZHRoID0gc2V0dGluZ3Muc2l6ZVswXTtcblx0ICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gc2V0dGluZ3Muc2l6ZVsxXTtcblx0ICAgICAgICAgIHRoaXMucGFyZW50LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCArIFwicHhcIjtcblx0ICAgICAgICAgIHRoaXMucGFyZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuaGVpZ2h0ICsgXCJweFwiO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoc2V0dGluZ3Muc25hcFdpdGhQYXJlbnQgJiYgIXNldHRpbmdzLmNvbXBvbmVudCkge1xuXHRcblx0ICAgICAgICAgIHRoaXMud2lkdGggPSBwYXJzZUZsb2F0KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMucGFyZW50LCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKFwid2lkdGhcIikucmVwbGFjZShcInB4XCIsIFwiXCIpKTtcblx0ICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gcGFyc2VGbG9hdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnBhcmVudCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShcImhlaWdodFwiKS5yZXBsYWNlKFwicHhcIiwgXCJcIikpO1xuXHRcblx0ICAgICAgICAgIGlmICh0aGlzLndpZHRoID09IDUwMDApIHtcblx0ICAgICAgICAgICAgdGhpcy53aWR0aCA9IHNldHRpbmdzLmRlZmF1bHRTaXplWzBdO1xuXHQgICAgICAgICAgICB0aGlzLnBhcmVudC5zdHlsZS53aWR0aCA9IHRoaXMucGFyZW50LndpZHRoID0gdGhpcy53aWR0aCArIFwicHhcIjtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIGlmICh0aGlzLmhlaWdodCA9PSA1MDAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gc2V0dGluZ3MuZGVmYXVsdFNpemVbMV07XG5cdCAgICAgICAgICAgIHRoaXMucGFyZW50LnN0eWxlLmhlaWdodCA9IHRoaXMucGFyZW50LmhlaWdodCA9IHRoaXMuaGVpZ2h0ICsgXCJweFwiO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICBzZXR0aW5ncy5zaXplID0gc2V0dGluZ3MuZGVmYXVsdFNpemU7XG5cdCAgICAgICAgICB0aGlzLndpZHRoID0gc2V0dGluZ3Muc2l6ZVswXTtcblx0ICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gc2V0dGluZ3Muc2l6ZVsxXTtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIC8vIGV2ZW50XG5cdCAgICAgICAgaWYgKHNldHRpbmdzLmV2ZW50KSB7XG5cdCAgICAgICAgICB0aGlzLmV2ZW50ID0gdGhpcy5vbihcImNoYW5nZVwiLCBzZXR0aW5ncy5ldmVudCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMuZXZlbnQgPSBmYWxzZTtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIHJldHVybiBzZXR0aW5ncztcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGluaXQ6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGluaXQoKSB7XG5cdCAgICAgICAgdGhpcy5idWlsZEZyYW1lKCk7XG5cdCAgICAgICAgdGhpcy5idWlsZEludGVyZmFjZSgpO1xuXHQgICAgICAgIHRoaXMuc2l6ZUludGVyZmFjZSgpO1xuXHQgICAgICAgIHRoaXMuYXR0YWNoTGlzdGVuZXJzKCk7XG5cdCAgICAgICAgdGhpcy5jb2xvckludGVyZmFjZSgpO1xuXHQgICAgICAgIHRoaXMuZmluYWxUb3VjaGVzKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBidWlsZEZyYW1lOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEZyYW1lKCkge1xuXHQgICAgICAgIHRoaXMuZWxlbWVudCA9IHN2Zy5jcmVhdGUoXCJzdmdcIik7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIHRoaXMud2lkdGgpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgdGhpcy5oZWlnaHQpO1xuXHQgICAgICAgIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBidWlsZEludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRJbnRlcmZhY2UoKSB7fVxuXHQgICAgfSxcblx0ICAgIHNpemVJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNpemVJbnRlcmZhY2UoKSB7fVxuXHQgICAgfSxcblx0ICAgIGNvbG9ySW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb2xvckludGVyZmFjZSgpIHt9XG5cdCAgICB9LFxuXHQgICAgYXR0YWNoTGlzdGVuZXJzOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBhdHRhY2hMaXN0ZW5lcnMoKSB7XG5cdCAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblx0XG5cdCAgICAgICAgdGhpcy5pbnRlcmFjdGlvblRhcmdldCA9IHRoaXMuaW50ZXJhY3Rpb25UYXJnZXQgfHwgdGhpcy5lbGVtZW50O1xuXHRcblx0ICAgICAgICAvLyBTZXR1cCBpbnRlcmFjdGlvblxuXHQgICAgICAgIGlmICh0b3VjaC5leGlzdHMpIHtcblx0ICAgICAgICAgIHRoaXMuaW50ZXJhY3Rpb25UYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIiwgZnVuY3Rpb24gKGV2dCkge1xuXHQgICAgICAgICAgICByZXR1cm4gX3RoaXMucHJlVG91Y2goZXZ0KTtcblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgdGhpcy5pbnRlcmFjdGlvblRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsIGZ1bmN0aW9uIChldnQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIF90aGlzLnByZVRvdWNoTW92ZShldnQpO1xuXHQgICAgICAgICAgfSk7XG5cdCAgICAgICAgICB0aGlzLmludGVyYWN0aW9uVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBmdW5jdGlvbiAoZXZ0KSB7XG5cdCAgICAgICAgICAgIHJldHVybiBfdGhpcy5wcmVUb3VjaFJlbGVhc2UoZXZ0KTtcblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmJvdW5kUHJlTW92ZSA9IGZ1bmN0aW9uIChldnQpIHtcblx0ICAgICAgICAgIHJldHVybiBfdGhpcy5wcmVNb3ZlKGV2dCk7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICB0aGlzLmJvdW5kUHJlUmVsZWFzZSA9IGZ1bmN0aW9uIChldnQpIHtcblx0ICAgICAgICAgIHJldHVybiBfdGhpcy5wcmVSZWxlYXNlKGV2dCk7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICB0aGlzLmludGVyYWN0aW9uVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgZnVuY3Rpb24gKGV2dCkge1xuXHQgICAgICAgICAgcmV0dXJuIF90aGlzLnByZUNsaWNrKGV2dCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBmaW5hbFRvdWNoZXM6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZpbmFsVG91Y2hlcygpIHtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuY3Vyc29yID0gXCJwb2ludGVyXCI7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBwcmVDbGljazoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcHJlQ2xpY2soZSkge1xuXHQgICAgICAgIC8vIDEwMDAwIGdldENvbXB1dGVkU3R5bGUgY2FsbHMgdGFrZXMgMTAwIG1zLlxuXHQgICAgICAgIC8vIC46LiBvbmUgdGFrZXMgYWJvdXQgLjAxbXNcblx0ICAgICAgICBpZiAodGhpcy5lbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0ICAgICAgICAgIHRoaXMud2lkdGggPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVsZW1lbnQsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoXCJ3aWR0aFwiKS5yZXBsYWNlKFwicHhcIiwgXCJcIik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIDEwMDAwIGdldENvbXB1dGVkU3R5bGUgY2FsbHMgdGFrZXMgNDAgbXMuXG5cdCAgICAgICAgLy8gLjouIG9uZSB0YWtlcyBhYm91dCAuMDA0bXNcblx0ICAgICAgICB0aGlzLm9mZnNldCA9IGRvbS5maW5kUG9zaXRpb24odGhpcy5lbGVtZW50KTtcblx0ICAgICAgICB0aGlzLm1vdXNlID0gZG9tLmxvY2F0ZU1vdXNlKGUsIHRoaXMub2Zmc2V0KTtcblx0ICAgICAgICB0aGlzLmNsaWNrZWQgPSB0cnVlO1xuXHQgICAgICAgIHRoaXMuY2xpY2soKTtcblx0ICAgICAgICB0aGlzLm1vdmVFdmVudCA9IGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdGhpcy5ib3VuZFByZU1vdmUpO1xuXHQgICAgICAgIHRoaXMucmVsZWFzZUV2ZW50ID0gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgdGhpcy5ib3VuZFByZVJlbGVhc2UpO1xuXHQgICAgICAgIHRoaXMuZW1pdChcImNsaWNrXCIpO1xuXHQgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblx0ICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcHJlTW92ZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcHJlTW92ZShlKSB7XG5cdCAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblx0XG5cdCAgICAgICAgaWYgKCF0aGlzLndhaXQpIHtcblx0ICAgICAgICAgIHRoaXMubW91c2UgPSBkb20ubG9jYXRlTW91c2UoZSwgdGhpcy5vZmZzZXQpO1xuXHQgICAgICAgICAgdGhpcy5tb3ZlKCk7XG5cdCAgICAgICAgICB0aGlzLndhaXQgPSB0cnVlO1xuXHQgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIF90aGlzLndhaXQgPSBmYWxzZTtcblx0ICAgICAgICAgIH0sIDI1KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBwcmVSZWxlYXNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBwcmVSZWxlYXNlKGUpIHtcblx0ICAgICAgICB0aGlzLm1vdXNlID0gZG9tLmxvY2F0ZU1vdXNlKGUsIHRoaXMub2Zmc2V0KTtcblx0ICAgICAgICB0aGlzLmNsaWNrZWQgPSBmYWxzZTtcblx0ICAgICAgICB0aGlzLnJlbGVhc2UoKTtcblx0ICAgICAgICB0aGlzLmVtaXQoXCJyZWxlYXNlXCIpO1xuXHQgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdGhpcy5ib3VuZFByZU1vdmUpO1xuXHQgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIHRoaXMuYm91bmRQcmVSZWxlYXNlKTtcblx0ICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cdCAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNsaWNrOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGljaygpIHt9XG5cdCAgICB9LFxuXHQgICAgbW92ZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gbW92ZSgpIHt9XG5cdCAgICB9LFxuXHQgICAgcmVsZWFzZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVsZWFzZSgpIHt9XG5cdCAgICB9LFxuXHQgICAgcHJlVG91Y2g6IHtcblx0XG5cdCAgICAgIC8qIHRvdWNoICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcHJlVG91Y2goZSkge1xuXHQgICAgICAgIGlmICh0aGlzLmVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHQgICAgICAgICAgdGhpcy53aWR0aCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIpLnJlcGxhY2UoXCJweFwiLCBcIlwiKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5vZmZzZXQgPSBkb20uZmluZFBvc2l0aW9uKHRoaXMuZWxlbWVudCk7XG5cdCAgICAgICAgdGhpcy5tb3VzZSA9IGRvbS5sb2NhdGVUb3VjaChlLCB0aGlzLm9mZnNldCk7XG5cdCAgICAgICAgdGhpcy5jbGlja2VkID0gdHJ1ZTtcblx0ICAgICAgICB0aGlzLnRvdWNoKGUpO1xuXHQgICAgICAgIHRoaXMuZW1pdChcImNsaWNrXCIpO1xuXHQgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblx0ICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcHJlVG91Y2hNb3ZlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBwcmVUb3VjaE1vdmUoZSkge1xuXHQgICAgICAgIGlmICh0aGlzLmNsaWNrZWQpIHtcblx0ICAgICAgICAgIHRoaXMubW91c2UgPSBkb20ubG9jYXRlVG91Y2goZSwgdGhpcy5vZmZzZXQpO1xuXHQgICAgICAgICAgdGhpcy50b3VjaE1vdmUoKTtcblx0ICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblx0ICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcHJlVG91Y2hSZWxlYXNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBwcmVUb3VjaFJlbGVhc2UoZSkge1xuXHQgICAgICAgIHRoaXMubW91c2UgPSBkb20ubG9jYXRlVG91Y2goZSwgdGhpcy5vZmZzZXQpO1xuXHQgICAgICAgIHRoaXMuY2xpY2tlZCA9IGZhbHNlO1xuXHQgICAgICAgIHRoaXMudG91Y2hSZWxlYXNlKCk7XG5cdCAgICAgICAgdGhpcy5lbWl0KFwicmVsZWFzZVwiKTtcblx0ICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cdCAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHRvdWNoOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiB0b3VjaCgpIHtcblx0ICAgICAgICB0aGlzLmNsaWNrKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICB0b3VjaE1vdmU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRvdWNoTW92ZSgpIHtcblx0ICAgICAgICB0aGlzLm1vdmUoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHRvdWNoUmVsZWFzZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gdG91Y2hSZWxlYXNlKCkge1xuXHQgICAgICAgIHRoaXMucmVsZWFzZSgpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVzaXplOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgKiBSZXNpemUgdGhlIGludGVyZmFjZVxuXHQgICAgICAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBOZXcgd2lkdGggaW4gcGl4ZWxzXG5cdCAgICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBOZXcgaGVpZ2h0IGluIHBpeGVsc1xuXHQgICAgICAqXG5cdCAgICAgICogQGV4YW1wbGVcblx0ICAgICAgKiBidXR0b24ucmVzaXplKDEwMCwxMDApO1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlc2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XG5cdCAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuXHQgICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXHQgICAgICAgIHRoaXMucGFyZW50LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCArIFwicHhcIjtcblx0ICAgICAgICB0aGlzLnBhcmVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCArIFwicHhcIjtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgdGhpcy53aWR0aCk7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCB0aGlzLmhlaWdodCk7XG5cdCAgICAgICAgdGhpcy5zaXplSW50ZXJmYWNlKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBlbXB0eToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gZW1wdHkoKSB7XG5cdCAgICAgICAgd2hpbGUgKHRoaXMuZWxlbWVudC5sYXN0Q2hpbGQpIHtcblx0ICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQubGFzdENoaWxkKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBkZXN0cm95OiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgKiBSZW1vdmUgdGhlIGludGVyZmFjZSBmcm9tIHRoZSBwYWdlIGFuZCBjYW5jZWwgaXRzIGV2ZW50IGxpc3RlbmVyKHMpLlxuXHQgICAgICAqXG5cdCAgICAgICogQGV4YW1wbGVcblx0ICAgICAgKiBidXR0b24uZGVzdHJveSgpO1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG5cdCAgICAgICAgdGhpcy5lbXB0eSgpO1xuXHQgICAgICAgIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudCk7XG5cdCAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcblx0ICAgICAgICBpZiAodGhpcy5pbnN0cnVtZW50KSB7XG5cdCAgICAgICAgICBkZWxldGUgdGhpcy5pbnN0cnVtZW50W3RoaXMuaWRdO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmN1c3RvbURlc3Ryb3koKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGN1c3RvbURlc3Ryb3k6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGN1c3RvbURlc3Ryb3koKSB7fVxuXHQgICAgfSxcblx0ICAgIGNvbG9yaXplOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb2xvcml6ZSh0eXBlLCBjb2xvcikge1xuXHQgICAgICAgIHRoaXMuY29sb3JzW3R5cGVdID0gY29sb3I7XG5cdCAgICAgICAgdGhpcy5jb2xvckludGVyZmFjZSgpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBJbnRlcmZhY2U7XG5cdH0pKEV2ZW50RW1pdHRlcik7XG5cdFxuXHRtb2R1bGUuZXhwb3J0cyA9IEludGVyZmFjZTtcblxuLyoqKi8gfSksXG4vKiA3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHRleHBvcnRzLmZpbmRQb3NpdGlvbiA9IGZ1bmN0aW9uIChlbCkge1xuXHQgIHZhciB2aWV3cG9ydE9mZnNldCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHQgIHZhciB0b3AgPSB2aWV3cG9ydE9mZnNldC50b3AgKyB3aW5kb3cuc2Nyb2xsWTtcblx0ICB2YXIgbGVmdCA9IHZpZXdwb3J0T2Zmc2V0LmxlZnQgKyB3aW5kb3cuc2Nyb2xsWDtcblx0ICByZXR1cm4geyB0b3A6IHRvcCwgbGVmdDogbGVmdCB9O1xuXHR9O1xuXHRcblx0ZXhwb3J0cy5wYXJzZUVsZW1lbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG5cdCAgaWYgKHR5cGVvZiBwYXJlbnQgPT09IFwic3RyaW5nXCIpIHtcblx0ICAgIHBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHBhcmVudC5yZXBsYWNlKFwiI1wiLCBcIlwiKSk7XG5cdCAgfVxuXHRcblx0ICBpZiAocGFyZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgcGFyZW50IGluc3RhbmNlb2YgU1ZHRWxlbWVudCkge1xuXHQgICAgcmV0dXJuIHBhcmVudDtcblx0ICB9IGVsc2Uge1xuXHQgICAgcmV0dXJuIFwiTm8gdmFsaWQgcGFyZW50IGFyZ3VtZW50XCI7XG5cdCAgfVxuXHR9O1xuXHRcblx0ZXhwb3J0cy5sb2NhdGVNb3VzZSA9IGZ1bmN0aW9uIChlLCBvZmZzZXQpIHtcblx0ICByZXR1cm4ge1xuXHQgICAgeDogZS5wYWdlWCAtIG9mZnNldC5sZWZ0LFxuXHQgICAgeTogZS5wYWdlWSAtIG9mZnNldC50b3Bcblx0ICB9O1xuXHR9O1xuXHRcblx0ZXhwb3J0cy5sb2NhdGVUb3VjaCA9IGZ1bmN0aW9uIChlLCBvZmZzZXQpIHtcblx0ICByZXR1cm4ge1xuXHQgICAgeDogZS50YXJnZXRUb3VjaGVzLmxlbmd0aCA/IGUudGFyZ2V0VG91Y2hlc1swXS5wYWdlWCAtIG9mZnNldC5sZWZ0IDogZmFsc2UsXG5cdCAgICB5OiBlLnRhcmdldFRvdWNoZXMubGVuZ3RoID8gZS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VZIC0gb2Zmc2V0LnRvcCA6IGZhbHNlXG5cdCAgfTtcblx0fTtcblx0XG5cdGV4cG9ydHMuU21hcnRDYW52YXMgPSBmdW5jdGlvbiAocGFyZW50KSB7XG5cdCAgdmFyIF90aGlzID0gdGhpcztcblx0XG5cdCAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcblx0ICB0aGlzLmNvbnRleHQgPSB0aGlzLmVsZW1lbnQuZ2V0Q29udGV4dChcIjJkXCIpO1xuXHQgIHBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpO1xuXHRcblx0ICB0aGlzLnJlc2l6ZSA9IGZ1bmN0aW9uICh3LCBoKSB7XG5cdCAgICBfdGhpcy5lbGVtZW50LndpZHRoID0gdyAqIDI7XG5cdCAgICBfdGhpcy5lbGVtZW50LmhlaWdodCA9IGggKiAyO1xuXHQgICAgX3RoaXMuZWxlbWVudC5zdHlsZS53aWR0aCA9IHcgKyBcInB4XCI7XG5cdCAgICBfdGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodCA9IGggKyBcInB4XCI7XG5cdCAgfTtcblx0fTtcblxuLyoqKi8gfSksXG4vKiA4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHRleHBvcnRzLmlzT2JqZWN0ID0gZnVuY3Rpb24gKG9iaikge1xuXHQgIGlmICh0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KG9iaikgJiYgb2JqICE9PSBudWxsICYmIG9iaiBpbnN0YW5jZW9mIFNWR0VsZW1lbnQgPT09IGZhbHNlICYmIG9iaiBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHQgICAgcmV0dXJuIHRydWU7XG5cdCAgfSBlbHNlIHtcblx0ICAgIHJldHVybiBmYWxzZTtcblx0ICB9XG5cdH07XG5cbi8qKiovIH0pLFxuLyogOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0ZXhwb3J0cy5leGlzdHMgPSBcIm9udG91Y2hzdGFydFwiIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuLyoqKi8gfSksXG4vKiAxMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuXHQvL1xuXHQvLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuXHQvLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG5cdC8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuXHQvLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG5cdC8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcblx0Ly8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG5cdC8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXHQvL1xuXHQvLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuXHQvLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblx0Ly9cblx0Ly8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuXHQvLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG5cdC8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cblx0Ly8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG5cdC8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuXHQvLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG5cdC8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cdFxuXHRmdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG5cdCAgdGhpcy5fZXZlbnRzID0gdGhpcy5fZXZlbnRzIHx8IHt9O1xuXHQgIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG5cdH1cblx0bW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG5cdFxuXHQvLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcblx0RXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblx0XG5cdEV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcblx0RXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXHRcblx0Ly8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG5cdC8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG5cdEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cdFxuXHQvLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncblx0Ly8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5cdEV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24obikge1xuXHQgIGlmICghaXNOdW1iZXIobikgfHwgbiA8IDAgfHwgaXNOYU4obikpXG5cdCAgICB0aHJvdyBUeXBlRXJyb3IoJ24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuXHQgIHRoaXMuX21heExpc3RlbmVycyA9IG47XG5cdCAgcmV0dXJuIHRoaXM7XG5cdH07XG5cdFxuXHRFdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbih0eXBlKSB7XG5cdCAgdmFyIGVyLCBoYW5kbGVyLCBsZW4sIGFyZ3MsIGksIGxpc3RlbmVycztcblx0XG5cdCAgaWYgKCF0aGlzLl9ldmVudHMpXG5cdCAgICB0aGlzLl9ldmVudHMgPSB7fTtcblx0XG5cdCAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuXHQgIGlmICh0eXBlID09PSAnZXJyb3InKSB7XG5cdCAgICBpZiAoIXRoaXMuX2V2ZW50cy5lcnJvciB8fFxuXHQgICAgICAgIChpc09iamVjdCh0aGlzLl9ldmVudHMuZXJyb3IpICYmICF0aGlzLl9ldmVudHMuZXJyb3IubGVuZ3RoKSkge1xuXHQgICAgICBlciA9IGFyZ3VtZW50c1sxXTtcblx0ICAgICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0ICAgICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG5cdCAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5jYXVnaHQsIHVuc3BlY2lmaWVkIFwiZXJyb3JcIiBldmVudC4gKCcgKyBlciArICcpJyk7XG5cdCAgICAgICAgZXJyLmNvbnRleHQgPSBlcjtcblx0ICAgICAgICB0aHJvdyBlcnI7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cdFxuXHQgIGhhbmRsZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cdFxuXHQgIGlmIChpc1VuZGVmaW5lZChoYW5kbGVyKSlcblx0ICAgIHJldHVybiBmYWxzZTtcblx0XG5cdCAgaWYgKGlzRnVuY3Rpb24oaGFuZGxlcikpIHtcblx0ICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuXHQgICAgICAvLyBmYXN0IGNhc2VzXG5cdCAgICAgIGNhc2UgMTpcblx0ICAgICAgICBoYW5kbGVyLmNhbGwodGhpcyk7XG5cdCAgICAgICAgYnJlYWs7XG5cdCAgICAgIGNhc2UgMjpcblx0ICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRzWzFdKTtcblx0ICAgICAgICBicmVhaztcblx0ICAgICAgY2FzZSAzOlxuXHQgICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSk7XG5cdCAgICAgICAgYnJlYWs7XG5cdCAgICAgIC8vIHNsb3dlclxuXHQgICAgICBkZWZhdWx0OlxuXHQgICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXHQgICAgICAgIGhhbmRsZXIuYXBwbHkodGhpcywgYXJncyk7XG5cdCAgICB9XG5cdCAgfSBlbHNlIGlmIChpc09iamVjdChoYW5kbGVyKSkge1xuXHQgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG5cdCAgICBsaXN0ZW5lcnMgPSBoYW5kbGVyLnNsaWNlKCk7XG5cdCAgICBsZW4gPSBsaXN0ZW5lcnMubGVuZ3RoO1xuXHQgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxuXHQgICAgICBsaXN0ZW5lcnNbaV0uYXBwbHkodGhpcywgYXJncyk7XG5cdCAgfVxuXHRcblx0ICByZXR1cm4gdHJ1ZTtcblx0fTtcblx0XG5cdEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuXHQgIHZhciBtO1xuXHRcblx0ICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuXHQgICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblx0XG5cdCAgaWYgKCF0aGlzLl9ldmVudHMpXG5cdCAgICB0aGlzLl9ldmVudHMgPSB7fTtcblx0XG5cdCAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcblx0ICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG5cdCAgaWYgKHRoaXMuX2V2ZW50cy5uZXdMaXN0ZW5lcilcblx0ICAgIHRoaXMuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuXHQgICAgICAgICAgICAgIGlzRnVuY3Rpb24obGlzdGVuZXIubGlzdGVuZXIpID9cblx0ICAgICAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblx0XG5cdCAgaWYgKCF0aGlzLl9ldmVudHNbdHlwZV0pXG5cdCAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cblx0ICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuXHQgIGVsc2UgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkpXG5cdCAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG5cdCAgICB0aGlzLl9ldmVudHNbdHlwZV0ucHVzaChsaXN0ZW5lcik7XG5cdCAgZWxzZVxuXHQgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG5cdCAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBbdGhpcy5fZXZlbnRzW3R5cGVdLCBsaXN0ZW5lcl07XG5cdFxuXHQgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG5cdCAgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkgJiYgIXRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQpIHtcblx0ICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5fbWF4TGlzdGVuZXJzKSkge1xuXHQgICAgICBtID0gdGhpcy5fbWF4TGlzdGVuZXJzO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgbSA9IEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuXHQgICAgfVxuXHRcblx0ICAgIGlmIChtICYmIG0gPiAwICYmIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGggPiBtKSB7XG5cdCAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQgPSB0cnVlO1xuXHQgICAgICBjb25zb2xlLmVycm9yKCcobm9kZSkgd2FybmluZzogcG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSAnICtcblx0ICAgICAgICAgICAgICAgICAgICAnbGVhayBkZXRlY3RlZC4gJWQgbGlzdGVuZXJzIGFkZGVkLiAnICtcblx0ICAgICAgICAgICAgICAgICAgICAnVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQuJyxcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoKTtcblx0ICAgICAgaWYgKHR5cGVvZiBjb25zb2xlLnRyYWNlID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgLy8gbm90IHN1cHBvcnRlZCBpbiBJRSAxMFxuXHQgICAgICAgIGNvbnNvbGUudHJhY2UoKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblx0XG5cdCAgcmV0dXJuIHRoaXM7XG5cdH07XG5cdFxuXHRFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjtcblx0XG5cdEV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG5cdCAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSlcblx0ICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFxuXHQgIHZhciBmaXJlZCA9IGZhbHNlO1xuXHRcblx0ICBmdW5jdGlvbiBnKCkge1xuXHQgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBnKTtcblx0XG5cdCAgICBpZiAoIWZpcmVkKSB7XG5cdCAgICAgIGZpcmVkID0gdHJ1ZTtcblx0ICAgICAgbGlzdGVuZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgIH1cblx0ICB9XG5cdFxuXHQgIGcubGlzdGVuZXIgPSBsaXN0ZW5lcjtcblx0ICB0aGlzLm9uKHR5cGUsIGcpO1xuXHRcblx0ICByZXR1cm4gdGhpcztcblx0fTtcblx0XG5cdC8vIGVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZmYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkXG5cdEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuXHQgIHZhciBsaXN0LCBwb3NpdGlvbiwgbGVuZ3RoLCBpO1xuXHRcblx0ICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuXHQgICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblx0XG5cdCAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1t0eXBlXSlcblx0ICAgIHJldHVybiB0aGlzO1xuXHRcblx0ICBsaXN0ID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuXHQgIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuXHQgIHBvc2l0aW9uID0gLTE7XG5cdFxuXHQgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fFxuXHQgICAgICAoaXNGdW5jdGlvbihsaXN0Lmxpc3RlbmVyKSAmJiBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikpIHtcblx0ICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG5cdCAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuXHQgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdGVuZXIpO1xuXHRcblx0ICB9IGVsc2UgaWYgKGlzT2JqZWN0KGxpc3QpKSB7XG5cdCAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSA+IDA7KSB7XG5cdCAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fFxuXHQgICAgICAgICAgKGxpc3RbaV0ubGlzdGVuZXIgJiYgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7XG5cdCAgICAgICAgcG9zaXRpb24gPSBpO1xuXHQgICAgICAgIGJyZWFrO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdFxuXHQgICAgaWYgKHBvc2l0aW9uIDwgMClcblx0ICAgICAgcmV0dXJuIHRoaXM7XG5cdFxuXHQgICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKSB7XG5cdCAgICAgIGxpc3QubGVuZ3RoID0gMDtcblx0ICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIGxpc3Quc3BsaWNlKHBvc2l0aW9uLCAxKTtcblx0ICAgIH1cblx0XG5cdCAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuXHQgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdGVuZXIpO1xuXHQgIH1cblx0XG5cdCAgcmV0dXJuIHRoaXM7XG5cdH07XG5cdFxuXHRFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uKHR5cGUpIHtcblx0ICB2YXIga2V5LCBsaXN0ZW5lcnM7XG5cdFxuXHQgIGlmICghdGhpcy5fZXZlbnRzKVxuXHQgICAgcmV0dXJuIHRoaXM7XG5cdFxuXHQgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcblx0ICBpZiAoIXRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcikge1xuXHQgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG5cdCAgICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXHQgICAgZWxzZSBpZiAodGhpcy5fZXZlbnRzW3R5cGVdKVxuXHQgICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuXHQgICAgcmV0dXJuIHRoaXM7XG5cdCAgfVxuXHRcblx0ICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcblx0ICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuXHQgICAgZm9yIChrZXkgaW4gdGhpcy5fZXZlbnRzKSB7XG5cdCAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuXHQgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO1xuXHQgICAgfVxuXHQgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG5cdCAgICB0aGlzLl9ldmVudHMgPSB7fTtcblx0ICAgIHJldHVybiB0aGlzO1xuXHQgIH1cblx0XG5cdCAgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuXHRcblx0ICBpZiAoaXNGdW5jdGlvbihsaXN0ZW5lcnMpKSB7XG5cdCAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG5cdCAgfSBlbHNlIGlmIChsaXN0ZW5lcnMpIHtcblx0ICAgIC8vIExJRk8gb3JkZXJcblx0ICAgIHdoaWxlIChsaXN0ZW5lcnMubGVuZ3RoKVxuXHQgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyc1tsaXN0ZW5lcnMubGVuZ3RoIC0gMV0pO1xuXHQgIH1cblx0ICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuXHRcblx0ICByZXR1cm4gdGhpcztcblx0fTtcblx0XG5cdEV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkge1xuXHQgIHZhciByZXQ7XG5cdCAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1t0eXBlXSlcblx0ICAgIHJldCA9IFtdO1xuXHQgIGVsc2UgaWYgKGlzRnVuY3Rpb24odGhpcy5fZXZlbnRzW3R5cGVdKSlcblx0ICAgIHJldCA9IFt0aGlzLl9ldmVudHNbdHlwZV1dO1xuXHQgIGVsc2Vcblx0ICAgIHJldCA9IHRoaXMuX2V2ZW50c1t0eXBlXS5zbGljZSgpO1xuXHQgIHJldHVybiByZXQ7XG5cdH07XG5cdFxuXHRFdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbih0eXBlKSB7XG5cdCAgaWYgKHRoaXMuX2V2ZW50cykge1xuXHQgICAgdmFyIGV2bGlzdGVuZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cdFxuXHQgICAgaWYgKGlzRnVuY3Rpb24oZXZsaXN0ZW5lcikpXG5cdCAgICAgIHJldHVybiAxO1xuXHQgICAgZWxzZSBpZiAoZXZsaXN0ZW5lcilcblx0ICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuXHQgIH1cblx0ICByZXR1cm4gMDtcblx0fTtcblx0XG5cdEV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuXHQgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG5cdH07XG5cdFxuXHRmdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuXHQgIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xuXHR9XG5cdFxuXHRmdW5jdGlvbiBpc051bWJlcihhcmcpIHtcblx0ICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7XG5cdH1cblx0XG5cdGZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuXHQgIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG5cdH1cblx0XG5cdGZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuXHQgIHJldHVybiBhcmcgPT09IHZvaWQgMDtcblx0fVxuXG5cbi8qKiovIH0pLFxuLyogMTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBtYXRoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcblx0XG5cdC8qKlxuXHQgIENyZWF0ZXMgYSBzdGVwcGFibGUgdmFsdWUgd2l0aCBtaW5pbXVtLCBtYXhpbXVtLCBhbmQgc3RlcCBzaXplLiBUaGlzIGlzIHVzZWQgaW4gbWFueSBpbnRlcmZhY2VzIHRvIGNvbnN0cmljdCB0aGVpciB2YWx1ZXMgdG8gY2VydGFpbiByYW5nZXMuXG5cdCAgQHBhcmFtIHtudW1iZXJ9IFttaW49MF0gbWluaW11bVxuXHQgIEBwYXJhbSB7bnVtYmVyfSBbbWF4PTFdIG1heGltdW1cblx0ICBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF1cblx0ICBAcGFyYW0ge251bWJlcn0gW3ZhbHVlPTBdIGluaXRpYWwgdmFsdWVcblx0ICBAcmV0dXJucyB7T2JqZWN0fSBTdGVwXG5cdCovXG5cdFxuXHR2YXIgU3RlcCA9IChmdW5jdGlvbiAoKSB7XG5cdCAgZnVuY3Rpb24gU3RlcCgpIHtcblx0ICAgIHZhciBtaW4gPSBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IDAgOiBhcmd1bWVudHNbMF07XG5cdCAgICB2YXIgbWF4ID0gYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyAxIDogYXJndW1lbnRzWzFdO1xuXHQgICAgdmFyIHN0ZXAgPSBhcmd1bWVudHNbMl0gPT09IHVuZGVmaW5lZCA/IDAgOiBhcmd1bWVudHNbMl07XG5cdCAgICB2YXIgdmFsdWUgPSBhcmd1bWVudHNbM10gPT09IHVuZGVmaW5lZCA/IDAgOiBhcmd1bWVudHNbM107XG5cdFxuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN0ZXApO1xuXHRcblx0ICAgIC8vT2JqZWN0LmFzc2lnbih0aGlzLHttaW4sbWF4LHN0ZXB9KTtcblx0ICAgIC8vQ2Fubm90IHVzZSBPYmplY3QuYXNzaWduIGJlY2F1c2Ugbm90IHN1cHBvcnRlZCBpbiBTYWZhcmkuXG5cdCAgICAvL0kgd291bGQgZXhwZWN0IGZvciBCYWJlbCB0byB0YWtlIGNhcmUgb2YgdGhpcyBidXQgaXQgaXMgbm90LlxuXHQgICAgdGhpcy5taW4gPSBtaW47XG5cdCAgICB0aGlzLm1heCA9IG1heDtcblx0ICAgIHRoaXMuc3RlcCA9IHN0ZXA7XG5cdCAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG5cdCAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZTtcblx0ICAgIHRoaXMub2xkVmFsdWUgPSBmYWxzZTtcblx0ICAgIHRoaXMudXBkYXRlKHRoaXMudmFsdWUpO1xuXHQgIH1cblx0XG5cdCAgX2NyZWF0ZUNsYXNzKFN0ZXAsIHtcblx0ICAgIHVwZGF0ZToge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgICAgVXBkYXRlIHdpdGggYSBuZXcgdmFsdWUuIFRoZSB2YWx1ZSB3aWxsIGJlIGF1dG8tYWRqdXN0ZWQgdG8gZml0IHRoZSBtaW4vbWF4L3N0ZXAuXG5cdCAgICAgICAgQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG5cdCAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlKHZhbHVlKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuc3RlcCkge1xuXHQgICAgICAgICAgLy8gdGhpcy52YWx1ZSA9IG1hdGguY2xpcChNYXRoLnJvdW5kKHZhbHVlIC8gKHRoaXMuc3RlcCkpICogdGhpcy5zdGVwLCB0aGlzLm1pbix0aGlzLm1heCk7XG5cdCAgICAgICAgICB0aGlzLnZhbHVlID0gbWF0aC5jbGlwKE1hdGgucm91bmQoKHZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5zdGVwKSAqIHRoaXMuc3RlcCArIHRoaXMubWluLCB0aGlzLm1pbiwgdGhpcy5tYXgpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLnZhbHVlID0gbWF0aC5jbGlwKHZhbHVlLCB0aGlzLm1pbiwgdGhpcy5tYXgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5vbGRWYWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuXHQgICAgICAgICAgdGhpcy5vbGRWYWx1ZSA9IHRoaXMudmFsdWU7XG5cdCAgICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICB1cGRhdGVOb3JtYWw6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICAgIFVwZGF0ZSB3aXRoIGEgbm9ybWFsaXplZCB2YWx1ZSAwLTEuXG5cdCAgICAgICAgQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG5cdCAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlTm9ybWFsKHZhbHVlKSB7XG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IG1hdGguc2NhbGUodmFsdWUsIDAsIDEsIHRoaXMubWluLCB0aGlzLm1heCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKHRoaXMudmFsdWUpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbm9ybWFsaXplZDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgICAgR2V0IGEgbm9ybWFsaXplZCB2ZXJzaW9uIG9mIHRoaXMudmFsdWUgLiBOb3Qgc2V0dGFibGUuXG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gbWF0aC5ub3JtYWxpemUodGhpcy52YWx1ZSwgdGhpcy5taW4sIHRoaXMubWF4KTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pO1xuXHRcblx0ICByZXR1cm4gU3RlcDtcblx0fSkoKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gU3RlcDtcblxuLyoqKi8gfSksXG4vKiAxMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9pbnRlcm9wUmVxdWlyZSA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialtcImRlZmF1bHRcIl0gOiBvYmo7IH07XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGtleSBpbiBwcm9wcykgeyB2YXIgcHJvcCA9IHByb3BzW2tleV07IHByb3AuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKHByb3AudmFsdWUpIHByb3Aud3JpdGFibGUgPSB0cnVlOyB9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpOyB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH07XG5cdFxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcblx0ICB2YWx1ZTogdHJ1ZVxuXHR9KTtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgbWF0aCA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKTtcblx0XG5cdHZhciBUb2dnbGVNb2RlbCA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKSk7XG5cdFxuXHQvKlxuXHRob3cgdG8gdXNlIDpcblx0XG5cdGRpYWwuaW50ZXJhY3Rpb24gPSBuZXcgSGFuZGxlKCdyYWRpYWwnLCdyZWxhdGl2ZScsdGhpcy53aWR0aCx0aGlzLmhlaWdodCk7XG5cdC8vIGRpYWwuaW50ZXJhY3Rpb24ubW9kZSA9ICdyZWxhdGl2ZSdcblx0Ly8gZGlhbC5pbnRlcmFjdGlvbi5kaXJlY3Rpb24gPSAncmFkaWFsJ1xuXHRcblx0b24gY2xpY2s6XG5cdGRpYWwuaW50ZXJhY3Rpb24uYW5jaG9yID0gdGhpcy5tb3VzZTtcblx0XG5cdG9uIG1vdmU6XG5cdGRpYWwuaW50ZXJhY3Rpb24udXBkYXRlKHRoaXMubW91c2UpO1xuXHRcblx0Y29uc29sZS5sb2coIGRpYWwuaW50ZXJhY3Rpb24udmFsdWUgKTsgc2hvdWxkIGJlIGEgbm9ybWFsaXplZCB2YWx1ZS5cblx0XG5cdCovXG5cdFxuXHQvKlxuXHQgIGFic29sdXRlL3JlbGF0aXZlIGFyZSBwcm9wZXJ0eTogbW9kZVxuXHQgIHJhZGlhbC92ZXJ0aWNhbC9ob3Jpem9udGFsLzJkIGFyZSBwcm9wZXJ0eTogZGlyZWN0aW9uXG5cdFxuXHQgIHBsYW4gOlxuXHRcblx0ICBpZiByZWxhdGl2ZSAtLVxuXHQgIE5PIG9uIGNsaWNrLCBnZXQgdmFsdWUgb2Zmc2V0IGJldHdlZW4gY3VycmVudCB2YWx1ZSBhbmQgY2xpY2sgdmFsdWUuXG5cdCAgTk8gb24gbW92ZSwgdXNlIGNsaWNrIHZhbHVlIC0gb2Zmc2V0XG5cdCAgSU5TVEVBRFxuXHQgIHVzZSBkZWx0YSAtLSBiYyB2ZXJ0aWNhbCBtb3Rpb24gb24gZGlhbCBpcyBpbXBvc3NpYmxlIG90aGVyd2lzZVxuXHQgIGFsc28gYWxsb3cgdG8gc2V0IHNlbnNpdGl2aXR5XG5cdFxuXHQqL1xuXHRcblx0dmFyIEhhbmRsZSA9IGV4cG9ydHMuSGFuZGxlID0gKGZ1bmN0aW9uICgpIHtcblx0ICBmdW5jdGlvbiBIYW5kbGUoKSB7XG5cdCAgICB2YXIgbW9kZSA9IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gXCJhYnNvbHV0ZVwiIDogYXJndW1lbnRzWzBdO1xuXHQgICAgdmFyIGRpcmVjdGlvbiA9IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gXCJ2ZXJ0aWNhbFwiIDogYXJndW1lbnRzWzFdO1xuXHQgICAgdmFyIHhib3VuZCA9IGFyZ3VtZW50c1syXSA9PT0gdW5kZWZpbmVkID8gWzAsIDEwMF0gOiBhcmd1bWVudHNbMl07XG5cdCAgICB2YXIgeWJvdW5kID0gYXJndW1lbnRzWzNdID09PSB1bmRlZmluZWQgPyBbMCwgMTAwXSA6IGFyZ3VtZW50c1szXTtcblx0XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSGFuZGxlKTtcblx0XG5cdCAgICB0aGlzLm1vZGUgPSBtb2RlO1xuXHQgICAgdGhpcy5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG5cdCAgICB0aGlzLnByZXZpb3VzID0gMDtcblx0ICAgIHRoaXMudmFsdWUgPSAwO1xuXHQgICAgdGhpcy5zZW5zaXRpdml0eSA9IDE7XG5cdCAgICB0aGlzLnJlc2l6ZSh4Ym91bmQsIHlib3VuZCk7XG5cdCAgfVxuXHRcblx0ICBfY3JlYXRlQ2xhc3MoSGFuZGxlLCB7XG5cdCAgICByZXNpemU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlc2l6ZSh4Ym91bmQsIHlib3VuZCkge1xuXHQgICAgICAgIHRoaXMuYm91bmRhcnkgPSB7XG5cdCAgICAgICAgICBtaW46IHtcblx0ICAgICAgICAgICAgeDogeGJvdW5kWzBdLFxuXHQgICAgICAgICAgICB5OiB5Ym91bmRbMF1cblx0ICAgICAgICAgIH0sXG5cdCAgICAgICAgICBtYXg6IHtcblx0ICAgICAgICAgICAgeDogeGJvdW5kWzFdLFxuXHQgICAgICAgICAgICB5OiB5Ym91bmRbMV1cblx0ICAgICAgICAgIH0sXG5cdCAgICAgICAgICBjZW50ZXI6IHtcblx0ICAgICAgICAgICAgeDogKHhib3VuZFsxXSAtIHhib3VuZFswXSkgLyAyICsgeGJvdW5kWzBdLFxuXHQgICAgICAgICAgICB5OiAoeWJvdW5kWzFdIC0geWJvdW5kWzBdKSAvIDIgKyB5Ym91bmRbMF1cblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgYW5jaG9yOiB7XG5cdCAgICAgIHNldDogZnVuY3Rpb24gKG1vdXNlKSB7XG5cdCAgICAgICAgdGhpcy5fYW5jaG9yID0gdGhpcy5jb252ZXJ0UG9zaXRpb25Ub1ZhbHVlKG1vdXNlKTtcblx0ICAgICAgfSxcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2FuY2hvcjtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHVwZGF0ZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlKG1vdXNlKSB7XG5cdCAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gXCJyZWxhdGl2ZVwiKSB7XG5cdCAgICAgICAgICB2YXIgaW5jcmVtZW50ID0gdGhpcy5jb252ZXJ0UG9zaXRpb25Ub1ZhbHVlKG1vdXNlKSAtIHRoaXMuYW5jaG9yO1xuXHQgICAgICAgICAgaWYgKE1hdGguYWJzKGluY3JlbWVudCkgPiAwLjUpIHtcblx0ICAgICAgICAgICAgaW5jcmVtZW50ID0gMDtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIHRoaXMuYW5jaG9yID0gbW91c2U7XG5cdCAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSArIGluY3JlbWVudCAqIHRoaXMuc2Vuc2l0aXZpdHk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNvbnZlcnRQb3NpdGlvblRvVmFsdWUobW91c2UpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLnZhbHVlID0gbWF0aC5jbGlwKHRoaXMudmFsdWUsIDAsIDEpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29udmVydFBvc2l0aW9uVG9WYWx1ZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY29udmVydFBvc2l0aW9uVG9WYWx1ZShjdXJyZW50KSB7XG5cdCAgICAgICAgc3dpdGNoICh0aGlzLmRpcmVjdGlvbikge1xuXHQgICAgICAgICAgY2FzZSBcInJhZGlhbFwiOlxuXHQgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXRoLnRvUG9sYXIoY3VycmVudC54IC0gdGhpcy5ib3VuZGFyeS5jZW50ZXIueCwgY3VycmVudC55IC0gdGhpcy5ib3VuZGFyeS5jZW50ZXIueSk7XG5cdCAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24uYW5nbGUgLyAoTWF0aC5QSSAqIDIpO1xuXHQgICAgICAgICAgICBwb3NpdGlvbiA9IChwb3NpdGlvbiAtIDAuMjUgKyAxKSAlIDE7XG5cdCAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjtcblx0ICAgICAgICAgIGNhc2UgXCJ2ZXJ0aWNhbFwiOlxuXHQgICAgICAgICAgICByZXR1cm4gbWF0aC5zY2FsZShjdXJyZW50LnksIHRoaXMuYm91bmRhcnkubWluLnksIHRoaXMuYm91bmRhcnkubWF4LnksIDAsIDEpO1xuXHQgICAgICAgICAgY2FzZSBcImhvcml6b250YWxcIjpcblx0ICAgICAgICAgICAgcmV0dXJuIG1hdGguc2NhbGUoY3VycmVudC54LCB0aGlzLmJvdW5kYXJ5Lm1pbi54LCB0aGlzLmJvdW5kYXJ5Lm1heC54LCAwLCAxKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIEhhbmRsZTtcblx0fSkoKTtcblx0XG5cdHZhciBCdXR0b24gPSBleHBvcnRzLkJ1dHRvbiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgZnVuY3Rpb24gQnV0dG9uKCkge1xuXHQgICAgdmFyIG1vZGUgPSBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IFwiYnV0dG9uXCIgOiBhcmd1bWVudHNbMF07XG5cdFxuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJ1dHRvbik7XG5cdFxuXHQgICAgdGhpcy5tb2RlID0gbW9kZTtcblx0ICAgIHRoaXMuc3RhdGUgPSBuZXcgVG9nZ2xlTW9kZWwoKTtcblx0ICAgIHRoaXMucGFpbnRicnVzaCA9IGZhbHNlO1xuXHQgIH1cblx0XG5cdCAgX2NyZWF0ZUNsYXNzKEJ1dHRvbiwge1xuXHQgICAgY2xpY2s6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsaWNrKCkge1xuXHQgICAgICAgIHN3aXRjaCAodGhpcy5tb2RlKSB7XG5cdCAgICAgICAgICBjYXNlIFwiaW1wdWxzZVwiOlxuXHQgICAgICAgICAgICB0aGlzLnN0YXRlLm9uKCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcblx0ICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMuc3RhdGUub2ZmLmJpbmQodGhpcyksIDMwKTtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMuc3RhdGUpO1xuXHQgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgIGNhc2UgXCJidXR0b25cIjpcblx0ICAgICAgICAgICAgdGhpcy50dXJuT24oKTtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMuc3RhdGUpO1xuXHQgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgIGNhc2UgXCJhZnRlcnRvdWNoXCI6XG5cdCAgICAgICAgICAgIHRoaXMucG9zaXRpb24gPSB7XG5cdCAgICAgICAgICAgICAgeDogbWF0aC5jbGlwKHRoaXMubW91c2UueCAvIHRoaXMud2lkdGgsIDAsIDEpLFxuXHQgICAgICAgICAgICAgIHk6IG1hdGguY2xpcCgxIC0gdGhpcy5tb3VzZS55IC8gdGhpcy5oZWlnaHQsIDAsIDEpXG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIHRoaXMudHVybk9uKCk7XG5cdCAgICAgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB7XG5cdCAgICAgICAgICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG5cdCAgICAgICAgICAgICAgeDogdGhpcy5wb3NpdGlvbi54LFxuXHQgICAgICAgICAgICAgIHk6IHRoaXMucG9zaXRpb24ueSB9KTtcblx0ICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICBjYXNlIFwidG9nZ2xlXCI6XG5cdCAgICAgICAgICAgIHRoaXMuZmxpcCgpO1xuXHQgICAgICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwgdGhpcy5zdGF0ZSk7XG5cdCAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1vdmU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIG1vdmUoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gXCJhZnRlcnRvdWNoXCIpIHtcblx0ICAgICAgICAgIHRoaXMucG9zaXRpb24gPSB7XG5cdCAgICAgICAgICAgIHg6IG1hdGguY2xpcCh0aGlzLm1vdXNlLnggLyB0aGlzLndpZHRoLCAwLCAxKSxcblx0ICAgICAgICAgICAgeTogbWF0aC5jbGlwKDEgLSB0aGlzLm1vdXNlLnkgLyB0aGlzLmhlaWdodCwgMCwgMSlcblx0ICAgICAgICAgIH07XG5cdCAgICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwge1xuXHQgICAgICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcblx0ICAgICAgICAgICAgeDogdGhpcy5wb3NpdGlvbi54LFxuXHQgICAgICAgICAgICB5OiB0aGlzLnBvc2l0aW9uLnkgfSk7XG5cdCAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlbGVhc2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbGVhc2UoKSB7XG5cdCAgICAgICAgc3dpdGNoICh0aGlzLm1vZGUpIHtcblx0ICAgICAgICAgIGNhc2UgXCJidXR0b25cIjpcblx0ICAgICAgICAgICAgdGhpcy50dXJuT2ZmKCk7XG5cdCAgICAgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB0aGlzLnN0YXRlKTtcblx0ICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICBjYXNlIFwiYWZ0ZXJ0b3VjaFwiOlxuXHQgICAgICAgICAgICB0aGlzLnR1cm5PZmYoKTtcblx0ICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHtcblx0ICAgICAgICAgICAgICB4OiB0aGlzLm1vdXNlLnggLyB0aGlzLndpZHRoLFxuXHQgICAgICAgICAgICAgIHk6IDEgLSB0aGlzLm1vdXNlLnkgLyB0aGlzLmhlaWdodFxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwge1xuXHQgICAgICAgICAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuXHQgICAgICAgICAgICAgIHg6IHRoaXMucG9zaXRpb24ueCxcblx0ICAgICAgICAgICAgICB5OiB0aGlzLnBvc2l0aW9uLnkgfSk7XG5cdCAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pO1xuXHRcblx0ICByZXR1cm4gQnV0dG9uO1xuXHR9KSgpO1xuXG4vKioqLyB9KSxcbi8qIDEzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGtleSBpbiBwcm9wcykgeyB2YXIgcHJvcCA9IHByb3BzW2tleV07IHByb3AuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKHByb3AudmFsdWUpIHByb3Aud3JpdGFibGUgPSB0cnVlOyB9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpOyB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH07XG5cdFxuXHR2YXIgVG9nZ2xlID0gKGZ1bmN0aW9uICgpIHtcblx0ICBmdW5jdGlvbiBUb2dnbGUoc3RhdGUpIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUb2dnbGUpO1xuXHRcblx0ICAgIHRoaXMuc3RhdGUgPSBzdGF0ZSB8fCBmYWxzZTtcblx0ICB9XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhUb2dnbGUsIHtcblx0ICAgIGZsaXA6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZsaXAoc3RhdGUpIHtcblx0ICAgICAgICBpZiAoc3RhdGUgfHwgc3RhdGUgPT09IGZhbHNlKSB7XG5cdCAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMuc3RhdGUgPSAhdGhpcy5zdGF0ZTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gb24oKSB7XG5cdCAgICAgICAgdGhpcy5zdGF0ZSA9IHRydWU7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBvZmY6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9mZigpIHtcblx0ICAgICAgICB0aGlzLnN0YXRlID0gZmFsc2U7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIFRvZ2dsZTtcblx0fSkoKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gVG9nZ2xlO1xuXG4vKioqLyB9KSxcbi8qIDE0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQgPSBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfTtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7IH0gfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gZGVzYyAmJiBkZXNjLndyaXRhYmxlKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfTtcblx0XG5cdHZhciBfaW5oZXJpdHMgPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBzdmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXHR2YXIgSW50ZXJmYWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcblx0dmFyIFN0ZXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcblx0XG5cdHZhciBJbnRlcmFjdGlvbiA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9fd2VicGFja19yZXF1aXJlX18oMTIpKTtcblx0XG5cdC8qKlxuXHQqIFNsaWRlclxuXHQqXG5cdCogQGRlc2NyaXB0aW9uIEhvcml6b250YWwgb3IgdmVydGljYWwgc2xpZGVyIHdpdGggc2V0dGFibGUgaW50ZXJhY3Rpb24gbW9kZXMuXG5cdCpcblx0KiBAZGVtbyA8c3BhbiBuZXh1cy11aT1cInNsaWRlclwiIHN0ZXA9MC4yPjwvc3Bhbj5cblx0KlxuXHQqIEBleGFtcGxlXG5cdCogdmFyIHNsaWRlciA9IG5ldyBOZXh1cy5TbGlkZXIoJyN0YXJnZXQnKVxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgc2xpZGVyID0gbmV3IE5leHVzLlNsaWRlcignI3RhcmdldCcse1xuXHQqICAgICAnc2l6ZSc6IFsxMjAsMjBdLFxuXHQqICAgICAnbW9kZSc6ICdyZWxhdGl2ZScsICAvLyAncmVsYXRpdmUnIG9yICdhYnNvbHV0ZSdcblx0KiAgICAgJ21pbic6IDAsXG5cdCogICAgICdtYXgnOiAxLFxuXHQqICAgICAnc3RlcCc6IDAsXG5cdCogICAgICd2YWx1ZSc6IDBcblx0KiB9KVxuXHQqXG5cdCogQG91dHB1dFxuXHQqIGNoYW5nZVxuXHQqIEZpcmVzIHdoZW4gdGhlIGludGVyZmFjZSdzIHZhbHVlIGNoYW5nZXMuIDxicj5cblx0KiBFdmVudCBkYXRhOiA8aT5udW1iZXI8L2k+IFRoZSBudW1iZXIgdmFsdWUgb2YgdGhlIGludGVyZmFjZS5cblx0KlxuXHQqIEBvdXRwdXRleGFtcGxlXG5cdCogc2xpZGVyLm9uKCdjaGFuZ2UnLGZ1bmN0aW9uKHYpIHtcblx0KiAgIGNvbnNvbGUubG9nKHYpO1xuXHQqIH0pXG5cdCpcblx0KlxuXHQqL1xuXHRcblx0dmFyIFNsaWRlciA9IChmdW5jdGlvbiAoX0ludGVyZmFjZSkge1xuXHQgIGZ1bmN0aW9uIFNsaWRlcigpIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTbGlkZXIpO1xuXHRcblx0ICAgIHZhciBvcHRpb25zID0gW1wibWluXCIsIFwibWF4XCIsIFwidmFsdWVcIl07XG5cdFxuXHQgICAgdmFyIGRlZmF1bHRzID0ge1xuXHQgICAgICBzaXplOiBbMTIwLCAyMF0sXG5cdCAgICAgIG1vZGU6IFwicmVsYXRpdmVcIiwgLy8gJ3JlbGF0aXZlJyBvciAnYWJzb2x1dGUnXG5cdCAgICAgIG1pbjogMCxcblx0ICAgICAgbWF4OiAxLFxuXHQgICAgICBzdGVwOiAwLFxuXHQgICAgICB2YWx1ZTogMFxuXHQgICAgfTtcblx0XG5cdCAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihTbGlkZXIucHJvdG90eXBlKSwgXCJjb25zdHJ1Y3RvclwiLCB0aGlzKS5jYWxsKHRoaXMsIGFyZ3VtZW50cywgb3B0aW9ucywgZGVmYXVsdHMpO1xuXHRcblx0ICAgIHRoaXMub3JpZW50YXRpb24gPSBcInZlcnRpY2FsXCI7IC8vIFRoaXMgd2lsbCBjaGFuZ2UgYXV0b21hdGljYWxseSB0byAnaG9yaXpvbnRhbCdpZiB0aGUgaW50ZXJmYWNlIGlzIHdpZGVyIHRoYW4gaXQgaXMgdGFsbC5cblx0XG5cdCAgICB0aGlzLl92YWx1ZSA9IG5ldyBTdGVwKHRoaXMuc2V0dGluZ3MubWluLCB0aGlzLnNldHRpbmdzLm1heCwgdGhpcy5zZXR0aW5ncy5zdGVwLCB0aGlzLnNldHRpbmdzLnZhbHVlKTtcblx0XG5cdCAgICB0aGlzLnBvc2l0aW9uID0gbmV3IEludGVyYWN0aW9uLkhhbmRsZSh0aGlzLnNldHRpbmdzLm1vZGUsIHRoaXMub3JpZW50YXRpb24sIFswLCB0aGlzLndpZHRoXSwgW3RoaXMuaGVpZ2h0LCAwXSk7XG5cdCAgICB0aGlzLnBvc2l0aW9uLnZhbHVlID0gdGhpcy5fdmFsdWUubm9ybWFsaXplZDtcblx0XG5cdCAgICB0aGlzLmluaXQoKTtcblx0XG5cdCAgICB0aGlzLnBvc2l0aW9uLmRpcmVjdGlvbiA9IHRoaXMub3JpZW50YXRpb247XG5cdFxuXHQgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMudmFsdWUpO1xuXHQgIH1cblx0XG5cdCAgX2luaGVyaXRzKFNsaWRlciwgX0ludGVyZmFjZSk7XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhTbGlkZXIsIHtcblx0ICAgIGJ1aWxkSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgdGhpcy5iYXIgPSBzdmcuY3JlYXRlKFwicmVjdFwiKTtcblx0ICAgICAgICB0aGlzLmZpbGxiYXIgPSBzdmcuY3JlYXRlKFwicmVjdFwiKTtcblx0ICAgICAgICB0aGlzLmtub2IgPSBzdmcuY3JlYXRlKFwiY2lyY2xlXCIpO1xuXHRcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5iYXIpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmZpbGxiYXIpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmtub2IpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2l6ZUludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc2l6ZUludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgaWYgKHRoaXMud2lkdGggPCB0aGlzLmhlaWdodCkge1xuXHQgICAgICAgICAgdGhpcy5vcmllbnRhdGlvbiA9IFwidmVydGljYWxcIjtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy5vcmllbnRhdGlvbiA9IFwiaG9yaXpvbnRhbFwiO1xuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgaWYgKHRoaXMucG9zaXRpb24pIHtcblx0ICAgICAgICAgIHRoaXMucG9zaXRpb24ucmVzaXplKFswLCB0aGlzLndpZHRoXSwgW3RoaXMuaGVpZ2h0LCAwXSk7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICB2YXIgeCA9IHVuZGVmaW5lZCxcblx0ICAgICAgICAgICAgeSA9IHVuZGVmaW5lZCxcblx0ICAgICAgICAgICAgdyA9IHVuZGVmaW5lZCxcblx0ICAgICAgICAgICAgaCA9IHVuZGVmaW5lZCxcblx0ICAgICAgICAgICAgYmFyT2Zmc2V0ID0gdW5kZWZpbmVkLFxuXHQgICAgICAgICAgICBjb3JuZXJSYWRpdXMgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgdGhpcy5rbm9iRGF0YSA9IHtcblx0ICAgICAgICAgIGxldmVsOiAwLFxuXHQgICAgICAgICAgcjogMFxuXHQgICAgICAgIH07XG5cdFxuXHQgICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcblx0ICAgICAgICAgIHRoaXMudGhpY2tuZXNzID0gdGhpcy53aWR0aCAvIDI7XG5cdCAgICAgICAgICB4ID0gdGhpcy53aWR0aCAvIDI7XG5cdCAgICAgICAgICB5ID0gMDtcblx0ICAgICAgICAgIHcgPSB0aGlzLnRoaWNrbmVzcztcblx0ICAgICAgICAgIGggPSB0aGlzLmhlaWdodDtcblx0ICAgICAgICAgIHRoaXMua25vYkRhdGEuciA9IHRoaXMudGhpY2tuZXNzICogMC44O1xuXHQgICAgICAgICAgdGhpcy5rbm9iRGF0YS5sZXZlbCA9IGggLSB0aGlzLmtub2JEYXRhLnIgLSB0aGlzLm5vcm1hbGl6ZWQgKiAoaCAtIHRoaXMua25vYkRhdGEuciAqIDIpO1xuXHQgICAgICAgICAgYmFyT2Zmc2V0ID0gXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLnRoaWNrbmVzcyAqIC0xIC8gMiArIFwiLDApXCI7XG5cdCAgICAgICAgICBjb3JuZXJSYWRpdXMgPSB3IC8gMjtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy50aGlja25lc3MgPSB0aGlzLmhlaWdodCAvIDI7XG5cdCAgICAgICAgICB4ID0gMDtcblx0ICAgICAgICAgIHkgPSB0aGlzLmhlaWdodCAvIDI7XG5cdCAgICAgICAgICB3ID0gdGhpcy53aWR0aDtcblx0ICAgICAgICAgIGggPSB0aGlzLnRoaWNrbmVzcztcblx0ICAgICAgICAgIHRoaXMua25vYkRhdGEuciA9IHRoaXMudGhpY2tuZXNzICogMC44O1xuXHQgICAgICAgICAgdGhpcy5rbm9iRGF0YS5sZXZlbCA9IHRoaXMubm9ybWFsaXplZCAqICh3IC0gdGhpcy5rbm9iRGF0YS5yICogMikgKyB0aGlzLmtub2JEYXRhLnI7XG5cdCAgICAgICAgICBiYXJPZmZzZXQgPSBcInRyYW5zbGF0ZSgwLFwiICsgdGhpcy50aGlja25lc3MgKiAtMSAvIDIgKyBcIilcIjtcblx0ICAgICAgICAgIGNvcm5lclJhZGl1cyA9IGggLyAyO1xuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwieFwiLCB4KTtcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJ5XCIsIHkpO1xuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLCBiYXJPZmZzZXQpO1xuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcInJ4XCIsIGNvcm5lclJhZGl1cyk7IC8vIGNvcm5lciByYWRpdXNcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJyeVwiLCBjb3JuZXJSYWRpdXMpO1xuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIHcpO1xuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBoKTtcblx0XG5cdCAgICAgICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuXHQgICAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcInhcIiwgeCk7XG5cdCAgICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwieVwiLCB0aGlzLmtub2JEYXRhLmxldmVsKTtcblx0ICAgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCB3KTtcblx0ICAgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgaCAtIHRoaXMua25vYkRhdGEubGV2ZWwpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwieFwiLCAwKTtcblx0ICAgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJ5XCIsIHkpO1xuXHQgICAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIHRoaXMua25vYkRhdGEubGV2ZWwpO1xuXHQgICAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLCBiYXJPZmZzZXQpO1xuXHQgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJyeFwiLCBjb3JuZXJSYWRpdXMpO1xuXHQgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJyeVwiLCBjb3JuZXJSYWRpdXMpO1xuXHRcblx0ICAgICAgICBpZiAodGhpcy5vcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG5cdCAgICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiY3hcIiwgeCk7XG5cdCAgICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiY3lcIiwgdGhpcy5rbm9iRGF0YS5sZXZlbCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJjeFwiLCB0aGlzLmtub2JEYXRhLmxldmVsKTtcblx0ICAgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJjeVwiLCB5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcInJcIiwgdGhpcy5rbm9iRGF0YS5yKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNvbG9ySW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb2xvckludGVyZmFjZSgpIHtcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLmZpbGwpO1xuXHQgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLmFjY2VudCk7XG5cdCAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5jb2xvcnMuYWNjZW50KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlbmRlcjoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHQgICAgICAgIGlmICghdGhpcy5jbGlja2VkKSB7XG5cdCAgICAgICAgICB0aGlzLmtub2JEYXRhLnIgPSB0aGlzLnRoaWNrbmVzcyAqIDAuNzU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJyXCIsIHRoaXMua25vYkRhdGEucik7XG5cdFxuXHQgICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcblx0ICAgICAgICAgIHRoaXMua25vYkRhdGEubGV2ZWwgPSB0aGlzLmtub2JEYXRhLnIgKyB0aGlzLl92YWx1ZS5ub3JtYWxpemVkICogKHRoaXMuaGVpZ2h0IC0gdGhpcy5rbm9iRGF0YS5yICogMik7XG5cdCAgICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiY3lcIiwgdGhpcy5oZWlnaHQgLSB0aGlzLmtub2JEYXRhLmxldmVsKTtcblx0ICAgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJ5XCIsIHRoaXMuaGVpZ2h0IC0gdGhpcy5rbm9iRGF0YS5sZXZlbCk7XG5cdCAgICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIHRoaXMua25vYkRhdGEubGV2ZWwpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLmtub2JEYXRhLmxldmVsID0gdGhpcy5fdmFsdWUubm9ybWFsaXplZCAqICh0aGlzLndpZHRoIC0gdGhpcy5rbm9iRGF0YS5yICogMikgKyB0aGlzLmtub2JEYXRhLnI7XG5cdCAgICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiY3hcIiwgdGhpcy5rbm9iRGF0YS5sZXZlbCk7XG5cdCAgICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwieFwiLCAwKTtcblx0ICAgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCB0aGlzLmtub2JEYXRhLmxldmVsKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjbGljazoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xpY2soKSB7XG5cdCAgICAgICAgdGhpcy5rbm9iRGF0YS5yID0gdGhpcy50aGlja25lc3MgKiAwLjk7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvbi5hbmNob3IgPSB0aGlzLm1vdXNlO1xuXHQgICAgICAgIHRoaXMubW92ZSgpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbW92ZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gbW92ZSgpIHtcblx0ICAgICAgICBpZiAodGhpcy5jbGlja2VkKSB7XG5cdCAgICAgICAgICB0aGlzLnBvc2l0aW9uLnVwZGF0ZSh0aGlzLm1vdXNlKTtcblx0ICAgICAgICAgIHRoaXMuX3ZhbHVlLnVwZGF0ZU5vcm1hbCh0aGlzLnBvc2l0aW9uLnZhbHVlKTtcblx0ICAgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB0aGlzLl92YWx1ZS52YWx1ZSk7XG5cdCAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlbGVhc2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbGVhc2UoKSB7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG5vcm1hbGl6ZWQ6IHtcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlLm5vcm1hbGl6ZWQ7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICB2YWx1ZToge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFRoZSBzbGlkZXIncyBjdXJyZW50IHZhbHVlLiBJZiBzZXQgbWFudWFsbHksIHdpbGwgdXBkYXRlIHRoZSBpbnRlcmZhY2UgYW5kIHRyaWdnZXIgdGhlIG91dHB1dCBldmVudC5cblx0ICAgICAgQHR5cGUge251bWJlcn1cblx0ICAgICAgQGV4YW1wbGUgc2xpZGVyLnZhbHVlID0gMTA7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUudmFsdWU7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLl92YWx1ZS51cGRhdGUodik7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvbi52YWx1ZSA9IHRoaXMuX3ZhbHVlLm5vcm1hbGl6ZWQ7XG5cdCAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMuX3ZhbHVlLnZhbHVlKTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbWluOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgTG93ZXIgbGltaXQgb2YgdGhlIHNsaWRlcnMncyBvdXRwdXQgcmFuZ2Vcblx0ICAgICAgQHR5cGUge251bWJlcn1cblx0ICAgICAgQGV4YW1wbGUgc2xpZGVyLm1pbiA9IDEwMDA7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUubWluO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5fdmFsdWUubWluID0gdjtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1heDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFVwcGVyIGxpbWl0IG9mIHRoZSBzbGlkZXIncyBvdXRwdXQgcmFuZ2Vcblx0ICAgICAgQHR5cGUge251bWJlcn1cblx0ICAgICAgQGV4YW1wbGUgc2xpZGVyLm1heCA9IDEwMDA7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUubWF4O1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5fdmFsdWUubWF4ID0gdjtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHN0ZXA6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBUaGUgaW5jcmVtZW50IHRoYXQgdGhlIHNsaWRlcidzIHZhbHVlIGNoYW5nZXMgYnkuXG5cdCAgICAgIEB0eXBlIHtudW1iZXJ9XG5cdCAgICAgIEBleGFtcGxlIHNsaWRlci5zdGVwID0gNTtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZS5zdGVwO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5fdmFsdWUuc3RlcCA9IHY7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtb2RlOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgQWJzb2x1dGUgbW9kZSAoc2xpZGVyJ3MgdmFsdWUganVtcHMgdG8gbW91c2UgY2xpY2sgcG9zaXRpb24pIG9yIHJlbGF0aXZlIG1vZGUgKG1vdXNlIGRyYWcgY2hhbmdlcyB2YWx1ZSByZWxhdGl2ZSB0byBpdHMgY3VycmVudCBwb3NpdGlvbikuIERlZmF1bHQ6IFwicmVsYXRpdmVcIi5cblx0ICAgICAgQHR5cGUge3N0cmluZ31cblx0ICAgICAgQGV4YW1wbGUgc2xpZGVyLm1vZGUgPSBcInJlbGF0aXZlXCI7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbi5tb2RlO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvbi5tb2RlID0gdjtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pO1xuXHRcblx0ICByZXR1cm4gU2xpZGVyO1xuXHR9KShJbnRlcmZhY2UpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBTbGlkZXI7XG5cbi8qKiovIH0pLFxuLyogMTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7IH0gfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gZGVzYyAmJiBkZXNjLndyaXRhYmxlKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfTtcblx0XG5cdHZhciBfaW5oZXJpdHMgPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBzdmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXHR2YXIgVG9nZ2xlTW9kZWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcblx0dmFyIEludGVyZmFjZSA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5cdFxuXHQvKipcblx0KiBUb2dnbGVcblx0KlxuXHQqIEBkZXNjcmlwdGlvbiBCaW5hcnkgc3dpdGNoXG5cdCpcblx0KiBAZGVtbyA8c3BhbiBuZXh1cy11aT1cInRvZ2dsZVwiPjwvc3Bhbj5cblx0KlxuXHQqIEBleGFtcGxlXG5cdCogdmFyIHRvZ2dsZSA9IG5ldyBOZXh1cy5Ub2dnbGUoJyN0YXJnZXQnKVxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgdG9nZ2xlID0gbmV3IE5leHVzLlRvZ2dsZSgnI3RhcmdldCcse1xuXHQqICAgICAnc2l6ZSc6IFs0MCwyMF0sXG5cdCogICAgICdzdGF0ZSc6IGZhbHNlXG5cdCogfSlcblx0KlxuXHQqIEBvdXRwdXRcblx0KiBjaGFuZ2Vcblx0KiBGaXJlcyBhbnkgdGltZSB0aGUgaW50ZXJmYWNlJ3MgdmFsdWUgY2hhbmdlcy4gPGJyPlxuXHQqIFBhcmFtZXRlcjogVGhlIGJvb2xlYW4gc3RhdGUgb2YgdGhlIGludGVyZmFjZS5cblx0KlxuXHQqIEBvdXRwdXRleGFtcGxlXG5cdCogdG9nZ2xlLm9uKCdjaGFuZ2UnLGZ1bmN0aW9uKHYpIHtcblx0KiAgIGNvbnNvbGUubG9nKHYpO1xuXHQqIH0pXG5cdCpcblx0KlxuXHQqL1xuXHRcblx0dmFyIFRvZ2dsZSA9IChmdW5jdGlvbiAoX0ludGVyZmFjZSkge1xuXHQgIGZ1bmN0aW9uIFRvZ2dsZSgpIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUb2dnbGUpO1xuXHRcblx0ICAgIHZhciBvcHRpb25zID0gW1widmFsdWVcIl07XG5cdFxuXHQgICAgdmFyIGRlZmF1bHRzID0ge1xuXHQgICAgICBzaXplOiBbNDAsIDIwXSxcblx0ICAgICAgdGFyZ2V0OiBmYWxzZSxcblx0ICAgICAgc3RhdGU6IGZhbHNlXG5cdCAgICB9O1xuXHRcblx0ICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKFRvZ2dsZS5wcm90b3R5cGUpLCBcImNvbnN0cnVjdG9yXCIsIHRoaXMpLmNhbGwodGhpcywgYXJndW1lbnRzLCBvcHRpb25zLCBkZWZhdWx0cyk7XG5cdFxuXHQgICAgdGhpcy5fc3RhdGUgPSBuZXcgVG9nZ2xlTW9kZWwodGhpcy5zZXR0aW5ncy5zdGF0ZSk7XG5cdFxuXHQgICAgdGhpcy5pbml0KCk7XG5cdCAgfVxuXHRcblx0ICBfaW5oZXJpdHMoVG9nZ2xlLCBfSW50ZXJmYWNlKTtcblx0XG5cdCAgX2NyZWF0ZUNsYXNzKFRvZ2dsZSwge1xuXHQgICAgYnVpbGRJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkSW50ZXJmYWNlKCkge1xuXHRcblx0ICAgICAgICB0aGlzLmJhciA9IHN2Zy5jcmVhdGUoXCJyZWN0XCIpO1xuXHQgICAgICAgIHRoaXMua25vYiA9IHN2Zy5jcmVhdGUoXCJjaXJjbGVcIik7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuYmFyKTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5rbm9iKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNpemVJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNpemVJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIGlmICh0aGlzLmhlaWdodCA8IHRoaXMud2lkdGggLyAyKSB7XG5cdCAgICAgICAgICB0aGlzLmtub2JTaXplID0gdGhpcy5oZWlnaHQgLyAyO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLmtub2JTaXplID0gdGhpcy53aWR0aCAvIDQ7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJ4XCIsIHRoaXMud2lkdGggLyAyIC0gdGhpcy5rbm9iU2l6ZSAqIDEuNSk7XG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwieVwiLCB0aGlzLmhlaWdodCAvIDIgLSB0aGlzLmtub2JTaXplIC8gMik7XG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwicnhcIiwgdGhpcy5rbm9iU2l6ZSAvIDIpO1xuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcInJ5XCIsIHRoaXMua25vYlNpemUgLyAyKTtcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCB0aGlzLmtub2JTaXplICogMyk7XG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIHRoaXMua25vYlNpemUpO1xuXHRcblx0ICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiY3hcIiwgdGhpcy53aWR0aCAvIDIgLSB0aGlzLmtub2JTaXplKTtcblx0ICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiY3lcIiwgdGhpcy5oZWlnaHQgLyAyKTtcblx0ICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiclwiLCB0aGlzLmtub2JTaXplKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNvbG9ySW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb2xvckludGVyZmFjZSgpIHtcblx0ICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmNvbG9ycy5hY2NlbnQpO1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByZW5kZXI6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0ICAgICAgICBpZiAoIXRoaXMuc3RhdGUpIHtcblx0ICAgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJjeFwiLCB0aGlzLndpZHRoIC8gMiAtIHRoaXMua25vYlNpemUpO1xuXHQgICAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmNvbG9ycy5maWxsKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImN4XCIsIHRoaXMud2lkdGggLyAyICsgdGhpcy5rbm9iU2l6ZSk7XG5cdCAgICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLmFjY2VudCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY2xpY2s6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsaWNrKCkge1xuXHQgICAgICAgIHRoaXMuZmxpcCgpO1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMuc3RhdGUpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc3RhdGU6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBXaGV0aGVyIHRoZSB0b2dnbGUgaXMgY3VycmVudGx5IG9uIG9yIG9mZi4gU2V0dGluZyB0aGlzIHByb3BlcnR5IHdpbGwgdXBkYXRlIHRoZSB0b2dnbGUgaW50ZXJmYWNlIGFuZCB0cmlnZ2VyIHRoZSBvdXRwdXQgZXZlbnQuXG5cdCAgICAgIEB0eXBlIHtib29sZWFufVxuXHQgICAgICBAZXhhbXBsZSB0b2dnbGUuc3RhdGUgPSBmYWxzZTtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5zdGF0ZTtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mbGlwKHZhbHVlKTtcblx0ICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwgdGhpcy5zdGF0ZSk7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGZsaXA6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICAqIFN3aXRjaCB0aGUgdG9nZ2xlIHN0YXRlIHRvIGl0cyBvcHBvc2l0ZSBzdGF0ZVxuXHQgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICogdG9nZ2xlLmZsaXAoKTtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBmbGlwKCkge1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZsaXAoKTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBUb2dnbGU7XG5cdH0pKEludGVyZmFjZSk7XG5cdFxuXHRtb2R1bGUuZXhwb3J0cyA9IFRvZ2dsZTtcblxuLyoqKi8gfSksXG4vKiAxNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHsgdmFyIHByb3AgPSBwcm9wc1trZXldOyBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChwcm9wLnZhbHVlKSBwcm9wLndyaXRhYmxlID0gdHJ1ZTsgfSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKTsgfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXHRcblx0dmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyByZXR1cm4gZ2V0KHBhcmVudCwgcHJvcGVydHksIHJlY2VpdmVyKTsgfSB9IGVsc2UgaWYgKFwidmFsdWVcIiBpbiBkZXNjICYmIGRlc2Mud3JpdGFibGUpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9O1xuXHRcblx0dmFyIF9pbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9O1xuXHRcblx0dmFyIF9jbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9O1xuXHRcblx0dmFyIHN2ZyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cdHZhciBCdXR0b25UZW1wbGF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xuXHRcblx0LyoqXG5cdCogQnV0dG9uXG5cdCpcblx0KiBAZGVzY3JpcHRpb24gQ2lyY3VsYXIgYnV0dG9uIHdpdGggb3B0aW9uYWwgYWZ0ZXJ0b3VjaC5cblx0KlxuXHQqIEBkZW1vIDxzcGFuIG5leHVzLXVpPVwiYnV0dG9uXCI+PC9zcGFuPlxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgYnV0dG9uID0gbmV3IE5leHVzLkJ1dHRvbignI3RhcmdldCcpXG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciBidXR0b24gPSBuZXcgTmV4dXMuQnV0dG9uKCcjdGFyZ2V0Jyx7XG5cdCogICAnc2l6ZSc6IFs4MCw4MF0sXG5cdCogICAnbW9kZSc6ICdhZnRlcnRvdWNoJyxcblx0KiAgICdzdGF0ZSc6IGZhbHNlXG5cdCogfSlcblx0KlxuXHQqIEBvdXRwdXRcblx0KiBjaGFuZ2Vcblx0KiBGaXJlcyBhbnkgdGltZSB0aGUgaW50ZXJmYWNlJ3MgdmFsdWUgY2hhbmdlcy4gPGJyPlxuXHQqIEluIDxiPmJ1dHRvbiBtb2RlPC9iPiwgPGI+dG9nZ2xlIG1vZGU8L2I+LCBhbmQgPGI+aW1wdWxzZSBtb2RlPC9iPiwgdGhlIG91dHB1dCBkYXRhIGlzIGEgYm9vbGVhbiBkZXNjcmliaW5nIHRoZSBzdGF0ZSBvZiB0aGUgYnV0dG9uLjxicj5cblx0KiBJbiA8Yj5hZnRlcnRvdWNoIG1vZGU8L2I+LCB0aGUgb3V0cHV0IGRhdGEgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgeCAoMC0xKSBhbmQgeSAoMC0xKSBwb3NpdGlvbnMgb2YgYWZ0ZXJ0b3VjaC5cblx0KlxuXHQqIEBvdXRwdXRleGFtcGxlXG5cdCogYnV0dG9uLm9uKCdjaGFuZ2UnLGZ1bmN0aW9uKHYpIHtcblx0KiAgIC8vIHYgaXMgdGhlIHZhbHVlIG9mIHRoZSBidXR0b25cblx0KiAgIGNvbnNvbGUubG9nKHYpO1xuXHQqIH0pXG5cdCpcblx0Ki9cblx0XG5cdHZhciBCdXR0b24gPSAoZnVuY3Rpb24gKF9CdXR0b25UZW1wbGF0ZSkge1xuXHQgIGZ1bmN0aW9uIEJ1dHRvbigpIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBCdXR0b24pO1xuXHRcblx0ICAgIHZhciBvcHRpb25zID0gW1wibW9kZVwiXTtcblx0XG5cdCAgICB2YXIgZGVmYXVsdHMgPSB7XG5cdCAgICAgIHNpemU6IFs4MCwgODBdLFxuXHQgICAgICBtb2RlOiBcImFmdGVydG91Y2hcIiwgLy8gYnV0dG9uLCBhZnRlcnRvdWNoLCBpbXB1bHNlLCB0b2dnbGVcblx0ICAgICAgc3RhdGU6IGZhbHNlXG5cdCAgICB9O1xuXHRcblx0ICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKEJ1dHRvbi5wcm90b3R5cGUpLCBcImNvbnN0cnVjdG9yXCIsIHRoaXMpLmNhbGwodGhpcywgYXJndW1lbnRzLCBvcHRpb25zLCBkZWZhdWx0cyk7XG5cdFxuXHQgICAgLyoqXG5cdCAgICAqIEludGVyYWN0aW9uIG1vZGU6IHN1cHBvcnRzIFwiYnV0dG9uXCIsIFwiYWZ0ZXJ0b3VjaFwiLCBcImltcHVsc2VcIiwgb3IgXCJ0b2dnbGVcIlxuXHQgICAgKiBAdHlwZSB7c3RyaW5nfVxuXHQgICAgKiBAZXhhbXBsZSBidXR0b24ubW9kZSA9ICd0b2dnbGUnO1xuXHQgICAgKi9cblx0ICAgIHRoaXMubW9kZSA9IHRoaXMuc2V0dGluZ3MubW9kZTtcblx0XG5cdCAgICB0aGlzLmluaXQoKTtcblx0ICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgfVxuXHRcblx0ICBfaW5oZXJpdHMoQnV0dG9uLCBfQnV0dG9uVGVtcGxhdGUpO1xuXHRcblx0ICBfY3JlYXRlQ2xhc3MoQnV0dG9uLCB7XG5cdCAgICBidWlsZEludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRJbnRlcmZhY2UoKSB7XG5cdCAgICAgICAgdGhpcy5wYWQgPSBzdmcuY3JlYXRlKFwiY2lyY2xlXCIpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnBhZCk7XG5cdFxuXHQgICAgICAgIHRoaXMuaW50ZXJhY3Rpb25UYXJnZXQgPSB0aGlzLnBhZDtcblx0XG5cdCAgICAgICAgLy8gb25seSB1c2VkIGlmIGluICdhZnRlcnRvdWNoJyBtb2RlXG5cdCAgICAgICAgdGhpcy5kZWZzID0gc3ZnLmNyZWF0ZShcImRlZnNcIik7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZGVmcyk7XG5cdFxuXHQgICAgICAgIHRoaXMuZ3JhZGllbnQgPSBzdmcucmFkaWFsR3JhZGllbnQodGhpcy5kZWZzLCAyKTtcblx0XG5cdCAgICAgICAgdGhpcy5ncmFkaWVudC5zdG9wc1swXS5zZXRBdHRyaWJ1dGUoXCJvZmZzZXRcIiwgXCIzMCVcIik7XG5cdFxuXHQgICAgICAgIHRoaXMuZ3JhZGllbnQuc3RvcHNbMV0uc2V0QXR0cmlidXRlKFwib2Zmc2V0XCIsIFwiMTAwJVwiKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNpemVJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNpemVJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcImN4XCIsIHRoaXMud2lkdGggLyAyKTtcblx0ICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJjeVwiLCB0aGlzLmhlaWdodCAvIDIpO1xuXHQgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcInJcIiwgTWF0aC5taW4odGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpIC8gMiAtIHRoaXMud2lkdGggLyA0MCk7XG5cdCAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIsIHRoaXMud2lkdGggLyAyMCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjb2xvckludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY29sb3JJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIHRoaXMuZ3JhZGllbnQuc3RvcHNbMF0uc2V0QXR0cmlidXRlKFwic3RvcC1jb2xvclwiLCB0aGlzLmNvbG9ycy5hY2NlbnQpO1xuXHQgICAgICAgIHRoaXMuZ3JhZGllbnQuc3RvcHNbMV0uc2V0QXR0cmlidXRlKFwic3RvcC1jb2xvclwiLCB0aGlzLmNvbG9ycy5maWxsKTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVuZGVyOiB7XG5cdFxuXHQgICAgICAvKlxuXHQgICAgICAqIFVwZGF0ZSB0aGUgdmlzdWFsIGludGVyZmFjZSB1c2luZyBpdHMgY3VycmVudCBzdGF0ZVxuXHQgICAgICAqXG5cdCAgICAgICogQGV4YW1wbGVcblx0ICAgICAgKiBidXR0b24ucmVuZGVyKCk7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHQgICAgICAgIGlmICghdGhpcy5zdGF0ZSkge1xuXHQgICAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmNvbG9ycy5maWxsKTtcblx0ICAgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCB0aGlzLmNvbG9ycy5tZWRpdW1MaWdodCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwiYWZ0ZXJ0b3VjaFwiKSB7XG5cdCAgICAgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCBcInVybCgjXCIgKyB0aGlzLmdyYWRpZW50LmlkICsgXCIpXCIpO1xuXHQgICAgICAgICAgICB0aGlzLmdyYWRpZW50LmVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY3hcIiwgdGhpcy5wb3NpdGlvbi54ICogMTAwICsgXCIlXCIpO1xuXHQgICAgICAgICAgICB0aGlzLmdyYWRpZW50LmVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY3lcIiwgKDEgLSB0aGlzLnBvc2l0aW9uLnkpICogMTAwICsgXCIlXCIpO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIHRoaXMuY29sb3JzLmFjY2VudCk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLmFjY2VudCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBCdXR0b247XG5cdH0pKEJ1dHRvblRlbXBsYXRlKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gQnV0dG9uO1xuXG4vKioqLyB9KSxcbi8qIDE3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGtleSBpbiBwcm9wcykgeyB2YXIgcHJvcCA9IHByb3BzW2tleV07IHByb3AuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKHByb3AudmFsdWUpIHByb3Aud3JpdGFibGUgPSB0cnVlOyB9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpOyB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHR2YXIgX2dldCA9IGZ1bmN0aW9uIGdldChvYmplY3QsIHByb3BlcnR5LCByZWNlaXZlcikgeyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IHJldHVybiBnZXQocGFyZW50LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpOyB9IH0gZWxzZSBpZiAoXCJ2YWx1ZVwiIGluIGRlc2MgJiYgZGVzYy53cml0YWJsZSkgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH07XG5cdFxuXHR2YXIgX2luaGVyaXRzID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH07XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH07XG5cdFxuXHR2YXIgc3ZnID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblx0dmFyIG1hdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xuXHR2YXIgVG9nZ2xlTW9kZWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcblx0dmFyIEludGVyZmFjZSA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5cdFxuXHQvKipcblx0QnV0dG9uIFRlbXBsYXRlXG5cdCovXG5cdFxuXHR2YXIgQnV0dG9uVGVtcGxhdGUgPSAoZnVuY3Rpb24gKF9JbnRlcmZhY2UpIHtcblx0ICBmdW5jdGlvbiBCdXR0b25UZW1wbGF0ZShhcmdzLCBvcHRpb25zLCBkZWZhdWx0cykge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJ1dHRvblRlbXBsYXRlKTtcblx0XG5cdCAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihCdXR0b25UZW1wbGF0ZS5wcm90b3R5cGUpLCBcImNvbnN0cnVjdG9yXCIsIHRoaXMpLmNhbGwodGhpcywgYXJncywgb3B0aW9ucywgZGVmYXVsdHMpO1xuXHRcblx0ICAgIHRoaXMubW9kZSA9IHRoaXMuc2V0dGluZ3MubW9kZSB8fCBcImJ1dHRvblwiO1xuXHRcblx0ICAgIHRoaXMucG9zaXRpb24gPSB7XG5cdCAgICAgIHg6IDAsXG5cdCAgICAgIHk6IDBcblx0ICAgIH07XG5cdFxuXHQgICAgdGhpcy5fc3RhdGUgPSBuZXcgVG9nZ2xlTW9kZWwodGhpcy5zZXR0aW5ncy5zdGF0ZSk7XG5cdCAgfVxuXHRcblx0ICBfaW5oZXJpdHMoQnV0dG9uVGVtcGxhdGUsIF9JbnRlcmZhY2UpO1xuXHRcblx0ICBfY3JlYXRlQ2xhc3MoQnV0dG9uVGVtcGxhdGUsIHtcblx0ICAgIGJ1aWxkSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEludGVyZmFjZSgpIHtcblx0ICAgICAgICB0aGlzLnBhZCA9IHN2Zy5jcmVhdGUoXCJjaXJjbGVcIik7XG5cdCAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCBcIiNkMThcIik7XG5cdCAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIFwiI2QxOFwiKTtcblx0ICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIiwgNCk7XG5cdFxuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnBhZCk7XG5cdFxuXHQgICAgICAgIHRoaXMuaW50ZXJhY3Rpb25UYXJnZXQgPSB0aGlzLnBhZDtcblx0XG5cdCAgICAgICAgdGhpcy5zaXplSW50ZXJmYWNlKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzaXplSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaXplSW50ZXJmYWNlKCkge1xuXHQgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcImN4XCIsIHRoaXMud2lkdGggLyAyKTtcblx0ICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJjeVwiLCB0aGlzLmhlaWdodCAvIDIpO1xuXHQgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcInJcIiwgTWF0aC5taW4odGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpIC8gMiAtIDIpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVuZGVyOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLnN0YXRlKSB7XG5cdCAgICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLmZpbGwpO1xuXHQgICAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIHRoaXMuY29sb3JzLm1lZGl1bUxpZ2h0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmNvbG9ycy5hY2NlbnQpO1xuXHQgICAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIHRoaXMuY29sb3JzLmFjY2VudCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZG93bjoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gZG93bihwYWludGJydXNoKSB7XG5cdCAgICAgICAgc3dpdGNoICh0aGlzLm1vZGUpIHtcblx0ICAgICAgICAgIGNhc2UgXCJpbXB1bHNlXCI6XG5cdCAgICAgICAgICAgIHRoaXMudHVybk9uKCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcblx0ICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMudHVybk9mZi5iaW5kKHRoaXMpLCAzMCk7XG5cdCAgICAgICAgICAgIC8vICAgIHRoaXMuZW1pdCgnY2hhbmdlJyx0aGlzLnN0YXRlKTtcblx0ICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICBjYXNlIFwiYnV0dG9uXCI6XG5cdCAgICAgICAgICAgIHRoaXMudHVybk9uKCk7XG5cdCAgICAgICAgICAgIC8vICAgIHRoaXMuZW1pdCgnY2hhbmdlJyx0aGlzLnN0YXRlKTtcblx0ICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICBjYXNlIFwiYWZ0ZXJ0b3VjaFwiOlxuXHQgICAgICAgICAgICB0aGlzLnBvc2l0aW9uID0ge1xuXHQgICAgICAgICAgICAgIHg6IG1hdGguY2xpcCh0aGlzLm1vdXNlLnggLyB0aGlzLndpZHRoLCAwLCAxKSxcblx0ICAgICAgICAgICAgICB5OiBtYXRoLmNsaXAoMSAtIHRoaXMubW91c2UueSAvIHRoaXMuaGVpZ2h0LCAwLCAxKVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICB0aGlzLnR1cm5PbigpO1xuXHQgICAgICAgICAgICAvLyAgICB0aGlzLmVtaXQoJ2NoYW5nZScse1xuXHQgICAgICAgICAgICAvLyAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuXHQgICAgICAgICAgICAvLyAgICAgIHg6IHRoaXMucG9zaXRpb24ueCxcblx0ICAgICAgICAgICAgLy8gICAgICB5OiB0aGlzLnBvc2l0aW9uLnksXG5cdCAgICAgICAgICAgIC8vICAgIH0pO1xuXHQgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgIGNhc2UgXCJ0b2dnbGVcIjpcblx0ICAgICAgICAgICAgdGhpcy5mbGlwKHBhaW50YnJ1c2gpO1xuXHQgICAgICAgICAgICAvLyAgICB0aGlzLmVtaXQoJ2NoYW5nZScsdGhpcy5zdGF0ZSk7XG5cdCAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGJlbmQ6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJlbmQobW91c2UpIHtcblx0ICAgICAgICBpZiAodGhpcy5tb2RlID09PSBcImFmdGVydG91Y2hcIikge1xuXHQgICAgICAgICAgdGhpcy5tb3VzZSA9IG1vdXNlIHx8IHRoaXMubW91c2U7XG5cdCAgICAgICAgICB0aGlzLnBvc2l0aW9uID0ge1xuXHQgICAgICAgICAgICB4OiBtYXRoLmNsaXAodGhpcy5tb3VzZS54IC8gdGhpcy53aWR0aCwgMCwgMSksXG5cdCAgICAgICAgICAgIHk6IG1hdGguY2xpcCgxIC0gdGhpcy5tb3VzZS55IC8gdGhpcy5oZWlnaHQsIDAsIDEpXG5cdCAgICAgICAgICB9O1xuXHQgICAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHtcblx0ICAgICAgICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG5cdCAgICAgICAgICAgIHg6IHRoaXMucG9zaXRpb24ueCxcblx0ICAgICAgICAgICAgeTogdGhpcy5wb3NpdGlvbi55IH0pO1xuXHQgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICB1cDoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gdXAoKSB7XG5cdCAgICAgICAgc3dpdGNoICh0aGlzLm1vZGUpIHtcblx0ICAgICAgICAgIGNhc2UgXCJidXR0b25cIjpcblx0ICAgICAgICAgICAgdGhpcy50dXJuT2ZmKCk7XG5cdCAgICAgICAgICAgIC8vICB0aGlzLmVtaXQoJ2NoYW5nZScsdGhpcy5zdGF0ZSk7XG5cdCAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgY2FzZSBcImFmdGVydG91Y2hcIjpcblx0ICAgICAgICAgICAgdGhpcy50dXJuT2ZmKCk7XG5cdCAgICAgICAgICAgIHRoaXMucG9zaXRpb24gPSB7XG5cdCAgICAgICAgICAgICAgeDogbWF0aC5jbGlwKHRoaXMubW91c2UueCAvIHRoaXMud2lkdGgsIDAsIDEpLFxuXHQgICAgICAgICAgICAgIHk6IG1hdGguY2xpcCgxIC0gdGhpcy5tb3VzZS55IC8gdGhpcy5oZWlnaHQsIDAsIDEpXG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIC8vICB0aGlzLmVtaXQoJ2NoYW5nZScse1xuXHQgICAgICAgICAgICAvLyAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcblx0ICAgICAgICAgICAgLy8gICAgeDogdGhpcy5wb3NpdGlvbi54LFxuXHQgICAgICAgICAgICAvLyAgICB5OiB0aGlzLnBvc2l0aW9uLnksXG5cdCAgICAgICAgICAgIC8vICB9KTtcblx0ICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY2xpY2s6IHtcblx0XG5cdCAgICAgIC8qIG92ZXJ3cml0YWJsZSBpbnRlcmFjdGlvbiBoYW5kbGVycyAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsaWNrKCkge1xuXHQgICAgICAgIHRoaXMuZG93bigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbW92ZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gbW92ZSgpIHtcblx0ICAgICAgICB0aGlzLmJlbmQoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlbGVhc2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbGVhc2UoKSB7XG5cdCAgICAgICAgdGhpcy51cCgpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc3RhdGU6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBXaGV0aGVyIHRoZSBidXR0b24gaXMgb24gKHByZXNzZWQpIG9yIG9mZiAobm90IHByZXNzZWQpXG5cdCAgICAgIEB0eXBlIHtib29sZWFufVxuXHQgICAgICBAZXhhbXBsZSBidXR0b24uc3RhdGUgPSB0cnVlO1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLnN0YXRlO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZsaXAodmFsdWUpO1xuXHQgICAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwiYWZ0ZXJ0b3VjaFwiKSB7XG5cdCAgICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwge1xuXHQgICAgICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcblx0ICAgICAgICAgICAgeDogdGhpcy5wb3NpdGlvbi54LFxuXHQgICAgICAgICAgICB5OiB0aGlzLnBvc2l0aW9uLnkgfSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB0aGlzLnN0YXRlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGZsaXA6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBDaGFuZ2UgdGhlIGJ1dHRvbiB0byBpdHMgYWx0ZXJuYXRlIHN0YXRlIChvZmY9Pm9uLCBvbj0+b2ZmKSwgb3IgZmxpcCBpdCB0byBhIHNwZWNpZmllZCBzdGF0ZS5cblx0ICAgICAgQHBhcmFtIHZhbHVlIHtib29sZWFufSAoT3B0aW9uYWwpIFN0YXRlIHRvIGZsaXAgdG8uXG5cdCAgICAgIEBleGFtcGxlIGJ1dHRvbi5mbGlwKCk7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gZmxpcCh2YWx1ZSkge1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZsaXAodmFsdWUpO1xuXHQgICAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwiYWZ0ZXJ0b3VjaFwiKSB7XG5cdCAgICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwge1xuXHQgICAgICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcblx0ICAgICAgICAgICAgeDogdGhpcy5wb3NpdGlvbi54LFxuXHQgICAgICAgICAgICB5OiB0aGlzLnBvc2l0aW9uLnkgfSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB0aGlzLnN0YXRlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHR1cm5Pbjoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFR1cm4gdGhlIGJ1dHRvbidzIHN0YXRlIHRvIHRydWUuXG5cdCAgICAgIEBleGFtcGxlIGJ1dHRvbi50dXJuT24oKTtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiB0dXJuT24oZW1pdHRpbmcpIHtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5vbigpO1xuXHQgICAgICAgIGlmIChlbWl0dGluZyAhPT0gZmFsc2UpIHtcblx0ICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwiYWZ0ZXJ0b3VjaFwiKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB7XG5cdCAgICAgICAgICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG5cdCAgICAgICAgICAgICAgeDogdGhpcy5wb3NpdGlvbi54LFxuXHQgICAgICAgICAgICAgIHk6IHRoaXMucG9zaXRpb24ueSB9KTtcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB0aGlzLnN0YXRlKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHR1cm5PZmY6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBUdXJuIHRoZSBidXR0b24ncyBzdGF0ZSB0byBmYWxzZS5cblx0ICAgICAgQGV4YW1wbGUgYnV0dG9uLnR1cm5PZmYoKTtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiB0dXJuT2ZmKGVtaXR0aW5nKSB7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUub2ZmKCk7XG5cdCAgICAgICAgaWYgKGVtaXR0aW5nICE9PSBmYWxzZSkge1xuXHQgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gXCJhZnRlcnRvdWNoXCIpIHtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHtcblx0ICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcblx0ICAgICAgICAgICAgICB4OiB0aGlzLnBvc2l0aW9uLngsXG5cdCAgICAgICAgICAgICAgeTogdGhpcy5wb3NpdGlvbi55IH0pO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMuc3RhdGUpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBCdXR0b25UZW1wbGF0ZTtcblx0fSkoSW50ZXJmYWNlKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gQnV0dG9uVGVtcGxhdGU7XG5cbi8qKiovIH0pLFxuLyogMTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7IH0gfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gZGVzYyAmJiBkZXNjLndyaXRhYmxlKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfTtcblx0XG5cdHZhciBfaW5oZXJpdHMgPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBCdXR0b25UZW1wbGF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xuXHRcblx0LyoqXG5cdCogVGV4dEJ1dHRvblxuXHQqXG5cdCogQGRlc2NyaXB0aW9uIFRleHQgYnV0dG9uXG5cdCpcblx0KiBAZGVtbyA8c3BhbiBuZXh1cy11aT1cInRleHRCdXR0b25cIj48L3NwYW4+XG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciB0ZXh0YnV0dG9uID0gbmV3IE5leHVzLlRleHRCdXR0b24oJyN0YXJnZXQnKVxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgdGV4dGJ1dHRvbiA9IG5ldyBOZXh1cy5UZXh0QnV0dG9uKCcjdGFyZ2V0Jyx7XG5cdCogICAgICdzaXplJzogWzE1MCw1MF0sXG5cdCogICAgICdzdGF0ZSc6IGZhbHNlLFxuXHQqICAgICAndGV4dCc6ICdQbGF5Jyxcblx0KiAgICAgJ2FsdGVybmF0ZVRleHQnOiAnU3RvcCdcblx0KiB9KVxuXHQqXG5cdCogQG91dHB1dFxuXHQqIGNoYW5nZVxuXHQqIEZpcmVzIGFueSB0aW1lIHRoZSBpbnRlcmZhY2UncyB2YWx1ZSBjaGFuZ2VzLiA8YnI+XG5cdCogVGhlIGV2ZW50IGRhdGEgaXMgYSA8aT5zdHJpbmc8L2k+IG9mIHRoZSB0ZXh0IG9uIHRoZSBidXR0b24gYXQgdGhlIG1vbWVudCBpdCB3YXMgY2xpY2tlZC5cblx0KlxuXHQqIEBvdXRwdXRleGFtcGxlXG5cdCogdGV4dGJ1dHRvbi5vbignY2hhbmdlJyxmdW5jdGlvbih2KSB7XG5cdCogICBjb25zb2xlLmxvZyh2KTtcblx0KiB9KVxuXHQqXG5cdCovXG5cdFxuXHR2YXIgVGV4dEJ1dHRvbiA9IChmdW5jdGlvbiAoX0J1dHRvblRlbXBsYXRlKSB7XG5cdCAgZnVuY3Rpb24gVGV4dEJ1dHRvbigpIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUZXh0QnV0dG9uKTtcblx0XG5cdCAgICB2YXIgb3B0aW9ucyA9IFtcInZhbHVlXCJdO1xuXHRcblx0ICAgIHZhciBkZWZhdWx0cyA9IHtcblx0ICAgICAgc2l6ZTogWzE1MCwgNTBdLFxuXHQgICAgICBzdGF0ZTogZmFsc2UsXG5cdCAgICAgIHRleHQ6IFwiUGxheVwiXG5cdCAgICB9O1xuXHRcblx0ICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKFRleHRCdXR0b24ucHJvdG90eXBlKSwgXCJjb25zdHJ1Y3RvclwiLCB0aGlzKS5jYWxsKHRoaXMsIGFyZ3VtZW50cywgb3B0aW9ucywgZGVmYXVsdHMpO1xuXHRcblx0ICAgIHRoaXMuX3RleHQgPSB0aGlzLnNldHRpbmdzLnRleHQ7XG5cdFxuXHQgICAgaWYgKHRoaXMuc2V0dGluZ3MuYWx0ZXJuYXRlKSB7XG5cdCAgICAgIC8vVE9ETzogUmVtb3ZlIHRoaXMgY29uZGl0aW9uYWwgaW4gYSBicmVha2luZy1jaGFuZ2VzIHJlbGVhc2Vcblx0ICAgICAgdGhpcy5zZXR0aW5ncy5hbHRlcm5hdGVUZXh0ID0gdGhpcy5zZXR0aW5ncy5hbHRlcm5hdGU7XG5cdCAgICAgIGNvbnNvbGUud2FybihcIidhbHRlcm5hdGUnIGluaXRpYXRvciBpcyBkZXByZWNhdGVkLiBVc2UgJ2FsdGVybmF0ZVRleHQnIGluc3RlYWQuXCIpO1xuXHQgICAgfVxuXHQgICAgdGhpcy5fYWx0ZXJuYXRlVGV4dCA9IHRoaXMuc2V0dGluZ3MuYWx0ZXJuYXRlVGV4dDtcblx0ICAgIHRoaXMubW9kZSA9IHRoaXMuc2V0dGluZ3MuYWx0ZXJuYXRlVGV4dCA/IFwidG9nZ2xlXCIgOiBcImJ1dHRvblwiO1xuXHQgICAgdGhpcy5pbml0KCk7XG5cdCAgICB0aGlzLnJlbmRlcigpO1xuXHRcblx0ICAgIHRoaXMuc3RhdGUgPSB0aGlzLnNldHRpbmdzLnN0YXRlO1xuXHQgIH1cblx0XG5cdCAgX2luaGVyaXRzKFRleHRCdXR0b24sIF9CdXR0b25UZW1wbGF0ZSk7XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhUZXh0QnV0dG9uLCB7XG5cdCAgICBidWlsZEZyYW1lOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEZyYW1lKCkge1xuXHRcblx0ICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHQgICAgICAgIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7XG5cdFxuXHQgICAgICAgIHRoaXMudGV4dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHQgICAgICAgIHRoaXMudGV4dEVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5fdGV4dDtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy50ZXh0RWxlbWVudCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBidWlsZEludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRJbnRlcmZhY2UoKSB7fVxuXHQgICAgfSxcblx0ICAgIGNvbG9ySW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb2xvckludGVyZmFjZSgpIHtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy5kYXJrO1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzaXplSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaXplSW50ZXJmYWNlKCkge1xuXHQgICAgICAgIHZhciB0ZXh0c2l6ZSA9IHRoaXMuaGVpZ2h0IC8gMztcblx0ICAgICAgICB2YXIgdGV4dHNpemUyID0gdGhpcy53aWR0aCAvICh0aGlzLl90ZXh0Lmxlbmd0aCArIDIpO1xuXHQgICAgICAgIHRleHRzaXplID0gTWF0aC5taW4odGV4dHNpemUsIHRleHRzaXplMik7XG5cdCAgICAgICAgaWYgKHRoaXMuYWx0ZXJuYXRlVGV4dCkge1xuXHQgICAgICAgICAgdmFyIHRleHRzaXplMyA9IHRoaXMud2lkdGggLyAodGhpcy5hbHRlcm5hdGVUZXh0Lmxlbmd0aCArIDIpO1xuXHQgICAgICAgICAgdGV4dHNpemUgPSBNYXRoLm1pbih0ZXh0c2l6ZSwgdGV4dHNpemUzKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHN0eWxlcyA9IFwid2lkdGg6IFwiICsgdGhpcy53aWR0aCArIFwicHg7XCI7XG5cdCAgICAgICAgc3R5bGVzICs9IFwiaGVpZ2h0OiBcIiArIHRoaXMuaGVpZ2h0ICsgXCJweDtcIjtcblx0ICAgICAgICBzdHlsZXMgKz0gXCJwYWRkaW5nOiBcIiArICh0aGlzLmhlaWdodCAtIHRleHRzaXplKSAvIDIgKyBcInB4IDBweDtcIjtcblx0ICAgICAgICBzdHlsZXMgKz0gXCJib3gtc2l6aW5nOiBib3JkZXItYm94O1wiO1xuXHQgICAgICAgIHN0eWxlcyArPSBcInRleHQtYWxpZ246IGNlbnRlcjtcIjtcblx0ICAgICAgICBzdHlsZXMgKz0gXCJmb250LWZhbWlseTogaW5oZXJpdDtcIjtcblx0ICAgICAgICBzdHlsZXMgKz0gXCJmb250LXdlaWdodDogNzAwO1wiO1xuXHQgICAgICAgIHN0eWxlcyArPSBcIm9wYWNpdHk6IDE7XCI7XG5cdCAgICAgICAgc3R5bGVzICs9IFwiZm9udC1zaXplOlwiICsgdGV4dHNpemUgKyBcInB4O1wiO1xuXHQgICAgICAgIHRoaXMudGV4dEVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IHN0eWxlcztcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVuZGVyOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLnN0YXRlKSB7XG5cdCAgICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5jb2xvcnMuZmlsbDtcblx0ICAgICAgICAgIHRoaXMudGV4dEVsZW1lbnQuc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy5kYXJrO1xuXHQgICAgICAgICAgdGhpcy50ZXh0RWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLl90ZXh0O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5jb2xvcnMuYWNjZW50O1xuXHQgICAgICAgICAgdGhpcy50ZXh0RWxlbWVudC5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLmZpbGw7XG5cdCAgICAgICAgICBpZiAodGhpcy5hbHRlcm5hdGVUZXh0KSB7XG5cdCAgICAgICAgICAgIHRoaXMudGV4dEVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5fYWx0ZXJuYXRlVGV4dDtcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMudGV4dEVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5fdGV4dDtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBhbHRlcm5hdGVUZXh0OiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgVGhlIHRleHQgdG8gZGlzcGxheSB3aGVuIHRoZSBidXR0b24gaXMgaW4gaXRzIFwib25cIiBzdGF0ZS4gSWYgc2V0LCB0aGlzIHB1dHMgdGhlIGJ1dHRvbiBpbiBcInRvZ2dsZVwiIG1vZGUuXG5cdCAgICAgIEB0eXBlIHtTdHJpbmd9XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYWx0ZXJuYXRlVGV4dDtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCkge1xuXHQgICAgICAgIGlmICh0ZXh0KSB7XG5cdCAgICAgICAgICB0aGlzLm1vZGUgPSBcInRvZ2dsZVwiO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLm1vZGUgPSBcImJ1dHRvblwiO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9hbHRlcm5hdGVUZXh0ID0gdGV4dDtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgdGV4dDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFRoZSB0ZXh0IHRvIGRpc3BsYXkuIChJZiAuYWx0ZXJuYXRlVGV4dCBleGlzdHMsIHRoZW4gdGhpcyAudGV4dCB3aWxsIG9ubHkgYmUgZGlzcGxheWVkIHdoZW4gdGhlIGJ1dHRvbiBpcyBpbiBpdHMgXCJvZmZcIiBzdGF0ZS4pXG5cdCAgICAgIEB0eXBlIHtTdHJpbmd9XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCkge1xuXHQgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuXHQgICAgICAgIHRoaXMuc2l6ZUludGVyZmFjZSgpO1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIFRleHRCdXR0b247XG5cdH0pKEJ1dHRvblRlbXBsYXRlKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gVGV4dEJ1dHRvbjtcblxuLyoqKi8gfSksXG4vKiAxOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHsgdmFyIHByb3AgPSBwcm9wc1trZXldOyBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChwcm9wLnZhbHVlKSBwcm9wLndyaXRhYmxlID0gdHJ1ZTsgfSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKTsgfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXHRcblx0dmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyByZXR1cm4gZ2V0KHBhcmVudCwgcHJvcGVydHksIHJlY2VpdmVyKTsgfSB9IGVsc2UgaWYgKFwidmFsdWVcIiBpbiBkZXNjICYmIGRlc2Mud3JpdGFibGUpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9O1xuXHRcblx0dmFyIF9pbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9O1xuXHRcblx0dmFyIF9jbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9O1xuXHRcblx0Ly9sZXQgc3ZnID0gcmVxdWlyZSgnLi4vdXRpbC9zdmcnKTtcblx0dmFyIEludGVyZmFjZSA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5cdHZhciBCdXR0b24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcblx0XG5cdC8qKlxuXHQqIFJhZGlvQnV0dG9uXG5cdCpcblx0KiBAZGVzY3JpcHRpb24gQW4gYXJyYXkgb2YgYnV0dG9ucy4gQnkgZGVmYXVsdCwgc2VsZWN0aW5nIG9uZSBidXR0b24gd2lsbCBkZXNlbGVjdCBhbGwgb3RoZXIgYnV0dG9ucywgYnV0IHRoaXMgY2FuIGJlIGN1c3RvbWl6ZWQgdXNpbmcgdGhlIEFQSSBiZWxvdy5cblx0KlxuXHQqIEBkZW1vIDxkaXYgbmV4dXMtdWk9XCJSYWRpb0J1dHRvblwiPjwvZGl2PlxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgcmFkaW9idXR0b24gPSBuZXcgTmV4dXMuUmFkaW9CdXR0b24oJyN0YXJnZXQnKVxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgcmFkaW9idXR0b24gPSBuZXcgTmV4dXMuUmFkaW9CdXR0b24oJyN0YXJnZXQnLHtcblx0KiAgICdzaXplJzogWzEyMCwyNV0sXG5cdCogICAnbnVtYmVyT2ZCdXR0b25zJzogNCxcblx0KiAgICdhY3RpdmUnOiAtMVxuXHQqIH0pXG5cdCpcblx0KiBAb3V0cHV0XG5cdCogY2hhbmdlXG5cdCogRmlyZXMgYW55IHRpbWUgdGhlIGludGVyZmFjZSdzIHZhbHVlIGNoYW5nZXMuIDxicj5cblx0KiBUaGUgZXZlbnQgZGF0YSBhbiA8aT5pbnRlZ2VyPC9pPiwgdGhlIGluZGV4IG9mIHRoZSBidXR0b24gdGhhdCBpcyBjdXJyZW50bHkgb24uIElmIG5vIGJ1dHRvbiBpcyBzZWxlY3RlZCwgdGhlIHZhbHVlIHdpbGwgYmUgLTEuXG5cdCpcblx0KiBAb3V0cHV0ZXhhbXBsZVxuXHQqIHJhZGlvYnV0dG9uLm9uKCdjaGFuZ2UnLGZ1bmN0aW9uKHYpIHtcblx0KiAgIGNvbnNvbGUubG9nKHYpO1xuXHQqIH0pXG5cdCpcblx0Ki9cblx0XG5cdHZhciBSYWRpb0J1dHRvbiA9IChmdW5jdGlvbiAoX0ludGVyZmFjZSkge1xuXHQgIGZ1bmN0aW9uIFJhZGlvQnV0dG9uKCkge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJhZGlvQnV0dG9uKTtcblx0XG5cdCAgICB2YXIgb3B0aW9ucyA9IFtcInZhbHVlXCJdO1xuXHRcblx0ICAgIHZhciBkZWZhdWx0cyA9IHtcblx0ICAgICAgc2l6ZTogWzEyMCwgMjVdLFxuXHQgICAgICBudW1iZXJPZkJ1dHRvbnM6IDQsXG5cdCAgICAgIGFjdGl2ZTogLTFcblx0ICAgIH07XG5cdFxuXHQgICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoUmFkaW9CdXR0b24ucHJvdG90eXBlKSwgXCJjb25zdHJ1Y3RvclwiLCB0aGlzKS5jYWxsKHRoaXMsIGFyZ3VtZW50cywgb3B0aW9ucywgZGVmYXVsdHMpO1xuXHRcblx0ICAgIHRoaXMuYnV0dG9ucyA9IFtdO1xuXHQgICAgdGhpcy5fbnVtYmVyT2ZCdXR0b25zID0gdGhpcy5zZXR0aW5ncy5udW1iZXJPZkJ1dHRvbnM7XG5cdCAgICB0aGlzLmFjdGl2ZSA9IHRoaXMuc2V0dGluZ3MuYWN0aXZlO1xuXHRcblx0ICAgIHRoaXMuaW5pdCgpO1xuXHQgICAgdGhpcy5yZW5kZXIoKTtcblx0ICB9XG5cdFxuXHQgIF9pbmhlcml0cyhSYWRpb0J1dHRvbiwgX0ludGVyZmFjZSk7XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhSYWRpb0J1dHRvbiwge1xuXHQgICAgYnVpbGRGcmFtZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRGcmFtZSgpIHtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHQgICAgICAgIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBidWlsZEludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbnVtYmVyT2ZCdXR0b25zOyBpKyspIHtcblx0ICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcblx0XG5cdCAgICAgICAgICB2YXIgYnV0dG9uID0gbmV3IEJ1dHRvbihjb250YWluZXIsIHtcblx0ICAgICAgICAgICAgbW9kZTogXCJ0b2dnbGVcIixcblx0ICAgICAgICAgICAgY29tcG9uZW50OiB0cnVlIH0sIHRoaXMudXBkYXRlLmJpbmQodGhpcywgaSkpO1xuXHRcblx0ICAgICAgICAgIHRoaXMuYnV0dG9ucy5wdXNoKGJ1dHRvbik7XG5cdCAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzaXplSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaXplSW50ZXJmYWNlKCkge1xuXHRcblx0ICAgICAgICB2YXIgYnV0dG9uV2lkdGggPSB0aGlzLndpZHRoIC8gdGhpcy5fbnVtYmVyT2ZCdXR0b25zO1xuXHQgICAgICAgIHZhciBidXR0b25IZWlnaHQgPSB0aGlzLmhlaWdodDtcblx0XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9udW1iZXJPZkJ1dHRvbnM7IGkrKykge1xuXHQgICAgICAgICAgdGhpcy5idXR0b25zW2ldLnJlc2l6ZShidXR0b25XaWR0aCwgYnV0dG9uSGVpZ2h0KTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjb2xvckludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY29sb3JJbnRlcmZhY2UoKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9udW1iZXJPZkJ1dHRvbnM7IGkrKykge1xuXHQgICAgICAgICAgdGhpcy5idXR0b25zW2ldLmNvbG9ycyA9IHRoaXMuY29sb3JzO1xuXHQgICAgICAgICAgdGhpcy5idXR0b25zW2ldLnJlbmRlcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHVwZGF0ZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlKGluZGV4KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuYnV0dG9uc1tpbmRleF0uc3RhdGUpIHtcblx0ICAgICAgICAgIHRoaXMuc2VsZWN0KGluZGV4KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy5kZXNlbGVjdCgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlbmRlcjoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5idXR0b25zLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICBpZiAoaSA9PT0gdGhpcy5hY3RpdmUpIHtcblx0ICAgICAgICAgICAgdGhpcy5idXR0b25zW2ldLnR1cm5PbihmYWxzZSk7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmJ1dHRvbnNbaV0udHVybk9mZihmYWxzZSk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2VsZWN0OiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgU2VsZWN0IG9uZSBidXR0b24gYW5kIGRlc2VsZWN0IGFsbCBvdGhlciBidXR0b25zLlxuXHQgICAgICBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IG9mIHRoZSBidXR0b24gdG8gc2VsZWN0XG5cdCAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc2VsZWN0KGluZGV4KSB7XG5cdCAgICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLmJ1dHRvbnMubGVuZ3RoKSB7XG5cdCAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGluZGV4O1xuXHQgICAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMuYWN0aXZlKTtcblx0ICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZGVzZWxlY3Q6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBEZXNlbGVjdCBhbGwgYnV0dG9ucy5cblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBkZXNlbGVjdCgpIHtcblx0ICAgICAgICB0aGlzLmFjdGl2ZSA9IC0xO1xuXHQgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB0aGlzLmFjdGl2ZSk7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG51bWJlck9mQnV0dG9uczoge1xuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyT2ZCdXR0b25zO1xuXHQgICAgICB9LFxuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgICAqIFVwZGF0ZSBob3cgbWFueSBidXR0b25zIGFyZSBpbiB0aGUgaW50ZXJmYWNlXG5cdCAgICAgICAqIEBwYXJhbSAge251bWJlcn0gYnV0dG9ucyBIb3cgbWFueSBidXR0b25zIGFyZSBpbiB0aGUgaW50ZXJmYWNlXG5cdCAgICAgICAqL1xuXHQgICAgICBzZXQ6IGZ1bmN0aW9uIChidXR0b25zKSB7XG5cdCAgICAgICAgdGhpcy5fbnVtYmVyT2ZCdXR0b25zID0gYnV0dG9ucztcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYnV0dG9ucy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgdGhpcy5idXR0b25zW2ldLmRlc3Ryb3koKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5idXR0b25zID0gW107XG5cdCAgICAgICAgLy8gIGZvciAobGV0IGk9MDtpPHRoaXMuYnV0dG9ucy5sZW5ndGg7aSsrKSB7XG5cdCAgICAgICAgLy8gICAgdGhpcy5idXR0b25zW2ldLmRlc3Ryb3koKTtcblx0ICAgICAgICAvLyAgfVxuXHQgICAgICAgIHRoaXMuZW1wdHkoKTtcblx0ICAgICAgICB0aGlzLmJ1aWxkSW50ZXJmYWNlKCk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIFJhZGlvQnV0dG9uO1xuXHR9KShJbnRlcmZhY2UpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBSYWRpb0J1dHRvbjtcblxuLyoqKi8gfSksXG4vKiAyMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHsgdmFyIHByb3AgPSBwcm9wc1trZXldOyBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChwcm9wLnZhbHVlKSBwcm9wLndyaXRhYmxlID0gdHJ1ZTsgfSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKTsgfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXHRcblx0dmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyByZXR1cm4gZ2V0KHBhcmVudCwgcHJvcGVydHksIHJlY2VpdmVyKTsgfSB9IGVsc2UgaWYgKFwidmFsdWVcIiBpbiBkZXNjICYmIGRlc2Mud3JpdGFibGUpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9O1xuXHRcblx0dmFyIF9pbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9O1xuXHRcblx0dmFyIF9jbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9O1xuXHRcblx0dmFyIEludGVyZmFjZSA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5cdHZhciBTdGVwID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG5cdHZhciBtYXRoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcblx0XG5cdC8qKlxuXHQqIE51bWJlclxuXHQqXG5cdCogQGRlc2NyaXB0aW9uIE51bWJlciBpbnRlcmZhY2Ugd2hpY2ggaXMgY29udHJvbGxhYmxlIGJ5IGRyYWdnaW5nIG9yIHR5cGluZy5cblx0KlxuXHQqIEBkZW1vIDxzcGFuIG5leHVzLXVpPVwibnVtYmVyXCI+PC9zcGFuPlxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgbnVtYmVyID0gbmV3IE5leHVzLk51bWJlcignI3RhcmdldCcpXG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciBudW1iZXIgPSBuZXcgTmV4dXMuTnVtYmVyKCcjdGFyZ2V0Jyx7XG5cdCogICAnc2l6ZSc6IFs2MCwzMF0sXG5cdCogICAndmFsdWUnOiAwLFxuXHQqICAgJ21pbic6IDAsXG5cdCogICAnbWF4JzogMjAwMDAsXG5cdCogICAnc3RlcCc6IDFcblx0KiB9KVxuXHQqXG5cdCogQG91dHB1dFxuXHQqIGNoYW5nZVxuXHQqIEZpcmVzIGFueSB0aW1lIHRoZSBpbnRlcmZhY2UncyB2YWx1ZSBjaGFuZ2VzLiA8YnI+XG5cdCogVGhlIGV2ZW50IGRhdGEgaXMgdGhlIG51bWJlciB2YWx1ZSBvZiB0aGUgaW50ZXJmYWNlLlxuXHQqXG5cdCogQG91dHB1dGV4YW1wbGVcblx0KiBudW1iZXIub24oJ2NoYW5nZScsZnVuY3Rpb24odikge1xuXHQqICAgY29uc29sZS5sb2codik7XG5cdCogfSlcblx0KlxuXHQqXG5cdCovXG5cdFxuXHR2YXIgTnVtYmVyID0gKGZ1bmN0aW9uIChfSW50ZXJmYWNlKSB7XG5cdCAgZnVuY3Rpb24gTnVtYmVyKCkge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE51bWJlcik7XG5cdFxuXHQgICAgdmFyIG9wdGlvbnMgPSBbXCJ2YWx1ZVwiXTtcblx0XG5cdCAgICB2YXIgZGVmYXVsdHMgPSB7XG5cdCAgICAgIHNpemU6IFs2MCwgMzBdLFxuXHQgICAgICB2YWx1ZTogMCxcblx0ICAgICAgbWluOiAwLFxuXHQgICAgICBtYXg6IDIwMDAwLFxuXHQgICAgICBzdGVwOiAxXG5cdCAgICB9O1xuXHRcblx0ICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKE51bWJlci5wcm90b3R5cGUpLCBcImNvbnN0cnVjdG9yXCIsIHRoaXMpLmNhbGwodGhpcywgYXJndW1lbnRzLCBvcHRpb25zLCBkZWZhdWx0cyk7XG5cdFxuXHQgICAgdGhpcy5fdmFsdWUgPSBuZXcgU3RlcCh0aGlzLnNldHRpbmdzLm1pbiwgdGhpcy5zZXR0aW5ncy5tYXgsIHRoaXMuc2V0dGluZ3Muc3RlcCwgdGhpcy5zZXR0aW5ncy52YWx1ZSk7XG5cdFxuXHQgICAgLypcblx0ICAgIERlZmF1bHQ6IDIuIEhvdyBtYW55IGRlY2ltYWwgcGxhY2VzIHRvIGNsaXAgdGhlIG51bWJlcidzIHZpc3VhbCByZW5kZXJpbmcgdG8uIFRoaXMgZG9lcyBub3QgYWZmZWN0IG51bWJlcidzIGFjdHVhbCB2YWx1ZSBvdXRwdXQgLS0gZm9yIHRoYXQsIHNldCB0aGUgc3RlcCBwcm9wZXJ0eSB0byAuMDEsIC4xLCBvciAxLlxuXHQgICAgQHR5cGUge251bWJlcn1cblx0ICAgIEBleGFtcGxlIG51bWJlci5kZWNpbWFsUGxhY2VzID0gMjtcblx0ICAgICovXG5cdCAgICB0aGlzLmRlY2ltYWxQbGFjZXMgPSAyO1xuXHQgICAgdGhpcy5hY3R1YWwgPSAwO1xuXHRcblx0ICAgIHRoaXMubWF4ID0gdGhpcy5fdmFsdWUubWF4O1xuXHRcblx0ICAgIHRoaXMubWluID0gdGhpcy5fdmFsdWUubWluO1xuXHRcblx0ICAgIHRoaXMuc3RlcCA9IHRoaXMuX3ZhbHVlLnN0ZXA7XG5cdFxuXHQgICAgdGhpcy5pbml0KCk7XG5cdCAgICB0aGlzLnJlbmRlcigpO1xuXHQgIH1cblx0XG5cdCAgX2luaGVyaXRzKE51bWJlciwgX0ludGVyZmFjZSk7XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhOdW1iZXIsIHtcblx0ICAgIGJ1aWxkRnJhbWU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkRnJhbWUoKSB7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC50eXBlID0gXCJ0ZXh0XCI7XG5cdFxuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuY29sb3JzLmZpbGw7XG5cdCAgICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy5kYXJrO1xuXHQgICAgICAgICAgaWYgKHRoaXMuZWxlbWVudC52YWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuXHQgICAgICAgICAgICB0aGlzLnZhbHVlID0gcGFyc2VGbG9hdCh0aGlzLmVsZW1lbnQudmFsdWUpO1xuXHQgICAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pLmJpbmQodGhpcykpO1xuXHRcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgKGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICBpZiAoZS53aGljaCA8IDQ4IHx8IGUud2hpY2ggPiA1Nykge1xuXHQgICAgICAgICAgICBpZiAoZS53aGljaCAhPT0gMTg5ICYmIGUud2hpY2ggIT09IDE5MCAmJiBlLndoaWNoICE9PSA4KSB7XG5cdCAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgICBpZiAoZS53aGljaCA9PT0gMTMpIHtcblx0ICAgICAgICAgICAgdGhpcy5lbGVtZW50LmJsdXIoKTtcblx0ICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZWxlbWVudC52YWx1ZTtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMudmFsdWUpO1xuXHQgICAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pLmJpbmQodGhpcykpO1xuXHRcblx0ICAgICAgICB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2l6ZUludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc2l6ZUludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgdGhpcy5fbWluRGltZW5zaW9uID0gTWF0aC5taW4odGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXHRcblx0ICAgICAgICB2YXIgc3R5bGVzID0gXCJ3aWR0aDogXCIgKyB0aGlzLndpZHRoICsgXCJweDtcIjtcblx0ICAgICAgICBzdHlsZXMgKz0gXCJoZWlnaHQ6IFwiICsgdGhpcy5oZWlnaHQgKyBcInB4O1wiO1xuXHQgICAgICAgIHN0eWxlcyArPSBcImJhY2tncm91bmQtY29sb3I6ICNlN2U3ZTc7XCI7XG5cdCAgICAgICAgc3R5bGVzICs9IFwiY29sb3I6ICMzMzM7XCI7XG5cdCAgICAgICAgc3R5bGVzICs9IFwiZm9udC1mYW1pbHk6IGFyaWFsO1wiO1xuXHQgICAgICAgIHN0eWxlcyArPSBcImZvbnQtd2VpZ2h0OiA1MDA7XCI7XG5cdCAgICAgICAgc3R5bGVzICs9IFwiZm9udC1zaXplOlwiICsgdGhpcy5fbWluRGltZW5zaW9uIC8gMiArIFwicHg7XCI7XG5cdCAgICAgICAgLy8gIHN0eWxlcyArPSAnaGlnaGxpZ2h0OiAjZDE4Oyc7XG5cdCAgICAgICAgc3R5bGVzICs9IFwiYm9yZGVyOiBub25lO1wiO1xuXHQgICAgICAgIHN0eWxlcyArPSBcIm91dGxpbmU6IG5vbmU7XCI7XG5cdCAgICAgICAgc3R5bGVzICs9IFwicGFkZGluZzogXCIgKyB0aGlzLl9taW5EaW1lbnNpb24gLyA0ICsgXCJweCBcIiArIHRoaXMuX21pbkRpbWVuc2lvbiAvIDQgKyBcInB4O1wiO1xuXHQgICAgICAgIHN0eWxlcyArPSBcImJveC1zaXppbmc6IGJvcmRlci1ib3g7XCI7XG5cdCAgICAgICAgc3R5bGVzICs9IFwidXNlclNlbGVjdDogdGV4dDtcIjtcblx0ICAgICAgICBzdHlsZXMgKz0gXCJtb3pVc2VyU2VsZWN0OiB0ZXh0O1wiO1xuXHQgICAgICAgIHN0eWxlcyArPSBcIndlYmtpdFVzZXJTZWxlY3Q6IHRleHQ7XCI7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmNzc1RleHQgKz0gc3R5bGVzO1xuXHRcblx0ICAgICAgICAvLyB0byBhZGQgZXZlbnR1YWxseVxuXHQgICAgICAgIC8vIHZhciBjc3MgPSAnIycrdGhpcy5lbGVtZW50SUQrJzo6c2VsZWN0aW9ueyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCB9Jztcblx0XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnZhbHVlID0gdGhpcy52YWx1ZTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNvbG9ySW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb2xvckludGVyZmFjZSgpIHtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5jb2xvcnMuZmlsbDtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy5kYXJrO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVuZGVyOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdFxuXHQgICAgICAgIHRoaXMuZWxlbWVudC52YWx1ZSA9IG1hdGgucHJ1bmUodGhpcy52YWx1ZSwgdGhpcy5kZWNpbWFsUGxhY2VzKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNsaWNrOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGljaygpIHtcblx0ICAgICAgICB0aGlzLmhhc01vdmVkID0gZmFsc2U7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnJlYWRPbmx5ID0gdHJ1ZTtcblx0ICAgICAgICB0aGlzLmFjdHVhbCA9IHRoaXMudmFsdWU7XG5cdCAgICAgICAgdGhpcy5pbml0aWFsID0geyB5OiB0aGlzLm1vdXNlLnkgfTtcblx0ICAgICAgICB0aGlzLmNoYW5nZUZhY3RvciA9IG1hdGguaW52ZXJ0KHRoaXMubW91c2UueCAvIHRoaXMud2lkdGgpO1xuXHQgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2hhbmdlRmFjdG9yKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1vdmU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIG1vdmUoKSB7XG5cdCAgICAgICAgdGhpcy5oYXNNb3ZlZCA9IHRydWU7XG5cdCAgICAgICAgaWYgKHRoaXMuY2xpY2tlZCkge1xuXHRcblx0ICAgICAgICAgIHZhciBuZXd2YWx1ZSA9IHRoaXMuYWN0dWFsIC0gKHRoaXMubW91c2UueSAtIHRoaXMuaW5pdGlhbC55KSAqIChtYXRoLmNsaXAodGhpcy5tYXggLSB0aGlzLm1pbiwgMCwgMTAwMCkgLyAyMDApICogTWF0aC5wb3codGhpcy5jaGFuZ2VGYWN0b3IsIDIpO1xuXHQgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld3ZhbHVlO1xuXHRcblx0ICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgICAgICBpZiAodGhpcy5fdmFsdWUuY2hhbmdlZCkge1xuXHQgICAgICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwgdGhpcy52YWx1ZSk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVsZWFzZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVsZWFzZSgpIHtcblx0ICAgICAgICBpZiAoIXRoaXMuaGFzTW92ZWQpIHtcblx0ICAgICAgICAgIHRoaXMuZWxlbWVudC5yZWFkT25seSA9IGZhbHNlO1xuXHQgICAgICAgICAgdGhpcy5lbGVtZW50LmZvY3VzKCk7XG5cdCAgICAgICAgICB0aGlzLmVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgdGhpcy5lbGVtZW50LnZhbHVlLmxlbmd0aCk7XG5cdCAgICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5jb2xvcnMuYWNjZW50O1xuXHQgICAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMubGlnaHQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIGRvY3VtZW50LmJvZHkuZm9jdXMoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBsaW5rOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgQ29ubmVjdCB0aGlzIG51bWJlciBpbnRlcmZhY2UgdG8gYSBkaWFsIG9yIHNsaWRlclxuXHQgICAgICBAcGFyYW0ge0ludGVyZmFjZX0gZWxlbWVudCBFbGVtZW50IHRvIGNvbm5lY3QgdG8uXG5cdCAgICAgIEBleGFtcGxlIG51bWJlci5saW5rKHNsaWRlcilcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBsaW5rKGRlc3RpbmF0aW9uKSB7XG5cdCAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblx0XG5cdCAgICAgICAgdGhpcy5taW4gPSBkZXN0aW5hdGlvbi5taW47XG5cdCAgICAgICAgdGhpcy5tYXggPSBkZXN0aW5hdGlvbi5tYXg7XG5cdCAgICAgICAgdGhpcy5zdGVwID0gZGVzdGluYXRpb24uc3RlcDtcblx0ICAgICAgICBkZXN0aW5hdGlvbi5vbihcImNoYW5nZVwiLCBmdW5jdGlvbiAodikge1xuXHQgICAgICAgICAgX3RoaXMucGFzc2l2ZVVwZGF0ZSh2KTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLm9uKFwiY2hhbmdlXCIsIGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgICBkZXN0aW5hdGlvbi52YWx1ZSA9IHY7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IGRlc3RpbmF0aW9uLnZhbHVlO1xuXHQgICAgICAgIC8qICByZXR1cm4ge1xuXHQgICAgICAgICAgICBsaXN0ZW5lcjE6IGxpc3RlbmVyMSxcblx0ICAgICAgICAgICAgbGlzdGVuZXIyOiBsaXN0ZW5lcjIsXG5cdCAgICAgICAgICAgIGRlc3Ryb3k6ICgpID0+IHtcblx0ICAgICAgICAgICAgICBsaXN0ZW5lcjEucmVtb3ZlKCkgKG9yIHNpbWlsYXIpXG5cdCAgICAgICAgICAgICAgbGlzdGVuZXIyLnJlbW92ZSgpIChvciBzaW1pbGFyKVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9ICovXG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBwYXNzaXZlVXBkYXRlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBwYXNzaXZlVXBkYXRlKHYpIHtcblx0ICAgICAgICB0aGlzLl92YWx1ZS51cGRhdGUodik7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHZhbHVlOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgVGhlIGludGVyZmFjZSdzIGN1cnJlbnQgdmFsdWUuIElmIHNldCBtYW51YWxseSwgd2lsbCB1cGRhdGUgdGhlIGludGVyZmFjZSBhbmQgdHJpZ2dlciB0aGUgb3V0cHV0IGV2ZW50LlxuXHQgICAgICBAdHlwZSB7bnVtYmVyfVxuXHQgICAgICBAZXhhbXBsZSBudW1iZXIudmFsdWUgPSAxMDtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZS52YWx1ZTtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuXHQgICAgICAgIHRoaXMuX3ZhbHVlLnVwZGF0ZSh2KTtcblx0ICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwgdGhpcy52YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1pbjoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIExvd2VyIGxpbWl0IG9mIHRoZSBudW1iZXIncyBvdXRwdXQgcmFuZ2Vcblx0ICAgICAgQHR5cGUge251bWJlcn1cblx0ICAgICAgQGV4YW1wbGUgbnVtYmVyLm1pbiA9IDEwMDA7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUubWluO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5fdmFsdWUubWluID0gdjtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1heDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFVwcGVyIGxpbWl0IG9mIHRoZSBudW1iZXIncyBvdXRwdXQgcmFuZ2Vcblx0ICAgICAgQHR5cGUge251bWJlcn1cblx0ICAgICAgQGV4YW1wbGUgbnVtYmVyLm1heCA9IDEwMDA7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUubWF4O1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5fdmFsdWUubWF4ID0gdjtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHN0ZXA6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBUaGUgaW5jcmVtZW50IHRoYXQgdGhlIG51bWJlcidzIHZhbHVlIGNoYW5nZXMgYnkuXG5cdCAgICAgIEB0eXBlIHtudW1iZXJ9XG5cdCAgICAgIEBleGFtcGxlIG51bWJlci5zdGVwID0gNTtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZS5zdGVwO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5fdmFsdWUuc3RlcCA9IHY7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIE51bWJlcjtcblx0fSkoSW50ZXJmYWNlKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gTnVtYmVyO1xuXG4vKioqLyB9KSxcbi8qIDIxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGtleSBpbiBwcm9wcykgeyB2YXIgcHJvcCA9IHByb3BzW2tleV07IHByb3AuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKHByb3AudmFsdWUpIHByb3Aud3JpdGFibGUgPSB0cnVlOyB9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpOyB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHR2YXIgX2dldCA9IGZ1bmN0aW9uIGdldChvYmplY3QsIHByb3BlcnR5LCByZWNlaXZlcikgeyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IHJldHVybiBnZXQocGFyZW50LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpOyB9IH0gZWxzZSBpZiAoXCJ2YWx1ZVwiIGluIGRlc2MgJiYgZGVzYy53cml0YWJsZSkgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH07XG5cdFxuXHR2YXIgX2luaGVyaXRzID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH07XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH07XG5cdFxuXHR2YXIgSW50ZXJmYWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcblx0XG5cdC8qKlxuXHQqIFNlbGVjdFxuXHQqXG5cdCogQGRlc2NyaXB0aW9uIERyb3Bkb3duIG1lbnVcblx0KlxuXHQqIEBkZW1vIDxzcGFuIG5leHVzLXVpPVwic2VsZWN0XCI+PC9zcGFuPlxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgc2VsZWN0ID0gbmV3IE5leHVzLlNlbGVjdCgnI3RhcmdldCcpXG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciBzZWxlY3QgPSBuZXcgTmV4dXMuU2VsZWN0KCcjdGFyZ2V0Jyx7XG5cdCogICAnc2l6ZSc6IFsxMDAsMzBdLFxuXHQqICAgJ29wdGlvbnMnOiBbJ2RlZmF1bHQnLCdvcHRpb25zJ11cblx0KiB9KVxuXHQqXG5cdCogQG91dHB1dFxuXHQqIGNoYW5nZVxuXHQqIEZpcmVzIGFueSB0aW1lIHRoZSBpbnRlcmZhY2UncyB2YWx1ZSBjaGFuZ2VzLiA8YnI+XG5cdCogVGhlIGV2ZW50IGRhdGEgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRleHQgdmFsdWUgb2YgdGhlIHNlbGVjdGVkIG9wdGlvbiwgYXMgd2VsbCBhcyB0aGUgbnVtZXJpYyBpbmRleCBvZiB0aGUgc2VsZWN0aW9uLlxuXHQqXG5cdCogQG91dHB1dGV4YW1wbGVcblx0KiBzZWxlY3Qub24oJ2NoYW5nZScsZnVuY3Rpb24odikge1xuXHQqICAgY29uc29sZS5sb2codik7XG5cdCogfSlcblx0KlxuXHQqXG5cdCovXG5cdFxuXHR2YXIgU2VsZWN0ID0gKGZ1bmN0aW9uIChfSW50ZXJmYWNlKSB7XG5cdCAgZnVuY3Rpb24gU2VsZWN0KCkge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNlbGVjdCk7XG5cdFxuXHQgICAgdmFyIG9wdGlvbnMgPSBbXCJ2YWx1ZVwiXTtcblx0XG5cdCAgICB2YXIgZGVmYXVsdHMgPSB7XG5cdCAgICAgIHNpemU6IFsxMDAsIDMwXSxcblx0ICAgICAgb3B0aW9uczogW1wiZGVmYXVsdFwiLCBcIm9wdGlvbnNcIl1cblx0ICAgIH07XG5cdFxuXHQgICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoU2VsZWN0LnByb3RvdHlwZSksIFwiY29uc3RydWN0b3JcIiwgdGhpcykuY2FsbCh0aGlzLCBhcmd1bWVudHMsIG9wdGlvbnMsIGRlZmF1bHRzKTtcblx0XG5cdCAgICB0aGlzLl9zZWxlY3RlZEluZGV4ID0gLTE7XG5cdCAgICB0aGlzLl92YWx1ZSA9IGZhbHNlO1xuXHRcblx0ICAgIHRoaXMuX29wdGlvbnMgPSB0aGlzLnNldHRpbmdzLm9wdGlvbnM7XG5cdFxuXHQgICAgdGhpcy5pbml0KCk7XG5cdCAgICB0aGlzLnJlbmRlcigpO1xuXHQgIH1cblx0XG5cdCAgX2luaGVyaXRzKFNlbGVjdCwgX0ludGVyZmFjZSk7XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhTZWxlY3QsIHtcblx0ICAgIGJ1aWxkRnJhbWU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkRnJhbWUoKSB7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiKTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuZm9udFNpemUgPSB0aGlzLmhlaWdodCAvIDIgKyBcInB4XCI7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLm91dGxpbmUgPSBcIm5vbmVcIjtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuaGlnaGxpZ2h0ID0gXCJub25lXCI7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCArIFwicHhcIjtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgKyBcInB4XCI7XG5cdFxuXHQgICAgICAgIHRoaXMuYm91bmRSZW5kZXIgPSB0aGlzLnJlbmRlci5iaW5kKHRoaXMpO1xuXHRcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCB0aGlzLmJvdW5kUmVuZGVyKTtcblx0XG5cdCAgICAgICAgdGhpcy5wYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGF0dGFjaExpc3RlbmVyczoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYXR0YWNoTGlzdGVuZXJzKCkge31cblx0ICAgIH0sXG5cdCAgICBidWlsZEludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIHRoaXMuZGVmaW5lT3B0aW9ucygpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29sb3JJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbG9ySW50ZXJmYWNlKCkge1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmNvbG9ycy5maWxsO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLmRhcms7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmJvcmRlciA9IFwic29saWQgMHB4IFwiICsgdGhpcy5jb2xvcnMubWVkaXVtTGlnaHQ7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByZW5kZXI6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0XG5cdCAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLmVsZW1lbnQub3B0aW9uc1t0aGlzLmVsZW1lbnQuc2VsZWN0ZWRJbmRleF0udGV4dDtcblx0ICAgICAgICB0aGlzLl9zZWxlY3RlZEluZGV4ID0gdGhpcy5lbGVtZW50LnNlbGVjdGVkSW5kZXg7XG5cdCAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHtcblx0ICAgICAgICAgIHZhbHVlOiB0aGlzLl92YWx1ZSxcblx0ICAgICAgICAgIGluZGV4OiB0aGlzLl9zZWxlY3RlZEluZGV4XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjbGljazoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xpY2soKSB7fVxuXHQgICAgfSxcblx0ICAgIG1vdmU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIG1vdmUoKSB7fVxuXHQgICAgfSxcblx0ICAgIHJlbGVhc2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbGVhc2UoKSB7fVxuXHQgICAgfSxcblx0ICAgIGRlZmluZU9wdGlvbnM6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICAgKiBVcGRhdGUgdGhlIGxpc3Qgb2Ygb3B0aW9ucy4gVGhpcyByZW1vdmVzIGFsbCBleGlzdGluZyBvcHRpb25zIGFuZCBjcmVhdGVzIGEgbmV3IGxpc3Qgb2Ygb3B0aW9ucy5cblx0ICAgICAgICogQHBhcmFtICB7YXJyYXl9IG9wdGlvbnMgTmV3IGFycmF5IG9mIG9wdGlvbnNcblx0ICAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gZGVmaW5lT3B0aW9ucyhvcHRpb25zKSB7XG5cdFxuXHQgICAgICAgIC8qICBmdW5jdGlvbiByZW1vdmVPcHRpb25zKHNlbGVjdGJveClcblx0ICAgICAgICAgIHtcblx0ICAgICAgICAgICAgICB2YXIgaTtcblx0ICAgICAgICAgICAgICBmb3IoaSA9IHNlbGVjdGJveC5vcHRpb25zLmxlbmd0aCAtIDEgOyBpID49IDAgOyBpLS0pXG5cdCAgICAgICAgICAgICAge1xuXHQgICAgICAgICAgICAgICAgICBzZWxlY3Rib3gucmVtb3ZlKGkpO1xuXHQgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIC8vdXNpbmcgdGhlIGZ1bmN0aW9uOlxuXHQgICAgICAgICAgcmVtb3ZlT3B0aW9ucyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm15U2VsZWN0T2JqZWN0XCIpKTsgKi9cblx0XG5cdCAgICAgICAgaWYgKG9wdGlvbnMpIHtcblx0ICAgICAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuZWxlbWVudC5vcHRpb25zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlKGkpO1xuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vcHRpb25zLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICB0aGlzLmVsZW1lbnQub3B0aW9ucy5hZGQobmV3IE9wdGlvbih0aGlzLl9vcHRpb25zW2ldLCBpKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgdmFsdWU6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBUaGUgdGV4dCBvZiB0aGUgb3B0aW9uIHRoYXQgaXMgY3VycmVudGx5IHNlbGVjdGVkLiBJZiBzZXQsIHdpbGwgdXBkYXRlIHRoZSBpbnRlcmZhY2UgYW5kIHRyaWdnZXIgdGhlIG91dHB1dCBldmVudC5cblx0ICAgICAgQHR5cGUge1N0cmluZ31cblx0ICAgICAgQGV4YW1wbGUgc2VsZWN0LnZhbHVlID0gXCJzYXd0b290aFwiO1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5fdmFsdWUgPSB2O1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50Lm9wdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgIGlmICh2ID09PSB0aGlzLmVsZW1lbnQub3B0aW9uc1tpXS50ZXh0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGk7XG5cdCAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNlbGVjdGVkSW5kZXg6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBUaGUgbnVtZXJpYyBpbmRleCBvZiB0aGUgb3B0aW9uIHRoYXQgaXMgY3VycmVudGx5IHNlbGVjdGVkLiBJZiBzZXQsIHdpbGwgdXBkYXRlIHRoZSBpbnRlcmZhY2UgYW5kIHRyaWdnZXIgdGhlIG91dHB1dCBldmVudC5cblx0ICAgICAgQHR5cGUge251bWJlcn1cblx0ICAgICAgQGV4YW1wbGUgc2VsZWN0LnNlbGVjdGVkSW5kZXggPSAyO1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSW5kZXg7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLl9zZWxlY3RlZEluZGV4ID0gdjtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IHY7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGN1c3RvbURlc3Ryb3k6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGN1c3RvbURlc3Ryb3koKSB7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgdGhpcy5ib3VuZFJlbmRlcik7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIFNlbGVjdDtcblx0fSkoSW50ZXJmYWNlKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gU2VsZWN0O1xuXG4vKioqLyB9KSxcbi8qIDIyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQgPSBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfTtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7IH0gfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gZGVzYyAmJiBkZXNjLndyaXRhYmxlKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfTtcblx0XG5cdHZhciBfaW5oZXJpdHMgPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBzdmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXHR2YXIgbWF0aCA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cdHZhciBJbnRlcmZhY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xuXHR2YXIgU3RlcCA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xuXHRcblx0dmFyIEludGVyYWN0aW9uID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX193ZWJwYWNrX3JlcXVpcmVfXygxMikpO1xuXHRcblx0LyoqXG5cdCogRGlhbFxuXHQqXG5cdCpcblx0KiBAZGVzY3JpcHRpb24gRGlhbCB3aXRoIHJhZGlhbCBvciBsaW5lYXIgaW50ZXJhY3Rpb24uXG5cdCpcblx0KiBAZGVtbyA8c3BhbiBuZXh1cy11aT1cImRpYWxcIj48L3NwYW4+XG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciBkaWFsID0gbmV3IE5leHVzLkRpYWwoJyN0YXJnZXQnKVxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgZGlhbCA9IG5ldyBOZXh1cy5EaWFsKCcjdGFyZ2V0Jyx7XG5cdCogICAnc2l6ZSc6IFs3NSw3NV0sXG5cdCogICAnaW50ZXJhY3Rpb24nOiAncmFkaWFsJywgLy8gXCJyYWRpYWxcIiwgXCJ2ZXJ0aWNhbFwiLCBvciBcImhvcml6b250YWxcIlxuXHQqICAgJ21vZGUnOiAncmVsYXRpdmUnLCAvLyBcImFic29sdXRlXCIgb3IgXCJyZWxhdGl2ZVwiXG5cdCogICAnbWluJzogMCxcblx0KiAgICdtYXgnOiAxLFxuXHQqICAgJ3N0ZXAnOiAwLFxuXHQqICAgJ3ZhbHVlJzogMFxuXHQqIH0pXG5cdCpcblx0KiBAb3V0cHV0XG5cdCogY2hhbmdlXG5cdCogRmlyZXMgYW55IHRpbWUgdGhlIGludGVyZmFjZSdzIHZhbHVlIGNoYW5nZXMuIDxicj5cblx0KiBUaGUgZXZlbnQgZGF0YSBpcyB0aGUgbnVtYmVyIHZhbHVlIG9mIHRoZSBpbnRlcmZhY2UuXG5cdCpcblx0KiBAb3V0cHV0ZXhhbXBsZVxuXHQqIGRpYWwub24oJ2NoYW5nZScsZnVuY3Rpb24odikge1xuXHQqICAgY29uc29sZS5sb2codik7XG5cdCogfSlcblx0KlxuXHQqIEB0dXRvcmlhbFxuXHQqIERpYWxcblx0KiB5Z0dNeHFcblx0KlxuXHQqL1xuXHRcblx0dmFyIERpYWwgPSAoZnVuY3Rpb24gKF9JbnRlcmZhY2UpIHtcblx0ICBmdW5jdGlvbiBEaWFsKCkge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIERpYWwpO1xuXHRcblx0ICAgIHZhciBvcHRpb25zID0gW1wibWluXCIsIFwibWF4XCIsIFwidmFsdWVcIl07XG5cdFxuXHQgICAgdmFyIGRlZmF1bHRzID0ge1xuXHQgICAgICBzaXplOiBbNzUsIDc1XSxcblx0ICAgICAgaW50ZXJhY3Rpb246IFwicmFkaWFsXCIsIC8vIHJhZGlhbCwgdmVydGljYWwsIGhvcml6b250YWxcblx0ICAgICAgbW9kZTogXCJyZWxhdGl2ZVwiLCAvLyBhYnNvbHV0ZSwgcmVsYXRpdmVcblx0ICAgICAgbWluOiAwLFxuXHQgICAgICBtYXg6IDEsXG5cdCAgICAgIHN0ZXA6IDAsXG5cdCAgICAgIHZhbHVlOiAwXG5cdCAgICB9O1xuXHRcblx0ICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKERpYWwucHJvdG90eXBlKSwgXCJjb25zdHJ1Y3RvclwiLCB0aGlzKS5jYWxsKHRoaXMsIGFyZ3VtZW50cywgb3B0aW9ucywgZGVmYXVsdHMpO1xuXHRcblx0ICAgIHRoaXMuaW50ZXJhY3Rpb24gPSB0aGlzLnNldHRpbmdzLmludGVyYWN0aW9uO1xuXHRcblx0ICAgIHRoaXMuX3ZhbHVlID0gbmV3IFN0ZXAodGhpcy5zZXR0aW5ncy5taW4sIHRoaXMuc2V0dGluZ3MubWF4LCB0aGlzLnNldHRpbmdzLnN0ZXAsIHRoaXMuc2V0dGluZ3MudmFsdWUpO1xuXHRcblx0ICAgIHRoaXMucG9zaXRpb24gPSBuZXcgSW50ZXJhY3Rpb24uSGFuZGxlKHRoaXMuc2V0dGluZ3MubW9kZSwgdGhpcy5pbnRlcmFjdGlvbiwgWzAsIHRoaXMud2lkdGhdLCBbdGhpcy5oZWlnaHQsIDBdKTtcblx0XG5cdCAgICB0aGlzLmluaXQoKTtcblx0XG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5fdmFsdWUudmFsdWU7XG5cdFxuXHQgICAgdGhpcy5wb3NpdGlvbi52YWx1ZSA9IHRoaXMuX3ZhbHVlLm5vcm1hbGl6ZWQ7XG5cdFxuXHQgICAgdGhpcy5wcmV2aW91c0FuZ2xlID0gZmFsc2U7XG5cdFxuXHQgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMudmFsdWUpO1xuXHQgIH1cblx0XG5cdCAgX2luaGVyaXRzKERpYWwsIF9JbnRlcmZhY2UpO1xuXHRcblx0ICBfY3JlYXRlQ2xhc3MoRGlhbCwge1xuXHQgICAgYnVpbGRJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkSW50ZXJmYWNlKCkge1xuXHRcblx0ICAgICAgICB0aGlzLmJhY2tncm91bmQgPSBzdmcuY3JlYXRlKFwiY2lyY2xlXCIpO1xuXHQgICAgICAgIHRoaXMuc2NyZXcgPSBzdmcuY3JlYXRlKFwiY2lyY2xlXCIpO1xuXHQgICAgICAgIHRoaXMuaGFuZGxlID0gc3ZnLmNyZWF0ZShcInBhdGhcIik7XG5cdCAgICAgICAgdGhpcy5oYW5kbGUyID0gc3ZnLmNyZWF0ZShcInBhdGhcIik7XG5cdCAgICAgICAgdGhpcy5oYW5kbGVGaWxsID0gc3ZnLmNyZWF0ZShcInBhdGhcIik7XG5cdCAgICAgICAgdGhpcy5oYW5kbGUyRmlsbCA9IHN2Zy5jcmVhdGUoXCJwYXRoXCIpO1xuXHQgICAgICAgIHRoaXMuaGFuZGxlTGluZSA9IHN2Zy5jcmVhdGUoXCJwYXRoXCIpO1xuXHRcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5iYWNrZ3JvdW5kKTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5oYW5kbGUpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmhhbmRsZTIpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmhhbmRsZUZpbGwpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmhhbmRsZTJGaWxsKTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5oYW5kbGVMaW5lKTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5zY3Jldyk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzaXplSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaXplSW50ZXJmYWNlKCkge1xuXHRcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uLnJlc2l6ZShbMCwgdGhpcy53aWR0aF0sIFt0aGlzLmhlaWdodCwgMF0pO1xuXHRcblx0ICAgICAgICB2YXIgY2VudGVyID0ge1xuXHQgICAgICAgICAgeDogdGhpcy53aWR0aCAvIDIsXG5cdCAgICAgICAgICB5OiB0aGlzLmhlaWdodCAvIDJcblx0ICAgICAgICB9O1xuXHRcblx0ICAgICAgICB2YXIgZGlhbWV0ZXIgPSBNYXRoLm1pbih0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG5cdFxuXHQgICAgICAgIHRoaXMuYmFja2dyb3VuZC5zZXRBdHRyaWJ1dGUoXCJjeFwiLCBjZW50ZXIueCk7XG5cdCAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLnNldEF0dHJpYnV0ZShcImN5XCIsIGNlbnRlci55KTtcblx0ICAgICAgICB0aGlzLmJhY2tncm91bmQuc2V0QXR0cmlidXRlKFwiclwiLCBkaWFtZXRlciAvIDIgLSBkaWFtZXRlciAvIDQwKTtcblx0XG5cdCAgICAgICAgdGhpcy5zY3Jldy5zZXRBdHRyaWJ1dGUoXCJjeFwiLCBjZW50ZXIueCk7XG5cdCAgICAgICAgdGhpcy5zY3Jldy5zZXRBdHRyaWJ1dGUoXCJjeVwiLCBjZW50ZXIueSk7XG5cdCAgICAgICAgdGhpcy5zY3Jldy5zZXRBdHRyaWJ1dGUoXCJyXCIsIGRpYW1ldGVyIC8gMTIpO1xuXHRcblx0ICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlO1xuXHRcblx0ICAgICAgICB2YXIgaGFuZGxlUG9pbnRzID0ge1xuXHQgICAgICAgICAgc3RhcnQ6IE1hdGguUEkgKiAxLjUsXG5cdCAgICAgICAgICBlbmQ6IG1hdGguY2xpcChtYXRoLnNjYWxlKHZhbHVlLCAwLCAwLjUsIE1hdGguUEkgKiAxLjUsIE1hdGguUEkgKiAwLjUpLCBNYXRoLlBJICogMC41LCBNYXRoLlBJICogMS41KVxuXHQgICAgICAgIH07XG5cdCAgICAgICAgdmFyIGhhbmRsZTJQb2ludHMgPSB7XG5cdCAgICAgICAgICBzdGFydDogTWF0aC5QSSAqIDIuNSxcblx0ICAgICAgICAgIGVuZDogbWF0aC5jbGlwKG1hdGguc2NhbGUodmFsdWUsIDAuNSwgMSwgTWF0aC5QSSAqIDIuNSwgTWF0aC5QSSAqIDEuNSksIE1hdGguUEkgKiAxLjUsIE1hdGguUEkgKiAyLjUpXG5cdCAgICAgICAgfTtcblx0XG5cdCAgICAgICAgdmFyIGhhbmRsZVBhdGggPSBzdmcuYXJjKGNlbnRlci54LCBjZW50ZXIueSwgZGlhbWV0ZXIgLyAyIC0gZGlhbWV0ZXIgLyA0MCwgaGFuZGxlUG9pbnRzLnN0YXJ0LCBoYW5kbGVQb2ludHMuZW5kKTtcblx0ICAgICAgICB2YXIgaGFuZGxlMlBhdGggPSBzdmcuYXJjKGNlbnRlci54LCBjZW50ZXIueSwgZGlhbWV0ZXIgLyAyIC0gZGlhbWV0ZXIgLyA0MCwgaGFuZGxlMlBvaW50cy5zdGFydCwgaGFuZGxlMlBvaW50cy5lbmQpO1xuXHRcblx0ICAgICAgICB0aGlzLmhhbmRsZS5zZXRBdHRyaWJ1dGUoXCJkXCIsIGhhbmRsZVBhdGgpO1xuXHQgICAgICAgIHRoaXMuaGFuZGxlLnNldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiLCBkaWFtZXRlciAvIDIwKTtcblx0ICAgICAgICB0aGlzLmhhbmRsZS5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIFwibm9uZVwiKTtcblx0XG5cdCAgICAgICAgdGhpcy5oYW5kbGUyLnNldEF0dHJpYnV0ZShcImRcIiwgaGFuZGxlMlBhdGgpO1xuXHQgICAgICAgIHRoaXMuaGFuZGxlMi5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIiwgZGlhbWV0ZXIgLyAyMCk7XG5cdCAgICAgICAgdGhpcy5oYW5kbGUyLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgXCJub25lXCIpO1xuXHRcblx0ICAgICAgICBoYW5kbGVQYXRoICs9IFwiIEwgXCIgKyBjZW50ZXIueCArIFwiIFwiICsgY2VudGVyLnk7XG5cdFxuXHQgICAgICAgIHRoaXMuaGFuZGxlRmlsbC5zZXRBdHRyaWJ1dGUoXCJkXCIsIGhhbmRsZVBhdGgpO1xuXHQgICAgICAgIHRoaXMuaGFuZGxlRmlsbC5zZXRBdHRyaWJ1dGUoXCJmaWxsLW9wYWNpdHlcIiwgXCIwLjNcIik7XG5cdFxuXHQgICAgICAgIGhhbmRsZTJQYXRoICs9IFwiIEwgXCIgKyBjZW50ZXIueCArIFwiIFwiICsgY2VudGVyLnk7XG5cdFxuXHQgICAgICAgIHRoaXMuaGFuZGxlMkZpbGwuc2V0QXR0cmlidXRlKFwiZFwiLCBoYW5kbGUyUGF0aCk7XG5cdCAgICAgICAgdGhpcy5oYW5kbGUyRmlsbC5zZXRBdHRyaWJ1dGUoXCJmaWxsLW9wYWNpdHlcIiwgXCIwLjNcIik7XG5cdFxuXHQgICAgICAgIHZhciBhcmNFbmRpbmdBID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGlmICh2YWx1ZSA8IDAuNSkge1xuXHQgICAgICAgICAgYXJjRW5kaW5nQSA9IGhhbmRsZVBvaW50cy5lbmQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIGFyY0VuZGluZ0EgPSBoYW5kbGUyUG9pbnRzLmVuZDtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIHZhciBhcmNFbmRpbmdYID0gY2VudGVyLnggKyBNYXRoLmNvcyhhcmNFbmRpbmdBKSAqIChkaWFtZXRlciAvIDIpO1xuXHQgICAgICAgIHZhciBhcmNFbmRpbmdZID0gY2VudGVyLnkgKyBNYXRoLnNpbihhcmNFbmRpbmdBKSAqIChkaWFtZXRlciAvIDIpICogLTE7XG5cdFxuXHQgICAgICAgIHRoaXMuaGFuZGxlTGluZS5zZXRBdHRyaWJ1dGUoXCJkXCIsIFwiTSBcIiArIGNlbnRlci54ICsgXCIgXCIgKyBjZW50ZXIueSArIFwiIEwgXCIgKyBhcmNFbmRpbmdYICsgXCIgXCIgKyBhcmNFbmRpbmdZKTtcblx0ICAgICAgICB0aGlzLmhhbmRsZUxpbmUuc2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIsIGRpYW1ldGVyIC8gMjApO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29sb3JJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbG9ySW50ZXJmYWNlKCkge1xuXHQgICAgICAgIHRoaXMuYmFja2dyb3VuZC5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLmZpbGwpO1xuXHQgICAgICAgIHRoaXMuc2NyZXcuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmNvbG9ycy5hY2NlbnQpO1xuXHQgICAgICAgIHRoaXMuaGFuZGxlLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCB0aGlzLmNvbG9ycy5hY2NlbnQpO1xuXHQgICAgICAgIHRoaXMuaGFuZGxlMi5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgdGhpcy5jb2xvcnMuYWNjZW50KTtcblx0ICAgICAgICB0aGlzLmhhbmRsZUZpbGwuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmNvbG9ycy5hY2NlbnQpO1xuXHQgICAgICAgIHRoaXMuaGFuZGxlMkZpbGwuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmNvbG9ycy5hY2NlbnQpO1xuXHQgICAgICAgIHRoaXMuaGFuZGxlTGluZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgdGhpcy5jb2xvcnMuYWNjZW50KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlbmRlcjoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHQgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuX3ZhbHVlLm5vcm1hbGl6ZWQ7XG5cdFxuXHQgICAgICAgIHZhciBjZW50ZXIgPSB7XG5cdCAgICAgICAgICB4OiB0aGlzLndpZHRoIC8gMixcblx0ICAgICAgICAgIHk6IHRoaXMuaGVpZ2h0IC8gMlxuXHQgICAgICAgIH07XG5cdFxuXHQgICAgICAgIHZhciBkaWFtZXRlciA9IE1hdGgubWluKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblx0XG5cdCAgICAgICAgdmFyIGhhbmRsZVBvaW50cyA9IHtcblx0ICAgICAgICAgIHN0YXJ0OiBNYXRoLlBJICogMS41LFxuXHQgICAgICAgICAgZW5kOiBtYXRoLmNsaXAobWF0aC5zY2FsZSh2YWx1ZSwgMCwgMC41LCBNYXRoLlBJICogMS41LCBNYXRoLlBJICogMC41KSwgTWF0aC5QSSAqIDAuNSwgTWF0aC5QSSAqIDEuNSlcblx0ICAgICAgICB9O1xuXHQgICAgICAgIHZhciBoYW5kbGUyUG9pbnRzID0ge1xuXHQgICAgICAgICAgc3RhcnQ6IE1hdGguUEkgKiAyLjUsXG5cdCAgICAgICAgICBlbmQ6IG1hdGguY2xpcChtYXRoLnNjYWxlKHZhbHVlLCAwLjUsIDEsIE1hdGguUEkgKiAyLjUsIE1hdGguUEkgKiAxLjUpLCBNYXRoLlBJICogMS41LCBNYXRoLlBJICogMi41KVxuXHQgICAgICAgIH07XG5cdFxuXHQgICAgICAgIHZhciBoYW5kbGVQYXRoID0gc3ZnLmFyYyhjZW50ZXIueCwgY2VudGVyLnksIGRpYW1ldGVyIC8gMiAtIGRpYW1ldGVyIC8gNDAsIGhhbmRsZVBvaW50cy5zdGFydCwgaGFuZGxlUG9pbnRzLmVuZCk7XG5cdCAgICAgICAgdmFyIGhhbmRsZTJQYXRoID0gc3ZnLmFyYyhjZW50ZXIueCwgY2VudGVyLnksIGRpYW1ldGVyIC8gMiAtIGRpYW1ldGVyIC8gNDAsIGhhbmRsZTJQb2ludHMuc3RhcnQsIGhhbmRsZTJQb2ludHMuZW5kKTtcblx0XG5cdCAgICAgICAgdGhpcy5oYW5kbGUuc2V0QXR0cmlidXRlKFwiZFwiLCBoYW5kbGVQYXRoKTtcblx0ICAgICAgICB0aGlzLmhhbmRsZTIuc2V0QXR0cmlidXRlKFwiZFwiLCBoYW5kbGUyUGF0aCk7XG5cdFxuXHQgICAgICAgIGhhbmRsZVBhdGggKz0gXCIgTCBcIiArIGNlbnRlci54ICsgXCIgXCIgKyBjZW50ZXIueTtcblx0XG5cdCAgICAgICAgdGhpcy5oYW5kbGVGaWxsLnNldEF0dHJpYnV0ZShcImRcIiwgaGFuZGxlUGF0aCk7XG5cdFxuXHQgICAgICAgIGhhbmRsZTJQYXRoICs9IFwiIEwgXCIgKyBjZW50ZXIueCArIFwiIFwiICsgY2VudGVyLnk7XG5cdFxuXHQgICAgICAgIHRoaXMuaGFuZGxlMkZpbGwuc2V0QXR0cmlidXRlKFwiZFwiLCBoYW5kbGUyUGF0aCk7XG5cdFxuXHQgICAgICAgIHZhciBhcmNFbmRpbmdBID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGlmICh2YWx1ZSA8PSAwLjUpIHtcblx0ICAgICAgICAgIGFyY0VuZGluZ0EgPSBoYW5kbGVQb2ludHMuZW5kO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICBhcmNFbmRpbmdBID0gaGFuZGxlMlBvaW50cy5lbmQ7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICB2YXIgYXJjRW5kaW5nWCA9IGNlbnRlci54ICsgTWF0aC5jb3MoYXJjRW5kaW5nQSkgKiAoZGlhbWV0ZXIgLyAyKTtcblx0ICAgICAgICB2YXIgYXJjRW5kaW5nWSA9IGNlbnRlci55ICsgTWF0aC5zaW4oYXJjRW5kaW5nQSkgKiAoZGlhbWV0ZXIgLyAyKSAqIC0xO1xuXHRcblx0ICAgICAgICB0aGlzLmhhbmRsZUxpbmUuc2V0QXR0cmlidXRlKFwiZFwiLCBcIk0gXCIgKyBjZW50ZXIueCArIFwiIFwiICsgY2VudGVyLnkgKyBcIiBMIFwiICsgYXJjRW5kaW5nWCArIFwiIFwiICsgYXJjRW5kaW5nWSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjbGljazoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xpY2soKSB7XG5cdCAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gXCJyZWxhdGl2ZVwiKSB7XG5cdCAgICAgICAgICB0aGlzLnByZXZpb3VzQW5nbGUgPSBmYWxzZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvbi5hbmNob3IgPSB0aGlzLm1vdXNlO1xuXHQgICAgICAgIHRoaXMucG9zaXRpb24udmFsdWUgPSB0aGlzLl92YWx1ZS5ub3JtYWxpemVkO1xuXHQgICAgICAgIHRoaXMubW92ZSgpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbW92ZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gbW92ZSgpIHtcblx0ICAgICAgICBpZiAodGhpcy5jbGlja2VkKSB7XG5cdFxuXHQgICAgICAgICAgdGhpcy5wb3NpdGlvbi51cGRhdGUodGhpcy5tb3VzZSk7XG5cdFxuXHQgICAgICAgICAgdmFyIGFuZ2xlID0gdGhpcy5wb3NpdGlvbi52YWx1ZSAqIE1hdGguUEkgKiAyO1xuXHRcblx0ICAgICAgICAgIGlmIChhbmdsZSA8IDApIHtcblx0ICAgICAgICAgICAgYW5nbGUgKz0gTWF0aC5QSSAqIDI7XG5cdCAgICAgICAgICB9XG5cdFxuXHQgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gXCJyZWxhdGl2ZVwiKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnByZXZpb3VzQW5nbGUgIT09IGZhbHNlICYmIE1hdGguYWJzKHRoaXMucHJldmlvdXNBbmdsZSAtIGFuZ2xlKSA+IDIpIHtcblx0ICAgICAgICAgICAgICBpZiAodGhpcy5wcmV2aW91c0FuZ2xlID4gMykge1xuXHQgICAgICAgICAgICAgICAgYW5nbGUgPSBNYXRoLlBJICogMjtcblx0ICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgYW5nbGUgPSAwO1xuXHQgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSAvKiBlbHNlIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMucHJldmlvdXNBbmdsZSAhPT0gZmFsc2UgJiYgTWF0aC5hYnModGhpcy5wcmV2aW91c0FuZ2xlIC0gYW5nbGUpID4gMikge1xuXHQgICAgICAgICAgICAgIGlmICh0aGlzLnByZXZpb3VzQW5nbGUgPiAzKSB7XG5cdCAgICAgICAgICAgICAgICBhbmdsZSA9IE1hdGguUEkqMjtcblx0ICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgYW5nbGUgPSAwO1xuXHQgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9ICovXG5cdCAgICAgICAgICB0aGlzLnByZXZpb3VzQW5nbGUgPSBhbmdsZTtcblx0XG5cdCAgICAgICAgICB2YXIgcmVhbFZhbHVlID0gYW5nbGUgLyAoTWF0aC5QSSAqIDIpO1xuXHRcblx0ICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLl92YWx1ZS51cGRhdGVOb3JtYWwocmVhbFZhbHVlKTtcblx0XG5cdCAgICAgICAgICBpZiAodGhpcy5tb2RlID09PSBcInJlbGF0aXZlXCIpIHtcblx0ICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi52YWx1ZSA9IHJlYWxWYWx1ZTtcblx0ICAgICAgICAgIH1cblx0XG5cdCAgICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwgdGhpcy5fdmFsdWUudmFsdWUpO1xuXHRcblx0ICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVsZWFzZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVsZWFzZSgpIHt9XG5cdCAgICB9LFxuXHQgICAgdmFsdWU6IHtcblx0XG5cdCAgICAgIC8qXG5cdCAgICAgIERpYWwncyB2YWx1ZS4gV2hlbiBzZXQsIGl0IHdpbGwgYXV0b21hdGljYWxseSBiZSBhZGp1c3QgdG8gZml0IG1pbi9tYXgvc3RlcCBzZXR0aW5ncyBvZiB0aGUgaW50ZXJmYWNlLlxuXHQgICAgICBAdHlwZSB7bnVtYmVyfVxuXHQgICAgICBAZXhhbXBsZSBkaWFsLnZhbHVlID0gMTA7XG5cdCAgICAgICBnZXQgdmFsdWUoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlLnZhbHVlO1xuXHQgICAgICB9XG5cdCAgICAgICBzZXQgdmFsdWUodmFsdWUpIHtcblx0ICAgICAgICB0aGlzLl92YWx1ZS51cGRhdGUodmFsdWUpO1xuXHQgICAgICAgIHRoaXMuZW1pdCgnY2hhbmdlJyx0aGlzLnZhbHVlKTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICAgICovXG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgRGlhbCdzIHZhbHVlLiBXaGVuIHNldCwgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGFkanVzdCB0byBmaXQgbWluL21heC9zdGVwIHNldHRpbmdzIG9mIHRoZSBpbnRlcmZhY2UuXG5cdCAgICAgIEB0eXBlIHtudW1iZXJ9XG5cdCAgICAgIEBleGFtcGxlIGRpYWwudmFsdWUgPSAxMDtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZS52YWx1ZTtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuXHQgICAgICAgIHRoaXMuX3ZhbHVlLnVwZGF0ZSh2KTtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uLnZhbHVlID0gdGhpcy5fdmFsdWUubm9ybWFsaXplZDtcblx0ICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwgdGhpcy5fdmFsdWUudmFsdWUpO1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtaW46IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBMb3dlciBsaW1pdCBvZiB0aGUgZGlhbCdzIG91dHB1dCByYW5nZVxuXHQgICAgICBAdHlwZSB7bnVtYmVyfVxuXHQgICAgICBAZXhhbXBsZSBkaWFsLm1pbiA9IDEwMDA7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUubWluO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5fdmFsdWUubWluID0gdjtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1heDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFVwcGVyIGxpbWl0IG9mIHRoZSBkaWFsJ3Mgb3V0cHV0IHJhbmdlXG5cdCAgICAgIEB0eXBlIHtudW1iZXJ9XG5cdCAgICAgIEBleGFtcGxlIGRpYWwubWF4ID0gMTAwMDtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZS5tYXg7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLl92YWx1ZS5tYXggPSB2O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc3RlcDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFRoZSBpbmNyZW1lbnQgdGhhdCB0aGUgZGlhbCdzIHZhbHVlIGNoYW5nZXMgYnkuXG5cdCAgICAgIEB0eXBlIHtudW1iZXJ9XG5cdCAgICAgIEBleGFtcGxlIGRpYWwuc3RlcCA9IDU7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUuc3RlcDtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuXHQgICAgICAgIHRoaXMuX3ZhbHVlLnN0ZXAgPSB2O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbW9kZToge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIEFic29sdXRlIG1vZGUgKGRpYWwncyB2YWx1ZSBqdW1wcyB0byBtb3VzZSBjbGljayBwb3NpdGlvbikgb3IgcmVsYXRpdmUgbW9kZSAobW91c2UgZHJhZyBjaGFuZ2VzIHZhbHVlIHJlbGF0aXZlIHRvIGl0cyBjdXJyZW50IHBvc2l0aW9uKS4gRGVmYXVsdDogXCJyZWxhdGl2ZVwiLlxuXHQgICAgICBAdHlwZSB7c3RyaW5nfVxuXHQgICAgICBAZXhhbXBsZSBkaWFsLm1vZGUgPSBcInJlbGF0aXZlXCI7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbi5tb2RlO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvbi5tb2RlID0gdjtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG5vcm1hbGl6ZWQ6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBOb3JtYWxpemVkIHZhbHVlIG9mIHRoZSBkaWFsLlxuXHQgICAgICBAdHlwZSB7bnVtYmVyfVxuXHQgICAgICBAZXhhbXBsZSBkaWFsLm5vcm1hbGl6ZWQgPSAwLjU7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUubm9ybWFsaXplZDtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuXHQgICAgICAgIHRoaXMuX3ZhbHVlLnVwZGF0ZU5vcm1hbCh2KTtcblx0ICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwgdGhpcy52YWx1ZSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIERpYWw7XG5cdH0pKEludGVyZmFjZSk7XG5cdFxuXHRtb2R1bGUuZXhwb3J0cyA9IERpYWw7XG5cbi8qKiovIH0pLFxuLyogMjMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7IH0gfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gZGVzYyAmJiBkZXNjLndyaXRhYmxlKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfTtcblx0XG5cdHZhciBfaW5oZXJpdHMgPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBzdmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXHR2YXIgSW50ZXJmYWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcblx0dmFyIEJ1dHRvblRlbXBsYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG5cdHZhciB0b3VjaCA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG5cdFxuXHR2YXIgUGlhbm9LZXkgPSAoZnVuY3Rpb24gKF9CdXR0b25UZW1wbGF0ZSkge1xuXHQgIGZ1bmN0aW9uIFBpYW5vS2V5KCkge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBpYW5vS2V5KTtcblx0XG5cdCAgICB2YXIgb3B0aW9ucyA9IFtcInZhbHVlXCIsIFwibm90ZVwiLCBcImNvbG9yXCJdO1xuXHRcblx0ICAgIHZhciBkZWZhdWx0cyA9IHtcblx0ICAgICAgc2l6ZTogWzgwLCA4MF0sXG5cdCAgICAgIHRhcmdldDogZmFsc2UsXG5cdCAgICAgIG1vZGU6IFwiYnV0dG9uXCIsXG5cdCAgICAgIHZhbHVlOiAwXG5cdCAgICB9O1xuXHRcblx0ICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKFBpYW5vS2V5LnByb3RvdHlwZSksIFwiY29uc3RydWN0b3JcIiwgdGhpcykuY2FsbCh0aGlzLCBhcmd1bWVudHMsIG9wdGlvbnMsIGRlZmF1bHRzKTtcblx0XG5cdCAgICB0aGlzLm5vdGUgPSB0aGlzLnNldHRpbmdzLm5vdGU7XG5cdCAgICB0aGlzLmNvbG9yID0gdGhpcy5zZXR0aW5ncy5jb2xvcjtcblx0XG5cdCAgICB0aGlzLmNvbG9ycyA9IHtcblx0ICAgICAgdzogXCIjZmZmXCIsXG5cdCAgICAgIGI6IFwiIzY2NlwiIH07XG5cdFxuXHQgICAgdGhpcy5pbml0KCk7XG5cdCAgICB0aGlzLnJlbmRlcigpO1xuXHQgIH1cblx0XG5cdCAgX2luaGVyaXRzKFBpYW5vS2V5LCBfQnV0dG9uVGVtcGxhdGUpO1xuXHRcblx0ICBfY3JlYXRlQ2xhc3MoUGlhbm9LZXksIHtcblx0ICAgIGJ1aWxkRnJhbWU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkRnJhbWUoKSB7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50ID0gc3ZnLmNyZWF0ZShcInN2Z1wiKTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgdGhpcy53aWR0aCk7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCB0aGlzLmhlaWdodCk7XG5cdCAgICAgICAgdGhpcy5wYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGJ1aWxkSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEludGVyZmFjZSgpIHtcblx0ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXHRcblx0ICAgICAgICB0aGlzLnBhZCA9IHN2Zy5jcmVhdGUoXCJyZWN0XCIpO1xuXHRcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5wYWQpO1xuXHRcblx0ICAgICAgICB0aGlzLmludGVyYWN0aW9uVGFyZ2V0ID0gdGhpcy5wYWQ7XG5cdFxuXHQgICAgICAgIC8qIGV2ZW50cyAqL1xuXHRcblx0ICAgICAgICBpZiAoIXRvdWNoLmV4aXN0cykge1xuXHRcblx0ICAgICAgICAgIHRoaXMuY2xpY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vICBjb25zb2xlLmxvZygnY2xpY2snKTtcblx0ICAgICAgICAgICAgX3RoaXMucGlhbm8uaW50ZXJhY3RpbmcgPSB0cnVlO1xuXHQgICAgICAgICAgICBfdGhpcy5waWFuby5wYWludGJydXNoID0gIV90aGlzLnN0YXRlO1xuXHQgICAgICAgICAgICBfdGhpcy5kb3duKF90aGlzLnBpYW5vLnBhaW50YnJ1c2gpO1xuXHQgICAgICAgICAgfTtcblx0XG5cdCAgICAgICAgICB0aGlzLnBhZC5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdmVyXCIsIGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKF90aGlzLnBpYW5vLmludGVyYWN0aW5nKSB7XG5cdCAgICAgICAgICAgICAgLy8gICAgY29uc29sZS5sb2coJ21vdXNlb3ZlcicpO1xuXHQgICAgICAgICAgICAgIF90aGlzLmRvd24oX3RoaXMucGlhbm8ucGFpbnRicnVzaCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0pO1xuXHRcblx0ICAgICAgICAgIHRoaXMubW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKF90aGlzLnBpYW5vLmludGVyYWN0aW5nKSB7XG5cdCAgICAgICAgICAgICAgLy8gIGNvbnNvbGUubG9nKCdtb3ZlJyk7XG5cdCAgICAgICAgICAgICAgX3RoaXMuYmVuZCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9O1xuXHRcblx0ICAgICAgICAgIHRoaXMucmVsZWFzZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgX3RoaXMucGlhbm8uaW50ZXJhY3RpbmcgPSBmYWxzZTtcblx0ICAgICAgICAgICAgLy8gIGNvbnNvbGUubG9nKCdyZWxlYXNlJyk7XG5cdCAgICAgICAgICAgIC8vICB0aGlzLnVwKCk7XG5cdCAgICAgICAgICB9O1xuXHQgICAgICAgICAgdGhpcy5wYWQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAoX3RoaXMucGlhbm8uaW50ZXJhY3RpbmcpIHtcblx0ICAgICAgICAgICAgICAvLyAgY29uc29sZS5sb2coJ21vdXNldXAnKTtcblx0ICAgICAgICAgICAgICBfdGhpcy51cCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9KTtcblx0ICAgICAgICAgIHRoaXMucGFkLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW91dFwiLCBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmIChfdGhpcy5waWFuby5pbnRlcmFjdGluZykge1xuXHQgICAgICAgICAgICAgIC8vICBjb25zb2xlLmxvZygnbW91c2VvdXQnKTtcblx0ICAgICAgICAgICAgICBfdGhpcy51cCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzaXplSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaXplSW50ZXJmYWNlKCkge1xuXHRcblx0ICAgICAgICAvL2xldCByYWRpdXMgPSBNYXRoLm1pbih0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSAvIDU7XG5cdCAgICAgICAgdmFyIHJhZGl1cyA9IDA7XG5cdFxuXHQgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcInhcIiwgMC41KTtcblx0ICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJ5XCIsIDAuNSk7XG5cdCAgICAgICAgaWYgKHRoaXMud2lkdGggPiAyKSB7XG5cdCAgICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCB0aGlzLndpZHRoIC0gMSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIHRoaXMud2lkdGgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5oZWlnaHQgPiAyKSB7XG5cdCAgICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgdGhpcy5oZWlnaHQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgdGhpcy5oZWlnaHQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJyeFwiLCByYWRpdXMpO1xuXHQgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcInJ5XCIsIHJhZGl1cyk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByZW5kZXI6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0ICAgICAgICBpZiAoIXRoaXMuc3RhdGUpIHtcblx0ICAgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5jb2xvcnNbdGhpcy5jb2xvcl0pO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLmFjY2VudCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBQaWFub0tleTtcblx0fSkoQnV0dG9uVGVtcGxhdGUpO1xuXHRcblx0LyoqXG5cdCogUGlhbm9cblx0KlxuXHQqIEBkZXNjcmlwdGlvbiBQaWFubyBrZXlib2FyZCBpbnRlcmZhY2Vcblx0KlxuXHQqIEBkZW1vIDxkaXYgbmV4dXMtdWk9XCJwaWFub1wiPjwvZGl2PlxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgcGlhbm8gPSBuZXcgTmV4dXMuUGlhbm8oJyN0YXJnZXQnKVxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgcGlhbm8gPSBuZXcgTmV4dXMuUGlhbm8oJyN0YXJnZXQnLHtcblx0KiAgICAgJ3NpemUnOiBbNTAwLDEyNV0sXG5cdCogICAgICdtb2RlJzogJ2J1dHRvbicsICAvLyAnYnV0dG9uJywgJ3RvZ2dsZScsIG9yICdpbXB1bHNlJ1xuXHQqICAgICAnbG93Tm90ZSc6IDI0LFxuXHQqICAgICAnaGlnaE5vdGUnOiA2MFxuXHQqIH0pXG5cdCpcblx0KiBAb3V0cHV0XG5cdCogY2hhbmdlXG5cdCogRmlyZXMgYW55IHRpbWUgYSBuZXcga2V5IGlzIHByZXNzZWQgb3IgcmVsZWFzZWQgPGJyPlxuXHQqIFRoZSBldmVudCBkYXRhIGlzIGFuIG9iamVjdCBjb250YWluaW5nIDxpPm5vdGU8L2k+IGFuZCA8aT5zdGF0ZTwvaT4gcHJvcGVydGllcy5cblx0KlxuXHQqIEBvdXRwdXRleGFtcGxlXG5cdCogcGlhbm8ub24oJ2NoYW5nZScsZnVuY3Rpb24odikge1xuXHQqICAgY29uc29sZS5sb2codik7XG5cdCogfSlcblx0KlxuXHQqL1xuXHRcblx0dmFyIFBpYW5vID0gKGZ1bmN0aW9uIChfSW50ZXJmYWNlKSB7XG5cdCAgZnVuY3Rpb24gUGlhbm8oKSB7XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUGlhbm8pO1xuXHRcblx0ICAgIHZhciBvcHRpb25zID0gW1widmFsdWVcIl07XG5cdFxuXHQgICAgdmFyIGRlZmF1bHRzID0ge1xuXHQgICAgICBzaXplOiBbNTAwLCAxMjVdLFxuXHQgICAgICBsb3dOb3RlOiAyNCxcblx0ICAgICAgaGlnaE5vdGU6IDYwLFxuXHQgICAgICBtb2RlOiBcImJ1dHRvblwiXG5cdCAgICB9O1xuXHRcblx0ICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKFBpYW5vLnByb3RvdHlwZSksIFwiY29uc3RydWN0b3JcIiwgdGhpcykuY2FsbCh0aGlzLCBhcmd1bWVudHMsIG9wdGlvbnMsIGRlZmF1bHRzKTtcblx0XG5cdCAgICB0aGlzLmtleVBhdHRlcm4gPSBbXCJ3XCIsIFwiYlwiLCBcIndcIiwgXCJiXCIsIFwid1wiLCBcIndcIiwgXCJiXCIsIFwid1wiLCBcImJcIiwgXCJ3XCIsIFwiYlwiLCBcIndcIl07XG5cdFxuXHQgICAgdGhpcy5wYWludGJydXNoID0gZmFsc2U7XG5cdFxuXHQgICAgdGhpcy5tb2RlID0gdGhpcy5zZXR0aW5ncy5tb2RlO1xuXHRcblx0ICAgIHRoaXMucmFuZ2UgPSB7XG5cdCAgICAgIGxvdzogdGhpcy5zZXR0aW5ncy5sb3dOb3RlLFxuXHQgICAgICBoaWdoOiB0aGlzLnNldHRpbmdzLmhpZ2hOb3RlXG5cdCAgICB9O1xuXHRcblx0ICAgIHRoaXMucmFuZ2Uuc2l6ZSA9IHRoaXMucmFuZ2UuaGlnaCAtIHRoaXMucmFuZ2UubG93O1xuXHRcblx0ICAgIHRoaXMua2V5cyA9IFtdO1xuXHRcblx0ICAgIHRoaXMudG9nZ2xlVG8gPSBmYWxzZTtcblx0XG5cdCAgICB0aGlzLmluaXQoKTtcblx0ICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgfVxuXHRcblx0ICBfaW5oZXJpdHMoUGlhbm8sIF9JbnRlcmZhY2UpO1xuXHRcblx0ICBfY3JlYXRlQ2xhc3MoUGlhbm8sIHtcblx0ICAgIGJ1aWxkRnJhbWU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkRnJhbWUoKSB7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmJvcmRlclJhZGl1cyA9IFwiMHB4XCI7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodCA9IFwiMTAwJVwiO1xuXHQgICAgICAgIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBidWlsZEludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIHRoaXMua2V5cyA9IFtdO1xuXHRcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmFuZ2UuaGlnaCAtIHRoaXMucmFuZ2UubG93OyBpKyspIHtcblx0XG5cdCAgICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG5cdCAgICAgICAgICB2YXIgc2NhbGVJbmRleCA9IChpICsgdGhpcy5yYW5nZS5sb3cpICUgdGhpcy5rZXlQYXR0ZXJuLmxlbmd0aDtcblx0XG5cdCAgICAgICAgICB2YXIga2V5ID0gbmV3IFBpYW5vS2V5KGNvbnRhaW5lciwge1xuXHQgICAgICAgICAgICBjb21wb25lbnQ6IHRydWUsXG5cdCAgICAgICAgICAgIG5vdGU6IGkgKyB0aGlzLnJhbmdlLmxvdyxcblx0ICAgICAgICAgICAgY29sb3I6IHRoaXMua2V5UGF0dGVybltzY2FsZUluZGV4XSxcblx0ICAgICAgICAgICAgbW9kZTogdGhpcy5tb2RlXG5cdCAgICAgICAgICB9LCB0aGlzLmtleUNoYW5nZS5iaW5kKHRoaXMsIGkgKyB0aGlzLnJhbmdlLmxvdykpO1xuXHRcblx0ICAgICAgICAgIGtleS5waWFubyA9IHRoaXM7XG5cdFxuXHQgICAgICAgICAgaWYgKHRvdWNoLmV4aXN0cykge1xuXHQgICAgICAgICAgICBrZXkucGFkLmluZGV4ID0gaTtcblx0ICAgICAgICAgICAga2V5LnByZUNsaWNrID0ga2V5LnByZU1vdmUgPSBrZXkucHJlUmVsZWFzZSA9IGZ1bmN0aW9uICgpIHt9O1xuXHQgICAgICAgICAgICBrZXkuY2xpY2sgPSBrZXkubW92ZSA9IGtleS5yZWxlYXNlID0gZnVuY3Rpb24gKCkge307XG5cdCAgICAgICAgICAgIGtleS5wcmVUb3VjaCA9IGtleS5wcmVUb3VjaE1vdmUgPSBrZXkucHJlVG91Y2hSZWxlYXNlID0gZnVuY3Rpb24gKCkge307XG5cdCAgICAgICAgICAgIGtleS50b3VjaCA9IGtleS50b3VjaE1vdmUgPSBrZXkudG91Y2hSZWxlYXNlID0gZnVuY3Rpb24gKCkge307XG5cdCAgICAgICAgICB9XG5cdFxuXHQgICAgICAgICAgdGhpcy5rZXlzLnB1c2goa2V5KTtcblx0ICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodG91Y2guZXhpc3RzKSB7XG5cdCAgICAgICAgICB0aGlzLmFkZFRvdWNoTGlzdGVuZXJzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2l6ZUludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc2l6ZUludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgdmFyIGtleVggPSAwO1xuXHRcblx0ICAgICAgICB2YXIga2V5UG9zaXRpb25zID0gW107XG5cdFxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yYW5nZS5oaWdoIC0gdGhpcy5yYW5nZS5sb3c7IGkrKykge1xuXHRcblx0ICAgICAgICAgIGtleVBvc2l0aW9ucy5wdXNoKGtleVgpO1xuXHRcblx0ICAgICAgICAgIHZhciBzY2FsZUluZGV4ID0gKGkgKyB0aGlzLnJhbmdlLmxvdykgJSB0aGlzLmtleVBhdHRlcm4ubGVuZ3RoO1xuXHQgICAgICAgICAgdmFyIG5leHRTY2FsZUluZGV4ID0gKGkgKyAxICsgdGhpcy5yYW5nZS5sb3cpICUgdGhpcy5rZXlQYXR0ZXJuLmxlbmd0aDtcblx0ICAgICAgICAgIGlmIChpICsgMSArIHRoaXMucmFuZ2UubG93ID49IHRoaXMucmFuZ2UuaGlnaCkge1xuXHQgICAgICAgICAgICBrZXlYICs9IDE7XG5cdCAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMua2V5UGF0dGVybltzY2FsZUluZGV4XSA9PT0gXCJ3XCIgJiYgdGhpcy5rZXlQYXR0ZXJuW25leHRTY2FsZUluZGV4XSA9PT0gXCJ3XCIpIHtcblx0ICAgICAgICAgICAga2V5WCArPSAxO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAga2V5WCArPSAwLjU7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBrZXlzV2lkZSA9IGtleVg7XG5cdFxuXHQgICAgICAgIC8vICBsZXQgcGFkZGluZyA9IHRoaXMud2lkdGggLyAxMjA7XG5cdCAgICAgICAgdmFyIHBhZGRpbmcgPSAxO1xuXHQgICAgICAgIHZhciBidXR0b25XaWR0aCA9ICh0aGlzLndpZHRoIC0gcGFkZGluZyAqIDIpIC8ga2V5c1dpZGU7XG5cdCAgICAgICAgdmFyIGJ1dHRvbkhlaWdodCA9ICh0aGlzLmhlaWdodCAtIHBhZGRpbmcgKiAyKSAvIDI7XG5cdFxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5rZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFxuXHQgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMua2V5c1tpXS5wYXJlbnQ7XG5cdCAgICAgICAgICBjb250YWluZXIuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdCAgICAgICAgICBjb250YWluZXIuc3R5bGUubGVmdCA9IGtleVBvc2l0aW9uc1tpXSAqIGJ1dHRvbldpZHRoICsgcGFkZGluZyArIFwicHhcIjtcblx0ICAgICAgICAgIGlmICh0aGlzLmtleXNbaV0uY29sb3IgPT09IFwid1wiKSB7XG5cdCAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50b3AgPSBwYWRkaW5nICsgXCJweFwiO1xuXHQgICAgICAgICAgICB0aGlzLmtleXNbaV0ucmVzaXplKGJ1dHRvbldpZHRoLCBidXR0b25IZWlnaHQgKiAyKTtcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS56SW5kZXggPSAxO1xuXHQgICAgICAgICAgICBjb250YWluZXIuc3R5bGUudG9wID0gcGFkZGluZyArIFwicHhcIjtcblx0ICAgICAgICAgICAgdGhpcy5rZXlzW2ldLnJlc2l6ZShidXR0b25XaWR0aCwgYnV0dG9uSGVpZ2h0ICogMS4xKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjb2xvckludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY29sb3JJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIC8vIFBpYW5vIGtleXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIHN0cm9rZSBib3JkZXJcblx0ICAgICAgICAvLyBUaGV5IGhhdmUgc3BhY2UgYmV0d2VlbiB0aGVtLCB3aGljaCBzaG93cyB0aGUgUGlhbm8gYmcgY29sb3Jcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5jb2xvcnMubWVkaXVtTGlnaHQ7XG5cdFxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5rZXlzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICB0aGlzLmtleXNbaV0uY29sb3JzID0ge1xuXHQgICAgICAgICAgICB3OiB0aGlzLmNvbG9ycy5saWdodCxcblx0ICAgICAgICAgICAgYjogdGhpcy5jb2xvcnMuZGFyayxcblx0ICAgICAgICAgICAgYWNjZW50OiB0aGlzLmNvbG9ycy5hY2NlbnQsXG5cdCAgICAgICAgICAgIGJvcmRlcjogdGhpcy5jb2xvcnMubWVkaXVtTGlnaHRcblx0ICAgICAgICAgIH07XG5cdCAgICAgICAgICB0aGlzLmtleXNbaV0uY29sb3JJbnRlcmZhY2UoKTtcblx0ICAgICAgICAgIHRoaXMua2V5c1tpXS5yZW5kZXIoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBrZXlDaGFuZ2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGtleUNoYW5nZShub3RlLCBvbikge1xuXHQgICAgICAgIC8vIGVtaXQgZGF0YSBmb3IgYW55IGtleSB0dXJuaW5nIG9uL29mZlxuXHQgICAgICAgIC8vIFwibm90ZVwiIGlzIHRoZSBub3RlIHZhbHVlXG5cdCAgICAgICAgLy8gXCJvblwiIGlzIGEgYm9vbGVhbiB3aGV0aGVyIGl0IGlzIG9uIG9yIG9mZlxuXHQgICAgICAgIC8vIGluIGFmdGVydG91Y2ggbW9kZSwgXCJvbjogaXMgYW4gb2JqZWN0IHdpdGggc3RhdGUveC95IHByb3BlcnRpZXNcblx0ICAgICAgICB2YXIgZGF0YSA9IHtcblx0ICAgICAgICAgIG5vdGU6IG5vdGVcblx0ICAgICAgICB9O1xuXHQgICAgICAgIGlmICh0eXBlb2Ygb24gPT09IFwib2JqZWN0XCIpIHtcblx0ICAgICAgICAgIGRhdGEuc3RhdGUgPSBvbi5zdGF0ZTtcblx0ICAgICAgICAgIC8vICBkYXRhLnggPSBvbi54XG5cdCAgICAgICAgICAvLyAgZGF0YS55ID0gb24ueVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICBkYXRhLnN0YXRlID0gb247XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCBkYXRhKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlbmRlcjoge1xuXHRcblx0ICAgICAgLyogZHJhZyhub3RlLG9uKSB7XG5cdCAgICAgICAgdGhpcy5lbWl0KCdjaGFuZ2UnLHtcblx0ICAgICAgICAgIG5vdGU6IG5vdGUsXG5cdCAgICAgICAgICBzdGF0ZTogb25cblx0ICAgICAgICB9KTtcblx0ICAgICAgfSAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHt9XG5cdCAgICB9LFxuXHQgICAgYWRkVG91Y2hMaXN0ZW5lcnM6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFRvdWNoTGlzdGVuZXJzKCkge1xuXHQgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cdFxuXHQgICAgICAgIHRoaXMucHJlQ2xpY2sgPSB0aGlzLnByZU1vdmUgPSB0aGlzLnByZVJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7fTtcblx0ICAgICAgICB0aGlzLmNsaWNrID0gdGhpcy5tb3ZlID0gdGhpcy5yZWxlYXNlID0gZnVuY3Rpb24gKCkge307XG5cdCAgICAgICAgdGhpcy5wcmVUb3VjaCA9IHRoaXMucHJlVG91Y2hNb3ZlID0gdGhpcy5wcmVUb3VjaFJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7fTtcblx0ICAgICAgICB0aGlzLnRvdWNoID0gdGhpcy50b3VjaE1vdmUgPSB0aGlzLnRvdWNoUmVsZWFzZSA9IGZ1bmN0aW9uICgpIHt9O1xuXHRcblx0ICAgICAgICB0aGlzLmN1cnJlbnRFbGVtZW50ID0gZmFsc2U7XG5cdFxuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLCBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgY29uc29sZS5sb2coXCJ0b3VjaHN0YXJ0XCIpO1xuXHQgICAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGUudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRYLCBlLnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WSk7XG5cdCAgICAgICAgICB2YXIga2V5ID0gX3RoaXMua2V5c1tlbGVtZW50LmluZGV4XTtcblx0ICAgICAgICAgIF90aGlzLnBhaW50YnJ1c2ggPSAha2V5LnN0YXRlO1xuXHQgICAgICAgICAga2V5LmRvd24oX3RoaXMucGFpbnRicnVzaCk7XG5cdCAgICAgICAgICBfdGhpcy5jdXJyZW50RWxlbWVudCA9IGVsZW1lbnQuaW5kZXg7XG5cdCAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cdCAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHQgICAgICAgIH0pO1xuXHRcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLCBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGUudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRYLCBlLnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WSk7XG5cdCAgICAgICAgICB2YXIga2V5ID0gX3RoaXMua2V5c1tlbGVtZW50LmluZGV4XTtcblx0ICAgICAgICAgIGlmIChlbGVtZW50LmluZGV4ICE9PSBfdGhpcy5jdXJyZW50RWxlbWVudCkge1xuXHQgICAgICAgICAgICBpZiAoX3RoaXMuY3VycmVudEVsZW1lbnQpIHtcblx0ICAgICAgICAgICAgICB2YXIgcGFzdEtleSA9IF90aGlzLmtleXNbX3RoaXMuY3VycmVudEVsZW1lbnRdO1xuXHQgICAgICAgICAgICAgIHBhc3RLZXkudXAoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBrZXkuZG93bihfdGhpcy5wYWludGJydXNoKTtcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGtleS5iZW5kKCk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgICBfdGhpcy5jdXJyZW50RWxlbWVudCA9IGVsZW1lbnQuaW5kZXg7XG5cdCAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cdCAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHQgICAgICAgIH0pO1xuXHRcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAvLyBubyB0b3VjaGVzIHRvIGNhbGN1bGF0ZSBiZWNhdXNlIG5vbmUgcmVtYWluaW5nXG5cdCAgICAgICAgICB2YXIga2V5ID0gX3RoaXMua2V5c1tfdGhpcy5jdXJyZW50RWxlbWVudF07XG5cdCAgICAgICAgICBrZXkudXAoKTtcblx0ICAgICAgICAgIF90aGlzLmludGVyYWN0aW5nID0gZmFsc2U7XG5cdCAgICAgICAgICBfdGhpcy5jdXJyZW50RWxlbWVudCA9IGZhbHNlO1xuXHQgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNldFJhbmdlOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgRGVmaW5lIHRoZSBwaXRjaCByYW5nZSAobG93ZXN0IGFuZCBoaWdoZXN0IG5vdGUpIG9mIHRoZSBwaWFubyBrZXlib2FyZC5cblx0ICAgICAgQHBhcmFtIGxvdyB7bnVtYmVyfSBNSURJIG5vdGUgdmFsdWUgb2YgdGhlIGxvd2VzdCBub3RlIG9uIHRoZSBrZXlib2FyZFxuXHQgICAgICBAcGFyYW0gaGlnaCB7bnVtYmVyfSBNSURJIG5vdGUgdmFsdWUgb2YgdGhlIGhpZ2hlc3Qgbm90ZSBvbiB0aGUga2V5Ym9hcmRcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRSYW5nZShsb3csIGhpZ2gpIHtcblx0ICAgICAgICB0aGlzLnJhbmdlLmxvdyA9IGxvdztcblx0ICAgICAgICB0aGlzLnJhbmdlLmhpZ2ggPSBoaWdoO1xuXHQgICAgICAgIHRoaXMuZW1wdHkoKTtcblx0ICAgICAgICB0aGlzLmJ1aWxkSW50ZXJmYWNlKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICB0b2dnbGVLZXk6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBUdXJuIGEga2V5IG9uIG9yIG9mZiB1c2luZyBpdHMgTUlESSBub3RlIHZhbHVlO1xuXHQgICAgICBAcGFyYW0gbm90ZSB7bnVtYmVyfSBNSURJIG5vdGUgdmFsdWUgb2YgdGhlIGtleSB0byBjaGFuZ2Vcblx0ICAgICAgQHBhcmFtIG9uIHtib29sZWFufSBXaGV0aGVyIHRoZSBub3RlIHNob3VsZCB0dXJuIG9uIG9yIG9mZlxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRvZ2dsZUtleShub3RlLCBvbikge1xuXHQgICAgICAgIHRoaXMua2V5c1tub3RlIC0gdGhpcy5yYW5nZS5sb3ddLmZsaXAob24pO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgdG9nZ2xlSW5kZXg6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBUdXJuIGEga2V5IG9uIG9yIG9mZiB1c2luZyBpdHMga2V5IGluZGV4IG9uIHRoZSBwaWFubyBpbnRlcmZhY2UuXG5cdCAgICAgIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBJbmRleCBvZiB0aGUga2V5IHRvIGNoYW5nZVxuXHQgICAgICBAcGFyYW0gb24ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIG5vdGUgc2hvdWxkIHR1cm4gb24gb3Igb2ZmXG5cdCAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gdG9nZ2xlSW5kZXgoaW5kZXgsIG9uKSB7XG5cdCAgICAgICAgdGhpcy5rZXlzW2luZGV4XS5mbGlwKG9uKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pO1xuXHRcblx0ICByZXR1cm4gUGlhbm87XG5cdH0pKEludGVyZmFjZSk7XG5cdFxuXHRtb2R1bGUuZXhwb3J0cyA9IFBpYW5vO1xuXHRcblx0Ly8gbG9vcCB0aHJvdWdoIGFuZCByZW5kZXIgdGhlIGtleXM/XG5cbi8qKiovIH0pLFxuLyogMjQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7IH0gfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gZGVzYyAmJiBkZXNjLndyaXRhYmxlKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfTtcblx0XG5cdHZhciBfaW5oZXJpdHMgPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBzdmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXHR2YXIgZG9tID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcblx0dmFyIEludGVyZmFjZSA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5cdHZhciBCdXR0b25UZW1wbGF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xuXHR2YXIgTWF0cml4TW9kZWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcblx0dmFyIENvdW50ZXJNb2RlbCA9IF9fd2VicGFja19yZXF1aXJlX18oMjgpO1xuXHR2YXIgdG91Y2ggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xuXHRcblx0dmFyIE1hdHJpeENlbGwgPSAoZnVuY3Rpb24gKF9CdXR0b25UZW1wbGF0ZSkge1xuXHQgIGZ1bmN0aW9uIE1hdHJpeENlbGwoKSB7XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTWF0cml4Q2VsbCk7XG5cdFxuXHQgICAgdmFyIG9wdGlvbnMgPSBbXCJ2YWx1ZVwiXTtcblx0XG5cdCAgICB2YXIgZGVmYXVsdHMgPSB7XG5cdCAgICAgIHNpemU6IFs4MCwgODBdLFxuXHQgICAgICB0YXJnZXQ6IGZhbHNlLFxuXHQgICAgICBtb2RlOiBcInRvZ2dsZVwiLFxuXHQgICAgICB2YWx1ZTogMFxuXHQgICAgfTtcblx0XG5cdCAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihNYXRyaXhDZWxsLnByb3RvdHlwZSksIFwiY29uc3RydWN0b3JcIiwgdGhpcykuY2FsbCh0aGlzLCBhcmd1bWVudHMsIG9wdGlvbnMsIGRlZmF1bHRzKTtcblx0XG5cdCAgICB0aGlzLmluZGV4ID0gdGhpcy5zZXR0aW5ncy5pbmRleDtcblx0ICAgIHRoaXMucm93ID0gdGhpcy5zZXR0aW5ncy5yb3c7XG5cdCAgICB0aGlzLmNvbHVtbiA9IHRoaXMuc2V0dGluZ3MuY29sdW1uO1xuXHRcblx0ICAgIHRoaXMubWF0cml4ID0gdGhpcy5zZXR0aW5ncy5tYXRyaXg7XG5cdFxuXHQgICAgdGhpcy5pbnRlcmFjdGluZyA9IGZhbHNlO1xuXHQgICAgdGhpcy5wYWludGJydXNoID0gZmFsc2U7XG5cdFxuXHQgICAgdGhpcy5pbml0KCk7XG5cdCAgICB0aGlzLnJlbmRlcigpO1xuXHQgIH1cblx0XG5cdCAgX2luaGVyaXRzKE1hdHJpeENlbGwsIF9CdXR0b25UZW1wbGF0ZSk7XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhNYXRyaXhDZWxsLCB7XG5cdCAgICBidWlsZEZyYW1lOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEZyYW1lKCkge1xuXHQgICAgICAgIHRoaXMuZWxlbWVudCA9IHN2Zy5jcmVhdGUoXCJzdmdcIik7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIHRoaXMud2lkdGgpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgdGhpcy5oZWlnaHQpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS50b3AgPSBcIjBweFwiO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdCAgICAgICAgdGhpcy5wYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGJ1aWxkSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEludGVyZmFjZSgpIHtcblx0ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXHRcblx0ICAgICAgICB0aGlzLnBhZCA9IHN2Zy5jcmVhdGUoXCJyZWN0XCIpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnBhZCk7XG5cdFxuXHQgICAgICAgIHRoaXMuaW50ZXJhY3Rpb25UYXJnZXQgPSB0aGlzLnBhZDtcblx0XG5cdCAgICAgICAgLyogZXZlbnRzICovXG5cdFxuXHQgICAgICAgIGlmICghdG91Y2guZXhpc3RzKSB7XG5cdFxuXHQgICAgICAgICAgdGhpcy5jbGljayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgX3RoaXMubWF0cml4LmludGVyYWN0aW5nID0gdHJ1ZTtcblx0ICAgICAgICAgICAgX3RoaXMubWF0cml4LnBhaW50YnJ1c2ggPSAhX3RoaXMuc3RhdGU7XG5cdCAgICAgICAgICAgIF90aGlzLmRvd24oX3RoaXMubWF0cml4LnBhaW50YnJ1c2gpO1xuXHQgICAgICAgICAgfTtcblx0ICAgICAgICAgIHRoaXMucGFkLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAoX3RoaXMubWF0cml4LmludGVyYWN0aW5nKSB7XG5cdCAgICAgICAgICAgICAgX3RoaXMuZG93bihfdGhpcy5tYXRyaXgucGFpbnRicnVzaCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0pO1xuXHRcblx0ICAgICAgICAgIHRoaXMubW92ZSA9IGZ1bmN0aW9uICgpIHt9O1xuXHQgICAgICAgICAgdGhpcy5wYWQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgICBpZiAoX3RoaXMubWF0cml4LmludGVyYWN0aW5nKSB7XG5cdCAgICAgICAgICAgICAgaWYgKCFfdGhpcy5vZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgIF90aGlzLm9mZnNldCA9IGRvbS5maW5kUG9zaXRpb24oX3RoaXMuZWxlbWVudCk7XG5cdCAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgIF90aGlzLm1vdXNlID0gZG9tLmxvY2F0ZU1vdXNlKGUsIF90aGlzLm9mZnNldCk7XG5cdCAgICAgICAgICAgICAgX3RoaXMuYmVuZCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9KTtcblx0XG5cdCAgICAgICAgICB0aGlzLnJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIF90aGlzLm1hdHJpeC5pbnRlcmFjdGluZyA9IGZhbHNlO1xuXHQgICAgICAgICAgfTtcblx0ICAgICAgICAgIHRoaXMucGFkLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKF90aGlzLm1hdHJpeC5pbnRlcmFjdGluZykge1xuXHQgICAgICAgICAgICAgIF90aGlzLnVwKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgdGhpcy5wYWQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3V0XCIsIGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKF90aGlzLm1hdHJpeC5pbnRlcmFjdGluZykge1xuXHQgICAgICAgICAgICAgIF90aGlzLnVwKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNpemVJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNpemVJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcInhcIiwgMSk7XG5cdCAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwieVwiLCAxKTtcblx0ICAgICAgICBpZiAodGhpcy53aWR0aCA+IDIpIHtcblx0ICAgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIHRoaXMud2lkdGggLSAyKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgdGhpcy53aWR0aCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLmhlaWdodCA+IDIpIHtcblx0ICAgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCB0aGlzLmhlaWdodCAtIDIpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgdGhpcy5oZWlnaHQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3RoaXMucGFkLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgdGhpcy5oZWlnaHQgLSAyKTtcblx0ICAgICAgICB0aGlzLnBhZC5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMubWF0cml4LmNvbG9ycy5maWxsKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlbmRlcjoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHQgICAgICAgIGlmICghdGhpcy5zdGF0ZSkge1xuXHQgICAgICAgICAgdGhpcy5wYWQuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLm1hdHJpeC5jb2xvcnMuZmlsbCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMucGFkLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5tYXRyaXguY29sb3JzLmFjY2VudCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBNYXRyaXhDZWxsO1xuXHR9KShCdXR0b25UZW1wbGF0ZSk7XG5cdFxuXHQvKipcblx0KiBTZXF1ZW5jZXJcblx0KlxuXHQqIEBkZXNjcmlwdGlvbiBHcmlkIG9mIGJ1dHRvbnMgd2l0aCBidWlsdC1pbiBzdGVwIHNlcXVlbmNlci5cblx0KlxuXHQqIEBkZW1vIDxkaXYgbmV4dXMtdWk9XCJzZXF1ZW5jZXJcIiBzdHlsZT1cIndpZHRoOjQwMHB4O2hlaWdodDoyMDBweDtcIj48L2Rpdj5cblx0KlxuXHQqIEBleGFtcGxlXG5cdCogdmFyIHNlcXVlbmNlciA9IG5ldyBOZXh1cy5TZXF1ZW5jZXIoJyN0YXJnZXQnKVxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgc2VxdWVuY2VyID0gbmV3IE5leHVzLlNlcXVlbmNlcignI3RhcmdldCcse1xuXHQqICAnc2l6ZSc6IFs0MDAsMjAwXSxcblx0KiAgJ21vZGUnOiAndG9nZ2xlJyxcblx0KiAgJ3Jvd3MnOiA1LFxuXHQqICAnY29sdW1ucyc6IDEwXG5cdCp9KVxuXHQqXG5cdCogQG91dHB1dFxuXHQqIGNoYW5nZVxuXHQqIEZpcmVzIGFueSB0aW1lIHRoZSBpbnRlcmZhY2UncyBtYXRyaXggY2hhbmdlcy4gPGJyPlxuXHQqIFRoZSBldmVudCBkYXRhIGlzIGFuIG9iamVjdCBjb250YWluaW5nIDxpPnJvdzwvaT4gKG51bWJlciksIDxpPmNvbHVtbjwvaT4gKG51bWJlciksIGFuZCA8aT5zdGF0ZTwvaT4gKGJvb2xlYW4pIHByb3BlcnRpZXMuXG5cdCpcblx0KiBAb3V0cHV0ZXhhbXBsZVxuXHQqIHNlcXVlbmNlci5vbignY2hhbmdlJyxmdW5jdGlvbih2KSB7XG5cdCogICBjb25zb2xlLmxvZyh2KTtcblx0KiB9KVxuXHQqXG5cdCogQG91dHB1dFxuXHQqIHN0ZXBcblx0KiBGaXJlcyBhbnkgdGltZSB0aGUgc2VxdWVuY2VyIHN0ZXBzIHRvIHRoZSBuZXh0IGNvbHVtbiwgaW4gc2VxdWVjZSBtb2RlLiA8YnI+XG5cdCogVGhlIGV2ZW50IGRhdGEgaXMgYW4gPGk+YXJyYXk8L2k+IGNvbnRhaW5pbmcgYWxsIHZhbHVlcyBpbiB0aGUgY29sdW1uLCA8aT5ib3R0b20gcm93IGZpcnN0PC9pPi5cblx0KlxuXHQqIEBvdXRwdXRleGFtcGxlXG5cdCogc2VxdWVuY2VyLm9uKCdzdGVwJyxmdW5jdGlvbih2KSB7XG5cdCogICBjb25zb2xlLmxvZyh2KTtcblx0KiB9KVxuXHQqL1xuXHRcblx0dmFyIFNlcXVlbmNlciA9IChmdW5jdGlvbiAoX0ludGVyZmFjZSkge1xuXHQgIGZ1bmN0aW9uIFNlcXVlbmNlcigpIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTZXF1ZW5jZXIpO1xuXHRcblx0ICAgIHZhciBvcHRpb25zID0gW1widmFsdWVcIl07XG5cdFxuXHQgICAgdmFyIGRlZmF1bHRzID0ge1xuXHQgICAgICBzaXplOiBbNDAwLCAyMDBdLFxuXHQgICAgICBtb2RlOiBcInRvZ2dsZVwiLFxuXHQgICAgICByb3dzOiA1LFxuXHQgICAgICBjb2x1bW5zOiAxMFxuXHQgICAgfTtcblx0XG5cdCAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihTZXF1ZW5jZXIucHJvdG90eXBlKSwgXCJjb25zdHJ1Y3RvclwiLCB0aGlzKS5jYWxsKHRoaXMsIGFyZ3VtZW50cywgb3B0aW9ucywgZGVmYXVsdHMpO1xuXHRcblx0ICAgIHRoaXMuYWN0aXZlID0gLTE7XG5cdFxuXHQgICAgLyoqXG5cdCAgICAqIEJ1dHRvbiBpbnRlcmFjdGlvbiBtb2RlOiBzZWUgQnV0dG9uXG5cdCAgICAqIEB0eXBlIHtzdHJpbmd9XG5cdCAgICAqIEBleGFtcGxlIGJ1dHRvbi5tb2RlID0gJ3RvZ2dsZSc7XG5cdCAgICAqL1xuXHQgICAgdGhpcy5tb2RlID0gdGhpcy5zZXR0aW5ncy5tb2RlO1xuXHRcblx0ICAgIC8qKlxuXHQgICAgKiBUaGUgaW50ZXJ2YWwgb2JqZWN0IHdoaWNoIGNvbnRyb2xzIHRpbWluZyBhbmQgc2VxdWVuY2Ugc2NoZWR1bGluZy5cblx0ICAgICogQHR5cGUge2ludGVydmFsfVxuXHQgICAgKi9cblx0ICAgIHRoaXMuaW50ZXJ2YWwgPSBuZXcgTmV4dXMuSW50ZXJ2YWwoMjAwLCBmdW5jdGlvbiAoKSB7fSwgZmFsc2UpOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblx0XG5cdCAgICAvKipcblx0ICAgICogQSBNYXRyaXggbW9kZWwgY29udGFpbmluZyBtZXRob2RzIGZvciBtYW5pcHVsYXRpbmcgdGhlIHNlcXVlbmNlcidzIGFycmF5IG9mIHZhbHVlcy4gVG8gbGVhcm4gaG93IHRvIG1hbmlwdWxhdGUgdGhlIG1hdHJpeCwgcmVhZCBhYm91dCB0aGUgbWF0cml4IG1vZGVsLlxuXHQgICAgKiBAdHlwZSB7bWF0cml4fVxuXHQgICAgKi9cblx0ICAgIHRoaXMubWF0cml4ID0gbmV3IE1hdHJpeE1vZGVsKHRoaXMuc2V0dGluZ3Mucm93cywgdGhpcy5zZXR0aW5ncy5jb2x1bW5zKTtcblx0ICAgIHRoaXMubWF0cml4LnVpID0gdGhpcztcblx0XG5cdCAgICAvKipcblx0ICAgICogQSBDb3VudGVyIG1vZGVsIHdoaWNoIHRoZSBzZXF1ZW5jZXIgc3RlcHMgdGhyb3VnaC4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCB1c2UgdGhpcyBtb2RlbCB0byBzdGVwIHRocm91Z2ggdGhlIHNlcXVlbmNlciBpbiByZXZlcnNlLCByYW5kb21seSwgb3IgaW4gYSBkcnVuayB3YWxrLlxuXHQgICAgKiBAdHlwZSB7Y291bnRlcn1cblx0ICAgICovXG5cdCAgICB0aGlzLnN0ZXBwZXIgPSBuZXcgQ291bnRlck1vZGVsKDAsIHRoaXMuY29sdW1ucyk7XG5cdFxuXHQgICAgdGhpcy5pbml0KCk7XG5cdCAgfVxuXHRcblx0ICBfaW5oZXJpdHMoU2VxdWVuY2VyLCBfSW50ZXJmYWNlKTtcblx0XG5cdCAgX2NyZWF0ZUNsYXNzKFNlcXVlbmNlciwge1xuXHQgICAgYnVpbGRGcmFtZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRGcmFtZSgpIHtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gXCIxMDAlXCI7XG5cdCAgICAgICAgdGhpcy5wYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTtcblx0ICAgICAgICBpZiAodG91Y2guZXhpc3RzKSB7XG5cdCAgICAgICAgICB0aGlzLmFkZFRvdWNoTGlzdGVuZXJzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgYnVpbGRJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkSW50ZXJmYWNlKCkge1xuXHRcblx0ICAgICAgICB0aGlzLmNlbGxzID0gW107XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1hdHJpeC5sZW5ndGg7IGkrKykge1xuXHRcblx0ICAgICAgICAgIHZhciBfbG9jYXRpb24gPSB0aGlzLm1hdHJpeC5sb2NhdGUoaSk7XG5cdCAgICAgICAgICAvLyByZXR1cm5zIHtyb3csY29sfVxuXHRcblx0ICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcblx0ICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblx0XG5cdCAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBNYXRyaXhDZWxsKGNvbnRhaW5lciwge1xuXHQgICAgICAgICAgICBjb21wb25lbnQ6IHRydWUsXG5cdCAgICAgICAgICAgIGluZGV4OiBpLFxuXHQgICAgICAgICAgICByb3c6IF9sb2NhdGlvbi5yb3csXG5cdCAgICAgICAgICAgIGNvbHVtbjogX2xvY2F0aW9uLmNvbHVtbixcblx0ICAgICAgICAgICAgbW9kZTogdGhpcy5tb2RlLFxuXHQgICAgICAgICAgICBtYXRyaXg6IHRoaXNcblx0ICAgICAgICAgIH0sIHRoaXMua2V5Q2hhbmdlLmJpbmQodGhpcywgaSkpO1xuXHRcblx0ICAgICAgICAgIC8vICBjZWxsLm1hdHJpeCA9IHRoaXM7XG5cdCAgICAgICAgICBpZiAodG91Y2guZXhpc3RzKSB7XG5cdCAgICAgICAgICAgIGNlbGwucGFkLmluZGV4ID0gaTtcblx0ICAgICAgICAgICAgY2VsbC5wcmVDbGljayA9IGNlbGwucHJlTW92ZSA9IGNlbGwucHJlUmVsZWFzZSA9IGZ1bmN0aW9uICgpIHt9O1xuXHQgICAgICAgICAgICBjZWxsLmNsaWNrID0gY2VsbC5tb3ZlID0gY2VsbC5yZWxlYXNlID0gZnVuY3Rpb24gKCkge307XG5cdCAgICAgICAgICAgIGNlbGwucHJlVG91Y2ggPSBjZWxsLnByZVRvdWNoTW92ZSA9IGNlbGwucHJlVG91Y2hSZWxlYXNlID0gZnVuY3Rpb24gKCkge307XG5cdCAgICAgICAgICAgIGNlbGwudG91Y2ggPSBjZWxsLnRvdWNoTW92ZSA9IGNlbGwudG91Y2hSZWxlYXNlID0gZnVuY3Rpb24gKCkge307XG5cdCAgICAgICAgICB9XG5cdFxuXHQgICAgICAgICAgdGhpcy5jZWxscy5wdXNoKGNlbGwpO1xuXHQgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuc2l6ZUludGVyZmFjZSgpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2l6ZUludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc2l6ZUludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgdmFyIGNlbGxXaWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLmNvbHVtbnM7XG5cdCAgICAgICAgdmFyIGNlbGxIZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucm93cztcblx0XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICB2YXIgY29udGFpbmVyID0gdGhpcy5jZWxsc1tpXS5wYXJlbnQ7XG5cdCAgICAgICAgICBjb250YWluZXIuc3R5bGUubGVmdCA9IHRoaXMuY2VsbHNbaV0uY29sdW1uICogY2VsbFdpZHRoICsgXCJweFwiO1xuXHQgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnRvcCA9IHRoaXMuY2VsbHNbaV0ucm93ICogY2VsbEhlaWdodCArIFwicHhcIjtcblx0ICAgICAgICAgIHRoaXMuY2VsbHNbaV0ucmVzaXplKGNlbGxXaWR0aCwgY2VsbEhlaWdodCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29sb3JJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbG9ySW50ZXJmYWNlKCkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jZWxscy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgdGhpcy5jZWxsc1tpXS5yZW5kZXIoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICB1cGRhdGU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcblx0ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXHRcblx0ICAgICAgICAvLyAgY29uc29sZS5sb2coXCJ1cGRhdGluZy4uLlwiKVxuXHQgICAgICAgIC8vb24gPSBvbiB8fCBmYWxzZTtcblx0ICAgICAgICB0aGlzLm1hdHJpeC5pdGVyYXRlKGZ1bmN0aW9uIChyLCBjLCBpKSB7XG5cdCAgICAgICAgICAvLyAgY29uc29sZS5sb2codGhpcy5tYXRyaXgucGF0dGVybltyXVtjXSwgdGhpcy5jZWxsc1tpXS5zdGF0ZSk7XG5cdCAgICAgICAgICBpZiAoX3RoaXMubWF0cml4LnBhdHRlcm5bcl1bY10gIT09IF90aGlzLmNlbGxzW2ldLnN0YXRlKSB7XG5cdCAgICAgICAgICAgIGlmIChfdGhpcy5tYXRyaXgucGF0dGVybltyXVtjXSA+IDApIHtcblx0ICAgICAgICAgICAgICBfdGhpcy5jZWxsc1tpXS50dXJuT24oKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICBfdGhpcy5jZWxsc1tpXS50dXJuT2ZmKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGtleUNoYW5nZToge1xuXHRcblx0ICAgICAgLy8gdXBkYXRlID0+IGNlbGwudHVybk9uID0+IGNlbGwuZW1pdCA9PiBrZXlDaGFuZ2UgKHNlcS5lbWl0KSA9PiBtYXRyaXguc2V0LmNlbGwgPT4gdXBkYXRlXG5cdCAgICAgIC8vXG5cdCAgICAgIC8vIGludGVyYWN0aW9uID0+IGtleUNoYW5nZSA9PiBtYXRyaXguc2V0LmNlbGwgPT4gdXBkYXRlID0+IGNlbGwudHVybk9uXG5cdCAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gZW1pdFxuXHQgICAgICAvL1xuXHQgICAgICAvLyBzZXQuY2VsbCA9PiB1cGRhdGUgPT4gbmVlZHMgdG8gZW1pdC5cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBrZXlDaGFuZ2Uobm90ZSwgb24pIHtcblx0ICAgICAgICAvLyBlbWl0IGRhdGEgZm9yIGFueSBrZXkgdHVybmluZyBvbi9vZmZcblx0ICAgICAgICAvLyBpIGlzIHRoZSBub3RlIGluZGV4XG5cdCAgICAgICAgLy8gdiBpcyB3aGV0aGVyIGl0IGlzIG9uIG9yIG9mZlxuXHQgICAgICAgIHZhciBjZWxsID0gdGhpcy5tYXRyaXgubG9jYXRlKG5vdGUpO1xuXHQgICAgICAgIC8vICB0aGlzLm1hdHJpeC5zZXQuY2VsbChjZWxsLmNvbHVtbixjZWxsLnJvdyxvbik7XG5cdCAgICAgICAgdGhpcy5tYXRyaXgucGF0dGVybltjZWxsLnJvd11bY2VsbC5jb2x1bW5dID0gb247XG5cdCAgICAgICAgdmFyIGRhdGEgPSB7XG5cdCAgICAgICAgICByb3c6IGNlbGwucm93LFxuXHQgICAgICAgICAgY29sdW1uOiBjZWxsLmNvbHVtbixcblx0ICAgICAgICAgIHN0YXRlOiBvblxuXHQgICAgICAgIH07XG5cdCAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIGRhdGEpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVuZGVyOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdCAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblx0XG5cdCAgICAgICAgaWYgKHRoaXMuc3RlcHBlci52YWx1ZSA+PSAwKSB7XG5cdCAgICAgICAgICB0aGlzLm1hdHJpeC5pdGVyYXRlKGZ1bmN0aW9uIChyLCBjLCBpKSB7XG5cdCAgICAgICAgICAgIGlmIChjID09PSBfdGhpcy5zdGVwcGVyLnZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgX3RoaXMuY2VsbHNbaV0ucGFkLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCBfdGhpcy5jb2xvcnMubWVkaXVtTGlnaHQpO1xuXHQgICAgICAgICAgICAgIF90aGlzLmNlbGxzW2ldLnBhZC5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIiwgXCIxXCIpO1xuXHQgICAgICAgICAgICAgIF90aGlzLmNlbGxzW2ldLnBhZC5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utb3BhY2l0eVwiLCBcIjFcIik7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgX3RoaXMuY2VsbHNbaV0ucGFkLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCBcIm5vbmVcIik7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHN0YXJ0OiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgICogU3RhcnQgc2VxdWVuY2luZ1xuXHQgICAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IG1zIEJlYXQgdGVtcG8gaW4gbWlsbGlzZWNvbmRzXG5cdCAgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN0YXJ0KG1zKSB7XG5cdCAgICAgICAgdGhpcy5pbnRlcnZhbC5ldmVudCA9IHRoaXMubmV4dC5iaW5kKHRoaXMpO1xuXHQgICAgICAgIGlmIChtcykge1xuXHQgICAgICAgICAgdGhpcy5pbnRlcnZhbC5tcyhtcyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuaW50ZXJ2YWwuc3RhcnQoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHN0b3A6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBTdG9wIHNlcXVlbmNpbmdcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzdG9wKCkge1xuXHQgICAgICAgIHRoaXMuaW50ZXJ2YWwuc3RvcCgpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbmV4dDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIE1hbnVhbGx5IGp1bXAgdG8gdGhlIG5leHQgY29sdW1uIGFuZCB0cmlnZ2VyIHRoZSAnY2hhbmdlJyBldmVudC4gVGhlIFwibmV4dFwiIGNvbHVtbiBpcyBkZXRlcm1pbmVkIGJ5IHlvdXIgbW9kZSBvZiBzZXF1ZW5jaW5nLlxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIG5leHQoKSB7XG5cdCAgICAgICAgdGhpcy5zdGVwcGVyLm5leHQoKTtcblx0ICAgICAgICB0aGlzLmVtaXQoXCJzdGVwXCIsIHRoaXMubWF0cml4LmNvbHVtbih0aGlzLnN0ZXBwZXIudmFsdWUpLnJldmVyc2UoKSk7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGFkZFRvdWNoTGlzdGVuZXJzOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRUb3VjaExpc3RlbmVycygpIHtcblx0ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXHRcblx0ICAgICAgICB0aGlzLnByZUNsaWNrID0gdGhpcy5wcmVNb3ZlID0gdGhpcy5wcmVSZWxlYXNlID0gZnVuY3Rpb24gKCkge307XG5cdCAgICAgICAgdGhpcy5jbGljayA9IHRoaXMubW92ZSA9IHRoaXMucmVsZWFzZSA9IGZ1bmN0aW9uICgpIHt9O1xuXHQgICAgICAgIHRoaXMucHJlVG91Y2ggPSB0aGlzLnByZVRvdWNoTW92ZSA9IHRoaXMucHJlVG91Y2hSZWxlYXNlID0gZnVuY3Rpb24gKCkge307XG5cdCAgICAgICAgdGhpcy50b3VjaCA9IHRoaXMudG91Y2hNb3ZlID0gdGhpcy50b3VjaFJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7fTtcblx0XG5cdCAgICAgICAgdGhpcy5jdXJyZW50RWxlbWVudCA9IGZhbHNlO1xuXHRcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIiwgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WCwgZS50YXJnZXRUb3VjaGVzWzBdLmNsaWVudFkpO1xuXHQgICAgICAgICAgdmFyIGNlbGwgPSBfdGhpcy5jZWxsc1tlbGVtZW50LmluZGV4XTtcblx0ICAgICAgICAgIF90aGlzLnBhaW50YnJ1c2ggPSAhY2VsbC5zdGF0ZTtcblx0ICAgICAgICAgIGNlbGwuZG93bihfdGhpcy5wYWludGJydXNoKTtcblx0ICAgICAgICAgIF90aGlzLmN1cnJlbnRFbGVtZW50ID0gZWxlbWVudC5pbmRleDtcblx0ICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblx0ICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdCAgICAgICAgfSk7XG5cdFxuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsIGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZS50YXJnZXRUb3VjaGVzWzBdLmNsaWVudFgsIGUudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRZKTtcblx0ICAgICAgICAgIHZhciBjZWxsID0gX3RoaXMuY2VsbHNbZWxlbWVudC5pbmRleF07XG5cdCAgICAgICAgICBpZiAoZWxlbWVudC5pbmRleCAhPT0gX3RoaXMuY3VycmVudEVsZW1lbnQpIHtcblx0ICAgICAgICAgICAgaWYgKF90aGlzLmN1cnJlbnRFbGVtZW50ID49IDApIHtcblx0ICAgICAgICAgICAgICB2YXIgcGFzdENlbGwgPSBfdGhpcy5jZWxsc1tfdGhpcy5jdXJyZW50RWxlbWVudF07XG5cdCAgICAgICAgICAgICAgcGFzdENlbGwudXAoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBjZWxsLmRvd24oX3RoaXMucGFpbnRicnVzaCk7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBjZWxsLmJlbmQoKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIF90aGlzLmN1cnJlbnRFbGVtZW50ID0gZWxlbWVudC5pbmRleDtcblx0ICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblx0ICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdCAgICAgICAgfSk7XG5cdFxuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgIC8vIG5vIHRvdWNoZXMgdG8gY2FsY3VsYXRlIGJlY2F1c2Ugbm9uZSByZW1haW5pbmdcblx0ICAgICAgICAgIHZhciBjZWxsID0gX3RoaXMuY2VsbHNbX3RoaXMuY3VycmVudEVsZW1lbnRdO1xuXHQgICAgICAgICAgY2VsbC51cCgpO1xuXHQgICAgICAgICAgX3RoaXMuaW50ZXJhY3RpbmcgPSBmYWxzZTtcblx0ICAgICAgICAgIF90aGlzLmN1cnJlbnRFbGVtZW50ID0gZmFsc2U7XG5cdCAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cdCAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcm93czoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIE51bWJlciBvZiByb3dzIGluIHRoZSBzZXF1ZW5jZXJcblx0ICAgICAgQHR5cGUge251bWJlcn1cblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLm1hdHJpeC5yb3dzO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5tYXRyaXgucm93cyA9IHY7XG5cdCAgICAgICAgdGhpcy5lbXB0eSgpO1xuXHQgICAgICAgIHRoaXMuYnVpbGRJbnRlcmZhY2UoKTtcblx0ICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29sdW1uczoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIE51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBzZXF1ZW5jZXJcblx0ICAgICAgQHR5cGUge251bWJlcn1cblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLm1hdHJpeC5jb2x1bW5zO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5tYXRyaXguY29sdW1ucyA9IHY7XG5cdCAgICAgICAgdGhpcy5zdGVwcGVyLm1heCA9IHY7XG5cdCAgICAgICAgdGhpcy5lbXB0eSgpO1xuXHQgICAgICAgIHRoaXMuYnVpbGRJbnRlcmZhY2UoKTtcblx0ICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBTZXF1ZW5jZXI7XG5cdH0pKEludGVyZmFjZSk7XG5cdFxuXHRtb2R1bGUuZXhwb3J0cyA9IFNlcXVlbmNlcjtcblxuLyoqKi8gfSksXG4vKiAyNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9pbnRlcm9wUmVxdWlyZSA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialtcImRlZmF1bHRcIl0gOiBvYmo7IH07XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGtleSBpbiBwcm9wcykgeyB2YXIgcHJvcCA9IHByb3BzW2tleV07IHByb3AuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKHByb3AudmFsdWUpIHByb3Aud3JpdGFibGUgPSB0cnVlOyB9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpOyB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH07XG5cdFxuXHR2YXIgbWF0aCA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKTtcblx0XG5cdHZhciBTZXF1ZW5jZSA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KSk7XG5cdFxuXHQvLyBGb3IgdGhlIHR1dG9yaWFsLCBsb29raW5nIGF0XG5cdFxuXHQvL1BhdHRlcm4gc2VjdGlvbjpcblx0Ly8gLmNyZWF0ZSgpLCAucm93cywgLmNvbHVtbnMsXG5cdC8vIC5wYXR0ZXJuLCAubGVuZ3RoLCAuZm9ybWF0QXNUZXh0KCksIC5sb2coKSxcblx0Ly8gLmxvY2F0ZShpKSwgLmluZGV4T2YoYyxyKVxuXHQvLyByb3coKSwgY29sdW1uKCkgKHJldHVybnMgY29udGVudHMgb2Ygcm93IG9yIGNvbHVtKVxuXHRcblx0Ly9Db250cm9sIHNlY3Rpb246XG5cdC8vIHRvZ2dsZSB4M1xuXHQvLyBzZXQgeDRcblx0Ly8gcm90YXRlIHgzXG5cdC8vIHBvcHVsYXRlIHgzXG5cdC8vIGVyYXNlIHgzXG5cdFxuXHQvLyBzaG91bGQgc29tZSB2ZXJzaW9uIG9mIHRoaXMgaGF2ZSBhIGZsb2F0IHZhbHVlIGZvciBlYWNoIGNlbGw/XG5cdC8vIGNvdWxkIGJlIGxpa2UgYSBtaXJyb3IgLnBhdHRlcm4gdGhhdCBoYXMgdmFsdWVzLiBieSBkZWZhdWx0LCBldmVyeXRoaW5nIGlzIDEsIGJ1dCBjb3VsZCBiZSBzZXQuLi5cblx0Ly8gbm90IGEgZ29vZCB3YXkgdG8gZG8gdGhhdCBvbiBpbnRlcmZhY2UsIGJ1dCBhcyBhIG1vZGVsIGl0IHdvdWxkIGJlIG5pY2UuLi5cblx0Ly8gZm9yIC5mb3JtYXRBc1RleHQoKSwgY291bGQgbXVsdGlwbHkgYnkgMTAwIGFuZCBmbG9vciwgc28gZWFjaCBjZWxsIGlzIGFuIGludCBmcm9tIDAgdG8gOVxuXHRcblx0dmFyIE1hdHJpeCA9IChmdW5jdGlvbiAoKSB7XG5cdCAgZnVuY3Rpb24gTWF0cml4KHJvd3MsIGNvbHVtbnMpIHtcblx0ICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cdFxuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE1hdHJpeCk7XG5cdFxuXHQgICAgLy8gc2hvdWxkIGFsc28gaGF2ZSBhYmlsaXR5IHRvIGNyZWF0ZSB1c2luZyBhbiBleGlzdGluZyBtYXRyaXggKDJkIGFycmF5KVxuXHQgICAgdGhpcy5wYXR0ZXJuID0gW107XG5cdCAgICB0aGlzLmNyZWF0ZShyb3dzLCBjb2x1bW5zKTtcblx0XG5cdCAgICB0aGlzLnRvZ2dsZSA9IHtcblx0ICAgICAgY2VsbDogZnVuY3Rpb24gKGNvbHVtbiwgcm93KSB7XG5cdCAgICAgICAgX3RoaXMucGF0dGVybltyb3ddW2NvbHVtbl0gPSAhX3RoaXMucGF0dGVybltyb3ddW2NvbHVtbl07IC8vIG1hdGguaW52ZXJ0KHRoaXMucGF0dGVybltyb3ddW2NvbHVtbl0pO1xuXHQgICAgICAgIGlmIChfdGhpcy51aSkge1xuXHQgICAgICAgICAgX3RoaXMudWkudXBkYXRlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBfdGhpcy5wYXR0ZXJuW3Jvd11bY29sdW1uXTtcblx0ICAgICAgfSxcblx0ICAgICAgYWxsOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgX3RoaXMuaXRlcmF0ZShmdW5jdGlvbiAociwgYykge1xuXHQgICAgICAgICAgX3RoaXMudG9nZ2xlLmNlbGwoYywgcik7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgaWYgKF90aGlzLnVpKSB7XG5cdCAgICAgICAgICBfdGhpcy51aS51cGRhdGUoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0sXG5cdCAgICAgIHJvdzogZnVuY3Rpb24gKHJvdykge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3RoaXMuY29sdW1uczsgaSsrKSB7XG5cdCAgICAgICAgICBfdGhpcy50b2dnbGUuY2VsbChpLCByb3cpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoX3RoaXMudWkpIHtcblx0ICAgICAgICAgIF90aGlzLnVpLnVwZGF0ZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSxcblx0ICAgICAgY29sdW1uOiBmdW5jdGlvbiAoY29sdW1uKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfdGhpcy5yb3dzOyBpKyspIHtcblx0ICAgICAgICAgIF90aGlzLnRvZ2dsZS5jZWxsKGNvbHVtbiwgaSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChfdGhpcy51aSkge1xuXHQgICAgICAgICAgX3RoaXMudWkudXBkYXRlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9O1xuXHRcblx0ICAgIHRoaXMuc2V0ID0ge1xuXHQgICAgICBjZWxsOiBmdW5jdGlvbiAoY29sdW1uLCByb3csIHZhbHVlKSB7XG5cdCAgICAgICAgX3RoaXMucGF0dGVybltyb3ddW2NvbHVtbl0gPSB2YWx1ZTtcblx0ICAgICAgICBpZiAoX3RoaXMudWkpIHtcblx0ICAgICAgICAgIF90aGlzLnVpLnVwZGF0ZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSxcblx0ICAgICAgYWxsOiBmdW5jdGlvbiAodmFsdWVzKSB7XG5cdCAgICAgICAgLy8gc2V0IHRoZSB3aG9sZSBtYXRyaXggdXNpbmcgYSAyZCBhcnJheSBhcyBpbnB1dFxuXHQgICAgICAgIC8vIHRoaXMgc2hvdWxkIGFsc28gcmVzaXplIHRoZSBhcnJheT9cblx0ICAgICAgICBfdGhpcy5wYXR0ZXJuID0gdmFsdWVzO1xuXHQgICAgICAgIGlmIChfdGhpcy51aSkge1xuXHQgICAgICAgICAgX3RoaXMudWkudXBkYXRlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9LFxuXHQgICAgICByb3c6IGZ1bmN0aW9uIChyb3csIHZhbHVlcykge1xuXHQgICAgICAgIC8vIHNldCBhIHJvdyB1c2luZyBhbiBhcnJheSBhcyBpbnB1dFxuXHQgICAgICAgIF90aGlzLnBhdHRlcm5bcm93XSA9IHZhbHVlcztcblx0ICAgICAgICBpZiAoX3RoaXMudWkpIHtcblx0ICAgICAgICAgIF90aGlzLnVpLnVwZGF0ZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSxcblx0ICAgICAgY29sdW1uOiBmdW5jdGlvbiAoY29sdW1uLCB2YWx1ZXMpIHtcblx0ICAgICAgICAvLyBzZXQgYSBjb2x1bW4gdXNpbmcgYW4gYXJyYXkgYXMgaW5wdXRcblx0ICAgICAgICBfdGhpcy5wYXR0ZXJuLmZvckVhY2goZnVuY3Rpb24gKHJvdywgaSkge1xuXHQgICAgICAgICAgX3RoaXMucGF0dGVybltpXVtjb2x1bW5dID0gdmFsdWVzW2ldO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIGlmIChfdGhpcy51aSkge1xuXHQgICAgICAgICAgX3RoaXMudWkudXBkYXRlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9O1xuXHRcblx0ICAgIHRoaXMucm90YXRlID0ge1xuXHQgICAgICAvL3Nob3VsZCBldmVudHVhbGx5IGRvIChhbW91bnRYLCBhbW91bnRZKSBoZXJlXG5cdCAgICAgIC8vIGNvdWxkIGp1c3QgdXNlIGEgbG9vcCBhbmQgdGhpcy5yb3RhdGUucm93KGksYW1vdW50WCk7XG5cdCAgICAgIGFsbDogZnVuY3Rpb24gKGFtb3VudCkge1xuXHQgICAgICAgIGlmICghYW1vdW50ICYmIGFtb3VudCAhPT0gMCkge1xuXHQgICAgICAgICAgYW1vdW50ID0gMTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgYW1vdW50ICU9IF90aGlzLnBhdHRlcm5bMF0ubGVuZ3RoO1xuXHQgICAgICAgIGlmIChhbW91bnQgPCAwKSB7XG5cdCAgICAgICAgICBhbW91bnQgPSBfdGhpcy5wYXR0ZXJuWzBdLmxlbmd0aCArIGFtb3VudDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfdGhpcy5yb3dzOyBpKyspIHtcblx0ICAgICAgICAgIHZhciBjdXQgPSBfdGhpcy5wYXR0ZXJuW2ldLnNwbGljZShfdGhpcy5wYXR0ZXJuW2ldLmxlbmd0aCAtIGFtb3VudCwgYW1vdW50KTtcblx0ICAgICAgICAgIF90aGlzLnBhdHRlcm5baV0gPSBjdXQuY29uY2F0KF90aGlzLnBhdHRlcm5baV0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoX3RoaXMudWkpIHtcblx0ICAgICAgICAgIF90aGlzLnVpLnVwZGF0ZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSxcblx0ICAgICAgcm93OiBmdW5jdGlvbiAocm93LCBhbW91bnQpIHtcblx0ICAgICAgICBpZiAoIWFtb3VudCAmJiBhbW91bnQgIT09IDApIHtcblx0ICAgICAgICAgIGFtb3VudCA9IDE7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGFtb3VudCAlPSBfdGhpcy5wYXR0ZXJuWzBdLmxlbmd0aDtcblx0ICAgICAgICBpZiAoYW1vdW50IDwgMCkge1xuXHQgICAgICAgICAgYW1vdW50ID0gX3RoaXMucGF0dGVyblswXS5sZW5ndGggKyBhbW91bnQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBjdXQgPSBfdGhpcy5wYXR0ZXJuW3Jvd10uc3BsaWNlKF90aGlzLnBhdHRlcm5bcm93XS5sZW5ndGggLSBhbW91bnQsIGFtb3VudCk7XG5cdCAgICAgICAgX3RoaXMucGF0dGVybltyb3ddID0gY3V0LmNvbmNhdChfdGhpcy5wYXR0ZXJuW3Jvd10pO1xuXHQgICAgICAgIGlmIChfdGhpcy51aSkge1xuXHQgICAgICAgICAgX3RoaXMudWkudXBkYXRlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9LFxuXHQgICAgICBjb2x1bW46IGZ1bmN0aW9uIChjb2x1bW4sIGFtb3VudCkge1xuXHQgICAgICAgIGlmICghYW1vdW50ICYmIGFtb3VudCAhPT0gMCkge1xuXHQgICAgICAgICAgYW1vdW50ID0gMTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgYW1vdW50ICU9IF90aGlzLnBhdHRlcm4ubGVuZ3RoO1xuXHQgICAgICAgIGlmIChhbW91bnQgPCAwKSB7XG5cdCAgICAgICAgICBhbW91bnQgPSBfdGhpcy5wYXR0ZXJuLmxlbmd0aCArIGFtb3VudDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHByb3h5ID0gW107XG5cdCAgICAgICAgX3RoaXMucGF0dGVybi5mb3JFYWNoKGZ1bmN0aW9uIChyb3cpIHtcblx0ICAgICAgICAgIHByb3h5LnB1c2gocm93W2NvbHVtbl0pO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHZhciBjdXQgPSBwcm94eS5zcGxpY2UocHJveHkubGVuZ3RoIC0gYW1vdW50LCBhbW91bnQpO1xuXHQgICAgICAgIHByb3h5ID0gY3V0LmNvbmNhdChwcm94eSk7XG5cdCAgICAgICAgX3RoaXMucGF0dGVybi5mb3JFYWNoKGZ1bmN0aW9uIChyb3csIGkpIHtcblx0ICAgICAgICAgIHJvd1tjb2x1bW5dID0gcHJveHlbaV07XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgaWYgKF90aGlzLnVpKSB7XG5cdCAgICAgICAgICBfdGhpcy51aS51cGRhdGUoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH07XG5cdFxuXHQgICAgLy8gdGhlIGlkZWEgYmVoaW5kIHBvcHVsYXRlIGlzIHRvIGJlIGFibGUgdG8gc2V0IGEgd2hvbGUgcm93IG9yIGNvbHVtbiB0byAwIG9yIDFcblx0ICAgIC8vIElGIHRoZSB2YWx1ZSBpcyBhIGZsb2F0LCBzdWNoIGFzIDAuNywgdGhlbiBpdCB3b3VsZCBiZWNvbWUgYSBwcm9iYWJpbGl0eVxuXHQgICAgLy8gc28gcG9wdWxhdGUoMC43KSB3b3VsZCBnaXZlIGVhY2ggY2VsbCBhIDcwJSBjaGFuY2Ugb2YgYmVpbmcgMVxuXHQgICAgdGhpcy5wb3B1bGF0ZSA9IHtcblx0ICAgICAgYWxsOiBmdW5jdGlvbiAob2Rkcykge1xuXHQgICAgICAgIHZhciBvZGRzU2VxdWVuY2UgPSBuZXcgU2VxdWVuY2Uob2Rkcyk7XG5cdCAgICAgICAgX3RoaXMuaXRlcmF0ZShmdW5jdGlvbiAociwgYykge1xuXHQgICAgICAgICAgX3RoaXMucGF0dGVybltyXVtjXSA9IG1hdGguY29pbihvZGRzU2VxdWVuY2UubmV4dCgpKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIHVzZWQgc28gdGhhdCBlYWNoIHJvdyBoYXMgc2FtZSBvZGRzIHBhdHRlcm4sIGV2ZW4gaWYgcm93IGxlbmd0aCBpcyBub3QgZGl2aXNpYmx5IGJ5IHNlcXVlbmNlIGxlbmd0aC5cblx0ICAgICAgICAvLywoKSA9PiB7XG5cdCAgICAgICAgLy8gIG9kZHMucG9zID0gLTE7XG5cdCAgICAgICAgLy8gfVxuXHQgICAgICAgIGlmIChfdGhpcy51aSkge1xuXHQgICAgICAgICAgX3RoaXMudWkudXBkYXRlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9LFxuXHQgICAgICByb3c6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgcm93ID0gYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyAwIDogYXJndW1lbnRzWzBdO1xuXHQgICAgICAgIHZhciBvZGRzID0gYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyAxIDogYXJndW1lbnRzWzFdO1xuXHRcblx0ICAgICAgICB2YXIgb2Rkc1NlcXVlbmNlID0gbmV3IFNlcXVlbmNlKG9kZHMpO1xuXHQgICAgICAgIF90aGlzLnBhdHRlcm5bcm93XS5mb3JFYWNoKGZ1bmN0aW9uIChjZWxsLCBpKSB7XG5cdCAgICAgICAgICBfdGhpcy5wYXR0ZXJuW3Jvd11baV0gPSBtYXRoLmNvaW4ob2Rkc1NlcXVlbmNlLm5leHQoKSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgaWYgKF90aGlzLnVpKSB7XG5cdCAgICAgICAgICBfdGhpcy51aS51cGRhdGUoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0sXG5cdCAgICAgIGNvbHVtbjogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBjb2x1bW4gPSBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IDAgOiBhcmd1bWVudHNbMF07XG5cdCAgICAgICAgdmFyIG9kZHMgPSBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IDEgOiBhcmd1bWVudHNbMV07XG5cdFxuXHQgICAgICAgIHZhciBvZGRzU2VxdWVuY2UgPSBuZXcgU2VxdWVuY2Uob2Rkcyk7XG5cdCAgICAgICAgX3RoaXMucGF0dGVybi5mb3JFYWNoKGZ1bmN0aW9uIChyb3csIGkpIHtcblx0ICAgICAgICAgIF90aGlzLnBhdHRlcm5baV1bY29sdW1uXSA9IG1hdGguY29pbihvZGRzU2VxdWVuY2UubmV4dCgpKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICBpZiAoX3RoaXMudWkpIHtcblx0ICAgICAgICAgIF90aGlzLnVpLnVwZGF0ZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfTtcblx0XG5cdCAgICAvLyBlc3NlbnRpYWxsIHBvcHVsYXRlKDApIHNvIGknbSBub3Qgc3VyZSBpZiB0aGlzIGlzIG5lY2Vzc2FyeSBidXQgaXMgbmljZVxuXHQgICAgdGhpcy5lcmFzZSA9IHtcblx0ICAgICAgYWxsOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgX3RoaXMuc2V0LmFsbCgwKTtcblx0ICAgICAgfSxcblx0ICAgICAgcm93OiBmdW5jdGlvbiAocm93KSB7XG5cdCAgICAgICAgX3RoaXMuc2V0LnJvdyhyb3csIDApO1xuXHQgICAgICB9LFxuXHQgICAgICBjb2x1bW46IGZ1bmN0aW9uIChjb2x1bW4pIHtcblx0ICAgICAgICBfdGhpcy5zZXQuY29sdW1uKGNvbHVtbiwgMCk7XG5cdCAgICAgIH1cblx0ICAgIH07XG5cdFxuXHQgICAgLy8gZW5kIGNvbnN0cnVjdG9yXG5cdCAgfVxuXHRcblx0ICBfY3JlYXRlQ2xhc3MoTWF0cml4LCB7XG5cdCAgICBjcmVhdGU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZShyb3dzLCBjb2x1bW5zKSB7XG5cdCAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblx0XG5cdCAgICAgICAgdGhpcy5wYXR0ZXJuID0gW107XG5cdCAgICAgICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgcm93czsgcm93KyspIHtcblx0ICAgICAgICAgIHZhciBhcnIgPSBuZXcgQXJyYXkoY29sdW1ucyk7XG5cdCAgICAgICAgICB0aGlzLnBhdHRlcm4ucHVzaChhcnIpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLml0ZXJhdGUoZnVuY3Rpb24gKHIsIGMpIHtcblx0ICAgICAgICAgIF90aGlzLnBhdHRlcm5bcl1bY10gPSBmYWxzZTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGl0ZXJhdGU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGl0ZXJhdGUoZiwgZjIpIHtcblx0ICAgICAgICB2YXIgaSA9IDA7XG5cdCAgICAgICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgdGhpcy5yb3dzOyByb3crKykge1xuXHQgICAgICAgICAgaWYgKGYyKSB7XG5cdCAgICAgICAgICAgIGYyKHJvdyk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgICBmb3IgKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLmNvbHVtbnM7IGNvbHVtbisrKSB7XG5cdCAgICAgICAgICAgIGYocm93LCBjb2x1bW4sIGkpO1xuXHQgICAgICAgICAgICBpKys7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZm9ybWF0QXNUZXh0OiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JtYXRBc1RleHQoKSB7XG5cdCAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblx0XG5cdCAgICAgICAgdmFyIHBhdHRlcm5TdHJpbmcgPSBcIlwiO1xuXHQgICAgICAgIHRoaXMuaXRlcmF0ZShmdW5jdGlvbiAociwgYykge1xuXHQgICAgICAgICAgcGF0dGVyblN0cmluZyArPSAoX3RoaXMucGF0dGVybltyXVtjXSA/IDEgOiAwKSArIFwiIFwiO1xuXHQgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgIHBhdHRlcm5TdHJpbmcgKz0gXCJcXG5cIjtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gcGF0dGVyblN0cmluZztcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGxvZzoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gbG9nKCkge1xuXHQgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZm9ybWF0QXNUZXh0KCkpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgdXBkYXRlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGUocGF0dGVybikge1xuXHQgICAgICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm4gfHwgdGhpcy5wYXR0ZXJuO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbGVuZ3RoOiB7XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnJvd3MgKiB0aGlzLmNvbHVtbnM7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBsb2NhdGU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGxvY2F0ZShpbmRleCkge1xuXHQgICAgICAgIC8vIHJldHVybnMgcm93IGFuZCBjb2x1bW4gb2YgY2VsbCBieSBpbmRleFxuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICByb3c6IH4gfihpbmRleCAvIHRoaXMuY29sdW1ucyksXG5cdCAgICAgICAgICBjb2x1bW46IGluZGV4ICUgdGhpcy5jb2x1bW5zXG5cdCAgICAgICAgfTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGluZGV4T2Y6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGluZGV4T2Yocm93LCBjb2x1bW4pIHtcblx0ICAgICAgICByZXR1cm4gY29sdW1uICsgcm93ICogdGhpcy5jb2x1bW5zO1xuXHQgICAgICAgIC8vIHJldHVybnMgaW5kZXggb2YgY2VsbCBieSByb3cgYW5kIGNvbHVtblxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcm93OiB7XG5cdCAgICAgIHZhbHVlOiAoZnVuY3Rpb24gKF9yb3cpIHtcblx0ICAgICAgICB2YXIgX3Jvd1dyYXBwZXIgPSBmdW5jdGlvbiByb3coX3gpIHtcblx0ICAgICAgICAgIHJldHVybiBfcm93LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgfTtcblx0XG5cdCAgICAgICAgX3Jvd1dyYXBwZXIudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICByZXR1cm4gX3Jvdy50b1N0cmluZygpO1xuXHQgICAgICAgIH07XG5cdFxuXHQgICAgICAgIHJldHVybiBfcm93V3JhcHBlcjtcblx0ICAgICAgfSkoZnVuY3Rpb24gKHJvdykge1xuXHQgICAgICAgIHZhciBkYXRhID0gW107XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuXHQgICAgICAgICAgZGF0YS5wdXNoKHRoaXMucGF0dGVybltyb3ddID8gMSA6IDApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gZGF0YTtcblx0ICAgICAgfSlcblx0ICAgIH0sXG5cdCAgICBjb2x1bW46IHtcblx0ICAgICAgdmFsdWU6IChmdW5jdGlvbiAoX2NvbHVtbikge1xuXHQgICAgICAgIHZhciBfY29sdW1uV3JhcHBlciA9IGZ1bmN0aW9uIGNvbHVtbihfeDIpIHtcblx0ICAgICAgICAgIHJldHVybiBfY29sdW1uLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgfTtcblx0XG5cdCAgICAgICAgX2NvbHVtbldyYXBwZXIudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICByZXR1cm4gX2NvbHVtbi50b1N0cmluZygpO1xuXHQgICAgICAgIH07XG5cdFxuXHQgICAgICAgIHJldHVybiBfY29sdW1uV3JhcHBlcjtcblx0ICAgICAgfSkoZnVuY3Rpb24gKGNvbHVtbikge1xuXHQgICAgICAgIHZhciBkYXRhID0gW107XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuXHQgICAgICAgICAgZGF0YS5wdXNoKHRoaXMucGF0dGVybltpXVtjb2x1bW5dID8gMSA6IDApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gZGF0YTtcblx0ICAgICAgfSlcblx0ICAgIH0sXG5cdCAgICByb3dzOiB7XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnBhdHRlcm4ubGVuZ3RoO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblx0XG5cdCAgICAgICAgdmFyIHByZXZpb3VzID0gdGhpcy5wYXR0ZXJuLnNsaWNlKDApO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlKHYsIHRoaXMuY29sdW1ucyk7XG5cdCAgICAgICAgdGhpcy5pdGVyYXRlKGZ1bmN0aW9uIChyLCBjKSB7XG5cdCAgICAgICAgICBpZiAocHJldmlvdXNbcl0gJiYgcHJldmlvdXNbcl1bY10pIHtcblx0ICAgICAgICAgICAgX3RoaXMucGF0dGVybltyXVtjXSA9IHByZXZpb3VzW3JdW2NdO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29sdW1uczoge1xuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5wYXR0ZXJuWzBdLmxlbmd0aDtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuXHQgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cdFxuXHQgICAgICAgIHZhciBwcmV2aW91cyA9IHRoaXMucGF0dGVybi5zbGljZSgwKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZSh0aGlzLnJvd3MsIHYpO1xuXHQgICAgICAgIHRoaXMuaXRlcmF0ZShmdW5jdGlvbiAociwgYykge1xuXHQgICAgICAgICAgaWYgKHByZXZpb3VzW3JdICYmIHByZXZpb3VzW3JdW2NdKSB7XG5cdCAgICAgICAgICAgIF90aGlzLnBhdHRlcm5bcl1bY10gPSBwcmV2aW91c1tyXVtjXTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pO1xuXHRcblx0ICByZXR1cm4gTWF0cml4O1xuXHR9KSgpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKiovIH0pLFxuLyogMjYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfaW50ZXJvcFJlcXVpcmUgPSBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmpbXCJkZWZhdWx0XCJdIDogb2JqOyB9O1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHsgdmFyIHByb3AgPSBwcm9wc1trZXldOyBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChwcm9wLnZhbHVlKSBwcm9wLndyaXRhYmxlID0gdHJ1ZTsgfSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKTsgfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXHRcblx0dmFyIF9jbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9O1xuXHRcblx0dmFyIG1hdGggPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXyg1KSk7XG5cdFxuXHR2YXIgRHJ1bmsgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXygyNykpO1xuXHRcblx0dmFyIFNlcXVlbmNlID0gKGZ1bmN0aW9uICgpIHtcblx0ICBmdW5jdGlvbiBTZXF1ZW5jZSgpIHtcblx0ICAgIHZhciBzZXF1ZW5jZSA9IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gWzAsIDEwLCAyMCwgMzBdIDogYXJndW1lbnRzWzBdO1xuXHQgICAgdmFyIG1vZGUgPSBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IFwidXBcIiA6IGFyZ3VtZW50c1sxXTtcblx0ICAgIHZhciBwb3NpdGlvbiA9IGFyZ3VtZW50c1syXSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBhcmd1bWVudHNbMl07XG5cdFxuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNlcXVlbmNlKTtcblx0XG5cdCAgICB0aGlzLnZhbHVlcyA9IHNlcXVlbmNlO1xuXHQgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMudmFsdWVzKSkge1xuXHQgICAgICB0aGlzLnZhbHVlcyA9IFt0aGlzLnZhbHVlc107XG5cdCAgICB9XG5cdCAgICB0aGlzLl9tb2RlID0gbW9kZTtcblx0ICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjtcblx0XG5cdCAgICB0aGlzLmRydW5rV2FsayA9IG5ldyBEcnVuaygwLCB0aGlzLnZhbHVlcy5sZW5ndGggLSAxKTtcblx0XG5cdCAgICB0aGlzLnN0YXJ0VmFsdWVzID0ge1xuXHQgICAgICB1cDogMCxcblx0ICAgICAgZG93bjogdGhpcy52YWx1ZXMubGVuZ3RoIC0gMSxcblx0ICAgICAgZHJ1bms6IH4gfih0aGlzLnZhbHVlcy5sZW5ndGggLyAyKSxcblx0ICAgICAgcmFuZG9tOiBtYXRoLnJpKHRoaXMudmFsdWVzLmxlbmd0aClcblx0ICAgIH07XG5cdFxuXHQgICAgaWYgKHRoaXMucG9zaXRpb24gIT09IGZhbHNlKSB7XG5cdCAgICAgIHRoaXMubmV4dCA9IHRoaXNbdGhpcy5fbW9kZV07XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB0aGlzLm5leHQgPSB0aGlzLmZpcnN0O1xuXHQgICAgfVxuXHQgIH1cblx0XG5cdCAgX2NyZWF0ZUNsYXNzKFNlcXVlbmNlLCB7XG5cdCAgICBtb2RlOiB7XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9tb2RlO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uIChtb2RlKSB7XG5cdCAgICAgICAgaWYgKCEobW9kZSA9PT0gXCJ1cFwiIHx8IG1vZGUgPT09IFwiZG93blwiIHx8IG1vZGUgPT09IFwicmFuZG9tXCIgfHwgbW9kZSA9PT0gXCJkcnVua1wiKSkge1xuXHQgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBvbmx5IG1vZGVzIGN1cnJlbnRseSBhbGxvd2VkIGFyZTogdXAsIGRvd24sIHJhbmRvbSwgZHJ1bmtcIik7XG5cdCAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX21vZGUgPSBtb2RlO1xuXHQgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uKSB7XG5cdCAgICAgICAgICB0aGlzLm5leHQgPSB0aGlzW3RoaXMuX21vZGVdO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHZhbHVlOiB7XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1t0aGlzLnBvc2l0aW9uXTtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuXHQgICAgICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLnZhbHVlcy5pbmRleE9mKHYpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZmlyc3Q6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZpcnN0KCkge1xuXHQgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uICE9PSBmYWxzZSkge1xuXHQgICAgICAgICAgdGhpcy5uZXh0ID0gdGhpc1t0aGlzLl9tb2RlXTtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLm5leHQoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHRoaXMuc3RhcnRWYWx1ZXNbdGhpcy5fbW9kZV07XG5cdCAgICAgICAgdGhpcy5uZXh0ID0gdGhpc1t0aGlzLl9tb2RlXTtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHVwOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiB1cCgpIHtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uKys7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvbiAlPSB0aGlzLnZhbHVlcy5sZW5ndGg7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBkb3duOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBkb3duKCkge1xuXHQgICAgICAgIHRoaXMucG9zaXRpb24tLTtcblx0ICAgICAgICBpZiAodGhpcy5wb3NpdGlvbiA8IDApIHtcblx0ICAgICAgICAgIHRoaXMucG9zaXRpb24gPSAodGhpcy5wb3NpdGlvbiArIHRoaXMudmFsdWVzLmxlbmd0aCkgJSB0aGlzLnZhbHVlcy5sZW5ndGg7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmFuZG9tOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiByYW5kb20oKSB7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvbiA9IG1hdGgucmkoMCwgdGhpcy52YWx1ZXMubGVuZ3RoKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGRydW5rOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBkcnVuaygpIHtcblx0ICAgICAgICB0aGlzLmRydW5rV2Fsay5tYXggPSB0aGlzLnZhbHVlcy5sZW5ndGg7XG5cdCAgICAgICAgdGhpcy5kcnVua1dhbGsudmFsdWUgPSB0aGlzLnBvc2l0aW9uO1xuXHQgICAgICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLmRydW5rV2Fsay5uZXh0KCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG5cdCAgICAgIH1cblx0XG5cdCAgICAgIC8qIGZ1dHVyZSBtZXRob2RzXHJcblx0ICAgICAgLmdyb3VwKHN0YXJ0LHN0b3ApIC0tIG91dHB1dHMgYSBncm91cCBvZiBuIGl0ZW1zIGZyb20gdGhlIGxpc3QsIHdpdGggd3JhcHBpbmdcclxuXHQgICAgICAubG9vcChzdGFydCxzdG9wKSAtLSBjb25maW5lcyBzZXF1ZW5jaW5nIHRvIGEgc3Vic2V0IG9mIHRoZSB2YWx1ZXNcclxuXHQgICAgICAgICAgKGNvdWxkIGV2ZW4gaGF2ZSBhIGRpc3RpbmN0aW9uIGJldHdlZW4gLm9yaWdpbmFsVmFsdWVzIGFuZCB0aGUgYXJyYXkgb2YgdmFsdWVzIGJlaW5nIHVzZWQpXHJcblx0ICAgICAgKi9cblx0XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBTZXF1ZW5jZTtcblx0fSkoKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gU2VxdWVuY2U7XG5cbi8qKiovIH0pLFxuLyogMjcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfaW50ZXJvcFJlcXVpcmUgPSBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmpbXCJkZWZhdWx0XCJdIDogb2JqOyB9O1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHsgdmFyIHByb3AgPSBwcm9wc1trZXldOyBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChwcm9wLnZhbHVlKSBwcm9wLndyaXRhYmxlID0gdHJ1ZTsgfSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKTsgfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXHRcblx0dmFyIF9jbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9O1xuXHRcblx0dmFyIG1hdGggPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXyg1KSk7XG5cdFxuXHR2YXIgRHJ1bmsgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gRHJ1bmsoKSB7XG5cdCAgICAgICAgdmFyIG1pbiA9IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gMCA6IGFyZ3VtZW50c1swXTtcblx0ICAgICAgICB2YXIgbWF4ID0gYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyA5IDogYXJndW1lbnRzWzFdO1xuXHQgICAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1syXSA9PT0gdW5kZWZpbmVkID8gMCA6IGFyZ3VtZW50c1syXTtcblx0ICAgICAgICB2YXIgaW5jcmVtZW50ID0gYXJndW1lbnRzWzNdID09PSB1bmRlZmluZWQgPyAxIDogYXJndW1lbnRzWzNdO1xuXHQgICAgICAgIHZhciBsb29wID0gYXJndW1lbnRzWzRdID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IGFyZ3VtZW50c1s0XTtcblx0XG5cdCAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIERydW5rKTtcblx0XG5cdCAgICAgICAgdGhpcy5taW4gPSBtaW47XG5cdCAgICAgICAgdGhpcy5tYXggPSBtYXg7XG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuXHQgICAgICAgIHRoaXMuaW5jcmVtZW50ID0gaW5jcmVtZW50O1xuXHQgICAgICAgIHRoaXMubG9vcCA9IGxvb3A7XG5cdCAgICB9XG5cdFxuXHQgICAgX2NyZWF0ZUNsYXNzKERydW5rLCB7XG5cdCAgICAgICAgbmV4dDoge1xuXHQgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbmV4dCgpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgKz0gbWF0aC5waWNrKC0xICogdGhpcy5pbmNyZW1lbnQsIHRoaXMuaW5jcmVtZW50KTtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlID4gdGhpcy5tYXgpIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sb29wKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1pbjtcblx0ICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5tYXggLSB0aGlzLmluY3JlbWVudDtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdFxuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgPCB0aGlzLm1pbikge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWF4O1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1pbiArIHRoaXMuaW5jcmVtZW50O1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdFxuXHQgICAgcmV0dXJuIERydW5rO1xuXHR9KSgpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBEcnVuaztcblxuLyoqKi8gfSksXG4vKiAyOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9pbnRlcm9wUmVxdWlyZSA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialtcImRlZmF1bHRcIl0gOiBvYmo7IH07XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGtleSBpbiBwcm9wcykgeyB2YXIgcHJvcCA9IHByb3BzW2tleV07IHByb3AuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKHByb3AudmFsdWUpIHByb3Aud3JpdGFibGUgPSB0cnVlOyB9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpOyB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH07XG5cdFxuXHR2YXIgbWF0aCA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKTtcblx0XG5cdHZhciBEcnVuayA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KSk7XG5cdFxuXHR2YXIgQ291bnRlciA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBDb3VudGVyKCkge1xuXHQgICAgICAgIHZhciBtaW4gPSBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IDAgOiBhcmd1bWVudHNbMF07XG5cdCAgICAgICAgdmFyIG1heCA9IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gMTAgOiBhcmd1bWVudHNbMV07XG5cdCAgICAgICAgdmFyIG1vZGUgPSBhcmd1bWVudHNbMl0gPT09IHVuZGVmaW5lZCA/IFwidXBcIiA6IGFyZ3VtZW50c1syXTtcblx0ICAgICAgICB2YXIgdmFsdWUgPSBhcmd1bWVudHNbM10gPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogYXJndW1lbnRzWzNdO1xuXHRcblx0ICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ291bnRlcik7XG5cdFxuXHQgICAgICAgIHRoaXMubWluID0gbWluO1xuXHQgICAgICAgIHRoaXMubWF4ID0gbWF4O1xuXHQgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcblx0ICAgICAgICB0aGlzLm1vZGUgPSBtb2RlO1xuXHQgICAgICAgIHRoaXMuZHJ1bmtXYWxrID0gbmV3IERydW5rKHRoaXMubWluLCB0aGlzLm1heCk7XG5cdCAgICAgICAgaWYgKHRoaXMudmFsdWUgIT09IGZhbHNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMubmV4dCA9IHRoaXNbdGhpcy5fbW9kZV07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5uZXh0ID0gdGhpcy5maXJzdDtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdFxuXHQgICAgX2NyZWF0ZUNsYXNzKENvdW50ZXIsIHtcblx0ICAgICAgICBtb2RlOiB7XG5cdCAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKG1vZGUpIHtcblx0ICAgICAgICAgICAgICAgIGlmICghKG1vZGUgPT09IFwidXBcIiB8fCBtb2RlID09PSBcImRvd25cIiB8fCBtb2RlID09PSBcInJhbmRvbVwiIHx8IG1vZGUgPT09IFwiZHJ1bmtcIikpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIG9ubHkgbW9kZXMgY3VycmVudGx5IGFsbG93ZWQgYXJlOiB1cCwgZG93biwgcmFuZG9tLCBkcnVua1wiKTtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9tb2RlID0gbW9kZTtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gdGhpc1t0aGlzLl9tb2RlXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9kZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZmlyc3Q6IHtcblx0ICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZpcnN0KCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgIT09IGZhbHNlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gdGhpc1t0aGlzLl9tb2RlXTtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZXh0KCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWVzID0ge1xuXHQgICAgICAgICAgICAgICAgICAgIHVwOiB0aGlzLm1pbixcblx0ICAgICAgICAgICAgICAgICAgICBkb3duOiB0aGlzLm1heCxcblx0ICAgICAgICAgICAgICAgICAgICBkcnVuazogfiB+bWF0aC5hdmVyYWdlKHRoaXMubWluLCB0aGlzLm1heCksXG5cdCAgICAgICAgICAgICAgICAgICAgcmFuZG9tOiBtYXRoLnJpKHRoaXMubWluLCB0aGlzLm1heClcblx0ICAgICAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5zdGFydFZhbHVlc1t0aGlzLl9tb2RlXTtcblx0ICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHRoaXNbdGhpcy5fbW9kZV07XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgdXA6IHtcblx0ICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHVwKCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSsrO1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgPj0gdGhpcy5tYXgpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5taW47XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZG93bjoge1xuXHQgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZG93bigpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMudmFsdWUtLTtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlIDwgdGhpcy5taW4pIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5tYXg7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgcmFuZG9tOiB7XG5cdCAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByYW5kb20oKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gbWF0aC5yaSh0aGlzLm1pbiwgdGhpcy5tYXgpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIGRydW5rOiB7XG5cdCAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBkcnVuaygpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZHJ1bmtXYWxrLm1pbiA9IHRoaXMubWluO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5kcnVua1dhbGsubWF4ID0gdGhpcy5tYXg7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmRydW5rV2Fsay52YWx1ZSA9IHRoaXMudmFsdWU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5kcnVua1dhbGsubmV4dCgpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0XG5cdCAgICByZXR1cm4gQ291bnRlcjtcblx0fSkoKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gQ291bnRlcjtcblxuLyoqKi8gfSksXG4vKiAyOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH07XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGtleSBpbiBwcm9wcykgeyB2YXIgcHJvcCA9IHByb3BzW2tleV07IHByb3AuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKHByb3AudmFsdWUpIHByb3Aud3JpdGFibGUgPSB0cnVlOyB9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpOyB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHR2YXIgX2dldCA9IGZ1bmN0aW9uIGdldChvYmplY3QsIHByb3BlcnR5LCByZWNlaXZlcikgeyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IHJldHVybiBnZXQocGFyZW50LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpOyB9IH0gZWxzZSBpZiAoXCJ2YWx1ZVwiIGluIGRlc2MgJiYgZGVzYy53cml0YWJsZSkgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH07XG5cdFxuXHR2YXIgX2luaGVyaXRzID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH07XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH07XG5cdFxuXHR2YXIgc3ZnID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblx0dmFyIG1hdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xuXHR2YXIgSW50ZXJmYWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcblx0dmFyIFN0ZXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcblx0XG5cdHZhciBJbnRlcmFjdGlvbiA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9fd2VicGFja19yZXF1aXJlX18oMTIpKTtcblx0XG5cdC8qKlxuXHQqIFBhbjJEXG5cdCpcblx0KiBAZGVzY3JpcHRpb24gSW50ZXJmYWNlIGZvciBtb3ZpbmcgYSBzb3VuZCBhcm91bmQgYW4gYXJyYXkgb2Ygc3BlYWtlcnMuIFNwZWFrZXIgbG9jYXRpb25zIGNhbiBiZSBjdXN0b21pemVkLiBUaGUgaW50ZXJmYWNlIGNhbGN1bGF0ZXMgdGhlIGNsb3NlbmVzcyBvZiB0aGUgc291bmQgc291cmNlIHRvIGVhY2ggc3BlYWtlciBhbmQgcmV0dXJucyB0aGF0IGRpc3RhbmNlIGFzIGEgbnVtZXJpYyB2YWx1ZS5cblx0KlxuXHQqIEBkZW1vIDxzcGFuIG5leHVzLXVpPVwicGFuMkRcIj48L3NwYW4+XG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciBwYW4yZCA9IG5ldyBOZXh1cy5QYW4yZCgnI3RhcmdldCcpXG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciBwYW4yZCA9IG5ldyBOZXh1cy5QYW4yRCgnI3RhcmdldCcse1xuXHQqICAgJ3NpemUnOiBbMjAwLDIwMF0sXG5cdCogICAncmFuZ2UnOiAwLjUsICAvLyBkZXRlY3Rpb24gcmFkaXVzIG9mIGVhY2ggc3BlYWtlclxuXHQqICAgJ21vZGUnOiAnYWJzb2x1dGUnLCAgIC8vICdhYnNvbHV0ZScgb3IgJ3JlbGF0aXZlJyBzb3VuZCBtb3ZlbWVudFxuXHQqICAgJ3NwZWFrZXJzJzogWyAgLy8gdGhlIHNwZWFrZXIgW3gseV0gcG9zaXRpb25zXG5cdCogICAgICAgWzAuNSwwLjJdLFxuXHQqICAgICAgIFswLjc1LDAuMjVdLFxuXHQqICAgICAgIFswLjgsMC41XSxcblx0KiAgICAgICBbMC43NSwwLjc1XSxcblx0KiAgICAgICBbMC41LDAuOF0sXG5cdCogICAgICAgWzAuMjUsMC43NV1cblx0KiAgICAgICBbMC4yLDAuNV0sXG5cdCogICAgICAgWzAuMjUsMC4yNV1cblx0KiAgIF1cblx0KiB9KVxuXHQqXG5cdCogQG91dHB1dFxuXHQqIGNoYW5nZVxuXHQqIEZpcmVzIGFueSB0aW1lIHRoZSBcInNvdXJjZVwiIG5vZGUncyBwb3NpdGlvbiBjaGFuZ2VzLiA8YnI+XG5cdCogVGhlIGV2ZW50IGRhdGEgaXMgYW4gYXJyYXkgb2YgdGhlIGFtcGxpdHVkZXMgKDAtMSksIHJlcHJlc2VudGluZyB0aGUgbGV2ZWwgb2YgZWFjaCBzcGVha2VyIChhcyBjYWxjdWxhdGVkIGJ5IGl0cyBkaXN0YW5jZSB0byB0aGUgYXVkaW8gc291cmNlKS5cblx0KlxuXHQqIEBvdXRwdXRleGFtcGxlXG5cdCogcGFuMmQub24oJ2NoYW5nZScsZnVuY3Rpb24odikge1xuXHQqICAgY29uc29sZS5sb2codik7XG5cdCogfSlcblx0KlxuXHQqL1xuXHRcblx0dmFyIFBhbjJEID0gKGZ1bmN0aW9uIChfSW50ZXJmYWNlKSB7XG5cdCAgZnVuY3Rpb24gUGFuMkQoKSB7XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUGFuMkQpO1xuXHRcblx0ICAgIHZhciBvcHRpb25zID0gW1wicmFuZ2VcIl07XG5cdFxuXHQgICAgdmFyIGRlZmF1bHRzID0ge1xuXHQgICAgICBzaXplOiBbMjAwLCAyMDBdLFxuXHQgICAgICByYW5nZTogMC41LFxuXHQgICAgICBtb2RlOiBcImFic29sdXRlXCIsXG5cdCAgICAgIHNwZWFrZXJzOiBbWzAuNSwgMC4yXSwgWzAuNzUsIDAuMjVdLCBbMC44LCAwLjVdLCBbMC43NSwgMC43NV0sIFswLjUsIDAuOF0sIFswLjI1LCAwLjc1XSwgWzAuMiwgMC41XSwgWzAuMjUsIDAuMjVdXVxuXHQgICAgfTtcblx0XG5cdCAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihQYW4yRC5wcm90b3R5cGUpLCBcImNvbnN0cnVjdG9yXCIsIHRoaXMpLmNhbGwodGhpcywgYXJndW1lbnRzLCBvcHRpb25zLCBkZWZhdWx0cyk7XG5cdFxuXHQgICAgdGhpcy52YWx1ZSA9IHtcblx0ICAgICAgeDogbmV3IFN0ZXAoMCwgMSwgMCwgMC41KSxcblx0ICAgICAgeTogbmV3IFN0ZXAoMCwgMSwgMCwgMC41KVxuXHQgICAgfTtcblx0XG5cdCAgICAvKipcblx0ICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIG1vdXNlIGludGVyYWN0aW9uLiBJbiBcImFic29sdXRlXCIgbW9kZSwgdGhlIHNvdXJjZSBub2RlIHdpbGwganVtcCB0byB5b3VyIG1vdXNlIHBvc2l0aW9uIG9uIG1vdXNlIGNsaWNrLiBJbiBcInJlbGF0aXZlXCIgbW9kZSwgaXQgZG9lcyBub3QuXG5cdCAgICAqL1xuXHQgICAgdGhpcy5tb2RlID0gdGhpcy5zZXR0aW5ncy5tb2RlO1xuXHRcblx0ICAgIHRoaXMucG9zaXRpb24gPSB7XG5cdCAgICAgIHg6IG5ldyBJbnRlcmFjdGlvbi5IYW5kbGUodGhpcy5tb2RlLCBcImhvcml6b250YWxcIiwgWzAsIHRoaXMud2lkdGhdLCBbdGhpcy5oZWlnaHQsIDBdKSxcblx0ICAgICAgeTogbmV3IEludGVyYWN0aW9uLkhhbmRsZSh0aGlzLm1vZGUsIFwidmVydGljYWxcIiwgWzAsIHRoaXMud2lkdGhdLCBbdGhpcy5oZWlnaHQsIDBdKVxuXHQgICAgfTtcblx0ICAgIHRoaXMucG9zaXRpb24ueC52YWx1ZSA9IHRoaXMudmFsdWUueC5ub3JtYWxpemVkO1xuXHQgICAgdGhpcy5wb3NpdGlvbi55LnZhbHVlID0gdGhpcy52YWx1ZS55Lm5vcm1hbGl6ZWQ7XG5cdFxuXHQgICAgLyoqXG5cdCAgICBBbiBhcnJheSBvZiBzcGVha2VyIGxvY2F0aW9ucy4gVXBkYXRlIHRoaXMgd2l0aCAubW92ZVNwZWFrZXIoKSBvciAubW92ZUFsbFNwZWFrZXJzKClcblx0ICAgICovXG5cdCAgICB0aGlzLnNwZWFrZXJzID0gdGhpcy5zZXR0aW5ncy5zcGVha2Vycztcblx0XG5cdCAgICAvKipcblx0ICAgIFJld3JpdGU6IFRoZSBtYXhpbXVtIGRpc3RhbmNlIGZyb20gYSBzcGVha2VyIHRoYXQgdGhlIHNvdXJjZSBub2RlIGNhbiBiZSBmb3IgaXQgdG8gYmUgaGVhcmQgZnJvbSB0aGF0IHNwZWFrZXIuIEEgbG93IHJhbmdlICgwLjEpIHdpbGwgcmVzdWx0IGluIHNwZWFrZXJzIG9ubHkgcGxheWluZyB3aGVuIHRoZSBzb3VuZCBpcyB2ZXJ5IGNsb3NlIGl0LiBEZWZhdWx0IGlzIDAuNSAoaGFsZiBvZiB0aGUgaW50ZXJmYWNlKS5cblx0ICAgICovXG5cdCAgICB0aGlzLnJhbmdlID0gdGhpcy5zZXR0aW5ncy5yYW5nZTtcblx0XG5cdCAgICAvKipcblx0ICAgIFRoZSBjdXJyZW50IGxldmVscyBmb3IgZWFjaCBzcGVha2VyLiBUaGlzIGlzIGNhbGN1bGF0ZWQgd2hlbiBhIHNvdXJjZSBub2RlIG9yIHNwZWFrZXIgbm9kZSBpcyBtb3ZlZCB0aHJvdWdoIGludGVyYWN0aW9uIG9yIHByb2dyYW1hdGljYWxseS5cblx0ICAgICovXG5cdCAgICB0aGlzLmxldmVscyA9IFtdO1xuXHRcblx0ICAgIHRoaXMuaW5pdCgpO1xuXHRcblx0ICAgIHRoaXMuY2FsY3VsYXRlTGV2ZWxzKCk7XG5cdCAgICB0aGlzLnJlbmRlcigpO1xuXHQgIH1cblx0XG5cdCAgX2luaGVyaXRzKFBhbjJELCBfSW50ZXJmYWNlKTtcblx0XG5cdCAgX2NyZWF0ZUNsYXNzKFBhbjJELCB7XG5cdCAgICBidWlsZEludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIHRoaXMua25vYiA9IHN2Zy5jcmVhdGUoXCJjaXJjbGVcIik7XG5cdFxuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmtub2IpO1xuXHRcblx0ICAgICAgICAvLyBhZGQgc3BlYWtlcnNcblx0ICAgICAgICB0aGlzLnNwZWFrZXJFbGVtZW50cyA9IFtdO1xuXHRcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3BlYWtlcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgIHZhciBzcGVha2VyRWxlbWVudCA9IHN2Zy5jcmVhdGUoXCJjaXJjbGVcIik7XG5cdFxuXHQgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHNwZWFrZXJFbGVtZW50KTtcblx0XG5cdCAgICAgICAgICB0aGlzLnNwZWFrZXJFbGVtZW50cy5wdXNoKHNwZWFrZXJFbGVtZW50KTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzaXplSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaXplSW50ZXJmYWNlKCkge1xuXHRcblx0ICAgICAgICB0aGlzLl9taW5EaW1lbnNpb24gPSBNYXRoLm1pbih0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG5cdFxuXHQgICAgICAgIHRoaXMua25vYlJhZGl1cyA9IHtcblx0ICAgICAgICAgIG9mZjogfiB+KHRoaXMuX21pbkRpbWVuc2lvbiAvIDEwMCkgKiAzICsgNSB9O1xuXHQgICAgICAgIHRoaXMua25vYlJhZGl1cy5vbiA9IHRoaXMua25vYlJhZGl1cy5vZmYgKiAyO1xuXHRcblx0ICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiY3hcIiwgdGhpcy53aWR0aCAvIDIpO1xuXHQgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJjeVwiLCB0aGlzLmhlaWdodCAvIDIpO1xuXHQgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJyXCIsIHRoaXMua25vYlJhZGl1cy5vZmYpO1xuXHRcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3BlYWtlcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgIHZhciBzcGVha2VyRWxlbWVudCA9IHRoaXMuc3BlYWtlckVsZW1lbnRzW2ldO1xuXHQgICAgICAgICAgdmFyIHNwZWFrZXIgPSB0aGlzLnNwZWFrZXJzW2ldO1xuXHQgICAgICAgICAgc3BlYWtlckVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY3hcIiwgc3BlYWtlclswXSAqIHRoaXMud2lkdGgpO1xuXHQgICAgICAgICAgc3BlYWtlckVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY3lcIiwgc3BlYWtlclsxXSAqIHRoaXMuaGVpZ2h0KTtcblx0ICAgICAgICAgIHNwZWFrZXJFbGVtZW50LnNldEF0dHJpYnV0ZShcInJcIiwgdGhpcy5fbWluRGltZW5zaW9uIC8gMjAgKyA1KTtcblx0ICAgICAgICAgIHNwZWFrZXJFbGVtZW50LnNldEF0dHJpYnV0ZShcImZpbGwtb3BhY2l0eVwiLCBcIjBcIik7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uLngucmVzaXplKFswLCB0aGlzLndpZHRoXSwgW3RoaXMuaGVpZ2h0LCAwXSk7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvbi55LnJlc2l6ZShbMCwgdGhpcy53aWR0aF0sIFt0aGlzLmhlaWdodCwgMF0pO1xuXHRcblx0ICAgICAgICAvLyBuZXh0LCBuZWVkIHRvXG5cdCAgICAgICAgLy8gcmVzaXplIHBvc2l0aW9uc1xuXHQgICAgICAgIC8vIGNhbGN1bGF0ZSBzcGVha2VyIGRpc3RhbmNlc1xuXHQgICAgICAgIHRoaXMuY2FsY3VsYXRlTGV2ZWxzKCk7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNvbG9ySW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb2xvckludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuY29sb3JzLmZpbGw7XG5cdCAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5jb2xvcnMubWVkaXVtTGlnaHQpO1xuXHRcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3BlYWtlcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgIHZhciBzcGVha2VyRWxlbWVudCA9IHRoaXMuc3BlYWtlckVsZW1lbnRzW2ldO1xuXHQgICAgICAgICAgc3BlYWtlckVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmNvbG9ycy5hY2NlbnQpO1xuXHQgICAgICAgICAgc3BlYWtlckVsZW1lbnQuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIHRoaXMuY29sb3JzLmFjY2VudCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVuZGVyOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdCAgICAgICAgdGhpcy5rbm9iQ29vcmRpbmF0ZXMgPSB7XG5cdCAgICAgICAgICB4OiB0aGlzLnZhbHVlLngubm9ybWFsaXplZCAqIHRoaXMud2lkdGgsXG5cdCAgICAgICAgICB5OiB0aGlzLmhlaWdodCAtIHRoaXMudmFsdWUueS5ub3JtYWxpemVkICogdGhpcy5oZWlnaHRcblx0ICAgICAgICB9O1xuXHRcblx0ICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiY3hcIiwgdGhpcy5rbm9iQ29vcmRpbmF0ZXMueCk7XG5cdCAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImN5XCIsIHRoaXMua25vYkNvb3JkaW5hdGVzLnkpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY2xpY2s6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsaWNrKCkge1xuXHQgICAgICAgIHRoaXMucG9zaXRpb24ueC5hbmNob3IgPSB0aGlzLm1vdXNlO1xuXHQgICAgICAgIHRoaXMucG9zaXRpb24ueS5hbmNob3IgPSB0aGlzLm1vdXNlO1xuXHQgICAgICAgIHRoaXMubW92ZSgpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbW92ZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gbW92ZSgpIHtcblx0ICAgICAgICBpZiAodGhpcy5jbGlja2VkKSB7XG5cdCAgICAgICAgICB0aGlzLnBvc2l0aW9uLngudXBkYXRlKHRoaXMubW91c2UpO1xuXHQgICAgICAgICAgdGhpcy5wb3NpdGlvbi55LnVwZGF0ZSh0aGlzLm1vdXNlKTtcblx0ICAgICAgICAgIC8vIHBvc2l0aW9uLnggYW5kIHBvc2l0aW9uLnkgYXJlIG5vcm1hbGl6ZWRcblx0ICAgICAgICAgIC8vIHNvIGFyZSB0aGUgbGV2ZWxzXG5cdCAgICAgICAgICAvLyBsaWtlbHkgZG9uJ3QgbmVlZCB0aGlzLnZhbHVlIGF0IGFsbCAtLSBvbmx5IHVzZWQgZm9yIGRyYXdpbmdcblx0ICAgICAgICAgIC8vIG5vdCBnb2luZyB0byBiZSBhICdzdGVwJyBvciAnbWluJyBhbmQgJ21heCcgaW4gdGhpcyBvbmUuXG5cdCAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUxldmVscygpO1xuXHQgICAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMubGV2ZWxzKTtcblx0ICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVsZWFzZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVsZWFzZSgpIHtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbm9ybWFsaXplZDoge1xuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgeDogdGhpcy52YWx1ZS54Lm5vcm1hbGl6ZWQsXG5cdCAgICAgICAgICB5OiB0aGlzLnZhbHVlLnkubm9ybWFsaXplZFxuXHQgICAgICAgIH07XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjYWxjdWxhdGVMZXZlbHM6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNhbGN1bGF0ZUxldmVscygpIHtcblx0ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXHRcblx0ICAgICAgICB0aGlzLnZhbHVlLngudXBkYXRlTm9ybWFsKHRoaXMucG9zaXRpb24ueC52YWx1ZSk7XG5cdCAgICAgICAgdGhpcy52YWx1ZS55LnVwZGF0ZU5vcm1hbCh0aGlzLnBvc2l0aW9uLnkudmFsdWUpO1xuXHQgICAgICAgIHRoaXMubGV2ZWxzID0gW107XG5cdCAgICAgICAgdGhpcy5zcGVha2Vycy5mb3JFYWNoKGZ1bmN0aW9uIChzLCBpKSB7XG5cdCAgICAgICAgICB2YXIgZGlzdGFuY2UgPSBtYXRoLmRpc3RhbmNlKHNbMF0gKiBfdGhpcy53aWR0aCwgc1sxXSAqIF90aGlzLmhlaWdodCwgX3RoaXMucG9zaXRpb24ueC52YWx1ZSAqIF90aGlzLndpZHRoLCAoMSAtIF90aGlzLnBvc2l0aW9uLnkudmFsdWUpICogX3RoaXMuaGVpZ2h0KTtcblx0ICAgICAgICAgIHZhciBsZXZlbCA9IG1hdGguY2xpcCgxIC0gZGlzdGFuY2UgLyAoX3RoaXMucmFuZ2UgKiBfdGhpcy53aWR0aCksIDAsIDEpO1xuXHQgICAgICAgICAgX3RoaXMubGV2ZWxzLnB1c2gobGV2ZWwpO1xuXHQgICAgICAgICAgX3RoaXMuc3BlYWtlckVsZW1lbnRzW2ldLnNldEF0dHJpYnV0ZShcImZpbGwtb3BhY2l0eVwiLCBsZXZlbCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtb3ZlU291cmNlOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgTW92ZSB0aGUgYXVkaW8gc291cmNlIG5vZGUgYW5kIHRyaWdnZXIgdGhlIG91dHB1dCBldmVudC5cblx0ICAgICAgQHBhcmFtIHgge251bWJlcn0gTmV3IHggbG9jYXRpb24sIG5vcm1hbGl6ZWQgMC0xXG5cdCAgICAgIEBwYXJhbSB5IHtudW1iZXJ9IE5ldyB5IGxvY2F0aW9uLCBub3JtYWxpemVkIDAtMVxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIG1vdmVTb3VyY2UoeCwgeSkge1xuXHQgICAgICAgIHZhciBsb2NhdGlvbiA9IHtcblx0ICAgICAgICAgIHg6IHggKiB0aGlzLndpZHRoLFxuXHQgICAgICAgICAgeTogeSAqIHRoaXMuaGVpZ2h0XG5cdCAgICAgICAgfTtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uLngudXBkYXRlKGxvY2F0aW9uKTtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uLnkudXBkYXRlKGxvY2F0aW9uKTtcblx0ICAgICAgICB0aGlzLmNhbGN1bGF0ZUxldmVscygpO1xuXHQgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB0aGlzLmxldmVscyk7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1vdmVTcGVha2VyOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgTW92ZSBhIHNwZWFrZXIgbm9kZSBhbmQgdHJpZ2dlciB0aGUgb3V0cHV0IGV2ZW50LlxuXHQgICAgICBAcGFyYW0gaW5kZXgge251bWJlcn0gSW5kZXggb2YgdGhlIHNwZWFrZXIgdG8gbW92ZVxuXHQgICAgICBAcGFyYW0geCB7bnVtYmVyfSBOZXcgeCBsb2NhdGlvbiwgbm9ybWFsaXplZCAwLTFcblx0ICAgICAgQHBhcmFtIHkge251bWJlcn0gTmV3IHkgbG9jYXRpb24sIG5vcm1hbGl6ZWQgMC0xXG5cdCAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gbW92ZVNwZWFrZXIoaW5kZXgsIHgsIHkpIHtcblx0XG5cdCAgICAgICAgdGhpcy5zcGVha2Vyc1tpbmRleF0gPSBbeCwgeV07XG5cdCAgICAgICAgdGhpcy5zcGVha2VyRWxlbWVudHNbaW5kZXhdLnNldEF0dHJpYnV0ZShcImN4XCIsIHggKiB0aGlzLndpZHRoKTtcblx0ICAgICAgICB0aGlzLnNwZWFrZXJFbGVtZW50c1tpbmRleF0uc2V0QXR0cmlidXRlKFwiY3lcIiwgeSAqIHRoaXMuaGVpZ2h0KTtcblx0ICAgICAgICB0aGlzLmNhbGN1bGF0ZUxldmVscygpO1xuXHQgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB0aGlzLmxldmVscyk7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFNldCBhbGwgc3BlYWtlciBsb2NhdGlvbnNcblx0ICAgICAgQHBhcmFtIGxvY2F0aW9ucyB7QXJyYXl9IEFycmF5IG9mIHNwZWFrZXIgbG9jYXRpb25zLiBFYWNoIGl0ZW0gaW4gdGhlIGFycmF5IHNob3VsZCBiZSBhbiBhcnJheSBvZiBub3JtYWxpemVkIHggYW5kIHkgY29vcmRpbmF0ZXMuXG5cdCAgICAgICBzZXRTcGVha2Vycyhsb2NhdGlvbnMpIHtcblx0ICAgICAgIH1cblx0ICAgICAgKi9cblx0XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBQYW4yRDtcblx0fSkoSW50ZXJmYWNlKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gUGFuMkQ7XG5cbi8qKiovIH0pLFxuLyogMzAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7IH0gfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gZGVzYyAmJiBkZXNjLndyaXRhYmxlKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfTtcblx0XG5cdHZhciBfaW5oZXJpdHMgPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBtYXRoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcblx0dmFyIHN2ZyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cdHZhciBJbnRlcmZhY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xuXHRcblx0LyoqXG5cdCogVGlsdFxuXHQqXG5cdCogQGRlc2NyaXB0aW9uIERldmljZSB0aWx0IHNlbnNvciB3aXRoIDIgb3IgMyBheGVzIChkZXBlbmRpbmcgb24geW91ciBkZXZpY2UgYW5kIGJyb3dzZXIpLlxuXHQqXG5cdCogQGRlbW8gPHNwYW4gbmV4dXMtdWk9J3RpbHQnPjwvc3Bhbj5cblx0KlxuXHQqIEBleGFtcGxlXG5cdCogdmFyIHRpbHQgPSBuZXcgTmV4dXMuVGlsdCgnI3RhcmdldCcpXG5cdCpcblx0KiBAb3V0cHV0XG5cdCogY2hhbmdlXG5cdCogRmlyZXMgYXQgYSByZWd1bGFyIGludGVydmFsLCBhcyBsb25nIGFzIHRoaXMgaW50ZXJmYWNlIGlzIGFjdGl2ZSAoc2VlIHRoZSBpbnRlcmZhY2UncyA8aT4uYWN0aXZlPC9pPiBwcm9wZXJ0eSk8YnI+XG5cdCogVGhlIGV2ZW50IGRhdGEgaXMgYW4gPGk+b2JqZWN0PC9pPiBjb250YWluaW5nIHggKG51bWJlcikgYW5kIHkgKG51bWJlcikgcHJvcGVydGllcyB3aGljaCByZXByZXNlbnQgdGhlIGN1cnJlbnQgdGlsdCBzdGF0ZSBvZiB0aGUgZGV2aWNlLlxuXHQqXG5cdCogQG91dHB1dGV4YW1wbGVcblx0KiB0aWx0Lm9uKCdjaGFuZ2UnLGZ1bmN0aW9uKHYpIHtcblx0KiAgIGNvbnNvbGUubG9nKHYpO1xuXHQqIH0pXG5cdCpcblx0KlxuXHQqL1xuXHRcblx0dmFyIFRpbHQgPSAoZnVuY3Rpb24gKF9JbnRlcmZhY2UpIHtcblx0ICBmdW5jdGlvbiBUaWx0KCkge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRpbHQpO1xuXHRcblx0ICAgIHZhciBvcHRpb25zID0gW1widmFsdWVcIl07XG5cdFxuXHQgICAgdmFyIGRlZmF1bHRzID0ge1xuXHQgICAgICBzaXplOiBbODAsIDgwXVxuXHQgICAgfTtcblx0XG5cdCAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihUaWx0LnByb3RvdHlwZSksIFwiY29uc3RydWN0b3JcIiwgdGhpcykuY2FsbCh0aGlzLCBhcmd1bWVudHMsIG9wdGlvbnMsIGRlZmF1bHRzKTtcblx0XG5cdCAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuXHRcblx0ICAgIHRoaXMuaW5pdCgpO1xuXHRcblx0ICAgIC8vIGFkZCBldmVudCBsaXN0ZW5lciBmb3IgZGV2aWNlIG9yaWVudGF0aW9uXG5cdFxuXHQgICAgdGhpcy5ib3VuZFVwZGF0ZSA9IHRoaXMudXBkYXRlLmJpbmQodGhpcyk7XG5cdCAgICAvL1x0dGhpcy5ib3VuZE1velRpbHQgPSB0aGlzLm1velRpbHQuYmluZCh0aGlzKVxuXHRcblx0ICAgIGlmICh3aW5kb3cuRGV2aWNlT3JpZW50YXRpb25FdmVudCkge1xuXHQgICAgICB0aGlzLm9yaWVudGF0aW9uTGlzdGVuZXIgPSB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImRldmljZW9yaWVudGF0aW9uXCIsIHRoaXMuYm91bmRVcGRhdGUsIGZhbHNlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuXHQgICAgICB0aGlzLmNvbG9ySW50ZXJmYWNlKCk7XG5cdCAgICB9XG5cdFxuXHQgICAgLyplbHNlIGlmICh3aW5kb3cuT3JpZW50YXRpb25FdmVudCkge1xuXHQgICAgLy9cdCAgXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignTW96T3JpZW50YXRpb24nLCB0aGlzLmJvdW5kTW96VGlsdCwgZmFsc2UpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIGNvbnNvbGUubG9nKCdOb3Qgc3VwcG9ydGVkIG9uIHlvdXIgZGV2aWNlIG9yIGJyb3dzZXIuJyk7XG5cdCAgICB9ICovXG5cdCAgfVxuXHRcblx0ICBfaW5oZXJpdHMoVGlsdCwgX0ludGVyZmFjZSk7XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhUaWx0LCB7XG5cdCAgICBidWlsZEludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIHRoaXMudGl0bGUgPSBzdmcuY3JlYXRlKFwidGV4dFwiKTtcblx0ICAgICAgICB0aGlzLmNpcmNsZVggPSBzdmcuY3JlYXRlKFwiY2lyY2xlXCIpO1xuXHQgICAgICAgIHRoaXMuY2lyY2xlWSA9IHN2Zy5jcmVhdGUoXCJjaXJjbGVcIik7XG5cdCAgICAgICAgdGhpcy5jaXJjbGVaID0gc3ZnLmNyZWF0ZShcImNpcmNsZVwiKTtcblx0XG5cdCAgICAgICAgdGhpcy5iYXJYID0gc3ZnLmNyZWF0ZShcInBhdGhcIik7XG5cdCAgICAgICAgdGhpcy5iYXJZID0gc3ZnLmNyZWF0ZShcInBhdGhcIik7XG5cdCAgICAgICAgdGhpcy5iYXJaID0gc3ZnLmNyZWF0ZShcInBhdGhcIik7XG5cdFxuXHQgICAgICAgIHRoaXMuYmFyWDIgPSBzdmcuY3JlYXRlKFwicGF0aFwiKTtcblx0ICAgICAgICB0aGlzLmJhclkyID0gc3ZnLmNyZWF0ZShcInBhdGhcIik7XG5cdCAgICAgICAgdGhpcy5iYXJaMiA9IHN2Zy5jcmVhdGUoXCJwYXRoXCIpO1xuXHRcblx0ICAgICAgICB0aGlzLmJhclguc2V0QXR0cmlidXRlKFwib3BhY2l0eVwiLCBcIjAuOFwiKTtcblx0ICAgICAgICB0aGlzLmJhclkuc2V0QXR0cmlidXRlKFwib3BhY2l0eVwiLCBcIjAuOFwiKTtcblx0ICAgICAgICB0aGlzLmJhclouc2V0QXR0cmlidXRlKFwib3BhY2l0eVwiLCBcIjAuOFwiKTtcblx0ICAgICAgICB0aGlzLmJhclgyLnNldEF0dHJpYnV0ZShcIm9wYWNpdHlcIiwgXCIwLjhcIik7XG5cdCAgICAgICAgdGhpcy5iYXJZMi5zZXRBdHRyaWJ1dGUoXCJvcGFjaXR5XCIsIFwiMC44XCIpO1xuXHQgICAgICAgIHRoaXMuYmFyWjIuc2V0QXR0cmlidXRlKFwib3BhY2l0eVwiLCBcIjAuOFwiKTtcblx0XG5cdCAgICAgICAgdGhpcy5jaXJjbGVYLnNldEF0dHJpYnV0ZShcImN4XCIsIHRoaXMud2lkdGggKiAzIC8gMTIpO1xuXHQgICAgICAgIHRoaXMuY2lyY2xlWC5zZXRBdHRyaWJ1dGUoXCJjeVwiLCB0aGlzLmhlaWdodCAqIDMgLyA0KTtcblx0ICAgICAgICB0aGlzLmNpcmNsZVguc2V0QXR0cmlidXRlKFwiclwiLCB0aGlzLmhlaWdodCAvIDEwKTtcblx0ICAgICAgICB0aGlzLmNpcmNsZVguc2V0QXR0cmlidXRlKFwib3BhY2l0eVwiLCBcIjAuNFwiKTtcblx0XG5cdCAgICAgICAgdGhpcy5jaXJjbGVZLnNldEF0dHJpYnV0ZShcImN4XCIsIHRoaXMud2lkdGggKiA2IC8gMTIpO1xuXHQgICAgICAgIHRoaXMuY2lyY2xlWS5zZXRBdHRyaWJ1dGUoXCJjeVwiLCB0aGlzLmhlaWdodCAqIDMgLyA0KTtcblx0ICAgICAgICB0aGlzLmNpcmNsZVkuc2V0QXR0cmlidXRlKFwiclwiLCB0aGlzLmhlaWdodCAvIDEwKTtcblx0ICAgICAgICB0aGlzLmNpcmNsZVkuc2V0QXR0cmlidXRlKFwib3BhY2l0eVwiLCBcIjAuNFwiKTtcblx0XG5cdCAgICAgICAgdGhpcy5jaXJjbGVaLnNldEF0dHJpYnV0ZShcImN4XCIsIHRoaXMud2lkdGggKiA5IC8gMTIpO1xuXHQgICAgICAgIHRoaXMuY2lyY2xlWi5zZXRBdHRyaWJ1dGUoXCJjeVwiLCB0aGlzLmhlaWdodCAqIDMgLyA0KTtcblx0ICAgICAgICB0aGlzLmNpcmNsZVouc2V0QXR0cmlidXRlKFwiclwiLCB0aGlzLmhlaWdodCAvIDEwKTtcblx0ICAgICAgICB0aGlzLmNpcmNsZVouc2V0QXR0cmlidXRlKFwib3BhY2l0eVwiLCBcIjAuNFwiKTtcblx0XG5cdCAgICAgICAgdGhpcy5iYXJYLnNldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiLCBNYXRoLnJvdW5kKHRoaXMuaGVpZ2h0IC8gMzApKTtcblx0ICAgICAgICB0aGlzLmJhclkuc2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIsIE1hdGgucm91bmQodGhpcy5oZWlnaHQgLyAzMCkpO1xuXHQgICAgICAgIHRoaXMuYmFyWi5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIiwgTWF0aC5yb3VuZCh0aGlzLmhlaWdodCAvIDMwKSk7XG5cdFxuXHQgICAgICAgIHRoaXMuYmFyWC5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIFwibm9uZVwiKTtcblx0ICAgICAgICB0aGlzLmJhclkuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCBcIm5vbmVcIik7XG5cdCAgICAgICAgdGhpcy5iYXJaLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgXCJub25lXCIpO1xuXHRcblx0ICAgICAgICB0aGlzLmJhclgyLnNldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiLCBNYXRoLnJvdW5kKHRoaXMuaGVpZ2h0IC8gMzApKTtcblx0ICAgICAgICB0aGlzLmJhclkyLnNldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiLCBNYXRoLnJvdW5kKHRoaXMuaGVpZ2h0IC8gMzApKTtcblx0ICAgICAgICB0aGlzLmJhcloyLnNldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiLCBNYXRoLnJvdW5kKHRoaXMuaGVpZ2h0IC8gMzApKTtcblx0XG5cdCAgICAgICAgdGhpcy5iYXJYMi5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIFwibm9uZVwiKTtcblx0ICAgICAgICB0aGlzLmJhclkyLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgXCJub25lXCIpO1xuXHQgICAgICAgIHRoaXMuYmFyWjIuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCBcIm5vbmVcIik7XG5cdFxuXHQgICAgICAgIHRoaXMudGl0bGUuc2V0QXR0cmlidXRlKFwieFwiLCB0aGlzLndpZHRoIC8gMik7XG5cdCAgICAgICAgdGhpcy50aXRsZS5zZXRBdHRyaWJ1dGUoXCJ5XCIsIHRoaXMuaGVpZ2h0IC8gMyArIDcpO1xuXHQgICAgICAgIHRoaXMudGl0bGUuc2V0QXR0cmlidXRlKFwiZm9udC1zaXplXCIsIFwiMTVweFwiKTtcblx0ICAgICAgICB0aGlzLnRpdGxlLnNldEF0dHJpYnV0ZShcImZvbnQtd2VpZ2h0XCIsIFwiYm9sZFwiKTtcblx0ICAgICAgICB0aGlzLnRpdGxlLnNldEF0dHJpYnV0ZShcImxldHRlci1zcGFjaW5nXCIsIFwiMnB4XCIpO1xuXHQgICAgICAgIHRoaXMudGl0bGUuc2V0QXR0cmlidXRlKFwib3BhY2l0eVwiLCBcIjAuN1wiKTtcblx0ICAgICAgICB0aGlzLnRpdGxlLnNldEF0dHJpYnV0ZShcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpO1xuXHQgICAgICAgIHRoaXMudGl0bGUudGV4dENvbnRlbnQgPSBcIlRJTFRcIjtcblx0XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuY2lyY2xlWCk7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuY2lyY2xlWSk7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuY2lyY2xlWik7XG5cdFxuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmJhclgpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmJhclkpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmJhclopO1xuXHRcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5iYXJYMik7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuYmFyWTIpO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmJhcloyKTtcblx0XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMudGl0bGUpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29sb3JJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbG9ySW50ZXJmYWNlKCkge1xuXHRcblx0ICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG5cdCAgICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5jb2xvcnMuYWNjZW50O1xuXHQgICAgICAgICAgdGhpcy5jaXJjbGVYLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5jb2xvcnMubGlnaHQpO1xuXHQgICAgICAgICAgdGhpcy5jaXJjbGVZLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5jb2xvcnMubGlnaHQpO1xuXHQgICAgICAgICAgdGhpcy5jaXJjbGVaLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5jb2xvcnMubGlnaHQpO1xuXHQgICAgICAgICAgdGhpcy5jaXJjbGVYLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCB0aGlzLmNvbG9ycy5saWdodCk7XG5cdCAgICAgICAgICB0aGlzLmNpcmNsZVkuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIHRoaXMuY29sb3JzLmxpZ2h0KTtcblx0ICAgICAgICAgIHRoaXMuY2lyY2xlWi5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgdGhpcy5jb2xvcnMubGlnaHQpO1xuXHQgICAgICAgICAgdGhpcy5iYXJYLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCB0aGlzLmNvbG9ycy5saWdodCk7XG5cdCAgICAgICAgICB0aGlzLmJhclkuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIHRoaXMuY29sb3JzLmxpZ2h0KTtcblx0ICAgICAgICAgIHRoaXMuYmFyWi5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgdGhpcy5jb2xvcnMubGlnaHQpO1xuXHQgICAgICAgICAgdGhpcy5iYXJYMi5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgdGhpcy5jb2xvcnMubGlnaHQpO1xuXHQgICAgICAgICAgdGhpcy5iYXJZMi5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgdGhpcy5jb2xvcnMubGlnaHQpO1xuXHQgICAgICAgICAgdGhpcy5iYXJaMi5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgdGhpcy5jb2xvcnMubGlnaHQpO1xuXHQgICAgICAgICAgdGhpcy50aXRsZS5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLmxpZ2h0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuY29sb3JzLmZpbGw7XG5cdCAgICAgICAgICB0aGlzLmNpcmNsZVguc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmNvbG9ycy5tZWRpdW1MaWdodCk7XG5cdCAgICAgICAgICB0aGlzLmNpcmNsZVkuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmNvbG9ycy5tZWRpdW1MaWdodCk7XG5cdCAgICAgICAgICB0aGlzLmNpcmNsZVouc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmNvbG9ycy5tZWRpdW1MaWdodCk7XG5cdCAgICAgICAgICB0aGlzLmNpcmNsZVguc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIHRoaXMuY29sb3JzLm1lZGl1bUxpZ2h0KTtcblx0ICAgICAgICAgIHRoaXMuY2lyY2xlWS5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgdGhpcy5jb2xvcnMubWVkaXVtTGlnaHQpO1xuXHQgICAgICAgICAgdGhpcy5jaXJjbGVaLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCB0aGlzLmNvbG9ycy5tZWRpdW1MaWdodCk7XG5cdCAgICAgICAgICB0aGlzLmJhclguc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIHRoaXMuY29sb3JzLm1lZGl1bUxpZ2h0KTtcblx0ICAgICAgICAgIHRoaXMuYmFyWS5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgdGhpcy5jb2xvcnMubWVkaXVtTGlnaHQpO1xuXHQgICAgICAgICAgdGhpcy5iYXJaLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCB0aGlzLmNvbG9ycy5tZWRpdW1MaWdodCk7XG5cdCAgICAgICAgICB0aGlzLmJhclgyLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCB0aGlzLmNvbG9ycy5tZWRpdW1MaWdodCk7XG5cdCAgICAgICAgICB0aGlzLmJhclkyLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCB0aGlzLmNvbG9ycy5tZWRpdW1MaWdodCk7XG5cdCAgICAgICAgICB0aGlzLmJhcloyLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCB0aGlzLmNvbG9ycy5tZWRpdW1MaWdodCk7XG5cdCAgICAgICAgICB0aGlzLnRpdGxlLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5jb2xvcnMubWVkaXVtTGlnaHQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHVwZGF0ZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlKHYpIHtcblx0ICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG5cdFxuXHQgICAgICAgICAgdmFyIHkgPSB2LmJldGE7XG5cdCAgICAgICAgICB2YXIgeCA9IHYuZ2FtbWE7XG5cdCAgICAgICAgICB2YXIgeiA9IHYuYWxwaGE7XG5cdFxuXHQgICAgICAgICAgLy8gdGFrZSB0aGUgb3JpZ2luYWwgLTkwIHRvIDkwIHNjYWxlIGFuZCBub3JtYWxpemUgaXQgMC0xXG5cdCAgICAgICAgICB4ID0gbWF0aC5zY2FsZSh4LCAtOTAsIDkwLCAwLCAxKTtcblx0ICAgICAgICAgIHkgPSBtYXRoLnNjYWxlKHksIC05MCwgOTAsIDAsIDEpO1xuXHQgICAgICAgICAgeiA9IG1hdGguc2NhbGUoeiwgMCwgMzYwLCAwLCAxKTtcblx0XG5cdCAgICAgICAgICB2YXIgaGFuZGxlUG9pbnRzID0ge1xuXHQgICAgICAgICAgICBzdGFydDogTWF0aC5QSSAqIDEuNSxcblx0ICAgICAgICAgICAgZW5kOiBtYXRoLmNsaXAobWF0aC5zY2FsZSh4LCAwLCAwLjUsIE1hdGguUEkgKiAxLjUsIE1hdGguUEkgKiAwLjUpLCBNYXRoLlBJICogMC41LCBNYXRoLlBJICogMS41KVxuXHQgICAgICAgICAgfTtcblx0ICAgICAgICAgIHZhciBoYW5kbGUyUG9pbnRzID0ge1xuXHQgICAgICAgICAgICBzdGFydDogTWF0aC5QSSAqIDIuNSxcblx0ICAgICAgICAgICAgZW5kOiBtYXRoLmNsaXAobWF0aC5zY2FsZSh4LCAwLjUsIDEsIE1hdGguUEkgKiAyLjUsIE1hdGguUEkgKiAxLjUpLCBNYXRoLlBJICogMS41LCBNYXRoLlBJICogMi41KVxuXHQgICAgICAgICAgfTtcblx0XG5cdCAgICAgICAgICB2YXIgaGFuZGxlUGF0aCA9IHN2Zy5hcmModGhpcy5jaXJjbGVYLmN4LmJhc2VWYWwudmFsdWUsIHRoaXMuY2lyY2xlWC5jeS5iYXNlVmFsLnZhbHVlLCB0aGlzLmNpcmNsZVguci5iYXNlVmFsLnZhbHVlLCBoYW5kbGVQb2ludHMuc3RhcnQsIGhhbmRsZVBvaW50cy5lbmQpO1xuXHQgICAgICAgICAgdmFyIGhhbmRsZTJQYXRoID0gc3ZnLmFyYyh0aGlzLmNpcmNsZVguY3guYmFzZVZhbC52YWx1ZSwgdGhpcy5jaXJjbGVYLmN5LmJhc2VWYWwudmFsdWUsIHRoaXMuY2lyY2xlWC5yLmJhc2VWYWwudmFsdWUsIGhhbmRsZTJQb2ludHMuc3RhcnQsIGhhbmRsZTJQb2ludHMuZW5kKTtcblx0XG5cdCAgICAgICAgICB0aGlzLmJhclguc2V0QXR0cmlidXRlKFwiZFwiLCBoYW5kbGVQYXRoKTtcblx0ICAgICAgICAgIHRoaXMuYmFyWDIuc2V0QXR0cmlidXRlKFwiZFwiLCBoYW5kbGUyUGF0aCk7XG5cdFxuXHQgICAgICAgICAgaGFuZGxlUG9pbnRzID0ge1xuXHQgICAgICAgICAgICBzdGFydDogTWF0aC5QSSAqIDEuNSxcblx0ICAgICAgICAgICAgZW5kOiBtYXRoLmNsaXAobWF0aC5zY2FsZSh5LCAwLCAwLjUsIE1hdGguUEkgKiAxLjUsIE1hdGguUEkgKiAwLjUpLCBNYXRoLlBJICogMC41LCBNYXRoLlBJICogMS41KVxuXHQgICAgICAgICAgfTtcblx0ICAgICAgICAgIGhhbmRsZTJQb2ludHMgPSB7XG5cdCAgICAgICAgICAgIHN0YXJ0OiBNYXRoLlBJICogMi41LFxuXHQgICAgICAgICAgICBlbmQ6IG1hdGguY2xpcChtYXRoLnNjYWxlKHksIDAuNSwgMSwgTWF0aC5QSSAqIDIuNSwgTWF0aC5QSSAqIDEuNSksIE1hdGguUEkgKiAxLjUsIE1hdGguUEkgKiAyLjUpXG5cdCAgICAgICAgICB9O1xuXHRcblx0ICAgICAgICAgIGhhbmRsZVBhdGggPSBzdmcuYXJjKHRoaXMuY2lyY2xlWS5jeC5iYXNlVmFsLnZhbHVlLCB0aGlzLmNpcmNsZVkuY3kuYmFzZVZhbC52YWx1ZSwgdGhpcy5jaXJjbGVZLnIuYmFzZVZhbC52YWx1ZSwgaGFuZGxlUG9pbnRzLnN0YXJ0LCBoYW5kbGVQb2ludHMuZW5kKTtcblx0ICAgICAgICAgIGhhbmRsZTJQYXRoID0gc3ZnLmFyYyh0aGlzLmNpcmNsZVkuY3guYmFzZVZhbC52YWx1ZSwgdGhpcy5jaXJjbGVZLmN5LmJhc2VWYWwudmFsdWUsIHRoaXMuY2lyY2xlWS5yLmJhc2VWYWwudmFsdWUsIGhhbmRsZTJQb2ludHMuc3RhcnQsIGhhbmRsZTJQb2ludHMuZW5kKTtcblx0XG5cdCAgICAgICAgICB0aGlzLmJhclkuc2V0QXR0cmlidXRlKFwiZFwiLCBoYW5kbGVQYXRoKTtcblx0ICAgICAgICAgIHRoaXMuYmFyWTIuc2V0QXR0cmlidXRlKFwiZFwiLCBoYW5kbGUyUGF0aCk7XG5cdFxuXHQgICAgICAgICAgaGFuZGxlUG9pbnRzID0ge1xuXHQgICAgICAgICAgICBzdGFydDogTWF0aC5QSSAqIDEuNSxcblx0ICAgICAgICAgICAgZW5kOiBtYXRoLmNsaXAobWF0aC5zY2FsZSh6LCAwLCAwLjUsIE1hdGguUEkgKiAxLjUsIE1hdGguUEkgKiAwLjUpLCBNYXRoLlBJICogMC41LCBNYXRoLlBJICogMS41KVxuXHQgICAgICAgICAgfTtcblx0ICAgICAgICAgIGhhbmRsZTJQb2ludHMgPSB7XG5cdCAgICAgICAgICAgIHN0YXJ0OiBNYXRoLlBJICogMi41LFxuXHQgICAgICAgICAgICBlbmQ6IG1hdGguY2xpcChtYXRoLnNjYWxlKHosIDAuNSwgMSwgTWF0aC5QSSAqIDIuNSwgTWF0aC5QSSAqIDEuNSksIE1hdGguUEkgKiAxLjUsIE1hdGguUEkgKiAyLjUpXG5cdCAgICAgICAgICB9O1xuXHRcblx0ICAgICAgICAgIGhhbmRsZVBhdGggPSBzdmcuYXJjKHRoaXMuY2lyY2xlWi5jeC5iYXNlVmFsLnZhbHVlLCB0aGlzLmNpcmNsZVouY3kuYmFzZVZhbC52YWx1ZSwgdGhpcy5jaXJjbGVaLnIuYmFzZVZhbC52YWx1ZSwgaGFuZGxlUG9pbnRzLnN0YXJ0LCBoYW5kbGVQb2ludHMuZW5kKTtcblx0ICAgICAgICAgIGhhbmRsZTJQYXRoID0gc3ZnLmFyYyh0aGlzLmNpcmNsZVouY3guYmFzZVZhbC52YWx1ZSwgdGhpcy5jaXJjbGVaLmN5LmJhc2VWYWwudmFsdWUsIHRoaXMuY2lyY2xlWi5yLmJhc2VWYWwudmFsdWUsIGhhbmRsZTJQb2ludHMuc3RhcnQsIGhhbmRsZTJQb2ludHMuZW5kKTtcblx0XG5cdCAgICAgICAgICB0aGlzLmJhclouc2V0QXR0cmlidXRlKFwiZFwiLCBoYW5kbGVQYXRoKTtcblx0ICAgICAgICAgIHRoaXMuYmFyWjIuc2V0QXR0cmlidXRlKFwiZFwiLCBoYW5kbGUyUGF0aCk7XG5cdFxuXHQgICAgICAgICAgLypcblx0ICAgICAgICAgICBsZXQgcG9pbnRzWCA9IHtcblx0ICAgICAgICAgICAgc3RhcnQ6IDAsXG5cdCAgICAgICAgICAgIGVuZDogbWF0aC5zY2FsZSggeCwgMCwgMSwgMCwgTWF0aC5QSSoyIClcblx0ICAgICAgICAgIH07XG5cdCAgICAgICAgICAvLyAgY29uc29sZS5sb2codGhpcy5jaXJjbGVYLmN4LmJhc2VWYWwudmFsdWUpO1xuXHQgICAgICAgICAgIGxldCBwYXRoWCA9IHN2Zy5hcmModGhpcy5jaXJjbGVYLmN4LmJhc2VWYWwudmFsdWUsIHRoaXMuY2lyY2xlWC5jeS5iYXNlVmFsLnZhbHVlLCB0aGlzLmNpcmNsZVguci5iYXNlVmFsLnZhbHVlKjIsIHBvaW50c1guc3RhcnQsIHBvaW50c1guZW5kKTtcblx0ICAgICAgICAgICB0aGlzLmJhclguc2V0QXR0cmlidXRlKCdkJyxwYXRoWCk7ICovXG5cdFxuXHQgICAgICAgICAgLy90aGlzLnRleHRILnRleHRDb250ZW50ID0gbWF0aC5wcnVuZSh4LDIpO1xuXHQgICAgICAgICAgLy90aGlzLnRleHRWLnRleHRDb250ZW50ID0gbWF0aC5wcnVuZSh5LDIpO1xuXHQgICAgICAgICAgLy9cblx0ICAgICAgICAgIC8vICB0aGlzLmNpcmNsZVguc2V0QXR0cmlidXRlKCdvcGFjaXR5Jyx4KTtcblx0ICAgICAgICAgIC8vICB0aGlzLmNpcmNsZVkuc2V0QXR0cmlidXRlKCdvcGFjaXR5Jyx5KTtcblx0ICAgICAgICAgIC8vICB0aGlzLmNpcmNsZVouc2V0QXR0cmlidXRlKCdvcGFjaXR5Jyx6KTtcblx0XG5cdCAgICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwge1xuXHQgICAgICAgICAgICB4OiB4LFxuXHQgICAgICAgICAgICB5OiB5LFxuXHQgICAgICAgICAgICB6OiB6XG5cdCAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjbGljazoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xpY2soKSB7XG5cdCAgICAgICAgaWYgKHdpbmRvdy5EZXZpY2VPcmllbnRhdGlvbkV2ZW50KSB7XG5cdCAgICAgICAgICB0aGlzLmFjdGl2ZSA9ICF0aGlzLmFjdGl2ZTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBhY3RpdmU6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBXaGV0aGVyIHRoZSBpbnRlcmZhY2UgaXMgb24gKGVtaXR0aW5nIHZhbHVlcykgb3Igb2ZmIChwYXVzZWQgJiBub3QgZW1pdHRpbmcgdmFsdWVzKS4gU2V0dGluZyB0aGlzIHByb3BlcnR5IHdpbGwgdXBkYXRlIGl0LlxuXHQgICAgICBAdHlwZSB7Ym9vbGVhbn1cblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKG9uKSB7XG5cdCAgICAgICAgdGhpcy5fYWN0aXZlID0gb247XG5cdCAgICAgICAgdGhpcy5jb2xvckludGVyZmFjZSgpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY3VzdG9tRGVzdHJveToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY3VzdG9tRGVzdHJveSgpIHtcblx0ICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImRldmljZW9yaWVudGF0aW9uXCIsIHRoaXMuYm91bmRVcGRhdGUsIGZhbHNlKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pO1xuXHRcblx0ICByZXR1cm4gVGlsdDtcblx0fSkoSW50ZXJmYWNlKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gVGlsdDtcblxuLyoqKi8gfSksXG4vKiAzMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHsgdmFyIHByb3AgPSBwcm9wc1trZXldOyBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChwcm9wLnZhbHVlKSBwcm9wLndyaXRhYmxlID0gdHJ1ZTsgfSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKTsgfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXHRcblx0dmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyByZXR1cm4gZ2V0KHBhcmVudCwgcHJvcGVydHksIHJlY2VpdmVyKTsgfSB9IGVsc2UgaWYgKFwidmFsdWVcIiBpbiBkZXNjICYmIGRlc2Mud3JpdGFibGUpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9O1xuXHRcblx0dmFyIF9pbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9O1xuXHRcblx0dmFyIF9jbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9O1xuXHRcblx0dmFyIGRvbSA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG5cdHZhciBtYXRoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcblx0dmFyIEludGVyZmFjZSA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5cdHZhciBTbGlkZXJUZW1wbGF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpO1xuXHR2YXIgdG91Y2ggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xuXHRcblx0dmFyIFNpbmdsZVNsaWRlciA9IChmdW5jdGlvbiAoX1NsaWRlclRlbXBsYXRlKSB7XG5cdCAgZnVuY3Rpb24gU2luZ2xlU2xpZGVyKCkge1xuXHQgICAgdmFyIF90aGlzID0gdGhpcztcblx0XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU2luZ2xlU2xpZGVyKTtcblx0XG5cdCAgICB2YXIgb3B0aW9ucyA9IFtcInNjYWxlXCIsIFwidmFsdWVcIl07XG5cdFxuXHQgICAgdmFyIGRlZmF1bHRzID0ge1xuXHQgICAgICBzaXplOiBbMTIwLCAyMF0sXG5cdCAgICAgIG9yaWVudGF0aW9uOiBcInZlcnRpY2FsXCIsXG5cdCAgICAgIG1vZGU6IFwiYWJzb2x1dGVcIixcblx0ICAgICAgc2NhbGU6IFswLCAxXSxcblx0ICAgICAgc3RlcDogMCxcblx0ICAgICAgdmFsdWU6IDAsXG5cdCAgICAgIGhhc0tub2I6IHRydWVcblx0ICAgIH07XG5cdFxuXHQgICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoU2luZ2xlU2xpZGVyLnByb3RvdHlwZSksIFwiY29uc3RydWN0b3JcIiwgdGhpcykuY2FsbCh0aGlzLCBhcmd1bWVudHMsIG9wdGlvbnMsIGRlZmF1bHRzKTtcblx0XG5cdCAgICAvKiBldmVudHMgKi9cblx0XG5cdCAgICBpZiAoIXRvdWNoLmV4aXN0cykge1xuXHRcblx0ICAgICAgdGhpcy5jbGljayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBfdGhpcy5tdWx0aXNsaWRlci5pbnRlcmFjdGluZyA9IHRydWU7XG5cdCAgICAgICAgX3RoaXMubXVsdGlzbGlkZXIuaW50ZXJwb2xhdGlvbiA9IHtcblx0ICAgICAgICAgIGluZGV4OiBfdGhpcy5pbmRleCxcblx0ICAgICAgICAgIHZhbHVlOiBfdGhpcy52YWx1ZVxuXHQgICAgICAgIH07XG5cdCAgICAgICAgX3RoaXMuZG93bigpO1xuXHQgICAgICAgIF90aGlzLm11bHRpc2xpZGVyLnZhbHVlc1tfdGhpcy5pbmRleF0gPSBfdGhpcy52YWx1ZTtcblx0ICAgICAgfTtcblx0ICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICBpZiAoX3RoaXMubXVsdGlzbGlkZXIuaW50ZXJhY3RpbmcpIHtcblx0ICAgICAgICAgIGlmICghX3RoaXMub2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIF90aGlzLm9mZnNldCA9IGRvbS5maW5kUG9zaXRpb24oX3RoaXMuZWxlbWVudCk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgICBfdGhpcy5tb3VzZSA9IGRvbS5sb2NhdGVNb3VzZShlLCBfdGhpcy5vZmZzZXQpO1xuXHQgICAgICAgICAgX3RoaXMuZG93bigpO1xuXHQgICAgICAgICAgX3RoaXMubXVsdGlzbGlkZXIudmFsdWVzW190aGlzLmluZGV4XSA9IF90aGlzLnZhbHVlO1xuXHQgICAgICAgICAgaWYgKF90aGlzLm11bHRpc2xpZGVyLmludGVycG9sYXRpb24pIHtcblx0ICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5hYnMoX3RoaXMubXVsdGlzbGlkZXIuaW50ZXJwb2xhdGlvbi5pbmRleCAtIF90aGlzLmluZGV4KTtcblx0ICAgICAgICAgICAgaWYgKGRpc3RhbmNlID4gMSkge1xuXHQgICAgICAgICAgICAgIHZhciBsb3cgPSBNYXRoLm1pbihfdGhpcy5tdWx0aXNsaWRlci5pbnRlcnBvbGF0aW9uLmluZGV4LCBfdGhpcy5pbmRleCk7XG5cdCAgICAgICAgICAgICAgdmFyIGhpZ2ggPSBNYXRoLm1heChfdGhpcy5tdWx0aXNsaWRlci5pbnRlcnBvbGF0aW9uLmluZGV4LCBfdGhpcy5pbmRleCk7XG5cdCAgICAgICAgICAgICAgdmFyIGxvd1ZhbHVlID0gX3RoaXMubXVsdGlzbGlkZXIuc2xpZGVyc1tsb3ddLnZhbHVlO1xuXHQgICAgICAgICAgICAgIHZhciBoaWdoVmFsdWUgPSBfdGhpcy5tdWx0aXNsaWRlci5zbGlkZXJzW2hpZ2hdLnZhbHVlO1xuXHQgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBsb3c7IGkgPCBoaWdoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIF90aGlzLm11bHRpc2xpZGVyLnNsaWRlcnNbaV0udmFsdWUgPSBtYXRoLmludGVycCgoaSAtIGxvdykgLyBkaXN0YW5jZSwgbG93VmFsdWUsIGhpZ2hWYWx1ZSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgc21vb3RoZWRWYWx1ZSA9IF90aGlzLm11bHRpc2xpZGVyLnNsaWRlcnNbaV0udmFsdWU7XG5cdCAgICAgICAgICAgICAgICBfdGhpcy5tdWx0aXNsaWRlci52YWx1ZXNbaV0gPSBzbW9vdGhlZFZhbHVlO1xuXHQgICAgICAgICAgICAgICAgX3RoaXMubXVsdGlzbGlkZXIudXBkYXRlKGksIHNtb290aGVkVmFsdWUpO1xuXHQgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfVxuXHRcblx0ICAgICAgICAgIF90aGlzLm11bHRpc2xpZGVyLmludGVycG9sYXRpb24gPSB7XG5cdCAgICAgICAgICAgIGluZGV4OiBfdGhpcy5pbmRleCxcblx0ICAgICAgICAgICAgdmFsdWU6IF90aGlzLnZhbHVlXG5cdCAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdFxuXHQgICAgICB0aGlzLm1vdmUgPSBmdW5jdGlvbiAoKSB7fTtcblx0ICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICBpZiAoX3RoaXMubXVsdGlzbGlkZXIuaW50ZXJhY3RpbmcpIHtcblx0ICAgICAgICAgIGlmICghX3RoaXMub2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIF90aGlzLm9mZnNldCA9IGRvbS5maW5kUG9zaXRpb24oX3RoaXMuZWxlbWVudCk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgICBfdGhpcy5tb3VzZSA9IGRvbS5sb2NhdGVNb3VzZShlLCBfdGhpcy5vZmZzZXQpO1xuXHQgICAgICAgICAgX3RoaXMuc2xpZGUoKTtcblx0ICAgICAgICAgIF90aGlzLm11bHRpc2xpZGVyLnZhbHVlc1tfdGhpcy5pbmRleF0gPSBfdGhpcy52YWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pO1xuXHRcblx0ICAgICAgdGhpcy5yZWxlYXNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIF90aGlzLm11bHRpc2xpZGVyLmludGVyYWN0aW5nID0gZmFsc2U7XG5cdCAgICAgICAgX3RoaXMubXVsdGlzbGlkZXIuaW50ZXJwb2xhdGlvbiA9IGZhbHNlO1xuXHQgICAgICB9O1xuXHQgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChfdGhpcy5tdWx0aXNsaWRlci5pbnRlcmFjdGluZykge1xuXHQgICAgICAgICAgX3RoaXMudXAoKTtcblx0ICAgICAgICAgIF90aGlzLm11bHRpc2xpZGVyLmludGVycG9sYXRpb24gPSBmYWxzZTtcblx0ICAgICAgICAgIF90aGlzLm11bHRpc2xpZGVyLnZhbHVlc1tfdGhpcy5pbmRleF0gPSBfdGhpcy52YWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pO1xuXHQgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3V0XCIsIGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoX3RoaXMubXVsdGlzbGlkZXIuaW50ZXJhY3RpbmcpIHtcblx0ICAgICAgICAgIF90aGlzLnVwKCk7XG5cdCAgICAgICAgICBfdGhpcy5tdWx0aXNsaWRlci52YWx1ZXNbX3RoaXMuaW5kZXhdID0gX3RoaXMudmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgICB9KTtcblx0ICAgIH1cblx0XG5cdCAgICB0aGlzLmN1c3RvbVN0eWxlKCk7XG5cdCAgfVxuXHRcblx0ICBfaW5oZXJpdHMoU2luZ2xlU2xpZGVyLCBfU2xpZGVyVGVtcGxhdGUpO1xuXHRcblx0ICBfY3JlYXRlQ2xhc3MoU2luZ2xlU2xpZGVyLCB7XG5cdCAgICBjdXN0b21TdHlsZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY3VzdG9tU3R5bGUoKSB7XG5cdFxuXHQgICAgICAgIC8qIHN0eWxlIGNoYW5nZXMgKi9cblx0XG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwieFwiLCAwKTtcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoMCwwKVwiKTtcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJyeFwiLCAwKTsgLy8gY29ybmVyIHJhZGl1c1xuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcInJ5XCIsIDApO1xuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIHRoaXMud2lkdGgpO1xuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCB0aGlzLmhlaWdodCk7XG5cdFxuXHQgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJ4XCIsIDApO1xuXHQgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoMCwwKVwiKTtcblx0ICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwicnhcIiwgMCk7IC8vIGNvcm5lciByYWRpdXNcblx0ICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwicnlcIiwgMCk7XG5cdCAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIHRoaXMud2lkdGgpO1xuXHQgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgdGhpcy5oZWlnaHQpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBTaW5nbGVTbGlkZXI7XG5cdH0pKFNsaWRlclRlbXBsYXRlKTtcblx0XG5cdC8qKlxuXHQqIE11bHRpc2xpZGVyXG5cdCpcblx0KiBAZGVzY3JpcHRpb24gTXVsdGlzbGlkZXJcblx0KlxuXHQqIEBkZW1vIDxzcGFuIG5leHVzLXVpPVwibXVsdGlzbGlkZXJcIj48L3NwYW4+XG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciBtdWx0aXNsaWRlciA9IG5ldyBOZXh1cy5NdWx0aXNsaWRlcignI3RhcmdldCcpXG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciBtdWx0aXNsaWRlciA9IG5ldyBOZXh1cy5NdWx0aXNsaWRlcignI3RhcmdldCcse1xuXHQqICAnc2l6ZSc6IFsyMDAsMTAwXSxcblx0KiAgJ251bWJlck9mU2xpZGVycyc6IDUsXG5cdCogICdtaW4nOiAwLFxuXHQqICAnbWF4JzogMSxcblx0KiAgJ3N0ZXAnOiAwLFxuXHQqICAndmFsdWVzJzogWzAuNywwLjcsMC43LDAuNywwLjddXG5cdCogfSlcblx0KlxuXHQqIEBvdXRwdXRcblx0KiBjaGFuZ2Vcblx0KiBGaXJlcyBhbnkgdGltZSB0aGUgaW50ZXJmYWNlJ3MgdmFsdWUgY2hhbmdlcy4gPGJyPlxuXHQqIFRoZSBldmVudCBkYXRhIGFuIG9iamVjdCBjb250YWluaW5nIDxpPmluZGV4PC9pPiBhbmQgPGk+dmFsdWU8L2k+IHByb3BlcnRpZXNcblx0KlxuXHQqIEBvdXRwdXRleGFtcGxlXG5cdCogbXVsdGlzbGlkZXIub24oJ2NoYW5nZScsZnVuY3Rpb24odikge1xuXHQqICAgY29uc29sZS5sb2codik7XG5cdCogfSlcblx0KlxuXHQqL1xuXHRcblx0Lypcblx0UHJvcGVydGllc1xuXHQudmFsdWVzXG5cdFxuXHQqL1xuXHRcblx0dmFyIE11bHRpc2xpZGVyID0gKGZ1bmN0aW9uIChfSW50ZXJmYWNlKSB7XG5cdCAgZnVuY3Rpb24gTXVsdGlzbGlkZXIoKSB7XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTXVsdGlzbGlkZXIpO1xuXHRcblx0ICAgIHZhciBvcHRpb25zID0gW1widmFsdWVcIl07XG5cdFxuXHQgICAgdmFyIGRlZmF1bHRzID0ge1xuXHQgICAgICBzaXplOiBbMjAwLCAxMDBdLFxuXHQgICAgICBudW1iZXJPZlNsaWRlcnM6IDUsXG5cdCAgICAgIG1pbjogMCxcblx0ICAgICAgbWF4OiAxLFxuXHQgICAgICBzdGVwOiAwLFxuXHQgICAgICB2YWx1ZXM6IFswLjcsIDAuNywgMC43LCAwLjcsIDAuN11cblx0ICAgIH07XG5cdFxuXHQgICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoTXVsdGlzbGlkZXIucHJvdG90eXBlKSwgXCJjb25zdHJ1Y3RvclwiLCB0aGlzKS5jYWxsKHRoaXMsIGFyZ3VtZW50cywgb3B0aW9ucywgZGVmYXVsdHMpO1xuXHRcblx0ICAgIHRoaXMuX251bWJlck9mU2xpZGVycyA9IHRoaXMuc2V0dGluZ3MubnVtYmVyT2ZTbGlkZXJzO1xuXHQgICAgdGhpcy52YWx1ZXMgPSB0aGlzLnNldHRpbmdzLnZhbHVlcztcblx0XG5cdCAgICB0aGlzLnNsaWRlcnMgPSBbXTtcblx0XG5cdCAgICB0aGlzLmludGVyYWN0aW5nID0gZmFsc2U7XG5cdFxuXHQgICAgdGhpcy5pbml0KCk7XG5cdCAgfVxuXHRcblx0ICBfaW5oZXJpdHMoTXVsdGlzbGlkZXIsIF9JbnRlcmZhY2UpO1xuXHRcblx0ICBfY3JlYXRlQ2xhc3MoTXVsdGlzbGlkZXIsIHtcblx0ICAgIGJ1aWxkRnJhbWU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkRnJhbWUoKSB7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0ICAgICAgICB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgYnVpbGRJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkSW50ZXJmYWNlKCkge1xuXHRcblx0ICAgICAgICB2YXIgbWluID0gdGhpcy5zZXR0aW5ncy5taW47XG5cdCAgICAgICAgdmFyIG1heCA9IHRoaXMuc2V0dGluZ3MubWF4O1xuXHQgICAgICAgIHZhciBzdGVwID0gdGhpcy5zZXR0aW5ncy5zdGVwO1xuXHRcblx0ICAgICAgICBpZiAodGhpcy5zbGlkZXJzLmxlbmd0aCkge1xuXHQgICAgICAgICAgbWluID0gdGhpcy5zbGlkZXJzWzBdLm1pbjtcblx0ICAgICAgICAgIG1heCA9IHRoaXMuc2xpZGVyc1swXS5tYXg7XG5cdCAgICAgICAgICBzdGVwID0gdGhpcy5zbGlkZXJzWzBdLnN0ZXA7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICB0aGlzLnNsaWRlcnMgPSBbXTtcblx0XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9udW1iZXJPZlNsaWRlcnM7IGkrKykge1xuXHQgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuXHRcblx0ICAgICAgICAgIHZhciBzbGlkZXIgPSBuZXcgU2luZ2xlU2xpZGVyKGNvbnRhaW5lciwge1xuXHQgICAgICAgICAgICBzY2FsZTogW21pbiwgbWF4XSxcblx0ICAgICAgICAgICAgc3RlcDogc3RlcCxcblx0ICAgICAgICAgICAgbW9kZTogXCJhYnNvbHV0ZVwiLFxuXHQgICAgICAgICAgICBvcmllbnRhdGlvbjogXCJ2ZXJ0aWNhbFwiLFxuXHQgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZXNbaV0sXG5cdCAgICAgICAgICAgIGhhc0tub2I6IGZhbHNlLFxuXHQgICAgICAgICAgICBjb21wb25lbnQ6IHRydWUgfSwgdGhpcy51cGRhdGUuYmluZCh0aGlzLCBpKSk7XG5cdCAgICAgICAgICBzbGlkZXIubXVsdGlzbGlkZXIgPSB0aGlzO1xuXHRcblx0ICAgICAgICAgIHNsaWRlci5pbmRleCA9IGk7XG5cdCAgICAgICAgICBpZiAodG91Y2guZXhpc3RzKSB7XG5cdCAgICAgICAgICAgIHNsaWRlci5iYXIuaW5kZXggPSBpO1xuXHQgICAgICAgICAgICBzbGlkZXIuZmlsbGJhci5pbmRleCA9IGk7XG5cdCAgICAgICAgICAgIHNsaWRlci5wcmVDbGljayA9IHNsaWRlci5wcmVNb3ZlID0gc2xpZGVyLnByZVJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7fTtcblx0ICAgICAgICAgICAgc2xpZGVyLmNsaWNrID0gc2xpZGVyLm1vdmUgPSBzbGlkZXIucmVsZWFzZSA9IGZ1bmN0aW9uICgpIHt9O1xuXHQgICAgICAgICAgICBzbGlkZXIucHJlVG91Y2ggPSBzbGlkZXIucHJlVG91Y2hNb3ZlID0gc2xpZGVyLnByZVRvdWNoUmVsZWFzZSA9IGZ1bmN0aW9uICgpIHt9O1xuXHQgICAgICAgICAgICBzbGlkZXIudG91Y2ggPSBzbGlkZXIudG91Y2hNb3ZlID0gc2xpZGVyLnRvdWNoUmVsZWFzZSA9IGZ1bmN0aW9uICgpIHt9O1xuXHQgICAgICAgICAgfVxuXHRcblx0ICAgICAgICAgIHRoaXMuc2xpZGVycy5wdXNoKHNsaWRlcik7XG5cdCAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRvdWNoLmV4aXN0cykge1xuXHQgICAgICAgICAgdGhpcy5hZGRUb3VjaExpc3RlbmVycygpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNvbG9ySW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb2xvckludGVyZmFjZSgpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2xpZGVycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgdGhpcy5zbGlkZXJzW2ldLmNvbG9ycyA9IHRoaXMuY29sb3JzO1xuXHQgICAgICAgICAgdGhpcy5zbGlkZXJzW2ldLmNvbG9ySW50ZXJmYWNlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2l6ZUludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc2l6ZUludGVyZmFjZSgpIHtcblx0XG5cdCAgICAgICAgdmFyIHNsaWRlcldpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMuc2xpZGVycy5sZW5ndGg7XG5cdCAgICAgICAgdmFyIHNsaWRlckhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXHRcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2xpZGVycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgdGhpcy5zbGlkZXJzW2ldLnJlc2l6ZShzbGlkZXJXaWR0aCwgc2xpZGVySGVpZ2h0KTtcblx0ICAgICAgICAgIHRoaXMuc2xpZGVyc1tpXS5jdXN0b21TdHlsZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHVwZGF0ZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlKGluZGV4LCB2YWx1ZSkge1xuXHQgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB7XG5cdCAgICAgICAgICBpbmRleDogaW5kZXgsXG5cdCAgICAgICAgICB2YWx1ZTogdmFsdWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGFkZFRvdWNoTGlzdGVuZXJzOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRUb3VjaExpc3RlbmVycygpIHtcblx0ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXHRcblx0ICAgICAgICB0aGlzLnByZUNsaWNrID0gdGhpcy5wcmVNb3ZlID0gdGhpcy5wcmVSZWxlYXNlID0gZnVuY3Rpb24gKCkge307XG5cdCAgICAgICAgdGhpcy5jbGljayA9IHRoaXMubW92ZSA9IHRoaXMucmVsZWFzZSA9IGZ1bmN0aW9uICgpIHt9O1xuXHQgICAgICAgIHRoaXMucHJlVG91Y2ggPSB0aGlzLnByZVRvdWNoTW92ZSA9IHRoaXMucHJlVG91Y2hSZWxlYXNlID0gZnVuY3Rpb24gKCkge307XG5cdCAgICAgICAgdGhpcy50b3VjaCA9IHRoaXMudG91Y2hNb3ZlID0gdGhpcy50b3VjaFJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7fTtcblx0XG5cdCAgICAgICAgdGhpcy5jdXJyZW50RWxlbWVudCA9IGZhbHNlO1xuXHRcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIiwgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WCwgZS50YXJnZXRUb3VjaGVzWzBdLmNsaWVudFkpO1xuXHQgICAgICAgICAgdmFyIHNsaWRlciA9IF90aGlzLnNsaWRlcnNbZWxlbWVudC5pbmRleF07XG5cdCAgICAgICAgICBpZiAoIXNsaWRlci5vZmZzZXQpIHtcblx0ICAgICAgICAgICAgc2xpZGVyLm9mZnNldCA9IGRvbS5maW5kUG9zaXRpb24oc2xpZGVyLmVsZW1lbnQpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgc2xpZGVyLm1vdXNlID0gZG9tLmxvY2F0ZU1vdXNlKGUsIHNsaWRlci5vZmZzZXQpO1xuXHQgICAgICAgICAgc2xpZGVyLmRvd24oKTtcblx0ICAgICAgICAgIF90aGlzLmN1cnJlbnRFbGVtZW50ID0gZWxlbWVudC5pbmRleDtcblx0ICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblx0ICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdCAgICAgICAgfSk7XG5cdFxuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsIGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZS50YXJnZXRUb3VjaGVzWzBdLmNsaWVudFgsIGUudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRZKTtcblx0ICAgICAgICAgIHZhciBzbGlkZXIgPSBfdGhpcy5zbGlkZXJzW2VsZW1lbnQuaW5kZXhdO1xuXHQgICAgICAgICAgaWYgKCFzbGlkZXIub2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHNsaWRlci5vZmZzZXQgPSBkb20uZmluZFBvc2l0aW9uKHNsaWRlci5lbGVtZW50KTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIHNsaWRlci5tb3VzZSA9IGRvbS5sb2NhdGVNb3VzZShlLCBzbGlkZXIub2Zmc2V0KTtcblx0ICAgICAgICAgIGlmIChlbGVtZW50LmluZGV4ICE9PSBfdGhpcy5jdXJyZW50RWxlbWVudCkge1xuXHQgICAgICAgICAgICBpZiAoX3RoaXMuY3VycmVudEVsZW1lbnQgPj0gMCkge1xuXHQgICAgICAgICAgICAgIHZhciBwYXN0c2xpZGVyID0gX3RoaXMuc2xpZGVyc1tfdGhpcy5jdXJyZW50RWxlbWVudF07XG5cdCAgICAgICAgICAgICAgcGFzdHNsaWRlci51cCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHNsaWRlci5kb3duKCk7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBzbGlkZXIuc2xpZGUoKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIF90aGlzLmN1cnJlbnRFbGVtZW50ID0gZWxlbWVudC5pbmRleDtcblx0ICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblx0ICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdCAgICAgICAgfSk7XG5cdFxuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgIC8vIG5vIHRvdWNoZXMgdG8gY2FsY3VsYXRlIGJlY2F1c2Ugbm9uZSByZW1haW5pbmdcblx0ICAgICAgICAgIHZhciBzbGlkZXIgPSBfdGhpcy5zbGlkZXJzW190aGlzLmN1cnJlbnRFbGVtZW50XTtcblx0ICAgICAgICAgIHNsaWRlci51cCgpO1xuXHQgICAgICAgICAgX3RoaXMuaW50ZXJhY3RpbmcgPSBmYWxzZTtcblx0ICAgICAgICAgIF90aGlzLmN1cnJlbnRFbGVtZW50ID0gZmFsc2U7XG5cdCAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cdCAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbnVtYmVyT2ZTbGlkZXJzOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgR2V0IG9yIHNldCB0aGUgbnVtYmVyIG9mIHNsaWRlcnNcblx0ICAgICAgQHR5cGUge051bWJlcn1cblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnNsaWRlcnMubGVuZ3RoO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgaWYgKHYgPT09IHRoaXMuc2xpZGVycy5sZW5ndGgpIHtcblx0ICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5zbGlkZXJzLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlcikge1xuXHQgICAgICAgICAgc2xpZGVyLmRlc3Ryb3koKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLmVtcHR5KCk7XG5cdCAgICAgICAgdGhpcy5fbnVtYmVyT2ZTbGlkZXJzID0gdjtcblx0ICAgICAgICB0aGlzLmJ1aWxkSW50ZXJmYWNlKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtaW46IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBMb3dlciBsaW1pdCBvZiB0aGUgbXVsdGlzbGlkZXIncyBvdXRwdXQgcmFuZ2Vcblx0ICAgICAgQHR5cGUge251bWJlcn1cblx0ICAgICAgQGV4YW1wbGUgbXVsdGlzbGlkZXIubWluID0gMTAwMDtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnNsaWRlcnNbMF0ubWluO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5zbGlkZXJzLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlcikge1xuXHQgICAgICAgICAgc2xpZGVyLm1pbiA9IHY7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtYXg6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBVcHBlciBsaW1pdCBvZiB0aGUgbXVsdGlzbGlkZXIncyBvdXRwdXQgcmFuZ2Vcblx0ICAgICAgQHR5cGUge251bWJlcn1cblx0ICAgICAgQGV4YW1wbGUgbXVsdGlzbGlkZXIubWF4ID0gMTAwMDtcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnNsaWRlcnNbMF0ubWF4O1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5zbGlkZXJzLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlcikge1xuXHQgICAgICAgICAgc2xpZGVyLm1heCA9IHY7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzdGVwOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgVGhlIGluY3JlbWVudCB0aGF0IHRoZSBtdWx0aXNsaWRlcidzIHZhbHVlIGNoYW5nZXMgYnkuXG5cdCAgICAgIEB0eXBlIHtudW1iZXJ9XG5cdCAgICAgIEBleGFtcGxlIG11bHRpc2xpZGVyLnN0ZXAgPSA1O1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVyc1swXS5zdGVwO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgdGhpcy5zbGlkZXJzLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlcikge1xuXHQgICAgICAgICAgc2xpZGVyLnN0ZXAgPSB2O1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2V0U2xpZGVyOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgU2V0IHRoZSB2YWx1ZSBvZiBhbiBpbmRpdmlkdWFsIHNsaWRlclxuXHQgICAgICBAcGFyYW0gaW5kZXgge251bWJlcn0gU2xpZGVyIGluZGV4XG5cdCAgICAgIEBwYXJhbSB2YWx1ZSB7bnVtYmVyfSBOZXcgc2xpZGVyIHZhbHVlXG5cdCAgICAgIEBleGFtcGxlXG5cdCAgICAgIC8vIFNldCB0aGUgZmlyc3Qgc2xpZGVyIHRvIHZhbHVlIDAuNVxuXHQgICAgICBtdWx0aXNsaWRlci5zZXRTbGlkZXIoMCwwLjUpXG5cdCAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc2V0U2xpZGVyKGluZGV4LCB2YWx1ZSkge1xuXHQgICAgICAgIHRoaXMuc2xpZGVyc1tpbmRleF0udmFsdWUgPSB2YWx1ZTtcblx0ICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwge1xuXHQgICAgICAgICAgaW5kZXg6IGluZGV4LFxuXHQgICAgICAgICAgdmFsdWU6IHZhbHVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzZXRBbGxTbGlkZXJzOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgU2V0IHRoZSB2YWx1ZSBvZiBhbGwgc2xpZGVycyBhdCBvbmNlLiBJZiB0aGUgc2l6ZSBvZiB0aGUgaW5wdXQgYXJyYXkgZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHNsaWRlcnMsIHRoZSB2YWx1ZSBhcnJheSB3aWxsIHJlcGVhdCB1bnRpbCBhbGwgc2xpZGVycyBoYXZlIGJlZW4gc2V0LiBJLmUuIGFuIGlucHV0IGFycmF5IG9mIGxlbmd0aCAxIHdpbGwgc2V0IGFsbCBzbGlkZXJzIHRvIHRoYXQgdmFsdWUuXG5cdCAgICAgIEBwYXJhbSB2YWx1ZXMge0FycmF5fSBBbGwgc2xpZGVyIHZhbHVlc1xuXHQgICAgICBAZXhhbXBsZVxuXHQgICAgICBtdWx0aXNsaWRlci5zZXRBbGxTbGlkZXJzKFswLjIsMC4zLDAuNCwwLjUsMC42XSlcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRBbGxTbGlkZXJzKHZhbHVlcykge1xuXHQgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cdFxuXHQgICAgICAgIHRoaXMudmFsdWVzID0gdmFsdWVzO1xuXHQgICAgICAgIHRoaXMuc2xpZGVycy5mb3JFYWNoKGZ1bmN0aW9uIChzbGlkZXIsIGkpIHtcblx0ICAgICAgICAgIHNsaWRlci52YWx1ZSA9IHZhbHVlc1tpICUgdmFsdWVzLmxlbmd0aF07XG5cdCAgICAgICAgICBfdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHtcblx0ICAgICAgICAgICAgaW5kZXg6IGksXG5cdCAgICAgICAgICAgIHZhbHVlOiBzbGlkZXIudmFsdWVcblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBNdWx0aXNsaWRlcjtcblx0fSkoSW50ZXJmYWNlKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gTXVsdGlzbGlkZXI7XG5cbi8qKiovIH0pLFxuLyogMzIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9O1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHsgdmFyIHByb3AgPSBwcm9wc1trZXldOyBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChwcm9wLnZhbHVlKSBwcm9wLndyaXRhYmxlID0gdHJ1ZTsgfSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKTsgfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXHRcblx0dmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyByZXR1cm4gZ2V0KHBhcmVudCwgcHJvcGVydHksIHJlY2VpdmVyKTsgfSB9IGVsc2UgaWYgKFwidmFsdWVcIiBpbiBkZXNjICYmIGRlc2Mud3JpdGFibGUpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9O1xuXHRcblx0dmFyIF9pbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9O1xuXHRcblx0dmFyIF9jbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9O1xuXHRcblx0dmFyIHN2ZyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cdHZhciBJbnRlcmZhY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xuXHR2YXIgU3RlcCA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xuXHRcblx0dmFyIEludGVyYWN0aW9uID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX193ZWJwYWNrX3JlcXVpcmVfXygxMikpO1xuXHRcblx0dmFyIFNsaWRlclRlbXBsYXRlID0gKGZ1bmN0aW9uIChfSW50ZXJmYWNlKSB7XG5cdCAgZnVuY3Rpb24gU2xpZGVyVGVtcGxhdGUoYXJncywgb3B0aW9ucywgZGVmYXVsdHMpIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTbGlkZXJUZW1wbGF0ZSk7XG5cdFxuXHQgICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoU2xpZGVyVGVtcGxhdGUucHJvdG90eXBlKSwgXCJjb25zdHJ1Y3RvclwiLCB0aGlzKS5jYWxsKHRoaXMsIGFyZ3MsIG9wdGlvbnMsIGRlZmF1bHRzKTtcblx0XG5cdCAgICB0aGlzLm9yaWVudGF0aW9uID0gdGhpcy5zZXR0aW5ncy5vcmllbnRhdGlvbjtcblx0XG5cdCAgICAvLyAgdGhpcy5tb2RlID0gdGhpcy5zZXR0aW5ncy5tb2RlO1xuXHRcblx0ICAgIHRoaXMuaGFzS25vYiA9IHRoaXMuc2V0dGluZ3MuaGFzS25vYjtcblx0XG5cdCAgICAvLyB0aGlzLnN0ZXAgc2hvdWxkIGV2ZW50dWFsbHkgYmUgZ2V0L3NldFxuXHQgICAgLy8gdXBkYXRpbmcgaXQgd2lsbCB1cGRhdGUgdGhlIF92YWx1ZSBzdGVwIG1vZGVsXG5cdCAgICAvLyAgdGhpcy5zdGVwID0gdGhpcy5zZXR0aW5ncy5zdGVwOyAvLyBmbG9hdFxuXHRcblx0ICAgIHRoaXMuX3ZhbHVlID0gbmV3IFN0ZXAodGhpcy5zZXR0aW5ncy5zY2FsZVswXSwgdGhpcy5zZXR0aW5ncy5zY2FsZVsxXSwgdGhpcy5zZXR0aW5ncy5zdGVwLCB0aGlzLnNldHRpbmdzLnZhbHVlKTtcblx0XG5cdCAgICB0aGlzLmluaXQoKTtcblx0XG5cdCAgICB0aGlzLnBvc2l0aW9uID0gbmV3IEludGVyYWN0aW9uLkhhbmRsZSh0aGlzLnNldHRpbmdzLm1vZGUsIHRoaXMub3JpZW50YXRpb24sIFswLCB0aGlzLndpZHRoXSwgW3RoaXMuaGVpZ2h0LCAwXSk7XG5cdCAgICB0aGlzLnBvc2l0aW9uLnZhbHVlID0gdGhpcy5fdmFsdWUubm9ybWFsaXplZDtcblx0XG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5fdmFsdWUudmFsdWU7XG5cdFxuXHQgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMudmFsdWUpO1xuXHQgIH1cblx0XG5cdCAgX2luaGVyaXRzKFNsaWRlclRlbXBsYXRlLCBfSW50ZXJmYWNlKTtcblx0XG5cdCAgX2NyZWF0ZUNsYXNzKFNsaWRlclRlbXBsYXRlLCB7XG5cdCAgICBidWlsZEludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIHRoaXMuYmFyID0gc3ZnLmNyZWF0ZShcInJlY3RcIik7XG5cdCAgICAgICAgdGhpcy5maWxsYmFyID0gc3ZnLmNyZWF0ZShcInJlY3RcIik7XG5cdCAgICAgICAgdGhpcy5rbm9iID0gc3ZnLmNyZWF0ZShcImNpcmNsZVwiKTtcblx0XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuYmFyKTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5maWxsYmFyKTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5rbm9iKTtcblx0XG5cdCAgICAgICAgdGhpcy5zaXplSW50ZXJmYWNlKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzaXplSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaXplSW50ZXJmYWNlKCkge1xuXHRcblx0ICAgICAgICBpZiAoIXRoaXMuc2V0dGluZ3Mub3JpZW50YXRpb24pIHtcblx0ICAgICAgICAgIGlmICh0aGlzLndpZHRoIDwgdGhpcy5oZWlnaHQpIHtcblx0ICAgICAgICAgICAgdGhpcy5vcmllbnRhdGlvbiA9IFwidmVydGljYWxcIjtcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMub3JpZW50YXRpb24gPSBcImhvcml6b250YWxcIjtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIHZhciB4ID0gdW5kZWZpbmVkLFxuXHQgICAgICAgICAgICB5ID0gdW5kZWZpbmVkLFxuXHQgICAgICAgICAgICB3ID0gdW5kZWZpbmVkLFxuXHQgICAgICAgICAgICBoID0gdW5kZWZpbmVkLFxuXHQgICAgICAgICAgICBiYXJPZmZzZXQgPSB1bmRlZmluZWQsXG5cdCAgICAgICAgICAgIGNvcm5lclJhZGl1cyA9IHVuZGVmaW5lZDtcblx0ICAgICAgICB0aGlzLmtub2JEYXRhID0ge1xuXHQgICAgICAgICAgbGV2ZWw6IDAsXG5cdCAgICAgICAgICByOiAwXG5cdCAgICAgICAgfTtcblx0XG5cdCAgICAgICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuXHQgICAgICAgICAgdGhpcy50aGlja25lc3MgPSB0aGlzLndpZHRoIC8gMjtcblx0ICAgICAgICAgIHggPSB0aGlzLndpZHRoIC8gMjtcblx0ICAgICAgICAgIHkgPSAwO1xuXHQgICAgICAgICAgdyA9IHRoaXMudGhpY2tuZXNzO1xuXHQgICAgICAgICAgaCA9IHRoaXMuaGVpZ2h0O1xuXHQgICAgICAgICAgdGhpcy5rbm9iRGF0YS5yID0gdGhpcy50aGlja25lc3MgKiAwLjg7XG5cdCAgICAgICAgICB0aGlzLmtub2JEYXRhLmxldmVsID0gaCAtIHRoaXMubm9ybWFsaXplZCAqIGg7XG5cdCAgICAgICAgICBiYXJPZmZzZXQgPSBcInRyYW5zbGF0ZShcIiArIHRoaXMudGhpY2tuZXNzICogLTEgLyAyICsgXCIsMClcIjtcblx0ICAgICAgICAgIGNvcm5lclJhZGl1cyA9IHcgLyAyO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLnRoaWNrbmVzcyA9IHRoaXMuaGVpZ2h0IC8gMjtcblx0ICAgICAgICAgIHggPSAwO1xuXHQgICAgICAgICAgeSA9IHRoaXMuaGVpZ2h0IC8gMjtcblx0ICAgICAgICAgIHcgPSB0aGlzLndpZHRoO1xuXHQgICAgICAgICAgaCA9IHRoaXMudGhpY2tuZXNzO1xuXHQgICAgICAgICAgdGhpcy5rbm9iRGF0YS5yID0gdGhpcy50aGlja25lc3MgKiAwLjg7XG5cdCAgICAgICAgICB0aGlzLmtub2JEYXRhLmxldmVsID0gdGhpcy5ub3JtYWxpemVkICogdztcblx0ICAgICAgICAgIGJhck9mZnNldCA9IFwidHJhbnNsYXRlKDAsXCIgKyB0aGlzLnRoaWNrbmVzcyAqIC0xIC8gMiArIFwiKVwiO1xuXHQgICAgICAgICAgY29ybmVyUmFkaXVzID0gaCAvIDI7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJ4XCIsIHgpO1xuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcInlcIiwgeSk7XG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsIGJhck9mZnNldCk7XG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwicnhcIiwgY29ybmVyUmFkaXVzKTsgLy8gY29ybmVyIHJhZGl1c1xuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcInJ5XCIsIGNvcm5lclJhZGl1cyk7XG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgdyk7XG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGgpO1xuXHRcblx0ICAgICAgICBpZiAodGhpcy5vcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG5cdCAgICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwieFwiLCB4KTtcblx0ICAgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJ5XCIsIHRoaXMua25vYkRhdGEubGV2ZWwpO1xuXHQgICAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIHcpO1xuXHQgICAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBoIC0gdGhpcy5rbm9iRGF0YS5sZXZlbCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJ4XCIsIDApO1xuXHQgICAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcInlcIiwgeSk7XG5cdCAgICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgdGhpcy5rbm9iRGF0YS5sZXZlbCk7XG5cdCAgICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmZpbGxiYXIuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsIGJhck9mZnNldCk7XG5cdCAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcInJ4XCIsIGNvcm5lclJhZGl1cyk7XG5cdCAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcInJ5XCIsIGNvcm5lclJhZGl1cyk7XG5cdFxuXHQgICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcblx0ICAgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJjeFwiLCB4KTtcblx0ICAgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJjeVwiLCB0aGlzLmtub2JEYXRhLmxldmVsKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImN4XCIsIHRoaXMua25vYkRhdGEubGV2ZWwpO1xuXHQgICAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImN5XCIsIHkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiclwiLCB0aGlzLmtub2JEYXRhLnIpO1xuXHRcblx0ICAgICAgICBpZiAodGhpcy5wb3NpdGlvbikge1xuXHQgICAgICAgICAgdGhpcy5wb3NpdGlvbi5yZXNpemUoWzAsIHRoaXMud2lkdGhdLCBbdGhpcy5oZWlnaHQsIDBdKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjb2xvckludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY29sb3JJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5jb2xvcnMuZmlsbCk7XG5cdCAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5jb2xvcnMuYWNjZW50KTtcblx0ICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB0aGlzLmNvbG9ycy5hY2NlbnQpO1xuXHQgICAgICAgIGlmICghdGhpcy5oYXNLbm9iKSB7XG5cdCAgICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCBcIm5vbmVcIik7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVuZGVyOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLmNsaWNrZWQpIHtcblx0ICAgICAgICAgIHRoaXMua25vYkRhdGEuciA9IHRoaXMudGhpY2tuZXNzICogMC43NTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcInJcIiwgdGhpcy5rbm9iRGF0YS5yKTtcblx0XG5cdCAgICAgICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuXHQgICAgICAgICAgdGhpcy5rbm9iRGF0YS5sZXZlbCA9IHRoaXMuX3ZhbHVlLm5vcm1hbGl6ZWQgKiB0aGlzLmhlaWdodDtcblx0ICAgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJjeVwiLCB0aGlzLmhlaWdodCAtIHRoaXMua25vYkRhdGEubGV2ZWwpO1xuXHQgICAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcInlcIiwgdGhpcy5oZWlnaHQgLSB0aGlzLmtub2JEYXRhLmxldmVsKTtcblx0ICAgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgdGhpcy5rbm9iRGF0YS5sZXZlbCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMua25vYkRhdGEubGV2ZWwgPSB0aGlzLl92YWx1ZS5ub3JtYWxpemVkICogdGhpcy53aWR0aDtcblx0ICAgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJjeFwiLCB0aGlzLmtub2JEYXRhLmxldmVsKTtcblx0ICAgICAgICAgIHRoaXMuZmlsbGJhci5zZXRBdHRyaWJ1dGUoXCJ4XCIsIDApO1xuXHQgICAgICAgICAgdGhpcy5maWxsYmFyLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIHRoaXMua25vYkRhdGEubGV2ZWwpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGRvd246IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRvd24oKSB7XG5cdCAgICAgICAgdGhpcy5jbGlja2VkID0gdHJ1ZTtcblx0ICAgICAgICB0aGlzLmtub2JEYXRhLnIgPSB0aGlzLnRoaWNrbmVzcyAqIDAuOTtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uLmFuY2hvciA9IHRoaXMubW91c2U7XG5cdCAgICAgICAgdGhpcy5zbGlkZSgpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2xpZGU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNsaWRlKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmNsaWNrZWQpIHtcblx0ICAgICAgICAgIHRoaXMucG9zaXRpb24udXBkYXRlKHRoaXMubW91c2UpO1xuXHQgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuX3ZhbHVlLnVwZGF0ZU5vcm1hbCh0aGlzLnBvc2l0aW9uLnZhbHVlKTtcblx0ICAgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB0aGlzLnZhbHVlKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICB1cDoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gdXAoKSB7XG5cdCAgICAgICAgdGhpcy5jbGlja2VkID0gZmFsc2U7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG5vcm1hbGl6ZWQ6IHtcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlLm5vcm1hbGl6ZWQ7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICB2YWx1ZToge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFRoZSBzbGlkZXIncyBjdXJyZW50IHZhbHVlLiBJZiBzZXQgbWFudWFsbHksIHdpbGwgdXBkYXRlIHRoZSBpbnRlcmZhY2UgYW5kIHRyaWdnZXIgdGhlIG91dHB1dCBldmVudC5cblx0ICAgICAgQHR5cGUge251bWJlcn1cblx0ICAgICAgQGV4YW1wbGUgc2xpZGVyLnZhbHVlID0gMTA7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUudmFsdWU7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcblx0ICAgICAgICB0aGlzLl92YWx1ZS51cGRhdGUodik7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvbi52YWx1ZSA9IHRoaXMuX3ZhbHVlLm5vcm1hbGl6ZWQ7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1pbjoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIExvd2VyIGxpbWl0IG9mIHRoZSBzbGlkZXJzJ3Mgb3V0cHV0IHJhbmdlXG5cdCAgICAgIEB0eXBlIHtudW1iZXJ9XG5cdCAgICAgIEBleGFtcGxlIHNsaWRlci5taW4gPSAxMDAwO1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlLm1pbjtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuXHQgICAgICAgIHRoaXMuX3ZhbHVlLm1pbiA9IHY7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtYXg6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBVcHBlciBsaW1pdCBvZiB0aGUgc2xpZGVyJ3Mgb3V0cHV0IHJhbmdlXG5cdCAgICAgIEB0eXBlIHtudW1iZXJ9XG5cdCAgICAgIEBleGFtcGxlIHNsaWRlci5tYXggPSAxMDAwO1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlLm1heDtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuXHQgICAgICAgIHRoaXMuX3ZhbHVlLm1heCA9IHY7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzdGVwOiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgVGhlIGluY3JlbWVudCB0aGF0IHRoZSBzbGlkZXIncyB2YWx1ZSBjaGFuZ2VzIGJ5LlxuXHQgICAgICBAdHlwZSB7bnVtYmVyfVxuXHQgICAgICBAZXhhbXBsZSBzbGlkZXIuc3RlcCA9IDU7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUuc3RlcDtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuXHQgICAgICAgIHRoaXMuX3ZhbHVlLnN0ZXAgPSB2O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbW9kZToge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIEFic29sdXRlIG1vZGUgKHNsaWRlcidzIHZhbHVlIGp1bXBzIHRvIG1vdXNlIGNsaWNrIHBvc2l0aW9uKSBvciByZWxhdGl2ZSBtb2RlIChtb3VzZSBkcmFnIGNoYW5nZXMgdmFsdWUgcmVsYXRpdmUgdG8gaXRzIGN1cnJlbnQgcG9zaXRpb24pLiBEZWZhdWx0OiBcInJlbGF0aXZlXCIuXG5cdCAgICAgIEB0eXBlIHtzdHJpbmd9XG5cdCAgICAgIEBleGFtcGxlIHNsaWRlci5tb2RlID0gXCJyZWxhdGl2ZVwiO1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ubW9kZTtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuXHQgICAgICAgIHRoaXMucG9zaXRpb24ubW9kZSA9IHY7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblx0XG5cdCAgcmV0dXJuIFNsaWRlclRlbXBsYXRlO1xuXHR9KShJbnRlcmZhY2UpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBTbGlkZXJUZW1wbGF0ZTtcblxuLyoqKi8gfSksXG4vKiAzMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH07XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGtleSBpbiBwcm9wcykgeyB2YXIgcHJvcCA9IHByb3BzW2tleV07IHByb3AuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKHByb3AudmFsdWUpIHByb3Aud3JpdGFibGUgPSB0cnVlOyB9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpOyB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHR2YXIgX2dldCA9IGZ1bmN0aW9uIGdldChvYmplY3QsIHByb3BlcnR5LCByZWNlaXZlcikgeyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IHJldHVybiBnZXQocGFyZW50LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpOyB9IH0gZWxzZSBpZiAoXCJ2YWx1ZVwiIGluIGRlc2MgJiYgZGVzYy53cml0YWJsZSkgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH07XG5cdFxuXHR2YXIgX2luaGVyaXRzID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH07XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH07XG5cdFxuXHR2YXIgc3ZnID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblx0dmFyIG1hdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xuXHR2YXIgSW50ZXJmYWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcblx0dmFyIFN0ZXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcblx0XG5cdHZhciBJbnRlcmFjdGlvbiA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9fd2VicGFja19yZXF1aXJlX18oMTIpKTtcblx0XG5cdC8qKlxuXHQqIFBhblxuXHQqXG5cdCogQGRlc2NyaXB0aW9uIFN0ZXJlbyBjcm9zc2ZhZGVyLlxuXHQqXG5cdCogQGRlbW8gPHNwYW4gbmV4dXMtdWk9XCJwYW5cIj48L3NwYW4+XG5cdCpcblx0KiBAZXhhbXBsZVxuXHQqIHZhciBwYW4gPSBuZXcgTmV4dXMuUGFuKCcjdGFyZ2V0Jylcblx0KlxuXHQqIEBvdXRwdXRcblx0KiBjaGFuZ2Vcblx0KiBGaXJlcyBhbnkgdGltZSB0aGUgaW50ZXJmYWNlJ3MgdmFsdWUgY2hhbmdlcy4gPGJyPlxuXHQqIFRoZSBldmVudCBkYXRhIGlzIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBpbnRlcmZhY2UncyA8aT52YWx1ZTwvaT4gKC0xIHRvIDEpLCBhcyB3ZWxsIGFzIDxpPkw8L2k+IGFuZCA8aT5SPC9pPiBhbXBsaXR1ZGUgdmFsdWVzICgwLTEpIGZvciBsZWZ0IGFuZCByaWdodCBzcGVha2VycywgY2FsY3VsYXRlZCBieSBhIHNxdWFyZS1yb290IGNyb3NzZmFkZSBhbGdvcml0aG0uXG5cdCpcblx0KiBAb3V0cHV0ZXhhbXBsZVxuXHQqIHBhbi5vbignY2hhbmdlJyxmdW5jdGlvbih2KSB7XG5cdCogICBjb25zb2xlLmxvZyh2KTtcblx0KiB9KVxuXHQqXG5cdCpcblx0Ki9cblx0XG5cdHZhciBQYW4gPSAoZnVuY3Rpb24gKF9JbnRlcmZhY2UpIHtcblx0ICBmdW5jdGlvbiBQYW4oKSB7XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUGFuKTtcblx0XG5cdCAgICB2YXIgb3B0aW9ucyA9IFtcInNjYWxlXCIsIFwidmFsdWVcIl07XG5cdFxuXHQgICAgdmFyIGRlZmF1bHRzID0ge1xuXHQgICAgICBzaXplOiBbMTIwLCAyMF0sXG5cdCAgICAgIG9yaWVudGF0aW9uOiBcImhvcml6b250YWxcIixcblx0ICAgICAgbW9kZTogXCJyZWxhdGl2ZVwiLFxuXHQgICAgICBzY2FsZTogWy0xLCAxXSxcblx0ICAgICAgc3RlcDogMCxcblx0ICAgICAgdmFsdWU6IDAsXG5cdCAgICAgIGhhc0tub2I6IHRydWVcblx0ICAgIH07XG5cdFxuXHQgICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoUGFuLnByb3RvdHlwZSksIFwiY29uc3RydWN0b3JcIiwgdGhpcykuY2FsbCh0aGlzLCBhcmd1bWVudHMsIG9wdGlvbnMsIGRlZmF1bHRzKTtcblx0XG5cdCAgICB0aGlzLm9yaWVudGF0aW9uID0gdGhpcy5zZXR0aW5ncy5vcmllbnRhdGlvbjtcblx0XG5cdCAgICB0aGlzLm1vZGUgPSB0aGlzLnNldHRpbmdzLm1vZGU7XG5cdFxuXHQgICAgdGhpcy5oYXNLbm9iID0gdGhpcy5zZXR0aW5ncy5oYXNLbm9iO1xuXHRcblx0ICAgIC8vIHRoaXMuc3RlcCBzaG91bGQgZXZlbnR1YWxseSBiZSBnZXQvc2V0XG5cdCAgICAvLyB1cGRhdGluZyBpdCB3aWxsIHVwZGF0ZSB0aGUgX3ZhbHVlIHN0ZXAgbW9kZWxcblx0ICAgIHRoaXMuc3RlcCA9IHRoaXMuc2V0dGluZ3Muc3RlcDsgLy8gZmxvYXRcblx0XG5cdCAgICB0aGlzLl92YWx1ZSA9IG5ldyBTdGVwKHRoaXMuc2V0dGluZ3Muc2NhbGVbMF0sIHRoaXMuc2V0dGluZ3Muc2NhbGVbMV0sIHRoaXMuc2V0dGluZ3Muc3RlcCwgdGhpcy5zZXR0aW5ncy52YWx1ZSk7XG5cdFxuXHQgICAgdGhpcy5pbml0KCk7XG5cdFxuXHQgICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBJbnRlcmFjdGlvbi5IYW5kbGUodGhpcy5tb2RlLCB0aGlzLm9yaWVudGF0aW9uLCBbMCwgdGhpcy53aWR0aF0sIFt0aGlzLmhlaWdodCwgMF0pO1xuXHQgICAgdGhpcy5wb3NpdGlvbi52YWx1ZSA9IHRoaXMuX3ZhbHVlLm5vcm1hbGl6ZWQ7XG5cdFxuXHQgICAgdGhpcy52YWx1ZSA9IHRoaXMuX3ZhbHVlLnZhbHVlO1xuXHRcblx0ICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB0aGlzLnZhbHVlKTtcblx0ICB9XG5cdFxuXHQgIF9pbmhlcml0cyhQYW4sIF9JbnRlcmZhY2UpO1xuXHRcblx0ICBfY3JlYXRlQ2xhc3MoUGFuLCB7XG5cdCAgICBidWlsZEludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIHRoaXMuYmFyID0gc3ZnLmNyZWF0ZShcInJlY3RcIik7XG5cdCAgICAgICAgdGhpcy5rbm9iID0gc3ZnLmNyZWF0ZShcImNpcmNsZVwiKTtcblx0XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuYmFyKTtcblx0ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5rbm9iKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNpemVJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNpemVJbnRlcmZhY2UoKSB7XG5cdFxuXHQgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uKSB7XG5cdCAgICAgICAgICB0aGlzLnBvc2l0aW9uLnJlc2l6ZShbMCwgdGhpcy53aWR0aF0sIFt0aGlzLmhlaWdodCwgMF0pO1xuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgaWYgKHRoaXMud2lkdGggPCB0aGlzLmhlaWdodCkge1xuXHQgICAgICAgICAgdGhpcy5vcmllbnRhdGlvbiA9IFwidmVydGljYWxcIjtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy5vcmllbnRhdGlvbiA9IFwiaG9yaXpvbnRhbFwiO1xuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgdmFyIHggPSB1bmRlZmluZWQsXG5cdCAgICAgICAgICAgIHkgPSB1bmRlZmluZWQsXG5cdCAgICAgICAgICAgIHcgPSB1bmRlZmluZWQsXG5cdCAgICAgICAgICAgIGggPSB1bmRlZmluZWQsXG5cdCAgICAgICAgICAgIGJhck9mZnNldCA9IHVuZGVmaW5lZCxcblx0ICAgICAgICAgICAgY29ybmVyUmFkaXVzID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIHRoaXMua25vYkRhdGEgPSB7XG5cdCAgICAgICAgICBsZXZlbDogMCxcblx0ICAgICAgICAgIHI6IDBcblx0ICAgICAgICB9O1xuXHRcblx0ICAgICAgICBpZiAodGhpcy5vcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG5cdCAgICAgICAgICB0aGlzLnRoaWNrbmVzcyA9IHRoaXMud2lkdGggLyAyO1xuXHQgICAgICAgICAgeCA9IHRoaXMud2lkdGggLyAyO1xuXHQgICAgICAgICAgeSA9IDA7XG5cdCAgICAgICAgICB3ID0gdGhpcy50aGlja25lc3M7XG5cdCAgICAgICAgICBoID0gdGhpcy5oZWlnaHQ7XG5cdCAgICAgICAgICB0aGlzLmtub2JEYXRhLnIgPSB0aGlzLnRoaWNrbmVzcyAqIDAuODtcblx0ICAgICAgICAgIHRoaXMua25vYkRhdGEubGV2ZWwgPSBoIC0gdGhpcy5rbm9iRGF0YS5yIC0gdGhpcy5ub3JtYWxpemVkICogKGggLSB0aGlzLmtub2JEYXRhLnIgKiAyKTtcblx0ICAgICAgICAgIGJhck9mZnNldCA9IFwidHJhbnNsYXRlKFwiICsgdGhpcy50aGlja25lc3MgKiAtMSAvIDIgKyBcIiwwKVwiO1xuXHQgICAgICAgICAgY29ybmVyUmFkaXVzID0gdyAvIDI7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMudGhpY2tuZXNzID0gdGhpcy5oZWlnaHQgLyAyO1xuXHQgICAgICAgICAgeCA9IDA7XG5cdCAgICAgICAgICB5ID0gdGhpcy5oZWlnaHQgLyAyO1xuXHQgICAgICAgICAgdyA9IHRoaXMud2lkdGg7XG5cdCAgICAgICAgICBoID0gdGhpcy50aGlja25lc3M7XG5cdCAgICAgICAgICB0aGlzLmtub2JEYXRhLnIgPSB0aGlzLnRoaWNrbmVzcyAqIDAuODtcblx0ICAgICAgICAgIHRoaXMua25vYkRhdGEubGV2ZWwgPSB0aGlzLm5vcm1hbGl6ZWQgKiAodyAtIHRoaXMua25vYkRhdGEuciAqIDIpICsgdGhpcy5rbm9iRGF0YS5yO1xuXHQgICAgICAgICAgYmFyT2Zmc2V0ID0gXCJ0cmFuc2xhdGUoMCxcIiArIHRoaXMudGhpY2tuZXNzICogLTEgLyAyICsgXCIpXCI7XG5cdCAgICAgICAgICBjb3JuZXJSYWRpdXMgPSBoIC8gMjtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIHRoaXMuYmFyLnNldEF0dHJpYnV0ZShcInhcIiwgeCk7XG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwieVwiLCB5KTtcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIiwgYmFyT2Zmc2V0KTtcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJyeFwiLCBjb3JuZXJSYWRpdXMpOyAvLyBjb3JuZXIgcmFkaXVzXG5cdCAgICAgICAgdGhpcy5iYXIuc2V0QXR0cmlidXRlKFwicnlcIiwgY29ybmVyUmFkaXVzKTtcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCB3KTtcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgaCk7XG5cdFxuXHQgICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcblx0ICAgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJjeFwiLCB4KTtcblx0ICAgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJjeVwiLCB0aGlzLmtub2JEYXRhLmxldmVsKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImN4XCIsIHRoaXMua25vYkRhdGEubGV2ZWwpO1xuXHQgICAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImN5XCIsIHkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiclwiLCB0aGlzLmtub2JEYXRhLnIpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29sb3JJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbG9ySW50ZXJmYWNlKCkge1xuXHRcblx0ICAgICAgICB0aGlzLmJhci5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLmZpbGwpO1xuXHQgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLmFjY2VudCk7XG5cdFxuXHQgICAgICAgIGlmICghdGhpcy5oYXNLbm9iKSB7XG5cdCAgICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlbmRlcjoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHQgICAgICAgIGlmICghdGhpcy5jbGlja2VkKSB7XG5cdCAgICAgICAgICB0aGlzLmtub2JEYXRhLnIgPSB0aGlzLnRoaWNrbmVzcyAqIDAuNzU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMua25vYi5zZXRBdHRyaWJ1dGUoXCJyXCIsIHRoaXMua25vYkRhdGEucik7XG5cdFxuXHQgICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcblx0ICAgICAgICAgIHRoaXMua25vYkRhdGEubGV2ZWwgPSB0aGlzLmtub2JEYXRhLnIgKyB0aGlzLl92YWx1ZS5ub3JtYWxpemVkICogKHRoaXMuaGVpZ2h0IC0gdGhpcy5rbm9iRGF0YS5yICogMik7XG5cdCAgICAgICAgICB0aGlzLmtub2Iuc2V0QXR0cmlidXRlKFwiY3lcIiwgdGhpcy5oZWlnaHQgLSB0aGlzLmtub2JEYXRhLmxldmVsKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy5rbm9iRGF0YS5sZXZlbCA9IHRoaXMuX3ZhbHVlLm5vcm1hbGl6ZWQgKiAodGhpcy53aWR0aCAtIHRoaXMua25vYkRhdGEuciAqIDIpICsgdGhpcy5rbm9iRGF0YS5yO1xuXHQgICAgICAgICAgdGhpcy5rbm9iLnNldEF0dHJpYnV0ZShcImN4XCIsIHRoaXMua25vYkRhdGEubGV2ZWwpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNsaWNrOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGljaygpIHtcblx0ICAgICAgICB0aGlzLmtub2JEYXRhLnIgPSB0aGlzLnRoaWNrbmVzcyAqIDAuOTtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uLmFuY2hvciA9IHRoaXMubW91c2U7XG5cdCAgICAgICAgdGhpcy5tb3ZlKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtb3ZlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBtb3ZlKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmNsaWNrZWQpIHtcblx0ICAgICAgICAgIHRoaXMucG9zaXRpb24udXBkYXRlKHRoaXMubW91c2UpO1xuXHRcblx0ICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLl92YWx1ZS51cGRhdGVOb3JtYWwodGhpcy5wb3NpdGlvbi52YWx1ZSk7XG5cdFxuXHQgICAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHtcblx0ICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG5cdCAgICAgICAgICAgIEw6IE1hdGgucG93KG1hdGguc2NhbGUodGhpcy52YWx1ZSwgLTEsIDEsIDEsIDApLCAyKSxcblx0ICAgICAgICAgICAgUjogTWF0aC5wb3cobWF0aC5zY2FsZSh0aGlzLnZhbHVlLCAtMSwgMSwgMCwgMSksIDIpXG5cdCAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByZWxlYXNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWxlYXNlKCkge1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICB2YWx1ZToge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFRoZSBwb3NpdGlvbiBvZiBjcm9zc2ZhZGVyLCBmcm9tIC0xIChsZWZ0KSB0byAxIChyaWdodCkuIFNldHRpbmcgdGhpcyB2YWx1ZSB1cGRhdGVzIHRoZSBpbnRlcmZhY2UgYW5kIHRyaWdnZXJzIHRoZSBvdXRwdXQgZXZlbnQuXG5cdCAgICAgIEB0eXBlIHtudW1iZXJ9XG5cdCAgICAgICovXG5cdFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUudmFsdWU7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgdGhpcy5fdmFsdWUudXBkYXRlKHZhbHVlKTtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uLnZhbHVlID0gdGhpcy5fdmFsdWUubm9ybWFsaXplZDtcblx0ICAgICAgICB0aGlzLmVtaXQoXCJjaGFuZ2VcIiwge1xuXHQgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG5cdCAgICAgICAgICBMOiBNYXRoLnBvdyhtYXRoLnNjYWxlKHRoaXMudmFsdWUsIC0xLCAxLCAxLCAwKSwgMiksXG5cdCAgICAgICAgICBSOiBNYXRoLnBvdyhtYXRoLnNjYWxlKHRoaXMudmFsdWUsIC0xLCAxLCAwLCAxKSwgMilcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbm9ybWFsaXplZDoge1xuXHQgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUubm9ybWFsaXplZDtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pO1xuXHRcblx0ICByZXR1cm4gUGFuO1xuXHR9KShJbnRlcmZhY2UpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBQYW47XG5cbi8qKiovIH0pLFxuLyogMzQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7IH0gfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gZGVzYyAmJiBkZXNjLndyaXRhYmxlKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfTtcblx0XG5cdHZhciBfaW5oZXJpdHMgPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBtYXRoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcblx0dmFyIHN2ZyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cdHZhciBJbnRlcmZhY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xuXHRcblx0dmFyIFBvaW50ID0gZnVuY3Rpb24gUG9pbnQocG9pbnQsIGVudmVsb3BlKSB7XG5cdFxuXHQgIHRoaXMueCA9IHBvaW50Lng7XG5cdCAgdGhpcy55ID0gcG9pbnQueTtcblx0ICB0aGlzLmVudmVsb3BlID0gZW52ZWxvcGU7XG5cdFxuXHQgIHRoaXMuZWxlbWVudCA9IHN2Zy5jcmVhdGUoXCJjaXJjbGVcIik7XG5cdCAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdGhpcy5lbnZlbG9wZS5jb2xvcnMuYWNjZW50KTtcblx0XG5cdCAgdGhpcy5lbnZlbG9wZS5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7XG5cdFxuXHQgIHRoaXMucmVzaXplID0gZnVuY3Rpb24gKCkge1xuXHQgICAgdmFyIHIgPSB+IH4oTWF0aC5taW4odGhpcy5lbnZlbG9wZS53aWR0aCwgdGhpcy5lbnZlbG9wZS5oZWlnaHQpIC8gNTApICsgMjtcblx0ICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJyXCIsIHIpO1xuXHQgIH07XG5cdFxuXHQgIHRoaXMubW92ZSA9IGZ1bmN0aW9uICh4LCB5KSB7XG5cdFxuXHQgICAgdGhpcy54ID0geCB8fCB4ID09PSAwID8geCA6IHRoaXMueDtcblx0ICAgIHRoaXMueSA9IHkgfHwgeSA9PT0gMCA/IHkgOiB0aGlzLnk7XG5cdFxuXHQgICAgaWYgKHRoaXMuZW52ZWxvcGUubm9kZXMuaW5kZXhPZih0aGlzKSA+PSAwKSB7XG5cdFxuXHQgICAgICB2YXIgcHJldkluZGV4ID0gdGhpcy5lbnZlbG9wZS5ub2Rlcy5pbmRleE9mKHRoaXMpIC0gMTtcblx0ICAgICAgdmFyIG5leHRJbmRleCA9IHRoaXMuZW52ZWxvcGUubm9kZXMuaW5kZXhPZih0aGlzKSArIDE7XG5cdFxuXHQgICAgICB2YXIgcHJldk5vZGUgPSB0aGlzLmVudmVsb3BlLm5vZGVzW3ByZXZJbmRleF07XG5cdCAgICAgIHZhciBuZXh0Tm9kZSA9IHRoaXMuZW52ZWxvcGUubm9kZXNbbmV4dEluZGV4XTtcblx0XG5cdCAgICAgIHZhciBsb3dYID0gcHJldkluZGV4ID49IDAgPyBwcmV2Tm9kZS54IDogMDtcblx0ICAgICAgdmFyIGhpZ2hYID0gbmV4dEluZGV4IDwgdGhpcy5lbnZlbG9wZS5ub2Rlcy5sZW5ndGggPyBuZXh0Tm9kZS54IDogMTtcblx0XG5cdCAgICAgIGlmICh0aGlzLnggPCBsb3dYKSB7XG5cdCAgICAgICAgdGhpcy54ID0gbG93WDtcblx0ICAgICAgfVxuXHQgICAgICBpZiAodGhpcy54ID4gaGlnaFgpIHtcblx0ICAgICAgICB0aGlzLnggPSBoaWdoWDtcblx0ICAgICAgfVxuXHQgICAgfVxuXHRcblx0ICAgIHRoaXMubG9jYXRpb24gPSB0aGlzLmdldENvb3JkaW5hdGVzKCk7XG5cdCAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY3hcIiwgdGhpcy5sb2NhdGlvbi54KTtcblx0ICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJjeVwiLCB0aGlzLmxvY2F0aW9uLnkpO1xuXHQgIH07XG5cdFxuXHQgIHRoaXMuZ2V0Q29vcmRpbmF0ZXMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICB4OiB0aGlzLnggKiB0aGlzLmVudmVsb3BlLndpZHRoLFxuXHQgICAgICB5OiAoMSAtIHRoaXMueSkgKiB0aGlzLmVudmVsb3BlLmhlaWdodFxuXHQgICAgfTtcblx0ICB9O1xuXHRcblx0ICB0aGlzLm1vdmUodGhpcy54LCB0aGlzLnksIHRydWUpO1xuXHQgIHRoaXMucmVzaXplKCk7XG5cdFxuXHQgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIHRoaXMuZW52ZWxvcGUuZWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQpO1xuXHQgICAgdGhpcy5lbnZlbG9wZS5ub2Rlcy5zcGxpY2UodGhpcy5lbnZlbG9wZS5ub2Rlcy5pbmRleE9mKHRoaXMpLCAxKTtcblx0ICB9O1xuXHR9O1xuXHRcblx0LyoqXG5cdCogRW52ZWxvcGVcblx0KlxuXHQqIEBkZXNjcmlwdGlvbiBJbnRlcmFjdGl2ZSBsaW5lYXIgcmFtcCB2aXN1YWxpemF0aW9uLlxuXHQqXG5cdCogQGRlbW8gPHNwYW4gbmV4dXMtdWk9XCJlbnZlbG9wZVwiPjwvc3Bhbj5cblx0KlxuXHQqIEBleGFtcGxlXG5cdCogdmFyIGVudmVsb3BlID0gbmV3IE5leHVzLkVudmVsb3BlKCcjdGFyZ2V0Jylcblx0KlxuXHQqIEBleGFtcGxlXG5cdCogdmFyIGVudmVsb3BlID0gbmV3IE5leHVzLkVudmVsb3BlKCcjdGFyZ2V0Jyx7XG5cdCogICAnc2l6ZSc6IFszMDAsMTUwXSxcblx0KiAgICdwb2ludHMnOiBbXG5cdCogICAgIHtcblx0KiAgICAgICB4OiAwLjEsXG5cdCogICAgICAgeTogMC40XG5cdCogICAgIH0sXG5cdCogICAgIHtcblx0KiAgICAgICB4OiAwLjM1LFxuXHQqICAgICAgIHk6IDAuNlxuXHQqICAgICB9LFxuXHQqICAgICB7XG5cdCogICAgICAgeDogMC42NSxcblx0KiAgICAgICB5OiAwLjJcblx0KiAgICAgfSxcblx0KiAgICAge1xuXHQqICAgICAgIHg6IDAuOSxcblx0KiAgICAgICB5OiAwLjRcblx0KiAgICAgfSxcblx0KiAgIF1cblx0KiB9KVxuXHQqXG5cdCogQG91dHB1dFxuXHQqIGNoYW5nZVxuXHQqIEZpcmVzIGFueSB0aW1lIGEgbm9kZSBpcyBtb3ZlZC4gPGJyPlxuXHQqIFRoZSBldmVudCBkYXRhIGlzIGFuIGFycmF5IG9mIHBvaW50IGxvY2F0aW9ucy4gRWFjaCBpdGVtIGluIHRoZSBhcnJheSBpcyBhbiBvYmplY3QgY29udGFpbmluZyA8aT54PC9pPiBhbmQgPGk+eTwvaT4gcHJvcGVydGllcyBkZXNjcmliaW5nIHRoZSBsb2NhdGlvbiBvZiBhIHBvaW50IG9uIHRoZSBlbnZlbG9wZS5cblx0KlxuXHQqIEBvdXRwdXRleGFtcGxlXG5cdCogZW52ZWxvcGUub24oJ2NoYW5nZScsZnVuY3Rpb24odikge1xuXHQqICAgY29uc29sZS5sb2codik7XG5cdCogfSlcblx0KlxuXHQqL1xuXHRcblx0dmFyIEVudmVsb3BlID0gKGZ1bmN0aW9uIChfSW50ZXJmYWNlKSB7XG5cdCAgZnVuY3Rpb24gRW52ZWxvcGUoKSB7XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRW52ZWxvcGUpO1xuXHRcblx0ICAgIHZhciBvcHRpb25zID0gW1widmFsdWVcIl07XG5cdFxuXHQgICAgdmFyIGRlZmF1bHRzID0ge1xuXHQgICAgICBzaXplOiBbMzAwLCAxNTBdLFxuXHQgICAgICBwb2ludHM6IFt7XG5cdCAgICAgICAgeDogMC4xLFxuXHQgICAgICAgIHk6IDAuNFxuXHQgICAgICB9LCB7XG5cdCAgICAgICAgeDogMC4zNSxcblx0ICAgICAgICB5OiAwLjZcblx0ICAgICAgfSwge1xuXHQgICAgICAgIHg6IDAuNjUsXG5cdCAgICAgICAgeTogMC4yXG5cdCAgICAgIH0sIHtcblx0ICAgICAgICB4OiAwLjksXG5cdCAgICAgICAgeTogMC40XG5cdCAgICAgIH1dXG5cdCAgICB9O1xuXHRcblx0ICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKEVudmVsb3BlLnByb3RvdHlwZSksIFwiY29uc3RydWN0b3JcIiwgdGhpcykuY2FsbCh0aGlzLCBhcmd1bWVudHMsIG9wdGlvbnMsIGRlZmF1bHRzKTtcblx0XG5cdCAgICB0aGlzLnBvaW50cyA9IHRoaXMuc2V0dGluZ3MucG9pbnRzO1xuXHRcblx0ICAgIHRoaXMubm9kZXMgPSBbXTtcblx0XG5cdCAgICB0aGlzLnNlbGVjdGVkID0gZmFsc2U7XG5cdFxuXHQgICAgdGhpcy5pbml0KCk7XG5cdCAgfVxuXHRcblx0ICBfaW5oZXJpdHMoRW52ZWxvcGUsIF9JbnRlcmZhY2UpO1xuXHRcblx0ICBfY3JlYXRlQ2xhc3MoRW52ZWxvcGUsIHtcblx0ICAgIGJ1aWxkSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEludGVyZmFjZSgpIHtcblx0ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXHRcblx0ICAgICAgICB0aGlzLnBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uIChwb2ludCkge1xuXHQgICAgICAgICAgdmFyIG5vZGUgPSBuZXcgUG9pbnQocG9pbnQsIF90aGlzKTtcblx0ICAgICAgICAgIF90aGlzLm5vZGVzLnB1c2gobm9kZSk7XG5cdCAgICAgICAgfSk7XG5cdFxuXHQgICAgICAgIHRoaXMuc29ydFBvaW50cygpO1xuXHRcblx0ICAgICAgICB0aGlzLmxpbmUgPSBzdmcuY3JlYXRlKFwicG9seWxpbmVcIik7XG5cdCAgICAgICAgdGhpcy5saW5lLnNldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiLCAyKTtcblx0ICAgICAgICB0aGlzLmxpbmUuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCBcIm5vbmVcIik7XG5cdFxuXHQgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmxpbmUpO1xuXHRcblx0ICAgICAgICB0aGlzLmZpbGwgPSBzdmcuY3JlYXRlKFwicG9seWxpbmVcIik7XG5cdCAgICAgICAgdGhpcy5maWxsLnNldEF0dHJpYnV0ZShcImZpbGwtb3BhY2l0eVwiLCBcIjAuMlwiKTtcblx0XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZmlsbCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzaXplSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaXplSW50ZXJmYWNlKCkge1xuXHRcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgIHRoaXMubm9kZXNbaV0ucmVzaXplKCk7XG5cdCAgICAgICAgICB0aGlzLm5vZGVzW2ldLm1vdmUoKTtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjb2xvckludGVyZmFjZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY29sb3JJbnRlcmZhY2UoKSB7XG5cdCAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblx0XG5cdCAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuY29sb3JzLmZpbGw7XG5cdCAgICAgICAgdGhpcy5saW5lLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCB0aGlzLmNvbG9ycy5hY2NlbnQpO1xuXHQgICAgICAgIHRoaXMuZmlsbC5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIHRoaXMuY29sb3JzLmFjY2VudCk7XG5cdCAgICAgICAgdGhpcy5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgICBub2RlLmVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCBfdGhpcy5jb2xvcnMuYWNjZW50KTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlbmRlcjoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHQgICAgICAgIC8vICB0aGlzLm5vZGVzW3RoaXMuc2VsZWN0ZWRdLm1vdmUoIHRoaXMucG9pbnRzIClcblx0ICAgICAgICB0aGlzLmNhbGN1bGF0ZVBhdGgoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNhbGN1bGF0ZVBvaW50czoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY2FsY3VsYXRlUG9pbnRzKCkge1xuXHQgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cdFxuXHQgICAgICAgIHRoaXMucG9pbnRzID0gW107XG5cdCAgICAgICAgdGhpcy5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgICBfdGhpcy5wb2ludHMucHVzaCh7IHg6IG5vZGUueCwgeTogbm9kZS55IH0pO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY2FsY3VsYXRlUGF0aDoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY2FsY3VsYXRlUGF0aCgpIHtcblx0XG5cdCAgICAgICAgLy9zdHJva2UgZGF0YVxuXHQgICAgICAgIHZhciBkYXRhID0gXCIwIFwiICsgdGhpcy5ub2Rlc1swXS5sb2NhdGlvbi55ICsgXCIsIFwiO1xuXHRcblx0ICAgICAgICAvLyBkYXRhIHNob3VsZCBiZSByZS1vcmRlcmVkIGJhc2VkIG9uIHggbG9jYXRpb24uXG5cdCAgICAgICAgLy8gd2hhdGV2ZXIgZnVuY3Rpb24gYWRkcyBhIG5vZGUgc2hvdWxkIGFkZCBpdCBhdCB0aGUgcmlnaHQgaW5kZXhcblx0XG5cdCAgICAgICAgdGhpcy5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgICAvLyAgbGV0IGxvY2F0aW9uID0gbm9kZS5nZXRDb29yZGluYXRlcygpO1xuXHQgICAgICAgICAgZGF0YSArPSBub2RlLmxvY2F0aW9uLnggKyBcIiBcIiArIG5vZGUubG9jYXRpb24ueSArIFwiLCBcIjtcblx0ICAgICAgICB9KTtcblx0XG5cdCAgICAgICAgLy8gIGRhdGEgKz0gcG9pbnQueCp0aGlzLndpZHRoKycgJysgcG9pbnQueSp0aGlzLmhlaWdodCsnLCAnO1xuXHQgICAgICAgIGRhdGEgKz0gdGhpcy53aWR0aCArIFwiIFwiICsgdGhpcy5ub2Rlc1t0aGlzLm5vZGVzLmxlbmd0aCAtIDFdLmxvY2F0aW9uLnk7XG5cdFxuXHQgICAgICAgIHRoaXMubGluZS5zZXRBdHRyaWJ1dGUoXCJwb2ludHNcIiwgZGF0YSk7XG5cdFxuXHQgICAgICAgIC8vIGZpbGwgZGF0YVxuXHQgICAgICAgIC8vIGFkZCBib3R0b20gY29ybmVyc1xuXHRcblx0ICAgICAgICBkYXRhICs9IFwiLCBcIiArIHRoaXMud2lkdGggKyBcIiBcIiArIHRoaXMuaGVpZ2h0ICsgXCIsIFwiO1xuXHQgICAgICAgIGRhdGEgKz0gXCIwIFwiICsgdGhpcy5oZWlnaHQ7XG5cdFxuXHQgICAgICAgIHRoaXMuZmlsbC5zZXRBdHRyaWJ1dGUoXCJwb2ludHNcIiwgZGF0YSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjbGljazoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xpY2soKSB7XG5cdCAgICAgICAgLy8gZmluZCBuZWFyZXN0IG5vZGUgYW5kIHNldCB0aGlzLnNlbGVjdGVkIChpbmRleClcblx0ICAgICAgICB0aGlzLmhhc01vdmVkID0gZmFsc2U7XG5cdCAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMuZmluZE5lYXJlc3ROb2RlKCk7XG5cdFxuXHQgICAgICAgIHRoaXMubm9kZXNbdGhpcy5zZWxlY3RlZF0ubW92ZSh0aGlzLm1vdXNlLnggLyB0aGlzLndpZHRoLCAxIC0gdGhpcy5tb3VzZS55IC8gdGhpcy5oZWlnaHQpO1xuXHQgICAgICAgIHRoaXMuc2NhbGVOb2RlKHRoaXMuc2VsZWN0ZWQpO1xuXHRcblx0ICAgICAgICAvLyBtdXN0IGRvIHRoaXMgYi9jIG5ldyBub2RlIG1heSBoYXZlIGJlZW4gY3JlYXRlZFxuXHQgICAgICAgIHRoaXMuY2FsY3VsYXRlUG9pbnRzKCk7XG5cdCAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMucG9pbnRzKTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbW92ZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gbW92ZSgpIHtcblx0ICAgICAgICBpZiAodGhpcy5jbGlja2VkKSB7XG5cdCAgICAgICAgICB0aGlzLm1vdXNlLnggPSBtYXRoLmNsaXAodGhpcy5tb3VzZS54LCAwLCB0aGlzLndpZHRoKTtcblx0ICAgICAgICAgIHRoaXMuaGFzTW92ZWQgPSB0cnVlO1xuXHRcblx0ICAgICAgICAgIHRoaXMubm9kZXNbdGhpcy5zZWxlY3RlZF0ubW92ZSh0aGlzLm1vdXNlLnggLyB0aGlzLndpZHRoLCAxIC0gdGhpcy5tb3VzZS55IC8gdGhpcy5oZWlnaHQpO1xuXHQgICAgICAgICAgdGhpcy5zY2FsZU5vZGUodGhpcy5zZWxlY3RlZCk7XG5cdFxuXHQgICAgICAgICAgdGhpcy5jYWxjdWxhdGVQb2ludHMoKTtcblx0ICAgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB0aGlzLnBvaW50cyk7XG5cdCAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlbGVhc2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbGVhc2UoKSB7XG5cdFxuXHQgICAgICAgIGlmICghdGhpcy5oYXNNb3ZlZCkge1xuXHQgICAgICAgICAgdGhpcy5ub2Rlc1t0aGlzLnNlbGVjdGVkXS5kZXN0cm95KCk7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICB0aGlzLmNhbGN1bGF0ZVBvaW50cygpO1xuXHQgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB0aGlzLnBvaW50cyk7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0XG5cdCAgICAgICAgLy8gcmVzZXQgdGhpcy5zZWxlY3RlZFxuXHQgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBudWxsO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZmluZE5lYXJlc3ROb2RlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBmaW5kTmVhcmVzdE5vZGUoKSB7XG5cdCAgICAgICAgdmFyIG5lYXJlc3RJbmRleCA9IG51bGw7XG5cdCAgICAgICAgLy8gc2V0IHRoaXMgdW5yZWFzb25hYmx5IGhpZ2ggc28gdGhhdCBldmVyeSBkaXN0YW5jZSB3aWxsIGJlIGxvd2VyIHRoYW4gaXQuXG5cdCAgICAgICAgdmFyIG5lYXJlc3REaXN0ID0gMTAwMDA7XG5cdCAgICAgICAgdmFyIGJlZm9yZSA9IGZhbHNlO1xuXHQgICAgICAgIHZhciB4ID0gdGhpcy5tb3VzZS54IC8gdGhpcy53aWR0aDtcblx0ICAgICAgICB2YXIgeSA9IDEgLSB0aGlzLm1vdXNlLnkgLyB0aGlzLmhlaWdodDtcblx0ICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLm5vZGVzO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcblx0XG5cdCAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGZyb20gbW91c2UgdG8gdGhpcyBub2RlIHVzaW5nIHB5dGhhZ29yZWFuIHRoZW9yZW1cblx0ICAgICAgICAgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydChNYXRoLnBvdyhub2Rlc1tpXS54IC0geCwgMikgKyBNYXRoLnBvdyhub2Rlc1tpXS55IC0geSwgMikpO1xuXHRcblx0ICAgICAgICAgIC8vIGlmIHRoaXMgZGlzdGFuY2UgaXMgbGVzcyB0aGFuIHRoZSBwcmV2aW91cyBzaG9ydGVzdCBkaXN0YW5jZSwgdXNlIHRoaXMgaW5kZXhcblx0ICAgICAgICAgIGlmIChkaXN0YW5jZSA8IG5lYXJlc3REaXN0KSB7XG5cdCAgICAgICAgICAgIG5lYXJlc3REaXN0ID0gZGlzdGFuY2U7XG5cdCAgICAgICAgICAgIG5lYXJlc3RJbmRleCA9IGk7XG5cdCAgICAgICAgICAgIGJlZm9yZSA9IHggPiBub2Rlc1tpXS54O1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgLy8gaWYgbm90IHZlcnkgY2xvc2UgdG8gYW55IG5vZGUsIGNyZWF0ZSBhIG5vZGVcblx0ICAgICAgICBpZiAobmVhcmVzdERpc3QgPiAwLjA3KSB7XG5cdFxuXHQgICAgICAgICAgbmVhcmVzdEluZGV4ID0gdGhpcy5nZXRJbmRleEZyb21YKHRoaXMubW91c2UueCAvIHRoaXMud2lkdGgpO1xuXHRcblx0ICAgICAgICAgIHRoaXMubm9kZXMuc3BsaWNlKG5lYXJlc3RJbmRleCwgMCwgbmV3IFBvaW50KHtcblx0ICAgICAgICAgICAgeDogdGhpcy5tb3VzZS54IC8gdGhpcy53aWR0aCxcblx0ICAgICAgICAgICAgeTogMSAtIHRoaXMubW91c2UueSAvIHRoaXMuaGVpZ2h0XG5cdCAgICAgICAgICB9LCB0aGlzKSk7XG5cdCAgICAgICAgICB0aGlzLmhhc01vdmVkID0gdHJ1ZTtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIHJldHVybiBuZWFyZXN0SW5kZXg7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBnZXRJbmRleEZyb21YOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbmRleEZyb21YKHgpIHtcblx0ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXHRcblx0ICAgICAgICB2YXIgaW5kZXggPSAwO1xuXHQgICAgICAgIHRoaXMubm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSwgaSkge1xuXHQgICAgICAgICAgaWYgKF90aGlzLm5vZGVzW2ldLnggPD0geCkge1xuXHQgICAgICAgICAgICBpbmRleCA9IGkgKyAxO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiBpbmRleDtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNjYWxlTm9kZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc2NhbGVOb2RlKGkpIHtcblx0XG5cdCAgICAgICAgdmFyIGNsaXBwZWRYID0gbWF0aC5jbGlwKHRoaXMubm9kZXNbaV0ueCwgMCwgMSk7XG5cdCAgICAgICAgdmFyIGNsaXBwZWRZID0gbWF0aC5jbGlwKHRoaXMubm9kZXNbaV0ueSwgMCwgMSk7XG5cdFxuXHQgICAgICAgIHRoaXMubm9kZXNbaV0ubW92ZShjbGlwcGVkWCwgY2xpcHBlZFkpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc29ydFBvaW50czoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFNvcnQgdGhlIHRoaXMucG9pbnRzIGFycmF5IGZyb20gbGVmdC1tb3N0IHBvaW50IHRvIHJpZ2h0LW1vc3QgcG9pbnQuIFlvdSBzaG91bGQgbm90IHJlZ3VsYXJseSBuZWVkIHRvIHVzZSB0aGlzLCBob3dldmVyIGl0IG1heSBiZSB1c2VmdWwgaWYgdGhlIHBvaW50cyBnZXQgdW5vcmRlcmVkLlxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNvcnRQb2ludHMoKSB7XG5cdCAgICAgICAgdGhpcy5ub2Rlcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG5cdCAgICAgICAgICByZXR1cm4gYS54ID4gYi54O1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgYWRkUG9pbnQ6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBBZGQgYSBicmVha3BvaW50IG9uIHRoZSBlbnZlbG9wZS5cblx0ICAgICAgQHBhcmFtIHgge251bWJlcn0geCBsb2NhdGlvbiBvZiB0aGUgcG9pbnQsIG5vcm1hbGl6ZWQgKDAtMSlcblx0ICAgICAgQHBhcmFtIHkge251bWJlcn0geSBsb2NhdGlvbiBvZiB0aGUgcG9pbnQsIG5vcm1hbGl6ZWQgKDAtMSlcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRQb2ludCh4LCB5KSB7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5ub2Rlcy5sZW5ndGg7XG5cdFxuXHQgICAgICAgIHRoaXMuc29ydFBvaW50cygpO1xuXHRcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgIGlmICh4IDwgdGhpcy5ub2Rlc1tpXS54KSB7XG5cdCAgICAgICAgICAgIGluZGV4ID0gaTtcblx0ICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICB0aGlzLm5vZGVzLnNwbGljZShpbmRleCwgMCwgbmV3IFBvaW50KHtcblx0ICAgICAgICAgIHg6IHgsXG5cdCAgICAgICAgICB5OiB5XG5cdCAgICAgICAgfSwgdGhpcykpO1xuXHRcblx0ICAgICAgICB0aGlzLnNjYWxlTm9kZShpbmRleCk7XG5cdFxuXHQgICAgICAgIHRoaXMuY2FsY3VsYXRlUG9pbnRzKCk7XG5cdCAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMucG9pbnRzKTtcblx0XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNjYW46IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBGaW5kIHRoZSBsZXZlbCBhdCBhIGNlcnRhaW4geCBsb2NhdGlvbiBvbiB0aGUgZW52ZWxvcGUuXG5cdCAgICAgIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSB4IGxvY2F0aW9uIHRvIGZpbmQgdGhlIGxldmVsIG9mLCBub3JtYWxpemVkIDAtMVxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNjYW4oeCkge1xuXHQgICAgICAgIC8vIGZpbmQgc3Vycm91bmRpbmcgcG9pbnRzXG5cdCAgICAgICAgdmFyIG5leHRJbmRleCA9IHRoaXMuZ2V0SW5kZXhGcm9tWCh4KTtcblx0ICAgICAgICB2YXIgcHJpb3JJbmRleCA9IG5leHRJbmRleCAtIDE7XG5cdCAgICAgICAgaWYgKHByaW9ySW5kZXggPCAwKSB7XG5cdCAgICAgICAgICBwcmlvckluZGV4ID0gMDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKG5leHRJbmRleCA+PSB0aGlzLm5vZGVzLmxlbmd0aCkge1xuXHQgICAgICAgICAgbmV4dEluZGV4ID0gdGhpcy5ub2Rlcy5sZW5ndGggLSAxO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcHJpb3JQb2ludCA9IHRoaXMubm9kZXNbcHJpb3JJbmRleF07XG5cdCAgICAgICAgdmFyIG5leHRQb2ludCA9IHRoaXMubm9kZXNbbmV4dEluZGV4XTtcblx0ICAgICAgICB2YXIgbG9jID0gbWF0aC5zY2FsZSh4LCBwcmlvclBvaW50LngsIG5leHRQb2ludC54LCAwLCAxKTtcblx0ICAgICAgICB2YXIgdmFsdWUgPSBtYXRoLmludGVycChsb2MsIHByaW9yUG9pbnQueSwgbmV4dFBvaW50LnkpO1xuXHQgICAgICAgIHRoaXMuZW1pdChcInNjYW5cIiwgdmFsdWUpO1xuXHQgICAgICAgIHJldHVybiB2YWx1ZTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1vdmVQb2ludDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIE1vdmUgYSBicmVha3BvaW50IG9uIHRoZSBlbnZlbG9wZS5cblx0ICAgICAgQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCBvZiB0aGUgYnJlYWtwb2ludCB0byBtb3ZlXG5cdCAgICAgIEBwYXJhbSB4IHtudW1iZXJ9IE5ldyB4IGxvY2F0aW9uLCBub3JtYWxpemVkIDAtMVxuXHQgICAgICBAcGFyYW0geSB7bnVtYmVyfSBOZXcgeSBsb2NhdGlvbiwgbm9ybWFsaXplZCAwLTFcblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBtb3ZlUG9pbnQoaW5kZXgsIHgsIHkpIHtcblx0ICAgICAgICB0aGlzLm5vZGVzW2luZGV4XS5tb3ZlKHgsIHkpO1xuXHQgICAgICAgIHRoaXMuc2NhbGVOb2RlKGluZGV4KTtcblx0ICAgICAgICB0aGlzLmNhbGN1bGF0ZVBvaW50cygpO1xuXHQgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB0aGlzLnBvaW50cyk7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGFkanVzdFBvaW50OiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgTW92ZSBhIGJyZWFrcG9pbnQgb24gdGhlIGVudmVsb3BlIGJ5IGEgY2VydGFpbiBhbW91bnQuXG5cdCAgICAgIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggb2YgdGhlIGJyZWFrcG9pbnQgdG8gbW92ZVxuXHQgICAgICBAcGFyYW0geE9mZnNldCB7bnVtYmVyfSBYIGRpc3BsYWNlbWVudCwgbm9ybWFsaXplZCAwLTFcblx0ICAgICAgQHBhcmFtIHlPZmZzZXQge251bWJlcn0gWSBkaXNwbGFjZW1lbnQsIG5vcm1hbGl6ZWQgMC0xXG5cdCAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gYWRqdXN0UG9pbnQoaW5kZXgsIHhPZmZzZXQsIHlPZmZzZXQpIHtcblx0ICAgICAgICB0aGlzLm5vZGVzW2luZGV4XS5tb3ZlKHRoaXMubm9kZXNbaW5kZXhdLnggKyB4T2Zmc2V0LCB0aGlzLm5vZGVzW2luZGV4XS55ICsgeU9mZnNldCk7XG5cdCAgICAgICAgdGhpcy5zY2FsZU5vZGUoaW5kZXgpO1xuXHQgICAgICAgIHRoaXMuY2FsY3VsYXRlUG9pbnRzKCk7XG5cdCAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHRoaXMucG9pbnRzKTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZGVzdHJveVBvaW50OiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgUmVtb3ZlIGEgYnJlYWtwb2ludCBmcm9tIHRoZSBlbnZlbG9wZS5cblx0ICAgICAgQHBhcmFtIGluZGV4IHtudW1iZXJ9IEluZGV4IG9mIHRoZSBicmVha3BvaW50IHRvIHJlbW92ZVxuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRlc3Ryb3lQb2ludChpbmRleCkge1xuXHQgICAgICAgIHRoaXMubm9kZXNbaW5kZXhdLmRlc3Ryb3koKTtcblx0ICAgICAgICB0aGlzLmNhbGN1bGF0ZVBvaW50cygpO1xuXHQgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB0aGlzLnBvaW50cyk7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNldFBvaW50czoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIFJlbW92ZSBhbGwgZXhpc3RpbmcgYnJlYWtwb2ludHMgYW5kIGFkZCBhbiBlbnRpcmVseSBuZXcgc2V0IG9mIGJyZWFrcG9pbnRzLlxuXHQgICAgICBAcGFyYW0gYWxsUG9pbnRzIHthcnJheX0gQW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIHgveSBwcm9wZXJ0aWVzIChub3JtYWxpemVkIDAtMSkuIEVhY2ggb2JqZWN0IGluIHRoZSBhcnJheSBzcGVjaWZpY2VzIHRoZSB4L3kgbG9jYXRpb24gb2YgYSBuZXcgYnJlYWtwb2ludCB0byBiZSBhZGRlZC5cblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRQb2ludHMoYWxsUG9pbnRzKSB7XG5cdCAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblx0XG5cdCAgICAgICAgd2hpbGUgKHRoaXMubm9kZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICB0aGlzLm5vZGVzWzBdLmRlc3Ryb3koKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgYWxsUG9pbnRzLmZvckVhY2goZnVuY3Rpb24gKHBvaW50KSB7XG5cdCAgICAgICAgICBfdGhpcy5hZGRQb2ludChwb2ludC54LCBwb2ludC55KTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLmNhbGN1bGF0ZVBvaW50cygpO1xuXHQgICAgICAgIHRoaXMuZW1pdChcImNoYW5nZVwiLCB0aGlzLnBvaW50cyk7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pO1xuXHRcblx0ICByZXR1cm4gRW52ZWxvcGU7XG5cdH0pKEludGVyZmFjZSk7XG5cdFxuXHRtb2R1bGUuZXhwb3J0cyA9IEVudmVsb3BlO1xuXG4vKioqLyB9KSxcbi8qIDM1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGtleSBpbiBwcm9wcykgeyB2YXIgcHJvcCA9IHByb3BzW2tleV07IHByb3AuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKHByb3AudmFsdWUpIHByb3Aud3JpdGFibGUgPSB0cnVlOyB9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpOyB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHR2YXIgX2dldCA9IGZ1bmN0aW9uIGdldChvYmplY3QsIHByb3BlcnR5LCByZWNlaXZlcikgeyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IHJldHVybiBnZXQocGFyZW50LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpOyB9IH0gZWxzZSBpZiAoXCJ2YWx1ZVwiIGluIGRlc2MgJiYgZGVzYy53cml0YWJsZSkgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH07XG5cdFxuXHR2YXIgX2luaGVyaXRzID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH07XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH07XG5cdFxuXHR2YXIgZG9tID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcblx0Ly9sZXQgbWF0aCA9IHJlcXVpcmUoJy4uL3V0aWwvbWF0aCcpO1xuXHR2YXIgSW50ZXJmYWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcblx0XG5cdC8qKlxuXHQqIFNwZWN0cm9ncmFtXG5cdCpcblx0KiBAZGVzY3JpcHRpb24gQXVkaW8gc3BlY3RydW0gdmlzdWFsaXphdGlvblxuXHQqXG5cdCogQGRlbW8gPHNwYW4gbmV4dXMtdWk9XCJzcGVjdHJvZ3JhbVwiPjwvc3Bhbj5cblx0KlxuXHQqIEBleGFtcGxlXG5cdCogdmFyIHNwZWN0cm9ncmFtID0gbmV3IE5leHVzLlNwZWN0cm9ncmFtKCcjdGFyZ2V0Jylcblx0KlxuXHQqIEBleGFtcGxlXG5cdCogdmFyIHNwZWN0cm9ncmFtID0gbmV3IE5leHVzLlNwZWN0cm9ncmFtKCcjdGFyZ2V0Jyx7XG5cdCogICAnc2l6ZSc6IFszMDAsMTUwXVxuXHQqIH0pXG5cdCpcblx0KiBAb3V0cHV0XG5cdCogJm5ic3A7XG5cdCogTm8gZXZlbnRzXG5cdCpcblx0Ki9cblx0XG5cdHZhciBjb250ZXh0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKS5jb250ZXh0O1xuXHRcblx0dmFyIFNwZWN0cm9ncmFtID0gKGZ1bmN0aW9uIChfSW50ZXJmYWNlKSB7XG5cdCAgZnVuY3Rpb24gU3BlY3Ryb2dyYW0oKSB7XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3BlY3Ryb2dyYW0pO1xuXHRcblx0ICAgIHZhciBvcHRpb25zID0gW1wic2NhbGVcIiwgXCJ2YWx1ZVwiXTtcblx0XG5cdCAgICB2YXIgZGVmYXVsdHMgPSB7XG5cdCAgICAgIHNpemU6IFszMDAsIDE1MF1cblx0ICAgIH07XG5cdFxuXHQgICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoU3BlY3Ryb2dyYW0ucHJvdG90eXBlKSwgXCJjb25zdHJ1Y3RvclwiLCB0aGlzKS5jYWxsKHRoaXMsIGFyZ3VtZW50cywgb3B0aW9ucywgZGVmYXVsdHMpO1xuXHRcblx0ICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQoKTsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cdFxuXHQgICAgdGhpcy5hbmFseXNlciA9IHRoaXMuY29udGV4dC5jcmVhdGVBbmFseXNlcigpO1xuXHQgICAgdGhpcy5hbmFseXNlci5mZnRTaXplID0gMjA0ODtcblx0ICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gdGhpcy5hbmFseXNlci5mcmVxdWVuY3lCaW5Db3VudDtcblx0ICAgIHRoaXMuZGF0YUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXJMZW5ndGgpO1xuXHRcblx0ICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcblx0XG5cdCAgICB0aGlzLnNvdXJjZSA9IGZhbHNlO1xuXHRcblx0ICAgIHRoaXMuaW5pdCgpO1xuXHQgIH1cblx0XG5cdCAgX2luaGVyaXRzKFNwZWN0cm9ncmFtLCBfSW50ZXJmYWNlKTtcblx0XG5cdCAgX2NyZWF0ZUNsYXNzKFNwZWN0cm9ncmFtLCB7XG5cdCAgICBidWlsZEZyYW1lOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEZyYW1lKCkge1xuXHQgICAgICAgIHRoaXMuY2FudmFzID0gbmV3IGRvbS5TbWFydENhbnZhcyh0aGlzLnBhcmVudCk7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50ID0gdGhpcy5jYW52YXMuZWxlbWVudDtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNpemVJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNpemVJbnRlcmZhY2UoKSB7XG5cdCAgICAgICAgdGhpcy5jYW52YXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNvbG9ySW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb2xvckludGVyZmFjZSgpIHtcblx0ICAgICAgICB0aGlzLmNhbnZhcy5lbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuY29sb3JzLmZpbGw7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByZW5kZXI6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0XG5cdCAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7XG5cdCAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZW5kZXIuYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICB0aGlzLmFuYWx5c2VyLmdldEJ5dGVGcmVxdWVuY3lEYXRhKHRoaXMuZGF0YUFycmF5KTtcblx0XG5cdCAgICAgICAgdGhpcy5jYW52YXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLmNvbG9ycy5maWxsO1xuXHQgICAgICAgIHRoaXMuY2FudmFzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy5jYW52YXMuZWxlbWVudC53aWR0aCwgdGhpcy5jYW52YXMuZWxlbWVudC5oZWlnaHQpO1xuXHRcblx0ICAgICAgICBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5kYXRhQXJyYXkpIHtcblx0XG5cdCAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuZGF0YUFycmF5KTtcblx0XG5cdCAgICAgICAgICB2YXIgYmFyV2lkdGggPSB0aGlzLmNhbnZhcy5lbGVtZW50LndpZHRoIC8gdGhpcy5idWZmZXJMZW5ndGg7XG5cdCAgICAgICAgICB2YXIgYmFySGVpZ2h0ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgdmFyIHggPSAwO1xuXHRcblx0ICAgICAgICAgIHZhciBkZWZpbml0aW9uID0gdGhpcy5jYW52YXMuZWxlbWVudC53aWR0aCAvIDUwO1xuXHRcblx0ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5idWZmZXJMZW5ndGg7IGkgPSBpICsgZGVmaW5pdGlvbikge1xuXHQgICAgICAgICAgICBiYXJIZWlnaHQgPSBNYXRoLm1heC5hcHBseShudWxsLCB0aGlzLmRhdGFBcnJheS5zdWJhcnJheShpLCBpICsgZGVmaW5pdGlvbikpO1xuXHQgICAgICAgICAgICBiYXJIZWlnaHQgLz0gMjU1O1xuXHQgICAgICAgICAgICBiYXJIZWlnaHQgKj0gdGhpcy5jYW52YXMuZWxlbWVudC5oZWlnaHQ7XG5cdFxuXHQgICAgICAgICAgICB0aGlzLmNhbnZhcy5jb250ZXh0LmZpbGxTdHlsZSA9IHRoaXMuY29sb3JzLmFjY2VudDtcblx0ICAgICAgICAgICAgdGhpcy5jYW52YXMuY29udGV4dC5maWxsUmVjdCh4LCB0aGlzLmNhbnZhcy5lbGVtZW50LmhlaWdodCAtIGJhckhlaWdodCwgYmFyV2lkdGggKiBkZWZpbml0aW9uLCBiYXJIZWlnaHQpO1xuXHRcblx0ICAgICAgICAgICAgeCArPSBiYXJXaWR0aCAqIGRlZmluaXRpb247XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29ubmVjdDoge1xuXHRcblx0ICAgICAgLyoqXG5cdCAgICAgIEVxdWl2YWxlbnQgdG8gXCJwYXRjaGluZyBpblwiIGFuIGF1ZGlvIG5vZGUgdG8gdmlzdWFsaXplLiBOT1RFOiBZb3UgY2Fubm90IGNvbm5lY3QgYXVkaW8gbm9kZXMgYWNyb3NzIHR3byBkaWZmZXJlbnQgYXVkaW8gY29udGV4dHMuIE5leHVzVUkgcnVucyBpdHMgYXVkaW8gYW5hbHlzaXMgb24gaXRzIG93biBhdWRpbyBjb250ZXh0LCBOZXh1cy5jb250ZXh0LiBJZiB0aGUgYXVkaW8gbm9kZSB5b3UgYXJlIHZpc3VhbGl6aW5nIGlzIGNyZWF0ZWQgb24gYSBkaWZmZXJlbnQgYXVkaW8gY29udGV4dCwgeW91IHdpbGwgbmVlZCB0byB0ZWxsIE5leHVzVUkgdG8gdXNlIHRoYXQgY29udGV4dCBpbnN0ZWFkOiBpLmUuIE5leHVzLmNvbnRleHQgPSBZb3VyQXVkaW9Db250ZXh0TmFtZS4gRm9yIGV4YW1wbGUsIGluIFRvbmVKUyBwcm9qZWN0cywgdGhlIGxpbmUgd291bGQgYmU6IE5leHVzLmNvbnRleHQgPSBUb25lLmNvbnRleHQgLiBXZSByZWNvbW1lbmQgdGhhdCB5b3Ugd3JpdGUgdGhhdCBsaW5lIG9mIGNvZGUgb25seSBvbmNlIGF0IHRoZSBiZWdpbm5pbmcgb2YgeW91ciBwcm9qZWN0LlxuXHQgICAgICBAcGFyYW0gbm9kZSB7QXVkaW9Ob2RlfSBUaGUgYXVkaW8gbm9kZSB0byB2aXN1YWxpemVcblx0ICAgICAgQGV4YW1wbGUgTmV4dXMuY29udGV4dCA9IFRvbmUuY29udGV4dCAvLyBvciBhbm90aGVyIGF1ZGlvIGNvbnRleHQgeW91IGhhdmUgY3JlYXRlZFxuXHQgICAgICBzcGVjdHJvZ3JhbS5jb25uZWN0KCBUb25lLk1hc3RlciApO1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbm5lY3Qobm9kZSkge1xuXHQgICAgICAgIGlmICh0aGlzLnNvdXJjZSkge1xuXHQgICAgICAgICAgdGhpcy5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuc291cmNlID0gbm9kZTtcblx0ICAgICAgICB0aGlzLnNvdXJjZS5jb25uZWN0KHRoaXMuYW5hbHlzZXIpO1xuXHQgICAgICAgIHRoaXMucmVuZGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBkaXNjb25uZWN0OiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgU3RvcCB2aXN1YWxpemluZyB0aGUgc291cmNlIG5vZGUgYW5kIGRpc2Nvbm5lY3QgaXQuXG5cdCAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gZGlzY29ubmVjdCgpIHtcblx0ICAgICAgICB0aGlzLnNvdXJjZS5kaXNjb25uZWN0KHRoaXMuYW5hbHlzZXIpO1xuXHQgICAgICAgIHRoaXMuc291cmNlID0gbnVsbDtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNsaWNrOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGljaygpIHtcblx0ICAgICAgICB0aGlzLmFjdGl2ZSA9ICF0aGlzLmFjdGl2ZTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY3VzdG9tRGVzdHJveToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY3VzdG9tRGVzdHJveSgpIHtcblx0ICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBTcGVjdHJvZ3JhbTtcblx0fSkoSW50ZXJmYWNlKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gU3BlY3Ryb2dyYW07XG5cbi8qKiovIH0pLFxuLyogMzYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7IH0gfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gZGVzYyAmJiBkZXNjLndyaXRhYmxlKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfTtcblx0XG5cdHZhciBfaW5oZXJpdHMgPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBkb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xuXHR2YXIgbWF0aCA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cdHZhciBJbnRlcmZhY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xuXHRcblx0LyoqXG5cdCogTWV0ZXJcblx0KlxuXHQqIEBkZXNjcmlwdGlvbiBTdGVyZW8gZGVjaWJlbCBtZXRlclxuXHQqXG5cdCogQGRlbW8gPHNwYW4gbmV4dXMtdWk9XCJtZXRlclwiPjwvc3Bhbj5cblx0KlxuXHQqIEBleGFtcGxlXG5cdCogdmFyIG1ldGVyID0gbmV3IE5leHVzLk1ldGVyKCcjdGFyZ2V0Jylcblx0KlxuXHQqIEBleGFtcGxlXG5cdCogdmFyIG1ldGVyID0gbmV3IE5leHVzLk1ldGVyKCcjdGFyZ2V0Jyx7XG5cdCogICBzaXplOiBbNzUsNzVdXG5cdCogfSlcblx0KlxuXHQqIEBvdXRwdXRcblx0KiAmbmJzcDtcblx0KiBObyBldmVudHNcblx0KlxuXHQqL1xuXHRcblx0dmFyIGNvbnRleHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpLmNvbnRleHQ7XG5cdFxuXHR2YXIgTWV0ZXIgPSAoZnVuY3Rpb24gKF9JbnRlcmZhY2UpIHtcblx0ICBmdW5jdGlvbiBNZXRlcigpIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBNZXRlcik7XG5cdFxuXHQgICAgdmFyIG9wdGlvbnMgPSBbXCJzY2FsZVwiLCBcInZhbHVlXCJdO1xuXHRcblx0ICAgIHZhciBkZWZhdWx0cyA9IHtcblx0ICAgICAgc2l6ZTogWzMwLCAxMDBdXG5cdCAgICB9O1xuXHRcblx0ICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKE1ldGVyLnByb3RvdHlwZSksIFwiY29uc3RydWN0b3JcIiwgdGhpcykuY2FsbCh0aGlzLCBhcmd1bWVudHMsIG9wdGlvbnMsIGRlZmF1bHRzKTtcblx0XG5cdCAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0KCk7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXHRcblx0ICAgIHRoaXMuY2hhbm5lbHMgPSAyO1xuXHRcblx0ICAgIHRoaXMuc3BsaXR0ZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQ2hhbm5lbFNwbGl0dGVyKHRoaXMuY2hhbm5lbHMpO1xuXHRcblx0ICAgIHRoaXMuYW5hbHlzZXJzID0gW107XG5cdFxuXHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoYW5uZWxzOyBpKyspIHtcblx0ICAgICAgdmFyIGFuYWx5c2VyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUFuYWx5c2VyKCk7XG5cdCAgICAgIHRoaXMuc3BsaXR0ZXIuY29ubmVjdChhbmFseXNlciwgaSk7XG5cdCAgICAgIGFuYWx5c2VyLmZmdFNpemUgPSAxMDI0O1xuXHQgICAgICBhbmFseXNlci5zbW9vdGhpbmdUaW1lQ29uc3RhbnQgPSAxO1xuXHQgICAgICB0aGlzLmFuYWx5c2Vycy5wdXNoKGFuYWx5c2VyKTtcblx0ICAgIH1cblx0ICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gdGhpcy5hbmFseXNlcnNbMF0uZnJlcXVlbmN5QmluQ291bnQ7XG5cdCAgICB0aGlzLmRhdGFBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5idWZmZXJMZW5ndGgpO1xuXHRcblx0ICAgIC8qXG5cdCAgICAgICAgLy8gYWRkIGxpbmVhciBncmFkaWVudFxuXHQgICAgICAgIHZhciBncmQgPSBjYW52YXNDdHguY3JlYXRlTGluZWFyR3JhZGllbnQoMCwgMCwgMCwgY2FudmFzLmhlaWdodCk7XG5cdCAgICAgICAgLy8gbGlnaHQgYmx1ZVxuXHQgICAgICAgIGdyZC5hZGRDb2xvclN0b3AoMCwgJyMwMDAnKTtcblx0ICAgICAgICBncmQuYWRkQ29sb3JTdG9wKDAuMiwgJyNiYmInKTtcblx0ICAgICAgICBncmQuYWRkQ29sb3JTdG9wKDAuNCwgJyNkMTgnKTtcblx0ICAgICAgICAvLyBkYXJrIGJsdWVcblx0ICAgICAgICBncmQuYWRkQ29sb3JTdG9wKDEsICcjZDE4Jyk7XG5cdCAgICAgICAgY2FudmFzQ3R4LmZpbGxTdHlsZSA9IGdyZDsgKi9cblx0XG5cdCAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG5cdFxuXHQgICAgdGhpcy5kYiA9IC1JbmZpbml0eTtcblx0XG5cdCAgICB0aGlzLmluaXQoKTtcblx0XG5cdCAgICB0aGlzLm1ldGVyV2lkdGggPSB0aGlzLmNhbnZhcy5lbGVtZW50LndpZHRoIC8gdGhpcy5jaGFubmVscztcblx0XG5cdCAgICB0aGlzLnJlbmRlcigpO1xuXHQgIH1cblx0XG5cdCAgX2luaGVyaXRzKE1ldGVyLCBfSW50ZXJmYWNlKTtcblx0XG5cdCAgX2NyZWF0ZUNsYXNzKE1ldGVyLCB7XG5cdCAgICBidWlsZEZyYW1lOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEZyYW1lKCkge1xuXHQgICAgICAgIHRoaXMuY2FudmFzID0gbmV3IGRvbS5TbWFydENhbnZhcyh0aGlzLnBhcmVudCk7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50ID0gdGhpcy5jYW52YXMuZWxlbWVudDtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNpemVJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNpemVJbnRlcmZhY2UoKSB7XG5cdCAgICAgICAgdGhpcy5jYW52YXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNvbG9ySW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb2xvckludGVyZmFjZSgpIHtcblx0ICAgICAgICB0aGlzLmNhbnZhcy5lbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuY29sb3JzLmZpbGw7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByZW5kZXI6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0XG5cdCAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7XG5cdCAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZW5kZXIuYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICB0aGlzLmNhbnZhcy5jb250ZXh0LmZpbGxTdHlsZSA9IHRoaXMuY29sb3JzLmZpbGw7XG5cdCAgICAgICAgdGhpcy5jYW52YXMuY29udGV4dC5maWxsUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy5lbGVtZW50LndpZHRoLCB0aGlzLmNhbnZhcy5lbGVtZW50LmhlaWdodCk7XG5cdFxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hbmFseXNlcnMubGVuZ3RoOyBpKyspIHtcblx0XG5cdCAgICAgICAgICBpZiAodGhpcy5zb3VyY2UpIHtcblx0XG5cdCAgICAgICAgICAgIHRoaXMuYW5hbHlzZXJzW2ldLmdldEZsb2F0VGltZURvbWFpbkRhdGEodGhpcy5kYXRhQXJyYXkpO1xuXHRcblx0ICAgICAgICAgICAgdmFyIHJtcyA9IDA7XG5cdFxuXHQgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdGhpcy5kYXRhQXJyYXkubGVuZ3RoOyBfaSsrKSB7XG5cdCAgICAgICAgICAgICAgcm1zICs9IHRoaXMuZGF0YUFycmF5W19pXSAqIHRoaXMuZGF0YUFycmF5W19pXTtcblx0ICAgICAgICAgICAgfVxuXHRcblx0ICAgICAgICAgICAgcm1zID0gTWF0aC5zcXJ0KHJtcyAvIHRoaXMuZGF0YUFycmF5Lmxlbmd0aCk7XG5cdFxuXHQgICAgICAgICAgICB0aGlzLmRiID0gMjAgKiBNYXRoLmxvZzEwKHJtcyk7XG5cdCAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGIgPiAtMjAwICYmIHRoaXMuZGIgIT09IC1JbmZpbml0eSkge1xuXHQgICAgICAgICAgICB0aGlzLmRiIC09IDE7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmRiID0gLUluZmluaXR5O1xuXHQgICAgICAgICAgfVxuXHRcblx0ICAgICAgICAgIC8vY29uc29sZS5sb2coZGIpXG5cdFxuXHQgICAgICAgICAgaWYgKHRoaXMuZGIgPiAtNzApIHtcblx0XG5cdCAgICAgICAgICAgIHZhciBsaW5lYXIgPSBtYXRoLm5vcm1hbGl6ZSh0aGlzLmRiLCAtNzAsIDUpO1xuXHQgICAgICAgICAgICB2YXIgZXhwID0gbGluZWFyICogbGluZWFyO1xuXHQgICAgICAgICAgICB2YXIgeSA9IG1hdGguc2NhbGUoZXhwLCAwLCAxLCB0aGlzLmVsZW1lbnQuaGVpZ2h0LCAwKTtcblx0XG5cdCAgICAgICAgICAgIHRoaXMuY2FudmFzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5jb2xvcnMuYWNjZW50O1xuXHQgICAgICAgICAgICB0aGlzLmNhbnZhcy5jb250ZXh0LmZpbGxSZWN0KHRoaXMubWV0ZXJXaWR0aCAqIGksIHksIHRoaXMubWV0ZXJXaWR0aCwgdGhpcy5jYW52YXMuZWxlbWVudC5oZWlnaHQgLSB5KTtcblx0XG5cdCAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJyZW5kZXJpbmcuLi5cIilcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjb25uZWN0OiB7XG5cdFxuXHQgICAgICAvKipcblx0ICAgICAgRXF1aXZhbGVudCB0byBcInBhdGNoaW5nIGluXCIgYW4gYXVkaW8gbm9kZSB0byB2aXN1YWxpemUuIE5PVEU6IFlvdSBjYW5ub3QgY29ubmVjdCBhdWRpbyBub2RlcyBhY3Jvc3MgdHdvIGRpZmZlcmVudCBhdWRpbyBjb250ZXh0cy4gTmV4dXNVSSBydW5zIGl0cyBhdWRpbyBhbmFseXNpcyBvbiBpdHMgb3duIGF1ZGlvIGNvbnRleHQsIE5leHVzLmNvbnRleHQuIElmIHRoZSBhdWRpbyBub2RlIHlvdSBhcmUgdmlzdWFsaXppbmcgaXMgY3JlYXRlZCBvbiBhIGRpZmZlcmVudCBhdWRpbyBjb250ZXh0LCB5b3Ugd2lsbCBuZWVkIHRvIHRlbGwgTmV4dXNVSSB0byB1c2UgdGhhdCBjb250ZXh0IGluc3RlYWQ6IGkuZS4gTmV4dXMuY29udGV4dCA9IFlvdXJBdWRpb0NvbnRleHROYW1lLiBGb3IgZXhhbXBsZSwgaW4gVG9uZUpTIHByb2plY3RzLCB0aGUgbGluZSB3b3VsZCBiZTogTmV4dXMuY29udGV4dCA9IFRvbmUuY29udGV4dCAuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB3cml0ZSB0aGF0IGxpbmUgb2YgY29kZSBvbmx5IG9uY2UgYXQgdGhlIGJlZ2lubmluZyBvZiB5b3VyIHByb2plY3QuXG5cdCAgICAgIEBwYXJhbSBub2RlIHtBdWRpb05vZGV9IFRoZSBhdWRpbyBub2RlIHRvIHZpc3VhbGl6ZVxuXHQgICAgICBAcGFyYW0gY2hhbm5lbHMge251bWJlcn0gKG9wdGlvbmFsKSBUaGUgbnVtYmVyIG9mIGNoYW5uZWxzIGluIHRoZSBzb3VyY2Ugbm9kZSB0byB3YXRjaC4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGludGVyZmFjZSB3aWxsIGxvb2sgZm9yIGEgLmNoYW5uZWxDb3VudCBwcm9wZXJ0eSBvbiB0aGUgaW5wdXQgbm9kZS4gSWYgaXQgZG9lcyBub3QgZXhpc3QsIHRoZSBpbnRlcmZhY2Ugd2lsbCBkZWZhdWx0IHRvIDEgY2hhbm5lbC5cblx0ICAgICAgQGV4YW1wbGUgTmV4dXMuY29udGV4dCA9IFRvbmUuY29udGV4dCAvLyBvciBhbm90aGVyIGF1ZGlvIGNvbnRleHQgeW91IGhhdmUgY3JlYXRlZFxuXHQgICAgICBtZXRlci5jb25uZWN0KCBUb25lLk1hc3RlciwgMiApO1xuXHQgICAgICAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbm5lY3Qobm9kZSwgY2hhbm5lbHMpIHtcblx0ICAgICAgICBpZiAodGhpcy5zb3VyY2UpIHtcblx0ICAgICAgICAgIHRoaXMuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3RoaXMuZHVtbXkuZGlzY29ubmVjdCh0aGlzLnNwbGl0dGVyKTtcblx0XG5cdCAgICAgICAgaWYgKGNoYW5uZWxzKSB7XG5cdCAgICAgICAgICB0aGlzLmNoYW5uZWxzID0gY2hhbm5lbHM7XG5cdCAgICAgICAgfSBlbHNlIGlmIChub2RlLmNoYW5uZWxDb3VudCkge1xuXHQgICAgICAgICAgdGhpcy5jaGFubmVscyA9IG5vZGUuY2hhbm5lbENvdW50O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLmNoYW5uZWxzID0gMjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5tZXRlcldpZHRoID0gdGhpcy5jYW52YXMuZWxlbWVudC53aWR0aCAvIHRoaXMuY2hhbm5lbHM7XG5cdFxuXHQgICAgICAgIHRoaXMuc291cmNlID0gbm9kZTtcblx0ICAgICAgICB0aGlzLnNvdXJjZS5jb25uZWN0KHRoaXMuc3BsaXR0ZXIpO1xuXHRcblx0ICAgICAgICAvLyAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGRpc2Nvbm5lY3Q6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBTdG9wIHZpc3VhbGl6aW5nIHRoZSBzb3VyY2Ugbm9kZSBhbmQgZGlzY29ubmVjdCBpdC5cblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNjb25uZWN0KCkge1xuXHRcblx0ICAgICAgICB0aGlzLnNvdXJjZS5kaXNjb25uZWN0KHRoaXMuc3BsaXR0ZXIpO1xuXHQgICAgICAgIHRoaXMuc291cmNlID0gZmFsc2U7XG5cdCAgICAgICAgLy8gIHRoaXMuZHVtbXkuY29ubmVjdCh0aGlzLnNwbGl0dGVyKTtcblx0ICAgICAgICB0aGlzLm1ldGVyV2lkdGggPSB0aGlzLmNhbnZhcy5lbGVtZW50LndpZHRoIC8gdGhpcy5jaGFubmVscztcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNsaWNrOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGljaygpIHtcblx0ICAgICAgICB0aGlzLmFjdGl2ZSA9ICF0aGlzLmFjdGl2ZTtcblx0ICAgICAgICB0aGlzLnJlbmRlcigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY3VzdG9tRGVzdHJveToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY3VzdG9tRGVzdHJveSgpIHtcblx0ICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cdFxuXHQgIHJldHVybiBNZXRlcjtcblx0fSkoSW50ZXJmYWNlKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gTWV0ZXI7XG5cbi8qKiovIH0pLFxuLyogMzcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7IH0gfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gZGVzYyAmJiBkZXNjLndyaXRhYmxlKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfTtcblx0XG5cdHZhciBfaW5oZXJpdHMgPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBkb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xuXHR2YXIgSW50ZXJmYWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcblx0XG5cdC8qKlxuXHQqIE9zY2lsbG9zY29wZVxuXHQqXG5cdCogQGRlc2NyaXB0aW9uIFZpc3VhbGl6ZXMgYSB3YXZlZm9ybSdzIHN0cmVhbSBvZiB2YWx1ZXMuXG5cdCpcblx0KiBAZGVtbyA8c3BhbiBuZXh1cy11aT1cIm9zY2lsbG9zY29wZVwiPjwvc3Bhbj5cblx0KlxuXHQqIEBleGFtcGxlXG5cdCogdmFyIG9zY2lsbG9zY29wZSA9IG5ldyBOZXh1cy5Pc2NpbGxvc2NvcGUoJyN0YXJnZXQnKVxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiB2YXIgb3NjaWxsb3Njb3BlID0gbmV3IE5leHVzLk9zY2lsbG9zY29wZSgnI3RhcmdldCcse1xuXHQqICAgJ3NpemUnOiBbMzAwLDE1MF1cblx0KiB9KVxuXHQqXG5cdCogQG91dHB1dFxuXHQqICZuYnNwO1xuXHQqIE5vIGV2ZW50c1xuXHQqXG5cdCovXG5cdFxuXHR2YXIgY29udGV4dCA9IF9fd2VicGFja19yZXF1aXJlX18oMSkuY29udGV4dDtcblx0XG5cdHZhciBPc2NpbGxvc2NvcGUgPSAoZnVuY3Rpb24gKF9JbnRlcmZhY2UpIHtcblx0ICBmdW5jdGlvbiBPc2NpbGxvc2NvcGUoKSB7XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgT3NjaWxsb3Njb3BlKTtcblx0XG5cdCAgICB2YXIgb3B0aW9ucyA9IFtcInNjYWxlXCIsIFwidmFsdWVcIl07XG5cdFxuXHQgICAgdmFyIGRlZmF1bHRzID0ge1xuXHQgICAgICBzaXplOiBbMzAwLCAxNTBdXG5cdCAgICB9O1xuXHRcblx0ICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKE9zY2lsbG9zY29wZS5wcm90b3R5cGUpLCBcImNvbnN0cnVjdG9yXCIsIHRoaXMpLmNhbGwodGhpcywgYXJndW1lbnRzLCBvcHRpb25zLCBkZWZhdWx0cyk7XG5cdFxuXHQgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dCgpOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblx0XG5cdCAgICB0aGlzLmFuYWx5c2VyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUFuYWx5c2VyKCk7XG5cdCAgICB0aGlzLmFuYWx5c2VyLmZmdFNpemUgPSAyMDQ4O1xuXHQgICAgdGhpcy5idWZmZXJMZW5ndGggPSB0aGlzLmFuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50O1xuXHQgICAgdGhpcy5kYXRhQXJyYXkgPSBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlckxlbmd0aCk7XG5cdCAgICB0aGlzLmFuYWx5c2VyLmdldEJ5dGVUaW1lRG9tYWluRGF0YSh0aGlzLmRhdGFBcnJheSk7XG5cdFxuXHQgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuXHRcblx0ICAgIHRoaXMuc291cmNlID0gZmFsc2U7XG5cdFxuXHQgICAgdGhpcy5pbml0KCk7XG5cdFxuXHQgICAgdGhpcy5yZW5kZXIoKTtcblx0ICB9XG5cdFxuXHQgIF9pbmhlcml0cyhPc2NpbGxvc2NvcGUsIF9JbnRlcmZhY2UpO1xuXHRcblx0ICBfY3JlYXRlQ2xhc3MoT3NjaWxsb3Njb3BlLCB7XG5cdCAgICBidWlsZEZyYW1lOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEZyYW1lKCkge1xuXHQgICAgICAgIHRoaXMuY2FudmFzID0gbmV3IGRvbS5TbWFydENhbnZhcyh0aGlzLnBhcmVudCk7XG5cdCAgICAgICAgdGhpcy5lbGVtZW50ID0gdGhpcy5jYW52YXMuZWxlbWVudDtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNpemVJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNpemVJbnRlcmZhY2UoKSB7XG5cdCAgICAgICAgdGhpcy5jYW52YXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNvbG9ySW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb2xvckludGVyZmFjZSgpIHtcblx0ICAgICAgICB0aGlzLmNhbnZhcy5lbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuY29sb3JzLmZpbGw7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByZW5kZXI6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0XG5cdCAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7XG5cdCAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZW5kZXIuYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICB0aGlzLmFuYWx5c2VyLmdldEJ5dGVUaW1lRG9tYWluRGF0YSh0aGlzLmRhdGFBcnJheSk7XG5cdFxuXHQgICAgICAgIHRoaXMuY2FudmFzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5jb2xvcnMuZmlsbDtcblx0ICAgICAgICB0aGlzLmNhbnZhcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLmVsZW1lbnQud2lkdGgsIHRoaXMuY2FudmFzLmVsZW1lbnQuaGVpZ2h0KTtcblx0XG5cdCAgICAgICAgdGhpcy5jYW52YXMuY29udGV4dC5saW5lV2lkdGggPSB+IH4odGhpcy5oZWlnaHQgLyAxMDAgKyAyKTtcblx0ICAgICAgICB0aGlzLmNhbnZhcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gdGhpcy5jb2xvcnMuYWNjZW50O1xuXHRcblx0ICAgICAgICB0aGlzLmNhbnZhcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuXHRcblx0ICAgICAgICBpZiAodGhpcy5zb3VyY2UpIHtcblx0XG5cdCAgICAgICAgICB2YXIgc2xpY2VXaWR0aCA9IHRoaXMuY2FudmFzLmVsZW1lbnQud2lkdGggKiAxIC8gdGhpcy5idWZmZXJMZW5ndGg7XG5cdCAgICAgICAgICB2YXIgeCA9IDA7XG5cdFxuXHQgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJ1ZmZlckxlbmd0aDsgaSsrKSB7XG5cdFxuXHQgICAgICAgICAgICB2YXIgdiA9IHRoaXMuZGF0YUFycmF5W2ldIC8gMTI4O1xuXHQgICAgICAgICAgICB2YXIgeSA9IHYgKiB0aGlzLmNhbnZhcy5lbGVtZW50LmhlaWdodCAvIDI7XG5cdFxuXHQgICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuXHQgICAgICAgICAgICAgIHRoaXMuY2FudmFzLmNvbnRleHQubW92ZVRvKHgsIHkpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgIHRoaXMuY2FudmFzLmNvbnRleHQubGluZVRvKHgsIHkpO1xuXHQgICAgICAgICAgICB9XG5cdFxuXHQgICAgICAgICAgICB4ICs9IHNsaWNlV2lkdGg7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMuY2FudmFzLmNvbnRleHQubW92ZVRvKDAsIHRoaXMuY2FudmFzLmVsZW1lbnQuaGVpZ2h0IC8gMik7XG5cdCAgICAgICAgICB0aGlzLmNhbnZhcy5jb250ZXh0LmxpbmVUbyh0aGlzLmNhbnZhcy5lbGVtZW50LndpZHRoLCB0aGlzLmNhbnZhcy5lbGVtZW50LmhlaWdodCAvIDIpO1xuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgdGhpcy5jYW52YXMuY29udGV4dC5zdHJva2UoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNvbm5lY3Q6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBFcXVpdmFsZW50IHRvIFwicGF0Y2hpbmcgaW5cIiBhbiBhdWRpbyBub2RlIHRvIHZpc3VhbGl6ZS4gTk9URTogWW91IGNhbm5vdCBjb25uZWN0IGF1ZGlvIG5vZGVzIGFjcm9zcyB0d28gZGlmZmVyZW50IGF1ZGlvIGNvbnRleHRzLiBOZXh1c1VJIHJ1bnMgaXRzIGF1ZGlvIGFuYWx5c2lzIG9uIGl0cyBvd24gYXVkaW8gY29udGV4dCwgTmV4dXMuY29udGV4dC4gSWYgdGhlIGF1ZGlvIG5vZGUgeW91IGFyZSB2aXN1YWxpemluZyBpcyBjcmVhdGVkIG9uIGEgZGlmZmVyZW50IGF1ZGlvIGNvbnRleHQsIHlvdSB3aWxsIG5lZWQgdG8gdGVsbCBOZXh1c1VJIHRvIHVzZSB0aGF0IGNvbnRleHQgaW5zdGVhZDogaS5lLiBOZXh1cy5jb250ZXh0ID0gWW91ckF1ZGlvQ29udGV4dE5hbWUuIEZvciBleGFtcGxlLCBpbiBUb25lSlMgcHJvamVjdHMsIHRoZSBsaW5lIHdvdWxkIGJlOiBOZXh1cy5jb250ZXh0ID0gVG9uZS5jb250ZXh0IC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHdyaXRlIHRoYXQgbGluZSBvZiBjb2RlIG9ubHkgb25jZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHlvdXIgcHJvamVjdC5cblx0ICAgICAgQHBhcmFtIG5vZGUge0F1ZGlvTm9kZX0gVGhlIGF1ZGlvIG5vZGUgdG8gdmlzdWFsaXplXG5cdCAgICAgIEBleGFtcGxlIE5leHVzLmNvbnRleHQgPSBUb25lLmNvbnRleHQgLy8gb3IgYW5vdGhlciBhdWRpbyBjb250ZXh0IHlvdSBoYXZlIGNyZWF0ZWRcblx0ICAgICAgb3NjaWxsb3Njb3BlLmNvbm5lY3QoIFRvbmUuTWFzdGVyICk7XG5cdCAgICAgICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY29ubmVjdChub2RlKSB7XG5cdFxuXHQgICAgICAgIGlmICh0aGlzLnNvdXJjZSkge1xuXHQgICAgICAgICAgdGhpcy5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICB0aGlzLnNvdXJjZSA9IG5vZGU7XG5cdCAgICAgICAgdGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmFuYWx5c2VyKTtcblx0XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGRpc2Nvbm5lY3Q6IHtcblx0XG5cdCAgICAgIC8qKlxuXHQgICAgICBTdG9wIHZpc3VhbGl6aW5nIHRoZSBzb3VyY2Ugbm9kZSBhbmQgZGlzY29ubmVjdCBpdC5cblx0ICAgICAgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNjb25uZWN0KCkge1xuXHQgICAgICAgIGlmICh0aGlzLnNvdXJjZSkge1xuXHQgICAgICAgICAgdGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmFuYWx5c2VyKTtcblx0ICAgICAgICAgIHRoaXMuc291cmNlID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjbGljazoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xpY2soKSB7XG5cdCAgICAgICAgdGhpcy5hY3RpdmUgPSAhdGhpcy5hY3RpdmU7XG5cdCAgICAgICAgdGhpcy5yZW5kZXIoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGN1c3RvbURlc3Ryb3k6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGN1c3RvbURlc3Ryb3koKSB7XG5cdCAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pO1xuXHRcblx0ICByZXR1cm4gT3NjaWxsb3Njb3BlO1xuXHR9KShJbnRlcmZhY2UpO1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBPc2NpbGxvc2NvcGU7XG5cbi8qKiovIH0pLFxuLyogMzggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfaW50ZXJvcFJlcXVpcmUgPSBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmpbXCJkZWZhdWx0XCJdIDogb2JqOyB9O1xuXHRcblx0dmFyIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH07XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGtleSBpbiBwcm9wcykgeyB2YXIgcHJvcCA9IHByb3BzW2tleV07IHByb3AuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKHByb3AudmFsdWUpIHByb3Aud3JpdGFibGUgPSB0cnVlOyB9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpOyB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH07XG5cdFxuXHQvKlxuXHRNYWluIGNvbmNlcHQ6XG5cdHN5bnRoID0gbmV3IE5leHVzLlJhY2soJ2VsZW1lbnRJRCcpO1xuXHRcblx0VHJhbnNmb3JtIGFsbCBlbGVtZW50cyBpbnNpZGUgdGhlIGRpdlxuXHRzeW50aC5lbGVtZW50SUQgd2lsbCBob2xkIHRoZSBmaXJzdCBzbGlkZXIgaW50ZXJmYWNlXG5cdFxuXHQyKSBJbiBmdXR1cmUsIHBvdGVudGlhbGx5IHdyaXRpbmcgYSByYWNrIHRoYXQgaXMgcmUtdXNhYmxlP1xuXHRDb3VsZCBhbHNvIHRha2UgSlNPTlxuXHRcblx0bmV3IE5leHVzLlJhY2soJyN0YXJnZXQnLHtcblx0ICBwcmU6ICgpID0+IHtcblx0ICAgIGNyZWF0ZSBzb21lIGRpdnMgaGVyZSwgb3Igc29tZSBhdWRpbyBjb2RlXG5cdCAgfSxcblx0ICBpbnRlcmZhY2U6IHtcblx0ICAgIHNsaWRlcjE6IE5leHVzLmFkZC5zbGlkZXIoe1xuXHQgICAgICB0b3A6MTAsXG5cdCAgICAgIGxlZnQ6MTAsXG5cdCAgICAgIHdpZHRoOjUwLFxuXHQgICAgICBoZWlnaHQ6MTAwLFxuXHQgICAgICBtaW46IDAsXG5cdCAgICAgIG1heDogMTAwLFxuXHQgICAgICBzdGVwOiAxXG5cdCAgICB9KSxcblx0ICAgIHdhdmUxOiBOZXh1cy5hZGQud2F2ZWZvcm0oe1xuXHQgICAgICBmaWxlOiAnLi9wYXRoL3RvL2ZpbGUubXAzJyxcblx0ICAgICAgd2lkdGg6NTAwLFxuXHQgICAgICBoZWlnaHQ6MTAwLFxuXHQgICAgICBtb2RlOiAncmFuZ2UnXG5cdCAgICB9KVxuXHQgIH0sXG5cdCAgaW5pdDogKCkgPT4ge1xuXHQgICAgLy8gc29tZSBhdWRpbyBpbml0IGNvZGUgZ29lcyBoZXJlLi4uXG5cdCAgfVxuXHR9KTtcblx0XG5cdCovXG5cdFxuXHR2YXIgdHJhbnNmb3JtID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX193ZWJwYWNrX3JlcXVpcmVfXygzOSkpO1xuXHRcblx0dmFyIGRvbSA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDcpKTtcblx0XG5cdHZhciBjb2xvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpLmNvbG9ycztcblx0XG5cdHZhciBSYWNrID0gKGZ1bmN0aW9uICgpIHtcblx0ICBmdW5jdGlvbiBSYWNrKHRhcmdldCwgc2V0dGluZ3MpIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSYWNrKTtcblx0XG5cdCAgICB0aGlzLm1ldGEgPSB7fTtcblx0ICAgIHRoaXMubWV0YS50YXJnZXQgPSB0YXJnZXQ7XG5cdCAgICB0aGlzLm1ldGEucGFyZW50ID0gZG9tLnBhcnNlRWxlbWVudCh0YXJnZXQpOyAvLyBzaG91bGQgYmUgYSBnZW5lcmljIGZ1bmN0aW9uIGZvciBwYXJzaW5nIGEgJ3RhcmdldCcgYXJndW1lbnQgdGhhdCBjaGVja3MgZm9yIHN0cmluZy9ET00valFVRVJZXG5cdCAgICB0aGlzLm1ldGEuY29sb3JzID0ge307XG5cdFxuXHQgICAgaWYgKHNldHRpbmdzKSB7XG5cdCAgICAgIHRoaXMubWV0YS5hdHRyaWJ1dGUgPSBzZXR0aW5ncy5hdHRyaWJ1dGUgfHwgXCJuZXh1cy11aVwiO1xuXHQgICAgICB0aGlzLm1ldGEudGl0bGUgPSBzZXR0aW5ncy5uYW1lIHx8IGZhbHNlO1xuXHQgICAgICB0aGlzLm1ldGEub3BlbiA9IHNldHRpbmdzLm9wZW4gfHwgZmFsc2U7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB0aGlzLm1ldGEuYXR0cmlidXRlID0gXCJuZXh1cy11aVwiO1xuXHQgICAgICB0aGlzLm1ldGEudGl0bGUgPSBmYWxzZTtcblx0ICAgICAgdGhpcy5tZXRhLm9wZW4gPSBmYWxzZTtcblx0ICAgIH1cblx0XG5cdCAgICB2YXIgZGVmYXVsdENvbG9ycyA9IGNvbG9ycygpOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblx0ICAgIHRoaXMubWV0YS5jb2xvcnMuYWNjZW50ID0gZGVmYXVsdENvbG9ycy5hY2NlbnQ7XG5cdCAgICB0aGlzLm1ldGEuY29sb3JzLmZpbGwgPSBkZWZhdWx0Q29sb3JzLmZpbGw7XG5cdCAgICB0aGlzLm1ldGEuY29sb3JzLmxpZ2h0ID0gZGVmYXVsdENvbG9ycy5saWdodDtcblx0ICAgIHRoaXMubWV0YS5jb2xvcnMuZGFyayA9IGRlZmF1bHRDb2xvcnMuZGFyaztcblx0ICAgIHRoaXMubWV0YS5jb2xvcnMubWVkaXVtTGlnaHQgPSBkZWZhdWx0Q29sb3JzLm1lZGl1bUxpZ2h0O1xuXHQgICAgdGhpcy5tZXRhLmNvbG9ycy5tZWRpdW1EYXJrID0gZGVmYXVsdENvbG9ycy5tZWRpdW1EYXJrO1xuXHQgICAgdGhpcy5idWlsZEludGVyZmFjZSgpO1xuXHQgICAgdGhpcy5jb2xvckludGVyZmFjZSgpO1xuXHQgIH1cblx0XG5cdCAgX2NyZWF0ZUNsYXNzKFJhY2ssIHtcblx0ICAgIGJ1aWxkSW50ZXJmYWNlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZEludGVyZmFjZSgpIHtcblx0ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXHRcblx0ICAgICAgICB0aGlzLm1ldGEucGFyZW50LnN0eWxlLmJveFNpemluZyA9IFwiYm9yZGVyLWJveFwiO1xuXHQgICAgICAgIHRoaXMubWV0YS5wYXJlbnQuc3R5bGUudXNlclNlbGVjdCA9IFwibm9uZVwiO1xuXHQgICAgICAgIHRoaXMubWV0YS5wYXJlbnQuc3R5bGUubW96VXNlclNlbGVjdCA9IFwibm9uZVwiO1xuXHQgICAgICAgIHRoaXMubWV0YS5wYXJlbnQuc3R5bGUud2Via2l0VXNlclNlbGVjdCA9IFwibm9uZVwiO1xuXHRcblx0ICAgICAgICB0aGlzLm1ldGEuY29udGVudHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcblx0ICAgICAgICB3aGlsZSAodGhpcy5tZXRhLnBhcmVudC5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgIHRoaXMubWV0YS5jb250ZW50cy5hcHBlbmRDaGlsZCh0aGlzLm1ldGEucGFyZW50LmNoaWxkTm9kZXNbMF0pO1xuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgdGhpcy5tZXRhLmNvbnRlbnRzLnN0eWxlLnBhZGRpbmcgPSBcIjBweFwiO1xuXHQgICAgICAgIHRoaXMubWV0YS5jb250ZW50cy5zdHlsZS5ib3hTaXppbmcgPSBcImJvcmRlci1ib3hcIjtcblx0XG5cdCAgICAgICAgaWYgKHRoaXMubWV0YS50aXRsZSkge1xuXHQgICAgICAgICAgdGhpcy5tZXRhLnRpdGxlQmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0ICAgICAgICAgIHRoaXMubWV0YS50aXRsZUJhci5pbm5lckhUTUwgPSB0aGlzLm1ldGEudGl0bGU7XG5cdCAgICAgICAgICB0aGlzLm1ldGEudGl0bGVCYXIuc3R5bGUuZm9udEZhbWlseSA9IFwiYXJpYWxcIjtcblx0ICAgICAgICAgIHRoaXMubWV0YS50aXRsZUJhci5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0ICAgICAgICAgIHRoaXMubWV0YS50aXRsZUJhci5zdHlsZS5jb2xvciA9IFwiIzg4OFwiO1xuXHQgICAgICAgICAgdGhpcy5tZXRhLnRpdGxlQmFyLnN0eWxlLnBhZGRpbmcgPSBcIjdweFwiO1xuXHQgICAgICAgICAgdGhpcy5tZXRhLnRpdGxlQmFyLnN0eWxlLmZvbnRTaXplID0gXCIxMnB4XCI7XG5cdFxuXHQgICAgICAgICAgdGhpcy5tZXRhLmJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdCAgICAgICAgICB0aGlzLm1ldGEuYnV0dG9uLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuXHQgICAgICAgICAgdGhpcy5tZXRhLmJ1dHRvbi5zdHlsZS50b3AgPSBcIjVweFwiO1xuXHQgICAgICAgICAgdGhpcy5tZXRhLmJ1dHRvbi5zdHlsZS5yaWdodCA9IFwiNXB4XCI7XG5cdCAgICAgICAgICB0aGlzLm1ldGEuYnV0dG9uLmlubmVySFRNTCA9IFwiLVwiO1xuXHQgICAgICAgICAgdGhpcy5tZXRhLmJ1dHRvbi5zdHlsZS5wYWRkaW5nID0gXCIwcHggNXB4IDJweFwiO1xuXHQgICAgICAgICAgdGhpcy5tZXRhLmJ1dHRvbi5zdHlsZS5saW5lSGVpZ2h0ID0gXCIxMnB4XCI7XG5cdCAgICAgICAgICB0aGlzLm1ldGEuYnV0dG9uLnN0eWxlLmZvbnRTaXplID0gXCIxNXB4XCI7XG5cdFxuXHQgICAgICAgICAgdGhpcy5tZXRhLmJ1dHRvbi5zdHlsZS5jdXJzb3IgPSBcInBvaW50ZXJcIjtcblx0XG5cdCAgICAgICAgICB0aGlzLm1ldGEuYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBfdGhpcy5tZXRhLmJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBfdGhpcy5tZXRhLmNvbG9ycy5tZWRpdW1EYXJrO1xuXHQgICAgICAgICAgfSk7XG5cdCAgICAgICAgICB0aGlzLm1ldGEuYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsIGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgX3RoaXMubWV0YS5idXR0b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gX3RoaXMubWV0YS5jb2xvcnMubWVkaXVtTGlnaHQ7XG5cdCAgICAgICAgICB9KTtcblx0ICAgICAgICAgIHRoaXMubWV0YS5idXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKF90aGlzLm1ldGEub3Blbikge1xuXHQgICAgICAgICAgICAgIF90aGlzLmhpZGUoKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICBfdGhpcy5zaG93KCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0pO1xuXHRcblx0ICAgICAgICAgIHRoaXMubWV0YS50aXRsZUJhci5hcHBlbmRDaGlsZCh0aGlzLm1ldGEuYnV0dG9uKTtcblx0XG5cdCAgICAgICAgICB0aGlzLm1ldGEucGFyZW50LmFwcGVuZENoaWxkKHRoaXMubWV0YS50aXRsZUJhcik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMubWV0YS5wYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5tZXRhLmNvbnRlbnRzKTtcblx0XG5cdCAgICAgICAgLy8gIHZhciB3aWR0aCA9IHRoaXMubWV0YS5wYXJlbnQuc3R5bGUud2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMubWV0YS5wYXJlbnQpLmdldFByb3BlcnR5VmFsdWUoJ3dpZHRoJyk7XG5cdCAgICAgICAgLy8gICAgdGhpcy5tZXRhLnBhcmVudC5zdHlsZS53aWR0aCA9IHdpZHRoO1xuXHRcblx0ICAgICAgICB2YXIgdWkgPSB0cmFuc2Zvcm0uc2VjdGlvbih0aGlzLm1ldGEudGFyZ2V0LCB0aGlzLm1ldGEuYXR0cmlidXRlKTtcblx0ICAgICAgICBmb3IgKHZhciBrZXkgaW4gdWkpIHtcblx0ICAgICAgICAgIHRoaXNba2V5XSA9IHVpW2tleV07XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29sb3JJbnRlcmZhY2U6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbG9ySW50ZXJmYWNlKCkge1xuXHQgICAgICAgIGlmICh0aGlzLm1ldGEudGl0bGUpIHtcblx0ICAgICAgICAgIHRoaXMubWV0YS5idXR0b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5tZXRhLmNvbG9ycy5tZWRpdW1MaWdodDtcblx0ICAgICAgICAgIHRoaXMubWV0YS5idXR0b24uc3R5bGUuYm9yZGVyID0gXCJzb2xpZCAwcHggXCIgKyB0aGlzLm1ldGEuY29sb3JzLmZpbGw7XG5cdCAgICAgICAgICB0aGlzLm1ldGEucGFyZW50LnN0eWxlLmJvcmRlciA9IFwic29saWQgMXB4IFwiICsgdGhpcy5tZXRhLmNvbG9ycy5tZWRpdW1MaWdodDtcblx0ICAgICAgICAgIHRoaXMubWV0YS5wYXJlbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5tZXRhLmNvbG9ycy5saWdodDtcblx0ICAgICAgICAgIHRoaXMubWV0YS50aXRsZUJhci5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLm1ldGEuY29sb3JzLmZpbGw7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2hvdzoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdygpIHtcblx0ICAgICAgICB0aGlzLm1ldGEuY29udGVudHMuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblx0ICAgICAgICB0aGlzLm1ldGEub3BlbiA9IHRydWU7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBoaWRlOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBoaWRlKCkge1xuXHQgICAgICAgIHRoaXMubWV0YS5jb250ZW50cy5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdCAgICAgICAgdGhpcy5tZXRhLm9wZW4gPSBmYWxzZTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNvbG9yaXplOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb2xvcml6ZSh0eXBlLCBjb2xvcikge1xuXHQgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzKSB7XG5cdCAgICAgICAgICBpZiAodGhpc1trZXldLmNvbG9yaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXNba2V5XS5jb2xvcml6ZSh0eXBlLCBjb2xvcik7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMubWV0YS5jb2xvcnNbdHlwZV0gPSBjb2xvcjtcblx0ICAgICAgICB0aGlzLmNvbG9ySW50ZXJmYWNlKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBlbXB0eToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gZW1wdHkoKSB7XG5cdCAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMpIHtcblx0ICAgICAgICAgIGlmICh0aGlzW2tleV0uZGVzdHJveSkge1xuXHQgICAgICAgICAgICB0aGlzW2tleV0uZGVzdHJveSgpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pO1xuXHRcblx0ICByZXR1cm4gUmFjaztcblx0fSkoKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gUmFjaztcblxuLyoqKi8gfSksXG4vKiAzOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9pbnRlcm9wUmVxdWlyZSA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialtcImRlZmF1bHRcIl0gOiBvYmo7IH07XG5cdFxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcblx0ICB2YWx1ZTogdHJ1ZVxuXHR9KTtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgZG9tID0gX2ludGVyb3BSZXF1aXJlKF9fd2VicGFja19yZXF1aXJlX18oNykpO1xuXHRcblx0dmFyIEludGVyZmFjZXMgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXygyKSk7XG5cdFxuXHR2YXIgY3JlYXRlSW50ZXJmYWNlSUQgPSBmdW5jdGlvbiAod2lkZ2V0LCBpbnRlcmZhY2VJRHMpIHtcblx0ICB2YXIgdHlwZSA9IHdpZGdldC50eXBlO1xuXHQgIGlmIChpbnRlcmZhY2VJRHNbdHlwZV0pIHtcblx0ICAgIGludGVyZmFjZUlEc1t0eXBlXSsrO1xuXHQgIH0gZWxzZSB7XG5cdCAgICBpbnRlcmZhY2VJRHNbdHlwZV0gPSAxO1xuXHQgIH1cblx0ICByZXR1cm4gdHlwZSArIGludGVyZmFjZUlEc1t0eXBlXTtcblx0fTtcblx0XG5cdHZhciBlbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHR5cGUsIG9wdGlvbnMpIHtcblx0ICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblx0ICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnQuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgdmFyIGF0dCA9IGVsZW1lbnQuYXR0cmlidXRlc1tpXTtcblx0ICAgIC8vICB0cnkge1xuXHQgICAgLy8gICAgb3B0aW9uc1thdHQubm9kZU5hbWVdID0gZXZhbChhdHQubm9kZVZhbHVlKTtcblx0ICAgIC8vICB9IGNhdGNoKGUpIHtcblx0ICAgIG9wdGlvbnNbYXR0Lm5vZGVOYW1lXSA9IGF0dC5ub2RlVmFsdWU7XG5cdCAgICAvLyAgfVxuXHQgIH1cblx0ICB0eXBlID0gdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zbGljZSgxKTtcblx0ICB2YXIgd2lkZ2V0ID0gbmV3IEludGVyZmFjZXNbdHlwZV0oZWxlbWVudCwgb3B0aW9ucyk7XG5cdCAgd2lkZ2V0LmlkID0gZWxlbWVudC5pZDtcblx0ICByZXR1cm4gd2lkZ2V0O1xuXHR9O1xuXHRcblx0dmFyIHNlY3Rpb24gPSBmdW5jdGlvbiAocGFyZW50LCBrZXl3b3JkKSB7XG5cdFxuXHQgIGtleXdvcmQgPSBrZXl3b3JkIHx8IFwibmV4dXMtdWlcIjtcblx0XG5cdCAgdmFyIGludGVyZmFjZUlEcyA9IHt9O1xuXHRcblx0ICB2YXIgY29udGFpbmVyID0gZG9tLnBhcnNlRWxlbWVudChwYXJlbnQpO1xuXHRcblx0ICB2YXIgdWkgPSB7fTtcblx0XG5cdCAgdmFyIGh0bWxFbGVtZW50cyA9IGNvbnRhaW5lci5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIik7XG5cdCAgdmFyIGVsZW1lbnRzID0gW107XG5cdCAgZm9yICh2YXIgaSA9IDA7IGkgPCBodG1sRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgIGVsZW1lbnRzLnB1c2goaHRtbEVsZW1lbnRzW2ldKTtcblx0ICB9XG5cdCAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgdmFyIHR5cGUgPSBlbGVtZW50c1tpXS5nZXRBdHRyaWJ1dGUoa2V5d29yZCk7XG5cdCAgICBpZiAodHlwZSkge1xuXHQgICAgICB2YXIgZm9ybWF0dGVkVHlwZSA9IGZhbHNlO1xuXHQgICAgICBmb3IgKHZhciBrZXkgaW4gSW50ZXJmYWNlcykge1xuXHQgICAgICAgIGlmICh0eXBlLnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSB7XG5cdCAgICAgICAgICBmb3JtYXR0ZWRUeXBlID0ga2V5O1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICBjb25zb2xlLmxvZyhmb3JtYXR0ZWRUeXBlKTtcblx0ICAgICAgdmFyIHdpZGdldCA9IGVsZW1lbnQoZWxlbWVudHNbaV0sIGZvcm1hdHRlZFR5cGUpO1xuXHQgICAgICBpZiAod2lkZ2V0LmlkKSB7XG5cdCAgICAgICAgdWlbd2lkZ2V0LmlkXSA9IHdpZGdldDtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB2YXIgaWQgPSBjcmVhdGVJbnRlcmZhY2VJRCh3aWRnZXQsIGludGVyZmFjZUlEcyk7XG5cdCAgICAgICAgdWlbaWRdID0gd2lkZ2V0O1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXHRcblx0ICByZXR1cm4gdWk7XG5cdH07XG5cdFxuXHR2YXIgYWRkID0gZnVuY3Rpb24gKHR5cGUsIHBhcmVudCwgb3B0aW9ucykge1xuXHQgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHQgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXHQgIGlmIChwYXJlbnQpIHtcblx0ICAgIHBhcmVudCA9IGRvbS5wYXJzZUVsZW1lbnQocGFyZW50KTtcblx0ICB9IGVsc2Uge1xuXHQgICAgcGFyZW50ID0gZG9jdW1lbnQuYm9keTtcblx0ICB9XG5cdCAgcGFyZW50LmFwcGVuZENoaWxkKHRhcmdldCk7XG5cdCAgb3B0aW9ucy50YXJnZXQgPSB0YXJnZXQ7XG5cdCAgaWYgKG9wdGlvbnMuc2l6ZSkge1xuXHQgICAgdGFyZ2V0LnN0eWxlLndpZHRoID0gb3B0aW9ucy5zaXplWzBdICsgXCJweFwiO1xuXHQgICAgdGFyZ2V0LnN0eWxlLmhlaWdodCA9IG9wdGlvbnMuc2l6ZVsxXSArIFwicHhcIjtcblx0ICB9XG5cdCAgcmV0dXJuIGVsZW1lbnQodGFyZ2V0LCB0eXBlLCBvcHRpb25zKTtcblx0fTtcblx0XG5cdGV4cG9ydHMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cdGV4cG9ydHMuc2VjdGlvbiA9IHNlY3Rpb247XG5cdGV4cG9ydHMuYWRkID0gYWRkO1xuXG4vKioqLyB9KSxcbi8qIDQwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgX2ludGVyb3BSZXF1aXJlID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqW1wiZGVmYXVsdFwiXSA6IG9iajsgfTtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBtYXRoID0gX2ludGVyb3BSZXF1aXJlKF9fd2VicGFja19yZXF1aXJlX18oNSkpO1xuXHRcblx0dmFyIFR1bmUgPSAoZnVuY3Rpb24gKCkge1xuXHQgIGZ1bmN0aW9uIFR1bmUoKSB7XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVHVuZSk7XG5cdFxuXHQgICAgLy8gdGhlIHNjYWxlIGFzIHJhdGlvc1xuXHQgICAgdGhpcy5zY2FsZSA9IFtdO1xuXHRcblx0ICAgIC8vIGkvbyBtb2Rlc1xuXHQgICAgdGhpcy5tb2RlID0ge1xuXHQgICAgICBvdXRwdXQ6IFwiZnJlcXVlbmN5XCIsXG5cdCAgICAgIGlucHV0OiBcInN0ZXBcIlxuXHQgICAgfTtcblx0XG5cdCAgICAvLyBFVCBtYWpvclxuXHQgICAgdGhpcy5ldG1ham9yID0gWzI2MS42MjU1OCwgMjkzLjY2NDc2NCwgMzI5LjYyNzU2MywgMzQ5LjIyODI0MSwgMzkxLjk5NTQyMiwgNDQwLCA0OTMuODgzMzAxLCA1MjMuMjUxMTZdO1xuXHRcblx0ICAgIC8vIFJvb3QgZnJlcXVlbmN5LlxuXHQgICAgdGhpcy5yb290ID0gbWF0aC5tdG9mKDYwKTsgLy8gKiBNYXRoLnBvdygyLCg2MC02OSkvMTIpO1xuXHRcblx0ICAgIC8vIGRlZmF1bHQgaXMgYSBtYWpvciBzY2FsZVxuXHQgICAgdGhpcy5jcmVhdGVTY2FsZSgwLCAyLCA0LCA1LCA3LCA5LCAxMSk7XG5cdCAgfVxuXHRcblx0ICBfY3JlYXRlQ2xhc3MoVHVuZSwge1xuXHQgICAgbm90ZToge1xuXHRcblx0ICAgICAgLyogUmV0dXJuIGRhdGEgaW4gdGhlIG1vZGUgeW91IGFyZSBpbiAoZnJlcSwgcmF0aW8sIG9yIG1pZGkpICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gbm90ZShpbnB1dCwgb2N0YXZlKSB7XG5cdFxuXHQgICAgICAgIHZhciBuZXd2YWx1ZSA9IHVuZGVmaW5lZDtcblx0XG5cdCAgICAgICAgaWYgKHRoaXMubW9kZS5vdXRwdXQgPT09IFwiZnJlcXVlbmN5XCIpIHtcblx0ICAgICAgICAgIG5ld3ZhbHVlID0gdGhpcy5mcmVxdWVuY3koaW5wdXQsIG9jdGF2ZSk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1vZGUub3V0cHV0ID09PSBcInJhdGlvXCIpIHtcblx0ICAgICAgICAgIG5ld3ZhbHVlID0gdGhpcy5yYXRpbyhpbnB1dCwgb2N0YXZlKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZS5vdXRwdXQgPT09IFwiTUlESVwiKSB7XG5cdCAgICAgICAgICBuZXd2YWx1ZSA9IHRoaXMuTUlESShpbnB1dCwgb2N0YXZlKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgbmV3dmFsdWUgPSB0aGlzLmZyZXF1ZW5jeShpbnB1dCwgb2N0YXZlKTtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIHJldHVybiBuZXd2YWx1ZTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGZyZXF1ZW5jeToge1xuXHRcblx0ICAgICAgLyogUmV0dXJuIGZyZXEgZGF0YSAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZyZXF1ZW5jeShzdGVwSW4sIG9jdGF2ZUluKSB7XG5cdFxuXHQgICAgICAgIGlmICh0aGlzLm1vZGUuaW5wdXQgPT09IFwibWlkaVwiIHx8IHRoaXMubW9kZS5pbnB1dCA9PT0gXCJNSURJXCIpIHtcblx0ICAgICAgICAgIHRoaXMuc3RlcEluICs9IDYwO1xuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgLy8gd2hhdCBvY3RhdmUgaXMgb3VyIGlucHV0XG5cdCAgICAgICAgdmFyIG9jdGF2ZSA9IE1hdGguZmxvb3Ioc3RlcEluIC8gdGhpcy5zY2FsZS5sZW5ndGgpO1xuXHRcblx0ICAgICAgICBpZiAob2N0YXZlSW4pIHtcblx0ICAgICAgICAgIG9jdGF2ZSArPSBvY3RhdmVJbjtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIC8vIHdoaWNoIHNjYWxlIGRlZ3JlZSAoMCAtIHNjYWxlIGxlbmd0aCkgaXMgb3VyIGlucHV0XG5cdCAgICAgICAgdmFyIHNjYWxlRGVncmVlID0gc3RlcEluICUgdGhpcy5zY2FsZS5sZW5ndGg7XG5cdFxuXHQgICAgICAgIHdoaWxlIChzY2FsZURlZ3JlZSA8IDApIHtcblx0ICAgICAgICAgIHNjYWxlRGVncmVlICs9IHRoaXMuc2NhbGUubGVuZ3RoO1xuXHQgICAgICAgIH1cblx0XG5cdCAgICAgICAgdmFyIHJhdGlvID0gdGhpcy5zY2FsZVtzY2FsZURlZ3JlZV07XG5cdFxuXHQgICAgICAgIHZhciBmcmVxID0gdGhpcy5yb290ICogcmF0aW87XG5cdFxuXHQgICAgICAgIGZyZXEgPSBmcmVxICogTWF0aC5wb3coMiwgb2N0YXZlKTtcblx0XG5cdCAgICAgICAgLy8gdHJ1bmNhdGUgaXJyYXRpb25hbCBudW1iZXJzXG5cdCAgICAgICAgZnJlcSA9IE1hdGguZmxvb3IoZnJlcSAqIDEwMDAwMDAwMDAwMCkgLyAxMDAwMDAwMDAwMDA7XG5cdFxuXHQgICAgICAgIHJldHVybiBmcmVxO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmF0aW86IHtcblx0XG5cdCAgICAgIC8qIEZvcmNlIHJldHVybiByYXRpbyBkYXRhICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gcmF0aW8oc3RlcEluLCBvY3RhdmVJbikge1xuXHRcblx0ICAgICAgICBpZiAodGhpcy5tb2RlLmlucHV0ID09PSBcIm1pZGlcIiB8fCB0aGlzLm1vZGUuaW5wdXQgPT09IFwiTUlESVwiKSB7XG5cdCAgICAgICAgICB0aGlzLnN0ZXBJbiArPSA2MDtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIC8vIHdoYXQgb2N0YXZlIGlzIG91ciBpbnB1dFxuXHQgICAgICAgIHZhciBvY3RhdmUgPSBNYXRoLmZsb29yKHN0ZXBJbiAvIHRoaXMuc2NhbGUubGVuZ3RoKTtcblx0XG5cdCAgICAgICAgaWYgKG9jdGF2ZUluKSB7XG5cdCAgICAgICAgICBvY3RhdmUgKz0gb2N0YXZlSW47XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICAvLyB3aGljaCBzY2FsZSBkZWdyZWUgKDAgLSBzY2FsZSBsZW5ndGgpIGlzIG91ciBpbnB1dFxuXHQgICAgICAgIHZhciBzY2FsZURlZ3JlZSA9IHN0ZXBJbiAlIHRoaXMuc2NhbGUubGVuZ3RoO1xuXHRcblx0ICAgICAgICAvLyB3aGF0IHJhdGlvIGlzIG91ciBpbnB1dCB0byBvdXIga2V5XG5cdCAgICAgICAgdmFyIHJhdGlvID0gTWF0aC5wb3coMiwgb2N0YXZlKSAqIHRoaXMuc2NhbGVbc2NhbGVEZWdyZWVdO1xuXHRcblx0ICAgICAgICByYXRpbyA9IE1hdGguZmxvb3IocmF0aW8gKiAxMDAwMDAwMDAwMDApIC8gMTAwMDAwMDAwMDAwO1xuXHRcblx0ICAgICAgICByZXR1cm4gcmF0aW87XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBNSURJOiB7XG5cdFxuXHQgICAgICAvKiBGb3JjZSByZXR1cm4gYWRqdXN0ZWQgTUlESSBkYXRhICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gTUlESShzdGVwSW4sIG9jdGF2ZUluKSB7XG5cdFxuXHQgICAgICAgIHZhciBuZXd2YWx1ZSA9IHRoaXMuZnJlcXVlbmN5KHN0ZXBJbiwgb2N0YXZlSW4pO1xuXHRcblx0ICAgICAgICB2YXIgbiA9IDY5ICsgMTIgKiBNYXRoLmxvZyhuZXd2YWx1ZSAvIDQ0MCkgLyBNYXRoLmxvZygyKTtcblx0XG5cdCAgICAgICAgbiA9IE1hdGguZmxvb3IobiAqIDEwMDAwMDAwMDApIC8gMTAwMDAwMDAwMDtcblx0XG5cdCAgICAgICAgcmV0dXJuIG47XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjcmVhdGVTY2FsZToge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlU2NhbGUoKSB7XG5cdCAgICAgICAgdmFyIG5ld1NjYWxlID0gW107XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgIG5ld1NjYWxlLnB1c2gobWF0aC5tdG9mKDYwICsgYXJndW1lbnRzW2ldKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMubG9hZFNjYWxlRnJvbUZyZXF1ZW5jaWVzKG5ld1NjYWxlKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNyZWF0ZUpJU2NhbGU6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZUpJU2NhbGUoKSB7XG5cdCAgICAgICAgdGhpcy5zY2FsZSA9IFtdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICB0aGlzLnNjYWxlLnB1c2goYXJndW1lbnRzW2ldKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBsb2FkU2NhbGVGcm9tRnJlcXVlbmNpZXM6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWRTY2FsZUZyb21GcmVxdWVuY2llcyhmcmVxcykge1xuXHQgICAgICAgIHRoaXMuc2NhbGUgPSBbXTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyZXFzLmxlbmd0aCAtIDE7IGkrKykge1xuXHQgICAgICAgICAgdGhpcy5zY2FsZS5wdXNoKGZyZXFzW2ldIC8gZnJlcXNbMF0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGxvYWRTY2FsZToge1xuXHRcblx0ICAgICAgLyogTG9hZCBhIG5ldyBzY2FsZSAqL1xuXHRcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWRTY2FsZShuYW1lKSB7XG5cdFxuXHQgICAgICAgIC8qIGxvYWQgdGhlIHNjYWxlICovXG5cdCAgICAgICAgdmFyIGZyZXFzID0gdGhpcy5zY2FsZXNbbmFtZV0uZnJlcXVlbmNpZXM7XG5cdCAgICAgICAgdGhpcy5sb2FkU2NhbGVGcm9tRnJlcXVlbmNpZXMoZnJlcXMpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2VhcmNoOiB7XG5cdFxuXHQgICAgICAvKiBTZWFyY2ggdGhlIG5hbWVzIG9mIHR1bmluZ3Ncblx0ICAgICAgXHQgUmV0dXJucyBhbiBhcnJheSBvZiBuYW1lcyBvZiB0dW5pbmdzICovXG5cdFxuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc2VhcmNoKGxldHRlcnMpIHtcblx0ICAgICAgICB2YXIgcG9zc2libGUgPSBbXTtcblx0ICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5zY2FsZXMpIHtcblx0ICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGxldHRlcnMudG9Mb3dlckNhc2UoKSkgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHBvc3NpYmxlLnB1c2goa2V5KTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHBvc3NpYmxlO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY2hvcmQ6IHtcblx0XG5cdCAgICAgIC8qIFJldHVybiBhIGNvbGxlY3Rpb24gb2Ygbm90ZXMgYXMgYW4gYXJyYXkgKi9cblx0XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBjaG9yZChtaWRpcykge1xuXHQgICAgICAgIHZhciBvdXRwdXQgPSBbXTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1pZGlzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICBvdXRwdXQucHVzaCh0aGlzLm5vdGUobWlkaXNbaV0pKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIG91dHB1dDtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pO1xuXHRcblx0ICByZXR1cm4gVHVuZTtcblx0fSkoKTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gVHVuZTtcblxuLyoqKi8gfSksXG4vKiA0MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHsgdmFyIHByb3AgPSBwcm9wc1trZXldOyBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChwcm9wLnZhbHVlKSBwcm9wLndyaXRhYmxlID0gdHJ1ZTsgfSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKTsgfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXHRcblx0dmFyIF9jbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9O1xuXHRcblx0Ly9EaXNhYmxlIGpzaGludCB3YXJuaW5nIGNvbmNlcm5pbmcgdHJhaWxpbmcgcmVndWxhciBwYXJhbXNcblx0Lypqc2hpbnQgLVcxMzggKi9cblx0XG5cdHZhciBSYWRpbyA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICAvL2lmIG5vbi1leGlzdGVudCBidXR0b25zIGFyZSBzd2l0Y2hlZCwgdGhleSBhcmUgaWdub3JlZFxuXHRcblx0ICAgIGZ1bmN0aW9uIFJhZGlvKCkge1xuXHQgICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBvblZhbHMgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG5cdCAgICAgICAgICAgIG9uVmFsc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyAzIDogYXJndW1lbnRzWzBdO1xuXHRcblx0ICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmFkaW8pO1xuXHRcblx0ICAgICAgICAvL2VhY2ggb3B0aW9uYWwgJ29uVmFscycgYXJndW1lbnQgc3dpdGNoZXMgb24gdGhhdCB2YWx1ZSBpbiB0aGUgUmFkaW8gaWYgaXQgZXhpc3RzXG5cdCAgICAgICAgLy9JbiB0aGUgZXhhbXBsZSBiZWxvdywgYSAzLWJ1dHRvbiByYWRpbyBpcyBjcmVhdGVkLCBpbmRleCAwIGlzIHN3aXRjaGVkIG9uLCBpbmRleCAxIGlzIHN3aXRjaGVkIG9uIHRoZW4gdGhlbiBhdHRlbXB0ZWQgYWdhaW4gcHJvZHVjaW5nIGFuIHdhcm5pbmcsIGFuZCB0aGUgZmluYWwgYXJndW1lbnQgcHJvZHVjZXMgYSB3YXJuaW5nIGJlY2F1c2UgdGhlIGluZGV4IHZhbHVlIGRvZXMgbm90IGV4aXN0LlxuXHQgICAgICAgIC8vRXhhbXBsZTpcblx0ICAgICAgICAvL2AgIHJhZGlvID0gbmV3IFJhZGlvKDMsIDAsIDEsIDEsIDMpO1xuXHQgICAgICAgIC8v4oCmICBbMSwxLDBdXG5cdFxuXHQgICAgICAgIGlmIChsZW5ndGggPCAwKSB7XG5cdCAgICAgICAgICAgIGxlbmd0aCA9IDE7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aDtcblx0ICAgICAgICB0aGlzLm9uVmFscyA9IG9uVmFscztcblx0ICAgICAgICB0aGlzLmFycmF5ID0gbmV3IEFycmF5KGxlbmd0aCkuZmlsbCgwKTtcblx0XG5cdCAgICAgICAgaWYgKG9uVmFscy5sZW5ndGggPiAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMub24uYXBwbHkodGhpcywgb25WYWxzKTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdFxuXHQgICAgX2NyZWF0ZUNsYXNzKFJhZGlvLCB7XG5cdCAgICAgICAgc2VsZWN0OiB7XG5cdCAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZWxlY3QodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuYXJyYXkuZmlsbCgwKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuYXJyYXlbdmFsdWVdID0gMTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBmbGlwOiB7XG5cdCAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmbGlwKCkge1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHZhbHVlcyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhbHVlc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcblx0ICAgICAgICAgICAgICAgIH1cblx0XG5cdCAgICAgICAgICAgICAgICAvL2ZsaXBzIHRoZSBzcGVjaWZpZWQgdmFsdWVzLiBpZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIGZsaXBzIGFsbCBidXR0b25zXG5cdCAgICAgICAgICAgICAgICB2YXIgYSA9IHRoaXMuYXJyYXk7XG5cdCAgICAgICAgICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAodikge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiA+IGEubGVuZ3RoIC0gMSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiV2FybmluZzogQW5vblJhZGlvW1wiICsgdiArIFwiXSBkb2VzIG5vdCBleGlzdFwiKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbdl0gPSBhW3ZdID8gMCA6IDE7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYS5mb3JFYWNoKGZ1bmN0aW9uICh2LCBpLCBhcnIpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgYXJyW2ldID0gdiA/IDAgOiAxO1xuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIG9uOiB7XG5cdCAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBvbigpIHtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCB2YWx1ZXMgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG5cdCAgICAgICAgICAgICAgICB9XG5cdFxuXHQgICAgICAgICAgICAgICAgLy9zd2l0Y2ggb24gdGhlIHNwZWNpZmllZCB2YWx1ZXMuIGlmIG5vIHZhbHVlIHNwZWNpZmllZCwgZmxpcHMgb24gYWxsIGJ1dHRvbnNcblx0ICAgICAgICAgICAgICAgIHZhciBhID0gdGhpcy5hcnJheTtcblx0ICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID4gYS5sZW5ndGggLSAxKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJXYXJuaW5nOiBBbm9uUmFkaW9bXCIgKyB2ICsgXCJdIGV4Y2VlZHMgc2l6ZSBvZiBvYmplY3RcIik7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYVt2XSA9PT0gMSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIldhcm5pbmc6IEFub25SYWRpb1tcIiArIHYgKyBcIl0gd2FzIGFscmVhZHkgb24uXCIpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVt2XSA9IDE7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYS5maWxsKDEpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIG9mZjoge1xuXHQgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gb2ZmKCkge1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHZhbHVlcyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhbHVlc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcblx0ICAgICAgICAgICAgICAgIH1cblx0XG5cdCAgICAgICAgICAgICAgICAvL3N3aXRjaCBvZmYgdGhlIHNwZWNpZmllZCB2YWx1ZXMuIGlmIG5vIHZhbHVlIHNwZWNpZmllZCwgZmxpcHMgb2ZmIGFsbCBidXR0b25zXG5cdCAgICAgICAgICAgICAgICB2YXIgYSA9IHRoaXMuYXJyYXk7XG5cdCAgICAgICAgICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAodikge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBhW3ZdID0gMDtcblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYS5maWxsKDApO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0XG5cdCAgICByZXR1cm4gUmFkaW87XG5cdH0pKCk7XG5cdFxuXHRtb2R1bGUuZXhwb3J0cyA9IFJhZGlvO1xuXG4vKioqLyB9KSxcbi8qIDQyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIFdBQUNsb2NrID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Mylcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gV0FBQ2xvY2tcblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB3aW5kb3cuV0FBQ2xvY2sgPSBXQUFDbG9ja1xuXG5cbi8qKiovIH0pLFxuLyogNDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykge3ZhciBpc0Jyb3dzZXIgPSAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpXG5cdFxuXHR2YXIgQ0xPQ0tfREVGQVVMVFMgPSB7XG5cdCAgdG9sZXJhbmNlTGF0ZTogMC4xMCxcblx0ICB0b2xlcmFuY2VFYXJseTogMC4wMDFcblx0fVxuXHRcblx0Ly8gPT09PT09PT09PT09PT09PT09PT0gRXZlbnQgPT09PT09PT09PT09PT09PT09PT0gLy9cblx0dmFyIEV2ZW50ID0gZnVuY3Rpb24oY2xvY2ssIGRlYWRsaW5lLCBmdW5jKSB7XG5cdCAgdGhpcy5jbG9jayA9IGNsb2NrXG5cdCAgdGhpcy5mdW5jID0gZnVuY1xuXHQgIHRoaXMuX2NsZWFyZWQgPSBmYWxzZSAvLyBGbGFnIHVzZWQgdG8gY2xlYXIgYW4gZXZlbnQgaW5zaWRlIGNhbGxiYWNrXG5cdFxuXHQgIHRoaXMudG9sZXJhbmNlTGF0ZSA9IGNsb2NrLnRvbGVyYW5jZUxhdGVcblx0ICB0aGlzLnRvbGVyYW5jZUVhcmx5ID0gY2xvY2sudG9sZXJhbmNlRWFybHlcblx0ICB0aGlzLl9sYXRlc3RUaW1lID0gbnVsbFxuXHQgIHRoaXMuX2VhcmxpZXN0VGltZSA9IG51bGxcblx0ICB0aGlzLmRlYWRsaW5lID0gbnVsbFxuXHQgIHRoaXMucmVwZWF0VGltZSA9IG51bGxcblx0XG5cdCAgdGhpcy5zY2hlZHVsZShkZWFkbGluZSlcblx0fVxuXHRcblx0Ly8gVW5zY2hlZHVsZXMgdGhlIGV2ZW50XG5cdEV2ZW50LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuXHQgIHRoaXMuY2xvY2suX3JlbW92ZUV2ZW50KHRoaXMpXG5cdCAgdGhpcy5fY2xlYXJlZCA9IHRydWVcblx0ICByZXR1cm4gdGhpc1xuXHR9XG5cdFxuXHQvLyBTZXRzIHRoZSBldmVudCB0byByZXBlYXQgZXZlcnkgYHRpbWVgIHNlY29uZHMuXG5cdEV2ZW50LnByb3RvdHlwZS5yZXBlYXQgPSBmdW5jdGlvbih0aW1lKSB7XG5cdCAgaWYgKHRpbWUgPT09IDApXG5cdCAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlbGF5IGNhbm5vdCBiZSAwJylcblx0ICB0aGlzLnJlcGVhdFRpbWUgPSB0aW1lXG5cdCAgaWYgKCF0aGlzLmNsb2NrLl9oYXNFdmVudCh0aGlzKSlcblx0ICAgIHRoaXMuc2NoZWR1bGUodGhpcy5kZWFkbGluZSArIHRoaXMucmVwZWF0VGltZSlcblx0ICByZXR1cm4gdGhpc1xuXHR9XG5cdFxuXHQvLyBTZXRzIHRoZSB0aW1lIHRvbGVyYW5jZSBvZiB0aGUgZXZlbnQuXG5cdC8vIFRoZSBldmVudCB3aWxsIGJlIGV4ZWN1dGVkIGluIHRoZSBpbnRlcnZhbCBgW2RlYWRsaW5lIC0gZWFybHksIGRlYWRsaW5lICsgbGF0ZV1gXG5cdC8vIElmIHRoZSBjbG9jayBmYWlscyB0byBleGVjdXRlIHRoZSBldmVudCBpbiB0aW1lLCB0aGUgZXZlbnQgd2lsbCBiZSBkcm9wcGVkLlxuXHRFdmVudC5wcm90b3R5cGUudG9sZXJhbmNlID0gZnVuY3Rpb24odmFsdWVzKSB7XG5cdCAgaWYgKHR5cGVvZiB2YWx1ZXMubGF0ZSA9PT0gJ251bWJlcicpXG5cdCAgICB0aGlzLnRvbGVyYW5jZUxhdGUgPSB2YWx1ZXMubGF0ZVxuXHQgIGlmICh0eXBlb2YgdmFsdWVzLmVhcmx5ID09PSAnbnVtYmVyJylcblx0ICAgIHRoaXMudG9sZXJhbmNlRWFybHkgPSB2YWx1ZXMuZWFybHlcblx0ICB0aGlzLl9yZWZyZXNoRWFybHlMYXRlRGF0ZXMoKVxuXHQgIGlmICh0aGlzLmNsb2NrLl9oYXNFdmVudCh0aGlzKSkge1xuXHQgICAgdGhpcy5jbG9jay5fcmVtb3ZlRXZlbnQodGhpcylcblx0ICAgIHRoaXMuY2xvY2suX2luc2VydEV2ZW50KHRoaXMpXG5cdCAgfVxuXHQgIHJldHVybiB0aGlzXG5cdH1cblx0XG5cdC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZXZlbnQgaXMgcmVwZWF0ZWQsIGZhbHNlIG90aGVyd2lzZVxuXHRFdmVudC5wcm90b3R5cGUuaXNSZXBlYXRlZCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5yZXBlYXRUaW1lICE9PSBudWxsIH1cblx0XG5cdC8vIFNjaGVkdWxlcyB0aGUgZXZlbnQgdG8gYmUgcmFuIGJlZm9yZSBgZGVhZGxpbmVgLlxuXHQvLyBJZiB0aGUgdGltZSBpcyB3aXRoaW4gdGhlIGV2ZW50IHRvbGVyYW5jZSwgd2UgaGFuZGxlIHRoZSBldmVudCBpbW1lZGlhdGVseS5cblx0Ly8gSWYgdGhlIGV2ZW50IHdhcyBhbHJlYWR5IHNjaGVkdWxlZCBhdCBhIGRpZmZlcmVudCB0aW1lLCBpdCBpcyByZXNjaGVkdWxlZC5cblx0RXZlbnQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24oZGVhZGxpbmUpIHtcblx0ICB0aGlzLl9jbGVhcmVkID0gZmFsc2Vcblx0ICB0aGlzLmRlYWRsaW5lID0gZGVhZGxpbmVcblx0ICB0aGlzLl9yZWZyZXNoRWFybHlMYXRlRGF0ZXMoKVxuXHRcblx0ICBpZiAodGhpcy5jbG9jay5jb250ZXh0LmN1cnJlbnRUaW1lID49IHRoaXMuX2VhcmxpZXN0VGltZSkge1xuXHQgICAgdGhpcy5fZXhlY3V0ZSgpXG5cdCAgXG5cdCAgfSBlbHNlIGlmICh0aGlzLmNsb2NrLl9oYXNFdmVudCh0aGlzKSkge1xuXHQgICAgdGhpcy5jbG9jay5fcmVtb3ZlRXZlbnQodGhpcylcblx0ICAgIHRoaXMuY2xvY2suX2luc2VydEV2ZW50KHRoaXMpXG5cdCAgXG5cdCAgfSBlbHNlIHRoaXMuY2xvY2suX2luc2VydEV2ZW50KHRoaXMpXG5cdH1cblx0XG5cdEV2ZW50LnByb3RvdHlwZS50aW1lU3RyZXRjaCA9IGZ1bmN0aW9uKHRSZWYsIHJhdGlvKSB7XG5cdCAgaWYgKHRoaXMuaXNSZXBlYXRlZCgpKVxuXHQgICAgdGhpcy5yZXBlYXRUaW1lID0gdGhpcy5yZXBlYXRUaW1lICogcmF0aW9cblx0XG5cdCAgdmFyIGRlYWRsaW5lID0gdFJlZiArIHJhdGlvICogKHRoaXMuZGVhZGxpbmUgLSB0UmVmKVxuXHQgIC8vIElmIHRoZSBkZWFkbGluZSBpcyB0b28gY2xvc2Ugb3IgcGFzdCwgYW5kIHRoZSBldmVudCBoYXMgYSByZXBlYXQsXG5cdCAgLy8gd2UgY2FsY3VsYXRlIHRoZSBuZXh0IHJlcGVhdCBwb3NzaWJsZSBpbiB0aGUgc3RyZXRjaGVkIHNwYWNlLlxuXHQgIGlmICh0aGlzLmlzUmVwZWF0ZWQoKSkge1xuXHQgICAgd2hpbGUgKHRoaXMuY2xvY2suY29udGV4dC5jdXJyZW50VGltZSA+PSBkZWFkbGluZSAtIHRoaXMudG9sZXJhbmNlRWFybHkpXG5cdCAgICAgIGRlYWRsaW5lICs9IHRoaXMucmVwZWF0VGltZVxuXHQgIH1cblx0ICB0aGlzLnNjaGVkdWxlKGRlYWRsaW5lKVxuXHR9XG5cdFxuXHQvLyBFeGVjdXRlcyB0aGUgZXZlbnRcblx0RXZlbnQucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24oKSB7XG5cdCAgaWYgKHRoaXMuY2xvY2suX3N0YXJ0ZWQgPT09IGZhbHNlKSByZXR1cm5cblx0ICB0aGlzLmNsb2NrLl9yZW1vdmVFdmVudCh0aGlzKVxuXHRcblx0ICBpZiAodGhpcy5jbG9jay5jb250ZXh0LmN1cnJlbnRUaW1lIDwgdGhpcy5fbGF0ZXN0VGltZSlcblx0ICAgIHRoaXMuZnVuYyh0aGlzKVxuXHQgIGVsc2Uge1xuXHQgICAgaWYgKHRoaXMub25leHBpcmVkKSB0aGlzLm9uZXhwaXJlZCh0aGlzKVxuXHQgICAgY29uc29sZS53YXJuKCdldmVudCBleHBpcmVkJylcblx0ICB9XG5cdCAgLy8gSW4gdGhlIGNhc2UgYHNjaGVkdWxlYCBpcyBjYWxsZWQgaW5zaWRlIGBmdW5jYCwgd2UgbmVlZCB0byBhdm9pZFxuXHQgIC8vIG92ZXJyd3JpdGluZyB3aXRoIHlldCBhbm90aGVyIGBzY2hlZHVsZWAuXG5cdCAgaWYgKCF0aGlzLmNsb2NrLl9oYXNFdmVudCh0aGlzKSAmJiB0aGlzLmlzUmVwZWF0ZWQoKSAmJiAhdGhpcy5fY2xlYXJlZClcblx0ICAgIHRoaXMuc2NoZWR1bGUodGhpcy5kZWFkbGluZSArIHRoaXMucmVwZWF0VGltZSkgXG5cdH1cblx0XG5cdC8vIFVwZGF0ZXMgY2FjaGVkIHRpbWVzXG5cdEV2ZW50LnByb3RvdHlwZS5fcmVmcmVzaEVhcmx5TGF0ZURhdGVzID0gZnVuY3Rpb24oKSB7XG5cdCAgdGhpcy5fbGF0ZXN0VGltZSA9IHRoaXMuZGVhZGxpbmUgKyB0aGlzLnRvbGVyYW5jZUxhdGVcblx0ICB0aGlzLl9lYXJsaWVzdFRpbWUgPSB0aGlzLmRlYWRsaW5lIC0gdGhpcy50b2xlcmFuY2VFYXJseVxuXHR9XG5cdFxuXHQvLyA9PT09PT09PT09PT09PT09PT09PSBXQUFDbG9jayA9PT09PT09PT09PT09PT09PT09PSAvL1xuXHR2YXIgV0FBQ2xvY2sgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQsIG9wdHMpIHtcblx0ICB2YXIgc2VsZiA9IHRoaXNcblx0ICBvcHRzID0gb3B0cyB8fCB7fVxuXHQgIHRoaXMudGlja01ldGhvZCA9IG9wdHMudGlja01ldGhvZCB8fCAnU2NyaXB0UHJvY2Vzc29yTm9kZSdcblx0ICB0aGlzLnRvbGVyYW5jZUVhcmx5ID0gb3B0cy50b2xlcmFuY2VFYXJseSB8fCBDTE9DS19ERUZBVUxUUy50b2xlcmFuY2VFYXJseVxuXHQgIHRoaXMudG9sZXJhbmNlTGF0ZSA9IG9wdHMudG9sZXJhbmNlTGF0ZSB8fCBDTE9DS19ERUZBVUxUUy50b2xlcmFuY2VMYXRlXG5cdCAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuXHQgIHRoaXMuX2V2ZW50cyA9IFtdXG5cdCAgdGhpcy5fc3RhcnRlZCA9IGZhbHNlXG5cdH1cblx0XG5cdC8vIC0tLS0tLS0tLS0gUHVibGljIEFQSSAtLS0tLS0tLS0tIC8vXG5cdC8vIFNjaGVkdWxlcyBgZnVuY2AgdG8gcnVuIGFmdGVyIGBkZWxheWAgc2Vjb25kcy5cblx0V0FBQ2xvY2sucHJvdG90eXBlLnNldFRpbWVvdXQgPSBmdW5jdGlvbihmdW5jLCBkZWxheSkge1xuXHQgIHJldHVybiB0aGlzLl9jcmVhdGVFdmVudChmdW5jLCB0aGlzLl9hYnNUaW1lKGRlbGF5KSlcblx0fVxuXHRcblx0Ly8gU2NoZWR1bGVzIGBmdW5jYCB0byBydW4gYmVmb3JlIGBkZWFkbGluZWAuXG5cdFdBQUNsb2NrLnByb3RvdHlwZS5jYWxsYmFja0F0VGltZSA9IGZ1bmN0aW9uKGZ1bmMsIGRlYWRsaW5lKSB7XG5cdCAgcmV0dXJuIHRoaXMuX2NyZWF0ZUV2ZW50KGZ1bmMsIGRlYWRsaW5lKVxuXHR9XG5cdFxuXHQvLyBTdHJldGNoZXMgYGRlYWRsaW5lYCBhbmQgYHJlcGVhdGAgb2YgYWxsIHNjaGVkdWxlZCBgZXZlbnRzYCBieSBgcmF0aW9gLCBrZWVwaW5nXG5cdC8vIHRoZWlyIHJlbGF0aXZlIGRpc3RhbmNlIHRvIGB0UmVmYC4gSW4gZmFjdCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gY2hhbmdpbmcgdGhlIHRlbXBvLlxuXHRXQUFDbG9jay5wcm90b3R5cGUudGltZVN0cmV0Y2ggPSBmdW5jdGlvbih0UmVmLCBldmVudHMsIHJhdGlvKSB7XG5cdCAgZXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpIHsgZXZlbnQudGltZVN0cmV0Y2godFJlZiwgcmF0aW8pIH0pXG5cdCAgcmV0dXJuIGV2ZW50c1xuXHR9XG5cdFxuXHQvLyBSZW1vdmVzIGFsbCBzY2hlZHVsZWQgZXZlbnRzIGFuZCBzdGFydHMgdGhlIGNsb2NrIFxuXHRXQUFDbG9jay5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbigpIHtcblx0ICBpZiAodGhpcy5fc3RhcnRlZCA9PT0gZmFsc2UpIHtcblx0ICAgIHZhciBzZWxmID0gdGhpc1xuXHQgICAgdGhpcy5fc3RhcnRlZCA9IHRydWVcblx0ICAgIHRoaXMuX2V2ZW50cyA9IFtdXG5cdFxuXHQgICAgaWYgKHRoaXMudGlja01ldGhvZCA9PT0gJ1NjcmlwdFByb2Nlc3Nvck5vZGUnKSB7XG5cdCAgICAgIHZhciBidWZmZXJTaXplID0gMjU2XG5cdCAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgbm9kZSB0byBhdm9pZCBnYXJiYWdlIGNvbGxlY3Rpb25cblx0ICAgICAgdGhpcy5fY2xvY2tOb2RlID0gdGhpcy5jb250ZXh0LmNyZWF0ZVNjcmlwdFByb2Nlc3NvcihidWZmZXJTaXplLCAxLCAxKVxuXHQgICAgICB0aGlzLl9jbG9ja05vZGUuY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pXG5cdCAgICAgIHRoaXMuX2Nsb2NrTm9kZS5vbmF1ZGlvcHJvY2VzcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkgeyBzZWxmLl90aWNrKCkgfSlcblx0ICAgICAgfVxuXHQgICAgfSBlbHNlIGlmICh0aGlzLnRpY2tNZXRob2QgPT09ICdtYW51YWwnKSBudWxsIC8vIF90aWNrIGlzIGNhbGxlZCBtYW51YWxseVxuXHRcblx0ICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHRpY2tNZXRob2QgJyArIHRoaXMudGlja01ldGhvZClcblx0ICB9XG5cdH1cblx0XG5cdC8vIFN0b3BzIHRoZSBjbG9ja1xuXHRXQUFDbG9jay5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHQgIGlmICh0aGlzLl9zdGFydGVkID09PSB0cnVlKSB7XG5cdCAgICB0aGlzLl9zdGFydGVkID0gZmFsc2Vcblx0ICAgIHRoaXMuX2Nsb2NrTm9kZS5kaXNjb25uZWN0KClcblx0ICB9ICBcblx0fVxuXHRcblx0Ly8gLS0tLS0tLS0tLSBQcml2YXRlIC0tLS0tLS0tLS0gLy9cblx0XG5cdC8vIFRoaXMgZnVuY3Rpb24gaXMgcmFuIHBlcmlvZGljYWxseSwgYW5kIGF0IGVhY2ggdGljayBpdCBleGVjdXRlc1xuXHQvLyBldmVudHMgZm9yIHdoaWNoIGBjdXJyZW50VGltZWAgaXMgaW5jbHVkZWQgaW4gdGhlaXIgdG9sZXJhbmNlIGludGVydmFsLlxuXHRXQUFDbG9jay5wcm90b3R5cGUuX3RpY2sgPSBmdW5jdGlvbigpIHtcblx0ICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHMuc2hpZnQoKVxuXHRcblx0ICB3aGlsZShldmVudCAmJiBldmVudC5fZWFybGllc3RUaW1lIDw9IHRoaXMuY29udGV4dC5jdXJyZW50VGltZSkge1xuXHQgICAgZXZlbnQuX2V4ZWN1dGUoKVxuXHQgICAgZXZlbnQgPSB0aGlzLl9ldmVudHMuc2hpZnQoKVxuXHQgIH1cblx0XG5cdCAgLy8gUHV0IGJhY2sgdGhlIGxhc3QgZXZlbnRcblx0ICBpZihldmVudCkgdGhpcy5fZXZlbnRzLnVuc2hpZnQoZXZlbnQpXG5cdH1cblx0XG5cdC8vIENyZWF0ZXMgYW4gZXZlbnQgYW5kIGluc2VydCBpdCB0byB0aGUgbGlzdFxuXHRXQUFDbG9jay5wcm90b3R5cGUuX2NyZWF0ZUV2ZW50ID0gZnVuY3Rpb24oZnVuYywgZGVhZGxpbmUpIHtcblx0ICByZXR1cm4gbmV3IEV2ZW50KHRoaXMsIGRlYWRsaW5lLCBmdW5jKVxuXHR9XG5cdFxuXHQvLyBJbnNlcnRzIGFuIGV2ZW50IHRvIHRoZSBsaXN0XG5cdFdBQUNsb2NrLnByb3RvdHlwZS5faW5zZXJ0RXZlbnQgPSBmdW5jdGlvbihldmVudCkge1xuXHQgIHRoaXMuX2V2ZW50cy5zcGxpY2UodGhpcy5faW5kZXhCeVRpbWUoZXZlbnQuX2VhcmxpZXN0VGltZSksIDAsIGV2ZW50KVxuXHR9XG5cdFxuXHQvLyBSZW1vdmVzIGFuIGV2ZW50IGZyb20gdGhlIGxpc3Rcblx0V0FBQ2xvY2sucHJvdG90eXBlLl9yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKGV2ZW50KSB7XG5cdCAgdmFyIGluZCA9IHRoaXMuX2V2ZW50cy5pbmRleE9mKGV2ZW50KVxuXHQgIGlmIChpbmQgIT09IC0xKSB0aGlzLl9ldmVudHMuc3BsaWNlKGluZCwgMSlcblx0fVxuXHRcblx0Ly8gUmV0dXJucyB0cnVlIGlmIGBldmVudGAgaXMgaW4gcXVldWUsIGZhbHNlIG90aGVyd2lzZVxuXHRXQUFDbG9jay5wcm90b3R5cGUuX2hhc0V2ZW50ID0gZnVuY3Rpb24oZXZlbnQpIHtcblx0IHJldHVybiB0aGlzLl9ldmVudHMuaW5kZXhPZihldmVudCkgIT09IC0xXG5cdH1cblx0XG5cdC8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBldmVudCB3aG9zZSBkZWFkbGluZSBpcyA+PSB0byBgZGVhZGxpbmVgXG5cdFdBQUNsb2NrLnByb3RvdHlwZS5faW5kZXhCeVRpbWUgPSBmdW5jdGlvbihkZWFkbGluZSkge1xuXHQgIC8vIHBlcmZvcm1zIGEgYmluYXJ5IHNlYXJjaFxuXHQgIHZhciBsb3cgPSAwXG5cdCAgICAsIGhpZ2ggPSB0aGlzLl9ldmVudHMubGVuZ3RoXG5cdCAgICAsIG1pZFxuXHQgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG5cdCAgICBtaWQgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpXG5cdCAgICBpZiAodGhpcy5fZXZlbnRzW21pZF0uX2VhcmxpZXN0VGltZSA8IGRlYWRsaW5lKVxuXHQgICAgICBsb3cgPSBtaWQgKyAxXG5cdCAgICBlbHNlIGhpZ2ggPSBtaWRcblx0ICB9XG5cdCAgcmV0dXJuIGxvd1xuXHR9XG5cdFxuXHQvLyBDb252ZXJ0cyBmcm9tIHJlbGF0aXZlIHRpbWUgdG8gYWJzb2x1dGUgdGltZVxuXHRXQUFDbG9jay5wcm90b3R5cGUuX2Fic1RpbWUgPSBmdW5jdGlvbihyZWxUaW1lKSB7XG5cdCAgcmV0dXJuIHJlbFRpbWUgKyB0aGlzLmNvbnRleHQuY3VycmVudFRpbWVcblx0fVxuXHRcblx0Ly8gQ29udmVydHMgZnJvbSBhYnNvbHV0ZSB0aW1lIHRvIHJlbGF0aXZlIHRpbWUgXG5cdFdBQUNsb2NrLnByb3RvdHlwZS5fcmVsVGltZSA9IGZ1bmN0aW9uKGFic1RpbWUpIHtcblx0ICByZXR1cm4gYWJzVGltZSAtIHRoaXMuY29udGV4dC5jdXJyZW50VGltZVxuXHR9XG5cdC8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KSkpXG5cbi8qKiovIH0pLFxuLyogNDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblx0dmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXHRcblx0Ly8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG5cdC8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuXHQvLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG5cdC8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cdFxuXHR2YXIgY2FjaGVkU2V0VGltZW91dDtcblx0dmFyIGNhY2hlZENsZWFyVGltZW91dDtcblx0XG5cdGZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG5cdCAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcblx0fVxuXHRmdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcblx0ICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG5cdH1cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIHRyeSB7XG5cdCAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuXHQgICAgICAgIH1cblx0ICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcblx0ICAgIH1cblx0ICAgIHRyeSB7XG5cdCAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG5cdCAgICB9XG5cdH0gKCkpXG5cdGZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG5cdCAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuXHQgICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuXHQgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG5cdCAgICB9XG5cdCAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuXHQgICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG5cdCAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG5cdCAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcblx0ICAgIH1cblx0ICAgIHRyeSB7XG5cdCAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuXHQgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG5cdCAgICB9IGNhdGNoKGUpe1xuXHQgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuXHQgICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG5cdCAgICAgICAgfSBjYXRjaChlKXtcblx0ICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3Jcblx0ICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0XG5cdFxuXHR9XG5cdGZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcblx0ICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuXHQgICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuXHQgICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcblx0ICAgIH1cblx0ICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcblx0ICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuXHQgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcblx0ICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG5cdCAgICB9XG5cdCAgICB0cnkge1xuXHQgICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3Ncblx0ICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG5cdCAgICB9IGNhdGNoIChlKXtcblx0ICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG5cdCAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuXHQgICAgICAgIH0gY2F0Y2ggKGUpe1xuXHQgICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cblx0ICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuXHQgICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdFxuXHRcblx0XG5cdH1cblx0dmFyIHF1ZXVlID0gW107XG5cdHZhciBkcmFpbmluZyA9IGZhbHNlO1xuXHR2YXIgY3VycmVudFF1ZXVlO1xuXHR2YXIgcXVldWVJbmRleCA9IC0xO1xuXHRcblx0ZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuXHQgICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgfVxuXHQgICAgZHJhaW5pbmcgPSBmYWxzZTtcblx0ICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG5cdCAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuXHQgICAgfVxuXHQgICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuXHQgICAgICAgIGRyYWluUXVldWUoKTtcblx0ICAgIH1cblx0fVxuXHRcblx0ZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcblx0ICAgIGlmIChkcmFpbmluZykge1xuXHQgICAgICAgIHJldHVybjtcblx0ICAgIH1cblx0ICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuXHQgICAgZHJhaW5pbmcgPSB0cnVlO1xuXHRcblx0ICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG5cdCAgICB3aGlsZShsZW4pIHtcblx0ICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcblx0ICAgICAgICBxdWV1ZSA9IFtdO1xuXHQgICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcblx0ICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuXHQgICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcblx0ICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG5cdCAgICB9XG5cdCAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuXHQgICAgZHJhaW5pbmcgPSBmYWxzZTtcblx0ICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0fVxuXHRcblx0cHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcblx0ICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcblx0ICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0ICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG5cdCAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuXHQgICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG5cdCAgICB9XG5cdH07XG5cdFxuXHQvLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5cdGZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuXHQgICAgdGhpcy5mdW4gPSBmdW47XG5cdCAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG5cdH1cblx0SXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuXHQgICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG5cdH07XG5cdHByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5cdHByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5cdHByb2Nlc3MuZW52ID0ge307XG5cdHByb2Nlc3MuYXJndiA9IFtdO1xuXHRwcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcblx0cHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXHRcblx0ZnVuY3Rpb24gbm9vcCgpIHt9XG5cdFxuXHRwcm9jZXNzLm9uID0gbm9vcDtcblx0cHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5cdHByb2Nlc3Mub25jZSA9IG5vb3A7XG5cdHByb2Nlc3Mub2ZmID0gbm9vcDtcblx0cHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5cdHByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcblx0cHJvY2Vzcy5lbWl0ID0gbm9vcDtcblx0cHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xuXHRwcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXHRcblx0cHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXHRcblx0cHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0ICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcblx0fTtcblx0XG5cdHByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5cdHByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG5cdCAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xuXHR9O1xuXHRwcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuXG5cbi8qKiovIH0pLFxuLyogNDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIga2V5IGluIHByb3BzKSB7IHZhciBwcm9wID0gcHJvcHNba2V5XTsgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAocHJvcC52YWx1ZSkgcHJvcC53cml0YWJsZSA9IHRydWU7IH0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcyk7IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfTtcblx0XG5cdHZhciBjbG9jayA9IF9fd2VicGFja19yZXF1aXJlX18oMSkuY2xvY2s7XG5cdFxuXHR2YXIgSW50ZXJ2YWwgPSAoZnVuY3Rpb24gKCkge1xuXHQgIGZ1bmN0aW9uIEludGVydmFsKHJhdGUsIGZ1bmMsIG9uKSB7XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSW50ZXJ2YWwpO1xuXHRcblx0ICAgIHRoaXMucmF0ZSA9IHJhdGU7XG5cdCAgICB0aGlzLm9uID0gb247XG5cdCAgICB0aGlzLmNsb2NrID0gY2xvY2soKTsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cdFxuXHQgICAgdGhpcy5wYXR0ZXJuID0gWzFdO1xuXHQgICAgdGhpcy5pbmRleCA9IDA7XG5cdFxuXHQgICAgdGhpcy5ldmVudCA9IGZ1bmMgPyBmdW5jIDogZnVuY3Rpb24gKCkge307XG5cdFxuXHQgICAgaWYgKHRoaXMub24pIHtcblx0ICAgICAgdGhpcy5zdGFydCgpO1xuXHQgICAgfVxuXHQgIH1cblx0XG5cdCAgX2NyZWF0ZUNsYXNzKEludGVydmFsLCB7XG5cdCAgICBfZXZlbnQ6IHtcblx0ICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9ldmVudChlKSB7XG5cdCAgICAgICAgLy8gIGlmICh0aGlzLnBhdHRlcm5bdGhpcy5pbmRleCV0aGlzLnBhdHRlcm4ubGVuZ3RoXSkge1xuXHQgICAgICAgIHRoaXMuZXZlbnQoZSk7XG5cdCAgICAgICAgLy8gIH1cblx0ICAgICAgICB0aGlzLmluZGV4Kys7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzdG9wOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBzdG9wKCkge1xuXHQgICAgICAgIHRoaXMub24gPSBmYWxzZTtcblx0ICAgICAgICB0aGlzLmludGVydmFsLmNsZWFyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzdGFydDoge1xuXHQgICAgICB2YWx1ZTogZnVuY3Rpb24gc3RhcnQoKSB7XG5cdCAgICAgICAgdGhpcy5vbiA9IHRydWU7XG5cdCAgICAgICAgdGhpcy5pbnRlcnZhbCA9IHRoaXMuY2xvY2suY2FsbGJhY2tBdFRpbWUodGhpcy5fZXZlbnQuYmluZCh0aGlzKSwgdGhpcy5jbG9jay5jb250ZXh0LmN1cnJlbnRUaW1lKS5yZXBlYXQodGhpcy5yYXRlIC8gMTAwMCkudG9sZXJhbmNlKHsgZWFybHk6IDAuMSwgbGF0ZTogMSB9KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1zOiB7XG5cdCAgICAgIHZhbHVlOiBmdW5jdGlvbiBtcyhuZXdyYXRlKSB7XG5cdCAgICAgICAgaWYgKHRoaXMub24pIHtcblx0ICAgICAgICAgIHZhciByYXRpbyA9IG5ld3JhdGUgLyB0aGlzLnJhdGU7XG5cdCAgICAgICAgICB0aGlzLnJhdGUgPSBuZXdyYXRlO1xuXHQgICAgICAgICAgdGhpcy5jbG9jay50aW1lU3RyZXRjaCh0aGlzLmNsb2NrLmNvbnRleHQuY3VycmVudFRpbWUsIFt0aGlzLmludGVydmFsXSwgcmF0aW8pO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLnJhdGUgPSBuZXdyYXRlO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pO1xuXHRcblx0ICByZXR1cm4gSW50ZXJ2YWw7XG5cdH0pKCk7XG5cdFxuXHRtb2R1bGUuZXhwb3J0cyA9IEludGVydmFsO1xuXG4vKioqLyB9KVxuLyoqKioqKi8gXSlcbn0pO1xuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW5kbFluQmhZMnM2THk4dmQyVmljR0ZqYXk5MWJtbDJaWEp6WVd4TmIyUjFiR1ZFWldacGJtbDBhVzl1SWl3aWQyVmljR0ZqYXpvdkx5OTNaV0p3WVdOckwySnZiM1J6ZEhKaGNDQmlNalk1WVdObFpqaGpZV1JoTnpBNE5EVXdNaUlzSW5kbFluQmhZMnM2THk4dkxpOXBibVJsZUM1cWN5SXNJbmRsWW5CaFkyczZMeTh2TGk5c2FXSXZiV0ZwYmk1cWN5SXNJbmRsWW5CaFkyczZMeTh2TGk5c2FXSXZhVzUwWlhKbVlXTmxjeTlwYm1SbGVDNXFjeUlzSW5kbFluQmhZMnM2THk4dkxpOXNhV0l2YVc1MFpYSm1ZV05sY3k5d2IzTnBkR2x2Ymk1cWN5SXNJbmRsWW5CaFkyczZMeTh2TGk5c2FXSXZkWFJwYkM5emRtY3Vhbk1pTENKM1pXSndZV05yT2k4dkx5NHZiR2xpTDNWMGFXd3ZiV0YwYUM1cWN5SXNJbmRsWW5CaFkyczZMeTh2TGk5c2FXSXZZMjl5WlM5cGJuUmxjbVpoWTJVdWFuTWlMQ0ozWldKd1lXTnJPaTh2THk0dmJHbGlMM1YwYVd3dlpHOXRMbXB6SWl3aWQyVmljR0ZqYXpvdkx5OHVMMnhwWWk5MWRHbHNMM1YwYVd3dWFuTWlMQ0ozWldKd1lXTnJPaTh2THk0dmJHbGlMM1YwYVd3dmRHOTFZMmd1YW5NaUxDSjNaV0p3WVdOck9pOHZMeTR2Zmk5bGRtVnVkSE12WlhabGJuUnpMbXB6SWl3aWQyVmljR0ZqYXpvdkx5OHVMMnhwWWk5dGIyUmxiSE12YzNSbGNDNXFjeUlzSW5kbFluQmhZMnM2THk4dkxpOXNhV0l2ZFhScGJDOXBiblJsY21GamRHbHZiaTVxY3lJc0luZGxZbkJoWTJzNkx5OHZMaTlzYVdJdmJXOWtaV3h6TDNSdloyZHNaUzVxY3lJc0luZGxZbkJoWTJzNkx5OHZMaTlzYVdJdmFXNTBaWEptWVdObGN5OXpiR2xrWlhJdWFuTWlMQ0ozWldKd1lXTnJPaTh2THk0dmJHbGlMMmx1ZEdWeVptRmpaWE12ZEc5bloyeGxMbXB6SWl3aWQyVmljR0ZqYXpvdkx5OHVMMnhwWWk5cGJuUmxjbVpoWTJWekwySjFkSFJ2Ymk1cWN5SXNJbmRsWW5CaFkyczZMeTh2TGk5c2FXSXZZMjl0Y0c5dVpXNTBjeTlpZFhSMGIyNTBaVzF3YkdGMFpTNXFjeUlzSW5kbFluQmhZMnM2THk4dkxpOXNhV0l2YVc1MFpYSm1ZV05sY3k5MFpYaDBZblYwZEc5dUxtcHpJaXdpZDJWaWNHRmphem92THk4dUwyeHBZaTlwYm5SbGNtWmhZMlZ6TDNKaFpHbHZZblYwZEc5dUxtcHpJaXdpZDJWaWNHRmphem92THk4dUwyeHBZaTlwYm5SbGNtWmhZMlZ6TDI1MWJXSmxjaTVxY3lJc0luZGxZbkJoWTJzNkx5OHZMaTlzYVdJdmFXNTBaWEptWVdObGN5OXpaV3hsWTNRdWFuTWlMQ0ozWldKd1lXTnJPaTh2THk0dmJHbGlMMmx1ZEdWeVptRmpaWE12WkdsaGJDNXFjeUlzSW5kbFluQmhZMnM2THk4dkxpOXNhV0l2YVc1MFpYSm1ZV05sY3k5d2FXRnVieTVxY3lJc0luZGxZbkJoWTJzNkx5OHZMaTlzYVdJdmFXNTBaWEptWVdObGN5OXpaWEYxWlc1alpYSXVhbk1pTENKM1pXSndZV05yT2k4dkx5NHZiR2xpTDIxdlpHVnNjeTl0WVhSeWFYZ3Vhbk1pTENKM1pXSndZV05yT2k4dkx5NHZiR2xpTDIxdlpHVnNjeTl6WlhGMVpXNWpaUzVxY3lJc0luZGxZbkJoWTJzNkx5OHZMaTlzYVdJdmJXOWtaV3h6TDJSeWRXNXJMbXB6SWl3aWQyVmljR0ZqYXpvdkx5OHVMMnhwWWk5dGIyUmxiSE12WTI5MWJuUmxjaTVxY3lJc0luZGxZbkJoWTJzNkx5OHZMaTlzYVdJdmFXNTBaWEptWVdObGN5OXdZVzR5WkM1cWN5SXNJbmRsWW5CaFkyczZMeTh2TGk5c2FXSXZhVzUwWlhKbVlXTmxjeTkwYVd4MExtcHpJaXdpZDJWaWNHRmphem92THk4dUwyeHBZaTlwYm5SbGNtWmhZMlZ6TDIxMWJIUnBjMnhwWkdWeUxtcHpJaXdpZDJWaWNHRmphem92THk4dUwyeHBZaTlqYjIxd2IyNWxiblJ6TDNOc2FXUmxjblJsYlhCc1lYUmxMbXB6SWl3aWQyVmljR0ZqYXpvdkx5OHVMMnhwWWk5cGJuUmxjbVpoWTJWekwzQmhiaTVxY3lJc0luZGxZbkJoWTJzNkx5OHZMaTlzYVdJdmFXNTBaWEptWVdObGN5OWxiblpsYkc5d1pTNXFjeUlzSW5kbFluQmhZMnM2THk4dkxpOXNhV0l2YVc1MFpYSm1ZV05sY3k5emNHVmpkSEp2WjNKaGJTNXFjeUlzSW5kbFluQmhZMnM2THk4dkxpOXNhV0l2YVc1MFpYSm1ZV05sY3k5dFpYUmxjaTVxY3lJc0luZGxZbkJoWTJzNkx5OHZMaTlzYVdJdmFXNTBaWEptWVdObGN5OXZjMk5wYkd4dmMyTnZjR1V1YW5NaUxDSjNaV0p3WVdOck9pOHZMeTR2YkdsaUwyTnZjbVV2Y21GamF5NXFjeUlzSW5kbFluQmhZMnM2THk4dkxpOXNhV0l2ZFhScGJDOTBjbUZ1YzJadmNtMHVhbk1pTENKM1pXSndZV05yT2k4dkx5NHZiR2xpTDNSMWJtbHVaeTkwZFc1cGJtY3Vhbk1pTENKM1pXSndZV05yT2k4dkx5NHZiR2xpTDIxdlpHVnNjeTl5WVdScGJ5NXFjeUlzSW5kbFluQmhZMnM2THk4dkxpOStMM2RoWVdOc2IyTnJMMmx1WkdWNExtcHpJaXdpZDJWaWNHRmphem92THk4dUwzNHZkMkZoWTJ4dlkyc3ZiR2xpTDFkQlFVTnNiMk5yTG1weklpd2lkMlZpY0dGamF6b3ZMeTh1TDM0dmNISnZZMlZ6Y3k5aWNtOTNjMlZ5TG1weklpd2lkMlZpY0dGamF6b3ZMeTh1TDJ4cFlpOTBhVzFsTDJsdWRHVnlkbUZzTG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJMRU5CUVVNN1FVRkRSQ3hQTzBGRFZrRTdRVUZEUVRzN1FVRkZRVHRCUVVOQk96dEJRVVZCTzBGQlEwRTdRVUZEUVRzN1FVRkZRVHRCUVVOQk8wRkJRMEVzZFVKQlFXVTdRVUZEWmp0QlFVTkJPMEZCUTBFN08wRkJSVUU3UVVGRFFUczdRVUZGUVR0QlFVTkJPenRCUVVWQk8wRkJRMEU3UVVGRFFUczdPMEZCUjBFN1FVRkRRVHM3UVVGRlFUdEJRVU5CT3p0QlFVVkJPMEZCUTBFN08wRkJSVUU3UVVGRFFUczdPenM3T3p0QlEzUkRRU3hoUVVGWkxFTkJRVU03T3pzN1MwRkZUaXhQUVVGUExIVkRRVUZOTEVOQlFWazdPMnRDUVVWcVFpeFBRVUZQTEVNN096czdPenM3T3pzN096czdPenM3VTBOdFNFNHNUVUZCVFN4SFFVRk9MRTFCUVUwN1UwRkhUaXhQUVVGUExFZEJRVkFzVDBGQlR6dFRRVWRRTEV0QlFVc3NSMEZCVEN4TFFVRkxPenM3TzBGQk4waHlRaXhoUVVGWkxFTkJRVU03TzB0QlJVNHNWVUZCVlN4MVEwRkJUU3hEUVVGbE96dExRVU12UWl4SlFVRkpMSFZEUVVGTkxFTkJRV0U3TzB0QlEzWkNMRWxCUVVrc2RVTkJRVTBzUlVGQllUczdTMEZEZGtJc1NVRkJTU3gxUTBGQlRTeEZRVUZwUWpzN1MwRkRkRUlzVTBGQlV5d3JRMEZCVFN4RlFVRnJRanM3UVVGRk4wTXNTMEZCU1N4UFFVRlBMRWRCUVVjc2JVSkJRVThzUTBGQlF5eEZRVUZyUWl4RFFVRkRMRU5CUVVNN1FVRkRNVU1zUzBGQlNTeExRVUZMTEVkQlFVY3NiVUpCUVU4c1EwRkJReXhGUVVGblFpeERRVUZETEVOQlFVTTdRVUZEZEVNc1MwRkJTU3hMUVVGTExFZEJRVWNzYlVKQlFVOHNRMEZCUXl4RlFVRm5RaXhEUVVGRExFTkJRVU03UVVGRGRFTXNTMEZCU1N4UlFVRlJMRWRCUVVjc2JVSkJRVThzUTBGQlF5eEZRVUZ0UWl4RFFVRkRMRU5CUVVNN1FVRkROVU1zUzBGQlNTeE5RVUZOTEVkQlFVY3NiVUpCUVU4c1EwRkJReXhGUVVGcFFpeERRVUZETEVOQlFVTTdPMHRCUldwRExGRkJRVkVzZFVOQlFVMHNSVUZCVlRzN1MwRkRlRUlzVVVGQlVTeDFRMEZCVFN4RlFVRnBRanM3T3pzN08wdEJUMmhETEU5QlFVODdRVUZGUlN4WlFVWlVMRTlCUVU4c1EwRkZSeXhQUVVGUExFVkJRVVU3TWtKQlJtNUNMRTlCUVU4N08wRkJTVXdzVlVGQlN5eEpRVUZKTEVkQlFVY3NTVUZCU1N4VlFVRlZMRVZCUVVVN1FVRkRlRUlzVjBGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRlZCUVZVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dE5RVU12UWpzN1FVRkZSQ3hWUVVGTExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVsQlFVa3NSVUZCUlR0QlFVTnNRaXhYUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wMUJRM3BDT3p0QlFVVkVMRk5CUVVrc1NVRkJTU3hIUVVGSE8wRkJRMVFzWVVGQlVTeEpRVUZKTzAxQlEySXNRMEZCUXpzN1FVRkZSaXhUUVVGSkxFMUJRVTBzUjBGQlJ6dEJRVU5ZTEdkQ1FVRlhMRTlCUVU4N1FVRkRiRUlzWTBGQlV5eExRVUZMTzBGQlEyUXNZMEZCVXl4TFFVRkxPMEZCUTJRc2FVSkJRVmtzVVVGQlVUdEJRVU53UWl4bFFVRlZMRTFCUVUwN1RVRkRha0lzUTBGQlF6czdRVUZGUml4VlFVRkxMRWxCUVVrc1IwRkJSeXhKUVVGSkxFMUJRVTBzUlVGQlJUdEJRVU4wUWl4WFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMDFCUTNwQ096dEJRVVZFTEZWQlFVc3NTVUZCU1N4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRk8wRkJRM0JDTEZkQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdUVUZEZGtJN08wRkJSVVFzVTBGQlNTeGpRVUZqTEVkQlFVY3NUVUZCVFN4RFFVRkRMRmxCUVZrc1NVRkJTU3hOUVVGTkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNN1FVRkRkRVVzVTBGQlNTeERRVUZETEZGQlFWRXNSMEZCUnl4UFFVRlBMRWxCUVVrc1NVRkJTU3hqUVVGakxFVkJRVVVzUTBGQlF6czdRVUZGYUVRc1UwRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVsQlFVa3NSVUZCUlN4RFFVRkRPMEZCUTNaQ0xGTkJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenM3UVVGRk0wTXNVMEZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1FVRkRla01zVTBGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJRenRCUVVOdVFpeFRRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRkZCUVZFc1EwRkJRenM3UVVGRmVrSXNVMEZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSenRCUVVOYUxHRkJRVTBzUlVGQlJTeE5RVUZOTzBGQlEyUXNWMEZCU1N4RlFVRkZMRTFCUVUwN1FVRkRXaXhaUVVGTExFVkJRVVVzVFVGQlRUdEJRVU5pTEZkQlFVa3NSVUZCUlN4TlFVRk5PMEZCUTFvc2EwSkJRVmNzUlVGQlJTeE5RVUZOTzBGQlEyNUNMR2xDUVVGVkxFVkJRVVVzVFVGQlRUdE5RVU51UWl4RFFVRkRPenRCUVVWR0xGTkJRVWtzUTBGQlF5eFRRVUZUTEVkQlFVY3NVMEZCVXl4RFFVRkRPMEZCUXpOQ0xGTkJRVWtzUTBGQlF5eEhRVUZITEVkQlFVY3NVMEZCVXl4RFFVRkRMRWRCUVVjc1EwRkJRenM3UVVGSGVrSXNVMEZCU1N4RFFVRkRMRWRCUVVjc1IwRkJSeXhGUVVGRkxFTkJRVU03UVVGRFpDeFZRVUZMTEVsQlFVa3NSMEZCUnl4SlFVRkpMRlZCUVZVc1JVRkJSVHRCUVVNeFFpeFhRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExGTkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1JVRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dE5RVU01UXpzN096dEJRVTlFTEZOQlFVa3NiVUpCUVcxQ0xFZEJRVWNzVVVGQlVTeERRVUZETEc5Q1FVRnZRaXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzBGQlEycEZMRk5CUVVrc2MwSkJRWE5DTEVkQlFVY3NkME5CUVhkRExFTkJRVU03UVVGRGRFVXNVMEZCU1N4blFrRkJaMElzUjBGQlJ5eFJRVUZSTEVOQlFVTXNZVUZCWVN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wRkJRM1pFTEhGQ1FVRm5RaXhEUVVGRExFbEJRVWtzUjBGQlJ5eFZRVUZWTEVOQlFVTTdRVUZEYmtNc2NVSkJRV2RDTEVOQlFVTXNVMEZCVXl4SFFVRkhMSE5DUVVGelFpeERRVUZETzBGQlEzQkVMRk5CUVVrc2JVSkJRVzFDTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1JVRkJSVHRCUVVOc1F5eFhRVUZKTEUxQlFVMHNSMEZCUnl4dFFrRkJiVUlzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4VlFVRlZPMEZCUXpsRExHRkJRVTBzUTBGQlF5eFpRVUZaTEVOQlFVVXNaMEpCUVdkQ0xFVkJRVVVzYlVKQlFXMUNMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VFVGREwwUXNUVUZCVFR0QlFVTk1MR1ZCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zVTBGQlV5eEhRVUZETEhOQ1FVRnpRaXhIUVVGRExGVkJRVmNzUTBGQlF5eERRVUZETzAxQlF6bEVPenRKUVVkS08wRkJTRWs3WjBKQk0wVklMRTlCUVU4N1FVRnZSa3dzV1VGQlR6dFpRVXBCTEZsQlFVYzdRVUZEV2l4blFrRkJUeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETzFGQlEzUkNPMWxCUlZVc1ZVRkJReXhIUVVGSExFVkJRVVU3UVVGRFppeGhRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8wRkJRMnhDTEdGQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1IwRkJSeXhEUVVGRE8wRkJRM0JDTEdGQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMEZCUTNoRExHRkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNN1VVRkRjRUk3T3pzN1ZVRjZSa01zVDBGQlR6czdPMEZCSzBaaUxFdEJRVWtzUzBGQlN5eEhRVUZITEVsQlFVa3NUMEZCVHl4RlFVRkZMRU5CUVVNN08wRkJSVzVDTEZWQlFWTXNUVUZCVFN4SFFVRkhPMEZCUTNKQ0xGVkJRVThzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXp0RlFVTjJRanM3UVVGRFRTeFZRVUZUTEU5QlFVOHNSMEZCUnp0QlFVTjBRaXhWUVVGUExFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTTdSVUZEZUVJN08wRkJRMDBzVlVGQlV5eExRVUZMTEVkQlFVYzdRVUZEY0VJc1ZVRkJUeXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETzBWQlEzUkNPenR6UWtGRll5eExRVUZMTEVNN096czdPenM3TzJ0Q1EycEpURHRCUVVOaUxGZEJRVkVzUlVGQlJTeHRRa0ZCVHl4RFFVRkRMRU5CUVZrc1EwRkJRenRCUVVNdlFpeFRRVUZOTEVWQlFVVXNiVUpCUVU4c1EwRkJReXhGUVVGVkxFTkJRVU03UVVGRE0wSXNVMEZCVFN4RlFVRkZMRzFDUVVGUExFTkJRVU1zUlVGQlZTeERRVUZET3pzN1FVRkhNMElzVTBGQlRTeEZRVUZGTEcxQ1FVRlBMRU5CUVVNc1JVRkJWU3hEUVVGRE8wRkJRek5DTEdGQlFWVXNSVUZCUlN4dFFrRkJUeXhEUVVGRExFVkJRV01zUTBGQlF6dEJRVU51UXl4alFVRlhMRVZCUVVVc2JVSkJRVThzUTBGQlF5eEZRVUZsTEVOQlFVTTdRVUZEY2tNc1UwRkJUU3hGUVVGRkxHMUNRVUZQTEVOQlFVTXNSVUZCVlN4RFFVRkRPMEZCUXpOQ0xGTkJRVTBzUlVGQlJTeHRRa0ZCVHl4RFFVRkRMRVZCUVZVc1EwRkJRenRCUVVNelFpeFBRVUZKTEVWQlFVVXNiVUpCUVU4c1EwRkJReXhGUVVGUkxFTkJRVU03UVVGRGRrSXNVVUZCU3l4RlFVRkZMRzFDUVVGUExFTkJRVU1zUlVGQlV5eERRVUZETzBGQlEzcENMRmxCUVZNc1JVRkJSU3h0UWtGQlR5eERRVUZETEVWQlFXRXNRMEZCUXp0QlFVTnFReXhSUVVGTExFVkJRVVVzYlVKQlFVOHNRMEZCUXl4RlFVRlRMRU5CUVVNN1FVRkRla0lzVDBGQlNTeEZRVUZGTEcxQ1FVRlBMRU5CUVVNc1JVRkJVU3hEUVVGRE8wRkJRM1pDTEdOQlFWY3NSVUZCUlN4dFFrRkJUeXhEUVVGRExFVkJRV1VzUTBGQlF6dEJRVU55UXl4TlFVRkhMRVZCUVVVc2JVSkJRVThzUTBGQlF5eEZRVUZQTEVOQlFVTTdRVUZEY2tJc1YwRkJVU3hGUVVGRkxHMUNRVUZQTEVOQlFVTXNSVUZCV1N4RFFVRkRPMEZCUXk5Q0xHTkJRVmNzUlVGQlJTeHRRa0ZCVHl4RFFVRkRMRVZCUVdVc1EwRkJRenRCUVVOeVF5eFJRVUZMTEVWQlFVVXNiVUpCUVU4c1EwRkJReXhGUVVGVExFTkJRVU03UVVGRGVrSXNaVUZCV1N4RlFVRkZMRzFDUVVGUExFTkJRVU1zUlVGQlowSXNRMEZCUXp0RlFVTjRReXhET3pzN096czdPMEZEY2tKRUxHRkJRVmtzUTBGQlF6czdPenM3T3pzN096czdPMEZCUldJc1MwRkJTU3hIUVVGSExFZEJRVWNzYlVKQlFVOHNRMEZCUXl4RFFVRmhMRU5CUVVNc1EwRkJRenRCUVVOcVF5eExRVUZKTEZOQlFWTXNSMEZCUnl4dFFrRkJUeXhEUVVGRExFTkJRVzFDTEVOQlFVTXNRMEZCUXp0QlFVTTNReXhMUVVGSkxFbEJRVWtzUjBGQlJ5eHRRa0ZCVHl4RFFVRkRMRVZCUVdkQ0xFTkJRVU1zUTBGQlF6czdTMEZEZWtJc1YwRkJWeXdyUTBGQlRTeEZRVUZ4UWpzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN08wdEJkVU0zUWl4UlFVRlJPMEZCUldoQ0xGbEJSbEVzVVVGQlVTeEhRVVZpT3pKQ1FVWkxMRkZCUVZFN08wRkJTWHBDTEZOQlFVa3NUMEZCVHl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03TzBGQlJYaENMRk5CUVVrc1VVRkJVU3hIUVVGSE8wRkJRMklzWVVGQlVTeERRVUZETEVkQlFVY3NSVUZCUXl4SFFVRkhMRU5CUVVNN1FVRkRha0lzWVVGQlVTeFZRVUZWTzBGQlEyeENMR0ZCUVZFc1EwRkJRenRCUVVOVUxHRkJRVkVzUTBGQlF6dEJRVU5VTEdOQlFWTXNRMEZCUXp0QlFVTldMRlZCUVVzc1IwRkJSenRCUVVOU0xHRkJRVkVzUTBGQlF6dEJRVU5VTEdGQlFWRXNRMEZCUXp0QlFVTlVMR05CUVZNc1EwRkJRenRCUVVOV0xGVkJRVXNzUjBGQlJ6dE5RVU5VTEVOQlFVTTdPMEZCUlVZc1owTkJia0pwUWl4UlFVRlJMRFpEUVcxQ2JrSXNVMEZCVXl4RlFVRkRMRTlCUVU4c1JVRkJReXhSUVVGUkxFVkJRVVU3TzBGQlIyeERMRk5CUVVrc1EwRkJReXhGUVVGRkxFZEJRVWNzU1VGQlNTeEpRVUZKTEVOQlFVVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFVkJRVVVzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVWQlFVVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVVVzUTBGQlF6dEJRVU51Unl4VFFVRkpMRU5CUVVNc1JVRkJSU3hIUVVGSExFbEJRVWtzU1VGQlNTeERRVUZGTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eEZRVUZGTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRkxFTkJRVU03TzBGQlJXNUhMRk5CUVVrc1EwRkJReXhSUVVGUkxFZEJRVWM3UVVGRFpDeFJRVUZETEVWQlFVVXNTVUZCU1N4WFFVRlhMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RlFVRkRMRmxCUVZrc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRVZCUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTNwR0xGRkJRVU1zUlVGQlJTeEpRVUZKTEZkQlFWY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZKTEVWQlFVTXNWVUZCVlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdUVUZEZUVZc1EwRkJRenRCUVVOR0xGTkJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEZWQlFWVXNRMEZCUXp0QlFVTXpReXhUUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eFZRVUZWTEVOQlFVTTdPMEZCUlRORExGTkJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0QlFVTmFMRk5CUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dEpRVVZtT3p0aFFXNURhMElzVVVGQlVUczdaMEpCUVZJc1VVRkJVVHRCUVhGRE0wSXNiVUpCUVdNN1kwRkJRU3d3UWtGQlJ6czdRVUZGWml4aFFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1FVRkRha01zWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFGQlJYSkRPenRCUVVWRUxHdENRVUZoTzJOQlFVRXNlVUpCUVVjN08wRkJSVm9zWVVGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOMlJDeGhRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE96dEJRVVYyUkN4aFFVRkpMRU5CUVVNc1lVRkJZU3hIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdPMEZCUlhSRUxHRkJRVWtzUTBGQlF5eFZRVUZWTEVkQlFVYzdRVUZEYUVJc1kwRkJSeXhGUVVGRkxFVkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNZVUZCWVN4SFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlEzaERMRU5CUVVNN1FVRkRSaXhoUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTTdPMEZCUlRkRExHRkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1JVRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpGRExHRkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpORExHRkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVVjc1JVRkJReXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTI1RU96dEJRVVZFTEcxQ1FVRmpPMk5CUVVFc01FSkJRVWM3UVVGRFlpeGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhsUVVGbExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNN1FVRkRkRVFzWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRkRVE3TzBGQlJVUXNWMEZCVFR0alFVRkJMR3RDUVVGSE8wRkJRMUFzWVVGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZPenRCUVVWb1FpeGxRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGSExFVkJRVU1zU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRWUVVOb1JDeE5RVUZOT3p0QlFVVk1MR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NSVUZCUXl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFWQlEycEVPenRCUVVWRUxHRkJRVWtzUTBGQlF5eGxRVUZsTEVkQlFVYzdRVUZEY2tJc1dVRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNWVUZCVlN4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTE8wRkJRMnhETEZsQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNWVUZCVlN4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTk8xVkJRMnhFTEVOQlFVTTdPMEZCUlVZc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkRMRWxCUVVrc1EwRkJReXhsUVVGbExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEY0VRc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkRMRWxCUVVrc1EwRkJReXhsUVVGbExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEY2tRN08wRkJSMFFzVlVGQlN6dGpRVUZCTEdsQ1FVRkhPMEZCUTA0c1lVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU03UVVGRGNFTXNZVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNN1FVRkRjRU1zWVVGQlNTeERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMUZCUTJJN08wRkJSVVFzVTBGQlNUdGpRVUZCTEdkQ1FVRkhPMEZCUTB3c1lVRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTzBGQlEyaENMR1ZCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRGJrTXNaVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVOdVF5eGxRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRmxCUVZrc1EwRkJSU3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVVc1EwRkJRenRCUVVNNVF5eGxRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRmxCUVZrc1EwRkJSU3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVVc1EwRkJRenRCUVVNNVF5eGxRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJRenRCUVVOcVFpeGpRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhMUVVGTE8wRkJRMmhDTEdOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFdEJRVXM3V1VGRGFrSXNRMEZCUXl4RFFVRkRPMEZCUTBnc1pVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzFWQlEyWTdVVUZEUmpzN1FVRkZSQ3haUVVGUE8yTkJRVUVzYlVKQlFVYzdRVUZEVWl4aFFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03VVVGRFpqczdRVUZaUnl4TlFVRkRPenM3T3pzN096dFpRVXBCTEZsQlFVYzdRVUZEVGl4blFrRkJUeXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXp0UlFVTjBRanRaUVVWSkxGVkJRVU1zUzBGQlN5eEZRVUZGTzBGQlExZ3NZVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZEZEVJc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVTTdRVUZEYWtJc1dVRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNTMEZCU3p0QlFVTm9RaXhaUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4TFFVRkxPMVZCUTJwQ0xFTkJRVU1zUTBGQlF6dEJRVU5JTEdGQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRSUVVObU96dEJRVmxITEUxQlFVTTdPenM3T3pzN08xbEJTa0VzV1VGQlJ6dEJRVU5PTEdkQ1FVRlBMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETzFGQlEzUkNPMWxCUlVrc1ZVRkJReXhMUVVGTExFVkJRVVU3UVVGRFdDeGhRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEJRVU4wUWl4aFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlF6dEJRVU5xUWl4WlFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eExRVUZMTzBGQlEyaENMRmxCUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEV0QlFVczdWVUZEYWtJc1EwRkJReXhEUVVGRE8wRkJRMGdzWVVGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMUZCUTJZN08wRkJTVWNzWlVGQlZUdFpRVUZCTEZsQlFVYzdRVUZEWml4blFrRkJUenRCUVVOTUxGbEJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRlZCUVZVN1FVRkRja0lzV1VGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1ZVRkJWVHRWUVVOMFFpeERRVUZETzFGQlEwZzdPMEZCVlVjc1UwRkJTVHM3T3pzN096dFpRVXBCTEZsQlFVYzdRVUZEVkN4blFrRkJUeXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXp0UlFVTndRanRaUVVWUExGVkJRVU1zUTBGQlF5eEZRVUZGTzBGQlExWXNZVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF5eERRVUZETzBGQlEyaENMR0ZCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFJRVU5tT3p0QlFWVkhMRk5CUVVrN096czdPenM3V1VGS1FTeFpRVUZITzBGQlExUXNaMEpCUVU4c1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTTdVVUZEY0VJN1dVRkZUeXhWUVVGRExFTkJRVU1zUlVGQlJUdEJRVU5XTEdGQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU5vUWl4aFFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03VVVGRFpqczdRVUZYUnl4VFFVRkpPenM3T3pzN08xbEJTa0VzV1VGQlJ6dEJRVU5VTEdkQ1FVRlBMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETzFGQlEzQkNPMWxCUlU4c1ZVRkJReXhEUVVGRExFVkJRVVU3UVVGRFZpeGhRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRGFFSXNZVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8xRkJRMlk3TzBGQlYwY3NVMEZCU1RzN096czdPenRaUVVwQkxGbEJRVWM3UVVGRFZDeG5Ra0ZCVHl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF6dFJRVU53UWp0WlFVVlBMRlZCUVVNc1EwRkJReXhGUVVGRk8wRkJRMVlzWVVGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRMmhDTEdGQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRSUVVObU96dEJRVmRITEZWQlFVczdPenM3T3pzN1dVRktRU3haUVVGSE8wRkJRMVlzWjBKQlFVOHNTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU03VVVGRGNrSTdXVUZGVVN4VlFVRkRMRU5CUVVNc1JVRkJSVHRCUVVOWUxHRkJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJRenRCUVVOcVFpeGhRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1VVRkRaanM3UVVGWFJ5eFZRVUZMT3pzN096czdPMWxCU2tFc1dVRkJSenRCUVVOV0xHZENRVUZQTEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRE8xRkJRM0pDTzFsQlJWRXNWVUZCUXl4RFFVRkRMRVZCUVVVN1FVRkRXQ3hoUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1FVRkRha0lzWVVGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMUZCUTJZN08wRkJWMGNzVTBGQlNUczdPenM3T3pzN1dVRklRU3haUVVGSE8wRkJRMVFzWjBKQlFVOHNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETzFGQlF6ZENPMWxCUTA4c1ZVRkJReXhEUVVGRExFVkJRVVU3UVVGRFZpeGhRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETzBGQlEzcENMR0ZCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRNVUk3T3pzN1ZVRXhVR3RDTEZGQlFWRTdTVUZCVXl4VFFVRlRPenRyUWtGQk1VSXNVVUZCVVN4RE96czdPenM3UVVNM1F6ZENMR0ZCUVZrc1EwRkJRenM3UVVGRllpeExRVUZKTEVsQlFVa3NSMEZCUnl4dFFrRkJUeXhEUVVGRExFTkJRV01zUTBGQlF5eERRVUZET3p0clFrRkZjRUk3TzBGQlJXSXNVMEZCVFN4RlFVRkZMRlZCUVVNc1NVRkJTU3hGUVVGTE8wRkJRMmhDTEZsQlFVOHNVVUZCVVN4RFFVRkRMR1ZCUVdVc1EwRkJReXcwUWtGQk5FSXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVOeVJUczdRVUZGUkN4TlFVRkhMRVZCUVVVc1ZVRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEUxQlFVMHNSVUZCUlN4VlFVRlZMRVZCUVVVc1VVRkJVU3hGUVVGTE96dEJRVVV6UXl4VFFVRkpMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEUxQlFVMHNSVUZCUlN4UlFVRlJMRU5CUVVNc1EwRkJRenRCUVVNdlF5eFRRVUZKTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFMUJRVTBzUlVGQlJTeFZRVUZWTEVOQlFVTXNRMEZCUXpzN1FVRkZMME1zVTBGQlNTeFpRVUZaTEVkQlFVY3NVVUZCVVN4SFFVRkhMRlZCUVZVc1NVRkJTU3hIUVVGSExFZEJRVWNzUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXpzN1FVRkZOVVFzVTBGQlNTeERRVUZETEVkQlFVY3NRMEZEU2l4SFFVRkhMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUjBGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNc1IwRkJReXhEUVVGRExFVkJRM3BDTEVkQlFVY3NSVUZCUlN4TlFVRk5MRVZCUVVVc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJTeFpRVUZaTEVWQlFVVXNRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVU1zUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVNc1EwRkJReXhEUVVNMVJDeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenM3UVVGRldpeFpRVUZQTEVOQlFVTXNRMEZCUXp0SlFVTldPenRCUVVWRUxHbENRVUZqTEVWQlFVVXNWVUZCUXl4SlFVRkpMRVZCUVVNc1lVRkJZU3hGUVVGTE96dEJRVVYwUXl4VFFVRkpMRVZCUVVVc1IwRkJSeXhWUVVGVkxFZEJRVWNzU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJRenRCUVVNMVF5eFRRVUZKTEV0QlFVc3NSMEZCUnl4RlFVRkZMRU5CUVVNN08wRkJSV1lzVTBGQlNTeFJRVUZSTEVkQlFVY3NVVUZCVVN4RFFVRkRMR1ZCUVdVc1EwRkJReXcwUWtGQk5FSXNSVUZCUlN4blFrRkJaMElzUTBGQlF5eERRVUZETzBGQlEzaEdMR0ZCUVZFc1EwRkJReXhaUVVGWkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPMEZCUTJoRExHRkJRVkVzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRMjVETEdGQlFWRXNRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEyNURMR0ZCUVZFc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPenRCUVVWc1F5eFRRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE96dEJRVVV6UWl4VlFVRkxMRWxCUVVrc1EwRkJReXhIUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVkQlFVTXNZVUZCWVN4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRk8wRkJRMmhETEZkQlFVa3NTMEZCU1N4SFFVRkhMRkZCUVZFc1EwRkJReXhsUVVGbExFTkJRVU1zTkVKQlFUUkNMRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRE1VVXNXVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFVkJRVVVzVFVGQlRTeEhRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPenM3UVVGSGJFTXNaVUZCVVN4RFFVRkRMRmRCUVZjc1EwRkJReXhMUVVGSkxFTkJRVU1zUTBGQlF6dEJRVU16UWl4WlFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVWtzUTBGQlF5eERRVUZETzAxQlEyeENPenRCUVVWRUxGbEJRVTg3UVVGRFRDeFRRVUZGTEVWQlFVVXNSVUZCUlR0QlFVTk9MRmxCUVVzc1JVRkJSU3hMUVVGTE8wRkJRMW9zWTBGQlR5eEZRVUZGTEZGQlFWRTdUVUZEYkVJc1EwRkJRenRKUVVWSU96dEZRVVZHTEVNN096czdPenRCUTNaRVJDeGhRVUZaTEVOQlFVTTdPenM3T3pzN096czdPenM3TzBGQlkySXNVVUZCVHl4RFFVRkRMRWxCUVVrc1IwRkJSeXhWUVVGRExFdEJRVXNzUlVGQlF5eEhRVUZITEVWQlFVTXNSMEZCUnl4RlFVRkxPMEZCUTJoRExGVkJRVThzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUlVGQlF5eEhRVUZITEVOQlFVTXNSVUZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRGUVVNeFF5eERRVUZET3p0QlFVVkdMRkZCUVU4c1EwRkJReXhUUVVGVExFZEJRVWNzVlVGQlF5eExRVUZMTEVWQlFVTXNSMEZCUnl4RlFVRkRMRWRCUVVjc1JVRkJTenRCUVVOeVF5eFZRVUZUTEVOQlFVTXNTMEZCU3l4SFFVRkRMRWRCUVVjc1MwRkJTeXhIUVVGSExFZEJRVU1zUjBGQlJ5eERRVUZETEVOQlFVYzdSVUZEY0VNc1EwRkJRenM3T3pzN096czdPenM3T3pzN1FVRmpSaXhSUVVGUExFTkJRVU1zUzBGQlN5eEhRVUZITEZWQlFVTXNTMEZCU3l4RlFVRkZMRXRCUVVzc1JVRkJSU3hMUVVGTExFVkJRVVVzVFVGQlRTeEZRVUZGTEUxQlFVMHNSVUZCU3p0QlFVTjJSQ3hQUVVGSkxFdEJRVXNzUzBGQlN5eExRVUZMTEVWQlFVVTdRVUZEYmtJc1dVRkJUeXhOUVVGTkxFTkJRVU03U1VGRFpqdEJRVU5FTEZWQlFWTXNRMEZCUXl4TFFVRkxMRWRCUVVjc1MwRkJTeXhMUVVGTExFMUJRVTBzUjBGQlJ5eE5RVUZOTEVOQlFVTXNTVUZCU3l4TFFVRkxMRWRCUVVjc1MwRkJTeXhEUVVGRExFZEJRVWtzVFVGQlRTeERRVUZETzBWQlF6TkZMRU5CUVVNN08wRkJSVVlzVVVGQlR5eERRVUZETEU5QlFVOHNSMEZCUnl4VlFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFVkJRVXM3UVVGRGVrSXNUMEZCU1N4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVkQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6czdRVUZGTjBJc1QwRkJTU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRE5VSXNUMEZCU1N4TFFVRkxMRWRCUVVjc1EwRkJReXhGUVVGRk8wRkJRMklzVlVGQlN5eEhRVUZITEV0QlFVc3NSMEZCU1N4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFVkJRVWNzUTBGQlF6dEpRVU12UWp0QlFVTkVMRlZCUVU4c1JVRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTEV0QlFVc3NSVUZCUlN4TFFVRkxMRVZCUVVNc1EwRkJRenRGUVVOc1F5eERRVUZET3p0QlFVVkdMRkZCUVU4c1EwRkJReXhYUVVGWExFZEJRVWNzVlVGQlV5eE5RVUZOTEVWQlFVVXNTMEZCU3l4RlFVRkRPMEZCUXpORExFOUJRVWtzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRE1VSXNUMEZCU1N4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTXhRaXhWUVVGUExFVkJRVU1zUTBGQlF5eEZRVUZGTEUxQlFVMHNSMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRkxFMUJRVTBzUjBGQlF5eEhRVUZITEVkQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJRenRGUVVNeFF5eERRVUZET3pzN096czdPenM3T3p0QlFXRkdMRkZCUVU4c1EwRkJReXhMUVVGTExFZEJRVWNzVlVGQlV5eEpRVUZKTEVWQlFVVXNTMEZCU3l4RlFVRkZPMEZCUTNCRExGVkJRVThzVlVGQlZTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF6dEZRVU40UXl4RFFVRkRPenRCUVVWR0xGRkJRVThzUTBGQlF5eE5RVUZOTEVkQlFVY3NWVUZCVlN4TFFVRkxMRVZCUVVVN1FVRkRhRU1zVlVGQlR5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRGUVVONlF5eERRVUZET3pzN096czdPenM3UVVGVFJpeFJRVUZQTEVOQlFVTXNTVUZCU1N4SFFVRkhMRlZCUVZNc1NVRkJTU3hGUVVGRk8wRkJRelZDTEZWQlFVOHNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVWNzUTBGQlF5eEpRVUZKTEVkQlFVTXNSVUZCUlN4SlFVRkZMRVZCUVVVc1EwRkJSU3hIUVVGSExFZEJRVWNzUTBGQlF6dEZRVU14UXl4RFFVRkRPenM3T3pzN096czdPenM3UVVGWlJpeFJRVUZQTEVOQlFVTXNUVUZCVFN4SFFVRkhMRlZCUVZNc1IwRkJSeXhGUVVGRExFZEJRVWNzUlVGQlF5eEhRVUZITEVWQlFVVTdRVUZEY2tNc1ZVRkJUeXhIUVVGSExFbEJRVWtzUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJRenRGUVVOb1F5eERRVUZET3pzN096czdPenM3UVVGVFJpeFJRVUZQTEVOQlFVTXNTVUZCU1N4SFFVRkhMRmxCUVZjN1FVRkRlRUlzVlVGQlR5eFRRVUZUTEVOQlFVTXNSVUZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUjBGQlF5eFRRVUZUTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJRenRGUVVOMFJDeERRVUZET3pzN096czdPenM3T3pzN1FVRlpSaXhSUVVGUExFTkJRVU1zVFVGQlRTeEhRVUZITEZWQlFWTXNSMEZCUnl4RlFVRkZPMEZCUXpkQ0xGVkJRVThzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03UlVGRGVFSXNRMEZCUXpzN096czdPenM3T3pzN1FVRlhSaXhSUVVGUExFTkJRVU1zUlVGQlJTeEhRVUZITEZWQlFWTXNUVUZCVFN4RlFVRkRMRTFCUVUwc1JVRkJSVHRCUVVOdVF5eFBRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZPMEZCUTFnc1YwRkJUU3hIUVVGSExFMUJRVTBzUTBGQlF6dEJRVU5vUWl4WFFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMW83UVVGRFJDeFBRVUZKTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUlVGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTnNReXhQUVVGSkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTFCUVUwc1JVRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU51UXl4VlFVRlBMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4SlFVRkZMRWxCUVVrc1IwRkJReXhIUVVGSExFTkJRVU1zUjBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0RlFVTnFSQ3hEUVVGRE96czdPenM3T3pzN096dEJRVmRHTEZGQlFVOHNRMEZCUXl4RlFVRkZMRWRCUVVjc1ZVRkJVeXhOUVVGTkxFVkJRVU1zVFVGQlRTeEZRVUZGTzBGQlEyNURMRTlCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVU3UVVGRFdDeFhRVUZOTEVkQlFVY3NUVUZCVFN4RFFVRkRPMEZCUTJoQ0xGZEJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEV2p0QlFVTkVMRTlCUVVrc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RlFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRMnhETEU5QlFVa3NTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeEZRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMEZCUTI1RExGVkJRVThzU1VGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4SlFVRkZMRWxCUVVrc1IwRkJReXhIUVVGSExFTkJRVU1zUjBGQlF5eEhRVUZITEVOQlFVTTdSVUZEY2tNc1EwRkJRenM3UVVGSFJpeFJRVUZQTEVOQlFVTXNTMEZCU3l4SFFVRkhMRlZCUVZNc1MwRkJTeXhGUVVGRExFZEJRVWNzUlVGQlF5eEhRVUZITEVWQlFVVTdRVUZEZEVNc1VVRkJTeXhGUVVGRkxFTkJRVU03UVVGRFVpeFBRVUZKTEV0QlFVc3NTVUZCU1N4SFFVRkhMRVZCUVVVN1FVRkRhRUlzVlVGQlN5eEhRVUZITEVkQlFVY3NRMEZCUXp0SlFVTmlPMEZCUTBRc1ZVRkJUeXhMUVVGTExFTkJRVU03UlVGRFpDeERRVUZET3pzN096czdPenM3UVVGVFJpeFJRVUZQTEVOQlFVTXNUMEZCVHl4SFFVRkhMRlZCUVZNc1NVRkJTU3hGUVVGRk8wRkJReTlDTEU5QlFVa3NTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJRenRCUVVOa0xGRkJRVXNzU1VGQlNTeERRVUZETEVkQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZPMEZCUXpsQ0xGVkJRVXNzU1VGQlNTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRiRUk3UVVGRFJDeFZRVUZQTEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRE8wVkJRelZDTEVOQlFVTTdPenM3T3pzN096czdPenRCUVZsR0xGRkJRVThzUTBGQlF5eFJRVUZSTEVkQlFVY3NWVUZCVXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVVTdRVUZEZGtNc1QwRkJTU3hEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNRMEZCUXp0QlFVTm9RaXhQUVVGSkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRPMEZCUTJoQ0xGVkJRVThzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUlN4RFFVRkRMRWRCUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlF5eERRVUZETEVOQlFVVXNRMEZCUXp0RlFVTXZRaXhEUVVGRE96dEJRVVZHTEZGQlFVOHNRMEZCUXl4UlFVRlJMRWRCUVVjc1ZVRkJVeXhKUVVGSkxFVkJRVVU3UVVGRGFFTXNWVUZCVHl4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0RlFVTTVRaXhEUVVGRE96czdPenM3T3pzN1FVRlRSaXhSUVVGUExFTkJRVU1zU1VGQlNTeEhRVUZITEZsQlFXMUNPMDlCUVZZc1NVRkJTU3huUTBGQlF5eEhRVUZIT3p0QlFVTTVRaXhQUVVGSkxFOUJRVThzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUlVGQlJUdEJRVU14UWl4WlFVRlBMRU5CUVVNc1EwRkJRenRKUVVOV0xFMUJRVTA3UVVGRFRDeFpRVUZQTEVOQlFVTXNRMEZCUXp0SlFVTldPMFZCUTBZc1F6czdPenM3TzBGRE4wNUVMR0ZCUVZrc1EwRkJRenM3T3pzN096czdPenRCUVVWaUxFdEJRVWtzUjBGQlJ5eEhRVUZITEcxQ1FVRlBMRU5CUVVNc1EwRkJZU3hEUVVGRExFTkJRVU03UVVGRGFrTXNTMEZCU1N4SFFVRkhMRWRCUVVjc2JVSkJRVThzUTBGQlF5eERRVUZoTEVOQlFVTXNRMEZCUXp0QlFVTnFReXhMUVVGSkxFbEJRVWtzUjBGQlJ5eHRRa0ZCVHl4RFFVRkRMRU5CUVdNc1EwRkJReXhEUVVGRE8wRkJRMjVETEV0QlFVa3NTMEZCU3l4SFFVRkhMRzFDUVVGUExFTkJRVU1zUTBGQlpTeERRVUZETEVOQlFVTTdRVUZEY2tNc1MwRkJUU3haUVVGWkxFZEJRVWNzYlVKQlFVOHNRMEZCUXl4RlFVRlJMRU5CUVVNc1EwRkJRenM3UzBGRk9VSXNUVUZCVFN4MVFrRkJVU3hEUVVGVExFVkJRWFpDTEUxQlFVMDdPenM3T3p0TFFVdE5MRk5CUVZNN1FVRkZha0lzV1VGR1VTeFRRVUZUTEVOQlJXaENMRWxCUVVrc1JVRkJReXhQUVVGUExFVkJRVU1zVVVGQlVTeEZRVUZGT3pKQ1FVWm9RaXhUUVVGVE96dEJRVWN4UWl4blEwRklhVUlzVTBGQlV5dzJRMEZIYkVJN1FVRkRVaXhUUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRE8wRkJRMnhETEZOQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eEpRVUZKTEVWQlFVTXNUMEZCVHl4RlFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8wRkJRekZFTEZOQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1JVRkJSU3hEUVVGRE8wRkJRMmhDTEZOQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1MwRkJTeXhEUVVGRE8wRkJRMnhDTEZOQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1JVRkJSU3hEUVVGRE8wRkJRMnBDTEZOQlFVa3NZVUZCWVN4SFFVRkhMRTFCUVUwc1JVRkJSU3hEUVVGRE8wRkJRemRDTEZOQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hIUVVGSExHRkJRV0VzUTBGQlF5eE5RVUZOTEVOQlFVTTdRVUZETVVNc1UwRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVkQlFVY3NZVUZCWVN4RFFVRkRMRWxCUVVrc1EwRkJRenRCUVVOMFF5eFRRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1IwRkJSeXhoUVVGaExFTkJRVU1zUzBGQlN5eERRVUZETzBGQlEzaERMRk5CUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeEhRVUZITEdGQlFXRXNRMEZCUXl4SlFVRkpMRU5CUVVNN1FVRkRkRU1zVTBGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4WFFVRlhMRWRCUVVjc1lVRkJZU3hEUVVGRExGZEJRVmNzUTBGQlF6dEJRVU53UkN4VFFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGVkJRVlVzUjBGQlJ5eGhRVUZoTEVOQlFVTXNWVUZCVlN4RFFVRkRPMGxCUTI1RU96dGhRV2hDYTBJc1UwRkJVenM3WjBKQlFWUXNVMEZCVXp0QlFXdENOVUlzYTBKQlFXRTdZMEZCUVN4MVFrRkJReXhKUVVGSkxFVkJRVU1zVDBGQlR5eEZRVUZETEZGQlFWRXNSVUZCUlRzN1FVRkZia01zWjBKQlFVOHNRMEZCUXl4UFFVRlBMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03UVVGRE1VSXNhVUpCUVZFc1EwRkJReXhYUVVGWExFZEJRVWNzVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEycEVMR2xDUVVGUkxFTkJRVU1zU1VGQlNTeEhRVUZITEV0QlFVc3NRMEZCUXpzN1FVRkZkRUlzWVVGQlNTeFJRVUZSTEVkQlFVYzdRVUZEWWl4dFFrRkJWU3hSUVVGUkxFTkJRVU1zU1VGQlNUdEJRVU4yUWl4dFFrRkJWU3hGUVVGRk8wRkJRMW9zTWtKQlFXdENMRWxCUVVrN1FVRkRkRUlzYTBKQlFWTXNhVUpCUVZjc1JVRkJSVHRCUVVOMFFpeHpRa0ZCWVN4TFFVRkxPMVZCUTI1Q0xFTkJRVU03TzBGQlJVWXNZMEZCU3l4SlFVRkpMRWRCUVVjc1NVRkJTU3hSUVVGUkxFVkJRVVU3UVVGRGVFSXNiVUpCUVZFc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1ZVRkRMMEk3TzBGQlJVUXNZMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3TzBGQlJXaERMR1ZCUVVrc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXpzN1FVRkZkRUlzWlVGQlN5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhGUVVGSE8wRkJRelZDTEd0Q1FVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxFOUJRVThzUlVGQlJ6dEJRVU42UWl4MVFrRkJVU3hEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRqUVVNNVFqczdRVUZCUVN4WlFVVkdMRTFCUVUwc1NVRkJTU3hQUVVGUExFOUJRVThzUzBGQlN5eFZRVUZWTEVWQlFVVTdRVUZEZUVNc2NVSkJRVkVzUTBGQlF5eExRVUZMTEVkQlFVY3NUMEZCVHl4RFFVRkRPenRaUVVVeFFpeE5RVUZOTEVsQlFVa3NUMEZCVHl4RFFVRkRMRTFCUVUwc1NVRkJSU3hEUVVGRExFVkJRVVU3TzBGQlJUVkNMR2xDUVVGSkxFZEJRVWNzUjBGQlJ5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTnFReXh4UWtGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRTlCUVU4c1EwRkJRenRaUVVONlFqdFZRVU5HT3pzN096dEJRVXRFTEdGQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN096dEJRVWRvUkN4aFFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFbEJRVWtzU1VGQlNTeERRVUZETEUxQlFVMHNXVUZCV1N4WFFVRlhMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zVTBGQlV5eEZRVUZGTzBGQlF6VkZMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZsQlFWa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1JVRkJSVHRCUVVONlF5eHBRa0ZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhaUVVGWkxFTkJRVU1zVlVGQlZTeEZRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMWxCUTNwRE8xVkJRMFk3T3pzN1FVRkpSQ3hoUVVGSkxGRkJRVkVzUTBGQlF5eEpRVUZKTEVsQlFVa3NTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NVVUZCVVN4RFFVRkRMR05CUVdNc1JVRkJSVHRCUVVNMVJTeGxRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZET1VJc1pVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJReTlDTEdWQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJRenRCUVVNMVF5eGxRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNN1ZVRkRMME1zVFVGQlRTeEpRVUZKTEZGQlFWRXNRMEZCUXl4alFVRmpMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zVTBGQlV5eEZRVUZGT3p0QlFVVjZSQ3hsUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEZWQlFWVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RlFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03UVVGREwwY3NaVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhWUVVGVkxFTkJRVU1zVFVGQlRTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUlVGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPenRCUVVWcVNDeGxRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWxCUVVVc1NVRkJTU3hGUVVGRk8wRkJRM0JDTEdsQ1FVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExGRkJRVkVzUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRja01zYVVKQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXp0WlFVTnFSVHRCUVVORUxHVkJRVWtzU1VGQlNTeERRVUZETEUxQlFVMHNTVUZCUlN4SlFVRkpMRVZCUVVVN1FVRkRja0lzYVVKQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1VVRkJVU3hEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTjBReXhwUWtGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETzFsQlEzQkZPMVZCUlVZc1RVRkJUVHRCUVVOTUxHMUNRVUZSTEVOQlFVTXNTVUZCU1N4SFFVRkhMRkZCUVZFc1EwRkJReXhYUVVGWExFTkJRVU03UVVGRGNrTXNaVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpsQ0xHVkJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NVVUZCVVN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFZRVU5vUXpzN08wRkJSMFFzWVVGQlNTeFJRVUZSTEVOQlFVTXNTMEZCU3l4RlFVRkZPMEZCUTJ4Q0xHVkJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhSUVVGUkxFVkJRVVVzVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMVZCUTJoRUxFMUJRVTA3UVVGRFRDeGxRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRXRCUVVzc1EwRkJRenRWUVVOd1FqczdRVUZGUkN4blFrRkJUeXhSUVVGUkxFTkJRVU03VVVGRmFrSTdPMEZCUlVRc1UwRkJTVHRqUVVGQkxHZENRVUZITzBGQlEwd3NZVUZCU1N4RFFVRkRMRlZCUVZVc1JVRkJSU3hEUVVGRE8wRkJRMnhDTEdGQlFVa3NRMEZCUXl4alFVRmpMRVZCUVVVc1EwRkJRenRCUVVOMFFpeGhRVUZKTEVOQlFVTXNZVUZCWVN4RlFVRkZMRU5CUVVNN1FVRkRja0lzWVVGQlNTeERRVUZETEdWQlFXVXNSVUZCUlN4RFFVRkRPMEZCUTNaQ0xHRkJRVWtzUTBGQlF5eGpRVUZqTEVWQlFVVXNRMEZCUXp0QlFVTjBRaXhoUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTEVOQlFVTTdVVUZEY2tJN08wRkJSVVFzWlVGQlZUdGpRVUZCTEhOQ1FVRkhPMEZCUTFnc1lVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRMnBETEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hEUVVGRExFOUJRVThzUlVGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1FVRkRPVU1zWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1VVRkJVU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTm9SQ3hoUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03VVVGRGRrTTdPMEZCUlVRc2JVSkJRV003WTBGQlFTd3dRa0ZCUnl4RlFVRkZPenRCUVVOdVFpeHJRa0ZCWVR0alFVRkJMSGxDUVVGSExFVkJRVVU3TzBGQlEyeENMRzFDUVVGak8yTkJRVUVzTUVKQlFVY3NSVUZCUlRzN1FVRkZia0lzYjBKQlFXVTdZMEZCUVN3eVFrRkJSenM3TzBGQlJXaENMR0ZCUVVrc1EwRkJReXhwUWtGQmFVSXNSMEZCUnl4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJRenM3TzBGQlIyaEZMR0ZCUVVrc1MwRkJTeXhEUVVGRExFMUJRVTBzUlVGQlJUdEJRVU5vUWl4bFFVRkpMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zV1VGQldTeEZRVUZGTEdGQlFVYzdiMEpCUVVrc1RVRkJTeXhSUVVGUkxFTkJRVU1zUjBGQlJ5eERRVUZETzFsQlFVRXNRMEZCUXl4RFFVRkRPMEZCUTJwR0xHVkJRVWtzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4WFFVRlhMRVZCUVVVc1lVRkJSenR2UWtGQlNTeE5RVUZMTEZsQlFWa3NRMEZCUXl4SFFVRkhMRU5CUVVNN1dVRkJRU3hEUVVGRExFTkJRVU03UVVGRGNFWXNaVUZCU1N4RFFVRkRMR2xDUVVGcFFpeERRVUZETEdkQ1FVRm5RaXhEUVVGRExGVkJRVlVzUlVGQlJTeGhRVUZITzI5Q1FVRkpMRTFCUVVzc1pVRkJaU3hEUVVGRExFZEJRVWNzUTBGQlF6dFpRVUZCTEVOQlFVTXNRMEZCUXp0VlFVTjJSanRCUVVORUxHRkJRVWtzUTBGQlF5eFpRVUZaTEVkQlFVY3NZVUZCUnp0clFrRkJTU3hOUVVGTExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTTdWVUZCUVN4RFFVRkRPMEZCUXpkRExHRkJRVWtzUTBGQlF5eGxRVUZsTEVkQlFVY3NZVUZCUnp0clFrRkJTU3hOUVVGTExGVkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTTdWVUZCUVN4RFFVRkRPMEZCUTI1RUxHRkJRVWtzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4WFFVRlhMRVZCUVVVc1lVRkJSenRyUWtGQlNTeE5RVUZMTEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNN1ZVRkJRU3hEUVVGRExFTkJRVU03VVVGRGFrWTdPMEZCUlVRc2FVSkJRVms3WTBGQlFTeDNRa0ZCUnp0QlFVTmlMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNSMEZCUnl4VFFVRlRMRU5CUVVNN1VVRkRka003TzBGQlJVUXNZVUZCVVR0alFVRkJMR3RDUVVGRExFTkJRVU1zUlVGQlJUczdPMEZCUjFZc1lVRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eFpRVUZaTEZkQlFWY3NSVUZCUlR0QlFVTjJReXhsUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEUxQlFVMHNRMEZCUXl4blFrRkJaMElzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRExHZENRVUZuUWl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVWQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1ZVRkRja2M3T3p0QlFVZEVMR0ZCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03UVVGRE4wTXNZVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhIUVVGSExFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRE5VTXNZVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU03UVVGRGNFSXNZVUZCU1N4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8wRkJRMklzWVVGQlNTeERRVUZETEZOQlFWTXNSMEZCUnl4UlFVRlJMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNWMEZCVnl4RlFVRkZMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dEJRVU16UlN4aFFVRkpMRU5CUVVNc1dVRkJXU3hIUVVGSExGRkJRVkVzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhUUVVGVExFVkJRVVVzU1VGQlNTeERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRPMEZCUXk5RkxHRkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1FVRkRia0lzVlVGQlF5eERRVUZETEdOQlFXTXNSVUZCUlN4RFFVRkRPMEZCUTI1Q0xGVkJRVU1zUTBGQlF5eGxRVUZsTEVWQlFVVXNRMEZCUXp0UlFVTnlRanM3UVVGRlJDeFpRVUZQTzJOQlFVRXNhVUpCUVVNc1EwRkJReXhGUVVGRk96czdRVUZEVkN4aFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUlVGQlJUdEJRVU5rTEdWQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1IwRkJSeXhEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETEVWQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRelZETEdWQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenRCUVVOYUxHVkJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMEZCUTJwQ0xIRkNRVUZWTEVOQlFVTXNXVUZCVFR0QlFVRkZMRzFDUVVGTExFbEJRVWtzUjBGQlJ5eExRVUZMTEVOQlFVTTdXVUZCUlN4RlFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xVkJRemRETzBGQlEwUXNWVUZCUXl4RFFVRkRMR05CUVdNc1JVRkJSU3hEUVVGRE8wRkJRMjVDTEZWQlFVTXNRMEZCUXl4bFFVRmxMRVZCUVVVc1EwRkJRenRSUVVOeVFqczdRVUZGUkN4bFFVRlZPMk5CUVVFc2IwSkJRVU1zUTBGQlF5eEZRVUZGTzBGQlExb3NZVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhIUVVGSExFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRE5VTXNZVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRGNrSXNZVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRE8wRkJRMllzWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRCUVVOeVFpeHBRa0ZCVVN4RFFVRkRMRzFDUVVGdFFpeERRVUZETEZkQlFWY3NSVUZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03UVVGRE5VUXNhVUpCUVZFc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4VFFVRlRMRVZCUVVNc1NVRkJTU3hEUVVGRExHVkJRV1VzUTBGQlF5eERRVUZETzBGQlF6ZEVMRlZCUVVNc1EwRkJReXhqUVVGakxFVkJRVVVzUTBGQlF6dEJRVU51UWl4VlFVRkRMRU5CUVVNc1pVRkJaU3hGUVVGRkxFTkJRVU03VVVGRGNrSTdPMEZCUlVRc1ZVRkJTenRqUVVGQkxHbENRVUZITEVWQlJWQTdPMEZCUlVRc1UwRkJTVHRqUVVGQkxHZENRVUZITEVWQlJVNDdPMEZCUlVRc1dVRkJUenRqUVVGQkxHMUNRVUZITEVWQlJWUTdPMEZCUzBRc1lVRkJVVHM3T3p0alFVRkJMR3RDUVVGRExFTkJRVU1zUlVGQlJUdEJRVU5XTEdGQlFVa3NTVUZCU1N4RFFVRkRMRTlCUVU4c1dVRkJXU3hYUVVGWExFVkJRVVU3UVVGRGRrTXNaVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhOUVVGTkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXl4blFrRkJaMElzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hGUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFWQlEzSkhPMEZCUTBRc1lVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dEJRVU0zUXl4aFFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFZEJRVWNzUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZCUXl4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU0xUXl4aFFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF6dEJRVU53UWl4aFFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEyUXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dEJRVU51UWl4VlFVRkRMRU5CUVVNc1kwRkJZeXhGUVVGRkxFTkJRVU03UVVGRGJrSXNWVUZCUXl4RFFVRkRMR1ZCUVdVc1JVRkJSU3hEUVVGRE8xRkJRM0pDT3p0QlFVVkVMR2xDUVVGWk8yTkJRVUVzYzBKQlFVTXNRMEZCUXl4RlFVRkZPMEZCUTJRc1lVRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTzBGQlEyaENMR1ZCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUjBGQlJ5eERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRMRVZCUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBGQlF6VkRMR1ZCUVVrc1EwRkJReXhUUVVGVExFVkJRVVVzUTBGQlF6dEJRVU5xUWl4WlFVRkRMRU5CUVVNc1kwRkJZeXhGUVVGRkxFTkJRVU03UVVGRGJrSXNXVUZCUXl4RFFVRkRMR1ZCUVdVc1JVRkJSU3hEUVVGRE8xVkJRM0pDTzFGQlEwWTdPMEZCUlVRc2IwSkJRV1U3WTBGQlFTeDVRa0ZCUXl4RFFVRkRMRVZCUVVVN1FVRkRha0lzWVVGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4SFFVRkhMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1FVRkROME1zWVVGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkRja0lzWVVGQlNTeERRVUZETEZsQlFWa3NSVUZCUlN4RFFVRkRPMEZCUTNCQ0xHRkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNN1FVRkRja0lzVlVGQlF5eERRVUZETEdOQlFXTXNSVUZCUlN4RFFVRkRPMEZCUTI1Q0xGVkJRVU1zUTBGQlF5eGxRVUZsTEVWQlFVVXNRMEZCUXp0UlFVTnlRanM3UVVGRlJDeFZRVUZMTzJOQlFVRXNhVUpCUVVjN1FVRkRUaXhoUVVGSkxFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdVVUZEWkRzN1FVRkZSQ3hqUVVGVE8yTkJRVUVzY1VKQlFVYzdRVUZEVml4aFFVRkpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03VVVGRFlqczdRVUZGUkN4cFFrRkJXVHRqUVVGQkxIZENRVUZITzBGQlEySXNZVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRE8xRkJRMmhDT3p0QlFWVkVMRmRCUVUwN096czdPenM3T3pzN08yTkJRVUVzWjBKQlFVTXNTMEZCU3l4RlFVRkRMRTFCUVUwc1JVRkJSVHRCUVVOdVFpeGhRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRXRCUVVzc1EwRkJRenRCUVVOdVFpeGhRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRTFCUVUwc1EwRkJRenRCUVVOeVFpeGhRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUXl4SlFVRkpMRU5CUVVNN1FVRkRNVU1zWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVTXNTVUZCU1N4RFFVRkRPMEZCUXpWRExHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RFFVRkRMRTlCUVU4c1JVRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZET1VNc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNVVUZCVVN4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU5vUkN4aFFVRkpMRU5CUVVNc1lVRkJZU3hGUVVGRkxFTkJRVU03VVVGRGRFSTdPMEZCUlVRc1ZVRkJTenRqUVVGQkxHbENRVUZITzBGQlEwNHNaMEpCUVU4c1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFRRVUZUTEVWQlFVVTdRVUZETjBJc1pVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dFZRVU5zUkR0UlFVTkdPenRCUVZGRUxGbEJRVTg3T3pzN096czdPenRqUVVGQkxHMUNRVUZITzBGQlExSXNZVUZCU1N4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8wRkJRMklzWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzBGQlEzUkRMR0ZCUVVrc1EwRkJReXhyUWtGQmEwSXNSVUZCUlN4RFFVRkRPMEZCUXpGQ0xHRkJRVWtzU1VGQlNTeERRVUZETEZWQlFWVXNSVUZCUlR0QlFVTnVRaXhyUWtGQlR5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dFZRVU5xUXp0QlFVTkVMR0ZCUVVrc1EwRkJReXhoUVVGaExFVkJRVVVzUTBGQlF6dFJRVU4wUWpzN1FVRkZSQ3hyUWtGQllUdGpRVUZCTEhsQ1FVRkhMRVZCUldZN08wRkJSVVFzWVVGQlVUdGpRVUZCTEd0Q1FVRkRMRWxCUVVrc1JVRkJReXhMUVVGTExFVkJRVVU3UVVGRGJrSXNZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTTdRVUZETVVJc1lVRkJTU3hEUVVGRExHTkJRV01zUlVGQlJTeERRVUZETzFGQlEzWkNPenM3TzFWQmJGTnJRaXhUUVVGVE8wbEJRVk1zV1VGQldUczdhMEpCUVRsQ0xGTkJRVk1zUXpzN096czdPMEZEWWpsQ0xHRkJRVmtzUTBGQlF6czdRVUZGWWl4UlFVRlBMRU5CUVVNc1dVRkJXU3hIUVVGSExGVkJRVU1zUlVGQlJTeEZRVUZMTzBGQlF6ZENMRTlCUVVrc1kwRkJZeXhIUVVGSExFVkJRVVVzUTBGQlF5eHhRa0ZCY1VJc1JVRkJSU3hEUVVGRE8wRkJRMmhFTEU5QlFVa3NSMEZCUnl4SFFVRkhMR05CUVdNc1EwRkJReXhIUVVGSExFZEJRVWNzVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXp0QlFVTTVReXhQUVVGSkxFbEJRVWtzUjBGQlJ5eGpRVUZqTEVOQlFVTXNTVUZCU1N4SFFVRkhMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU03UVVGRGFFUXNWVUZCVHl4RlFVRkRMRWRCUVVjc1JVRkJTQ3hIUVVGSExFVkJRVU1zU1VGQlNTeEZRVUZLTEVsQlFVa3NSVUZCUXl4RFFVRkRPMFZCUTI1Q0xFTkJRVU03TzBGQlJVWXNVVUZCVHl4RFFVRkRMRmxCUVZrc1IwRkJSeXhWUVVGRExFMUJRVTBzUlVGQlN6dEJRVU5xUXl4UFFVRkpMRTlCUVU4c1RVRkJUU3hMUVVGTExGRkJRVkVzUlVGQlJUdEJRVU01UWl4WFFVRk5MRWRCUVVjc1VVRkJVU3hEUVVGRExHTkJRV01zUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1JVRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6RkVPenRCUVVWRUxFOUJRVWtzVFVGQlRTeFpRVUZaTEZkQlFWY3NTVUZCU1N4TlFVRk5MRmxCUVZrc1ZVRkJWU3hGUVVGRE8wRkJRMmhGTEZsQlFVOHNUVUZCVFN4RFFVRkRPMGxCUTJZc1RVRkJUVHRCUVVOTUxGbEJRVThzTUVKQlFUQkNMRU5CUVVNN1NVRkRia003UlVGRFJpeERRVUZET3p0QlFVVkdMRkZCUVU4c1EwRkJReXhYUVVGWExFZEJRVWNzVlVGQlF5eERRVUZETEVWQlFVTXNUVUZCVFN4RlFVRkxPMEZCUTJ4RExGVkJRVTg3UVVGRFRDeE5RVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhOUVVGTkxFTkJRVU1zU1VGQlNUdEJRVU40UWl4TlFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFdEJRVXNzUjBGQlJ5eE5RVUZOTEVOQlFVTXNSMEZCUnp0SlFVTjRRaXhEUVVGRE8wVkJRMGdzUTBGQlF6czdRVUZGUml4UlFVRlBMRU5CUVVNc1YwRkJWeXhIUVVGSExGVkJRVU1zUTBGQlF5eEZRVUZETEUxQlFVMHNSVUZCU3p0QlFVTnNReXhWUVVGUE8wRkJRMHdzVFVGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4aFFVRmhMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhIUVVGSExFMUJRVTBzUTBGQlF5eEpRVUZKTEVkQlFVY3NTMEZCU3p0QlFVTXhSU3hOUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEdGQlFXRXNRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRExHRkJRV0VzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRWRCUVVjc1RVRkJUU3hEUVVGRExFZEJRVWNzUjBGQlJ5eExRVUZMTzBsQlF6RkZMRU5CUVVNN1JVRkRTQ3hEUVVGRE96dEJRVVZHTEZGQlFVOHNRMEZCUXl4WFFVRlhMRWRCUVVjc1ZVRkJVeXhOUVVGTkxFVkJRVVU3T3p0QlFVVnlReXhQUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEZGQlFWRXNRMEZCUXl4aFFVRmhMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03UVVGRGFFUXNUMEZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZWQlFWVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRCUVVNM1F5eFRRVUZOTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6czdRVUZGYWtNc1QwRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eFZRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRVZCUVVzN1FVRkRja0lzVjBGQlN5eFBRVUZQTEVOQlFVTXNTMEZCU3l4SFFVRkhMRU5CUVVNc1IwRkJReXhEUVVGRExFTkJRVU03UVVGRGVrSXNWMEZCU3l4UFFVRlBMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUjBGQlF5eERRVUZETEVOQlFVTTdRVUZETVVJc1YwRkJTeXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4RFFVRkRMRWRCUVVNc1NVRkJTU3hEUVVGRE8wRkJRMnhETEZkQlFVc3NUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eEhRVUZETEVsQlFVa3NRMEZCUXp0SlFVTndReXhEUVVGRE8wVkJSVWdzUXpzN096czdPMEZEYUVSRUxHRkJRVmtzUTBGQlF6czdRVUZGWWl4UlFVRlBMRU5CUVVNc1VVRkJVU3hIUVVGSExGVkJRVU1zUjBGQlJ5eEZRVUZMTzBGQlF6RkNMRTlCUVVrc1QwRkJUeXhIUVVGSExFdEJRVXNzVVVGQlVTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeEhRVUZITEV0QlFVc3NTVUZCU1N4SlFVRkpMRWRCUVVjc1dVRkJXU3hWUVVGVkxFdEJRVXNzUzBGQlN5eEpRVUZKTEVkQlFVY3NXVUZCV1N4WFFVRlhMRXRCUVVzc1MwRkJTeXhGUVVGSE8wRkJRMnhLTEZsQlFVOHNTVUZCU1N4RFFVRkRPMGxCUTJJc1RVRkJUVHRCUVVOTUxGbEJRVThzUzBGQlN5eERRVUZETzBsQlEyUTdSVUZEUml4RE96czdPenM3UVVOU1JDeGhRVUZaTEVOQlFVTTdPMEZCUldJc1VVRkJUeXhEUVVGRExFMUJRVTBzUjBGQlNTeGpRVUZqTEVsQlFVa3NVVUZCVVN4RFFVRkRMR1ZCUVdkQ0xFTTdPenM3T3p0QlEwWTNSRHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk96dEJRVVZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN08wRkJSVUU3UVVGRFFUczdRVUZGUVR0QlFVTkJPenRCUVVWQk8wRkJRMEU3UVVGRFFUczdRVUZGUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CT3p0QlFVVkJPMEZCUTBFN08wRkJSVUU3UVVGRFFUczdRVUZGUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTeHJRa0ZCYVVJN1FVRkRha0lzVVVGQlR6dEJRVU5RTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk96dEJRVVZCT3p0QlFVVkJPMEZCUTBFN08wRkJSVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQkxFbEJRVWM3UVVGRFNEdEJRVU5CTzBGQlEwRTdRVUZEUVN4blFrRkJaU3hUUVVGVE8wRkJRM2hDTzBGQlEwRTdPMEZCUlVFN1FVRkRRVHM3UVVGRlFUdEJRVU5CT3p0QlFVVkJPMEZCUTBFN08wRkJSVUU3UVVGRFFUczdRVUZGUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CT3p0QlFVVkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVzVFVGQlN6dEJRVU5NTzBGQlEwRTdPMEZCUlVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk96dEJRVVZCTzBGQlEwRTdPMEZCUlVFN08wRkJSVUU3UVVGRFFUdEJRVU5CT3p0QlFVVkJPenRCUVVWQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHM3UVVGRlFUdEJRVU5CT3p0QlFVVkJPMEZCUTBFN08wRkJSVUU3UVVGRFFUdEJRVU5CT3p0QlFVVkJPMEZCUTBFN08wRkJSVUU3UVVGRFFUczdRVUZGUVR0QlFVTkJPMEZCUTBFN08wRkJSVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVRzN1FVRkZRU3hKUVVGSE8wRkJRMGdzY1VKQlFXOUNMRk5CUVZNN1FVRkROMEk3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPenRCUVVWQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVR0QlFVTkJPMEZCUTBFc1RVRkJTenRCUVVOTU8wRkJRMEU3TzBGQlJVRTdRVUZEUVR0QlFVTkJPenRCUVVWQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVRzN1FVRkZRVHRCUVVOQk96dEJRVVZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdPMEZCUlVFN08wRkJSVUU3UVVGRFFUdEJRVU5CTEVsQlFVYzdRVUZEU0R0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk96dEJRVVZCTzBGQlEwRTdPMEZCUlVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN08wRkJSVUU3UVVGRFFUdEJRVU5CT3p0QlFVVkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CT3p0QlFVVkJPMEZCUTBFN1FVRkRRVHM3UVVGRlFUdEJRVU5CTzBGQlEwRTdPMEZCUlVFN1FVRkRRVHRCUVVOQk96dEJRVVZCTzBGQlEwRTdRVUZEUVRzN1FVRkZRVHRCUVVOQk8wRkJRMEU3T3pzN096czdRVU0zVTBFc1lVRkJXU3hEUVVGRE96czdPenM3UVVGRllpeExRVUZKTEVsQlFVa3NSMEZCUnl4dFFrRkJUeXhEUVVGRExFTkJRV01zUTBGQlF5eERRVUZET3pzN096czdPenM3T3p0TFFWZGtMRWxCUVVrN1FVRkZXaXhaUVVaUkxFbEJRVWtzUjBGRmVVSTdVMEZCY0VNc1IwRkJSeXhuUTBGQlJ5eERRVUZETzFOQlFVTXNSMEZCUnl4blEwRkJSeXhEUVVGRE8xTkJRVU1zU1VGQlNTeG5RMEZCUnl4RFFVRkRPMU5CUVVNc1MwRkJTeXhuUTBGQlJ5eERRVUZET3pzeVFrRkdNMElzU1VGQlNUczdPenM3UVVGTmNrSXNVMEZCU1N4RFFVRkRMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU03UVVGRFppeFRRVUZKTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1EwRkJRenRCUVVObUxGTkJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMEZCUTJwQ0xGTkJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTMEZCU3l4RFFVRkRPMEZCUTI1Q0xGTkJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NTMEZCU3l4RFFVRkRPMEZCUTNKQ0xGTkJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NTMEZCU3l4RFFVRkRPMEZCUTNSQ0xGTkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wbEJRM3BDT3p0blFrRmlhMElzU1VGQlNUdEJRVzlDZGtJc1YwRkJUVHM3T3pzN096dGpRVUZCTEdkQ1FVRkRMRXRCUVVzc1JVRkJSVHRCUVVOYUxHRkJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NSVUZCUlRzN1FVRkZZaXhsUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEV0QlFVc3NSMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhKUVVGTExFbEJRVWtzUTBGQlF5eEpRVUZMTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVWQlFVVXNTVUZCU1N4RFFVRkRMRWRCUVVjc1JVRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdWVUZET1Vjc1RVRkJUVHRCUVVOTUxHVkJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NSVUZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VlVGRGFrUTdRVUZEUkN4aFFVRkpMRWxCUVVrc1EwRkJReXhSUVVGUkxFdEJRVXNzU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUlR0QlFVTm9ReXhsUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNN1FVRkRNMElzWlVGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNN1ZVRkRja0lzVFVGQlRUdEJRVU5NTEdWQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1MwRkJTeXhEUVVGRE8xVkJRM1JDTzBGQlEwUXNaMEpCUVU4c1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF6dFJRVU51UWpzN1FVRk5SQ3hwUWtGQldUczdPenM3T3p0alFVRkJMSE5DUVVGRExFdEJRVXNzUlVGQlJUdEJRVU5zUWl4aFFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RlFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFVkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NSVUZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRGNrUXNaMEpCUVU4c1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkRhRU03TzBGQlMwY3NaVUZCVlRzN096czdPMWxCUVVFc1dVRkJSenRCUVVObUxHZENRVUZQTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUlVGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RlFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU55UkRzN096dFZRV3hFYTBJc1NVRkJTVHM3TzJ0Q1FVRktMRWxCUVVrc1F6czdPenM3T3pzN096czdPenM3T3pzN1FVTmlla0lzWVVGQldTeERRVUZET3p0TFFVVk9MRWxCUVVrc2RVTkJRVTBzUTBGQll6czdTMEZEZUVJc1YwRkJWeXgxUTBGQlRTeEZRVUZyUWpzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenRMUVcxRE4wSXNUVUZCVFN4WFFVRk9MRTFCUVUwN1FVRkZUaXhaUVVaQkxFMUJRVTBzUjBGRkswUTdVMEZCY0VVc1NVRkJTU3huUTBGQlF5eFZRVUZWTzFOQlFVTXNVMEZCVXl4blEwRkJReXhWUVVGVk8xTkJRVU1zVFVGQlRTeG5RMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhIUVVGSExFTkJRVU03VTBGQlF5eE5RVUZOTEdkRFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFZEJRVWNzUTBGQlF6czdNa0pCUm01RkxFMUJRVTA3TzBGQlIyWXNVMEZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU03UVVGRGFrSXNVMEZCU1N4RFFVRkRMRk5CUVZNc1IwRkJSeXhUUVVGVExFTkJRVU03UVVGRE0wSXNVMEZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRGJFSXNVMEZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRFppeFRRVUZKTEVOQlFVTXNWMEZCVnl4SFFVRkhMRU5CUVVNc1EwRkJRenRCUVVOeVFpeFRRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1JVRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEpRVU0xUWpzN1owSkJWRlVzVFVGQlRUdEJRVmRxUWl4WFFVRk5PMk5CUVVFc1owSkJRVU1zVFVGQlRTeEZRVUZETEUxQlFVMHNSVUZCUlR0QlFVTndRaXhoUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITzBGQlEyUXNZMEZCUnl4RlFVRkZPMEZCUTBnc1kwRkJReXhGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEV2l4alFVRkRMRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU5pTzBGQlEwUXNZMEZCUnl4RlFVRkZPMEZCUTBnc1kwRkJReXhGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEV2l4alFVRkRMRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU5pTzBGQlEwUXNhVUpCUVUwc1JVRkJSVHRCUVVOT0xHTkJRVU1zUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVVXNRMEZCUXl4SFFVRkhMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGVFTXNZMEZCUXl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJSU3hEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTjZRenRWUVVOR0xFTkJRVU03VVVGRFNEczdRVUZOUnl4WFFVRk5PMWxCU2tFc1ZVRkJReXhMUVVGTExFVkJRVVU3UVVGRGFFSXNZVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRGJrUTdXVUZGVXl4WlFVRkhPMEZCUTFnc1owSkJRVThzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXp0UlFVTnlRanM3UVVGSFJDeFhRVUZOTzJOQlFVRXNaMEpCUVVNc1MwRkJTeXhGUVVGRk8wRkJRMW9zWVVGQlNTeEpRVUZKTEVOQlFVTXNTVUZCU1N4TFFVRkhMRlZCUVZVc1JVRkJSVHRCUVVNeFFpeGxRVUZKTEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc2MwSkJRWE5DTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF6dEJRVU5xUlN4bFFVRkpMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NSMEZCUnl4RlFVRkZPMEZCUVVVc2MwSkJRVk1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZCUlR0QlFVTnFSQ3hsUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEV0QlFVc3NRMEZCUXp0QlFVTndRaXhsUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1UwRkJVeXhIUVVGSExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTTdWVUZEZUVRc1RVRkJUVHRCUVVOTUxHVkJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMSE5DUVVGelFpeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMVZCUTJwRU8wRkJRMFFzWVVGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVWQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM2hET3p0QlFVVkVMREpDUVVGelFqdGpRVUZCTEdkRFFVRkRMRTlCUVU4c1JVRkJSVHRCUVVNNVFpeHBRa0ZCVHl4SlFVRkpMRU5CUVVNc1UwRkJVenRCUVVOdVFpeG5Ra0ZCU3l4UlFVRlJPMEZCUTFnc2FVSkJRVWtzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFVkJRVVVzVDBGQlR5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTndSeXh4UWtGQlVTeEhRVUZITEZGQlFWRXNRMEZCUXl4TFFVRkxMRWxCUVVrc1NVRkJTU3hEUVVGRExFVkJRVVVzUjBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTjRReXh4UWtGQlVTeEhRVUZITEVOQlFVVXNVVUZCVVN4SFFVRkhMRWxCUVVrc1IwRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzBGQlEzWkRMRzlDUVVGUExGRkJRVkVzUTBGQlF6dEJRVU5zUWl4blFrRkJTeXhWUVVGVk8wRkJRMklzYjBKQlFVOHNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eEZRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpORkxHZENRVUZMTEZsQlFWazdRVUZEWml4dlFrRkJUeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRVZCUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RlFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGQlFTeFZRVU0xUlR0UlFVTkdPenM3TzFWQk4wUlZMRTFCUVUwN096dExRV3RGVGl4TlFVRk5MRmRCUVU0c1RVRkJUVHRCUVVWT0xGbEJSa0VzVFVGQlRTeEhRVVZWTzFOQlFXWXNTVUZCU1N4blEwRkJReXhSUVVGUk96c3lRa0ZHWkN4TlFVRk5PenRCUVVkbUxGTkJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMEZCUTJwQ0xGTkJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4WFFVRlhMRVZCUVVVc1EwRkJRenRCUVVNdlFpeFRRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMRXRCUVVzc1EwRkJRenRKUVVONlFqczdaMEpCVGxVc1RVRkJUVHRCUVZGcVFpeFZRVUZMTzJOQlFVRXNhVUpCUVVjN1FVRkRUaXhwUWtGQlVTeEpRVUZKTEVOQlFVTXNTVUZCU1R0QlFVTm1MR2RDUVVGTExGTkJRVk03UVVGRFdpeHBRa0ZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF6dEJRVU5vUWl4cFFrRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTzBGQlEyaENMREpDUVVGWkxFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMk5CUXpWQ08wRkJRMFFzYVVKQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1ZVRkJWU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0QlFVTjRSQ3hwUWtGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlF5OUNMRzFDUVVGTk8wRkJRMUlzWjBKQlFVc3NVVUZCVVR0QlFVTllMR2xDUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdRVUZEWkN4cFFrRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJReTlDTEcxQ1FVRk5PMEZCUTFJc1owSkJRVXNzV1VGQldUdEJRVU5tTEdsQ1FVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSE8wRkJRMlFzWjBKQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXp0QlFVTXpReXhuUWtGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXp0alFVTnFSQ3hEUVVGRE8wRkJRMFlzYVVKQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRCUVVOa0xHbENRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJRenRCUVVOcVFpeHZRa0ZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTE8wRkJRMnBDTEdkQ1FVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzBGQlEyeENMR2RDUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRVZCUTI1Q0xFTkJRVU1zUTBGQlF6dEJRVU5JTEcxQ1FVRk5PMEZCUTFJc1owSkJRVXNzVVVGQlVUdEJRVU5ZTEdsQ1FVRkpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03UVVGRFdpeHBRa0ZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUXk5Q0xHMUNRVUZOTzBGQlFVRXNWVUZEVkR0UlFVVkdPenRCUVVWRUxGTkJRVWs3WTBGQlFTeG5Ra0ZCUnp0QlFVTk1MR0ZCUVVrc1NVRkJTU3hEUVVGRExFbEJRVWtzUzBGQlJ5eFpRVUZaTEVWQlFVVTdRVUZETlVJc1pVRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ6dEJRVU5rTEdOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXp0QlFVTXpReXhqUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETzFsQlEycEVMRU5CUVVNN1FVRkRSaXhsUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUXp0QlFVTnFRaXhyUWtGQlN5eEZRVUZGTEVsQlFVa3NRMEZCUXl4TFFVRkxPMEZCUTJwQ0xHTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1FVRkRiRUlzWTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhGUVVOdVFpeERRVUZETEVOQlFVTTdRVUZEU0N4bFFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03VlVGRFpqdFJRVU5HT3p0QlFVVkVMRmxCUVU4N1kwRkJRU3h0UWtGQlJ6dEJRVU5TTEdsQ1FVRlJMRWxCUVVrc1EwRkJReXhKUVVGSk8wRkJRMllzWjBKQlFVc3NVVUZCVVR0QlFVTllMR2xDUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdRVUZEWml4cFFrRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJReTlDTEcxQ1FVRk5PMEZCUTFJc1owSkJRVXNzV1VGQldUdEJRVU5tTEdsQ1FVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03UVVGRFppeHBRa0ZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSenRCUVVOa0xHZENRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVczdRVUZETlVJc1owSkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMDdZMEZEYkVNc1EwRkJRenRCUVVOR0xHbENRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJRenRCUVVOcVFpeHZRa0ZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTE8wRkJRMnBDTEdkQ1FVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzBGQlEyeENMR2RDUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRVZCUTI1Q0xFTkJRVU1zUTBGQlF6dEJRVU5JTEcxQ1FVRk5PMEZCUVVFc1ZVRkRWRHRSUVVOR096czdPMVZCTlVWVkxFMUJRVTA3T3pzN096czdRVU40UjI1Q0xHRkJRVmtzUTBGQlF6czdPenM3TzB0QlJWRXNUVUZCVFR0QlFVVmtMRmxCUmxFc1RVRkJUU3hEUVVWaUxFdEJRVXNzUlVGQlJUc3lRa0ZHUVN4TlFVRk5PenRCUVVkMlFpeFRRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRXRCUVVzc1NVRkJTU3hMUVVGTExFTkJRVU03U1VGRE4wSTdPMmRDUVVwclFpeE5RVUZOTzBGQlRYcENMRk5CUVVrN1kwRkJRU3hqUVVGRExFdEJRVXNzUlVGQlJUdEJRVU5XTEdGQlFVa3NTMEZCU3l4SlFVRkpMRXRCUVVzc1MwRkJTeXhMUVVGTExFVkJRVVU3UVVGRE5VSXNaVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhMUVVGTExFTkJRVU03VlVGRGNFSXNUVUZCVFR0QlFVTk1MR1ZCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMVZCUXpGQ08xRkJRMFk3TzBGQlJVUXNUMEZCUlR0alFVRkJMR05CUVVjN1FVRkRTQ3hoUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTnVRanM3UVVGRlJDeFJRVUZITzJOQlFVRXNaVUZCUnp0QlFVTktMR0ZCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUzBGQlN5eERRVUZETzFGQlEzQkNPenM3TzFWQmNFSnJRaXhOUVVGTk96czdhMEpCUVU0c1RVRkJUU3hET3pzN096czdRVU5HTTBJc1lVRkJXU3hEUVVGRE96czdPenM3T3pzN096czdRVUZGWWl4TFFVRkpMRWRCUVVjc1IwRkJSeXh0UWtGQlR5eERRVUZETEVOQlFXRXNRMEZCUXl4RFFVRkRPMEZCUTJwRExFdEJRVWtzVTBGQlV5eEhRVUZITEcxQ1FVRlBMRU5CUVVNc1EwRkJiVUlzUTBGQlF5eERRVUZETzBGQlF6ZERMRXRCUVVrc1NVRkJTU3hIUVVGSExHMUNRVUZQTEVOQlFVTXNSVUZCWjBJc1EwRkJReXhEUVVGRE96dExRVU42UWl4WFFVRlhMQ3REUVVGTkxFVkJRWEZDT3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenRMUVcxRE4wSXNUVUZCVFR0QlFVVmtMRmxCUmxFc1RVRkJUU3hIUVVWWU96SkNRVVpMTEUxQlFVMDdPMEZCU1haQ0xGTkJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNTMEZCU3l4RlFVRkRMRXRCUVVzc1JVRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6czdRVUZGY0VNc1UwRkJTU3hSUVVGUkxFZEJRVWM3UVVGRFlpeGhRVUZSTEVOQlFVTXNSMEZCUnl4RlFVRkRMRVZCUVVVc1EwRkJRenRCUVVOb1FpeGhRVUZSTEZWQlFWVTdRVUZEYkVJc1dVRkJUeXhEUVVGRE8wRkJRMUlzV1VGQlR5eERRVUZETzBGQlExSXNZVUZCVVN4RFFVRkRPMEZCUTFRc1kwRkJVeXhEUVVGRE8wMUJRMWdzUTBGQlF6czdRVUZGUml4blEwRm1hVUlzVFVGQlRTdzJRMEZsYWtJc1UwRkJVeXhGUVVGRExFOUJRVThzUlVGQlF5eFJRVUZSTEVWQlFVVTdPMEZCUld4RExGTkJRVWtzUTBGQlF5eFhRVUZYTEVkQlFVY3NWVUZCVlN4RFFVRkRPenRCUVVVNVFpeFRRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWxCUVVrc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RlFVRkZMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN08wRkJSWFJITEZOQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1NVRkJTU3hYUVVGWExFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hGUVVGRExFbEJRVWtzUTBGQlF5eFhRVUZYTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlF6TkhMRk5CUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRE96dEJRVVUzUXl4VFFVRkpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03TzBGQlJWb3NVMEZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXpzN1FVRkZNME1zVTBGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBsQlJXaERPenRoUVRsQ2EwSXNUVUZCVFRzN1owSkJRVTRzVFVGQlRUdEJRV2REZWtJc2JVSkJRV003WTBGQlFTd3dRa0ZCUnpzN1FVRkZaaXhoUVVGSkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRE9VSXNZVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMEZCUTJ4RExHRkJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6czdRVUZGYWtNc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRMjVETEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVTjJReXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRmNrTTdPMEZCUlVRc2EwSkJRV0U3WTBGQlFTeDVRa0ZCUnpzN1FVRkZaQ3hoUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSVHRCUVVNMVFpeGxRVUZKTEVOQlFVTXNWMEZCVnl4SFFVRkhMRlZCUVZVc1EwRkJRenRWUVVNdlFpeE5RVUZOTzBGQlEwd3NaVUZCU1N4RFFVRkRMRmRCUVZjc1IwRkJSeXhaUVVGWkxFTkJRVU03VlVGRGFrTTdPMEZCUlVRc1lVRkJTU3hKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTzBGQlEycENMR1ZCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFZRVU4wUkRzN1FVRkZSQ3hoUVVGSkxFTkJRVU03WVVGQlJTeERRVUZETzJGQlFVVXNRMEZCUXp0aFFVRkZMRU5CUVVNN1lVRkJSU3hUUVVGVE8yRkJRVVVzV1VGQldTeGhRVUZETzBGQlEzaERMR0ZCUVVrc1EwRkJReXhSUVVGUkxFZEJRVWM3UVVGRFpDeG5Ra0ZCU3l4RlFVRkZMRU5CUVVNN1FVRkRVaXhaUVVGRExFVkJRVVVzUTBGQlF6dFZRVU5NTEVOQlFVTTdPMEZCUlVZc1lVRkJTU3hKUVVGSkxFTkJRVU1zVjBGQlZ5eExRVUZMTEZWQlFWVXNSVUZCUlR0QlFVTnVReXhsUVVGSkxFTkJRVU1zVTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRMnBETEZsQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGRExFTkJRVU1zUTBGQlF6dEJRVU5xUWl4WlFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRMDRzV1VGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNN1FVRkRia0lzV1VGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNN1FVRkRaaXhsUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1UwRkJVeXhIUVVGSExFZEJRVWNzUTBGQlF6dEJRVU40UXl4bFFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUjBGQlJ5eERRVUZETEVkQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFZEJRVU1zU1VGQlNTeERRVUZETEZWQlFWVXNTVUZCUlN4RFFVRkRMRWRCUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVkQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkROMFVzYjBKQlFWTXNSMEZCUnl4WlFVRlpMRWRCUVVNc1NVRkJTU3hEUVVGRExGTkJRVk1zUjBGQlJTeERRVUZETEVOQlFVVXNSMEZCUXl4RFFVRkRMRWRCUVVNc1MwRkJTeXhEUVVGRE8wRkJRM0pFTEhWQ1FVRlpMRWRCUVVjc1EwRkJReXhIUVVGRExFTkJRVU1zUTBGQlF6dFZRVU53UWl4TlFVRk5PMEZCUTB3c1pVRkJTU3hEUVVGRExGTkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJRenRCUVVOc1F5eFpRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTA0c1dVRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTJ4Q0xGbEJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUTJZc1dVRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTTdRVUZEYkVJc1pVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRk5CUVZNc1IwRkJSeXhIUVVGSExFTkJRVU03UVVGRGVFTXNaVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEZWQlFWVXNTVUZCUlN4RFFVRkRMRWRCUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVkQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTTdRVUZETTBVc2IwSkJRVk1zUjBGQlJ5eGpRVUZqTEVkQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1IwRkJSU3hEUVVGRExFTkJRVVVzUjBGQlF5eERRVUZETEVkQlFVTXNSMEZCUnl4RFFVRkRPMEZCUTNKRUxIVkNRVUZaTEVkQlFVY3NRMEZCUXl4SFFVRkRMRU5CUVVNc1EwRkJRenRWUVVOd1FqczdRVUZGUkN4aFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZITEVWQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkROMElzWVVGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4WlFVRlpMRU5CUVVNc1IwRkJSeXhGUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlF6ZENMR0ZCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zV1VGQldTeERRVUZETEZkQlFWY3NSVUZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRCUVVNM1F5eGhRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFVkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdRVUZEZWtNc1lVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8wRkJRM3BETEdGQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFOUJRVThzUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTnFReXhoUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4UlFVRlJMRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03TzBGQlJXeERMR0ZCUVVrc1NVRkJTU3hEUVVGRExGZEJRVmNzUzBGQlN5eFZRVUZWTEVWQlFVVTdRVUZEYmtNc1pVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRMnBETEdWQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hEUVVGRExFZEJRVWNzUlVGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRMjVFTEdWQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hEUVVGRExFOUJRVThzUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTnlReXhsUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZsQlFWa3NRMEZCUXl4UlFVRlJMRVZCUVVNc1EwRkJReXhIUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1ZVRkRNMFFzVFVGQlRUdEJRVU5NTEdWQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hEUVVGRExFZEJRVWNzUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTnFReXhsUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGFrTXNaVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhaUVVGWkxFTkJRVU1zVDBGQlR5eEZRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRGRrUXNaVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhaUVVGWkxFTkJRVU1zVVVGQlVTeEZRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMVZCUTNaRE8wRkJRMFFzWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1YwRkJWeXhGUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzBGQlEycEVMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEVsQlFVa3NSVUZCUXl4WlFVRlpMRU5CUVVNc1EwRkJRenRCUVVNM1F5eGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFVkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdPMEZCUlRkRExHRkJRVWtzU1VGQlNTeERRVUZETEZkQlFWY3NTMEZCU3l4VlFVRlZMRVZCUVVVN1FVRkRia01zWlVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlF5OUNMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVsQlFVa3NSVUZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFWQlEyeEVMRTFCUVUwN1FVRkRUQ3hsUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTnFSQ3hsUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VlVGRGFFTTdRVUZEUkN4aFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZITEVWQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVVUzUXpzN1FVRkZSQ3h0UWtGQll6dGpRVUZCTERCQ1FVRkhPMEZCUTJZc1lVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RlFVRkZMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdRVUZEYUVRc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RlFVRkZMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZEZEVRc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RlFVRkZMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdVVUZEY0VRN08wRkJSMFFzVjBGQlRUdGpRVUZCTEd0Q1FVRkhPMEZCUTFBc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVWQlFVVTdRVUZEYWtJc1pVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRk5CUVZNc1IwRkJReXhKUVVGSkxFTkJRVU03VlVGRGRrTTdRVUZEUkN4aFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZITEVWQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6czdRVUZGTlVNc1lVRkJTU3hKUVVGSkxFTkJRVU1zVjBGQlZ5eExRVUZMTEZWQlFWVXNSVUZCUlR0QlFVTnVReXhsUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUjBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRlZCUVZVc1NVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhIUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlF6VkdMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVsQlFVa3NSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1FVRkRMMFFzWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1IwRkJSeXhGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEJRVU5xUlN4bFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVWQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFZRVU14UkN4TlFVRk5PMEZCUTB3c1pVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhWUVVGVkxFbEJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUjBGQlF5eERRVUZETEVOQlFVTXNSMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU16Uml4bFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEJRVU5xUkN4bFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZITEVWQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRha01zWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1QwRkJUeXhGUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1ZVRkRla1E3VVVGRFJqczdRVUZIUkN4VlFVRkxPMk5CUVVFc2FVSkJRVWM3UVVGRFRpeGhRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eEhRVUZETEVkQlFVY3NRMEZCUXp0QlFVTnlReXhoUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRE8wRkJRMnhETEdGQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenRSUVVOaU96dEJRVVZFTEZOQlFVazdZMEZCUVN4blFrRkJSenRCUVVOTUxHRkJRVWtzU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlR0QlFVTm9RaXhsUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRGFrTXNaVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhaUVVGWkxFTkJRVVVzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRU5CUVVVc1EwRkJRenRCUVVOb1JDeGxRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNSRExHVkJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0VlFVVm1PMUZCUTBZN08wRkJSVVFzV1VGQlR6dGpRVUZCTEcxQ1FVRkhPMEZCUTFJc1lVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzFGQlEyWTdPMEZCUlVjc1pVRkJWVHRaUVVGQkxGbEJRVWM3UVVGRFppeG5Ra0ZCVHl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF6dFJRVU12UWpzN1FVRlZSeXhWUVVGTE96czdPenM3T3p0WlFVaEJMRmxCUVVjN1FVRkRWaXhuUWtGQlR5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJRenRSUVVNeFFqdFpRVU5STEZWQlFVTXNRMEZCUXl4RlFVRkZPMEZCUTFnc1lVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRkRUlzWVVGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFZRVUZWTEVOQlFVTTdRVUZETjBNc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEJRVU4wUXl4aFFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03VVVGRFpqczdRVUZWUnl4UlFVRkhPenM3T3pzN096dFpRVWhCTEZsQlFVYzdRVUZEVWl4blFrRkJUeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXp0UlFVTjRRanRaUVVOTkxGVkJRVU1zUTBGQlF5eEZRVUZGTzBGQlExUXNZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEzSkNPenRCUVZWSExGRkJRVWM3T3pzN096czdPMWxCU0VFc1dVRkJSenRCUVVOU0xHZENRVUZQTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRE8xRkJRM2hDTzFsQlEwMHNWVUZCUXl4RFFVRkRMRVZCUVVVN1FVRkRWQ3hoUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRja0k3TzBGQlZVY3NVMEZCU1RzN096czdPenM3V1VGSVFTeFpRVUZITzBGQlExUXNaMEpCUVU4c1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTTdVVUZEZWtJN1dVRkRUeXhWUVVGRExFTkJRVU1zUlVGQlJUdEJRVU5XTEdGQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU4wUWpzN1FVRlZSeXhUUVVGSk96czdPenM3T3p0WlFVaEJMRmxCUVVjN1FVRkRWQ3huUWtGQlR5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWxCUVVrc1EwRkJRenRSUVVNelFqdFpRVU5QTEZWQlFVTXNRMEZCUXl4RlFVRkZPMEZCUTFZc1lVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNoQ096czdPMVZCZEU5clFpeE5RVUZOTzBsQlFWTXNVMEZCVXpzN2EwSkJRWGhDTEUxQlFVMHNRenM3T3pzN08wRkRlRU16UWl4aFFVRlpMRU5CUVVNN096czdPenM3T3pzN1FVRkZZaXhMUVVGSkxFZEJRVWNzUjBGQlJ5eHRRa0ZCVHl4RFFVRkRMRU5CUVdFc1EwRkJReXhEUVVGRE8wRkJRMnBETEV0QlFVa3NWMEZCVnl4SFFVRkhMRzFDUVVGUExFTkJRVU1zUlVGQmEwSXNRMEZCUXl4RFFVRkRPMEZCUXpsRExFdEJRVWtzVTBGQlV5eEhRVUZITEcxQ1FVRlBMRU5CUVVNc1EwRkJiVUlzUTBGQlF5eERRVUZET3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN08wdEJPRUo0UWl4TlFVRk5PMEZCUldRc1dVRkdVU3hOUVVGTkxFZEJSVmc3TWtKQlJrc3NUVUZCVFRzN1FVRkpka0lzVTBGQlNTeFBRVUZQTEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenM3UVVGRmVFSXNVMEZCU1N4UlFVRlJMRWRCUVVjN1FVRkRZaXhoUVVGUkxFTkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNRMEZCUXp0QlFVTm1MR1ZCUVZVc1MwRkJTenRCUVVObUxHTkJRVk1zUzBGQlN6dE5RVU5tTEVOQlFVTTdPMEZCUlVZc1owTkJXbWxDTEUxQlFVMHNOa05CV1dwQ0xGTkJRVk1zUlVGQlF5eFBRVUZQTEVWQlFVTXNVVUZCVVN4RlFVRkZPenRCUVVWc1F5eFRRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWxCUVVrc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN08wRkJSVzVFTEZOQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenRKUVVWaU96dGhRV3hDYTBJc1RVRkJUVHM3WjBKQlFVNHNUVUZCVFR0QlFXOUNla0lzYlVKQlFXTTdZMEZCUVN3d1FrRkJSenM3UVVGRlppeGhRVUZKTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZET1VJc1lVRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8wRkJRMnBETEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0QlFVTnVReXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRmNrTTdPMEZCUlVRc2EwSkJRV0U3WTBGQlFTeDVRa0ZCUnpzN1FVRkZaQ3hoUVVGSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJReXhEUVVGRExFVkJRVVU3UVVGRE9VSXNaVUZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZETEVOQlFVTXNRMEZCUXp0VlFVTXZRaXhOUVVGTk8wRkJRMHdzWlVGQlNTeERRVUZETEZGQlFWRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGRExFTkJRVU1zUTBGQlF6dFZRVU01UWpzN1FVRkZSQ3hoUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRVZCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1IwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU0xUkN4aFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZITEVWQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNSMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNelJDeGhRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFVkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNSMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNMVF5eGhRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFVkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNSMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNMVF5eGhRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhQUVVGUExFVkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNSMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNdlF5eGhRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhSUVVGUkxFVkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPenRCUVVVNVF5eGhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFVkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzBGQlF6RkVMR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVsQlFVa3NSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlF6TkRMR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NSVUZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03VVVGRk0wTTdPMEZCUlVRc2JVSkJRV003WTBGQlFTd3dRa0ZCUnp0QlFVTm1MR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNSVUZCUlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBGQlEyNUVMR0ZCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFJRVU5tT3p0QlFVVkVMRmRCUVUwN1kwRkJRU3hyUWtGQlJ6dEJRVU5RTEdGQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhGUVVGRk8wRkJRMllzWlVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dEJRVU14UkN4bFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eE5RVUZOTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFZRVU5xUkN4TlFVRk5PMEZCUTB3c1pVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRCUVVNeFJDeGxRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRWUVVOdVJEdFJRVU5HT3p0QlFVVkVMRlZCUVVzN1kwRkJRU3hwUWtGQlJ6dEJRVU5PTEdGQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenRCUVVOYUxHRkJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0QlFVTmtMR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVOb1F6czdRVUZWUnl4VlFVRkxPenM3T3pzN096dFpRVWhCTEZsQlFVYzdRVUZEVml4blFrRkJUeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXp0UlFVTXhRanRaUVVOUkxGVkJRVU1zUzBGQlN5eEZRVUZGTzBGQlEyWXNZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZEZUVJc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJReTlDTEdGQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRSUVVObU96dEJRVkZFTEZOQlFVazdPenM3T3pzN08yTkJRVUVzWjBKQlFVYzdRVUZEVEN4aFFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzBGQlEyNUNMR0ZCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFJRVU5tT3pzN08xVkJPVVpyUWl4TlFVRk5PMGxCUVZNc1UwRkJVenM3YTBKQlFYaENMRTFCUVUwc1F6czdPenM3TzBGRGJFTXpRaXhoUVVGWkxFTkJRVU03T3pzN096czdPenM3UVVGRllpeExRVUZKTEVkQlFVY3NSMEZCUnl4dFFrRkJUeXhEUVVGRExFTkJRV0VzUTBGQlF5eERRVUZETzBGQlEycERMRXRCUVVrc1kwRkJZeXhIUVVGSExHMUNRVUZQTEVOQlFVTXNSVUZCT0VJc1EwRkJReXhEUVVGRE96czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3UzBGcFEzaERMRTFCUVUwN1FVRkZaQ3haUVVaUkxFMUJRVTBzUjBGRldEc3lRa0ZHU3l4TlFVRk5PenRCUVVsMlFpeFRRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE96dEJRVWQyUWl4VFFVRkpMRkZCUVZFc1IwRkJSenRCUVVOaUxHRkJRVkVzUTBGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RFFVRkRPMEZCUTJZc1lVRkJVU3haUVVGWk8wRkJRM0JDTEdOQlFWTXNTMEZCU3p0TlFVTm1MRU5CUVVNN08wRkJSVVlzWjBOQlltbENMRTFCUVUwc05rTkJZV3BDTEZOQlFWTXNSVUZCUXl4UFFVRlBMRVZCUVVNc1VVRkJVU3hGUVVGRk96czdPenM3TzBGQlVXeERMRk5CUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNN08wRkJSUzlDTEZOQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenRCUVVOYUxGTkJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0SlFVVm1PenRoUVRGQ2EwSXNUVUZCVFRzN1owSkJRVTRzVFVGQlRUdEJRVFJDZWtJc2JVSkJRV003WTBGQlFTd3dRa0ZCUnp0QlFVTm1MR0ZCUVVrc1EwRkJReXhIUVVGSExFZEJRVWNzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRCUVVOb1F5eGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdPMEZCUlc1RExHRkJRVWtzUTBGQlF5eHBRa0ZCYVVJc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZET3pzN1FVRkhiRU1zWVVGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBGQlF5OUNMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenM3UVVGRmNFTXNZVUZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhIUVVGSExFTkJRVU1zWTBGQll5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03TzBGQlJXaEVMR0ZCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRmxCUVZrc1EwRkJReXhSUVVGUkxFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdPMEZCUlhKRUxHRkJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkZka1E3TzBGQlJVUXNhMEpCUVdFN1kwRkJRU3g1UWtGQlJ6czdRVUZGWkN4aFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU42UXl4aFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU14UXl4aFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZITEVWQlFVVXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eEZRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVVOcVJpeGhRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhqUVVGakxFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRSUVVOMFJEczdRVUZGUkN4dFFrRkJZenRqUVVGQkxEQkNRVUZIT3p0QlFVVm1MR0ZCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRmxCUVZrc1EwRkJReXhaUVVGWkxFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVOMFJTeGhRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFpRVUZaTEVOQlFVTXNXVUZCV1N4RlFVRkZMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdRVUZEY0VVc1lVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzFGQlEyWTdPMEZCVVVRc1YwRkJUVHM3T3pzN096czdPMk5CUVVFc2EwSkJRVWM3UVVGRFVDeGhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1JVRkJSVHRCUVVObUxHVkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUTJoRUxHVkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRkZCUVZFc1JVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRPMVZCUXpGRUxFMUJRVTA3UVVGRFRDeGxRVUZKTEVsQlFVa3NRMEZCUXl4SlFVRkpMRXRCUVVjc1dVRkJXU3hGUVVGRk8wRkJRelZDTEdsQ1FVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVWQlFVVXNUMEZCVHl4SFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUlVGQlJTeEhRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUXpsRUxHbENRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhaUVVGWkxFTkJRVU1zU1VGQlNTeEZRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhIUVVGRExFZEJRVWNzUjBGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0QlFVTndSU3hwUWtGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzUlVGQlJ5eERRVUZETEVOQlFVTXNSMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zU1VGQlJTeEhRVUZITEVkQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRla1VzVFVGQlRUdEJRVU5NTEdsQ1FVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFpRVU55UkR0QlFVTkVMR1ZCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNSVUZCUlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFWQlEyNUVPMUZCUTBZN096czdWVUZxUm10Q0xFMUJRVTA3U1VGQlV5eGpRVUZqT3p0clFrRkJOMElzVFVGQlRTeERPenM3T3pzN1FVTndRek5DTEdGQlFWa3NRMEZCUXpzN096czdPenM3T3p0QlFVVmlMRXRCUVVrc1IwRkJSeXhIUVVGSExHMUNRVUZQTEVOQlFVTXNRMEZCWVN4RFFVRkRMRU5CUVVNN1FVRkRha01zUzBGQlNTeEpRVUZKTEVkQlFVY3NiVUpCUVU4c1EwRkJReXhEUVVGakxFTkJRVU1zUTBGQlF6dEJRVU51UXl4TFFVRkpMRmRCUVZjc1IwRkJSeXh0UWtGQlR5eERRVUZETEVWQlFXdENMRU5CUVVNc1EwRkJRenRCUVVNNVF5eExRVUZKTEZOQlFWTXNSMEZCUnl4dFFrRkJUeXhEUVVGRExFTkJRVzFDTEVOQlFVTXNRMEZCUXpzN096czdPMHRCVFhoQ0xHTkJRV003UVVGRmRFSXNXVUZHVVN4alFVRmpMRU5CUlhKQ0xFbEJRVWtzUlVGQlF5eFBRVUZQTEVWQlFVTXNVVUZCVVN4RlFVRkZPekpDUVVab1FpeGpRVUZqT3p0QlFVa3ZRaXhuUTBGS2FVSXNZMEZCWXl3MlEwRkpla0lzU1VGQlNTeEZRVUZETEU5QlFVOHNSVUZCUXl4UlFVRlJMRVZCUVVVN08wRkJSVGRDTEZOQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZKTEVsQlFVa3NVVUZCVVN4RFFVRkRPenRCUVVVelF5eFRRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhPMEZCUTJRc1VVRkJReXhGUVVGRkxFTkJRVU03UVVGRFNpeFJRVUZETEVWQlFVVXNRMEZCUXp0TlFVTk1MRU5CUVVNN08wRkJSVVlzVTBGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMGxCUlhCRU96dGhRV1pyUWl4alFVRmpPenRuUWtGQlpDeGpRVUZqTzBGQmFVSnFReXh0UWtGQll6dGpRVUZCTERCQ1FVRkhPMEZCUTJZc1lVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8wRkJRMmhETEdGQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFMUJRVTBzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTjBReXhoUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRGVFTXNZVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhaUVVGWkxFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPenRCUVVWNlF5eGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdPMEZCUlc1RExHRkJRVWtzUTBGQlF5eHBRa0ZCYVVJc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZET3p0QlFVVnNReXhoUVVGSkxFTkJRVU1zWVVGQllTeEZRVUZGTEVOQlFVTTdVVUZEZEVJN08wRkJSVVFzYTBKQlFXRTdZMEZCUVN4NVFrRkJSenRCUVVOa0xHRkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1JVRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTNwRExHRkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpGRExHRkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVVjc1JVRkJSU3hKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRVZCUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOMFJUczdRVUZGUkN4WFFVRk5PMk5CUVVFc2EwSkJRVWM3UVVGRFVDeGhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1JVRkJSVHRCUVVObUxHVkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUTJoRUxHVkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRkZCUVZFc1JVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRPMVZCUXpGRUxFMUJRVTA3UVVGRFRDeGxRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVOc1JDeGxRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhSUVVGUkxFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRWUVVOeVJEdFJRVU5HT3p0QlFVVkVMRk5CUVVrN1kwRkJRU3hqUVVGRExGVkJRVlVzUlVGQlJUdEJRVU5tTEdsQ1FVRlJMRWxCUVVrc1EwRkJReXhKUVVGSk8wRkJRMllzWjBKQlFVc3NVMEZCVXp0QlFVTmFMR2xDUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdRVUZEWkN4cFFrRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTzBGQlEyaENMREpDUVVGWkxFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMk5CUXpWQ08wRkJRMFFzYVVKQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1ZVRkJWU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eERRVUZET3p0QlFVVjBSQ3h0UWtGQlRUdEJRVU5TTEdkQ1FVRkxMRkZCUVZFN1FVRkRXQ3hwUWtGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPenRCUVVWa0xHMUNRVUZOTzBGQlExSXNaMEpCUVVzc1dVRkJXVHRCUVVObUxHbENRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhPMEZCUTJRc1owSkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRVZCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF6dEJRVU16UXl4blFrRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF6dGpRVU12UXl4RFFVRkRPMEZCUTBZc2FVSkJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXpzN096czdPMEZCVFdRc2JVSkJRVTA3UVVGRFVpeG5Ra0ZCU3l4UlFVRlJPMEZCUTFnc2FVSkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNN08wRkJSWFJDTEcxQ1FVRk5PMEZCUVVFc1ZVRkRWRHRSUVVWR096dEJRVVZFTEZOQlFVazdZMEZCUVN4alFVRkRMRXRCUVVzc1JVRkJSVHRCUVVOV0xHRkJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NTMEZCUnl4WlFVRlpMRVZCUVVVN1FVRkROVUlzWlVGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4TFFVRkxMRWxCUVVrc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF6dEJRVU5xUXl4bFFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSE8wRkJRMlFzWTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1JVRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETzBGQlF6TkRMR05CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU03V1VGRGFrUXNRMEZCUXp0QlFVTkdMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZETzBGQlEycENMR3RDUVVGTExFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVczdRVUZEYWtJc1kwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0QlFVTnNRaXhqUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRVZCUTI1Q0xFTkJRVU1zUTBGQlF6dEJRVU5JTEdWQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRWUVVObU8xRkJRMFk3TzBGQlJVUXNUMEZCUlR0alFVRkJMR05CUVVjN1FVRkRTQ3hwUWtGQlVTeEpRVUZKTEVOQlFVTXNTVUZCU1R0QlFVTm1MR2RDUVVGTExGRkJRVkU3UVVGRFdDeHBRa0ZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRE96dEJRVVZtTEcxQ1FVRk5PMEZCUTFJc1owSkJRVXNzV1VGQldUdEJRVU5tTEdsQ1FVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03UVVGRFppeHBRa0ZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSenRCUVVOa0xHZENRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhGUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTTdRVUZETTBNc1owSkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTTdZMEZEYWtRc1EwRkJRenM3T3pzN08wRkJUVVlzYlVKQlFVMDdRVUZCUVN4VlFVTlVPMUZCUTBZN08wRkJTVVFzVlVGQlN6czdPenRqUVVGQkxHbENRVUZITzBGQlEwNHNZVUZCU1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8xRkJRMkk3TzBGQlEwUXNVMEZCU1R0alFVRkJMR2RDUVVGSE8wRkJRMHdzWVVGQlNTeERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMUZCUTJJN08wRkJRMFFzV1VGQlR6dGpRVUZCTEcxQ1FVRkhPMEZCUTFJc1lVRkJTU3hEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETzFGQlExZzdPMEZCVlVjc1ZVRkJTenM3T3pzN096czdXVUZJUVN4WlFVRkhPMEZCUTFZc1owSkJRVThzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNN1VVRkRNVUk3V1VGRFVTeFZRVUZETEV0QlFVc3NSVUZCUlR0QlFVTm1MR0ZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNoQ0xHRkJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NTMEZCUnl4WlFVRlpMRVZCUVVVN1FVRkROVUlzWlVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVNN1FVRkRha0lzYTBKQlFVc3NSVUZCUlN4SlFVRkpMRU5CUVVNc1MwRkJTenRCUVVOcVFpeGpRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8wRkJRMnhDTEdOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUlVGRGJrSXNRMEZCUXl4RFFVRkRPMVZCUTBvc1RVRkJUVHRCUVVOTUxHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFZRVU5vUXp0QlFVTkVMR0ZCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFJRVU5tT3p0QlFVOUVMRk5CUVVrN096czdPenM3TzJOQlFVRXNZMEZCUXl4TFFVRkxMRVZCUVVVN1FVRkRWaXhoUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVONFFpeGhRVUZKTEVsQlFVa3NRMEZCUXl4SlFVRkpMRXRCUVVjc1dVRkJXU3hGUVVGRk8wRkJRelZDTEdWQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRE8wRkJRMnBDTEd0Q1FVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXM3UVVGRGFrSXNZMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dEJRVU5zUWl4alFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVWQlEyNUNMRU5CUVVNc1EwRkJRenRWUVVOS0xFMUJRVTA3UVVGRFRDeGxRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdWVUZEYUVNN1FVRkRSQ3hoUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdVVUZEWmpzN1FVRk5SQ3hYUVVGTk96czdPenM3TzJOQlFVRXNaMEpCUVVNc1VVRkJVU3hGUVVGRk8wRkJRMllzWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJRenRCUVVOcVFpeGhRVUZKTEZGQlFWRXNTMEZCUnl4TFFVRkxMRVZCUVVVN1FVRkRjRUlzWlVGQlNTeEpRVUZKTEVOQlFVTXNTVUZCU1N4TFFVRkhMRmxCUVZrc1JVRkJSVHRCUVVNMVFpeHBRa0ZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVU03UVVGRGFrSXNiMEpCUVVzc1JVRkJSU3hKUVVGSkxFTkJRVU1zUzBGQlN6dEJRVU5xUWl4blFrRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0QlFVTnNRaXhuUWtGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhGUVVOdVFpeERRVUZETEVOQlFVTTdXVUZEU2l4TlFVRk5PMEZCUTB3c2FVSkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFpRVU5vUXp0VlFVTkdPMEZCUTBRc1lVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzFGQlEyWTdPMEZCVFVRc1dVRkJUenM3T3pzN096dGpRVUZCTEdsQ1FVRkRMRkZCUVZFc1JVRkJSVHRCUVVOb1FpeGhRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8wRkJRMnhDTEdGQlFVa3NVVUZCVVN4TFFVRkhMRXRCUVVzc1JVRkJSVHRCUVVOd1FpeGxRVUZKTEVsQlFVa3NRMEZCUXl4SlFVRkpMRXRCUVVjc1dVRkJXU3hGUVVGRk8wRkJRelZDTEdsQ1FVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlF6dEJRVU5xUWl4dlFrRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eExRVUZMTzBGQlEycENMR2RDUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMEZCUTJ4Q0xHZENRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFVkJRMjVDTEVOQlFVTXNRMEZCUXp0WlFVTktMRTFCUVUwN1FVRkRUQ3hwUWtGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFsQlEyaERPMVZCUTBZN1FVRkRSQ3hoUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdVVUZEWmpzN096dFZRV2hPYTBJc1kwRkJZenRKUVVGVExGTkJRVk03TzJ0Q1FVRm9ReXhqUVVGakxFTTdPenM3T3p0QlExaHVReXhoUVVGWkxFTkJRVU03T3pzN096czdPenM3UVVGRllpeExRVUZKTEdOQlFXTXNSMEZCUnl4dFFrRkJUeXhEUVVGRExFVkJRVGhDTEVOQlFVTXNRMEZCUXpzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdTMEZuUTNoRExGVkJRVlU3UVVGRmJFSXNXVUZHVVN4VlFVRlZMRWRCUldZN01rSkJSa3NzVlVGQlZUczdRVUZKTTBJc1UwRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXpzN1FVRkZlRUlzVTBGQlNTeFJRVUZSTEVkQlFVYzdRVUZEWWl4aFFVRlJMRU5CUVVNc1IwRkJSeXhGUVVGRExFVkJRVVVzUTBGQlF6dEJRVU5vUWl4alFVRlRMRXRCUVVzN1FVRkRaQ3hoUVVGUkxFMUJRVTA3VFVGRFppeERRVUZET3p0QlFVVkdMR2REUVZwcFFpeFZRVUZWTERaRFFWbHlRaXhUUVVGVExFVkJRVU1zVDBGQlR5eEZRVUZETEZGQlFWRXNSVUZCUlRzN1FVRkZiRU1zVTBGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF6czdRVUZGYUVNc1UwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEZOQlFWTXNSVUZCUXpzN1FVRkRla0lzVjBGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4aFFVRmhMRWRCUVVjc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eFRRVUZUTEVOQlFVTTdRVUZEZEVRc1kwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eHRSVUZCYlVVc1EwRkJReXhEUVVGRE8wMUJRMjVHTzBGQlEwUXNVMEZCU1N4RFFVRkRMR05CUVdNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEdGQlFXRXNRMEZCUXp0QlFVTnNSQ3hUUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZKTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1lVRkJZU3hIUVVGSkxGRkJRVkVzUjBGQlJ5eFJRVUZSTEVOQlFVTTdRVUZEYUVVc1UwRkJTU3hEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzBGQlExb3NVMEZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE96dEJRVVZrTEZOQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVOQlFVTTdTVUZGYkVNN08yRkJNMEpyUWl4VlFVRlZPenRuUWtGQlZpeFZRVUZWTzBGQk5rSTNRaXhsUVVGVk8yTkJRVUVzYzBKQlFVYzdPMEZCUlZnc1lVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eFJRVUZSTEVOQlFVTXNZVUZCWVN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRemRETEdGQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXpzN1FVRkZkRU1zWVVGQlNTeERRVUZETEZkQlFWY3NSMEZCUnl4UlFVRlJMRU5CUVVNc1lVRkJZU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEycEVMR0ZCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zVTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNN1FVRkRlRU1zWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETzFGQlF6VkRPenRCUVVWRUxHMUNRVUZqTzJOQlFVRXNNRUpCUVVjc1JVRkZhRUk3TzBGQlJVUXNiVUpCUVdNN1kwRkJRU3d3UWtGQlJ6dEJRVU5tTEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJRenRCUVVNMVF5eGhRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1VVRkRaanM3UVVGRlJDeHJRa0ZCWVR0alFVRkJMSGxDUVVGSE8wRkJRMW9zWVVGQlNTeFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJReXhEUVVGRExFTkJRVU03UVVGRE4wSXNZVUZCU1N4VFFVRlRMRWRCUVVrc1NVRkJTU3hEUVVGRExFdEJRVXNzU1VGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVWNzUTBGQlF6dEJRVU40UkN4cFFrRkJVU3hIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4RlFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8wRkJRM2hETEdGQlFVa3NTVUZCU1N4RFFVRkRMR0ZCUVdFc1JVRkJSVHRCUVVOMFFpeGxRVUZKTEZOQlFWTXNSMEZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhKUVVGSkxFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJSeXhEUVVGRE8wRkJRMmhGTEcxQ1FVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVWQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNN1ZVRkRla003UVVGRFJDeGhRVUZKTEUxQlFVMHNSMEZCUnl4VFFVRlRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eExRVUZMTEVOQlFVTTdRVUZETlVNc1pVRkJUU3hKUVVGSkxGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRXRCUVVzc1EwRkJRenRCUVVNelF5eGxRVUZOTEVsQlFVa3NWMEZCVnl4SFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlF5eFJRVUZSTEVsQlFVVXNRMEZCUXl4SFFVRkRMRk5CUVZNc1EwRkJRenRCUVVONlJDeGxRVUZOTEVsQlFVa3NlVUpCUVhsQ0xFTkJRVU03UVVGRGNFTXNaVUZCVFN4SlFVRkpMSEZDUVVGeFFpeERRVUZETzBGQlEyaERMR1ZCUVUwc1NVRkJTU3gxUWtGQmRVSXNRMEZCUXp0QlFVTnNReXhsUVVGTkxFbEJRVWtzYlVKQlFXMUNMRU5CUVVNN1FVRkRPVUlzWlVGQlRTeEpRVUZKTEdGQlFXRXNRMEZCUXp0QlFVTjRRaXhsUVVGTkxFbEJRVWtzV1VGQldTeEhRVUZITEZGQlFWRXNSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkRNVU1zWVVGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhIUVVGSExFMUJRVTBzUTBGQlF6dEJRVU40UXl4aFFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03VVVGRGFrSTdPMEZCUlVRc1YwRkJUVHRqUVVGQkxHdENRVUZITzBGQlExQXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRVVU3UVVGRFppeGxRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhsUVVGbExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNN1FVRkRkRVFzWlVGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRPMEZCUTJoRUxHVkJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNVMEZCVXl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU03VlVGRGVrTXNUVUZCVFR0QlFVTk1MR1ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEdWQlFXVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF6dEJRVU40UkN4bFFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU03UVVGRGFFUXNaVUZCU1N4SlFVRkpMRU5CUVVNc1lVRkJZU3hGUVVGRk8wRkJRM1JDTEdsQ1FVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExGTkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNZMEZCWXl4RFFVRkRPMWxCUTJ4RUxFMUJRVTA3UVVGRFRDeHBRa0ZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0WlFVTjZRenRWUVVOR08xRkJRMFk3TzBGQlZVY3NhMEpCUVdFN096czdPenM3V1VGS1FTeFpRVUZITzBGQlEyeENMR2RDUVVGUExFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlFVTTdVVUZETlVJN1dVRkZaMElzVlVGQlF5eEpRVUZKTEVWQlFVVTdRVUZEZEVJc1lVRkJTU3hKUVVGSkxFVkJRVVU3UVVGRFVpeGxRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRkZCUVZFc1EwRkJRenRWUVVOMFFpeE5RVUZOTzBGQlEwd3NaVUZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhSUVVGUkxFTkJRVU03VlVGRGRFSTdRVUZEUkN4aFFVRkpMRU5CUVVNc1kwRkJZeXhIUVVGSExFbEJRVWtzUTBGQlF6dEJRVU16UWl4aFFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03VVVGRFpqczdRVUZYUnl4VFFVRkpPenM3T3pzN08xbEJTa0VzV1VGQlJ6dEJRVU5VTEdkQ1FVRlBMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU03VVVGRGJrSTdXVUZGVHl4VlFVRkRMRWxCUVVrc1JVRkJSVHRCUVVOaUxHRkJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRPMEZCUTJ4Q0xHRkJRVWtzUTBGQlF5eGhRVUZoTEVWQlFVVXNRMEZCUXp0QlFVTnlRaXhoUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdVVUZEWmpzN096dFZRWEJJYTBJc1ZVRkJWVHRKUVVGVExHTkJRV003TzJ0Q1FVRnFReXhWUVVGVkxFTTdPenM3T3p0QlEyeERMMElzWVVGQldTeERRVUZET3pzN096czdPenM3T3p0QlFVZGlMRXRCUVVrc1UwRkJVeXhIUVVGSExHMUNRVUZQTEVOQlFVTXNRMEZCYlVJc1EwRkJReXhEUVVGRE8wRkJRemRETEV0QlFVa3NUVUZCVFN4SFFVRkhMRzFDUVVGUExFTkJRVU1zUlVGQmMwSXNRMEZCUXl4RFFVRkRPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3TzB0QkswSjRRaXhYUVVGWE8wRkJSVzVDTEZsQlJsRXNWMEZCVnl4SFFVVm9RanN5UWtGR1N5eFhRVUZYT3p0QlFVazFRaXhUUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPenRCUVVWNFFpeFRRVUZKTEZGQlFWRXNSMEZCUnp0QlFVTmlMR0ZCUVZFc1EwRkJReXhIUVVGSExFVkJRVU1zUlVGQlJTeERRVUZETzBGQlEyaENMSGRDUVVGdFFpeERRVUZETzBGQlEzQkNMR1ZCUVZVc1EwRkJReXhEUVVGRE8wMUJRMklzUTBGQlF6czdRVUZGUml4blEwRmFhVUlzVjBGQlZ5dzJRMEZaZEVJc1UwRkJVeXhGUVVGRExFOUJRVThzUlVGQlF5eFJRVUZSTEVWQlFVVTdPMEZCUld4RExGTkJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NSVUZCUlN4RFFVRkRPMEZCUTJ4Q0xGTkJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEdWQlFXVXNRMEZCUXp0QlFVTjBSQ3hUUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1RVRkJUU3hEUVVGRE96dEJRVVZ1UXl4VFFVRkpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03UVVGRFdpeFRRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1NVRkZaanM3WVVGeVFtdENMRmRCUVZjN08yZENRVUZZTEZkQlFWYzdRVUYxUWpsQ0xHVkJRVlU3WTBGQlFTeHpRa0ZCUnp0QlFVTllMR0ZCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzVVVGQlVTeERRVUZETEdGQlFXRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVNM1F5eGhRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdVVUZEZGtNN08wRkJSVVFzYlVKQlFXTTdZMEZCUVN3d1FrRkJSenM3UVVGRlppeGpRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFZEJRVU1zU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTzBGQlEzaERMR1ZCUVVrc1UwRkJVeXhIUVVGSExGRkJRVkVzUTBGQlF5eGhRVUZoTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN08wRkJSUzlETEdWQlFVa3NUVUZCVFN4SFFVRkhMRWxCUVVrc1RVRkJUU3hEUVVGRExGTkJRVk1zUlVGQlJUdEJRVU12UWl4cFFrRkJTU3hGUVVGRkxGRkJRVkU3UVVGRFpDeHpRa0ZCVXl4RlFVRkZMRWxCUVVrc1JVRkRhRUlzUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXpzN1FVRkZMMElzWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRE1VSXNaVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhYUVVGWExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdWVUZEY2tNN1VVRkZSanM3UVVGRlJDeHJRa0ZCWVR0alFVRkJMSGxDUVVGSE96dEJRVVZrTEdGQlFVa3NWMEZCVnl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRE8wRkJRM0pFTEdGQlFVa3NXVUZCV1N4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU03TzBGQlJTOUNMR05CUVVzc1NVRkJTU3hEUVVGRExFZEJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSMEZCUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVWQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVN1FVRkRlRU1zWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eEZRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRPMVZCUTJ4RU8xRkJSVVk3TzBGQlJVUXNiVUpCUVdNN1kwRkJRU3d3UWtGQlJ6dEJRVU5tTEdOQlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUjBGQlF5eEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFVkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVTdRVUZEZUVNc1pVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF6dEJRVU55UXl4bFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMVZCUXpGQ08xRkJRMFk3TzBGQlJVUXNWMEZCVFR0alFVRkJMR2RDUVVGRExFdEJRVXNzUlVGQlJUdEJRVU5hTEdGQlFVa3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVTdRVUZETjBJc1pVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0VlFVTndRaXhOUVVGTk8wRkJRMHdzWlVGQlNTeERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMVZCUTJwQ096dEJRVUZCTEZGQlJVWTdPMEZCUlVRc1YwRkJUVHRqUVVGQkxHdENRVUZITzBGQlExQXNZMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eEhRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTzBGQlEzUkRMR1ZCUVVrc1EwRkJReXhMUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVTdRVUZEYmtJc2FVSkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFsQlF5OUNMRTFCUVUwN1FVRkRUQ3hwUWtGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdXVUZEYUVNN1ZVRkRSanRSUVVOR096dEJRVTFFTEZkQlFVMDdPenM3T3pzN1kwRkJRU3huUWtGQlF5eExRVUZMTEVWQlFVVTdRVUZEV2l4aFFVRkpMRXRCUVVzc1NVRkJSU3hEUVVGRExFbEJRVWtzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hGUVVGRk8wRkJRek5ETEdWQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1MwRkJTeXhEUVVGRE8wRkJRM0JDTEdWQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTm9ReXhsUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdWVUZEWmp0UlFVTkdPenRCUVV0RUxHRkJRVkU3T3pzN096dGpRVUZCTEc5Q1FVRkhPMEZCUTFRc1lVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTnFRaXhoUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRGFFTXNZVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8xRkJRMlk3TzBGQlZVY3NiMEpCUVdVN1dVRlNRU3haUVVGSE8wRkJRM0JDTEdkQ1FVRlBMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXp0UlFVTTVRanM3T3pzN08xbEJUV3RDTEZWQlFVTXNUMEZCVHl4RlFVRkZPMEZCUXpOQ0xHRkJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1IwRkJSeXhQUVVGUExFTkJRVU03UVVGRGFFTXNZMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eEhRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTzBGQlEzUkRMR1ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1ZVRkRNMEk3UVVGRFJDeGhRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRVZCUVVVc1EwRkJRenM3T3p0QlFVbHNRaXhoUVVGSkxFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdRVUZEWWl4aFFVRkpMRU5CUVVNc1kwRkJZeXhGUVVGRkxFTkJRVU03VVVGRGRrSTdPenM3VlVGNlNHdENMRmRCUVZjN1NVRkJVeXhUUVVGVE96dHJRa0ZCTjBJc1YwRkJWeXhET3pzN096czdRVU51UTJoRExHRkJRVmtzUTBGQlF6czdPenM3T3pzN096dEJRVVZpTEV0QlFVa3NVMEZCVXl4SFFVRkhMRzFDUVVGUExFTkJRVU1zUTBGQmJVSXNRMEZCUXl4RFFVRkRPMEZCUXpkRExFdEJRVWtzU1VGQlNTeEhRVUZITEcxQ1FVRlBMRU5CUVVNc1JVRkJaMElzUTBGQlF5eERRVUZETzBGQlEzSkRMRXRCUVVrc1NVRkJTU3hIUVVGSExHMUNRVUZQTEVOQlFVTXNRMEZCWXl4RFFVRkRMRU5CUVVNN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3UzBGdFEyUXNUVUZCVFR0QlFVVmtMRmxCUmxFc1RVRkJUU3hIUVVWWU96SkNRVVpMTEUxQlFVMDdPMEZCU1haQ0xGTkJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN08wRkJSWGhDTEZOQlFVa3NVVUZCVVN4SFFVRkhPMEZCUTJJc1lVRkJVU3hEUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVOQlFVTTdRVUZEWml4alFVRlRMRU5CUVVNN1FVRkRWaXhaUVVGUExFTkJRVU03UVVGRFVpeFpRVUZQTEV0QlFVczdRVUZEV2l4aFFVRlJMRU5CUVVNN1RVRkRWaXhEUVVGRE96dEJRVVZHTEdkRFFXUnBRaXhOUVVGTkxEWkRRV05xUWl4VFFVRlRMRVZCUVVNc1QwRkJUeXhGUVVGRExGRkJRVkVzUlVGQlJUczdRVUZGYkVNc1UwRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFZEJRVWNzUlVGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVjc1JVRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NSVUZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZET3pzN096czdPMEZCVDI1SExGTkJRVWtzUTBGQlF5eGhRVUZoTEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTNaQ0xGTkJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRPenRCUVVWb1FpeFRRVUZKTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZET3p0QlFVVXpRaXhUUVVGSkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRE96dEJRVVV6UWl4VFFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRPenRCUVVVM1FpeFRRVUZKTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNN1FVRkRXaXhUUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdTVUZGWmpzN1lVRnVRMnRDTEUxQlFVMDdPMmRDUVVGT0xFMUJRVTA3UVVGeFEzcENMR1ZCUVZVN1kwRkJRU3h6UWtGQlJ6dEJRVU5ZTEdGQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1VVRkJVU3hEUVVGRExHRkJRV0VzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVTXZReXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NSMEZCUnl4TlFVRk5MRU5CUVVNN08wRkJSVE5DTEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNUVUZCVFN4RlFVRkZMR0ZCUVZrN1FVRkRha1FzWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRPMEZCUTNSRUxHVkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXp0QlFVTTFReXhsUVVGSkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4TFFVRkxMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRVVU3UVVGRGNFTXNhVUpCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzVlVGQlZTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRE5VTXNhVUpCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFpRVU5vUWp0VlFVTkdMRVZCUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTTdPMEZCUjJJc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhUUVVGVExFVkJRVVVzVjBGQlZTeERRVUZETEVWQlFVVTdRVUZEY2tRc1pVRkJTU3hEUVVGRExFTkJRVU1zUzBGQlN5eEhRVUZITEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1MwRkJTeXhIUVVGSExFVkJRVVVzUlVGQlJUdEJRVU5xUXl4cFFrRkJTU3hEUVVGRExFTkJRVU1zUzBGQlN5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1MwRkJTeXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTXNTMEZCU3l4TFFVRkxMRU5CUVVNc1JVRkJSVHRCUVVONFJDeG5Ra0ZCUXl4RFFVRkRMR05CUVdNc1JVRkJSU3hEUVVGRE8yTkJRMjVDTzFsQlEwUTdRVUZEUkN4bFFVRkpMRU5CUVVNc1EwRkJReXhMUVVGTExFdEJRVWNzUlVGQlJTeEZRVUZGTzBGQlEycENMR2xDUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMEZCUTJ4Q0xHbENRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETzBGQlEyaERMR2xDUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGREwwSXNhVUpCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFpRVU5vUWp0VlFVTkdMRVZCUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTTdPMEZCUldJc1lVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJSWFpET3p0QlFVVkVMR3RDUVVGaE8yTkJRVUVzZVVKQlFVYzdPMEZCUldRc1lVRkJTU3hEUVVGRExHRkJRV0VzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPenRCUVVWMFJDeGhRVUZKTEUxQlFVMHNSMEZCUnl4VFFVRlRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eExRVUZMTEVOQlFVTTdRVUZETlVNc1pVRkJUU3hKUVVGSkxGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRXRCUVVzc1EwRkJRenRCUVVNelF5eGxRVUZOTEVsQlFVa3NORUpCUVRSQ0xFTkJRVU03UVVGRGRrTXNaVUZCVFN4SlFVRkpMR05CUVdNc1EwRkJRenRCUVVONlFpeGxRVUZOTEVsQlFVa3NjVUpCUVhGQ0xFTkJRVU03UVVGRGFFTXNaVUZCVFN4SlFVRkpMRzFDUVVGdFFpeERRVUZETzBGQlF6bENMR1ZCUVUwc1NVRkJTU3haUVVGWkxFZEJRVWNzU1VGQlNTeERRVUZETEdGQlFXRXNSMEZCUXl4RFFVRkRMRWRCUVVjc1MwRkJTeXhEUVVGRE96dEJRVVYwUkN4bFFVRk5MRWxCUVVrc1pVRkJaU3hEUVVGRE8wRkJRekZDTEdWQlFVMHNTVUZCU1N4blFrRkJaMElzUTBGQlF6dEJRVU16UWl4bFFVRk5MRWxCUVVrc1YwRkJWeXhIUVVGRExFbEJRVWtzUTBGQlF5eGhRVUZoTEVkQlFVTXNRMEZCUXl4SFFVRkRMRXRCUVVzc1IwRkJReXhKUVVGSkxFTkJRVU1zWVVGQllTeEhRVUZETEVOQlFVTXNSMEZCUXl4TFFVRkxMRU5CUVVNN1FVRkROVVVzWlVGQlRTeEpRVUZKTEhsQ1FVRjVRaXhEUVVGRE8wRkJRM0JETEdWQlFVMHNTVUZCU1N4dFFrRkJiVUlzUTBGQlF6dEJRVU01UWl4bFFVRk5MRWxCUVVrc2MwSkJRWE5DTEVOQlFVTTdRVUZEYWtNc1pVRkJUU3hKUVVGSkxIbENRVUY1UWl4RFFVRkRPMEZCUTNCRExHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1NVRkJTU3hOUVVGTkxFTkJRVU03T3pzN08wRkJTM0pETEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTTdVVUZGYWtNN08wRkJSVVFzYlVKQlFXTTdZMEZCUVN3d1FrRkJSenRCUVVOaUxHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMR1ZCUVdVc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXp0QlFVTjBSQ3hoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTTdVVUZETDBNN08wRkJSVVFzVjBGQlRUdGpRVUZCTEd0Q1FVRkhPenRCUVVWUUxHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUXl4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVGRExFTkJRVU03VVVGRmFFVTdPMEZCUlVRc1ZVRkJTenRqUVVGQkxHbENRVUZITzBGQlEwNHNZVUZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRGRFSXNZVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETzBGQlF6bENMR0ZCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0QlFVTjRRaXhoUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVWQlFVVXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTTdRVUZEYmtNc1lVRkJTU3hEUVVGRExGbEJRVmtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVVc1EwRkJRenRCUVVNM1JDeG5Ra0ZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdVVUZEYUVNN08wRkJSVVFzVTBGQlNUdGpRVUZCTEdkQ1FVRkhPMEZCUTB3c1lVRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTTdRVUZEY2tJc1lVRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGT3p0QlFVVm9RaXhsUVVGSkxGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFdEJRVTBzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUlN4SlFVRkpMRU5CUVVNc1IwRkJSeXhIUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJSU3hIUVVGSExFZEJRVWNzUTBGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTnFTaXhsUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEZGQlFWRXNRMEZCUXpzN1FVRkZlRUlzWlVGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMEZCUTFvc1pVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNSVUZCUlR0QlFVTjJRaXhwUWtGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFsQlEyaERPMVZCUlVnN1VVRkRSRHM3UVVGRlJDeFpRVUZQTzJOQlFVRXNiVUpCUVVjN1FVRkRVaXhoUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUlR0QlFVTnNRaXhsUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZGQlFWRXNSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkRhRU1zWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJRenRCUVVOeVFpeGxRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMR2xDUVVGcFFpeERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTTNSQ3hsUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4bFFVRmxMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTTdRVUZEZUVRc1pVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETzFWQlF6VkRMRTFCUVUwN1FVRkRUQ3h0UWtGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJRenRWUVVOMlFqdFJRVU5HT3p0QlFVOUVMRk5CUVVrN096czdPenM3TzJOQlFVRXNZMEZCUXl4WFFVRlhMRVZCUVVVN096dEJRVU5vUWl4aFFVRkpMRU5CUVVNc1IwRkJSeXhIUVVGSExGZEJRVmNzUTBGQlF5eEhRVUZITEVOQlFVTTdRVUZETTBJc1lVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eFhRVUZYTEVOQlFVTXNSMEZCUnl4RFFVRkRPMEZCUXpOQ0xHRkJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJRenRCUVVNM1FpeHZRa0ZCVnl4RFFVRkRMRVZCUVVVc1EwRkJReXhSUVVGUkxFVkJRVU1zVlVGQlF5eERRVUZETEVWQlFVczdRVUZETjBJc2FVSkJRVXNzWVVGQllTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMVZCUTNaQ0xFTkJRVU1zUTBGQlF6dEJRVU5JTEdGQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1VVRkJVU3hGUVVGRExGVkJRVU1zUTBGQlF5eEZRVUZMTzBGQlEzUkNMSE5DUVVGWExFTkJRVU1zUzBGQlN5eEhRVUZITEVOQlFVTXNRMEZCUXp0VlFVTjJRaXhEUVVGRExFTkJRVU03UVVGRFNDeGhRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRmRCUVZjc1EwRkJReXhMUVVGTExFTkJRVU03T3pzN096czdPenRSUVZOb1F6czdRVUZGUkN4clFrRkJZVHRqUVVGQkxIVkNRVUZETEVOQlFVTXNSVUZCUlR0QlFVTm1MR0ZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTNSQ0xHRkJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0UlFVTm1PenRCUVZWSExGVkJRVXM3T3pzN096czdPMWxCU0VFc1dVRkJSenRCUVVOV0xHZENRVUZQTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRE8xRkJRekZDTzFsQlExRXNWVUZCUXl4RFFVRkRMRVZCUVVVN1FVRkRXQ3hoUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOMFFpeGhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZETDBJc1lVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzFGQlEyWTdPMEZCVlVjc1VVRkJSenM3T3pzN096czdXVUZJUVN4WlFVRkhPMEZCUTFJc1owSkJRVThzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNN1VVRkRlRUk3V1VGRFRTeFZRVUZETEVOQlFVTXNSVUZCUlR0QlFVTlVMR0ZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTnlRanM3UVVGVlJ5eFJRVUZIT3pzN096czdPenRaUVVoQkxGbEJRVWM3UVVGRFVpeG5Ra0ZCVHl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF6dFJRVU40UWp0WlFVTk5MRlZCUVVNc1EwRkJReXhGUVVGRk8wRkJRMVFzWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRM0pDT3p0QlFWVkhMRk5CUVVrN096czdPenM3TzFsQlNFRXNXVUZCUnp0QlFVTlVMR2RDUVVGUExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRPMUZCUTNwQ08xbEJRMDhzVlVGQlF5eERRVUZETEVWQlFVVTdRVUZEVml4aFFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEZEVJN096czdWVUV2VG10Q0xFMUJRVTA3U1VGQlV5eFRRVUZUT3p0clFrRkJlRUlzVFVGQlRTeERPenM3T3pzN1FVTjJRek5DTEdGQlFWa3NRMEZCUXpzN096czdPenM3T3p0QlFVVmlMRXRCUVVrc1UwRkJVeXhIUVVGSExHMUNRVUZQTEVOQlFVTXNRMEZCYlVJc1EwRkJReXhEUVVGRE96czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPMHRCWjBONFFpeE5RVUZOTzBGQlJXUXNXVUZHVVN4TlFVRk5MRWRCUlZnN01rSkJSa3NzVFVGQlRUczdRVUZKZGtJc1UwRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXpzN1FVRkZlRUlzVTBGQlNTeFJRVUZSTEVkQlFVYzdRVUZEV2l4aFFVRlJMRU5CUVVNc1IwRkJSeXhGUVVGRExFVkJRVVVzUTBGQlF6dEJRVU5vUWl4blFrRkJWeXhEUVVGRExGTkJRVk1zUlVGQlF5eFRRVUZUTEVOQlFVTTdUVUZEYkVNc1EwRkJRenM3UVVGRlJpeG5RMEZZYVVJc1RVRkJUU3cyUTBGWGFrSXNVMEZCVXl4RlFVRkRMRTlCUVU4c1JVRkJReXhSUVVGUkxFVkJRVVU3TzBGQlJXeERMRk5CUVVrc1EwRkJReXhqUVVGakxFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEZWtJc1UwRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eExRVUZMTEVOQlFVTTdPMEZCUlhCQ0xGTkJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhQUVVGUExFTkJRVU03TzBGQlJYUkRMRk5CUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dEJRVU5hTEZOQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRKUVVWbU96dGhRWEpDYTBJc1RVRkJUVHM3WjBKQlFVNHNUVUZCVFR0QlFYVkNla0lzWlVGQlZUdGpRVUZCTEhOQ1FVRkhPMEZCUTFnc1lVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eFJRVUZSTEVOQlFVTXNZVUZCWVN4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8wRkJRMmhFTEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkRMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU03UVVGRGFrUXNZVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eEhRVUZITEUxQlFVMHNRMEZCUXp0QlFVTndReXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4VFFVRlRMRWRCUVVjc1RVRkJUU3hEUVVGRE8wRkJRM1JETEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkRMRWxCUVVrc1EwRkJRenRCUVVNelF5eGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUXl4SlFVRkpMRU5CUVVNN08wRkJSVGRETEdGQlFVa3NRMEZCUXl4WFFVRlhMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN08wRkJSVEZETEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNVVUZCVVN4RlFVRkZMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF6czdRVUZGTVVRc1lVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJSWFpET3p0QlFVVkVMRzlDUVVGbE8yTkJRVUVzTWtKQlFVY3NSVUZGYWtJN08wRkJSVVFzYlVKQlFXTTdZMEZCUVN3d1FrRkJSenM3UVVGRlppeGhRVUZKTEVOQlFVTXNZVUZCWVN4RlFVRkZMRU5CUVVNN1VVRkZkRUk3TzBGQlJVUXNiVUpCUVdNN1kwRkJRU3d3UWtGQlJ6dEJRVU5tTEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExHVkJRV1VzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJRenRCUVVOMFJDeGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNN1FVRkROVU1zWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hIUVVGSExGbEJRVmtzUjBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjc1EwRkJRenRSUVVOc1JUczdRVUZGUkN4WFFVRk5PMk5CUVVFc2EwSkJRVWM3TzBGQlJWQXNZVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExHRkJRV0VzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0QlFVTndSU3hoUVVGSkxFTkJRVU1zWTBGQll5eEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1lVRkJZU3hEUVVGRE8wRkJRMnBFTEdGQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRE8wRkJRMnBDTEdkQ1FVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTA3UVVGRGJFSXNaMEpCUVVzc1JVRkJSU3hKUVVGSkxFTkJRVU1zWTBGQll6dFZRVU16UWl4RFFVRkRMRU5CUVVNN1VVRkZTanM3UVVGRlJDeFZRVUZMTzJOQlFVRXNhVUpCUVVjc1JVRkZVRHM3UVVGRlJDeFRRVUZKTzJOQlFVRXNaMEpCUVVjc1JVRkZUanM3UVVGRlJDeFpRVUZQTzJOQlFVRXNiVUpCUVVjc1JVRkZWRHM3UVVGUFJDeHJRa0ZCWVRzN096czdPenRqUVVGQkxIVkNRVUZETEU5QlFVOHNSVUZCUlRzN096czdPenM3T3pzN096dEJRV055UWl4aFFVRkpMRTlCUVU4c1JVRkJSVHRCUVVOWUxHVkJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NUMEZCVHl4RFFVRkRPMVZCUTNwQ096dEJRVVZFTEdOQlFVa3NTVUZCU1N4RFFVRkRMRWRCUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4SFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMEZCUTNCRUxHVkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xVkJRM2hDT3p0QlFVVkVMR05CUVVrc1NVRkJTU3hEUVVGRExFZEJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFMUJRVTBzUlVGQlF5eERRVUZETEVWQlFVVXNSVUZCUlR0QlFVTjBReXhsUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFWQlF6TkVPMUZCUlVZN08wRkJWMGNzVlVGQlN6czdPenM3T3pzN1dVRklRU3haUVVGSE8wRkJRMVlzWjBKQlFVOHNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJRenRSUVVOd1FqdFpRVU5STEZWQlFVTXNRMEZCUXl4RlFVRkZPMEZCUTFnc1lVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZEYUVJc1kwRkJTU3hKUVVGSkxFTkJRVU1zUjBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSVHRCUVVNM1F5eGxRVUZKTEVOQlFVTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVN1FVRkRkRU1zYVVKQlFVa3NRMEZCUXl4aFFVRmhMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRM1pDTEcxQ1FVRk5PMWxCUTFBN1ZVRkRSanRSUVVOR096dEJRVmRITEd0Q1FVRmhPenM3T3pzN096dFpRVWhCTEZsQlFVYzdRVUZEYkVJc1owSkJRVThzU1VGQlNTeERRVUZETEdOQlFXTXNRMEZCUXp0UlFVTTFRanRaUVVOblFpeFZRVUZETEVOQlFVTXNSVUZCUlR0QlFVTnVRaXhoUVVGSkxFTkJRVU1zWTBGQll5eEhRVUZITEVOQlFVTXNRMEZCUXp0QlFVTjRRaXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEdGQlFXRXNSMEZCUnl4RFFVRkRMRU5CUVVNN1FVRkRMMElzWVVGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMUZCUTJZN08wRkJSVVFzYTBKQlFXRTdZMEZCUVN4NVFrRkJSenRCUVVOa0xHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zVVVGQlVTeEZRVUZGTEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJRenRSUVVNNVJEczdPenRWUVc1S2EwSXNUVUZCVFR0SlFVRlRMRk5CUVZNN08ydENRVUY0UWl4TlFVRk5MRU03T3pzN096dEJRMnhETTBJc1lVRkJXU3hEUVVGRE96czdPenM3T3pzN096czdRVUZGWWl4TFFVRkpMRWRCUVVjc1IwRkJSeXh0UWtGQlR5eERRVUZETEVOQlFXRXNRMEZCUXl4RFFVRkRPMEZCUTJwRExFdEJRVWtzU1VGQlNTeEhRVUZITEcxQ1FVRlBMRU5CUVVNc1EwRkJZeXhEUVVGRExFTkJRVU03UVVGRGJrTXNTMEZCU1N4VFFVRlRMRWRCUVVjc2JVSkJRVThzUTBGQlF5eERRVUZ0UWl4RFFVRkRMRU5CUVVNN1FVRkROME1zUzBGQlNTeEpRVUZKTEVkQlFVY3NiVUpCUVU4c1EwRkJReXhGUVVGblFpeERRVUZETEVOQlFVTTdPMHRCUTNwQ0xGZEJRVmNzSzBOQlFVMHNSVUZCY1VJN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdTMEYzUXpkQ0xFbEJRVWs3UVVGRldpeFpRVVpSTEVsQlFVa3NSMEZGVkRzeVFrRkdTeXhKUVVGSk96dEJRVWx5UWl4VFFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExFdEJRVXNzUlVGQlF5eExRVUZMTEVWQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN08wRkJSWEJETEZOQlFVa3NVVUZCVVN4SFFVRkhPMEZCUTJJc1lVRkJVU3hEUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVOQlFVTTdRVUZEWml4dlFrRkJaU3hSUVVGUk8wRkJRM1pDTEdGQlFWRXNWVUZCVlR0QlFVTnNRaXhaUVVGUExFTkJRVU03UVVGRFVpeFpRVUZQTEVOQlFVTTdRVUZEVWl4aFFVRlJMRU5CUVVNN1FVRkRWQ3hqUVVGVExFTkJRVU03VFVGRFdDeERRVUZET3p0QlFVVkdMR2REUVdoQ2FVSXNTVUZCU1N3MlEwRm5RbVlzVTBGQlV5eEZRVUZETEU5QlFVOHNSVUZCUXl4UlFVRlJMRVZCUVVVN08wRkJSV3hETEZOQlFVa3NRMEZCUXl4WFFVRlhMRWRCUVVjc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eFhRVUZYTEVOQlFVTTdPMEZCUlRkRExGTkJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NTVUZCU1N4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eEhRVUZITEVWQlFVVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGSExFVkJRVVVzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXpzN1FVRkZkRWNzVTBGQlNTeERRVUZETEZGQlFWRXNSMEZCUnl4SlFVRkpMRmRCUVZjc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRVZCUVVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03TzBGQlJUTkhMRk5CUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6czdRVUZGV2l4VFFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRPenRCUVVVdlFpeFRRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZWQlFWVXNRMEZCUXpzN1FVRkZOME1zVTBGQlNTeERRVUZETEdGQlFXRXNSMEZCUnl4TFFVRkxMRU5CUVVNN08wRkJSVE5DTEZOQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0SlFVVm9RenM3WVVGc1EydENMRWxCUVVrN08yZENRVUZLTEVsQlFVazdRVUZ2UTNaQ0xHMUNRVUZqTzJOQlFVRXNNRUpCUVVjN08wRkJSV1lzWVVGQlNTeERRVUZETEZWQlFWVXNSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzBGQlEzWkRMR0ZCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRCUVVOc1F5eGhRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZEYWtNc1lVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRMnhETEdGQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTnlReXhoUVVGSkxFTkJRVU1zVjBGQlZ5eEhRVUZITEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRGRFTXNZVUZCU1N4RFFVRkRMRlZCUVZVc1IwRkJSeXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPenRCUVVWeVF5eGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTTdRVUZETVVNc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRM1JETEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVTjJReXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU03UVVGRE1VTXNZVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRPMEZCUXpORExHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dEJRVU14UXl4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkZkRU03TzBGQlIwUXNhMEpCUVdFN1kwRkJRU3g1UWtGQlJ6czdRVUZGWkN4aFFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03TzBGQlJYSkVMR0ZCUVVrc1RVRkJUU3hIUVVGSE8wRkJRMWdzV1VGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVNc1EwRkJRenRCUVVObUxGbEJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkRMRU5CUVVNN1ZVRkRha0lzUTBGQlF6czdRVUZGUml4aFFVRkpMRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRVZCUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZET3p0QlFVVm9SQ3hoUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlF6ZERMR0ZCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zV1VGQldTeERRVUZETEVsQlFVa3NSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRE4wTXNZVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEZGQlFWRXNSMEZCUXl4RFFVRkRMRWRCUVVNc1VVRkJVU3hIUVVGRExFVkJRVVVzUTBGQlF5eERRVUZET3p0QlFVVXhSQ3hoUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEzaERMR0ZCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zV1VGQldTeERRVUZETEVsQlFVa3NSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGVFTXNZVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEZGQlFWRXNSMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenM3UVVGRk1VTXNZVUZCU1N4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF6czdRVUZGZGtJc1lVRkJTU3haUVVGWkxFZEJRVWM3UVVGRGFrSXNaMEpCUVVzc1JVRkJSU3hKUVVGSkxFTkJRVU1zUlVGQlJTeEhRVUZETEVkQlFVYzdRVUZEYkVJc1kwRkJSeXhGUVVGRkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFVkJRVU1zUTBGQlF5eEZRVUZETEVkQlFVY3NSVUZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hIUVVGRExFZEJRVWNzUlVGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4SFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGSExFbEJRVWtzUTBGQlF5eEZRVUZGTEVkQlFVTXNSMEZCUnl4RlFVRkZMRWxCUVVrc1EwRkJReXhGUVVGRkxFZEJRVU1zUjBGQlJ5eERRVUZGTzFWQlF6ZEdMRU5CUVVNN1FVRkRSaXhoUVVGSkxHRkJRV0VzUjBGQlJ6dEJRVU5zUWl4blFrRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eEZRVUZGTEVkQlFVTXNSMEZCUnp0QlFVTnNRaXhqUVVGSExFVkJRVVVzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUlN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUlVGQlF5eEhRVUZITEVWQlFVTXNRMEZCUXl4RlFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFZEJRVU1zUjBGQlJ5eEZRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRWRCUVVNc1IwRkJSeXhEUVVGRExFVkJRVWNzU1VGQlNTeERRVUZETEVWQlFVVXNSMEZCUXl4SFFVRkhMRVZCUVVVc1NVRkJTU3hEUVVGRExFVkJRVVVzUjBGQlF5eEhRVUZITEVOQlFVVTdWVUZETjBZc1EwRkJRenM3UVVGRlJpeGhRVUZKTEZWQlFWVXNSMEZCUnl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNc1JVRkJSU3hSUVVGUkxFZEJRVU1zUTBGQlF5eEhRVUZETEZGQlFWRXNSMEZCUXl4RlFVRkZMRVZCUVVVc1dVRkJXU3hEUVVGRExFdEJRVXNzUlVGQlJTeFpRVUZaTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1FVRkRNMGNzWVVGQlNTeFhRVUZYTEVkQlFVY3NSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRMRVZCUVVVc1VVRkJVU3hIUVVGRExFTkJRVU1zUjBGQlF5eFJRVUZSTEVkQlFVTXNSVUZCUlN4RlFVRkZMR0ZCUVdFc1EwRkJReXhMUVVGTExFVkJRVVVzWVVGQllTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPenRCUVVVNVJ5eGhRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGSExFVkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTTdRVUZEZWtNc1lVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFpRVUZaTEVOQlFVTXNZMEZCWXl4RlFVRkZMRkZCUVZFc1IwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dEJRVU4wUkN4aFFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGbEJRVmtzUTBGQlF5eE5RVUZOTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNN08wRkJSWHBETEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hEUVVGRExFZEJRVWNzUlVGQlF5eFhRVUZYTEVOQlFVTXNRMEZCUXp0QlFVTXpReXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZsQlFWa3NRMEZCUXl4alFVRmpMRVZCUVVVc1VVRkJVU3hIUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzBGQlEzWkVMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJRenM3UVVGRk1VTXNiVUpCUVZVc1NVRkJTU3hMUVVGTExFZEJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNSMEZCUXl4SFFVRkhMRWRCUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF6czdRVUZGTVVNc1lVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RlFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRE8wRkJRemRETEdGQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1dVRkJXU3hEUVVGRExHTkJRV01zUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXpzN1FVRkZjRVFzYjBKQlFWY3NTVUZCU1N4TFFVRkxMRWRCUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlF5eEhRVUZITEVkQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJRenM3UVVGRk0wTXNZVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eEZRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRPMEZCUXk5RExHRkJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNXVUZCV1N4RFFVRkRMR05CUVdNc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6czdRVUZGY2tRc1lVRkJTU3hWUVVGVkxHRkJRVU03UVVGRFppeGhRVUZKTEV0QlFVc3NSMEZCUnl4SFFVRkhMRVZCUVVVN1FVRkRaaXh4UWtGQlZTeEhRVUZITEZsQlFWa3NRMEZCUXl4SFFVRkhMRU5CUVVNN1ZVRkRMMElzVFVGQlRUdEJRVU5NTEhGQ1FVRlZMRWRCUVVjc1lVRkJZU3hEUVVGRExFZEJRVWNzUTBGQlF6dFZRVU5vUXpzN1FVRkZSQ3hoUVVGSkxGVkJRVlVzUjBGQlJ5eE5RVUZOTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVlVGQlZTeERRVUZETEVsQlFVa3NVVUZCVVN4SFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRMmhGTEdGQlFVa3NWVUZCVlN4SFFVRkhMRTFCUVUwc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4VlFVRlZMRU5CUVVNc1NVRkJTU3hSUVVGUkxFZEJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN08wRkJSWEpGTEdGQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1dVRkJXU3hEUVVGRExFZEJRVWNzUlVGQlF5eEpRVUZKTEVkQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1IwRkJReXhIUVVGSExFZEJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNSMEZCUXl4TFFVRkxMRWRCUVVNc1ZVRkJWU3hIUVVGRExFZEJRVWNzUjBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXp0QlFVTTNSaXhoUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEZsQlFWa3NRMEZCUXl4alFVRmpMRVZCUVVVc1VVRkJVU3hIUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFGQlJUTkVPenRCUVVWRUxHMUNRVUZqTzJOQlFVRXNNRUpCUVVjN1FVRkRaaXhoUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEZsQlFWa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0QlFVTjJSQ3hoUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZsQlFWa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTndSQ3hoUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZsQlFWa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTjJSQ3hoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZsQlFWa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTjRSQ3hoUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEZsQlFWa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTjZSQ3hoUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEZsQlFWa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTXhSQ3hoUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEZsQlFWa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVVTFSRHM3UVVGRlJDeFhRVUZOTzJOQlFVRXNhMEpCUVVjN1FVRkRVQ3hoUVVGSkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRlZCUVZVc1EwRkJRenM3UVVGRmJrTXNZVUZCU1N4TlFVRk5MRWRCUVVjN1FVRkRXQ3haUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUXl4RFFVRkRPMEZCUTJZc1dVRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVTXNRMEZCUXp0VlFVTnFRaXhEUVVGRE96dEJRVVZHTEdGQlFVa3NVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03TzBGQlJXaEVMR0ZCUVVrc1dVRkJXU3hIUVVGSE8wRkJRMnBDTEdkQ1FVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExFVkJRVVVzUjBGQlF5eEhRVUZITzBGQlEyeENMR05CUVVjc1JVRkJSU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZGTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhGUVVGRExFTkJRVU1zUlVGQlF5eEhRVUZITEVWQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1IwRkJReXhIUVVGSExFVkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNSMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSeXhKUVVGSkxFTkJRVU1zUlVGQlJTeEhRVUZETEVkQlFVY3NSVUZCUlN4SlFVRkpMRU5CUVVNc1JVRkJSU3hIUVVGRExFZEJRVWNzUTBGQlJUdFZRVU0zUml4RFFVRkRPMEZCUTBZc1lVRkJTU3hoUVVGaExFZEJRVWM3UVVGRGJFSXNaMEpCUVVzc1JVRkJSU3hKUVVGSkxFTkJRVU1zUlVGQlJTeEhRVUZGTEVkQlFVYzdRVUZEYmtJc1kwRkJSeXhGUVVGRkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFVkJRVU1zUjBGQlJ5eEZRVUZETEVOQlFVTXNSVUZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hIUVVGRExFZEJRVWNzUlVGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4SFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGSExFbEJRVWtzUTBGQlF5eEZRVUZGTEVkQlFVTXNSMEZCUnl4RlFVRkZMRWxCUVVrc1EwRkJReXhGUVVGRkxFZEJRVU1zUjBGQlJ5eERRVUZGTzFWQlF6ZEdMRU5CUVVNN08wRkJSVVlzWVVGQlNTeFZRVUZWTEVkQlFVY3NSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRMRVZCUVVVc1VVRkJVU3hIUVVGRExFTkJRVU1zUjBGQlF5eFJRVUZSTEVkQlFVTXNSVUZCUlN4RlFVRkZMRmxCUVZrc1EwRkJReXhMUVVGTExFVkJRVVVzV1VGQldTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUXpOSExHRkJRVWtzVjBGQlZ5eEhRVUZITEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXl4RlFVRkZMRkZCUVZFc1IwRkJReXhEUVVGRExFZEJRVU1zVVVGQlVTeEhRVUZETEVWQlFVVXNSVUZCUlN4aFFVRmhMRU5CUVVNc1MwRkJTeXhGUVVGRkxHRkJRV0VzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXpzN1FVRkZPVWNzWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4WlFVRlpMRU5CUVVNc1IwRkJSeXhGUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzBGQlEzcERMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NSVUZCUXl4WFFVRlhMRU5CUVVNc1EwRkJRenM3UVVGSE0wTXNiVUpCUVZVc1NVRkJTU3hMUVVGTExFZEJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNSMEZCUXl4SFFVRkhMRWRCUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF6czdRVUZGTVVNc1lVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RlFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRE96dEJRVVUzUXl4dlFrRkJWeXhKUVVGSkxFdEJRVXNzUjBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4SFFVRkRMRWRCUVVjc1IwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZET3p0QlFVVXpReXhoUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRVZCUVVNc1YwRkJWeXhEUVVGRExFTkJRVU03TzBGQlJTOURMR0ZCUVVrc1ZVRkJWU3hoUVVGRE8wRkJRMllzWVVGQlNTeExRVUZMTEVsQlFVa3NSMEZCUnl4RlFVRkZPMEZCUTJoQ0xIRkNRVUZWTEVkQlFVY3NXVUZCV1N4RFFVRkRMRWRCUVVjc1EwRkJRenRWUVVNdlFpeE5RVUZOTzBGQlEwd3NjVUpCUVZVc1IwRkJSeXhoUVVGaExFTkJRVU1zUjBGQlJ5eERRVUZETzFWQlEyaERPenRCUVVWRUxHRkJRVWtzVlVGQlZTeEhRVUZITEUxQlFVMHNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFZRVUZWTEVOQlFVTXNTVUZCU1N4UlFVRlJMRWRCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGFFVXNZVUZCU1N4VlFVRlZMRWRCUVVjc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRlZCUVZVc1EwRkJReXhKUVVGSkxGRkJRVkVzUjBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenM3UVVGRmNrVXNZVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eEZRVUZETEVsQlFVa3NSMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhIUVVGRExFZEJRVWNzUjBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4SFFVRkRMRXRCUVVzc1IwRkJReXhWUVVGVkxFZEJRVU1zUjBGQlJ5eEhRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRPMUZCUlRsR096dEJRVWRFTEZWQlFVczdZMEZCUVN4cFFrRkJSenRCUVVOT0xHRkJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NTMEZCUnl4VlFVRlZMRVZCUVVVN1FVRkRNVUlzWlVGQlNTeERRVUZETEdGQlFXRXNSMEZCUnl4TFFVRkxMRU5CUVVNN1ZVRkROVUk3UVVGRFJDeGhRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETzBGQlEyeERMR0ZCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRE8wRkJRemRETEdGQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenRSUVVOYU96dEJRVVZHTEZOQlFVazdZMEZCUVN4blFrRkJSenRCUVVOTUxHRkJRVWtzU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlRzN1FVRkZhRUlzWlVGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZET3p0QlFVVnFReXhsUVVGSkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1IwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeEhRVUZETEVOQlFVTXNRMEZCUXpzN1FVRkZNVU1zWlVGQlNTeExRVUZMTEVkQlFVY3NRMEZCUXl4RlFVRkhPMEZCUVVVc2EwSkJRVXNzU1VGQlN5eEpRVUZKTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVVc1EwRkJRenRaUVVGRk96dEJRVVY2UXl4bFFVRkpMRWxCUVVrc1EwRkJReXhKUVVGSkxFdEJRVXNzVlVGQlZTeEZRVUZGTzBGQlF6VkNMR2xDUVVGSkxFbEJRVWtzUTBGQlF5eGhRVUZoTEV0QlFVc3NTMEZCU3l4SlFVRkpMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEdGQlFXRXNSMEZCUnl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVU3UVVGRE5VVXNiVUpCUVVrc1NVRkJTU3hEUVVGRExHRkJRV0VzUjBGQlJ5eERRVUZETEVWQlFVVTdRVUZETVVJc2MwSkJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRGJrSXNUVUZCVFR0QlFVTk1MSE5DUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETzJkQ1FVTllPMk5CUTBZN1dVRkRSanM3T3pzN096czdPMEZCVTBRc1pVRkJTU3hEUVVGRExHRkJRV0VzUjBGQlJ5eExRVUZMTEVOQlFVTTdPMEZCUlROQ0xHVkJRVWtzVTBGQlV5eEhRVUZITEV0QlFVc3NTVUZCU1N4SlFVRkpMRU5CUVVNc1JVRkJSU3hIUVVGRExFTkJRVU1zUTBGQlF5eERRVUZET3p0QlFVVndReXhsUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1dVRkJXU3hEUVVGRkxGTkJRVk1zUTBGQlJTeERRVUZET3p0QlFVVnVSQ3hsUVVGSkxFbEJRVWtzUTBGQlF5eEpRVUZKTEV0QlFVc3NWVUZCVlN4RlFVRkZPMEZCUXpWQ0xHbENRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1IwRkJSeXhUUVVGVExFTkJRVU03V1VGRGFrTTdPMEZCUlVRc1pVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6czdRVUZGZEVNc1pVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzFWQlJXWTdVVUZEUmpzN1FVRkZSQ3haUVVGUE8yTkJRVUVzYlVKQlFVY3NSVUZEVkRzN1FVRXdRa3NzVlVGQlN6czdPenM3T3pzN096czdPenM3T3pzN096czdPenRaUVVoQkxGbEJRVWM3UVVGRFZpeG5Ra0ZCVHl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF6dFJRVU14UWp0WlFVTlJMRlZCUVVNc1EwRkJReXhGUVVGRk8wRkJRMWdzWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGRFSXNZVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNN1FVRkROME1zWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTjBReXhoUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdVVUZEWmpzN1FVRlZSeXhSUVVGSE96czdPenM3T3p0WlFVaEJMRmxCUVVjN1FVRkRVaXhuUWtGQlR5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJRenRSUVVONFFqdFpRVU5OTEZWQlFVTXNRMEZCUXl4RlFVRkZPMEZCUTFRc1lVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNKQ096dEJRVlZITEZGQlFVYzdPenM3T3pzN08xbEJTRUVzV1VGQlJ6dEJRVU5TTEdkQ1FVRlBMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETzFGQlEzaENPMWxCUTAwc1ZVRkJReXhEUVVGRExFVkJRVVU3UVVGRFZDeGhRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGNrSTdPMEZCVlVjc1UwRkJTVHM3T3pzN096czdXVUZJUVN4WlFVRkhPMEZCUTFRc1owSkJRVThzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNN1VVRkRla0k3V1VGRFR5eFZRVUZETEVOQlFVTXNSVUZCUlR0QlFVTldMR0ZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTjBRanM3UVVGVlJ5eFRRVUZKT3pzN096czdPenRaUVVoQkxGbEJRVWM3UVVGRFZDeG5Ra0ZCVHl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF6dFJRVU16UWp0WlFVTlBMRlZCUVVNc1EwRkJReXhGUVVGRk8wRkJRMVlzWVVGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRM2hDT3p0QlFWbERMR1ZCUVZVN096czdPenM3TzFsQlNrRXNXVUZCUnp0QlFVTm1MR2RDUVVGUExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNWVUZCVlN4RFFVRkRPMUZCUXk5Q08xbEJSV0VzVlVGQlF5eERRVUZETEVWQlFVVTdRVUZEYUVJc1lVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkROVUlzWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFGQlEyaERPenM3TzFWQk1WVnJRaXhKUVVGSk8wbEJRVk1zVTBGQlV6czdhMEpCUVhSQ0xFbEJRVWtzUXpzN096czdPMEZET1VONlFpeGhRVUZaTEVOQlFVTTdPenM3T3pzN096czdRVUZGWWl4TFFVRkpMRWRCUVVjc1IwRkJSeXh0UWtGQlR5eERRVUZETEVOQlFXRXNRMEZCUXl4RFFVRkRPMEZCUTJwRExFdEJRVWtzVTBGQlV5eEhRVUZITEcxQ1FVRlBMRU5CUVVNc1EwRkJiVUlzUTBGQlF5eERRVUZETzBGQlF6ZERMRXRCUVVrc1kwRkJZeXhIUVVGSExHMUNRVUZQTEVOQlFVTXNSVUZCT0VJc1EwRkJReXhEUVVGRE8wRkJRemRFTEV0QlFVa3NTMEZCU3l4SFFVRkhMRzFDUVVGUExFTkJRVU1zUTBGQlpTeERRVUZETEVOQlFVTTdPMHRCUlM5Q0xGRkJRVkU3UVVGRlJDeFpRVVpRTEZGQlFWRXNSMEZGUlRzeVFrRkdWaXhSUVVGUk96dEJRVWxXTEZOQlFVa3NUMEZCVHl4SFFVRkhMRU5CUVVNc1QwRkJUeXhGUVVGRExFMUJRVTBzUlVGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXpzN1FVRkZka01zVTBGQlNTeFJRVUZSTEVkQlFVYzdRVUZEWWl4aFFVRlJMRU5CUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUTBGQlF6dEJRVU5tTEdWQlFWVXNTMEZCU3p0QlFVTm1MR0ZCUVZFc1VVRkJVVHRCUVVOb1FpeGpRVUZUTEVOQlFVTTdUVUZEV0N4RFFVRkRPenRCUVVWR0xHZERRV0pGTEZGQlFWRXNOa05CWVVvc1UwRkJVeXhGUVVGRExFOUJRVThzUlVGQlF5eFJRVUZSTEVWQlFVVTdPMEZCUld4RExGTkJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU03UVVGREwwSXNVMEZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXpzN1FVRkZha01zVTBGQlNTeERRVUZETEUxQlFVMHNSMEZCUnp0QlFVTmFMRlZCUVVzc1RVRkJUVHRCUVVOWUxGVkJRVXNzVFVGQlRTeEZRVU5hTEVOQlFVTTdPMEZCUlVZc1UwRkJTU3hEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzBGQlExb3NVMEZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8wbEJSV1k3TzJGQk1VSkhMRkZCUVZFN08yZENRVUZTTEZGQlFWRTdRVUUwUWxvc1pVRkJWVHRqUVVGQkxITkNRVUZITzBGQlExZ3NZVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTJwRExHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RFFVRkRMRTlCUVU4c1JVRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZET1VNc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNVVUZCVVN4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU5vUkN4aFFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1VVRkRka003TzBGQlJVUXNiVUpCUVdNN1kwRkJRU3d3UWtGQlJ6czdPMEZCUldZc1lVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE96dEJRVVU1UWl4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN08wRkJSVzVETEdGQlFVa3NRMEZCUXl4cFFrRkJhVUlzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRPenM3TzBGQlNXeERMR0ZCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeEZRVUZGT3p0QlFVVnFRaXhsUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEZsQlFVMDdPMEZCUldwQ0xHMUNRVUZMTEV0QlFVc3NRMEZCUXl4WFFVRlhMRWRCUVVjc1NVRkJTU3hEUVVGRE8wRkJRemxDTEcxQ1FVRkxMRXRCUVVzc1EwRkJReXhWUVVGVkxFZEJRVWNzUTBGQlF5eE5RVUZMTEV0QlFVc3NRMEZCUXp0QlFVTndReXh0UWtGQlN5eEpRVUZKTEVOQlFVTXNUVUZCU3l4TFFVRkxMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU03V1VGRGJFTXNRMEZCUXpzN1FVRkZSaXhsUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEdkQ1FVRm5RaXhEUVVGRExGZEJRVmNzUlVGQlJTeFpRVUZOTzBGQlF6TkRMR2xDUVVGSkxFMUJRVXNzUzBGQlN5eERRVUZETEZkQlFWY3NSVUZCUlRzN1FVRkZNVUlzY1VKQlFVc3NTVUZCU1N4RFFVRkRMRTFCUVVzc1MwRkJTeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzJOQlEyeERPMWxCUTBZc1EwRkJReXhEUVVGRE96dEJRVWRJTEdWQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1dVRkJUVHRCUVVOb1FpeHBRa0ZCU1N4TlFVRkxMRXRCUVVzc1EwRkJReXhYUVVGWExFVkJRVVU3TzBGQlJURkNMSEZDUVVGTExFbEJRVWtzUlVGQlJTeERRVUZETzJOQlEySTdXVUZEUml4RFFVRkRPenRCUVVkR0xHVkJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NXVUZCVFR0QlFVTnVRaXh0UWtGQlN5eExRVUZMTEVOQlFVTXNWMEZCVnl4SFFVRkhMRXRCUVVzc1EwRkJRenM3TzFsQlIyaERMRU5CUVVNN1FVRkRSaXhsUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEdkQ1FVRm5RaXhEUVVGRExGTkJRVk1zUlVGQlJTeFpRVUZOTzBGQlEzcERMR2xDUVVGSkxFMUJRVXNzUzBGQlN5eERRVUZETEZkQlFWY3NSVUZCUlRzN1FVRkZNVUlzY1VKQlFVc3NSVUZCUlN4RlFVRkZMRU5CUVVNN1kwRkRXRHRaUVVOR0xFTkJRVU1zUTBGQlF6dEJRVU5JTEdWQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNWVUZCVlN4RlFVRkZMRmxCUVUwN1FVRkRNVU1zYVVKQlFVa3NUVUZCU3l4TFFVRkxMRU5CUVVNc1YwRkJWeXhGUVVGRk96dEJRVVV4UWl4eFFrRkJTeXhGUVVGRkxFVkJRVVVzUTBGQlF6dGpRVU5ZTzFsQlEwWXNRMEZCUXl4RFFVRkRPMVZCUlVvN1VVRkZSanM3UVVGRlJDeHJRa0ZCWVR0alFVRkJMSGxDUVVGSE96czdRVUZIVml4aFFVRkpMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU03TzBGQlJXWXNZVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eEZRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUXk5Q0xHRkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVVjc1JVRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU12UWl4aFFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUTBGQlF5eEZRVUZGTzBGQlEyeENMR1ZCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zV1VGQldTeERRVUZETEU5QlFVOHNSVUZCUlN4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzFWQlEyaEVMRTFCUVUwN1FVRkRUQ3hsUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4UFFVRlBMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFWQlF6VkRPMEZCUTBRc1lVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNSVUZCUlR0QlFVTnVRaXhsUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFWQlF6bERMRTFCUVUwN1FVRkRUQ3hsUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFWQlF6bERPMEZCUTBRc1lVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkZMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRM0JETEdGQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVVjZRenM3UVVGRlJDeFhRVUZOTzJOQlFVRXNhMEpCUVVjN1FVRkRVQ3hoUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUlR0QlFVTm1MR1ZCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNSVUZCUlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRPMVZCUTNoRUxFMUJRVTA3UVVGRFRDeGxRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRWUVVOdVJEdFJRVU5HT3pzN08xVkJlRWhITEZGQlFWRTdTVUZCVXl4alFVRmpPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3p0TFFUQkthRUlzUzBGQlN6dEJRVVZpTEZsQlJsRXNTMEZCU3l4SFFVVldPekpDUVVaTExFdEJRVXM3TzBGQlNYUkNMRk5CUVVrc1QwRkJUeXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdPMEZCUlhoQ0xGTkJRVWtzVVVGQlVTeEhRVUZITzBGQlEySXNZVUZCVVN4RFFVRkRMRWRCUVVjc1JVRkJReXhIUVVGSExFTkJRVU03UVVGRGFrSXNaMEpCUVZjc1JVRkJSVHRCUVVOaUxHbENRVUZaTEVWQlFVVTdRVUZEWkN4aFFVRlJMRkZCUVZFN1RVRkRha0lzUTBGQlF6czdRVUZGUml4blEwRmlhVUlzUzBGQlN5dzJRMEZoYUVJc1UwRkJVeXhGUVVGRExFOUJRVThzUlVGQlF5eFJRVUZSTEVWQlFVVTdPMEZCUld4RExGTkJRVWtzUTBGQlF5eFZRVUZWTEVkQlFVY3NRMEZCUXl4SFFVRkhMRVZCUVVNc1IwRkJSeXhGUVVGRExFZEJRVWNzUlVGQlF5eEhRVUZITEVWQlFVTXNSMEZCUnl4RlFVRkRMRWRCUVVjc1JVRkJReXhIUVVGSExFVkJRVU1zUjBGQlJ5eEZRVUZETEVkQlFVY3NSVUZCUXl4SFFVRkhMRVZCUVVNc1IwRkJSeXhGUVVGRExFZEJRVWNzUTBGQlF5eERRVUZET3p0QlFVVndSU3hUUVVGSkxFTkJRVU1zVlVGQlZTeEhRVUZITEV0QlFVc3NRMEZCUXpzN1FVRkZlRUlzVTBGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF6czdRVUZGTDBJc1UwRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ6dEJRVU5ZTEZWQlFVY3NSVUZCUlN4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFOUJRVTg3UVVGRE1VSXNWMEZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zVVVGQlVUdE5RVU0zUWl4RFFVRkRPenRCUVVWR0xGTkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRE96dEJRVVZ1UkN4VFFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFVkJRVVVzUTBGQlF6czdRVUZGWml4VFFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSExFdEJRVXNzUTBGQlF6czdRVUZGZEVJc1UwRkJTU3hEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzBGQlExb3NVMEZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8wbEJSV1k3TzJGQmJrTnJRaXhMUVVGTE96dG5Ra0ZCVEN4TFFVRkxPMEZCY1VONFFpeGxRVUZWTzJOQlFVRXNjMEpCUVVjN1FVRkRXQ3hoUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEZGQlFWRXNRMEZCUXl4aFFVRmhMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRE4wTXNZVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeEhRVUZITEZWQlFWVXNRMEZCUXp0QlFVTjZReXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4WlFVRlpMRWRCUVVjc1MwRkJTeXhEUVVGRE8wRkJRM2hETEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUjBGQlJ5eFBRVUZQTEVOQlFVTTdRVUZEY2tNc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4SFFVRkhMRTFCUVUwc1EwRkJRenRCUVVOc1F5eGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFZEJRVWNzVFVGQlRTeERRVUZETzBGQlEyNURMR0ZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRSUVVOMlF6czdRVUZGUkN4dFFrRkJZenRqUVVGQkxEQkNRVUZIT3p0QlFVVm1MR0ZCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzUlVGQlJTeERRVUZET3p0QlFVVm1MR05CUVVzc1NVRkJTU3hEUVVGRExFZEJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1JVRkJReXhEUVVGRExFVkJRVVVzUlVGQlJUczdRVUZGYmtRc1pVRkJTU3hUUVVGVExFZEJRVWNzVVVGQlVTeERRVUZETEdGQlFXRXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVNdlF5eGxRVUZKTEZWQlFWVXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NTVUZCU1N4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFMUJRVTBzUTBGQlF6czdRVUZGTjBRc1pVRkJTU3hIUVVGSExFZEJRVWNzU1VGQlNTeFJRVUZSTEVOQlFVTXNVMEZCVXl4RlFVRkZPMEZCUXpsQ0xITkNRVUZUTEVWQlFVVXNTVUZCU1R0QlFVTm1MR2xDUVVGSkxFVkJRVVVzUTBGQlF5eEhRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSenRCUVVOMFFpeHJRa0ZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zVlVGQlZTeERRVUZETzBGQlEyeERMR2xDUVVGSkxFVkJRVVVzU1VGQlNTeERRVUZETEVsQlFVazdXVUZEYUVJc1JVRkJSU3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVNc1EwRkJReXhIUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenM3UVVGRmFrUXNZMEZCUnl4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU03TzBGQlJXcENMR1ZCUVVrc1MwRkJTeXhEUVVGRExFMUJRVTBzUlVGQlJUdEJRVU5vUWl4blFrRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTJ4Q0xHZENRVUZITEVOQlFVTXNVVUZCVVN4SFFVRkhMRWRCUVVjc1EwRkJReXhQUVVGUExFZEJRVWNzUjBGQlJ5eERRVUZETEZWQlFWVXNSMEZCUnl4WlFVRk5MRVZCUVVVc1EwRkJRenRCUVVOMlJDeG5Ra0ZCUnl4RFFVRkRMRXRCUVVzc1IwRkJSeXhIUVVGSExFTkJRVU1zU1VGQlNTeEhRVUZITEVkQlFVY3NRMEZCUXl4UFFVRlBMRWRCUVVjc1dVRkJUU3hGUVVGRkxFTkJRVU03UVVGRE9VTXNaMEpCUVVjc1EwRkJReXhSUVVGUkxFZEJRVWNzUjBGQlJ5eERRVUZETEZsQlFWa3NSMEZCUnl4SFFVRkhMRU5CUVVNc1pVRkJaU3hIUVVGSExGbEJRVTBzUlVGQlJTeERRVUZETzBGQlEycEZMR2RDUVVGSExFTkJRVU1zUzBGQlN5eEhRVUZITEVkQlFVY3NRMEZCUXl4VFFVRlRMRWRCUVVjc1IwRkJSeXhEUVVGRExGbEJRVmtzUjBGQlJ5eFpRVUZOTEVWQlFVVXNRMEZCUXp0WlFVTjZSRHM3UVVGRlJDeGxRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU53UWl4bFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0VlFVVnlRenRCUVVORUxHRkJRVWtzUzBGQlN5eERRVUZETEUxQlFVMHNSVUZCUlR0QlFVTm9RaXhsUVVGSkxFTkJRVU1zYVVKQlFXbENMRVZCUVVVc1EwRkJRenRWUVVNeFFqdFJRVVZHT3p0QlFVVkVMR3RDUVVGaE8yTkJRVUVzZVVKQlFVYzdPMEZCUldRc1lVRkJTU3hKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZET3p0QlFVVmlMR0ZCUVVrc1dVRkJXU3hIUVVGSExFVkJRVVVzUTBGQlF6czdRVUZGZEVJc1kwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGT3p0QlFVVnVSQ3gxUWtGQldTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenM3UVVGRmVFSXNaVUZCU1N4VlFVRlZMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRWxCUVVrc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eE5RVUZOTEVOQlFVTTdRVUZETjBRc1pVRkJTU3hqUVVGakxFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVTXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1RVRkJUU3hEUVVGRE8wRkJRMjVGTEdWQlFVa3NRMEZCUXl4SFFVRkRMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NTVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUlVGQlJUdEJRVU42UXl4cFFrRkJTU3hKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVU5ZTEUxQlFVMHNTVUZCU1N4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExGVkJRVlVzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExHTkJRV01zUTBGQlF5eExRVUZMTEVkQlFVY3NSVUZCUlR0QlFVTjZSaXhwUWtGQlNTeEpRVUZKTEVOQlFVTXNRMEZCUXp0WlFVTllMRTFCUVUwN1FVRkRUQ3hwUWtGQlNTeEpRVUZKTEVkQlFVY3NRMEZCUXp0WlFVTmlPMVZCUTBZN1FVRkRSQ3hoUVVGSkxGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTTdPenRCUVVsd1FpeGhRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRU5CUVVNN1FVRkRhRUlzWVVGQlNTeFhRVUZYTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGRExFOUJRVThzUjBGQlF5eERRVUZETEVsQlFVa3NVVUZCVVN4RFFVRkRPMEZCUTNCRUxHRkJRVWtzV1VGQldTeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJReXhQUVVGUExFZEJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXpzN1FVRkZMME1zWTBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhIUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRk96dEJRVVZ1UXl4bFFVRkpMRk5CUVZNc1IwRkJSeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJRenRCUVVOd1F5eHZRa0ZCVXl4RFFVRkRMRXRCUVVzc1EwRkJReXhSUVVGUkxFZEJRVWNzVlVGQlZTeERRVUZETzBGQlEzUkRMRzlDUVVGVExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NSMEZCU1N4WlFVRlpMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVU1zVjBGQlZ5eEhRVUZETEU5QlFVOHNSMEZCU1N4SlFVRkpMRU5CUVVNN1FVRkRjRVVzWlVGQlNTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUzBGQlN5eEhRVUZITEVWQlFVVTdRVUZET1VJc2MwSkJRVk1zUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4SFFVRkpMRTlCUVU4c1IwRkJTU3hKUVVGSkxFTkJRVU03UVVGRGRrTXNhVUpCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjc1JVRkJSU3haUVVGWkxFZEJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEYkVRc1RVRkJUVHRCUVVOTUxITkNRVUZUTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRE0wSXNjMEpCUVZNc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eEhRVUZITEU5QlFVOHNSMEZCUXl4SlFVRkpMRU5CUVVNN1FVRkRia01zYVVKQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEZkQlFWY3NSVUZCUlN4WlFVRlpMRWRCUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGNFUTdWVUZGUmp0UlFVVkdPenRCUVVWRUxHMUNRVUZqTzJOQlFVRXNNRUpCUVVjN096czdRVUZKWml4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eGxRVUZsTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExFTkJRVU03TzBGQlJUZEVMR05CUVVzc1NVRkJTU3hEUVVGRExFZEJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlF5eERRVUZETEVWQlFVVXNSVUZCUlR0QlFVTnVReXhsUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1IwRkJSenRCUVVOd1FpeG5Ra0ZCU3l4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXM3UVVGRGRFSXNaMEpCUVVzc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTzBGQlEzSkNMSEZDUVVGVkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFR0QlFVTTFRaXh4UWtGQlZTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjN1dVRkRiRU1zUTBGQlF6dEJRVU5HTEdWQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTTdRVUZET1VJc1pVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRWUVVOMlFqdFJRVWRHT3p0QlFVVkVMR05CUVZNN1kwRkJRU3h0UWtGQlF5eEpRVUZKTEVWQlFVTXNSVUZCUlN4RlFVRkZPenM3T3p0QlFVdHFRaXhoUVVGSkxFbEJRVWtzUjBGQlJ6dEJRVU5VTEdWQlFVa3NSVUZCUlN4SlFVRkpPMVZCUTFnc1EwRkJRenRCUVVOR0xHRkJRVWtzVDBGQlR5eEZRVUZGTEV0QlFVc3NVVUZCVVN4RlFVRkZPMEZCUXpGQ0xHVkJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJRenM3TzFWQlIzWkNMRTFCUVUwN1FVRkRUQ3hsUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEVWQlFVVXNRMEZCUXp0VlFVTnFRanRCUVVORUxHRkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRekZDT3p0QlFWTkVMRmRCUVUwN096czdPenM3T3p0alFVRkJMR3RDUVVGSExFVkJSVkk3TzBGQlIwUXNjMEpCUVdsQ08yTkJRVUVzTmtKQlFVYzdPenRCUVVWc1FpeGhRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEZWQlFWVXNSMEZCUnl4WlFVRk5MRVZCUVVVc1EwRkJRenRCUVVNeFJDeGhRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4WlFVRk5MRVZCUVVVc1EwRkJRenRCUVVOcVJDeGhRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhaUVVGWkxFZEJRVWNzU1VGQlNTeERRVUZETEdWQlFXVXNSMEZCUnl4WlFVRk5MRVZCUVVVc1EwRkJRenRCUVVOd1JTeGhRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETEZsQlFWa3NSMEZCUnl4WlFVRk5MRVZCUVVVc1EwRkJRenM3UVVGRk0wUXNZVUZCU1N4RFFVRkRMR05CUVdNc1IwRkJSeXhMUVVGTExFTkJRVU03TzBGQlJUVkNMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1dVRkJXU3hGUVVGRkxGVkJRVU1zUTBGQlF5eEZRVUZMTzBGQlEycEVMR3RDUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRPMEZCUXpGQ0xHVkJRVWtzVDBGQlR5eEhRVUZITEZGQlFWRXNRMEZCUXl4blFrRkJaMElzUTBGQlF5eERRVUZETEVOQlFVTXNZVUZCWVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlF5eERRVUZETEVOQlFVTXNZVUZCWVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzBGQlF5OUdMR1ZCUVVrc1IwRkJSeXhIUVVGSExFMUJRVXNzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVOdVF5eHBRa0ZCU3l4VlFVRlZMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETzBGQlF6ZENMR05CUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlN5eFZRVUZWTEVOQlFVTXNRMEZCUXp0QlFVTXhRaXhwUWtGQlN5eGpRVUZqTEVkQlFVY3NUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJRenRCUVVOd1F5eFpRVUZETEVOQlFVTXNZMEZCWXl4RlFVRkZMRU5CUVVNN1FVRkRia0lzV1VGQlF5eERRVUZETEdWQlFXVXNSVUZCUlN4RFFVRkRPMVZCUTNKQ0xFTkJRVU1zUTBGQlF6czdRVUZGU0N4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExHZENRVUZuUWl4RFFVRkRMRmRCUVZjc1JVRkJSU3hWUVVGRExFTkJRVU1zUlVGQlN6dEJRVU5vUkN4bFFVRkpMRTlCUVU4c1IwRkJSeXhSUVVGUkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1EwRkJReXhEUVVGRExHRkJRV0VzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRVZCUVVNc1EwRkJReXhEUVVGRExHRkJRV0VzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRCUVVNdlJpeGxRVUZKTEVkQlFVY3NSMEZCUnl4TlFVRkxMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZEYmtNc1pVRkJTU3hQUVVGUExFTkJRVU1zUzBGQlN5eExRVUZITEUxQlFVc3NZMEZCWXl4RlFVRkZPMEZCUTNaRExHbENRVUZKTEUxQlFVc3NZMEZCWXl4RlFVRkZPMEZCUTNaQ0xHMUNRVUZKTEU5QlFVOHNSMEZCUnl4TlFVRkxMRWxCUVVrc1EwRkJReXhOUVVGTExHTkJRV01zUTBGQlF5eERRVUZETzBGQlF6ZERMSE5DUVVGUExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTTdZMEZEWkR0QlFVTkVMR2RDUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVc3NWVUZCVlN4RFFVRkRMRU5CUVVNN1dVRkRNMElzVFVGQlRUdEJRVU5NTEdkQ1FVRkhMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03V1VGRFdqdEJRVU5FTEdsQ1FVRkxMR05CUVdNc1IwRkJSeXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETzBGQlEzQkRMRmxCUVVNc1EwRkJReXhqUVVGakxFVkJRVVVzUTBGQlF6dEJRVU51UWl4WlFVRkRMRU5CUVVNc1pVRkJaU3hGUVVGRkxFTkJRVU03VlVGRGNrSXNRMEZCUXl4RFFVRkRPenRCUVVWSUxHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zVlVGQlZTeEZRVUZGTEZWQlFVTXNRMEZCUXl4RlFVRkxPenRCUVVVdlF5eGxRVUZKTEVkQlFVY3NSMEZCUnl4TlFVRkxMRWxCUVVrc1EwRkJReXhOUVVGTExHTkJRV01zUTBGQlF5eERRVUZETzBGQlEzcERMR05CUVVjc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF6dEJRVU5VTEdsQ1FVRkxMRmRCUVZjc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRGVrSXNhVUpCUVVzc1kwRkJZeXhIUVVGSExFdEJRVXNzUTBGQlF6dEJRVU0xUWl4WlFVRkRMRU5CUVVNc1kwRkJZeXhGUVVGRkxFTkJRVU03UVVGRGJrSXNXVUZCUXl4RFFVRkRMR1ZCUVdVc1JVRkJSU3hEUVVGRE8xVkJRM0pDTEVOQlFVTXNRMEZCUXp0UlFVVktPenRCUVU5RUxHRkJRVkU3T3pzN096czdPMk5CUVVFc2EwSkJRVU1zUjBGQlJ5eEZRVUZETEVsQlFVa3NSVUZCUlR0QlFVTnFRaXhoUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NSMEZCUnl4SFFVRkhMRU5CUVVNN1FVRkRja0lzWVVGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8wRkJRM1pDTEdGQlFVa3NRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJRenRCUVVOaUxHRkJRVWtzUTBGQlF5eGpRVUZqTEVWQlFVVXNRMEZCUXp0UlFVTjJRanM3UVVGUFJDeGpRVUZUT3pzN096czdPenRqUVVGQkxHMUNRVUZETEVsQlFVa3NSVUZCUlN4RlFVRkZMRVZCUVVVN1FVRkRiRUlzWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU03VVVGRGVrTTdPMEZCVDBRc1owSkJRVmM3T3pzN096czdPMk5CUVVFc2NVSkJRVU1zUzBGQlN5eEZRVUZGTEVWQlFVVXNSVUZCUlR0QlFVTnlRaXhoUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVU16UWpzN096dFZRV2hSYTBJc1MwRkJTenRKUVVGVExGTkJRVk03TzJ0Q1FVRjJRaXhMUVVGTE96czdPenM3T3p0QlEycExNVUlzWVVGQldTeERRVUZET3pzN096czdPenM3TzBGQlJXSXNTMEZCU1N4SFFVRkhMRWRCUVVjc2JVSkJRVThzUTBGQlF5eERRVUZoTEVOQlFVTXNRMEZCUXp0QlFVTnFReXhMUVVGSkxFZEJRVWNzUjBGQlJ5eHRRa0ZCVHl4RFFVRkRMRU5CUVdFc1EwRkJReXhEUVVGRE8wRkJRMnBETEV0QlFVa3NVMEZCVXl4SFFVRkhMRzFDUVVGUExFTkJRVU1zUTBGQmJVSXNRMEZCUXl4RFFVRkRPMEZCUXpkRExFdEJRVWtzWTBGQll5eEhRVUZITEcxQ1FVRlBMRU5CUVVNc1JVRkJPRUlzUTBGQlF5eERRVUZETzBGQlF6ZEVMRXRCUVVrc1YwRkJWeXhIUVVGSExHMUNRVUZQTEVOQlFVTXNSVUZCYTBJc1EwRkJReXhEUVVGRE8wRkJRemxETEV0QlFVa3NXVUZCV1N4SFFVRkhMRzFDUVVGUExFTkJRVU1zUlVGQmJVSXNRMEZCUXl4RFFVRkRPMEZCUTJoRUxFdEJRVWtzUzBGQlN5eEhRVUZITEcxQ1FVRlBMRU5CUVVNc1EwRkJaU3hEUVVGRExFTkJRVU03TzB0QlNTOUNMRlZCUVZVN1FVRkZTQ3haUVVaUUxGVkJRVlVzUjBGRlFUc3lRa0ZHVml4VlFVRlZPenRCUVVsYUxGTkJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkZMRU5CUVVNN08wRkJSWHBDTEZOQlFVa3NVVUZCVVN4SFFVRkhPMEZCUTJJc1lVRkJVU3hEUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVOQlFVTTdRVUZEWml4bFFVRlZMRXRCUVVzN1FVRkRaaXhoUVVGUkxGRkJRVkU3UVVGRGFFSXNZMEZCVXl4RFFVRkRPMDFCUTFnc1EwRkJRenM3UVVGRlJpeG5RMEZpUlN4VlFVRlZMRFpEUVdGT0xGTkJRVk1zUlVGQlF5eFBRVUZQTEVWQlFVTXNVVUZCVVN4RlFVRkZPenRCUVVWc1F5eFRRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETzBGQlEycERMRk5CUVVrc1EwRkJReXhIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNN1FVRkROMElzVTBGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFMUJRVTBzUTBGQlF6czdRVUZGYmtNc1UwRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1EwRkJRenM3UVVGRmJrTXNVMEZCU1N4RFFVRkRMRmRCUVZjc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRGVrSXNVMEZCU1N4RFFVRkRMRlZCUVZVc1IwRkJSeXhMUVVGTExFTkJRVU03TzBGQlJYaENMRk5CUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dEJRVU5hTEZOQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRKUVVWbU96dGhRVE5DUnl4VlFVRlZPenRuUWtGQlZpeFZRVUZWTzBGQk5rSmtMR1ZCUVZVN1kwRkJRU3h6UWtGQlJ6dEJRVU5ZTEdGQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTnFReXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZsQlFWa3NRMEZCUXl4UFFVRlBMRVZCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlF6bERMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEZGQlFWRXNSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRGFFUXNZVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eEhRVUZITEV0QlFVc3NRMEZCUXp0QlFVTXZRaXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRWRCUVVjc1MwRkJTeXhEUVVGRE8wRkJRMmhETEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExGRkJRVkVzUjBGQlJ5eFZRVUZWTEVOQlFVTTdRVUZEZWtNc1lVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJRM1pET3p0QlFVVkVMRzFDUVVGak8yTkJRVUVzTUVKQlFVYzdPenRCUVVWbUxHRkJRVWtzUTBGQlF5eEhRVUZITEVkQlFVY3NSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU01UWl4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN08wRkJSVzVETEdGQlFVa3NRMEZCUXl4cFFrRkJhVUlzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRPenM3TzBGQlNXeERMR0ZCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeEZRVUZGT3p0QlFVVnFRaXhsUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEZsQlFVMDdRVUZEYWtJc2JVSkJRVXNzVFVGQlRTeERRVUZETEZkQlFWY3NSMEZCUnl4SlFVRkpMRU5CUVVNN1FVRkRMMElzYlVKQlFVc3NUVUZCVFN4RFFVRkRMRlZCUVZVc1IwRkJSeXhEUVVGRExFMUJRVXNzUzBGQlN5eERRVUZETzBGQlEzSkRMRzFDUVVGTExFbEJRVWtzUTBGQlF5eE5RVUZMTEUxQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJRenRaUVVOdVF5eERRVUZETzBGQlEwWXNaVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4WFFVRlhMRVZCUVVVc1dVRkJUVHRCUVVNelF5eHBRa0ZCU1N4TlFVRkxMRTFCUVUwc1EwRkJReXhYUVVGWExFVkJRVVU3UVVGRE0wSXNjVUpCUVVzc1NVRkJTU3hEUVVGRExFMUJRVXNzVFVGQlRTeERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRPMk5CUTI1RE8xbEJRMFlzUTBGQlF5eERRVUZET3p0QlFVZElMR1ZCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzV1VGQlRTeEZRVU5xUWl4RFFVRkRPMEZCUTBZc1pVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhYUVVGWExFVkJRVVVzVlVGQlF5eERRVUZETEVWQlFVczdRVUZETlVNc2FVSkJRVWtzVFVGQlN5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RlFVRkZPMEZCUXpOQ0xHMUNRVUZKTEVOQlFVTXNUVUZCU3l4TlFVRk5MRVZCUVVVN1FVRkRhRUlzZFVKQlFVc3NUVUZCVFN4SFFVRkhMRWRCUVVjc1EwRkJReXhaUVVGWkxFTkJRVU1zVFVGQlN5eFBRVUZQTEVOQlFVTXNRMEZCUXp0blFrRkRPVU03UVVGRFJDeHhRa0ZCU3l4TFFVRkxMRWRCUVVjc1IwRkJSeXhEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETEVWQlFVTXNUVUZCU3l4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVNMVF5eHhRa0ZCU3l4SlFVRkpMRVZCUVVVc1EwRkJRenRqUVVOaU8xbEJRMFlzUTBGQlF5eERRVUZET3p0QlFVZElMR1ZCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzV1VGQlRUdEJRVU51UWl4dFFrRkJTeXhOUVVGTkxFTkJRVU1zVjBGQlZ5eEhRVUZITEV0QlFVc3NRMEZCUXp0WlFVTnFReXhEUVVGRE8wRkJRMFlzWlVGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eFRRVUZUTEVWQlFVVXNXVUZCVFR0QlFVTjZReXhwUWtGQlNTeE5RVUZMTEUxQlFVMHNRMEZCUXl4WFFVRlhMRVZCUVVVN1FVRkRNMElzY1VKQlFVc3NSVUZCUlN4RlFVRkZMRU5CUVVNN1kwRkRXRHRaUVVOR0xFTkJRVU1zUTBGQlF6dEJRVU5JTEdWQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNWVUZCVlN4RlFVRkZMRmxCUVUwN1FVRkRNVU1zYVVKQlFVa3NUVUZCU3l4TlFVRk5MRU5CUVVNc1YwRkJWeXhGUVVGRk8wRkJRek5DTEhGQ1FVRkxMRVZCUVVVc1JVRkJSU3hEUVVGRE8yTkJRMWc3V1VGRFJpeERRVUZETEVOQlFVTTdWVUZEU2p0UlFVVkdPenRCUVVWRUxHdENRVUZoTzJOQlFVRXNlVUpCUVVjN08wRkJSV1FzWVVGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4WlFVRlpMRU5CUVVNc1IwRkJSeXhGUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlF6ZENMR0ZCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNM1FpeGhRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1EwRkJReXhGUVVGRk8wRkJRMnhDTEdWQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFOUJRVThzUlVGQlJTeEpRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8xVkJRMmhFTEUxQlFVMDdRVUZEVEN4bFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eFBRVUZQTEVWQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xVkJRelZETzBGQlEwUXNZVUZCU1N4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUlVGQlJUdEJRVU51UWl4bFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFZRVU5zUkN4TlFVRk5PMEZCUTB3c1pVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNVVUZCVVN4RlFVRkZMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFZRVU01UXpzN1FVRkZSQ3hoUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkZlRVE3TzBGQlJVUXNWMEZCVFR0alFVRkJMR3RDUVVGSE8wRkJRMUFzWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRVZCUVVVN1FVRkRaaXhsUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1ZVRkRlRVFzVFVGQlRUdEJRVU5NTEdWQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFMUJRVTBzUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFZRVU14UkR0UlFVTkdPenM3TzFWQmNraEhMRlZCUVZVN1NVRkJVeXhqUVVGak96czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenRMUVdkTGJFSXNVMEZCVXp0QlFVVnFRaXhaUVVaUkxGTkJRVk1zUjBGRlpEc3lRa0ZHU3l4VFFVRlRPenRCUVVreFFpeFRRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE96dEJRVVY0UWl4VFFVRkpMRkZCUVZFc1IwRkJSenRCUVVOaUxHRkJRVkVzUTBGQlF5eEhRVUZITEVWQlFVTXNSMEZCUnl4RFFVRkRPMEZCUTJwQ0xHRkJRVkVzVVVGQlVUdEJRVU5vUWl4aFFVRlJMRU5CUVVNN1FVRkRWQ3huUWtGQlZ5eEZRVUZGTzAxQlEyUXNRMEZCUXpzN1FVRkZSaXhuUTBGaWFVSXNVMEZCVXl3MlEwRmhjRUlzVTBGQlV5eEZRVUZETEU5QlFVOHNSVUZCUXl4UlFVRlJMRVZCUVVVN08wRkJSV3hETEZOQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03T3pzN096czdRVUZQYWtJc1UwRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWxCUVVrc1EwRkJRenM3T3pzN08wRkJUUzlDTEZOQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1NVRkJTU3hMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NSVUZCUXl4WlFVRlhMRVZCUVVVc1JVRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6czdPenM3TzBGQlRUVkVMRk5CUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNTeFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFVkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRCUVVONFJTeFRRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1IwRkJSeXhKUVVGSkxFTkJRVU03T3pzN096dEJRVTEwUWl4VFFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFbEJRVWtzV1VGQldTeERRVUZETEVOQlFVTXNSVUZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03TzBGQlJXaEVMRk5CUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dEpRVVZpT3p0aFFUZERhMElzVTBGQlV6czdaMEpCUVZRc1UwRkJVenRCUVN0RE5VSXNaVUZCVlR0alFVRkJMSE5DUVVGSE8wRkJRMWdzWVVGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4UlFVRlJMRU5CUVVNc1lVRkJZU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlF6ZERMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNSMEZCUnl4VlFVRlZMRU5CUVVNN1FVRkRla01zWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhIUVVGSExFOUJRVThzUTBGQlF6dEJRVU55UXl4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVkQlFVY3NUVUZCVFN4RFFVRkRPMEZCUTJ4RExHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1IwRkJSeXhOUVVGTkxFTkJRVU03UVVGRGJrTXNZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMEZCUTNSRExHRkJRVWtzUzBGQlN5eERRVUZETEUxQlFVMHNSVUZCUlR0QlFVTm9RaXhsUVVGSkxFTkJRVU1zYVVKQlFXbENMRVZCUVVVc1EwRkJRenRWUVVNeFFqdFJRVU5HT3p0QlFVVkVMRzFDUVVGak8yTkJRVUVzTUVKQlFVYzdPMEZCUldZc1lVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEZRVUZGTEVOQlFVTTdRVUZEYUVJc1kwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZPenRCUVVWeVF5eGxRVUZKTEZOQlFWRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXpzN08wRkJSM0pETEdWQlFVa3NVMEZCVXl4SFFVRkhMRkZCUVZFc1EwRkJReXhoUVVGaExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZETDBNc2IwSkJRVk1zUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4SFFVRkhMRlZCUVZVc1EwRkJRenM3UVVGSGRFTXNaVUZCU1N4SlFVRkpMRWRCUVVjc1NVRkJTU3hWUVVGVkxFTkJRVU1zVTBGQlV5eEZRVUZGTzBGQlEycERMSE5DUVVGVExFVkJRVVVzU1VGQlNUdEJRVU5tTEd0Q1FVRkxMRVZCUVVVc1EwRkJRenRCUVVOU0xHZENRVUZITEVWQlFVVXNVMEZCVVN4RFFVRkRMRWRCUVVjN1FVRkRha0lzYlVKQlFVMHNSVUZCUlN4VFFVRlJMRU5CUVVNc1RVRkJUVHRCUVVOMlFpeHBRa0ZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhKUVVGSk8wRkJRMllzYlVKQlFVMHNSVUZCUlN4SlFVRkpPMWxCUTJJc1JVRkJSU3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6czdPMEZCUjJ4RExHVkJRVWtzUzBGQlN5eERRVUZETEUxQlFVMHNSVUZCUlR0QlFVTm9RaXhwUWtGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRMjVDTEdsQ1FVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMRlZCUVZVc1IwRkJSeXhaUVVGTkxFVkJRVVVzUTBGQlF6dEJRVU14UkN4cFFrRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzV1VGQlRTeEZRVUZGTEVOQlFVTTdRVUZEYWtRc2FVSkJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRMRmxCUVZrc1IwRkJSeXhKUVVGSkxFTkJRVU1zWlVGQlpTeEhRVUZITEZsQlFVMHNSVUZCUlN4RFFVRkRPMEZCUTNCRkxHbENRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETEZsQlFWa3NSMEZCUnl4WlFVRk5MRVZCUVVVc1EwRkJRenRaUVVNMVJEczdRVUZGUkN4bFFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0QlFVTjBRaXhsUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZkQlFWY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRWUVVWeVF6dEJRVU5FTEdGQlFVa3NRMEZCUXl4aFFVRmhMRVZCUVVVc1EwRkJRenRSUVVOMFFqczdRVUZGUkN4clFrRkJZVHRqUVVGQkxIbENRVUZIT3p0QlFVVmtMR0ZCUVVrc1UwRkJVeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJRenRCUVVNeFF5eGhRVUZKTEZWQlFWVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTTdPMEZCUlhwRExHTkJRVXNzU1VGQlNTeERRVUZETEVkQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRCUVVOMFF5eGxRVUZKTEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXp0QlFVTnlReXh2UWtGQlV5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRWRCUVVjc1UwRkJVeXhIUVVGSExFbEJRVWtzUTBGQlF6dEJRVU12UkN4dlFrRkJVeXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVkQlFVY3NWVUZCVlN4SFFVRkhMRWxCUVVrc1EwRkJRenRCUVVNMVJDeGxRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eFRRVUZUTEVWQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNN1ZVRkROVU03VVVGSFJqczdRVUZGUkN4dFFrRkJZenRqUVVGQkxEQkNRVUZITzBGQlEyWXNZMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzBGQlEzUkRMR1ZCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1ZVRkRlRUk3VVVGRFJqczdRVUZGUkN4WFFVRk5PMk5CUVVFc2EwSkJRVWM3T3pzN08wRkJSMUFzWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1ZVRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCU3pzN1FVRkZOMElzWlVGQlNTeE5RVUZMTEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NUVUZCU3l4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTzBGQlEzSkVMR2xDUVVGSkxFMUJRVXNzVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVTdRVUZEYWtNc2NVSkJRVXNzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8yTkJRM2hDTEUxQlFVMDdRVUZEVEN4eFFrRkJTeXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1kwRkRla0k3V1VGRFJqdFZRVU5HTEVOQlFVTXNRMEZCUXp0UlFVTktPenRCUVZORUxHTkJRVk03T3pzN096czdPenRqUVVGQkxHMUNRVUZETEVsQlFVa3NSVUZCUXl4RlFVRkZMRVZCUVVVN096czdRVUZKYWtJc1lVRkJTU3hKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03TzBGQlJYQkRMR0ZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRPMEZCUTJoRUxHRkJRVWtzU1VGQlNTeEhRVUZITzBGQlExUXNZMEZCUnl4RlFVRkZMRWxCUVVrc1EwRkJReXhIUVVGSE8wRkJRMklzYVVKQlFVMHNSVUZCUlN4SlFVRkpMRU5CUVVNc1RVRkJUVHRCUVVOdVFpeG5Ra0ZCU3l4RlFVRkZMRVZCUVVVN1ZVRkRWaXhEUVVGRE8wRkJRMFlzWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRE1VSTdPMEZCUlVRc1YwRkJUVHRqUVVGQkxHdENRVUZIT3pzN1FVRkRVQ3hoUVVGSkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1JVRkJSVHRCUVVNelFpeGxRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkxPMEZCUXpkQ0xHbENRVUZKTEVOQlFVTXNTMEZCUnl4TlFVRkxMRTlCUVU4c1EwRkJReXhMUVVGTExFVkJRVVU3UVVGRE1VSXNjVUpCUVVzc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4WlFVRlpMRU5CUVVNc1VVRkJVU3hGUVVGRExFMUJRVXNzVFVGQlRTeERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRPMEZCUTJwRkxIRkNRVUZMTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zV1VGQldTeERRVUZETEdOQlFXTXNSVUZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRCUVVOdVJDeHhRa0ZCU3l4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4blFrRkJaMElzUlVGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0alFVTjBSQ3hOUVVGTk8wRkJRMHdzY1VKQlFVc3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNVVUZCVVN4RlFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8yTkJRMnBFTzFsQlEwWXNRMEZCUXl4RFFVRkRPMVZCUTBvN1VVRkRSanM3UVVGTlJDeFZRVUZMT3pzN096czdPMk5CUVVFc1pVRkJReXhGUVVGRkxFVkJRVVU3UVVGRFVpeGhRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRCUVVNelF5eGhRVUZKTEVWQlFVVXNSVUZCUlR0QlFVTk9MR1ZCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMVZCUTNSQ08wRkJRMFFzWVVGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJRenRSUVVOMlFqczdRVUZMUkN4VFFVRkpPenM3T3pzN1kwRkJRU3huUWtGQlJ6dEJRVU5NTEdGQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03VVVGRGRFSTdPMEZCUzBRc1UwRkJTVHM3T3pzN08yTkJRVUVzWjBKQlFVYzdRVUZEVEN4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzBGQlEzQkNMR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU1zUTBGQlF6dEJRVU51UlN4aFFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03VVVGRFpqczdRVUZGUkN4elFrRkJhVUk3WTBGQlFTdzJRa0ZCUnpzN08wRkJSV3hDTEdGQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMRmxCUVUwc1JVRkJSU3hEUVVGRE8wRkJRekZFTEdGQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRmxCUVUwc1JVRkJSU3hEUVVGRE8wRkJRMnBFTEdGQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExGbEJRVmtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNaVUZCWlN4SFFVRkhMRmxCUVUwc1JVRkJSU3hEUVVGRE8wRkJRM0JGTEdGQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNXVUZCV1N4SFFVRkhMRmxCUVUwc1JVRkJSU3hEUVVGRE96dEJRVVV6UkN4aFFVRkpMRU5CUVVNc1kwRkJZeXhIUVVGSExFdEJRVXNzUTBGQlF6czdRVUZGTlVJc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhaUVVGWkxFVkJRVVVzVlVGQlF5eERRVUZETEVWQlFVczdRVUZEYWtRc1pVRkJTU3hQUVVGUExFZEJRVWNzVVVGQlVTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFTkJRVU1zUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1QwRkJUeXhGUVVGRExFTkJRVU1zUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03UVVGREwwWXNaVUZCU1N4SlFVRkpMRWRCUVVjc1RVRkJTeXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNKRExHbENRVUZMTEZWQlFWVXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU03UVVGRE9VSXNaVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTExGVkJRVlVzUTBGQlF5eERRVUZETzBGQlF6TkNMR2xDUVVGTExHTkJRV01zUjBGQlJ5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUTNCRExGbEJRVU1zUTBGQlF5eGpRVUZqTEVWQlFVVXNRMEZCUXp0QlFVTnVRaXhaUVVGRExFTkJRVU1zWlVGQlpTeEZRVUZGTEVOQlFVTTdWVUZEY2tJc1EwRkJReXhEUVVGRE96dEJRVVZJTEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNWMEZCVnl4RlFVRkZMRlZCUVVNc1EwRkJReXhGUVVGTE8wRkJRMmhFTEdWQlFVa3NUMEZCVHl4SFFVRkhMRkZCUVZFc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1lVRkJZU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEU5QlFVOHNSVUZCUXl4RFFVRkRMRU5CUVVNc1lVRkJZU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMEZCUXk5R0xHVkJRVWtzU1VGQlNTeEhRVUZITEUxQlFVc3NTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEJRVU55UXl4bFFVRkpMRTlCUVU4c1EwRkJReXhMUVVGTExFdEJRVWNzVFVGQlN5eGpRVUZqTEVWQlFVVTdRVUZEZGtNc2FVSkJRVWtzVFVGQlN5eGpRVUZqTEVsQlFVa3NRMEZCUXl4RlFVRkZPMEZCUXpWQ0xHMUNRVUZKTEZGQlFWRXNSMEZCUnl4TlFVRkxMRXRCUVVzc1EwRkJReXhOUVVGTExHTkJRV01zUTBGQlF5eERRVUZETzBGQlF5OURMSFZDUVVGUkxFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTTdZMEZEWmp0QlFVTkVMR2xDUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVc3NWVUZCVlN4RFFVRkRMRU5CUVVNN1dVRkROVUlzVFVGQlRUdEJRVU5NTEdsQ1FVRkpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03V1VGRFlqdEJRVU5FTEdsQ1FVRkxMR05CUVdNc1IwRkJSeXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETzBGQlEzQkRMRmxCUVVNc1EwRkJReXhqUVVGakxFVkJRVVVzUTBGQlF6dEJRVU51UWl4WlFVRkRMRU5CUVVNc1pVRkJaU3hGUVVGRkxFTkJRVU03VlVGRGNrSXNRMEZCUXl4RFFVRkRPenRCUVVWSUxHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zVlVGQlZTeEZRVUZGTEZWQlFVTXNRMEZCUXl4RlFVRkxPenRCUVVVdlF5eGxRVUZKTEVsQlFVa3NSMEZCUnl4TlFVRkxMRXRCUVVzc1EwRkJReXhOUVVGTExHTkJRV01zUTBGQlF5eERRVUZETzBGQlF6TkRMR1ZCUVVrc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF6dEJRVU5XTEdsQ1FVRkxMRmRCUVZjc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRGVrSXNhVUpCUVVzc1kwRkJZeXhIUVVGSExFdEJRVXNzUTBGQlF6dEJRVU0xUWl4WlFVRkRMRU5CUVVNc1kwRkJZeXhGUVVGRkxFTkJRVU03UVVGRGJrSXNXVUZCUXl4RFFVRkRMR1ZCUVdVc1JVRkJSU3hEUVVGRE8xVkJRM0pDTEVOQlFVTXNRMEZCUXp0UlFVVktPenRCUVZWSExGTkJRVWs3T3pzN096czdXVUZLUVN4WlFVRkhPMEZCUTFRc1owSkJRVThzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNN1VVRkRla0k3V1VGRlR5eFZRVUZETEVOQlFVTXNSVUZCUlR0QlFVTldMR0ZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTXNRMEZCUXp0QlFVTnlRaXhoUVVGSkxFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdRVUZEWWl4aFFVRkpMRU5CUVVNc1kwRkJZeXhGUVVGRkxFTkJRVU03UVVGRGRFSXNZVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8xRkJRMlk3TzBGQlZVY3NXVUZCVHpzN096czdPenRaUVVwQkxGbEJRVWM3UVVGRFdpeG5Ra0ZCVHl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF6dFJRVU0xUWp0WlFVVlZMRlZCUVVNc1EwRkJReXhGUVVGRk8wRkJRMklzWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRM2hDTEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU55UWl4aFFVRkpMRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU03UVVGRFlpeGhRVUZKTEVOQlFVTXNZMEZCWXl4RlFVRkZMRU5CUVVNN1FVRkRkRUlzWVVGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMUZCUTJZN096czdWVUZxVW10Q0xGTkJRVk03U1VGQlV5eFRRVUZUT3p0clFrRkJNMElzVTBGQlV5eERPenM3T3pzN1FVTTFTemxDTEdGQlFWa3NRMEZCUXpzN096czdPenM3UzBGRlRpeEpRVUZKTEhWRFFVRk5MRU5CUVdNN08wdEJRM2hDTEZGQlFWRXNkVU5CUVUwc1JVRkJiMEk3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN1MwRjFRbkJDTEUxQlFVMDdRVUZGWkN4WlFVWlJMRTFCUVUwc1EwRkZZaXhKUVVGSkxFVkJRVU1zVDBGQlR5eEZRVUZGT3pzN01rSkJSbEFzVFVGQlRUczdPMEZCU1haQ0xGTkJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NSVUZCUlN4RFFVRkRPMEZCUTJ4Q0xGTkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RlFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE96dEJRVVV4UWl4VFFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSE8wRkJRMW9zVjBGQlNTeEZRVUZGTEZWQlFVTXNUVUZCVFN4RlFVRkZMRWRCUVVjc1JVRkJTenRCUVVOeVFpeGxRVUZMTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEUxQlFVc3NUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBGQlEzWkVMR0ZCUVVrc1RVRkJTeXhGUVVGRkxFVkJRVVU3UVVGQlJTeHBRa0ZCU3l4RlFVRkZMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03VlVGQlJUdEJRVU5zUXl4blFrRkJUeXhOUVVGTExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVOc1F6dEJRVU5FTEZWQlFVY3NSVUZCUlN4WlFVRk5PMEZCUTFRc1pVRkJTeXhQUVVGUExFTkJRVU1zVlVGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkxPMEZCUVVVc2FVSkJRVXNzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VlVGQlJTeERRVUZETEVOQlFVTTdRVUZEYkVRc1lVRkJTU3hOUVVGTExFVkJRVVVzUlVGQlJUdEJRVUZGTEdsQ1FVRkxMRVZCUVVVc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFZRVUZGTzFGQlEyNURPMEZCUTBRc1ZVRkJSeXhGUVVGRkxGVkJRVU1zUjBGQlJ5eEZRVUZMTzBGQlExb3NZMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZETEUxQlFVc3NUMEZCVHl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8wRkJRMnBETEdsQ1FVRkxMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEZRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMVZCUTNwQ08wRkJRMFFzWVVGQlNTeE5RVUZMTEVWQlFVVXNSVUZCUlR0QlFVRkZMR2xDUVVGTExFVkJRVVVzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0VlFVRkZPMUZCUTI1RE8wRkJRMFFzWVVGQlRTeEZRVUZGTEZWQlFVTXNUVUZCVFN4RlFVRkxPMEZCUTJ4Q0xHTkJRVXNzU1VGQlNTeERRVUZETEVkQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJReXhOUVVGTExFbEJRVWtzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0QlFVTTVRaXhwUWtGQlN5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFZRVU0xUWp0QlFVTkVMR0ZCUVVrc1RVRkJTeXhGUVVGRkxFVkJRVVU3UVVGQlJTeHBRa0ZCU3l4RlFVRkZMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03VlVGQlJUdFJRVU51UXp0TlFVTkdMRU5CUVVNN08wRkJSVVlzVTBGQlNTeERRVUZETEVkQlFVY3NSMEZCUnp0QlFVTlVMRmRCUVVrc1JVRkJSU3hWUVVGRExFMUJRVTBzUlVGQlJTeEhRVUZITEVWQlFVVXNTMEZCU3l4RlFVRkxPMEZCUXpWQ0xHVkJRVXNzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhIUVVGSExFdEJRVXNzUTBGQlF6dEJRVU5zUXl4aFFVRkpMRTFCUVVzc1JVRkJSU3hGUVVGRk8wRkJRVVVzYVVKQlFVc3NSVUZCUlN4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8xVkJRVVU3VVVGRGJrTTdRVUZEUkN4VlFVRkhMRVZCUVVVc1ZVRkJReXhOUVVGTkxFVkJRVXM3T3p0QlFVZG1MR1ZCUVVzc1QwRkJUeXhIUVVGSExFMUJRVTBzUTBGQlF6dEJRVU4wUWl4aFFVRkpMRTFCUVVzc1JVRkJSU3hGUVVGRk8wRkJRVVVzYVVKQlFVc3NSVUZCUlN4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8xVkJRVVU3VVVGRGJrTTdRVUZEUkN4VlFVRkhMRVZCUVVVc1ZVRkJReXhIUVVGSExFVkJRVU1zVFVGQlRTeEZRVUZMT3p0QlFVVnVRaXhsUVVGTExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4TlFVRk5MRU5CUVVNN1FVRkRNMElzWVVGQlNTeE5RVUZMTEVWQlFVVXNSVUZCUlR0QlFVRkZMR2xDUVVGTExFVkJRVVVzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0VlFVRkZPMUZCUTI1RE8wRkJRMFFzWVVGQlRTeEZRVUZGTEZWQlFVTXNUVUZCVFN4RlFVRkRMRTFCUVUwc1JVRkJTenM3UVVGRmVrSXNaVUZCU3l4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExGVkJRVU1zUjBGQlJ5eEZRVUZETEVOQlFVTXNSVUZCU3p0QlFVTTVRaXhwUWtGQlN5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMVZCUTNKRExFTkJRVU1zUTBGQlF6dEJRVU5JTEdGQlFVa3NUVUZCU3l4RlFVRkZMRVZCUVVVN1FVRkJSU3hwUWtGQlN5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1ZVRkJSVHRSUVVOdVF6dE5RVU5HTEVOQlFVTTdPMEZCUlVZc1UwRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ6czdPMEZCUjFvc1ZVRkJSeXhGUVVGRkxGVkJRVU1zVFVGQlRTeEZRVUZMTzBGQlEyWXNZVUZCU1N4RFFVRkRMRTFCUVUwc1NVRkJTU3hOUVVGTkxFdEJRVWNzUTBGQlF5eEZRVUZGTzBGQlEzcENMR2xDUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETzFWQlExbzdRVUZEUkN4bFFVRk5MRWxCUVVrc1RVRkJTeXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRPMEZCUTJwRExHRkJRVWtzVFVGQlRTeEhRVUZITEVOQlFVTXNSVUZCUlR0QlFVTmtMR2xDUVVGTkxFZEJRVWNzVFVGQlN5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hIUVVGSExFMUJRVTBzUTBGQlF6dFZRVU14UXp0QlFVTkVMR05CUVVzc1NVRkJTU3hEUVVGRExFZEJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUXl4TlFVRkxMRWxCUVVrc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdEJRVU01UWl4bFFVRkpMRWRCUVVjc1IwRkJSeXhOUVVGTExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVVc1RVRkJTeXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4SFFVRkhMRTFCUVUwc1JVRkJSU3hOUVVGTkxFTkJRVVVzUTBGQlF6dEJRVU0xUlN4cFFrRkJTeXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJSU3hOUVVGTExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUlN4RFFVRkRPMVZCUTJwRU8wRkJRMFFzWVVGQlNTeE5RVUZMTEVWQlFVVXNSVUZCUlR0QlFVRkZMR2xDUVVGTExFVkJRVVVzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0VlFVRkZPMUZCUTI1RE8wRkJRMFFzVlVGQlJ5eEZRVUZGTEZWQlFVTXNSMEZCUnl4RlFVRkRMRTFCUVUwc1JVRkJTenRCUVVOdVFpeGhRVUZKTEVOQlFVTXNUVUZCVFN4SlFVRkpMRTFCUVUwc1MwRkJSeXhEUVVGRExFVkJRVVU3UVVGRGVrSXNhVUpCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU03VlVGRFdqdEJRVU5FTEdWQlFVMHNTVUZCU1N4TlFVRkxMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTTdRVUZEYWtNc1lVRkJTU3hOUVVGTkxFZEJRVWNzUTBGQlF5eEZRVUZGTzBGQlEyUXNhVUpCUVUwc1IwRkJSeXhOUVVGTExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRWRCUVVjc1RVRkJUU3hEUVVGRE8xVkJRekZETzBGQlEwUXNZVUZCU1N4SFFVRkhMRWRCUVVjc1RVRkJTeXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkZMRTFCUVVzc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEUxQlFVMHNSMEZCUnl4TlFVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRkxFTkJRVU03UVVGRGFFWXNaVUZCU3l4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUlN4TlFVRkxMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlJTeERRVUZETzBGQlEzQkVMR0ZCUVVrc1RVRkJTeXhGUVVGRkxFVkJRVVU3UVVGQlJTeHBRa0ZCU3l4RlFVRkZMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03VlVGQlJUdFJRVU51UXp0QlFVTkVMR0ZCUVUwc1JVRkJSU3hWUVVGRExFMUJRVTBzUlVGQlJTeE5RVUZOTEVWQlFVczdRVUZETVVJc1lVRkJTU3hEUVVGRExFMUJRVTBzU1VGQlNTeE5RVUZOTEV0QlFVY3NRMEZCUXl4RlFVRkZPMEZCUTNwQ0xHbENRVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRPMVZCUTFvN1FVRkRSQ3hsUVVGTkxFbEJRVWtzVFVGQlN5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRPMEZCUXpsQ0xHRkJRVWtzVFVGQlRTeEhRVUZITEVOQlFVTXNSVUZCUlR0QlFVTmtMR2xDUVVGTkxFZEJRVWNzVFVGQlN5eFBRVUZQTEVOQlFVTXNUVUZCVFN4SFFVRkhMRTFCUVUwc1EwRkJRenRWUVVOMlF6dEJRVU5FTEdGQlFVa3NTMEZCU3l4SFFVRkhMRVZCUVVVc1EwRkJRenRCUVVObUxHVkJRVXNzVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4VlFVRkRMRWRCUVVjc1JVRkJTenRCUVVNMVFpeG5Ra0ZCU3l4RFFVRkRMRWxCUVVrc1EwRkJSU3hIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVVXNRMEZCUXp0VlFVTXpRaXhEUVVGRExFTkJRVU03UVVGRFNDeGhRVUZKTEVkQlFVY3NSMEZCUnl4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRkxFdEJRVXNzUTBGQlF5eE5RVUZOTEVkQlFVY3NUVUZCVFN4RlFVRkZMRTFCUVUwc1EwRkJSU3hEUVVGRE8wRkJRM2hFTEdOQlFVc3NSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRkxFdEJRVXNzUTBGQlJTeERRVUZETzBGQlF6VkNMR1ZCUVVzc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eFZRVUZETEVkQlFVY3NSVUZCUXl4RFFVRkRMRVZCUVVzN1FVRkRPVUlzWTBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFZRVU40UWl4RFFVRkRMRU5CUVVNN1FVRkRTQ3hoUVVGSkxFMUJRVXNzUlVGQlJTeEZRVUZGTzBGQlFVVXNhVUpCUVVzc1JVRkJSU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzFWQlFVVTdVVUZEYmtNN1RVRkRSaXhEUVVGRE96czdPenRCUVV0R0xGTkJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVYzdRVUZEWkN4VlFVRkhMRVZCUVVVc1ZVRkJReXhKUVVGSkxFVkJRVXM3UVVGRFlpeGhRVUZKTEZsQlFWa3NSMEZCUnl4SlFVRkpMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dEJRVU4wUXl4bFFVRkxMRTlCUVU4c1EwRkJReXhWUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVWQlFVczdRVUZEY0VJc2FVSkJRVXNzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFTkJRVU03VlVGRGNrUXNRMEZCUXl4RFFVRkRPenM3T3p0QlFVdElMR0ZCUVVrc1RVRkJTeXhGUVVGRkxFVkJRVVU3UVVGQlJTeHBRa0ZCU3l4RlFVRkZMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03VlVGQlJUdFJRVU51UXp0QlFVTkVMRlZCUVVjc1JVRkJSU3haUVVGclFqdGhRVUZxUWl4SFFVRkhMR2REUVVGRExFTkJRVU03WVVGQlF5eEpRVUZKTEdkRFFVRkRMRU5CUVVNN08wRkJRMmhDTEdGQlFVa3NXVUZCV1N4SFFVRkhMRWxCUVVrc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzBGQlEzUkRMR1ZCUVVzc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4VlFVRkRMRWxCUVVrc1JVRkJReXhEUVVGRExFVkJRVXM3UVVGRGNFTXNhVUpCUVVzc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRMRU5CUVVNN1ZVRkRka1FzUTBGQlF5eERRVUZETzBGQlEwZ3NZVUZCU1N4TlFVRkxMRVZCUVVVc1JVRkJSVHRCUVVGRkxHbENRVUZMTEVWQlFVVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRWUVVGRk8xRkJRMjVETzBGQlEwUXNZVUZCVFN4RlFVRkZMRmxCUVhGQ08yRkJRWEJDTEUxQlFVMHNaME5CUVVNc1EwRkJRenRoUVVGRExFbEJRVWtzWjBOQlFVTXNRMEZCUXpzN1FVRkRkRUlzWVVGQlNTeFpRVUZaTEVkQlFVY3NTVUZCU1N4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UVVGRGRFTXNaVUZCU3l4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExGVkJRVU1zUjBGQlJ5eEZRVUZETEVOQlFVTXNSVUZCU3p0QlFVTTVRaXhwUWtGQlN5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU1zUTBGQlF6dFZRVU14UkN4RFFVRkRMRU5CUVVNN1FVRkRTQ3hoUVVGSkxFMUJRVXNzUlVGQlJTeEZRVUZGTzBGQlFVVXNhVUpCUVVzc1JVRkJSU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzFWQlFVVTdVVUZEYmtNN1RVRkRSaXhEUVVGRE96czdRVUZIUml4VFFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSE8wRkJRMWdzVlVGQlJ5eEZRVUZGTEZsQlFVMDdRVUZEVkN4bFFVRkxMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEYWtJN1FVRkRSQ3hWUVVGSExFVkJRVVVzVlVGQlF5eEhRVUZITEVWQlFVczdRVUZEV2l4bFFVRkxMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNKQ08wRkJRMFFzWVVGQlRTeEZRVUZGTEZWQlFVTXNUVUZCVFN4RlFVRkxPMEZCUTJ4Q0xHVkJRVXNzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRE0wSTdUVUZEUml4RFFVRkRPenM3U1VGSFNEczdaMEpCZGtwclFpeE5RVUZOTzBGQk1FcDZRaXhYUVVGTk8yTkJRVUVzWjBKQlFVTXNTVUZCU1N4RlFVRkRMRTlCUVU4c1JVRkJSVHM3TzBGQlEyNUNMR0ZCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzUlVGQlJTeERRVUZETzBGQlEyeENMR05CUVUwc1NVRkJTU3hIUVVGSExFZEJRVU1zUTBGQlF5eEZRVUZGTEVkQlFVY3NSMEZCUnl4SlFVRkpMRVZCUVVVc1IwRkJSeXhGUVVGRkxFVkJRVWM3UVVGRGJrTXNaVUZCU1N4SFFVRkhMRWRCUVVjc1NVRkJTU3hMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdRVUZETjBJc1pVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1ZVRkRlRUk3UVVGRFJDeGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRlZCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlN6dEJRVUZGTEdsQ1FVRkxMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNN1ZVRkJSU3hEUVVGRExFTkJRVU03VVVGRGVFUTdPMEZCUlVRc1dVRkJUenRqUVVGQkxHbENRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRVZCUVVVN1FVRkRZaXhoUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZEVml4alFVRk5MRWxCUVVrc1IwRkJSeXhIUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hIUVVGSExFVkJRVVVzUlVGQlJ6dEJRVU40UXl4bFFVRkpMRVZCUVVVc1JVRkJSVHRCUVVGRkxHVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVRkZPMEZCUTNCQ0xHZENRVUZOTEVsQlFVa3NUVUZCVFN4SFFVRkRMRU5CUVVNc1JVRkJSU3hOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5MRVZCUVVVc1JVRkJSenRCUVVOd1JDeGpRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkRMRTFCUVUwc1JVRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU5vUWl4alFVRkRMRVZCUVVVc1EwRkJRenRaUVVOTU8xVkJRMFk3VVVGRFJqczdRVUZGUkN4cFFrRkJXVHRqUVVGQkxIZENRVUZIT3pzN1FVRkRZaXhoUVVGSkxHRkJRV0VzUjBGQlJ5eEZRVUZGTEVOQlFVTTdRVUZEZGtJc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGRFZpeFZRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRVZCUVVzN1FVRkJSU3gzUWtGQllTeEpRVUZKTEVOQlFVTXNUVUZCU3l4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hIUVVGSExFTkJRVU03VlVGQlJTeEZRVU5xUlN4WlFVRk5PMEZCUVVVc2QwSkJRV0VzU1VGQlNTeEpRVUZKTEVOQlFVTTdWVUZCUlN4RFFVTnFReXhEUVVGRE8wRkJRMFlzWjBKQlFVOHNZVUZCWVN4RFFVRkRPMUZCUTNSQ096dEJRVVZFTEZGQlFVYzdZMEZCUVN4bFFVRkhPMEZCUTBvc1owSkJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSU3hEUVVGRExFTkJRVU03VVVGRGJFTTdPMEZCUlVRc1YwRkJUVHRqUVVGQkxHZENRVUZETEU5QlFVOHNSVUZCUlR0QlFVTmtMR0ZCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzVDBGQlR5eEpRVUZKTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNN1VVRkRlRU03TzBGQlJVY3NWMEZCVFR0WlFVRkJMRmxCUVVjN1FVRkRXQ3huUWtGQlR5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU03VVVGREwwSTdPMEZCUlVRc1YwRkJUVHRqUVVGQkxHZENRVUZETEV0QlFVc3NSVUZCUlRzN1FVRkZXaXhuUWtGQlR6dEJRVU5NTEdOQlFVY3NSVUZCUlN4RlFVRkRMRVZCUVVjc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVVTdRVUZETDBJc2FVSkJRVTBzUlVGQlJTeExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4N1ZVRkROMElzUTBGQlF6dFJRVU5JT3p0QlFVVkVMRmxCUVU4N1kwRkJRU3hwUWtGQlF5eEhRVUZITEVWQlFVTXNUVUZCVFN4RlFVRkZPMEZCUTJ4Q0xHZENRVUZQTEUxQlFVMHNSMEZCUnl4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF6czdVVUZGY0VNN08wRkJSVVFzVVVGQlJ6czdPenM3T3pzN096czdWVUZCUVN4VlFVRkRMRWRCUVVjc1JVRkJSVHRCUVVOUUxHRkJRVWtzU1VGQlNTeEhRVUZITEVWQlFVVXNRMEZCUXp0QlFVTmtMR05CUVVzc1NVRkJTU3hEUVVGRExFZEJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzBGQlEycERMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdWVUZEZEVNN1FVRkRSQ3huUWtGQlR5eEpRVUZKTEVOQlFVTTdVVUZEWWpzN1FVRkZSQ3hYUVVGTk96czdPenM3T3pzN096dFZRVUZCTEZWQlFVTXNUVUZCVFN4RlFVRkZPMEZCUTJJc1lVRkJTU3hKUVVGSkxFZEJRVWNzUlVGQlJTeERRVUZETzBGQlEyUXNZMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3UVVGRE9VSXNaVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0VlFVTTFRenRCUVVORUxHZENRVUZQTEVsQlFVa3NRMEZCUXp0UlFVTmlPenRCUVV0SExGTkJRVWs3V1VGSVFTeFpRVUZITzBGQlExUXNaMEpCUVU4c1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTTdVVUZETlVJN1dVRkRUeXhWUVVGRExFTkJRVU1zUlVGQlJUczdPMEZCUTFZc1lVRkJTU3hSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGNrTXNZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFVkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMEZCUXpWQ0xHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNWVUZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhGUVVGTE8wRkJRM0JDTEdWQlFVa3NVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSVHRCUVVOcVF5eHRRa0ZCU3l4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEzSkRPMVZCUTBZc1EwRkJReXhEUVVGRE8xRkJRMG83TzBGQlMwY3NXVUZCVHp0WlFVaEJMRmxCUVVjN1FVRkRXaXhuUWtGQlR5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF6dFJRVU12UWp0WlFVTlZMRlZCUVVNc1EwRkJReXhGUVVGRk96czdRVUZEWWl4aFFVRkpMRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOeVF5eGhRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEZWtJc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFZRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRVZCUVVzN1FVRkRjRUlzWlVGQlNTeFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMEZCUTJwRExHMUNRVUZMTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGNrTTdWVUZEUml4RFFVRkRMRU5CUVVNN1VVRkRTanM3T3p0VlFYaFFhMElzVFVGQlRUczdPMnRDUVVGT0xFMUJRVTBzUXpzN096czdPMEZETVVJelFpeGhRVUZaTEVOQlFVTTdPenM3T3pzN08wdEJSVTRzU1VGQlNTeDFRMEZCVFN4RFFVRmpPenRMUVVONFFpeExRVUZMTEhWRFFVRk5MRVZCUVZNN08wdEJSVTRzVVVGQlVUdEJRVVZrTEZsQlJrMHNVVUZCVVN4SFFVVjFRenRUUVVGd1JDeFJRVUZSTEdkRFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RFFVRkRPMU5CUVVVc1NVRkJTU3huUTBGQlF5eEpRVUZKTzFOQlFVVXNVVUZCVVN4blEwRkJReXhMUVVGTE96c3lRa0ZHTjBNc1VVRkJVVHM3UVVGSGNrSXNVMEZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhSUVVGUkxFTkJRVU03UVVGRGRrSXNVMEZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZPMEZCUXk5Q0xGZEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03VFVGRE4wSTdRVUZEUkN4VFFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF6dEJRVU5zUWl4VFFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSExGRkJRVkVzUTBGQlF6czdRVUZGZWtJc1UwRkJTU3hEUVVGRExGTkJRVk1zUjBGQlJ5eEpRVUZKTEV0QlFVc3NRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN08wRkJSWFJFTEZOQlFVa3NRMEZCUXl4WFFVRlhMRWRCUVVjN1FVRkRha0lzVjBGQlRTeERRVUZETzBGQlExQXNZVUZCVVN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETzBGQlF6bENMR05CUVZNc1JVRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4SFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOcVF5eGxRVUZWTEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTTdUVUZEZEVNc1EwRkJRenM3UVVGRlJpeFRRVUZKTEVsQlFVa3NRMEZCUXl4UlFVRlJMRXRCUVVjc1MwRkJTeXhGUVVGRk8wRkJRM3BDTEZkQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0TlFVTTVRaXhOUVVGTk8wRkJRMHdzVjBGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRE8wMUJRM2hDTzBsQlIwbzdPMmRDUVRGQ1owSXNVVUZCVVR0QlFXZERja0lzVTBGQlNUdFpRVXBCTEZsQlFVYzdRVUZEVkN4blFrRkJUeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETzFGQlEyNUNPMWxCUlU4c1ZVRkJReXhKUVVGSkxFVkJRVVU3UVVGRFdDeGhRVUZKTEVWQlFVVXNTVUZCU1N4TFFVRkxMRWxCUVVrc1NVRkJTU3hKUVVGSkxFdEJRVXNzVFVGQlRTeEpRVUZKTEVsQlFVa3NTMEZCU3l4UlFVRlJMRWxCUVVrc1NVRkJTU3hMUVVGTExFOUJRVThzUTBGQlF5eEZRVUZGTzBGQlF6bEZMR3RDUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEN0RVFVRXJSQ3hEUVVGRExFTkJRVU03UVVGREwwVXNhMEpCUVU4N1ZVRkRWanRCUVVORUxHRkJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRPMEZCUTJ4Q0xHRkJRVWtzU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUlR0QlFVTnFRaXhsUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VlVGRE9VSTdVVUZEU2pzN1FVRk5SeXhWUVVGTE8xbEJTa0VzV1VGQlJ6dEJRVU5XTEdkQ1FVRlBMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMUZCUTI1RE8xbEJSVkVzVlVGQlF5eERRVUZETEVWQlFVVTdRVUZEV0N4aFFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM2hET3p0QlFVVkVMRlZCUVVzN1kwRkJRU3hwUWtGQlJ6dEJRVU5PTEdGQlFVa3NTVUZCU1N4RFFVRkRMRkZCUVZFc1MwRkJSeXhMUVVGTExFVkJRVVU3UVVGRGVrSXNaVUZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUXpkQ0xHdENRVUZQTEVsQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenRWUVVOd1FqdEJRVU5FTEdGQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1FVRkROME1zWVVGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlF6ZENMR2RDUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTTdVVUZEYmtJN08wRkJSVVFzVDBGQlJUdGpRVUZCTEdOQlFVYzdRVUZEU0N4aFFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03UVVGRGFFSXNZVUZCU1N4RFFVRkRMRkZCUVZFc1NVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXp0QlFVTndReXhuUWtGQlR5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMUZCUTI1Q096dEJRVVZFTEZOQlFVazdZMEZCUVN4blFrRkJSenRCUVVOTUxHRkJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0QlFVTm9RaXhoUVVGSkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NRMEZCUXl4RlFVRkZPMEZCUTNKQ0xHVkJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4SlFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETzFWQlF6TkZPMEZCUTBRc1owSkJRVThzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0UlFVTnVRanM3UVVGRlJDeFhRVUZOTzJOQlFVRXNhMEpCUVVjN1FVRkRVQ3hoUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1FVRkRMME1zWjBKQlFVOHNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJRenRSUVVOdVFqczdRVUZGUkN4VlFVRkxPMk5CUVVFc2FVSkJRVWM3UVVGRFRpeGhRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXp0QlFVTjRReXhoUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRE8wRkJRM0pETEdGQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0QlFVTjBReXhuUWtGQlR5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMUZCUTI1Q096czdPenM3TzBGQlFVRTdPenM3VlVGeVJtZENMRkZCUVZFN096dHJRa0ZCVWl4UlFVRlJMRU03T3pzN096dEJRMHczUWl4aFFVRlpMRU5CUVVNN096czdPenM3TzB0QlJVNHNTVUZCU1N4MVEwRkJUU3hEUVVGak96dExRVVZXTEV0QlFVczdRVUZGV0N4alFVWk5MRXRCUVVzc1IwRkZjME03WVVGQmFFUXNSMEZCUnl4blEwRkJReXhEUVVGRE8yRkJRVVVzUjBGQlJ5eG5RMEZCUXl4RFFVRkRPMkZCUVVVc1MwRkJTeXhuUTBGQlF5eERRVUZETzJGQlFVVXNVMEZCVXl4blEwRkJReXhEUVVGRE8yRkJRVVVzU1VGQlNTeG5RMEZCUXl4TFFVRkxPenNyUWtGR2VrTXNTMEZCU3pzN1FVRkhiRUlzWVVGQlNTeERRVUZETEVkQlFVY3NSMEZCUnl4SFFVRkhMRU5CUVVNN1FVRkRaaXhoUVVGSkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXp0QlFVTm1MR0ZCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUzBGQlN5eERRVUZETzBGQlEyNUNMR0ZCUVVrc1EwRkJReXhUUVVGVExFZEJRVWNzVTBGQlV5eERRVUZETzBGQlF6TkNMR0ZCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETzAxQlEzQkNPenRyUWtGU1owSXNTMEZCU3p0QlFWVjBRaXhoUVVGSk8yOUNRVUZCTEdkQ1FVRkhPMEZCUTBnc2NVSkJRVWtzUTBGQlF5eExRVUZMTEVsQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RlFVRkZMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dEJRVU0zUkN4eFFrRkJTU3hKUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRVZCUVVVN1FVRkRka0lzZVVKQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVrc1JVRkJSVHRCUVVOWUxEWkNRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU03YzBKQlEzcENMRTFCUVUwN1FVRkRTQ3cyUWtGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTTdjMEpCUXpGRE8ydENRVU5LT3p0QlFVVkVMSEZDUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1JVRkJSVHRCUVVOMlFpeDVRa0ZCU1N4SlFVRkpMRU5CUVVNc1NVRkJTU3hGUVVGRk8wRkJRMWdzTmtKQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF6dHpRa0ZEZWtJc1RVRkJUVHRCUVVOSUxEWkNRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXp0elFrRkRNVU03YTBKQlEwbzdRVUZEUkN4M1FrRkJUeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETzJOQlEzSkNPenM3TzFsQk5VSm5RaXhMUVVGTE96czdhMEpCUVV3c1MwRkJTeXhET3pzN096czdRVU5LTVVJc1lVRkJXU3hEUVVGRE96czdPenM3T3p0TFFVVk9MRWxCUVVrc2RVTkJRVTBzUTBGQll6czdTMEZEZUVJc1MwRkJTeXgxUTBGQlRTeEZRVUZUT3p0TFFVVk9MRTlCUVU4N1FVRkZZaXhqUVVaTkxFOUJRVThzUjBGRk1rSTdZVUZCZGtNc1IwRkJSeXhuUTBGQlF5eERRVUZETzJGQlFVVXNSMEZCUnl4blEwRkJReXhGUVVGRk8yRkJRVVVzU1VGQlNTeG5RMEZCUXl4SlFVRkpPMkZCUVVVc1MwRkJTeXhuUTBGQlF5eExRVUZMT3pzclFrRkdhRU1zVDBGQlR6czdRVUZIY0VJc1lVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVOQlFVTTdRVUZEWml4aFFVRkpMRU5CUVVNc1IwRkJSeXhIUVVGSExFZEJRVWNzUTBGQlF6dEJRVU5tTEdGQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1MwRkJTeXhEUVVGRE8wRkJRMjVDTEdGQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8wRkJRMnBDTEdGQlFVa3NRMEZCUXl4VFFVRlRMRWRCUVVjc1NVRkJTU3hMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NSVUZCUlN4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGREwwTXNZVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhMUVVGSExFdEJRVXNzUlVGQlJUdEJRVU4wUWl4cFFrRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xVkJRemxDTEUxQlFVMDdRVUZEVEN4cFFrRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMVZCUTNoQ08wMUJRMG83TzJ0Q1FXSm5RaXhQUVVGUE8wRkJNRUp3UWl4aFFVRkpPMnRDUVZoQkxGVkJRVU1zU1VGQlNTeEZRVUZGTzBGQlExZ3NjVUpCUVVrc1JVRkJSU3hKUVVGSkxFdEJRVXNzU1VGQlNTeEpRVUZKTEVsQlFVa3NTMEZCU3l4TlFVRk5MRWxCUVVrc1NVRkJTU3hMUVVGTExGRkJRVkVzU1VGQlNTeEpRVUZKTEV0QlFVc3NUMEZCVHl4RFFVRkRMRVZCUVVVN1FVRkRPVVVzTkVKQlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc0swUkJRU3RFTEVOQlFVTXNRMEZCUXp0QlFVTXZSU3cwUWtGQlR6dHJRa0ZEVmp0QlFVTkVMSEZDUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXp0QlFVTnNRaXh4UWtGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RlFVRkZPMEZCUTJRc2VVSkJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dHJRa0ZET1VJN1kwRkRTanRyUWtGRlR5eFpRVUZITzBGQlExQXNkMEpCUVU4c1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF6dGpRVU55UWpzN1FVRkZSQ3hqUVVGTE8yOUNRVUZCTEdsQ1FVRkhPMEZCUTA0c2NVSkJRVWtzU1VGQlNTeERRVUZETEV0QlFVc3NTMEZCUnl4TFFVRkxMRVZCUVVVN1FVRkRkRUlzZVVKQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTTNRaXcwUWtGQlR5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNN2EwSkJRM0JDTzBGQlEwUXNjVUpCUVVrc1EwRkJReXhYUVVGWExFZEJRVWM3UVVGRGFrSXNlVUpCUVUwc1NVRkJTU3hEUVVGRExFZEJRVWM3UVVGRFpDd3lRa0ZCVVN4SlFVRkpMRU5CUVVNc1IwRkJSenRCUVVOb1FpdzBRa0ZCVXl4RlFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RlFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU03UVVGRE1VTXNOa0pCUVZVc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RlFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU03YTBKQlEzSkRMRU5CUVVNN1FVRkRSaXh4UWtGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTXhReXh4UWtGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlF6ZENMSGRDUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTTdZMEZEYmtJN08wRkJSVVFzVjBGQlJUdHZRa0ZCUVN4alFVRkhPMEZCUTBRc2NVSkJRVWtzUTBGQlF5eExRVUZMTEVWQlFVVXNRMEZCUXp0QlFVTmlMSEZDUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVsQlFVa3NTVUZCU1N4RFFVRkRMRWRCUVVjc1JVRkJSVHRCUVVONFFpeDVRa0ZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETzJ0Q1FVTjZRanRCUVVORUxIZENRVUZQTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNN1kwRkRja0k3TzBGQlJVUXNZVUZCU1R0dlFrRkJRU3huUWtGQlJ6dEJRVU5JTEhGQ1FVRkpMRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU03UVVGRFlpeHhRa0ZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVWQlFVVTdRVUZEZGtJc2VVSkJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJRenRyUWtGRGVrSTdRVUZEUkN4M1FrRkJUeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETzJOQlEzSkNPenRCUVVWRUxHVkJRVTA3YjBKQlFVRXNhMEpCUVVjN1FVRkRUQ3h4UWtGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVWQlFVVXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRM3BETEhkQ1FVRlBMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU03WTBGRGNrSTdPMEZCUlVRc1kwRkJTenR2UWtGQlFTeHBRa0ZCUnp0QlFVTktMSEZDUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRE8wRkJRemxDTEhGQ1FVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRPMEZCUXpsQ0xIRkNRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETzBGQlEyeERMSEZDUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03UVVGRGJrTXNkMEpCUVU4c1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF6dGpRVU55UWpzN096dFpRWHBGWjBJc1QwRkJUenM3TzJ0Q1FVRlFMRTlCUVU4c1F6czdPenM3TzBGRFREVkNMR0ZCUVZrc1EwRkJRenM3T3pzN096czdPenM3TzBGQlJXSXNTMEZCU1N4SFFVRkhMRWRCUVVjc2JVSkJRVThzUTBGQlF5eERRVUZoTEVOQlFVTXNRMEZCUXp0QlFVTnFReXhMUVVGSkxFbEJRVWtzUjBGQlJ5eHRRa0ZCVHl4RFFVRkRMRU5CUVdNc1EwRkJReXhEUVVGRE8wRkJRMjVETEV0QlFVa3NVMEZCVXl4SFFVRkhMRzFDUVVGUExFTkJRVU1zUTBGQmJVSXNRMEZCUXl4RFFVRkRPMEZCUXpkRExFdEJRVWtzU1VGQlNTeEhRVUZITEcxQ1FVRlBMRU5CUVVNc1JVRkJaMElzUTBGQlF5eERRVUZET3p0TFFVTjZRaXhYUVVGWExDdERRVUZOTEVWQlFYRkNPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3p0TFFYbEROMElzUzBGQlN6dEJRVVZpTEZsQlJsRXNTMEZCU3l4SFFVVldPekpDUVVaTExFdEJRVXM3TzBGQlNYUkNMRk5CUVVrc1QwRkJUeXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdPMEZCUlhoQ0xGTkJRVWtzVVVGQlVTeEhRVUZITzBGQlEySXNZVUZCVVN4RFFVRkRMRWRCUVVjc1JVRkJReXhIUVVGSExFTkJRVU03UVVGRGFrSXNZMEZCVXl4SFFVRkhPMEZCUTFvc1lVRkJVU3hWUVVGVk8wRkJRMnhDTEdsQ1FVRlpMRU5CUTFZc1EwRkJReXhIUVVGSExFVkJRVU1zUjBGQlJ5eERRVUZETEVWQlExUXNRMEZCUXl4SlFVRkpMRVZCUVVNc1NVRkJTU3hEUVVGRExFVkJRMWdzUTBGQlF5eEhRVUZITEVWQlFVTXNSMEZCUnl4RFFVRkRMRVZCUTFRc1EwRkJReXhKUVVGSkxFVkJRVU1zU1VGQlNTeERRVUZETEVWQlExZ3NRMEZCUXl4SFFVRkhMRVZCUVVNc1IwRkJSeXhEUVVGRExFVkJRMVFzUTBGQlF5eEpRVUZKTEVWQlFVTXNTVUZCU1N4RFFVRkRMRVZCUTFnc1EwRkJReXhIUVVGSExFVkJRVU1zUjBGQlJ5eERRVUZETEVWQlExUXNRMEZCUXl4SlFVRkpMRVZCUVVNc1NVRkJTU3hEUVVGRExFTkJRMW83VFVGRFJpeERRVUZET3p0QlFVVkdMR2REUVhSQ2FVSXNTMEZCU3l3MlEwRnpRbWhDTEZOQlFWTXNSVUZCUXl4UFFVRlBMRVZCUVVNc1VVRkJVU3hGUVVGRk96dEJRVVZzUXl4VFFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSE8wRkJRMWdzVVVGQlF5eEZRVUZGTEVsQlFVa3NTVUZCU1N4RFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eEZRVUZETEVkQlFVY3NRMEZCUXp0QlFVTjBRaXhSUVVGRExFVkJRVVVzU1VGQlNTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFVkJRVU1zUjBGQlJ5eERRVUZETzAxQlEzWkNMRU5CUVVNN096czdPMEZCUzBZc1UwRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWxCUVVrc1EwRkJRenM3UVVGRkwwSXNVMEZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSenRCUVVOa0xGRkJRVU1zUlVGQlJTeEpRVUZKTEZkQlFWY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUlVGQlF5eFpRVUZaTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU5vUml4UlFVRkRMRVZCUVVVc1NVRkJTU3hYUVVGWExFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVNc1ZVRkJWU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1RVRkRMMFVzUTBGQlF6dEJRVU5HTEZOQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhWUVVGVkxFTkJRVU03UVVGRGFFUXNVMEZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExGVkJRVlVzUTBGQlF6czdPenM3UVVGTGFFUXNVMEZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEZGQlFWRXNRMEZCUXpzN096czdRVUZMZGtNc1UwRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJRenM3T3pzN1FVRkxha01zVTBGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4RlFVRkZMRU5CUVVNN08wRkJSV3BDTEZOQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenM3UVVGRldpeFRRVUZKTEVOQlFVTXNaVUZCWlN4RlFVRkZMRU5CUVVNN1FVRkRka0lzVTBGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMGxCUldZN08yRkJOMFJyUWl4TFFVRkxPenRuUWtGQlRDeExRVUZMTzBGQkswUjRRaXh0UWtGQll6dGpRVUZCTERCQ1FVRkhPenRCUVVWbUxHRkJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6czdRVUZIYWtNc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE96czdRVUZKY0VNc1lVRkJTU3hEUVVGRExHVkJRV1VzUjBGQlJ5eEZRVUZGTEVOQlFVTTdPMEZCUlRGQ0xHTkJRVXNzU1VGQlNTeERRVUZETEVkQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNSVUZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSVHRCUVVOMlF5eGxRVUZKTEdOQlFXTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZET3p0QlFVVXhReXhsUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZkQlFWY3NRMEZCUXl4alFVRmpMRU5CUVVNc1EwRkJRenM3UVVGRmVrTXNaVUZCU1N4RFFVRkRMR1ZCUVdVc1EwRkJReXhKUVVGSkxFTkJRVU1zWTBGQll5eERRVUZETEVOQlFVTTdWVUZETTBNN1VVRkZSanM3UVVGRlJDeHJRa0ZCWVR0alFVRkJMSGxDUVVGSE96dEJRVVZXTEdGQlFVa3NRMEZCUXl4aFFVRmhMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6czdRVUZGZEVRc1lVRkJTU3hEUVVGRExGVkJRVlVzUjBGQlJ6dEJRVU5vUWl4alFVRkhMRVZCUVVVc1JVRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eGhRVUZoTEVkQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGRGVFTXNRMEZCUXp0QlFVTkdMR0ZCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF6czdRVUZGTjBNc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZETVVNc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFZEJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZETTBNc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RlFVRkRMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdPMEZCUldoRUxHTkJRVXNzU1VGQlNTeERRVUZETEVkQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNSVUZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSVHRCUVVOMlF5eGxRVUZKTEdOQlFXTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlF6ZERMR1ZCUVVrc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRMMElzZVVKQlFXTXNRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRGVFUXNlVUpCUVdNc1EwRkJReXhaUVVGWkxFTkJRVU1zU1VGQlNTeEZRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZEZWtRc2VVSkJRV01zUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RlFVRkRMRWxCUVVrc1EwRkJReXhoUVVGaExFZEJRVU1zUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpORUxIbENRVUZqTEVOQlFVTXNXVUZCV1N4RFFVRkRMR05CUVdNc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dFZRVU5zUkRzN1FVRkZTQ3hoUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTNaRUxHRkJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRVZCUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN096czdPMEZCUzNaRUxHRkJRVWtzUTBGQlF5eGxRVUZsTEVWQlFVVXNRMEZCUXp0QlFVTjJRaXhoUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdVVUZGYWtJN08wRkJSVVFzYlVKQlFXTTdZMEZCUVN3d1FrRkJSenM3UVVGRlppeGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhsUVVGbExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNN1FVRkRkRVFzWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN08wRkJSWGhFTEdOQlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUjBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1JVRkJReXhEUVVGRExFVkJRVVVzUlVGQlJUdEJRVU4yUXl4bFFVRkpMR05CUVdNc1IwRkJSeXhKUVVGSkxFTkJRVU1zWlVGQlpTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpkRExIbENRVUZqTEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMEZCUTNoRUxIbENRVUZqTEVOQlFVTXNXVUZCV1N4RFFVRkRMRkZCUVZFc1JVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMVZCUXpORU8xRkJSVVk3TzBGQlJVUXNWMEZCVFR0alFVRkJMR3RDUVVGSE8wRkJRMUFzWVVGQlNTeERRVUZETEdWQlFXVXNSMEZCUnp0QlFVTnlRaXhaUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1ZVRkJWU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTzBGQlEzWkRMRmxCUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFR0VlFVTjJSQ3hEUVVGRE96dEJRVVZHTEdGQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzUlVGQlF5eEpRVUZKTEVOQlFVTXNaVUZCWlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRM0JFTEdGQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzUlVGQlF5eEpRVUZKTEVOQlFVTXNaVUZCWlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM0pFT3p0QlFVZEVMRlZCUVVzN1kwRkJRU3hwUWtGQlJ6dEJRVU5PTEdGQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUTNCRExHRkJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETzBGQlEzQkRMR0ZCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dFJRVU5pT3p0QlFVVkVMRk5CUVVrN1kwRkJRU3huUWtGQlJ6dEJRVU5NTEdGQlFVa3NTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSVHRCUVVOb1FpeGxRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTI1RExHVkJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdPenM3TzBGQlMyNURMR1ZCUVVrc1EwRkJReXhsUVVGbExFVkJRVVVzUTBGQlF6dEJRVU4yUWl4bFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1FVRkRhRU1zWlVGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMVZCUTJZN1VVRkRSanM3UVVGRlJDeFpRVUZQTzJOQlFVRXNiVUpCUVVjN1FVRkRVaXhoUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdVVUZEWmpzN1FVRkZSeXhsUVVGVk8xbEJRVUVzV1VGQlJ6dEJRVU5tTEdkQ1FVRlBPMEZCUTB3c1dVRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRlZCUVZVN1FVRkRNVUlzV1VGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExGVkJRVlU3VlVGRE0wSXNRMEZCUXp0UlFVTklPenRCUVVWRUxHOUNRVUZsTzJOQlFVRXNNa0pCUVVjN096dEJRVU5vUWl4aFFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eFpRVUZaTEVOQlFVVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZGTEVOQlFVTTdRVUZEYmtRc1lVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNXVUZCV1N4RFFVRkZMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUlN4RFFVRkRPMEZCUTI1RUxHRkJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NSVUZCUlN4RFFVRkRPMEZCUTJwQ0xHRkJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNUMEZCVHl4RFFVRkRMRlZCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlN6dEJRVU0zUWl4bFFVRkpMRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJReXhOUVVGTExFdEJRVXNzUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVNc1RVRkJTeXhOUVVGTkxFVkJRVU1zVFVGQlN5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1IwRkJReXhOUVVGTExFdEJRVXNzUlVGQlF5eERRVUZETEVOQlFVTXNSMEZCUXl4TlFVRkxMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEpRVUZGTEUxQlFVc3NUVUZCVFN4RFFVRkRMRU5CUVVNN1FVRkRkRWtzWlVGQlNTeExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVU1zVVVGQlVTeEpRVUZGTEUxQlFVc3NTMEZCU3l4SFFVRkRMRTFCUVVzc1MwRkJTeXhEUVVGRExFVkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpsRUxHbENRVUZMTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRGVFSXNhVUpCUVVzc1pVRkJaU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEZsQlFWa3NRMEZCUXl4alFVRmpMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03VlVGRE4wUXNRMEZCUXl4RFFVRkRPMUZCUTBvN08wRkJUMFFzWlVGQlZUczdPenM3T3pzN1kwRkJRU3h2UWtGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkZPMEZCUTJRc1lVRkJTU3hSUVVGUkxFZEJRVWM3UVVGRFlpeFpRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTE8wRkJRMllzV1VGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUVHRWUVVOcVFpeERRVUZETzBGQlEwWXNZVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMEZCUTJwRExHRkJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dEJRVU5xUXl4aFFVRkpMRU5CUVVNc1pVRkJaU3hGUVVGRkxFTkJRVU03UVVGRGRrSXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMEZCUTJoRExHRkJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0UlFVTm1PenRCUVZGRUxHZENRVUZYT3pzN096czdPenM3WTBGQlFTeHhRa0ZCUXl4TFFVRkxMRVZCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJUczdRVUZGY2tJc1lVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU0zUWl4aFFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhIUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTTNSQ3hoUVVGSkxFTkJRVU1zWlVGQlpTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF5eEhRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVNNVJDeGhRVUZKTEVOQlFVTXNaVUZCWlN4RlFVRkZMRU5CUVVNN1FVRkRka0lzWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBGQlEyaERMR0ZCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFJRVVZtT3pzN096czdPenM3UVVGQlFUczdPMVZCZUU1clFpeExRVUZMTzBsQlFWTXNVMEZCVXpzN2EwSkJRWFpDTEV0QlFVc3NRenM3T3pzN08wRkRMME14UWl4aFFVRlpMRU5CUVVNN096czdPenM3T3pzN1FVRkZZaXhMUVVGSkxFbEJRVWtzUjBGQlJ5eHRRa0ZCVHl4RFFVRkRMRU5CUVdNc1EwRkJReXhEUVVGRE8wRkJRMjVETEV0QlFVa3NSMEZCUnl4SFFVRkhMRzFDUVVGUExFTkJRVU1zUTBGQllTeERRVUZETEVOQlFVTTdRVUZEYWtNc1MwRkJTU3hUUVVGVExFZEJRVWNzYlVKQlFVOHNRMEZCUXl4RFFVRnRRaXhEUVVGRExFTkJRVU03T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdTMEY1UW5oQ0xFbEJRVWs3UVVGRldpeFpRVVpSTEVsQlFVa3NSMEZGVkRzeVFrRkdTeXhKUVVGSk96dEJRVWx5UWl4VFFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZET3p0QlFVVjRRaXhUUVVGSkxGRkJRVkVzUjBGQlJ6dEJRVU5pTEdGQlFWRXNRMEZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hEUVVGRE8wMUJRMmhDTEVOQlFVTTdPMEZCUlVZc1owTkJWbWxDTEVsQlFVa3NOa05CVldZc1UwRkJVeXhGUVVGRExFOUJRVThzUlVGQlF5eFJRVUZSTEVWQlFVVTdPMEZCUld4RExGTkJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRPenRCUVVWd1FpeFRRVUZKTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNN096czdRVUZKWWl4VFFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE96czdRVUZITVVNc1UwRkJTU3hOUVVGTkxFTkJRVU1zYzBKQlFYTkNMRVZCUVVVN1FVRkRiRU1zVjBGQlNTeERRVUZETEcxQ1FVRnRRaXhIUVVGSExFMUJRVTBzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXh0UWtGQmJVSXNSVUZCUlN4SlFVRkpMRU5CUVVNc1YwRkJWeXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzAxQlEycEhMRTFCUVUwN1FVRkRTaXhYUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEV0QlFVc3NRMEZCUXp0QlFVTnlRaXhYUVVGSkxFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTTdUVUZEZGtJN096czdPenM3U1VGWFJqdEJRVmhGTzJGQk1VSm5RaXhKUVVGSk96dG5Ra0ZCU2l4SlFVRkpPMEZCZDBOMlFpeHRRa0ZCWXp0alFVRkJMREJDUVVGSE96dEJRVVZtTEdGQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTm9ReXhoUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03UVVGRGNFTXNZVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMEZCUTNCRExHRkJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6czdRVUZGY0VNc1lVRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJReTlDTEdGQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTXZRaXhoUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03TzBGQlJTOUNMR0ZCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVOb1F5eGhRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZEYUVNc1lVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE96dEJRVVZvUXl4aFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eFRRVUZUTEVWQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1FVRkRlRU1zWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1UwRkJVeXhGUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEzaERMR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEZOQlFWTXNSVUZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVONFF5eGhRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmxCUVZrc1EwRkJReXhUUVVGVExFVkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZEZWtNc1lVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFpRVUZaTEVOQlFVTXNVMEZCVXl4RlFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRM3BETEdGQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1dVRkJXU3hEUVVGRExGTkJRVk1zUlVGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXpzN1FVRkZla01zWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVTXNRMEZCUXl4SFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8wRkJRMmhFTEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzUlVGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkRMRU5CUVVNc1IwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU5vUkN4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZITEVWQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dEJRVU01UXl4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGbEJRVmtzUTBGQlF5eFRRVUZUTEVWQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN08wRkJSVE5ETEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzUlVGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkRMRU5CUVVNc1IwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dEJRVU5vUkN4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGbEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJReXhEUVVGRExFZEJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEYUVRc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFZEJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdRVUZET1VNc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNVMEZCVXl4RlFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE96dEJRVVV6UXl4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGbEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJReXhEUVVGRExFZEJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdRVUZEYUVRc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFZEJRVU1zUTBGQlF5eEhRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTJoRUxHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVVjc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMEZCUXpsRExHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RFFVRkRMRk5CUVZNc1JVRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6czdRVUZITTBNc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNZMEZCWXl4RlFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRMnhGTEdGQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExHTkJRV01zUlVGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFZEJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTnNSU3hoUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4alFVRmpMRVZCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03TzBGQlJXeEZMR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVOMlF5eGhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhOUVVGTkxFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTTdRVUZEZGtNc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RlFVRkZMRTFCUVUwc1EwRkJReXhEUVVGRE96dEJRVVYyUXl4aFFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGbEJRVmtzUTBGQlF5eGpRVUZqTEVWQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRia1VzWVVGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WlFVRlpMRU5CUVVNc1kwRkJZeXhGUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEyNUZMR0ZCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zV1VGQldTeERRVUZETEdOQlFXTXNSVUZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenM3UVVGRmJrVXNZVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhaUVVGWkxFTkJRVU1zVFVGQlRTeEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRPMEZCUTNoRExHRkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU40UXl4aFFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGbEJRVmtzUTBGQlF5eE5RVUZOTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNN08wRkJSM2hETEdGQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1dVRkJXU3hEUVVGRExFZEJRVWNzUlVGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRekZETEdGQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1dVRkJXU3hEUVVGRExFZEJRVWNzUlVGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkRMRU5CUVVNc1IwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU0zUXl4aFFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGbEJRVmtzUTBGQlF5eFhRVUZYTEVWQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1FVRkROVU1zWVVGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WlFVRlpMRU5CUVVNc1lVRkJZU3hGUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBGQlF6bERMR0ZCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zV1VGQldTeERRVUZETEdkQ1FVRm5RaXhGUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEyaEVMR0ZCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zV1VGQldTeERRVUZETEZOQlFWTXNSVUZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVONlF5eGhRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmxCUVZrc1EwRkJReXhoUVVGaExFVkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdRVUZEYUVRc1lVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFhRVUZYTEVkQlFVY3NUVUZCVFN4RFFVRkRPenRCUVVkb1F5eGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdRVUZEZGtNc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wRkJRM1pETEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXpzN1FVRkZka01zWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzBGQlEzQkRMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRCUVVOd1F5eGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdPMEZCUlhCRExHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEJRVU55UXl4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1FVRkRja01zWVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZET3p0QlFVVnlReXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRmRFTTdPMEZCUlVRc2JVSkJRV003WTBGQlFTd3dRa0ZCUnpzN1FVRkZaaXhoUVVGSkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVWQlFVVTdRVUZEYUVJc1pVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNaVUZCWlN4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETzBGQlEzaEVMR1ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEzQkVMR1ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEzQkVMR1ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEzQkVMR1ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEZGQlFWRXNSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEzUkVMR1ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEZGQlFWRXNSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEzUkVMR1ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEZGQlFWRXNSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEzUkVMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEZGQlFWRXNSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEyNUVMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEZGQlFWRXNSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEyNUVMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEZGQlFWRXNSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEyNUVMR1ZCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zV1VGQldTeERRVUZETEZGQlFWRXNSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEzQkVMR1ZCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zV1VGQldTeERRVUZETEZGQlFWRXNSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEzQkVMR1ZCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zV1VGQldTeERRVUZETEZGQlFWRXNSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEzQkVMR1ZCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFWQlEyNUVMRTFCUVUwN1FVRkRUQ3hsUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4bFFVRmxMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTTdRVUZEZEVRc1pVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdRVUZETVVRc1pVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdRVUZETVVRc1pVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdRVUZETVVRc1pVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNVVUZCVVN4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdRVUZETlVRc1pVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNVVUZCVVN4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdRVUZETlVRc1pVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNVVUZCVVN4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdRVUZETlVRc1pVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNVVUZCVVN4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdRVUZEZWtRc1pVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNVVUZCVVN4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdRVUZEZWtRc1pVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNVVUZCVVN4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdRVUZEZWtRc1pVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFpRVUZaTEVOQlFVTXNVVUZCVVN4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdRVUZETVVRc1pVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFpRVUZaTEVOQlFVTXNVVUZCVVN4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdRVUZETVVRc1pVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFpRVUZaTEVOQlFVTXNVVUZCVVN4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdRVUZETVVRc1pVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdWVUZEZWtRN1VVRkZSanM3UVVGRlJDeFhRVUZOTzJOQlFVRXNaMEpCUVVNc1EwRkJReXhGUVVGRk8wRkJRMUlzWVVGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkRPenRCUVVWbUxHVkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNN1FVRkRaaXhsUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUTJoQ0xHVkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNN096dEJRVWRvUWl4WlFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTTNRaXhaUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNM1FpeFpRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eEZRVUZETEVkQlFVY3NSVUZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03TzBGQlJ6VkNMR1ZCUVVrc1dVRkJXU3hIUVVGSE8wRkJRMnBDTEd0Q1FVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExFVkJRVVVzUjBGQlF5eEhRVUZITzBGQlEyeENMR2RDUVVGSExFVkJRVVVzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUlN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVWQlFVTXNSMEZCUnl4RlFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFZEJRVU1zUjBGQlJ5eEZRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRWRCUVVNc1IwRkJSeXhEUVVGRExFVkJRVWNzU1VGQlNTeERRVUZETEVWQlFVVXNSMEZCUXl4SFFVRkhMRVZCUVVVc1NVRkJTU3hEUVVGRExFVkJRVVVzUjBGQlF5eEhRVUZITEVOQlFVVTdXVUZEZWtZc1EwRkJRenRCUVVOR0xHVkJRVWtzWVVGQllTeEhRVUZITzBGQlEyeENMR3RDUVVGTExFVkJRVVVzU1VGQlNTeERRVUZETEVWQlFVVXNSMEZCUXl4SFFVRkhPMEZCUTJ4Q0xHZENRVUZITEVWQlFVVXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJSU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNSVUZCUXl4SFFVRkhMRVZCUVVNc1EwRkJReXhGUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVkQlFVTXNSMEZCUnl4RlFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFZEJRVU1zUjBGQlJ5eERRVUZETEVWQlFVY3NTVUZCU1N4RFFVRkRMRVZCUVVVc1IwRkJReXhIUVVGSExFVkJRVVVzU1VGQlNTeERRVUZETEVWQlFVVXNSMEZCUXl4SFFVRkhMRU5CUVVVN1dVRkRla1lzUTBGQlF6czdRVUZGUml4bFFVRkpMRlZCUVZVc1IwRkJSeXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NSVUZCUlN4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RlFVRkZMRmxCUVZrc1EwRkJReXhMUVVGTExFVkJRVVVzV1VGQldTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUXpOS0xHVkJRVWtzVjBGQlZ5eEhRVUZITEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1JVRkJSU3hKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFVkJRVVVzWVVGQllTeERRVUZETEV0QlFVc3NSVUZCUlN4aFFVRmhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03TzBGQlJUbEtMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NSVUZCUlN4VlFVRlZMRU5CUVVNc1EwRkJRenRCUVVONFF5eGxRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGSExFVkJRVVVzVjBGQlZ5eERRVUZETEVOQlFVTTdPMEZCVFRGRExIVkNRVUZaTEVkQlFVYzdRVUZEWWl4clFrRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eEZRVUZGTEVkQlFVTXNSMEZCUnp0QlFVTnNRaXhuUWtGQlJ5eEZRVUZGTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRWRCUVVjc1JVRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeEhRVUZETEVkQlFVY3NSVUZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hIUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZITEVsQlFVa3NRMEZCUXl4RlFVRkZMRWRCUVVNc1IwRkJSeXhGUVVGRkxFbEJRVWtzUTBGQlF5eEZRVUZGTEVkQlFVTXNSMEZCUnl4RFFVRkZPMWxCUTNwR0xFTkJRVU03UVVGRFJpeDNRa0ZCWVN4SFFVRkhPMEZCUTJRc2EwSkJRVXNzUlVGQlJTeEpRVUZKTEVOQlFVTXNSVUZCUlN4SFFVRkRMRWRCUVVjN1FVRkRiRUlzWjBKQlFVY3NSVUZCUlN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RlFVRkRMRWRCUVVjc1JVRkJReXhEUVVGRExFVkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNSMEZCUXl4SFFVRkhMRVZCUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUjBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUnl4SlFVRkpMRU5CUVVNc1JVRkJSU3hIUVVGRExFZEJRVWNzUlVGQlJTeEpRVUZKTEVOQlFVTXNSVUZCUlN4SFFVRkRMRWRCUVVjc1EwRkJSVHRaUVVONlJpeERRVUZET3p0QlFVVkdMSEZDUVVGVkxFZEJRVWNzUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1JVRkJSU3haUVVGWkxFTkJRVU1zUzBGQlN5eEZRVUZGTEZsQlFWa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRCUVVOMlNpeHpRa0ZCVnl4SFFVRkhMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUlVGQlJTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eEZRVUZGTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVWQlFVVXNZVUZCWVN4RFFVRkRMRXRCUVVzc1JVRkJSU3hoUVVGaExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdPMEZCUlRGS0xHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVVjc1JVRkJSU3hWUVVGVkxFTkJRVU1zUTBGQlF6dEJRVU40UXl4bFFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZITEVWQlFVVXNWMEZCVnl4RFFVRkRMRU5CUVVNN08wRkJUekZETEhWQ1FVRlpMRWRCUVVjN1FVRkRZaXhyUWtGQlN5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RlFVRkZMRWRCUVVNc1IwRkJSenRCUVVOc1FpeG5Ra0ZCUnl4RlFVRkZMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhGUVVGRExFZEJRVWNzUlVGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4SFFVRkRMRWRCUVVjc1JVRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeEhRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkhMRWxCUVVrc1EwRkJReXhGUVVGRkxFZEJRVU1zUjBGQlJ5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RlFVRkZMRWRCUVVNc1IwRkJSeXhEUVVGRk8xbEJRM3BHTEVOQlFVTTdRVUZEUml4M1FrRkJZU3hIUVVGSE8wRkJRMlFzYTBKQlFVc3NSVUZCUlN4SlFVRkpMRU5CUVVNc1JVRkJSU3hIUVVGRExFZEJRVWM3UVVGRGJFSXNaMEpCUVVjc1JVRkJSU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZGTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhGUVVGRExFZEJRVWNzUlVGQlF5eERRVUZETEVWQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1IwRkJReXhIUVVGSExFVkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNSMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSeXhKUVVGSkxFTkJRVU1zUlVGQlJTeEhRVUZETEVkQlFVY3NSVUZCUlN4SlFVRkpMRU5CUVVNc1JVRkJSU3hIUVVGRExFZEJRVWNzUTBGQlJUdFpRVU42Uml4RFFVRkRPenRCUVVWR0xIRkNRVUZWTEVkQlFVY3NSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFVkJRVVVzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUlVGQlJTeFpRVUZaTEVOQlFVTXNTMEZCU3l4RlFVRkZMRmxCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU4yU2l4elFrRkJWeXhIUVVGSExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NSVUZCUlN4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRVZCUVVVc1lVRkJZU3hEUVVGRExFdEJRVXNzUlVGQlJTeGhRVUZoTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN08wRkJSVEZLTEdWQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFZEJRVWNzUlVGQlJTeFZRVUZWTEVOQlFVTXNRMEZCUXp0QlFVTjRReXhsUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRVZCUVVVc1YwRkJWeXhEUVVGRExFTkJRVU03T3pzN096czdPenM3T3pzN096czdPenRCUVhWQ01VTXNaVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVVU3UVVGRGJFSXNZMEZCUXl4RlFVRkZMRU5CUVVNN1FVRkRTaXhqUVVGRExFVkJRVVVzUTBGQlF6dEJRVU5LTEdOQlFVTXNSVUZCUlN4RFFVRkRPMWxCUTB3c1EwRkJReXhEUVVGRE8xVkJSVW83VVVGRlJqczdRVUZGUkN4VlFVRkxPMk5CUVVFc2FVSkJRVWM3UVVGRFRpeGhRVUZKTEUxQlFVMHNRMEZCUXl4elFrRkJjMElzUlVGQlJUdEJRVU5xUXl4bFFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXp0VlFVTTFRanRSUVVOR096dEJRVmRITEZkQlFVMDdPenM3T3pzN1dVRktRU3haUVVGSE8wRkJRMWdzWjBKQlFVOHNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJRenRSUVVOeVFqdFpRVVZUTEZWQlFVTXNSVUZCUlN4RlFVRkZPMEZCUTJJc1lVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eEZRVUZGTEVOQlFVTTdRVUZEYkVJc1lVRkJTU3hEUVVGRExHTkJRV01zUlVGQlJTeERRVUZETzFGQlEzWkNPenRCUVVWRUxHdENRVUZoTzJOQlFVRXNlVUpCUVVjN1FVRkRaQ3hsUVVGTkxFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc2JVSkJRVzFDTEVWQlFVVXNTVUZCU1N4RFFVRkRMRmRCUVZjc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU14UlRzN096dFZRWEpTYTBJc1NVRkJTVHRKUVVGVExGTkJRVk03TzJ0Q1FVRjBRaXhKUVVGSkxFTTdPenM3T3p0QlF6ZENla0lzWVVGQldTeERRVUZET3pzN096czdPenM3TzBGQlJXSXNTMEZCU1N4SFFVRkhMRWRCUVVjc2JVSkJRVThzUTBGQlF5eERRVUZoTEVOQlFVTXNRMEZCUXp0QlFVTnFReXhMUVVGSkxFbEJRVWtzUjBGQlJ5eHRRa0ZCVHl4RFFVRkRMRU5CUVdNc1EwRkJReXhEUVVGRE8wRkJRMjVETEV0QlFVa3NVMEZCVXl4SFFVRkhMRzFDUVVGUExFTkJRVU1zUTBGQmJVSXNRMEZCUXl4RFFVRkRPMEZCUXpkRExFdEJRVWtzWTBGQll5eEhRVUZITEcxQ1FVRlBMRU5CUVVNc1JVRkJPRUlzUTBGQlF5eERRVUZETzBGQlF6ZEVMRXRCUVVrc1MwRkJTeXhIUVVGSExHMUNRVUZQTEVOQlFVTXNRMEZCWlN4RFFVRkRMRU5CUVVNN08wdEJTUzlDTEZsQlFWazdRVUZGVEN4WlFVWlFMRmxCUVZrc1IwRkZSanM3T3pKQ1FVWldMRmxCUVZrN08wRkJTV1FzVTBGQlNTeFBRVUZQTEVkQlFVY3NRMEZCUXl4UFFVRlBMRVZCUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03TzBGQlJXaERMRk5CUVVrc1VVRkJVU3hIUVVGSE8wRkJRMklzWVVGQlVTeERRVUZETEVkQlFVY3NSVUZCUXl4RlFVRkZMRU5CUVVNN1FVRkRhRUlzYjBKQlFXVXNWVUZCVlR0QlFVTjZRaXhoUVVGUkxGVkJRVlU3UVVGRGJFSXNZMEZCVXl4RFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU03UVVGRFpDeGhRVUZSTEVOQlFVTTdRVUZEVkN4alFVRlRMRU5CUVVNN1FVRkRWaXhuUWtGQlZ5eEpRVUZKTzAxQlEyaENMRU5CUVVNN08wRkJSVVlzWjBOQmFFSkZMRmxCUVZrc05rTkJaMEpTTEZOQlFWTXNSVUZCUXl4UFFVRlBMRVZCUVVNc1VVRkJVU3hGUVVGRk96czdPMEZCUzJ4RExGTkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RlFVRkZPenRCUVVWcVFpeFhRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRmxCUVUwN1FVRkRha0lzWlVGQlN5eFhRVUZYTEVOQlFVTXNWMEZCVnl4SFFVRkhMRWxCUVVrc1EwRkJRenRCUVVOd1F5eGxRVUZMTEZkQlFWY3NRMEZCUXl4aFFVRmhMRWRCUVVjN1FVRkRMMElzWjBKQlFVc3NSVUZCUlN4TlFVRkxMRXRCUVVzN1FVRkRha0lzWjBKQlFVc3NSVUZCUlN4TlFVRkxMRXRCUVVzN1ZVRkRiRUlzUTBGQlF6dEJRVU5HTEdWQlFVc3NTVUZCU1N4RlFVRkZMRU5CUVVNN1FVRkRXaXhsUVVGTExGZEJRVmNzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCU3l4TFFVRkxMRU5CUVVNc1IwRkJSeXhOUVVGTExFdEJRVXNzUTBGQlF6dFJRVU5zUkN4RFFVRkRPMEZCUTBZc1YwRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhYUVVGWExFVkJRVVVzVlVGQlF5eERRVUZETEVWQlFVczdRVUZEYUVRc1lVRkJTU3hOUVVGTExGZEJRVmNzUTBGQlF5eFhRVUZYTEVWQlFVVTdRVUZEYUVNc1pVRkJTU3hEUVVGRExFMUJRVXNzVFVGQlRTeEZRVUZGTzBGQlEyaENMRzFDUVVGTExFMUJRVTBzUjBGQlJ5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVVzc1QwRkJUeXhEUVVGRExFTkJRVU03V1VGRE9VTTdRVUZEUkN4cFFrRkJTeXhMUVVGTExFZEJRVWNzUjBGQlJ5eERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRMRVZCUVVNc1RVRkJTeXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU0xUXl4cFFrRkJTeXhKUVVGSkxFVkJRVVVzUTBGQlF6dEJRVU5hTEdsQ1FVRkxMRmRCUVZjc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlN5eExRVUZMTEVOQlFVTXNSMEZCUnl4TlFVRkxMRXRCUVVzc1EwRkJRenRCUVVOcVJDeGxRVUZKTEUxQlFVc3NWMEZCVnl4RFFVRkRMR0ZCUVdFc1JVRkJSVHRCUVVOc1F5eHBRa0ZCU1N4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eE5RVUZMTEZkQlFWY3NRMEZCUXl4aFFVRmhMRU5CUVVNc1MwRkJTeXhIUVVGRExFMUJRVXNzUzBGQlN5eERRVUZETEVOQlFVTTdRVUZEZWtVc2FVSkJRVXNzVVVGQlVTeEhRVUZITEVOQlFVTXNSVUZCUnp0QlFVTnNRaXh0UWtGQlNTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhOUVVGTExGZEJRVmNzUTBGQlF5eGhRVUZoTEVOQlFVTXNTMEZCU3l4RlFVRkRMRTFCUVVzc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRGNFVXNiVUpCUVVrc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCU3l4WFFVRlhMRU5CUVVNc1lVRkJZU3hEUVVGRExFdEJRVXNzUlVGQlF5eE5RVUZMTEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNKRkxHMUNRVUZKTEZGQlFWRXNSMEZCUnl4TlFVRkxMRmRCUVZjc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUTI1RUxHMUNRVUZKTEZOQlFWTXNSMEZCUnl4TlFVRkxMRmRCUVZjc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUTNKRUxHOUNRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkRMRWRCUVVjc1JVRkJReXhEUVVGRExFZEJRVU1zU1VGQlNTeEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZPMEZCUTNwQ0xIVkNRVUZMTEZkQlFWY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVVc1EwRkJReXhEUVVGRExFZEJRVU1zUjBGQlJ5eEpRVUZGTEZGQlFWRXNSVUZCUlN4UlFVRlJMRVZCUVVVc1UwRkJVeXhEUVVGRkxFTkJRVU03UVVGRGVrWXNjVUpCUVVrc1lVRkJZU3hIUVVGSExFMUJRVXNzVjBGQlZ5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU03UVVGRGRFUXNkVUpCUVVzc1YwRkJWeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4aFFVRmhMRU5CUVVNN1FVRkRNME1zZFVKQlFVc3NWMEZCVnl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFVkJRVU1zWVVGQllTeERRVUZETEVOQlFVTTdaMEpCUXpGRE8yTkJRMFk3V1VGRFJqczdRVUZGUkN4cFFrRkJTeXhYUVVGWExFTkJRVU1zWVVGQllTeEhRVUZITzBGQlF5OUNMR3RDUVVGTExFVkJRVVVzVFVGQlN5eExRVUZMTzBGQlEycENMR3RDUVVGTExFVkJRVVVzVFVGQlN5eExRVUZMTzFsQlEyeENMRU5CUVVNN1ZVRkRTRHRSUVVOR0xFTkJRVU1zUTBGQlF6czdRVUZIU0N4WFFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExGbEJRVTBzUlVGRGFrSXNRMEZCUXp0QlFVTkdMRmRCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1YwRkJWeXhGUVVGRkxGVkJRVU1zUTBGQlF5eEZRVUZMTzBGQlEyaEVMR0ZCUVVrc1RVRkJTeXhYUVVGWExFTkJRVU1zVjBGQlZ5eEZRVUZGTzBGQlEyaERMR1ZCUVVrc1EwRkJReXhOUVVGTExFMUJRVTBzUlVGQlJUdEJRVU5vUWl4dFFrRkJTeXhOUVVGTkxFZEJRVWNzUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4TlFVRkxMRTlCUVU4c1EwRkJReXhEUVVGRE8xbEJRemxETzBGQlEwUXNhVUpCUVVzc1MwRkJTeXhIUVVGSExFZEJRVWNzUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZCUXl4RlFVRkRMRTFCUVVzc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRE5VTXNhVUpCUVVzc1MwRkJTeXhGUVVGRkxFTkJRVU03UVVGRFlpeHBRa0ZCU3l4WFFVRlhMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVXNzUzBGQlN5eERRVUZETEVkQlFVY3NUVUZCU3l4TFFVRkxMRU5CUVVNN1ZVRkRiRVE3VVVGRFJpeERRVUZETEVOQlFVTTdPMEZCUjBnc1YwRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eFpRVUZOTzBGQlEyNUNMR1ZCUVVzc1YwRkJWeXhEUVVGRExGZEJRVmNzUjBGQlJ5eExRVUZMTEVOQlFVTTdRVUZEY2tNc1pVRkJTeXhYUVVGWExFTkJRVU1zWVVGQllTeEhRVUZITEV0QlFVc3NRMEZCUXp0UlFVTjRReXhEUVVGRE8wRkJRMFlzVjBGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4blFrRkJaMElzUTBGQlF5eFRRVUZUTEVWQlFVVXNXVUZCVFR0QlFVTTNReXhoUVVGSkxFMUJRVXNzVjBGQlZ5eERRVUZETEZkQlFWY3NSVUZCUlR0QlFVTm9ReXhwUWtGQlN5eEZRVUZGTEVWQlFVVXNRMEZCUXp0QlFVTldMR2xDUVVGTExGZEJRVmNzUTBGQlF5eGhRVUZoTEVkQlFVY3NTMEZCU3l4RFFVRkRPMEZCUTNaRExHbENRVUZMTEZkQlFWY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJTeXhMUVVGTExFTkJRVU1zUjBGQlJ5eE5RVUZMTEV0QlFVc3NRMEZCUXp0VlFVTnNSRHRSUVVOR0xFTkJRVU1zUTBGQlF6dEJRVU5JTEZkQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNWVUZCVlN4RlFVRkZMRmxCUVUwN1FVRkRPVU1zWVVGQlNTeE5RVUZMTEZkQlFWY3NRMEZCUXl4WFFVRlhMRVZCUVVVN1FVRkRhRU1zYVVKQlFVc3NSVUZCUlN4RlFVRkZMRU5CUVVNN1FVRkRWaXhwUWtGQlN5eFhRVUZYTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVVzc1MwRkJTeXhEUVVGRExFZEJRVWNzVFVGQlN5eExRVUZMTEVOQlFVTTdWVUZEYkVRN1VVRkRSaXhEUVVGRExFTkJRVU03VFVGRlNqczdRVUZGUkN4VFFVRkpMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU03U1VGRGNFSTdPMkZCYmtkSExGbEJRVms3TzJkQ1FVRmFMRmxCUVZrN1FVRnhSMmhDTEdkQ1FVRlhPMk5CUVVFc2RVSkJRVWM3T3pzN1FVRkpXaXhoUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRE4wSXNZVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhaUVVGWkxFTkJRVU1zVjBGQlZ5eEZRVUZETEdkQ1FVRm5RaXhEUVVGRExFTkJRVU03UVVGRGNFUXNZVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhaUVVGWkxFTkJRVU1zU1VGQlNTeEZRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpsQ0xHRkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1JVRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU01UWl4aFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eFBRVUZQTEVWQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRekZETEdGQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExGRkJRVkVzUlVGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN08wRkJSVFZETEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hEUVVGRExFZEJRVWNzUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTnFReXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZsQlFWa3NRMEZCUXl4WFFVRlhMRVZCUVVNc1owSkJRV2RDTEVOQlFVTXNRMEZCUXp0QlFVTjRSQ3hoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGJFTXNZVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhaUVVGWkxFTkJRVU1zU1VGQlNTeEZRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTJ4RExHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RFFVRkRMRTlCUVU4c1JVRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZET1VNc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNVVUZCVVN4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVVZxUkRzN096dFZRWFpJUnl4WlFVRlpPMGxCUVZNc1kwRkJZenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3p0TFFXbExjRUlzVjBGQlZ6dEJRVVZ1UWl4WlFVWlJMRmRCUVZjc1IwRkZhRUk3TWtKQlJrc3NWMEZCVnpzN1FVRkpOVUlzVTBGQlNTeFBRVUZQTEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenM3UVVGRmVFSXNVMEZCU1N4UlFVRlJMRWRCUVVjN1FVRkRZaXhoUVVGUkxFTkJRVU1zUjBGQlJ5eEZRVUZETEVkQlFVY3NRMEZCUXp0QlFVTnFRaXgzUWtGQmJVSXNRMEZCUXp0QlFVTndRaXhaUVVGUExFTkJRVU03UVVGRFVpeFpRVUZQTEVOQlFVTTdRVUZEVWl4aFFVRlJMRU5CUVVNN1FVRkRWQ3hsUVVGVkxFTkJRVU1zUjBGQlJ5eEZRVUZETEVkQlFVY3NSVUZCUXl4SFFVRkhMRVZCUVVNc1IwRkJSeXhGUVVGRExFZEJRVWNzUTBGQlF6dE5RVU5vUXl4RFFVRkRPenRCUVVWR0xHZERRV1pwUWl4WFFVRlhMRFpEUVdWMFFpeFRRVUZUTEVWQlFVTXNUMEZCVHl4RlFVRkRMRkZCUVZFc1JVRkJSVHM3UVVGRmJFTXNVMEZCU1N4RFFVRkRMR2RDUVVGblFpeEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1pVRkJaU3hEUVVGRE8wRkJRM1JFTEZOQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eE5RVUZOTEVOQlFVTTdPMEZCUlc1RExGTkJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NSVUZCUlN4RFFVRkRPenRCUVVWc1FpeFRRVUZKTEVOQlFVTXNWMEZCVnl4SFFVRkhMRXRCUVVzc1EwRkJRenM3UVVGRmVrSXNVMEZCU1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8wbEJSV0k3TzJGQk1VSnJRaXhYUVVGWE96dG5Ra0ZCV0N4WFFVRlhPMEZCTkVJNVFpeGxRVUZWTzJOQlFVRXNjMEpCUVVjN1FVRkRXQ3hoUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEZGQlFWRXNRMEZCUXl4aFFVRmhMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRE4wTXNZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUTNaRE96dEJRVVZFTEcxQ1FVRmpPMk5CUVVFc01FSkJRVWM3TzBGQlJXWXNZVUZCU1N4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eEhRVUZITEVOQlFVTTdRVUZETlVJc1lVRkJTU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNN1FVRkROVUlzWVVGQlNTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU03TzBGQlJUbENMR0ZCUVVrc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVWQlFVVTdRVUZEZGtJc1kwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRE8wRkJRekZDTEdOQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXp0QlFVTXhRaXhsUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03VlVGRE4wSTdPMEZCUlVRc1lVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eEZRVUZGTEVOQlFVTTdPMEZCUld4Q0xHTkJRVXNzU1VGQlNTeERRVUZETEVkQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zWjBKQlFXZENMRVZCUVVNc1EwRkJReXhGUVVGRkxFVkJRVVU3UVVGRGVFTXNaVUZCU1N4VFFVRlRMRWRCUVVjc1VVRkJVU3hEUVVGRExHRkJRV0VzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXpzN1FVRkZMME1zWlVGQlNTeE5RVUZOTEVkQlFVY3NTVUZCU1N4WlFVRlpMRU5CUVVNc1UwRkJVeXhGUVVGRk8wRkJRM0pETEd0Q1FVRkxMRVZCUVVVc1EwRkJReXhIUVVGSExFVkJRVU1zUjBGQlJ5eERRVUZETzBGQlEyaENMR2xDUVVGSkxFVkJRVVVzU1VGQlNUdEJRVU5XTEdsQ1FVRkpMRVZCUVVVc1ZVRkJWVHRCUVVOb1FpeDNRa0ZCVnl4RlFVRkZMRlZCUVZVN1FVRkRka0lzYTBKQlFVc3NSVUZCUlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU55UWl4dlFrRkJUeXhGUVVGRkxFdEJRVXM3UVVGRFpDeHpRa0ZCVXl4RlFVRkZMRWxCUVVrc1JVRkRhRUlzUlVGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTTVRaXhwUWtGQlRTeERRVUZETEZkQlFWY3NSMEZCUnl4SlFVRkpMRU5CUVVNN08wRkJSVEZDTEdsQ1FVRk5MRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU5xUWl4bFFVRkpMRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVU3UVVGRGFFSXNiVUpCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUzBGQlN5eEhRVUZITEVOQlFVTXNRMEZCUXp0QlFVTnlRaXh0UWtGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRM3BDTEcxQ1FVRk5MRU5CUVVNc1VVRkJVU3hIUVVGSExFMUJRVTBzUTBGQlF5eFBRVUZQTEVkQlFVY3NUVUZCVFN4RFFVRkRMRlZCUVZVc1IwRkJSeXhaUVVGTkxFVkJRVVVzUTBGQlF6dEJRVU5vUlN4dFFrRkJUU3hEUVVGRExFdEJRVXNzUjBGQlJ5eE5RVUZOTEVOQlFVTXNTVUZCU1N4SFFVRkhMRTFCUVUwc1EwRkJReXhQUVVGUExFZEJRVWNzV1VGQlRTeEZRVUZGTEVOQlFVTTdRVUZEZGtRc2JVSkJRVTBzUTBGQlF5eFJRVUZSTEVkQlFVY3NUVUZCVFN4RFFVRkRMRmxCUVZrc1IwRkJSeXhOUVVGTkxFTkJRVU1zWlVGQlpTeEhRVUZITEZsQlFVMHNSVUZCUlN4RFFVRkRPMEZCUXpGRkxHMUNRVUZOTEVOQlFVTXNTMEZCU3l4SFFVRkhMRTFCUVUwc1EwRkJReXhUUVVGVExFZEJRVWNzVFVGQlRTeERRVUZETEZsQlFWa3NSMEZCUnl4WlFVRk5MRVZCUVVVc1EwRkJRenRaUVVOc1JUczdRVUZGUkN4bFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTXhRaXhsUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZkQlFWY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRWUVVWeVF6dEJRVU5FTEdGQlFVa3NTMEZCU3l4RFFVRkRMRTFCUVUwc1JVRkJSVHRCUVVOb1FpeGxRVUZKTEVOQlFVTXNhVUpCUVdsQ0xFVkJRVVVzUTBGQlF6dFZRVU14UWp0UlFVVkdPenRCUVVWRUxHMUNRVUZqTzJOQlFVRXNNRUpCUVVjN1FVRkRaaXhqUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRWRCUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVWQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVN1FVRkRkRU1zWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXp0QlFVTnlReXhsUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMR05CUVdNc1JVRkJSU3hEUVVGRE8xVkJRMnhETzFGQlEwWTdPMEZCUlVRc2EwSkJRV0U3WTBGQlFTeDVRa0ZCUnpzN1FVRkZaQ3hoUVVGSkxGZEJRVmNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETzBGQlEyNUVMR0ZCUVVrc1dVRkJXU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTTdPMEZCUlM5Q0xHTkJRVXNzU1VGQlNTeERRVUZETEVkQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSVHRCUVVOMFF5eGxRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVWQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1FVRkRha1FzWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF6dFZRVU12UWp0UlFVZEdPenRCUVVWRUxGZEJRVTA3WTBGQlFTeG5Ra0ZCUXl4TFFVRkxMRVZCUVVNc1MwRkJTeXhGUVVGRk8wRkJRMnhDTEdGQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRE8wRkJRMnBDTEd0Q1FVRlRMRXRCUVVzN1FVRkRaQ3hyUWtGQlV5eExRVUZMTzFWQlEyWXNRMEZCUXl4RFFVRkRPMUZCUTBvN08wRkJSVVFzYzBKQlFXbENPMk5CUVVFc05rSkJRVWM3T3p0QlFVVnNRaXhoUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRExGVkJRVlVzUjBGQlJ5eFpRVUZOTEVWQlFVVXNRMEZCUXp0QlFVTXhSQ3hoUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eFpRVUZOTEVWQlFVVXNRMEZCUXp0QlFVTnFSQ3hoUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1NVRkJTU3hEUVVGRExHVkJRV1VzUjBGQlJ5eFpRVUZOTEVWQlFVVXNRMEZCUXp0QlFVTndSU3hoUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRWRCUVVjc1NVRkJTU3hEUVVGRExGbEJRVmtzUjBGQlJ5eFpRVUZOTEVWQlFVVXNRMEZCUXpzN1FVRkZNMFFzWVVGQlNTeERRVUZETEdOQlFXTXNSMEZCUnl4TFFVRkxMRU5CUVVNN08wRkJSVFZDTEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNXVUZCV1N4RlFVRkZMRlZCUVVNc1EwRkJReXhGUVVGTE8wRkJRMnBFTEdWQlFVa3NUMEZCVHl4SFFVRkhMRkZCUVZFc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1lVRkJZU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEU5QlFVOHNSVUZCUXl4RFFVRkRMRU5CUVVNc1lVRkJZU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMEZCUXk5R0xHVkJRVWtzVFVGQlRTeEhRVUZITEUxQlFVc3NUMEZCVHl4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEJRVU42UXl4bFFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUlVGQlJUdEJRVU5zUWl4dFFrRkJUU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dFpRVU5zUkR0QlFVTkVMR2xDUVVGTkxFTkJRVU1zUzBGQlN5eEhRVUZITEVkQlFVY3NRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJReXhGUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTm9SQ3hwUWtGQlRTeERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMEZCUTJRc2FVSkJRVXNzWTBGQll5eEhRVUZITEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNN1FVRkRjRU1zV1VGQlF5eERRVUZETEdOQlFXTXNSVUZCUlN4RFFVRkRPMEZCUTI1Q0xGbEJRVU1zUTBGQlF5eGxRVUZsTEVWQlFVVXNRMEZCUXp0VlFVTnlRaXhEUVVGRExFTkJRVU03TzBGQlJVZ3NZVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhuUWtGQlowSXNRMEZCUXl4WFFVRlhMRVZCUVVVc1ZVRkJReXhEUVVGRExFVkJRVXM3UVVGRGFFUXNaVUZCU1N4UFFVRlBMRWRCUVVjc1VVRkJVU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRU5CUVVNc1EwRkJReXhoUVVGaExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RlFVRkRMRU5CUVVNc1EwRkJReXhoUVVGaExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1FVRkRMMFlzWlVGQlNTeE5RVUZOTEVkQlFVY3NUVUZCU3l4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEzcERMR1ZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeEZRVUZGTzBGQlEyeENMRzFDUVVGTkxFTkJRVU1zVFVGQlRTeEhRVUZITEVkQlFVY3NRMEZCUXl4WlFVRlpMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFsQlEyeEVPMEZCUTBRc2FVSkJRVTBzUTBGQlF5eExRVUZMTEVkQlFVY3NSMEZCUnl4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFVkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMEZCUTJoRUxHVkJRVWtzVDBGQlR5eERRVUZETEV0QlFVc3NTMEZCUnl4TlFVRkxMR05CUVdNc1JVRkJSVHRCUVVOMlF5eHBRa0ZCU1N4TlFVRkxMR05CUVdNc1NVRkJTU3hEUVVGRExFVkJRVVU3UVVGRE5VSXNiVUpCUVVrc1ZVRkJWU3hIUVVGSExFMUJRVXNzVDBGQlR5eERRVUZETEUxQlFVc3NZMEZCWXl4RFFVRkRMRU5CUVVNN1FVRkRia1FzZVVKQlFWVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJRenRqUVVOcVFqdEJRVU5FTEcxQ1FVRk5MRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03V1VGRFppeE5RVUZOTzBGQlEwd3NiVUpCUVUwc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF6dFpRVU5vUWp0QlFVTkVMR2xDUVVGTExHTkJRV01zUjBGQlJ5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUTNCRExGbEJRVU1zUTBGQlF5eGpRVUZqTEVWQlFVVXNRMEZCUXp0QlFVTnVRaXhaUVVGRExFTkJRVU1zWlVGQlpTeEZRVUZGTEVOQlFVTTdWVUZEY2tJc1EwRkJReXhEUVVGRE96dEJRVVZJTEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNWVUZCVlN4RlFVRkZMRlZCUVVNc1EwRkJReXhGUVVGTE96dEJRVVV2UXl4bFFVRkpMRTFCUVUwc1IwRkJSeXhOUVVGTExFOUJRVThzUTBGQlF5eE5RVUZMTEdOQlFXTXNRMEZCUXl4RFFVRkRPMEZCUXk5RExHbENRVUZOTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNN1FVRkRXaXhwUWtGQlN5eFhRVUZYTEVkQlFVY3NTMEZCU3l4RFFVRkRPMEZCUTNwQ0xHbENRVUZMTEdOQlFXTXNSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkROVUlzV1VGQlF5eERRVUZETEdOQlFXTXNSVUZCUlN4RFFVRkRPMEZCUTI1Q0xGbEJRVU1zUTBGQlF5eGxRVUZsTEVWQlFVVXNRMEZCUXp0VlFVTnlRaXhEUVVGRExFTkJRVU03VVVGRlNqczdRVUZWUnl4dlFrRkJaVHM3T3pzN096dFpRVXBCTEZsQlFVYzdRVUZEY0VJc1owSkJRVThzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNN1VVRkROVUk3V1VGRmEwSXNWVUZCUXl4RFFVRkRMRVZCUVVVN1FVRkRja0lzWVVGQlNTeERRVUZETEV0QlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhOUVVGTkxFVkJRVVU3UVVGRE0wSXNhMEpCUVU4N1ZVRkRVanRCUVVORUxHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNUMEZCVHl4RFFVRkRMRlZCUVVNc1RVRkJUU3hGUVVGSE8wRkJRemRDTEdsQ1FVRk5MRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03VlVGRGJFSXNRMEZCUXl4RFFVRkRPMEZCUTBnc1lVRkJTU3hEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETzBGQlEySXNZVUZCU1N4RFFVRkRMR2RDUVVGblFpeEhRVUZITEVOQlFVTXNRMEZCUXp0QlFVTXhRaXhoUVVGSkxFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTTdVVUZEZGtJN08wRkJXVWNzVVVGQlJ6czdPenM3T3pzN1dVRklRU3haUVVGSE8wRkJRMUlzWjBKQlFVOHNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTTdVVUZETlVJN1dVRkRUU3hWUVVGRExFTkJRVU1zUlVGQlJUdEJRVU5VTEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExGVkJRVU1zVFVGQlRTeEZRVUZITzBGQlF6ZENMR2xDUVVGTkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXp0VlFVTm9RaXhEUVVGRExFTkJRVU03VVVGRFNqczdRVUZWUnl4UlFVRkhPenM3T3pzN096dFpRVWhCTEZsQlFVYzdRVUZEVWl4blFrRkJUeXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJRenRSUVVNMVFqdFpRVU5OTEZWQlFVTXNRMEZCUXl4RlFVRkZPMEZCUTFRc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFBRVUZQTEVOQlFVTXNWVUZCUXl4TlFVRk5MRVZCUVVjN1FVRkROMElzYVVKQlFVMHNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8xVkJRMmhDTEVOQlFVTXNRMEZCUXp0UlFVTktPenRCUVZWSExGTkJRVWs3T3pzN096czdPMWxCU0VFc1dVRkJSenRCUVVOVUxHZENRVUZQTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETzFGQlF6ZENPMWxCUTA4c1ZVRkJReXhEUVVGRExFVkJRVVU3UVVGRFZpeGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGRExFMUJRVTBzUlVGQlJ6dEJRVU0zUWl4cFFrRkJUU3hEUVVGRExFbEJRVWtzUjBGQlJ5eERRVUZETEVOQlFVTTdWVUZEYWtJc1EwRkJReXhEUVVGRE8xRkJRMG83TzBGQlZVUXNZMEZCVXpzN096czdPenM3T3pzN1kwRkJRU3h0UWtGQlF5eExRVUZMTEVWQlFVTXNTMEZCU3l4RlFVRkZPMEZCUTNKQ0xHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1MwRkJTeXhIUVVGSExFdEJRVXNzUTBGQlF6dEJRVU5zUXl4aFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlF6dEJRVU5xUWl4clFrRkJVeXhMUVVGTE8wRkJRMlFzYTBKQlFWTXNTMEZCU3p0VlFVTm1MRU5CUVVNc1EwRkJRenRSUVVOS096dEJRVkZFTEd0Q1FVRmhPenM3T3pzN096czdZMEZCUVN4MVFrRkJReXhOUVVGTkxFVkJRVVU3T3p0QlFVTndRaXhoUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEUxQlFVMHNRMEZCUXp0QlFVTnlRaXhoUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4VlFVRkRMRTFCUVUwc1JVRkJReXhEUVVGRExFVkJRVWM3UVVGREwwSXNhVUpCUVUwc1EwRkJReXhMUVVGTExFZEJRVWNzVFVGQlRTeERRVUZETEVOQlFVTXNSMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRGRrTXNhVUpCUVVzc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlF6dEJRVU5xUWl4dlFrRkJVeXhEUVVGRE8wRkJRMVlzYjBKQlFWTXNUVUZCVFN4RFFVRkRMRXRCUVVzN1dVRkRkRUlzUTBGQlF5eERRVUZETzFWQlEwb3NRMEZCUXl4RFFVRkRPMUZCUTBvN096czdWVUZzVVd0Q0xGZEJRVmM3U1VGQlV5eFRRVUZUT3p0clFrRkJOMElzVjBGQlZ5eERPenM3T3pzN1FVTXpTMmhETEdGQlFWa3NRMEZCUXpzN096czdPenM3T3pzN08wRkJSV0lzUzBGQlNTeEhRVUZITEVkQlFVY3NiVUpCUVU4c1EwRkJReXhEUVVGaExFTkJRVU1zUTBGQlF6dEJRVU5xUXl4TFFVRkpMRk5CUVZNc1IwRkJSeXh0UWtGQlR5eERRVUZETEVOQlFXMUNMRU5CUVVNc1EwRkJRenRCUVVNM1F5eExRVUZKTEVsQlFVa3NSMEZCUnl4dFFrRkJUeXhEUVVGRExFVkJRV2RDTEVOQlFVTXNRMEZCUXpzN1MwRkRla0lzVjBGQlZ5d3JRMEZCVFN4RlFVRnhRanM3UzBGRk4wSXNZMEZCWXp0QlFVVjBRaXhaUVVaUkxHTkJRV01zUTBGRmNrSXNTVUZCU1N4RlFVRkRMRTlCUVU4c1JVRkJReXhSUVVGUkxFVkJRVVU3TWtKQlJtaENMR05CUVdNN08wRkJTUzlDTEdkRFFVcHBRaXhqUVVGakxEWkRRVWw2UWl4SlFVRkpMRVZCUVVNc1QwRkJUeXhGUVVGRExGRkJRVkVzUlVGQlJUczdRVUZGTjBJc1UwRkJTU3hEUVVGRExGZEJRVmNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRmRCUVZjc1EwRkJRenM3T3p0QlFVazNReXhUUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1QwRkJUeXhEUVVGRE96czdPenM3UVVGTmNrTXNVMEZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWxCUVVrc1JVRkJSU3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPenRCUVVWb1NDeFRRVUZKTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNN08wRkJSVm9zVTBGQlNTeERRVUZETEZGQlFWRXNSMEZCUnl4SlFVRkpMRmRCUVZjc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRVZCUVVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRE0wY3NVMEZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNN08wRkJSVGRETEZOQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTTdPMEZCUlM5Q0xGTkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEpRVVZvUXpzN1lVRXpRbXRDTEdOQlFXTTdPMmRDUVVGa0xHTkJRV003UVVFMlFtcERMRzFDUVVGak8yTkJRVUVzTUVKQlFVYzdPMEZCUldZc1lVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRemxDTEdGQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTnNReXhoUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03TzBGQlJXcERMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRCUVVOdVF5eGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdRVUZEZGtNc1lVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE96dEJRVVZ3UXl4aFFVRkpMRU5CUVVNc1lVRkJZU3hGUVVGRkxFTkJRVU03VVVGSmRFSTdPMEZCUlVRc2EwSkJRV0U3WTBGQlFTeDVRa0ZCUnpzN1FVRkhaQ3hoUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4WFFVRlhMRVZCUVVVN1FVRkRPVUlzWlVGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVU3UVVGRE5VSXNhVUpCUVVrc1EwRkJReXhYUVVGWExFZEJRVWNzVlVGQlZTeERRVUZETzFsQlF5OUNMRTFCUVUwN1FVRkRUQ3hwUWtGQlNTeERRVUZETEZkQlFWY3NSMEZCUnl4WlFVRlpMRU5CUVVNN1dVRkRha003VlVGRFJqczdRVUZGUkN4aFFVRkpMRU5CUVVNN1lVRkJSU3hEUVVGRE8yRkJRVVVzUTBGQlF6dGhRVUZGTEVOQlFVTTdZVUZCUlN4VFFVRlRPMkZCUVVVc1dVRkJXU3hoUVVGRE8wRkJRM2hETEdGQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjN1FVRkRaQ3huUWtGQlN5eEZRVUZGTEVOQlFVTTdRVUZEVWl4WlFVRkRMRVZCUVVVc1EwRkJRenRWUVVOTUxFTkJRVU03TzBGQlJVWXNZVUZCU1N4SlFVRkpMRU5CUVVNc1YwRkJWeXhMUVVGTExGVkJRVlVzUlVGQlJUdEJRVU51UXl4bFFVRkpMRU5CUVVNc1UwRkJVeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTJwRExGbEJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOcVFpeFpRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTA0c1dVRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTTdRVUZEYmtJc1dVRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTTdRVUZEWml4bFFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNVMEZCVXl4SFFVRkhMRWRCUVVjc1EwRkJRenRCUVVONFF5eGxRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1IwRkJSeXhEUVVGRExFZEJRVU1zU1VGQlNTeERRVUZETEZWQlFWVXNSMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRla01zYjBKQlFWTXNSMEZCUnl4WlFVRlpMRWRCUVVNc1NVRkJTU3hEUVVGRExGTkJRVk1zUjBGQlJTeERRVUZETEVOQlFVVXNSMEZCUXl4RFFVRkRMRWRCUVVNc1MwRkJTeXhEUVVGRE8wRkJRM0pFTEhWQ1FVRlpMRWRCUVVjc1EwRkJReXhIUVVGRExFTkJRVU1zUTBGQlF6dFZRVU53UWl4TlFVRk5PMEZCUTB3c1pVRkJTU3hEUVVGRExGTkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJRenRCUVVOc1F5eFpRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTA0c1dVRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTJ4Q0xGbEJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUTJZc1dVRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTTdRVUZEYkVJc1pVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRk5CUVZNc1IwRkJSeXhIUVVGSExFTkJRVU03UVVGRGVFTXNaVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEZWQlFWVXNSMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRka01zYjBKQlFWTXNSMEZCUnl4alFVRmpMRWRCUVVNc1NVRkJTU3hEUVVGRExGTkJRVk1zUjBGQlJTeERRVUZETEVOQlFVVXNSMEZCUXl4RFFVRkRMRWRCUVVNc1IwRkJSeXhEUVVGRE8wRkJRM0pFTEhWQ1FVRlpMRWRCUVVjc1EwRkJReXhIUVVGRExFTkJRVU1zUTBGQlF6dFZRVU53UWpzN1FVRkZSQ3hoUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRE4wSXNZVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eEZRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpkQ0xHRkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRmRCUVZjc1JVRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dEJRVU0zUXl4aFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1FVRkRla01zWVVGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETzBGQlEzcERMR0ZCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zV1VGQldTeERRVUZETEU5QlFVOHNSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOcVF5eGhRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhSUVVGUkxFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdPMEZCUld4RExHRkJRVWtzU1VGQlNTeERRVUZETEZkQlFWY3NTMEZCU3l4VlFVRlZMRVZCUVVVN1FVRkRia01zWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1IwRkJSeXhGUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEycERMR1ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NSVUZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEyNUVMR1ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEU5QlFVOHNSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOeVF5eGxRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmxCUVZrc1EwRkJReXhSUVVGUkxFVkJRVU1zUTBGQlF5eEhRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VlVGRE0wUXNUVUZCVFR0QlFVTk1MR1ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOcVF5eGxRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGSExFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEYWtNc1pVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNUMEZCVHl4RlFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZEZGtRc1pVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNVVUZCVVN4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xVkJRM1pETzBGQlEwUXNZVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhaUVVGWkxFTkJRVU1zVjBGQlZ5eEZRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMEZCUTJwRUxHRkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1JVRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dEJRVU0zUXl4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGbEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN08wRkJSVGRETEdGQlFVa3NTVUZCU1N4RFFVRkRMRmRCUVZjc1MwRkJTeXhWUVVGVkxFVkJRVVU3UVVGRGJrTXNaVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zU1VGQlNTeEZRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXk5Q0xHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1JVRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMVZCUTJ4RUxFMUJRVTA3UVVGRFRDeGxRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFVkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVOcVJDeGxRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdWVUZEYUVNN1FVRkRSQ3hoUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRVZCUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXpzN1FVRkhOVU1zWVVGQlNTeEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkZPMEZCUTJwQ0xHVkJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0VlFVTjBSRHRSUVVWR096dEJRVVZFTEcxQ1FVRmpPMk5CUVVFc01FSkJRVWM3TzBGQlJXWXNZVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhaUVVGWkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UVVGRGFFUXNZVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhaUVVGWkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRGRFUXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRGJrUXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVU3UVVGRGFrSXNaVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zVFVGQlRTeEZRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMVZCUTNaRE8xRkJSVVk3TzBGQlJVUXNWMEZCVFR0alFVRkJMR3RDUVVGSE8wRkJRMUFzWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVN1FVRkRha0lzWlVGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUjBGQlF5eEpRVUZKTEVOQlFVTTdWVUZEZGtNN1FVRkRSQ3hoUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRVZCUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXpzN1FVRkZOVU1zWVVGQlNTeEpRVUZKTEVOQlFVTXNWMEZCVnl4TFFVRkxMRlZCUVZVc1JVRkJSVHRCUVVOc1F5eGxRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZWQlFWVXNSMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRE8wRkJRM3BFTEdWQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzUlVGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZETDBRc1pVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVOcVJTeGxRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmxCUVZrc1EwRkJReXhSUVVGUkxFVkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRWUVVNeFJDeE5RVUZOTzBGQlEwb3NaVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4VlFVRlZMRWRCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF6dEJRVU40UkN4bFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEJRVU5xUkN4bFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZITEVWQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRha01zWlVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1QwRkJUeXhGUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1ZVRkRla1E3VVVGRFJqczdRVUZGUkN4VFFVRkpPMk5CUVVFc1owSkJRVWM3UVVGRFRDeGhRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJRenRCUVVOd1FpeGhRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eEhRVUZETEVkQlFVY3NRMEZCUXp0QlFVTnlReXhoUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRE8wRkJRMnhETEdGQlFVa3NRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJRenRSUVVOa096dEJRVVZFTEZWQlFVczdZMEZCUVN4cFFrRkJSenRCUVVOT0xHRkJRVWtzU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlR0QlFVTm9RaXhsUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRGFrTXNaVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZsQlFWa3NRMEZCUlN4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUTBGQlJTeERRVUZETzBGQlF6ZEVMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRWUVVOb1F6dFJRVU5HT3p0QlFVVkVMRTlCUVVVN1kwRkJRU3hqUVVGSE8wRkJRMGdzWVVGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkRja0lzWVVGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMUZCUTJZN08wRkJSVWNzWlVGQlZUdFpRVUZCTEZsQlFVYzdRVUZEWml4blFrRkJUeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZWQlFWVXNRMEZCUXp0UlFVTXZRanM3UVVGVlJ5eFZRVUZMT3pzN096czdPenRaUVVoQkxGbEJRVWM3UVVGRFZpeG5Ra0ZCVHl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF6dFJRVU14UWp0WlFVTlJMRlZCUVVNc1EwRkJReXhGUVVGRk8wRkJRMWdzWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGRFSXNZVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNN1FVRkROME1zWVVGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMUZCUTJZN08wRkJWVWNzVVVGQlJ6czdPenM3T3pzN1dVRklRU3haUVVGSE8wRkJRMUlzWjBKQlFVOHNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU03VVVGRGVFSTdXVUZEVFN4VlFVRkRMRU5CUVVNc1JVRkJSVHRCUVVOVUxHRkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOeVFqczdRVUZWUnl4UlFVRkhPenM3T3pzN096dFpRVWhCTEZsQlFVYzdRVUZEVWl4blFrRkJUeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXp0UlFVTjRRanRaUVVOTkxGVkJRVU1zUTBGQlF5eEZRVUZGTzBGQlExUXNZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEzSkNPenRCUVZWSExGTkJRVWs3T3pzN096czdPMWxCU0VFc1dVRkJSenRCUVVOVUxHZENRVUZQTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRE8xRkJRM3BDTzFsQlEwOHNWVUZCUXl4RFFVRkRMRVZCUVVVN1FVRkRWaXhoUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRkRUk3TzBGQlZVY3NVMEZCU1RzN096czdPenM3V1VGSVFTeFpRVUZITzBGQlExUXNaMEpCUVU4c1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTTdVVUZETTBJN1dVRkRUeXhWUVVGRExFTkJRVU1zUlVGQlJUdEJRVU5XTEdGQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU40UWpzN096dFZRVGRQYTBJc1kwRkJZenRKUVVGVExGTkJRVk03TzJ0Q1FVRm9ReXhqUVVGakxFTTdPenM3T3p0QlExQnVReXhoUVVGWkxFTkJRVU03T3pzN096czdPenM3T3p0QlFVVmlMRXRCUVVrc1IwRkJSeXhIUVVGSExHMUNRVUZQTEVOQlFVTXNRMEZCWVN4RFFVRkRMRU5CUVVNN1FVRkRha01zUzBGQlNTeEpRVUZKTEVkQlFVY3NiVUpCUVU4c1EwRkJReXhEUVVGakxFTkJRVU1zUTBGQlF6dEJRVU51UXl4TFFVRkpMRk5CUVZNc1IwRkJSeXh0UWtGQlR5eERRVUZETEVOQlFXMUNMRU5CUVVNc1EwRkJRenRCUVVNM1F5eExRVUZKTEVsQlFVa3NSMEZCUnl4dFFrRkJUeXhEUVVGRExFVkJRV2RDTEVOQlFVTXNRMEZCUXpzN1MwRkRla0lzVjBGQlZ5d3JRMEZCVFN4RlFVRnhRanM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096dExRWGxDTjBJc1IwRkJSenRCUVVWWUxGbEJSbEVzUjBGQlJ5eEhRVVZTT3pKQ1FVWkxMRWRCUVVjN08wRkJTWEJDTEZOQlFVa3NUMEZCVHl4SFFVRkhMRU5CUVVNc1QwRkJUeXhGUVVGRExFOUJRVThzUTBGQlF5eERRVUZET3p0QlFVVm9ReXhUUVVGSkxGRkJRVkVzUjBGQlJ6dEJRVU5pTEdGQlFWRXNRMEZCUXl4SFFVRkhMRVZCUVVNc1JVRkJSU3hEUVVGRE8wRkJRMmhDTEc5Q1FVRmxMRmxCUVZrN1FVRkRNMElzWVVGQlVTeFZRVUZWTzBGQlEyeENMR05CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTTdRVUZEWml4aFFVRlJMRU5CUVVNN1FVRkRWQ3hqUVVGVExFTkJRVU03UVVGRFZpeG5Ra0ZCVnl4SlFVRkpPMDFCUTJoQ0xFTkJRVU03TzBGQlJVWXNaME5CYUVKcFFpeEhRVUZITERaRFFXZENaQ3hUUVVGVExFVkJRVU1zVDBGQlR5eEZRVUZETEZGQlFWRXNSVUZCUlRzN1FVRkZiRU1zVTBGQlNTeERRVUZETEZkQlFWY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExGZEJRVmNzUTBGQlF6czdRVUZGTjBNc1UwRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWxCUVVrc1EwRkJRenM3UVVGRkwwSXNVMEZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEU5QlFVOHNRMEZCUXpzN096dEJRVWx5UXl4VFFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRPenRCUVVVdlFpeFRRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWxCUVVrc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdPMEZCUldoSUxGTkJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXpzN1FVRkZXaXhUUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEVsQlFVa3NWMEZCVnl4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeEZRVUZETEVsQlFVa3NRMEZCUXl4WFFVRlhMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTJ4SExGTkJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVlVGQlZTeERRVUZET3p0QlFVVTNReXhUUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRE96dEJRVVV2UWl4VFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1NVRkZhRU03TzJGQmRrTnJRaXhIUVVGSE96dG5Ra0ZCU0N4SFFVRkhPMEZCZVVOMFFpeHRRa0ZCWXp0alFVRkJMREJDUVVGSE96dEJRVVZtTEdGQlFVa3NRMEZCUXl4SFFVRkhMRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTTVRaXhoUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03TzBGQlJXcERMR0ZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRCUVVOdVF5eGhRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdVVUZGY2tNN08wRkJSVVFzYTBKQlFXRTdZMEZCUVN4NVFrRkJSenM3UVVGRlpDeGhRVUZKTEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVVN1FVRkRha0lzWlVGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMVZCUTNSRU96dEJRVVZFTEdGQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTzBGQlF6VkNMR1ZCUVVrc1EwRkJReXhYUVVGWExFZEJRVWNzVlVGQlZTeERRVUZETzFWQlF5OUNMRTFCUVUwN1FVRkRUQ3hsUVVGSkxFTkJRVU1zVjBGQlZ5eEhRVUZITEZsQlFWa3NRMEZCUXp0VlFVTnFRenM3UVVGRlJDeGhRVUZKTEVOQlFVTTdZVUZCUlN4RFFVRkRPMkZCUVVVc1EwRkJRenRoUVVGRkxFTkJRVU03WVVGQlJTeFRRVUZUTzJGQlFVVXNXVUZCV1N4aFFVRkRPMEZCUTNoRExHRkJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVYzdRVUZEWkN4blFrRkJTeXhGUVVGRkxFTkJRVU03UVVGRFVpeFpRVUZETEVWQlFVVXNRMEZCUXp0VlFVTk1MRU5CUVVNN08wRkJSVVlzWVVGQlNTeEpRVUZKTEVOQlFVTXNWMEZCVnl4TFFVRkxMRlZCUVZVc1JVRkJSVHRCUVVOdVF5eGxRVUZKTEVOQlFVTXNVMEZCVXl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETzBGQlEycERMRmxCUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZETEVOQlFVTXNRMEZCUXp0QlFVTnFRaXhaUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBGQlEwNHNXVUZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU03UVVGRGJrSXNXVUZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU03UVVGRFppeGxRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eEhRVUZITEVkQlFVY3NRMEZCUXp0QlFVTjRReXhsUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NSMEZCUnl4RFFVRkRMRWRCUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVkQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1NVRkJSU3hEUVVGRExFZEJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRWRCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRE4wVXNiMEpCUVZNc1IwRkJSeXhaUVVGWkxFZEJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNSMEZCUlN4RFFVRkRMRU5CUVVVc1IwRkJReXhEUVVGRExFZEJRVU1zUzBGQlN5eERRVUZETzBGQlEzSkVMSFZDUVVGWkxFZEJRVWNzUTBGQlF5eEhRVUZETEVOQlFVTXNRMEZCUXp0VlFVTndRaXhOUVVGTk8wRkJRMHdzWlVGQlNTeERRVUZETEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU5zUXl4WlFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRMDRzV1VGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVNc1EwRkJReXhEUVVGRE8wRkJRMnhDTEZsQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRE8wRkJRMllzV1VGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNN1FVRkRiRUlzWlVGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUjBGQlJ5eEhRVUZITEVOQlFVTTdRVUZEZUVNc1pVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRlZCUVZVc1NVRkJSU3hEUVVGRExFZEJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRWRCUVVNc1EwRkJReXhEUVVGRExFZEJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRNMFVzYjBKQlFWTXNSMEZCUnl4alFVRmpMRWRCUVVNc1NVRkJTU3hEUVVGRExGTkJRVk1zUjBGQlJTeERRVUZETEVOQlFVVXNSMEZCUXl4RFFVRkRMRWRCUVVNc1IwRkJSeXhEUVVGRE8wRkJRM0pFTEhWQ1FVRlpMRWRCUVVjc1EwRkJReXhIUVVGRExFTkJRVU1zUTBGQlF6dFZRVU53UWpzN1FVRkZSQ3hoUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRE4wSXNZVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eEZRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpkQ0xHRkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRmRCUVZjc1JVRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dEJRVU0zUXl4aFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1FVRkRla01zWVVGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETzBGQlEzcERMR0ZCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zV1VGQldTeERRVUZETEU5QlFVOHNSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOcVF5eGhRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhSUVVGUkxFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdPMEZCUld4RExHRkJRVWtzU1VGQlNTeERRVUZETEZkQlFWY3NTMEZCU3l4VlFVRlZMRVZCUVVVN1FVRkRia01zWlVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlF5OUNMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVsQlFVa3NSVUZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFWQlEyeEVMRTFCUVUwN1FVRkRUQ3hsUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTnFSQ3hsUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VlVGRGFFTTdRVUZEUkN4aFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZITEVWQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVVUzUXpzN1FVRkZSQ3h0UWtGQll6dGpRVUZCTERCQ1FVRkhPenRCUVVWbUxHRkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUTJoRUxHRkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPenRCUVVWdVJDeGhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSVHRCUVVOcVFpeGxRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhOUVVGTkxFVkJRVU1zWVVGQllTeERRVUZETEVOQlFVTTdWVUZET1VNN1VVRkZSanM3UVVGRlJDeFhRVUZOTzJOQlFVRXNhMEpCUVVjN1FVRkRVQ3hoUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlR0QlFVTnFRaXhsUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1UwRkJVeXhIUVVGRExFbEJRVWtzUTBGQlF6dFZRVU4yUXp0QlFVTkVMR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NSVUZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZET3p0QlFVVTFReXhoUVVGSkxFbEJRVWtzUTBGQlF5eFhRVUZYTEV0QlFVc3NWVUZCVlN4RlFVRkZPMEZCUTI1RExHVkJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eEhRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hKUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFZEJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZETlVZc1pVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRWUVVOcVJTeE5RVUZOTzBGQlEwd3NaVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4VlFVRlZMRWxCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1IwRkJReXhEUVVGRExFTkJRVU1zUjBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNelJpeGxRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFVkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRWUVVOdVJEdFJRVU5HT3p0QlFVZEVMRlZCUVVzN1kwRkJRU3hwUWtGQlJ6dEJRVU5PTEdGQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFRRVUZUTEVkQlFVTXNSMEZCUnl4RFFVRkRPMEZCUTNKRExHRkJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU03UVVGRGJFTXNZVUZCU1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8xRkJRMkk3TzBGQlJVUXNVMEZCU1R0alFVRkJMR2RDUVVGSE8wRkJRMHdzWVVGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZPMEZCUTJoQ0xHVkJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6czdRVUZGYWtNc1pVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRmxCUVZrc1EwRkJSU3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUlN4RFFVRkRPenRCUVVVM1JDeGxRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJRenRCUVVOcVFpeHJRa0ZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTE8wRkJRMnBDTEdOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dEJRVU5vUkN4alFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlJTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdXVUZEYWtRc1EwRkJReXhEUVVGRE8xVkJSVW83VVVGRFJqczdRVUZGUkN4WlFVRlBPMk5CUVVFc2JVSkJRVWM3UVVGRFVpeGhRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1VVRkRaanM3UVVGVlJ5eFZRVUZMT3pzN096czdPMWxCU2tFc1dVRkJSenRCUVVOV0xHZENRVUZQTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRE8xRkJRekZDTzFsQlJWRXNWVUZCUXl4TFFVRkxMRVZCUVVVN1FVRkRaaXhoUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVNeFFpeGhRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZWQlFWVXNRMEZCUXp0QlFVTTNReXhoUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUXp0QlFVTnFRaXhuUWtGQlN5eEZRVUZGTEVsQlFVa3NRMEZCUXl4TFFVRkxPMEZCUTJwQ0xGbEJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVVOb1JDeFpRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJSU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU03VlVGRGFrUXNRMEZCUXl4RFFVRkRPMEZCUTBnc1lVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzFGQlEyWTdPMEZCUlVjc1pVRkJWVHRaUVVGQkxGbEJRVWM3UVVGRFppeG5Ra0ZCVHl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF6dFJRVU12UWpzN096dFZRWFpNYTBJc1IwRkJSenRKUVVGVExGTkJRVk03TzJ0Q1FVRnlRaXhIUVVGSExFTTdPenM3T3p0QlF5OUNlRUlzWVVGQldTeERRVUZET3pzN096czdPenM3TzBGQlJXSXNTMEZCU1N4SlFVRkpMRWRCUVVjc2JVSkJRVThzUTBGQlF5eERRVUZqTEVOQlFVTXNRMEZCUXp0QlFVTnVReXhMUVVGSkxFZEJRVWNzUjBGQlJ5eHRRa0ZCVHl4RFFVRkRMRU5CUVdFc1EwRkJReXhEUVVGRE8wRkJRMnBETEV0QlFVa3NVMEZCVXl4SFFVRkhMRzFDUVVGUExFTkJRVU1zUTBGQmJVSXNRMEZCUXl4RFFVRkRPenRCUVVjM1F5eExRVUZKTEV0QlFVc3NSMEZCUnl4bFFVRlRMRXRCUVVzc1JVRkJReXhSUVVGUkxFVkJRVVU3TzBGQlJXNURMRTlCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTnFRaXhQUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRha0lzVDBGQlNTeERRVUZETEZGQlFWRXNSMEZCUnl4UlFVRlJMRU5CUVVNN08wRkJSWHBDTEU5QlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0QlFVTndReXhQUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZsQlFWa3NRMEZCUXl4TlFVRk5MRVZCUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN08wRkJSVGxFTEU5QlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN08wRkJSV2hFTEU5QlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1dVRkJWenRCUVVOMlFpeFRRVUZKTEVOQlFVTXNSMEZCUnl4RlFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1JVRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGRExFTkJRVU1zUTBGQlF6dEJRVU53UlN4VFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZITEVWQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRiRU1zUTBGQlF6czdRVUZGUml4UFFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExGVkJRVk1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlRzN1FVRkZlRUlzVTBGQlNTeERRVUZETEVOQlFVTXNSMEZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGSExFTkJRVU1zUjBGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOdVF5eFRRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVWNzUTBGQlF5eEhRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE96dEJRVVZ1UXl4VFFVRkpMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJSU3hEUVVGRExFVkJRVVU3TzBGQlJYaERMRmRCUVVrc1UwRkJVeXhIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlF5eERRVUZETEVOQlFVTTdRVUZEY0VRc1YwRkJTU3hUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZETEVOQlFVTXNRMEZCUXpzN1FVRkZjRVFzVjBGQlNTeFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdRVUZET1VNc1YwRkJTU3hSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03TzBGQlJUbERMRmRCUVVrc1NVRkJTU3hIUVVGSExGTkJRVk1zU1VGQlNTeERRVUZETEVkQlFVY3NVVUZCVVN4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRE0wTXNWMEZCU1N4TFFVRkxMRWRCUVVjc1UwRkJVeXhIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1IwRkJSeXhSUVVGUkxFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXpzN1FVRkZjRVVzVjBGQlNTeEpRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1JVRkJSVHRCUVVGRkxHRkJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUVVVN1FVRkRja01zVjBGQlNTeEpRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRXRCUVVzc1JVRkJSVHRCUVVGRkxHRkJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUVVVN1RVRkZlRU03TzBGQlJVUXNVMEZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTTdRVUZEZEVNc1UwRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEYWtRc1UwRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEYkVRc1EwRkJRenM3UVVGRlJpeFBRVUZKTEVOQlFVTXNZMEZCWXl4SFFVRkhMRmxCUVZjN1FVRkRMMElzV1VGQlR6dEJRVU5NTEZGQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3p0QlFVTXZRaXhSUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVkQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMDdUVUZEY2tNc1EwRkJRenRKUVVOSUxFTkJRVU03TzBGQlJVWXNUMEZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEZRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRVZCUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UVVGRE9VSXNUMEZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE96dEJRVVZrTEU5QlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1dVRkJWenRCUVVONFFpeFRRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMEZCUTJoRUxGTkJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEYWtVc1EwRkJRenRGUVVkSUxFTkJRVU03T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3TzB0QlowUnRRaXhSUVVGUk8wRkJSV2hDTEZsQlJsRXNVVUZCVVN4SFFVVmlPekpDUVVaTExGRkJRVkU3TzBGQlNYcENMRk5CUVVrc1QwRkJUeXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdPMEZCUlhoQ0xGTkJRVWtzVVVGQlVTeEhRVUZITzBGQlEySXNZVUZCVVN4RFFVRkRMRWRCUVVjc1JVRkJReXhIUVVGSExFTkJRVU03UVVGRGFrSXNaVUZCVlN4RFFVTllPMEZCUTBNc1ZVRkJReXhGUVVGRkxFZEJRVWM3UVVGRFRpeFZRVUZETEVWQlFVVXNSMEZCUnp0UlFVTk9MRVZCUTBRN1FVRkRReXhWUVVGRExFVkJRVVVzU1VGQlNUdEJRVU5RTEZWQlFVTXNSVUZCUlN4SFFVRkhPMUZCUTA0c1JVRkRSRHRCUVVORExGVkJRVU1zUlVGQlJTeEpRVUZKTzBGQlExQXNWVUZCUXl4RlFVRkZMRWRCUVVjN1VVRkRUaXhGUVVORU8wRkJRME1zVlVGQlF5eEZRVUZGTEVkQlFVYzdRVUZEVGl4VlFVRkRMRVZCUVVVc1IwRkJSenRSUVVOT0xFTkJRMFE3VFVGRFFTeERRVUZET3p0QlFVVkdMR2REUVRWQ2FVSXNVVUZCVVN3MlEwRTBRbTVDTEZOQlFWTXNSVUZCUXl4UFFVRlBMRVZCUVVNc1VVRkJVU3hGUVVGRk96dEJRVVZzUXl4VFFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNUVUZCVFN4RFFVRkRPenRCUVVWdVF5eFRRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRVZCUVVVc1EwRkJRenM3UVVGRmFFSXNVMEZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhMUVVGTExFTkJRVU03TzBGQlJYUkNMRk5CUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dEpRVWRpT3p0aFFYWkRhMElzVVVGQlVUczdaMEpCUVZJc1VVRkJVVHRCUVhsRE0wSXNiVUpCUVdNN1kwRkJRU3d3UWtGQlJ6czdPMEZCUjJZc1lVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNWVUZCUXl4TFFVRkxMRVZCUVVzN1FVRkROMElzWlVGQlNTeEpRVUZKTEVkQlFVY3NTVUZCU1N4TFFVRkxMRU5CUVVNc1MwRkJTeXhSUVVGTkxFTkJRVU03UVVGRGFrTXNhVUpCUVVzc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0VlFVTjJRaXhEUVVGRExFTkJRVU03TzBGQlJVZ3NZVUZCU1N4RFFVRkRMRlZCUVZVc1JVRkJSU3hEUVVGRE96dEJRVVZzUWl4aFFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNN1FVRkRia01zWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1kwRkJZeXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzBGQlF6RkRMR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJRenM3UVVGRmRrTXNZVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPenRCUVVWd1F5eGhRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTTdRVUZEYmtNc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNZMEZCWXl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE96dEJRVVU1UXl4aFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkZja003TzBGQlJVUXNhMEpCUVdFN1kwRkJRU3g1UWtGQlJ6czdRVUZGWkN4alFVRkxMRWxCUVVrc1EwRkJReXhIUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdRVUZEZEVNc1pVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRCUVVOMlFpeGxRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzFWQlEzUkNPenRCUVVWRUxHRkJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0UlFVVm1PenRCUVVWRUxHMUNRVUZqTzJOQlFVRXNNRUpCUVVjN096dEJRVVZtTEdGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExHVkJRV1VzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJRenRCUVVOMFJDeGhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhSUVVGUkxFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVOeVJDeGhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVOdVJDeGhRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGRExFbEJRVWtzUlVGQlN6dEJRVU16UWl4bFFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGbEJRVmtzUTBGQlF5eE5RVUZOTEVWQlFVTXNUVUZCU3l4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03VlVGRGRFUXNRMEZCUXl4RFFVRkRPMUZCUlVvN08wRkJSVVFzVjBGQlRUdGpRVUZCTEd0Q1FVRkhPenRCUVVWUUxHRkJRVWtzUTBGQlF5eGhRVUZoTEVWQlFVVXNRMEZCUXp0UlFVTjBRanM3UVVGRlJDeHZRa0ZCWlR0alFVRkJMREpDUVVGSE96czdRVUZEYUVJc1lVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEZRVUZGTEVOQlFVTTdRVUZEYWtJc1lVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNWVUZCUXl4SlFVRkpMRVZCUVVzN1FVRkRNMElzYVVKQlFVc3NUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0VlFVTTFReXhEUVVGRExFTkJRVU03VVVGRFNqczdRVUZGUkN4clFrRkJZVHRqUVVGQkxIbENRVUZIT3pzN1FVRkhaQ3hoUVVGSkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVkQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJRenM3T3pzN1FVRkxMME1zWVVGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1ZVRkJReXhKUVVGSkxFVkJRVXM3TzBGQlJUTkNMR1ZCUVVrc1NVRkJTU3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRPMVZCUTNoRUxFTkJRVU1zUTBGQlF6czdPMEZCU1Vnc1lVRkJTU3hKUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NSMEZCUnl4SFFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRWRCUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXpzN1FVRkZja1VzWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1VVRkJVU3hGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZET3pzN096dEJRVXQyUXl4aFFVRkpMRWxCUVVrc1NVRkJTU3hIUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVVXNSMEZCUnl4SFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFZEJRVU1zU1VGQlNTeERRVUZETzBGQlF6bERMR0ZCUVVrc1NVRkJTU3hKUVVGSkxFZEJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXpzN1FVRkZla0lzWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1VVRkJVU3hGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzFGQlJYaERPenRCUVVsRUxGVkJRVXM3WTBGQlFTeHBRa0ZCUnpzN1FVRkZUaXhoUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEV0QlFVc3NRMEZCUXp0QlFVTjJRaXhoUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4bFFVRmxMRVZCUVVVc1EwRkJRenM3UVVGRmRFTXNZVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEhRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRVZCUVVNc1EwRkJReXhIUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU51Uml4aFFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXpzN08wRkJSemxDTEdGQlFVa3NRMEZCUXl4bFFVRmxMRVZCUVVVc1EwRkJRenRCUVVOMlFpeGhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZEYWtNc1lVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzFGQlEyUTdPMEZCUlVRc1UwRkJTVHRqUVVGQkxHZENRVUZITzBGQlEwNHNZVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRk8wRkJRMllzWlVGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFVkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNCRUxHVkJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRPenRCUVVWeVFpeGxRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFZEJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUXl4RFFVRkRMRWRCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVkQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRM0JHTEdWQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZET3p0QlFVVTNRaXhsUVVGSkxFTkJRVU1zWlVGQlpTeEZRVUZGTEVOQlFVTTdRVUZEZWtJc1pVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRMmhETEdWQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRWUVVOa08xRkJRMFE3TzBGQlJVUXNXVUZCVHp0alFVRkJMRzFDUVVGSE96dEJRVVZVTEdGQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRk8wRkJRMnBDTEdWQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRPMVZCUTNSRE96dEJRVVZCTEdGQlFVa3NRMEZCUXl4bFFVRmxMRVZCUVVVc1EwRkJRenRCUVVOMlFpeGhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZEYWtNc1lVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZET3pzN1FVRkhaQ3hoUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTnlRanM3UVVGSFJDeHZRa0ZCWlR0alFVRkJMREpDUVVGSE8wRkJRMnBDTEdGQlFVa3NXVUZCV1N4SFFVRkhMRWxCUVVrc1EwRkJRenM3UVVGRmVFSXNZVUZCU1N4WFFVRlhMRWRCUVVjc1MwRkJTeXhEUVVGRE8wRkJRM2hDTEdGQlFVa3NUVUZCVFN4SFFVRkhMRXRCUVVzc1EwRkJRenRCUVVOc1FpeGhRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUjBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUTJoRExHRkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUjBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRPMEZCUTI1RExHRkJRVWtzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNN1FVRkRlRUlzWTBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN096dEJRVWR3UXl4bFFVRkpMRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVjc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUlN4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUnl4RFFVRkRMRU5CUVVNc1EwRkJSU3hEUVVGRE96czdRVUZITlVZc1pVRkJTU3hSUVVGUkxFZEJRVWNzVjBGQlZ5eEZRVUZGTzBGQlF6TkNMSGRDUVVGWExFZEJRVWNzVVVGQlVTeERRVUZETzBGQlEzWkNMSGxDUVVGWkxFZEJRVWNzUTBGQlF5eERRVUZETzBGQlEycENMRzFDUVVGTkxFZEJRVWNzUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGVFSTdWVUZGUkRzN08wRkJSMFFzWVVGQlNTeFhRVUZYTEVkQlFVTXNTVUZCU1N4RlFVRkZPenRCUVVWdVFpeDFRa0ZCV1N4SFFVRkhMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRWRCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZET3p0QlFVVTNSQ3hsUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4WlFVRlpMRVZCUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUzBGQlN5eERRVUZETzBGQlF6TkRMR05CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNSMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTenRCUVVNeFFpeGpRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEhRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5PMWxCUXpkQ0xFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTlNMR1ZCUVVrc1EwRkJReXhSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETzFWQlJYWkNPenRCUVVWRUxHZENRVUZQTEZsQlFWa3NRMEZCUXp0UlFVTndRanM3UVVGRlJDeHJRa0ZCWVR0alFVRkJMSFZDUVVGRExFTkJRVU1zUlVGQlJUczdPMEZCUTJZc1lVRkJTU3hMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETzBGQlEyUXNZVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zVlVGQlF5eEpRVUZKTEVWQlFVTXNRMEZCUXl4RlFVRkxPMEZCUXpkQ0xHVkJRVWtzVFVGQlN5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJUdEJRVU40UWl4clFrRkJTeXhIUVVGSExFTkJRVU1zUjBGQlF5eERRVUZETEVOQlFVTTdXVUZEWWp0VlFVTkdMRU5CUVVNc1EwRkJRenRCUVVOSUxHZENRVUZQTEV0QlFVc3NRMEZCUXp0UlFVTmtPenRCUVVWRUxHTkJRVk03WTBGQlFTeHRRa0ZCUXl4RFFVRkRMRVZCUVVVN08wRkJSVm9zWVVGQlNTeFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEYUVRc1lVRkJTU3hSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03TzBGQlJTOURMR0ZCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkZMRkZCUVZFc1JVRkJSU3hSUVVGUkxFTkJRVVVzUTBGQlF6dFJRVVV4UXpzN1FVRkxSQ3hsUVVGVk96czdPenM3WTBGQlFTeHpRa0ZCUnp0QlFVTllMR0ZCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFWTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJRenRCUVVNMVFpeHJRa0ZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdWVUZEYkVJc1EwRkJReXhEUVVGRE8xRkJRMG83TzBGQlVVUXNZVUZCVVRzN096czdPenM3WTBGQlFTeHJRa0ZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhGUVVGRk8wRkJRMW9zWVVGQlNTeExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU03TzBGQlJUbENMR0ZCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF6czdRVUZGYkVJc1kwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMEZCUTNoRExHVkJRVWtzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTzBGQlEzWkNMR3RDUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETzBGQlExWXNiVUpCUVUwN1dVRkRVRHRWUVVOSU96dEJRVVZCTEdGQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETEVWQlFVVXNTVUZCU1N4TFFVRkxMRU5CUVVNN1FVRkRjRU1zV1VGQlF5eEZRVUZGTEVOQlFVTTdRVUZEU2l4WlFVRkRMRVZCUVVVc1EwRkJRenRWUVVOTUxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXpzN1FVRkZWaXhoUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPenRCUVVWMFFpeGhRVUZKTEVOQlFVTXNaVUZCWlN4RlFVRkZMRU5CUVVNN1FVRkRka0lzWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZET3p0QlFVVm9ReXhoUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdVVUZEWmpzN1FVRlBSQ3hUUVVGSk96czdPenM3TzJOQlFVRXNZMEZCUXl4RFFVRkRMRVZCUVVVN08wRkJSVTRzWVVGQlNTeFRRVUZUTEVkQlFVY3NTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU4wUXl4aFFVRkpMRlZCUVZVc1IwRkJSeXhUUVVGVExFZEJRVU1zUTBGQlF5eERRVUZETzBGQlF6ZENMR0ZCUVVrc1ZVRkJWU3hIUVVGSExFTkJRVU1zUlVGQlJUdEJRVU5zUWl4eFFrRkJWU3hIUVVGSExFTkJRVU1zUTBGQlF6dFZRVU5vUWp0QlFVTkVMR0ZCUVVrc1UwRkJVeXhKUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RlFVRkZPMEZCUTJ4RExHOUNRVUZUTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFZEJRVU1zUTBGQlF5eERRVUZETzFWQlEycERPMEZCUTBRc1lVRkJTU3hWUVVGVkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJRenRCUVVONFF5eGhRVUZKTEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzBGQlEzUkRMR0ZCUVVrc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RlFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFVkJRVVVzVTBGQlV5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGVFUXNZVUZCU1N4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVWQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNc1JVRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEZEVRc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1FVRkRlRUlzWjBKQlFVOHNTMEZCU3l4RFFVRkRPMUZCUTJRN08wRkJVMFFzWTBGQlV6czdPenM3T3pzN08yTkJRVUVzYlVKQlFVTXNTMEZCU3l4RlFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFVkJRVVU3UVVGRGJrSXNZVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRelZDTEdGQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRGRFSXNZVUZCU1N4RFFVRkRMR1ZCUVdVc1JVRkJSU3hEUVVGRE8wRkJRM1pDTEdGQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTm9ReXhoUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdVVUZEWmpzN1FVRlRSQ3huUWtGQlZ6czdPenM3T3pzN08yTkJRVUVzY1VKQlFVTXNTMEZCU3l4RlFVRkRMRTlCUVU4c1JVRkJReXhQUVVGUExFVkJRVVU3UVVGRGFrTXNZVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVTXNUMEZCVHl4RlFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wRkJRMmhHTEdGQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRGRFSXNZVUZCU1N4RFFVRkRMR1ZCUVdVc1JVRkJSU3hEUVVGRE8wRkJRM1pDTEdGQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTm9ReXhoUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdVVUZEWmpzN1FVRlBSQ3hwUWtGQldUczdPenM3T3p0alFVRkJMSE5DUVVGRExFdEJRVXNzUlVGQlJUdEJRVU5zUWl4aFFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRPMEZCUXpWQ0xHRkJRVWtzUTBGQlF5eGxRVUZsTEVWQlFVVXNRMEZCUXp0QlFVTjJRaXhoUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRGFFTXNZVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8xRkJRMlk3TzBGQlQwUXNZMEZCVXpzN096czdPenRqUVVGQkxHMUNRVUZETEZOQlFWTXNSVUZCUlRzN08wRkJRMjVDTEdkQ1FVRlBMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeEZRVUZGTzBGQlEzaENMR1ZCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1ZVRkRla0k3UVVGRFJDeHJRa0ZCVXl4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGRExFdEJRVXNzUlVGQlN6dEJRVU16UWl4cFFrRkJTeXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNSVUZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VlVGRGFFTXNRMEZCUXl4RFFVRkRPMEZCUTBnc1lVRkJTU3hEUVVGRExHVkJRV1VzUlVGQlJTeERRVUZETzBGQlEzWkNMR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVOb1F5eGhRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1VVRkRaanM3T3p0VlFUZFdhMElzVVVGQlVUdEpRVUZUTEZOQlFWTTdPMnRDUVVFeFFpeFJRVUZSTEVNN096czdPenRCUTJwSU4wSXNZVUZCV1N4RFFVRkRPenM3T3pzN096czdPMEZCUldJc1MwRkJTU3hIUVVGSExFZEJRVWNzYlVKQlFVOHNRMEZCUXl4RFFVRmhMRU5CUVVNc1EwRkJRenM3UVVGRmFrTXNTMEZCU1N4VFFVRlRMRWRCUVVjc2JVSkJRVThzUTBGQlF5eERRVUZ0UWl4RFFVRkRMRU5CUVVNN096czdPenM3T3pzN096czdPenM3T3pzN096czdPMHRCZFVKd1F5eFBRVUZQTEhWQ1FVRlJMRU5CUVZNc1JVRkJlRUlzVDBGQlR6czdTMEZGU3l4WFFVRlhPMEZCUlc1Q0xGbEJSbEVzVjBGQlZ5eEhRVVZvUWpzeVFrRkdTeXhYUVVGWE96dEJRVWsxUWl4VFFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExFOUJRVThzUlVGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXpzN1FVRkZhRU1zVTBGQlNTeFJRVUZSTEVkQlFVYzdRVUZEWWl4aFFVRlJMRU5CUVVNc1IwRkJSeXhGUVVGRExFZEJRVWNzUTBGQlF6dE5RVU5zUWl4RFFVRkRPenRCUVVWR0xHZERRVlpwUWl4WFFVRlhMRFpEUVZWMFFpeFRRVUZUTEVWQlFVTXNUMEZCVHl4RlFVRkRMRkZCUVZFc1JVRkJSVHM3UVVGRmJFTXNVMEZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhQUVVGUExFVkJRVVVzUTBGQlF6czdRVUZGZWtJc1UwRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMR05CUVdNc1JVRkJSU3hEUVVGRE8wRkJRemxETEZOQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF6dEJRVU0zUWl4VFFVRkpMRU5CUVVNc1dVRkJXU3hIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNhVUpCUVdsQ0xFTkJRVU03UVVGRGNFUXNVMEZCU1N4RFFVRkRMRk5CUVZNc1IwRkJSeXhKUVVGSkxGVkJRVlVzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN08wRkJSVzVFTEZOQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRE96dEJRVVZ1UWl4VFFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFdEJRVXNzUTBGQlF6czdRVUZGY0VJc1UwRkJTU3hEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzBsQlJXSTdPMkZCZWtKclFpeFhRVUZYT3p0blFrRkJXQ3hYUVVGWE8wRkJNa0k1UWl4bFFVRlZPMk5CUVVFc2MwSkJRVWM3UVVGRFdDeGhRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWxCUVVrc1IwRkJSeXhEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1FVRkRMME1zWVVGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF6dFJRVU53UXpzN1FVRkZSQ3hyUWtGQllUdGpRVUZCTEhsQ1FVRkhPMEZCUTJRc1lVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1JVRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdVVUZETlVNN08wRkJSVVFzYlVKQlFXTTdZMEZCUVN3d1FrRkJSenRCUVVObUxHRkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhsUVVGbExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNN1VVRkRPVVE3TzBGQlJVUXNWMEZCVFR0alFVRkJMR3RDUVVGSE96dEJRVVZRTEdGQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSVHRCUVVObUxHZERRVUZ4UWl4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1ZVRkRMME03TzBGQlJVUXNZVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03TzBGQlJXNUVMR0ZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF6dEJRVU5xUkN4aFFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN08wRkJSVEZHTEdGQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1NVRkJTU3hKUVVGSkxFTkJRVU1zVTBGQlV5eEZRVUZGT3pzN08wRkJTV3BETEdWQlFVa3NVVUZCVVN4SFFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1dVRkJZU3hEUVVGRE8wRkJReTlFTEdWQlFVa3NVMEZCVXl4aFFVRkRPMEZCUTJRc1pVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZET3p0QlFVVldMR1ZCUVVrc1ZVRkJWU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1IwRkJReXhGUVVGRkxFTkJRVU03TzBGQlJUbERMR2RDUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExGbEJRVmtzUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkRMRlZCUVZVc1JVRkJSVHRCUVVOMlJDeHpRa0ZCVXl4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NSVUZCUlN4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4SFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRE1VVXNjMEpCUVZNc1NVRkJTU3hIUVVGSExFTkJRVU03UVVGRGFrSXNjMEpCUVZNc1NVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNN08wRkJSWGhETEdsQ1FVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eFRRVUZUTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU03UVVGRGJrUXNhVUpCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRVZCUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4SFFVRkRMRk5CUVZNc1JVRkJReXhSUVVGUkxFZEJRVU1zVlVGQlZTeEZRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPenRCUVVWdVJ5eGpRVUZETEVsQlFVc3NVVUZCVVN4SFFVRkRMRlZCUVZjc1EwRkJRenRaUVVNMVFqdFZRVU5HTzFGQlEwWTdPMEZCVVVRc1dVRkJUenM3T3pzN096czdPMk5CUVVFc2FVSkJRVU1zU1VGQlNTeEZRVUZGTzBGQlExb3NZVUZCU1N4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRk8wRkJRMllzWlVGQlNTeERRVUZETEZWQlFWVXNSVUZCUlN4RFFVRkRPMVZCUTI1Q08wRkJRMFFzWVVGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNN1FVRkRia0lzWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzBGQlEyNURMR0ZCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFJRVU5tT3p0QlFVdEVMR1ZCUVZVN096czdPenRqUVVGQkxITkNRVUZITzBGQlExZ3NZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhWUVVGVkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMEZCUTNSRExHRkJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTNCQ096dEJRVVZFTEZWQlFVczdZMEZCUVN4cFFrRkJSenRCUVVOT0xHRkJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRE8wRkJRek5DTEdGQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRSUVVObU96dEJRVVZFTEd0Q1FVRmhPMk5CUVVFc2VVSkJRVWM3UVVGRFpDeGhRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRXRCUVVzc1EwRkJRenRSUVVOeVFqczdPenRWUVhoSGEwSXNWMEZCVnp0SlFVRlRMRk5CUVZNN08ydENRVUUzUWl4WFFVRlhMRU03T3pzN096dEJRemRDYUVNc1lVRkJXU3hEUVVGRE96czdPenM3T3pzN08wRkJSV0lzUzBGQlNTeEhRVUZITEVkQlFVY3NiVUpCUVU4c1EwRkJReXhEUVVGaExFTkJRVU1zUTBGQlF6dEJRVU5xUXl4TFFVRkpMRWxCUVVrc1IwRkJSeXh0UWtGQlR5eERRVUZETEVOQlFXTXNRMEZCUXl4RFFVRkRPMEZCUTI1RExFdEJRVWtzVTBGQlV5eEhRVUZITEcxQ1FVRlBMRU5CUVVNc1EwRkJiVUlzUTBGQlF5eERRVUZET3pzN096czdPenM3T3pzN096czdPenM3T3pzN096dExRWGRDY0VNc1QwRkJUeXgxUWtGQlVTeERRVUZUTEVWQlFYaENMRTlCUVU4N08wdEJSVXNzUzBGQlN6dEJRVVZpTEZsQlJsRXNTMEZCU3l4SFFVVldPekpDUVVaTExFdEJRVXM3TzBGQlNYUkNMRk5CUVVrc1QwRkJUeXhIUVVGSExFTkJRVU1zVDBGQlR5eEZRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPenRCUVVWb1F5eFRRVUZKTEZGQlFWRXNSMEZCUnp0QlFVTmlMR0ZCUVZFc1EwRkJReXhGUVVGRkxFVkJRVU1zUjBGQlJ5eERRVUZETzAxQlEycENMRU5CUVVNN08wRkJSVVlzWjBOQlZtbENMRXRCUVVzc05rTkJWV2hDTEZOQlFWTXNSVUZCUXl4UFFVRlBMRVZCUVVNc1VVRkJVU3hGUVVGRk96dEJRVVZzUXl4VFFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFOUJRVThzUlVGQlJTeERRVUZET3p0QlFVVjZRaXhUUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEVOQlFVTXNRMEZCUXpzN1FVRkZiRUlzVTBGQlNTeERRVUZETEZGQlFWRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExIRkNRVUZ4UWl4RFFVRkZMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVVVzUTBGQlF6czdRVUZGY0VVc1UwRkJTU3hEUVVGRExGTkJRVk1zUjBGQlJ5eEZRVUZGTEVOQlFVTTdPMEZCUlhCQ0xGVkJRVXNzU1VGQlNTeERRVUZETEVkQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMEZCUTJ4RExGZEJRVWtzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1kwRkJZeXhGUVVGRkxFTkJRVU03UVVGRE4wTXNWMEZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhQUVVGUExFTkJRVU1zVVVGQlVTeEZRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTJ4RExHVkJRVkVzUTBGQlF5eFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRPMEZCUTNoQ0xHVkJRVkVzUTBGQlF5eHhRa0ZCY1VJc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRGJrTXNWMEZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVVVzVVVGQlVTeERRVUZGTEVOQlFVTTdUVUZEYWtNN1FVRkRSQ3hUUVVGSkxFTkJRVU1zV1VGQldTeEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zYVVKQlFXbENMRU5CUVVNN1FVRkRlRVFzVTBGQlNTeERRVUZETEZOQlFWTXNSMEZCUnl4SlFVRkpMRmxCUVZrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdPenM3T3pzN096czdPenM3UVVGaGNrUXNVMEZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU03TzBGQlJXNUNMRk5CUVVrc1EwRkJReXhGUVVGRkxFZEJRVWNzUTBGQlF5eFJRVUZSTEVOQlFVTTdPMEZCUlhCQ0xGTkJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXpzN1FVRkZXaXhUUVVGSkxFTkJRVU1zVlVGQlZTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUjBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRPenRCUVVVeFJDeFRRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1NVRkZaanM3WVVGdVJHdENMRXRCUVVzN08yZENRVUZNTEV0QlFVczdRVUZ4UkhoQ0xHVkJRVlU3WTBGQlFTeHpRa0ZCUnp0QlFVTllMR0ZCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNTeEhRVUZITEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU12UXl4aFFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRPMUZCUTNCRE96dEJRVVZFTEd0Q1FVRmhPMk5CUVVFc2VVSkJRVWM3UVVGRFpDeGhRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eEZRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVNMVF6czdRVUZGUkN4dFFrRkJZenRqUVVGQkxEQkNRVUZITzBGQlEyWXNZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEdWQlFXVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF6dFJRVU01UkRzN1FVRkZSQ3hYUVVGTk8yTkJRVUVzYTBKQlFVYzdPMEZCUlZBc1lVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTzBGQlEyWXNaME5CUVhGQ0xFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF6dFZRVU12UXpzN1FVRkZSQ3hoUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4VFFVRlRMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTTdRVUZEYWtRc1lVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhGUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE96dEJRVVV6Uml4alFVRkxMRWxCUVVrc1EwRkJReXhIUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVkQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFVkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVTdPMEZCUlhoRExHVkJRVWtzU1VGQlNTeERRVUZETEUxQlFVMHNSVUZCUlRzN1FVRkZaaXhwUWtGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXh6UWtGQmMwSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03TzBGQlJYcEVMR2xDUVVGSkxFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTTdPMEZCUlZvc2EwSkJRVXNzU1VGQlNTeEZRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRVZCUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJRenRCUVVNeFF5eHJRa0ZCUnl4SlFVRkxMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUlVGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhGUVVGRExFTkJRVVVzUTBGQlF6dGpRVU51UkRzN1FVRkZSQ3huUWtGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN08wRkJSVGRETEdsQ1FVRkpMRU5CUVVNc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJSV2hETEUxQlFVMHNTVUZCU1N4SlFVRkpMRU5CUVVNc1JVRkJSU3hIUVVGSExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVsQlFVa3NRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhSUVVGUkxFVkJRVVU3UVVGRGJFUXNhVUpCUVVrc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzFsQlEyUXNUVUZCVFR0QlFVTk1MR2xDUVVGSkxFTkJRVU1zUlVGQlJTeEhRVUZITEVOQlFVTXNVVUZCVVN4RFFVRkRPMWxCUTNKQ096czdPMEZCUzBRc1pVRkJTU3hKUVVGSkxFTkJRVU1zUlVGQlJTeEhRVUZITEVOQlFVTXNSVUZCUlN4RlFVRkZPenRCUVVWcVFpeHBRa0ZCU1N4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlF6TkRMR2xDUVVGSkxFZEJRVWNzUjBGQlJ5eE5RVUZOTEVkQlFVY3NUVUZCVFN4RFFVRkRPMEZCUXpGQ0xHbENRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUlVGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeEZRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPenRCUVVWc1JDeHBRa0ZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zVTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRE8wRkJRMjVFTEdsQ1FVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1IwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eEZRVUZETEVsQlFVa3NRMEZCUXl4VlFVRlZMRVZCUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE96czdXVUZKYkVjN1ZVRkZSanRSUVVWR096dEJRVlZFTEZsQlFVODdPenM3T3pzN096czdZMEZCUVN4cFFrRkJReXhKUVVGSkxFVkJRVU1zVVVGQlVTeEZRVUZGTzBGQlEzSkNMR0ZCUVVrc1NVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJUdEJRVU5tTEdWQlFVa3NRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJRenRWUVVOdVFqczdPMEZCUjBRc1lVRkJTU3hSUVVGUkxFVkJRVVU3UVVGRFdpeGxRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRkZCUVZFc1EwRkJRenRWUVVNeFFpeE5RVUZOTEVsQlFVa3NTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSVHRCUVVNMVFpeGxRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU03VlVGRGJrTXNUVUZCVFR0QlFVTk1MR1ZCUVVrc1EwRkJReXhSUVVGUkxFZEJRVWNzUTBGQlF5eERRVUZETzFWQlEyNUNPMEZCUTBRc1lVRkJTU3hEUVVGRExGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFZEJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXpzN1FVRkZNVVFzWVVGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNN1FVRkRia0lzWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZET3pzN1VVRkhjRU03TzBGQlMwUXNaVUZCVlRzN096czdPMk5CUVVFc2MwSkJRVWM3TzBGQlJWZ3NZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhWUVVGVkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMEZCUTNSRExHRkJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NTMEZCU3l4RFFVRkRPenRCUVVWd1FpeGhRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NSMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRE8xRkJSVE5FT3p0QlFVVkVMRlZCUVVzN1kwRkJRU3hwUWtGQlJ6dEJRVU5PTEdGQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzBGQlF6TkNMR0ZCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFJRVU5tT3p0QlFVVkVMR3RDUVVGaE8yTkJRVUVzZVVKQlFVYzdRVUZEWkN4aFFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFdEJRVXNzUTBGQlF6dFJRVU55UWpzN096dFZRWEpMYTBJc1MwRkJTenRKUVVGVExGTkJRVk03TzJ0Q1FVRjJRaXhMUVVGTExFTTdPenM3T3p0QlF6bENNVUlzWVVGQldTeERRVUZET3pzN096czdPenM3TzBGQlJXSXNTMEZCU1N4SFFVRkhMRWRCUVVjc2JVSkJRVThzUTBGQlF5eERRVUZoTEVOQlFVTXNRMEZCUXp0QlFVTnFReXhMUVVGSkxGTkJRVk1zUjBGQlJ5eHRRa0ZCVHl4RFFVRkRMRU5CUVcxQ0xFTkJRVU1zUTBGQlF6czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3UzBGMVFuQkRMRTlCUVU4c2RVSkJRVkVzUTBGQlV5eEZRVUY0UWl4UFFVRlBPenRMUVVWTExGbEJRVms3UVVGRmNFSXNXVUZHVVN4WlFVRlpMRWRCUldwQ096SkNRVVpMTEZsQlFWazdPMEZCU1RkQ0xGTkJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNUMEZCVHl4RlFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE96dEJRVVZvUXl4VFFVRkpMRkZCUVZFc1IwRkJSenRCUVVOaUxHRkJRVkVzUTBGQlF5eEhRVUZITEVWQlFVTXNSMEZCUnl4RFFVRkRPMDFCUTJ4Q0xFTkJRVU03TzBGQlJVWXNaME5CVm1sQ0xGbEJRVmtzTmtOQlZYWkNMRk5CUVZNc1JVRkJReXhQUVVGUExFVkJRVU1zVVVGQlVTeEZRVUZGT3p0QlFVVnNReXhUUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEU5QlFVOHNSVUZCUlN4RFFVRkRPenRCUVVWNlFpeFRRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTTdRVUZET1VNc1UwRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRPMEZCUXpkQ0xGTkJRVWtzUTBGQlF5eFpRVUZaTEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhwUWtGQmFVSXNRMEZCUXp0QlFVTndSQ3hUUVVGSkxFTkJRVU1zVTBGQlV5eEhRVUZITEVsQlFVa3NWVUZCVlN4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dEJRVU51UkN4VFFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExIRkNRVUZ4UWl4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6czdRVUZGY0VRc1UwRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTTdPMEZCUlc1Q0xGTkJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NTMEZCU3l4RFFVRkRPenRCUVVWd1FpeFRRVUZKTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNN08wRkJSVm9zVTBGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMGxCUTJZN08yRkJNMEpyUWl4WlFVRlpPenRuUWtGQldpeFpRVUZaTzBGQk5rSXZRaXhsUVVGVk8yTkJRVUVzYzBKQlFVYzdRVUZEV0N4aFFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzUjBGQlJ5eERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGREwwTXNZVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXp0UlFVTndRenM3UVVGRlJDeHJRa0ZCWVR0alFVRkJMSGxDUVVGSE8wRkJRMlFzWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUlVGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkROVU03TzBGQlJVUXNiVUpCUVdNN1kwRkJRU3d3UWtGQlJ6dEJRVU5tTEdGQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eGxRVUZsTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU03VVVGRE9VUTdPMEZCUlVRc1YwRkJUVHRqUVVGQkxHdENRVUZIT3p0QlFVVlFMR0ZCUVVrc1NVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJUdEJRVU5tTEdkRFFVRnhRaXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU03VlVGREwwTTdPMEZCUlVRc1lVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eHhRa0ZCY1VJc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdPMEZCUlhCRUxHRkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRk5CUVZNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXp0QlFVTnFSQ3hoUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03TzBGQlJURkdMR0ZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEZOQlFWTXNSMEZCUnl4RlFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRNVVFzWVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1YwRkJWeXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRPenRCUVVWeVJDeGhRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhUUVVGVExFVkJRVVVzUTBGQlF6czdRVUZGYUVNc1lVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGT3p0QlFVVm1MR1ZCUVVrc1ZVRkJWU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1IwRkJSeXhEUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXp0QlFVTnlSU3hsUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdPMEZCUlZZc1owSkJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPenRCUVVVeFF5eHBRa0ZCU1N4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SFFVRkxMRU5CUVVNN1FVRkRiRU1zYVVKQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRE96dEJRVVV6UXl4cFFrRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTzBGQlExZ3NiVUpCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03WTBGRGJFTXNUVUZCVFR0QlFVTk1MRzFDUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzJOQlEyeERPenRCUVVWRUxHTkJRVU1zU1VGQlNTeFZRVUZWTEVOQlFVTTdXVUZEYWtJN1ZVRkRSaXhOUVVGTk8wRkJRMGdzWlVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhOUVVGTkxFZEJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZETlVRc1pVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NSVUZCUlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVkQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1ZVRkRka1k3TzBGQlJVUXNZVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdVVUZET1VJN08wRkJVMFFzV1VGQlR6czdPenM3T3pzN08yTkJRVUVzYVVKQlFVTXNTVUZCU1N4RlFVRkZPenRCUVVWYUxHRkJRVWtzU1VGQlNTeERRVUZETEUxQlFVMHNSVUZCUlR0QlFVTm1MR1ZCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF6dFZRVU51UWpzN1FVRkZSQ3hoUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXp0QlFVTnVRaXhoUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03TzBGQlJXNURMR0ZCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFJRVU5tT3p0QlFVdEVMR1ZCUVZVN096czdPenRqUVVGQkxITkNRVUZITzBGQlExZ3NZVUZCU1N4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRk8wRkJRMllzWlVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzBGQlEzUkRMR1ZCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETzFWQlEzQkNPMUZCUlVZN08wRkJSVVFzVlVGQlN6dGpRVUZCTEdsQ1FVRkhPMEZCUTA0c1lVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNN1FVRkRNMElzWVVGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMUZCUTJZN08wRkJSVVFzYTBKQlFXRTdZMEZCUVN4NVFrRkJSenRCUVVOa0xHRkJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUTNKQ096czdPMVZCZWtoclFpeFpRVUZaTzBsQlFWTXNVMEZCVXpzN2EwSkJRVGxDTEZsQlFWa3NRenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPMHREVlhKQ0xGTkJRVk1zSzBOQlFVMHNSVUZCYlVJN08wdEJRM1pETEVkQlFVY3NkVU5CUVUwc1EwRkJZVHM3UzBGRmNFSXNUVUZCVFN4MVFrRkJVU3hEUVVGVExFVkJRWFpDTEUxQlFVMDdPMHRCUlUwc1NVRkJTVHRCUVVWYUxGbEJSbEVzU1VGQlNTeERRVVZZTEUxQlFVMHNSVUZCUlN4UlFVRlJMRVZCUVVVN01rSkJSbGdzU1VGQlNUczdRVUZKY2tJc1UwRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEZRVUZGTEVOQlFVTTdRVUZEWml4VFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eE5RVUZOTEVOQlFVTTdRVUZETVVJc1UwRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU0xUXl4VFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEZRVUZGTEVOQlFVTTdPMEZCUlhSQ0xGTkJRVWtzVVVGQlVTeEZRVUZGTzBGQlExb3NWMEZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFZEJRVWNzVVVGQlVTeERRVUZETEZOQlFWTXNTVUZCU1N4VlFVRlZMRU5CUVVNN1FVRkRka1FzVjBGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1VVRkJVU3hEUVVGRExFbEJRVWtzU1VGQlNTeExRVUZMTEVOQlFVTTdRVUZEZWtNc1YwRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NVVUZCVVN4RFFVRkRMRWxCUVVrc1NVRkJTU3hMUVVGTExFTkJRVU03VFVGRGVrTXNUVUZCVFR0QlFVTk1MRmRCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eEhRVUZITEZWQlFWVXNRMEZCUXp0QlFVTnFReXhYUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkRlRUlzVjBGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1MwRkJTeXhEUVVGRE8wMUJRM2hDT3p0QlFVVkVMRk5CUVVrc1lVRkJZU3hIUVVGSExFMUJRVTBzUlVGQlJTeERRVUZETzBGQlF6ZENMRk5CUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNSMEZCUnl4aFFVRmhMRU5CUVVNc1RVRkJUU3hEUVVGRE8wRkJReTlETEZOQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUjBGQlJ5eGhRVUZoTEVOQlFVTXNTVUZCU1N4RFFVRkRPMEZCUXpORExGTkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1IwRkJSeXhoUVVGaExFTkJRVU1zUzBGQlN5eERRVUZETzBGQlF6ZERMRk5CUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NSMEZCUnl4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRE8wRkJRek5ETEZOQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGZEJRVmNzUjBGQlJ5eGhRVUZoTEVOQlFVTXNWMEZCVnl4RFFVRkRPMEZCUTNwRUxGTkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRlZCUVZVc1IwRkJSeXhoUVVGaExFTkJRVU1zVlVGQlZTeERRVUZETzBGQlEzWkVMRk5CUVVrc1EwRkJReXhqUVVGakxFVkJRVVVzUTBGQlF6dEJRVU4wUWl4VFFVRkpMRU5CUVVNc1kwRkJZeXhGUVVGRkxFTkJRVU03U1VGRGRrSTdPMmRDUVRWQ2EwSXNTVUZCU1R0QlFUaENka0lzYlVKQlFXTTdZMEZCUVN3d1FrRkJSenM3TzBGQlEyWXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEZOQlFWTXNSMEZCUnl4WlFVRlpMRU5CUVVNN1FVRkRhRVFzWVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExGVkJRVlVzUjBGQlJ5eE5RVUZOTEVOQlFVTTdRVUZETTBNc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMR0ZCUVdFc1IwRkJSeXhOUVVGTkxFTkJRVU03UVVGRE9VTXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEdkQ1FVRm5RaXhIUVVGSExFMUJRVTBzUTBGQlF6czdRVUZGYWtRc1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NVVUZCVVN4RFFVRkRMR0ZCUVdFc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6czdRVUZGYmtRc1owSkJRVThzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVWQlFVVTdRVUZETTBNc1pVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xVkJRMnhGT3p0QlFVVkVMR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRWRCUVVjc1MwRkJTeXhEUVVGRE8wRkJRM3BETEdGQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF5eFRRVUZUTEVkQlFVY3NXVUZCV1N4RFFVRkRPenRCUVVWc1JDeGhRVUZKTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhGUVVGRk8wRkJRMjVDTEdWQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSExGRkJRVkVzUTBGQlF5eGhRVUZoTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1FVRkRia1FzWlVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1UwRkJVeXhIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUXk5RExHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhWUVVGVkxFZEJRVWNzVDBGQlR5eERRVUZETzBGQlF6bERMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRWRCUVVjc1ZVRkJWU3hEUVVGRE8wRkJReTlETEdWQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVkQlFVY3NUVUZCVFN4RFFVRkRPMEZCUTNoRExHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFZEJRVWNzUzBGQlN5eERRVUZETzBGQlEzcERMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRWRCUVVjc1RVRkJUU3hEUVVGRE96dEJRVVV6UXl4bFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eFJRVUZSTEVOQlFVTXNZVUZCWVN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRMnBFTEdWQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eFJRVUZSTEVkQlFVY3NWVUZCVlN4RFFVRkRPMEZCUXpkRExHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFZEJRVWNzUzBGQlN5eERRVUZGTzBGQlEzQkRMR1ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRWRCUVVjc1MwRkJTeXhEUVVGRk8wRkJRM1JETEdWQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGTkJRVk1zUjBGQlJ5eEhRVUZITEVOQlFVTTdRVUZEYWtNc1pVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1IwRkJSeXhoUVVGaExFTkJRVU03UVVGREwwTXNaVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEZWQlFWVXNSMEZCUnl4TlFVRk5MRU5CUVVNN1FVRkRNME1zWlVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExGRkJRVkVzUjBGQlJ5eE5RVUZOTEVOQlFVTTdPMEZCUlhwRExHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFZEJRVWNzVTBGQlV5eERRVUZET3p0QlFVVXhReXhsUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4blFrRkJaMElzUTBGQlF5eFhRVUZYTEVWQlFVVXNXVUZCVFR0QlFVTnVSQ3h0UWtGQlN5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhsUVVGbExFZEJRVWNzVFVGQlN5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRlZCUVZVc1EwRkJRenRaUVVOMFJTeERRVUZETEVOQlFVTTdRVUZEU0N4bFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhaUVVGWkxFVkJRVVVzV1VGQlRUdEJRVU53UkN4dFFrRkJTeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4bFFVRmxMRWRCUVVjc1RVRkJTeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZkQlFWY3NRMEZCUXp0WlFVTjJSU3hEUVVGRExFTkJRVU03UVVGRFNDeGxRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4UFFVRlBMRVZCUVVVc1dVRkJUVHRCUVVNdlF5eHBRa0ZCU1N4TlFVRkxMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVU3UVVGRGJFSXNjVUpCUVVzc1NVRkJTU3hGUVVGRkxFTkJRVU03WTBGRFlpeE5RVUZOTzBGQlEwd3NjVUpCUVVzc1NVRkJTU3hGUVVGRkxFTkJRVU03WTBGRFlqdFpRVU5HTEVOQlFVTXNRMEZCUXpzN1FVRkhTQ3hsUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXpzN1FVRkZha1FzWlVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1ZVRkRiRVE3UVVGRFJDeGhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenM3T3pzN1FVRkxha1FzWVVGQlNTeEZRVUZGTEVkQlFVY3NVMEZCVXl4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzBGQlEyeEZMR05CUVVzc1NVRkJTU3hIUVVGSExFbEJRVWtzUlVGQlJTeEZRVUZGTzBGQlEyeENMR1ZCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1ZVRkRja0k3VVVGRFJqczdRVUZGUkN4dFFrRkJZenRqUVVGQkxEQkNRVUZITzBGQlEyWXNZVUZCU1N4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUlVGQlJUdEJRVU51UWl4bFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNaVUZCWlN4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZkQlFWY3NRMEZCUXp0QlFVTjBSU3hsUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hIUVVGSExGbEJRVmtzUjBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU03UVVGRGJrVXNaVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNSMEZCUnl4WlFVRlpMRWRCUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RFFVRkRPMEZCUXpGRkxHVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhsUVVGbExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRE8wRkJRMmhGTEdWQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF5eGxRVUZsTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETzFWQlEyeEZPMUZCUTBZN08wRkJSVVFzVTBGQlNUdGpRVUZCTEdkQ1FVRkhPMEZCUTB3c1lVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1IwRkJSeXhQUVVGUExFTkJRVU03UVVGRE0wTXNZVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETzFGQlEzWkNPenRCUVVWRUxGTkJRVWs3WTBGQlFTeG5Ra0ZCUnp0QlFVTk1MR0ZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRWRCUVVjc1RVRkJUU3hEUVVGRE8wRkJRekZETEdGQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFdEJRVXNzUTBGQlF6dFJRVU40UWpzN1FVRkZSQ3hoUVVGUk8yTkJRVUVzYTBKQlFVTXNTVUZCU1N4RlFVRkRMRXRCUVVzc1JVRkJSVHRCUVVOdVFpeGpRVUZMTEVsQlFVa3NSMEZCUnl4SlFVRkpMRWxCUVVrc1JVRkJSVHRCUVVOd1FpeGxRVUZKTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhSUVVGUkxFVkJRVVU3UVVGRGRFSXNhVUpCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RlFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xbEJRMmhETzFWQlEwWTdRVUZEUkN4aFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkRMMElzWVVGQlNTeERRVUZETEdOQlFXTXNSVUZCUlN4RFFVRkRPMUZCUTNaQ096dEJRVVZFTEZWQlFVczdZMEZCUVN4cFFrRkJSenRCUVVOT0xHTkJRVXNzU1VGQlNTeEhRVUZITEVsQlFVa3NTVUZCU1N4RlFVRkZPMEZCUTNCQ0xHVkJRVWtzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRTlCUVU4c1JVRkJSVHRCUVVOeVFpeHBRa0ZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETzFsQlEzSkNPMVZCUTBZN1VVRkRSanM3T3p0VlFXNUphMElzU1VGQlNUczdPMnRDUVVGS0xFbEJRVWtzUXpzN096czdPenM3T3pzN096dEJRek5EZWtJc1lVRkJXU3hEUVVGRE96dExRVVZPTEVkQlFVY3NkVU5CUVUwc1EwRkJZVHM3UzBGRGRFSXNWVUZCVlN4MVEwRkJUU3hEUVVGblFqczdRVUZGZGtNc1MwRkJTU3hwUWtGQmFVSXNSMEZCUnl4VlFVRkRMRTFCUVUwc1JVRkJReXhaUVVGWkxFVkJRVXM3UVVGREwwTXNUMEZCU1N4SlFVRkpMRWRCUVVjc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF6dEJRVU4yUWl4UFFVRkpMRmxCUVZrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJUdEJRVU4wUWl4cFFrRkJXU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZEZEVJc1RVRkJUVHRCUVVOTUxHbENRVUZaTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRM2hDTzBGQlEwUXNWVUZCVXl4SlFVRkpMRWRCUVVjc1dVRkJXU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZITzBWQlEzUkRMRU5CUVVNN08wRkJSVVlzUzBGQlNTeFBRVUZQTEVkQlFVY3NWVUZCUXl4UFFVRlBMRVZCUVVNc1NVRkJTU3hGUVVGRExFOUJRVThzUlVGQlN6dEJRVU4wUXl4VlFVRlBMRWRCUVVjc1QwRkJUeXhKUVVGSkxFVkJRVVVzUTBGQlF6dEJRVU40UWl4UlFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRMRlZCUVZVc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVTTdRVUZEYWtRc1UwRkJTU3hIUVVGSExFZEJRVWNzVDBGQlR5eERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenM3T3p0QlFVazVRaXhaUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhUUVVGVExFTkJRVU03TzBsQlJYcERPMEZCUTBRc1QwRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4WFFVRlhMRVZCUVVVc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpkRExFOUJRVWtzVFVGQlRTeEhRVUZITEVsQlFVa3NWVUZCVlN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVTnVSQ3hUUVVGTkxFTkJRVU1zUlVGQlJTeEhRVUZITEU5QlFVOHNRMEZCUXl4RlFVRkZMRU5CUVVNN1FVRkRka0lzVlVGQlR5eE5RVUZOTEVOQlFVTTdSVUZEWml4RFFVRkRPenRCUVVkR0xFdEJRVWtzVDBGQlR5eEhRVUZITEZWQlFVTXNUVUZCVFN4RlFVRkRMRTlCUVU4c1JVRkJTenM3UVVGRmFFTXNWVUZCVHl4SFFVRkhMRTlCUVU4c1NVRkJTU3hWUVVGVkxFTkJRVU03TzBGQlJXaERMRTlCUVVrc1dVRkJXU3hIUVVGSExFVkJRVVVzUTBGQlF6czdRVUZGZEVJc1QwRkJTU3hUUVVGVExFZEJRVWNzUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenM3UVVGRmVrTXNUMEZCU1N4RlFVRkZMRWRCUVVjc1JVRkJSU3hEUVVGRE96dEJRVVZhTEU5QlFVa3NXVUZCV1N4SFFVRkhMRk5CUVZNc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRCUVVOMlJDeFBRVUZKTEZGQlFWRXNSMEZCUnl4RlFVRkZMRU5CUVVNN1FVRkRiRUlzVVVGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGRExGbEJRVmtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1FVRkRlRU1zWVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU5vUXp0QlFVTkVMRkZCUVVzc1NVRkJTU3hEUVVGRExFZEJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSMEZCUXl4UlFVRlJMRU5CUVVNc1RVRkJUU3hGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTzBGQlEyeERMRk5CUVVrc1NVRkJTU3hIUVVGSExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4WlFVRlpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03UVVGRE4wTXNVMEZCU1N4SlFVRkpMRVZCUVVVN1FVRkRVaXhYUVVGSkxHRkJRV0VzUjBGQlJ5eExRVUZMTEVOQlFVTTdRVUZETVVJc1dVRkJTeXhKUVVGSkxFZEJRVWNzU1VGQlNTeFZRVUZWTEVWQlFVVTdRVUZETVVJc1lVRkJTU3hKUVVGSkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEV0QlFVY3NSMEZCUnl4RFFVRkRMRmRCUVZjc1JVRkJSU3hGUVVGRk8wRkJRekZETEhkQ1FVRmhMRWRCUVVjc1IwRkJSeXhEUVVGRE8xVkJRM0pDTzFGQlEwWTdRVUZEUkN4alFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExHRkJRV0VzUTBGQlF5eERRVUZETzBGQlF6TkNMRmRCUVVrc1RVRkJUU3hIUVVGSExFOUJRVThzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1lVRkJZU3hEUVVGRExFTkJRVU03UVVGRGFFUXNWMEZCU1N4TlFVRk5MRU5CUVVNc1JVRkJSU3hGUVVGRk8wRkJRMklzVjBGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhOUVVGTkxFTkJRVU03VVVGRGVFSXNUVUZCVFR0QlFVTk1MR0ZCUVVrc1JVRkJSU3hIUVVGSExHbENRVUZwUWl4RFFVRkRMRTFCUVUwc1JVRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dEJRVU5vUkN4WFFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETzFGQlEycENPMDFCUTBZN1NVRkRSanM3UVVGRlJDeFZRVUZQTEVWQlFVVXNRMEZCUXp0RlFVVllMRU5CUVVNN08wRkJSVVlzUzBGQlNTeEhRVUZITEVkQlFVY3NWVUZCUXl4SlFVRkpMRVZCUVVNc1RVRkJUU3hGUVVGRExFOUJRVThzUlVGQlN6dEJRVU5xUXl4UFFVRkpMRTFCUVUwc1IwRkJSeXhSUVVGUkxFTkJRVU1zWVVGQllTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUXpORExGVkJRVThzUjBGQlJ5eFBRVUZQTEVsQlFVa3NSVUZCUlN4RFFVRkRPMEZCUTNoQ0xFOUJRVWtzVFVGQlRTeEZRVUZGTzBGQlExWXNWMEZCVFN4SFFVRkhMRWRCUVVjc1EwRkJReXhaUVVGWkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdTVUZEYmtNc1RVRkJUVHRCUVVOTUxGZEJRVTBzUjBGQlJ5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRPMGxCUTNoQ08wRkJRMFFzVTBGQlRTeERRVUZETEZkQlFWY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVNelFpeFZRVUZQTEVOQlFVTXNUVUZCVFN4SFFVRkhMRTFCUVUwc1EwRkJRenRCUVVONFFpeFBRVUZKTEU5QlFVOHNRMEZCUXl4SlFVRkpMRVZCUVVVN1FVRkRhRUlzVjBGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRWRCUVVjc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNN1FVRkROVU1zVjBGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRWRCUVVjc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNN1NVRkRPVU03UVVGRFJDeFZRVUZQTEU5QlFVOHNRMEZCUXl4TlFVRk5MRVZCUVVNc1NVRkJTU3hGUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzBWQlEzSkRMRU5CUVVNN08xTkJSVThzVDBGQlR5eEhRVUZRTEU5QlFVODdVMEZEVUN4UFFVRlBMRWRCUVZBc1QwRkJUenRUUVVOUUxFZEJRVWNzUjBGQlNDeEhRVUZITEVNN096czdPenRCUXpGR1dpeGhRVUZaTEVOQlFVTTdPenM3T3pzN08wdEJSVTRzU1VGQlNTeDFRMEZCVFN4RFFVRmpPenRMUVVWV0xFbEJRVWs3UVVGRldpeFpRVVpSTEVsQlFVa3NSMEZGVkRzeVFrRkdTeXhKUVVGSk96czdRVUZMZEVJc1UwRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEZRVUZGTEVOQlFVTTdPenRCUVVkb1FpeFRRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhPMEZCUTFnc1lVRkJUU3hGUVVGRkxGZEJRVmM3UVVGRGJrSXNXVUZCU3l4RlFVRkZMRTFCUVUwN1RVRkRZaXhEUVVGRE96czdRVUZIUml4VFFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFTkJRVVVzVTBGQlV5eEZRVU42UWl4VlFVRlZMRVZCUTFZc1ZVRkJWU3hGUVVOV0xGVkJRVlVzUlVGRFZpeFZRVUZWTEVWQlExWXNSMEZCUnl4RlFVTklMRlZCUVZVc1JVRkRWaXhUUVVGVExFTkJRMVFzUTBGQlF6czdPMEZCUjBZc1UwRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE96czdRVUZIZWtJc1UwRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRKUVVWc1F6czdaMEpCT1VKclFpeEpRVUZKTzBGQmFVTjJRaXhUUVVGSk96czdPMk5CUVVFc1kwRkJReXhMUVVGTExFVkJRVU1zVFVGQlRTeEZRVUZGT3p0QlFVVnNRaXhoUVVGSkxGRkJRVkVzWVVGQlF6czdRVUZGWWl4aFFVRkpMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeExRVUZMTEZkQlFWY3NSVUZCUlR0QlFVTnlReXh0UWtGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1MwRkJTeXhGUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFWQlEzaERMRTFCUVUwc1NVRkJTU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNTMEZCU3l4UFFVRlBMRVZCUVVVN1FVRkRlRU1zYlVKQlFWRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUlVGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0VlFVTndReXhOUVVGTkxFbEJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRXRCUVVzc1RVRkJUU3hGUVVGRk8wRkJRM1pETEcxQ1FVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVWQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1ZVRkRia01zVFVGQlRUdEJRVU5PTEcxQ1FVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eExRVUZMTEVWQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1ZVRkRlRU03TzBGQlJVUXNaMEpCUVU4c1VVRkJVU3hEUVVGRE8xRkJSV2hDT3p0QlFVbEVMR05CUVZNN096czdZMEZCUVN4dFFrRkJReXhOUVVGTkxFVkJRVVVzVVVGQlVTeEZRVUZGT3p0QlFVVXpRaXhoUVVGSkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4TFFVRkxMRTFCUVUwc1NVRkJTU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NTMEZCU3l4TlFVRk5MRVZCUVVjN1FVRkRPVVFzWlVGQlNTeERRVUZETEUxQlFVMHNTVUZCU1N4RlFVRkZMRU5CUVVNN1ZVRkRiRUk3T3p0QlFVZEVMR0ZCUVVrc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4SFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdPMEZCUld4RUxHRkJRVWtzVVVGQlVTeEZRVUZGTzBGQlEySXNhVUpCUVUwc1NVRkJTU3hSUVVGUkxFTkJRVU03VlVGRGJrSTdPenRCUVVkRUxHRkJRVWtzVjBGQlZ5eEhRVUZITEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF6czdRVUZGTjBNc1owSkJRVThzVjBGQlZ5eEhRVUZITEVOQlFVTXNSVUZCUlR0QlFVTjJRaXh6UWtGQlZ5eEpRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRE8xVkJRMnBET3p0QlFVVkJMR0ZCUVVrc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN08wRkJSWEpETEdGQlFVa3NTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzUzBGQlN5eERRVUZET3p0QlFVVTNRaXhoUVVGSkxFZEJRVWNzU1VGQlNTeEhRVUZGTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRExFMUJRVTBzUTBGQlJTeERRVUZET3pzN1FVRkhha01zWVVGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hIUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZETEZsQlFWa3NRMEZCUXpzN1FVRkZiRVFzWjBKQlFVOHNTVUZCU1N4RFFVRkRPMUZCUlZvN08wRkJTVVFzVlVGQlN6czdPenRqUVVGQkxHVkJRVU1zVFVGQlRTeEZRVUZGTEZGQlFWRXNSVUZCUlRzN1FVRkZka0lzWVVGQlNTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1MwRkJTeXhOUVVGTkxFbEJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRXRCUVVzc1RVRkJUU3hGUVVGSE8wRkJRemxFTEdWQlFVa3NRMEZCUXl4TlFVRk5MRWxCUVVrc1JVRkJSU3hEUVVGRE8xVkJRMnhDT3pzN1FVRkhSQ3hoUVVGSkxFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1IwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPenRCUVVWc1JDeGhRVUZKTEZGQlFWRXNSVUZCUlR0QlFVTmlMR2xDUVVGTkxFbEJRVWtzVVVGQlVTeERRVUZETzFWQlEyNUNPenM3UVVGSFJDeGhRVUZKTEZkQlFWY3NSMEZCUnl4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTTdPenRCUVVjM1F5eGhRVUZKTEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlF5eE5RVUZOTEVOQlFVTXNSMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZET3p0QlFVVjJSQ3hqUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRWRCUVVNc1dVRkJXU3hEUVVGRExFZEJRVU1zV1VGQldTeERRVUZET3p0QlFVVndSQ3huUWtGQlR5eExRVUZMTEVOQlFVTTdVVUZGWWpzN1FVRkpSQ3hUUVVGSk96czdPMk5CUVVFc1kwRkJReXhOUVVGTkxFVkJRVU1zVVVGQlVTeEZRVUZGT3p0QlFVVnlRaXhoUVVGSkxGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1JVRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6czdRVUZGTDBNc1lVRkJTU3hEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGRkJRVkVzUjBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZET3p0QlFVVnVSQ3hWUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRWRCUVVNc1ZVRkJWU3hEUVVGRExFZEJRVU1zVlVGQlZTeERRVUZET3p0QlFVVjRReXhuUWtGQlR5eERRVUZETEVOQlFVTTdVVUZGVkRzN1FVRkZSQ3huUWtGQlZ6dGpRVUZCTEhWQ1FVRkhPMEZCUTFvc1lVRkJTU3hSUVVGUkxFZEJRVWNzUlVGQlJTeERRVUZETzBGQlEyeENMR05CUVVzc1NVRkJTU3hEUVVGRExFZEJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSMEZCUXl4VFFVRlRMRU5CUVVNc1RVRkJUU3hGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTzBGQlEyNURMRzFDUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZGTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVVc1JVRkJSU3hIUVVGSExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUlN4RFFVRkZMRU5CUVVNN1ZVRkRha1E3UVVGRFJDeGhRVUZKTEVOQlFVTXNkMEpCUVhkQ0xFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdVVUZEZWtNN08wRkJSVVFzYTBKQlFXRTdZMEZCUVN4NVFrRkJSenRCUVVOa0xHRkJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NSVUZCUlN4RFFVRkRPMEZCUTJoQ0xHTkJRVXNzU1VGQlNTeERRVUZETEVkQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1IwRkJReXhUUVVGVExFTkJRVU1zVFVGQlRTeEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZPMEZCUTI1RExHVkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFWQlF5OUNPMUZCUTBZN08wRkJSVVFzTmtKQlFYZENPMk5CUVVFc2EwTkJRVU1zUzBGQlN5eEZRVUZGTzBGQlF6bENMR0ZCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUlVGQlJTeERRVUZETzBGQlEyaENMR05CUVVzc1NVRkJTU3hEUVVGRExFZEJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hIUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVWQlFVVXNSVUZCUlR0QlFVTnFReXhsUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1ZVRkRjRU03VVVGRFJqczdRVUZKUkN4alFVRlRPenM3TzJOQlFVRXNiVUpCUVVNc1NVRkJTU3hGUVVGRE96czdRVUZIWkN4aFFVRkpMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRmRCUVZjc1EwRkJRenRCUVVONlF5eGhRVUZKTEVOQlFVTXNkMEpCUVhkQ0xFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdVVUZGZEVNN08wRkJTMFFzVjBGQlRUczdPenM3WTBGQlFTeG5Ra0ZCUXl4UFFVRlBMRVZCUVVVN1FVRkRaaXhoUVVGSkxGRkJRVkVzUjBGQlJ5eEZRVUZGTEVOQlFVTTdRVUZEYkVJc1kwRkJTeXhKUVVGSkxFZEJRVWNzU1VGQlNTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZPMEZCUXpWQ0xHVkJRVWtzUjBGQlJ5eERRVUZETEZkQlFWY3NSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhQUVVGUExFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1JVRkJSVHRCUVVNMVJDeHhRa0ZCVVN4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU51UWp0VlFVTkVPMEZCUTBRc1owSkJRVThzVVVGQlVTeERRVUZETzFGQlEyaENPenRCUVVsRUxGVkJRVXM3T3pzN1kwRkJRU3hsUVVGRExFdEJRVXNzUlVGQlJUdEJRVU5hTEdGQlFVa3NUVUZCVFN4SFFVRkhMRVZCUVVVc1EwRkJRenRCUVVOb1FpeGpRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFZEJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNSVUZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSVHRCUVVOb1F5eHBRa0ZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VlVGRGFrTTdRVUZEUkN4blFrRkJUeXhOUVVGTkxFTkJRVU03VVVGRFpEczdPenRWUVhCTWEwSXNTVUZCU1RzN08ydENRVUZLTEVsQlFVa3NRenM3T3pzN08wRkRTbnBDTEdGQlFWa3NRMEZCUXpzN096czdPenM3TzB0QlMxRXNTMEZCU3pzN08wRkJSMWdzWTBGSVRTeExRVUZMTEVkQlIyRTdNa05CUVZJc1RVRkJUVHRCUVVGT0xHMUNRVUZOT3pzN1lVRkJja0lzVFVGQlRTeG5RMEZCUnl4RFFVRkRPenNyUWtGSVRDeExRVUZMT3pzN096czdPenRCUVZWc1FpeGhRVUZKTEUxQlFVMHNSMEZCUnl4RFFVRkRMRVZCUVVVN1FVRkJSU3h0UWtGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXp0VlFVRkZPenRCUVVVdlFpeGhRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRTFCUVUwc1EwRkJRenRCUVVOeVFpeGhRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRTFCUVUwc1EwRkJRenRCUVVOeVFpeGhRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenM3UVVGRmRrTXNZVUZCU1N4TlFVRk5MRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUlVGQlJUdEJRVU51UWl4cFFrRkJTU3hEUVVGRExFVkJRVVVzVDBGQlVDeEpRVUZKTEVWQlFVOHNUVUZCVFN4RFFVRkRMRU5CUVVNN1ZVRkRkRUk3VFVGRFNqczdhMEpCYmtKblFpeExRVUZMTzBGQmNVSjBRaXhsUVVGTk8yOUNRVUZCTEdkQ1FVRkRMRXRCUVVzc1JVRkJSVHRCUVVOV0xIRkNRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU51UWl4eFFrRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1FVRkRkRUlzZDBKQlFVOHNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJRenRqUVVOeVFqczdRVUZGUkN4aFFVRkpPMjlDUVVGQkxHZENRVUZaTzIxRVFVRlNMRTFCUVUwN1FVRkJUaXd5UWtGQlRUczdPenRCUVVWV0xIRkNRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRE8wRkJRMjVDTEhGQ1FVRkpMRTFCUVUwc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eEZRVUZGTzBGQlEyNUNMREpDUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEZWQlFWTXNRMEZCUXl4RlFVRkZPMEZCUTNaQ0xEWkNRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUlVGQlJUdEJRVU5zUWl4dlEwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eHhRa0ZCY1VJc1IwRkJSeXhEUVVGRExFZEJRVWNzYTBKQlFXdENMRU5CUVVNc1EwRkJRenN3UWtGRGFFVXNUVUZCVFR0QlFVTklMRGhDUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZGTEVOQlFVTTdNRUpCUTNwQ08zTkNRVU5LTEVOQlFVTXNRMEZCUXp0clFrRkRUaXhOUVVGTk8wRkJRMGdzYzBKQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1ZVRkJVeXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVkQlFVY3NSVUZCUlR0QlFVTXhRaXcwUWtGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlJTeERRVUZETzNOQ1FVTjRRaXhEUVVGRExFTkJRVU03YTBKQlEwNDdRVUZEUkN4M1FrRkJUeXhEUVVGRExFTkJRVU03WTBGRFdqczdRVUZGUkN4WFFVRkZPMjlDUVVGQkxHTkJRVms3YlVSQlFWSXNUVUZCVFR0QlFVRk9MREpDUVVGTk96czdPMEZCUlZJc2NVSkJRVWtzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNN1FVRkRia0lzY1VKQlFVa3NUVUZCVFN4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFVkJRVVU3UVVGRGJrSXNNa0pCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zVlVGQlV5eERRVUZETEVWQlFVVTdRVUZEZGtJc05rSkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhGUVVGRk8wRkJRMnhDTEc5RFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExIRkNRVUZ4UWl4SFFVRkhMRU5CUVVNc1IwRkJSeXd3UWtGQk1FSXNRMEZCUXl4RFFVRkRPekJDUVVONFJTeE5RVUZOTzBGQlEwZ3NhVU5CUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlR0QlFVRkZMSGREUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEhGQ1FVRnhRaXhIUVVGSExFTkJRVU1zUjBGQlJ5eHRRa0ZCYlVJc1EwRkJReXhEUVVGRE96aENRVUZGTzBGQlEyeEdMRGhDUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPekJDUVVOYU8zTkNRVU5LTEVOQlFVTXNRMEZCUXp0clFrRkRUaXhOUVVGTk8wRkJRMGdzYzBKQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03YTBKQlEySTdRVUZEUkN4M1FrRkJUeXhEUVVGRExFTkJRVU03WTBGRFdqczdRVUZGUkN4WlFVRkhPMjlDUVVGQkxHVkJRVms3YlVSQlFWSXNUVUZCVFR0QlFVRk9MREpDUVVGTk96czdPMEZCUlZRc2NVSkJRVWtzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNN1FVRkRia0lzY1VKQlFVa3NUVUZCVFN4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFVkJRVVU3UVVGRGJrSXNNa0pCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zVlVGQlV5eERRVUZETEVWQlFVVTdRVUZEZGtJc01FSkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN2MwSkJRMW9zUTBGQlF5eERRVUZETzJ0Q1FVTk9MRTFCUVUwN1FVRkRTQ3h6UWtGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRyUWtGRFlqdEJRVU5FTEhkQ1FVRlBMRU5CUVVNc1EwRkJRenRqUVVOYU96czdPMWxCTTBWblFpeExRVUZMT3pzN2EwSkJRVXdzUzBGQlN5eERPenM3T3pzN1FVTk1NVUk3TzBGQlJVRTdRVUZEUVRzN096czdPenRCUTBoQk96dEJRVVZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPenRCUVVWQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdPMEZCUlVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CT3p0QlFVVkJPMEZCUTBFN08wRkJSVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPenRCUVVWQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHM3UVVGRlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN08wRkJSVUU3UVVGRFFTd3dRMEZCZVVNN08wRkJSWHBETzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk96dEJRVVZCTzBGQlEwRTdPMEZCUlVFc1NVRkJSenRCUVVOSU8wRkJRMEU3TzBGQlJVRXNTVUZCUnp0QlFVTklPenRCUVVWQk8wRkJRMEU3UVVGRFFUczdRVUZGUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdPMEZCUlVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVRzN1FVRkZRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CT3p0QlFVVkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN08wRkJSVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVRzN1FVRkZRVHRCUVVOQk8wRkJRMEU3UVVGRFFUczdRVUZGUVR0QlFVTkJPMEZCUTBFN1FVRkRRU3h0UTBGQmEwTXNhVU5CUVdsRE8wRkJRMjVGTzBGQlEwRTdPMEZCUlVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CT3p0QlFVVkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTEhORFFVRnhReXhsUVVGbE8wRkJRM0JFTzBGQlEwRXNUVUZCU3pzN1FVRkZURHRCUVVOQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQkxFazdRVUZEUVRzN1FVRkZRVHM3UVVGRlFUdEJRVU5CTzBGQlEwRTdRVUZEUVRzN1FVRkZRVHRCUVVOQk8wRkJRMEU3UVVGRFFUczdRVUZGUVR0QlFVTkJPMEZCUTBFN08wRkJSVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdPMEZCUlVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHM3UVVGRlFUdEJRVU5CTzBGQlEwRTdRVUZEUVRzN1FVRkZRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CT3p0QlFVVkJPMEZCUTBFN1FVRkRRVHRCUVVOQk96dEJRVVZCTzBGQlEwRTdRVUZEUVR0QlFVTkJMRVU3T3pzN096czdRVU42VDBFN1FVRkRRVHM3UVVGRlFUdEJRVU5CTzBGQlEwRTdRVUZEUVRzN1FVRkZRVHRCUVVOQk96dEJRVVZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRXNWVUZCVXp0QlFVTlVPMEZCUTBFN1FVRkRRU3hOUVVGTE8wRkJRMHc3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJMRlZCUVZNN1FVRkRWRHRCUVVOQk8wRkJRMEVzVFVGQlN6dEJRVU5NTzBGQlEwRTdRVUZEUVN4RlFVRkRPMEZCUTBRN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTeE5RVUZMTzBGQlEwdzdRVUZEUVR0QlFVTkJPMEZCUTBFc1ZVRkJVenRCUVVOVU8wRkJRMEU3UVVGRFFUdEJRVU5CT3pzN1FVRkhRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRXNUVUZCU3p0QlFVTk1PMEZCUTBFN1FVRkRRVHRCUVVOQkxGVkJRVk03UVVGRFZEdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPenM3TzBGQlNVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHM3UVVGRlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQkxFMUJRVXM3UVVGRFREdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN08wRkJSVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPenRCUVVWQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPenRCUVVWQk8wRkJRMEU3UVVGRFFUdEJRVU5CTEhkQ1FVRjFRaXh6UWtGQmMwSTdRVUZETjBNN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVRzN1FVRkZRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTeHpRa0ZCY1VJN1FVRkRja0k3TzBGQlJVRTdPMEZCUlVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPenRCUVVWQkxITkRRVUZ4UXpzN1FVRkZja003UVVGRFFUdEJRVU5CT3p0QlFVVkJMRFJDUVVFeVFqdEJRVU16UWp0QlFVTkJPMEZCUTBFN1FVRkRRU3cyUWtGQk5FSXNWVUZCVlRzN096czdPenRCUTNaTWRFTXNZVUZCV1N4RFFVRkRPenM3T3pzN1MwRkZTaXhMUVVGTExIVkNRVUZSTEVOQlFWTXNSVUZCZEVJc1MwRkJTenM3UzBGRlR5eFJRVUZSTzBGQlJXaENMRmxCUmxFc1VVRkJVU3hEUVVWbUxFbEJRVWtzUlVGQlF5eEpRVUZKTEVWQlFVTXNSVUZCUlN4RlFVRkZPekpDUVVaUUxGRkJRVkU3TzBGQlNYcENMRk5CUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETzBGQlEycENMRk5CUVVrc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZETzBGQlEySXNVMEZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhMUVVGTExFVkJRVVVzUTBGQlF6czdRVUZGY2tJc1UwRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTI1Q0xGTkJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRPenRCUVVWbUxGTkJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4SFFVRkhMRWxCUVVrc1IwRkJSeXhaUVVGWExFVkJRVWNzUTBGQlF6czdRVUZGTVVNc1UwRkJTU3hKUVVGSkxFTkJRVU1zUlVGQlJTeEZRVUZGTzBGQlExZ3NWMEZCU1N4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8wMUJRMlE3U1VGRlJqczdaMEpCYWtKclFpeFJRVUZSTzBGQmJVSXpRaXhYUVVGTk8yTkJRVUVzWjBKQlFVTXNRMEZCUXl4RlFVRkZPenRCUVVWT0xHRkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN08wRkJSV2hDTEdGQlFVa3NRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJRenRSUVVOa096dEJRVVZFTEZOQlFVazdZMEZCUVN4blFrRkJSenRCUVVOTUxHRkJRVWtzUTBGQlF5eEZRVUZGTEVkQlFVY3NTMEZCU3l4RFFVRkRPMEZCUTJoQ0xHRkJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNN1VVRkRka0k3TzBGQlJVUXNWVUZCU3p0alFVRkJMR2xDUVVGSE8wRkJRMDRzWVVGQlNTeERRVUZETEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNN1FVRkRaaXhoUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExGTkJRVk1zUTBGQlF5eEZRVUZETEV0QlFVc3NSVUZCUlN4SFFVRkhMRVZCUVVVc1NVRkJTU3hGUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTTdVVUZETVVvN08wRkJSVVFzVDBGQlJUdGpRVUZCTEZsQlFVTXNUMEZCVHl4RlFVRkZPMEZCUTFZc1lVRkJTU3hKUVVGSkxFTkJRVU1zUlVGQlJTeEZRVUZGTzBGQlExZ3NaVUZCU1N4TFFVRkxMRWRCUVVjc1QwRkJUeXhIUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTTdRVUZET1VJc1pVRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eFBRVUZQTEVOQlFVTTdRVUZEY0VJc1pVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzFWQlEyaEdMRTFCUVUwN1FVRkRUQ3hsUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEU5QlFVOHNRMEZCUXp0VlFVTnlRanRSUVVOR096czdPMVZCTlVOclFpeFJRVUZST3pzN2EwSkJRVklzVVVGQlVTeERJaXdpWm1sc1pTSTZJaTR2WkdsemRDOU9aWGgxYzFWSkxtcHpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpS0daMWJtTjBhVzl1SUhkbFluQmhZMnRWYm1sMlpYSnpZV3hOYjJSMWJHVkVaV1pwYm1sMGFXOXVLSEp2YjNRc0lHWmhZM1J2Y25rcElIdGNibHgwYVdZb2RIbHdaVzltSUdWNGNHOXlkSE1nUFQwOUlDZHZZbXBsWTNRbklDWW1JSFI1Y0dWdlppQnRiMlIxYkdVZ1BUMDlJQ2R2WW1wbFkzUW5LVnh1WEhSY2RHMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1ptRmpkRzl5ZVNncE8xeHVYSFJsYkhObElHbG1LSFI1Y0dWdlppQmtaV1pwYm1VZ1BUMDlJQ2RtZFc1amRHbHZiaWNnSmlZZ1pHVm1hVzVsTG1GdFpDbGNibHgwWEhSa1pXWnBibVVvVzEwc0lHWmhZM1J2Y25rcE8xeHVYSFJsYkhObElHbG1LSFI1Y0dWdlppQmxlSEJ2Y25SeklEMDlQU0FuYjJKcVpXTjBKeWxjYmx4MFhIUmxlSEJ2Y25Selcxd2lUbVY0ZFhOY0lsMGdQU0JtWVdOMGIzSjVLQ2s3WEc1Y2RHVnNjMlZjYmx4MFhIUnliMjkwVzF3aVRtVjRkWE5jSWwwZ1BTQm1ZV04wYjNKNUtDazdYRzU5S1NoMGFHbHpMQ0JtZFc1amRHbHZiaWdwSUh0Y2JuSmxkSFZ5YmlCY2JseHVYRzR2THlCWFJVSlFRVU5MSUVaUFQxUkZVaUF2TDF4dUx5OGdkMlZpY0dGamF5OTFibWwyWlhKellXeE5iMlIxYkdWRVpXWnBibWwwYVc5dUlpd2lJRngwTHk4Z1ZHaGxJRzF2WkhWc1pTQmpZV05vWlZ4dUlGeDBkbUZ5SUdsdWMzUmhiR3hsWkUxdlpIVnNaWE1nUFNCN2ZUdGNibHh1SUZ4MEx5OGdWR2hsSUhKbGNYVnBjbVVnWm5WdVkzUnBiMjVjYmlCY2RHWjFibU4wYVc5dUlGOWZkMlZpY0dGamExOXlaWEYxYVhKbFgxOG9iVzlrZFd4bFNXUXBJSHRjYmx4dUlGeDBYSFF2THlCRGFHVmpheUJwWmlCdGIyUjFiR1VnYVhNZ2FXNGdZMkZqYUdWY2JpQmNkRngwYVdZb2FXNXpkR0ZzYkdWa1RXOWtkV3hsYzF0dGIyUjFiR1ZKWkYwcFhHNGdYSFJjZEZ4MGNtVjBkWEp1SUdsdWMzUmhiR3hsWkUxdlpIVnNaWE5iYlc5a2RXeGxTV1JkTG1WNGNHOXlkSE03WEc1Y2JpQmNkRngwTHk4Z1EzSmxZWFJsSUdFZ2JtVjNJRzF2WkhWc1pTQW9ZVzVrSUhCMWRDQnBkQ0JwYm5SdklIUm9aU0JqWVdOb1pTbGNiaUJjZEZ4MGRtRnlJRzF2WkhWc1pTQTlJR2x1YzNSaGJHeGxaRTF2WkhWc1pYTmJiVzlrZFd4bFNXUmRJRDBnZTF4dUlGeDBYSFJjZEdWNGNHOXlkSE02SUh0OUxGeHVJRngwWEhSY2RHbGtPaUJ0YjJSMWJHVkpaQ3hjYmlCY2RGeDBYSFJzYjJGa1pXUTZJR1poYkhObFhHNGdYSFJjZEgwN1hHNWNiaUJjZEZ4MEx5OGdSWGhsWTNWMFpTQjBhR1VnYlc5a2RXeGxJR1oxYm1OMGFXOXVYRzRnWEhSY2RHMXZaSFZzWlhOYmJXOWtkV3hsU1dSZExtTmhiR3dvYlc5a2RXeGxMbVY0Y0c5eWRITXNJRzF2WkhWc1pTd2diVzlrZFd4bExtVjRjRzl5ZEhNc0lGOWZkMlZpY0dGamExOXlaWEYxYVhKbFgxOHBPMXh1WEc0Z1hIUmNkQzh2SUVac1lXY2dkR2hsSUcxdlpIVnNaU0JoY3lCc2IyRmtaV1JjYmlCY2RGeDBiVzlrZFd4bExteHZZV1JsWkNBOUlIUnlkV1U3WEc1Y2JpQmNkRngwTHk4Z1VtVjBkWEp1SUhSb1pTQmxlSEJ2Y25SeklHOW1JSFJvWlNCdGIyUjFiR1ZjYmlCY2RGeDBjbVYwZFhKdUlHMXZaSFZzWlM1bGVIQnZjblJ6TzF4dUlGeDBmVnh1WEc1Y2JpQmNkQzh2SUdWNGNHOXpaU0IwYUdVZ2JXOWtkV3hsY3lCdlltcGxZM1FnS0Y5ZmQyVmljR0ZqYTE5dGIyUjFiR1Z6WDE4cFhHNGdYSFJmWDNkbFluQmhZMnRmY21WeGRXbHlaVjlmTG0wZ1BTQnRiMlIxYkdWek8xeHVYRzRnWEhRdkx5QmxlSEJ2YzJVZ2RHaGxJRzF2WkhWc1pTQmpZV05vWlZ4dUlGeDBYMTkzWldKd1lXTnJYM0psY1hWcGNtVmZYeTVqSUQwZ2FXNXpkR0ZzYkdWa1RXOWtkV3hsY3p0Y2JseHVJRngwTHk4Z1gxOTNaV0p3WVdOclgzQjFZbXhwWTE5d1lYUm9YMTljYmlCY2RGOWZkMlZpY0dGamExOXlaWEYxYVhKbFgxOHVjQ0E5SUZ3aVhDSTdYRzVjYmlCY2RDOHZJRXh2WVdRZ1pXNTBjbmtnYlc5a2RXeGxJR0Z1WkNCeVpYUjFjbTRnWlhod2IzSjBjMXh1SUZ4MGNtVjBkWEp1SUY5ZmQyVmljR0ZqYTE5eVpYRjFhWEpsWDE4b01DazdYRzVjYmx4dVhHNHZMeUJYUlVKUVFVTkxJRVpQVDFSRlVpQXZMMXh1THk4Z2QyVmljR0ZqYXk5aWIyOTBjM1J5WVhBZ1lqSTJPV0ZqWldZNFkyRmtZVGN3T0RRMU1ESWlMQ0luZFhObElITjBjbWxqZENjN1hHNWNibWx0Y0c5eWRDQk9aWGgxYzFWSklHWnliMjBnSnk0dmJHbGlMMjFoYVc0bk8xeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQk9aWGgxYzFWSk8xeHVYRzVjYmx4dUx5OGdWMFZDVUVGRFN5QkdUMDlVUlZJZ0x5OWNiaTh2SUM0dmZpOXFjMmhwYm5RdGJHOWhaR1Z5SVM0dmFXNWtaWGd1YW5NaUxDSW5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JtbHRjRzl5ZENCSmJuUmxjbVpoWTJWeklHWnliMjBnSnk0dmFXNTBaWEptWVdObGN5OG5PMXh1YVcxd2IzSjBJRzFoZEdnZ1puSnZiU0FuTGk5MWRHbHNMMjFoZEdnbk8xeHVhVzF3YjNKMElGSmhZMnNnWm5KdmJTQW5MaTlqYjNKbEwzSmhZMnNuTzF4dWFXMXdiM0owSUZSMWJtVWdabkp2YlNBbkxpOTBkVzVwYm1jdmRIVnVhVzVuSnp0Y2JtbHRjRzl5ZENBcUlHRnpJRlJ5WVc1elptOXliU0JtY205dElDY3VMM1YwYVd3dmRISmhibk5tYjNKdEp6dGNibHh1YkdWMElFTnZkVzUwWlhJZ1BTQnlaWEYxYVhKbEtDY3VMMjF2WkdWc2N5OWpiM1Z1ZEdWeUp5azdYRzVzWlhRZ1VtRmthVzhnUFNCeVpYRjFhWEpsS0NjdUwyMXZaR1ZzY3k5eVlXUnBieWNwTzF4dWJHVjBJRVJ5ZFc1cklEMGdjbVZ4ZFdseVpTZ25MaTl0YjJSbGJITXZaSEoxYm1zbktUdGNibXhsZENCVFpYRjFaVzVqWlNBOUlISmxjWFZwY21Vb0p5NHZiVzlrWld4ekwzTmxjWFZsYm1ObEp5azdYRzVzWlhRZ1RXRjBjbWw0SUQwZ2NtVnhkV2x5WlNnbkxpOXRiMlJsYkhNdmJXRjBjbWw0SnlrN1hHNWNibWx0Y0c5eWRDQlhRVUZEYkc5amF5Qm1jbTl0SUNkM1lXRmpiRzlqYXljN1hHNXBiWEJ2Y25RZ1NXNTBaWEoyWVd3Z1puSnZiU0FuTGk5MGFXMWxMMmx1ZEdWeWRtRnNKenRjYmx4dVhHNHZLaXBjYms1bGVIVnpWVWtnUFQ0Z1kzSmxZWFJsWkNCaGN5Qk9aWGgxYzF4dUtpOWNibHh1WTJ4aGMzTWdUbVY0ZFhOVlNTQjdYRzVjYmlBZ0lDQmpiMjV6ZEhKMVkzUnZjaWhqYjI1MFpYaDBLU0I3WEc1Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2EyVjVJR2x1SUVsdWRHVnlabUZqWlhNcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTmJhMlY1WFNBOUlFbHVkR1Z5Wm1GalpYTmJhMlY1WFR0Y2JpQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJR1p2Y2lBb2JHVjBJR3RsZVNCcGJpQnRZWFJvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdselcydGxlVjBnUFNCdFlYUm9XMnRsZVYwN1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0JzWlhRZ1EyOXlaU0E5SUh0Y2JpQWdJQ0FnSUNBZ0lDQW5VbUZqYXljNklGSmhZMnRjYmlBZ0lDQWdJQ0FnZlR0Y2JseHVJQ0FnSUNBZ0lDQnNaWFFnVFc5a1pXeHpJRDBnZTF4dUlDQWdJQ0FnSUNBZ0lDZERiM1Z1ZEdWeUp6b2dRMjkxYm5SbGNpeGNiaUFnSUNBZ0lDQWdJQ0FuVW1Ga2FXOG5PaUJTWVdScGJ5eGNiaUFnSUNBZ0lDQWdJQ0FuUkhKMWJtc25PaUJFY25WdWF5eGNiaUFnSUNBZ0lDQWdJQ0FuVTJWeGRXVnVZMlVuT2lCVFpYRjFaVzVqWlN4Y2JpQWdJQ0FnSUNBZ0lDQW5UV0YwY21sNEp6b2dUV0YwY21sNFhHNGdJQ0FnSUNBZ0lIMDdYRzVjYmlBZ0lDQWdJQ0FnWm05eUlDaHNaWFFnYTJWNUlHbHVJRTF2WkdWc2N5a2dlMXh1SUNBZ0lDQWdJQ0FnSUhSb2FYTmJhMlY1WFNBOUlFMXZaR1ZzYzF0clpYbGRPMXh1SUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2EyVjVJR2x1SUVOdmNtVXBJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpXMnRsZVYwZ1BTQkRiM0psVzJ0bGVWMDdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCc1pYUWdSR1ZtWVhWc2RFTnZiblJsZUhRZ1BTQjNhVzVrYjNjdVFYVmthVzlEYjI1MFpYaDBJSHg4SUhkcGJtUnZkeTUzWldKcmFYUkJkV1JwYjBOdmJuUmxlSFE3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVYMk52Ym5SbGVIUWdQU0JqYjI1MFpYaDBJSHg4SUc1bGR5QkVaV1poZFd4MFEyOXVkR1Y0ZENncE8xeHVYRzRnSUNBZ0lDQWdJSFJvYVhNdWRIVnVaU0E5SUc1bGR5QlVkVzVsS0NrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11Ym05MFpTQTlJSFJvYVhNdWRIVnVaUzV1YjNSbExtSnBibVFvZEdocGN5NTBkVzVsS1R0Y2JseHVJQ0FnSUNBZ0lDQjBhR2x6TG1Oc2IyTnJJRDBnYm1WM0lGZEJRVU5zYjJOcktIUm9hWE11WDJOdmJuUmxlSFFwTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbU5zYjJOckxuTjBZWEowS0NrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11U1c1MFpYSjJZV3dnUFNCSmJuUmxjblpoYkR0Y2JseHVJQ0FnSUNBZ0lDQjBhR2x6TG1OdmJHOXljeUE5SUh0Y2JpQWdJQ0FnSUNBZ0lDQmhZMk5sYm5RNklDY2pNbUppSnl4Y2JpQWdJQ0FnSUNBZ0lDQm1hV3hzT2lBbkkyVmxaU2NzWEc0Z0lDQWdJQ0FnSUNBZ2JHbG5hSFE2SUNjalptWm1KeXhjYmlBZ0lDQWdJQ0FnSUNCa1lYSnJPaUFuSXpNek15Y3NYRzRnSUNBZ0lDQWdJQ0FnYldWa2FYVnRUR2xuYUhRNklDY2pZMk5qSnl4Y2JpQWdJQ0FnSUNBZ0lDQnRaV1JwZFcxRVlYSnJPaUFuSXpZMk5pZGNiaUFnSUNBZ0lDQWdmVHRjYmx4dUlDQWdJQ0FnSUNCMGFHbHpMblJ5WVc1elptOXliU0E5SUZSeVlXNXpabTl5YlR0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVoWkdRZ1BTQlVjbUZ1YzJadmNtMHVZV1JrTzF4dVhHNWNiaUFnSUNBZ0lDQWdkR2hwY3k1QlpHUWdQU0I3ZlR0Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2EyVjVJR2x1SUVsdWRHVnlabUZqWlhNcElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxrRmtaRnRyWlhsZElEMGdWSEpoYm5ObWIzSnRMbUZrWkM1aWFXNWtLSFJvYVhNc2EyVjVLVHRjYmlBZ0lDQWdJQ0FnZlZ4dVhHNWNibHh1WEc0Z0lDQWdJQ0FnSUM4cUlHTnlaV0YwWlNCa1pXWmhkV3gwSUdOdmJYQnZibVZ1ZENCemFYcGxJQ292WEc0Z0lDQWdJQ0FnSUM4cUlHcHphR2x1ZENCcFoyNXZjbVU2YzNSaGNuUWdLaTljYmlBZ0lDQWdJQ0FnZG1GeUlHVjRhWE4wYVc1blUzUjViR1Z6YUdWbGRITWdQU0JrYjJOMWJXVnVkQzVuWlhSRmJHVnRaVzUwYzBKNVZHRm5UbUZ0WlNoY0luTjBlV3hsWENJcE8xeHVJQ0FnSUNBZ0lDQjJZWElnWkdWbVlYVnNkRk5wZW1WRVpXTnNZWEpoZEdsdmJpQTlJQ2RiYm1WNGRYTXRkV2xkZTJobGFXZG9kRG8xTURBd2NIZzdkMmxrZEdnNk5UQXdNSEI0ZlNjN1hHNGdJQ0FnSUNBZ0lIWmhjaUJrWldaaGRXeDBVM1I1YkdWT2IyUmxJRDBnWkc5amRXMWxiblF1WTNKbFlYUmxSV3hsYldWdWRDZ25jM1I1YkdVbktUdGNiaUFnSUNBZ0lDQWdaR1ZtWVhWc2RGTjBlV3hsVG05a1pTNTBlWEJsSUQwZ0ozUmxlSFF2WTNOekp6dGNiaUFnSUNBZ0lDQWdaR1ZtWVhWc2RGTjBlV3hsVG05a1pTNXBibTVsY2toVVRVd2dQU0JrWldaaGRXeDBVMmw2WlVSbFkyeGhjbUYwYVc5dU8xeHVJQ0FnSUNBZ0lDQnBaaUFvWlhocGMzUnBibWRUZEhsc1pYTm9aV1YwY3k1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnZG1GeUlIQmhjbVZ1ZENBOUlHVjRhWE4wYVc1blUzUjViR1Z6YUdWbGRITmJNRjB1Y0dGeVpXNTBUbTlrWlZ4dUlDQWdJQ0FnSUNBZ0lIQmhjbVZ1ZEM1cGJuTmxjblJDWldadmNtVW9JR1JsWm1GMWJIUlRkSGxzWlU1dlpHVXNJR1Y0YVhOMGFXNW5VM1I1YkdWemFHVmxkSE5iTUYwcFhHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdaRzlqZFcxbGJuUXVkM0pwZEdVb0p6eHpkSGxzWlQ0bksyUmxabUYxYkhSVGFYcGxSR1ZqYkdGeVlYUnBiMjRySnp4Y1hDOXpkSGxzWlQ0bktUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0F2S2lCcWMyaHBiblFnYVdkdWIzSmxPbVZ1WkNBcUwxeHVYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1oyVjBJR052Ym5SbGVIUW9LU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1ZlkyOXVkR1Y0ZER0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J6WlhRZ1kyOXVkR1Y0ZENoamRIZ3BJSHRjYmlBZ0lDQWdJSFJvYVhNdVkyeHZZMnN1YzNSdmNDZ3BPMXh1SUNBZ0lDQWdkR2hwY3k1ZlkyOXVkR1Y0ZENBOUlHTjBlRHRjYmlBZ0lDQWdJSFJvYVhNdVkyeHZZMnNnUFNCdVpYY2dWMEZCUTJ4dlkyc29kR2hwY3k1amIyNTBaWGgwS1R0Y2JpQWdJQ0FnSUhSb2FYTXVZMnh2WTJzdWMzUmhjblFvS1R0Y2JpQWdJQ0I5WEc1Y2JseHVYRzU5WEc1Y2JteGxkQ0JPWlhoMWN5QTlJRzVsZHlCT1pYaDFjMVZKS0NrN1hHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmpiMnh2Y25Nb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUU1bGVIVnpMbU52Ykc5eWN6dGNibjFjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJqYjI1MFpYaDBLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQk9aWGgxY3k1amIyNTBaWGgwTzF4dWZWeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHTnNiMk5yS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUJPWlhoMWN5NWpiRzlqYXp0Y2JuMWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdUbVY0ZFhNN1hHNWNibHh1WEc0dkx5QlhSVUpRUVVOTElFWlBUMVJGVWlBdkwxeHVMeThnTGk5K0wycHphR2x1ZEMxc2IyRmtaWEloTGk5c2FXSXZiV0ZwYmk1cWN5SXNJbVY0Y0c5eWRDQmtaV1poZFd4MElIdGNiaUFnVUc5emFYUnBiMjQ2SUhKbGNYVnBjbVVvSnk0dmNHOXphWFJwYjI0bktTeGNiaUFnVTJ4cFpHVnlPaUJ5WlhGMWFYSmxLQ2N1TDNOc2FXUmxjaWNwTEZ4dUlDQlViMmRuYkdVNklISmxjWFZwY21Vb0p5NHZkRzluWjJ4bEp5a3NYRzR2S2lBZ1VtRnVaMlU2SUhKbGNYVnBjbVVvSnk0dmNtRnVaMlZ6Ykdsa1pYSW5LU3hjYmlBZ1YyRjJaV1p2Y20wNklISmxjWFZwY21Vb0p5NHZkMkYyWldadmNtMG5LU3dnS2k5Y2JpQWdRblYwZEc5dU9pQnlaWEYxYVhKbEtDY3VMMkoxZEhSdmJpY3BMRnh1SUNCVVpYaDBRblYwZEc5dU9pQnlaWEYxYVhKbEtDY3VMM1JsZUhSaWRYUjBiMjRuS1N4Y2JpQWdVbUZrYVc5Q2RYUjBiMjQ2SUhKbGNYVnBjbVVvSnk0dmNtRmthVzlpZFhSMGIyNG5LU3hjYmlBZ1RuVnRZbVZ5T2lCeVpYRjFhWEpsS0NjdUwyNTFiV0psY2ljcExGeHVJQ0JUWld4bFkzUTZJSEpsY1hWcGNtVW9KeTR2YzJWc1pXTjBKeWtzWEc0Z0lFUnBZV3c2SUhKbGNYVnBjbVVvSnk0dlpHbGhiQ2NwTEZ4dUlDQlFhV0Z1YnpvZ2NtVnhkV2x5WlNnbkxpOXdhV0Z1YnljcExGeHVJQ0JUWlhGMVpXNWpaWEk2SUhKbGNYVnBjbVVvSnk0dmMyVnhkV1Z1WTJWeUp5a3NYRzRnSUZCaGJqSkVPaUJ5WlhGMWFYSmxLQ2N1TDNCaGJqSmtKeWtzWEc0Z0lGUnBiSFE2SUhKbGNYVnBjbVVvSnk0dmRHbHNkQ2NwTEZ4dUlDQk5kV3gwYVhOc2FXUmxjam9nY21WeGRXbHlaU2duTGk5dGRXeDBhWE5zYVdSbGNpY3BMRnh1SUNCUVlXNDZJSEpsY1hWcGNtVW9KeTR2Y0dGdUp5a3NYRzRnSUVWdWRtVnNiM0JsT2lCeVpYRjFhWEpsS0NjdUwyVnVkbVZzYjNCbEp5a3NYRzRnSUZOd1pXTjBjbTluY21GdE9pQnlaWEYxYVhKbEtDY3VMM053WldOMGNtOW5jbUZ0Snlrc1hHNGdJRTFsZEdWeU9pQnlaWEYxYVhKbEtDY3VMMjFsZEdWeUp5a3NYRzRnSUU5elkybHNiRzl6WTI5d1pUb2djbVZ4ZFdseVpTZ25MaTl2YzJOcGJHeHZjMk52Y0dVbktWeHVmVHRjYmx4dVhHNWNiaTh2SUZkRlFsQkJRMHNnUms5UFZFVlNJQzh2WEc0dkx5QXVMMzR2YW5Ob2FXNTBMV3h2WVdSbGNpRXVMMnhwWWk5cGJuUmxjbVpoWTJWekwybHVaR1Y0TG1weklpd2lYRzRuZFhObElITjBjbWxqZENjN1hHNWNibXhsZENCemRtY2dQU0J5WlhGMWFYSmxLQ2N1TGk5MWRHbHNMM04yWnljcE8xeHViR1YwSUVsdWRHVnlabUZqWlNBOUlISmxjWFZwY21Vb0p5NHVMMk52Y21VdmFXNTBaWEptWVdObEp5azdYRzVzWlhRZ1UzUmxjQ0E5SUhKbGNYVnBjbVVvSnk0dUwyMXZaR1ZzY3k5emRHVndKeWs3WEc1cGJYQnZjblFnS2lCaGN5QkpiblJsY21GamRHbHZiaUJtY205dElDY3VMaTkxZEdsc0wybHVkR1Z5WVdOMGFXOXVKenRjYmx4dUx5b3FYRzRxSUZCdmMybDBhVzl1WEc0cVhHNHFJRUJrWlhOamNtbHdkR2x2YmlCVWQyOHRaR2x0Wlc1emFXOXVZV3dnZEc5MVkyZ2djMnhwWkdWeUxseHVLbHh1S2lCQVpHVnRieUE4YzNCaGJpQnVaWGgxY3kxMWFUMWNJbkJ2YzJsMGFXOXVYQ0krUEM5emNHRnVQbHh1S2x4dUtpQkFaWGhoYlhCc1pWeHVLaUIyWVhJZ2NHOXphWFJwYjI0Z1BTQnVaWGNnVG1WNGRYTXVVRzl6YVhScGIyNG9KeU4wWVhKblpYUW5LVnh1S2x4dUtpQkFaWGhoYlhCc1pWeHVLaUIyWVhJZ2NHOXphWFJwYjI0Z1BTQnVaWGNnVG1WNGRYTXVVRzl6YVhScGIyNG9KeU4wWVhKblpYUW5MSHRjYmlvZ0lDQW5jMmw2WlNjNklGc3lNREFzTWpBd1hTeGNiaW9nSUNBbmJXOWtaU2M2SUNkaFluTnZiSFYwWlNjc0lDQXZMeUJjSW1GaWMyOXNkWFJsWENJZ2IzSWdYQ0p5Wld4aGRHbDJaVndpWEc0cUlDQWdKM2duT2lBd0xqVXNJQ0F2THlCcGJtbDBhV0ZzSUhnZ2RtRnNkV1ZjYmlvZ0lDQW5iV2x1V0NjNklEQXNYRzRxSUNBZ0oyMWhlRmduT2lBeExGeHVLaUFnSUNkemRHVndXQ2M2SURBc1hHNHFJQ0FnSjNrbk9pQXdMalVzSUNBdkx5QnBibWwwYVdGc0lIa2dkbUZzZFdWY2Jpb2dJQ0FuYldsdVdTYzZJREFzWEc0cUlDQWdKMjFoZUZrbk9pQXhMRnh1S2lBZ0lDZHpkR1Z3V1NjNklEQmNiaW9nZlNsY2JpcGNiaW9nUUc5MWRIQjFkRnh1S2lCamFHRnVaMlZjYmlvZ1JtbHlaWE1nWVc1NUlIUnBiV1VnZEdobElHbHVkR1Z5Wm1GalpTZHpJSFpoYkhWbElHTm9ZVzVuWlhNdUlEeGljajVjYmlvZ1ZHaGxJR1YyWlc1MElHUmhkR0VnYVhNZ1lXNGdiMkpxWldOMElIZHBkR2dnZUNCaGJtUWdlU0J3Y205d1pYSjBhV1Z6SUdOdmJuUmhhVzVwYm1jZ2RHaGxJSGdnWVc1a0lIa2dkbUZzZFdWeklHOW1JSFJvWlNCcGJuUmxjbVpoWTJVdVhHNHFYRzRxSUVCdmRYUndkWFJsZUdGdGNHeGxYRzRxSUhCdmMybDBhVzl1TG05dUtDZGphR0Z1WjJVbkxHWjFibU4wYVc5dUtIWXBJSHRjYmlvZ0lDQmpiMjV6YjJ4bExteHZaeWgyS1R0Y2Jpb2dmU2xjYmlwY2JpcGNiaW92WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdOc1lYTnpJRkJ2YzJsMGFXOXVJR1Y0ZEdWdVpITWdTVzUwWlhKbVlXTmxJSHRjYmx4dUlDQmpiMjV6ZEhKMVkzUnZjaWdwSUh0Y2JseHVJQ0FnSUd4bGRDQnZjSFJwYjI1eklEMGdXeWQyWVd4MVpTZGRPMXh1WEc0Z0lDQWdiR1YwSUdSbFptRjFiSFJ6SUQwZ2UxeHVJQ0FnSUNBZ0ozTnBlbVVuT2lCYk1qQXdMREl3TUYwc1hHNGdJQ0FnSUNBbmJXOWtaU2M2SUNkaFluTnZiSFYwWlNjc1hHNGdJQ0FnSUNBbmJXbHVXQ2M2SURBc1hHNGdJQ0FnSUNBbmJXRjRXQ2M2SURFc1hHNGdJQ0FnSUNBbmMzUmxjRmduT2lBd0xGeHVJQ0FnSUNBZ0ozZ25PaUF3TGpVc1hHNGdJQ0FnSUNBbmJXbHVXU2M2SURBc1hHNGdJQ0FnSUNBbmJXRjRXU2M2SURFc1hHNGdJQ0FnSUNBbmMzUmxjRmtuT2lBd0xGeHVJQ0FnSUNBZ0oza25PaUF3TGpWY2JpQWdJQ0I5TzF4dVhHNGdJQ0FnYzNWd1pYSW9ZWEpuZFcxbGJuUnpMRzl3ZEdsdmJuTXNaR1ZtWVhWc2RITXBPMXh1WEc1Y2JpQWdJQ0IwYUdsekxsOTRJRDBnYm1WM0lGTjBaWEFvSUhSb2FYTXVjMlYwZEdsdVozTXViV2x1V0N3Z2RHaHBjeTV6WlhSMGFXNW5jeTV0WVhoWUxDQjBhR2x6TG5ObGRIUnBibWR6TG5OMFpYQllMQ0IwYUdsekxuTmxkSFJwYm1kekxuZ2dLVHRjYmlBZ0lDQjBhR2x6TGw5NUlEMGdibVYzSUZOMFpYQW9JSFJvYVhNdWMyVjBkR2x1WjNNdWJXbHVXU3dnZEdocGN5NXpaWFIwYVc1bmN5NXRZWGhaTENCMGFHbHpMbk5sZEhScGJtZHpMbk4wWlhCWkxDQjBhR2x6TG5ObGRIUnBibWR6TG5rZ0tUdGNibHh1SUNBZ0lIUm9hWE11Y0c5emFYUnBiMjRnUFNCN1hHNGdJQ0FnSUNCNE9pQnVaWGNnU1c1MFpYSmhZM1JwYjI0dVNHRnVaR3hsS0hSb2FYTXVjMlYwZEdsdVozTXViVzlrWlN3bmFHOXlhWHB2Ym5SaGJDY3NXekFzZEdocGN5NTNhV1IwYUYwc1czUm9hWE11YUdWcFoyaDBMREJkS1N4Y2JpQWdJQ0FnSUhrNklHNWxkeUJKYm5SbGNtRmpkR2x2Ymk1SVlXNWtiR1VvZEdocGN5NXpaWFIwYVc1bmN5NXRiMlJsTENkMlpYSjBhV05oYkNjc1d6QXNkR2hwY3k1M2FXUjBhRjBzVzNSb2FYTXVhR1ZwWjJoMExEQmRLVnh1SUNBZ0lIMDdYRzRnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiaTU0TG5aaGJIVmxJRDBnZEdocGN5NWZlQzV1YjNKdFlXeHBlbVZrTzF4dUlDQWdJSFJvYVhNdWNHOXphWFJwYjI0dWVTNTJZV3gxWlNBOUlIUm9hWE11WDNrdWJtOXliV0ZzYVhwbFpEdGNibHh1SUNBZ0lIUm9hWE11YVc1cGRDZ3BPMXh1SUNBZ0lIUm9hWE11Y21WdVpHVnlLQ2s3WEc1Y2JpQWdmVnh1WEc0Z0lHSjFhV3hrU1c1MFpYSm1ZV05sS0NrZ2UxeHVYRzRnSUNBZ2RHaHBjeTVyYm05aUlEMGdjM1puTG1OeVpXRjBaU2duWTJseVkyeGxKeWs3WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG1Gd2NHVnVaRU5vYVd4a0tIUm9hWE11YTI1dllpazdYRzRnSUNBZ1hHNGdJSDFjYmx4dUlDQnphWHBsU1c1MFpYSm1ZV05sS0NrZ2UxeHVYRzRnSUNBZ0lDQjBhR2x6TG5CdmMybDBhVzl1TG5ndWNtVnphWHBsS0Zzd0xIUm9hWE11ZDJsa2RHaGRMRnQwYUdsekxtaGxhV2RvZEN3d1hTazdYRzRnSUNBZ0lDQjBhR2x6TG5CdmMybDBhVzl1TG5rdWNtVnphWHBsS0Zzd0xIUm9hWE11ZDJsa2RHaGRMRnQwYUdsekxtaGxhV2RvZEN3d1hTazdYRzVjYmlBZ0lDQWdJSFJvYVhNdVgyMXBia1JwYldWdWMybHZiaUE5SUUxaGRHZ3ViV2x1S0hSb2FYTXVkMmxrZEdnc2RHaHBjeTVvWldsbmFIUXBPMXh1WEc0Z0lDQWdJQ0IwYUdsekxtdHViMkpTWVdScGRYTWdQU0I3WEc0Z0lDQWdJQ0FnSUc5bVpqb2dmbjRvZEdocGN5NWZiV2x1UkdsdFpXNXphVzl1THpFd01Da2dLaUExSUNzZ05TeGNiaUFnSUNBZ0lIMDdYRzRnSUNBZ0lDQjBhR2x6TG10dWIySlNZV1JwZFhNdWIyNGdQU0IwYUdsekxtdHViMkpTWVdScGRYTXViMlptSUNvZ01qdGNibHh1SUNBZ0lDQWdkR2hwY3k1cmJtOWlMbk5sZEVGMGRISnBZblYwWlNnblkzZ25MSFJvYVhNdWQybGtkR2d2TWlrN1hHNGdJQ0FnSUNCMGFHbHpMbXR1YjJJdWMyVjBRWFIwY21saWRYUmxLQ2RqZVNjc2RHaHBjeTVvWldsbmFIUXZNaWs3WEc0Z0lDQWdJQ0IwYUdsekxtdHViMkl1YzJWMFFYUjBjbWxpZFhSbEtDZHlKeXgwYUdsekxtdHViMkpTWVdScGRYTXViMlptS1R0Y2JpQWdmVnh1WEc0Z0lHTnZiRzl5U1c1MFpYSm1ZV05sS0NrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbk4wZVd4bExtSmhZMnRuY205MWJtUkRiMnh2Y2lBOUlIUm9hWE11WTI5c2IzSnpMbVpwYkd3N1hHNGdJQ0FnSUNCMGFHbHpMbXR1YjJJdWMyVjBRWFIwY21saWRYUmxLQ2RtYVd4c0p5d2dkR2hwY3k1amIyeHZjbk11WVdOalpXNTBLVHRjYmlBZ2ZWeHVYRzRnSUhKbGJtUmxjaWdwSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTVqYkdsamEyVmtLU0I3WEc0Z0lDQWdMeThnSUhSb2FYTXVhMjV2WWxKaFpHbDFjeUE5SURNd08xeHVJQ0FnSUNBZ2RHaHBjeTVyYm05aUxuTmxkRUYwZEhKcFluVjBaU2duY2ljc2RHaHBjeTVyYm05aVVtRmthWFZ6TG05dUtUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQzh2SUNCMGFHbHpMbXR1YjJKU1lXUnBkWE1nUFNBeE5UdGNiaUFnSUNBZ0lIUm9hWE11YTI1dllpNXpaWFJCZEhSeWFXSjFkR1VvSjNJbkxIUm9hWE11YTI1dllsSmhaR2wxY3k1dlptWXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11YTI1dllrTnZiM0prYVc1aGRHVnpJRDBnZTF4dUlDQWdJQ0FnZURvZ2RHaHBjeTVmZUM1dWIzSnRZV3hwZW1Wa0lDb2dkR2hwY3k1M2FXUjBhQ3hjYmlBZ0lDQWdJSGs2SUhSb2FYTXVhR1ZwWjJoMElDMGdkR2hwY3k1ZmVTNXViM0p0WVd4cGVtVmtJQ29nZEdocGN5NW9aV2xuYUhSY2JpQWdJQ0I5TzF4dVhHNGdJQ0FnZEdocGN5NXJibTlpTG5ObGRFRjBkSEpwWW5WMFpTZ25ZM2duTEhSb2FYTXVhMjV2WWtOdmIzSmthVzVoZEdWekxuZ3BPMXh1SUNBZ0lIUm9hWE11YTI1dllpNXpaWFJCZEhSeWFXSjFkR1VvSjJONUp5eDBhR2x6TG10dWIySkRiMjl5WkdsdVlYUmxjeTU1S1R0Y2JpQWdmVnh1WEc1Y2JpQWdZMnhwWTJzb0tTQjdYRzRnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiaTU0TG1GdVkyaHZjaUE5SUhSb2FYTXViVzkxYzJVN1hHNGdJQ0FnZEdocGN5NXdiM05wZEdsdmJpNTVMbUZ1WTJodmNpQTlJSFJvYVhNdWJXOTFjMlU3WEc0Z0lDQWdkR2hwY3k1dGIzWmxLQ2s3WEc0Z0lIMWNibHh1SUNCdGIzWmxLQ2tnZTF4dUlDQWdJR2xtSUNoMGFHbHpMbU5zYVdOclpXUXBJSHRjYmlBZ0lDQWdJSFJvYVhNdWNHOXphWFJwYjI0dWVDNTFjR1JoZEdVb2RHaHBjeTV0YjNWelpTazdYRzRnSUNBZ0lDQjBhR2x6TG5CdmMybDBhVzl1TG5rdWRYQmtZWFJsS0hSb2FYTXViVzkxYzJVcE8xeHVJQ0FnSUNBZ2RHaHBjeTVmZUM1MWNHUmhkR1ZPYjNKdFlXd29JSFJvYVhNdWNHOXphWFJwYjI0dWVDNTJZV3gxWlNBcE8xeHVJQ0FnSUNBZ2RHaHBjeTVmZVM1MWNHUmhkR1ZPYjNKdFlXd29JSFJvYVhNdWNHOXphWFJwYjI0dWVTNTJZV3gxWlNBcE8xeHVJQ0FnSUNBZ2RHaHBjeTVsYldsMEtDZGphR0Z1WjJVbkxIdGNiaUFnSUNBZ0lDQWdlRG9nZEdocGN5NWZlQzUyWVd4MVpTeGNiaUFnSUNBZ0lDQWdlVG9nZEdocGN5NWZlUzUyWVd4MVpWeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQjBhR2x6TG5KbGJtUmxjaWdwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhKbGJHVmhjMlVvS1NCN1hHNGdJQ0FnZEdocGN5NXlaVzVrWlhJb0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQXFJRlJvWlNCcGJuUmxjbVpoWTJVbmN5QjRJSFpoYkhWbExpQlhhR1Z1SUhObGRDd2dhWFFnZDJsc2JDQmhkWFJ2YldGMGFXTmhiR3g1SUdGa2FuVnpkQ0IwYnlCbWFYUWdiV2x1TDIxaGVDOXpkR1Z3SUhObGRIUnBibWR6SUc5bUlIUm9aU0JwYm5SbGNtWmhZMlV1WEc0Z0lDb2dRSFI1Y0dVZ2UyOWlhbVZqZEgxY2JpQWdLaUJBWlhoaGJYQnNaU0J3YjNOcGRHbHZiaTU0SUQwZ01DNDFPMXh1SUNBcUwxeHVYRzRnSUdkbGRDQjRLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TGw5NExuWmhiSFZsTzF4dUlDQjlYRzVjYmlBZ2MyVjBJSGdvZG1Gc2RXVXBJSHRjYmlBZ0lDQjBhR2x6TGw5NExuVndaR0YwWlNoMllXeDFaU2s3WEc0Z0lDQWdkR2hwY3k1bGJXbDBLQ2RqYUdGdVoyVW5MSHRjYmlBZ0lDQWdJSGc2SUhSb2FYTXVYM2d1ZG1Gc2RXVXNYRzRnSUNBZ0lDQjVPaUIwYUdsekxsOTVMblpoYkhWbFhHNGdJQ0FnZlNrN1hHNGdJQ0FnZEdocGN5NXlaVzVrWlhJb0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQXFJRlJvWlNCcGJuUmxjbVpoWTJVbmN5QjVJSFpoYkhWbGN5NGdWMmhsYmlCelpYUXNJR2wwSUhkcGJHd2dZWFYwYjIxaGRHbGpZV3hzZVNCaFpHcDFjM1FnZEc4Z1ptbDBJRzFwYmk5dFlYZ3ZjM1JsY0NCelpYUjBhVzVuY3lCdlppQjBhR1VnYVc1MFpYSm1ZV05sTGx4dUlDQXFJRUIwZVhCbElIdHZZbXBsWTNSOVhHNGdJQ29nUUdWNFlXMXdiR1VnY0c5emFYUnBiMjR1ZUNBOUlEQXVOVHRjYmlBZ0tpOWNibHh1SUNCblpYUWdlU2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1ZmVTNTJZV3gxWlR0Y2JpQWdmVnh1WEc0Z0lITmxkQ0I1S0haaGJIVmxLU0I3WEc0Z0lDQWdkR2hwY3k1ZmVTNTFjR1JoZEdVb2RtRnNkV1VwTzF4dUlDQWdJSFJvYVhNdVpXMXBkQ2duWTJoaGJtZGxKeXg3WEc0Z0lDQWdJQ0I0T2lCMGFHbHpMbDk0TG5aaGJIVmxMRnh1SUNBZ0lDQWdlVG9nZEdocGN5NWZlUzUyWVd4MVpWeHVJQ0FnSUgwcE8xeHVJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtDazdYRzRnSUgxY2JseHVYRzVjYmlBZ1oyVjBJRzV2Y20xaGJHbDZaV1FvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSHRjYmlBZ0lDQWdJSGc2SUhSb2FYTXVYM2d1Ym05eWJXRnNhWHBsWkN4Y2JpQWdJQ0FnSUhrNklIUm9hWE11WDNrdWJtOXliV0ZzYVhwbFpGeHVJQ0FnSUgwN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0tpQlVhR1VnYkc5M1pYSWdiR2x0YVhRZ2IyWWdkbUZzZFdVZ2IyNGdkR2hsSUhnZ1lYaHBjMXh1SUNBcUlFQjBlWEJsSUh0dlltcGxZM1I5WEc0Z0lDb3ZYRzRnSUdkbGRDQnRhVzVZS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxsOTRMbTFwYmp0Y2JpQWdmVnh1WEc0Z0lITmxkQ0J0YVc1WUtIWXBJSHRjYmlBZ0lDQjBhR2x6TGw5NExtMXBiaUE5SUhZN1hHNGdJQ0FnZEdocGN5NXlaVzVrWlhJb0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQXFJRlJvWlNCc2IzZGxjaUJzYVcxcGRDQnZaaUIyWVd4MVpTQnZiaUIwYUdVZ2VTQmhlR2x6WEc0Z0lDb2dRSFI1Y0dVZ2UyOWlhbVZqZEgxY2JpQWdLaTljYmlBZ1oyVjBJRzFwYmxrb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVYM2t1YldsdU8xeHVJQ0I5WEc1Y2JpQWdjMlYwSUcxcGJsa29kaWtnZTF4dUlDQWdJSFJvYVhNdVgza3ViV2x1SUQwZ2RqdGNiaUFnSUNCMGFHbHpMbkpsYm1SbGNpZ3BPMXh1SUNCOVhHNWNibHh1SUNBdktpcGNiaUFnS2lCVWFHVWdkWEJ3WlhJZ2JHbHRhWFFnYjJZZ2RtRnNkV1VnYjI0Z2RHaGxJSGdnWVhocGMxeHVJQ0FxSUVCMGVYQmxJSHR2WW1wbFkzUjlYRzRnSUNvdlhHNGdJR2RsZENCdFlYaFlLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TGw5NExtMWhlRHRjYmlBZ2ZWeHVYRzRnSUhObGRDQnRZWGhZS0hZcElIdGNiaUFnSUNCMGFHbHpMbDk0TG0xaGVDQTlJSFk3WEc0Z0lDQWdkR2hwY3k1eVpXNWtaWElvS1R0Y2JpQWdmVnh1WEc1Y2JpQWdMeW9xWEc0Z0lDb2dWR2hsSUhWd2NHVnlJR3hwYldsMElHOW1JSFpoYkhWbElHOXVJSFJvWlNCNUlHRjRhWE5jYmlBZ0tpQkFkSGx3WlNCN2IySnFaV04wZlZ4dUlDQXFMMXh1SUNCblpYUWdiV0Y0V1NncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWZlUzV0WVhnN1hHNGdJSDFjYmx4dUlDQnpaWFFnYldGNFdTaDJLU0I3WEc0Z0lDQWdkR2hwY3k1ZmVTNXRZWGdnUFNCMk8xeHVJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtDazdYRzRnSUgxY2JseHVYRzRnSUM4cUtseHVJQ0FxSUZSb1pTQnBibU55WlcxbGJuUmhiQ0J6ZEdWd0lHOW1JSFpoYkhWbGN5QnZiaUIwYUdVZ2VDQmhlR2x6WEc0Z0lDb2dRSFI1Y0dVZ2UyOWlhbVZqZEgxY2JpQWdLaTljYmlBZ1oyVjBJSE4wWlhCWUtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDk0TG5OMFpYQTdYRzRnSUgxY2JseHVJQ0J6WlhRZ2MzUmxjRmdvZGlrZ2UxeHVJQ0FnSUhSb2FYTXVYM2d1YzNSbGNDQTlJSFk3WEc0Z0lDQWdkR2hwY3k1eVpXNWtaWElvS1R0Y2JpQWdmVnh1WEc1Y2JpQWdMeW9xWEc0Z0lDb2dWR2hsSUdsdVkzSmxiV1Z1ZEdGc0lITjBaWEFnYjJZZ2RtRnNkV1Z6SUc5dUlIUm9aU0I1SUdGNGFYTmNiaUFnS2lCQWRIbHdaU0I3YjJKcVpXTjBmVnh1SUNBcUwxeHVJQ0JuWlhRZ2MzUmxjRmtvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVgza3VjM1JsY0R0Y2JpQWdmVnh1WEc0Z0lITmxkQ0J6ZEdWd1dTaDJLU0I3WEc0Z0lDQWdkR2hwY3k1ZmVTNXpkR1Z3SUQwZ2RqdGNiaUFnSUNCMGFHbHpMbkpsYm1SbGNpZ3BPMXh1SUNCOVhHNWNibHh1SUNBdktpcGNiaUFnUVdKemIyeDFkR1VnYlc5a1pTQW9jRzl6YVhScGIyNG5jeUIyWVd4MVpTQnFkVzF3Y3lCMGJ5QnRiM1Z6WlNCamJHbGpheUJ3YjNOcGRHbHZiaWtnYjNJZ2NtVnNZWFJwZG1VZ2JXOWtaU0FvYlc5MWMyVWdaSEpoWnlCamFHRnVaMlZ6SUhaaGJIVmxJSEpsYkdGMGFYWmxJSFJ2SUdsMGN5QmpkWEp5Wlc1MElIQnZjMmwwYVc5dUtTNGdSR1ZtWVhWc2REb2dYQ0poWW5OdmJIVjBaVndpTGx4dUlDQkFkSGx3WlNCN2MzUnlhVzVuZlZ4dUlDQkFaWGhoYlhCc1pTQndiM05wZEdsdmJpNXRiMlJsSUQwZ1hDSnlaV3hoZEdsMlpWd2lPMXh1SUNBcUwxeHVJQ0JuWlhRZ2JXOWtaU2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1d2IzTnBkR2x2Ymk1NExtMXZaR1U3WEc0Z0lIMWNiaUFnYzJWMElHMXZaR1VvZGlrZ2UxeHVJQ0FnSUhSb2FYTXVjRzl6YVhScGIyNHVlQzV0YjJSbElEMGdkanRjYmlBZ0lDQjBhR2x6TG5CdmMybDBhVzl1TG5rdWJXOWtaU0E5SUhZN1hHNGdJSDFjYmx4dVhHNWNibHh1ZlZ4dVhHNWNibHh1THk4Z1YwVkNVRUZEU3lCR1QwOVVSVklnTHk5Y2JpOHZJQzR2Zmk5cWMyaHBiblF0Ykc5aFpHVnlJUzR2YkdsaUwybHVkR1Z5Wm1GalpYTXZjRzl6YVhScGIyNHVhbk1pTENJbmRYTmxJSE4wY21samRDYzdYRzVjYm14bGRDQnRZWFJvSUQwZ2NtVnhkV2x5WlNnbkxpNHZkWFJwYkM5dFlYUm9KeWs3WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUh0Y2JseHVJQ0JqY21WaGRHVTZJQ2gwZVhCbEtTQTlQaUI3WEc0Z0lDQWdjbVYwZFhKdUlHUnZZM1Z0Wlc1MExtTnlaV0YwWlVWc1pXMWxiblJPVXlnbmFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jbkxDQjBlWEJsS1R0Y2JpQWdmU3hjYmx4dUlDQmhjbU02SUNoNExDQjVMQ0J5WVdScGRYTXNJSE4wWVhKMFFXNW5iR1VzSUdWdVpFRnVaMnhsS1NBOVBpQjdYRzVjYmlBZ0lDQjJZWElnYzNSaGNuUWdQU0J0WVhSb0xuUnZRMkZ5ZEdWemFXRnVLSEpoWkdsMWN5d2daVzVrUVc1bmJHVXBPMXh1SUNBZ0lIWmhjaUJsYm1RZ1BTQnRZWFJvTG5SdlEyRnlkR1Z6YVdGdUtISmhaR2wxY3l3Z2MzUmhjblJCYm1kc1pTazdYRzVjYmlBZ0lDQjJZWElnYkdGeVoyVkJjbU5HYkdGbklEMGdaVzVrUVc1bmJHVWdMU0J6ZEdGeWRFRnVaMnhsSUR3OUlERTRNQ0EvSUNjd0p5QTZJQ2N4Snp0Y2JseHVJQ0FnSUhaaGNpQmtJRDBnVzF4dUlDQWdJQ0FnSUNBblRTY3NJSE4wWVhKMExuZ3JlQ3dnYzNSaGNuUXVlU3Q1TEZ4dUlDQWdJQ0FnSUNBblFTY3NJSEpoWkdsMWN5d2djbUZrYVhWekxDQXdMQ0JzWVhKblpVRnlZMFpzWVdjc0lEQXNJR1Z1WkM1NEszZ3NJR1Z1WkM1NUszbGNiaUFnSUNCZExtcHZhVzRvSnlBbktUdGNibHh1SUNBZ0lISmxkSFZ5YmlCa08xeHVJQ0I5TEZ4dVhHNGdJSEpoWkdsaGJFZHlZV1JwWlc1ME9pQW9aR1ZtY3l4dWRXMWlaWEpQWmxOMGIzQnpLU0E5UGlCN1hHNWNiaUFnSUNCc1pYUWdhV1FnUFNBblozSmhaR2xsYm5RbklDc2diV0YwYUM1eWFTZ3hNREF3TURBd01EQXdNREFwTzF4dUlDQWdJR3hsZENCemRHOXdjeUE5SUZ0ZE8xeHVYRzRnSUNBZ2JHVjBJR2R5WVdScFpXNTBJRDBnWkc5amRXMWxiblF1WTNKbFlYUmxSV3hsYldWdWRFNVRLQ2RvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TURBd0wzTjJaeWNzSUNkeVlXUnBZV3hIY21Ga2FXVnVkQ2NwTzF4dUlDQWdJR2R5WVdScFpXNTBMbk5sZEVGMGRISnBZblYwWlNnbmFXUW5MQ0JwWkNrN1hHNGdJQ0FnWjNKaFpHbGxiblF1YzJWMFFYUjBjbWxpZFhSbEtDZGplQ2NzSUNjMU1DVW5LVHRjYmlBZ0lDQm5jbUZrYVdWdWRDNXpaWFJCZEhSeWFXSjFkR1VvSjJONUp5d2dKelV3SlNjcE8xeHVJQ0FnSUdkeVlXUnBaVzUwTG5ObGRFRjBkSEpwWW5WMFpTZ25jaWNzSUNjMU1DVW5LVHRjYmx4dUlDQWdJR1JsWm5NdVlYQndaVzVrUTJocGJHUW9aM0poWkdsbGJuUXBPMXh1WEc0Z0lDQWdabTl5SUNoc1pYUWdhVDB3TzJrOGJuVnRZbVZ5VDJaVGRHOXdjenRwS3lzcElIdGNiaUFnSUNBZ0lHeGxkQ0J6ZEc5d0lEMGdaRzlqZFcxbGJuUXVZM0psWVhSbFJXeGxiV1Z1ZEU1VEtDZG9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHlNREF3TDNOMlp5Y3NJQ2R6ZEc5d0p5azdYRzRnSUNBZ0lDQnpkRzl3TG5ObGRFRjBkSEpwWW5WMFpTZ25hV1FuTENBbmMzUnZjQ2NyYVNrN1hHNGdJQ0FnSUNBdkwzTjBiM0F1YzJWMFFYUjBjbWxpZFhSbEtDZHZabVp6WlhRbkxDQW5OekFsSnlrN1hHNGdJQ0FnSUNBdkwzTjBiM0F1YzJWMFFYUjBjbWxpZFhSbEtDZHpkRzl3TFdOdmJHOXlKeXdnSjFkb2FYUmxKeWs3WEc0Z0lDQWdJQ0JuY21Ga2FXVnVkQzVoY0hCbGJtUkRhR2xzWkNoemRHOXdLVHRjYmlBZ0lDQWdJSE4wYjNCekxuQjFjMmdvYzNSdmNDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0FnSUdsa09pQnBaQ3hjYmlBZ0lDQWdJSE4wYjNCek9pQnpkRzl3Y3l4Y2JpQWdJQ0FnSUdWc1pXMWxiblE2SUdkeVlXUnBaVzUwWEc0Z0lDQWdmVHRjYmx4dUlDQjlYRzVjYm4wN1hHNWNibHh1WEc0dkx5QlhSVUpRUVVOTElFWlBUMVJGVWlBdkwxeHVMeThnTGk5K0wycHphR2x1ZEMxc2IyRmtaWEloTGk5c2FXSXZkWFJwYkM5emRtY3Vhbk1pTENJbmRYTmxJSE4wY21samRDYzdYRzVjYmk4cUtseHVJQ29nVEdsdGFYUWdZU0J1ZFcxaVpYSWdkRzhnZDJsMGFHbHVJR0VnYldsdWFXMTFiU0JoYm1RZ2JXRjRhVzExYlZ4dUlDb2dRSEJoY21GdElDQjdiblZ0WW1WeWZTQjJZV3gxWlNCSmJuQjFkQ0IyWVd4MVpWeHVJQ29nUUhCaGNtRnRJQ0I3Ym5WdFltVnlmU0J0YVc0Z0lDQk1iM2RsY2lCc2FXMXBkRnh1SUNvZ1FIQmhjbUZ0SUNCN2JuVnRZbVZ5ZlNCdFlYZ2dJQ0JWY0hCbGNpQnNhVzFwZEZ4dUlDb2dRSEpsZEhWeWJpQjdiblZ0WW1WeWZTQWdJQ0FnSUNCVWFHVWdhVzV3ZFhRZ2RtRnNkV1VnWTI5dWMzUnlZV2x1WldRZ2QybDBhR2x1SUhSb1pTQnNiM2RsY2lCaGJtUWdkWEJ3WlhJZ2JHbHRhWFJ6WEc0Z0tpQkFaWGhoYlhCc1pWeHVJQ29nVG1WNGRYTXVZMnhwY0NneE1Td3dMREV3S1NBZ0lDOHZJSEpsZEhWeWJuTWdNVEJjYmlBcUlFNWxlSFZ6TG1Oc2FYQW9MVEVzTUN3eE1Da2dJQ0F2THlCeVpYUjFjbTV6SURCY2JpQXFJRTVsZUhWekxtTnNhWEFvTlN3d0xERXdLU0FnSUNBdkx5QnlaWFIxY201eklEVmNiaUFxTDF4dVhHNWxlSEJ2Y25SekxtTnNhWEFnUFNBb2RtRnNkV1VzYldsdUxHMWhlQ2tnUFQ0Z2UxeHVJQ0J5WlhSMWNtNGdUV0YwYUM1dGFXNG9UV0YwYUM1dFlYZ29kbUZzZFdVc2JXbHVLU3h0WVhncE8xeHVmVHRjYmx4dVpYaHdiM0owY3k1dWIzSnRZV3hwZW1VZ1BTQW9kbUZzZFdVc2JXbHVMRzFoZUNrZ1BUNGdlMXh1SUNCeVpYUjFjbTRnS0NBb2RtRnNkV1V0YldsdUtTQXZJQ2h0WVhndGJXbHVLU0FwTzF4dWZUdGNibHh1THlvcVhHNGdLaUJUWTJGc1pTQmhJSFpoYkhWbElHWnliMjBnYjI1bElISmhibWRsSUhSdklHRnViM1JvWlhJZ2NtRnVaMlV1WEc0Z0tpQkFjR0Z5WVcwZ0lIdHVkVzFpWlhKOUlHbHVUblZ0SUNCSmJuQjFkQ0IyWVd4MVpWeHVJQ29nUUhCaGNtRnRJQ0I3Ym5WdFltVnlmU0JwYmsxcGJpQWdTVzV3ZFhRZ2NtRnVaMlVnYldsdWFXMTFiVnh1SUNvZ1FIQmhjbUZ0SUNCN2JuVnRZbVZ5ZlNCcGJrMWhlQ0FnU1c1d2RYUWdjbUZ1WjJVZ2JXRjRhVzExYlZ4dUlDb2dRSEJoY21GdElDQjdiblZ0WW1WeWZTQnZkWFJOYVc0Z1QzVjBjSFYwSUhKaGJtZGxJRzFwYm1sdGRXMWNiaUFxSUVCd1lYSmhiU0FnZTI1MWJXSmxjbjBnYjNWMFRXRjRJRTkxZEhCMWRDQnlZVzVuWlNCdFlYaHBiWFZ0WEc0Z0tpQkFjbVYwZFhKdUlIdHVkVzFpWlhKOUlDQWdJQ0FnSUNCVWFHVWdhVzV3ZFhRZ2RtRnNkV1VnYzJOaGJHVmtJSFJ2SUdsMGN5QnVaWGNnY21GdVoyVmNiaUFxSUVCbGVHRnRjR3hsWEc0Z0tpQk9aWGgxY3k1elkyRnNaU2d3TGpVc01Dd3hMREFzTVRBcElDQWdMeThnY21WMGRYSnVjeUExWEc0Z0tpQk9aWGgxY3k1elkyRnNaU2d3TGprc01Dd3hMREVzTUNrZ0lDQWdMeThnY21WMGRYSnVjeUF3TGpGY2JpQXFMMXh1Wlhod2IzSjBjeTV6WTJGc1pTQTlJQ2hwYms1MWJTd2dhVzVOYVc0c0lHbHVUV0Y0TENCdmRYUk5hVzRzSUc5MWRFMWhlQ2tnUFQ0Z2UxeHVJQ0JwWmlBb2FXNU5hVzRnUFQwOUlHbHVUV0Y0S1NCN1hHNGdJQ0FnY21WMGRYSnVJRzkxZEUxcGJqdGNiaUFnZlZ4dUlDQnlaWFIxY200Z0tDZ29hVzVPZFcwZ0xTQnBiazFwYmlrZ0tpQW9iM1YwVFdGNElDMGdiM1YwVFdsdUtTa2dMeUFvYVc1TllYZ2dMU0JwYmsxcGJpa3BJQ3NnYjNWMFRXbHVPMXh1ZlR0Y2JseHVaWGh3YjNKMGN5NTBiMUJ2YkdGeUlEMGdLSGdzZVNrZ1BUNGdlMXh1SUNCMllYSWdjaUE5SUUxaGRHZ3VjM0Z5ZENoNEtuZ2dLeUI1S25rcE8xeHVYRzRnSUhaaGNpQjBhR1YwWVNBOUlFMWhkR2d1WVhSaGJqSW9lU3g0S1R0Y2JpQWdhV1lnS0hSb1pYUmhJRHdnTUNrZ2UxeHVJQ0FnSUhSb1pYUmhJRDBnZEdobGRHRWdLeUFvTWlBcUlFMWhkR2d1VUVrcE8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCN2NtRmthWFZ6T2lCeUxDQmhibWRzWlRvZ2RHaGxkR0Y5TzF4dWZUdGNibHh1Wlhod2IzSjBjeTUwYjBOaGNuUmxjMmxoYmlBOUlHWjFibU4wYVc5dUtISmhaR2wxY3l3Z1lXNW5iR1VwZTF4dUlDQjJZWElnWTI5eklEMGdUV0YwYUM1amIzTW9ZVzVuYkdVcE8xeHVJQ0IyWVhJZ2MybHVJRDBnVFdGMGFDNXphVzRvWVc1bmJHVXBPMXh1SUNCeVpYUjFjbTRnZTNnNklISmhaR2wxY3lwamIzTXNJSGs2SUhKaFpHbDFjeXB6YVc0cUxURjlPMXh1ZlR0Y2JpOHFYRzVsZUhCdmNuUnpMbkJ2YkdGeVZHOURZWEowWlhOcFlXNG9ZMlZ1ZEdWeVdDd2dZMlZ1ZEdWeVdTd2djbUZrYVhWekxDQmhibWRzWlVsdVJHVm5jbVZsY3lrZ2UxeHVJQ0IyWVhJZ1lXNW5iR1ZKYmxKaFpHbGhibk1nUFNBb1lXNW5iR1ZKYmtSbFozSmxaWE10T1RBcElDb2dUV0YwYUM1UVNTQXZJREU0TUM0d08xeHVYRzRnSUhKbGRIVnliaUI3WEc0Z0lDQWdlRG9nWTJWdWRHVnlXQ0FySUNoeVlXUnBkWE1nS2lCTllYUm9MbU52Y3loaGJtZHNaVWx1VW1Ga2FXRnVjeWtwTEZ4dUlDQWdJSGs2SUdObGJuUmxjbGtnS3lBb2NtRmthWFZ6SUNvZ1RXRjBhQzV6YVc0b1lXNW5iR1ZKYmxKaFpHbGhibk1wS1Z4dUlDQjlPMXh1ZlNBZ0tpOWNibHh1WEc1Y2JtVjRjRzl5ZEhNdWNISjFibVVnUFNCbWRXNWpkR2x2Ymloa1lYUmhMQ0J6WTJGc1pTa2dlMXh1SUNCeVpYUjFjbTRnY0dGeWMyVkdiRzloZENoa1lYUmhMblJ2Um1sNFpXUW9jMk5oYkdVcEtUdGNibjA3WEc1Y2JtVjRjRzl5ZEhNdWFXNTJaWEowSUQwZ1puVnVZM1JwYjI0Z0tHbHVUblZ0S1NCN1hHNGdJSEpsZEhWeWJpQmxlSEJ2Y25SekxuTmpZV3hsS0dsdVRuVnRMQ0F4TENBd0xDQXdMQ0F4S1R0Y2JuMDdYRzVjYmk4cUtseHVJQ29nUTI5dWRtVnlkQ0JoSUUxSlJHa2dibTkwWlNCdWRXMWlaWElnZEc4Z1lTQm1jbVZ4ZFdWdVkza2dkbUZzZFdVZ2FXNGdaWEYxWVd3Z2RHVnRjR1Z5WVcxbGJuUXVYRzRnS2lCQWNHRnlZVzBnSUh0dWRXMWlaWEo5SUcxcFpHa2dUVWxFU1NCdWIzUmxJSFpoYkhWbFhHNGdLaUJBY21WMGRYSnVJSHR1ZFcxaVpYSjlJQ0FnSUNBZ1JuSmxjWFZsYm1ObElIWmhiSFZsWEc0Z0tpQkFaWGhoYlhCc1pWeHVJQ29nVG1WNGRYTXViWFJ2WmlnMk1Da2dJQzh2SUhKbGRIVnlibk1nZEdobElHWnlaWEYxWlc1amVTQnVkVzFpWlhJZ2IyWWdUV2xrWkd4bElFTmNiaUFxTDF4dVpYaHdiM0owY3k1dGRHOW1JRDBnWm5WdVkzUnBiMjRvYldsa2FTa2dlMXh1SUNCeVpYUjFjbTRnVFdGMGFDNXdiM2NvTWl3Z0tDaHRhV1JwTFRZNUtTOHhNaWtwSUNvZ05EUXdPMXh1ZlR0Y2JseHVMeW9xWEc0Z0tpQkpiblJsY25CdmJHRjBaU0JpWlhSM1pXVnVJSFIzYnlCdWRXMWlaWEp6WEc0Z0tpQkFjR0Z5WVcwZ0lIdHVkVzFpWlhKOUlHeHZZeUJKYm5SbGNuQnZiR0YwYVc5dUlHbHVaR1Y0SUNnd0xURXBYRzRnS2lCQWNHRnlZVzBnSUh0dWRXMWlaWEo5SUcxcGJpQk1iM2RsY2lCMllXeDFaVnh1SUNvZ1FIQmhjbUZ0SUNCN2JuVnRZbVZ5ZlNCdFlYZ2dWWEJ3WlhJZ2RtRnNkV1ZjYmlBcUlFQnlaWFIxY200Z2UyNTFiV0psY24wZ0lDQWdJRWx1ZEdWeWNHOXNZWFJsWkNCMllXeDFaVnh1SUNvZ1FHVjRZVzF3YkdWY2JpQXFJRTVsZUhWekxtbHVkR1Z5Y0Nnd0xqVXNNaXcwS1NBZ0lDOHZJSEpsZEhWeWJuTWdNMXh1SUNvZ1RtVjRkWE11YVc1MFpYSndLREF1TVN3d0xERXdLU0FnSUNBZ0x5OGdjbVYwZFhKdWN5QXhYRzRnS2k5Y2JtVjRjRzl5ZEhNdWFXNTBaWEp3SUQwZ1puVnVZM1JwYjI0b2JHOWpMRzFwYml4dFlYZ3BJSHRjYmlBZ2NtVjBkWEp1SUd4dll5QXFJQ2h0WVhnZ0xTQnRhVzRwSUNzZ2JXbHVPMXh1ZlR0Y2JseHVMeW9xWEc0Z0tpQlNaWFIxY200Z1lTQnlZVzVrYjIwZ1kyaHZhV05sSUdaeWIyMGdZU0JzYVhOMElHOW1JR0Z5WjNWdFpXNTBjMXh1SUNvZ1FISmxkSFZ5YmlCN2RtRnlhVzkxYzMwZ1QyNWxJSEpoYm1SdmJTQmhjbWQxYldWdWRGeHVJQ29nUUdWNFlXMXdiR1ZjYmlBcUlFNWxlSFZ6TG5CcFkyc29NU3d5TERNc05Da2dJQ0F2THlCeVpYUjFjbTV6SURFc0lESXNJRE1zSUc5eUlEUmNiaUFxSUU1bGVIVnpMbkJwWTJzb1puVnVZM1JwYjI0eExHWjFibU4wYVc5dU1pa2dJQ0F2THlCeVpYUjFjbTV6SUdWcGRHaGxjaUJtZFc1amRHbHZiakVnYjNJZ1puVnVZM1JwYjI0eVhHNGdLaTljYm1WNGNHOXlkSE11Y0dsamF5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQnlaWFIxY200Z1lYSm5kVzFsYm5SelczNStLRTFoZEdndWNtRnVaRzl0S0NrcVlYSm5kVzFsYm5SekxteGxibWQwYUNsZE8xeHVmVHRjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUdGdUlHOWpkR0YyWlNCdGRXeDBhWEJzYVdWeUlHWnZjaUJtY21WeGRXVnVZM2tnZG1Gc2RXVnpYRzRnS2lCQWNHRnlZVzBnSUh0dWRXMWlaWEo5SUc1MWJTQlNaV3hoZEdsMlpTQnZZM1JoZG1VZ2JuVnRZbVZ5SUNobExtY3VJQzB4SUdadmNpQnZibVVnYjJOMFlYWmxJR1J2ZDI0c0lERWdabTl5SUc5dVpTQnZZM1JoZG1VZ2RYQXBYRzRnS2lCQWNtVjBkWEp1SUh0dWRXMWlaWEo5SUNBZ0lDQlBZM1JoZG1VZ2JYVnNkR2x3YkdsbGNseHVJQ29nUUdWNFlXMXdiR1ZjYmlBcUlFNWxlSFZ6TG05amRHRjJaU2d0TVNrZ0lDOHZJSEpsZEhWeWJuTWdNQzQxWEc0Z0tpQk9aWGgxY3k1dlkzUmhkbVVvTUNrZ0lDQXZMeUJ5WlhSMWNtNXpJREZjYmlBcUlFNWxlSFZ6TG05amRHRjJaU2d4S1NBZ0lDOHZJSEpsZEhWeWJuTWdNbHh1SUNvZ1RtVjRkWE11YjJOMFlYWmxLRElwSUNBZ0x5OGdjbVYwZFhKdWN5QTBYRzRnS2k5Y2JtVjRjRzl5ZEhNdWIyTjBZWFpsSUQwZ1puVnVZM1JwYjI0b2JuVnRLU0I3WEc0Z0lISmxkSFZ5YmlCTllYUm9MbkJ2ZHlneUxHNTFiU2s3WEc1OU8xeHVYRzR2S2lwY2JpQXFJRkpoYm1SdmJTQnBiblJsWjJWeUlHZGxibVZ5WVhSdmNpNGdTV1lnYm04Z2MyVmpiMjVrSUdGeVozVnRaVzUwSUdseklHZHBkbVZ1TENCM2FXeHNJSEpsZEhWeWJpQnlZVzVrYjIwZ2FXNTBaV2RsY2lCbWNtOXRJREFnZEc4Z1ltOTFibVF4TGx4dUlDb2dRSEJoY21GdElDQjdiblZ0WW1WeWZTQmliM1Z1WkRFZ1RXbHVhVzExYlNCeVlXNWtiMjBnZG1Gc2RXVmNiaUFxSUVCd1lYSmhiU0FnZTI1MWJXSmxjbjBnWW05MWJtUXlJRTFoZUdsdGRXMGdjbUZ1Wkc5dElIWmhiSFZsWEc0Z0tpQkFjbVYwZFhKdUlIdHVkVzFpWlhKOUlDQWdJQ0FnSUNCU1lXNWtiMjBnYVc1MFpXZGxjaUJpWlhSM1pXVnVJR3h2ZDJWeUlHRnVaQ0IxY0hCbGNpQmliM1Z1WkdGeWVWeHVJQ29nUUdWNFlXMXdiR1ZjYmlBcUlFNWxlSFZ6TG5KcEtERXdLU0FnSUNBdkx5QnlaWFIxY201eklISmhibVJ2YlNCcGJuUWdabkp2YlNBd0lIUnZJREV3WEc0Z0tpQk9aWGgxY3k1eWFTZ3lNQ3d5TURBd0tTQXZMeUJ5WlhSMWNtNXpJSEpoYm1SdmJTQnBiblFnWm5KdmJTQXlNQ0IwYnlBeU1EQXdYRzRnS2k5Y2JtVjRjRzl5ZEhNdWNta2dQU0JtZFc1amRHbHZiaWhpYjNWdVpERXNZbTkxYm1ReUtTQjdYRzRnSUdsbUlDZ2hZbTkxYm1ReUtTQjdYRzRnSUNBZ1ltOTFibVF5SUQwZ1ltOTFibVF4TzF4dUlDQWdJR0p2ZFc1a01TQTlJREE3WEc0Z0lIMWNiaUFnZG1GeUlHeHZkeUE5SUUxaGRHZ3ViV2x1S0dKdmRXNWtNU3hpYjNWdVpESXBPMXh1SUNCMllYSWdhR2xuYUNBOUlFMWhkR2d1YldGNEtHSnZkVzVrTVN4aWIzVnVaRElwTzF4dUlDQnlaWFIxY200Z1RXRjBhQzVtYkc5dmNpaE5ZWFJvTG5KaGJtUnZiU2dwS2lob2FXZG9MV3h2ZHlrcmJHOTNLVHRjYm4wN1hHNWNiaThxS2x4dUlDb2dVbUZ1Wkc5dElHWnNiMkYwSUc1MWJXSmxjaUJuWlc1bGNtRjBiM0l1SUVsbUlHNXZJSE5sWTI5dVpDQmhjbWQxYldWdWRDQnBjeUJuYVhabGJpd2dkMmxzYkNCeVpYUjFjbTRnY21GdVpHOXRJR1pzYjJGMElHWnliMjBnTUNCMGJ5QmliM1Z1WkRFdVhHNGdLaUJBY0dGeVlXMGdJSHR1ZFcxaVpYSjlJR0p2ZFc1a01TQk5hVzVwYlhWdElISmhibVJ2YlNCMllXeDFaVnh1SUNvZ1FIQmhjbUZ0SUNCN2JuVnRZbVZ5ZlNCaWIzVnVaRElnVFdGNGFXMTFiU0J5WVc1a2IyMGdkbUZzZFdWY2JpQXFJRUJ5WlhSMWNtNGdlMjUxYldKbGNuMGdJQ0FnSUNBZ0lGSmhibVJ2YlNCbWJHOWhkQ0JpWlhSM1pXVnVJR3h2ZDJWeUlHRnVaQ0IxY0hCbGNpQmliM1Z1WkdGeWVWeHVJQ29nUUdWNFlXMXdiR1ZjYmlBcUlFNWxlSFZ6TG5KbUtERXBJQ0FnSUM4dklISmxkSFZ5Ym5NZ2NtRnVaRzl0SUdac2IyRjBJR1p5YjIwZ01DQjBieUF4WEc0Z0tpQk9aWGgxY3k1eVppZ3hMRElwSUM4dklISmxkSFZ5Ym5NZ2NtRnVaRzl0SUdac2IyRjBJR1p5YjIwZ01TQjBieUF5WEc0Z0tpOWNibVY0Y0c5eWRITXVjbVlnUFNCbWRXNWpkR2x2YmloaWIzVnVaREVzWW05MWJtUXlLU0I3WEc0Z0lHbG1JQ2doWW05MWJtUXlLU0I3WEc0Z0lDQWdZbTkxYm1ReUlEMGdZbTkxYm1ReE8xeHVJQ0FnSUdKdmRXNWtNU0E5SURBN1hHNGdJSDFjYmlBZ2RtRnlJR3h2ZHlBOUlFMWhkR2d1YldsdUtHSnZkVzVrTVN4aWIzVnVaRElwTzF4dUlDQjJZWElnYUdsbmFDQTlJRTFoZEdndWJXRjRLR0p2ZFc1a01TeGliM1Z1WkRJcE8xeHVJQ0J5WlhSMWNtNGdUV0YwYUM1eVlXNWtiMjBvS1Nvb2FHbG5hQzFzYjNjcEsyeHZkenRjYm4wN1hHNWNibHh1Wlhod2IzSjBjeTVqZVdOc1pTQTlJR1oxYm1OMGFXOXVLR2x1Y0hWMExHMXBiaXh0WVhncElIdGNiaUFnYVc1d2RYUXJLenRjYmlBZ2FXWWdLR2x1Y0hWMElENDlJRzFoZUNrZ2UxeHVJQ0FnSUdsdWNIVjBJRDBnYldsdU8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCcGJuQjFkRHRjYm4wN1hHNWNiaThxS2x4dUlDb2dRWFpsY21GblpTQmhiaUJoY25KaGVTQnZaaUJ1ZFcxaVpYSnpYRzRnS2lCQWNHRnlZVzBnSUh0QmNuSmhlWDBnWkdGMFlTQkJjbkpoZVNCdlppQnVkVzFpWlhKeklIUnZJR0YyWlhKaFoyVmNiaUFxSUVCeVpYUjFjbTRnZTI1MWJXSmxjbjBnSUNBZ0lDQkJkbVZ5WVdkbElHOW1JSFJvWlNCcGJuQjFkQ0JrWVhSaFhHNGdLaUJBWlhoaGJYQnNaVnh1SUNvZ1RtVjRkWE11WVhabGNtRm5aU2hiTUN3eUxEUXNOaXc0TERFd1hTa2dJQ0F2THlCeVpYUjFjbTV6SURWY2JpQXFMMXh1Wlhod2IzSjBjeTVoZG1WeVlXZGxJRDBnWm5WdVkzUnBiMjRvWkdGMFlTa2dlMXh1SUNCc1pYUWdkRzkwWVd3Z1BTQXdPMXh1SUNCbWIzSWdLSFpoY2lCcFBUQTdhVHhrWVhSaExteGxibWQwYUR0cEt5c3BJSHRjYmlBZ0lDQjBiM1JoYkNBclBTQmtZWFJoVzJsZE8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCMGIzUmhiQ0F2SUdSaGRHRXViR1Z1WjNSb08xeHVmVHRjYmx4dUx5b3FYRzRnS2lCSFpYUWdkR2hsSUdScGMzUmhibU5sSUdaeWIyMGdiMjVsSUNoNExIa3BJSEJ2YVc1MElIUnZJR0Z1YjNSb1pYSWdLSGdzZVNrZ2NHOXBiblJjYmlBcUlFQndZWEpoYlNBZ2UyNTFiV0psY24wZ2VERWdlQ0J2WmlCbWFYSnpkQ0J3YjJsdWRGeHVJQ29nUUhCaGNtRnRJQ0I3Ym5WdFltVnlmU0I1TVNCNUlHOW1JR1pwY25OMElIQnZhVzUwWEc0Z0tpQkFjR0Z5WVcwZ0lIdHVkVzFpWlhKOUlIZ3lJSGdnYjJZZ2MyVmpiMjVrSUhCdmFXNTBYRzRnS2lCQWNHRnlZVzBnSUh0dWRXMWlaWEo5SUhreUlIa2diMllnYzJWamIyNWtJSEJ2YVc1NVhHNGdLaUJBY21WMGRYSnVJSHR1ZFcxaVpYSjlJQ0FnSUVScGMzUmhibU5sWEc0Z0tpQkFaWGhoYlhCc1pWeHVJQ29nVG1WNGRYTXVaR2x6ZEdGdVkyVW9NQ3d3TERNc05Da2dJQ0F2THlCeVpYUjFjbTV6SURWY2JpQXFMMXh1Wlhod2IzSjBjeTVrYVhOMFlXNWpaU0E5SUdaMWJtTjBhVzl1S0hneExIa3hMSGd5TEhreUtTQjdYRzRnSUd4bGRDQmhJRDBnZURFZ0xTQjRNanRjYmlBZ2JHVjBJR0lnUFNCNU1TQXRJSGt5TzF4dUlDQnlaWFIxY200Z1RXRjBhQzV6Y1hKMEtDQmhLbUVnS3lCaUttSWdLVHRjYm4wN1hHNWNibVY0Y0c5eWRITXVaMkZwYmxSdlJFSWdQU0JtZFc1amRHbHZiaWhuWVdsdUtTQjdYRzRnSUhKbGRIVnliaUF5TUNBcUlFMWhkR2d1Ykc5bk1UQW9aMkZwYmlrN1hHNTlPMXh1WEc0dktpcGNiaUFxSUVac2FYQWdZU0JqYjJsdUxDQnlaWFIxY201cGJtY2daV2wwYUdWeUlEQWdiM0lnTVNCaFkyTnZjbVJwYm1jZ2RHOGdZU0J3Y205aVlXSnBiR2wwZVZ4dUlDb2dRSEJoY21GdElDQjdiblZ0WW1WeWZTQmJiMlJrY3owd0xqVmRJRXhwYTJWc2FXaHZiMlFnYjJZZ2NtVjBkWEp1YVc1bklERmNiaUFxSUVCeVpYUjFjbTRnZTI1MWJXSmxjbjBnSUNBZ0lDQWdJQ0FnSUNBeElHOXlJREJjYmlBcUlFQmxlR0Z0Y0d4bFhHNGdLaUJPWlhoMWN5NWpiMmx1S0RBdU1Ta2dJQ0F2THlCeVpYUjFjbTV6SURFZ0tERXdKU0J2WmlCMGFHVWdkR2x0WlNrZ2IzSWdNQ0FvT1RBbElHOW1JSFJvWlNCMGFXMWxLVnh1SUNvdlhHNWxlSEJ2Y25SekxtTnZhVzRnUFNCbWRXNWpkR2x2YmlodlpHUnpQVEF1TlNrZ2UxeHVJQ0JwWmlBb1pYaHdiM0owY3k1eVppZ3dMREVwSUR3Z2IyUmtjeWtnZTF4dUlDQWdJSEpsZEhWeWJpQXhPMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJSEpsZEhWeWJpQXdPMXh1SUNCOVhHNTlPMXh1WEc1Y2JseHVMeThnVjBWQ1VFRkRTeUJHVDA5VVJWSWdMeTljYmk4dklDNHZmaTlxYzJocGJuUXRiRzloWkdWeUlTNHZiR2xpTDNWMGFXd3ZiV0YwYUM1cWN5SXNJaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHViR1YwSUhOMlp5QTlJSEpsY1hWcGNtVW9KeTR1TDNWMGFXd3ZjM1puSnlrN1hHNXNaWFFnWkc5dElEMGdjbVZ4ZFdseVpTZ25MaTR2ZFhScGJDOWtiMjBuS1R0Y2JteGxkQ0IxZEdsc0lEMGdjbVZ4ZFdseVpTZ25MaTR2ZFhScGJDOTFkR2xzSnlrN1hHNXNaWFFnZEc5MVkyZ2dQU0J5WlhGMWFYSmxLQ2N1TGk5MWRHbHNMM1J2ZFdOb0p5azdYRzVqYjI1emRDQkZkbVZ1ZEVWdGFYUjBaWElnUFNCeVpYRjFhWEpsS0NkbGRtVnVkSE1uS1R0Y2JseHVhVzF3YjNKMElIc2dZMjlzYjNKeklIMGdabkp2YlNBbkxpNHZiV0ZwYmljN1hHNWNiaThxS2x4dVNXNTBaWEptWVdObFhHNHFMMXh1Wlhod2IzSjBJR1JsWm1GMWJIUWdZMnhoYzNNZ1NXNTBaWEptWVdObElHVjRkR1Z1WkhNZ1JYWmxiblJGYldsMGRHVnlJSHRjYmx4dUlDQmpiMjV6ZEhKMVkzUnZjaWhoY21kekxHOXdkR2x2Ym5Nc1pHVm1ZWFZzZEhNcElIdGNiaUFnSUNCemRYQmxjaWdwTzF4dUlDQWdJSFJvYVhNdWRIbHdaU0E5SUhSb2FYTXVZMjl1YzNSeWRXTjBiM0l1Ym1GdFpUdGNiaUFnSUNCMGFHbHpMbk5sZEhScGJtZHpJRDBnZEdocGN5NXdZWEp6WlZObGRIUnBibWR6S0dGeVozTXNiM0IwYVc5dWN5eGtaV1poZFd4MGN5azdYRzRnSUNBZ2RHaHBjeTV0YjNWelpTQTlJSHQ5TzF4dUlDQWdJSFJvYVhNdWQyRnBkQ0E5SUdaaGJITmxPMXh1SUNBZ0lIUm9hWE11WTI5c2IzSnpJRDBnZTMwN1hHNGdJQ0FnYkdWMElHUmxabUYxYkhSRGIyeHZjbk1nUFNCamIyeHZjbk1vS1RzZ0x5OGdhbk5vYVc1MElHbG5ibTl5WlRwc2FXNWxYRzRnSUNBZ2RHaHBjeTVqYjJ4dmNuTXVZV05qWlc1MElEMGdaR1ZtWVhWc2RFTnZiRzl5Y3k1aFkyTmxiblE3WEc0Z0lDQWdkR2hwY3k1amIyeHZjbk11Wm1sc2JDQTlJR1JsWm1GMWJIUkRiMnh2Y25NdVptbHNiRHRjYmlBZ0lDQjBhR2x6TG1OdmJHOXljeTVzYVdkb2RDQTlJR1JsWm1GMWJIUkRiMnh2Y25NdWJHbG5hSFE3WEc0Z0lDQWdkR2hwY3k1amIyeHZjbk11WkdGeWF5QTlJR1JsWm1GMWJIUkRiMnh2Y25NdVpHRnlhenRjYmlBZ0lDQjBhR2x6TG1OdmJHOXljeTV0WldScGRXMU1hV2RvZENBOUlHUmxabUYxYkhSRGIyeHZjbk11YldWa2FYVnRUR2xuYUhRN1hHNGdJQ0FnZEdocGN5NWpiMnh2Y25NdWJXVmthWFZ0UkdGeWF5QTlJR1JsWm1GMWJIUkRiMnh2Y25NdWJXVmthWFZ0UkdGeWF6dGNiaUFnZlZ4dVhHNGdJSEJoY25ObFUyVjBkR2x1WjNNb1lYSm5jeXh2Y0hScGIyNXpMR1JsWm1GMWJIUnpLU0I3WEc1Y2JpQWdJQ0J2Y0hScGIyNXpMblZ1YzJocFpuUW9KM1JoY21kbGRDY3BPMXh1SUNBZ0lHUmxabUYxYkhSekxtUmxabUYxYkhSVGFYcGxJRDBnWkdWbVlYVnNkSE11YzJsNlpTNXpjR3hwWTJVb01Dd3lLVHRjYmlBZ0lDQmtaV1poZFd4MGN5NXphWHBsSUQwZ1ptRnNjMlU3WEc1Y2JpQWdJQ0JzWlhRZ2MyVjBkR2x1WjNNZ1BTQjdYRzRnSUNBZ0lDQW5kR0Z5WjJWMEp6b2daRzlqZFcxbGJuUXVZbTlrZVN4Y2JpQWdJQ0FnSUNkamIyeHZjbk1uT2lCN2ZTd2dMeThnYzJodmRXeGtJR2x1YUdWeWFYUWdabkp2YlNCaElHTnZiRzl5Y3lCdGIyUjFiR1VzWEc0Z0lDQWdJQ0FuYzI1aGNGZHBkR2hRWVhKbGJuUW5PaUIwY25WbExGeHVJQ0FnSUNBZ0oyVjJaVzUwSnpvZ1puVnVZM1JwYjI0b0tTQjdmU3hjYmlBZ0lDQWdJQ2RqYjIxd2IyNWxiblFuT2lCbVlXeHpaVnh1SUNBZ0lIMDdYRzVjYmlBZ0lDQm1iM0lnS0d4bGRDQnJaWGtnYVc0Z1pHVm1ZWFZzZEhNcElIdGNiaUFnSUNBZ0lITmxkSFJwYm1kelcydGxlVjBnUFNCa1pXWmhkV3gwYzF0clpYbGRPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHWnZjaUFvYkdWMElHazlNRHNnYVR4aGNtZHpMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNBdkx5Qm5jbUZpY3lCMGFHVWdibVY0ZENCaGNtZDFiV1Z1ZEZ4dUlDQWdJQ0FnYkdWMElITmxkSFJwYm1jZ1BTQmhjbWR6VzJsZE8xeHVJQ0FnSUNBZ0x5OGdhV1lnYVhRbmN5QmhiaUJ2WW1wbFkzUXNJR2wwSUcxMWMzUWdZbVVnZEdobElITmxkSFJwYm1keklHOWlhbVZqZEZ4dUlDQWdJQ0FnYVdZZ0tDQjFkR2xzTG1selQySnFaV04wS0hObGRIUnBibWNwSUNrZ2UxeHVJQ0FnSUNBZ0lDQm1iM0lnS0NCc1pYUWdhMlY1SUdsdUlITmxkSFJwYm1jZ0tTQjdYRzRnSUNBZ0lDQWdJQ0FnYzJWMGRHbHVaM05iYTJWNVhTQTlJSE5sZEhScGJtZGJhMlY1WFR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0x5OGdhV1lnYVhRbmN5QmhJR1oxYm1OMGFXOXVMQ0JwZENCdGRYTjBJR0psSUhSb1pTQmxkbVZ1ZENCelpYUjBhVzVuWEc0Z0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0hSNWNHVnZaaUJ6WlhSMGFXNW5JRDA5UFNBblpuVnVZM1JwYjI0bktTQjdYRzRnSUNBZ0lDQWdJSE5sZEhScGJtZHpMbVYyWlc1MElEMGdjMlYwZEdsdVp6dGNiaUFnSUNBZ0lDOHZJRzkwYUdWeWQybHpaU3dnWTI5dWMybGtaWElnYVhRZ2IyNWxJRzltSUhSb1pTQjNhV1JuWlhRbmN5QmpkWE4wYjIwZ2IzQjBhVzl1YzF4dUlDQWdJQ0FnZlNCbGJITmxJR2xtSUNodmNIUnBiMjV6TG14bGJtZDBhRDQ5TVNrZ2UxeHVJQ0FnSUNBZ0lDQXZMeUJuY21GaUlIUm9aU0JtYVhKemRDQnZjSFJwYjI0Z0xTMGdhUzVsTGlBbmRHRnlaMlYwSjF4dUlDQWdJQ0FnSUNCc1pYUWdhMlY1SUQwZ2IzQjBhVzl1Y3k1emNHeHBZMlVvTUN3eEtWc3dYVHRjYmlBZ0lDQWdJQ0FnYzJWMGRHbHVaM05iYTJWNVhTQTlJSE5sZEhScGJtYzdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5b2dJR2hoYm1Sc1pTQmpiMjF0YjI0Z2MyVjBkR2x1WjNNZ0lDb3ZYRzVjYmlBZ0lDQXZMeUIwWVhKblpYUmNiaUFnSUNCMGFHbHpMbkJoY21WdWRDQTlJR1J2YlM1d1lYSnpaVVZzWlcxbGJuUW9jMlYwZEdsdVozTXVkR0Z5WjJWMEtUdGNibHh1SUNBZ0lDOHZJRzVsZUhWekxYVnBJR0YwZEhKcFluVjBaVnh1SUNBZ0lHbG1JQ2gwYUdsekxuQmhjbVZ1ZENBbUppQjBhR2x6TG5CaGNtVnVkQ0JwYm5OMFlXNWpaVzltSUVoVVRVeEZiR1Z0Wlc1MElDWW1JQ0Z6WlhSMGFXNW5jeTVqYjIxd2IyNWxiblFwSUh0Y2JpQWdJQ0FnSUdsbUlDZ2hkR2hwY3k1d1lYSmxiblF1YUdGelFYUjBjbWxpZFhSbEtDZHVaWGgxY3kxMWFTY3BLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjR0Z5Wlc1MExuTmxkRUYwZEhKcFluVjBaU2duYm1WNGRYTXRkV2tuTENjbktUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5QnphWHBsWEc1Y2JpQWdJQ0JwWmlBb2MyVjBkR2x1WjNNdWMybDZaU0FtSmlCQmNuSmhlUzVwYzBGeWNtRjVLSE5sZEhScGJtZHpMbk5wZW1VcElDWW1JSE5sZEhScGJtZHpMbk51WVhCWGFYUm9VR0Z5Wlc1MEtTQjdYRzRnSUNBZ0lDQjBhR2x6TG5kcFpIUm9JRDBnYzJWMGRHbHVaM011YzJsNlpWc3dYVHRjYmlBZ0lDQWdJSFJvYVhNdWFHVnBaMmgwSUQwZ2MyVjBkR2x1WjNNdWMybDZaVnN4WFR0Y2JpQWdJQ0FnSUhSb2FYTXVjR0Z5Wlc1MExuTjBlV3hsTG5kcFpIUm9JRDBnZEdocGN5NTNhV1IwYUNBcklDZHdlQ2M3WEc0Z0lDQWdJQ0IwYUdsekxuQmhjbVZ1ZEM1emRIbHNaUzVvWldsbmFIUWdQU0IwYUdsekxtaGxhV2RvZENBcklDZHdlQ2M3WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2h6WlhSMGFXNW5jeTV6Ym1Gd1YybDBhRkJoY21WdWRDQW1KaUFoYzJWMGRHbHVaM011WTI5dGNHOXVaVzUwS1NCN1hHNWNiaUFnSUNBZ0lIUm9hWE11ZDJsa2RHZ2dQU0J3WVhKelpVWnNiMkYwS0hkcGJtUnZkeTVuWlhSRGIyMXdkWFJsWkZOMGVXeGxLSFJvYVhNdWNHRnlaVzUwTENCdWRXeHNLUzVuWlhSUWNtOXdaWEowZVZaaGJIVmxLQ2QzYVdSMGFDY3BMbkpsY0d4aFkyVW9KM0I0Snl3bkp5a3BPMXh1SUNBZ0lDQWdkR2hwY3k1b1pXbG5hSFFnUFNCd1lYSnpaVVpzYjJGMEtIZHBibVJ2ZHk1blpYUkRiMjF3ZFhSbFpGTjBlV3hsS0hSb2FYTXVjR0Z5Wlc1MExDQnVkV3hzS1M1blpYUlFjbTl3WlhKMGVWWmhiSFZsS0Nkb1pXbG5hSFFuS1M1eVpYQnNZV05sS0Nkd2VDY3NKeWNwS1R0Y2JseHVJQ0FnSUNBZ2FXWWdLSFJvYVhNdWQybGtkR2c5UFRVd01EQXBJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NTNhV1IwYUNBOUlITmxkSFJwYm1kekxtUmxabUYxYkhSVGFYcGxXekJkTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbkJoY21WdWRDNXpkSGxzWlM1M2FXUjBhQ0E5SUhSb2FYTXVjR0Z5Wlc1MExuZHBaSFJvSUQwZ2RHaHBjeTUzYVdSMGFDQXJJQ2R3ZUNjN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCcFppQW9kR2hwY3k1b1pXbG5hSFE5UFRVd01EQXBJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NW9aV2xuYUhRZ1BTQnpaWFIwYVc1bmN5NWtaV1poZFd4MFUybDZaVnN4WFR0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV3WVhKbGJuUXVjM1I1YkdVdWFHVnBaMmgwSUQwZ2RHaHBjeTV3WVhKbGJuUXVhR1ZwWjJoMElEMGdkR2hwY3k1b1pXbG5hSFFnS3lBbmNIZ25PMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lITmxkSFJwYm1kekxuTnBlbVVnUFNCelpYUjBhVzVuY3k1a1pXWmhkV3gwVTJsNlpUdGNiaUFnSUNBZ0lIUm9hWE11ZDJsa2RHZ2dQU0J6WlhSMGFXNW5jeTV6YVhwbFd6QmRPMXh1SUNBZ0lDQWdkR2hwY3k1b1pXbG5hSFFnUFNCelpYUjBhVzVuY3k1emFYcGxXekZkTzF4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SUdWMlpXNTBYRzRnSUNBZ2FXWWdLSE5sZEhScGJtZHpMbVYyWlc1MEtTQjdYRzRnSUNBZ0lDQjBhR2x6TG1WMlpXNTBJRDBnZEdocGN5NXZiaWduWTJoaGJtZGxKeXdnYzJWMGRHbHVaM011WlhabGJuUXBPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCMGFHbHpMbVYyWlc1MElEMGdabUZzYzJVN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WMGRYSnVJSE5sZEhScGJtZHpPMXh1WEc0Z0lIMWNibHh1SUNCcGJtbDBLQ2tnZTF4dUlDQWdJSFJvYVhNdVluVnBiR1JHY21GdFpTZ3BPMXh1SUNBZ0lIUm9hWE11WW5WcGJHUkpiblJsY21aaFkyVW9LVHRjYmlBZ0lDQjBhR2x6TG5OcGVtVkpiblJsY21aaFkyVW9LVHRjYmlBZ0lDQjBhR2x6TG1GMGRHRmphRXhwYzNSbGJtVnljeWdwTzF4dUlDQWdJSFJvYVhNdVkyOXNiM0pKYm5SbGNtWmhZMlVvS1R0Y2JpQWdJQ0IwYUdsekxtWnBibUZzVkc5MVkyaGxjeWdwTzF4dUlDQjlYRzVjYmlBZ1luVnBiR1JHY21GdFpTZ3BJSHRjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblFnUFNCemRtY3VZM0psWVhSbEtDZHpkbWNuS1R0Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdWMyVjBRWFIwY21saWRYUmxLQ2QzYVdSMGFDY3NkR2hwY3k1M2FXUjBhQ2s3WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG5ObGRFRjBkSEpwWW5WMFpTZ25hR1ZwWjJoMEp5eDBhR2x6TG1obGFXZG9kQ2s3WEc0Z0lDQWdkR2hwY3k1d1lYSmxiblF1WVhCd1pXNWtRMmhwYkdRb2RHaHBjeTVsYkdWdFpXNTBLVHRjYmlBZ2ZWeHVYRzRnSUdKMWFXeGtTVzUwWlhKbVlXTmxLQ2tnZTMxY2JpQWdjMmw2WlVsdWRHVnlabUZqWlNncElIdDlYRzRnSUdOdmJHOXlTVzUwWlhKbVlXTmxLQ2tnZTMxY2JseHVJQ0JoZEhSaFkyaE1hWE4wWlc1bGNuTW9LU0I3WEc1Y2JpQWdJQ0IwYUdsekxtbHVkR1Z5WVdOMGFXOXVWR0Z5WjJWMElEMGdkR2hwY3k1cGJuUmxjbUZqZEdsdmJsUmhjbWRsZENCOGZDQjBhR2x6TG1Wc1pXMWxiblE3WEc1Y2JpQWdJQ0F2THlCVFpYUjFjQ0JwYm5SbGNtRmpkR2x2Ymx4dUlDQWdJR2xtSUNoMGIzVmphQzVsZUdsemRITXBJSHRjYmlBZ0lDQWdJSFJvYVhNdWFXNTBaWEpoWTNScGIyNVVZWEpuWlhRdVlXUmtSWFpsYm5STWFYTjBaVzVsY2lnbmRHOTFZMmh6ZEdGeWRDY3NJR1YyZENBOVBpQjBhR2x6TG5CeVpWUnZkV05vS0dWMmRDa3BPMXh1SUNBZ0lDQWdkR2hwY3k1cGJuUmxjbUZqZEdsdmJsUmhjbWRsZEM1aFpHUkZkbVZ1ZEV4cGMzUmxibVZ5S0NkMGIzVmphRzF2ZG1VbkxDQmxkblFnUFQ0Z2RHaHBjeTV3Y21WVWIzVmphRTF2ZG1Vb1pYWjBLU2s3WEc0Z0lDQWdJQ0IwYUdsekxtbHVkR1Z5WVdOMGFXOXVWR0Z5WjJWMExtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJb0ozUnZkV05vWlc1a0p5d2daWFowSUQwK0lIUm9hWE11Y0hKbFZHOTFZMmhTWld4bFlYTmxLR1YyZENrcE8xeHVJQ0FnSUgxY2JpQWdJQ0IwYUdsekxtSnZkVzVrVUhKbFRXOTJaU0E5SUdWMmRDQTlQaUIwYUdsekxuQnlaVTF2ZG1Vb1pYWjBLVHRjYmlBZ0lDQjBhR2x6TG1KdmRXNWtVSEpsVW1Wc1pXRnpaU0E5SUdWMmRDQTlQaUIwYUdsekxuQnlaVkpsYkdWaGMyVW9aWFowS1R0Y2JpQWdJQ0IwYUdsekxtbHVkR1Z5WVdOMGFXOXVWR0Z5WjJWMExtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJb0oyMXZkWE5sWkc5M2JpY3NJR1YyZENBOVBpQjBhR2x6TG5CeVpVTnNhV05yS0dWMmRDa3BPMXh1SUNCOVhHNWNiaUFnWm1sdVlXeFViM1ZqYUdWektDa2dlMXh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkQzV6ZEhsc1pTNWpkWEp6YjNJZ1BTQW5jRzlwYm5SbGNpYzdYRzRnSUgxY2JseHVJQ0J3Y21WRGJHbGpheWhsS1NCN1hHNGdJQ0FnTHk4Z01UQXdNREFnWjJWMFEyOXRjSFYwWldSVGRIbHNaU0JqWVd4c2N5QjBZV3RsY3lBeE1EQWdiWE11WEc0Z0lDQWdMeThnTGpvdUlHOXVaU0IwWVd0bGN5QmhZbTkxZENBdU1ERnRjMXh1SUNBZ0lHbG1JQ2gwYUdsekxtVnNaVzFsYm5RZ2FXNXpkR0Z1WTJWdlppQklWRTFNUld4bGJXVnVkQ2tnZTF4dUlDQWdJQ0FnZEdocGN5NTNhV1IwYUNBOUlIZHBibVJ2ZHk1blpYUkRiMjF3ZFhSbFpGTjBlV3hsS0hSb2FYTXVaV3hsYldWdWRDd2diblZzYkNrdVoyVjBVSEp2Y0dWeWRIbFdZV3gxWlNnbmQybGtkR2duS1M1eVpYQnNZV05sS0Nkd2VDY3NKeWNwTzF4dUlDQWdJSDFjYmlBZ0lDQXZMeUF4TURBd01DQm5aWFJEYjIxd2RYUmxaRk4wZVd4bElHTmhiR3h6SUhSaGEyVnpJRFF3SUcxekxseHVJQ0FnSUM4dklDNDZMaUJ2Ym1VZ2RHRnJaWE1nWVdKdmRYUWdMakF3TkcxelhHNGdJQ0FnZEdocGN5NXZabVp6WlhRZ1BTQmtiMjB1Wm1sdVpGQnZjMmwwYVc5dUtIUm9hWE11Wld4bGJXVnVkQ2s3WEc0Z0lDQWdkR2hwY3k1dGIzVnpaU0E5SUdSdmJTNXNiMk5oZEdWTmIzVnpaU2hsTEhSb2FYTXViMlptYzJWMEtUdGNiaUFnSUNCMGFHbHpMbU5zYVdOclpXUWdQU0IwY25WbE8xeHVJQ0FnSUhSb2FYTXVZMnhwWTJzb0tUdGNiaUFnSUNCMGFHbHpMbTF2ZG1WRmRtVnVkQ0E5SUdSdlkzVnRaVzUwTG1Ga1pFVjJaVzUwVEdsemRHVnVaWElvSjIxdmRYTmxiVzkyWlNjc0lIUm9hWE11WW05MWJtUlFjbVZOYjNabEtUdGNiaUFnSUNCMGFHbHpMbkpsYkdWaGMyVkZkbVZ1ZENBOUlHUnZZM1Z0Wlc1MExtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJb0oyMXZkWE5sZFhBbkxDQjBhR2x6TG1KdmRXNWtVSEpsVW1Wc1pXRnpaU2s3WEc0Z0lDQWdkR2hwY3k1bGJXbDBLQ2RqYkdsamF5Y3BPMXh1SUNBZ0lHVXVjSEpsZG1WdWRFUmxabUYxYkhRb0tUdGNiaUFnSUNCbExuTjBiM0JRY205d1lXZGhkR2x2YmlncE8xeHVJQ0I5WEc1Y2JpQWdjSEpsVFc5MlpTaGxLU0I3WEc0Z0lDQWdhV1lnS0NGMGFHbHpMbmRoYVhRcElIdGNiaUFnSUNBZ0lIUm9hWE11Ylc5MWMyVWdQU0JrYjIwdWJHOWpZWFJsVFc5MWMyVW9aU3gwYUdsekxtOW1abk5sZENrN1hHNGdJQ0FnSUNCMGFHbHpMbTF2ZG1Vb0tUdGNiaUFnSUNBZ0lIUm9hWE11ZDJGcGRDQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNCelpYUlVhVzFsYjNWMEtDZ3BJRDArSUhzZ2RHaHBjeTUzWVdsMElEMGdabUZzYzJVN0lIMHNNalVwTzF4dUlDQWdJSDFjYmlBZ0lDQmxMbkJ5WlhabGJuUkVaV1poZFd4MEtDazdYRzRnSUNBZ1pTNXpkRzl3VUhKdmNHRm5ZWFJwYjI0b0tUdGNiaUFnZlZ4dVhHNGdJSEJ5WlZKbGJHVmhjMlVvWlNrZ2UxeHVJQ0FnSUhSb2FYTXViVzkxYzJVZ1BTQmtiMjB1Ykc5allYUmxUVzkxYzJVb1pTeDBhR2x6TG05bVpuTmxkQ2s3WEc0Z0lDQWdkR2hwY3k1amJHbGphMlZrSUQwZ1ptRnNjMlU3WEc0Z0lDQWdkR2hwY3k1eVpXeGxZWE5sS0NrN1hHNGdJQ0FnZEdocGN5NWxiV2wwS0NkeVpXeGxZWE5sSnlrN1hHNGdJQ0FnWkc5amRXMWxiblF1Y21WdGIzWmxSWFpsYm5STWFYTjBaVzVsY2lnbmJXOTFjMlZ0YjNabEp5eDBhR2x6TG1KdmRXNWtVSEpsVFc5MlpTazdYRzRnSUNBZ1pHOWpkVzFsYm5RdWNtVnRiM1psUlhabGJuUk1hWE4wWlc1bGNpZ25iVzkxYzJWMWNDY3NkR2hwY3k1aWIzVnVaRkJ5WlZKbGJHVmhjMlVwTzF4dUlDQWdJR1V1Y0hKbGRtVnVkRVJsWm1GMWJIUW9LVHRjYmlBZ0lDQmxMbk4wYjNCUWNtOXdZV2RoZEdsdmJpZ3BPMXh1SUNCOVhHNWNiaUFnWTJ4cFkyc29LU0I3WEc1Y2JpQWdmVnh1WEc0Z0lHMXZkbVVvS1NCN1hHNWNiaUFnZlZ4dVhHNGdJSEpsYkdWaGMyVW9LU0I3WEc1Y2JpQWdmVnh1WEc1Y2JpQWdMeW9nZEc5MVkyZ2dLaTljYmx4dUlDQndjbVZVYjNWamFDaGxLU0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVaV3hsYldWdWRDQnBibk4wWVc1alpXOW1JRWhVVFV4RmJHVnRaVzUwS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbmRwWkhSb0lEMGdkMmx1Wkc5M0xtZGxkRU52YlhCMWRHVmtVM1I1YkdVb2RHaHBjeTVsYkdWdFpXNTBMQ0J1ZFd4c0tTNW5aWFJRY205d1pYSjBlVlpoYkhWbEtDZDNhV1IwYUNjcExuSmxjR3hoWTJVb0ozQjRKeXduSnlrN1hHNGdJQ0FnZlZ4dUlDQWdJSFJvYVhNdWIyWm1jMlYwSUQwZ1pHOXRMbVpwYm1SUWIzTnBkR2x2YmloMGFHbHpMbVZzWlcxbGJuUXBPMXh1SUNBZ0lIUm9hWE11Ylc5MWMyVWdQU0JrYjIwdWJHOWpZWFJsVkc5MVkyZ29aU3gwYUdsekxtOW1abk5sZENrN1hHNGdJQ0FnZEdocGN5NWpiR2xqYTJWa0lEMGdkSEoxWlR0Y2JpQWdJQ0IwYUdsekxuUnZkV05vS0dVcE8xeHVJQ0FnSUhSb2FYTXVaVzFwZENnblkyeHBZMnNuS1R0Y2JpQWdJQ0JsTG5CeVpYWmxiblJFWldaaGRXeDBLQ2s3WEc0Z0lDQWdaUzV6ZEc5d1VISnZjR0ZuWVhScGIyNG9LVHRjYmlBZ2ZWeHVYRzRnSUhCeVpWUnZkV05vVFc5MlpTaGxLU0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVZMnhwWTJ0bFpDa2dlMXh1SUNBZ0lDQWdkR2hwY3k1dGIzVnpaU0E5SUdSdmJTNXNiMk5oZEdWVWIzVmphQ2hsTEhSb2FYTXViMlptYzJWMEtUdGNiaUFnSUNBZ0lIUm9hWE11ZEc5MVkyaE5iM1psS0NrN1hHNGdJQ0FnSUNCbExuQnlaWFpsYm5SRVpXWmhkV3gwS0NrN1hHNGdJQ0FnSUNCbExuTjBiM0JRY205d1lXZGhkR2x2YmlncE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lIQnlaVlJ2ZFdOb1VtVnNaV0Z6WlNobEtTQjdYRzRnSUNBZ2RHaHBjeTV0YjNWelpTQTlJR1J2YlM1c2IyTmhkR1ZVYjNWamFDaGxMQ0IwYUdsekxtOW1abk5sZENrN1hHNGdJQ0FnZEdocGN5NWpiR2xqYTJWa0lEMGdabUZzYzJVN1hHNGdJQ0FnZEdocGN5NTBiM1ZqYUZKbGJHVmhjMlVvS1R0Y2JpQWdJQ0IwYUdsekxtVnRhWFFvSjNKbGJHVmhjMlVuS1R0Y2JpQWdJQ0JsTG5CeVpYWmxiblJFWldaaGRXeDBLQ2s3WEc0Z0lDQWdaUzV6ZEc5d1VISnZjR0ZuWVhScGIyNG9LVHRjYmlBZ2ZWeHVYRzRnSUhSdmRXTm9LQ2tnZTF4dUlDQWdJSFJvYVhNdVkyeHBZMnNvS1R0Y2JpQWdmVnh1WEc0Z0lIUnZkV05vVFc5MlpTZ3BJSHRjYmlBZ0lDQjBhR2x6TG0xdmRtVW9LVHRjYmlBZ2ZWeHVYRzRnSUhSdmRXTm9VbVZzWldGelpTZ3BJSHRjYmlBZ0lDQjBhR2x6TG5KbGJHVmhjMlVvS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBcUlGSmxjMmw2WlNCMGFHVWdhVzUwWlhKbVlXTmxYRzRnSUNvZ1FIQmhjbUZ0SUhkcFpIUm9JSHR1ZFcxaVpYSjlJRTVsZHlCM2FXUjBhQ0JwYmlCd2FYaGxiSE5jYmlBZ0tpQkFjR0Z5WVcwZ2FHVnBaMmgwSUh0dWRXMWlaWEo5SUU1bGR5Qm9aV2xuYUhRZ2FXNGdjR2w0Wld4elhHNGdJQ3BjYmlBZ0tpQkFaWGhoYlhCc1pWeHVJQ0FxSUdKMWRIUnZiaTV5WlhOcGVtVW9NVEF3TERFd01DazdYRzRnSUNvdlhHNGdJSEpsYzJsNlpTaDNhV1IwYUN4b1pXbG5hSFFwSUh0Y2JpQWdJQ0IwYUdsekxuZHBaSFJvSUQwZ2QybGtkR2c3WEc0Z0lDQWdkR2hwY3k1b1pXbG5hSFFnUFNCb1pXbG5hSFE3WEc0Z0lDQWdkR2hwY3k1d1lYSmxiblF1YzNSNWJHVXVkMmxrZEdnZ1BTQjBhR2x6TG5kcFpIUm9LeWR3ZUNjN1hHNGdJQ0FnZEdocGN5NXdZWEpsYm5RdWMzUjViR1V1YUdWcFoyaDBJRDBnZEdocGN5NW9aV2xuYUhRckozQjRKenRjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1YzJWMFFYUjBjbWxpZFhSbEtDZDNhV1IwYUNjc2RHaHBjeTUzYVdSMGFDazdYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbk5sZEVGMGRISnBZblYwWlNnbmFHVnBaMmgwSnl4MGFHbHpMbWhsYVdkb2RDazdYRzRnSUNBZ2RHaHBjeTV6YVhwbFNXNTBaWEptWVdObEtDazdYRzRnSUgxY2JseHVJQ0JsYlhCMGVTZ3BJSHRjYmlBZ0lDQjNhR2xzWlNBb2RHaHBjeTVsYkdWdFpXNTBMbXhoYzNSRGFHbHNaQ2tnZTF4dUlDQWdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExuSmxiVzkyWlVOb2FXeGtLSFJvYVhNdVpXeGxiV1Z1ZEM1c1lYTjBRMmhwYkdRcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBcUlGSmxiVzkyWlNCMGFHVWdhVzUwWlhKbVlXTmxJR1p5YjIwZ2RHaGxJSEJoWjJVZ1lXNWtJR05oYm1ObGJDQnBkSE1nWlhabGJuUWdiR2x6ZEdWdVpYSW9jeWt1WEc0Z0lDcGNiaUFnS2lCQVpYaGhiWEJzWlZ4dUlDQXFJR0oxZEhSdmJpNWtaWE4wY205NUtDazdYRzRnSUNvdlhHNGdJR1JsYzNSeWIza29LU0I3WEc0Z0lDQWdkR2hwY3k1bGJYQjBlU2dwTzF4dUlDQWdJSFJvYVhNdWNHRnlaVzUwTG5KbGJXOTJaVU5vYVd4a0tIUm9hWE11Wld4bGJXVnVkQ2s3WEc0Z0lDQWdkR2hwY3k1eVpXMXZkbVZCYkd4TWFYTjBaVzVsY25Nb0tUdGNiaUFnSUNCcFppQW9kR2hwY3k1cGJuTjBjblZ0Wlc1MEtTQjdYRzRnSUNBZ0lDQmtaV3hsZEdVZ2RHaHBjeTVwYm5OMGNuVnRaVzUwVzNSb2FYTXVhV1JkTzF4dUlDQWdJSDFjYmlBZ0lDQjBhR2x6TG1OMWMzUnZiVVJsYzNSeWIza29LVHRjYmlBZ2ZWeHVYRzRnSUdOMWMzUnZiVVJsYzNSeWIza29LU0I3WEc1Y2JpQWdmVnh1WEc0Z0lHTnZiRzl5YVhwbEtIUjVjR1VzWTI5c2IzSXBJSHRjYmlBZ0lDQjBhR2x6TG1OdmJHOXljMXQwZVhCbFhTQTlJR052Ykc5eU8xeHVJQ0FnSUhSb2FYTXVZMjlzYjNKSmJuUmxjbVpoWTJVb0tUdGNiaUFnZlZ4dVhHNTlYRzVjYmx4dVhHNHZMeUJYUlVKUVFVTkxJRVpQVDFSRlVpQXZMMXh1THk4Z0xpOStMMnB6YUdsdWRDMXNiMkZrWlhJaExpOXNhV0l2WTI5eVpTOXBiblJsY21aaFkyVXVhbk1pTENJbmRYTmxJSE4wY21samRDYzdYRzVjYm1WNGNHOXlkSE11Wm1sdVpGQnZjMmwwYVc5dUlEMGdLR1ZzS1NBOVBpQjdYRzRnSUd4bGRDQjJhV1YzY0c5eWRFOW1abk5sZENBOUlHVnNMbWRsZEVKdmRXNWthVzVuUTJ4cFpXNTBVbVZqZENncE8xeHVJQ0JzWlhRZ2RHOXdJRDBnZG1sbGQzQnZjblJQWm1aelpYUXVkRzl3SUNzZ2QybHVaRzkzTG5OamNtOXNiRms3WEc0Z0lHeGxkQ0JzWldaMElEMGdkbWxsZDNCdmNuUlBabVp6WlhRdWJHVm1kQ0FySUhkcGJtUnZkeTV6WTNKdmJHeFlPMXh1SUNCeVpYUjFjbTRnZTNSdmNDeHNaV1owZlR0Y2JuMDdYRzVjYm1WNGNHOXlkSE11Y0dGeWMyVkZiR1Z0Wlc1MElEMGdLSEJoY21WdWRDa2dQVDRnZTF4dUlDQnBaaUFvZEhsd1pXOW1JSEJoY21WdWRDQTlQVDBnSjNOMGNtbHVaeWNwSUh0Y2JpQWdJQ0J3WVhKbGJuUWdQU0JrYjJOMWJXVnVkQzVuWlhSRmJHVnRaVzUwUW5sSlpDaHdZWEpsYm5RdWNtVndiR0ZqWlNnbkl5Y3NKeWNwS1R0Y2JpQWdmVnh1WEc0Z0lHbG1JQ2h3WVhKbGJuUWdhVzV6ZEdGdVkyVnZaaUJJVkUxTVJXeGxiV1Z1ZENCOGZDQndZWEpsYm5RZ2FXNXpkR0Z1WTJWdlppQlRWa2RGYkdWdFpXNTBLWHRjYmlBZ0lDQnlaWFIxY200Z2NHRnlaVzUwTzF4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUhKbGRIVnliaUFuVG04Z2RtRnNhV1FnY0dGeVpXNTBJR0Z5WjNWdFpXNTBKenRjYmlBZ2ZWeHVmVHRjYmx4dVpYaHdiM0owY3k1c2IyTmhkR1ZOYjNWelpTQTlJQ2hsTEc5bVpuTmxkQ2tnUFQ0Z2UxeHVJQ0J5WlhSMWNtNGdlMXh1SUNBZ0lIZzZJR1V1Y0dGblpWZ2dMU0J2Wm1aelpYUXViR1ZtZEN4Y2JpQWdJQ0I1T2lCbExuQmhaMlZaSUMwZ2IyWm1jMlYwTG5SdmNGeHVJQ0I5TzF4dWZUdGNibHh1Wlhod2IzSjBjeTVzYjJOaGRHVlViM1ZqYUNBOUlDaGxMRzltWm5ObGRDa2dQVDRnZTF4dUlDQnlaWFIxY200Z2UxeHVJQ0FnSUhnNklHVXVkR0Z5WjJWMFZHOTFZMmhsY3k1c1pXNW5kR2dnUHlCbExuUmhjbWRsZEZSdmRXTm9aWE5iTUYwdWNHRm5aVmdnTFNCdlptWnpaWFF1YkdWbWRDQTZJR1poYkhObExGeHVJQ0FnSUhrNklHVXVkR0Z5WjJWMFZHOTFZMmhsY3k1c1pXNW5kR2dnUHlCbExuUmhjbWRsZEZSdmRXTm9aWE5iTUYwdWNHRm5aVmtnTFNCdlptWnpaWFF1ZEc5d0lEb2dabUZzYzJWY2JpQWdmVHRjYm4wN1hHNWNibVY0Y0c5eWRITXVVMjFoY25SRFlXNTJZWE1nUFNCbWRXNWpkR2x2Ymlod1lYSmxiblFwSUh0Y2JseHVJQ0IwYUdsekxtVnNaVzFsYm5RZ1BTQmtiMk4xYldWdWRDNWpjbVZoZEdWRmJHVnRaVzUwS0NkallXNTJZWE1uS1R0Y2JpQWdkR2hwY3k1amIyNTBaWGgwSUQwZ2RHaHBjeTVsYkdWdFpXNTBMbWRsZEVOdmJuUmxlSFFvSnpKa0p5azdYRzRnSUhCaGNtVnVkQzVoY0hCbGJtUkRhR2xzWkNoMGFHbHpMbVZzWlcxbGJuUXBPMXh1WEc0Z0lIUm9hWE11Y21WemFYcGxJRDBnS0hjc2FDa2dQVDRnZTF4dUlDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1M2FXUjBhQ0E5SUhjcU1qdGNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUXVhR1ZwWjJoMElEMGdhQ295TzF4dUlDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1emRIbHNaUzUzYVdSMGFDQTlJSGNySjNCNEp6dGNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUXVjM1I1YkdVdWFHVnBaMmgwSUQwZ2FDc25jSGduTzF4dUlDQjlPMXh1WEc1OU8xeHVYRzVjYmx4dUx5OGdWMFZDVUVGRFN5QkdUMDlVUlZJZ0x5OWNiaTh2SUM0dmZpOXFjMmhwYm5RdGJHOWhaR1Z5SVM0dmJHbGlMM1YwYVd3dlpHOXRMbXB6SWl3aUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1bGVIQnZjblJ6TG1selQySnFaV04wSUQwZ0tHOWlhaWtnUFQ0Z2UxeHVJQ0JwWmlBb2RIbHdaVzltSUc5aWFpQTlQVDBnSjI5aWFtVmpkQ2NnSmlZZ0lVRnljbUY1TG1selFYSnlZWGtvYjJKcUtTQW1KaUJ2WW1vZ0lUMDlJRzUxYkd3Z0ppWWdiMkpxSUdsdWMzUmhibU5sYjJZZ1UxWkhSV3hsYldWdWRDQTlQVDBnWm1Gc2MyVWdKaVlnYjJKcUlHbHVjM1JoYm1ObGIyWWdTRlJOVEVWc1pXMWxiblFnUFQwOUlHWmhiSE5sSUNrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwY25WbE8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lISmxkSFZ5YmlCbVlXeHpaVHRjYmlBZ2ZWeHVmVHRjYmx4dVhHNWNiaTh2SUZkRlFsQkJRMHNnUms5UFZFVlNJQzh2WEc0dkx5QXVMMzR2YW5Ob2FXNTBMV3h2WVdSbGNpRXVMMnhwWWk5MWRHbHNMM1YwYVd3dWFuTWlMQ0luZFhObElITjBjbWxqZENjN1hHNWNibVY0Y0c5eWRITXVaWGhwYzNSeklEMGdLQ2R2Ym5SdmRXTm9jM1JoY25RbklHbHVJR1J2WTNWdFpXNTBMbVJ2WTNWdFpXNTBSV3hsYldWdWRDazdYRzVjYmx4dVhHNHZMeUJYUlVKUVFVTkxJRVpQVDFSRlVpQXZMMXh1THk4Z0xpOStMMnB6YUdsdWRDMXNiMkZrWlhJaExpOXNhV0l2ZFhScGJDOTBiM1ZqYUM1cWN5SXNJaTh2SUVOdmNIbHlhV2RvZENCS2IzbGxiblFzSUVsdVl5NGdZVzVrSUc5MGFHVnlJRTV2WkdVZ1kyOXVkSEpwWW5WMGIzSnpMbHh1THk5Y2JpOHZJRkJsY20xcGMzTnBiMjRnYVhNZ2FHVnlaV0o1SUdkeVlXNTBaV1FzSUdaeVpXVWdiMllnWTJoaGNtZGxMQ0IwYnlCaGJua2djR1Z5YzI5dUlHOWlkR0ZwYm1sdVp5QmhYRzR2THlCamIzQjVJRzltSUhSb2FYTWdjMjltZEhkaGNtVWdZVzVrSUdGemMyOWphV0YwWldRZ1pHOWpkVzFsYm5SaGRHbHZiaUJtYVd4bGN5QW9kR2hsWEc0dkx5QmNJbE52Wm5SM1lYSmxYQ0lwTENCMGJ5QmtaV0ZzSUdsdUlIUm9aU0JUYjJaMGQyRnlaU0IzYVhSb2IzVjBJSEpsYzNSeWFXTjBhVzl1TENCcGJtTnNkV1JwYm1kY2JpOHZJSGRwZEdodmRYUWdiR2x0YVhSaGRHbHZiaUIwYUdVZ2NtbG5hSFJ6SUhSdklIVnpaU3dnWTI5d2VTd2diVzlrYVdaNUxDQnRaWEpuWlN3Z2NIVmliR2x6YUN4Y2JpOHZJR1JwYzNSeWFXSjFkR1VzSUhOMVlteHBZMlZ1YzJVc0lHRnVaQzl2Y2lCelpXeHNJR052Y0dsbGN5QnZaaUIwYUdVZ1UyOW1kSGRoY21Vc0lHRnVaQ0IwYnlCd1pYSnRhWFJjYmk4dklIQmxjbk52Ym5NZ2RHOGdkMmh2YlNCMGFHVWdVMjltZEhkaGNtVWdhWE1nWm5WeWJtbHphR1ZrSUhSdklHUnZJSE52TENCemRXSnFaV04wSUhSdklIUm9aVnh1THk4Z1ptOXNiRzkzYVc1bklHTnZibVJwZEdsdmJuTTZYRzR2TDF4dUx5OGdWR2hsSUdGaWIzWmxJR052Y0hseWFXZG9kQ0J1YjNScFkyVWdZVzVrSUhSb2FYTWdjR1Z5YldsemMybHZiaUJ1YjNScFkyVWdjMmhoYkd3Z1ltVWdhVzVqYkhWa1pXUmNiaTh2SUdsdUlHRnNiQ0JqYjNCcFpYTWdiM0lnYzNWaWMzUmhiblJwWVd3Z2NHOXlkR2x2Ym5NZ2IyWWdkR2hsSUZOdlpuUjNZWEpsTGx4dUx5OWNiaTh2SUZSSVJTQlRUMFpVVjBGU1JTQkpVeUJRVWs5V1NVUkZSQ0JjSWtGVElFbFRYQ0lzSUZkSlZFaFBWVlFnVjBGU1VrRk9WRmtnVDBZZ1FVNVpJRXRKVGtRc0lFVllVRkpGVTFOY2JpOHZJRTlTSUVsTlVFeEpSVVFzSUVsT1EweFZSRWxPUnlCQ1ZWUWdUazlVSUV4SlRVbFVSVVFnVkU4Z1ZFaEZJRmRCVWxKQlRsUkpSVk1nVDBaY2JpOHZJRTFGVWtOSVFVNVVRVUpKVEVsVVdTd2dSa2xVVGtWVFV5QkdUMUlnUVNCUVFWSlVTVU5WVEVGU0lGQlZVbEJQVTBVZ1FVNUVJRTVQVGtsT1JsSkpUa2RGVFVWT1ZDNGdTVTVjYmk4dklFNVBJRVZXUlU1VUlGTklRVXhNSUZSSVJTQkJWVlJJVDFKVElFOVNJRU5QVUZsU1NVZElWQ0JJVDB4RVJWSlRJRUpGSUV4SlFVSk1SU0JHVDFJZ1FVNVpJRU5NUVVsTkxGeHVMeThnUkVGTlFVZEZVeUJQVWlCUFZFaEZVaUJNU1VGQ1NVeEpWRmtzSUZkSVJWUklSVklnU1U0Z1FVNGdRVU5VU1U5T0lFOUdJRU5QVGxSU1FVTlVMQ0JVVDFKVUlFOVNYRzR2THlCUFZFaEZVbGRKVTBVc0lFRlNTVk5KVGtjZ1JsSlBUU3dnVDFWVUlFOUdJRTlTSUVsT0lFTlBUazVGUTFSSlQwNGdWMGxVU0NCVVNFVWdVMDlHVkZkQlVrVWdUMUlnVkVoRlhHNHZMeUJWVTBVZ1QxSWdUMVJJUlZJZ1JFVkJURWxPUjFNZ1NVNGdWRWhGSUZOUFJsUlhRVkpGTGx4dVhHNW1kVzVqZEdsdmJpQkZkbVZ1ZEVWdGFYUjBaWElvS1NCN1hHNGdJSFJvYVhNdVgyVjJaVzUwY3lBOUlIUm9hWE11WDJWMlpXNTBjeUI4ZkNCN2ZUdGNiaUFnZEdocGN5NWZiV0Y0VEdsemRHVnVaWEp6SUQwZ2RHaHBjeTVmYldGNFRHbHpkR1Z1WlhKeklIeDhJSFZ1WkdWbWFXNWxaRHRjYm4xY2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1JYWmxiblJGYldsMGRHVnlPMXh1WEc0dkx5QkNZV05yZDJGeVpITXRZMjl0Y0dGMElIZHBkR2dnYm05a1pTQXdMakV3TG5oY2JrVjJaVzUwUlcxcGRIUmxjaTVGZG1WdWRFVnRhWFIwWlhJZ1BTQkZkbVZ1ZEVWdGFYUjBaWEk3WEc1Y2JrVjJaVzUwUlcxcGRIUmxjaTV3Y205MGIzUjVjR1V1WDJWMlpXNTBjeUE5SUhWdVpHVm1hVzVsWkR0Y2JrVjJaVzUwUlcxcGRIUmxjaTV3Y205MGIzUjVjR1V1WDIxaGVFeHBjM1JsYm1WeWN5QTlJSFZ1WkdWbWFXNWxaRHRjYmx4dUx5OGdRbmtnWkdWbVlYVnNkQ0JGZG1WdWRFVnRhWFIwWlhKeklIZHBiR3dnY0hKcGJuUWdZU0IzWVhKdWFXNW5JR2xtSUcxdmNtVWdkR2hoYmlBeE1DQnNhWE4wWlc1bGNuTWdZWEpsWEc0dkx5QmhaR1JsWkNCMGJ5QnBkQzRnVkdocGN5QnBjeUJoSUhWelpXWjFiQ0JrWldaaGRXeDBJSGRvYVdOb0lHaGxiSEJ6SUdacGJtUnBibWNnYldWdGIzSjVJR3hsWVd0ekxseHVSWFpsYm5SRmJXbDBkR1Z5TG1SbFptRjFiSFJOWVhoTWFYTjBaVzVsY25NZ1BTQXhNRHRjYmx4dUx5OGdUMkoyYVc5MWMyeDVJRzV2ZENCaGJHd2dSVzFwZEhSbGNuTWdjMmh2ZFd4a0lHSmxJR3hwYldsMFpXUWdkRzhnTVRBdUlGUm9hWE1nWm5WdVkzUnBiMjRnWVd4c2IzZHpYRzR2THlCMGFHRjBJSFJ2SUdKbElHbHVZM0psWVhObFpDNGdVMlYwSUhSdklIcGxjbThnWm05eUlIVnViR2x0YVhSbFpDNWNia1YyWlc1MFJXMXBkSFJsY2k1d2NtOTBiM1I1Y0dVdWMyVjBUV0Y0VEdsemRHVnVaWEp6SUQwZ1puVnVZM1JwYjI0b2Jpa2dlMXh1SUNCcFppQW9JV2x6VG5WdFltVnlLRzRwSUh4OElHNGdQQ0F3SUh4OElHbHpUbUZPS0c0cEtWeHVJQ0FnSUhSb2NtOTNJRlI1Y0dWRmNuSnZjaWduYmlCdGRYTjBJR0psSUdFZ2NHOXphWFJwZG1VZ2JuVnRZbVZ5SnlrN1hHNGdJSFJvYVhNdVgyMWhlRXhwYzNSbGJtVnljeUE5SUc0N1hHNGdJSEpsZEhWeWJpQjBhR2x6TzF4dWZUdGNibHh1UlhabGJuUkZiV2wwZEdWeUxuQnliM1J2ZEhsd1pTNWxiV2wwSUQwZ1puVnVZM1JwYjI0b2RIbHdaU2tnZTF4dUlDQjJZWElnWlhJc0lHaGhibVJzWlhJc0lHeGxiaXdnWVhKbmN5d2dhU3dnYkdsemRHVnVaWEp6TzF4dVhHNGdJR2xtSUNnaGRHaHBjeTVmWlhabGJuUnpLVnh1SUNBZ0lIUm9hWE11WDJWMlpXNTBjeUE5SUh0OU8xeHVYRzRnSUM4dklFbG1JSFJvWlhKbElHbHpJRzV2SUNkbGNuSnZjaWNnWlhabGJuUWdiR2x6ZEdWdVpYSWdkR2hsYmlCMGFISnZkeTVjYmlBZ2FXWWdLSFI1Y0dVZ1BUMDlJQ2RsY25KdmNpY3BJSHRjYmlBZ0lDQnBaaUFvSVhSb2FYTXVYMlYyWlc1MGN5NWxjbkp2Y2lCOGZGeHVJQ0FnSUNBZ0lDQW9hWE5QWW1wbFkzUW9kR2hwY3k1ZlpYWmxiblJ6TG1WeWNtOXlLU0FtSmlBaGRHaHBjeTVmWlhabGJuUnpMbVZ5Y205eUxteGxibWQwYUNrcElIdGNiaUFnSUNBZ0lHVnlJRDBnWVhKbmRXMWxiblJ6V3pGZE8xeHVJQ0FnSUNBZ2FXWWdLR1Z5SUdsdWMzUmhibU5sYjJZZ1JYSnliM0lwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHliM2NnWlhJN0lDOHZJRlZ1YUdGdVpHeGxaQ0FuWlhKeWIzSW5JR1YyWlc1MFhHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBdkx5QkJkQ0JzWldGemRDQm5hWFpsSUhOdmJXVWdhMmx1WkNCdlppQmpiMjUwWlhoMElIUnZJSFJvWlNCMWMyVnlYRzRnSUNBZ0lDQWdJSFpoY2lCbGNuSWdQU0J1WlhjZ1JYSnliM0lvSjFWdVkyRjFaMmgwTENCMWJuTndaV05wWm1sbFpDQmNJbVZ5Y205eVhDSWdaWFpsYm5RdUlDZ25JQ3NnWlhJZ0t5QW5LU2NwTzF4dUlDQWdJQ0FnSUNCbGNuSXVZMjl1ZEdWNGRDQTlJR1Z5TzF4dUlDQWdJQ0FnSUNCMGFISnZkeUJsY25JN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2FHRnVaR3hsY2lBOUlIUm9hWE11WDJWMlpXNTBjMXQwZVhCbFhUdGNibHh1SUNCcFppQW9hWE5WYm1SbFptbHVaV1FvYUdGdVpHeGxjaWtwWEc0Z0lDQWdjbVYwZFhKdUlHWmhiSE5sTzF4dVhHNGdJR2xtSUNocGMwWjFibU4wYVc5dUtHaGhibVJzWlhJcEtTQjdYRzRnSUNBZ2MzZHBkR05vSUNoaGNtZDFiV1Z1ZEhNdWJHVnVaM1JvS1NCN1hHNGdJQ0FnSUNBdkx5Qm1ZWE4wSUdOaGMyVnpYRzRnSUNBZ0lDQmpZWE5sSURFNlhHNGdJQ0FnSUNBZ0lHaGhibVJzWlhJdVkyRnNiQ2gwYUdsektUdGNiaUFnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNCallYTmxJREk2WEc0Z0lDQWdJQ0FnSUdoaGJtUnNaWEl1WTJGc2JDaDBhR2x6TENCaGNtZDFiV1Z1ZEhOYk1WMHBPMXh1SUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lHTmhjMlVnTXpwY2JpQWdJQ0FnSUNBZ2FHRnVaR3hsY2k1allXeHNLSFJvYVhNc0lHRnlaM1Z0Wlc1MGMxc3hYU3dnWVhKbmRXMWxiblJ6V3pKZEtUdGNiaUFnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNBdkx5QnpiRzkzWlhKY2JpQWdJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0FnSUdGeVozTWdQU0JCY25KaGVTNXdjbTkwYjNSNWNHVXVjMnhwWTJVdVkyRnNiQ2hoY21kMWJXVnVkSE1zSURFcE8xeHVJQ0FnSUNBZ0lDQm9ZVzVrYkdWeUxtRndjR3g1S0hSb2FYTXNJR0Z5WjNNcE8xeHVJQ0FnSUgxY2JpQWdmU0JsYkhObElHbG1JQ2hwYzA5aWFtVmpkQ2hvWVc1a2JHVnlLU2tnZTF4dUlDQWdJR0Z5WjNNZ1BTQkJjbkpoZVM1d2NtOTBiM1I1Y0dVdWMyeHBZMlV1WTJGc2JDaGhjbWQxYldWdWRITXNJREVwTzF4dUlDQWdJR3hwYzNSbGJtVnljeUE5SUdoaGJtUnNaWEl1YzJ4cFkyVW9LVHRjYmlBZ0lDQnNaVzRnUFNCc2FYTjBaVzVsY25NdWJHVnVaM1JvTzF4dUlDQWdJR1p2Y2lBb2FTQTlJREE3SUdrZ1BDQnNaVzQ3SUdrckt5bGNiaUFnSUNBZ0lHeHBjM1JsYm1WeWMxdHBYUzVoY0hCc2VTaDBhR2x6TENCaGNtZHpLVHRjYmlBZ2ZWeHVYRzRnSUhKbGRIVnliaUIwY25WbE8xeHVmVHRjYmx4dVJYWmxiblJGYldsMGRHVnlMbkJ5YjNSdmRIbHdaUzVoWkdSTWFYTjBaVzVsY2lBOUlHWjFibU4wYVc5dUtIUjVjR1VzSUd4cGMzUmxibVZ5S1NCN1hHNGdJSFpoY2lCdE8xeHVYRzRnSUdsbUlDZ2hhWE5HZFc1amRHbHZiaWhzYVhOMFpXNWxjaWtwWEc0Z0lDQWdkR2h5YjNjZ1ZIbHdaVVZ5Y205eUtDZHNhWE4wWlc1bGNpQnRkWE4wSUdKbElHRWdablZ1WTNScGIyNG5LVHRjYmx4dUlDQnBaaUFvSVhSb2FYTXVYMlYyWlc1MGN5bGNiaUFnSUNCMGFHbHpMbDlsZG1WdWRITWdQU0I3ZlR0Y2JseHVJQ0F2THlCVWJ5QmhkbTlwWkNCeVpXTjFjbk5wYjI0Z2FXNGdkR2hsSUdOaGMyVWdkR2hoZENCMGVYQmxJRDA5UFNCY0ltNWxkMHhwYzNSbGJtVnlYQ0loSUVKbFptOXlaVnh1SUNBdkx5QmhaR1JwYm1jZ2FYUWdkRzhnZEdobElHeHBjM1JsYm1WeWN5d2dabWx5YzNRZ1pXMXBkQ0JjSW01bGQweHBjM1JsYm1WeVhDSXVYRzRnSUdsbUlDaDBhR2x6TGw5bGRtVnVkSE11Ym1WM1RHbHpkR1Z1WlhJcFhHNGdJQ0FnZEdocGN5NWxiV2wwS0NkdVpYZE1hWE4wWlc1bGNpY3NJSFI1Y0dVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdselJuVnVZM1JwYjI0b2JHbHpkR1Z1WlhJdWJHbHpkR1Z1WlhJcElEOWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2JHbHpkR1Z1WlhJdWJHbHpkR1Z1WlhJZ09pQnNhWE4wWlc1bGNpazdYRzVjYmlBZ2FXWWdLQ0YwYUdsekxsOWxkbVZ1ZEhOYmRIbHdaVjBwWEc0Z0lDQWdMeThnVDNCMGFXMXBlbVVnZEdobElHTmhjMlVnYjJZZ2IyNWxJR3hwYzNSbGJtVnlMaUJFYjI0bmRDQnVaV1ZrSUhSb1pTQmxlSFJ5WVNCaGNuSmhlU0J2WW1wbFkzUXVYRzRnSUNBZ2RHaHBjeTVmWlhabGJuUnpXM1I1Y0dWZElEMGdiR2x6ZEdWdVpYSTdYRzRnSUdWc2MyVWdhV1lnS0dselQySnFaV04wS0hSb2FYTXVYMlYyWlc1MGMxdDBlWEJsWFNrcFhHNGdJQ0FnTHk4Z1NXWWdkMlVuZG1VZ1lXeHlaV0ZrZVNCbmIzUWdZVzRnWVhKeVlYa3NJR3AxYzNRZ1lYQndaVzVrTGx4dUlDQWdJSFJvYVhNdVgyVjJaVzUwYzF0MGVYQmxYUzV3ZFhOb0tHeHBjM1JsYm1WeUtUdGNiaUFnWld4elpWeHVJQ0FnSUM4dklFRmtaR2x1WnlCMGFHVWdjMlZqYjI1a0lHVnNaVzFsYm5Rc0lHNWxaV1FnZEc4Z1kyaGhibWRsSUhSdklHRnljbUY1TGx4dUlDQWdJSFJvYVhNdVgyVjJaVzUwYzF0MGVYQmxYU0E5SUZ0MGFHbHpMbDlsZG1WdWRITmJkSGx3WlYwc0lHeHBjM1JsYm1WeVhUdGNibHh1SUNBdkx5QkRhR1ZqYXlCbWIzSWdiR2x6ZEdWdVpYSWdiR1ZoYTF4dUlDQnBaaUFvYVhOUFltcGxZM1FvZEdocGN5NWZaWFpsYm5SelczUjVjR1ZkS1NBbUppQWhkR2hwY3k1ZlpYWmxiblJ6VzNSNWNHVmRMbmRoY201bFpDa2dlMXh1SUNBZ0lHbG1JQ2doYVhOVmJtUmxabWx1WldRb2RHaHBjeTVmYldGNFRHbHpkR1Z1WlhKektTa2dlMXh1SUNBZ0lDQWdiU0E5SUhSb2FYTXVYMjFoZUV4cGMzUmxibVZ5Y3p0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdiU0E5SUVWMlpXNTBSVzFwZEhSbGNpNWtaV1poZFd4MFRXRjRUR2x6ZEdWdVpYSnpPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2h0SUNZbUlHMGdQaUF3SUNZbUlIUm9hWE11WDJWMlpXNTBjMXQwZVhCbFhTNXNaVzVuZEdnZ1BpQnRLU0I3WEc0Z0lDQWdJQ0IwYUdsekxsOWxkbVZ1ZEhOYmRIbHdaVjB1ZDJGeWJtVmtJRDBnZEhKMVpUdGNiaUFnSUNBZ0lHTnZibk52YkdVdVpYSnliM0lvSnlodWIyUmxLU0IzWVhKdWFXNW5PaUJ3YjNOemFXSnNaU0JGZG1WdWRFVnRhWFIwWlhJZ2JXVnRiM0o1SUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FuYkdWaGF5QmtaWFJsWTNSbFpDNGdKV1FnYkdsemRHVnVaWEp6SUdGa1pHVmtMaUFuSUN0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKMVZ6WlNCbGJXbDBkR1Z5TG5ObGRFMWhlRXhwYzNSbGJtVnljeWdwSUhSdklHbHVZM0psWVhObElHeHBiV2wwTGljc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdVgyVjJaVzUwYzF0MGVYQmxYUzVzWlc1bmRHZ3BPMXh1SUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJqYjI1emIyeGxMblJ5WVdObElEMDlQU0FuWm5WdVkzUnBiMjRuS1NCN1hHNGdJQ0FnSUNBZ0lDOHZJRzV2ZENCemRYQndiM0owWldRZ2FXNGdTVVVnTVRCY2JpQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1MGNtRmpaU2dwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhKbGRIVnliaUIwYUdsek8xeHVmVHRjYmx4dVJYWmxiblJGYldsMGRHVnlMbkJ5YjNSdmRIbHdaUzV2YmlBOUlFVjJaVzUwUlcxcGRIUmxjaTV3Y205MGIzUjVjR1V1WVdSa1RHbHpkR1Z1WlhJN1hHNWNia1YyWlc1MFJXMXBkSFJsY2k1d2NtOTBiM1I1Y0dVdWIyNWpaU0E5SUdaMWJtTjBhVzl1S0hSNWNHVXNJR3hwYzNSbGJtVnlLU0I3WEc0Z0lHbG1JQ2doYVhOR2RXNWpkR2x2Ymloc2FYTjBaVzVsY2lrcFhHNGdJQ0FnZEdoeWIzY2dWSGx3WlVWeWNtOXlLQ2RzYVhOMFpXNWxjaUJ0ZFhOMElHSmxJR0VnWm5WdVkzUnBiMjRuS1R0Y2JseHVJQ0IyWVhJZ1ptbHlaV1FnUFNCbVlXeHpaVHRjYmx4dUlDQm1kVzVqZEdsdmJpQm5LQ2tnZTF4dUlDQWdJSFJvYVhNdWNtVnRiM1psVEdsemRHVnVaWElvZEhsd1pTd2daeWs3WEc1Y2JpQWdJQ0JwWmlBb0lXWnBjbVZrS1NCN1hHNGdJQ0FnSUNCbWFYSmxaQ0E5SUhSeWRXVTdYRzRnSUNBZ0lDQnNhWE4wWlc1bGNpNWhjSEJzZVNoMGFHbHpMQ0JoY21kMWJXVnVkSE1wTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUdjdWJHbHpkR1Z1WlhJZ1BTQnNhWE4wWlc1bGNqdGNiaUFnZEdocGN5NXZiaWgwZVhCbExDQm5LVHRjYmx4dUlDQnlaWFIxY200Z2RHaHBjenRjYm4wN1hHNWNiaTh2SUdWdGFYUnpJR0VnSjNKbGJXOTJaVXhwYzNSbGJtVnlKeUJsZG1WdWRDQnBabVlnZEdobElHeHBjM1JsYm1WeUlIZGhjeUJ5WlcxdmRtVmtYRzVGZG1WdWRFVnRhWFIwWlhJdWNISnZkRzkwZVhCbExuSmxiVzkyWlV4cGMzUmxibVZ5SUQwZ1puVnVZM1JwYjI0b2RIbHdaU3dnYkdsemRHVnVaWElwSUh0Y2JpQWdkbUZ5SUd4cGMzUXNJSEJ2YzJsMGFXOXVMQ0JzWlc1bmRHZ3NJR2s3WEc1Y2JpQWdhV1lnS0NGcGMwWjFibU4wYVc5dUtHeHBjM1JsYm1WeUtTbGNiaUFnSUNCMGFISnZkeUJVZVhCbFJYSnliM0lvSjJ4cGMzUmxibVZ5SUcxMWMzUWdZbVVnWVNCbWRXNWpkR2x2YmljcE8xeHVYRzRnSUdsbUlDZ2hkR2hwY3k1ZlpYWmxiblJ6SUh4OElDRjBhR2x6TGw5bGRtVnVkSE5iZEhsd1pWMHBYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTTdYRzVjYmlBZ2JHbHpkQ0E5SUhSb2FYTXVYMlYyWlc1MGMxdDBlWEJsWFR0Y2JpQWdiR1Z1WjNSb0lEMGdiR2x6ZEM1c1pXNW5kR2c3WEc0Z0lIQnZjMmwwYVc5dUlEMGdMVEU3WEc1Y2JpQWdhV1lnS0d4cGMzUWdQVDA5SUd4cGMzUmxibVZ5SUh4OFhHNGdJQ0FnSUNBb2FYTkdkVzVqZEdsdmJpaHNhWE4wTG14cGMzUmxibVZ5S1NBbUppQnNhWE4wTG14cGMzUmxibVZ5SUQwOVBTQnNhWE4wWlc1bGNpa3BJSHRjYmlBZ0lDQmtaV3hsZEdVZ2RHaHBjeTVmWlhabGJuUnpXM1I1Y0dWZE8xeHVJQ0FnSUdsbUlDaDBhR2x6TGw5bGRtVnVkSE11Y21WdGIzWmxUR2x6ZEdWdVpYSXBYRzRnSUNBZ0lDQjBhR2x6TG1WdGFYUW9KM0psYlc5MlpVeHBjM1JsYm1WeUp5d2dkSGx3WlN3Z2JHbHpkR1Z1WlhJcE8xeHVYRzRnSUgwZ1pXeHpaU0JwWmlBb2FYTlBZbXBsWTNRb2JHbHpkQ2twSUh0Y2JpQWdJQ0JtYjNJZ0tHa2dQU0JzWlc1bmRHZzdJR2t0TFNBK0lEQTdLU0I3WEc0Z0lDQWdJQ0JwWmlBb2JHbHpkRnRwWFNBOVBUMGdiR2x6ZEdWdVpYSWdmSHhjYmlBZ0lDQWdJQ0FnSUNBb2JHbHpkRnRwWFM1c2FYTjBaVzVsY2lBbUppQnNhWE4wVzJsZExteHBjM1JsYm1WeUlEMDlQU0JzYVhOMFpXNWxjaWtwSUh0Y2JpQWdJQ0FnSUNBZ2NHOXphWFJwYjI0Z1BTQnBPMXh1SUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9jRzl6YVhScGIyNGdQQ0F3S1Z4dUlDQWdJQ0FnY21WMGRYSnVJSFJvYVhNN1hHNWNiaUFnSUNCcFppQW9iR2x6ZEM1c1pXNW5kR2dnUFQwOUlERXBJSHRjYmlBZ0lDQWdJR3hwYzNRdWJHVnVaM1JvSUQwZ01EdGNiaUFnSUNBZ0lHUmxiR1YwWlNCMGFHbHpMbDlsZG1WdWRITmJkSGx3WlYwN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR3hwYzNRdWMzQnNhV05sS0hCdmMybDBhVzl1TENBeEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9kR2hwY3k1ZlpYWmxiblJ6TG5KbGJXOTJaVXhwYzNSbGJtVnlLVnh1SUNBZ0lDQWdkR2hwY3k1bGJXbDBLQ2R5WlcxdmRtVk1hWE4wWlc1bGNpY3NJSFI1Y0dVc0lHeHBjM1JsYm1WeUtUdGNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQjBhR2x6TzF4dWZUdGNibHh1UlhabGJuUkZiV2wwZEdWeUxuQnliM1J2ZEhsd1pTNXlaVzF2ZG1WQmJHeE1hWE4wWlc1bGNuTWdQU0JtZFc1amRHbHZiaWgwZVhCbEtTQjdYRzRnSUhaaGNpQnJaWGtzSUd4cGMzUmxibVZ5Y3p0Y2JseHVJQ0JwWmlBb0lYUm9hWE11WDJWMlpXNTBjeWxjYmlBZ0lDQnlaWFIxY200Z2RHaHBjenRjYmx4dUlDQXZMeUJ1YjNRZ2JHbHpkR1Z1YVc1bklHWnZjaUJ5WlcxdmRtVk1hWE4wWlc1bGNpd2dibThnYm1WbFpDQjBieUJsYldsMFhHNGdJR2xtSUNnaGRHaHBjeTVmWlhabGJuUnpMbkpsYlc5MlpVeHBjM1JsYm1WeUtTQjdYRzRnSUNBZ2FXWWdLR0Z5WjNWdFpXNTBjeTVzWlc1bmRHZ2dQVDA5SURBcFhHNGdJQ0FnSUNCMGFHbHpMbDlsZG1WdWRITWdQU0I3ZlR0Y2JpQWdJQ0JsYkhObElHbG1JQ2gwYUdsekxsOWxkbVZ1ZEhOYmRIbHdaVjBwWEc0Z0lDQWdJQ0JrWld4bGRHVWdkR2hwY3k1ZlpYWmxiblJ6VzNSNWNHVmRPMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpPMXh1SUNCOVhHNWNiaUFnTHk4Z1pXMXBkQ0J5WlcxdmRtVk1hWE4wWlc1bGNpQm1iM0lnWVd4c0lHeHBjM1JsYm1WeWN5QnZiaUJoYkd3Z1pYWmxiblJ6WEc0Z0lHbG1JQ2hoY21kMWJXVnVkSE11YkdWdVozUm9JRDA5UFNBd0tTQjdYRzRnSUNBZ1ptOXlJQ2hyWlhrZ2FXNGdkR2hwY3k1ZlpYWmxiblJ6S1NCN1hHNGdJQ0FnSUNCcFppQW9hMlY1SUQwOVBTQW5jbVZ0YjNabFRHbHpkR1Z1WlhJbktTQmpiMjUwYVc1MVpUdGNiaUFnSUNBZ0lIUm9hWE11Y21WdGIzWmxRV3hzVEdsemRHVnVaWEp6S0d0bGVTazdYRzRnSUNBZ2ZWeHVJQ0FnSUhSb2FYTXVjbVZ0YjNabFFXeHNUR2x6ZEdWdVpYSnpLQ2R5WlcxdmRtVk1hWE4wWlc1bGNpY3BPMXh1SUNBZ0lIUm9hWE11WDJWMlpXNTBjeUE5SUh0OU8xeHVJQ0FnSUhKbGRIVnliaUIwYUdsek8xeHVJQ0I5WEc1Y2JpQWdiR2x6ZEdWdVpYSnpJRDBnZEdocGN5NWZaWFpsYm5SelczUjVjR1ZkTzF4dVhHNGdJR2xtSUNocGMwWjFibU4wYVc5dUtHeHBjM1JsYm1WeWN5a3BJSHRjYmlBZ0lDQjBhR2x6TG5KbGJXOTJaVXhwYzNSbGJtVnlLSFI1Y0dVc0lHeHBjM1JsYm1WeWN5azdYRzRnSUgwZ1pXeHpaU0JwWmlBb2JHbHpkR1Z1WlhKektTQjdYRzRnSUNBZ0x5OGdURWxHVHlCdmNtUmxjbHh1SUNBZ0lIZG9hV3hsSUNoc2FYTjBaVzVsY25NdWJHVnVaM1JvS1Z4dUlDQWdJQ0FnZEdocGN5NXlaVzF2ZG1WTWFYTjBaVzVsY2loMGVYQmxMQ0JzYVhOMFpXNWxjbk5iYkdsemRHVnVaWEp6TG14bGJtZDBhQ0F0SURGZEtUdGNiaUFnZlZ4dUlDQmtaV3hsZEdVZ2RHaHBjeTVmWlhabGJuUnpXM1I1Y0dWZE8xeHVYRzRnSUhKbGRIVnliaUIwYUdsek8xeHVmVHRjYmx4dVJYWmxiblJGYldsMGRHVnlMbkJ5YjNSdmRIbHdaUzVzYVhOMFpXNWxjbk1nUFNCbWRXNWpkR2x2YmloMGVYQmxLU0I3WEc0Z0lIWmhjaUJ5WlhRN1hHNGdJR2xtSUNnaGRHaHBjeTVmWlhabGJuUnpJSHg4SUNGMGFHbHpMbDlsZG1WdWRITmJkSGx3WlYwcFhHNGdJQ0FnY21WMElEMGdXMTA3WEc0Z0lHVnNjMlVnYVdZZ0tHbHpSblZ1WTNScGIyNG9kR2hwY3k1ZlpYWmxiblJ6VzNSNWNHVmRLU2xjYmlBZ0lDQnlaWFFnUFNCYmRHaHBjeTVmWlhabGJuUnpXM1I1Y0dWZFhUdGNiaUFnWld4elpWeHVJQ0FnSUhKbGRDQTlJSFJvYVhNdVgyVjJaVzUwYzF0MGVYQmxYUzV6YkdsalpTZ3BPMXh1SUNCeVpYUjFjbTRnY21WME8xeHVmVHRjYmx4dVJYWmxiblJGYldsMGRHVnlMbkJ5YjNSdmRIbHdaUzVzYVhOMFpXNWxja052ZFc1MElEMGdablZ1WTNScGIyNG9kSGx3WlNrZ2UxeHVJQ0JwWmlBb2RHaHBjeTVmWlhabGJuUnpLU0I3WEc0Z0lDQWdkbUZ5SUdWMmJHbHpkR1Z1WlhJZ1BTQjBhR2x6TGw5bGRtVnVkSE5iZEhsd1pWMDdYRzVjYmlBZ0lDQnBaaUFvYVhOR2RXNWpkR2x2YmlobGRteHBjM1JsYm1WeUtTbGNiaUFnSUNBZ0lISmxkSFZ5YmlBeE8xeHVJQ0FnSUdWc2MyVWdhV1lnS0dWMmJHbHpkR1Z1WlhJcFhHNGdJQ0FnSUNCeVpYUjFjbTRnWlhac2FYTjBaVzVsY2k1c1pXNW5kR2c3WEc0Z0lIMWNiaUFnY21WMGRYSnVJREE3WEc1OU8xeHVYRzVGZG1WdWRFVnRhWFIwWlhJdWJHbHpkR1Z1WlhKRGIzVnVkQ0E5SUdaMWJtTjBhVzl1S0dWdGFYUjBaWElzSUhSNWNHVXBJSHRjYmlBZ2NtVjBkWEp1SUdWdGFYUjBaWEl1YkdsemRHVnVaWEpEYjNWdWRDaDBlWEJsS1R0Y2JuMDdYRzVjYm1aMWJtTjBhVzl1SUdselJuVnVZM1JwYjI0b1lYSm5LU0I3WEc0Z0lISmxkSFZ5YmlCMGVYQmxiMllnWVhKbklEMDlQU0FuWm5WdVkzUnBiMjRuTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJwYzA1MWJXSmxjaWhoY21jcElIdGNiaUFnY21WMGRYSnVJSFI1Y0dWdlppQmhjbWNnUFQwOUlDZHVkVzFpWlhJbk8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCcGMwOWlhbVZqZENoaGNtY3BJSHRjYmlBZ2NtVjBkWEp1SUhSNWNHVnZaaUJoY21jZ1BUMDlJQ2R2WW1wbFkzUW5JQ1ltSUdGeVp5QWhQVDBnYm5Wc2JEdGNibjFjYmx4dVpuVnVZM1JwYjI0Z2FYTlZibVJsWm1sdVpXUW9ZWEpuS1NCN1hHNGdJSEpsZEhWeWJpQmhjbWNnUFQwOUlIWnZhV1FnTUR0Y2JuMWNibHh1WEc1Y2JpOHZMeTh2THk4dkx5OHZMeTh2THk4dkwxeHVMeThnVjBWQ1VFRkRTeUJHVDA5VVJWSmNiaTh2SUM0dmZpOWxkbVZ1ZEhNdlpYWmxiblJ6TG1welhHNHZMeUJ0YjJSMWJHVWdhV1FnUFNBeE1GeHVMeThnYlc5a2RXeGxJR05vZFc1cmN5QTlJREFpTENJbmRYTmxJSE4wY21samRDYzdYRzVjYm14bGRDQnRZWFJvSUQwZ2NtVnhkV2x5WlNnbkxpNHZkWFJwYkM5dFlYUm9KeWs3WEc1Y2JpOHFLbHh1SUNCRGNtVmhkR1Z6SUdFZ2MzUmxjSEJoWW14bElIWmhiSFZsSUhkcGRHZ2diV2x1YVcxMWJTd2diV0Y0YVcxMWJTd2dZVzVrSUhOMFpYQWdjMmw2WlM0Z1ZHaHBjeUJwY3lCMWMyVmtJR2x1SUcxaGJua2dhVzUwWlhKbVlXTmxjeUIwYnlCamIyNXpkSEpwWTNRZ2RHaGxhWElnZG1Gc2RXVnpJSFJ2SUdObGNuUmhhVzRnY21GdVoyVnpMbHh1SUNCQWNHRnlZVzBnZTI1MWJXSmxjbjBnVzIxcGJqMHdYU0J0YVc1cGJYVnRYRzRnSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0JiYldGNFBURmRJRzFoZUdsdGRXMWNiaUFnUUhCaGNtRnRJSHR1ZFcxaVpYSjlJRnR6ZEdWd1BUQmRYRzRnSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0JiZG1Gc2RXVTlNRjBnYVc1cGRHbGhiQ0IyWVd4MVpWeHVJQ0JBY21WMGRYSnVjeUI3VDJKcVpXTjBmU0JUZEdWd1hHNHFMMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5QlRkR1Z3SUh0Y2JseHVJQ0JqYjI1emRISjFZM1J2Y2lodGFXNGdQU0F3TEcxaGVDQTlJREVzYzNSbGNDQTlJREFzZG1Gc2RXVWdQU0F3S1NCN1hHNGdJQ0FnTHk5UFltcGxZM1F1WVhOemFXZHVLSFJvYVhNc2UyMXBiaXh0WVhnc2MzUmxjSDBwTzF4dUlDQWdJQzh2UTJGdWJtOTBJSFZ6WlNCUFltcGxZM1F1WVhOemFXZHVJR0psWTJGMWMyVWdibTkwSUhOMWNIQnZjblJsWkNCcGJpQlRZV1poY21rdVhHNGdJQ0FnTHk5SklIZHZkV3hrSUdWNGNHVmpkQ0JtYjNJZ1FtRmlaV3dnZEc4Z2RHRnJaU0JqWVhKbElHOW1JSFJvYVhNZ1luVjBJR2wwSUdseklHNXZkQzVjYmlBZ0lDQjBhR2x6TG0xcGJpQTlJRzFwYmp0Y2JpQWdJQ0IwYUdsekxtMWhlQ0E5SUcxaGVEdGNiaUFnSUNCMGFHbHpMbk4wWlhBZ1BTQnpkR1Z3TzF4dUlDQWdJSFJvYVhNdWRtRnNkV1VnUFNCMllXeDFaVHRjYmlBZ0lDQjBhR2x6TG1Ob1lXNW5aV1FnUFNCbVlXeHpaVHRjYmlBZ0lDQjBhR2x6TG05c1pGWmhiSFZsSUQwZ1ptRnNjMlU3WEc0Z0lDQWdkR2hwY3k1MWNHUmhkR1VvZEdocGN5NTJZV3gxWlNrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDQlZjR1JoZEdVZ2QybDBhQ0JoSUc1bGR5QjJZV3gxWlM0Z1ZHaGxJSFpoYkhWbElIZHBiR3dnWW1VZ1lYVjBieTFoWkdwMWMzUmxaQ0IwYnlCbWFYUWdkR2hsSUcxcGJpOXRZWGd2YzNSbGNDNWNiaUFnSUNCQWNHRnlZVzBnZTI1MWJXSmxjbjBnZG1Gc2RXVmNiaUFnS2k5Y2JseHVJQ0IxY0dSaGRHVW9kbUZzZFdVcElIdGNiaUFnSUNCcFppQW9kR2hwY3k1emRHVndLU0I3WEc0Z0lDQWdJQ0F2THlCMGFHbHpMblpoYkhWbElEMGdiV0YwYUM1amJHbHdLRTFoZEdndWNtOTFibVFvZG1Gc2RXVWdMeUFvZEdocGN5NXpkR1Z3S1NrZ0tpQjBhR2x6TG5OMFpYQXNJSFJvYVhNdWJXbHVMSFJvYVhNdWJXRjRLVHRjYmlBZ0lDQWdJSFJvYVhNdWRtRnNkV1VnUFNCdFlYUm9MbU5zYVhBb1RXRjBhQzV5YjNWdVpDZ29kbUZzZFdVdGRHaHBjeTV0YVc0cElDOGdLSFJvYVhNdWMzUmxjQ2twSUNvZ2RHaHBjeTV6ZEdWd0lDc2dkR2hwY3k1dGFXNHNJSFJvYVhNdWJXbHVMSFJvYVhNdWJXRjRLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2RHaHBjeTUyWVd4MVpTQTlJRzFoZEdndVkyeHBjQ2gyWVd4MVpTeDBhR2x6TG0xcGJpeDBhR2x6TG0xaGVDazdYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaDBhR2x6TG05c1pGWmhiSFZsSUNFOVBTQjBhR2x6TG5aaGJIVmxLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtOXNaRlpoYkhWbElEMGdkR2hwY3k1MllXeDFaVHRjYmlBZ0lDQWdJSFJvYVhNdVkyaGhibWRsWkNBOUlIUnlkV1U3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lIUm9hWE11WTJoaGJtZGxaQ0E5SUdaaGJITmxPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NTJZV3gxWlR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0lGVndaR0YwWlNCM2FYUm9JR0VnYm05eWJXRnNhWHBsWkNCMllXeDFaU0F3TFRFdVhHNGdJQ0FnUUhCaGNtRnRJSHR1ZFcxaVpYSjlJSFpoYkhWbFhHNGdJQ292WEc0Z0lIVndaR0YwWlU1dmNtMWhiQ2gyWVd4MVpTa2dlMXh1SUNBZ0lIUm9hWE11ZG1Gc2RXVWdQU0J0WVhSb0xuTmpZV3hsS0haaGJIVmxMREFzTVN4MGFHbHpMbTFwYml4MGFHbHpMbTFoZUNrN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWRYQmtZWFJsS0hSb2FYTXVkbUZzZFdVcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQWdSMlYwSUdFZ2JtOXliV0ZzYVhwbFpDQjJaWEp6YVc5dUlHOW1JSFJvYVhNdWRtRnNkV1VnTGlCT2IzUWdjMlYwZEdGaWJHVXVYRzRnSUNvdlhHNGdJR2RsZENCdWIzSnRZV3hwZW1Wa0tDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCdFlYUm9MbTV2Y20xaGJHbDZaU2gwYUdsekxuWmhiSFZsTEhSb2FYTXViV2x1TEhSb2FYTXViV0Y0S1R0Y2JpQWdmVnh1WEc1OVhHNWNibHh1WEc0dkx5QlhSVUpRUVVOTElFWlBUMVJGVWlBdkwxeHVMeThnTGk5K0wycHphR2x1ZEMxc2IyRmtaWEloTGk5c2FXSXZiVzlrWld4ekwzTjBaWEF1YW5NaUxDSW5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JtbHRjRzl5ZENCdFlYUm9JR1p5YjIwZ0p5NHVMM1YwYVd3dmJXRjBhQ2M3WEc1cGJYQnZjblFnVkc5bloyeGxUVzlrWld3Z1puSnZiU0FuTGk0dmJXOWtaV3h6TDNSdloyZHNaU2M3WEc1Y2JseHVMeXBjYm1odmR5QjBieUIxYzJVZ09seHVYRzVrYVdGc0xtbHVkR1Z5WVdOMGFXOXVJRDBnYm1WM0lFaGhibVJzWlNnbmNtRmthV0ZzSnl3bmNtVnNZWFJwZG1VbkxIUm9hWE11ZDJsa2RHZ3NkR2hwY3k1b1pXbG5hSFFwTzF4dUx5OGdaR2xoYkM1cGJuUmxjbUZqZEdsdmJpNXRiMlJsSUQwZ0ozSmxiR0YwYVhabEoxeHVMeThnWkdsaGJDNXBiblJsY21GamRHbHZiaTVrYVhKbFkzUnBiMjRnUFNBbmNtRmthV0ZzSjF4dVhHNXZiaUJqYkdsamF6cGNibVJwWVd3dWFXNTBaWEpoWTNScGIyNHVZVzVqYUc5eUlEMGdkR2hwY3k1dGIzVnpaVHRjYmx4dWIyNGdiVzkyWlRwY2JtUnBZV3d1YVc1MFpYSmhZM1JwYjI0dWRYQmtZWFJsS0hSb2FYTXViVzkxYzJVcE8xeHVYRzVqYjI1emIyeGxMbXh2WnlnZ1pHbGhiQzVwYm5SbGNtRmpkR2x2Ymk1MllXeDFaU0FwT3lCemFHOTFiR1FnWW1VZ1lTQnViM0p0WVd4cGVtVmtJSFpoYkhWbExseHVYRzRxTDF4dVhHNHZLbHh1SUNCaFluTnZiSFYwWlM5eVpXeGhkR2wyWlNCaGNtVWdjSEp2Y0dWeWRIazZJRzF2WkdWY2JpQWdjbUZrYVdGc0wzWmxjblJwWTJGc0wyaHZjbWw2YjI1MFlXd3ZNbVFnWVhKbElIQnliM0JsY25SNU9pQmthWEpsWTNScGIyNWNibHh1SUNCd2JHRnVJRHBjYmx4dUlDQnBaaUJ5Wld4aGRHbDJaU0F0TFZ4dUlDQk9UeUJ2YmlCamJHbGpheXdnWjJWMElIWmhiSFZsSUc5bVpuTmxkQ0JpWlhSM1pXVnVJR04xY25KbGJuUWdkbUZzZFdVZ1lXNWtJR05zYVdOcklIWmhiSFZsTGx4dUlDQk9UeUJ2YmlCdGIzWmxMQ0IxYzJVZ1kyeHBZMnNnZG1Gc2RXVWdMU0J2Wm1aelpYUmNiaUFnU1U1VFZFVkJSRnh1SUNCMWMyVWdaR1ZzZEdFZ0xTMGdZbU1nZG1WeWRHbGpZV3dnYlc5MGFXOXVJRzl1SUdScFlXd2dhWE1nYVcxd2IzTnphV0pzWlNCdmRHaGxjbmRwYzJWY2JpQWdZV3h6YnlCaGJHeHZkeUIwYnlCelpYUWdjMlZ1YzJsMGFYWnBkSGxjYmx4dUtpOWNibHh1Wlhod2IzSjBJR05zWVhOeklFaGhibVJzWlNCN1hHNWNiaUFnWTI5dWMzUnlkV04wYjNJb2JXOWtaVDBuWVdKemIyeDFkR1VuTEdScGNtVmpkR2x2YmowbmRtVnlkR2xqWVd3bkxIaGliM1Z1WkQxYk1Dd3hNREJkTEhsaWIzVnVaRDFiTUN3eE1EQmRLU0I3WEc0Z0lDQWdkR2hwY3k1dGIyUmxJRDBnYlc5a1pUdGNiaUFnSUNCMGFHbHpMbVJwY21WamRHbHZiaUE5SUdScGNtVmpkR2x2Ymp0Y2JpQWdJQ0IwYUdsekxuQnlaWFpwYjNWeklEMGdNRHRjYmlBZ0lDQjBhR2x6TG5aaGJIVmxJRDBnTUR0Y2JpQWdJQ0IwYUdsekxuTmxibk5wZEdsMmFYUjVJRDBnTVR0Y2JpQWdJQ0IwYUdsekxuSmxjMmw2WlNoNFltOTFibVFzZVdKdmRXNWtLVHRjYmlBZ2ZWeHVYRzRnSUhKbGMybDZaU2g0WW05MWJtUXNlV0p2ZFc1a0tTQjdYRzRnSUNBZ2RHaHBjeTVpYjNWdVpHRnllU0E5SUh0Y2JpQWdJQ0FnSUcxcGJqb2dlMXh1SUNBZ0lDQWdJQ0I0T2lCNFltOTFibVJiTUYwc1hHNGdJQ0FnSUNBZ0lIazZJSGxpYjNWdVpGc3dYVnh1SUNBZ0lDQWdmU3hjYmlBZ0lDQWdJRzFoZURvZ2UxeHVJQ0FnSUNBZ0lDQjRPaUI0WW05MWJtUmJNVjBzWEc0Z0lDQWdJQ0FnSUhrNklIbGliM1Z1WkZzeFhWeHVJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lHTmxiblJsY2pvZ2UxeHVJQ0FnSUNBZ0lDQjRPaUFvZUdKdmRXNWtXekZkSUMwZ2VHSnZkVzVrV3pCZEtTOHlJQ3NnZUdKdmRXNWtXekJkTEZ4dUlDQWdJQ0FnSUNCNU9pQW9lV0p2ZFc1a1d6RmRJQzBnZVdKdmRXNWtXekJkS1M4eUlDc2dlV0p2ZFc1a1d6QmRYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZUdGNiaUFnZlZ4dVhHNGdJSE5sZENCaGJtTm9iM0lvYlc5MWMyVXBJSHRjYmlBZ0lDQjBhR2x6TGw5aGJtTm9iM0lnUFNCMGFHbHpMbU52Ym5abGNuUlFiM05wZEdsdmJsUnZWbUZzZFdVb2JXOTFjMlVwTzF4dUlDQjlYRzVjYmlBZ1oyVjBJR0Z1WTJodmNpZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVmWVc1amFHOXlPMXh1SUNCOVhHNWNibHh1SUNCMWNHUmhkR1VvYlc5MWMyVXBJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NXRiMlJsUFQwOUozSmxiR0YwYVhabEp5a2dlMXh1SUNBZ0lDQWdiR1YwSUdsdVkzSmxiV1Z1ZENBOUlIUm9hWE11WTI5dWRtVnlkRkJ2YzJsMGFXOXVWRzlXWVd4MVpTaHRiM1Z6WlNrZ0xTQjBhR2x6TG1GdVkyaHZjanRjYmlBZ0lDQWdJR2xtSUNoTllYUm9MbUZpY3locGJtTnlaVzFsYm5RcElENGdNQzQxS1NCN0lHbHVZM0psYldWdWRDQTlJREE3SUgxY2JpQWdJQ0FnSUhSb2FYTXVZVzVqYUc5eUlEMGdiVzkxYzJVN1hHNGdJQ0FnSUNCMGFHbHpMblpoYkhWbElEMGdkR2hwY3k1MllXeDFaU0FySUdsdVkzSmxiV1Z1ZENBcUlIUm9hWE11YzJWdWMybDBhWFpwZEhrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSFJvYVhNdWRtRnNkV1VnUFNCMGFHbHpMbU52Ym5abGNuUlFiM05wZEdsdmJsUnZWbUZzZFdVb2JXOTFjMlVwTzF4dUlDQWdJSDFjYmlBZ0lDQjBhR2x6TG5aaGJIVmxJRDBnYldGMGFDNWpiR2x3S0hSb2FYTXVkbUZzZFdVc01Dd3hLVHRjYmlBZ2ZWeHVYRzRnSUdOdmJuWmxjblJRYjNOcGRHbHZibFJ2Vm1Gc2RXVW9ZM1Z5Y21WdWRDa2dlMXh1SUNBZ0lITjNhWFJqYUNoMGFHbHpMbVJwY21WamRHbHZiaWtnZTF4dUlDQWdJQ0FnWTJGelpTQW5jbUZrYVdGc0p6cGNiaUFnSUNBZ0lDQWdiR1YwSUhCdmMybDBhVzl1SUQwZ2JXRjBhQzUwYjFCdmJHRnlLR04xY25KbGJuUXVlQ0F0SUhSb2FYTXVZbTkxYm1SaGNua3VZMlZ1ZEdWeUxuZ3NJR04xY25KbGJuUXVlU0F0SUhSb2FYTXVZbTkxYm1SaGNua3VZMlZ1ZEdWeUxua3BPMXh1SUNBZ0lDQWdJQ0J3YjNOcGRHbHZiaUE5SUhCdmMybDBhVzl1TG1GdVoyeGxJQzhnS0UxaGRHZ3VVRWtxTWlrN1hHNGdJQ0FnSUNBZ0lIQnZjMmwwYVc5dUlEMGdLQ2h3YjNOcGRHbHZiaUF0SURBdU1qVXBJQ3NnTVNrZ0pTQXhPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdjRzl6YVhScGIyNDdYRzRnSUNBZ0lDQmpZWE5sSUNkMlpYSjBhV05oYkNjNlhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdFlYUm9Mbk5qWVd4bEtHTjFjbkpsYm5RdWVTeDBhR2x6TG1KdmRXNWtZWEo1TG0xcGJpNTVMSFJvYVhNdVltOTFibVJoY25rdWJXRjRMbmtzTUN3eEtUdGNiaUFnSUNBZ0lHTmhjMlVnSjJodmNtbDZiMjUwWVd3bk9seHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2JXRjBhQzV6WTJGc1pTaGpkWEp5Wlc1MExuZ3NkR2hwY3k1aWIzVnVaR0Z5ZVM1dGFXNHVlQ3gwYUdsekxtSnZkVzVrWVhKNUxtMWhlQzU0TERBc01TazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JuMWNibHh1WEc1bGVIQnZjblFnWTJ4aGMzTWdRblYwZEc5dUlIdGNibHh1SUNCamIyNXpkSEoxWTNSdmNpaHRiMlJsUFNkaWRYUjBiMjRuS1NCN1hHNGdJQ0FnZEdocGN5NXRiMlJsSUQwZ2JXOWtaVHRjYmlBZ0lDQjBhR2x6TG5OMFlYUmxJRDBnYm1WM0lGUnZaMmRzWlUxdlpHVnNLQ2s3WEc0Z0lDQWdkR2hwY3k1d1lXbHVkR0p5ZFhOb0lEMGdabUZzYzJVN1hHNGdJSDFjYmx4dUlDQmpiR2xqYXlncElIdGNiaUFnSUNCemQybDBZMmdnS0hSb2FYTXViVzlrWlNrZ2UxeHVJQ0FnSUNBZ1kyRnpaU0FuYVcxd2RXeHpaU2M2WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjM1JoZEdVdWIyNG9LVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11ZEdsdFpXOTFkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lHTnNaV0Z5VkdsdFpXOTFkQ2gwYUdsekxuUnBiV1Z2ZFhRcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSFJvYVhNdWRHbHRaVzkxZENBOUlITmxkRlJwYldWdmRYUW9kR2hwY3k1emRHRjBaUzV2Wm1ZdVltbHVaQ2gwYUdsektTd3pNQ2s3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVaVzFwZENnblkyaGhibWRsSnl4MGFHbHpMbk4wWVhSbEtUdGNiaUFnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNCallYTmxJQ2RpZFhSMGIyNG5PbHh1SUNBZ0lDQWdJQ0IwYUdsekxuUjFjbTVQYmlncE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG1WdGFYUW9KMk5vWVc1blpTY3NkR2hwY3k1emRHRjBaU2s3WEc0Z0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdZMkZ6WlNBbllXWjBaWEowYjNWamFDYzZYRzRnSUNBZ0lDQWdJSFJvYVhNdWNHOXphWFJwYjI0Z1BTQjdYRzRnSUNBZ0lDQWdJQ0FnZURvZ2JXRjBhQzVqYkdsd0tIUm9hWE11Ylc5MWMyVXVlQ0F2SUhSb2FYTXVkMmxrZEdnc01Dd3hLU3hjYmlBZ0lDQWdJQ0FnSUNCNU9pQnRZWFJvTG1Oc2FYQW9NU0F0SUhSb2FYTXViVzkxYzJVdWVTQXZJSFJvYVhNdWFHVnBaMmgwTERBc01TbGNiaUFnSUNBZ0lDQWdmVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NTBkWEp1VDI0b0tUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1bGJXbDBLQ2RqYUdGdVoyVW5MSHRjYmlBZ0lDQWdJQ0FnSUNCemRHRjBaVG9nZEdocGN5NXpkR0YwWlN4Y2JpQWdJQ0FnSUNBZ0lDQjRPaUIwYUdsekxuQnZjMmwwYVc5dUxuZ3NYRzRnSUNBZ0lDQWdJQ0FnZVRvZ2RHaHBjeTV3YjNOcGRHbHZiaTU1TEZ4dUlDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNCallYTmxJQ2QwYjJkbmJHVW5PbHh1SUNBZ0lDQWdJQ0IwYUdsekxtWnNhWEFvS1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVsYldsMEtDZGphR0Z1WjJVbkxIUm9hWE11YzNSaGRHVXBPMXh1SUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNWNiaUFnZlZ4dVhHNGdJRzF2ZG1Vb0tTQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdWJXOWtaVDA5UFNkaFpuUmxjblJ2ZFdOb0p5a2dlMXh1SUNBZ0lDQWdkR2hwY3k1d2IzTnBkR2x2YmlBOUlIdGNiaUFnSUNBZ0lDQWdlRG9nYldGMGFDNWpiR2x3S0hSb2FYTXViVzkxYzJVdWVDQXZJSFJvYVhNdWQybGtkR2dzTUN3eEtTeGNiaUFnSUNBZ0lDQWdlVG9nYldGMGFDNWpiR2x3S0RFZ0xTQjBhR2x6TG0xdmRYTmxMbmtnTHlCMGFHbHpMbWhsYVdkb2RDd3dMREVwWEc0Z0lDQWdJQ0I5TzF4dUlDQWdJQ0FnZEdocGN5NWxiV2wwS0NkamFHRnVaMlVuTEh0Y2JpQWdJQ0FnSUNBZ2MzUmhkR1U2SUhSb2FYTXVjM1JoZEdVc1hHNGdJQ0FnSUNBZ0lIZzZJSFJvYVhNdWNHOXphWFJwYjI0dWVDeGNiaUFnSUNBZ0lDQWdlVG9nZEdocGN5NXdiM05wZEdsdmJpNTVMRnh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0IwYUdsekxuSmxibVJsY2lncE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lISmxiR1ZoYzJVb0tTQjdYRzRnSUNBZ2MzZHBkR05vSUNoMGFHbHpMbTF2WkdVcElIdGNiaUFnSUNBZ0lHTmhjMlVnSjJKMWRIUnZiaWM2WEc0Z0lDQWdJQ0FnSUhSb2FYTXVkSFZ5Yms5bVppZ3BPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtVnRhWFFvSjJOb1lXNW5aU2NzZEdocGN5NXpkR0YwWlNrN1hHNGdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnWTJGelpTQW5ZV1owWlhKMGIzVmphQ2M2WEc0Z0lDQWdJQ0FnSUhSb2FYTXVkSFZ5Yms5bVppZ3BPMXh1SUNBZ0lDQWdJQ0IwYUdsekxuQnZjMmwwYVc5dUlEMGdlMXh1SUNBZ0lDQWdJQ0FnSUhnNklIUm9hWE11Ylc5MWMyVXVlQ0F2SUhSb2FYTXVkMmxrZEdnc1hHNGdJQ0FnSUNBZ0lDQWdlVG9nTVNBdElIUm9hWE11Ylc5MWMyVXVlU0F2SUhSb2FYTXVhR1ZwWjJoMFhHNGdJQ0FnSUNBZ0lIMDdYRzRnSUNBZ0lDQWdJSFJvYVhNdVpXMXBkQ2duWTJoaGJtZGxKeXg3WEc0Z0lDQWdJQ0FnSUNBZ2MzUmhkR1U2SUhSb2FYTXVjM1JoZEdVc1hHNGdJQ0FnSUNBZ0lDQWdlRG9nZEdocGN5NXdiM05wZEdsdmJpNTRMRnh1SUNBZ0lDQWdJQ0FnSUhrNklIUm9hWE11Y0c5emFYUnBiMjR1ZVN4Y2JpQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdmVnh1ZlZ4dVhHNWNibHh1THk4Z1YwVkNVRUZEU3lCR1QwOVVSVklnTHk5Y2JpOHZJQzR2Zmk5cWMyaHBiblF0Ykc5aFpHVnlJUzR2YkdsaUwzVjBhV3d2YVc1MFpYSmhZM1JwYjI0dWFuTWlMQ0luZFhObElITjBjbWxqZENjN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHTnNZWE56SUZSdloyZHNaU0I3WEc1Y2JpQWdZMjl1YzNSeWRXTjBiM0lvYzNSaGRHVXBJSHRjYmlBZ0lDQjBhR2x6TG5OMFlYUmxJRDBnYzNSaGRHVWdmSHdnWm1Gc2MyVTdYRzRnSUgxY2JseHVJQ0JtYkdsd0tITjBZWFJsS1NCN1hHNGdJQ0FnYVdZZ0tITjBZWFJsSUh4OElITjBZWFJsSUQwOVBTQm1ZV3h6WlNrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV6ZEdGMFpTQTlJSE4wWVhSbE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0IwYUdsekxuTjBZWFJsSUQwZ0lYUm9hWE11YzNSaGRHVTdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdiMjRvS1NCN1hHNGdJQ0FnZEdocGN5NXpkR0YwWlNBOUlIUnlkV1U3WEc0Z0lIMWNibHh1SUNCdlptWW9LU0I3WEc0Z0lDQWdkR2hwY3k1emRHRjBaU0E5SUdaaGJITmxPMXh1SUNCOVhHNWNibjFjYmx4dVhHNWNiaTh2SUZkRlFsQkJRMHNnUms5UFZFVlNJQzh2WEc0dkx5QXVMMzR2YW5Ob2FXNTBMV3h2WVdSbGNpRXVMMnhwWWk5dGIyUmxiSE12ZEc5bloyeGxMbXB6SWl3aUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1c1pYUWdjM1puSUQwZ2NtVnhkV2x5WlNnbkxpNHZkWFJwYkM5emRtY25LVHRjYm14bGRDQkpiblJsY21aaFkyVWdQU0J5WlhGMWFYSmxLQ2N1TGk5amIzSmxMMmx1ZEdWeVptRmpaU2NwTzF4dWJHVjBJRk4wWlhBZ1BTQnlaWEYxYVhKbEtDY3VMaTl0YjJSbGJITXZjM1JsY0NjcE8xeHVhVzF3YjNKMElDb2dZWE1nU1c1MFpYSmhZM1JwYjI0Z1puSnZiU0FuTGk0dmRYUnBiQzlwYm5SbGNtRmpkR2x2YmljN1hHNWNiaThxS2x4dUtpQlRiR2xrWlhKY2JpcGNiaW9nUUdSbGMyTnlhWEIwYVc5dUlFaHZjbWw2YjI1MFlXd2diM0lnZG1WeWRHbGpZV3dnYzJ4cFpHVnlJSGRwZEdnZ2MyVjBkR0ZpYkdVZ2FXNTBaWEpoWTNScGIyNGdiVzlrWlhNdVhHNHFYRzRxSUVCa1pXMXZJRHh6Y0dGdUlHNWxlSFZ6TFhWcFBWd2ljMnhwWkdWeVhDSWdjM1JsY0Qwd0xqSStQQzl6Y0dGdVBseHVLbHh1S2lCQVpYaGhiWEJzWlZ4dUtpQjJZWElnYzJ4cFpHVnlJRDBnYm1WM0lFNWxlSFZ6TGxOc2FXUmxjaWduSTNSaGNtZGxkQ2NwWEc0cVhHNHFJRUJsZUdGdGNHeGxYRzRxSUhaaGNpQnpiR2xrWlhJZ1BTQnVaWGNnVG1WNGRYTXVVMnhwWkdWeUtDY2pkR0Z5WjJWMEp5eDdYRzRxSUNBZ0lDQW5jMmw2WlNjNklGc3hNakFzTWpCZExGeHVLaUFnSUNBZ0oyMXZaR1VuT2lBbmNtVnNZWFJwZG1VbkxDQWdMeThnSjNKbGJHRjBhWFpsSnlCdmNpQW5ZV0p6YjJ4MWRHVW5YRzRxSUNBZ0lDQW5iV2x1SnpvZ01DeGNiaW9nSUNBZ0lDZHRZWGduT2lBeExGeHVLaUFnSUNBZ0ozTjBaWEFuT2lBd0xGeHVLaUFnSUNBZ0ozWmhiSFZsSnpvZ01GeHVLaUI5S1Z4dUtseHVLaUJBYjNWMGNIVjBYRzRxSUdOb1lXNW5aVnh1S2lCR2FYSmxjeUIzYUdWdUlIUm9aU0JwYm5SbGNtWmhZMlVuY3lCMllXeDFaU0JqYUdGdVoyVnpMaUE4WW5JK1hHNHFJRVYyWlc1MElHUmhkR0U2SUR4cFBtNTFiV0psY2p3dmFUNGdWR2hsSUc1MWJXSmxjaUIyWVd4MVpTQnZaaUIwYUdVZ2FXNTBaWEptWVdObExseHVLbHh1S2lCQWIzVjBjSFYwWlhoaGJYQnNaVnh1S2lCemJHbGtaWEl1YjI0b0oyTm9ZVzVuWlNjc1puVnVZM1JwYjI0b2Rpa2dlMXh1S2lBZ0lHTnZibk52YkdVdWJHOW5LSFlwTzF4dUtpQjlLVnh1S2x4dUtseHVLaTljYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnWTJ4aGMzTWdVMnhwWkdWeUlHVjRkR1Z1WkhNZ1NXNTBaWEptWVdObElIdGNibHh1SUNCamIyNXpkSEoxWTNSdmNpZ3BJSHRjYmx4dUlDQWdJR3hsZENCdmNIUnBiMjV6SUQwZ1d5ZHRhVzRuTENkdFlYZ25MQ2QyWVd4MVpTZGRPMXh1WEc0Z0lDQWdiR1YwSUdSbFptRjFiSFJ6SUQwZ2UxeHVJQ0FnSUNBZ0ozTnBlbVVuT2lCYk1USXdMREl3WFN4Y2JpQWdJQ0FnSUNkdGIyUmxKem9nSjNKbGJHRjBhWFpsSnl3Z0lDOHZJQ2R5Wld4aGRHbDJaU2NnYjNJZ0oyRmljMjlzZFhSbEoxeHVJQ0FnSUNBZ0oyMXBiaWM2SURBc1hHNGdJQ0FnSUNBbmJXRjRKem9nTVN4Y2JpQWdJQ0FnSUNkemRHVndKem9nTUN4Y2JpQWdJQ0FnSUNkMllXeDFaU2M2SURCY2JpQWdJQ0I5TzF4dVhHNGdJQ0FnYzNWd1pYSW9ZWEpuZFcxbGJuUnpMRzl3ZEdsdmJuTXNaR1ZtWVhWc2RITXBPMXh1WEc0Z0lDQWdkR2hwY3k1dmNtbGxiblJoZEdsdmJpQTlJQ2QyWlhKMGFXTmhiQ2M3SUM4dklGUm9hWE1nZDJsc2JDQmphR0Z1WjJVZ1lYVjBiMjFoZEdsallXeHNlU0IwYnlBbmFHOXlhWHB2Ym5SaGJDZHBaaUIwYUdVZ2FXNTBaWEptWVdObElHbHpJSGRwWkdWeUlIUm9ZVzRnYVhRZ2FYTWdkR0ZzYkM1Y2JseHVJQ0FnSUhSb2FYTXVYM1poYkhWbElEMGdibVYzSUZOMFpYQW9kR2hwY3k1elpYUjBhVzVuY3k1dGFXNHNJSFJvYVhNdWMyVjBkR2x1WjNNdWJXRjRMQ0IwYUdsekxuTmxkSFJwYm1kekxuTjBaWEFzSUhSb2FYTXVjMlYwZEdsdVozTXVkbUZzZFdVcE8xeHVYRzRnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiaUE5SUc1bGR5QkpiblJsY21GamRHbHZiaTVJWVc1a2JHVW9kR2hwY3k1elpYUjBhVzVuY3k1dGIyUmxMSFJvYVhNdWIzSnBaVzUwWVhScGIyNHNXekFzZEdocGN5NTNhV1IwYUYwc1czUm9hWE11YUdWcFoyaDBMREJkS1R0Y2JpQWdJQ0IwYUdsekxuQnZjMmwwYVc5dUxuWmhiSFZsSUQwZ2RHaHBjeTVmZG1Gc2RXVXVibTl5YldGc2FYcGxaRHRjYmx4dUlDQWdJSFJvYVhNdWFXNXBkQ2dwTzF4dVhHNGdJQ0FnZEdocGN5NXdiM05wZEdsdmJpNWthWEpsWTNScGIyNGdQU0IwYUdsekxtOXlhV1Z1ZEdGMGFXOXVPMXh1WEc0Z0lDQWdkR2hwY3k1bGJXbDBLQ2RqYUdGdVoyVW5MSFJvYVhNdWRtRnNkV1VwTzF4dVhHNGdJSDFjYmx4dUlDQmlkV2xzWkVsdWRHVnlabUZqWlNncElIdGNibHh1SUNBZ0lIUm9hWE11WW1GeUlEMGdjM1puTG1OeVpXRjBaU2duY21WamRDY3BPMXh1SUNBZ0lIUm9hWE11Wm1sc2JHSmhjaUE5SUhOMlp5NWpjbVZoZEdVb0ozSmxZM1FuS1R0Y2JpQWdJQ0IwYUdsekxtdHViMklnUFNCemRtY3VZM0psWVhSbEtDZGphWEpqYkdVbktUdGNibHh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkQzVoY0hCbGJtUkRhR2xzWkNoMGFHbHpMbUpoY2lrN1hHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExtRndjR1Z1WkVOb2FXeGtLSFJvYVhNdVptbHNiR0poY2lrN1hHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExtRndjR1Z1WkVOb2FXeGtLSFJvYVhNdWEyNXZZaWs3WEc1Y2JpQWdmVnh1WEc0Z0lITnBlbVZKYm5SbGNtWmhZMlVvS1NCN1hHNWNiaUFnSUNCcFppQW9kR2hwY3k1M2FXUjBhQ0E4SUhSb2FYTXVhR1ZwWjJoMEtTQjdYRzRnSUNBZ0lDQjBhR2x6TG05eWFXVnVkR0YwYVc5dUlEMGdKM1psY25ScFkyRnNKenRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV2Y21sbGJuUmhkR2x2YmlBOUlDZG9iM0pwZW05dWRHRnNKenRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NXdiM05wZEdsdmJpa2dlMXh1SUNBZ0lDQWdkR2hwY3k1d2IzTnBkR2x2Ymk1eVpYTnBlbVVvV3pBc2RHaHBjeTUzYVdSMGFGMHNXM1JvYVhNdWFHVnBaMmgwTERCZEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCc1pYUWdlQ3dnZVN3Z2R5d2dhQ3dnWW1GeVQyWm1jMlYwTENCamIzSnVaWEpTWVdScGRYTTdYRzRnSUNBZ2RHaHBjeTVyYm05aVJHRjBZU0E5SUh0Y2JpQWdJQ0FnSUd4bGRtVnNPaUF3TEZ4dUlDQWdJQ0FnY2pvZ01GeHVJQ0FnSUgwN1hHNWNiaUFnSUNCcFppQW9kR2hwY3k1dmNtbGxiblJoZEdsdmJpQTlQVDBnSjNabGNuUnBZMkZzSnlrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTUwYUdsamEyNWxjM01nUFNCMGFHbHpMbmRwWkhSb0lDOGdNanRjYmlBZ0lDQmNkSGdnUFNCMGFHbHpMbmRwWkhSb0x6STdYRzRnSUNBZ1hIUjVJRDBnTUR0Y2JpQWdJQ0JjZEhjZ1BTQjBhR2x6TG5Sb2FXTnJibVZ6Y3p0Y2JpQWdJQ0JjZEdnZ1BTQjBhR2x6TG1obGFXZG9kRHRjYmlBZ0lDQWdJSFJvYVhNdWEyNXZZa1JoZEdFdWNpQTlJSFJvYVhNdWRHaHBZMnR1WlhOeklDb2dNQzQ0TzF4dUlDQWdJRngwZEdocGN5NXJibTlpUkdGMFlTNXNaWFpsYkNBOUlHZ3RkR2hwY3k1cmJtOWlSR0YwWVM1eUxYUm9hWE11Ym05eWJXRnNhWHBsWkNvb2FDMTBhR2x6TG10dWIySkVZWFJoTG5JcU1pazdYRzRnSUNBZ0lDQmlZWEpQWm1aelpYUWdQU0FuZEhKaGJuTnNZWFJsS0NjcmRHaHBjeTUwYUdsamEyNWxjM01xS0MweEtTOHlLeWNzTUNrbk8xeHVJQ0FnSUNBZ1kyOXlibVZ5VW1Ga2FYVnpJRDBnZHk4eU8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0IwYUdsekxuUm9hV05yYm1WemN5QTlJSFJvYVhNdWFHVnBaMmgwSUM4Z01qdGNiaUFnSUNCY2RIZ2dQU0F3TzF4dUlDQWdJRngwZVNBOUlIUm9hWE11YUdWcFoyaDBMekk3WEc0Z0lDQWdYSFIzSUQwZ2RHaHBjeTUzYVdSMGFEdGNiaUFnSUNCY2RHZ2dQU0IwYUdsekxuUm9hV05yYm1WemN6dGNiaUFnSUNBZ0lIUm9hWE11YTI1dllrUmhkR0V1Y2lBOUlIUm9hWE11ZEdocFkydHVaWE56SUNvZ01DNDRPMXh1SUNBZ0lGeDBkR2hwY3k1cmJtOWlSR0YwWVM1c1pYWmxiQ0E5SUhSb2FYTXVibTl5YldGc2FYcGxaQ29vZHkxMGFHbHpMbXR1YjJKRVlYUmhMbklxTWlrcmRHaHBjeTVyYm05aVJHRjBZUzV5TzF4dUlDQWdJQ0FnWW1GeVQyWm1jMlYwSUQwZ0ozUnlZVzV6YkdGMFpTZ3dMQ2NyZEdocGN5NTBhR2xqYTI1bGMzTXFLQzB4S1M4eUt5Y3BKenRjYmlBZ0lDQWdJR052Y201bGNsSmhaR2wxY3lBOUlHZ3ZNanRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjBhR2x6TG1KaGNpNXpaWFJCZEhSeWFXSjFkR1VvSjNnbkxIZ3BPMXh1SUNBZ0lIUm9hWE11WW1GeUxuTmxkRUYwZEhKcFluVjBaU2duZVNjc2VTazdYRzRnSUNBZ2RHaHBjeTVpWVhJdWMyVjBRWFIwY21saWRYUmxLQ2QwY21GdWMyWnZjbTBuTEdKaGNrOW1abk5sZENrN1hHNGdJQ0FnZEdocGN5NWlZWEl1YzJWMFFYUjBjbWxpZFhSbEtDZHllQ2NzWTI5eWJtVnlVbUZrYVhWektUc2dMeThnWTI5eWJtVnlJSEpoWkdsMWMxeHVJQ0FnSUhSb2FYTXVZbUZ5TG5ObGRFRjBkSEpwWW5WMFpTZ25jbmtuTEdOdmNtNWxjbEpoWkdsMWN5azdYRzRnSUNBZ2RHaHBjeTVpWVhJdWMyVjBRWFIwY21saWRYUmxLQ2QzYVdSMGFDY3NkeWs3WEc0Z0lDQWdkR2hwY3k1aVlYSXVjMlYwUVhSMGNtbGlkWFJsS0Nkb1pXbG5hSFFuTEdncE8xeHVYRzRnSUNBZ2FXWWdLSFJvYVhNdWIzSnBaVzUwWVhScGIyNGdQVDA5SUNkMlpYSjBhV05oYkNjcElIdGNiaUFnSUNBZ0lIUm9hWE11Wm1sc2JHSmhjaTV6WlhSQmRIUnlhV0oxZEdVb0ozZ25MSGdwTzF4dUlDQWdJQ0FnZEdocGN5NW1hV3hzWW1GeUxuTmxkRUYwZEhKcFluVjBaU2duZVNjc2RHaHBjeTVyYm05aVJHRjBZUzVzWlhabGJDazdYRzRnSUNBZ0lDQjBhR2x6TG1acGJHeGlZWEl1YzJWMFFYUjBjbWxpZFhSbEtDZDNhV1IwYUNjc2R5azdYRzRnSUNBZ0lDQjBhR2x6TG1acGJHeGlZWEl1YzJWMFFYUjBjbWxpZFhSbEtDZG9aV2xuYUhRbkxHZ3RkR2hwY3k1cmJtOWlSR0YwWVM1c1pYWmxiQ2s3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lIUm9hWE11Wm1sc2JHSmhjaTV6WlhSQmRIUnlhV0oxZEdVb0ozZ25MREFwTzF4dUlDQWdJQ0FnZEdocGN5NW1hV3hzWW1GeUxuTmxkRUYwZEhKcFluVjBaU2duZVNjc2VTazdYRzRnSUNBZ0lDQjBhR2x6TG1acGJHeGlZWEl1YzJWMFFYUjBjbWxpZFhSbEtDZDNhV1IwYUNjc2RHaHBjeTVyYm05aVJHRjBZUzVzWlhabGJDazdYRzRnSUNBZ0lDQjBhR2x6TG1acGJHeGlZWEl1YzJWMFFYUjBjbWxpZFhSbEtDZG9aV2xuYUhRbkxHZ3BPMXh1SUNBZ0lIMWNiaUFnSUNCMGFHbHpMbVpwYkd4aVlYSXVjMlYwUVhSMGNtbGlkWFJsS0NkMGNtRnVjMlp2Y20wbkxHSmhjazltWm5ObGRDazdYRzRnSUNBZ2RHaHBjeTVtYVd4c1ltRnlMbk5sZEVGMGRISnBZblYwWlNnbmNuZ25MR052Y201bGNsSmhaR2wxY3lrN1hHNGdJQ0FnZEdocGN5NW1hV3hzWW1GeUxuTmxkRUYwZEhKcFluVjBaU2duY25rbkxHTnZjbTVsY2xKaFpHbDFjeWs3WEc1Y2JpQWdJQ0JwWmlBb2RHaHBjeTV2Y21sbGJuUmhkR2x2YmlBOVBUMGdKM1psY25ScFkyRnNKeWtnZTF4dUlDQWdJQ0FnZEdocGN5NXJibTlpTG5ObGRFRjBkSEpwWW5WMFpTZ25ZM2duTEhncE8xeHVJQ0FnSUNBZ2RHaHBjeTVyYm05aUxuTmxkRUYwZEhKcFluVjBaU2duWTNrbkxIUm9hWE11YTI1dllrUmhkR0V1YkdWMlpXd3BPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCMGFHbHpMbXR1YjJJdWMyVjBRWFIwY21saWRYUmxLQ2RqZUNjc2RHaHBjeTVyYm05aVJHRjBZUzVzWlhabGJDazdYRzRnSUNBZ0lDQjBhR2x6TG10dWIySXVjMlYwUVhSMGNtbGlkWFJsS0NkamVTY3NlU2s3WEc0Z0lDQWdmVnh1SUNBZ0lIUm9hWE11YTI1dllpNXpaWFJCZEhSeWFXSjFkR1VvSjNJbkxIUm9hWE11YTI1dllrUmhkR0V1Y2lrN1hHNWNiaUFnZlZ4dVhHNGdJR052Ykc5eVNXNTBaWEptWVdObEtDa2dlMXh1SUNBZ0lIUm9hWE11WW1GeUxuTmxkRUYwZEhKcFluVjBaU2duWm1sc2JDY3NJSFJvYVhNdVkyOXNiM0p6TG1acGJHd3BPMXh1SUNBZ0lIUm9hWE11Wm1sc2JHSmhjaTV6WlhSQmRIUnlhV0oxZEdVb0oyWnBiR3duTENCMGFHbHpMbU52Ykc5eWN5NWhZMk5sYm5RcE8xeHVJQ0FnSUhSb2FYTXVhMjV2WWk1elpYUkJkSFJ5YVdKMWRHVW9KMlpwYkd3bkxDQjBhR2x6TG1OdmJHOXljeTVoWTJObGJuUXBPMXh1SUNCOVhHNWNibHh1SUNCeVpXNWtaWElvS1NCN1hHNGdJQ0FnYVdZZ0tDRjBhR2x6TG1Oc2FXTnJaV1FwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVhMjV2WWtSaGRHRXVjaUE5SUhSb2FYTXVkR2hwWTJ0dVpYTnpLakF1TnpVN1hHNGdJQ0FnZlZ4dUlDQWdJSFJvYVhNdWEyNXZZaTV6WlhSQmRIUnlhV0oxZEdVb0ozSW5MSFJvYVhNdWEyNXZZa1JoZEdFdWNpazdYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NXZjbWxsYm5SaGRHbHZiaUE5UFQwZ0ozWmxjblJwWTJGc0p5a2dlMXh1SUNCY2RDQWdJSFJvYVhNdWEyNXZZa1JoZEdFdWJHVjJaV3dnUFNCMGFHbHpMbXR1YjJKRVlYUmhMbklyZEdocGN5NWZkbUZzZFdVdWJtOXliV0ZzYVhwbFpDb29kR2hwY3k1b1pXbG5hSFF0ZEdocGN5NXJibTlpUkdGMFlTNXlLaklwTzF4dUlDQWdJQ0FnSUhSb2FYTXVhMjV2WWk1elpYUkJkSFJ5YVdKMWRHVW9KMk41Snl4MGFHbHpMbWhsYVdkb2RDQXRJSFJvYVhNdWEyNXZZa1JoZEdFdWJHVjJaV3dwTzF4dUlDQWdJQ0FnSUhSb2FYTXVabWxzYkdKaGNpNXpaWFJCZEhSeWFXSjFkR1VvSjNrbkxIUm9hWE11YUdWcFoyaDBJQzBnZEdocGN5NXJibTlpUkdGMFlTNXNaWFpsYkNrN1hHNGdJQ0FnSUNBZ2RHaHBjeTVtYVd4c1ltRnlMbk5sZEVGMGRISnBZblYwWlNnbmFHVnBaMmgwSnl4MGFHbHpMbXR1YjJKRVlYUmhMbXhsZG1Wc0tUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQmNkQ0FnSUhSb2FYTXVhMjV2WWtSaGRHRXViR1YyWld3Z1BTQjBhR2x6TGw5MllXeDFaUzV1YjNKdFlXeHBlbVZrS2loMGFHbHpMbmRwWkhSb0xYUm9hWE11YTI1dllrUmhkR0V1Y2lveUtTdDBhR2x6TG10dWIySkVZWFJoTG5JN1hHNGdJQ0FnSUNBZ2RHaHBjeTVyYm05aUxuTmxkRUYwZEhKcFluVjBaU2duWTNnbkxIUm9hWE11YTI1dllrUmhkR0V1YkdWMlpXd3BPMXh1SUNBZ0lDQWdJSFJvYVhNdVptbHNiR0poY2k1elpYUkJkSFJ5YVdKMWRHVW9KM2duTERBcE8xeHVJQ0FnSUNBZ0lIUm9hWE11Wm1sc2JHSmhjaTV6WlhSQmRIUnlhV0oxZEdVb0ozZHBaSFJvSnl4MGFHbHpMbXR1YjJKRVlYUmhMbXhsZG1Wc0tUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dVhHNGdJR05zYVdOcktDa2dlMXh1SUNBZ0lIUm9hWE11YTI1dllrUmhkR0V1Y2lBOUlIUm9hWE11ZEdocFkydHVaWE56S2pBdU9UdGNiaUFnSUNCMGFHbHpMbkJ2YzJsMGFXOXVMbUZ1WTJodmNpQTlJSFJvYVhNdWJXOTFjMlU3WEc0Z0lDQWdkR2hwY3k1dGIzWmxLQ2s3WEc0Z0lIMWNibHh1SUNCdGIzWmxLQ2tnZTF4dUlDQWdJR2xtSUNoMGFHbHpMbU5zYVdOclpXUXBJSHRjYmlBZ0lDQWdJSFJvYVhNdWNHOXphWFJwYjI0dWRYQmtZWFJsS0hSb2FYTXViVzkxYzJVcE8xeHVJQ0FnSUNBZ2RHaHBjeTVmZG1Gc2RXVXVkWEJrWVhSbFRtOXliV0ZzS0NCMGFHbHpMbkJ2YzJsMGFXOXVMblpoYkhWbElDazdYRzRnSUNBZ0lDQjBhR2x6TG1WdGFYUW9KMk5vWVc1blpTY3NkR2hwY3k1ZmRtRnNkV1V1ZG1Gc2RXVXBPMXh1SUNBZ0lDQWdkR2hwY3k1eVpXNWtaWElvS1R0Y2JseHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lISmxiR1ZoYzJVb0tTQjdYRzRnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmlBZ2ZWeHVYRzRnSUdkbGRDQnViM0p0WVd4cGVtVmtLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TGw5MllXeDFaUzV1YjNKdFlXeHBlbVZrTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUZSb1pTQnpiR2xrWlhJbmN5QmpkWEp5Wlc1MElIWmhiSFZsTGlCSlppQnpaWFFnYldGdWRXRnNiSGtzSUhkcGJHd2dkWEJrWVhSbElIUm9aU0JwYm5SbGNtWmhZMlVnWVc1a0lIUnlhV2RuWlhJZ2RHaGxJRzkxZEhCMWRDQmxkbVZ1ZEM1Y2JpQWdRSFI1Y0dVZ2UyNTFiV0psY24xY2JpQWdRR1Y0WVcxd2JHVWdjMnhwWkdWeUxuWmhiSFZsSUQwZ01UQTdYRzRnSUNvdlhHNGdJR2RsZENCMllXeDFaU2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1ZmRtRnNkV1V1ZG1Gc2RXVTdYRzRnSUgxY2JpQWdjMlYwSUhaaGJIVmxLSFlwSUh0Y2JpQWdJQ0IwYUdsekxsOTJZV3gxWlM1MWNHUmhkR1VvZGlrN1hHNGdJQ0FnZEdocGN5NXdiM05wZEdsdmJpNTJZV3gxWlNBOUlIUm9hWE11WDNaaGJIVmxMbTV2Y20xaGJHbDZaV1E3WEc0Z0lDQWdkR2hwY3k1bGJXbDBLQ2RqYUdGdVoyVW5MSFJvYVhNdVgzWmhiSFZsTG5aaGJIVmxLVHRjYmlBZ0lDQjBhR2x6TG5KbGJtUmxjaWdwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUV4dmQyVnlJR3hwYldsMElHOW1JSFJvWlNCemJHbGtaWEp6SjNNZ2IzVjBjSFYwSUhKaGJtZGxYRzRnSUVCMGVYQmxJSHR1ZFcxaVpYSjlYRzRnSUVCbGVHRnRjR3hsSUhOc2FXUmxjaTV0YVc0Z1BTQXhNREF3TzF4dUlDQXFMMXh1SUNCblpYUWdiV2x1S0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxsOTJZV3gxWlM1dGFXNDdYRzRnSUgxY2JpQWdjMlYwSUcxcGJpaDJLU0I3WEc0Z0lDQWdkR2hwY3k1ZmRtRnNkV1V1YldsdUlEMGdkanRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0JWY0hCbGNpQnNhVzFwZENCdlppQjBhR1VnYzJ4cFpHVnlKM01nYjNWMGNIVjBJSEpoYm1kbFhHNGdJRUIwZVhCbElIdHVkVzFpWlhKOVhHNGdJRUJsZUdGdGNHeGxJSE5zYVdSbGNpNXRZWGdnUFNBeE1EQXdPMXh1SUNBcUwxeHVJQ0JuWlhRZ2JXRjRLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TGw5MllXeDFaUzV0WVhnN1hHNGdJSDFjYmlBZ2MyVjBJRzFoZUNoMktTQjdYRzRnSUNBZ2RHaHBjeTVmZG1Gc2RXVXViV0Y0SUQwZ2RqdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQlVhR1VnYVc1amNtVnRaVzUwSUhSb1lYUWdkR2hsSUhOc2FXUmxjaWR6SUhaaGJIVmxJR05vWVc1blpYTWdZbmt1WEc0Z0lFQjBlWEJsSUh0dWRXMWlaWEo5WEc0Z0lFQmxlR0Z0Y0d4bElITnNhV1JsY2k1emRHVndJRDBnTlR0Y2JpQWdLaTljYmlBZ1oyVjBJSE4wWlhBb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVYM1poYkhWbExuTjBaWEE3WEc0Z0lIMWNiaUFnYzJWMElITjBaWEFvZGlrZ2UxeHVJQ0FnSUhSb2FYTXVYM1poYkhWbExuTjBaWEFnUFNCMk8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lFRmljMjlzZFhSbElHMXZaR1VnS0hOc2FXUmxjaWR6SUhaaGJIVmxJR3AxYlhCeklIUnZJRzF2ZFhObElHTnNhV05ySUhCdmMybDBhVzl1S1NCdmNpQnlaV3hoZEdsMlpTQnRiMlJsSUNodGIzVnpaU0JrY21GbklHTm9ZVzVuWlhNZ2RtRnNkV1VnY21Wc1lYUnBkbVVnZEc4Z2FYUnpJR04xY25KbGJuUWdjRzl6YVhScGIyNHBMaUJFWldaaGRXeDBPaUJjSW5KbGJHRjBhWFpsWENJdVhHNGdJRUIwZVhCbElIdHpkSEpwYm1kOVhHNGdJRUJsZUdGdGNHeGxJSE5zYVdSbGNpNXRiMlJsSUQwZ1hDSnlaV3hoZEdsMlpWd2lPMXh1SUNBcUwxeHVJQ0JuWlhRZ2JXOWtaU2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1d2IzTnBkR2x2Ymk1dGIyUmxPMXh1SUNCOVhHNGdJSE5sZENCdGIyUmxLSFlwSUh0Y2JpQWdJQ0IwYUdsekxuQnZjMmwwYVc5dUxtMXZaR1VnUFNCMk8xeHVJQ0I5WEc1Y2JseHVYRzU5WEc1Y2JseHVYRzR2THlCWFJVSlFRVU5MSUVaUFQxUkZVaUF2TDF4dUx5OGdMaTkrTDJwemFHbHVkQzFzYjJGa1pYSWhMaTlzYVdJdmFXNTBaWEptWVdObGN5OXpiR2xrWlhJdWFuTWlMQ0luZFhObElITjBjbWxqZENjN1hHNWNibXhsZENCemRtY2dQU0J5WlhGMWFYSmxLQ2N1TGk5MWRHbHNMM04yWnljcE8xeHViR1YwSUZSdloyZHNaVTF2WkdWc0lEMGdjbVZ4ZFdseVpTZ25MaTR2Ylc5a1pXeHpMM1J2WjJkc1pTY3BPMXh1YkdWMElFbHVkR1Z5Wm1GalpTQTlJSEpsY1hWcGNtVW9KeTR1TDJOdmNtVXZhVzUwWlhKbVlXTmxKeWs3WEc1Y2JpOHFLbHh1S2lCVWIyZG5iR1ZjYmlwY2Jpb2dRR1JsYzJOeWFYQjBhVzl1SUVKcGJtRnllU0J6ZDJsMFkyaGNiaXBjYmlvZ1FHUmxiVzhnUEhOd1lXNGdibVY0ZFhNdGRXazlYQ0owYjJkbmJHVmNJajQ4TDNOd1lXNCtYRzRxWEc0cUlFQmxlR0Z0Y0d4bFhHNHFJSFpoY2lCMGIyZG5iR1VnUFNCdVpYY2dUbVY0ZFhNdVZHOW5aMnhsS0NjamRHRnlaMlYwSnlsY2JpcGNiaW9nUUdWNFlXMXdiR1ZjYmlvZ2RtRnlJSFJ2WjJkc1pTQTlJRzVsZHlCT1pYaDFjeTVVYjJkbmJHVW9KeU4wWVhKblpYUW5MSHRjYmlvZ0lDQWdJQ2R6YVhwbEp6b2dXelF3TERJd1hTeGNiaW9nSUNBZ0lDZHpkR0YwWlNjNklHWmhiSE5sWEc0cUlIMHBYRzRxWEc0cUlFQnZkWFJ3ZFhSY2Jpb2dZMmhoYm1kbFhHNHFJRVpwY21WeklHRnVlU0IwYVcxbElIUm9aU0JwYm5SbGNtWmhZMlVuY3lCMllXeDFaU0JqYUdGdVoyVnpMaUE4WW5JK1hHNHFJRkJoY21GdFpYUmxjam9nVkdobElHSnZiMnhsWVc0Z2MzUmhkR1VnYjJZZ2RHaGxJR2x1ZEdWeVptRmpaUzVjYmlwY2Jpb2dRRzkxZEhCMWRHVjRZVzF3YkdWY2Jpb2dkRzluWjJ4bExtOXVLQ2RqYUdGdVoyVW5MR1oxYm1OMGFXOXVLSFlwSUh0Y2Jpb2dJQ0JqYjI1emIyeGxMbXh2WnloMktUdGNiaW9nZlNsY2JpcGNiaXBjYmlvdlhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCamJHRnpjeUJVYjJkbmJHVWdaWGgwWlc1a2N5QkpiblJsY21aaFkyVWdlMXh1WEc0Z0lHTnZibk4wY25WamRHOXlLQ2tnZTF4dVhHNGdJQ0FnYkdWMElHOXdkR2x2Ym5NZ1BTQmJKM1poYkhWbEoxMDdYRzVjYmlBZ0lDQnNaWFFnWkdWbVlYVnNkSE1nUFNCN1hHNGdJQ0FnSUNBbmMybDZaU2M2SUZzME1Dd3lNRjBzWEc0Z0lDQWdJQ0FuZEdGeVoyVjBKem9nWm1Gc2MyVXNYRzRnSUNBZ0lDQW5jM1JoZEdVbk9pQm1ZV3h6WlZ4dUlDQWdJSDA3WEc1Y2JpQWdJQ0J6ZFhCbGNpaGhjbWQxYldWdWRITXNiM0IwYVc5dWN5eGtaV1poZFd4MGN5azdYRzVjYmlBZ0lDQjBhR2x6TGw5emRHRjBaU0E5SUc1bGR5QlViMmRuYkdWTmIyUmxiQ2gwYUdsekxuTmxkSFJwYm1kekxuTjBZWFJsS1R0Y2JseHVJQ0FnSUhSb2FYTXVhVzVwZENncE8xeHVYRzRnSUgxY2JseHVJQ0JpZFdsc1pFbHVkR1Z5Wm1GalpTZ3BJSHRjYmx4dUlDQWdJSFJvYVhNdVltRnlJRDBnYzNabkxtTnlaV0YwWlNnbmNtVmpkQ2NwTzF4dUlDQWdJSFJvYVhNdWEyNXZZaUE5SUhOMlp5NWpjbVZoZEdVb0oyTnBjbU5zWlNjcE8xeHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNWhjSEJsYm1SRGFHbHNaQ2gwYUdsekxtSmhjaWs3WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG1Gd2NHVnVaRU5vYVd4a0tIUm9hWE11YTI1dllpazdYRzVjYmlBZ2ZWeHVYRzRnSUhOcGVtVkpiblJsY21aaFkyVW9LU0I3WEc1Y2JpQWdJQ0JwWmlBb2RHaHBjeTVvWldsbmFIUWdQQ0IwYUdsekxuZHBaSFJvTHpJcElIdGNiaUFnSUNBZ0lIUm9hWE11YTI1dllsTnBlbVVnUFNCMGFHbHpMbWhsYVdkb2RDOHlPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCMGFHbHpMbXR1YjJKVGFYcGxJRDBnZEdocGN5NTNhV1IwYUM4ME8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhSb2FYTXVZbUZ5TG5ObGRFRjBkSEpwWW5WMFpTZ25lQ2NzZEdocGN5NTNhV1IwYUM4eUlDMGdkR2hwY3k1cmJtOWlVMmw2WlNveExqVXBPMXh1SUNBZ0lIUm9hWE11WW1GeUxuTmxkRUYwZEhKcFluVjBaU2duZVNjc2RHaHBjeTVvWldsbmFIUXZNaUF0SUhSb2FYTXVhMjV2WWxOcGVtVXZNaWs3WEc0Z0lDQWdkR2hwY3k1aVlYSXVjMlYwUVhSMGNtbGlkWFJsS0NkeWVDY3NkR2hwY3k1cmJtOWlVMmw2WlM4eUtUdGNiaUFnSUNCMGFHbHpMbUpoY2k1elpYUkJkSFJ5YVdKMWRHVW9KM0o1Snl4MGFHbHpMbXR1YjJKVGFYcGxMeklwTzF4dUlDQWdJSFJvYVhNdVltRnlMbk5sZEVGMGRISnBZblYwWlNnbmQybGtkR2duTEhSb2FYTXVhMjV2WWxOcGVtVXFNeWs3WEc0Z0lDQWdkR2hwY3k1aVlYSXVjMlYwUVhSMGNtbGlkWFJsS0Nkb1pXbG5hSFFuTEhSb2FYTXVhMjV2WWxOcGVtVXBPMXh1WEc0Z0lDQWdkR2hwY3k1cmJtOWlMbk5sZEVGMGRISnBZblYwWlNnblkzZ25MSFJvYVhNdWQybGtkR2d2TWlBdElIUm9hWE11YTI1dllsTnBlbVVwTzF4dUlDQWdJSFJvYVhNdWEyNXZZaTV6WlhSQmRIUnlhV0oxZEdVb0oyTjVKeXgwYUdsekxtaGxhV2RvZEM4eUtUdGNiaUFnSUNCMGFHbHpMbXR1YjJJdWMyVjBRWFIwY21saWRYUmxLQ2R5Snl4MGFHbHpMbXR1YjJKVGFYcGxLVHRjYmx4dUlDQjlYRzVjYmlBZ1kyOXNiM0pKYm5SbGNtWmhZMlVvS1NCN1hHNGdJQ0FnZEdocGN5NXJibTlpTG5ObGRFRjBkSEpwWW5WMFpTZ25abWxzYkNjc0lIUm9hWE11WTI5c2IzSnpMbUZqWTJWdWRDazdYRzRnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmlBZ2ZWeHVYRzRnSUhKbGJtUmxjaWdwSUh0Y2JpQWdJQ0JwWmlBb0lYUm9hWE11YzNSaGRHVXBJSHRjYmlBZ0lDQWdJSFJvYVhNdWEyNXZZaTV6WlhSQmRIUnlhV0oxZEdVb0oyTjRKeXgwYUdsekxuZHBaSFJvTHpJZ0xTQjBhR2x6TG10dWIySlRhWHBsS1R0Y2JpQWdJQ0FnSUhSb2FYTXVZbUZ5TG5ObGRFRjBkSEpwWW5WMFpTZ25abWxzYkNjc0lIUm9hWE11WTI5c2IzSnpMbVpwYkd3cE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0IwYUdsekxtdHViMkl1YzJWMFFYUjBjbWxpZFhSbEtDZGplQ2NzZEdocGN5NTNhV1IwYUM4eUlDc2dkR2hwY3k1cmJtOWlVMmw2WlNrN1hHNGdJQ0FnSUNCMGFHbHpMbUpoY2k1elpYUkJkSFJ5YVdKMWRHVW9KMlpwYkd3bkxDQjBhR2x6TG1OdmJHOXljeTVoWTJObGJuUXBPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJR05zYVdOcktDa2dlMXh1SUNBZ0lIUm9hWE11Wm14cGNDZ3BPMXh1SUNBZ0lIUm9hWE11Y21WdVpHVnlLQ2s3WEc0Z0lDQWdkR2hwY3k1bGJXbDBLQ2RqYUdGdVoyVW5MSFJvYVhNdWMzUmhkR1VwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUZkb1pYUm9aWElnZEdobElIUnZaMmRzWlNCcGN5QmpkWEp5Wlc1MGJIa2diMjRnYjNJZ2IyWm1MaUJUWlhSMGFXNW5JSFJvYVhNZ2NISnZjR1Z5ZEhrZ2QybHNiQ0IxY0dSaGRHVWdkR2hsSUhSdloyZHNaU0JwYm5SbGNtWmhZMlVnWVc1a0lIUnlhV2RuWlhJZ2RHaGxJRzkxZEhCMWRDQmxkbVZ1ZEM1Y2JpQWdRSFI1Y0dVZ2UySnZiMnhsWVc1OVhHNGdJRUJsZUdGdGNHeGxJSFJ2WjJkc1pTNXpkR0YwWlNBOUlHWmhiSE5sTzF4dUlDQXFMMXh1SUNCblpYUWdjM1JoZEdVb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVYM04wWVhSbExuTjBZWFJsTzF4dUlDQjlYRzRnSUhObGRDQnpkR0YwWlNoMllXeDFaU2tnZTF4dUlDQWdJSFJvYVhNdVgzTjBZWFJsTG1ac2FYQW9kbUZzZFdVcE8xeHVJQ0FnSUhSb2FYTXVaVzFwZENnblkyaGhibWRsSnl4MGFHbHpMbk4wWVhSbEtUdGNiaUFnSUNCMGFHbHpMbkpsYm1SbGNpZ3BPMXh1SUNCOVhHNWNibHh1SUNBdktpcGNiaUFnS2lCVGQybDBZMmdnZEdobElIUnZaMmRzWlNCemRHRjBaU0IwYnlCcGRITWdiM0J3YjNOcGRHVWdjM1JoZEdWY2JpQWdLaUJBWlhoaGJYQnNaVnh1SUNBcUlIUnZaMmRzWlM1bWJHbHdLQ2s3WEc0Z0lDb3ZYRzRnSUdac2FYQW9LU0I3WEc0Z0lDQWdkR2hwY3k1ZmMzUmhkR1V1Wm14cGNDZ3BPMXh1SUNBZ0lIUm9hWE11Y21WdVpHVnlLQ2s3WEc0Z0lIMWNibHh1ZlZ4dVhHNWNibHh1THk4Z1YwVkNVRUZEU3lCR1QwOVVSVklnTHk5Y2JpOHZJQzR2Zmk5cWMyaHBiblF0Ykc5aFpHVnlJUzR2YkdsaUwybHVkR1Z5Wm1GalpYTXZkRzluWjJ4bExtcHpJaXdpSjNWelpTQnpkSEpwWTNRbk8xeHVYRzVzWlhRZ2MzWm5JRDBnY21WeGRXbHlaU2duTGk0dmRYUnBiQzl6ZG1jbktUdGNibXhsZENCQ2RYUjBiMjVVWlcxd2JHRjBaU0E5SUhKbGNYVnBjbVVvSnk0dUwyTnZiWEJ2Ym1WdWRITXZZblYwZEc5dWRHVnRjR3hoZEdVbktUdGNibHh1THlvcVhHNHFJRUoxZEhSdmJseHVLbHh1S2lCQVpHVnpZM0pwY0hScGIyNGdRMmx5WTNWc1lYSWdZblYwZEc5dUlIZHBkR2dnYjNCMGFXOXVZV3dnWVdaMFpYSjBiM1ZqYUM1Y2JpcGNiaW9nUUdSbGJXOGdQSE53WVc0Z2JtVjRkWE10ZFdrOVhDSmlkWFIwYjI1Y0lqNDhMM053WVc0K1hHNHFYRzRxSUVCbGVHRnRjR3hsWEc0cUlIWmhjaUJpZFhSMGIyNGdQU0J1WlhjZ1RtVjRkWE11UW5WMGRHOXVLQ2NqZEdGeVoyVjBKeWxjYmlwY2Jpb2dRR1Y0WVcxd2JHVmNiaW9nZG1GeUlHSjFkSFJ2YmlBOUlHNWxkeUJPWlhoMWN5NUNkWFIwYjI0b0p5TjBZWEpuWlhRbkxIdGNiaW9nSUNBbmMybDZaU2M2SUZzNE1DdzRNRjBzWEc0cUlDQWdKMjF2WkdVbk9pQW5ZV1owWlhKMGIzVmphQ2NzWEc0cUlDQWdKM04wWVhSbEp6b2dabUZzYzJWY2Jpb2dmU2xjYmlwY2Jpb2dRRzkxZEhCMWRGeHVLaUJqYUdGdVoyVmNiaW9nUm1seVpYTWdZVzU1SUhScGJXVWdkR2hsSUdsdWRHVnlabUZqWlNkeklIWmhiSFZsSUdOb1lXNW5aWE11SUR4aWNqNWNiaW9nU1c0Z1BHSStZblYwZEc5dUlHMXZaR1U4TDJJK0xDQThZajUwYjJkbmJHVWdiVzlrWlR3dllqNHNJR0Z1WkNBOFlqNXBiWEIxYkhObElHMXZaR1U4TDJJK0xDQjBhR1VnYjNWMGNIVjBJR1JoZEdFZ2FYTWdZU0JpYjI5c1pXRnVJR1JsYzJOeWFXSnBibWNnZEdobElITjBZWFJsSUc5bUlIUm9aU0JpZFhSMGIyNHVQR0p5UGx4dUtpQkpiaUE4WWo1aFpuUmxjblJ2ZFdOb0lHMXZaR1U4TDJJK0xDQjBhR1VnYjNWMGNIVjBJR1JoZEdFZ2FYTWdZVzRnYjJKcVpXTjBJR052Ym5SaGFXNXBibWNnZUNBb01DMHhLU0JoYm1RZ2VTQW9NQzB4S1NCd2IzTnBkR2x2Ym5NZ2IyWWdZV1owWlhKMGIzVmphQzVjYmlwY2Jpb2dRRzkxZEhCMWRHVjRZVzF3YkdWY2Jpb2dZblYwZEc5dUxtOXVLQ2RqYUdGdVoyVW5MR1oxYm1OMGFXOXVLSFlwSUh0Y2Jpb2dJQ0F2THlCMklHbHpJSFJvWlNCMllXeDFaU0J2WmlCMGFHVWdZblYwZEc5dVhHNHFJQ0FnWTI5dWMyOXNaUzVzYjJjb2RpazdYRzRxSUgwcFhHNHFYRzRxTDF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCamJHRnpjeUJDZFhSMGIyNGdaWGgwWlc1a2N5QkNkWFIwYjI1VVpXMXdiR0YwWlNCN1hHNWNiaUFnWTI5dWMzUnlkV04wYjNJb0tTQjdYRzVjYmlBZ0lDQnNaWFFnYjNCMGFXOXVjeUE5SUZzbmJXOWtaU2RkTzF4dVhHNWNiaUFnSUNCc1pYUWdaR1ZtWVhWc2RITWdQU0I3WEc0Z0lDQWdJQ0FuYzJsNlpTYzZJRnM0TUN3NE1GMHNYRzRnSUNBZ0lDQW5iVzlrWlNjNklDZGhablJsY25SdmRXTm9KeXdnTHk4Z1luVjBkRzl1TENCaFpuUmxjblJ2ZFdOb0xDQnBiWEIxYkhObExDQjBiMmRuYkdWY2JpQWdJQ0FnSUNkemRHRjBaU2M2SUdaaGJITmxYRzRnSUNBZ2ZUdGNibHh1SUNBZ0lITjFjR1Z5S0dGeVozVnRaVzUwY3l4dmNIUnBiMjV6TEdSbFptRjFiSFJ6S1R0Y2JseHVYRzRnSUNBZ0x5b3FYRzRnSUNBZ0tpQkpiblJsY21GamRHbHZiaUJ0YjJSbE9pQnpkWEJ3YjNKMGN5QmNJbUoxZEhSdmJsd2lMQ0JjSW1GbWRHVnlkRzkxWTJoY0lpd2dYQ0pwYlhCMWJITmxYQ0lzSUc5eUlGd2lkRzluWjJ4bFhDSmNiaUFnSUNBcUlFQjBlWEJsSUh0emRISnBibWQ5WEc0Z0lDQWdLaUJBWlhoaGJYQnNaU0JpZFhSMGIyNHViVzlrWlNBOUlDZDBiMmRuYkdVbk8xeHVJQ0FnSUNvdlhHNGdJQ0FnZEdocGN5NXRiMlJsSUQwZ2RHaHBjeTV6WlhSMGFXNW5jeTV0YjJSbE8xeHVYRzRnSUNBZ2RHaHBjeTVwYm1sMEtDazdYRzRnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmx4dUlDQjlYRzVjYmlBZ1luVnBiR1JKYm5SbGNtWmhZMlVvS1NCN1hHNGdJQ0FnZEdocGN5NXdZV1FnUFNCemRtY3VZM0psWVhSbEtDZGphWEpqYkdVbktUdGNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUXVZWEJ3Wlc1a1EyaHBiR1FvZEdocGN5NXdZV1FwTzF4dVhHNGdJQ0FnZEdocGN5NXBiblJsY21GamRHbHZibFJoY21kbGRDQTlJSFJvYVhNdWNHRmtPMXh1WEc0Z0lDQWdMeThnYjI1c2VTQjFjMlZrSUdsbUlHbHVJQ2RoWm5SbGNuUnZkV05vSnlCdGIyUmxYRzRnSUNBZ2RHaHBjeTVrWldaeklEMGdjM1puTG1OeVpXRjBaU2duWkdWbWN5Y3BPMXh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkQzVoY0hCbGJtUkRhR2xzWkNoMGFHbHpMbVJsWm5NcE8xeHVYRzRnSUNBZ2RHaHBjeTVuY21Ga2FXVnVkQ0E5SUhOMlp5NXlZV1JwWVd4SGNtRmthV1Z1ZENoMGFHbHpMbVJsWm5Nc01pazdYRzVjYmlBZ0lDQjBhR2x6TG1keVlXUnBaVzUwTG5OMGIzQnpXekJkTG5ObGRFRjBkSEpwWW5WMFpTZ25iMlptYzJWMEp5d2dKek13SlNjcE8xeHVYRzRnSUNBZ2RHaHBjeTVuY21Ga2FXVnVkQzV6ZEc5d2Mxc3hYUzV6WlhSQmRIUnlhV0oxZEdVb0oyOW1abk5sZENjc0lDY3hNREFsSnlrN1hHNWNiaUFnZlZ4dVhHNGdJSE5wZW1WSmJuUmxjbVpoWTJVb0tTQjdYRzVjYmlBZ0lDQjBhR2x6TG5CaFpDNXpaWFJCZEhSeWFXSjFkR1VvSjJONEp5eDBhR2x6TG5kcFpIUm9MeklwTzF4dUlDQWdJSFJvYVhNdWNHRmtMbk5sZEVGMGRISnBZblYwWlNnblkza25MSFJvYVhNdWFHVnBaMmgwTHpJcE8xeHVJQ0FnSUhSb2FYTXVjR0ZrTG5ObGRFRjBkSEpwWW5WMFpTZ25jaWNzSUUxaGRHZ3ViV2x1S0hSb2FYTXVkMmxrZEdnc2RHaHBjeTVvWldsbmFIUXBJQzhnTWlBdElIUm9hWE11ZDJsa2RHZ3ZOREFwTzF4dUlDQWdJSFJvYVhNdWNHRmtMbk5sZEVGMGRISnBZblYwWlNnbmMzUnliMnRsTFhkcFpIUm9KeXdnZEdocGN5NTNhV1IwYUM4eU1DazdYRzRnSUgxY2JseHVJQ0JqYjJ4dmNrbHVkR1Z5Wm1GalpTZ3BJSHRjYmx4dUlDQWdJSFJvYVhNdVozSmhaR2xsYm5RdWMzUnZjSE5iTUYwdWMyVjBRWFIwY21saWRYUmxLQ2R6ZEc5d0xXTnZiRzl5Snl3Z2RHaHBjeTVqYjJ4dmNuTXVZV05qWlc1MEtUdGNiaUFnSUNCMGFHbHpMbWR5WVdScFpXNTBMbk4wYjNCeld6RmRMbk5sZEVGMGRISnBZblYwWlNnbmMzUnZjQzFqYjJ4dmNpY3NJSFJvYVhNdVkyOXNiM0p6TG1acGJHd3BPMXh1SUNBZ0lIUm9hWE11Y21WdVpHVnlLQ2s3WEc0Z0lIMWNibHh1SUNBdktseHVJQ0FxSUZWd1pHRjBaU0IwYUdVZ2RtbHpkV0ZzSUdsdWRHVnlabUZqWlNCMWMybHVaeUJwZEhNZ1kzVnljbVZ1ZENCemRHRjBaVnh1SUNBcVhHNGdJQ29nUUdWNFlXMXdiR1ZjYmlBZ0tpQmlkWFIwYjI0dWNtVnVaR1Z5S0NrN1hHNGdJQ292WEc0Z0lISmxibVJsY2lncElIdGNiaUFnSUNCcFppQW9JWFJvYVhNdWMzUmhkR1VwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVjR0ZrTG5ObGRFRjBkSEpwWW5WMFpTZ25abWxzYkNjc0lIUm9hWE11WTI5c2IzSnpMbVpwYkd3cE8xeHVJQ0FnSUNBZ2RHaHBjeTV3WVdRdWMyVjBRWFIwY21saWRYUmxLQ2R6ZEhKdmEyVW5MQ0IwYUdsekxtTnZiRzl5Y3k1dFpXUnBkVzFNYVdkb2RDazdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUdsbUlDaDBhR2x6TG0xdlpHVTlQVDBuWVdaMFpYSjBiM1ZqYUNjcElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1d1lXUXVjMlYwUVhSMGNtbGlkWFJsS0NkemRISnZhMlVuTENBbmRYSnNLQ01uSzNSb2FYTXVaM0poWkdsbGJuUXVhV1FySnlrbktUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1bmNtRmthV1Z1ZEM1bGJHVnRaVzUwTG5ObGRFRjBkSEpwWW5WMFpTZ25ZM2duTENBb2RHaHBjeTV3YjNOcGRHbHZiaTU0S2pFd01Da3JKeVVuS1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVuY21Ga2FXVnVkQzVsYkdWdFpXNTBMbk5sZEVGMGRISnBZblYwWlNnblkza25MQ0FvS0RFdGRHaHBjeTV3YjNOcGRHbHZiaTU1S1NveE1EQXBLeWNsSnlrN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbkJoWkM1elpYUkJkSFJ5YVdKMWRHVW9KM04wY205clpTY3NJSFJvYVhNdVkyOXNiM0p6TG1GalkyVnVkQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0IwYUdsekxuQmhaQzV6WlhSQmRIUnlhV0oxZEdVb0oyWnBiR3duTENCMGFHbHpMbU52Ykc5eWN5NWhZMk5sYm5RcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc1OVhHNWNibHh1WEc0dkx5QlhSVUpRUVVOTElFWlBUMVJGVWlBdkwxeHVMeThnTGk5K0wycHphR2x1ZEMxc2IyRmtaWEloTGk5c2FXSXZhVzUwWlhKbVlXTmxjeTlpZFhSMGIyNHVhbk1pTENJbmRYTmxJSE4wY21samRDYzdYRzVjYm14bGRDQnpkbWNnUFNCeVpYRjFhWEpsS0NjdUxpOTFkR2xzTDNOMlp5Y3BPMXh1YkdWMElHMWhkR2dnUFNCeVpYRjFhWEpsS0NjdUxpOTFkR2xzTDIxaGRHZ25LVHRjYm14bGRDQlViMmRuYkdWTmIyUmxiQ0E5SUhKbGNYVnBjbVVvSnk0dUwyMXZaR1ZzY3k5MGIyZG5iR1VuS1R0Y2JteGxkQ0JKYm5SbGNtWmhZMlVnUFNCeVpYRjFhWEpsS0NjdUxpOWpiM0psTDJsdWRHVnlabUZqWlNjcE8xeHVYRzR2S2lwY2JrSjFkSFJ2YmlCVVpXMXdiR0YwWlZ4dUtpOWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdZMnhoYzNNZ1FuVjBkRzl1VkdWdGNHeGhkR1VnWlhoMFpXNWtjeUJKYm5SbGNtWmhZMlVnZTF4dVhHNGdJR052Ym5OMGNuVmpkRzl5S0dGeVozTXNiM0IwYVc5dWN5eGtaV1poZFd4MGN5a2dlMXh1WEc0Z0lDQWdjM1Z3WlhJb1lYSm5jeXh2Y0hScGIyNXpMR1JsWm1GMWJIUnpLVHRjYmx4dUlDQWdJSFJvYVhNdWJXOWtaU0E5SUhSb2FYTXVjMlYwZEdsdVozTXViVzlrWlNCOGZDQW5ZblYwZEc5dUp6dGNibHh1SUNBZ0lIUm9hWE11Y0c5emFYUnBiMjRnUFNCN1hHNGdJQ0FnSUNCNE9pQXdMRnh1SUNBZ0lDQWdlVG9nTUZ4dUlDQWdJSDA3WEc1Y2JpQWdJQ0IwYUdsekxsOXpkR0YwWlNBOUlHNWxkeUJVYjJkbmJHVk5iMlJsYkNoMGFHbHpMbk5sZEhScGJtZHpMbk4wWVhSbEtUdGNibHh1SUNCOVhHNWNiaUFnWW5WcGJHUkpiblJsY21aaFkyVW9LU0I3WEc0Z0lDQWdkR2hwY3k1d1lXUWdQU0J6ZG1jdVkzSmxZWFJsS0NkamFYSmpiR1VuS1R0Y2JpQWdJQ0IwYUdsekxuQmhaQzV6WlhSQmRIUnlhV0oxZEdVb0oyWnBiR3duTENBbkkyUXhPQ2NwTzF4dUlDQWdJSFJvYVhNdWNHRmtMbk5sZEVGMGRISnBZblYwWlNnbmMzUnliMnRsSnl3Z0p5TmtNVGduS1R0Y2JpQWdJQ0IwYUdsekxuQmhaQzV6WlhSQmRIUnlhV0oxZEdVb0ozTjBjbTlyWlMxM2FXUjBhQ2NzSURRcE8xeHVYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbUZ3Y0dWdVpFTm9hV3hrS0hSb2FYTXVjR0ZrS1R0Y2JseHVJQ0FnSUhSb2FYTXVhVzUwWlhKaFkzUnBiMjVVWVhKblpYUWdQU0IwYUdsekxuQmhaRHRjYmx4dUlDQWdJSFJvYVhNdWMybDZaVWx1ZEdWeVptRmpaU2dwTzF4dUlDQjlYRzVjYmlBZ2MybDZaVWx1ZEdWeVptRmpaU2dwSUh0Y2JpQWdJQ0IwYUdsekxuQmhaQzV6WlhSQmRIUnlhV0oxZEdVb0oyTjRKeXgwYUdsekxuZHBaSFJvTHpJcE8xeHVJQ0FnSUhSb2FYTXVjR0ZrTG5ObGRFRjBkSEpwWW5WMFpTZ25ZM2tuTEhSb2FYTXVhR1ZwWjJoMEx6SXBPMXh1SUNBZ0lIUm9hWE11Y0dGa0xuTmxkRUYwZEhKcFluVjBaU2duY2ljc0lFMWhkR2d1YldsdUtIUm9hWE11ZDJsa2RHZ3NkR2hwY3k1b1pXbG5hSFFwSUM4Z01pQXRJRElwTzF4dUlDQjlYRzVjYmlBZ2NtVnVaR1Z5S0NrZ2UxeHVJQ0FnSUdsbUlDZ2hkR2hwY3k1emRHRjBaU2tnZTF4dUlDQWdJQ0FnZEdocGN5NXdZV1F1YzJWMFFYUjBjbWxpZFhSbEtDZG1hV3hzSnl3Z2RHaHBjeTVqYjJ4dmNuTXVabWxzYkNrN1hHNGdJQ0FnSUNCMGFHbHpMbkJoWkM1elpYUkJkSFJ5YVdKMWRHVW9KM04wY205clpTY3NJSFJvYVhNdVkyOXNiM0p6TG0xbFpHbDFiVXhwWjJoMEtUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnZEdocGN5NXdZV1F1YzJWMFFYUjBjbWxpZFhSbEtDZG1hV3hzSnl3Z2RHaHBjeTVqYjJ4dmNuTXVZV05qWlc1MEtUdGNiaUFnSUNBZ0lIUm9hWE11Y0dGa0xuTmxkRUYwZEhKcFluVjBaU2duYzNSeWIydGxKeXdnZEdocGN5NWpiMnh2Y25NdVlXTmpaVzUwS1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCa2IzZHVLSEJoYVc1MFluSjFjMmdwSUh0Y2JpQWdJQ0J6ZDJsMFkyZ2dLSFJvYVhNdWJXOWtaU2tnZTF4dUlDQWdJQ0FnWTJGelpTQW5hVzF3ZFd4elpTYzZYRzRnSUNBZ0lDQWdJSFJvYVhNdWRIVnliazl1S0NrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxuUnBiV1Z2ZFhRcElIdGNiaUFnSUNBZ0lDQWdJQ0JqYkdWaGNsUnBiV1Z2ZFhRb2RHaHBjeTUwYVcxbGIzVjBLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCMGFHbHpMblJwYldWdmRYUWdQU0J6WlhSVWFXMWxiM1YwS0hSb2FYTXVkSFZ5Yms5bVppNWlhVzVrS0hSb2FYTXBMRE13S1R0Y2JpQWdJQ0F2THlBZ0lDQjBhR2x6TG1WdGFYUW9KMk5vWVc1blpTY3NkR2hwY3k1emRHRjBaU2s3WEc0Z0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdZMkZ6WlNBblluVjBkRzl1SnpwY2JpQWdJQ0FnSUNBZ2RHaHBjeTUwZFhKdVQyNG9LVHRjYmlBZ0lDQXZMeUFnSUNCMGFHbHpMbVZ0YVhRb0oyTm9ZVzVuWlNjc2RHaHBjeTV6ZEdGMFpTazdYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ1kyRnpaU0FuWVdaMFpYSjBiM1ZqYUNjNlhHNGdJQ0FnSUNBZ0lIUm9hWE11Y0c5emFYUnBiMjRnUFNCN1hHNGdJQ0FnSUNBZ0lDQWdlRG9nYldGMGFDNWpiR2x3S0hSb2FYTXViVzkxYzJVdWVDQXZJSFJvYVhNdWQybGtkR2dzTUN3eEtTeGNiaUFnSUNBZ0lDQWdJQ0I1T2lCdFlYUm9MbU5zYVhBb01TMTBhR2x6TG0xdmRYTmxMbmtnTHlCMGFHbHpMbWhsYVdkb2RDd3dMREVwWEc0Z0lDQWdJQ0FnSUgwN1hHNGdJQ0FnSUNBZ0lIUm9hWE11ZEhWeWJrOXVLQ2s3WEc0Z0lDQWdMeThnSUNBZ2RHaHBjeTVsYldsMEtDZGphR0Z1WjJVbkxIdGNiaUFnSUNBdkx5QWdJQ0FnSUhOMFlYUmxPaUIwYUdsekxuTjBZWFJsTEZ4dUlDQWdJQzh2SUNBZ0lDQWdlRG9nZEdocGN5NXdiM05wZEdsdmJpNTRMRnh1SUNBZ0lDOHZJQ0FnSUNBZ2VUb2dkR2hwY3k1d2IzTnBkR2x2Ymk1NUxGeHVJQ0FnSUM4dklDQWdJSDBwTzF4dUlDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJR05oYzJVZ0ozUnZaMmRzWlNjNlhHNGdJQ0FnSUNBZ0lIUm9hWE11Wm14cGNDaHdZV2x1ZEdKeWRYTm9LVHRjYmlBZ0lDQXZMeUFnSUNCMGFHbHpMbVZ0YVhRb0oyTm9ZVzVuWlNjc2RHaHBjeTV6ZEdGMFpTazdYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JseHVJQ0I5WEc1Y2JpQWdZbVZ1WkNodGIzVnpaU2tnZTF4dUlDQWdJR2xtSUNoMGFHbHpMbTF2WkdVOVBUMG5ZV1owWlhKMGIzVmphQ2NwSUh0Y2JpQWdJQ0FnSUhSb2FYTXViVzkxYzJVZ1BTQnRiM1Z6WlNCOGZDQjBhR2x6TG0xdmRYTmxPMXh1SUNBZ0lDQWdkR2hwY3k1d2IzTnBkR2x2YmlBOUlIdGNiaUFnSUNBZ0lDQWdlRG9nYldGMGFDNWpiR2x3S0hSb2FYTXViVzkxYzJVdWVDQXZJSFJvYVhNdWQybGtkR2dzTUN3eEtTeGNiaUFnSUNBZ0lDQWdlVG9nYldGMGFDNWpiR2x3S0RFZ0xTQjBhR2x6TG0xdmRYTmxMbmtnTHlCMGFHbHpMbWhsYVdkb2RDd3dMREVwWEc0Z0lDQWdJQ0I5TzF4dUlDQWdJQ0FnZEdocGN5NWxiV2wwS0NkamFHRnVaMlVuTEh0Y2JpQWdJQ0FnSUNBZ2MzUmhkR1U2SUhSb2FYTXVjM1JoZEdVc1hHNGdJQ0FnSUNBZ0lIZzZJSFJvYVhNdWNHOXphWFJwYjI0dWVDeGNiaUFnSUNBZ0lDQWdlVG9nZEdocGN5NXdiM05wZEdsdmJpNTVMRnh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0IwYUdsekxuSmxibVJsY2lncE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lIVndLQ2tnZTF4dUlDQWdJSE4zYVhSamFDQW9kR2hwY3k1dGIyUmxLU0I3WEc0Z0lDQWdJQ0JqWVhObElDZGlkWFIwYjI0bk9seHVJQ0FnSUNBZ0lDQjBhR2x6TG5SMWNtNVBabVlvS1R0Y2JpQWdJQ0FnSUM4dklDQjBhR2x6TG1WdGFYUW9KMk5vWVc1blpTY3NkR2hwY3k1emRHRjBaU2s3WEc0Z0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdZMkZ6WlNBbllXWjBaWEowYjNWamFDYzZYRzRnSUNBZ0lDQWdJSFJvYVhNdWRIVnliazltWmlncE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5CdmMybDBhVzl1SUQwZ2UxeHVJQ0FnSUNBZ0lDQWdJSGc2SUcxaGRHZ3VZMnhwY0NoMGFHbHpMbTF2ZFhObExuZ2dMeUIwYUdsekxuZHBaSFJvTERBc01Ta3NYRzRnSUNBZ0lDQWdJQ0FnZVRvZ2JXRjBhQzVqYkdsd0tERWdMU0IwYUdsekxtMXZkWE5sTG5rZ0x5QjBhR2x6TG1obGFXZG9kQ3d3TERFcFhHNGdJQ0FnSUNBZ0lIMDdYRzRnSUNBZ0lDQXZMeUFnZEdocGN5NWxiV2wwS0NkamFHRnVaMlVuTEh0Y2JpQWdJQ0FnSUM4dklDQWdJSE4wWVhSbE9pQjBhR2x6TG5OMFlYUmxMRnh1SUNBZ0lDQWdMeThnSUNBZ2VEb2dkR2hwY3k1d2IzTnBkR2x2Ymk1NExGeHVJQ0FnSUNBZ0x5OGdJQ0FnZVRvZ2RHaHBjeTV3YjNOcGRHbHZiaTU1TEZ4dUlDQWdJQ0FnTHk4Z0lIMHBPMXh1SUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQXZLaUJ2ZG1WeWQzSnBkR0ZpYkdVZ2FXNTBaWEpoWTNScGIyNGdhR0Z1Wkd4bGNuTWdLaTljYmx4dUlDQmpiR2xqYXlncElIdGNiaUFnSUNCMGFHbHpMbVJ2ZDI0b0tUdGNiaUFnZlZ4dUlDQnRiM1psS0NrZ2UxeHVJQ0FnSUhSb2FYTXVZbVZ1WkNncE8xeHVJQ0I5WEc0Z0lISmxiR1ZoYzJVb0tTQjdYRzRnSUNBZ2RHaHBjeTUxY0NncE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lGZG9aWFJvWlhJZ2RHaGxJR0oxZEhSdmJpQnBjeUJ2YmlBb2NISmxjM05sWkNrZ2IzSWdiMlptSUNodWIzUWdjSEpsYzNObFpDbGNiaUFnUUhSNWNHVWdlMkp2YjJ4bFlXNTlYRzRnSUVCbGVHRnRjR3hsSUdKMWRIUnZiaTV6ZEdGMFpTQTlJSFJ5ZFdVN1hHNGdJQ292WEc0Z0lHZGxkQ0J6ZEdGMFpTZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVmYzNSaGRHVXVjM1JoZEdVN1hHNGdJSDFjYmlBZ2MyVjBJSE4wWVhSbEtIWmhiSFZsS1NCN1hHNGdJQ0FnZEdocGN5NWZjM1JoZEdVdVpteHBjQ2gyWVd4MVpTazdYRzRnSUNBZ2FXWWdLSFJvYVhNdWJXOWtaVDA5UFNkaFpuUmxjblJ2ZFdOb0p5a2dlMXh1SUNBZ0lDQWdkR2hwY3k1bGJXbDBLQ2RqYUdGdVoyVW5MSHRjYmlBZ0lDQWdJQ0FnYzNSaGRHVTZJSFJvYVhNdWMzUmhkR1VzWEc0Z0lDQWdJQ0FnSUhnNklIUm9hWE11Y0c5emFYUnBiMjR1ZUN4Y2JpQWdJQ0FnSUNBZ2VUb2dkR2hwY3k1d2IzTnBkR2x2Ymk1NUxGeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhSb2FYTXVaVzFwZENnblkyaGhibWRsSnl4MGFHbHpMbk4wWVhSbEtUdGNiaUFnSUNCOVhHNGdJQ0FnZEdocGN5NXlaVzVrWlhJb0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQkRhR0Z1WjJVZ2RHaGxJR0oxZEhSdmJpQjBieUJwZEhNZ1lXeDBaWEp1WVhSbElITjBZWFJsSUNodlptWTlQbTl1TENCdmJqMCtiMlptS1N3Z2IzSWdabXhwY0NCcGRDQjBieUJoSUhOd1pXTnBabWxsWkNCemRHRjBaUzVjYmlBZ1FIQmhjbUZ0SUhaaGJIVmxJSHRpYjI5c1pXRnVmU0FvVDNCMGFXOXVZV3dwSUZOMFlYUmxJSFJ2SUdac2FYQWdkRzh1WEc0Z0lFQmxlR0Z0Y0d4bElHSjFkSFJ2Ymk1bWJHbHdLQ2s3WEc0Z0lDb3ZYRzRnSUdac2FYQW9kbUZzZFdVcElIdGNiaUFnSUNCMGFHbHpMbDl6ZEdGMFpTNW1iR2x3S0haaGJIVmxLVHRjYmlBZ0lDQnBaaUFvZEdocGN5NXRiMlJsUFQwOUoyRm1kR1Z5ZEc5MVkyZ25LU0I3WEc0Z0lDQWdJQ0IwYUdsekxtVnRhWFFvSjJOb1lXNW5aU2NzZTF4dUlDQWdJQ0FnSUNCemRHRjBaVG9nZEdocGN5NXpkR0YwWlN4Y2JpQWdJQ0FnSUNBZ2VEb2dkR2hwY3k1d2IzTnBkR2x2Ymk1NExGeHVJQ0FnSUNBZ0lDQjVPaUIwYUdsekxuQnZjMmwwYVc5dUxua3NYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVsYldsMEtDZGphR0Z1WjJVbkxIUm9hWE11YzNSaGRHVXBPMXh1SUNBZ0lIMWNiaUFnSUNCMGFHbHpMbkpsYm1SbGNpZ3BPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJRlIxY200Z2RHaGxJR0oxZEhSdmJpZHpJSE4wWVhSbElIUnZJSFJ5ZFdVdVhHNGdJRUJsZUdGdGNHeGxJR0oxZEhSdmJpNTBkWEp1VDI0b0tUdGNiaUFnS2k5Y2JpQWdkSFZ5Yms5dUtHVnRhWFIwYVc1bktTQjdYRzRnSUNBZ2RHaHBjeTVmYzNSaGRHVXViMjRvS1R0Y2JpQWdJQ0JwWmlBb1pXMXBkSFJwYm1jaFBUMW1ZV3h6WlNrZ2UxeHVJQ0FnSUNBZ2FXWWdLSFJvYVhNdWJXOWtaVDA5UFNkaFpuUmxjblJ2ZFdOb0p5a2dlMXh1SUNBZ0lDQWdJQ0IwYUdsekxtVnRhWFFvSjJOb1lXNW5aU2NzZTF4dUlDQWdJQ0FnSUNBZ0lITjBZWFJsT2lCMGFHbHpMbk4wWVhSbExGeHVJQ0FnSUNBZ0lDQWdJSGc2SUhSb2FYTXVjRzl6YVhScGIyNHVlQ3hjYmlBZ0lDQWdJQ0FnSUNCNU9pQjBhR2x6TG5CdmMybDBhVzl1TG5rc1hHNGdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1bGJXbDBLQ2RqYUdGdVoyVW5MSFJvYVhNdWMzUmhkR1VwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQjBhR2x6TG5KbGJtUmxjaWdwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUZSMWNtNGdkR2hsSUdKMWRIUnZiaWR6SUhOMFlYUmxJSFJ2SUdaaGJITmxMbHh1SUNCQVpYaGhiWEJzWlNCaWRYUjBiMjR1ZEhWeWJrOW1aaWdwTzF4dUlDQXFMMXh1SUNCMGRYSnVUMlptS0dWdGFYUjBhVzVuS1NCN1hHNGdJQ0FnZEdocGN5NWZjM1JoZEdVdWIyWm1LQ2s3WEc0Z0lDQWdhV1lnS0dWdGFYUjBhVzVuSVQwOVptRnNjMlVwSUh0Y2JpQWdJQ0FnSUdsbUlDaDBhR2x6TG0xdlpHVTlQVDBuWVdaMFpYSjBiM1ZqYUNjcElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1bGJXbDBLQ2RqYUdGdVoyVW5MSHRjYmlBZ0lDQWdJQ0FnSUNCemRHRjBaVG9nZEdocGN5NXpkR0YwWlN4Y2JpQWdJQ0FnSUNBZ0lDQjRPaUIwYUdsekxuQnZjMmwwYVc5dUxuZ3NYRzRnSUNBZ0lDQWdJQ0FnZVRvZ2RHaHBjeTV3YjNOcGRHbHZiaTU1TEZ4dUlDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WlcxcGRDZ25ZMmhoYm1kbEp5eDBhR2x6TG5OMFlYUmxLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmlBZ2ZWeHVYRzU5WEc1Y2JseHVYRzR2THlCWFJVSlFRVU5MSUVaUFQxUkZVaUF2TDF4dUx5OGdMaTkrTDJwemFHbHVkQzFzYjJGa1pYSWhMaTlzYVdJdlkyOXRjRzl1Wlc1MGN5OWlkWFIwYjI1MFpXMXdiR0YwWlM1cWN5SXNJaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHViR1YwSUVKMWRIUnZibFJsYlhCc1lYUmxJRDBnY21WeGRXbHlaU2duTGk0dlkyOXRjRzl1Wlc1MGN5OWlkWFIwYjI1MFpXMXdiR0YwWlNjcE8xeHVYRzR2S2lwY2Jpb2dWR1Y0ZEVKMWRIUnZibHh1S2x4dUtpQkFaR1Z6WTNKcGNIUnBiMjRnVkdWNGRDQmlkWFIwYjI1Y2JpcGNiaW9nUUdSbGJXOGdQSE53WVc0Z2JtVjRkWE10ZFdrOVhDSjBaWGgwUW5WMGRHOXVYQ0krUEM5emNHRnVQbHh1S2x4dUtpQkFaWGhoYlhCc1pWeHVLaUIyWVhJZ2RHVjRkR0oxZEhSdmJpQTlJRzVsZHlCT1pYaDFjeTVVWlhoMFFuVjBkRzl1S0NjamRHRnlaMlYwSnlsY2JpcGNiaW9nUUdWNFlXMXdiR1ZjYmlvZ2RtRnlJSFJsZUhSaWRYUjBiMjRnUFNCdVpYY2dUbVY0ZFhNdVZHVjRkRUoxZEhSdmJpZ25JM1JoY21kbGRDY3NlMXh1S2lBZ0lDQWdKM05wZW1Vbk9pQmJNVFV3TERVd1hTeGNiaW9nSUNBZ0lDZHpkR0YwWlNjNklHWmhiSE5sTEZ4dUtpQWdJQ0FnSjNSbGVIUW5PaUFuVUd4aGVTY3NYRzRxSUNBZ0lDQW5ZV3gwWlhKdVlYUmxWR1Y0ZENjNklDZFRkRzl3SjF4dUtpQjlLVnh1S2x4dUtpQkFiM1YwY0hWMFhHNHFJR05vWVc1blpWeHVLaUJHYVhKbGN5QmhibmtnZEdsdFpTQjBhR1VnYVc1MFpYSm1ZV05sSjNNZ2RtRnNkV1VnWTJoaGJtZGxjeTRnUEdKeVBseHVLaUJVYUdVZ1pYWmxiblFnWkdGMFlTQnBjeUJoSUR4cFBuTjBjbWx1Wnp3dmFUNGdiMllnZEdobElIUmxlSFFnYjI0Z2RHaGxJR0oxZEhSdmJpQmhkQ0IwYUdVZ2JXOXRaVzUwSUdsMElIZGhjeUJqYkdsamEyVmtMbHh1S2x4dUtpQkFiM1YwY0hWMFpYaGhiWEJzWlZ4dUtpQjBaWGgwWW5WMGRHOXVMbTl1S0NkamFHRnVaMlVuTEdaMWJtTjBhVzl1S0hZcElIdGNiaW9nSUNCamIyNXpiMnhsTG14dlp5aDJLVHRjYmlvZ2ZTbGNiaXBjYmlvdlhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHTnNZWE56SUZSbGVIUkNkWFIwYjI0Z1pYaDBaVzVrY3lCQ2RYUjBiMjVVWlcxd2JHRjBaU0I3WEc1Y2JpQWdZMjl1YzNSeWRXTjBiM0lvS1NCN1hHNWNiaUFnSUNCc1pYUWdiM0IwYVc5dWN5QTlJRnNuZG1Gc2RXVW5YVHRjYmx4dUlDQWdJR3hsZENCa1pXWmhkV3gwY3lBOUlIdGNiaUFnSUNBZ0lDZHphWHBsSnpvZ1d6RTFNQ3cxTUYwc1hHNGdJQ0FnSUNBbmMzUmhkR1VuT2lCbVlXeHpaU3hjYmlBZ0lDQWdJQ2QwWlhoMEp6b2dKMUJzWVhrblhHNGdJQ0FnZlR0Y2JseHVJQ0FnSUhOMWNHVnlLR0Z5WjNWdFpXNTBjeXh2Y0hScGIyNXpMR1JsWm1GMWJIUnpLVHRjYmx4dUlDQWdJSFJvYVhNdVgzUmxlSFFnUFNCMGFHbHpMbk5sZEhScGJtZHpMblJsZUhRN1hHNWNiaUFnSUNCcFppaDBhR2x6TG5ObGRIUnBibWR6TG1Gc2RHVnlibUYwWlNsN0lDOHZWRTlFVHpvZ1VtVnRiM1psSUhSb2FYTWdZMjl1WkdsMGFXOXVZV3dnYVc0Z1lTQmljbVZoYTJsdVp5MWphR0Z1WjJWeklISmxiR1ZoYzJWY2JpQWdJQ0FnSUhSb2FYTXVjMlYwZEdsdVozTXVZV3gwWlhKdVlYUmxWR1Y0ZENBOUlIUm9hWE11YzJWMGRHbHVaM011WVd4MFpYSnVZWFJsTzF4dUlDQWdJQ0FnWTI5dWMyOXNaUzUzWVhKdUtGd2lKMkZzZEdWeWJtRjBaU2NnYVc1cGRHbGhkRzl5SUdseklHUmxjSEpsWTJGMFpXUXVJRlZ6WlNBbllXeDBaWEp1WVhSbFZHVjRkQ2NnYVc1emRHVmhaQzVjSWlrN1hHNGdJQ0FnZlZ4dUlDQWdJSFJvYVhNdVgyRnNkR1Z5Ym1GMFpWUmxlSFFnUFNCMGFHbHpMbk5sZEhScGJtZHpMbUZzZEdWeWJtRjBaVlJsZUhRN1hHNGdJQ0FnZEdocGN5NXRiMlJsSUQwZ0tIUm9hWE11YzJWMGRHbHVaM011WVd4MFpYSnVZWFJsVkdWNGRDa2dQeUFuZEc5bloyeGxKeUE2SUNkaWRYUjBiMjRuTzF4dUlDQWdJSFJvYVhNdWFXNXBkQ2dwTzF4dUlDQWdJSFJvYVhNdWNtVnVaR1Z5S0NrN1hHNWNiaUFnSUNCMGFHbHpMbk4wWVhSbElEMGdkR2hwY3k1elpYUjBhVzVuY3k1emRHRjBaVHRjYmx4dUlDQjlYRzVjYmlBZ1luVnBiR1JHY21GdFpTZ3BJSHRjYmx4dUlDQWdJSFJvYVhNdVpXeGxiV1Z1ZENBOUlHUnZZM1Z0Wlc1MExtTnlaV0YwWlVWc1pXMWxiblFvSjJScGRpY3BPMXh1SUNBZ0lIUm9hWE11Y0dGeVpXNTBMbUZ3Y0dWdVpFTm9hV3hrS0hSb2FYTXVaV3hsYldWdWRDazdYRzVjYmlBZ0lDQjBhR2x6TG5SbGVIUkZiR1Z0Wlc1MElEMGdaRzlqZFcxbGJuUXVZM0psWVhSbFJXeGxiV1Z1ZENnblpHbDJKeWs3WEc0Z0lDQWdkR2hwY3k1MFpYaDBSV3hsYldWdWRDNXBibTVsY2toVVRVd2dQU0IwYUdsekxsOTBaWGgwTzF4dUlDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1aGNIQmxibVJEYUdsc1pDaDBhR2x6TG5SbGVIUkZiR1Z0Wlc1MEtUdGNiaUFnZlZ4dVhHNGdJR0oxYVd4a1NXNTBaWEptWVdObEtDa2dlMXh1WEc0Z0lIMWNibHh1SUNCamIyeHZja2x1ZEdWeVptRmpaU2dwSUh0Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdWMzUjViR1V1WTI5c2IzSWdQU0IwYUdsekxtTnZiRzl5Y3k1a1lYSnJPMXh1SUNBZ0lIUm9hWE11Y21WdVpHVnlLQ2s3WEc0Z0lIMWNibHh1SUNCemFYcGxTVzUwWlhKbVlXTmxLQ2tnZTF4dUlDQWdJQ0FnYkdWMElIUmxlSFJ6YVhwbElEMGdkR2hwY3k1b1pXbG5hSFF2TXp0Y2JpQWdJQ0FnSUd4bGRDQjBaWGgwYzJsNlpUSWdQU0FvZEdocGN5NTNhV1IwYUNBdklDaDBhR2x6TGw5MFpYaDBMbXhsYm1kMGFDQXJJRElwSUNrN1hHNGdJQ0FnSUNCMFpYaDBjMmw2WlNBOUlFMWhkR2d1YldsdUtIUmxlSFJ6YVhwbExIUmxlSFJ6YVhwbE1pazdYRzRnSUNBZ0lDQnBaaUFvZEdocGN5NWhiSFJsY201aGRHVlVaWGgwS1NCN1hHNGdJQ0FnSUNBZ0lHeGxkQ0IwWlhoMGMybDZaVE1nUFNBb2RHaHBjeTUzYVdSMGFDQXZJQ2gwYUdsekxtRnNkR1Z5Ym1GMFpWUmxlSFF1YkdWdVozUm9JQ3NnTWlrZ0tUdGNiaUFnSUNBZ0lDQWdkR1Y0ZEhOcGVtVWdQU0JOWVhSb0xtMXBiaWgwWlhoMGMybDZaU3gwWlhoMGMybDZaVE1wTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYkdWMElITjBlV3hsY3lBOUlDZDNhV1IwYURvZ0p5QXJJSFJvYVhNdWQybGtkR2dnS3lBbmNIZzdKenRjYmlBZ0lDQWdJSE4wZVd4bGN5QXJQU0FuYUdWcFoyaDBPaUFuSUNzZ2RHaHBjeTVvWldsbmFIUWdLeUFuY0hnN0p6dGNiaUFnSUNBZ0lITjBlV3hsY3lBclBTQW5jR0ZrWkdsdVp6b2dKeXNvZEdocGN5NW9aV2xuYUhRdGRHVjRkSE5wZW1VcEx6SXJKM0I0SURCd2VEc25PMXh1SUNBZ0lDQWdjM1I1YkdWeklDczlJQ2RpYjNndGMybDZhVzVuT2lCaWIzSmtaWEl0WW05NE95YzdYRzRnSUNBZ0lDQnpkSGxzWlhNZ0t6MGdKM1JsZUhRdFlXeHBaMjQ2SUdObGJuUmxjanNuTzF4dUlDQWdJQ0FnYzNSNWJHVnpJQ3M5SUNkbWIyNTBMV1poYldsc2VUb2dhVzVvWlhKcGREc25PMXh1SUNBZ0lDQWdjM1I1YkdWeklDczlJQ2RtYjI1MExYZGxhV2RvZERvZ056QXdPeWM3WEc0Z0lDQWdJQ0J6ZEhsc1pYTWdLejBnSjI5d1lXTnBkSGs2SURFN0p6dGNiaUFnSUNBZ0lITjBlV3hsY3lBclBTQW5abTl1ZEMxemFYcGxPaWNnS3lCMFpYaDBjMmw2WlNBcklDZHdlRHNuTzF4dUlDQWdJQ0FnZEdocGN5NTBaWGgwUld4bGJXVnVkQzV6ZEhsc1pTNWpjM05VWlhoMElEMGdjM1I1YkdWek8xeHVJQ0FnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmlBZ2ZWeHVYRzRnSUhKbGJtUmxjaWdwSUh0Y2JpQWdJQ0JwWmlBb0lYUm9hWE11YzNSaGRHVXBJSHRjYmlBZ0lDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1emRIbHNaUzVpWVdOclozSnZkVzVrUTI5c2IzSWdQU0IwYUdsekxtTnZiRzl5Y3k1bWFXeHNPMXh1SUNBZ0lDQWdkR2hwY3k1MFpYaDBSV3hsYldWdWRDNXpkSGxzWlM1amIyeHZjaUE5SUhSb2FYTXVZMjlzYjNKekxtUmhjbXM3WEc0Z0lDQWdJQ0IwYUdsekxuUmxlSFJGYkdWdFpXNTBMbWx1Ym1WeVNGUk5UQ0E5SUhSb2FYTXVYM1JsZUhRN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1emRIbHNaUzVpWVdOclozSnZkVzVrUTI5c2IzSWdQU0IwYUdsekxtTnZiRzl5Y3k1aFkyTmxiblE3WEc0Z0lDQWdJQ0IwYUdsekxuUmxlSFJGYkdWdFpXNTBMbk4wZVd4bExtTnZiRzl5SUQwZ2RHaHBjeTVqYjJ4dmNuTXVabWxzYkR0Y2JpQWdJQ0FnSUdsbUlDaDBhR2x6TG1Gc2RHVnlibUYwWlZSbGVIUXBJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NTBaWGgwUld4bGJXVnVkQzVwYm01bGNraFVUVXdnUFNCMGFHbHpMbDloYkhSbGNtNWhkR1ZVWlhoME8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUwWlhoMFJXeGxiV1Z1ZEM1cGJtNWxja2hVVFV3Z1BTQjBhR2x6TGw5MFpYaDBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQlVhR1VnZEdWNGRDQjBieUJrYVhOd2JHRjVJSGRvWlc0Z2RHaGxJR0oxZEhSdmJpQnBjeUJwYmlCcGRITWdYQ0p2Ymx3aUlITjBZWFJsTGlCSlppQnpaWFFzSUhSb2FYTWdjSFYwY3lCMGFHVWdZblYwZEc5dUlHbHVJRndpZEc5bloyeGxYQ0lnYlc5a1pTNWNiaUFnUUhSNWNHVWdlMU4wY21sdVozMWNiaUFnS2k5Y2JpQWdaMlYwSUdGc2RHVnlibUYwWlZSbGVIUW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WDJGc2RHVnlibUYwWlZSbGVIUTdYRzRnSUgxY2JseHVJQ0J6WlhRZ1lXeDBaWEp1WVhSbFZHVjRkQ2gwWlhoMEtTQjdYRzRnSUNBZ2FXWWdLSFJsZUhRcElIdGNiaUFnSUNBZ0lIUm9hWE11Ylc5a1pTQTlJQ2QwYjJkbmJHVW5PMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCMGFHbHpMbTF2WkdVZ1BTQW5ZblYwZEc5dUp6dGNiaUFnSUNCOVhHNGdJQ0FnZEdocGN5NWZZV3gwWlhKdVlYUmxWR1Y0ZENBOUlIUmxlSFE3WEc0Z0lDQWdkR2hwY3k1eVpXNWtaWElvS1R0Y2JpQWdmVnh1WEc1Y2JpQWdMeW9xWEc0Z0lGUm9aU0IwWlhoMElIUnZJR1JwYzNCc1lYa3VJQ2hKWmlBdVlXeDBaWEp1WVhSbFZHVjRkQ0JsZUdsemRITXNJSFJvWlc0Z2RHaHBjeUF1ZEdWNGRDQjNhV3hzSUc5dWJIa2dZbVVnWkdsemNHeGhlV1ZrSUhkb1pXNGdkR2hsSUdKMWRIUnZiaUJwY3lCcGJpQnBkSE1nWENKdlptWmNJaUJ6ZEdGMFpTNHBYRzRnSUVCMGVYQmxJSHRUZEhKcGJtZDlYRzRnSUNvdlhHNGdJR2RsZENCMFpYaDBLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TGw5MFpYaDBPMXh1SUNCOVhHNWNiaUFnYzJWMElIUmxlSFFvZEdWNGRDa2dlMXh1SUNBZ0lIUm9hWE11WDNSbGVIUWdQU0IwWlhoME8xeHVJQ0FnSUhSb2FYTXVjMmw2WlVsdWRHVnlabUZqWlNncE8xeHVJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtDazdYRzRnSUgxY2JseHVYRzU5WEc1Y2JseHVYRzR2THlCWFJVSlFRVU5MSUVaUFQxUkZVaUF2TDF4dUx5OGdMaTkrTDJwemFHbHVkQzFzYjJGa1pYSWhMaTlzYVdJdmFXNTBaWEptWVdObGN5OTBaWGgwWW5WMGRHOXVMbXB6SWl3aUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc0dkwyeGxkQ0J6ZG1jZ1BTQnlaWEYxYVhKbEtDY3VMaTkxZEdsc0wzTjJaeWNwTzF4dWJHVjBJRWx1ZEdWeVptRmpaU0E5SUhKbGNYVnBjbVVvSnk0dUwyTnZjbVV2YVc1MFpYSm1ZV05sSnlrN1hHNXNaWFFnUW5WMGRHOXVJRDBnY21WeGRXbHlaU2duTGk0dmFXNTBaWEptWVdObGN5OWlkWFIwYjI0bktUdGNibHh1THlvcVhHNHFJRkpoWkdsdlFuVjBkRzl1WEc0cVhHNHFJRUJrWlhOamNtbHdkR2x2YmlCQmJpQmhjbkpoZVNCdlppQmlkWFIwYjI1ekxpQkNlU0JrWldaaGRXeDBMQ0J6Wld4bFkzUnBibWNnYjI1bElHSjFkSFJ2YmlCM2FXeHNJR1JsYzJWc1pXTjBJR0ZzYkNCdmRHaGxjaUJpZFhSMGIyNXpMQ0JpZFhRZ2RHaHBjeUJqWVc0Z1ltVWdZM1Z6ZEc5dGFYcGxaQ0IxYzJsdVp5QjBhR1VnUVZCSklHSmxiRzkzTGx4dUtseHVLaUJBWkdWdGJ5QThaR2wySUc1bGVIVnpMWFZwUFZ3aVVtRmthVzlDZFhSMGIyNWNJajQ4TDJScGRqNWNiaXBjYmlvZ1FHVjRZVzF3YkdWY2Jpb2dkbUZ5SUhKaFpHbHZZblYwZEc5dUlEMGdibVYzSUU1bGVIVnpMbEpoWkdsdlFuVjBkRzl1S0NjamRHRnlaMlYwSnlsY2JpcGNiaW9nUUdWNFlXMXdiR1ZjYmlvZ2RtRnlJSEpoWkdsdlluVjBkRzl1SUQwZ2JtVjNJRTVsZUhWekxsSmhaR2x2UW5WMGRHOXVLQ2NqZEdGeVoyVjBKeXg3WEc0cUlDQWdKM05wZW1Vbk9pQmJNVEl3TERJMVhTeGNiaW9nSUNBbmJuVnRZbVZ5VDJaQ2RYUjBiMjV6SnpvZ05DeGNiaW9nSUNBbllXTjBhWFpsSnpvZ0xURmNiaW9nZlNsY2JpcGNiaW9nUUc5MWRIQjFkRnh1S2lCamFHRnVaMlZjYmlvZ1JtbHlaWE1nWVc1NUlIUnBiV1VnZEdobElHbHVkR1Z5Wm1GalpTZHpJSFpoYkhWbElHTm9ZVzVuWlhNdUlEeGljajVjYmlvZ1ZHaGxJR1YyWlc1MElHUmhkR0VnWVc0Z1BHaythVzUwWldkbGNqd3ZhVDRzSUhSb1pTQnBibVJsZUNCdlppQjBhR1VnWW5WMGRHOXVJSFJvWVhRZ2FYTWdZM1Z5Y21WdWRHeDVJRzl1TGlCSlppQnVieUJpZFhSMGIyNGdhWE1nYzJWc1pXTjBaV1FzSUhSb1pTQjJZV3gxWlNCM2FXeHNJR0psSUMweExseHVLbHh1S2lCQWIzVjBjSFYwWlhoaGJYQnNaVnh1S2lCeVlXUnBiMkoxZEhSdmJpNXZiaWduWTJoaGJtZGxKeXhtZFc1amRHbHZiaWgyS1NCN1hHNHFJQ0FnWTI5dWMyOXNaUzVzYjJjb2RpazdYRzRxSUgwcFhHNHFYRzRxTDF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCamJHRnpjeUJTWVdScGIwSjFkSFJ2YmlCbGVIUmxibVJ6SUVsdWRHVnlabUZqWlNCN1hHNWNiaUFnWTI5dWMzUnlkV04wYjNJb0tTQjdYRzVjYmlBZ0lDQnNaWFFnYjNCMGFXOXVjeUE5SUZzbmRtRnNkV1VuWFR0Y2JseHVJQ0FnSUd4bGRDQmtaV1poZFd4MGN5QTlJSHRjYmlBZ0lDQWdJQ2R6YVhwbEp6b2dXekV5TUN3eU5WMHNYRzRnSUNBZ0lDQW5iblZ0WW1WeVQyWkNkWFIwYjI1ekp6b2dOQ3hjYmlBZ0lDQWdJQ2RoWTNScGRtVW5PaUF0TVZ4dUlDQWdJSDA3WEc1Y2JpQWdJQ0J6ZFhCbGNpaGhjbWQxYldWdWRITXNiM0IwYVc5dWN5eGtaV1poZFd4MGN5azdYRzVjYmlBZ0lDQjBhR2x6TG1KMWRIUnZibk1nUFNCYlhUdGNiaUFnSUNCMGFHbHpMbDl1ZFcxaVpYSlBaa0oxZEhSdmJuTWdQU0IwYUdsekxuTmxkSFJwYm1kekxtNTFiV0psY2s5bVFuVjBkRzl1Y3p0Y2JpQWdJQ0IwYUdsekxtRmpkR2wyWlNBOUlIUm9hWE11YzJWMGRHbHVaM011WVdOMGFYWmxPMXh1WEc0Z0lDQWdkR2hwY3k1cGJtbDBLQ2s3WEc0Z0lDQWdkR2hwY3k1eVpXNWtaWElvS1R0Y2JseHVJQ0I5WEc1Y2JpQWdZblZwYkdSR2NtRnRaU2dwSUh0Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RZ1BTQmtiMk4xYldWdWRDNWpjbVZoZEdWRmJHVnRaVzUwS0Nka2FYWW5LVHRjYmlBZ0lDQjBhR2x6TG5CaGNtVnVkQzVoY0hCbGJtUkRhR2xzWkNoMGFHbHpMbVZzWlcxbGJuUXBPMXh1SUNCOVhHNWNiaUFnWW5WcGJHUkpiblJsY21aaFkyVW9LU0I3WEc1Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwUFRBN2FUeDBhR2x6TGw5dWRXMWlaWEpQWmtKMWRIUnZibk03YVNzcktTQjdYRzRnSUNBZ0lDQnNaWFFnWTI5dWRHRnBibVZ5SUQwZ1pHOWpkVzFsYm5RdVkzSmxZWFJsUld4bGJXVnVkQ2duYzNCaGJpY3BPMXh1WEc0Z0lDQWdJQ0JzWlhRZ1luVjBkRzl1SUQwZ2JtVjNJRUoxZEhSdmJpaGpiMjUwWVdsdVpYSXNJSHRjYmlBZ0lDQWdJQ0FnSUNCdGIyUmxPaUFuZEc5bloyeGxKeXhjYmlBZ0lDQWdJQ0FnSUNCamIyMXdiMjVsYm5RNklIUnlkV1VzWEc0Z0lDQWdJQ0FnSUgwc0lIUm9hWE11ZFhCa1lYUmxMbUpwYm1Rb2RHaHBjeXhwS1NrN1hHNWNiaUFnSUNBZ0lIUm9hWE11WW5WMGRHOXVjeTV3ZFhOb0tHSjFkSFJ2YmlrN1hHNGdJQ0FnSUNCMGFHbHpMbVZzWlcxbGJuUXVZWEJ3Wlc1a1EyaHBiR1FvWTI5dWRHRnBibVZ5S1R0Y2JpQWdJQ0I5WEc1Y2JpQWdmVnh1WEc0Z0lITnBlbVZKYm5SbGNtWmhZMlVvS1NCN1hHNWNiaUFnSUNCc1pYUWdZblYwZEc5dVYybGtkR2dnUFNCMGFHbHpMbmRwWkhSb0lDOGdkR2hwY3k1ZmJuVnRZbVZ5VDJaQ2RYUjBiMjV6TzF4dUlDQWdJR3hsZENCaWRYUjBiMjVJWldsbmFIUWdQU0IwYUdsekxtaGxhV2RvZER0Y2JseHVJQ0FnSUdadmNpQW9iR1YwSUdrOU1EdHBQSFJvYVhNdVgyNTFiV0psY2s5bVFuVjBkRzl1Y3p0cEt5c3BJSHRjYmlBZ0lDQWdJSFJvYVhNdVluVjBkRzl1YzF0cFhTNXlaWE5wZW1Vb1luVjBkRzl1VjJsa2RHZ3NZblYwZEc5dVNHVnBaMmgwS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdmVnh1WEc0Z0lHTnZiRzl5U1c1MFpYSm1ZV05sS0NrZ2UxeHVJQ0FnSUdadmNpQW9iR1YwSUdrOU1EdHBQSFJvYVhNdVgyNTFiV0psY2s5bVFuVjBkRzl1Y3p0cEt5c3BJSHRjYmlBZ0lDQWdJSFJvYVhNdVluVjBkRzl1YzF0cFhTNWpiMnh2Y25NZ1BTQjBhR2x6TG1OdmJHOXljenRjYmlBZ0lDQWdJSFJvYVhNdVluVjBkRzl1YzF0cFhTNXlaVzVrWlhJb0tUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQjFjR1JoZEdVb2FXNWtaWGdwSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTVpZFhSMGIyNXpXMmx1WkdWNFhTNXpkR0YwWlNrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV6Wld4bFkzUW9hVzVrWlhncE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0IwYUdsekxtUmxjMlZzWldOMEtDazdYRzRnSUNBZ2ZWeHVJQ0F2THlBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmlBZ2ZWeHVYRzRnSUhKbGJtUmxjaWdwSUh0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwUFRBN2FUeDBhR2x6TG1KMWRIUnZibk11YkdWdVozUm9PMmtyS3lrZ2UxeHVJQ0FnSUNBZ2FXWWdLR2s5UFQxMGFHbHpMbUZqZEdsMlpTa2dlMXh1SUNBZ0lDQWdJQ0IwYUdsekxtSjFkSFJ2Ym5OYmFWMHVkSFZ5Yms5dUtHWmhiSE5sS1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVZblYwZEc5dWMxdHBYUzUwZFhKdVQyWm1LR1poYkhObEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ1UyVnNaV04wSUc5dVpTQmlkWFIwYjI0Z1lXNWtJR1JsYzJWc1pXTjBJR0ZzYkNCdmRHaGxjaUJpZFhSMGIyNXpMbHh1SUNCQWNHRnlZVzBnYVc1a1pYZ2dlMjUxYldKbGNuMGdWR2hsSUdsdVpHVjRJRzltSUhSb1pTQmlkWFIwYjI0Z2RHOGdjMlZzWldOMFhHNGdJQ292WEc0Z0lITmxiR1ZqZENocGJtUmxlQ2tnZTF4dUlDQWdJR2xtSUNocGJtUmxlRDQ5TUNBbUppQnBibVJsZUNBOElIUm9hWE11WW5WMGRHOXVjeTVzWlc1bmRHZ3BJSHRjYmlBZ0lDQWdJSFJvYVhNdVlXTjBhWFpsSUQwZ2FXNWtaWGc3WEc0Z0lDQWdJQ0IwYUdsekxtVnRhWFFvSjJOb1lXNW5aU2NzZEdocGN5NWhZM1JwZG1VcE8xeHVJQ0FnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdSR1Z6Wld4bFkzUWdZV3hzSUdKMWRIUnZibk11WEc0Z0lDb3ZYRzRnSUdSbGMyVnNaV04wS0NrZ2UxeHVJQ0FnSUhSb2FYTXVZV04wYVhabElEMGdMVEU3WEc0Z0lDQWdkR2hwY3k1bGJXbDBLQ2RqYUdGdVoyVW5MSFJvYVhNdVlXTjBhWFpsS1R0Y2JpQWdJQ0IwYUdsekxuSmxibVJsY2lncE8xeHVJQ0I5WEc1Y2JpQWdaMlYwSUc1MWJXSmxjazltUW5WMGRHOXVjeWdwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1ZmJuVnRZbVZ5VDJaQ2RYUjBiMjV6TzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGVndaR0YwWlNCb2IzY2diV0Z1ZVNCaWRYUjBiMjV6SUdGeVpTQnBiaUIwYUdVZ2FXNTBaWEptWVdObFhHNGdJQ0FxSUVCd1lYSmhiU0FnZTI1MWJXSmxjbjBnWW5WMGRHOXVjeUJJYjNjZ2JXRnVlU0JpZFhSMGIyNXpJR0Z5WlNCcGJpQjBhR1VnYVc1MFpYSm1ZV05sWEc0Z0lDQXFMMXh1SUNCelpYUWdiblZ0WW1WeVQyWkNkWFIwYjI1ektHSjFkSFJ2Ym5NcElIdGNiaUFnSUNCMGFHbHpMbDl1ZFcxaVpYSlBaa0oxZEhSdmJuTWdQU0JpZFhSMGIyNXpPMXh1SUNBZ0lHWnZjaUFvYkdWMElHazlNRHRwUEhSb2FYTXVZblYwZEc5dWN5NXNaVzVuZEdnN2FTc3JLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtSjFkSFJ2Ym5OYmFWMHVaR1Z6ZEhKdmVTZ3BPMXh1SUNBZ0lIMWNiaUFnSUNCMGFHbHpMbUoxZEhSdmJuTWdQU0JiWFR0Y2JpQWdMeThnSUdadmNpQW9iR1YwSUdrOU1EdHBQSFJvYVhNdVluVjBkRzl1Y3k1c1pXNW5kR2c3YVNzcktTQjdYRzRnSUM4dklDQWdJSFJvYVhNdVluVjBkRzl1YzF0cFhTNWtaWE4wY205NUtDazdYRzRnSUM4dklDQjlYRzRnSUNBZ2RHaHBjeTVsYlhCMGVTZ3BPMXh1SUNBZ0lIUm9hWE11WW5WcGJHUkpiblJsY21aaFkyVW9LVHRjYmlBZ2ZWeHVYRzU5WEc1Y2JseHVYRzR2THlCWFJVSlFRVU5MSUVaUFQxUkZVaUF2TDF4dUx5OGdMaTkrTDJwemFHbHVkQzFzYjJGa1pYSWhMaTlzYVdJdmFXNTBaWEptWVdObGN5OXlZV1JwYjJKMWRIUnZiaTVxY3lJc0lpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWJHVjBJRWx1ZEdWeVptRmpaU0E5SUhKbGNYVnBjbVVvSnk0dUwyTnZjbVV2YVc1MFpYSm1ZV05sSnlrN1hHNXNaWFFnVTNSbGNDQTlJSEpsY1hWcGNtVW9KeTR1TDIxdlpHVnNjeTl6ZEdWd0p5azdYRzVzWlhRZ2JXRjBhQ0E5SUhKbGNYVnBjbVVvSnk0dUwzVjBhV3d2YldGMGFDY3BPMXh1WEc0dktpcGNiaW9nVG5WdFltVnlYRzRxWEc0cUlFQmtaWE5qY21sd2RHbHZiaUJPZFcxaVpYSWdhVzUwWlhKbVlXTmxJSGRvYVdOb0lHbHpJR052Ym5SeWIyeHNZV0pzWlNCaWVTQmtjbUZuWjJsdVp5QnZjaUIwZVhCcGJtY3VYRzRxWEc0cUlFQmtaVzF2SUR4emNHRnVJRzVsZUhWekxYVnBQVndpYm5WdFltVnlYQ0krUEM5emNHRnVQbHh1S2x4dUtpQkFaWGhoYlhCc1pWeHVLaUIyWVhJZ2JuVnRZbVZ5SUQwZ2JtVjNJRTVsZUhWekxrNTFiV0psY2lnbkkzUmhjbWRsZENjcFhHNHFYRzRxSUVCbGVHRnRjR3hsWEc0cUlIWmhjaUJ1ZFcxaVpYSWdQU0J1WlhjZ1RtVjRkWE11VG5WdFltVnlLQ2NqZEdGeVoyVjBKeXg3WEc0cUlDQWdKM05wZW1Vbk9pQmJOakFzTXpCZExGeHVLaUFnSUNkMllXeDFaU2M2SURBc1hHNHFJQ0FnSjIxcGJpYzZJREFzWEc0cUlDQWdKMjFoZUNjNklESXdNREF3TEZ4dUtpQWdJQ2R6ZEdWd0p6b2dNVnh1S2lCOUtWeHVLbHh1S2lCQWIzVjBjSFYwWEc0cUlHTm9ZVzVuWlZ4dUtpQkdhWEpsY3lCaGJua2dkR2x0WlNCMGFHVWdhVzUwWlhKbVlXTmxKM01nZG1Gc2RXVWdZMmhoYm1kbGN5NGdQR0p5UGx4dUtpQlVhR1VnWlhabGJuUWdaR0YwWVNCcGN5QjBhR1VnYm5WdFltVnlJSFpoYkhWbElHOW1JSFJvWlNCcGJuUmxjbVpoWTJVdVhHNHFYRzRxSUVCdmRYUndkWFJsZUdGdGNHeGxYRzRxSUc1MWJXSmxjaTV2YmlnblkyaGhibWRsSnl4bWRXNWpkR2x2YmloMktTQjdYRzRxSUNBZ1kyOXVjMjlzWlM1c2IyY29kaWs3WEc0cUlIMHBYRzRxWEc0cVhHNHFMMXh1WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdOc1lYTnpJRTUxYldKbGNpQmxlSFJsYm1SeklFbHVkR1Z5Wm1GalpTQjdYRzVjYmlBZ1kyOXVjM1J5ZFdOMGIzSW9LU0I3WEc1Y2JpQWdJQ0JzWlhRZ2IzQjBhVzl1Y3lBOUlGc25kbUZzZFdVblhUdGNibHh1SUNBZ0lHeGxkQ0JrWldaaGRXeDBjeUE5SUh0Y2JpQWdJQ0FnSUNkemFYcGxKem9nV3pZd0xETXdYU3hjYmlBZ0lDQWdJQ2QyWVd4MVpTYzZJREFzWEc0Z0lDQWdJQ0FuYldsdUp6b2dNQ3hjYmlBZ0lDQWdJQ2R0WVhnbk9pQXlNREF3TUN4Y2JpQWdJQ0FnSUNkemRHVndKem9nTVZ4dUlDQWdJSDA3WEc1Y2JpQWdJQ0J6ZFhCbGNpaGhjbWQxYldWdWRITXNiM0IwYVc5dWN5eGtaV1poZFd4MGN5azdYRzVjYmlBZ0lDQjBhR2x6TGw5MllXeDFaU0E5SUc1bGR5QlRkR1Z3S0hSb2FYTXVjMlYwZEdsdVozTXViV2x1TEhSb2FYTXVjMlYwZEdsdVozTXViV0Y0TEhSb2FYTXVjMlYwZEdsdVozTXVjM1JsY0N4MGFHbHpMbk5sZEhScGJtZHpMblpoYkhWbEtUdGNibHh1SUNBZ0lDOHFYRzRnSUNBZ1JHVm1ZWFZzZERvZ01pNGdTRzkzSUcxaGJua2daR1ZqYVcxaGJDQndiR0ZqWlhNZ2RHOGdZMnhwY0NCMGFHVWdiblZ0WW1WeUozTWdkbWx6ZFdGc0lISmxibVJsY21sdVp5QjBieTRnVkdocGN5QmtiMlZ6SUc1dmRDQmhabVpsWTNRZ2JuVnRZbVZ5SjNNZ1lXTjBkV0ZzSUhaaGJIVmxJRzkxZEhCMWRDQXRMU0JtYjNJZ2RHaGhkQ3dnYzJWMElIUm9aU0J6ZEdWd0lIQnliM0JsY25SNUlIUnZJQzR3TVN3Z0xqRXNJRzl5SURFdVhHNGdJQ0FnUUhSNWNHVWdlMjUxYldKbGNuMWNiaUFnSUNCQVpYaGhiWEJzWlNCdWRXMWlaWEl1WkdWamFXMWhiRkJzWVdObGN5QTlJREk3WEc0Z0lDQWdLaTljYmlBZ0lDQjBhR2x6TG1SbFkybHRZV3hRYkdGalpYTWdQU0F5TzF4dUlDQWdJSFJvYVhNdVlXTjBkV0ZzSUQwZ01EdGNibHh1SUNBZ0lIUm9hWE11YldGNElEMGdkR2hwY3k1ZmRtRnNkV1V1YldGNE8xeHVYRzRnSUNBZ2RHaHBjeTV0YVc0Z1BTQjBhR2x6TGw5MllXeDFaUzV0YVc0N1hHNWNiaUFnSUNCMGFHbHpMbk4wWlhBZ1BTQjBhR2x6TGw5MllXeDFaUzV6ZEdWd08xeHVYRzRnSUNBZ2RHaHBjeTVwYm1sMEtDazdYRzRnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmx4dUlDQjlYRzVjYmlBZ1luVnBiR1JHY21GdFpTZ3BJSHRjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblFnUFNCa2IyTjFiV1Z1ZEM1amNtVmhkR1ZGYkdWdFpXNTBLQ2RwYm5CMWRDY3BPMXh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkQzUwZVhCbElEMGdKM1JsZUhRbk8xeHVYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbUZrWkVWMlpXNTBUR2x6ZEdWdVpYSW9KMkpzZFhJbkxDQm1kVzVqZEdsdmJpQW9LU0I3WEc0Z0lGeDBJQ0IwYUdsekxtVnNaVzFsYm5RdWMzUjViR1V1WW1GamEyZHliM1Z1WkVOdmJHOXlJRDBnZEdocGN5NWpiMnh2Y25NdVptbHNiRHRjYmlBZ1hIUWdJSFJvYVhNdVpXeGxiV1Z1ZEM1emRIbHNaUzVqYjJ4dmNpQTlJSFJvYVhNdVkyOXNiM0p6TG1SaGNtczdYRzRnSUZ4MElDQnBaaUFvZEdocGN5NWxiR1Z0Wlc1MExuWmhiSFZsSUNFOVBTQjBhR2x6TG5aaGJIVmxLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVkbUZzZFdVZ1BTQndZWEp6WlVac2IyRjBLSFJvYVhNdVpXeGxiV1Z1ZEM1MllXeDFaU2s3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtDazdYRzRnSUZ4MElDQjlYRzRnSUZ4MGZTNWlhVzVrS0hSb2FYTXBLVHRjYmx4dVhHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJb0oydGxlV1J2ZDI0bkxDQm1kVzVqZEdsdmJpQW9aU2tnZTF4dUlDQmNkQ0FnYVdZZ0tHVXVkMmhwWTJnZ1BDQTBPQ0I4ZkNCbExuZG9hV05vSUQ0Z05UY3BJSHRjYmlBZ1hIUWdJRngwYVdZZ0tHVXVkMmhwWTJnZ0lUMDlJREU0T1NBbUppQmxMbmRvYVdOb0lDRTlQU0F4T1RBZ0ppWWdaUzUzYUdsamFDQWhQVDBnT0NrZ2UxeHVJQ0JjZENBZ1hIUmNkR1V1Y0hKbGRtVnVkRVJsWm1GMWJIUW9LVHRjYmlBZ1hIUWdJRngwZlZ4dUlDQmNkQ0FnZlZ4dUlDQmNkQ0FnYVdZZ0tHVXVkMmhwWTJnOVBUMHhNeWtnZTF4dUlDQmNkQ0FnWEhSMGFHbHpMbVZzWlcxbGJuUXVZbXgxY2lncE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5aaGJIVmxJRDBnZEdocGN5NWxiR1Z0Wlc1MExuWmhiSFZsTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbVZ0YVhRb0oyTm9ZVzVuWlNjc2RHaHBjeTUyWVd4MVpTazdYRzRnSUNBZ0lDQWdJSFJvYVhNdWNtVnVaR1Z5S0NrN1hHNGdJRngwSUNCOVhHNGdJRngwZlM1aWFXNWtLSFJvYVhNcEtUdGNibHh1SUNBZ0lIUm9hWE11Y0dGeVpXNTBMbUZ3Y0dWdVpFTm9hV3hrS0hSb2FYTXVaV3hsYldWdWRDazdYRzVjYmlBZ2ZWeHVYRzRnSUhOcGVtVkpiblJsY21aaFkyVW9LU0I3WEc1Y2JpQWdJQ0IwYUdsekxsOXRhVzVFYVcxbGJuTnBiMjRnUFNCTllYUm9MbTFwYmloMGFHbHpMbmRwWkhSb0xIUm9hWE11YUdWcFoyaDBLVHRjYmx4dUlDQWdJR3hsZENCemRIbHNaWE1nUFNBbmQybGtkR2c2SUNjZ0t5QjBhR2x6TG5kcFpIUm9JQ3NnSjNCNE95YzdYRzRnSUNBZ2MzUjViR1Z6SUNzOUlDZG9aV2xuYUhRNklDY2dLeUIwYUdsekxtaGxhV2RvZENBcklDZHdlRHNuTzF4dUlDQWdJSE4wZVd4bGN5QXJQU0FuWW1GamEyZHliM1Z1WkMxamIyeHZjam9nSTJVM1pUZGxOenNuTzF4dUlDQWdJSE4wZVd4bGN5QXJQU0FuWTI5c2IzSTZJQ016TXpNN0p6dGNiaUFnSUNCemRIbHNaWE1nS3owZ0oyWnZiblF0Wm1GdGFXeDVPaUJoY21saGJEc25PMXh1SUNBZ0lITjBlV3hsY3lBclBTQW5abTl1ZEMxM1pXbG5hSFE2SURVd01Ec25PMXh1SUNBZ0lITjBlV3hsY3lBclBTQW5abTl1ZEMxemFYcGxPaWNnS3lCMGFHbHpMbDl0YVc1RWFXMWxibk5wYjI0dk1pQXJJQ2R3ZURzbk8xeHVJQ0F2THlBZ2MzUjViR1Z6SUNzOUlDZG9hV2RvYkdsbmFIUTZJQ05rTVRnN0p6dGNiaUFnSUNCemRIbHNaWE1nS3owZ0oySnZjbVJsY2pvZ2JtOXVaVHNuTzF4dUlDQWdJSE4wZVd4bGN5QXJQU0FuYjNWMGJHbHVaVG9nYm05dVpUc25PMXh1SUNBZ0lITjBlV3hsY3lBclBTQW5jR0ZrWkdsdVp6b2dKeXQwYUdsekxsOXRhVzVFYVcxbGJuTnBiMjR2TkNzbmNIZ2dKeXQwYUdsekxsOXRhVzVFYVcxbGJuTnBiMjR2TkNzbmNIZzdKenRjYmlBZ0lDQnpkSGxzWlhNZ0t6MGdKMkp2ZUMxemFYcHBibWM2SUdKdmNtUmxjaTFpYjNnN0p6dGNiaUFnSUNCemRIbHNaWE1nS3owZ0ozVnpaWEpUWld4bFkzUTZJSFJsZUhRN0p6dGNiaUFnSUNCemRIbHNaWE1nS3owZ0oyMXZlbFZ6WlhKVFpXeGxZM1E2SUhSbGVIUTdKenRjYmlBZ0lDQnpkSGxzWlhNZ0t6MGdKM2RsWW10cGRGVnpaWEpUWld4bFkzUTZJSFJsZUhRN0p6dGNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUXVjM1I1YkdVdVkzTnpWR1Y0ZENBclBTQnpkSGxzWlhNN1hHNWNiaUFnSUNBdkx5QjBieUJoWkdRZ1pYWmxiblIxWVd4c2VWeHVJQ0FnSUM4dklIWmhjaUJqYzNNZ1BTQW5JeWNyZEdocGN5NWxiR1Z0Wlc1MFNVUXJKem82YzJWc1pXTjBhVzl1ZXlCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lCMGNtRnVjM0JoY21WdWRDQjlKenRjYmx4dUlDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1MllXeDFaU0E5SUhSb2FYTXVkbUZzZFdVN1hHNWNiaUFnZlZ4dVhHNGdJR052Ykc5eVNXNTBaWEptWVdObEtDa2dlMXh1SUNBZ0lDQWdkR2hwY3k1bGJHVnRaVzUwTG5OMGVXeGxMbUpoWTJ0bmNtOTFibVJEYjJ4dmNpQTlJSFJvYVhNdVkyOXNiM0p6TG1acGJHdzdYRzRnSUNBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1YzNSNWJHVXVZMjlzYjNJZ1BTQjBhR2x6TG1OdmJHOXljeTVrWVhKck8xeHVJQ0I5WEc1Y2JpQWdjbVZ1WkdWeUtDa2dlMXh1WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG5aaGJIVmxJRDBnYldGMGFDNXdjblZ1WlNoMGFHbHpMblpoYkhWbExIUm9hWE11WkdWamFXMWhiRkJzWVdObGN5azdYRzVjYmlBZ2ZWeHVYRzRnSUdOc2FXTnJLQ2tnZTF4dUlDQWdJSFJvYVhNdWFHRnpUVzkyWldRZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdWNtVmhaRTl1YkhrZ1BTQjBjblZsTzF4dVhIUWdJSFJvYVhNdVlXTjBkV0ZzSUQwZ2RHaHBjeTUyWVd4MVpUdGNiaUFnSUNCMGFHbHpMbWx1YVhScFlXd2dQU0I3SUhrNklIUm9hWE11Ylc5MWMyVXVlU0I5TzF4dUlDQWdJSFJvYVhNdVkyaGhibWRsUm1GamRHOXlJRDBnYldGMGFDNXBiblpsY25Rb0lIUm9hWE11Ylc5MWMyVXVlQ0F2SUhSb2FYTXVkMmxrZEdnZ0tUdGNiaUFnSUNCamIyNXpiMnhsTG14dlp5aDBhR2x6TG1Ob1lXNW5aVVpoWTNSdmNpazdYRzRnSUgxY2JseHVJQ0J0YjNabEtDa2dlMXh1SUNBZ0lIUm9hWE11YUdGelRXOTJaV1FnUFNCMGNuVmxPMXh1SUNBZ0lHbG1JQ2gwYUdsekxtTnNhV05yWldRcElIdGNibHh1SUNBZ0lDQWdiR1YwSUc1bGQzWmhiSFZsSUQwZ2RHaHBjeTVoWTNSMVlXd2dMU0FvZEdocGN5NXRiM1Z6WlM1NUlDMGdkR2hwY3k1cGJtbDBhV0ZzTG5rcElDb2dLQ0J0WVhSb0xtTnNhWEFvSUhSb2FYTXViV0Y0TFhSb2FYTXViV2x1TENBd0xDQXhNREF3SUNrZ0x5QXlNREFnS1NBcUlFMWhkR2d1Y0c5M0tIUm9hWE11WTJoaGJtZGxSbUZqZEc5eUxESXBPMXh1SUNBZ0lDQWdkR2hwY3k1MllXeDFaU0E5SUc1bGQzWmhiSFZsTzF4dVhHNGdJRngwWEhSMGFHbHpMbkpsYm1SbGNpZ3BPMXh1SUNBZ0lDQWdhV1lnS0hSb2FYTXVYM1poYkhWbExtTm9ZVzVuWldRcElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1bGJXbDBLQ2RqYUdGdVoyVW5MSFJvYVhNdWRtRnNkV1VwTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJRngwZlZ4dUlDQjlYRzVjYmlBZ2NtVnNaV0Z6WlNncElIdGNiaUFnSUNCcFppQW9JWFJvYVhNdWFHRnpUVzkyWldRcElIdGNiaUFnSUNBZ0lIUm9hWE11Wld4bGJXVnVkQzV5WldGa1QyNXNlU0E5SUdaaGJITmxPMXh1SUNCY2RGeDBkR2hwY3k1bGJHVnRaVzUwTG1adlkzVnpLQ2s3WEc0Z0lGeDBYSFIwYUdsekxtVnNaVzFsYm5RdWMyVjBVMlZzWldOMGFXOXVVbUZ1WjJVb01Dd2dkR2hwY3k1bGJHVnRaVzUwTG5aaGJIVmxMbXhsYm1kMGFDazdYRzRnSUZ4MFhIUjBhR2x6TG1Wc1pXMWxiblF1YzNSNWJHVXVZbUZqYTJkeWIzVnVaRU52Ykc5eUlEMGdkR2hwY3k1amIyeHZjbk11WVdOalpXNTBPMXh1SUNCY2RGeDBkR2hwY3k1bGJHVnRaVzUwTG5OMGVXeGxMbU52Ykc5eUlEMGdkR2hwY3k1amIyeHZjbk11YkdsbmFIUTdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUdSdlkzVnRaVzUwTG1KdlpIa3VabTlqZFhNb0tUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ1EyOXVibVZqZENCMGFHbHpJRzUxYldKbGNpQnBiblJsY21aaFkyVWdkRzhnWVNCa2FXRnNJRzl5SUhOc2FXUmxjbHh1SUNCQWNHRnlZVzBnZTBsdWRHVnlabUZqWlgwZ1pXeGxiV1Z1ZENCRmJHVnRaVzUwSUhSdklHTnZibTVsWTNRZ2RHOHVYRzRnSUVCbGVHRnRjR3hsSUc1MWJXSmxjaTVzYVc1cktITnNhV1JsY2lsY2JpQWdLaTljYmlBZ2JHbHVheWhrWlhOMGFXNWhkR2x2YmlrZ2UxeHVJQ0FnSUhSb2FYTXViV2x1SUQwZ1pHVnpkR2x1WVhScGIyNHViV2x1TzF4dUlDQWdJSFJvYVhNdWJXRjRJRDBnWkdWemRHbHVZWFJwYjI0dWJXRjRPMXh1SUNBZ0lIUm9hWE11YzNSbGNDQTlJR1JsYzNScGJtRjBhVzl1TG5OMFpYQTdYRzRnSUNBZ1pHVnpkR2x1WVhScGIyNHViMjRvSjJOb1lXNW5aU2NzS0hZcElEMCtJSHRjYmlBZ0lDQWdJSFJvYVhNdWNHRnpjMmwyWlZWd1pHRjBaU2gyS1R0Y2JpQWdJQ0I5S1R0Y2JpQWdJQ0IwYUdsekxtOXVLQ2RqYUdGdVoyVW5MQ2gyS1NBOVBpQjdYRzRnSUNBZ0lDQmtaWE4wYVc1aGRHbHZiaTUyWVd4MVpTQTlJSFk3WEc0Z0lDQWdmU2s3WEc0Z0lDQWdkR2hwY3k1MllXeDFaU0E5SUdSbGMzUnBibUYwYVc5dUxuWmhiSFZsTzF4dUlDQXZLaUFnY21WMGRYSnVJSHRjYmlBZ0lDQWdJR3hwYzNSbGJtVnlNVG9nYkdsemRHVnVaWEl4TEZ4dUlDQWdJQ0FnYkdsemRHVnVaWEl5T2lCc2FYTjBaVzVsY2pJc1hHNGdJQ0FnSUNCa1pYTjBjbTk1T2lBb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUd4cGMzUmxibVZ5TVM1eVpXMXZkbVVvS1NBb2IzSWdjMmx0YVd4aGNpbGNiaUFnSUNBZ0lDQWdiR2x6ZEdWdVpYSXlMbkpsYlc5MlpTZ3BJQ2h2Y2lCemFXMXBiR0Z5S1Z4dUlDQWdJQ0FnZlZ4dUlDQWdJSDBnS2k5Y2JpQWdmVnh1WEc0Z0lIQmhjM05wZG1WVmNHUmhkR1VvZGlrZ2UxeHVJQ0FnSUhSb2FYTXVYM1poYkhWbExuVndaR0YwWlNoMktUdGNiaUFnSUNCMGFHbHpMbkpsYm1SbGNpZ3BPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJRlJvWlNCcGJuUmxjbVpoWTJVbmN5QmpkWEp5Wlc1MElIWmhiSFZsTGlCSlppQnpaWFFnYldGdWRXRnNiSGtzSUhkcGJHd2dkWEJrWVhSbElIUm9aU0JwYm5SbGNtWmhZMlVnWVc1a0lIUnlhV2RuWlhJZ2RHaGxJRzkxZEhCMWRDQmxkbVZ1ZEM1Y2JpQWdRSFI1Y0dVZ2UyNTFiV0psY24xY2JpQWdRR1Y0WVcxd2JHVWdiblZ0WW1WeUxuWmhiSFZsSUQwZ01UQTdYRzRnSUNvdlhHNGdJR2RsZENCMllXeDFaU2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1ZmRtRnNkV1V1ZG1Gc2RXVTdYRzRnSUgxY2JpQWdjMlYwSUhaaGJIVmxLSFlwSUh0Y2JpQWdJQ0IwYUdsekxsOTJZV3gxWlM1MWNHUmhkR1VvZGlrN1hHNGdJQ0FnZEdocGN5NWxiV2wwS0NkamFHRnVaMlVuTEhSb2FYTXVkbUZzZFdVcE8xeHVJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtDazdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdURzkzWlhJZ2JHbHRhWFFnYjJZZ2RHaGxJRzUxYldKbGNpZHpJRzkxZEhCMWRDQnlZVzVuWlZ4dUlDQkFkSGx3WlNCN2JuVnRZbVZ5ZlZ4dUlDQkFaWGhoYlhCc1pTQnVkVzFpWlhJdWJXbHVJRDBnTVRBd01EdGNiaUFnS2k5Y2JpQWdaMlYwSUcxcGJpZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVmZG1Gc2RXVXViV2x1TzF4dUlDQjlYRzRnSUhObGRDQnRhVzRvZGlrZ2UxeHVJQ0FnSUhSb2FYTXVYM1poYkhWbExtMXBiaUE5SUhZN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ1ZYQndaWElnYkdsdGFYUWdiMllnZEdobElHNTFiV0psY2lkeklHOTFkSEIxZENCeVlXNW5aVnh1SUNCQWRIbHdaU0I3Ym5WdFltVnlmVnh1SUNCQVpYaGhiWEJzWlNCdWRXMWlaWEl1YldGNElEMGdNVEF3TUR0Y2JpQWdLaTljYmlBZ1oyVjBJRzFoZUNncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWZkbUZzZFdVdWJXRjRPMXh1SUNCOVhHNGdJSE5sZENCdFlYZ29kaWtnZTF4dUlDQWdJSFJvYVhNdVgzWmhiSFZsTG0xaGVDQTlJSFk3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnVkdobElHbHVZM0psYldWdWRDQjBhR0YwSUhSb1pTQnVkVzFpWlhJbmN5QjJZV3gxWlNCamFHRnVaMlZ6SUdKNUxseHVJQ0JBZEhsd1pTQjdiblZ0WW1WeWZWeHVJQ0JBWlhoaGJYQnNaU0J1ZFcxaVpYSXVjM1JsY0NBOUlEVTdYRzRnSUNvdlhHNGdJR2RsZENCemRHVndLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TGw5MllXeDFaUzV6ZEdWd08xeHVJQ0I5WEc0Z0lITmxkQ0J6ZEdWd0tIWXBJSHRjYmlBZ0lDQjBhR2x6TGw5MllXeDFaUzV6ZEdWd0lEMGdkanRjYmlBZ2ZWeHVYRzU5WEc1Y2JseHVYRzR2THlCWFJVSlFRVU5MSUVaUFQxUkZVaUF2TDF4dUx5OGdMaTkrTDJwemFHbHVkQzFzYjJGa1pYSWhMaTlzYVdJdmFXNTBaWEptWVdObGN5OXVkVzFpWlhJdWFuTWlMQ0luZFhObElITjBjbWxqZENjN1hHNWNibXhsZENCSmJuUmxjbVpoWTJVZ1BTQnlaWEYxYVhKbEtDY3VMaTlqYjNKbEwybHVkR1Z5Wm1GalpTY3BPMXh1WEc0dktpcGNiaW9nVTJWc1pXTjBYRzRxWEc0cUlFQmtaWE5qY21sd2RHbHZiaUJFY205d1pHOTNiaUJ0Wlc1MVhHNHFYRzRxSUVCa1pXMXZJRHh6Y0dGdUlHNWxlSFZ6TFhWcFBWd2ljMlZzWldOMFhDSStQQzl6Y0dGdVBseHVLbHh1S2lCQVpYaGhiWEJzWlZ4dUtpQjJZWElnYzJWc1pXTjBJRDBnYm1WM0lFNWxlSFZ6TGxObGJHVmpkQ2duSTNSaGNtZGxkQ2NwWEc0cVhHNHFJRUJsZUdGdGNHeGxYRzRxSUhaaGNpQnpaV3hsWTNRZ1BTQnVaWGNnVG1WNGRYTXVVMlZzWldOMEtDY2pkR0Z5WjJWMEp5eDdYRzRxSUNBZ0ozTnBlbVVuT2lCYk1UQXdMRE13WFN4Y2Jpb2dJQ0FuYjNCMGFXOXVjeWM2SUZzblpHVm1ZWFZzZENjc0oyOXdkR2x2Ym5NblhWeHVLaUI5S1Z4dUtseHVLaUJBYjNWMGNIVjBYRzRxSUdOb1lXNW5aVnh1S2lCR2FYSmxjeUJoYm5rZ2RHbHRaU0IwYUdVZ2FXNTBaWEptWVdObEozTWdkbUZzZFdVZ1kyaGhibWRsY3k0Z1BHSnlQbHh1S2lCVWFHVWdaWFpsYm5RZ1pHRjBZU0JwY3lCaGJpQnZZbXBsWTNRZ1kyOXVkR0ZwYm1sdVp5QjBhR1VnZEdWNGRDQjJZV3gxWlNCdlppQjBhR1VnYzJWc1pXTjBaV1FnYjNCMGFXOXVMQ0JoY3lCM1pXeHNJR0Z6SUhSb1pTQnVkVzFsY21saklHbHVaR1Y0SUc5bUlIUm9aU0J6Wld4bFkzUnBiMjR1WEc0cVhHNHFJRUJ2ZFhSd2RYUmxlR0Z0Y0d4bFhHNHFJSE5sYkdWamRDNXZiaWduWTJoaGJtZGxKeXhtZFc1amRHbHZiaWgyS1NCN1hHNHFJQ0FnWTI5dWMyOXNaUzVzYjJjb2RpazdYRzRxSUgwcFhHNHFYRzRxWEc0cUwxeHVYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR05zWVhOeklGTmxiR1ZqZENCbGVIUmxibVJ6SUVsdWRHVnlabUZqWlNCN1hHNWNiaUFnWTI5dWMzUnlkV04wYjNJb0tTQjdYRzVjYmlBZ0lDQnNaWFFnYjNCMGFXOXVjeUE5SUZzbmRtRnNkV1VuWFR0Y2JseHVJQ0FnSUd4bGRDQmtaV1poZFd4MGN5QTlJSHRjYmlBZ0lDQWdJQ0FuYzJsNlpTYzZJRnN4TURBc016QmRMRnh1SUNBZ0lDQWdJQ2R2Y0hScGIyNXpKem9nV3lka1pXWmhkV3gwSnl3bmIzQjBhVzl1Y3lkZFhHNGdJQ0FnZlR0Y2JseHVJQ0FnSUhOMWNHVnlLR0Z5WjNWdFpXNTBjeXh2Y0hScGIyNXpMR1JsWm1GMWJIUnpLVHRjYmx4dUlDQWdJSFJvYVhNdVgzTmxiR1ZqZEdWa1NXNWtaWGdnUFNBdE1UdGNiaUFnSUNCMGFHbHpMbDkyWVd4MVpTQTlJR1poYkhObE8xeHVYRzRnSUNBZ2RHaHBjeTVmYjNCMGFXOXVjeUE5SUhSb2FYTXVjMlYwZEdsdVozTXViM0IwYVc5dWN6dGNibHh1SUNBZ0lIUm9hWE11YVc1cGRDZ3BPMXh1SUNBZ0lIUm9hWE11Y21WdVpHVnlLQ2s3WEc1Y2JpQWdmVnh1WEc0Z0lHSjFhV3hrUm5KaGJXVW9LU0I3WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwSUQwZ1pHOWpkVzFsYm5RdVkzSmxZWFJsUld4bGJXVnVkQ2duYzJWc1pXTjBKeWs3WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG5OMGVXeGxMbVp2Ym5SVGFYcGxJRDBnZEdocGN5NW9aV2xuYUhRdk1pc25jSGduTzF4dUlDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1emRIbHNaUzV2ZFhSc2FXNWxJRDBnSjI1dmJtVW5PMXh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkQzV6ZEhsc1pTNW9hV2RvYkdsbmFIUWdQU0FuYm05dVpTYzdYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbk4wZVd4bExuZHBaSFJvSUQwZ2RHaHBjeTUzYVdSMGFDc25jSGduTzF4dUlDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1emRIbHNaUzVvWldsbmFIUWdQU0IwYUdsekxtaGxhV2RvZENzbmNIZ25PMXh1WEc0Z0lDQWdkR2hwY3k1aWIzVnVaRkpsYm1SbGNpQTlJSFJvYVhNdWNtVnVaR1Z5TG1KcGJtUW9kR2hwY3lrN1hHNWNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUXVZV1JrUlhabGJuUk1hWE4wWlc1bGNpZ25ZMmhoYm1kbEp5d2dkR2hwY3k1aWIzVnVaRkpsYm1SbGNpazdYRzVjYmlBZ0lDQjBhR2x6TG5CaGNtVnVkQzVoY0hCbGJtUkRhR2xzWkNoMGFHbHpMbVZzWlcxbGJuUXBPMXh1WEc0Z0lIMWNibHh1SUNCaGRIUmhZMmhNYVhOMFpXNWxjbk1vS1NCN1hHNWNiaUFnZlZ4dVhHNGdJR0oxYVd4a1NXNTBaWEptWVdObEtDa2dlMXh1WEc0Z0lDQWdkR2hwY3k1a1pXWnBibVZQY0hScGIyNXpLQ2s3WEc1Y2JpQWdmVnh1WEc0Z0lHTnZiRzl5U1c1MFpYSm1ZV05sS0NrZ2UxeHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNXpkSGxzWlM1aVlXTnJaM0p2ZFc1a1EyOXNiM0lnUFNCMGFHbHpMbU52Ykc5eWN5NW1hV3hzTzF4dUlDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1emRIbHNaUzVqYjJ4dmNpQTlJSFJvYVhNdVkyOXNiM0p6TG1SaGNtczdYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbk4wZVd4bExtSnZjbVJsY2lBOUlDZHpiMnhwWkNBd2NIZ2dKeXQwYUdsekxtTnZiRzl5Y3k1dFpXUnBkVzFNYVdkb2REdGNiaUFnZlZ4dVhHNGdJSEpsYm1SbGNpZ3BJSHRjYmx4dUlDQWdJSFJvYVhNdVgzWmhiSFZsSUQwZ2RHaHBjeTVsYkdWdFpXNTBMbTl3ZEdsdmJuTmJkR2hwY3k1bGJHVnRaVzUwTG5ObGJHVmpkR1ZrU1c1a1pYaGRMblJsZUhRN1hHNGdJQ0FnZEdocGN5NWZjMlZzWldOMFpXUkpibVJsZUNBOUlIUm9hWE11Wld4bGJXVnVkQzV6Wld4bFkzUmxaRWx1WkdWNE8xeHVJQ0FnSUhSb2FYTXVaVzFwZENnblkyaGhibWRsSnl4N1hHNGdJQ0FnSUNCMllXeDFaVG9nZEdocGN5NWZkbUZzZFdVc1hHNGdJQ0FnSUNCcGJtUmxlRG9nZEdocGN5NWZjMlZzWldOMFpXUkpibVJsZUZ4dUlDQWdJSDBwTzF4dVhHNGdJSDFjYmx4dUlDQmpiR2xqYXlncElIdGNibHh1SUNCOVhHNWNiaUFnYlc5MlpTZ3BJSHRjYmx4dUlDQjlYRzVjYmlBZ2NtVnNaV0Z6WlNncElIdGNibHh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUZWd1pHRjBaU0IwYUdVZ2JHbHpkQ0J2WmlCdmNIUnBiMjV6TGlCVWFHbHpJSEpsYlc5MlpYTWdZV3hzSUdWNGFYTjBhVzVuSUc5d2RHbHZibk1nWVc1a0lHTnlaV0YwWlhNZ1lTQnVaWGNnYkdsemRDQnZaaUJ2Y0hScGIyNXpMbHh1SUNBZ0tpQkFjR0Z5WVcwZ0lIdGhjbkpoZVgwZ2IzQjBhVzl1Y3lCT1pYY2dZWEp5WVhrZ2IyWWdiM0IwYVc5dWMxeHVJQ0FnS2k5Y2JseHVJQ0JrWldacGJtVlBjSFJwYjI1ektHOXdkR2x2Ym5NcElIdGNibHh1SUNBdktpQWdablZ1WTNScGIyNGdjbVZ0YjNabFQzQjBhVzl1Y3loelpXeGxZM1JpYjNncFhHNGdJQ0FnZTF4dUlDQWdJQ0FnSUNCMllYSWdhVHRjYmlBZ0lDQWdJQ0FnWm05eUtHa2dQU0J6Wld4bFkzUmliM2d1YjNCMGFXOXVjeTVzWlc1bmRHZ2dMU0F4SURzZ2FTQStQU0F3SURzZ2FTMHRLVnh1SUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpaV3hsWTNSaWIzZ3VjbVZ0YjNabEtHa3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lDOHZkWE5wYm1jZ2RHaGxJR1oxYm1OMGFXOXVPbHh1SUNBZ0lISmxiVzkyWlU5d2RHbHZibk1vWkc5amRXMWxiblF1WjJWMFJXeGxiV1Z1ZEVKNVNXUW9YQ0p0ZVZObGJHVmpkRTlpYW1WamRGd2lLU2s3SUNvdlhHNWNibHh1SUNBZ0lHbG1JQ2h2Y0hScGIyNXpLU0I3WEc0Z0lDQWdJQ0IwYUdsekxsOXZjSFJwYjI1eklEMGdiM0IwYVc5dWN6dGNiaUFnSUNCOVhHNWNiaUFnSUNCbWIzSW9iR1YwSUdrOWRHaHBjeTVsYkdWdFpXNTBMbTl3ZEdsdmJuTXViR1Z1WjNSb0xURTdJR2tnUGowZ01Ec2dhUzB0S1NCN1hHNGdJQ0FnSUNCMGFHbHpMbVZzWlcxbGJuUXVjbVZ0YjNabEtHa3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHWnZjaWhzWlhRZ2FUMHdPMms4ZEdocGN5NWZiM0IwYVc5dWN5NXNaVzVuZEdnN2FTc3JLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtVnNaVzFsYm5RdWIzQjBhVzl1Y3k1aFpHUW9ibVYzSUU5d2RHbHZiaWgwYUdsekxsOXZjSFJwYjI1elcybGRMQ0JwS1NrN1hHNGdJQ0FnZlZ4dVhHNGdJSDFjYmx4dVhHNGdJQzhxS2x4dUlDQlVhR1VnZEdWNGRDQnZaaUIwYUdVZ2IzQjBhVzl1SUhSb1lYUWdhWE1nWTNWeWNtVnVkR3g1SUhObGJHVmpkR1ZrTGlCSlppQnpaWFFzSUhkcGJHd2dkWEJrWVhSbElIUm9aU0JwYm5SbGNtWmhZMlVnWVc1a0lIUnlhV2RuWlhJZ2RHaGxJRzkxZEhCMWRDQmxkbVZ1ZEM1Y2JpQWdRSFI1Y0dVZ2UxTjBjbWx1WjMxY2JpQWdRR1Y0WVcxd2JHVWdjMlZzWldOMExuWmhiSFZsSUQwZ1hDSnpZWGQwYjI5MGFGd2lPMXh1SUNBcUwxeHVJQ0JuWlhRZ2RtRnNkV1VvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVgzWmhiSFZsTzF4dUlDQjlYRzRnSUhObGRDQjJZV3gxWlNoMktTQjdYRzRnSUNBZ2RHaHBjeTVmZG1Gc2RXVWdQU0IyTzF4dUlDQWdJR1p2Y2loc1pYUWdhVDB3TzJrOGRHaHBjeTVsYkdWdFpXNTBMbTl3ZEdsdmJuTXViR1Z1WjNSb08ya3JLeWtnZTF4dUlDQWdJQ0FnYVdZZ0tIWWdQVDA5SUhSb2FYTXVaV3hsYldWdWRDNXZjSFJwYjI1elcybGRMblJsZUhRcElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1elpXeGxZM1JsWkVsdVpHVjRJRDBnYVR0Y2JpQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOVhHNWNibHh1SUNBdktpcGNiaUFnVkdobElHNTFiV1Z5YVdNZ2FXNWtaWGdnYjJZZ2RHaGxJRzl3ZEdsdmJpQjBhR0YwSUdseklHTjFjbkpsYm5Sc2VTQnpaV3hsWTNSbFpDNGdTV1lnYzJWMExDQjNhV3hzSUhWd1pHRjBaU0IwYUdVZ2FXNTBaWEptWVdObElHRnVaQ0IwY21sbloyVnlJSFJvWlNCdmRYUndkWFFnWlhabGJuUXVYRzRnSUVCMGVYQmxJSHR1ZFcxaVpYSjlYRzRnSUVCbGVHRnRjR3hsSUhObGJHVmpkQzV6Wld4bFkzUmxaRWx1WkdWNElEMGdNanRjYmlBZ0tpOWNiaUFnWjJWMElITmxiR1ZqZEdWa1NXNWtaWGdvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVgzTmxiR1ZqZEdWa1NXNWtaWGc3WEc0Z0lIMWNiaUFnYzJWMElITmxiR1ZqZEdWa1NXNWtaWGdvZGlrZ2UxeHVJQ0FnSUhSb2FYTXVYM05sYkdWamRHVmtTVzVrWlhnZ1BTQjJPMXh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkQzV6Wld4bFkzUmxaRWx1WkdWNElEMGdkanRjYmlBZ0lDQjBhR2x6TG5KbGJtUmxjaWdwTzF4dUlDQjlYRzVjYmlBZ1kzVnpkRzl0UkdWemRISnZlU2dwSUh0Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdWNtVnRiM1psUlhabGJuUk1hWE4wWlc1bGNpZ25ZMmhoYm1kbEp5d2dkR2hwY3k1aWIzVnVaRkpsYm1SbGNpazdYRzRnSUgxY2JseHVYRzU5WEc1Y2JseHVYRzR2THlCWFJVSlFRVU5MSUVaUFQxUkZVaUF2TDF4dUx5OGdMaTkrTDJwemFHbHVkQzFzYjJGa1pYSWhMaTlzYVdJdmFXNTBaWEptWVdObGN5OXpaV3hsWTNRdWFuTWlMQ0luZFhObElITjBjbWxqZENjN1hHNWNibXhsZENCemRtY2dQU0J5WlhGMWFYSmxLQ2N1TGk5MWRHbHNMM04yWnljcE8xeHViR1YwSUcxaGRHZ2dQU0J5WlhGMWFYSmxLQ2N1TGk5MWRHbHNMMjFoZEdnbktUdGNibXhsZENCSmJuUmxjbVpoWTJVZ1BTQnlaWEYxYVhKbEtDY3VMaTlqYjNKbEwybHVkR1Z5Wm1GalpTY3BPMXh1YkdWMElGTjBaWEFnUFNCeVpYRjFhWEpsS0NjdUxpOXRiMlJsYkhNdmMzUmxjQ2NwTzF4dWFXMXdiM0owSUNvZ1lYTWdTVzUwWlhKaFkzUnBiMjRnWm5KdmJTQW5MaTR2ZFhScGJDOXBiblJsY21GamRHbHZiaWM3WEc1Y2JpOHFLbHh1S2lCRWFXRnNYRzRxWEc0cVhHNHFJRUJrWlhOamNtbHdkR2x2YmlCRWFXRnNJSGRwZEdnZ2NtRmthV0ZzSUc5eUlHeHBibVZoY2lCcGJuUmxjbUZqZEdsdmJpNWNiaXBjYmlvZ1FHUmxiVzhnUEhOd1lXNGdibVY0ZFhNdGRXazlYQ0prYVdGc1hDSStQQzl6Y0dGdVBseHVLbHh1S2lCQVpYaGhiWEJzWlZ4dUtpQjJZWElnWkdsaGJDQTlJRzVsZHlCT1pYaDFjeTVFYVdGc0tDY2pkR0Z5WjJWMEp5bGNiaXBjYmlvZ1FHVjRZVzF3YkdWY2Jpb2dkbUZ5SUdScFlXd2dQU0J1WlhjZ1RtVjRkWE11UkdsaGJDZ25JM1JoY21kbGRDY3NlMXh1S2lBZ0lDZHphWHBsSnpvZ1d6YzFMRGMxWFN4Y2Jpb2dJQ0FuYVc1MFpYSmhZM1JwYjI0bk9pQW5jbUZrYVdGc0p5d2dMeThnWENKeVlXUnBZV3hjSWl3Z1hDSjJaWEowYVdOaGJGd2lMQ0J2Y2lCY0ltaHZjbWw2YjI1MFlXeGNJbHh1S2lBZ0lDZHRiMlJsSnpvZ0ozSmxiR0YwYVhabEp5d2dMeThnWENKaFluTnZiSFYwWlZ3aUlHOXlJRndpY21Wc1lYUnBkbVZjSWx4dUtpQWdJQ2R0YVc0bk9pQXdMRnh1S2lBZ0lDZHRZWGduT2lBeExGeHVLaUFnSUNkemRHVndKem9nTUN4Y2Jpb2dJQ0FuZG1Gc2RXVW5PaUF3WEc0cUlIMHBYRzRxWEc0cUlFQnZkWFJ3ZFhSY2Jpb2dZMmhoYm1kbFhHNHFJRVpwY21WeklHRnVlU0IwYVcxbElIUm9aU0JwYm5SbGNtWmhZMlVuY3lCMllXeDFaU0JqYUdGdVoyVnpMaUE4WW5JK1hHNHFJRlJvWlNCbGRtVnVkQ0JrWVhSaElHbHpJSFJvWlNCdWRXMWlaWElnZG1Gc2RXVWdiMllnZEdobElHbHVkR1Z5Wm1GalpTNWNiaXBjYmlvZ1FHOTFkSEIxZEdWNFlXMXdiR1ZjYmlvZ1pHbGhiQzV2YmlnblkyaGhibWRsSnl4bWRXNWpkR2x2YmloMktTQjdYRzRxSUNBZ1kyOXVjMjlzWlM1c2IyY29kaWs3WEc0cUlIMHBYRzRxWEc0cUlFQjBkWFJ2Y21saGJGeHVLaUJFYVdGc1hHNHFJSGxuUjAxNGNWeHVLbHh1S2k5Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1kyeGhjM01nUkdsaGJDQmxlSFJsYm1SeklFbHVkR1Z5Wm1GalpTQjdYRzVjYmlBZ1kyOXVjM1J5ZFdOMGIzSW9LU0I3WEc1Y2JpQWdJQ0JzWlhRZ2IzQjBhVzl1Y3lBOUlGc25iV2x1Snl3bmJXRjRKeXduZG1Gc2RXVW5YVHRjYmx4dUlDQWdJR3hsZENCa1pXWmhkV3gwY3lBOUlIdGNiaUFnSUNBZ0lDZHphWHBsSnpvZ1d6YzFMRGMxWFN4Y2JpQWdJQ0FnSUNkcGJuUmxjbUZqZEdsdmJpYzZJQ2R5WVdScFlXd25MQ0F2THlCeVlXUnBZV3dzSUhabGNuUnBZMkZzTENCb2IzSnBlbTl1ZEdGc1hHNGdJQ0FnSUNBbmJXOWtaU2M2SUNkeVpXeGhkR2wyWlNjc0lDOHZJR0ZpYzI5c2RYUmxMQ0J5Wld4aGRHbDJaVnh1SUNBZ0lDQWdKMjFwYmljNklEQXNYRzRnSUNBZ0lDQW5iV0Y0SnpvZ01TeGNiaUFnSUNBZ0lDZHpkR1Z3SnpvZ01DeGNiaUFnSUNBZ0lDZDJZV3gxWlNjNklEQmNiaUFnSUNCOU8xeHVYRzRnSUNBZ2MzVndaWElvWVhKbmRXMWxiblJ6TEc5d2RHbHZibk1zWkdWbVlYVnNkSE1wTzF4dVhHNGdJQ0FnZEdocGN5NXBiblJsY21GamRHbHZiaUE5SUhSb2FYTXVjMlYwZEdsdVozTXVhVzUwWlhKaFkzUnBiMjQ3WEc1Y2JpQWdJQ0IwYUdsekxsOTJZV3gxWlNBOUlHNWxkeUJUZEdWd0tIUm9hWE11YzJWMGRHbHVaM011YldsdUxDQjBhR2x6TG5ObGRIUnBibWR6TG0xaGVDd2dkR2hwY3k1elpYUjBhVzVuY3k1emRHVndMQ0IwYUdsekxuTmxkSFJwYm1kekxuWmhiSFZsS1R0Y2JseHVJQ0FnSUhSb2FYTXVjRzl6YVhScGIyNGdQU0J1WlhjZ1NXNTBaWEpoWTNScGIyNHVTR0Z1Wkd4bEtIUm9hWE11YzJWMGRHbHVaM011Ylc5a1pTeDBhR2x6TG1sdWRHVnlZV04wYVc5dUxGc3dMSFJvYVhNdWQybGtkR2hkTEZ0MGFHbHpMbWhsYVdkb2RDd3dYU2s3WEc1Y2JpQWdJQ0IwYUdsekxtbHVhWFFvS1R0Y2JseHVJQ0FnSUhSb2FYTXVkbUZzZFdVZ1BTQjBhR2x6TGw5MllXeDFaUzUyWVd4MVpUdGNibHh1SUNBZ0lIUm9hWE11Y0c5emFYUnBiMjR1ZG1Gc2RXVWdQU0IwYUdsekxsOTJZV3gxWlM1dWIzSnRZV3hwZW1Wa08xeHVYRzRnSUNBZ2RHaHBjeTV3Y21WMmFXOTFjMEZ1WjJ4bElEMGdabUZzYzJVN1hHNWNiaUFnSUNCMGFHbHpMbVZ0YVhRb0oyTm9ZVzVuWlNjc2RHaHBjeTUyWVd4MVpTazdYRzVjYmlBZ2ZWeHVYRzRnSUdKMWFXeGtTVzUwWlhKbVlXTmxLQ2tnZTF4dVhHNGdJQ0FnZEdocGN5NWlZV05yWjNKdmRXNWtJRDBnYzNabkxtTnlaV0YwWlNnblkybHlZMnhsSnlrN1hHNGdJQ0FnZEdocGN5NXpZM0psZHlBOUlITjJaeTVqY21WaGRHVW9KMk5wY21Oc1pTY3BPMXh1SUNBZ0lIUm9hWE11YUdGdVpHeGxJRDBnYzNabkxtTnlaV0YwWlNnbmNHRjBhQ2NwTzF4dUlDQWdJSFJvYVhNdWFHRnVaR3hsTWlBOUlITjJaeTVqY21WaGRHVW9KM0JoZEdnbktUdGNiaUFnSUNCMGFHbHpMbWhoYm1Sc1pVWnBiR3dnUFNCemRtY3VZM0psWVhSbEtDZHdZWFJvSnlrN1hHNGdJQ0FnZEdocGN5NW9ZVzVrYkdVeVJtbHNiQ0E5SUhOMlp5NWpjbVZoZEdVb0ozQmhkR2duS1R0Y2JpQWdJQ0IwYUdsekxtaGhibVJzWlV4cGJtVWdQU0J6ZG1jdVkzSmxZWFJsS0Nkd1lYUm9KeWs3WEc1Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdVlYQndaVzVrUTJocGJHUW9kR2hwY3k1aVlXTnJaM0p2ZFc1a0tUdGNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUXVZWEJ3Wlc1a1EyaHBiR1FvZEdocGN5NW9ZVzVrYkdVcE8xeHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNWhjSEJsYm1SRGFHbHNaQ2gwYUdsekxtaGhibVJzWlRJcE8xeHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNWhjSEJsYm1SRGFHbHNaQ2gwYUdsekxtaGhibVJzWlVacGJHd3BPMXh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkQzVoY0hCbGJtUkRhR2xzWkNoMGFHbHpMbWhoYm1Sc1pUSkdhV3hzS1R0Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdVlYQndaVzVrUTJocGJHUW9kR2hwY3k1b1lXNWtiR1ZNYVc1bEtUdGNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUXVZWEJ3Wlc1a1EyaHBiR1FvZEdocGN5NXpZM0psZHlrN1hHNWNiaUFnZlZ4dVhHNWNiaUFnYzJsNlpVbHVkR1Z5Wm1GalpTZ3BJSHRjYmx4dUlDQWdJSFJvYVhNdWNHOXphWFJwYjI0dWNtVnphWHBsS0Zzd0xIUm9hWE11ZDJsa2RHaGRMRnQwYUdsekxtaGxhV2RvZEN3d1hTazdYRzVjYmlBZ0lDQnNaWFFnWTJWdWRHVnlJRDBnZTF4dUlDQWdJQ0FnZURvZ2RHaHBjeTUzYVdSMGFDOHlMRnh1SUNBZ0lDQWdlVG9nZEdocGN5NW9aV2xuYUhRdk1seHVJQ0FnSUgwN1hHNWNiaUFnSUNCc1pYUWdaR2xoYldWMFpYSWdQU0JOWVhSb0xtMXBiaWgwYUdsekxuZHBaSFJvTEhSb2FYTXVhR1ZwWjJoMEtUdGNibHh1SUNBZ0lIUm9hWE11WW1GamEyZHliM1Z1WkM1elpYUkJkSFJ5YVdKMWRHVW9KMk40Snl3Z1kyVnVkR1Z5TG5ncE8xeHVJQ0FnSUhSb2FYTXVZbUZqYTJkeWIzVnVaQzV6WlhSQmRIUnlhV0oxZEdVb0oyTjVKeXdnWTJWdWRHVnlMbmtwTzF4dUlDQWdJSFJvYVhNdVltRmphMmR5YjNWdVpDNXpaWFJCZEhSeWFXSjFkR1VvSjNJbkxDQmthV0Z0WlhSbGNpOHlMV1JwWVcxbGRHVnlMelF3S1R0Y2JseHVJQ0FnSUhSb2FYTXVjMk55WlhjdWMyVjBRWFIwY21saWRYUmxLQ2RqZUNjc0lHTmxiblJsY2k1NEtUdGNiaUFnSUNCMGFHbHpMbk5qY21WM0xuTmxkRUYwZEhKcFluVjBaU2duWTNrbkxDQmpaVzUwWlhJdWVTazdYRzRnSUNBZ2RHaHBjeTV6WTNKbGR5NXpaWFJCZEhSeWFXSjFkR1VvSjNJbkxDQmthV0Z0WlhSbGNpOHhNaWs3WEc1Y2JpQWdJQ0JzWlhRZ2RtRnNkV1VnUFNCMGFHbHpMblpoYkhWbE8xeHVYRzRnSUNBZ2JHVjBJR2hoYm1Sc1pWQnZhVzUwY3lBOUlIdGNiaUFnSUNBZ0lITjBZWEowT2lCTllYUm9MbEJKS2pFdU5TeGNiaUFnSUNBZ0lHVnVaRG9nYldGMGFDNWpiR2x3S0NCdFlYUm9Mbk5qWVd4bEtIWmhiSFZsTERBc01DNDFMRTFoZEdndVVFa3FNUzQxTEUxaGRHZ3VVRWtxTUM0MUtTQXNJRTFoZEdndVVFa3FNQzQxTENCTllYUm9MbEJKS2pFdU5TQXBYRzRnSUNBZ2ZUdGNiaUFnSUNCc1pYUWdhR0Z1Wkd4bE1sQnZhVzUwY3lBOUlIdGNiaUFnSUNBZ0lITjBZWEowT2lCTllYUm9MbEJKS2pJdU5TeGNiaUFnSUNBZ0lHVnVaRG9nYldGMGFDNWpiR2x3S0NCdFlYUm9Mbk5qWVd4bEtIWmhiSFZsTERBdU5Td3hMRTFoZEdndVVFa3FNaTQxTEUxaGRHZ3VVRWtxTVM0MUtTQXNJRTFoZEdndVVFa3FNUzQxTENCTllYUm9MbEJKS2pJdU5TQXBYRzRnSUNBZ2ZUdGNibHh1SUNBZ0lHeGxkQ0JvWVc1a2JHVlFZWFJvSUQwZ2MzWm5MbUZ5WXloalpXNTBaWEl1ZUN3Z1kyVnVkR1Z5TG5rc0lHUnBZVzFsZEdWeUx6SXRaR2xoYldWMFpYSXZOREFzSUdoaGJtUnNaVkJ2YVc1MGN5NXpkR0Z5ZEN3Z2FHRnVaR3hsVUc5cGJuUnpMbVZ1WkNrN1hHNGdJQ0FnYkdWMElHaGhibVJzWlRKUVlYUm9JRDBnYzNabkxtRnlZeWhqWlc1MFpYSXVlQ3dnWTJWdWRHVnlMbmtzSUdScFlXMWxkR1Z5THpJdFpHbGhiV1YwWlhJdk5EQXNJR2hoYm1Sc1pUSlFiMmx1ZEhNdWMzUmhjblFzSUdoaGJtUnNaVEpRYjJsdWRITXVaVzVrS1R0Y2JseHVJQ0FnSUhSb2FYTXVhR0Z1Wkd4bExuTmxkRUYwZEhKcFluVjBaU2duWkNjc2FHRnVaR3hsVUdGMGFDazdYRzRnSUNBZ2RHaHBjeTVvWVc1a2JHVXVjMlYwUVhSMGNtbGlkWFJsS0NkemRISnZhMlV0ZDJsa2RHZ25MQ0JrYVdGdFpYUmxjaTh5TUNrN1hHNGdJQ0FnZEdocGN5NW9ZVzVrYkdVdWMyVjBRWFIwY21saWRYUmxLQ2RtYVd4c0p5d2dKMjV2Ym1VbktUdGNibHh1SUNBZ0lIUm9hWE11YUdGdVpHeGxNaTV6WlhSQmRIUnlhV0oxZEdVb0oyUW5MR2hoYm1Sc1pUSlFZWFJvS1R0Y2JpQWdJQ0IwYUdsekxtaGhibVJzWlRJdWMyVjBRWFIwY21saWRYUmxLQ2R6ZEhKdmEyVXRkMmxrZEdnbkxDQmthV0Z0WlhSbGNpOHlNQ2s3WEc0Z0lDQWdkR2hwY3k1b1lXNWtiR1V5TG5ObGRFRjBkSEpwWW5WMFpTZ25abWxzYkNjc0lDZHViMjVsSnlrN1hHNWNiaUFnSUNCb1lXNWtiR1ZRWVhSb0lDczlJQ2NnVENBbksyTmxiblJsY2k1NEt5Y2dKeXRqWlc1MFpYSXVlVHRjYmx4dUlDQWdJSFJvYVhNdWFHRnVaR3hsUm1sc2JDNXpaWFJCZEhSeWFXSjFkR1VvSjJRbkxHaGhibVJzWlZCaGRHZ3BPMXh1SUNBZ0lIUm9hWE11YUdGdVpHeGxSbWxzYkM1elpYUkJkSFJ5YVdKMWRHVW9KMlpwYkd3dGIzQmhZMmwwZVNjc0lDY3dMak1uS1R0Y2JseHVJQ0FnSUdoaGJtUnNaVEpRWVhSb0lDczlJQ2NnVENBbksyTmxiblJsY2k1NEt5Y2dKeXRqWlc1MFpYSXVlVHRjYmx4dUlDQWdJSFJvYVhNdWFHRnVaR3hsTWtacGJHd3VjMlYwUVhSMGNtbGlkWFJsS0Nka0p5eG9ZVzVrYkdVeVVHRjBhQ2s3WEc0Z0lDQWdkR2hwY3k1b1lXNWtiR1V5Um1sc2JDNXpaWFJCZEhSeWFXSjFkR1VvSjJacGJHd3RiM0JoWTJsMGVTY3NJQ2N3TGpNbktUdGNibHh1SUNBZ0lHeGxkQ0JoY21ORmJtUnBibWRCTzF4dUlDQWdJR2xtSUNoMllXeDFaU0E4SURBdU5Ta2dlMXh1SUNBZ0lDQWdZWEpqUlc1a2FXNW5RU0E5SUdoaGJtUnNaVkJ2YVc1MGN5NWxibVE3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHRnlZMFZ1WkdsdVowRWdQU0JvWVc1a2JHVXlVRzlwYm5SekxtVnVaRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnNaWFFnWVhKalJXNWthVzVuV0NBOUlHTmxiblJsY2k1NElDc2dUV0YwYUM1amIzTW9ZWEpqUlc1a2FXNW5RU2tnS2lBb1pHbGhiV1YwWlhJdk1pazdYRzRnSUNBZ2JHVjBJR0Z5WTBWdVpHbHVaMWtnUFNCalpXNTBaWEl1ZVNBcklFMWhkR2d1YzJsdUtHRnlZMFZ1WkdsdVowRXBJQ29nS0dScFlXMWxkR1Z5THpJcElDb2dMVEU3WEc1Y2JpQWdJQ0IwYUdsekxtaGhibVJzWlV4cGJtVXVjMlYwUVhSMGNtbGlkWFJsS0Nka0p5d25UU0FuSzJObGJuUmxjaTU0S3ljZ0p5dGpaVzUwWlhJdWVTc25JRXdnSnl0aGNtTkZibVJwYm1kWUt5Y2dKeXRoY21ORmJtUnBibWRaS1R0Y2JpQWdJQ0IwYUdsekxtaGhibVJzWlV4cGJtVXVjMlYwUVhSMGNtbGlkWFJsS0NkemRISnZhMlV0ZDJsa2RHZ25MQ0JrYVdGdFpYUmxjaTh5TUNrN1hHNWNiaUFnZlZ4dVhHNGdJR052Ykc5eVNXNTBaWEptWVdObEtDa2dlMXh1SUNBZ0lIUm9hWE11WW1GamEyZHliM1Z1WkM1elpYUkJkSFJ5YVdKMWRHVW9KMlpwYkd3bkxDQjBhR2x6TG1OdmJHOXljeTVtYVd4c0tUdGNiaUFnSUNCMGFHbHpMbk5qY21WM0xuTmxkRUYwZEhKcFluVjBaU2duWm1sc2JDY3NJSFJvYVhNdVkyOXNiM0p6TG1GalkyVnVkQ2s3WEc0Z0lDQWdkR2hwY3k1b1lXNWtiR1V1YzJWMFFYUjBjbWxpZFhSbEtDZHpkSEp2YTJVbkxDQjBhR2x6TG1OdmJHOXljeTVoWTJObGJuUXBPMXh1SUNBZ0lIUm9hWE11YUdGdVpHeGxNaTV6WlhSQmRIUnlhV0oxZEdVb0ozTjBjbTlyWlNjc0lIUm9hWE11WTI5c2IzSnpMbUZqWTJWdWRDazdYRzRnSUNBZ2RHaHBjeTVvWVc1a2JHVkdhV3hzTG5ObGRFRjBkSEpwWW5WMFpTZ25abWxzYkNjc0lIUm9hWE11WTI5c2IzSnpMbUZqWTJWdWRDazdYRzRnSUNBZ2RHaHBjeTVvWVc1a2JHVXlSbWxzYkM1elpYUkJkSFJ5YVdKMWRHVW9KMlpwYkd3bkxDQjBhR2x6TG1OdmJHOXljeTVoWTJObGJuUXBPMXh1SUNBZ0lIUm9hWE11YUdGdVpHeGxUR2x1WlM1elpYUkJkSFJ5YVdKMWRHVW9KM04wY205clpTY3NJSFJvYVhNdVkyOXNiM0p6TG1GalkyVnVkQ2s3WEc1Y2JpQWdmVnh1WEc0Z0lISmxibVJsY2lncElIdGNiaUFnSUNCc1pYUWdkbUZzZFdVZ1BTQjBhR2x6TGw5MllXeDFaUzV1YjNKdFlXeHBlbVZrTzF4dVhHNGdJQ0FnYkdWMElHTmxiblJsY2lBOUlIdGNiaUFnSUNBZ0lIZzZJSFJvYVhNdWQybGtkR2d2TWl4Y2JpQWdJQ0FnSUhrNklIUm9hWE11YUdWcFoyaDBMekpjYmlBZ0lDQjlPMXh1WEc0Z0lDQWdiR1YwSUdScFlXMWxkR1Z5SUQwZ1RXRjBhQzV0YVc0b2RHaHBjeTUzYVdSMGFDeDBhR2x6TG1obGFXZG9kQ2s3WEc1Y2JpQWdJQ0JzWlhRZ2FHRnVaR3hsVUc5cGJuUnpJRDBnZTF4dUlDQWdJQ0FnYzNSaGNuUTZJRTFoZEdndVVFa3FNUzQxTEZ4dUlDQWdJQ0FnWlc1a09pQnRZWFJvTG1Oc2FYQW9JRzFoZEdndWMyTmhiR1VvZG1Gc2RXVXNNQ3d3TGpVc1RXRjBhQzVRU1NveExqVXNUV0YwYUM1UVNTb3dMalVwSUN3Z1RXRjBhQzVRU1Nvd0xqVXNJRTFoZEdndVVFa3FNUzQxSUNsY2JpQWdJQ0I5TzF4dUlDQWdJR3hsZENCb1lXNWtiR1V5VUc5cGJuUnpJRDBnZTF4dUlDQWdJQ0FnYzNSaGNuUTZJRTFoZEdndVVFa2dLakl1TlN4Y2JpQWdJQ0FnSUdWdVpEb2diV0YwYUM1amJHbHdLQ0J0WVhSb0xuTmpZV3hsS0haaGJIVmxMREF1TlN3eExFMWhkR2d1VUVrcU1pNDFMRTFoZEdndVVFa3FNUzQxS1NBc0lFMWhkR2d1VUVrcU1TNDFMQ0JOWVhSb0xsQkpLakl1TlNBcFhHNGdJQ0FnZlR0Y2JseHVJQ0FnSUd4bGRDQm9ZVzVrYkdWUVlYUm9JRDBnYzNabkxtRnlZeWhqWlc1MFpYSXVlQ3dnWTJWdWRHVnlMbmtzSUdScFlXMWxkR1Z5THpJdFpHbGhiV1YwWlhJdk5EQXNJR2hoYm1Sc1pWQnZhVzUwY3k1emRHRnlkQ3dnYUdGdVpHeGxVRzlwYm5SekxtVnVaQ2s3WEc0Z0lDQWdiR1YwSUdoaGJtUnNaVEpRWVhSb0lEMGdjM1puTG1GeVl5aGpaVzUwWlhJdWVDd2dZMlZ1ZEdWeUxua3NJR1JwWVcxbGRHVnlMekl0WkdsaGJXVjBaWEl2TkRBc0lHaGhibVJzWlRKUWIybHVkSE11YzNSaGNuUXNJR2hoYm1Sc1pUSlFiMmx1ZEhNdVpXNWtLVHRjYmx4dUlDQWdJSFJvYVhNdWFHRnVaR3hsTG5ObGRFRjBkSEpwWW5WMFpTZ25aQ2NzYUdGdVpHeGxVR0YwYUNrN1hHNGdJQ0FnZEdocGN5NW9ZVzVrYkdVeUxuTmxkRUYwZEhKcFluVjBaU2duWkNjc2FHRnVaR3hsTWxCaGRHZ3BPMXh1WEc1Y2JpQWdJQ0JvWVc1a2JHVlFZWFJvSUNzOUlDY2dUQ0FuSzJObGJuUmxjaTU0S3ljZ0p5dGpaVzUwWlhJdWVUdGNibHh1SUNBZ0lIUm9hWE11YUdGdVpHeGxSbWxzYkM1elpYUkJkSFJ5YVdKMWRHVW9KMlFuTEdoaGJtUnNaVkJoZEdncE8xeHVYRzRnSUNBZ2FHRnVaR3hsTWxCaGRHZ2dLejBnSnlCTUlDY3JZMlZ1ZEdWeUxuZ3JKeUFuSzJObGJuUmxjaTU1TzF4dVhHNGdJQ0FnZEdocGN5NW9ZVzVrYkdVeVJtbHNiQzV6WlhSQmRIUnlhV0oxZEdVb0oyUW5MR2hoYm1Sc1pUSlFZWFJvS1R0Y2JseHVJQ0FnSUd4bGRDQmhjbU5GYm1ScGJtZEJPMXh1SUNBZ0lHbG1JQ2gyWVd4MVpTQThQU0F3TGpVcElIdGNiaUFnSUNBZ0lHRnlZMFZ1WkdsdVowRWdQU0JvWVc1a2JHVlFiMmx1ZEhNdVpXNWtPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCaGNtTkZibVJwYm1kQklEMGdhR0Z1Wkd4bE1sQnZhVzUwY3k1bGJtUTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2JHVjBJR0Z5WTBWdVpHbHVaMWdnUFNCalpXNTBaWEl1ZUNBcklFMWhkR2d1WTI5ektHRnlZMFZ1WkdsdVowRXBJQ29nS0dScFlXMWxkR1Z5THpJcE8xeHVJQ0FnSUd4bGRDQmhjbU5GYm1ScGJtZFpJRDBnWTJWdWRHVnlMbmtnS3lCTllYUm9Mbk5wYmloaGNtTkZibVJwYm1kQktTQXFJQ2hrYVdGdFpYUmxjaTh5S1NBcUlDMHhPMXh1WEc0Z0lDQWdkR2hwY3k1b1lXNWtiR1ZNYVc1bExuTmxkRUYwZEhKcFluVjBaU2duWkNjc0owMGdKeXRqWlc1MFpYSXVlQ3NuSUNjclkyVnVkR1Z5TG5rckp5Qk1JQ2NyWVhKalJXNWthVzVuV0NzbklDY3JZWEpqUlc1a2FXNW5XU2s3WEc1Y2JpQWdmVnh1WEc1Y2JpQWdZMnhwWTJzb0tTQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdWJXOWtaVDA5UFNkeVpXeGhkR2wyWlNjcElIdGNiaUFnSUNBZ0lIUm9hWE11Y0hKbGRtbHZkWE5CYm1kc1pTQTlJR1poYkhObE8xeHVJQ0FnSUgxY2JpQWdJQ0IwYUdsekxuQnZjMmwwYVc5dUxtRnVZMmh2Y2lBOUlIUm9hWE11Ylc5MWMyVTdYRzRnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiaTUyWVd4MVpTQTlJSFJvYVhNdVgzWmhiSFZsTG01dmNtMWhiR2w2WldRN1hHNGdJQ0FnZEdocGN5NXRiM1psS0NrN1hHNGdJQ0I5WEc1Y2JpQWdiVzkyWlNncElIdGNiaUFnSUNCcFppQW9kR2hwY3k1amJHbGphMlZrS1NCN1hHNWNiaUFnSUNBZ0lIUm9hWE11Y0c5emFYUnBiMjR1ZFhCa1lYUmxLSFJvYVhNdWJXOTFjMlVwTzF4dVhHNGdJQ0FnSUNCc1pYUWdZVzVuYkdVZ1BTQjBhR2x6TG5CdmMybDBhVzl1TG5aaGJIVmxLazFoZEdndVVFa3FNanRjYmx4dUlDQWdJQ0FnYVdZZ0tHRnVaMnhsSUR3Z01DQXBJSHNnWVc1bmJHVWdLejBnS0UxaGRHZ3VVRWtxTWlrN0lIMWNibHh1SUNBZ0lDQWdhV1lnS0hSb2FYTXViVzlrWlNBOVBUMGdKM0psYkdGMGFYWmxKeWtnZTF4dUlDQWdJQ0FnSUNCcFppQW9kR2hwY3k1d2NtVjJhVzkxYzBGdVoyeGxJQ0U5UFNCbVlXeHpaU0FtSmlCTllYUm9MbUZpY3loMGFHbHpMbkJ5WlhacGIzVnpRVzVuYkdVZ0xTQmhibWRzWlNrZ1BpQXlLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdWNISmxkbWx2ZFhOQmJtZHNaU0ErSURNcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdGdVoyeGxJRDBnVFdGMGFDNVFTU295TzF4dUlDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JoYm1kc1pTQTlJREE3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlJQzhxSUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTV3Y21WMmFXOTFjMEZ1WjJ4bElDRTlQU0JtWVd4elpTQW1KaUJOWVhSb0xtRmljeWgwYUdsekxuQnlaWFpwYjNWelFXNW5iR1VnTFNCaGJtZHNaU2tnUGlBeUtTQjdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11Y0hKbGRtbHZkWE5CYm1kc1pTQStJRE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR0Z1WjJ4bElEMGdUV0YwYUM1UVNTb3lPMXh1SUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmhibWRzWlNBOUlEQTdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOUlDb3ZYRzRnSUNBZ0lDQjBhR2x6TG5CeVpYWnBiM1Z6UVc1bmJHVWdQU0JoYm1kc1pUdGNibHh1SUNBZ0lDQWdiR1YwSUhKbFlXeFdZV3gxWlNBOUlHRnVaMnhsSUM4Z0tFMWhkR2d1VUVrcU1pazdYRzVjYmlBZ0lDQWdJSFJvYVhNdWRtRnNkV1VnUFNCMGFHbHpMbDkyWVd4MVpTNTFjR1JoZEdWT2IzSnRZV3dvSUhKbFlXeFdZV3gxWlNBcE8xeHVYRzRnSUNBZ0lDQnBaaUFvZEdocGN5NXRiMlJsSUQwOVBTQW5jbVZzWVhScGRtVW5LU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjRzl6YVhScGIyNHVkbUZzZFdVZ1BTQnlaV0ZzVm1Gc2RXVTdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJSFJvYVhNdVpXMXBkQ2duWTJoaGJtZGxKeXgwYUdsekxsOTJZV3gxWlM1MllXeDFaU2s3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtDazdYRzVjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0J5Wld4bFlYTmxLQ2tnZTF4dUlDQjlYRzVjYmlBZ0x5cGNiaUFnUkdsaGJDZHpJSFpoYkhWbExpQlhhR1Z1SUhObGRDd2dhWFFnZDJsc2JDQmhkWFJ2YldGMGFXTmhiR3g1SUdKbElHRmthblZ6ZENCMGJ5Qm1hWFFnYldsdUwyMWhlQzl6ZEdWd0lITmxkSFJwYm1keklHOW1JSFJvWlNCcGJuUmxjbVpoWTJVdVhHNGdJRUIwZVhCbElIdHVkVzFpWlhKOVhHNGdJRUJsZUdGdGNHeGxJR1JwWVd3dWRtRnNkV1VnUFNBeE1EdGNibHh1SUNCblpYUWdkbUZzZFdVb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVYM1poYkhWbExuWmhiSFZsTzF4dUlDQjlYRzVjYmlBZ2MyVjBJSFpoYkhWbEtIWmhiSFZsS1NCN1hHNGdJQ0FnZEdocGN5NWZkbUZzZFdVdWRYQmtZWFJsS0haaGJIVmxLVHRjYmlBZ0lDQjBhR2x6TG1WdGFYUW9KMk5vWVc1blpTY3NkR2hwY3k1MllXeDFaU2s3WEc0Z0lDQWdkR2hwY3k1eVpXNWtaWElvS1R0Y2JpQWdmVnh1S2k5Y2JseHVJQ0FnSUM4cUtseHVJQ0FnSUVScFlXd25jeUIyWVd4MVpTNGdWMmhsYmlCelpYUXNJR2wwSUhkcGJHd2dZWFYwYjIxaGRHbGpZV3hzZVNCaVpTQmhaR3AxYzNRZ2RHOGdabWwwSUcxcGJpOXRZWGd2YzNSbGNDQnpaWFIwYVc1bmN5QnZaaUIwYUdVZ2FXNTBaWEptWVdObExseHVJQ0FnSUVCMGVYQmxJSHR1ZFcxaVpYSjlYRzRnSUNBZ1FHVjRZVzF3YkdVZ1pHbGhiQzUyWVd4MVpTQTlJREV3TzF4dUlDQWdJQ292WEc0Z0lDQWdaMlYwSUhaaGJIVmxLQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdVgzWmhiSFZsTG5aaGJIVmxPMXh1SUNBZ0lIMWNiaUFnSUNCelpYUWdkbUZzZFdVb2Rpa2dlMXh1SUNBZ0lDQWdkR2hwY3k1ZmRtRnNkV1V1ZFhCa1lYUmxLSFlwTzF4dUlDQWdJQ0FnZEdocGN5NXdiM05wZEdsdmJpNTJZV3gxWlNBOUlIUm9hWE11WDNaaGJIVmxMbTV2Y20xaGJHbDZaV1E3WEc0Z0lDQWdJQ0IwYUdsekxtVnRhWFFvSjJOb1lXNW5aU2NzZEdocGN5NWZkbUZzZFdVdWRtRnNkV1VwTzF4dUlDQWdJQ0FnZEdocGN5NXlaVzVrWlhJb0tUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdktpcGNiaUFnSUNCTWIzZGxjaUJzYVcxcGRDQnZaaUIwYUdVZ1pHbGhiQ2R6SUc5MWRIQjFkQ0J5WVc1blpWeHVJQ0FnSUVCMGVYQmxJSHR1ZFcxaVpYSjlYRzRnSUNBZ1FHVjRZVzF3YkdVZ1pHbGhiQzV0YVc0Z1BTQXhNREF3TzF4dUlDQWdJQ292WEc0Z0lDQWdaMlYwSUcxcGJpZ3BJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TGw5MllXeDFaUzV0YVc0N1hHNGdJQ0FnZlZ4dUlDQWdJSE5sZENCdGFXNG9kaWtnZTF4dUlDQWdJQ0FnZEdocGN5NWZkbUZzZFdVdWJXbHVJRDBnZGp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2S2lwY2JpQWdJQ0JWY0hCbGNpQnNhVzFwZENCdlppQjBhR1VnWkdsaGJDZHpJRzkxZEhCMWRDQnlZVzVuWlZ4dUlDQWdJRUIwZVhCbElIdHVkVzFpWlhKOVhHNGdJQ0FnUUdWNFlXMXdiR1VnWkdsaGJDNXRZWGdnUFNBeE1EQXdPMXh1SUNBZ0lDb3ZYRzRnSUNBZ1oyVjBJRzFoZUNncElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDkyWVd4MVpTNXRZWGc3WEc0Z0lDQWdmVnh1SUNBZ0lITmxkQ0J0WVhnb2Rpa2dlMXh1SUNBZ0lDQWdkR2hwY3k1ZmRtRnNkV1V1YldGNElEMGdkanRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZLaXBjYmlBZ0lDQlVhR1VnYVc1amNtVnRaVzUwSUhSb1lYUWdkR2hsSUdScFlXd25jeUIyWVd4MVpTQmphR0Z1WjJWeklHSjVMbHh1SUNBZ0lFQjBlWEJsSUh0dWRXMWlaWEo5WEc0Z0lDQWdRR1Y0WVcxd2JHVWdaR2xoYkM1emRHVndJRDBnTlR0Y2JpQWdJQ0FxTDF4dUlDQWdJR2RsZENCemRHVndLQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdVgzWmhiSFZsTG5OMFpYQTdYRzRnSUNBZ2ZWeHVJQ0FnSUhObGRDQnpkR1Z3S0hZcElIdGNiaUFnSUNBZ0lIUm9hWE11WDNaaGJIVmxMbk4wWlhBZ1BTQjJPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHFLbHh1SUNBZ0lFRmljMjlzZFhSbElHMXZaR1VnS0dScFlXd25jeUIyWVd4MVpTQnFkVzF3Y3lCMGJ5QnRiM1Z6WlNCamJHbGpheUJ3YjNOcGRHbHZiaWtnYjNJZ2NtVnNZWFJwZG1VZ2JXOWtaU0FvYlc5MWMyVWdaSEpoWnlCamFHRnVaMlZ6SUhaaGJIVmxJSEpsYkdGMGFYWmxJSFJ2SUdsMGN5QmpkWEp5Wlc1MElIQnZjMmwwYVc5dUtTNGdSR1ZtWVhWc2REb2dYQ0p5Wld4aGRHbDJaVndpTGx4dUlDQWdJRUIwZVhCbElIdHpkSEpwYm1kOVhHNGdJQ0FnUUdWNFlXMXdiR1VnWkdsaGJDNXRiMlJsSUQwZ1hDSnlaV3hoZEdsMlpWd2lPMXh1SUNBZ0lDb3ZYRzRnSUNBZ1oyVjBJRzF2WkdVb0tTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTV3YjNOcGRHbHZiaTV0YjJSbE8xeHVJQ0FnSUgxY2JpQWdJQ0J6WlhRZ2JXOWtaU2gyS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbkJ2YzJsMGFXOXVMbTF2WkdVZ1BTQjJPMXh1SUNBZ0lIMWNibHh1WEc0Z0lDOHFLbHh1SUNCT2IzSnRZV3hwZW1Wa0lIWmhiSFZsSUc5bUlIUm9aU0JrYVdGc0xseHVJQ0JBZEhsd1pTQjdiblZ0WW1WeWZWeHVJQ0JBWlhoaGJYQnNaU0JrYVdGc0xtNXZjbTFoYkdsNlpXUWdQU0F3TGpVN1hHNGdJQ292WEc0Z0lHZGxkQ0J1YjNKdFlXeHBlbVZrS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxsOTJZV3gxWlM1dWIzSnRZV3hwZW1Wa08xeHVJQ0I5WEc1Y2JpQWdjMlYwSUc1dmNtMWhiR2w2WldRb2Rpa2dlMXh1SUNBZ0lIUm9hWE11WDNaaGJIVmxMblZ3WkdGMFpVNXZjbTFoYkNoMktUdGNiaUFnSUNCMGFHbHpMbVZ0YVhRb0oyTm9ZVzVuWlNjc2RHaHBjeTUyWVd4MVpTazdYRzRnSUgxY2JseHVmVnh1WEc1Y2JseHVMeThnVjBWQ1VFRkRTeUJHVDA5VVJWSWdMeTljYmk4dklDNHZmaTlxYzJocGJuUXRiRzloWkdWeUlTNHZiR2xpTDJsdWRHVnlabUZqWlhNdlpHbGhiQzVxY3lJc0lpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWJHVjBJSE4yWnlBOUlISmxjWFZwY21Vb0p5NHVMM1YwYVd3dmMzWm5KeWs3WEc1c1pYUWdTVzUwWlhKbVlXTmxJRDBnY21WeGRXbHlaU2duTGk0dlkyOXlaUzlwYm5SbGNtWmhZMlVuS1R0Y2JteGxkQ0JDZFhSMGIyNVVaVzF3YkdGMFpTQTlJSEpsY1hWcGNtVW9KeTR1TDJOdmJYQnZibVZ1ZEhNdlluVjBkRzl1ZEdWdGNHeGhkR1VuS1R0Y2JteGxkQ0IwYjNWamFDQTlJSEpsY1hWcGNtVW9KeTR1TDNWMGFXd3ZkRzkxWTJnbktUdGNibHh1WTJ4aGMzTWdVR2xoYm05TFpYa2daWGgwWlc1a2N5QkNkWFIwYjI1VVpXMXdiR0YwWlNCN1hHNWNiaUFnWTI5dWMzUnlkV04wYjNJb0tTQjdYRzVjYmlBZ0lDQnNaWFFnYjNCMGFXOXVjeUE5SUZzbmRtRnNkV1VuTENkdWIzUmxKeXduWTI5c2IzSW5YVHRjYmx4dUlDQWdJR3hsZENCa1pXWmhkV3gwY3lBOUlIdGNiaUFnSUNBZ0lDZHphWHBsSnpvZ1d6Z3dMRGd3WFN4Y2JpQWdJQ0FnSUNkMFlYSm5aWFFuT2lCbVlXeHpaU3hjYmlBZ0lDQWdJQ2R0YjJSbEp6b2dKMkoxZEhSdmJpY3NYRzRnSUNBZ0lDQW5kbUZzZFdVbk9pQXdYRzRnSUNBZ2ZUdGNibHh1SUNBZ0lITjFjR1Z5S0dGeVozVnRaVzUwY3l4dmNIUnBiMjV6TEdSbFptRjFiSFJ6S1R0Y2JseHVJQ0FnSUhSb2FYTXVibTkwWlNBOUlIUm9hWE11YzJWMGRHbHVaM011Ym05MFpUdGNiaUFnSUNCMGFHbHpMbU52Ykc5eUlEMGdkR2hwY3k1elpYUjBhVzVuY3k1amIyeHZjanRjYmx4dUlDQWdJSFJvYVhNdVkyOXNiM0p6SUQwZ2UxeHVJQ0FnSUNBZ0ozY25PaUFuSTJabVppY3NYRzRnSUNBZ0lDQW5ZaWM2SUNjak5qWTJKeXhjYmlBZ0lDQjlPMXh1WEc0Z0lDQWdkR2hwY3k1cGJtbDBLQ2s3WEc0Z0lDQWdkR2hwY3k1eVpXNWtaWElvS1R0Y2JseHVJQ0I5WEc1Y2JpQWdZblZwYkdSR2NtRnRaU2dwSUh0Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RZ1BTQnpkbWN1WTNKbFlYUmxLQ2R6ZG1jbktUdGNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUXVjMlYwUVhSMGNtbGlkWFJsS0NkM2FXUjBhQ2NzZEdocGN5NTNhV1IwYUNrN1hHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExuTmxkRUYwZEhKcFluVjBaU2duYUdWcFoyaDBKeXgwYUdsekxtaGxhV2RvZENrN1hHNGdJQ0FnZEdocGN5NXdZWEpsYm5RdVlYQndaVzVrUTJocGJHUW9kR2hwY3k1bGJHVnRaVzUwS1R0Y2JpQWdmVnh1WEc0Z0lHSjFhV3hrU1c1MFpYSm1ZV05sS0NrZ2UxeHVYRzRnSUNBZ2RHaHBjeTV3WVdRZ1BTQnpkbWN1WTNKbFlYUmxLQ2R5WldOMEp5azdYRzVjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1WVhCd1pXNWtRMmhwYkdRb2RHaHBjeTV3WVdRcE8xeHVYRzRnSUNBZ2RHaHBjeTVwYm5SbGNtRmpkR2x2YmxSaGNtZGxkQ0E5SUhSb2FYTXVjR0ZrTzF4dVhHNGdJQ0FnTHlvZ1pYWmxiblJ6SUNvdlhHNWNiaUFnSUNCcFppQW9JWFJ2ZFdOb0xtVjRhWE4wY3lrZ2UxeHVYRzRnSUNBZ0lDQjBhR2x6TG1Oc2FXTnJJRDBnS0NrZ1BUNGdlMXh1SUNBZ0lDQWdMeThnSUdOdmJuTnZiR1V1Ykc5bktDZGpiR2xqYXljcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5CcFlXNXZMbWx1ZEdWeVlXTjBhVzVuSUQwZ2RISjFaVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXdhV0Z1Ynk1d1lXbHVkR0p5ZFhOb0lEMGdJWFJvYVhNdWMzUmhkR1U3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVaRzkzYmloMGFHbHpMbkJwWVc1dkxuQmhhVzUwWW5KMWMyZ3BPMXh1SUNBZ0lDQWdmVHRjYmx4dUlDQWdJQ0FnZEdocGN5NXdZV1F1WVdSa1JYWmxiblJNYVhOMFpXNWxjaWduYlc5MWMyVnZkbVZ5Snl3Z0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNCcFppQW9kR2hwY3k1d2FXRnVieTVwYm5SbGNtRmpkR2x1WnlrZ2UxeHVJQ0FnSUNBZ0x5OGdJQ0FnWTI5dWMyOXNaUzVzYjJjb0oyMXZkWE5sYjNabGNpY3BPMXh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVaRzkzYmloMGFHbHpMbkJwWVc1dkxuQmhhVzUwWW5KMWMyZ3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5S1R0Y2JseHVYRzRnSUNBZ0lDQjBhR2x6TG0xdmRtVWdQU0FvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbkJwWVc1dkxtbHVkR1Z5WVdOMGFXNW5LU0I3WEc0Z0lDQWdJQ0FnSUM4dklDQmpiMjV6YjJ4bExteHZaeWduYlc5MlpTY3BPMXh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVZbVZ1WkNncE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlPMXh1WEc1Y2JpQWdJQ0FnSUhSb2FYTXVjbVZzWldGelpTQTlJQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1d2FXRnVieTVwYm5SbGNtRmpkR2x1WnlBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnTHk4Z0lHTnZibk52YkdVdWJHOW5LQ2R5Wld4bFlYTmxKeWs3WEc0Z0lDQWdJQ0F2THlBZ2RHaHBjeTUxY0NncE8xeHVJQ0FnSUNBZ2ZUdGNiaUFnSUNBZ0lIUm9hWE11Y0dGa0xtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJb0oyMXZkWE5sZFhBbkxDQW9LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxuQnBZVzV2TG1sdWRHVnlZV04wYVc1bktTQjdYRzRnSUNBZ0lDQWdJQzh2SUNCamIyNXpiMnhsTG14dlp5Z25iVzkxYzJWMWNDY3BPMXh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVkWEFvS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQjBhR2x6TG5CaFpDNWhaR1JGZG1WdWRFeHBjM1JsYm1WeUtDZHRiM1Z6Wlc5MWRDY3NJQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVjR2xoYm04dWFXNTBaWEpoWTNScGJtY3BJSHRjYmlBZ0lDQWdJQ0FnTHk4Z0lHTnZibk52YkdVdWJHOW5LQ2R0YjNWelpXOTFkQ2NwTzF4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11ZFhBb0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmU2s3WEc1Y2JpQWdJQ0I5WEc1Y2JpQWdmVnh1WEc0Z0lITnBlbVZKYm5SbGNtWmhZMlVvS1NCN1hHNWNiaUFnSUNBZ0lDQWdMeTlzWlhRZ2NtRmthWFZ6SUQwZ1RXRjBhQzV0YVc0b2RHaHBjeTUzYVdSMGFDeDBhR2x6TG1obGFXZG9kQ2tnTHlBMU8xeHVJQ0FnSUNBZ0lDQnNaWFFnY21Ga2FYVnpJRDBnTUR0Y2JseHVJQ0FnSUNBZ0lDQjBhR2x6TG5CaFpDNXpaWFJCZEhSeWFXSjFkR1VvSjNnbkxEQXVOU2s3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjR0ZrTG5ObGRFRjBkSEpwWW5WMFpTZ25lU2NzTUM0MUtUdGNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVkMmxrZEdnZ1BpQXlLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTV3WVdRdWMyVjBRWFIwY21saWRYUmxLQ2QzYVdSMGFDY3NJSFJvYVhNdWQybGtkR2dnTFNBeEtUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxuQmhaQzV6WlhSQmRIUnlhV0oxZEdVb0ozZHBaSFJvSnl3Z2RHaHBjeTUzYVdSMGFDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11YUdWcFoyaDBJRDRnTWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWNHRmtMbk5sZEVGMGRISnBZblYwWlNnbmFHVnBaMmgwSnl3Z2RHaHBjeTVvWldsbmFIUXBPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVjR0ZrTG5ObGRFRjBkSEpwWW5WMFpTZ25hR1ZwWjJoMEp5d2dkR2hwY3k1b1pXbG5hSFFwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIUm9hWE11Y0dGa0xuTmxkRUYwZEhKcFluVjBaU2duY25nbkxDQnlZV1JwZFhNcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5CaFpDNXpaWFJCZEhSeWFXSjFkR1VvSjNKNUp5d2djbUZrYVhWektUdGNibHh1SUNCOVhHNWNiaUFnY21WdVpHVnlLQ2tnZTF4dUlDQWdJR2xtSUNnaGRHaHBjeTV6ZEdGMFpTa2dlMXh1SUNBZ0lDQWdkR2hwY3k1d1lXUXVjMlYwUVhSMGNtbGlkWFJsS0NkbWFXeHNKeXdnZEdocGN5NWpiMnh2Y25OYmRHaHBjeTVqYjJ4dmNsMHBPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCMGFHbHpMbkJoWkM1elpYUkJkSFJ5YVdKMWRHVW9KMlpwYkd3bkxDQjBhR2x6TG1OdmJHOXljeTVoWTJObGJuUXBPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNTlYRzVjYmk4cUtseHVLaUJRYVdGdWIxeHVLbHh1S2lCQVpHVnpZM0pwY0hScGIyNGdVR2xoYm04Z2EyVjVZbTloY21RZ2FXNTBaWEptWVdObFhHNHFYRzRxSUVCa1pXMXZJRHhrYVhZZ2JtVjRkWE10ZFdrOVhDSndhV0Z1YjF3aVBqd3ZaR2wyUGx4dUtseHVLaUJBWlhoaGJYQnNaVnh1S2lCMllYSWdjR2xoYm04Z1BTQnVaWGNnVG1WNGRYTXVVR2xoYm04b0p5TjBZWEpuWlhRbktWeHVLbHh1S2lCQVpYaGhiWEJzWlZ4dUtpQjJZWElnY0dsaGJtOGdQU0J1WlhjZ1RtVjRkWE11VUdsaGJtOG9KeU4wWVhKblpYUW5MSHRjYmlvZ0lDQWdJQ2R6YVhwbEp6b2dXelV3TUN3eE1qVmRMRnh1S2lBZ0lDQWdKMjF2WkdVbk9pQW5ZblYwZEc5dUp5d2dJQzh2SUNkaWRYUjBiMjRuTENBbmRHOW5aMnhsSnl3Z2IzSWdKMmx0Y0hWc2MyVW5YRzRxSUNBZ0lDQW5iRzkzVG05MFpTYzZJREkwTEZ4dUtpQWdJQ0FnSjJocFoyaE9iM1JsSnpvZ05qQmNiaW9nZlNsY2JpcGNiaW9nUUc5MWRIQjFkRnh1S2lCamFHRnVaMlZjYmlvZ1JtbHlaWE1nWVc1NUlIUnBiV1VnWVNCdVpYY2dhMlY1SUdseklIQnlaWE56WldRZ2IzSWdjbVZzWldGelpXUWdQR0p5UGx4dUtpQlVhR1VnWlhabGJuUWdaR0YwWVNCcGN5QmhiaUJ2WW1wbFkzUWdZMjl1ZEdGcGJtbHVaeUE4YVQ1dWIzUmxQQzlwUGlCaGJtUWdQR2srYzNSaGRHVThMMmsrSUhCeWIzQmxjblJwWlhNdVhHNHFYRzRxSUVCdmRYUndkWFJsZUdGdGNHeGxYRzRxSUhCcFlXNXZMbTl1S0NkamFHRnVaMlVuTEdaMWJtTjBhVzl1S0hZcElIdGNiaW9nSUNCamIyNXpiMnhsTG14dlp5aDJLVHRjYmlvZ2ZTbGNiaXBjYmlvdlhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHTnNZWE56SUZCcFlXNXZJR1Y0ZEdWdVpITWdTVzUwWlhKbVlXTmxJSHRjYmx4dUlDQmpiMjV6ZEhKMVkzUnZjaWdwSUh0Y2JseHVJQ0FnSUd4bGRDQnZjSFJwYjI1eklEMGdXeWQyWVd4MVpTZGRPMXh1WEc0Z0lDQWdiR1YwSUdSbFptRjFiSFJ6SUQwZ2UxeHVJQ0FnSUNBZ0ozTnBlbVVuT2lCYk5UQXdMREV5TlYwc1hHNGdJQ0FnSUNBbmJHOTNUbTkwWlNjNklESTBMRnh1SUNBZ0lDQWdKMmhwWjJoT2IzUmxKem9nTmpBc1hHNGdJQ0FnSUNBbmJXOWtaU2M2SUNkaWRYUjBiMjRuWEc0Z0lDQWdmVHRjYmx4dUlDQWdJSE4xY0dWeUtHRnlaM1Z0Wlc1MGN5eHZjSFJwYjI1ekxHUmxabUYxYkhSektUdGNibHh1SUNBZ0lIUm9hWE11YTJWNVVHRjBkR1Z5YmlBOUlGc25keWNzSjJJbkxDZDNKeXduWWljc0ozY25MQ2QzSnl3bllpY3NKM2NuTENkaUp5d25keWNzSjJJbkxDZDNKMTA3WEc1Y2JpQWdJQ0IwYUdsekxuQmhhVzUwWW5KMWMyZ2dQU0JtWVd4elpUdGNibHh1SUNBZ0lIUm9hWE11Ylc5a1pTQTlJSFJvYVhNdWMyVjBkR2x1WjNNdWJXOWtaVHRjYmx4dUlDQWdJSFJvYVhNdWNtRnVaMlVnUFNCN1hHNGdJQ0FnSUNCc2IzYzZJSFJvYVhNdWMyVjBkR2x1WjNNdWJHOTNUbTkwWlN4Y2JpQWdJQ0FnSUdocFoyZzZJSFJvYVhNdWMyVjBkR2x1WjNNdWFHbG5hRTV2ZEdWY2JpQWdJQ0I5TzF4dVhHNGdJQ0FnZEdocGN5NXlZVzVuWlM1emFYcGxJRDBnZEdocGN5NXlZVzVuWlM1b2FXZG9JQzBnZEdocGN5NXlZVzVuWlM1c2IzYzdYRzVjYmlBZ0lDQjBhR2x6TG10bGVYTWdQU0JiWFR0Y2JseHVJQ0FnSUhSb2FYTXVkRzluWjJ4bFZHOGdQU0JtWVd4elpUdGNibHh1SUNBZ0lIUm9hWE11YVc1cGRDZ3BPMXh1SUNBZ0lIUm9hWE11Y21WdVpHVnlLQ2s3WEc1Y2JpQWdmVnh1WEc0Z0lHSjFhV3hrUm5KaGJXVW9LU0I3WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwSUQwZ1pHOWpkVzFsYm5RdVkzSmxZWFJsUld4bGJXVnVkQ2duWkdsMkp5azdYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbk4wZVd4bExuQnZjMmwwYVc5dUlEMGdKM0psYkdGMGFYWmxKenRjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1YzNSNWJHVXVZbTl5WkdWeVVtRmthWFZ6SUQwZ0p6QndlQ2M3WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG5OMGVXeGxMbVJwYzNCc1lYa2dQU0FuWW14dlkyc25PMXh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkQzV6ZEhsc1pTNTNhV1IwYUNBOUlDY3hNREFsSnp0Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdWMzUjViR1V1YUdWcFoyaDBJRDBnSnpFd01DVW5PMXh1SUNBZ0lIUm9hWE11Y0dGeVpXNTBMbUZ3Y0dWdVpFTm9hV3hrS0hSb2FYTXVaV3hsYldWdWRDazdYRzRnSUgxY2JseHVJQ0JpZFdsc1pFbHVkR1Z5Wm1GalpTZ3BJSHRjYmx4dUlDQWdJSFJvYVhNdWEyVjVjeUE5SUZ0ZE8xeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FUMHdPMms4ZEdocGN5NXlZVzVuWlM1b2FXZG9JQzBnZEdocGN5NXlZVzVuWlM1c2IzYzdhU3NyS1NCN1hHNWNiaUFnSUNBZ0lHeGxkQ0JqYjI1MFlXbHVaWElnUFNCa2IyTjFiV1Z1ZEM1amNtVmhkR1ZGYkdWdFpXNTBLQ2R6Y0dGdUp5azdYRzRnSUNBZ0lDQnNaWFFnYzJOaGJHVkpibVJsZUNBOUlDaHBLM1JvYVhNdWNtRnVaMlV1Ykc5M0tTQWxJSFJvYVhNdWEyVjVVR0YwZEdWeWJpNXNaVzVuZEdnN1hHNWNiaUFnSUNBZ0lHeGxkQ0JyWlhrZ1BTQnVaWGNnVUdsaGJtOUxaWGtvWTI5dWRHRnBibVZ5TENCN1hHNGdJQ0FnSUNBZ0lDQWdZMjl0Y0c5dVpXNTBPaUIwY25WbExGeHVJQ0FnSUNBZ0lDQWdJRzV2ZEdVNklHa3JkR2hwY3k1eVlXNW5aUzVzYjNjc1hHNGdJQ0FnSUNBZ0lDQWdZMjlzYjNJNklIUm9hWE11YTJWNVVHRjBkR1Z5Ymx0elkyRnNaVWx1WkdWNFhTeGNiaUFnSUNBZ0lDQWdJQ0J0YjJSbE9pQjBhR2x6TG0xdlpHVmNiaUFnSUNBZ0lDQWdmU3dnZEdocGN5NXJaWGxEYUdGdVoyVXVZbWx1WkNoMGFHbHpMR2tyZEdocGN5NXlZVzVuWlM1c2IzY3BLVHRjYmx4dUlDQWdJQ0FnYTJWNUxuQnBZVzV2SUQwZ2RHaHBjenRjYmx4dUlDQWdJQ0FnYVdZZ0tIUnZkV05vTG1WNGFYTjBjeWtnZTF4dUlDQWdJQ0FnSUNCclpYa3VjR0ZrTG1sdVpHVjRJRDBnYVR0Y2JpQWdJQ0FnSUNBZ2EyVjVMbkJ5WlVOc2FXTnJJRDBnYTJWNUxuQnlaVTF2ZG1VZ1BTQnJaWGt1Y0hKbFVtVnNaV0Z6WlNBOUlDZ3BJRDArSUh0OU8xeHVJQ0FnSUNBZ0lDQnJaWGt1WTJ4cFkyc2dQU0JyWlhrdWJXOTJaU0E5SUd0bGVTNXlaV3hsWVhObElEMGdLQ2tnUFQ0Z2UzMDdYRzRnSUNBZ0lDQWdJR3RsZVM1d2NtVlViM1ZqYUNBOUlHdGxlUzV3Y21WVWIzVmphRTF2ZG1VZ1BTQnJaWGt1Y0hKbFZHOTFZMmhTWld4bFlYTmxJRDBnS0NrZ1BUNGdlMzA3WEc0Z0lDQWdJQ0FnSUd0bGVTNTBiM1ZqYUNBOUlHdGxlUzUwYjNWamFFMXZkbVVnUFNCclpYa3VkRzkxWTJoU1pXeGxZWE5sSUQwZ0tDa2dQVDRnZTMwN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lIUm9hWE11YTJWNWN5NXdkWE5vS0d0bGVTazdYRzRnSUNBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1WVhCd1pXNWtRMmhwYkdRb1kyOXVkR0ZwYm1WeUtUdGNibHh1SUNBZ0lIMWNiaUFnSUNCcFppQW9kRzkxWTJndVpYaHBjM1J6S1NCN1hHNGdJQ0FnSUNCMGFHbHpMbUZrWkZSdmRXTm9UR2x6ZEdWdVpYSnpLQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lIMWNibHh1SUNCemFYcGxTVzUwWlhKbVlXTmxLQ2tnZTF4dVhHNGdJQ0FnYkdWMElHdGxlVmdnUFNBd08xeHVYRzRnSUNBZ2JHVjBJR3RsZVZCdmMybDBhVzl1Y3lBOUlGdGRPMXh1WEc0Z0lDQWdabTl5SUNoc1pYUWdhVDB3TzJrOGRHaHBjeTV5WVc1blpTNW9hV2RvSUMwZ2RHaHBjeTV5WVc1blpTNXNiM2M3YVNzcktTQjdYRzVjYmlBZ0lDQWdJR3RsZVZCdmMybDBhVzl1Y3k1d2RYTm9LR3RsZVZncE8xeHVYRzRnSUNBZ0lDQnNaWFFnYzJOaGJHVkpibVJsZUNBOUlDaHBLM1JvYVhNdWNtRnVaMlV1Ykc5M0tTQWxJSFJvYVhNdWEyVjVVR0YwZEdWeWJpNXNaVzVuZEdnN1hHNGdJQ0FnSUNCc1pYUWdibVY0ZEZOallXeGxTVzVrWlhnZ1BTQW9hU3N4SzNSb2FYTXVjbUZ1WjJVdWJHOTNLU0FsSUhSb2FYTXVhMlY1VUdGMGRHVnliaTVzWlc1bmRHZzdYRzRnSUNBZ0lDQnBaaUFvYVNzeEszUm9hWE11Y21GdVoyVXViRzkzSUQ0OUlIUm9hWE11Y21GdVoyVXVhR2xuYUNrZ2UxeHVJQ0FnSUNBZ0lDQnJaWGxZSUNzOUlERTdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLSFJvYVhNdWEyVjVVR0YwZEdWeWJsdHpZMkZzWlVsdVpHVjRYU0E5UFQwZ0ozY25JQ1ltSUhSb2FYTXVhMlY1VUdGMGRHVnlibHR1WlhoMFUyTmhiR1ZKYm1SbGVGMGdQVDA5SUNkM0p5a2dlMXh1SUNBZ0lDQWdJQ0JyWlhsWUlDczlJREU3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0JyWlhsWUlDczlJREF1TlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdiR1YwSUd0bGVYTlhhV1JsSUQwZ2EyVjVXRHRjYmx4dVhHNGdJQzh2SUNCc1pYUWdjR0ZrWkdsdVp5QTlJSFJvYVhNdWQybGtkR2dnTHlBeE1qQTdYRzRnSUNBZ2JHVjBJSEJoWkdScGJtY2dQU0F4TzF4dUlDQWdJR3hsZENCaWRYUjBiMjVYYVdSMGFDQTlJQ2gwYUdsekxuZHBaSFJvTFhCaFpHUnBibWNxTWlrZ0x5QnJaWGx6VjJsa1pUdGNiaUFnSUNCc1pYUWdZblYwZEc5dVNHVnBaMmgwSUQwZ0tIUm9hWE11YUdWcFoyaDBMWEJoWkdScGJtY3FNaWtnTHlBeU8xeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FUMHdPMms4ZEdocGN5NXJaWGx6TG14bGJtZDBhRHRwS3lzcElIdGNibHh1SUNBZ0lDQWdiR1YwSUdOdmJuUmhhVzVsY2lBOUlIUm9hWE11YTJWNWMxdHBYUzV3WVhKbGJuUTdYRzRnSUNBZ0lDQmpiMjUwWVdsdVpYSXVjM1I1YkdVdWNHOXphWFJwYjI0Z1BTQW5ZV0p6YjJ4MWRHVW5PMXh1SUNBZ0lDQWdZMjl1ZEdGcGJtVnlMbk4wZVd4bExteGxablFnUFNBb2EyVjVVRzl6YVhScGIyNXpXMmxkS21KMWRIUnZibGRwWkhSb0szQmhaR1JwYm1jcElDc2dKM0I0Snp0Y2JpQWdJQ0FnSUdsbUlDaDBhR2x6TG10bGVYTmJhVjB1WTI5c2IzSWdQVDA5SUNkM0p5a2dlMXh1SUNBZ0lDQWdJQ0JqYjI1MFlXbHVaWEl1YzNSNWJHVXVkRzl3SUQwZ0tIQmhaR1JwYm1jcElDc2dKM0I0Snp0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVyWlhselcybGRMbkpsYzJsNlpTaGlkWFIwYjI1WGFXUjBhQ3dnWW5WMGRHOXVTR1ZwWjJoMEtqSXBPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdZMjl1ZEdGcGJtVnlMbk4wZVd4bExucEpibVJsZUNBOUlERTdYRzRnSUNBZ0lDQWdJR052Ym5SaGFXNWxjaTV6ZEhsc1pTNTBiM0FnUFNCd1lXUmthVzVuS3lkd2VDYzdYRzRnSUNBZ0lDQWdJSFJvYVhNdWEyVjVjMXRwWFM1eVpYTnBlbVVvWW5WMGRHOXVWMmxrZEdnc0lHSjFkSFJ2YmtobGFXZG9kQ294TGpFcE8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ2ZWeHVYRzRnSUgxY2JseHVJQ0JqYjJ4dmNrbHVkR1Z5Wm1GalpTZ3BJSHRjYmx4dUlDQWdJQzh2SUZCcFlXNXZJR3RsZVhNZ1pHOXVKM1FnWVdOMGRXRnNiSGtnYUdGMlpTQmhJSE4wY205clpTQmliM0prWlhKY2JpQWdJQ0F2THlCVWFHVjVJR2hoZG1VZ2MzQmhZMlVnWW1WMGQyVmxiaUIwYUdWdExDQjNhR2xqYUNCemFHOTNjeUIwYUdVZ1VHbGhibThnWW1jZ1kyOXNiM0pjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1YzNSNWJHVXVZbUZqYTJkeWIzVnVaRU52Ykc5eUlEMGdkR2hwY3k1amIyeHZjbk11YldWa2FYVnRUR2xuYUhRN1hHNWNiaUFnSUNCbWIzSWdLR3hsZENCcFBUQTdhVHgwYUdsekxtdGxlWE11YkdWdVozUm9PMmtyS3lrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVyWlhselcybGRMbU52Ykc5eWN5QTlJSHRjYmlBZ0lDQWdJQ0FnSjNjbk9pQjBhR2x6TG1OdmJHOXljeTVzYVdkb2RDeGNiaUFnSUNBZ0lDQWdKMkluT2lCMGFHbHpMbU52Ykc5eWN5NWtZWEpyTEZ4dUlDQWdJQ0FnSUNBbllXTmpaVzUwSnpvZ2RHaHBjeTVqYjJ4dmNuTXVZV05qWlc1MExGeHVJQ0FnSUNBZ0lDQW5ZbTl5WkdWeUp6b2dkR2hwY3k1amIyeHZjbk11YldWa2FYVnRUR2xuYUhSY2JpQWdJQ0FnSUgwN1hHNGdJQ0FnSUNCMGFHbHpMbXRsZVhOYmFWMHVZMjlzYjNKSmJuUmxjbVpoWTJVb0tUdGNiaUFnSUNBZ0lIUm9hWE11YTJWNWMxdHBYUzV5Wlc1a1pYSW9LVHRjYmlBZ0lDQjlYRzVjYmx4dUlDQjlYRzVjYmlBZ2EyVjVRMmhoYm1kbEtHNXZkR1VzYjI0cElIdGNiaUFnSUNBdkx5QmxiV2wwSUdSaGRHRWdabTl5SUdGdWVTQnJaWGtnZEhWeWJtbHVaeUJ2Ymk5dlptWmNiaUFnSUNBdkx5QmNJbTV2ZEdWY0lpQnBjeUIwYUdVZ2JtOTBaU0IyWVd4MVpWeHVJQ0FnSUM4dklGd2liMjVjSWlCcGN5QmhJR0p2YjJ4bFlXNGdkMmhsZEdobGNpQnBkQ0JwY3lCdmJpQnZjaUJ2Wm1aY2JpQWdJQ0F2THlCcGJpQmhablJsY25SdmRXTm9JRzF2WkdVc0lGd2liMjQ2SUdseklHRnVJRzlpYW1WamRDQjNhWFJvSUhOMFlYUmxMM2d2ZVNCd2NtOXdaWEowYVdWelhHNGdJQ0FnZG1GeUlHUmhkR0VnUFNCN1hHNGdJQ0FnSUNCdWIzUmxPaUJ1YjNSbFhHNGdJQ0FnZlR0Y2JpQWdJQ0JwWmlBb2RIbHdaVzltSUc5dUlEMDlQU0FuYjJKcVpXTjBKeWtnZTF4dUlDQWdJQ0FnWkdGMFlTNXpkR0YwWlNBOUlHOXVMbk4wWVhSbE8xeHVJQ0FnSUM4dklDQmtZWFJoTG5nZ1BTQnZiaTU0WEc0Z0lDQWdMeThnSUdSaGRHRXVlU0E5SUc5dUxubGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnWkdGMFlTNXpkR0YwWlNBOUlHOXVPMXh1SUNBZ0lIMWNiaUFnSUNCMGFHbHpMbVZ0YVhRb0oyTm9ZVzVuWlNjc1pHRjBZU2s3WEc0Z0lIMWNibHh1SUNBdktpQmtjbUZuS0c1dmRHVXNiMjRwSUh0Y2JpQWdJQ0IwYUdsekxtVnRhWFFvSjJOb1lXNW5aU2NzZTF4dUlDQWdJQ0FnYm05MFpUb2dibTkwWlN4Y2JpQWdJQ0FnSUhOMFlYUmxPaUJ2Ymx4dUlDQWdJSDBwTzF4dUlDQjlJQ292WEc1Y2JpQWdjbVZ1WkdWeUtDa2dlMXh1SUNBZ0lDOHZJR3h2YjNBZ2RHaHliM1ZuYUNCaGJtUWdjbVZ1WkdWeUlIUm9aU0JyWlhselAxeHVJQ0I5WEc1Y2JseHVJQ0JoWkdSVWIzVmphRXhwYzNSbGJtVnljeWdwSUh0Y2JseHVJQ0FnSUhSb2FYTXVjSEpsUTJ4cFkyc2dQU0IwYUdsekxuQnlaVTF2ZG1VZ1BTQjBhR2x6TG5CeVpWSmxiR1ZoYzJVZ1BTQW9LU0E5UGlCN2ZUdGNiaUFnSUNCMGFHbHpMbU5zYVdOcklEMGdkR2hwY3k1dGIzWmxJRDBnZEdocGN5NXlaV3hsWVhObElEMGdLQ2tnUFQ0Z2UzMDdYRzRnSUNBZ2RHaHBjeTV3Y21WVWIzVmphQ0E5SUhSb2FYTXVjSEpsVkc5MVkyaE5iM1psSUQwZ2RHaHBjeTV3Y21WVWIzVmphRkpsYkdWaGMyVWdQU0FvS1NBOVBpQjdmVHRjYmlBZ0lDQjBhR2x6TG5SdmRXTm9JRDBnZEdocGN5NTBiM1ZqYUUxdmRtVWdQU0IwYUdsekxuUnZkV05vVW1Wc1pXRnpaU0E5SUNncElEMCtJSHQ5TzF4dVhHNGdJQ0FnZEdocGN5NWpkWEp5Wlc1MFJXeGxiV1Z1ZENBOUlHWmhiSE5sTzF4dVhHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJb0ozUnZkV05vYzNSaGNuUW5MQ0FvWlNrZ1BUNGdlMXh1SUNBZ0lDQWdZMjl1YzI5c1pTNXNiMmNvSjNSdmRXTm9jM1JoY25RbktUdGNiaUFnSUNBZ0lHeGxkQ0JsYkdWdFpXNTBJRDBnWkc5amRXMWxiblF1Wld4bGJXVnVkRVp5YjIxUWIybHVkQ2hsTG5SaGNtZGxkRlJ2ZFdOb1pYTmJNRjB1WTJ4cFpXNTBXQ3hsTG5SaGNtZGxkRlJ2ZFdOb1pYTmJNRjB1WTJ4cFpXNTBXU2s3WEc0Z0lDQWdJQ0JzWlhRZ2EyVjVJRDBnZEdocGN5NXJaWGx6VzJWc1pXMWxiblF1YVc1a1pYaGRPMXh1SUNBZ0lDQWdkR2hwY3k1d1lXbHVkR0p5ZFhOb0lEMGdJV3RsZVM1emRHRjBaVHRjYmlBZ0lDQWdJR3RsZVM1a2IzZHVLSFJvYVhNdWNHRnBiblJpY25WemFDazdYRzRnSUNBZ0lDQjBhR2x6TG1OMWNuSmxiblJGYkdWdFpXNTBJRDBnWld4bGJXVnVkQzVwYm1SbGVEdGNiaUFnSUNBZ0lHVXVjSEpsZG1WdWRFUmxabUYxYkhRb0tUdGNiaUFnSUNBZ0lHVXVjM1J2Y0ZCeWIzQmhaMkYwYVc5dUtDazdYRzRnSUNBZ2ZTazdYRzVjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1WVdSa1JYWmxiblJNYVhOMFpXNWxjaWduZEc5MVkyaHRiM1psSnl3Z0tHVXBJRDArSUh0Y2JpQWdJQ0FnSUd4bGRDQmxiR1Z0Wlc1MElEMGdaRzlqZFcxbGJuUXVaV3hsYldWdWRFWnliMjFRYjJsdWRDaGxMblJoY21kbGRGUnZkV05vWlhOYk1GMHVZMnhwWlc1MFdDeGxMblJoY21kbGRGUnZkV05vWlhOYk1GMHVZMnhwWlc1MFdTazdYRzRnSUNBZ0lDQnNaWFFnYTJWNUlEMGdkR2hwY3k1clpYbHpXMlZzWlcxbGJuUXVhVzVrWlhoZE8xeHVJQ0FnSUNBZ2FXWWdLR1ZzWlcxbGJuUXVhVzVrWlhnaFBUMTBhR2x6TG1OMWNuSmxiblJGYkdWdFpXNTBLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG1OMWNuSmxiblJGYkdWdFpXNTBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2JHVjBJSEJoYzNSTFpYa2dQU0IwYUdsekxtdGxlWE5iZEdocGN5NWpkWEp5Wlc1MFJXeGxiV1Z1ZEYwN1hHNGdJQ0FnSUNBZ0lDQWdjR0Z6ZEV0bGVTNTFjQ2dwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHdGxlUzVrYjNkdUtIUm9hWE11Y0dGcGJuUmljblZ6YUNrN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCclpYa3VZbVZ1WkNncE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2RHaHBjeTVqZFhKeVpXNTBSV3hsYldWdWRDQTlJR1ZzWlcxbGJuUXVhVzVrWlhnN1hHNGdJQ0FnSUNCbExuQnlaWFpsYm5SRVpXWmhkV3gwS0NrN1hHNGdJQ0FnSUNCbExuTjBiM0JRY205d1lXZGhkR2x2YmlncE8xeHVJQ0FnSUgwcE8xeHVYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbUZrWkVWMlpXNTBUR2x6ZEdWdVpYSW9KM1J2ZFdOb1pXNWtKeXdnS0dVcElEMCtJSHRjYmlBZ0lDQWdJQzh2SUc1dklIUnZkV05vWlhNZ2RHOGdZMkZzWTNWc1lYUmxJR0psWTJGMWMyVWdibTl1WlNCeVpXMWhhVzVwYm1kY2JpQWdJQ0FnSUd4bGRDQnJaWGtnUFNCMGFHbHpMbXRsZVhOYmRHaHBjeTVqZFhKeVpXNTBSV3hsYldWdWRGMDdYRzRnSUNBZ0lDQnJaWGt1ZFhBb0tUdGNiaUFnSUNBZ0lIUm9hWE11YVc1MFpYSmhZM1JwYm1jZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUhSb2FYTXVZM1Z5Y21WdWRFVnNaVzFsYm5RZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUdVdWNISmxkbVZ1ZEVSbFptRjFiSFFvS1R0Y2JpQWdJQ0FnSUdVdWMzUnZjRkJ5YjNCaFoyRjBhVzl1S0NrN1hHNGdJQ0FnZlNrN1hHNWNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQkVaV1pwYm1VZ2RHaGxJSEJwZEdOb0lISmhibWRsSUNoc2IzZGxjM1FnWVc1a0lHaHBaMmhsYzNRZ2JtOTBaU2tnYjJZZ2RHaGxJSEJwWVc1dklHdGxlV0p2WVhKa0xseHVJQ0JBY0dGeVlXMGdiRzkzSUh0dWRXMWlaWEo5SUUxSlJFa2dibTkwWlNCMllXeDFaU0J2WmlCMGFHVWdiRzkzWlhOMElHNXZkR1VnYjI0Z2RHaGxJR3RsZVdKdllYSmtYRzRnSUVCd1lYSmhiU0JvYVdkb0lIdHVkVzFpWlhKOUlFMUpSRWtnYm05MFpTQjJZV3gxWlNCdlppQjBhR1VnYUdsbmFHVnpkQ0J1YjNSbElHOXVJSFJvWlNCclpYbGliMkZ5WkZ4dUlDQXFMMXh1SUNCelpYUlNZVzVuWlNoc2IzY3NhR2xuYUNrZ2UxeHVJQ0FnSUhSb2FYTXVjbUZ1WjJVdWJHOTNJRDBnYkc5M08xeHVJQ0FnSUhSb2FYTXVjbUZ1WjJVdWFHbG5hQ0E5SUdocFoyZzdYRzRnSUNBZ2RHaHBjeTVsYlhCMGVTZ3BPMXh1SUNBZ0lIUm9hWE11WW5WcGJHUkpiblJsY21aaFkyVW9LVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0JVZFhKdUlHRWdhMlY1SUc5dUlHOXlJRzltWmlCMWMybHVaeUJwZEhNZ1RVbEVTU0J1YjNSbElIWmhiSFZsTzF4dUlDQkFjR0Z5WVcwZ2JtOTBaU0I3Ym5WdFltVnlmU0JOU1VSSklHNXZkR1VnZG1Gc2RXVWdiMllnZEdobElHdGxlU0IwYnlCamFHRnVaMlZjYmlBZ1FIQmhjbUZ0SUc5dUlIdGliMjlzWldGdWZTQlhhR1YwYUdWeUlIUm9aU0J1YjNSbElITm9iM1ZzWkNCMGRYSnVJRzl1SUc5eUlHOW1abHh1SUNBcUwxeHVJQ0IwYjJkbmJHVkxaWGtvYm05MFpTd2diMjRwSUh0Y2JpQWdJQ0IwYUdsekxtdGxlWE5iYm05MFpTMTBhR2x6TG5KaGJtZGxMbXh2ZDEwdVpteHBjQ2h2YmlrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ1ZIVnliaUJoSUd0bGVTQnZiaUJ2Y2lCdlptWWdkWE5wYm1jZ2FYUnpJR3RsZVNCcGJtUmxlQ0J2YmlCMGFHVWdjR2xoYm04Z2FXNTBaWEptWVdObExseHVJQ0JBY0dGeVlXMGdhVzVrWlhnZ2UyNTFiV0psY24wZ1NXNWtaWGdnYjJZZ2RHaGxJR3RsZVNCMGJ5QmphR0Z1WjJWY2JpQWdRSEJoY21GdElHOXVJSHRpYjI5c1pXRnVmU0JYYUdWMGFHVnlJSFJvWlNCdWIzUmxJSE5vYjNWc1pDQjBkWEp1SUc5dUlHOXlJRzltWmx4dUlDQXFMMXh1SUNCMGIyZG5iR1ZKYm1SbGVDaHBibVJsZUN3Z2IyNHBJSHRjYmlBZ0lDQjBhR2x6TG10bGVYTmJhVzVrWlhoZExtWnNhWEFvYjI0cE8xeHVJQ0I5WEc1Y2JuMWNibHh1WEc1Y2JpOHZJRmRGUWxCQlEwc2dSazlQVkVWU0lDOHZYRzR2THlBdUwzNHZhbk5vYVc1MExXeHZZV1JsY2lFdUwyeHBZaTlwYm5SbGNtWmhZMlZ6TDNCcFlXNXZMbXB6SWl3aUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1c1pYUWdjM1puSUQwZ2NtVnhkV2x5WlNnbkxpNHZkWFJwYkM5emRtY25LVHRjYm14bGRDQmtiMjBnUFNCeVpYRjFhWEpsS0NjdUxpOTFkR2xzTDJSdmJTY3BPMXh1YkdWMElFbHVkR1Z5Wm1GalpTQTlJSEpsY1hWcGNtVW9KeTR1TDJOdmNtVXZhVzUwWlhKbVlXTmxKeWs3WEc1c1pYUWdRblYwZEc5dVZHVnRjR3hoZEdVZ1BTQnlaWEYxYVhKbEtDY3VMaTlqYjIxd2IyNWxiblJ6TDJKMWRIUnZiblJsYlhCc1lYUmxKeWs3WEc1c1pYUWdUV0YwY21sNFRXOWtaV3dnUFNCeVpYRjFhWEpsS0NjdUxpOXRiMlJsYkhNdmJXRjBjbWw0SnlrN1hHNXNaWFFnUTI5MWJuUmxjazF2WkdWc0lEMGdjbVZ4ZFdseVpTZ25MaTR2Ylc5a1pXeHpMMk52ZFc1MFpYSW5LVHRjYm14bGRDQjBiM1ZqYUNBOUlISmxjWFZwY21Vb0p5NHVMM1YwYVd3dmRHOTFZMmduS1R0Y2JseHVYRzVjYm1Oc1lYTnpJRTFoZEhKcGVFTmxiR3dnWlhoMFpXNWtjeUJDZFhSMGIyNVVaVzF3YkdGMFpTQjdYRzVjYmlBZ1kyOXVjM1J5ZFdOMGIzSW9LU0I3WEc1Y2JpQWdJQ0JzWlhRZ2IzQjBhVzl1Y3lBOUlGc25kbUZzZFdVbkxGMDdYRzVjYmlBZ0lDQnNaWFFnWkdWbVlYVnNkSE1nUFNCN1hHNGdJQ0FnSUNBbmMybDZaU2M2SUZzNE1DdzRNRjBzWEc0Z0lDQWdJQ0FuZEdGeVoyVjBKem9nWm1Gc2MyVXNYRzRnSUNBZ0lDQW5iVzlrWlNjNklDZDBiMmRuYkdVbkxGeHVJQ0FnSUNBZ0ozWmhiSFZsSnpvZ01GeHVJQ0FnSUgwN1hHNWNiaUFnSUNCemRYQmxjaWhoY21kMWJXVnVkSE1zYjNCMGFXOXVjeXhrWldaaGRXeDBjeWs3WEc1Y2JpQWdJQ0IwYUdsekxtbHVaR1Y0SUQwZ2RHaHBjeTV6WlhSMGFXNW5jeTVwYm1SbGVEdGNiaUFnSUNCMGFHbHpMbkp2ZHlBOUlIUm9hWE11YzJWMGRHbHVaM011Y205M08xeHVJQ0FnSUhSb2FYTXVZMjlzZFcxdUlEMGdkR2hwY3k1elpYUjBhVzVuY3k1amIyeDFiVzQ3WEc1Y2JpQWdJQ0IwYUdsekxtMWhkSEpwZUNBOUlIUm9hWE11YzJWMGRHbHVaM011YldGMGNtbDRPMXh1WEc0Z0lDQWdkR2hwY3k1cGJuUmxjbUZqZEdsdVp5QTlJR1poYkhObE8xeHVJQ0FnSUhSb2FYTXVjR0ZwYm5SaWNuVnphQ0E5SUdaaGJITmxPMXh1WEc0Z0lDQWdkR2hwY3k1cGJtbDBLQ2s3WEc0Z0lDQWdkR2hwY3k1eVpXNWtaWElvS1R0Y2JseHVJQ0I5WEc1Y2JpQWdZblZwYkdSR2NtRnRaU2dwSUh0Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RZ1BTQnpkbWN1WTNKbFlYUmxLQ2R6ZG1jbktUdGNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUXVjMlYwUVhSMGNtbGlkWFJsS0NkM2FXUjBhQ2NzZEdocGN5NTNhV1IwYUNrN1hHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExuTmxkRUYwZEhKcFluVjBaU2duYUdWcFoyaDBKeXgwYUdsekxtaGxhV2RvZENrN1hHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExuTjBlV3hsTG5SdmNDQTlJQ2N3Y0hnbk8xeHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNXpkSGxzWlM1c1pXWjBJRDBnSnpCd2VDYzdYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbk4wZVd4bExuQnZjMmwwYVc5dUlEMGdKMkZpYzI5c2RYUmxKenRjYmlBZ0lDQjBhR2x6TG5CaGNtVnVkQzVoY0hCbGJtUkRhR2xzWkNoMGFHbHpMbVZzWlcxbGJuUXBPMXh1SUNCOVhHNWNiaUFnWW5WcGJHUkpiblJsY21aaFkyVW9LU0I3WEc1Y2JpQWdJQ0IwYUdsekxuQmhaQ0E5SUhOMlp5NWpjbVZoZEdVb0ozSmxZM1FuS1R0Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdVlYQndaVzVrUTJocGJHUW9kR2hwY3k1d1lXUXBPMXh1WEc0Z0lDQWdkR2hwY3k1cGJuUmxjbUZqZEdsdmJsUmhjbWRsZENBOUlIUm9hWE11Y0dGa08xeHVYRzRnSUNBZ0x5b2daWFpsYm5SeklDb3ZYRzVjYmlBZ0lDQnBaaUFvSVhSdmRXTm9MbVY0YVhOMGN5a2dlMXh1WEc0Z0lDQWdJQ0IwYUdsekxtTnNhV05ySUQwZ0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbTFoZEhKcGVDNXBiblJsY21GamRHbHVaeUE5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJSFJvYVhNdWJXRjBjbWw0TG5CaGFXNTBZbkoxYzJnZ1BTQWhkR2hwY3k1emRHRjBaVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NWtiM2R1S0hSb2FYTXViV0YwY21sNExuQmhhVzUwWW5KMWMyZ3BPMXh1SUNBZ0lDQWdmVHRjYmlBZ0lDQWdJSFJvYVhNdWNHRmtMbUZrWkVWMlpXNTBUR2x6ZEdWdVpYSW9KMjF2ZFhObGIzWmxjaWNzSUNncElEMCtJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11YldGMGNtbDRMbWx1ZEdWeVlXTjBhVzVuS1NCN1hHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1a2IzZHVLSFJvYVhNdWJXRjBjbWw0TG5CaGFXNTBZbkoxYzJncE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlLVHRjYmx4dVhHNGdJQ0FnSUNCMGFHbHpMbTF2ZG1VZ1BTQW9LU0E5UGlCN1hHNGdJQ0FnSUNCOU8xeHVJQ0FnSUNBZ2RHaHBjeTV3WVdRdVlXUmtSWFpsYm5STWFYTjBaVzVsY2lnbmJXOTFjMlZ0YjNabEp5d2dLR1VwSUQwK0lIdGNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXViV0YwY21sNExtbHVkR1Z5WVdOMGFXNW5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLQ0YwYUdsekxtOW1abk5sZENrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NXZabVp6WlhRZ1BTQmtiMjB1Wm1sdVpGQnZjMmwwYVc5dUtIUm9hWE11Wld4bGJXVnVkQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWJXOTFjMlVnUFNCa2IyMHViRzlqWVhSbFRXOTFjMlVvWlN4MGFHbHpMbTltWm5ObGRDazdYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NWlaVzVrS0NrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMHBPMXh1WEc1Y2JpQWdJQ0FnSUhSb2FYTXVjbVZzWldGelpTQTlJQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1dFlYUnlhWGd1YVc1MFpYSmhZM1JwYm1jZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUgwN1hHNGdJQ0FnSUNCMGFHbHpMbkJoWkM1aFpHUkZkbVZ1ZEV4cGMzUmxibVZ5S0NkdGIzVnpaWFZ3Snl3Z0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNCcFppQW9kR2hwY3k1dFlYUnlhWGd1YVc1MFpYSmhZM1JwYm1jcElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxuVndLQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ2RHaHBjeTV3WVdRdVlXUmtSWFpsYm5STWFYTjBaVzVsY2lnbmJXOTFjMlZ2ZFhRbkxDQW9LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxtMWhkSEpwZUM1cGJuUmxjbUZqZEdsdVp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVkWEFvS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ2ZWeHVYRzRnSUgxY2JseHVJQ0J6YVhwbFNXNTBaWEptWVdObEtDa2dlMXh1WEc0Z0lDQWdkR2hwY3k1d1lXUXVjMlYwUVhSMGNtbGlkWFJsS0NkNEp5d3hLVHRjYmlBZ0lDQjBhR2x6TG5CaFpDNXpaWFJCZEhSeWFXSjFkR1VvSjNrbkxERXBPMXh1SUNBZ0lHbG1JQ2gwYUdsekxuZHBaSFJvSUQ0Z01pa2dlMXh1SUNBZ0lDQWdkR2hwY3k1d1lXUXVjMlYwUVhSMGNtbGlkWFJsS0NkM2FXUjBhQ2NzSUhSb2FYTXVkMmxrZEdnZ0xTQXlLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV3WVdRdWMyVjBRWFIwY21saWRYUmxLQ2QzYVdSMGFDY3NJSFJvYVhNdWQybGtkR2dwTzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvZEdocGN5NW9aV2xuYUhRZ1BpQXlLU0I3WEc0Z0lDQWdJQ0IwYUdsekxuQmhaQzV6WlhSQmRIUnlhV0oxZEdVb0oyaGxhV2RvZENjc0lIUm9hWE11YUdWcFoyaDBJQzBnTWlrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSFJvYVhNdWNHRmtMbk5sZEVGMGRISnBZblYwWlNnbmFHVnBaMmgwSnl3Z2RHaHBjeTVvWldsbmFIUXBPMXh1SUNBZ0lIMWNiaUFnSUNBdkwzUm9hWE11Y0dGa0xuTmxkRUYwZEhKcFluVjBaU2duYUdWcFoyaDBKeXdnZEdocGN5NW9aV2xuYUhRZ0xTQXlLVHRjYmlBZ0lDQjBhR2x6TG5CaFpDNXpaWFJCZEhSeWFXSjFkR1VvSjJacGJHd25MQ0IwYUdsekxtMWhkSEpwZUM1amIyeHZjbk11Wm1sc2JDazdYRzVjYmlBZ2ZWeHVYRzRnSUhKbGJtUmxjaWdwSUh0Y2JpQWdJQ0JwWmlBb0lYUm9hWE11YzNSaGRHVXBJSHRjYmlBZ0lDQWdJSFJvYVhNdWNHRmtMbk5sZEVGMGRISnBZblYwWlNnblptbHNiQ2NzSUhSb2FYTXViV0YwY21sNExtTnZiRzl5Y3k1bWFXeHNLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV3WVdRdWMyVjBRWFIwY21saWRYUmxLQ2RtYVd4c0p5d2dkR2hwY3k1dFlYUnlhWGd1WTI5c2IzSnpMbUZqWTJWdWRDazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JuMWNibHh1THlvcVhHNHFJRk5sY1hWbGJtTmxjbHh1S2x4dUtpQkFaR1Z6WTNKcGNIUnBiMjRnUjNKcFpDQnZaaUJpZFhSMGIyNXpJSGRwZEdnZ1luVnBiSFF0YVc0Z2MzUmxjQ0J6WlhGMVpXNWpaWEl1WEc0cVhHNHFJRUJrWlcxdklEeGthWFlnYm1WNGRYTXRkV2s5WENKelpYRjFaVzVqWlhKY0lpQnpkSGxzWlQxY0luZHBaSFJvT2pRd01IQjRPMmhsYVdkb2REb3lNREJ3ZUR0Y0lqNDhMMlJwZGo1Y2JpcGNiaW9nUUdWNFlXMXdiR1ZjYmlvZ2RtRnlJSE5sY1hWbGJtTmxjaUE5SUc1bGR5Qk9aWGgxY3k1VFpYRjFaVzVqWlhJb0p5TjBZWEpuWlhRbktWeHVLbHh1S2lCQVpYaGhiWEJzWlZ4dUtpQjJZWElnYzJWeGRXVnVZMlZ5SUQwZ2JtVjNJRTVsZUhWekxsTmxjWFZsYm1ObGNpZ25JM1JoY21kbGRDY3NlMXh1S2lBZ0ozTnBlbVVuT2lCYk5EQXdMREl3TUYwc1hHNHFJQ0FuYlc5a1pTYzZJQ2QwYjJkbmJHVW5MRnh1S2lBZ0ozSnZkM01uT2lBMUxGeHVLaUFnSjJOdmJIVnRibk1uT2lBeE1GeHVLbjBwWEc0cVhHNHFJRUJ2ZFhSd2RYUmNiaW9nWTJoaGJtZGxYRzRxSUVacGNtVnpJR0Z1ZVNCMGFXMWxJSFJvWlNCcGJuUmxjbVpoWTJVbmN5QnRZWFJ5YVhnZ1kyaGhibWRsY3k0Z1BHSnlQbHh1S2lCVWFHVWdaWFpsYm5RZ1pHRjBZU0JwY3lCaGJpQnZZbXBsWTNRZ1kyOXVkR0ZwYm1sdVp5QThhVDV5YjNjOEwyaytJQ2h1ZFcxaVpYSXBMQ0E4YVQ1amIyeDFiVzQ4TDJrK0lDaHVkVzFpWlhJcExDQmhibVFnUEdrK2MzUmhkR1U4TDJrK0lDaGliMjlzWldGdUtTQndjbTl3WlhKMGFXVnpMbHh1S2x4dUtpQkFiM1YwY0hWMFpYaGhiWEJzWlZ4dUtpQnpaWEYxWlc1alpYSXViMjRvSjJOb1lXNW5aU2NzWm5WdVkzUnBiMjRvZGlrZ2UxeHVLaUFnSUdOdmJuTnZiR1V1Ykc5bktIWXBPMXh1S2lCOUtWeHVLbHh1S2lCQWIzVjBjSFYwWEc0cUlITjBaWEJjYmlvZ1JtbHlaWE1nWVc1NUlIUnBiV1VnZEdobElITmxjWFZsYm1ObGNpQnpkR1Z3Y3lCMGJ5QjBhR1VnYm1WNGRDQmpiMngxYlc0c0lHbHVJSE5sY1hWbFkyVWdiVzlrWlM0Z1BHSnlQbHh1S2lCVWFHVWdaWFpsYm5RZ1pHRjBZU0JwY3lCaGJpQThhVDVoY25KaGVUd3ZhVDRnWTI5dWRHRnBibWx1WnlCaGJHd2dkbUZzZFdWeklHbHVJSFJvWlNCamIyeDFiVzRzSUR4cFBtSnZkSFJ2YlNCeWIzY2dabWx5YzNROEwyaytMbHh1S2x4dUtpQkFiM1YwY0hWMFpYaGhiWEJzWlZ4dUtpQnpaWEYxWlc1alpYSXViMjRvSjNOMFpYQW5MR1oxYm1OMGFXOXVLSFlwSUh0Y2Jpb2dJQ0JqYjI1emIyeGxMbXh2WnloMktUdGNiaW9nZlNsY2Jpb3ZYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR05zWVhOeklGTmxjWFZsYm1ObGNpQmxlSFJsYm1SeklFbHVkR1Z5Wm1GalpTQjdYRzVjYmlBZ1kyOXVjM1J5ZFdOMGIzSW9LU0I3WEc1Y2JpQWdJQ0JzWlhRZ2IzQjBhVzl1Y3lBOUlGc25kbUZzZFdVblhUdGNibHh1SUNBZ0lHeGxkQ0JrWldaaGRXeDBjeUE5SUh0Y2JpQWdJQ0FnSUNkemFYcGxKem9nV3pRd01Dd3lNREJkTEZ4dUlDQWdJQ0FnSjIxdlpHVW5PaUFuZEc5bloyeGxKeXhjYmlBZ0lDQWdJQ2R5YjNkekp6b2dOU3hjYmlBZ0lDQWdJQ2RqYjJ4MWJXNXpKem9nTVRCY2JpQWdJQ0I5TzF4dVhHNGdJQ0FnYzNWd1pYSW9ZWEpuZFcxbGJuUnpMRzl3ZEdsdmJuTXNaR1ZtWVhWc2RITXBPMXh1WEc0Z0lDQWdkR2hwY3k1aFkzUnBkbVVnUFNBdE1UdGNibHh1SUNBZ0lDOHFLbHh1SUNBZ0lDb2dRblYwZEc5dUlHbHVkR1Z5WVdOMGFXOXVJRzF2WkdVNklITmxaU0JDZFhSMGIyNWNiaUFnSUNBcUlFQjBlWEJsSUh0emRISnBibWQ5WEc0Z0lDQWdLaUJBWlhoaGJYQnNaU0JpZFhSMGIyNHViVzlrWlNBOUlDZDBiMmRuYkdVbk8xeHVJQ0FnSUNvdlhHNGdJQ0FnZEdocGN5NXRiMlJsSUQwZ2RHaHBjeTV6WlhSMGFXNW5jeTV0YjJSbE8xeHVYRzRnSUNBZ0x5b3FYRzRnSUNBZ0tpQlVhR1VnYVc1MFpYSjJZV3dnYjJKcVpXTjBJSGRvYVdOb0lHTnZiblJ5YjJ4eklIUnBiV2x1WnlCaGJtUWdjMlZ4ZFdWdVkyVWdjMk5vWldSMWJHbHVaeTVjYmlBZ0lDQXFJRUIwZVhCbElIdHBiblJsY25aaGJIMWNiaUFnSUNBcUwxeHVJQ0FnSUhSb2FYTXVhVzUwWlhKMllXd2dQU0J1WlhjZ1RtVjRkWE11U1c1MFpYSjJZV3dvTWpBd0xHWjFibU4wYVc5dUtDa2dlMzBzWm1Gc2MyVXBPeUF2THlCcWMyaHBiblFnYVdkdWIzSmxPbXhwYm1WY2JseHVJQ0FnSUM4cUtseHVJQ0FnSUNvZ1FTQk5ZWFJ5YVhnZ2JXOWtaV3dnWTI5dWRHRnBibWx1WnlCdFpYUm9iMlJ6SUdadmNpQnRZVzVwY0hWc1lYUnBibWNnZEdobElITmxjWFZsYm1ObGNpZHpJR0Z5Y21GNUlHOW1JSFpoYkhWbGN5NGdWRzhnYkdWaGNtNGdhRzkzSUhSdklHMWhibWx3ZFd4aGRHVWdkR2hsSUcxaGRISnBlQ3dnY21WaFpDQmhZbTkxZENCMGFHVWdiV0YwY21sNElHMXZaR1ZzTGx4dUlDQWdJQ29nUUhSNWNHVWdlMjFoZEhKcGVIMWNiaUFnSUNBcUwxeHVJQ0FnSUhSb2FYTXViV0YwY21sNElEMGdibVYzSUUxaGRISnBlRTF2WkdWc0tIUm9hWE11YzJWMGRHbHVaM011Y205M2N5eDBhR2x6TG5ObGRIUnBibWR6TG1OdmJIVnRibk1wTzF4dUlDQWdJSFJvYVhNdWJXRjBjbWw0TG5WcElEMGdkR2hwY3p0Y2JseHVJQ0FnSUM4cUtseHVJQ0FnSUNvZ1FTQkRiM1Z1ZEdWeUlHMXZaR1ZzSUhkb2FXTm9JSFJvWlNCelpYRjFaVzVqWlhJZ2MzUmxjSE1nZEdoeWIzVm5hQzRnUm05eUlHVjRZVzF3YkdVc0lIbHZkU0JqYjNWc1pDQjFjMlVnZEdocGN5QnRiMlJsYkNCMGJ5QnpkR1Z3SUhSb2NtOTFaMmdnZEdobElITmxjWFZsYm1ObGNpQnBiaUJ5WlhabGNuTmxMQ0J5WVc1a2IyMXNlU3dnYjNJZ2FXNGdZU0JrY25WdWF5QjNZV3hyTGx4dUlDQWdJQ29nUUhSNWNHVWdlMk52ZFc1MFpYSjlYRzRnSUNBZ0tpOWNiaUFnSUNCMGFHbHpMbk4wWlhCd1pYSWdQU0J1WlhjZ1EyOTFiblJsY2sxdlpHVnNLREFzZEdocGN5NWpiMngxYlc1ektUdGNibHh1SUNBZ0lIUm9hWE11YVc1cGRDZ3BPMXh1WEc0Z0lIMWNibHh1SUNCaWRXbHNaRVp5WVcxbEtDa2dlMXh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkQ0E5SUdSdlkzVnRaVzUwTG1OeVpXRjBaVVZzWlcxbGJuUW9KMlJwZGljcE8xeHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNXpkSGxzWlM1d2IzTnBkR2x2YmlBOUlDZHlaV3hoZEdsMlpTYzdYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbk4wZVd4bExtUnBjM0JzWVhrZ1BTQW5ZbXh2WTJzbk8xeHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNXpkSGxzWlM1M2FXUjBhQ0E5SUNjeE1EQWxKenRjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1YzNSNWJHVXVhR1ZwWjJoMElEMGdKekV3TUNVbk8xeHVJQ0FnSUhSb2FYTXVjR0Z5Wlc1MExtRndjR1Z1WkVOb2FXeGtLSFJvYVhNdVpXeGxiV1Z1ZENrN1hHNGdJQ0FnYVdZZ0tIUnZkV05vTG1WNGFYTjBjeWtnZTF4dUlDQWdJQ0FnZEdocGN5NWhaR1JVYjNWamFFeHBjM1JsYm1WeWN5Z3BPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJR0oxYVd4a1NXNTBaWEptWVdObEtDa2dlMXh1WEc0Z0lDQWdkR2hwY3k1alpXeHNjeUE5SUZ0ZE8xeHVJQ0FnSUdadmNpQW9iR1YwSUdrOU1EdHBQSFJvYVhNdWJXRjBjbWw0TG14bGJtZDBhRHRwS3lzcElIdGNibHh1SUNBZ0lDQWdiR1YwSUd4dlkyRjBhVzl1SUQwZ2RHaHBjeTV0WVhSeWFYZ3ViRzlqWVhSbEtHa3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdjbVYwZFhKdWN5QjdjbTkzTEdOdmJIMWNibHh1SUNBZ0lDQWdiR1YwSUdOdmJuUmhhVzVsY2lBOUlHUnZZM1Z0Wlc1MExtTnlaV0YwWlVWc1pXMWxiblFvSjNOd1lXNG5LVHRjYmlBZ0lDQWdJR052Ym5SaGFXNWxjaTV6ZEhsc1pTNXdiM05wZEdsdmJpQTlJQ2RoWW5OdmJIVjBaU2M3WEc1Y2JseHVJQ0FnSUNBZ2JHVjBJR05sYkd3Z1BTQnVaWGNnVFdGMGNtbDRRMlZzYkNoamIyNTBZV2x1WlhJc0lIdGNiaUFnSUNBZ0lDQWdJQ0JqYjIxd2IyNWxiblE2SUhSeWRXVXNYRzRnSUNBZ0lDQWdJQ0FnYVc1a1pYZzZJR2tzWEc0Z0lDQWdJQ0FnSUNBZ2NtOTNPaUJzYjJOaGRHbHZiaTV5YjNjc1hHNGdJQ0FnSUNBZ0lDQWdZMjlzZFcxdU9pQnNiMk5oZEdsdmJpNWpiMngxYlc0c1hHNGdJQ0FnSUNBZ0lDQWdiVzlrWlRvZ2RHaHBjeTV0YjJSbExGeHVJQ0FnSUNBZ0lDQWdJRzFoZEhKcGVEb2dkR2hwYzF4dUlDQWdJQ0FnSUNCOUxDQjBhR2x6TG10bGVVTm9ZVzVuWlM1aWFXNWtLSFJvYVhNc2FTa3BPMXh1WEc0Z0lDQWdMeThnSUdObGJHd3ViV0YwY21sNElEMGdkR2hwY3p0Y2JpQWdJQ0FnSUdsbUlDaDBiM1ZqYUM1bGVHbHpkSE1wSUh0Y2JpQWdJQ0FnSUNBZ1kyVnNiQzV3WVdRdWFXNWtaWGdnUFNCcE8xeHVJQ0FnSUNBZ0lDQmpaV3hzTG5CeVpVTnNhV05ySUQwZ1kyVnNiQzV3Y21WTmIzWmxJRDBnWTJWc2JDNXdjbVZTWld4bFlYTmxJRDBnS0NrZ1BUNGdlMzA3WEc0Z0lDQWdJQ0FnSUdObGJHd3VZMnhwWTJzZ1BTQmpaV3hzTG0xdmRtVWdQU0JqWld4c0xuSmxiR1ZoYzJVZ1BTQW9LU0E5UGlCN2ZUdGNiaUFnSUNBZ0lDQWdZMlZzYkM1d2NtVlViM1ZqYUNBOUlHTmxiR3d1Y0hKbFZHOTFZMmhOYjNabElEMGdZMlZzYkM1d2NtVlViM1ZqYUZKbGJHVmhjMlVnUFNBb0tTQTlQaUI3ZlR0Y2JpQWdJQ0FnSUNBZ1kyVnNiQzUwYjNWamFDQTlJR05sYkd3dWRHOTFZMmhOYjNabElEMGdZMlZzYkM1MGIzVmphRkpsYkdWaGMyVWdQU0FvS1NBOVBpQjdmVHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnZEdocGN5NWpaV3hzY3k1d2RYTm9LR05sYkd3cE8xeHVJQ0FnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbUZ3Y0dWdVpFTm9hV3hrS0dOdmJuUmhhVzVsY2lrN1hHNWNiaUFnSUNCOVhHNGdJQ0FnZEdocGN5NXphWHBsU1c1MFpYSm1ZV05sS0NrN1hHNGdJSDFjYmx4dUlDQnphWHBsU1c1MFpYSm1ZV05sS0NrZ2UxeHVYRzRnSUNBZ2JHVjBJR05sYkd4WGFXUjBhQ0E5SUhSb2FYTXVkMmxrZEdnZ0x5QjBhR2x6TG1OdmJIVnRibk03WEc0Z0lDQWdiR1YwSUdObGJHeElaV2xuYUhRZ1BTQjBhR2x6TG1obGFXZG9kQ0F2SUhSb2FYTXVjbTkzY3p0Y2JseHVJQ0FnSUdadmNpQW9iR1YwSUdrOU1Ec2dhVHgwYUdsekxtTmxiR3h6TG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ0lDQnNaWFFnWTI5dWRHRnBibVZ5SUQwZ2RHaHBjeTVqWld4c2MxdHBYUzV3WVhKbGJuUTdYRzRnSUNBZ0lDQmpiMjUwWVdsdVpYSXVjM1I1YkdVdWJHVm1kQ0E5SUhSb2FYTXVZMlZzYkhOYmFWMHVZMjlzZFcxdUlDb2dZMlZzYkZkcFpIUm9JQ3NnSjNCNEp6dGNiaUFnSUNBZ0lHTnZiblJoYVc1bGNpNXpkSGxzWlM1MGIzQWdQU0IwYUdsekxtTmxiR3h6VzJsZExuSnZkeUFxSUdObGJHeElaV2xuYUhRZ0t5QW5jSGduTzF4dUlDQWdJQ0FnZEdocGN5NWpaV3hzYzF0cFhTNXlaWE5wZW1Vb1kyVnNiRmRwWkhSb0xHTmxiR3hJWldsbmFIUXBPMXh1SUNBZ0lIMWNibHh1WEc0Z0lIMWNibHh1SUNCamIyeHZja2x1ZEdWeVptRmpaU2dwSUh0Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJwUFRBN0lHazhkR2hwY3k1alpXeHNjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVqWld4c2MxdHBYUzV5Wlc1a1pYSW9LVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0IxY0dSaGRHVW9LU0I3WEc0Z0lDOHZJQ0JqYjI1emIyeGxMbXh2WnloY0luVndaR0YwYVc1bkxpNHVYQ0lwWEc0Z0lDQWdMeTl2YmlBOUlHOXVJSHg4SUdaaGJITmxPMXh1SUNBZ0lIUm9hWE11YldGMGNtbDRMbWwwWlhKaGRHVW9LSElzWXl4cEtTQTlQaUI3WEc0Z0lDQWdJQ0F2THlBZ1kyOXVjMjlzWlM1c2IyY29kR2hwY3k1dFlYUnlhWGd1Y0dGMGRHVnlibHR5WFZ0alhTd2dkR2hwY3k1alpXeHNjMXRwWFM1emRHRjBaU2s3WEc0Z0lDQWdJQ0JwWmlBb2RHaHBjeTV0WVhSeWFYZ3VjR0YwZEdWeWJsdHlYVnRqWFNBaFBUMGdkR2hwY3k1alpXeHNjMXRwWFM1emRHRjBaU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9kR2hwY3k1dFlYUnlhWGd1Y0dGMGRHVnlibHR5WFZ0alhTQStJREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG1ObGJHeHpXMmxkTG5SMWNtNVBiaWdwTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11WTJWc2JITmJhVjB1ZEhWeWJrOW1aaWdwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNrN1hHNGdJSDFjYmx4dUx5OGdkWEJrWVhSbElEMCtJR05sYkd3dWRIVnliazl1SUQwK0lHTmxiR3d1WlcxcGRDQTlQaUJyWlhsRGFHRnVaMlVnS0hObGNTNWxiV2wwS1NBOVBpQnRZWFJ5YVhndWMyVjBMbU5sYkd3Z1BUNGdkWEJrWVhSbFhHNHZMMXh1THk4Z2FXNTBaWEpoWTNScGIyNGdQVDRnYTJWNVEyaGhibWRsSUQwK0lHMWhkSEpwZUM1elpYUXVZMlZzYkNBOVBpQjFjR1JoZEdVZ1BUNGdZMlZzYkM1MGRYSnVUMjVjYmk4dklDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1BUNGdaVzFwZEZ4dUx5OWNiaTh2SUhObGRDNWpaV3hzSUQwK0lIVndaR0YwWlNBOVBpQnVaV1ZrY3lCMGJ5QmxiV2wwTGx4dVhHNGdJR3RsZVVOb1lXNW5aU2h1YjNSbExHOXVLU0I3WEc0Z0lDQWdMeThnWlcxcGRDQmtZWFJoSUdadmNpQmhibmtnYTJWNUlIUjFjbTVwYm1jZ2IyNHZiMlptWEc0Z0lDQWdMeThnYVNCcGN5QjBhR1VnYm05MFpTQnBibVJsZUZ4dUlDQWdJQzh2SUhZZ2FYTWdkMmhsZEdobGNpQnBkQ0JwY3lCdmJpQnZjaUJ2Wm1aY2JpQWdJQ0JzWlhRZ1kyVnNiQ0E5SUhSb2FYTXViV0YwY21sNExteHZZMkYwWlNodWIzUmxLVHRjYmlBZ0x5OGdJSFJvYVhNdWJXRjBjbWw0TG5ObGRDNWpaV3hzS0dObGJHd3VZMjlzZFcxdUxHTmxiR3d1Y205M0xHOXVLVHRjYmlBZ0lDQjBhR2x6TG0xaGRISnBlQzV3WVhSMFpYSnVXMk5sYkd3dWNtOTNYVnRqWld4c0xtTnZiSFZ0YmwwZ1BTQnZianRjYmlBZ0lDQjJZWElnWkdGMFlTQTlJSHRjYmlBZ0lDQWdJSEp2ZHpvZ1kyVnNiQzV5YjNjc1hHNGdJQ0FnSUNCamIyeDFiVzQ2SUdObGJHd3VZMjlzZFcxdUxGeHVJQ0FnSUNBZ2MzUmhkR1U2SUc5dVhHNGdJQ0FnZlR0Y2JpQWdJQ0IwYUdsekxtVnRhWFFvSjJOb1lXNW5aU2NzWkdGMFlTazdYRzRnSUgxY2JseHVJQ0J5Wlc1a1pYSW9LU0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVjM1JsY0hCbGNpNTJZV3gxWlNBK1BTQXdLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtMWhkSEpwZUM1cGRHVnlZWFJsS0NoeUxHTXNhU2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQnBaaUFvWXowOVBYUm9hWE11YzNSbGNIQmxjaTUyWVd4MVpTa2dlMXh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVZMlZzYkhOYmFWMHVjR0ZrTG5ObGRFRjBkSEpwWW5WMFpTZ25jM1J5YjJ0bEp5eDBhR2x6TG1OdmJHOXljeTV0WldScGRXMU1hV2RvZENrN1hHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1alpXeHNjMXRwWFM1d1lXUXVjMlYwUVhSMGNtbGlkWFJsS0NkemRISnZhMlV0ZDJsa2RHZ25MQ2N4SnlrN1hHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1alpXeHNjMXRwWFM1d1lXUXVjMlYwUVhSMGNtbGlkWFJsS0NkemRISnZhMlV0YjNCaFkybDBlU2NzSnpFbktUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxtTmxiR3h6VzJsZExuQmhaQzV6WlhSQmRIUnlhV0oxZEdVb0ozTjBjbTlyWlNjc0oyNXZibVVuS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRk4wWVhKMElITmxjWFZsYm1OcGJtZGNiaUFnSUNvZ1FIQmhjbUZ0SUNCN2JuVnRZbVZ5ZlNCdGN5QkNaV0YwSUhSbGJYQnZJR2x1SUcxcGJHeHBjMlZqYjI1a2MxeHVJQ0FnS2k5Y2JpQWdjM1JoY25Rb2JYTXBJSHRjYmlBZ0lDQjBhR2x6TG1sdWRHVnlkbUZzTG1WMlpXNTBJRDBnZEdocGN5NXVaWGgwTG1KcGJtUW9kR2hwY3lrN1hHNGdJQ0FnYVdZZ0tHMXpLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtbHVkR1Z5ZG1Gc0xtMXpLRzF6S1R0Y2JpQWdJQ0I5WEc0Z0lDQWdkR2hwY3k1cGJuUmxjblpoYkM1emRHRnlkQ2dwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUZOMGIzQWdjMlZ4ZFdWdVkybHVaMXh1SUNBcUwxeHVJQ0J6ZEc5d0tDa2dlMXh1SUNBZ0lIUm9hWE11YVc1MFpYSjJZV3d1YzNSdmNDZ3BPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJRTFoYm5WaGJHeDVJR3AxYlhBZ2RHOGdkR2hsSUc1bGVIUWdZMjlzZFcxdUlHRnVaQ0IwY21sbloyVnlJSFJvWlNBblkyaGhibWRsSnlCbGRtVnVkQzRnVkdobElGd2libVY0ZEZ3aUlHTnZiSFZ0YmlCcGN5QmtaWFJsY20xcGJtVmtJR0o1SUhsdmRYSWdiVzlrWlNCdlppQnpaWEYxWlc1amFXNW5MbHh1SUNBcUwxeHVJQ0J1WlhoMEtDa2dlMXh1SUNBZ0lIUm9hWE11YzNSbGNIQmxjaTV1WlhoMEtDazdYRzRnSUNBZ2RHaHBjeTVsYldsMEtDZHpkR1Z3Snl4MGFHbHpMbTFoZEhKcGVDNWpiMngxYlc0b2RHaHBjeTV6ZEdWd2NHVnlMblpoYkhWbEtTNXlaWFpsY25ObEtDa3BPMXh1SUNBZ0lIUm9hWE11Y21WdVpHVnlLQ2s3WEc0Z0lIMWNibHh1SUNCaFpHUlViM1ZqYUV4cGMzUmxibVZ5Y3lncElIdGNibHh1SUNBZ0lIUm9hWE11Y0hKbFEyeHBZMnNnUFNCMGFHbHpMbkJ5WlUxdmRtVWdQU0IwYUdsekxuQnlaVkpsYkdWaGMyVWdQU0FvS1NBOVBpQjdmVHRjYmlBZ0lDQjBhR2x6TG1Oc2FXTnJJRDBnZEdocGN5NXRiM1psSUQwZ2RHaHBjeTV5Wld4bFlYTmxJRDBnS0NrZ1BUNGdlMzA3WEc0Z0lDQWdkR2hwY3k1d2NtVlViM1ZqYUNBOUlIUm9hWE11Y0hKbFZHOTFZMmhOYjNabElEMGdkR2hwY3k1d2NtVlViM1ZqYUZKbGJHVmhjMlVnUFNBb0tTQTlQaUI3ZlR0Y2JpQWdJQ0IwYUdsekxuUnZkV05vSUQwZ2RHaHBjeTUwYjNWamFFMXZkbVVnUFNCMGFHbHpMblJ2ZFdOb1VtVnNaV0Z6WlNBOUlDZ3BJRDArSUh0OU8xeHVYRzRnSUNBZ2RHaHBjeTVqZFhKeVpXNTBSV3hsYldWdWRDQTlJR1poYkhObE8xeHVYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbUZrWkVWMlpXNTBUR2x6ZEdWdVpYSW9KM1J2ZFdOb2MzUmhjblFuTENBb1pTa2dQVDRnZTF4dUlDQWdJQ0FnYkdWMElHVnNaVzFsYm5RZ1BTQmtiMk4xYldWdWRDNWxiR1Z0Wlc1MFJuSnZiVkJ2YVc1MEtHVXVkR0Z5WjJWMFZHOTFZMmhsYzFzd1hTNWpiR2xsYm5SWUxHVXVkR0Z5WjJWMFZHOTFZMmhsYzFzd1hTNWpiR2xsYm5SWktUdGNiaUFnSUNBZ0lHeGxkQ0JqWld4c0lEMGdkR2hwY3k1alpXeHNjMXRsYkdWdFpXNTBMbWx1WkdWNFhUdGNiaUFnSUNBZ0lIUm9hWE11Y0dGcGJuUmljblZ6YUNBOUlDRmpaV3hzTG5OMFlYUmxPMXh1SUNBZ0lDQWdZMlZzYkM1a2IzZHVLSFJvYVhNdWNHRnBiblJpY25WemFDazdYRzRnSUNBZ0lDQjBhR2x6TG1OMWNuSmxiblJGYkdWdFpXNTBJRDBnWld4bGJXVnVkQzVwYm1SbGVEdGNiaUFnSUNBZ0lHVXVjSEpsZG1WdWRFUmxabUYxYkhRb0tUdGNiaUFnSUNBZ0lHVXVjM1J2Y0ZCeWIzQmhaMkYwYVc5dUtDazdYRzRnSUNBZ2ZTazdYRzVjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1WVdSa1JYWmxiblJNYVhOMFpXNWxjaWduZEc5MVkyaHRiM1psSnl3Z0tHVXBJRDArSUh0Y2JpQWdJQ0FnSUd4bGRDQmxiR1Z0Wlc1MElEMGdaRzlqZFcxbGJuUXVaV3hsYldWdWRFWnliMjFRYjJsdWRDaGxMblJoY21kbGRGUnZkV05vWlhOYk1GMHVZMnhwWlc1MFdDeGxMblJoY21kbGRGUnZkV05vWlhOYk1GMHVZMnhwWlc1MFdTazdYRzRnSUNBZ0lDQnNaWFFnWTJWc2JDQTlJSFJvYVhNdVkyVnNiSE5iWld4bGJXVnVkQzVwYm1SbGVGMDdYRzRnSUNBZ0lDQnBaaUFvWld4bGJXVnVkQzVwYm1SbGVDRTlQWFJvYVhNdVkzVnljbVZ1ZEVWc1pXMWxiblFwSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdVkzVnljbVZ1ZEVWc1pXMWxiblFnUGowZ01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUd4bGRDQndZWE4wUTJWc2JDQTlJSFJvYVhNdVkyVnNiSE5iZEdocGN5NWpkWEp5Wlc1MFJXeGxiV1Z1ZEYwN1hHNGdJQ0FnSUNBZ0lDQWdjR0Z6ZEVObGJHd3VkWEFvS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQmpaV3hzTG1SdmQyNG9kR2hwY3k1d1lXbHVkR0p5ZFhOb0tUdGNiaUFnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lHTmxiR3d1WW1WdVpDZ3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdkR2hwY3k1amRYSnlaVzUwUld4bGJXVnVkQ0E5SUdWc1pXMWxiblF1YVc1a1pYZzdYRzRnSUNBZ0lDQmxMbkJ5WlhabGJuUkVaV1poZFd4MEtDazdYRzRnSUNBZ0lDQmxMbk4wYjNCUWNtOXdZV2RoZEdsdmJpZ3BPMXh1SUNBZ0lIMHBPMXh1WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG1Ga1pFVjJaVzUwVEdsemRHVnVaWElvSjNSdmRXTm9aVzVrSnl3Z0tHVXBJRDArSUh0Y2JpQWdJQ0FnSUM4dklHNXZJSFJ2ZFdOb1pYTWdkRzhnWTJGc1kzVnNZWFJsSUdKbFkyRjFjMlVnYm05dVpTQnlaVzFoYVc1cGJtZGNiaUFnSUNBZ0lHeGxkQ0JqWld4c0lEMGdkR2hwY3k1alpXeHNjMXQwYUdsekxtTjFjbkpsYm5SRmJHVnRaVzUwWFR0Y2JpQWdJQ0FnSUdObGJHd3VkWEFvS1R0Y2JpQWdJQ0FnSUhSb2FYTXVhVzUwWlhKaFkzUnBibWNnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJSFJvYVhNdVkzVnljbVZ1ZEVWc1pXMWxiblFnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJR1V1Y0hKbGRtVnVkRVJsWm1GMWJIUW9LVHRjYmlBZ0lDQWdJR1V1YzNSdmNGQnliM0JoWjJGMGFXOXVLQ2s3WEc0Z0lDQWdmU2s3WEc1Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNCT2RXMWlaWElnYjJZZ2NtOTNjeUJwYmlCMGFHVWdjMlZ4ZFdWdVkyVnlYRzRnSUVCMGVYQmxJSHR1ZFcxaVpYSjlYRzRnSUNvdlhHNGdJR2RsZENCeWIzZHpLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG0xaGRISnBlQzV5YjNkek8xeHVJQ0I5WEc1Y2JpQWdjMlYwSUhKdmQzTW9kaWtnZTF4dUlDQWdJSFJvYVhNdWJXRjBjbWw0TG5KdmQzTWdQU0IyTzF4dUlDQWdJSFJvYVhNdVpXMXdkSGtvS1R0Y2JpQWdJQ0IwYUdsekxtSjFhV3hrU1c1MFpYSm1ZV05sS0NrN1hHNGdJQ0FnZEdocGN5NTFjR1JoZEdVb0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQk9kVzFpWlhJZ2IyWWdZMjlzZFcxdWN5QnBiaUIwYUdVZ2MyVnhkV1Z1WTJWeVhHNGdJRUIwZVhCbElIdHVkVzFpWlhKOVhHNGdJQ292WEc0Z0lHZGxkQ0JqYjJ4MWJXNXpLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG0xaGRISnBlQzVqYjJ4MWJXNXpPMXh1SUNCOVhHNWNiaUFnYzJWMElHTnZiSFZ0Ym5Nb2Rpa2dlMXh1SUNBZ0lIUm9hWE11YldGMGNtbDRMbU52YkhWdGJuTWdQU0IyTzF4dUlDQWdJSFJvYVhNdWMzUmxjSEJsY2k1dFlYZ2dQU0IyTzF4dUlDQWdJSFJvYVhNdVpXMXdkSGtvS1R0Y2JpQWdJQ0IwYUdsekxtSjFhV3hrU1c1MFpYSm1ZV05sS0NrN1hHNGdJQ0FnZEdocGN5NTFjR1JoZEdVb0tUdGNiaUFnZlZ4dVhHNTlYRzVjYmx4dVhHNHZMeUJYUlVKUVFVTkxJRVpQVDFSRlVpQXZMMXh1THk4Z0xpOStMMnB6YUdsdWRDMXNiMkZrWlhJaExpOXNhV0l2YVc1MFpYSm1ZV05sY3k5elpYRjFaVzVqWlhJdWFuTWlMQ0luZFhObElITjBjbWxqZENjN1hHNWNibWx0Y0c5eWRDQnRZWFJvSUdaeWIyMGdKeTR1TDNWMGFXd3ZiV0YwYUNjN1hHNXBiWEJ2Y25RZ1UyVnhkV1Z1WTJVZ1puSnZiU0FuTGk0dmJXOWtaV3h6TDNObGNYVmxibU5sSnp0Y2JseHVMeThnUm05eUlIUm9aU0IwZFhSdmNtbGhiQ3dnYkc5dmEybHVaeUJoZEZ4dVhHNHZMMUJoZEhSbGNtNGdjMlZqZEdsdmJqcGNiaTh2SUM1amNtVmhkR1VvS1N3Z0xuSnZkM01zSUM1amIyeDFiVzV6TEZ4dUx5OGdMbkJoZEhSbGNtNHNJQzVzWlc1bmRHZ3NJQzVtYjNKdFlYUkJjMVJsZUhRb0tTd2dMbXh2WnlncExGeHVMeThnTG14dlkyRjBaU2hwS1N3Z0xtbHVaR1Y0VDJZb1l5eHlLVnh1THk4Z2NtOTNLQ2tzSUdOdmJIVnRiaWdwSUNoeVpYUjFjbTV6SUdOdmJuUmxiblJ6SUc5bUlISnZkeUJ2Y2lCamIyeDFiU2xjYmx4dUx5OURiMjUwY205c0lITmxZM1JwYjI0NlhHNHZMeUIwYjJkbmJHVWdlRE5jYmk4dklITmxkQ0I0TkZ4dUx5OGdjbTkwWVhSbElIZ3pYRzR2THlCd2IzQjFiR0YwWlNCNE0xeHVMeThnWlhKaGMyVWdlRE5jYmx4dVhHNHZMeUJ6YUc5MWJHUWdjMjl0WlNCMlpYSnphVzl1SUc5bUlIUm9hWE1nYUdGMlpTQmhJR1pzYjJGMElIWmhiSFZsSUdadmNpQmxZV05vSUdObGJHdy9YRzR2THlCamIzVnNaQ0JpWlNCc2FXdGxJR0VnYldseWNtOXlJQzV3WVhSMFpYSnVJSFJvWVhRZ2FHRnpJSFpoYkhWbGN5NGdZbmtnWkdWbVlYVnNkQ3dnWlhabGNubDBhR2x1WnlCcGN5QXhMQ0JpZFhRZ1kyOTFiR1FnWW1VZ2MyVjBMaTR1WEc0dkx5QnViM1FnWVNCbmIyOWtJSGRoZVNCMGJ5QmtieUIwYUdGMElHOXVJR2x1ZEdWeVptRmpaU3dnWW5WMElHRnpJR0VnYlc5a1pXd2dhWFFnZDI5MWJHUWdZbVVnYm1salpTNHVMbHh1THk4Z1ptOXlJQzVtYjNKdFlYUkJjMVJsZUhRb0tTd2dZMjkxYkdRZ2JYVnNkR2x3YkhrZ1lua2dNVEF3SUdGdVpDQm1iRzl2Y2l3Z2MyOGdaV0ZqYUNCalpXeHNJR2x6SUdGdUlHbHVkQ0JtY205dElEQWdkRzhnT1Z4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCamJHRnpjeUJOWVhSeWFYZ2dlMXh1WEc0Z0lHTnZibk4wY25WamRHOXlLSEp2ZDNNc1kyOXNkVzF1Y3lrZ2UxeHVJQ0FnSUM4dklITm9iM1ZzWkNCaGJITnZJR2hoZG1VZ1lXSnBiR2wwZVNCMGJ5QmpjbVZoZEdVZ2RYTnBibWNnWVc0Z1pYaHBjM1JwYm1jZ2JXRjBjbWw0SUNneVpDQmhjbkpoZVNsY2JpQWdJQ0IwYUdsekxuQmhkSFJsY200Z1BTQmJYVHRjYmlBZ0lDQjBhR2x6TG1OeVpXRjBaU2h5YjNkekxHTnZiSFZ0Ym5NcE8xeHVYRzRnSUNBZ2RHaHBjeTUwYjJkbmJHVWdQU0I3WEc0Z0lDQWdJQ0JqWld4c09pQW9ZMjlzZFcxdUxDQnliM2NwSUQwK0lIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1d1lYUjBaWEp1VzNKdmQxMWJZMjlzZFcxdVhTQTlJQ0YwYUdsekxuQmhkSFJsY201YmNtOTNYVnRqYjJ4MWJXNWRPeUF2THlCdFlYUm9MbWx1ZG1WeWRDaDBhR2x6TG5CaGRIUmxjbTViY205M1hWdGpiMngxYlc1ZEtUdGNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVkV2twSUhzZ2RHaHBjeTUxYVM1MWNHUmhkR1VvS1RzZ2ZWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTV3WVhSMFpYSnVXM0p2ZDExYlkyOXNkVzF1WFR0Y2JpQWdJQ0FnSUgwc1hHNGdJQ0FnSUNCaGJHdzZJQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1cGRHVnlZWFJsS0NoeUxHTXBJRDArSUhzZ2RHaHBjeTUwYjJkbmJHVXVZMlZzYkNoakxISXBPeUI5S1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdWRXa3BJSHNnZEdocGN5NTFhUzUxY0dSaGRHVW9LVHNnZlZ4dUlDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUhKdmR6b2dLSEp2ZHlrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0JtYjNJZ0tHeGxkQ0JwUFRBN0lHazhkR2hwY3k1amIyeDFiVzV6T3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMblJ2WjJkc1pTNWpaV3hzS0drc2NtOTNLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCcFppQW9kR2hwY3k1MWFTa2dleUIwYUdsekxuVnBMblZ3WkdGMFpTZ3BPeUI5WEc0Z0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnWTI5c2RXMXVPaUFvWTI5c2RXMXVLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lHWnZjaUFvYkdWMElHazlNRHNnYVR4MGFHbHpMbkp2ZDNNN0lHa3JLeWtnZTF4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11ZEc5bloyeGxMbU5sYkd3b1kyOXNkVzF1TEdrcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMblZwS1NCN0lIUm9hWE11ZFdrdWRYQmtZWFJsS0NrN0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOU8xeHVYRzRnSUNBZ2RHaHBjeTV6WlhRZ1BTQjdYRzRnSUNBZ0lDQmpaV3hzT2lBb1kyOXNkVzF1TENCeWIzY3NJSFpoYkhWbEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjR0YwZEdWeWJsdHliM2RkVzJOdmJIVnRibDBnUFNCMllXeDFaVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11ZFdrcElIc2dkR2hwY3k1MWFTNTFjR1JoZEdVb0tUc2dmVnh1SUNBZ0lDQWdmU3hjYmlBZ0lDQWdJR0ZzYkRvZ0tIWmhiSFZsY3lrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0F2THlCelpYUWdkR2hsSUhkb2IyeGxJRzFoZEhKcGVDQjFjMmx1WnlCaElESmtJR0Z5Y21GNUlHRnpJR2x1Y0hWMFhHNGdJQ0FnSUNBZ0lDOHZJSFJvYVhNZ2MyaHZkV3hrSUdGc2MyOGdjbVZ6YVhwbElIUm9aU0JoY25KaGVUOWNiaUFnSUNBZ0lDQWdkR2hwY3k1d1lYUjBaWEp1SUQwZ2RtRnNkV1Z6TzF4dUlDQWdJQ0FnSUNCcFppQW9kR2hwY3k1MWFTa2dleUIwYUdsekxuVnBMblZ3WkdGMFpTZ3BPeUI5WEc0Z0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnY205M09pQW9jbTkzTEhaaGJIVmxjeWtnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQXZMeUJ6WlhRZ1lTQnliM2NnZFhOcGJtY2dZVzRnWVhKeVlYa2dZWE1nYVc1d2RYUmNiaUFnSUNBZ0lDQWdkR2hwY3k1d1lYUjBaWEp1VzNKdmQxMGdQU0IyWVd4MVpYTTdYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMblZwS1NCN0lIUm9hWE11ZFdrdWRYQmtZWFJsS0NrN0lIMWNiaUFnSUNBZ0lIMHNYRzRnSUNBZ0lDQmpiMngxYlc0NklDaGpiMngxYlc0c2RtRnNkV1Z6S1NBOVBpQjdYRzRnSUNBZ0lDQWdJQzh2SUhObGRDQmhJR052YkhWdGJpQjFjMmx1WnlCaGJpQmhjbkpoZVNCaGN5QnBibkIxZEZ4dUlDQWdJQ0FnSUNCMGFHbHpMbkJoZEhSbGNtNHVabTl5UldGamFDZ29jbTkzTEdrcElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbkJoZEhSbGNtNWJhVjFiWTI5c2RXMXVYU0E5SUhaaGJIVmxjMXRwWFR0Y2JpQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMblZwS1NCN0lIUm9hWE11ZFdrdWRYQmtZWFJsS0NrN0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOU8xeHVYRzRnSUNBZ2RHaHBjeTV5YjNSaGRHVWdQU0I3WEc0Z0lDQWdJQ0F2TDNOb2IzVnNaQ0JsZG1WdWRIVmhiR3g1SUdSdklDaGhiVzkxYm5SWUxDQmhiVzkxYm5SWktTQm9aWEpsWEc0Z0lDQWdJQ0F2THlCamIzVnNaQ0JxZFhOMElIVnpaU0JoSUd4dmIzQWdZVzVrSUhSb2FYTXVjbTkwWVhSbExuSnZkeWhwTEdGdGIzVnVkRmdwTzF4dUlDQWdJQ0FnWVd4c09pQW9ZVzF2ZFc1MEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUdsbUlDZ2hZVzF2ZFc1MElDWW1JR0Z0YjNWdWRDRTlQVEFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQmhiVzkxYm5RZ1BTQXhPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdGdGIzVnVkQ0FsUFNCMGFHbHpMbkJoZEhSbGNtNWJNRjB1YkdWdVozUm9PMXh1SUNBZ0lDQWdJQ0JwWmlBb1lXMXZkVzUwSUR3Z01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUdGdGIzVnVkQ0E5SUhSb2FYTXVjR0YwZEdWeWJsc3dYUzVzWlc1bmRHZ2dLeUJoYlc5MWJuUTdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnWm05eUlDaHNaWFFnYVQwd095QnBQSFJvYVhNdWNtOTNjenNnYVNzcktTQjdYRzRnSUNBZ0lDQWdJQ0FnYkdWMElHTjFkQ0E5SUhSb2FYTXVjR0YwZEdWeWJsdHBYUzV6Y0d4cFkyVW9JSFJvYVhNdWNHRjBkR1Z5Ymx0cFhTNXNaVzVuZEdnZ0xTQmhiVzkxYm5Rc0lHRnRiM1Z1ZENBcE8xeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWNHRjBkR1Z5Ymx0cFhTQTlJR04xZEM1amIyNWpZWFFvSUhSb2FYTXVjR0YwZEdWeWJsdHBYU0FwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxuVnBLU0I3SUhSb2FYTXVkV2t1ZFhCa1lYUmxLQ2s3SUgxY2JpQWdJQ0FnSUgwc1hHNGdJQ0FnSUNCeWIzYzZJQ2h5YjNjc1lXMXZkVzUwS1NBOVBpQjdYRzRnSUNBZ0lDQWdJR2xtSUNnaFlXMXZkVzUwSUNZbUlHRnRiM1Z1ZENFOVBUQXBJSHRjYmlBZ0lDQWdJQ0FnSUNCaGJXOTFiblFnUFNBeE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR0Z0YjNWdWRDQWxQU0IwYUdsekxuQmhkSFJsY201Yk1GMHViR1Z1WjNSb08xeHVJQ0FnSUNBZ0lDQnBaaUFvWVcxdmRXNTBJRHdnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR0Z0YjNWdWRDQTlJSFJvYVhNdWNHRjBkR1Z5Ymxzd1hTNXNaVzVuZEdnZ0t5QmhiVzkxYm5RN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdiR1YwSUdOMWRDQTlJSFJvYVhNdWNHRjBkR1Z5Ymx0eWIzZGRMbk53YkdsalpTZ2dkR2hwY3k1d1lYUjBaWEp1VzNKdmQxMHViR1Z1WjNSb0lDMGdZVzF2ZFc1MExDQmhiVzkxYm5RZ0tUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1d1lYUjBaWEp1VzNKdmQxMGdQU0JqZFhRdVkyOXVZMkYwS0NCMGFHbHpMbkJoZEhSbGNtNWJjbTkzWFNBcE8xeHVJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NTFhU2tnZXlCMGFHbHpMblZwTG5Wd1pHRjBaU2dwT3lCOVhHNGdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ1kyOXNkVzF1T2lBb1kyOXNkVzF1TENCaGJXOTFiblFwSUQwK0lIdGNiaUFnSUNBZ0lDQWdhV1lnS0NGaGJXOTFiblFnSmlZZ1lXMXZkVzUwSVQwOU1Da2dlMXh1SUNBZ0lDQWdJQ0FnSUdGdGIzVnVkQ0E5SURFN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdZVzF2ZFc1MElDVTlJSFJvYVhNdWNHRjBkR1Z5Ymk1c1pXNW5kR2c3WEc0Z0lDQWdJQ0FnSUdsbUlDaGhiVzkxYm5RZ1BDQXdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ1lXMXZkVzUwSUQwZ2RHaHBjeTV3WVhSMFpYSnVMbXhsYm1kMGFDQXJJR0Z0YjNWdWREdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JzWlhRZ2NISnZlSGtnUFNCYlhUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1d1lYUjBaWEp1TG1admNrVmhZMmdvS0hKdmR5a2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lIQnliM2g1TG5CMWMyZ29JSEp2ZDF0amIyeDFiVzVkSUNrN1hHNGdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdJQ0JzWlhRZ1kzVjBJRDBnY0hKdmVIa3VjM0JzYVdObEtDQndjbTk0ZVM1c1pXNW5kR2dnTFNCaGJXOTFiblFzSUdGdGIzVnVkQ0FwTzF4dUlDQWdJQ0FnSUNCd2NtOTRlU0E5SUdOMWRDNWpiMjVqWVhRb0lIQnliM2g1SUNrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11Y0dGMGRHVnliaTVtYjNKRllXTm9LQ2h5YjNjc2FTa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lISnZkMXRqYjJ4MWJXNWRJRDBnY0hKdmVIbGJhVjA3WEc0Z0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NTFhU2tnZXlCMGFHbHpMblZwTG5Wd1pHRjBaU2dwT3lCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlR0Y2JseHVJQ0FnSUM4dklIUm9aU0JwWkdWaElHSmxhR2x1WkNCd2IzQjFiR0YwWlNCcGN5QjBieUJpWlNCaFlteGxJSFJ2SUhObGRDQmhJSGRvYjJ4bElISnZkeUJ2Y2lCamIyeDFiVzRnZEc4Z01DQnZjaUF4WEc0Z0lDQWdMeThnU1VZZ2RHaGxJSFpoYkhWbElHbHpJR0VnWm14dllYUXNJSE4xWTJnZ1lYTWdNQzQzTENCMGFHVnVJR2wwSUhkdmRXeGtJR0psWTI5dFpTQmhJSEJ5YjJKaFltbHNhWFI1WEc0Z0lDQWdMeThnYzI4Z2NHOXdkV3hoZEdVb01DNDNLU0IzYjNWc1pDQm5hWFpsSUdWaFkyZ2dZMlZzYkNCaElEY3dKU0JqYUdGdVkyVWdiMllnWW1WcGJtY2dNVnh1SUNBZ0lIUm9hWE11Y0c5d2RXeGhkR1VnUFNCN1hHNGdJQ0FnSUNCaGJHdzZJQ2h2WkdSektTQTlQaUI3WEc0Z0lDQWdJQ0FnSUd4bGRDQnZaR1J6VTJWeGRXVnVZMlVnUFNCdVpYY2dVMlZ4ZFdWdVkyVW9iMlJrY3lrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11YVhSbGNtRjBaU2dvY2l4aktTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTV3WVhSMFpYSnVXM0pkVzJOZElEMGdiV0YwYUM1amIybHVLRzlrWkhOVFpYRjFaVzVqWlM1dVpYaDBLQ2twTzF4dUlDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lDQWdMeThnVkdocGN5QmpiM1ZzWkNCaVpTQjFjMlZrSUhOdklIUm9ZWFFnWldGamFDQnliM2NnYUdGeklITmhiV1VnYjJSa2N5QndZWFIwWlhKdUxDQmxkbVZ1SUdsbUlISnZkeUJzWlc1bmRHZ2dhWE1nYm05MElHUnBkbWx6YVdKc2VTQmllU0J6WlhGMVpXNWpaU0JzWlc1bmRHZ3VYRzRnSUNBZ0lDQWdJQzh2TENncElEMCtJSHRjYmlBZ0lDQWdJQ0FnTHk4Z0lHOWtaSE11Y0c5eklEMGdMVEU3WEc0Z0lDQWdJQ0FnSUM4dklIMWNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVkV2twSUhzZ2RHaHBjeTUxYVM1MWNHUmhkR1VvS1RzZ2ZWeHVJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lISnZkem9nS0hKdmR6MHdMRzlrWkhNOU1Ta2dQVDRnZTF4dUlDQWdJQ0FnSUNCc1pYUWdiMlJrYzFObGNYVmxibU5sSUQwZ2JtVjNJRk5sY1hWbGJtTmxLRzlrWkhNcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5CaGRIUmxjbTViY205M1hTNW1iM0pGWVdOb0tDaGpaV3hzTEdrcElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbkJoZEhSbGNtNWJjbTkzWFZ0cFhTQTlJRzFoZEdndVkyOXBiaWh2WkdSelUyVnhkV1Z1WTJVdWJtVjRkQ2dwS1R0Y2JpQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMblZwS1NCN0lIUm9hWE11ZFdrdWRYQmtZWFJsS0NrN0lIMWNiaUFnSUNBZ0lIMHNYRzRnSUNBZ0lDQmpiMngxYlc0NklDaGpiMngxYlc0OU1DeHZaR1J6UFRFcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYkdWMElHOWtaSE5UWlhGMVpXNWpaU0E5SUc1bGR5QlRaWEYxWlc1alpTaHZaR1J6S1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV3WVhSMFpYSnVMbVp2Y2tWaFkyZ29LSEp2ZHl4cEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTV3WVhSMFpYSnVXMmxkVzJOdmJIVnRibDBnUFNCdFlYUm9MbU52YVc0b2IyUmtjMU5sY1hWbGJtTmxMbTVsZUhRb0tTazdYRzRnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNCcFppQW9kR2hwY3k1MWFTa2dleUIwYUdsekxuVnBMblZ3WkdGMFpTZ3BPeUI5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVHRjYmx4dUlDQWdJQzh2SUdWemMyVnVkR2xoYkd3Z2NHOXdkV3hoZEdVb01Da2djMjhnYVNkdElHNXZkQ0J6ZFhKbElHbG1JSFJvYVhNZ2FYTWdibVZqWlhOellYSjVJR0oxZENCcGN5QnVhV05sWEc0Z0lDQWdkR2hwY3k1bGNtRnpaU0E5SUh0Y2JpQWdJQ0FnSUdGc2JEb2dLQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG5ObGRDNWhiR3dvTUNrN1hHNGdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ2NtOTNPaUFvY205M0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjMlYwTG5KdmR5aHliM2NzTUNrN1hHNGdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ1kyOXNkVzF1T2lBb1kyOXNkVzF1S1NBOVBpQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWMyVjBMbU52YkhWdGJpaGpiMngxYlc0c01DazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZUdGNibHh1SUNBdkx5QmxibVFnWTI5dWMzUnlkV04wYjNKY2JpQWdmVnh1WEc1Y2JpQWdZM0psWVhSbEtISnZkM01zWTI5c2RXMXVjeWtnZTF4dUlDQWdJSFJvYVhNdWNHRjBkR1Z5YmlBOUlGdGRPMXh1SUNBZ0lHWnZjaUFvSUd4bGRDQnliM2M5TURzZ2NtOTNJRHdnY205M2N6c2djbTkzS3lzZ0tTQjdYRzRnSUNBZ0lDQnNaWFFnWVhKeUlEMGdibVYzSUVGeWNtRjVLR052YkhWdGJuTXBPMXh1SUNBZ0lDQWdkR2hwY3k1d1lYUjBaWEp1TG5CMWMyZ29ZWEp5S1R0Y2JpQWdJQ0I5WEc0Z0lDQWdkR2hwY3k1cGRHVnlZWFJsS0NoeUxHTXBJRDArSUhzZ2RHaHBjeTV3WVhSMFpYSnVXM0pkVzJOZElEMGdabUZzYzJVN0lIMHBPMXh1SUNCOVhHNWNiaUFnYVhSbGNtRjBaU2htTENCbU1pa2dlMXh1SUNBZ0lHeGxkQ0JwSUQwZ01EdGNiaUFnSUNCbWIzSWdLQ0JzWlhRZ2NtOTNQVEE3SUhKdmR5QThJSFJvYVhNdWNtOTNjenNnY205M0t5c2dLU0I3WEc0Z0lDQWdJQ0JwWmlBb1pqSXBJSHNnWmpJb2NtOTNLVHNnZlZ4dUlDQWdJQ0FnWm05eUlDZ2diR1YwSUdOdmJIVnRiajB3T3lCamIyeDFiVzRnUENCMGFHbHpMbU52YkhWdGJuTTdJR052YkhWdGJpc3JJQ2tnZTF4dUlDQWdJQ0FnSUNCbUtISnZkeXhqYjJ4MWJXNHNhU2s3WEc0Z0lDQWdJQ0FnSUdrckt6dGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQm1iM0p0WVhSQmMxUmxlSFFvS1NCN1hHNGdJQ0FnYkdWMElIQmhkSFJsY201VGRISnBibWNnUFNBbkp6dGNiaUFnSUNCMGFHbHpMbWwwWlhKaGRHVW9YRzRnSUNBZ0lDQW9jaXhqS1NBOVBpQjdJSEJoZEhSbGNtNVRkSEpwYm1jZ0t6MGdLSFJvYVhNdWNHRjBkR1Z5Ymx0eVhWdGpYU0EvSURFZ09pQXdLU0FySUNjZ0p6c2dmU3hjYmlBZ0lDQWdJQ2dwSUQwK0lIc2djR0YwZEdWeWJsTjBjbWx1WnlBclBTQW5YRnh1SnpzZ2ZWeHVJQ0FnSUNrN1hHNGdJQ0FnY21WMGRYSnVJSEJoZEhSbGNtNVRkSEpwYm1jN1hHNGdJSDFjYmx4dUlDQnNiMmNvS1NCN1hHNGdJQ0FnWTI5dWMyOXNaUzVzYjJjb2RHaHBjeTVtYjNKdFlYUkJjMVJsZUhRb0tTazdYRzRnSUgxY2JseHVJQ0IxY0dSaGRHVW9jR0YwZEdWeWJpa2dlMXh1SUNBZ0lIUm9hWE11Y0dGMGRHVnliaUE5SUhCaGRIUmxjbTRnZkh3Z2RHaHBjeTV3WVhSMFpYSnVPMXh1SUNCOVhHNWNiaUFnWjJWMElHeGxibWQwYUNncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NXliM2R6S25Sb2FYTXVZMjlzZFcxdWN6dGNiaUFnZlZ4dVhHNGdJR3h2WTJGMFpTaHBibVJsZUNrZ2UxeHVJQ0FnSUM4dklISmxkSFZ5Ym5NZ2NtOTNJR0Z1WkNCamIyeDFiVzRnYjJZZ1kyVnNiQ0JpZVNCcGJtUmxlRnh1SUNBZ0lISmxkSFZ5YmlCN1hHNGdJQ0FnSUNCeWIzYzZJSDUrS0NCcGJtUmxlQ0F2SUhSb2FYTXVZMjlzZFcxdWN5QXBMRnh1SUNBZ0lDQWdZMjlzZFcxdU9pQnBibVJsZUNBbElIUm9hWE11WTI5c2RXMXVjMXh1SUNBZ0lIMDdYRzRnSUgxY2JseHVJQ0JwYm1SbGVFOW1LSEp2ZHl4amIyeDFiVzRwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdZMjlzZFcxdUlDc2djbTkzSUNvZ2RHaHBjeTVqYjJ4MWJXNXpPMXh1SUNBZ0lDOHZJSEpsZEhWeWJuTWdhVzVrWlhnZ2IyWWdZMlZzYkNCaWVTQnliM2NnWVc1a0lHTnZiSFZ0Ymx4dUlDQjlYRzVjYmlBZ2NtOTNLSEp2ZHlrZ2UxeHVJQ0FnSUd4bGRDQmtZWFJoSUQwZ1cxMDdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FUMHdPeUJwUEhSb2FYTXVZMjlzZFcxdWN6c2dhU3NyS1NCN1hHNGdJQ0FnSUNCa1lYUmhMbkIxYzJnb2RHaHBjeTV3WVhSMFpYSnVXM0p2ZDEwZ1B5QXhJRG9nTUNrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQmtZWFJoTzF4dUlDQjlYRzVjYmlBZ1kyOXNkVzF1S0dOdmJIVnRiaWtnZTF4dUlDQWdJR3hsZENCa1lYUmhJRDBnVzEwN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVQwd095QnBQSFJvYVhNdWNtOTNjenNnYVNzcktTQjdYRzRnSUNBZ0lDQmtZWFJoTG5CMWMyZ29kR2hwY3k1d1lYUjBaWEp1VzJsZFcyTnZiSFZ0YmwwZ1B5QXhJRG9nTUNrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQmtZWFJoTzF4dUlDQjlYRzVjYmlBZ1oyVjBJSEp2ZDNNb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVjR0YwZEdWeWJpNXNaVzVuZEdnN1hHNGdJSDFjYmlBZ2MyVjBJSEp2ZDNNb2Rpa2dlMXh1SUNBZ0lHeGxkQ0J3Y21WMmFXOTFjeUE5SUhSb2FYTXVjR0YwZEdWeWJpNXpiR2xqWlNnd0tUdGNiaUFnSUNCMGFHbHpMbU55WldGMFpTaDJMSFJvYVhNdVkyOXNkVzF1Y3lrN1hHNGdJQ0FnZEdocGN5NXBkR1Z5WVhSbEtDaHlMR01wSUQwK0lIdGNiaUFnSUNBZ0lHbG1JQ2h3Y21WMmFXOTFjMXR5WFNBbUppQndjbVYyYVc5MWMxdHlYVnRqWFNrZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG5CaGRIUmxjbTViY2wxYlkxMGdQU0J3Y21WMmFXOTFjMXR5WFZ0alhUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOUtUdGNiaUFnZlZ4dVhHNGdJR2RsZENCamIyeDFiVzV6S0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuQmhkSFJsY201Yk1GMHViR1Z1WjNSb08xeHVJQ0I5WEc0Z0lITmxkQ0JqYjJ4MWJXNXpLSFlwSUh0Y2JpQWdJQ0JzWlhRZ2NISmxkbWx2ZFhNZ1BTQjBhR2x6TG5CaGRIUmxjbTR1YzJ4cFkyVW9NQ2s3WEc0Z0lDQWdkR2hwY3k1amNtVmhkR1VvZEdocGN5NXliM2R6TEhZcE8xeHVJQ0FnSUhSb2FYTXVhWFJsY21GMFpTZ29jaXhqS1NBOVBpQjdYRzRnSUNBZ0lDQnBaaUFvY0hKbGRtbHZkWE5iY2wwZ0ppWWdjSEpsZG1sdmRYTmJjbDFiWTEwcElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1d1lYUjBaWEp1VzNKZFcyTmRJRDBnY0hKbGRtbHZkWE5iY2wxYlkxMDdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTazdYRzRnSUgxY2JseHVmVnh1WEc1Y2JseHVMeThnVjBWQ1VFRkRTeUJHVDA5VVJWSWdMeTljYmk4dklDNHZmaTlxYzJocGJuUXRiRzloWkdWeUlTNHZiR2xpTDIxdlpHVnNjeTl0WVhSeWFYZ3Vhbk1pTENJbmRYTmxJSE4wY21samRDYzdYSEpjYmx4eVhHNXBiWEJ2Y25RZ2JXRjBhQ0JtY205dElDY3VMaTkxZEdsc0wyMWhkR2duTzF4eVhHNXBiWEJ2Y25RZ1JISjFibXNnWm5KdmJTQW5MaTlrY25WdWF5YzdYSEpjYmx4eVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCamJHRnpjeUJUWlhGMVpXNWpaU0I3WEhKY2JseHlYRzRnSUNBZ1kyOXVjM1J5ZFdOMGIzSW9jMlZ4ZFdWdVkyVWdQU0JiTUN3eE1Dd3lNQ3d6TUYwc0lHMXZaR1U5SjNWd0p5d2djRzl6YVhScGIyNDlabUZzYzJVcElIdGNjbHh1SUNBZ0lDQWdJQ0IwYUdsekxuWmhiSFZsY3lBOUlITmxjWFZsYm1ObE8xeHlYRzRnSUNBZ0lDQWdJR2xtSUNnaFFYSnlZWGt1YVhOQmNuSmhlU2gwYUdsekxuWmhiSFZsY3lrcElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVkbUZzZFdWeklEMGdXM1JvYVhNdWRtRnNkV1Z6WFR0Y2NseHVJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnZEdocGN5NWZiVzlrWlNBOUlHMXZaR1U3WEhKY2JpQWdJQ0FnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiaUE5SUhCdmMybDBhVzl1TzF4eVhHNWNjbHh1SUNBZ0lDQWdJQ0IwYUdsekxtUnlkVzVyVjJGc2F5QTlJRzVsZHlCRWNuVnVheWd3TENCMGFHbHpMblpoYkhWbGN5NXNaVzVuZEdnZ0xTQXhLVHRjY2x4dVhISmNiaUFnSUNBZ0lDQWdkR2hwY3k1emRHRnlkRlpoYkhWbGN5QTlJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDZDFjQ2M2SURBc1hISmNiaUFnSUNBZ0lDQWdJQ0FuWkc5M2JpYzZJSFJvYVhNdWRtRnNkV1Z6TG14bGJtZDBhQ0F0SURFc1hISmNiaUFnSUNBZ0lDQWdJQ0FuWkhKMWJtc25PaUIrZmloMGFHbHpMblpoYkhWbGN5NXNaVzVuZEdndk1pa3NYSEpjYmlBZ0lDQWdJQ0FnSUNBbmNtRnVaRzl0SnpvZ2JXRjBhQzV5YVNoMGFHbHpMblpoYkhWbGN5NXNaVzVuZEdncFhISmNiaUFnSUNBZ0lDQWdmVHRjY2x4dVhISmNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVjRzl6YVhScGIyNGhQVDFtWVd4elpTa2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTV1WlhoMElEMGdkR2hwYzF0MGFHbHpMbDl0YjJSbFhUdGNjbHh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh5WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTV1WlhoMElEMGdkR2hwY3k1bWFYSnpkRHRjY2x4dUlDQWdJQ0FnSUNCOVhISmNibHh5WEc1Y2NseHVJQ0FnSUgxY2NseHVYSEpjYmlBZ0lDQm5aWFFnYlc5a1pTZ3BJSHRjY2x4dUlDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdVgyMXZaR1U3WEhKY2JpQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ2MyVjBJRzF2WkdVb2JXOWtaU2tnZTF4eVhHNGdJQ0FnSUNBZ0lHbG1JQ2doS0cxdlpHVWdQVDA5SUNkMWNDY2dmSHdnYlc5a1pTQTlQVDBnSjJSdmQyNG5JSHg4SUcxdlpHVWdQVDA5SUNkeVlXNWtiMjBuSUh4OElHMXZaR1VnUFQwOUlDZGtjblZ1YXljcEtTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk52YkdVdVpYSnliM0lvSjFSb1pTQnZibXg1SUcxdlpHVnpJR04xY25KbGJuUnNlU0JoYkd4dmQyVmtJR0Z5WlRvZ2RYQXNJR1J2ZDI0c0lISmhibVJ2YlN3Z1pISjFibXNuS1R0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVPMXh5WEc0Z0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ0lDQjBhR2x6TGw5dGIyUmxJRDBnYlc5a1pUdGNjbHh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTV3YjNOcGRHbHZiaWtnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1dVpYaDBJRDBnZEdocGMxdDBhR2x6TGw5dGIyUmxYVHRjY2x4dUlDQWdJQ0FnSUNCOVhISmNiaUFnSUNCOVhISmNibHh5WEc0Z0lDQWdaMlYwSUhaaGJIVmxLQ2tnZTF4eVhHNGdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NTJZV3gxWlhOYmRHaHBjeTV3YjNOcGRHbHZibDA3WEhKY2JpQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ2MyVjBJSFpoYkhWbEtIWXBJSHRjY2x4dUlDQWdJQ0FnZEdocGN5NXdiM05wZEdsdmJpQTlJSFJvYVhNdWRtRnNkV1Z6TG1sdVpHVjRUMllvZGlrN1hISmNiaUFnSUNCOVhISmNibHh5WEc0Z0lDQWdabWx5YzNRb0tTQjdYSEpjYmlBZ0lDQWdJR2xtSUNoMGFHbHpMbkJ2YzJsMGFXOXVJVDA5Wm1Gc2MyVXBJSHRjY2x4dUlDQWdJQ0FnSUNCMGFHbHpMbTVsZUhRZ1BTQjBhR2x6VzNSb2FYTXVYMjF2WkdWZE8xeHlYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TG01bGVIUW9LVHRjY2x4dUlDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNCMGFHbHpMbkJ2YzJsMGFXOXVJRDBnZEdocGN5NXpkR0Z5ZEZaaGJIVmxjMXQwYUdsekxsOXRiMlJsWFR0Y2NseHVJQ0FnSUNBZ2RHaHBjeTV1WlhoMElEMGdkR2hwYzF0MGFHbHpMbDl0YjJSbFhUdGNjbHh1SUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11ZG1Gc2RXVTdYSEpjYmlBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnZFhBb0tTQjdYSEpjYmlBZ0lDQWdJSFJvYVhNdWNHOXphWFJwYjI0ckt6dGNjbHh1SUNBZ0lDQWdkR2hwY3k1d2IzTnBkR2x2YmlBbFBTQjBhR2x6TG5aaGJIVmxjeTVzWlc1bmRHZzdYSEpjYmlBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TG5aaGJIVmxPMXh5WEc0Z0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUdSdmQyNG9LU0I3WEhKY2JpQWdJQ0FnSUhSb2FYTXVjRzl6YVhScGIyNHRMVHRjY2x4dUlDQWdJQ0FnYVdZZ0tIUm9hWE11Y0c5emFYUnBiMjRnUENBd0tTQjdYSEpjYmlBZ0lDQWdJQ0FnZEdocGN5NXdiM05wZEdsdmJpQTlJQ2gwYUdsekxuQnZjMmwwYVc5dUlDc2dkR2hwY3k1MllXeDFaWE11YkdWdVozUm9LU0FsSUhSb2FYTXVkbUZzZFdWekxteGxibWQwYUR0Y2NseHVJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTUyWVd4MVpUdGNjbHh1SUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0J5WVc1a2IyMG9LU0I3WEhKY2JpQWdJQ0FnSUhSb2FYTXVjRzl6YVhScGIyNGdQU0J0WVhSb0xuSnBLREFzSUhSb2FYTXVkbUZzZFdWekxteGxibWQwYUNrN1hISmNiaUFnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMblpoYkhWbE8xeHlYRzRnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJR1J5ZFc1cktDa2dlMXh5WEc0Z0lDQWdJQ0IwYUdsekxtUnlkVzVyVjJGc2F5NXRZWGdnUFNCMGFHbHpMblpoYkhWbGN5NXNaVzVuZEdnN1hISmNiaUFnSUNBZ0lIUm9hWE11WkhKMWJtdFhZV3hyTG5aaGJIVmxJRDBnZEdocGN5NXdiM05wZEdsdmJqdGNjbHh1SUNBZ0lDQWdkR2hwY3k1d2IzTnBkR2x2YmlBOUlIUm9hWE11WkhKMWJtdFhZV3hyTG01bGVIUW9LVHRjY2x4dUlDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdWRtRnNkV1U3WEhKY2JpQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0x5b2dablYwZFhKbElHMWxkR2h2WkhOY2NseHVJQ0FnSUM1bmNtOTFjQ2h6ZEdGeWRDeHpkRzl3S1NBdExTQnZkWFJ3ZFhSeklHRWdaM0p2ZFhBZ2IyWWdiaUJwZEdWdGN5Qm1jbTl0SUhSb1pTQnNhWE4wTENCM2FYUm9JSGR5WVhCd2FXNW5YSEpjYmlBZ0lDQXViRzl2Y0NoemRHRnlkQ3h6ZEc5d0tTQXRMU0JqYjI1bWFXNWxjeUJ6WlhGMVpXNWphVzVuSUhSdklHRWdjM1ZpYzJWMElHOW1JSFJvWlNCMllXeDFaWE5jY2x4dUlDQWdJQ0FnSUNBb1kyOTFiR1FnWlhabGJpQm9ZWFpsSUdFZ1pHbHpkR2x1WTNScGIyNGdZbVYwZDJWbGJpQXViM0pwWjJsdVlXeFdZV3gxWlhNZ1lXNWtJSFJvWlNCaGNuSmhlU0J2WmlCMllXeDFaWE1nWW1WcGJtY2dkWE5sWkNsY2NseHVJQ0FnSUNvdlhISmNibjFjY2x4dVhHNWNibHh1THk4Z1YwVkNVRUZEU3lCR1QwOVVSVklnTHk5Y2JpOHZJQzR2Zmk5cWMyaHBiblF0Ykc5aFpHVnlJUzR2YkdsaUwyMXZaR1ZzY3k5elpYRjFaVzVqWlM1cWN5SXNJaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVhVzF3YjNKMElHMWhkR2dnWm5KdmJTQW5MaTR2ZFhScGJDOXRZWFJvSnp0Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1kyeGhjM01nUkhKMWJtc2dlMXh1WEc0Z0lDQWdZMjl1YzNSeWRXTjBiM0lvYldsdVBUQXNJRzFoZUQwNUxDQjJZV3gxWlQwd0xDQnBibU55WlcxbGJuUTlNU3dnYkc5dmNEMW1ZV3h6WlNrZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG0xcGJpQTlJRzFwYmp0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV0WVhnZ1BTQnRZWGc3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVkbUZzZFdVZ1BTQjJZV3gxWlR0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVwYm1OeVpXMWxiblFnUFNCcGJtTnlaVzFsYm5RN1hHNGdJQ0FnSUNBZ0lIUm9hWE11Ykc5dmNDQTlJR3h2YjNBN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYm1WNGRDZ3BJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NTJZV3gxWlNBclBTQnRZWFJvTG5CcFkyc29MVEVnS2lCMGFHbHpMbWx1WTNKbGJXVnVkQ3dnZEdocGN5NXBibU55WlcxbGJuUXBPMXh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTUyWVd4MVpTQStJSFJvYVhNdWJXRjRLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NXNiMjl3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTUyWVd4MVpTQTlJSFJvYVhNdWJXbHVPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMblpoYkhWbElEMGdkR2hwY3k1dFlYZ2dMU0IwYUdsekxtbHVZM0psYldWdWREdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMblpoYkhWbElEd2dkR2hwY3k1dGFXNHBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxteHZiM0FwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMblpoYkhWbElEMGdkR2hwY3k1dFlYZzdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVkbUZzZFdVZ1BTQjBhR2x6TG0xcGJpQXJJSFJvYVhNdWFXNWpjbVZ0Wlc1ME8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMblpoYkhWbE8xeHVJQ0FnSUgxY2JuMWNibHh1WEc1Y2JpOHZJRmRGUWxCQlEwc2dSazlQVkVWU0lDOHZYRzR2THlBdUwzNHZhbk5vYVc1MExXeHZZV1JsY2lFdUwyeHBZaTl0YjJSbGJITXZaSEoxYm1zdWFuTWlMQ0luZFhObElITjBjbWxqZENjN1hHNWNibWx0Y0c5eWRDQnRZWFJvSUdaeWIyMGdKeTR1TDNWMGFXd3ZiV0YwYUNjN1hHNXBiWEJ2Y25RZ1JISjFibXNnWm5KdmJTQW5MaTlrY25WdWF5YzdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR05zWVhOeklFTnZkVzUwWlhJZ2UxeHVYRzRnSUNBZ1kyOXVjM1J5ZFdOMGIzSW9iV2x1UFRBc0lHMWhlRDB4TUN3Z2JXOWtaVDBuZFhBbkxDQjJZV3gxWlQxbVlXeHpaU2tnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbTFwYmlBOUlHMXBianRjYmlBZ0lDQWdJQ0FnZEdocGN5NXRZWGdnUFNCdFlYZzdYRzRnSUNBZ0lDQWdJSFJvYVhNdWRtRnNkV1VnUFNCMllXeDFaVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXRiMlJsSUQwZ2JXOWtaVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NWtjblZ1YTFkaGJHc2dQU0J1WlhjZ1JISjFibXNvZEdocGN5NXRhVzRzSUhSb2FYTXViV0Y0S1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdWRtRnNkV1VoUFQxbVlXeHpaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11Ym1WNGRDQTlJSFJvYVhOYmRHaHBjeTVmYlc5a1pWMDdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NXVaWGgwSUQwZ2RHaHBjeTVtYVhKemREdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lITmxkQ0J0YjJSbEtHMXZaR1VwSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLQ0VvYlc5a1pTQTlQVDBnSjNWd0p5QjhmQ0J0YjJSbElEMDlQU0FuWkc5M2JpY2dmSHdnYlc5a1pTQTlQVDBnSjNKaGJtUnZiU2NnZkh3Z2JXOWtaU0E5UFQwZ0oyUnlkVzVySnlrcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuTnZiR1V1WlhKeWIzSW9KMVJvWlNCdmJteDVJRzF2WkdWeklHTjFjbkpsYm5Sc2VTQmhiR3h2ZDJWa0lHRnlaVG9nZFhBc0lHUnZkMjRzSUhKaGJtUnZiU3dnWkhKMWJtc25LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjBhR2x6TGw5dGIyUmxJRDBnYlc5a1pUdGNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVkbUZzZFdVcElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxtNWxlSFFnUFNCMGFHbHpXM1JvYVhNdVgyMXZaR1ZkTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnWjJWMElHMXZaR1VvS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDl0YjJSbE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdacGNuTjBLQ2tnZTF4dUlDQWdJQ0FnYVdZZ0tIUm9hWE11ZG1Gc2RXVWhQVDFtWVd4elpTa2dlMXh1SUNBZ0lDQWdJQ0IwYUdsekxtNWxlSFFnUFNCMGFHbHpXM1JvYVhNdVgyMXZaR1ZkTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NXVaWGgwS0NrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCMGFHbHpMbk4wWVhKMFZtRnNkV1Z6SUQwZ2UxeHVJQ0FnSUNBZ0lDQW5kWEFuT2lCMGFHbHpMbTFwYml4Y2JpQWdJQ0FnSUNBZ0oyUnZkMjRuT2lCMGFHbHpMbTFoZUN4Y2JpQWdJQ0FnSUNBZ0oyUnlkVzVySnpvZ2ZuNXRZWFJvTG1GMlpYSmhaMlVvZEdocGN5NXRhVzRzZEdocGN5NXRZWGdwTEZ4dUlDQWdJQ0FnSUNBbmNtRnVaRzl0SnpvZ2JXRjBhQzV5YVNoMGFHbHpMbTFwYml4MGFHbHpMbTFoZUNsY2JpQWdJQ0FnSUgwN1hHNGdJQ0FnSUNCMGFHbHpMblpoYkhWbElEMGdkR2hwY3k1emRHRnlkRlpoYkhWbGMxdDBhR2x6TGw5dGIyUmxYVHRjYmlBZ0lDQWdJSFJvYVhNdWJtVjRkQ0E5SUhSb2FYTmJkR2hwY3k1ZmJXOWtaVjA3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1MllXeDFaVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjFjQ2dwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUyWVd4MVpTc3JPMXh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTUyWVd4MVpTQStQU0IwYUdsekxtMWhlQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1MllXeDFaU0E5SUhSb2FYTXViV2x1TzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMblpoYkhWbE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdSdmQyNG9LU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVkbUZzZFdVdExUdGNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVkbUZzZFdVZ1BDQjBhR2x6TG0xcGJpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTUyWVd4MVpTQTlJSFJvYVhNdWJXRjRPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxuWmhiSFZsTzF4dUlDQWdJSDFjYmx4dUlDQWdJSEpoYm1SdmJTZ3BJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NTJZV3gxWlNBOUlHMWhkR2d1Y21rb2RHaHBjeTV0YVc0c0lIUm9hWE11YldGNEtUdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11ZG1Gc2RXVTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1pISjFibXNvS1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WkhKMWJtdFhZV3hyTG0xcGJpQTlJSFJvYVhNdWJXbHVPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtUnlkVzVyVjJGc2F5NXRZWGdnUFNCMGFHbHpMbTFoZUR0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVrY25WdWExZGhiR3N1ZG1Gc2RXVWdQU0IwYUdsekxuWmhiSFZsTzF4dUlDQWdJQ0FnSUNCMGFHbHpMblpoYkhWbElEMGdkR2hwY3k1a2NuVnVhMWRoYkdzdWJtVjRkQ2dwTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NTJZV3gxWlR0Y2JpQWdJQ0I5WEc1OVhHNWNibHh1WEc0dkx5QlhSVUpRUVVOTElFWlBUMVJGVWlBdkwxeHVMeThnTGk5K0wycHphR2x1ZEMxc2IyRmtaWEloTGk5c2FXSXZiVzlrWld4ekwyTnZkVzUwWlhJdWFuTWlMQ0luZFhObElITjBjbWxqZENjN1hHNWNibXhsZENCemRtY2dQU0J5WlhGMWFYSmxLQ2N1TGk5MWRHbHNMM04yWnljcE8xeHViR1YwSUcxaGRHZ2dQU0J5WlhGMWFYSmxLQ2N1TGk5MWRHbHNMMjFoZEdnbktUdGNibXhsZENCSmJuUmxjbVpoWTJVZ1BTQnlaWEYxYVhKbEtDY3VMaTlqYjNKbEwybHVkR1Z5Wm1GalpTY3BPMXh1YkdWMElGTjBaWEFnUFNCeVpYRjFhWEpsS0NjdUxpOXRiMlJsYkhNdmMzUmxjQ2NwTzF4dWFXMXdiM0owSUNvZ1lYTWdTVzUwWlhKaFkzUnBiMjRnWm5KdmJTQW5MaTR2ZFhScGJDOXBiblJsY21GamRHbHZiaWM3WEc1Y2JpOHFLbHh1S2lCUVlXNHlSRnh1S2x4dUtpQkFaR1Z6WTNKcGNIUnBiMjRnU1c1MFpYSm1ZV05sSUdadmNpQnRiM1pwYm1jZ1lTQnpiM1Z1WkNCaGNtOTFibVFnWVc0Z1lYSnlZWGtnYjJZZ2MzQmxZV3RsY25NdUlGTndaV0ZyWlhJZ2JHOWpZWFJwYjI1eklHTmhiaUJpWlNCamRYTjBiMjFwZW1Wa0xpQlVhR1VnYVc1MFpYSm1ZV05sSUdOaGJHTjFiR0YwWlhNZ2RHaGxJR05zYjNObGJtVnpjeUJ2WmlCMGFHVWdjMjkxYm1RZ2MyOTFjbU5sSUhSdklHVmhZMmdnYzNCbFlXdGxjaUJoYm1RZ2NtVjBkWEp1Y3lCMGFHRjBJR1JwYzNSaGJtTmxJR0Z6SUdFZ2JuVnRaWEpwWXlCMllXeDFaUzVjYmlwY2Jpb2dRR1JsYlc4Z1BITndZVzRnYm1WNGRYTXRkV2s5WENKd1lXNHlSRndpUGp3dmMzQmhiajVjYmlwY2Jpb2dRR1Y0WVcxd2JHVmNiaW9nZG1GeUlIQmhiakprSUQwZ2JtVjNJRTVsZUhWekxsQmhiakprS0NjamRHRnlaMlYwSnlsY2JpcGNiaW9nUUdWNFlXMXdiR1ZjYmlvZ2RtRnlJSEJoYmpKa0lEMGdibVYzSUU1bGVIVnpMbEJoYmpKRUtDY2pkR0Z5WjJWMEp5eDdYRzRxSUNBZ0ozTnBlbVVuT2lCYk1qQXdMREl3TUYwc1hHNHFJQ0FnSjNKaGJtZGxKem9nTUM0MUxDQWdMeThnWkdWMFpXTjBhVzl1SUhKaFpHbDFjeUJ2WmlCbFlXTm9JSE53WldGclpYSmNiaW9nSUNBbmJXOWtaU2M2SUNkaFluTnZiSFYwWlNjc0lDQWdMeThnSjJGaWMyOXNkWFJsSnlCdmNpQW5jbVZzWVhScGRtVW5JSE52ZFc1a0lHMXZkbVZ0Wlc1MFhHNHFJQ0FnSjNOd1pXRnJaWEp6SnpvZ1d5QWdMeThnZEdobElITndaV0ZyWlhJZ1czZ3NlVjBnY0c5emFYUnBiMjV6WEc0cUlDQWdJQ0FnSUZzd0xqVXNNQzR5WFN4Y2Jpb2dJQ0FnSUNBZ1d6QXVOelVzTUM0eU5WMHNYRzRxSUNBZ0lDQWdJRnN3TGpnc01DNDFYU3hjYmlvZ0lDQWdJQ0FnV3pBdU56VXNNQzQzTlYwc1hHNHFJQ0FnSUNBZ0lGc3dMalVzTUM0NFhTeGNiaW9nSUNBZ0lDQWdXekF1TWpVc01DNDNOVjFjYmlvZ0lDQWdJQ0FnV3pBdU1pd3dMalZkTEZ4dUtpQWdJQ0FnSUNCYk1DNHlOU3d3TGpJMVhWeHVLaUFnSUYxY2Jpb2dmU2xjYmlwY2Jpb2dRRzkxZEhCMWRGeHVLaUJqYUdGdVoyVmNiaW9nUm1seVpYTWdZVzU1SUhScGJXVWdkR2hsSUZ3aWMyOTFjbU5sWENJZ2JtOWtaU2R6SUhCdmMybDBhVzl1SUdOb1lXNW5aWE11SUR4aWNqNWNiaW9nVkdobElHVjJaVzUwSUdSaGRHRWdhWE1nWVc0Z1lYSnlZWGtnYjJZZ2RHaGxJR0Z0Y0d4cGRIVmtaWE1nS0RBdE1Ta3NJSEpsY0hKbGMyVnVkR2x1WnlCMGFHVWdiR1YyWld3Z2IyWWdaV0ZqYUNCemNHVmhhMlZ5SUNoaGN5QmpZV3hqZFd4aGRHVmtJR0o1SUdsMGN5QmthWE4wWVc1alpTQjBieUIwYUdVZ1lYVmthVzhnYzI5MWNtTmxLUzVjYmlwY2Jpb2dRRzkxZEhCMWRHVjRZVzF3YkdWY2Jpb2djR0Z1TW1RdWIyNG9KMk5vWVc1blpTY3NablZ1WTNScGIyNG9kaWtnZTF4dUtpQWdJR052Ym5OdmJHVXViRzluS0hZcE8xeHVLaUI5S1Z4dUtseHVLaTljYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnWTJ4aGMzTWdVR0Z1TWtRZ1pYaDBaVzVrY3lCSmJuUmxjbVpoWTJVZ2UxeHVYRzRnSUdOdmJuTjBjblZqZEc5eUtDa2dlMXh1WEc0Z0lDQWdiR1YwSUc5d2RHbHZibk1nUFNCYkozSmhibWRsSjEwN1hHNWNiaUFnSUNCc1pYUWdaR1ZtWVhWc2RITWdQU0I3WEc0Z0lDQWdJQ0FuYzJsNlpTYzZJRnN5TURBc01qQXdYU3hjYmlBZ0lDQWdJQ2R5WVc1blpTYzZJREF1TlN4Y2JpQWdJQ0FnSUNkdGIyUmxKem9nSjJGaWMyOXNkWFJsSnl4Y2JpQWdJQ0FnSUNkemNHVmhhMlZ5Y3ljNklGdGNiaUFnSUNBZ0lDQWdXekF1TlN3d0xqSmRMRnh1SUNBZ0lDQWdJQ0JiTUM0M05Td3dMakkxWFN4Y2JpQWdJQ0FnSUNBZ1d6QXVPQ3d3TGpWZExGeHVJQ0FnSUNBZ0lDQmJNQzQzTlN3d0xqYzFYU3hjYmlBZ0lDQWdJQ0FnV3pBdU5Td3dMamhkTEZ4dUlDQWdJQ0FnSUNCYk1DNHlOU3d3TGpjMVhTeGNiaUFnSUNBZ0lDQWdXekF1TWl3d0xqVmRMRnh1SUNBZ0lDQWdJQ0JiTUM0eU5Td3dMakkxWFZ4dUlDQWdJQ0FnWFZ4dUlDQWdJSDA3WEc1Y2JpQWdJQ0J6ZFhCbGNpaGhjbWQxYldWdWRITXNiM0IwYVc5dWN5eGtaV1poZFd4MGN5azdYRzVjYmlBZ0lDQjBhR2x6TG5aaGJIVmxJRDBnZTF4dUlDQWdJQ0FnZURvZ2JtVjNJRk4wWlhBb01Dd3hMREFzTUM0MUtTeGNiaUFnSUNBZ0lIazZJRzVsZHlCVGRHVndLREFzTVN3d0xEQXVOU2xjYmlBZ0lDQjlPMXh1WEc0Z0lDQWdMeW9xWEc0Z0lDQWdRV0p6YjJ4MWRHVWdiM0lnY21Wc1lYUnBkbVVnYlc5MWMyVWdhVzUwWlhKaFkzUnBiMjR1SUVsdUlGd2lZV0p6YjJ4MWRHVmNJaUJ0YjJSbExDQjBhR1VnYzI5MWNtTmxJRzV2WkdVZ2QybHNiQ0JxZFcxd0lIUnZJSGx2ZFhJZ2JXOTFjMlVnY0c5emFYUnBiMjRnYjI0Z2JXOTFjMlVnWTJ4cFkyc3VJRWx1SUZ3aWNtVnNZWFJwZG1WY0lpQnRiMlJsTENCcGRDQmtiMlZ6SUc1dmRDNWNiaUFnSUNBcUwxeHVJQ0FnSUhSb2FYTXViVzlrWlNBOUlIUm9hWE11YzJWMGRHbHVaM011Ylc5a1pUdGNibHh1SUNBZ0lIUm9hWE11Y0c5emFYUnBiMjRnUFNCN1hHNGdJQ0FnSUNCNE9pQnVaWGNnU1c1MFpYSmhZM1JwYjI0dVNHRnVaR3hsS0hSb2FYTXViVzlrWlN3bmFHOXlhWHB2Ym5SaGJDY3NXekFzZEdocGN5NTNhV1IwYUYwc1czUm9hWE11YUdWcFoyaDBMREJkS1N4Y2JpQWdJQ0FnSUhrNklHNWxkeUJKYm5SbGNtRmpkR2x2Ymk1SVlXNWtiR1VvZEdocGN5NXRiMlJsTENkMlpYSjBhV05oYkNjc1d6QXNkR2hwY3k1M2FXUjBhRjBzVzNSb2FYTXVhR1ZwWjJoMExEQmRLVnh1SUNBZ0lIMDdYRzRnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiaTU0TG5aaGJIVmxJRDBnZEdocGN5NTJZV3gxWlM1NExtNXZjbTFoYkdsNlpXUTdYRzRnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiaTU1TG5aaGJIVmxJRDBnZEdocGN5NTJZV3gxWlM1NUxtNXZjbTFoYkdsNlpXUTdYRzVjYmlBZ0lDQXZLaXBjYmlBZ0lDQkJiaUJoY25KaGVTQnZaaUJ6Y0dWaGEyVnlJR3h2WTJGMGFXOXVjeTRnVlhCa1lYUmxJSFJvYVhNZ2QybDBhQ0F1Ylc5MlpWTndaV0ZyWlhJb0tTQnZjaUF1Ylc5MlpVRnNiRk53WldGclpYSnpLQ2xjYmlBZ0lDQXFMMXh1SUNBZ0lIUm9hWE11YzNCbFlXdGxjbk1nUFNCMGFHbHpMbk5sZEhScGJtZHpMbk53WldGclpYSnpPMXh1WEc0Z0lDQWdMeW9xWEc0Z0lDQWdVbVYzY21sMFpUb2dWR2hsSUcxaGVHbHRkVzBnWkdsemRHRnVZMlVnWm5KdmJTQmhJSE53WldGclpYSWdkR2hoZENCMGFHVWdjMjkxY21ObElHNXZaR1VnWTJGdUlHSmxJR1p2Y2lCcGRDQjBieUJpWlNCb1pXRnlaQ0JtY205dElIUm9ZWFFnYzNCbFlXdGxjaTRnUVNCc2IzY2djbUZ1WjJVZ0tEQXVNU2tnZDJsc2JDQnlaWE4xYkhRZ2FXNGdjM0JsWVd0bGNuTWdiMjVzZVNCd2JHRjVhVzVuSUhkb1pXNGdkR2hsSUhOdmRXNWtJR2x6SUhabGNua2dZMnh2YzJVZ2FYUXVJRVJsWm1GMWJIUWdhWE1nTUM0MUlDaG9ZV3htSUc5bUlIUm9aU0JwYm5SbGNtWmhZMlVwTGx4dUlDQWdJQ292WEc0Z0lDQWdkR2hwY3k1eVlXNW5aU0E5SUhSb2FYTXVjMlYwZEdsdVozTXVjbUZ1WjJVN1hHNWNiaUFnSUNBdktpcGNiaUFnSUNCVWFHVWdZM1Z5Y21WdWRDQnNaWFpsYkhNZ1ptOXlJR1ZoWTJnZ2MzQmxZV3RsY2k0Z1ZHaHBjeUJwY3lCallXeGpkV3hoZEdWa0lIZG9aVzRnWVNCemIzVnlZMlVnYm05a1pTQnZjaUJ6Y0dWaGEyVnlJRzV2WkdVZ2FYTWdiVzkyWldRZ2RHaHliM1ZuYUNCcGJuUmxjbUZqZEdsdmJpQnZjaUJ3Y205bmNtRnRZWFJwWTJGc2JIa3VYRzRnSUNBZ0tpOWNiaUFnSUNCMGFHbHpMbXhsZG1Wc2N5QTlJRnRkTzF4dVhHNGdJQ0FnZEdocGN5NXBibWwwS0NrN1hHNWNiaUFnSUNCMGFHbHpMbU5oYkdOMWJHRjBaVXhsZG1Wc2N5Z3BPMXh1SUNBZ0lIUm9hWE11Y21WdVpHVnlLQ2s3WEc1Y2JpQWdmVnh1WEc0Z0lHSjFhV3hrU1c1MFpYSm1ZV05sS0NrZ2UxeHVYRzRnSUNBZ2RHaHBjeTVyYm05aUlEMGdjM1puTG1OeVpXRjBaU2duWTJseVkyeGxKeWs3WEc1Y2JseHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNWhjSEJsYm1SRGFHbHNaQ2gwYUdsekxtdHViMklwTzF4dVhHNWNiaUFnSUNBdkx5QmhaR1FnYzNCbFlXdGxjbk5jYmlBZ0lDQjBhR2x6TG5Od1pXRnJaWEpGYkdWdFpXNTBjeUE5SUZ0ZE8xeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FUMHdPMms4ZEdocGN5NXpjR1ZoYTJWeWN5NXNaVzVuZEdnN2FTc3JLU0I3WEc0Z0lDQWdJQ0JzWlhRZ2MzQmxZV3RsY2tWc1pXMWxiblFnUFNCemRtY3VZM0psWVhSbEtDZGphWEpqYkdVbktUdGNibHh1SUNBZ0lDQWdkR2hwY3k1bGJHVnRaVzUwTG1Gd2NHVnVaRU5vYVd4a0tITndaV0ZyWlhKRmJHVnRaVzUwS1R0Y2JseHVJQ0FnSUNBZ2RHaHBjeTV6Y0dWaGEyVnlSV3hsYldWdWRITXVjSFZ6YUNoemNHVmhhMlZ5Uld4bGJXVnVkQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lIMWNibHh1SUNCemFYcGxTVzUwWlhKbVlXTmxLQ2tnZTF4dVhHNGdJQ0FnSUNBZ0lIUm9hWE11WDIxcGJrUnBiV1Z1YzJsdmJpQTlJRTFoZEdndWJXbHVLSFJvYVhNdWQybGtkR2dzZEdocGN5NW9aV2xuYUhRcE8xeHVYRzRnSUNBZ0lDQWdJSFJvYVhNdWEyNXZZbEpoWkdsMWN5QTlJSHRjYmlBZ0lDQWdJQ0FnSUNCdlptWTZJSDUrS0hSb2FYTXVYMjFwYmtScGJXVnVjMmx2Ymk4eE1EQXBJQ29nTXlBcklEVXNYRzRnSUNBZ0lDQWdJSDA3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVhMjV2WWxKaFpHbDFjeTV2YmlBOUlIUm9hWE11YTI1dllsSmhaR2wxY3k1dlptWWdLaUF5TzF4dVhHNGdJQ0FnSUNBZ0lIUm9hWE11YTI1dllpNXpaWFJCZEhSeWFXSjFkR1VvSjJONEp5eDBhR2x6TG5kcFpIUm9MeklwTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbXR1YjJJdWMyVjBRWFIwY21saWRYUmxLQ2RqZVNjc2RHaHBjeTVvWldsbmFIUXZNaWs3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVhMjV2WWk1elpYUkJkSFJ5YVdKMWRHVW9KM0luTEhSb2FYTXVhMjV2WWxKaFpHbDFjeTV2Wm1ZcE8xeHVYRzRnSUNBZ0lDQWdJR1p2Y2lBb2JHVjBJR2s5TUR0cFBIUm9hWE11YzNCbFlXdGxjbk11YkdWdVozUm9PMmtyS3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJR3hsZENCemNHVmhhMlZ5Uld4bGJXVnVkQ0E5SUhSb2FYTXVjM0JsWVd0bGNrVnNaVzFsYm5SelcybGRPMXh1SUNBZ0lDQWdJQ0FnSUd4bGRDQnpjR1ZoYTJWeUlEMGdkR2hwY3k1emNHVmhhMlZ5YzF0cFhUdGNiaUFnSUNBZ0lDQWdJQ0J6Y0dWaGEyVnlSV3hsYldWdWRDNXpaWFJCZEhSeWFXSjFkR1VvSjJONEp5eHpjR1ZoYTJWeVd6QmRLblJvYVhNdWQybGtkR2dwTzF4dUlDQWdJQ0FnSUNBZ0lITndaV0ZyWlhKRmJHVnRaVzUwTG5ObGRFRjBkSEpwWW5WMFpTZ25ZM2tuTEhOd1pXRnJaWEpiTVYwcWRHaHBjeTVvWldsbmFIUXBPMXh1SUNBZ0lDQWdJQ0FnSUhOd1pXRnJaWEpGYkdWdFpXNTBMbk5sZEVGMGRISnBZblYwWlNnbmNpY3NkR2hwY3k1ZmJXbHVSR2x0Wlc1emFXOXVMekl3SUNzZ05TazdYRzRnSUNBZ0lDQWdJQ0FnYzNCbFlXdGxja1ZzWlcxbGJuUXVjMlYwUVhSMGNtbGlkWFJsS0NkbWFXeHNMVzl3WVdOcGRIa25MQ0FuTUNjcE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJSFJvYVhNdWNHOXphWFJwYjI0dWVDNXlaWE5wZW1Vb1d6QXNkR2hwY3k1M2FXUjBhRjBzVzNSb2FYTXVhR1ZwWjJoMExEQmRLVHRjYmlBZ0lDQWdJSFJvYVhNdWNHOXphWFJwYjI0dWVTNXlaWE5wZW1Vb1d6QXNkR2hwY3k1M2FXUjBhRjBzVzNSb2FYTXVhR1ZwWjJoMExEQmRLVHRjYmx4dUlDQWdJQ0FnSUNBdkx5QnVaWGgwTENCdVpXVmtJSFJ2WEc0Z0lDQWdJQ0FnSUM4dklISmxjMmw2WlNCd2IzTnBkR2x2Ym5OY2JpQWdJQ0FnSUNBZ0x5OGdZMkZzWTNWc1lYUmxJSE53WldGclpYSWdaR2x6ZEdGdVkyVnpYRzRnSUNBZ0lDQjBhR2x6TG1OaGJHTjFiR0YwWlV4bGRtVnNjeWdwTzF4dUlDQWdJQ0FnZEdocGN5NXlaVzVrWlhJb0tUdGNibHh1SUNCOVhHNWNiaUFnWTI5c2IzSkpiblJsY21aaFkyVW9LU0I3WEc1Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdWMzUjViR1V1WW1GamEyZHliM1Z1WkVOdmJHOXlJRDBnZEdocGN5NWpiMnh2Y25NdVptbHNiRHRjYmlBZ0lDQjBhR2x6TG10dWIySXVjMlYwUVhSMGNtbGlkWFJsS0NkbWFXeHNKeXdnZEdocGN5NWpiMnh2Y25NdWJXVmthWFZ0VEdsbmFIUXBPMXh1WEc0Z0lDQWdabTl5SUNoc1pYUWdhVDB3TzJrOGRHaHBjeTV6Y0dWaGEyVnljeTVzWlc1bmRHZzdhU3NyS1NCN1hHNGdJQ0FnSUNCc1pYUWdjM0JsWVd0bGNrVnNaVzFsYm5RZ1BTQjBhR2x6TG5Od1pXRnJaWEpGYkdWdFpXNTBjMXRwWFR0Y2JpQWdJQ0FnSUhOd1pXRnJaWEpGYkdWdFpXNTBMbk5sZEVGMGRISnBZblYwWlNnblptbHNiQ2NzSUhSb2FYTXVZMjlzYjNKekxtRmpZMlZ1ZENrN1hHNGdJQ0FnSUNCemNHVmhhMlZ5Uld4bGJXVnVkQzV6WlhSQmRIUnlhV0oxZEdVb0ozTjBjbTlyWlNjc0lIUm9hWE11WTI5c2IzSnpMbUZqWTJWdWRDazdYRzRnSUNBZ2ZWeHVYRzRnSUgxY2JseHVJQ0J5Wlc1a1pYSW9LU0I3WEc0Z0lDQWdkR2hwY3k1cmJtOWlRMjl2Y21ScGJtRjBaWE1nUFNCN1hHNGdJQ0FnSUNCNE9pQjBhR2x6TG5aaGJIVmxMbmd1Ym05eWJXRnNhWHBsWkNBcUlIUm9hWE11ZDJsa2RHZ3NYRzRnSUNBZ0lDQjVPaUIwYUdsekxtaGxhV2RvZENBdElIUm9hWE11ZG1Gc2RXVXVlUzV1YjNKdFlXeHBlbVZrSUNvZ2RHaHBjeTVvWldsbmFIUmNiaUFnSUNCOU8xeHVYRzRnSUNBZ2RHaHBjeTVyYm05aUxuTmxkRUYwZEhKcFluVjBaU2duWTNnbkxIUm9hWE11YTI1dllrTnZiM0prYVc1aGRHVnpMbmdwTzF4dUlDQWdJSFJvYVhNdWEyNXZZaTV6WlhSQmRIUnlhV0oxZEdVb0oyTjVKeXgwYUdsekxtdHViMkpEYjI5eVpHbHVZWFJsY3k1NUtUdGNiaUFnZlZ4dVhHNWNiaUFnWTJ4cFkyc29LU0I3WEc0Z0lDQWdkR2hwY3k1d2IzTnBkR2x2Ymk1NExtRnVZMmh2Y2lBOUlIUm9hWE11Ylc5MWMyVTdYRzRnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiaTU1TG1GdVkyaHZjaUE5SUhSb2FYTXViVzkxYzJVN1hHNGdJQ0FnZEdocGN5NXRiM1psS0NrN1hHNGdJSDFjYmx4dUlDQnRiM1psS0NrZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TG1Oc2FXTnJaV1FwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVjRzl6YVhScGIyNHVlQzUxY0dSaGRHVW9kR2hwY3k1dGIzVnpaU2s3WEc0Z0lDQWdJQ0IwYUdsekxuQnZjMmwwYVc5dUxua3VkWEJrWVhSbEtIUm9hWE11Ylc5MWMyVXBPMXh1SUNBZ0lDQWdMeThnY0c5emFYUnBiMjR1ZUNCaGJtUWdjRzl6YVhScGIyNHVlU0JoY21VZ2JtOXliV0ZzYVhwbFpGeHVJQ0FnSUNBZ0x5OGdjMjhnWVhKbElIUm9aU0JzWlhabGJITmNiaUFnSUNBZ0lDOHZJR3hwYTJWc2VTQmtiMjRuZENCdVpXVmtJSFJvYVhNdWRtRnNkV1VnWVhRZ1lXeHNJQzB0SUc5dWJIa2dkWE5sWkNCbWIzSWdaSEpoZDJsdVoxeHVJQ0FnSUNBZ0x5OGdibTkwSUdkdmFXNW5JSFJ2SUdKbElHRWdKM04wWlhBbklHOXlJQ2R0YVc0bklHRnVaQ0FuYldGNEp5QnBiaUIwYUdseklHOXVaUzVjYmlBZ0lDQWdJSFJvYVhNdVkyRnNZM1ZzWVhSbFRHVjJaV3h6S0NrN1hHNGdJQ0FnSUNCMGFHbHpMbVZ0YVhRb0oyTm9ZVzVuWlNjc2RHaHBjeTVzWlhabGJITXBPMXh1SUNBZ0lDQWdkR2hwY3k1eVpXNWtaWElvS1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCeVpXeGxZWE5sS0NrZ2UxeHVJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtDazdYRzRnSUgxY2JseHVJQ0JuWlhRZ2JtOXliV0ZzYVhwbFpDZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2UxeHVJQ0FnSUNBZ2VEb2dkR2hwY3k1MllXeDFaUzU0TG01dmNtMWhiR2w2WldRc1hHNGdJQ0FnSUNCNU9pQjBhR2x6TG5aaGJIVmxMbmt1Ym05eWJXRnNhWHBsWkZ4dUlDQWdJSDA3WEc0Z0lIMWNibHh1SUNCallXeGpkV3hoZEdWTVpYWmxiSE1vS1NCN1hHNGdJQ0FnZEdocGN5NTJZV3gxWlM1NExuVndaR0YwWlU1dmNtMWhiQ2dnZEdocGN5NXdiM05wZEdsdmJpNTRMblpoYkhWbElDazdYRzRnSUNBZ2RHaHBjeTUyWVd4MVpTNTVMblZ3WkdGMFpVNXZjbTFoYkNnZ2RHaHBjeTV3YjNOcGRHbHZiaTU1TG5aaGJIVmxJQ2s3WEc0Z0lDQWdkR2hwY3k1c1pYWmxiSE1nUFNCYlhUdGNiaUFnSUNCMGFHbHpMbk53WldGclpYSnpMbVp2Y2tWaFkyZ29LSE1zYVNrZ1BUNGdlMXh1SUNBZ0lDQWdiR1YwSUdScGMzUmhibU5sSUQwZ2JXRjBhQzVrYVhOMFlXNWpaU2h6V3pCZEtuUm9hWE11ZDJsa2RHZ3NjMXN4WFNwMGFHbHpMbWhsYVdkb2RDeDBhR2x6TG5CdmMybDBhVzl1TG5ndWRtRnNkV1VxZEdocGN5NTNhV1IwYUN3b01TMTBhR2x6TG5CdmMybDBhVzl1TG5rdWRtRnNkV1VwS25Sb2FYTXVhR1ZwWjJoMEtUdGNiaUFnSUNBZ0lHeGxkQ0JzWlhabGJDQTlJRzFoZEdndVkyeHBjQ2d4TFdScGMzUmhibU5sTHloMGFHbHpMbkpoYm1kbEtuUm9hWE11ZDJsa2RHZ3BMREFzTVNrN1hHNGdJQ0FnSUNCMGFHbHpMbXhsZG1Wc2N5NXdkWE5vS0d4bGRtVnNLVHRjYmlBZ0lDQWdJSFJvYVhNdWMzQmxZV3RsY2tWc1pXMWxiblJ6VzJsZExuTmxkRUYwZEhKcFluVjBaU2duWm1sc2JDMXZjR0ZqYVhSNUp5d2diR1YyWld3cE8xeHVJQ0FnSUgwcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lFMXZkbVVnZEdobElHRjFaR2x2SUhOdmRYSmpaU0J1YjJSbElHRnVaQ0IwY21sbloyVnlJSFJvWlNCdmRYUndkWFFnWlhabGJuUXVYRzRnSUVCd1lYSmhiU0I0SUh0dWRXMWlaWEo5SUU1bGR5QjRJR3h2WTJGMGFXOXVMQ0J1YjNKdFlXeHBlbVZrSURBdE1WeHVJQ0JBY0dGeVlXMGdlU0I3Ym5WdFltVnlmU0JPWlhjZ2VTQnNiMk5oZEdsdmJpd2dibTl5YldGc2FYcGxaQ0F3TFRGY2JpQWdLaTljYmlBZ2JXOTJaVk52ZFhKalpTaDRMSGtwSUh0Y2JpQWdJQ0JzWlhRZ2JHOWpZWFJwYjI0Z1BTQjdYRzRnSUNBZ0lDQjRPaUI0S25Sb2FYTXVkMmxrZEdnc1hHNGdJQ0FnSUNCNU9pQjVLblJvYVhNdWFHVnBaMmgwWEc0Z0lDQWdmVHRjYmlBZ0lDQjBhR2x6TG5CdmMybDBhVzl1TG5ndWRYQmtZWFJsS0d4dlkyRjBhVzl1S1R0Y2JpQWdJQ0IwYUdsekxuQnZjMmwwYVc5dUxua3VkWEJrWVhSbEtHeHZZMkYwYVc5dUtUdGNiaUFnSUNCMGFHbHpMbU5oYkdOMWJHRjBaVXhsZG1Wc2N5Z3BPMXh1SUNBZ0lIUm9hWE11WlcxcGRDZ25ZMmhoYm1kbEp5eDBhR2x6TG14bGRtVnNjeWs3WEc0Z0lDQWdkR2hwY3k1eVpXNWtaWElvS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNCTmIzWmxJR0VnYzNCbFlXdGxjaUJ1YjJSbElHRnVaQ0IwY21sbloyVnlJSFJvWlNCdmRYUndkWFFnWlhabGJuUXVYRzRnSUVCd1lYSmhiU0JwYm1SbGVDQjdiblZ0WW1WeWZTQkpibVJsZUNCdlppQjBhR1VnYzNCbFlXdGxjaUIwYnlCdGIzWmxYRzRnSUVCd1lYSmhiU0I0SUh0dWRXMWlaWEo5SUU1bGR5QjRJR3h2WTJGMGFXOXVMQ0J1YjNKdFlXeHBlbVZrSURBdE1WeHVJQ0JBY0dGeVlXMGdlU0I3Ym5WdFltVnlmU0JPWlhjZ2VTQnNiMk5oZEdsdmJpd2dibTl5YldGc2FYcGxaQ0F3TFRGY2JpQWdLaTljYmlBZ2JXOTJaVk53WldGclpYSW9hVzVrWlhnc2VDeDVLU0I3WEc1Y2JpQWdJQ0IwYUdsekxuTndaV0ZyWlhKelcybHVaR1Y0WFNBOUlGdDRMSGxkTzF4dUlDQWdJSFJvYVhNdWMzQmxZV3RsY2tWc1pXMWxiblJ6VzJsdVpHVjRYUzV6WlhSQmRIUnlhV0oxZEdVb0oyTjRKeXdnZUNwMGFHbHpMbmRwWkhSb0tUdGNiaUFnSUNCMGFHbHpMbk53WldGclpYSkZiR1Z0Wlc1MGMxdHBibVJsZUYwdWMyVjBRWFIwY21saWRYUmxLQ2RqZVNjc0lIa3FkR2hwY3k1b1pXbG5hSFFwTzF4dUlDQWdJSFJvYVhNdVkyRnNZM1ZzWVhSbFRHVjJaV3h6S0NrN1hHNGdJQ0FnZEdocGN5NWxiV2wwS0NkamFHRnVaMlVuTEhSb2FYTXViR1YyWld4ektUdGNiaUFnSUNCMGFHbHpMbkpsYm1SbGNpZ3BPMXh1WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnVTJWMElHRnNiQ0J6Y0dWaGEyVnlJR3h2WTJGMGFXOXVjMXh1SUNCQWNHRnlZVzBnYkc5allYUnBiMjV6SUh0QmNuSmhlWDBnUVhKeVlYa2diMllnYzNCbFlXdGxjaUJzYjJOaGRHbHZibk11SUVWaFkyZ2dhWFJsYlNCcGJpQjBhR1VnWVhKeVlYa2djMmh2ZFd4a0lHSmxJR0Z1SUdGeWNtRjVJRzltSUc1dmNtMWhiR2w2WldRZ2VDQmhibVFnZVNCamIyOXlaR2x1WVhSbGN5NWNibHh1SUNCelpYUlRjR1ZoYTJWeWN5aHNiMk5oZEdsdmJuTXBJSHRjYmx4dUlDQjlYRzRnSUNvdlhHNWNibjFjYmx4dVhHNWNiaTh2SUZkRlFsQkJRMHNnUms5UFZFVlNJQzh2WEc0dkx5QXVMMzR2YW5Ob2FXNTBMV3h2WVdSbGNpRXVMMnhwWWk5cGJuUmxjbVpoWTJWekwzQmhiakprTG1weklpd2lKM1Z6WlNCemRISnBZM1FuTzF4dVhHNXNaWFFnYldGMGFDQTlJSEpsY1hWcGNtVW9KeTR1TDNWMGFXd3ZiV0YwYUNjcE8xeHViR1YwSUhOMlp5QTlJSEpsY1hWcGNtVW9KeTR1TDNWMGFXd3ZjM1puSnlrN1hHNXNaWFFnU1c1MFpYSm1ZV05sSUQwZ2NtVnhkV2x5WlNnbkxpNHZZMjl5WlM5cGJuUmxjbVpoWTJVbktUdGNibHh1THlvcVhHNHFJRlJwYkhSY2JpcGNiaW9nUUdSbGMyTnlhWEIwYVc5dUlFUmxkbWxqWlNCMGFXeDBJSE5sYm5OdmNpQjNhWFJvSURJZ2IzSWdNeUJoZUdWeklDaGtaWEJsYm1ScGJtY2diMjRnZVc5MWNpQmtaWFpwWTJVZ1lXNWtJR0p5YjNkelpYSXBMbHh1S2x4dUtpQkFaR1Z0YnlBOGMzQmhiaUJ1WlhoMWN5MTFhVDBuZEdsc2RDYytQQzl6Y0dGdVBseHVLbHh1S2lCQVpYaGhiWEJzWlZ4dUtpQjJZWElnZEdsc2RDQTlJRzVsZHlCT1pYaDFjeTVVYVd4MEtDY2pkR0Z5WjJWMEp5bGNiaXBjYmlvZ1FHOTFkSEIxZEZ4dUtpQmphR0Z1WjJWY2Jpb2dSbWx5WlhNZ1lYUWdZU0J5WldkMWJHRnlJR2x1ZEdWeWRtRnNMQ0JoY3lCc2IyNW5JR0Z6SUhSb2FYTWdhVzUwWlhKbVlXTmxJR2x6SUdGamRHbDJaU0FvYzJWbElIUm9aU0JwYm5SbGNtWmhZMlVuY3lBOGFUNHVZV04wYVhabFBDOXBQaUJ3Y205d1pYSjBlU2s4WW5JK1hHNHFJRlJvWlNCbGRtVnVkQ0JrWVhSaElHbHpJR0Z1SUR4cFBtOWlhbVZqZER3dmFUNGdZMjl1ZEdGcGJtbHVaeUI0SUNodWRXMWlaWElwSUdGdVpDQjVJQ2h1ZFcxaVpYSXBJSEJ5YjNCbGNuUnBaWE1nZDJocFkyZ2djbVZ3Y21WelpXNTBJSFJvWlNCamRYSnlaVzUwSUhScGJIUWdjM1JoZEdVZ2IyWWdkR2hsSUdSbGRtbGpaUzVjYmlwY2Jpb2dRRzkxZEhCMWRHVjRZVzF3YkdWY2Jpb2dkR2xzZEM1dmJpZ25ZMmhoYm1kbEp5eG1kVzVqZEdsdmJpaDJLU0I3WEc0cUlDQWdZMjl1YzI5c1pTNXNiMmNvZGlrN1hHNHFJSDBwWEc0cVhHNHFYRzRxTDF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCamJHRnpjeUJVYVd4MElHVjRkR1Z1WkhNZ1NXNTBaWEptWVdObElIdGNibHh1SUNCamIyNXpkSEoxWTNSdmNpZ3BJSHRjYmx4dUlDQWdJR3hsZENCdmNIUnBiMjV6SUQwZ1d5ZDJZV3gxWlNkZE8xeHVYRzRnSUNBZ2JHVjBJR1JsWm1GMWJIUnpJRDBnZTF4dUlDQWdJQ0FnSjNOcGVtVW5PaUJiT0RBc09EQmRYRzRnSUNBZ2ZUdGNibHh1SUNBZ0lITjFjR1Z5S0dGeVozVnRaVzUwY3l4dmNIUnBiMjV6TEdSbFptRjFiSFJ6S1R0Y2JseHVJQ0FnSUhSb2FYTXVYMkZqZEdsMlpTQTlJSFJ5ZFdVN1hHNWNiaUFnSUNCMGFHbHpMbWx1YVhRb0tUdGNibHh1SUNBZ0lDOHZJR0ZrWkNCbGRtVnVkQ0JzYVhOMFpXNWxjaUJtYjNJZ1pHVjJhV05sSUc5eWFXVnVkR0YwYVc5dVhHNWNiaUFnWEhSMGFHbHpMbUp2ZFc1a1ZYQmtZWFJsSUQwZ2RHaHBjeTUxY0dSaGRHVXVZbWx1WkNoMGFHbHpLVHRjYmlBZ0x5OWNkSFJvYVhNdVltOTFibVJOYjNwVWFXeDBJRDBnZEdocGN5NXRiM3BVYVd4MExtSnBibVFvZEdocGN5bGNibHh1SUNCY2RHbG1JQ2gzYVc1a2IzY3VSR1YyYVdObFQzSnBaVzUwWVhScGIyNUZkbVZ1ZENrZ2UxeHVJQ0JjZEZ4MGRHaHBjeTV2Y21sbGJuUmhkR2x2Ymt4cGMzUmxibVZ5SUQwZ2QybHVaRzkzTG1Ga1pFVjJaVzUwVEdsemRHVnVaWElvSjJSbGRtbGpaVzl5YVdWdWRHRjBhVzl1Snl3Z2RHaHBjeTVpYjNWdVpGVndaR0YwWlN3Z1ptRnNjMlVwTzF4dUlDQmNkSDBnWld4elpTQjdYRzRnSUNBZ0lDQjBhR2x6TGw5aFkzUnBkbVVnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJSFJvYVhNdVkyOXNiM0pKYm5SbGNtWmhZMlVvS1R0Y2JpQWdJQ0I5WEc1Y2JseHVYRzRnSUNBZ0lDQXZLbVZzYzJVZ2FXWWdLSGRwYm1SdmR5NVBjbWxsYm5SaGRHbHZia1YyWlc1MEtTQjdYRzRnSUM4dlhIUWdJRngwZDJsdVpHOTNMbUZrWkVWMlpXNTBUR2x6ZEdWdVpYSW9KMDF2ZWs5eWFXVnVkR0YwYVc5dUp5d2dkR2hwY3k1aWIzVnVaRTF2ZWxScGJIUXNJR1poYkhObEtUdGNiaUFnWEhSOUlHVnNjMlVnZTF4dUlDQmNkQ0FnWEhSamIyNXpiMnhsTG14dlp5Z25UbTkwSUhOMWNIQnZjblJsWkNCdmJpQjViM1Z5SUdSbGRtbGpaU0J2Y2lCaWNtOTNjMlZ5TGljcE8xeHVJQ0JjZEgwZ0tpOWNibHh1WEc0Z0lIMWNibHh1WEc0Z0lHSjFhV3hrU1c1MFpYSm1ZV05sS0NrZ2UxeHVYRzRnSUNBZ2RHaHBjeTUwYVhSc1pTQTlJSE4yWnk1amNtVmhkR1VvSjNSbGVIUW5LVHRjYmlBZ0lDQjBhR2x6TG1OcGNtTnNaVmdnUFNCemRtY3VZM0psWVhSbEtDZGphWEpqYkdVbktUdGNiaUFnSUNCMGFHbHpMbU5wY21Oc1pWa2dQU0J6ZG1jdVkzSmxZWFJsS0NkamFYSmpiR1VuS1R0Y2JpQWdJQ0IwYUdsekxtTnBjbU5zWlZvZ1BTQnpkbWN1WTNKbFlYUmxLQ2RqYVhKamJHVW5LVHRjYmx4dUlDQWdJSFJvYVhNdVltRnlXQ0E5SUhOMlp5NWpjbVZoZEdVb0ozQmhkR2duS1R0Y2JpQWdJQ0IwYUdsekxtSmhjbGtnUFNCemRtY3VZM0psWVhSbEtDZHdZWFJvSnlrN1hHNGdJQ0FnZEdocGN5NWlZWEphSUQwZ2MzWm5MbU55WldGMFpTZ25jR0YwYUNjcE8xeHVYRzRnSUNBZ2RHaHBjeTVpWVhKWU1pQTlJSE4yWnk1amNtVmhkR1VvSjNCaGRHZ25LVHRjYmlBZ0lDQjBhR2x6TG1KaGNsa3lJRDBnYzNabkxtTnlaV0YwWlNnbmNHRjBhQ2NwTzF4dUlDQWdJSFJvYVhNdVltRnlXaklnUFNCemRtY3VZM0psWVhSbEtDZHdZWFJvSnlrN1hHNWNiaUFnSUNCMGFHbHpMbUpoY2xndWMyVjBRWFIwY21saWRYUmxLQ2R2Y0dGamFYUjVKeXduTUM0NEp5azdYRzRnSUNBZ2RHaHBjeTVpWVhKWkxuTmxkRUYwZEhKcFluVjBaU2duYjNCaFkybDBlU2NzSnpBdU9DY3BPMXh1SUNBZ0lIUm9hWE11WW1GeVdpNXpaWFJCZEhSeWFXSjFkR1VvSjI5d1lXTnBkSGtuTENjd0xqZ25LVHRjYmlBZ0lDQjBhR2x6TG1KaGNsZ3lMbk5sZEVGMGRISnBZblYwWlNnbmIzQmhZMmwwZVNjc0p6QXVPQ2NwTzF4dUlDQWdJSFJvYVhNdVltRnlXVEl1YzJWMFFYUjBjbWxpZFhSbEtDZHZjR0ZqYVhSNUp5d25NQzQ0SnlrN1hHNGdJQ0FnZEdocGN5NWlZWEphTWk1elpYUkJkSFJ5YVdKMWRHVW9KMjl3WVdOcGRIa25MQ2N3TGpnbktUdGNibHh1SUNBZ0lIUm9hWE11WTJseVkyeGxXQzV6WlhSQmRIUnlhV0oxZEdVb0oyTjRKeXgwYUdsekxuZHBaSFJvS2pNdk1USXBPMXh1SUNBZ0lIUm9hWE11WTJseVkyeGxXQzV6WlhSQmRIUnlhV0oxZEdVb0oyTjVKeXgwYUdsekxtaGxhV2RvZENvekx6UXBPMXh1SUNBZ0lIUm9hWE11WTJseVkyeGxXQzV6WlhSQmRIUnlhV0oxZEdVb0ozSW5MSFJvYVhNdWFHVnBaMmgwTHpFd0tUdGNiaUFnSUNCMGFHbHpMbU5wY21Oc1pWZ3VjMlYwUVhSMGNtbGlkWFJsS0NkdmNHRmphWFI1Snl3bk1DNDBKeWs3WEc1Y2JpQWdJQ0IwYUdsekxtTnBjbU5zWlZrdWMyVjBRWFIwY21saWRYUmxLQ2RqZUNjc2RHaHBjeTUzYVdSMGFDbzJMekV5S1R0Y2JpQWdJQ0IwYUdsekxtTnBjbU5zWlZrdWMyVjBRWFIwY21saWRYUmxLQ2RqZVNjc2RHaHBjeTVvWldsbmFIUXFNeTgwS1R0Y2JpQWdJQ0IwYUdsekxtTnBjbU5zWlZrdWMyVjBRWFIwY21saWRYUmxLQ2R5Snl4MGFHbHpMbWhsYVdkb2RDOHhNQ2s3WEc0Z0lDQWdkR2hwY3k1amFYSmpiR1ZaTG5ObGRFRjBkSEpwWW5WMFpTZ25iM0JoWTJsMGVTY3NKekF1TkNjcE8xeHVYRzRnSUNBZ2RHaHBjeTVqYVhKamJHVmFMbk5sZEVGMGRISnBZblYwWlNnblkzZ25MSFJvYVhNdWQybGtkR2dxT1M4eE1pazdYRzRnSUNBZ2RHaHBjeTVqYVhKamJHVmFMbk5sZEVGMGRISnBZblYwWlNnblkza25MSFJvYVhNdWFHVnBaMmgwS2pNdk5DazdYRzRnSUNBZ2RHaHBjeTVqYVhKamJHVmFMbk5sZEVGMGRISnBZblYwWlNnbmNpY3NkR2hwY3k1b1pXbG5hSFF2TVRBcE8xeHVJQ0FnSUhSb2FYTXVZMmx5WTJ4bFdpNXpaWFJCZEhSeWFXSjFkR1VvSjI5d1lXTnBkSGtuTENjd0xqUW5LVHRjYmx4dVhHNGdJQ0FnZEdocGN5NWlZWEpZTG5ObGRFRjBkSEpwWW5WMFpTZ25jM1J5YjJ0bExYZHBaSFJvSnl4TllYUm9Mbkp2ZFc1a0tIUm9hWE11YUdWcFoyaDBMek13S1NrN1hHNGdJQ0FnZEdocGN5NWlZWEpaTG5ObGRFRjBkSEpwWW5WMFpTZ25jM1J5YjJ0bExYZHBaSFJvSnl4TllYUm9Mbkp2ZFc1a0tIUm9hWE11YUdWcFoyaDBMek13S1NrN1hHNGdJQ0FnZEdocGN5NWlZWEphTG5ObGRFRjBkSEpwWW5WMFpTZ25jM1J5YjJ0bExYZHBaSFJvSnl4TllYUm9Mbkp2ZFc1a0tIUm9hWE11YUdWcFoyaDBMek13S1NrN1hHNWNiaUFnSUNCMGFHbHpMbUpoY2xndWMyVjBRWFIwY21saWRYUmxLQ2RtYVd4c0p5d2dKMjV2Ym1VbktUdGNiaUFnSUNCMGFHbHpMbUpoY2xrdWMyVjBRWFIwY21saWRYUmxLQ2RtYVd4c0p5d2dKMjV2Ym1VbktUdGNiaUFnSUNCMGFHbHpMbUpoY2xvdWMyVjBRWFIwY21saWRYUmxLQ2RtYVd4c0p5d2dKMjV2Ym1VbktUdGNibHh1SUNBZ0lIUm9hWE11WW1GeVdESXVjMlYwUVhSMGNtbGlkWFJsS0NkemRISnZhMlV0ZDJsa2RHZ25MRTFoZEdndWNtOTFibVFvZEdocGN5NW9aV2xuYUhRdk16QXBLVHRjYmlBZ0lDQjBhR2x6TG1KaGNsa3lMbk5sZEVGMGRISnBZblYwWlNnbmMzUnliMnRsTFhkcFpIUm9KeXhOWVhSb0xuSnZkVzVrS0hSb2FYTXVhR1ZwWjJoMEx6TXdLU2s3WEc0Z0lDQWdkR2hwY3k1aVlYSmFNaTV6WlhSQmRIUnlhV0oxZEdVb0ozTjBjbTlyWlMxM2FXUjBhQ2NzVFdGMGFDNXliM1Z1WkNoMGFHbHpMbWhsYVdkb2RDOHpNQ2twTzF4dVhHNGdJQ0FnZEdocGN5NWlZWEpZTWk1elpYUkJkSFJ5YVdKMWRHVW9KMlpwYkd3bkxDQW5ibTl1WlNjcE8xeHVJQ0FnSUhSb2FYTXVZbUZ5V1RJdWMyVjBRWFIwY21saWRYUmxLQ2RtYVd4c0p5d2dKMjV2Ym1VbktUdGNiaUFnSUNCMGFHbHpMbUpoY2xveUxuTmxkRUYwZEhKcFluVjBaU2duWm1sc2JDY3NJQ2R1YjI1bEp5azdYRzVjYmx4dUlDQWdJSFJvYVhNdWRHbDBiR1V1YzJWMFFYUjBjbWxpZFhSbEtDZDRKeXgwYUdsekxuZHBaSFJvTHpJcE8xeHVJQ0FnSUhSb2FYTXVkR2wwYkdVdWMyVjBRWFIwY21saWRYUmxLQ2Q1Snl4MGFHbHpMbWhsYVdkb2RDOHpLemNwTzF4dUlDQWdJSFJvYVhNdWRHbDBiR1V1YzJWMFFYUjBjbWxpZFhSbEtDZG1iMjUwTFhOcGVtVW5MQ2N4TlhCNEp5azdYRzRnSUNBZ2RHaHBjeTUwYVhSc1pTNXpaWFJCZEhSeWFXSjFkR1VvSjJadmJuUXRkMlZwWjJoMEp5d25ZbTlzWkNjcE8xeHVJQ0FnSUhSb2FYTXVkR2wwYkdVdWMyVjBRWFIwY21saWRYUmxLQ2RzWlhSMFpYSXRjM0JoWTJsdVp5Y3NKekp3ZUNjcE8xeHVJQ0FnSUhSb2FYTXVkR2wwYkdVdWMyVjBRWFIwY21saWRYUmxLQ2R2Y0dGamFYUjVKeXduTUM0M0p5azdYRzRnSUNBZ2RHaHBjeTUwYVhSc1pTNXpaWFJCZEhSeWFXSjFkR1VvSjNSbGVIUXRZVzVqYUc5eUp5d25iV2xrWkd4bEp5azdYRzRnSUNBZ2RHaHBjeTUwYVhSc1pTNTBaWGgwUTI5dWRHVnVkQ0E5SUNkVVNVeFVKenRjYmx4dVhHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExtRndjR1Z1WkVOb2FXeGtLSFJvYVhNdVkybHlZMnhsV0NrN1hHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExtRndjR1Z1WkVOb2FXeGtLSFJvYVhNdVkybHlZMnhsV1NrN1hHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExtRndjR1Z1WkVOb2FXeGtLSFJvYVhNdVkybHlZMnhsV2lrN1hHNWNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUXVZWEJ3Wlc1a1EyaHBiR1FvZEdocGN5NWlZWEpZS1R0Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdVlYQndaVzVrUTJocGJHUW9kR2hwY3k1aVlYSlpLVHRjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1WVhCd1pXNWtRMmhwYkdRb2RHaHBjeTVpWVhKYUtUdGNibHh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkQzVoY0hCbGJtUkRhR2xzWkNoMGFHbHpMbUpoY2xneUtUdGNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUXVZWEJ3Wlc1a1EyaHBiR1FvZEdocGN5NWlZWEpaTWlrN1hHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExtRndjR1Z1WkVOb2FXeGtLSFJvYVhNdVltRnlXaklwTzF4dVhHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExtRndjR1Z1WkVOb2FXeGtLSFJvYVhNdWRHbDBiR1VwTzF4dVhHNGdJSDFjYmx4dUlDQmpiMnh2Y2tsdWRHVnlabUZqWlNncElIdGNibHh1SUNBZ0lHbG1JQ2gwYUdsekxsOWhZM1JwZG1VcElIdGNiaUFnSUNBZ0lIUm9hWE11Wld4bGJXVnVkQzV6ZEhsc1pTNWlZV05yWjNKdmRXNWtRMjlzYjNJZ1BTQjBhR2x6TG1OdmJHOXljeTVoWTJObGJuUTdYRzRnSUNBZ0lDQjBhR2x6TG1OcGNtTnNaVmd1YzJWMFFYUjBjbWxpZFhSbEtDZG1hV3hzSnl4MGFHbHpMbU52Ykc5eWN5NXNhV2RvZENrN1hHNGdJQ0FnSUNCMGFHbHpMbU5wY21Oc1pWa3VjMlYwUVhSMGNtbGlkWFJsS0NkbWFXeHNKeXgwYUdsekxtTnZiRzl5Y3k1c2FXZG9kQ2s3WEc0Z0lDQWdJQ0IwYUdsekxtTnBjbU5zWlZvdWMyVjBRWFIwY21saWRYUmxLQ2RtYVd4c0p5eDBhR2x6TG1OdmJHOXljeTVzYVdkb2RDazdYRzRnSUNBZ0lDQjBhR2x6TG1OcGNtTnNaVmd1YzJWMFFYUjBjbWxpZFhSbEtDZHpkSEp2YTJVbkxIUm9hWE11WTI5c2IzSnpMbXhwWjJoMEtUdGNiaUFnSUNBZ0lIUm9hWE11WTJseVkyeGxXUzV6WlhSQmRIUnlhV0oxZEdVb0ozTjBjbTlyWlNjc2RHaHBjeTVqYjJ4dmNuTXViR2xuYUhRcE8xeHVJQ0FnSUNBZ2RHaHBjeTVqYVhKamJHVmFMbk5sZEVGMGRISnBZblYwWlNnbmMzUnliMnRsSnl4MGFHbHpMbU52Ykc5eWN5NXNhV2RvZENrN1hHNGdJQ0FnSUNCMGFHbHpMbUpoY2xndWMyVjBRWFIwY21saWRYUmxLQ2R6ZEhKdmEyVW5MSFJvYVhNdVkyOXNiM0p6TG14cFoyaDBLVHRjYmlBZ0lDQWdJSFJvYVhNdVltRnlXUzV6WlhSQmRIUnlhV0oxZEdVb0ozTjBjbTlyWlNjc2RHaHBjeTVqYjJ4dmNuTXViR2xuYUhRcE8xeHVJQ0FnSUNBZ2RHaHBjeTVpWVhKYUxuTmxkRUYwZEhKcFluVjBaU2duYzNSeWIydGxKeXgwYUdsekxtTnZiRzl5Y3k1c2FXZG9kQ2s3WEc0Z0lDQWdJQ0IwYUdsekxtSmhjbGd5TG5ObGRFRjBkSEpwWW5WMFpTZ25jM1J5YjJ0bEp5eDBhR2x6TG1OdmJHOXljeTVzYVdkb2RDazdYRzRnSUNBZ0lDQjBhR2x6TG1KaGNsa3lMbk5sZEVGMGRISnBZblYwWlNnbmMzUnliMnRsSnl4MGFHbHpMbU52Ykc5eWN5NXNhV2RvZENrN1hHNGdJQ0FnSUNCMGFHbHpMbUpoY2xveUxuTmxkRUYwZEhKcFluVjBaU2duYzNSeWIydGxKeXgwYUdsekxtTnZiRzl5Y3k1c2FXZG9kQ2s3WEc0Z0lDQWdJQ0IwYUdsekxuUnBkR3hsTG5ObGRFRjBkSEpwWW5WMFpTZ25abWxzYkNjc2RHaHBjeTVqYjJ4dmNuTXViR2xuYUhRcE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0IwYUdsekxtVnNaVzFsYm5RdWMzUjViR1V1WW1GamEyZHliM1Z1WkVOdmJHOXlJRDBnZEdocGN5NWpiMnh2Y25NdVptbHNiRHRjYmlBZ0lDQWdJSFJvYVhNdVkybHlZMnhsV0M1elpYUkJkSFJ5YVdKMWRHVW9KMlpwYkd3bkxIUm9hWE11WTI5c2IzSnpMbTFsWkdsMWJVeHBaMmgwS1R0Y2JpQWdJQ0FnSUhSb2FYTXVZMmx5WTJ4bFdTNXpaWFJCZEhSeWFXSjFkR1VvSjJacGJHd25MSFJvYVhNdVkyOXNiM0p6TG0xbFpHbDFiVXhwWjJoMEtUdGNiaUFnSUNBZ0lIUm9hWE11WTJseVkyeGxXaTV6WlhSQmRIUnlhV0oxZEdVb0oyWnBiR3duTEhSb2FYTXVZMjlzYjNKekxtMWxaR2wxYlV4cFoyaDBLVHRjYmlBZ0lDQWdJSFJvYVhNdVkybHlZMnhsV0M1elpYUkJkSFJ5YVdKMWRHVW9KM04wY205clpTY3NkR2hwY3k1amIyeHZjbk11YldWa2FYVnRUR2xuYUhRcE8xeHVJQ0FnSUNBZ2RHaHBjeTVqYVhKamJHVlpMbk5sZEVGMGRISnBZblYwWlNnbmMzUnliMnRsSnl4MGFHbHpMbU52Ykc5eWN5NXRaV1JwZFcxTWFXZG9kQ2s3WEc0Z0lDQWdJQ0IwYUdsekxtTnBjbU5zWlZvdWMyVjBRWFIwY21saWRYUmxLQ2R6ZEhKdmEyVW5MSFJvYVhNdVkyOXNiM0p6TG0xbFpHbDFiVXhwWjJoMEtUdGNiaUFnSUNBZ0lIUm9hWE11WW1GeVdDNXpaWFJCZEhSeWFXSjFkR1VvSjNOMGNtOXJaU2NzZEdocGN5NWpiMnh2Y25NdWJXVmthWFZ0VEdsbmFIUXBPMXh1SUNBZ0lDQWdkR2hwY3k1aVlYSlpMbk5sZEVGMGRISnBZblYwWlNnbmMzUnliMnRsSnl4MGFHbHpMbU52Ykc5eWN5NXRaV1JwZFcxTWFXZG9kQ2s3WEc0Z0lDQWdJQ0IwYUdsekxtSmhjbG91YzJWMFFYUjBjbWxpZFhSbEtDZHpkSEp2YTJVbkxIUm9hWE11WTI5c2IzSnpMbTFsWkdsMWJVeHBaMmgwS1R0Y2JpQWdJQ0FnSUhSb2FYTXVZbUZ5V0RJdWMyVjBRWFIwY21saWRYUmxLQ2R6ZEhKdmEyVW5MSFJvYVhNdVkyOXNiM0p6TG0xbFpHbDFiVXhwWjJoMEtUdGNiaUFnSUNBZ0lIUm9hWE11WW1GeVdUSXVjMlYwUVhSMGNtbGlkWFJsS0NkemRISnZhMlVuTEhSb2FYTXVZMjlzYjNKekxtMWxaR2wxYlV4cFoyaDBLVHRjYmlBZ0lDQWdJSFJvYVhNdVltRnlXakl1YzJWMFFYUjBjbWxpZFhSbEtDZHpkSEp2YTJVbkxIUm9hWE11WTI5c2IzSnpMbTFsWkdsMWJVeHBaMmgwS1R0Y2JpQWdJQ0FnSUhSb2FYTXVkR2wwYkdVdWMyVjBRWFIwY21saWRYUmxLQ2RtYVd4c0p5eDBhR2x6TG1OdmJHOXljeTV0WldScGRXMU1hV2RvZENrN1hHNGdJQ0FnZlZ4dVhHNGdJSDFjYmx4dUlDQjFjR1JoZEdVb2Rpa2dlMXh1SUNBZ0lHbG1JQ2gwYUdsekxsOWhZM1JwZG1VcGUxeHVYRzRnSUNBZ0lDQnNaWFFnZVNBOUlIWXVZbVYwWVR0Y2JpQWdJQ0FnSUd4bGRDQjRJRDBnZGk1bllXMXRZVHRjYmlBZ0lDQWdJR3hsZENCNklEMGdkaTVoYkhCb1lUdGNibHh1SUNBZ0lDQWdMeThnZEdGclpTQjBhR1VnYjNKcFoybHVZV3dnTFRrd0lIUnZJRGt3SUhOallXeGxJR0Z1WkNCdWIzSnRZV3hwZW1VZ2FYUWdNQzB4WEc0Z0lDQWdJQ0I0SUQwZ2JXRjBhQzV6WTJGc1pTaDRMQzA1TUN3NU1Dd3dMREVwTzF4dUlDQWdJQ0FnZVNBOUlHMWhkR2d1YzJOaGJHVW9lU3d0T1RBc09UQXNNQ3d4S1R0Y2JpQWdJQ0FnSUhvZ1BTQnRZWFJvTG5OallXeGxLSG9zTUN3ek5qQXNNQ3d4S1R0Y2JseHVYRzRnSUNBZ0lDQnNaWFFnYUdGdVpHeGxVRzlwYm5SeklEMGdlMXh1SUNBZ0lDQWdJQ0J6ZEdGeWREb2dUV0YwYUM1UVNTb3hMalVzWEc0Z0lDQWdJQ0FnSUdWdVpEb2diV0YwYUM1amJHbHdLQ0J0WVhSb0xuTmpZV3hsS0hnc01Dd3dMalVzVFdGMGFDNVFTU294TGpVc1RXRjBhQzVRU1Nvd0xqVXBJQ3dnVFdGMGFDNVFTU293TGpVc0lFMWhkR2d1VUVrcU1TNDFJQ2xjYmlBZ0lDQWdJSDA3WEc0Z0lDQWdJQ0JzWlhRZ2FHRnVaR3hsTWxCdmFXNTBjeUE5SUh0Y2JpQWdJQ0FnSUNBZ2MzUmhjblE2SUUxaGRHZ3VVRWtxTWk0MUxGeHVJQ0FnSUNBZ0lDQmxibVE2SUcxaGRHZ3VZMnhwY0NnZ2JXRjBhQzV6WTJGc1pTaDRMREF1TlN3eExFMWhkR2d1VUVrcU1pNDFMRTFoZEdndVVFa3FNUzQxS1NBc0lFMWhkR2d1VUVrcU1TNDFMQ0JOWVhSb0xsQkpLakl1TlNBcFhHNGdJQ0FnSUNCOU8xeHVYRzRnSUNBZ0lDQnNaWFFnYUdGdVpHeGxVR0YwYUNBOUlITjJaeTVoY21Nb2RHaHBjeTVqYVhKamJHVllMbU40TG1KaGMyVldZV3d1ZG1Gc2RXVXNJSFJvYVhNdVkybHlZMnhsV0M1amVTNWlZWE5sVm1Gc0xuWmhiSFZsTENCMGFHbHpMbU5wY21Oc1pWZ3VjaTVpWVhObFZtRnNMblpoYkhWbExDQm9ZVzVrYkdWUWIybHVkSE11YzNSaGNuUXNJR2hoYm1Sc1pWQnZhVzUwY3k1bGJtUXBPMXh1SUNBZ0lDQWdiR1YwSUdoaGJtUnNaVEpRWVhSb0lEMGdjM1puTG1GeVl5aDBhR2x6TG1OcGNtTnNaVmd1WTNndVltRnpaVlpoYkM1MllXeDFaU3dnZEdocGN5NWphWEpqYkdWWUxtTjVMbUpoYzJWV1lXd3VkbUZzZFdVc0lIUm9hWE11WTJseVkyeGxXQzV5TG1KaGMyVldZV3d1ZG1Gc2RXVXNJR2hoYm1Sc1pUSlFiMmx1ZEhNdWMzUmhjblFzSUdoaGJtUnNaVEpRYjJsdWRITXVaVzVrS1R0Y2JseHVJQ0FnSUNBZ2RHaHBjeTVpWVhKWUxuTmxkRUYwZEhKcFluVjBaU2duWkNjc0lHaGhibVJzWlZCaGRHZ3BPMXh1SUNBZ0lDQWdkR2hwY3k1aVlYSllNaTV6WlhSQmRIUnlhV0oxZEdVb0oyUW5MQ0JvWVc1a2JHVXlVR0YwYUNrN1hHNWNibHh1WEc1Y2JseHVJQ0FnSUNBZ2FHRnVaR3hsVUc5cGJuUnpJRDBnZTF4dUlDQWdJQ0FnSUNCemRHRnlkRG9nVFdGMGFDNVFTU294TGpVc1hHNGdJQ0FnSUNBZ0lHVnVaRG9nYldGMGFDNWpiR2x3S0NCdFlYUm9Mbk5qWVd4bEtIa3NNQ3d3TGpVc1RXRjBhQzVRU1NveExqVXNUV0YwYUM1UVNTb3dMalVwSUN3Z1RXRjBhQzVRU1Nvd0xqVXNJRTFoZEdndVVFa3FNUzQxSUNsY2JpQWdJQ0FnSUgwN1hHNGdJQ0FnSUNCb1lXNWtiR1V5VUc5cGJuUnpJRDBnZTF4dUlDQWdJQ0FnSUNCemRHRnlkRG9nVFdGMGFDNVFTU295TGpVc1hHNGdJQ0FnSUNBZ0lHVnVaRG9nYldGMGFDNWpiR2x3S0NCdFlYUm9Mbk5qWVd4bEtIa3NNQzQxTERFc1RXRjBhQzVRU1NveUxqVXNUV0YwYUM1UVNTb3hMalVwSUN3Z1RXRjBhQzVRU1NveExqVXNJRTFoZEdndVVFa3FNaTQxSUNsY2JpQWdJQ0FnSUgwN1hHNWNiaUFnSUNBZ0lHaGhibVJzWlZCaGRHZ2dQU0J6ZG1jdVlYSmpLSFJvYVhNdVkybHlZMnhsV1M1amVDNWlZWE5sVm1Gc0xuWmhiSFZsTENCMGFHbHpMbU5wY21Oc1pWa3VZM2t1WW1GelpWWmhiQzUyWVd4MVpTd2dkR2hwY3k1amFYSmpiR1ZaTG5JdVltRnpaVlpoYkM1MllXeDFaU3dnYUdGdVpHeGxVRzlwYm5SekxuTjBZWEowTENCb1lXNWtiR1ZRYjJsdWRITXVaVzVrS1R0Y2JpQWdJQ0FnSUdoaGJtUnNaVEpRWVhSb0lEMGdjM1puTG1GeVl5aDBhR2x6TG1OcGNtTnNaVmt1WTNndVltRnpaVlpoYkM1MllXeDFaU3dnZEdocGN5NWphWEpqYkdWWkxtTjVMbUpoYzJWV1lXd3VkbUZzZFdVc0lIUm9hWE11WTJseVkyeGxXUzV5TG1KaGMyVldZV3d1ZG1Gc2RXVXNJR2hoYm1Sc1pUSlFiMmx1ZEhNdWMzUmhjblFzSUdoaGJtUnNaVEpRYjJsdWRITXVaVzVrS1R0Y2JseHVJQ0FnSUNBZ2RHaHBjeTVpWVhKWkxuTmxkRUYwZEhKcFluVjBaU2duWkNjc0lHaGhibVJzWlZCaGRHZ3BPMXh1SUNBZ0lDQWdkR2hwY3k1aVlYSlpNaTV6WlhSQmRIUnlhV0oxZEdVb0oyUW5MQ0JvWVc1a2JHVXlVR0YwYUNrN1hHNWNibHh1WEc1Y2JseHVYRzRnSUNBZ0lDQm9ZVzVrYkdWUWIybHVkSE1nUFNCN1hHNGdJQ0FnSUNBZ0lITjBZWEowT2lCTllYUm9MbEJKS2pFdU5TeGNiaUFnSUNBZ0lDQWdaVzVrT2lCdFlYUm9MbU5zYVhBb0lHMWhkR2d1YzJOaGJHVW9laXd3TERBdU5TeE5ZWFJvTGxCSktqRXVOU3hOWVhSb0xsQkpLakF1TlNrZ0xDQk5ZWFJvTGxCSktqQXVOU3dnVFdGMGFDNVFTU294TGpVZ0tWeHVJQ0FnSUNBZ2ZUdGNiaUFnSUNBZ0lHaGhibVJzWlRKUWIybHVkSE1nUFNCN1hHNGdJQ0FnSUNBZ0lITjBZWEowT2lCTllYUm9MbEJKS2pJdU5TeGNiaUFnSUNBZ0lDQWdaVzVrT2lCdFlYUm9MbU5zYVhBb0lHMWhkR2d1YzJOaGJHVW9laXd3TGpVc01TeE5ZWFJvTGxCSktqSXVOU3hOWVhSb0xsQkpLakV1TlNrZ0xDQk5ZWFJvTGxCSktqRXVOU3dnVFdGMGFDNVFTU295TGpVZ0tWeHVJQ0FnSUNBZ2ZUdGNibHh1SUNBZ0lDQWdhR0Z1Wkd4bFVHRjBhQ0E5SUhOMlp5NWhjbU1vZEdocGN5NWphWEpqYkdWYUxtTjRMbUpoYzJWV1lXd3VkbUZzZFdVc0lIUm9hWE11WTJseVkyeGxXaTVqZVM1aVlYTmxWbUZzTG5aaGJIVmxMQ0IwYUdsekxtTnBjbU5zWlZvdWNpNWlZWE5sVm1Gc0xuWmhiSFZsTENCb1lXNWtiR1ZRYjJsdWRITXVjM1JoY25Rc0lHaGhibVJzWlZCdmFXNTBjeTVsYm1RcE8xeHVJQ0FnSUNBZ2FHRnVaR3hsTWxCaGRHZ2dQU0J6ZG1jdVlYSmpLSFJvYVhNdVkybHlZMnhsV2k1amVDNWlZWE5sVm1Gc0xuWmhiSFZsTENCMGFHbHpMbU5wY21Oc1pWb3VZM2t1WW1GelpWWmhiQzUyWVd4MVpTd2dkR2hwY3k1amFYSmpiR1ZhTG5JdVltRnpaVlpoYkM1MllXeDFaU3dnYUdGdVpHeGxNbEJ2YVc1MGN5NXpkR0Z5ZEN3Z2FHRnVaR3hsTWxCdmFXNTBjeTVsYm1RcE8xeHVYRzRnSUNBZ0lDQjBhR2x6TG1KaGNsb3VjMlYwUVhSMGNtbGlkWFJsS0Nka0p5d2dhR0Z1Wkd4bFVHRjBhQ2s3WEc0Z0lDQWdJQ0IwYUdsekxtSmhjbG95TG5ObGRFRjBkSEpwWW5WMFpTZ25aQ2NzSUdoaGJtUnNaVEpRWVhSb0tUdGNibHh1WEc0Z0lDQWdJQ0F2S2x4dVhHNGdJQ0FnSUNCc1pYUWdjRzlwYm5SeldDQTlJSHRjYmlBZ0lDQWdJQ0FnYzNSaGNuUTZJREFzWEc0Z0lDQWdJQ0FnSUdWdVpEb2diV0YwYUM1elkyRnNaU2dnZUN3Z01Dd2dNU3dnTUN3Z1RXRjBhQzVRU1NveUlDbGNiaUFnSUNBZ0lIMDdYRzVjYmlBZ0lDQXZMeUFnWTI5dWMyOXNaUzVzYjJjb2RHaHBjeTVqYVhKamJHVllMbU40TG1KaGMyVldZV3d1ZG1Gc2RXVXBPMXh1WEc0Z0lDQWdJQ0JzWlhRZ2NHRjBhRmdnUFNCemRtY3VZWEpqS0hSb2FYTXVZMmx5WTJ4bFdDNWplQzVpWVhObFZtRnNMblpoYkhWbExDQjBhR2x6TG1OcGNtTnNaVmd1WTNrdVltRnpaVlpoYkM1MllXeDFaU3dnZEdocGN5NWphWEpqYkdWWUxuSXVZbUZ6WlZaaGJDNTJZV3gxWlNveUxDQndiMmx1ZEhOWUxuTjBZWEowTENCd2IybHVkSE5ZTG1WdVpDazdYRzVjYmlBZ0lDQWdJSFJvYVhNdVltRnlXQzV6WlhSQmRIUnlhV0oxZEdVb0oyUW5MSEJoZEdoWUtUc2dLaTljYmx4dUlDQWdJQ0FnTHk5MGFHbHpMblJsZUhSSUxuUmxlSFJEYjI1MFpXNTBJRDBnYldGMGFDNXdjblZ1WlNoNExESXBPMXh1SUNBZ0lDQWdMeTkwYUdsekxuUmxlSFJXTG5SbGVIUkRiMjUwWlc1MElEMGdiV0YwYUM1d2NuVnVaU2g1TERJcE8xeHVJQ0FnSUNBZ0x5OWNiaUFnSUNBdkx5QWdkR2hwY3k1amFYSmpiR1ZZTG5ObGRFRjBkSEpwWW5WMFpTZ25iM0JoWTJsMGVTY3NlQ2s3WEc0Z0lDQWdMeThnSUhSb2FYTXVZMmx5WTJ4bFdTNXpaWFJCZEhSeWFXSjFkR1VvSjI5d1lXTnBkSGtuTEhrcE8xeHVJQ0FnSUM4dklDQjBhR2x6TG1OcGNtTnNaVm91YzJWMFFYUjBjbWxpZFhSbEtDZHZjR0ZqYVhSNUp5eDZLVHRjYmx4dUlDQWdJQ0FnZEdocGN5NWxiV2wwS0NkamFHRnVaMlVuTENCN1hHNGdJQ0FnSUNBZ0lIZzZJSGdzWEc0Z0lDQWdJQ0FnSUhrNklIa3NYRzRnSUNBZ0lDQWdJSG82SUhwY2JpQWdJQ0FnSUgwcE8xeHVYRzRnSUNBZ2ZWeHVYRzRnSUgxY2JseHVJQ0JqYkdsamF5Z3BJSHRjYmlBZ0lDQnBaaUFvZDJsdVpHOTNMa1JsZG1salpVOXlhV1Z1ZEdGMGFXOXVSWFpsYm5RcElIdGNiaUFnSUNBZ0lIUm9hWE11WVdOMGFYWmxJRDBnSVhSb2FYTXVZV04wYVhabE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNCWGFHVjBhR1Z5SUhSb1pTQnBiblJsY21aaFkyVWdhWE1nYjI0Z0tHVnRhWFIwYVc1bklIWmhiSFZsY3lrZ2IzSWdiMlptSUNod1lYVnpaV1FnSmlCdWIzUWdaVzFwZEhScGJtY2dkbUZzZFdWektTNGdVMlYwZEdsdVp5QjBhR2x6SUhCeWIzQmxjblI1SUhkcGJHd2dkWEJrWVhSbElHbDBMbHh1SUNCQWRIbHdaU0I3WW05dmJHVmhibjFjYmlBZ0tpOWNibHh1SUNCblpYUWdZV04wYVhabEtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDloWTNScGRtVTdYRzRnSUgxY2JseHVJQ0J6WlhRZ1lXTjBhWFpsS0c5dUtTQjdYRzRnSUNBZ2RHaHBjeTVmWVdOMGFYWmxJRDBnYjI0N1hHNGdJQ0FnZEdocGN5NWpiMnh2Y2tsdWRHVnlabUZqWlNncE8xeHVJQ0I5WEc1Y2JpQWdZM1Z6ZEc5dFJHVnpkSEp2ZVNncElIdGNiaUFnSUNCM2FXNWtiM2N1Y21WdGIzWmxSWFpsYm5STWFYTjBaVzVsY2lnblpHVjJhV05sYjNKcFpXNTBZWFJwYjI0bkxDQjBhR2x6TG1KdmRXNWtWWEJrWVhSbExDQm1ZV3h6WlNrN1hHNGdJSDFjYmx4dWZWeHVYRzVjYmx4dUx5OGdWMFZDVUVGRFN5QkdUMDlVUlZJZ0x5OWNiaTh2SUM0dmZpOXFjMmhwYm5RdGJHOWhaR1Z5SVM0dmJHbGlMMmx1ZEdWeVptRmpaWE12ZEdsc2RDNXFjeUlzSWlkMWMyVWdjM1J5YVdOMEp6dGNibHh1YkdWMElHUnZiU0E5SUhKbGNYVnBjbVVvSnk0dUwzVjBhV3d2Wkc5dEp5azdYRzVzWlhRZ2JXRjBhQ0E5SUhKbGNYVnBjbVVvSnk0dUwzVjBhV3d2YldGMGFDY3BPMXh1YkdWMElFbHVkR1Z5Wm1GalpTQTlJSEpsY1hWcGNtVW9KeTR1TDJOdmNtVXZhVzUwWlhKbVlXTmxKeWs3WEc1c1pYUWdVMnhwWkdWeVZHVnRjR3hoZEdVZ1BTQnlaWEYxYVhKbEtDY3VMaTlqYjIxd2IyNWxiblJ6TDNOc2FXUmxjblJsYlhCc1lYUmxKeWs3WEc1c1pYUWdkRzkxWTJnZ1BTQnlaWEYxYVhKbEtDY3VMaTkxZEdsc0wzUnZkV05vSnlrN1hHNWNibHh1WEc1amJHRnpjeUJUYVc1bmJHVlRiR2xrWlhJZ1pYaDBaVzVrY3lCVGJHbGtaWEpVWlcxd2JHRjBaU0I3WEc1Y2JpQWdZMjl1YzNSeWRXTjBiM0lvS1NCN1hHNWNiaUFnSUNCc1pYUWdiM0IwYVc5dWN5QTlJRnNuYzJOaGJHVW5MQ2QyWVd4MVpTZGRPMXh1WEc0Z0lDQWdiR1YwSUdSbFptRjFiSFJ6SUQwZ2UxeHVJQ0FnSUNBZ0ozTnBlbVVuT2lCYk1USXdMREl3WFN4Y2JpQWdJQ0FnSUNkdmNtbGxiblJoZEdsdmJpYzZJQ2QyWlhKMGFXTmhiQ2NzWEc0Z0lDQWdJQ0FuYlc5a1pTYzZJQ2RoWW5OdmJIVjBaU2NzWEc0Z0lDQWdJQ0FuYzJOaGJHVW5PaUJiTUN3eFhTeGNiaUFnSUNBZ0lDZHpkR1Z3SnpvZ01DeGNiaUFnSUNBZ0lDZDJZV3gxWlNjNklEQXNYRzRnSUNBZ0lDQW5hR0Z6UzI1dllpYzZJSFJ5ZFdWY2JpQWdJQ0I5TzF4dVhHNGdJQ0FnYzNWd1pYSW9ZWEpuZFcxbGJuUnpMRzl3ZEdsdmJuTXNaR1ZtWVhWc2RITXBPMXh1WEc1Y2JpQWdJQ0F2S2lCbGRtVnVkSE1nS2k5Y2JseHVJQ0FnSUdsbUlDZ2hkRzkxWTJndVpYaHBjM1J6S1NCN1hHNWNiaUFnSUNBZ0lIUm9hWE11WTJ4cFkyc2dQU0FvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWJYVnNkR2x6Ykdsa1pYSXVhVzUwWlhKaFkzUnBibWNnUFNCMGNuVmxPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtMTFiSFJwYzJ4cFpHVnlMbWx1ZEdWeWNHOXNZWFJwYjI0Z1BTQjdYRzRnSUNBZ0lDQWdJQ0FnYVc1a1pYZzZJSFJvYVhNdWFXNWtaWGdzWEc0Z0lDQWdJQ0FnSUNBZ2RtRnNkV1U2SUhSb2FYTXVkbUZzZFdWY2JpQWdJQ0FnSUNBZ2ZUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1a2IzZHVLQ2s3WEc0Z0lDQWdJQ0FnSUhSb2FYTXViWFZzZEdsemJHbGtaWEl1ZG1Gc2RXVnpXM1JvYVhNdWFXNWtaWGhkSUQwZ2RHaHBjeTUyWVd4MVpUdGNiaUFnSUNBZ0lIMDdYRzRnSUNBZ0lDQjBhR2x6TG1Wc1pXMWxiblF1WVdSa1JYWmxiblJNYVhOMFpXNWxjaWduYlc5MWMyVnZkbVZ5Snl3Z0tHVXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdWJYVnNkR2x6Ykdsa1pYSXVhVzUwWlhKaFkzUnBibWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvSVhSb2FYTXViMlptYzJWMEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbTltWm5ObGRDQTlJR1J2YlM1bWFXNWtVRzl6YVhScGIyNG9kR2hwY3k1bGJHVnRaVzUwS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NXRiM1Z6WlNBOUlHUnZiUzVzYjJOaGRHVk5iM1Z6WlNobExIUm9hWE11YjJabWMyVjBLVHRjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbVJ2ZDI0b0tUdGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxtMTFiSFJwYzJ4cFpHVnlMblpoYkhWbGMxdDBhR2x6TG1sdVpHVjRYU0E5SUhSb2FYTXVkbUZzZFdVN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0hSb2FYTXViWFZzZEdsemJHbGtaWEl1YVc1MFpYSndiMnhoZEdsdmJpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR1JwYzNSaGJtTmxJRDBnVFdGMGFDNWhZbk1vZEdocGN5NXRkV3gwYVhOc2FXUmxjaTVwYm5SbGNuQnZiR0YwYVc5dUxtbHVaR1Y0TFhSb2FYTXVhVzVrWlhncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tDQmthWE4wWVc1alpTQStJREVnS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUd4bGRDQnNiM2NnUFNCTllYUm9MbTFwYmloMGFHbHpMbTExYkhScGMyeHBaR1Z5TG1sdWRHVnljRzlzWVhScGIyNHVhVzVrWlhnc2RHaHBjeTVwYm1SbGVDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0JvYVdkb0lEMGdUV0YwYUM1dFlYZ29kR2hwY3k1dGRXeDBhWE5zYVdSbGNpNXBiblJsY25CdmJHRjBhVzl1TG1sdVpHVjRMSFJvYVhNdWFXNWtaWGdwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2JHOTNWbUZzZFdVZ1BTQjBhR2x6TG0xMWJIUnBjMnhwWkdWeUxuTnNhV1JsY25OYmJHOTNYUzUyWVd4MVpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2hwWjJoV1lXeDFaU0E5SUhSb2FYTXViWFZzZEdsemJHbGtaWEl1YzJ4cFpHVnljMXRvYVdkb1hTNTJZV3gxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWm05eUlDaHNaWFFnYVQxc2IzYzdhVHhvYVdkb08ya3JLeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2FYTXViWFZzZEdsemJHbGtaWEl1YzJ4cFpHVnljMXRwWFM1MllXeDFaU0E5SUcxaGRHZ3VhVzUwWlhKd0tDQW9hUzFzYjNjcEwyUnBjM1JoYm1ObExDQnNiM2RXWVd4MVpTd2dhR2xuYUZaaGJIVmxJQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElITnRiMjkwYUdWa1ZtRnNkV1VnUFNCMGFHbHpMbTExYkhScGMyeHBaR1Z5TG5Oc2FXUmxjbk5iYVYwdWRtRnNkV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NXRkV3gwYVhOc2FXUmxjaTUyWVd4MVpYTmJhVjBnUFNCemJXOXZkR2hsWkZaaGJIVmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdWJYVnNkR2x6Ykdsa1pYSXVkWEJrWVhSbEtHa3NjMjF2YjNSb1pXUldZV3gxWlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxtMTFiSFJwYzJ4cFpHVnlMbWx1ZEdWeWNHOXNZWFJwYjI0Z1BTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcGJtUmxlRG9nZEdocGN5NXBibVJsZUN4Y2JpQWdJQ0FnSUNBZ0lDQWdJSFpoYkhWbE9pQjBhR2x6TG5aaGJIVmxYRzRnSUNBZ0lDQWdJQ0FnZlR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZTazdYRzVjYmx4dUlDQWdJQ0FnZEdocGN5NXRiM1psSUQwZ0tDa2dQVDRnZTF4dUlDQWdJQ0FnZlR0Y2JpQWdJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNWhaR1JGZG1WdWRFeHBjM1JsYm1WeUtDZHRiM1Z6WlcxdmRtVW5MQ0FvWlNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTV0ZFd4MGFYTnNhV1JsY2k1cGJuUmxjbUZqZEdsdVp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDZ2hkR2hwY3k1dlptWnpaWFFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdWIyWm1jMlYwSUQwZ1pHOXRMbVpwYm1SUWIzTnBkR2x2YmloMGFHbHpMbVZzWlcxbGJuUXBPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG0xdmRYTmxJRDBnWkc5dExteHZZMkYwWlUxdmRYTmxLR1VzZEdocGN5NXZabVp6WlhRcE8xeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWMyeHBaR1VvS1R0Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG0xMWJIUnBjMnhwWkdWeUxuWmhiSFZsYzF0MGFHbHpMbWx1WkdWNFhTQTlJSFJvYVhNdWRtRnNkV1U3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgwcE8xeHVYRzVjYmlBZ0lDQWdJSFJvYVhNdWNtVnNaV0Z6WlNBOUlDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV0ZFd4MGFYTnNhV1JsY2k1cGJuUmxjbUZqZEdsdVp5QTlJR1poYkhObE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG0xMWJIUnBjMnhwWkdWeUxtbHVkR1Z5Y0c5c1lYUnBiMjRnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJSDA3WEc0Z0lDQWdJQ0IwYUdsekxtVnNaVzFsYm5RdVlXUmtSWFpsYm5STWFYTjBaVzVsY2lnbmJXOTFjMlYxY0Njc0lDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdWJYVnNkR2x6Ykdsa1pYSXVhVzUwWlhKaFkzUnBibWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG5Wd0tDazdYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NXRkV3gwYVhOc2FXUmxjaTVwYm5SbGNuQnZiR0YwYVc5dUlEMGdabUZzYzJVN1hHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1dGRXeDBhWE5zYVdSbGNpNTJZV3gxWlhOYmRHaHBjeTVwYm1SbGVGMGdQU0IwYUdsekxuWmhiSFZsTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lIUm9hWE11Wld4bGJXVnVkQzVoWkdSRmRtVnVkRXhwYzNSbGJtVnlLQ2R0YjNWelpXOTFkQ2NzSUNncElEMCtJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11YlhWc2RHbHpiR2xrWlhJdWFXNTBaWEpoWTNScGJtY3BJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMblZ3S0NrN1hHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1dGRXeDBhWE5zYVdSbGNpNTJZV3gxWlhOYmRHaHBjeTVwYm1SbGVGMGdQU0IwYUdsekxuWmhiSFZsTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOUtUdGNibHh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11WTNWemRHOXRVM1I1YkdVb0tUdGNiaUFnZlZ4dVhHNGdJR04xYzNSdmJWTjBlV3hsS0NrZ2UxeHVYRzRnSUNBZ0x5b2djM1I1YkdVZ1kyaGhibWRsY3lBcUwxeHVYRzRnSUNBZ2RHaHBjeTVpWVhJdWMyVjBRWFIwY21saWRYUmxLQ2Q0Snl3d0tUdGNiaUFnSUNCMGFHbHpMbUpoY2k1elpYUkJkSFJ5YVdKMWRHVW9KM1J5WVc1elptOXliU2NzSjNSeVlXNXpiR0YwWlNnd0xEQXBKeWs3WEc0Z0lDQWdkR2hwY3k1aVlYSXVjMlYwUVhSMGNtbGlkWFJsS0NkeWVDY3NNQ2s3SUM4dklHTnZjbTVsY2lCeVlXUnBkWE5jYmlBZ0lDQjBhR2x6TG1KaGNpNXpaWFJCZEhSeWFXSjFkR1VvSjNKNUp5d3dLVHRjYmlBZ0lDQjBhR2x6TG1KaGNpNXpaWFJCZEhSeWFXSjFkR1VvSjNkcFpIUm9KeXgwYUdsekxuZHBaSFJvS1R0Y2JpQWdJQ0IwYUdsekxtSmhjaTV6WlhSQmRIUnlhV0oxZEdVb0oyaGxhV2RvZENjc2RHaHBjeTVvWldsbmFIUXBPMXh1WEc0Z0lDQWdkR2hwY3k1bWFXeHNZbUZ5TG5ObGRFRjBkSEpwWW5WMFpTZ25lQ2NzTUNrN1hHNGdJQ0FnZEdocGN5NW1hV3hzWW1GeUxuTmxkRUYwZEhKcFluVjBaU2duZEhKaGJuTm1iM0p0Snl3bmRISmhibk5zWVhSbEtEQXNNQ2tuS1R0Y2JpQWdJQ0IwYUdsekxtWnBiR3hpWVhJdWMyVjBRWFIwY21saWRYUmxLQ2R5ZUNjc01DazdJQzh2SUdOdmNtNWxjaUJ5WVdScGRYTmNiaUFnSUNCMGFHbHpMbVpwYkd4aVlYSXVjMlYwUVhSMGNtbGlkWFJsS0NkeWVTY3NNQ2s3WEc0Z0lDQWdkR2hwY3k1bWFXeHNZbUZ5TG5ObGRFRjBkSEpwWW5WMFpTZ25kMmxrZEdnbkxIUm9hWE11ZDJsa2RHZ3BPMXh1SUNBZ0lIUm9hWE11Wm1sc2JHSmhjaTV6WlhSQmRIUnlhV0oxZEdVb0oyaGxhV2RvZENjc2RHaHBjeTVvWldsbmFIUXBPMXh1WEc0Z0lIMWNibHh1ZlZ4dVhHNHZLaXBjYmlvZ1RYVnNkR2x6Ykdsa1pYSmNiaXBjYmlvZ1FHUmxjMk55YVhCMGFXOXVJRTExYkhScGMyeHBaR1Z5WEc0cVhHNHFJRUJrWlcxdklEeHpjR0Z1SUc1bGVIVnpMWFZwUFZ3aWJYVnNkR2x6Ykdsa1pYSmNJajQ4TDNOd1lXNCtYRzRxWEc0cUlFQmxlR0Z0Y0d4bFhHNHFJSFpoY2lCdGRXeDBhWE5zYVdSbGNpQTlJRzVsZHlCT1pYaDFjeTVOZFd4MGFYTnNhV1JsY2lnbkkzUmhjbWRsZENjcFhHNHFYRzRxSUVCbGVHRnRjR3hsWEc0cUlIWmhjaUJ0ZFd4MGFYTnNhV1JsY2lBOUlHNWxkeUJPWlhoMWN5NU5kV3gwYVhOc2FXUmxjaWduSTNSaGNtZGxkQ2NzZTF4dUtpQWdKM05wZW1Vbk9pQmJNakF3TERFd01GMHNYRzRxSUNBbmJuVnRZbVZ5VDJaVGJHbGtaWEp6SnpvZ05TeGNiaW9nSUNkdGFXNG5PaUF3TEZ4dUtpQWdKMjFoZUNjNklERXNYRzRxSUNBbmMzUmxjQ2M2SURBc1hHNHFJQ0FuZG1Gc2RXVnpKem9nV3pBdU55d3dMamNzTUM0M0xEQXVOeXd3TGpkZFhHNHFJSDBwWEc0cVhHNHFJRUJ2ZFhSd2RYUmNiaW9nWTJoaGJtZGxYRzRxSUVacGNtVnpJR0Z1ZVNCMGFXMWxJSFJvWlNCcGJuUmxjbVpoWTJVbmN5QjJZV3gxWlNCamFHRnVaMlZ6TGlBOFluSStYRzRxSUZSb1pTQmxkbVZ1ZENCa1lYUmhJR0Z1SUc5aWFtVmpkQ0JqYjI1MFlXbHVhVzVuSUR4cFBtbHVaR1Y0UEM5cFBpQmhibVFnUEdrK2RtRnNkV1U4TDJrK0lIQnliM0JsY25ScFpYTmNiaXBjYmlvZ1FHOTFkSEIxZEdWNFlXMXdiR1ZjYmlvZ2JYVnNkR2x6Ykdsa1pYSXViMjRvSjJOb1lXNW5aU2NzWm5WdVkzUnBiMjRvZGlrZ2UxeHVLaUFnSUdOdmJuTnZiR1V1Ykc5bktIWXBPMXh1S2lCOUtWeHVLbHh1S2k5Y2JseHVMeXBjYmxCeWIzQmxjblJwWlhOY2JpNTJZV3gxWlhOY2JseHVLaTljYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnWTJ4aGMzTWdUWFZzZEdsemJHbGtaWElnWlhoMFpXNWtjeUJKYm5SbGNtWmhZMlVnZTF4dVhHNGdJR052Ym5OMGNuVmpkRzl5S0NrZ2UxeHVYRzRnSUNBZ2JHVjBJRzl3ZEdsdmJuTWdQU0JiSjNaaGJIVmxKMTA3WEc1Y2JpQWdJQ0JzWlhRZ1pHVm1ZWFZzZEhNZ1BTQjdYRzRnSUNBZ0lDQW5jMmw2WlNjNklGc3lNREFzTVRBd1hTeGNiaUFnSUNBZ0lDZHVkVzFpWlhKUFpsTnNhV1JsY25Nbk9pQTFMRnh1SUNBZ0lDQWdKMjFwYmljNklEQXNYRzRnSUNBZ0lDQW5iV0Y0SnpvZ01TeGNiaUFnSUNBZ0lDZHpkR1Z3SnpvZ01DeGNiaUFnSUNBZ0lDZDJZV3gxWlhNbk9pQmJNQzQzTERBdU55d3dMamNzTUM0M0xEQXVOMTFjYmlBZ0lDQjlPMXh1WEc0Z0lDQWdjM1Z3WlhJb1lYSm5kVzFsYm5SekxHOXdkR2x2Ym5Nc1pHVm1ZWFZzZEhNcE8xeHVYRzRnSUNBZ2RHaHBjeTVmYm5WdFltVnlUMlpUYkdsa1pYSnpJRDBnZEdocGN5NXpaWFIwYVc1bmN5NXVkVzFpWlhKUFpsTnNhV1JsY25NN1hHNGdJQ0FnZEdocGN5NTJZV3gxWlhNZ1BTQjBhR2x6TG5ObGRIUnBibWR6TG5aaGJIVmxjenRjYmx4dUlDQWdJSFJvYVhNdWMyeHBaR1Z5Y3lBOUlGdGRPMXh1WEc0Z0lDQWdkR2hwY3k1cGJuUmxjbUZqZEdsdVp5QTlJR1poYkhObE8xeHVYRzRnSUNBZ2RHaHBjeTVwYm1sMEtDazdYRzVjYmlBZ2ZWeHVYRzRnSUdKMWFXeGtSbkpoYldVb0tTQjdYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBJRDBnWkc5amRXMWxiblF1WTNKbFlYUmxSV3hsYldWdWRDZ25aR2wySnlrN1hHNGdJQ0FnZEdocGN5NXdZWEpsYm5RdVlYQndaVzVrUTJocGJHUW9kR2hwY3k1bGJHVnRaVzUwS1R0Y2JpQWdmVnh1WEc0Z0lHSjFhV3hrU1c1MFpYSm1ZV05sS0NrZ2UxeHVYRzRnSUNBZ2JHVjBJRzFwYmlBOUlIUm9hWE11YzJWMGRHbHVaM011YldsdU8xeHVJQ0FnSUd4bGRDQnRZWGdnUFNCMGFHbHpMbk5sZEhScGJtZHpMbTFoZUR0Y2JpQWdJQ0JzWlhRZ2MzUmxjQ0E5SUhSb2FYTXVjMlYwZEdsdVozTXVjM1JsY0R0Y2JseHVJQ0FnSUdsbUlDaDBhR2x6TG5Oc2FXUmxjbk11YkdWdVozUm9LU0I3WEc0Z0lDQWdJQ0J0YVc0Z1BTQjBhR2x6TG5Oc2FXUmxjbk5iTUYwdWJXbHVPMXh1SUNBZ0lDQWdiV0Y0SUQwZ2RHaHBjeTV6Ykdsa1pYSnpXekJkTG0xaGVEdGNiaUFnSUNBZ0lITjBaWEFnUFNCMGFHbHpMbk5zYVdSbGNuTmJNRjB1YzNSbGNEdGNiaUFnSUNCOVhHNWNiaUFnSUNCMGFHbHpMbk5zYVdSbGNuTWdQU0JiWFR0Y2JseHVJQ0FnSUdadmNpQW9iR1YwSUdrOU1EdHBQSFJvYVhNdVgyNTFiV0psY2s5bVUyeHBaR1Z5Y3p0cEt5c3BJSHRjYmlBZ0lDQWdJR3hsZENCamIyNTBZV2x1WlhJZ1BTQmtiMk4xYldWdWRDNWpjbVZoZEdWRmJHVnRaVzUwS0NkemNHRnVKeWs3WEc1Y2JpQWdJQ0FnSUd4bGRDQnpiR2xrWlhJZ1BTQnVaWGNnVTJsdVoyeGxVMnhwWkdWeUtHTnZiblJoYVc1bGNpd2dlMXh1SUNBZ0lDQWdJQ0FnSUhOallXeGxPaUJiYldsdUxHMWhlRjBzWEc0Z0lDQWdJQ0FnSUNBZ2MzUmxjRG9nYzNSbGNDeGNiaUFnSUNBZ0lDQWdJQ0J0YjJSbE9pQW5ZV0p6YjJ4MWRHVW5MRnh1SUNBZ0lDQWdJQ0FnSUc5eWFXVnVkR0YwYVc5dU9pQW5kbVZ5ZEdsallXd25MRnh1SUNBZ0lDQWdJQ0FnSUhaaGJIVmxPaUIwYUdsekxuWmhiSFZsYzF0cFhTeGNiaUFnSUNBZ0lDQWdJQ0JvWVhOTGJtOWlPaUJtWVd4elpTeGNiaUFnSUNBZ0lDQWdJQ0JqYjIxd2IyNWxiblE2SUhSeWRXVXNYRzRnSUNBZ0lDQWdJSDBzZEdocGN5NTFjR1JoZEdVdVltbHVaQ2gwYUdsekxHa3BLVHRjYmlBZ0lDQWdJSE5zYVdSbGNpNXRkV3gwYVhOc2FXUmxjaUE5SUhSb2FYTTdYRzVjYmlBZ0lDQWdJSE5zYVdSbGNpNXBibVJsZUNBOUlHazdYRzRnSUNBZ0lDQnBaaUFvZEc5MVkyZ3VaWGhwYzNSektTQjdYRzRnSUNBZ0lDQWdJSE5zYVdSbGNpNWlZWEl1YVc1a1pYZ2dQU0JwTzF4dUlDQWdJQ0FnSUNCemJHbGtaWEl1Wm1sc2JHSmhjaTVwYm1SbGVDQTlJR2s3WEc0Z0lDQWdJQ0FnSUhOc2FXUmxjaTV3Y21WRGJHbGpheUE5SUhOc2FXUmxjaTV3Y21WTmIzWmxJRDBnYzJ4cFpHVnlMbkJ5WlZKbGJHVmhjMlVnUFNBb0tTQTlQaUI3ZlR0Y2JpQWdJQ0FnSUNBZ2MyeHBaR1Z5TG1Oc2FXTnJJRDBnYzJ4cFpHVnlMbTF2ZG1VZ1BTQnpiR2xrWlhJdWNtVnNaV0Z6WlNBOUlDZ3BJRDArSUh0OU8xeHVJQ0FnSUNBZ0lDQnpiR2xrWlhJdWNISmxWRzkxWTJnZ1BTQnpiR2xrWlhJdWNISmxWRzkxWTJoTmIzWmxJRDBnYzJ4cFpHVnlMbkJ5WlZSdmRXTm9VbVZzWldGelpTQTlJQ2dwSUQwK0lIdDlPMXh1SUNBZ0lDQWdJQ0J6Ykdsa1pYSXVkRzkxWTJnZ1BTQnpiR2xrWlhJdWRHOTFZMmhOYjNabElEMGdjMnhwWkdWeUxuUnZkV05vVW1Wc1pXRnpaU0E5SUNncElEMCtJSHQ5TzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCMGFHbHpMbk5zYVdSbGNuTXVjSFZ6YUNoemJHbGtaWElwTzF4dUlDQWdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExtRndjR1Z1WkVOb2FXeGtLR052Ym5SaGFXNWxjaWs3WEc1Y2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0hSdmRXTm9MbVY0YVhOMGN5a2dlMXh1SUNBZ0lDQWdkR2hwY3k1aFpHUlViM1ZqYUV4cGMzUmxibVZ5Y3lncE8xeHVJQ0FnSUgxY2JseHVJQ0I5WEc1Y2JpQWdZMjlzYjNKSmJuUmxjbVpoWTJVb0tTQjdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FUMHdPMms4ZEdocGN5NXpiR2xrWlhKekxteGxibWQwYUR0cEt5c3BJSHRjYmlBZ0lDQWdJSFJvYVhNdWMyeHBaR1Z5YzF0cFhTNWpiMnh2Y25NZ1BTQjBhR2x6TG1OdmJHOXljenRjYmlBZ0lDQWdJSFJvYVhNdWMyeHBaR1Z5YzF0cFhTNWpiMnh2Y2tsdWRHVnlabUZqWlNncE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lITnBlbVZKYm5SbGNtWmhZMlVvS1NCN1hHNWNiaUFnSUNCc1pYUWdjMnhwWkdWeVYybGtkR2dnUFNCMGFHbHpMbmRwWkhSb0lDOGdkR2hwY3k1emJHbGtaWEp6TG14bGJtZDBhRHRjYmlBZ0lDQnNaWFFnYzJ4cFpHVnlTR1ZwWjJoMElEMGdkR2hwY3k1b1pXbG5hSFE3WEc1Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwUFRBN2FUeDBhR2x6TG5Oc2FXUmxjbk11YkdWdVozUm9PMmtyS3lrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV6Ykdsa1pYSnpXMmxkTG5KbGMybDZaU2h6Ykdsa1pYSlhhV1IwYUN4emJHbGtaWEpJWldsbmFIUXBPMXh1SUNBZ0lDQWdkR2hwY3k1emJHbGtaWEp6VzJsZExtTjFjM1J2YlZOMGVXeGxLQ2s3WEc0Z0lDQWdmVnh1WEc1Y2JpQWdmVnh1WEc0Z0lIVndaR0YwWlNocGJtUmxlQ3gyWVd4MVpTa2dlMXh1SUNBZ0lIUm9hWE11WlcxcGRDZ25ZMmhoYm1kbEp5eDdYRzRnSUNBZ0lDQW5hVzVrWlhnbk9pQnBibVJsZUN4Y2JpQWdJQ0FnSUNkMllXeDFaU2M2SUhaaGJIVmxYRzRnSUNBZ2ZTazdYRzRnSUgxY2JseHVJQ0JoWkdSVWIzVmphRXhwYzNSbGJtVnljeWdwSUh0Y2JseHVJQ0FnSUhSb2FYTXVjSEpsUTJ4cFkyc2dQU0IwYUdsekxuQnlaVTF2ZG1VZ1BTQjBhR2x6TG5CeVpWSmxiR1ZoYzJVZ1BTQW9LU0E5UGlCN2ZUdGNiaUFnSUNCMGFHbHpMbU5zYVdOcklEMGdkR2hwY3k1dGIzWmxJRDBnZEdocGN5NXlaV3hsWVhObElEMGdLQ2tnUFQ0Z2UzMDdYRzRnSUNBZ2RHaHBjeTV3Y21WVWIzVmphQ0E5SUhSb2FYTXVjSEpsVkc5MVkyaE5iM1psSUQwZ2RHaHBjeTV3Y21WVWIzVmphRkpsYkdWaGMyVWdQU0FvS1NBOVBpQjdmVHRjYmlBZ0lDQjBhR2x6TG5SdmRXTm9JRDBnZEdocGN5NTBiM1ZqYUUxdmRtVWdQU0IwYUdsekxuUnZkV05vVW1Wc1pXRnpaU0E5SUNncElEMCtJSHQ5TzF4dVhHNGdJQ0FnZEdocGN5NWpkWEp5Wlc1MFJXeGxiV1Z1ZENBOUlHWmhiSE5sTzF4dVhHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJb0ozUnZkV05vYzNSaGNuUW5MQ0FvWlNrZ1BUNGdlMXh1SUNBZ0lDQWdiR1YwSUdWc1pXMWxiblFnUFNCa2IyTjFiV1Z1ZEM1bGJHVnRaVzUwUm5KdmJWQnZhVzUwS0dVdWRHRnlaMlYwVkc5MVkyaGxjMXN3WFM1amJHbGxiblJZTEdVdWRHRnlaMlYwVkc5MVkyaGxjMXN3WFM1amJHbGxiblJaS1R0Y2JpQWdJQ0FnSUd4bGRDQnpiR2xrWlhJZ1BTQjBhR2x6TG5Oc2FXUmxjbk5iWld4bGJXVnVkQzVwYm1SbGVGMDdYRzRnSUNBZ0lDQnBaaUFvSVhOc2FXUmxjaTV2Wm1aelpYUXBJSHRjYmlBZ0lDQWdJQ0FnYzJ4cFpHVnlMbTltWm5ObGRDQTlJR1J2YlM1bWFXNWtVRzl6YVhScGIyNG9jMnhwWkdWeUxtVnNaVzFsYm5RcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2MyeHBaR1Z5TG0xdmRYTmxJRDBnWkc5dExteHZZMkYwWlUxdmRYTmxLR1VzYzJ4cFpHVnlMbTltWm5ObGRDazdYRzRnSUNBZ0lDQnpiR2xrWlhJdVpHOTNiaWdwTzF4dUlDQWdJQ0FnZEdocGN5NWpkWEp5Wlc1MFJXeGxiV1Z1ZENBOUlHVnNaVzFsYm5RdWFXNWtaWGc3WEc0Z0lDQWdJQ0JsTG5CeVpYWmxiblJFWldaaGRXeDBLQ2s3WEc0Z0lDQWdJQ0JsTG5OMGIzQlFjbTl3WVdkaGRHbHZiaWdwTzF4dUlDQWdJSDBwTzF4dVhHNGdJQ0FnZEdocGN5NWxiR1Z0Wlc1MExtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJb0ozUnZkV05vYlc5MlpTY3NJQ2hsS1NBOVBpQjdYRzRnSUNBZ0lDQnNaWFFnWld4bGJXVnVkQ0E5SUdSdlkzVnRaVzUwTG1Wc1pXMWxiblJHY205dFVHOXBiblFvWlM1MFlYSm5aWFJVYjNWamFHVnpXekJkTG1Oc2FXVnVkRmdzWlM1MFlYSm5aWFJVYjNWamFHVnpXekJkTG1Oc2FXVnVkRmtwTzF4dUlDQWdJQ0FnYkdWMElITnNhV1JsY2lBOUlIUm9hWE11YzJ4cFpHVnljMXRsYkdWdFpXNTBMbWx1WkdWNFhUdGNiaUFnSUNBZ0lHbG1JQ2doYzJ4cFpHVnlMbTltWm5ObGRDa2dlMXh1SUNBZ0lDQWdJQ0J6Ykdsa1pYSXViMlptYzJWMElEMGdaRzl0TG1acGJtUlFiM05wZEdsdmJpaHpiR2xrWlhJdVpXeGxiV1Z1ZENrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCemJHbGtaWEl1Ylc5MWMyVWdQU0JrYjIwdWJHOWpZWFJsVFc5MWMyVW9aU3h6Ykdsa1pYSXViMlptYzJWMEtUdGNiaUFnSUNBZ0lHbG1JQ2hsYkdWdFpXNTBMbWx1WkdWNElUMDlkR2hwY3k1amRYSnlaVzUwUld4bGJXVnVkQ2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9kR2hwY3k1amRYSnlaVzUwUld4bGJXVnVkQ0ErUFNBd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnYkdWMElIQmhjM1J6Ykdsa1pYSWdQU0IwYUdsekxuTnNhV1JsY25OYmRHaHBjeTVqZFhKeVpXNTBSV3hsYldWdWRGMDdYRzRnSUNBZ0lDQWdJQ0FnY0dGemRITnNhV1JsY2k1MWNDZ3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhOc2FXUmxjaTVrYjNkdUtDazdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnpiR2xrWlhJdWMyeHBaR1VvS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhSb2FYTXVZM1Z5Y21WdWRFVnNaVzFsYm5RZ1BTQmxiR1Z0Wlc1MExtbHVaR1Y0TzF4dUlDQWdJQ0FnWlM1d2NtVjJaVzUwUkdWbVlYVnNkQ2dwTzF4dUlDQWdJQ0FnWlM1emRHOXdVSEp2Y0dGbllYUnBiMjRvS1R0Y2JpQWdJQ0I5S1R0Y2JseHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNWhaR1JGZG1WdWRFeHBjM1JsYm1WeUtDZDBiM1ZqYUdWdVpDY3NJQ2hsS1NBOVBpQjdYRzRnSUNBZ0lDQXZMeUJ1YnlCMGIzVmphR1Z6SUhSdklHTmhiR04xYkdGMFpTQmlaV05oZFhObElHNXZibVVnY21WdFlXbHVhVzVuWEc0Z0lDQWdJQ0JzWlhRZ2MyeHBaR1Z5SUQwZ2RHaHBjeTV6Ykdsa1pYSnpXM1JvYVhNdVkzVnljbVZ1ZEVWc1pXMWxiblJkTzF4dUlDQWdJQ0FnYzJ4cFpHVnlMblZ3S0NrN1hHNGdJQ0FnSUNCMGFHbHpMbWx1ZEdWeVlXTjBhVzVuSUQwZ1ptRnNjMlU3WEc0Z0lDQWdJQ0IwYUdsekxtTjFjbkpsYm5SRmJHVnRaVzUwSUQwZ1ptRnNjMlU3WEc0Z0lDQWdJQ0JsTG5CeVpYWmxiblJFWldaaGRXeDBLQ2s3WEc0Z0lDQWdJQ0JsTG5OMGIzQlFjbTl3WVdkaGRHbHZiaWdwTzF4dUlDQWdJSDBwTzF4dVhHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ1IyVjBJRzl5SUhObGRDQjBhR1VnYm5WdFltVnlJRzltSUhOc2FXUmxjbk5jYmlBZ1FIUjVjR1VnZTA1MWJXSmxjbjFjYmlBZ0tpOWNiaUFnWjJWMElHNTFiV0psY2s5bVUyeHBaR1Z5Y3lncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NXpiR2xrWlhKekxteGxibWQwYUR0Y2JpQWdmVnh1WEc0Z0lITmxkQ0J1ZFcxaVpYSlBabE5zYVdSbGNuTW9kaWtnZTF4dUlDQWdJR2xtSUNoMlBUMDlkR2hwY3k1emJHbGtaWEp6TG14bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lIMWNiaUFnSUNCMGFHbHpMbk5zYVdSbGNuTXVabTl5UldGamFDZ29jMnhwWkdWeUtUMCtlMXh1SUNBZ0lDQWdjMnhwWkdWeUxtUmxjM1J5YjNrb0tUdGNiaUFnSUNCOUtUdGNiaUFnSUNCMGFHbHpMbVZ0Y0hSNUtDazdYRzRnSUNBZ2RHaHBjeTVmYm5WdFltVnlUMlpUYkdsa1pYSnpJRDBnZGp0Y2JpQWdJQ0IwYUdsekxtSjFhV3hrU1c1MFpYSm1ZV05sS0NrN1hHNGdJSDFjYmx4dVhHNWNiaUFnTHlvcVhHNGdJRXh2ZDJWeUlHeHBiV2wwSUc5bUlIUm9aU0J0ZFd4MGFYTnNhV1JsY2lkeklHOTFkSEIxZENCeVlXNW5aVnh1SUNCQWRIbHdaU0I3Ym5WdFltVnlmVnh1SUNCQVpYaGhiWEJzWlNCdGRXeDBhWE5zYVdSbGNpNXRhVzRnUFNBeE1EQXdPMXh1SUNBcUwxeHVJQ0JuWlhRZ2JXbHVLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5Oc2FXUmxjbk5iTUYwdWJXbHVPMXh1SUNCOVhHNGdJSE5sZENCdGFXNG9kaWtnZTF4dUlDQWdJSFJvYVhNdWMyeHBaR1Z5Y3k1bWIzSkZZV05vS0NoemJHbGtaWElwUFQ1N1hHNGdJQ0FnSUNCemJHbGtaWEl1YldsdUlEMGdkanRjYmlBZ0lDQjlLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0JWY0hCbGNpQnNhVzFwZENCdlppQjBhR1VnYlhWc2RHbHpiR2xrWlhJbmN5QnZkWFJ3ZFhRZ2NtRnVaMlZjYmlBZ1FIUjVjR1VnZTI1MWJXSmxjbjFjYmlBZ1FHVjRZVzF3YkdVZ2JYVnNkR2x6Ykdsa1pYSXViV0Y0SUQwZ01UQXdNRHRjYmlBZ0tpOWNiaUFnWjJWMElHMWhlQ2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1emJHbGtaWEp6V3pCZExtMWhlRHRjYmlBZ2ZWeHVJQ0J6WlhRZ2JXRjRLSFlwSUh0Y2JpQWdJQ0IwYUdsekxuTnNhV1JsY25NdVptOXlSV0ZqYUNnb2MyeHBaR1Z5S1QwK2UxeHVJQ0FnSUNBZ2MyeHBaR1Z5TG0xaGVDQTlJSFk3WEc0Z0lDQWdmU2s3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnVkdobElHbHVZM0psYldWdWRDQjBhR0YwSUhSb1pTQnRkV3gwYVhOc2FXUmxjaWR6SUhaaGJIVmxJR05vWVc1blpYTWdZbmt1WEc0Z0lFQjBlWEJsSUh0dWRXMWlaWEo5WEc0Z0lFQmxlR0Z0Y0d4bElHMTFiSFJwYzJ4cFpHVnlMbk4wWlhBZ1BTQTFPMXh1SUNBcUwxeHVJQ0JuWlhRZ2MzUmxjQ2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1emJHbGtaWEp6V3pCZExuTjBaWEE3WEc0Z0lIMWNiaUFnYzJWMElITjBaWEFvZGlrZ2UxeHVJQ0FnSUhSb2FYTXVjMnhwWkdWeWN5NW1iM0pGWVdOb0tDaHpiR2xrWlhJcFBUNTdYRzRnSUNBZ0lDQnpiR2xrWlhJdWMzUmxjQ0E5SUhZN1hHNGdJQ0FnZlNrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ1UyVjBJSFJvWlNCMllXeDFaU0J2WmlCaGJpQnBibVJwZG1sa2RXRnNJSE5zYVdSbGNseHVJQ0JBY0dGeVlXMGdhVzVrWlhnZ2UyNTFiV0psY24wZ1UyeHBaR1Z5SUdsdVpHVjRYRzRnSUVCd1lYSmhiU0IyWVd4MVpTQjdiblZ0WW1WeWZTQk9aWGNnYzJ4cFpHVnlJSFpoYkhWbFhHNGdJRUJsZUdGdGNHeGxYRzRnSUM4dklGTmxkQ0IwYUdVZ1ptbHljM1FnYzJ4cFpHVnlJSFJ2SUhaaGJIVmxJREF1TlZ4dUlDQnRkV3gwYVhOc2FXUmxjaTV6WlhSVGJHbGtaWElvTUN3d0xqVXBYRzRnSUNvdlhHNGdJSE5sZEZOc2FXUmxjaWhwYm1SbGVDeDJZV3gxWlNrZ2UxeHVJQ0FnSUhSb2FYTXVjMnhwWkdWeWMxdHBibVJsZUYwdWRtRnNkV1VnUFNCMllXeDFaVHRjYmlBZ0lDQjBhR2x6TG1WdGFYUW9KMk5vWVc1blpTY3NlMXh1SUNBZ0lDQWdKMmx1WkdWNEp6b2dhVzVrWlhnc1hHNGdJQ0FnSUNBbmRtRnNkV1VuT2lCMllXeDFaVnh1SUNBZ0lIMHBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJRk5sZENCMGFHVWdkbUZzZFdVZ2IyWWdZV3hzSUhOc2FXUmxjbk1nWVhRZ2IyNWpaUzRnU1dZZ2RHaGxJSE5wZW1VZ2IyWWdkR2hsSUdsdWNIVjBJR0Z5Y21GNUlHUnZaWE1nYm05MElHMWhkR05vSUhSb1pTQmpkWEp5Wlc1MElHNTFiV0psY2lCdlppQnpiR2xrWlhKekxDQjBhR1VnZG1Gc2RXVWdZWEp5WVhrZ2QybHNiQ0J5WlhCbFlYUWdkVzUwYVd3Z1lXeHNJSE5zYVdSbGNuTWdhR0YyWlNCaVpXVnVJSE5sZEM0Z1NTNWxMaUJoYmlCcGJuQjFkQ0JoY25KaGVTQnZaaUJzWlc1bmRHZ2dNU0IzYVd4c0lITmxkQ0JoYkd3Z2MyeHBaR1Z5Y3lCMGJ5QjBhR0YwSUhaaGJIVmxMbHh1SUNCQWNHRnlZVzBnZG1Gc2RXVnpJSHRCY25KaGVYMGdRV3hzSUhOc2FXUmxjaUIyWVd4MVpYTmNiaUFnUUdWNFlXMXdiR1ZjYmlBZ2JYVnNkR2x6Ykdsa1pYSXVjMlYwUVd4c1UyeHBaR1Z5Y3loYk1DNHlMREF1TXl3d0xqUXNNQzQxTERBdU5sMHBYRzRnSUNvdlhHNGdJSE5sZEVGc2JGTnNhV1JsY25Nb2RtRnNkV1Z6S1NCN1hHNGdJQ0FnZEdocGN5NTJZV3gxWlhNZ1BTQjJZV3gxWlhNN1hHNGdJQ0FnZEdocGN5NXpiR2xrWlhKekxtWnZja1ZoWTJnb0tITnNhV1JsY2l4cEtUMCtlMXh1SUNBZ0lDQWdjMnhwWkdWeUxuWmhiSFZsSUQwZ2RtRnNkV1Z6VzJrbGRtRnNkV1Z6TG14bGJtZDBhRjA3WEc0Z0lDQWdJQ0IwYUdsekxtVnRhWFFvSjJOb1lXNW5aU2NzZTF4dUlDQWdJQ0FnSUNBbmFXNWtaWGduT2lCcExGeHVJQ0FnSUNBZ0lDQW5kbUZzZFdVbk9pQnpiR2xrWlhJdWRtRnNkV1ZjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJSDBwTzF4dUlDQjlYRzVjYm4xY2JseHVYRzVjYmk4dklGZEZRbEJCUTBzZ1JrOVBWRVZTSUM4dlhHNHZMeUF1TDM0dmFuTm9hVzUwTFd4dllXUmxjaUV1TDJ4cFlpOXBiblJsY21aaFkyVnpMMjExYkhScGMyeHBaR1Z5TG1weklpd2lKM1Z6WlNCemRISnBZM1FuTzF4dVhHNXNaWFFnYzNabklEMGdjbVZ4ZFdseVpTZ25MaTR2ZFhScGJDOXpkbWNuS1R0Y2JteGxkQ0JKYm5SbGNtWmhZMlVnUFNCeVpYRjFhWEpsS0NjdUxpOWpiM0psTDJsdWRHVnlabUZqWlNjcE8xeHViR1YwSUZOMFpYQWdQU0J5WlhGMWFYSmxLQ2N1TGk5dGIyUmxiSE12YzNSbGNDY3BPMXh1YVcxd2IzSjBJQ29nWVhNZ1NXNTBaWEpoWTNScGIyNGdabkp2YlNBbkxpNHZkWFJwYkM5cGJuUmxjbUZqZEdsdmJpYzdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR05zWVhOeklGTnNhV1JsY2xSbGJYQnNZWFJsSUdWNGRHVnVaSE1nU1c1MFpYSm1ZV05sSUh0Y2JseHVJQ0JqYjI1emRISjFZM1J2Y2loaGNtZHpMRzl3ZEdsdmJuTXNaR1ZtWVhWc2RITXBJSHRjYmx4dUlDQWdJSE4xY0dWeUtHRnlaM01zYjNCMGFXOXVjeXhrWldaaGRXeDBjeWs3WEc1Y2JpQWdJQ0IwYUdsekxtOXlhV1Z1ZEdGMGFXOXVJRDBnZEdocGN5NXpaWFIwYVc1bmN5NXZjbWxsYm5SaGRHbHZianRjYmx4dUlDQXZMeUFnZEdocGN5NXRiMlJsSUQwZ2RHaHBjeTV6WlhSMGFXNW5jeTV0YjJSbE8xeHVYRzRnSUNBZ2RHaHBjeTVvWVhOTGJtOWlJRDBnZEdocGN5NXpaWFIwYVc1bmN5NW9ZWE5MYm05aU8xeHVYRzRnSUNBZ0x5OGdkR2hwY3k1emRHVndJSE5vYjNWc1pDQmxkbVZ1ZEhWaGJHeDVJR0psSUdkbGRDOXpaWFJjYmlBZ0lDQXZMeUIxY0dSaGRHbHVaeUJwZENCM2FXeHNJSFZ3WkdGMFpTQjBhR1VnWDNaaGJIVmxJSE4wWlhBZ2JXOWtaV3hjYmlBZ0x5OGdJSFJvYVhNdWMzUmxjQ0E5SUhSb2FYTXVjMlYwZEdsdVozTXVjM1JsY0RzZ0x5OGdabXh2WVhSY2JseHVJQ0FnSUhSb2FYTXVYM1poYkhWbElEMGdibVYzSUZOMFpYQW9kR2hwY3k1elpYUjBhVzVuY3k1elkyRnNaVnN3WFN3Z2RHaHBjeTV6WlhSMGFXNW5jeTV6WTJGc1pWc3hYU3dnZEdocGN5NXpaWFIwYVc1bmN5NXpkR1Z3TENCMGFHbHpMbk5sZEhScGJtZHpMblpoYkhWbEtUdGNibHh1SUNBZ0lIUm9hWE11YVc1cGRDZ3BPMXh1WEc0Z0lDQWdkR2hwY3k1d2IzTnBkR2x2YmlBOUlHNWxkeUJKYm5SbGNtRmpkR2x2Ymk1SVlXNWtiR1VvZEdocGN5NXpaWFIwYVc1bmN5NXRiMlJsTEhSb2FYTXViM0pwWlc1MFlYUnBiMjRzV3pBc2RHaHBjeTUzYVdSMGFGMHNXM1JvYVhNdWFHVnBaMmgwTERCZEtUdGNiaUFnSUNCMGFHbHpMbkJ2YzJsMGFXOXVMblpoYkhWbElEMGdkR2hwY3k1ZmRtRnNkV1V1Ym05eWJXRnNhWHBsWkR0Y2JseHVJQ0FnSUhSb2FYTXVkbUZzZFdVZ1BTQjBhR2x6TGw5MllXeDFaUzUyWVd4MVpUdGNibHh1SUNBZ0lIUm9hWE11WlcxcGRDZ25ZMmhoYm1kbEp5eDBhR2x6TG5aaGJIVmxLVHRjYmx4dUlDQjlYRzVjYmlBZ1luVnBiR1JKYm5SbGNtWmhZMlVvS1NCN1hHNWNiaUFnSUNCMGFHbHpMbUpoY2lBOUlITjJaeTVqY21WaGRHVW9KM0psWTNRbktUdGNiaUFnSUNCMGFHbHpMbVpwYkd4aVlYSWdQU0J6ZG1jdVkzSmxZWFJsS0NkeVpXTjBKeWs3WEc0Z0lDQWdkR2hwY3k1cmJtOWlJRDBnYzNabkxtTnlaV0YwWlNnblkybHlZMnhsSnlrN1hHNWNiaUFnSUNCMGFHbHpMbVZzWlcxbGJuUXVZWEJ3Wlc1a1EyaHBiR1FvZEdocGN5NWlZWElwTzF4dUlDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1aGNIQmxibVJEYUdsc1pDaDBhR2x6TG1acGJHeGlZWElwTzF4dUlDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1aGNIQmxibVJEYUdsc1pDaDBhR2x6TG10dWIySXBPMXh1WEc0Z0lDQWdkR2hwY3k1emFYcGxTVzUwWlhKbVlXTmxLQ2s3WEc1Y2JseHVYRzRnSUgxY2JseHVJQ0J6YVhwbFNXNTBaWEptWVdObEtDa2dlMXh1WEc1Y2JpQWdJQ0JwWmlBb0lYUm9hWE11YzJWMGRHbHVaM011YjNKcFpXNTBZWFJwYjI0cElIdGNiaUFnSUNBZ0lHbG1JQ2gwYUdsekxuZHBaSFJvSUR3Z2RHaHBjeTVvWldsbmFIUXBJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXZjbWxsYm5SaGRHbHZiaUE5SUNkMlpYSjBhV05oYkNjN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbTl5YVdWdWRHRjBhVzl1SUQwZ0oyaHZjbWw2YjI1MFlXd25PMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lHeGxkQ0I0TENCNUxDQjNMQ0JvTENCaVlYSlBabVp6WlhRc0lHTnZjbTVsY2xKaFpHbDFjenRjYmlBZ0lDQjBhR2x6TG10dWIySkVZWFJoSUQwZ2UxeHVJQ0FnSUNBZ2JHVjJaV3c2SURBc1hHNGdJQ0FnSUNCeU9pQXdYRzRnSUNBZ2ZUdGNibHh1SUNBZ0lHbG1JQ2gwYUdsekxtOXlhV1Z1ZEdGMGFXOXVJRDA5UFNBbmRtVnlkR2xqWVd3bktTQjdYRzRnSUNBZ0lDQjBhR2x6TG5Sb2FXTnJibVZ6Y3lBOUlIUm9hWE11ZDJsa2RHZ2dMeUF5TzF4dUlDQWdJRngwZUNBOUlIUm9hWE11ZDJsa2RHZ3ZNanRjYmlBZ0lDQmNkSGtnUFNBd08xeHVJQ0FnSUZ4MGR5QTlJSFJvYVhNdWRHaHBZMnR1WlhOek8xeHVJQ0FnSUZ4MGFDQTlJSFJvYVhNdWFHVnBaMmgwTzF4dUlDQWdJQ0FnZEdocGN5NXJibTlpUkdGMFlTNXlJRDBnZEdocGN5NTBhR2xqYTI1bGMzTWdLaUF3TGpnN1hHNGdJQ0FnWEhSMGFHbHpMbXR1YjJKRVlYUmhMbXhsZG1Wc0lEMGdhQzEwYUdsekxtNXZjbTFoYkdsNlpXUXFhRHRjYmlBZ0lDQWdJR0poY2s5bVpuTmxkQ0E5SUNkMGNtRnVjMnhoZEdVb0p5dDBhR2x6TG5Sb2FXTnJibVZ6Y3lvb0xURXBMeklySnl3d0tTYzdYRzRnSUNBZ0lDQmpiM0p1WlhKU1lXUnBkWE1nUFNCM0x6STdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhSb2FYTXVkR2hwWTJ0dVpYTnpJRDBnZEdocGN5NW9aV2xuYUhRZ0x5QXlPMXh1SUNBZ0lGeDBlQ0E5SURBN1hHNGdJQ0FnWEhSNUlEMGdkR2hwY3k1b1pXbG5hSFF2TWp0Y2JpQWdJQ0JjZEhjZ1BTQjBhR2x6TG5kcFpIUm9PMXh1SUNBZ0lGeDBhQ0E5SUhSb2FYTXVkR2hwWTJ0dVpYTnpPMXh1SUNBZ0lDQWdkR2hwY3k1cmJtOWlSR0YwWVM1eUlEMGdkR2hwY3k1MGFHbGphMjVsYzNNZ0tpQXdMamc3WEc0Z0lDQWdYSFIwYUdsekxtdHViMkpFWVhSaExteGxkbVZzSUQwZ2RHaHBjeTV1YjNKdFlXeHBlbVZrS25jN1hHNGdJQ0FnSUNCaVlYSlBabVp6WlhRZ1BTQW5kSEpoYm5Oc1lYUmxLREFzSnl0MGFHbHpMblJvYVdOcmJtVnpjeW9vTFRFcEx6SXJKeWtuTzF4dUlDQWdJQ0FnWTI5eWJtVnlVbUZrYVhWeklEMGdhQzh5TzF4dUlDQWdJSDFjYmx4dUlDQWdJSFJvYVhNdVltRnlMbk5sZEVGMGRISnBZblYwWlNnbmVDY3NlQ2s3WEc0Z0lDQWdkR2hwY3k1aVlYSXVjMlYwUVhSMGNtbGlkWFJsS0NkNUp5eDVLVHRjYmlBZ0lDQjBhR2x6TG1KaGNpNXpaWFJCZEhSeWFXSjFkR1VvSjNSeVlXNXpabTl5YlNjc1ltRnlUMlptYzJWMEtUdGNiaUFnSUNCMGFHbHpMbUpoY2k1elpYUkJkSFJ5YVdKMWRHVW9KM0o0Snl4amIzSnVaWEpTWVdScGRYTXBPeUF2THlCamIzSnVaWElnY21Ga2FYVnpYRzRnSUNBZ2RHaHBjeTVpWVhJdWMyVjBRWFIwY21saWRYUmxLQ2R5ZVNjc1kyOXlibVZ5VW1Ga2FYVnpLVHRjYmlBZ0lDQjBhR2x6TG1KaGNpNXpaWFJCZEhSeWFXSjFkR1VvSjNkcFpIUm9KeXgzS1R0Y2JpQWdJQ0IwYUdsekxtSmhjaTV6WlhSQmRIUnlhV0oxZEdVb0oyaGxhV2RvZENjc2FDazdYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NXZjbWxsYm5SaGRHbHZiaUE5UFQwZ0ozWmxjblJwWTJGc0p5a2dlMXh1SUNBZ0lDQWdkR2hwY3k1bWFXeHNZbUZ5TG5ObGRFRjBkSEpwWW5WMFpTZ25lQ2NzZUNrN1hHNGdJQ0FnSUNCMGFHbHpMbVpwYkd4aVlYSXVjMlYwUVhSMGNtbGlkWFJsS0NkNUp5eDBhR2x6TG10dWIySkVZWFJoTG14bGRtVnNLVHRjYmlBZ0lDQWdJSFJvYVhNdVptbHNiR0poY2k1elpYUkJkSFJ5YVdKMWRHVW9KM2RwWkhSb0p5eDNLVHRjYmlBZ0lDQWdJSFJvYVhNdVptbHNiR0poY2k1elpYUkJkSFJ5YVdKMWRHVW9KMmhsYVdkb2RDY3NhQzEwYUdsekxtdHViMkpFWVhSaExteGxkbVZzS1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdkR2hwY3k1bWFXeHNZbUZ5TG5ObGRFRjBkSEpwWW5WMFpTZ25lQ2NzTUNrN1hHNGdJQ0FnSUNCMGFHbHpMbVpwYkd4aVlYSXVjMlYwUVhSMGNtbGlkWFJsS0NkNUp5eDVLVHRjYmlBZ0lDQWdJSFJvYVhNdVptbHNiR0poY2k1elpYUkJkSFJ5YVdKMWRHVW9KM2RwWkhSb0p5eDBhR2x6TG10dWIySkVZWFJoTG14bGRtVnNLVHRjYmlBZ0lDQWdJSFJvYVhNdVptbHNiR0poY2k1elpYUkJkSFJ5YVdKMWRHVW9KMmhsYVdkb2RDY3NhQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lIUm9hWE11Wm1sc2JHSmhjaTV6WlhSQmRIUnlhV0oxZEdVb0ozUnlZVzV6Wm05eWJTY3NZbUZ5VDJabWMyVjBLVHRjYmlBZ0lDQjBhR2x6TG1acGJHeGlZWEl1YzJWMFFYUjBjbWxpZFhSbEtDZHllQ2NzWTI5eWJtVnlVbUZrYVhWektUdGNiaUFnSUNCMGFHbHpMbVpwYkd4aVlYSXVjMlYwUVhSMGNtbGlkWFJsS0NkeWVTY3NZMjl5Ym1WeVVtRmthWFZ6S1R0Y2JseHVJQ0FnSUdsbUlDaDBhR2x6TG05eWFXVnVkR0YwYVc5dUlEMDlQU0FuZG1WeWRHbGpZV3duS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbXR1YjJJdWMyVjBRWFIwY21saWRYUmxLQ2RqZUNjc2VDazdYRzRnSUNBZ0lDQjBhR2x6TG10dWIySXVjMlYwUVhSMGNtbGlkWFJsS0NkamVTY3NkR2hwY3k1cmJtOWlSR0YwWVM1c1pYWmxiQ2s3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lIUm9hWE11YTI1dllpNXpaWFJCZEhSeWFXSjFkR1VvSjJONEp5eDBhR2x6TG10dWIySkVZWFJoTG14bGRtVnNLVHRjYmlBZ0lDQWdJSFJvYVhNdWEyNXZZaTV6WlhSQmRIUnlhV0oxZEdVb0oyTjVKeXg1S1R0Y2JpQWdJQ0I5WEc0Z0lDQWdkR2hwY3k1cmJtOWlMbk5sZEVGMGRISnBZblYwWlNnbmNpY3NkR2hwY3k1cmJtOWlSR0YwWVM1eUtUdGNibHh1WEc0Z0lDQWdhV1lnS0hSb2FYTXVjRzl6YVhScGIyNHBJSHRjYmlBZ0lDQWdJSFJvYVhNdWNHOXphWFJwYjI0dWNtVnphWHBsS0Zzd0xIUm9hWE11ZDJsa2RHaGRMRnQwYUdsekxtaGxhV2RvZEN3d1hTazdYRzRnSUNBZ2ZWeHVYRzRnSUgxY2JseHVJQ0JqYjJ4dmNrbHVkR1Z5Wm1GalpTZ3BJSHRjYmx4dUlDQWdJSFJvYVhNdVltRnlMbk5sZEVGMGRISnBZblYwWlNnblptbHNiQ2NzSUhSb2FYTXVZMjlzYjNKekxtWnBiR3dwTzF4dUlDQWdJSFJvYVhNdVptbHNiR0poY2k1elpYUkJkSFJ5YVdKMWRHVW9KMlpwYkd3bkxDQjBhR2x6TG1OdmJHOXljeTVoWTJObGJuUXBPMXh1SUNBZ0lIUm9hWE11YTI1dllpNXpaWFJCZEhSeWFXSjFkR1VvSjJacGJHd25MQ0IwYUdsekxtTnZiRzl5Y3k1aFkyTmxiblFwTzF4dUlDQWdJR2xtSUNnaGRHaHBjeTVvWVhOTGJtOWlLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtdHViMkl1YzJWMFFYUjBjbWxpZFhSbEtDZG1hV3hzSnl3bmJtOXVaU2NwTzF4dUlDQWdJSDFjYmx4dUlDQjlYRzVjYmlBZ2NtVnVaR1Z5S0NrZ2UxeHVJQ0FnSUdsbUlDZ2hkR2hwY3k1amJHbGphMlZrS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbXR1YjJKRVlYUmhMbklnUFNCMGFHbHpMblJvYVdOcmJtVnpjeW93TGpjMU8xeHVJQ0FnSUgxY2JpQWdJQ0IwYUdsekxtdHViMkl1YzJWMFFYUjBjbWxpZFhSbEtDZHlKeXgwYUdsekxtdHViMkpFWVhSaExuSXBPMXh1WEc0Z0lDQWdhV1lnS0hSb2FYTXViM0pwWlc1MFlYUnBiMjRnUFQwOUlDZDJaWEowYVdOaGJDY3BJSHRjYmlBZ0lDQWdJQ0IwYUdsekxtdHViMkpFWVhSaExteGxkbVZzSUQwZ2RHaHBjeTVmZG1Gc2RXVXVibTl5YldGc2FYcGxaQ3AwYUdsekxtaGxhV2RvZER0Y2JpQWdJQ0FnSUNCMGFHbHpMbXR1YjJJdWMyVjBRWFIwY21saWRYUmxLQ2RqZVNjc2RHaHBjeTVvWldsbmFIUWdMU0IwYUdsekxtdHViMkpFWVhSaExteGxkbVZzS1R0Y2JpQWdJQ0FnSUNCMGFHbHpMbVpwYkd4aVlYSXVjMlYwUVhSMGNtbGlkWFJsS0NkNUp5eDBhR2x6TG1obGFXZG9kQ0F0SUhSb2FYTXVhMjV2WWtSaGRHRXViR1YyWld3cE8xeHVJQ0FnSUNBZ0lIUm9hWE11Wm1sc2JHSmhjaTV6WlhSQmRIUnlhV0oxZEdVb0oyaGxhV2RvZENjc2RHaHBjeTVyYm05aVJHRjBZUzVzWlhabGJDazdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNCMGFHbHpMbXR1YjJKRVlYUmhMbXhsZG1Wc0lEMGdkR2hwY3k1ZmRtRnNkV1V1Ym05eWJXRnNhWHBsWkNwMGFHbHpMbmRwWkhSb08xeHVJQ0FnSUNBZ0lIUm9hWE11YTI1dllpNXpaWFJCZEhSeWFXSjFkR1VvSjJONEp5eDBhR2x6TG10dWIySkVZWFJoTG14bGRtVnNLVHRjYmlBZ0lDQWdJQ0IwYUdsekxtWnBiR3hpWVhJdWMyVjBRWFIwY21saWRYUmxLQ2Q0Snl3d0tUdGNiaUFnSUNBZ0lDQjBhR2x6TG1acGJHeGlZWEl1YzJWMFFYUjBjbWxpZFhSbEtDZDNhV1IwYUNjc2RHaHBjeTVyYm05aVJHRjBZUzVzWlhabGJDazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdaRzkzYmlncElIdGNiaUFnSUNCMGFHbHpMbU5zYVdOclpXUWdQU0IwY25WbE8xeHVJQ0FnSUhSb2FYTXVhMjV2WWtSaGRHRXVjaUE5SUhSb2FYTXVkR2hwWTJ0dVpYTnpLakF1T1R0Y2JpQWdJQ0IwYUdsekxuQnZjMmwwYVc5dUxtRnVZMmh2Y2lBOUlIUm9hWE11Ylc5MWMyVTdYRzRnSUNBZ2RHaHBjeTV6Ykdsa1pTZ3BPMXh1SUNCOVhHNWNiaUFnYzJ4cFpHVW9LU0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVZMnhwWTJ0bFpDa2dlMXh1SUNBZ0lDQWdkR2hwY3k1d2IzTnBkR2x2Ymk1MWNHUmhkR1VvZEdocGN5NXRiM1Z6WlNrN1hHNGdJQ0FnSUNCMGFHbHpMblpoYkhWbElEMGdkR2hwY3k1ZmRtRnNkV1V1ZFhCa1lYUmxUbTl5YldGc0tDQjBhR2x6TG5CdmMybDBhVzl1TG5aaGJIVmxJQ2s3WEc0Z0lDQWdJQ0IwYUdsekxtVnRhWFFvSjJOb1lXNW5aU2NzZEdocGN5NTJZV3gxWlNrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2RYQW9LU0I3WEc0Z0lDQWdkR2hwY3k1amJHbGphMlZrSUQwZ1ptRnNjMlU3WEc0Z0lDQWdkR2hwY3k1eVpXNWtaWElvS1R0Y2JpQWdmVnh1WEc0Z0lHZGxkQ0J1YjNKdFlXeHBlbVZrS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxsOTJZV3gxWlM1dWIzSnRZV3hwZW1Wa08xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lGUm9aU0J6Ykdsa1pYSW5jeUJqZFhKeVpXNTBJSFpoYkhWbExpQkpaaUJ6WlhRZ2JXRnVkV0ZzYkhrc0lIZHBiR3dnZFhCa1lYUmxJSFJvWlNCcGJuUmxjbVpoWTJVZ1lXNWtJSFJ5YVdkblpYSWdkR2hsSUc5MWRIQjFkQ0JsZG1WdWRDNWNiaUFnUUhSNWNHVWdlMjUxYldKbGNuMWNiaUFnUUdWNFlXMXdiR1VnYzJ4cFpHVnlMblpoYkhWbElEMGdNVEE3WEc0Z0lDb3ZYRzRnSUdkbGRDQjJZV3gxWlNncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWZkbUZzZFdVdWRtRnNkV1U3WEc0Z0lIMWNiaUFnYzJWMElIWmhiSFZsS0hZcElIdGNiaUFnSUNCMGFHbHpMbDkyWVd4MVpTNTFjR1JoZEdVb2RpazdYRzRnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiaTUyWVd4MVpTQTlJSFJvYVhNdVgzWmhiSFZsTG01dmNtMWhiR2w2WldRN1hHNGdJQ0FnZEdocGN5NXlaVzVrWlhJb0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQk1iM2RsY2lCc2FXMXBkQ0J2WmlCMGFHVWdjMnhwWkdWeWN5ZHpJRzkxZEhCMWRDQnlZVzVuWlZ4dUlDQkFkSGx3WlNCN2JuVnRZbVZ5ZlZ4dUlDQkFaWGhoYlhCc1pTQnpiR2xrWlhJdWJXbHVJRDBnTVRBd01EdGNiaUFnS2k5Y2JpQWdaMlYwSUcxcGJpZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVmZG1Gc2RXVXViV2x1TzF4dUlDQjlYRzRnSUhObGRDQnRhVzRvZGlrZ2UxeHVJQ0FnSUhSb2FYTXVYM1poYkhWbExtMXBiaUE5SUhZN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ1ZYQndaWElnYkdsdGFYUWdiMllnZEdobElITnNhV1JsY2lkeklHOTFkSEIxZENCeVlXNW5aVnh1SUNCQWRIbHdaU0I3Ym5WdFltVnlmVnh1SUNCQVpYaGhiWEJzWlNCemJHbGtaWEl1YldGNElEMGdNVEF3TUR0Y2JpQWdLaTljYmlBZ1oyVjBJRzFoZUNncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWZkbUZzZFdVdWJXRjRPMXh1SUNCOVhHNGdJSE5sZENCdFlYZ29kaWtnZTF4dUlDQWdJSFJvYVhNdVgzWmhiSFZsTG0xaGVDQTlJSFk3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnVkdobElHbHVZM0psYldWdWRDQjBhR0YwSUhSb1pTQnpiR2xrWlhJbmN5QjJZV3gxWlNCamFHRnVaMlZ6SUdKNUxseHVJQ0JBZEhsd1pTQjdiblZ0WW1WeWZWeHVJQ0JBWlhoaGJYQnNaU0J6Ykdsa1pYSXVjM1JsY0NBOUlEVTdYRzRnSUNvdlhHNGdJR2RsZENCemRHVndLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TGw5MllXeDFaUzV6ZEdWd08xeHVJQ0I5WEc0Z0lITmxkQ0J6ZEdWd0tIWXBJSHRjYmlBZ0lDQjBhR2x6TGw5MllXeDFaUzV6ZEdWd0lEMGdkanRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0JCWW5OdmJIVjBaU0J0YjJSbElDaHpiR2xrWlhJbmN5QjJZV3gxWlNCcWRXMXdjeUIwYnlCdGIzVnpaU0JqYkdsamF5QndiM05wZEdsdmJpa2diM0lnY21Wc1lYUnBkbVVnYlc5a1pTQW9iVzkxYzJVZ1pISmhaeUJqYUdGdVoyVnpJSFpoYkhWbElISmxiR0YwYVhabElIUnZJR2wwY3lCamRYSnlaVzUwSUhCdmMybDBhVzl1S1M0Z1JHVm1ZWFZzZERvZ1hDSnlaV3hoZEdsMlpWd2lMbHh1SUNCQWRIbHdaU0I3YzNSeWFXNW5mVnh1SUNCQVpYaGhiWEJzWlNCemJHbGtaWEl1Ylc5a1pTQTlJRndpY21Wc1lYUnBkbVZjSWp0Y2JpQWdLaTljYmlBZ1oyVjBJRzF2WkdVb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVjRzl6YVhScGIyNHViVzlrWlR0Y2JpQWdmVnh1SUNCelpYUWdiVzlrWlNoMktTQjdYRzRnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiaTV0YjJSbElEMGdkanRjYmlBZ2ZWeHVYRzVjYm4xY2JseHVYRzVjYmk4dklGZEZRbEJCUTBzZ1JrOVBWRVZTSUM4dlhHNHZMeUF1TDM0dmFuTm9hVzUwTFd4dllXUmxjaUV1TDJ4cFlpOWpiMjF3YjI1bGJuUnpMM05zYVdSbGNuUmxiWEJzWVhSbExtcHpJaXdpSjNWelpTQnpkSEpwWTNRbk8xeHVYRzVzWlhRZ2MzWm5JRDBnY21WeGRXbHlaU2duTGk0dmRYUnBiQzl6ZG1jbktUdGNibXhsZENCdFlYUm9JRDBnY21WeGRXbHlaU2duTGk0dmRYUnBiQzl0WVhSb0p5azdYRzVzWlhRZ1NXNTBaWEptWVdObElEMGdjbVZ4ZFdseVpTZ25MaTR2WTI5eVpTOXBiblJsY21aaFkyVW5LVHRjYm14bGRDQlRkR1Z3SUQwZ2NtVnhkV2x5WlNnbkxpNHZiVzlrWld4ekwzTjBaWEFuS1R0Y2JtbHRjRzl5ZENBcUlHRnpJRWx1ZEdWeVlXTjBhVzl1SUdaeWIyMGdKeTR1TDNWMGFXd3ZhVzUwWlhKaFkzUnBiMjRuTzF4dVhHNHZLaXBjYmlvZ1VHRnVYRzRxWEc0cUlFQmtaWE5qY21sd2RHbHZiaUJUZEdWeVpXOGdZM0p2YzNObVlXUmxjaTVjYmlwY2Jpb2dRR1JsYlc4Z1BITndZVzRnYm1WNGRYTXRkV2s5WENKd1lXNWNJajQ4TDNOd1lXNCtYRzRxWEc0cUlFQmxlR0Z0Y0d4bFhHNHFJSFpoY2lCd1lXNGdQU0J1WlhjZ1RtVjRkWE11VUdGdUtDY2pkR0Z5WjJWMEp5bGNiaXBjYmlvZ1FHOTFkSEIxZEZ4dUtpQmphR0Z1WjJWY2Jpb2dSbWx5WlhNZ1lXNTVJSFJwYldVZ2RHaGxJR2x1ZEdWeVptRmpaU2R6SUhaaGJIVmxJR05vWVc1blpYTXVJRHhpY2o1Y2Jpb2dWR2hsSUdWMlpXNTBJR1JoZEdFZ2FYTWdZVzRnYjJKcVpXTjBJR052Ym5SaGFXNXBibWNnZEdobElHbHVkR1Z5Wm1GalpTZHpJRHhwUG5aaGJIVmxQQzlwUGlBb0xURWdkRzhnTVNrc0lHRnpJSGRsYkd3Z1lYTWdQR2srVER3dmFUNGdZVzVrSUR4cFBsSThMMmsrSUdGdGNHeHBkSFZrWlNCMllXeDFaWE1nS0RBdE1Ta2dabTl5SUd4bFpuUWdZVzVrSUhKcFoyaDBJSE53WldGclpYSnpMQ0JqWVd4amRXeGhkR1ZrSUdKNUlHRWdjM0YxWVhKbExYSnZiM1FnWTNKdmMzTm1ZV1JsSUdGc1oyOXlhWFJvYlM1Y2JpcGNiaW9nUUc5MWRIQjFkR1Y0WVcxd2JHVmNiaW9nY0dGdUxtOXVLQ2RqYUdGdVoyVW5MR1oxYm1OMGFXOXVLSFlwSUh0Y2Jpb2dJQ0JqYjI1emIyeGxMbXh2WnloMktUdGNiaW9nZlNsY2JpcGNiaXBjYmlvdlhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHTnNZWE56SUZCaGJpQmxlSFJsYm1SeklFbHVkR1Z5Wm1GalpTQjdYRzVjYmlBZ1kyOXVjM1J5ZFdOMGIzSW9LU0I3WEc1Y2JpQWdJQ0JzWlhRZ2IzQjBhVzl1Y3lBOUlGc25jMk5oYkdVbkxDZDJZV3gxWlNkZE8xeHVYRzRnSUNBZ2JHVjBJR1JsWm1GMWJIUnpJRDBnZTF4dUlDQWdJQ0FnSjNOcGVtVW5PaUJiTVRJd0xESXdYU3hjYmlBZ0lDQWdJQ2R2Y21sbGJuUmhkR2x2YmljNklDZG9iM0pwZW05dWRHRnNKeXhjYmlBZ0lDQWdJQ2R0YjJSbEp6b2dKM0psYkdGMGFYWmxKeXhjYmlBZ0lDQWdJQ2R6WTJGc1pTYzZJRnN0TVN3eFhTeGNiaUFnSUNBZ0lDZHpkR1Z3SnpvZ01DeGNiaUFnSUNBZ0lDZDJZV3gxWlNjNklEQXNYRzRnSUNBZ0lDQW5hR0Z6UzI1dllpYzZJSFJ5ZFdWY2JpQWdJQ0I5TzF4dVhHNGdJQ0FnYzNWd1pYSW9ZWEpuZFcxbGJuUnpMRzl3ZEdsdmJuTXNaR1ZtWVhWc2RITXBPMXh1WEc0Z0lDQWdkR2hwY3k1dmNtbGxiblJoZEdsdmJpQTlJSFJvYVhNdWMyVjBkR2x1WjNNdWIzSnBaVzUwWVhScGIyNDdYRzVjYmlBZ0lDQjBhR2x6TG0xdlpHVWdQU0IwYUdsekxuTmxkSFJwYm1kekxtMXZaR1U3WEc1Y2JpQWdJQ0IwYUdsekxtaGhjMHR1YjJJZ1BTQjBhR2x6TG5ObGRIUnBibWR6TG1oaGMwdHViMkk3WEc1Y2JpQWdJQ0F2THlCMGFHbHpMbk4wWlhBZ2MyaHZkV3hrSUdWMlpXNTBkV0ZzYkhrZ1ltVWdaMlYwTDNObGRGeHVJQ0FnSUM4dklIVndaR0YwYVc1bklHbDBJSGRwYkd3Z2RYQmtZWFJsSUhSb1pTQmZkbUZzZFdVZ2MzUmxjQ0J0YjJSbGJGeHVJQ0FnSUhSb2FYTXVjM1JsY0NBOUlIUm9hWE11YzJWMGRHbHVaM011YzNSbGNEc2dMeThnWm14dllYUmNibHh1SUNBZ0lIUm9hWE11WDNaaGJIVmxJRDBnYm1WM0lGTjBaWEFvZEdocGN5NXpaWFIwYVc1bmN5NXpZMkZzWlZzd1hTd2dkR2hwY3k1elpYUjBhVzVuY3k1elkyRnNaVnN4WFN3Z2RHaHBjeTV6WlhSMGFXNW5jeTV6ZEdWd0xDQjBhR2x6TG5ObGRIUnBibWR6TG5aaGJIVmxLVHRjYmx4dUlDQWdJSFJvYVhNdWFXNXBkQ2dwTzF4dVhHNGdJQ0FnZEdocGN5NXdiM05wZEdsdmJpQTlJRzVsZHlCSmJuUmxjbUZqZEdsdmJpNUlZVzVrYkdVb2RHaHBjeTV0YjJSbExIUm9hWE11YjNKcFpXNTBZWFJwYjI0c1d6QXNkR2hwY3k1M2FXUjBhRjBzVzNSb2FYTXVhR1ZwWjJoMExEQmRLVHRjYmlBZ0lDQjBhR2x6TG5CdmMybDBhVzl1TG5aaGJIVmxJRDBnZEdocGN5NWZkbUZzZFdVdWJtOXliV0ZzYVhwbFpEdGNibHh1SUNBZ0lIUm9hWE11ZG1Gc2RXVWdQU0IwYUdsekxsOTJZV3gxWlM1MllXeDFaVHRjYmx4dUlDQWdJSFJvYVhNdVpXMXBkQ2duWTJoaGJtZGxKeXgwYUdsekxuWmhiSFZsS1R0Y2JseHVJQ0I5WEc1Y2JpQWdZblZwYkdSSmJuUmxjbVpoWTJVb0tTQjdYRzVjYmlBZ0lDQjBhR2x6TG1KaGNpQTlJSE4yWnk1amNtVmhkR1VvSjNKbFkzUW5LVHRjYmlBZ0lDQjBhR2x6TG10dWIySWdQU0J6ZG1jdVkzSmxZWFJsS0NkamFYSmpiR1VuS1R0Y2JseHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRDNWhjSEJsYm1SRGFHbHNaQ2gwYUdsekxtSmhjaWs3WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG1Gd2NHVnVaRU5vYVd4a0tIUm9hWE11YTI1dllpazdYRzVjYmlBZ2ZWeHVYRzRnSUhOcGVtVkpiblJsY21aaFkyVW9LU0I3WEc1Y2JpQWdJQ0JwWmlBb2RHaHBjeTV3YjNOcGRHbHZiaWtnZTF4dUlDQWdJQ0FnZEdocGN5NXdiM05wZEdsdmJpNXlaWE5wZW1Vb1d6QXNkR2hwY3k1M2FXUjBhRjBzVzNSb2FYTXVhR1ZwWjJoMExEQmRLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NTNhV1IwYUNBOElIUm9hWE11YUdWcFoyaDBLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtOXlhV1Z1ZEdGMGFXOXVJRDBnSjNabGNuUnBZMkZzSnp0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdkR2hwY3k1dmNtbGxiblJoZEdsdmJpQTlJQ2RvYjNKcGVtOXVkR0ZzSnp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JzWlhRZ2VDd2dlU3dnZHl3Z2FDd2dZbUZ5VDJabWMyVjBMQ0JqYjNKdVpYSlNZV1JwZFhNN1hHNGdJQ0FnZEdocGN5NXJibTlpUkdGMFlTQTlJSHRjYmlBZ0lDQWdJR3hsZG1Wc09pQXdMRnh1SUNBZ0lDQWdjam9nTUZ4dUlDQWdJSDA3WEc1Y2JpQWdJQ0JwWmlBb2RHaHBjeTV2Y21sbGJuUmhkR2x2YmlBOVBUMGdKM1psY25ScFkyRnNKeWtnZTF4dUlDQWdJQ0FnZEdocGN5NTBhR2xqYTI1bGMzTWdQU0IwYUdsekxuZHBaSFJvSUM4Z01qdGNiaUFnSUNCY2RIZ2dQU0IwYUdsekxuZHBaSFJvTHpJN1hHNGdJQ0FnWEhSNUlEMGdNRHRjYmlBZ0lDQmNkSGNnUFNCMGFHbHpMblJvYVdOcmJtVnpjenRjYmlBZ0lDQmNkR2dnUFNCMGFHbHpMbWhsYVdkb2REdGNiaUFnSUNBZ0lIUm9hWE11YTI1dllrUmhkR0V1Y2lBOUlIUm9hWE11ZEdocFkydHVaWE56SUNvZ01DNDRPMXh1SUNBZ0lGeDBkR2hwY3k1cmJtOWlSR0YwWVM1c1pYWmxiQ0E5SUdndGRHaHBjeTVyYm05aVJHRjBZUzV5TFhSb2FYTXVibTl5YldGc2FYcGxaQ29vYUMxMGFHbHpMbXR1YjJKRVlYUmhMbklxTWlrN1hHNGdJQ0FnSUNCaVlYSlBabVp6WlhRZ1BTQW5kSEpoYm5Oc1lYUmxLQ2NyZEdocGN5NTBhR2xqYTI1bGMzTXFLQzB4S1M4eUt5Y3NNQ2tuTzF4dUlDQWdJQ0FnWTI5eWJtVnlVbUZrYVhWeklEMGdkeTh5TzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQjBhR2x6TG5Sb2FXTnJibVZ6Y3lBOUlIUm9hWE11YUdWcFoyaDBJQzhnTWp0Y2JpQWdJQ0JjZEhnZ1BTQXdPMXh1SUNBZ0lGeDBlU0E5SUhSb2FYTXVhR1ZwWjJoMEx6STdYRzRnSUNBZ1hIUjNJRDBnZEdocGN5NTNhV1IwYUR0Y2JpQWdJQ0JjZEdnZ1BTQjBhR2x6TG5Sb2FXTnJibVZ6Y3p0Y2JpQWdJQ0FnSUhSb2FYTXVhMjV2WWtSaGRHRXVjaUE5SUhSb2FYTXVkR2hwWTJ0dVpYTnpJQ29nTUM0NE8xeHVJQ0FnSUZ4MGRHaHBjeTVyYm05aVJHRjBZUzVzWlhabGJDQTlJSFJvYVhNdWJtOXliV0ZzYVhwbFpDb29keTEwYUdsekxtdHViMkpFWVhSaExuSXFNaWtyZEdocGN5NXJibTlpUkdGMFlTNXlPMXh1SUNBZ0lDQWdZbUZ5VDJabWMyVjBJRDBnSjNSeVlXNXpiR0YwWlNnd0xDY3JkR2hwY3k1MGFHbGphMjVsYzNNcUtDMHhLUzh5S3ljcEp6dGNiaUFnSUNBZ0lHTnZjbTVsY2xKaFpHbDFjeUE5SUdndk1qdGNiaUFnSUNCOVhHNWNiaUFnSUNCMGFHbHpMbUpoY2k1elpYUkJkSFJ5YVdKMWRHVW9KM2duTEhncE8xeHVJQ0FnSUhSb2FYTXVZbUZ5TG5ObGRFRjBkSEpwWW5WMFpTZ25lU2NzZVNrN1hHNGdJQ0FnZEdocGN5NWlZWEl1YzJWMFFYUjBjbWxpZFhSbEtDZDBjbUZ1YzJadmNtMG5MR0poY2s5bVpuTmxkQ2s3WEc0Z0lDQWdkR2hwY3k1aVlYSXVjMlYwUVhSMGNtbGlkWFJsS0NkeWVDY3NZMjl5Ym1WeVVtRmthWFZ6S1RzZ0x5OGdZMjl5Ym1WeUlISmhaR2wxYzF4dUlDQWdJSFJvYVhNdVltRnlMbk5sZEVGMGRISnBZblYwWlNnbmNua25MR052Y201bGNsSmhaR2wxY3lrN1hHNGdJQ0FnZEdocGN5NWlZWEl1YzJWMFFYUjBjbWxpZFhSbEtDZDNhV1IwYUNjc2R5azdYRzRnSUNBZ2RHaHBjeTVpWVhJdWMyVjBRWFIwY21saWRYUmxLQ2RvWldsbmFIUW5MR2dwTzF4dVhHNGdJQ0FnYVdZZ0tIUm9hWE11YjNKcFpXNTBZWFJwYjI0Z1BUMDlJQ2QyWlhKMGFXTmhiQ2NwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVhMjV2WWk1elpYUkJkSFJ5YVdKMWRHVW9KMk40Snl4NEtUdGNiaUFnSUNBZ0lIUm9hWE11YTI1dllpNXpaWFJCZEhSeWFXSjFkR1VvSjJONUp5eDBhR2x6TG10dWIySkVZWFJoTG14bGRtVnNLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVyYm05aUxuTmxkRUYwZEhKcFluVjBaU2duWTNnbkxIUm9hWE11YTI1dllrUmhkR0V1YkdWMlpXd3BPMXh1SUNBZ0lDQWdkR2hwY3k1cmJtOWlMbk5sZEVGMGRISnBZblYwWlNnblkza25MSGtwTzF4dUlDQWdJSDFjYmlBZ0lDQjBhR2x6TG10dWIySXVjMlYwUVhSMGNtbGlkWFJsS0NkeUp5eDBhR2x6TG10dWIySkVZWFJoTG5JcE8xeHVYRzRnSUgxY2JseHVJQ0JqYjJ4dmNrbHVkR1Z5Wm1GalpTZ3BJSHRjYmx4dUlDQWdJSFJvYVhNdVltRnlMbk5sZEVGMGRISnBZblYwWlNnblptbHNiQ2NzSUhSb2FYTXVZMjlzYjNKekxtWnBiR3dwTzF4dUlDQWdJSFJvYVhNdWEyNXZZaTV6WlhSQmRIUnlhV0oxZEdVb0oyWnBiR3duTENCMGFHbHpMbU52Ykc5eWN5NWhZMk5sYm5RcE8xeHVYRzRnSUNBZ2FXWWdLQ0YwYUdsekxtaGhjMHR1YjJJcElIdGNiaUFnSUNBZ0lIUm9hWE11YTI1dllpNXpaWFJCZEhSeWFXSjFkR1VvSjJacGJHd25MQ2QwY21GdWMzQmhjbVZ1ZENjcE8xeHVJQ0FnSUgxY2JseHVJQ0I5WEc1Y2JpQWdjbVZ1WkdWeUtDa2dlMXh1SUNBZ0lHbG1JQ2doZEdocGN5NWpiR2xqYTJWa0tTQjdYRzRnSUNBZ0lDQjBhR2x6TG10dWIySkVZWFJoTG5JZ1BTQjBhR2x6TG5Sb2FXTnJibVZ6Y3lvd0xqYzFPMXh1SUNBZ0lIMWNiaUFnSUNCMGFHbHpMbXR1YjJJdWMyVjBRWFIwY21saWRYUmxLQ2R5Snl4MGFHbHpMbXR1YjJKRVlYUmhMbklwTzF4dVhHNGdJQ0FnYVdZZ0tIUm9hWE11YjNKcFpXNTBZWFJwYjI0Z1BUMDlJQ2QyWlhKMGFXTmhiQ2NwSUh0Y2JpQWdYSFFnSUNCMGFHbHpMbXR1YjJKRVlYUmhMbXhsZG1Wc0lEMGdkR2hwY3k1cmJtOWlSR0YwWVM1eUszUm9hWE11WDNaaGJIVmxMbTV2Y20xaGJHbDZaV1FxS0hSb2FYTXVhR1ZwWjJoMExYUm9hWE11YTI1dllrUmhkR0V1Y2lveUtUdGNiaUFnSUNBZ0lDQjBhR2x6TG10dWIySXVjMlYwUVhSMGNtbGlkWFJsS0NkamVTY3NkR2hwY3k1b1pXbG5hSFFnTFNCMGFHbHpMbXR1YjJKRVlYUmhMbXhsZG1Wc0tUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQmNkQ0FnSUhSb2FYTXVhMjV2WWtSaGRHRXViR1YyWld3Z1BTQjBhR2x6TGw5MllXeDFaUzV1YjNKdFlXeHBlbVZrS2loMGFHbHpMbmRwWkhSb0xYUm9hWE11YTI1dllrUmhkR0V1Y2lveUtTdDBhR2x6TG10dWIySkVZWFJoTG5JN1hHNGdJQ0FnSUNBZ2RHaHBjeTVyYm05aUxuTmxkRUYwZEhKcFluVjBaU2duWTNnbkxIUm9hWE11YTI1dllrUmhkR0V1YkdWMlpXd3BPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNWNiaUFnWTJ4cFkyc29LU0I3WEc0Z0lDQWdkR2hwY3k1cmJtOWlSR0YwWVM1eUlEMGdkR2hwY3k1MGFHbGphMjVsYzNNcU1DNDVPMXh1SUNBZ0lIUm9hWE11Y0c5emFYUnBiMjR1WVc1amFHOXlJRDBnZEdocGN5NXRiM1Z6WlR0Y2JpQWdJQ0IwYUdsekxtMXZkbVVvS1R0Y2JpQWdmVnh1WEc0Z0lHMXZkbVVvS1NCN1hHNGdJQ0FnYVdZZ0tIUm9hWE11WTJ4cFkydGxaQ2tnZTF4dUlDQWdJQ0FnZEdocGN5NXdiM05wZEdsdmJpNTFjR1JoZEdVb2RHaHBjeTV0YjNWelpTazdYRzVjYmlBZ0lDQWdJSFJvYVhNdWRtRnNkV1VnUFNCMGFHbHpMbDkyWVd4MVpTNTFjR1JoZEdWT2IzSnRZV3dvSUhSb2FYTXVjRzl6YVhScGIyNHVkbUZzZFdVZ0tUdGNibHh1SUNBZ0lDQWdkR2hwY3k1bGJXbDBLQ2RqYUdGdVoyVW5MSHRjYmlBZ0lDQWdJQ0FnZG1Gc2RXVTZJSFJvYVhNdWRtRnNkV1VzWEc0Z0lDQWdJQ0FnSUV3NklFMWhkR2d1Y0c5M0tDQnRZWFJvTG5OallXeGxLSFJvYVhNdWRtRnNkV1VzTFRFc01Td3hMREFwTENBeUtTeGNiaUFnSUNBZ0lDQWdVam9nVFdGMGFDNXdiM2NvSUcxaGRHZ3VjMk5oYkdVb2RHaHBjeTUyWVd4MVpTd3RNU3d4TERBc01Ta3NJRElwWEc0Z0lDQWdJQ0I5S1R0Y2JseHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lISmxiR1ZoYzJVb0tTQjdYRzRnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0JVYUdVZ2NHOXphWFJwYjI0Z2IyWWdZM0p2YzNObVlXUmxjaXdnWm5KdmJTQXRNU0FvYkdWbWRDa2dkRzhnTVNBb2NtbG5hSFFwTGlCVFpYUjBhVzVuSUhSb2FYTWdkbUZzZFdVZ2RYQmtZWFJsY3lCMGFHVWdhVzUwWlhKbVlXTmxJR0Z1WkNCMGNtbG5aMlZ5Y3lCMGFHVWdiM1YwY0hWMElHVjJaVzUwTGx4dUlDQkFkSGx3WlNCN2JuVnRZbVZ5ZlZ4dUlDQXFMMXh1SUNCblpYUWdkbUZzZFdVb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVYM1poYkhWbExuWmhiSFZsTzF4dUlDQjlYRzVjYmlBZ2MyVjBJSFpoYkhWbEtIWmhiSFZsS1NCN1hHNGdJQ0FnZEdocGN5NWZkbUZzZFdVdWRYQmtZWFJsS0haaGJIVmxLVHRjYmlBZ0lDQjBhR2x6TG5CdmMybDBhVzl1TG5aaGJIVmxJRDBnZEdocGN5NWZkbUZzZFdVdWJtOXliV0ZzYVhwbFpEdGNiaUFnSUNCMGFHbHpMbVZ0YVhRb0oyTm9ZVzVuWlNjc2UxeHVJQ0FnSUNBZ2RtRnNkV1U2SUhSb2FYTXVkbUZzZFdVc1hHNGdJQ0FnSUNCTU9pQk5ZWFJvTG5CdmR5Z2diV0YwYUM1elkyRnNaU2gwYUdsekxuWmhiSFZsTEMweExERXNNU3d3S1N3Z01pa3NYRzRnSUNBZ0lDQlNPaUJOWVhSb0xuQnZkeWdnYldGMGFDNXpZMkZzWlNoMGFHbHpMblpoYkhWbExDMHhMREVzTUN3eEtTd2dNaWxjYmlBZ0lDQjlLVHRjYmlBZ0lDQjBhR2x6TG5KbGJtUmxjaWdwTzF4dUlDQjlYRzVjYmlBZ1oyVjBJRzV2Y20xaGJHbDZaV1FvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVgzWmhiSFZsTG01dmNtMWhiR2w2WldRN1hHNGdJSDFjYmx4dWZWeHVYRzVjYmx4dUx5OGdWMFZDVUVGRFN5QkdUMDlVUlZJZ0x5OWNiaTh2SUM0dmZpOXFjMmhwYm5RdGJHOWhaR1Z5SVM0dmJHbGlMMmx1ZEdWeVptRmpaWE12Y0dGdUxtcHpJaXdpSjNWelpTQnpkSEpwWTNRbk8xeHVYRzVzWlhRZ2JXRjBhQ0E5SUhKbGNYVnBjbVVvSnk0dUwzVjBhV3d2YldGMGFDY3BPMXh1YkdWMElITjJaeUE5SUhKbGNYVnBjbVVvSnk0dUwzVjBhV3d2YzNabkp5azdYRzVzWlhRZ1NXNTBaWEptWVdObElEMGdjbVZ4ZFdseVpTZ25MaTR2WTI5eVpTOXBiblJsY21aaFkyVW5LVHRjYmx4dVhHNXNaWFFnVUc5cGJuUWdQU0JtZFc1amRHbHZiaWh3YjJsdWRDeGxiblpsYkc5d1pTa2dlMXh1WEc0Z0lIUm9hWE11ZUNBOUlIQnZhVzUwTG5nN1hHNGdJSFJvYVhNdWVTQTlJSEJ2YVc1MExuazdYRzRnSUhSb2FYTXVaVzUyWld4dmNHVWdQU0JsYm5abGJHOXdaVHRjYmx4dUlDQjBhR2x6TG1Wc1pXMWxiblFnUFNCemRtY3VZM0psWVhSbEtDZGphWEpqYkdVbktUdGNiaUFnZEdocGN5NWxiR1Z0Wlc1MExuTmxkRUYwZEhKcFluVjBaU2duWm1sc2JDY3NkR2hwY3k1bGJuWmxiRzl3WlM1amIyeHZjbk11WVdOalpXNTBLVHRjYmx4dUlDQjBhR2x6TG1WdWRtVnNiM0JsTG1Wc1pXMWxiblF1WVhCd1pXNWtRMmhwYkdRb2RHaHBjeTVsYkdWdFpXNTBLVHRjYmx4dUlDQjBhR2x6TG5KbGMybDZaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUd4bGRDQnlJRDBnZm40b1RXRjBhQzV0YVc0b2RHaHBjeTVsYm5abGJHOXdaUzUzYVdSMGFDeDBhR2x6TG1WdWRtVnNiM0JsTG1obGFXZG9kQ2t2TlRBcEt6STdYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbk5sZEVGMGRISnBZblYwWlNnbmNpY3NjaWs3WEc0Z0lIMDdYRzVjYmlBZ2RHaHBjeTV0YjNabElEMGdablZ1WTNScGIyNG9lQ3g1S1NCN1hHNWNiaUFnSUNCMGFHbHpMbmdnUFNBb2VDQjhmQ0I0UFQwOU1Da2dQeUI0SURvZ2RHaHBjeTU0TzF4dUlDQWdJSFJvYVhNdWVTQTlJQ2g1SUh4OElIazlQVDB3S1NBL0lIa2dPaUIwYUdsekxuazdYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NWxiblpsYkc5d1pTNXViMlJsY3k1cGJtUmxlRTltS0hSb2FYTXBQajB3S1NCN1hHNWNiaUFnSUNBZ0lHeGxkQ0J3Y21WMlNXNWtaWGdnUFNCMGFHbHpMbVZ1ZG1Wc2IzQmxMbTV2WkdWekxtbHVaR1Y0VDJZb2RHaHBjeWt0TVR0Y2JpQWdJQ0FnSUd4bGRDQnVaWGgwU1c1a1pYZ2dQU0IwYUdsekxtVnVkbVZzYjNCbExtNXZaR1Z6TG1sdVpHVjRUMllvZEdocGN5a3JNVHRjYmx4dUlDQWdJQ0FnYkdWMElIQnlaWFpPYjJSbElEMGdkR2hwY3k1bGJuWmxiRzl3WlM1dWIyUmxjMXR3Y21WMlNXNWtaWGhkTzF4dUlDQWdJQ0FnYkdWMElHNWxlSFJPYjJSbElEMGdkR2hwY3k1bGJuWmxiRzl3WlM1dWIyUmxjMXR1WlhoMFNXNWtaWGhkTzF4dVhHNGdJQ0FnSUNCc1pYUWdiRzkzV0NBOUlIQnlaWFpKYm1SbGVDQStQU0F3SUQ4Z2NISmxkazV2WkdVdWVDQTZJREE3WEc0Z0lDQWdJQ0JzWlhRZ2FHbG5hRmdnUFNCdVpYaDBTVzVrWlhnZ1BDQjBhR2x6TG1WdWRtVnNiM0JsTG01dlpHVnpMbXhsYm1kMGFDQS9JRzVsZUhST2IyUmxMbmdnT2lBeE8xeHVYRzRnSUNBZ0lDQnBaaUFvZEdocGN5NTRJRHdnYkc5M1dDa2dleUIwYUdsekxuZ2dQU0JzYjNkWU95QjlYRzRnSUNBZ0lDQnBaaUFvZEdocGN5NTRJRDRnYUdsbmFGZ3BJSHNnZEdocGN5NTRJRDBnYUdsbmFGZzdJSDFjYmx4dUlDQWdJSDFjYmx4dUlDQWdJSFJvYVhNdWJHOWpZWFJwYjI0Z1BTQjBhR2x6TG1kbGRFTnZiM0prYVc1aGRHVnpLQ2s3WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwTG5ObGRFRjBkSEpwWW5WMFpTZ25ZM2duTENCMGFHbHpMbXh2WTJGMGFXOXVMbmdwTzF4dUlDQWdJSFJvYVhNdVpXeGxiV1Z1ZEM1elpYUkJkSFJ5YVdKMWRHVW9KMk41Snl3Z2RHaHBjeTVzYjJOaGRHbHZiaTU1S1R0Y2JpQWdmVHRjYmx4dUlDQjBhR2x6TG1kbGRFTnZiM0prYVc1aGRHVnpJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSHRjYmlBZ0lDQWdJSGc2SUhSb2FYTXVlQ0FxSUhSb2FYTXVaVzUyWld4dmNHVXVkMmxrZEdnc1hHNGdJQ0FnSUNCNU9pQW9NUzEwYUdsekxua3BJQ29nZEdocGN5NWxiblpsYkc5d1pTNW9aV2xuYUhSY2JpQWdJQ0I5TzF4dUlDQjlPMXh1WEc0Z0lIUm9hWE11Ylc5MlpTaDBhR2x6TG5nc2RHaHBjeTU1TEhSeWRXVXBPMXh1SUNCMGFHbHpMbkpsYzJsNlpTZ3BPMXh1WEc0Z0lIUm9hWE11WkdWemRISnZlU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUhSb2FYTXVaVzUyWld4dmNHVXVaV3hsYldWdWRDNXlaVzF2ZG1WRGFHbHNaQ2gwYUdsekxtVnNaVzFsYm5RcE8xeHVJQ0FnSUhSb2FYTXVaVzUyWld4dmNHVXVibTlrWlhNdWMzQnNhV05sS0hSb2FYTXVaVzUyWld4dmNHVXVibTlrWlhNdWFXNWtaWGhQWmloMGFHbHpLU3d4S1R0Y2JpQWdmVHRjYmx4dVhHNTlPMXh1WEc1Y2JpOHFLbHh1S2lCRmJuWmxiRzl3WlZ4dUtseHVLaUJBWkdWelkzSnBjSFJwYjI0Z1NXNTBaWEpoWTNScGRtVWdiR2x1WldGeUlISmhiWEFnZG1semRXRnNhWHBoZEdsdmJpNWNiaXBjYmlvZ1FHUmxiVzhnUEhOd1lXNGdibVY0ZFhNdGRXazlYQ0psYm5abGJHOXdaVndpUGp3dmMzQmhiajVjYmlwY2Jpb2dRR1Y0WVcxd2JHVmNiaW9nZG1GeUlHVnVkbVZzYjNCbElEMGdibVYzSUU1bGVIVnpMa1Z1ZG1Wc2IzQmxLQ2NqZEdGeVoyVjBKeWxjYmlwY2Jpb2dRR1Y0WVcxd2JHVmNiaW9nZG1GeUlHVnVkbVZzYjNCbElEMGdibVYzSUU1bGVIVnpMa1Z1ZG1Wc2IzQmxLQ2NqZEdGeVoyVjBKeXg3WEc0cUlDQWdKM05wZW1Vbk9pQmJNekF3TERFMU1GMHNYRzRxSUNBZ0ozQnZhVzUwY3ljNklGdGNiaW9nSUNBZ0lIdGNiaW9nSUNBZ0lDQWdlRG9nTUM0eExGeHVLaUFnSUNBZ0lDQjVPaUF3TGpSY2Jpb2dJQ0FnSUgwc1hHNHFJQ0FnSUNCN1hHNHFJQ0FnSUNBZ0lIZzZJREF1TXpVc1hHNHFJQ0FnSUNBZ0lIazZJREF1Tmx4dUtpQWdJQ0FnZlN4Y2Jpb2dJQ0FnSUh0Y2Jpb2dJQ0FnSUNBZ2VEb2dNQzQyTlN4Y2Jpb2dJQ0FnSUNBZ2VUb2dNQzR5WEc0cUlDQWdJQ0I5TEZ4dUtpQWdJQ0FnZTF4dUtpQWdJQ0FnSUNCNE9pQXdMamtzWEc0cUlDQWdJQ0FnSUhrNklEQXVORnh1S2lBZ0lDQWdmU3hjYmlvZ0lDQmRYRzRxSUgwcFhHNHFYRzRxSUVCdmRYUndkWFJjYmlvZ1kyaGhibWRsWEc0cUlFWnBjbVZ6SUdGdWVTQjBhVzFsSUdFZ2JtOWtaU0JwY3lCdGIzWmxaQzRnUEdKeVBseHVLaUJVYUdVZ1pYWmxiblFnWkdGMFlTQnBjeUJoYmlCaGNuSmhlU0J2WmlCd2IybHVkQ0JzYjJOaGRHbHZibk11SUVWaFkyZ2dhWFJsYlNCcGJpQjBhR1VnWVhKeVlYa2dhWE1nWVc0Z2IySnFaV04wSUdOdmJuUmhhVzVwYm1jZ1BHaytlRHd2YVQ0Z1lXNWtJRHhwUG5rOEwyaytJSEJ5YjNCbGNuUnBaWE1nWkdWelkzSnBZbWx1WnlCMGFHVWdiRzlqWVhScGIyNGdiMllnWVNCd2IybHVkQ0J2YmlCMGFHVWdaVzUyWld4dmNHVXVYRzRxWEc0cUlFQnZkWFJ3ZFhSbGVHRnRjR3hsWEc0cUlHVnVkbVZzYjNCbExtOXVLQ2RqYUdGdVoyVW5MR1oxYm1OMGFXOXVLSFlwSUh0Y2Jpb2dJQ0JqYjI1emIyeGxMbXh2WnloMktUdGNiaW9nZlNsY2JpcGNiaW92WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdOc1lYTnpJRVZ1ZG1Wc2IzQmxJR1Y0ZEdWdVpITWdTVzUwWlhKbVlXTmxJSHRjYmx4dUlDQmpiMjV6ZEhKMVkzUnZjaWdwSUh0Y2JseHVJQ0FnSUd4bGRDQnZjSFJwYjI1eklEMGdXeWQyWVd4MVpTZGRPMXh1WEc0Z0lDQWdiR1YwSUdSbFptRjFiSFJ6SUQwZ2UxeHVJQ0FnSUNBZ0ozTnBlbVVuT2lCYk16QXdMREUxTUYwc1hHNGdJQ0FnSUNBbmNHOXBiblJ6SnpvZ1cxeHVJQ0JjZEZ4MFhIUjdYRzRnSUZ4MFhIUmNkRngwZURvZ01DNHhMRnh1SUNCY2RGeDBYSFJjZEhrNklEQXVORnh1SUNCY2RGeDBYSFI5TEZ4dUlDQmNkRngwWEhSN1hHNGdJRngwWEhSY2RGeDBlRG9nTUM0ek5TeGNiaUFnWEhSY2RGeDBYSFI1T2lBd0xqWmNiaUFnWEhSY2RGeDBmU3hjYmlBZ1hIUmNkRngwZTF4dUlDQmNkRngwWEhSY2RIZzZJREF1TmpVc1hHNGdJRngwWEhSY2RGeDBlVG9nTUM0eVhHNGdJRngwWEhSY2RIMHNYRzRnSUZ4MFhIUmNkSHRjYmlBZ1hIUmNkRngwWEhSNE9pQXdMamtzWEc0Z0lGeDBYSFJjZEZ4MGVUb2dNQzQwWEc0Z0lGeDBYSFJjZEgxY2JpQWdYSFJjZEYxY2JpQWdJQ0I5TzF4dVhHNGdJQ0FnYzNWd1pYSW9ZWEpuZFcxbGJuUnpMRzl3ZEdsdmJuTXNaR1ZtWVhWc2RITXBPMXh1WEc0Z0lDQWdkR2hwY3k1d2IybHVkSE1nUFNCMGFHbHpMbk5sZEhScGJtZHpMbkJ2YVc1MGN6dGNibHh1SUNBZ0lIUm9hWE11Ym05a1pYTWdQU0JiWFR0Y2JseHVJQ0FnSUhSb2FYTXVjMlZzWldOMFpXUWdQU0JtWVd4elpUdGNibHh1SUNBZ0lIUm9hWE11YVc1cGRDZ3BPMXh1WEc1Y2JpQWdmVnh1WEc0Z0lHSjFhV3hrU1c1MFpYSm1ZV05sS0NrZ2UxeHVYRzVjYmlBZ0lDQjBhR2x6TG5CdmFXNTBjeTVtYjNKRllXTm9LQ2h3YjJsdWRDa2dQVDRnZTF4dUlDQWdJQ0FnYkdWMElHNXZaR1VnUFNCdVpYY2dVRzlwYm5Rb2NHOXBiblFzZEdocGN5azdYRzRnSUNBZ0lDQjBhR2x6TG01dlpHVnpMbkIxYzJnb2JtOWtaU2s3WEc0Z0lDQWdmU2s3WEc1Y2JpQWdJQ0IwYUdsekxuTnZjblJRYjJsdWRITW9LVHRjYmx4dUlDQWdJSFJvYVhNdWJHbHVaU0E5SUhOMlp5NWpjbVZoZEdVb0ozQnZiSGxzYVc1bEp5azdYRzRnSUNBZ2RHaHBjeTVzYVc1bExuTmxkRUYwZEhKcFluVjBaU2duYzNSeWIydGxMWGRwWkhSb0p5d2dNaWs3WEc0Z0lDQWdkR2hwY3k1c2FXNWxMbk5sZEVGMGRISnBZblYwWlNnblptbHNiQ2NzSUNkdWIyNWxKeWs3WEc1Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5RdVlYQndaVzVrUTJocGJHUW9kR2hwY3k1c2FXNWxLVHRjYmx4dUlDQWdJSFJvYVhNdVptbHNiQ0E5SUhOMlp5NWpjbVZoZEdVb0ozQnZiSGxzYVc1bEp5azdYRzRnSUNBZ2RHaHBjeTVtYVd4c0xuTmxkRUYwZEhKcFluVjBaU2duWm1sc2JDMXZjR0ZqYVhSNUp5d2dKekF1TWljcE8xeHVYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbUZ3Y0dWdVpFTm9hV3hrS0hSb2FYTXVabWxzYkNrN1hHNWNiaUFnZlZ4dVhHNGdJSE5wZW1WSmJuUmxjbVpoWTJVb0tTQjdYRzVjYmlBZ0lDQm1iM0lnS0d4bGRDQnBQVEE3SUdrOGRHaHBjeTV1YjJSbGN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnZEdocGN5NXViMlJsYzF0cFhTNXlaWE5wZW1Vb0tUdGNiaUFnSUNBZ0lIUm9hWE11Ym05a1pYTmJhVjB1Ylc5MlpTZ3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11Y21WdVpHVnlLQ2s3WEc1Y2JpQWdmVnh1WEc0Z0lHTnZiRzl5U1c1MFpYSm1ZV05sS0NrZ2UxeHVYRzRnSUNBZ2RHaHBjeTVsYkdWdFpXNTBMbk4wZVd4bExtSmhZMnRuY205MWJtUkRiMnh2Y2lBOUlIUm9hWE11WTI5c2IzSnpMbVpwYkd3N1hHNGdJQ0FnZEdocGN5NXNhVzVsTG5ObGRFRjBkSEpwWW5WMFpTZ25jM1J5YjJ0bEp5d2dkR2hwY3k1amIyeHZjbk11WVdOalpXNTBLVHRjYmlBZ0lDQjBhR2x6TG1acGJHd3VjMlYwUVhSMGNtbGlkWFJsS0NkbWFXeHNKeXdnZEdocGN5NWpiMnh2Y25NdVlXTmpaVzUwS1R0Y2JpQWdJQ0IwYUdsekxtNXZaR1Z6TG1admNrVmhZMmdvS0c1dlpHVXBJRDArSUh0Y2JpQWdJQ0FnSUc1dlpHVXVaV3hsYldWdWRDNXpaWFJCZEhSeWFXSjFkR1VvSjJacGJHd25MSFJvYVhNdVkyOXNiM0p6TG1GalkyVnVkQ2s3WEc0Z0lDQWdmU2s3WEc1Y2JpQWdmVnh1WEc0Z0lISmxibVJsY2lncElIdGNiaUFnTHk4Z0lIUm9hWE11Ym05a1pYTmJkR2hwY3k1elpXeGxZM1JsWkYwdWJXOTJaU2dnZEdocGN5NXdiMmx1ZEhNZ0tWeHVJQ0FnSUhSb2FYTXVZMkZzWTNWc1lYUmxVR0YwYUNncE8xeHVJQ0I5WEc1Y2JpQWdZMkZzWTNWc1lYUmxVRzlwYm5SektDa2dlMXh1SUNBZ0lIUm9hWE11Y0c5cGJuUnpJRDBnVzEwN1hHNGdJQ0FnZEdocGN5NXViMlJsY3k1bWIzSkZZV05vS0NodWIyUmxLU0E5UGlCN1hHNGdJQ0FnSUNCMGFHbHpMbkJ2YVc1MGN5NXdkWE5vS0hzZ2VEb2dibTlrWlM1NExDQjVPaUJ1YjJSbExua2dmU2s3WEc0Z0lDQWdmU2s3WEc0Z0lIMWNibHh1SUNCallXeGpkV3hoZEdWUVlYUm9LQ2tnZTF4dVhHNGdJQ0FnTHk5emRISnZhMlVnWkdGMFlWeHVJQ0FnSUd4bGRDQmtZWFJoSUQwZ0p6QWdKeXNnZEdocGN5NXViMlJsYzFzd1hTNXNiMk5oZEdsdmJpNTVLeWNzSUNjN1hHNWNiaUFnSUNBdkx5QmtZWFJoSUhOb2IzVnNaQ0JpWlNCeVpTMXZjbVJsY21Wa0lHSmhjMlZrSUc5dUlIZ2diRzlqWVhScGIyNHVYRzRnSUNBZ0x5OGdkMmhoZEdWMlpYSWdablZ1WTNScGIyNGdZV1JrY3lCaElHNXZaR1VnYzJodmRXeGtJR0ZrWkNCcGRDQmhkQ0IwYUdVZ2NtbG5hSFFnYVc1a1pYaGNibHh1SUNBZ0lIUm9hWE11Ym05a1pYTXVabTl5UldGamFDZ29ibTlrWlNrZ1BUNGdlMXh1SUNBZ0lDOHZJQ0JzWlhRZ2JHOWpZWFJwYjI0Z1BTQnViMlJsTG1kbGRFTnZiM0prYVc1aGRHVnpLQ2s3WEc0Z0lDQWdJQ0JrWVhSaElDczlJRzV2WkdVdWJHOWpZWFJwYjI0dWVDQXJJQ2NnSnlBcklHNXZaR1V1Ykc5allYUnBiMjR1ZVNBcklDY3NJQ2M3WEc0Z0lDQWdmU2s3WEc1Y2JseHVJQ0F2THlBZ1pHRjBZU0FyUFNCd2IybHVkQzU0S25Sb2FYTXVkMmxrZEdnckp5QW5LeUJ3YjJsdWRDNTVLblJvYVhNdWFHVnBaMmgwS3ljc0lDYzdYRzRnSUNBZ1pHRjBZU0FyUFNCMGFHbHpMbmRwWkhSb0lDc2dKeUFuS3lCMGFHbHpMbTV2WkdWelczUm9hWE11Ym05a1pYTXViR1Z1WjNSb0xURmRMbXh2WTJGMGFXOXVMbms3WEc1Y2JpQWdJQ0IwYUdsekxteHBibVV1YzJWMFFYUjBjbWxpZFhSbEtDZHdiMmx1ZEhNbkxDQmtZWFJoS1R0Y2JseHVJQ0FnSUM4dklHWnBiR3dnWkdGMFlWeHVJQ0FnSUM4dklHRmtaQ0JpYjNSMGIyMGdZMjl5Ym1WeWMxeHVYRzRnSUNBZ1pHRjBZU0FyUFNBbkxDQW5LM1JvYVhNdWQybGtkR2dnS3ljZ0p5dDBhR2x6TG1obGFXZG9kQ3NuTENBbk8xeHVJQ0FnSUdSaGRHRWdLejBnSnpBZ0p5dDBhR2x6TG1obGFXZG9kRHRjYmx4dUlDQWdJSFJvYVhNdVptbHNiQzV6WlhSQmRIUnlhV0oxZEdVb0ozQnZhVzUwY3ljc0lHUmhkR0VwTzF4dVhHNGdJSDFjYmx4dVhHNWNiaUFnWTJ4cFkyc29LU0I3WEc0Z0lGeDBMeThnWm1sdVpDQnVaV0Z5WlhOMElHNXZaR1VnWVc1a0lITmxkQ0IwYUdsekxuTmxiR1ZqZEdWa0lDaHBibVJsZUNsY2JpQWdJQ0IwYUdsekxtaGhjMDF2ZG1Wa0lEMGdabUZzYzJVN1hHNGdJRngwZEdocGN5NXpaV3hsWTNSbFpDQTlJSFJvYVhNdVptbHVaRTVsWVhKbGMzUk9iMlJsS0NrN1hHNWNiaUFnSUNCMGFHbHpMbTV2WkdWelczUm9hWE11YzJWc1pXTjBaV1JkTG0xdmRtVW9kR2hwY3k1dGIzVnpaUzU0TDNSb2FYTXVkMmxrZEdnc01TMTBhR2x6TG0xdmRYTmxMbmt2ZEdocGN5NW9aV2xuYUhRcE8xeHVJQ0FnSUhSb2FYTXVjMk5oYkdWT2IyUmxLSFJvYVhNdWMyVnNaV04wWldRcE8xeHVYRzRnSUNBZ0x5OGdiWFZ6ZENCa2J5QjBhR2x6SUdJdll5QnVaWGNnYm05a1pTQnRZWGtnYUdGMlpTQmlaV1Z1SUdOeVpXRjBaV1JjYmlBZ0lDQjBhR2x6TG1OaGJHTjFiR0YwWlZCdmFXNTBjeWdwTzF4dUlDQWdJSFJvYVhNdVpXMXBkQ2duWTJoaGJtZGxKeXgwYUdsekxuQnZhVzUwY3lrN1hHNGdJRngwZEdocGN5NXlaVzVrWlhJb0tUdGNiaUFnZlZ4dVhHNGdJRzF2ZG1Vb0tTQjdYRzRnSUZ4MGFXWWdLSFJvYVhNdVkyeHBZMnRsWkNrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV0YjNWelpTNTRJRDBnYldGMGFDNWpiR2x3S0hSb2FYTXViVzkxYzJVdWVDd3dMSFJvYVhNdWQybGtkR2dwTzF4dUlDQWdJQ0FnZEdocGN5NW9ZWE5OYjNabFpDQTlJSFJ5ZFdVN1hHNWNiaUFnSUNBZ0lIUm9hWE11Ym05a1pYTmJkR2hwY3k1elpXeGxZM1JsWkYwdWJXOTJaU2gwYUdsekxtMXZkWE5sTG5ndmRHaHBjeTUzYVdSMGFDd3hMWFJvYVhNdWJXOTFjMlV1ZVM5MGFHbHpMbWhsYVdkb2RDazdYRzRnSUNBZ1hIUjBhR2x6TG5OallXeGxUbTlrWlNoMGFHbHpMbk5sYkdWamRHVmtLVHRjYmx4dUlDQWdJQ0FnZEdocGN5NWpZV3hqZFd4aGRHVlFiMmx1ZEhNb0tUdGNiaUFnWEhSY2RIUm9hWE11WlcxcGRDZ25ZMmhoYm1kbEp5eDBhR2x6TG5CdmFXNTBjeWs3WEc0Z0lGeDBYSFIwYUdsekxuSmxibVJsY2lncE8xeHVJQ0JjZEgxY2JpQWdmVnh1WEc0Z0lISmxiR1ZoYzJVb0tTQjdYRzVjYmlBZ1hIUnBaaUFvSVhSb2FYTXVhR0Z6VFc5MlpXUXBJSHRjYmlBZ0lDQWdJSFJvYVhNdWJtOWtaWE5iZEdocGN5NXpaV3hsWTNSbFpGMHVaR1Z6ZEhKdmVTZ3BPMXh1SUNCY2RIMWNibHh1SUNBZ0lIUm9hWE11WTJGc1kzVnNZWFJsVUc5cGJuUnpLQ2s3WEc0Z0lDQWdkR2hwY3k1bGJXbDBLQ2RqYUdGdVoyVW5MSFJvYVhNdWNHOXBiblJ6S1R0Y2JpQWdYSFIwYUdsekxuSmxibVJsY2lncE8xeHVYRzRnSUZ4MEx5OGdjbVZ6WlhRZ2RHaHBjeTV6Wld4bFkzUmxaRnh1SUNCY2RIUm9hWE11YzJWc1pXTjBaV1FnUFNCdWRXeHNPMXh1SUNCOVhHNWNibHh1SUNCbWFXNWtUbVZoY21WemRFNXZaR1VvS1NCN1hHNGdJRngwZG1GeUlHNWxZWEpsYzNSSmJtUmxlQ0E5SUc1MWJHdzdYRzRnSUNBZ0x5OGdjMlYwSUhSb2FYTWdkVzV5WldGemIyNWhZbXg1SUdocFoyZ2djMjhnZEdoaGRDQmxkbVZ5ZVNCa2FYTjBZVzVqWlNCM2FXeHNJR0psSUd4dmQyVnlJSFJvWVc0Z2FYUXVYRzRnSUZ4MGRtRnlJRzVsWVhKbGMzUkVhWE4wSUQwZ01UQXdNREE3WEc0Z0lGeDBkbUZ5SUdKbFptOXlaU0E5SUdaaGJITmxPMXh1SUNBZ0lHeGxkQ0I0SUQwZ2RHaHBjeTV0YjNWelpTNTRMM1JvYVhNdWQybGtkR2c3WEc0Z0lDQWdiR1YwSUhrZ1BTQXhMWFJvYVhNdWJXOTFjMlV1ZVM5MGFHbHpMbWhsYVdkb2REdGNiaUFnSUNCc1pYUWdibTlrWlhNZ1BTQjBhR2x6TG01dlpHVnpPMXh1SUNCY2RHWnZjaUFvYkdWMElHa2dQU0F3T3lCcFBHNXZaR1Z6TG14bGJtZDBhRHNnYVNzcktTQjdYRzVjYmlBZ0lDQWdJQzh2SUdOaGJHTjFiR0YwWlNCMGFHVWdaR2x6ZEdGdVkyVWdabkp2YlNCdGIzVnpaU0IwYnlCMGFHbHpJRzV2WkdVZ2RYTnBibWNnY0hsMGFHRm5iM0psWVc0Z2RHaGxiM0psYlZ4dUlDQmNkRngwZG1GeUlHUnBjM1JoYm1ObElEMGdUV0YwYUM1emNYSjBLQ0FnVFdGMGFDNXdiM2NvSUNodWIyUmxjMXRwWFM1NElDMGdlQ2tzSURJcElDc2dUV0YwYUM1d2IzY29LRzV2WkdWelcybGRMbmtnTFNCNUtTd2dNaWtnS1R0Y2JseHVJQ0FnSUNBZ0x5OGdhV1lnZEdocGN5QmthWE4wWVc1alpTQnBjeUJzWlhOeklIUm9ZVzRnZEdobElIQnlaWFpwYjNWeklITm9iM0owWlhOMElHUnBjM1JoYm1ObExDQjFjMlVnZEdocGN5QnBibVJsZUZ4dUlDQmNkRngwYVdZZ0tHUnBjM1JoYm1ObElEd2dibVZoY21WemRFUnBjM1FwSUh0Y2JpQWdYSFJjZEZ4MGJtVmhjbVZ6ZEVScGMzUWdQU0JrYVhOMFlXNWpaVHRjYmlBZ1hIUmNkRngwYm1WaGNtVnpkRWx1WkdWNElEMGdhVHRjYmlBZ1hIUmNkRngwWW1WbWIzSmxJRDBnZUNBK0lHNXZaR1Z6VzJsZExuZzdYRzRnSUZ4MFhIUjlYRzVjYmlBZ1hIUjlYRzVjYmlBZ0lDQXZMeUJwWmlCdWIzUWdkbVZ5ZVNCamJHOXpaU0IwYnlCaGJua2dibTlrWlN3Z1kzSmxZWFJsSUdFZ2JtOWtaVnh1SUNCY2RHbG1JQ2h1WldGeVpYTjBSR2x6ZEQ0d0xqQTNLU0I3WEc1Y2JpQWdJQ0FnSUc1bFlYSmxjM1JKYm1SbGVDQTlJSFJvYVhNdVoyVjBTVzVrWlhoR2NtOXRXQ2gwYUdsekxtMXZkWE5sTG5ndmRHaHBjeTUzYVdSMGFDazdYRzVjYmlBZ1hIUmNkSFJvYVhNdWJtOWtaWE11YzNCc2FXTmxLRzVsWVhKbGMzUkpibVJsZUN3d0xDQnVaWGNnVUc5cGJuUW9lMXh1SUNCY2RGeDBYSFI0T2lCMGFHbHpMbTF2ZFhObExuZ3ZkR2hwY3k1M2FXUjBhQ3hjYmlBZ1hIUmNkRngwZVRvZ01TMTBhR2x6TG0xdmRYTmxMbmt2ZEdocGN5NW9aV2xuYUhSY2JpQWdYSFJjZEgwc0lIUm9hWE1wS1R0Y2JpQWdJQ0FnSUhSb2FYTXVhR0Z6VFc5MlpXUWdQU0IwY25WbE8xeHVYRzRnSUZ4MGZWeHVYRzRnSUZ4MGNtVjBkWEp1SUc1bFlYSmxjM1JKYm1SbGVEdGNiaUFnZlZ4dVhHNGdJR2RsZEVsdVpHVjRSbkp2YlZnb2VDa2dlMXh1SUNBZ0lHeGxkQ0JwYm1SbGVDQTlJREE3WEc0Z0lDQWdkR2hwY3k1dWIyUmxjeTVtYjNKRllXTm9LQ2h1YjJSbExHa3BJRDArSUh0Y2JpQWdJQ0FnSUdsbUlDaDBhR2x6TG01dlpHVnpXMmxkTG5nZ1BEMGdlQ2tnZTF4dUlDQWdJQ0FnSUNCcGJtUmxlQ0E5SUdrck1UdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOUtUdGNiaUFnSUNCeVpYUjFjbTRnYVc1a1pYZzdYRzRnSUgxY2JseHVJQ0J6WTJGc1pVNXZaR1VvYVNrZ2UxeHVYRzRnSUZ4MGJHVjBJR05zYVhCd1pXUllJRDBnYldGMGFDNWpiR2x3S0hSb2FYTXVibTlrWlhOYmFWMHVlQ3dnTUN3Z01TazdYRzRnSUZ4MGJHVjBJR05zYVhCd1pXUlpJRDBnYldGMGFDNWpiR2x3S0hSb2FYTXVibTlrWlhOYmFWMHVlU3dnTUN3Z01TazdYRzVjYmlBZ0lDQjBhR2x6TG01dlpHVnpXMmxkTG0xdmRtVW9JR05zYVhCd1pXUllMQ0JqYkdsd2NHVmtXU0FwTzF4dVhHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ1UyOXlkQ0IwYUdVZ2RHaHBjeTV3YjJsdWRITWdZWEp5WVhrZ1puSnZiU0JzWldaMExXMXZjM1FnY0c5cGJuUWdkRzhnY21sbmFIUXRiVzl6ZENCd2IybHVkQzRnV1c5MUlITm9iM1ZzWkNCdWIzUWdjbVZuZFd4aGNteDVJRzVsWldRZ2RHOGdkWE5sSUhSb2FYTXNJR2h2ZDJWMlpYSWdhWFFnYldGNUlHSmxJSFZ6WldaMWJDQnBaaUIwYUdVZ2NHOXBiblJ6SUdkbGRDQjFibTl5WkdWeVpXUXVYRzRnSUNvdlhHNGdJSE52Y25SUWIybHVkSE1vS1NCN1hHNGdJQ0FnZEdocGN5NXViMlJsY3k1emIzSjBLR1oxYm1OMGFXOXVLR0VzSUdJcGUxeHVJQ0FnSUNBZ2NtVjBkWEp1SUdFdWVDQStJR0l1ZUR0Y2JpQWdJQ0I5S1R0Y2JpQWdmVnh1WEc1Y2JpQWdMeW9xWEc0Z0lFRmtaQ0JoSUdKeVpXRnJjRzlwYm5RZ2IyNGdkR2hsSUdWdWRtVnNiM0JsTGx4dUlDQkFjR0Z5WVcwZ2VDQjdiblZ0WW1WeWZTQjRJR3h2WTJGMGFXOXVJRzltSUhSb1pTQndiMmx1ZEN3Z2JtOXliV0ZzYVhwbFpDQW9NQzB4S1Z4dUlDQkFjR0Z5WVcwZ2VTQjdiblZ0WW1WeWZTQjVJR3h2WTJGMGFXOXVJRzltSUhSb1pTQndiMmx1ZEN3Z2JtOXliV0ZzYVhwbFpDQW9NQzB4S1Z4dUlDQXFMMXh1SUNCaFpHUlFiMmx1ZENoNExIa3BJSHRjYmlBZ0lDQnNaWFFnYVc1a1pYZ2dQU0IwYUdsekxtNXZaR1Z6TG14bGJtZDBhRHRjYmx4dUlDQWdJSFJvYVhNdWMyOXlkRkJ2YVc1MGN5Z3BPMXh1WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHazhkR2hwY3k1dWIyUmxjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2FXWWdLSGdnUENCMGFHbHpMbTV2WkdWelcybGRMbmdwSUh0Y2JpQWdJQ0FnSUNBZ2FXNWtaWGdnUFNCcE8xeHVJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUgxY2JpQWdYSFI5WEc1Y2JpQWdJQ0IwYUdsekxtNXZaR1Z6TG5Od2JHbGpaU2hwYm1SbGVDd2dNQ3dnYm1WM0lGQnZhVzUwS0h0Y2JpQWdJQ0FnSUhnNklIZ3NYRzRnSUNBZ0lDQjVPaUI1WEc0Z0lDQWdmU3dnZEdocGN5a3BPMXh1WEc0Z0lDQWdkR2hwY3k1elkyRnNaVTV2WkdVb2FXNWtaWGdwTzF4dVhHNGdJQ0FnZEdocGN5NWpZV3hqZFd4aGRHVlFiMmx1ZEhNb0tUdGNiaUFnSUNCMGFHbHpMbVZ0YVhRb0oyTm9ZVzVuWlNjc2RHaHBjeTV3YjJsdWRITXBPMXh1WEc0Z0lDQWdkR2hwY3k1eVpXNWtaWElvS1R0Y2JpQWdmVnh1WEc1Y2JpQWdMeW9xWEc0Z0lFWnBibVFnZEdobElHeGxkbVZzSUdGMElHRWdZMlZ5ZEdGcGJpQjRJR3h2WTJGMGFXOXVJRzl1SUhSb1pTQmxiblpsYkc5d1pTNWNiaUFnUUhCaGNtRnRJSGdnZTI1MWJXSmxjbjBnVkdobElIZ2diRzlqWVhScGIyNGdkRzhnWm1sdVpDQjBhR1VnYkdWMlpXd2diMllzSUc1dmNtMWhiR2w2WldRZ01DMHhYRzRnSUNvdlhHNGdJSE5qWVc0b2VDa2dlMXh1SUNBZ0lDOHZJR1pwYm1RZ2MzVnljbTkxYm1ScGJtY2djRzlwYm5SelhHNGdJQ0FnYkdWMElHNWxlSFJKYm1SbGVDQTlJSFJvYVhNdVoyVjBTVzVrWlhoR2NtOXRXQ2g0S1R0Y2JpQWdJQ0JzWlhRZ2NISnBiM0pKYm1SbGVDQTlJRzVsZUhSSmJtUmxlQzB4TzF4dUlDQWdJR2xtSUNod2NtbHZja2x1WkdWNElEd2dNQ2tnZTF4dUlDQWdJQ0FnY0hKcGIzSkpibVJsZUNBOUlEQTdYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaHVaWGgwU1c1a1pYZ2dQajBnZEdocGN5NXViMlJsY3k1c1pXNW5kR2dwSUh0Y2JpQWdJQ0FnSUc1bGVIUkpibVJsZUNBOUlIUm9hWE11Ym05a1pYTXViR1Z1WjNSb0xURTdYRzRnSUNBZ2ZWeHVJQ0FnSUd4bGRDQndjbWx2Y2xCdmFXNTBJRDBnZEdocGN5NXViMlJsYzF0d2NtbHZja2x1WkdWNFhUdGNiaUFnSUNCc1pYUWdibVY0ZEZCdmFXNTBJRDBnZEdocGN5NXViMlJsYzF0dVpYaDBTVzVrWlhoZE8xeHVJQ0FnSUd4bGRDQnNiMk1nUFNCdFlYUm9Mbk5qWVd4bEtIZ3NjSEpwYjNKUWIybHVkQzU0TENCdVpYaDBVRzlwYm5RdWVDd2dNQ3dnTVNrN1hHNGdJQ0FnYkdWMElIWmhiSFZsSUQwZ2JXRjBhQzVwYm5SbGNuQW9iRzlqTEhCeWFXOXlVRzlwYm5RdWVTeHVaWGgwVUc5cGJuUXVlU2s3WEc0Z0lDQWdkR2hwY3k1bGJXbDBLQ2R6WTJGdUp5eDJZV3gxWlNrN1hHNGdJQ0FnY21WMGRYSnVJSFpoYkhWbE8xeHVJQ0I5WEc1Y2JseHVJQ0F2S2lwY2JpQWdUVzkyWlNCaElHSnlaV0ZyY0c5cGJuUWdiMjRnZEdobElHVnVkbVZzYjNCbExseHVJQ0JBY0dGeVlXMGdhVzVrWlhnZ2UyNTFiV0psY24wZ1ZHaGxJR2x1WkdWNElHOW1JSFJvWlNCaWNtVmhhM0J2YVc1MElIUnZJRzF2ZG1WY2JpQWdRSEJoY21GdElIZ2dlMjUxYldKbGNuMGdUbVYzSUhnZ2JHOWpZWFJwYjI0c0lHNXZjbTFoYkdsNlpXUWdNQzB4WEc0Z0lFQndZWEpoYlNCNUlIdHVkVzFpWlhKOUlFNWxkeUI1SUd4dlkyRjBhVzl1TENCdWIzSnRZV3hwZW1Wa0lEQXRNVnh1SUNBcUwxeHVJQ0J0YjNabFVHOXBiblFvYVc1a1pYZ3NlQ3g1S1NCN1hHNGdJQ0FnZEdocGN5NXViMlJsYzF0cGJtUmxlRjB1Ylc5MlpTaDRMSGtwTzF4dUlDQWdJSFJvYVhNdWMyTmhiR1ZPYjJSbEtHbHVaR1Y0S1R0Y2JpQWdJQ0IwYUdsekxtTmhiR04xYkdGMFpWQnZhVzUwY3lncE8xeHVJQ0FnSUhSb2FYTXVaVzFwZENnblkyaGhibWRsSnl4MGFHbHpMbkJ2YVc1MGN5azdYRzRnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmlBZ2ZWeHVYRzVjYmlBZ0x5b3FYRzRnSUUxdmRtVWdZU0JpY21WaGEzQnZhVzUwSUc5dUlIUm9aU0JsYm5abGJHOXdaU0JpZVNCaElHTmxjblJoYVc0Z1lXMXZkVzUwTGx4dUlDQkFjR0Z5WVcwZ2FXNWtaWGdnZTI1MWJXSmxjbjBnVkdobElHbHVaR1Y0SUc5bUlIUm9aU0JpY21WaGEzQnZhVzUwSUhSdklHMXZkbVZjYmlBZ1FIQmhjbUZ0SUhoUFptWnpaWFFnZTI1MWJXSmxjbjBnV0NCa2FYTndiR0ZqWlcxbGJuUXNJRzV2Y20xaGJHbDZaV1FnTUMweFhHNGdJRUJ3WVhKaGJTQjVUMlptYzJWMElIdHVkVzFpWlhKOUlGa2daR2x6Y0d4aFkyVnRaVzUwTENCdWIzSnRZV3hwZW1Wa0lEQXRNVnh1SUNBcUwxeHVJQ0JoWkdwMWMzUlFiMmx1ZENocGJtUmxlQ3g0VDJabWMyVjBMSGxQWm1aelpYUXBJSHRjYmlBZ0lDQjBhR2x6TG01dlpHVnpXMmx1WkdWNFhTNXRiM1psS0hSb2FYTXVibTlrWlhOYmFXNWtaWGhkTG5ncmVFOW1abk5sZEN4MGFHbHpMbTV2WkdWelcybHVaR1Y0WFM1NUszbFBabVp6WlhRcE8xeHVJQ0FnSUhSb2FYTXVjMk5oYkdWT2IyUmxLR2x1WkdWNEtUdGNiaUFnSUNCMGFHbHpMbU5oYkdOMWJHRjBaVkJ2YVc1MGN5Z3BPMXh1SUNBZ0lIUm9hWE11WlcxcGRDZ25ZMmhoYm1kbEp5eDBhR2x6TG5CdmFXNTBjeWs3WEc0Z0lDQWdkR2hwY3k1eVpXNWtaWElvS1R0Y2JpQWdmVnh1WEc1Y2JpQWdMeW9xWEc0Z0lGSmxiVzkyWlNCaElHSnlaV0ZyY0c5cGJuUWdabkp2YlNCMGFHVWdaVzUyWld4dmNHVXVYRzRnSUVCd1lYSmhiU0JwYm1SbGVDQjdiblZ0WW1WeWZTQkpibVJsZUNCdlppQjBhR1VnWW5KbFlXdHdiMmx1ZENCMGJ5QnlaVzF2ZG1WY2JpQWdLaTljYmlBZ1pHVnpkSEp2ZVZCdmFXNTBLR2x1WkdWNEtTQjdYRzRnSUNBZ2RHaHBjeTV1YjJSbGMxdHBibVJsZUYwdVpHVnpkSEp2ZVNncE8xeHVJQ0FnSUhSb2FYTXVZMkZzWTNWc1lYUmxVRzlwYm5SektDazdYRzRnSUNBZ2RHaHBjeTVsYldsMEtDZGphR0Z1WjJVbkxIUm9hWE11Y0c5cGJuUnpLVHRjYmlBZ0lDQjBhR2x6TG5KbGJtUmxjaWdwTzF4dUlDQjlYRzVjYmx4dUlDQXZLaXBjYmlBZ1VtVnRiM1psSUdGc2JDQmxlR2x6ZEdsdVp5QmljbVZoYTNCdmFXNTBjeUJoYm1RZ1lXUmtJR0Z1SUdWdWRHbHlaV3g1SUc1bGR5QnpaWFFnYjJZZ1luSmxZV3R3YjJsdWRITXVYRzRnSUVCd1lYSmhiU0JoYkd4UWIybHVkSE1nZTJGeWNtRjVmU0JCYmlCaGNuSmhlU0J2WmlCdlltcGxZM1J6SUhkcGRHZ2dlQzk1SUhCeWIzQmxjblJwWlhNZ0tHNXZjbTFoYkdsNlpXUWdNQzB4S1M0Z1JXRmphQ0J2WW1wbFkzUWdhVzRnZEdobElHRnljbUY1SUhOd1pXTnBabWxqWlhNZ2RHaGxJSGd2ZVNCc2IyTmhkR2x2YmlCdlppQmhJRzVsZHlCaWNtVmhhM0J2YVc1MElIUnZJR0psSUdGa1pHVmtMbHh1SUNBcUwxeHVJQ0J6WlhSUWIybHVkSE1vWVd4c1VHOXBiblJ6S1NCN1hHNGdJQ0FnZDJocGJHVWdLSFJvYVhNdWJtOWtaWE11YkdWdVozUm9LU0I3WEc0Z0lDQWdJQ0IwYUdsekxtNXZaR1Z6V3pCZExtUmxjM1J5YjNrb0tUdGNiaUFnSUNCOVhHNGdJQ0FnWVd4c1VHOXBiblJ6TG1admNrVmhZMmdvS0hCdmFXNTBLU0E5UGlCN1hHNGdJQ0FnSUNCMGFHbHpMbUZrWkZCdmFXNTBLSEJ2YVc1MExuZ3NjRzlwYm5RdWVTazdYRzRnSUNBZ2ZTazdYRzRnSUNBZ2RHaHBjeTVqWVd4amRXeGhkR1ZRYjJsdWRITW9LVHRjYmlBZ0lDQjBhR2x6TG1WdGFYUW9KMk5vWVc1blpTY3NkR2hwY3k1d2IybHVkSE1wTzF4dUlDQWdJSFJvYVhNdWNtVnVaR1Z5S0NrN1hHNGdJSDFjYmx4dWZWeHVYRzVjYmx4dUx5OGdWMFZDVUVGRFN5QkdUMDlVUlZJZ0x5OWNiaTh2SUM0dmZpOXFjMmhwYm5RdGJHOWhaR1Z5SVM0dmJHbGlMMmx1ZEdWeVptRmpaWE12Wlc1MlpXeHZjR1V1YW5NaUxDSW5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JteGxkQ0JrYjIwZ1BTQnlaWEYxYVhKbEtDY3VMaTkxZEdsc0wyUnZiU2NwTzF4dUx5OXNaWFFnYldGMGFDQTlJSEpsY1hWcGNtVW9KeTR1TDNWMGFXd3ZiV0YwYUNjcE8xeHViR1YwSUVsdWRHVnlabUZqWlNBOUlISmxjWFZwY21Vb0p5NHVMMk52Y21VdmFXNTBaWEptWVdObEp5azdYRzVjYmk4cUtseHVLaUJUY0dWamRISnZaM0poYlZ4dUtseHVLaUJBWkdWelkzSnBjSFJwYjI0Z1FYVmthVzhnYzNCbFkzUnlkVzBnZG1semRXRnNhWHBoZEdsdmJseHVLbHh1S2lCQVpHVnRieUE4YzNCaGJpQnVaWGgxY3kxMWFUMWNJbk53WldOMGNtOW5jbUZ0WENJK1BDOXpjR0Z1UGx4dUtseHVLaUJBWlhoaGJYQnNaVnh1S2lCMllYSWdjM0JsWTNSeWIyZHlZVzBnUFNCdVpYY2dUbVY0ZFhNdVUzQmxZM1J5YjJkeVlXMG9KeU4wWVhKblpYUW5LVnh1S2x4dUtpQkFaWGhoYlhCc1pWeHVLaUIyWVhJZ2MzQmxZM1J5YjJkeVlXMGdQU0J1WlhjZ1RtVjRkWE11VTNCbFkzUnliMmR5WVcwb0p5TjBZWEpuWlhRbkxIdGNiaW9nSUNBbmMybDZaU2M2SUZzek1EQXNNVFV3WFZ4dUtpQjlLVnh1S2x4dUtpQkFiM1YwY0hWMFhHNHFJQ1p1WW5Od08xeHVLaUJPYnlCbGRtVnVkSE5jYmlwY2Jpb3ZYRzVjYm1sdGNHOXlkQ0I3SUdOdmJuUmxlSFFnZlNCbWNtOXRJQ2N1TGk5dFlXbHVKenRjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnWTJ4aGMzTWdVM0JsWTNSeWIyZHlZVzBnWlhoMFpXNWtjeUJKYm5SbGNtWmhZMlVnZTF4dVhHNGdJR052Ym5OMGNuVmpkRzl5S0NrZ2UxeHVYRzRnSUNBZ2JHVjBJRzl3ZEdsdmJuTWdQU0JiSjNOallXeGxKeXduZG1Gc2RXVW5YVHRjYmx4dUlDQWdJR3hsZENCa1pXWmhkV3gwY3lBOUlIdGNiaUFnSUNBZ0lDZHphWHBsSnpvZ1d6TXdNQ3d4TlRCZFhHNGdJQ0FnZlR0Y2JseHVJQ0FnSUhOMWNHVnlLR0Z5WjNWdFpXNTBjeXh2Y0hScGIyNXpMR1JsWm1GMWJIUnpLVHRjYmx4dUlDQWdJSFJvYVhNdVkyOXVkR1Y0ZENBOUlHTnZiblJsZUhRb0tUc2dMeThnYW5Ob2FXNTBJR2xuYm05eVpUcHNhVzVsWEc1Y2JpQWdJQ0IwYUdsekxtRnVZV3g1YzJWeUlEMGdkR2hwY3k1amIyNTBaWGgwTG1OeVpXRjBaVUZ1WVd4NWMyVnlLQ2s3WEc0Z0lDQWdkR2hwY3k1aGJtRnNlWE5sY2k1bVpuUlRhWHBsSUQwZ01qQTBPRHRjYmlBZ0lDQjBhR2x6TG1KMVptWmxja3hsYm1kMGFDQTlJSFJvYVhNdVlXNWhiSGx6WlhJdVpuSmxjWFZsYm1ONVFtbHVRMjkxYm5RN1hHNGdJQ0FnZEdocGN5NWtZWFJoUVhKeVlYa2dQU0J1WlhjZ1ZXbHVkRGhCY25KaGVTaDBhR2x6TG1KMVptWmxja3hsYm1kMGFDazdYRzVjYmlBZ0lDQjBhR2x6TG1GamRHbDJaU0E5SUhSeWRXVTdYRzVjYmlBZ0lDQjBhR2x6TG5OdmRYSmpaU0E5SUdaaGJITmxPMXh1WEc0Z0lDQWdkR2hwY3k1cGJtbDBLQ2s3WEc1Y2JpQWdmVnh1WEc0Z0lHSjFhV3hrUm5KaGJXVW9LU0I3WEc0Z0lDQWdkR2hwY3k1allXNTJZWE1nUFNCdVpYY2daRzl0TGxOdFlYSjBRMkZ1ZG1GektIUm9hWE11Y0dGeVpXNTBLVHRjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblFnUFNCMGFHbHpMbU5oYm5aaGN5NWxiR1Z0Wlc1ME8xeHVJQ0I5WEc1Y2JpQWdjMmw2WlVsdWRHVnlabUZqWlNncElIdGNiaUFnSUNCMGFHbHpMbU5oYm5aaGN5NXlaWE5wZW1Vb2RHaHBjeTUzYVdSMGFDeDBhR2x6TG1obGFXZG9kQ2s3WEc0Z0lIMWNibHh1SUNCamIyeHZja2x1ZEdWeVptRmpaU2dwSUh0Y2JpQWdJQ0IwYUdsekxtTmhiblpoY3k1bGJHVnRaVzUwTG5OMGVXeGxMbUpoWTJ0bmNtOTFibVJEYjJ4dmNpQTlJSFJvYVhNdVkyOXNiM0p6TG1acGJHdzdYRzRnSUgxY2JseHVJQ0J5Wlc1a1pYSW9LU0I3WEc1Y2JpQWdJQ0JwWmlBb2RHaHBjeTVoWTNScGRtVXBJSHRjYmlBZ0lDQWdJSEpsY1hWbGMzUkJibWx0WVhScGIyNUdjbUZ0WlNoMGFHbHpMbkpsYm1SbGNpNWlhVzVrS0hSb2FYTXBLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjBhR2x6TG1GdVlXeDVjMlZ5TG1kbGRFSjVkR1ZHY21WeGRXVnVZM2xFWVhSaEtIUm9hWE11WkdGMFlVRnljbUY1S1R0Y2JseHVJQ0FnSUhSb2FYTXVZMkZ1ZG1GekxtTnZiblJsZUhRdVptbHNiRk4wZVd4bElEMGdkR2hwY3k1amIyeHZjbk11Wm1sc2JEdGNiaUFnSUNCMGFHbHpMbU5oYm5aaGN5NWpiMjUwWlhoMExtWnBiR3hTWldOMEtEQXNJREFzSUhSb2FYTXVZMkZ1ZG1GekxtVnNaVzFsYm5RdWQybGtkR2dzSUhSb2FYTXVZMkZ1ZG1GekxtVnNaVzFsYm5RdWFHVnBaMmgwS1R0Y2JseHVJQ0FnSUdsbUlDaDBhR2x6TG5OdmRYSmpaU0FtSmlCMGFHbHpMbVJoZEdGQmNuSmhlU2tnZTF4dVhHNGdJQ0FnSUNBdkwyTnZibk52YkdVdWJHOW5LSFJvYVhNdVpHRjBZVUZ5Y21GNUtUdGNibHh1SUNBZ0lDQWdiR1YwSUdKaGNsZHBaSFJvSUQwZ0tIUm9hWE11WTJGdWRtRnpMbVZzWlcxbGJuUXVkMmxrZEdnZ0x5QjBhR2x6TG1KMVptWmxja3hsYm1kMGFDazdYRzRnSUNBZ0lDQnNaWFFnWW1GeVNHVnBaMmgwTzF4dUlDQWdJQ0FnYkdWMElIZ2dQU0F3TzF4dVhHNGdJQ0FnSUNCc1pYUWdaR1ZtYVc1cGRHbHZiaUE5SUhSb2FYTXVZMkZ1ZG1GekxtVnNaVzFsYm5RdWQybGtkR2d2TlRBN1hHNWNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dkR2hwY3k1aWRXWm1aWEpNWlc1bmRHZzdJR2tnUFNCcEsyUmxabWx1YVhScGIyNHBJSHRjYmlBZ0lDQWdJQ0FnWW1GeVNHVnBaMmgwSUQwZ1RXRjBhQzV0WVhndVlYQndiSGtvYm5Wc2JDd2dkR2hwY3k1a1lYUmhRWEp5WVhrdWMzVmlZWEp5WVhrb2FTeHBLMlJsWm1sdWFYUnBiMjRwS1R0Y2JpQWdJQ0FnSUNBZ1ltRnlTR1ZwWjJoMElDODlJREkxTlR0Y2JpQWdJQ0FnSUNBZ1ltRnlTR1ZwWjJoMElDbzlJSFJvYVhNdVkyRnVkbUZ6TG1Wc1pXMWxiblF1YUdWcFoyaDBPMXh1WEc0Z0lDQWdJQ0FnSUhSb2FYTXVZMkZ1ZG1GekxtTnZiblJsZUhRdVptbHNiRk4wZVd4bElEMGdkR2hwY3k1amIyeHZjbk11WVdOalpXNTBPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtTmhiblpoY3k1amIyNTBaWGgwTG1acGJHeFNaV04wS0hnc2RHaHBjeTVqWVc1MllYTXVaV3hsYldWdWRDNW9aV2xuYUhRdFltRnlTR1ZwWjJoMExHSmhjbGRwWkhSb0ttUmxabWx1YVhScGIyNHNZbUZ5U0dWcFoyaDBLVHRjYmx4dUlDQWdJQ0FnSUNCNElDczlJQ2hpWVhKWGFXUjBhQ3BrWldacGJtbDBhVzl1S1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnUlhGMWFYWmhiR1Z1ZENCMGJ5QmNJbkJoZEdOb2FXNW5JR2x1WENJZ1lXNGdZWFZrYVc4Z2JtOWtaU0IwYnlCMmFYTjFZV3hwZW1VdUlFNVBWRVU2SUZsdmRTQmpZVzV1YjNRZ1kyOXVibVZqZENCaGRXUnBieUJ1YjJSbGN5QmhZM0p2YzNNZ2RIZHZJR1JwWm1abGNtVnVkQ0JoZFdScGJ5QmpiMjUwWlhoMGN5NGdUbVY0ZFhOVlNTQnlkVzV6SUdsMGN5QmhkV1JwYnlCaGJtRnNlWE5wY3lCdmJpQnBkSE1nYjNkdUlHRjFaR2x2SUdOdmJuUmxlSFFzSUU1bGVIVnpMbU52Ym5SbGVIUXVJRWxtSUhSb1pTQmhkV1JwYnlCdWIyUmxJSGx2ZFNCaGNtVWdkbWx6ZFdGc2FYcHBibWNnYVhNZ1kzSmxZWFJsWkNCdmJpQmhJR1JwWm1abGNtVnVkQ0JoZFdScGJ5QmpiMjUwWlhoMExDQjViM1VnZDJsc2JDQnVaV1ZrSUhSdklIUmxiR3dnVG1WNGRYTlZTU0IwYnlCMWMyVWdkR2hoZENCamIyNTBaWGgwSUdsdWMzUmxZV1E2SUdrdVpTNGdUbVY0ZFhNdVkyOXVkR1Y0ZENBOUlGbHZkWEpCZFdScGIwTnZiblJsZUhST1lXMWxMaUJHYjNJZ1pYaGhiWEJzWlN3Z2FXNGdWRzl1WlVwVElIQnliMnBsWTNSekxDQjBhR1VnYkdsdVpTQjNiM1ZzWkNCaVpUb2dUbVY0ZFhNdVkyOXVkR1Y0ZENBOUlGUnZibVV1WTI5dWRHVjRkQ0F1SUZkbElISmxZMjl0YldWdVpDQjBhR0YwSUhsdmRTQjNjbWwwWlNCMGFHRjBJR3hwYm1VZ2IyWWdZMjlrWlNCdmJteDVJRzl1WTJVZ1lYUWdkR2hsSUdKbFoybHVibWx1WnlCdlppQjViM1Z5SUhCeWIycGxZM1F1WEc0Z0lFQndZWEpoYlNCdWIyUmxJSHRCZFdScGIwNXZaR1Y5SUZSb1pTQmhkV1JwYnlCdWIyUmxJSFJ2SUhacGMzVmhiR2w2WlZ4dUlDQkFaWGhoYlhCc1pTQk9aWGgxY3k1amIyNTBaWGgwSUQwZ1ZHOXVaUzVqYjI1MFpYaDBJQzh2SUc5eUlHRnViM1JvWlhJZ1lYVmthVzhnWTI5dWRHVjRkQ0I1YjNVZ2FHRjJaU0JqY21WaGRHVmtYRzRnSUhOd1pXTjBjbTluY21GdExtTnZibTVsWTNRb0lGUnZibVV1VFdGemRHVnlJQ2s3WEc0Z0lDb3ZYRzRnSUdOdmJtNWxZM1FvYm05a1pTa2dlMXh1SUNBZ0lHbG1JQ2gwYUdsekxuTnZkWEpqWlNrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVrYVhOamIyNXVaV04wS0NrN1hHNGdJQ0FnZlZ4dUlDQWdJSFJvYVhNdWMyOTFjbU5sSUQwZ2JtOWtaVHRjYmlBZ0lDQjBhR2x6TG5OdmRYSmpaUzVqYjI1dVpXTjBLSFJvYVhNdVlXNWhiSGx6WlhJcE8xeHVJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtDazdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdVM1J2Y0NCMmFYTjFZV3hwZW1sdVp5QjBhR1VnYzI5MWNtTmxJRzV2WkdVZ1lXNWtJR1JwYzJOdmJtNWxZM1FnYVhRdVhHNGdJQ292WEc0Z0lHUnBjMk52Ym01bFkzUW9LU0I3WEc0Z0lDQWdkR2hwY3k1emIzVnlZMlV1WkdselkyOXVibVZqZENoMGFHbHpMbUZ1WVd4NWMyVnlLVHRjYmlBZ0lDQjBhR2x6TG5OdmRYSmpaU0E5SUc1MWJHdzdYRzRnSUgxY2JseHVJQ0JqYkdsamF5Z3BJSHRjYmlBZ0lDQjBhR2x6TG1GamRHbDJaU0E5SUNGMGFHbHpMbUZqZEdsMlpUdGNiaUFnSUNCMGFHbHpMbkpsYm1SbGNpZ3BPMXh1SUNCOVhHNWNiaUFnWTNWemRHOXRSR1Z6ZEhKdmVTZ3BJSHRjYmlBZ0lDQjBhR2x6TG1GamRHbDJaU0E5SUdaaGJITmxPMXh1SUNCOVhHNWNibjFjYmx4dVhHNWNiaTh2SUZkRlFsQkJRMHNnUms5UFZFVlNJQzh2WEc0dkx5QXVMMzR2YW5Ob2FXNTBMV3h2WVdSbGNpRXVMMnhwWWk5cGJuUmxjbVpoWTJWekwzTndaV04wY205bmNtRnRMbXB6SWl3aUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1c1pYUWdaRzl0SUQwZ2NtVnhkV2x5WlNnbkxpNHZkWFJwYkM5a2IyMG5LVHRjYm14bGRDQnRZWFJvSUQwZ2NtVnhkV2x5WlNnbkxpNHZkWFJwYkM5dFlYUm9KeWs3WEc1c1pYUWdTVzUwWlhKbVlXTmxJRDBnY21WeGRXbHlaU2duTGk0dlkyOXlaUzlwYm5SbGNtWmhZMlVuS1R0Y2JseHVYRzR2S2lwY2Jpb2dUV1YwWlhKY2JpcGNiaW9nUUdSbGMyTnlhWEIwYVc5dUlGTjBaWEpsYnlCa1pXTnBZbVZzSUcxbGRHVnlYRzRxWEc0cUlFQmtaVzF2SUR4emNHRnVJRzVsZUhWekxYVnBQVndpYldWMFpYSmNJajQ4TDNOd1lXNCtYRzRxWEc0cUlFQmxlR0Z0Y0d4bFhHNHFJSFpoY2lCdFpYUmxjaUE5SUc1bGR5Qk9aWGgxY3k1TlpYUmxjaWduSTNSaGNtZGxkQ2NwWEc0cVhHNHFJRUJsZUdGdGNHeGxYRzRxSUhaaGNpQnRaWFJsY2lBOUlHNWxkeUJPWlhoMWN5NU5aWFJsY2lnbkkzUmhjbWRsZENjc2UxeHVLaUFnSUhOcGVtVTZJRnMzTlN3M05WMWNiaW9nZlNsY2JpcGNiaW9nUUc5MWRIQjFkRnh1S2lBbWJtSnpjRHRjYmlvZ1RtOGdaWFpsYm5SelhHNHFYRzRxTDF4dVhHNXBiWEJ2Y25RZ2V5QmpiMjUwWlhoMElIMGdabkp2YlNBbkxpNHZiV0ZwYmljN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHTnNZWE56SUUxbGRHVnlJR1Y0ZEdWdVpITWdTVzUwWlhKbVlXTmxJSHRjYmx4dUlDQmpiMjV6ZEhKMVkzUnZjaWdwSUh0Y2JseHVJQ0FnSUd4bGRDQnZjSFJwYjI1eklEMGdXeWR6WTJGc1pTY3NKM1poYkhWbEoxMDdYRzVjYmlBZ0lDQnNaWFFnWkdWbVlYVnNkSE1nUFNCN1hHNGdJQ0FnSUNBbmMybDZaU2M2SUZzek1Dd3hNREJkWEc0Z0lDQWdmVHRjYmx4dUlDQWdJSE4xY0dWeUtHRnlaM1Z0Wlc1MGN5eHZjSFJwYjI1ekxHUmxabUYxYkhSektUdGNibHh1SUNBZ0lIUm9hWE11WTI5dWRHVjRkQ0E5SUdOdmJuUmxlSFFvS1RzZ0x5OGdhbk5vYVc1MElHbG5ibTl5WlRwc2FXNWxYRzVjYmlBZ0lDQjBhR2x6TG1Ob1lXNXVaV3h6SUQwZ01qdGNibHh1SUNBZ0lIUm9hWE11YzNCc2FYUjBaWElnUFNCMGFHbHpMbU52Ym5SbGVIUXVZM0psWVhSbFEyaGhibTVsYkZOd2JHbDBkR1Z5S0NCMGFHbHpMbU5vWVc1dVpXeHpJQ2s3WEc1Y2JpQWdJQ0IwYUdsekxtRnVZV3g1YzJWeWN5QTlJRnRkTzF4dVhHNGdJQ0FnWm05eUlDaHNaWFFnYVQwd095QnBQSFJvYVhNdVkyaGhibTVsYkhNN0lHa3JLeWtnZTF4dUlDQWdJQ0FnYkdWMElHRnVZV3g1YzJWeUlEMGdkR2hwY3k1amIyNTBaWGgwTG1OeVpXRjBaVUZ1WVd4NWMyVnlLQ2s3WEc0Z0lDQWdJQ0IwYUdsekxuTndiR2wwZEdWeUxtTnZibTVsWTNRb1lXNWhiSGx6WlhJc2FTazdYRzRnSUNBZ0lDQmhibUZzZVhObGNpNW1ablJUYVhwbElEMGdNVEF5TkR0Y2JpQWdJQ0FnSUdGdVlXeDVjMlZ5TG5OdGIyOTBhR2x1WjFScGJXVkRiMjV6ZEdGdWRDQTlJREU3WEc0Z0lDQWdJQ0IwYUdsekxtRnVZV3g1YzJWeWN5NXdkWE5vS0NCaGJtRnNlWE5sY2lBcE8xeHVJQ0FnSUgxY2JpQWdJQ0IwYUdsekxtSjFabVpsY2t4bGJtZDBhQ0E5SUhSb2FYTXVZVzVoYkhselpYSnpXekJkTG1aeVpYRjFaVzVqZVVKcGJrTnZkVzUwTzF4dUlDQWdJSFJvYVhNdVpHRjBZVUZ5Y21GNUlEMGdibVYzSUVac2IyRjBNekpCY25KaGVTaDBhR2x6TG1KMVptWmxja3hsYm1kMGFDazdYRzVjYmk4cVhHNGdJQ0FnTHk4Z1lXUmtJR3hwYm1WaGNpQm5jbUZrYVdWdWRGeHVJQ0FnSUhaaGNpQm5jbVFnUFNCallXNTJZWE5EZEhndVkzSmxZWFJsVEdsdVpXRnlSM0poWkdsbGJuUW9NQ3dnTUN3Z01Dd2dZMkZ1ZG1GekxtaGxhV2RvZENrN1hHNGdJQ0FnTHk4Z2JHbG5hSFFnWW14MVpWeHVJQ0FnSUdkeVpDNWhaR1JEYjJ4dmNsTjBiM0FvTUN3Z0p5TXdNREFuS1R0Y2JpQWdJQ0JuY21RdVlXUmtRMjlzYjNKVGRHOXdLREF1TWl3Z0p5TmlZbUluS1R0Y2JpQWdJQ0JuY21RdVlXUmtRMjlzYjNKVGRHOXdLREF1TkN3Z0p5TmtNVGduS1R0Y2JpQWdJQ0F2THlCa1lYSnJJR0pzZFdWY2JpQWdJQ0JuY21RdVlXUmtRMjlzYjNKVGRHOXdLREVzSUNjalpERTRKeWs3WEc0Z0lDQWdZMkZ1ZG1GelEzUjRMbVpwYkd4VGRIbHNaU0E5SUdkeVpEc2dLaTljYmx4dUlDQWdJSFJvYVhNdVlXTjBhWFpsSUQwZ2RISjFaVHRjYmx4dUlDQWdJSFJvYVhNdVpHSWdQU0F0U1c1bWFXNXBkSGs3WEc1Y2JpQWdJQ0IwYUdsekxtbHVhWFFvS1R0Y2JseHVJQ0FnSUhSb2FYTXViV1YwWlhKWGFXUjBhQ0E5SUhSb2FYTXVZMkZ1ZG1GekxtVnNaVzFsYm5RdWQybGtkR2d2ZEdocGN5NWphR0Z1Ym1Wc2N6dGNibHh1SUNBZ0lIUm9hWE11Y21WdVpHVnlLQ2s3WEc1Y2JpQWdmVnh1WEc0Z0lHSjFhV3hrUm5KaGJXVW9LU0I3WEc0Z0lDQWdkR2hwY3k1allXNTJZWE1nUFNCdVpYY2daRzl0TGxOdFlYSjBRMkZ1ZG1GektIUm9hWE11Y0dGeVpXNTBLVHRjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblFnUFNCMGFHbHpMbU5oYm5aaGN5NWxiR1Z0Wlc1ME8xeHVJQ0I5WEc1Y2JpQWdjMmw2WlVsdWRHVnlabUZqWlNncElIdGNiaUFnSUNCMGFHbHpMbU5oYm5aaGN5NXlaWE5wZW1Vb2RHaHBjeTUzYVdSMGFDeDBhR2x6TG1obGFXZG9kQ2s3WEc0Z0lIMWNibHh1SUNCamIyeHZja2x1ZEdWeVptRmpaU2dwSUh0Y2JpQWdJQ0IwYUdsekxtTmhiblpoY3k1bGJHVnRaVzUwTG5OMGVXeGxMbUpoWTJ0bmNtOTFibVJEYjJ4dmNpQTlJSFJvYVhNdVkyOXNiM0p6TG1acGJHdzdYRzRnSUgxY2JseHVJQ0J5Wlc1a1pYSW9LU0I3WEc1Y2JpQWdJQ0JwWmlBb2RHaHBjeTVoWTNScGRtVXBJSHRjYmlBZ0lDQWdJSEpsY1hWbGMzUkJibWx0WVhScGIyNUdjbUZ0WlNoMGFHbHpMbkpsYm1SbGNpNWlhVzVrS0hSb2FYTXBLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjBhR2x6TG1OaGJuWmhjeTVqYjI1MFpYaDBMbVpwYkd4VGRIbHNaU0E5SUhSb2FYTXVZMjlzYjNKekxtWnBiR3c3WEc0Z0lDQWdkR2hwY3k1allXNTJZWE11WTI5dWRHVjRkQzVtYVd4c1VtVmpkQ2d3TENBd0xDQjBhR2x6TG1OaGJuWmhjeTVsYkdWdFpXNTBMbmRwWkhSb0lDd2dkR2hwY3k1allXNTJZWE11Wld4bGJXVnVkQzVvWldsbmFIUXBPMXh1WEc0Z0lDQWdabTl5SUNoc1pYUWdhVDB3TzJrOGRHaHBjeTVoYm1Gc2VYTmxjbk11YkdWdVozUm9PMmtyS3lrZ2UxeHVYRzRnSUNBZ0lDQnBaaUFvZEdocGN5NXpiM1Z5WTJVcElIdGNibHh1SUNBZ0lDQWdJQ0IwYUdsekxtRnVZV3g1YzJWeWMxdHBYUzVuWlhSR2JHOWhkRlJwYldWRWIyMWhhVzVFWVhSaEtIUm9hWE11WkdGMFlVRnljbUY1S1R0Y2JseHVJQ0FnSUNBZ0lDQnNaWFFnY20xeklEMGdNRHRjYmx4dUlDQWdJQ0FnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElIUm9hWE11WkdGMFlVRnljbUY1TG14bGJtZDBhRHNnYVNzcktYdGNiaUFnSUNBZ0lDQWdJQ0FnSUNCeWJYTWdLejBnS0hSb2FYTXVaR0YwWVVGeWNtRjVXMmxkSUNvZ2RHaHBjeTVrWVhSaFFYSnlZWGxiYVYwcE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnY20xeklEMGdUV0YwYUM1emNYSjBLSEp0Y3lBdklIUm9hWE11WkdGMFlVRnljbUY1TG14bGJtZDBhQ2s3WEc1Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVrWWlBOUlESXdJQ29nVFdGMGFDNXNiMmN4TUNoeWJYTXBPMXh1WEc0Z0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0hSb2FYTXVaR0lnUGlBdE1qQXdJQ1ltSUhSb2FYTXVaR0lnSVQwOUlDMUpibVpwYm1sMGVTa2dlMXh1SUNBZ0lDQWdJQ0IwYUdsekxtUmlJQzA5SURFN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbVJpSUQwZ0xVbHVabWx1YVhSNU8xeHVJQ0FnSUNBZ2ZWeHVYRzVjYmlBZ0lDQWdJQzh2WTI5dWMyOXNaUzVzYjJjb1pHSXBYRzVjYmlBZ0lDQWdJR2xtSUNoMGFHbHpMbVJpSUQ0Z0xUY3dLU0I3WEc1Y2JpQWdJQ0FnSUNBZ2JHVjBJR3hwYm1WaGNpQTlJRzFoZEdndWJtOXliV0ZzYVhwbEtIUm9hWE11WkdJc0xUY3dMRFVwTzF4dUlDQWdJQ0FnSUNCc1pYUWdaWGh3SUQwZ2JHbHVaV0Z5SUNvZ2JHbHVaV0Z5TzF4dUlDQWdJQ0FnSUNCc1pYUWdlU0E5SUcxaGRHZ3VjMk5oYkdVb1pYaHdMREFzTVN4MGFHbHpMbVZzWlcxbGJuUXVhR1ZwWjJoMExEQXBPMXh1WEc0Z0lDQWdJQ0FnSUhSb2FYTXVZMkZ1ZG1GekxtTnZiblJsZUhRdVptbHNiRk4wZVd4bElEMGdkR2hwY3k1amIyeHZjbk11WVdOalpXNTBPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtTmhiblpoY3k1amIyNTBaWGgwTG1acGJHeFNaV04wS0hSb2FYTXViV1YwWlhKWGFXUjBhQ3BwTEhrc2RHaHBjeTV0WlhSbGNsZHBaSFJvTEhSb2FYTXVZMkZ1ZG1GekxtVnNaVzFsYm5RdWFHVnBaMmgwSUMwZ2VTazdYRzVjYmlBZ0lDQWdJQ0FnTHk5amIyNXpiMnhsTG14dlp5aGNJbkpsYm1SbGNtbHVaeTR1TGx3aUtWeHVYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQjlYRzVjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0JGY1hWcGRtRnNaVzUwSUhSdklGd2ljR0YwWTJocGJtY2dhVzVjSWlCaGJpQmhkV1JwYnlCdWIyUmxJSFJ2SUhacGMzVmhiR2w2WlM0Z1RrOVVSVG9nV1c5MUlHTmhibTV2ZENCamIyNXVaV04wSUdGMVpHbHZJRzV2WkdWeklHRmpjbTl6Y3lCMGQyOGdaR2xtWm1WeVpXNTBJR0YxWkdsdklHTnZiblJsZUhSekxpQk9aWGgxYzFWSklISjFibk1nYVhSeklHRjFaR2x2SUdGdVlXeDVjMmx6SUc5dUlHbDBjeUJ2ZDI0Z1lYVmthVzhnWTI5dWRHVjRkQ3dnVG1WNGRYTXVZMjl1ZEdWNGRDNGdTV1lnZEdobElHRjFaR2x2SUc1dlpHVWdlVzkxSUdGeVpTQjJhWE4xWVd4cGVtbHVaeUJwY3lCamNtVmhkR1ZrSUc5dUlHRWdaR2xtWm1WeVpXNTBJR0YxWkdsdklHTnZiblJsZUhRc0lIbHZkU0IzYVd4c0lHNWxaV1FnZEc4Z2RHVnNiQ0JPWlhoMWMxVkpJSFJ2SUhWelpTQjBhR0YwSUdOdmJuUmxlSFFnYVc1emRHVmhaRG9nYVM1bExpQk9aWGgxY3k1amIyNTBaWGgwSUQwZ1dXOTFja0YxWkdsdlEyOXVkR1Y0ZEU1aGJXVXVJRVp2Y2lCbGVHRnRjR3hsTENCcGJpQlViMjVsU2xNZ2NISnZhbVZqZEhNc0lIUm9aU0JzYVc1bElIZHZkV3hrSUdKbE9pQk9aWGgxY3k1amIyNTBaWGgwSUQwZ1ZHOXVaUzVqYjI1MFpYaDBJQzRnVjJVZ2NtVmpiMjF0Wlc1a0lIUm9ZWFFnZVc5MUlIZHlhWFJsSUhSb1lYUWdiR2x1WlNCdlppQmpiMlJsSUc5dWJIa2diMjVqWlNCaGRDQjBhR1VnWW1WbmFXNXVhVzVuSUc5bUlIbHZkWElnY0hKdmFtVmpkQzVjYmlBZ1FIQmhjbUZ0SUc1dlpHVWdlMEYxWkdsdlRtOWtaWDBnVkdobElHRjFaR2x2SUc1dlpHVWdkRzhnZG1semRXRnNhWHBsWEc0Z0lFQndZWEpoYlNCamFHRnVibVZzY3lCN2JuVnRZbVZ5ZlNBb2IzQjBhVzl1WVd3cElGUm9aU0J1ZFcxaVpYSWdiMllnWTJoaGJtNWxiSE1nYVc0Z2RHaGxJSE52ZFhKalpTQnViMlJsSUhSdklIZGhkR05vTGlCSlppQnViM1FnYzNCbFkybG1hV1ZrTENCMGFHVWdhVzUwWlhKbVlXTmxJSGRwYkd3Z2JHOXZheUJtYjNJZ1lTQXVZMmhoYm01bGJFTnZkVzUwSUhCeWIzQmxjblI1SUc5dUlIUm9aU0JwYm5CMWRDQnViMlJsTGlCSlppQnBkQ0JrYjJWeklHNXZkQ0JsZUdsemRDd2dkR2hsSUdsdWRHVnlabUZqWlNCM2FXeHNJR1JsWm1GMWJIUWdkRzhnTVNCamFHRnVibVZzTGx4dUlDQkFaWGhoYlhCc1pTQk9aWGgxY3k1amIyNTBaWGgwSUQwZ1ZHOXVaUzVqYjI1MFpYaDBJQzh2SUc5eUlHRnViM1JvWlhJZ1lYVmthVzhnWTI5dWRHVjRkQ0I1YjNVZ2FHRjJaU0JqY21WaGRHVmtYRzRnSUcxbGRHVnlMbU52Ym01bFkzUW9JRlJ2Ym1VdVRXRnpkR1Z5TENBeUlDazdYRzRnSUNvdlhHNWNiaUFnWTI5dWJtVmpkQ2h1YjJSbExHTm9ZVzV1Wld4ektTQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdWMyOTFjbU5sS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbVJwYzJOdmJtNWxZM1FvS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdMeTkwYUdsekxtUjFiVzE1TG1ScGMyTnZibTVsWTNRb2RHaHBjeTV6Y0d4cGRIUmxjaWs3WEc1Y2JpQWdJQ0JwWmlBb1kyaGhibTVsYkhNcElIdGNiaUFnSUNBZ0lIUm9hWE11WTJoaGJtNWxiSE1nUFNCamFHRnVibVZzY3p0Y2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0c1dlpHVXVZMmhoYm01bGJFTnZkVzUwS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbU5vWVc1dVpXeHpJRDBnYm05a1pTNWphR0Z1Ym1Wc1EyOTFiblE3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lIUm9hWE11WTJoaGJtNWxiSE1nUFNBeU8xeHVJQ0FnSUgxY2JpQWdJQ0IwYUdsekxtMWxkR1Z5VjJsa2RHZ2dQU0IwYUdsekxtTmhiblpoY3k1bGJHVnRaVzUwTG5kcFpIUm9MM1JvYVhNdVkyaGhibTVsYkhNN1hHNWNiaUFnSUNCMGFHbHpMbk52ZFhKalpTQTlJRzV2WkdVN1hHNGdJQ0FnZEdocGN5NXpiM1Z5WTJVdVkyOXVibVZqZENoMGFHbHpMbk53YkdsMGRHVnlLVHRjYmx4dUlDQXZMeUFnZEdocGN5NXlaVzVrWlhJb0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQlRkRzl3SUhacGMzVmhiR2w2YVc1bklIUm9aU0J6YjNWeVkyVWdibTlrWlNCaGJtUWdaR2x6WTI5dWJtVmpkQ0JwZEM1Y2JpQWdLaTljYmlBZ1pHbHpZMjl1Ym1WamRDZ3BJSHRjYmx4dUlDQWdJSFJvYVhNdWMyOTFjbU5sTG1ScGMyTnZibTVsWTNRb2RHaHBjeTV6Y0d4cGRIUmxjaWs3WEc0Z0lDQWdkR2hwY3k1emIzVnlZMlVnUFNCbVlXeHpaVHRjYmlBZ0x5OGdJSFJvYVhNdVpIVnRiWGt1WTI5dWJtVmpkQ2gwYUdsekxuTndiR2wwZEdWeUtUdGNiaUFnSUNCMGFHbHpMbTFsZEdWeVYybGtkR2dnUFNCMGFHbHpMbU5oYm5aaGN5NWxiR1Z0Wlc1MExuZHBaSFJvTDNSb2FYTXVZMmhoYm01bGJITTdYRzVjYmlBZ2ZWeHVYRzRnSUdOc2FXTnJLQ2tnZTF4dUlDQWdJSFJvYVhNdVlXTjBhWFpsSUQwZ0lYUm9hWE11WVdOMGFYWmxPMXh1SUNBZ0lIUm9hWE11Y21WdVpHVnlLQ2s3WEc0Z0lIMWNibHh1SUNCamRYTjBiMjFFWlhOMGNtOTVLQ2tnZTF4dUlDQWdJSFJvYVhNdVlXTjBhWFpsSUQwZ1ptRnNjMlU3WEc0Z0lIMWNibHh1ZlZ4dVhHNWNibHh1THk4Z1YwVkNVRUZEU3lCR1QwOVVSVklnTHk5Y2JpOHZJQzR2Zmk5cWMyaHBiblF0Ykc5aFpHVnlJUzR2YkdsaUwybHVkR1Z5Wm1GalpYTXZiV1YwWlhJdWFuTWlMQ0luZFhObElITjBjbWxqZENjN1hHNWNibXhsZENCa2IyMGdQU0J5WlhGMWFYSmxLQ2N1TGk5MWRHbHNMMlJ2YlNjcE8xeHViR1YwSUVsdWRHVnlabUZqWlNBOUlISmxjWFZwY21Vb0p5NHVMMk52Y21VdmFXNTBaWEptWVdObEp5azdYRzVjYmk4cUtseHVLaUJQYzJOcGJHeHZjMk52Y0dWY2JpcGNiaW9nUUdSbGMyTnlhWEIwYVc5dUlGWnBjM1ZoYkdsNlpYTWdZU0IzWVhabFptOXliU2R6SUhOMGNtVmhiU0J2WmlCMllXeDFaWE11WEc0cVhHNHFJRUJrWlcxdklEeHpjR0Z1SUc1bGVIVnpMWFZwUFZ3aWIzTmphV3hzYjNOamIzQmxYQ0krUEM5emNHRnVQbHh1S2x4dUtpQkFaWGhoYlhCc1pWeHVLaUIyWVhJZ2IzTmphV3hzYjNOamIzQmxJRDBnYm1WM0lFNWxlSFZ6TGs5elkybHNiRzl6WTI5d1pTZ25JM1JoY21kbGRDY3BYRzRxWEc0cUlFQmxlR0Z0Y0d4bFhHNHFJSFpoY2lCdmMyTnBiR3h2YzJOdmNHVWdQU0J1WlhjZ1RtVjRkWE11VDNOamFXeHNiM05qYjNCbEtDY2pkR0Z5WjJWMEp5eDdYRzRxSUNBZ0ozTnBlbVVuT2lCYk16QXdMREUxTUYxY2Jpb2dmU2xjYmlwY2Jpb2dRRzkxZEhCMWRGeHVLaUFtYm1KemNEdGNiaW9nVG04Z1pYWmxiblJ6WEc0cVhHNHFMMXh1WEc1cGJYQnZjblFnZXlCamIyNTBaWGgwSUgwZ1puSnZiU0FuTGk0dmJXRnBiaWM3WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdOc1lYTnpJRTl6WTJsc2JHOXpZMjl3WlNCbGVIUmxibVJ6SUVsdWRHVnlabUZqWlNCN1hHNWNiaUFnWTI5dWMzUnlkV04wYjNJb0tTQjdYRzVjYmlBZ0lDQnNaWFFnYjNCMGFXOXVjeUE5SUZzbmMyTmhiR1VuTENkMllXeDFaU2RkTzF4dVhHNGdJQ0FnYkdWMElHUmxabUYxYkhSeklEMGdlMXh1SUNBZ0lDQWdKM05wZW1Vbk9pQmJNekF3TERFMU1GMWNiaUFnSUNCOU8xeHVYRzRnSUNBZ2MzVndaWElvWVhKbmRXMWxiblJ6TEc5d2RHbHZibk1zWkdWbVlYVnNkSE1wTzF4dVhHNGdJQ0FnZEdocGN5NWpiMjUwWlhoMElEMGdZMjl1ZEdWNGRDZ3BPeUF2THlCcWMyaHBiblFnYVdkdWIzSmxPbXhwYm1WY2JseHVJQ0FnSUhSb2FYTXVZVzVoYkhselpYSWdQU0IwYUdsekxtTnZiblJsZUhRdVkzSmxZWFJsUVc1aGJIbHpaWElvS1R0Y2JpQWdJQ0IwYUdsekxtRnVZV3g1YzJWeUxtWm1kRk5wZW1VZ1BTQXlNRFE0TzF4dUlDQWdJSFJvYVhNdVluVm1abVZ5VEdWdVozUm9JRDBnZEdocGN5NWhibUZzZVhObGNpNW1jbVZ4ZFdWdVkzbENhVzVEYjNWdWREdGNiaUFnSUNCMGFHbHpMbVJoZEdGQmNuSmhlU0E5SUc1bGR5QlZhVzUwT0VGeWNtRjVLSFJvYVhNdVluVm1abVZ5VEdWdVozUm9LVHRjYmlBZ0lDQjBhR2x6TG1GdVlXeDVjMlZ5TG1kbGRFSjVkR1ZVYVcxbFJHOXRZV2x1UkdGMFlTaDBhR2x6TG1SaGRHRkJjbkpoZVNrN1hHNWNiaUFnSUNCMGFHbHpMbUZqZEdsMlpTQTlJSFJ5ZFdVN1hHNWNiaUFnSUNCMGFHbHpMbk52ZFhKalpTQTlJR1poYkhObE8xeHVYRzRnSUNBZ2RHaHBjeTVwYm1sMEtDazdYRzVjYmlBZ0lDQjBhR2x6TG5KbGJtUmxjaWdwTzF4dUlDQjlYRzVjYmlBZ1luVnBiR1JHY21GdFpTZ3BJSHRjYmlBZ0lDQjBhR2x6TG1OaGJuWmhjeUE5SUc1bGR5QmtiMjB1VTIxaGNuUkRZVzUyWVhNb2RHaHBjeTV3WVhKbGJuUXBPMXh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkQ0E5SUhSb2FYTXVZMkZ1ZG1GekxtVnNaVzFsYm5RN1hHNGdJSDFjYmx4dUlDQnphWHBsU1c1MFpYSm1ZV05sS0NrZ2UxeHVJQ0FnSUhSb2FYTXVZMkZ1ZG1GekxuSmxjMmw2WlNoMGFHbHpMbmRwWkhSb0xIUm9hWE11YUdWcFoyaDBLVHRjYmlBZ2ZWeHVYRzRnSUdOdmJHOXlTVzUwWlhKbVlXTmxLQ2tnZTF4dUlDQWdJSFJvYVhNdVkyRnVkbUZ6TG1Wc1pXMWxiblF1YzNSNWJHVXVZbUZqYTJkeWIzVnVaRU52Ykc5eUlEMGdkR2hwY3k1amIyeHZjbk11Wm1sc2JEdGNiaUFnZlZ4dVhHNGdJSEpsYm1SbGNpZ3BJSHRjYmx4dUlDQWdJR2xtSUNoMGFHbHpMbUZqZEdsMlpTa2dlMXh1SUNBZ0lDQWdjbVZ4ZFdWemRFRnVhVzFoZEdsdmJrWnlZVzFsS0hSb2FYTXVjbVZ1WkdWeUxtSnBibVFvZEdocGN5a3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11WVc1aGJIbHpaWEl1WjJWMFFubDBaVlJwYldWRWIyMWhhVzVFWVhSaEtIUm9hWE11WkdGMFlVRnljbUY1S1R0Y2JseHVJQ0FnSUhSb2FYTXVZMkZ1ZG1GekxtTnZiblJsZUhRdVptbHNiRk4wZVd4bElEMGdkR2hwY3k1amIyeHZjbk11Wm1sc2JEdGNiaUFnSUNCMGFHbHpMbU5oYm5aaGN5NWpiMjUwWlhoMExtWnBiR3hTWldOMEtEQXNJREFzSUhSb2FYTXVZMkZ1ZG1GekxtVnNaVzFsYm5RdWQybGtkR2dzSUhSb2FYTXVZMkZ1ZG1GekxtVnNaVzFsYm5RdWFHVnBaMmgwS1R0Y2JseHVJQ0FnSUhSb2FYTXVZMkZ1ZG1GekxtTnZiblJsZUhRdWJHbHVaVmRwWkhSb0lEMGdmbjRvZEdocGN5NW9aV2xuYUhRZ0x5QXhNREFnS3lBeUtUdGNiaUFnSUNCMGFHbHpMbU5oYm5aaGN5NWpiMjUwWlhoMExuTjBjbTlyWlZOMGVXeGxJRDBnZEdocGN5NWpiMnh2Y25NdVlXTmpaVzUwTzF4dVhHNGdJQ0FnZEdocGN5NWpZVzUyWVhNdVkyOXVkR1Y0ZEM1aVpXZHBibEJoZEdnb0tUdGNibHh1SUNBZ0lHbG1JQ2gwYUdsekxuTnZkWEpqWlNrZ2UxeHVYRzRnSUNBZ0lDQjJZWElnYzJ4cFkyVlhhV1IwYUNBOUlIUm9hWE11WTJGdWRtRnpMbVZzWlcxbGJuUXVkMmxrZEdnZ0tpQXhMakFnTHlCMGFHbHpMbUoxWm1abGNreGxibWQwYUR0Y2JpQWdJQ0FnSUhaaGNpQjRJRDBnTUR0Y2JseHVJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BDQjBhR2x6TG1KMVptWmxja3hsYm1kMGFEc2dhU3NyS1NCN1hHNWNiaUFnSUNBZ0lDQWdkbUZ5SUhZZ1BTQjBhR2x6TG1SaGRHRkJjbkpoZVZ0cFhTQXZJREV5T0M0d08xeHVJQ0FnSUNBZ0lDQjJZWElnZVNBOUlIWWdLaUIwYUdsekxtTmhiblpoY3k1bGJHVnRaVzUwTG1obGFXZG9kQ0F2SURJN1hHNWNiaUFnSUNBZ0lDQWdhV1lnS0drZ1BUMDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG1OaGJuWmhjeTVqYjI1MFpYaDBMbTF2ZG1WVWJ5aDRMQ0I1S1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG1OaGJuWmhjeTVqYjI1MFpYaDBMbXhwYm1WVWJ5aDRMQ0I1S1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJSGdnS3owZ2MyeHBZMlZYYVdSMGFEdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbU5oYm5aaGN5NWpiMjUwWlhoMExtMXZkbVZVYnlnd0xDQjBhR2x6TG1OaGJuWmhjeTVsYkdWdFpXNTBMbWhsYVdkb2RDOHlLVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NWpZVzUyWVhNdVkyOXVkR1Y0ZEM1c2FXNWxWRzhvZEdocGN5NWpZVzUyWVhNdVpXeGxiV1Z1ZEM1M2FXUjBhQ3dnZEdocGN5NWpZVzUyWVhNdVpXeGxiV1Z1ZEM1b1pXbG5hSFF2TWlrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnZEdocGN5NWpZVzUyWVhNdVkyOXVkR1Y0ZEM1emRISnZhMlVvS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNCRmNYVnBkbUZzWlc1MElIUnZJRndpY0dGMFkyaHBibWNnYVc1Y0lpQmhiaUJoZFdScGJ5QnViMlJsSUhSdklIWnBjM1ZoYkdsNlpTNGdUazlVUlRvZ1dXOTFJR05oYm01dmRDQmpiMjV1WldOMElHRjFaR2x2SUc1dlpHVnpJR0ZqY205emN5QjBkMjhnWkdsbVptVnlaVzUwSUdGMVpHbHZJR052Ym5SbGVIUnpMaUJPWlhoMWMxVkpJSEoxYm5NZ2FYUnpJR0YxWkdsdklHRnVZV3g1YzJseklHOXVJR2wwY3lCdmQyNGdZWFZrYVc4Z1kyOXVkR1Y0ZEN3Z1RtVjRkWE11WTI5dWRHVjRkQzRnU1dZZ2RHaGxJR0YxWkdsdklHNXZaR1VnZVc5MUlHRnlaU0IyYVhOMVlXeHBlbWx1WnlCcGN5QmpjbVZoZEdWa0lHOXVJR0VnWkdsbVptVnlaVzUwSUdGMVpHbHZJR052Ym5SbGVIUXNJSGx2ZFNCM2FXeHNJRzVsWldRZ2RHOGdkR1ZzYkNCT1pYaDFjMVZKSUhSdklIVnpaU0IwYUdGMElHTnZiblJsZUhRZ2FXNXpkR1ZoWkRvZ2FTNWxMaUJPWlhoMWN5NWpiMjUwWlhoMElEMGdXVzkxY2tGMVpHbHZRMjl1ZEdWNGRFNWhiV1V1SUVadmNpQmxlR0Z0Y0d4bExDQnBiaUJVYjI1bFNsTWdjSEp2YW1WamRITXNJSFJvWlNCc2FXNWxJSGR2ZFd4a0lHSmxPaUJPWlhoMWN5NWpiMjUwWlhoMElEMGdWRzl1WlM1amIyNTBaWGgwSUM0Z1YyVWdjbVZqYjIxdFpXNWtJSFJvWVhRZ2VXOTFJSGR5YVhSbElIUm9ZWFFnYkdsdVpTQnZaaUJqYjJSbElHOXViSGtnYjI1alpTQmhkQ0IwYUdVZ1ltVm5hVzV1YVc1bklHOW1JSGx2ZFhJZ2NISnZhbVZqZEM1Y2JpQWdRSEJoY21GdElHNXZaR1VnZTBGMVpHbHZUbTlrWlgwZ1ZHaGxJR0YxWkdsdklHNXZaR1VnZEc4Z2RtbHpkV0ZzYVhwbFhHNGdJRUJsZUdGdGNHeGxJRTVsZUhWekxtTnZiblJsZUhRZ1BTQlViMjVsTG1OdmJuUmxlSFFnTHk4Z2IzSWdZVzV2ZEdobGNpQmhkV1JwYnlCamIyNTBaWGgwSUhsdmRTQm9ZWFpsSUdOeVpXRjBaV1JjYmlBZ2IzTmphV3hzYjNOamIzQmxMbU52Ym01bFkzUW9JRlJ2Ym1VdVRXRnpkR1Z5SUNrN1hHNGdJQ292WEc1Y2JpQWdZMjl1Ym1WamRDaHViMlJsS1NCN1hHNWNiaUFnSUNCcFppQW9kR2hwY3k1emIzVnlZMlVwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVaR2x6WTI5dWJtVmpkQ2dwTzF4dUlDQWdJSDFjYmx4dUlDQWdJSFJvYVhNdWMyOTFjbU5sSUQwZ2JtOWtaVHRjYmlBZ0lDQjBhR2x6TG5OdmRYSmpaUzVqYjI1dVpXTjBLSFJvYVhNdVlXNWhiSGx6WlhJcE8xeHVYRzRnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0JUZEc5d0lIWnBjM1ZoYkdsNmFXNW5JSFJvWlNCemIzVnlZMlVnYm05a1pTQmhibVFnWkdselkyOXVibVZqZENCcGRDNWNiaUFnS2k5Y2JpQWdaR2x6WTI5dWJtVmpkQ2dwSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTV6YjNWeVkyVXBJSHRjYmlBZ0lDQWdJSFJvYVhNdWMyOTFjbU5sTG1ScGMyTnZibTVsWTNRb2RHaHBjeTVoYm1Gc2VYTmxjaWs3WEc0Z0lDQWdJQ0IwYUdsekxuTnZkWEpqWlNBOUlHNTFiR3c3WEc0Z0lDQWdmVnh1WEc0Z0lIMWNibHh1SUNCamJHbGpheWdwSUh0Y2JpQWdJQ0IwYUdsekxtRmpkR2wyWlNBOUlDRjBhR2x6TG1GamRHbDJaVHRjYmlBZ0lDQjBhR2x6TG5KbGJtUmxjaWdwTzF4dUlDQjlYRzVjYmlBZ1kzVnpkRzl0UkdWemRISnZlU2dwSUh0Y2JpQWdJQ0IwYUdsekxtRmpkR2wyWlNBOUlHWmhiSE5sTzF4dUlDQjlYRzVjYm4xY2JseHVYRzVjYmk4dklGZEZRbEJCUTBzZ1JrOVBWRVZTSUM4dlhHNHZMeUF1TDM0dmFuTm9hVzUwTFd4dllXUmxjaUV1TDJ4cFlpOXBiblJsY21aaFkyVnpMMjl6WTJsc2JHOXpZMjl3WlM1cWN5SXNJaThxWEc1TllXbHVJR052Ym1ObGNIUTZYRzV6ZVc1MGFDQTlJRzVsZHlCT1pYaDFjeTVTWVdOcktDZGxiR1Z0Wlc1MFNVUW5LVHRjYmx4dVZISmhibk5tYjNKdElHRnNiQ0JsYkdWdFpXNTBjeUJwYm5OcFpHVWdkR2hsSUdScGRseHVjM2x1ZEdndVpXeGxiV1Z1ZEVsRUlIZHBiR3dnYUc5c1pDQjBhR1VnWm1seWMzUWdjMnhwWkdWeUlHbHVkR1Z5Wm1GalpWeHVYRzR5S1NCSmJpQm1kWFIxY21Vc0lIQnZkR1Z1ZEdsaGJHeDVJSGR5YVhScGJtY2dZU0J5WVdOcklIUm9ZWFFnYVhNZ2NtVXRkWE5oWW14bFAxeHVRMjkxYkdRZ1lXeHpieUIwWVd0bElFcFRUMDVjYmx4dWJtVjNJRTVsZUhWekxsSmhZMnNvSnlOMFlYSm5aWFFuTEh0Y2JpQWdjSEpsT2lBb0tTQTlQaUI3WEc0Z0lDQWdZM0psWVhSbElITnZiV1VnWkdsMmN5Qm9aWEpsTENCdmNpQnpiMjFsSUdGMVpHbHZJR052WkdWY2JpQWdmU3hjYmlBZ2FXNTBaWEptWVdObE9pQjdYRzRnSUNBZ2MyeHBaR1Z5TVRvZ1RtVjRkWE11WVdSa0xuTnNhV1JsY2loN1hHNGdJQ0FnSUNCMGIzQTZNVEFzWEc0Z0lDQWdJQ0JzWldaME9qRXdMRnh1SUNBZ0lDQWdkMmxrZEdnNk5UQXNYRzRnSUNBZ0lDQm9aV2xuYUhRNk1UQXdMRnh1SUNBZ0lDQWdiV2x1T2lBd0xGeHVJQ0FnSUNBZ2JXRjRPaUF4TURBc1hHNGdJQ0FnSUNCemRHVndPaUF4WEc0Z0lDQWdmU2tzWEc0Z0lDQWdkMkYyWlRFNklFNWxlSFZ6TG1Ga1pDNTNZWFpsWm05eWJTaDdYRzRnSUNBZ0lDQm1hV3hsT2lBbkxpOXdZWFJvTDNSdkwyWnBiR1V1YlhBekp5eGNiaUFnSUNBZ0lIZHBaSFJvT2pVd01DeGNiaUFnSUNBZ0lHaGxhV2RvZERveE1EQXNYRzRnSUNBZ0lDQnRiMlJsT2lBbmNtRnVaMlVuWEc0Z0lDQWdmU2xjYmlBZ2ZTeGNiaUFnYVc1cGREb2dLQ2tnUFQ0Z2UxeHVJQ0FnSUM4dklITnZiV1VnWVhWa2FXOGdhVzVwZENCamIyUmxJR2R2WlhNZ2FHVnlaUzR1TGx4dUlDQjlYRzU5S1R0Y2JseHVLaTljYmx4dWFXMXdiM0owSUNvZ1lYTWdkSEpoYm5ObWIzSnRJR1p5YjIwZ0p5NHVMM1YwYVd3dmRISmhibk5tYjNKdEp6dGNibWx0Y0c5eWRDQmtiMjBnWm5KdmJTQW5MaTR2ZFhScGJDOWtiMjBuTzF4dVhHNXBiWEJ2Y25RZ2V5QmpiMnh2Y25NZ2ZTQm1jbTl0SUNjdUxpOXRZV2x1Snp0Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1kyeGhjM01nVW1GamF5QjdYRzVjYmlBZ1kyOXVjM1J5ZFdOMGIzSW9kR0Z5WjJWMExDQnpaWFIwYVc1bmN5a2dlMXh1WEc0Z0lDQWdkR2hwY3k1dFpYUmhJRDBnZTMwN1hHNGdJQ0FnZEdocGN5NXRaWFJoTG5SaGNtZGxkQ0E5SUhSaGNtZGxkRHRjYmlBZ0lDQjBhR2x6TG0xbGRHRXVjR0Z5Wlc1MElEMGdaRzl0TG5CaGNuTmxSV3hsYldWdWRDaDBZWEpuWlhRcE95QXZMeUJ6YUc5MWJHUWdZbVVnWVNCblpXNWxjbWxqSUdaMWJtTjBhVzl1SUdadmNpQndZWEp6YVc1bklHRWdKM1JoY21kbGRDY2dZWEpuZFcxbGJuUWdkR2hoZENCamFHVmphM01nWm05eUlITjBjbWx1Wnk5RVQwMHZhbEZWUlZKWlhHNGdJQ0FnZEdocGN5NXRaWFJoTG1OdmJHOXljeUE5SUh0OU8xeHVYRzRnSUNBZ2FXWWdLSE5sZEhScGJtZHpLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtMWxkR0V1WVhSMGNtbGlkWFJsSUQwZ2MyVjBkR2x1WjNNdVlYUjBjbWxpZFhSbElIeDhJQ2R1WlhoMWN5MTFhU2M3WEc0Z0lDQWdJQ0IwYUdsekxtMWxkR0V1ZEdsMGJHVWdQU0J6WlhSMGFXNW5jeTV1WVcxbElIeDhJR1poYkhObE8xeHVJQ0FnSUNBZ2RHaHBjeTV0WlhSaExtOXdaVzRnUFNCelpYUjBhVzVuY3k1dmNHVnVJSHg4SUdaaGJITmxPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCMGFHbHpMbTFsZEdFdVlYUjBjbWxpZFhSbElEMGdKMjVsZUhWekxYVnBKenRjYmlBZ0lDQWdJSFJvYVhNdWJXVjBZUzUwYVhSc1pTQTlJR1poYkhObE8xeHVJQ0FnSUNBZ2RHaHBjeTV0WlhSaExtOXdaVzRnUFNCbVlXeHpaVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnNaWFFnWkdWbVlYVnNkRU52Ykc5eWN5QTlJR052Ykc5eWN5Z3BPeUF2THlCcWMyaHBiblFnYVdkdWIzSmxPbXhwYm1WY2JpQWdJQ0IwYUdsekxtMWxkR0V1WTI5c2IzSnpMbUZqWTJWdWRDQTlJR1JsWm1GMWJIUkRiMnh2Y25NdVlXTmpaVzUwTzF4dUlDQWdJSFJvYVhNdWJXVjBZUzVqYjJ4dmNuTXVabWxzYkNBOUlHUmxabUYxYkhSRGIyeHZjbk11Wm1sc2JEdGNiaUFnSUNCMGFHbHpMbTFsZEdFdVkyOXNiM0p6TG14cFoyaDBJRDBnWkdWbVlYVnNkRU52Ykc5eWN5NXNhV2RvZER0Y2JpQWdJQ0IwYUdsekxtMWxkR0V1WTI5c2IzSnpMbVJoY21zZ1BTQmtaV1poZFd4MFEyOXNiM0p6TG1SaGNtczdYRzRnSUNBZ2RHaHBjeTV0WlhSaExtTnZiRzl5Y3k1dFpXUnBkVzFNYVdkb2RDQTlJR1JsWm1GMWJIUkRiMnh2Y25NdWJXVmthWFZ0VEdsbmFIUTdYRzRnSUNBZ2RHaHBjeTV0WlhSaExtTnZiRzl5Y3k1dFpXUnBkVzFFWVhKcklEMGdaR1ZtWVhWc2RFTnZiRzl5Y3k1dFpXUnBkVzFFWVhKck8xeHVJQ0FnSUhSb2FYTXVZblZwYkdSSmJuUmxjbVpoWTJVb0tUdGNiaUFnSUNCMGFHbHpMbU52Ykc5eVNXNTBaWEptWVdObEtDazdYRzRnSUgxY2JseHVJQ0JpZFdsc1pFbHVkR1Z5Wm1GalpTZ3BJSHRjYmlBZ0lDQjBhR2x6TG0xbGRHRXVjR0Z5Wlc1MExuTjBlV3hsTG1KdmVGTnBlbWx1WnlBOUlDZGliM0prWlhJdFltOTRKenRjYmlBZ0lDQjBhR2x6TG0xbGRHRXVjR0Z5Wlc1MExuTjBlV3hsTG5WelpYSlRaV3hsWTNRZ1BTQW5ibTl1WlNjN1hHNGdJQ0FnZEdocGN5NXRaWFJoTG5CaGNtVnVkQzV6ZEhsc1pTNXRiM3BWYzJWeVUyVnNaV04wSUQwZ0oyNXZibVVuTzF4dUlDQWdJSFJvYVhNdWJXVjBZUzV3WVhKbGJuUXVjM1I1YkdVdWQyVmlhMmwwVlhObGNsTmxiR1ZqZENBOUlDZHViMjVsSnp0Y2JseHVJQ0FnSUhSb2FYTXViV1YwWVM1amIyNTBaVzUwY3lBOUlHUnZZM1Z0Wlc1MExtTnlaV0YwWlVWc1pXMWxiblFvSjJScGRpY3BPMXh1WEc0Z0lDQWdkMmhwYkdVZ0tIUm9hWE11YldWMFlTNXdZWEpsYm5RdVkyaHBiR1JPYjJSbGN5NXNaVzVuZEdnZ1BpQXdLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXViV1YwWVM1amIyNTBaVzUwY3k1aGNIQmxibVJEYUdsc1pDaDBhR2x6TG0xbGRHRXVjR0Z5Wlc1MExtTm9hV3hrVG05a1pYTmJNRjBwTzF4dUlDQWdJSDFjYmx4dUlDQWdJSFJvYVhNdWJXVjBZUzVqYjI1MFpXNTBjeTV6ZEhsc1pTNXdZV1JrYVc1bklEMGdKekJ3ZUNjN1hHNGdJQ0FnZEdocGN5NXRaWFJoTG1OdmJuUmxiblJ6TG5OMGVXeGxMbUp2ZUZOcGVtbHVaeUE5SUNkaWIzSmtaWEl0WW05NEp6dGNibHh1SUNBZ0lHbG1JQ2gwYUdsekxtMWxkR0V1ZEdsMGJHVXBJSHRjYmlBZ0lDQWdJSFJvYVhNdWJXVjBZUzUwYVhSc1pVSmhjaUE5SUdSdlkzVnRaVzUwTG1OeVpXRjBaVVZzWlcxbGJuUW9KMlJwZGljcE8xeHVJQ0FnSUNBZ2RHaHBjeTV0WlhSaExuUnBkR3hsUW1GeUxtbHVibVZ5U0ZSTlRDQTlJSFJvYVhNdWJXVjBZUzUwYVhSc1pUdGNiaUFnSUNBZ0lIUm9hWE11YldWMFlTNTBhWFJzWlVKaGNpNXpkSGxzWlM1bWIyNTBSbUZ0YVd4NUlEMGdKMkZ5YVdGc0p6dGNiaUFnSUNBZ0lIUm9hWE11YldWMFlTNTBhWFJzWlVKaGNpNXpkSGxzWlM1d2IzTnBkR2x2YmlBOUlDZHlaV3hoZEdsMlpTYzdYRzRnSUNBZ0lDQjBhR2x6TG0xbGRHRXVkR2wwYkdWQ1lYSXVjM1I1YkdVdVkyOXNiM0lnUFNBbkl6ZzRPQ2M3WEc0Z0lDQWdJQ0IwYUdsekxtMWxkR0V1ZEdsMGJHVkNZWEl1YzNSNWJHVXVjR0ZrWkdsdVp5QTlJQ2MzY0hnbk8xeHVJQ0FnSUNBZ2RHaHBjeTV0WlhSaExuUnBkR3hsUW1GeUxuTjBlV3hsTG1admJuUlRhWHBsSUQwZ0p6RXljSGduTzF4dVhHNGdJQ0FnSUNCMGFHbHpMbTFsZEdFdVluVjBkRzl1SUQwZ1pHOWpkVzFsYm5RdVkzSmxZWFJsUld4bGJXVnVkQ2duWkdsMkp5azdYRzRnSUNBZ0lDQjBhR2x6TG0xbGRHRXVZblYwZEc5dUxuTjBlV3hsTG5CdmMybDBhVzl1SUQwZ0oyRmljMjlzZFhSbEp6dGNiaUFnSUNBZ0lIUm9hWE11YldWMFlTNWlkWFIwYjI0dWMzUjViR1V1ZEc5d0lEMGdKelZ3ZUNjZ08xeHVJQ0FnSUNBZ2RHaHBjeTV0WlhSaExtSjFkSFJ2Ymk1emRIbHNaUzV5YVdkb2RDQTlJQ2MxY0hnbklEdGNiaUFnSUNBZ0lIUm9hWE11YldWMFlTNWlkWFIwYjI0dWFXNXVaWEpJVkUxTUlEMGdKeTBuTzF4dUlDQWdJQ0FnZEdocGN5NXRaWFJoTG1KMWRIUnZiaTV6ZEhsc1pTNXdZV1JrYVc1bklEMGdKekJ3ZUNBMWNIZ2dNbkI0Snp0Y2JpQWdJQ0FnSUhSb2FYTXViV1YwWVM1aWRYUjBiMjR1YzNSNWJHVXViR2x1WlVobGFXZG9kQ0E5SUNjeE1uQjRKenRjYmlBZ0lDQWdJSFJvYVhNdWJXVjBZUzVpZFhSMGIyNHVjM1I1YkdVdVptOXVkRk5wZW1VZ1BTQW5NVFZ3ZUNjN1hHNWNiaUFnSUNBZ0lIUm9hWE11YldWMFlTNWlkWFIwYjI0dWMzUjViR1V1WTNWeWMyOXlJRDBnSjNCdmFXNTBaWEluTzF4dVhHNGdJQ0FnSUNCMGFHbHpMbTFsZEdFdVluVjBkRzl1TG1Ga1pFVjJaVzUwVEdsemRHVnVaWElvSjIxdmRYTmxiM1psY2ljc0lDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV0WlhSaExtSjFkSFJ2Ymk1emRIbHNaUzVpWVdOclozSnZkVzVrUTI5c2IzSWdQU0IwYUdsekxtMWxkR0V1WTI5c2IzSnpMbTFsWkdsMWJVUmhjbXM3WEc0Z0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUhSb2FYTXViV1YwWVM1aWRYUjBiMjR1WVdSa1JYWmxiblJNYVhOMFpXNWxjaWduYlc5MWMyVnNaV0YyWlNjc0lDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV0WlhSaExtSjFkSFJ2Ymk1emRIbHNaUzVpWVdOclozSnZkVzVrUTI5c2IzSWdQU0IwYUdsekxtMWxkR0V1WTI5c2IzSnpMbTFsWkdsMWJVeHBaMmgwTzF4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNCMGFHbHpMbTFsZEdFdVluVjBkRzl1TG1Ga1pFVjJaVzUwVEdsemRHVnVaWElvSjJOc2FXTnJKeXdnS0NrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTV0WlhSaExtOXdaVzRwSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG1ocFpHVW9LVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbk5vYjNjb0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmU2s3WEc1Y2JseHVJQ0FnSUNBZ2RHaHBjeTV0WlhSaExuUnBkR3hsUW1GeUxtRndjR1Z1WkVOb2FXeGtLSFJvYVhNdWJXVjBZUzVpZFhSMGIyNHBPMXh1WEc0Z0lDQWdJQ0IwYUdsekxtMWxkR0V1Y0dGeVpXNTBMbUZ3Y0dWdVpFTm9hV3hrS0hSb2FYTXViV1YwWVM1MGFYUnNaVUpoY2lrN1hHNGdJQ0FnZlZ4dUlDQWdJSFJvYVhNdWJXVjBZUzV3WVhKbGJuUXVZWEJ3Wlc1a1EyaHBiR1FvZEdocGN5NXRaWFJoTG1OdmJuUmxiblJ6S1R0Y2JseHVJQ0F2THlBZ2RtRnlJSGRwWkhSb0lEMGdkR2hwY3k1dFpYUmhMbkJoY21WdWRDNXpkSGxzWlM1M2FXUjBhQ0E5SUdkbGRFTnZiWEIxZEdWa1UzUjViR1VvZEdocGN5NXRaWFJoTG5CaGNtVnVkQ2t1WjJWMFVISnZjR1Z5ZEhsV1lXeDFaU2duZDJsa2RHZ25LVHRjYmk4dklDQWdJSFJvYVhNdWJXVjBZUzV3WVhKbGJuUXVjM1I1YkdVdWQybGtkR2dnUFNCM2FXUjBhRHRjYmx4dUlDQWdJR3hsZENCMWFTQTlJSFJ5WVc1elptOXliUzV6WldOMGFXOXVLSFJvYVhNdWJXVjBZUzUwWVhKblpYUXNJSFJvYVhNdWJXVjBZUzVoZEhSeWFXSjFkR1VwTzF4dUlDQWdJR1p2Y2lBb2RtRnlJR3RsZVNCcGJpQjFhU2tnZTF4dUlDQWdJQ0FnZEdocGMxdHJaWGxkSUQwZ2RXbGJhMlY1WFR0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCamIyeHZja2x1ZEdWeVptRmpaU2dwSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTV0WlhSaExuUnBkR3hsS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbTFsZEdFdVluVjBkRzl1TG5OMGVXeGxMbUpoWTJ0bmNtOTFibVJEYjJ4dmNpQTlJSFJvYVhNdWJXVjBZUzVqYjJ4dmNuTXViV1ZrYVhWdFRHbG5hSFE3WEc0Z0lDQWdJQ0IwYUdsekxtMWxkR0V1WW5WMGRHOXVMbk4wZVd4bExtSnZjbVJsY2lBOUlDZHpiMnhwWkNBd2NIZ2dKeXQwYUdsekxtMWxkR0V1WTI5c2IzSnpMbVpwYkd3N1hHNGdJQ0FnSUNCMGFHbHpMbTFsZEdFdWNHRnlaVzUwTG5OMGVXeGxMbUp2Y21SbGNpQTlJQ2R6YjJ4cFpDQXhjSGdnSnl0MGFHbHpMbTFsZEdFdVkyOXNiM0p6TG0xbFpHbDFiVXhwWjJoME8xeHVJQ0FnSUNBZ2RHaHBjeTV0WlhSaExuQmhjbVZ1ZEM1emRIbHNaUzVpWVdOclozSnZkVzVrUTI5c2IzSWdQU0IwYUdsekxtMWxkR0V1WTI5c2IzSnpMbXhwWjJoME8xeHVJQ0FnSUNBZ2RHaHBjeTV0WlhSaExuUnBkR3hsUW1GeUxuTjBlV3hsTG1KaFkydG5jbTkxYm1SRGIyeHZjaUE5SUhSb2FYTXViV1YwWVM1amIyeHZjbk11Wm1sc2JEdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQnphRzkzS0NrZ2UxeHVJQ0FnSUhSb2FYTXViV1YwWVM1amIyNTBaVzUwY3k1emRIbHNaUzVrYVhOd2JHRjVJRDBnSjJKc2IyTnJKenRjYmlBZ0lDQjBhR2x6TG0xbGRHRXViM0JsYmlBOUlIUnlkV1U3WEc0Z0lIMWNibHh1SUNCb2FXUmxLQ2tnZTF4dUlDQWdJSFJvYVhNdWJXVjBZUzVqYjI1MFpXNTBjeTV6ZEhsc1pTNWthWE53YkdGNUlEMGdKMjV2Ym1Vbk8xeHVJQ0FnSUhSb2FYTXViV1YwWVM1dmNHVnVJRDBnWm1Gc2MyVTdYRzRnSUgxY2JseHVJQ0JqYjJ4dmNtbDZaU2gwZVhCbExHTnZiRzl5S1NCN1hHNGdJQ0FnWm05eUlDaDJZWElnYTJWNUlHbHVJSFJvYVhNcElIdGNiaUFnSUNBZ0lHbG1JQ2gwYUdselcydGxlVjB1WTI5c2IzSnBlbVVwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjMXRyWlhsZExtTnZiRzl5YVhwbEtIUjVjR1VzWTI5c2IzSXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCMGFHbHpMbTFsZEdFdVkyOXNiM0p6VzNSNWNHVmRJRDBnWTI5c2IzSTdYRzRnSUNBZ2RHaHBjeTVqYjJ4dmNrbHVkR1Z5Wm1GalpTZ3BPMXh1SUNCOVhHNWNiaUFnWlcxd2RIa29LU0I3WEc0Z0lDQWdabTl5SUNoMllYSWdhMlY1SUdsdUlIUm9hWE1wSUh0Y2JpQWdJQ0FnSUdsbUlDaDBhR2x6VzJ0bGVWMHVaR1Z6ZEhKdmVTa2dlMXh1SUNBZ0lDQWdJQ0IwYUdselcydGxlVjB1WkdWemRISnZlU2dwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVYRzU5WEc1Y2JseHVYRzR2THlCWFJVSlFRVU5MSUVaUFQxUkZVaUF2TDF4dUx5OGdMaTkrTDJwemFHbHVkQzFzYjJGa1pYSWhMaTlzYVdJdlkyOXlaUzl5WVdOckxtcHpJaXdpSjNWelpTQnpkSEpwWTNRbk8xeHVYRzVwYlhCdmNuUWdaRzl0SUdaeWIyMGdKeTR1TDNWMGFXd3ZaRzl0Snp0Y2JtbHRjRzl5ZENCSmJuUmxjbVpoWTJWeklHWnliMjBnSnk0dUwybHVkR1Z5Wm1GalpYTXZKenRjYmx4dWJHVjBJR055WldGMFpVbHVkR1Z5Wm1GalpVbEVJRDBnS0hkcFpHZGxkQ3hwYm5SbGNtWmhZMlZKUkhNcElEMCtJSHRjYmlBZ2JHVjBJSFI1Y0dVZ1BTQjNhV1JuWlhRdWRIbHdaVHRjYmlBZ2FXWWdLR2x1ZEdWeVptRmpaVWxFYzF0MGVYQmxYU2tnZTF4dUlDQWdJR2x1ZEdWeVptRmpaVWxFYzF0MGVYQmxYU3NyTzF4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUdsdWRHVnlabUZqWlVsRWMxdDBlWEJsWFNBOUlERTdYRzRnSUgxY2JpQWdjbVYwZFhKdUlDZ2dkSGx3WlNBcklHbHVkR1Z5Wm1GalpVbEVjMXQwZVhCbFhTQXBPMXh1ZlR0Y2JseHViR1YwSUdWc1pXMWxiblFnUFNBb1pXeGxiV1Z1ZEN4MGVYQmxMRzl3ZEdsdmJuTXBJRDArSUh0Y2JpQWdiM0IwYVc5dWN5QTlJRzl3ZEdsdmJuTWdmSHdnZTMwN1hHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnWld4bGJXVnVkQzVoZEhSeWFXSjFkR1Z6TG14bGJtZDBhRHNnYVNzcktYdGNiaUFnSUNCc1pYUWdZWFIwSUQwZ1pXeGxiV1Z1ZEM1aGRIUnlhV0oxZEdWelcybGRPMXh1SUNBdkx5QWdkSEo1SUh0Y2JpQWdMeThnSUNBZ2IzQjBhVzl1YzF0aGRIUXVibTlrWlU1aGJXVmRJRDBnWlhaaGJDaGhkSFF1Ym05a1pWWmhiSFZsS1R0Y2JpQWdMeThnSUgwZ1kyRjBZMmdvWlNrZ2UxeHVJQ0FnSUNBZ2IzQjBhVzl1YzF0aGRIUXVibTlrWlU1aGJXVmRJRDBnWVhSMExtNXZaR1ZXWVd4MVpUdGNiaUFnTHk4Z0lIMWNiaUFnZlZ4dUlDQjBlWEJsSUQwZ2RIbHdaVnN3WFM1MGIxVndjR1Z5UTJGelpTZ3BJQ3NnZEhsd1pTNXpiR2xqWlNneEtUdGNiaUFnYkdWMElIZHBaR2RsZENBOUlHNWxkeUJKYm5SbGNtWmhZMlZ6VzNSNWNHVmRLR1ZzWlcxbGJuUXNiM0IwYVc5dWN5azdYRzRnSUhkcFpHZGxkQzVwWkNBOUlHVnNaVzFsYm5RdWFXUTdYRzRnSUhKbGRIVnliaUIzYVdSblpYUTdYRzU5TzF4dVhHNWNibXhsZENCelpXTjBhVzl1SUQwZ0tIQmhjbVZ1ZEN4clpYbDNiM0prS1NBOVBpQjdYRzVjYmlBZ2EyVjVkMjl5WkNBOUlHdGxlWGR2Y21RZ2ZId2dKMjVsZUhWekxYVnBKenRjYmx4dUlDQnNaWFFnYVc1MFpYSm1ZV05sU1VSeklEMGdlMzA3WEc1Y2JpQWdiR1YwSUdOdmJuUmhhVzVsY2lBOUlHUnZiUzV3WVhKelpVVnNaVzFsYm5Rb2NHRnlaVzUwS1R0Y2JseHVJQ0JzWlhRZ2RXa2dQU0I3ZlR0Y2JseHVJQ0JzWlhRZ2FIUnRiRVZzWlcxbGJuUnpJRDBnWTI5dWRHRnBibVZ5TG1kbGRFVnNaVzFsYm5SelFubFVZV2RPWVcxbEtDY3FKeWs3WEc0Z0lHeGxkQ0JsYkdWdFpXNTBjeUE5SUZ0ZE8xeHVJQ0JtYjNJZ0tHeGxkQ0JwUFRBN0lHazhhSFJ0YkVWc1pXMWxiblJ6TG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ1pXeGxiV1Z1ZEhNdWNIVnphQ2hvZEcxc1JXeGxiV1Z1ZEhOYmFWMHBPMXh1SUNCOVhHNGdJR1p2Y2lBb2JHVjBJR2s5TUR0cFBHVnNaVzFsYm5SekxteGxibWQwYUR0cEt5c3BJSHRjYmlBZ0lDQnNaWFFnZEhsd1pTQTlJR1ZzWlcxbGJuUnpXMmxkTG1kbGRFRjBkSEpwWW5WMFpTaHJaWGwzYjNKa0tUdGNiaUFnSUNCcFppQW9kSGx3WlNrZ2UxeHVJQ0FnSUNBZ2JHVjBJR1p2Y20xaGRIUmxaRlI1Y0dVZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUdadmNpQW9iR1YwSUd0bGVTQnBiaUJKYm5SbGNtWmhZMlZ6S1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbExuUnZURzkzWlhKRFlYTmxLQ2s5UFQxclpYa3VkRzlNYjNkbGNrTmhjMlVvS1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJR1p2Y20xaGRIUmxaRlI1Y0dVZ1BTQnJaWGs3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdOdmJuTnZiR1V1Ykc5bktHWnZjbTFoZEhSbFpGUjVjR1VwTzF4dUlDQWdJQ0FnYkdWMElIZHBaR2RsZENBOUlHVnNaVzFsYm5Rb1pXeGxiV1Z1ZEhOYmFWMHNabTl5YldGMGRHVmtWSGx3WlNrN1hHNGdJQ0FnSUNCcFppQW9kMmxrWjJWMExtbGtLU0I3WEc0Z0lDQWdJQ0FnSUhWcFczZHBaR2RsZEM1cFpGMGdQU0IzYVdSblpYUTdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnNaWFFnYVdRZ1BTQmpjbVZoZEdWSmJuUmxjbVpoWTJWSlJDaDNhV1JuWlhRc2FXNTBaWEptWVdObFNVUnpLVHRjYmlBZ0lDQWdJQ0FnZFdsYmFXUmRJRDBnZDJsa1oyVjBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQjFhVHRjYmx4dWZUdGNibHh1YkdWMElHRmtaQ0E5SUNoMGVYQmxMSEJoY21WdWRDeHZjSFJwYjI1ektTQTlQaUI3WEc0Z0lHeGxkQ0IwWVhKblpYUWdQU0JrYjJOMWJXVnVkQzVqY21WaGRHVkZiR1Z0Wlc1MEtDZGthWFluS1R0Y2JpQWdiM0IwYVc5dWN5QTlJRzl3ZEdsdmJuTWdmSHdnZTMwN1hHNGdJR2xtSUNod1lYSmxiblFwSUh0Y2JpQWdJQ0J3WVhKbGJuUWdQU0JrYjIwdWNHRnljMlZGYkdWdFpXNTBLSEJoY21WdWRDazdYRzRnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdjR0Z5Wlc1MElEMGdaRzlqZFcxbGJuUXVZbTlrZVR0Y2JpQWdmVnh1SUNCd1lYSmxiblF1WVhCd1pXNWtRMmhwYkdRb2RHRnlaMlYwS1R0Y2JpQWdiM0IwYVc5dWN5NTBZWEpuWlhRZ1BTQjBZWEpuWlhRN1hHNGdJR2xtSUNodmNIUnBiMjV6TG5OcGVtVXBJSHRjYmlBZ0lDQjBZWEpuWlhRdWMzUjViR1V1ZDJsa2RHZ2dQU0J2Y0hScGIyNXpMbk5wZW1WYk1GMGdLeUFuY0hnbk8xeHVJQ0FnSUhSaGNtZGxkQzV6ZEhsc1pTNW9aV2xuYUhRZ1BTQnZjSFJwYjI1ekxuTnBlbVZiTVYwZ0t5QW5jSGduTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJsYkdWdFpXNTBLSFJoY21kbGRDeDBlWEJsTEc5d2RHbHZibk1wTzF4dWZUdGNibHh1Wlhod2IzSjBJSHNnWld4bGJXVnVkQ0I5TzF4dVpYaHdiM0owSUhzZ2MyVmpkR2x2YmlCOU8xeHVaWGh3YjNKMElIc2dZV1JrSUgwN1hHNWNibHh1WEc0dkx5QlhSVUpRUVVOTElFWlBUMVJGVWlBdkwxeHVMeThnTGk5K0wycHphR2x1ZEMxc2IyRmtaWEloTGk5c2FXSXZkWFJwYkM5MGNtRnVjMlp2Y20wdWFuTWlMQ0luZFhObElITjBjbWxqZENjN1hHNWNibWx0Y0c5eWRDQnRZWFJvSUdaeWIyMGdKeTR1TDNWMGFXd3ZiV0YwYUNjN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHTnNZWE56SUZSMWJtVWdlMXh1WEc0Z0lHTnZibk4wY25WamRHOXlLQ2tnZTF4dVhHNGdJRngwTHk4Z2RHaGxJSE5qWVd4bElHRnpJSEpoZEdsdmMxeHVJQ0JjZEhSb2FYTXVjMk5oYkdVZ1BTQmJYVHRjYmx4dUlDQmNkQzh2SUdrdmJ5QnRiMlJsYzF4dUlDQmNkSFJvYVhNdWJXOWtaU0E5SUh0Y2JpQWdYSFJjZEc5MWRIQjFkRG9nSjJaeVpYRjFaVzVqZVNjc1hHNGdJRngwWEhScGJuQjFkRG9nSjNOMFpYQW5YRzRnSUZ4MGZUdGNibHh1SUNCY2RDOHZJRVZVSUcxaGFtOXlYRzRnSUZ4MGRHaHBjeTVsZEcxaGFtOXlJRDBnV3lBeU5qRXVOakkxTlRnc1hHNGdJRngwWEhReU9UTXVOalkwTnpZMExGeHVJQ0JjZEZ4ME16STVMall5TnpVMk15eGNiaUFnWEhSY2RETTBPUzR5TWpneU5ERXNYRzRnSUZ4MFhIUXpPVEV1T1RrMU5ESXlMRnh1SUNCY2RGeDBORFF3TEZ4dUlDQmNkRngwTkRrekxqZzRNek13TVN4Y2JpQWdYSFJjZERVeU15NHlOVEV4Tmx4dUlDQmNkRjA3WEc1Y2JpQWdYSFF2THlCU2IyOTBJR1p5WlhGMVpXNWplUzVjYmlBZ1hIUjBhR2x6TG5KdmIzUWdQU0J0WVhSb0xtMTBiMllvTmpBcE95QWdJQ0FnTHk4Z0tpQk5ZWFJvTG5CdmR5Z3lMQ2cyTUMwMk9Ta3ZNVElwTzF4dVhHNGdJQ0FnTHk4Z1pHVm1ZWFZzZENCcGN5QmhJRzFoYW05eUlITmpZV3hsWEc0Z0lDQWdkR2hwY3k1amNtVmhkR1ZUWTJGc1pTZ3dMRElzTkN3MUxEY3NPU3d4TVNrN1hHNWNiaUFnZlZ4dVhHNGdJQzhxSUZKbGRIVnliaUJrWVhSaElHbHVJSFJvWlNCdGIyUmxJSGx2ZFNCaGNtVWdhVzRnS0daeVpYRXNJSEpoZEdsdkxDQnZjaUJ0YVdScEtTQXFMMXh1SUNCdWIzUmxLR2x1Y0hWMExHOWpkR0YyWlNrZ2UxeHVYRzRnSUZ4MGJHVjBJRzVsZDNaaGJIVmxPMXh1WEc0Z0lGeDBhV1lnS0hSb2FYTXViVzlrWlM1dmRYUndkWFFnUFQwOUlDZG1jbVZ4ZFdWdVkza25LU0I3WEc0Z0lGeDBYSFJ1WlhkMllXeDFaU0E5SUhSb2FYTXVabkpsY1hWbGJtTjVLR2x1Y0hWMExHOWpkR0YyWlNrN1hHNGdJRngwZlNCbGJITmxJR2xtSUNoMGFHbHpMbTF2WkdVdWIzVjBjSFYwSUQwOVBTQW5jbUYwYVc4bktTQjdYRzRnSUZ4MFhIUnVaWGQyWVd4MVpTQTlJSFJvYVhNdWNtRjBhVzhvYVc1d2RYUXNiMk4wWVhabEtUdGNiaUFnWEhSOUlHVnNjMlVnYVdZZ0tIUm9hWE11Ylc5a1pTNXZkWFJ3ZFhRZ1BUMDlJQ2ROU1VSSkp5a2dlMXh1SUNCY2RGeDBibVYzZG1Gc2RXVWdQU0IwYUdsekxrMUpSRWtvYVc1d2RYUXNiMk4wWVhabEtUdGNiaUFnWEhSOUlHVnNjMlVnZTF4dUlDQmNkRngwYm1WM2RtRnNkV1VnUFNCMGFHbHpMbVp5WlhGMVpXNWplU2hwYm5CMWRDeHZZM1JoZG1VcE8xeHVJQ0JjZEgxY2JseHVJQ0JjZEhKbGRIVnliaUJ1WlhkMllXeDFaVHRjYmx4dUlDQjlYRzVjYmx4dUlDQXZLaUJTWlhSMWNtNGdabkpsY1NCa1lYUmhJQ292WEc0Z0lHWnlaWEYxWlc1amVTaHpkR1Z3U1c0c0lHOWpkR0YyWlVsdUtTQjdYRzVjYmlBZ1hIUnBaaUFvZEdocGN5NXRiMlJsTG1sdWNIVjBJRDA5UFNBbmJXbGthU2NnZkh3Z2RHaHBjeTV0YjJSbExtbHVjSFYwSUQwOVBTQW5UVWxFU1NjZ0tTQjdYRzRnSUZ4MFhIUjBhR2x6TG5OMFpYQkpiaUFyUFNBMk1EdGNiaUFnWEhSOVhHNWNiaUFnWEhRdkx5QjNhR0YwSUc5amRHRjJaU0JwY3lCdmRYSWdhVzV3ZFhSY2JpQWdYSFJzWlhRZ2IyTjBZWFpsSUQwZ1RXRjBhQzVtYkc5dmNpaHpkR1Z3U1c0dmRHaHBjeTV6WTJGc1pTNXNaVzVuZEdncE8xeHVYRzRnSUZ4MGFXWWdLRzlqZEdGMlpVbHVLU0I3WEc0Z0lGeDBYSFJ2WTNSaGRtVWdLejBnYjJOMFlYWmxTVzQ3WEc0Z0lGeDBmVnh1WEc0Z0lGeDBMeThnZDJocFkyZ2djMk5oYkdVZ1pHVm5jbVZsSUNnd0lDMGdjMk5oYkdVZ2JHVnVaM1JvS1NCcGN5QnZkWElnYVc1d2RYUmNiaUFnWEhSc1pYUWdjMk5oYkdWRVpXZHlaV1VnUFNCemRHVndTVzRnSlNCMGFHbHpMbk5qWVd4bExteGxibWQwYUR0Y2JseHVJQ0JjZEhkb2FXeGxJQ2h6WTJGc1pVUmxaM0psWlNBOElEQXBJSHRjYmlBZ1hIUmNkSE5qWVd4bFJHVm5jbVZsSUNzOUlIUm9hWE11YzJOaGJHVXViR1Z1WjNSb08xeHVJQ0JjZEgxY2JseHVJQ0FnSUd4bGRDQnlZWFJwYnlBOUlIUm9hWE11YzJOaGJHVmJjMk5oYkdWRVpXZHlaV1ZkTzF4dVhHNGdJRngwYkdWMElHWnlaWEVnUFNCMGFHbHpMbkp2YjNRZ0tpQnlZWFJwYnp0Y2JseHVJQ0JjZEdaeVpYRWdQU0JtY21WeEtpaE5ZWFJvTG5CdmR5Z3lMRzlqZEdGMlpTa3BPMXh1WEc0Z0lGeDBMeThnZEhKMWJtTmhkR1VnYVhKeVlYUnBiMjVoYkNCdWRXMWlaWEp6WEc0Z0lGeDBabkpsY1NBOUlFMWhkR2d1Wm14dmIzSW9abkpsY1NveE1EQXdNREF3TURBd01EQXBMekV3TURBd01EQXdNREF3TUR0Y2JseHVJQ0JjZEhKbGRIVnliaUJtY21WeE8xeHVYRzRnSUgxY2JseHVJQ0F2S2lCR2IzSmpaU0J5WlhSMWNtNGdjbUYwYVc4Z1pHRjBZU0FxTDF4dVhHNGdJSEpoZEdsdktITjBaWEJKYml3Z2IyTjBZWFpsU1c0cElIdGNibHh1SUNCY2RHbG1JQ2gwYUdsekxtMXZaR1V1YVc1d2RYUWdQVDA5SUNkdGFXUnBKeUI4ZkNCMGFHbHpMbTF2WkdVdWFXNXdkWFFnUFQwOUlDZE5TVVJKSnlBcElIdGNiaUFnWEhSY2RIUm9hWE11YzNSbGNFbHVJQ3M5SURZd08xeHVJQ0JjZEgxY2JseHVJQ0JjZEM4dklIZG9ZWFFnYjJOMFlYWmxJR2x6SUc5MWNpQnBibkIxZEZ4dUlDQmNkR3hsZENCdlkzUmhkbVVnUFNCTllYUm9MbVpzYjI5eUtITjBaWEJKYmk5MGFHbHpMbk5qWVd4bExteGxibWQwYUNrN1hHNWNiaUFnWEhScFppQW9iMk4wWVhabFNXNHBJSHRjYmlBZ1hIUmNkRzlqZEdGMlpTQXJQU0J2WTNSaGRtVkpianRjYmlBZ1hIUjlYRzVjYmlBZ1hIUXZMeUIzYUdsamFDQnpZMkZzWlNCa1pXZHlaV1VnS0RBZ0xTQnpZMkZzWlNCc1pXNW5kR2dwSUdseklHOTFjaUJwYm5CMWRGeHVJQ0JjZEd4bGRDQnpZMkZzWlVSbFozSmxaU0E5SUhOMFpYQkpiaUFsSUhSb2FYTXVjMk5oYkdVdWJHVnVaM1JvTzF4dVhHNGdJRngwTHk4Z2QyaGhkQ0J5WVhScGJ5QnBjeUJ2ZFhJZ2FXNXdkWFFnZEc4Z2IzVnlJR3RsZVZ4dUlDQmNkR3hsZENCeVlYUnBieUE5SUUxaGRHZ3VjRzkzS0RJc2IyTjBZWFpsS1NwMGFHbHpMbk5qWVd4bFczTmpZV3hsUkdWbmNtVmxYVHRjYmx4dUlDQmNkSEpoZEdsdklEMGdUV0YwYUM1bWJHOXZjaWh5WVhScGJ5b3hNREF3TURBd01EQXdNREFwTHpFd01EQXdNREF3TURBd01EdGNibHh1SUNCY2RISmxkSFZ5YmlCeVlYUnBienRjYmx4dUlDQjlYRzVjYmlBZ0x5b2dSbTl5WTJVZ2NtVjBkWEp1SUdGa2FuVnpkR1ZrSUUxSlJFa2daR0YwWVNBcUwxeHVYRzRnSUUxSlJFa29jM1JsY0VsdUxHOWpkR0YyWlVsdUtTQjdYRzVjYmlBZ1hIUnNaWFFnYm1WM2RtRnNkV1VnUFNCMGFHbHpMbVp5WlhGMVpXNWplU2h6ZEdWd1NXNHNiMk4wWVhabFNXNHBPMXh1WEc0Z0lGeDBiR1YwSUc0Z1BTQTJPU0FySURFeUtrMWhkR2d1Ykc5bktHNWxkM1poYkhWbEx6UTBNQ2t2VFdGMGFDNXNiMmNvTWlrN1hHNWNiaUFnWEhSdUlEMGdUV0YwYUM1bWJHOXZjaWh1S2pFd01EQXdNREF3TURBcEx6RXdNREF3TURBd01EQTdYRzVjYmlBZ1hIUnlaWFIxY200Z2JqdGNibHh1SUNCOVhHNWNiaUFnWTNKbFlYUmxVMk5oYkdVb0tTQjdYRzRnSUNBZ2JHVjBJRzVsZDFOallXeGxJRDBnVzEwN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVQwd08yazhZWEpuZFcxbGJuUnpMbXhsYm1kMGFEdHBLeXNwSUh0Y2JpQWdJQ0FnSUc1bGQxTmpZV3hsTG5CMWMyZ29JRzFoZEdndWJYUnZaaWdnTmpBZ0t5QmhjbWQxYldWdWRITmJhVjBnS1NBcE8xeHVJQ0FnSUgxY2JpQWdJQ0IwYUdsekxteHZZV1JUWTJGc1pVWnliMjFHY21WeGRXVnVZMmxsY3lodVpYZFRZMkZzWlNrN1hHNGdJSDFjYmx4dUlDQmpjbVZoZEdWS1NWTmpZV3hsS0NrZ2UxeHVJQ0FnSUhSb2FYTXVjMk5oYkdVZ1BTQmJYVHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBQVEE3YVR4aGNtZDFiV1Z1ZEhNdWJHVnVaM1JvTzJrckt5a2dlMXh1SUNBZ0lDQWdkR2hwY3k1elkyRnNaUzV3ZFhOb0tHRnlaM1Z0Wlc1MGMxdHBYU2s3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnYkc5aFpGTmpZV3hsUm5KdmJVWnlaWEYxWlc1amFXVnpLR1p5WlhGektTQjdYRzRnSUNBZ2RHaHBjeTV6WTJGc1pTQTlJRnRkTzF4dUlDQWdJR1p2Y2lBb2JHVjBJR2s5TUR0cFBHWnlaWEZ6TG14bGJtZDBhQzB4TzJrckt5a2dlMXh1SUNBZ0lDQWdkR2hwY3k1elkyRnNaUzV3ZFhOb0tHWnlaWEZ6VzJsZEwyWnlaWEZ6V3pCZEtUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQXZLaUJNYjJGa0lHRWdibVYzSUhOallXeGxJQ292WEc1Y2JpQWdiRzloWkZOallXeGxLRzVoYldVcGUxeHVYRzRnSUZ4MEx5b2diRzloWkNCMGFHVWdjMk5oYkdVZ0tpOWNiaUFnWEhSc1pYUWdabkpsY1hNZ1BTQjBhR2x6TG5OallXeGxjMXR1WVcxbFhTNW1jbVZ4ZFdWdVkybGxjenRjYmlBZ0lDQjBhR2x6TG14dllXUlRZMkZzWlVaeWIyMUdjbVZ4ZFdWdVkybGxjeWhtY21WeGN5azdYRzVjYmlBZ2ZWeHVYRzRnSUM4cUlGTmxZWEpqYUNCMGFHVWdibUZ0WlhNZ2IyWWdkSFZ1YVc1bmMxeHVJQ0JjZENCU1pYUjFjbTV6SUdGdUlHRnljbUY1SUc5bUlHNWhiV1Z6SUc5bUlIUjFibWx1WjNNZ0tpOWNibHh1SUNCelpXRnlZMmdvYkdWMGRHVnljeWtnZTF4dUlDQmNkR3hsZENCd2IzTnphV0pzWlNBOUlGdGRPMXh1SUNCY2RHWnZjaUFvYkdWMElHdGxlU0JwYmlCMGFHbHpMbk5qWVd4bGN5a2dlMXh1SUNCY2RGeDBhV1lnS0d0bGVTNTBiMHh2ZDJWeVEyRnpaU2dwTG1sdVpHVjRUMllvYkdWMGRHVnljeTUwYjB4dmQyVnlRMkZ6WlNncEtTQWhQVDBnTFRFcElIdGNiaUFnWEhSY2RGeDBjRzl6YzJsaWJHVXVjSFZ6YUNoclpYa3BPMXh1SUNCY2RGeDBmVnh1SUNCY2RIMWNiaUFnWEhSeVpYUjFjbTRnY0c5emMybGliR1U3WEc0Z0lIMWNibHh1SUNBdktpQlNaWFIxY200Z1lTQmpiMnhzWldOMGFXOXVJRzltSUc1dmRHVnpJR0Z6SUdGdUlHRnljbUY1SUNvdlhHNWNiaUFnWTJodmNtUW9iV2xrYVhNcElIdGNiaUFnWEhSc1pYUWdiM1YwY0hWMElEMGdXMTA3WEc0Z0lGeDBabTl5SUNoc1pYUWdhVDB3TzJrOGJXbGthWE11YkdWdVozUm9PMmtyS3lrZ2UxeHVJQ0JjZEZ4MGIzVjBjSFYwTG5CMWMyZ29kR2hwY3k1dWIzUmxLRzFwWkdselcybGRLU2s3WEc0Z0lGeDBmVnh1SUNCY2RISmxkSFZ5YmlCdmRYUndkWFE3WEc0Z0lIMWNibHh1ZlZ4dVhHNWNibHh1THk4Z1YwVkNVRUZEU3lCR1QwOVVSVklnTHk5Y2JpOHZJQzR2Zmk5cWMyaHBiblF0Ykc5aFpHVnlJUzR2YkdsaUwzUjFibWx1Wnk5MGRXNXBibWN1YW5NaUxDSW5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JpOHZSR2x6WVdKc1pTQnFjMmhwYm5RZ2QyRnlibWx1WnlCamIyNWpaWEp1YVc1bklIUnlZV2xzYVc1bklISmxaM1ZzWVhJZ2NHRnlZVzF6WEc0dkttcHphR2x1ZENBdFZ6RXpPQ0FxTDF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCamJHRnpjeUJTWVdScGJ5QjdYRzRnSUNBZ0x5OXBaaUJ1YjI0dFpYaHBjM1JsYm5RZ1luVjBkRzl1Y3lCaGNtVWdjM2RwZEdOb1pXUXNJSFJvWlhrZ1lYSmxJR2xuYm05eVpXUmNibHh1SUNBZ0lHTnZibk4wY25WamRHOXlLR3hsYm1kMGFDQTlJRE1zSUM0dUxtOXVWbUZzY3lrZ2UxeHVJQ0FnSUNBZ0lDQXZMMlZoWTJnZ2IzQjBhVzl1WVd3Z0oyOXVWbUZzY3ljZ1lYSm5kVzFsYm5RZ2MzZHBkR05vWlhNZ2IyNGdkR2hoZENCMllXeDFaU0JwYmlCMGFHVWdVbUZrYVc4Z2FXWWdhWFFnWlhocGMzUnpYRzRnSUNBZ0lDQWdJQzh2U1c0Z2RHaGxJR1Y0WVcxd2JHVWdZbVZzYjNjc0lHRWdNeTFpZFhSMGIyNGdjbUZrYVc4Z2FYTWdZM0psWVhSbFpDd2dhVzVrWlhnZ01DQnBjeUJ6ZDJsMFkyaGxaQ0J2Yml3Z2FXNWtaWGdnTVNCcGN5QnpkMmwwWTJobFpDQnZiaUIwYUdWdUlIUm9aVzRnWVhSMFpXMXdkR1ZrSUdGbllXbHVJSEJ5YjJSMVkybHVaeUJoYmlCM1lYSnVhVzVuTENCaGJtUWdkR2hsSUdacGJtRnNJR0Z5WjNWdFpXNTBJSEJ5YjJSMVkyVnpJR0VnZDJGeWJtbHVaeUJpWldOaGRYTmxJSFJvWlNCcGJtUmxlQ0IyWVd4MVpTQmtiMlZ6SUc1dmRDQmxlR2x6ZEM1Y2JpQWdJQ0FnSUNBZ0x5OUZlR0Z0Y0d4bE9seHVJQ0FnSUNBZ0lDQXZMMkFnSUhKaFpHbHZJRDBnYm1WM0lGSmhaR2x2S0RNc0lEQXNJREVzSURFc0lETXBPMXh1SUNBZ0lDQWdJQ0F2TCtLQXBpQWdXekVzTVN3d1hWeHVYRzRnSUNBZ0lDQWdJR2xtSUNoc1pXNW5kR2dnUENBd0tTQjdJR3hsYm1kMGFDQTlJREU3SUgxY2JseHVJQ0FnSUNBZ0lDQjBhR2x6TG14bGJtZDBhQ0E5SUd4bGJtZDBhRHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXZibFpoYkhNZ1BTQnZibFpoYkhNN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WVhKeVlYa2dQU0J1WlhjZ1FYSnlZWGtvYkdWdVozUm9LUzVtYVd4c0tEQXBPMXh1WEc0Z0lDQWdJQ0FnSUdsbUlDaHZibFpoYkhNdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTV2YmlndUxpNXZibFpoYkhNcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2MyVnNaV04wS0haaGJIVmxLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVZWEp5WVhrdVptbHNiQ2d3S1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVoY25KaGVWdDJZV3gxWlYwZ1BTQXhPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1aGNuSmhlVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQm1iR2x3S0M0dUxuWmhiSFZsY3lrZ2UxeHVJQ0FnSUNBZ0lDQXZMMlpzYVhCeklIUm9aU0J6Y0dWamFXWnBaV1FnZG1Gc2RXVnpMaUJwWmlCdWJ5QjJZV3gxWlNCcGN5QnpjR1ZqYVdacFpXUXNJR1pzYVhCeklHRnNiQ0JpZFhSMGIyNXpYRzRnSUNBZ0lDQWdJR3hsZENCaElEMGdkR2hwY3k1aGNuSmhlVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIWmhiSFZsY3k1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMllXeDFaWE11Wm05eVJXRmphQ2htZFc1amRHbHZiaWgyS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFlnUGlCaExteGxibWQwYUNBdElERXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1M1lYSnVLQ2RYWVhKdWFXNW5PaUJCYm05dVVtRmthVzliSnlBcklIWWdLeUFuWFNCa2IyVnpJRzV2ZENCbGVHbHpkQ2NwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHRmJkbDBnUFNBb1lWdDJYU0EvSURBZ09pQXhLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHRXVabTl5UldGamFDaG1kVzVqZEdsdmJpaDJMQ0JwTENCaGNuSXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JoY25KYmFWMGdQU0FvZGlBL0lEQWdPaUF4S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCaE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUc5dUtDNHVMblpoYkhWbGN5a2dlMXh1SUNBZ0lDQWdJQ0F2TDNOM2FYUmphQ0J2YmlCMGFHVWdjM0JsWTJsbWFXVmtJSFpoYkhWbGN5NGdhV1lnYm04Z2RtRnNkV1VnYzNCbFkybG1hV1ZrTENCbWJHbHdjeUJ2YmlCaGJHd2dZblYwZEc5dWMxeHVJQ0FnSUNBZ0lDQnNaWFFnWVNBOUlIUm9hWE11WVhKeVlYazdYRzRnSUNBZ0lDQWdJR2xtSUNoMllXeDFaWE11YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZG1Gc2RXVnpMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNG9kaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaDJJRDRnWVM1c1pXNW5kR2dnTFNBeEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTnZiR1V1ZDJGeWJpZ25WMkZ5Ym1sdVp6b2dRVzV2YmxKaFpHbHZXeWNnS3lCMklDc2dKMTBnWlhoalpXVmtjeUJ6YVhwbElHOW1JRzlpYW1WamRDY3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaGhXM1pkSUQwOVBTQXhLU0I3SUdOdmJuTnZiR1V1ZDJGeWJpZ25WMkZ5Ym1sdVp6b2dRVzV2YmxKaFpHbHZXeWNnS3lCMklDc2dKMTBnZDJGeklHRnNjbVZoWkhrZ2IyNHVKeWs3SUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZVnQyWFNBOUlERTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCaExtWnBiR3dvTVNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHRTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2IyWm1LQzR1TG5aaGJIVmxjeWtnZTF4dUlDQWdJQ0FnSUNBdkwzTjNhWFJqYUNCdlptWWdkR2hsSUhOd1pXTnBabWxsWkNCMllXeDFaWE11SUdsbUlHNXZJSFpoYkhWbElITndaV05wWm1sbFpDd2dabXhwY0hNZ2IyWm1JR0ZzYkNCaWRYUjBiMjV6WEc0Z0lDQWdJQ0FnSUd4bGRDQmhJRDBnZEdocGN5NWhjbkpoZVR0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFpoYkhWbGN5NXNaVzVuZEdnZ1BpQXdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZV3gxWlhNdVptOXlSV0ZqYUNobWRXNWpkR2x2YmloMktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZVnQyWFNBOUlEQTdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdFdVptbHNiQ2d3S1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1lUdGNiaUFnSUNCOVhHNTlYRzVjYmx4dVhHNHZMeUJYUlVKUVFVTkxJRVpQVDFSRlVpQXZMMXh1THk4Z0xpOStMMnB6YUdsdWRDMXNiMkZrWlhJaExpOXNhV0l2Ylc5a1pXeHpMM0poWkdsdkxtcHpJaXdpZG1GeUlGZEJRVU5zYjJOcklEMGdjbVZ4ZFdseVpTZ25MaTlzYVdJdlYwRkJRMnh2WTJzbktWeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRmRCUVVOc2IyTnJYRzVwWmlBb2RIbHdaVzltSUhkcGJtUnZkeUFoUFQwZ0ozVnVaR1ZtYVc1bFpDY3BJSGRwYm1SdmR5NVhRVUZEYkc5amF5QTlJRmRCUVVOc2IyTnJYRzVjYmx4dVhHNHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OWNiaTh2SUZkRlFsQkJRMHNnUms5UFZFVlNYRzR2THlBdUwzNHZkMkZoWTJ4dlkyc3ZhVzVrWlhndWFuTmNiaTh2SUcxdlpIVnNaU0JwWkNBOUlEUXlYRzR2THlCdGIyUjFiR1VnWTJoMWJtdHpJRDBnTUNJc0luWmhjaUJwYzBKeWIzZHpaWElnUFNBb2RIbHdaVzltSUhkcGJtUnZkeUFoUFQwZ0ozVnVaR1ZtYVc1bFpDY3BYRzVjYm5aaGNpQkRURTlEUzE5RVJVWkJWVXhVVXlBOUlIdGNiaUFnZEc5c1pYSmhibU5sVEdGMFpUb2dNQzR4TUN4Y2JpQWdkRzlzWlhKaGJtTmxSV0Z5YkhrNklEQXVNREF4WEc1OVhHNWNiaTh2SUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOUlFVjJaVzUwSUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOUlDOHZYRzUyWVhJZ1JYWmxiblFnUFNCbWRXNWpkR2x2YmloamJHOWpheXdnWkdWaFpHeHBibVVzSUdaMWJtTXBJSHRjYmlBZ2RHaHBjeTVqYkc5amF5QTlJR05zYjJOclhHNGdJSFJvYVhNdVpuVnVZeUE5SUdaMWJtTmNiaUFnZEdocGN5NWZZMnhsWVhKbFpDQTlJR1poYkhObElDOHZJRVpzWVdjZ2RYTmxaQ0IwYnlCamJHVmhjaUJoYmlCbGRtVnVkQ0JwYm5OcFpHVWdZMkZzYkdKaFkydGNibHh1SUNCMGFHbHpMblJ2YkdWeVlXNWpaVXhoZEdVZ1BTQmpiRzlqYXk1MGIyeGxjbUZ1WTJWTVlYUmxYRzRnSUhSb2FYTXVkRzlzWlhKaGJtTmxSV0Z5YkhrZ1BTQmpiRzlqYXk1MGIyeGxjbUZ1WTJWRllYSnNlVnh1SUNCMGFHbHpMbDlzWVhSbGMzUlVhVzFsSUQwZ2JuVnNiRnh1SUNCMGFHbHpMbDlsWVhKc2FXVnpkRlJwYldVZ1BTQnVkV3hzWEc0Z0lIUm9hWE11WkdWaFpHeHBibVVnUFNCdWRXeHNYRzRnSUhSb2FYTXVjbVZ3WldGMFZHbHRaU0E5SUc1MWJHeGNibHh1SUNCMGFHbHpMbk5qYUdWa2RXeGxLR1JsWVdSc2FXNWxLVnh1ZlZ4dVhHNHZMeUJWYm5OamFHVmtkV3hsY3lCMGFHVWdaWFpsYm5SY2JrVjJaVzUwTG5CeWIzUnZkSGx3WlM1amJHVmhjaUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0IwYUdsekxtTnNiMk5yTGw5eVpXMXZkbVZGZG1WdWRDaDBhR2x6S1Z4dUlDQjBhR2x6TGw5amJHVmhjbVZrSUQwZ2RISjFaVnh1SUNCeVpYUjFjbTRnZEdocGMxeHVmVnh1WEc0dkx5QlRaWFJ6SUhSb1pTQmxkbVZ1ZENCMGJ5QnlaWEJsWVhRZ1pYWmxjbmtnWUhScGJXVmdJSE5sWTI5dVpITXVYRzVGZG1WdWRDNXdjbTkwYjNSNWNHVXVjbVZ3WldGMElEMGdablZ1WTNScGIyNG9kR2x0WlNrZ2UxeHVJQ0JwWmlBb2RHbHRaU0E5UFQwZ01DbGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjJSbGJHRjVJR05oYm01dmRDQmlaU0F3SnlsY2JpQWdkR2hwY3k1eVpYQmxZWFJVYVcxbElEMGdkR2x0WlZ4dUlDQnBaaUFvSVhSb2FYTXVZMnh2WTJzdVgyaGhjMFYyWlc1MEtIUm9hWE1wS1Z4dUlDQWdJSFJvYVhNdWMyTm9aV1IxYkdVb2RHaHBjeTVrWldGa2JHbHVaU0FySUhSb2FYTXVjbVZ3WldGMFZHbHRaU2xjYmlBZ2NtVjBkWEp1SUhSb2FYTmNibjFjYmx4dUx5OGdVMlYwY3lCMGFHVWdkR2x0WlNCMGIyeGxjbUZ1WTJVZ2IyWWdkR2hsSUdWMlpXNTBMbHh1THk4Z1ZHaGxJR1YyWlc1MElIZHBiR3dnWW1VZ1pYaGxZM1YwWldRZ2FXNGdkR2hsSUdsdWRHVnlkbUZzSUdCYlpHVmhaR3hwYm1VZ0xTQmxZWEpzZVN3Z1pHVmhaR3hwYm1VZ0t5QnNZWFJsWFdCY2JpOHZJRWxtSUhSb1pTQmpiRzlqYXlCbVlXbHNjeUIwYnlCbGVHVmpkWFJsSUhSb1pTQmxkbVZ1ZENCcGJpQjBhVzFsTENCMGFHVWdaWFpsYm5RZ2QybHNiQ0JpWlNCa2NtOXdjR1ZrTGx4dVJYWmxiblF1Y0hKdmRHOTBlWEJsTG5SdmJHVnlZVzVqWlNBOUlHWjFibU4wYVc5dUtIWmhiSFZsY3lrZ2UxeHVJQ0JwWmlBb2RIbHdaVzltSUhaaGJIVmxjeTVzWVhSbElEMDlQU0FuYm5WdFltVnlKeWxjYmlBZ0lDQjBhR2x6TG5SdmJHVnlZVzVqWlV4aGRHVWdQU0IyWVd4MVpYTXViR0YwWlZ4dUlDQnBaaUFvZEhsd1pXOW1JSFpoYkhWbGN5NWxZWEpzZVNBOVBUMGdKMjUxYldKbGNpY3BYRzRnSUNBZ2RHaHBjeTUwYjJ4bGNtRnVZMlZGWVhKc2VTQTlJSFpoYkhWbGN5NWxZWEpzZVZ4dUlDQjBhR2x6TGw5eVpXWnlaWE5vUldGeWJIbE1ZWFJsUkdGMFpYTW9LVnh1SUNCcFppQW9kR2hwY3k1amJHOWpheTVmYUdGelJYWmxiblFvZEdocGN5a3BJSHRjYmlBZ0lDQjBhR2x6TG1Oc2IyTnJMbDl5WlcxdmRtVkZkbVZ1ZENoMGFHbHpLVnh1SUNBZ0lIUm9hWE11WTJ4dlkyc3VYMmx1YzJWeWRFVjJaVzUwS0hSb2FYTXBYRzRnSUgxY2JpQWdjbVYwZFhKdUlIUm9hWE5jYm4xY2JseHVMeThnVW1WMGRYSnVjeUIwY25WbElHbG1JSFJvWlNCbGRtVnVkQ0JwY3lCeVpYQmxZWFJsWkN3Z1ptRnNjMlVnYjNSb1pYSjNhWE5sWEc1RmRtVnVkQzV3Y205MGIzUjVjR1V1YVhOU1pYQmxZWFJsWkNBOUlHWjFibU4wYVc5dUtDa2dleUJ5WlhSMWNtNGdkR2hwY3k1eVpYQmxZWFJVYVcxbElDRTlQU0J1ZFd4c0lIMWNibHh1THk4Z1UyTm9aV1IxYkdWeklIUm9aU0JsZG1WdWRDQjBieUJpWlNCeVlXNGdZbVZtYjNKbElHQmtaV0ZrYkdsdVpXQXVYRzR2THlCSlppQjBhR1VnZEdsdFpTQnBjeUIzYVhSb2FXNGdkR2hsSUdWMlpXNTBJSFJ2YkdWeVlXNWpaU3dnZDJVZ2FHRnVaR3hsSUhSb1pTQmxkbVZ1ZENCcGJXMWxaR2xoZEdWc2VTNWNiaTh2SUVsbUlIUm9aU0JsZG1WdWRDQjNZWE1nWVd4eVpXRmtlU0J6WTJobFpIVnNaV1FnWVhRZ1lTQmthV1ptWlhKbGJuUWdkR2x0WlN3Z2FYUWdhWE1nY21WelkyaGxaSFZzWldRdVhHNUZkbVZ1ZEM1d2NtOTBiM1I1Y0dVdWMyTm9aV1IxYkdVZ1BTQm1kVzVqZEdsdmJpaGtaV0ZrYkdsdVpTa2dlMXh1SUNCMGFHbHpMbDlqYkdWaGNtVmtJRDBnWm1Gc2MyVmNiaUFnZEdocGN5NWtaV0ZrYkdsdVpTQTlJR1JsWVdSc2FXNWxYRzRnSUhSb2FYTXVYM0psWm5KbGMyaEZZWEpzZVV4aGRHVkVZWFJsY3lncFhHNWNiaUFnYVdZZ0tIUm9hWE11WTJ4dlkyc3VZMjl1ZEdWNGRDNWpkWEp5Wlc1MFZHbHRaU0ErUFNCMGFHbHpMbDlsWVhKc2FXVnpkRlJwYldVcElIdGNiaUFnSUNCMGFHbHpMbDlsZUdWamRYUmxLQ2xjYmlBZ1hHNGdJSDBnWld4elpTQnBaaUFvZEdocGN5NWpiRzlqYXk1ZmFHRnpSWFpsYm5Rb2RHaHBjeWtwSUh0Y2JpQWdJQ0IwYUdsekxtTnNiMk5yTGw5eVpXMXZkbVZGZG1WdWRDaDBhR2x6S1Z4dUlDQWdJSFJvYVhNdVkyeHZZMnN1WDJsdWMyVnlkRVYyWlc1MEtIUm9hWE1wWEc0Z0lGeHVJQ0I5SUdWc2MyVWdkR2hwY3k1amJHOWpheTVmYVc1elpYSjBSWFpsYm5Rb2RHaHBjeWxjYm4xY2JseHVSWFpsYm5RdWNISnZkRzkwZVhCbExuUnBiV1ZUZEhKbGRHTm9JRDBnWm5WdVkzUnBiMjRvZEZKbFppd2djbUYwYVc4cElIdGNiaUFnYVdZZ0tIUm9hWE11YVhOU1pYQmxZWFJsWkNncEtWeHVJQ0FnSUhSb2FYTXVjbVZ3WldGMFZHbHRaU0E5SUhSb2FYTXVjbVZ3WldGMFZHbHRaU0FxSUhKaGRHbHZYRzVjYmlBZ2RtRnlJR1JsWVdSc2FXNWxJRDBnZEZKbFppQXJJSEpoZEdsdklDb2dLSFJvYVhNdVpHVmhaR3hwYm1VZ0xTQjBVbVZtS1Z4dUlDQXZMeUJKWmlCMGFHVWdaR1ZoWkd4cGJtVWdhWE1nZEc5dklHTnNiM05sSUc5eUlIQmhjM1FzSUdGdVpDQjBhR1VnWlhabGJuUWdhR0Z6SUdFZ2NtVndaV0YwTEZ4dUlDQXZMeUIzWlNCallXeGpkV3hoZEdVZ2RHaGxJRzVsZUhRZ2NtVndaV0YwSUhCdmMzTnBZbXhsSUdsdUlIUm9aU0J6ZEhKbGRHTm9aV1FnYzNCaFkyVXVYRzRnSUdsbUlDaDBhR2x6TG1selVtVndaV0YwWldRb0tTa2dlMXh1SUNBZ0lIZG9hV3hsSUNoMGFHbHpMbU5zYjJOckxtTnZiblJsZUhRdVkzVnljbVZ1ZEZScGJXVWdQajBnWkdWaFpHeHBibVVnTFNCMGFHbHpMblJ2YkdWeVlXNWpaVVZoY214NUtWeHVJQ0FnSUNBZ1pHVmhaR3hwYm1VZ0t6MGdkR2hwY3k1eVpYQmxZWFJVYVcxbFhHNGdJSDFjYmlBZ2RHaHBjeTV6WTJobFpIVnNaU2hrWldGa2JHbHVaU2xjYm4xY2JseHVMeThnUlhobFkzVjBaWE1nZEdobElHVjJaVzUwWEc1RmRtVnVkQzV3Y205MGIzUjVjR1V1WDJWNFpXTjFkR1VnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnYVdZZ0tIUm9hWE11WTJ4dlkyc3VYM04wWVhKMFpXUWdQVDA5SUdaaGJITmxLU0J5WlhSMWNtNWNiaUFnZEdocGN5NWpiRzlqYXk1ZmNtVnRiM1psUlhabGJuUW9kR2hwY3lsY2JseHVJQ0JwWmlBb2RHaHBjeTVqYkc5amF5NWpiMjUwWlhoMExtTjFjbkpsYm5SVWFXMWxJRHdnZEdocGN5NWZiR0YwWlhOMFZHbHRaU2xjYmlBZ0lDQjBhR2x6TG1aMWJtTW9kR2hwY3lsY2JpQWdaV3h6WlNCN1hHNGdJQ0FnYVdZZ0tIUm9hWE11YjI1bGVIQnBjbVZrS1NCMGFHbHpMbTl1Wlhod2FYSmxaQ2gwYUdsektWeHVJQ0FnSUdOdmJuTnZiR1V1ZDJGeWJpZ25aWFpsYm5RZ1pYaHdhWEpsWkNjcFhHNGdJSDFjYmlBZ0x5OGdTVzRnZEdobElHTmhjMlVnWUhOamFHVmtkV3hsWUNCcGN5QmpZV3hzWldRZ2FXNXphV1JsSUdCbWRXNWpZQ3dnZDJVZ2JtVmxaQ0IwYnlCaGRtOXBaRnh1SUNBdkx5QnZkbVZ5Y25keWFYUnBibWNnZDJsMGFDQjVaWFFnWVc1dmRHaGxjaUJnYzJOb1pXUjFiR1ZnTGx4dUlDQnBaaUFvSVhSb2FYTXVZMnh2WTJzdVgyaGhjMFYyWlc1MEtIUm9hWE1wSUNZbUlIUm9hWE11YVhOU1pYQmxZWFJsWkNncElDWW1JQ0YwYUdsekxsOWpiR1ZoY21Wa0tWeHVJQ0FnSUhSb2FYTXVjMk5vWldSMWJHVW9kR2hwY3k1a1pXRmtiR2x1WlNBcklIUm9hWE11Y21Wd1pXRjBWR2x0WlNrZ1hHNTlYRzVjYmk4dklGVndaR0YwWlhNZ1kyRmphR1ZrSUhScGJXVnpYRzVGZG1WdWRDNXdjbTkwYjNSNWNHVXVYM0psWm5KbGMyaEZZWEpzZVV4aGRHVkVZWFJsY3lBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCMGFHbHpMbDlzWVhSbGMzUlVhVzFsSUQwZ2RHaHBjeTVrWldGa2JHbHVaU0FySUhSb2FYTXVkRzlzWlhKaGJtTmxUR0YwWlZ4dUlDQjBhR2x6TGw5bFlYSnNhV1Z6ZEZScGJXVWdQU0IwYUdsekxtUmxZV1JzYVc1bElDMGdkR2hwY3k1MGIyeGxjbUZ1WTJWRllYSnNlVnh1ZlZ4dVhHNHZMeUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFNCWFFVRkRiRzlqYXlBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBTQXZMMXh1ZG1GeUlGZEJRVU5zYjJOcklEMGdiVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQm1kVzVqZEdsdmJpaGpiMjUwWlhoMExDQnZjSFJ6S1NCN1hHNGdJSFpoY2lCelpXeG1JRDBnZEdocGMxeHVJQ0J2Y0hSeklEMGdiM0IwY3lCOGZDQjdmVnh1SUNCMGFHbHpMblJwWTJ0TlpYUm9iMlFnUFNCdmNIUnpMblJwWTJ0TlpYUm9iMlFnZkh3Z0oxTmpjbWx3ZEZCeWIyTmxjM052Y2s1dlpHVW5YRzRnSUhSb2FYTXVkRzlzWlhKaGJtTmxSV0Z5YkhrZ1BTQnZjSFJ6TG5SdmJHVnlZVzVqWlVWaGNteDVJSHg4SUVOTVQwTkxYMFJGUmtGVlRGUlRMblJ2YkdWeVlXNWpaVVZoY214NVhHNGdJSFJvYVhNdWRHOXNaWEpoYm1ObFRHRjBaU0E5SUc5d2RITXVkRzlzWlhKaGJtTmxUR0YwWlNCOGZDQkRURTlEUzE5RVJVWkJWVXhVVXk1MGIyeGxjbUZ1WTJWTVlYUmxYRzRnSUhSb2FYTXVZMjl1ZEdWNGRDQTlJR052Ym5SbGVIUmNiaUFnZEdocGN5NWZaWFpsYm5SeklEMGdXMTFjYmlBZ2RHaHBjeTVmYzNSaGNuUmxaQ0E5SUdaaGJITmxYRzU5WEc1Y2JpOHZJQzB0TFMwdExTMHRMUzBnVUhWaWJHbGpJRUZRU1NBdExTMHRMUzB0TFMwdElDOHZYRzR2THlCVFkyaGxaSFZzWlhNZ1lHWjFibU5nSUhSdklISjFiaUJoWm5SbGNpQmdaR1ZzWVhsZ0lITmxZMjl1WkhNdVhHNVhRVUZEYkc5amF5NXdjbTkwYjNSNWNHVXVjMlYwVkdsdFpXOTFkQ0E5SUdaMWJtTjBhVzl1S0daMWJtTXNJR1JsYkdGNUtTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxsOWpjbVZoZEdWRmRtVnVkQ2htZFc1akxDQjBhR2x6TGw5aFluTlVhVzFsS0dSbGJHRjVLU2xjYm4xY2JseHVMeThnVTJOb1pXUjFiR1Z6SUdCbWRXNWpZQ0IwYnlCeWRXNGdZbVZtYjNKbElHQmtaV0ZrYkdsdVpXQXVYRzVYUVVGRGJHOWpheTV3Y205MGIzUjVjR1V1WTJGc2JHSmhZMnRCZEZScGJXVWdQU0JtZFc1amRHbHZiaWhtZFc1akxDQmtaV0ZrYkdsdVpTa2dlMXh1SUNCeVpYUjFjbTRnZEdocGN5NWZZM0psWVhSbFJYWmxiblFvWm5WdVl5d2daR1ZoWkd4cGJtVXBYRzU5WEc1Y2JpOHZJRk4wY21WMFkyaGxjeUJnWkdWaFpHeHBibVZnSUdGdVpDQmdjbVZ3WldGMFlDQnZaaUJoYkd3Z2MyTm9aV1IxYkdWa0lHQmxkbVZ1ZEhOZ0lHSjVJR0J5WVhScGIyQXNJR3RsWlhCcGJtZGNiaTh2SUhSb1pXbHlJSEpsYkdGMGFYWmxJR1JwYzNSaGJtTmxJSFJ2SUdCMFVtVm1ZQzRnU1c0Z1ptRmpkQ0IwYUdseklHbHpJR1Z4ZFdsMllXeGxiblFnZEc4Z1kyaGhibWRwYm1jZ2RHaGxJSFJsYlhCdkxseHVWMEZCUTJ4dlkyc3VjSEp2ZEc5MGVYQmxMblJwYldWVGRISmxkR05vSUQwZ1puVnVZM1JwYjI0b2RGSmxaaXdnWlhabGJuUnpMQ0J5WVhScGJ5a2dlMXh1SUNCbGRtVnVkSE11Wm05eVJXRmphQ2htZFc1amRHbHZiaWhsZG1WdWRDa2dleUJsZG1WdWRDNTBhVzFsVTNSeVpYUmphQ2gwVW1WbUxDQnlZWFJwYnlrZ2ZTbGNiaUFnY21WMGRYSnVJR1YyWlc1MGMxeHVmVnh1WEc0dkx5QlNaVzF2ZG1WeklHRnNiQ0J6WTJobFpIVnNaV1FnWlhabGJuUnpJR0Z1WkNCemRHRnlkSE1nZEdobElHTnNiMk5ySUZ4dVYwRkJRMnh2WTJzdWNISnZkRzkwZVhCbExuTjBZWEowSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUdsbUlDaDBhR2x6TGw5emRHRnlkR1ZrSUQwOVBTQm1ZV3h6WlNrZ2UxeHVJQ0FnSUhaaGNpQnpaV3htSUQwZ2RHaHBjMXh1SUNBZ0lIUm9hWE11WDNOMFlYSjBaV1FnUFNCMGNuVmxYRzRnSUNBZ2RHaHBjeTVmWlhabGJuUnpJRDBnVzExY2JseHVJQ0FnSUdsbUlDaDBhR2x6TG5ScFkydE5aWFJvYjJRZ1BUMDlJQ2RUWTNKcGNIUlFjbTlqWlhOemIzSk9iMlJsSnlrZ2UxeHVJQ0FnSUNBZ2RtRnlJR0oxWm1abGNsTnBlbVVnUFNBeU5UWmNiaUFnSUNBZ0lDOHZJRmRsSUdoaGRtVWdkRzhnYTJWbGNDQmhJSEpsWm1WeVpXNWpaU0IwYnlCMGFHVWdibTlrWlNCMGJ5QmhkbTlwWkNCbllYSmlZV2RsSUdOdmJHeGxZM1JwYjI1Y2JpQWdJQ0FnSUhSb2FYTXVYMk5zYjJOclRtOWtaU0E5SUhSb2FYTXVZMjl1ZEdWNGRDNWpjbVZoZEdWVFkzSnBjSFJRY205alpYTnpiM0lvWW5WbVptVnlVMmw2WlN3Z01Td2dNU2xjYmlBZ0lDQWdJSFJvYVhNdVgyTnNiMk5yVG05a1pTNWpiMjV1WldOMEtIUm9hWE11WTI5dWRHVjRkQzVrWlhOMGFXNWhkR2x2YmlsY2JpQWdJQ0FnSUhSb2FYTXVYMk5zYjJOclRtOWtaUzV2Ym1GMVpHbHZjSEp2WTJWemN5QTlJR1oxYm1OMGFXOXVJQ2dwSUh0Y2JpQWdJQ0FnSUNBZ2NISnZZMlZ6Y3k1dVpYaDBWR2xqYXlobWRXNWpkR2x2YmlncElIc2djMlZzWmk1ZmRHbGpheWdwSUgwcFhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJR2xtSUNoMGFHbHpMblJwWTJ0TlpYUm9iMlFnUFQwOUlDZHRZVzUxWVd3bktTQnVkV3hzSUM4dklGOTBhV05ySUdseklHTmhiR3hsWkNCdFlXNTFZV3hzZVZ4dVhHNGdJQ0FnWld4elpTQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oybHVkbUZzYVdRZ2RHbGphMDFsZEdodlpDQW5JQ3NnZEdocGN5NTBhV05yVFdWMGFHOWtLVnh1SUNCOVhHNTlYRzVjYmk4dklGTjBiM0J6SUhSb1pTQmpiRzlqYTF4dVYwRkJRMnh2WTJzdWNISnZkRzkwZVhCbExuTjBiM0FnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnYVdZZ0tIUm9hWE11WDNOMFlYSjBaV1FnUFQwOUlIUnlkV1VwSUh0Y2JpQWdJQ0IwYUdsekxsOXpkR0Z5ZEdWa0lEMGdabUZzYzJWY2JpQWdJQ0IwYUdsekxsOWpiRzlqYTA1dlpHVXVaR2x6WTI5dWJtVmpkQ2dwWEc0Z0lIMGdJRnh1ZlZ4dVhHNHZMeUF0TFMwdExTMHRMUzB0SUZCeWFYWmhkR1VnTFMwdExTMHRMUzB0TFNBdkwxeHVYRzR2THlCVWFHbHpJR1oxYm1OMGFXOXVJR2x6SUhKaGJpQndaWEpwYjJScFkyRnNiSGtzSUdGdVpDQmhkQ0JsWVdOb0lIUnBZMnNnYVhRZ1pYaGxZM1YwWlhOY2JpOHZJR1YyWlc1MGN5Qm1iM0lnZDJocFkyZ2dZR04xY25KbGJuUlVhVzFsWUNCcGN5QnBibU5zZFdSbFpDQnBiaUIwYUdWcGNpQjBiMnhsY21GdVkyVWdhVzUwWlhKMllXd3VYRzVYUVVGRGJHOWpheTV3Y205MGIzUjVjR1V1WDNScFkyc2dQU0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdkbUZ5SUdWMlpXNTBJRDBnZEdocGN5NWZaWFpsYm5SekxuTm9hV1owS0NsY2JseHVJQ0IzYUdsc1pTaGxkbVZ1ZENBbUppQmxkbVZ1ZEM1ZlpXRnliR2xsYzNSVWFXMWxJRHc5SUhSb2FYTXVZMjl1ZEdWNGRDNWpkWEp5Wlc1MFZHbHRaU2tnZTF4dUlDQWdJR1YyWlc1MExsOWxlR1ZqZFhSbEtDbGNiaUFnSUNCbGRtVnVkQ0E5SUhSb2FYTXVYMlYyWlc1MGN5NXphR2xtZENncFhHNGdJSDFjYmx4dUlDQXZMeUJRZFhRZ1ltRmpheUIwYUdVZ2JHRnpkQ0JsZG1WdWRGeHVJQ0JwWmlobGRtVnVkQ2tnZEdocGN5NWZaWFpsYm5SekxuVnVjMmhwWm5Rb1pYWmxiblFwWEc1OVhHNWNiaTh2SUVOeVpXRjBaWE1nWVc0Z1pYWmxiblFnWVc1a0lHbHVjMlZ5ZENCcGRDQjBieUIwYUdVZ2JHbHpkRnh1VjBGQlEyeHZZMnN1Y0hKdmRHOTBlWEJsTGw5amNtVmhkR1ZGZG1WdWRDQTlJR1oxYm1OMGFXOXVLR1oxYm1Nc0lHUmxZV1JzYVc1bEtTQjdYRzRnSUhKbGRIVnliaUJ1WlhjZ1JYWmxiblFvZEdocGN5d2daR1ZoWkd4cGJtVXNJR1oxYm1NcFhHNTlYRzVjYmk4dklFbHVjMlZ5ZEhNZ1lXNGdaWFpsYm5RZ2RHOGdkR2hsSUd4cGMzUmNibGRCUVVOc2IyTnJMbkJ5YjNSdmRIbHdaUzVmYVc1elpYSjBSWFpsYm5RZ1BTQm1kVzVqZEdsdmJpaGxkbVZ1ZENrZ2UxeHVJQ0IwYUdsekxsOWxkbVZ1ZEhNdWMzQnNhV05sS0hSb2FYTXVYMmx1WkdWNFFubFVhVzFsS0dWMlpXNTBMbDlsWVhKc2FXVnpkRlJwYldVcExDQXdMQ0JsZG1WdWRDbGNibjFjYmx4dUx5OGdVbVZ0YjNabGN5QmhiaUJsZG1WdWRDQm1jbTl0SUhSb1pTQnNhWE4wWEc1WFFVRkRiRzlqYXk1d2NtOTBiM1I1Y0dVdVgzSmxiVzkyWlVWMlpXNTBJRDBnWm5WdVkzUnBiMjRvWlhabGJuUXBJSHRjYmlBZ2RtRnlJR2x1WkNBOUlIUm9hWE11WDJWMlpXNTBjeTVwYm1SbGVFOW1LR1YyWlc1MEtWeHVJQ0JwWmlBb2FXNWtJQ0U5UFNBdE1Ta2dkR2hwY3k1ZlpYWmxiblJ6TG5Od2JHbGpaU2hwYm1Rc0lERXBYRzU5WEc1Y2JpOHZJRkpsZEhWeWJuTWdkSEoxWlNCcFppQmdaWFpsYm5SZ0lHbHpJR2x1SUhGMVpYVmxMQ0JtWVd4elpTQnZkR2hsY25kcGMyVmNibGRCUVVOc2IyTnJMbkJ5YjNSdmRIbHdaUzVmYUdGelJYWmxiblFnUFNCbWRXNWpkR2x2YmlobGRtVnVkQ2tnZTF4dUlISmxkSFZ5YmlCMGFHbHpMbDlsZG1WdWRITXVhVzVrWlhoUFppaGxkbVZ1ZENrZ0lUMDlJQzB4WEc1OVhHNWNiaTh2SUZKbGRIVnlibk1nZEdobElHbHVaR1Y0SUc5bUlIUm9aU0JtYVhKemRDQmxkbVZ1ZENCM2FHOXpaU0JrWldGa2JHbHVaU0JwY3lBK1BTQjBieUJnWkdWaFpHeHBibVZnWEc1WFFVRkRiRzlqYXk1d2NtOTBiM1I1Y0dVdVgybHVaR1Y0UW5sVWFXMWxJRDBnWm5WdVkzUnBiMjRvWkdWaFpHeHBibVVwSUh0Y2JpQWdMeThnY0dWeVptOXliWE1nWVNCaWFXNWhjbmtnYzJWaGNtTm9YRzRnSUhaaGNpQnNiM2NnUFNBd1hHNGdJQ0FnTENCb2FXZG9JRDBnZEdocGN5NWZaWFpsYm5SekxteGxibWQwYUZ4dUlDQWdJQ3dnYldsa1hHNGdJSGRvYVd4bElDaHNiM2NnUENCb2FXZG9LU0I3WEc0Z0lDQWdiV2xrSUQwZ1RXRjBhQzVtYkc5dmNpZ29iRzkzSUNzZ2FHbG5hQ2tnTHlBeUtWeHVJQ0FnSUdsbUlDaDBhR2x6TGw5bGRtVnVkSE5iYldsa1hTNWZaV0Z5YkdsbGMzUlVhVzFsSUR3Z1pHVmhaR3hwYm1VcFhHNGdJQ0FnSUNCc2IzY2dQU0J0YVdRZ0t5QXhYRzRnSUNBZ1pXeHpaU0JvYVdkb0lEMGdiV2xrWEc0Z0lIMWNiaUFnY21WMGRYSnVJR3h2ZDF4dWZWeHVYRzR2THlCRGIyNTJaWEowY3lCbWNtOXRJSEpsYkdGMGFYWmxJSFJwYldVZ2RHOGdZV0p6YjJ4MWRHVWdkR2x0WlZ4dVYwRkJRMnh2WTJzdWNISnZkRzkwZVhCbExsOWhZbk5VYVcxbElEMGdablZ1WTNScGIyNG9jbVZzVkdsdFpTa2dlMXh1SUNCeVpYUjFjbTRnY21Wc1ZHbHRaU0FySUhSb2FYTXVZMjl1ZEdWNGRDNWpkWEp5Wlc1MFZHbHRaVnh1ZlZ4dVhHNHZMeUJEYjI1MlpYSjBjeUJtY205dElHRmljMjlzZFhSbElIUnBiV1VnZEc4Z2NtVnNZWFJwZG1VZ2RHbHRaU0JjYmxkQlFVTnNiMk5yTG5CeWIzUnZkSGx3WlM1ZmNtVnNWR2x0WlNBOUlHWjFibU4wYVc5dUtHRmljMVJwYldVcElIdGNiaUFnY21WMGRYSnVJR0ZpYzFScGJXVWdMU0IwYUdsekxtTnZiblJsZUhRdVkzVnljbVZ1ZEZScGJXVmNibjFjYmx4dVhHNHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OWNiaTh2SUZkRlFsQkJRMHNnUms5UFZFVlNYRzR2THlBdUwzNHZkMkZoWTJ4dlkyc3ZiR2xpTDFkQlFVTnNiMk5yTG1welhHNHZMeUJ0YjJSMWJHVWdhV1FnUFNBME0xeHVMeThnYlc5a2RXeGxJR05vZFc1cmN5QTlJREFpTENJdkx5QnphR2x0SUdadmNpQjFjMmx1WnlCd2NtOWpaWE56SUdsdUlHSnliM2R6WlhKY2JuWmhjaUJ3Y205alpYTnpJRDBnYlc5a2RXeGxMbVY0Y0c5eWRITWdQU0I3ZlR0Y2JseHVMeThnWTJGamFHVmtJR1p5YjIwZ2QyaGhkR1YyWlhJZ1oyeHZZbUZzSUdseklIQnlaWE5sYm5RZ2MyOGdkR2hoZENCMFpYTjBJSEoxYm01bGNuTWdkR2hoZENCemRIVmlJR2wwWEc0dkx5QmtiMjRuZENCaWNtVmhheUIwYUdsdVozTXVJQ0JDZFhRZ2QyVWdibVZsWkNCMGJ5QjNjbUZ3SUdsMElHbHVJR0VnZEhKNUlHTmhkR05vSUdsdUlHTmhjMlVnYVhRZ2FYTmNiaTh2SUhkeVlYQndaV1FnYVc0Z2MzUnlhV04wSUcxdlpHVWdZMjlrWlNCM2FHbGphQ0JrYjJWemJpZDBJR1JsWm1sdVpTQmhibmtnWjJ4dlltRnNjeTRnSUVsMEozTWdhVzV6YVdSbElHRmNiaTh2SUdaMWJtTjBhVzl1SUdKbFkyRjFjMlVnZEhKNUwyTmhkR05vWlhNZ1pHVnZjSFJwYldsNlpTQnBiaUJqWlhKMFlXbHVJR1Z1WjJsdVpYTXVYRzVjYm5aaGNpQmpZV05vWldSVFpYUlVhVzFsYjNWME8xeHVkbUZ5SUdOaFkyaGxaRU5zWldGeVZHbHRaVzkxZER0Y2JseHVablZ1WTNScGIyNGdaR1ZtWVhWc2RGTmxkRlJwYlc5MWRDZ3BJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0ozTmxkRlJwYldWdmRYUWdhR0Z6SUc1dmRDQmlaV1Z1SUdSbFptbHVaV1FuS1R0Y2JuMWNibVoxYm1OMGFXOXVJR1JsWm1GMWJIUkRiR1ZoY2xScGJXVnZkWFFnS0NrZ2UxeHVJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduWTJ4bFlYSlVhVzFsYjNWMElHaGhjeUJ1YjNRZ1ltVmxiaUJrWldacGJtVmtKeWs3WEc1OVhHNG9ablZ1WTNScGIyNGdLQ2tnZTF4dUlDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdjMlYwVkdsdFpXOTFkQ0E5UFQwZ0oyWjFibU4wYVc5dUp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRmphR1ZrVTJWMFZHbHRaVzkxZENBOUlITmxkRlJwYldWdmRYUTdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCallXTm9aV1JUWlhSVWFXMWxiM1YwSUQwZ1pHVm1ZWFZzZEZObGRGUnBiVzkxZER0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgwZ1kyRjBZMmdnS0dVcElIdGNiaUFnSUNBZ0lDQWdZMkZqYUdWa1UyVjBWR2x0Wlc5MWRDQTlJR1JsWm1GMWJIUlRaWFJVYVcxdmRYUTdYRzRnSUNBZ2ZWeHVJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnWTJ4bFlYSlVhVzFsYjNWMElEMDlQU0FuWm5WdVkzUnBiMjRuS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVdOb1pXUkRiR1ZoY2xScGJXVnZkWFFnUFNCamJHVmhjbFJwYldWdmRYUTdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCallXTm9aV1JEYkdWaGNsUnBiV1Z2ZFhRZ1BTQmtaV1poZFd4MFEyeGxZWEpVYVcxbGIzVjBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdmU0JqWVhSamFDQW9aU2tnZTF4dUlDQWdJQ0FnSUNCallXTm9aV1JEYkdWaGNsUnBiV1Z2ZFhRZ1BTQmtaV1poZFd4MFEyeGxZWEpVYVcxbGIzVjBPMXh1SUNBZ0lIMWNibjBnS0NrcFhHNW1kVzVqZEdsdmJpQnlkVzVVYVcxbGIzVjBLR1oxYmlrZ2UxeHVJQ0FnSUdsbUlDaGpZV05vWldSVFpYUlVhVzFsYjNWMElEMDlQU0J6WlhSVWFXMWxiM1YwS1NCN1hHNGdJQ0FnSUNBZ0lDOHZibTl5YldGc0lHVnVkbWx5YjIxbGJuUnpJR2x1SUhOaGJtVWdjMmwwZFdGMGFXOXVjMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdjMlYwVkdsdFpXOTFkQ2htZFc0c0lEQXBPMXh1SUNBZ0lIMWNiaUFnSUNBdkx5QnBaaUJ6WlhSVWFXMWxiM1YwSUhkaGMyNG5kQ0JoZG1GcGJHRmliR1VnWW5WMElIZGhjeUJzWVhSMFpYSWdaR1ZtYVc1bFpGeHVJQ0FnSUdsbUlDZ29ZMkZqYUdWa1UyVjBWR2x0Wlc5MWRDQTlQVDBnWkdWbVlYVnNkRk5sZEZScGJXOTFkQ0I4ZkNBaFkyRmphR1ZrVTJWMFZHbHRaVzkxZENrZ0ppWWdjMlYwVkdsdFpXOTFkQ2tnZTF4dUlDQWdJQ0FnSUNCallXTm9aV1JUWlhSVWFXMWxiM1YwSUQwZ2MyVjBWR2x0Wlc5MWREdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlITmxkRlJwYldWdmRYUW9ablZ1TENBd0tUdGNiaUFnSUNCOVhHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdMeThnZDJobGJpQjNhR1Z1SUhOdmJXVmliMlI1SUdoaGN5QnpZM0psZDJWa0lIZHBkR2dnYzJWMFZHbHRaVzkxZENCaWRYUWdibThnU1M1RkxpQnRZV1JrYm1WemMxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1kyRmphR1ZrVTJWMFZHbHRaVzkxZENobWRXNHNJREFwTzF4dUlDQWdJSDBnWTJGMFkyZ29aU2w3WEc0Z0lDQWdJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5QlhhR1Z1SUhkbElHRnlaU0JwYmlCSkxrVXVJR0oxZENCMGFHVWdjMk55YVhCMElHaGhjeUJpWldWdUlHVjJZV3hsWkNCemJ5QkpMa1V1SUdSdlpYTnVKM1FnZEhKMWMzUWdkR2hsSUdkc2IySmhiQ0J2WW1wbFkzUWdkMmhsYmlCallXeHNaV1FnYm05eWJXRnNiSGxjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCallXTm9aV1JUWlhSVWFXMWxiM1YwTG1OaGJHd29iblZzYkN3Z1puVnVMQ0F3S1R0Y2JpQWdJQ0FnSUNBZ2ZTQmpZWFJqYUNobEtYdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklITmhiV1VnWVhNZ1lXSnZkbVVnWW5WMElIZG9aVzRnYVhRbmN5QmhJSFpsY25OcGIyNGdiMllnU1M1RkxpQjBhR0YwSUcxMWMzUWdhR0YyWlNCMGFHVWdaMnh2WW1Gc0lHOWlhbVZqZENCbWIzSWdKM1JvYVhNbkxDQm9iM0JtZFd4c2VTQnZkWElnWTI5dWRHVjRkQ0JqYjNKeVpXTjBJRzkwYUdWeWQybHpaU0JwZENCM2FXeHNJSFJvY205M0lHRWdaMnh2WW1Gc0lHVnljbTl5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1kyRmphR1ZrVTJWMFZHbHRaVzkxZEM1allXeHNLSFJvYVhNc0lHWjFiaXdnTUNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOVhHNWNibHh1ZlZ4dVpuVnVZM1JwYjI0Z2NuVnVRMnhsWVhKVWFXMWxiM1YwS0cxaGNtdGxjaWtnZTF4dUlDQWdJR2xtSUNoallXTm9aV1JEYkdWaGNsUnBiV1Z2ZFhRZ1BUMDlJR05zWldGeVZHbHRaVzkxZENrZ2UxeHVJQ0FnSUNBZ0lDQXZMMjV2Y20xaGJDQmxiblpwY205dFpXNTBjeUJwYmlCellXNWxJSE5wZEhWaGRHbHZibk5jYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR05zWldGeVZHbHRaVzkxZENodFlYSnJaWElwTzF4dUlDQWdJSDFjYmlBZ0lDQXZMeUJwWmlCamJHVmhjbFJwYldWdmRYUWdkMkZ6YmlkMElHRjJZV2xzWVdKc1pTQmlkWFFnZDJGeklHeGhkSFJsY2lCa1pXWnBibVZrWEc0Z0lDQWdhV1lnS0NoallXTm9aV1JEYkdWaGNsUnBiV1Z2ZFhRZ1BUMDlJR1JsWm1GMWJIUkRiR1ZoY2xScGJXVnZkWFFnZkh3Z0lXTmhZMmhsWkVOc1pXRnlWR2x0Wlc5MWRDa2dKaVlnWTJ4bFlYSlVhVzFsYjNWMEtTQjdYRzRnSUNBZ0lDQWdJR05oWTJobFpFTnNaV0Z5VkdsdFpXOTFkQ0E5SUdOc1pXRnlWR2x0Wlc5MWREdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHTnNaV0Z5VkdsdFpXOTFkQ2h0WVhKclpYSXBPMXh1SUNBZ0lIMWNiaUFnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0F2THlCM2FHVnVJSGRvWlc0Z2MyOXRaV0p2WkhrZ2FHRnpJSE5qY21WM1pXUWdkMmwwYUNCelpYUlVhVzFsYjNWMElHSjFkQ0J1YnlCSkxrVXVJRzFoWkdSdVpYTnpYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmpZV05vWldSRGJHVmhjbFJwYldWdmRYUW9iV0Z5YTJWeUtUdGNiaUFnSUNCOUlHTmhkR05vSUNobEtYdGNiaUFnSUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SUZkb1pXNGdkMlVnWVhKbElHbHVJRWt1UlM0Z1luVjBJSFJvWlNCelkzSnBjSFFnYUdGeklHSmxaVzRnWlhaaGJHVmtJSE52SUVrdVJTNGdaRzlsYzI0bmRDQWdkSEoxYzNRZ2RHaGxJR2RzYjJKaGJDQnZZbXBsWTNRZ2QyaGxiaUJqWVd4c1pXUWdibTl5YldGc2JIbGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJqWVdOb1pXUkRiR1ZoY2xScGJXVnZkWFF1WTJGc2JDaHVkV3hzTENCdFlYSnJaWElwTzF4dUlDQWdJQ0FnSUNCOUlHTmhkR05vSUNobEtYdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklITmhiV1VnWVhNZ1lXSnZkbVVnWW5WMElIZG9aVzRnYVhRbmN5QmhJSFpsY25OcGIyNGdiMllnU1M1RkxpQjBhR0YwSUcxMWMzUWdhR0YyWlNCMGFHVWdaMnh2WW1Gc0lHOWlhbVZqZENCbWIzSWdKM1JvYVhNbkxDQm9iM0JtZFd4c2VTQnZkWElnWTI5dWRHVjRkQ0JqYjNKeVpXTjBJRzkwYUdWeWQybHpaU0JwZENCM2FXeHNJSFJvY205M0lHRWdaMnh2WW1Gc0lHVnljbTl5TGx4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnVTI5dFpTQjJaWEp6YVc5dWN5QnZaaUJKTGtVdUlHaGhkbVVnWkdsbVptVnlaVzUwSUhKMWJHVnpJR1p2Y2lCamJHVmhjbFJwYldWdmRYUWdkbk1nYzJWMFZHbHRaVzkxZEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHTmhZMmhsWkVOc1pXRnlWR2x0Wlc5MWRDNWpZV3hzS0hSb2FYTXNJRzFoY210bGNpazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmx4dVhHNTlYRzUyWVhJZ2NYVmxkV1VnUFNCYlhUdGNiblpoY2lCa2NtRnBibWx1WnlBOUlHWmhiSE5sTzF4dWRtRnlJR04xY25KbGJuUlJkV1YxWlR0Y2JuWmhjaUJ4ZFdWMVpVbHVaR1Y0SUQwZ0xURTdYRzVjYm1aMWJtTjBhVzl1SUdOc1pXRnVWWEJPWlhoMFZHbGpheWdwSUh0Y2JpQWdJQ0JwWmlBb0lXUnlZV2x1YVc1bklIeDhJQ0ZqZFhKeVpXNTBVWFZsZFdVcElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUgxY2JpQWdJQ0JrY21GcGJtbHVaeUE5SUdaaGJITmxPMXh1SUNBZ0lHbG1JQ2hqZFhKeVpXNTBVWFZsZFdVdWJHVnVaM1JvS1NCN1hHNGdJQ0FnSUNBZ0lIRjFaWFZsSUQwZ1kzVnljbVZ1ZEZGMVpYVmxMbU52Ym1OaGRDaHhkV1YxWlNrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnY1hWbGRXVkpibVJsZUNBOUlDMHhPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9jWFZsZFdVdWJHVnVaM1JvS1NCN1hHNGdJQ0FnSUNBZ0lHUnlZV2x1VVhWbGRXVW9LVHRjYmlBZ0lDQjlYRzU5WEc1Y2JtWjFibU4wYVc5dUlHUnlZV2x1VVhWbGRXVW9LU0I3WEc0Z0lDQWdhV1lnS0dSeVlXbHVhVzVuS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUhScGJXVnZkWFFnUFNCeWRXNVVhVzFsYjNWMEtHTnNaV0Z1VlhCT1pYaDBWR2xqYXlrN1hHNGdJQ0FnWkhKaGFXNXBibWNnUFNCMGNuVmxPMXh1WEc0Z0lDQWdkbUZ5SUd4bGJpQTlJSEYxWlhWbExteGxibWQwYUR0Y2JpQWdJQ0IzYUdsc1pTaHNaVzRwSUh0Y2JpQWdJQ0FnSUNBZ1kzVnljbVZ1ZEZGMVpYVmxJRDBnY1hWbGRXVTdYRzRnSUNBZ0lDQWdJSEYxWlhWbElEMGdXMTA3WEc0Z0lDQWdJQ0FnSUhkb2FXeGxJQ2dySzNGMVpYVmxTVzVrWlhnZ1BDQnNaVzRwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoamRYSnlaVzUwVVhWbGRXVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqZFhKeVpXNTBVWFZsZFdWYmNYVmxkV1ZKYm1SbGVGMHVjblZ1S0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2NYVmxkV1ZKYm1SbGVDQTlJQzB4TzF4dUlDQWdJQ0FnSUNCc1pXNGdQU0J4ZFdWMVpTNXNaVzVuZEdnN1hHNGdJQ0FnZlZ4dUlDQWdJR04xY25KbGJuUlJkV1YxWlNBOUlHNTFiR3c3WEc0Z0lDQWdaSEpoYVc1cGJtY2dQU0JtWVd4elpUdGNiaUFnSUNCeWRXNURiR1ZoY2xScGJXVnZkWFFvZEdsdFpXOTFkQ2s3WEc1OVhHNWNibkJ5YjJObGMzTXVibVY0ZEZScFkyc2dQU0JtZFc1amRHbHZiaUFvWm5WdUtTQjdYRzRnSUNBZ2RtRnlJR0Z5WjNNZ1BTQnVaWGNnUVhKeVlYa29ZWEpuZFcxbGJuUnpMbXhsYm1kMGFDQXRJREVwTzF4dUlDQWdJR2xtSUNoaGNtZDFiV1Z1ZEhNdWJHVnVaM1JvSUQ0Z01Ta2dlMXh1SUNBZ0lDQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Uc2dhU0E4SUdGeVozVnRaVzUwY3k1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1lYSm5jMXRwSUMwZ01WMGdQU0JoY21kMWJXVnVkSE5iYVYwN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnY1hWbGRXVXVjSFZ6YUNodVpYY2dTWFJsYlNobWRXNHNJR0Z5WjNNcEtUdGNiaUFnSUNCcFppQW9jWFZsZFdVdWJHVnVaM1JvSUQwOVBTQXhJQ1ltSUNGa2NtRnBibWx1WnlrZ2UxeHVJQ0FnSUNBZ0lDQnlkVzVVYVcxbGIzVjBLR1J5WVdsdVVYVmxkV1VwTzF4dUlDQWdJSDFjYm4wN1hHNWNiaTh2SUhZNElHeHBhMlZ6SUhCeVpXUnBZM1JwWW14bElHOWlhbVZqZEhOY2JtWjFibU4wYVc5dUlFbDBaVzBvWm5WdUxDQmhjbkpoZVNrZ2UxeHVJQ0FnSUhSb2FYTXVablZ1SUQwZ1puVnVPMXh1SUNBZ0lIUm9hWE11WVhKeVlYa2dQU0JoY25KaGVUdGNibjFjYmtsMFpXMHVjSEp2ZEc5MGVYQmxMbkoxYmlBOUlHWjFibU4wYVc5dUlDZ3BJSHRjYmlBZ0lDQjBhR2x6TG1aMWJpNWhjSEJzZVNodWRXeHNMQ0IwYUdsekxtRnljbUY1S1R0Y2JuMDdYRzV3Y205alpYTnpMblJwZEd4bElEMGdKMkp5YjNkelpYSW5PMXh1Y0hKdlkyVnpjeTVpY205M2MyVnlJRDBnZEhKMVpUdGNibkJ5YjJObGMzTXVaVzUySUQwZ2UzMDdYRzV3Y205alpYTnpMbUZ5WjNZZ1BTQmJYVHRjYm5CeWIyTmxjM011ZG1WeWMybHZiaUE5SUNjbk95QXZMeUJsYlhCMGVTQnpkSEpwYm1jZ2RHOGdZWFp2YVdRZ2NtVm5aWGh3SUdsemMzVmxjMXh1Y0hKdlkyVnpjeTUyWlhKemFXOXVjeUE5SUh0OU8xeHVYRzVtZFc1amRHbHZiaUJ1YjI5d0tDa2dlMzFjYmx4dWNISnZZMlZ6Y3k1dmJpQTlJRzV2YjNBN1hHNXdjbTlqWlhOekxtRmtaRXhwYzNSbGJtVnlJRDBnYm05dmNEdGNibkJ5YjJObGMzTXViMjVqWlNBOUlHNXZiM0E3WEc1d2NtOWpaWE56TG05bVppQTlJRzV2YjNBN1hHNXdjbTlqWlhOekxuSmxiVzkyWlV4cGMzUmxibVZ5SUQwZ2JtOXZjRHRjYm5CeWIyTmxjM011Y21WdGIzWmxRV3hzVEdsemRHVnVaWEp6SUQwZ2JtOXZjRHRjYm5CeWIyTmxjM011WlcxcGRDQTlJRzV2YjNBN1hHNXdjbTlqWlhOekxuQnlaWEJsYm1STWFYTjBaVzVsY2lBOUlHNXZiM0E3WEc1d2NtOWpaWE56TG5CeVpYQmxibVJQYm1ObFRHbHpkR1Z1WlhJZ1BTQnViMjl3TzF4dVhHNXdjbTlqWlhOekxteHBjM1JsYm1WeWN5QTlJR1oxYm1OMGFXOXVJQ2h1WVcxbEtTQjdJSEpsZEhWeWJpQmJYU0I5WEc1Y2JuQnliMk5sYzNNdVltbHVaR2x1WnlBOUlHWjFibU4wYVc5dUlDaHVZVzFsS1NCN1hHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2R3Y205alpYTnpMbUpwYm1ScGJtY2dhWE1nYm05MElITjFjSEJ2Y25SbFpDY3BPMXh1ZlR0Y2JseHVjSEp2WTJWemN5NWpkMlFnUFNCbWRXNWpkR2x2YmlBb0tTQjdJSEpsZEhWeWJpQW5MeWNnZlR0Y2JuQnliMk5sYzNNdVkyaGthWElnUFNCbWRXNWpkR2x2YmlBb1pHbHlLU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZHdjbTlqWlhOekxtTm9aR2x5SUdseklHNXZkQ0J6ZFhCd2IzSjBaV1FuS1R0Y2JuMDdYRzV3Y205alpYTnpMblZ0WVhOcklEMGdablZ1WTNScGIyNG9LU0I3SUhKbGRIVnliaUF3T3lCOU8xeHVYRzVjYmx4dUx5OHZMeTh2THk4dkx5OHZMeTh2THk4dlhHNHZMeUJYUlVKUVFVTkxJRVpQVDFSRlVseHVMeThnTGk5K0wzQnliMk5sYzNNdlluSnZkM05sY2k1cWMxeHVMeThnYlc5a2RXeGxJR2xrSUQwZ05EUmNiaTh2SUcxdlpIVnNaU0JqYUhWdWEzTWdQU0F3SWl3aUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1cGJYQnZjblFnZXlCamJHOWpheUI5SUdaeWIyMGdKeTR1TDIxaGFXNG5PMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5QkpiblJsY25aaGJDQjdYRzVjYmlBZ1kyOXVjM1J5ZFdOMGIzSW9jbUYwWlN4bWRXNWpMRzl1S1NCN1hHNWNiaUFnSUNCMGFHbHpMbkpoZEdVZ1BTQnlZWFJsTzF4dUlDQWdJSFJvYVhNdWIyNGdQU0J2Ymp0Y2JpQWdJQ0IwYUdsekxtTnNiMk5ySUQwZ1kyeHZZMnNvS1RzZ0x5OGdhbk5vYVc1MElHbG5ibTl5WlRwc2FXNWxYRzVjYmlBZ0lDQjBhR2x6TG5CaGRIUmxjbTRnUFNCYk1WMDdYRzRnSUNBZ2RHaHBjeTVwYm1SbGVDQTlJREE3WEc1Y2JpQWdJQ0IwYUdsekxtVjJaVzUwSUQwZ1puVnVZeUEvSUdaMWJtTWdPaUJtZFc1amRHbHZiaWdwSUhzZ2ZUdGNibHh1SUNBZ0lHbG1JQ2gwYUdsekxtOXVLU0I3WEc0Z0lDQWdJQ0IwYUdsekxuTjBZWEowS0NrN1hHNGdJQ0FnZlZ4dVhHNGdJSDFjYmx4dUlDQmZaWFpsYm5Rb1pTa2dlMXh1SUNBdkx5QWdhV1lnS0hSb2FYTXVjR0YwZEdWeWJsdDBhR2x6TG1sdVpHVjRKWFJvYVhNdWNHRjBkR1Z5Ymk1c1pXNW5kR2hkS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbVYyWlc1MEtHVXBPMXh1SUNBdkx5QWdmVnh1SUNBZ0lIUm9hWE11YVc1a1pYZ3JLenRjYmlBZ2ZWeHVYRzRnSUhOMGIzQW9LU0I3WEc0Z0lDQWdkR2hwY3k1dmJpQTlJR1poYkhObE8xeHVJQ0FnSUhSb2FYTXVhVzUwWlhKMllXd3VZMnhsWVhJb0tUdGNiaUFnZlZ4dVhHNGdJSE4wWVhKMEtDa2dlMXh1SUNBZ0lIUm9hWE11YjI0Z1BTQjBjblZsTzF4dUlDQWdJSFJvYVhNdWFXNTBaWEoyWVd3Z1BTQjBhR2x6TG1Oc2IyTnJMbU5oYkd4aVlXTnJRWFJVYVcxbEtIUm9hWE11WDJWMlpXNTBMbUpwYm1Rb2RHaHBjeWtzSUhSb2FYTXVZMnh2WTJzdVkyOXVkR1Y0ZEM1amRYSnlaVzUwVkdsdFpTa3VjbVZ3WldGMEtIUm9hWE11Y21GMFpTOHhNREF3S1M1MGIyeGxjbUZ1WTJVb2UyVmhjbXg1T2lBd0xqRXNJR3hoZEdVNk1YMHBPMXh1SUNCOVhHNWNiaUFnYlhNb2JtVjNjbUYwWlNrZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TG05dUtTQjdYRzRnSUNBZ0lDQjJZWElnY21GMGFXOGdQU0J1WlhkeVlYUmxMM1JvYVhNdWNtRjBaVHRjYmlBZ0lDQWdJSFJvYVhNdWNtRjBaU0E5SUc1bGQzSmhkR1U3WEc0Z0lDQWdJQ0IwYUdsekxtTnNiMk5yTG5ScGJXVlRkSEpsZEdOb0tIUm9hWE11WTJ4dlkyc3VZMjl1ZEdWNGRDNWpkWEp5Wlc1MFZHbHRaU3dnVzNSb2FYTXVhVzUwWlhKMllXeGRMQ0J5WVhScGJ5azdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhSb2FYTXVjbUYwWlNBOUlHNWxkM0poZEdVN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYm4xY2JseHVYRzVjYmk4dklGZEZRbEJCUTBzZ1JrOVBWRVZTSUM4dlhHNHZMeUF1TDM0dmFuTm9hVzUwTFd4dllXUmxjaUV1TDJ4cFlpOTBhVzFsTDJsdWRHVnlkbUZzTG1weklsMHNJbk52ZFhKalpWSnZiM1FpT2lJaWZRPT1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vbmV4dXN1aS9kaXN0L05leHVzVUkuanNcbi8vIG1vZHVsZSBpZCA9IDU2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvYXNzaWduXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvYXNzaWduLmpzXG4vLyBtb2R1bGUgaWQgPSA1N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2h0bWwuanNcbi8vIG1vZHVsZSBpZCA9IDU4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHtnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiA3OyB9fSkuYSAhPSA3O1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qc1xuLy8gbW9kdWxlIGlkID0gNTlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pb2JqZWN0LmpzXG4vLyBtb2R1bGUgaWQgPSA2MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzICA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpXG4gICwgSVRFUkFUT1IgICA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpXG4gICwgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qc1xuLy8gbW9kdWxlIGlkID0gNjFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpe1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2goZSl7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZihyZXQgIT09IHVuZGVmaW5lZClhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWNhbGwuanNcbi8vIG1vZHVsZSBpZCA9IDYyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZICAgICAgICA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKVxuICAsICRleHBvcnQgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCByZWRlZmluZSAgICAgICA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJylcbiAgLCBoaWRlICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hpZGUnKVxuICAsIGhhcyAgICAgICAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCBJdGVyYXRvcnMgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpXG4gICwgJGl0ZXJDcmVhdGUgICAgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpXG4gICwgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpXG4gICwgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJylcbiAgLCBJVEVSQVRPUiAgICAgICA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpXG4gICwgQlVHR1kgICAgICAgICAgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSkgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICAsIEZGX0lURVJBVE9SICAgID0gJ0BAaXRlcmF0b3InXG4gICwgS0VZUyAgICAgICAgICAgPSAna2V5cydcbiAgLCBWQUxVRVMgICAgICAgICA9ICd2YWx1ZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCl7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uKGtpbmQpe1xuICAgIGlmKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKXJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2goa2luZCl7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCl7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKXsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyAgICAgICAgPSBOQU1FICsgJyBJdGVyYXRvcidcbiAgICAsIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFU1xuICAgICwgVkFMVUVTX0JVRyA9IGZhbHNlXG4gICAgLCBwcm90byAgICAgID0gQmFzZS5wcm90b3R5cGVcbiAgICAsICRuYXRpdmUgICAgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF1cbiAgICAsICRkZWZhdWx0ICAgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKVxuICAgICwgJGVudHJpZXMgICA9IERFRkFVTFQgPyAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWRcbiAgICAsICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlXG4gICAgLCBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmKCRhbnlOYXRpdmUpe1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKSk7XG4gICAgaWYoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpe1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmKCFMSUJSQVJZICYmICFoYXMoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SKSloaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgfVxuICB9XG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKXtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZigoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSl7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSAgPSByZXR1cm5UaGlzO1xuICBpZihERUZBVUxUKXtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiAgREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiAgICBJU19TRVQgICAgID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYoRk9SQ0VEKWZvcihrZXkgaW4gbWV0aG9kcyl7XG4gICAgICBpZighKGtleSBpbiBwcm90bykpcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItZGVmaW5lLmpzXG4vLyBtb2R1bGUgaWQgPSA2M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgSVRFUkFUT1IgICAgID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJylcbiAgLCBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbigpeyBTQUZFX0NMT1NJTkcgPSB0cnVlOyB9O1xuICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbigpeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihleGVjLCBza2lwQ2xvc2luZyl7XG4gIGlmKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKXJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyICA9IFs3XVxuICAgICAgLCBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uKCl7IHJldHVybiB7ZG9uZTogc2FmZSA9IHRydWV9OyB9O1xuICAgIGFycltJVEVSQVRPUl0gPSBmdW5jdGlvbigpeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1kZXRlY3QuanNcbi8vIG1vZHVsZSBpZCA9IDY0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ICAgID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCBkUHMgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKVxuICAsIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpXG4gICwgSUVfUFJPVE8gICAgPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJylcbiAgLCBFbXB0eSAgICAgICA9IGZ1bmN0aW9uKCl7IC8qIGVtcHR5ICovIH1cbiAgLCBQUk9UT1RZUEUgICA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uKCl7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2lmcmFtZScpXG4gICAgLCBpICAgICAgPSBlbnVtQnVnS2V5cy5sZW5ndGhcbiAgICAsIGx0ICAgICA9ICc8J1xuICAgICwgZ3QgICAgID0gJz4nXG4gICAgLCBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlcXVpcmUoJy4vX2h0bWwnKS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gJ2phdmFzY3JpcHQ6JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zY3JpcHQtdXJsXG4gIC8vIGNyZWF0ZURpY3QgPSBpZnJhbWUuY29udGVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGh0bWwucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArICdzY3JpcHQnICsgZ3QgKyAnZG9jdW1lbnQuRj1PYmplY3QnICsgbHQgKyAnL3NjcmlwdCcgKyBndCk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIGNyZWF0ZURpY3QgPSBpZnJhbWVEb2N1bWVudC5GO1xuICB3aGlsZShpLS0pZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpe1xuICB2YXIgcmVzdWx0O1xuICBpZihPICE9PSBudWxsKXtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5O1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qc1xuLy8gbW9kdWxlIGlkID0gNjVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gMTkuMS4yLjcgLyAxNS4yLjMuNCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxudmFyICRrZXlzICAgICAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpXG4gICwgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKXtcbiAgcmV0dXJuICRrZXlzKE8sIGhpZGRlbktleXMpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BuLmpzXG4vLyBtb2R1bGUgaWQgPSA2NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgaGFzICAgICAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCB0b0lPYmplY3QgICAgPSByZXF1aXJlKCcuL190by1pb2JqZWN0JylcbiAgLCBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKVxuICAsIElFX1BST1RPICAgICA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmplY3QsIG5hbWVzKXtcbiAgdmFyIE8gICAgICA9IHRvSU9iamVjdChvYmplY3QpXG4gICAgLCBpICAgICAgPSAwXG4gICAgLCByZXN1bHQgPSBbXVxuICAgICwga2V5O1xuICBmb3Ioa2V5IGluIE8paWYoa2V5ICE9IElFX1BST1RPKWhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUobmFtZXMubGVuZ3RoID4gaSlpZihoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpe1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qc1xuLy8gbW9kdWxlIGlkID0gNjdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19oaWRlJyk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19yZWRlZmluZS5qc1xuLy8gbW9kdWxlIGlkID0gNjhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGN0eCAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2N0eCcpXG4gICwgaW52b2tlICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9faW52b2tlJylcbiAgLCBodG1sICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19odG1sJylcbiAgLCBjZWwgICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJylcbiAgLCBnbG9iYWwgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIHByb2Nlc3MgICAgICAgICAgICA9IGdsb2JhbC5wcm9jZXNzXG4gICwgc2V0VGFzayAgICAgICAgICAgID0gZ2xvYmFsLnNldEltbWVkaWF0ZVxuICAsIGNsZWFyVGFzayAgICAgICAgICA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZVxuICAsIE1lc3NhZ2VDaGFubmVsICAgICA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbFxuICAsIGNvdW50ZXIgICAgICAgICAgICA9IDBcbiAgLCBxdWV1ZSAgICAgICAgICAgICAgPSB7fVxuICAsIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnXG4gICwgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24oKXtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIGlmKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSl7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50KXtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYoIXNldFRhc2sgfHwgIWNsZWFyVGFzayl7XG4gIHNldFRhc2sgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoZm4pe1xuICAgIHZhciBhcmdzID0gW10sIGkgPSAxO1xuICAgIHdoaWxlKGFyZ3VtZW50cy5sZW5ndGggPiBpKWFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uKCl7XG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpe1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZihyZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcycpe1xuICAgIGRlZmVyID0gZnVuY3Rpb24oaWQpe1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmKE1lc3NhZ2VDaGFubmVsKXtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsO1xuICAgIHBvcnQgICAgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09ICdmdW5jdGlvbicgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKXtcbiAgICBkZWZlciA9IGZ1bmN0aW9uKGlkKXtcbiAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShpZCArICcnLCAnKicpO1xuICAgIH07XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZihPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSl7XG4gICAgZGVmZXIgPSBmdW5jdGlvbihpZCl7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbigpe1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4uY2FsbChpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbihpZCl7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogICBzZXRUYXNrLFxuICBjbGVhcjogY2xlYXJUYXNrXG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdGFzay5qc1xuLy8gbW9kdWxlIGlkID0gNjlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFycikgPT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vaXNhcnJheS9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gNzFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWRhYmxlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHByb2Nlc3NOZXh0VGljayA9IHJlcXVpcmUoJ3Byb2Nlc3MtbmV4dGljay1hcmdzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblJlYWRhYmxlLlJlYWRhYmxlU3RhdGUgPSBSZWFkYWJsZVN0YXRlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIEVFID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xuXG52YXIgRUVsaXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gKGVtaXR0ZXIsIHR5cGUpIHtcbiAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJzKHR5cGUpLmxlbmd0aDtcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBTdHJlYW0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbi8qPHJlcGxhY2VtZW50PiovXG52YXIgYnVmZmVyU2hpbSA9IHJlcXVpcmUoJ2J1ZmZlci1zaGltcycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBkZWJ1Z1V0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgZGVidWcgPSB2b2lkIDA7XG5pZiAoZGVidWdVdGlsICYmIGRlYnVnVXRpbC5kZWJ1Z2xvZykge1xuICBkZWJ1ZyA9IGRlYnVnVXRpbC5kZWJ1Z2xvZygnc3RyZWFtJyk7XG59IGVsc2Uge1xuICBkZWJ1ZyA9IGZ1bmN0aW9uICgpIHt9O1xufVxuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXJMaXN0ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL0J1ZmZlckxpc3QnKTtcbnZhciBTdHJpbmdEZWNvZGVyO1xuXG51dGlsLmluaGVyaXRzKFJlYWRhYmxlLCBTdHJlYW0pO1xuXG52YXIga1Byb3h5RXZlbnRzID0gWydlcnJvcicsICdjbG9zZScsICdkZXN0cm95JywgJ3BhdXNlJywgJ3Jlc3VtZSddO1xuXG5mdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGZuKSB7XG4gIC8vIFNhZGx5IHRoaXMgaXMgbm90IGNhY2hlYWJsZSBhcyBzb21lIGxpYnJhcmllcyBidW5kbGUgdGhlaXIgb3duXG4gIC8vIGV2ZW50IGVtaXR0ZXIgaW1wbGVtZW50YXRpb24gd2l0aCB0aGVtLlxuICBpZiAodHlwZW9mIGVtaXR0ZXIucHJlcGVuZExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGVtaXR0ZXIucHJlcGVuZExpc3RlbmVyKGV2ZW50LCBmbik7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBpcyBhIGhhY2sgdG8gbWFrZSBzdXJlIHRoYXQgb3VyIGVycm9yIGhhbmRsZXIgaXMgYXR0YWNoZWQgYmVmb3JlIGFueVxuICAgIC8vIHVzZXJsYW5kIG9uZXMuICBORVZFUiBETyBUSElTLiBUaGlzIGlzIGhlcmUgb25seSBiZWNhdXNlIHRoaXMgY29kZSBuZWVkc1xuICAgIC8vIHRvIGNvbnRpbnVlIHRvIHdvcmsgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBOb2RlLmpzIHRoYXQgZG8gbm90IGluY2x1ZGVcbiAgICAvLyB0aGUgcHJlcGVuZExpc3RlbmVyKCkgbWV0aG9kLiBUaGUgZ29hbCBpcyB0byBldmVudHVhbGx5IHJlbW92ZSB0aGlzIGhhY2suXG4gICAgaWYgKCFlbWl0dGVyLl9ldmVudHMgfHwgIWVtaXR0ZXIuX2V2ZW50c1tldmVudF0pIGVtaXR0ZXIub24oZXZlbnQsIGZuKTtlbHNlIGlmIChpc0FycmF5KGVtaXR0ZXIuX2V2ZW50c1tldmVudF0pKSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdLnVuc2hpZnQoZm4pO2Vsc2UgZW1pdHRlci5fZXZlbnRzW2V2ZW50XSA9IFtmbiwgZW1pdHRlci5fZXZlbnRzW2V2ZW50XV07XG4gIH1cbn1cblxuZnVuY3Rpb24gUmVhZGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0pIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBvYmplY3Qgc3RyZWFtIGZsYWcuIFVzZWQgdG8gbWFrZSByZWFkKG4pIGlnbm9yZSBuIGFuZCB0b1xuICAvLyBtYWtlIGFsbCB0aGUgYnVmZmVyIG1lcmdpbmcgYW5kIGxlbmd0aCBjaGVja3MgZ28gYXdheVxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcblxuICBpZiAoc3RyZWFtIGluc3RhbmNlb2YgRHVwbGV4KSB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyB0aGUgcG9pbnQgYXQgd2hpY2ggaXQgc3RvcHMgY2FsbGluZyBfcmVhZCgpIHRvIGZpbGwgdGhlIGJ1ZmZlclxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIFwiZG9uJ3QgY2FsbCBfcmVhZCBwcmVlbXB0aXZlbHkgZXZlclwiXG4gIHZhciBod20gPSBvcHRpb25zLmhpZ2hXYXRlck1hcms7XG4gIHZhciBkZWZhdWx0SHdtID0gdGhpcy5vYmplY3RNb2RlID8gMTYgOiAxNiAqIDEwMjQ7XG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IGh3bSB8fCBod20gPT09IDAgPyBod20gOiBkZWZhdWx0SHdtO1xuXG4gIC8vIGNhc3QgdG8gaW50cy5cbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gfn50aGlzLmhpZ2hXYXRlck1hcms7XG5cbiAgLy8gQSBsaW5rZWQgbGlzdCBpcyB1c2VkIHRvIHN0b3JlIGRhdGEgY2h1bmtzIGluc3RlYWQgb2YgYW4gYXJyYXkgYmVjYXVzZSB0aGVcbiAgLy8gbGlua2VkIGxpc3QgY2FuIHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBiZWdpbm5pbmcgZmFzdGVyIHRoYW5cbiAgLy8gYXJyYXkuc2hpZnQoKVxuICB0aGlzLmJ1ZmZlciA9IG5ldyBCdWZmZXJMaXN0KCk7XG4gIHRoaXMubGVuZ3RoID0gMDtcbiAgdGhpcy5waXBlcyA9IG51bGw7XG4gIHRoaXMucGlwZXNDb3VudCA9IDA7XG4gIHRoaXMuZmxvd2luZyA9IG51bGw7XG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgdGhpcy5lbmRFbWl0dGVkID0gZmFsc2U7XG4gIHRoaXMucmVhZGluZyA9IGZhbHNlO1xuXG4gIC8vIGEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIG9ud3JpdGUgY2IgaXMgY2FsbGVkIGltbWVkaWF0ZWx5LFxuICAvLyBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlIGFueVxuICAvLyBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCB3cml0ZSBjYWxsLlxuICB0aGlzLnN5bmMgPSB0cnVlO1xuXG4gIC8vIHdoZW5ldmVyIHdlIHJldHVybiBudWxsLCB0aGVuIHdlIHNldCBhIGZsYWcgdG8gc2F5XG4gIC8vIHRoYXQgd2UncmUgYXdhaXRpbmcgYSAncmVhZGFibGUnIGV2ZW50IGVtaXNzaW9uLlxuICB0aGlzLm5lZWRSZWFkYWJsZSA9IGZhbHNlO1xuICB0aGlzLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuICB0aGlzLnJlYWRhYmxlTGlzdGVuaW5nID0gZmFsc2U7XG4gIHRoaXMucmVzdW1lU2NoZWR1bGVkID0gZmFsc2U7XG5cbiAgLy8gQ3J5cHRvIGlzIGtpbmQgb2Ygb2xkIGFuZCBjcnVzdHkuICBIaXN0b3JpY2FsbHksIGl0cyBkZWZhdWx0IHN0cmluZ1xuICAvLyBlbmNvZGluZyBpcyAnYmluYXJ5JyBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBjb25maWd1cmFibGUuXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgdW5pdmVyc2UgdXNlcyAndXRmOCcsIHRob3VnaC5cbiAgdGhpcy5kZWZhdWx0RW5jb2RpbmcgPSBvcHRpb25zLmRlZmF1bHRFbmNvZGluZyB8fCAndXRmOCc7XG5cbiAgLy8gd2hlbiBwaXBpbmcsIHdlIG9ubHkgY2FyZSBhYm91dCAncmVhZGFibGUnIGV2ZW50cyB0aGF0IGhhcHBlblxuICAvLyBhZnRlciByZWFkKClpbmcgYWxsIHRoZSBieXRlcyBhbmQgbm90IGdldHRpbmcgYW55IHB1c2hiYWNrLlxuICB0aGlzLnJhbk91dCA9IGZhbHNlO1xuXG4gIC8vIHRoZSBudW1iZXIgb2Ygd3JpdGVycyB0aGF0IGFyZSBhd2FpdGluZyBhIGRyYWluIGV2ZW50IGluIC5waXBlKClzXG4gIHRoaXMuYXdhaXREcmFpbiA9IDA7XG5cbiAgLy8gaWYgdHJ1ZSwgYSBtYXliZVJlYWRNb3JlIGhhcyBiZWVuIHNjaGVkdWxlZFxuICB0aGlzLnJlYWRpbmdNb3JlID0gZmFsc2U7XG5cbiAgdGhpcy5kZWNvZGVyID0gbnVsbDtcbiAgdGhpcy5lbmNvZGluZyA9IG51bGw7XG4gIGlmIChvcHRpb25zLmVuY29kaW5nKSB7XG4gICAgaWYgKCFTdHJpbmdEZWNvZGVyKSBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXIvJykuU3RyaW5nRGVjb2RlcjtcbiAgICB0aGlzLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihvcHRpb25zLmVuY29kaW5nKTtcbiAgICB0aGlzLmVuY29kaW5nID0gb3B0aW9ucy5lbmNvZGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBSZWFkYWJsZShvcHRpb25zKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRhYmxlKSkgcmV0dXJuIG5ldyBSZWFkYWJsZShvcHRpb25zKTtcblxuICB0aGlzLl9yZWFkYWJsZVN0YXRlID0gbmV3IFJlYWRhYmxlU3RhdGUob3B0aW9ucywgdGhpcyk7XG5cbiAgLy8gbGVnYWN5XG4gIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuXG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLnJlYWQgPT09ICdmdW5jdGlvbicpIHRoaXMuX3JlYWQgPSBvcHRpb25zLnJlYWQ7XG5cbiAgU3RyZWFtLmNhbGwodGhpcyk7XG59XG5cbi8vIE1hbnVhbGx5IHNob3ZlIHNvbWV0aGluZyBpbnRvIHRoZSByZWFkKCkgYnVmZmVyLlxuLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlIGhpZ2hXYXRlck1hcmsgaGFzIG5vdCBiZWVuIGhpdCB5ZXQsXG4vLyBzaW1pbGFyIHRvIGhvdyBXcml0YWJsZS53cml0ZSgpIHJldHVybnMgdHJ1ZSBpZiB5b3Ugc2hvdWxkXG4vLyB3cml0ZSgpIHNvbWUgbW9yZS5cblJlYWRhYmxlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuXG4gIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBlbmNvZGluZyB8fCBzdGF0ZS5kZWZhdWx0RW5jb2Rpbmc7XG4gICAgaWYgKGVuY29kaW5nICE9PSBzdGF0ZS5lbmNvZGluZykge1xuICAgICAgY2h1bmsgPSBidWZmZXJTaGltLmZyb20oY2h1bmssIGVuY29kaW5nKTtcbiAgICAgIGVuY29kaW5nID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgc3RhdGUsIGNodW5rLCBlbmNvZGluZywgZmFsc2UpO1xufTtcblxuLy8gVW5zaGlmdCBzaG91bGQgKmFsd2F5cyogYmUgc29tZXRoaW5nIGRpcmVjdGx5IG91dCBvZiByZWFkKClcblJlYWRhYmxlLnByb3RvdHlwZS51bnNoaWZ0ID0gZnVuY3Rpb24gKGNodW5rKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIHN0YXRlLCBjaHVuaywgJycsIHRydWUpO1xufTtcblxuUmVhZGFibGUucHJvdG90eXBlLmlzUGF1c2VkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID09PSBmYWxzZTtcbn07XG5cbmZ1bmN0aW9uIHJlYWRhYmxlQWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGVuY29kaW5nLCBhZGRUb0Zyb250KSB7XG4gIHZhciBlciA9IGNodW5rSW52YWxpZChzdGF0ZSwgY2h1bmspO1xuICBpZiAoZXIpIHtcbiAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gIH0gZWxzZSBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKTtcbiAgfSBlbHNlIGlmIChzdGF0ZS5vYmplY3RNb2RlIHx8IGNodW5rICYmIGNodW5rLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoc3RhdGUuZW5kZWQgJiYgIWFkZFRvRnJvbnQpIHtcbiAgICAgIHZhciBlID0gbmV3IEVycm9yKCdzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRicpO1xuICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZSk7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5lbmRFbWl0dGVkICYmIGFkZFRvRnJvbnQpIHtcbiAgICAgIHZhciBfZSA9IG5ldyBFcnJvcignc3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQnKTtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIF9lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHNraXBBZGQ7XG4gICAgICBpZiAoc3RhdGUuZGVjb2RlciAmJiAhYWRkVG9Gcm9udCAmJiAhZW5jb2RpbmcpIHtcbiAgICAgICAgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKTtcbiAgICAgICAgc2tpcEFkZCA9ICFzdGF0ZS5vYmplY3RNb2RlICYmIGNodW5rLmxlbmd0aCA9PT0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFhZGRUb0Zyb250KSBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG5cbiAgICAgIC8vIERvbid0IGFkZCB0byB0aGUgYnVmZmVyIGlmIHdlJ3ZlIGRlY29kZWQgdG8gYW4gZW1wdHkgc3RyaW5nIGNodW5rIGFuZFxuICAgICAgLy8gd2UncmUgbm90IGluIG9iamVjdCBtb2RlXG4gICAgICBpZiAoIXNraXBBZGQpIHtcbiAgICAgICAgLy8gaWYgd2Ugd2FudCB0aGUgZGF0YSBub3csIGp1c3QgZW1pdCBpdC5cbiAgICAgICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwICYmICFzdGF0ZS5zeW5jKSB7XG4gICAgICAgICAgc3RyZWFtLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gICAgICAgICAgc3RyZWFtLnJlYWQoMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gdXBkYXRlIHRoZSBidWZmZXIgaW5mby5cbiAgICAgICAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgICAgICAgaWYgKGFkZFRvRnJvbnQpIHN0YXRlLmJ1ZmZlci51bnNoaWZ0KGNodW5rKTtlbHNlIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKTtcblxuICAgICAgICAgIGlmIChzdGF0ZS5uZWVkUmVhZGFibGUpIGVtaXRSZWFkYWJsZShzdHJlYW0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCFhZGRUb0Zyb250KSB7XG4gICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIG5lZWRNb3JlRGF0YShzdGF0ZSk7XG59XG5cbi8vIGlmIGl0J3MgcGFzdCB0aGUgaGlnaCB3YXRlciBtYXJrLCB3ZSBjYW4gcHVzaCBpbiBzb21lIG1vcmUuXG4vLyBBbHNvLCBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0LCB3ZSBjYW4gc3RhbmQgc29tZVxuLy8gbW9yZSBieXRlcy4gIFRoaXMgaXMgdG8gd29yayBhcm91bmQgY2FzZXMgd2hlcmUgaHdtPTAsXG4vLyBzdWNoIGFzIHRoZSByZXBsLiAgQWxzbywgaWYgdGhlIHB1c2goKSB0cmlnZ2VyZWQgYVxuLy8gcmVhZGFibGUgZXZlbnQsIGFuZCB0aGUgdXNlciBjYWxsZWQgcmVhZChsYXJnZU51bWJlcikgc3VjaCB0aGF0XG4vLyBuZWVkUmVhZGFibGUgd2FzIHNldCwgdGhlbiB3ZSBvdWdodCB0byBwdXNoIG1vcmUsIHNvIHRoYXQgYW5vdGhlclxuLy8gJ3JlYWRhYmxlJyBldmVudCB3aWxsIGJlIHRyaWdnZXJlZC5cbmZ1bmN0aW9uIG5lZWRNb3JlRGF0YShzdGF0ZSkge1xuICByZXR1cm4gIXN0YXRlLmVuZGVkICYmIChzdGF0ZS5uZWVkUmVhZGFibGUgfHwgc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyayB8fCBzdGF0ZS5sZW5ndGggPT09IDApO1xufVxuXG4vLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cblJlYWRhYmxlLnByb3RvdHlwZS5zZXRFbmNvZGluZyA9IGZ1bmN0aW9uIChlbmMpIHtcbiAgaWYgKCFTdHJpbmdEZWNvZGVyKSBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXIvJykuU3RyaW5nRGVjb2RlcjtcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoZW5jKTtcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZyA9IGVuYztcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBEb24ndCByYWlzZSB0aGUgaHdtID4gOE1CXG52YXIgTUFYX0hXTSA9IDB4ODAwMDAwO1xuZnVuY3Rpb24gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobikge1xuICBpZiAobiA+PSBNQVhfSFdNKSB7XG4gICAgbiA9IE1BWF9IV007XG4gIH0gZWxzZSB7XG4gICAgLy8gR2V0IHRoZSBuZXh0IGhpZ2hlc3QgcG93ZXIgb2YgMiB0byBwcmV2ZW50IGluY3JlYXNpbmcgaHdtIGV4Y2Vzc2l2ZWx5IGluXG4gICAgLy8gdGlueSBhbW91bnRzXG4gICAgbi0tO1xuICAgIG4gfD0gbiA+Pj4gMTtcbiAgICBuIHw9IG4gPj4+IDI7XG4gICAgbiB8PSBuID4+PiA0O1xuICAgIG4gfD0gbiA+Pj4gODtcbiAgICBuIHw9IG4gPj4+IDE2O1xuICAgIG4rKztcbiAgfVxuICByZXR1cm4gbjtcbn1cblxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKSB7XG4gIGlmIChuIDw9IDAgfHwgc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKSByZXR1cm4gMDtcbiAgaWYgKHN0YXRlLm9iamVjdE1vZGUpIHJldHVybiAxO1xuICBpZiAobiAhPT0gbikge1xuICAgIC8vIE9ubHkgZmxvdyBvbmUgYnVmZmVyIGF0IGEgdGltZVxuICAgIGlmIChzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmxlbmd0aCkgcmV0dXJuIHN0YXRlLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoO2Vsc2UgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbiAgfVxuICAvLyBJZiB3ZSdyZSBhc2tpbmcgZm9yIG1vcmUgdGhhbiB0aGUgY3VycmVudCBod20sIHRoZW4gcmFpc2UgdGhlIGh3bS5cbiAgaWYgKG4gPiBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSBzdGF0ZS5oaWdoV2F0ZXJNYXJrID0gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobik7XG4gIGlmIChuIDw9IHN0YXRlLmxlbmd0aCkgcmV0dXJuIG47XG4gIC8vIERvbid0IGhhdmUgZW5vdWdoXG4gIGlmICghc3RhdGUuZW5kZWQpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIHJldHVybiAwO1xuICB9XG4gIHJldHVybiBzdGF0ZS5sZW5ndGg7XG59XG5cbi8vIHlvdSBjYW4gb3ZlcnJpZGUgZWl0aGVyIHRoaXMgbWV0aG9kLCBvciB0aGUgYXN5bmMgX3JlYWQobikgYmVsb3cuXG5SZWFkYWJsZS5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gIGRlYnVnKCdyZWFkJywgbik7XG4gIG4gPSBwYXJzZUludChuLCAxMCk7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciBuT3JpZyA9IG47XG5cbiAgaWYgKG4gIT09IDApIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuXG4gIC8vIGlmIHdlJ3JlIGRvaW5nIHJlYWQoMCkgdG8gdHJpZ2dlciBhIHJlYWRhYmxlIGV2ZW50LCBidXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGEgYnVuY2ggb2YgZGF0YSBpbiB0aGUgYnVmZmVyLCB0aGVuIGp1c3QgdHJpZ2dlclxuICAvLyB0aGUgJ3JlYWRhYmxlJyBldmVudCBhbmQgbW92ZSBvbi5cbiAgaWYgKG4gPT09IDAgJiYgc3RhdGUubmVlZFJlYWRhYmxlICYmIChzdGF0ZS5sZW5ndGggPj0gc3RhdGUuaGlnaFdhdGVyTWFyayB8fCBzdGF0ZS5lbmRlZCkpIHtcbiAgICBkZWJ1ZygncmVhZDogZW1pdFJlYWRhYmxlJywgc3RhdGUubGVuZ3RoLCBzdGF0ZS5lbmRlZCk7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkgZW5kUmVhZGFibGUodGhpcyk7ZWxzZSBlbWl0UmVhZGFibGUodGhpcyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBuID0gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSk7XG5cbiAgLy8gaWYgd2UndmUgZW5kZWQsIGFuZCB3ZSdyZSBub3cgY2xlYXIsIHRoZW4gZmluaXNoIGl0IHVwLlxuICBpZiAobiA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkge1xuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIGVuZFJlYWRhYmxlKHRoaXMpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQWxsIHRoZSBhY3R1YWwgY2h1bmsgZ2VuZXJhdGlvbiBsb2dpYyBuZWVkcyB0byBiZVxuICAvLyAqYmVsb3cqIHRoZSBjYWxsIHRvIF9yZWFkLiAgVGhlIHJlYXNvbiBpcyB0aGF0IGluIGNlcnRhaW5cbiAgLy8gc3ludGhldGljIHN0cmVhbSBjYXNlcywgc3VjaCBhcyBwYXNzdGhyb3VnaCBzdHJlYW1zLCBfcmVhZFxuICAvLyBtYXkgYmUgYSBjb21wbGV0ZWx5IHN5bmNocm9ub3VzIG9wZXJhdGlvbiB3aGljaCBtYXkgY2hhbmdlXG4gIC8vIHRoZSBzdGF0ZSBvZiB0aGUgcmVhZCBidWZmZXIsIHByb3ZpZGluZyBlbm91Z2ggZGF0YSB3aGVuXG4gIC8vIGJlZm9yZSB0aGVyZSB3YXMgKm5vdCogZW5vdWdoLlxuICAvL1xuICAvLyBTbywgdGhlIHN0ZXBzIGFyZTpcbiAgLy8gMS4gRmlndXJlIG91dCB3aGF0IHRoZSBzdGF0ZSBvZiB0aGluZ3Mgd2lsbCBiZSBhZnRlciB3ZSBkb1xuICAvLyBhIHJlYWQgZnJvbSB0aGUgYnVmZmVyLlxuICAvL1xuICAvLyAyLiBJZiB0aGF0IHJlc3VsdGluZyBzdGF0ZSB3aWxsIHRyaWdnZXIgYSBfcmVhZCwgdGhlbiBjYWxsIF9yZWFkLlxuICAvLyBOb3RlIHRoYXQgdGhpcyBtYXkgYmUgYXN5bmNocm9ub3VzLCBvciBzeW5jaHJvbm91cy4gIFllcywgaXQgaXNcbiAgLy8gZGVlcGx5IHVnbHkgdG8gd3JpdGUgQVBJcyB0aGlzIHdheSwgYnV0IHRoYXQgc3RpbGwgZG9lc24ndCBtZWFuXG4gIC8vIHRoYXQgdGhlIFJlYWRhYmxlIGNsYXNzIHNob3VsZCBiZWhhdmUgaW1wcm9wZXJseSwgYXMgc3RyZWFtcyBhcmVcbiAgLy8gZGVzaWduZWQgdG8gYmUgc3luYy9hc3luYyBhZ25vc3RpYy5cbiAgLy8gVGFrZSBub3RlIGlmIHRoZSBfcmVhZCBjYWxsIGlzIHN5bmMgb3IgYXN5bmMgKGllLCBpZiB0aGUgcmVhZCBjYWxsXG4gIC8vIGhhcyByZXR1cm5lZCB5ZXQpLCBzbyB0aGF0IHdlIGtub3cgd2hldGhlciBvciBub3QgaXQncyBzYWZlIHRvIGVtaXRcbiAgLy8gJ3JlYWRhYmxlJyBldGMuXG4gIC8vXG4gIC8vIDMuIEFjdHVhbGx5IHB1bGwgdGhlIHJlcXVlc3RlZCBjaHVua3Mgb3V0IG9mIHRoZSBidWZmZXIgYW5kIHJldHVybi5cblxuICAvLyBpZiB3ZSBuZWVkIGEgcmVhZGFibGUgZXZlbnQsIHRoZW4gd2UgbmVlZCB0byBkbyBzb21lIHJlYWRpbmcuXG4gIHZhciBkb1JlYWQgPSBzdGF0ZS5uZWVkUmVhZGFibGU7XG4gIGRlYnVnKCduZWVkIHJlYWRhYmxlJywgZG9SZWFkKTtcblxuICAvLyBpZiB3ZSBjdXJyZW50bHkgaGF2ZSBsZXNzIHRoYW4gdGhlIGhpZ2hXYXRlck1hcmssIHRoZW4gYWxzbyByZWFkIHNvbWVcbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCB8fCBzdGF0ZS5sZW5ndGggLSBuIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgIGRvUmVhZCA9IHRydWU7XG4gICAgZGVidWcoJ2xlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrJywgZG9SZWFkKTtcbiAgfVxuXG4gIC8vIGhvd2V2ZXIsIGlmIHdlJ3ZlIGVuZGVkLCB0aGVuIHRoZXJlJ3Mgbm8gcG9pbnQsIGFuZCBpZiB3ZSdyZSBhbHJlYWR5XG4gIC8vIHJlYWRpbmcsIHRoZW4gaXQncyB1bm5lY2Vzc2FyeS5cbiAgaWYgKHN0YXRlLmVuZGVkIHx8IHN0YXRlLnJlYWRpbmcpIHtcbiAgICBkb1JlYWQgPSBmYWxzZTtcbiAgICBkZWJ1ZygncmVhZGluZyBvciBlbmRlZCcsIGRvUmVhZCk7XG4gIH0gZWxzZSBpZiAoZG9SZWFkKSB7XG4gICAgZGVidWcoJ2RvIHJlYWQnKTtcbiAgICBzdGF0ZS5yZWFkaW5nID0gdHJ1ZTtcbiAgICBzdGF0ZS5zeW5jID0gdHJ1ZTtcbiAgICAvLyBpZiB0aGUgbGVuZ3RoIGlzIGN1cnJlbnRseSB6ZXJvLCB0aGVuIHdlICpuZWVkKiBhIHJlYWRhYmxlIGV2ZW50LlxuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgLy8gY2FsbCBpbnRlcm5hbCByZWFkIG1ldGhvZFxuICAgIHRoaXMuX3JlYWQoc3RhdGUuaGlnaFdhdGVyTWFyayk7XG4gICAgc3RhdGUuc3luYyA9IGZhbHNlO1xuICAgIC8vIElmIF9yZWFkIHB1c2hlZCBkYXRhIHN5bmNocm9ub3VzbHksIHRoZW4gYHJlYWRpbmdgIHdpbGwgYmUgZmFsc2UsXG4gICAgLy8gYW5kIHdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgaG93IG11Y2ggZGF0YSB3ZSBjYW4gcmV0dXJuIHRvIHRoZSB1c2VyLlxuICAgIGlmICghc3RhdGUucmVhZGluZykgbiA9IGhvd011Y2hUb1JlYWQobk9yaWcsIHN0YXRlKTtcbiAgfVxuXG4gIHZhciByZXQ7XG4gIGlmIChuID4gMCkgcmV0ID0gZnJvbUxpc3Qobiwgc3RhdGUpO2Vsc2UgcmV0ID0gbnVsbDtcblxuICBpZiAocmV0ID09PSBudWxsKSB7XG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICBuID0gMDtcbiAgfSBlbHNlIHtcbiAgICBzdGF0ZS5sZW5ndGggLT0gbjtcbiAgfVxuXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICAvLyBJZiB3ZSBoYXZlIG5vdGhpbmcgaW4gdGhlIGJ1ZmZlciwgdGhlbiB3ZSB3YW50IHRvIGtub3dcbiAgICAvLyBhcyBzb29uIGFzIHdlICpkbyogZ2V0IHNvbWV0aGluZyBpbnRvIHRoZSBidWZmZXIuXG4gICAgaWYgKCFzdGF0ZS5lbmRlZCkgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcblxuICAgIC8vIElmIHdlIHRyaWVkIHRvIHJlYWQoKSBwYXN0IHRoZSBFT0YsIHRoZW4gZW1pdCBlbmQgb24gdGhlIG5leHQgdGljay5cbiAgICBpZiAobk9yaWcgIT09IG4gJiYgc3RhdGUuZW5kZWQpIGVuZFJlYWRhYmxlKHRoaXMpO1xuICB9XG5cbiAgaWYgKHJldCAhPT0gbnVsbCkgdGhpcy5lbWl0KCdkYXRhJywgcmV0KTtcblxuICByZXR1cm4gcmV0O1xufTtcblxuZnVuY3Rpb24gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuaykge1xuICB2YXIgZXIgPSBudWxsO1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihjaHVuaykgJiYgdHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJiBjaHVuayAhPT0gbnVsbCAmJiBjaHVuayAhPT0gdW5kZWZpbmVkICYmICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rJyk7XG4gIH1cbiAgcmV0dXJuIGVyO1xufVxuXG5mdW5jdGlvbiBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmVuZGVkKSByZXR1cm47XG4gIGlmIChzdGF0ZS5kZWNvZGVyKSB7XG4gICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSB7XG4gICAgICBzdGF0ZS5idWZmZXIucHVzaChjaHVuayk7XG4gICAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgfVxuICB9XG4gIHN0YXRlLmVuZGVkID0gdHJ1ZTtcblxuICAvLyBlbWl0ICdyZWFkYWJsZScgbm93IHRvIG1ha2Ugc3VyZSBpdCBnZXRzIHBpY2tlZCB1cC5cbiAgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG59XG5cbi8vIERvbid0IGVtaXQgcmVhZGFibGUgcmlnaHQgYXdheSBpbiBzeW5jIG1vZGUsIGJlY2F1c2UgdGhpcyBjYW4gdHJpZ2dlclxuLy8gYW5vdGhlciByZWFkKCkgY2FsbCA9PiBzdGFjayBvdmVyZmxvdy4gIFRoaXMgd2F5LCBpdCBtaWdodCB0cmlnZ2VyXG4vLyBhIG5leHRUaWNrIHJlY3Vyc2lvbiB3YXJuaW5nLCBidXQgdGhhdCdzIG5vdCBzbyBiYWQuXG5mdW5jdGlvbiBlbWl0UmVhZGFibGUoc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgc3RhdGUubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gIGlmICghc3RhdGUuZW1pdHRlZFJlYWRhYmxlKSB7XG4gICAgZGVidWcoJ2VtaXRSZWFkYWJsZScsIHN0YXRlLmZsb3dpbmcpO1xuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgaWYgKHN0YXRlLnN5bmMpIHByb2Nlc3NOZXh0VGljayhlbWl0UmVhZGFibGVfLCBzdHJlYW0pO2Vsc2UgZW1pdFJlYWRhYmxlXyhzdHJlYW0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZV8oc3RyZWFtKSB7XG4gIGRlYnVnKCdlbWl0IHJlYWRhYmxlJyk7XG4gIHN0cmVhbS5lbWl0KCdyZWFkYWJsZScpO1xuICBmbG93KHN0cmVhbSk7XG59XG5cbi8vIGF0IHRoaXMgcG9pbnQsIHRoZSB1c2VyIGhhcyBwcmVzdW1hYmx5IHNlZW4gdGhlICdyZWFkYWJsZScgZXZlbnQsXG4vLyBhbmQgY2FsbGVkIHJlYWQoKSB0byBjb25zdW1lIHNvbWUgZGF0YS4gIHRoYXQgbWF5IGhhdmUgdHJpZ2dlcmVkXG4vLyBpbiB0dXJuIGFub3RoZXIgX3JlYWQobikgY2FsbCwgaW4gd2hpY2ggY2FzZSByZWFkaW5nID0gdHJ1ZSBpZlxuLy8gaXQncyBpbiBwcm9ncmVzcy5cbi8vIEhvd2V2ZXIsIGlmIHdlJ3JlIG5vdCBlbmRlZCwgb3IgcmVhZGluZywgYW5kIHRoZSBsZW5ndGggPCBod20sXG4vLyB0aGVuIGdvIGFoZWFkIGFuZCB0cnkgdG8gcmVhZCBzb21lIG1vcmUgcHJlZW1wdGl2ZWx5LlxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVhZGluZ01vcmUpIHtcbiAgICBzdGF0ZS5yZWFkaW5nTW9yZSA9IHRydWU7XG4gICAgcHJvY2Vzc05leHRUaWNrKG1heWJlUmVhZE1vcmVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlXyhzdHJlYW0sIHN0YXRlKSB7XG4gIHZhciBsZW4gPSBzdGF0ZS5sZW5ndGg7XG4gIHdoaWxlICghc3RhdGUucmVhZGluZyAmJiAhc3RhdGUuZmxvd2luZyAmJiAhc3RhdGUuZW5kZWQgJiYgc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgIGRlYnVnKCdtYXliZVJlYWRNb3JlIHJlYWQgMCcpO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICAgIGlmIChsZW4gPT09IHN0YXRlLmxlbmd0aClcbiAgICAgIC8vIGRpZG4ndCBnZXQgYW55IGRhdGEsIHN0b3Agc3Bpbm5pbmcuXG4gICAgICBicmVhaztlbHNlIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgfVxuICBzdGF0ZS5yZWFkaW5nTW9yZSA9IGZhbHNlO1xufVxuXG4vLyBhYnN0cmFjdCBtZXRob2QuICB0byBiZSBvdmVycmlkZGVuIGluIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGNsYXNzZXMuXG4vLyBjYWxsIGNiKGVyLCBkYXRhKSB3aGVyZSBkYXRhIGlzIDw9IG4gaW4gbGVuZ3RoLlxuLy8gZm9yIHZpcnR1YWwgKG5vbi1zdHJpbmcsIG5vbi1idWZmZXIpIHN0cmVhbXMsIFwibGVuZ3RoXCIgaXMgc29tZXdoYXRcbi8vIGFyYml0cmFyeSwgYW5kIHBlcmhhcHMgbm90IHZlcnkgbWVhbmluZ2Z1bC5cblJlYWRhYmxlLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ19yZWFkKCkgaXMgbm90IGltcGxlbWVudGVkJykpO1xufTtcblxuUmVhZGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoZGVzdCwgcGlwZU9wdHMpIHtcbiAgdmFyIHNyYyA9IHRoaXM7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgc3dpdGNoIChzdGF0ZS5waXBlc0NvdW50KSB7XG4gICAgY2FzZSAwOlxuICAgICAgc3RhdGUucGlwZXMgPSBkZXN0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgc3RhdGUucGlwZXMgPSBbc3RhdGUucGlwZXMsIGRlc3RdO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN0YXRlLnBpcGVzLnB1c2goZGVzdCk7XG4gICAgICBicmVhaztcbiAgfVxuICBzdGF0ZS5waXBlc0NvdW50ICs9IDE7XG4gIGRlYnVnKCdwaXBlIGNvdW50PSVkIG9wdHM9JWonLCBzdGF0ZS5waXBlc0NvdW50LCBwaXBlT3B0cyk7XG5cbiAgdmFyIGRvRW5kID0gKCFwaXBlT3B0cyB8fCBwaXBlT3B0cy5lbmQgIT09IGZhbHNlKSAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZG91dCAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZGVycjtcblxuICB2YXIgZW5kRm4gPSBkb0VuZCA/IG9uZW5kIDogY2xlYW51cDtcbiAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHByb2Nlc3NOZXh0VGljayhlbmRGbik7ZWxzZSBzcmMub25jZSgnZW5kJywgZW5kRm4pO1xuXG4gIGRlc3Qub24oJ3VucGlwZScsIG9udW5waXBlKTtcbiAgZnVuY3Rpb24gb251bnBpcGUocmVhZGFibGUpIHtcbiAgICBkZWJ1Zygnb251bnBpcGUnKTtcbiAgICBpZiAocmVhZGFibGUgPT09IHNyYykge1xuICAgICAgY2xlYW51cCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uZW5kKCkge1xuICAgIGRlYnVnKCdvbmVuZCcpO1xuICAgIGRlc3QuZW5kKCk7XG4gIH1cblxuICAvLyB3aGVuIHRoZSBkZXN0IGRyYWlucywgaXQgcmVkdWNlcyB0aGUgYXdhaXREcmFpbiBjb3VudGVyXG4gIC8vIG9uIHRoZSBzb3VyY2UuICBUaGlzIHdvdWxkIGJlIG1vcmUgZWxlZ2FudCB3aXRoIGEgLm9uY2UoKVxuICAvLyBoYW5kbGVyIGluIGZsb3coKSwgYnV0IGFkZGluZyBhbmQgcmVtb3ZpbmcgcmVwZWF0ZWRseSBpc1xuICAvLyB0b28gc2xvdy5cbiAgdmFyIG9uZHJhaW4gPSBwaXBlT25EcmFpbihzcmMpO1xuICBkZXN0Lm9uKCdkcmFpbicsIG9uZHJhaW4pO1xuXG4gIHZhciBjbGVhbmVkVXAgPSBmYWxzZTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBkZWJ1ZygnY2xlYW51cCcpO1xuICAgIC8vIGNsZWFudXAgZXZlbnQgaGFuZGxlcnMgb25jZSB0aGUgcGlwZSBpcyBicm9rZW5cbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcigndW5waXBlJywgb251bnBpcGUpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgY2xlYW51cCk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25kYXRhKTtcblxuICAgIGNsZWFuZWRVcCA9IHRydWU7XG5cbiAgICAvLyBpZiB0aGUgcmVhZGVyIGlzIHdhaXRpbmcgZm9yIGEgZHJhaW4gZXZlbnQgZnJvbSB0aGlzXG4gICAgLy8gc3BlY2lmaWMgd3JpdGVyLCB0aGVuIGl0IHdvdWxkIGNhdXNlIGl0IHRvIG5ldmVyIHN0YXJ0XG4gICAgLy8gZmxvd2luZyBhZ2Fpbi5cbiAgICAvLyBTbywgaWYgdGhpcyBpcyBhd2FpdGluZyBhIGRyYWluLCB0aGVuIHdlIGp1c3QgY2FsbCBpdCBub3cuXG4gICAgLy8gSWYgd2UgZG9uJ3Qga25vdywgdGhlbiBhc3N1bWUgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igb25lLlxuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluICYmICghZGVzdC5fd3JpdGFibGVTdGF0ZSB8fCBkZXN0Ll93cml0YWJsZVN0YXRlLm5lZWREcmFpbikpIG9uZHJhaW4oKTtcbiAgfVxuXG4gIC8vIElmIHRoZSB1c2VyIHB1c2hlcyBtb3JlIGRhdGEgd2hpbGUgd2UncmUgd3JpdGluZyB0byBkZXN0IHRoZW4gd2UnbGwgZW5kIHVwXG4gIC8vIGluIG9uZGF0YSBhZ2Fpbi4gSG93ZXZlciwgd2Ugb25seSB3YW50IHRvIGluY3JlYXNlIGF3YWl0RHJhaW4gb25jZSBiZWNhdXNlXG4gIC8vIGRlc3Qgd2lsbCBvbmx5IGVtaXQgb25lICdkcmFpbicgZXZlbnQgZm9yIHRoZSBtdWx0aXBsZSB3cml0ZXMuXG4gIC8vID0+IEludHJvZHVjZSBhIGd1YXJkIG9uIGluY3JlYXNpbmcgYXdhaXREcmFpbi5cbiAgdmFyIGluY3JlYXNlZEF3YWl0RHJhaW4gPSBmYWxzZTtcbiAgc3JjLm9uKCdkYXRhJywgb25kYXRhKTtcbiAgZnVuY3Rpb24gb25kYXRhKGNodW5rKSB7XG4gICAgZGVidWcoJ29uZGF0YScpO1xuICAgIGluY3JlYXNlZEF3YWl0RHJhaW4gPSBmYWxzZTtcbiAgICB2YXIgcmV0ID0gZGVzdC53cml0ZShjaHVuayk7XG4gICAgaWYgKGZhbHNlID09PSByZXQgJiYgIWluY3JlYXNlZEF3YWl0RHJhaW4pIHtcbiAgICAgIC8vIElmIHRoZSB1c2VyIHVucGlwZWQgZHVyaW5nIGBkZXN0LndyaXRlKClgLCBpdCBpcyBwb3NzaWJsZVxuICAgICAgLy8gdG8gZ2V0IHN0dWNrIGluIGEgcGVybWFuZW50bHkgcGF1c2VkIHN0YXRlIGlmIHRoYXQgd3JpdGVcbiAgICAgIC8vIGFsc28gcmV0dXJuZWQgZmFsc2UuXG4gICAgICAvLyA9PiBDaGVjayB3aGV0aGVyIGBkZXN0YCBpcyBzdGlsbCBhIHBpcGluZyBkZXN0aW5hdGlvbi5cbiAgICAgIGlmICgoc3RhdGUucGlwZXNDb3VudCA9PT0gMSAmJiBzdGF0ZS5waXBlcyA9PT0gZGVzdCB8fCBzdGF0ZS5waXBlc0NvdW50ID4gMSAmJiBpbmRleE9mKHN0YXRlLnBpcGVzLCBkZXN0KSAhPT0gLTEpICYmICFjbGVhbmVkVXApIHtcbiAgICAgICAgZGVidWcoJ2ZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZScsIHNyYy5fcmVhZGFibGVTdGF0ZS5hd2FpdERyYWluKTtcbiAgICAgICAgc3JjLl9yZWFkYWJsZVN0YXRlLmF3YWl0RHJhaW4rKztcbiAgICAgICAgaW5jcmVhc2VkQXdhaXREcmFpbiA9IHRydWU7XG4gICAgICB9XG4gICAgICBzcmMucGF1c2UoKTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgZGVzdCBoYXMgYW4gZXJyb3IsIHRoZW4gc3RvcCBwaXBpbmcgaW50byBpdC5cbiAgLy8gaG93ZXZlciwgZG9uJ3Qgc3VwcHJlc3MgdGhlIHRocm93aW5nIGJlaGF2aW9yIGZvciB0aGlzLlxuICBmdW5jdGlvbiBvbmVycm9yKGVyKSB7XG4gICAgZGVidWcoJ29uZXJyb3InLCBlcik7XG4gICAgdW5waXBlKCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBpZiAoRUVsaXN0ZW5lckNvdW50KGRlc3QsICdlcnJvcicpID09PSAwKSBkZXN0LmVtaXQoJ2Vycm9yJywgZXIpO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIG91ciBlcnJvciBoYW5kbGVyIGlzIGF0dGFjaGVkIGJlZm9yZSB1c2VybGFuZCBvbmVzLlxuICBwcmVwZW5kTGlzdGVuZXIoZGVzdCwgJ2Vycm9yJywgb25lcnJvcik7XG5cbiAgLy8gQm90aCBjbG9zZSBhbmQgZmluaXNoIHNob3VsZCB0cmlnZ2VyIHVucGlwZSwgYnV0IG9ubHkgb25jZS5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgdW5waXBlKCk7XG4gIH1cbiAgZGVzdC5vbmNlKCdjbG9zZScsIG9uY2xvc2UpO1xuICBmdW5jdGlvbiBvbmZpbmlzaCgpIHtcbiAgICBkZWJ1Zygnb25maW5pc2gnKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIHVucGlwZSgpO1xuICB9XG4gIGRlc3Qub25jZSgnZmluaXNoJywgb25maW5pc2gpO1xuXG4gIGZ1bmN0aW9uIHVucGlwZSgpIHtcbiAgICBkZWJ1ZygndW5waXBlJyk7XG4gICAgc3JjLnVucGlwZShkZXN0KTtcbiAgfVxuXG4gIC8vIHRlbGwgdGhlIGRlc3QgdGhhdCBpdCdzIGJlaW5nIHBpcGVkIHRvXG4gIGRlc3QuZW1pdCgncGlwZScsIHNyYyk7XG5cbiAgLy8gc3RhcnQgdGhlIGZsb3cgaWYgaXQgaGFzbid0IGJlZW4gc3RhcnRlZCBhbHJlYWR5LlxuICBpZiAoIXN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGlwZSByZXN1bWUnKTtcbiAgICBzcmMucmVzdW1lKCk7XG4gIH1cblxuICByZXR1cm4gZGVzdDtcbn07XG5cbmZ1bmN0aW9uIHBpcGVPbkRyYWluKHNyYykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGF0ZSA9IHNyYy5fcmVhZGFibGVTdGF0ZTtcbiAgICBkZWJ1ZygncGlwZU9uRHJhaW4nLCBzdGF0ZS5hd2FpdERyYWluKTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbikgc3RhdGUuYXdhaXREcmFpbi0tO1xuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluID09PSAwICYmIEVFbGlzdGVuZXJDb3VudChzcmMsICdkYXRhJykpIHtcbiAgICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlO1xuICAgICAgZmxvdyhzcmMpO1xuICAgIH1cbiAgfTtcbn1cblxuUmVhZGFibGUucHJvdG90eXBlLnVucGlwZSA9IGZ1bmN0aW9uIChkZXN0KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgLy8gaWYgd2UncmUgbm90IHBpcGluZyBhbnl3aGVyZSwgdGhlbiBkbyBub3RoaW5nLlxuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMCkgcmV0dXJuIHRoaXM7XG5cbiAgLy8ganVzdCBvbmUgZGVzdGluYXRpb24uICBtb3N0IGNvbW1vbiBjYXNlLlxuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMSkge1xuICAgIC8vIHBhc3NlZCBpbiBvbmUsIGJ1dCBpdCdzIG5vdCB0aGUgcmlnaHQgb25lLlxuICAgIGlmIChkZXN0ICYmIGRlc3QgIT09IHN0YXRlLnBpcGVzKSByZXR1cm4gdGhpcztcblxuICAgIGlmICghZGVzdCkgZGVzdCA9IHN0YXRlLnBpcGVzO1xuXG4gICAgLy8gZ290IGEgbWF0Y2guXG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICBpZiAoZGVzdCkgZGVzdC5lbWl0KCd1bnBpcGUnLCB0aGlzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHNsb3cgY2FzZS4gbXVsdGlwbGUgcGlwZSBkZXN0aW5hdGlvbnMuXG5cbiAgaWYgKCFkZXN0KSB7XG4gICAgLy8gcmVtb3ZlIGFsbC5cbiAgICB2YXIgZGVzdHMgPSBzdGF0ZS5waXBlcztcbiAgICB2YXIgbGVuID0gc3RhdGUucGlwZXNDb3VudDtcbiAgICBzdGF0ZS5waXBlcyA9IG51bGw7XG4gICAgc3RhdGUucGlwZXNDb3VudCA9IDA7XG4gICAgc3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgZGVzdHNbaV0uZW1pdCgndW5waXBlJywgdGhpcyk7XG4gICAgfXJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gdHJ5IHRvIGZpbmQgdGhlIHJpZ2h0IG9uZS5cbiAgdmFyIGluZGV4ID0gaW5kZXhPZihzdGF0ZS5waXBlcywgZGVzdCk7XG4gIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiB0aGlzO1xuXG4gIHN0YXRlLnBpcGVzLnNwbGljZShpbmRleCwgMSk7XG4gIHN0YXRlLnBpcGVzQ291bnQgLT0gMTtcbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpIHN0YXRlLnBpcGVzID0gc3RhdGUucGlwZXNbMF07XG5cbiAgZGVzdC5lbWl0KCd1bnBpcGUnLCB0aGlzKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIHNldCB1cCBkYXRhIGV2ZW50cyBpZiB0aGV5IGFyZSBhc2tlZCBmb3Jcbi8vIEVuc3VyZSByZWFkYWJsZSBsaXN0ZW5lcnMgZXZlbnR1YWxseSBnZXQgc29tZXRoaW5nXG5SZWFkYWJsZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXYsIGZuKSB7XG4gIHZhciByZXMgPSBTdHJlYW0ucHJvdG90eXBlLm9uLmNhbGwodGhpcywgZXYsIGZuKTtcblxuICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgIC8vIFN0YXJ0IGZsb3dpbmcgb24gbmV4dCB0aWNrIGlmIHN0cmVhbSBpc24ndCBleHBsaWNpdGx5IHBhdXNlZFxuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgIT09IGZhbHNlKSB0aGlzLnJlc3VtZSgpO1xuICB9IGVsc2UgaWYgKGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nKSB7XG4gICAgICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgICAgIGlmICghc3RhdGUucmVhZGluZykge1xuICAgICAgICBwcm9jZXNzTmV4dFRpY2soblJlYWRpbmdOZXh0VGljaywgdGhpcyk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmxlbmd0aCkge1xuICAgICAgICBlbWl0UmVhZGFibGUodGhpcywgc3RhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXM7XG59O1xuUmVhZGFibGUucHJvdG90eXBlLmFkZExpc3RlbmVyID0gUmVhZGFibGUucHJvdG90eXBlLm9uO1xuXG5mdW5jdGlvbiBuUmVhZGluZ05leHRUaWNrKHNlbGYpIHtcbiAgZGVidWcoJ3JlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCcpO1xuICBzZWxmLnJlYWQoMCk7XG59XG5cbi8vIHBhdXNlKCkgYW5kIHJlc3VtZSgpIGFyZSByZW1uYW50cyBvZiB0aGUgbGVnYWN5IHJlYWRhYmxlIHN0cmVhbSBBUElcbi8vIElmIHRoZSB1c2VyIHVzZXMgdGhlbSwgdGhlbiBzd2l0Y2ggaW50byBvbGQgbW9kZS5cblJlYWRhYmxlLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdyZXN1bWUnKTtcbiAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcbiAgICByZXN1bWUodGhpcywgc3RhdGUpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gcmVzdW1lKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZXN1bWVTY2hlZHVsZWQpIHtcbiAgICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHByb2Nlc3NOZXh0VGljayhyZXN1bWVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXN1bWVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZSByZWFkIDAnKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgfVxuXG4gIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlO1xuICBzdGF0ZS5hd2FpdERyYWluID0gMDtcbiAgc3RyZWFtLmVtaXQoJ3Jlc3VtZScpO1xuICBmbG93KHN0cmVhbSk7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5yZWFkaW5nKSBzdHJlYW0ucmVhZCgwKTtcbn1cblxuUmVhZGFibGUucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICBkZWJ1ZygnY2FsbCBwYXVzZSBmbG93aW5nPSVqJywgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKTtcbiAgaWYgKGZhbHNlICE9PSB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGF1c2UnKTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXQoJ3BhdXNlJyk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBmbG93KHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdmbG93Jywgc3RhdGUuZmxvd2luZyk7XG4gIHdoaWxlIChzdGF0ZS5mbG93aW5nICYmIHN0cmVhbS5yZWFkKCkgIT09IG51bGwpIHt9XG59XG5cbi8vIHdyYXAgYW4gb2xkLXN0eWxlIHN0cmVhbSBhcyB0aGUgYXN5bmMgZGF0YSBzb3VyY2UuXG4vLyBUaGlzIGlzICpub3QqIHBhcnQgb2YgdGhlIHJlYWRhYmxlIHN0cmVhbSBpbnRlcmZhY2UuXG4vLyBJdCBpcyBhbiB1Z2x5IHVuZm9ydHVuYXRlIG1lc3Mgb2YgaGlzdG9yeS5cblJlYWRhYmxlLnByb3RvdHlwZS53cmFwID0gZnVuY3Rpb24gKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgcGF1c2VkID0gZmFsc2U7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBlbmQnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlciAmJiAhc3RhdGUuZW5kZWQpIHtcbiAgICAgIHZhciBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKCk7XG4gICAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSBzZWxmLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIHNlbGYucHVzaChudWxsKTtcbiAgfSk7XG5cbiAgc3RyZWFtLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgZGF0YScpO1xuICAgIGlmIChzdGF0ZS5kZWNvZGVyKSBjaHVuayA9IHN0YXRlLmRlY29kZXIud3JpdGUoY2h1bmspO1xuXG4gICAgLy8gZG9uJ3Qgc2tpcCBvdmVyIGZhbHN5IHZhbHVlcyBpbiBvYmplY3RNb2RlXG4gICAgaWYgKHN0YXRlLm9iamVjdE1vZGUgJiYgKGNodW5rID09PSBudWxsIHx8IGNodW5rID09PSB1bmRlZmluZWQpKSByZXR1cm47ZWxzZSBpZiAoIXN0YXRlLm9iamVjdE1vZGUgJiYgKCFjaHVuayB8fCAhY2h1bmsubGVuZ3RoKSkgcmV0dXJuO1xuXG4gICAgdmFyIHJldCA9IHNlbGYucHVzaChjaHVuayk7XG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICBzdHJlYW0ucGF1c2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHByb3h5IGFsbCB0aGUgb3RoZXIgbWV0aG9kcy5cbiAgLy8gaW1wb3J0YW50IHdoZW4gd3JhcHBpbmcgZmlsdGVycyBhbmQgZHVwbGV4ZXMuXG4gIGZvciAodmFyIGkgaW4gc3RyZWFtKSB7XG4gICAgaWYgKHRoaXNbaV0gPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygc3RyZWFtW2ldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2ldID0gZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBzdHJlYW1bbWV0aG9kXS5hcHBseShzdHJlYW0sIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgICB9KGkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHByb3h5IGNlcnRhaW4gaW1wb3J0YW50IGV2ZW50cy5cbiAgZm9yICh2YXIgbiA9IDA7IG4gPCBrUHJveHlFdmVudHMubGVuZ3RoOyBuKyspIHtcbiAgICBzdHJlYW0ub24oa1Byb3h5RXZlbnRzW25dLCBzZWxmLmVtaXQuYmluZChzZWxmLCBrUHJveHlFdmVudHNbbl0pKTtcbiAgfVxuXG4gIC8vIHdoZW4gd2UgdHJ5IHRvIGNvbnN1bWUgc29tZSBtb3JlIGJ5dGVzLCBzaW1wbHkgdW5wYXVzZSB0aGVcbiAgLy8gdW5kZXJseWluZyBzdHJlYW0uXG4gIHNlbGYuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICAgIGRlYnVnKCd3cmFwcGVkIF9yZWFkJywgbik7XG4gICAgaWYgKHBhdXNlZCkge1xuICAgICAgcGF1c2VkID0gZmFsc2U7XG4gICAgICBzdHJlYW0ucmVzdW1lKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBzZWxmO1xufTtcblxuLy8gZXhwb3NlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuUmVhZGFibGUuX2Zyb21MaXN0ID0gZnJvbUxpc3Q7XG5cbi8vIFBsdWNrIG9mZiBuIGJ5dGVzIGZyb20gYW4gYXJyYXkgb2YgYnVmZmVycy5cbi8vIExlbmd0aCBpcyB0aGUgY29tYmluZWQgbGVuZ3RocyBvZiBhbGwgdGhlIGJ1ZmZlcnMgaW4gdGhlIGxpc3QuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGZyb21MaXN0KG4sIHN0YXRlKSB7XG4gIC8vIG5vdGhpbmcgYnVmZmVyZWRcbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgdmFyIHJldDtcbiAgaWYgKHN0YXRlLm9iamVjdE1vZGUpIHJldCA9IHN0YXRlLmJ1ZmZlci5zaGlmdCgpO2Vsc2UgaWYgKCFuIHx8IG4gPj0gc3RhdGUubGVuZ3RoKSB7XG4gICAgLy8gcmVhZCBpdCBhbGwsIHRydW5jYXRlIHRoZSBsaXN0XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIHJldCA9IHN0YXRlLmJ1ZmZlci5qb2luKCcnKTtlbHNlIGlmIChzdGF0ZS5idWZmZXIubGVuZ3RoID09PSAxKSByZXQgPSBzdGF0ZS5idWZmZXIuaGVhZC5kYXRhO2Vsc2UgcmV0ID0gc3RhdGUuYnVmZmVyLmNvbmNhdChzdGF0ZS5sZW5ndGgpO1xuICAgIHN0YXRlLmJ1ZmZlci5jbGVhcigpO1xuICB9IGVsc2Uge1xuICAgIC8vIHJlYWQgcGFydCBvZiBsaXN0XG4gICAgcmV0ID0gZnJvbUxpc3RQYXJ0aWFsKG4sIHN0YXRlLmJ1ZmZlciwgc3RhdGUuZGVjb2Rlcik7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG4vLyBFeHRyYWN0cyBvbmx5IGVub3VnaCBidWZmZXJlZCBkYXRhIHRvIHNhdGlzZnkgdGhlIGFtb3VudCByZXF1ZXN0ZWQuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGZyb21MaXN0UGFydGlhbChuLCBsaXN0LCBoYXNTdHJpbmdzKSB7XG4gIHZhciByZXQ7XG4gIGlmIChuIDwgbGlzdC5oZWFkLmRhdGEubGVuZ3RoKSB7XG4gICAgLy8gc2xpY2UgaXMgdGhlIHNhbWUgZm9yIGJ1ZmZlcnMgYW5kIHN0cmluZ3NcbiAgICByZXQgPSBsaXN0LmhlYWQuZGF0YS5zbGljZSgwLCBuKTtcbiAgICBsaXN0LmhlYWQuZGF0YSA9IGxpc3QuaGVhZC5kYXRhLnNsaWNlKG4pO1xuICB9IGVsc2UgaWYgKG4gPT09IGxpc3QuaGVhZC5kYXRhLmxlbmd0aCkge1xuICAgIC8vIGZpcnN0IGNodW5rIGlzIGEgcGVyZmVjdCBtYXRjaFxuICAgIHJldCA9IGxpc3Quc2hpZnQoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyByZXN1bHQgc3BhbnMgbW9yZSB0aGFuIG9uZSBidWZmZXJcbiAgICByZXQgPSBoYXNTdHJpbmdzID8gY29weUZyb21CdWZmZXJTdHJpbmcobiwgbGlzdCkgOiBjb3B5RnJvbUJ1ZmZlcihuLCBsaXN0KTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vLyBDb3BpZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGNoYXJhY3RlcnMgZnJvbSB0aGUgbGlzdCBvZiBidWZmZXJlZCBkYXRhXG4vLyBjaHVua3MuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGNvcHlGcm9tQnVmZmVyU3RyaW5nKG4sIGxpc3QpIHtcbiAgdmFyIHAgPSBsaXN0LmhlYWQ7XG4gIHZhciBjID0gMTtcbiAgdmFyIHJldCA9IHAuZGF0YTtcbiAgbiAtPSByZXQubGVuZ3RoO1xuICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgIHZhciBzdHIgPSBwLmRhdGE7XG4gICAgdmFyIG5iID0gbiA+IHN0ci5sZW5ndGggPyBzdHIubGVuZ3RoIDogbjtcbiAgICBpZiAobmIgPT09IHN0ci5sZW5ndGgpIHJldCArPSBzdHI7ZWxzZSByZXQgKz0gc3RyLnNsaWNlKDAsIG4pO1xuICAgIG4gLT0gbmI7XG4gICAgaWYgKG4gPT09IDApIHtcbiAgICAgIGlmIChuYiA9PT0gc3RyLmxlbmd0aCkge1xuICAgICAgICArK2M7XG4gICAgICAgIGlmIChwLm5leHQpIGxpc3QuaGVhZCA9IHAubmV4dDtlbHNlIGxpc3QuaGVhZCA9IGxpc3QudGFpbCA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaXN0LmhlYWQgPSBwO1xuICAgICAgICBwLmRhdGEgPSBzdHIuc2xpY2UobmIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgICsrYztcbiAgfVxuICBsaXN0Lmxlbmd0aCAtPSBjO1xuICByZXR1cm4gcmV0O1xufVxuXG4vLyBDb3BpZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGJ5dGVzIGZyb20gdGhlIGxpc3Qgb2YgYnVmZmVyZWQgZGF0YSBjaHVua3MuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGNvcHlGcm9tQnVmZmVyKG4sIGxpc3QpIHtcbiAgdmFyIHJldCA9IGJ1ZmZlclNoaW0uYWxsb2NVbnNhZmUobik7XG4gIHZhciBwID0gbGlzdC5oZWFkO1xuICB2YXIgYyA9IDE7XG4gIHAuZGF0YS5jb3B5KHJldCk7XG4gIG4gLT0gcC5kYXRhLmxlbmd0aDtcbiAgd2hpbGUgKHAgPSBwLm5leHQpIHtcbiAgICB2YXIgYnVmID0gcC5kYXRhO1xuICAgIHZhciBuYiA9IG4gPiBidWYubGVuZ3RoID8gYnVmLmxlbmd0aCA6IG47XG4gICAgYnVmLmNvcHkocmV0LCByZXQubGVuZ3RoIC0gbiwgMCwgbmIpO1xuICAgIG4gLT0gbmI7XG4gICAgaWYgKG4gPT09IDApIHtcbiAgICAgIGlmIChuYiA9PT0gYnVmLmxlbmd0aCkge1xuICAgICAgICArK2M7XG4gICAgICAgIGlmIChwLm5leHQpIGxpc3QuaGVhZCA9IHAubmV4dDtlbHNlIGxpc3QuaGVhZCA9IGxpc3QudGFpbCA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaXN0LmhlYWQgPSBwO1xuICAgICAgICBwLmRhdGEgPSBidWYuc2xpY2UobmIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgICsrYztcbiAgfVxuICBsaXN0Lmxlbmd0aCAtPSBjO1xuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBlbmRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuXG4gIC8vIElmIHdlIGdldCBoZXJlIGJlZm9yZSBjb25zdW1pbmcgYWxsIHRoZSBieXRlcywgdGhlbiB0aGF0IGlzIGFcbiAgLy8gYnVnIGluIG5vZGUuICBTaG91bGQgbmV2ZXIgaGFwcGVuLlxuICBpZiAoc3RhdGUubGVuZ3RoID4gMCkgdGhyb3cgbmV3IEVycm9yKCdcImVuZFJlYWRhYmxlKClcIiBjYWxsZWQgb24gbm9uLWVtcHR5IHN0cmVhbScpO1xuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCkge1xuICAgIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgICBwcm9jZXNzTmV4dFRpY2soZW5kUmVhZGFibGVOVCwgc3RhdGUsIHN0cmVhbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5kUmVhZGFibGVOVChzdGF0ZSwgc3RyZWFtKSB7XG4gIC8vIENoZWNrIHRoYXQgd2UgZGlkbid0IGdldCBvbmUgbGFzdCB1bnNoaWZ0LlxuICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgc3RhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgc3RhdGUuZW5kRW1pdHRlZCA9IHRydWU7XG4gICAgc3RyZWFtLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgc3RyZWFtLmVtaXQoJ2VuZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvckVhY2goeHMsIGYpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmKHhzW2ldLCBpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbmRleE9mKHhzLCB4KSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKHhzW2ldID09PSB4KSByZXR1cm4gaTtcbiAgfVxuICByZXR1cm4gLTE7XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9yZWFkYWJsZS5qc1xuLy8gbW9kdWxlIGlkID0gNzJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gYSB0cmFuc2Zvcm0gc3RyZWFtIGlzIGEgcmVhZGFibGUvd3JpdGFibGUgc3RyZWFtIHdoZXJlIHlvdSBkb1xuLy8gc29tZXRoaW5nIHdpdGggdGhlIGRhdGEuICBTb21ldGltZXMgaXQncyBjYWxsZWQgYSBcImZpbHRlclwiLFxuLy8gYnV0IHRoYXQncyBub3QgYSBncmVhdCBuYW1lIGZvciBpdCwgc2luY2UgdGhhdCBpbXBsaWVzIGEgdGhpbmcgd2hlcmVcbi8vIHNvbWUgYml0cyBwYXNzIHRocm91Z2gsIGFuZCBvdGhlcnMgYXJlIHNpbXBseSBpZ25vcmVkLiAgKFRoYXQgd291bGRcbi8vIGJlIGEgdmFsaWQgZXhhbXBsZSBvZiBhIHRyYW5zZm9ybSwgb2YgY291cnNlLilcbi8vXG4vLyBXaGlsZSB0aGUgb3V0cHV0IGlzIGNhdXNhbGx5IHJlbGF0ZWQgdG8gdGhlIGlucHV0LCBpdCdzIG5vdCBhXG4vLyBuZWNlc3NhcmlseSBzeW1tZXRyaWMgb3Igc3luY2hyb25vdXMgdHJhbnNmb3JtYXRpb24uICBGb3IgZXhhbXBsZSxcbi8vIGEgemxpYiBzdHJlYW0gbWlnaHQgdGFrZSBtdWx0aXBsZSBwbGFpbi10ZXh0IHdyaXRlcygpLCBhbmQgdGhlblxuLy8gZW1pdCBhIHNpbmdsZSBjb21wcmVzc2VkIGNodW5rIHNvbWUgdGltZSBpbiB0aGUgZnV0dXJlLlxuLy9cbi8vIEhlcmUncyBob3cgdGhpcyB3b3Jrczpcbi8vXG4vLyBUaGUgVHJhbnNmb3JtIHN0cmVhbSBoYXMgYWxsIHRoZSBhc3BlY3RzIG9mIHRoZSByZWFkYWJsZSBhbmQgd3JpdGFibGVcbi8vIHN0cmVhbSBjbGFzc2VzLiAgV2hlbiB5b3Ugd3JpdGUoY2h1bmspLCB0aGF0IGNhbGxzIF93cml0ZShjaHVuayxjYilcbi8vIGludGVybmFsbHksIGFuZCByZXR1cm5zIGZhbHNlIGlmIHRoZXJlJ3MgYSBsb3Qgb2YgcGVuZGluZyB3cml0ZXNcbi8vIGJ1ZmZlcmVkIHVwLiAgV2hlbiB5b3UgY2FsbCByZWFkKCksIHRoYXQgY2FsbHMgX3JlYWQobikgdW50aWxcbi8vIHRoZXJlJ3MgZW5vdWdoIHBlbmRpbmcgcmVhZGFibGUgZGF0YSBidWZmZXJlZCB1cC5cbi8vXG4vLyBJbiBhIHRyYW5zZm9ybSBzdHJlYW0sIHRoZSB3cml0dGVuIGRhdGEgaXMgcGxhY2VkIGluIGEgYnVmZmVyLiAgV2hlblxuLy8gX3JlYWQobikgaXMgY2FsbGVkLCBpdCB0cmFuc2Zvcm1zIHRoZSBxdWV1ZWQgdXAgZGF0YSwgY2FsbGluZyB0aGVcbi8vIGJ1ZmZlcmVkIF93cml0ZSBjYidzIGFzIGl0IGNvbnN1bWVzIGNodW5rcy4gIElmIGNvbnN1bWluZyBhIHNpbmdsZVxuLy8gd3JpdHRlbiBjaHVuayB3b3VsZCByZXN1bHQgaW4gbXVsdGlwbGUgb3V0cHV0IGNodW5rcywgdGhlbiB0aGUgZmlyc3Rcbi8vIG91dHB1dHRlZCBiaXQgY2FsbHMgdGhlIHJlYWRjYiwgYW5kIHN1YnNlcXVlbnQgY2h1bmtzIGp1c3QgZ28gaW50b1xuLy8gdGhlIHJlYWQgYnVmZmVyLCBhbmQgd2lsbCBjYXVzZSBpdCB0byBlbWl0ICdyZWFkYWJsZScgaWYgbmVjZXNzYXJ5LlxuLy9cbi8vIFRoaXMgd2F5LCBiYWNrLXByZXNzdXJlIGlzIGFjdHVhbGx5IGRldGVybWluZWQgYnkgdGhlIHJlYWRpbmcgc2lkZSxcbi8vIHNpbmNlIF9yZWFkIGhhcyB0byBiZSBjYWxsZWQgdG8gc3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBjaHVuay4gIEhvd2V2ZXIsXG4vLyBhIHBhdGhvbG9naWNhbCBpbmZsYXRlIHR5cGUgb2YgdHJhbnNmb3JtIGNhbiBjYXVzZSBleGNlc3NpdmUgYnVmZmVyaW5nXG4vLyBoZXJlLiAgRm9yIGV4YW1wbGUsIGltYWdpbmUgYSBzdHJlYW0gd2hlcmUgZXZlcnkgYnl0ZSBvZiBpbnB1dCBpc1xuLy8gaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlciBmcm9tIDAtMjU1LCBhbmQgdGhlbiByZXN1bHRzIGluIHRoYXQgbWFueVxuLy8gYnl0ZXMgb2Ygb3V0cHV0LiAgV3JpdGluZyB0aGUgNCBieXRlcyB7ZmYsZmYsZmYsZmZ9IHdvdWxkIHJlc3VsdCBpblxuLy8gMWtiIG9mIGRhdGEgYmVpbmcgb3V0cHV0LiAgSW4gdGhpcyBjYXNlLCB5b3UgY291bGQgd3JpdGUgYSB2ZXJ5IHNtYWxsXG4vLyBhbW91bnQgb2YgaW5wdXQsIGFuZCBlbmQgdXAgd2l0aCBhIHZlcnkgbGFyZ2UgYW1vdW50IG9mIG91dHB1dC4gIEluXG4vLyBzdWNoIGEgcGF0aG9sb2dpY2FsIGluZmxhdGluZyBtZWNoYW5pc20sIHRoZXJlJ2QgYmUgbm8gd2F5IHRvIHRlbGxcbi8vIHRoZSBzeXN0ZW0gdG8gc3RvcCBkb2luZyB0aGUgdHJhbnNmb3JtLiAgQSBzaW5nbGUgNE1CIHdyaXRlIGNvdWxkXG4vLyBjYXVzZSB0aGUgc3lzdGVtIHRvIHJ1biBvdXQgb2YgbWVtb3J5LlxuLy9cbi8vIEhvd2V2ZXIsIGV2ZW4gaW4gc3VjaCBhIHBhdGhvbG9naWNhbCBjYXNlLCBvbmx5IGEgc2luZ2xlIHdyaXR0ZW4gY2h1bmtcbi8vIHdvdWxkIGJlIGNvbnN1bWVkLCBhbmQgdGhlbiB0aGUgcmVzdCB3b3VsZCB3YWl0ICh1bi10cmFuc2Zvcm1lZCkgdW50aWxcbi8vIHRoZSByZXN1bHRzIG9mIHRoZSBwcmV2aW91cyB0cmFuc2Zvcm1lZCBjaHVuayB3ZXJlIGNvbnN1bWVkLlxuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmb3JtO1xuXG52YXIgRHVwbGV4ID0gcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSByZXF1aXJlKCdjb3JlLXV0aWwtaXMnKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnV0aWwuaW5oZXJpdHMoVHJhbnNmb3JtLCBEdXBsZXgpO1xuXG5mdW5jdGlvbiBUcmFuc2Zvcm1TdGF0ZShzdHJlYW0pIHtcbiAgdGhpcy5hZnRlclRyYW5zZm9ybSA9IGZ1bmN0aW9uIChlciwgZGF0YSkge1xuICAgIHJldHVybiBhZnRlclRyYW5zZm9ybShzdHJlYW0sIGVyLCBkYXRhKTtcbiAgfTtcblxuICB0aGlzLm5lZWRUcmFuc2Zvcm0gPSBmYWxzZTtcbiAgdGhpcy50cmFuc2Zvcm1pbmcgPSBmYWxzZTtcbiAgdGhpcy53cml0ZWNiID0gbnVsbDtcbiAgdGhpcy53cml0ZWNodW5rID0gbnVsbDtcbiAgdGhpcy53cml0ZWVuY29kaW5nID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gYWZ0ZXJUcmFuc2Zvcm0oc3RyZWFtLCBlciwgZGF0YSkge1xuICB2YXIgdHMgPSBzdHJlYW0uX3RyYW5zZm9ybVN0YXRlO1xuICB0cy50cmFuc2Zvcm1pbmcgPSBmYWxzZTtcblxuICB2YXIgY2IgPSB0cy53cml0ZWNiO1xuXG4gIGlmICghY2IpIHJldHVybiBzdHJlYW0uZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ25vIHdyaXRlY2IgaW4gVHJhbnNmb3JtIGNsYXNzJykpO1xuXG4gIHRzLndyaXRlY2h1bmsgPSBudWxsO1xuICB0cy53cml0ZWNiID0gbnVsbDtcblxuICBpZiAoZGF0YSAhPT0gbnVsbCAmJiBkYXRhICE9PSB1bmRlZmluZWQpIHN0cmVhbS5wdXNoKGRhdGEpO1xuXG4gIGNiKGVyKTtcblxuICB2YXIgcnMgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIHJzLnJlYWRpbmcgPSBmYWxzZTtcbiAgaWYgKHJzLm5lZWRSZWFkYWJsZSB8fCBycy5sZW5ndGggPCBycy5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgc3RyZWFtLl9yZWFkKHJzLmhpZ2hXYXRlck1hcmspO1xuICB9XG59XG5cbmZ1bmN0aW9uIFRyYW5zZm9ybShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUcmFuc2Zvcm0pKSByZXR1cm4gbmV3IFRyYW5zZm9ybShvcHRpb25zKTtcblxuICBEdXBsZXguY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICB0aGlzLl90cmFuc2Zvcm1TdGF0ZSA9IG5ldyBUcmFuc2Zvcm1TdGF0ZSh0aGlzKTtcblxuICB2YXIgc3RyZWFtID0gdGhpcztcblxuICAvLyBzdGFydCBvdXQgYXNraW5nIGZvciBhIHJlYWRhYmxlIGV2ZW50IG9uY2UgZGF0YSBpcyB0cmFuc2Zvcm1lZC5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuXG4gIC8vIHdlIGhhdmUgaW1wbGVtZW50ZWQgdGhlIF9yZWFkIG1ldGhvZCwgYW5kIGRvbmUgdGhlIG90aGVyIHRoaW5nc1xuICAvLyB0aGF0IFJlYWRhYmxlIHdhbnRzIGJlZm9yZSB0aGUgZmlyc3QgX3JlYWQgY2FsbCwgc28gdW5zZXQgdGhlXG4gIC8vIHN5bmMgZ3VhcmQgZmxhZy5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jID0gZmFsc2U7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nKSB0aGlzLl90cmFuc2Zvcm0gPSBvcHRpb25zLnRyYW5zZm9ybTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5mbHVzaCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmx1c2ggPSBvcHRpb25zLmZsdXNoO1xuICB9XG5cbiAgLy8gV2hlbiB0aGUgd3JpdGFibGUgc2lkZSBmaW5pc2hlcywgdGhlbiBmbHVzaCBvdXQgYW55dGhpbmcgcmVtYWluaW5nLlxuICB0aGlzLm9uY2UoJ3ByZWZpbmlzaCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX2ZsdXNoID09PSAnZnVuY3Rpb24nKSB0aGlzLl9mbHVzaChmdW5jdGlvbiAoZXIsIGRhdGEpIHtcbiAgICAgIGRvbmUoc3RyZWFtLCBlciwgZGF0YSk7XG4gICAgfSk7ZWxzZSBkb25lKHN0cmVhbSk7XG4gIH0pO1xufVxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nKSB7XG4gIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm0gPSBmYWxzZTtcbiAgcmV0dXJuIER1cGxleC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIGNodW5rLCBlbmNvZGluZyk7XG59O1xuXG4vLyBUaGlzIGlzIHRoZSBwYXJ0IHdoZXJlIHlvdSBkbyBzdHVmZiFcbi8vIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gaW4gaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vICdjaHVuaycgaXMgYW4gaW5wdXQgY2h1bmsuXG4vL1xuLy8gQ2FsbCBgcHVzaChuZXdDaHVuaylgIHRvIHBhc3MgYWxvbmcgdHJhbnNmb3JtZWQgb3V0cHV0XG4vLyB0byB0aGUgcmVhZGFibGUgc2lkZS4gIFlvdSBtYXkgY2FsbCAncHVzaCcgemVybyBvciBtb3JlIHRpbWVzLlxuLy9cbi8vIENhbGwgYGNiKGVycilgIHdoZW4geW91IGFyZSBkb25lIHdpdGggdGhpcyBjaHVuay4gIElmIHlvdSBwYXNzXG4vLyBhbiBlcnJvciwgdGhlbiB0aGF0J2xsIHB1dCB0aGUgaHVydCBvbiB0aGUgd2hvbGUgb3BlcmF0aW9uLiAgSWYgeW91XG4vLyBuZXZlciBjYWxsIGNiKCksIHRoZW4geW91J2xsIG5ldmVyIGdldCBhbm90aGVyIGNodW5rLlxuVHJhbnNmb3JtLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdfdHJhbnNmb3JtKCkgaXMgbm90IGltcGxlbWVudGVkJyk7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciB0cyA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlO1xuICB0cy53cml0ZWNiID0gY2I7XG4gIHRzLndyaXRlY2h1bmsgPSBjaHVuaztcbiAgdHMud3JpdGVlbmNvZGluZyA9IGVuY29kaW5nO1xuICBpZiAoIXRzLnRyYW5zZm9ybWluZykge1xuICAgIHZhciBycyA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gICAgaWYgKHRzLm5lZWRUcmFuc2Zvcm0gfHwgcnMubmVlZFJlYWRhYmxlIHx8IHJzLmxlbmd0aCA8IHJzLmhpZ2hXYXRlck1hcmspIHRoaXMuX3JlYWQocnMuaGlnaFdhdGVyTWFyayk7XG4gIH1cbn07XG5cbi8vIERvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIGFyZ3MgYXJlIGhlcmUuXG4vLyBfdHJhbnNmb3JtIGRvZXMgYWxsIHRoZSB3b3JrLlxuLy8gVGhhdCB3ZSBnb3QgaGVyZSBtZWFucyB0aGF0IHRoZSByZWFkYWJsZSBzaWRlIHdhbnRzIG1vcmUgZGF0YS5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcblxuICBpZiAodHMud3JpdGVjaHVuayAhPT0gbnVsbCAmJiB0cy53cml0ZWNiICYmICF0cy50cmFuc2Zvcm1pbmcpIHtcbiAgICB0cy50cmFuc2Zvcm1pbmcgPSB0cnVlO1xuICAgIHRoaXMuX3RyYW5zZm9ybSh0cy53cml0ZWNodW5rLCB0cy53cml0ZWVuY29kaW5nLCB0cy5hZnRlclRyYW5zZm9ybSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gbWFyayB0aGF0IHdlIG5lZWQgYSB0cmFuc2Zvcm0sIHNvIHRoYXQgYW55IGRhdGEgdGhhdCBjb21lcyBpblxuICAgIC8vIHdpbGwgZ2V0IHByb2Nlc3NlZCwgbm93IHRoYXQgd2UndmUgYXNrZWQgZm9yIGl0LlxuICAgIHRzLm5lZWRUcmFuc2Zvcm0gPSB0cnVlO1xuICB9XG59O1xuXG5mdW5jdGlvbiBkb25lKHN0cmVhbSwgZXIsIGRhdGEpIHtcbiAgaWYgKGVyKSByZXR1cm4gc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuXG4gIGlmIChkYXRhICE9PSBudWxsICYmIGRhdGEgIT09IHVuZGVmaW5lZCkgc3RyZWFtLnB1c2goZGF0YSk7XG5cbiAgLy8gaWYgdGhlcmUncyBub3RoaW5nIGluIHRoZSB3cml0ZSBidWZmZXIsIHRoZW4gdGhhdCBtZWFuc1xuICAvLyB0aGF0IG5vdGhpbmcgbW9yZSB3aWxsIGV2ZXIgYmUgcHJvdmlkZWRcbiAgdmFyIHdzID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuICB2YXIgdHMgPSBzdHJlYW0uX3RyYW5zZm9ybVN0YXRlO1xuXG4gIGlmICh3cy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcignQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHdzLmxlbmd0aCAhPSAwJyk7XG5cbiAgaWYgKHRzLnRyYW5zZm9ybWluZykgdGhyb3cgbmV3IEVycm9yKCdDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gc3RpbGwgdHJhbnNmb3JtaW5nJyk7XG5cbiAgcmV0dXJuIHN0cmVhbS5wdXNoKG51bGwpO1xufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzXG4vLyBtb2R1bGUgaWQgPSA3M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtLWJyb3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IDc0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBhcHBseSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtcblxuLy8gRE9NIEFQSXMsIGZvciBjb21wbGV0ZW5lc3NcblxuZXhwb3J0cy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldFRpbWVvdXQsIHdpbmRvdywgYXJndW1lbnRzKSwgY2xlYXJUaW1lb3V0KTtcbn07XG5leHBvcnRzLnNldEludGVydmFsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldEludGVydmFsLCB3aW5kb3csIGFyZ3VtZW50cyksIGNsZWFySW50ZXJ2YWwpO1xufTtcbmV4cG9ydHMuY2xlYXJUaW1lb3V0ID1cbmV4cG9ydHMuY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHtcbiAgaWYgKHRpbWVvdXQpIHtcbiAgICB0aW1lb3V0LmNsb3NlKCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIFRpbWVvdXQoaWQsIGNsZWFyRm4pIHtcbiAgdGhpcy5faWQgPSBpZDtcbiAgdGhpcy5fY2xlYXJGbiA9IGNsZWFyRm47XG59XG5UaW1lb3V0LnByb3RvdHlwZS51bnJlZiA9IFRpbWVvdXQucHJvdG90eXBlLnJlZiA9IGZ1bmN0aW9uKCkge307XG5UaW1lb3V0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jbGVhckZuLmNhbGwod2luZG93LCB0aGlzLl9pZCk7XG59O1xuXG4vLyBEb2VzIG5vdCBzdGFydCB0aGUgdGltZSwganVzdCBzZXRzIHVwIHRoZSBtZW1iZXJzIG5lZWRlZC5cbmV4cG9ydHMuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSwgbXNlY3MpIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IG1zZWNzO1xufTtcblxuZXhwb3J0cy51bmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IC0xO1xufTtcblxuZXhwb3J0cy5fdW5yZWZBY3RpdmUgPSBleHBvcnRzLmFjdGl2ZSA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuXG4gIHZhciBtc2VjcyA9IGl0ZW0uX2lkbGVUaW1lb3V0O1xuICBpZiAobXNlY3MgPj0gMCkge1xuICAgIGl0ZW0uX2lkbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIG9uVGltZW91dCgpIHtcbiAgICAgIGlmIChpdGVtLl9vblRpbWVvdXQpXG4gICAgICAgIGl0ZW0uX29uVGltZW91dCgpO1xuICAgIH0sIG1zZWNzKTtcbiAgfVxufTtcblxuLy8gc2V0aW1tZWRpYXRlIGF0dGFjaGVzIGl0c2VsZiB0byB0aGUgZ2xvYmFsIG9iamVjdFxucmVxdWlyZShcInNldGltbWVkaWF0ZVwiKTtcbmV4cG9ydHMuc2V0SW1tZWRpYXRlID0gc2V0SW1tZWRpYXRlO1xuZXhwb3J0cy5jbGVhckltbWVkaWF0ZSA9IGNsZWFySW1tZWRpYXRlO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3RpbWVycy1icm93c2VyaWZ5L21haW4uanNcbi8vIG1vZHVsZSBpZCA9IDc1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImNvbnN0IGZpbGVzID0gW1xuICAvLyBcImd1bl92aW9sZW5jZVwiLFxuICBcIm1hc3Nfc2hvb3RpbmdzX2Zyb21fY29sdW1iaW5lXCIsXG4gIFwiZ3VuX3Zpb2xlbmNlX2J5X21vbnRoXCIsXG5dXG5jb25zdCBwYXJzZSA9IHJlcXVpcmUoJ2Nzdi1wYXJzZScpXG5cbmNvbnN0IGRhdGFQcm9taXNlcyA9IGZpbGVzLm1hcChuYW1lID0+IHtcbiAgcmV0dXJuIGZldGNoKCcuL2RhdGEvJyArIG5hbWUgKyAnLmNzdicpLnRoZW4ocm93cyA9PiB7XG4gICAgcmV0dXJuIHJvd3MudGV4dCgpXG4gIH0pLnRoZW4odGV4dCA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHBhcnNlKHRleHQsIHt9LCAoXywgbGluZXMpID0+IHJlc29sdmUobGluZXMpKVxuICAgIH0pXG4gIH0pLnRoZW4obGluZXMgPT4ge1xuICAgIC8vIGNvbnNvbGUubG9nKG5hbWUsIGxpbmVzKVxuICAgIGNvbnN0IGggPSBsaW5lcy5zaGlmdCgpXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWUsXG4gICAgICBoLFxuICAgICAgbGluZXM6IGxpbmVzLmZpbHRlcihzID0+ICEhcylcbiAgICB9XG4gIH0pXG59KVxuY29uc3QgYWxsUHJvbWlzZXMgPSBQcm9taXNlLmFsbChkYXRhUHJvbWlzZXMpLnRoZW4oZGF0YSA9PiB7XG4gIHJldHVybiBkYXRhLnJlZHVjZSgoYSxiKSA9PiB7XG4gICAgLy8gY29uc29sZS5sb2coYilcbiAgICBhW2IubmFtZV0gPSBiXG4gICAgcmV0dXJuIGFcbiAgfSwge30pXG59KVxuY29uc3QgbG9hZCA9ICgpID0+IHtcbiAgcmV0dXJuIGFsbFByb21pc2VzXG59XG5cbmV4cG9ydCB7IGxvYWQgfVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9kYXRhLmpzIiwiY29uc3Qga2V5cyA9IHt9XG5jb25zdCBrZXlfbnVtYmVycyA9IHt9XG5jb25zdCBsZXR0ZXJzID0gXCJ6eGN2Ym5tYXNkZmdoamtscXdlcnR5dWlvcFwiXG5jb25zdCBudW1iZXJzID0gXCIxMjM0NTY3ODkwXCJcblxubGV0IGNhbGxiYWNrID0gZnVuY3Rpb24oKXt9XG5cbmxldHRlcnMudG9VcHBlckNhc2UoKS5zcGxpdChcIlwiKS5tYXAoZnVuY3Rpb24oayxpKXtcbiAga2V5c1trLmNoYXJDb2RlQXQoMCldID0gaVxufSlcblxubnVtYmVycy5zcGxpdChcIlwiKS5tYXAoZnVuY3Rpb24oayxpKXtcbiAga2V5c1trLmNoYXJDb2RlQXQoMCldID0gaStsZXR0ZXJzLmxlbmd0aFxuICBrZXlfbnVtYmVyc1trLmNoYXJDb2RlQXQoMCldID0gdHJ1ZVxufSlcblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGtleWRvd24sIHRydWUpXG5mdW5jdGlvbiBrZXlkb3duIChlKSB7XG4gIGlmIChlLmFsdEtleSB8fCBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJlxuICAgICAgKGUua2V5Q29kZSBpbiBrZXlfbnVtYmVycykpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKCEgKGUua2V5Q29kZSBpbiBrZXlzKSkgcmV0dXJuXG4gIHZhciBpbmRleCA9IGtleXNbZS5rZXlDb2RlXVxuICBpZiAoZS5zaGlmdEtleSkgaW5kZXggKz0gbGV0dGVycy5sZW5ndGhcbiAgaW5kZXggLT0gN1xuICBjYWxsYmFjayhpbmRleClcbn1cblxuZnVuY3Rpb24gbGlzdGVuIChmbikge1xuICBjYWxsYmFjayA9IGZuXG59XG5cbmV4cG9ydCBkZWZhdWx0IHsgbGlzdGVuIH1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvbGliL2tleXMuanMiLCJpbXBvcnQgVG9uZSBmcm9tICd0b25lJ1xuaW1wb3J0IFdlYk1pZGkgZnJvbSAnd2VibWlkaSdcbmltcG9ydCBzY2FsZXMgZnJvbSAnLi9zY2FsZXMnXG5pbXBvcnQgeyBmdG9tLCBub3JtLCBkYXRhVVJJdG9CbG9iIH0gZnJvbSAnLi91dGlsJ1xuaW1wb3J0IGthbGltYmEgZnJvbSAnLi9rYWxpbWJhJ1xuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlci9GaWxlU2F2ZXInXG5cbmltcG9ydCB7IG54IH0gZnJvbSAnLi91aSdcblxubGV0IG1pZGlEZXZpY2VcbmxldCBzZW5kUGl0Y2hCZW5kID0gZmFsc2VcblxuZXhwb3J0IGNvbnN0IE1pZGlXcml0ZXIgPSByZXF1aXJlKCdtaWRpLXdyaXRlci1qcycpXG5cbmV4cG9ydCBjb25zdCBub3RlX3ZhbHVlcyA9IFtcbiAgWzgsICc4IG1lYXN1cmVzJywgOCAqIDUxMl0sXG4gIFs0LCAnNCBtZWFzdXJlcycsIDQgKiA1MTJdLFxuICBbMiwgJzIgbWVhc3VyZXMnLCAyICogNTEyXSxcbiAgWzEsICd3aG9sZSBub3RlJywgNTEyXSxcbiAgWzEvMiwgJ2hhbGYgbm90ZScsIDI1Nl0sXG4gIFsxLzMsICd0aGlyZCBub3RlJywgWzE3MCwgMTcwLCAxNzFdXSxcbiAgWzEvNCwgJ3F1YXJ0ZXIgbm90ZScsIDEyOF0sXG4gIFsxLzUsICdmaWZ0aCBub3RlJywgWzUxLDUxLDUxLDUxLDUyXV0sXG4gIFsxLzYsICdzaXh0aCBub3RlJywgWzg1LCA4NSwgODYsIDg1LCA4NSwgODZdXSxcbiAgWzEvOCwgJ2VpZ2h0aCBub3RlJywgNjRdLFxuICBbMS8xMCwgJ3RlbnRoIG5vdGUnLCBbMjUsMjYsMjYsMjUsMjYsMjUsMjYsMjYsMjUsMjZdXSxcbiAgWzEvMTIsICd0d2VsZnRoIG5vdGUnLCBbMjEsMjEsMjIsIDIxLDIxLDIyLCAyMSwyMSwyMiwgMjEsMjEsMjJdXSxcbiAgWzEvMTYsICdzaXh0ZWVudGggbm90ZScsIDMyXSxcbiAgWzEvMzIsICd0aGlydHlzZWNvbmQgbm90ZScsIDE2XSxcbl1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pZGlfaW5pdCgpIHtcbiAgV2ViTWlkaS5lbmFibGUobWlkaV9yZWFkeSlcbiAgZnVuY3Rpb24gbWlkaV9yZWFkeShlcnIpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCd3ZWJtaWRpIGZhaWxlZCB0byBpbml0aWFsaXplJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIVdlYk1pZGkub3V0cHV0cy5sZW5ndGgpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ25vIE1JREkgb3V0cHV0IGZvdW5kJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zb2xlLmxvZyhXZWJNaWRpLmlucHV0cylcbiAgICBjb25zb2xlLmxvZyhXZWJNaWRpLm91dHB1dHMpXG4gICAgaWYgKFdlYk1pZGkub3V0cHV0cy5sZW5ndGggPiAxKSB7XG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IFdlYk1pZGkub3V0cHV0cy5maWx0ZXIob3V0cHV0ID0+IG91dHB1dC5uYW1lLm1hdGNoKC9wcm9kaXBlL2kpKVxuICAgICAgaWYgKGZpbHRlcmVkLmxlbmd0aCkge1xuICAgICAgICAvLyBtaWRpRGV2aWNlID0gZmlsdGVyZWRbMF1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gbWlkaURldmljZSA9IG1pZGlEZXZpY2UgfHwgV2ViTWlkaS5vdXRwdXRzWzBdXG4gICAgLy8gY29uc29sZS5sb2cobWlkaURldmljZS5uYW1lKVxuICB9XG59XG5cbi8qIHBsYXkgYSBzaW5nbGUgbm90ZSAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGxheV9ub3RlKGluZGV4LCBkdXJhdGlvbiwgY2hhbm5lbD1cImFsbFwiLCBleHBvcnRpbmc9ZmFsc2UsIHJlc3Q9MCwgZGVmZXI9MCl7XG4gIC8vIGNvbnNvbGUubG9nKGluZGV4KVxuICBjb25zdCBzY2FsZSA9IHNjYWxlcy5jdXJyZW50KClcbiAgY29uc3QgZnJlcSA9IHNjYWxlLmluZGV4KGluZGV4ICsgTWF0aC5yb3VuZChueC5vZmZzZXQudmFsdWUpLCBueC5vY3RhdmUudmFsdWUpXG4gIGxldCBtaWRpX25vdGUgPSBmdG9tKGZyZXEpXG4gIGxldCBjZW50cyA9IG1pZGlfbm90ZSAlIDFcbiAgaWYgKGNlbnRzID4gMC41KSB7XG4gICAgbWlkaV9ub3RlICs9IDFcbiAgICBjZW50cyAtPSAxXG4gIH1cbiAgY2VudHMgKj0gMlxuICBtaWRpX25vdGUgPSBNYXRoLmZsb29yKG1pZGlfbm90ZSlcbiAgaWYgKChtaWRpRGV2aWNlIHx8IGV4cG9ydGluZykgJiYgbWlkaV9ub3RlID4gMTI3KSByZXR1cm4gMFxuICBjb25zdCBub3RlID0gVG9uZS5GcmVxdWVuY3koTWF0aC5mbG9vcihtaWRpX25vdGUpLCBcIm1pZGlcIikudG9Ob3RlKClcbiAgY29uc3QgZGVmZXJfdGltZSA9IDMwMDAwIC8gVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlICogZGVmZXIgLyAxMjhcbiAgY29uc29sZS5sb2coZGVmZXIsIGRlZmVyX3RpbWUpXG4gIGlmIChleHBvcnRpbmcpIHtcbiAgICByZXR1cm4gbm90ZVxuICB9XG4gIGlmIChtaWRpRGV2aWNlKSB7XG4gICAgZHVyYXRpb24gPSBkdXJhdGlvbiB8fCA2MDAwMCAvIFRvbmUuVHJhbnNwb3J0LmJwbS52YWx1ZVxuICAgIGlmICghIGV4cG9ydGluZykge1xuICAgICAgaWYgKGRlZmVyKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHBsYXlfbWlkaV9ub3RlKG5vdGUsIGNlbnRzLCBjaGFubmVsLCBkdXJhdGlvbilcbiAgICAgICAgfSwgZGVmZXIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwbGF5X21pZGlfbm90ZShub3RlLCBjZW50cywgY2hhbm5lbCwgZHVyYXRpb24pXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGVsc2UgaWYgKGRlZmVyKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBrYWxpbWJhLnBsYXkoZnJlcSlcbiAgICB9LCBkZWZlcl90aW1lKVxuICB9IGVsc2Uge1xuICAgIGthbGltYmEucGxheShmcmVxKVxuICB9XG4gIHJldHVybiBub3RlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwbGF5X21pZGlfbm90ZShub3RlLCBjZW50cywgY2hhbm5lbCwgZHVyYXRpb24pIHtcbiAgbWlkaURldmljZS5wbGF5Tm90ZShub3RlLCBjaGFubmVsLCB7IGR1cmF0aW9uIH0pXG4gIGlmIChzZW5kUGl0Y2hCZW5kKSB7XG4gICAgbWlkaURldmljZS5zZW5kUGl0Y2hCZW5kKGNlbnRzLCBjaGFubmVsKVxuICB9XG59XG5cbi8qIHBsYXkgdGhlIG5leHQgbm90ZSBpbiBzZXF1ZW5jZSAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGxheV9zZXF1ZW5jZShpLCBib3VuZHMsIGRpZmYsIG5vdGVfdGltZSwgY2hhbm5lbD1cImFsbFwiLCBleHBvcnRpbmcpIHtcbiAgY29uc3QgeyByb3dzLCBtaW4sIG1heCB9ID0gYm91bmRzXG4gIGNvbnN0IGNvdW50ID0gcm93cy5sZW5ndGggKiByb3dzWzBdLmxlbmd0aFxuICBpZiAoaSA+PSBjb3VudCkgaSA9IDBcbiAgY29uc3QgeSA9IE1hdGguZmxvb3IoaSAvIHJvd3NbMF0ubGVuZ3RoKVxuICBjb25zdCB4ID0gaSAlIHJvd3NbMF0ubGVuZ3RoXG4gIC8vIGlmICgheCkgY29uc29sZS5sb2coeSlcbiAgY29uc3QgbiA9IHJvd3NbeV1beF1cbiAgaSArPSAxXG4gIGlmIChpID49IGNvdW50KSBpID0gMFxuICBjb25zdCBtaWRpX25vdGUgPSBwbGF5X25vdGUoIG5vcm0obiwgbWluLCBtYXgpICogbngubXVsdGlwbHkudmFsdWUsIG5vdGVfdGltZSwgY2hhbm5lbCwgZXhwb3J0aW5nKVxuICByZXR1cm4gW2ksIFttaWRpX25vdGVdXVxufVxuXG4vKiBwbGF5IHRoZSBuZXh0IHJvdyBhcyBhbiBpbnRlcnZhbCAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGxheV9pbnRlcnZhbF9zZXF1ZW5jZShpLCBib3VuZHMsIGRpZmYsIG5vdGVfdGltZSwgY2hhbm5lbD1cImFsbFwiLCBleHBvcnRpbmcpIHtcbiAgY29uc3QgeyByb3dzLCBtaW4sIG1heCB9ID0gYm91bmRzXG4gIGNvbnN0IGNvdW50ID0gcm93cy5sZW5ndGhcbiAgaWYgKGkgPj0gY291bnQpIGkgPSAwXG4gIGNvbnN0IHkgPSBpICUgY291bnRcbiAgY29uc3Qgcm93ID0gcm93c1t5XVxuICBpZiAoISByb3cpIHsgaSA9IDA7IHJldHVybiB9XG4gIGNvbnN0IHJvd19taW4gPSBNYXRoLm1pbi5hcHBseShNYXRoLCByb3cpXG4gIC8vIGNvbnN0IHJvd19tYXggPSBNYXRoLm1heC5hcHBseShNYXRoLCByb3cpXG4gIGNvbnN0IHJvd19mMCA9IG5vcm0ocm93X21pbiwgbWluLCBtYXgpXG4gIGNvbnN0IHJvd19yb290ID0gcm93X2YwICogbngubXVsdGlwbHkudmFsdWVcbiAgY29uc3Qgbm90ZXMgPSByb3cubWFwKG4gPT4ge1xuICAgIGNvbnN0IG5vdGUgPSByb3dfcm9vdCArIG5vcm0obiAtIHJvd19taW4sIGRpZmYubWluLCBkaWZmLm1heCkgKiBueC5pbnRlcnZhbC52YWx1ZVxuICAgIHBsYXlfbm90ZShub3RlLCBub3RlX3RpbWUsIGNoYW5uZWwsIGV4cG9ydGluZylcbiAgfSlcbiAgaSArPSAxXG4gIHJldHVybiBbaSwgbm90ZXNdXG59XG5cbi8qIGdlbmVyYXRlIGEgMS10cmFjayBtaWRpIGZpbGUgYnkgY2FsbGluZyB0aGUgcGxheSBmdW5jdGlvbiByZXBlYXRlZGx5ICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRfcGF0dGVybl9hc19taWRpKGRhdGFzZXROYW1lLCBib3VuZHMsIGRpZmYsIHRlbXBvLCB0aW1pbmdJbmRleCwgcGxheV9mbikge1xuICAvLyBjb25zdCBiZWhhdmlvciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNiZWhhdmlvcicpLnZhbHVlXG4gIGNvbnN0IHsgcm93cyB9ID0gYm91bmRzXG4gIC8vIGxldCBjb3VudCA9IGJlaGF2aW9yID09PSAnc2VxdWVuY2UnID8gcm93c1swXS5sZW5ndGggKiByb3dzLmxlbmd0aCA6IHJvd3MubGVuZ3RoXG4gIGxldCBjb3VudCA9IHJvd3NbMF0ubGVuZ3RoXG4gIGxldCBub3RlcywgdGltaW5ncywgd2FpdFxuICBsZXQgbm90ZV90aW1lXG4gIC8vIGxldCB0aW1pbmcgPSBub3RlX3ZhbHVlc1t0aW1pbmdJbmRleF1bMl1cbiAgbGV0IG1pZGlfdHJhY2sgPSBuZXcgTWlkaVdyaXRlci5UcmFjaygpXG4gIG1pZGlfdHJhY2suc2V0VGVtcG8odGVtcG8pXG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjb3VudDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgW2ksIG5vdGVzLCB0aW1pbmdzLCB3YWl0XSA9IHBsYXlfZm4oaSwgYm91bmRzLCBub3RlX3RpbWUsIFwiYWxsXCIsIHRydWUpXG4gICAgLy8gaWYgKHRpbWluZy5sZW5ndGgpIHtcbiAgICAvLyAgIG5vdGVfdGltZSA9IHRpbWluZ1tpICUgdGltaW5nLmxlbmd0aF1cbiAgICAvLyB9IGVsc2Uge1xuICAgIC8vICAgbm90ZV90aW1lID0gdGltaW5nXG4gICAgLy8gfVxuICAgIC8vIG1pZGlfdHJhY2suYWRkRXZlbnQobmV3IE1pZGlXcml0ZXIuTm90ZUV2ZW50KHsgcGl0Y2g6IG5vdGVzLCBkdXJhdGlvbjogJ3QnICsgbm90ZV90aW1lIH0pKVxuICAgIGNvbnNvbGUubG9nKGksIG5vdGVzLCB0aW1pbmdzLCB3YWl0KVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbm90ZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIG1pZGlfdHJhY2suYWRkRXZlbnQobmV3IE1pZGlXcml0ZXIuTm90ZUV2ZW50KHtcbiAgICAgICAgcGl0Y2g6IG5vdGVzW2pdLFxuICAgICAgICBkdXJhdGlvbjogJ3QnICsgdGltaW5nc1tqXSxcbiAgICAgICAgd2FpdDogKGogPT09IDApID8gd2FpdCA6IDAsXG4gICAgICB9KSlcbiAgICB9XG4gIH1cbiAgY29uc3Qgd3JpdGVyID0gbmV3IE1pZGlXcml0ZXIuV3JpdGVyKFttaWRpX3RyYWNrXSlcbiAgY29uc3QgYmxvYiA9IGRhdGFVUkl0b0Jsb2Iod3JpdGVyLmRhdGFVcmkoKSlcbiAgc2F2ZUFzKGJsb2IsICdSZWNvcmRpbmcgLSAnICsgZGF0YXNldE5hbWUgKyAnLm1pZCcpXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvbGliL21pZGkuanMiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9mcm9tID0gcmVxdWlyZShcIi4uL2NvcmUtanMvYXJyYXkvZnJvbVwiKTtcblxudmFyIF9mcm9tMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Zyb20pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFycikgPyBhcnIgOiAoMCwgX2Zyb20yLmRlZmF1bHQpKGFycik7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdG9BcnJheS5qc1xuLy8gbW9kdWxlIGlkID0gNzlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IFRvbmUgZnJvbSAndG9uZSdcbmltcG9ydCBOZXh1cyBmcm9tICduZXh1c3VpJ1xuXG5pbXBvcnQga2V5cyBmcm9tICcuL2xpYi9rZXlzJ1xuaW1wb3J0IHNjYWxlcyBmcm9tICcuL2xpYi9zY2FsZXMnXG5pbXBvcnQga2FsaW1iYSBmcm9tICcuL2xpYi9rYWxpbWJhJ1xuaW1wb3J0IHtcbiAgbWlkaV9pbml0LFxuICBwbGF5X25vdGUsXG4gIHBsYXlfc2VxdWVuY2UsXG4gIGV4cG9ydF9wYXR0ZXJuX2FzX21pZGksXG4gIG5vdGVfdmFsdWVzLFxuICBNaWRpV3JpdGVyLFxufSBmcm9tICcuL2xpYi9taWRpJ1xuaW1wb3J0IHtcbiAgcmVxdWVzdEF1ZGlvQ29udGV4dCwgbm9ybSwgZGF0YVVSSXRvQmxvYixcbiAgZ2V0X2JvdW5kcywgZ2V0X2RpZmZfYm91bmRzLFxuICB0cmFuc3Bvc2UsXG59IGZyb20gJy4vbGliL3V0aWwnXG5pbXBvcnQge1xuICB1cGRhdGVfdmFsdWVfb25fY2hhbmdlLFxuICB1cGRhdGVfcmFkaW9fdmFsdWVfb25fY2hhbmdlLFxuICBidWlsZF9vcHRpb25zLFxuICBueFxufSBmcm9tICcuL2xpYi91aSdcblxuaW1wb3J0ICogYXMgZGF0YSBmcm9tICcuL2RhdGEnXG5cbmNvbnN0IERFRkFVTFRfQlBNID0gNjBcblxubGV0IHJlY29yZGVyID0gbnVsbFxubGV0IHJlY29yZGluZyA9IGZhbHNlXG5cbm1pZGlfaW5pdCgpXG5cbi8qIGluaXRpYWxpemF0aW9uICovXG5cbmNvbnN0IG1hc3NfZmllbGRzID0gW1xuICBcImRhdGVcIiwgXCJ0aW1lc3RhbXBcIixcbiAgXCJmYXRhbGl0aWVzXCIsIFwiaW5qdXJlZFwiLCBcInRvdGFsX3ZpY3RpbXNcIixcbiAgXCJhZ2VcIiwgXCJjYXNlXCIsIFwid2VhcG9uX3R5cGVcIiwgXCJ3ZWFwb25fZGV0YWlsc1wiXG5dLnJlZHVjZSgoYSxiLGkpID0+IHtcbiAgYVtiXSA9IGlcbiAgcmV0dXJuIGFcbn0sIHt9KVxuXG5sZXQgaSA9IDAsIG1hc3NfaSA9IDAsIGRhdGFzZXRzID0ge30sIGRhdGFzZXQgPSB7fSwgYm91bmRzID0ge30sIGRpZmYgPSBbXVxubGV0IHBsYXlfZm4gPSBwbGF5X3NlcXVlbmNlXG5kYXRhLmxvYWQoKS50aGVuKGxpc3RzID0+IHtcbiAgY29uc29sZS5sb2cobGlzdHMpXG4gIHRyYW5zcG9zZShsaXN0cy5ndW5fdmlvbGVuY2VfYnlfbW9udGgubGluZXMpLmZvckVhY2goKHJvdywgaSkgPT4ge1xuICAgIGNvbnN0IG5hbWUgPSBsaXN0cy5ndW5fdmlvbGVuY2VfYnlfbW9udGguaFtpXVxuICAgIGlmIChuYW1lID09PSAnRGF0ZScpIHJldHVyblxuICAgIGNvbnNvbGUubG9nKG5hbWUsIHJvdylcbiAgICBkYXRhc2V0c1tuYW1lXSA9IHtcbiAgICAgIG5hbWUsXG4gICAgICBoOiBbbmFtZV0sXG4gICAgICBsaW5lczogW3Jvdy5tYXAobiA9PiBwYXJzZUludChuKSldLFxuICAgICAgcGxheV9mbjogcGxheV9zZXF1ZW5jZSxcbiAgICB9XG4gIH0pXG4gIGRhdGFzZXRzW1wiTWFzcyBTaG9vdGluZ3NcIl0gPSBsaXN0cy5tYXNzX3Nob290aW5nc19mcm9tX2NvbHVtYmluZVxuICBkYXRhc2V0c1tcIk1hc3MgU2hvb3RpbmdzXCJdLm5hbWUgPSBcIk1hc3MgU2hvb3RpbmdzXCJcbiAgZGF0YXNldHNbXCJNYXNzIFNob290aW5nc1wiXS5wbGF5X2ZuID0gcGxheV9tYXNzX3Nob290aW5nc1xuICBjb25zdCBsaW5lcyA9IGRhdGFzZXRzW1wiTWFzcyBTaG9vdGluZ3NcIl0ubGluZXMucmV2ZXJzZSgpXG4gIGNvbnN0IFttaW5feSwgLi4ucmVzdF0gPSBsaW5lc1swXVttYXNzX2ZpZWxkcy5kYXRlXS5zcGxpdCgnLycpXG5cbiAgZGF0YXNldHNbXCJNYXNzIFNob290aW5nc1wiXS5kYXRlcyA9IGxpbmVzLm1hcChyb3cgPT4ge1xuICAgIGNvbnN0IFt5LCBtLCBkXSA9IHJvd1ttYXNzX2ZpZWxkcy5kYXRlXS5zcGxpdCgnLycpXG4gICAgcmV0dXJuIChwYXJzZUludCh5KSAtIHBhcnNlSW50KG1pbl95KSkgKiAxMiArIHBhcnNlSW50KG0pXG4gIH0pXG4gIGRhdGFzZXRzW1wiTWFzcyBTaG9vdGluZ3NcIl0uZGF0YSA9IGxpbmVzXG4gIGRhdGFzZXRzW1wiTWFzcyBTaG9vdGluZ3NcIl0ubGluZXMgPSBbbGluZXMubWFwKHJvdyA9PiByb3dbbWFzc19maWVsZHMudG90YWxfdmljdGltc10pXVxuICByZXF1ZXN0QXVkaW9Db250ZXh0KHJlYWR5KVxufSlcblxuLyogcGxheSBmdW5jdGlvbiBmb3IgbWFzcyBzaG9vdGluZyBkYXRhIHcvIGN1c3RvbSB0aW1pbmcgKi9cblxubGV0IG1hc3NfcmVzdCA9IDBcblxuLy8gZXhwb3J0IGNvbnN0IG5vdGVfdmFsdWVzID0gW1xuLy8gICBbOCwgJzggbWVhc3VyZXMnLCA4ICogNTEyXSxcbi8vICAgWzQsICc0IG1lYXN1cmVzJywgNCAqIDUxMl0sXG4vLyAgIFsyLCAnMiBtZWFzdXJlcycsIDIgKiA1MTJdLFxuLy8gICBbMSwgJ3dob2xlIG5vdGUnLCA1MTJdLFxuLy8gICBbMS8yLCAnaGFsZiBub3RlJywgMjU2XSxcbi8vICAgWzEvMywgJ3RoaXJkIG5vdGUnLCBbMTcwLCAxNzAsIDE3MV1dLFxuLy8gICBbMS80LCAncXVhcnRlciBub3RlJywgMTI4XSxcbi8vICAgWzEvNSwgJ2ZpZnRoIG5vdGUnLCBbNTEsNTEsNTEsNTEsNTJdXSxcbi8vICAgWzEvNiwgJ3NpeHRoIG5vdGUnLCBbODUsIDg1LCA4NiwgODUsIDg1LCA4Nl1dLFxuLy8gICBbMS84LCAnZWlnaHRoIG5vdGUnLCA2NF0sXG4vLyAgIFsxLzEwLCAndGVudGggbm90ZScsIFsyNSwyNiwyNiwyNSwyNiwyNSwyNiwyNiwyNSwyNl1dLFxuLy8gICBbMS8xMiwgJ3R3ZWxmdGggbm90ZScsIFsyMSwyMSwyMiwgMjEsMjEsMjIsIDIxLDIxLDIyLCAyMSwyMSwyMl1dLFxuLy8gICBbMS8xNiwgJ3NpeHRlZW50aCBub3RlJywgMzJdLFxuLy8gICBbMS8zMiwgJ3RoaXJ0eXNlY29uZCBub3RlJywgMTZdLFxuLy8gXVxuXG5mdW5jdGlvbiBwbGF5X21hc3Nfc2hvb3RpbmdzKGksIGJvdW5kcywgZGlmZiwgbm90ZV90aW1lLCBjaGFubmVsPVwiYWxsXCIsIGV4cG9ydGluZykge1xuICBjb25zdCB7IHJvd3MsIG1pbiwgbWF4IH0gPSBib3VuZHNcbiAgY29uc3QgeSA9IDBcbiAgY29uc3QgeCA9IGkgJSByb3dzWzBdLmxlbmd0aFxuICBjb25zdCBuID0gcm93c1t5XVt4XVxuICBjb25zdCB0b3RhbCA9IGRhdGFzZXQuZGF0ZXMubGVuZ3RoXG4gIGxldCBub3RlcyA9IFtdLCBtaWRpX25vdGVzID0gW10sIGNhc2VzID0gW10sIHRpbWluZ3NcbiAgY29uc29sZS5sb2coaSwgbWFzc19pLCBkYXRhc2V0LmRhdGVzW21hc3NfaV0pXG4gIHdoaWxlIChpID49IGRhdGFzZXQuZGF0ZXNbbWFzc19pXSAmJiBtYXNzX2kgPCB0b3RhbCkge1xuICAgIG5vdGVzLnB1c2goZGF0YXNldC5saW5lc1swXVttYXNzX2ldKVxuICAgIGNhc2VzLnB1c2goZGF0YXNldC5kYXRhW21hc3NfaV1bbWFzc19maWVsZHMuZGF0ZV0gKyAnICcgKyBkYXRhc2V0LmRhdGFbbWFzc19pXVttYXNzX2ZpZWxkcy5jYXNlXSArXG4gICAgICBcIiwgXCIgKyBkYXRhc2V0LmRhdGFbbWFzc19pXVttYXNzX2ZpZWxkcy5mYXRhbGl0aWVzXSArICcgZGVhZCwgJyArIGRhdGFzZXQuZGF0YVttYXNzX2ldW21hc3NfZmllbGRzLmluanVyZWRdICsgJyBpbmp1cmVkJylcbiAgICBjb25zb2xlLmxvZygncHVzaCBjYXNlJywgZGF0YXNldC5kYXRhW21hc3NfaV1bbWFzc19maWVsZHMuZGF0ZV0gKyAnICcgKyBkYXRhc2V0LmRhdGFbbWFzc19pXVttYXNzX2ZpZWxkcy5jYXNlXSlcbiAgICBtYXNzX2kgKz0gMVxuICB9XG4gIHN3aXRjaCAobm90ZXMubGVuZ3RoKSB7XG4gICAgZGVmYXVsdDpcbiAgICBjYXNlIDA6XG4gICAgICBtYXNzX3Jlc3QgKz0gMVxuICAgICAgYnJlYWtcbiAgICBjYXNlIDE6XG4gICAgICBtaWRpX25vdGVzLnB1c2gocGxheV9ub3RlKCBub3JtKG5vdGVzWzBdLCBtaW4sIG1heCkgKiBueC5tdWx0aXBseS52YWx1ZSwgMTI4LCBjaGFubmVsLCBleHBvcnRpbmcsIG1hc3NfcmVzdCwgMCkpXG4gICAgICB0aW1pbmdzID0gWzEyOF1cbiAgICAgIGJyZWFrXG4gICAgY2FzZSAyOlxuICAgICAgbWlkaV9ub3Rlcy5wdXNoKHBsYXlfbm90ZSggbm9ybShub3Rlc1swXSwgbWluLCBtYXgpICogbngubXVsdGlwbHkudmFsdWUsIDY0LCBjaGFubmVsLCBleHBvcnRpbmcsIG1hc3NfcmVzdCwgMCkpXG4gICAgICBtaWRpX25vdGVzLnB1c2gocGxheV9ub3RlKCBub3JtKG5vdGVzWzFdLCBtaW4sIG1heCkgKiBueC5tdWx0aXBseS52YWx1ZSwgNjQsIGNoYW5uZWwsIGV4cG9ydGluZywgMCwgNjQpKVxuICAgICAgdGltaW5ncyA9IFs2NCwgNjRdXG4gICAgICBicmVha1xuICAgIGNhc2UgMzpcbiAgICAgIG1pZGlfbm90ZXMucHVzaChwbGF5X25vdGUoIG5vcm0obm90ZXNbMF0sIG1pbiwgbWF4KSAqIG54Lm11bHRpcGx5LnZhbHVlLCA0MywgY2hhbm5lbCwgZXhwb3J0aW5nLCBtYXNzX3Jlc3QsIDApKVxuICAgICAgbWlkaV9ub3Rlcy5wdXNoKHBsYXlfbm90ZSggbm9ybShub3Rlc1sxXSwgbWluLCBtYXgpICogbngubXVsdGlwbHkudmFsdWUsIDQzLCBjaGFubmVsLCBleHBvcnRpbmcsIDAsIDQzKSlcbiAgICAgIG1pZGlfbm90ZXMucHVzaChwbGF5X25vdGUoIG5vcm0obm90ZXNbMl0sIG1pbiwgbWF4KSAqIG54Lm11bHRpcGx5LnZhbHVlLCA0MiwgY2hhbm5lbCwgZXhwb3J0aW5nLCAwLCA4NSkpXG4gICAgICB0aW1pbmdzID0gWzQzLCA0MyAsNDJdXG4gICAgICBicmVha1xuICAgIGNhc2UgNDpcbiAgICAgIG1pZGlfbm90ZXMucHVzaChwbGF5X25vdGUoIG5vcm0obm90ZXNbMF0sIG1pbiwgbWF4KSAqIG54Lm11bHRpcGx5LnZhbHVlLCAzMiwgY2hhbm5lbCwgZXhwb3J0aW5nLCBtYXNzX3Jlc3QsIDApKVxuICAgICAgbWlkaV9ub3Rlcy5wdXNoKHBsYXlfbm90ZSggbm9ybShub3Rlc1sxXSwgbWluLCBtYXgpICogbngubXVsdGlwbHkudmFsdWUsIDMyLCBjaGFubmVsLCBleHBvcnRpbmcsIDAsIDMyKSlcbiAgICAgIG1pZGlfbm90ZXMucHVzaChwbGF5X25vdGUoIG5vcm0obm90ZXNbMl0sIG1pbiwgbWF4KSAqIG54Lm11bHRpcGx5LnZhbHVlLCAzMiwgY2hhbm5lbCwgZXhwb3J0aW5nLCAwLCA2NCkpXG4gICAgICBtaWRpX25vdGVzLnB1c2gocGxheV9ub3RlKCBub3JtKG5vdGVzWzNdLCBtaW4sIG1heCkgKiBueC5tdWx0aXBseS52YWx1ZSwgMzIsIGNoYW5uZWwsIGV4cG9ydGluZywgMCwgOTYpKVxuICAgICAgdGltaW5ncyA9IFszMiwgMzIsIDMyLCAzMl1cbiAgICAgIGJyZWFrXG4gIH1cbiAgaWYgKGNhc2VzLmxlbmd0aCkge1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjYXNlcycpLmlubmVySFRNTCA9IGNhc2VzLmpvaW4oJzxicj4nKVxuICB9XG4gIGlmICh0b3RhbCA8PSBtYXNzX2kpIHtcbiAgICBtYXNzX3Jlc3QgPSAwXG4gICAgbWFzc19pID0gMFxuICAgIGkgPSAwXG4gIH0gZWxzZSB7XG4gICAgaSArPSAxXG4gIH1cbiAga2FsaW1iYS5wbGF5KDIyMCwgLTEyKVxuICBpZiAobm90ZXMubGVuZ3RoKSB7XG4gICAgbWFzc19yZXN0ID0gMFxuICAgIHJldHVybiBbaSwgbWlkaV9ub3RlcywgdGltaW5ncywgbWFzc19yZXN0XVxuICB9XG4gIG1hc3NfcmVzdCArPSAxMjhcbiAgcmV0dXJuIFtpLCBbXSwgW10sIDBdXG59XG5cbi8qIHBsYXkgbmV4dCBub3RlIGFjY29yZGluZyB0byBzb25pZmljYXRpb24gKi9cblxuZnVuY3Rpb24gcGxheV9uZXh0KCl7XG4gIGxldCBub3RlX3RpbWUgPSAxMjAwMDAgLyBUb25lLlRyYW5zcG9ydC5icG0udmFsdWUgKiBub3RlX3ZhbHVlc1tueC50aW1pbmcuYWN0aXZlXVswXVxuICBzZXRUaW1lb3V0KHBsYXlfbmV4dCwgbm90ZV90aW1lKVxuICBsZXQgW25ld19pLCBub3RlcywgdGltaW5nc10gPSBwbGF5X2ZuKGksIGJvdW5kcywgZGlmZiwgbm90ZV90aW1lKVxuICBpID0gbmV3X2lcbiAgaWYgKHJlY29yZGluZykge1xuICAgIGxldCB0aW1pbmcgPSBub3RlX3ZhbHVlc1tueC50aW1pbmcuYWN0aXZlXVsyXVxuICAgIGlmICh0aW1pbmcubGVuZ3RoKSB0aW1pbmcgPSB0aW1pbmdbaSAlIHRpbWluZy5sZW5ndGhdXG4gICAgcmVjb3JkZXIuYWRkRXZlbnQobmV3IE1pZGlXcml0ZXIuTm90ZUV2ZW50KHsgcGl0Y2g6IG5vdGVzLCBkdXJhdGlvbjogJ3QnICsgdGltaW5nIH0pKVxuICB9XG59XG5cbi8qIGJpbmQgc2VsZWN0cyAqL1xuXG5mdW5jdGlvbiBwaWNrX2RhdGFzZXQoa2V5KXtcbiAgY29uc29sZS5sb2coJ3BpY2sgZGF0YXNldDonLCBrZXksIGRhdGFzZXRzW2tleV0pXG4gIGkgPSAwXG4gIG1hc3NfaSA9IDBcbiAgbWFzc19yZXN0ID0gMFxuICBkYXRhc2V0ID0gZGF0YXNldHNba2V5XVxuICBib3VuZHMgPSBnZXRfYm91bmRzKGRhdGFzZXQpXG4gIGRpZmYgPSBnZXRfZGlmZl9ib3VuZHMoYm91bmRzLnJvd3MpXG4gIHBsYXlfZm4gPSBkYXRhc2V0LnBsYXlfZm5cbn1cblxuLyogYnVpbGQgYW5kIGJpbmQgdGhlIFVJICovXG5cbmZ1bmN0aW9uIHJlYWR5KCkge1xuICBzY2FsZXMuYnVpbGRfb3B0aW9ucyhkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2NhbGUnKSlcbiAgYnVpbGRfb3B0aW9ucyhkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjZGF0YXNldCcpLCBkYXRhc2V0cywgcGlja19kYXRhc2V0KVxuXG4gIGNvbnN0IGRpYWxfc2l6ZSA9IFs1MCwgNTBdXG5cblx0VG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlID0gREVGQVVMVF9CUE1cbiAgbngudGVtcG8gPSBuZXcgTmV4dXMuRGlhbCgnI3RlbXBvJywge1xuICAgIHNpemU6IGRpYWxfc2l6ZSxcbiAgICBtaW46IDEwLFxuICAgIG1heDogMzAwLFxuICAgIHN0ZXA6IDEsXG4gICAgdmFsdWU6IERFRkFVTFRfQlBNLFxuICB9KVxuICB1cGRhdGVfdmFsdWVfb25fY2hhbmdlKG54LnRlbXBvLCAnI3RlbXBvJywgdHJ1ZSwgdiA9PiBUb25lLlRyYW5zcG9ydC5icG0udmFsdWUgPSB2KVxuXG4gIG54LnRpbWluZyA9IG5ldyBOZXh1cy5SYWRpb0J1dHRvbignI3RpbWluZycsIHtcbiAgICBzaXplOiBbNDAwLDI1XSxcbiAgICBudW1iZXJPZkJ1dHRvbnM6IG5vdGVfdmFsdWVzLmxlbmd0aCxcbiAgICBhY3RpdmU6IDYsXG4gIH0pXG4gIHVwZGF0ZV9yYWRpb192YWx1ZV9vbl9jaGFuZ2UobngudGltaW5nLCAnI3RpbWluZycsIG5vdGVfdmFsdWVzKVxuXG4gIG54LmR1cmF0aW9uID0gbmV3IE5leHVzLkRpYWwoJyNkdXJhdGlvbicsIHtcbiAgICBzaXplOiBkaWFsX3NpemUsXG4gICAgbWluOiAwLFxuICAgIG1heDogMixcbiAgICBzdGVwOiAwLjAxLFxuICAgIHZhbHVlOiAwLjgsXG4gIH0pXG4gIHVwZGF0ZV92YWx1ZV9vbl9jaGFuZ2UobnguZHVyYXRpb24sICcjZHVyYXRpb24nLCBmYWxzZSlcblxuICBueC5vZmZzZXQgPSBuZXcgTmV4dXMuRGlhbCgnI29mZnNldCcsIHtcbiAgICBzaXplOiBkaWFsX3NpemUsXG4gICAgbWluOiAtMjQsXG4gICAgbWF4OiAyNCxcbiAgICBzdGVwOiAxLFxuICAgIHZhbHVlOiAtNSxcbiAgfSlcbiAgdXBkYXRlX3ZhbHVlX29uX2NoYW5nZShueC5vZmZzZXQsICcjb2Zmc2V0JywgdHJ1ZSlcblxuICBueC5vY3RhdmUgPSBuZXcgTmV4dXMuRGlhbCgnI29jdGF2ZScsIHtcbiAgICBzaXplOiBkaWFsX3NpemUsXG4gICAgbWluOiAtNCxcbiAgICBtYXg6IDQsXG4gICAgc3RlcDogMSxcbiAgICB2YWx1ZTogMCxcbiAgfSlcbiAgdXBkYXRlX3ZhbHVlX29uX2NoYW5nZShueC5vY3RhdmUsICcjb2N0YXZlJywgdHJ1ZSlcblxuICBueC5tdWx0aXBseSA9IG5ldyBOZXh1cy5EaWFsKCcjbXVsdGlwbHknLCB7XG4gICAgc2l6ZTogZGlhbF9zaXplLFxuICAgIG1pbjogLTY0LFxuICAgIG1heDogNjQsXG4gICAgc3RlcDogMSxcbiAgICB2YWx1ZTogMTksXG4gIH0pXG4gIHVwZGF0ZV92YWx1ZV9vbl9jaGFuZ2UobngubXVsdGlwbHksICcjbXVsdGlwbHknLCB0cnVlKVxuXG4gIG54LmludGVydmFsID0gbmV3IE5leHVzLkRpYWwoJyNpbnRlcnZhbCcsIHtcbiAgICBzaXplOiBkaWFsX3NpemUsXG4gICAgbWluOiAtNjQsXG4gICAgbWF4OiA2NCxcbiAgICBzdGVwOiAxLFxuICAgIHZhbHVlOiAxMCxcbiAgfSlcbiAgdXBkYXRlX3ZhbHVlX29uX2NoYW5nZShueC5pbnRlcnZhbCwgJyNpbnRlcnZhbCcsIHRydWUpXG5cbiAgY29uc3QgZXhwb3J0X21pZGlfYnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2V4cG9ydF9taWRpJylcbiAgZXhwb3J0X21pZGlfYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIGV4cG9ydF9wYXR0ZXJuX2FzX21pZGkoZGF0YXNldC5uYW1lLCBib3VuZHMsIGRpZmYsIG54LnRlbXBvLnZhbHVlLCBueC50aW1pbmcuYWN0aXZlLCBwbGF5X2ZuKVxuICB9KVxuXG4gIGNvbnN0IHJlY29yZF9taWRpX2J1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNyZWNvcmRfbWlkaScpXG4gIHJlY29yZF9taWRpX2J1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBpZiAocmVjb3JkaW5nKSB7XG4gICAgICByZWNvcmRfbWlkaV9idXR0b24uaW5uZXJIVE1MID0gJ1JlY29yZCBNSURJJ1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdyZWNvcmRpbmcnKVxuICAgICAgcmVjb3JkaW5nID0gZmFsc2VcbiAgICAgIGNvbnN0IHdyaXRlciA9IG5ldyBNaWRpV3JpdGVyLldyaXRlcihbcmVjb3JkZXJdKVxuICAgICAgY29uc3QgYmxvYiA9IGRhdGFVUkl0b0Jsb2Iod3JpdGVyLmRhdGFVcmkoKSlcbiAgICAgIHNhdmVBcyhibG9iLCAnUmVjb3JkaW5nIC0gJyArIGRhdGFzZXQubmFtZSArICcubWlkJylcbiAgICB9IGVsc2Uge1xuICAgICAgcmVjb3JkX21pZGlfYnV0dG9uLmlubmVySFRNTCA9ICdTYXZlIFJlY29yZGluZydcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgncmVjb3JkaW5nJylcbiAgICAgIHJlY29yZGluZyA9IHRydWVcbiAgICAgIHJlY29yZGVyID0gbmV3IE1pZGlXcml0ZXIuVHJhY2soKVxuICAgICAgcmVjb3JkZXIuc2V0VGVtcG8obngudGVtcG8udmFsdWUpXG4gICAgfVxuICB9KVxuXG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sb2FkaW5nJykuY2xhc3NMaXN0LnJlbW92ZSgnbG9hZGluZycpXG5cbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2RhdGFzZXQnKS52YWx1ZSA9ICdNYXNzIFNob290aW5ncydcbiAgcGlja19kYXRhc2V0KCdNYXNzIFNob290aW5ncycpXG5cbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3NjYWxlJykudmFsdWUgPSAnMTQnXG4gIHNjYWxlcy5waWNrKDE0KVxuXG4gIHBsYXlfbmV4dCgpXG59XG5cbi8qIGtleXMgKi9cblxua2V5cy5saXN0ZW4oaW5kZXggPT4ge1xuICBueC5vZmZzZXQudmFsdWUgPSBpbmRleFxuICBueC5vZmZzZXQudXBkYXRlKGluZGV4KVxufSlcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9pbmRleC5qcyIsIm1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uKCl7XG4gIHZhciBJbnRvbmF0aW9uID0gZnVuY3Rpb24ob3B0KXtcbiAgICBvcHQgPSB0aGlzLm9wdCA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgbmFtZTogXCJcIixcbiAgICAgIHJvb3Q6IDQ0MCxcbiAgICAgIG9jdGF2ZTogMCxcbiAgICAgIGludGVydmFsOiAyLFxuICAgICAgdGV0OiAwLFxuICAgICAgaW50ZXJ2YWxzOiBudWxsLFxuICAgIH0sIG9wdCB8fCB7fSlcbiAgICB0aGlzLmdlbmVyYXRlKClcbiAgfVxuICBJbnRvbmF0aW9uLnByb3RvdHlwZS5nZW5lcmF0ZSA9IGZ1bmN0aW9uKG9wdCl7XG4gICAgb3B0ID0gT2JqZWN0LmFzc2lnbih0aGlzLm9wdCwgb3B0IHx8IHt9KVxuICAgIGlmIChvcHQuc2NsKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlX3NjbCgpXG4gICAgfVxuICAgIGVsc2UgaWYgKG9wdC50ZXQpIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVfdGV0KClcbiAgICB9XG4gICAgZWxzZSBpZiAob3B0LmludGVydmFscykge1xuICAgICAgdGhpcy5nZW5lcmF0ZV9pbnRlcnZhbHMoKVxuICAgIH1cbiAgfVxuICBJbnRvbmF0aW9uLnByb3RvdHlwZS5nZW5lcmF0ZV9pbnRlcnZhbHMgPSBmdW5jdGlvbigpe1xuICAgIHZhciByb290ID0gdGhpcy5vcHQucm9vdFxuICAgIHZhciBpbnRlcnZhbF9saXN0ID0gdGhpcy5vcHQuaW50ZXJ2YWxzXG4gICAgaWYgKHR5cGVvZiBpbnRlcnZhbF9saXN0ID09IFwic3RyaW5nXCIpIHtcbiAgICAgIGludGVydmFsX2xpc3QgPSBpbnRlcnZhbF9saXN0LnNwbGl0KFwiIFwiKVxuICAgIH1cbiAgICB0aGlzLm5hbWUgPSB0aGlzLm9wdC5uYW1lIHx8IFwiaW50ZXJ2YWwgbGlzdFwiXG4gICAgdGhpcy5pbnRlcnZhbHMgPSBpbnRlcnZhbF9saXN0XG4gICAgdGhpcy5pbnRlcnZhbCA9IHRoaXMub3B0LmludGVydmFsID0gcGFyc2VJbnRlcnZhbC5jYWxsKHRoaXMsIGludGVydmFsX2xpc3QucG9wKCkgKVxuICAgIHRoaXMuc2NhbGUgPSBpbnRlcnZhbF9saXN0Lm1hcCggcGFyc2VJbnRlcnZhbFN0cmluZy5iaW5kKHRoaXMpICkuZmlsdGVyKGZ1bmN0aW9uKHYpe1xuICAgICAgcmV0dXJuICEhIHZcbiAgICB9KVxuICB9XG4gIEludG9uYXRpb24ucHJvdG90eXBlLmdlbmVyYXRlX3RldCA9IGZ1bmN0aW9uKCl7XG4gICAgdmFyIHNjYWxlID0gdGhpcy5zY2FsZSA9IFtdXG4gICAgdmFyIHJvb3QgPSB0aGlzLm9wdC5yb290XG4gICAgdmFyIHRldCA9IHRoaXMub3B0LnRldFxuICAgIHZhciBpbnRlcnZhbCA9IHRoaXMuaW50ZXJ2YWwgPSB0aGlzLm9wdC5pbnRlcnZhbFxuICAgIHZhciByYXRpbyA9IE1hdGgucG93KCBpbnRlcnZhbCwgMS90ZXQgKVxuICAgIHZhciBuID0gcm9vdFxuICAgIHNjYWxlLnB1c2gobilcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRldC0xOyBpKyspIHtcbiAgICAgIG4gKj0gcmF0aW9cbiAgICAgIHNjYWxlLnB1c2gobilcbiAgICB9XG4gICAgdGhpcy5uYW1lID0gdGhpcy5vcHQubmFtZSB8fCB0ZXQgKyBcIi10b25lIGVxdWFsIHRlbXBlcmFtZW50XCJcbiAgICB0aGlzLmludGVydmFscyA9IG51bGxcbiAgfVxuICBJbnRvbmF0aW9uLnByb3RvdHlwZS5nZW5lcmF0ZV9zY2wgPSBmdW5jdGlvbigpe1xuICAgIHZhciByb290ID0gdGhpcy5vcHQucm9vdFxuICAgIHZhciBzY2wgPSB0aGlzLnBhcnNlX3NjbCggdGhpcy5vcHQuc2NsIClcbiAgICB0aGlzLmludGVydmFscyA9IHNjbC5ub3Rlc1xuICAgIHRoaXMuaW50ZXJ2YWwgPSBzY2wubm90ZXMucG9wKClcbiAgICB0aGlzLm5hbWUgPSB0aGlzLm9wdC5uYW1lIHx8IHNjbC5kZXNjcmlwdGlvblxuICAgIHRoaXMuc2NhbGUgPSBzY2wubm90ZXMubWFwKGZ1bmN0aW9uKHYpe1xuICAgICAgcmV0dXJuIHYgKiByb290XG4gICAgfSlcbiAgfVxuICBJbnRvbmF0aW9uLnByb3RvdHlwZS5wYXJzZV9zY2wgPSBmdW5jdGlvbihzKXtcbiAgICB2YXIgc2NsID0ge31cbiAgICBzY2wuY29tbWVudHMgPSBbXVxuICAgIHNjbC5ub3RlcyA9IFtdXG4gICAgcy50cmltKCkuc3BsaXQoXCJcXG5cIikuZm9yRWFjaChmdW5jdGlvbihsaW5lKXtcbiAgICAgIC8vIExpbmVzIGJlZ2lubmluZyB3aXRoIGFuIGV4Y2xhbWF0aW9uIG1hcmsgYXJlIHJlZ2FyZGVkIGFzIGNvbW1lbnRzXG4gICAgICAvLyBhbmQgYXJlIHRvIGJlIGlnbm9yZWQuXG4gICAgICBpZiAoIGxpbmUuaW5kZXhPZihcIiFcIikgIT09IC0xICkge1xuICAgICAgICBzY2wuY29tbWVudHMucHVzaChsaW5lKVxuICAgICAgfVxuICAgICAgLy8gVGhlIGZpcnN0IChub24gY29tbWVudCkgbGluZSBjb250YWlucyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBzY2FsZS5cbiAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGRlc2NyaXB0aW9uLCB0aGVyZSBzaG91bGQgYmUgYW4gZW1wdHkgbGluZS4gKG5iOiB3aGljaCBpcyBmYWxzZXkpXG4gICAgICBlbHNlIGlmICggISAoJ2Rlc2NyaXB0aW9uJyBpbiBzY2wpICkge1xuICAgICAgICBzY2wuZGVzY3JpcHRpb24gPSBsaW5lXG4gICAgICB9XG4gICAgICAvLyBUaGUgc2Vjb25kIGxpbmUgY29udGFpbnMgdGhlIG51bWJlciBvZiBub3Rlcy5cbiAgICAgIC8vIFRoZSBmaXJzdCBub3RlIG9mIDEvMSBvciAwLjAgY2VudHMgaXMgaW1wbGljaXQgYW5kIG5vdCBpbiB0aGUgZmlsZXMuXG4gICAgICBlbHNlIGlmICggISBzY2wubm90ZXMubGVuZ3RoKSB7XG4gICAgICAgIHNjbC5ub3Rlcy5wdXNoKDEpXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGNvbnRhaW5zIGEgcGVyaW9kLCBpdCBpcyBhIGNlbnRzIHZhbHVlLCBvdGhlcndpc2UgYSByYXRpby5cbiAgICAgICAgdmFyIG5vdGUgPSBsaW5lLnJlcGxhY2UoL15bXi1cXC4wLTldKy8sXCJcIikucmVwbGFjZSgvW14tXFwvXFwuMC05XSskLyxcIlwiKVxuICAgICAgICBpZiAoIG5vdGUuaW5kZXhPZihcIi5cIikgIT09IC0xICkge1xuICAgICAgICAgIG5vdGUgPSBNYXRoLnBvdyggMiwgKHBhcnNlRmxvYXQobm90ZSkgLyAxMjAwKSApXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgbm90ZSA9IHBhcnNlSW50ZXJ2YWwobm90ZSlcbiAgICAgICAgfVxuICAgICAgICBpZiAobm90ZSkge1xuICAgICAgICAgIHNjbC5ub3Rlcy5wdXNoKG5vdGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBzY2xcbiAgfVxuICBJbnRvbmF0aW9uLnByb3RvdHlwZS5pbmRleCA9IGZ1bmN0aW9uKGksIG9jdGF2ZSl7XG4gICAgb2N0YXZlID0gb2N0YXZlIHx8IHRoaXMub3B0Lm9jdGF2ZVxuICAgIHZhciBmID0gdGhpcy5zY2FsZVsgbW9kKGksIHRoaXMuc2NhbGUubGVuZ3RoKXwwIF1cbiAgICB2YXIgcG93ID0gTWF0aC5mbG9vcihub3JtKGksIDAsIHRoaXMuc2NhbGUubGVuZ3RoKSkgKyBvY3RhdmVcbiAgICBmICo9IE1hdGgucG93KHRoaXMuaW50ZXJ2YWwsIHBvdylcbiAgICByZXR1cm4gZlxuICB9XG4gIEludG9uYXRpb24ucHJvdG90eXBlLnJhbmdlID0gZnVuY3Rpb24obWluLCBtYXgpe1xuICAgIHZhciBhID0gW11cbiAgICBmb3IgKHZhciBpID0gbWluOyBpIDwgbWF4OyBpKyspIHtcbiAgICAgIGEucHVzaCggdGhpcy5pbmRleChpKSApXG4gICAgfVxuICAgIHJldHVybiBhXG4gIH1cbiAgSW50b25hdGlvbi5wcm90b3R5cGUuc2V0X3Jvb3QgPSBmdW5jdGlvbihmKXtcbiAgICB0aGlzLm9wdC5yb290ID0gZlxuICAgIHRoaXMuZ2VuZXJhdGUoKVxuICB9XG4gIEludG9uYXRpb24ucHJvdG90eXBlLnF1YW50aXplX2ZyZXF1ZW5jeSA9IGZ1bmN0aW9uKGYpe1xuICAgIGlmIChmID09IDApIHJldHVybiAwXG4gICAgdmFyIHNjYWxlX2YgPSBmXG4gICAgdmFyIHBvdyA9IDBcbiAgICB2YXIgaW50ZXJ2YWwgPSB0aGlzLmludGVydmFsXG4gICAgdmFyIHNjYWxlID0gdGhpcy5zY2FsZVxuICAgIHdoaWxlIChzY2FsZV9mIDwgcm9vdCkge1xuICAgICAgc2NhbGVfZiAqPSBpbnRlcnZhbFxuICAgICAgcG93IC09IDFcbiAgICB9XG4gICAgd2hpbGUgKHNjYWxlX2YgPiByb290ICogaW50ZXJ2YWwpIHtcbiAgICAgIHNjYWxlX2YgLz0gaW50ZXJ2YWxcbiAgICAgIHBvdyArPSAxXG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NhbGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChzY2FsZV9mID4gc2NhbGVbaV0pIGNvbnRpbnVlXG4gICAgICBzY2FsZV9mID0gc2NhbGVbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIHNjYWxlX2YgKj0gTWF0aC5wb3coMiwgcG93KVxuICAgIHJldHVybiBzY2FsZV9mXG4gIH1cbiAgSW50b25hdGlvbi5wcm90b3R5cGUucXVhbnRpemVfaW5kZXggPSBmdW5jdGlvbihpKXtcbiAgICByZXR1cm4gbW9kKGluZGV4LTEsIHRoaXMuc2NhbGUubGVuZ3RoKXwwXG4gIH1cbiAgdmFyIHBhcnNlSW50ZXJ2YWwgPSBJbnRvbmF0aW9uLnByb3RvdHlwZS5wYXJzZV9pbnRlcnZhbCA9IGZ1bmN0aW9uIChzKSB7XG4gICAgaWYgKHR5cGVvZiBzID09IFwibnVtYmVyXCIpIHJldHVybiBzXG4gICAgaWYgKCEgcy5pbmRleE9mKFwiL1wiKSA9PSAtMSkgcmV0dXJuIHBhcnNlSW50KHMpXG4gICAgdmFyIHBwID0gcy5zcGxpdChcIi9cIilcbiAgICB2YXIgbnVtID0gcGFyc2VJbnQocHBbMF0pXG4gICAgdmFyIGRlbiA9IHBhcnNlSW50KHBwWzFdKVxuICAgIGlmIChpc05hTihudW0pKSByZXR1cm4gMVxuICAgIGlmIChpc05hTihkZW4pIHx8IGRlbiA9PSAwKSByZXR1cm4gbnVtXG4gICAgaWYgKG51bSA9PSBkZW4pIHJldHVybiAxXG4gICAgcmV0dXJuIG51bSAvIGRlblxuICB9XG4gIHZhciBwYXJzZUludGVydmFsU3RyaW5nID0gSW50b25hdGlvbi5wcm90b3R5cGUucGFyc2VfaW50ZXJ2YWxfc3RyaW5nID0gZnVuY3Rpb24ocyl7XG4gICAgaWYgKHMuaW5kZXhPZihcIi9cIikgIT09IC0xKSByZXR1cm4gcGFyc2VJbnRlcnZhbChzKSAqIHRoaXMub3B0LnJvb3QgLy8gaW50ZXJ2YWxzXG4gICAgaWYgKHMuaW5kZXhPZihcImZcIikgIT09IC0xKSByZXR1cm4gcGFyc2VGbG9hdChzKSAgICAvLyBwdXJlIGZyZXF1ZW5jaWVzXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQocylcbiAgfVxuICBmdW5jdGlvbiBub3JtKG4sYSxiKXsgcmV0dXJuIChuLWEpIC8gKGItYSkgfVxuICBmdW5jdGlvbiBtb2QobixtKXsgcmV0dXJuIG4tKG0gKiBNYXRoLmZsb29yKG4vbSkpIH1cblxuICByZXR1cm4gSW50b25hdGlvblxufSkoKVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2xpYi9pbnRvbmF0aW9uLmpzIiwiLyoqXG4gKiAgU3RhcnRBdWRpb0NvbnRleHQuanNcbiAqICBAYXV0aG9yIFlvdGFtIE1hbm5cbiAqICBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVCBMaWNlbnNlXG4gKiAgQGNvcHlyaWdodCAyMDE2IFlvdGFtIE1hbm5cbiAqL1xuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShbXSwgZmFjdG9yeSk7XG4gICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICB9IGVsc2Uge1xuICAgIHJvb3QuU3RhcnRBdWRpb0NvbnRleHQgPSBmYWN0b3J5KCk7XG4gIH1cbn0odGhpcywgZnVuY3Rpb24gKCkge1xuXG4gIC8qKlxuICAgKiBUaGUgU3RhcnRBdWRpb0NvbnRleHQgb2JqZWN0XG4gICAqL1xuICB2YXIgU3RhcnRBdWRpb0NvbnRleHQgPSB7XG4gICAgLyoqXG4gICAgICogVGhlIGF1ZGlvIGNvbnRleHQgcGFzc2VkIGluIGJ5IHRoZSB1c2VyXG4gICAgICogQHR5cGUge0F1ZGlvQ29udGV4dH1cbiAgICAgKi9cbiAgICBjb250ZXh0IDogbnVsbCxcbiAgICAvKipcbiAgICAgKiBUaGUgVGFwTGlzdGVuZXJzIGJvdW5kIHRvIHRoZSBlbGVtZW50c1xuICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90YXBMaXN0ZW5lcnMgOiBbXSxcbiAgICAvKipcbiAgICAgKiBDYWxsYmFja3MgdG8gaW52b2tlIHdoZW4gdGhlIGF1ZGlvIGNvbnRleHQgaXMgc3RhcnRlZFxuICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9vblN0YXJ0ZWQgOiBbXSxcbiAgfTtcblxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNvbnRleHRcbiAgICogQHBhcmFtIHtBdWRpb0NvbnRleHR9IGN0eFxuICAgKiBAcmV0dXJucyB7U3RhcnRBdWRpb0NvbnRleHR9XG4gICAqL1xuICBTdGFydEF1ZGlvQ29udGV4dC5zZXRDb250ZXh0ID0gZnVuY3Rpb24oY3R4KXtcbiAgICBTdGFydEF1ZGlvQ29udGV4dC5jb250ZXh0ID0gY3R4O1xuICAgIHJldHVybiBTdGFydEF1ZGlvQ29udGV4dDtcbiAgfTtcblxuICAvKipcbiAgICogQWRkIGEgdGFwIGxpc3RlbmVyIHRvIHRoZSBhdWRpbyBjb250ZXh0XG4gICAqIEBwYXJhbSAge0FycmF5fEVsZW1lbnR8U3RyaW5nfGpRdWVyeX0gZWxlbWVudFxuICAgKiBAcmV0dXJucyB7U3RhcnRBdWRpb0NvbnRleHR9XG4gICAqL1xuICBTdGFydEF1ZGlvQ29udGV4dC5vbiA9IGZ1bmN0aW9uKGVsZW1lbnQpe1xuICAgIGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnQpIHx8IChOb2RlTGlzdCAmJiBlbGVtZW50IGluc3RhbmNlb2YgTm9kZUxpc3QpKXtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudC5sZW5ndGg7IGkrKyl7XG4gICAgICAgIFN0YXJ0QXVkaW9Db250ZXh0Lm9uKGVsZW1lbnRbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQgPT09IFwic3RyaW5nXCIpe1xuICAgICAgU3RhcnRBdWRpb0NvbnRleHQub24oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlbGVtZW50KSk7XG4gICAgfSBlbHNlIGlmIChlbGVtZW50LmpxdWVyeSAmJiB0eXBlb2YgZWxlbWVudC50b0FycmF5ID09PSBcImZ1bmN0aW9uXCIpe1xuICAgICAgU3RhcnRBdWRpb0NvbnRleHQub24oZWxlbWVudC50b0FycmF5KCkpO1xuICAgIH0gZWxzZSBpZiAoRWxlbWVudCAmJiBlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudCl7XG4gICAgICAvL2lmIGl0J3MgYW4gZWxlbWVudCwgY3JlYXRlIGEgVGFwTGlzdGVuZXJcbiAgICAgIHZhciB0YXAgPSBuZXcgVGFwTGlzdGVuZXIoZWxlbWVudCwgb25UYXApO1xuICAgICAgU3RhcnRBdWRpb0NvbnRleHQuX3RhcExpc3RlbmVycy5wdXNoKHRhcCk7XG4gICAgfSBcbiAgICByZXR1cm4gU3RhcnRBdWRpb0NvbnRleHQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIEJpbmQgYSBjYWxsYmFjayB0byB3aGVuIHRoZSBhdWRpbyBjb250ZXh0IGlzIHN0YXJ0ZWQuIFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYlxuICAgKiBAcmV0dXJuIHtTdGFydEF1ZGlvQ29udGV4dH1cbiAgICovXG4gIFN0YXJ0QXVkaW9Db250ZXh0Lm9uU3RhcnRlZCA9IGZ1bmN0aW9uKGNiKXtcbiAgICAvL2lmIGl0J3MgYWxyZWFkeSBzdGFydGVkLCBpbnZva2UgdGhlIGNhbGxiYWNrXG4gICAgaWYgKFN0YXJ0QXVkaW9Db250ZXh0LmlzU3RhcnRlZCgpKXtcbiAgICAgIGNiKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFN0YXJ0QXVkaW9Db250ZXh0Ll9vblN0YXJ0ZWQucHVzaChjYik7XG4gICAgfVxuICAgIHJldHVybiBTdGFydEF1ZGlvQ29udGV4dDtcbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJucyB0cnVlIGlmIHRoZSBjb250ZXh0IGlzIHN0YXJ0ZWRcbiAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICovXG4gIFN0YXJ0QXVkaW9Db250ZXh0LmlzU3RhcnRlZCA9IGZ1bmN0aW9uKCl7XG4gICAgcmV0dXJuIChTdGFydEF1ZGlvQ29udGV4dC5jb250ZXh0ICE9PSBudWxsICYmIFN0YXJ0QXVkaW9Db250ZXh0LmNvbnRleHQuc3RhdGUgPT09IFwicnVubmluZ1wiKTtcbiAgfTtcblxuICAvKipcbiAgICogQGNsYXNzICBMaXN0ZW5zIGZvciBub24tZHJhZ2dpbmcgdGFwIGVuZHMgb24gdGhlIGdpdmVuIGVsZW1lbnRcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdmFyIFRhcExpc3RlbmVyID0gZnVuY3Rpb24oZWxlbWVudCl7XG5cbiAgICB0aGlzLl9kcmFnZ2VkID0gZmFsc2U7XG5cbiAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMuX2JpbmRlZE1vdmUgPSB0aGlzLl9tb3ZlZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JpbmRlZEVuZCA9IHRoaXMuX2VuZGVkLmJpbmQodGhpcyk7XG5cbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgdGhpcy5fYmluZGVkTW92ZSk7XG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgdGhpcy5fYmluZGVkRW5kKTtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIHRoaXMuX2JpbmRlZEVuZCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIGRyYWcgbW92ZSBldmVudFxuICAgKi9cbiAgVGFwTGlzdGVuZXIucHJvdG90eXBlLl9tb3ZlZCA9IGZ1bmN0aW9uKGUpe1xuICAgIHRoaXMuX2RyYWdnZWQgPSB0cnVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiB0YXAgZW5kZWQgbGlzdGVuZXJcbiAgICovXG4gIFRhcExpc3RlbmVyLnByb3RvdHlwZS5fZW5kZWQgPSBmdW5jdGlvbihlKXtcbiAgICBpZiAoIXRoaXMuX2RyYWdnZWQpe1xuICAgICAgb25UYXAoKTtcbiAgICB9XG4gICAgdGhpcy5fZHJhZ2dlZCA9IGZhbHNlO1xuICB9O1xuXG4gIC8qKlxuICAgKiByZW1vdmUgYWxsIHRoZSBib3VuZCBldmVudHNcbiAgICovXG4gIFRhcExpc3RlbmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24oKXtcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgdGhpcy5fYmluZGVkTW92ZSk7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgdGhpcy5fYmluZGVkRW5kKTtcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIHRoaXMuX2JpbmRlZEVuZCk7XG4gICAgdGhpcy5fYmluZGVkTW92ZSA9IG51bGw7XG4gICAgdGhpcy5fYmluZGVkRW5kID0gbnVsbDtcbiAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgfTtcblxuICAvKipcbiAgICogSW52b2tlZCB0aGUgZmlyc3QgdGltZSBvZiB0aGUgZWxlbWVudHMgaXMgdGFwcGVkLlxuICAgKiBDcmVhdGVzIGEgc2lsZW50IG9zY2lsbGF0b3Igd2hlbiBhIG5vbi1kcmFnZ2luZyB0b3VjaGVuZCBcbiAgICogZXZlbnQgaGFzIGJlZW4gdHJpZ2dlcmVkLlxuICAgKi9cbiAgZnVuY3Rpb24gb25UYXAoKXtcbiAgICAvL3N0YXJ0IHRoZSBhdWRpbyBjb250ZXh0IHdpdGggYSBzaWxlbnQgb3NjaWxsYXRvclxuICAgIGlmIChTdGFydEF1ZGlvQ29udGV4dC5jb250ZXh0ICYmICFTdGFydEF1ZGlvQ29udGV4dC5pc1N0YXJ0ZWQoKSl7XG4gICAgICB2YXIgb3NjID0gU3RhcnRBdWRpb0NvbnRleHQuY29udGV4dC5jcmVhdGVPc2NpbGxhdG9yKCk7XG4gICAgICB2YXIgc2lsZW50ID0gU3RhcnRBdWRpb0NvbnRleHQuY29udGV4dC5jcmVhdGVHYWluKCk7XG4gICAgICBzaWxlbnQuZ2Fpbi52YWx1ZSA9IDA7XG4gICAgICBvc2MuY29ubmVjdChzaWxlbnQpO1xuICAgICAgc2lsZW50LmNvbm5lY3QoU3RhcnRBdWRpb0NvbnRleHQuY29udGV4dC5kZXN0aW5hdGlvbik7XG4gICAgICB2YXIgbm93ID0gU3RhcnRBdWRpb0NvbnRleHQuY29udGV4dC5jdXJyZW50VGltZTtcbiAgICAgIG9zYy5zdGFydChub3cpO1xuICAgICAgb3NjLnN0b3Aobm93KzAuNSk7XG4gICAgfVxuXG4gICAgLy9kaXNwb3NlIGFsbCB0aGUgdGFwIGxpc3RlbmVyc1xuICAgIGlmIChTdGFydEF1ZGlvQ29udGV4dC5fdGFwTGlzdGVuZXJzKXtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgU3RhcnRBdWRpb0NvbnRleHQuX3RhcExpc3RlbmVycy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIFN0YXJ0QXVkaW9Db250ZXh0Ll90YXBMaXN0ZW5lcnNbaV0uZGlzcG9zZSgpO1xuICAgICAgfVxuICAgICAgU3RhcnRBdWRpb0NvbnRleHQuX3RhcExpc3RlbmVycyA9IG51bGw7XG4gICAgfVxuICAgIC8vdGhlIG9uc3RhcnRlZCBjYWxsYmFja3NcbiAgICBpZiAoU3RhcnRBdWRpb0NvbnRleHQuX29uU3RhcnRlZCl7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IFN0YXJ0QXVkaW9Db250ZXh0Ll9vblN0YXJ0ZWQubGVuZ3RoOyBqKyspe1xuICAgICAgICBTdGFydEF1ZGlvQ29udGV4dC5fb25TdGFydGVkW2pdKCk7XG4gICAgICB9XG4gICAgICBTdGFydEF1ZGlvQ29udGV4dC5fb25TdGFydGVkID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gU3RhcnRBdWRpb0NvbnRleHQ7XG59KSk7XG5cblxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2xpYi9zdGFydEF1ZGlvQ29udGV4dC5qcyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9hcnJheS9mcm9tXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9hcnJheS9mcm9tLmpzXG4vLyBtb2R1bGUgaWQgPSA4M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vZ2V0LWl0ZXJhdG9yXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9nZXQtaXRlcmF0b3IuanNcbi8vIG1vZHVsZSBpZCA9IDg0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9pcy1pdGVyYWJsZVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9iYWJlbC1ydW50aW1lL2NvcmUtanMvaXMtaXRlcmFibGUuanNcbi8vIG1vZHVsZSBpZCA9IDg1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9tYXRoL2xvZzJcIiksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYmFiZWwtcnVudGltZS9jb3JlLWpzL21hdGgvbG9nMi5qc1xuLy8gbW9kdWxlIGlkID0gODZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9rZXlzXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qva2V5cy5qc1xuLy8gbW9kdWxlIGlkID0gODdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2VcIiksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2UuanNcbi8vIG1vZHVsZSBpZCA9IDg4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9zeW1ib2xcIiksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbC5qc1xuLy8gbW9kdWxlIGlkID0gODlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pdGVyYXRvclwiKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9iYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sL2l0ZXJhdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSA5MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9pdGVyYXRvciA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL3N5bWJvbC9pdGVyYXRvclwiKTtcblxudmFyIF9pdGVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pdGVyYXRvcik7XG5cbnZhciBfc3ltYm9sID0gcmVxdWlyZShcIi4uL2NvcmUtanMvc3ltYm9sXCIpO1xuXG52YXIgX3N5bWJvbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zeW1ib2wpO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIF9pdGVyYXRvcjIuZGVmYXVsdCA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IF9zeW1ib2wyLmRlZmF1bHQgJiYgb2JqICE9PSBfc3ltYm9sMi5kZWZhdWx0LnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIF90eXBlb2YoX2l0ZXJhdG9yMi5kZWZhdWx0KSA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihvYmopO1xufSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gX3N5bWJvbDIuZGVmYXVsdCAmJiBvYmogIT09IF9zeW1ib2wyLmRlZmF1bHQucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihvYmopO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYmFiZWwtcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qc1xuLy8gbW9kdWxlIGlkID0gOTFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gcGxhY2VIb2xkZXJzQ291bnQgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gdGhlIG51bWJlciBvZiBlcXVhbCBzaWducyAocGxhY2UgaG9sZGVycylcbiAgLy8gaWYgdGhlcmUgYXJlIHR3byBwbGFjZWhvbGRlcnMsIHRoYW4gdGhlIHR3byBjaGFyYWN0ZXJzIGJlZm9yZSBpdFxuICAvLyByZXByZXNlbnQgb25lIGJ5dGVcbiAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUsIHRoZW4gdGhlIHRocmVlIGNoYXJhY3RlcnMgYmVmb3JlIGl0IHJlcHJlc2VudCAyIGJ5dGVzXG4gIC8vIHRoaXMgaXMganVzdCBhIGNoZWFwIGhhY2sgdG8gbm90IGRvIGluZGV4T2YgdHdpY2VcbiAgcmV0dXJuIGI2NFtsZW4gLSAyXSA9PT0gJz0nID8gMiA6IGI2NFtsZW4gLSAxXSA9PT0gJz0nID8gMSA6IDBcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIC8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuICByZXR1cm4gYjY0Lmxlbmd0aCAqIDMgLyA0IC0gcGxhY2VIb2xkZXJzQ291bnQoYjY0KVxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciBpLCBqLCBsLCB0bXAsIHBsYWNlSG9sZGVycywgYXJyXG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG4gIHBsYWNlSG9sZGVycyA9IHBsYWNlSG9sZGVyc0NvdW50KGI2NClcblxuICBhcnIgPSBuZXcgQXJyKGxlbiAqIDMgLyA0IC0gcGxhY2VIb2xkZXJzKVxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgbCA9IHBsYWNlSG9sZGVycyA+IDAgPyBsZW4gLSA0IDogbGVuXG5cbiAgdmFyIEwgPSAwXG5cbiAgZm9yIChpID0gMCwgaiA9IDA7IGkgPCBsOyBpICs9IDQsIGogKz0gMykge1xuICAgIHRtcCA9IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfCAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfCByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltMKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW0wrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltMKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVycyA9PT0gMikge1xuICAgIHRtcCA9IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW0wrK10gPSB0bXAgJiAweEZGXG4gIH0gZWxzZSBpZiAocGxhY2VIb2xkZXJzID09PSAxKSB7XG4gICAgdG1wID0gKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW0wrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltMKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICsgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICsgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gKyBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID0gKHVpbnQ4W2ldIDw8IDE2KSArICh1aW50OFtpICsgMV0gPDwgOCkgKyAodWludDhbaSArIDJdKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgb3V0cHV0ID0gJydcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIG91dHB1dCArPSBsb29rdXBbdG1wID4+IDJdXG4gICAgb3V0cHV0ICs9IGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl1cbiAgICBvdXRwdXQgKz0gJz09J1xuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyAodWludDhbbGVuIC0gMV0pXG4gICAgb3V0cHV0ICs9IGxvb2t1cFt0bXAgPj4gMTBdXG4gICAgb3V0cHV0ICs9IGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl1cbiAgICBvdXRwdXQgKz0gbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXVxuICAgIG91dHB1dCArPSAnPSdcbiAgfVxuXG4gIHBhcnRzLnB1c2gob3V0cHV0KVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2Jhc2U2NC1qcy9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gOTJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5BcnJheS5mcm9tO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvZm4vYXJyYXkvZnJvbS5qc1xuLy8gbW9kdWxlIGlkID0gOTNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwicmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvcicpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvZm4vZ2V0LWl0ZXJhdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSA5NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJyZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9tb2R1bGVzL2NvcmUuaXMtaXRlcmFibGUnKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L2ZuL2lzLWl0ZXJhYmxlLmpzXG4vLyBtb2R1bGUgaWQgPSA5NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzInKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk1hdGgubG9nMjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L2ZuL21hdGgvbG9nMi5qc1xuLy8gbW9kdWxlIGlkID0gOTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0LmFzc2lnbjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9hc3NpZ24uanNcbi8vIG1vZHVsZSBpZCA9IDk3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3Qua2V5cztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9rZXlzLmpzXG4vLyBtb2R1bGUgaWQgPSA5OFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJyZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYucHJvbWlzZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9tb2R1bGVzL19jb3JlJykuUHJvbWlzZTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2UuanNcbi8vIG1vZHVsZSBpZCA9IDk5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuU3ltYm9sO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAxMDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fd2tzLWV4dCcpLmYoJ2l0ZXJhdG9yJyk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9mbi9zeW1ib2wvaXRlcmF0b3IuanNcbi8vIG1vZHVsZSBpZCA9IDEwMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCl7IC8qIGVtcHR5ICovIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanNcbi8vIG1vZHVsZSBpZCA9IDEwMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpe1xuICBpZighKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSl7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4taW5zdGFuY2UuanNcbi8vIG1vZHVsZSBpZCA9IDEwM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIHRvTGVuZ3RoICA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpXG4gICwgdG9JbmRleCAgID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oSVNfSU5DTFVERVMpe1xuICByZXR1cm4gZnVuY3Rpb24oJHRoaXMsIGVsLCBmcm9tSW5kZXgpe1xuICAgIHZhciBPICAgICAgPSB0b0lPYmplY3QoJHRoaXMpXG4gICAgICAsIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKVxuICAgICAgLCBpbmRleCAgPSB0b0luZGV4KGZyb21JbmRleCwgbGVuZ3RoKVxuICAgICAgLCB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgaWYoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpd2hpbGUobGVuZ3RoID4gaW5kZXgpe1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgaWYodmFsdWUgIT0gdmFsdWUpcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjdG9JbmRleCBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKWlmKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pe1xuICAgICAgaWYoT1tpbmRleF0gPT09IGVsKXJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qc1xuLy8gbW9kdWxlIGlkID0gMTA0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKVxuICAsIGNyZWF0ZURlc2MgICAgICA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmplY3QsIGluZGV4LCB2YWx1ZSl7XG4gIGlmKGluZGV4IGluIG9iamVjdCkkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qc1xuLy8gbW9kdWxlIGlkID0gMTA1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJylcbiAgLCBnT1BTICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKVxuICAsIHBJRSAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgdmFyIHJlc3VsdCAgICAgPSBnZXRLZXlzKGl0KVxuICAgICwgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgaWYoZ2V0U3ltYm9scyl7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KVxuICAgICAgLCBpc0VudW0gID0gcElFLmZcbiAgICAgICwgaSAgICAgICA9IDBcbiAgICAgICwga2V5O1xuICAgIHdoaWxlKHN5bWJvbHMubGVuZ3RoID4gaSlpZihpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSlyZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZW51bS1rZXlzLmpzXG4vLyBtb2R1bGUgaWQgPSAxMDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGN0eCAgICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBjYWxsICAgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpXG4gICwgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJylcbiAgLCBhbk9iamVjdCAgICA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgdG9MZW5ndGggICAgPSByZXF1aXJlKCcuL190by1sZW5ndGgnKVxuICAsIGdldEl0ZXJGbiAgID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKVxuICAsIEJSRUFLICAgICAgID0ge31cbiAgLCBSRVRVUk4gICAgICA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1Ipe1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbigpeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpXG4gICAgLCBmICAgICAgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSlcbiAgICAsIGluZGV4ICA9IDBcbiAgICAsIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKXRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYoaXNBcnJheUl0ZXIoaXRlckZuKSlmb3IobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4Kyspe1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZihyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKXJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgKXtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZihyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKXJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLICA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mb3Itb2YuanNcbi8vIG1vZHVsZSBpZCA9IDEwN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZm4sIGFyZ3MsIHRoYXQpe1xuICB2YXIgdW4gPSB0aGF0ID09PSB1bmRlZmluZWQ7XG4gIHN3aXRjaChhcmdzLmxlbmd0aCl7XG4gICAgY2FzZSAwOiByZXR1cm4gdW4gPyBmbigpXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQpO1xuICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gIH0gcmV0dXJuICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pbnZva2UuanNcbi8vIG1vZHVsZSBpZCA9IDEwOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKXtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXkuanNcbi8vIG1vZHVsZSBpZCA9IDEwOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJylcbiAgLCBkZXNjcmlwdG9yICAgICA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKVxuICAsIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKVxuICAsIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19oaWRlJykoSXRlcmF0b3JQcm90b3R5cGUsIHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpLCBmdW5jdGlvbigpeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpe1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHtuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpfSk7XG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBOQU1FICsgJyBJdGVyYXRvcicpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzXG4vLyBtb2R1bGUgaWQgPSAxMTBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihkb25lLCB2YWx1ZSl7XG4gIHJldHVybiB7dmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmV9O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItc3RlcC5qc1xuLy8gbW9kdWxlIGlkID0gMTExXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBnZXRLZXlzICAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpXG4gICwgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmplY3QsIGVsKXtcbiAgdmFyIE8gICAgICA9IHRvSU9iamVjdChvYmplY3QpXG4gICAgLCBrZXlzICAgPSBnZXRLZXlzKE8pXG4gICAgLCBsZW5ndGggPSBrZXlzLmxlbmd0aFxuICAgICwgaW5kZXggID0gMFxuICAgICwga2V5O1xuICB3aGlsZShsZW5ndGggPiBpbmRleClpZihPW2tleSA9IGtleXNbaW5kZXgrK11dID09PSBlbClyZXR1cm4ga2V5O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2tleW9mLmpzXG4vLyBtb2R1bGUgaWQgPSAxMTJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIE1FVEEgICAgID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKVxuICAsIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0JylcbiAgLCBoYXMgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgc2V0RGVzYyAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mXG4gICwgaWQgICAgICAgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24oKXtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24oaXQpe1xuICBzZXREZXNjKGl0LCBNRVRBLCB7dmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9fSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbihpdCwgY3JlYXRlKXtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZighaXNPYmplY3QoaXQpKXJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmKCFoYXMoaXQsIE1FVEEpKXtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmKCFpc0V4dGVuc2libGUoaXQpKXJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZighY3JlYXRlKXJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24oaXQsIGNyZWF0ZSl7XG4gIGlmKCFoYXMoaXQsIE1FVEEpKXtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmKCFpc0V4dGVuc2libGUoaXQpKXJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYoIWNyZWF0ZSlyZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKXNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiAgICAgIE1FVEEsXG4gIE5FRUQ6ICAgICBmYWxzZSxcbiAgZmFzdEtleTogIGZhc3RLZXksXG4gIGdldFdlYWs6ICBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19tZXRhLmpzXG4vLyBtb2R1bGUgaWQgPSAxMTNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGdsb2JhbCAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldFxuICAsIE9ic2VydmVyICA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyXG4gICwgcHJvY2VzcyAgID0gZ2xvYmFsLnByb2Nlc3NcbiAgLCBQcm9taXNlICAgPSBnbG9iYWwuUHJvbWlzZVxuICAsIGlzTm9kZSAgICA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpe1xuICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uKCl7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZShoZWFkKXtcbiAgICAgIGZuICAgPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoKGUpe1xuICAgICAgICBpZihoZWFkKW5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmKHBhcmVudClwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmKGlzTm9kZSl7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlclxuICB9IGVsc2UgaWYoT2JzZXJ2ZXIpe1xuICAgIHZhciB0b2dnbGUgPSB0cnVlXG4gICAgICAsIG5vZGUgICA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwge2NoYXJhY3RlckRhdGE6IHRydWV9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBub3RpZnkgPSBmdW5jdGlvbigpe1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpe1xuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcbiAgICAgIHByb21pc2UudGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uKCl7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKGZuKXtcbiAgICB2YXIgdGFzayA9IHtmbjogZm4sIG5leHQ6IHVuZGVmaW5lZH07XG4gICAgaWYobGFzdClsYXN0Lm5leHQgPSB0YXNrO1xuICAgIGlmKCFoZWFkKXtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19taWNyb3Rhc2suanNcbi8vIG1vZHVsZSBpZCA9IDExNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgZ2V0S2V5cyAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpXG4gICwgZ09QUyAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpXG4gICwgcElFICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJylcbiAgLCB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpXG4gICwgSU9iamVjdCAgPSByZXF1aXJlKCcuL19pb2JqZWN0JylcbiAgLCAkYXNzaWduICA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uKCl7XG4gIHZhciBBID0ge31cbiAgICAsIEIgPSB7fVxuICAgICwgUyA9IFN5bWJvbCgpXG4gICAgLCBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24oayl7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSl7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgICAgID0gdG9PYmplY3QodGFyZ2V0KVxuICAgICwgYUxlbiAgPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBpbmRleCA9IDFcbiAgICAsIGdldFN5bWJvbHMgPSBnT1BTLmZcbiAgICAsIGlzRW51bSAgICAgPSBwSUUuZjtcbiAgd2hpbGUoYUxlbiA+IGluZGV4KXtcbiAgICB2YXIgUyAgICAgID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pXG4gICAgICAsIGtleXMgICA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUylcbiAgICAgICwgbGVuZ3RoID0ga2V5cy5sZW5ndGhcbiAgICAgICwgaiAgICAgID0gMFxuICAgICAgLCBrZXk7XG4gICAgd2hpbGUobGVuZ3RoID4gailpZihpc0VudW0uY2FsbChTLCBrZXkgPSBrZXlzW2orK10pKVRba2V5XSA9IFNba2V5XTtcbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qc1xuLy8gbW9kdWxlIGlkID0gMTE1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkUCAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpXG4gICwgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIGdldEtleXMgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpe1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgICA9IGdldEtleXMoUHJvcGVydGllcylcbiAgICAsIGxlbmd0aCA9IGtleXMubGVuZ3RoXG4gICAgLCBpID0gMFxuICAgICwgUDtcbiAgd2hpbGUobGVuZ3RoID4gaSlkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHBzLmpzXG4vLyBtb2R1bGUgaWQgPSAxMTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHBJRSAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpXG4gICwgY3JlYXRlRGVzYyAgICAgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJylcbiAgLCB0b0lPYmplY3QgICAgICA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIHRvUHJpbWl0aXZlICAgID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJylcbiAgLCBoYXMgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpXG4gICwgZ09QRCAgICAgICAgICAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKXtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZihJRThfRE9NX0RFRklORSl0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoKGUpeyAvKiBlbXB0eSAqLyB9XG4gIGlmKGhhcyhPLCBQKSlyZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanNcbi8vIG1vZHVsZSBpZCA9IDExN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpXG4gICwgZ09QTiAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mXG4gICwgdG9TdHJpbmcgID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbihpdCl7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGdPUE4oaXQpO1xuICB9IGNhdGNoKGUpe1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCl7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiB0b1N0cmluZy5jYWxsKGl0KSA9PSAnW29iamVjdCBXaW5kb3ddJyA/IGdldFdpbmRvd05hbWVzKGl0KSA6IGdPUE4odG9JT2JqZWN0KGl0KSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanNcbi8vIG1vZHVsZSBpZCA9IDExOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyAxOS4xLjIuOSAvIDE1LjIuMy4yIE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIGhhcyAgICAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCB0b09iamVjdCAgICA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpXG4gICwgSUVfUFJPVE8gICAgPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJylcbiAgLCBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uKE8pe1xuICBPID0gdG9PYmplY3QoTyk7XG4gIGlmKGhhcyhPLCBJRV9QUk9UTykpcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZih0eXBlb2YgTy5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIE8gaW5zdGFuY2VvZiBPLmNvbnN0cnVjdG9yKXtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdwby5qc1xuLy8gbW9kdWxlIGlkID0gMTE5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIGNvcmUgICAgPSByZXF1aXJlKCcuL19jb3JlJylcbiAgLCBmYWlscyAgID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oS0VZLCBleGVjKXtcbiAgdmFyIGZuICA9IChjb3JlLk9iamVjdCB8fCB7fSlbS0VZXSB8fCBPYmplY3RbS0VZXVxuICAgICwgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24oKXsgZm4oMSk7IH0pLCAnT2JqZWN0JywgZXhwKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qtc2FwLmpzXG4vLyBtb2R1bGUgaWQgPSAxMjBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHRhcmdldCwgc3JjLCBzYWZlKXtcbiAgZm9yKHZhciBrZXkgaW4gc3JjKXtcbiAgICBpZihzYWZlICYmIHRhcmdldFtrZXldKXRhcmdldFtrZXldID0gc3JjW2tleV07XG4gICAgZWxzZSBoaWRlKHRhcmdldCwga2V5LCBzcmNba2V5XSk7XG4gIH0gcmV0dXJuIHRhcmdldDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19yZWRlZmluZS1hbGwuanNcbi8vIG1vZHVsZSBpZCA9IDEyMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGNvcmUgICAgICAgID0gcmVxdWlyZSgnLi9fY29yZScpXG4gICwgZFAgICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKVxuICAsIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKVxuICAsIFNQRUNJRVMgICAgID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihLRVkpe1xuICB2YXIgQyA9IHR5cGVvZiBjb3JlW0tFWV0gPT0gJ2Z1bmN0aW9uJyA/IGNvcmVbS0VZXSA6IGdsb2JhbFtLRVldO1xuICBpZihERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKWRQLmYoQywgU1BFQ0lFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC1zcGVjaWVzLmpzXG4vLyBtb2R1bGUgaWQgPSAxMjJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJylcbiAgLCBTUEVDSUVTICAgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihPLCBEKXtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvciwgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBEIDogYUZ1bmN0aW9uKFMpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanNcbi8vIG1vZHVsZSBpZCA9IDEyM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpXG4gICwgZGVmaW5lZCAgID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuLy8gdHJ1ZSAgLT4gU3RyaW5nI2F0XG4vLyBmYWxzZSAtPiBTdHJpbmcjY29kZVBvaW50QXRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oVE9fU1RSSU5HKXtcbiAgcmV0dXJuIGZ1bmN0aW9uKHRoYXQsIHBvcyl7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSlcbiAgICAgICwgaSA9IHRvSW50ZWdlcihwb3MpXG4gICAgICAsIGwgPSBzLmxlbmd0aFxuICAgICAgLCBhLCBiO1xuICAgIGlmKGkgPCAwIHx8IGkgPj0gbClyZXR1cm4gVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgYSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICByZXR1cm4gYSA8IDB4ZDgwMCB8fCBhID4gMHhkYmZmIHx8IGkgKyAxID09PSBsIHx8IChiID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgYiA+IDB4ZGZmZlxuICAgICAgPyBUT19TVFJJTkcgPyBzLmNoYXJBdChpKSA6IGFcbiAgICAgIDogVE9fU1RSSU5HID8gcy5zbGljZShpLCBpICsgMikgOiAoYSAtIDB4ZDgwMCA8PCAxMCkgKyAoYiAtIDB4ZGMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3N0cmluZy1hdC5qc1xuLy8gbW9kdWxlIGlkID0gMTI0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJylcbiAgLCBtYXggICAgICAgPSBNYXRoLm1heFxuICAsIG1pbiAgICAgICA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpbmRleCwgbGVuZ3RoKXtcbiAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMTI1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgZ2V0ICAgICAgPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3IgPSBmdW5jdGlvbihpdCl7XG4gIHZhciBpdGVyRm4gPSBnZXQoaXQpO1xuICBpZih0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIHJldHVybiBhbk9iamVjdChpdGVyRm4uY2FsbChpdCkpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3IuanNcbi8vIG1vZHVsZSBpZCA9IDEyNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgY2xhc3NvZiAgID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpXG4gICwgSVRFUkFUT1IgID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJylcbiAgLCBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmlzSXRlcmFibGUgPSBmdW5jdGlvbihpdCl7XG4gIHZhciBPID0gT2JqZWN0KGl0KTtcbiAgcmV0dXJuIE9bSVRFUkFUT1JdICE9PSB1bmRlZmluZWRcbiAgICB8fCAnQEBpdGVyYXRvcicgaW4gT1xuICAgIHx8IEl0ZXJhdG9ycy5oYXNPd25Qcm9wZXJ0eShjbGFzc29mKE8pKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2NvcmUuaXMtaXRlcmFibGUuanNcbi8vIG1vZHVsZSBpZCA9IDEyN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG52YXIgY3R4ICAgICAgICAgICAgPSByZXF1aXJlKCcuL19jdHgnKVxuICAsICRleHBvcnQgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCB0b09iamVjdCAgICAgICA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpXG4gICwgY2FsbCAgICAgICAgICAgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKVxuICAsIGlzQXJyYXlJdGVyICAgID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpXG4gICwgdG9MZW5ndGggICAgICAgPSByZXF1aXJlKCcuL190by1sZW5ndGgnKVxuICAsIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5JylcbiAgLCBnZXRJdGVyRm4gICAgICA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24oaXRlcil7IEFycmF5LmZyb20oaXRlcik7IH0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4xIEFycmF5LmZyb20oYXJyYXlMaWtlLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UvKiwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQqLyl7XG4gICAgdmFyIE8gICAgICAgPSB0b09iamVjdChhcnJheUxpa2UpXG4gICAgICAsIEMgICAgICAgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5XG4gICAgICAsIGFMZW4gICAgPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgICAsIG1hcGZuICAgPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZFxuICAgICAgLCBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZFxuICAgICAgLCBpbmRleCAgID0gMFxuICAgICAgLCBpdGVyRm4gID0gZ2V0SXRlckZuKE8pXG4gICAgICAsIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZihtYXBwaW5nKW1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXIoaXRlckZuKSkpe1xuICAgICAgZm9yKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4Kyspe1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvcihyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKyl7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5LmZyb20uanNcbi8vIG1vZHVsZSBpZCA9IDEyOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpXG4gICwgc3RlcCAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpXG4gICwgSXRlcmF0b3JzICAgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpXG4gICwgdG9JT2JqZWN0ICAgICAgICA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbihpdGVyYXRlZCwga2luZCl7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24oKXtcbiAgdmFyIE8gICAgID0gdGhpcy5fdFxuICAgICwga2luZCAgPSB0aGlzLl9rXG4gICAgLCBpbmRleCA9IHRoaXMuX2krKztcbiAgaWYoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpe1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYoa2luZCA9PSAna2V5cycgIClyZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmKGtpbmQgPT0gJ3ZhbHVlcycpcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanNcbi8vIG1vZHVsZSBpZCA9IDEyOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyAyMC4yLjIuMjIgTWF0aC5sb2cyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCl7XG4gICAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYubWF0aC5sb2cyLmpzXG4vLyBtb2R1bGUgaWQgPSAxMzBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0Jywge2Fzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpfSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzXG4vLyBtb2R1bGUgaWQgPSAxMzFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKVxuICAsICRrZXlzICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24oKXtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpe1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qc1xuLy8gbW9kdWxlIGlkID0gMTMyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZICAgICAgICAgICAgPSByZXF1aXJlKCcuL19saWJyYXJ5JylcbiAgLCBnbG9iYWwgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGN0eCAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2N0eCcpXG4gICwgY2xhc3NvZiAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpXG4gICwgJGV4cG9ydCAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCBpc09iamVjdCAgICAgICAgICAgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIGFGdW5jdGlvbiAgICAgICAgICA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKVxuICAsIGFuSW5zdGFuY2UgICAgICAgICA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJylcbiAgLCBmb3JPZiAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19mb3Itb2YnKVxuICAsIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKVxuICAsIHRhc2sgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXRcbiAgLCBtaWNyb3Rhc2sgICAgICAgICAgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpXG4gICwgUFJPTUlTRSAgICAgICAgICAgID0gJ1Byb21pc2UnXG4gICwgVHlwZUVycm9yICAgICAgICAgID0gZ2xvYmFsLlR5cGVFcnJvclxuICAsIHByb2Nlc3MgICAgICAgICAgICA9IGdsb2JhbC5wcm9jZXNzXG4gICwgJFByb21pc2UgICAgICAgICAgID0gZ2xvYmFsW1BST01JU0VdXG4gICwgcHJvY2VzcyAgICAgICAgICAgID0gZ2xvYmFsLnByb2Nlc3NcbiAgLCBpc05vZGUgICAgICAgICAgICAgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJ1xuICAsIGVtcHR5ICAgICAgICAgICAgICA9IGZ1bmN0aW9uKCl7IC8qIGVtcHR5ICovIH1cbiAgLCBJbnRlcm5hbCwgR2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBXcmFwcGVyO1xuXG52YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24oKXtcbiAgdHJ5IHtcbiAgICAvLyBjb3JyZWN0IHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgICB2YXIgcHJvbWlzZSAgICAgPSAkUHJvbWlzZS5yZXNvbHZlKDEpXG4gICAgICAsIEZha2VQcm9taXNlID0gKHByb21pc2UuY29uc3RydWN0b3IgPSB7fSlbcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKV0gPSBmdW5jdGlvbihleGVjKXsgZXhlYyhlbXB0eSwgZW1wdHkpOyB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpICYmIHByb21pc2UudGhlbihlbXB0eSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZTtcbiAgfSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxufSgpO1xuXG4vLyBoZWxwZXJzXG52YXIgc2FtZUNvbnN0cnVjdG9yID0gZnVuY3Rpb24oYSwgYil7XG4gIC8vIHdpdGggbGlicmFyeSB3cmFwcGVyIHNwZWNpYWwgY2FzZVxuICByZXR1cm4gYSA9PT0gYiB8fCBhID09PSAkUHJvbWlzZSAmJiBiID09PSBXcmFwcGVyO1xufTtcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24oaXQpe1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xufTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uKEMpe1xuICByZXR1cm4gc2FtZUNvbnN0cnVjdG9yKCRQcm9taXNlLCBDKVxuICAgID8gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgOiBuZXcgR2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IEdlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uKEMpe1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbigkJHJlc29sdmUsICQkcmVqZWN0KXtcbiAgICBpZihyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ICA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCAgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn07XG52YXIgcGVyZm9ybSA9IGZ1bmN0aW9uKGV4ZWMpe1xuICB0cnkge1xuICAgIGV4ZWMoKTtcbiAgfSBjYXRjaChlKXtcbiAgICByZXR1cm4ge2Vycm9yOiBlfTtcbiAgfVxufTtcbnZhciBub3RpZnkgPSBmdW5jdGlvbihwcm9taXNlLCBpc1JlamVjdCl7XG4gIGlmKHByb21pc2UuX24pcmV0dXJuO1xuICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgbWljcm90YXNrKGZ1bmN0aW9uKCl7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdlxuICAgICAgLCBvayAgICA9IHByb21pc2UuX3MgPT0gMVxuICAgICAgLCBpICAgICA9IDA7XG4gICAgdmFyIHJ1biA9IGZ1bmN0aW9uKHJlYWN0aW9uKXtcbiAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWxcbiAgICAgICAgLCByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZVxuICAgICAgICAsIHJlamVjdCAgPSByZWFjdGlvbi5yZWplY3RcbiAgICAgICAgLCBkb21haW4gID0gcmVhY3Rpb24uZG9tYWluXG4gICAgICAgICwgcmVzdWx0LCB0aGVuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYoaGFuZGxlcil7XG4gICAgICAgICAgaWYoIW9rKXtcbiAgICAgICAgICAgIGlmKHByb21pc2UuX2ggPT0gMilvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihoYW5kbGVyID09PSB0cnVlKXJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYoZG9tYWluKWRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7XG4gICAgICAgICAgICBpZihkb21haW4pZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKXtcbiAgICAgICAgICAgIHJlamVjdChUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICAgICAgfSBlbHNlIGlmKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpe1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdoaWxlKGNoYWluLmxlbmd0aCA+IGkpcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYoaXNSZWplY3QgJiYgIXByb21pc2UuX2gpb25VbmhhbmRsZWQocHJvbWlzZSk7XG4gIH0pO1xufTtcbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uKHByb21pc2Upe1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbigpe1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3ZcbiAgICAgICwgYWJydXB0LCBoYW5kbGVyLCBjb25zb2xlO1xuICAgIGlmKGlzVW5oYW5kbGVkKHByb21pc2UpKXtcbiAgICAgIGFicnVwdCA9IHBlcmZvcm0oZnVuY3Rpb24oKXtcbiAgICAgICAgaWYoaXNOb2RlKXtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmKGhhbmRsZXIgPSBnbG9iYWwub251bmhhbmRsZWRyZWplY3Rpb24pe1xuICAgICAgICAgIGhhbmRsZXIoe3Byb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWV9KTtcbiAgICAgICAgfSBlbHNlIGlmKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3Ipe1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZihhYnJ1cHQpdGhyb3cgYWJydXB0LmVycm9yO1xuICB9KTtcbn07XG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbihwcm9taXNlKXtcbiAgaWYocHJvbWlzZS5faCA9PSAxKXJldHVybiBmYWxzZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYSB8fCBwcm9taXNlLl9jXG4gICAgLCBpICAgICA9IDBcbiAgICAsIHJlYWN0aW9uO1xuICB3aGlsZShjaGFpbi5sZW5ndGggPiBpKXtcbiAgICByZWFjdGlvbiA9IGNoYWluW2krK107XG4gICAgaWYocmVhY3Rpb24uZmFpbCB8fCAhaXNVbmhhbmRsZWQocmVhY3Rpb24ucHJvbWlzZSkpcmV0dXJuIGZhbHNlO1xuICB9IHJldHVybiB0cnVlO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uKHByb21pc2Upe1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbigpe1xuICAgIHZhciBoYW5kbGVyO1xuICAgIGlmKGlzTm9kZSl7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYoaGFuZGxlciA9IGdsb2JhbC5vbnJlamVjdGlvbmhhbmRsZWQpe1xuICAgICAgaGFuZGxlcih7cHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92fSk7XG4gICAgfVxuICB9KTtcbn07XG52YXIgJHJlamVjdCA9IGZ1bmN0aW9uKHZhbHVlKXtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZihwcm9taXNlLl9kKXJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICBwcm9taXNlLl92ID0gdmFsdWU7XG4gIHByb21pc2UuX3MgPSAyO1xuICBpZighcHJvbWlzZS5fYSlwcm9taXNlLl9hID0gcHJvbWlzZS5fYy5zbGljZSgpO1xuICBub3RpZnkocHJvbWlzZSwgdHJ1ZSk7XG59O1xudmFyICRyZXNvbHZlID0gZnVuY3Rpb24odmFsdWUpe1xuICB2YXIgcHJvbWlzZSA9IHRoaXNcbiAgICAsIHRoZW47XG4gIGlmKHByb21pc2UuX2QpcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYocHJvbWlzZSA9PT0gdmFsdWUpdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgaWYodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKXtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbigpe1xuICAgICAgICB2YXIgd3JhcHBlciA9IHtfdzogcHJvbWlzZSwgX2Q6IGZhbHNlfTsgLy8gd3JhcFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgY3R4KCRyZXNvbHZlLCB3cmFwcGVyLCAxKSwgY3R4KCRyZWplY3QsIHdyYXBwZXIsIDEpKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAkcmVqZWN0LmNhbGwod3JhcHBlciwgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9taXNlLl92ID0gdmFsdWU7XG4gICAgICBwcm9taXNlLl9zID0gMTtcbiAgICAgIG5vdGlmeShwcm9taXNlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoKGUpe1xuICAgICRyZWplY3QuY2FsbCh7X3c6IHByb21pc2UsIF9kOiBmYWxzZX0sIGUpOyAvLyB3cmFwXG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZighVVNFX05BVElWRSl7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gICRQcm9taXNlID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcil7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkUHJvbWlzZSwgUFJPTUlTRSwgJ19oJyk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHRoaXMsIDEpLCBjdHgoJHJlamVjdCwgdGhpcywgMSkpO1xuICAgIH0gY2F0Y2goZXJyKXtcbiAgICAgICRyZWplY3QuY2FsbCh0aGlzLCBlcnIpO1xuICAgIH1cbiAgfTtcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKXtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpe1xuICAgICAgdmFyIHJlYWN0aW9uICAgID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRQcm9taXNlKSk7XG4gICAgICByZWFjdGlvbi5vayAgICAgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgICA9IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgJiYgb25SZWplY3RlZDtcbiAgICAgIHJlYWN0aW9uLmRvbWFpbiA9IGlzTm9kZSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fYy5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmKHRoaXMuX2EpdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmKHRoaXMuX3Mpbm90aWZ5KHRoaXMsIGZhbHNlKTtcbiAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICAgIH0sXG4gICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbihvblJlamVjdGVkKXtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xuICBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uKCl7XG4gICAgdmFyIHByb21pc2UgID0gbmV3IEludGVybmFsO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gY3R4KCRyZXNvbHZlLCBwcm9taXNlLCAxKTtcbiAgICB0aGlzLnJlamVjdCAgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHtQcm9taXNlOiAkUHJvbWlzZX0pO1xucmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKSgkUHJvbWlzZSwgUFJPTUlTRSk7XG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKFBST01JU0UpO1xuV3JhcHBlciA9IHJlcXVpcmUoJy4vX2NvcmUnKVtQUk9NSVNFXTtcblxuLy8gc3RhdGljc1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNSBQcm9taXNlLnJlamVjdChyKVxuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKXtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpXG4gICAgICAsICQkcmVqZWN0ICAgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICAkJHJlamVjdChyKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKExJQlJBUlkgfHwgIVVTRV9OQVRJVkUpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC42IFByb21pc2UucmVzb2x2ZSh4KVxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpe1xuICAgIC8vIGluc3RhbmNlb2YgaW5zdGVhZCBvZiBpbnRlcm5hbCBzbG90IGNoZWNrIGJlY2F1c2Ugd2Ugc2hvdWxkIGZpeCBpdCB3aXRob3V0IHJlcGxhY2VtZW50IG5hdGl2ZSBQcm9taXNlIGNvcmVcbiAgICBpZih4IGluc3RhbmNlb2YgJFByb21pc2UgJiYgc2FtZUNvbnN0cnVjdG9yKHguY29uc3RydWN0b3IsIHRoaXMpKXJldHVybiB4O1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcylcbiAgICAgICwgJCRyZXNvbHZlICA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICAkJHJlc29sdmUoeCk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoVVNFX05BVElWRSAmJiByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uKGl0ZXIpe1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSl7XG4gICAgdmFyIEMgICAgICAgICAgPSB0aGlzXG4gICAgICAsIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgLCByZXNvbHZlICAgID0gY2FwYWJpbGl0eS5yZXNvbHZlXG4gICAgICAsIHJlamVjdCAgICAgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgYWJydXB0ID0gcGVyZm9ybShmdW5jdGlvbigpe1xuICAgICAgdmFyIHZhbHVlcyAgICA9IFtdXG4gICAgICAgICwgaW5kZXggICAgID0gMFxuICAgICAgICAsIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uKHByb21pc2Upe1xuICAgICAgICB2YXIgJGluZGV4ICAgICAgICA9IGluZGV4KytcbiAgICAgICAgICAsIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgICAgICBpZihhbHJlYWR5Q2FsbGVkKXJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkICA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZihhYnJ1cHQpcmVqZWN0KGFicnVwdC5lcnJvcik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKXtcbiAgICB2YXIgQyAgICAgICAgICA9IHRoaXNcbiAgICAgICwgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICAsIHJlamVjdCAgICAgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgYWJydXB0ID0gcGVyZm9ybShmdW5jdGlvbigpe1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbihwcm9taXNlKXtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYoYWJydXB0KXJlamVjdChhYnJ1cHQuZXJyb3IpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYucHJvbWlzZS5qc1xuLy8gbW9kdWxlIGlkID0gMTMzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgICAgICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgaGFzICAgICAgICAgICAgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIERFU0NSSVBUT1JTICAgID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKVxuICAsICRleHBvcnQgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCByZWRlZmluZSAgICAgICA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJylcbiAgLCBNRVRBICAgICAgICAgICA9IHJlcXVpcmUoJy4vX21ldGEnKS5LRVlcbiAgLCAkZmFpbHMgICAgICAgICA9IHJlcXVpcmUoJy4vX2ZhaWxzJylcbiAgLCBzaGFyZWQgICAgICAgICA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpXG4gICwgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpXG4gICwgdWlkICAgICAgICAgICAgPSByZXF1aXJlKCcuL191aWQnKVxuICAsIHdrcyAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fd2tzJylcbiAgLCB3a3NFeHQgICAgICAgICA9IHJlcXVpcmUoJy4vX3drcy1leHQnKVxuICAsIHdrc0RlZmluZSAgICAgID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpXG4gICwga2V5T2YgICAgICAgICAgPSByZXF1aXJlKCcuL19rZXlvZicpXG4gICwgZW51bUtleXMgICAgICAgPSByZXF1aXJlKCcuL19lbnVtLWtleXMnKVxuICAsIGlzQXJyYXkgICAgICAgID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKVxuICAsIGFuT2JqZWN0ICAgICAgID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCB0b0lPYmplY3QgICAgICA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIHRvUHJpbWl0aXZlICAgID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJylcbiAgLCBjcmVhdGVEZXNjICAgICA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKVxuICAsIF9jcmVhdGUgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpXG4gICwgZ09QTkV4dCAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKVxuICAsICRHT1BEICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKVxuICAsICREUCAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJylcbiAgLCAka2V5cyAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJylcbiAgLCBnT1BEICAgICAgICAgICA9ICRHT1BELmZcbiAgLCBkUCAgICAgICAgICAgICA9ICREUC5mXG4gICwgZ09QTiAgICAgICAgICAgPSBnT1BORXh0LmZcbiAgLCAkU3ltYm9sICAgICAgICA9IGdsb2JhbC5TeW1ib2xcbiAgLCAkSlNPTiAgICAgICAgICA9IGdsb2JhbC5KU09OXG4gICwgX3N0cmluZ2lmeSAgICAgPSAkSlNPTiAmJiAkSlNPTi5zdHJpbmdpZnlcbiAgLCBQUk9UT1RZUEUgICAgICA9ICdwcm90b3R5cGUnXG4gICwgSElEREVOICAgICAgICAgPSB3a3MoJ19oaWRkZW4nKVxuICAsIFRPX1BSSU1JVElWRSAgID0gd2tzKCd0b1ByaW1pdGl2ZScpXG4gICwgaXNFbnVtICAgICAgICAgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZVxuICAsIFN5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtcmVnaXN0cnknKVxuICAsIEFsbFN5bWJvbHMgICAgID0gc2hhcmVkKCdzeW1ib2xzJylcbiAgLCBPUFN5bWJvbHMgICAgICA9IHNoYXJlZCgnb3Atc3ltYm9scycpXG4gICwgT2JqZWN0UHJvdG8gICAgPSBPYmplY3RbUFJPVE9UWVBFXVxuICAsIFVTRV9OQVRJVkUgICAgID0gdHlwZW9mICRTeW1ib2wgPT0gJ2Z1bmN0aW9uJ1xuICAsIFFPYmplY3QgICAgICAgID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBfY3JlYXRlKGRQKHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiBkUCh0aGlzLCAnYScsIHt2YWx1ZTogN30pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24oaXQsIGtleSwgRCl7XG4gIHZhciBwcm90b0Rlc2MgPSBnT1BEKE9iamVjdFByb3RvLCBrZXkpO1xuICBpZihwcm90b0Rlc2MpZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZihwcm90b0Rlc2MgJiYgaXQgIT09IE9iamVjdFByb3RvKWRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24odGFnKXtcbiAgdmFyIHN5bSA9IEFsbFN5bWJvbHNbdGFnXSA9IF9jcmVhdGUoJFN5bWJvbFtQUk9UT1RZUEVdKTtcbiAgc3ltLl9rID0gdGFnO1xuICByZXR1cm4gc3ltO1xufTtcblxudmFyIGlzU3ltYm9sID0gVVNFX05BVElWRSAmJiB0eXBlb2YgJFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJyA/IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCl7XG4gIGlmKGl0ID09PSBPYmplY3RQcm90bykkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZihoYXMoQWxsU3ltYm9scywga2V5KSl7XG4gICAgaWYoIUQuZW51bWVyYWJsZSl7XG4gICAgICBpZighaGFzKGl0LCBISURERU4pKWRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0paXRbSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBEID0gX2NyZWF0ZShELCB7ZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSl9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKXtcbiAgYW5PYmplY3QoaXQpO1xuICB2YXIga2V5cyA9IGVudW1LZXlzKFAgPSB0b0lPYmplY3QoUCkpXG4gICAgLCBpICAgID0gMFxuICAgICwgbCA9IGtleXMubGVuZ3RoXG4gICAgLCBrZXk7XG4gIHdoaWxlKGwgPiBpKSRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApe1xuICByZXR1cm4gUCA9PT0gdW5kZWZpbmVkID8gX2NyZWF0ZShpdCkgOiAkZGVmaW5lUHJvcGVydGllcyhfY3JlYXRlKGl0KSwgUCk7XG59O1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKGtleSl7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKXJldHVybiBmYWxzZTtcbiAgcmV0dXJuIEUgfHwgIWhhcyh0aGlzLCBrZXkpIHx8ICFoYXMoQWxsU3ltYm9scywga2V5KSB8fCBoYXModGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1ba2V5XSA/IEUgOiB0cnVlO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpe1xuICBpdCAgPSB0b0lPYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBpZihpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmKEQgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSlELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KXtcbiAgdmFyIG5hbWVzICA9IGdPUE4odG9JT2JqZWN0KGl0KSlcbiAgICAsIHJlc3VsdCA9IFtdXG4gICAgLCBpICAgICAgPSAwXG4gICAgLCBrZXk7XG4gIHdoaWxlKG5hbWVzLmxlbmd0aCA+IGkpe1xuICAgIGlmKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSlyZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpe1xuICB2YXIgSVNfT1AgID0gaXQgPT09IE9iamVjdFByb3RvXG4gICAgLCBuYW1lcyAgPSBnT1BOKElTX09QID8gT1BTeW1ib2xzIDogdG9JT2JqZWN0KGl0KSlcbiAgICAsIHJlc3VsdCA9IFtdXG4gICAgLCBpICAgICAgPSAwXG4gICAgLCBrZXk7XG4gIHdoaWxlKG5hbWVzLmxlbmd0aCA+IGkpe1xuICAgIGlmKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSlyZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmKCFVU0VfTkFUSVZFKXtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpe1xuICAgIGlmKHRoaXMgaW5zdGFuY2VvZiAkU3ltYm9sKXRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24odmFsdWUpe1xuICAgICAgaWYodGhpcyA9PT0gT2JqZWN0UHJvdG8pJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYoaGFzKHRoaXMsIEhJRERFTikgJiYgaGFzKHRoaXNbSElEREVOXSwgdGFnKSl0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmKERFU0NSSVBUT1JTICYmIHNldHRlcilzZXRTeW1ib2xEZXNjKE9iamVjdFByb3RvLCB0YWcsIHtjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKXtcbiAgICByZXR1cm4gdGhpcy5faztcbiAgfSk7XG5cbiAgJEdPUEQuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gICREUC5mICAgPSAkZGVmaW5lUHJvcGVydHk7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZiAgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJykuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSl7XG4gICAgcmVkZWZpbmUoT2JqZWN0UHJvdG8sICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgdHJ1ZSk7XG4gIH1cblxuICB3a3NFeHQuZiA9IGZ1bmN0aW9uKG5hbWUpe1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH1cbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwge1N5bWJvbDogJFN5bWJvbH0pO1xuXG5mb3IodmFyIHN5bWJvbHMgPSAoXG4gIC8vIDE5LjQuMi4yLCAxOS40LjIuMywgMTkuNC4yLjQsIDE5LjQuMi42LCAxOS40LjIuOCwgMTkuNC4yLjksIDE5LjQuMi4xMCwgMTkuNC4yLjExLCAxOS40LjIuMTIsIDE5LjQuMi4xMywgMTkuNC4yLjE0XG4gICdoYXNJbnN0YW5jZSxpc0NvbmNhdFNwcmVhZGFibGUsaXRlcmF0b3IsbWF0Y2gscmVwbGFjZSxzZWFyY2gsc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlcydcbikuc3BsaXQoJywnKSwgaSA9IDA7IHN5bWJvbHMubGVuZ3RoID4gaTsgKXdrcyhzeW1ib2xzW2krK10pO1xuXG5mb3IodmFyIHN5bWJvbHMgPSAka2V5cyh3a3Muc3RvcmUpLCBpID0gMDsgc3ltYm9scy5sZW5ndGggPiBpOyApd2tzRGVmaW5lKHN5bWJvbHNbaSsrXSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdTeW1ib2wnLCB7XG4gIC8vIDE5LjQuMi4xIFN5bWJvbC5mb3Ioa2V5KVxuICAnZm9yJzogZnVuY3Rpb24oa2V5KXtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKGtleSl7XG4gICAgaWYoaXNTeW1ib2woa2V5KSlyZXR1cm4ga2V5T2YoU3ltYm9sUmVnaXN0cnksIGtleSk7XG4gICAgdGhyb3cgVHlwZUVycm9yKGtleSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICB9LFxuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uKCl7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24oKXsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gMjQuMy4yIEpTT04uc3RyaW5naWZ5KHZhbHVlIFssIHJlcGxhY2VyIFssIHNwYWNlXV0pXG4kSlNPTiAmJiAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghVVNFX05BVElWRSB8fCAkZmFpbHMoZnVuY3Rpb24oKXtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoe2E6IFN9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpe1xuICAgIGlmKGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKXJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIHZhciBhcmdzID0gW2l0XVxuICAgICAgLCBpICAgID0gMVxuICAgICAgLCByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlKGFyZ3VtZW50cy5sZW5ndGggPiBpKWFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgcmVwbGFjZXIgPSBhcmdzWzFdO1xuICAgIGlmKHR5cGVvZiByZXBsYWNlciA9PSAnZnVuY3Rpb24nKSRyZXBsYWNlciA9IHJlcGxhY2VyO1xuICAgIGlmKCRyZXBsYWNlciB8fCAhaXNBcnJheShyZXBsYWNlcikpcmVwbGFjZXIgPSBmdW5jdGlvbihrZXksIHZhbHVlKXtcbiAgICAgIGlmKCRyZXBsYWNlcil2YWx1ZSA9ICRyZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgaWYoIWlzU3ltYm9sKHZhbHVlKSlyZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3ltYm9sLmpzXG4vLyBtb2R1bGUgaWQgPSAxMzRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdhc3luY0l0ZXJhdG9yJyk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanNcbi8vIG1vZHVsZSBpZCA9IDEzNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ29ic2VydmFibGUnKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlLmpzXG4vLyBtb2R1bGUgaWQgPSAxMzZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAyLjMuMVxuLy8gIyBDU1YgUGFyc2VyXG5cbi8vIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgQ1NWIHBhcnNlciB0ZXN0ZWQgYW5kIHVzZWQgYWdhaW5zdCBsYXJnZSBkYXRhc2V0cy4gT3ZlclxuLy8gdGhlIHllYXIsIGl0IGhhcyBiZWVuIGVuaGFuY2UgYW5kIGlzIG5vdyBmdWxsIG9mIHVzZWZ1bCBvcHRpb25zLlxuXG4vLyBQbGVhc2UgbG9vayBhdCB0aGUgW1JFQURNRV0sIHRoZSBbcHJvamVjdCB3ZWJzaXRlXVtzaXRlXSB0aGUgW3NhbXBsZXNdIGFuZCB0aGVcbi8vIFt0ZXN0c10gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uXG52YXIgUGFyc2VyLCBTdHJpbmdEZWNvZGVyLCBpc09iakxpdGVyYWwsIHN0cmVhbSwgdXRpbDtcblxuc3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG5cbnV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cblN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpLlN0cmluZ0RlY29kZXI7XG5cbi8vICMjIFVzYWdlXG5cbi8vIENhbGxiYWNrIGFwcHJvYWNoLCBmb3IgZWFzZSBvZiB1c2U6ICAgXG5cbi8vIGBwYXJzZShkYXRhLCBbb3B0aW9uc10sIGNhbGxiYWNrKWAgICAgIFxuXG4vLyBbTm9kZS5qcyBTdHJlYW0gQVBJXVtzdHJlYW1dLCBmb3IgbWF4aW11bSBvZiBwb3dlcjogICBcblxuLy8gYHBhcnNlKFtvcHRpb25zXSwgW2NhbGxiYWNrXSlgICAgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgY2FsbGJhY2ssIGNhbGxlZCwgY2h1bmtzLCBkYXRhLCBlcnIsIG9wdGlvbnMsIHBhcnNlcjtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBkYXRhID0gYXJndW1lbnRzWzBdO1xuICAgIG9wdGlvbnMgPSBhcmd1bWVudHNbMV07XG4gICAgY2FsbGJhY2sgPSBhcmd1bWVudHNbMl07XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgY2FsbGJhY2sgYXJndW1lbnQ6ICR7SlNPTi5zdHJpbmdpZnkoY2FsbGJhY2spfWApO1xuICAgIH1cbiAgICBpZiAoISh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgfHwgQnVmZmVyLmlzQnVmZmVyKGFyZ3VtZW50c1swXSkpKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soRXJyb3IoYEludmFsaWQgZGF0YSBhcmd1bWVudDogJHtKU09OLnN0cmluZ2lmeShkYXRhKX1gKSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAvLyAxc3QgYXJnIGlzIGRhdGE6c3RyaW5nIG9yIG9wdGlvbnM6b2JqZWN0XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdzdHJpbmcnIHx8IEJ1ZmZlci5pc0J1ZmZlcihhcmd1bWVudHNbMF0pKSB7XG4gICAgICBkYXRhID0gYXJndW1lbnRzWzBdO1xuICAgIH0gZWxzZSBpZiAoaXNPYmpMaXRlcmFsKGFyZ3VtZW50c1swXSkpIHtcbiAgICAgIG9wdGlvbnMgPSBhcmd1bWVudHNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGVyciA9IGBJbnZhbGlkIGZpcnN0IGFyZ3VtZW50OiAke0pTT04uc3RyaW5naWZ5KGFyZ3VtZW50c1swXSl9YDtcbiAgICB9XG4gICAgLy8gMm5kIGFyZyBpcyBvcHRpb25zOm9iamVjdCBvciBjYWxsYmFjazpmdW5jdGlvblxuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcbiAgICB9IGVsc2UgaWYgKGlzT2JqTGl0ZXJhbChhcmd1bWVudHNbMV0pKSB7XG4gICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBlcnIgPSAnSW52YWxpZCBhcmd1bWVudHM6IGdvdCBvcHRpb25zIHR3aWNlIGFzIGZpcnN0IGFuZCBzZWNvbmQgYXJndW1lbnRzJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMgPSBhcmd1bWVudHNbMV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVyciA9IGBJbnZhbGlkIGZpcnN0IGFyZ3VtZW50OiAke0pTT04uc3RyaW5naWZ5KGFyZ3VtZW50c1sxXSl9YDtcbiAgICB9XG4gICAgaWYgKGVycikge1xuICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICB0aHJvdyBFcnJvcihlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKEVycm9yKGVycikpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNhbGxiYWNrID0gYXJndW1lbnRzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zID0gYXJndW1lbnRzWzBdO1xuICAgIH1cbiAgfVxuICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHBhcnNlciA9IG5ldyBQYXJzZXIob3B0aW9ucyk7XG4gIGlmIChkYXRhICE9IG51bGwpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgcGFyc2VyLndyaXRlKGRhdGEpO1xuICAgICAgcmV0dXJuIHBhcnNlci5lbmQoKTtcbiAgICB9KTtcbiAgfVxuICBpZiAoY2FsbGJhY2spIHtcbiAgICBjYWxsZWQgPSBmYWxzZTtcbiAgICBjaHVua3MgPSBvcHRpb25zLm9iam5hbWUgPyB7fSA6IFtdO1xuICAgIHBhcnNlci5vbigncmVhZGFibGUnLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBjaHVuaywgcmVzdWx0cztcbiAgICAgIHJlc3VsdHMgPSBbXTtcbiAgICAgIHdoaWxlIChjaHVuayA9IHBhcnNlci5yZWFkKCkpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMub2JqbmFtZSkge1xuICAgICAgICAgIHJlc3VsdHMucHVzaChjaHVua3NbY2h1bmtbMF1dID0gY2h1bmtbMV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdHMucHVzaChjaHVua3MucHVzaChjaHVuaykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9KTtcbiAgICBwYXJzZXIub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgfSk7XG4gICAgcGFyc2VyLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBjaHVua3MpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBwYXJzZXI7XG59O1xuXG4vLyAjIyBgUGFyc2VyKFtvcHRpb25zXSlgXG5cbi8vIE9wdGlvbnMgYXJlIGRvY3VtZW50ZWQgW2hlcmVdKGh0dHA6Ly9jc3YuYWRhbHRhcy5jb20vcGFyc2UvKS5cblBhcnNlciA9IGZ1bmN0aW9uKG9wdGlvbnMgPSB7fSkge1xuICB2YXIgYmFzZSwgYmFzZTEsIGJhc2UxMCwgYmFzZTExLCBiYXNlMTIsIGJhc2UxMywgYmFzZTE0LCBiYXNlMTUsIGJhc2UxNiwgYmFzZTE3LCBiYXNlMiwgYmFzZTMsIGJhc2U0LCBiYXNlNSwgYmFzZTYsIGJhc2U3LCBiYXNlOCwgYmFzZTksIGssIHY7XG4gIC8vIEBvcHRpb25zID0gb3B0aW9uc1xuICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgZm9yIChrIGluIG9wdGlvbnMpIHtcbiAgICB2ID0gb3B0aW9uc1trXTtcbiAgICB0aGlzLm9wdGlvbnNba10gPSB2O1xuICB9XG4gIHRoaXMub3B0aW9ucy5vYmplY3RNb2RlID0gdHJ1ZTtcbiAgc3RyZWFtLlRyYW5zZm9ybS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucyk7XG4gIGlmICgoYmFzZSA9IHRoaXMub3B0aW9ucykucm93RGVsaW1pdGVyID09IG51bGwpIHtcbiAgICBiYXNlLnJvd0RlbGltaXRlciA9IG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMucm93RGVsaW1pdGVyID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMub3B0aW9ucy5yb3dEZWxpbWl0ZXIgPSBbdGhpcy5vcHRpb25zLnJvd0RlbGltaXRlcl07XG4gIH1cbiAgaWYgKChiYXNlMSA9IHRoaXMub3B0aW9ucykuZGVsaW1pdGVyID09IG51bGwpIHtcbiAgICBiYXNlMS5kZWxpbWl0ZXIgPSAnLCc7XG4gIH1cbiAgaWYgKHRoaXMub3B0aW9ucy5xdW90ZSAhPT0gdm9pZCAwICYmICF0aGlzLm9wdGlvbnMucXVvdGUpIHtcbiAgICB0aGlzLm9wdGlvbnMucXVvdGUgPSAnJztcbiAgfVxuICBpZiAoKGJhc2UyID0gdGhpcy5vcHRpb25zKS5xdW90ZSA9PSBudWxsKSB7XG4gICAgYmFzZTIucXVvdGUgPSAnXCInO1xuICB9XG4gIGlmICgoYmFzZTMgPSB0aGlzLm9wdGlvbnMpLmVzY2FwZSA9PSBudWxsKSB7XG4gICAgYmFzZTMuZXNjYXBlID0gJ1wiJztcbiAgfVxuICBpZiAoKGJhc2U0ID0gdGhpcy5vcHRpb25zKS5jb2x1bW5zID09IG51bGwpIHtcbiAgICBiYXNlNC5jb2x1bW5zID0gbnVsbDtcbiAgfVxuICBpZiAoKGJhc2U1ID0gdGhpcy5vcHRpb25zKS5jb21tZW50ID09IG51bGwpIHtcbiAgICBiYXNlNS5jb21tZW50ID0gJyc7XG4gIH1cbiAgaWYgKChiYXNlNiA9IHRoaXMub3B0aW9ucykub2JqbmFtZSA9PSBudWxsKSB7XG4gICAgYmFzZTYub2JqbmFtZSA9IGZhbHNlO1xuICB9XG4gIGlmICgoYmFzZTcgPSB0aGlzLm9wdGlvbnMpLnRyaW0gPT0gbnVsbCkge1xuICAgIGJhc2U3LnRyaW0gPSBmYWxzZTtcbiAgfVxuICBpZiAoKGJhc2U4ID0gdGhpcy5vcHRpb25zKS5sdHJpbSA9PSBudWxsKSB7XG4gICAgYmFzZTgubHRyaW0gPSBmYWxzZTtcbiAgfVxuICBpZiAoKGJhc2U5ID0gdGhpcy5vcHRpb25zKS5ydHJpbSA9PSBudWxsKSB7XG4gICAgYmFzZTkucnRyaW0gPSBmYWxzZTtcbiAgfVxuICBpZiAodGhpcy5vcHRpb25zLmF1dG9fcGFyc2UgIT0gbnVsbCkge1xuICAgIHRoaXMub3B0aW9ucy5jYXN0ID0gdGhpcy5vcHRpb25zLmF1dG9fcGFyc2U7XG4gIH1cbiAgaWYgKChiYXNlMTAgPSB0aGlzLm9wdGlvbnMpLmNhc3QgPT0gbnVsbCkge1xuICAgIGJhc2UxMC5jYXN0ID0gZmFsc2U7XG4gIH1cbiAgaWYgKHRoaXMub3B0aW9ucy5hdXRvX3BhcnNlX2RhdGUgIT0gbnVsbCkge1xuICAgIHRoaXMub3B0aW9ucy5jYXN0X2RhdGUgPSB0aGlzLm9wdGlvbnMuYXV0b19wYXJzZV9kYXRlO1xuICB9XG4gIGlmICgoYmFzZTExID0gdGhpcy5vcHRpb25zKS5jYXN0X2RhdGUgPT0gbnVsbCkge1xuICAgIGJhc2UxMS5jYXN0X2RhdGUgPSBmYWxzZTtcbiAgfVxuICBpZiAodGhpcy5vcHRpb25zLmNhc3RfZGF0ZSA9PT0gdHJ1ZSkge1xuICAgIHRoaXMub3B0aW9ucy5jYXN0X2RhdGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIG07XG4gICAgICBtID0gRGF0ZS5wYXJzZSh2YWx1ZSk7XG4gICAgICBpZiAoIWlzTmFOKG0pKSB7XG4gICAgICAgIHZhbHVlID0gbmV3IERhdGUobSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgfVxuICBpZiAoKGJhc2UxMiA9IHRoaXMub3B0aW9ucykucmVsYXggPT0gbnVsbCkge1xuICAgIGJhc2UxMi5yZWxheCA9IGZhbHNlO1xuICB9XG4gIGlmICgoYmFzZTEzID0gdGhpcy5vcHRpb25zKS5yZWxheF9jb2x1bW5fY291bnQgPT0gbnVsbCkge1xuICAgIGJhc2UxMy5yZWxheF9jb2x1bW5fY291bnQgPSBmYWxzZTtcbiAgfVxuICBpZiAoKGJhc2UxNCA9IHRoaXMub3B0aW9ucykuc2tpcF9lbXB0eV9saW5lcyA9PSBudWxsKSB7XG4gICAgYmFzZTE0LnNraXBfZW1wdHlfbGluZXMgPSBmYWxzZTtcbiAgfVxuICBpZiAoKGJhc2UxNSA9IHRoaXMub3B0aW9ucykubWF4X2xpbWl0X29uX2RhdGFfcmVhZCA9PSBudWxsKSB7XG4gICAgYmFzZTE1Lm1heF9saW1pdF9vbl9kYXRhX3JlYWQgPSAxMjgwMDA7XG4gIH1cbiAgaWYgKChiYXNlMTYgPSB0aGlzLm9wdGlvbnMpLnNraXBfbGluZXNfd2l0aF9lbXB0eV92YWx1ZXMgPT0gbnVsbCkge1xuICAgIGJhc2UxNi5za2lwX2xpbmVzX3dpdGhfZW1wdHlfdmFsdWVzID0gZmFsc2U7XG4gIH1cbiAgaWYgKChiYXNlMTcgPSB0aGlzLm9wdGlvbnMpLnNraXBfbGluZXNfd2l0aF9lcnJvciA9PSBudWxsKSB7XG4gICAgYmFzZTE3LnNraXBfbGluZXNfd2l0aF9lcnJvciA9IGZhbHNlO1xuICB9XG4gIC8vIENvdW50ZXJzXG4gIC8vIGxpbmVzID0gY291bnQgKyBza2lwcGVkX2xpbmVfY291bnQgKyBlbXB0eV9saW5lX2NvdW50XG4gIHRoaXMubGluZXMgPSAwOyAvLyBOdW1iZXIgb2YgbGluZXMgZW5jb3VudGVyZWQgaW4gdGhlIHNvdXJjZSBkYXRhc2V0XG4gIHRoaXMuY291bnQgPSAwOyAvLyBOdW1iZXIgb2YgcmVjb3JkcyBiZWluZyBwcm9jZXNzZWRcbiAgdGhpcy5za2lwcGVkX2xpbmVfY291bnQgPSAwOyAvLyBOdW1iZXIgb2YgcmVjb3JkcyBza2lwcGVkIGR1ZSB0byBlcnJvcnNcbiAgdGhpcy5lbXB0eV9saW5lX2NvdW50ID0gMDsgLy8gTnVtYmVyIG9mIGVtcHR5IGxpbmVzXG4gIC8vIENvbnN0YW50c1xuICB0aGlzLmlzX2ludCA9IC9eKFxcLXxcXCspPyhbMS05XStbMC05XSopJC87XG4gIC8vIEBpc19mbG9hdCA9IC9eKFxcLXxcXCspPyhbMC05XSsoXFwuWzAtOV0rKShbZUVdWzAtOV0rKT98SW5maW5pdHkpJC9cbiAgLy8gQGlzX2Zsb2F0ID0gL14oXFwtfFxcKyk/KCgoWzAtOV0pfChbMS05XStbMC05XSopKShcXC5bMC05XSspKFtlRV1bMC05XSspP3xJbmZpbml0eSkkL1xuICB0aGlzLmlzX2Zsb2F0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlIC0gcGFyc2VGbG9hdCh2YWx1ZSkgKyAxKSA+PSAwOyAvLyBCb3Jyb3dlZCBmcm9tIGpxdWVyeVxuICB9O1xuICAvLyBJbnRlcm5hbCBzdGF0ZVxuICB0aGlzLl8gPSB7XG4gICAgZGVjb2RlcjogbmV3IFN0cmluZ0RlY29kZXIoKSxcbiAgICBxdW90aW5nOiBmYWxzZSxcbiAgICBjb21tZW50aW5nOiBmYWxzZSxcbiAgICBmaWVsZDogbnVsbCxcbiAgICBuZXh0Q2hhcjogbnVsbCxcbiAgICBjbG9zaW5nUXVvdGU6IDAsXG4gICAgbGluZTogW10sXG4gICAgY2h1bmtzOiBbXSxcbiAgICByYXdCdWY6ICcnLFxuICAgIGJ1ZjogJycsXG4gICAgcm93RGVsaW1pdGVyTGVuZ3RoOiB0aGlzLm9wdGlvbnMucm93RGVsaW1pdGVyID8gTWF0aC5tYXgoLi4udGhpcy5vcHRpb25zLnJvd0RlbGltaXRlci5tYXAoZnVuY3Rpb24odikge1xuICAgICAgcmV0dXJuIHYubGVuZ3RoO1xuICAgIH0pKSA6IHZvaWQgMCxcbiAgICBsaW5lSGFzRXJyb3I6IGZhbHNlLFxuICAgIGlzRW5kZWQ6IGZhbHNlXG4gIH07XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gIyMgSW50ZXJuYWwgQVBJXG5cbi8vIFRoZSBQYXJzZXIgaW1wbGVtZW50IGEgW2BzdHJlYW0uVHJhbnNmb3JtYCBjbGFzc11bdHJhbnNmb3JtXS5cblxuLy8gIyMjIEV2ZW50c1xuXG4vLyBUaGUgbGlicmFyeSBleHRlbmRzIE5vZGUgW0V2ZW50RW1pdHRlcl1bZXZlbnRdIGNsYXNzIGFuZCBlbWl0IGFsbFxuLy8gdGhlIGV2ZW50cyBvZiB0aGUgV3JpdGFibGUgYW5kIFJlYWRhYmxlIFtTdHJlYW0gQVBJXVtzdHJlYW1dLiBcbnV0aWwuaW5oZXJpdHMoUGFyc2VyLCBzdHJlYW0uVHJhbnNmb3JtKTtcblxuLy8gRm9yIGV4dHJhIGZsZXhpYmlsaXR5LCB5b3UgY2FuIGdldCBhY2Nlc3MgdG8gdGhlIG9yaWdpbmFsIFBhcnNlclxuLy8gY2xhc3M6IGByZXF1aXJlKCdjc3YtcGFyc2UnKS5QYXJzZXJgLlxubW9kdWxlLmV4cG9ydHMuUGFyc2VyID0gUGFyc2VyO1xuXG4vLyAjIyMgYF90cmFuc2Zvcm0oY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaylgXG5cbi8vICogICBgY2h1bmtgIEJ1ZmZlciB8IFN0cmluZyAgIFxuLy8gICAgIFRoZSBjaHVuayB0byBiZSB0cmFuc2Zvcm1lZC4gV2lsbCBhbHdheXMgYmUgYSBidWZmZXIgdW5sZXNzIHRoZSBkZWNvZGVTdHJpbmdzIG9wdGlvbiB3YXMgc2V0IHRvIGZhbHNlLlxuLy8gKiAgIGBlbmNvZGluZ2AgU3RyaW5nICAgXG4vLyAgICAgSWYgdGhlIGNodW5rIGlzIGEgc3RyaW5nLCB0aGVuIHRoaXMgaXMgdGhlIGVuY29kaW5nIHR5cGUuIChJZ25vcmUgaWYgZGVjb2RlU3RyaW5ncyBjaHVuayBpcyBhIGJ1ZmZlci4pXG4vLyAqICAgYGNhbGxiYWNrYCBGdW5jdGlvbiAgIFxuLy8gICAgIENhbGwgdGhpcyBmdW5jdGlvbiAob3B0aW9uYWxseSB3aXRoIGFuIGVycm9yIGFyZ3VtZW50KSB3aGVuIHlvdSBhcmUgZG9uZSBwcm9jZXNzaW5nIHRoZSBzdXBwbGllZCBjaHVuay5cblxuLy8gSW1wbGVtZW50YXRpb24gb2YgdGhlIFtgc3RyZWFtLlRyYW5zZm9ybWAgQVBJXVt0cmFuc2Zvcm1dXG5QYXJzZXIucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgIHZhciBlcnI7XG4gICAgaWYgKGNodW5rIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICBjaHVuayA9IHRoaXMuXy5kZWNvZGVyLndyaXRlKGNodW5rKTtcbiAgICB9XG4gICAgZXJyID0gdGhpcy5fX3dyaXRlKGNodW5rLCBmYWxzZSk7XG4gICAgaWYgKGVycikge1xuICAgICAgcmV0dXJuIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIH1cbiAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgfSk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9mbHVzaCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHJldHVybiBjYWxsYmFjayh0aGlzLl9fZmx1c2goKSk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9fZmx1c2ggPSBmdW5jdGlvbigpIHtcbiAgdmFyIGVycjtcbiAgZXJyID0gdGhpcy5fX3dyaXRlKHRoaXMuXy5kZWNvZGVyLmVuZCgpLCB0cnVlKTtcbiAgaWYgKGVycikge1xuICAgIHJldHVybiBlcnI7XG4gIH1cbiAgaWYgKHRoaXMuXy5xdW90aW5nKSB7XG4gICAgZXJyID0gdGhpcy5lcnJvcihgUXVvdGVkIGZpZWxkIG5vdCB0ZXJtaW5hdGVkIGF0IGxpbmUgJHt0aGlzLmxpbmVzICsgMX1gKTtcbiAgICByZXR1cm4gZXJyO1xuICB9XG4gIGlmICh0aGlzLl8ubGluZS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHRoaXMuX19wdXNoKHRoaXMuXy5saW5lKTtcbiAgfVxufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fX3B1c2ggPSBmdW5jdGlvbihsaW5lKSB7XG4gIHZhciBjYWxsX2NvbHVtbl91ZGYsIGNvbHVtbnMsIGVyciwgZmllbGQsIGksIGosIGxlbiwgbGluZUFzQ29sdW1ucywgcmVjb3JkO1xuICBpZiAodGhpcy5fLmlzRW5kZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHRoaXMub3B0aW9ucy5za2lwX2xpbmVzX3dpdGhfZW1wdHlfdmFsdWVzICYmIGxpbmUuam9pbignJykudHJpbSgpID09PSAnJykge1xuICAgIHJldHVybjtcbiAgfVxuICByZWNvcmQgPSBudWxsO1xuICBpZiAodGhpcy5vcHRpb25zLmNvbHVtbnMgPT09IHRydWUpIHtcbiAgICB0aGlzLm9wdGlvbnMuY29sdW1ucyA9IGxpbmU7XG4gICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuY29sdW1ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxfY29sdW1uX3VkZiA9IGZ1bmN0aW9uKGZuLCBsaW5lKSB7XG4gICAgICB2YXIgY29sdW1ucywgZXJyO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29sdW1ucyA9IGZuLmNhbGwobnVsbCwgbGluZSk7XG4gICAgICAgIHJldHVybiBbbnVsbCwgY29sdW1uc107XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBlcnIgPSBlcnJvcjtcbiAgICAgICAgcmV0dXJuIFtlcnJdO1xuICAgICAgfVxuICAgIH07XG4gICAgW2VyciwgY29sdW1uc10gPSBjYWxsX2NvbHVtbl91ZGYodGhpcy5vcHRpb25zLmNvbHVtbnMsIGxpbmUpO1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHJldHVybiBlcnI7XG4gICAgfVxuICAgIHRoaXMub3B0aW9ucy5jb2x1bW5zID0gY29sdW1ucztcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCF0aGlzLl8ubGluZV9sZW5ndGggJiYgbGluZS5sZW5ndGggPiAwKSB7XG4gICAgdGhpcy5fLmxpbmVfbGVuZ3RoID0gdGhpcy5vcHRpb25zLmNvbHVtbnMgPyB0aGlzLm9wdGlvbnMuY29sdW1ucy5sZW5ndGggOiBsaW5lLmxlbmd0aDtcbiAgfVxuICAvLyBEb250IGNoZWNrIGNvbHVtbiBjb3VudCBvbiBlbXB0eSBsaW5lc1xuICBpZiAobGluZS5sZW5ndGggPT09IDEgJiYgbGluZVswXSA9PT0gJycpIHtcbiAgICB0aGlzLmVtcHR5X2xpbmVfY291bnQrKztcbiAgfSBlbHNlIGlmIChsaW5lLmxlbmd0aCAhPT0gdGhpcy5fLmxpbmVfbGVuZ3RoKSB7XG4gICAgLy8gRG9udCBjaGVjayBjb2x1bW4gY291bnQgd2l0aCByZWxheF9jb2x1bW5fY291bnRcbiAgICBpZiAodGhpcy5vcHRpb25zLnJlbGF4X2NvbHVtbl9jb3VudCkge1xuICAgICAgdGhpcy5jb3VudCsrO1xuICAgICAgdGhpcy5za2lwcGVkX2xpbmVfY291bnQrKztcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jb2x1bW5zICE9IG51bGwpIHtcbiAgICAgIC8vIFN1Z2dlc3Q6IEluY29uc2lzdGVudCBoZWFkZXIgYW5kIGNvbHVtbiBudW1iZXJzOiBoZWFkZXIgaXMgMSBhbmQgbnVtYmVyIG9mIGNvbHVtbnMgaXMgMSBvbiBsaW5lIDFcbiAgICAgIGVyciA9IHRoaXMuZXJyb3IoYE51bWJlciBvZiBjb2x1bW5zIG9uIGxpbmUgJHt0aGlzLmxpbmVzfSBkb2VzIG5vdCBtYXRjaCBoZWFkZXJgKTtcbiAgICAgIHJldHVybiBlcnI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVyciA9IHRoaXMuZXJyb3IoYE51bWJlciBvZiBjb2x1bW5zIGlzIGluY29uc2lzdGVudCBvbiBsaW5lICR7dGhpcy5saW5lc31gKTtcbiAgICAgIHJldHVybiBlcnI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMuY291bnQrKztcbiAgfVxuICBpZiAodGhpcy5vcHRpb25zLmNvbHVtbnMgIT0gbnVsbCkge1xuICAgIGxpbmVBc0NvbHVtbnMgPSB7fTtcbiAgICBmb3IgKGkgPSBqID0gMCwgbGVuID0gbGluZS5sZW5ndGg7IGogPCBsZW47IGkgPSArK2opIHtcbiAgICAgIGZpZWxkID0gbGluZVtpXTtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29sdW1uc1tpXSA9PT0gZmFsc2UpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBsaW5lQXNDb2x1bW5zW3RoaXMub3B0aW9ucy5jb2x1bW5zW2ldXSA9IGZpZWxkO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLm9iam5hbWUpIHtcbiAgICAgIHJlY29yZCA9IFtsaW5lQXNDb2x1bW5zW3RoaXMub3B0aW9ucy5vYmpuYW1lXSwgbGluZUFzQ29sdW1uc107XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlY29yZCA9IGxpbmVBc0NvbHVtbnM7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJlY29yZCA9IGxpbmU7XG4gIH1cbiAgaWYgKHRoaXMuY291bnQgPCB0aGlzLm9wdGlvbnMuZnJvbSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAodGhpcy5vcHRpb25zLnJhdykge1xuICAgIHRoaXMucHVzaCh7XG4gICAgICByYXc6IHRoaXMuXy5yYXdCdWYsXG4gICAgICByb3c6IHJlY29yZFxuICAgIH0pO1xuICAgIHRoaXMuXy5yYXdCdWYgPSAnJztcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnB1c2gocmVjb3JkKTtcbiAgfVxuICBpZiAodGhpcy5saXN0ZW5lckNvdW50KCdyZWNvcmQnKSkge1xuICAgIHRoaXMuZW1pdCgncmVjb3JkJywgcmVjb3JkKTtcbiAgfVxuICAvLyBXaGVuIHRvIGlzIHJlYWNoZWQgc2V0IGlnbm9yZSBhbnkgZnV0dXJlIGNhbGxzXG4gIGlmICh0aGlzLmNvdW50ID49IHRoaXMub3B0aW9ucy50bykge1xuICAgIHRoaXMuXy5pc0VuZGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5wdXNoKG51bGwpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fX3dyaXRlID0gZnVuY3Rpb24oY2hhcnMsIGVuZCkge1xuICB2YXIgYXJlTmV4dENoYXJzRGVsaW1pdGVyLCBhcmVOZXh0Q2hhcnNSb3dEZWxpbWl0ZXJzLCBjYXN0LCBjaGFyLCBlcnIsIGVzY2FwZUlzUXVvdGUsIGksIGlzRGVsaW1pdGVyLCBpc0VzY2FwZSwgaXNOZXh0Q2hhckFDb21tZW50LCBpc05leHRDaGFyVHJpbWFibGUsIGlzUXVvdGUsIGlzUm93RGVsaW1pdGVyLCBpc1Jvd0RlbGltaXRlckxlbmd0aCwgaXNfZmxvYXQsIGlzX2ludCwgbCwgbHRyaW0sIG5leHRDaGFyUG9zLCByZWYsIHJlZjEsIHJlZjIsIHJlZjMsIHJlZjQsIHJlZjUsIHJlZjYsIHJlbWFpbmluZ0J1ZmZlciwgcm93RGVsaW1pdGVyLCBydHJpbSwgd2FzQ29tbWVudGluZztcbiAgaXNfaW50ID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmlzX2ludCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNfaW50KHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaXNfaW50LnRlc3QodmFsdWUpO1xuICAgIH1cbiAgfTtcbiAgaXNfZmxvYXQgPSAodmFsdWUpID0+IHtcbiAgICBpZiAodHlwZW9mIHRoaXMuaXNfZmxvYXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzX2Zsb2F0KHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaXNfZmxvYXQudGVzdCh2YWx1ZSk7XG4gICAgfVxuICB9O1xuICBjYXN0ID0gKHZhbHVlLCBjb250ZXh0ID0ge30pID0+IHtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5jYXN0KSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChjb250ZXh0LnF1b3RpbmcgPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5xdW90aW5nID0gISF0aGlzLl8uY2xvc2luZ1F1b3RlO1xuICAgIH1cbiAgICBpZiAoY29udGV4dC5saW5lcyA9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmxpbmVzID0gdGhpcy5saW5lcztcbiAgICB9XG4gICAgaWYgKGNvbnRleHQuY291bnQgPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5jb3VudCA9IHRoaXMuY291bnQ7XG4gICAgfVxuICAgIGlmIChjb250ZXh0LmluZGV4ID09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuaW5kZXggPSB0aGlzLl8ubGluZS5sZW5ndGg7XG4gICAgfVxuICAgIC8vIGNvbnRleHQuaGVhZGVyID89IGlmIEBvcHRpb25zLmNvbHVtbiBhbmQgQGxpbmVzIGlzIDEgYW5kIEBjb3VudCBpcyAwIHRoZW4gdHJ1ZSBlbHNlIGZhbHNlXG4gICAgaWYgKGNvbnRleHQuaGVhZGVyID09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuaGVhZGVyID0gdGhpcy5vcHRpb25zLmNvbHVtbnMgPT09IHRydWU7XG4gICAgfVxuICAgIGlmIChjb250ZXh0LmNvbHVtbiA9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmNvbHVtbiA9IEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zLmNvbHVtbnMpID8gdGhpcy5vcHRpb25zLmNvbHVtbnNbY29udGV4dC5pbmRleF0gOiBjb250ZXh0LmluZGV4O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5jYXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNhc3QodmFsdWUsIGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAoaXNfaW50KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChpc19mbG9hdCh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY2FzdF9kYXRlKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMub3B0aW9ucy5jYXN0X2RhdGUodmFsdWUsIGNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG4gIGx0cmltID0gdGhpcy5vcHRpb25zLnRyaW0gfHwgdGhpcy5vcHRpb25zLmx0cmltO1xuICBydHJpbSA9IHRoaXMub3B0aW9ucy50cmltIHx8IHRoaXMub3B0aW9ucy5ydHJpbTtcbiAgY2hhcnMgPSB0aGlzLl8uYnVmICsgY2hhcnM7XG4gIGwgPSBjaGFycy5sZW5ndGg7XG4gIGkgPSAwO1xuICBpZiAodGhpcy5saW5lcyA9PT0gMCAmJiAweEZFRkYgPT09IGNoYXJzLmNoYXJDb2RlQXQoMCkpIHtcbiAgICAvLyBTdHJpcCBCT00gaGVhZGVyXG4gICAgaSsrO1xuICB9XG4gIHdoaWxlIChpIDwgbCkge1xuICAgIC8vIEVuc3VyZSB3ZSBnZXQgZW5vdWdoIHNwYWNlIHRvIGxvb2sgYWhlYWRcbiAgICBpZiAoIWVuZCkge1xuICAgICAgcmVtYWluaW5nQnVmZmVyID0gY2hhcnMuc3Vic3RyKGksIGwgLSBpKTtcbiAgICAgIC8vIChpKzEwMDAgPj0gbCkgb3JcbiAgICAgIC8vIFNraXAgaWYgdGhlIHJlbWFpbmluZyBidWZmZXIgY2FuIGJlIGNvbW1lbnRcbiAgICAgIC8vIFNraXAgaWYgdGhlIHJlbWFpbmluZyBidWZmZXIgY2FuIGJlIHJvdyBkZWxpbWl0ZXJcbiAgICAgIGlmICgoIXRoaXMub3B0aW9ucy5yb3dEZWxpbWl0ZXIgJiYgaSArIDMgPiBsKSB8fCAoIXRoaXMuXy5jb21tZW50aW5nICYmIGwgLSBpIDwgdGhpcy5vcHRpb25zLmNvbW1lbnQubGVuZ3RoICYmIHRoaXMub3B0aW9ucy5jb21tZW50LnN1YnN0cigwLCBsIC0gaSkgPT09IHJlbWFpbmluZ0J1ZmZlcikgfHwgKHRoaXMub3B0aW9ucy5yb3dEZWxpbWl0ZXIgJiYgbCAtIGkgPCB0aGlzLl8ucm93RGVsaW1pdGVyTGVuZ3RoICYmIHRoaXMub3B0aW9ucy5yb3dEZWxpbWl0ZXIuc29tZShmdW5jdGlvbihyZCkge1xuICAgICAgICByZXR1cm4gcmQuc3Vic3RyKDAsIGwgLSBpKSA9PT0gcmVtYWluaW5nQnVmZmVyO1xuICAgICAgLy8gU2tpcCBpZiB0aGUgcmVtYWluaW5nIGJ1ZmZlciBjYW4gYmUgcm93IGRlbGltaXRlciBmb2xsb3dpbmcgdGhlIGNsb3NpbmcgcXVvdGVcbiAgICAgIH0pKSB8fCAodGhpcy5vcHRpb25zLnJvd0RlbGltaXRlciAmJiB0aGlzLl8ucXVvdGluZyAmJiBsIC0gaSA8ICh0aGlzLm9wdGlvbnMucXVvdGUubGVuZ3RoICsgdGhpcy5fLnJvd0RlbGltaXRlckxlbmd0aCkgJiYgdGhpcy5vcHRpb25zLnJvd0RlbGltaXRlci5zb21lKChyZCkgPT4ge1xuICAgICAgICByZXR1cm4gKHRoaXMub3B0aW9ucy5xdW90ZSArIHJkKS5zdWJzdHIoMCwgbCAtIGkpID09PSByZW1haW5pbmdCdWZmZXI7XG4gICAgICAvLyBTa2lwIGlmIHRoZSByZW1haW5pbmcgYnVmZmVyIGNhbiBiZSBkZWxpbWl0ZXJcbiAgICAgIC8vIFNraXAgaWYgdGhlIHJlbWFpbmluZyBidWZmZXIgY2FuIGJlIGVzY2FwZSBzZXF1ZW5jZVxuICAgICAgfSkpIHx8IChsIC0gaSA8PSB0aGlzLm9wdGlvbnMuZGVsaW1pdGVyLmxlbmd0aCAmJiB0aGlzLm9wdGlvbnMuZGVsaW1pdGVyLnN1YnN0cigwLCBsIC0gaSkgPT09IHJlbWFpbmluZ0J1ZmZlcikgfHwgKGwgLSBpIDw9IHRoaXMub3B0aW9ucy5lc2NhcGUubGVuZ3RoICYmIHRoaXMub3B0aW9ucy5lc2NhcGUuc3Vic3RyKDAsIGwgLSBpKSA9PT0gcmVtYWluaW5nQnVmZmVyKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgY2hhciA9IHRoaXMuXy5uZXh0Q2hhciA/IHRoaXMuXy5uZXh0Q2hhciA6IGNoYXJzLmNoYXJBdChpKTtcbiAgICB0aGlzLl8ubmV4dENoYXIgPSBsID4gaSArIDEgPyBjaGFycy5jaGFyQXQoaSArIDEpIDogbnVsbDtcbiAgICBpZiAodGhpcy5vcHRpb25zLnJhdykge1xuICAgICAgdGhpcy5fLnJhd0J1ZiArPSBjaGFyO1xuICAgIH1cbiAgICAvLyBBdXRvIGRpc2NvdmVyeSBvZiByb3dEZWxpbWl0ZXIsIHVuaXgsIG1hYyBhbmQgd2luZG93cyBzdXBwb3J0ZWRcbiAgICBpZiAodGhpcy5vcHRpb25zLnJvd0RlbGltaXRlciA9PSBudWxsKSB7XG4gICAgICBuZXh0Q2hhclBvcyA9IGk7XG4gICAgICByb3dEZWxpbWl0ZXIgPSBudWxsO1xuICAgICAgLy8gRmlyc3QgZW1wdHkgbGluZVxuICAgICAgaWYgKCF0aGlzLl8ucXVvdGluZyAmJiAoY2hhciA9PT0gJ1xcbicgfHwgY2hhciA9PT0gJ1xccicpKSB7XG4gICAgICAgIHJvd0RlbGltaXRlciA9IGNoYXI7XG4gICAgICAgIG5leHRDaGFyUG9zICs9IDE7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuXy5xdW90aW5nICYmIGNoYXIgPT09IHRoaXMub3B0aW9ucy5xdW90ZSAmJiAoKHJlZiA9IHRoaXMuXy5uZXh0Q2hhcikgPT09ICdcXG4nIHx8IHJlZiA9PT0gJ1xccicpKSB7XG4gICAgICAgIHJvd0RlbGltaXRlciA9IHRoaXMuXy5uZXh0Q2hhcjtcbiAgICAgICAgbmV4dENoYXJQb3MgKz0gMjtcbiAgICAgIH1cbiAgICAgIGlmIChyb3dEZWxpbWl0ZXIpIHtcbiAgICAgICAgaWYgKHJvd0RlbGltaXRlciA9PT0gJ1xccicgJiYgY2hhcnMuY2hhckF0KG5leHRDaGFyUG9zKSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICByb3dEZWxpbWl0ZXIgKz0gJ1xcbic7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zLnJvd0RlbGltaXRlciA9IFtyb3dEZWxpbWl0ZXJdO1xuICAgICAgICB0aGlzLl8ucm93RGVsaW1pdGVyTGVuZ3RoID0gcm93RGVsaW1pdGVyLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUGFyc2UgdGhhdCBkYW1uIGNoYXJcbiAgICAvLyBOb3RlLCBzaG91bGRuJ3Qgd2UgaGF2ZSBzdGggbGlrZSBjaGFycy5zdWJzdHIoaSwgQG9wdGlvbnMuZXNjYXBlLmxlbmd0aClcbiAgICBpZiAoIXRoaXMuXy5jb21tZW50aW5nICYmIGNoYXIgPT09IHRoaXMub3B0aW9ucy5lc2NhcGUpIHtcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZXNjYXBlIGlzIHJlYWxseSBoZXJlIGZvciBlc2NhcGluZzpcbiAgICAgIC8vIElmIGVzY2FwZSBpcyBzYW1lIGFzIHF1b3RlLCBhbmQgZXNjYXBlIGlzIGZpcnN0IGNoYXIgb2YgYSBmaWVsZCBcbiAgICAgIC8vIGFuZCBpdCdzIG5vdCBxdW90ZWQsIHRoZW4gaXQgaXMgYSBxdW90ZVxuICAgICAgLy8gTmV4dCBjaGFyIHNob3VsZCBiZSBhbiBlc2NhcGUgb3IgYSBxdW90ZVxuICAgICAgZXNjYXBlSXNRdW90ZSA9IHRoaXMub3B0aW9ucy5lc2NhcGUgPT09IHRoaXMub3B0aW9ucy5xdW90ZTtcbiAgICAgIGlzRXNjYXBlID0gdGhpcy5fLm5leHRDaGFyID09PSB0aGlzLm9wdGlvbnMuZXNjYXBlO1xuICAgICAgaXNRdW90ZSA9IHRoaXMuXy5uZXh0Q2hhciA9PT0gdGhpcy5vcHRpb25zLnF1b3RlO1xuICAgICAgaWYgKCEoZXNjYXBlSXNRdW90ZSAmJiAhdGhpcy5fLmZpZWxkICYmICF0aGlzLl8ucXVvdGluZykgJiYgKGlzRXNjYXBlIHx8IGlzUXVvdGUpKSB7XG4gICAgICAgIGkrKztcbiAgICAgICAgY2hhciA9IHRoaXMuXy5uZXh0Q2hhcjtcbiAgICAgICAgdGhpcy5fLm5leHRDaGFyID0gY2hhcnMuY2hhckF0KGkgKyAxKTtcbiAgICAgICAgaWYgKHRoaXMuXy5maWVsZCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5fLmZpZWxkID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fLmZpZWxkICs9IGNoYXI7XG4gICAgICAgIC8vIFNpbmNlIHdlJ3JlIHNraXBwaW5nIHRoZSBuZXh0IG9uZSwgYmV0dGVyIGFkZCBpdCBub3cgaWYgaW4gcmF3IG1vZGUuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmF3KSB7XG4gICAgICAgICAgdGhpcy5fLnJhd0J1ZiArPSBjaGFyO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIENoYXIgbWF0Y2ggcXVvdGVcbiAgICBpZiAoIXRoaXMuXy5jb21tZW50aW5nICYmIGNoYXIgPT09IHRoaXMub3B0aW9ucy5xdW90ZSkge1xuICAgICAgaWYgKHRoaXMuXy5hY2NlcHRPbmx5RW1wdHlDaGFycyAmJiAoY2hhciAhPT0gJyAnICYmIGNoYXIgIT09ICdcXHQnKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5lcnJvcignT25seSB0cmltYWJsZSBjaGFyYWN0ZXJzIGFyZSBhY2NlcHRlZCBhZnRlciBxdW90ZXMnKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl8ucXVvdGluZykge1xuICAgICAgICAvLyBNYWtlIHN1cmUgYSBjbG9zaW5nIHF1b3RlIGlzIGZvbGxvd2VkIGJ5IGEgZGVsaW1pdGVyXG4gICAgICAgIC8vIElmIHdlIGhhdmUgYSBuZXh0IGNoYXJhY3RlciBhbmQgXG4gICAgICAgIC8vIGl0IGlzbnQgYSByb3dEZWxpbWl0ZXIgYW5kIFxuICAgICAgICAvLyBpdCBpc250IGFuIGNvbHVtbiBkZWxpbWl0ZXIgYW5kXG4gICAgICAgIC8vIGl0IGlzbnQgdGhlIGJlZ2luaW5nIG9mIGEgY29tbWVudFxuICAgICAgICAvLyBPdGhlcndpc2UsIGlmIHRoaXMgaXMgbm90IFwicmVsYXhcIiBtb2RlLCB0aHJvdyBhbiBlcnJvclxuICAgICAgICBpc05leHRDaGFyVHJpbWFibGUgPSBydHJpbSAmJiAoKHJlZjEgPSB0aGlzLl8ubmV4dENoYXIpID09PSAnICcgfHwgcmVmMSA9PT0gJ1xcdCcpO1xuICAgICAgICBhcmVOZXh0Q2hhcnNSb3dEZWxpbWl0ZXJzID0gdGhpcy5vcHRpb25zLnJvd0RlbGltaXRlciAmJiB0aGlzLm9wdGlvbnMucm93RGVsaW1pdGVyLnNvbWUoZnVuY3Rpb24ocmQpIHtcbiAgICAgICAgICByZXR1cm4gY2hhcnMuc3Vic3RyKGkgKyAxLCByZC5sZW5ndGgpID09PSByZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGFyZU5leHRDaGFyc0RlbGltaXRlciA9IGNoYXJzLnN1YnN0cihpICsgMSwgdGhpcy5vcHRpb25zLmRlbGltaXRlci5sZW5ndGgpID09PSB0aGlzLm9wdGlvbnMuZGVsaW1pdGVyO1xuICAgICAgICBpc05leHRDaGFyQUNvbW1lbnQgPSB0aGlzLl8ubmV4dENoYXIgPT09IHRoaXMub3B0aW9ucy5jb21tZW50O1xuICAgICAgICBpZiAoKHRoaXMuXy5uZXh0Q2hhciAhPSBudWxsKSAmJiAhaXNOZXh0Q2hhclRyaW1hYmxlICYmICFhcmVOZXh0Q2hhcnNSb3dEZWxpbWl0ZXJzICYmICFhcmVOZXh0Q2hhcnNEZWxpbWl0ZXIgJiYgIWlzTmV4dENoYXJBQ29tbWVudCkge1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVsYXgpIHtcbiAgICAgICAgICAgIHRoaXMuXy5xdW90aW5nID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5fLmZpZWxkKSB7XG4gICAgICAgICAgICAgIHRoaXMuXy5maWVsZCA9IGAke3RoaXMub3B0aW9ucy5xdW90ZX0ke3RoaXMuXy5maWVsZH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZXJyID0gdGhpcy5lcnJvcihgSW52YWxpZCBjbG9zaW5nIHF1b3RlIGF0IGxpbmUgJHt0aGlzLmxpbmVzICsgMX07IGZvdW5kICR7SlNPTi5zdHJpbmdpZnkodGhpcy5fLm5leHRDaGFyKX0gaW5zdGVhZCBvZiBkZWxpbWl0ZXIgJHtKU09OLnN0cmluZ2lmeSh0aGlzLm9wdGlvbnMuZGVsaW1pdGVyKX1gKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgodGhpcy5fLm5leHRDaGFyICE9IG51bGwpICYmIGlzTmV4dENoYXJUcmltYWJsZSkge1xuICAgICAgICAgIGkrKztcbiAgICAgICAgICB0aGlzLl8ucXVvdGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuXy5jbG9zaW5nUXVvdGUgPSB0aGlzLm9wdGlvbnMucXVvdGUubGVuZ3RoO1xuICAgICAgICAgIHRoaXMuXy5hY2NlcHRPbmx5RW1wdHlDaGFycyA9IHRydWU7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICAgIHRoaXMuXy5xdW90aW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fLmNsb3NpbmdRdW90ZSA9IHRoaXMub3B0aW9ucy5xdW90ZS5sZW5ndGg7XG4gICAgICAgICAgaWYgKGVuZCAmJiBpID09PSBsKSB7XG4gICAgICAgICAgICB0aGlzLl8ubGluZS5wdXNoKGNhc3QodGhpcy5fLmZpZWxkIHx8ICcnKSk7XG4gICAgICAgICAgICB0aGlzLl8uZmllbGQgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghdGhpcy5fLmZpZWxkKSB7XG4gICAgICAgIHRoaXMuXy5xdW90aW5nID0gdHJ1ZTtcbiAgICAgICAgaSsrO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAoKHRoaXMuXy5maWVsZCAhPSBudWxsKSAmJiAhdGhpcy5vcHRpb25zLnJlbGF4KSB7XG4gICAgICAgIGlmIChlcnIgPSB0aGlzLmVycm9yKGBJbnZhbGlkIG9wZW5pbmcgcXVvdGUgYXQgbGluZSAke3RoaXMubGluZXMgKyAxfWApKSB7XG4gICAgICAgICAgcmV0dXJuIGVycjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBPdGhlcndpc2UsIHRyZWF0IHF1b3RlIGFzIGEgcmVndWxhciBjaGFyYWN0ZXJcbiAgICBpc1Jvd0RlbGltaXRlciA9IHRoaXMub3B0aW9ucy5yb3dEZWxpbWl0ZXIgJiYgdGhpcy5vcHRpb25zLnJvd0RlbGltaXRlci5zb21lKGZ1bmN0aW9uKHJkKSB7XG4gICAgICByZXR1cm4gY2hhcnMuc3Vic3RyKGksIHJkLmxlbmd0aCkgPT09IHJkO1xuICAgIH0pO1xuICAgIGlmIChpc1Jvd0RlbGltaXRlciB8fCAoZW5kICYmIGkgPT09IGwgLSAxKSkge1xuICAgICAgdGhpcy5saW5lcysrO1xuICAgIH1cbiAgICAvLyBTZXQgdGhlIGNvbW1lbnRpbmcgZmxhZ1xuICAgIHdhc0NvbW1lbnRpbmcgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMuXy5jb21tZW50aW5nICYmICF0aGlzLl8ucXVvdGluZyAmJiB0aGlzLm9wdGlvbnMuY29tbWVudCAmJiBjaGFycy5zdWJzdHIoaSwgdGhpcy5vcHRpb25zLmNvbW1lbnQubGVuZ3RoKSA9PT0gdGhpcy5vcHRpb25zLmNvbW1lbnQpIHtcbiAgICAgIHRoaXMuXy5jb21tZW50aW5nID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuXy5jb21tZW50aW5nICYmIGlzUm93RGVsaW1pdGVyKSB7XG4gICAgICB3YXNDb21tZW50aW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuXy5jb21tZW50aW5nID0gZmFsc2U7XG4gICAgfVxuICAgIGlzRGVsaW1pdGVyID0gY2hhcnMuc3Vic3RyKGksIHRoaXMub3B0aW9ucy5kZWxpbWl0ZXIubGVuZ3RoKSA9PT0gdGhpcy5vcHRpb25zLmRlbGltaXRlcjtcbiAgICBpZiAodGhpcy5fLmFjY2VwdE9ubHlFbXB0eUNoYXJzKSB7XG4gICAgICBpZiAoaXNEZWxpbWl0ZXIgfHwgaXNSb3dEZWxpbWl0ZXIpIHtcbiAgICAgICAgdGhpcy5fLmFjY2VwdE9ubHlFbXB0eUNoYXJzID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY2hhciA9PT0gJyAnIHx8IGNoYXIgPT09ICdcXHQnKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yKCdPbmx5IHRyaW1hYmxlIGNoYXJhY3RlcnMgYXJlIGFjY2VwdGVkIGFmdGVyIHF1b3RlcycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdGhpcy5fLmNvbW1lbnRpbmcgJiYgIXRoaXMuXy5xdW90aW5nICYmIChpc0RlbGltaXRlciB8fCBpc1Jvd0RlbGltaXRlcikpIHtcbiAgICAgIGlmIChpc1Jvd0RlbGltaXRlcikge1xuICAgICAgICBpc1Jvd0RlbGltaXRlckxlbmd0aCA9IHRoaXMub3B0aW9ucy5yb3dEZWxpbWl0ZXIuZmlsdGVyKGZ1bmN0aW9uKHJkKSB7XG4gICAgICAgICAgcmV0dXJuIGNoYXJzLnN1YnN0cihpLCByZC5sZW5ndGgpID09PSByZDtcbiAgICAgICAgfSlbMF0ubGVuZ3RoO1xuICAgICAgfVxuICAgICAgLy8gRW1wdHkgbGluZXNcbiAgICAgIGlmIChpc1Jvd0RlbGltaXRlciAmJiB0aGlzLl8ubGluZS5sZW5ndGggPT09IDAgJiYgKHRoaXMuXy5maWVsZCA9PSBudWxsKSkge1xuICAgICAgICBpZiAod2FzQ29tbWVudGluZyB8fCB0aGlzLm9wdGlvbnMuc2tpcF9lbXB0eV9saW5lcykge1xuICAgICAgICAgIGkgKz0gaXNSb3dEZWxpbWl0ZXJMZW5ndGg7XG4gICAgICAgICAgdGhpcy5fLm5leHRDaGFyID0gY2hhcnMuY2hhckF0KGkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocnRyaW0pIHtcbiAgICAgICAgaWYgKCF0aGlzLl8uY2xvc2luZ1F1b3RlKSB7XG4gICAgICAgICAgdGhpcy5fLmZpZWxkID0gKHJlZjIgPSB0aGlzLl8uZmllbGQpICE9IG51bGwgPyByZWYyLnRyaW1SaWdodCgpIDogdm9pZCAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLl8ubGluZS5wdXNoKGNhc3QodGhpcy5fLmZpZWxkIHx8ICcnKSk7XG4gICAgICB0aGlzLl8uY2xvc2luZ1F1b3RlID0gMDtcbiAgICAgIHRoaXMuXy5maWVsZCA9IG51bGw7XG4gICAgICBpZiAoaXNEZWxpbWl0ZXIpIHsgLy8gRW5kIG9mIGZpZWxkXG4gICAgICAgIGkgKz0gdGhpcy5vcHRpb25zLmRlbGltaXRlci5sZW5ndGg7XG4gICAgICAgIHRoaXMuXy5uZXh0Q2hhciA9IGNoYXJzLmNoYXJBdChpKTtcbiAgICAgICAgaWYgKGVuZCAmJiAhdGhpcy5fLm5leHRDaGFyKSB7XG4gICAgICAgICAgaXNSb3dEZWxpbWl0ZXIgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuXy5saW5lLnB1c2goJycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNSb3dEZWxpbWl0ZXIpIHsgLy8gRW5kIG9mIHJlY29yZFxuICAgICAgICBpZiAoIXRoaXMuXy5saW5lSGFzRXJyb3IpIHtcbiAgICAgICAgICBlcnIgPSB0aGlzLl9fcHVzaCh0aGlzLl8ubGluZSk7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGVycjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuXy5saW5lSGFzRXJyb3IpIHtcbiAgICAgICAgICB0aGlzLl8ubGluZUhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29tZSBjbGVhbnVwIGZvciB0aGUgbmV4dCByZWNvcmRcbiAgICAgICAgdGhpcy5fLmxpbmUgPSBbXTtcbiAgICAgICAgaSArPSBpc1Jvd0RlbGltaXRlckxlbmd0aDtcbiAgICAgICAgdGhpcy5fLm5leHRDaGFyID0gY2hhcnMuY2hhckF0KGkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCF0aGlzLl8uY29tbWVudGluZyAmJiAhdGhpcy5fLnF1b3RpbmcgJiYgKGNoYXIgPT09ICcgJyB8fCBjaGFyID09PSAnXFx0JykpIHtcbiAgICAgIGlmICh0aGlzLl8uZmllbGQgPT0gbnVsbCkge1xuICAgICAgICAvLyBMZWZ0IHRyaW0gdW5sZXNzIHdlIGFyZSBxdW90aW5nIG9yIGZpZWxkIGFscmVhZHkgZmlsbGVkXG4gICAgICAgIHRoaXMuXy5maWVsZCA9ICcnO1xuICAgICAgfVxuICAgICAgaWYgKCEobHRyaW0gJiYgIXRoaXMuXy5maWVsZCkpIHtcbiAgICAgICAgdGhpcy5fLmZpZWxkICs9IGNoYXI7XG4gICAgICB9XG4gICAgICBpKys7XG4gICAgfSBlbHNlIGlmICghdGhpcy5fLmNvbW1lbnRpbmcpIHtcbiAgICAgIGlmICh0aGlzLl8uZmllbGQgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl8uZmllbGQgPSAnJztcbiAgICAgIH1cbiAgICAgIHRoaXMuXy5maWVsZCArPSBjaGFyO1xuICAgICAgaSsrO1xuICAgIH0gZWxzZSB7XG4gICAgICBpKys7XG4gICAgfVxuICAgIGlmICghdGhpcy5fLmNvbW1lbnRpbmcgJiYgKChyZWYzID0gdGhpcy5fLmZpZWxkKSAhPSBudWxsID8gcmVmMy5sZW5ndGggOiB2b2lkIDApID4gdGhpcy5vcHRpb25zLm1heF9saW1pdF9vbl9kYXRhX3JlYWQpIHtcbiAgICAgIHJldHVybiBFcnJvcihgRmllbGQgZXhjZWVkcyBtYXhfbGltaXRfb25fZGF0YV9yZWFkIHNldHRpbmcgKCR7dGhpcy5vcHRpb25zLm1heF9saW1pdF9vbl9kYXRhX3JlYWR9KSAke0pTT04uc3RyaW5naWZ5KHRoaXMub3B0aW9ucy5kZWxpbWl0ZXIpfWApO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuXy5jb21tZW50aW5nICYmICgocmVmNCA9IHRoaXMuXy5saW5lKSAhPSBudWxsID8gcmVmNC5sZW5ndGggOiB2b2lkIDApID4gdGhpcy5vcHRpb25zLm1heF9saW1pdF9vbl9kYXRhX3JlYWQpIHtcbiAgICAgIHJldHVybiBFcnJvcihgUm93IGRlbGltaXRlciBub3QgZm91bmQgaW4gdGhlIGZpbGUgJHtKU09OLnN0cmluZ2lmeSh0aGlzLm9wdGlvbnMucm93RGVsaW1pdGVyKX1gKTtcbiAgICB9XG4gIH1cbiAgLy8gRmx1c2ggcmVtYWluaW5nIGZpZWxkcyBhbmQgbGluZXNcbiAgaWYgKGVuZCkge1xuICAgIGlmIChsID09PSAwKSB7XG4gICAgICB0aGlzLmxpbmVzKys7XG4gICAgfVxuICAgIGlmICh0aGlzLl8uZmllbGQgIT0gbnVsbCkge1xuICAgICAgaWYgKHJ0cmltKSB7XG4gICAgICAgIGlmICghdGhpcy5fLmNsb3NpbmdRdW90ZSkge1xuICAgICAgICAgIHRoaXMuXy5maWVsZCA9IChyZWY1ID0gdGhpcy5fLmZpZWxkKSAhPSBudWxsID8gcmVmNS50cmltUmlnaHQoKSA6IHZvaWQgMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5fLmxpbmUucHVzaChjYXN0KHRoaXMuXy5maWVsZCB8fCAnJykpO1xuICAgICAgdGhpcy5fLmZpZWxkID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKCgocmVmNiA9IHRoaXMuXy5maWVsZCkgIT0gbnVsbCA/IHJlZjYubGVuZ3RoIDogdm9pZCAwKSA+IHRoaXMub3B0aW9ucy5tYXhfbGltaXRfb25fZGF0YV9yZWFkKSB7XG4gICAgICByZXR1cm4gRXJyb3IoYERlbGltaXRlciBub3QgZm91bmQgaW4gdGhlIGZpbGUgJHtKU09OLnN0cmluZ2lmeSh0aGlzLm9wdGlvbnMuZGVsaW1pdGVyKX1gKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuXy5saW5lLmxlbmd0aCA+IHRoaXMub3B0aW9ucy5tYXhfbGltaXRfb25fZGF0YV9yZWFkKSB7XG4gICAgICByZXR1cm4gRXJyb3IoYFJvdyBkZWxpbWl0ZXIgbm90IGZvdW5kIGluIHRoZSBmaWxlICR7SlNPTi5zdHJpbmdpZnkodGhpcy5vcHRpb25zLnJvd0RlbGltaXRlcil9YCk7XG4gICAgfVxuICB9XG4gIC8vIFN0b3JlIHVuLXBhcnNlZCBjaGFycyBmb3IgbmV4dCBjYWxsXG4gIHRoaXMuXy5idWYgPSBjaGFycy5zdWJzdHIoaSk7XG4gIHJldHVybiBudWxsO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKG1zZykge1xuICB2YXIgZXJyO1xuICBlcnIgPSBFcnJvcihtc2cpO1xuICBpZiAoIXRoaXMub3B0aW9ucy5za2lwX2xpbmVzX3dpdGhfZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyO1xuICB9IGVsc2Uge1xuICAgIGlmICghdGhpcy5fLmxpbmVIYXNFcnJvcikge1xuICAgICAgdGhpcy5fLmxpbmVIYXNFcnJvciA9IHRydWU7XG4gICAgICB0aGlzLmVtaXQoJ3NraXAnLCBlcnIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbi8vICMjIFV0aWxzXG5pc09iakxpdGVyYWwgPSBmdW5jdGlvbihfb2JqKSB7XG4gIHZhciBfdGVzdDtcbiAgX3Rlc3QgPSBfb2JqO1xuICBpZiAodHlwZW9mIF9vYmogIT09ICdvYmplY3QnIHx8IF9vYmogPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShfb2JqKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKGZ1bmN0aW9uKCkge1xuICAgICAgd2hpbGUgKCFmYWxzZSkge1xuICAgICAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKF90ZXN0ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKF90ZXN0KSkgPT09IG51bGwpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihfb2JqID09PSBfdGVzdCk7XG4gICAgfSkoKTtcbiAgfVxufTtcblxuLy8gW3JlYWRtZV06IGh0dHBzOi8vZ2l0aHViLmNvbS93ZGF2aWR3L25vZGUtY3N2LXBhcnNlXG4vLyBbc2l0ZV06IGh0dHA6Ly9jc3YuYWRhbHRhcy5jb20vcGFyc2UvXG4vLyBbc2FtcGxlc106IGh0dHBzOi8vZ2l0aHViLmNvbS93ZGF2aWR3L25vZGUtY3N2LXBhcnNlL3RyZWUvbWFzdGVyL3NhbXBsZXNcbi8vIFt0ZXN0c106IGh0dHBzOi8vZ2l0aHViLmNvbS93ZGF2aWR3L25vZGUtY3N2LXBhcnNlL3RyZWUvbWFzdGVyL3Rlc3Rcbi8vIFtzdHJlYW1dOiAoaHR0cDovL25vZGVqcy5vcmcvYXBpL3N0cmVhbS5odG1sXG4vLyBbdHJhbnNmb3JtXTogKGh0dHA6Ly9ub2RlanMub3JnL2FwaS9zdHJlYW0uaHRtbCNzdHJlYW1fY2xhc3Nfc3RyZWFtX3RyYW5zZm9ybV8xKVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2Nzdi1wYXJzZS9saWIvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDEzN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiBGaWxlU2F2ZXIuanNcbiAqIEEgc2F2ZUFzKCkgRmlsZVNhdmVyIGltcGxlbWVudGF0aW9uLlxuICogMS4zLjJcbiAqIDIwMTYtMDYtMTYgMTg6MjU6MTlcbiAqXG4gKiBCeSBFbGkgR3JleSwgaHR0cDovL2VsaWdyZXkuY29tXG4gKiBMaWNlbnNlOiBNSVRcbiAqICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGlncmV5L0ZpbGVTYXZlci5qcy9ibG9iL21hc3Rlci9MSUNFTlNFLm1kXG4gKi9cblxuLypnbG9iYWwgc2VsZiAqL1xuLypqc2xpbnQgYml0d2lzZTogdHJ1ZSwgaW5kZW50OiA0LCBsYXhicmVhazogdHJ1ZSwgbGF4Y29tbWE6IHRydWUsIHNtYXJ0dGFiczogdHJ1ZSwgcGx1c3BsdXM6IHRydWUgKi9cblxuLyohIEBzb3VyY2UgaHR0cDovL3B1cmwuZWxpZ3JleS5jb20vZ2l0aHViL0ZpbGVTYXZlci5qcy9ibG9iL21hc3Rlci9GaWxlU2F2ZXIuanMgKi9cblxudmFyIHNhdmVBcyA9IHNhdmVBcyB8fCAoZnVuY3Rpb24odmlldykge1xuXHRcInVzZSBzdHJpY3RcIjtcblx0Ly8gSUUgPDEwIGlzIGV4cGxpY2l0bHkgdW5zdXBwb3J0ZWRcblx0aWYgKHR5cGVvZiB2aWV3ID09PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiYgL01TSUUgWzEtOV1cXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0dmFyXG5cdFx0ICBkb2MgPSB2aWV3LmRvY3VtZW50XG5cdFx0ICAvLyBvbmx5IGdldCBVUkwgd2hlbiBuZWNlc3NhcnkgaW4gY2FzZSBCbG9iLmpzIGhhc24ndCBvdmVycmlkZGVuIGl0IHlldFxuXHRcdCwgZ2V0X1VSTCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHZpZXcuVVJMIHx8IHZpZXcud2Via2l0VVJMIHx8IHZpZXc7XG5cdFx0fVxuXHRcdCwgc2F2ZV9saW5rID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIiwgXCJhXCIpXG5cdFx0LCBjYW5fdXNlX3NhdmVfbGluayA9IFwiZG93bmxvYWRcIiBpbiBzYXZlX2xpbmtcblx0XHQsIGNsaWNrID0gZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0dmFyIGV2ZW50ID0gbmV3IE1vdXNlRXZlbnQoXCJjbGlja1wiKTtcblx0XHRcdG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cdFx0fVxuXHRcdCwgaXNfc2FmYXJpID0gL2NvbnN0cnVjdG9yL2kudGVzdCh2aWV3LkhUTUxFbGVtZW50KSB8fCB2aWV3LnNhZmFyaVxuXHRcdCwgaXNfY2hyb21lX2lvcyA9L0NyaU9TXFwvW1xcZF0rLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpXG5cdFx0LCB0aHJvd19vdXRzaWRlID0gZnVuY3Rpb24oZXgpIHtcblx0XHRcdCh2aWV3LnNldEltbWVkaWF0ZSB8fCB2aWV3LnNldFRpbWVvdXQpKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aHJvdyBleDtcblx0XHRcdH0sIDApO1xuXHRcdH1cblx0XHQsIGZvcmNlX3NhdmVhYmxlX3R5cGUgPSBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiXG5cdFx0Ly8gdGhlIEJsb2IgQVBJIGlzIGZ1bmRhbWVudGFsbHkgYnJva2VuIGFzIHRoZXJlIGlzIG5vIFwiZG93bmxvYWRmaW5pc2hlZFwiIGV2ZW50IHRvIHN1YnNjcmliZSB0b1xuXHRcdCwgYXJiaXRyYXJ5X3Jldm9rZV90aW1lb3V0ID0gMTAwMCAqIDQwIC8vIGluIG1zXG5cdFx0LCByZXZva2UgPSBmdW5jdGlvbihmaWxlKSB7XG5cdFx0XHR2YXIgcmV2b2tlciA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGZpbGUgPT09IFwic3RyaW5nXCIpIHsgLy8gZmlsZSBpcyBhbiBvYmplY3QgVVJMXG5cdFx0XHRcdFx0Z2V0X1VSTCgpLnJldm9rZU9iamVjdFVSTChmaWxlKTtcblx0XHRcdFx0fSBlbHNlIHsgLy8gZmlsZSBpcyBhIEZpbGVcblx0XHRcdFx0XHRmaWxlLnJlbW92ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0c2V0VGltZW91dChyZXZva2VyLCBhcmJpdHJhcnlfcmV2b2tlX3RpbWVvdXQpO1xuXHRcdH1cblx0XHQsIGRpc3BhdGNoID0gZnVuY3Rpb24oZmlsZXNhdmVyLCBldmVudF90eXBlcywgZXZlbnQpIHtcblx0XHRcdGV2ZW50X3R5cGVzID0gW10uY29uY2F0KGV2ZW50X3R5cGVzKTtcblx0XHRcdHZhciBpID0gZXZlbnRfdHlwZXMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHR2YXIgbGlzdGVuZXIgPSBmaWxlc2F2ZXJbXCJvblwiICsgZXZlbnRfdHlwZXNbaV1dO1xuXHRcdFx0XHRpZiAodHlwZW9mIGxpc3RlbmVyID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0bGlzdGVuZXIuY2FsbChmaWxlc2F2ZXIsIGV2ZW50IHx8IGZpbGVzYXZlcik7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXgpIHtcblx0XHRcdFx0XHRcdHRocm93X291dHNpZGUoZXgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHQsIGF1dG9fYm9tID0gZnVuY3Rpb24oYmxvYikge1xuXHRcdFx0Ly8gcHJlcGVuZCBCT00gZm9yIFVURi04IFhNTCBhbmQgdGV4dC8qIHR5cGVzIChpbmNsdWRpbmcgSFRNTClcblx0XHRcdC8vIG5vdGU6IHlvdXIgYnJvd3NlciB3aWxsIGF1dG9tYXRpY2FsbHkgY29udmVydCBVVEYtMTYgVStGRUZGIHRvIEVGIEJCIEJGXG5cdFx0XHRpZiAoL15cXHMqKD86dGV4dFxcL1xcUyp8YXBwbGljYXRpb25cXC94bWx8XFxTKlxcL1xcUypcXCt4bWwpXFxzKjsuKmNoYXJzZXRcXHMqPVxccyp1dGYtOC9pLnRlc3QoYmxvYi50eXBlKSkge1xuXHRcdFx0XHRyZXR1cm4gbmV3IEJsb2IoW1N0cmluZy5mcm9tQ2hhckNvZGUoMHhGRUZGKSwgYmxvYl0sIHt0eXBlOiBibG9iLnR5cGV9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBibG9iO1xuXHRcdH1cblx0XHQsIEZpbGVTYXZlciA9IGZ1bmN0aW9uKGJsb2IsIG5hbWUsIG5vX2F1dG9fYm9tKSB7XG5cdFx0XHRpZiAoIW5vX2F1dG9fYm9tKSB7XG5cdFx0XHRcdGJsb2IgPSBhdXRvX2JvbShibG9iKTtcblx0XHRcdH1cblx0XHRcdC8vIEZpcnN0IHRyeSBhLmRvd25sb2FkLCB0aGVuIHdlYiBmaWxlc3lzdGVtLCB0aGVuIG9iamVjdCBVUkxzXG5cdFx0XHR2YXJcblx0XHRcdFx0ICBmaWxlc2F2ZXIgPSB0aGlzXG5cdFx0XHRcdCwgdHlwZSA9IGJsb2IudHlwZVxuXHRcdFx0XHQsIGZvcmNlID0gdHlwZSA9PT0gZm9yY2Vfc2F2ZWFibGVfdHlwZVxuXHRcdFx0XHQsIG9iamVjdF91cmxcblx0XHRcdFx0LCBkaXNwYXRjaF9hbGwgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRkaXNwYXRjaChmaWxlc2F2ZXIsIFwid3JpdGVzdGFydCBwcm9ncmVzcyB3cml0ZSB3cml0ZWVuZFwiLnNwbGl0KFwiIFwiKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gb24gYW55IGZpbGVzeXMgZXJyb3JzIHJldmVydCB0byBzYXZpbmcgd2l0aCBvYmplY3QgVVJMc1xuXHRcdFx0XHQsIGZzX2Vycm9yID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKChpc19jaHJvbWVfaW9zIHx8IChmb3JjZSAmJiBpc19zYWZhcmkpKSAmJiB2aWV3LkZpbGVSZWFkZXIpIHtcblx0XHRcdFx0XHRcdC8vIFNhZmFyaSBkb2Vzbid0IGFsbG93IGRvd25sb2FkaW5nIG9mIGJsb2IgdXJsc1xuXHRcdFx0XHRcdFx0dmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cdFx0XHRcdFx0XHRyZWFkZXIub25sb2FkZW5kID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB1cmwgPSBpc19jaHJvbWVfaW9zID8gcmVhZGVyLnJlc3VsdCA6IHJlYWRlci5yZXN1bHQucmVwbGFjZSgvXmRhdGE6W147XSo7LywgJ2RhdGE6YXR0YWNobWVudC9maWxlOycpO1xuXHRcdFx0XHRcdFx0XHR2YXIgcG9wdXAgPSB2aWV3Lm9wZW4odXJsLCAnX2JsYW5rJyk7XG5cdFx0XHRcdFx0XHRcdGlmKCFwb3B1cCkgdmlldy5sb2NhdGlvbi5ocmVmID0gdXJsO1xuXHRcdFx0XHRcdFx0XHR1cmw9dW5kZWZpbmVkOyAvLyByZWxlYXNlIHJlZmVyZW5jZSBiZWZvcmUgZGlzcGF0Y2hpbmdcblx0XHRcdFx0XHRcdFx0ZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuRE9ORTtcblx0XHRcdFx0XHRcdFx0ZGlzcGF0Y2hfYWxsKCk7XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0cmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XG5cdFx0XHRcdFx0XHRmaWxlc2F2ZXIucmVhZHlTdGF0ZSA9IGZpbGVzYXZlci5JTklUO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBkb24ndCBjcmVhdGUgbW9yZSBvYmplY3QgVVJMcyB0aGFuIG5lZWRlZFxuXHRcdFx0XHRcdGlmICghb2JqZWN0X3VybCkge1xuXHRcdFx0XHRcdFx0b2JqZWN0X3VybCA9IGdldF9VUkwoKS5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChmb3JjZSkge1xuXHRcdFx0XHRcdFx0dmlldy5sb2NhdGlvbi5ocmVmID0gb2JqZWN0X3VybDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dmFyIG9wZW5lZCA9IHZpZXcub3BlbihvYmplY3RfdXJsLCBcIl9ibGFua1wiKTtcblx0XHRcdFx0XHRcdGlmICghb3BlbmVkKSB7XG5cdFx0XHRcdFx0XHRcdC8vIEFwcGxlIGRvZXMgbm90IGFsbG93IHdpbmRvdy5vcGVuLCBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvc2FmYXJpL2RvY3VtZW50YXRpb24vVG9vbHMvQ29uY2VwdHVhbC9TYWZhcmlFeHRlbnNpb25HdWlkZS9Xb3JraW5nd2l0aFdpbmRvd3NhbmRUYWJzL1dvcmtpbmd3aXRoV2luZG93c2FuZFRhYnMuaHRtbFxuXHRcdFx0XHRcdFx0XHR2aWV3LmxvY2F0aW9uLmhyZWYgPSBvYmplY3RfdXJsO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRmaWxlc2F2ZXIucmVhZHlTdGF0ZSA9IGZpbGVzYXZlci5ET05FO1xuXHRcdFx0XHRcdGRpc3BhdGNoX2FsbCgpO1xuXHRcdFx0XHRcdHJldm9rZShvYmplY3RfdXJsKTtcblx0XHRcdFx0fVxuXHRcdFx0O1xuXHRcdFx0ZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuSU5JVDtcblxuXHRcdFx0aWYgKGNhbl91c2Vfc2F2ZV9saW5rKSB7XG5cdFx0XHRcdG9iamVjdF91cmwgPSBnZXRfVVJMKCkuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHNhdmVfbGluay5ocmVmID0gb2JqZWN0X3VybDtcblx0XHRcdFx0XHRzYXZlX2xpbmsuZG93bmxvYWQgPSBuYW1lO1xuXHRcdFx0XHRcdGNsaWNrKHNhdmVfbGluayk7XG5cdFx0XHRcdFx0ZGlzcGF0Y2hfYWxsKCk7XG5cdFx0XHRcdFx0cmV2b2tlKG9iamVjdF91cmwpO1xuXHRcdFx0XHRcdGZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLkRPTkU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGZzX2Vycm9yKCk7XG5cdFx0fVxuXHRcdCwgRlNfcHJvdG8gPSBGaWxlU2F2ZXIucHJvdG90eXBlXG5cdFx0LCBzYXZlQXMgPSBmdW5jdGlvbihibG9iLCBuYW1lLCBub19hdXRvX2JvbSkge1xuXHRcdFx0cmV0dXJuIG5ldyBGaWxlU2F2ZXIoYmxvYiwgbmFtZSB8fCBibG9iLm5hbWUgfHwgXCJkb3dubG9hZFwiLCBub19hdXRvX2JvbSk7XG5cdFx0fVxuXHQ7XG5cdC8vIElFIDEwKyAobmF0aXZlIHNhdmVBcylcblx0aWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiYgbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24oYmxvYiwgbmFtZSwgbm9fYXV0b19ib20pIHtcblx0XHRcdG5hbWUgPSBuYW1lIHx8IGJsb2IubmFtZSB8fCBcImRvd25sb2FkXCI7XG5cblx0XHRcdGlmICghbm9fYXV0b19ib20pIHtcblx0XHRcdFx0YmxvYiA9IGF1dG9fYm9tKGJsb2IpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKGJsb2IsIG5hbWUpO1xuXHRcdH07XG5cdH1cblxuXHRGU19wcm90by5hYm9ydCA9IGZ1bmN0aW9uKCl7fTtcblx0RlNfcHJvdG8ucmVhZHlTdGF0ZSA9IEZTX3Byb3RvLklOSVQgPSAwO1xuXHRGU19wcm90by5XUklUSU5HID0gMTtcblx0RlNfcHJvdG8uRE9ORSA9IDI7XG5cblx0RlNfcHJvdG8uZXJyb3IgPVxuXHRGU19wcm90by5vbndyaXRlc3RhcnQgPVxuXHRGU19wcm90by5vbnByb2dyZXNzID1cblx0RlNfcHJvdG8ub253cml0ZSA9XG5cdEZTX3Byb3RvLm9uYWJvcnQgPVxuXHRGU19wcm90by5vbmVycm9yID1cblx0RlNfcHJvdG8ub253cml0ZWVuZCA9XG5cdFx0bnVsbDtcblxuXHRyZXR1cm4gc2F2ZUFzO1xufShcblx0ICAgdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZlxuXHR8fCB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvd1xuXHR8fCB0aGlzLmNvbnRlbnRcbikpO1xuLy8gYHNlbGZgIGlzIHVuZGVmaW5lZCBpbiBGaXJlZm94IGZvciBBbmRyb2lkIGNvbnRlbnQgc2NyaXB0IGNvbnRleHRcbi8vIHdoaWxlIGB0aGlzYCBpcyBuc0lDb250ZW50RnJhbWVNZXNzYWdlTWFuYWdlclxuLy8gd2l0aCBhbiBhdHRyaWJ1dGUgYGNvbnRlbnRgIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHdpbmRvd1xuXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBtb2R1bGUuZXhwb3J0cykge1xuICBtb2R1bGUuZXhwb3J0cy5zYXZlQXMgPSBzYXZlQXM7XG59IGVsc2UgaWYgKCh0eXBlb2YgZGVmaW5lICE9PSBcInVuZGVmaW5lZFwiICYmIGRlZmluZSAhPT0gbnVsbCkgJiYgKGRlZmluZS5hbWQgIT09IG51bGwpKSB7XG4gIGRlZmluZShcIkZpbGVTYXZlci5qc1wiLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gc2F2ZUFzO1xuICB9KTtcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9maWxlLXNhdmVyL0ZpbGVTYXZlci5qc1xuLy8gbW9kdWxlIGlkID0gMTM4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2llZWU3NTQvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDEzOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuXHR2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLldyaXRlciA9IGV4cG9ydHMuVmV4RmxvdyA9IGV4cG9ydHMuVXRpbHMgPSBleHBvcnRzLlRyYWNrID0gZXhwb3J0cy5Qcm9ncmFtQ2hhbmdlRXZlbnQgPSBleHBvcnRzLk5vdGVPbkV2ZW50ID0gZXhwb3J0cy5Ob3RlT2ZmRXZlbnQgPSBleHBvcnRzLk5vdGVFdmVudCA9IGV4cG9ydHMuTWV0YUV2ZW50ID0gZXhwb3J0cy5Db250cm9sbGVyQ2hhbmdlRXZlbnQgPSBleHBvcnRzLkNvbnN0YW50cyA9IGV4cG9ydHMuQ2h1bmsgPSB1bmRlZmluZWQ7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxudmFyIF90b25hbE1pZGkgPSByZXF1aXJlKCd0b25hbC1taWRpJyk7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbi8qKlxuICogT2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjaHVuayBzZWN0aW9uIG9mIGEgTUlESSBmaWxlLlxuICogQHBhcmFtIHtvYmplY3R9IGZpZWxkcyAtIHt0eXBlOiBudW1iZXIsIGRhdGE6IGFycmF5LCBzaXplOiBhcnJheX1cbiAqIEByZXR1cm4ge0NodW5rfVxuICovXG52YXIgQ2h1bmsgPSBmdW5jdGlvbiBDaHVuayhmaWVsZHMpIHtcblx0X2NsYXNzQ2FsbENoZWNrKHRoaXMsIENodW5rKTtcblxuXHR0aGlzLnR5cGUgPSBmaWVsZHMudHlwZTtcblx0dGhpcy5kYXRhID0gZmllbGRzLmRhdGE7XG5cdHRoaXMuc2l6ZSA9IFswLCAwLCAwLCBmaWVsZHMuZGF0YS5sZW5ndGhdO1xufTtcblxuZXhwb3J0cy5DaHVuayA9IENodW5rO1xuLyoqXG4gKiBNSURJIGZpbGUgZm9ybWF0IGNvbnN0YW50cywgaW5jbHVkaW5nIG5vdGUgLT4gTUlESSBudW1iZXIgdHJhbnNsYXRpb24uXG4gKiBAcmV0dXJuIHtDb25zdGFudHN9XG4gKi9cblxudmFyIENvbnN0YW50cyA9IHtcblx0VkVSU0lPTjogJzEuNS4yJyxcblx0SEVBREVSX0NIVU5LX1RZUEU6IFsweDRkLCAweDU0LCAweDY4LCAweDY0XSwgLy8gTXRoZFxuXHRIRUFERVJfQ0hVTktfTEVOR1RIOiBbMHgwMCwgMHgwMCwgMHgwMCwgMHgwNl0sIC8vIEhlYWRlciBzaXplIGZvciBTTUZcblx0SEVBREVSX0NIVU5LX0ZPUk1BVDA6IFsweDAwLCAweDAwXSwgLy8gTWlkaSBUeXBlIDAgaWRcblx0SEVBREVSX0NIVU5LX0ZPUk1BVDE6IFsweDAwLCAweDAxXSwgLy8gTWlkaSBUeXBlIDEgaWRcblx0SEVBREVSX0NIVU5LX0RJVklTSU9OOiBbMHgwMCwgMHg4MF0sIC8vIERlZmF1bHRzIHRvIDEyOCB0aWNrcyBwZXIgYmVhdFxuXHRUUkFDS19DSFVOS19UWVBFOiBbMHg0ZCwgMHg1NCwgMHg3MiwgMHg2Yl0sIC8vIE1UcmssXG5cdE1FVEFfRVZFTlRfSUQ6IDB4RkYsXG5cdE1FVEFfVEVYVF9JRDogMHgwMSxcblx0TUVUQV9DT1BZUklHSFRfSUQ6IDB4MDIsXG5cdE1FVEFfVFJBQ0tfTkFNRV9JRDogMHgwMyxcblx0TUVUQV9JTlNUUlVNRU5UX05BTUVfSUQ6IDB4MDQsXG5cdE1FVEFfTFlSSUNfSUQ6IDB4MDUsXG5cdE1FVEFfTUFSS0VSX0lEOiAweDA2LFxuXHRNRVRBX0NVRV9QT0lOVDogMHgwNyxcblx0TUVUQV9URU1QT19JRDogMHg1MSxcblx0TUVUQV9TTVRQRV9PRkZTRVQ6IDB4NTQsXG5cdE1FVEFfVElNRV9TSUdOQVRVUkVfSUQ6IDB4NTgsXG5cdE1FVEFfS0VZX1NJR05BVFVSRV9JRDogMHg1OSxcblx0TUVUQV9FTkRfT0ZfVFJBQ0tfSUQ6IFsweDJGLCAweDAwXSxcblx0Q09OVFJPTExFUl9DSEFOR0VfU1RBVFVTOiAweEIwLCAvLyBpbmNsdWRlcyBjaGFubmVsIG51bWJlciAoMClcblx0UFJPR1JBTV9DSEFOR0VfU1RBVFVTOiAweEMwIC8vIGluY2x1ZGVzIGNoYW5uZWwgbnVtYmVyICgwKVxufTtcblxuZXhwb3J0cy5Db25zdGFudHMgPSBDb25zdGFudHM7XG4vKipcbiAqIEhvbGRzIGFsbCBkYXRhIGZvciBhIFwiY29udHJvbGxlciBjaGFuZ2VcIiBNSURJIGV2ZW50XG4gKiBAcGFyYW0ge29iamVjdH0gZmllbGRzIHtjb250cm9sbGVyTnVtYmVyOiBpbnRlZ2VyLCBjb250cm9sbGVyVmFsdWU6IGludGVnZXJ9XG4gKiBAcmV0dXJuIHtDb250cm9sbGVyQ2hhbmdlRXZlbnR9XG4gKi9cblxudmFyIENvbnRyb2xsZXJDaGFuZ2VFdmVudCA9IGZ1bmN0aW9uIENvbnRyb2xsZXJDaGFuZ2VFdmVudChmaWVsZHMpIHtcblx0X2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbnRyb2xsZXJDaGFuZ2VFdmVudCk7XG5cblx0dGhpcy50eXBlID0gJ2NvbnRyb2xsZXInO1xuXHQvLyBkZWx0YSB0aW1lIGRlZmF1bHRzIHRvIDAuXG5cdHRoaXMuZGF0YSA9IFV0aWxzLm51bWJlclRvVmFyaWFibGVMZW5ndGgoMHgwMCkuY29uY2F0KENvbnN0YW50cy5DT05UUk9MTEVSX0NIQU5HRV9TVEFUVVMsIGZpZWxkcy5jb250cm9sbGVyTnVtYmVyLCBmaWVsZHMuY29udHJvbGxlclZhbHVlKTtcbn07XG5cbmV4cG9ydHMuQ29udHJvbGxlckNoYW5nZUV2ZW50ID0gQ29udHJvbGxlckNoYW5nZUV2ZW50O1xuLyoqXG4gKiBPYmplY3QgcmVwcmVzZW50YXRpb24gb2YgYSBtZXRhIGV2ZW50LlxuICogQHBhcmFtIHtvYmplY3R9IGZpZWxkcyAtIHR5cGUsIGRhdGFcbiAqIEByZXR1cm4ge01ldGFFdmVudH1cbiAqL1xuXG52YXIgTWV0YUV2ZW50ID0gZnVuY3Rpb24gTWV0YUV2ZW50KGZpZWxkcykge1xuXHRfY2xhc3NDYWxsQ2hlY2sodGhpcywgTWV0YUV2ZW50KTtcblxuXHR0aGlzLnR5cGUgPSAnbWV0YSc7XG5cdHRoaXMuZGF0YSA9IFV0aWxzLm51bWJlclRvVmFyaWFibGVMZW5ndGgoMHgwMCk7IC8vIFN0YXJ0IHdpdGggemVybyB0aW1lIGRlbHRhXG5cdHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5jb25jYXQoQ29uc3RhbnRzLk1FVEFfRVZFTlRfSUQsIGZpZWxkcy5kYXRhKTtcbn07XG5cbmV4cG9ydHMuTWV0YUV2ZW50ID0gTWV0YUV2ZW50O1xuLyoqXG4gKiBXcmFwcGVyIGZvciBub3RlT25FdmVudC9ub3RlT2ZmRXZlbnQgb2JqZWN0cyB0aGF0IGJ1aWxkcyBib3RoIGV2ZW50cy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBmaWVsZHMgLSB7cGl0Y2g6ICdbQzRdJywgZHVyYXRpb246ICc0Jywgd2FpdDogJzQnLCB2ZWxvY2l0eTogMS0xMDB9XG4gKiBAcmV0dXJuIHtOb3RlRXZlbnR9XG4gKi9cblxudmFyIE5vdGVFdmVudCA9IGZ1bmN0aW9uICgpIHtcblx0ZnVuY3Rpb24gTm90ZUV2ZW50KGZpZWxkcykge1xuXHRcdF9jbGFzc0NhbGxDaGVjayh0aGlzLCBOb3RlRXZlbnQpO1xuXG5cdFx0dGhpcy50eXBlID0gJ25vdGUnO1xuXHRcdHRoaXMucGl0Y2ggPSBVdGlscy50b0FycmF5KGZpZWxkcy5waXRjaCk7XG5cdFx0dGhpcy53YWl0ID0gZmllbGRzLndhaXQgfHwgMDtcblx0XHR0aGlzLmR1cmF0aW9uID0gZmllbGRzLmR1cmF0aW9uO1xuXHRcdHRoaXMuc2VxdWVudGlhbCA9IGZpZWxkcy5zZXF1ZW50aWFsIHx8IGZhbHNlO1xuXHRcdHRoaXMudmVsb2NpdHkgPSBmaWVsZHMudmVsb2NpdHkgfHwgNTA7XG5cdFx0dGhpcy5jaGFubmVsID0gZmllbGRzLmNoYW5uZWwgfHwgMTtcblx0XHR0aGlzLnJlcGVhdCA9IGZpZWxkcy5yZXBlYXQgfHwgMTtcblx0XHR0aGlzLnZlbG9jaXR5ID0gdGhpcy5jb252ZXJ0VmVsb2NpdHkodGhpcy52ZWxvY2l0eSk7XG5cdFx0dGhpcy5ncmFjZSA9IGZpZWxkcy5ncmFjZTtcblx0XHR0aGlzLmJ1aWxkRGF0YSgpO1xuXHR9XG5cblx0LyoqXG4gICogQnVpbGRzIGludCBhcnJheSBmb3IgdGhpcyBldmVudC5cbiAgKiBAcmV0dXJuIHtOb3RlRXZlbnR9XG4gICovXG5cblxuXHRfY3JlYXRlQ2xhc3MoTm90ZUV2ZW50LCBbe1xuXHRcdGtleTogJ2J1aWxkRGF0YScsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGJ1aWxkRGF0YSgpIHtcblx0XHRcdHRoaXMuZGF0YSA9IFtdO1xuXG5cdFx0XHR2YXIgdGlja0R1cmF0aW9uID0gdGhpcy5nZXRUaWNrRHVyYXRpb24odGhpcy5kdXJhdGlvbiwgJ25vdGUnKTtcblx0XHRcdHZhciByZXN0RHVyYXRpb24gPSB0aGlzLmdldFRpY2tEdXJhdGlvbih0aGlzLndhaXQsICdyZXN0Jyk7XG5cblx0XHRcdC8vIEFwcGx5IGdyYWNlIG5vdGUocykgYW5kIHN1YnRyYWN0IHRpY2tzIChjdXJyZW50bHkgMSB0aWNrIHBlciBncmFjZSBub3RlKSBmcm9tIHRpY2tEdXJhdGlvbiBzbyBuZXQgdmFsdWUgaXMgdGhlIHNhbWVcblx0XHRcdGlmICh0aGlzLmdyYWNlKSB7XG5cdFx0XHRcdHZhciBncmFjZUR1cmF0aW9uID0gMTtcblx0XHRcdFx0dGhpcy5ncmFjZSA9IFV0aWxzLnRvQXJyYXkodGhpcy5ncmFjZSk7XG5cdFx0XHRcdHRoaXMuZ3JhY2UuZm9yRWFjaChmdW5jdGlvbiAocGl0Y2gpIHtcblx0XHRcdFx0XHR2YXIgbm90ZUV2ZW50ID0gbmV3IE5vdGVFdmVudCh7IHBpdGNoOiB0aGlzLmdyYWNlLCBkdXJhdGlvbjogJ1QnICsgZ3JhY2VEdXJhdGlvbiB9KTtcblx0XHRcdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEuY29uY2F0KG5vdGVFdmVudC5kYXRhKTtcblxuXHRcdFx0XHRcdHRpY2tEdXJhdGlvbiAtPSBncmFjZUR1cmF0aW9uO1xuXHRcdFx0XHR9LCB0aGlzKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gZmllbGRzLnBpdGNoIGNvdWxkIGJlIGFuIGFycmF5IG9mIHBpdGNoZXMuXG5cdFx0XHQvLyBJZiBzbyBjcmVhdGUgbm90ZSBldmVudHMgZm9yIGVhY2ggYW5kIGFwcGx5IHRoZSBzYW1lIGR1cmF0aW9uLlxuXHRcdFx0dmFyIG5vdGVPbiwgbm90ZU9mZjtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KHRoaXMucGl0Y2gpKSB7XG5cdFx0XHRcdC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyBhIGNob3JkIGlmIGl0J3MgYW4gYXJyYXkgb2Ygbm90ZXMgdGhhdCByZXF1aXJlcyBvbmUgTm90ZU9uRXZlbnQuXG5cdFx0XHRcdC8vIElmIHRoaXMuc2VxdWVudGlhbCA9PT0gdHJ1ZSB0aGVuIGl0J3MgYSBzZXF1ZW50aWFsIHN0cmluZyBvZiBub3RlcyB0aGF0IHJlcXVpcmVzIHNlcGFyYXRlIE5vdGVPbkV2ZW50cy5cblx0XHRcdFx0aWYgKCF0aGlzLnNlcXVlbnRpYWwpIHtcblx0XHRcdFx0XHQvLyBIYW5kbGUgcmVwZWF0XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLnJlcGVhdDsgaisrKSB7XG5cdFx0XHRcdFx0XHQvLyBOb3RlIG9uXG5cdFx0XHRcdFx0XHR0aGlzLnBpdGNoLmZvckVhY2goZnVuY3Rpb24gKHAsIGkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGkgPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdG5vdGVPbiA9IG5ldyBOb3RlT25FdmVudCh7IGRhdGE6IFV0aWxzLm51bWJlclRvVmFyaWFibGVMZW5ndGgocmVzdER1cmF0aW9uKS5jb25jYXQodGhpcy5nZXROb3RlT25TdGF0dXMoKSwgVXRpbHMuZ2V0UGl0Y2gocCksIHRoaXMudmVsb2NpdHkpIH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFJ1bm5pbmcgc3RhdHVzIChjYW4gb21taXQgdGhlIG5vdGUgb24gc3RhdHVzKVxuXHRcdFx0XHRcdFx0XHRcdG5vdGVPbiA9IG5ldyBOb3RlT25FdmVudCh7IGRhdGE6IFswLCBVdGlscy5nZXRQaXRjaChwKSwgdGhpcy52ZWxvY2l0eV0gfSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEuY29uY2F0KG5vdGVPbi5kYXRhKTtcblx0XHRcdFx0XHRcdH0sIHRoaXMpO1xuXG5cdFx0XHRcdFx0XHQvLyBOb3RlIG9mZlxuXHRcdFx0XHRcdFx0dGhpcy5waXRjaC5mb3JFYWNoKGZ1bmN0aW9uIChwLCBpKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChpID09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRub3RlT2ZmID0gbmV3IE5vdGVPZmZFdmVudCh7IGRhdGE6IFV0aWxzLm51bWJlclRvVmFyaWFibGVMZW5ndGgodGlja0R1cmF0aW9uKS5jb25jYXQodGhpcy5nZXROb3RlT2ZmU3RhdHVzKCksIFV0aWxzLmdldFBpdGNoKHApLCB0aGlzLnZlbG9jaXR5KSB9KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBSdW5uaW5nIHN0YXR1cyAoY2FuIG9tbWl0IHRoZSBub3RlIG9mZiBzdGF0dXMpXG5cdFx0XHRcdFx0XHRcdFx0bm90ZU9mZiA9IG5ldyBOb3RlT2ZmRXZlbnQoeyBkYXRhOiBbMCwgVXRpbHMuZ2V0UGl0Y2gocCksIHRoaXMudmVsb2NpdHldIH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5kYXRhID0gdGhpcy5kYXRhLmNvbmNhdChub3RlT2ZmLmRhdGEpO1xuXHRcdFx0XHRcdFx0fSwgdGhpcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIEhhbmRsZSByZXBlYXRcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMucmVwZWF0OyBqKyspIHtcblx0XHRcdFx0XHRcdHRoaXMucGl0Y2guZm9yRWFjaChmdW5jdGlvbiAocCwgaSkge1xuXHRcdFx0XHRcdFx0XHQvLyByZXN0RHVyYXRpb24gb25seSBhcHBsaWVzIHRvIGZpcnN0IG5vdGVcblx0XHRcdFx0XHRcdFx0aWYgKGkgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdER1cmF0aW9uID0gMDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIElmIGR1cmF0aW9uIGlzIDh0aCB0cmlwbGV0cyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB0b3RhbCB0aWNrcyA9PSBxdWFydGVyIG5vdGUuXG5cdFx0XHRcdFx0XHRcdC8vIFNvLCB0aGUgbGFzdCBvbmUgd2lsbCBuZWVkIHRvIGJlIHRoZSByZW1haW5kZXJcblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuZHVyYXRpb24gPT09ICc4dCcgJiYgaSA9PSB0aGlzLnBpdGNoLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcXVhcnRlclRpY2tzID0gVXRpbHMubnVtYmVyRnJvbUJ5dGVzKENvbnN0YW50cy5IRUFERVJfQ0hVTktfRElWSVNJT04pO1xuXHRcdFx0XHRcdFx0XHRcdHRpY2tEdXJhdGlvbiA9IHF1YXJ0ZXJUaWNrcyAtIHRpY2tEdXJhdGlvbiAqIDI7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRub3RlT24gPSBuZXcgTm90ZU9uRXZlbnQoeyBkYXRhOiBVdGlscy5udW1iZXJUb1ZhcmlhYmxlTGVuZ3RoKHJlc3REdXJhdGlvbikuY29uY2F0KFt0aGlzLmdldE5vdGVPblN0YXR1cygpLCBVdGlscy5nZXRQaXRjaChwKSwgdGhpcy52ZWxvY2l0eV0pIH0pO1xuXHRcdFx0XHRcdFx0XHRub3RlT2ZmID0gbmV3IE5vdGVPZmZFdmVudCh7IGRhdGE6IFV0aWxzLm51bWJlclRvVmFyaWFibGVMZW5ndGgodGlja0R1cmF0aW9uKS5jb25jYXQoW3RoaXMuZ2V0Tm90ZU9mZlN0YXR1cygpLCBVdGlscy5nZXRQaXRjaChwKSwgdGhpcy52ZWxvY2l0eV0pIH0pO1xuXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5jb25jYXQobm90ZU9uLmRhdGEsIG5vdGVPZmYuZGF0YSk7XG5cdFx0XHRcdFx0XHR9LCB0aGlzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgJ3BpdGNoIG11c3QgYmUgYW4gYXJyYXkuJztcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdjb252ZXJ0VmVsb2NpdHknLFxuXG5cblx0XHQvKipcbiAgICogQ29udmVydHMgdmVsb2NpdHkgdG8gdmFsdWUgMC0xMjdcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZlbG9jaXR5IC0gVmVsb2NpdHkgdmFsdWUgMS0xMDBcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cblx0XHR2YWx1ZTogZnVuY3Rpb24gY29udmVydFZlbG9jaXR5KHZlbG9jaXR5KSB7XG5cdFx0XHQvLyBNYXggcGFzc2VkIHZhbHVlIGxpbWl0ZWQgdG8gMTAwXG5cdFx0XHR2ZWxvY2l0eSA9IHZlbG9jaXR5ID4gMTAwID8gMTAwIDogdmVsb2NpdHk7XG5cdFx0XHRyZXR1cm4gTWF0aC5yb3VuZCh2ZWxvY2l0eSAvIDEwMCAqIDEyNyk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnZ2V0VGlja0R1cmF0aW9uJyxcblxuXG5cdFx0LyoqXG4gICAqIEdldHMgdGhlIHRvdGFsIG51bWJlciBvZiB0aWNrcyBiYXNlZCBvbiBwYXNzZWQgZHVyYXRpb24uXG4gICAqIE5vdGU6IHR5cGU9PSdub3RlJyBkZWZhdWx0cyB0byBxdWFydGVyIG5vdGUsIHR5cGU9PT0ncmVzdCcgZGVmYXVsdHMgdG8gMFxuICAgKiBAcGFyYW0geyhzdHJpbmd8YXJyYXkpfSBkdXJhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBbJ25vdGUnLCAncmVzdCddXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGdldFRpY2tEdXJhdGlvbihkdXJhdGlvbiwgdHlwZSkge1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoZHVyYXRpb24pKSB7XG5cdFx0XHRcdC8vIFJlY3Vyc2l2ZWx5IGV4ZWN1dGUgdGhpcyBtZXRob2QgZm9yIGVhY2ggaXRlbSBpbiB0aGUgYXJyYXkgYW5kIHJldHVybiB0aGUgc3VtIG9mIHRpY2sgZHVyYXRpb25zLlxuXHRcdFx0XHRyZXR1cm4gZHVyYXRpb24ubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmdldFRpY2tEdXJhdGlvbih2YWx1ZSwgdHlwZSk7XG5cdFx0XHRcdH0sIHRoaXMpLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuXHRcdFx0XHRcdHJldHVybiBhICsgYjtcblx0XHRcdFx0fSwgMCk7XG5cdFx0XHR9XG5cblx0XHRcdGR1cmF0aW9uID0gZHVyYXRpb24udG9TdHJpbmcoKTtcblxuXHRcdFx0aWYgKGR1cmF0aW9uLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAndCcpIHtcblx0XHRcdFx0Ly8gSWYgZHVyYXRpb24gc3RhcnRzIHdpdGggJ3QnIHRoZW4gdGhlIG51bWJlciB0aGF0IGZvbGxvd3MgaXMgYW4gZXhwbGljaXQgdGljayBjb3VudFxuXHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoZHVyYXRpb24uc3Vic3RyaW5nKDEpKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTmVlZCB0byBhcHBseSBkdXJhdGlvbiBoZXJlLiAgUXVhcnRlciBub3RlID09IENvbnN0YW50cy5IRUFERVJfQ0hVTktfRElWSVNJT05cblx0XHRcdC8vIFJvdW5kaW5nIG9ubHkgYXBwbGllcyB0byB0cmlwbGV0cywgd2hpY2ggdGhlIHJlbWFpbmRlciBpcyBoYW5kbGVkIGJlbG93XG5cdFx0XHR2YXIgcXVhcnRlclRpY2tzID0gVXRpbHMubnVtYmVyRnJvbUJ5dGVzKENvbnN0YW50cy5IRUFERVJfQ0hVTktfRElWSVNJT04pO1xuXHRcdFx0cmV0dXJuIE1hdGgucm91bmQocXVhcnRlclRpY2tzICogdGhpcy5nZXREdXJhdGlvbk11bHRpcGxpZXIoZHVyYXRpb24sIHR5cGUpKTtcblx0XHR9XG5cblx0XHQvKipcbiAgICogR2V0cyB3aGF0IHRvIG11bHRpcGxlIHRpY2tzL3F1YXJ0ZXIgbm90ZSBieSB0byBnZXQgdGhlIHNwZWNpZmllZCBkdXJhdGlvbi5cbiAgICogTm90ZTogdHlwZT09J25vdGUnIGRlZmF1bHRzIHRvIHF1YXJ0ZXIgbm90ZSwgdHlwZT09PSdyZXN0JyBkZWZhdWx0cyB0byAwXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkdXJhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBbJ25vdGUnLCdyZXN0J11cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cblxuXHR9LCB7XG5cdFx0a2V5OiAnZ2V0RHVyYXRpb25NdWx0aXBsaWVyJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gZ2V0RHVyYXRpb25NdWx0aXBsaWVyKGR1cmF0aW9uLCB0eXBlKSB7XG5cdFx0XHQvLyBOZWVkIHRvIGFwcGx5IGR1cmF0aW9uIGhlcmUuICBRdWFydGVyIG5vdGUgPT0gQ29uc3RhbnRzLkhFQURFUl9DSFVOS19ESVZJU0lPTlxuXHRcdFx0c3dpdGNoIChkdXJhdGlvbikge1xuXHRcdFx0XHRjYXNlICcwJzpcblx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0Y2FzZSAnMSc6XG5cdFx0XHRcdFx0cmV0dXJuIDQ7XG5cdFx0XHRcdGNhc2UgJzInOlxuXHRcdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0XHRjYXNlICdkMic6XG5cdFx0XHRcdFx0cmV0dXJuIDM7XG5cdFx0XHRcdGNhc2UgJzQnOlxuXHRcdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0XHRjYXNlICc0dCc6XG5cdFx0XHRcdFx0cmV0dXJuIDAuNjY2O1xuXHRcdFx0XHRjYXNlICdkNCc6XG5cdFx0XHRcdFx0cmV0dXJuIDEuNTtcblx0XHRcdFx0Y2FzZSAnOCc6XG5cdFx0XHRcdFx0cmV0dXJuIDAuNTtcblx0XHRcdFx0Y2FzZSAnOHQnOlxuXHRcdFx0XHRcdC8vIEZvciA4dGggdHJpcGxldHMsIGxldCdzIGRpdmlkZSBhIHF1YXJ0ZXIgYnkgMywgcm91bmQgdG8gdGhlIG5lYXJlc3QgaW50LCBhbmQgc3Vic3RyYWN0IHRoZSByZW1haW5kZXIgdG8gdGhlIGxhc3Qgb25lLlxuXHRcdFx0XHRcdHJldHVybiAwLjMzO1xuXHRcdFx0XHRjYXNlICdkOCc6XG5cdFx0XHRcdFx0cmV0dXJuIDAuNzU7XG5cdFx0XHRcdGNhc2UgJzE2Jzpcblx0XHRcdFx0XHRyZXR1cm4gMC4yNTtcblx0XHRcdFx0Y2FzZSAnMTZ0Jzpcblx0XHRcdFx0XHRyZXR1cm4gMC4xNjY7XG5cdFx0XHRcdGNhc2UgJzMyJzpcblx0XHRcdFx0XHRyZXR1cm4gMC4xMjU7XG5cdFx0XHRcdGNhc2UgJzY0Jzpcblx0XHRcdFx0XHRyZXR1cm4gMC4wNjI1O1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHQvLyBOb3RlcyBkZWZhdWx0IHRvIGEgcXVhcnRlciwgcmVzdHMgZGVmYXVsdCB0byAwXG5cdFx0XHRcdC8vcmV0dXJuIHR5cGUgPT09ICdub3RlJyA/IDEgOiAwO1xuXHRcdFx0fVxuXG5cdFx0XHR0aHJvdyBkdXJhdGlvbiArICcgaXMgbm90IGEgdmFsaWQgZHVyYXRpb24uJztcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdnZXROb3RlT25TdGF0dXMnLFxuXG5cblx0XHQvKipcbiAgICogR2V0cyB0aGUgbm90ZSBvbiBzdGF0dXMgY29kZSBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQgY2hhbm5lbC4gMHg5ezAtRn1cbiAgICogTm90ZSBvbiBhdCBjaGFubmVsIDAgaXMgMHg5MCAoMTQ0KVxuICAgKiAwID0gQ2ggMVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBnZXROb3RlT25TdGF0dXMoKSB7XG5cdFx0XHRyZXR1cm4gMTQ0ICsgdGhpcy5jaGFubmVsIC0gMTtcblx0XHR9XG5cblx0XHQvKipcbiAgICogR2V0cyB0aGUgbm90ZSBvZmYgc3RhdHVzIGNvZGUgYmFzZWQgb24gdGhlIHNlbGVjdGVkIGNoYW5uZWwuIDB4OHswLUZ9XG4gICAqIE5vdGUgb2ZmIGF0IGNoYW5uZWwgMCBpcyAweDgwICgxMjgpXG4gICAqIDAgPSBDaCAxXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG5cblx0fSwge1xuXHRcdGtleTogJ2dldE5vdGVPZmZTdGF0dXMnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBnZXROb3RlT2ZmU3RhdHVzKCkge1xuXHRcdFx0cmV0dXJuIDEyOCArIHRoaXMuY2hhbm5lbCAtIDE7XG5cdFx0fVxuXHR9XSk7XG5cblx0cmV0dXJuIE5vdGVFdmVudDtcbn0oKTtcblxuZXhwb3J0cy5Ob3RlRXZlbnQgPSBOb3RlRXZlbnQ7XG4vKipcbiAqIEhvbGRzIGFsbCBkYXRhIGZvciBhIFwibm90ZSBvZmZcIiBNSURJIGV2ZW50XG4gKiBAcGFyYW0ge29iamVjdH0gZmllbGRzIHtkYXRhOiBbXX1cbiAqIEByZXR1cm4ge05vdGVPZmZFdmVudH1cbiAqL1xuXG52YXIgTm90ZU9mZkV2ZW50ID0gZnVuY3Rpb24gTm90ZU9mZkV2ZW50KGZpZWxkcykge1xuXHRfY2xhc3NDYWxsQ2hlY2sodGhpcywgTm90ZU9mZkV2ZW50KTtcblxuXHR0aGlzLmRhdGEgPSBmaWVsZHMuZGF0YTtcbn07XG5cbmV4cG9ydHMuTm90ZU9mZkV2ZW50ID0gTm90ZU9mZkV2ZW50O1xuLyoqXG4gKiBIb2xkcyBhbGwgZGF0YSBmb3IgYSBcIm5vdGUgb25cIiBNSURJIGV2ZW50XG4gKiBAcGFyYW0ge29iamVjdH0gZmllbGRzIHtkYXRhOiBbXX1cbiAqIEByZXR1cm4ge05vdGVPbkV2ZW50fVxuICovXG5cbnZhciBOb3RlT25FdmVudCA9IGZ1bmN0aW9uIE5vdGVPbkV2ZW50KGZpZWxkcykge1xuXHRfY2xhc3NDYWxsQ2hlY2sodGhpcywgTm90ZU9uRXZlbnQpO1xuXG5cdHRoaXMuZGF0YSA9IGZpZWxkcy5kYXRhO1xufTtcblxuZXhwb3J0cy5Ob3RlT25FdmVudCA9IE5vdGVPbkV2ZW50O1xuLyoqXG4gKiBIb2xkcyBhbGwgZGF0YSBmb3IgYSBcInByb2dyYW0gY2hhbmdlXCIgTUlESSBldmVudFxuICogQHBhcmFtIHtvYmplY3R9IGZpZWxkcyB7aW5zdHJ1bWVudDogaW50ZWdlcn1cbiAqIEByZXR1cm4ge1Byb2dyYW1DaGFuZ2VFdmVudH1cbiAqL1xuXG52YXIgUHJvZ3JhbUNoYW5nZUV2ZW50ID0gZnVuY3Rpb24gUHJvZ3JhbUNoYW5nZUV2ZW50KGZpZWxkcykge1xuXHRfY2xhc3NDYWxsQ2hlY2sodGhpcywgUHJvZ3JhbUNoYW5nZUV2ZW50KTtcblxuXHR0aGlzLnR5cGUgPSAncHJvZ3JhbSc7XG5cdC8vIGRlbHRhIHRpbWUgZGVmYXVsdHMgdG8gMC5cblx0dGhpcy5kYXRhID0gVXRpbHMubnVtYmVyVG9WYXJpYWJsZUxlbmd0aCgweDAwKS5jb25jYXQoQ29uc3RhbnRzLlBST0dSQU1fQ0hBTkdFX1NUQVRVUywgZmllbGRzLmluc3RydW1lbnQpO1xufTtcblxuZXhwb3J0cy5Qcm9ncmFtQ2hhbmdlRXZlbnQgPSBQcm9ncmFtQ2hhbmdlRXZlbnQ7XG4vKipcbiAqIEhvbGRzIGFsbCBkYXRhIGZvciBhIHRyYWNrLlxuICogQHBhcmFtIHtvYmplY3R9IGZpZWxkcyB7dHlwZTogbnVtYmVyLCBkYXRhOiBhcnJheSwgc2l6ZTogYXJyYXksIGV2ZW50czogYXJyYXl9XG4gKiBAcmV0dXJuIHtUcmFja31cbiAqL1xuXG52YXIgVHJhY2sgPSBmdW5jdGlvbiAoKSB7XG5cdGZ1bmN0aW9uIFRyYWNrKCkge1xuXHRcdF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcmFjayk7XG5cblx0XHR0aGlzLnR5cGUgPSBDb25zdGFudHMuVFJBQ0tfQ0hVTktfVFlQRTtcblx0XHR0aGlzLmRhdGEgPSBbXTtcblx0XHR0aGlzLnNpemUgPSBbXTtcblx0XHR0aGlzLmV2ZW50cyA9IFtdO1xuXHR9XG5cblx0LyoqXG4gICogQWRkcyBhbnkgZXZlbnQgdHlwZSB0byB0aGUgdHJhY2suXG4gICogQHBhcmFtIHsoTm90ZUV2ZW50fE1ldGFFdmVudHxQcm9ncmFtQ2hhbmdlRXZlbnQpfSBldmVudCAtIEV2ZW50IG9iamVjdC5cbiAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtYXBGdW5jdGlvbiAtIENhbGxiYWNrIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGFwcGx5IHNwZWNpZmljIHByb3BlcnRpZXMgdG8gYWxsIGV2ZW50cy4gXG4gICogQHJldHVybiB7VHJhY2t9XG4gICovXG5cblxuXHRfY3JlYXRlQ2xhc3MoVHJhY2ssIFt7XG5cdFx0a2V5OiAnYWRkRXZlbnQnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBhZGRFdmVudChldmVudCwgbWFwRnVuY3Rpb24pIHtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSkge1xuXHRcdFx0XHRldmVudC5mb3JFYWNoKGZ1bmN0aW9uIChlLCBpKSB7XG5cdFx0XHRcdFx0Ly8gSGFuZGxlIG1hcCBmdW5jdGlvbiBpZiBwcm92aWRlZFxuXHRcdFx0XHRcdGlmICh0eXBlb2YgbWFwRnVuY3Rpb24gPT09ICdmdW5jdGlvbicgJiYgZS50eXBlID09PSAnbm90ZScpIHtcblx0XHRcdFx0XHRcdHZhciBwcm9wZXJ0aWVzID0gbWFwRnVuY3Rpb24oaSwgZSk7XG5cblx0XHRcdFx0XHRcdGlmICgodHlwZW9mIHByb3BlcnRpZXMgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKHByb3BlcnRpZXMpKSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiBpbiBwcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdFx0XHRcdFx0c3dpdGNoIChqKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGUuZHVyYXRpb24gPSBwcm9wZXJ0aWVzW2pdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJ3NlcXVlbnRpYWwnOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlLnNlcXVlbnRpYWwgPSBwcm9wZXJ0aWVzW2pdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJ3ZlbG9jaXR5Jzpcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZS52ZWxvY2l0eSA9IGUuY29udmVydFZlbG9jaXR5KHByb3BlcnRpZXNbal0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyBHb3R0YSBidWlsZCB0aGF0IGRhdGFcblx0XHRcdFx0XHRcdFx0ZS5idWlsZERhdGEoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEuY29uY2F0KGUuZGF0YSk7XG5cdFx0XHRcdFx0dGhpcy5zaXplID0gVXRpbHMubnVtYmVyVG9CeXRlcyh0aGlzLmRhdGEubGVuZ3RoLCA0KTsgLy8gNCBieXRlcyBsb25nXG5cdFx0XHRcdFx0dGhpcy5ldmVudHMucHVzaChlKTtcblx0XHRcdFx0fSwgdGhpcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEuY29uY2F0KGV2ZW50LmRhdGEpO1xuXHRcdFx0XHR0aGlzLnNpemUgPSBVdGlscy5udW1iZXJUb0J5dGVzKHRoaXMuZGF0YS5sZW5ndGgsIDQpOyAvLyA0IGJ5dGVzIGxvbmdcblx0XHRcdFx0dGhpcy5ldmVudHMucHVzaChldmVudCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdC8qKlxuICAgKiBTZXRzIHRlbXBvIG9mIHRoZSBNSURJIGZpbGUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBicG0gLSBUZW1wbyBpbiBiZWF0cyBwZXIgbWludXRlLlxuICAgKiBAcmV0dXJuIHtUcmFja31cbiAgICovXG5cblx0fSwge1xuXHRcdGtleTogJ3NldFRlbXBvJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gc2V0VGVtcG8oYnBtKSB7XG5cdFx0XHR2YXIgZXZlbnQgPSBuZXcgTWV0YUV2ZW50KHsgZGF0YTogW0NvbnN0YW50cy5NRVRBX1RFTVBPX0lEXSB9KTtcblx0XHRcdGV2ZW50LmRhdGEucHVzaCgweDAzKTsgLy8gU2l6ZVxuXHRcdFx0dmFyIHRlbXBvID0gTWF0aC5yb3VuZCg2MDAwMDAwMCAvIGJwbSk7XG5cdFx0XHRldmVudC5kYXRhID0gZXZlbnQuZGF0YS5jb25jYXQoVXRpbHMubnVtYmVyVG9CeXRlcyh0ZW1wbywgMykpOyAvLyBUZW1wbywgMyBieXRlc1xuXHRcdFx0cmV0dXJuIHRoaXMuYWRkRXZlbnQoZXZlbnQpO1xuXHRcdH1cblxuXHRcdC8qKlxuICAgKiBTZXRzIHRpbWUgc2lnbmF0dXJlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtZXJhdG9yIC0gVG9wIG51bWJlciBvZiB0aGUgdGltZSBzaWduYXR1cmUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZW5vbWluYXRvciAtIEJvdHRvbSBudW1iZXIgb2YgdGhlIHRpbWUgc2lnbmF0dXJlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbWlkaWNsb2Nrc3BlcnRpY2sgLSBEZWZhdWx0cyB0byAyNC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG5vdGVzcGVybWlkaWNsb2NrIC0gRGVmYXVsdHMgdG8gOC5cbiAgICogQHJldHVybiB7VHJhY2t9XG4gICAqL1xuXG5cdH0sIHtcblx0XHRrZXk6ICdzZXRUaW1lU2lnbmF0dXJlJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gc2V0VGltZVNpZ25hdHVyZShudW1lcmF0b3IsIGRlbm9taW5hdG9yLCBtaWRpY2xvY2tzcGVydGljaywgbm90ZXNwZXJtaWRpY2xvY2spIHtcblx0XHRcdG1pZGljbG9ja3NwZXJ0aWNrID0gbWlkaWNsb2Nrc3BlcnRpY2sgfHwgMjQ7XG5cdFx0XHRub3Rlc3Blcm1pZGljbG9jayA9IG5vdGVzcGVybWlkaWNsb2NrIHx8IDg7XG5cblx0XHRcdHZhciBldmVudCA9IG5ldyBNZXRhRXZlbnQoeyBkYXRhOiBbQ29uc3RhbnRzLk1FVEFfVElNRV9TSUdOQVRVUkVfSURdIH0pO1xuXHRcdFx0ZXZlbnQuZGF0YS5wdXNoKDB4MDQpOyAvLyBTaXplXG5cdFx0XHRldmVudC5kYXRhID0gZXZlbnQuZGF0YS5jb25jYXQoVXRpbHMubnVtYmVyVG9CeXRlcyhudW1lcmF0b3IsIDEpKTsgLy8gTnVtZXJhdG9yLCAxIGJ5dGVzXG5cblx0XHRcdHZhciBfZGVub21pbmF0b3IgPSBNYXRoLmxvZzIoZGVub21pbmF0b3IpOyAvLyBEZW5vbWluYXRvciBpcyBleHByZXNzZWQgYXMgcG93IG9mIDJcblx0XHRcdGV2ZW50LmRhdGEgPSBldmVudC5kYXRhLmNvbmNhdChVdGlscy5udW1iZXJUb0J5dGVzKF9kZW5vbWluYXRvciwgMSkpOyAvLyBEZW5vbWluYXRvciwgMSBieXRlc1xuXHRcdFx0ZXZlbnQuZGF0YSA9IGV2ZW50LmRhdGEuY29uY2F0KFV0aWxzLm51bWJlclRvQnl0ZXMobWlkaWNsb2Nrc3BlcnRpY2ssIDEpKTsgLy8gTUlESSBDbG9ja3MgcGVyIHRpY2ssIDEgYnl0ZXNcblx0XHRcdGV2ZW50LmRhdGEgPSBldmVudC5kYXRhLmNvbmNhdChVdGlscy5udW1iZXJUb0J5dGVzKG5vdGVzcGVybWlkaWNsb2NrLCAxKSk7IC8vIE51bWJlciBvZiAxLzMyIG5vdGVzIHBlciBNSURJIGNsb2NrcywgMSBieXRlc1xuXHRcdFx0cmV0dXJuIHRoaXMuYWRkRXZlbnQoZXZlbnQpO1xuXHRcdH1cblxuXHRcdC8qKlxuICAgKiBTZXRzIGtleSBzaWduYXR1cmUuXG4gICAqIEBwYXJhbSB7Kn0gc2YgLSBcbiAgICogQHBhcmFtIHsqfSBtaSAtXG4gICAqIEByZXR1cm4ge1RyYWNrfVxuICAgKi9cblxuXHR9LCB7XG5cdFx0a2V5OiAnc2V0S2V5U2lnbmF0dXJlJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gc2V0S2V5U2lnbmF0dXJlKHNmLCBtaSkge1xuXHRcdFx0dmFyIGV2ZW50ID0gbmV3IE1ldGFFdmVudCh7IGRhdGE6IFtDb25zdGFudHMuTUVUQV9LRVlfU0lHTkFUVVJFX0lEXSB9KTtcblx0XHRcdGV2ZW50LmRhdGEucHVzaCgweDAyKTsgLy8gU2l6ZVxuXG5cdFx0XHR2YXIgbW9kZSA9IG1pIHx8IDA7XG5cdFx0XHRzZiA9IHNmIHx8IDA7XG5cblx0XHRcdC8vXHRGdW5jdGlvbiBjYWxsZWQgd2l0aCBzdHJpbmcgbm90YXRpb25cblx0XHRcdGlmICh0eXBlb2YgbWkgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHZhciBmaWZ0aHMgPSBbWydDYicsICdHYicsICdEYicsICdBYicsICdFYicsICdCYicsICdGJywgJ0MnLCAnRycsICdEJywgJ0EnLCAnRScsICdCJywgJ0YjJywgJ0MjJ10sIFsnYWInLCAnZWInLCAnYmInLCAnZicsICdjJywgJ2cnLCAnZCcsICdhJywgJ2UnLCAnYicsICdmIycsICdjIycsICdnIycsICdkIycsICdhIyddXTtcblx0XHRcdFx0dmFyIF9zZmxlbiA9IHNmLmxlbmd0aDtcblx0XHRcdFx0dmFyIG5vdGUgPSBzZiB8fCAnQyc7XG5cblx0XHRcdFx0aWYgKHNmWzBdID09PSBzZlswXS50b0xvd2VyQ2FzZSgpKSBtb2RlID0gMTtcblxuXHRcdFx0XHRpZiAoX3NmbGVuID4gMSkge1xuXHRcdFx0XHRcdHN3aXRjaCAoc2YuY2hhckF0KF9zZmxlbiAtIDEpKSB7XG5cdFx0XHRcdFx0XHRjYXNlICdtJzpcblx0XHRcdFx0XHRcdFx0bW9kZSA9IDE7XG5cdFx0XHRcdFx0XHRcdG5vdGUgPSBzZi5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRcdFx0bm90ZSA9IG5vdGUuY29uY2F0KHNmLnN1YnN0cmluZygxLCBfc2ZsZW4gLSAxKSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnLSc6XG5cdFx0XHRcdFx0XHRcdG1vZGUgPSAxO1xuXHRcdFx0XHRcdFx0XHRub3RlID0gc2YuY2hhckF0KDApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRcdG5vdGUgPSBub3RlLmNvbmNhdChzZi5zdWJzdHJpbmcoMSwgX3NmbGVuIC0gMSkpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ00nOlxuXHRcdFx0XHRcdFx0XHRtb2RlID0gMDtcblx0XHRcdFx0XHRcdFx0bm90ZSA9IHNmLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0XHRub3RlID0gbm90ZS5jb25jYXQoc2Yuc3Vic3RyaW5nKDEsIF9zZmxlbiAtIDEpKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICcrJzpcblx0XHRcdFx0XHRcdFx0bW9kZSA9IDA7XG5cdFx0XHRcdFx0XHRcdG5vdGUgPSBzZi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTtcblx0XHRcdFx0XHRcdFx0bm90ZSA9IG5vdGUuY29uY2F0KHNmLnN1YnN0cmluZygxLCBfc2ZsZW4gLSAxKSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBmaWZ0aGluZGV4ID0gZmlmdGhzW21vZGVdLmluZGV4T2Yobm90ZSk7XG5cdFx0XHRcdHNmID0gZmlmdGhpbmRleCA9PT0gLTEgPyAwIDogZmlmdGhpbmRleCAtIDc7XG5cdFx0XHR9XG5cblx0XHRcdGV2ZW50LmRhdGEgPSBldmVudC5kYXRhLmNvbmNhdChVdGlscy5udW1iZXJUb0J5dGVzKHNmLCAxKSk7IC8vIE51bWJlciBvZiBzaGFycCBvciBmbGF0cyAoIDwgMCBmbGF0OyA+IDAgc2hhcnApXG5cdFx0XHRldmVudC5kYXRhID0gZXZlbnQuZGF0YS5jb25jYXQoVXRpbHMubnVtYmVyVG9CeXRlcyhtb2RlLCAxKSk7IC8vIE1vZGU6IDAgbWFqb3IsIDEgbWlub3Jcblx0XHRcdHJldHVybiB0aGlzLmFkZEV2ZW50KGV2ZW50KTtcblx0XHR9XG5cblx0XHQvKipcbiAgICogQWRkcyB0ZXh0IHRvIE1JREkgZmlsZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUZXh0IHRvIGFkZC5cbiAgICogQHJldHVybiB7VHJhY2t9XG4gICAqL1xuXG5cdH0sIHtcblx0XHRrZXk6ICdhZGRUZXh0Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gYWRkVGV4dCh0ZXh0KSB7XG5cdFx0XHR2YXIgZXZlbnQgPSBuZXcgTWV0YUV2ZW50KHsgZGF0YTogW0NvbnN0YW50cy5NRVRBX1RFWFRfSURdIH0pO1xuXHRcdFx0dmFyIHN0cmluZ0J5dGVzID0gVXRpbHMuc3RyaW5nVG9CeXRlcyh0ZXh0KTtcblx0XHRcdGV2ZW50LmRhdGEgPSBldmVudC5kYXRhLmNvbmNhdChVdGlscy5udW1iZXJUb1ZhcmlhYmxlTGVuZ3RoKHN0cmluZ0J5dGVzLmxlbmd0aCkpOyAvLyBTaXplXG5cdFx0XHRldmVudC5kYXRhID0gZXZlbnQuZGF0YS5jb25jYXQoc3RyaW5nQnl0ZXMpOyAvLyBUZXh0XG5cdFx0XHRyZXR1cm4gdGhpcy5hZGRFdmVudChldmVudCk7XG5cdFx0fVxuXG5cdFx0LyoqXG4gICAqIEFkZHMgY29weXJpZ2h0IHRvIE1JREkgZmlsZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUZXh0IG9mIGNvcHlyaWdodCBsaW5lLlxuICAgKiBAcmV0dXJuIHtUcmFja31cbiAgICovXG5cblx0fSwge1xuXHRcdGtleTogJ2FkZENvcHlyaWdodCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGFkZENvcHlyaWdodCh0ZXh0KSB7XG5cdFx0XHR2YXIgZXZlbnQgPSBuZXcgTWV0YUV2ZW50KHsgZGF0YTogW0NvbnN0YW50cy5NRVRBX0NPUFlSSUdIVF9JRF0gfSk7XG5cdFx0XHR2YXIgc3RyaW5nQnl0ZXMgPSBVdGlscy5zdHJpbmdUb0J5dGVzKHRleHQpO1xuXHRcdFx0ZXZlbnQuZGF0YSA9IGV2ZW50LmRhdGEuY29uY2F0KFV0aWxzLm51bWJlclRvVmFyaWFibGVMZW5ndGgoc3RyaW5nQnl0ZXMubGVuZ3RoKSk7IC8vIFNpemVcblx0XHRcdGV2ZW50LmRhdGEgPSBldmVudC5kYXRhLmNvbmNhdChzdHJpbmdCeXRlcyk7IC8vIFRleHRcblx0XHRcdHJldHVybiB0aGlzLmFkZEV2ZW50KGV2ZW50KTtcblx0XHR9XG5cblx0XHQvKipcbiAgICogQWRkcyBTZXF1ZW5jZS9UcmFjayBOYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRleHQgb2YgdHJhY2sgbmFtZS5cbiAgICogQHJldHVybiB7VHJhY2t9XG4gICAqL1xuXG5cdH0sIHtcblx0XHRrZXk6ICdhZGRUcmFja05hbWUnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBhZGRUcmFja05hbWUodGV4dCkge1xuXHRcdFx0dmFyIGV2ZW50ID0gbmV3IE1ldGFFdmVudCh7IGRhdGE6IFtDb25zdGFudHMuTUVUQV9UUkFDS19OQU1FX0lEXSB9KTtcblx0XHRcdHZhciBzdHJpbmdCeXRlcyA9IFV0aWxzLnN0cmluZ1RvQnl0ZXModGV4dCk7XG5cdFx0XHRldmVudC5kYXRhID0gZXZlbnQuZGF0YS5jb25jYXQoVXRpbHMubnVtYmVyVG9WYXJpYWJsZUxlbmd0aChzdHJpbmdCeXRlcy5sZW5ndGgpKTsgLy8gU2l6ZVxuXHRcdFx0ZXZlbnQuZGF0YSA9IGV2ZW50LmRhdGEuY29uY2F0KHN0cmluZ0J5dGVzKTsgLy8gVGV4dFxuXHRcdFx0cmV0dXJuIHRoaXMuYWRkRXZlbnQoZXZlbnQpO1xuXHRcdH1cblxuXHRcdC8qKlxuICAgKiBTZXRzIGluc3RydW1lbnQgbmFtZSBvZiB0cmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBOYW1lIG9mIGluc3RydW1lbnQuXG4gICAqIEByZXR1cm4ge1RyYWNrfVxuICAgKi9cblxuXHR9LCB7XG5cdFx0a2V5OiAnYWRkSW5zdHJ1bWVudE5hbWUnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBhZGRJbnN0cnVtZW50TmFtZSh0ZXh0KSB7XG5cdFx0XHR2YXIgZXZlbnQgPSBuZXcgTWV0YUV2ZW50KHsgZGF0YTogW0NvbnN0YW50cy5NRVRBX0lOU1RSVU1FTlRfTkFNRV9JRF0gfSk7XG5cdFx0XHR2YXIgc3RyaW5nQnl0ZXMgPSBVdGlscy5zdHJpbmdUb0J5dGVzKHRleHQpO1xuXHRcdFx0ZXZlbnQuZGF0YSA9IGV2ZW50LmRhdGEuY29uY2F0KFV0aWxzLm51bWJlclRvVmFyaWFibGVMZW5ndGgoc3RyaW5nQnl0ZXMubGVuZ3RoKSk7IC8vIFNpemVcblx0XHRcdGV2ZW50LmRhdGEgPSBldmVudC5kYXRhLmNvbmNhdChzdHJpbmdCeXRlcyk7IC8vIFRleHRcblx0XHRcdHJldHVybiB0aGlzLmFkZEV2ZW50KGV2ZW50KTtcblx0XHR9XG5cblx0XHQvKipcbiAgICogQWRkcyBtYXJrZXIgdG8gTUlESSBmaWxlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIE1hcmtlciB0ZXh0LlxuICAgKiBAcmV0dXJuIHtUcmFja31cbiAgICovXG5cblx0fSwge1xuXHRcdGtleTogJ2FkZE1hcmtlcicsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGFkZE1hcmtlcih0ZXh0KSB7XG5cdFx0XHR2YXIgZXZlbnQgPSBuZXcgTWV0YUV2ZW50KHsgZGF0YTogW0NvbnN0YW50cy5NRVRBX01BUktFUl9JRF0gfSk7XG5cdFx0XHR2YXIgc3RyaW5nQnl0ZXMgPSBVdGlscy5zdHJpbmdUb0J5dGVzKHRleHQpO1xuXHRcdFx0ZXZlbnQuZGF0YSA9IGV2ZW50LmRhdGEuY29uY2F0KFV0aWxzLm51bWJlclRvVmFyaWFibGVMZW5ndGgoc3RyaW5nQnl0ZXMubGVuZ3RoKSk7IC8vIFNpemVcblx0XHRcdGV2ZW50LmRhdGEgPSBldmVudC5kYXRhLmNvbmNhdChzdHJpbmdCeXRlcyk7IC8vIFRleHRcblx0XHRcdHJldHVybiB0aGlzLmFkZEV2ZW50KGV2ZW50KTtcblx0XHR9XG5cblx0XHQvKipcbiAgICogQWRkcyBjdWUgcG9pbnQgdG8gTUlESSBmaWxlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRleHQgb2YgY3VlIHBvaW50LlxuICAgKiBAcmV0dXJuIHtUcmFja31cbiAgICovXG5cblx0fSwge1xuXHRcdGtleTogJ2FkZEN1ZVBvaW50Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gYWRkQ3VlUG9pbnQodGV4dCkge1xuXHRcdFx0dmFyIGV2ZW50ID0gbmV3IE1ldGFFdmVudCh7IGRhdGE6IFtDb25zdGFudHMuTUVUQV9DVUVfUE9JTlRdIH0pO1xuXHRcdFx0dmFyIHN0cmluZ0J5dGVzID0gVXRpbHMuc3RyaW5nVG9CeXRlcyh0ZXh0KTtcblx0XHRcdGV2ZW50LmRhdGEgPSBldmVudC5kYXRhLmNvbmNhdChVdGlscy5udW1iZXJUb1ZhcmlhYmxlTGVuZ3RoKHN0cmluZ0J5dGVzLmxlbmd0aCkpOyAvLyBTaXplXG5cdFx0XHRldmVudC5kYXRhID0gZXZlbnQuZGF0YS5jb25jYXQoc3RyaW5nQnl0ZXMpOyAvLyBUZXh0XG5cdFx0XHRyZXR1cm4gdGhpcy5hZGRFdmVudChldmVudCk7XG5cdFx0fVxuXG5cdFx0LyoqXG4gICAqIEFkZHMgbHlyaWMgdG8gTUlESSBmaWxlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbHlyaWMgLSBMeXJpYyB0ZXh0IHRvIGFkZC5cbiAgICogQHJldHVybiB7VHJhY2t9XG4gICAqL1xuXG5cdH0sIHtcblx0XHRrZXk6ICdhZGRMeXJpYycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGFkZEx5cmljKGx5cmljKSB7XG5cdFx0XHR2YXIgZXZlbnQgPSBuZXcgTWV0YUV2ZW50KHsgZGF0YTogW0NvbnN0YW50cy5NRVRBX0xZUklDX0lEXSB9KTtcblx0XHRcdHZhciBzdHJpbmdCeXRlcyA9IFV0aWxzLnN0cmluZ1RvQnl0ZXMobHlyaWMpO1xuXHRcdFx0ZXZlbnQuZGF0YSA9IGV2ZW50LmRhdGEuY29uY2F0KFV0aWxzLm51bWJlclRvVmFyaWFibGVMZW5ndGgoc3RyaW5nQnl0ZXMubGVuZ3RoKSk7IC8vIFNpemVcblx0XHRcdGV2ZW50LmRhdGEgPSBldmVudC5kYXRhLmNvbmNhdChzdHJpbmdCeXRlcyk7IC8vIEx5cmljXG5cdFx0XHRyZXR1cm4gdGhpcy5hZGRFdmVudChldmVudCk7XG5cdFx0fVxuXG5cdFx0LyoqXG4gICAqIENoYW5uZWwgbW9kZSBtZXNzYWdlc1xuICAgKiBAcmV0dXJuIHtUcmFja31cbiAgICovXG5cblx0fSwge1xuXHRcdGtleTogJ3BvbHlNb2RlT24nLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBwb2x5TW9kZU9uKCkge1xuXHRcdFx0dmFyIGV2ZW50ID0gbmV3IE5vdGVPbkV2ZW50KHsgZGF0YTogWzB4MDAsIDB4QjAsIDB4N0UsIDB4MDBdIH0pO1xuXHRcdFx0cmV0dXJuIHRoaXMuYWRkRXZlbnQoZXZlbnQpO1xuXHRcdH1cblx0fV0pO1xuXG5cdHJldHVybiBUcmFjaztcbn0oKTtcblxuZXhwb3J0cy5UcmFjayA9IFRyYWNrO1xuXG4vKipcbiAqIFN0YXRpYyB1dGlsaXR5IGZ1bmN0aW9ucyB1c2VkIHRocm91Z2hvdXQgdGhlIGxpYnJhcnkuXG4gKi9cbnZhciBVdGlscyA9IGZ1bmN0aW9uICgpIHtcblx0ZnVuY3Rpb24gVXRpbHMoKSB7XG5cdFx0X2NsYXNzQ2FsbENoZWNrKHRoaXMsIFV0aWxzKTtcblx0fVxuXG5cdF9jcmVhdGVDbGFzcyhVdGlscywgbnVsbCwgW3tcblx0XHRrZXk6ICd2ZXJzaW9uJyxcblxuXG5cdFx0LyoqXG4gICAqIEdldHMgTWlkaVdyaXRlckpTIHZlcnNpb24gbnVtYmVyLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXHRcdHZhbHVlOiBmdW5jdGlvbiB2ZXJzaW9uKCkge1xuXHRcdFx0cmV0dXJuIENvbnN0YW50cy5WRVJTSU9OO1xuXHRcdH1cblxuXHRcdC8qKlxuICAgKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIGFycmF5IG9mIGJ5dGVzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAgICogQHJldHVybiB7YXJyYXl9XG4gICAqL1xuXG5cdH0sIHtcblx0XHRrZXk6ICdzdHJpbmdUb0J5dGVzJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gc3RyaW5nVG9CeXRlcyhzdHJpbmcpIHtcblx0XHRcdHJldHVybiBzdHJpbmcuc3BsaXQoJycpLm1hcChmdW5jdGlvbiAoY2hhcikge1xuXHRcdFx0XHRyZXR1cm4gY2hhci5jaGFyQ29kZUF0KCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvKipcbiAgICogQ2hlY2tzIGlmIGFyZ3VtZW50IGlzIGEgdmFsaWQgbnVtYmVyLlxuICAgKiBAcGFyYW0geyp9IG4gLSBWYWx1ZSB0byBjaGVja1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuXHR9LCB7XG5cdFx0a2V5OiAnaXNOdW1lcmljJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gaXNOdW1lcmljKG4pIHtcblx0XHRcdHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdChuKSkgJiYgaXNGaW5pdGUobik7XG5cdFx0fVxuXG5cdFx0LyoqXG4gICAgICAqIFJldHVybnMgdGhlIGNvcnJlY3QgTUlESSBudW1iZXIgZm9yIHRoZSBzcGVjaWZpZWQgcGl0Y2guXG4gICAgICAqIFVzZXMgVG9uYWwgTWlkaSAtIGh0dHBzOi8vZ2l0aHViLmNvbS9kYW5pZ2IvdG9uYWwvdHJlZS9tYXN0ZXIvcGFja2FnZXMvbWlkaVxuICAgICAgKiBAcGFyYW0geyhzdHJpbmd8bnVtYmVyKX0gcGl0Y2ggLSAnQyM0JyBvciBtaWRpIG5vdGUgY29kZVxuICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICAqL1xuXG5cdH0sIHtcblx0XHRrZXk6ICdnZXRQaXRjaCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGdldFBpdGNoKHBpdGNoKSB7XG5cdFx0XHRyZXR1cm4gKDAsIF90b25hbE1pZGkudG9NaWRpKShwaXRjaCk7XG5cdFx0fVxuXG5cdFx0LyoqXG4gICAqIFRyYW5zbGF0ZXMgbnVtYmVyIG9mIHRpY2tzIHRvIE1JREkgdGltZXN0YW1wIGZvcm1hdCwgcmV0dXJuaW5nIGFuIGFycmF5IG9mXG4gICAqIGhleCBzdHJpbmdzIHdpdGggdGhlIHRpbWUgdmFsdWVzLiBNaWRpIGhhcyBhIHZlcnkgcGFydGljdWxhciB0aW1lIHRvIGV4cHJlc3MgdGltZSxcbiAgICogdGFrZSBhIGdvb2QgbG9vayBhdCB0aGUgc3BlYyBiZWZvcmUgZXZlciB0b3VjaGluZyB0aGlzIGZ1bmN0aW9uLlxuICAgKiBUaGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL3NlcmdpL2pzbWlkaVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdGlja3MgLSBOdW1iZXIgb2YgdGlja3MgdG8gYmUgdHJhbnNsYXRlZFxuICAgKiBAcmV0dXJuIHthcnJheX0gLSBCeXRlcyB0aGF0IGZvcm0gdGhlIE1JREkgdGltZSB2YWx1ZVxuICAgKi9cblxuXHR9LCB7XG5cdFx0a2V5OiAnbnVtYmVyVG9WYXJpYWJsZUxlbmd0aCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIG51bWJlclRvVmFyaWFibGVMZW5ndGgodGlja3MpIHtcblx0XHRcdHZhciBidWZmZXIgPSB0aWNrcyAmIDB4N0Y7XG5cblx0XHRcdHdoaWxlICh0aWNrcyA9IHRpY2tzID4+IDcpIHtcblx0XHRcdFx0YnVmZmVyIDw8PSA4O1xuXHRcdFx0XHRidWZmZXIgfD0gdGlja3MgJiAweDdGIHwgMHg4MDtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGJMaXN0ID0gW107XG5cdFx0XHR3aGlsZSAodHJ1ZSkge1xuXHRcdFx0XHRiTGlzdC5wdXNoKGJ1ZmZlciAmIDB4ZmYpO1xuXG5cdFx0XHRcdGlmIChidWZmZXIgJiAweDgwKSBidWZmZXIgPj49IDg7ZWxzZSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGJMaXN0O1xuXHRcdH1cblxuXHRcdC8qKlxuICAgKiBDb3VudHMgbnVtYmVyIG9mIGJ5dGVzIGluIHN0cmluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gc1xuICAgKiBAcmV0dXJuIHthcnJheX1cbiAgICovXG5cblx0fSwge1xuXHRcdGtleTogJ3N0cmluZ0J5dGVDb3VudCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHN0cmluZ0J5dGVDb3VudChzKSB7XG5cdFx0XHRyZXR1cm4gZW5jb2RlVVJJKHMpLnNwbGl0KC8lLi58Li8pLmxlbmd0aCAtIDE7XG5cdFx0fVxuXG5cdFx0LyoqXG4gICAqIEdldCBhbiBpbnQgZnJvbSBhbiBhcnJheSBvZiBieXRlcy5cbiAgICogQHBhcmFtIHthcnJheX0gYnl0ZXNcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cblxuXHR9LCB7XG5cdFx0a2V5OiAnbnVtYmVyRnJvbUJ5dGVzJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gbnVtYmVyRnJvbUJ5dGVzKGJ5dGVzKSB7XG5cdFx0XHR2YXIgaGV4ID0gJyc7XG5cdFx0XHR2YXIgc3RyaW5nUmVzdWx0O1xuXG5cdFx0XHRieXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChieXRlKSB7XG5cdFx0XHRcdHN0cmluZ1Jlc3VsdCA9IGJ5dGUudG9TdHJpbmcoMTYpO1xuXG5cdFx0XHRcdC8vIGVuc3VyZSBzdHJpbmcgaXMgMiBjaGFyc1xuXHRcdFx0XHRpZiAoc3RyaW5nUmVzdWx0Lmxlbmd0aCA9PSAxKSBzdHJpbmdSZXN1bHQgPSBcIjBcIiArIHN0cmluZ1Jlc3VsdDtcblxuXHRcdFx0XHRoZXggKz0gc3RyaW5nUmVzdWx0O1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBwYXJzZUludChoZXgsIDE2KTtcblx0XHR9XG5cblx0XHQvKipcbiAgICogVGFrZXMgYSBudW1iZXIgYW5kIHNwbGl0cyBpdCB1cCBpbnRvIGFuIGFycmF5IG9mIGJ5dGVzLiAgQ2FuIGJlIHBhZGRlZCBieSBwYXNzaW5nIGEgbnVtYmVyIHRvIGJ5dGVzTmVlZGVkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGJ5dGVzTmVlZGVkXG4gICAqIEByZXR1cm4ge2FycmF5fSAtIEFycmF5IG9mIGJ5dGVzXG4gICAqL1xuXG5cdH0sIHtcblx0XHRrZXk6ICdudW1iZXJUb0J5dGVzJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gbnVtYmVyVG9CeXRlcyhudW1iZXIsIGJ5dGVzTmVlZGVkKSB7XG5cdFx0XHRieXRlc05lZWRlZCA9IGJ5dGVzTmVlZGVkIHx8IDE7XG5cblx0XHRcdHZhciBoZXhTdHJpbmcgPSBudW1iZXIudG9TdHJpbmcoMTYpO1xuXG5cdFx0XHRpZiAoaGV4U3RyaW5nLmxlbmd0aCAmIDEpIHtcblx0XHRcdFx0Ly8gTWFrZSBzdXJlIGhleCBzdHJpbmcgaXMgZXZlbiBudW1iZXIgb2YgY2hhcnNcblx0XHRcdFx0aGV4U3RyaW5nID0gJzAnICsgaGV4U3RyaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTcGxpdCBoZXggc3RyaW5nIGludG8gYW4gYXJyYXkgb2YgdHdvIGNoYXIgZWxlbWVudHNcblx0XHRcdHZhciBoZXhBcnJheSA9IGhleFN0cmluZy5tYXRjaCgvLnsyfS9nKTtcblxuXHRcdFx0Ly8gTm93IHBhcnNlIHRoZW0gb3V0IGFzIGludGVnZXJzXG5cdFx0XHRoZXhBcnJheSA9IGhleEFycmF5Lm1hcChmdW5jdGlvbiAoaXRlbSkge1xuXHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoaXRlbSwgMTYpO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIFByZXBlbmQgZW1wdHkgYnl0ZXMgaWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2hcblx0XHRcdGlmIChoZXhBcnJheS5sZW5ndGggPCBieXRlc05lZWRlZCkge1xuXHRcdFx0XHR3aGlsZSAoYnl0ZXNOZWVkZWQgLSBoZXhBcnJheS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0aGV4QXJyYXkudW5zaGlmdCgwKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gaGV4QXJyYXk7XG5cdFx0fVxuXG5cdFx0LyoqXHRcbiAgICogQ29udmVydHMgdmFsdWUgdG8gYXJyYXkgaWYgbmVlZGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICogQHJldHVybiB7YXJyYXl9XG4gICAqL1xuXG5cdH0sIHtcblx0XHRrZXk6ICd0b0FycmF5Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSkge1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWU7XG5cdFx0XHRyZXR1cm4gW3ZhbHVlXTtcblx0XHR9XG5cdH1dKTtcblxuXHRyZXR1cm4gVXRpbHM7XG59KCk7XG5cbmV4cG9ydHMuVXRpbHMgPSBVdGlscztcblxudmFyIFZleEZsb3cgPSBmdW5jdGlvbiAoKSB7XG5cdGZ1bmN0aW9uIFZleEZsb3coKSB7XG5cdFx0X2NsYXNzQ2FsbENoZWNrKHRoaXMsIFZleEZsb3cpO1xuXHR9XG5cdC8vIGNvZGUuLi5cblxuXG5cdC8qKlxuICAqIFN1cHBvcnQgZm9yIGNvbnZlcnRpbmcgVmV4RmxvdyB2b2ljZSBpbnRvIE1pZGlXcml0ZXJKUyB0cmFja1xuICAqIEByZXR1cm4gTWlkaVdyaXRpZXIuVHJhY2sgb2JqZWN0XG4gICovXG5cblxuXHRfY3JlYXRlQ2xhc3MoVmV4RmxvdywgW3tcblx0XHRrZXk6ICd0cmFja0Zyb21Wb2ljZScsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHRyYWNrRnJvbVZvaWNlKHZvaWNlKSB7XG5cdFx0XHR2YXIgdHJhY2sgPSBuZXcgVHJhY2soKTtcblx0XHRcdHZhciB3YWl0O1xuXHRcdFx0dmFyIHBpdGNoZXMgPSBbXTtcblxuXHRcdFx0dm9pY2UudGlja2FibGVzLmZvckVhY2goZnVuY3Rpb24gKHRpY2thYmxlKSB7XG5cdFx0XHRcdHBpdGNoZXMgPSBbXTtcblxuXHRcdFx0XHRpZiAodGlja2FibGUubm90ZVR5cGUgPT09ICduJykge1xuXHRcdFx0XHRcdHRpY2thYmxlLmtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRcdFx0XHQvLyBidWlsZCBhcnJheSBvZiBwaXRjaGVzXG5cdFx0XHRcdFx0XHRwaXRjaGVzLnB1c2godGhpcy5jb252ZXJ0UGl0Y2goa2V5KSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAodGlja2FibGUubm90ZVR5cGUgPT09ICdyJykge1xuXHRcdFx0XHRcdC8vIG1vdmUgb24gdG8gdGhlIG5leHQgdGlja2FibGUgYW5kIHVzZSB0aGlzIHJlc3QgYXMgYSBgd2FpdGAgcHJvcGVydHkgZm9yIHRoZSBuZXh0IGV2ZW50XG5cdFx0XHRcdFx0d2FpdCA9IHRoaXMuY29udmVydER1cmF0aW9uKHRpY2thYmxlKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cmFjay5hZGRFdmVudChuZXcgTm90ZUV2ZW50KHsgcGl0Y2g6IHBpdGNoZXMsIGR1cmF0aW9uOiB0aGlzLmNvbnZlcnREdXJhdGlvbih0aWNrYWJsZSksIHdhaXQ6IHdhaXQgfSkpO1xuXG5cdFx0XHRcdC8vIHJlc2V0IHdhaXRcblx0XHRcdFx0d2FpdCA9IDA7XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIHRyYWNrO1xuXHRcdH1cblxuXHRcdC8qKlxuICAgKiBDb252ZXJ0cyBWZXhGbG93IHBpdGNoIHN5bnRheCB0byBNaWRpV3JpdGVySlMgc3ludGF4XG4gICAqIEBwYXJhbSBwaXRjaCBzdHJpbmdcbiAgICovXG5cblx0fSwge1xuXHRcdGtleTogJ2NvbnZlcnRQaXRjaCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNvbnZlcnRQaXRjaChwaXRjaCkge1xuXHRcdFx0cmV0dXJuIHBpdGNoLnJlcGxhY2UoJy8nLCAnJyk7XG5cdFx0fVxuXG5cdFx0LyoqXG4gICAqIENvbnZlcnRzIFZleEZsb3cgZHVyYXRpb24gc3ludGF4IHRvIE1pZGlXcml0ZXJKUyBzeW50YXhcbiAgICogQHBhcmFtIG5vdGUgc3RydWN0IGZyb20gVmV4Rmxvd1xuICAgKi9cblxuXHR9LCB7XG5cdFx0a2V5OiAnY29udmVydER1cmF0aW9uJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gY29udmVydER1cmF0aW9uKG5vdGUpIHtcblx0XHRcdHN3aXRjaCAobm90ZS5kdXJhdGlvbikge1xuXHRcdFx0XHRjYXNlICd3Jzpcblx0XHRcdFx0XHRyZXR1cm4gJzEnO1xuXHRcdFx0XHRjYXNlICdoJzpcblx0XHRcdFx0XHRyZXR1cm4gbm90ZS5pc0RvdHRlZCgpID8gJ2QyJyA6ICcyJztcblx0XHRcdFx0Y2FzZSAncSc6XG5cdFx0XHRcdFx0cmV0dXJuIG5vdGUuaXNEb3R0ZWQoKSA/ICdkNCcgOiAnNCc7XG5cdFx0XHRcdGNhc2UgJzgnOlxuXHRcdFx0XHRcdHJldHVybiBub3RlLmlzRG90dGVkKCkgPyAnZDgnIDogJzgnO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbm90ZS5kdXJhdGlvbjtcblx0XHR9XG5cdH1dKTtcblxuXHRyZXR1cm4gVmV4Rmxvdztcbn0oKTtcblxuZXhwb3J0cy5WZXhGbG93ID0gVmV4Rmxvdztcbi8qKlxuICogT2JqZWN0IHRoYXQgcHV0cyB0b2dldGhlciB0cmFja3MgYW5kIHByb3ZpZGVzIG1ldGhvZHMgZm9yIGZpbGUgb3V0cHV0LlxuICogQHBhcmFtIHthcnJheX0gdHJhY2tzIC0gQW4gYXJyYXkgb2Yge1RyYWNrfSBvYmplY3RzLlxuICogQHJldHVybiB7V3JpdGVyfVxuICovXG5cbnZhciBXcml0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdGZ1bmN0aW9uIFdyaXRlcih0cmFja3MpIHtcblx0XHRfY2xhc3NDYWxsQ2hlY2sodGhpcywgV3JpdGVyKTtcblxuXHRcdHRoaXMuZGF0YSA9IFtdO1xuXG5cdFx0dmFyIHRyYWNrVHlwZSA9IHRyYWNrcy5sZW5ndGggPiAxID8gQ29uc3RhbnRzLkhFQURFUl9DSFVOS19GT1JNQVQxIDogQ29uc3RhbnRzLkhFQURFUl9DSFVOS19GT1JNQVQwO1xuXHRcdHZhciBudW1iZXJPZlRyYWNrcyA9IFV0aWxzLm51bWJlclRvQnl0ZXModHJhY2tzLmxlbmd0aCwgMik7IC8vIHR3byBieXRlcyBsb25nXG5cblx0XHQvLyBIZWFkZXIgY2h1bmtcblx0XHR0aGlzLmRhdGEucHVzaChuZXcgQ2h1bmsoe1xuXHRcdFx0dHlwZTogQ29uc3RhbnRzLkhFQURFUl9DSFVOS19UWVBFLFxuXHRcdFx0ZGF0YTogdHJhY2tUeXBlLmNvbmNhdChudW1iZXJPZlRyYWNrcywgQ29uc3RhbnRzLkhFQURFUl9DSFVOS19ESVZJU0lPTikgfSkpO1xuXG5cdFx0Ly8gVHJhY2sgY2h1bmtzXG5cdFx0dHJhY2tzLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrLCBpKSB7XG5cdFx0XHR0cmFjay5hZGRFdmVudChuZXcgTWV0YUV2ZW50KHsgZGF0YTogQ29uc3RhbnRzLk1FVEFfRU5EX09GX1RSQUNLX0lEIH0pKTtcblx0XHRcdHRoaXMuZGF0YS5wdXNoKHRyYWNrKTtcblx0XHR9LCB0aGlzKTtcblx0fVxuXG5cdC8qKlxuICAqIEJ1aWxkcyB0aGUgZmlsZSBpbnRvIGEgVWludDhBcnJheVxuICAqIEByZXR1cm4ge1VpbnQ4QXJyYXl9XG4gICovXG5cblxuXHRfY3JlYXRlQ2xhc3MoV3JpdGVyLCBbe1xuXHRcdGtleTogJ2J1aWxkRmlsZScsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGJ1aWxkRmlsZSgpIHtcblx0XHRcdHZhciBidWlsZCA9IFtdO1xuXG5cdFx0XHQvLyBEYXRhIGNvbnNpc3RzIG9mIGNodW5rcyB3aGljaCBjb25zaXN0cyBvZiBkYXRhXG5cdFx0XHR0aGlzLmRhdGEuZm9yRWFjaChmdW5jdGlvbiAoZCkge1xuXHRcdFx0XHRyZXR1cm4gYnVpbGQgPSBidWlsZC5jb25jYXQoZC50eXBlLCBkLnNpemUsIGQuZGF0YSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1aWxkKTtcblx0XHR9XG5cblx0XHQvKipcbiAgICogQ29udmVydCBmaWxlIGJ1ZmZlciB0byBhIGJhc2U2NCBzdHJpbmcuICBEaWZmZXJlbnQgbWV0aG9kcyBkZXBlbmRpbmcgb24gaWYgYnJvd3NlciBvciBub2RlLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cdH0sIHtcblx0XHRrZXk6ICdiYXNlNjQnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBiYXNlNjQoKSB7XG5cdFx0XHRpZiAodHlwZW9mIGJ0b2EgPT09ICdmdW5jdGlvbicpIHJldHVybiBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgdGhpcy5idWlsZEZpbGUoKSkpO1xuXHRcdFx0cmV0dXJuIG5ldyBCdWZmZXIodGhpcy5idWlsZEZpbGUoKSkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXHRcdH1cblxuXHRcdC8qKlxuICAgKiBHZXQgdGhlIGRhdGEgVVJJLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cdH0sIHtcblx0XHRrZXk6ICdkYXRhVXJpJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gZGF0YVVyaSgpIHtcblx0XHRcdHJldHVybiAnZGF0YTphdWRpby9taWRpO2Jhc2U2NCwnICsgdGhpcy5iYXNlNjQoKTtcblx0XHR9XG5cblx0XHQvKipcbiAgICogT3V0cHV0IHRvIHN0ZG91dFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cdH0sIHtcblx0XHRrZXk6ICdzdGRvdXQnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBzdGRvdXQoKSB7XG5cdFx0XHRyZXR1cm4gcHJvY2Vzcy5zdGRvdXQud3JpdGUobmV3IEJ1ZmZlcih0aGlzLmJ1aWxkRmlsZSgpKSk7XG5cdFx0fVxuXG5cdFx0LyoqXG4gICAqIFNhdmUgdG8gTUlESSBmaWxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZVxuICAgKi9cblxuXHR9LCB7XG5cdFx0a2V5OiAnc2F2ZU1JREknLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBzYXZlTUlESShmaWxlbmFtZSkge1xuXHRcdFx0dmFyIGJ1ZmZlciA9IG5ldyBCdWZmZXIodGhpcy5idWlsZEZpbGUoKSk7XG5cdFx0XHRmcy53cml0ZUZpbGUoZmlsZW5hbWUgKyAnLm1pZCcsIGJ1ZmZlciwgZnVuY3Rpb24gKGVycikge1xuXHRcdFx0XHRpZiAoZXJyKSByZXR1cm4gY29uc29sZS5sb2coZXJyKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fV0pO1xuXG5cdHJldHVybiBXcml0ZXI7XG59KCk7XG5cbmV4cG9ydHMuV3JpdGVyID0gV3JpdGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW1sdVpHVjRMbXB6SWwwc0ltNWhiV1Z6SWpwYklrTm9kVzVySWl3aVptbGxiR1J6SWl3aWRIbHdaU0lzSW1SaGRHRWlMQ0p6YVhwbElpd2liR1Z1WjNSb0lpd2lRMjl1YzNSaGJuUnpJaXdpVmtWU1UwbFBUaUlzSWtoRlFVUkZVbDlEU0ZWT1MxOVVXVkJGSWl3aVNFVkJSRVZTWDBOSVZVNUxYMHhGVGtkVVNDSXNJa2hGUVVSRlVsOURTRlZPUzE5R1QxSk5RVlF3SWl3aVNFVkJSRVZTWDBOSVZVNUxYMFpQVWsxQlZERWlMQ0pJUlVGRVJWSmZRMGhWVGt0ZlJFbFdTVk5KVDA0aUxDSlVVa0ZEUzE5RFNGVk9TMTlVV1ZCRklpd2lUVVZVUVY5RlZrVk9WRjlKUkNJc0lrMUZWRUZmVkVWWVZGOUpSQ0lzSWsxRlZFRmZRMDlRV1ZKSlIwaFVYMGxFSWl3aVRVVlVRVjlVVWtGRFMxOU9RVTFGWDBsRUlpd2lUVVZVUVY5SlRsTlVVbFZOUlU1VVgwNUJUVVZmU1VRaUxDSk5SVlJCWDB4WlVrbERYMGxFSWl3aVRVVlVRVjlOUVZKTFJWSmZTVVFpTENKTlJWUkJYME5WUlY5UVQwbE9WQ0lzSWsxRlZFRmZWRVZOVUU5ZlNVUWlMQ0pOUlZSQlgxTk5WRkJGWDA5R1JsTkZWQ0lzSWsxRlZFRmZWRWxOUlY5VFNVZE9RVlJWVWtWZlNVUWlMQ0pOUlZSQlgwdEZXVjlUU1VkT1FWUlZVa1ZmU1VRaUxDSk5SVlJCWDBWT1JGOVBSbDlVVWtGRFMxOUpSQ0lzSWtOUFRsUlNUMHhNUlZKZlEwaEJUa2RGWDFOVVFWUlZVeUlzSWxCU1QwZFNRVTFmUTBoQlRrZEZYMU5VUVZSVlV5SXNJa052Ym5SeWIyeHNaWEpEYUdGdVoyVkZkbVZ1ZENJc0lsVjBhV3h6SWl3aWJuVnRZbVZ5Vkc5V1lYSnBZV0pzWlV4bGJtZDBhQ0lzSW1OdmJtTmhkQ0lzSW1OdmJuUnliMnhzWlhKT2RXMWlaWElpTENKamIyNTBjbTlzYkdWeVZtRnNkV1VpTENKTlpYUmhSWFpsYm5RaUxDSk9iM1JsUlhabGJuUWlMQ0p3YVhSamFDSXNJblJ2UVhKeVlYa2lMQ0ozWVdsMElpd2laSFZ5WVhScGIyNGlMQ0p6WlhGMVpXNTBhV0ZzSWl3aWRtVnNiMk5wZEhraUxDSmphR0Z1Ym1Wc0lpd2ljbVZ3WldGMElpd2lZMjl1ZG1WeWRGWmxiRzlqYVhSNUlpd2laM0poWTJVaUxDSmlkV2xzWkVSaGRHRWlMQ0owYVdOclJIVnlZWFJwYjI0aUxDSm5aWFJVYVdOclJIVnlZWFJwYjI0aUxDSnlaWE4wUkhWeVlYUnBiMjRpTENKbmNtRmpaVVIxY21GMGFXOXVJaXdpWm05eVJXRmphQ0lzSW01dmRHVkZkbVZ1ZENJc0ltNXZkR1ZQYmlJc0ltNXZkR1ZQWm1ZaUxDSkJjbkpoZVNJc0ltbHpRWEp5WVhraUxDSnFJaXdpY0NJc0lta2lMQ0pPYjNSbFQyNUZkbVZ1ZENJc0ltZGxkRTV2ZEdWUGJsTjBZWFIxY3lJc0ltZGxkRkJwZEdOb0lpd2lUbTkwWlU5bVprVjJaVzUwSWl3aVoyVjBUbTkwWlU5bVpsTjBZWFIxY3lJc0luRjFZWEowWlhKVWFXTnJjeUlzSW01MWJXSmxja1p5YjIxQ2VYUmxjeUlzSWsxaGRHZ2lMQ0p5YjNWdVpDSXNJbTFoY0NJc0luWmhiSFZsSWl3aWNtVmtkV05sSWl3aVlTSXNJbUlpTENKMGIxTjBjbWx1WnlJc0luUnZURzkzWlhKRFlYTmxJaXdpWTJoaGNrRjBJaXdpY0dGeWMyVkpiblFpTENKemRXSnpkSEpwYm1jaUxDSm5aWFJFZFhKaGRHbHZiazExYkhScGNHeHBaWElpTENKUWNtOW5jbUZ0UTJoaGJtZGxSWFpsYm5RaUxDSnBibk4wY25WdFpXNTBJaXdpVkhKaFkyc2lMQ0psZG1WdWRITWlMQ0psZG1WdWRDSXNJbTFoY0VaMWJtTjBhVzl1SWl3aVpTSXNJbkJ5YjNCbGNuUnBaWE1pTENKdWRXMWlaWEpVYjBKNWRHVnpJaXdpY0hWemFDSXNJbUp3YlNJc0luUmxiWEJ2SWl3aVlXUmtSWFpsYm5RaUxDSnVkVzFsY21GMGIzSWlMQ0prWlc1dmJXbHVZWFJ2Y2lJc0ltMXBaR2xqYkc5amEzTndaWEowYVdOcklpd2libTkwWlhOd1pYSnRhV1JwWTJ4dlkyc2lMQ0pmWkdWdWIyMXBibUYwYjNJaUxDSnNiMmN5SWl3aWMyWWlMQ0p0YVNJc0ltMXZaR1VpTENKbWFXWjBhSE1pTENKZmMyWnNaVzRpTENKdWIzUmxJaXdpZEc5VmNIQmxja05oYzJVaUxDSm1hV1owYUdsdVpHVjRJaXdpYVc1a1pYaFBaaUlzSW5SbGVIUWlMQ0p6ZEhKcGJtZENlWFJsY3lJc0luTjBjbWx1WjFSdlFubDBaWE1pTENKc2VYSnBZeUlzSW5OMGNtbHVaeUlzSW5Od2JHbDBJaXdpWTJoaGNpSXNJbU5vWVhKRGIyUmxRWFFpTENKdUlpd2lhWE5PWVU0aUxDSndZWEp6WlVac2IyRjBJaXdpYVhOR2FXNXBkR1VpTENKMGFXTnJjeUlzSW1KMVptWmxjaUlzSW1KTWFYTjBJaXdpY3lJc0ltVnVZMjlrWlZWU1NTSXNJbUo1ZEdWeklpd2lhR1Y0SWl3aWMzUnlhVzVuVW1WemRXeDBJaXdpWW5sMFpTSXNJbTUxYldKbGNpSXNJbUo1ZEdWelRtVmxaR1ZrSWl3aWFHVjRVM1J5YVc1bklpd2lhR1Y0UVhKeVlYa2lMQ0p0WVhSamFDSXNJbWwwWlcwaUxDSjFibk5vYVdaMElpd2lWbVY0Um14dmR5SXNJblp2YVdObElpd2lkSEpoWTJzaUxDSndhWFJqYUdWeklpd2lkR2xqYTJGaWJHVnpJaXdpZEdsamEyRmliR1VpTENKdWIzUmxWSGx3WlNJc0ltdGxlWE1pTENKclpYa2lMQ0pqYjI1MlpYSjBVR2wwWTJnaUxDSmpiMjUyWlhKMFJIVnlZWFJwYjI0aUxDSnlaWEJzWVdObElpd2lhWE5FYjNSMFpXUWlMQ0pYY21sMFpYSWlMQ0owY21GamEzTWlMQ0owY21GamExUjVjR1VpTENKdWRXMWlaWEpQWmxSeVlXTnJjeUlzSW1KMWFXeGtJaXdpWkNJc0lsVnBiblE0UVhKeVlYa2lMQ0ppZEc5aElpd2lVM1J5YVc1bklpd2labkp2YlVOb1lYSkRiMlJsSWl3aVlYQndiSGtpTENKaWRXbHNaRVpwYkdVaUxDSkNkV1ptWlhJaUxDSmlZWE5sTmpRaUxDSndjbTlqWlhOeklpd2ljM1JrYjNWMElpd2lkM0pwZEdVaUxDSm1hV3hsYm1GdFpTSXNJbVp6SWl3aWQzSnBkR1ZHYVd4bElpd2laWEp5SWl3aVkyOXVjMjlzWlNJc0lteHZaeUpkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN096czdRVUZ6YTBKQk96czdPMEZCZEd0Q1FUczdPenM3U1VGTFRVRXNTeXhIUVVOTUxHVkJRVmxETEUxQlFWb3NSVUZCYjBJN1FVRkJRVHM3UVVGRGJrSXNUVUZCUzBNc1NVRkJUQ3hIUVVGWlJDeFBRVUZQUXl4SlFVRnVRanRCUVVOQkxFMUJRVXRETEVsQlFVd3NSMEZCV1VZc1QwRkJUMFVzU1VGQmJrSTdRVUZEUVN4TlFVRkxReXhKUVVGTUxFZEJRVmtzUTBGQlF5eERRVUZFTEVWQlFVa3NRMEZCU2l4RlFVRlBMRU5CUVZBc1JVRkJWVWdzVDBGQlQwVXNTVUZCVUN4RFFVRlpSU3hOUVVGMFFpeERRVUZhTzBGQlEwRXNRenM3VVVGSFRVd3NTeXhIUVVGQlFTeExPMEZCUTFJN096czdPMEZCUzBFc1NVRkJTVTBzV1VGQldUdEJRVU5tUXl4VlFVRmpMRTlCUkVNN1FVRkZaa01zYjBKQlFYVkNMRU5CUVVNc1NVRkJSQ3hGUVVGUExFbEJRVkFzUlVGQllTeEpRVUZpTEVWQlFXMUNMRWxCUVc1Q0xFTkJSbElzUlVGRmEwTTdRVUZEYWtSRExITkNRVUYzUWl4RFFVRkRMRWxCUVVRc1JVRkJUeXhKUVVGUUxFVkJRV0VzU1VGQllpeEZRVUZ0UWl4SlFVRnVRaXhEUVVoVUxFVkJSMjFETzBGQlEyeEVReXgxUWtGQk1FSXNRMEZCUXl4SlFVRkVMRVZCUVU4c1NVRkJVQ3hEUVVwWUxFVkJTWGxDTzBGQlEzaERReXgxUWtGQk1FSXNRMEZCUXl4SlFVRkVMRVZCUVU4c1NVRkJVQ3hEUVV4WUxFVkJTM2xDTzBGQlEzaERReXgzUWtGQk1FSXNRMEZCUXl4SlFVRkVMRVZCUVU4c1NVRkJVQ3hEUVU1WUxFVkJUWGxDTzBGQlEzaERReXh0UWtGQmIwSXNRMEZCUXl4SlFVRkVMRVZCUVU4c1NVRkJVQ3hGUVVGaExFbEJRV0lzUlVGQmJVSXNTVUZCYmtJc1EwRlFUQ3hGUVU4clFqdEJRVU01UTBNc1owSkJRV3RDTEVsQlVrZzdRVUZUWmtNc1pVRkJhVUlzU1VGVVJqdEJRVlZtUXl4dlFrRkJjVUlzU1VGV1RqdEJRVmRtUXl4eFFrRkJjMElzU1VGWVVEdEJRVmxtUXl3d1FrRkJNRUlzU1VGYVdEdEJRV0ZtUXl4blFrRkJhMElzU1VGaVNEdEJRV05tUXl4cFFrRkJiVUlzU1VGa1NqdEJRV1ZtUXl4cFFrRkJiVUlzU1VGbVNqdEJRV2RDWmtNc1owSkJRV3RDTEVsQmFFSklPMEZCYVVKbVF5eHZRa0ZCY1VJc1NVRnFRazQ3UVVGclFtWkRMSGxDUVVGNVFpeEpRV3hDVmp0QlFXMUNaa01zZDBKQlFYZENMRWxCYmtKVU8wRkJiMEptUXl4MVFrRkJkVUlzUTBGQlF5eEpRVUZFTEVWQlFVOHNTVUZCVUN4RFFYQkNVanRCUVhGQ1prTXNNa0pCUVRCQ0xFbEJja0pZTEVWQmNVSnBRanRCUVVOb1EwTXNkMEpCUVhkQ0xFbEJkRUpVTEVOQmMwSmxPMEZCZEVKbUxFTkJRV2hDT3p0UlFYbENVWFJDTEZNc1IwRkJRVUVzVXp0QlFVTlNPenM3T3pzN1NVRkxUWFZDTEhGQ0xFZEJRMHdzSzBKQlFWazFRaXhOUVVGYUxFVkJRVzlDTzBGQlFVRTdPMEZCUTI1Q0xFMUJRVXRETEVsQlFVd3NSMEZCV1N4WlFVRmFPMEZCUTBFN1FVRkRRU3hOUVVGTFF5eEpRVUZNTEVkQlFWa3lRaXhOUVVGTlF5eHpRa0ZCVGl4RFFVRTJRaXhKUVVFM1FpeEZRVUZ0UTBNc1RVRkJia01zUTBGQk1FTXhRaXhWUVVGVmNVSXNkMEpCUVhCRUxFVkJRVGhGTVVJc1QwRkJUMmRETEdkQ1FVRnlSaXhGUVVGMVIyaERMRTlCUVU5cFF5eGxRVUU1Unl4RFFVRmFPMEZCUTBFc1F6czdVVUZIVFV3c2NVSXNSMEZCUVVFc2NVSTdRVUZEVWpzN096czdPMGxCUzAxTkxGTXNSMEZEVEN4dFFrRkJXV3hETEUxQlFWb3NSVUZCYjBJN1FVRkJRVHM3UVVGRGJrSXNUVUZCUzBNc1NVRkJUQ3hIUVVGWkxFMUJRVm83UVVGRFFTeE5RVUZMUXl4SlFVRk1MRWRCUVZreVFpeE5RVUZOUXl4elFrRkJUaXhEUVVFMlFpeEpRVUUzUWl4RFFVRmFMRU5CUm0xQ0xFTkJSVFJDTzBGQlF5OURMRTFCUVVzMVFpeEpRVUZNTEVkQlFWa3NTMEZCUzBFc1NVRkJUQ3hEUVVGVk5rSXNUVUZCVml4RFFVRnBRakZDTEZWQlFWVlJMR0ZCUVROQ0xFVkJRVEJEWWl4UFFVRlBSU3hKUVVGcVJDeERRVUZhTzBGQlEwRXNRenM3VVVGSFRXZERMRk1zUjBGQlFVRXNVenRCUVVOU096czdPenM3U1VGTFRVTXNVenRCUVVOTUxHOUNRVUZaYmtNc1RVRkJXaXhGUVVGdlFqdEJRVUZCT3p0QlFVTnVRaXhQUVVGTFF5eEpRVUZNTEVkQlFXTXNUVUZCWkR0QlFVTkJMRTlCUVV0dFF5eExRVUZNTEVkQlFXVlFMRTFCUVUxUkxFOUJRVTRzUTBGQlkzSkRMRTlCUVU5dlF5eExRVUZ5UWl4RFFVRm1PMEZCUTBFc1QwRkJTMFVzU1VGQlRDeEhRVUZqZEVNc1QwRkJUM05ETEVsQlFWQXNTVUZCWlN4RFFVRTNRanRCUVVOQkxFOUJRVXRETEZGQlFVd3NSMEZCYVVKMlF5eFBRVUZQZFVNc1VVRkJlRUk3UVVGRFFTeFBRVUZMUXl4VlFVRk1MRWRCUVd0Q2VFTXNUMEZCVDNkRExGVkJRVkFzU1VGQmNVSXNTMEZCZGtNN1FVRkRRU3hQUVVGTFF5eFJRVUZNTEVkQlFXbENla01zVDBGQlQzbERMRkZCUVZBc1NVRkJiVUlzUlVGQmNFTTdRVUZEUVN4UFFVRkxReXhQUVVGTUxFZEJRV2RDTVVNc1QwRkJUekJETEU5QlFWQXNTVUZCYTBJc1EwRkJiRU03UVVGRFFTeFBRVUZMUXl4TlFVRk1MRWRCUVdVelF5eFBRVUZQTWtNc1RVRkJVQ3hKUVVGcFFpeERRVUZvUXp0QlFVTkJMRTlCUVV0R0xGRkJRVXdzUjBGQmFVSXNTMEZCUzBjc1pVRkJUQ3hEUVVGeFFpeExRVUZMU0N4UlFVRXhRaXhEUVVGcVFqdEJRVU5CTEU5QlFVdEpMRXRCUVV3c1IwRkJZemRETEU5QlFVODJReXhMUVVGeVFqdEJRVU5CTEU5QlFVdERMRk5CUVV3N1FVRkRRVHM3UVVGRlJEczdPenM3T3pzN09FSkJTVms3UVVGRFdDeFJRVUZMTlVNc1NVRkJUQ3hIUVVGWkxFVkJRVm83TzBGQlJVRXNUMEZCU1RaRExHVkJRV1VzUzBGQlMwTXNaVUZCVEN4RFFVRnhRaXhMUVVGTFZDeFJRVUV4UWl4RlFVRnZReXhOUVVGd1F5eERRVUZ1UWp0QlFVTkJMRTlCUVVsVkxHVkJRV1VzUzBGQlMwUXNaVUZCVEN4RFFVRnhRaXhMUVVGTFZpeEpRVUV4UWl4RlFVRm5ReXhOUVVGb1F5eERRVUZ1UWpzN1FVRkZRVHRCUVVOQkxFOUJRVWtzUzBGQlMwOHNTMEZCVkN4RlFVRm5RanRCUVVObUxGRkJRVWxMTEdkQ1FVRm5RaXhEUVVGd1FqdEJRVU5CTEZOQlFVdE1MRXRCUVV3c1IwRkJZV2hDTEUxQlFVMVJMRTlCUVU0c1EwRkJZeXhMUVVGTFVTeExRVUZ1UWl4RFFVRmlPMEZCUTBFc1UwRkJTMEVzUzBGQlRDeERRVUZYVFN4UFFVRllMRU5CUVcxQ0xGVkJRVk5tTEV0QlFWUXNSVUZCWjBJN1FVRkRiRU1zVTBGQlNXZENMRmxCUVZrc1NVRkJTV3BDTEZOQlFVb3NRMEZCWXl4RlFVRkRReXhQUVVGTkxFdEJRVXRUTEV0QlFWb3NSVUZCYlVKT0xGVkJRVk1zVFVGQlRWY3NZVUZCYkVNc1JVRkJaQ3hEUVVGb1FqdEJRVU5CTEZWQlFVdG9SQ3hKUVVGTUxFZEJRVmtzUzBGQlMwRXNTVUZCVEN4RFFVRlZOa0lzVFVGQlZpeERRVUZwUW5GQ0xGVkJRVlZzUkN4SlFVRXpRaXhEUVVGYU96dEJRVVZCTmtNc2NVSkJRV2RDUnl4aFFVRm9RanRCUVVOQkxFdEJURVFzUlVGTFJ5eEpRVXhJTzBGQlRVRTdPMEZCUlVRN1FVRkRRVHRCUVVOQkxFOUJRVWxITEUxQlFVb3NSVUZCV1VNc1QwRkJXanRCUVVOQkxFOUJRVWxETEUxQlFVMURMRTlCUVU0c1EwRkJZeXhMUVVGTGNFSXNTMEZCYmtJc1EwRkJTaXhGUVVFclFqdEJRVU01UWp0QlFVTkJPMEZCUTBFc1VVRkJTeXhEUVVGRkxFdEJRVXRKTEZWQlFWb3NSVUZCZDBJN1FVRkRka0k3UVVGRFFTeFZRVUZMTEVsQlFVbHBRaXhKUVVGSkxFTkJRV0lzUlVGQlowSkJMRWxCUVVrc1MwRkJTMlFzVFVGQmVrSXNSVUZCYVVOakxFZEJRV3BETEVWQlFYTkRPMEZCUTNKRE8wRkJRMEVzVjBGQlMzSkNMRXRCUVV3c1EwRkJWMlVzVDBGQldDeERRVUZ0UWl4VlFVRlRUeXhEUVVGVUxFVkJRVmxETEVOQlFWb3NSVUZCWlR0QlFVTnFReXhYUVVGSlFTeExRVUZMTEVOQlFWUXNSVUZCV1R0QlFVTllUaXhwUWtGQlV5eEpRVUZKVHl4WFFVRktMRU5CUVdkQ0xFVkJRVU14UkN4TlFVRk5Na0lzVFVGQlRVTXNjMEpCUVU0c1EwRkJOa0p0UWl4WlFVRTNRaXhGUVVFeVEyeENMRTFCUVRORExFTkJRV3RFTEV0QlFVczRRaXhsUVVGTUxFVkJRV3hFTEVWQlFUQkZhRU1zVFVGQlRXbERMRkZCUVU0c1EwRkJaVW9zUTBGQlppeERRVUV4UlN4RlFVRTJSaXhMUVVGTGFrSXNVVUZCYkVjc1EwRkJVQ3hGUVVGb1FpeERRVUZVTzBGQlJVRXNVVUZJUkN4TlFVZFBPMEZCUTA0N1FVRkRRVmtzYVVKQlFWTXNTVUZCU1U4c1YwRkJTaXhEUVVGblFpeEZRVUZETVVRc1RVRkJUU3hEUVVGRExFTkJRVVFzUlVGQlNUSkNMRTFCUVUxcFF5eFJRVUZPTEVOQlFXVktMRU5CUVdZc1EwRkJTaXhGUVVGMVFpeExRVUZMYWtJc1VVRkJOVUlzUTBGQlVDeEZRVUZvUWl4RFFVRlVPMEZCUTBFN08wRkJSVVFzV1VGQlMzWkRMRWxCUVV3c1IwRkJXU3hMUVVGTFFTeEpRVUZNTEVOQlFWVTJRaXhOUVVGV0xFTkJRV2xDYzBJc1QwRkJUMjVFTEVsQlFYaENMRU5CUVZvN1FVRkRRU3hQUVZaRUxFVkJWVWNzU1VGV1NEczdRVUZaUVR0QlFVTkJMRmRCUVV0clF5eExRVUZNTEVOQlFWZGxMRTlCUVZnc1EwRkJiVUlzVlVGQlUwOHNRMEZCVkN4RlFVRlpReXhEUVVGYUxFVkJRV1U3UVVGRGFrTXNWMEZCU1VFc1MwRkJTeXhEUVVGVUxFVkJRVms3UVVGRFdFd3NhMEpCUVZVc1NVRkJTVk1zV1VGQlNpeERRVUZwUWl4RlFVRkROMFFzVFVGQlRUSkNMRTFCUVUxRExITkNRVUZPTEVOQlFUWkNhVUlzV1VGQk4wSXNSVUZCTWtOb1FpeE5RVUV6UXl4RFFVRnJSQ3hMUVVGTGFVTXNaMEpCUVV3c1JVRkJiRVFzUlVGQk1rVnVReXhOUVVGTmFVTXNVVUZCVGl4RFFVRmxTaXhEUVVGbUxFTkJRVE5GTEVWQlFUaEdMRXRCUVV0cVFpeFJRVUZ1Unl4RFFVRlFMRVZCUVdwQ0xFTkJRVlk3UVVGRlFTeFJRVWhFTEUxQlIwODdRVUZEVGp0QlFVTkJZU3hyUWtGQlZTeEpRVUZKVXl4WlFVRktMRU5CUVdsQ0xFVkJRVU0zUkN4TlFVRk5MRU5CUVVNc1EwRkJSQ3hGUVVGSk1rSXNUVUZCVFdsRExGRkJRVTRzUTBGQlpVb3NRMEZCWml4RFFVRktMRVZCUVhWQ0xFdEJRVXRxUWl4UlFVRTFRaXhEUVVGUUxFVkJRV3BDTEVOQlFWWTdRVUZEUVRzN1FVRkZSQ3haUVVGTGRrTXNTVUZCVEN4SFFVRlpMRXRCUVV0QkxFbEJRVXdzUTBGQlZUWkNMRTFCUVZZc1EwRkJhVUoxUWl4UlFVRlJjRVFzU1VGQmVrSXNRMEZCV2p0QlFVTkJMRTlCVmtRc1JVRlZSeXhKUVZaSU8wRkJWMEU3UVVGRlJDeExRVGxDUkN4TlFUaENUenRCUVVOT08wRkJRMEVzVlVGQlN5eEpRVUZKZFVRc1NVRkJTU3hEUVVGaUxFVkJRV2RDUVN4SlFVRkpMRXRCUVV0a0xFMUJRWHBDTEVWQlFXbERZeXhIUVVGcVF5eEZRVUZ6UXp0QlFVTnlReXhYUVVGTGNrSXNTMEZCVEN4RFFVRlhaU3hQUVVGWUxFTkJRVzFDTEZWQlFWTlBMRU5CUVZRc1JVRkJXVU1zUTBGQldpeEZRVUZsTzBGQlEycERPMEZCUTBFc1YwRkJTVUVzU1VGQlNTeERRVUZTTEVWQlFWYzdRVUZEVmxZc2RVSkJRV1VzUTBGQlpqdEJRVU5CT3p0QlFVVkVPMEZCUTBFN1FVRkRRU3hYUVVGSkxFdEJRVXRXTEZGQlFVd3NTMEZCYTBJc1NVRkJiRUlzU1VGQk1FSnZRaXhMUVVGTExFdEJRVXQyUWl4TFFVRk1MRU5CUVZkb1F5eE5RVUZZTEVkQlFXOUNMRU5CUVhaRUxFVkJRVEJFTzBGQlEzcEVMRmxCUVVrMlJDeGxRVUZsY0VNc1RVRkJUWEZETEdWQlFVNHNRMEZCYzBJM1JDeFZRVUZWVFN4eFFrRkJhRU1zUTBGQmJrSTdRVUZEUVc5RExIVkNRVUZsYTBJc1pVRkJaMEpzUWl4bFFVRmxMRU5CUVRsRE8wRkJRMEU3TzBGQlJVUk5MR2RDUVVGVExFbEJRVWxQTEZkQlFVb3NRMEZCWjBJc1JVRkJRekZFTEUxQlFVMHlRaXhOUVVGTlF5eHpRa0ZCVGl4RFFVRTJRbTFDTEZsQlFUZENMRVZCUVRKRGJFSXNUVUZCTTBNc1EwRkJhMFFzUTBGQlF5eExRVUZMT0VJc1pVRkJUQ3hGUVVGRUxFVkJRWGxDYUVNc1RVRkJUV2xETEZGQlFVNHNRMEZCWlVvc1EwRkJaaXhEUVVGNlFpeEZRVUUwUXl4TFFVRkxha0lzVVVGQmFrUXNRMEZCYkVRc1EwRkJVQ3hGUVVGb1FpeERRVUZVTzBGQlEwRmhMR2xDUVVGVkxFbEJRVWxUTEZsQlFVb3NRMEZCYVVJc1JVRkJRemRFTEUxQlFVMHlRaXhOUVVGTlF5eHpRa0ZCVGl4RFFVRTJRbWxDTEZsQlFUZENMRVZCUVRKRGFFSXNUVUZCTTBNc1EwRkJhMFFzUTBGQlF5eExRVUZMYVVNc1owSkJRVXdzUlVGQlJDeEZRVUV3UW01RExFMUJRVTFwUXl4UlFVRk9MRU5CUVdWS0xFTkJRV1lzUTBGQk1VSXNSVUZCTmtNc1MwRkJTMnBDTEZGQlFXeEVMRU5CUVd4RUxFTkJRVkFzUlVGQmFrSXNRMEZCVmpzN1FVRkZRU3haUVVGTGRrTXNTVUZCVEN4SFFVRlpMRXRCUVV0QkxFbEJRVXdzUTBGQlZUWkNMRTFCUVZZc1EwRkJhVUp6UWl4UFFVRlBia1FzU1VGQmVFSXNSVUZCT0VKdlJDeFJRVUZSY0VRc1NVRkJkRU1zUTBGQldqdEJRVU5CTEU5QmFrSkVMRVZCYVVKSExFbEJha0pJTzBGQmEwSkJPMEZCUTBRN08wRkJSVVFzVjBGQlR5eEpRVUZRTzBGQlEwRTdPMEZCUlVRc1UwRkJUU3g1UWtGQlRqdEJRVU5CT3pzN096dEJRVVZFT3pzN096dHJRMEZMWjBKMVF5eFJMRVZCUVZVN1FVRkRla0k3UVVGRFFVRXNZMEZCVjBFc1YwRkJWeXhIUVVGWUxFZEJRV2xDTEVkQlFXcENMRWRCUVhWQ1FTeFJRVUZzUXp0QlFVTkJMRlZCUVU4d1FpeExRVUZMUXl4TFFVRk1MRU5CUVZjelFpeFhRVUZYTEVkQlFWZ3NSMEZCYVVJc1IwRkJOVUlzUTBGQlVEdEJRVU5CT3pzN096dEJRVVZFT3pzN096czdPMnREUVU5blFrWXNVU3hGUVVGVmRFTXNTU3hGUVVGTk8wRkJReTlDTEU5QlFVbHpSQ3hOUVVGTlF5eFBRVUZPTEVOQlFXTnFRaXhSUVVGa0xFTkJRVW9zUlVGQk5rSTdRVUZETlVJN1FVRkRRU3hYUVVGUFFTeFRRVUZUT0VJc1IwRkJWQ3hEUVVGaExGVkJRVk5ETEV0QlFWUXNSVUZCWjBJN1FVRkRia01zV1VGQlR5eExRVUZMZEVJc1pVRkJUQ3hEUVVGeFFuTkNMRXRCUVhKQ0xFVkJRVFJDY2tVc1NVRkJOVUlzUTBGQlVEdEJRVU5CTEV0QlJrMHNSVUZGU2l4SlFVWkpMRVZCUlVWelJTeE5RVVpHTEVOQlJWTXNWVUZCVTBNc1EwRkJWQ3hGUVVGWlF5eERRVUZhTEVWQlFXVTdRVUZET1VJc1dVRkJUMFFzU1VGQlNVTXNRMEZCV0R0QlFVTkJMRXRCU2swc1JVRkpTaXhEUVVwSkxFTkJRVkE3UVVGTFFUczdRVUZGUkd4RExHTkJRVmRCTEZOQlFWTnRReXhSUVVGVUxFVkJRVmc3TzBGQlJVRXNUMEZCU1c1RExGTkJRVk52UXl4WFFVRlVMRWRCUVhWQ1F5eE5RVUYyUWl4RFFVRTRRaXhEUVVFNVFpeE5RVUZ4UXl4SFFVRjZReXhGUVVFNFF6dEJRVU0zUXp0QlFVTkJMRmRCUVU5RExGTkJRVk4wUXl4VFFVRlRkVU1zVTBGQlZDeERRVUZ0UWl4RFFVRnVRaXhEUVVGVUxFTkJRVkE3UVVGRFFUczdRVUZGUkR0QlFVTkJPMEZCUTBFc1QwRkJTV0lzWlVGQlpYQkRMRTFCUVUxeFF5eGxRVUZPTEVOQlFYTkNOMFFzVlVGQlZVMHNjVUpCUVdoRExFTkJRVzVDTzBGQlEwRXNWVUZCVDNkRUxFdEJRVXRETEV0QlFVd3NRMEZCVjBnc1pVRkJaU3hMUVVGTFl5eHhRa0ZCVEN4RFFVRXlRbmhETEZGQlFUTkNMRVZCUVhGRGRFTXNTVUZCY2tNc1EwRkJNVUlzUTBGQlVEdEJRVU5CT3p0QlFVVkVPenM3T3pzN096czdPM2REUVU5elFuTkRMRkVzUlVGQlZYUkRMRWtzUlVGQlRUdEJRVU55UXp0QlFVTkJMRmRCUVZGelF5eFJRVUZTTzBGQlEwTXNVMEZCU3l4SFFVRk1PMEZCUTBNc1dVRkJUeXhEUVVGUU8wRkJRMFFzVTBGQlN5eEhRVUZNTzBGQlEwTXNXVUZCVHl4RFFVRlFPMEZCUTBRc1UwRkJTeXhIUVVGTU8wRkJRME1zV1VGQlR5eERRVUZRTzBGQlEwUXNVMEZCU3l4SlFVRk1PMEZCUTBNc1dVRkJUeXhEUVVGUU8wRkJRMFFzVTBGQlN5eEhRVUZNTzBGQlEwTXNXVUZCVHl4RFFVRlFPMEZCUTBRc1UwRkJTeXhKUVVGTU8wRkJRME1zV1VGQlR5eExRVUZRTzBGQlEwUXNVMEZCU3l4SlFVRk1PMEZCUTBNc1dVRkJUeXhIUVVGUU8wRkJRMFFzVTBGQlN5eEhRVUZNTzBGQlEwTXNXVUZCVHl4SFFVRlFPMEZCUTBRc1UwRkJTeXhKUVVGTU8wRkJRME03UVVGRFFTeFpRVUZQTEVsQlFWQTdRVUZEUkN4VFFVRkxMRWxCUVV3N1FVRkRReXhaUVVGUExFbEJRVkE3UVVGRFJDeFRRVUZMTEVsQlFVdzdRVUZEUXl4WlFVRlBMRWxCUVZBN1FVRkRSQ3hUUVVGTExFdEJRVXc3UVVGRFF5eFpRVUZQTEV0QlFWQTdRVUZEUkN4VFFVRkxMRWxCUVV3N1FVRkRReXhaUVVGUExFdEJRVkE3UVVGRFJDeFRRVUZMTEVsQlFVdzdRVUZEUXl4WlFVRlBMRTFCUVZBN1FVRkRSRHRCUVVORE8wRkJRMEU3UVVGb1EwWTdPMEZCYlVOQkxGTkJRVTFCTEZkQlFWY3NNa0pCUVdwQ08wRkJRMEU3T3pzN08wRkJSVVE3T3pzN096dHZRMEZOYTBJN1FVRkJReXhWUVVGUExFMUJRVTBzUzBGQlMwY3NUMEZCV0N4SFFVRnhRaXhEUVVFMVFqdEJRVUU0UWpzN1FVRkZha1E3T3pzN096czdPenR4UTBGTmJVSTdRVUZCUXl4VlFVRlBMRTFCUVUwc1MwRkJTMEVzVDBGQldDeEhRVUZ4UWl4RFFVRTFRanRCUVVFNFFqczdPenM3TzFGQlJ6TkRVQ3hUTEVkQlFVRkJMRk03UVVGRFVqczdPenM3TzBsQlMwMDBRaXhaTEVkQlEwd3NjMEpCUVZrdlJDeE5RVUZhTEVWQlFXOUNPMEZCUVVFN08wRkJRMjVDTEUxQlFVdEZMRWxCUVV3c1IwRkJXVVlzVDBGQlQwVXNTVUZCYmtJN1FVRkRRU3hET3p0UlFVZE5Oa1FzV1N4SFFVRkJRU3haTzBGQlExSTdPenM3T3p0SlFVdE5TQ3hYTEVkQlEwd3NjVUpCUVZrMVJDeE5RVUZhTEVWQlFXOUNPMEZCUVVFN08wRkJRMjVDTEUxQlFVdEZMRWxCUVV3c1IwRkJXVVlzVDBGQlQwVXNTVUZCYmtJN1FVRkRRU3hET3p0UlFVZE5NRVFzVnl4SFFVRkJRU3hYTzBGQlExSTdPenM3T3p0SlFVdE5iMElzYTBJc1IwRkRUQ3cwUWtGQldXaEdMRTFCUVZvc1JVRkJiMEk3UVVGQlFUczdRVUZEYmtJc1RVRkJTME1zU1VGQlRDeEhRVUZaTEZOQlFWbzdRVUZEUVR0QlFVTkJMRTFCUVV0RExFbEJRVXdzUjBGQldUSkNMRTFCUVUxRExITkNRVUZPTEVOQlFUWkNMRWxCUVRkQ0xFVkJRVzFEUXl4TlFVRnVReXhEUVVFd1F6RkNMRlZCUVZWelFpeHhRa0ZCY0VRc1JVRkJNa1V6UWl4UFFVRlBhVVlzVlVGQmJFWXNRMEZCV2p0QlFVTkJMRU03TzFGQlIwMUVMR3RDTEVkQlFVRkJMR3RDTzBGQlExSTdPenM3T3p0SlFVdE5SU3hMTzBGQlEwd3NhMEpCUVdNN1FVRkJRVHM3UVVGRFlpeFBRVUZMYWtZc1NVRkJUQ3hIUVVGWlNTeFZRVUZWVHl4blFrRkJkRUk3UVVGRFFTeFBRVUZMVml4SlFVRk1MRWRCUVZrc1JVRkJXanRCUVVOQkxFOUJRVXRETEVsQlFVd3NSMEZCV1N4RlFVRmFPMEZCUTBFc1QwRkJTMmRHTEUxQlFVd3NSMEZCWXl4RlFVRmtPMEZCUTBFN08wRkJSVVE3T3pzN096czdPenM3TWtKQlRWTkRMRXNzUlVGQlQwTXNWeXhGUVVGaE8wRkJRelZDTEU5QlFVazVRaXhOUVVGTlF5eFBRVUZPTEVOQlFXTTBRaXhMUVVGa0xFTkJRVW9zUlVGQk1FSTdRVUZEZWtKQkxGVkJRVTFxUXl4UFFVRk9MRU5CUVdNc1ZVRkJVMjFETEVOQlFWUXNSVUZCV1ROQ0xFTkJRVm9zUlVGQlpUdEJRVU0xUWp0QlFVTkJMRk5CUVVrc1QwRkJUekJDTEZkQlFWQXNTMEZCZFVJc1ZVRkJka0lzU1VGQmNVTkRMRVZCUVVWeVJpeEpRVUZHTEV0QlFWY3NUVUZCY0VRc1JVRkJORVE3UVVGRE0wUXNWVUZCU1hOR0xHRkJRV0ZHTEZsQlFWa3hRaXhEUVVGYUxFVkJRV1V5UWl4RFFVRm1MRU5CUVdwQ096dEJRVVZCTEZWQlFVa3NVVUZCVDBNc1ZVRkJVQ3g1UTBGQlQwRXNWVUZCVUN4UFFVRnpRaXhSUVVFeFFpeEZRVUZ2UXp0QlFVTnVReXhaUVVGTExFbEJRVWs1UWl4RFFVRlVMRWxCUVdNNFFpeFZRVUZrTEVWQlFUQkNPMEZCUTNwQ0xHZENRVUZQT1VJc1EwRkJVRHRCUVVORExHTkJRVXNzVlVGQlREdEJRVU5ETmtJc1dVRkJSUzlETEZGQlFVWXNSMEZCWVdkRUxGZEJRVmM1UWl4RFFVRllMRU5CUVdJN1FVRkRRVHRCUVVORUxHTkJRVXNzV1VGQlREdEJRVU5ETmtJc1dVRkJSVGxETEZWQlFVWXNSMEZCWlN0RExGZEJRVmM1UWl4RFFVRllMRU5CUVdZN1FVRkRRVHRCUVVORUxHTkJRVXNzVlVGQlREdEJRVU5ETmtJc1dVRkJSVGRETEZGQlFVWXNSMEZCWVRaRExFVkJRVVV4UXl4bFFVRkdMRU5CUVd0Q01rTXNWMEZCVnpsQ0xFTkJRVmdzUTBGQmJFSXNRMEZCWWp0QlFVTkJPMEZCVkVZN1FVRlhRVHM3UVVGRlJEdEJRVU5CTmtJc1UwRkJSWGhETEZOQlFVWTdRVUZEUVR0QlFVTkVPenRCUVVWRUxGVkJRVXMxUXl4SlFVRk1MRWRCUVZrc1MwRkJTMEVzU1VGQlRDeERRVUZWTmtJc1RVRkJWaXhEUVVGcFFuVkVMRVZCUVVWd1JpeEpRVUZ1UWl4RFFVRmFPMEZCUTBFc1ZVRkJTME1zU1VGQlRDeEhRVUZaTUVJc1RVRkJUVEpFTEdGQlFVNHNRMEZCYjBJc1MwRkJTM1JHTEVsQlFVd3NRMEZCVlVVc1RVRkJPVUlzUlVGQmMwTXNRMEZCZEVNc1EwRkJXaXhEUVRGQ05FSXNRMEV3UWpCQ08wRkJRM1JFTEZWQlFVc3JSU3hOUVVGTUxFTkJRVmxOTEVsQlFWb3NRMEZCYVVKSUxFTkJRV3BDTzBGQlEwRXNTMEUxUWtRc1JVRTBRa2NzU1VFMVFrZzdRVUU0UWtFc1NVRXZRa1FzVFVFclFrODdRVUZEVGl4VFFVRkxjRVlzU1VGQlRDeEhRVUZaTEV0QlFVdEJMRWxCUVV3c1EwRkJWVFpDTEUxQlFWWXNRMEZCYVVKeFJDeE5RVUZOYkVZc1NVRkJka0lzUTBGQldqdEJRVU5CTEZOQlFVdERMRWxCUVV3c1IwRkJXVEJDTEUxQlFVMHlSQ3hoUVVGT0xFTkJRVzlDTEV0QlFVdDBSaXhKUVVGTUxFTkJRVlZGTEUxQlFUbENMRVZCUVhORExFTkJRWFJETEVOQlFWb3NRMEZHVFN4RFFVVm5SRHRCUVVOMFJDeFRRVUZMSzBVc1RVRkJUQ3hEUVVGWlRTeEpRVUZhTEVOQlFXbENUQ3hMUVVGcVFqdEJRVU5CT3p0QlFVVkVMRlZCUVU4c1NVRkJVRHRCUVVOQk96dEJRVVZFT3pzN096czdPenN5UWtGTFUwMHNSeXhGUVVGTE8wRkJRMklzVDBGQlNVNHNVVUZCVVN4SlFVRkpiRVFzVTBGQlNpeERRVUZqTEVWQlFVTm9ReXhOUVVGTkxFTkJRVU5ITEZWQlFWVm5RaXhoUVVGWUxFTkJRVkFzUlVGQlpDeERRVUZhTzBGQlEwRXJSQ3hUUVVGTmJFWXNTVUZCVGl4RFFVRlhkVVlzU1VGQldDeERRVUZuUWl4SlFVRm9RaXhGUVVaaExFTkJSVlU3UVVGRGRrSXNUMEZCU1VVc1VVRkJVWGhDTEV0QlFVdERMRXRCUVV3c1EwRkJWeXhYUVVGWGMwSXNSMEZCZEVJc1EwRkJXanRCUVVOQlRpeFRRVUZOYkVZc1NVRkJUaXhIUVVGaGEwWXNUVUZCVFd4R0xFbEJRVTRzUTBGQlZ6WkNMRTFCUVZnc1EwRkJhMEpHTEUxQlFVMHlSQ3hoUVVGT0xFTkJRVzlDUnl4TFFVRndRaXhGUVVFeVFpeERRVUV6UWl4RFFVRnNRaXhEUVVGaUxFTkJTbUVzUTBGSmEwUTdRVUZETDBRc1ZVRkJUeXhMUVVGTFF5eFJRVUZNTEVOQlFXTlNMRXRCUVdRc1EwRkJVRHRCUVVOQk96dEJRVVZFT3pzN096czdPenM3T3p0dFEwRlJhVUpUTEZNc1JVRkJWME1zVnl4RlFVRmhReXhwUWl4RlFVRnRRa01zYVVJc1JVRkJiVUk3UVVGRE9VVkVMSFZDUVVGdlFrRXNjVUpCUVhGQ0xFVkJRWHBETzBGQlEwRkRMSFZDUVVGdlFrRXNjVUpCUVhGQ0xFTkJRWHBET3p0QlFVVkJMRTlCUVVsYUxGRkJRVkVzU1VGQlNXeEVMRk5CUVVvc1EwRkJZeXhGUVVGRGFFTXNUVUZCVFN4RFFVRkRSeXhWUVVGVmEwSXNjMEpCUVZnc1EwRkJVQ3hGUVVGa0xFTkJRVm83UVVGRFFUWkVMRk5CUVUxc1JpeEpRVUZPTEVOQlFWZDFSaXhKUVVGWUxFTkJRV2RDTEVsQlFXaENMRVZCVERoRkxFTkJTM1pFTzBGQlEzWkNUQ3hUUVVGTmJFWXNTVUZCVGl4SFFVRmhhMFlzVFVGQlRXeEdMRWxCUVU0c1EwRkJWelpDTEUxQlFWZ3NRMEZCYTBKR0xFMUJRVTB5UkN4aFFVRk9MRU5CUVc5Q1N5eFRRVUZ3UWl4RlFVRXJRaXhEUVVFdlFpeERRVUZzUWl4RFFVRmlMRU5CVGpoRkxFTkJUVmc3TzBGQlJXNUZMRTlCUVVsSkxHVkJRV1U1UWl4TFFVRkxLMElzU1VGQlRDeERRVUZWU2l4WFFVRldMRU5CUVc1Q0xFTkJVamhGTEVOQlVXNURPMEZCUXpORFZpeFRRVUZOYkVZc1NVRkJUaXhIUVVGaGEwWXNUVUZCVFd4R0xFbEJRVTRzUTBGQlZ6WkNMRTFCUVZnc1EwRkJhMEpHTEUxQlFVMHlSQ3hoUVVGT0xFTkJRVzlDVXl4WlFVRndRaXhGUVVGclF5eERRVUZzUXl4RFFVRnNRaXhEUVVGaUxFTkJWRGhGTEVOQlUxSTdRVUZEZEVWaUxGTkJRVTFzUml4SlFVRk9MRWRCUVdGclJpeE5RVUZOYkVZc1NVRkJUaXhEUVVGWE5rSXNUVUZCV0N4RFFVRnJRa1lzVFVGQlRUSkVMR0ZCUVU0c1EwRkJiMEpQTEdsQ1FVRndRaXhGUVVGMVF5eERRVUYyUXl4RFFVRnNRaXhEUVVGaUxFTkJWamhGTEVOQlZVZzdRVUZETTBWWUxGTkJRVTFzUml4SlFVRk9MRWRCUVdGclJpeE5RVUZOYkVZc1NVRkJUaXhEUVVGWE5rSXNUVUZCV0N4RFFVRnJRa1lzVFVGQlRUSkVMR0ZCUVU0c1EwRkJiMEpSTEdsQ1FVRndRaXhGUVVGMVF5eERRVUYyUXl4RFFVRnNRaXhEUVVGaUxFTkJXRGhGTEVOQlYwZzdRVUZETTBVc1ZVRkJUeXhMUVVGTFNpeFJRVUZNTEVOQlFXTlNMRXRCUVdRc1EwRkJVRHRCUVVOQk96dEJRVVZFT3pzN096czdPenM3YTBOQlRXZENaU3hGTEVWQlFVbERMRVVzUlVGQlNUdEJRVU4yUWl4UFFVRkphRUlzVVVGQlVTeEpRVUZKYkVRc1UwRkJTaXhEUVVGakxFVkJRVU5vUXl4TlFVRk5MRU5CUVVOSExGVkJRVlZ0UWl4eFFrRkJXQ3hEUVVGUUxFVkJRV1FzUTBGQldqdEJRVU5CTkVRc1UwRkJUV3hHTEVsQlFVNHNRMEZCVjNWR0xFbEJRVmdzUTBGQlowSXNTVUZCYUVJc1JVRkdkVUlzUTBGRlFUczdRVUZGZGtJc1QwRkJTVmtzVDBGQlQwUXNUVUZCVFN4RFFVRnFRanRCUVVOQlJDeFJRVUZMUVN4TlFVRk5MRU5CUVZnN08wRkJSVUU3UVVGRFFTeFBRVUZKTEU5QlFVOURMRVZCUVZBc1MwRkJZeXhYUVVGc1FpeEZRVUVyUWp0QlFVTTVRaXhSUVVGSlJTeFRRVUZUTEVOQlExb3NRMEZCUXl4SlFVRkVMRVZCUVU4c1NVRkJVQ3hGUVVGaExFbEJRV0lzUlVGQmJVSXNTVUZCYmtJc1JVRkJlVUlzU1VGQmVrSXNSVUZCSzBJc1NVRkJMMElzUlVGQmNVTXNSMEZCY2tNc1JVRkJNRU1zUjBGQk1VTXNSVUZCSzBNc1IwRkJMME1zUlVGQmIwUXNSMEZCY0VRc1JVRkJlVVFzUjBGQmVrUXNSVUZCT0VRc1IwRkJPVVFzUlVGQmJVVXNSMEZCYmtVc1JVRkJkMFVzU1VGQmVFVXNSVUZCT0VVc1NVRkJPVVVzUTBGRVdTeEZRVVZhTEVOQlFVTXNTVUZCUkN4RlFVRlBMRWxCUVZBc1JVRkJZU3hKUVVGaUxFVkJRVzFDTEVkQlFXNUNMRVZCUVhkQ0xFZEJRWGhDTEVWQlFUWkNMRWRCUVRkQ0xFVkJRV3RETEVkQlFXeERMRVZCUVhWRExFZEJRWFpETEVWQlFUUkRMRWRCUVRWRExFVkJRV2xFTEVkQlFXcEVMRVZCUVhORUxFbEJRWFJFTEVWQlFUUkVMRWxCUVRWRUxFVkJRV3RGTEVsQlFXeEZMRVZCUVhkRkxFbEJRWGhGTEVWQlFUaEZMRWxCUVRsRkxFTkJSbGtzUTBGQllqdEJRVWxCTEZGQlFVbERMRk5CUVZOS0xFZEJRVWN2Uml4TlFVRm9RanRCUVVOQkxGRkJRVWx2Unl4UFFVRlBUQ3hOUVVGTkxFZEJRV3BDT3p0QlFVVkJMRkZCUVVsQkxFZEJRVWNzUTBGQlNDeE5RVUZWUVN4SFFVRkhMRU5CUVVnc1JVRkJUWGhDTEZkQlFVNHNSVUZCWkN4RlFVRnRRekJDTEU5QlFVOHNRMEZCVURzN1FVRkZia01zVVVGQlNVVXNVMEZCVXl4RFFVRmlMRVZCUVdkQ08wRkJRMllzWVVGQlVVb3NSMEZCUjNaQ0xFMUJRVWdzUTBGQlZUSkNMRk5CUVZNc1EwRkJia0lzUTBGQlVqdEJRVU5ETEZkQlFVc3NSMEZCVER0QlFVTkRSaXhqUVVGUExFTkJRVkE3UVVGRFFVY3NZMEZCVDB3c1IwRkJSM1pDTEUxQlFVZ3NRMEZCVlN4RFFVRldMRVZCUVdGRUxGZEJRV0lzUlVGQlVEdEJRVU5CTmtJc1kwRkJUMEVzUzBGQlMzcEZMRTFCUVV3c1EwRkJXVzlGTEVkQlFVZHlRaXhUUVVGSUxFTkJRV0VzUTBGQllpeEZRVUZuUW5sQ0xGTkJRVk1zUTBGQmVrSXNRMEZCV2l4RFFVRlFPMEZCUTBFN1FVRkRSQ3hYUVVGTExFZEJRVXc3UVVGRFEwWXNZMEZCVHl4RFFVRlFPMEZCUTBGSExHTkJRVTlNTEVkQlFVZDJRaXhOUVVGSUxFTkJRVlVzUTBGQlZpeEZRVUZoUkN4WFFVRmlMRVZCUVZBN1FVRkRRVFpDTEdOQlFVOUJMRXRCUVV0NlJTeE5RVUZNTEVOQlFWbHZSU3hIUVVGSGNrSXNVMEZCU0N4RFFVRmhMRU5CUVdJc1JVRkJaMEo1UWl4VFFVRlRMRU5CUVhwQ0xFTkJRVm9zUTBGQlVEdEJRVU5CTzBGQlEwUXNWMEZCU3l4SFFVRk1PMEZCUTBOR0xHTkJRVThzUTBGQlVEdEJRVU5CUnl4alFVRlBUQ3hIUVVGSGRrSXNUVUZCU0N4RFFVRlZMRU5CUVZZc1JVRkJZVFpDTEZkQlFXSXNSVUZCVUR0QlFVTkJSQ3hqUVVGUFFTeExRVUZMZWtVc1RVRkJUQ3hEUVVGWmIwVXNSMEZCUjNKQ0xGTkJRVWdzUTBGQllTeERRVUZpTEVWQlFXZENlVUlzVTBGQlV5eERRVUY2UWl4RFFVRmFMRU5CUVZBN1FVRkRRVHRCUVVORUxGZEJRVXNzUjBGQlREdEJRVU5EUml4alFVRlBMRU5CUVZBN1FVRkRRVWNzWTBGQlQwd3NSMEZCUjNaQ0xFMUJRVWdzUTBGQlZTeERRVUZXTEVWQlFXRTJRaXhYUVVGaUxFVkJRVkE3UVVGRFFVUXNZMEZCVDBFc1MwRkJTM3BGTEUxQlFVd3NRMEZCV1c5RkxFZEJRVWR5UWl4VFFVRklMRU5CUVdFc1EwRkJZaXhGUVVGblFubENMRk5CUVZNc1EwRkJla0lzUTBGQldpeERRVUZRTzBGQlEwRTdRVUZ3UWtZN1FVRnpRa0U3TzBGQlJVUXNVVUZCU1Vjc1lVRkJZVW9zVDBGQlQwUXNTVUZCVUN4RlFVRmhUU3hQUVVGaUxFTkJRWEZDU0N4SlFVRnlRaXhEUVVGcVFqdEJRVU5CVEN4VFFVRkxUeXhsUVVGbExFTkJRVU1zUTBGQmFFSXNSMEZCYjBJc1EwRkJjRUlzUjBGQmQwSkJMR0ZCUVdFc1EwRkJNVU03UVVGRFFUczdRVUZGUkhSQ0xGTkJRVTFzUml4SlFVRk9MRWRCUVdGclJpeE5RVUZOYkVZc1NVRkJUaXhEUVVGWE5rSXNUVUZCV0N4RFFVRnJRa1lzVFVGQlRUSkVMR0ZCUVU0c1EwRkJiMEpYTEVWQlFYQkNMRVZCUVhkQ0xFTkJRWGhDTEVOQlFXeENMRU5CUVdJc1EwRXZRM1ZDTEVOQkswTnhRenRCUVVNMVJHWXNVMEZCVFd4R0xFbEJRVTRzUjBGQllXdEdMRTFCUVUxc1JpeEpRVUZPTEVOQlFWYzJRaXhOUVVGWUxFTkJRV3RDUml4TlFVRk5Na1FzWVVGQlRpeERRVUZ2UW1Fc1NVRkJjRUlzUlVGQk1FSXNRMEZCTVVJc1EwRkJiRUlzUTBGQllpeERRV2hFZFVJc1EwRm5SSFZETzBGQlF6bEVMRlZCUVU4c1MwRkJTMVFzVVVGQlRDeERRVUZqVWl4TFFVRmtMRU5CUVZBN1FVRkRRVHM3UVVGRlJEczdPenM3T3pzN01FSkJTMUYzUWl4SkxFVkJRVTA3UVVGRFlpeFBRVUZKZUVJc1VVRkJVU3hKUVVGSmJFUXNVMEZCU2l4RFFVRmpMRVZCUVVOb1F5eE5RVUZOTEVOQlFVTkhMRlZCUVZWVExGbEJRVmdzUTBGQlVDeEZRVUZrTEVOQlFWbzdRVUZEUVN4UFFVRkpLMFlzWTBGQlkyaEdMRTFCUVUxcFJpeGhRVUZPTEVOQlFXOUNSaXhKUVVGd1FpeERRVUZzUWp0QlFVTkJlRUlzVTBGQlRXeEdMRWxCUVU0c1IwRkJZV3RHTEUxQlFVMXNSaXhKUVVGT0xFTkJRVmMyUWl4TlFVRllMRU5CUVd0Q1JpeE5RVUZOUXl4elFrRkJUaXhEUVVFMlFpdEZMRmxCUVZsNlJ5eE5RVUY2UXl4RFFVRnNRaXhEUVVGaUxFTkJTR0VzUTBGSGNVVTdRVUZEYkVablJpeFRRVUZOYkVZc1NVRkJUaXhIUVVGaGEwWXNUVUZCVFd4R0xFbEJRVTRzUTBGQlZ6WkNMRTFCUVZnc1EwRkJhMEk0UlN4WFFVRnNRaXhEUVVGaUxFTkJTbUVzUTBGSlowTTdRVUZETjBNc1ZVRkJUeXhMUVVGTGFrSXNVVUZCVEN4RFFVRmpVaXhMUVVGa0xFTkJRVkE3UVVGRFFUczdRVUZGUkRzN096czdPenM3SzBKQlMyRjNRaXhKTEVWQlFVMDdRVUZEYkVJc1QwRkJTWGhDTEZGQlFWRXNTVUZCU1d4RUxGTkJRVW9zUTBGQll5eEZRVUZEYUVNc1RVRkJUU3hEUVVGRFJ5eFZRVUZWVlN4cFFrRkJXQ3hEUVVGUUxFVkJRV1FzUTBGQldqdEJRVU5CTEU5QlFVazRSaXhqUVVGamFFWXNUVUZCVFdsR0xHRkJRVTRzUTBGQmIwSkdMRWxCUVhCQ0xFTkJRV3hDTzBGQlEwRjRRaXhUUVVGTmJFWXNTVUZCVGl4SFFVRmhhMFlzVFVGQlRXeEdMRWxCUVU0c1EwRkJWelpDTEUxQlFWZ3NRMEZCYTBKR0xFMUJRVTFETEhOQ1FVRk9MRU5CUVRaQ0swVXNXVUZCV1hwSExFMUJRWHBETEVOQlFXeENMRU5CUVdJc1EwRklhMElzUTBGSFowVTdRVUZEYkVablJpeFRRVUZOYkVZc1NVRkJUaXhIUVVGaGEwWXNUVUZCVFd4R0xFbEJRVTRzUTBGQlZ6WkNMRTFCUVZnc1EwRkJhMEk0UlN4WFFVRnNRaXhEUVVGaUxFTkJTbXRDTEVOQlNUSkNPMEZCUXpkRExGVkJRVThzUzBGQlMycENMRkZCUVV3c1EwRkJZMUlzUzBGQlpDeERRVUZRTzBGQlEwRTdPMEZCUlVRN096czdPenM3T3l0Q1FVdGhkMElzU1N4RlFVRk5PMEZCUTJ4Q0xFOUJRVWw0UWl4UlFVRlJMRWxCUVVsc1JDeFRRVUZLTEVOQlFXTXNSVUZCUTJoRExFMUJRVTBzUTBGQlEwY3NWVUZCVlZjc2EwSkJRVmdzUTBGQlVDeEZRVUZrTEVOQlFWbzdRVUZEUVN4UFFVRkpOa1lzWTBGQlkyaEdMRTFCUVUxcFJpeGhRVUZPTEVOQlFXOUNSaXhKUVVGd1FpeERRVUZzUWp0QlFVTkJlRUlzVTBGQlRXeEdMRWxCUVU0c1IwRkJZV3RHTEUxQlFVMXNSaXhKUVVGT0xFTkJRVmMyUWl4TlFVRllMRU5CUVd0Q1JpeE5RVUZOUXl4elFrRkJUaXhEUVVFMlFpdEZMRmxCUVZsNlJ5eE5RVUY2UXl4RFFVRnNRaXhEUVVGaUxFTkJTR3RDTEVOQlIyZEZPMEZCUTJ4R1owWXNVMEZCVFd4R0xFbEJRVTRzUjBGQllXdEdMRTFCUVUxc1JpeEpRVUZPTEVOQlFWYzJRaXhOUVVGWUxFTkJRV3RDT0VVc1YwRkJiRUlzUTBGQllpeERRVXByUWl4RFFVa3lRanRCUVVNM1F5eFZRVUZQTEV0QlFVdHFRaXhSUVVGTUxFTkJRV05TTEV0QlFXUXNRMEZCVUR0QlFVTkJPenRCUVVWRU96czdPenM3T3p0dlEwRkxhMEozUWl4SkxFVkJRVTA3UVVGRGRrSXNUMEZCU1hoQ0xGRkJRVkVzU1VGQlNXeEVMRk5CUVVvc1EwRkJZeXhGUVVGRGFFTXNUVUZCVFN4RFFVRkRSeXhWUVVGVldTeDFRa0ZCV0N4RFFVRlFMRVZCUVdRc1EwRkJXanRCUVVOQkxFOUJRVWswUml4alFVRmphRVlzVFVGQlRXbEdMR0ZCUVU0c1EwRkJiMEpHTEVsQlFYQkNMRU5CUVd4Q08wRkJRMEY0UWl4VFFVRk5iRVlzU1VGQlRpeEhRVUZoYTBZc1RVRkJUV3hHTEVsQlFVNHNRMEZCVnpaQ0xFMUJRVmdzUTBGQmEwSkdMRTFCUVUxRExITkNRVUZPTEVOQlFUWkNLMFVzV1VGQldYcEhMRTFCUVhwRExFTkJRV3hDTEVOQlFXSXNRMEZJZFVJc1EwRkhNa1E3UVVGRGJFWm5SaXhUUVVGTmJFWXNTVUZCVGl4SFFVRmhhMFlzVFVGQlRXeEdMRWxCUVU0c1EwRkJWelpDTEUxQlFWZ3NRMEZCYTBJNFJTeFhRVUZzUWl4RFFVRmlMRU5CU25WQ0xFTkJTWE5DTzBGQlF6ZERMRlZCUVU4c1MwRkJTMnBDTEZGQlFVd3NRMEZCWTFJc1MwRkJaQ3hEUVVGUU8wRkJRMEU3TzBGQlJVUTdPenM3T3pzN096UkNRVXRWZDBJc1NTeEZRVUZOTzBGQlEyWXNUMEZCU1hoQ0xGRkJRVkVzU1VGQlNXeEVMRk5CUVVvc1EwRkJZeXhGUVVGRGFFTXNUVUZCVFN4RFFVRkRSeXhWUVVGVll5eGpRVUZZTEVOQlFWQXNSVUZCWkN4RFFVRmFPMEZCUTBFc1QwRkJTVEJHTEdOQlFXTm9SaXhOUVVGTmFVWXNZVUZCVGl4RFFVRnZRa1lzU1VGQmNFSXNRMEZCYkVJN1FVRkRRWGhDTEZOQlFVMXNSaXhKUVVGT0xFZEJRV0ZyUml4TlFVRk5iRVlzU1VGQlRpeERRVUZYTmtJc1RVRkJXQ3hEUVVGclFrWXNUVUZCVFVNc2MwSkJRVTRzUTBGQk5rSXJSU3haUVVGWmVrY3NUVUZCZWtNc1EwRkJiRUlzUTBGQllpeERRVWhsTEVOQlIyMUZPMEZCUTJ4R1owWXNVMEZCVFd4R0xFbEJRVTRzUjBGQllXdEdMRTFCUVUxc1JpeEpRVUZPTEVOQlFWYzJRaXhOUVVGWUxFTkJRV3RDT0VVc1YwRkJiRUlzUTBGQllpeERRVXBsTEVOQlNUaENPMEZCUXpkRExGVkJRVThzUzBGQlMycENMRkZCUVV3c1EwRkJZMUlzUzBGQlpDeERRVUZRTzBGQlEwRTdPMEZCUlVRN096czdPenM3T3poQ1FVdFpkMElzU1N4RlFVRk5PMEZCUTJwQ0xFOUJRVWw0UWl4UlFVRlJMRWxCUVVsc1JDeFRRVUZLTEVOQlFXTXNSVUZCUTJoRExFMUJRVTBzUTBGQlEwY3NWVUZCVldVc1kwRkJXQ3hEUVVGUUxFVkJRV1FzUTBGQldqdEJRVU5CTEU5QlFVbDVSaXhqUVVGamFFWXNUVUZCVFdsR0xHRkJRVTRzUTBGQmIwSkdMRWxCUVhCQ0xFTkJRV3hDTzBGQlEwRjRRaXhUUVVGTmJFWXNTVUZCVGl4SFFVRmhhMFlzVFVGQlRXeEdMRWxCUVU0c1EwRkJWelpDTEUxQlFWZ3NRMEZCYTBKR0xFMUJRVTFETEhOQ1FVRk9MRU5CUVRaQ0swVXNXVUZCV1hwSExFMUJRWHBETEVOQlFXeENMRU5CUVdJc1EwRklhVUlzUTBGSGFVVTdRVUZEYkVablJpeFRRVUZOYkVZc1NVRkJUaXhIUVVGaGEwWXNUVUZCVFd4R0xFbEJRVTRzUTBGQlZ6WkNMRTFCUVZnc1EwRkJhMEk0UlN4WFFVRnNRaXhEUVVGaUxFTkJTbWxDTEVOQlNUUkNPMEZCUXpkRExGVkJRVThzUzBGQlMycENMRkZCUVV3c1EwRkJZMUlzUzBGQlpDeERRVUZRTzBGQlEwRTdPMEZCUlVRN096czdPenM3T3pKQ1FVdFRNa0lzU3l4RlFVRlBPMEZCUTJZc1QwRkJTVE5DTEZGQlFWRXNTVUZCU1d4RUxGTkJRVW9zUTBGQll5eEZRVUZEYUVNc1RVRkJUU3hEUVVGRFJ5eFZRVUZWWVN4aFFVRllMRU5CUVZBc1JVRkJaQ3hEUVVGYU8wRkJRMEVzVDBGQlNUSkdMR05CUVdOb1JpeE5RVUZOYVVZc1lVRkJUaXhEUVVGdlFrTXNTMEZCY0VJc1EwRkJiRUk3UVVGRFFUTkNMRk5CUVUxc1JpeEpRVUZPTEVkQlFXRnJSaXhOUVVGTmJFWXNTVUZCVGl4RFFVRlhOa0lzVFVGQldDeERRVUZyUWtZc1RVRkJUVU1zYzBKQlFVNHNRMEZCTmtJclJTeFpRVUZaZWtjc1RVRkJla01zUTBGQmJFSXNRMEZCWWl4RFFVaGxMRU5CUjIxRk8wRkJRMnhHWjBZc1UwRkJUV3hHTEVsQlFVNHNSMEZCWVd0R0xFMUJRVTFzUml4SlFVRk9MRU5CUVZjMlFpeE5RVUZZTEVOQlFXdENPRVVzVjBGQmJFSXNRMEZCWWl4RFFVcGxMRU5CU1RoQ08wRkJRemRETEZWQlFVOHNTMEZCUzJwQ0xGRkJRVXdzUTBGQlkxSXNTMEZCWkN4RFFVRlFPMEZCUTBFN08wRkJSVVE3T3pzN096czdLMEpCU1dFN1FVRkRXaXhQUVVGSlFTeFJRVUZSTEVsQlFVbDRRaXhYUVVGS0xFTkJRV2RDTEVWQlFVTXhSQ3hOUVVGTkxFTkJRVU1zU1VGQlJDeEZRVUZQTEVsQlFWQXNSVUZCWVN4SlFVRmlMRVZCUVcxQ0xFbEJRVzVDTEVOQlFWQXNSVUZCYUVJc1EwRkJXanRCUVVOQkxGVkJRVThzUzBGQlN6QkdMRkZCUVV3c1EwRkJZMUlzUzBGQlpDeERRVUZRTzBGQlEwRTdPenM3T3p0UlFVbE5SaXhMTEVkQlFVRkJMRXM3TzBGQlIxSTdPenRKUVVkTmNrUXNTenM3T3pzN096czdPMEZCUlV3N096czdORUpCU1dsQ08wRkJRMmhDTEZWQlFVOTRRaXhWUVVGVlF5eFBRVUZxUWp0QlFVTkJPenRCUVVWRU96czdPenM3T3p0blEwRkxjVUl3Unl4TkxFVkJRVkU3UVVGRE5VSXNWVUZCVDBFc1QwRkJUME1zUzBGQlVDeERRVUZoTEVWQlFXSXNSVUZCYVVJMVF5eEhRVUZxUWl4RFFVRnhRanRCUVVGQkxGZEJRVkUyUXl4TFFVRkxReXhWUVVGTUxFVkJRVkk3UVVGQlFTeEpRVUZ5UWl4RFFVRlFPMEZCUTBFN08wRkJSVVE3T3pzN096czdPelJDUVV0cFFrTXNReXhGUVVGSE8wRkJRMjVDTEZWQlFVOHNRMEZCUTBNc1RVRkJUVU1zVjBGQlYwWXNRMEZCV0N4RFFVRk9MRU5CUVVRc1NVRkJlVUpITEZOQlFWTklMRU5CUVZRc1EwRkJhRU03UVVGRFFUczdRVUZGUkRzN096czdPenM3T3pKQ1FVMXZRbWhHTEVzc1JVRkJUenRCUVVOMFFpeFZRVUZQTEhWQ1FVRlBRU3hMUVVGUUxFTkJRVkE3UVVGRFFUczdRVUZGVERzN096czdPenM3T3pzN08zbERRVk00UW05R0xFc3NSVUZCVHp0QlFVTnFReXhQUVVGSlF5eFRRVUZUUkN4UlFVRlJMRWxCUVhKQ096dEJRVVZCTEZWQlFVOUJMRkZCUVZGQkxGTkJRVk1zUTBGQmVFSXNSVUZCTWtJN1FVRkRka0pETEdWQlFWY3NRMEZCV0R0QlFVTkJRU3hqUVVGWlJDeFJRVUZSTEVsQlFWUXNSMEZCYVVJc1NVRkJOVUk3UVVGRFNEczdRVUZGUkN4UFFVRkpSU3hSUVVGUkxFVkJRVm83UVVGRFFTeFZRVUZQTEVsQlFWQXNSVUZCWVR0QlFVTlVRU3hWUVVGTmFrTXNTVUZCVGl4RFFVRlhaME1zVTBGQlV5eEpRVUZ3UWpzN1FVRkZRU3hSUVVGSlFTeFRRVUZUTEVsQlFXSXNSVUZCYlVKQkxGZEJRVmNzUTBGQldDeERRVUZ1UWl4TFFVTkxPMEZCUVVVN1FVRkJVVHRCUVVOc1FqczdRVUZGUkN4VlFVRlBReXhMUVVGUU8wRkJRMGc3TzBGQlJVUTdPenM3T3pzN08ydERRVXQxUWtNc1F5eEZRVUZITzBGQlEzcENMRlZCUVU5RExGVkJRVlZFTEVOQlFWWXNSVUZCWVZZc1MwRkJZaXhEUVVGdFFpeFBRVUZ1UWl4RlFVRTBRamRITEUxQlFUVkNMRWRCUVhGRExFTkJRVFZETzBGQlEwRTdPMEZCUlVRN096czdPenM3TzJ0RFFVdDFRbmxJTEVzc1JVRkJUenRCUVVNM1FpeFBRVUZKUXl4TlFVRk5MRVZCUVZZN1FVRkRRU3hQUVVGSlF5eFpRVUZLT3p0QlFVVkJSaXhUUVVGTk1VVXNUMEZCVGl4RFFVRmpMRlZCUVZNMlJTeEpRVUZVTEVWQlFXVTdRVUZETlVKRUxHMUNRVUZsUXl4TFFVRkxkRVFzVVVGQlRDeERRVUZqTEVWQlFXUXNRMEZCWmpzN1FVRkZRVHRCUVVOQkxGRkJRVWx4UkN4aFFVRmhNMGdzVFVGQllpeEpRVUYxUWl4RFFVRXpRaXhGUVVFNFFqSklMR1ZCUVdVc1RVRkJUVUVzV1VGQmNrSTdPMEZCUlRsQ1JDeFhRVUZQUXl4WlFVRlFPMEZCUTBFc1NVRlFSRHM3UVVGVFFTeFZRVUZQYkVRc1UwRkJVMmxFTEVkQlFWUXNSVUZCWXl4RlFVRmtMRU5CUVZBN1FVRkRRVHM3UVVGRlJEczdPenM3T3pzN08yZERRVTF4UWtjc1RTeEZRVUZSUXl4WExFVkJRV0U3UVVGRGVrTkJMR2xDUVVGalFTeGxRVUZsTEVOQlFUZENPenRCUVVWQkxFOUJRVWxETEZsQlFWbEdMRTlCUVU5MlJDeFJRVUZRTEVOQlFXZENMRVZCUVdoQ0xFTkJRV2hDT3p0QlFVVkJMRTlCUVVsNVJDeFZRVUZWTDBnc1RVRkJWaXhIUVVGdFFpeERRVUYyUWl4RlFVRXdRanRCUVVGRk8wRkJRek5DSzBnc1owSkJRVmtzVFVGQlRVRXNVMEZCYkVJN1FVRkRRVHM3UVVGRlJEdEJRVU5CTEU5QlFVbERMRmRCUVZkRUxGVkJRVlZGTEV0QlFWWXNRMEZCWjBJc1QwRkJhRUlzUTBGQlpqczdRVUZGUVR0QlFVTkJSQ3hqUVVGWFFTeFRRVUZUTDBRc1IwRkJWQ3hEUVVGaE8wRkJRVUVzVjBGQlVWRXNVMEZCVTNsRUxFbEJRVlFzUlVGQlpTeEZRVUZtTEVOQlFWSTdRVUZCUVN4SlFVRmlMRU5CUVZnN08wRkJSVUU3UVVGRFFTeFBRVUZKUml4VFFVRlRhRWtzVFVGQlZDeEhRVUZyUWpoSUxGZEJRWFJDTEVWQlFXMURPMEZCUTJ4RExGZEJRVTlCTEdOQlFXTkZMRk5CUVZOb1NTeE5RVUYyUWl4SFFVRm5ReXhEUVVGMlF5eEZRVUV3UXp0QlFVTjZRMmRKTEdOQlFWTkhMRTlCUVZRc1EwRkJhVUlzUTBGQmFrSTdRVUZEUVR0QlFVTkVPenRCUVVWRUxGVkJRVTlJTEZGQlFWQTdRVUZEUVRzN1FVRkZSRHM3T3pzN096czdNRUpCUzJVNVJDeExMRVZCUVU4N1FVRkRja0lzVDBGQlNXWXNUVUZCVFVNc1QwRkJUaXhEUVVGall5eExRVUZrTEVOQlFVb3NSVUZCTUVJc1QwRkJUMEVzUzBGQlVEdEJRVU14UWl4VlFVRlBMRU5CUVVOQkxFdEJRVVFzUTBGQlVEdEJRVU5CT3pzN096czdVVUZIVFhwRExFc3NSMEZCUVVFc1N6czdTVUZEUmpKSExFODdRVUZGVEN4dlFrRkJZenRCUVVGQk8wRkJSV0k3UVVGRVFUczdPMEZCUjBRN096czdPenM3TzJsRFFVbGxReXhMTEVWQlFVODdRVUZEY2tJc1QwRkJTVU1zVVVGQlVTeEpRVUZKZUVRc1MwRkJTaXhGUVVGYU8wRkJRMEVzVDBGQlNUVkRMRWxCUVVvN1FVRkRRU3hQUVVGSmNVY3NWVUZCVlN4RlFVRmtPenRCUVVWQlJpeFRRVUZOUnl4VFFVRk9MRU5CUVdkQ2VrWXNUMEZCYUVJc1EwRkJkMElzVlVGQlV6QkdMRkZCUVZRc1JVRkJiVUk3UVVGRE1VTkdMR05CUVZVc1JVRkJWanM3UVVGRlFTeFJRVUZKUlN4VFFVRlRReXhSUVVGVUxFdEJRWE5DTEVkQlFURkNMRVZCUVN0Q08wRkJRemxDUkN4alFVRlRSU3hKUVVGVUxFTkJRV00xUml4UFFVRmtMRU5CUVhOQ0xGVkJRVk0yUml4SFFVRlVMRVZCUVdNN1FVRkRia003UVVGRFFVd3NZMEZCVVd4RUxFbEJRVklzUTBGQllTeExRVUZMZDBRc1dVRkJUQ3hEUVVGclFrUXNSMEZCYkVJc1EwRkJZanRCUVVOQkxFMUJTRVE3UVVGTFFTeExRVTVFTEUxQlRVOHNTVUZCU1Vnc1UwRkJVME1zVVVGQlZDeExRVUZ6UWl4SFFVRXhRaXhGUVVFclFqdEJRVU55UXp0QlFVTkJlRWNzV1VGQlR5eExRVUZMTkVjc1pVRkJUQ3hEUVVGeFFrd3NVVUZCY2tJc1EwRkJVRHRCUVVOQk8wRkJRMEU3TzBGQlJVUklMRlZCUVUwNVF5eFJRVUZPTEVOQlFXVXNTVUZCU1hwRUxGTkJRVW9zUTBGQll5eEZRVUZEUXl4UFFVRlBkVWNzVDBGQlVpeEZRVUZwUW5CSExGVkJRVlVzUzBGQlN6SkhMR1ZCUVV3c1EwRkJjVUpNTEZGQlFYSkNMRU5CUVROQ0xFVkJRVEpFZGtjc1RVRkJUVUVzU1VGQmFrVXNSVUZCWkN4RFFVRm1PenRCUVVWQk8wRkJRMEZCTEZkQlFVOHNRMEZCVUR0QlFVTkJMRWxCYmtKRU96dEJRWEZDUVN4VlFVRlBiMGNzUzBGQlVEdEJRVU5CT3p0QlFVZEVPenM3T3pzN095dENRVWxoZEVjc1N5eEZRVUZQTzBGQlEyNUNMRlZCUVU5QkxFMUJRVTByUnl4UFFVRk9MRU5CUVdNc1IwRkJaQ3hGUVVGdFFpeEZRVUZ1UWl4RFFVRlFPMEZCUTBFN08wRkJSMFE3T3pzN096czdhME5CU1dkQ00wTXNTU3hGUVVGTk8wRkJRM0pDTEZkQlFWRkJMRXRCUVV0cVJTeFJRVUZpTzBGQlEwTXNVMEZCU3l4SFFVRk1PMEZCUTBNc1dVRkJUeXhIUVVGUU8wRkJRMFFzVTBGQlN5eEhRVUZNTzBGQlEwTXNXVUZCVDJsRkxFdEJRVXMwUXl4UlFVRk1MRXRCUVd0Q0xFbEJRV3hDTEVkQlFYbENMRWRCUVdoRE8wRkJRMFFzVTBGQlN5eEhRVUZNTzBGQlEwTXNXVUZCVHpWRExFdEJRVXMwUXl4UlFVRk1MRXRCUVd0Q0xFbEJRV3hDTEVkQlFYbENMRWRCUVdoRE8wRkJRMFFzVTBGQlN5eEhRVUZNTzBGQlEwTXNXVUZCVHpWRExFdEJRVXMwUXl4UlFVRk1MRXRCUVd0Q0xFbEJRV3hDTEVkQlFYbENMRWRCUVdoRE8wRkJVa1k3TzBGQlYwRXNWVUZCVHpWRExFdEJRVXRxUlN4UlFVRmFPMEZCUTBFN096czdPenRSUVVkTmFVY3NUeXhIUVVGQlFTeFBPMEZCUTFJN096czdPenRKUVV0TllTeE5PMEZCUTB3c2FVSkJRVmxETEUxQlFWb3NSVUZCYjBJN1FVRkJRVHM3UVVGRGJrSXNUMEZCUzNCS0xFbEJRVXdzUjBGQldTeEZRVUZhT3p0QlFVVkJMRTFCUVVseFNpeFpRVUZaUkN4UFFVRlBiRW9zVFVGQlVDeEhRVUZuUWl4RFFVRm9RaXhIUVVGdlFrTXNWVUZCVlVzc2IwSkJRVGxDTEVkQlFYRkVUQ3hWUVVGVlNTeHZRa0ZCTDBVN1FVRkRRU3hOUVVGSkswa3NhVUpCUVdsQ00wZ3NUVUZCVFRKRUxHRkJRVTRzUTBGQmIwSTRSQ3hQUVVGUGJFb3NUVUZCTTBJc1JVRkJiVU1zUTBGQmJrTXNRMEZCY2tJc1EwRktiVUlzUTBGSmVVTTdPMEZCUlRWRU8wRkJRMEVzVDBGQlMwWXNTVUZCVEN4RFFVRlZkVVlzU1VGQlZpeERRVUZsTEVsQlFVa3hSaXhMUVVGS0xFTkJRVlU3UVVGRGJrSkZMRk5CUVUxSkxGVkJRVlZGTEdsQ1FVUkhPMEZCUlc1Q1RDeFRRVUZOY1Vvc1ZVRkJWWGhJTEUxQlFWWXNRMEZCYVVKNVNDeGpRVUZxUWl4RlFVRnBRMjVLTEZWQlFWVk5MSEZDUVVFelF5eERRVVpoTEVWQlFWWXNRMEZCWmpzN1FVRkpRVHRCUVVOQk1ra3NVMEZCVDI1SExFOUJRVkFzUTBGQlpTeFZRVUZUZFVZc1MwRkJWQ3hGUVVGblFpOUZMRU5CUVdoQ0xFVkJRVzFDTzBGQlEycERLMFVzVTBGQlRUbERMRkZCUVU0c1EwRkJaU3hKUVVGSk1VUXNVMEZCU2l4RFFVRmpMRVZCUVVOb1F5eE5RVUZOUnl4VlFVRlZiMElzYjBKQlFXcENMRVZCUVdRc1EwRkJaanRCUVVOQkxGRkJRVXQyUWl4SlFVRk1MRU5CUVZWMVJpeEpRVUZXTEVOQlFXVnBSQ3hMUVVGbU8wRkJRMEVzUjBGSVJDeEZRVWRITEVsQlNFZzdRVUZKUVRzN1FVRkZSRHM3T3pzN096czdPRUpCU1ZrN1FVRkRXQ3hQUVVGSlpTeFJRVUZSTEVWQlFWbzdPMEZCUlVFN1FVRkRRU3hSUVVGTGRrb3NTVUZCVEN4RFFVRlZhVVFzVDBGQlZpeERRVUZyUWl4VlFVRkRkVWNzUTBGQlJEdEJRVUZCTEZkQlFVOUVMRkZCUVZGQkxFMUJRVTB4U0N4TlFVRk9MRU5CUVdFeVNDeEZRVUZGZWtvc1NVRkJaaXhGUVVGeFFubEtMRVZCUVVWMlNpeEpRVUYyUWl4RlFVRTJRblZLTEVWQlFVVjRTaXhKUVVFdlFpeERRVUZtTzBGQlFVRXNTVUZCYkVJN08wRkJSVUVzVlVGQlR5eEpRVUZKZVVvc1ZVRkJTaXhEUVVGbFJpeExRVUZtTEVOQlFWQTdRVUZEUVRzN1FVRkZSRHM3T3pzN096c3lRa0ZKVXp0QlFVTlNMRTlCUVVrc1QwRkJUMGNzU1VGQlVDeExRVUZuUWl4VlFVRndRaXhGUVVGblF5eFBRVUZQUVN4TFFVRkxReXhQUVVGUFF5eFpRVUZRTEVOQlFXOUNReXhMUVVGd1FpeERRVUV3UWl4SlFVRXhRaXhGUVVGblF5eExRVUZMUXl4VFFVRk1MRVZCUVdoRExFTkJRVXdzUTBGQlVEdEJRVU5vUXl4VlFVRlBMRWxCUVVsRExFMUJRVW9zUTBGQlZ5eExRVUZMUkN4VFFVRk1MRVZCUVZnc1JVRkJOa0owUml4UlFVRTNRaXhEUVVGelF5eFJRVUYwUXl4RFFVRlFPMEZCUTBFN08wRkJSVVU3T3pzN096czdORUpCU1ZVN1FVRkRWQ3hWUVVGUExEUkNRVUUwUWl4TFFVRkxkMFlzVFVGQlRDeEZRVUZ1UXp0QlFVTkJPenRCUVVWS096czdPenM3T3pKQ1FVbFpPMEZCUTFJc1ZVRkJUME1zVVVGQlVVTXNUVUZCVWl4RFFVRmxReXhMUVVGbUxFTkJRWEZDTEVsQlFVbEtMRTFCUVVvc1EwRkJWeXhMUVVGTFJDeFRRVUZNTEVWQlFWZ3NRMEZCY2tJc1EwRkJVRHRCUVVOQk96dEJRVVZLT3pzN096czdPekpDUVVsVFRTeFJMRVZCUVZVN1FVRkRiRUlzVDBGQlNUZERMRk5CUVZNc1NVRkJTWGRETEUxQlFVb3NRMEZCVnl4TFFVRkxSQ3hUUVVGTUxFVkJRVmdzUTBGQllqdEJRVU5CVHl4TlFVRkhReXhUUVVGSUxFTkJRV0ZHTEZkQlFWY3NUVUZCZUVJc1JVRkJaME0zUXl4TlFVRm9ReXhGUVVGM1F5eFZRVUZWWjBRc1IwRkJWaXhGUVVGbE8wRkJRM1JFTEZGQlFVZEJMRWRCUVVnc1JVRkJVU3hQUVVGUFF5eFJRVUZSUXl4SFFVRlNMRU5CUVZsR0xFZEJRVm9zUTBGQlVEdEJRVU5TTEVsQlJrUTdRVUZIUVRzN096czdPMUZCUjAxd1FpeE5MRWRCUVVGQkxFMGlMQ0ptYVd4bElqb2lhVzVrWlhndWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRTlpYW1WamRDQnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQjBhR1VnWTJoMWJtc2djMlZqZEdsdmJpQnZaaUJoSUUxSlJFa2dabWxzWlM1Y2JpQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQm1hV1ZzWkhNZ0xTQjdkSGx3WlRvZ2JuVnRZbVZ5TENCa1lYUmhPaUJoY25KaGVTd2djMmw2WlRvZ1lYSnlZWGw5WEc0Z0tpQkFjbVYwZFhKdUlIdERhSFZ1YTMxY2JpQXFMMXh1WTJ4aGMzTWdRMmgxYm1zZ2UxeHVYSFJqYjI1emRISjFZM1J2Y2lobWFXVnNaSE1wSUh0Y2JseDBYSFIwYUdsekxuUjVjR1VnUFNCbWFXVnNaSE11ZEhsd1pUdGNibHgwWEhSMGFHbHpMbVJoZEdFZ1BTQm1hV1ZzWkhNdVpHRjBZVHRjYmx4MFhIUjBhR2x6TG5OcGVtVWdQU0JiTUN3Z01Dd2dNQ3dnWm1sbGJHUnpMbVJoZEdFdWJHVnVaM1JvWFR0Y2JseDBmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ2UwTm9kVzVyZlR0Y2JpOHFLbHh1SUNvZ1RVbEVTU0JtYVd4bElHWnZjbTFoZENCamIyNXpkR0Z1ZEhNc0lHbHVZMngxWkdsdVp5QnViM1JsSUMwK0lFMUpSRWtnYm5WdFltVnlJSFJ5WVc1emJHRjBhVzl1TGx4dUlDb2dRSEpsZEhWeWJpQjdRMjl1YzNSaGJuUnpmVnh1SUNvdlhHNWNiblpoY2lCRGIyNXpkR0Z1ZEhNZ1BTQjdYRzVjZEZaRlVsTkpUMDVjZEZ4MFhIUmNkRngwT2lBbk1TNDFMakluTEZ4dVhIUklSVUZFUlZKZlEwaFZUa3RmVkZsUVJTQWdYSFJjZERvZ1d6QjROR1FzSURCNE5UUXNJREI0Tmpnc0lEQjROalJkTENBdkx5Qk5kR2hrWEc1Y2RFaEZRVVJGVWw5RFNGVk9TMTlNUlU1SFZFZ2dJRngwT2lCYk1IZ3dNQ3dnTUhnd01Dd2dNSGd3TUN3Z01IZ3dObDBzSUM4dklFaGxZV1JsY2lCemFYcGxJR1p2Y2lCVFRVWmNibHgwU0VWQlJFVlNYME5JVlU1TFgwWlBVazFCVkRBZ0lDQWdPaUJiTUhnd01Dd2dNSGd3TUYwc0lDOHZJRTFwWkdrZ1ZIbHdaU0F3SUdsa1hHNWNkRWhGUVVSRlVsOURTRlZPUzE5R1QxSk5RVlF4SUNBZ0lEb2dXekI0TURBc0lEQjRNREZkTENBdkx5Qk5hV1JwSUZSNWNHVWdNU0JwWkZ4dVhIUklSVUZFUlZKZlEwaFZUa3RmUkVsV1NWTkpUMDRnSUNBNklGc3dlREF3TENBd2VEZ3dYU3dnTHk4Z1JHVm1ZWFZzZEhNZ2RHOGdNVEk0SUhScFkydHpJSEJsY2lCaVpXRjBYRzVjZEZSU1FVTkxYME5JVlU1TFgxUlpVRVZjZEZ4ME9pQmJNSGcwWkN3Z01IZzFOQ3dnTUhnM01pd2dNSGcyWWwwc0lDOHZJRTFVY21zc1hHNWNkRTFGVkVGZlJWWkZUbFJmU1VSY2RGeDBYSFE2SURCNFJrWXNYRzVjZEUxRlZFRmZWRVZZVkY5SlJGeDBYSFJjZERvZ01IZ3dNU3hjYmx4MFRVVlVRVjlEVDFCWlVrbEhTRlJmU1VSY2RGeDBPaUF3ZURBeUxGeHVYSFJOUlZSQlgxUlNRVU5MWDA1QlRVVmZTVVJjZEZ4ME9pQXdlREF6TEZ4dVhIUk5SVlJCWDBsT1UxUlNWVTFGVGxSZlRrRk5SVjlKUkNBNklEQjRNRFFzWEc1Y2RFMUZWRUZmVEZsU1NVTmZTVVJjZEZ4MFhIUTZJREI0TURVc1hHNWNkRTFGVkVGZlRVRlNTMFZTWDBsRVhIUmNkRngwT2lBd2VEQTJMRnh1WEhSTlJWUkJYME5WUlY5UVQwbE9WRngwWEhSY2REb2dNSGd3Tnl4Y2JseDBUVVZVUVY5VVJVMVFUMTlKUkZ4MFhIUmNkRG9nTUhnMU1TeGNibHgwVFVWVVFWOVRUVlJRUlY5UFJrWlRSVlJjZEZ4ME9pQXdlRFUwTEZ4dVhIUk5SVlJCWDFSSlRVVmZVMGxIVGtGVVZWSkZYMGxFWEhRNklEQjROVGdzWEc1Y2RFMUZWRUZmUzBWWlgxTkpSMDVCVkZWU1JWOUpSRngwT2lBd2VEVTVMRnh1WEhSTlJWUkJYMFZPUkY5UFJsOVVVa0ZEUzE5SlJGeDBPaUJiTUhneVJpd2dNSGd3TUYwc1hHNWNkRU5QVGxSU1QweE1SVkpmUTBoQlRrZEZYMU5VUVZSVlV6b2dNSGhDTUN3Z0x5OGdhVzVqYkhWa1pYTWdZMmhoYm01bGJDQnVkVzFpWlhJZ0tEQXBYRzVjZEZCU1QwZFNRVTFmUTBoQlRrZEZYMU5VUVZSVlUxeDBPaUF3ZUVNd0xDQXZMeUJwYm1Oc2RXUmxjeUJqYUdGdWJtVnNJRzUxYldKbGNpQW9NQ2xjYm4wN1hHNWNibVY0Y0c5eWRDQjdRMjl1YzNSaGJuUnpmVHRjYmk4cUtseHVJQ29nU0c5c1pITWdZV3hzSUdSaGRHRWdabTl5SUdFZ1hDSmpiMjUwY205c2JHVnlJR05vWVc1blpWd2lJRTFKUkVrZ1pYWmxiblJjYmlBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCbWFXVnNaSE1nZTJOdmJuUnliMnhzWlhKT2RXMWlaWEk2SUdsdWRHVm5aWElzSUdOdmJuUnliMnhzWlhKV1lXeDFaVG9nYVc1MFpXZGxjbjFjYmlBcUlFQnlaWFIxY200Z2UwTnZiblJ5YjJ4c1pYSkRhR0Z1WjJWRmRtVnVkSDFjYmlBcUwxeHVZMnhoYzNNZ1EyOXVkSEp2Ykd4bGNrTm9ZVzVuWlVWMlpXNTBJSHRjYmx4MFkyOXVjM1J5ZFdOMGIzSW9abWxsYkdSektTQjdYRzVjZEZ4MGRHaHBjeTUwZVhCbElEMGdKMk52Ym5SeWIyeHNaWEluTzF4dVhIUmNkQzh2SUdSbGJIUmhJSFJwYldVZ1pHVm1ZWFZzZEhNZ2RHOGdNQzVjYmx4MFhIUjBhR2x6TG1SaGRHRWdQU0JWZEdsc2N5NXVkVzFpWlhKVWIxWmhjbWxoWW14bFRHVnVaM1JvS0RCNE1EQXBMbU52Ym1OaGRDaERiMjV6ZEdGdWRITXVRMDlPVkZKUFRFeEZVbDlEU0VGT1IwVmZVMVJCVkZWVExDQm1hV1ZzWkhNdVkyOXVkSEp2Ykd4bGNrNTFiV0psY2l3Z1ptbGxiR1J6TG1OdmJuUnliMnhzWlhKV1lXeDFaU2s3WEc1Y2RIMWNibjFjYmx4dVpYaHdiM0owSUh0RGIyNTBjbTlzYkdWeVEyaGhibWRsUlhabGJuUjlPMXh1THlvcVhHNGdLaUJQWW1wbFkzUWdjbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdZU0J0WlhSaElHVjJaVzUwTGx4dUlDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlHWnBaV3hrY3lBdElIUjVjR1VzSUdSaGRHRmNiaUFxSUVCeVpYUjFjbTRnZTAxbGRHRkZkbVZ1ZEgxY2JpQXFMMXh1WTJ4aGMzTWdUV1YwWVVWMlpXNTBJSHRjYmx4MFkyOXVjM1J5ZFdOMGIzSW9abWxsYkdSektTQjdYRzVjZEZ4MGRHaHBjeTUwZVhCbElEMGdKMjFsZEdFbk8xeHVYSFJjZEhSb2FYTXVaR0YwWVNBOUlGVjBhV3h6TG01MWJXSmxjbFJ2Vm1GeWFXRmliR1ZNWlc1bmRHZ29NSGd3TUNrN0x5OGdVM1JoY25RZ2QybDBhQ0I2WlhKdklIUnBiV1VnWkdWc2RHRmNibHgwWEhSMGFHbHpMbVJoZEdFZ1BTQjBhR2x6TG1SaGRHRXVZMjl1WTJGMEtFTnZibk4wWVc1MGN5NU5SVlJCWDBWV1JVNVVYMGxFTENCbWFXVnNaSE11WkdGMFlTazdYRzVjZEgxY2JuMWNibHh1Wlhod2IzSjBJSHROWlhSaFJYWmxiblI5TzF4dUx5b3FYRzRnS2lCWGNtRndjR1Z5SUdadmNpQnViM1JsVDI1RmRtVnVkQzl1YjNSbFQyWm1SWFpsYm5RZ2IySnFaV04wY3lCMGFHRjBJR0oxYVd4a2N5QmliM1JvSUdWMlpXNTBjeTVjYmlBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCbWFXVnNaSE1nTFNCN2NHbDBZMmc2SUNkYlF6UmRKeXdnWkhWeVlYUnBiMjQ2SUNjMEp5d2dkMkZwZERvZ0p6UW5MQ0IyWld4dlkybDBlVG9nTVMweE1EQjlYRzRnS2lCQWNtVjBkWEp1SUh0T2IzUmxSWFpsYm5SOVhHNGdLaTljYm1Oc1lYTnpJRTV2ZEdWRmRtVnVkQ0I3WEc1Y2RHTnZibk4wY25WamRHOXlLR1pwWld4a2N5a2dlMXh1WEhSY2RIUm9hWE11ZEhsd1pTQmNkRngwUFNBbmJtOTBaU2M3WEc1Y2RGeDBkR2hwY3k1d2FYUmphQ0JjZEZ4MFBTQlZkR2xzY3k1MGIwRnljbUY1S0dacFpXeGtjeTV3YVhSamFDazdYRzVjZEZ4MGRHaHBjeTUzWVdsMElGeDBYSFE5SUdacFpXeGtjeTUzWVdsMElIeDhJREE3WEc1Y2RGeDBkR2hwY3k1a2RYSmhkR2x2YmlCY2REMGdabWxsYkdSekxtUjFjbUYwYVc5dU8xeHVYSFJjZEhSb2FYTXVjMlZ4ZFdWdWRHbGhiQ0E5SUdacFpXeGtjeTV6WlhGMVpXNTBhV0ZzSUh4OElHWmhiSE5sTzF4dVhIUmNkSFJvYVhNdWRtVnNiMk5wZEhrZ1hIUTlJR1pwWld4a2N5NTJaV3h2WTJsMGVTQjhmQ0ExTUR0Y2JseDBYSFIwYUdsekxtTm9ZVzV1Wld3Z1hIUTlJR1pwWld4a2N5NWphR0Z1Ym1Wc0lIeDhJREU3WEc1Y2RGeDBkR2hwY3k1eVpYQmxZWFFnWEhROUlHWnBaV3hrY3k1eVpYQmxZWFFnZkh3Z01UdGNibHgwWEhSMGFHbHpMblpsYkc5amFYUjVJRngwUFNCMGFHbHpMbU52Ym5abGNuUldaV3h2WTJsMGVTaDBhR2x6TG5abGJHOWphWFI1S1R0Y2JseDBYSFIwYUdsekxtZHlZV05sWEhSY2REMGdabWxsYkdSekxtZHlZV05sTzF4dVhIUmNkSFJvYVhNdVluVnBiR1JFWVhSaEtDazdYRzVjZEgxY2JseHVYSFF2S2lwY2JseDBJQ29nUW5WcGJHUnpJR2x1ZENCaGNuSmhlU0JtYjNJZ2RHaHBjeUJsZG1WdWRDNWNibHgwSUNvZ1FISmxkSFZ5YmlCN1RtOTBaVVYyWlc1MGZWeHVYSFFnS2k5Y2JseDBZblZwYkdSRVlYUmhLQ2tnZTF4dVhIUmNkSFJvYVhNdVpHRjBZU0E5SUZ0ZE8xeHVYRzVjZEZ4MGRtRnlJSFJwWTJ0RWRYSmhkR2x2YmlBOUlIUm9hWE11WjJWMFZHbGphMFIxY21GMGFXOXVLSFJvYVhNdVpIVnlZWFJwYjI0c0lDZHViM1JsSnlrN1hHNWNkRngwZG1GeUlISmxjM1JFZFhKaGRHbHZiaUE5SUhSb2FYTXVaMlYwVkdsamEwUjFjbUYwYVc5dUtIUm9hWE11ZDJGcGRDd2dKM0psYzNRbktUdGNibHh1WEhSY2RDOHZJRUZ3Y0d4NUlHZHlZV05sSUc1dmRHVW9jeWtnWVc1a0lITjFZblJ5WVdOMElIUnBZMnR6SUNoamRYSnlaVzUwYkhrZ01TQjBhV05ySUhCbGNpQm5jbUZqWlNCdWIzUmxLU0JtY205dElIUnBZMnRFZFhKaGRHbHZiaUJ6YnlCdVpYUWdkbUZzZFdVZ2FYTWdkR2hsSUhOaGJXVmNibHgwWEhScFppQW9kR2hwY3k1bmNtRmpaU2tnZTF4dVhIUmNkRngwYkdWMElHZHlZV05sUkhWeVlYUnBiMjRnUFNBeE8xeHVYSFJjZEZ4MGRHaHBjeTVuY21GalpTQTlJRlYwYVd4ekxuUnZRWEp5WVhrb2RHaHBjeTVuY21GalpTazdYRzVjZEZ4MFhIUjBhR2x6TG1keVlXTmxMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNG9jR2wwWTJncElIdGNibHgwWEhSY2RGeDBiR1YwSUc1dmRHVkZkbVZ1ZENBOUlHNWxkeUJPYjNSbFJYWmxiblFvZTNCcGRHTm9PblJvYVhNdVozSmhZMlVzSUdSMWNtRjBhVzl1T2lkVUp5QXJJR2R5WVdObFJIVnlZWFJwYjI1OUtUdGNibHgwWEhSY2RGeDBkR2hwY3k1a1lYUmhJRDBnZEdocGN5NWtZWFJoTG1OdmJtTmhkQ2h1YjNSbFJYWmxiblF1WkdGMFlTbGNibHh1WEhSY2RGeDBYSFIwYVdOclJIVnlZWFJwYjI0Z0xUMGdaM0poWTJWRWRYSmhkR2x2Ymp0Y2JseDBYSFJjZEgwc0lIUm9hWE1wTzF4dVhIUmNkSDFjYmx4dVhIUmNkQzh2SUdacFpXeGtjeTV3YVhSamFDQmpiM1ZzWkNCaVpTQmhiaUJoY25KaGVTQnZaaUJ3YVhSamFHVnpMbHh1WEhSY2RDOHZJRWxtSUhOdklHTnlaV0YwWlNCdWIzUmxJR1YyWlc1MGN5Qm1iM0lnWldGamFDQmhibVFnWVhCd2JIa2dkR2hsSUhOaGJXVWdaSFZ5WVhScGIyNHVYRzVjZEZ4MGRtRnlJRzV2ZEdWUGJpd2dibTkwWlU5bVpqdGNibHgwWEhScFppQW9RWEp5WVhrdWFYTkJjbkpoZVNoMGFHbHpMbkJwZEdOb0tTa2dlMXh1WEhSY2RGeDBMeThnUW5rZ1pHVm1ZWFZzZENCMGFHbHpJR2x6SUdFZ1kyaHZjbVFnYVdZZ2FYUW5jeUJoYmlCaGNuSmhlU0J2WmlCdWIzUmxjeUIwYUdGMElISmxjWFZwY21WeklHOXVaU0JPYjNSbFQyNUZkbVZ1ZEM1Y2JseDBYSFJjZEM4dklFbG1JSFJvYVhNdWMyVnhkV1Z1ZEdsaGJDQTlQVDBnZEhKMVpTQjBhR1Z1SUdsMEozTWdZU0J6WlhGMVpXNTBhV0ZzSUhOMGNtbHVaeUJ2WmlCdWIzUmxjeUIwYUdGMElISmxjWFZwY21WeklITmxjR0Z5WVhSbElFNXZkR1ZQYmtWMlpXNTBjeTVjYmx4MFhIUmNkR2xtSUNnZ0lTQjBhR2x6TG5ObGNYVmxiblJwWVd3cElIdGNibHgwWEhSY2RGeDBMeThnU0dGdVpHeGxJSEpsY0dWaGRGeHVYSFJjZEZ4MFhIUm1iM0lnS0haaGNpQnFJRDBnTURzZ2FpQThJSFJvYVhNdWNtVndaV0YwT3lCcUt5c3BJSHRjYmx4MFhIUmNkRngwWEhRdkx5Qk9iM1JsSUc5dVhHNWNkRngwWEhSY2RGeDBkR2hwY3k1d2FYUmphQzVtYjNKRllXTm9LR1oxYm1OMGFXOXVLSEFzSUdrcElIdGNibHgwWEhSY2RGeDBYSFJjZEdsbUlDaHBJRDA5SURBcElIdGNibHgwWEhSY2RGeDBYSFJjZEZ4MGJtOTBaVTl1SUQwZ2JtVjNJRTV2ZEdWUGJrVjJaVzUwS0h0a1lYUmhPaUJWZEdsc2N5NXVkVzFpWlhKVWIxWmhjbWxoWW14bFRHVnVaM1JvS0hKbGMzUkVkWEpoZEdsdmJpa3VZMjl1WTJGMEtIUm9hWE11WjJWMFRtOTBaVTl1VTNSaGRIVnpLQ2tzSUZWMGFXeHpMbWRsZEZCcGRHTm9LSEFwTENCMGFHbHpMblpsYkc5amFYUjVLWDBwTzF4dVhHNWNkRngwWEhSY2RGeDBYSFI5SUdWc2MyVWdlMXh1WEhSY2RGeDBYSFJjZEZ4MFhIUXZMeUJTZFc1dWFXNW5JSE4wWVhSMWN5QW9ZMkZ1SUc5dGJXbDBJSFJvWlNCdWIzUmxJRzl1SUhOMFlYUjFjeWxjYmx4MFhIUmNkRngwWEhSY2RGeDBibTkwWlU5dUlEMGdibVYzSUU1dmRHVlBia1YyWlc1MEtIdGtZWFJoT2lCYk1Dd2dWWFJwYkhNdVoyVjBVR2wwWTJnb2NDa3NJSFJvYVhNdWRtVnNiMk5wZEhsZGZTazdYRzVjZEZ4MFhIUmNkRngwWEhSOVhHNWNibHgwWEhSY2RGeDBYSFJjZEhSb2FYTXVaR0YwWVNBOUlIUm9hWE11WkdGMFlTNWpiMjVqWVhRb2JtOTBaVTl1TG1SaGRHRXBPMXh1WEhSY2RGeDBYSFJjZEgwc0lIUm9hWE1wTzF4dVhHNWNkRngwWEhSY2RGeDBMeThnVG05MFpTQnZabVpjYmx4MFhIUmNkRngwWEhSMGFHbHpMbkJwZEdOb0xtWnZja1ZoWTJnb1puVnVZM1JwYjI0b2NDd2dhU2tnZTF4dVhIUmNkRngwWEhSY2RGeDBhV1lnS0drZ1BUMGdNQ2tnZTF4dVhIUmNkRngwWEhSY2RGeDBYSFJ1YjNSbFQyWm1JRDBnYm1WM0lFNXZkR1ZQWm1aRmRtVnVkQ2g3WkdGMFlUb2dWWFJwYkhNdWJuVnRZbVZ5Vkc5V1lYSnBZV0pzWlV4bGJtZDBhQ2gwYVdOclJIVnlZWFJwYjI0cExtTnZibU5oZENoMGFHbHpMbWRsZEU1dmRHVlBabVpUZEdGMGRYTW9LU3dnVlhScGJITXVaMlYwVUdsMFkyZ29jQ2tzSUhSb2FYTXVkbVZzYjJOcGRIa3BmU2s3WEc1Y2JseDBYSFJjZEZ4MFhIUmNkSDBnWld4elpTQjdYRzVjZEZ4MFhIUmNkRngwWEhSY2RDOHZJRkoxYm01cGJtY2djM1JoZEhWeklDaGpZVzRnYjIxdGFYUWdkR2hsSUc1dmRHVWdiMlptSUhOMFlYUjFjeWxjYmx4MFhIUmNkRngwWEhSY2RGeDBibTkwWlU5bVppQTlJRzVsZHlCT2IzUmxUMlptUlhabGJuUW9lMlJoZEdFNklGc3dMQ0JWZEdsc2N5NW5aWFJRYVhSamFDaHdLU3dnZEdocGN5NTJaV3h2WTJsMGVWMTlLVHRjYmx4MFhIUmNkRngwWEhSY2RIMWNibHh1WEhSY2RGeDBYSFJjZEZ4MGRHaHBjeTVrWVhSaElEMGdkR2hwY3k1a1lYUmhMbU52Ym1OaGRDaHViM1JsVDJabUxtUmhkR0VwTzF4dVhIUmNkRngwWEhSY2RIMHNJSFJvYVhNcE8xeHVYSFJjZEZ4MFhIUjlYRzVjYmx4MFhIUmNkSDBnWld4elpTQjdYRzVjZEZ4MFhIUmNkQzh2SUVoaGJtUnNaU0J5WlhCbFlYUmNibHgwWEhSY2RGeDBabTl5SUNoMllYSWdhaUE5SURBN0lHb2dQQ0IwYUdsekxuSmxjR1ZoZERzZ2Fpc3JLU0I3WEc1Y2RGeDBYSFJjZEZ4MGRHaHBjeTV3YVhSamFDNW1iM0pGWVdOb0tHWjFibU4wYVc5dUtIQXNJR2twSUh0Y2JseDBYSFJjZEZ4MFhIUmNkQzh2SUhKbGMzUkVkWEpoZEdsdmJpQnZibXg1SUdGd2NHeHBaWE1nZEc4Z1ptbHljM1FnYm05MFpWeHVYSFJjZEZ4MFhIUmNkRngwYVdZZ0tHa2dQaUF3S1NCN1hHNWNkRngwWEhSY2RGeDBYSFJjZEhKbGMzUkVkWEpoZEdsdmJpQTlJREE3WEc1Y2RGeDBYSFJjZEZ4MFhIUjlYRzVjYmx4MFhIUmNkRngwWEhSY2RDOHZJRWxtSUdSMWNtRjBhVzl1SUdseklEaDBhQ0IwY21sd2JHVjBjeUIzWlNCdVpXVmtJSFJ2SUcxaGEyVWdjM1Z5WlNCMGFHRjBJSFJvWlNCMGIzUmhiQ0IwYVdOcmN5QTlQU0J4ZFdGeWRHVnlJRzV2ZEdVdVhHNWNkRngwWEhSY2RGeDBYSFF2THlCVGJ5d2dkR2hsSUd4aGMzUWdiMjVsSUhkcGJHd2dibVZsWkNCMGJ5QmlaU0IwYUdVZ2NtVnRZV2x1WkdWeVhHNWNkRngwWEhSY2RGeDBYSFJwWmlBb2RHaHBjeTVrZFhKaGRHbHZiaUE5UFQwZ0p6aDBKeUFtSmlCcElEMDlJSFJvYVhNdWNHbDBZMmd1YkdWdVozUm9JQzBnTVNrZ2UxeHVYSFJjZEZ4MFhIUmNkRngwWEhSc1pYUWdjWFZoY25SbGNsUnBZMnR6SUQwZ1ZYUnBiSE11Ym5WdFltVnlSbkp2YlVKNWRHVnpLRU52Ym5OMFlXNTBjeTVJUlVGRVJWSmZRMGhWVGt0ZlJFbFdTVk5KVDA0cE8xeHVYSFJjZEZ4MFhIUmNkRngwWEhSMGFXTnJSSFZ5WVhScGIyNGdQU0J4ZFdGeWRHVnlWR2xqYTNNZ0xTQW9kR2xqYTBSMWNtRjBhVzl1SUNvZ01pazdYRzVjZEZ4MFhIUmNkRngwWEhSOVhHNWNibHgwWEhSY2RGeDBYSFJjZEc1dmRHVlBiaUE5SUc1bGR5Qk9iM1JsVDI1RmRtVnVkQ2g3WkdGMFlUb2dWWFJwYkhNdWJuVnRZbVZ5Vkc5V1lYSnBZV0pzWlV4bGJtZDBhQ2h5WlhOMFJIVnlZWFJwYjI0cExtTnZibU5oZENoYmRHaHBjeTVuWlhST2IzUmxUMjVUZEdGMGRYTW9LU3dnVlhScGJITXVaMlYwVUdsMFkyZ29jQ2tzSUhSb2FYTXVkbVZzYjJOcGRIbGRLWDBwTzF4dVhIUmNkRngwWEhSY2RGeDBibTkwWlU5bVppQTlJRzVsZHlCT2IzUmxUMlptUlhabGJuUW9lMlJoZEdFNklGVjBhV3h6TG01MWJXSmxjbFJ2Vm1GeWFXRmliR1ZNWlc1bmRHZ29kR2xqYTBSMWNtRjBhVzl1S1M1amIyNWpZWFFvVzNSb2FYTXVaMlYwVG05MFpVOW1abE4wWVhSMWN5Z3BMQ0JWZEdsc2N5NW5aWFJRYVhSamFDaHdLU3dnZEdocGN5NTJaV3h2WTJsMGVWMHBmU2s3WEc1Y2JseDBYSFJjZEZ4MFhIUmNkSFJvYVhNdVpHRjBZU0E5SUhSb2FYTXVaR0YwWVM1amIyNWpZWFFvYm05MFpVOXVMbVJoZEdFc0lHNXZkR1ZQWm1ZdVpHRjBZU2s3WEc1Y2RGeDBYSFJjZEZ4MGZTd2dkR2hwY3lrN1hHNWNkRngwWEhSY2RIMWNibHgwWEhSY2RIMWNibHh1WEhSY2RGeDBjbVYwZFhKdUlIUm9hWE03WEc1Y2RGeDBmVnh1WEc1Y2RGeDBkR2h5YjNjZ0ozQnBkR05vSUcxMWMzUWdZbVVnWVc0Z1lYSnlZWGt1Snp0Y2JseDBmVHRjYmx4dVhIUXZLaXBjYmx4MElDb2dRMjl1ZG1WeWRITWdkbVZzYjJOcGRIa2dkRzhnZG1Gc2RXVWdNQzB4TWpkY2JseDBJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJSFpsYkc5amFYUjVJQzBnVm1Wc2IyTnBkSGtnZG1Gc2RXVWdNUzB4TURCY2JseDBJQ29nUUhKbGRIVnliaUI3Ym5WdFltVnlmVnh1WEhRZ0tpOWNibHgwWTI5dWRtVnlkRlpsYkc5amFYUjVLSFpsYkc5amFYUjVLU0I3WEc1Y2RGeDBMeThnVFdGNElIQmhjM05sWkNCMllXeDFaU0JzYVcxcGRHVmtJSFJ2SURFd01GeHVYSFJjZEhabGJHOWphWFI1SUQwZ2RtVnNiMk5wZEhrZ1BpQXhNREFnUHlBeE1EQWdPaUIyWld4dlkybDBlVHRjYmx4MFhIUnlaWFIxY200Z1RXRjBhQzV5YjNWdVpDaDJaV3h2WTJsMGVTQXZJREV3TUNBcUlERXlOeWs3WEc1Y2RIMDdYRzVjYmx4MEx5b3FYRzVjZENBcUlFZGxkSE1nZEdobElIUnZkR0ZzSUc1MWJXSmxjaUJ2WmlCMGFXTnJjeUJpWVhObFpDQnZiaUJ3WVhOelpXUWdaSFZ5WVhScGIyNHVYRzVjZENBcUlFNXZkR1U2SUhSNWNHVTlQU2R1YjNSbEp5QmtaV1poZFd4MGN5QjBieUJ4ZFdGeWRHVnlJRzV2ZEdVc0lIUjVjR1U5UFQwbmNtVnpkQ2NnWkdWbVlYVnNkSE1nZEc4Z01GeHVYSFFnS2lCQWNHRnlZVzBnZXloemRISnBibWQ4WVhKeVlYa3BmU0JrZFhKaGRHbHZibHh1WEhRZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RIbHdaU0JiSjI1dmRHVW5MQ0FuY21WemRDZGRYRzVjZENBcUlFQnlaWFIxY200Z2UyNTFiV0psY24xY2JseDBJQ292WEc1Y2RHZGxkRlJwWTJ0RWRYSmhkR2x2Ymloa2RYSmhkR2x2Yml3Z2RIbHdaU2tnZTF4dVhIUmNkR2xtSUNoQmNuSmhlUzVwYzBGeWNtRjVLR1IxY21GMGFXOXVLU2tnZTF4dVhIUmNkRngwTHk4Z1VtVmpkWEp6YVhabGJIa2daWGhsWTNWMFpTQjBhR2x6SUcxbGRHaHZaQ0JtYjNJZ1pXRmphQ0JwZEdWdElHbHVJSFJvWlNCaGNuSmhlU0JoYm1RZ2NtVjBkWEp1SUhSb1pTQnpkVzBnYjJZZ2RHbGpheUJrZFhKaGRHbHZibk11WEc1Y2RGeDBYSFJ5WlhSMWNtNGdaSFZ5WVhScGIyNHViV0Z3S0daMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc1Y2RGeDBYSFJjZEhKbGRIVnliaUIwYUdsekxtZGxkRlJwWTJ0RWRYSmhkR2x2YmloMllXeDFaU3dnZEhsd1pTazdYRzVjZEZ4MFhIUjlMQ0IwYUdsektTNXlaV1IxWTJVb1puVnVZM1JwYjI0b1lTd2dZaWtnZTF4dVhIUmNkRngwWEhSeVpYUjFjbTRnWVNBcklHSTdYRzVjZEZ4MFhIUjlMQ0F3S1R0Y2JseDBYSFI5WEc1Y2JseDBYSFJrZFhKaGRHbHZiaUE5SUdSMWNtRjBhVzl1TG5SdlUzUnlhVzVuS0NrN1hHNWNibHgwWEhScFppQW9aSFZ5WVhScGIyNHVkRzlNYjNkbGNrTmhjMlVvS1M1amFHRnlRWFFvTUNrZ1BUMDlJQ2QwSnlrZ2UxeHVYSFJjZEZ4MEx5OGdTV1lnWkhWeVlYUnBiMjRnYzNSaGNuUnpJSGRwZEdnZ0ozUW5JSFJvWlc0Z2RHaGxJRzUxYldKbGNpQjBhR0YwSUdadmJHeHZkM01nYVhNZ1lXNGdaWGh3YkdsamFYUWdkR2xqYXlCamIzVnVkRnh1WEhSY2RGeDBjbVYwZFhKdUlIQmhjbk5sU1c1MEtHUjFjbUYwYVc5dUxuTjFZbk4wY21sdVp5Z3hLU2s3WEc1Y2RGeDBmVnh1WEc1Y2RGeDBMeThnVG1WbFpDQjBieUJoY0hCc2VTQmtkWEpoZEdsdmJpQm9aWEpsTGlBZ1VYVmhjblJsY2lCdWIzUmxJRDA5SUVOdmJuTjBZVzUwY3k1SVJVRkVSVkpmUTBoVlRrdGZSRWxXU1ZOSlQwNWNibHgwWEhRdkx5QlNiM1Z1WkdsdVp5QnZibXg1SUdGd2NHeHBaWE1nZEc4Z2RISnBjR3hsZEhNc0lIZG9hV05vSUhSb1pTQnlaVzFoYVc1a1pYSWdhWE1nYUdGdVpHeGxaQ0JpWld4dmQxeHVYSFJjZEhaaGNpQnhkV0Z5ZEdWeVZHbGphM01nUFNCVmRHbHNjeTV1ZFcxaVpYSkdjbTl0UW5sMFpYTW9RMjl1YzNSaGJuUnpMa2hGUVVSRlVsOURTRlZPUzE5RVNWWkpVMGxQVGlrN1hHNWNkRngwY21WMGRYSnVJRTFoZEdndWNtOTFibVFvY1hWaGNuUmxjbFJwWTJ0eklDb2dkR2hwY3k1blpYUkVkWEpoZEdsdmJrMTFiSFJwY0d4cFpYSW9aSFZ5WVhScGIyNHNJSFI1Y0dVcEtUdGNibHgwZlZ4dVhHNWNkQzhxS2x4dVhIUWdLaUJIWlhSeklIZG9ZWFFnZEc4Z2JYVnNkR2x3YkdVZ2RHbGphM012Y1hWaGNuUmxjaUJ1YjNSbElHSjVJSFJ2SUdkbGRDQjBhR1VnYzNCbFkybG1hV1ZrSUdSMWNtRjBhVzl1TGx4dVhIUWdLaUJPYjNSbE9pQjBlWEJsUFQwbmJtOTBaU2NnWkdWbVlYVnNkSE1nZEc4Z2NYVmhjblJsY2lCdWIzUmxMQ0IwZVhCbFBUMDlKM0psYzNRbklHUmxabUYxYkhSeklIUnZJREJjYmx4MElDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHUjFjbUYwYVc5dVhHNWNkQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0IwZVhCbElGc25ibTkwWlNjc0ozSmxjM1FuWFZ4dVhIUWdLaUJBY21WMGRYSnVJSHR1ZFcxaVpYSjlYRzVjZENBcUwxeHVYSFJuWlhSRWRYSmhkR2x2YmsxMWJIUnBjR3hwWlhJb1pIVnlZWFJwYjI0c0lIUjVjR1VwSUh0Y2JseDBYSFF2THlCT1pXVmtJSFJ2SUdGd2NHeDVJR1IxY21GMGFXOXVJR2hsY21VdUlDQlJkV0Z5ZEdWeUlHNXZkR1VnUFQwZ1EyOXVjM1JoYm5SekxraEZRVVJGVWw5RFNGVk9TMTlFU1ZaSlUwbFBUbHh1WEhSY2RITjNhWFJqYUNBb1pIVnlZWFJwYjI0cElIdGNibHgwWEhSY2RHTmhjMlVnSnpBbk9seHVYSFJjZEZ4MFhIUnlaWFIxY200Z01EdGNibHgwWEhSY2RHTmhjMlVnSnpFbk9seHVYSFJjZEZ4MFhIUnlaWFIxY200Z05EdGNibHgwWEhSY2RHTmhjMlVnSnpJbk9seHVYSFJjZEZ4MFhIUnlaWFIxY200Z01qdGNibHgwWEhSY2RHTmhjMlVnSjJReUp6cGNibHgwWEhSY2RGeDBjbVYwZFhKdUlETTdYRzVjZEZ4MFhIUmpZWE5sSUNjMEp6cGNibHgwWEhSY2RGeDBjbVYwZFhKdUlERTdYRzVjZEZ4MFhIUmpZWE5sSUNjMGRDYzZYRzVjZEZ4MFhIUmNkSEpsZEhWeWJpQXdMalkyTmp0Y2JseDBYSFJjZEdOaGMyVWdKMlEwSnpwY2JseDBYSFJjZEZ4MGNtVjBkWEp1SURFdU5UdGNibHgwWEhSY2RHTmhjMlVnSnpnbk9seHVYSFJjZEZ4MFhIUnlaWFIxY200Z01DNDFPMXh1WEhSY2RGeDBZMkZ6WlNBbk9IUW5PbHh1WEhSY2RGeDBYSFF2THlCR2IzSWdPSFJvSUhSeWFYQnNaWFJ6TENCc1pYUW5jeUJrYVhacFpHVWdZU0J4ZFdGeWRHVnlJR0o1SURNc0lISnZkVzVrSUhSdklIUm9aU0J1WldGeVpYTjBJR2x1ZEN3Z1lXNWtJSE4xWW5OMGNtRmpkQ0IwYUdVZ2NtVnRZV2x1WkdWeUlIUnZJSFJvWlNCc1lYTjBJRzl1WlM1Y2JseDBYSFJjZEZ4MGNtVjBkWEp1SURBdU16TTdYRzVjZEZ4MFhIUmpZWE5sSUNka09DYzZYRzVjZEZ4MFhIUmNkSEpsZEhWeWJpQXdMamMxTzF4dVhIUmNkRngwWTJGelpTQW5NVFluT2x4dVhIUmNkRngwWEhSeVpYUjFjbTRnTUM0eU5UdGNibHgwWEhSY2RHTmhjMlVnSnpFMmRDYzZYRzVjZEZ4MFhIUmNkSEpsZEhWeWJpQXdMakUyTmp0Y2JseDBYSFJjZEdOaGMyVWdKek15SnpwY2JseDBYSFJjZEZ4MGNtVjBkWEp1SURBdU1USTFPMXh1WEhSY2RGeDBZMkZ6WlNBbk5qUW5PbHh1WEhSY2RGeDBYSFJ5WlhSMWNtNGdNQzR3TmpJMU8xeHVYSFJjZEZ4MFpHVm1ZWFZzZERwY2JseDBYSFJjZEZ4MEx5OGdUbTkwWlhNZ1pHVm1ZWFZzZENCMGJ5QmhJSEYxWVhKMFpYSXNJSEpsYzNSeklHUmxabUYxYkhRZ2RHOGdNRnh1WEhSY2RGeDBYSFF2TDNKbGRIVnliaUIwZVhCbElEMDlQU0FuYm05MFpTY2dQeUF4SURvZ01EdGNibHgwWEhSOVhHNWNibHgwWEhSMGFISnZkeUJrZFhKaGRHbHZiaUFySUNjZ2FYTWdibTkwSUdFZ2RtRnNhV1FnWkhWeVlYUnBiMjR1Snp0Y2JseDBmVHRjYmx4dVhIUXZLaXBjYmx4MElDb2dSMlYwY3lCMGFHVWdibTkwWlNCdmJpQnpkR0YwZFhNZ1kyOWtaU0JpWVhObFpDQnZiaUIwYUdVZ2MyVnNaV04wWldRZ1kyaGhibTVsYkM0Z01IZzVlekF0Um4xY2JseDBJQ29nVG05MFpTQnZiaUJoZENCamFHRnVibVZzSURBZ2FYTWdNSGc1TUNBb01UUTBLVnh1WEhRZ0tpQXdJRDBnUTJnZ01WeHVYSFFnS2lCQWNtVjBkWEp1SUh0dWRXMWlaWEo5WEc1Y2RDQXFMMXh1WEhSblpYUk9iM1JsVDI1VGRHRjBkWE1vS1NCN2NtVjBkWEp1SURFME5DQXJJSFJvYVhNdVkyaGhibTVsYkNBdElERjlYRzVjYmx4MEx5b3FYRzVjZENBcUlFZGxkSE1nZEdobElHNXZkR1VnYjJabUlITjBZWFIxY3lCamIyUmxJR0poYzJWa0lHOXVJSFJvWlNCelpXeGxZM1JsWkNCamFHRnVibVZzTGlBd2VEaDdNQzFHZlZ4dVhIUWdLaUJPYjNSbElHOW1aaUJoZENCamFHRnVibVZzSURBZ2FYTWdNSGc0TUNBb01USTRLVnh1WEhRZ0tpQXdJRDBnUTJnZ01WeHVYSFFnS2lCQWNtVjBkWEp1SUh0dWRXMWlaWEo5WEc1Y2RDQXFMMXh1WEhSblpYUk9iM1JsVDJabVUzUmhkSFZ6S0NrZ2UzSmxkSFZ5YmlBeE1qZ2dLeUIwYUdsekxtTm9ZVzV1Wld3Z0xTQXhmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ2UwNXZkR1ZGZG1WdWRIMDdYRzR2S2lwY2JpQXFJRWh2YkdSeklHRnNiQ0JrWVhSaElHWnZjaUJoSUZ3aWJtOTBaU0J2Wm1aY0lpQk5TVVJKSUdWMlpXNTBYRzRnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnWm1sbGJHUnpJSHRrWVhSaE9pQmJYWDFjYmlBcUlFQnlaWFIxY200Z2UwNXZkR1ZQWm1aRmRtVnVkSDFjYmlBcUwxeHVZMnhoYzNNZ1RtOTBaVTltWmtWMlpXNTBJSHRjYmx4MFkyOXVjM1J5ZFdOMGIzSW9abWxsYkdSektTQjdYRzVjZEZ4MGRHaHBjeTVrWVhSaElEMGdabWxsYkdSekxtUmhkR0U3WEc1Y2RIMWNibjFjYmx4dVpYaHdiM0owSUh0T2IzUmxUMlptUlhabGJuUjlPMXh1THlvcVhHNGdLaUJJYjJ4a2N5QmhiR3dnWkdGMFlTQm1iM0lnWVNCY0ltNXZkR1VnYjI1Y0lpQk5TVVJKSUdWMlpXNTBYRzRnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnWm1sbGJHUnpJSHRrWVhSaE9pQmJYWDFjYmlBcUlFQnlaWFIxY200Z2UwNXZkR1ZQYmtWMlpXNTBmVnh1SUNvdlhHNWpiR0Z6Y3lCT2IzUmxUMjVGZG1WdWRDQjdYRzVjZEdOdmJuTjBjblZqZEc5eUtHWnBaV3hrY3lrZ2UxeHVYSFJjZEhSb2FYTXVaR0YwWVNBOUlHWnBaV3hrY3k1a1lYUmhPMXh1WEhSOVhHNTlYRzVjYm1WNGNHOXlkQ0I3VG05MFpVOXVSWFpsYm5SOU8xeHVMeW9xWEc0Z0tpQkliMnhrY3lCaGJHd2daR0YwWVNCbWIzSWdZU0JjSW5CeWIyZHlZVzBnWTJoaGJtZGxYQ0lnVFVsRVNTQmxkbVZ1ZEZ4dUlDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlHWnBaV3hrY3lCN2FXNXpkSEoxYldWdWREb2dhVzUwWldkbGNuMWNiaUFxSUVCeVpYUjFjbTRnZTFCeWIyZHlZVzFEYUdGdVoyVkZkbVZ1ZEgxY2JpQXFMMXh1WTJ4aGMzTWdVSEp2WjNKaGJVTm9ZVzVuWlVWMlpXNTBJSHRjYmx4MFkyOXVjM1J5ZFdOMGIzSW9abWxsYkdSektTQjdYRzVjZEZ4MGRHaHBjeTUwZVhCbElEMGdKM0J5YjJkeVlXMG5PMXh1WEhSY2RDOHZJR1JsYkhSaElIUnBiV1VnWkdWbVlYVnNkSE1nZEc4Z01DNWNibHgwWEhSMGFHbHpMbVJoZEdFZ1BTQlZkR2xzY3k1dWRXMWlaWEpVYjFaaGNtbGhZbXhsVEdWdVozUm9LREI0TURBcExtTnZibU5oZENoRGIyNXpkR0Z1ZEhNdVVGSlBSMUpCVFY5RFNFRk9SMFZmVTFSQlZGVlRMQ0JtYVdWc1pITXVhVzV6ZEhKMWJXVnVkQ2s3WEc1Y2RIMWNibjFjYmx4dVpYaHdiM0owSUh0UWNtOW5jbUZ0UTJoaGJtZGxSWFpsYm5SOU8xeHVMeW9xWEc0Z0tpQkliMnhrY3lCaGJHd2daR0YwWVNCbWIzSWdZU0IwY21GamF5NWNiaUFxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0JtYVdWc1pITWdlM1I1Y0dVNklHNTFiV0psY2l3Z1pHRjBZVG9nWVhKeVlYa3NJSE5wZW1VNklHRnljbUY1TENCbGRtVnVkSE02SUdGeWNtRjVmVnh1SUNvZ1FISmxkSFZ5YmlCN1ZISmhZMnQ5WEc0Z0tpOWNibU5zWVhOeklGUnlZV05ySUh0Y2JseDBZMjl1YzNSeWRXTjBiM0lvS1NCN1hHNWNkRngwZEdocGN5NTBlWEJsSUQwZ1EyOXVjM1JoYm5SekxsUlNRVU5MWDBOSVZVNUxYMVJaVUVVN1hHNWNkRngwZEdocGN5NWtZWFJoSUQwZ1cxMDdYRzVjZEZ4MGRHaHBjeTV6YVhwbElEMGdXMTA3WEc1Y2RGeDBkR2hwY3k1bGRtVnVkSE1nUFNCYlhUdGNibHgwZlZ4dVhHNWNkQzhxS2x4dVhIUWdLaUJCWkdSeklHRnVlU0JsZG1WdWRDQjBlWEJsSUhSdklIUm9aU0IwY21GamF5NWNibHgwSUNvZ1FIQmhjbUZ0SUhzb1RtOTBaVVYyWlc1MGZFMWxkR0ZGZG1WdWRIeFFjbTluY21GdFEyaGhibWRsUlhabGJuUXBmU0JsZG1WdWRDQXRJRVYyWlc1MElHOWlhbVZqZEM1Y2JseDBJQ29nUUhCaGNtRnRJSHRtZFc1amRHbHZibjBnYldGd1JuVnVZM1JwYjI0Z0xTQkRZV3hzWW1GamF5QjNhR2xqYUNCallXNGdZbVVnZFhObFpDQjBieUJoY0hCc2VTQnpjR1ZqYVdacFl5QndjbTl3WlhKMGFXVnpJSFJ2SUdGc2JDQmxkbVZ1ZEhNdUlGeHVYSFFnS2lCQWNtVjBkWEp1SUh0VWNtRmphMzFjYmx4MElDb3ZYRzVjZEdGa1pFVjJaVzUwS0dWMlpXNTBMQ0J0WVhCR2RXNWpkR2x2YmlrZ2UxeHVYSFJjZEdsbUlDaEJjbkpoZVM1cGMwRnljbUY1S0dWMlpXNTBLU2tnZTF4dVhIUmNkRngwWlhabGJuUXVabTl5UldGamFDaG1kVzVqZEdsdmJpaGxMQ0JwS1NCN1hHNWNkRngwWEhSY2RDOHZJRWhoYm1Sc1pTQnRZWEFnWm5WdVkzUnBiMjRnYVdZZ2NISnZkbWxrWldSY2JseDBYSFJjZEZ4MGFXWWdLSFI1Y0dWdlppQnRZWEJHZFc1amRHbHZiaUE5UFQwZ0oyWjFibU4wYVc5dUp5QW1KaUJsTG5SNWNHVWdQVDA5SUNkdWIzUmxKeWtnZTF4dVhIUmNkRngwWEhSY2RIWmhjaUJ3Y205d1pYSjBhV1Z6SUQwZ2JXRndSblZ1WTNScGIyNG9hU3dnWlNrN1hHNWNibHgwWEhSY2RGeDBYSFJwWmlBb2RIbHdaVzltSUhCeWIzQmxjblJwWlhNZ1BUMDlJQ2R2WW1wbFkzUW5LU0I3WEc1Y2RGeDBYSFJjZEZ4MFhIUm1iM0lnS0haaGNpQnFJR2x1SUhCeWIzQmxjblJwWlhNcElIdGNibHgwWEhSY2RGeDBYSFJjZEZ4MGMzZHBkR05vS0dvcElIdGNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmpZWE5sSUNka2RYSmhkR2x2YmljNlhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmxMbVIxY21GMGFXOXVJRDBnY0hKdmNHVnlkR2xsYzF0cVhUdGNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkR0p5WldGck8xeHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RHTmhjMlVnSjNObGNYVmxiblJwWVd3bk9seHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBaUzV6WlhGMVpXNTBhV0ZzSUQwZ2NISnZjR1Z5ZEdsbGMxdHFYVHRjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEdKeVpXRnJPMXh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkR05oYzJVZ0ozWmxiRzlqYVhSNUp6cGNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkR1V1ZG1Wc2IyTnBkSGtnUFNCbExtTnZiblpsY25SV1pXeHZZMmwwZVNod2NtOXdaWEowYVdWelcycGRLVHRjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEdKeVpXRnJPMXh1WEhSY2RGeDBYSFJjZEZ4MFhIUjlYRzVjZEZ4MFhIUmNkRngwWEhSOVhIUmNkRnh1WEc1Y2RGeDBYSFJjZEZ4MFhIUXZMeUJIYjNSMFlTQmlkV2xzWkNCMGFHRjBJR1JoZEdGY2JseDBYSFJjZEZ4MFhIUmNkR1V1WW5WcGJHUkVZWFJoS0NrN1hHNWNkRngwWEhSY2RGeDBmVnh1WEhSY2RGeDBYSFI5WEc1Y2JseDBYSFJjZEZ4MGRHaHBjeTVrWVhSaElEMGdkR2hwY3k1a1lYUmhMbU52Ym1OaGRDaGxMbVJoZEdFcE8xeHVYSFJjZEZ4MFhIUjBhR2x6TG5OcGVtVWdQU0JWZEdsc2N5NXVkVzFpWlhKVWIwSjVkR1Z6S0hSb2FYTXVaR0YwWVM1c1pXNW5kR2dzSURRcE95QXZMeUEwSUdKNWRHVnpJR3h2Ym1kY2JseDBYSFJjZEZ4MGRHaHBjeTVsZG1WdWRITXVjSFZ6YUNobEtUdGNibHgwWEhSY2RIMHNJSFJvYVhNcE8xeHVYRzVjZEZ4MGZTQmxiSE5sSUh0Y2JseDBYSFJjZEhSb2FYTXVaR0YwWVNBOUlIUm9hWE11WkdGMFlTNWpiMjVqWVhRb1pYWmxiblF1WkdGMFlTazdYRzVjZEZ4MFhIUjBhR2x6TG5OcGVtVWdQU0JWZEdsc2N5NXVkVzFpWlhKVWIwSjVkR1Z6S0hSb2FYTXVaR0YwWVM1c1pXNW5kR2dzSURRcE95QXZMeUEwSUdKNWRHVnpJR3h2Ym1kY2JseDBYSFJjZEhSb2FYTXVaWFpsYm5SekxuQjFjMmdvWlhabGJuUXBPMXh1WEhSY2RIMWNibHh1WEhSY2RISmxkSFZ5YmlCMGFHbHpPMXh1WEhSOVhHNWNibHgwTHlvcVhHNWNkQ0FxSUZObGRITWdkR1Z0Y0c4Z2IyWWdkR2hsSUUxSlJFa2dabWxzWlM1Y2JseDBJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJR0p3YlNBdElGUmxiWEJ2SUdsdUlHSmxZWFJ6SUhCbGNpQnRhVzUxZEdVdVhHNWNkQ0FxSUVCeVpYUjFjbTRnZTFSeVlXTnJmVnh1WEhRZ0tpOWNibHgwYzJWMFZHVnRjRzhvWW5CdEtTQjdYRzVjZEZ4MGRtRnlJR1YyWlc1MElEMGdibVYzSUUxbGRHRkZkbVZ1ZENoN1pHRjBZVG9nVzBOdmJuTjBZVzUwY3k1TlJWUkJYMVJGVFZCUFgwbEVYWDBwTzF4dVhIUmNkR1YyWlc1MExtUmhkR0V1Y0hWemFDZ3dlREF6S1RzZ0x5OGdVMmw2WlZ4dVhIUmNkSFpoY2lCMFpXMXdieUE5SUUxaGRHZ3VjbTkxYm1Rb05qQXdNREF3TURBZ0x5QmljRzBwTzF4dVhIUmNkR1YyWlc1MExtUmhkR0VnUFNCbGRtVnVkQzVrWVhSaExtTnZibU5oZENoVmRHbHNjeTV1ZFcxaVpYSlViMEo1ZEdWektIUmxiWEJ2TENBektTazdJQzh2SUZSbGJYQnZMQ0F6SUdKNWRHVnpYRzVjZEZ4MGNtVjBkWEp1SUhSb2FYTXVZV1JrUlhabGJuUW9aWFpsYm5RcE8xeHVYSFI5WEc1Y2JseDBMeW9xWEc1Y2RDQXFJRk5sZEhNZ2RHbHRaU0J6YVdkdVlYUjFjbVV1WEc1Y2RDQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQnVkVzFsY21GMGIzSWdMU0JVYjNBZ2JuVnRZbVZ5SUc5bUlIUm9aU0IwYVcxbElITnBaMjVoZEhWeVpTNWNibHgwSUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUdSbGJtOXRhVzVoZEc5eUlDMGdRbTkwZEc5dElHNTFiV0psY2lCdlppQjBhR1VnZEdsdFpTQnphV2R1WVhSMWNtVXVYRzVjZENBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCdGFXUnBZMnh2WTJ0emNHVnlkR2xqYXlBdElFUmxabUYxYkhSeklIUnZJREkwTGx4dVhIUWdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdibTkwWlhOd1pYSnRhV1JwWTJ4dlkyc2dMU0JFWldaaGRXeDBjeUIwYnlBNExseHVYSFFnS2lCQWNtVjBkWEp1SUh0VWNtRmphMzFjYmx4MElDb3ZYRzVjZEhObGRGUnBiV1ZUYVdkdVlYUjFjbVVvYm5WdFpYSmhkRzl5TENCa1pXNXZiV2x1WVhSdmNpd2diV2xrYVdOc2IyTnJjM0JsY25ScFkyc3NJRzV2ZEdWemNHVnliV2xrYVdOc2IyTnJLU0I3WEc1Y2RGeDBiV2xrYVdOc2IyTnJjM0JsY25ScFkyc2dQU0J0YVdScFkyeHZZMnR6Y0dWeWRHbGpheUI4ZkNBeU5EdGNibHgwWEhSdWIzUmxjM0JsY20xcFpHbGpiRzlqYXlBOUlHNXZkR1Z6Y0dWeWJXbGthV05zYjJOcklIeDhJRGc3WEc1Y2RGeDBYRzVjZEZ4MGRtRnlJR1YyWlc1MElEMGdibVYzSUUxbGRHRkZkbVZ1ZENoN1pHRjBZVG9nVzBOdmJuTjBZVzUwY3k1TlJWUkJYMVJKVFVWZlUwbEhUa0ZVVlZKRlgwbEVYWDBwTzF4dVhIUmNkR1YyWlc1MExtUmhkR0V1Y0hWemFDZ3dlREEwS1RzZ0x5OGdVMmw2WlZ4dVhIUmNkR1YyWlc1MExtUmhkR0VnUFNCbGRtVnVkQzVrWVhSaExtTnZibU5oZENoVmRHbHNjeTV1ZFcxaVpYSlViMEo1ZEdWektHNTFiV1Z5WVhSdmNpd2dNU2twT3lBdkx5Qk9kVzFsY21GMGIzSXNJREVnWW5sMFpYTmNibHgwWEhSY2JseDBYSFIyWVhJZ1gyUmxibTl0YVc1aGRHOXlJRDBnVFdGMGFDNXNiMmN5S0dSbGJtOXRhVzVoZEc5eUtUdGNkQzh2SUVSbGJtOXRhVzVoZEc5eUlHbHpJR1Y0Y0hKbGMzTmxaQ0JoY3lCd2IzY2diMllnTWx4dVhIUmNkR1YyWlc1MExtUmhkR0VnUFNCbGRtVnVkQzVrWVhSaExtTnZibU5oZENoVmRHbHNjeTV1ZFcxaVpYSlViMEo1ZEdWektGOWtaVzV2YldsdVlYUnZjaXdnTVNrcE95QXZMeUJFWlc1dmJXbHVZWFJ2Y2l3Z01TQmllWFJsYzF4dVhIUmNkR1YyWlc1MExtUmhkR0VnUFNCbGRtVnVkQzVrWVhSaExtTnZibU5oZENoVmRHbHNjeTV1ZFcxaVpYSlViMEo1ZEdWektHMXBaR2xqYkc5amEzTndaWEowYVdOckxDQXhLU2s3SUM4dklFMUpSRWtnUTJ4dlkydHpJSEJsY2lCMGFXTnJMQ0F4SUdKNWRHVnpYRzVjZEZ4MFpYWmxiblF1WkdGMFlTQTlJR1YyWlc1MExtUmhkR0V1WTI5dVkyRjBLRlYwYVd4ekxtNTFiV0psY2xSdlFubDBaWE1vYm05MFpYTndaWEp0YVdScFkyeHZZMnNzSURFcEtUc2dMeThnVG5WdFltVnlJRzltSURFdk16SWdibTkwWlhNZ2NHVnlJRTFKUkVrZ1kyeHZZMnR6TENBeElHSjVkR1Z6WEc1Y2RGeDBjbVYwZFhKdUlIUm9hWE11WVdSa1JYWmxiblFvWlhabGJuUXBPMXh1WEhSOVhHNWNibHgwTHlvcVhHNWNkQ0FxSUZObGRITWdhMlY1SUhOcFoyNWhkSFZ5WlM1Y2JseDBJQ29nUUhCaGNtRnRJSHNxZlNCelppQXRJRnh1WEhRZ0tpQkFjR0Z5WVcwZ2V5cDlJRzFwSUMxY2JseDBJQ29nUUhKbGRIVnliaUI3VkhKaFkydDlYRzVjZENBcUwxeHVYSFJ6WlhSTFpYbFRhV2R1WVhSMWNtVW9jMllzSUcxcEtTQjdYRzVjZEZ4MGRtRnlJR1YyWlc1MElEMGdibVYzSUUxbGRHRkZkbVZ1ZENoN1pHRjBZVG9nVzBOdmJuTjBZVzUwY3k1TlJWUkJYMHRGV1Y5VFNVZE9RVlJWVWtWZlNVUmRmU2s3WEc1Y2RGeDBaWFpsYm5RdVpHRjBZUzV3ZFhOb0tEQjRNRElwT3lBdkx5QlRhWHBsWEc1Y2JseDBYSFIyWVhJZ2JXOWtaU0E5SUcxcElIeDhJREE3WEc1Y2RGeDBjMllnUFNCelppQjhmQ0F3TzF4dVhHNWNkRngwTHk5Y2RFWjFibU4wYVc5dUlHTmhiR3hsWkNCM2FYUm9JSE4wY21sdVp5QnViM1JoZEdsdmJseHVYSFJjZEdsbUlDaDBlWEJsYjJZZ2JXa2dQVDA5SUNkMWJtUmxabWx1WldRbktTQjdYRzVjZEZ4MFhIUjJZWElnWm1sbWRHaHpJRDBnVzF4dVhIUmNkRngwWEhSYkowTmlKeXdnSjBkaUp5d2dKMFJpSnl3Z0owRmlKeXdnSjBWaUp5d2dKMEppSnl3Z0owWW5MQ0FuUXljc0lDZEhKeXdnSjBRbkxDQW5RU2NzSUNkRkp5d2dKMEluTENBblJpTW5MQ0FuUXlNblhTeGNibHgwWEhSY2RGeDBXeWRoWWljc0lDZGxZaWNzSUNkaVlpY3NJQ2RtSnl3Z0oyTW5MQ0FuWnljc0lDZGtKeXdnSjJFbkxDQW5aU2NzSUNkaUp5d2dKMllqSnl3Z0oyTWpKeXdnSjJjakp5d2dKMlFqSnl3Z0oyRWpKMTFjYmx4MFhIUmNkRjA3WEc1Y2RGeDBYSFIyWVhJZ1gzTm1iR1Z1SUQwZ2MyWXViR1Z1WjNSb08xeHVYSFJjZEZ4MGRtRnlJRzV2ZEdVZ1BTQnpaaUI4ZkNBblF5YzdYRzVjYmx4MFhIUmNkR2xtSUNoelpsc3dYU0E5UFQwZ2MyWmJNRjB1ZEc5TWIzZGxja05oYzJVb0tTa2diVzlrWlNBOUlERmNibHh1WEhSY2RGeDBhV1lnS0Y5elpteGxiaUErSURFcElIdGNibHgwWEhSY2RGeDBjM2RwZEdOb0lDaHpaaTVqYUdGeVFYUW9YM05tYkdWdUlDMGdNU2twSUh0Y2JseDBYSFJjZEZ4MFhIUmpZWE5sSUNkdEp6cGNibHgwWEhSY2RGeDBYSFJjZEcxdlpHVWdQU0F4TzF4dVhIUmNkRngwWEhSY2RGeDBibTkwWlNBOUlITm1MbU5vWVhKQmRDZ3dLUzUwYjB4dmQyVnlRMkZ6WlNncE8xeHVYSFJjZEZ4MFhIUmNkRngwYm05MFpTQTlJRzV2ZEdVdVkyOXVZMkYwS0hObUxuTjFZbk4wY21sdVp5Z3hMQ0JmYzJac1pXNGdMU0F4S1NrN1hHNWNkRngwWEhSY2RGeDBYSFJpY21WaGF6dGNibHgwWEhSY2RGeDBYSFJqWVhObElDY3RKenBjYmx4MFhIUmNkRngwWEhSY2RHMXZaR1VnUFNBeE8xeHVYSFJjZEZ4MFhIUmNkRngwYm05MFpTQTlJSE5tTG1Ob1lYSkJkQ2d3S1M1MGIweHZkMlZ5UTJGelpTZ3BPMXh1WEhSY2RGeDBYSFJjZEZ4MGJtOTBaU0E5SUc1dmRHVXVZMjl1WTJGMEtITm1Mbk4xWW5OMGNtbHVaeWd4TENCZmMyWnNaVzRnTFNBeEtTazdYRzVjZEZ4MFhIUmNkRngwWEhSaWNtVmhhenRjYmx4MFhIUmNkRngwWEhSallYTmxJQ2ROSnpwY2JseDBYSFJjZEZ4MFhIUmNkRzF2WkdVZ1BTQXdPMXh1WEhSY2RGeDBYSFJjZEZ4MGJtOTBaU0E5SUhObUxtTm9ZWEpCZENnd0tTNTBiMVZ3Y0dWeVEyRnpaU2dwTzF4dVhIUmNkRngwWEhSY2RGeDBibTkwWlNBOUlHNXZkR1V1WTI5dVkyRjBLSE5tTG5OMVluTjBjbWx1WnlneExDQmZjMlpzWlc0Z0xTQXhLU2s3WEc1Y2RGeDBYSFJjZEZ4MFhIUmljbVZoYXp0Y2JseDBYSFJjZEZ4MFhIUmpZWE5sSUNjckp6cGNibHgwWEhSY2RGeDBYSFJjZEcxdlpHVWdQU0F3TzF4dVhIUmNkRngwWEhSY2RGeDBibTkwWlNBOUlITm1MbU5vWVhKQmRDZ3dLUzUwYjFWd2NHVnlRMkZ6WlNncE8xeHVYSFJjZEZ4MFhIUmNkRngwYm05MFpTQTlJRzV2ZEdVdVkyOXVZMkYwS0hObUxuTjFZbk4wY21sdVp5Z3hMQ0JmYzJac1pXNGdMU0F4S1NrN1hHNWNkRngwWEhSY2RGeDBYSFJpY21WaGF6dGNibHgwWEhSY2RGeDBmVnh1WEhSY2RGeDBmVnh1WEc1Y2RGeDBYSFIyWVhJZ1ptbG1kR2hwYm1SbGVDQTlJR1pwWm5Sb2MxdHRiMlJsWFM1cGJtUmxlRTltS0c1dmRHVXBPMXh1WEhSY2RGeDBjMllnUFNCbWFXWjBhR2x1WkdWNElEMDlQU0F0TVNBL0lEQWdPaUJtYVdaMGFHbHVaR1Y0SUMwZ056dGNibHgwWEhSOVhHNWNibHgwWEhSbGRtVnVkQzVrWVhSaElEMGdaWFpsYm5RdVpHRjBZUzVqYjI1allYUW9WWFJwYkhNdWJuVnRZbVZ5Vkc5Q2VYUmxjeWh6Wml3Z01Ta3BPeUF2THlCT2RXMWlaWElnYjJZZ2MyaGhjbkFnYjNJZ1pteGhkSE1nS0NBOElEQWdabXhoZERzZ1BpQXdJSE5vWVhKd0tWeHVYSFJjZEdWMlpXNTBMbVJoZEdFZ1BTQmxkbVZ1ZEM1a1lYUmhMbU52Ym1OaGRDaFZkR2xzY3k1dWRXMWlaWEpVYjBKNWRHVnpLRzF2WkdVc0lERXBLVHNnTHk4Z1RXOWtaVG9nTUNCdFlXcHZjaXdnTVNCdGFXNXZjbHh1WEhSY2RISmxkSFZ5YmlCMGFHbHpMbUZrWkVWMlpXNTBLR1YyWlc1MEtUdGNibHgwZlZ4dVhHNWNkQzhxS2x4dVhIUWdLaUJCWkdSeklIUmxlSFFnZEc4Z1RVbEVTU0JtYVd4bExseHVYSFFnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZEdWNGRDQXRJRlJsZUhRZ2RHOGdZV1JrTGx4dVhIUWdLaUJBY21WMGRYSnVJSHRVY21GamEzMWNibHgwSUNvdlhHNWNkR0ZrWkZSbGVIUW9kR1Y0ZENrZ2UxeHVYSFJjZEhaaGNpQmxkbVZ1ZENBOUlHNWxkeUJOWlhSaFJYWmxiblFvZTJSaGRHRTZJRnREYjI1emRHRnVkSE11VFVWVVFWOVVSVmhVWDBsRVhYMHBPMXh1WEhSY2RIWmhjaUJ6ZEhKcGJtZENlWFJsY3lBOUlGVjBhV3h6TG5OMGNtbHVaMVJ2UW5sMFpYTW9kR1Y0ZENrN1hHNWNkRngwWlhabGJuUXVaR0YwWVNBOUlHVjJaVzUwTG1SaGRHRXVZMjl1WTJGMEtGVjBhV3h6TG01MWJXSmxjbFJ2Vm1GeWFXRmliR1ZNWlc1bmRHZ29jM1J5YVc1blFubDBaWE11YkdWdVozUm9LU2s3SUM4dklGTnBlbVZjYmx4MFhIUmxkbVZ1ZEM1a1lYUmhJRDBnWlhabGJuUXVaR0YwWVM1amIyNWpZWFFvYzNSeWFXNW5RbmwwWlhNcE95QXZMeUJVWlhoMFhHNWNkRngwY21WMGRYSnVJSFJvYVhNdVlXUmtSWFpsYm5Rb1pYWmxiblFwTzF4dVhIUjlYRzVjYmx4MEx5b3FYRzVjZENBcUlFRmtaSE1nWTI5d2VYSnBaMmgwSUhSdklFMUpSRWtnWm1sc1pTNWNibHgwSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhSbGVIUWdMU0JVWlhoMElHOW1JR052Y0hseWFXZG9kQ0JzYVc1bExseHVYSFFnS2lCQWNtVjBkWEp1SUh0VWNtRmphMzFjYmx4MElDb3ZYRzVjZEdGa1pFTnZjSGx5YVdkb2RDaDBaWGgwS1NCN1hHNWNkRngwZG1GeUlHVjJaVzUwSUQwZ2JtVjNJRTFsZEdGRmRtVnVkQ2g3WkdGMFlUb2dXME52Ym5OMFlXNTBjeTVOUlZSQlgwTlBVRmxTU1VkSVZGOUpSRjE5S1R0Y2JseDBYSFIyWVhJZ2MzUnlhVzVuUW5sMFpYTWdQU0JWZEdsc2N5NXpkSEpwYm1kVWIwSjVkR1Z6S0hSbGVIUXBPMXh1WEhSY2RHVjJaVzUwTG1SaGRHRWdQU0JsZG1WdWRDNWtZWFJoTG1OdmJtTmhkQ2hWZEdsc2N5NXVkVzFpWlhKVWIxWmhjbWxoWW14bFRHVnVaM1JvS0hOMGNtbHVaMEo1ZEdWekxteGxibWQwYUNrcE95QXZMeUJUYVhwbFhHNWNkRngwWlhabGJuUXVaR0YwWVNBOUlHVjJaVzUwTG1SaGRHRXVZMjl1WTJGMEtITjBjbWx1WjBKNWRHVnpLVHNnTHk4Z1ZHVjRkRnh1WEhSY2RISmxkSFZ5YmlCMGFHbHpMbUZrWkVWMlpXNTBLR1YyWlc1MEtUdGNibHgwZlZ4dVhHNWNkQzhxS2x4dVhIUWdLaUJCWkdSeklGTmxjWFZsYm1ObEwxUnlZV05ySUU1aGJXVXVYRzVjZENBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMFpYaDBJQzBnVkdWNGRDQnZaaUIwY21GamF5QnVZVzFsTGx4dVhIUWdLaUJBY21WMGRYSnVJSHRVY21GamEzMWNibHgwSUNvdlhHNWNkR0ZrWkZSeVlXTnJUbUZ0WlNoMFpYaDBLU0I3WEc1Y2RGeDBkbUZ5SUdWMlpXNTBJRDBnYm1WM0lFMWxkR0ZGZG1WdWRDaDdaR0YwWVRvZ1cwTnZibk4wWVc1MGN5NU5SVlJCWDFSU1FVTkxYMDVCVFVWZlNVUmRmU2s3WEc1Y2RGeDBkbUZ5SUhOMGNtbHVaMEo1ZEdWeklEMGdWWFJwYkhNdWMzUnlhVzVuVkc5Q2VYUmxjeWgwWlhoMEtUdGNibHgwWEhSbGRtVnVkQzVrWVhSaElEMGdaWFpsYm5RdVpHRjBZUzVqYjI1allYUW9WWFJwYkhNdWJuVnRZbVZ5Vkc5V1lYSnBZV0pzWlV4bGJtZDBhQ2h6ZEhKcGJtZENlWFJsY3k1c1pXNW5kR2dwS1RzZ0x5OGdVMmw2WlZ4dVhIUmNkR1YyWlc1MExtUmhkR0VnUFNCbGRtVnVkQzVrWVhSaExtTnZibU5oZENoemRISnBibWRDZVhSbGN5azdJQzh2SUZSbGVIUmNibHgwWEhSeVpYUjFjbTRnZEdocGN5NWhaR1JGZG1WdWRDaGxkbVZ1ZENrN1hHNWNkSDFjYmx4dVhIUXZLaXBjYmx4MElDb2dVMlYwY3lCcGJuTjBjblZ0Wlc1MElHNWhiV1VnYjJZZ2RISmhZMnN1WEc1Y2RDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQjBaWGgwSUMwZ1RtRnRaU0J2WmlCcGJuTjBjblZ0Wlc1MExseHVYSFFnS2lCQWNtVjBkWEp1SUh0VWNtRmphMzFjYmx4MElDb3ZYRzVjZEdGa1pFbHVjM1J5ZFcxbGJuUk9ZVzFsS0hSbGVIUXBJSHRjYmx4MFhIUjJZWElnWlhabGJuUWdQU0J1WlhjZ1RXVjBZVVYyWlc1MEtIdGtZWFJoT2lCYlEyOXVjM1JoYm5SekxrMUZWRUZmU1U1VFZGSlZUVVZPVkY5T1FVMUZYMGxFWFgwcE8xeHVYSFJjZEhaaGNpQnpkSEpwYm1kQ2VYUmxjeUE5SUZWMGFXeHpMbk4wY21sdVoxUnZRbmwwWlhNb2RHVjRkQ2s3WEc1Y2RGeDBaWFpsYm5RdVpHRjBZU0E5SUdWMlpXNTBMbVJoZEdFdVkyOXVZMkYwS0ZWMGFXeHpMbTUxYldKbGNsUnZWbUZ5YVdGaWJHVk1aVzVuZEdnb2MzUnlhVzVuUW5sMFpYTXViR1Z1WjNSb0tTazdJQzh2SUZOcGVtVmNibHgwWEhSbGRtVnVkQzVrWVhSaElEMGdaWFpsYm5RdVpHRjBZUzVqYjI1allYUW9jM1J5YVc1blFubDBaWE1wT3lBdkx5QlVaWGgwWEc1Y2RGeDBjbVYwZFhKdUlIUm9hWE11WVdSa1JYWmxiblFvWlhabGJuUXBPMXh1WEhSOVhHNWNibHgwTHlvcVhHNWNkQ0FxSUVGa1pITWdiV0Z5YTJWeUlIUnZJRTFKUkVrZ1ptbHNaUzVjYmx4MElDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIUmxlSFFnTFNCTllYSnJaWElnZEdWNGRDNWNibHgwSUNvZ1FISmxkSFZ5YmlCN1ZISmhZMnQ5WEc1Y2RDQXFMMXh1WEhSaFpHUk5ZWEpyWlhJb2RHVjRkQ2tnZTF4dVhIUmNkSFpoY2lCbGRtVnVkQ0E5SUc1bGR5Qk5aWFJoUlhabGJuUW9lMlJoZEdFNklGdERiMjV6ZEdGdWRITXVUVVZVUVY5TlFWSkxSVkpmU1VSZGZTazdYRzVjZEZ4MGRtRnlJSE4wY21sdVowSjVkR1Z6SUQwZ1ZYUnBiSE11YzNSeWFXNW5WRzlDZVhSbGN5aDBaWGgwS1R0Y2JseDBYSFJsZG1WdWRDNWtZWFJoSUQwZ1pYWmxiblF1WkdGMFlTNWpiMjVqWVhRb1ZYUnBiSE11Ym5WdFltVnlWRzlXWVhKcFlXSnNaVXhsYm1kMGFDaHpkSEpwYm1kQ2VYUmxjeTVzWlc1bmRHZ3BLVHNnTHk4Z1UybDZaVnh1WEhSY2RHVjJaVzUwTG1SaGRHRWdQU0JsZG1WdWRDNWtZWFJoTG1OdmJtTmhkQ2h6ZEhKcGJtZENlWFJsY3lrN0lDOHZJRlJsZUhSY2JseDBYSFJ5WlhSMWNtNGdkR2hwY3k1aFpHUkZkbVZ1ZENobGRtVnVkQ2s3WEc1Y2RIMWNibHh1WEhRdktpcGNibHgwSUNvZ1FXUmtjeUJqZFdVZ2NHOXBiblFnZEc4Z1RVbEVTU0JtYVd4bExseHVYSFFnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZEdWNGRDQXRJRlJsZUhRZ2IyWWdZM1ZsSUhCdmFXNTBMbHh1WEhRZ0tpQkFjbVYwZFhKdUlIdFVjbUZqYTMxY2JseDBJQ292WEc1Y2RHRmtaRU4xWlZCdmFXNTBLSFJsZUhRcElIdGNibHgwWEhSMllYSWdaWFpsYm5RZ1BTQnVaWGNnVFdWMFlVVjJaVzUwS0h0a1lYUmhPaUJiUTI5dWMzUmhiblJ6TGsxRlZFRmZRMVZGWDFCUFNVNVVYWDBwTzF4dVhIUmNkSFpoY2lCemRISnBibWRDZVhSbGN5QTlJRlYwYVd4ekxuTjBjbWx1WjFSdlFubDBaWE1vZEdWNGRDazdYRzVjZEZ4MFpYWmxiblF1WkdGMFlTQTlJR1YyWlc1MExtUmhkR0V1WTI5dVkyRjBLRlYwYVd4ekxtNTFiV0psY2xSdlZtRnlhV0ZpYkdWTVpXNW5kR2dvYzNSeWFXNW5RbmwwWlhNdWJHVnVaM1JvS1NrN0lDOHZJRk5wZW1WY2JseDBYSFJsZG1WdWRDNWtZWFJoSUQwZ1pYWmxiblF1WkdGMFlTNWpiMjVqWVhRb2MzUnlhVzVuUW5sMFpYTXBPeUF2THlCVVpYaDBYRzVjZEZ4MGNtVjBkWEp1SUhSb2FYTXVZV1JrUlhabGJuUW9aWFpsYm5RcE8xeHVYSFI5WEc1Y2JseDBMeW9xWEc1Y2RDQXFJRUZrWkhNZ2JIbHlhV01nZEc4Z1RVbEVTU0JtYVd4bExseHVYSFFnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYkhseWFXTWdMU0JNZVhKcFl5QjBaWGgwSUhSdklHRmtaQzVjYmx4MElDb2dRSEpsZEhWeWJpQjdWSEpoWTJ0OVhHNWNkQ0FxTDF4dVhIUmhaR1JNZVhKcFl5aHNlWEpwWXlrZ2UxeHVYSFJjZEhaaGNpQmxkbVZ1ZENBOUlHNWxkeUJOWlhSaFJYWmxiblFvZTJSaGRHRTZJRnREYjI1emRHRnVkSE11VFVWVVFWOU1XVkpKUTE5SlJGMTlLVHRjYmx4MFhIUjJZWElnYzNSeWFXNW5RbmwwWlhNZ1BTQlZkR2xzY3k1emRISnBibWRVYjBKNWRHVnpLR3g1Y21saktUdGNibHgwWEhSbGRtVnVkQzVrWVhSaElEMGdaWFpsYm5RdVpHRjBZUzVqYjI1allYUW9WWFJwYkhNdWJuVnRZbVZ5Vkc5V1lYSnBZV0pzWlV4bGJtZDBhQ2h6ZEhKcGJtZENlWFJsY3k1c1pXNW5kR2dwS1RzZ0x5OGdVMmw2WlZ4dVhIUmNkR1YyWlc1MExtUmhkR0VnUFNCbGRtVnVkQzVrWVhSaExtTnZibU5oZENoemRISnBibWRDZVhSbGN5azdJQzh2SUV4NWNtbGpYRzVjZEZ4MGNtVjBkWEp1SUhSb2FYTXVZV1JrUlhabGJuUW9aWFpsYm5RcE8xeHVYSFI5WEc1Y2JseDBMeW9xWEc1Y2RDQXFJRU5vWVc1dVpXd2diVzlrWlNCdFpYTnpZV2RsYzF4dVhIUWdLaUJBY21WMGRYSnVJSHRVY21GamEzMWNibHgwSUNvdlhHNWNkSEJ2YkhsTmIyUmxUMjRvS1NCN1hHNWNkRngwZG1GeUlHVjJaVzUwSUQwZ2JtVjNJRTV2ZEdWUGJrVjJaVzUwS0h0a1lYUmhPaUJiTUhnd01Dd2dNSGhDTUN3Z01IZzNSU3dnTUhnd01GMTlLVHRjYmx4MFhIUnlaWFIxY200Z2RHaHBjeTVoWkdSRmRtVnVkQ2hsZG1WdWRDazdYRzVjZEgxY2JseHVmVnh1WEc1bGVIQnZjblFnZTFSeVlXTnJmVHRjYm1sdGNHOXlkQ0I3ZEc5TmFXUnBmU0JtY205dElDZDBiMjVoYkMxdGFXUnBKenRjYmx4dUx5b3FYRzRnS2lCVGRHRjBhV01nZFhScGJHbDBlU0JtZFc1amRHbHZibk1nZFhObFpDQjBhSEp2ZFdkb2IzVjBJSFJvWlNCc2FXSnlZWEo1TGx4dUlDb3ZYRzVqYkdGemN5QlZkR2xzY3lCN1hHNWNibHgwTHlvcVhHNWNkQ0FxSUVkbGRITWdUV2xrYVZkeWFYUmxja3BUSUhabGNuTnBiMjRnYm5WdFltVnlMbHh1WEhRZ0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNWNkQ0FxTDF4dVhIUnpkR0YwYVdNZ2RtVnljMmx2YmlncElIdGNibHgwWEhSeVpYUjFjbTRnUTI5dWMzUmhiblJ6TGxaRlVsTkpUMDQ3WEc1Y2RIMWNibHh1WEhRdktpcGNibHgwSUNvZ1EyOXVkbVZ5ZENCaElITjBjbWx1WnlCMGJ5QmhiaUJoY25KaGVTQnZaaUJpZVhSbGMxeHVYSFFnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYzNSeWFXNW5YRzVjZENBcUlFQnlaWFIxY200Z2UyRnljbUY1ZlZ4dVhIUWdLaTljYmx4MGMzUmhkR2xqSUhOMGNtbHVaMVJ2UW5sMFpYTW9jM1J5YVc1bktTQjdYRzVjZEZ4MGNtVjBkWEp1SUhOMGNtbHVaeTV6Y0d4cGRDZ25KeWt1YldGd0tHTm9ZWElnUFQ0Z1kyaGhjaTVqYUdGeVEyOWtaVUYwS0NrcFhHNWNkSDFjYmx4dVhIUXZLaXBjYmx4MElDb2dRMmhsWTJ0eklHbG1JR0Z5WjNWdFpXNTBJR2x6SUdFZ2RtRnNhV1FnYm5WdFltVnlMbHh1WEhRZ0tpQkFjR0Z5WVcwZ2V5cDlJRzRnTFNCV1lXeDFaU0IwYnlCamFHVmphMXh1WEhRZ0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZWeHVYSFFnS2k5Y2JseDBjM1JoZEdsaklHbHpUblZ0WlhKcFl5aHVLU0I3WEc1Y2RGeDBjbVYwZFhKdUlDRnBjMDVoVGlod1lYSnpaVVpzYjJGMEtHNHBLU0FtSmlCcGMwWnBibWwwWlNodUtWeHVYSFI5WEc1Y2JseDBMeW9xWEc0Z0lDQWdJQ29nVW1WMGRYSnVjeUIwYUdVZ1kyOXljbVZqZENCTlNVUkpJRzUxYldKbGNpQm1iM0lnZEdobElITndaV05wWm1sbFpDQndhWFJqYUM1Y2JpQWdJQ0FnS2lCVmMyVnpJRlJ2Ym1Gc0lFMXBaR2tnTFNCb2RIUndjem92TDJkcGRHaDFZaTVqYjIwdlpHRnVhV2RpTDNSdmJtRnNMM1J5WldVdmJXRnpkR1Z5TDNCaFkydGhaMlZ6TDIxcFpHbGNiaUFnSUNBZ0tpQkFjR0Z5WVcwZ2V5aHpkSEpwYm1kOGJuVnRZbVZ5S1gwZ2NHbDBZMmdnTFNBblF5TTBKeUJ2Y2lCdGFXUnBJRzV2ZEdVZ1kyOWtaVnh1SUNBZ0lDQXFJRUJ5WlhSMWNtNGdlMjUxYldKbGNuMWNiaUFnSUNBZ0tpOWNiaUFnSUNBZ2MzUmhkR2xqSUdkbGRGQnBkR05vS0hCcGRHTm9LU0I3WEc0Z0lDQWdJRngwY21WMGRYSnVJSFJ2VFdsa2FTaHdhWFJqYUNrN1hHNGdJQ0FnSUgxY2JseHVYSFF2S2lwY2JseDBJQ29nVkhKaGJuTnNZWFJsY3lCdWRXMWlaWElnYjJZZ2RHbGphM01nZEc4Z1RVbEVTU0IwYVcxbGMzUmhiWEFnWm05eWJXRjBMQ0J5WlhSMWNtNXBibWNnWVc0Z1lYSnlZWGtnYjJaY2JseDBJQ29nYUdWNElITjBjbWx1WjNNZ2QybDBhQ0IwYUdVZ2RHbHRaU0IyWVd4MVpYTXVJRTFwWkdrZ2FHRnpJR0VnZG1WeWVTQndZWEowYVdOMWJHRnlJSFJwYldVZ2RHOGdaWGh3Y21WemN5QjBhVzFsTEZ4dVhIUWdLaUIwWVd0bElHRWdaMjl2WkNCc2IyOXJJR0YwSUhSb1pTQnpjR1ZqSUdKbFptOXlaU0JsZG1WeUlIUnZkV05vYVc1bklIUm9hWE1nWm5WdVkzUnBiMjR1WEc1Y2RDQXFJRlJvWVc1cmN5QjBieUJvZEhSd2N6b3ZMMmRwZEdoMVlpNWpiMjB2YzJWeVoya3Zhbk50YVdScFhHNWNkQ0FxWEc1Y2RDQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQjBhV05yY3lBdElFNTFiV0psY2lCdlppQjBhV05yY3lCMGJ5QmlaU0IwY21GdWMyeGhkR1ZrWEc1Y2RDQXFJRUJ5WlhSMWNtNGdlMkZ5Y21GNWZTQXRJRUo1ZEdWeklIUm9ZWFFnWm05eWJTQjBhR1VnVFVsRVNTQjBhVzFsSUhaaGJIVmxYRzVjZENBcUwxeHVYSFJ6ZEdGMGFXTWdiblZ0WW1WeVZHOVdZWEpwWVdKc1pVeGxibWQwYUNoMGFXTnJjeWtnZTF4dVhIUWdJQ0FnZG1GeUlHSjFabVpsY2lBOUlIUnBZMnR6SUNZZ01IZzNSanRjYmx4dVhIUWdJQ0FnZDJocGJHVWdLSFJwWTJ0eklEMGdkR2xqYTNNZ1BqNGdOeWtnZTF4dVhIUWdJQ0FnSUNBZ0lHSjFabVpsY2lBOFBEMGdPRHRjYmx4MElDQWdJQ0FnSUNCaWRXWm1aWElnZkQwZ0tDaDBhV05yY3lBbUlEQjROMFlwSUh3Z01IZzRNQ2s3WEc1Y2RDQWdJQ0I5WEc1Y2JseDBJQ0FnSUhaaGNpQmlUR2x6ZENBOUlGdGRPMXh1WEhRZ0lDQWdkMmhwYkdVZ0tIUnlkV1VwSUh0Y2JseDBJQ0FnSUNBZ0lDQmlUR2x6ZEM1d2RYTm9LR0oxWm1abGNpQW1JREI0Wm1ZcE8xeHVYRzVjZENBZ0lDQWdJQ0FnYVdZZ0tHSjFabVpsY2lBbUlEQjRPREFwSUdKMVptWmxjaUErUGowZ09GeHVYSFFnSUNBZ0lDQWdJR1ZzYzJVZ2V5QmljbVZoYXpzZ2ZWeHVYSFFnSUNBZ2ZWeHVYRzVjZENBZ0lDQnlaWFIxY200Z1lreHBjM1E3WEc1Y2RIMWNibHh1WEhRdktpcGNibHgwSUNvZ1EyOTFiblJ6SUc1MWJXSmxjaUJ2WmlCaWVYUmxjeUJwYmlCemRISnBibWRjYmx4MElDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlITmNibHgwSUNvZ1FISmxkSFZ5YmlCN1lYSnlZWGw5WEc1Y2RDQXFMMXh1WEhSemRHRjBhV01nYzNSeWFXNW5RbmwwWlVOdmRXNTBLSE1wSUh0Y2JseDBYSFJ5WlhSMWNtNGdaVzVqYjJSbFZWSkpLSE1wTG5Od2JHbDBLQzhsTGk1OExpOHBMbXhsYm1kMGFDQXRJREZjYmx4MGZWeHVYRzVjZEM4cUtseHVYSFFnS2lCSFpYUWdZVzRnYVc1MElHWnliMjBnWVc0Z1lYSnlZWGtnYjJZZ1lubDBaWE11WEc1Y2RDQXFJRUJ3WVhKaGJTQjdZWEp5WVhsOUlHSjVkR1Z6WEc1Y2RDQXFJRUJ5WlhSMWNtNGdlMjUxYldKbGNuMWNibHgwSUNvdlhHNWNkSE4wWVhScFl5QnVkVzFpWlhKR2NtOXRRbmwwWlhNb1lubDBaWE1wSUh0Y2JseDBYSFIyWVhJZ2FHVjRJRDBnSnljN1hHNWNkRngwZG1GeUlITjBjbWx1WjFKbGMzVnNkRHRjYmx4dVhIUmNkR0o1ZEdWekxtWnZja1ZoWTJnb1puVnVZM1JwYjI0b1lubDBaU2tnZTF4dVhIUmNkRngwYzNSeWFXNW5VbVZ6ZFd4MElEMGdZbmwwWlM1MGIxTjBjbWx1WnlneE5pazdYRzVjYmx4MFhIUmNkQzh2SUdWdWMzVnlaU0J6ZEhKcGJtY2dhWE1nTWlCamFHRnljMXh1WEhSY2RGeDBhV1lnS0hOMGNtbHVaMUpsYzNWc2RDNXNaVzVuZEdnZ1BUMGdNU2tnYzNSeWFXNW5VbVZ6ZFd4MElEMGdYQ0l3WENJZ0t5QnpkSEpwYm1kU1pYTjFiSFJjYmx4dVhIUmNkRngwYUdWNElDczlJSE4wY21sdVoxSmxjM1ZzZER0Y2JseDBYSFI5S1R0Y2JseHVYSFJjZEhKbGRIVnliaUJ3WVhKelpVbHVkQ2hvWlhnc0lERTJLVHRjYmx4MGZWeHVYRzVjZEM4cUtseHVYSFFnS2lCVVlXdGxjeUJoSUc1MWJXSmxjaUJoYm1RZ2MzQnNhWFJ6SUdsMElIVndJR2x1ZEc4Z1lXNGdZWEp5WVhrZ2IyWWdZbmwwWlhNdUlDQkRZVzRnWW1VZ2NHRmtaR1ZrSUdKNUlIQmhjM05wYm1jZ1lTQnVkVzFpWlhJZ2RHOGdZbmwwWlhOT1pXVmtaV1JjYmx4MElDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHNTFiV0psY2x4dVhIUWdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdZbmwwWlhOT1pXVmtaV1JjYmx4MElDb2dRSEpsZEhWeWJpQjdZWEp5WVhsOUlDMGdRWEp5WVhrZ2IyWWdZbmwwWlhOY2JseDBJQ292WEc1Y2RITjBZWFJwWXlCdWRXMWlaWEpVYjBKNWRHVnpLRzUxYldKbGNpd2dZbmwwWlhOT1pXVmtaV1FwSUh0Y2JseDBYSFJpZVhSbGMwNWxaV1JsWkNBOUlHSjVkR1Z6VG1WbFpHVmtJSHg4SURFN1hHNWNibHgwWEhSMllYSWdhR1Y0VTNSeWFXNW5JRDBnYm5WdFltVnlMblJ2VTNSeWFXNW5LREUyS1R0Y2JseHVYSFJjZEdsbUlDaG9aWGhUZEhKcGJtY3ViR1Z1WjNSb0lDWWdNU2tnZXlBdkx5Qk5ZV3RsSUhOMWNtVWdhR1Y0SUhOMGNtbHVaeUJwY3lCbGRtVnVJRzUxYldKbGNpQnZaaUJqYUdGeWMxeHVYSFJjZEZ4MGFHVjRVM1J5YVc1bklEMGdKekFuSUNzZ2FHVjRVM1J5YVc1bk8xeHVYSFJjZEgxY2JseHVYSFJjZEM4dklGTndiR2wwSUdobGVDQnpkSEpwYm1jZ2FXNTBieUJoYmlCaGNuSmhlU0J2WmlCMGQyOGdZMmhoY2lCbGJHVnRaVzUwYzF4dVhIUmNkSFpoY2lCb1pYaEJjbkpoZVNBOUlHaGxlRk4wY21sdVp5NXRZWFJqYUNndkxuc3lmUzluS1R0Y2JseHVYSFJjZEM4dklFNXZkeUJ3WVhKelpTQjBhR1Z0SUc5MWRDQmhjeUJwYm5SbFoyVnljMXh1WEhSY2RHaGxlRUZ5Y21GNUlEMGdhR1Y0UVhKeVlYa3ViV0Z3S0dsMFpXMGdQVDRnY0dGeWMyVkpiblFvYVhSbGJTd2dNVFlwS1Z4dVhHNWNkRngwTHk4Z1VISmxjR1Z1WkNCbGJYQjBlU0JpZVhSbGN5QnBaaUIzWlNCa2IyNG5kQ0JvWVhabElHVnViM1ZuYUZ4dVhIUmNkR2xtSUNob1pYaEJjbkpoZVM1c1pXNW5kR2dnUENCaWVYUmxjMDVsWldSbFpDa2dlMXh1WEhSY2RGeDBkMmhwYkdVZ0tHSjVkR1Z6VG1WbFpHVmtJQzBnYUdWNFFYSnlZWGt1YkdWdVozUm9JRDRnTUNrZ2UxeHVYSFJjZEZ4MFhIUm9aWGhCY25KaGVTNTFibk5vYVdaMEtEQXBPMXh1WEhSY2RGeDBmVnh1WEhSY2RIMWNibHh1WEhSY2RISmxkSFZ5YmlCb1pYaEJjbkpoZVR0Y2JseDBmVnh1WEc1Y2RDOHFLbHgwWEc1Y2RDQXFJRU52Ym5abGNuUnpJSFpoYkhWbElIUnZJR0Z5Y21GNUlHbG1JRzVsWldSbFpDNWNibHgwSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhaaGJIVmxYRzVjZENBcUlFQnlaWFIxY200Z2UyRnljbUY1ZlZ4dVhIUWdLaTljYmx4MGMzUmhkR2xqSUhSdlFYSnlZWGtvZG1Gc2RXVXBJSHRjYmx4MFhIUnBaaUFvUVhKeVlYa3VhWE5CY25KaGVTaDJZV3gxWlNrcElISmxkSFZ5YmlCMllXeDFaVHRjYmx4MFhIUnlaWFIxY200Z1czWmhiSFZsWFR0Y2JseDBmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ2UxVjBhV3h6ZlR0Y2JtTnNZWE56SUZabGVFWnNiM2NnZTF4dVhIUmNibHgwWTI5dWMzUnlkV04wYjNJb0tTQjdYRzVjZEZ4MEx5OGdZMjlrWlM0dUxseHVYSFI5WEc1Y2JseDBMeW9xWEc1Y2RDQXFJRk4xY0hCdmNuUWdabTl5SUdOdmJuWmxjblJwYm1jZ1ZtVjRSbXh2ZHlCMmIybGpaU0JwYm5SdklFMXBaR2xYY21sMFpYSktVeUIwY21GamExeHVYSFFnS2lCQWNtVjBkWEp1SUUxcFpHbFhjbWwwYVdWeUxsUnlZV05ySUc5aWFtVmpkRnh1WEhRZ0tpOWNibHgwZEhKaFkydEdjbTl0Vm05cFkyVW9kbTlwWTJVcElIdGNibHgwWEhSMllYSWdkSEpoWTJzZ1BTQnVaWGNnVkhKaFkyc29LVHRjYmx4MFhIUjJZWElnZDJGcGREdGNibHgwWEhSMllYSWdjR2wwWTJobGN5QTlJRnRkTzF4dVhHNWNkRngwZG05cFkyVXVkR2xqYTJGaWJHVnpMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNG9kR2xqYTJGaWJHVXBJSHRjYmx4MFhIUmNkSEJwZEdOb1pYTWdQU0JiWFR0Y2JseHVYSFJjZEZ4MGFXWWdLSFJwWTJ0aFlteGxMbTV2ZEdWVWVYQmxJRDA5UFNBbmJpY3BJSHRjYmx4MFhIUmNkRngwZEdsamEyRmliR1V1YTJWNWN5NW1iM0pGWVdOb0tHWjFibU4wYVc5dUtHdGxlU2tnZTF4dVhIUmNkRngwWEhSY2RDOHZJR0oxYVd4a0lHRnljbUY1SUc5bUlIQnBkR05vWlhOY2JseDBYSFJjZEZ4MFhIUndhWFJqYUdWekxuQjFjMmdvZEdocGN5NWpiMjUyWlhKMFVHbDBZMmdvYTJWNUtTazdYRzVjZEZ4MFhIUmNkSDBwTzF4dVhHNWNkRngwWEhSOUlHVnNjMlVnYVdZZ0tIUnBZMnRoWW14bExtNXZkR1ZVZVhCbElEMDlQU0FuY2ljcElIdGNibHgwWEhSY2RGeDBMeThnYlc5MlpTQnZiaUIwYnlCMGFHVWdibVY0ZENCMGFXTnJZV0pzWlNCaGJtUWdkWE5sSUhSb2FYTWdjbVZ6ZENCaGN5QmhJR0IzWVdsMFlDQndjbTl3WlhKMGVTQm1iM0lnZEdobElHNWxlSFFnWlhabGJuUmNibHgwWEhSY2RGeDBkMkZwZENBOUlIUm9hWE11WTI5dWRtVnlkRVIxY21GMGFXOXVLSFJwWTJ0aFlteGxLVHRjYmx4MFhIUmNkRngwY21WMGRYSnVPMXh1WEhSY2RGeDBmVnh1WEc1Y2RGeDBYSFIwY21GamF5NWhaR1JGZG1WdWRDaHVaWGNnVG05MFpVVjJaVzUwS0h0d2FYUmphRG9nY0dsMFkyaGxjeXdnWkhWeVlYUnBiMjQ2SUhSb2FYTXVZMjl1ZG1WeWRFUjFjbUYwYVc5dUtIUnBZMnRoWW14bEtTd2dkMkZwZERvZ2QyRnBkSDBwS1R0Y2JseDBYSFJjZEZ4dVhIUmNkRngwTHk4Z2NtVnpaWFFnZDJGcGRGeHVYSFJjZEZ4MGQyRnBkQ0E5SURBN1hHNWNkRngwZlNrN1hHNWNibHgwWEhSeVpYUjFjbTRnZEhKaFkyczdYRzVjZEgxY2JseHVYRzVjZEM4cUtseHVYSFFnS2lCRGIyNTJaWEowY3lCV1pYaEdiRzkzSUhCcGRHTm9JSE41Ym5SaGVDQjBieUJOYVdScFYzSnBkR1Z5U2xNZ2MzbHVkR0Y0WEc1Y2RDQXFJRUJ3WVhKaGJTQndhWFJqYUNCemRISnBibWRjYmx4MElDb3ZYRzVjZEdOdmJuWmxjblJRYVhSamFDaHdhWFJqYUNrZ2UxeHVYSFJjZEhKbGRIVnliaUJ3YVhSamFDNXlaWEJzWVdObEtDY3ZKeXdnSnljcE8xeHVYSFI5SUZ4dVhHNWNibHgwTHlvcVhHNWNkQ0FxSUVOdmJuWmxjblJ6SUZabGVFWnNiM2NnWkhWeVlYUnBiMjRnYzNsdWRHRjRJSFJ2SUUxcFpHbFhjbWwwWlhKS1V5QnplVzUwWVhoY2JseDBJQ29nUUhCaGNtRnRJRzV2ZEdVZ2MzUnlkV04wSUdaeWIyMGdWbVY0Um14dmQxeHVYSFFnS2k5Y2JseDBZMjl1ZG1WeWRFUjFjbUYwYVc5dUtHNXZkR1VwSUh0Y2JseDBYSFJ6ZDJsMFkyZ2dLRzV2ZEdVdVpIVnlZWFJwYjI0cElIdGNibHgwWEhSY2RHTmhjMlVnSjNjbk9seHVYSFJjZEZ4MFhIUnlaWFIxY200Z0p6RW5PMXh1WEhSY2RGeDBZMkZ6WlNBbmFDYzZYRzVjZEZ4MFhIUmNkSEpsZEhWeWJpQnViM1JsTG1selJHOTBkR1ZrS0NrZ1B5QW5aREluSURvZ0p6SW5PMXh1WEhSY2RGeDBZMkZ6WlNBbmNTYzZYRzVjZEZ4MFhIUmNkSEpsZEhWeWJpQnViM1JsTG1selJHOTBkR1ZrS0NrZ1B5QW5aRFFuSURvZ0p6UW5PMXh1WEhSY2RGeDBZMkZ6WlNBbk9DYzZYRzVjZEZ4MFhIUmNkSEpsZEhWeWJpQnViM1JsTG1selJHOTBkR1ZrS0NrZ1B5QW5aRGduSURvZ0p6Z25PMXh1WEhSY2RIMWNibHh1WEhSY2RISmxkSFZ5YmlCdWIzUmxMbVIxY21GMGFXOXVPMXh1WEhSOU8xeHVmVnh1WEc1bGVIQnZjblFnZTFabGVFWnNiM2Q5TzF4dUx5b3FYRzRnS2lCUFltcGxZM1FnZEdoaGRDQndkWFJ6SUhSdloyVjBhR1Z5SUhSeVlXTnJjeUJoYm1RZ2NISnZkbWxrWlhNZ2JXVjBhRzlrY3lCbWIzSWdabWxzWlNCdmRYUndkWFF1WEc0Z0tpQkFjR0Z5WVcwZ2UyRnljbUY1ZlNCMGNtRmphM01nTFNCQmJpQmhjbkpoZVNCdlppQjdWSEpoWTJ0OUlHOWlhbVZqZEhNdVhHNGdLaUJBY21WMGRYSnVJSHRYY21sMFpYSjlYRzRnS2k5Y2JtTnNZWE56SUZkeWFYUmxjaUI3WEc1Y2RHTnZibk4wY25WamRHOXlLSFJ5WVdOcmN5a2dlMXh1WEhSY2RIUm9hWE11WkdGMFlTQTlJRnRkTzF4dVhHNWNkRngwZG1GeUlIUnlZV05yVkhsd1pTQTlJSFJ5WVdOcmN5NXNaVzVuZEdnZ1BpQXhJRDhnUTI5dWMzUmhiblJ6TGtoRlFVUkZVbDlEU0ZWT1MxOUdUMUpOUVZReElEb2dRMjl1YzNSaGJuUnpMa2hGUVVSRlVsOURTRlZPUzE5R1QxSk5RVlF3TzF4dVhIUmNkSFpoY2lCdWRXMWlaWEpQWmxSeVlXTnJjeUE5SUZWMGFXeHpMbTUxYldKbGNsUnZRbmwwWlhNb2RISmhZMnR6TG14bGJtZDBhQ3dnTWlrN0lDOHZJSFIzYnlCaWVYUmxjeUJzYjI1blhHNWNibHgwWEhRdkx5QklaV0ZrWlhJZ1kyaDFibXRjYmx4MFhIUjBhR2x6TG1SaGRHRXVjSFZ6YUNodVpYY2dRMmgxYm1zb2UxeHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RIUjVjR1U2SUVOdmJuTjBZVzUwY3k1SVJVRkVSVkpmUTBoVlRrdGZWRmxRUlN4Y2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSa1lYUmhPaUIwY21GamExUjVjR1V1WTI5dVkyRjBLRzUxYldKbGNrOW1WSEpoWTJ0ekxDQkRiMjV6ZEdGdWRITXVTRVZCUkVWU1gwTklWVTVMWDBSSlZrbFRTVTlPS1gwcEtUdGNibHh1WEhSY2RDOHZJRlJ5WVdOcklHTm9kVzVyYzF4dVhIUmNkSFJ5WVdOcmN5NW1iM0pGWVdOb0tHWjFibU4wYVc5dUtIUnlZV05yTENCcEtTQjdYRzVjZEZ4MFhIUjBjbUZqYXk1aFpHUkZkbVZ1ZENodVpYY2dUV1YwWVVWMlpXNTBLSHRrWVhSaE9pQkRiMjV6ZEdGdWRITXVUVVZVUVY5RlRrUmZUMFpmVkZKQlEwdGZTVVI5S1NrN1hHNWNkRngwWEhSMGFHbHpMbVJoZEdFdWNIVnphQ2gwY21GamF5azdYRzVjZEZ4MGZTd2dkR2hwY3lrN1hHNWNkSDFjYmx4dVhIUXZLaXBjYmx4MElDb2dRblZwYkdSeklIUm9aU0JtYVd4bElHbHVkRzhnWVNCVmFXNTBPRUZ5Y21GNVhHNWNkQ0FxSUVCeVpYUjFjbTRnZTFWcGJuUTRRWEp5WVhsOVhHNWNkQ0FxTDF4dVhIUmlkV2xzWkVacGJHVW9LU0I3WEc1Y2RGeDBkbUZ5SUdKMWFXeGtJRDBnVzEwN1hHNWNibHgwWEhRdkx5QkVZWFJoSUdOdmJuTnBjM1J6SUc5bUlHTm9kVzVyY3lCM2FHbGphQ0JqYjI1emFYTjBjeUJ2WmlCa1lYUmhYRzVjZEZ4MGRHaHBjeTVrWVhSaExtWnZja1ZoWTJnb0tHUXBJRDArSUdKMWFXeGtJRDBnWW5WcGJHUXVZMjl1WTJGMEtHUXVkSGx3WlN3Z1pDNXphWHBsTENCa0xtUmhkR0VwS1R0Y2JseHVYSFJjZEhKbGRIVnliaUJ1WlhjZ1ZXbHVkRGhCY25KaGVTaGlkV2xzWkNrN1hHNWNkSDFjYmx4dVhIUXZLaXBjYmx4MElDb2dRMjl1ZG1WeWRDQm1hV3hsSUdKMVptWmxjaUIwYnlCaElHSmhjMlUyTkNCemRISnBibWN1SUNCRWFXWm1aWEpsYm5RZ2JXVjBhRzlrY3lCa1pYQmxibVJwYm1jZ2IyNGdhV1lnWW5KdmQzTmxjaUJ2Y2lCdWIyUmxMbHh1WEhRZ0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNWNkQ0FxTDF4dVhIUmlZWE5sTmpRb0tTQjdYRzVjZEZ4MGFXWWdLSFI1Y0dWdlppQmlkRzloSUQwOVBTQW5ablZ1WTNScGIyNG5LU0J5WlhSMWNtNGdZblJ2WVNoVGRISnBibWN1Wm5KdmJVTm9ZWEpEYjJSbExtRndjR3g1S0c1MWJHd3NJSFJvYVhNdVluVnBiR1JHYVd4bEtDa3BLVHRjYmx4MFhIUnlaWFIxY200Z2JtVjNJRUoxWm1abGNpaDBhR2x6TG1KMWFXeGtSbWxzWlNncEtTNTBiMU4wY21sdVp5Z25ZbUZ6WlRZMEp5azdYRzVjZEgxY2JseHVJQ0FnSUM4cUtseHVJQ0FnSUNBcUlFZGxkQ0IwYUdVZ1pHRjBZU0JWVWtrdVhHNGdJQ0FnSUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlZ4dUlDQWdJQ0FxTDF4dUlDQWdJR1JoZEdGVmNta29LU0I3WEc0Z0lDQWdYSFJ5WlhSMWNtNGdKMlJoZEdFNllYVmthVzh2Yldsa2FUdGlZWE5sTmpRc0p5QXJJSFJvYVhNdVltRnpaVFkwS0NrN1hHNGdJQ0FnZlZ4dVhHNWNkQzhxS2x4dVhIUWdLaUJQZFhSd2RYUWdkRzhnYzNSa2IzVjBYRzVjZENBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMxY2JseDBJQ292WEc0Z0lDQWdjM1JrYjNWMEtDa2dlMXh1SUNBZ0lGeDBjbVYwZFhKdUlIQnliMk5sYzNNdWMzUmtiM1YwTG5keWFYUmxLRzVsZHlCQ2RXWm1aWElvZEdocGN5NWlkV2xzWkVacGJHVW9LU2twTzF4dUlDQWdJSDFjYmx4dVhIUXZLaXBjYmx4MElDb2dVMkYyWlNCMGJ5Qk5TVVJKSUdacGJHVmNibHgwSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUdacGJHVnVZVzFsWEc1Y2RDQXFMMXh1WEhSellYWmxUVWxFU1NobWFXeGxibUZ0WlNrZ2UxeHVYSFJjZEhaaGNpQmlkV1ptWlhJZ1BTQnVaWGNnUW5WbVptVnlLSFJvYVhNdVluVnBiR1JHYVd4bEtDa3BPMXh1WEhSY2RHWnpMbmR5YVhSbFJtbHNaU2htYVd4bGJtRnRaU0FySUNjdWJXbGtKeXdnWW5WbVptVnlMQ0JtZFc1amRHbHZiaUFvWlhKeUtTQjdYRzVjZEZ4MFhIUnBaaWhsY25JcElISmxkSFZ5YmlCamIyNXpiMnhsTG14dlp5aGxjbklwTzF4dVhIUmNkSDBwTzF4dVhIUjlYRzU5WEc1Y2JtVjRjRzl5ZENCN1YzSnBkR1Z5ZlR0Y2JpSmRmUT09XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vbWlkaS13cml0ZXItanMvYnVpbGQvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDE0MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCdcblxuLy8gdXRpbFxuZnVuY3Rpb24gZmlsbFN0ciAocywgbnVtKSB7IHJldHVybiBBcnJheShudW0gKyAxKS5qb2luKHMpIH1cbmZ1bmN0aW9uIGlzTnVtICh4KSB7IHJldHVybiB0eXBlb2YgeCA9PT0gJ251bWJlcicgfVxuZnVuY3Rpb24gaXNTdHIgKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnc3RyaW5nJyB9XG5mdW5jdGlvbiBpc0RlZiAoeCkgeyByZXR1cm4gdHlwZW9mIHggIT09ICd1bmRlZmluZWQnIH1cbmZ1bmN0aW9uIG1pZGlUb0ZyZXEgKG1pZGksIHR1bmluZykge1xuICByZXR1cm4gTWF0aC5wb3coMiwgKG1pZGkgLSA2OSkgLyAxMikgKiAodHVuaW5nIHx8IDQ0MClcbn1cblxudmFyIFJFR0VYID0gL14oW2EtZ0EtR10pKCN7MSx9fGJ7MSx9fHh7MSx9fCkoLT9cXGQqKVxccyooLiopXFxzKiQvXG4vKipcbiAqIEEgcmVnZXggZm9yIG1hdGNoaW5nIG5vdGUgc3RyaW5ncyBpbiBzY2llbnRpZmljIG5vdGF0aW9uLlxuICpcbiAqIEBuYW1lIHJlZ2V4XG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm4ge1JlZ0V4cH0gdGhlIHJlZ2V4cCB1c2VkIHRvIHBhcnNlIHRoZSBub3RlIG5hbWVcbiAqXG4gKiBUaGUgbm90ZSBzdHJpbmcgc2hvdWxkIGhhdmUgdGhlIGZvcm0gYGxldHRlclthY2NpZGVudGFsc11bb2N0YXZlXVtlbGVtZW50XWBcbiAqIHdoZXJlOlxuICpcbiAqIC0gbGV0dGVyOiAoUmVxdWlyZWQpIGlzIGEgbGV0dGVyIGZyb20gQSB0byBHIGVpdGhlciB1cHBlciBvciBsb3dlciBjYXNlXG4gKiAtIGFjY2lkZW50YWxzOiAoT3B0aW9uYWwpIGNhbiBiZSBvbmUgb3IgbW9yZSBgYmAgKGZsYXRzKSwgYCNgIChzaGFycHMpIG9yIGB4YCAoZG91YmxlIHNoYXJwcykuXG4gKiBUaGV5IGNhbiBOT1QgYmUgbWl4ZWQuXG4gKiAtIG9jdGF2ZTogKE9wdGlvbmFsKSBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGludGVnZXJcbiAqIC0gZWxlbWVudDogKE9wdGlvbmFsKSBhZGRpdGlvbmFsbHkgYW55dGhpbmcgYWZ0ZXIgdGhlIGR1cmF0aW9uIGlzIGNvbnNpZGVyZWQgdG9cbiAqIGJlIHRoZSBlbGVtZW50IG5hbWUgKGZvciBleGFtcGxlOiAnQzIgZG9yaWFuJylcbiAqXG4gKiBUaGUgZXhlY3V0ZWQgcmVnZXggY29udGFpbnMgKGJ5IGFycmF5IGluZGV4KTpcbiAqXG4gKiAtIDA6IHRoZSBjb21wbGV0ZSBzdHJpbmdcbiAqIC0gMTogdGhlIG5vdGUgbGV0dGVyXG4gKiAtIDI6IHRoZSBvcHRpb25hbCBhY2NpZGVudGFsc1xuICogLSAzOiB0aGUgb3B0aW9uYWwgb2N0YXZlXG4gKiAtIDQ6IHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgKHRyaW1tZWQpXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciBwYXJzZXIgPSByZXF1aXJlKCdub3RlLXBhcnNlcicpXG4gKiBwYXJzZXIucmVnZXguZXhlYygnYyM0JylcbiAqIC8vID0+IFsnYyM0JywgJ2MnLCAnIycsICc0JywgJyddXG4gKiBwYXJzZXIucmVnZXguZXhlYygnYyM0IG1ham9yJylcbiAqIC8vID0+IFsnYyM0bWFqb3InLCAnYycsICcjJywgJzQnLCAnbWFqb3InXVxuICogcGFyc2VyLnJlZ2V4KCkuZXhlYygnQ01hajcnKVxuICogLy8gPT4gWydDTWFqNycsICdDJywgJycsICcnLCAnTWFqNyddXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdleCAoKSB7IHJldHVybiBSRUdFWCB9XG5cbnZhciBTRU1JVE9ORVMgPSBbMCwgMiwgNCwgNSwgNywgOSwgMTFdXG4vKipcbiAqIFBhcnNlIGEgbm90ZSBuYW1lIGluIHNjaWVudGlmaWMgbm90YXRpb24gYW4gcmV0dXJuIGl0J3MgY29tcG9uZW50cyxcbiAqIGFuZCBzb21lIG51bWVyaWMgcHJvcGVydGllcyBpbmNsdWRpbmcgbWlkaSBudW1iZXIgYW5kIGZyZXF1ZW5jeS5cbiAqXG4gKiBAbmFtZSBwYXJzZVxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge1N0cmluZ30gbm90ZSAtIHRoZSBub3RlIHN0cmluZyB0byBiZSBwYXJzZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNUb25pYyAtIHRydWUgdGhlIHN0cmluZ3MgaXQncyBzdXBwb3NlZCB0byBjb250YWluIGEgbm90ZSBudW1iZXJcbiAqIGFuZCBzb21lIGNhdGVnb3J5IChmb3IgZXhhbXBsZSBhbiBzY2FsZTogJ0MjIG1ham9yJykuIEl0J3MgZmFsc2UgYnkgZGVmYXVsdCxcbiAqIGJ1dCB3aGVuIHRydWUsIGVuIGV4dHJhIHRvbmljT2YgcHJvcGVydHkgaXMgcmV0dXJuZWQgd2l0aCB0aGUgY2F0ZWdvcnkgKCdtYWpvcicpXG4gKiBAcGFyYW0ge0Zsb2F0fSB0dW5uaW5nIC0gVGhlIGZyZXF1ZW5jeSBvZiBBNCBub3RlIHRvIGNhbGN1bGF0ZSBmcmVxdWVuY2llcy5cbiAqIEJ5IGRlZmF1bHQgaXQgNDQwLlxuICogQHJldHVybiB7T2JqZWN0fSB0aGUgcGFyc2VkIG5vdGUgbmFtZSBvciBudWxsIGlmIG5vdCBhIHZhbGlkIG5vdGVcbiAqXG4gKiBUaGUgcGFyc2VkIG5vdGUgbmFtZSBvYmplY3Qgd2lsbCBBTFdBWVMgY29udGFpbnM6XG4gKiAtIGxldHRlcjogdGhlIHVwcGVyY2FzZSBsZXR0ZXIgb2YgdGhlIG5vdGVcbiAqIC0gYWNjOiB0aGUgYWNjaWRlbnRhbHMgb2YgdGhlIG5vdGUgKG9ubHkgc2hhcnBzIG9yIGZsYXRzKVxuICogLSBwYzogdGhlIHBpdGNoIGNsYXNzIChsZXR0ZXIgKyBhY2MpXG4gKiAtIHN0ZXA6IHMgYSBudW1lcmljIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBsZXR0ZXIuIEl0J3MgYW4gaW50ZWdlciBmcm9tIDAgdG8gNlxuICogd2hlcmUgMCA9IEMsIDEgPSBEIC4uLiA2ID0gQlxuICogLSBhbHQ6IGEgbnVtZXJpYyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWNjaWRlbnRhbHMuIDAgbWVhbnMgbm8gYWx0ZXJhdGlvbixcbiAqIHBvc2l0aXZlIG51bWJlcnMgYXJlIGZvciBzaGFycHMgYW5kIG5lZ2F0aXZlIGZvciBmbGF0c1xuICogLSBjaHJvbWE6IGEgbnVtZXJpYyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGl0Y2ggY2xhc3MuIEl0J3MgbGlrZSBtaWRpIGZvclxuICogcGl0Y2ggY2xhc3Nlcy4gMCA9IEMsIDEgPSBDIywgMiA9IEQgLi4uIDExID0gQi4gQ2FuIGJlIHVzZWQgdG8gZmluZCBlbmhhcm1vbmljc1xuICogc2luY2UsIGZvciBleGFtcGxlLCBjaHJvbWEgb2YgJ0NiJyBhbmQgJ0InIGFyZSBib3RoIDExXG4gKlxuICogSWYgdGhlIG5vdGUgaGFzIG9jdGF2ZSwgdGhlIHBhcnNlciBvYmplY3Qgd2lsbCBjb250YWluOlxuICogLSBvY3Q6IHRoZSBvY3RhdmUgbnVtYmVyIChhcyBpbnRlZ2VyKVxuICogLSBtaWRpOiB0aGUgbWlkaSBudW1iZXJcbiAqIC0gZnJlcTogdGhlIGZyZXF1ZW5jeSAodXNpbmcgdHVuaW5nIHBhcmFtZXRlciBhcyBiYXNlKVxuICpcbiAqIElmIHRoZSBwYXJhbWV0ZXIgYGlzVG9uaWNgIGlzIHNldCB0byB0cnVlLCB0aGUgcGFyc2VkIG9iamVjdCB3aWxsIGNvbnRhaW46XG4gKiAtIHRvbmljT2Y6IHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgdGhhdCBmb2xsb3dzIG5vdGUgbmFtZSAobGVmdCBhbmQgcmlnaHQgdHJpbW1lZClcbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIHBhcnNlID0gcmVxdWlyZSgnbm90ZS1wYXJzZXInKS5wYXJzZVxuICogcGFyc2UoJ0NiNCcpXG4gKiAvLyA9PiB7IGxldHRlcjogJ0MnLCBhY2M6ICdiJywgcGM6ICdDYicsIHN0ZXA6IDAsIGFsdDogLTEsIGNocm9tYTogLTEsXG4gKiAgICAgICAgIG9jdDogNCwgbWlkaTogNTksIGZyZXE6IDI0Ni45NDE2NTA2MjgwNjIwNiB9XG4gKiAvLyBpZiBubyBvY3RhdmUsIG5vIG1pZGksIG5vIGZyZXFcbiAqIHBhcnNlKCdmeCcpXG4gKiAvLyA9PiB7IGxldHRlcjogJ0YnLCBhY2M6ICcjIycsIHBjOiAnRiMjJywgc3RlcDogMywgYWx0OiAyLCBjaHJvbWE6IDcgfSlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlIChzdHIsIGlzVG9uaWMsIHR1bmluZykge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHJldHVybiBudWxsXG4gIHZhciBtID0gUkVHRVguZXhlYyhzdHIpXG4gIGlmICghbSB8fCAoIWlzVG9uaWMgJiYgbVs0XSkpIHJldHVybiBudWxsXG5cbiAgdmFyIHAgPSB7IGxldHRlcjogbVsxXS50b1VwcGVyQ2FzZSgpLCBhY2M6IG1bMl0ucmVwbGFjZSgveC9nLCAnIyMnKSB9XG4gIHAucGMgPSBwLmxldHRlciArIHAuYWNjXG4gIHAuc3RlcCA9IChwLmxldHRlci5jaGFyQ29kZUF0KDApICsgMykgJSA3XG4gIHAuYWx0ID0gcC5hY2NbMF0gPT09ICdiJyA/IC1wLmFjYy5sZW5ndGggOiBwLmFjYy5sZW5ndGhcbiAgdmFyIHBvcyA9IFNFTUlUT05FU1twLnN0ZXBdICsgcC5hbHRcbiAgcC5jaHJvbWEgPSBwb3MgPCAwID8gMTIgKyBwb3MgOiBwb3MgJSAxMlxuICBpZiAobVszXSkgeyAvLyBoYXMgb2N0YXZlXG4gICAgcC5vY3QgPSArbVszXVxuICAgIHAubWlkaSA9IHBvcyArIDEyICogKHAub2N0ICsgMSlcbiAgICBwLmZyZXEgPSBtaWRpVG9GcmVxKHAubWlkaSwgdHVuaW5nKVxuICB9XG4gIGlmIChpc1RvbmljKSBwLnRvbmljT2YgPSBtWzRdXG4gIHJldHVybiBwXG59XG5cbnZhciBMRVRURVJTID0gJ0NERUZHQUInXG5mdW5jdGlvbiBhY2NTdHIgKG4pIHsgcmV0dXJuICFpc051bShuKSA/ICcnIDogbiA8IDAgPyBmaWxsU3RyKCdiJywgLW4pIDogZmlsbFN0cignIycsIG4pIH1cbmZ1bmN0aW9uIG9jdFN0ciAobikgeyByZXR1cm4gIWlzTnVtKG4pID8gJycgOiAnJyArIG4gfVxuXG4vKipcbiAqIENyZWF0ZSBhIHN0cmluZyBmcm9tIGEgcGFyc2VkIG9iamVjdCBvciBgc3RlcCwgYWx0ZXJhdGlvbiwgb2N0YXZlYCBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gdGhlIHBhcnNlZCBkYXRhIG9iamVjdFxuICogQHJldHVybiB7U3RyaW5nfSBhIG5vdGUgc3RyaW5nIG9yIG51bGwgaWYgbm90IHZhbGlkIHBhcmFtZXRlcnNcbiAqIEBzaW5jZSAxLjJcbiAqIEBleGFtcGxlXG4gKiBwYXJzZXIuYnVpbGQocGFyc2VyLnBhcnNlKCdjYjInKSkgLy8gPT4gJ0NiMidcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gaXQgYWNjZXB0cyAoc3RlcCwgYWx0ZXJhdGlvbiwgb2N0YXZlKSBwYXJhbWV0ZXJzOlxuICogcGFyc2VyLmJ1aWxkKDMpIC8vID0+ICdGJ1xuICogcGFyc2VyLmJ1aWxkKDMsIC0xKSAvLyA9PiAnRmInXG4gKiBwYXJzZXIuYnVpbGQoMywgLTEsIDQpIC8vID0+ICdGYjQnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZCAocywgYSwgbykge1xuICBpZiAocyA9PT0gbnVsbCB8fCB0eXBlb2YgcyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBudWxsXG4gIGlmIChzLnN0ZXApIHJldHVybiBidWlsZChzLnN0ZXAsIHMuYWx0LCBzLm9jdClcbiAgaWYgKHMgPCAwIHx8IHMgPiA2KSByZXR1cm4gbnVsbFxuICByZXR1cm4gTEVUVEVSUy5jaGFyQXQocykgKyBhY2NTdHIoYSkgKyBvY3RTdHIobylcbn1cblxuLyoqXG4gKiBHZXQgbWlkaSBvZiBhIG5vdGVcbiAqXG4gKiBAbmFtZSBtaWRpXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7U3RyaW5nfEludGVnZXJ9IG5vdGUgLSB0aGUgbm90ZSBuYW1lIG9yIG1pZGkgbnVtYmVyXG4gKiBAcmV0dXJuIHtJbnRlZ2VyfSB0aGUgbWlkaSBudW1iZXIgb2YgdGhlIG5vdGUgb3IgbnVsbCBpZiBub3QgYSB2YWxpZCBub3RlXG4gKiBvciB0aGUgbm90ZSBkb2VzIE5PVCBjb250YWlucyBvY3RhdmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgcGFyc2VyID0gcmVxdWlyZSgnbm90ZS1wYXJzZXInKVxuICogcGFyc2VyLm1pZGkoJ0E0JykgLy8gPT4gNjlcbiAqIHBhcnNlci5taWRpKCdBJykgLy8gPT4gbnVsbFxuICogQGV4YW1wbGVcbiAqIC8vIG1pZGkgbnVtYmVycyBhcmUgYnlwYXNzZWQgKGV2ZW4gYXMgc3RyaW5ncylcbiAqIHBhcnNlci5taWRpKDYwKSAvLyA9PiA2MFxuICogcGFyc2VyLm1pZGkoJzYwJykgLy8gPT4gNjBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pZGkgKG5vdGUpIHtcbiAgaWYgKChpc051bShub3RlKSB8fCBpc1N0cihub3RlKSkgJiYgbm90ZSA+PSAwICYmIG5vdGUgPCAxMjgpIHJldHVybiArbm90ZVxuICB2YXIgcCA9IHBhcnNlKG5vdGUpXG4gIHJldHVybiBwICYmIGlzRGVmKHAubWlkaSkgPyBwLm1pZGkgOiBudWxsXG59XG5cbi8qKlxuICogR2V0IGZyZXEgb2YgYSBub3RlIGluIGhlcnR6cyAoaW4gYSB3ZWxsIHRlbXBlcmVkIDQ0MEh6IEE0KVxuICpcbiAqIEBuYW1lIGZyZXFcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtTdHJpbmd9IG5vdGUgLSB0aGUgbm90ZSBuYW1lIG9yIG5vdGUgbWlkaSBudW1iZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSB0dW5pbmcgLSAoT3B0aW9uYWwpIHRoZSBBNCBmcmVxdWVuY3kgKDQ0MCBieSBkZWZhdWx0KVxuICogQHJldHVybiB7RmxvYXR9IHRoZSBmcmVxIG9mIHRoZSBudW1iZXIgaWYgaGVydHpzIG9yIG51bGwgaWYgbm90IHZhbGlkIG5vdGVcbiAqIEBleGFtcGxlXG4gKiB2YXIgcGFyc2VyID0gcmVxdWlyZSgnbm90ZS1wYXJzZXInKVxuICogcGFyc2VyLmZyZXEoJ0E0JykgLy8gPT4gNDQwXG4gKiBwYXJzZXIuZnJlcSgnQScpIC8vID0+IG51bGxcbiAqIEBleGFtcGxlXG4gKiAvLyBjYW4gY2hhbmdlIHR1bmluZyAoNDQwIGJ5IGRlZmF1bHQpXG4gKiBwYXJzZXIuZnJlcSgnQTQnLCA0NDQpIC8vID0+IDQ0NFxuICogcGFyc2VyLmZyZXEoJ0EzJywgNDQ0KSAvLyA9PiAyMjJcbiAqIEBleGFtcGxlXG4gKiAvLyBpdCBhY2NlcHRzIG1pZGkgbnVtYmVycyAoYXMgbnVtYmVycyBhbmQgYXMgc3RyaW5ncylcbiAqIHBhcnNlci5mcmVxKDY5KSAvLyA9PiA0NDBcbiAqIHBhcnNlci5mcmVxKCc2OScsIDQ0MikgLy8gPT4gNDQyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcmVxIChub3RlLCB0dW5pbmcpIHtcbiAgdmFyIG0gPSBtaWRpKG5vdGUpXG4gIHJldHVybiBtID09PSBudWxsID8gbnVsbCA6IG1pZGlUb0ZyZXEobSwgdHVuaW5nKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGV0dGVyIChzcmMpIHsgcmV0dXJuIChwYXJzZShzcmMpIHx8IHt9KS5sZXR0ZXIgfVxuZXhwb3J0IGZ1bmN0aW9uIGFjYyAoc3JjKSB7IHJldHVybiAocGFyc2Uoc3JjKSB8fCB7fSkuYWNjIH1cbmV4cG9ydCBmdW5jdGlvbiBwYyAoc3JjKSB7IHJldHVybiAocGFyc2Uoc3JjKSB8fCB7fSkucGMgfVxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXAgKHNyYykgeyByZXR1cm4gKHBhcnNlKHNyYykgfHwge30pLnN0ZXAgfVxuZXhwb3J0IGZ1bmN0aW9uIGFsdCAoc3JjKSB7IHJldHVybiAocGFyc2Uoc3JjKSB8fCB7fSkuYWx0IH1cbmV4cG9ydCBmdW5jdGlvbiBjaHJvbWEgKHNyYykgeyByZXR1cm4gKHBhcnNlKHNyYykgfHwge30pLmNocm9tYSB9XG5leHBvcnQgZnVuY3Rpb24gb2N0IChzcmMpIHsgcmV0dXJuIChwYXJzZShzcmMpIHx8IHt9KS5vY3QgfVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L25vdGUtcGFyc2VyL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAxNDFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX2R1cGxleC5qcycpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3JlYWRhYmxlLXN0cmVhbS9kdXBsZXgtYnJvd3Nlci5qc1xuLy8gbW9kdWxlIGlkID0gMTQyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIGEgcGFzc3Rocm91Z2ggc3RyZWFtLlxuLy8gYmFzaWNhbGx5IGp1c3QgdGhlIG1vc3QgbWluaW1hbCBzb3J0IG9mIFRyYW5zZm9ybSBzdHJlYW0uXG4vLyBFdmVyeSB3cml0dGVuIGNodW5rIGdldHMgb3V0cHV0IGFzLWlzLlxuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUGFzc1Rocm91Z2g7XG5cbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL19zdHJlYW1fdHJhbnNmb3JtJyk7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudXRpbC5pbmhlcml0cyhQYXNzVGhyb3VnaCwgVHJhbnNmb3JtKTtcblxuZnVuY3Rpb24gUGFzc1Rocm91Z2gob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGFzc1Rocm91Z2gpKSByZXR1cm4gbmV3IFBhc3NUaHJvdWdoKG9wdGlvbnMpO1xuXG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuXG5QYXNzVGhyb3VnaC5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG51bGwsIGNodW5rKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qc1xuLy8gbW9kdWxlIGlkID0gMTQzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbi8qPHJlcGxhY2VtZW50PiovXG52YXIgYnVmZmVyU2hpbSA9IHJlcXVpcmUoJ2J1ZmZlci1zaGltcycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyTGlzdDtcblxuZnVuY3Rpb24gQnVmZmVyTGlzdCgpIHtcbiAgdGhpcy5oZWFkID0gbnVsbDtcbiAgdGhpcy50YWlsID0gbnVsbDtcbiAgdGhpcy5sZW5ndGggPSAwO1xufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKHYpIHtcbiAgdmFyIGVudHJ5ID0geyBkYXRhOiB2LCBuZXh0OiBudWxsIH07XG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHRoaXMudGFpbC5uZXh0ID0gZW50cnk7ZWxzZSB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgdGhpcy50YWlsID0gZW50cnk7XG4gICsrdGhpcy5sZW5ndGg7XG59O1xuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS51bnNoaWZ0ID0gZnVuY3Rpb24gKHYpIHtcbiAgdmFyIGVudHJ5ID0geyBkYXRhOiB2LCBuZXh0OiB0aGlzLmhlYWQgfTtcbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgdGhpcy5oZWFkID0gZW50cnk7XG4gICsrdGhpcy5sZW5ndGg7XG59O1xuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5zaGlmdCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIHZhciByZXQgPSB0aGlzLmhlYWQuZGF0YTtcbiAgaWYgKHRoaXMubGVuZ3RoID09PSAxKSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO2Vsc2UgdGhpcy5oZWFkID0gdGhpcy5oZWFkLm5leHQ7XG4gIC0tdGhpcy5sZW5ndGg7XG4gIHJldHVybiByZXQ7XG59O1xuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtcbiAgdGhpcy5sZW5ndGggPSAwO1xufTtcblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuam9pbiA9IGZ1bmN0aW9uIChzKSB7XG4gIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICB2YXIgcCA9IHRoaXMuaGVhZDtcbiAgdmFyIHJldCA9ICcnICsgcC5kYXRhO1xuICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgIHJldCArPSBzICsgcC5kYXRhO1xuICB9cmV0dXJuIHJldDtcbn07XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLmNvbmNhdCA9IGZ1bmN0aW9uIChuKSB7XG4gIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGJ1ZmZlclNoaW0uYWxsb2MoMCk7XG4gIGlmICh0aGlzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHRoaXMuaGVhZC5kYXRhO1xuICB2YXIgcmV0ID0gYnVmZmVyU2hpbS5hbGxvY1Vuc2FmZShuID4+PiAwKTtcbiAgdmFyIHAgPSB0aGlzLmhlYWQ7XG4gIHZhciBpID0gMDtcbiAgd2hpbGUgKHApIHtcbiAgICBwLmRhdGEuY29weShyZXQsIGkpO1xuICAgIGkgKz0gcC5kYXRhLmxlbmd0aDtcbiAgICBwID0gcC5uZXh0O1xuICB9XG4gIHJldHVybiByZXQ7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvQnVmZmVyTGlzdC5qc1xuLy8gbW9kdWxlIGlkID0gMTQ0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9yZWFkYWJsZScpLlBhc3NUaHJvdWdoXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vcmVhZGFibGUtc3RyZWFtL3Bhc3N0aHJvdWdoLmpzXG4vLyBtb2R1bGUgaWQgPSAxNDVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL3JlYWRhYmxlJykuVHJhbnNmb3JtXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vcmVhZGFibGUtc3RyZWFtL3RyYW5zZm9ybS5qc1xuLy8gbW9kdWxlIGlkID0gMTQ2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV93cml0YWJsZS5qcycpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3JlYWRhYmxlLXN0cmVhbS93cml0YWJsZS1icm93c2VyLmpzXG4vLyBtb2R1bGUgaWQgPSAxNDdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiKGZ1bmN0aW9uIChnbG9iYWwsIHVuZGVmaW5lZCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgaWYgKGdsb2JhbC5zZXRJbW1lZGlhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBuZXh0SGFuZGxlID0gMTsgLy8gU3BlYyBzYXlzIGdyZWF0ZXIgdGhhbiB6ZXJvXG4gICAgdmFyIHRhc2tzQnlIYW5kbGUgPSB7fTtcbiAgICB2YXIgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgdmFyIGRvYyA9IGdsb2JhbC5kb2N1bWVudDtcbiAgICB2YXIgcmVnaXN0ZXJJbW1lZGlhdGU7XG5cbiAgICBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoY2FsbGJhY2spIHtcbiAgICAgIC8vIENhbGxiYWNrIGNhbiBlaXRoZXIgYmUgYSBmdW5jdGlvbiBvciBhIHN0cmluZ1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNhbGxiYWNrID0gbmV3IEZ1bmN0aW9uKFwiXCIgKyBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgICAvLyBDb3B5IGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMV07XG4gICAgICB9XG4gICAgICAvLyBTdG9yZSBhbmQgcmVnaXN0ZXIgdGhlIHRhc2tcbiAgICAgIHZhciB0YXNrID0geyBjYWxsYmFjazogY2FsbGJhY2ssIGFyZ3M6IGFyZ3MgfTtcbiAgICAgIHRhc2tzQnlIYW5kbGVbbmV4dEhhbmRsZV0gPSB0YXNrO1xuICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUobmV4dEhhbmRsZSk7XG4gICAgICByZXR1cm4gbmV4dEhhbmRsZSsrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGhhbmRsZSkge1xuICAgICAgICBkZWxldGUgdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bih0YXNrKSB7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IHRhc2suY2FsbGJhY2s7XG4gICAgICAgIHZhciBhcmdzID0gdGFzay5hcmdzO1xuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bklmUHJlc2VudChoYW5kbGUpIHtcbiAgICAgICAgLy8gRnJvbSB0aGUgc3BlYzogXCJXYWl0IHVudGlsIGFueSBpbnZvY2F0aW9ucyBvZiB0aGlzIGFsZ29yaXRobSBzdGFydGVkIGJlZm9yZSB0aGlzIG9uZSBoYXZlIGNvbXBsZXRlZC5cIlxuICAgICAgICAvLyBTbyBpZiB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBhIHRhc2ssIHdlJ2xsIG5lZWQgdG8gZGVsYXkgdGhpcyBpbnZvY2F0aW9uLlxuICAgICAgICBpZiAoY3VycmVudGx5UnVubmluZ0FUYXNrKSB7XG4gICAgICAgICAgICAvLyBEZWxheSBieSBkb2luZyBhIHNldFRpbWVvdXQuIHNldEltbWVkaWF0ZSB3YXMgdHJpZWQgaW5zdGVhZCwgYnV0IGluIEZpcmVmb3ggNyBpdCBnZW5lcmF0ZWQgYVxuICAgICAgICAgICAgLy8gXCJ0b28gbXVjaCByZWN1cnNpb25cIiBlcnJvci5cbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgICAgICAgICBpZiAodGFzaykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IHRydWU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcnVuKHRhc2spO1xuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW1tZWRpYXRlKGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7IHJ1bklmUHJlc2VudChoYW5kbGUpOyB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYW5Vc2VQb3N0TWVzc2FnZSgpIHtcbiAgICAgICAgLy8gVGhlIHRlc3QgYWdhaW5zdCBgaW1wb3J0U2NyaXB0c2AgcHJldmVudHMgdGhpcyBpbXBsZW1lbnRhdGlvbiBmcm9tIGJlaW5nIGluc3RhbGxlZCBpbnNpZGUgYSB3ZWIgd29ya2VyLFxuICAgICAgICAvLyB3aGVyZSBgZ2xvYmFsLnBvc3RNZXNzYWdlYCBtZWFucyBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQgYW5kIGNhbid0IGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS5cbiAgICAgICAgaWYgKGdsb2JhbC5wb3N0TWVzc2FnZSAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICAgICAgICAgIHZhciBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBvbGRPbk1lc3NhZ2UgPSBnbG9iYWwub25tZXNzYWdlO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSBmYWxzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoXCJcIiwgXCIqXCIpO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IG9sZE9uTWVzc2FnZTtcbiAgICAgICAgICAgIHJldHVybiBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIC8vIEluc3RhbGxzIGFuIGV2ZW50IGhhbmRsZXIgb24gYGdsb2JhbGAgZm9yIHRoZSBgbWVzc2FnZWAgZXZlbnQ6IHNlZVxuICAgICAgICAvLyAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0RPTS93aW5kb3cucG9zdE1lc3NhZ2VcbiAgICAgICAgLy8gKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9jb21tcy5odG1sI2Nyb3NzRG9jdW1lbnRNZXNzYWdlc1xuXG4gICAgICAgIHZhciBtZXNzYWdlUHJlZml4ID0gXCJzZXRJbW1lZGlhdGUkXCIgKyBNYXRoLnJhbmRvbSgpICsgXCIkXCI7XG4gICAgICAgIHZhciBvbkdsb2JhbE1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnNvdXJjZSA9PT0gZ2xvYmFsICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGV2ZW50LmRhdGEgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhLmluZGV4T2YobWVzc2FnZVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoK2V2ZW50LmRhdGEuc2xpY2UobWVzc2FnZVByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbC5hdHRhY2hFdmVudChcIm9ubWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShtZXNzYWdlUHJlZml4ICsgaGFuZGxlLCBcIipcIik7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBldmVudC5kYXRhO1xuICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSA8c2NyaXB0PiBlbGVtZW50OyBpdHMgcmVhZHlzdGF0ZWNoYW5nZSBldmVudCB3aWxsIGJlIGZpcmVkIGFzeW5jaHJvbm91c2x5IG9uY2UgaXQgaXMgaW5zZXJ0ZWRcbiAgICAgICAgICAgIC8vIGludG8gdGhlIGRvY3VtZW50LiBEbyBzbywgdGh1cyBxdWV1aW5nIHVwIHRoZSB0YXNrLiBSZW1lbWJlciB0byBjbGVhbiB1cCBvbmNlIGl0J3MgYmVlbiBjYWxsZWQuXG4gICAgICAgICAgICB2YXIgc2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgICAgICAgICBzY3JpcHQgPSBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSWYgc3VwcG9ydGVkLCB3ZSBzaG91bGQgYXR0YWNoIHRvIHRoZSBwcm90b3R5cGUgb2YgZ2xvYmFsLCBzaW5jZSB0aGF0IGlzIHdoZXJlIHNldFRpbWVvdXQgZXQgYWwuIGxpdmUuXG4gICAgdmFyIGF0dGFjaFRvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihnbG9iYWwpO1xuICAgIGF0dGFjaFRvID0gYXR0YWNoVG8gJiYgYXR0YWNoVG8uc2V0VGltZW91dCA/IGF0dGFjaFRvIDogZ2xvYmFsO1xuXG4gICAgLy8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBlLmcuIGJyb3dzZXJpZnkgZW52aXJvbm1lbnRzLlxuICAgIGlmICh7fS50b1N0cmluZy5jYWxsKGdsb2JhbC5wcm9jZXNzKSA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCIpIHtcbiAgICAgICAgLy8gRm9yIE5vZGUuanMgYmVmb3JlIDAuOVxuICAgICAgICBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChjYW5Vc2VQb3N0TWVzc2FnZSgpKSB7XG4gICAgICAgIC8vIEZvciBub24tSUUxMCBtb2Rlcm4gYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZ2xvYmFsLk1lc3NhZ2VDaGFubmVsKSB7XG4gICAgICAgIC8vIEZvciB3ZWIgd29ya2Vycywgd2hlcmUgc3VwcG9ydGVkXG4gICAgICAgIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGRvYyAmJiBcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiIGluIGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKSB7XG4gICAgICAgIC8vIEZvciBJRSA24oCTOFxuICAgICAgICBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igb2xkZXIgYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpO1xuICAgIH1cblxuICAgIGF0dGFjaFRvLnNldEltbWVkaWF0ZSA9IHNldEltbWVkaWF0ZTtcbiAgICBhdHRhY2hUby5jbGVhckltbWVkaWF0ZSA9IGNsZWFySW1tZWRpYXRlO1xufSh0eXBlb2Ygc2VsZiA9PT0gXCJ1bmRlZmluZWRcIiA/IHR5cGVvZiBnbG9iYWwgPT09IFwidW5kZWZpbmVkXCIgPyB0aGlzIDogZ2xvYmFsIDogc2VsZikpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanNcbi8vIG1vZHVsZSBpZCA9IDE0OFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxubW9kdWxlLmV4cG9ydHMgPSBTdHJlYW07XG5cbnZhciBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmluaGVyaXRzKFN0cmVhbSwgRUUpO1xuU3RyZWFtLlJlYWRhYmxlID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL3JlYWRhYmxlLmpzJyk7XG5TdHJlYW0uV3JpdGFibGUgPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0vd3JpdGFibGUuanMnKTtcblN0cmVhbS5EdXBsZXggPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0vZHVwbGV4LmpzJyk7XG5TdHJlYW0uVHJhbnNmb3JtID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL3RyYW5zZm9ybS5qcycpO1xuU3RyZWFtLlBhc3NUaHJvdWdoID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL3Bhc3N0aHJvdWdoLmpzJyk7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuNC54XG5TdHJlYW0uU3RyZWFtID0gU3RyZWFtO1xuXG5cblxuLy8gb2xkLXN0eWxlIHN0cmVhbXMuICBOb3RlIHRoYXQgdGhlIHBpcGUgbWV0aG9kICh0aGUgb25seSByZWxldmFudFxuLy8gcGFydCBvZiB0aGlzIGNsYXNzKSBpcyBvdmVycmlkZGVuIGluIHRoZSBSZWFkYWJsZSBjbGFzcy5cblxuZnVuY3Rpb24gU3RyZWFtKCkge1xuICBFRS5jYWxsKHRoaXMpO1xufVxuXG5TdHJlYW0ucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbihkZXN0LCBvcHRpb25zKSB7XG4gIHZhciBzb3VyY2UgPSB0aGlzO1xuXG4gIGZ1bmN0aW9uIG9uZGF0YShjaHVuaykge1xuICAgIGlmIChkZXN0LndyaXRhYmxlKSB7XG4gICAgICBpZiAoZmFsc2UgPT09IGRlc3Qud3JpdGUoY2h1bmspICYmIHNvdXJjZS5wYXVzZSkge1xuICAgICAgICBzb3VyY2UucGF1c2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzb3VyY2Uub24oJ2RhdGEnLCBvbmRhdGEpO1xuXG4gIGZ1bmN0aW9uIG9uZHJhaW4oKSB7XG4gICAgaWYgKHNvdXJjZS5yZWFkYWJsZSAmJiBzb3VyY2UucmVzdW1lKSB7XG4gICAgICBzb3VyY2UucmVzdW1lKCk7XG4gICAgfVxuICB9XG5cbiAgZGVzdC5vbignZHJhaW4nLCBvbmRyYWluKTtcblxuICAvLyBJZiB0aGUgJ2VuZCcgb3B0aW9uIGlzIG5vdCBzdXBwbGllZCwgZGVzdC5lbmQoKSB3aWxsIGJlIGNhbGxlZCB3aGVuXG4gIC8vIHNvdXJjZSBnZXRzIHRoZSAnZW5kJyBvciAnY2xvc2UnIGV2ZW50cy4gIE9ubHkgZGVzdC5lbmQoKSBvbmNlLlxuICBpZiAoIWRlc3QuX2lzU3RkaW8gJiYgKCFvcHRpb25zIHx8IG9wdGlvbnMuZW5kICE9PSBmYWxzZSkpIHtcbiAgICBzb3VyY2Uub24oJ2VuZCcsIG9uZW5kKTtcbiAgICBzb3VyY2Uub24oJ2Nsb3NlJywgb25jbG9zZSk7XG4gIH1cblxuICB2YXIgZGlkT25FbmQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgaWYgKGRpZE9uRW5kKSByZXR1cm47XG4gICAgZGlkT25FbmQgPSB0cnVlO1xuXG4gICAgZGVzdC5lbmQoKTtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBpZiAoZGlkT25FbmQpIHJldHVybjtcbiAgICBkaWRPbkVuZCA9IHRydWU7XG5cbiAgICBpZiAodHlwZW9mIGRlc3QuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgZGVzdC5kZXN0cm95KCk7XG4gIH1cblxuICAvLyBkb24ndCBsZWF2ZSBkYW5nbGluZyBwaXBlcyB3aGVuIHRoZXJlIGFyZSBlcnJvcnMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBjbGVhbnVwKCk7XG4gICAgaWYgKEVFLmxpc3RlbmVyQ291bnQodGhpcywgJ2Vycm9yJykgPT09IDApIHtcbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgc3RyZWFtIGVycm9yIGluIHBpcGUuXG4gICAgfVxuICB9XG5cbiAgc291cmNlLm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuICBkZXN0Lm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuXG4gIC8vIHJlbW92ZSBhbGwgdGhlIGV2ZW50IGxpc3RlbmVycyB0aGF0IHdlcmUgYWRkZWQuXG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25kYXRhKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pO1xuXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG5cbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIGNsZWFudXApO1xuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBjbGVhbnVwKTtcblxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgY2xlYW51cCk7XG4gIH1cblxuICBzb3VyY2Uub24oJ2VuZCcsIGNsZWFudXApO1xuICBzb3VyY2Uub24oJ2Nsb3NlJywgY2xlYW51cCk7XG5cbiAgZGVzdC5vbignY2xvc2UnLCBjbGVhbnVwKTtcblxuICBkZXN0LmVtaXQoJ3BpcGUnLCBzb3VyY2UpO1xuXG4gIC8vIEFsbG93IGZvciB1bml4LWxpa2UgdXNhZ2U6IEEucGlwZShCKS5waXBlKEMpXG4gIHJldHVybiBkZXN0O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9zdHJlYW0tYnJvd3NlcmlmeS9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMTQ5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQSBtaWRpIG5vdGUgbnVtYmVyIGlzIGEgbnVtYmVyIHJlcHJlc2VudGF0aW9uIG9mIGEgbm90ZSBwaXRjaC4gSXQgY2FuIGJlXG4gKiBpbnRlZ2VycyBzbyBpdCdzIGVxdWFsIHRlbXBlcmVkIHR1bmVkLCBvciBmbG9hdCB0byBpbmRpY2F0ZSBpdCdzIG5vdFxuICogdHVuZWQgaW50byBlcXVhbCB0ZW1lcGVyZWQgc2NhbGUuXG4gKlxuICogVGhpcyBtb2R1bGUgY29udGFpbnMgZnVuY3Rpb25zIHRvIGNvbnZlcnQgdG8gYW5kIGZyb20gbWlkaSBub3Rlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIG1pZGkgPSByZXF1aXJlKCd0b25hbC1taWRpJylcbiAqIG1pZGkudG9NaWRpKCdBNCcpIC8vID0+IDY5XG4gKiBtaWRpLm5vdGUoNjkpIC8vID0+ICdBNCdcbiAqIG1pZGkubm90ZSg2MSkgLy8gPT4gJ0RiNCdcbiAqIG1pZGkubm90ZSg2MSwgdHJ1ZSkgLy8gPT4gJ0MjNCdcbiAqXG4gKiBAbW9kdWxlIG1pZGlcbiAqL1xuXG5pbXBvcnQgeyBtaWRpIH0gZnJvbSAnbm90ZS1wYXJzZXInXG5cbi8qKlxuICogQ29udmVydCB0aGUgZ2l2ZW4gbm90ZSB0byBhIG1pZGkgbm90ZSBudW1iZXIuIElmIHlvdSBwYXNzIGEgbWlkaSBudW1iZXIgaXRcbiAqIHdpbGwgcmV0dXJuZWQgYXMgaXMuXG4gKlxuICogQHBhcmFtIHtBcnJheXxTdHJpbmd8TnVtYmVyfSBub3RlIC0gdGhlIG5vdGUgdG8gZ2V0IHRoZSBtaWRpIG51bWJlciBmcm9tXG4gKiBAcmV0dXJuIHtJbnRlZ2VyfSB0aGUgbWlkaSBudW1iZXIgb3IgbnVsbCBpZiBub3QgdmFsaWQgcGl0Y2hcbiAqIEBleGFtcGxlXG4gKiBtaWRpLnRvTWlkaSgnQzQnKSAvLyA9PiA2MFxuICogbWlkaS50b01pZGkoNjApIC8vID0+IDYwXG4gKiBtaWRpLnRvTWlkaSgnNjAnKSAvLyA9PiA2MFxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9NaWRpICh2YWwpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSAmJiB2YWwubGVuZ3RoID09PSAyKSByZXR1cm4gdmFsWzBdICogNyArIHZhbFsxXSAqIDEyICsgMTJcbiAgcmV0dXJuIG1pZGkodmFsKVxufVxuXG52YXIgRkxBVFMgPSAnQyBEYiBEIEViIEUgRiBHYiBHIEFiIEEgQmIgQicuc3BsaXQoJyAnKVxudmFyIFNIQVJQUyA9ICdDIEMjIEQgRCMgRSBGIEYjIEcgRyMgQSBBIyBCJy5zcGxpdCgnICcpXG5cbi8qKlxuICogR2l2ZW4gYSBtaWRpIG51bWJlciwgcmV0dXJucyBhIG5vdGUgbmFtZS4gVGhlIGFsdGVyZWQgbm90ZXMgd2lsbCBoYXZlXG4gKiBmbGF0cyB1bmxlc3MgZXhwbGljaXRseSBzZXQgd2l0aCB0aGUgb3B0aW9uYWwgYHVzZVNoYXJwc2AgcGFyYW1ldGVyLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtJbnRlZ2VyfSBtaWRpIC0gdGhlIG1pZGkgbm90ZSBudW1iZXJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gdXNlU2hhcnBzIC0gKE9wdGlvbmFsKSBzZXQgdG8gdHJ1ZSB0byB1c2Ugc2hhcnBzIGluc3RlYWQgb2YgZmxhdHNcbiAqIEByZXR1cm4ge1N0cmluZ30gdGhlIG5vdGUgbmFtZVxuICogQGV4YW1wbGVcbiAqIHZhciBtaWRpID0gcmVxdWlyZSgndG9uYWwtbWlkaScpXG4gKiBtaWRpLm5vdGUoNjEpIC8vID0+ICdEYjQnXG4gKiBtaWRpLm5vdGUoNjEsIHRydWUpIC8vID0+ICdDIzQnXG4gKiAvLyBpdCByb3VuZHMgdG8gbmVhcmVzdCBub3RlXG4gKiBtaWRpLm5vdGUoNjEuNykgLy8gPT4gJ0Q0J1xuICovXG5leHBvcnQgZnVuY3Rpb24gbm90ZSAobnVtLCBzaGFycHMpIHtcbiAgaWYgKG51bSA9PT0gdHJ1ZSB8fCBudW0gPT09IGZhbHNlKSByZXR1cm4gZnVuY3Rpb24gKG0pIHsgcmV0dXJuIG5vdGUobSwgbnVtKSB9XG4gIG51bSA9IE1hdGgucm91bmQobnVtKVxuICB2YXIgcGNzID0gc2hhcnBzID09PSB0cnVlID8gU0hBUlBTIDogRkxBVFNcbiAgdmFyIHBjID0gcGNzW251bSAlIDEyXVxuICB2YXIgbyA9IE1hdGguZmxvb3IobnVtIC8gMTIpIC0gMVxuICByZXR1cm4gcGMgKyBvXG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdG9uYWwtbWlkaS9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMTUwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIlxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlcHJlY2F0ZTtcblxuLyoqXG4gKiBNYXJrIHRoYXQgYSBtZXRob2Qgc2hvdWxkIG5vdCBiZSB1c2VkLlxuICogUmV0dXJucyBhIG1vZGlmaWVkIGZ1bmN0aW9uIHdoaWNoIHdhcm5zIG9uY2UgYnkgZGVmYXVsdC5cbiAqXG4gKiBJZiBgbG9jYWxTdG9yYWdlLm5vRGVwcmVjYXRpb24gPSB0cnVlYCBpcyBzZXQsIHRoZW4gaXQgaXMgYSBuby1vcC5cbiAqXG4gKiBJZiBgbG9jYWxTdG9yYWdlLnRocm93RGVwcmVjYXRpb24gPSB0cnVlYCBpcyBzZXQsIHRoZW4gZGVwcmVjYXRlZCBmdW5jdGlvbnNcbiAqIHdpbGwgdGhyb3cgYW4gRXJyb3Igd2hlbiBpbnZva2VkLlxuICpcbiAqIElmIGBsb2NhbFN0b3JhZ2UudHJhY2VEZXByZWNhdGlvbiA9IHRydWVgIGlzIHNldCwgdGhlbiBkZXByZWNhdGVkIGZ1bmN0aW9uc1xuICogd2lsbCBpbnZva2UgYGNvbnNvbGUudHJhY2UoKWAgaW5zdGVhZCBvZiBgY29uc29sZS5lcnJvcigpYC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIHRoZSBmdW5jdGlvbiB0byBkZXByZWNhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgLSB0aGUgc3RyaW5nIHRvIHByaW50IHRvIHRoZSBjb25zb2xlIHdoZW4gYGZuYCBpcyBpbnZva2VkXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IGEgbmV3IFwiZGVwcmVjYXRlZFwiIHZlcnNpb24gb2YgYGZuYFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBkZXByZWNhdGUgKGZuLCBtc2cpIHtcbiAgaWYgKGNvbmZpZygnbm9EZXByZWNhdGlvbicpKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgIGlmICghd2FybmVkKSB7XG4gICAgICBpZiAoY29uZmlnKCd0aHJvd0RlcHJlY2F0aW9uJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZygndHJhY2VEZXByZWNhdGlvbicpKSB7XG4gICAgICAgIGNvbnNvbGUudHJhY2UobXNnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2Fybihtc2cpO1xuICAgICAgfVxuICAgICAgd2FybmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gZGVwcmVjYXRlZDtcbn1cblxuLyoqXG4gKiBDaGVja3MgYGxvY2FsU3RvcmFnZWAgZm9yIGJvb2xlYW4gdmFsdWVzIGZvciB0aGUgZ2l2ZW4gYG5hbWVgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNvbmZpZyAobmFtZSkge1xuICAvLyBhY2Nlc3NpbmcgZ2xvYmFsLmxvY2FsU3RvcmFnZSBjYW4gdHJpZ2dlciBhIERPTUV4Y2VwdGlvbiBpbiBzYW5kYm94ZWQgaWZyYW1lc1xuICB0cnkge1xuICAgIGlmICghZ2xvYmFsLmxvY2FsU3RvcmFnZSkgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB2YWwgPSBnbG9iYWwubG9jYWxTdG9yYWdlW25hbWVdO1xuICBpZiAobnVsbCA9PSB2YWwpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIFN0cmluZyh2YWwpLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJztcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi91dGlsLWRlcHJlY2F0ZS9icm93c2VyLmpzXG4vLyBtb2R1bGUgaWQgPSAxNTFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICB9XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdXRpbC9+L2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IDE1MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQnVmZmVyKGFyZykge1xuICByZXR1cm4gYXJnICYmIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnXG4gICAgJiYgdHlwZW9mIGFyZy5jb3B5ID09PSAnZnVuY3Rpb24nXG4gICAgJiYgdHlwZW9mIGFyZy5maWxsID09PSAnZnVuY3Rpb24nXG4gICAgJiYgdHlwZW9mIGFyZy5yZWFkVUludDggPT09ICdmdW5jdGlvbic7XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3V0aWwvc3VwcG9ydC9pc0J1ZmZlckJyb3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IDE1M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIGZvcm1hdFJlZ0V4cCA9IC8lW3NkaiVdL2c7XG5leHBvcnRzLmZvcm1hdCA9IGZ1bmN0aW9uKGYpIHtcbiAgaWYgKCFpc1N0cmluZyhmKSkge1xuICAgIHZhciBvYmplY3RzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9iamVjdHMucHVzaChpbnNwZWN0KGFyZ3VtZW50c1tpXSkpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0cy5qb2luKCcgJyk7XG4gIH1cblxuICB2YXIgaSA9IDE7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBzdHIgPSBTdHJpbmcoZikucmVwbGFjZShmb3JtYXRSZWdFeHAsIGZ1bmN0aW9uKHgpIHtcbiAgICBpZiAoeCA9PT0gJyUlJykgcmV0dXJuICclJztcbiAgICBpZiAoaSA+PSBsZW4pIHJldHVybiB4O1xuICAgIHN3aXRjaCAoeCkge1xuICAgICAgY2FzZSAnJXMnOiByZXR1cm4gU3RyaW5nKGFyZ3NbaSsrXSk7XG4gICAgICBjYXNlICclZCc6IHJldHVybiBOdW1iZXIoYXJnc1tpKytdKTtcbiAgICAgIGNhc2UgJyVqJzpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJnc1tpKytdKTtcbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIHJldHVybiAnW0NpcmN1bGFyXSc7XG4gICAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgfSk7XG4gIGZvciAodmFyIHggPSBhcmdzW2ldOyBpIDwgbGVuOyB4ID0gYXJnc1srK2ldKSB7XG4gICAgaWYgKGlzTnVsbCh4KSB8fCAhaXNPYmplY3QoeCkpIHtcbiAgICAgIHN0ciArPSAnICcgKyB4O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgKz0gJyAnICsgaW5zcGVjdCh4KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn07XG5cblxuLy8gTWFyayB0aGF0IGEgbWV0aG9kIHNob3VsZCBub3QgYmUgdXNlZC5cbi8vIFJldHVybnMgYSBtb2RpZmllZCBmdW5jdGlvbiB3aGljaCB3YXJucyBvbmNlIGJ5IGRlZmF1bHQuXG4vLyBJZiAtLW5vLWRlcHJlY2F0aW9uIGlzIHNldCwgdGhlbiBpdCBpcyBhIG5vLW9wLlxuZXhwb3J0cy5kZXByZWNhdGUgPSBmdW5jdGlvbihmbiwgbXNnKSB7XG4gIC8vIEFsbG93IGZvciBkZXByZWNhdGluZyB0aGluZ3MgaW4gdGhlIHByb2Nlc3Mgb2Ygc3RhcnRpbmcgdXAuXG4gIGlmIChpc1VuZGVmaW5lZChnbG9iYWwucHJvY2VzcykpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZXhwb3J0cy5kZXByZWNhdGUoZm4sIG1zZykuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKHByb2Nlc3Mubm9EZXByZWNhdGlvbiA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gZGVwcmVjYXRlZCgpIHtcbiAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgaWYgKHByb2Nlc3MudGhyb3dEZXByZWNhdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy50cmFjZURlcHJlY2F0aW9uKSB7XG4gICAgICAgIGNvbnNvbGUudHJhY2UobXNnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobXNnKTtcbiAgICAgIH1cbiAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIGRlcHJlY2F0ZWQ7XG59O1xuXG5cbnZhciBkZWJ1Z3MgPSB7fTtcbnZhciBkZWJ1Z0Vudmlyb247XG5leHBvcnRzLmRlYnVnbG9nID0gZnVuY3Rpb24oc2V0KSB7XG4gIGlmIChpc1VuZGVmaW5lZChkZWJ1Z0Vudmlyb24pKVxuICAgIGRlYnVnRW52aXJvbiA9IHByb2Nlc3MuZW52Lk5PREVfREVCVUcgfHwgJyc7XG4gIHNldCA9IHNldC50b1VwcGVyQ2FzZSgpO1xuICBpZiAoIWRlYnVnc1tzZXRdKSB7XG4gICAgaWYgKG5ldyBSZWdFeHAoJ1xcXFxiJyArIHNldCArICdcXFxcYicsICdpJykudGVzdChkZWJ1Z0Vudmlyb24pKSB7XG4gICAgICB2YXIgcGlkID0gcHJvY2Vzcy5waWQ7XG4gICAgICBkZWJ1Z3Nbc2V0XSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbXNnID0gZXhwb3J0cy5mb3JtYXQuYXBwbHkoZXhwb3J0cywgYXJndW1lbnRzKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignJXMgJWQ6ICVzJywgc2V0LCBwaWQsIG1zZyk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1Z3Nbc2V0XSA9IGZ1bmN0aW9uKCkge307XG4gICAgfVxuICB9XG4gIHJldHVybiBkZWJ1Z3Nbc2V0XTtcbn07XG5cblxuLyoqXG4gKiBFY2hvcyB0aGUgdmFsdWUgb2YgYSB2YWx1ZS4gVHJ5cyB0byBwcmludCB0aGUgdmFsdWUgb3V0XG4gKiBpbiB0aGUgYmVzdCB3YXkgcG9zc2libGUgZ2l2ZW4gdGhlIGRpZmZlcmVudCB0eXBlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gcHJpbnQgb3V0LlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uYWwgb3B0aW9ucyBvYmplY3QgdGhhdCBhbHRlcnMgdGhlIG91dHB1dC5cbiAqL1xuLyogbGVnYWN5OiBvYmosIHNob3dIaWRkZW4sIGRlcHRoLCBjb2xvcnMqL1xuZnVuY3Rpb24gaW5zcGVjdChvYmosIG9wdHMpIHtcbiAgLy8gZGVmYXVsdCBvcHRpb25zXG4gIHZhciBjdHggPSB7XG4gICAgc2VlbjogW10sXG4gICAgc3R5bGl6ZTogc3R5bGl6ZU5vQ29sb3JcbiAgfTtcbiAgLy8gbGVnYWN5Li4uXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDMpIGN0eC5kZXB0aCA9IGFyZ3VtZW50c1syXTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gNCkgY3R4LmNvbG9ycyA9IGFyZ3VtZW50c1szXTtcbiAgaWYgKGlzQm9vbGVhbihvcHRzKSkge1xuICAgIC8vIGxlZ2FjeS4uLlxuICAgIGN0eC5zaG93SGlkZGVuID0gb3B0cztcbiAgfSBlbHNlIGlmIChvcHRzKSB7XG4gICAgLy8gZ290IGFuIFwib3B0aW9uc1wiIG9iamVjdFxuICAgIGV4cG9ydHMuX2V4dGVuZChjdHgsIG9wdHMpO1xuICB9XG4gIC8vIHNldCBkZWZhdWx0IG9wdGlvbnNcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5zaG93SGlkZGVuKSkgY3R4LnNob3dIaWRkZW4gPSBmYWxzZTtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5kZXB0aCkpIGN0eC5kZXB0aCA9IDI7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguY29sb3JzKSkgY3R4LmNvbG9ycyA9IGZhbHNlO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmN1c3RvbUluc3BlY3QpKSBjdHguY3VzdG9tSW5zcGVjdCA9IHRydWU7XG4gIGlmIChjdHguY29sb3JzKSBjdHguc3R5bGl6ZSA9IHN0eWxpemVXaXRoQ29sb3I7XG4gIHJldHVybiBmb3JtYXRWYWx1ZShjdHgsIG9iaiwgY3R4LmRlcHRoKTtcbn1cbmV4cG9ydHMuaW5zcGVjdCA9IGluc3BlY3Q7XG5cblxuLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BTlNJX2VzY2FwZV9jb2RlI2dyYXBoaWNzXG5pbnNwZWN0LmNvbG9ycyA9IHtcbiAgJ2JvbGQnIDogWzEsIDIyXSxcbiAgJ2l0YWxpYycgOiBbMywgMjNdLFxuICAndW5kZXJsaW5lJyA6IFs0LCAyNF0sXG4gICdpbnZlcnNlJyA6IFs3LCAyN10sXG4gICd3aGl0ZScgOiBbMzcsIDM5XSxcbiAgJ2dyZXknIDogWzkwLCAzOV0sXG4gICdibGFjaycgOiBbMzAsIDM5XSxcbiAgJ2JsdWUnIDogWzM0LCAzOV0sXG4gICdjeWFuJyA6IFszNiwgMzldLFxuICAnZ3JlZW4nIDogWzMyLCAzOV0sXG4gICdtYWdlbnRhJyA6IFszNSwgMzldLFxuICAncmVkJyA6IFszMSwgMzldLFxuICAneWVsbG93JyA6IFszMywgMzldXG59O1xuXG4vLyBEb24ndCB1c2UgJ2JsdWUnIG5vdCB2aXNpYmxlIG9uIGNtZC5leGVcbmluc3BlY3Quc3R5bGVzID0ge1xuICAnc3BlY2lhbCc6ICdjeWFuJyxcbiAgJ251bWJlcic6ICd5ZWxsb3cnLFxuICAnYm9vbGVhbic6ICd5ZWxsb3cnLFxuICAndW5kZWZpbmVkJzogJ2dyZXknLFxuICAnbnVsbCc6ICdib2xkJyxcbiAgJ3N0cmluZyc6ICdncmVlbicsXG4gICdkYXRlJzogJ21hZ2VudGEnLFxuICAvLyBcIm5hbWVcIjogaW50ZW50aW9uYWxseSBub3Qgc3R5bGluZ1xuICAncmVnZXhwJzogJ3JlZCdcbn07XG5cblxuZnVuY3Rpb24gc3R5bGl6ZVdpdGhDb2xvcihzdHIsIHN0eWxlVHlwZSkge1xuICB2YXIgc3R5bGUgPSBpbnNwZWN0LnN0eWxlc1tzdHlsZVR5cGVdO1xuXG4gIGlmIChzdHlsZSkge1xuICAgIHJldHVybiAnXFx1MDAxYlsnICsgaW5zcGVjdC5jb2xvcnNbc3R5bGVdWzBdICsgJ20nICsgc3RyICtcbiAgICAgICAgICAgJ1xcdTAwMWJbJyArIGluc3BlY3QuY29sb3JzW3N0eWxlXVsxXSArICdtJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG59XG5cblxuZnVuY3Rpb24gc3R5bGl6ZU5vQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgcmV0dXJuIHN0cjtcbn1cblxuXG5mdW5jdGlvbiBhcnJheVRvSGFzaChhcnJheSkge1xuICB2YXIgaGFzaCA9IHt9O1xuXG4gIGFycmF5LmZvckVhY2goZnVuY3Rpb24odmFsLCBpZHgpIHtcbiAgICBoYXNoW3ZhbF0gPSB0cnVlO1xuICB9KTtcblxuICByZXR1cm4gaGFzaDtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRWYWx1ZShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMpIHtcbiAgLy8gUHJvdmlkZSBhIGhvb2sgZm9yIHVzZXItc3BlY2lmaWVkIGluc3BlY3QgZnVuY3Rpb25zLlxuICAvLyBDaGVjayB0aGF0IHZhbHVlIGlzIGFuIG9iamVjdCB3aXRoIGFuIGluc3BlY3QgZnVuY3Rpb24gb24gaXRcbiAgaWYgKGN0eC5jdXN0b21JbnNwZWN0ICYmXG4gICAgICB2YWx1ZSAmJlxuICAgICAgaXNGdW5jdGlvbih2YWx1ZS5pbnNwZWN0KSAmJlxuICAgICAgLy8gRmlsdGVyIG91dCB0aGUgdXRpbCBtb2R1bGUsIGl0J3MgaW5zcGVjdCBmdW5jdGlvbiBpcyBzcGVjaWFsXG4gICAgICB2YWx1ZS5pbnNwZWN0ICE9PSBleHBvcnRzLmluc3BlY3QgJiZcbiAgICAgIC8vIEFsc28gZmlsdGVyIG91dCBhbnkgcHJvdG90eXBlIG9iamVjdHMgdXNpbmcgdGhlIGNpcmN1bGFyIGNoZWNrLlxuICAgICAgISh2YWx1ZS5jb25zdHJ1Y3RvciAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgPT09IHZhbHVlKSkge1xuICAgIHZhciByZXQgPSB2YWx1ZS5pbnNwZWN0KHJlY3Vyc2VUaW1lcywgY3R4KTtcbiAgICBpZiAoIWlzU3RyaW5nKHJldCkpIHtcbiAgICAgIHJldCA9IGZvcm1hdFZhbHVlKGN0eCwgcmV0LCByZWN1cnNlVGltZXMpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLy8gUHJpbWl0aXZlIHR5cGVzIGNhbm5vdCBoYXZlIHByb3BlcnRpZXNcbiAgdmFyIHByaW1pdGl2ZSA9IGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKTtcbiAgaWYgKHByaW1pdGl2ZSkge1xuICAgIHJldHVybiBwcmltaXRpdmU7XG4gIH1cblxuICAvLyBMb29rIHVwIHRoZSBrZXlzIG9mIHRoZSBvYmplY3QuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpO1xuICB2YXIgdmlzaWJsZUtleXMgPSBhcnJheVRvSGFzaChrZXlzKTtcblxuICBpZiAoY3R4LnNob3dIaWRkZW4pIHtcbiAgICBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUpO1xuICB9XG5cbiAgLy8gSUUgZG9lc24ndCBtYWtlIGVycm9yIGZpZWxkcyBub24tZW51bWVyYWJsZVxuICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvZHd3NTJzYnQodj12cy45NCkuYXNweFxuICBpZiAoaXNFcnJvcih2YWx1ZSlcbiAgICAgICYmIChrZXlzLmluZGV4T2YoJ21lc3NhZ2UnKSA+PSAwIHx8IGtleXMuaW5kZXhPZignZGVzY3JpcHRpb24nKSA+PSAwKSkge1xuICAgIHJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gIH1cblxuICAvLyBTb21lIHR5cGUgb2Ygb2JqZWN0IHdpdGhvdXQgcHJvcGVydGllcyBjYW4gYmUgc2hvcnRjdXR0ZWQuXG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgdmFyIG5hbWUgPSB2YWx1ZS5uYW1lID8gJzogJyArIHZhbHVlLm5hbWUgOiAnJztcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZSgnW0Z1bmN0aW9uJyArIG5hbWUgKyAnXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICAgIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAncmVnZXhwJyk7XG4gICAgfVxuICAgIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdkYXRlJyk7XG4gICAgfVxuICAgIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgYmFzZSA9ICcnLCBhcnJheSA9IGZhbHNlLCBicmFjZXMgPSBbJ3snLCAnfSddO1xuXG4gIC8vIE1ha2UgQXJyYXkgc2F5IHRoYXQgdGhleSBhcmUgQXJyYXlcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgYXJyYXkgPSB0cnVlO1xuICAgIGJyYWNlcyA9IFsnWycsICddJ107XG4gIH1cblxuICAvLyBNYWtlIGZ1bmN0aW9ucyBzYXkgdGhhdCB0aGV5IGFyZSBmdW5jdGlvbnNcbiAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgdmFyIG4gPSB2YWx1ZS5uYW1lID8gJzogJyArIHZhbHVlLm5hbWUgOiAnJztcbiAgICBiYXNlID0gJyBbRnVuY3Rpb24nICsgbiArICddJztcbiAgfVxuXG4gIC8vIE1ha2UgUmVnRXhwcyBzYXkgdGhhdCB0aGV5IGFyZSBSZWdFeHBzXG4gIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgfVxuXG4gIC8vIE1ha2UgZGF0ZXMgd2l0aCBwcm9wZXJ0aWVzIGZpcnN0IHNheSB0aGUgZGF0ZVxuICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgfVxuXG4gIC8vIE1ha2UgZXJyb3Igd2l0aCBtZXNzYWdlIGZpcnN0IHNheSB0aGUgZXJyb3JcbiAgaWYgKGlzRXJyb3IodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCAmJiAoIWFycmF5IHx8IHZhbHVlLmxlbmd0aCA9PSAwKSkge1xuICAgIHJldHVybiBicmFjZXNbMF0gKyBiYXNlICsgYnJhY2VzWzFdO1xuICB9XG5cbiAgaWYgKHJlY3Vyc2VUaW1lcyA8IDApIHtcbiAgICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ3JlZ2V4cCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ1tPYmplY3RdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cblxuICBjdHguc2Vlbi5wdXNoKHZhbHVlKTtcblxuICB2YXIgb3V0cHV0O1xuICBpZiAoYXJyYXkpIHtcbiAgICBvdXRwdXQgPSBmb3JtYXRBcnJheShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXlzKTtcbiAgfSBlbHNlIHtcbiAgICBvdXRwdXQgPSBrZXlzLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KTtcbiAgICB9KTtcbiAgfVxuXG4gIGN0eC5zZWVuLnBvcCgpO1xuXG4gIHJldHVybiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsIGJhc2UsIGJyYWNlcyk7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0UHJpbWl0aXZlKGN0eCwgdmFsdWUpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ3VuZGVmaW5lZCcsICd1bmRlZmluZWQnKTtcbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHZhciBzaW1wbGUgPSAnXFwnJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKS5yZXBsYWNlKC9eXCJ8XCIkL2csICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKSArICdcXCcnO1xuICAgIHJldHVybiBjdHguc3R5bGl6ZShzaW1wbGUsICdzdHJpbmcnKTtcbiAgfVxuICBpZiAoaXNOdW1iZXIodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnJyArIHZhbHVlLCAnbnVtYmVyJyk7XG4gIGlmIChpc0Jvb2xlYW4odmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnJyArIHZhbHVlLCAnYm9vbGVhbicpO1xuICAvLyBGb3Igc29tZSByZWFzb24gdHlwZW9mIG51bGwgaXMgXCJvYmplY3RcIiwgc28gc3BlY2lhbCBjYXNlIGhlcmUuXG4gIGlmIChpc051bGwodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnbnVsbCcsICdudWxsJyk7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0RXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuICdbJyArIEVycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSArICddJztcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRBcnJheShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXlzKSB7XG4gIHZhciBvdXRwdXQgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkodmFsdWUsIFN0cmluZyhpKSkpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsXG4gICAgICAgICAgU3RyaW5nKGkpLCB0cnVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dC5wdXNoKCcnKTtcbiAgICB9XG4gIH1cbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgIGlmICgha2V5Lm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgb3V0cHV0LnB1c2goZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cyxcbiAgICAgICAgICBrZXksIHRydWUpKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3V0cHV0O1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgYXJyYXkpIHtcbiAgdmFyIG5hbWUsIHN0ciwgZGVzYztcbiAgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodmFsdWUsIGtleSkgfHwgeyB2YWx1ZTogdmFsdWVba2V5XSB9O1xuICBpZiAoZGVzYy5nZXQpIHtcbiAgICBpZiAoZGVzYy5zZXQpIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbR2V0dGVyL1NldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoZGVzYy5zZXQpIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbU2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG4gIGlmICghaGFzT3duUHJvcGVydHkodmlzaWJsZUtleXMsIGtleSkpIHtcbiAgICBuYW1lID0gJ1snICsga2V5ICsgJ10nO1xuICB9XG4gIGlmICghc3RyKSB7XG4gICAgaWYgKGN0eC5zZWVuLmluZGV4T2YoZGVzYy52YWx1ZSkgPCAwKSB7XG4gICAgICBpZiAoaXNOdWxsKHJlY3Vyc2VUaW1lcykpIHtcbiAgICAgICAgc3RyID0gZm9ybWF0VmFsdWUoY3R4LCBkZXNjLnZhbHVlLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgcmVjdXJzZVRpbWVzIC0gMSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyLmluZGV4T2YoJ1xcbicpID4gLTEpIHtcbiAgICAgICAgaWYgKGFycmF5KSB7XG4gICAgICAgICAgc3RyID0gc3RyLnNwbGl0KCdcXG4nKS5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICcgICcgKyBsaW5lO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpLnN1YnN0cigyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHIgPSAnXFxuJyArIHN0ci5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAgJyArIGxpbmU7XG4gICAgICAgICAgfSkuam9pbignXFxuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tDaXJjdWxhcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuICBpZiAoaXNVbmRlZmluZWQobmFtZSkpIHtcbiAgICBpZiAoYXJyYXkgJiYga2V5Lm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgbmFtZSA9IEpTT04uc3RyaW5naWZ5KCcnICsga2V5KTtcbiAgICBpZiAobmFtZS5tYXRjaCgvXlwiKFthLXpBLVpfXVthLXpBLVpfMC05XSopXCIkLykpIHtcbiAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cigxLCBuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgbmFtZSA9IGN0eC5zdHlsaXplKG5hbWUsICduYW1lJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKVxuICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFwiL2csICdcIicpXG4gICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oXlwifFwiJCkvZywgXCInXCIpO1xuICAgICAgbmFtZSA9IGN0eC5zdHlsaXplKG5hbWUsICdzdHJpbmcnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmFtZSArICc6ICcgKyBzdHI7XG59XG5cblxuZnVuY3Rpb24gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LCBiYXNlLCBicmFjZXMpIHtcbiAgdmFyIG51bUxpbmVzRXN0ID0gMDtcbiAgdmFyIGxlbmd0aCA9IG91dHB1dC5yZWR1Y2UoZnVuY3Rpb24ocHJldiwgY3VyKSB7XG4gICAgbnVtTGluZXNFc3QrKztcbiAgICBpZiAoY3VyLmluZGV4T2YoJ1xcbicpID49IDApIG51bUxpbmVzRXN0Kys7XG4gICAgcmV0dXJuIHByZXYgKyBjdXIucmVwbGFjZSgvXFx1MDAxYlxcW1xcZFxcZD9tL2csICcnKS5sZW5ndGggKyAxO1xuICB9LCAwKTtcblxuICBpZiAobGVuZ3RoID4gNjApIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICtcbiAgICAgICAgICAgKGJhc2UgPT09ICcnID8gJycgOiBiYXNlICsgJ1xcbiAnKSArXG4gICAgICAgICAgICcgJyArXG4gICAgICAgICAgIG91dHB1dC5qb2luKCcsXFxuICAnKSArXG4gICAgICAgICAgICcgJyArXG4gICAgICAgICAgIGJyYWNlc1sxXTtcbiAgfVxuXG4gIHJldHVybiBicmFjZXNbMF0gKyBiYXNlICsgJyAnICsgb3V0cHV0LmpvaW4oJywgJykgKyAnICcgKyBicmFjZXNbMV07XG59XG5cblxuLy8gTk9URTogVGhlc2UgdHlwZSBjaGVja2luZyBmdW5jdGlvbnMgaW50ZW50aW9uYWxseSBkb24ndCB1c2UgYGluc3RhbmNlb2ZgXG4vLyBiZWNhdXNlIGl0IGlzIGZyYWdpbGUgYW5kIGNhbiBiZSBlYXNpbHkgZmFrZWQgd2l0aCBgT2JqZWN0LmNyZWF0ZSgpYC5cbmZ1bmN0aW9uIGlzQXJyYXkoYXIpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXIpO1xufVxuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcblxuZnVuY3Rpb24gaXNCb29sZWFuKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nO1xufVxuZXhwb3J0cy5pc0Jvb2xlYW4gPSBpc0Jvb2xlYW47XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsID0gaXNOdWxsO1xuXG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGxPclVuZGVmaW5lZCA9IGlzTnVsbE9yVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuZXhwb3J0cy5pc051bWJlciA9IGlzTnVtYmVyO1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnO1xufVxuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuXG5mdW5jdGlvbiBpc1N5bWJvbChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnO1xufVxuZXhwb3J0cy5pc1N5bWJvbCA9IGlzU3ltYm9sO1xuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gdm9pZCAwO1xufVxuZXhwb3J0cy5pc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc1JlZ0V4cChyZSkge1xuICByZXR1cm4gaXNPYmplY3QocmUpICYmIG9iamVjdFRvU3RyaW5nKHJlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5leHBvcnRzLmlzUmVnRXhwID0gaXNSZWdFeHA7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuXG5mdW5jdGlvbiBpc0RhdGUoZCkge1xuICByZXR1cm4gaXNPYmplY3QoZCkgJiYgb2JqZWN0VG9TdHJpbmcoZCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cbmV4cG9ydHMuaXNEYXRlID0gaXNEYXRlO1xuXG5mdW5jdGlvbiBpc0Vycm9yKGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGUpICYmXG4gICAgICAob2JqZWN0VG9TdHJpbmcoZSkgPT09ICdbb2JqZWN0IEVycm9yXScgfHwgZSBpbnN0YW5jZW9mIEVycm9yKTtcbn1cbmV4cG9ydHMuaXNFcnJvciA9IGlzRXJyb3I7XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcblxuZnVuY3Rpb24gaXNQcmltaXRpdmUoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGwgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3ltYm9sJyB8fCAgLy8gRVM2IHN5bWJvbFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3VuZGVmaW5lZCc7XG59XG5leHBvcnRzLmlzUHJpbWl0aXZlID0gaXNQcmltaXRpdmU7XG5cbmV4cG9ydHMuaXNCdWZmZXIgPSByZXF1aXJlKCcuL3N1cHBvcnQvaXNCdWZmZXInKTtcblxuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuXG5cbmZ1bmN0aW9uIHBhZChuKSB7XG4gIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuLnRvU3RyaW5nKDEwKSA6IG4udG9TdHJpbmcoMTApO1xufVxuXG5cbnZhciBtb250aHMgPSBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJyxcbiAgICAgICAgICAgICAgJ09jdCcsICdOb3YnLCAnRGVjJ107XG5cbi8vIDI2IEZlYiAxNjoxOTozNFxuZnVuY3Rpb24gdGltZXN0YW1wKCkge1xuICB2YXIgZCA9IG5ldyBEYXRlKCk7XG4gIHZhciB0aW1lID0gW3BhZChkLmdldEhvdXJzKCkpLFxuICAgICAgICAgICAgICBwYWQoZC5nZXRNaW51dGVzKCkpLFxuICAgICAgICAgICAgICBwYWQoZC5nZXRTZWNvbmRzKCkpXS5qb2luKCc6Jyk7XG4gIHJldHVybiBbZC5nZXREYXRlKCksIG1vbnRoc1tkLmdldE1vbnRoKCldLCB0aW1lXS5qb2luKCcgJyk7XG59XG5cblxuLy8gbG9nIGlzIGp1c3QgYSB0aGluIHdyYXBwZXIgdG8gY29uc29sZS5sb2cgdGhhdCBwcmVwZW5kcyBhIHRpbWVzdGFtcFxuZXhwb3J0cy5sb2cgPSBmdW5jdGlvbigpIHtcbiAgY29uc29sZS5sb2coJyVzIC0gJXMnLCB0aW1lc3RhbXAoKSwgZXhwb3J0cy5mb3JtYXQuYXBwbHkoZXhwb3J0cywgYXJndW1lbnRzKSk7XG59O1xuXG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyLlxuICpcbiAqIFRoZSBGdW5jdGlvbi5wcm90b3R5cGUuaW5oZXJpdHMgZnJvbSBsYW5nLmpzIHJld3JpdHRlbiBhcyBhIHN0YW5kYWxvbmVcbiAqIGZ1bmN0aW9uIChub3Qgb24gRnVuY3Rpb24ucHJvdG90eXBlKS4gTk9URTogSWYgdGhpcyBmaWxlIGlzIHRvIGJlIGxvYWRlZFxuICogZHVyaW5nIGJvb3RzdHJhcHBpbmcgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSByZXdyaXR0ZW4gdXNpbmcgc29tZSBuYXRpdmVcbiAqIGZ1bmN0aW9ucyBhcyBwcm90b3R5cGUgc2V0dXAgdXNpbmcgbm9ybWFsIEphdmFTY3JpcHQgZG9lcyBub3Qgd29yayBhc1xuICogZXhwZWN0ZWQgZHVyaW5nIGJvb3RzdHJhcHBpbmcgKHNlZSBtaXJyb3IuanMgaW4gcjExNDkwMykuXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY3RvciBDb25zdHJ1Y3RvciBmdW5jdGlvbiB3aGljaCBuZWVkcyB0byBpbmhlcml0IHRoZVxuICogICAgIHByb3RvdHlwZS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ3RvciBDb25zdHJ1Y3RvciBmdW5jdGlvbiB0byBpbmhlcml0IHByb3RvdHlwZSBmcm9tLlxuICovXG5leHBvcnRzLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxuZXhwb3J0cy5fZXh0ZW5kID0gZnVuY3Rpb24ob3JpZ2luLCBhZGQpIHtcbiAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgYWRkIGlzbid0IGFuIG9iamVjdFxuICBpZiAoIWFkZCB8fCAhaXNPYmplY3QoYWRkKSkgcmV0dXJuIG9yaWdpbjtcblxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGFkZCk7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICBvcmlnaW5ba2V5c1tpXV0gPSBhZGRba2V5c1tpXV07XG4gIH1cbiAgcmV0dXJuIG9yaWdpbjtcbn07XG5cbmZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdXRpbC91dGlsLmpzXG4vLyBtb2R1bGUgaWQgPSAxNTRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLypcblxuV2ViTWlkaSB2Mi4yLjBcblxuV2ViTWlkaS5qcyBoZWxwcyB5b3UgdGFtZSB0aGUgV2ViIE1JREkgQVBJLiBTZW5kIGFuZCByZWNlaXZlIE1JREkgbWVzc2FnZXMgd2l0aCBlYXNlLiBDb250cm9sIGluc3RydW1lbnRzIHdpdGggdXNlci1mcmllbmRseSBmdW5jdGlvbnMgKHBsYXlOb3RlLCBzZW5kUGl0Y2hCZW5kLCBldGMuKS4gUmVhY3QgdG8gTUlESSBpbnB1dCB3aXRoIHNpbXBsZSBldmVudCBsaXN0ZW5lcnMgKG5vdGVvbiwgcGl0Y2hiZW5kLCBjb250cm9sY2hhbmdlLCBldGMuKS5cbmh0dHBzOi8vZ2l0aHViLmNvbS9kamlwY28vd2VibWlkaVxuXG5cblRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG5Db3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwgSmVhbi1QaGlsaXBwZSBDw7R0w6lcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZFxuYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbixcbmluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsXG5zdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWxcbnBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUXG5OT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFU1xuT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG5DT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4qL1xuXG4hZnVuY3Rpb24oc2NvcGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIFdlYk1pZGkoKXtpZihXZWJNaWRpLnByb3RvdHlwZS5fc2luZ2xldG9uKXRocm93IG5ldyBFcnJvcihcIldlYk1pZGkgaXMgYSBzaW5nbGV0b24sIGl0IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHkuXCIpO1dlYk1pZGkucHJvdG90eXBlLl9zaW5nbGV0b249dGhpcyx0aGlzLl9pbnB1dHM9W10sdGhpcy5fb3V0cHV0cz1bXSx0aGlzLl91c2VySGFuZGxlcnM9e30sdGhpcy5fc3RhdGVDaGFuZ2VRdWV1ZT1bXSx0aGlzLl9wcm9jZXNzaW5nU3RhdGVDaGFuZ2U9ITEsdGhpcy5fbWlkaUludGVyZmFjZUV2ZW50cz1bXCJjb25uZWN0ZWRcIixcImRpc2Nvbm5lY3RlZFwiXSx0aGlzLl9ub3Rlcz1bXCJDXCIsXCJDI1wiLFwiRFwiLFwiRCNcIixcIkVcIixcIkZcIixcIkYjXCIsXCJHXCIsXCJHI1wiLFwiQVwiLFwiQSNcIixcIkJcIl0sdGhpcy5fc2VtaXRvbmVzPXtDOjAsRDoyLEU6NCxGOjUsRzo3LEE6OSxCOjExfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtNSURJX1NZU1RFTV9NRVNTQUdFUzp7dmFsdWU6e3N5c2V4OjI0MCx0aW1lY29kZToyNDEsc29uZ3Bvc2l0aW9uOjI0Mixzb25nc2VsZWN0OjI0Myx0dW5pbmdyZXF1ZXN0OjI0NixzeXNleGVuZDoyNDcsY2xvY2s6MjQ4LHN0YXJ0OjI1MCxcImNvbnRpbnVlXCI6MjUxLHN0b3A6MjUyLGFjdGl2ZXNlbnNpbmc6MjU0LHJlc2V0OjI1NSxtaWRpbWVzc2FnZTowLHVua25vd25zeXN0ZW1tZXNzYWdlOi0xfSx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0sTUlESV9DSEFOTkVMX01FU1NBR0VTOnt2YWx1ZTp7bm90ZW9mZjo4LG5vdGVvbjo5LGtleWFmdGVydG91Y2g6MTAsY29udHJvbGNoYW5nZToxMSxjaGFubmVsbW9kZToxMSxwcm9ncmFtY2hhbmdlOjEyLGNoYW5uZWxhZnRlcnRvdWNoOjEzLHBpdGNoYmVuZDoxNH0sd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9LE1JRElfUkVHSVNURVJFRF9QQVJBTUVURVI6e3ZhbHVlOntwaXRjaGJlbmRyYW5nZTpbMCwwXSxjaGFubmVsZmluZXR1bmluZzpbMCwxXSxjaGFubmVsY29hcnNldHVuaW5nOlswLDJdLHR1bmluZ3Byb2dyYW06WzAsM10sdHVuaW5nYmFuazpbMCw0XSxtb2R1bGF0aW9ucmFuZ2U6WzAsNV0sYXppbXV0aGFuZ2xlOls2MSwwXSxlbGV2YXRpb25hbmdsZTpbNjEsMV0sZ2FpbjpbNjEsMl0sZGlzdGFuY2VyYXRpbzpbNjEsM10sbWF4aW11bWRpc3RhbmNlOls2MSw0XSxtYXhpbXVtZGlzdGFuY2VnYWluOls2MSw1XSxyZWZlcmVuY2VkaXN0YW5jZXJhdGlvOls2MSw2XSxwYW5zcHJlYWRhbmdsZTpbNjEsN10scm9sbGFuZ2xlOls2MSw4XX0sd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9LE1JRElfQ09OVFJPTF9DSEFOR0VfTUVTU0FHRVM6e3ZhbHVlOntiYW5rc2VsZWN0Y29hcnNlOjAsbW9kdWxhdGlvbndoZWVsY29hcnNlOjEsYnJlYXRoY29udHJvbGxlcmNvYXJzZToyLGZvb3Rjb250cm9sbGVyY29hcnNlOjQscG9ydGFtZW50b3RpbWVjb2Fyc2U6NSxkYXRhZW50cnljb2Fyc2U6Nix2b2x1bWVjb2Fyc2U6NyxiYWxhbmNlY29hcnNlOjgscGFuY29hcnNlOjEwLGV4cHJlc3Npb25jb2Fyc2U6MTEsZWZmZWN0Y29udHJvbDFjb2Fyc2U6MTIsZWZmZWN0Y29udHJvbDJjb2Fyc2U6MTMsZ2VuZXJhbHB1cnBvc2VzbGlkZXIxOjE2LGdlbmVyYWxwdXJwb3Nlc2xpZGVyMjoxNyxnZW5lcmFscHVycG9zZXNsaWRlcjM6MTgsZ2VuZXJhbHB1cnBvc2VzbGlkZXI0OjE5LGJhbmtzZWxlY3RmaW5lOjMyLG1vZHVsYXRpb253aGVlbGZpbmU6MzMsYnJlYXRoY29udHJvbGxlcmZpbmU6MzQsZm9vdGNvbnRyb2xsZXJmaW5lOjM2LHBvcnRhbWVudG90aW1lZmluZTozNyxkYXRhZW50cnlmaW5lOjM4LHZvbHVtZWZpbmU6MzksYmFsYW5jZWZpbmU6NDAscGFuZmluZTo0MixleHByZXNzaW9uZmluZTo0MyxlZmZlY3Rjb250cm9sMWZpbmU6NDQsZWZmZWN0Y29udHJvbDJmaW5lOjQ1LGhvbGRwZWRhbDo2NCxwb3J0YW1lbnRvOjY1LHN1c3RlbnV0b3BlZGFsOjY2LHNvZnRwZWRhbDo2NyxsZWdhdG9wZWRhbDo2OCxob2xkMnBlZGFsOjY5LHNvdW5kdmFyaWF0aW9uOjcwLHJlc29uYW5jZTo3MSxzb3VuZHJlbGVhc2V0aW1lOjcyLHNvdW5kYXR0YWNrdGltZTo3MyxicmlnaHRuZXNzOjc0LHNvdW5kY29udHJvbDY6NzUsc291bmRjb250cm9sNzo3Nixzb3VuZGNvbnRyb2w4Ojc3LHNvdW5kY29udHJvbDk6Nzgsc291bmRjb250cm9sMTA6NzksZ2VuZXJhbHB1cnBvc2VidXR0b24xOjgwLGdlbmVyYWxwdXJwb3NlYnV0dG9uMjo4MSxnZW5lcmFscHVycG9zZWJ1dHRvbjM6ODIsZ2VuZXJhbHB1cnBvc2VidXR0b240OjgzLHJldmVyYmxldmVsOjkxLHRyZW1vbG9sZXZlbDo5MixjaG9ydXNsZXZlbDo5MyxjZWxlc3RlbGV2ZWw6OTQscGhhc2VybGV2ZWw6OTUsZGF0YWJ1dHRvbmluY3JlbWVudDo5NixkYXRhYnV0dG9uZGVjcmVtZW50Ojk3LG5vbnJlZ2lzdGVyZWRwYXJhbWV0ZXJjb2Fyc2U6OTgsbm9ucmVnaXN0ZXJlZHBhcmFtZXRlcmZpbmU6OTkscmVnaXN0ZXJlZHBhcmFtZXRlcmNvYXJzZToxMDAscmVnaXN0ZXJlZHBhcmFtZXRlcmZpbmU6MTAxfSx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0sTUlESV9DSEFOTkVMX01PREVfTUVTU0FHRVM6e3ZhbHVlOnthbGxzb3VuZG9mZjoxMjAscmVzZXRhbGxjb250cm9sbGVyczoxMjEsbG9jYWxjb250cm9sOjEyMixhbGxub3Rlc29mZjoxMjMsb21uaW1vZGVvZmY6MTI0LG9tbmltb2Rlb246MTI1LG1vbm9tb2Rlb246MTI2LHBvbHltb2Rlb246MTI3fSx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0sb2N0YXZlT2Zmc2V0Ont2YWx1ZTowLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3N1cHBvcnRlZDp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5cInJlcXVlc3RNSURJQWNjZXNzXCJpbiBuYXZpZ2F0b3J9fSxlbmFibGVkOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzW1wiaW50ZXJmYWNlXCJdfS5iaW5kKHRoaXMpfSxpbnB1dHM6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lucHV0c30uYmluZCh0aGlzKX0sb3V0cHV0czp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3V0cHV0c30uYmluZCh0aGlzKX0sc3lzZXhFbmFibGVkOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiEoIXRoaXNbXCJpbnRlcmZhY2VcIl18fCF0aGlzW1wiaW50ZXJmYWNlXCJdLnN5c2V4RW5hYmxlZCl9LmJpbmQodGhpcyl9LHRpbWU6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfX19KX1mdW5jdGlvbiBJbnB1dChtaWRpSW5wdXQpe3ZhciB0aGF0PXRoaXM7dGhpcy5fdXNlckhhbmRsZXJzPXtjaGFubmVsOnt9LHN5c3RlbTp7fX0sdGhpcy5fbWlkaUlucHV0PW1pZGlJbnB1dCxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtjb25uZWN0aW9uOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGF0Ll9taWRpSW5wdXQuY29ubmVjdGlvbn19LGlkOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGF0Ll9taWRpSW5wdXQuaWR9fSxtYW51ZmFjdHVyZXI6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoYXQuX21pZGlJbnB1dC5tYW51ZmFjdHVyZXJ9fSxuYW1lOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGF0Ll9taWRpSW5wdXQubmFtZX19LHN0YXRlOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGF0Ll9taWRpSW5wdXQuc3RhdGV9fSx0eXBlOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGF0Ll9taWRpSW5wdXQudHlwZX19fSksdGhpcy5faW5pdGlhbGl6ZVVzZXJIYW5kbGVycygpLHRoaXMuX21pZGlJbnB1dC5vbm1pZGltZXNzYWdlPXRoaXMuX29uTWlkaU1lc3NhZ2UuYmluZCh0aGlzKX1mdW5jdGlvbiBPdXRwdXQobWlkaU91dHB1dCl7dmFyIHRoYXQ9dGhpczt0aGlzLl9taWRpT3V0cHV0PW1pZGlPdXRwdXQsT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7Y29ubmVjdGlvbjp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhhdC5fbWlkaU91dHB1dC5jb25uZWN0aW9ufX0saWQ6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoYXQuX21pZGlPdXRwdXQuaWR9fSxtYW51ZmFjdHVyZXI6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoYXQuX21pZGlPdXRwdXQubWFudWZhY3R1cmVyfX0sbmFtZTp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhhdC5fbWlkaU91dHB1dC5uYW1lfX0sc3RhdGU6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoYXQuX21pZGlPdXRwdXQuc3RhdGV9fSx0eXBlOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGF0Ll9taWRpT3V0cHV0LnR5cGV9fX0pfXZhciB3bT1uZXcgV2ViTWlkaTtXZWJNaWRpLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oY2FsbGJhY2ssc3lzZXgpe3JldHVybiB0aGlzLmVuYWJsZWQ/dm9pZCAwOnRoaXMuc3VwcG9ydGVkP3ZvaWQgbmF2aWdhdG9yLnJlcXVlc3RNSURJQWNjZXNzKHtzeXNleDpzeXNleH0pLnRoZW4oZnVuY3Rpb24obWlkaUFjY2Vzcyl7ZnVuY3Rpb24gb25Qb3J0c09wZW4oKXtjbGVhclRpbWVvdXQocHJvbWlzZVRpbWVvdXQpLHRoaXMuX3VwZGF0ZUlucHV0c0FuZE91dHB1dHMoKSx0aGlzW1wiaW50ZXJmYWNlXCJdLm9uc3RhdGVjaGFuZ2U9dGhpcy5fb25JbnRlcmZhY2VTdGF0ZUNoYW5nZS5iaW5kKHRoaXMpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGNhbGxiYWNrJiZjYWxsYmFjay5jYWxsKHRoaXMpLGV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXt0aGlzLl9vbkludGVyZmFjZVN0YXRlQ2hhbmdlKGV2ZW50KX0uYmluZCh0aGlzKSl9dmFyIHByb21pc2VUaW1lb3V0LGV2ZW50cz1bXSxwcm9taXNlcz1bXTt0aGlzW1wiaW50ZXJmYWNlXCJdPW1pZGlBY2Nlc3MsdGhpcy5fcmVzZXRJbnRlcmZhY2VVc2VySGFuZGxlcnMoKSx0aGlzW1wiaW50ZXJmYWNlXCJdLm9uc3RhdGVjaGFuZ2U9ZnVuY3Rpb24oZSl7ZXZlbnRzLnB1c2goZSl9O2Zvcih2YXIgaW5wdXRzPW1pZGlBY2Nlc3MuaW5wdXRzLnZhbHVlcygpLGlucHV0PWlucHV0cy5uZXh0KCk7aW5wdXQmJiFpbnB1dC5kb25lO2lucHV0PWlucHV0cy5uZXh0KCkpcHJvbWlzZXMucHVzaChpbnB1dC52YWx1ZS5vcGVuKCkpO2Zvcih2YXIgb3V0cHV0cz1taWRpQWNjZXNzLm91dHB1dHMudmFsdWVzKCksb3V0cHV0PW91dHB1dHMubmV4dCgpO291dHB1dCYmIW91dHB1dC5kb25lO291dHB1dD1vdXRwdXRzLm5leHQoKSlwcm9taXNlcy5wdXNoKG91dHB1dC52YWx1ZS5vcGVuKCkpO3Byb21pc2VUaW1lb3V0PXNldFRpbWVvdXQob25Qb3J0c09wZW4uYmluZCh0aGlzKSwyMDApLFByb21pc2UmJlByb21pc2UuYWxsKHByb21pc2VzKVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycil7fSkudGhlbihvblBvcnRzT3Blbi5iaW5kKHRoaXMpKX0uYmluZCh0aGlzKSxmdW5jdGlvbihlcnIpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGNhbGxiYWNrJiZjYWxsYmFjay5jYWxsKHRoaXMsZXJyKX0uYmluZCh0aGlzKSk6dm9pZChcImZ1bmN0aW9uXCI9PXR5cGVvZiBjYWxsYmFjayYmY2FsbGJhY2sobmV3IEVycm9yKFwiVGhlIFdlYiBNSURJIEFQSSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3Nlci5cIikpKX0sV2ViTWlkaS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe2lmKCF0aGlzLnN1cHBvcnRlZCl0aHJvdyBuZXcgRXJyb3IoXCJUaGUgV2ViIE1JREkgQVBJIGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBicm93c2VyLlwiKTt0aGlzW1wiaW50ZXJmYWNlXCJdJiYodGhpc1tcImludGVyZmFjZVwiXS5vbnN0YXRlY2hhbmdlPXZvaWQgMCksdGhpc1tcImludGVyZmFjZVwiXT12b2lkIDAsdGhpcy5faW5wdXRzPVtdLHRoaXMuX291dHB1dHM9W10sdGhpcy5fcmVzZXRJbnRlcmZhY2VVc2VySGFuZGxlcnMoKX0sV2ViTWlkaS5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24odHlwZSxsaXN0ZW5lcil7aWYoIXRoaXMuZW5hYmxlZCl0aHJvdyBuZXcgRXJyb3IoXCJXZWJNaWRpIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgYWRkaW5nIGV2ZW50IGxpc3RlbmVycy5cIik7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgbGlzdGVuZXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSAnbGlzdGVuZXInIHBhcmFtZXRlciBtdXN0IGJlIGEgZnVuY3Rpb24uXCIpO2lmKCEodGhpcy5fbWlkaUludGVyZmFjZUV2ZW50cy5pbmRleE9mKHR5cGUpPj0wKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIHNwZWNpZmllZCBldmVudCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQuXCIpO3JldHVybiB0aGlzLl91c2VySGFuZGxlcnNbdHlwZV0ucHVzaChsaXN0ZW5lciksdGhpc30sV2ViTWlkaS5wcm90b3R5cGUuaGFzTGlzdGVuZXI9ZnVuY3Rpb24odHlwZSxsaXN0ZW5lcil7aWYoIXRoaXMuZW5hYmxlZCl0aHJvdyBuZXcgRXJyb3IoXCJXZWJNaWRpIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgY2hlY2tpbmcgZXZlbnQgbGlzdGVuZXJzLlwiKTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBsaXN0ZW5lcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlICdsaXN0ZW5lcicgcGFyYW1ldGVyIG11c3QgYmUgYSBmdW5jdGlvbi5cIik7aWYoISh0aGlzLl9taWRpSW50ZXJmYWNlRXZlbnRzLmluZGV4T2YodHlwZSk+PTApKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgc3BlY2lmaWVkIGV2ZW50IHR5cGUgaXMgbm90IHN1cHBvcnRlZC5cIik7Zm9yKHZhciBvPTA7bzx0aGlzLl91c2VySGFuZGxlcnNbdHlwZV0ubGVuZ3RoO28rKylpZih0aGlzLl91c2VySGFuZGxlcnNbdHlwZV1bb109PT1saXN0ZW5lcilyZXR1cm4hMDtyZXR1cm4hMX0sV2ViTWlkaS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24odHlwZSxsaXN0ZW5lcil7aWYoIXRoaXMuZW5hYmxlZCl0aHJvdyBuZXcgRXJyb3IoXCJXZWJNaWRpIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgcmVtb3ZpbmcgZXZlbnQgbGlzdGVuZXJzLlwiKTtpZih2b2lkIDAhPT1saXN0ZW5lciYmXCJmdW5jdGlvblwiIT10eXBlb2YgbGlzdGVuZXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSAnbGlzdGVuZXInIHBhcmFtZXRlciBtdXN0IGJlIGEgZnVuY3Rpb24uXCIpO2lmKHRoaXMuX21pZGlJbnRlcmZhY2VFdmVudHMuaW5kZXhPZih0eXBlKT49MClpZihsaXN0ZW5lcilmb3IodmFyIG89MDtvPHRoaXMuX3VzZXJIYW5kbGVyc1t0eXBlXS5sZW5ndGg7bysrKXRoaXMuX3VzZXJIYW5kbGVyc1t0eXBlXVtvXT09PWxpc3RlbmVyJiZ0aGlzLl91c2VySGFuZGxlcnNbdHlwZV0uc3BsaWNlKG8sMSk7ZWxzZSB0aGlzLl91c2VySGFuZGxlcnNbdHlwZV09W107ZWxzZXtpZih2b2lkIDAhPT10eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgc3BlY2lmaWVkIGV2ZW50IHR5cGUgaXMgbm90IHN1cHBvcnRlZC5cIik7dGhpcy5fcmVzZXRJbnRlcmZhY2VVc2VySGFuZGxlcnMoKX1yZXR1cm4gdGhpc30sV2ViTWlkaS5wcm90b3R5cGUudG9NSURJQ2hhbm5lbHM9ZnVuY3Rpb24oY2hhbm5lbCl7dmFyIGNoYW5uZWxzO3JldHVybiBjaGFubmVscz1cImFsbFwiPT09Y2hhbm5lbHx8dm9pZCAwPT09Y2hhbm5lbD9bXCJhbGxcIl06QXJyYXkuaXNBcnJheShjaGFubmVsKT9jaGFubmVsOltjaGFubmVsXSxjaGFubmVscy5pbmRleE9mKFwiYWxsXCIpPi0xJiYoY2hhbm5lbHM9WzEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2XSksY2hhbm5lbHMubWFwKGZ1bmN0aW9uKGNoKXtyZXR1cm4gcGFyc2VJbnQoY2gpfSkuZmlsdGVyKGZ1bmN0aW9uKGNoKXtyZXR1cm4gY2g+PTEmJjE2Pj1jaH0pfSxXZWJNaWRpLnByb3RvdHlwZS5nZXRJbnB1dEJ5SWQ9ZnVuY3Rpb24oaWQpe2lmKCF0aGlzLmVuYWJsZWQpdGhyb3cgbmV3IEVycm9yKFwiV2ViTWlkaSBpcyBub3QgZW5hYmxlZC5cIik7Zm9yKHZhciBpPTA7aTx0aGlzLmlucHV0cy5sZW5ndGg7aSsrKWlmKHRoaXMuaW5wdXRzW2ldLmlkPT09aWQpcmV0dXJuIHRoaXMuaW5wdXRzW2ldO3JldHVybiExfSxXZWJNaWRpLnByb3RvdHlwZS5nZXRPdXRwdXRCeUlkPWZ1bmN0aW9uKGlkKXtpZighdGhpcy5lbmFibGVkKXRocm93IG5ldyBFcnJvcihcIldlYk1pZGkgaXMgbm90IGVuYWJsZWQuXCIpO2Zvcih2YXIgaT0wO2k8dGhpcy5vdXRwdXRzLmxlbmd0aDtpKyspaWYodGhpcy5vdXRwdXRzW2ldLmlkPT09aWQpcmV0dXJuIHRoaXMub3V0cHV0c1tpXTtyZXR1cm4hMX0sV2ViTWlkaS5wcm90b3R5cGUuZ2V0SW5wdXRCeU5hbWU9ZnVuY3Rpb24obmFtZSl7aWYoIXRoaXMuZW5hYmxlZCl0aHJvdyBuZXcgRXJyb3IoXCJXZWJNaWRpIGlzIG5vdCBlbmFibGVkLlwiKTtmb3IodmFyIGk9MDtpPHRoaXMuaW5wdXRzLmxlbmd0aDtpKyspaWYofnRoaXMuaW5wdXRzW2ldLm5hbWUuaW5kZXhPZihuYW1lKSlyZXR1cm4gdGhpcy5pbnB1dHNbaV07cmV0dXJuITF9LFdlYk1pZGkucHJvdG90eXBlLmdldE9jdGF2ZT1mdW5jdGlvbihudW1iZXIpe3JldHVybiBudWxsIT1udW1iZXImJm51bWJlcj49MCYmMTI3Pj1udW1iZXI/TWF0aC5mbG9vcihNYXRoLmZsb29yKG51bWJlcikvMTItMSkrTWF0aC5mbG9vcih3bS5vY3RhdmVPZmZzZXQpOnZvaWQgMH0sV2ViTWlkaS5wcm90b3R5cGUuZ2V0T3V0cHV0QnlOYW1lPWZ1bmN0aW9uKG5hbWUpe2lmKCF0aGlzLmVuYWJsZWQpdGhyb3cgbmV3IEVycm9yKFwiV2ViTWlkaSBpcyBub3QgZW5hYmxlZC5cIik7Zm9yKHZhciBpPTA7aTx0aGlzLm91dHB1dHMubGVuZ3RoO2krKylpZih+dGhpcy5vdXRwdXRzW2ldLm5hbWUuaW5kZXhPZihuYW1lKSlyZXR1cm4gdGhpcy5vdXRwdXRzW2ldO3JldHVybiExfSxXZWJNaWRpLnByb3RvdHlwZS5ndWVzc05vdGVOdW1iZXI9ZnVuY3Rpb24oaW5wdXQpe3ZhciBvdXRwdXQ9ITE7aWYoaW5wdXQmJmlucHV0LnRvRml4ZWQmJmlucHV0Pj0wJiYxMjc+PWlucHV0P291dHB1dD1NYXRoLnJvdW5kKGlucHV0KTpwYXJzZUludChpbnB1dCk+PTAmJnBhcnNlSW50KGlucHV0KTw9MTI3P291dHB1dD1wYXJzZUludChpbnB1dCk6KFwic3RyaW5nXCI9PXR5cGVvZiBpbnB1dHx8aW5wdXQgaW5zdGFuY2VvZiBTdHJpbmcpJiYob3V0cHV0PXRoaXMubm90ZU5hbWVUb051bWJlcihpbnB1dCkpLG91dHB1dD09PSExKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaW5wdXQgdmFsdWUgKFwiK2lucHV0K1wiKS5cIik7cmV0dXJuIG91dHB1dH0sV2ViTWlkaS5wcm90b3R5cGUubm90ZU5hbWVUb051bWJlcj1mdW5jdGlvbihuYW1lKXtcInN0cmluZ1wiIT10eXBlb2YgbmFtZSYmKG5hbWU9XCJcIik7dmFyIG1hdGNoZXM9bmFtZS5tYXRjaCgvKFtDREVGR0FCXSkoI3swLDJ9fGJ7MCwyfSkoLT9cXGQrKS9pKTtpZighbWF0Y2hlcyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgbm90ZSBuYW1lLlwiKTt2YXIgc2VtaXRvbmVzPXdtLl9zZW1pdG9uZXNbbWF0Y2hlc1sxXS50b1VwcGVyQ2FzZSgpXSxvY3RhdmU9cGFyc2VJbnQobWF0Y2hlc1szXSkscmVzdWx0PTEyKihvY3RhdmUrMS1NYXRoLmZsb29yKHdtLm9jdGF2ZU9mZnNldCkpK3NlbWl0b25lcztpZihtYXRjaGVzWzJdLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImJcIik+LTE/cmVzdWx0LT1tYXRjaGVzWzJdLmxlbmd0aDptYXRjaGVzWzJdLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcIiNcIik+LTEmJihyZXN1bHQrPW1hdGNoZXNbMl0ubGVuZ3RoKSwwPnJlc3VsdHx8cmVzdWx0PjEyNyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgbm90ZSBuYW1lIG9yIG5vdGUgb3V0c2lkZSB2YWxpZCByYW5nZS5cIik7cmV0dXJuIHJlc3VsdH0sV2ViTWlkaS5wcm90b3R5cGUuX3VwZGF0ZUlucHV0c0FuZE91dHB1dHM9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVJbnB1dHMoKSx0aGlzLl91cGRhdGVPdXRwdXRzKCl9LFdlYk1pZGkucHJvdG90eXBlLl91cGRhdGVJbnB1dHM9ZnVuY3Rpb24oKXtmb3IodmFyIGk9MDtpPHRoaXMuX2lucHV0cy5sZW5ndGg7aSsrKXtmb3IodmFyIHJlbW92ZT0hMCx1cGRhdGVkPXRoaXNbXCJpbnRlcmZhY2VcIl0uaW5wdXRzLnZhbHVlcygpLGlucHV0PXVwZGF0ZWQubmV4dCgpO2lucHV0JiYhaW5wdXQuZG9uZTtpbnB1dD11cGRhdGVkLm5leHQoKSlpZih0aGlzLl9pbnB1dHNbaV0uX21pZGlJbnB1dD09PWlucHV0LnZhbHVlKXtyZW1vdmU9ITE7YnJlYWt9cmVtb3ZlJiZ0aGlzLl9pbnB1dHMuc3BsaWNlKGksMSl9dGhpc1tcImludGVyZmFjZVwiXSYmdGhpc1tcImludGVyZmFjZVwiXS5pbnB1dHMuZm9yRWFjaChmdW5jdGlvbihuSW5wdXQpe2Zvcih2YXIgYWRkPSEwLGo9MDtqPHRoaXMuX2lucHV0cy5sZW5ndGg7aisrKXRoaXMuX2lucHV0c1tqXS5fbWlkaUlucHV0PT09bklucHV0JiYoYWRkPSExKTthZGQmJnRoaXMuX2lucHV0cy5wdXNoKG5ldyBJbnB1dChuSW5wdXQpKX0uYmluZCh0aGlzKSl9LFdlYk1pZGkucHJvdG90eXBlLl91cGRhdGVPdXRwdXRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBpPTA7aTx0aGlzLl9vdXRwdXRzLmxlbmd0aDtpKyspe2Zvcih2YXIgcmVtb3ZlPSEwLHVwZGF0ZWQ9dGhpc1tcImludGVyZmFjZVwiXS5vdXRwdXRzLnZhbHVlcygpLG91dHB1dD11cGRhdGVkLm5leHQoKTtvdXRwdXQmJiFvdXRwdXQuZG9uZTtvdXRwdXQ9dXBkYXRlZC5uZXh0KCkpaWYodGhpcy5fb3V0cHV0c1tpXS5fbWlkaU91dHB1dD09PW91dHB1dC52YWx1ZSl7cmVtb3ZlPSExO2JyZWFrfXJlbW92ZSYmdGhpcy5fb3V0cHV0cy5zcGxpY2UoaSwxKX10aGlzW1wiaW50ZXJmYWNlXCJdJiZ0aGlzW1wiaW50ZXJmYWNlXCJdLm91dHB1dHMuZm9yRWFjaChmdW5jdGlvbihuT3V0cHV0KXtmb3IodmFyIGFkZD0hMCxqPTA7ajx0aGlzLl9vdXRwdXRzLmxlbmd0aDtqKyspdGhpcy5fb3V0cHV0c1tqXS5fbWlkaU91dHB1dD09PW5PdXRwdXQmJihhZGQ9ITEpO2FkZCYmdGhpcy5fb3V0cHV0cy5wdXNoKG5ldyBPdXRwdXQobk91dHB1dCkpfS5iaW5kKHRoaXMpKX0sV2ViTWlkaS5wcm90b3R5cGUuX29uSW50ZXJmYWNlU3RhdGVDaGFuZ2U9ZnVuY3Rpb24oZSl7dGhpcy5fdXBkYXRlSW5wdXRzQW5kT3V0cHV0cygpO3ZhciBldmVudD17dGltZXN0YW1wOmUudGltZVN0YW1wLHR5cGU6ZS5wb3J0LnN0YXRlfTt0aGlzW1wiaW50ZXJmYWNlXCJdJiZcImNvbm5lY3RlZFwiPT09ZS5wb3J0LnN0YXRlP1wib3V0cHV0XCI9PT1lLnBvcnQudHlwZT9ldmVudC5wb3J0PXRoaXMuZ2V0T3V0cHV0QnlJZChlLnBvcnQuaWQpOlwiaW5wdXRcIj09PWUucG9ydC50eXBlJiYoZXZlbnQucG9ydD10aGlzLmdldElucHV0QnlJZChlLnBvcnQuaWQpKTpldmVudC5wb3J0PXtjb25uZWN0aW9uOlwiY2xvc2VkXCIsaWQ6ZS5wb3J0LmlkLG1hbnVmYWN0dXJlcjplLnBvcnQubWFudWZhY3R1cmVyLG5hbWU6ZS5wb3J0Lm5hbWUsc3RhdGU6ZS5wb3J0LnN0YXRlLHR5cGU6ZS5wb3J0LnR5cGV9LHRoaXMuX3VzZXJIYW5kbGVyc1tlLnBvcnQuc3RhdGVdLmZvckVhY2goZnVuY3Rpb24oaGFuZGxlcil7aGFuZGxlcihldmVudCl9KX0sV2ViTWlkaS5wcm90b3R5cGUuX3Jlc2V0SW50ZXJmYWNlVXNlckhhbmRsZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciBpPTA7aTx0aGlzLl9taWRpSW50ZXJmYWNlRXZlbnRzLmxlbmd0aDtpKyspdGhpcy5fdXNlckhhbmRsZXJzW3RoaXMuX21pZGlJbnRlcmZhY2VFdmVudHNbaV1dPVtdfSxJbnB1dC5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24odHlwZSxjaGFubmVsLGxpc3RlbmVyKXt2YXIgdGhhdD10aGlzO2lmKHZvaWQgMD09PWNoYW5uZWwmJihjaGFubmVsPVwiYWxsXCIpLEFycmF5LmlzQXJyYXkoY2hhbm5lbCl8fChjaGFubmVsPVtjaGFubmVsXSksY2hhbm5lbC5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pe2lmKFwiYWxsXCIhPT1pdGVtJiYhKGl0ZW0+PTEmJjE2Pj1pdGVtKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSAnY2hhbm5lbCcgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpfSksXCJmdW5jdGlvblwiIT10eXBlb2YgbGlzdGVuZXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSAnbGlzdGVuZXInIHBhcmFtZXRlciBtdXN0IGJlIGEgZnVuY3Rpb24uXCIpO2lmKHZvaWQgMCE9PXdtLk1JRElfU1lTVEVNX01FU1NBR0VTW3R5cGVdKXRoaXMuX3VzZXJIYW5kbGVycy5zeXN0ZW1bdHlwZV18fCh0aGlzLl91c2VySGFuZGxlcnMuc3lzdGVtW3R5cGVdPVtdKSx0aGlzLl91c2VySGFuZGxlcnMuc3lzdGVtW3R5cGVdLnB1c2gobGlzdGVuZXIpO2Vsc2V7aWYodm9pZCAwPT09d20uTUlESV9DSEFOTkVMX01FU1NBR0VTW3R5cGVdKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgc3BlY2lmaWVkIGV2ZW50IHR5cGUgaXMgbm90IHN1cHBvcnRlZC5cIik7aWYoY2hhbm5lbC5pbmRleE9mKFwiYWxsXCIpPi0xKXtjaGFubmVsPVtdO2Zvcih2YXIgaj0xOzE2Pj1qO2orKyljaGFubmVsLnB1c2goail9dGhpcy5fdXNlckhhbmRsZXJzLmNoYW5uZWxbdHlwZV18fCh0aGlzLl91c2VySGFuZGxlcnMuY2hhbm5lbFt0eXBlXT1bXSksY2hhbm5lbC5mb3JFYWNoKGZ1bmN0aW9uKGNoKXt0aGF0Ll91c2VySGFuZGxlcnMuY2hhbm5lbFt0eXBlXVtjaF18fCh0aGF0Ll91c2VySGFuZGxlcnMuY2hhbm5lbFt0eXBlXVtjaF09W10pLHRoYXQuX3VzZXJIYW5kbGVycy5jaGFubmVsW3R5cGVdW2NoXS5wdXNoKGxpc3RlbmVyKX0pfXJldHVybiB0aGlzfSxJbnB1dC5wcm90b3R5cGUub249SW5wdXQucHJvdG90eXBlLmFkZExpc3RlbmVyLElucHV0LnByb3RvdHlwZS5oYXNMaXN0ZW5lcj1mdW5jdGlvbih0eXBlLGNoYW5uZWwsbGlzdGVuZXIpe3ZhciB0aGF0PXRoaXM7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgbGlzdGVuZXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSAnbGlzdGVuZXInIHBhcmFtZXRlciBtdXN0IGJlIGEgZnVuY3Rpb24uXCIpO2lmKHZvaWQgMD09PWNoYW5uZWwmJihjaGFubmVsPVwiYWxsXCIpLGNoYW5uZWwuY29uc3RydWN0b3IhPT1BcnJheSYmKGNoYW5uZWw9W2NoYW5uZWxdKSx2b2lkIDAhPT13bS5NSURJX1NZU1RFTV9NRVNTQUdFU1t0eXBlXSl7Zm9yKHZhciBvPTA7bzx0aGlzLl91c2VySGFuZGxlcnMuc3lzdGVtW3R5cGVdLmxlbmd0aDtvKyspaWYodGhpcy5fdXNlckhhbmRsZXJzLnN5c3RlbVt0eXBlXVtvXT09PWxpc3RlbmVyKXJldHVybiEwfWVsc2UgaWYodm9pZCAwIT09d20uTUlESV9DSEFOTkVMX01FU1NBR0VTW3R5cGVdKXtpZihjaGFubmVsLmluZGV4T2YoXCJhbGxcIik+LTEpe2NoYW5uZWw9W107Zm9yKHZhciBqPTE7MTY+PWo7aisrKWNoYW5uZWwucHVzaChqKX1yZXR1cm4gdGhpcy5fdXNlckhhbmRsZXJzLmNoYW5uZWxbdHlwZV0/Y2hhbm5lbC5ldmVyeShmdW5jdGlvbihjaE51bSl7dmFyIGxpc3RlbmVycz10aGF0Ll91c2VySGFuZGxlcnMuY2hhbm5lbFt0eXBlXVtjaE51bV07cmV0dXJuIGxpc3RlbmVycyYmbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpPi0xfSk6ITF9cmV0dXJuITF9LElucHV0LnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbih0eXBlLGNoYW5uZWwsbGlzdGVuZXIpe3ZhciB0aGF0PXRoaXM7aWYodm9pZCAwIT09bGlzdGVuZXImJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGxpc3RlbmVyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgJ2xpc3RlbmVyJyBwYXJhbWV0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uLlwiKTtpZih2b2lkIDA9PT1jaGFubmVsJiYoY2hhbm5lbD1cImFsbFwiKSxjaGFubmVsLmNvbnN0cnVjdG9yIT09QXJyYXkmJihjaGFubmVsPVtjaGFubmVsXSksdm9pZCAwIT09d20uTUlESV9TWVNURU1fTUVTU0FHRVNbdHlwZV0paWYodm9pZCAwPT09bGlzdGVuZXIpdGhpcy5fdXNlckhhbmRsZXJzLnN5c3RlbVt0eXBlXT1bXTtlbHNlIGZvcih2YXIgbz0wO288dGhpcy5fdXNlckhhbmRsZXJzLnN5c3RlbVt0eXBlXS5sZW5ndGg7bysrKXRoaXMuX3VzZXJIYW5kbGVycy5zeXN0ZW1bdHlwZV1bb109PT1saXN0ZW5lciYmdGhpcy5fdXNlckhhbmRsZXJzLnN5c3RlbVt0eXBlXS5zcGxpY2UobywxKTtlbHNlIGlmKHZvaWQgMCE9PXdtLk1JRElfQ0hBTk5FTF9NRVNTQUdFU1t0eXBlXSl7aWYoY2hhbm5lbC5pbmRleE9mKFwiYWxsXCIpPi0xKXtjaGFubmVsPVtdO2Zvcih2YXIgaj0xOzE2Pj1qO2orKyljaGFubmVsLnB1c2goail9aWYoIXRoaXMuX3VzZXJIYW5kbGVycy5jaGFubmVsW3R5cGVdKXJldHVybiB0aGlzO2NoYW5uZWwuZm9yRWFjaChmdW5jdGlvbihjaE51bSl7dmFyIGxpc3RlbmVycz10aGF0Ll91c2VySGFuZGxlcnMuY2hhbm5lbFt0eXBlXVtjaE51bV07aWYobGlzdGVuZXJzKWlmKHZvaWQgMD09PWxpc3RlbmVyKXRoYXQuX3VzZXJIYW5kbGVycy5jaGFubmVsW3R5cGVdW2NoTnVtXT1bXTtlbHNlIGZvcih2YXIgbD0wO2w8bGlzdGVuZXJzLmxlbmd0aDtsKyspbGlzdGVuZXJzW2xdPT09bGlzdGVuZXImJmxpc3RlbmVycy5zcGxpY2UobCwxKX0pfWVsc2V7aWYodm9pZCAwIT09dHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIHNwZWNpZmllZCBldmVudCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQuXCIpO3RoaXMuX2luaXRpYWxpemVVc2VySGFuZGxlcnMoKX1yZXR1cm4gdGhpc30sSW5wdXQucHJvdG90eXBlLl9pbml0aWFsaXplVXNlckhhbmRsZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciBwcm9wMSBpbiB3bS5NSURJX0NIQU5ORUxfTUVTU0FHRVMpd20uTUlESV9DSEFOTkVMX01FU1NBR0VTLmhhc093blByb3BlcnR5KHByb3AxKSYmKHRoaXMuX3VzZXJIYW5kbGVycy5jaGFubmVsW3Byb3AxXT17fSk7Zm9yKHZhciBwcm9wMiBpbiB3bS5NSURJX1NZU1RFTV9NRVNTQUdFUyl3bS5NSURJX1NZU1RFTV9NRVNTQUdFUy5oYXNPd25Qcm9wZXJ0eShwcm9wMikmJih0aGlzLl91c2VySGFuZGxlcnMuc3lzdGVtW3Byb3AyXT1bXSl9LElucHV0LnByb3RvdHlwZS5fb25NaWRpTWVzc2FnZT1mdW5jdGlvbihlKXtpZih0aGlzLl91c2VySGFuZGxlcnMuc3lzdGVtLm1pZGltZXNzYWdlLmxlbmd0aD4wKXt2YXIgZXZlbnQ9e3RhcmdldDp0aGlzLGRhdGE6ZS5kYXRhLHRpbWVzdGFtcDplLnRpbWVTdGFtcCx0eXBlOlwibWlkaW1lc3NhZ2VcIn07dGhpcy5fdXNlckhhbmRsZXJzLnN5c3RlbS5taWRpbWVzc2FnZS5mb3JFYWNoKGZ1bmN0aW9uKGNhbGxiYWNrKXtjYWxsYmFjayhldmVudCl9KX1lLmRhdGFbMF08MjQwP3RoaXMuX3BhcnNlQ2hhbm5lbEV2ZW50KGUpOmUuZGF0YVswXTw9MjU1JiZ0aGlzLl9wYXJzZVN5c3RlbUV2ZW50KGUpfSxJbnB1dC5wcm90b3R5cGUuX3BhcnNlQ2hhbm5lbEV2ZW50PWZ1bmN0aW9uKGUpe3ZhciBkYXRhMSxkYXRhMixjb21tYW5kPWUuZGF0YVswXT4+NCxjaGFubmVsPSgxNSZlLmRhdGFbMF0pKzE7ZS5kYXRhLmxlbmd0aD4xJiYoZGF0YTE9ZS5kYXRhWzFdLGRhdGEyPWUuZGF0YS5sZW5ndGg+Mj9lLmRhdGFbMl06dm9pZCAwKTt2YXIgZXZlbnQ9e3RhcmdldDp0aGlzLGRhdGE6ZS5kYXRhLHRpbWVzdGFtcDplLnRpbWVTdGFtcCxjaGFubmVsOmNoYW5uZWx9O2NvbW1hbmQ9PT13bS5NSURJX0NIQU5ORUxfTUVTU0FHRVMubm90ZW9mZnx8Y29tbWFuZD09PXdtLk1JRElfQ0hBTk5FTF9NRVNTQUdFUy5ub3Rlb24mJjA9PT1kYXRhMj8oZXZlbnQudHlwZT1cIm5vdGVvZmZcIixldmVudC5ub3RlPXtudW1iZXI6ZGF0YTEsbmFtZTp3bS5fbm90ZXNbZGF0YTElMTJdLG9jdGF2ZTp3bS5nZXRPY3RhdmUoZGF0YTEpfSxldmVudC52ZWxvY2l0eT1kYXRhMi8xMjcsZXZlbnQucmF3VmVsb2NpdHk9ZGF0YTIpOmNvbW1hbmQ9PT13bS5NSURJX0NIQU5ORUxfTUVTU0FHRVMubm90ZW9uPyhldmVudC50eXBlPVwibm90ZW9uXCIsZXZlbnQubm90ZT17bnVtYmVyOmRhdGExLG5hbWU6d20uX25vdGVzW2RhdGExJTEyXSxvY3RhdmU6d20uZ2V0T2N0YXZlKGRhdGExKX0sZXZlbnQudmVsb2NpdHk9ZGF0YTIvMTI3LGV2ZW50LnJhd1ZlbG9jaXR5PWRhdGEyKTpjb21tYW5kPT09d20uTUlESV9DSEFOTkVMX01FU1NBR0VTLmtleWFmdGVydG91Y2g/KGV2ZW50LnR5cGU9XCJrZXlhZnRlcnRvdWNoXCIsZXZlbnQubm90ZT17bnVtYmVyOmRhdGExLG5hbWU6d20uX25vdGVzW2RhdGExJTEyXSxvY3RhdmU6d20uZ2V0T2N0YXZlKGRhdGExKX0sZXZlbnQudmFsdWU9ZGF0YTIvMTI3KTpjb21tYW5kPT09d20uTUlESV9DSEFOTkVMX01FU1NBR0VTLmNvbnRyb2xjaGFuZ2UmJmRhdGExPj0wJiYxMTk+PWRhdGExPyhldmVudC50eXBlPVwiY29udHJvbGNoYW5nZVwiLGV2ZW50LmNvbnRyb2xsZXI9e251bWJlcjpkYXRhMSxuYW1lOnRoaXMuZ2V0Q2NOYW1lQnlOdW1iZXIoZGF0YTEpfSxldmVudC52YWx1ZT1kYXRhMik6Y29tbWFuZD09PXdtLk1JRElfQ0hBTk5FTF9NRVNTQUdFUy5jaGFubmVsbW9kZSYmZGF0YTE+PTEyMCYmMTI3Pj1kYXRhMT8oZXZlbnQudHlwZT1cImNoYW5uZWxtb2RlXCIsZXZlbnQuY29udHJvbGxlcj17bnVtYmVyOmRhdGExLG5hbWU6dGhpcy5nZXRDaGFubmVsTW9kZUJ5TnVtYmVyKGRhdGExKX0sZXZlbnQudmFsdWU9ZGF0YTIpOmNvbW1hbmQ9PT13bS5NSURJX0NIQU5ORUxfTUVTU0FHRVMucHJvZ3JhbWNoYW5nZT8oZXZlbnQudHlwZT1cInByb2dyYW1jaGFuZ2VcIixldmVudC52YWx1ZT1kYXRhMSk6Y29tbWFuZD09PXdtLk1JRElfQ0hBTk5FTF9NRVNTQUdFUy5jaGFubmVsYWZ0ZXJ0b3VjaD8oZXZlbnQudHlwZT1cImNoYW5uZWxhZnRlcnRvdWNoXCIsZXZlbnQudmFsdWU9ZGF0YTEvMTI3KTpjb21tYW5kPT09d20uTUlESV9DSEFOTkVMX01FU1NBR0VTLnBpdGNoYmVuZD8oZXZlbnQudHlwZT1cInBpdGNoYmVuZFwiLGV2ZW50LnZhbHVlPSgoZGF0YTI8PDcpK2RhdGExLTgxOTIpLzgxOTIpOmV2ZW50LnR5cGU9XCJ1bmtub3duY2hhbm5lbG1lc3NhZ2VcIix0aGlzLl91c2VySGFuZGxlcnMuY2hhbm5lbFtldmVudC50eXBlXSYmdGhpcy5fdXNlckhhbmRsZXJzLmNoYW5uZWxbZXZlbnQudHlwZV1bY2hhbm5lbF0mJnRoaXMuX3VzZXJIYW5kbGVycy5jaGFubmVsW2V2ZW50LnR5cGVdW2NoYW5uZWxdLmZvckVhY2goZnVuY3Rpb24oY2FsbGJhY2spe2NhbGxiYWNrKGV2ZW50KX0pfSxJbnB1dC5wcm90b3R5cGUuZ2V0Q2NOYW1lQnlOdW1iZXI9ZnVuY3Rpb24obnVtYmVyKXtpZihudW1iZXI9TWF0aC5mbG9vcihudW1iZXIpLCEobnVtYmVyPj0wJiYxMTk+PW51bWJlcikpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgY29udHJvbCBjaGFuZ2UgbnVtYmVyIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMTkuXCIpO2Zvcih2YXIgY2MgaW4gd20uTUlESV9DT05UUk9MX0NIQU5HRV9NRVNTQUdFUylpZih3bS5NSURJX0NPTlRST0xfQ0hBTkdFX01FU1NBR0VTLmhhc093blByb3BlcnR5KGNjKSYmbnVtYmVyPT09d20uTUlESV9DT05UUk9MX0NIQU5HRV9NRVNTQUdFU1tjY10pcmV0dXJuIGNjO3JldHVybiB2b2lkIDB9LElucHV0LnByb3RvdHlwZS5nZXRDaGFubmVsTW9kZUJ5TnVtYmVyPWZ1bmN0aW9uKG51bWJlcil7aWYobnVtYmVyPU1hdGguZmxvb3IobnVtYmVyKSwhKG51bWJlcj49MTIwJiZzdGF0dXM8PTEyNykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgY29udHJvbCBjaGFuZ2UgbnVtYmVyIG11c3QgYmUgYmV0d2VlbiAxMjAgYW5kIDEyNy5cIik7Zm9yKHZhciBjbSBpbiB3bS5NSURJX0NIQU5ORUxfTU9ERV9NRVNTQUdFUylpZih3bS5NSURJX0NIQU5ORUxfTU9ERV9NRVNTQUdFUy5oYXNPd25Qcm9wZXJ0eShjbSkmJm51bWJlcj09PXdtLk1JRElfQ0hBTk5FTF9NT0RFX01FU1NBR0VTW2NtXSlyZXR1cm4gY219LElucHV0LnByb3RvdHlwZS5fcGFyc2VTeXN0ZW1FdmVudD1mdW5jdGlvbihlKXt2YXIgY29tbWFuZD1lLmRhdGFbMF0sZXZlbnQ9e3RhcmdldDp0aGlzLGRhdGE6ZS5kYXRhLHRpbWVzdGFtcDplLnRpbWVTdGFtcH07Y29tbWFuZD09PXdtLk1JRElfU1lTVEVNX01FU1NBR0VTLnN5c2V4P2V2ZW50LnR5cGU9XCJzeXNleFwiOmNvbW1hbmQ9PT13bS5NSURJX1NZU1RFTV9NRVNTQUdFUy50aW1lY29kZT9ldmVudC50eXBlPVwidGltZWNvZGVcIjpjb21tYW5kPT09d20uTUlESV9TWVNURU1fTUVTU0FHRVMuc29uZ3Bvc2l0aW9uP2V2ZW50LnR5cGU9XCJzb25ncG9zaXRpb25cIjpjb21tYW5kPT09d20uTUlESV9TWVNURU1fTUVTU0FHRVMuc29uZ3NlbGVjdD8oZXZlbnQudHlwZT1cInNvbmdzZWxlY3RcIixldmVudC5zb25nPWUuZGF0YVsxXSk6Y29tbWFuZD09PXdtLk1JRElfU1lTVEVNX01FU1NBR0VTLnR1bmluZ3JlcXVlc3Q/ZXZlbnQudHlwZT1cInR1bmluZ3JlcXVlc3RcIjpjb21tYW5kPT09d20uTUlESV9TWVNURU1fTUVTU0FHRVMuY2xvY2s/ZXZlbnQudHlwZT1cImNsb2NrXCI6Y29tbWFuZD09PXdtLk1JRElfU1lTVEVNX01FU1NBR0VTLnN0YXJ0P2V2ZW50LnR5cGU9XCJzdGFydFwiOmNvbW1hbmQ9PT13bS5NSURJX1NZU1RFTV9NRVNTQUdFU1tcImNvbnRpbnVlXCJdP2V2ZW50LnR5cGU9XCJjb250aW51ZVwiOmNvbW1hbmQ9PT13bS5NSURJX1NZU1RFTV9NRVNTQUdFUy5zdG9wP2V2ZW50LnR5cGU9XCJzdG9wXCI6Y29tbWFuZD09PXdtLk1JRElfU1lTVEVNX01FU1NBR0VTLmFjdGl2ZXNlbnNpbmc/ZXZlbnQudHlwZT1cImFjdGl2ZXNlbnNpbmdcIjpjb21tYW5kPT09d20uTUlESV9TWVNURU1fTUVTU0FHRVMucmVzZXQ/ZXZlbnQudHlwZT1cInJlc2V0XCI6ZXZlbnQudHlwZT1cInVua25vd25zeXN0ZW1tZXNzYWdlXCIsdGhpcy5fdXNlckhhbmRsZXJzLnN5c3RlbVtldmVudC50eXBlXSYmdGhpcy5fdXNlckhhbmRsZXJzLnN5c3RlbVtldmVudC50eXBlXS5mb3JFYWNoKGZ1bmN0aW9uKGNhbGxiYWNrKXtjYWxsYmFjayhldmVudCl9KX0sT3V0cHV0LnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKHN0YXR1cyxkYXRhLHRpbWVzdGFtcCl7aWYoIShzdGF0dXM+PTEyOCYmMjU1Pj1zdGF0dXMpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIHN0YXR1cyBieXRlIG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDEyOCAoMHg4MCkgYW5kIDI1NSAoMHhGRikuXCIpO3ZvaWQgMD09PWRhdGEmJihkYXRhPVtdKSxBcnJheS5pc0FycmF5KGRhdGEpfHwoZGF0YT1bZGF0YV0pO3ZhciBtZXNzYWdlPVtdO3JldHVybiBkYXRhLmZvckVhY2goZnVuY3Rpb24oaXRlbSxpbmRleCl7dmFyIHBhcnNlZD1NYXRoLmZsb29yKGl0ZW0pO2lmKCEocGFyc2VkPj0wJiYyNTU+PXBhcnNlZCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJEYXRhIGJ5dGVzIG11c3QgYmUgaW50ZWdlcnMgYmV0d2VlbiAwICgweDAwKSBhbmQgMjU1ICgweEZGKS5cIik7bWVzc2FnZS5wdXNoKHBhcnNlZCl9KSx0aGlzLl9taWRpT3V0cHV0LnNlbmQoW3N0YXR1c10uY29uY2F0KG1lc3NhZ2UpLHBhcnNlRmxvYXQodGltZXN0YW1wKXx8MCksdGhpc30sT3V0cHV0LnByb3RvdHlwZS5zZW5kU3lzZXg9ZnVuY3Rpb24obWFudWZhY3R1cmVyLGRhdGEsb3B0aW9ucyl7aWYoIXdtLnN5c2V4RW5hYmxlZCl0aHJvdyBuZXcgRXJyb3IoXCJTeXNleCBtZXNzYWdlIHN1cHBvcnQgbXVzdCBmaXJzdCBiZSBhY3RpdmF0ZWQuXCIpO3JldHVybiBvcHRpb25zPW9wdGlvbnN8fHt9LG1hbnVmYWN0dXJlcj1bXS5jb25jYXQobWFudWZhY3R1cmVyKSxkYXRhLmZvckVhY2goZnVuY3Rpb24oaXRlbSl7aWYoMD5pdGVtfHxpdGVtPjEyNyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSBkYXRhIGJ5dGVzIG9mIGEgc3lzZXggbWVzc2FnZSBtdXN0IGJlIGludGVnZXJzIGJldHdlZW4gMCAoMHgwMCkgYW5kIDEyNyAoMHg3RikuXCIpfSksZGF0YT1tYW51ZmFjdHVyZXIuY29uY2F0KGRhdGEsd20uTUlESV9TWVNURU1fTUVTU0FHRVMuc3lzZXhlbmQpLHRoaXMuc2VuZCh3bS5NSURJX1NZU1RFTV9NRVNTQUdFUy5zeXNleCxkYXRhLHRoaXMuX3BhcnNlVGltZVBhcmFtZXRlcihvcHRpb25zLnRpbWUpKSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLnNlbmRUaW1lY29kZVF1YXJ0ZXJGcmFtZT1mdW5jdGlvbih2YWx1ZSxvcHRpb25zKXtyZXR1cm4gb3B0aW9ucz1vcHRpb25zfHx7fSx0aGlzLnNlbmQod20uTUlESV9TWVNURU1fTUVTU0FHRVMudGltZWNvZGUsdmFsdWUsdGhpcy5fcGFyc2VUaW1lUGFyYW1ldGVyKG9wdGlvbnMudGltZSkpLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuc2VuZFNvbmdQb3NpdGlvbj1mdW5jdGlvbih2YWx1ZSxvcHRpb25zKXt2YWx1ZT1NYXRoLmZsb29yKHZhbHVlKXx8MCxvcHRpb25zPW9wdGlvbnN8fHt9O3ZhciBtc2I9dmFsdWU+PjcmMTI3LGxzYj0xMjcmdmFsdWU7cmV0dXJuIHRoaXMuc2VuZCh3bS5NSURJX1NZU1RFTV9NRVNTQUdFUy5zb25ncG9zaXRpb24sW21zYixsc2JdLHRoaXMuX3BhcnNlVGltZVBhcmFtZXRlcihvcHRpb25zLnRpbWUpKSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLnNlbmRTb25nU2VsZWN0PWZ1bmN0aW9uKHZhbHVlLG9wdGlvbnMpe2lmKHZhbHVlPU1hdGguZmxvb3IodmFsdWUpLG9wdGlvbnM9b3B0aW9uc3x8e30sISh2YWx1ZT49MCYmMTI3Pj12YWx1ZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgc29uZyBudW1iZXIgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEyNy5cIik7cmV0dXJuIHRoaXMuc2VuZCh3bS5NSURJX1NZU1RFTV9NRVNTQUdFUy5zb25nc2VsZWN0LFt2YWx1ZV0sdGhpcy5fcGFyc2VUaW1lUGFyYW1ldGVyKG9wdGlvbnMudGltZSkpLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuc2VuZFR1bmluZ1JlcXVlc3Q9ZnVuY3Rpb24ob3B0aW9ucyl7cmV0dXJuIG9wdGlvbnM9b3B0aW9uc3x8e30sdGhpcy5zZW5kKHdtLk1JRElfU1lTVEVNX01FU1NBR0VTLnR1bmluZ3JlcXVlc3Qsdm9pZCAwLHRoaXMuX3BhcnNlVGltZVBhcmFtZXRlcihvcHRpb25zLnRpbWUpKSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLnNlbmRDbG9jaz1mdW5jdGlvbihvcHRpb25zKXtyZXR1cm4gb3B0aW9ucz1vcHRpb25zfHx7fSx0aGlzLnNlbmQod20uTUlESV9TWVNURU1fTUVTU0FHRVMuY2xvY2ssdm9pZCAwLHRoaXMuX3BhcnNlVGltZVBhcmFtZXRlcihvcHRpb25zLnRpbWUpKSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLnNlbmRTdGFydD1mdW5jdGlvbihvcHRpb25zKXtyZXR1cm4gb3B0aW9ucz1vcHRpb25zfHx7fSx0aGlzLnNlbmQod20uTUlESV9TWVNURU1fTUVTU0FHRVMuc3RhcnQsdm9pZCAwLHRoaXMuX3BhcnNlVGltZVBhcmFtZXRlcihvcHRpb25zLnRpbWUpKSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLnNlbmRDb250aW51ZT1mdW5jdGlvbihvcHRpb25zKXtyZXR1cm4gb3B0aW9ucz1vcHRpb25zfHx7fSx0aGlzLnNlbmQod20uTUlESV9TWVNURU1fTUVTU0FHRVNbXCJjb250aW51ZVwiXSx2b2lkIDAsdGhpcy5fcGFyc2VUaW1lUGFyYW1ldGVyKG9wdGlvbnMudGltZSkpLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuc2VuZFN0b3A9ZnVuY3Rpb24ob3B0aW9ucyl7cmV0dXJuIG9wdGlvbnM9b3B0aW9uc3x8e30sdGhpcy5zZW5kKHdtLk1JRElfU1lTVEVNX01FU1NBR0VTLnN0b3Asdm9pZCAwLHRoaXMuX3BhcnNlVGltZVBhcmFtZXRlcihvcHRpb25zLnRpbWUpKSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLnNlbmRBY3RpdmVTZW5zaW5nPWZ1bmN0aW9uKG9wdGlvbnMpe3JldHVybiBvcHRpb25zPW9wdGlvbnN8fHt9LHRoaXMuc2VuZCh3bS5NSURJX1NZU1RFTV9NRVNTQUdFUy5hY3RpdmVzZW5zaW5nLFtdLHRoaXMuX3BhcnNlVGltZVBhcmFtZXRlcihvcHRpb25zLnRpbWUpKSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLnNlbmRSZXNldD1mdW5jdGlvbihvcHRpb25zKXtyZXR1cm4gb3B0aW9ucz1vcHRpb25zfHx7fSx0aGlzLnNlbmQod20uTUlESV9TWVNURU1fTUVTU0FHRVMucmVzZXQsdm9pZCAwLHRoaXMuX3BhcnNlVGltZVBhcmFtZXRlcihvcHRpb25zLnRpbWUpKSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLnN0b3BOb3RlPWZ1bmN0aW9uKG5vdGUsY2hhbm5lbCxvcHRpb25zKXtpZihcImFsbFwiPT09bm90ZSlyZXR1cm4gdGhpcy5zZW5kQ2hhbm5lbE1vZGUoXCJhbGxub3Rlc29mZlwiLDAsY2hhbm5lbCxvcHRpb25zKTt2YXIgblZlbG9jaXR5PTY0O3JldHVybiBvcHRpb25zPW9wdGlvbnN8fHt9LG9wdGlvbnMucmF3VmVsb2NpdHk/IWlzTmFOKG9wdGlvbnMudmVsb2NpdHkpJiZvcHRpb25zLnZlbG9jaXR5Pj0wJiZvcHRpb25zLnZlbG9jaXR5PD0xMjcmJihuVmVsb2NpdHk9b3B0aW9ucy52ZWxvY2l0eSk6IWlzTmFOKG9wdGlvbnMudmVsb2NpdHkpJiZvcHRpb25zLnZlbG9jaXR5Pj0wJiZvcHRpb25zLnZlbG9jaXR5PD0xJiYoblZlbG9jaXR5PTEyNypvcHRpb25zLnZlbG9jaXR5KSx0aGlzLl9jb252ZXJ0Tm90ZVRvQXJyYXkobm90ZSkuZm9yRWFjaChmdW5jdGlvbihpdGVtKXt3bS50b01JRElDaGFubmVscyhjaGFubmVsKS5mb3JFYWNoKGZ1bmN0aW9uKGNoKXt0aGlzLnNlbmQoKHdtLk1JRElfQ0hBTk5FTF9NRVNTQUdFUy5ub3Rlb2ZmPDw0KSsoY2gtMSksW2l0ZW0sTWF0aC5yb3VuZChuVmVsb2NpdHkpXSx0aGlzLl9wYXJzZVRpbWVQYXJhbWV0ZXIob3B0aW9ucy50aW1lKSl9LmJpbmQodGhpcykpfS5iaW5kKHRoaXMpKSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLnBsYXlOb3RlPWZ1bmN0aW9uKG5vdGUsY2hhbm5lbCxvcHRpb25zKXt2YXIgblZlbG9jaXR5PTY0O2lmKG9wdGlvbnM9b3B0aW9uc3x8e30sb3B0aW9ucy5yYXdWZWxvY2l0eT8haXNOYU4ob3B0aW9ucy52ZWxvY2l0eSkmJm9wdGlvbnMudmVsb2NpdHk+PTAmJm9wdGlvbnMudmVsb2NpdHk8PTEyNyYmKG5WZWxvY2l0eT1vcHRpb25zLnZlbG9jaXR5KTohaXNOYU4ob3B0aW9ucy52ZWxvY2l0eSkmJm9wdGlvbnMudmVsb2NpdHk+PTAmJm9wdGlvbnMudmVsb2NpdHk8PTEmJihuVmVsb2NpdHk9MTI3Km9wdGlvbnMudmVsb2NpdHkpLG9wdGlvbnMudGltZT10aGlzLl9wYXJzZVRpbWVQYXJhbWV0ZXIob3B0aW9ucy50aW1lKSx0aGlzLl9jb252ZXJ0Tm90ZVRvQXJyYXkobm90ZSkuZm9yRWFjaChmdW5jdGlvbihpdGVtKXt3bS50b01JRElDaGFubmVscyhjaGFubmVsKS5mb3JFYWNoKGZ1bmN0aW9uKGNoKXt0aGlzLnNlbmQoKHdtLk1JRElfQ0hBTk5FTF9NRVNTQUdFUy5ub3Rlb248PDQpKyhjaC0xKSxbaXRlbSxNYXRoLnJvdW5kKG5WZWxvY2l0eSldLG9wdGlvbnMudGltZSl9LmJpbmQodGhpcykpfS5iaW5kKHRoaXMpKSwhaXNOYU4ob3B0aW9ucy5kdXJhdGlvbikpe29wdGlvbnMuZHVyYXRpb248PTAmJihvcHRpb25zLmR1cmF0aW9uPTApO3ZhciBuUmVsZWFzZT02NDtvcHRpb25zLnJhd1ZlbG9jaXR5PyFpc05hTihvcHRpb25zLnJlbGVhc2UpJiZvcHRpb25zLnJlbGVhc2U+PTAmJm9wdGlvbnMucmVsZWFzZTw9MTI3JiYoblJlbGVhc2U9b3B0aW9ucy5yZWxlYXNlKTohaXNOYU4ob3B0aW9ucy5yZWxlYXNlKSYmb3B0aW9ucy5yZWxlYXNlPj0wJiZvcHRpb25zLnJlbGVhc2U8PTEmJihuUmVsZWFzZT0xMjcqb3B0aW9ucy5yZWxlYXNlKSx0aGlzLl9jb252ZXJ0Tm90ZVRvQXJyYXkobm90ZSkuZm9yRWFjaChmdW5jdGlvbihpdGVtKXt3bS50b01JRElDaGFubmVscyhjaGFubmVsKS5mb3JFYWNoKGZ1bmN0aW9uKGNoKXt0aGlzLnNlbmQoKHdtLk1JRElfQ0hBTk5FTF9NRVNTQUdFUy5ub3Rlb2ZmPDw0KSsoY2gtMSksW2l0ZW0sTWF0aC5yb3VuZChuUmVsZWFzZSldLChvcHRpb25zLnRpbWV8fHdtLnRpbWUpK29wdGlvbnMuZHVyYXRpb24pfS5iaW5kKHRoaXMpKX0uYmluZCh0aGlzKSl9cmV0dXJuIHRoaXN9LE91dHB1dC5wcm90b3R5cGUuc2VuZEtleUFmdGVydG91Y2g9ZnVuY3Rpb24obm90ZSxjaGFubmVsLHByZXNzdXJlLG9wdGlvbnMpe3ZhciB0aGF0PXRoaXM7aWYob3B0aW9ucz1vcHRpb25zfHx7fSwxPmNoYW5uZWx8fGNoYW5uZWw+MTYpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgY2hhbm5lbCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTYuXCIpOyhpc05hTihwcmVzc3VyZSl8fDA+cHJlc3N1cmV8fHByZXNzdXJlPjEpJiYocHJlc3N1cmU9LjUpO3ZhciBuUHJlc3N1cmU9TWF0aC5yb3VuZCgxMjcqcHJlc3N1cmUpO3JldHVybiB0aGlzLl9jb252ZXJ0Tm90ZVRvQXJyYXkobm90ZSkuZm9yRWFjaChmdW5jdGlvbihpdGVtKXt3bS50b01JRElDaGFubmVscyhjaGFubmVsKS5mb3JFYWNoKGZ1bmN0aW9uKGNoKXt0aGF0LnNlbmQoKHdtLk1JRElfQ0hBTk5FTF9NRVNTQUdFUy5rZXlhZnRlcnRvdWNoPDw0KSsoY2gtMSksW2l0ZW0sblByZXNzdXJlXSx0aGF0Ll9wYXJzZVRpbWVQYXJhbWV0ZXIob3B0aW9ucy50aW1lKSl9KX0pLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuc2VuZENvbnRyb2xDaGFuZ2U9ZnVuY3Rpb24oY29udHJvbGxlcix2YWx1ZSxjaGFubmVsLG9wdGlvbnMpe2lmKG9wdGlvbnM9b3B0aW9uc3x8e30sXCJzdHJpbmdcIj09dHlwZW9mIGNvbnRyb2xsZXIpe2lmKGNvbnRyb2xsZXI9d20uTUlESV9DT05UUk9MX0NIQU5HRV9NRVNTQUdFU1tjb250cm9sbGVyXSwhY29udHJvbGxlcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBjb250cm9sbGVyIG5hbWUuXCIpfWVsc2UgaWYoY29udHJvbGxlcj1NYXRoLmZsb29yKGNvbnRyb2xsZXIpLCEoY29udHJvbGxlcj49MCYmMTE5Pj1jb250cm9sbGVyKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNvbnRyb2xsZXIgbnVtYmVycyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTE5LlwiKTtpZih2YWx1ZT1NYXRoLmZsb29yKHZhbHVlKXx8MCwhKHZhbHVlPj0wJiYxMjc+PXZhbHVlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNvbnRyb2xsZXIgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEyNy5cIik7cmV0dXJuIHdtLnRvTUlESUNoYW5uZWxzKGNoYW5uZWwpLmZvckVhY2goZnVuY3Rpb24oY2gpe3RoaXMuc2VuZCgod20uTUlESV9DSEFOTkVMX01FU1NBR0VTLmNvbnRyb2xjaGFuZ2U8PDQpKyhjaC0xKSxbY29udHJvbGxlcix2YWx1ZV0sdGhpcy5fcGFyc2VUaW1lUGFyYW1ldGVyKG9wdGlvbnMudGltZSkpfS5iaW5kKHRoaXMpKSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLl9zZWxlY3RSZWdpc3RlcmVkUGFyYW1ldGVyPWZ1bmN0aW9uKHBhcmFtZXRlcixjaGFubmVsLHRpbWUpe3ZhciB0aGF0PXRoaXM7aWYocGFyYW1ldGVyWzBdPU1hdGguZmxvb3IocGFyYW1ldGVyWzBdKSwhKHBhcmFtZXRlclswXT49MCYmcGFyYW1ldGVyWzBdPD0xMjcpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIGNvbnRyb2w2NSB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTI3XCIpO2lmKHBhcmFtZXRlclsxXT1NYXRoLmZsb29yKHBhcmFtZXRlclsxXSksIShwYXJhbWV0ZXJbMV0+PTAmJnBhcmFtZXRlclsxXTw9MTI3KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSBjb250cm9sNjQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEyN1wiKTtyZXR1cm4gd20udG9NSURJQ2hhbm5lbHMoY2hhbm5lbCkuZm9yRWFjaChmdW5jdGlvbihjaCl7dGhhdC5zZW5kQ29udHJvbENoYW5nZSgxMDEscGFyYW1ldGVyWzBdLGNoYW5uZWwse3RpbWU6dGltZX0pLHRoYXQuc2VuZENvbnRyb2xDaGFuZ2UoMTAwLHBhcmFtZXRlclsxXSxjaGFubmVsLHt0aW1lOnRpbWV9KX0pLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuX3NlbGVjdE5vblJlZ2lzdGVyZWRQYXJhbWV0ZXI9ZnVuY3Rpb24ocGFyYW1ldGVyLGNoYW5uZWwsdGltZSl7dmFyIHRoYXQ9dGhpcztpZihwYXJhbWV0ZXJbMF09TWF0aC5mbG9vcihwYXJhbWV0ZXJbMF0pLCEocGFyYW1ldGVyWzBdPj0wJiZwYXJhbWV0ZXJbMF08PTEyNykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgY29udHJvbDYzIHZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMjdcIik7aWYocGFyYW1ldGVyWzFdPU1hdGguZmxvb3IocGFyYW1ldGVyWzFdKSwhKHBhcmFtZXRlclsxXT49MCYmcGFyYW1ldGVyWzFdPD0xMjcpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIGNvbnRyb2w2MiB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTI3XCIpO3JldHVybiB3bS50b01JRElDaGFubmVscyhjaGFubmVsKS5mb3JFYWNoKGZ1bmN0aW9uKGNoKXt0aGF0LnNlbmRDb250cm9sQ2hhbmdlKDk5LHBhcmFtZXRlclswXSxjaGFubmVsLHt0aW1lOnRpbWV9KSx0aGF0LnNlbmRDb250cm9sQ2hhbmdlKDk4LHBhcmFtZXRlclsxXSxjaGFubmVsLHt0aW1lOnRpbWV9KX0pLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuX3NldEN1cnJlbnRSZWdpc3RlcmVkUGFyYW1ldGVyPWZ1bmN0aW9uKGRhdGEsY2hhbm5lbCx0aW1lKXt2YXIgdGhhdD10aGlzO2lmKGRhdGE9W10uY29uY2F0KGRhdGEpLGRhdGFbMF09TWF0aC5mbG9vcihkYXRhWzBdKSwhKGRhdGFbMF0+PTAmJmRhdGFbMF08PTEyNykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgbXNiIHZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMjdcIik7cmV0dXJuIHdtLnRvTUlESUNoYW5uZWxzKGNoYW5uZWwpLmZvckVhY2goZnVuY3Rpb24oY2gpe3RoYXQuc2VuZENvbnRyb2xDaGFuZ2UoNixkYXRhWzBdLGNoYW5uZWwse3RpbWU6dGltZX0pfSksZGF0YVsxXT1NYXRoLmZsb29yKGRhdGFbMV0pLGRhdGFbMV0+PTAmJmRhdGFbMV08PTEyNyYmd20udG9NSURJQ2hhbm5lbHMoY2hhbm5lbCkuZm9yRWFjaChmdW5jdGlvbihjaCl7dGhhdC5zZW5kQ29udHJvbENoYW5nZSgzOCxkYXRhWzFdLGNoYW5uZWwse3RpbWU6dGltZX0pfSksdGhpc30sT3V0cHV0LnByb3RvdHlwZS5fZGVzZWxlY3RSZWdpc3RlcmVkUGFyYW1ldGVyPWZ1bmN0aW9uKGNoYW5uZWwsdGltZSl7dmFyIHRoYXQ9dGhpcztyZXR1cm4gd20udG9NSURJQ2hhbm5lbHMoY2hhbm5lbCkuZm9yRWFjaChmdW5jdGlvbihjaCl7dGhhdC5zZW5kQ29udHJvbENoYW5nZSgxMDEsMTI3LGNoYW5uZWwse3RpbWU6dGltZX0pLHRoYXQuc2VuZENvbnRyb2xDaGFuZ2UoMTAwLDEyNyxjaGFubmVsLHt0aW1lOnRpbWV9KX0pLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuc2V0UmVnaXN0ZXJlZFBhcmFtZXRlcj1mdW5jdGlvbihwYXJhbWV0ZXIsZGF0YSxjaGFubmVsLG9wdGlvbnMpe3ZhciB0aGF0PXRoaXM7aWYob3B0aW9ucz1vcHRpb25zfHx7fSwhQXJyYXkuaXNBcnJheShwYXJhbWV0ZXIpKXtpZighd20uTUlESV9SRUdJU1RFUkVEX1BBUkFNRVRFUltwYXJhbWV0ZXJdKXRocm93IG5ldyBFcnJvcihcIlRoZSBzcGVjaWZpZWQgcGFyYW1ldGVyIGlzIG5vdCBhdmFpbGFibGUuXCIpO3BhcmFtZXRlcj13bS5NSURJX1JFR0lTVEVSRURfUEFSQU1FVEVSW3BhcmFtZXRlcl19cmV0dXJuIHdtLnRvTUlESUNoYW5uZWxzKGNoYW5uZWwpLmZvckVhY2goZnVuY3Rpb24oY2gpe3RoYXQuX3NlbGVjdFJlZ2lzdGVyZWRQYXJhbWV0ZXIocGFyYW1ldGVyLGNoYW5uZWwsb3B0aW9ucy50aW1lKSx0aGF0Ll9zZXRDdXJyZW50UmVnaXN0ZXJlZFBhcmFtZXRlcihkYXRhLGNoYW5uZWwsb3B0aW9ucy50aW1lKSx0aGF0Ll9kZXNlbGVjdFJlZ2lzdGVyZWRQYXJhbWV0ZXIoY2hhbm5lbCxvcHRpb25zLnRpbWUpfSksdGhpc30sT3V0cHV0LnByb3RvdHlwZS5zZXROb25SZWdpc3RlcmVkUGFyYW1ldGVyPWZ1bmN0aW9uKHBhcmFtZXRlcixkYXRhLGNoYW5uZWwsb3B0aW9ucyl7dmFyIHRoYXQ9dGhpcztpZihvcHRpb25zPW9wdGlvbnN8fHt9LCEocGFyYW1ldGVyWzBdPj0wJiZwYXJhbWV0ZXJbMF08PTEyNyYmcGFyYW1ldGVyWzFdPj0wJiZwYXJhbWV0ZXJbMV08PTEyNykpdGhyb3cgbmV3IEVycm9yKFwiUG9zaXRpb24gMCBhbmQgMSBvZiB0aGUgMi1wb3NpdGlvbiBwYXJhbWV0ZXIgYXJyYXkgbXVzdCBib3RoIGJlIGJldHdlZW4gMCBhbmQgMTI3LlwiKTtyZXR1cm4gZGF0YT1bXS5jb25jYXQoZGF0YSksd20udG9NSURJQ2hhbm5lbHMoY2hhbm5lbCkuZm9yRWFjaChmdW5jdGlvbihjaCl7dGhhdC5fc2VsZWN0Tm9uUmVnaXN0ZXJlZFBhcmFtZXRlcihwYXJhbWV0ZXIsY2hhbm5lbCxvcHRpb25zLnRpbWUpLHRoYXQuX3NldEN1cnJlbnRSZWdpc3RlcmVkUGFyYW1ldGVyKGRhdGEsY2hhbm5lbCxvcHRpb25zLnRpbWUpLHRoYXQuX2Rlc2VsZWN0UmVnaXN0ZXJlZFBhcmFtZXRlcihjaGFubmVsLG9wdGlvbnMudGltZSl9KSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLmluY3JlbWVudFJlZ2lzdGVyZWRQYXJhbWV0ZXI9ZnVuY3Rpb24ocGFyYW1ldGVyLGNoYW5uZWwsb3B0aW9ucyl7dmFyIHRoYXQ9dGhpcztpZihvcHRpb25zPW9wdGlvbnN8fHt9LCFBcnJheS5pc0FycmF5KHBhcmFtZXRlcikpe2lmKCF3bS5NSURJX1JFR0lTVEVSRURfUEFSQU1FVEVSW3BhcmFtZXRlcl0pdGhyb3cgbmV3IEVycm9yKFwiVGhlIHNwZWNpZmllZCBwYXJhbWV0ZXIgaXMgbm90IGF2YWlsYWJsZS5cIik7cGFyYW1ldGVyPXdtLk1JRElfUkVHSVNURVJFRF9QQVJBTUVURVJbcGFyYW1ldGVyXX1yZXR1cm4gd20udG9NSURJQ2hhbm5lbHMoY2hhbm5lbCkuZm9yRWFjaChmdW5jdGlvbihjaCl7dGhhdC5fc2VsZWN0UmVnaXN0ZXJlZFBhcmFtZXRlcihwYXJhbWV0ZXIsY2hhbm5lbCxvcHRpb25zLnRpbWUpLHRoYXQuc2VuZENvbnRyb2xDaGFuZ2UoOTYsMCxjaGFubmVsLHt0aW1lOm9wdGlvbnMudGltZX0pLHRoYXQuX2Rlc2VsZWN0UmVnaXN0ZXJlZFBhcmFtZXRlcihjaGFubmVsLG9wdGlvbnMudGltZSl9KSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLmRlY3JlbWVudFJlZ2lzdGVyZWRQYXJhbWV0ZXI9ZnVuY3Rpb24ocGFyYW1ldGVyLGNoYW5uZWwsb3B0aW9ucyl7aWYob3B0aW9ucz1vcHRpb25zfHx7fSwhQXJyYXkuaXNBcnJheShwYXJhbWV0ZXIpKXtpZighd20uTUlESV9SRUdJU1RFUkVEX1BBUkFNRVRFUltwYXJhbWV0ZXJdKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgc3BlY2lmaWVkIHBhcmFtZXRlciBpcyBub3QgYXZhaWxhYmxlLlwiKTtwYXJhbWV0ZXI9d20uTUlESV9SRUdJU1RFUkVEX1BBUkFNRVRFUltwYXJhbWV0ZXJdfXJldHVybiB3bS50b01JRElDaGFubmVscyhjaGFubmVsKS5mb3JFYWNoKGZ1bmN0aW9uKGNoKXt0aGlzLl9zZWxlY3RSZWdpc3RlcmVkUGFyYW1ldGVyKHBhcmFtZXRlcixjaGFubmVsLG9wdGlvbnMudGltZSksdGhpcy5zZW5kQ29udHJvbENoYW5nZSg5NywwLGNoYW5uZWwse3RpbWU6b3B0aW9ucy50aW1lfSksdGhpcy5fZGVzZWxlY3RSZWdpc3RlcmVkUGFyYW1ldGVyKGNoYW5uZWwsb3B0aW9ucy50aW1lKX0uYmluZCh0aGlzKSksdGhpc30sT3V0cHV0LnByb3RvdHlwZS5zZXRQaXRjaEJlbmRSYW5nZT1mdW5jdGlvbihzZW1pdG9uZXMsY2VudHMsY2hhbm5lbCxvcHRpb25zKXt2YXIgdGhhdD10aGlzO2lmKG9wdGlvbnM9b3B0aW9uc3x8e30sc2VtaXRvbmVzPU1hdGguZmxvb3Ioc2VtaXRvbmVzKXx8MCwhKHNlbWl0b25lcz49MCYmMTI3Pj1zZW1pdG9uZXMpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIHNlbWl0b25lcyB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTI3XCIpO2lmKGNlbnRzPU1hdGguZmxvb3IoY2VudHMpfHwwLCEoY2VudHM+PTAmJjEyNz49Y2VudHMpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIGNlbnRzIHZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMjdcIik7cmV0dXJuIHdtLnRvTUlESUNoYW5uZWxzKGNoYW5uZWwpLmZvckVhY2goZnVuY3Rpb24oY2gpe3RoYXQuc2V0UmVnaXN0ZXJlZFBhcmFtZXRlcihcInBpdGNoYmVuZHJhbmdlXCIsW3NlbWl0b25lcyxjZW50c10sY2hhbm5lbCx7dGltZTpvcHRpb25zLnRpbWV9KX0pLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuc2V0TW9kdWxhdGlvblJhbmdlPWZ1bmN0aW9uKHNlbWl0b25lcyxjZW50cyxjaGFubmVsLG9wdGlvbnMpe3ZhciB0aGF0PXRoaXM7aWYob3B0aW9ucz1vcHRpb25zfHx7fSxzZW1pdG9uZXM9TWF0aC5mbG9vcihzZW1pdG9uZXMpfHwwLCEoc2VtaXRvbmVzPj0wJiYxMjc+PXNlbWl0b25lcykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgc2VtaXRvbmVzIHZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMjdcIik7aWYoY2VudHM9TWF0aC5mbG9vcihjZW50cyl8fDAsIShjZW50cz49MCYmMTI3Pj1jZW50cykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgY2VudHMgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEyN1wiKTtyZXR1cm4gd20udG9NSURJQ2hhbm5lbHMoY2hhbm5lbCkuZm9yRWFjaChmdW5jdGlvbihjaCl7dGhhdC5zZXRSZWdpc3RlcmVkUGFyYW1ldGVyKFwibW9kdWxhdGlvbnJhbmdlXCIsW3NlbWl0b25lcyxjZW50c10sY2hhbm5lbCx7dGltZTpvcHRpb25zLnRpbWV9KX0pLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuc2V0TWFzdGVyVHVuaW5nPWZ1bmN0aW9uKHZhbHVlLGNoYW5uZWwsb3B0aW9ucyl7dmFyIHRoYXQ9dGhpcztpZihvcHRpb25zPW9wdGlvbnN8fHt9LHZhbHVlPXBhcnNlRmxvYXQodmFsdWUpfHwwLC02NT49dmFsdWV8fHZhbHVlPj02NCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSB2YWx1ZSBtdXN0IGJlIGEgZGVjaW1hbCBudW1iZXIgbGFyZ2VyIHRoYW4gLTY1IGFuZCBzbWFsbGVyIHRoYW4gNjQuXCIpO3ZhciBjb2Fyc2U9TWF0aC5mbG9vcih2YWx1ZSkrNjQsZmluZT12YWx1ZS1NYXRoLmZsb29yKHZhbHVlKTtmaW5lPU1hdGgucm91bmQoKGZpbmUrMSkvMioxNjM4Myk7dmFyIG1zYj1maW5lPj43JjEyNyxsc2I9MTI3JmZpbmU7cmV0dXJuIHdtLnRvTUlESUNoYW5uZWxzKGNoYW5uZWwpLmZvckVhY2goZnVuY3Rpb24oY2gpe3RoYXQuc2V0UmVnaXN0ZXJlZFBhcmFtZXRlcihcImNoYW5uZWxjb2Fyc2V0dW5pbmdcIixjb2Fyc2UsY2hhbm5lbCx7dGltZTpvcHRpb25zLnRpbWV9KSx0aGF0LnNldFJlZ2lzdGVyZWRQYXJhbWV0ZXIoXCJjaGFubmVsZmluZXR1bmluZ1wiLFttc2IsbHNiXSxjaGFubmVsLHt0aW1lOm9wdGlvbnMudGltZX0pfSksdGhpc30sT3V0cHV0LnByb3RvdHlwZS5zZXRUdW5pbmdQcm9ncmFtPWZ1bmN0aW9uKHZhbHVlLGNoYW5uZWwsb3B0aW9ucyl7dmFyIHRoYXQ9dGhpcztpZihvcHRpb25zPW9wdGlvbnN8fHt9LHZhbHVlPU1hdGguZmxvb3IodmFsdWUpLCEodmFsdWU+PTAmJjEyNz49dmFsdWUpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIHByb2dyYW0gdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEyN1wiKTtyZXR1cm4gd20udG9NSURJQ2hhbm5lbHMoY2hhbm5lbCkuZm9yRWFjaChmdW5jdGlvbihjaCl7dGhhdC5zZXRSZWdpc3RlcmVkUGFyYW1ldGVyKFwidHVuaW5ncHJvZ3JhbVwiLHZhbHVlLGNoYW5uZWwse3RpbWU6b3B0aW9ucy50aW1lfSl9KSx0aGlzfSxPdXRwdXQucHJvdG90eXBlLnNldFR1bmluZ0Jhbms9ZnVuY3Rpb24odmFsdWUsY2hhbm5lbCxvcHRpb25zKXt2YXIgdGhhdD10aGlzO2lmKG9wdGlvbnM9b3B0aW9uc3x8e30sdmFsdWU9TWF0aC5mbG9vcih2YWx1ZSl8fDAsISh2YWx1ZT49MCYmMTI3Pj12YWx1ZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgYmFuayB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTI3XCIpO3JldHVybiB3bS50b01JRElDaGFubmVscyhjaGFubmVsKS5mb3JFYWNoKGZ1bmN0aW9uKGNoKXt0aGF0LnNldFJlZ2lzdGVyZWRQYXJhbWV0ZXIoXCJ0dW5pbmdiYW5rXCIsdmFsdWUsY2hhbm5lbCx7dGltZTpvcHRpb25zLnRpbWV9KX0pLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuc2VuZENoYW5uZWxNb2RlPWZ1bmN0aW9uKGNvbW1hbmQsdmFsdWUsY2hhbm5lbCxvcHRpb25zKXtpZihvcHRpb25zPW9wdGlvbnN8fHt9LFwic3RyaW5nXCI9PXR5cGVvZiBjb21tYW5kKXtpZihjb21tYW5kPXdtLk1JRElfQ0hBTk5FTF9NT0RFX01FU1NBR0VTW2NvbW1hbmRdLCFjb21tYW5kKXRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGNoYW5uZWwgbW9kZSBtZXNzYWdlIG5hbWUuXCIpfWVsc2UgaWYoY29tbWFuZD1NYXRoLmZsb29yKGNvbW1hbmQpLCEoY29tbWFuZD49MTIwJiYxMjc+PWNvbW1hbmQpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQ2hhbm5lbCBtb2RlIG51bWVyaWNhbCBpZGVudGlmaWVycyBtdXN0IGJlIGJldHdlZW4gMTIwIGFuZCAxMjcuXCIpO2lmKHZhbHVlPU1hdGguZmxvb3IodmFsdWUpfHwwLDA+dmFsdWV8fHZhbHVlPjEyNyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlZhbHVlIG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDEyNy5cIik7cmV0dXJuIHdtLnRvTUlESUNoYW5uZWxzKGNoYW5uZWwpLmZvckVhY2goZnVuY3Rpb24oY2gpe3RoaXMuc2VuZCgod20uTUlESV9DSEFOTkVMX01FU1NBR0VTLmNoYW5uZWxtb2RlPDw0KSsoY2gtMSksW2NvbW1hbmQsdmFsdWVdLHRoaXMuX3BhcnNlVGltZVBhcmFtZXRlcihvcHRpb25zLnRpbWUpKX0uYmluZCh0aGlzKSksdGhpc30sT3V0cHV0LnByb3RvdHlwZS5zZW5kUHJvZ3JhbUNoYW5nZT1mdW5jdGlvbihwcm9ncmFtLGNoYW5uZWwsb3B0aW9ucyl7XG52YXIgdGhhdD10aGlzO2lmKG9wdGlvbnM9b3B0aW9uc3x8e30scHJvZ3JhbT1NYXRoLmZsb29yKHByb2dyYW0pLGlzTmFOKHByb2dyYW0pfHwwPnByb2dyYW18fHByb2dyYW0+MTI3KXRocm93IG5ldyBSYW5nZUVycm9yKFwiUHJvZ3JhbSBudW1iZXJzIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMjcuXCIpO3JldHVybiB3bS50b01JRElDaGFubmVscyhjaGFubmVsKS5mb3JFYWNoKGZ1bmN0aW9uKGNoKXt0aGF0LnNlbmQoKHdtLk1JRElfQ0hBTk5FTF9NRVNTQUdFUy5wcm9ncmFtY2hhbmdlPDw0KSsoY2gtMSksW3Byb2dyYW1dLHRoYXQuX3BhcnNlVGltZVBhcmFtZXRlcihvcHRpb25zLnRpbWUpKX0pLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuc2VuZENoYW5uZWxBZnRlcnRvdWNoPWZ1bmN0aW9uKHByZXNzdXJlLGNoYW5uZWwsb3B0aW9ucyl7dmFyIHRoYXQ9dGhpcztvcHRpb25zPW9wdGlvbnN8fHt9LHByZXNzdXJlPXBhcnNlRmxvYXQocHJlc3N1cmUpLChpc05hTihwcmVzc3VyZSl8fDA+cHJlc3N1cmV8fHByZXNzdXJlPjEpJiYocHJlc3N1cmU9LjUpO3ZhciBuUHJlc3N1cmU9TWF0aC5yb3VuZCgxMjcqcHJlc3N1cmUpO3JldHVybiB3bS50b01JRElDaGFubmVscyhjaGFubmVsKS5mb3JFYWNoKGZ1bmN0aW9uKGNoKXt0aGF0LnNlbmQoKHdtLk1JRElfQ0hBTk5FTF9NRVNTQUdFUy5jaGFubmVsYWZ0ZXJ0b3VjaDw8NCkrKGNoLTEpLFtuUHJlc3N1cmVdLHRoYXQuX3BhcnNlVGltZVBhcmFtZXRlcihvcHRpb25zLnRpbWUpKX0pLHRoaXN9LE91dHB1dC5wcm90b3R5cGUuc2VuZFBpdGNoQmVuZD1mdW5jdGlvbihiZW5kLGNoYW5uZWwsb3B0aW9ucyl7dmFyIHRoYXQ9dGhpcztpZihvcHRpb25zPW9wdGlvbnN8fHt9LGlzTmFOKGJlbmQpfHwtMT5iZW5kfHxiZW5kPjEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJQaXRjaCBiZW5kIHZhbHVlIG11c3QgYmUgYmV0d2VlbiAtMSBhbmQgMS5cIik7dmFyIG5MZXZlbD1NYXRoLnJvdW5kKChiZW5kKzEpLzIqMTYzODMpLG1zYj1uTGV2ZWw+PjcmMTI3LGxzYj0xMjcmbkxldmVsO3JldHVybiB3bS50b01JRElDaGFubmVscyhjaGFubmVsKS5mb3JFYWNoKGZ1bmN0aW9uKGNoKXt0aGF0LnNlbmQoKHdtLk1JRElfQ0hBTk5FTF9NRVNTQUdFUy5waXRjaGJlbmQ8PDQpKyhjaC0xKSxbbHNiLG1zYl0sdGhhdC5fcGFyc2VUaW1lUGFyYW1ldGVyKG9wdGlvbnMudGltZSkpfSksdGhpc30sT3V0cHV0LnByb3RvdHlwZS5fcGFyc2VUaW1lUGFyYW1ldGVyPWZ1bmN0aW9uKHRpbWUpe3ZhciBwYXJzZWQsdmFsdWU7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHRpbWUmJlwiK1wiPT09dGltZS5zdWJzdHJpbmcoMCwxKT8ocGFyc2VkPXBhcnNlRmxvYXQodGltZSkscGFyc2VkJiZwYXJzZWQ+MCYmKHZhbHVlPXdtLnRpbWUrcGFyc2VkKSk6KHBhcnNlZD1wYXJzZUZsb2F0KHRpbWUpLHBhcnNlZD53bS50aW1lJiYodmFsdWU9cGFyc2VkKSksdmFsdWV9LE91dHB1dC5wcm90b3R5cGUuX2NvbnZlcnROb3RlVG9BcnJheT1mdW5jdGlvbihub3RlKXt2YXIgbm90ZXM9W107cmV0dXJuIEFycmF5LmlzQXJyYXkobm90ZSl8fChub3RlPVtub3RlXSksbm90ZS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pe25vdGVzLnB1c2god20uZ3Vlc3NOb3RlTnVtYmVyKGl0ZW0pKX0pLG5vdGVzfSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJlwib2JqZWN0XCI9PXR5cGVvZiBkZWZpbmUuYW1kP2RlZmluZShbXSxmdW5jdGlvbigpe3JldHVybiB3bX0pOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPXdtOnNjb3BlLldlYk1pZGl8fChzY29wZS5XZWJNaWRpPXdtKX0odGhpcyk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3dlYm1pZGkvd2VibWlkaS5taW4uanNcbi8vIG1vZHVsZSBpZCA9IDE1NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG5cdHRocm93IG5ldyBFcnJvcihcImRlZmluZSBjYW5ub3QgYmUgdXNlZCBpbmRpcmVjdFwiKTtcclxufTtcclxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gKHdlYnBhY2spL2J1aWxkaW4vYW1kLWRlZmluZS5qc1xuLy8gbW9kdWxlIGlkID0gMTU2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIGdsb2JhbHMgX193ZWJwYWNrX2FtZF9vcHRpb25zX18gKi9cclxubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXztcclxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gKHdlYnBhY2spL2J1aWxkaW4vYW1kLW9wdGlvbnMuanNcbi8vIG1vZHVsZSBpZCA9IDE1N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAoaWdub3JlZCkgKi9cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyB1dGlsIChpZ25vcmVkKVxuLy8gbW9kdWxlIGlkID0gMTU4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file