breeze-client 2.1.5 → 2.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/adapter-data-service-odata/adapter-data-service-odata.d.ts +0 -1
  2. package/breeze-client.metadata.json +1 -1
  3. package/bundles/breeze-client-adapter-data-service-odata.umd.js +4 -0
  4. package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +1 -1
  5. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +1 -1
  6. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +1 -1
  7. package/bundles/breeze-client-adapter-data-service-webapi.umd.js +8 -1
  8. package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +1 -1
  9. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +1 -1
  10. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +1 -1
  11. package/bundles/breeze-client.umd.js +103 -20
  12. package/bundles/breeze-client.umd.js.map +1 -1
  13. package/bundles/breeze-client.umd.min.js +1 -1
  14. package/bundles/breeze-client.umd.min.js.map +1 -1
  15. package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +5 -1
  16. package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +9 -2
  17. package/esm2015/src/abstract-data-service-adapter.js +1 -1
  18. package/esm2015/src/core.js +14 -9
  19. package/esm2015/src/data-type.js +60 -1
  20. package/esm2015/src/entity-action.js +1 -1
  21. package/esm2015/src/entity-aspect.js +6 -8
  22. package/esm2015/src/entity-manager.js +1 -1
  23. package/esm2015/src/entity-metadata.js +1 -1
  24. package/esm2015/src/entity-query.js +1 -1
  25. package/esm2015/src/entity-state.js +9 -1
  26. package/esm2015/src/enum.js +1 -1
  27. package/esm2015/src/key-generator.js +1 -1
  28. package/esm2015/src/mapping-context.js +9 -3
  29. package/esm2015/src/predicate.js +12 -5
  30. package/esm5/adapter-data-service-odata/adapter-data-service-odata.js +5 -1
  31. package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +9 -2
  32. package/esm5/src/abstract-data-service-adapter.js +1 -1
  33. package/esm5/src/core.js +13 -8
  34. package/esm5/src/data-type.js +60 -1
  35. package/esm5/src/entity-action.js +1 -1
  36. package/esm5/src/entity-aspect.js +6 -8
  37. package/esm5/src/entity-manager.js +1 -1
  38. package/esm5/src/entity-metadata.js +1 -1
  39. package/esm5/src/entity-query.js +1 -1
  40. package/esm5/src/entity-state.js +9 -1
  41. package/esm5/src/enum.js +1 -1
  42. package/esm5/src/key-generator.js +1 -1
  43. package/esm5/src/mapping-context.js +9 -3
  44. package/esm5/src/predicate.js +12 -5
  45. package/fesm2015/breeze-client-adapter-data-service-odata.js +4 -0
  46. package/fesm2015/breeze-client-adapter-data-service-odata.js.map +1 -1
  47. package/fesm2015/breeze-client-adapter-data-service-webapi.js +9 -2
  48. package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +1 -1
  49. package/fesm2015/breeze-client.js +104 -21
  50. package/fesm2015/breeze-client.js.map +1 -1
  51. package/fesm5/breeze-client-adapter-data-service-odata.js +4 -0
  52. package/fesm5/breeze-client-adapter-data-service-odata.js.map +1 -1
  53. package/fesm5/breeze-client-adapter-data-service-webapi.js +9 -2
  54. package/fesm5/breeze-client-adapter-data-service-webapi.js.map +1 -1
  55. package/fesm5/breeze-client.js +103 -20
  56. package/fesm5/breeze-client.js.map +1 -1
  57. package/package.json +1 -1
  58. package/src/abstract-data-service-adapter.d.ts +0 -1
  59. package/src/data-type.d.ts +5 -0
  60. package/src/entity-aspect.d.ts +5 -5
  61. package/src/entity-manager.d.ts +4 -4
  62. package/src/entity-metadata.d.ts +37 -27
  63. package/src/entity-state.d.ts +4 -0
  64. package/src/mapping-context.d.ts +1 -1
  65. package/src/predicate.d.ts +4 -7
@@ -292,6 +292,7 @@ function toQueryString(obj) {
292
292
  }
293
293
  return parts.join("&");
294
294
  }
295
+ /** Transform data properties while unwrapping entities */
295
296
  function transformValue(prop, val) {
296
297
  if (prop.isUnmapped)
297
298
  return undefined;
@@ -300,6 +301,9 @@ function transformValue(prop, val) {
300
301
  // from other dateTimes. This fix compensates before the save.
301
302
  val = val && new Date(val.getTime() - (val.getTimezoneOffset() * 60000));
302
303
  }
304
+ else if (prop.dataType === breeze.DataType.DateOnly) {
305
+ val = breeze.DataType.toDateOnlyString(val);
306
+ }
303
307
  else if (prop.dataType.quoteJsonOData) {
304
308
  val = val != null ? val.toString() : val;
305
309
  }
@@ -463,4 +467,4 @@ webApiOData4Ctor.prototype.initialize = function () {
463
467
  webApiOData4Ctor.prototype.headers = { "OData-Version": "4.0" };
464
468
  breeze.config.registerAdapter("dataService", webApiOData4Ctor);
465
469
  export { ɵ0, ɵ1 };
466
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci1kYXRhLXNlcnZpY2Utb2RhdGEuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9icmVlemUtY2xpZW50L2FkYXB0ZXItZGF0YS1zZXJ2aWNlLW9kYXRhLyIsInNvdXJjZXMiOlsiYWRhcHRlci1kYXRhLXNlcnZpY2Utb2RhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVELElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFZdkIsY0FBYztBQUNkO0lBQTZDLDJDQUFpQztJQVE1RTtRQUFBLFlBQ0UsaUJBQU8sU0FFUjtRQVJELHNFQUFzRTtRQUN0RSx3RUFBd0U7UUFDeEUsc0ZBQXNGO1FBQ3RGLGFBQU8sR0FBRyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxDQUFDO1FBa04xQyx3QkFBa0IsR0FBOEIsSUFBSSxNQUFNLENBQUMsa0JBQWtCLENBQUM7WUFDNUUsSUFBSSxFQUFFLGVBQWU7WUFFckIsU0FBUyxFQUFFLFVBQVUsSUFBUyxFQUFFLGNBQXFDLEVBQUUsV0FBK0I7Z0JBQ3BHLElBQUksTUFBTSxHQUFRLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxJQUFJLElBQUksSUFBSTtvQkFBRSxPQUFPLE1BQU0sQ0FBQztnQkFDaEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDL0IsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO29CQUNwQixrRkFBa0Y7b0JBQ2xGLElBQUksY0FBYyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMzRSxJQUFJLEVBQUUsR0FBRyxjQUFjLElBQUksY0FBYyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMs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QUUsZUFBZSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxnQkFBdUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYnJlZXplIGZyb20gJ2JyZWV6ZS1jbGllbnQnO1xyXG5pbXBvcnQgeyBhcHBlbmRRdWVyeVN0cmluZ1BhcmFtZXRlciB9IGZyb20gJy4vYWRhcHRlci1jb3JlJztcclxuXHJcbmxldCBjb3JlID0gYnJlZXplLmNvcmU7XHJcblxyXG5kZWNsYXJlIHZhciB3aW5kb3c6IGFueTtcclxuZGVjbGFyZSB2YXIgZG9jdW1lbnQ6IGFueTtcclxuZGVjbGFyZSB2YXIgdXJsOiBhbnk7IC8vIG5lZWRlZCB0byBhY2Nlc3Mgbm9kZSdzIHVybC5wYXJzZVxyXG5kZWNsYXJlIHZhciBPRGF0YTogYW55O1xyXG5cclxuaW50ZXJmYWNlIE9EYXRhU2F2ZUNvbnRleHQgZXh0ZW5kcyBicmVlemUuU2F2ZUNvbnRleHQge1xyXG4gIHRlbXBLZXlzOiBicmVlemUuRW50aXR5S2V5W107XHJcbiAgY29udGVudEtleXM6IGJyZWV6ZS5FbnRpdHlbXTtcclxufVxyXG5cclxuLyoqIEBoaWRkZW4gKi9cclxuZXhwb3J0IGNsYXNzIERhdGFTZXJ2aWNlT0RhdGFBZGFwdGVyIGV4dGVuZHMgYnJlZXplLkFic3RyYWN0RGF0YVNlcnZpY2VBZGFwdGVyIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgcmVsYXRpdmVVcmw6IGJvb2xlYW4gfCAoKGRzOiBicmVlemUuRGF0YVNlcnZpY2UsIHVybDogc3RyaW5nKSA9PiBzdHJpbmcpO1xyXG4gIC8vIF9jYXRjaE5vQ29ubmVjdGlvbkVycm9yID0gYWJzdHJhY3REc2FQcm90by5fY2F0Y2hOb0Nvbm5lY3Rpb25FcnJvcjtcclxuICAvLyBjaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3IgPSBhYnN0cmFjdERzYVByb3RvLmNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvcjtcclxuICAvLyBfY3JlYXRlQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yID0gYWJzdHJhY3REc2FQcm90by5fY3JlYXRlQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yO1xyXG4gIGhlYWRlcnMgPSB7IFwiRGF0YVNlcnZpY2VWZXJzaW9uXCI6IFwiMi4wXCIgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5uYW1lID0gXCJPRGF0YVwiO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHJlZ2lzdGVyKGNvbmZpZz86IGJyZWV6ZS5CcmVlemVDb25maWcpIHtcclxuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCBicmVlemUuY29uZmlnO1xyXG4gICAgY29uZmlnLnJlZ2lzdGVyQWRhcHRlcihcImRhdGFTZXJ2aWNlXCIsIERhdGFTZXJ2aWNlT0RhdGFBZGFwdGVyKTtcclxuICAgIHJldHVybiBjb25maWcuaW5pdGlhbGl6ZUFkYXB0ZXJJbnN0YW5jZShcImRhdGFTZXJ2aWNlXCIsIFwiT0RhdGFcIiwgdHJ1ZSkgYXMgRGF0YVNlcnZpY2VPRGF0YUFkYXB0ZXI7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplKCkge1xyXG4gICAgT0RhdGEgPSBjb3JlLnJlcXVpcmVMaWIoXCJPRGF0YVwiLCBcIk5lZWRlZCB0byBzdXBwb3J0IHJlbW90ZSBPRGF0YSBzZXJ2aWNlc1wiKTtcclxuICAgIE9EYXRhLmpzb25IYW5kbGVyLnJlY29nbml6ZURhdGVzID0gdHJ1ZTtcclxuICB9XHJcblxyXG5cclxuICAvLyBBYnNvbHV0ZSBVUkwgaXMgdGhlIGRlZmF1bHQgYXMgb2YgQnJlZXplIDEuNS41LiAgXHJcbiAgLy8gVG8gdXNlIHJlbGF0aXZlIFVSTCAobGlrZSBwcmUtMS41LjUpLCBhZGQgYWRhcHRlckluc3RhbmNlLnJlbGF0aXZlVXJsID0gdHJ1ZTpcclxuICAvL1xyXG4gIC8vICAgICBsZXQgZHMgPSBicmVlemUuY29uZmlnLmluaXRpYWxpemVBZGFwdGVySW5zdGFuY2UoXCJkYXRhU2VydmljZVwiLCBcIndlYkFwaU9EYXRhXCIpO1xyXG4gIC8vICAgICBkcy5yZWxhdGl2ZVVybCA9IHRydWU7IFxyXG4gIC8vXHJcbiAgLy8gVG8gdXNlIGN1c3RvbSB1cmwgY29uc3RydWN0aW9uLCBhZGQgYWRhcHRlckluc3RhbmNlLnJlbGF0aXZlVXJsID0gbXlmdW5jdGlvbihkYXRhU2VydmljZSwgdXJsKTpcclxuICAvL1xyXG4gIC8vICAgICBsZXQgZHMgPSBicmVlemUuY29uZmlnLmluaXRpYWxpemVBZGFwdGVySW5zdGFuY2UoXCJkYXRhU2VydmljZVwiLCBcIndlYkFwaU9EYXRhXCIpO1xyXG4gIC8vICAgICBkcy5yZWxhdGl2ZVVybCA9IGZ1bmN0aW9uKGRhdGFTZXJ2aWNlLCB1cmwpIHtcclxuICAvLyAgICAgICAgcmV0dXJuIHNvbWVob3dDb252ZXJ0KHVybCk7XHJcbiAgLy8gICAgIH1cclxuICAvL1xyXG5cclxuICBmZXRjaE1ldGFkYXRhKG1ldGFkYXRhU3RvcmU6IGJyZWV6ZS5NZXRhZGF0YVN0b3JlLCBkYXRhU2VydmljZTogYnJlZXplLkRhdGFTZXJ2aWNlKSB7XHJcbiAgICBsZXQgc2VydmljZU5hbWUgPSBkYXRhU2VydmljZS5zZXJ2aWNlTmFtZTtcclxuXHJcbiAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICBpZiAodGhpcy5yZWxhdGl2ZVVybCA9PT0gdHJ1ZSkge1xyXG4gICAgICB1cmwgPSBkYXRhU2VydmljZS5xdWFsaWZ5VXJsKCckbWV0YWRhdGEnKTtcclxuICAgIH0gZWxzZSBpZiAoY29yZS5pc0Z1bmN0aW9uKHRoaXMucmVsYXRpdmVVcmwpKSB7XHJcbiAgICAgIHVybCA9ICh0aGlzLnJlbGF0aXZlVXJsIGFzIGFueSkoZGF0YVNlcnZpY2UsICckbWV0YWRhdGEnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHVybCA9IHRoaXMuZ2V0QWJzb2x1dGVVcmwoZGF0YVNlcnZpY2UsICckbWV0YWRhdGEnKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgbWhlYWRlcnMgPSBjb3JlLmV4dGVuZCh7fSwgdGhpcy5oZWFkZXJzKTtcclxuICAgIChtaGVhZGVycyBhcyBhbnkpLkFjY2VwdCA9ICdhcHBsaWNhdGlvbi8qOyBvZGF0YS5tZXRhZGF0YT1mdWxsJztcclxuXHJcbiAgICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgLy8gT0RhdGEucmVhZCh1cmwsXHJcbiAgICAgIE9EYXRhLnJlYWQoe1xyXG4gICAgICAgIHJlcXVlc3RVcmk6IHVybCxcclxuICAgICAgICAvLyBoZWFkZXJzOiB7IFwiQWNjZXB0XCI6IFwiYXBwbGljYXRpb24vanNvblwifVxyXG4gICAgICAgIGhlYWRlcnM6IG1oZWFkZXJzXHJcbiAgICAgIH0sXHJcbiAgICAgICAgZnVuY3Rpb24gKGRhdGE6IGFueSkge1xyXG4gICAgICAgICAgLy8gZGF0YS5kYXRhU2VydmljZXMuc2NoZW1hIGlzIGFuIGFycmF5IG9mIHNjaGVtYXMuIHdpdGggcHJvcGVydGllcyBvZlxyXG4gICAgICAgICAgLy8gZW50aXR5Q29udGFpbmVyW10sIGFzc29jaWF0aW9uW10sIGVudGl0eVR5cGVbXSwgYW5kIG5hbWVzcGFjZS5cclxuICAgICAgICAgIGlmICghZGF0YSB8fCAhZGF0YS5kYXRhU2VydmljZXMpIHtcclxuICAgICAgICAgICAgbGV0IGVycm9yID0gbmV3IEVycm9yKFwiTWV0YWRhdGEgcXVlcnkgZmFpbGVkIGZvcjogXCIgKyB1cmwpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBjc2RsTWV0YWRhdGEgPSBkYXRhLmRhdGFTZXJ2aWNlcztcclxuXHJcbiAgICAgICAgICAvLyBtaWdodCBoYXZlIGJlZW4gZmV0Y2hlZCBieSBhbm90aGVyIHF1ZXJ5XHJcbiAgICAgICAgICBpZiAoIW1ldGFkYXRhU3RvcmUuaGFzTWV0YWRhdGFGb3Ioc2VydmljZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgbWV0YWRhdGFTdG9yZS5pbXBvcnRNZXRhZGF0YShjc2RsTWV0YWRhdGEpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoXCJNZXRhZGF0YSBxdWVyeSBmYWlsZWQgZm9yIFwiICsgdXJsICsgXCI7IFVuYWJsZSB0byBwcm9jZXNzIHJldHVybmVkIG1ldGFkYXRhOiBcIiArIGUubWVzc2FnZSkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBtZXRhZGF0YVN0b3JlLmFkZERhdGFTZXJ2aWNlKGRhdGFTZXJ2aWNlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZShjc2RsTWV0YWRhdGEpO1xyXG5cclxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgbGV0IGVyciA9IGNyZWF0ZUVycm9yKGVycm9yLCB1cmwpO1xyXG4gICAgICAgICAgZXJyLm1lc3NhZ2UgPSBcIk1ldGFkYXRhIHF1ZXJ5IGZhaWxlZCBmb3I6IFwiICsgdXJsICsgXCI7IFwiICsgKGVyci5tZXNzYWdlIHx8IFwiXCIpO1xyXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgT0RhdGEubWV0YWRhdGFIYW5kbGVyXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgZXhlY3V0ZVF1ZXJ5KG1hcHBpbmdDb250ZXh0OiBicmVlemUuTWFwcGluZ0NvbnRleHQpIHtcclxuICAgIGxldCB1cmw6IHN0cmluZztcclxuICAgIGlmICh0aGlzLnJlbGF0aXZlVXJsID09PSB0cnVlKSB7XHJcbiAgICAgIHVybCA9IG1hcHBpbmdDb250ZXh0LmdldFVybCgpO1xyXG4gICAgfSBlbHNlIGlmIChjb3JlLmlzRnVuY3Rpb24odGhpcy5yZWxhdGl2ZVVybCkpIHtcclxuICAgICAgdXJsID0gKHRoaXMucmVsYXRpdmVVcmwgYXMgYW55KShtYXBwaW5nQ29udGV4dC5kYXRhU2VydmljZSwgbWFwcGluZ0NvbnRleHQuZ2V0VXJsKCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsID0gdGhpcy5nZXRBYnNvbHV0ZVVybChtYXBwaW5nQ29udGV4dC5kYXRhU2VydmljZSwgbWFwcGluZ0NvbnRleHQuZ2V0VXJsKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZCBxdWVyeSBwYXJhbXMgaWYgLndpdGhQYXJhbWV0ZXJzIHdhcyB1c2VkXHJcbiAgICBsZXQgcXVlcnkgPSBtYXBwaW5nQ29udGV4dC5xdWVyeSBhcyBicmVlemUuRW50aXR5UXVlcnk7XHJcbiAgICBpZiAoIWNvcmUuaXNFbXB0eShxdWVyeS5wYXJhbWV0ZXJzKSkge1xyXG4gICAgICBsZXQgcGFyYW1TdHJpbmcgPSB0b1F1ZXJ5U3RyaW5nKHF1ZXJ5LnBhcmFtZXRlcnMpO1xyXG4gICAgICB1cmwgPSBhcHBlbmRRdWVyeVN0cmluZ1BhcmFtZXRlcih1cmwsIHBhcmFtU3RyaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlPGJyZWV6ZS5RdWVyeVJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBPRGF0YS5yZWFkKHtcclxuICAgICAgICByZXF1ZXN0VXJpOiB1cmwsXHJcbiAgICAgICAgaGVhZGVyczogY29yZS5leHRlbmQoe30sIHRoaXMuaGVhZGVycylcclxuICAgICAgfSxcclxuICAgICAgICBmdW5jdGlvbiAoZGF0YTogYW55LCByZXNwb25zZTogYW55KSB7XHJcbiAgICAgICAgICBsZXQgaW5saW5lQ291bnQ6IGFueTtcclxuICAgICAgICAgIGlmIChkYXRhLl9fY291bnQpIHtcclxuICAgICAgICAgICAgLy8gT0RhdGEgY2FuIHJldHVybiBkYXRhLl9fY291bnQgYXMgYSBzdHJpbmdcclxuICAgICAgICAgICAgaW5saW5lQ291bnQgPSBwYXJzZUludChkYXRhLl9fY291bnQsIDEwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIE9kYXRhIHJldHVybnMgZGlmZmVyZW50IHJlc3VsdCBzdHJ1Y3R1cmUgd2hlbiBpdCByZXR1cm5zIG11bHRpcGxlIGVudGl0aWVzIChkYXRhLnJlc3VsdHMpIHZzIHNpbmdsZSBlbnRpdHkgKGRhdGEgZGlyZWN0bHkpLlxyXG4gICAgICAgICAgLy8gQHNlZSBodHRwOi8vd3d3Lm9kYXRhLm9yZy9kb2N1bWVudGF0aW9uL29kYXRhLXZlcnNpb24tMi0wL2pzb24tZm9ybWF0LyNSZXByZXNlbnRpbmdDb2xsZWN0aW9uc09mRW50cmllc1xyXG4gICAgICAgICAgLy8gYW5kIGh0dHA6Ly93d3cub2RhdGEub3JnL2RvY3VtZW50YXRpb24vb2RhdGEtdmVyc2lvbi0yLTAvanNvbi1mb3JtYXQvI1JlcHJlc2VudGluZ0VudHJpZXNcclxuICAgICAgICAgIGxldCByZXN1bHRzOiBhbnk7XHJcbiAgICAgICAgICBpZiAoZGF0YS5yZXN1bHRzKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdHMgPSBkYXRhLnJlc3VsdHM7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHRzID0gZGF0YTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXNvbHZlKHsgcmVzdWx0czogcmVzdWx0cywgaW5saW5lQ291bnQ6IGlubGluZUNvdW50LCBodHRwUmVzcG9uc2U6IHJlc3BvbnNlLCBxdWVyeTogcXVlcnkgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBmdW5jdGlvbiAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVFcnJvcihlcnJvciwgdXJsKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxuICB9XHJcblxyXG5cclxuICBzYXZlQ2hhbmdlcyhvZGF0YVNhdmVDb250ZXh0OiBicmVlemUuU2F2ZUNvbnRleHQsIHNhdmVCdW5kbGU6IGJyZWV6ZS5TYXZlQnVuZGxlKTogUHJvbWlzZTxicmVlemUuU2F2ZVJlc3VsdD4ge1xyXG4gICAgbGV0IGFkYXB0ZXIgPSBvZGF0YVNhdmVDb250ZXh0LmFkYXB0ZXIgPSB0aGlzO1xyXG4gICAgbGV0IHNhdmVDb250ZXh0ID0gb2RhdGFTYXZlQ29udGV4dCBhcyBPRGF0YVNhdmVDb250ZXh0O1xyXG4gICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgaWYgKHRoaXMucmVsYXRpdmVVcmwgPT09IHRydWUpIHtcclxuICAgICAgc2F2ZUNvbnRleHQucm91dGVQcmVmaXggPSBhZGFwdGVyLmdldFJvdXRlUHJlZml4KHNhdmVDb250ZXh0LmRhdGFTZXJ2aWNlKTtcclxuICAgICAgdXJsID0gc2F2ZUNvbnRleHQuZGF0YVNlcnZpY2UucXVhbGlmeVVybChcIiRiYXRjaFwiKTtcclxuICAgIH0gZWxzZSBpZiAoY29yZS5pc0Z1bmN0aW9uKGFkYXB0ZXIucmVsYXRpdmVVcmwpKSB7XHJcbiAgICAgIHNhdmVDb250ZXh0LnJvdXRlUHJlZml4ID0gKGFkYXB0ZXIucmVsYXRpdmVVcmwgYXMgRnVuY3Rpb24pKHNhdmVDb250ZXh0LmRhdGFTZXJ2aWNlLCAnJyk7XHJcbiAgICAgIHVybCA9IHNhdmVDb250ZXh0LnJvdXRlUHJlZml4ICsgJyRiYXRjaCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzYXZlQ29udGV4dC5yb3V0ZVByZWZpeCA9IGFkYXB0ZXIuZ2V0QWJzb2x1dGVVcmwoc2F2ZUNvbnRleHQuZGF0YVNlcnZpY2UsICcnKTtcclxuICAgICAgdXJsID0gc2F2ZUNvbnRleHQucm91dGVQcmVmaXggKyAnJGJhdGNoJztcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmVxdWVzdERhdGEgPSBjcmVhdGVDaGFuZ2VSZXF1ZXN0cyhzYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZSk7XHJcbiAgICBsZXQgdGVtcEtleXMgPSBzYXZlQ29udGV4dC50ZW1wS2V5cztcclxuICAgIGxldCBjb250ZW50S2V5cyA9IHNhdmVDb250ZXh0LmNvbnRlbnRLZXlzO1xyXG4gICAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxicmVlemUuU2F2ZVJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBPRGF0YS5yZXF1ZXN0KHtcclxuICAgICAgICBoZWFkZXJzOiBjb3JlLmV4dGVuZCh7fSwgdGhpcy5oZWFkZXJzKSxcclxuICAgICAgICByZXF1ZXN0VXJpOiB1cmwsXHJcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICBkYXRhOiByZXF1ZXN0RGF0YVxyXG4gICAgICB9LCBmdW5jdGlvbiAoZGF0YTogYW55LCByZXNwb25zZTogYW55KSB7XHJcbiAgICAgICAgbGV0IGVudGl0aWVzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIGxldCBrZXlNYXBwaW5nczogYnJlZXplLktleU1hcHBpbmdbXSA9IFtdO1xyXG4gICAgICAgIGxldCBzYXZlUmVzdWx0OiBicmVlemUuU2F2ZVJlc3VsdCA9IHsgZW50aXRpZXM6IGVudGl0aWVzLCBrZXlNYXBwaW5nczoga2V5TWFwcGluZ3MgfTtcclxuICAgICAgICBkYXRhLl9fYmF0Y2hSZXNwb25zZXMuZm9yRWFjaChmdW5jdGlvbiAoYnI6IGFueSkge1xyXG4gICAgICAgICAgYnIuX19jaGFuZ2VSZXNwb25zZXMuZm9yRWFjaChmdW5jdGlvbiAoY3I6IGFueSkge1xyXG4gICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSBjci5yZXNwb25zZSB8fCBjcjtcclxuICAgICAgICAgICAgbGV0IHN0YXR1c0NvZGUgPSByZXNwb25zZS5zdGF0dXNDb2RlO1xyXG4gICAgICAgICAgICBpZiAoKCFzdGF0dXNDb2RlKSB8fCBzdGF0dXNDb2RlID49IDQwMCkge1xyXG4gICAgICAgICAgICAgIHJlamVjdChjcmVhdGVFcnJvcihjciwgdXJsKSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgY29udGVudElkID0gY3IuaGVhZGVyc1tcIkNvbnRlbnQtSURcIl07XHJcbiAgICAgICAgICAgIC8vIE9saW5nbyBzZW5kcyBkaWZmZXJlbnQgY2FzZSBvZiAnSUQnIGZvciB0aGUgaGVhZGVyIG5hbWUuXHJcbiAgICAgICAgICAgIGlmICghY29udGVudElkKSB7XHJcbiAgICAgICAgICAgICAgY29udGVudElkID0gY3IuaGVhZGVyc1tcIkNvbnRlbnQtSWRcIl07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCByYXdFbnRpdHkgPSBjci5kYXRhO1xyXG4gICAgICAgICAgICBpZiAocmF3RW50aXR5KSB7XHJcbiAgICAgICAgICAgICAgbGV0IHRlbXBLZXkgPSB0ZW1wS2V5c1tjb250ZW50SWRdO1xyXG4gICAgICAgICAgICAgIGlmICh0ZW1wS2V5KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZW50aXR5VHlwZSA9IHRlbXBLZXkuZW50aXR5VHlwZTtcclxuICAgICAgICAgICAgICAgIGlmIChlbnRpdHlUeXBlLmF1dG9HZW5lcmF0ZWRLZXlUeXBlICE9PSBicmVlemUuQXV0b0dlbmVyYXRlZEtleVR5cGUuTm9uZSkge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgdGVtcFZhbHVlID0gdGVtcEtleS52YWx1ZXNbMF07XHJcbiAgICAgICAgICAgICAgICAgIGxldCByZWFsS2V5ID0gZW50aXR5VHlwZS5nZXRFbnRpdHlLZXlGcm9tUmF3RW50aXR5KHJhd0VudGl0eSwgYnJlZXplLkRhdGFQcm9wZXJ0eS5nZXRSYXdWYWx1ZUZyb21TZXJ2ZXIpO1xyXG4gICAgICAgICAgICAgICAgICBsZXQga2V5TWFwcGluZyA9IHsgZW50aXR5VHlwZU5hbWU6IGVudGl0eVR5cGUubmFtZSwgdGVtcFZhbHVlOiB0ZW1wVmFsdWUsIHJlYWxWYWx1ZTogcmVhbEtleS52YWx1ZXNbMF0gfTtcclxuICAgICAgICAgICAgICAgICAga2V5TWFwcGluZ3MucHVzaChrZXlNYXBwaW5nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZW50aXRpZXMucHVzaChyYXdFbnRpdHkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGxldCBvcmlnRW50aXR5ID0gY29udGVudEtleXNbY29udGVudElkXTtcclxuICAgICAgICAgICAgICBlbnRpdGllcy5wdXNoKG9yaWdFbnRpdHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzb2x2ZShzYXZlUmVzdWx0KTtcclxuICAgICAgfSwgZnVuY3Rpb24gKGVycjogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVFcnJvcihlcnIsIHVybCkpO1xyXG4gICAgICB9LCBPRGF0YS5iYXRjaEhhbmRsZXIpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxuXHJcbiAgfVxyXG5cclxuICBqc29uUmVzdWx0c0FkYXB0ZXI6IGJyZWV6ZS5Kc29uUmVzdWx0c0FkYXB0ZXIgPSBuZXcgYnJlZXplLkpzb25SZXN1bHRzQWRhcHRlcih7XHJcbiAgICBuYW1lOiBcIk9EYXRhX2RlZmF1bHRcIixcclxuXHJcbiAgICB2aXNpdE5vZGU6IGZ1bmN0aW9uIChub2RlOiBhbnksIG1hcHBpbmdDb250ZXh0OiBicmVlemUuTWFwcGluZ0NvbnRleHQsIG5vZGVDb250ZXh0OiBicmVlemUuTm9kZUNvbnRleHQpIHtcclxuICAgICAgbGV0IHJlc3VsdDogYW55ID0ge307XHJcbiAgICAgIGlmIChub2RlID09IG51bGwpIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIGxldCBtZXRhZGF0YSA9IG5vZGUuX19tZXRhZGF0YTtcclxuICAgICAgaWYgKG1ldGFkYXRhICE9IG51bGwpIHtcclxuICAgICAgICAvLyBUT0RPOiBtYXkgYmUgYWJsZSB0byBtYWtlIHRoaXMgbW9yZSBlZmZpY2llbnQgYnkgY2FjaGluZyBvZiB0aGUgcHJldmlvdXMgdmFsdWUuXHJcbiAgICAgICAgbGV0IGVudGl0eVR5cGVOYW1lID0gYnJlZXplLk1ldGFkYXRhU3RvcmUubm9ybWFsaXplVHlwZU5hbWUobWV0YWRhdGEudHlwZSk7XHJcbiAgICAgICAgbGV0IGV0ID0gZW50aXR5VHlwZU5hbWUgJiYgbWFwcGluZ0NvbnRleHQuZW50aXR5TWFuYWdlci5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoZW50aXR5VHlwZU5hbWUsIHRydWUpO1xyXG4gICAgICAgIC8vIE9EYXRhIHJlc3BvbnNlIGRvZXNuJ3QgZGlzdGluZ3Vpc2ggYSBwcm9qZWN0aW9uIGZyb20gYSB3aG9sZSBlbnRpdHkuXHJcbiAgICAgICAgLy8gV2UnbGwgYXNzdW1lIHRoYXQgd2hvbGUtZW50aXR5IGRhdGEgd291bGQgaGF2ZSBhdCBsZWFzdCBhcyBtYW55IHByb3BlcnRpZXMgICg8PSlcclxuICAgICAgICAvLyBhcyB0aGUgRW50aXR5VHlwZSBoYXMgbWFwcGVkIHByb3BlcnRpZXMgb24gdGhlIGJhc2lzIHRoYXRcclxuICAgICAgICAvLyBtb3N0IHByb2plY3Rpb25zIHJlbW92ZSBwcm9wZXJ0aWVzIHJhdGhlciB0aGFuIGFkZCB0aGVtLlxyXG4gICAgICAgIC8vIElmIG5vdCwgYXNzdW1lIGl0J3MgYSBwcm9qZWN0aW9uIGFuZCBkbyBOT1QgdHJlYXQgYXMgYW4gZW50aXR5XHJcbiAgICAgICAgaWYgKGV0ICYmIGV0Ll9tYXBwZWRQcm9wZXJ0aWVzQ291bnQgPD0gT2JqZWN0LmtleXMobm9kZSkubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgLy8gaWYgKGV0ICYmIGV0Ll9tYXBwZWRQcm9wZXJ0aWVzQ291bnQgPT09IE9iamVjdC5rZXlzKG5vZGUpLmxlbmd0aCAtIDEpIHsgLy8gT0xEXHJcbiAgICAgICAgICByZXN1bHQuZW50aXR5VHlwZSA9IGV0O1xyXG4gICAgICAgICAgbGV0IHVyaUtleSA9IG1ldGFkYXRhLnVyaSB8fCBtZXRhZGF0YS5pZDtcclxuICAgICAgICAgIGlmICh1cmlLZXkpIHtcclxuICAgICAgICAgICAgLy8gU3RyaXAgYmFzZVVyaSB0byBtYWtlIHVyaUtleSBhIHJlbGF0aXZlIHVyaVxyXG4gICAgICAgICAgICAvLyBUb2RvOiB3aHkgaXMgdGhpcyBuZWNlc3Nhcnkgd2hlbiBhYnNvbHV0ZSB3b3JrcyBmb3IgZXZlcnkgT0RhdGEgc291cmNlIHRlc3RlZD9cclxuICAgICAgICAgICAgbGV0IHJlID0gbmV3IFJlZ0V4cCgnXicgKyBtYXBwaW5nQ29udGV4dC5kYXRhU2VydmljZS5zZXJ2aWNlTmFtZSwgJ2knKTtcclxuICAgICAgICAgICAgdXJpS2V5ID0gdXJpS2V5LnJlcGxhY2UocmUsICcnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlc3VsdC5leHRyYU1ldGFkYXRhID0ge1xyXG4gICAgICAgICAgICB1cmlLZXk6IHVyaUtleSxcclxuICAgICAgICAgICAgZXRhZzogbWV0YWRhdGEuZXRhZ1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gT0RhdGEgdjMgLSBwcm9qZWN0aW9uIGFycmF5cyB3aWxsIGJlIGVuY2xvc2VkIGluIGEgcmVzdWx0cyBhcnJheVxyXG4gICAgICBpZiAobm9kZS5yZXN1bHRzKSB7XHJcbiAgICAgICAgcmVzdWx0Lm5vZGUgPSBub2RlLnJlc3VsdHM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBwcm9wZXJ0eU5hbWUgPSBub2RlQ29udGV4dC5wcm9wZXJ0eU5hbWU7XHJcbiAgICAgIHJlc3VsdC5pZ25vcmUgPSBub2RlLl9fZGVmZXJyZWQgIT0gbnVsbCB8fCBwcm9wZXJ0eU5hbWUgPT09IFwiX19tZXRhZGF0YVwiIHx8XHJcbiAgICAgICAgLy8gRW50aXR5S2V5IHByb3BlcnRpZXMgY2FuIGJlIHByb2R1Y2VkIGJ5IEVETVggbW9kZWxzXHJcbiAgICAgICAgKHByb3BlcnR5TmFtZSA9PT0gXCJFbnRpdHlLZXlcIiAmJiBub2RlLiR0eXBlICYmIGNvcmUuc3RyaW5nU3RhcnRzV2l0aChub2RlLiR0eXBlLCBcIlN5c3RlbS5EYXRhXCIpKTtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgfSk7XHJcblxyXG4gIGdldEFic29sdXRlVXJsKGRhdGFTZXJ2aWNlOiBicmVlemUuRGF0YVNlcnZpY2UsIHVybDogc3RyaW5nKSB7XHJcbiAgICBsZXQgc2VydmljZU5hbWUgPSBkYXRhU2VydmljZS5xdWFsaWZ5VXJsKCcnKTtcclxuICAgIC8vIG9ubHkgcHJlZml4IHdpdGggc2VydmljZU5hbWUgaWYgbm90IGFscmVhZHkgb24gdGhlIHVybFxyXG4gICAgbGV0IGJhc2UgPSAoY29yZS5zdHJpbmdTdGFydHNXaXRoKHVybCwgc2VydmljZU5hbWUpKSA/ICcnIDogc2VydmljZU5hbWU7XHJcbiAgICAvLyBJZiBubyBwcm90b2NvbCwgdHVybiBiYXNlIGludG8gYW4gYWJzb2x1dGUgVVJJXHJcbiAgICBpZiAod2luZG93ICYmIHNlcnZpY2VOYW1lLmluZGV4T2YoJy8vJykgPCAwKSB7XHJcbiAgICAgIC8vIG5vIHByb3RvY29sOyBtYWtlIGl0IGFic29sdXRlXHJcbiAgICAgIGJhc2UgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgK1xyXG4gICAgICAgIChjb3JlLnN0cmluZ1N0YXJ0c1dpdGgoc2VydmljZU5hbWUsICcvJykgPyAnJyA6ICcvJykgK1xyXG4gICAgICAgIGJhc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmFzZSArIHVybDtcclxuICB9XHJcblxyXG4gIGdldFJvdXRlUHJlZml4KGRhdGFTZXJ2aWNlOiBicmVlemUuRGF0YVNlcnZpY2UpIHtcclxuICAgIC8vIEdldCB0aGUgcm91dGVQcmVmaXggZnJvbSBhIFdlYiBBUEkgT0RhdGEgc2VydmljZSBuYW1lLlxyXG4gICAgLy8gVGhlIHJvdXRlUHJlZml4IGlzIHByZXN1bWVkIHRvIGJlIHRoZSBwYXRobmFtZSB3aXRoaW4gdGhlIGRhdGFTZXJ2aWNlLnNlcnZpY2VOYW1lXHJcbiAgICAvLyBFeGFtcGxlcyBvZiBzZXJ2aWNlbmFtZSAtPiByb3V0ZVByZWZpeDpcclxuICAgIC8vICAgJ2h0dHA6Ly9sb2NhbGhvc3Q6NTU4MDIvb2RhdGEvJyAtPiAnb2RhdGEvJ1xyXG4gICAgLy8gICAnaHR0cDovLzE5OC4xNTQuMTIxLjc1L3NlcnZpY2Uvb2RhdGEvJyAtPiAnc2VydmljZS9vZGF0YS8nXHJcbiAgICBsZXQgcGFyc2VyOiBhbnk7XHJcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JykgeyAvLyBicm93c2VyXHJcbiAgICAgIHBhcnNlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgcGFyc2VyLmhyZWYgPSBkYXRhU2VydmljZS5zZXJ2aWNlTmFtZTtcclxuICAgIH0gZWxzZSB7IC8vIG5vZGVcclxuICAgICAgLy8gVE9ETzogaG93IHRvIGJlc3QgaGFuZGxlIHRoaXNcclxuICAgICAgLy8gYXNzdW1lcyBleGlzdGVuY2Ugb2Ygbm9kZSdzIHVybC5wYXJzZSBtZXRob2QuXHJcbiAgICAgIHBhcnNlciA9IHVybC5wYXJzZShkYXRhU2VydmljZS5zZXJ2aWNlTmFtZSk7XHJcbiAgICB9XHJcbiAgICBsZXQgcHJlZml4ID0gcGFyc2VyLnBhdGhuYW1lO1xyXG4gICAgaWYgKHByZWZpeFswXSA9PT0gJy8nKSB7XHJcbiAgICAgIHByZWZpeCA9IHByZWZpeC5zdWJzdHIoMSk7XHJcbiAgICB9IC8vIGRyb3AgbGVhZGluZyAnLycgIChhbGwgYnV0IElFKVxyXG4gICAgaWYgKHByZWZpeC5zdWJzdHIoLTEpICE9PSAnLycpIHtcclxuICAgICAgcHJlZml4ICs9ICcvJztcclxuICAgIH0gICAgICAvLyBlbnN1cmUgdHJhaWxpbmcgJy8nXHJcbiAgICByZXR1cm4gcHJlZml4O1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbi8vIGNydWRlIHNlcmlhbGl6ZXIuICBEb2Vzbid0IHJlY3Vyc2VcclxuZnVuY3Rpb24gdG9RdWVyeVN0cmluZyhvYmo6IE9iamVjdCkge1xyXG4gIGxldCBwYXJ0czogc3RyaW5nW10gPSBbXTtcclxuICBmb3IgKGxldCBpIGluIG9iaikge1xyXG4gICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICBwYXJ0cy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChpKSArIFwiPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG9ialtpXSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gcGFydHMuam9pbihcIiZcIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRyYW5zZm9ybVZhbHVlKHByb3A6IGJyZWV6ZS5EYXRhUHJvcGVydHksIHZhbDogYW55KSB7XHJcbiAgaWYgKHByb3AuaXNVbm1hcHBlZCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICBpZiAocHJvcC5kYXRhVHlwZSA9PT0gYnJlZXplLkRhdGFUeXBlLkRhdGVUaW1lT2Zmc2V0KSB7XHJcbiAgICAvLyBUaGUgZGF0YWpzIGxpYiB0cmllcyB0byB0cmVhdCBjbGllbnQgZGF0ZVRpbWVzIHRoYXQgYXJlIGRlZmluZWQgYXMgRGF0ZVRpbWVPZmZzZXQgb24gdGhlIHNlcnZlciBkaWZmZXJlbnRseVxyXG4gICAgLy8gZnJvbSBvdGhlciBkYXRlVGltZXMuIFRoaXMgZml4IGNvbXBlbnNhdGVzIGJlZm9yZSB0aGUgc2F2ZS5cclxuICAgIHZhbCA9IHZhbCAmJiBuZXcgRGF0ZSh2YWwuZ2V0VGltZSgpIC0gKHZhbC5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDApKTtcclxuICB9IGVsc2UgaWYgKChwcm9wLmRhdGFUeXBlIGFzIGJyZWV6ZS5EYXRhVHlwZSkucXVvdGVKc29uT0RhdGEpIHtcclxuICAgIHZhbCA9IHZhbCAhPSBudWxsID8gdmFsLnRvU3RyaW5nKCkgOiB2YWw7XHJcbiAgfVxyXG4gIHJldHVybiB2YWw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUNoYW5nZVJlcXVlc3RzKHNhdmVDb250ZXh0OiBPRGF0YVNhdmVDb250ZXh0LCBzYXZlQnVuZGxlOiBicmVlemUuU2F2ZUJ1bmRsZSkge1xyXG4gIGxldCBjaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3IgPSAoc2F2ZUNvbnRleHQuYWRhcHRlciBhcyBEYXRhU2VydmljZU9EYXRhQWRhcHRlcikuX2NyZWF0ZUNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvcihzYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZSk7XHJcbiAgbGV0IGNoYW5nZVJlcXVlc3RzOiBhbnlbXSA9IFtdO1xyXG4gIGxldCB0ZW1wS2V5czogYnJlZXplLkVudGl0eUtleVtdID0gW107XHJcbiAgbGV0IGNvbnRlbnRLZXlzOiBicmVlemUuRW50aXR5W10gPSBbXTtcclxuICBsZXQgZW50aXR5TWFuYWdlciA9IHNhdmVDb250ZXh0LmVudGl0eU1hbmFnZXI7XHJcbiAgbGV0IGhlbHBlciA9IGVudGl0eU1hbmFnZXIuaGVscGVyO1xyXG4gIGxldCBpZCA9IDA7XHJcbiAgbGV0IHJvdXRlUHJlZml4ID0gc2F2ZUNvbnRleHQucm91dGVQcmVmaXg7XHJcblxyXG4gIHNhdmVCdW5kbGUuZW50aXRpZXMuZm9yRWFjaChmdW5jdGlvbiAoZW50aXR5LCBpbmRleCkge1xyXG4gICAgbGV0IGFzcGVjdCA9IGVudGl0eS5lbnRpdHlBc3BlY3Q7XHJcbiAgICBpZCA9IGlkICsgMTsgLy8gd2UgYXJlIGRlbGliZXJhdGVseSBza2lwcGluZyBpZD0wIGJlY2F1c2UgQ29udGVudC1JRCA9IDAgc2VlbXMgdG8gYmUgaWdub3JlZC5cclxuICAgIGxldCByZXF1ZXN0ID0geyBoZWFkZXJzOiB7IFwiQ29udGVudC1JRFwiOiBpZCwgXCJEYXRhU2VydmljZVZlcnNpb25cIjogXCIyLjBcIiB9IH0gYXMgYW55O1xyXG4gICAgY29udGVudEtleXNbaWRdID0gZW50aXR5O1xyXG4gICAgaWYgKGFzcGVjdC5lbnRpdHlTdGF0ZS5pc0FkZGVkKCkpIHtcclxuICAgICAgcmVxdWVzdC5yZXF1ZXN0VXJpID0gcm91dGVQcmVmaXggKyBlbnRpdHkuZW50aXR5VHlwZS5kZWZhdWx0UmVzb3VyY2VOYW1lO1xyXG4gICAgICByZXF1ZXN0Lm1ldGhvZCA9IFwiUE9TVFwiO1xyXG4gICAgICByZXF1ZXN0LmRhdGEgPSBoZWxwZXIudW53cmFwSW5zdGFuY2UoZW50aXR5LCB0cmFuc2Zvcm1WYWx1ZSk7XHJcbiAgICAgIHRlbXBLZXlzW2lkXSA9IGFzcGVjdC5nZXRLZXkoKTtcclxuICAgIH0gZWxzZSBpZiAoYXNwZWN0LmVudGl0eVN0YXRlLmlzTW9kaWZpZWQoKSkge1xyXG4gICAgICB1cGRhdGVEZWxldGVNZXJnZVJlcXVlc3QocmVxdWVzdCwgYXNwZWN0LCByb3V0ZVByZWZpeCEpO1xyXG4gICAgICByZXF1ZXN0Lm1ldGhvZCA9IFwiTUVSR0VcIjtcclxuICAgICAgcmVxdWVzdC5kYXRhID0gaGVscGVyLnVud3JhcENoYW5nZWRWYWx1ZXMoZW50aXR5LCBlbnRpdHlNYW5hZ2VyLm1ldGFkYXRhU3RvcmUsIHRyYW5zZm9ybVZhbHVlKTtcclxuICAgICAgLy8gc2hvdWxkIGJlIGEgUEFUQ0gvTUVSR0VcclxuICAgIH0gZWxzZSBpZiAoYXNwZWN0LmVudGl0eVN0YXRlLmlzRGVsZXRlZCgpKSB7XHJcbiAgICAgIHVwZGF0ZURlbGV0ZU1lcmdlUmVxdWVzdChyZXF1ZXN0LCBhc3BlY3QsIHJvdXRlUHJlZml4ISk7XHJcbiAgICAgIHJlcXVlc3QubWV0aG9kID0gXCJERUxFVEVcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHJlcXVlc3QgPSBjaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3IuZ2V0UmVxdWVzdChyZXF1ZXN0LCBlbnRpdHksIGluZGV4KTtcclxuICAgIGNoYW5nZVJlcXVlc3RzLnB1c2gocmVxdWVzdCk7XHJcbiAgfSk7XHJcbiAgc2F2ZUNvbnRleHQuY29udGVudEtleXMgPSBjb250ZW50S2V5cztcclxuICBzYXZlQ29udGV4dC50ZW1wS2V5cyA9IHRlbXBLZXlzO1xyXG4gIGNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvci5kb25lKGNoYW5nZVJlcXVlc3RzKTtcclxuICByZXR1cm4ge1xyXG4gICAgX19iYXRjaFJlcXVlc3RzOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBfX2NoYW5nZVJlcXVlc3RzOiBjaGFuZ2VSZXF1ZXN0c1xyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgfTtcclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVwZGF0ZURlbGV0ZU1lcmdlUmVxdWVzdChyZXF1ZXN0OiBhbnksIGFzcGVjdDogYnJlZXplLkVudGl0eUFzcGVjdCwgcm91dGVQcmVmaXg6IHN0cmluZykge1xyXG4gIGxldCB1cmlLZXk6IHN0cmluZztcclxuICBsZXQgZXh0cmFNZXRhZGF0YSA9IGFzcGVjdC5leHRyYU1ldGFkYXRhO1xyXG4gIGlmIChleHRyYU1ldGFkYXRhID09IG51bGwpIHtcclxuICAgIHVyaUtleSA9IGdldFVyaUtleShhc3BlY3QpO1xyXG4gICAgYXNwZWN0LmV4dHJhTWV0YWRhdGEgPSB7XHJcbiAgICAgIHVyaUtleTogdXJpS2V5XHJcbiAgICB9O1xyXG4gIH0gZWxzZSB7XHJcbiAgICB1cmlLZXkgPSBleHRyYU1ldGFkYXRhLnVyaUtleTtcclxuICAgIGlmIChleHRyYU1ldGFkYXRhLmV0YWcpIHtcclxuICAgICAgcmVxdWVzdC5oZWFkZXJzW1wiSWYtTWF0Y2hcIl0gPSBleHRyYU1ldGFkYXRhLmV0YWc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlcXVlc3QucmVxdWVzdFVyaSA9XHJcbiAgICAvLyB1c2Ugcm91dGVQcmVmaXggaWYgdXJpS2V5IGxhY2tzIHByb3RvY29sIChpLmUuLCByZWxhdGl2ZSB1cmkpXHJcbiAgICB1cmlLZXkuaW5kZXhPZignLy8nKSA+IDAgPyB1cmlLZXkgOiByb3V0ZVByZWZpeCArIHVyaUtleTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0VXJpS2V5KGFzcGVjdDogYnJlZXplLkVudGl0eUFzcGVjdCkge1xyXG4gIGxldCBlbnRpdHlUeXBlID0gYXNwZWN0LmVudGl0eSEuZW50aXR5VHlwZTtcclxuICBsZXQgcmVzb3VyY2VOYW1lID0gZW50aXR5VHlwZS5kZWZhdWx0UmVzb3VyY2VOYW1lO1xyXG4gIGxldCBrcHMgPSBlbnRpdHlUeXBlLmtleVByb3BlcnRpZXM7XHJcbiAgbGV0IHVyaUtleSA9IHJlc291cmNlTmFtZSArIFwiKFwiO1xyXG4gIGlmIChrcHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICB1cmlLZXkgPSB1cmlLZXkgKyBmbXRQcm9wZXJ0eShrcHNbMF0sIGFzcGVjdCkgKyBcIilcIjtcclxuICB9IGVsc2Uge1xyXG4gICAgbGV0IGRlbGltID0gXCJcIjtcclxuICAgIGtwcy5mb3JFYWNoKGZ1bmN0aW9uIChrcCkge1xyXG4gICAgICB1cmlLZXkgPSB1cmlLZXkgKyBkZWxpbSArIGtwLm5hbWVPblNlcnZlciArIFwiPVwiICsgZm10UHJvcGVydHkoa3AsIGFzcGVjdCk7XHJcbiAgICAgIGRlbGltID0gXCIsXCI7XHJcbiAgICB9KTtcclxuICAgIHVyaUtleSA9IHVyaUtleSArIFwiKVwiO1xyXG4gIH1cclxuICByZXR1cm4gdXJpS2V5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBmbXRQcm9wZXJ0eShwcm9wOiBicmVlemUuRGF0YVByb3BlcnR5LCBhc3BlY3Q6IGJyZWV6ZS5FbnRpdHlBc3BlY3QpIHtcclxuICByZXR1cm4gKHByb3AuZGF0YVR5cGUgYXMgYnJlZXplLkRhdGFUeXBlKS5mbXRPRGF0YSEoYXNwZWN0LmdldFByb3BlcnR5VmFsdWUocHJvcC5uYW1lKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUVycm9yKGVycm9yOiBhbnksIHVybDogc3RyaW5nKSB7XHJcbiAgLy8gT0RhdGEgZXJyb3JzIGNhbiBoYXZlIHRoZSBtZXNzYWdlIGJ1cmllZCB2ZXJ5IGRlZXBseSAtIGFuZCBub25vYnZpb3VzbHlcclxuICAvLyB0aGlzIGNvZGUgaXMgdHJpY2t5IHNvIGJlIGNhcmVmdWwgY2hhbmdpbmcgdGhlIHJlc3BvbnNlLmJvZHkgcGFyc2luZy5cclxuICBsZXQgcmVzdWx0ID0gbmV3IEVycm9yKCkgYXMgYnJlZXplLlNlcnZlckVycm9yO1xyXG4gIGxldCByZXNwb25zZSA9IGVycm9yICYmIGVycm9yLnJlc3BvbnNlO1xyXG4gIGlmICghcmVzcG9uc2UpIHtcclxuICAgIC8vIGluIGNhc2UgRGF0YUpTIHJldHVybnMgXCJObyBoYW5kbGVyIGZvciB0aGlzIGRhdGFcIlxyXG4gICAgcmVzdWx0Lm1lc3NhZ2UgPSBlcnJvcjtcclxuICAgIHJlc3VsdC5zdGF0dXNUZXh0ID0gZXJyb3I7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuICByZXN1bHQubWVzc2FnZSA9IHJlc3BvbnNlLnN0YXR1c1RleHQ7XHJcbiAgcmVzdWx0LnN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0dXNUZXh0O1xyXG4gIHJlc3VsdC5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXNDb2RlO1xyXG4gIC8vIG5vbiBzdGRcclxuICBpZiAodXJsKSByZXN1bHQudXJsID0gdXJsO1xyXG4gIHJlc3VsdC5ib2R5ID0gcmVzcG9uc2UuYm9keTtcclxuICBpZiAocmVzcG9uc2UuYm9keSkge1xyXG4gICAgbGV0IG5leHRFcnI6IGFueTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCBib2R5ID0gSlNPTi5wYXJzZShyZXNwb25zZS5ib2R5KTtcclxuICAgICAgcmVzdWx0LmJvZHkgPSBib2R5O1xyXG4gICAgICAvLyBPRGF0YSB2MyBsb2dpY1xyXG4gICAgICBpZiAoYm9keVsnb2RhdGEuZXJyb3InXSkge1xyXG4gICAgICAgIGJvZHkgPSBib2R5WydvZGF0YS5lcnJvciddO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBtc2cgPSBcIlwiO1xyXG4gICAgICBkbyB7XHJcbiAgICAgICAgbmV4dEVyciA9IGJvZHkuZXJyb3IgfHwgYm9keS5pbm5lcmVycm9yO1xyXG4gICAgICAgIGlmICghbmV4dEVycikgbXNnID0gbXNnICsgZ2V0TWVzc2FnZShib2R5KTtcclxuICAgICAgICBuZXh0RXJyID0gbmV4dEVyciB8fCBib2R5LmludGVybmFsZXhjZXB0aW9uO1xyXG4gICAgICAgIGJvZHkgPSBuZXh0RXJyIHx8IGJvZHk7XHJcbiAgICAgIH0gd2hpbGUgKG5leHRFcnIpO1xyXG4gICAgICBpZiAobXNnLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXN1bHQubWVzc2FnZSA9IG1zZztcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG5cclxuICAgIH1cclxuICB9XHJcbiAgYnJlZXplLkFic3RyYWN0RGF0YVNlcnZpY2VBZGFwdGVyLl9jYXRjaE5vQ29ubmVjdGlvbkVycm9yKHJlc3VsdCk7XHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TWVzc2FnZShib2R5OiBhbnkpIHtcclxuICBsZXQgbXNnID0gYm9keS5tZXNzYWdlIHx8IFwiXCI7XHJcbiAgcmV0dXJuICgodHlwZW9mIChtc2cpID09PSBcInN0cmluZ1wiKSA/IG1zZyA6IG1zZy52YWx1ZSkgKyBcIjsgXCI7XHJcbn1cclxuXHJcbmJyZWV6ZS5jb25maWcucmVnaXN0ZXJBZGFwdGVyKFwiZGF0YVNlcnZpY2VcIiwgRGF0YVNlcnZpY2VPRGF0YUFkYXB0ZXIpO1xyXG5cclxuXHJcbmxldCB3ZWJBcGlPRGF0YUN0b3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgdGhpcy5uYW1lID0gXCJ3ZWJBcGlPRGF0YVwiO1xyXG59O1xyXG5cclxuYnJlZXplLmNvcmUuZXh0ZW5kKHdlYkFwaU9EYXRhQ3Rvci5wcm90b3R5cGUsIERhdGFTZXJ2aWNlT0RhdGFBZGFwdGVyLnByb3RvdHlwZSk7XHJcblxyXG5icmVlemUuY29uZmlnLnJlZ2lzdGVyQWRhcHRlcihcImRhdGFTZXJ2aWNlXCIsIHdlYkFwaU9EYXRhQ3RvciBhcyBhbnkpO1xyXG4vLyBPRGF0YSA0IGFkYXB0ZXJcclxubGV0IHdlYkFwaU9EYXRhNEN0b3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgdGhpcy5uYW1lID0gXCJ3ZWJBcGlPRGF0YTRcIjtcclxufTtcclxuYnJlZXplLmNvcmUuZXh0ZW5kKHdlYkFwaU9EYXRhNEN0b3IucHJvdG90eXBlLCB3ZWJBcGlPRGF0YUN0b3IucHJvdG90eXBlKTtcclxud2ViQXBpT0RhdGE0Q3Rvci5wcm90b3R5cGUuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAvLyBBYXJnaC4uLiB0aGV5IG1vdmVkIHRoZSBjaGVlc2UuXHJcbiAgbGV0IGRhdGFqcyA9IGNvcmUucmVxdWlyZUxpYihcImRhdGFqc1wiLCBcIk5lZWRlZCB0byBzdXBwb3J0IHJlbW90ZSBPRGF0YSB2NCBzZXJ2aWNlc1wiKTtcclxuICBPRGF0YSA9IGRhdGFqcy5WNC5vRGF0YTtcclxuICBPRGF0YS5qc29uLmpzb25IYW5kbGVyLnJlY29nbml6ZURhdGVzID0gdHJ1ZTtcclxufTtcclxud2ViQXBpT0RhdGE0Q3Rvci5wcm90b3R5cGUuaGVhZGVycyA9IHsgXCJPRGF0YS1WZXJzaW9uXCI6IFwiNC4wXCIgfTtcclxuYnJlZXplLmNvbmZpZy5yZWdpc3RlckFkYXB0ZXIoXCJkYXRhU2VydmljZVwiLCB3ZWJBcGlPRGF0YTRDdG9yIGFzIGFueSk7XHJcblxyXG5cclxuXHJcblxyXG4iXX0=
470
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci1kYXRhLXNlcnZpY2Utb2RhdGEuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9icmVlemUtY2xpZW50L2FkYXB0ZXItZGF0YS1zZXJ2aWNlLW9kYXRhLyIsInNvdXJjZXMiOlsiYWRhcHRlci1kYXRhLXNlcnZpY2Utb2RhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVELElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFZdkIsY0FBYztBQUNkO0lBQTZDLDJDQUFpQztJQU81RTtRQUFBLFlBQ0UsaUJBQU8sU0FFUjtRQVJELHNFQUFzRTtRQUN0RSx3RUFBd0U7UUFDeEUsc0ZBQXNGO1FBQ3RGLGFBQU8sR0FBRyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxDQUFDO1FBa04xQyx3QkFBa0IsR0FBOEIsSUFBSSxNQUFNLENBQUMsa0JBQWtCLENBQUM7WUFDNUUsSUFBSSxFQUFFLGVBQWU7WUFFckIsU0FBUyxFQUFFLFVBQVUsSUFBUyxFQUFFLGNBQXFDLEVBQUUsV0FBK0I7Z0JBQ3BHLElBQUksTUFBTSxHQUFRLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxJQUFJLElBQUksSUFBSTtvQkFBRSxPQUFPLE1BQU0sQ0FBQztnQkFDaEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDL0IsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO29CQUNwQixrRkFBa0Y7b0JBQ2xGLElBQUksY0FBYyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMzRSxJQUFJLEVBQUUsR0FBRyxjQUFjLElBQUksY0FBYyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDMUcsdUVBQXVFO29CQUN2RSxtRkFBbUY7b0JBQ25GLDREQUE0RDtvQkFDNUQsMkRBQTJEO29CQUMzRCxpRUFBaUU7b0JBQ2pFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxzQkFBc0IsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ25FLGlGQUFpRjt3QkFDakYsTUFBTSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7d0JBQ3ZCLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQzt3QkFDekMsSUFBSSxNQUFNLEVBQUU7NEJBQ1YsOENBQThDOzRCQUM5QyxpRkFBaUY7NEJBQ2pGLElBQUksRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxjQUFjLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQzs0QkFDdkUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO3lCQUNqQzt3QkFDRCxNQUFNLENBQUMsYUFBYSxHQUFHOzRCQUNyQixNQUFNLEVBQUUsTUFBTTs0QkFDZCxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7eUJBQ3BCLENBQUM7cUJBQ0g7aUJBQ0Y7Z0JBQ0QsbUVBQW1FO2dCQUNuRSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ2hCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztpQkFDNUI7Z0JBRUQsSUFBSSxZQUFZLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQztnQkFDNUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksSUFBSSxZQUFZLEtBQUssWUFBWTtvQkFDdEUsc0RBQXNEO29CQUN0RCxDQUFDLFlBQVksS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUNuRyxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1NBRUYsQ0FBQyxDQUFDO1FBMVBELEtBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDOztJQUN0QixDQUFDO0lBRU0sZ0NBQVEsR0FBZixVQUFnQixNQUE0QjtRQUMxQyxNQUFNLEdBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDakMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUMvRCxPQUFPLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBNEIsQ0FBQztJQUNuRyxDQUFDO0lBRUQsNENBQVUsR0FBVjtRQUNFLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSx5Q0FBeUMsQ0FBQyxDQUFDO1FBQzVFLEtBQUssQ0FBQyxXQUFXLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUMxQyxDQUFDO0lBR0Qsb0RBQW9EO0lBQ3BELGdGQUFnRjtJQUNoRixFQUFFO0lBQ0Ysc0ZBQXNGO0lBQ3RGLDhCQUE4QjtJQUM5QixFQUFFO0lBQ0Ysa0dBQWtHO0lBQ2xHLEVBQUU7SUFDRixzRkFBc0Y7SUFDdEYsb0RBQW9EO0lBQ3BELHFDQUFxQztJQUNyQyxRQUFRO0lBQ1IsRUFBRTtJQUVGLCtDQUFhLEdBQWIsVUFBYyxhQUFtQyxFQUFFLFdBQStCO1FBQ2hGLElBQUksV0FBVyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUM7UUFFMUMsSUFBSSxHQUFXLENBQUM7UUFDaEIsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRTtZQUM3QixHQUFHLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUMzQzthQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDNUMsR0FBRyxHQUFJLElBQUksQ0FBQyxXQUFtQixDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUMzRDthQUFNO1lBQ0wsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLFFBQWdCLENBQUMsTUFBTSxHQUFHLG9DQUFvQyxDQUFDO1FBRWhFLElBQUksT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBTyxFQUFFLE1BQU07WUFDeEMsa0JBQWtCO1lBQ2xCLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ1QsVUFBVSxFQUFFLEdBQUc7Z0JBQ2YsMkNBQTJDO2dCQUMzQyxPQUFPLEVBQUUsUUFBUTthQUNsQixFQUNDLFVBQVUsSUFBUztnQkFDakIsc0VBQXNFO2dCQUN0RSxpRUFBaUU7Z0JBQ2pFLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO29CQUMvQixJQUFJLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsR0FBRyxHQUFHLENBQUMsQ0FBQztvQkFDM0QsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3RCO2dCQUNELElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7Z0JBRXJDLDJDQUEyQztnQkFDM0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQzlDLElBQUk7d0JBQ0YsYUFBYSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztxQkFDNUM7b0JBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQ1YsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsNEJBQTRCLEdBQUcsR0FBRyxHQUFHLHlDQUF5QyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO3FCQUN0SDtvQkFFRCxhQUFhLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUMzQztnQkFFRCxPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUUvQixDQUFDLEVBQUUsVUFBVSxLQUFVO2dCQUNyQixJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQyxHQUFHLENBQUMsT0FBTyxHQUFHLDZCQUE2QixHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRSxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQixDQUFDLEVBQ0QsS0FBSyxDQUFDLGVBQWUsQ0FDdEIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUlELDhDQUFZLEdBQVosVUFBYSxjQUFxQztRQUFsRCxpQkE2Q0M7UUE1Q0MsSUFBSSxHQUFXLENBQUM7UUFDaEIsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRTtZQUM3QixHQUFHLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQy9CO2FBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUM1QyxHQUFHLEdBQUksSUFBSSxDQUFDLFdBQW1CLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztTQUN0RjthQUFNO1lBQ0wsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztTQUNoRjtRQUVELCtDQUErQztRQUMvQyxJQUFJLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBMkIsQ0FBQztRQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDbkMsSUFBSSxXQUFXLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsRCxHQUFHLEdBQUcsMEJBQTBCLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ3BEO1FBRUQsSUFBSSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQXFCLFVBQUMsT0FBTyxFQUFFLE1BQU07WUFDNUQsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDVCxVQUFVLEVBQUUsR0FBRztnQkFDZixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSSxDQUFDLE9BQU8sQ0FBQzthQUN2QyxFQUNDLFVBQVUsSUFBUyxFQUFFLFFBQWE7Z0JBQ2hDLElBQUksV0FBZ0IsQ0FBQztnQkFDckIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNoQiw0Q0FBNEM7b0JBQzVDLFdBQVcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztpQkFDMUM7Z0JBQ0QsOEhBQThIO2dCQUM5SCwwR0FBMEc7Z0JBQzFHLDRGQUE0RjtnQkFDNUYsSUFBSSxPQUFZLENBQUM7Z0JBQ2pCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDaEIsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7aUJBQ3hCO3FCQUFNO29CQUNMLE9BQU8sR0FBRyxJQUFJLENBQUM7aUJBQ2hCO2dCQUNELE9BQU8sT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDdkcsQ0FBQyxFQUNELFVBQVUsS0FBVTtnQkFDbEIsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLENBQUMsQ0FDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBR0QsNkNBQVcsR0FBWCxVQUFZLGdCQUFvQyxFQUFFLFVBQTZCO1FBQS9FLGlCQXFFQztRQXBFQyxJQUFJLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQzlDLElBQUksV0FBVyxHQUFHLGdCQUFvQyxDQUFDO1FBQ3ZELElBQUksR0FBVyxDQUFDO1FBQ2hCLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUU7WUFDN0IsV0FBVyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMxRSxHQUFHLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDcEQ7YUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQy9DLFdBQVcsQ0FBQyxXQUFXLEdBQUksT0FBTyxDQUFDLFdBQXdCLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RixHQUFHLEdBQUcsV0FBVyxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUM7U0FDMUM7YUFBTTtZQUNMLFdBQVcsQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLEdBQUcsR0FBRyxXQUFXLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQztTQUMxQztRQUVELElBQUksV0FBVyxHQUFHLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRSxJQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDO1FBQ3BDLElBQUksV0FBVyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUM7UUFDMUMsSUFBSSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQW9CLFVBQUMsT0FBTyxFQUFFLE1BQU07WUFDM0QsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFDWixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSSxDQUFDLE9BQU8sQ0FBQztnQkFDdEMsVUFBVSxFQUFFLEdBQUc7Z0JBQ2YsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsSUFBSSxFQUFFLFdBQVc7YUFDbEIsRUFBRSxVQUFVLElBQVMsRUFBRSxRQUFhO2dCQUNuQyxJQUFJLFFBQVEsR0FBVSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksV0FBVyxHQUF3QixFQUFFLENBQUM7Z0JBQzFDLElBQUksVUFBVSxHQUFzQixFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDO2dCQUNyRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBTztvQkFDN0MsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQU87d0JBQzVDLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO3dCQUNqQyxJQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO3dCQUNyQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLElBQUksR0FBRyxFQUFFOzRCQUN0QyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUM3QixPQUFPO3lCQUNSO3dCQUVELElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7d0JBQ3pDLDJEQUEyRDt3QkFDM0QsSUFBSSxDQUFDLFNBQVMsRUFBRTs0QkFDZCxTQUFTLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQzt5QkFDdEM7d0JBRUQsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQzt3QkFDeEIsSUFBSSxTQUFTLEVBQUU7NEJBQ2IsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDOzRCQUNsQyxJQUFJLE9BQU8sRUFBRTtnQ0FDWCxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO2dDQUNwQyxJQUFJLFVBQVUsQ0FBQyxvQkFBb0IsS0FBSyxNQUFNLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFO29DQUN4RSxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO29DQUNsQyxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMseUJBQXlCLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBQUMsQ0FBQztvQ0FDekcsSUFBSSxVQUFVLEdBQUcsRUFBRSxjQUFjLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0NBQ3pHLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7aUNBQzlCOzZCQUNGOzRCQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7eUJBQzFCOzZCQUFNOzRCQUNMLElBQUksVUFBVSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQzs0QkFDeEMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzt5QkFDM0I7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDN0IsQ0FBQyxFQUFFLFVBQVUsR0FBUTtnQkFDbkIsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUVqQixDQUFDO0lBZ0RELGdEQUFjLEdBQWQsVUFBZSxXQUErQixFQUFFLEdBQVc7UUFDekQsSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3Qyx5REFBeUQ7UUFDekQsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQ3hFLGlEQUFpRDtRQUNqRCxJQUFJLE1BQU0sSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMzQyxnQ0FBZ0M7WUFDaEMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUk7Z0JBQzNELENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQ3BELElBQUksQ0FBQztTQUNSO1FBQ0QsT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxnREFBYyxHQUFkLFVBQWUsV0FBK0I7UUFDNUMseURBQXlEO1FBQ3pELG9GQUFvRjtRQUNwRiwwQ0FBMEM7UUFDMUMsZ0RBQWdEO1FBQ2hELCtEQUErRDtRQUMvRCxJQUFJLE1BQVcsQ0FBQztRQUNoQixJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxFQUFFLFVBQVU7WUFDNUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckMsTUFBTSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDO1NBQ3ZDO2FBQU0sRUFBRSxPQUFPO1lBQ2QsZ0NBQWdDO1lBQ2hDLGdEQUFnRDtZQUNoRCxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDN0M7UUFDRCxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtZQUNyQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQixDQUFDLGlDQUFpQztRQUNuQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7WUFDN0IsTUFBTSxJQUFJLEdBQUcsQ0FBQztTQUNmLENBQU0sc0JBQXNCO1FBQzdCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFSCw4QkFBQztBQUFELENBQUMsQUE1U0QsQ0FBNkMsTUFBTSxDQUFDLDBCQUEwQixHQTRTN0U7O0FBRUQscUNBQXFDO0FBQ3JDLFNBQVMsYUFBYSxDQUFDLEdBQVc7SUFDaEMsSUFBSSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBQ3pCLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFO1FBQ2pCLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN6QixLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RFO0tBQ0Y7SUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekIsQ0FBQztBQUVELDBEQUEwRDtBQUMxRCxTQUFTLGNBQWMsQ0FBQyxJQUF5QixFQUFFLEdBQVE7SUFDekQsSUFBSSxJQUFJLENBQUMsVUFBVTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3RDLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRTtRQUNwRCw4R0FBOEc7UUFDOUcsOERBQThEO1FBQzlELEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztLQUMxRTtTQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtRQUNyRCxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUM3QztTQUFNLElBQUssSUFBSSxDQUFDLFFBQTRCLENBQUMsY0FBYyxFQUFFO1FBQzVELEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztLQUMxQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsV0FBNkIsRUFBRSxVQUE2QjtJQUN4RixJQUFJLHdCQUF3QixHQUFJLFdBQVcsQ0FBQyxPQUFtQyxDQUFDLCtCQUErQixDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN6SSxJQUFJLGNBQWMsR0FBVSxFQUFFLENBQUM7SUFDL0IsSUFBSSxRQUFRLEdBQXVCLEVBQUUsQ0FBQztJQUN0QyxJQUFJLFdBQVcsR0FBb0IsRUFBRSxDQUFDO0lBQ3RDLElBQUksYUFBYSxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUM7SUFDOUMsSUFBSSxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztJQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWCxJQUFJLFdBQVcsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDO0lBRTFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFLEtBQUs7UUFDakQsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUNqQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLGdGQUFnRjtRQUM3RixJQUFJLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLEVBQVMsQ0FBQztRQUNwRixXQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNoQyxPQUFPLENBQUMsVUFBVSxHQUFHLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDO1lBQ3pFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ3hCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDN0QsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNoQzthQUFNLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUMxQyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVksQ0FBQyxDQUFDO1lBQ3hELE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO1lBQ3pCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQy9GLDBCQUEwQjtTQUMzQjthQUFNLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUN6Qyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVksQ0FBQyxDQUFDO1lBQ3hELE9BQU8sQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO1NBQzNCO2FBQU07WUFDTCxPQUFPO1NBQ1I7UUFDRCxPQUFPLEdBQUcsd0JBQXdCLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEUsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQixDQUFDLENBQUMsQ0FBQztJQUNILFdBQVcsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ3RDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQ2hDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5QyxPQUFPO1FBQ0wsZUFBZSxFQUFFO1lBQ2Y7Z0JBQ0UsZ0JBQWdCLEVBQUUsY0FBYzthQUNqQztTQUNGO0tBQ0YsQ0FBQztBQUVKLENBQUM7QUFFRCxTQUFTLHdCQUF3QixDQUFDLE9BQVksRUFBRSxNQUEyQixFQUFFLFdBQW1CO0lBQzlGLElBQUksTUFBYyxDQUFDO0lBQ25CLElBQUksYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7SUFDekMsSUFBSSxhQUFhLElBQUksSUFBSSxFQUFFO1FBQ3pCLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsTUFBTSxDQUFDLGFBQWEsR0FBRztZQUNyQixNQUFNLEVBQUUsTUFBTTtTQUNmLENBQUM7S0FDSDtTQUFNO1FBQ0wsTUFBTSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFDOUIsSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFO1lBQ3RCLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQztTQUNsRDtLQUNGO0lBQ0QsT0FBTyxDQUFDLFVBQVU7UUFDaEIsZ0VBQWdFO1FBQ2hFLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDN0QsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLE1BQTJCO0lBQzVDLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFPLENBQUMsVUFBVSxDQUFDO0lBQzNDLElBQUksWUFBWSxHQUFHLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQztJQUNsRCxJQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO0lBQ25DLElBQUksTUFBTSxHQUFHLFlBQVksR0FBRyxHQUFHLENBQUM7SUFDaEMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNwQixNQUFNLEdBQUcsTUFBTSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ3JEO1NBQU07UUFDTCxJQUFJLE9BQUssR0FBRyxFQUFFLENBQUM7UUFDZixHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRTtZQUN0QixNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQUssR0FBRyxFQUFFLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzFFLE9BQUssR0FBRyxHQUFHLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDO0tBQ3ZCO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLElBQXlCLEVBQUUsTUFBMkI7SUFDekUsT0FBUSxJQUFJLENBQUMsUUFBNEIsQ0FBQyxRQUFTLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFGLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFVLEVBQUUsR0FBVztJQUMxQywwRUFBMEU7SUFDMUUsd0VBQXdFO0lBQ3hFLElBQUksTUFBTSxHQUFHLElBQUksS0FBSyxFQUF3QixDQUFDO0lBQy9DLElBQUksUUFBUSxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQ3ZDLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDYixvREFBb0Q7UUFDcEQsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDdkIsTUFBTSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDMUIsT0FBTyxNQUFNLENBQUM7S0FDZjtJQUNELE1BQU0sQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztJQUNyQyxNQUFNLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDeEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO0lBQ3BDLFVBQVU7SUFDVixJQUFJLEdBQUc7UUFBRSxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMxQixNQUFNLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDNUIsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFO1FBQ2pCLElBQUksT0FBTyxTQUFLLENBQUM7UUFDakIsSUFBSTtZQUNGLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ25CLGlCQUFpQjtZQUNqQixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDdkIsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUM1QjtZQUNELElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNiLEdBQUc7Z0JBQ0QsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLE9BQU87b0JBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNDLE9BQU8sR0FBRyxPQUFPLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDO2dCQUM1QyxJQUFJLEdBQUcsT0FBTyxJQUFJLElBQUksQ0FBQzthQUN4QixRQUFRLE9BQU8sRUFBRTtZQUNsQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNsQixNQUFNLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQzthQUN0QjtTQUNGO1FBQUMsT0FBTyxDQUFDLEVBQUU7U0FFWDtLQUNGO0lBQ0QsTUFBTSxDQUFDLDBCQUEwQixDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xFLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxJQUFTO0lBQzNCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO0lBQzdCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztBQUd0RSxJQUFJLGVBQWUsR0FBRztJQUNwQixJQUFJLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztBQUM1QixDQUFDLENBQUM7O0FBRUYsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUVqRixNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsZUFBc0IsQ0FBQyxDQUFDO0FBQ3JFLGtCQUFrQjtBQUNsQixJQUFJLGdCQUFnQixHQUFHO0lBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDO0FBQzdCLENBQUMsQ0FBQzs7QUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUc7SUFDdEMsa0NBQWtDO0lBQ2xDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLDRDQUE0QyxDQUFDLENBQUM7SUFDckYsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO0lBQ3hCLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDL0MsQ0FBQyxDQUFDO0FBQ0YsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUNoRSxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsZ0JBQXVCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGJyZWV6ZSBmcm9tICdicmVlemUtY2xpZW50JztcclxuaW1wb3J0IHsgYXBwZW5kUXVlcnlTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tICcuL2FkYXB0ZXItY29yZSc7XHJcblxyXG5sZXQgY29yZSA9IGJyZWV6ZS5jb3JlO1xyXG5cclxuZGVjbGFyZSB2YXIgd2luZG93OiBhbnk7XHJcbmRlY2xhcmUgdmFyIGRvY3VtZW50OiBhbnk7XHJcbmRlY2xhcmUgdmFyIHVybDogYW55OyAvLyBuZWVkZWQgdG8gYWNjZXNzIG5vZGUncyB1cmwucGFyc2VcclxuZGVjbGFyZSB2YXIgT0RhdGE6IGFueTtcclxuXHJcbmludGVyZmFjZSBPRGF0YVNhdmVDb250ZXh0IGV4dGVuZHMgYnJlZXplLlNhdmVDb250ZXh0IHtcclxuICB0ZW1wS2V5czogYnJlZXplLkVudGl0eUtleVtdO1xyXG4gIGNvbnRlbnRLZXlzOiBicmVlemUuRW50aXR5W107XHJcbn1cclxuXHJcbi8qKiBAaGlkZGVuICovXHJcbmV4cG9ydCBjbGFzcyBEYXRhU2VydmljZU9EYXRhQWRhcHRlciBleHRlbmRzIGJyZWV6ZS5BYnN0cmFjdERhdGFTZXJ2aWNlQWRhcHRlciB7XHJcbiAgcmVsYXRpdmVVcmw6IGJvb2xlYW4gfCAoKGRzOiBicmVlemUuRGF0YVNlcnZpY2UsIHVybDogc3RyaW5nKSA9PiBzdHJpbmcpO1xyXG4gIC8vIF9jYXRjaE5vQ29ubmVjdGlvbkVycm9yID0gYWJzdHJhY3REc2FQcm90by5fY2F0Y2hOb0Nvbm5lY3Rpb25FcnJvcjtcclxuICAvLyBjaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3IgPSBhYnN0cmFjdERzYVByb3RvLmNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvcjtcclxuICAvLyBfY3JlYXRlQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yID0gYWJzdHJhY3REc2FQcm90by5fY3JlYXRlQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yO1xyXG4gIGhlYWRlcnMgPSB7IFwiRGF0YVNlcnZpY2VWZXJzaW9uXCI6IFwiMi4wXCIgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5uYW1lID0gXCJPRGF0YVwiO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHJlZ2lzdGVyKGNvbmZpZz86IGJyZWV6ZS5CcmVlemVDb25maWcpIHtcclxuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCBicmVlemUuY29uZmlnO1xyXG4gICAgY29uZmlnLnJlZ2lzdGVyQWRhcHRlcihcImRhdGFTZXJ2aWNlXCIsIERhdGFTZXJ2aWNlT0RhdGFBZGFwdGVyKTtcclxuICAgIHJldHVybiBjb25maWcuaW5pdGlhbGl6ZUFkYXB0ZXJJbnN0YW5jZShcImRhdGFTZXJ2aWNlXCIsIFwiT0RhdGFcIiwgdHJ1ZSkgYXMgRGF0YVNlcnZpY2VPRGF0YUFkYXB0ZXI7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplKCkge1xyXG4gICAgT0RhdGEgPSBjb3JlLnJlcXVpcmVMaWIoXCJPRGF0YVwiLCBcIk5lZWRlZCB0byBzdXBwb3J0IHJlbW90ZSBPRGF0YSBzZXJ2aWNlc1wiKTtcclxuICAgIE9EYXRhLmpzb25IYW5kbGVyLnJlY29nbml6ZURhdGVzID0gdHJ1ZTtcclxuICB9XHJcblxyXG5cclxuICAvLyBBYnNvbHV0ZSBVUkwgaXMgdGhlIGRlZmF1bHQgYXMgb2YgQnJlZXplIDEuNS41LiAgXHJcbiAgLy8gVG8gdXNlIHJlbGF0aXZlIFVSTCAobGlrZSBwcmUtMS41LjUpLCBhZGQgYWRhcHRlckluc3RhbmNlLnJlbGF0aXZlVXJsID0gdHJ1ZTpcclxuICAvL1xyXG4gIC8vICAgICBsZXQgZHMgPSBicmVlemUuY29uZmlnLmluaXRpYWxpemVBZGFwdGVySW5zdGFuY2UoXCJkYXRhU2VydmljZVwiLCBcIndlYkFwaU9EYXRhXCIpO1xyXG4gIC8vICAgICBkcy5yZWxhdGl2ZVVybCA9IHRydWU7IFxyXG4gIC8vXHJcbiAgLy8gVG8gdXNlIGN1c3RvbSB1cmwgY29uc3RydWN0aW9uLCBhZGQgYWRhcHRlckluc3RhbmNlLnJlbGF0aXZlVXJsID0gbXlmdW5jdGlvbihkYXRhU2VydmljZSwgdXJsKTpcclxuICAvL1xyXG4gIC8vICAgICBsZXQgZHMgPSBicmVlemUuY29uZmlnLmluaXRpYWxpemVBZGFwdGVySW5zdGFuY2UoXCJkYXRhU2VydmljZVwiLCBcIndlYkFwaU9EYXRhXCIpO1xyXG4gIC8vICAgICBkcy5yZWxhdGl2ZVVybCA9IGZ1bmN0aW9uKGRhdGFTZXJ2aWNlLCB1cmwpIHtcclxuICAvLyAgICAgICAgcmV0dXJuIHNvbWVob3dDb252ZXJ0KHVybCk7XHJcbiAgLy8gICAgIH1cclxuICAvL1xyXG5cclxuICBmZXRjaE1ldGFkYXRhKG1ldGFkYXRhU3RvcmU6IGJyZWV6ZS5NZXRhZGF0YVN0b3JlLCBkYXRhU2VydmljZTogYnJlZXplLkRhdGFTZXJ2aWNlKSB7XHJcbiAgICBsZXQgc2VydmljZU5hbWUgPSBkYXRhU2VydmljZS5zZXJ2aWNlTmFtZTtcclxuXHJcbiAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICBpZiAodGhpcy5yZWxhdGl2ZVVybCA9PT0gdHJ1ZSkge1xyXG4gICAgICB1cmwgPSBkYXRhU2VydmljZS5xdWFsaWZ5VXJsKCckbWV0YWRhdGEnKTtcclxuICAgIH0gZWxzZSBpZiAoY29yZS5pc0Z1bmN0aW9uKHRoaXMucmVsYXRpdmVVcmwpKSB7XHJcbiAgICAgIHVybCA9ICh0aGlzLnJlbGF0aXZlVXJsIGFzIGFueSkoZGF0YVNlcnZpY2UsICckbWV0YWRhdGEnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHVybCA9IHRoaXMuZ2V0QWJzb2x1dGVVcmwoZGF0YVNlcnZpY2UsICckbWV0YWRhdGEnKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgbWhlYWRlcnMgPSBjb3JlLmV4dGVuZCh7fSwgdGhpcy5oZWFkZXJzKTtcclxuICAgIChtaGVhZGVycyBhcyBhbnkpLkFjY2VwdCA9ICdhcHBsaWNhdGlvbi8qOyBvZGF0YS5tZXRhZGF0YT1mdWxsJztcclxuXHJcbiAgICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgLy8gT0RhdGEucmVhZCh1cmwsXHJcbiAgICAgIE9EYXRhLnJlYWQoe1xyXG4gICAgICAgIHJlcXVlc3RVcmk6IHVybCxcclxuICAgICAgICAvLyBoZWFkZXJzOiB7IFwiQWNjZXB0XCI6IFwiYXBwbGljYXRpb24vanNvblwifVxyXG4gICAgICAgIGhlYWRlcnM6IG1oZWFkZXJzXHJcbiAgICAgIH0sXHJcbiAgICAgICAgZnVuY3Rpb24gKGRhdGE6IGFueSkge1xyXG4gICAgICAgICAgLy8gZGF0YS5kYXRhU2VydmljZXMuc2NoZW1hIGlzIGFuIGFycmF5IG9mIHNjaGVtYXMuIHdpdGggcHJvcGVydGllcyBvZlxyXG4gICAgICAgICAgLy8gZW50aXR5Q29udGFpbmVyW10sIGFzc29jaWF0aW9uW10sIGVudGl0eVR5cGVbXSwgYW5kIG5hbWVzcGFjZS5cclxuICAgICAgICAgIGlmICghZGF0YSB8fCAhZGF0YS5kYXRhU2VydmljZXMpIHtcclxuICAgICAgICAgICAgbGV0IGVycm9yID0gbmV3IEVycm9yKFwiTWV0YWRhdGEgcXVlcnkgZmFpbGVkIGZvcjogXCIgKyB1cmwpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBjc2RsTWV0YWRhdGEgPSBkYXRhLmRhdGFTZXJ2aWNlcztcclxuXHJcbiAgICAgICAgICAvLyBtaWdodCBoYXZlIGJlZW4gZmV0Y2hlZCBieSBhbm90aGVyIHF1ZXJ5XHJcbiAgICAgICAgICBpZiAoIW1ldGFkYXRhU3RvcmUuaGFzTWV0YWRhdGFGb3Ioc2VydmljZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgbWV0YWRhdGFTdG9yZS5pbXBvcnRNZXRhZGF0YShjc2RsTWV0YWRhdGEpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoXCJNZXRhZGF0YSBxdWVyeSBmYWlsZWQgZm9yIFwiICsgdXJsICsgXCI7IFVuYWJsZSB0byBwcm9jZXNzIHJldHVybmVkIG1ldGFkYXRhOiBcIiArIGUubWVzc2FnZSkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBtZXRhZGF0YVN0b3JlLmFkZERhdGFTZXJ2aWNlKGRhdGFTZXJ2aWNlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZShjc2RsTWV0YWRhdGEpO1xyXG5cclxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgbGV0IGVyciA9IGNyZWF0ZUVycm9yKGVycm9yLCB1cmwpO1xyXG4gICAgICAgICAgZXJyLm1lc3NhZ2UgPSBcIk1ldGFkYXRhIHF1ZXJ5IGZhaWxlZCBmb3I6IFwiICsgdXJsICsgXCI7IFwiICsgKGVyci5tZXNzYWdlIHx8IFwiXCIpO1xyXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgT0RhdGEubWV0YWRhdGFIYW5kbGVyXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgZXhlY3V0ZVF1ZXJ5KG1hcHBpbmdDb250ZXh0OiBicmVlemUuTWFwcGluZ0NvbnRleHQpIHtcclxuICAgIGxldCB1cmw6IHN0cmluZztcclxuICAgIGlmICh0aGlzLnJlbGF0aXZlVXJsID09PSB0cnVlKSB7XHJcbiAgICAgIHVybCA9IG1hcHBpbmdDb250ZXh0LmdldFVybCgpO1xyXG4gICAgfSBlbHNlIGlmIChjb3JlLmlzRnVuY3Rpb24odGhpcy5yZWxhdGl2ZVVybCkpIHtcclxuICAgICAgdXJsID0gKHRoaXMucmVsYXRpdmVVcmwgYXMgYW55KShtYXBwaW5nQ29udGV4dC5kYXRhU2VydmljZSwgbWFwcGluZ0NvbnRleHQuZ2V0VXJsKCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsID0gdGhpcy5nZXRBYnNvbHV0ZVVybChtYXBwaW5nQ29udGV4dC5kYXRhU2VydmljZSwgbWFwcGluZ0NvbnRleHQuZ2V0VXJsKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZCBxdWVyeSBwYXJhbXMgaWYgLndpdGhQYXJhbWV0ZXJzIHdhcyB1c2VkXHJcbiAgICBsZXQgcXVlcnkgPSBtYXBwaW5nQ29udGV4dC5xdWVyeSBhcyBicmVlemUuRW50aXR5UXVlcnk7XHJcbiAgICBpZiAoIWNvcmUuaXNFbXB0eShxdWVyeS5wYXJhbWV0ZXJzKSkge1xyXG4gICAgICBsZXQgcGFyYW1TdHJpbmcgPSB0b1F1ZXJ5U3RyaW5nKHF1ZXJ5LnBhcmFtZXRlcnMpO1xyXG4gICAgICB1cmwgPSBhcHBlbmRRdWVyeVN0cmluZ1BhcmFtZXRlcih1cmwsIHBhcmFtU3RyaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlPGJyZWV6ZS5RdWVyeVJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBPRGF0YS5yZWFkKHtcclxuICAgICAgICByZXF1ZXN0VXJpOiB1cmwsXHJcbiAgICAgICAgaGVhZGVyczogY29yZS5leHRlbmQoe30sIHRoaXMuaGVhZGVycylcclxuICAgICAgfSxcclxuICAgICAgICBmdW5jdGlvbiAoZGF0YTogYW55LCByZXNwb25zZTogYW55KSB7XHJcbiAgICAgICAgICBsZXQgaW5saW5lQ291bnQ6IGFueTtcclxuICAgICAgICAgIGlmIChkYXRhLl9fY291bnQpIHtcclxuICAgICAgICAgICAgLy8gT0RhdGEgY2FuIHJldHVybiBkYXRhLl9fY291bnQgYXMgYSBzdHJpbmdcclxuICAgICAgICAgICAgaW5saW5lQ291bnQgPSBwYXJzZUludChkYXRhLl9fY291bnQsIDEwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIE9kYXRhIHJldHVybnMgZGlmZmVyZW50IHJlc3VsdCBzdHJ1Y3R1cmUgd2hlbiBpdCByZXR1cm5zIG11bHRpcGxlIGVudGl0aWVzIChkYXRhLnJlc3VsdHMpIHZzIHNpbmdsZSBlbnRpdHkgKGRhdGEgZGlyZWN0bHkpLlxyXG4gICAgICAgICAgLy8gQHNlZSBodHRwOi8vd3d3Lm9kYXRhLm9yZy9kb2N1bWVudGF0aW9uL29kYXRhLXZlcnNpb24tMi0wL2pzb24tZm9ybWF0LyNSZXByZXNlbnRpbmdDb2xsZWN0aW9uc09mRW50cmllc1xyXG4gICAgICAgICAgLy8gYW5kIGh0dHA6Ly93d3cub2RhdGEub3JnL2RvY3VtZW50YXRpb24vb2RhdGEtdmVyc2lvbi0yLTAvanNvbi1mb3JtYXQvI1JlcHJlc2VudGluZ0VudHJpZXNcclxuICAgICAgICAgIGxldCByZXN1bHRzOiBhbnk7XHJcbiAgICAgICAgICBpZiAoZGF0YS5yZXN1bHRzKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdHMgPSBkYXRhLnJlc3VsdHM7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHRzID0gZGF0YTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXNvbHZlKHsgcmVzdWx0czogcmVzdWx0cywgaW5saW5lQ291bnQ6IGlubGluZUNvdW50LCBodHRwUmVzcG9uc2U6IHJlc3BvbnNlLCBxdWVyeTogcXVlcnkgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBmdW5jdGlvbiAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVFcnJvcihlcnJvciwgdXJsKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxuICB9XHJcblxyXG5cclxuICBzYXZlQ2hhbmdlcyhvZGF0YVNhdmVDb250ZXh0OiBicmVlemUuU2F2ZUNvbnRleHQsIHNhdmVCdW5kbGU6IGJyZWV6ZS5TYXZlQnVuZGxlKTogUHJvbWlzZTxicmVlemUuU2F2ZVJlc3VsdD4ge1xyXG4gICAgbGV0IGFkYXB0ZXIgPSBvZGF0YVNhdmVDb250ZXh0LmFkYXB0ZXIgPSB0aGlzO1xyXG4gICAgbGV0IHNhdmVDb250ZXh0ID0gb2RhdGFTYXZlQ29udGV4dCBhcyBPRGF0YVNhdmVDb250ZXh0O1xyXG4gICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgaWYgKHRoaXMucmVsYXRpdmVVcmwgPT09IHRydWUpIHtcclxuICAgICAgc2F2ZUNvbnRleHQucm91dGVQcmVmaXggPSBhZGFwdGVyLmdldFJvdXRlUHJlZml4KHNhdmVDb250ZXh0LmRhdGFTZXJ2aWNlKTtcclxuICAgICAgdXJsID0gc2F2ZUNvbnRleHQuZGF0YVNlcnZpY2UucXVhbGlmeVVybChcIiRiYXRjaFwiKTtcclxuICAgIH0gZWxzZSBpZiAoY29yZS5pc0Z1bmN0aW9uKGFkYXB0ZXIucmVsYXRpdmVVcmwpKSB7XHJcbiAgICAgIHNhdmVDb250ZXh0LnJvdXRlUHJlZml4ID0gKGFkYXB0ZXIucmVsYXRpdmVVcmwgYXMgRnVuY3Rpb24pKHNhdmVDb250ZXh0LmRhdGFTZXJ2aWNlLCAnJyk7XHJcbiAgICAgIHVybCA9IHNhdmVDb250ZXh0LnJvdXRlUHJlZml4ICsgJyRiYXRjaCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzYXZlQ29udGV4dC5yb3V0ZVByZWZpeCA9IGFkYXB0ZXIuZ2V0QWJzb2x1dGVVcmwoc2F2ZUNvbnRleHQuZGF0YVNlcnZpY2UsICcnKTtcclxuICAgICAgdXJsID0gc2F2ZUNvbnRleHQucm91dGVQcmVmaXggKyAnJGJhdGNoJztcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmVxdWVzdERhdGEgPSBjcmVhdGVDaGFuZ2VSZXF1ZXN0cyhzYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZSk7XHJcbiAgICBsZXQgdGVtcEtleXMgPSBzYXZlQ29udGV4dC50ZW1wS2V5cztcclxuICAgIGxldCBjb250ZW50S2V5cyA9IHNhdmVDb250ZXh0LmNvbnRlbnRLZXlzO1xyXG4gICAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxicmVlemUuU2F2ZVJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBPRGF0YS5yZXF1ZXN0KHtcclxuICAgICAgICBoZWFkZXJzOiBjb3JlLmV4dGVuZCh7fSwgdGhpcy5oZWFkZXJzKSxcclxuICAgICAgICByZXF1ZXN0VXJpOiB1cmwsXHJcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICBkYXRhOiByZXF1ZXN0RGF0YVxyXG4gICAgICB9LCBmdW5jdGlvbiAoZGF0YTogYW55LCByZXNwb25zZTogYW55KSB7XHJcbiAgICAgICAgbGV0IGVudGl0aWVzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIGxldCBrZXlNYXBwaW5nczogYnJlZXplLktleU1hcHBpbmdbXSA9IFtdO1xyXG4gICAgICAgIGxldCBzYXZlUmVzdWx0OiBicmVlemUuU2F2ZVJlc3VsdCA9IHsgZW50aXRpZXM6IGVudGl0aWVzLCBrZXlNYXBwaW5nczoga2V5TWFwcGluZ3MgfTtcclxuICAgICAgICBkYXRhLl9fYmF0Y2hSZXNwb25zZXMuZm9yRWFjaChmdW5jdGlvbiAoYnI6IGFueSkge1xyXG4gICAgICAgICAgYnIuX19jaGFuZ2VSZXNwb25zZXMuZm9yRWFjaChmdW5jdGlvbiAoY3I6IGFueSkge1xyXG4gICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSBjci5yZXNwb25zZSB8fCBjcjtcclxuICAgICAgICAgICAgbGV0IHN0YXR1c0NvZGUgPSByZXNwb25zZS5zdGF0dXNDb2RlO1xyXG4gICAgICAgICAgICBpZiAoKCFzdGF0dXNDb2RlKSB8fCBzdGF0dXNDb2RlID49IDQwMCkge1xyXG4gICAgICAgICAgICAgIHJlamVjdChjcmVhdGVFcnJvcihjciwgdXJsKSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgY29udGVudElkID0gY3IuaGVhZGVyc1tcIkNvbnRlbnQtSURcIl07XHJcbiAgICAgICAgICAgIC8vIE9saW5nbyBzZW5kcyBkaWZmZXJlbnQgY2FzZSBvZiAnSUQnIGZvciB0aGUgaGVhZGVyIG5hbWUuXHJcbiAgICAgICAgICAgIGlmICghY29udGVudElkKSB7XHJcbiAgICAgICAgICAgICAgY29udGVudElkID0gY3IuaGVhZGVyc1tcIkNvbnRlbnQtSWRcIl07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCByYXdFbnRpdHkgPSBjci5kYXRhO1xyXG4gICAgICAgICAgICBpZiAocmF3RW50aXR5KSB7XHJcbiAgICAgICAgICAgICAgbGV0IHRlbXBLZXkgPSB0ZW1wS2V5c1tjb250ZW50SWRdO1xyXG4gICAgICAgICAgICAgIGlmICh0ZW1wS2V5KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZW50aXR5VHlwZSA9IHRlbXBLZXkuZW50aXR5VHlwZTtcclxuICAgICAgICAgICAgICAgIGlmIChlbnRpdHlUeXBlLmF1dG9HZW5lcmF0ZWRLZXlUeXBlICE9PSBicmVlemUuQXV0b0dlbmVyYXRlZEtleVR5cGUuTm9uZSkge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgdGVtcFZhbHVlID0gdGVtcEtleS52YWx1ZXNbMF07XHJcbiAgICAgICAgICAgICAgICAgIGxldCByZWFsS2V5ID0gZW50aXR5VHlwZS5nZXRFbnRpdHlLZXlGcm9tUmF3RW50aXR5KHJhd0VudGl0eSwgYnJlZXplLkRhdGFQcm9wZXJ0eS5nZXRSYXdWYWx1ZUZyb21TZXJ2ZXIpO1xyXG4gICAgICAgICAgICAgICAgICBsZXQga2V5TWFwcGluZyA9IHsgZW50aXR5VHlwZU5hbWU6IGVudGl0eVR5cGUubmFtZSwgdGVtcFZhbHVlOiB0ZW1wVmFsdWUsIHJlYWxWYWx1ZTogcmVhbEtleS52YWx1ZXNbMF0gfTtcclxuICAgICAgICAgICAgICAgICAga2V5TWFwcGluZ3MucHVzaChrZXlNYXBwaW5nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZW50aXRpZXMucHVzaChyYXdFbnRpdHkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGxldCBvcmlnRW50aXR5ID0gY29udGVudEtleXNbY29udGVudElkXTtcclxuICAgICAgICAgICAgICBlbnRpdGllcy5wdXNoKG9yaWdFbnRpdHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzb2x2ZShzYXZlUmVzdWx0KTtcclxuICAgICAgfSwgZnVuY3Rpb24gKGVycjogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVFcnJvcihlcnIsIHVybCkpO1xyXG4gICAgICB9LCBPRGF0YS5iYXRjaEhhbmRsZXIpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxuXHJcbiAgfVxyXG5cclxuICBqc29uUmVzdWx0c0FkYXB0ZXI6IGJyZWV6ZS5Kc29uUmVzdWx0c0FkYXB0ZXIgPSBuZXcgYnJlZXplLkpzb25SZXN1bHRzQWRhcHRlcih7XHJcbiAgICBuYW1lOiBcIk9EYXRhX2RlZmF1bHRcIixcclxuXHJcbiAgICB2aXNpdE5vZGU6IGZ1bmN0aW9uIChub2RlOiBhbnksIG1hcHBpbmdDb250ZXh0OiBicmVlemUuTWFwcGluZ0NvbnRleHQsIG5vZGVDb250ZXh0OiBicmVlemUuTm9kZUNvbnRleHQpIHtcclxuICAgICAgbGV0IHJlc3VsdDogYW55ID0ge307XHJcbiAgICAgIGlmIChub2RlID09IG51bGwpIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIGxldCBtZXRhZGF0YSA9IG5vZGUuX19tZXRhZGF0YTtcclxuICAgICAgaWYgKG1ldGFkYXRhICE9IG51bGwpIHtcclxuICAgICAgICAvLyBUT0RPOiBtYXkgYmUgYWJsZSB0byBtYWtlIHRoaXMgbW9yZSBlZmZpY2llbnQgYnkgY2FjaGluZyBvZiB0aGUgcHJldmlvdXMgdmFsdWUuXHJcbiAgICAgICAgbGV0IGVudGl0eVR5cGVOYW1lID0gYnJlZXplLk1ldGFkYXRhU3RvcmUubm9ybWFsaXplVHlwZU5hbWUobWV0YWRhdGEudHlwZSk7XHJcbiAgICAgICAgbGV0IGV0ID0gZW50aXR5VHlwZU5hbWUgJiYgbWFwcGluZ0NvbnRleHQuZW50aXR5TWFuYWdlci5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoZW50aXR5VHlwZU5hbWUsIHRydWUpO1xyXG4gICAgICAgIC8vIE9EYXRhIHJlc3BvbnNlIGRvZXNuJ3QgZGlzdGluZ3Vpc2ggYSBwcm9qZWN0aW9uIGZyb20gYSB3aG9sZSBlbnRpdHkuXHJcbiAgICAgICAgLy8gV2UnbGwgYXNzdW1lIHRoYXQgd2hvbGUtZW50aXR5IGRhdGEgd291bGQgaGF2ZSBhdCBsZWFzdCBhcyBtYW55IHByb3BlcnRpZXMgICg8PSlcclxuICAgICAgICAvLyBhcyB0aGUgRW50aXR5VHlwZSBoYXMgbWFwcGVkIHByb3BlcnRpZXMgb24gdGhlIGJhc2lzIHRoYXRcclxuICAgICAgICAvLyBtb3N0IHByb2plY3Rpb25zIHJlbW92ZSBwcm9wZXJ0aWVzIHJhdGhlciB0aGFuIGFkZCB0aGVtLlxyXG4gICAgICAgIC8vIElmIG5vdCwgYXNzdW1lIGl0J3MgYSBwcm9qZWN0aW9uIGFuZCBkbyBOT1QgdHJlYXQgYXMgYW4gZW50aXR5XHJcbiAgICAgICAgaWYgKGV0ICYmIGV0Ll9tYXBwZWRQcm9wZXJ0aWVzQ291bnQgPD0gT2JqZWN0LmtleXMobm9kZSkubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgLy8gaWYgKGV0ICYmIGV0Ll9tYXBwZWRQcm9wZXJ0aWVzQ291bnQgPT09IE9iamVjdC5rZXlzKG5vZGUpLmxlbmd0aCAtIDEpIHsgLy8gT0xEXHJcbiAgICAgICAgICByZXN1bHQuZW50aXR5VHlwZSA9IGV0O1xyXG4gICAgICAgICAgbGV0IHVyaUtleSA9IG1ldGFkYXRhLnVyaSB8fCBtZXRhZGF0YS5pZDtcclxuICAgICAgICAgIGlmICh1cmlLZXkpIHtcclxuICAgICAgICAgICAgLy8gU3RyaXAgYmFzZVVyaSB0byBtYWtlIHVyaUtleSBhIHJlbGF0aXZlIHVyaVxyXG4gICAgICAgICAgICAvLyBUb2RvOiB3aHkgaXMgdGhpcyBuZWNlc3Nhcnkgd2hlbiBhYnNvbHV0ZSB3b3JrcyBmb3IgZXZlcnkgT0RhdGEgc291cmNlIHRlc3RlZD9cclxuICAgICAgICAgICAgbGV0IHJlID0gbmV3IFJlZ0V4cCgnXicgKyBtYXBwaW5nQ29udGV4dC5kYXRhU2VydmljZS5zZXJ2aWNlTmFtZSwgJ2knKTtcclxuICAgICAgICAgICAgdXJpS2V5ID0gdXJpS2V5LnJlcGxhY2UocmUsICcnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlc3VsdC5leHRyYU1ldGFkYXRhID0ge1xyXG4gICAgICAgICAgICB1cmlLZXk6IHVyaUtleSxcclxuICAgICAgICAgICAgZXRhZzogbWV0YWRhdGEuZXRhZ1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gT0RhdGEgdjMgLSBwcm9qZWN0aW9uIGFycmF5cyB3aWxsIGJlIGVuY2xvc2VkIGluIGEgcmVzdWx0cyBhcnJheVxyXG4gICAgICBpZiAobm9kZS5yZXN1bHRzKSB7XHJcbiAgICAgICAgcmVzdWx0Lm5vZGUgPSBub2RlLnJlc3VsdHM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBwcm9wZXJ0eU5hbWUgPSBub2RlQ29udGV4dC5wcm9wZXJ0eU5hbWU7XHJcbiAgICAgIHJlc3VsdC5pZ25vcmUgPSBub2RlLl9fZGVmZXJyZWQgIT0gbnVsbCB8fCBwcm9wZXJ0eU5hbWUgPT09IFwiX19tZXRhZGF0YVwiIHx8XHJcbiAgICAgICAgLy8gRW50aXR5S2V5IHByb3BlcnRpZXMgY2FuIGJlIHByb2R1Y2VkIGJ5IEVETVggbW9kZWxzXHJcbiAgICAgICAgKHByb3BlcnR5TmFtZSA9PT0gXCJFbnRpdHlLZXlcIiAmJiBub2RlLiR0eXBlICYmIGNvcmUuc3RyaW5nU3RhcnRzV2l0aChub2RlLiR0eXBlLCBcIlN5c3RlbS5EYXRhXCIpKTtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgfSk7XHJcblxyXG4gIGdldEFic29sdXRlVXJsKGRhdGFTZXJ2aWNlOiBicmVlemUuRGF0YVNlcnZpY2UsIHVybDogc3RyaW5nKSB7XHJcbiAgICBsZXQgc2VydmljZU5hbWUgPSBkYXRhU2VydmljZS5xdWFsaWZ5VXJsKCcnKTtcclxuICAgIC8vIG9ubHkgcHJlZml4IHdpdGggc2VydmljZU5hbWUgaWYgbm90IGFscmVhZHkgb24gdGhlIHVybFxyXG4gICAgbGV0IGJhc2UgPSAoY29yZS5zdHJpbmdTdGFydHNXaXRoKHVybCwgc2VydmljZU5hbWUpKSA/ICcnIDogc2VydmljZU5hbWU7XHJcbiAgICAvLyBJZiBubyBwcm90b2NvbCwgdHVybiBiYXNlIGludG8gYW4gYWJzb2x1dGUgVVJJXHJcbiAgICBpZiAod2luZG93ICYmIHNlcnZpY2VOYW1lLmluZGV4T2YoJy8vJykgPCAwKSB7XHJcbiAgICAgIC8vIG5vIHByb3RvY29sOyBtYWtlIGl0IGFic29sdXRlXHJcbiAgICAgIGJhc2UgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgK1xyXG4gICAgICAgIChjb3JlLnN0cmluZ1N0YXJ0c1dpdGgoc2VydmljZU5hbWUsICcvJykgPyAnJyA6ICcvJykgK1xyXG4gICAgICAgIGJhc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmFzZSArIHVybDtcclxuICB9XHJcblxyXG4gIGdldFJvdXRlUHJlZml4KGRhdGFTZXJ2aWNlOiBicmVlemUuRGF0YVNlcnZpY2UpIHtcclxuICAgIC8vIEdldCB0aGUgcm91dGVQcmVmaXggZnJvbSBhIFdlYiBBUEkgT0RhdGEgc2VydmljZSBuYW1lLlxyXG4gICAgLy8gVGhlIHJvdXRlUHJlZml4IGlzIHByZXN1bWVkIHRvIGJlIHRoZSBwYXRobmFtZSB3aXRoaW4gdGhlIGRhdGFTZXJ2aWNlLnNlcnZpY2VOYW1lXHJcbiAgICAvLyBFeGFtcGxlcyBvZiBzZXJ2aWNlbmFtZSAtPiByb3V0ZVByZWZpeDpcclxuICAgIC8vICAgJ2h0dHA6Ly9sb2NhbGhvc3Q6NTU4MDIvb2RhdGEvJyAtPiAnb2RhdGEvJ1xyXG4gICAgLy8gICAnaHR0cDovLzE5OC4xNTQuMTIxLjc1L3NlcnZpY2Uvb2RhdGEvJyAtPiAnc2VydmljZS9vZGF0YS8nXHJcbiAgICBsZXQgcGFyc2VyOiBhbnk7XHJcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JykgeyAvLyBicm93c2VyXHJcbiAgICAgIHBhcnNlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgcGFyc2VyLmhyZWYgPSBkYXRhU2VydmljZS5zZXJ2aWNlTmFtZTtcclxuICAgIH0gZWxzZSB7IC8vIG5vZGVcclxuICAgICAgLy8gVE9ETzogaG93IHRvIGJlc3QgaGFuZGxlIHRoaXNcclxuICAgICAgLy8gYXNzdW1lcyBleGlzdGVuY2Ugb2Ygbm9kZSdzIHVybC5wYXJzZSBtZXRob2QuXHJcbiAgICAgIHBhcnNlciA9IHVybC5wYXJzZShkYXRhU2VydmljZS5zZXJ2aWNlTmFtZSk7XHJcbiAgICB9XHJcbiAgICBsZXQgcHJlZml4ID0gcGFyc2VyLnBhdGhuYW1lO1xyXG4gICAgaWYgKHByZWZpeFswXSA9PT0gJy8nKSB7XHJcbiAgICAgIHByZWZpeCA9IHByZWZpeC5zdWJzdHIoMSk7XHJcbiAgICB9IC8vIGRyb3AgbGVhZGluZyAnLycgIChhbGwgYnV0IElFKVxyXG4gICAgaWYgKHByZWZpeC5zdWJzdHIoLTEpICE9PSAnLycpIHtcclxuICAgICAgcHJlZml4ICs9ICcvJztcclxuICAgIH0gICAgICAvLyBlbnN1cmUgdHJhaWxpbmcgJy8nXHJcbiAgICByZXR1cm4gcHJlZml4O1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbi8vIGNydWRlIHNlcmlhbGl6ZXIuICBEb2Vzbid0IHJlY3Vyc2VcclxuZnVuY3Rpb24gdG9RdWVyeVN0cmluZyhvYmo6IE9iamVjdCkge1xyXG4gIGxldCBwYXJ0czogc3RyaW5nW10gPSBbXTtcclxuICBmb3IgKGxldCBpIGluIG9iaikge1xyXG4gICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICBwYXJ0cy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChpKSArIFwiPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG9ialtpXSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gcGFydHMuam9pbihcIiZcIik7XHJcbn1cclxuXHJcbi8qKiBUcmFuc2Zvcm0gZGF0YSBwcm9wZXJ0aWVzIHdoaWxlIHVud3JhcHBpbmcgZW50aXRpZXMgKi9cclxuZnVuY3Rpb24gdHJhbnNmb3JtVmFsdWUocHJvcDogYnJlZXplLkRhdGFQcm9wZXJ0eSwgdmFsOiBhbnkpIHtcclxuICBpZiAocHJvcC5pc1VubWFwcGVkKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIGlmIChwcm9wLmRhdGFUeXBlID09PSBicmVlemUuRGF0YVR5cGUuRGF0ZVRpbWVPZmZzZXQpIHtcclxuICAgIC8vIFRoZSBkYXRhanMgbGliIHRyaWVzIHRvIHRyZWF0IGNsaWVudCBkYXRlVGltZXMgdGhhdCBhcmUgZGVmaW5lZCBhcyBEYXRlVGltZU9mZnNldCBvbiB0aGUgc2VydmVyIGRpZmZlcmVudGx5XHJcbiAgICAvLyBmcm9tIG90aGVyIGRhdGVUaW1lcy4gVGhpcyBmaXggY29tcGVuc2F0ZXMgYmVmb3JlIHRoZSBzYXZlLlxyXG4gICAgdmFsID0gdmFsICYmIG5ldyBEYXRlKHZhbC5nZXRUaW1lKCkgLSAodmFsLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkpO1xyXG4gIH0gZWxzZSBpZiAocHJvcC5kYXRhVHlwZSA9PT0gYnJlZXplLkRhdGFUeXBlLkRhdGVPbmx5KSB7XHJcbiAgICB2YWwgPSBicmVlemUuRGF0YVR5cGUudG9EYXRlT25seVN0cmluZyh2YWwpO1xyXG4gIH0gZWxzZSBpZiAoKHByb3AuZGF0YVR5cGUgYXMgYnJlZXplLkRhdGFUeXBlKS5xdW90ZUpzb25PRGF0YSkge1xyXG4gICAgdmFsID0gdmFsICE9IG51bGwgPyB2YWwudG9TdHJpbmcoKSA6IHZhbDtcclxuICB9XHJcbiAgcmV0dXJuIHZhbDtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlQ2hhbmdlUmVxdWVzdHMoc2F2ZUNvbnRleHQ6IE9EYXRhU2F2ZUNvbnRleHQsIHNhdmVCdW5kbGU6IGJyZWV6ZS5TYXZlQnVuZGxlKSB7XHJcbiAgbGV0IGNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvciA9IChzYXZlQ29udGV4dC5hZGFwdGVyIGFzIERhdGFTZXJ2aWNlT0RhdGFBZGFwdGVyKS5fY3JlYXRlQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yKHNhdmVDb250ZXh0LCBzYXZlQnVuZGxlKTtcclxuICBsZXQgY2hhbmdlUmVxdWVzdHM6IGFueVtdID0gW107XHJcbiAgbGV0IHRlbXBLZXlzOiBicmVlemUuRW50aXR5S2V5W10gPSBbXTtcclxuICBsZXQgY29udGVudEtleXM6IGJyZWV6ZS5FbnRpdHlbXSA9IFtdO1xyXG4gIGxldCBlbnRpdHlNYW5hZ2VyID0gc2F2ZUNvbnRleHQuZW50aXR5TWFuYWdlcjtcclxuICBsZXQgaGVscGVyID0gZW50aXR5TWFuYWdlci5oZWxwZXI7XHJcbiAgbGV0IGlkID0gMDtcclxuICBsZXQgcm91dGVQcmVmaXggPSBzYXZlQ29udGV4dC5yb3V0ZVByZWZpeDtcclxuXHJcbiAgc2F2ZUJ1bmRsZS5lbnRpdGllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRpdHksIGluZGV4KSB7XHJcbiAgICBsZXQgYXNwZWN0ID0gZW50aXR5LmVudGl0eUFzcGVjdDtcclxuICAgIGlkID0gaWQgKyAxOyAvLyB3ZSBhcmUgZGVsaWJlcmF0ZWx5IHNraXBwaW5nIGlkPTAgYmVjYXVzZSBDb250ZW50LUlEID0gMCBzZWVtcyB0byBiZSBpZ25vcmVkLlxyXG4gICAgbGV0IHJlcXVlc3QgPSB7IGhlYWRlcnM6IHsgXCJDb250ZW50LUlEXCI6IGlkLCBcIkRhdGFTZXJ2aWNlVmVyc2lvblwiOiBcIjIuMFwiIH0gfSBhcyBhbnk7XHJcbiAgICBjb250ZW50S2V5c1tpZF0gPSBlbnRpdHk7XHJcbiAgICBpZiAoYXNwZWN0LmVudGl0eVN0YXRlLmlzQWRkZWQoKSkge1xyXG4gICAgICByZXF1ZXN0LnJlcXVlc3RVcmkgPSByb3V0ZVByZWZpeCArIGVudGl0eS5lbnRpdHlUeXBlLmRlZmF1bHRSZXNvdXJjZU5hbWU7XHJcbiAgICAgIHJlcXVlc3QubWV0aG9kID0gXCJQT1NUXCI7XHJcbiAgICAgIHJlcXVlc3QuZGF0YSA9IGhlbHBlci51bndyYXBJbnN0YW5jZShlbnRpdHksIHRyYW5zZm9ybVZhbHVlKTtcclxuICAgICAgdGVtcEtleXNbaWRdID0gYXNwZWN0LmdldEtleSgpO1xyXG4gICAgfSBlbHNlIGlmIChhc3BlY3QuZW50aXR5U3RhdGUuaXNNb2RpZmllZCgpKSB7XHJcbiAgICAgIHVwZGF0ZURlbGV0ZU1lcmdlUmVxdWVzdChyZXF1ZXN0LCBhc3BlY3QsIHJvdXRlUHJlZml4ISk7XHJcbiAgICAgIHJlcXVlc3QubWV0aG9kID0gXCJNRVJHRVwiO1xyXG4gICAgICByZXF1ZXN0LmRhdGEgPSBoZWxwZXIudW53cmFwQ2hhbmdlZFZhbHVlcyhlbnRpdHksIGVudGl0eU1hbmFnZXIubWV0YWRhdGFTdG9yZSwgdHJhbnNmb3JtVmFsdWUpO1xyXG4gICAgICAvLyBzaG91bGQgYmUgYSBQQVRDSC9NRVJHRVxyXG4gICAgfSBlbHNlIGlmIChhc3BlY3QuZW50aXR5U3RhdGUuaXNEZWxldGVkKCkpIHtcclxuICAgICAgdXBkYXRlRGVsZXRlTWVyZ2VSZXF1ZXN0KHJlcXVlc3QsIGFzcGVjdCwgcm91dGVQcmVmaXghKTtcclxuICAgICAgcmVxdWVzdC5tZXRob2QgPSBcIkRFTEVURVwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmVxdWVzdCA9IGNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvci5nZXRSZXF1ZXN0KHJlcXVlc3QsIGVudGl0eSwgaW5kZXgpO1xyXG4gICAgY2hhbmdlUmVxdWVzdHMucHVzaChyZXF1ZXN0KTtcclxuICB9KTtcclxuICBzYXZlQ29udGV4dC5jb250ZW50S2V5cyA9IGNvbnRlbnRLZXlzO1xyXG4gIHNhdmVDb250ZXh0LnRlbXBLZXlzID0gdGVtcEtleXM7XHJcbiAgY2hhbmdlUmVxdWVzdEludGVyY2VwdG9yLmRvbmUoY2hhbmdlUmVxdWVzdHMpO1xyXG4gIHJldHVybiB7XHJcbiAgICBfX2JhdGNoUmVxdWVzdHM6IFtcclxuICAgICAge1xyXG4gICAgICAgIF9fY2hhbmdlUmVxdWVzdHM6IGNoYW5nZVJlcXVlc3RzXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9O1xyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gdXBkYXRlRGVsZXRlTWVyZ2VSZXF1ZXN0KHJlcXVlc3Q6IGFueSwgYXNwZWN0OiBicmVlemUuRW50aXR5QXNwZWN0LCByb3V0ZVByZWZpeDogc3RyaW5nKSB7XHJcbiAgbGV0IHVyaUtleTogc3RyaW5nO1xyXG4gIGxldCBleHRyYU1ldGFkYXRhID0gYXNwZWN0LmV4dHJhTWV0YWRhdGE7XHJcbiAgaWYgKGV4dHJhTWV0YWRhdGEgPT0gbnVsbCkge1xyXG4gICAgdXJpS2V5ID0gZ2V0VXJpS2V5KGFzcGVjdCk7XHJcbiAgICBhc3BlY3QuZXh0cmFNZXRhZGF0YSA9IHtcclxuICAgICAgdXJpS2V5OiB1cmlLZXlcclxuICAgIH07XHJcbiAgfSBlbHNlIHtcclxuICAgIHVyaUtleSA9IGV4dHJhTWV0YWRhdGEudXJpS2V5O1xyXG4gICAgaWYgKGV4dHJhTWV0YWRhdGEuZXRhZykge1xyXG4gICAgICByZXF1ZXN0LmhlYWRlcnNbXCJJZi1NYXRjaFwiXSA9IGV4dHJhTWV0YWRhdGEuZXRhZztcclxuICAgIH1cclxuICB9XHJcbiAgcmVxdWVzdC5yZXF1ZXN0VXJpID1cclxuICAgIC8vIHVzZSByb3V0ZVByZWZpeCBpZiB1cmlLZXkgbGFja3MgcHJvdG9jb2wgKGkuZS4sIHJlbGF0aXZlIHVyaSlcclxuICAgIHVyaUtleS5pbmRleE9mKCcvLycpID4gMCA/IHVyaUtleSA6IHJvdXRlUHJlZml4ICsgdXJpS2V5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRVcmlLZXkoYXNwZWN0OiBicmVlemUuRW50aXR5QXNwZWN0KSB7XHJcbiAgbGV0IGVudGl0eVR5cGUgPSBhc3BlY3QuZW50aXR5IS5lbnRpdHlUeXBlO1xyXG4gIGxldCByZXNvdXJjZU5hbWUgPSBlbnRpdHlUeXBlLmRlZmF1bHRSZXNvdXJjZU5hbWU7XHJcbiAgbGV0IGtwcyA9IGVudGl0eVR5cGUua2V5UHJvcGVydGllcztcclxuICBsZXQgdXJpS2V5ID0gcmVzb3VyY2VOYW1lICsgXCIoXCI7XHJcbiAgaWYgKGtwcy5sZW5ndGggPT09IDEpIHtcclxuICAgIHVyaUtleSA9IHVyaUtleSArIGZtdFByb3BlcnR5KGtwc1swXSwgYXNwZWN0KSArIFwiKVwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBsZXQgZGVsaW0gPSBcIlwiO1xyXG4gICAga3BzLmZvckVhY2goZnVuY3Rpb24gKGtwKSB7XHJcbiAgICAgIHVyaUtleSA9IHVyaUtleSArIGRlbGltICsga3AubmFtZU9uU2VydmVyICsgXCI9XCIgKyBmbXRQcm9wZXJ0eShrcCwgYXNwZWN0KTtcclxuICAgICAgZGVsaW0gPSBcIixcIjtcclxuICAgIH0pO1xyXG4gICAgdXJpS2V5ID0gdXJpS2V5ICsgXCIpXCI7XHJcbiAgfVxyXG4gIHJldHVybiB1cmlLZXk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZtdFByb3BlcnR5KHByb3A6IGJyZWV6ZS5EYXRhUHJvcGVydHksIGFzcGVjdDogYnJlZXplLkVudGl0eUFzcGVjdCkge1xyXG4gIHJldHVybiAocHJvcC5kYXRhVHlwZSBhcyBicmVlemUuRGF0YVR5cGUpLmZtdE9EYXRhIShhc3BlY3QuZ2V0UHJvcGVydHlWYWx1ZShwcm9wLm5hbWUpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlRXJyb3IoZXJyb3I6IGFueSwgdXJsOiBzdHJpbmcpIHtcclxuICAvLyBPRGF0YSBlcnJvcnMgY2FuIGhhdmUgdGhlIG1lc3NhZ2UgYnVyaWVkIHZlcnkgZGVlcGx5IC0gYW5kIG5vbm9idmlvdXNseVxyXG4gIC8vIHRoaXMgY29kZSBpcyB0cmlja3kgc28gYmUgY2FyZWZ1bCBjaGFuZ2luZyB0aGUgcmVzcG9uc2UuYm9keSBwYXJzaW5nLlxyXG4gIGxldCByZXN1bHQgPSBuZXcgRXJyb3IoKSBhcyBicmVlemUuU2VydmVyRXJyb3I7XHJcbiAgbGV0IHJlc3BvbnNlID0gZXJyb3IgJiYgZXJyb3IucmVzcG9uc2U7XHJcbiAgaWYgKCFyZXNwb25zZSkge1xyXG4gICAgLy8gaW4gY2FzZSBEYXRhSlMgcmV0dXJucyBcIk5vIGhhbmRsZXIgZm9yIHRoaXMgZGF0YVwiXHJcbiAgICByZXN1bHQubWVzc2FnZSA9IGVycm9yO1xyXG4gICAgcmVzdWx0LnN0YXR1c1RleHQgPSBlcnJvcjtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG4gIHJlc3VsdC5tZXNzYWdlID0gcmVzcG9uc2Uuc3RhdHVzVGV4dDtcclxuICByZXN1bHQuc3RhdHVzVGV4dCA9IHJlc3BvbnNlLnN0YXR1c1RleHQ7XHJcbiAgcmVzdWx0LnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1c0NvZGU7XHJcbiAgLy8gbm9uIHN0ZFxyXG4gIGlmICh1cmwpIHJlc3VsdC51cmwgPSB1cmw7XHJcbiAgcmVzdWx0LmJvZHkgPSByZXNwb25zZS5ib2R5O1xyXG4gIGlmIChyZXNwb25zZS5ib2R5KSB7XHJcbiAgICBsZXQgbmV4dEVycjogYW55O1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGJvZHkgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmJvZHkpO1xyXG4gICAgICByZXN1bHQuYm9keSA9IGJvZHk7XHJcbiAgICAgIC8vIE9EYXRhIHYzIGxvZ2ljXHJcbiAgICAgIGlmIChib2R5WydvZGF0YS5lcnJvciddKSB7XHJcbiAgICAgICAgYm9keSA9IGJvZHlbJ29kYXRhLmVycm9yJ107XHJcbiAgICAgIH1cclxuICAgICAgbGV0IG1zZyA9IFwiXCI7XHJcbiAgICAgIGRvIHtcclxuICAgICAgICBuZXh0RXJyID0gYm9keS5lcnJvciB8fCBib2R5LmlubmVyZXJyb3I7XHJcbiAgICAgICAgaWYgKCFuZXh0RXJyKSBtc2cgPSBtc2cgKyBnZXRNZXNzYWdlKGJvZHkpO1xyXG4gICAgICAgIG5leHRFcnIgPSBuZXh0RXJyIHx8IGJvZHkuaW50ZXJuYWxleGNlcHRpb247XHJcbiAgICAgICAgYm9keSA9IG5leHRFcnIgfHwgYm9keTtcclxuICAgICAgfSB3aGlsZSAobmV4dEVycik7XHJcbiAgICAgIGlmIChtc2cubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJlc3VsdC5tZXNzYWdlID0gbXNnO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuICBicmVlemUuQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXIuX2NhdGNoTm9Db25uZWN0aW9uRXJyb3IocmVzdWx0KTtcclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRNZXNzYWdlKGJvZHk6IGFueSkge1xyXG4gIGxldCBtc2cgPSBib2R5Lm1lc3NhZ2UgfHwgXCJcIjtcclxuICByZXR1cm4gKCh0eXBlb2YgKG1zZykgPT09IFwic3RyaW5nXCIpID8gbXNnIDogbXNnLnZhbHVlKSArIFwiOyBcIjtcclxufVxyXG5cclxuYnJlZXplLmNvbmZpZy5yZWdpc3RlckFkYXB0ZXIoXCJkYXRhU2VydmljZVwiLCBEYXRhU2VydmljZU9EYXRhQWRhcHRlcik7XHJcblxyXG5cclxubGV0IHdlYkFwaU9EYXRhQ3RvciA9IGZ1bmN0aW9uICgpIHtcclxuICB0aGlzLm5hbWUgPSBcIndlYkFwaU9EYXRhXCI7XHJcbn07XHJcblxyXG5icmVlemUuY29yZS5leHRlbmQod2ViQXBpT0RhdGFDdG9yLnByb3RvdHlwZSwgRGF0YVNlcnZpY2VPRGF0YUFkYXB0ZXIucHJvdG90eXBlKTtcclxuXHJcbmJyZWV6ZS5jb25maWcucmVnaXN0ZXJBZGFwdGVyKFwiZGF0YVNlcnZpY2VcIiwgd2ViQXBpT0RhdGFDdG9yIGFzIGFueSk7XHJcbi8vIE9EYXRhIDQgYWRhcHRlclxyXG5sZXQgd2ViQXBpT0RhdGE0Q3RvciA9IGZ1bmN0aW9uICgpIHtcclxuICB0aGlzLm5hbWUgPSBcIndlYkFwaU9EYXRhNFwiO1xyXG59O1xyXG5icmVlemUuY29yZS5leHRlbmQod2ViQXBpT0RhdGE0Q3Rvci5wcm90b3R5cGUsIHdlYkFwaU9EYXRhQ3Rvci5wcm90b3R5cGUpO1xyXG53ZWJBcGlPRGF0YTRDdG9yLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24gKCkge1xyXG4gIC8vIEFhcmdoLi4uIHRoZXkgbW92ZWQgdGhlIGNoZWVzZS5cclxuICBsZXQgZGF0YWpzID0gY29yZS5yZXF1aXJlTGliKFwiZGF0YWpzXCIsIFwiTmVlZGVkIHRvIHN1cHBvcnQgcmVtb3RlIE9EYXRhIHY0IHNlcnZpY2VzXCIpO1xyXG4gIE9EYXRhID0gZGF0YWpzLlY0Lm9EYXRhO1xyXG4gIE9EYXRhLmpzb24uanNvbkhhbmRsZXIucmVjb2duaXplRGF0ZXMgPSB0cnVlO1xyXG59O1xyXG53ZWJBcGlPRGF0YTRDdG9yLnByb3RvdHlwZS5oZWFkZXJzID0geyBcIk9EYXRhLVZlcnNpb25cIjogXCI0LjBcIiB9O1xyXG5icmVlemUuY29uZmlnLnJlZ2lzdGVyQWRhcHRlcihcImRhdGFTZXJ2aWNlXCIsIHdlYkFwaU9EYXRhNEN0b3IgYXMgYW55KTtcclxuXHJcblxyXG5cclxuXHJcbiJdfQ==
@@ -39,7 +39,7 @@ var DataServiceWebApiAdapter = /** @class */ (function (_super) {
39
39
  var helper = em.helper;
40
40
  var serSaveBundle = {};
41
41
  serSaveBundle.entities = saveBundle.entities.map(function (e, ix) {
42
- var rawEntity = helper.unwrapInstance(e);
42
+ var rawEntity = helper.unwrapInstance(e, transformValue);
43
43
  var autoGeneratedKey;
44
44
  if (e.entityType.autoGeneratedKeyType !== breeze.AutoGeneratedKeyType.None) {
45
45
  autoGeneratedKey = {
@@ -94,5 +94,12 @@ var DataServiceWebApiAdapter = /** @class */ (function (_super) {
94
94
  return DataServiceWebApiAdapter;
95
95
  }(breeze.AbstractDataServiceAdapter));
96
96
  export { DataServiceWebApiAdapter };
97
+ /** Transform data properties while unwrapping entities before save */
98
+ function transformValue(prop, val) {
99
+ if (prop.dataType === breeze.DataType.DateOnly) {
100
+ val = breeze.DataType.toDateOnlyString(val);
101
+ }
102
+ return val;
103
+ }
97
104
  breeze.config.registerAdapter("dataService", DataServiceWebApiAdapter);
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci1kYXRhLXNlcnZpY2Utd2ViYXBpLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC9hZGFwdGVyLWRhdGEtc2VydmljZS13ZWJhcGkvIiwic291cmNlcyI6WyJhZGFwdGVyLWRhdGEtc2VydmljZS13ZWJhcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLDZEQUE2RDtBQUU3RCxjQUFjO0FBQ2Q7SUFBOEMsNENBQWlDO0lBRTdFO1FBQUEsWUFDRSxpQkFBTyxTQUVSO1FBMkVELHdCQUFrQixHQUE4QixJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztZQUU1RSxJQUFJLEVBQUUsZ0JBQWdCO1lBRXRCLFNBQVMsRUFBRSxVQUFVLElBQVMsRUFBRSxjQUFxQyxFQUFFLFdBQStCO2dCQUNwRyxJQUFJLElBQUksSUFBSSxJQUFJO29CQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUM1QixJQUFJLGNBQWMsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxVQUFVLEdBQUcsY0FBYyxJQUFJLGNBQWMsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2xILElBQUksWUFBWSxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUM7Z0JBQzVDLElBQUksTUFBTSxHQUFHLFlBQVksSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUM7Z0JBRS9ELE9BQU87b0JBQ0wsVUFBVSxFQUFFLFVBQVU7b0JBQ3RCLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRztvQkFDaEIsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNwQixNQUFNLEVBQUUsTUFBTTtpQkFDUixDQUFDO1lBQ1gsQ0FBQztT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V0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBRXBGLENBQUM7SUF1QkgsK0JBQUM7QUFBRCxDQUFDLEFBckdELENBQThDLE1BQU0sQ0FBQywwQkFBMEIsR0FxRzlFOztBQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYnJlZXplIGZyb20gJ2JyZWV6ZS1jbGllbnQnO1xyXG4vLyBpbXBvcnQgeyBKc29uUmVzdWx0c0FkYXB0ZXIsIEtleU1hcHBpbmcgfSBmcm9tICcuL2JyZWV6ZSc7XHJcblxyXG4vKiogQGhpZGRlbiAqL1xyXG5leHBvcnQgY2xhc3MgRGF0YVNlcnZpY2VXZWJBcGlBZGFwdGVyIGV4dGVuZHMgYnJlZXplLkFic3RyYWN0RGF0YVNlcnZpY2VBZGFwdGVyIHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5uYW1lID0gXCJ3ZWJBcGlcIjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyByZWdpc3Rlcihjb25maWc/OiBicmVlemUuQnJlZXplQ29uZmlnKSB7XHJcbiAgICBjb25maWcgPSBjb25maWcgfHwgYnJlZXplLmNvbmZpZztcclxuICAgIGNvbmZpZy5yZWdpc3RlckFkYXB0ZXIoXCJkYXRhU2VydmljZVwiLCBEYXRhU2VydmljZVdlYkFwaUFkYXB0ZXIpO1xyXG4gICAgcmV0dXJuIGNvbmZpZy5pbml0aWFsaXplQWRhcHRlckluc3RhbmNlKFwiZGF0YVNlcnZpY2VcIiwgXCJ3ZWJBcGlcIiwgdHJ1ZSkgYXMgRGF0YVNlcnZpY2VXZWJBcGlBZGFwdGVyO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgX3ByZXBhcmVTYXZlQnVuZGxlKHNhdmVDb250ZXh0OiBicmVlemUuU2F2ZUNvbnRleHQsIHNhdmVCdW5kbGU6IGJyZWV6ZS5TYXZlQnVuZGxlKSB7XHJcbiAgICBsZXQgY2hhbmdlUmVxdWVzdEludGVyY2VwdG9yID0gdGhpcy5fY3JlYXRlQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yKHNhdmVDb250ZXh0LCBzYXZlQnVuZGxlKTtcclxuICAgIGxldCBlbSA9IHNhdmVDb250ZXh0LmVudGl0eU1hbmFnZXI7XHJcbiAgICBsZXQgbWV0YWRhdGFTdG9yZSA9IGVtLm1ldGFkYXRhU3RvcmU7XHJcbiAgICBsZXQgaGVscGVyID0gZW0uaGVscGVyO1xyXG4gICAgbGV0IHNlclNhdmVCdW5kbGU6IGFueSA9IHt9O1xyXG4gICAgc2VyU2F2ZUJ1bmRsZS5lbnRpdGllcyA9IHNhdmVCdW5kbGUuZW50aXRpZXMubWFwKGZ1bmN0aW9uIChlLCBpeCkge1xyXG4gICAgICBsZXQgcmF3RW50aXR5ID0gaGVscGVyLnVud3JhcEluc3RhbmNlKGUpO1xyXG5cclxuICAgICAgbGV0IGF1dG9HZW5lcmF0ZWRLZXk6IE9iamVjdCB8IHVuZGVmaW5lZDtcclxuICAgICAgaWYgKGUuZW50aXR5VHlwZS5hdXRvR2VuZXJhdGVkS2V5VHlwZSAhPT0gYnJlZXplLkF1dG9HZW5lcmF0ZWRLZXlUeXBlLk5vbmUpIHtcclxuICAgICAgICBhdXRvR2VuZXJhdGVkS2V5ID0ge1xyXG4gICAgICAgICAgcHJvcGVydHlOYW1lOiBlLmVudGl0eVR5cGUua2V5UHJvcGVydGllc1swXS5uYW1lT25TZXJ2ZXIsXHJcbiAgICAgICAgICBhdXRvR2VuZXJhdGVkS2V5VHlwZTogZS5lbnRpdHlUeXBlLmF1dG9HZW5lcmF0ZWRLZXlUeXBlLm5hbWVcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgb3JpZ2luYWxWYWx1ZXNPblNlcnZlciA9IGhlbHBlci51bndyYXBPcmlnaW5hbFZhbHVlcyhlLCBtZXRhZGF0YVN0b3JlKTtcclxuICAgICAgcmF3RW50aXR5LmVudGl0eUFzcGVjdCA9IHtcclxuICAgICAgICBlbnRpdHlUeXBlTmFtZTogZS5lbnRpdHlUeXBlLm5hbWUsXHJcbiAgICAgICAgZGVmYXVsdFJlc291cmNlTmFtZTogZS5lbnRpdHlUeXBlLmRlZmF1bHRSZXNvdXJjZU5hbWUsXHJcbiAgICAgICAgZW50aXR5U3RhdGU6IGUuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlLm5hbWUsXHJcbiAgICAgICAgb3JpZ2luYWxWYWx1ZXNNYXA6IG9yaWdpbmFsVmFsdWVzT25TZXJ2ZXIsXHJcbiAgICAgICAgYXV0b0dlbmVyYXRlZEtleTogYXV0b0dlbmVyYXRlZEtleVxyXG4gICAgICB9O1xyXG4gICAgICByYXdFbnRpdHkgPSBjaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3IuZ2V0UmVxdWVzdChyYXdFbnRpdHksIGUsIGl4KTtcclxuICAgICAgcmV0dXJuIHJhd0VudGl0eTtcclxuICAgIH0pO1xyXG5cclxuICAgIHNlclNhdmVCdW5kbGUuc2F2ZU9wdGlvbnMgPSB7IHRhZzogc2F2ZUJ1bmRsZS5zYXZlT3B0aW9ucy50YWcgfTtcclxuICAgIGNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvci5kb25lKHNlclNhdmVCdW5kbGUuZW50aXRpZXMpO1xyXG4gICAgcmV0dXJuIHNlclNhdmVCdW5kbGU7XHJcbiAgfVxyXG5cclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBfcHJlcGFyZVNhdmVSZXN1bHQoc2F2ZUNvbnRleHQ6IGJyZWV6ZS5TYXZlQ29udGV4dCwgZGF0YTogYW55KSB7XHJcbiAgICAvLyB1c2UgdGhlIGpzb25SZXN1bHRBZGFwdGVyIHRvIGV4dHJhY3RSZXN1bHRzIGFuZCBleHRyYWN0S2V5TWFwcGluZ3NcclxuICAgIGxldCBqcmEgPSBzYXZlQ29udGV4dC5kYXRhU2VydmljZS5qc29uUmVzdWx0c0FkYXB0ZXIgfHwgdGhpcy5qc29uUmVzdWx0c0FkYXB0ZXI7XHJcbiAgICBsZXQgZW50aXRpZXMgPSBqcmEuZXh0cmFjdFNhdmVSZXN1bHRzKGRhdGEpIHx8IFtdO1xyXG4gICAgbGV0IGtleU1hcHBpbmdzOiBicmVlemUuS2V5TWFwcGluZ1tdID0ganJhLmV4dHJhY3RLZXlNYXBwaW5ncyhkYXRhKSB8fCBbXTtcclxuICAgIGxldCBkZWxldGVkS2V5cyA9IGpyYS5leHRyYWN0RGVsZXRlZEtleXMgPyAoanJhLmV4dHJhY3REZWxldGVkS2V5cyhkYXRhKSkgfHwgW10gOiBbXTtcclxuXHJcbiAgICBpZiAoa2V5TWFwcGluZ3MubGVuZ3RoKSB7XHJcbiAgICAgIC8vIEhBQ0s6IG5lZWQgdG8gY2hhbmdlIHRoZSAnY2FzZScgb2YgcHJvcGVydGllcyBpbiB0aGUgc2F2ZVJlc3VsdFxyXG4gICAgICAvLyBidXQgS2V5TWFwcGluZyBwcm9wZXJ0aWVzIGludGVybmFsbHkgYXJlIHN0aWxsIHVjYXNlLiB1Z2guLi5cclxuICAgICAga2V5TWFwcGluZ3MgPSBrZXlNYXBwaW5ncy5tYXAoZnVuY3Rpb24gKGttKSB7XHJcbiAgICAgICAgaWYgKGttLmVudGl0eVR5cGVOYW1lKSByZXR1cm4ga207IC8vIGl0J3MgYWxyZWFkeSBsb3dlciBjYXNlXHJcbiAgICAgICAgbGV0IGttSGFjayA9IGttIGFzIGFueTtcclxuICAgICAgICBsZXQgZW50aXR5VHlwZU5hbWUgPSBicmVlemUuTWV0YWRhdGFTdG9yZS5ub3JtYWxpemVUeXBlTmFtZShrbUhhY2suRW50aXR5VHlwZU5hbWUpO1xyXG4gICAgICAgIHJldHVybiB7IGVudGl0eVR5cGVOYW1lOiBlbnRpdHlUeXBlTmFtZSwgdGVtcFZhbHVlOiBrbUhhY2suVGVtcFZhbHVlLCByZWFsVmFsdWU6IGttSGFjay5SZWFsVmFsdWUgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRlbGV0ZWRLZXlzLmxlbmd0aCkge1xyXG4gICAgICBkZWxldGVkS2V5cyA9IGRlbGV0ZWRLZXlzLm1hcChmdW5jdGlvbiAoZGspIHtcclxuICAgICAgICBpZiAoZGsuZW50aXR5VHlwZU5hbWUpIHJldHVybiBkazsgLy8gaXQncyBhbHJlYWR5IGxvd2VyIGNhc2VcclxuICAgICAgICBsZXQgZW50aXR5VHlwZU5hbWUgPSBicmVlemUuTWV0YWRhdGFTdG9yZS5ub3JtYWxpemVUeXBlTmFtZShkay5FbnRpdHlUeXBlTmFtZSk7XHJcbiAgICAgICAgLy8gTk9URSB0aGUgZGsuS2V5VmFsdWUgPT4ga2V5VmFsdWVzIHRyYW5zaXRpb24gLSBuZWVkZWQgYmVjYXVzZSB3ZSBhcmUgZGVzZXJpYWxpemluZyBhbiAuTkVUIEVudGl0eUtleVxyXG4gICAgICAgIHJldHVybiB7IGVudGl0eVR5cGVOYW1lOiBlbnRpdHlUeXBlTmFtZSwga2V5VmFsdWVzOiBkay5LZXlWYWx1ZSB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geyBlbnRpdGllczogZW50aXRpZXMsIGtleU1hcHBpbmdzOiBrZXlNYXBwaW5ncywgZGVsZXRlZEtleXM6IGRlbGV0ZWRLZXlzIH07XHJcblxyXG4gIH1cclxuXHJcbiAganNvblJlc3VsdHNBZGFwdGVyOiBicmVlemUuSnNvblJlc3VsdHNBZGFwdGVyID0gbmV3IGJyZWV6ZS5Kc29uUmVzdWx0c0FkYXB0ZXIoe1xyXG5cclxuICAgIG5hbWU6IFwid2ViQXBpX2RlZmF1bHRcIixcclxuXHJcbiAgICB2aXNpdE5vZGU6IGZ1bmN0aW9uIChub2RlOiBhbnksIG1hcHBpbmdDb250ZXh0OiBicmVlemUuTWFwcGluZ0NvbnRleHQsIG5vZGVDb250ZXh0OiBicmVlemUuTm9kZUNvbnRleHQpIHtcclxuICAgICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIHt9O1xyXG4gICAgICBsZXQgZW50aXR5VHlwZU5hbWUgPSBicmVlemUuTWV0YWRhdGFTdG9yZS5ub3JtYWxpemVUeXBlTmFtZShub2RlLiR0eXBlKTtcclxuICAgICAgbGV0IGVudGl0eVR5cGUgPSBlbnRpdHlUeXBlTmFtZSAmJiBtYXBwaW5nQ29udGV4dC5lbnRpdHlNYW5hZ2VyLm1ldGFkYXRhU3RvcmUuZ2V0RW50aXR5VHlwZShlbnRpdHlUeXBlTmFtZSwgdHJ1ZSk7XHJcbiAgICAgIGxldCBwcm9wZXJ0eU5hbWUgPSBub2RlQ29udGV4dC5wcm9wZXJ0eU5hbWU7XHJcbiAgICAgIGxldCBpZ25vcmUgPSBwcm9wZXJ0eU5hbWUgJiYgcHJvcGVydHlOYW1lLnN1YnN0cigwLCAxKSA9PT0gXCIkXCI7XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXHJcbiAgICAgICAgbm9kZUlkOiBub2RlLiRpZCxcclxuICAgICAgICBub2RlUmVmSWQ6IG5vZGUuJHJlZixcclxuICAgICAgICBpZ25vcmU6IGlnbm9yZVxyXG4gICAgICB9IGFzIGFueTtcclxuICAgIH1cclxuXHJcbiAgfSk7XHJcblxyXG59XHJcblxyXG5icmVlemUuY29uZmlnLnJlZ2lzdGVyQWRhcHRlcihcImRhdGFTZXJ2aWNlXCIsIERhdGFTZXJ2aWNlV2ViQXBpQWRhcHRlcik7XHJcbiJdfQ==
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci1kYXRhLXNlcnZpY2Utd2ViYXBpLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC9hZGFwdGVyLWRhdGEtc2VydmljZS13ZWJhcGkvIiwic291cmNlcyI6WyJhZGFwdGVyLWRhdGEtc2VydmljZS13ZWJhcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLDZEQUE2RDtBQUU3RCxjQUFjO0FBQ2Q7SUFBOEMsNENBQWlDO0lBRTdFO1FBQUEsWUFDRSxpQkFBTyxTQUVSO1FBMkVELHdCQUFrQixHQUE4QixJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztZQUU1RSxJQUFJLEVBQUUsZ0JBQWdCO1lBRXRCLFNBQVMsRUFBRSxVQUFVLElBQVMsRUFBRSxjQUFxQyxFQUFFLFdBQStCO2dCQUNwRyxJQUFJLElBQUksSUFBSSxJQUFJO29CQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUM1QixJQUFJLGNBQWMsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxVQUFVLEdBQUcsY0FBYyxJQUFJLGNBQWMsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2xILElBQUksWUFBWSxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUM7Z0JBQzVDLElBQUksTUFBTSxHQUFHLFlBQVksSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUM7Z0JBRS9ELE9BQU87b0JBQ0wsVUFBVSxFQUFFLFVBQVU7b0JBQ3RCLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRztvQkFDaEIsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNwQixNQUFNLEVBQUUsTUFBTTtpQkFDUixDQUFDO1lBQ1gsQ0FBQztTQUVGLENBQUMsQ0FBQztRQS9GRCxLQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQzs7SUFDdkIsQ0FBQztJQUVNLGlDQUFRLEdBQWYsVUFBZ0IsTUFBNEI7UUFDMUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLHdCQUF3QixDQUFDLENBQUM7UUFDaEUsT0FBTyxNQUFNLENBQUMseUJBQXlCLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQTZCLENBQUM7SUFDckcsQ0FBQztJQUVELHdCQUF3QjtJQUN4QixxREFBa0IsR0FBbEIsVUFBbUIsV0FBK0IsRUFBRSxVQUE2QjtRQUMvRSxJQUFJLHdCQUF3QixHQUFHLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDN0YsSUFBSSxFQUFFLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQztRQUNuQyxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDO1FBQ3JDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDdkIsSUFBSSxhQUFhLEdBQVEsRUFBRSxDQUFDO1FBQzVCLGFBQWEsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRTtZQUM5RCxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUV6RCxJQUFJLGdCQUFvQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsS0FBSyxNQUFNLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFO2dCQUMxRSxnQkFBZ0IsR0FBRztvQkFDakIsWUFBWSxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVk7b0JBQ3hELG9CQUFvQixFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsSUFBSTtpQkFDN0QsQ0FBQzthQUNIO1lBRUQsSUFBSSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzNFLFNBQVMsQ0FBQyxZQUFZLEdBQUc7Z0JBQ3ZCLGNBQWMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUk7Z0JBQ2pDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsbUJBQW1CO2dCQUNyRCxXQUFXLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSTtnQkFDNUMsaUJBQWlCLEVBQUUsc0JBQXNCO2dCQUN6QyxnQkFBZ0IsRUFBRSxnQkFBZ0I7YUFDbkMsQ0FBQztZQUNGLFNBQVMsR0FBRyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNsRSxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztRQUVILGFBQWEsQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNoRSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIscURBQWtCLEdBQWxCLFVBQW1CLFdBQStCLEVBQUUsSUFBUztRQUMzRCxxRUFBcUU7UUFDckUsSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDaEYsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsRCxJQUFJLFdBQVcsR0FBd0IsR0FBRyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxRSxJQUFJLFdBQVcsR0FBRyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFckYsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFO1lBQ3RCLGtFQUFrRTtZQUNsRSwrREFBK0Q7WUFDL0QsV0FBVyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFO2dCQUN4QyxJQUFJLEVBQUUsQ0FBQyxjQUFjO29CQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsMEJBQTBCO2dCQUM1RCxJQUFJLE1BQU0sR0FBRyxFQUFTLENBQUM7Z0JBQ3ZCLElBQUksY0FBYyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNuRixPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3RHLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUU7WUFDdEIsV0FBVyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFO2dCQUN4QyxJQUFJLEVBQUUsQ0FBQyxjQUFjO29CQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsMEJBQTBCO2dCQUM1RCxJQUFJLGNBQWMsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDL0UsdUdBQXVHO2dCQUN2RyxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BFLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUVwRixDQUFDO0lBdUJILCtCQUFDO0FBQUQsQ0FBQyxBQXJHRCxDQUE4QyxNQUFNLENBQUMsMEJBQTBCLEdBcUc5RTs7QUFFRCxzRUFBc0U7QUFDdEUsU0FBUyxjQUFjLENBQUMsSUFBeUIsRUFBRSxHQUFRO0lBQ3pELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtRQUM5QyxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUM3QztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUdELE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYnJlZXplIGZyb20gJ2JyZWV6ZS1jbGllbnQnO1xyXG4vLyBpbXBvcnQgeyBKc29uUmVzdWx0c0FkYXB0ZXIsIEtleU1hcHBpbmcgfSBmcm9tICcuL2JyZWV6ZSc7XHJcblxyXG4vKiogQGhpZGRlbiAqL1xyXG5leHBvcnQgY2xhc3MgRGF0YVNlcnZpY2VXZWJBcGlBZGFwdGVyIGV4dGVuZHMgYnJlZXplLkFic3RyYWN0RGF0YVNlcnZpY2VBZGFwdGVyIHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5uYW1lID0gXCJ3ZWJBcGlcIjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyByZWdpc3Rlcihjb25maWc/OiBicmVlemUuQnJlZXplQ29uZmlnKSB7XHJcbiAgICBjb25maWcgPSBjb25maWcgfHwgYnJlZXplLmNvbmZpZztcclxuICAgIGNvbmZpZy5yZWdpc3RlckFkYXB0ZXIoXCJkYXRhU2VydmljZVwiLCBEYXRhU2VydmljZVdlYkFwaUFkYXB0ZXIpO1xyXG4gICAgcmV0dXJuIGNvbmZpZy5pbml0aWFsaXplQWRhcHRlckluc3RhbmNlKFwiZGF0YVNlcnZpY2VcIiwgXCJ3ZWJBcGlcIiwgdHJ1ZSkgYXMgRGF0YVNlcnZpY2VXZWJBcGlBZGFwdGVyO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgX3ByZXBhcmVTYXZlQnVuZGxlKHNhdmVDb250ZXh0OiBicmVlemUuU2F2ZUNvbnRleHQsIHNhdmVCdW5kbGU6IGJyZWV6ZS5TYXZlQnVuZGxlKSB7XHJcbiAgICBsZXQgY2hhbmdlUmVxdWVzdEludGVyY2VwdG9yID0gdGhpcy5fY3JlYXRlQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yKHNhdmVDb250ZXh0LCBzYXZlQnVuZGxlKTtcclxuICAgIGxldCBlbSA9IHNhdmVDb250ZXh0LmVudGl0eU1hbmFnZXI7XHJcbiAgICBsZXQgbWV0YWRhdGFTdG9yZSA9IGVtLm1ldGFkYXRhU3RvcmU7XHJcbiAgICBsZXQgaGVscGVyID0gZW0uaGVscGVyO1xyXG4gICAgbGV0IHNlclNhdmVCdW5kbGU6IGFueSA9IHt9O1xyXG4gICAgc2VyU2F2ZUJ1bmRsZS5lbnRpdGllcyA9IHNhdmVCdW5kbGUuZW50aXRpZXMubWFwKGZ1bmN0aW9uIChlLCBpeCkge1xyXG4gICAgICBsZXQgcmF3RW50aXR5ID0gaGVscGVyLnVud3JhcEluc3RhbmNlKGUsIHRyYW5zZm9ybVZhbHVlKTtcclxuXHJcbiAgICAgIGxldCBhdXRvR2VuZXJhdGVkS2V5OiBPYmplY3QgfCB1bmRlZmluZWQ7XHJcbiAgICAgIGlmIChlLmVudGl0eVR5cGUuYXV0b0dlbmVyYXRlZEtleVR5cGUgIT09IGJyZWV6ZS5BdXRvR2VuZXJhdGVkS2V5VHlwZS5Ob25lKSB7XHJcbiAgICAgICAgYXV0b0dlbmVyYXRlZEtleSA9IHtcclxuICAgICAgICAgIHByb3BlcnR5TmFtZTogZS5lbnRpdHlUeXBlLmtleVByb3BlcnRpZXNbMF0ubmFtZU9uU2VydmVyLFxyXG4gICAgICAgICAgYXV0b0dlbmVyYXRlZEtleVR5cGU6IGUuZW50aXR5VHlwZS5hdXRvR2VuZXJhdGVkS2V5VHlwZS5uYW1lXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IG9yaWdpbmFsVmFsdWVzT25TZXJ2ZXIgPSBoZWxwZXIudW53cmFwT3JpZ2luYWxWYWx1ZXMoZSwgbWV0YWRhdGFTdG9yZSk7XHJcbiAgICAgIHJhd0VudGl0eS5lbnRpdHlBc3BlY3QgPSB7XHJcbiAgICAgICAgZW50aXR5VHlwZU5hbWU6IGUuZW50aXR5VHlwZS5uYW1lLFxyXG4gICAgICAgIGRlZmF1bHRSZXNvdXJjZU5hbWU6IGUuZW50aXR5VHlwZS5kZWZhdWx0UmVzb3VyY2VOYW1lLFxyXG4gICAgICAgIGVudGl0eVN0YXRlOiBlLmVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZS5uYW1lLFxyXG4gICAgICAgIG9yaWdpbmFsVmFsdWVzTWFwOiBvcmlnaW5hbFZhbHVlc09uU2VydmVyLFxyXG4gICAgICAgIGF1dG9HZW5lcmF0ZWRLZXk6IGF1dG9HZW5lcmF0ZWRLZXlcclxuICAgICAgfTtcclxuICAgICAgcmF3RW50aXR5ID0gY2hhbmdlUmVxdWVzdEludGVyY2VwdG9yLmdldFJlcXVlc3QocmF3RW50aXR5LCBlLCBpeCk7XHJcbiAgICAgIHJldHVybiByYXdFbnRpdHk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBzZXJTYXZlQnVuZGxlLnNhdmVPcHRpb25zID0geyB0YWc6IHNhdmVCdW5kbGUuc2F2ZU9wdGlvbnMudGFnIH07XHJcbiAgICBjaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3IuZG9uZShzZXJTYXZlQnVuZGxlLmVudGl0aWVzKTtcclxuICAgIHJldHVybiBzZXJTYXZlQnVuZGxlO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgX3ByZXBhcmVTYXZlUmVzdWx0KHNhdmVDb250ZXh0OiBicmVlemUuU2F2ZUNvbnRleHQsIGRhdGE6IGFueSkge1xyXG4gICAgLy8gdXNlIHRoZSBqc29uUmVzdWx0QWRhcHRlciB0byBleHRyYWN0UmVzdWx0cyBhbmQgZXh0cmFjdEtleU1hcHBpbmdzXHJcbiAgICBsZXQganJhID0gc2F2ZUNvbnRleHQuZGF0YVNlcnZpY2UuanNvblJlc3VsdHNBZGFwdGVyIHx8IHRoaXMuanNvblJlc3VsdHNBZGFwdGVyO1xyXG4gICAgbGV0IGVudGl0aWVzID0ganJhLmV4dHJhY3RTYXZlUmVzdWx0cyhkYXRhKSB8fCBbXTtcclxuICAgIGxldCBrZXlNYXBwaW5nczogYnJlZXplLktleU1hcHBpbmdbXSA9IGpyYS5leHRyYWN0S2V5TWFwcGluZ3MoZGF0YSkgfHwgW107XHJcbiAgICBsZXQgZGVsZXRlZEtleXMgPSBqcmEuZXh0cmFjdERlbGV0ZWRLZXlzID8gKGpyYS5leHRyYWN0RGVsZXRlZEtleXMoZGF0YSkpIHx8IFtdIDogW107XHJcblxyXG4gICAgaWYgKGtleU1hcHBpbmdzLmxlbmd0aCkge1xyXG4gICAgICAvLyBIQUNLOiBuZWVkIHRvIGNoYW5nZSB0aGUgJ2Nhc2UnIG9mIHByb3BlcnRpZXMgaW4gdGhlIHNhdmVSZXN1bHRcclxuICAgICAgLy8gYnV0IEtleU1hcHBpbmcgcHJvcGVydGllcyBpbnRlcm5hbGx5IGFyZSBzdGlsbCB1Y2FzZS4gdWdoLi4uXHJcbiAgICAgIGtleU1hcHBpbmdzID0ga2V5TWFwcGluZ3MubWFwKGZ1bmN0aW9uIChrbSkge1xyXG4gICAgICAgIGlmIChrbS5lbnRpdHlUeXBlTmFtZSkgcmV0dXJuIGttOyAvLyBpdCdzIGFscmVhZHkgbG93ZXIgY2FzZVxyXG4gICAgICAgIGxldCBrbUhhY2sgPSBrbSBhcyBhbnk7XHJcbiAgICAgICAgbGV0IGVudGl0eVR5cGVOYW1lID0gYnJlZXplLk1ldGFkYXRhU3RvcmUubm9ybWFsaXplVHlwZU5hbWUoa21IYWNrLkVudGl0eVR5cGVOYW1lKTtcclxuICAgICAgICByZXR1cm4geyBlbnRpdHlUeXBlTmFtZTogZW50aXR5VHlwZU5hbWUsIHRlbXBWYWx1ZToga21IYWNrLlRlbXBWYWx1ZSwgcmVhbFZhbHVlOiBrbUhhY2suUmVhbFZhbHVlIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkZWxldGVkS2V5cy5sZW5ndGgpIHtcclxuICAgICAgZGVsZXRlZEtleXMgPSBkZWxldGVkS2V5cy5tYXAoZnVuY3Rpb24gKGRrKSB7XHJcbiAgICAgICAgaWYgKGRrLmVudGl0eVR5cGVOYW1lKSByZXR1cm4gZGs7IC8vIGl0J3MgYWxyZWFkeSBsb3dlciBjYXNlXHJcbiAgICAgICAgbGV0IGVudGl0eVR5cGVOYW1lID0gYnJlZXplLk1ldGFkYXRhU3RvcmUubm9ybWFsaXplVHlwZU5hbWUoZGsuRW50aXR5VHlwZU5hbWUpO1xyXG4gICAgICAgIC8vIE5PVEUgdGhlIGRrLktleVZhbHVlID0+IGtleVZhbHVlcyB0cmFuc2l0aW9uIC0gbmVlZGVkIGJlY2F1c2Ugd2UgYXJlIGRlc2VyaWFsaXppbmcgYW4gLk5FVCBFbnRpdHlLZXlcclxuICAgICAgICByZXR1cm4geyBlbnRpdHlUeXBlTmFtZTogZW50aXR5VHlwZU5hbWUsIGtleVZhbHVlczogZGsuS2V5VmFsdWUgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHsgZW50aXRpZXM6IGVudGl0aWVzLCBrZXlNYXBwaW5nczoga2V5TWFwcGluZ3MsIGRlbGV0ZWRLZXlzOiBkZWxldGVkS2V5cyB9O1xyXG5cclxuICB9XHJcblxyXG4gIGpzb25SZXN1bHRzQWRhcHRlcjogYnJlZXplLkpzb25SZXN1bHRzQWRhcHRlciA9IG5ldyBicmVlemUuSnNvblJlc3VsdHNBZGFwdGVyKHtcclxuXHJcbiAgICBuYW1lOiBcIndlYkFwaV9kZWZhdWx0XCIsXHJcblxyXG4gICAgdmlzaXROb2RlOiBmdW5jdGlvbiAobm9kZTogYW55LCBtYXBwaW5nQ29udGV4dDogYnJlZXplLk1hcHBpbmdDb250ZXh0LCBub2RlQ29udGV4dDogYnJlZXplLk5vZGVDb250ZXh0KSB7XHJcbiAgICAgIGlmIChub2RlID09IG51bGwpIHJldHVybiB7fTtcclxuICAgICAgbGV0IGVudGl0eVR5cGVOYW1lID0gYnJlZXplLk1ldGFkYXRhU3RvcmUubm9ybWFsaXplVHlwZU5hbWUobm9kZS4kdHlwZSk7XHJcbiAgICAgIGxldCBlbnRpdHlUeXBlID0gZW50aXR5VHlwZU5hbWUgJiYgbWFwcGluZ0NvbnRleHQuZW50aXR5TWFuYWdlci5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoZW50aXR5VHlwZU5hbWUsIHRydWUpO1xyXG4gICAgICBsZXQgcHJvcGVydHlOYW1lID0gbm9kZUNvbnRleHQucHJvcGVydHlOYW1lO1xyXG4gICAgICBsZXQgaWdub3JlID0gcHJvcGVydHlOYW1lICYmIHByb3BlcnR5TmFtZS5zdWJzdHIoMCwgMSkgPT09IFwiJFwiO1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBlbnRpdHlUeXBlOiBlbnRpdHlUeXBlLFxyXG4gICAgICAgIG5vZGVJZDogbm9kZS4kaWQsXHJcbiAgICAgICAgbm9kZVJlZklkOiBub2RlLiRyZWYsXHJcbiAgICAgICAgaWdub3JlOiBpZ25vcmVcclxuICAgICAgfSBhcyBhbnk7XHJcbiAgICB9XHJcblxyXG4gIH0pO1xyXG5cclxufVxyXG5cclxuLyoqIFRyYW5zZm9ybSBkYXRhIHByb3BlcnRpZXMgd2hpbGUgdW53cmFwcGluZyBlbnRpdGllcyBiZWZvcmUgc2F2ZSAqL1xyXG5mdW5jdGlvbiB0cmFuc2Zvcm1WYWx1ZShwcm9wOiBicmVlemUuRGF0YVByb3BlcnR5LCB2YWw6IGFueSkge1xyXG4gIGlmIChwcm9wLmRhdGFUeXBlID09PSBicmVlemUuRGF0YVR5cGUuRGF0ZU9ubHkpIHtcclxuICAgIHZhbCA9IGJyZWV6ZS5EYXRhVHlwZS50b0RhdGVPbmx5U3RyaW5nKHZhbCk7XHJcbiAgfVxyXG4gIHJldHVybiB2YWw7XHJcbn1cclxuXHJcblxyXG5icmVlemUuY29uZmlnLnJlZ2lzdGVyQWRhcHRlcihcImRhdGFTZXJ2aWNlXCIsIERhdGFTZXJ2aWNlV2ViQXBpQWRhcHRlcik7XHJcbiJdfQ==
@@ -299,4 +299,4 @@ var DefaultChangeRequestInterceptor = /** @class */ (function () {
299
299
  };
300
300
  return DefaultChangeRequestInterceptor;
301
301
  }());
302
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZGF0YS1zZXJ2aWNlLWFkYXB0ZXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9icmVlemUtY2xpZW50LyIsInNvdXJjZXMiOlsic3JjL2Fic3RyYWN0LWRhdGEtc2VydmljZS1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUtsQyxPQUFPLEVBQWUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbEQ7OztFQUdFO0FBQ0Y7SUFRRTtRQXdKQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztXQXlCRztRQUNILDZCQUF3QixHQUFpQywrQkFBK0IsQ0FBQztRQTJDekYsdUJBQWtCLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQztZQUMxQyxJQUFJLEVBQUUsTUFBTTtZQUVaLFNBQVMsRUFBRSxXQUFVLHVDQUF1QztnQkFDMUQsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBbE9ILENBQUM7SUFHRCxxQkFBcUI7SUFDckIsMERBQXFCLEdBQXJCLFVBQXNCLHdCQUE2QjtRQUNqRCxJQUFJLHdCQUF3QixDQUFDLGFBQWEsS0FBSyxNQUFNLElBQUksd0JBQXdCLENBQUMsU0FBUyxFQUFFO1lBQzNGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQjtJQUNILENBQUM7SUFFRCwrQ0FBVSxHQUFWO1FBQ0UsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQWMsTUFBTSxDQUFHLENBQUM7UUFFakUsbUhBQW1IO1FBQ25ILElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTtZQUN2QyxPQUFPO1NBQ1I7UUFDRCxNQUFNLElB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QUMsU0FBUztnQkFDdEIsY0FBYyxFQUFFLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO2dCQUNqRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVM7Z0JBQ3RCLFlBQVksRUFBRSxDQUFDLENBQUMsWUFBWTtnQkFDNUIsWUFBWSxFQUFFLENBQUMsQ0FBQyxZQUFZO2dCQUM1QixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU07YUFDakIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0tBQ0o7SUFFRCxJQUFJLFdBQVcsSUFBSSxZQUFZLEVBQUU7UUFFL0IsSUFBSSxZQUFVLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsMEJBQTBCLENBQUM7UUFDckcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDOUIsQ0FBQyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsWUFBWSxJQUFJLFlBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFDRixHQUEyQixDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7S0FDMUQ7SUFFRCxHQUFHLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxpR0FBaUcsQ0FBQztJQUMzSCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFHRCwyRUFBMkU7QUFDM0U7SUFDRSx5Q0FBWSxXQUF3QixFQUFFLFVBQXNCO0lBRTVELENBQUM7SUFFRCxvREFBVSxHQUFWLFVBQVcsT0FBWSxFQUFFLE1BQWMsRUFBRSxLQUFhO1FBQ3BELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCw4Q0FBSSxHQUFKLFVBQUssUUFBa0I7SUFDdkIsQ0FBQztJQUNILHNDQUFDO0FBQUQsQ0FBQyxBQVhELElBV0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3JlIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xyXG5pbXBvcnQgeyBFbnRpdHlRdWVyeSB9IGZyb20gJy4vZW50aXR5LXF1ZXJ5JztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2VBZGFwdGVyLCBBamF4QWRhcHRlciwgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yQ3RvciwgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yIH0gZnJvbSAnLi9pbnRlcmZhY2UtcmVnaXN0cnknO1xyXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuL2VudGl0eS1hc3BlY3QnO1xyXG5pbXBvcnQgeyBNYXBwaW5nQ29udGV4dCB9IGZyb20gJy4vbWFwcGluZy1jb250ZXh0JztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2UsIEpzb25SZXN1bHRzQWRhcHRlciB9IGZyb20gJy4vZGF0YS1zZXJ2aWNlJztcclxuaW1wb3J0IHsgSHR0cFJlc3BvbnNlLCBTYXZlQ29udGV4dCwgU2F2ZUJ1bmRsZSwgU2VydmVyRXJyb3IsIFNhdmVSZXN1bHQsIFNhdmVFcnJvckZyb21TZXJ2ZXIsIFF1ZXJ5UmVzdWx0IH0gZnJvbSAnLi9lbnRpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IE1ldGFkYXRhU3RvcmUgfSBmcm9tICcuL2VudGl0eS1tZXRhZGF0YSc7XHJcblxyXG4vKiogRm9yIHVzZSBieSBicmVlemUgcGx1Z2luIGF1dGhvcnMgb25seS4gIFRoZSBjbGFzcyBpcyB1c2VkIGFzIHRoZSBiYXNlIGNsYXNzIGZvciBtb3N0IFtbSURhdGFTZXJ2aWNlQWRhcHRlcl1dIGltcGxlbWVudGF0aW9uc1xyXG5AYWRhcHRlciAoc2VlIFtbSURhdGFTZXJ2aWNlQWRhcHRlcl1dKSAgICBcclxuQGhpZGRlblxyXG4qL1xyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXIgaW1wbGVtZW50cyBEYXRhU2VydmljZUFkYXB0ZXIge1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF8kaW1wbD86IGFueTtcclxuICAvKiogVGhlIG5hbWUgb2YgdGhpcyBhZGFwdGVyLiAqL1xyXG4gIG5hbWU6IHN0cmluZztcclxuICAvKiogVGhlIFtbSUFqYXhBZGFwdGVyXV0gdXNlZCBieSB0aGlzIFtbSURhdGFTZXJ2aWNlQWRhcHRlcl1dLiAqL1xyXG4gIGFqYXhJbXBsOiBBamF4QWRhcHRlcjtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gVE9ETyB1c2UgaW50ZXJmYWNlXHJcbiAgY2hlY2tGb3JSZWNvbXBvc2l0aW9uKGludGVyZmFjZUluaXRpYWxpemVkQXJnczogYW55KSB7XHJcbiAgICBpZiAoaW50ZXJmYWNlSW5pdGlhbGl6ZWRBcmdzLmludGVyZmFjZU5hbWUgPT09IFwiYWpheFwiICYmIGludGVyZmFjZUluaXRpYWxpemVkQXJncy5pc0RlZmF1bHQpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplKCkge1xyXG4gICAgdGhpcy5hamF4SW1wbCA9IGNvbmZpZy5nZXRBZGFwdGVySW5zdGFuY2U8QWpheEFkYXB0ZXI+KFwiYWpheFwiKSAhO1xyXG5cclxuICAgIC8vIGRvbid0IGNhY2hlICdhamF4JyBiZWNhdXNlIHRoZW4gd2Ugd291bGQgbmVlZCB0byBcIi5iaW5kXCIgaXQsIGFuZCBkb24ndCB3YW50IHRvIGJlY2F1c2Ugb2YgYnJvd2VyIHN1cHBvcnQgaXNzdWVzLlxyXG4gICAgaWYgKHRoaXMuYWpheEltcGwgJiYgdGhpcy5hamF4SW1wbC5hamF4KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIGFqYXggYWRhcHRlciBmb3IgZGF0YXNlcnZpY2UgYWRhcHRlciAnXCIgKyAodGhpcy5uYW1lIHx8ICcnKSArIFwiJy5cIik7XHJcbiAgfVxyXG5cclxuICBmZXRjaE1ldGFkYXRhKG1ldGFkYXRhU3RvcmU6IE1ldGFkYXRhU3RvcmUsIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSkge1xyXG4gICAgbGV0IHNlcnZpY2VOYW1lID0gZGF0YVNlcnZpY2Uuc2VydmljZU5hbWU7XHJcbiAgICBsZXQgdXJsID0gZGF0YVNlcnZpY2UucXVhbGlmeVVybChcIk1ldGFkYXRhXCIpO1xyXG5cclxuICAgIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5hamF4SW1wbC5hamF4KHtcclxuICAgICAgICB0eXBlOiBcIkdFVFwiLFxyXG4gICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogKGh0dHBSZXNwb25zZTogSHR0cFJlc3BvbnNlKSA9PiB7XHJcblxyXG4gICAgICAgICAgLy8gbWlnaHQgaGF2ZSBiZWVuIGZldGNoZWQgYnkgYW5vdGhlciBxdWVyeVxyXG4gICAgICAgICAgaWYgKG1ldGFkYXRhU3RvcmUuaGFzTWV0YWRhdGFGb3Ioc2VydmljZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKFwiYWxyZWFkeSBmZXRjaGVkXCIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IGRhdGEgPSBodHRwUmVzcG9uc2UuZGF0YTtcclxuICAgICAgICAgIGxldCBtZXRhZGF0YTogYW55O1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbWV0YWRhdGEgPSB0eXBlb2YgKGRhdGEpID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShkYXRhKSA6IGRhdGE7XHJcbiAgICAgICAgICAgIG1ldGFkYXRhU3RvcmUuaW1wb3J0TWV0YWRhdGEobWV0YWRhdGEpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsZXQgZXJyTXNnID0gXCJVbmFibGUgdG8gZWl0aGVyIHBhcnNlIG9yIGltcG9ydCBtZXRhZGF0YTogXCIgKyBlLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIGhhbmRsZUh0dHBFcnJvcihyZWplY3QsIGh0dHBSZXNwb25zZSwgXCJNZXRhZGF0YSBxdWVyeSBmYWlsZWQgZm9yOiBcIiArIHVybCArIFwiLiBcIiArIGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gaW1wb3J0IG1heSBoYXZlIGJyb3VnaHQgaW4gdGhlIHNlcnZpY2UuXHJcbiAgICAgICAgICBpZiAoIW1ldGFkYXRhU3RvcmUuaGFzTWV0YWRhdGFGb3Ioc2VydmljZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIG1ldGFkYXRhU3RvcmUuYWRkRGF0YVNlcnZpY2UoZGF0YVNlcnZpY2UpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJlc29sdmUobWV0YWRhdGEpO1xyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoaHR0cFJlc3BvbnNlOiBIdHRwUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGhhbmRsZUh0dHBFcnJvcihyZWplY3QsIGh0dHBSZXNwb25zZSwgXCJNZXRhZGF0YSBxdWVyeSBmYWlsZWQgZm9yOiBcIiArIHVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHByb21pc2U7XHJcbiAgfVxyXG5cclxuICBleGVjdXRlUXVlcnkobWFwcGluZ0NvbnRleHQ6IE1hcHBpbmdDb250ZXh0KSB7XHJcbiAgICBtYXBwaW5nQ29udGV4dC5hZGFwdGVyID0gdGhpcztcclxuICAgIGxldCBwcm9taXNlID0gbmV3IFByb21pc2U8UXVlcnlSZXN1bHQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgbGV0IHVybCA9IG1hcHBpbmdDb250ZXh0LmdldFVybCgpO1xyXG5cclxuICAgICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgICB0eXBlOiBcIkdFVFwiLFxyXG4gICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgIHBhcmFtczogKG1hcHBpbmdDb250ZXh0LnF1ZXJ5IGFzIEVudGl0eVF1ZXJ5KS5wYXJhbWV0ZXJzLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGh0dHBSZXNwb25zZTogSHR0cFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICBsZXQgZGF0YSA9IGh0dHBSZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJEYXRhOiBRdWVyeVJlc3VsdDtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBkYXRhICYmIChkYXRhLnJlc3VsdHMgfHwgZGF0YS5SZXN1bHRzKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgICByRGF0YSA9IHsgcmVzdWx0czogcmVzdWx0cywgaW5saW5lQ291bnQ6IGRhdGEuaW5saW5lQ291bnQgfHwgZGF0YS5JbmxpbmVDb3VudCwgXHJcbiAgICAgICAgICAgICAgICBodHRwUmVzcG9uc2U6IGh0dHBSZXNwb25zZSwgcXVlcnk6IG1hcHBpbmdDb250ZXh0LnF1ZXJ5IH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgckRhdGEgPSB7IHJlc3VsdHM6IGRhdGEsIGh0dHBSZXNwb25zZTogaHR0cFJlc3BvbnNlLCBxdWVyeTogbWFwcGluZ0NvbnRleHQucXVlcnkgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZShyRGF0YSk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcclxuICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaGFuZGxlSHR0cEVycm9yKHJlamVjdCwgaHR0cFJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAoaHR0cFJlc3BvbnNlOiBIdHRwUmVzcG9uc2UpIHtcclxuICAgICAgICAgIGhhbmRsZUh0dHBFcnJvcihyZWplY3QsIGh0dHBSZXNwb25zZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjcm9zc0RvbWFpbjogZmFsc2VcclxuICAgICAgfTtcclxuICAgICAgaWYgKG1hcHBpbmdDb250ZXh0LmRhdGFTZXJ2aWNlLnVzZUpzb25wKSB7XHJcbiAgICAgICAgcGFyYW1zLmRhdGFUeXBlID0gJ2pzb25wJztcclxuICAgICAgICBwYXJhbXMuY3Jvc3NEb21haW4gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWpheEltcGwuYWpheChwYXJhbXMpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxuICB9XHJcblxyXG4gIHNhdmVDaGFuZ2VzKHNhdmVDb250ZXh0OiBTYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZTogU2F2ZUJ1bmRsZSkge1xyXG4gICAgbGV0IGFkYXB0ZXIgPSBzYXZlQ29udGV4dC5hZGFwdGVyID0gdGhpcztcclxuXHJcbiAgICBsZXQgc2F2ZUJ1bmRsZVNlciA9IGFkYXB0ZXIuX3ByZXBhcmVTYXZlQnVuZGxlKHNhdmVDb250ZXh0LCBzYXZlQnVuZGxlKTtcclxuICAgIGxldCBidW5kbGUgPSBKU09OLnN0cmluZ2lmeShzYXZlQnVuZGxlU2VyKTtcclxuXHJcbiAgICBsZXQgdXJsID0gc2F2ZUNvbnRleHQuZGF0YVNlcnZpY2UucXVhbGlmeVVybChzYXZlQ29udGV4dC5yZXNvdXJjZU5hbWUpO1xyXG4gICAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxTYXZlUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRoaXMuYWpheEltcGwuYWpheCh7XHJcbiAgICAgICAgdHlwZTogXCJQT1NUXCIsXHJcbiAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgZGF0YTogYnVuZGxlLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChodHRwUmVzcG9uc2U6IEh0dHBSZXNwb25zZSkge1xyXG4gICAgICAgICAgaHR0cFJlc3BvbnNlLnNhdmVDb250ZXh0ID0gc2F2ZUNvbnRleHQ7XHJcbiAgICAgICAgICBsZXQgZGF0YSA9IGh0dHBSZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgaWYgKGRhdGEuRXJyb3JzIHx8IGRhdGEuZXJyb3JzKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUh0dHBFcnJvcihyZWplY3QsIGh0dHBSZXNwb25zZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgc2F2ZVJlc3VsdCA9IGFkYXB0ZXIuX3ByZXBhcmVTYXZlUmVzdWx0KHNhdmVDb250ZXh0LCBkYXRhKTtcclxuICAgICAgICAgICAgc2F2ZVJlc3VsdC5odHRwUmVzcG9uc2UgPSBodHRwUmVzcG9uc2U7XHJcbiAgICAgICAgICAgIHJlc29sdmUoc2F2ZVJlc3VsdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGh0dHBSZXNwb25zZTogSHR0cFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICBodHRwUmVzcG9uc2Uuc2F2ZUNvbnRleHQgPSBzYXZlQ29udGV4dDtcclxuICAgICAgICAgIGhhbmRsZUh0dHBFcnJvcihyZWplY3QsIGh0dHBSZXNwb25zZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgLyoqIEFic3RyYWN0IG1ldGhvZCB0aGF0IG5lZWRzIHRvIGJlIG92ZXJ3cml0dGVuIGluIGFueSBjb25jcmV0ZSBEYXRhU2VydmljZUFkYXB0ZXIgc3ViY2xhc3MuIFxyXG4gIFRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGlzIG1ldGhvZCBzaG91bGQgYmUgYSBzZXJpYWxpemFibGUgb2JqZWN0IHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIgYWZ0ZXIgY2FsbGluZyBKU09OLnN0cmluZ2lmeSBvbiBpdC5cclxuICAqL1xyXG4gIF9wcmVwYXJlU2F2ZUJ1bmRsZShzYXZlQ29udGV4dDogU2F2ZUNvbnRleHQsIHNhdmVCdW5kbGU6IFNhdmVCdW5kbGUpOiBhbnkge1xyXG4gICAgLy8gVGhlIGltcGxlbWVudG9yIHNob3VsZCBjYWxsIF9jcmVhdGVDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3JcclxuICAgIHRocm93IG5ldyBFcnJvcihcIk5lZWQgYSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBfcHJlcGFyZVNhdmVCdW5kbGVcIik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIGEgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIGEgXCJDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3JcIlxyXG4gIHRoYXQgY2FuIHR3ZWFrIHRoZSBzYXZlQnVuZGxlIGJvdGggYXMgaXQgaXMgYnVpbHQgYW5kIHdoZW4gaXQgaXMgY29tcGxldGVkXHJcbiAgYnkgYSBjb25jcmV0ZSBEYXRhU2VydmljZUFkYXBhdGVyLlxyXG5cclxuICBJbml0aWFsaXplZCB3aXRoIGEgZGVmYXVsdCwgbm8tb3AgaW1wbGVtZW50YXRpb24gdGhhdCBkZXZlbG9wZXJzIGNhbiByZXBsYWNlIHdpdGggYVxyXG4gIHN1YnN0YW50aXZlIGltcGxlbWVudGF0aW9uIHRoYXQgY2hhbmdlcyB0aGUgaW5kaXZpZHVhbCBlbnRpdHkgY2hhbmdlIHJlcXVlc3RzXHJcbiAgb3IgYXNwZWN0cyBvZiB0aGUgZW50aXJlICdzYXZlQnVuZGxlJyB3aXRob3V0IGhhdmluZyB0byB3cml0ZSB0aGVpciBvd24gRGF0YVNlcnZpY2UgYWRhcHRlcnMuXHJcbiAgPiAgICAgbGV0IGFkYXB0ZXIgPSBicmVlemUuY29uZmlnLmdldEFkYXB0ZXJJbnN0YW5jZSgnZGF0YVNlcnZpY2UnKTtcclxuICA+ICAgICBhZGFwdGVyLmNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvciA9IGZ1bmN0aW9uIChzYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZSkge1xyXG4gID4gICAgICAgICB0aGlzLmdldFJlcXVlc3QgPSBmdW5jdGlvbiAocmVxdWVzdCwgZW50aXR5LCBpbmRleCkge1xyXG4gID4gICAgICAgICAgICAvLyBhbHRlciB0aGUgcmVxdWVzdCB0aGF0IHRoZSBhZGFwdGVyIHByZXBhcmVkIGZvciB0aGlzIGVudGl0eVxyXG4gID4gICAgICAgICAgICAvLyBiYXNlZCBvbiB0aGUgZW50aXR5LCBzYXZlQ29udGV4dCwgYW5kIHNhdmVCdW5kbGVcclxuICA+ICAgICAgICAgICAgLy8gZS5nLiwgYWRkIGEgY3VzdG9tIGhlYWRlciBvciBwcnVuZSB0aGUgb3JpZ2luYWxWYWx1ZXNNYXBcclxuICA+ICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XHJcbiAgPiAgICAgICAgfTtcclxuICA+ICAgICAgICB0aGlzLmRvbmUgPSBmdW5jdGlvbiAocmVxdWVzdHMpIHtcclxuICA+ICAgICAgICAgICAgLy8gYWx0ZXIgdGhlIGFycmF5IG9mIHJlcXVlc3RzIHJlcHJlc2VudGluZyB0aGUgZW50aXJlIGNoYW5nZS1zZXRcclxuICA+ICAgICAgICAgICAgLy8gYmFzZWQgb24gdGhlIHNhdmVDb250ZXh0IGFuZCBzYXZlQnVuZGxlXHJcbiAgPiAgICAgICAgfTtcclxuICA+ICAgICB9XHJcblxyXG4gIEBwYXJhbSBzYXZlQ29udGV4dCAtIFRoZSBCcmVlemVKUyBcImNvbnRleHRcIiBmb3IgdGhlIHNhdmUgb3BlcmF0aW9uLlxyXG4gIEBwYXJhbSBzYXZlQnVuZGxlIC0gQ29udGFpbnMgdGhlIGFycmF5IG9mIGVudGl0aWVzLXRvLWJlLXNhdmVkIChBS0EsIHRoZSBlbnRpdHkgY2hhbmdlLXNldCkuXHJcbiAgQHJldHVybiBDb25zdHJ1Y3RvciBmb3IgYSBcIkNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvclwiLlxyXG4gICoqL1xyXG4gIGNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvcjogQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yQ3RvciA9IERlZmF1bHRDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3I7XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9jcmVhdGVDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3Ioc2F2ZUNvbnRleHQ6IFNhdmVDb250ZXh0LCBzYXZlQnVuZGxlOiBTYXZlQnVuZGxlKSB7XHJcbiAgICBsZXQgYWRhcHRlciA9IHNhdmVDb250ZXh0LmFkYXB0ZXIhO1xyXG4gICAgbGV0IGNyaSA9IGFkYXB0ZXIuY2hhbmdlUmVxdWVzdEludGVyY2VwdG9yO1xyXG4gICAgbGV0IGlzRm4gPSBjb3JlLmlzRnVuY3Rpb247XHJcblxyXG4gICAgaWYgKGlzRm4oY3JpKSkge1xyXG4gICAgICBsZXQgcHJlID0gYWRhcHRlci5uYW1lICsgXCIgRGF0YVNlcnZpY2VBZGFwdGVyJ3MgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yXCI7XHJcbiAgICAgIGxldCBwb3N0ID0gXCIgaXMgbWlzc2luZyBvciBub3QgYSBmdW5jdGlvbi5cIjtcclxuICAgICAgbGV0IGludGVyY2VwdG9yID0gbmV3IGNyaShzYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZSk7XHJcbiAgICAgIGlmICghaXNGbihpbnRlcmNlcHRvci5nZXRSZXF1ZXN0KSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcmUgKyAnLmdldFJlcXVlc3QnICsgcG9zdCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFpc0ZuKGludGVyY2VwdG9yLmRvbmUpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByZSArICcuZG9uZScgKyBwb3N0KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gaW50ZXJjZXB0b3I7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbmV3IERlZmF1bHRDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3Ioc2F2ZUNvbnRleHQsIHNhdmVCdW5kbGUpIGFzIENoYW5nZVJlcXVlc3RJbnRlcmNlcHRvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBBYnN0cmFjdCBtZXRob2QgdGhhdCBuZWVkcyB0byBiZSBvdmVyd3JpdHRlbiBpbiBhbnkgY29uY3JldGUgRGF0YVNlcnZpY2VBZGFwdGVyIHN1YmxjbGFzcy4gXHJcbiAgVGhpcyBtZXRob2QgbmVlZHMgdG8gdGFrZSB0aGUgcmVzdWx0IHJldHVybmVkIHRoZSBzZXJ2ZXIgYW5kIGNvbnZlcnQgaXQgaW50byBhbiBJU2F2ZVJlc3VsdC4gXHJcbiAgKi9cclxuICBfcHJlcGFyZVNhdmVSZXN1bHQoc2F2ZUNvbnRleHQ6IFNhdmVDb250ZXh0LCBkYXRhOiBhbnkpOiBTYXZlUmVzdWx0IHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIk5lZWQgYSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBfcHJlcGFyZVNhdmVSZXN1bHRcIik7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqIFV0aWxpdHkgbWV0aG9kIHRoYXQgbWF5IGJlIHVzZWQgaW4gYW55IGNvbmNyZXRlIERhdGFTZXJ2aWNlQWRhcHRlciBzdWJsY2xhc3MgdG8gaGFuZGxlIGFueSBcclxuICBodHRwIGNvbm5lY3Rpb24gaXNzdWVzLiBcclxuICAqL1xyXG4gIC8vIFB1dCB0aGlzIGF0IHRoZSBib3R0b20gb2YgeW91ciBodHRwIGVycm9yIGFuYWx5c2lzXHJcbiAgc3RhdGljIF9jYXRjaE5vQ29ubmVjdGlvbkVycm9yKGVycjogU2VydmVyRXJyb3IpIHtcclxuICAgIGlmIChlcnIuc3RhdHVzID09PSAwICYmIGVyci5tZXNzYWdlID09IG51bGwpIHtcclxuICAgICAgZXJyLm1lc3NhZ2UgPSBcIkhUVFAgcmVzcG9uc2Ugc3RhdHVzIDAgYW5kIG5vIG1lc3NhZ2UuICBcIiArXHJcbiAgICAgICAgXCJMaWtlbHkgZGlkIG5vdCBvciBjb3VsZCBub3QgcmVhY2ggc2VydmVyLiBJcyB0aGUgc2VydmVyIHJ1bm5pbmc/XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBqc29uUmVzdWx0c0FkYXB0ZXIgPSBuZXcgSnNvblJlc3VsdHNBZGFwdGVyKHtcclxuICAgIG5hbWU6IFwibm9vcFwiLFxyXG5cclxuICAgIHZpc2l0Tm9kZTogZnVuY3Rpb24gKC8qIG5vZGUsIG1hcHBpbmdDb250ZXh0LCBub2RlQ29udGV4dCAqLykge1xyXG4gICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhbmRsZUh0dHBFcnJvcihyZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQsIGh0dHBSZXNwb25zZTogSHR0cFJlc3BvbnNlLCBtZXNzYWdlUHJlZml4Pzogc3RyaW5nKSB7XHJcbiAgbGV0IGVyciA9IGNyZWF0ZUVycm9yKGh0dHBSZXNwb25zZSk7XHJcbiAgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXIuX2NhdGNoTm9Db25uZWN0aW9uRXJyb3IoZXJyKTtcclxuICBpZiAobWVzc2FnZVByZWZpeCkge1xyXG4gICAgZXJyLm1lc3NhZ2UgPSBtZXNzYWdlUHJlZml4ICsgXCI7IFwiICsgZXJyLm1lc3NhZ2U7XHJcbiAgfVxyXG4gIHJlamVjdChlcnIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVFcnJvcihodHRwUmVzcG9uc2U6IEh0dHBSZXNwb25zZSkge1xyXG4gIGxldCBlcnIgPSBuZXcgRXJyb3IoKSBhcyBTZXJ2ZXJFcnJvcjtcclxuICBlcnIuaHR0cFJlc3BvbnNlID0gaHR0cFJlc3BvbnNlO1xyXG4gIGVyci5zdGF0dXMgPSBodHRwUmVzcG9uc2Uuc3RhdHVzO1xyXG5cclxuICBsZXQgZXJyT2JqID0gaHR0cFJlc3BvbnNlLmRhdGE7XHJcblxyXG4gIGlmICghZXJyT2JqKSB7XHJcbiAgICBlcnIubWVzc2FnZSA9IGh0dHBSZXNwb25zZS5lcnJvciAmJiBodHRwUmVzcG9uc2UuZXJyb3IudG9TdHJpbmcoKTtcclxuICAgIHJldHVybiBlcnI7XHJcbiAgfVxyXG5cclxuICAvLyBzb21lIGFqYXggcHJvdmlkZXJzIHdpbGwgY29udmVydCBlcnJhbnQgcmVzdWx0IGludG8gYW4gb2JqZWN0IChhbmd1bGFyanMpLCBvdGhlcnMgd2lsbCBub3QgKGpRdWVyeSlcclxuICAvLyBpZiBub3QgZG8gaXQgaGVyZS5cclxuICBpZiAodHlwZW9mIGVyck9iaiA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgdHJ5IHtcclxuICAgICAgZXJyT2JqID0gSlNPTi5wYXJzZShlcnJPYmopO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyBzb21ldGltZXMgaHR0cFJlc3BvbnNlLmRhdGEgaXMganVzdCB0aGUgZXJyb3IgbWVzc2FnZSBpdHNlbGZcclxuICAgICAgZXJyLm1lc3NhZ2UgPSBlcnJPYmo7XHJcbiAgICAgIHJldHVybiBlcnI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsZXQgc2F2ZUNvbnRleHQgPSBodHRwUmVzcG9uc2Uuc2F2ZUNvbnRleHQ7XHJcblxyXG4gIC8vIGlmIGFueSBvZiB0aGUgZm9sbG93IHByb3BlcnRpZXMgZXhpc3QgdGhlIHNvdXJjZSBpcyAuTkVUXHJcbiAgbGV0IHRtcCA9IGVyck9iai5NZXNzYWdlIHx8IGVyck9iai5FeGNlcHRpb25NZXNzYWdlIHx8IGVyck9iai5FbnRpdHlFcnJvcnMgfHwgZXJyT2JqLkVycm9ycztcclxuICBsZXQgaXNEb3ROZXQgPSAhIXRtcDtcclxuICBsZXQgbWVzc2FnZTogc3RyaW5nLCBlbnRpdHlFcnJvcnM6IGFueVtdO1xyXG4gIGlmICghaXNEb3ROZXQpIHtcclxuICAgIG1lc3NhZ2UgPSBlcnJPYmoubWVzc2FnZTtcclxuICAgIGVudGl0eUVycm9ycyA9IGVyck9iai5lcnJvcnMgfHwgZXJyT2JqLmVudGl0eUVycm9ycztcclxuICB9IGVsc2Uge1xyXG4gICAgbGV0IHRtcCA9IGVyck9iajtcclxuICAgIGRvIHtcclxuICAgICAgLy8gLk5FVCBleGNlcHRpb25zIGNhbiBwcm92aWRlIGJvdGggRXhjZXB0aW9uTWVzc2FnZSBhbmQgTWVzc2FnZSBidXQgRXhjZXB0aW9uTWV0aG9kIGlmIGl0XHJcbiAgICAgIC8vIGV4aXN0cyBoYXMgYSBtb3JlIGRldGFpbGVkIG1lc3NhZ2UuXHJcbiAgICAgIG1lc3NhZ2UgPSB0bXAuRXhjZXB0aW9uTWVzc2FnZSB8fCB0bXAuTWVzc2FnZTtcclxuICAgICAgdG1wID0gdG1wLklubmVyRXhjZXB0aW9uO1xyXG4gICAgfSB3aGlsZSAodG1wKTtcclxuICAgIC8vIC5FbnRpdHlFcnJvcnMgd2lsbCBvbmx5IG9jY3VyIGFzIGEgcmVzdWx0IG9mIGFuIEVudGl0eUVycm9yc0V4Y2VwdGlvbiBiZWluZyBkZWxpYmVyYXRlbHkgdGhyb3duIG9uIHRoZSBzZXJ2ZXJcclxuICAgIGVudGl0eUVycm9ycyA9IGVyck9iai5FcnJvcnMgfHwgZXJyT2JqLkVudGl0eUVycm9ycztcclxuICAgIGVudGl0eUVycm9ycyA9IGVudGl0eUVycm9ycyAmJiBlbnRpdHlFcnJvcnMubWFwKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZXJyb3JOYW1lOiBlLkVycm9yTmFtZSxcclxuICAgICAgICBlbnRpdHlUeXBlTmFtZTogTWV0YWRhdGFTdG9yZS5ub3JtYWxpemVUeXBlTmFtZShlLkVudGl0eVR5cGVOYW1lKSxcclxuICAgICAgICBrZXlWYWx1ZXM6IGUuS2V5VmFsdWVzLFxyXG4gICAgICAgIHByb3BlcnR5TmFtZTogZS5Qcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgZXJyb3JNZXNzYWdlOiBlLkVycm9yTWVzc2FnZSxcclxuICAgICAgICBjdXN0b206IGUuQ3VzdG9tXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGlmIChzYXZlQ29udGV4dCAmJiBlbnRpdHlFcnJvcnMpIHtcclxuXHJcbiAgICBsZXQgcHJvcE5hbWVGbiA9IHNhdmVDb250ZXh0LmVudGl0eU1hbmFnZXIubWV0YWRhdGFTdG9yZS5uYW1pbmdDb252ZW50aW9uLnNlcnZlclByb3BlcnR5TmFtZVRvQ2xpZW50O1xyXG4gICAgZW50aXR5RXJyb3JzLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcclxuICAgICAgZS5wcm9wZXJ0eU5hbWUgPSBlLnByb3BlcnR5TmFtZSAmJiBwcm9wTmFtZUZuKGUucHJvcGVydHlOYW1lKTtcclxuICAgIH0pO1xyXG4gICAgKGVyciBhcyBTYXZlRXJyb3JGcm9tU2VydmVyKS5lbnRpdHlFcnJvcnMgPSBlbnRpdHlFcnJvcnM7XHJcbiAgfVxyXG5cclxuICBlcnIubWVzc2FnZSA9IG1lc3NhZ2UgfHwgXCJTZXJ2ZXIgc2lkZSBlcnJvcnMgZW5jb3VudGVyZWQgLSBzZWUgdGhlIGVudGl0eUVycm9ycyBjb2xsZWN0aW9uIG9uIHRoaXMgb2JqZWN0IGZvciBtb3JlIGRldGFpbFwiO1xyXG4gIHJldHVybiBlcnI7XHJcbn1cclxuXHJcblxyXG4vKiogVGhpcyBpcyBhIGRlZmF1bHQsIG5vLW9wIGltcGxlbWVudGF0aW9uIHRoYXQgZGV2ZWxvcGVycyBjYW4gcmVwbGFjZS4gKi9cclxuY2xhc3MgRGVmYXVsdENoYW5nZVJlcXVlc3RJbnRlcmNlcHRvciB7XHJcbiAgY29uc3RydWN0b3Ioc2F2ZUNvbnRleHQ6IFNhdmVDb250ZXh0LCBzYXZlQnVuZGxlOiBTYXZlQnVuZGxlKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0UmVxdWVzdChyZXF1ZXN0OiBhbnksIGVudGl0eTogRW50aXR5LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gcmVxdWVzdDtcclxuICB9XHJcblxyXG4gIGRvbmUocmVxdWVzdHM6IE9iamVjdFtdKSB7XHJcbiAgfVxyXG59XHJcbiJdfQ==
302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZGF0YS1zZXJ2aWNlLWFkYXB0ZXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9icmVlemUtY2xpZW50LyIsInNvdXJjZXMiOlsic3JjL2Fic3RyYWN0LWRhdGEtc2VydmljZS1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUtsQyxPQUFPLEVBQWUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbEQ7OztFQUdFO0FBQ0Y7SUFBQTtRQTRKRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztXQXlCRztRQUNILDZCQUF3QixHQUFpQywrQkFBK0IsQ0FBQztRQTJDekYsdUJBQWtCLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQztZQUMxQyxJQUFJLEVBQUUsTUFBTTtZQUVaLFNBQVMsRUFBRSxXQUFVLHVDQUF1QztnQkFDMUQsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQWhPQyxxQkFBcUI7SUFDckIsMERBQXFCLEdBQXJCLFVBQXNCLHdCQUE2QjtRQUNqRCxJQUFJLHdCQUF3QixDQUFDLGFBQWEsS0FBSyxNQUFNLElBQUksd0JBQXdCLENBQUMsU0FBUyxFQUFFO1lBQzNGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQjtJQUNILENBQUM7SUFFRCwrQ0FBVSxHQUFWO1FBQ0UsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQWMsTUFBTSxDQUFHLENBQUM7UUFFakUsbUhBQW1IO1FBQ25ILElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTtZQUN2QyxPQUFPO1NBQ1I7UUFDRCxNQUFNLElB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QUMsU0FBUztnQkFDdEIsY0FBYyxFQUFFLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO2dCQUNqRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVM7Z0JBQ3RCLFlBQVksRUFBRSxDQUFDLENBQUMsWUFBWTtnQkFDNUIsWUFBWSxFQUFFLENBQUMsQ0FBQyxZQUFZO2dCQUM1QixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU07YUFDakIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0tBQ0o7SUFFRCxJQUFJLFdBQVcsSUFBSSxZQUFZLEVBQUU7UUFFL0IsSUFBSSxZQUFVLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsMEJBQTBCLENBQUM7UUFDckcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDOUIsQ0FBQyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsWUFBWSxJQUFJLFlBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFDRixHQUEyQixDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7S0FDMUQ7SUFFRCxHQUFHLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxpR0FBaUcsQ0FBQztJQUMzSCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFHRCwyRUFBMkU7QUFDM0U7SUFDRSx5Q0FBWSxXQUF3QixFQUFFLFVBQXNCO0lBRTVELENBQUM7SUFFRCxvREFBVSxHQUFWLFVBQVcsT0FBWSxFQUFFLE1BQWMsRUFBRSxLQUFhO1FBQ3BELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCw4Q0FBSSxHQUFKLFVBQUssUUFBa0I7SUFDdkIsQ0FBQztJQUNILHNDQUFDO0FBQUQsQ0FBQyxBQVhELElBV0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3JlIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xyXG5pbXBvcnQgeyBFbnRpdHlRdWVyeSB9IGZyb20gJy4vZW50aXR5LXF1ZXJ5JztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2VBZGFwdGVyLCBBamF4QWRhcHRlciwgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yQ3RvciwgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yIH0gZnJvbSAnLi9pbnRlcmZhY2UtcmVnaXN0cnknO1xyXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuL2VudGl0eS1hc3BlY3QnO1xyXG5pbXBvcnQgeyBNYXBwaW5nQ29udGV4dCB9IGZyb20gJy4vbWFwcGluZy1jb250ZXh0JztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2UsIEpzb25SZXN1bHRzQWRhcHRlciB9IGZyb20gJy4vZGF0YS1zZXJ2aWNlJztcclxuaW1wb3J0IHsgSHR0cFJlc3BvbnNlLCBTYXZlQ29udGV4dCwgU2F2ZUJ1bmRsZSwgU2VydmVyRXJyb3IsIFNhdmVSZXN1bHQsIFNhdmVFcnJvckZyb21TZXJ2ZXIsIFF1ZXJ5UmVzdWx0IH0gZnJvbSAnLi9lbnRpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IE1ldGFkYXRhU3RvcmUgfSBmcm9tICcuL2VudGl0eS1tZXRhZGF0YSc7XHJcblxyXG4vKiogRm9yIHVzZSBieSBicmVlemUgcGx1Z2luIGF1dGhvcnMgb25seS4gIFRoZSBjbGFzcyBpcyB1c2VkIGFzIHRoZSBiYXNlIGNsYXNzIGZvciBtb3N0IFtbSURhdGFTZXJ2aWNlQWRhcHRlcl1dIGltcGxlbWVudGF0aW9uc1xyXG5AYWRhcHRlciAoc2VlIFtbSURhdGFTZXJ2aWNlQWRhcHRlcl1dKSAgICBcclxuQGhpZGRlblxyXG4qL1xyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXIgaW1wbGVtZW50cyBEYXRhU2VydmljZUFkYXB0ZXIge1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIGRlY2xhcmUgXyRpbXBsPzogYW55O1xyXG4gIC8qKiBUaGUgbmFtZSBvZiB0aGlzIGFkYXB0ZXIuICovXHJcbiAgZGVjbGFyZSBuYW1lOiBzdHJpbmc7XHJcbiAgLyoqIFRoZSBbW0lBamF4QWRhcHRlcl1dIHVzZWQgYnkgdGhpcyBbW0lEYXRhU2VydmljZUFkYXB0ZXJdXS4gKi9cclxuICBkZWNsYXJlIGFqYXhJbXBsOiBBamF4QWRhcHRlcjtcclxuXHJcbiAgLy8gVE9ETyB1c2UgaW50ZXJmYWNlXHJcbiAgY2hlY2tGb3JSZWNvbXBvc2l0aW9uKGludGVyZmFjZUluaXRpYWxpemVkQXJnczogYW55KSB7XHJcbiAgICBpZiAoaW50ZXJmYWNlSW5pdGlhbGl6ZWRBcmdzLmludGVyZmFjZU5hbWUgPT09IFwiYWpheFwiICYmIGludGVyZmFjZUluaXRpYWxpemVkQXJncy5pc0RlZmF1bHQpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplKCkge1xyXG4gICAgdGhpcy5hamF4SW1wbCA9IGNvbmZpZy5nZXRBZGFwdGVySW5zdGFuY2U8QWpheEFkYXB0ZXI+KFwiYWpheFwiKSAhO1xyXG5cclxuICAgIC8vIGRvbid0IGNhY2hlICdhamF4JyBiZWNhdXNlIHRoZW4gd2Ugd291bGQgbmVlZCB0byBcIi5iaW5kXCIgaXQsIGFuZCBkb24ndCB3YW50IHRvIGJlY2F1c2Ugb2YgYnJvd2VyIHN1cHBvcnQgaXNzdWVzLlxyXG4gICAgaWYgKHRoaXMuYWpheEltcGwgJiYgdGhpcy5hamF4SW1wbC5hamF4KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIGFqYXggYWRhcHRlciBmb3IgZGF0YXNlcnZpY2UgYWRhcHRlciAnXCIgKyAodGhpcy5uYW1lIHx8ICcnKSArIFwiJy5cIik7XHJcbiAgfVxyXG5cclxuICBmZXRjaE1ldGFkYXRhKG1ldGFkYXRhU3RvcmU6IE1ldGFkYXRhU3RvcmUsIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSkge1xyXG4gICAgbGV0IHNlcnZpY2VOYW1lID0gZGF0YVNlcnZpY2Uuc2VydmljZU5hbWU7XHJcbiAgICBsZXQgdXJsID0gZGF0YVNlcnZpY2UucXVhbGlmeVVybChcIk1ldGFkYXRhXCIpO1xyXG5cclxuICAgIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5hamF4SW1wbC5hamF4KHtcclxuICAgICAgICB0eXBlOiBcIkdFVFwiLFxyXG4gICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogKGh0dHBSZXNwb25zZTogSHR0cFJlc3BvbnNlKSA9PiB7XHJcblxyXG4gICAgICAgICAgLy8gbWlnaHQgaGF2ZSBiZWVuIGZldGNoZWQgYnkgYW5vdGhlciBxdWVyeVxyXG4gICAgICAgICAgaWYgKG1ldGFkYXRhU3RvcmUuaGFzTWV0YWRhdGFGb3Ioc2VydmljZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKFwiYWxyZWFkeSBmZXRjaGVkXCIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IGRhdGEgPSBodHRwUmVzcG9uc2UuZGF0YTtcclxuICAgICAgICAgIGxldCBtZXRhZGF0YTogYW55O1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbWV0YWRhdGEgPSB0eXBlb2YgKGRhdGEpID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShkYXRhKSA6IGRhdGE7XHJcbiAgICAgICAgICAgIG1ldGFkYXRhU3RvcmUuaW1wb3J0TWV0YWRhdGEobWV0YWRhdGEpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsZXQgZXJyTXNnID0gXCJVbmFibGUgdG8gZWl0aGVyIHBhcnNlIG9yIGltcG9ydCBtZXRhZGF0YTogXCIgKyBlLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIGhhbmRsZUh0dHBFcnJvcihyZWplY3QsIGh0dHBSZXNwb25zZSwgXCJNZXRhZGF0YSBxdWVyeSBmYWlsZWQgZm9yOiBcIiArIHVybCArIFwiLiBcIiArIGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gaW1wb3J0IG1heSBoYXZlIGJyb3VnaHQgaW4gdGhlIHNlcnZpY2UuXHJcbiAgICAgICAgICBpZiAoIW1ldGFkYXRhU3RvcmUuaGFzTWV0YWRhdGFGb3Ioc2VydmljZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIG1ldGFkYXRhU3RvcmUuYWRkRGF0YVNlcnZpY2UoZGF0YVNlcnZpY2UpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJlc29sdmUobWV0YWRhdGEpO1xyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoaHR0cFJlc3BvbnNlOiBIdHRwUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGhhbmRsZUh0dHBFcnJvcihyZWplY3QsIGh0dHBSZXNwb25zZSwgXCJNZXRhZGF0YSBxdWVyeSBmYWlsZWQgZm9yOiBcIiArIHVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHByb21pc2U7XHJcbiAgfVxyXG5cclxuICBleGVjdXRlUXVlcnkobWFwcGluZ0NvbnRleHQ6IE1hcHBpbmdDb250ZXh0KSB7XHJcbiAgICBtYXBwaW5nQ29udGV4dC5hZGFwdGVyID0gdGhpcztcclxuICAgIGxldCBwcm9taXNlID0gbmV3IFByb21pc2U8UXVlcnlSZXN1bHQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgbGV0IHVybCA9IG1hcHBpbmdDb250ZXh0LmdldFVybCgpO1xyXG5cclxuICAgICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgICB0eXBlOiBcIkdFVFwiLFxyXG4gICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgIHBhcmFtczogKG1hcHBpbmdDb250ZXh0LnF1ZXJ5IGFzIEVudGl0eVF1ZXJ5KS5wYXJhbWV0ZXJzLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGh0dHBSZXNwb25zZTogSHR0cFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICBsZXQgZGF0YSA9IGh0dHBSZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJEYXRhOiBRdWVyeVJlc3VsdDtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBkYXRhICYmIChkYXRhLnJlc3VsdHMgfHwgZGF0YS5SZXN1bHRzKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgICByRGF0YSA9IHsgcmVzdWx0czogcmVzdWx0cywgaW5saW5lQ291bnQ6IGRhdGEuaW5saW5lQ291bnQgfHwgZGF0YS5JbmxpbmVDb3VudCwgXHJcbiAgICAgICAgICAgICAgICBodHRwUmVzcG9uc2U6IGh0dHBSZXNwb25zZSwgcXVlcnk6IG1hcHBpbmdDb250ZXh0LnF1ZXJ5IH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgckRhdGEgPSB7IHJlc3VsdHM6IGRhdGEsIGh0dHBSZXNwb25zZTogaHR0cFJlc3BvbnNlLCBxdWVyeTogbWFwcGluZ0NvbnRleHQucXVlcnkgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZShyRGF0YSk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcclxuICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaGFuZGxlSHR0cEVycm9yKHJlamVjdCwgaHR0cFJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAoaHR0cFJlc3BvbnNlOiBIdHRwUmVzcG9uc2UpIHtcclxuICAgICAgICAgIGhhbmRsZUh0dHBFcnJvcihyZWplY3QsIGh0dHBSZXNwb25zZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjcm9zc0RvbWFpbjogZmFsc2VcclxuICAgICAgfTtcclxuICAgICAgaWYgKG1hcHBpbmdDb250ZXh0LmRhdGFTZXJ2aWNlLnVzZUpzb25wKSB7XHJcbiAgICAgICAgcGFyYW1zLmRhdGFUeXBlID0gJ2pzb25wJztcclxuICAgICAgICBwYXJhbXMuY3Jvc3NEb21haW4gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWpheEltcGwuYWpheChwYXJhbXMpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxuICB9XHJcblxyXG4gIHNhdmVDaGFuZ2VzKHNhdmVDb250ZXh0OiBTYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZTogU2F2ZUJ1bmRsZSkge1xyXG4gICAgbGV0IGFkYXB0ZXIgPSBzYXZlQ29udGV4dC5hZGFwdGVyID0gdGhpcztcclxuXHJcbiAgICBsZXQgc2F2ZUJ1bmRsZVNlciA9IGFkYXB0ZXIuX3ByZXBhcmVTYXZlQnVuZGxlKHNhdmVDb250ZXh0LCBzYXZlQnVuZGxlKTtcclxuICAgIGxldCBidW5kbGUgPSBKU09OLnN0cmluZ2lmeShzYXZlQnVuZGxlU2VyKTtcclxuXHJcbiAgICBsZXQgdXJsID0gc2F2ZUNvbnRleHQuZGF0YVNlcnZpY2UucXVhbGlmeVVybChzYXZlQ29udGV4dC5yZXNvdXJjZU5hbWUpO1xyXG4gICAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxTYXZlUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRoaXMuYWpheEltcGwuYWpheCh7XHJcbiAgICAgICAgdHlwZTogXCJQT1NUXCIsXHJcbiAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgZGF0YTogYnVuZGxlLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChodHRwUmVzcG9uc2U6IEh0dHBSZXNwb25zZSkge1xyXG4gICAgICAgICAgaHR0cFJlc3BvbnNlLnNhdmVDb250ZXh0ID0gc2F2ZUNvbnRleHQ7XHJcbiAgICAgICAgICBsZXQgZGF0YSA9IGh0dHBSZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgaWYgKGRhdGEuRXJyb3JzIHx8IGRhdGEuZXJyb3JzKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUh0dHBFcnJvcihyZWplY3QsIGh0dHBSZXNwb25zZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgc2F2ZVJlc3VsdCA9IGFkYXB0ZXIuX3ByZXBhcmVTYXZlUmVzdWx0KHNhdmVDb250ZXh0LCBkYXRhKTtcclxuICAgICAgICAgICAgc2F2ZVJlc3VsdC5odHRwUmVzcG9uc2UgPSBodHRwUmVzcG9uc2U7XHJcbiAgICAgICAgICAgIHJlc29sdmUoc2F2ZVJlc3VsdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGh0dHBSZXNwb25zZTogSHR0cFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICBodHRwUmVzcG9uc2Uuc2F2ZUNvbnRleHQgPSBzYXZlQ29udGV4dDtcclxuICAgICAgICAgIGhhbmRsZUh0dHBFcnJvcihyZWplY3QsIGh0dHBSZXNwb25zZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgLyoqIEFic3RyYWN0IG1ldGhvZCB0aGF0IG5lZWRzIHRvIGJlIG92ZXJ3cml0dGVuIGluIGFueSBjb25jcmV0ZSBEYXRhU2VydmljZUFkYXB0ZXIgc3ViY2xhc3MuIFxyXG4gIFRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGlzIG1ldGhvZCBzaG91bGQgYmUgYSBzZXJpYWxpemFibGUgb2JqZWN0IHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIgYWZ0ZXIgY2FsbGluZyBKU09OLnN0cmluZ2lmeSBvbiBpdC5cclxuICAqL1xyXG4gIF9wcmVwYXJlU2F2ZUJ1bmRsZShzYXZlQ29udGV4dDogU2F2ZUNvbnRleHQsIHNhdmVCdW5kbGU6IFNhdmVCdW5kbGUpOiBhbnkge1xyXG4gICAgLy8gVGhlIGltcGxlbWVudG9yIHNob3VsZCBjYWxsIF9jcmVhdGVDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3JcclxuICAgIHRocm93IG5ldyBFcnJvcihcIk5lZWQgYSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBfcHJlcGFyZVNhdmVCdW5kbGVcIik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIGEgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIGEgXCJDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3JcIlxyXG4gIHRoYXQgY2FuIHR3ZWFrIHRoZSBzYXZlQnVuZGxlIGJvdGggYXMgaXQgaXMgYnVpbHQgYW5kIHdoZW4gaXQgaXMgY29tcGxldGVkXHJcbiAgYnkgYSBjb25jcmV0ZSBEYXRhU2VydmljZUFkYXBhdGVyLlxyXG5cclxuICBJbml0aWFsaXplZCB3aXRoIGEgZGVmYXVsdCwgbm8tb3AgaW1wbGVtZW50YXRpb24gdGhhdCBkZXZlbG9wZXJzIGNhbiByZXBsYWNlIHdpdGggYVxyXG4gIHN1YnN0YW50aXZlIGltcGxlbWVudGF0aW9uIHRoYXQgY2hhbmdlcyB0aGUgaW5kaXZpZHVhbCBlbnRpdHkgY2hhbmdlIHJlcXVlc3RzXHJcbiAgb3IgYXNwZWN0cyBvZiB0aGUgZW50aXJlICdzYXZlQnVuZGxlJyB3aXRob3V0IGhhdmluZyB0byB3cml0ZSB0aGVpciBvd24gRGF0YVNlcnZpY2UgYWRhcHRlcnMuXHJcbiAgPiAgICAgbGV0IGFkYXB0ZXIgPSBicmVlemUuY29uZmlnLmdldEFkYXB0ZXJJbnN0YW5jZSgnZGF0YVNlcnZpY2UnKTtcclxuICA+ICAgICBhZGFwdGVyLmNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvciA9IGZ1bmN0aW9uIChzYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZSkge1xyXG4gID4gICAgICAgICB0aGlzLmdldFJlcXVlc3QgPSBmdW5jdGlvbiAocmVxdWVzdCwgZW50aXR5LCBpbmRleCkge1xyXG4gID4gICAgICAgICAgICAvLyBhbHRlciB0aGUgcmVxdWVzdCB0aGF0IHRoZSBhZGFwdGVyIHByZXBhcmVkIGZvciB0aGlzIGVudGl0eVxyXG4gID4gICAgICAgICAgICAvLyBiYXNlZCBvbiB0aGUgZW50aXR5LCBzYXZlQ29udGV4dCwgYW5kIHNhdmVCdW5kbGVcclxuICA+ICAgICAgICAgICAgLy8gZS5nLiwgYWRkIGEgY3VzdG9tIGhlYWRlciBvciBwcnVuZSB0aGUgb3JpZ2luYWxWYWx1ZXNNYXBcclxuICA+ICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XHJcbiAgPiAgICAgICAgfTtcclxuICA+ICAgICAgICB0aGlzLmRvbmUgPSBmdW5jdGlvbiAocmVxdWVzdHMpIHtcclxuICA+ICAgICAgICAgICAgLy8gYWx0ZXIgdGhlIGFycmF5IG9mIHJlcXVlc3RzIHJlcHJlc2VudGluZyB0aGUgZW50aXJlIGNoYW5nZS1zZXRcclxuICA+ICAgICAgICAgICAgLy8gYmFzZWQgb24gdGhlIHNhdmVDb250ZXh0IGFuZCBzYXZlQnVuZGxlXHJcbiAgPiAgICAgICAgfTtcclxuICA+ICAgICB9XHJcblxyXG4gIEBwYXJhbSBzYXZlQ29udGV4dCAtIFRoZSBCcmVlemVKUyBcImNvbnRleHRcIiBmb3IgdGhlIHNhdmUgb3BlcmF0aW9uLlxyXG4gIEBwYXJhbSBzYXZlQnVuZGxlIC0gQ29udGFpbnMgdGhlIGFycmF5IG9mIGVudGl0aWVzLXRvLWJlLXNhdmVkIChBS0EsIHRoZSBlbnRpdHkgY2hhbmdlLXNldCkuXHJcbiAgQHJldHVybiBDb25zdHJ1Y3RvciBmb3IgYSBcIkNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvclwiLlxyXG4gICoqL1xyXG4gIGNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvcjogQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yQ3RvciA9IERlZmF1bHRDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3I7XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9jcmVhdGVDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3Ioc2F2ZUNvbnRleHQ6IFNhdmVDb250ZXh0LCBzYXZlQnVuZGxlOiBTYXZlQnVuZGxlKSB7XHJcbiAgICBsZXQgYWRhcHRlciA9IHNhdmVDb250ZXh0LmFkYXB0ZXIhO1xyXG4gICAgbGV0IGNyaSA9IGFkYXB0ZXIuY2hhbmdlUmVxdWVzdEludGVyY2VwdG9yO1xyXG4gICAgbGV0IGlzRm4gPSBjb3JlLmlzRnVuY3Rpb247XHJcblxyXG4gICAgaWYgKGlzRm4oY3JpKSkge1xyXG4gICAgICBsZXQgcHJlID0gYWRhcHRlci5uYW1lICsgXCIgRGF0YVNlcnZpY2VBZGFwdGVyJ3MgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yXCI7XHJcbiAgICAgIGxldCBwb3N0ID0gXCIgaXMgbWlzc2luZyBvciBub3QgYSBmdW5jdGlvbi5cIjtcclxuICAgICAgbGV0IGludGVyY2VwdG9yID0gbmV3IGNyaShzYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZSk7XHJcbiAgICAgIGlmICghaXNGbihpbnRlcmNlcHRvci5nZXRSZXF1ZXN0KSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcmUgKyAnLmdldFJlcXVlc3QnICsgcG9zdCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFpc0ZuKGludGVyY2VwdG9yLmRvbmUpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByZSArICcuZG9uZScgKyBwb3N0KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gaW50ZXJjZXB0b3I7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbmV3IERlZmF1bHRDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3Ioc2F2ZUNvbnRleHQsIHNhdmVCdW5kbGUpIGFzIENoYW5nZVJlcXVlc3RJbnRlcmNlcHRvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBBYnN0cmFjdCBtZXRob2QgdGhhdCBuZWVkcyB0byBiZSBvdmVyd3JpdHRlbiBpbiBhbnkgY29uY3JldGUgRGF0YVNlcnZpY2VBZGFwdGVyIHN1YmxjbGFzcy4gXHJcbiAgVGhpcyBtZXRob2QgbmVlZHMgdG8gdGFrZSB0aGUgcmVzdWx0IHJldHVybmVkIHRoZSBzZXJ2ZXIgYW5kIGNvbnZlcnQgaXQgaW50byBhbiBJU2F2ZVJlc3VsdC4gXHJcbiAgKi9cclxuICBfcHJlcGFyZVNhdmVSZXN1bHQoc2F2ZUNvbnRleHQ6IFNhdmVDb250ZXh0LCBkYXRhOiBhbnkpOiBTYXZlUmVzdWx0IHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIk5lZWQgYSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBfcHJlcGFyZVNhdmVSZXN1bHRcIik7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqIFV0aWxpdHkgbWV0aG9kIHRoYXQgbWF5IGJlIHVzZWQgaW4gYW55IGNvbmNyZXRlIERhdGFTZXJ2aWNlQWRhcHRlciBzdWJsY2xhc3MgdG8gaGFuZGxlIGFueSBcclxuICBodHRwIGNvbm5lY3Rpb24gaXNzdWVzLiBcclxuICAqL1xyXG4gIC8vIFB1dCB0aGlzIGF0IHRoZSBib3R0b20gb2YgeW91ciBodHRwIGVycm9yIGFuYWx5c2lzXHJcbiAgc3RhdGljIF9jYXRjaE5vQ29ubmVjdGlvbkVycm9yKGVycjogU2VydmVyRXJyb3IpIHtcclxuICAgIGlmIChlcnIuc3RhdHVzID09PSAwICYmIGVyci5tZXNzYWdlID09IG51bGwpIHtcclxuICAgICAgZXJyLm1lc3NhZ2UgPSBcIkhUVFAgcmVzcG9uc2Ugc3RhdHVzIDAgYW5kIG5vIG1lc3NhZ2UuICBcIiArXHJcbiAgICAgICAgXCJMaWtlbHkgZGlkIG5vdCBvciBjb3VsZCBub3QgcmVhY2ggc2VydmVyLiBJcyB0aGUgc2VydmVyIHJ1bm5pbmc/XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBqc29uUmVzdWx0c0FkYXB0ZXIgPSBuZXcgSnNvblJlc3VsdHNBZGFwdGVyKHtcclxuICAgIG5hbWU6IFwibm9vcFwiLFxyXG5cclxuICAgIHZpc2l0Tm9kZTogZnVuY3Rpb24gKC8qIG5vZGUsIG1hcHBpbmdDb250ZXh0LCBub2RlQ29udGV4dCAqLykge1xyXG4gICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhbmRsZUh0dHBFcnJvcihyZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQsIGh0dHBSZXNwb25zZTogSHR0cFJlc3BvbnNlLCBtZXNzYWdlUHJlZml4Pzogc3RyaW5nKSB7XHJcbiAgbGV0IGVyciA9IGNyZWF0ZUVycm9yKGh0dHBSZXNwb25zZSk7XHJcbiAgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXIuX2NhdGNoTm9Db25uZWN0aW9uRXJyb3IoZXJyKTtcclxuICBpZiAobWVzc2FnZVByZWZpeCkge1xyXG4gICAgZXJyLm1lc3NhZ2UgPSBtZXNzYWdlUHJlZml4ICsgXCI7IFwiICsgZXJyLm1lc3NhZ2U7XHJcbiAgfVxyXG4gIHJlamVjdChlcnIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVFcnJvcihodHRwUmVzcG9uc2U6IEh0dHBSZXNwb25zZSkge1xyXG4gIGxldCBlcnIgPSBuZXcgRXJyb3IoKSBhcyBTZXJ2ZXJFcnJvcjtcclxuICBlcnIuaHR0cFJlc3BvbnNlID0gaHR0cFJlc3BvbnNlO1xyXG4gIGVyci5zdGF0dXMgPSBodHRwUmVzcG9uc2Uuc3RhdHVzO1xyXG5cclxuICBsZXQgZXJyT2JqID0gaHR0cFJlc3BvbnNlLmRhdGE7XHJcblxyXG4gIGlmICghZXJyT2JqKSB7XHJcbiAgICBlcnIubWVzc2FnZSA9IGh0dHBSZXNwb25zZS5lcnJvciAmJiBodHRwUmVzcG9uc2UuZXJyb3IudG9TdHJpbmcoKTtcclxuICAgIHJldHVybiBlcnI7XHJcbiAgfVxyXG5cclxuICAvLyBzb21lIGFqYXggcHJvdmlkZXJzIHdpbGwgY29udmVydCBlcnJhbnQgcmVzdWx0IGludG8gYW4gb2JqZWN0IChhbmd1bGFyanMpLCBvdGhlcnMgd2lsbCBub3QgKGpRdWVyeSlcclxuICAvLyBpZiBub3QgZG8gaXQgaGVyZS5cclxuICBpZiAodHlwZW9mIGVyck9iaiA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgdHJ5IHtcclxuICAgICAgZXJyT2JqID0gSlNPTi5wYXJzZShlcnJPYmopO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyBzb21ldGltZXMgaHR0cFJlc3BvbnNlLmRhdGEgaXMganVzdCB0aGUgZXJyb3IgbWVzc2FnZSBpdHNlbGZcclxuICAgICAgZXJyLm1lc3NhZ2UgPSBlcnJPYmo7XHJcbiAgICAgIHJldHVybiBlcnI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsZXQgc2F2ZUNvbnRleHQgPSBodHRwUmVzcG9uc2Uuc2F2ZUNvbnRleHQ7XHJcblxyXG4gIC8vIGlmIGFueSBvZiB0aGUgZm9sbG93IHByb3BlcnRpZXMgZXhpc3QgdGhlIHNvdXJjZSBpcyAuTkVUXHJcbiAgbGV0IHRtcCA9IGVyck9iai5NZXNzYWdlIHx8IGVyck9iai5FeGNlcHRpb25NZXNzYWdlIHx8IGVyck9iai5FbnRpdHlFcnJvcnMgfHwgZXJyT2JqLkVycm9ycztcclxuICBsZXQgaXNEb3ROZXQgPSAhIXRtcDtcclxuICBsZXQgbWVzc2FnZTogc3RyaW5nLCBlbnRpdHlFcnJvcnM6IGFueVtdO1xyXG4gIGlmICghaXNEb3ROZXQpIHtcclxuICAgIG1lc3NhZ2UgPSBlcnJPYmoubWVzc2FnZTtcclxuICAgIGVudGl0eUVycm9ycyA9IGVyck9iai5lcnJvcnMgfHwgZXJyT2JqLmVudGl0eUVycm9ycztcclxuICB9IGVsc2Uge1xyXG4gICAgbGV0IHRtcCA9IGVyck9iajtcclxuICAgIGRvIHtcclxuICAgICAgLy8gLk5FVCBleGNlcHRpb25zIGNhbiBwcm92aWRlIGJvdGggRXhjZXB0aW9uTWVzc2FnZSBhbmQgTWVzc2FnZSBidXQgRXhjZXB0aW9uTWV0aG9kIGlmIGl0XHJcbiAgICAgIC8vIGV4aXN0cyBoYXMgYSBtb3JlIGRldGFpbGVkIG1lc3NhZ2UuXHJcbiAgICAgIG1lc3NhZ2UgPSB0bXAuRXhjZXB0aW9uTWVzc2FnZSB8fCB0bXAuTWVzc2FnZTtcclxuICAgICAgdG1wID0gdG1wLklubmVyRXhjZXB0aW9uO1xyXG4gICAgfSB3aGlsZSAodG1wKTtcclxuICAgIC8vIC5FbnRpdHlFcnJvcnMgd2lsbCBvbmx5IG9jY3VyIGFzIGEgcmVzdWx0IG9mIGFuIEVudGl0eUVycm9yc0V4Y2VwdGlvbiBiZWluZyBkZWxpYmVyYXRlbHkgdGhyb3duIG9uIHRoZSBzZXJ2ZXJcclxuICAgIGVudGl0eUVycm9ycyA9IGVyck9iai5FcnJvcnMgfHwgZXJyT2JqLkVudGl0eUVycm9ycztcclxuICAgIGVudGl0eUVycm9ycyA9IGVudGl0eUVycm9ycyAmJiBlbnRpdHlFcnJvcnMubWFwKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZXJyb3JOYW1lOiBlLkVycm9yTmFtZSxcclxuICAgICAgICBlbnRpdHlUeXBlTmFtZTogTWV0YWRhdGFTdG9yZS5ub3JtYWxpemVUeXBlTmFtZShlLkVudGl0eVR5cGVOYW1lKSxcclxuICAgICAgICBrZXlWYWx1ZXM6IGUuS2V5VmFsdWVzLFxyXG4gICAgICAgIHByb3BlcnR5TmFtZTogZS5Qcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgZXJyb3JNZXNzYWdlOiBlLkVycm9yTWVzc2FnZSxcclxuICAgICAgICBjdXN0b206IGUuQ3VzdG9tXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGlmIChzYXZlQ29udGV4dCAmJiBlbnRpdHlFcnJvcnMpIHtcclxuXHJcbiAgICBsZXQgcHJvcE5hbWVGbiA9IHNhdmVDb250ZXh0LmVudGl0eU1hbmFnZXIubWV0YWRhdGFTdG9yZS5uYW1pbmdDb252ZW50aW9uLnNlcnZlclByb3BlcnR5TmFtZVRvQ2xpZW50O1xyXG4gICAgZW50aXR5RXJyb3JzLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcclxuICAgICAgZS5wcm9wZXJ0eU5hbWUgPSBlLnByb3BlcnR5TmFtZSAmJiBwcm9wTmFtZUZuKGUucHJvcGVydHlOYW1lKTtcclxuICAgIH0pO1xyXG4gICAgKGVyciBhcyBTYXZlRXJyb3JGcm9tU2VydmVyKS5lbnRpdHlFcnJvcnMgPSBlbnRpdHlFcnJvcnM7XHJcbiAgfVxyXG5cclxuICBlcnIubWVzc2FnZSA9IG1lc3NhZ2UgfHwgXCJTZXJ2ZXIgc2lkZSBlcnJvcnMgZW5jb3VudGVyZWQgLSBzZWUgdGhlIGVudGl0eUVycm9ycyBjb2xsZWN0aW9uIG9uIHRoaXMgb2JqZWN0IGZvciBtb3JlIGRldGFpbFwiO1xyXG4gIHJldHVybiBlcnI7XHJcbn1cclxuXHJcblxyXG4vKiogVGhpcyBpcyBhIGRlZmF1bHQsIG5vLW9wIGltcGxlbWVudGF0aW9uIHRoYXQgZGV2ZWxvcGVycyBjYW4gcmVwbGFjZS4gKi9cclxuY2xhc3MgRGVmYXVsdENoYW5nZVJlcXVlc3RJbnRlcmNlcHRvciB7XHJcbiAgY29uc3RydWN0b3Ioc2F2ZUNvbnRleHQ6IFNhdmVDb250ZXh0LCBzYXZlQnVuZGxlOiBTYXZlQnVuZGxlKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0UmVxdWVzdChyZXF1ZXN0OiBhbnksIGVudGl0eTogRW50aXR5LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gcmVxdWVzdDtcclxuICB9XHJcblxyXG4gIGRvbmUocmVxdWVzdHM6IE9iamVjdFtdKSB7XHJcbiAgfVxyXG59XHJcbiJdfQ==