@smarterplan/ngx-smarterplan-core 1.4.21 → 1.4.22

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 (114) hide show
  1. package/README.md +24 -24
  2. package/esm2022/lib/components/csv-export/csv-export.component.mjs +3 -3
  3. package/esm2022/lib/components/loader/loader.component.mjs +3 -3
  4. package/esm2022/lib/components/menu-bar/avatar/avatar.component.mjs +1 -1
  5. package/esm2022/lib/components/menu-bar/menu-bar.component.mjs +3 -3
  6. package/esm2022/lib/components/menu-bar/navigation-bar/navigation-bar.component.mjs +3 -3
  7. package/esm2022/lib/components/modal-switch-visit/modal-switch-visit.component.mjs +3 -3
  8. package/esm2022/lib/components/search-bar/search-bar.component.mjs +3 -3
  9. package/esm2022/lib/components/splat-viewer/splat-viewer.component.mjs +361 -0
  10. package/esm2022/lib/components/support-modal/support-modal.component.mjs +3 -3
  11. package/esm2022/lib/config.mjs +1 -1
  12. package/esm2022/lib/helpers.service.mjs +1 -1
  13. package/esm2022/lib/matterport-extensions/nest-thermostat/CanvasImage.mjs +1 -1
  14. package/esm2022/lib/matterport-extensions/nest-thermostat/CanvasRenderer.mjs +1 -1
  15. package/esm2022/lib/matterport-extensions/nest-thermostat/NestThermostat.mjs +1 -1
  16. package/esm2022/lib/matterport-extensions/nest-thermostat/PlaneRenderer.mjs +1 -1
  17. package/esm2022/lib/matterport-extensions/scene-component/SceneComponent.mjs +1 -1
  18. package/esm2022/lib/matterport-extensions/security-camera/SecurityCamera.mjs +22 -22
  19. package/esm2022/lib/matterport-extensions/tv-player/TvPlayer.mjs +1 -1
  20. package/esm2022/lib/matterport-extensions/view-frustum-mesh/ViewFrustumMesh.mjs +22 -22
  21. package/esm2022/lib/mattertagData.mjs +1 -1
  22. package/esm2022/lib/ngx-smarterplan-core.module.mjs +9 -4
  23. package/esm2022/lib/ngx-smarterplan-core.service.mjs +1 -1
  24. package/esm2022/lib/pipes/duration-to-string.pipe.mjs +1 -1
  25. package/esm2022/lib/pipes/format-date-number-to-digits.pipe.mjs +1 -1
  26. package/esm2022/lib/pipes/hashtag-from-id.pipe.mjs +1 -1
  27. package/esm2022/lib/pipes/safe-url.pipe.mjs +1 -1
  28. package/esm2022/lib/pipes/time-date-to-local-string.pipe.mjs +1 -1
  29. package/esm2022/lib/pipes/username-from-id.pipe.mjs +1 -1
  30. package/esm2022/lib/services/amplify-cache.service.mjs +1 -1
  31. package/esm2022/lib/services/base-tab.service.mjs +1 -1
  32. package/esm2022/lib/services/baseVisibility.service.mjs +1 -1
  33. package/esm2022/lib/services/content.service.mjs +1 -1
  34. package/esm2022/lib/services/filter.service.mjs +1 -1
  35. package/esm2022/lib/services/intervention.service.mjs +1 -1
  36. package/esm2022/lib/services/locale.service.mjs +1 -1
  37. package/esm2022/lib/services/matterport-import.service.mjs +1 -1
  38. package/esm2022/lib/services/matterport-measurement.service.mjs +1 -1
  39. package/esm2022/lib/services/matterport-navigation.service.mjs +1 -1
  40. package/esm2022/lib/services/matterport-pointer.service.mjs +6 -6
  41. package/esm2022/lib/services/matterport-tag-copy.service.mjs +1 -1
  42. package/esm2022/lib/services/matterport-tag.service.mjs +12 -7
  43. package/esm2022/lib/services/matterport.service.mjs +17 -17
  44. package/esm2022/lib/services/models/affectation.service.mjs +1 -1
  45. package/esm2022/lib/services/models/base-object.service.mjs +1 -1
  46. package/esm2022/lib/services/models/capture.service.mjs +1 -1
  47. package/esm2022/lib/services/models/comment.service.mjs +1 -1
  48. package/esm2022/lib/services/models/domain.service.mjs +1 -1
  49. package/esm2022/lib/services/models/equipment.service.mjs +1 -1
  50. package/esm2022/lib/services/models/event.service.mjs +1 -1
  51. package/esm2022/lib/services/models/feature.service.mjs +1 -1
  52. package/esm2022/lib/services/models/hashtag.service.mjs +1 -1
  53. package/esm2022/lib/services/models/layer.service.mjs +1 -1
  54. package/esm2022/lib/services/models/measurement.service.mjs +1 -1
  55. package/esm2022/lib/services/models/mission.service.mjs +1 -1
  56. package/esm2022/lib/services/models/navigation.service.mjs +1 -1
  57. package/esm2022/lib/services/models/node.service.mjs +1 -1
  58. package/esm2022/lib/services/models/object3D.service.mjs +1 -1
  59. package/esm2022/lib/services/models/operation.service.mjs +1 -1
  60. package/esm2022/lib/services/models/organisation.service.mjs +1 -1
  61. package/esm2022/lib/services/models/plan.service.mjs +1 -1
  62. package/esm2022/lib/services/models/poi.service.mjs +27 -27
  63. package/esm2022/lib/services/models/profile.service.mjs +1 -1
  64. package/esm2022/lib/services/models/property.service.mjs +1 -1
  65. package/esm2022/lib/services/models/space.service.mjs +1 -1
  66. package/esm2022/lib/services/models/template.service.mjs +1 -1
  67. package/esm2022/lib/services/models/ticket.service.mjs +1 -1
  68. package/esm2022/lib/services/models/visit.service.mjs +1 -1
  69. package/esm2022/lib/services/models/zone.service.mjs +1 -1
  70. package/esm2022/lib/services/navigator.service.mjs +1 -1
  71. package/esm2022/lib/services/obj-to-glb.mjs +649 -0
  72. package/esm2022/lib/services/s3.service.mjs +43 -3
  73. package/esm2022/lib/services/search.service.mjs +1 -1
  74. package/esm2022/lib/services/support.service.mjs +1 -1
  75. package/esm2022/lib/services/sweep-locator.service.mjs +1 -1
  76. package/esm2022/lib/services/tag.service.mjs +16 -16
  77. package/esm2022/lib/services/threejs-import.service.mjs +6 -4
  78. package/esm2022/lib/services/threejs.service.mjs +867 -95
  79. package/esm2022/lib/services/user.service.mjs +1 -1
  80. package/esm2022/lib/services/utils/matterport-transform.util.mjs +1 -1
  81. package/esm2022/lib/services/validators.service.mjs +1 -1
  82. package/esm2022/lib/services/viewer.service.mjs +189 -7
  83. package/esm2022/lib/services/zone-drawer.service.mjs +1 -1
  84. package/esm2022/lib/services/zoneChange.service.mjs +1 -1
  85. package/esm2022/lib/tokens/matterport-sdk-key.token.mjs +1 -1
  86. package/esm2022/lib/validators/email.directive.mjs +1 -1
  87. package/esm2022/lib/validators/no-empty.directive.mjs +1 -1
  88. package/esm2022/lib/validators/number.directive.mjs +1 -1
  89. package/esm2022/lib/validators/text.directive.mjs +1 -1
  90. package/esm2022/public-api.mjs +3 -1
  91. package/fesm2022/smarterplan-ngx-smarterplan-core.mjs +2239 -233
  92. package/fesm2022/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
  93. package/lib/components/splat-viewer/splat-viewer.component.d.ts +98 -0
  94. package/lib/ngx-smarterplan-core.module.d.ts +7 -6
  95. package/lib/services/matterport-tag.service.d.ts +5 -5
  96. package/lib/services/obj-to-glb.d.ts +66 -0
  97. package/lib/services/s3.service.d.ts +7 -0
  98. package/lib/services/threejs.service.d.ts +336 -16
  99. package/lib/services/viewer.service.d.ts +110 -8
  100. package/package.json +1 -1
  101. package/public-api.d.ts +2 -0
  102. package/src/assets/viewers/splat/chunk-BYLI4YBI.js +17037 -0
  103. package/src/assets/viewers/splat/chunk-LDV6YPMG.js +1 -0
  104. package/src/assets/viewers/splat/chunk-WZ5Z4TU3.js +105719 -0
  105. package/src/assets/viewers/splat/convert-4DRLH77X.js +1 -0
  106. package/src/assets/viewers/splat/convert.html +11 -0
  107. package/src/assets/viewers/splat/converter-SLBB5MHG.js +1 -0
  108. package/src/assets/viewers/splat/index.html +90 -0
  109. package/src/assets/viewers/splat/spz-DEYRea_v-QE6YSGIB.js +5292 -0
  110. package/src/assets/viewers/splat/viewer-W4X3FWQJ.js +2704 -0
  111. package/src/assets/viewers/splat/viewer.css +1096 -0
  112. package/src/assets/viewers/splat/webp.wasm +0 -0
  113. package/src/assets/viewers/splat/worker.mjs +1383 -0
  114. package/src/assets/vs-app.json +67 -67
@@ -474,4 +474,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
474
474
  type: Inject,
475
475
  args: [MATTERPORT_SDK_KEY]
476
476
  }] }, { type: i1.NavigationService }, { type: i2.ZoneService }, { type: i3.ViewerService }, { type: i4.LayerService }, { type: i5.BaseUserService }, { type: i6.PlanService }] });
477
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvbWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0UsT0FBTyxFQUNMLFdBQVcsR0FNWixNQUFNLGtCQUFrQixDQUFDO0FBSzFCLE9BQU8sRUFDTCxjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLDBCQUEwQixFQUMxQixpQkFBaUIsR0FDbEIsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7O0FBYXRCLE1BQU0sT0FBTyx1QkFBdUI7SUF3Q2E7SUFDckM7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBN0NGLFlBQVksQ0FBQztJQUVkLEdBQUcsQ0FBTTtJQUVSLE1BQU0sQ0FBUztJQUVoQixNQUFNLENBQVM7SUFFZCxZQUFZLENBQUM7SUFFYixRQUFRLENBQVM7SUFFakIsUUFBUSxDQUFTO0lBRXpCLElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQVcsT0FBTyxDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQVcsT0FBTyxDQUFD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QUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztRQUM1QyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsNkJBQTZCLENBQ2xFLElBQUksRUFDSixZQUFZLENBQ2IsQ0FBQztRQUNGLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0QixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMxRSxDQUFDO3dHQTNqQlUsdUJBQXVCLGtCQXdDeEIsa0JBQWtCOzRHQXhDakIsdUJBQXVCLGNBRnRCLE1BQU07OzRGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQXlDSSxNQUFNOzJCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNQVRURVJQT1JUX1NES19LRVkgfSBmcm9tICcuLi90b2tlbnMvbWF0dGVycG9ydC1zZGsta2V5LnRva2VuJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyByZW1vdmVOdWxsS2V5c0Zyb21PYmplY3QsIHdhaXQsIHdhaXRVbnRpbCB9IGZyb20gJy4uL2hlbHBlcnMuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgTGV2ZWxTdGF0dXMsXHJcbiAgTGF5ZXIsXHJcbiAgTm9kZSxcclxuICBab25lLFxyXG4gIE5hdmlnYXRpb24sXHJcbiAgUGxhbixcclxufSBmcm9tICcuLi90eXBlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi9tb2RlbHMvbGF5ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9tb2RlbHMvbmF2aWdhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGxhblNlcnZpY2UgfSBmcm9tICcuL21vZGVscy9wbGFuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBab25lU2VydmljZSB9IGZyb20gJy4vbW9kZWxzL3pvbmUuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgdXBsb2FkSnNvblRvUzMsXHJcbiAgdXBsb2FkQmFzZTY0SW1hZ2UsXHJcbiAgdXBsb2FkQmFzZTY0SW1hZ2VXaXRoUmV0cnksXHJcbiAgbGlzdEZpbGVzSW5Gb2xkZXIsXHJcbn0gZnJvbSAnLi9zMy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZVVzZXJTZXJ2aWNlIH0gZnJvbSAnLi91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWaWV3ZXJTZXJ2aWNlIH0gZnJvbSAnLi92aWV3ZXIuc2VydmljZSc7XHJcblxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XHJcbiAgICBNUF9TREs6IHsgY29ubmVjdDogRnVuY3Rpb24gfTtcclxuICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXR0ZXJwb3J0SW1wb3J0U2VydmljZSB7XHJcbiAgcHJpdmF0ZSBjdXJyZW50RnJhbWU7XHJcblxyXG4gIHB1YmxpYyBzZGs6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBzd2VlcHM6IE9iamVjdDtcclxuXHJcbiAgcHVibGljIGZsb29yczogT2JqZWN0O1xyXG5cclxuICBwcml2YXRlIGN1cnJlbnRGbG9vcjtcclxuXHJcbiAgcHJpdmF0ZSBfbW9kZWxJRDogc3RyaW5nO1xyXG5cclxuICBwcml2YXRlIF9zcGFjZUlEOiBzdHJpbmc7XHJcblxyXG4gIHB1YmxpYyBnZXQgc3BhY2VJRCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NwYWNlSUQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNwYWNlSUQodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fc3BhY2VJRCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBtb2RlbElEKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZWxJRDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgbW9kZWxJRCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9tb2RlbElEID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RvcCA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgaW1wb3J0aW5nSW1hZ2VzOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcbiAgcHVibGljIHN3ZWVwUHJvY2Vzc2VkQ291bnQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcclxuXHJcbiAgcHVibGljIHRvdGFsU3dlZXBzQ291bnQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KE1BVFRFUlBPUlRfU0RLX0tFWSkgcHJpdmF0ZSByZWFkb25seSBzZGtLZXk6IHN0cmluZyxcclxuICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB6b25lU2VydmljZTogWm9uZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHZpZXdlclNlcnZpY2U6IFZpZXdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxheWVyU2VydmljZTogTGF5ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwbGFuU2VydmljZTogUGxhblNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbml0U2RrRm9yTW9kZWwobW9kZWxJRDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLnN0b3AgPSBmYWxzZTtcclxuICAgIC8vIFRoaXMgc2VydmljZSBpcyBhIHNpbmdsZXRvbjogd2l0aG91dCBhIHJlc2V0LCB0aGUgcmVhZGluZXNzIHdhaXQgYmVsb3cgd2FzIHNhdGlzZmllZCBhdFxyXG4gICAgLy8gb25jZSBieSB0aGUgc3dlZXBzL2Zsb29ycyBvZiB0aGUgUFJFVklPVVMgaW1wb3J0LCBhbmQgdGhlIG5ldyBpbXBvcnQgcmFuIG9uIHN0YWxlIGRhdGEuXHJcbiAgICB0aGlzLnN3ZWVwcyA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZmxvb3JzID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5jdXJyZW50Rmxvb3IgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgLy8gTG9hZCBTREtcclxuICAgIGNvbnNvbGUubG9nKCdMb2FkaW5nIE1hdHRlcnBvcnQgU0RLJyk7XHJcbiAgICB0aGlzLm1vZGVsSUQgPSBtb2RlbElEO1xyXG4gICAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XHJcbiAgICBpZiAoIWlmcmFtZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjcmVhdGUgaWZyYW1lJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnZpZXdlclNlcnZpY2Uuc2V0VG91clVybCh7IG1vZGVsM2Q6IG1vZGVsSUQgfSk7XHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLnZpZXdlclNlcnZpY2UuZ2V0VG91clVybCgpO1xyXG4gICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgnc3JjJywgdXJsKTtcclxuICAgIGlmcmFtZS5hbGxvdyA9ICd4ci1zcGF0aWFsLXRyYWNraW5nJztcclxuICAgIGlmcmFtZS5oZWlnaHQgPSAnMTAwJSc7XHJcbiAgICBpZnJhbWUud2lkdGggPSAnMTAwJSc7XHJcbiAgICBpZnJhbWUuaWQgPSAndmlld2VyLW1vZHVsZSc7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3ZpZXdlci1mcmFtZScpO1xyXG4gICAgZWxlbWVudC5hcHBlbmQoaWZyYW1lKTtcclxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaWZyYW1lO1xyXG4gICAgY29uc3Qgc2hvd2Nhc2VXaW5kb3cgPSBpZnJhbWUuY29udGVudFdpbmRvdztcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcclxuICAgICAgaWZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgJ2xvYWQnLFxyXG4gICAgICAgIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrID0gYXdhaXQgc2hvd2Nhc2VXaW5kb3cuTVBfU0RLLmNvbm5lY3QoXHJcbiAgICAgICAgICAgICAgaWZyYW1lLFxyXG4gICAgICAgICAgICAgIHRoaXMuc2RrS2V5LFxyXG4gICAgICAgICAgICAgICcnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLkZsb29yLmRhdGEuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiB1cGQoY29sbGVjdGlvbjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZsb29ycyA9IGNvbGxlY3Rpb247XHJcbiAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5zZGsuRmxvb3IuY3VycmVudC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgZnVuY3Rpb24gdXBkKGN1cnJlbnRGbG9vcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rmxvb3IgPSBjdXJyZW50Rmxvb3I7XHJcbiAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNkay5Td2VlcC5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgb25Db2xsZWN0aW9uVXBkYXRlZDogZnVuY3Rpb24gdXBkKGNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd0aGUgZW50aXJlIHVwLXRvLWRhdGUgY29sbGVjdGlvbicsIGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zd2VlcHMgPSBjb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLlNldHRpbmdzLnVwZGF0ZSgnbGFiZWxzJywgZmFsc2UpO1xyXG4gICAgICAgICAgICAvLyBUaGUgc2hvd2Nhc2UgY2FuIHRha2Ugd2VsbCBvdmVyIDcgcyB0byBwdWJsaXNoIGl0cyBzd2VlcHMgb24gYSBzbG93IGNvbm5lY3Rpb24uXHJcbiAgICAgICAgICAgIGxldCB0aW1lb3V0RXhwaXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+ICh0aW1lb3V0RXhwaXJlZCA9IHRydWUpLCAyMDAwMCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHdhaXRVbnRpbChcclxuICAgICAgICAgICAgICAoKSA9PlxyXG4gICAgICAgICAgICAgICAgKHRoaXMuc3dlZXBzICE9PSB1bmRlZmluZWQgJiYgdGhpcy5mbG9vcnMgIT09IHVuZGVmaW5lZCkgfHxcclxuICAgICAgICAgICAgICAgIHRpbWVvdXRFeHBpcmVkID09PSB0cnVlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmICh0aW1lb3V0RXhwaXJlZCkge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd0aW1lb3V0IGludGl0aWFsaXNpbmcgTWF0dGVycG9ydCcpO1xyXG4gICAgICAgICAgICAgIHJldHVybiByZWoobmV3IEVycm9yKCdlcnJvciBpbml0IE1hdHRlcnBvcnQnKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2luaXQgZG9uZScpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzKHRydWUpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICByZWoobmV3IEVycm9yKCdlcnJvciBpbml0IE1hdHRlcnBvcnQnKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGltcG9ydERhdGEoXHJcbiAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICBzdXJmYWNlOiBudW1iZXIsXHJcbiAgICByZWxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgIG5vZGU6IE5vZGUgPSBudWxsLFxyXG4gICAgb3ZlcnJpZGVFeGlzdGluZyA9IHRydWVcclxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmICghdGhpcy5zd2VlcHMpIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignbm8gc3dlZXBzIGluaXRpYWxpemVkJykpO1xyXG4gICAgfVxyXG4gICAgbGV0IGFwcElzTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zZGsuQXBwLnN0YXRlLnN1YnNjcmliZShmdW5jdGlvbiAoYXBwU3RhdGUpIHtcclxuICAgICAgY29uc29sZS5sb2coJ1RoZSBjdXJyZW50IHBoYXNlOiAnLCBhcHBTdGF0ZS5waGFzZSk7XHJcbiAgICAgIGlmIChhcHBTdGF0ZS5waGFzZSA9PT0gJ2FwcHBoYXNlLnBsYXlpbmcnKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1RoZSBhcHAgaXMgcGxheWluZycpO1xyXG4gICAgICAgIGFwcElzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgYXdhaXQgd2FpdFVudGlsKCgpID0+IGFwcElzTG9hZGVkID09PSB0cnVlKTtcclxuXHJcbiAgICBpZiAocmVsb2FkaW5nKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuaW1wb3J0MzYwaW1hZ2VzKG92ZXJyaWRlRXhpc3RpbmcpO1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3BhY2VJRCA9IHNwYWNlSUQ7XHJcbiAgICBsZXQgZmxvb3Jab25lczogWm9uZVtdID0gW107XHJcbiAgICBjb25zdCB6b25lcyA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuZ2V0Wm9uZXNCeVNwYWNlKHNwYWNlSUQpO1xyXG4gICAgY29uc3QgbWFpblpvbmUgPSB6b25lcy5maW5kKCh6KSA9PiAhei5wYXJlbnRJRCk7XHJcbiAgICBpZiAoIW1haW5ab25lKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ21pc3NpbmcgZGF0YSAobm8gbWFpbiBCdWlsZGluZyBab25lKScpKTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKCdpbXBvcnRpbmcgZGF0YSBmcm9tIG1hdHRlcnBvcnQnKTtcclxuICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShPYmplY3QudmFsdWVzKHRoaXMuc3dlZXBzKSk7XHJcbiAgICBhd2FpdCB1cGxvYWRKc29uVG9TMyhcclxuICAgICAgYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vaW52ZW50b3J5L2AsXHJcbiAgICAgIGpzb24sXHJcbiAgICAgICdkYXRhLmpzb24nXHJcbiAgICApO1xyXG4gICAgY29uc3QgbGF5ZXJCdWlsZGluZyA9IGF3YWl0IHRoaXMuZ2V0TGF5ZXJCeU5hbWUoJ0JVSUxESU5HJyk7XHJcbiAgICBjb25zdCBjcmVhdGVkRGVmYXVsdFpvbmUgPSBhd2FpdCB0aGlzLmNyZWF0ZVpvbmUoXHJcbiAgICAgIG5vZGUubWV0YWRhdGEsXHJcbiAgICAgIGxheWVyQnVpbGRpbmcuaWQsXHJcbiAgICAgIHN1cmZhY2UsXHJcbiAgICAgIG1haW5ab25lLmlkLFxyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnN3ZWVwcyksXHJcbiAgICAgIG5vZGVcclxuICAgICk7XHJcbiAgICBpZiAoIWNyZWF0ZWREZWZhdWx0Wm9uZSkge1xyXG4gICAgICAvLyBOb3RoaW5nIGVsc2UgY2FuIGJlIGltcG9ydGVkIHdpdGhvdXQgdGhpcyB6b25lOiBmYWlsIGxvdWRseSBpbnN0ZWFkIG9mIFwic3VjY2VlZGluZ1wiXHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ3RoZSB6b25lIG9mIHRoZSB2aXNpdCBjb3VsZCBub3QgYmUgY3JlYXRlZCcpKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZsb29ycykge1xyXG4gICAgICBmbG9vclpvbmVzID0gYXdhaXQgdGhpcy5pbXBvcnRGbG9vckRhdGEoY3JlYXRlZERlZmF1bHRab25lLmlkLCBub2RlKTtcclxuICAgIH1cclxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnN3ZWVwcykubWFwKGFzeW5jIChrZXkpID0+IHtcclxuICAgICAgICBjb25zdCBzd2VlcEluZm8gPSB0aGlzLnN3ZWVwc1trZXldO1xyXG4gICAgICAgIGNvbnN0IG5hdmlnYXRpb25JbnB1dCA9IHtcclxuICAgICAgICAgIG1hdHRlcnBvcnRTd2VlcElEOiBzd2VlcEluZm8udXVpZCxcclxuICAgICAgICAgIHBvc2l0aW9uOiBKU09OLnN0cmluZ2lmeShzd2VlcEluZm8ucG9zaXRpb24pLFxyXG4gICAgICAgICAgcm90YXRpb246IEpTT04uc3RyaW5naWZ5KHN3ZWVwSW5mby5yb3RhdGlvbiksXHJcbiAgICAgICAgICBsZXZlbDogTGV2ZWxTdGF0dXMuTE9XLFxyXG4gICAgICAgICAgbm9kZUlEOiBub2RlLmlkLFxyXG4gICAgICAgICAgc3BhY2VJRCxcclxuICAgICAgICB9IGFzIE5hdmlnYXRpb247XHJcbiAgICAgICAgY29uc3QgbmF2ID0gYXdhaXQgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jcmVhdGVOYXZpZ2F0aW9uKFxyXG4gICAgICAgICAgbmF2aWdhdGlvbklucHV0XHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIW5hdikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ2NvdWxkIGNyZWF0ZSBuYXZpZ2F0aW9uJywgbmF2aWdhdGlvbklucHV0LmlkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgYXdhaXQgdGhpcy5pbXBvcnQzNjBpbWFnZXMob3ZlcnJpZGVFeGlzdGluZyk7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY3JlYXRlWm9uZShcclxuICAgIG5hbWU6IHN0cmluZyxcclxuICAgIGxheWVySUQ6IHN0cmluZyxcclxuICAgIHN1cmZhY2U6IG51bWJlciA9IG51bGwsXHJcbiAgICBwYXJlbnRJRDogc3RyaW5nID0gbnVsbCxcclxuICAgIHN3ZWVwczogc3RyaW5nW10gPSBbXSxcclxuICAgIG5vZGU6IE5vZGUgPSBudWxsLFxyXG4gICAgbWV0YWRhdGE6IHN0cmluZyA9IG51bGxcclxuICApOiBQcm9taXNlPFpvbmU+IHtcclxuICAgIGNvbnN0IHpvbmVJbnB1dCA9IHtcclxuICAgICAgbmFtZSxcclxuICAgICAgc3BhY2VJRDogdGhpcy5zcGFjZUlELFxyXG4gICAgICBsYXllcklELFxyXG4gICAgICBzd2VlcElEczogc3dlZXBzLFxyXG4gICAgICBub2RlSURzOiBub2RlID8gW25vZGUuaWRdIDogbnVsbCxcclxuICAgIH0gYXMgWm9uZTtcclxuICAgIHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdCh6b25lSW5wdXQpO1xyXG4gICAgaWYgKHN1cmZhY2UpIHtcclxuICAgICAgem9uZUlucHV0LnN1cmZhY2UgPSBzdXJmYWNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHBhcmVudElEKSB7XHJcbiAgICAgIHpvbmVJbnB1dC5wYXJlbnRJRCA9IHBhcmVudElEO1xyXG4gICAgfVxyXG4gICAgaWYgKG1ldGFkYXRhKSB7XHJcbiAgICAgIHpvbmVJbnB1dC5tZXRhZGF0YSA9IG1ldGFkYXRhO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbmV3TG9jYWwgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmNyZWF0ZSh6b25lSW5wdXQpO1xyXG4gICAgcmV0dXJuIG5ld0xvY2FsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaW1wb3J0MzYwaW1hZ2VzKG92ZXJyaWRlRXhpc3RpbmcgPSB0cnVlKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zb2xlLmxvZygnSW1wb3J0aW5nIDM2MCBpbWFnZXMnKTtcclxuICAgIHRoaXMuaW1wb3J0aW5nSW1hZ2VzLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNjYW5zID0gT2JqZWN0LnZhbHVlcyh0aGlzLnN3ZWVwcyk7XHJcbiAgICAgIGNvbnN0IG5tYlNjYW5zID0gc2NhbnMubGVuZ3RoO1xyXG5cclxuICAgICAgdGhpcy50b3RhbFN3ZWVwc0NvdW50Lm5leHQobm1iU2NhbnMpO1xyXG5cclxuICAgICAgY29uc3Qgc3RhcnQgPSBvdmVycmlkZUV4aXN0aW5nID8gMCA6IGF3YWl0IHRoaXMuZ2V0VXBsb2FkZWRJbWFnZUNvdW50KHRoaXMubW9kZWxJRCk7XHJcblxyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IHN0YXJ0OyBpbmRleCA8IG5tYlNjYW5zOyBpbmRleCArPSAxKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnN0b3ApIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdBYmFuZG9uaW5nIGltcG9ydCBiZWNhdXNlIGl0IHdhcyBjYW5jZWxsZWQnKTtcclxuICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVGcmFtZSgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzd2VlcCA9IHNjYW5zW2luZGV4XTtcclxuICAgICAgICBjb25zb2xlLmxvZygnTW92aW5nIHRvIHN3ZWVwOicsIHN3ZWVwKTtcclxuXHJcbiAgICAgICAgY29uc3QgbW92ZUlkID0gc3dlZXAuaWQgfHwgc3dlZXAudXVpZCB8fCBzd2VlcC5zaWQ7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnNkay5Td2VlcC5tb3ZlVG8obW92ZUlkLCB7XHJcbiAgICAgICAgICAgIHJvdGF0aW9uOiB7IHg6IDAsIHk6IDAgfSxcclxuICAgICAgICAgICAgdHJhbnNpdGlvbjogdGhpcy5zZGsuQ2FtZXJhICYmIHRoaXMuc2RrLkNhbWVyYS5UcmFuc2l0aW9uVHlwZVxyXG4gICAgICAgICAgICAgID8gdGhpcy5zZGsuQ2FtZXJhLlRyYW5zaXRpb25UeXBlLklOU1RBTlRcclxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdHJhbnNpdGlvblRpbWU6IDAsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBjb25zdCBpbWcgPSBhd2FpdCB0aGlzLmNhcHR1cmVFcXVpcmVjdGFuZ3VsYXJXaXRoUmV0cnkoXHJcbiAgICAgICAgICAgIHsgd2lkdGg6IDIwNDgsIGhlaWdodDogMTAyNCB9LFxyXG4gICAgICAgICAgICB7IG1hdHRlcnRhZ3M6IGZhbHNlLCBzd2VlcHM6IHRydWUgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIG1heEF0dGVtcHRzOiAzLFxyXG4gICAgICAgICAgICAgIGluaXRpYWxCYWNrb2ZmTXM6IDUwMCxcclxuICAgICAgICAgICAgICBwZXJBdHRlbXB0VGltZW91dE1zOiA4MDAwLFxyXG4gICAgICAgICAgICAgIHN3ZWVwSWRGb3JSZWFkeUNoZWNrOiBtb3ZlSWQsXHJcbiAgICAgICAgICAgICAgd2FpdEZvclN3ZWVwVGltZW91dE1zOiAxMjAwMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIHVwbG9hZEJhc2U2NEltYWdlV2l0aFJldHJ5KFxyXG4gICAgICAgICAgICBpbWcsXHJcbiAgICAgICAgICAgIHN3ZWVwLnV1aWQgfHwgbW92ZUlkLFxyXG4gICAgICAgICAgICBgdmlzaXRzLyR7dGhpcy5tb2RlbElEfS9zd2VlcHMvYCxcclxuICAgICAgICAgICAgJ3N3ZWVwJyxcclxuICAgICAgICAgICAgNVxyXG4gICAgICAgICAgKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zd2VlcFByb2Nlc3NlZENvdW50Lm5leHQoaW5kZXgpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IG5tYlNjYW5zIC0gMSkge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdJbXBvcnQgMzYwIGRvbmUnKTtcclxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJhbWUoKTtcclxuICAgICAgICAgICAgICB0aGlzLnN0b3AgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVycm9yIHVwbG9hZGluZyBzY2FuIDogXCIsIGUpO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNhcHR1cmUgc3dlZXAgJHttb3ZlSWR9IGFmdGVyIHJldHJpZXM6YCwgZXJyKTtcclxuICAgICAgICAgIHRoaXMuc3dlZXBQcm9jZXNzZWRDb3VudC5uZXh0KGluZGV4KTtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgdGhpcy5yZW1vdmVGcmFtZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjYXB0dXJlRXF1aXJlY3Rhbmd1bGFyV2l0aFJldHJ5KG9wdGlvbnMsIHJlbmRlck9wdGlvbnMsIHtcclxuICAgIG1heEF0dGVtcHRzID0gMyxcclxuICAgIGluaXRpYWxCYWNrb2ZmTXMgPSA1MDAsXHJcbiAgICBwZXJBdHRlbXB0VGltZW91dE1zID0gODAwMCxcclxuICAgIHN3ZWVwSWRGb3JSZWFkeUNoZWNrID0gbnVsbCxcclxuICAgIHdhaXRGb3JTd2VlcFRpbWVvdXRNcyA9IDEyMDAwXHJcbiAgfSA9IHt9KSB7XHJcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XHJcbiAgICBsZXQgbGFzdEVycm9yID0gbnVsbDtcclxuXHJcbiAgICB3aGlsZSAoYXR0ZW1wdCA8IG1heEF0dGVtcHRzKSB7XHJcbiAgICAgIGF0dGVtcHQgKz0gMTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAoc3dlZXBJZEZvclJlYWR5Q2hlY2spIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMud2FpdEZvclN3ZWVwUmVhZHkoc3dlZXBJZEZvclJlYWR5Q2hlY2ssIHdhaXRGb3JTd2VlcFRpbWVvdXRNcyk7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnNsZWVwKDEyMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpbWcgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xyXG4gICAgICAgICAgdGhpcy5zZGsuUmVuZGVyZXIudGFrZUVxdWlyZWN0YW5ndWxhcihvcHRpb25zLCByZW5kZXJPcHRpb25zKSxcclxuICAgICAgICAgIHRoaXMudGltZW91dFByb21pc2UocGVyQXR0ZW1wdFRpbWVvdXRNcywgYHRha2VFcXVpcmVjdGFuZ3VsYXIgdGltZWQgb3V0IGFmdGVyICR7cGVyQXR0ZW1wdFRpbWVvdXRNc31tc2ApXHJcbiAgICAgICAgXSk7XHJcblxyXG4gICAgICAgIHJldHVybiBpbWc7XHJcbiAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGxhc3RFcnJvciA9IGVycjtcclxuICAgICAgICBjb25zb2xlLndhcm4oYHRha2VFcXVpcmVjdGFuZ3VsYXIgYXR0ZW1wdCAke2F0dGVtcHR9IGZhaWxlZDpgLCBlcnIpO1xyXG5cclxuICAgICAgICBpZiAoYXR0ZW1wdCA+PSBtYXhBdHRlbXB0cykge1xyXG4gICAgICAgICAgdGhyb3cgbGFzdEVycm9yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYmFja29mZiA9IGluaXRpYWxCYWNrb2ZmTXMgKiBNYXRoLnBvdygyLCBhdHRlbXB0IC0gMSk7XHJcbiAgICAgICAgY29uc3Qgaml0dGVyID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwKTtcclxuICAgICAgICBhd2FpdCB0aGlzLnNsZWVwKGJhY2tvZmYgKyBqaXR0ZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhyb3cgbGFzdEVycm9yIHx8IG5ldyBFcnJvcignY2FwdHVyZUVxdWlyZWN0YW5ndWxhcldpdGhSZXRyeSBmYWlsZWQgd2l0aG91dCBlcnJvcicpO1xyXG4gIH1cclxuXHJcbiAgd2FpdEZvclN3ZWVwUmVhZHkodGFyZ2V0SWQ6IHN0cmluZywgdGltZW91dE1zID0gMTAwMDApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHNkayA9IHRoaXMuc2RrO1xyXG5cclxuICAgIGNvbnN0IG1hdGNoZXNUYXJnZXQgPSAoZGF0YSkgPT4ge1xyXG4gICAgICBpZiAoIWRhdGEpIHJldHVybiBmYWxzZTtcclxuICAgICAgY29uc3QgZmllbGRzID0gW2RhdGEuaWQsIGRhdGEudXVpZCwgZGF0YS5zaWQsIGRhdGEudWlkXTtcclxuICAgICAgcmV0dXJuIGZpZWxkcy5zb21lKGYgPT4gISFmICYmIFN0cmluZyhmKSA9PT0gU3RyaW5nKHRhcmdldElkKSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChzZGsuU3dlZXAgJiYgc2RrLlN3ZWVwLmN1cnJlbnQgJiYgdHlwZW9mIHNkay5Td2VlcC5jdXJyZW50LndhaXRVbnRpbCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtcclxuICAgICAgICBzZGsuU3dlZXAuY3VycmVudC53YWl0VW50aWwoKGRhdGEpID0+IG1hdGNoZXNUYXJnZXQoZGF0YSkpLFxyXG4gICAgICAgIHRoaXMudGltZW91dFByb21pc2UodGltZW91dE1zLCBgVGltZW91dCB3YWl0aW5nIGZvciBzd2VlcCAke3RhcmdldElkfWApXHJcbiAgICAgIF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZGsuU3dlZXAgJiYgc2RrLlN3ZWVwLmN1cnJlbnQgJiYgdHlwZW9mIHNkay5Td2VlcC5jdXJyZW50LnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAob2ZmKSBvZmYoKTtcclxuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFRpbWVvdXQgd2FpdGluZyBmb3Igc3dlZXAgJHt0YXJnZXRJZH1gKSk7XHJcbiAgICAgICAgfSwgdGltZW91dE1zKTtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IG51bGw7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IHN1YlJlc3VsdCA9IHNkay5Td2VlcC5jdXJyZW50LnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobWF0Y2hlc1RhcmdldChkYXRhKSkge1xyXG4gICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgdHJ5IHsgaWYgKHR5cGVvZiBzdWJSZXN1bHQgPT09ICdmdW5jdGlvbicpIHN1YlJlc3VsdCgpOyBlbHNlIGlmIChzdWJSZXN1bHQgJiYgdHlwZW9mIHN1YlJlc3VsdC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgc3ViUmVzdWx0LnVuc3Vic2NyaWJlKCk7IH0gY2F0Y2ggKGUpIHsvKmlnbm9yZSovIH1cclxuICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBzdWJSZXN1bHQgPT09ICdmdW5jdGlvbicpIG9mZiA9IHN1YlJlc3VsdDtcclxuICAgICAgICAgIGVsc2UgaWYgKHN1YlJlc3VsdCAmJiB0eXBlb2Ygc3ViUmVzdWx0LnVuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSBvZmYgPSAoKSA9PiBzdWJSZXN1bHQudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xyXG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignc2RrLlN3ZWVwLmN1cnJlbnQuc3Vic2NyaWJlIG5vdCB1c2FibGUnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCBwb2xsSW50ZXJ2YWwgPSAyMDA7XHJcbiAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XHJcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgVGltZW91dCB3YWl0aW5nIGZvciBzd2VlcCAke3RhcmdldElkfWApKTtcclxuICAgICAgfSwgdGltZW91dE1zKTtcclxuXHJcbiAgICAgIGNvbnN0IGNoZWNrTm93ID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBsZXQgY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICBpZiAoc2RrLlN3ZWVwICYmIHR5cGVvZiBzZGsuU3dlZXAuZ2V0Q3VycmVudCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBjdXJyZW50ID0gYXdhaXQgc2RrLlN3ZWVwLmdldEN1cnJlbnQoKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoc2RrLlN3ZWVwICYmIHR5cGVvZiBzZGsuU3dlZXAuY3VycmVudCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBjdXJyZW50ID0gYXdhaXQgc2RrLlN3ZWVwLmN1cnJlbnQoKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoc2RrLlN3ZWVwICYmIHNkay5Td2VlcC5jdXJyZW50ICYmIHNkay5Td2VlcC5jdXJyZW50LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnQgPSBzZGsuU3dlZXAuY3VycmVudC52YWx1ZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAobWF0Y2hlc1RhcmdldChjdXJyZW50KSkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xyXG4gICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIC8vIGlnbm9yZSBhbmQgcmV0cnkgdW50aWwgdGltZW91dFxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIGF3YWl0IGNoZWNrTm93KCk7XHJcbiAgICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoY2hlY2tOb3csIHBvbGxJbnRlcnZhbCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXMgPT4gc2V0VGltZW91dChyZXMsIG1zKSk7XHJcbiAgfVxyXG5cclxuICB0aW1lb3V0UHJvbWlzZShtczogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPG5ldmVyPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKG1lc3NhZ2UpKSwgbXMpKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFVwbG9hZGVkSW1hZ2VDb3VudChtb2RlbElEKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBpbWFnZXMgPSBhd2FpdCBsaXN0RmlsZXNJbkZvbGRlcihgdmlzaXRzLyR7bW9kZWxJRH0vc3dlZXBzL2ApO1xyXG4gICAgICByZXR1cm4gaW1hZ2VzLmxlbmd0aDtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBtb3ZlVG9GbG9vcihmbG9vck5hbWU6IHN0cmluZywgbWF0dGVycG9ydEZsb29yU2VxdWVuY2U6IG51bWJlciA9IG51bGwpIHtcclxuICAgIGlmICghdGhpcy5mbG9vcnMpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0Zsb29yIGFyZSBub3QgbG9hZGVkIHlldCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgZmxvb3JNYXR0ZXJwb3J0ID0gT2JqZWN0LnZhbHVlcyh0aGlzLmZsb29ycykuZmluZChcclxuICAgICAgKGZsb29yKSA9PiBmbG9vci5zZXF1ZW5jZSA9PT0gbWF0dGVycG9ydEZsb29yU2VxdWVuY2VcclxuICAgICk7XHJcbiAgICBpZiAoIWZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICBmbG9vck1hdHRlcnBvcnQgPSBPYmplY3QudmFsdWVzKHRoaXMuZmxvb3JzKS5maW5kKFxyXG4gICAgICAgIChmbG9vcikgPT4gZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLm5hbWUpICYmIGZsb29yLm5hbWUgIT0gJydcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICghZmxvb3JNYXR0ZXJwb3J0KSB7XHJcbiAgICAgIGZsb29yTWF0dGVycG9ydCA9IE9iamVjdC52YWx1ZXModGhpcy5mbG9vcnMpLmZpbmQoKGZsb29yKSA9PlxyXG4gICAgICAgIGZsb29yTmFtZS5pbmNsdWRlcyhmbG9vci5pZClcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChmbG9vck1hdHRlcnBvcnQpIHtcclxuICAgICAgbGV0IHJldHJ5ID0gdHJ1ZTtcclxuICAgICAgd2hpbGUgKHJldHJ5KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IGZsb29ySW5kZXggPSBhd2FpdCB0aGlzLnNkay5GbG9vci5tb3ZlVG8oXHJcbiAgICAgICAgICAgIGZsb29yTWF0dGVycG9ydC5zZXF1ZW5jZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJldHJ5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdDYW5ub3QgbW92ZSB0byBGbG9vcicsIGVycm9yKTtcclxuICAgICAgICAgIGF3YWl0IHdhaXQoMTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignTm8gbWF0dGVycG9ydCBmbG9vciBmb3VuZCB0byBtb3ZlIHRvJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaW1wb3J0Rmxvb3JEYXRhKFxyXG4gICAgZGVmYXV0Wm9uZUlEOiBzdHJpbmcsXHJcbiAgICBub2RlOiBOb2RlXHJcbiAgKTogUHJvbWlzZTxab25lW10+IHtcclxuICAgIGNvbnN0IHpvbmVzID0gW107XHJcbiAgICBhd2FpdCB0aGlzLnNkay5Nb2RlLm1vdmVUbyh0aGlzLnNkay5Nb2RlLk1vZGUuRkxPT1JQTEFOKTtcclxuICAgIGNvbnN0IG5tYkZsb29ycyA9IE9iamVjdC5rZXlzKHRoaXMuZmxvb3JzKS5sZW5ndGg7XHJcbiAgICBjb25zb2xlLmxvZygnVG90YWwgbnVtYmVyIG9mIGZsb29ycycsIG5tYkZsb29ycyk7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbm1iRmxvb3JzOyBpbmRleCArPSAxKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdJbXBvcnRpbmcgZmxvb3InLCBpbmRleCk7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2RrLkZsb29yLm1vdmVUbyhpbmRleCkudGhlbihhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgYXdhaXQgd2FpdCg3MDApO1xyXG4gICAgICAgIGNvbnN0IHpvbmUgPSBhd2FpdCB0aGlzLnNhdmVGbG9vcihkZWZhdXRab25lSUQsIG5vZGUpO1xyXG4gICAgICAgIHpvbmVzLnB1c2goem9uZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh6b25lcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNhdmVGbG9vcihkZWZhdXRab25lSUQ6IHN0cmluZywgbm9kZTogTm9kZSk6IFByb21pc2U8Wm9uZT4ge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLmN1cnJlbnRGbG9vci5pZDtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRGbG9vci5uYW1lICE9PSAnJykge1xyXG4gICAgICBuYW1lID0gdGhpcy5jdXJyZW50Rmxvb3IubmFtZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxheWVyRmxvb3IgPSBhd2FpdCB0aGlzLmdldExheWVyQnlOYW1lKCdGTE9PUicpO1xyXG4gICAgY29uc3Qgc3dlZXBzSW5mbyA9IE9iamVjdC52YWx1ZXModGhpcy5zd2VlcHMpO1xyXG4gICAgY29uc3Qgc3dlZXBzRm9yRmxvb3IgPSBzd2VlcHNJbmZvLmZpbHRlcihcclxuICAgICAgKHN3ZWVwSW5mbykgPT4gc3dlZXBJbmZvLmZsb29ySW5mby5pZCA9PT0gdGhpcy5jdXJyZW50Rmxvb3IuaWRcclxuICAgICk7XHJcbiAgICBjb25zb2xlLmxvZygnY3VycmVudCBmbG9vcicsIHRoaXMuY3VycmVudEZsb29yKTtcclxuICAgIGNvbnNvbGUubG9nKCdzd2VlcHMgZm9yIGZsb29yJywgc3dlZXBzRm9yRmxvb3IubGVuZ3RoKTtcclxuICAgIGNvbnN0IHN3ZWVwSURzOiBzdHJpbmdbXSA9IHN3ZWVwc0ZvckZsb29yLm1hcCgoc3dlZXApID0+IHN3ZWVwLnV1aWQpO1xyXG4gICAgY29uc3Qgem9uZSA9IGF3YWl0IHRoaXMuY3JlYXRlWm9uZShcclxuICAgICAgYMOJdGFnZSAke25hbWV9IC0gJHtub2RlLm1ldGFkYXRhfWAsXHJcbiAgICAgIGxheWVyRmxvb3IuaWQsXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIGRlZmF1dFpvbmVJRCxcclxuICAgICAgc3dlZXBJRHMsXHJcbiAgICAgIG5vZGUsXHJcbiAgICAgIEpTT04uc3RyaW5naWZ5KHsgbWF0dGVycG9ydEZsb29yU2VxdWVuY2U6IHRoaXMuY3VycmVudEZsb29yLnNlcXVlbmNlIH0pXHJcbiAgICApO1xyXG4gICAgY29uc3QgYmFzZTY0ID0gYXdhaXQgdGhpcy5zZGsuUmVuZGVyZXIudGFrZVNjcmVlblNob3Qoe1xyXG4gICAgICB3aWR0aDogNDA5NixcclxuICAgICAgaGVpZ2h0OiAyMDQ4LFxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBzcGFjZUlEc2hvcnQgPSB0aGlzLnNwYWNlSUQuc2xpY2UoMCwgOCk7XHJcbiAgICBhd2FpdCB1cGxvYWRCYXNlNjRJbWFnZShcclxuICAgICAgYmFzZTY0LFxyXG4gICAgICBudWxsLFxyXG4gICAgICBgdmlzaXRzLyR7dGhpcy5tb2RlbElEfS9wbGFucy9gLFxyXG4gICAgICBgcGxhbl9mbG9vcl8ke3RoaXMuY3VycmVudEZsb29yLmlkfV8ke3NwYWNlSURzaG9ydH1gXHJcbiAgICApO1xyXG4gICAgY29uc3QgcGxhbiA9IHtcclxuICAgICAgbmFtZTogYHBsYW5fZmxvb3JfJHt0aGlzLmN1cnJlbnRGbG9vci5pZH1gLFxyXG4gICAgICBhbm5leGU6IGB2aXNpdHMvJHt0aGlzLm1vZGVsSUR9L3BsYW5zL3BsYW5fZmxvb3JfJHt0aGlzLmN1cnJlbnRGbG9vci5pZH1fJHtzcGFjZUlEc2hvcnR9LmpwZWdgLFxyXG4gICAgICB6b25lSUQ6IHpvbmUuaWQsXHJcbiAgICAgIHNwYWNlSUQ6IHRoaXMuc3BhY2VJRCxcclxuICAgICAgaXNDdXJyZW50Rm9yWm9uZTogdHJ1ZSxcclxuICAgICAgaXNNb2RpZmllZDogZmFsc2UsXHJcbiAgICAgIGlzSW1wb3J0ZWRNYXR0ZXJwb3J0OiB0cnVlLFxyXG4gICAgfSBhcyBQbGFuO1xyXG4gICAgYXdhaXQgdGhpcy5wbGFuU2VydmljZS5jcmVhdGVQbGFuKHBsYW4pO1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh6b25lKTtcclxuICB9XHJcblxyXG4gIGFiYW5kb24oKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ2FiYW5kb25uaW5nIGltcG9ydCcpO1xyXG4gICAgICB0aGlzLnN0b3AgPSB0cnVlO1xyXG4gICAgICB0aGlzLnJlbW92ZUZyYW1lKCk7XHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRnJhbWUoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50RnJhbWUpIHtcclxuICAgICAgdGhpcy5jdXJyZW50RnJhbWUucmVtb3ZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRMYXllckJ5TmFtZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPExheWVyPiB7XHJcbiAgICBjb25zdCBtaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbih0aGlzLnNwYWNlSUQpO1xyXG4gICAgY29uc3QgY3VycmVudE9yZ0lkID0gbWlzc2lvbi5vcmdhbmlzYXRpb25JRDtcclxuICAgIGNvbnN0IGxheWVycyA9IGF3YWl0IHRoaXMubGF5ZXJTZXJ2aWNlLmdldExheWVyQnlOYW1lRm9yT3JnYW5pc2F0aW9uKFxyXG4gICAgICBuYW1lLFxyXG4gICAgICBjdXJyZW50T3JnSWRcclxuICAgICk7XHJcbiAgICBpZiAobGF5ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIGxheWVyc1swXTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmxheWVyU2VydmljZS5jcmVhdGVMYXllckZvck9yZ2FuaXNhdGlvbihuYW1lLCBjdXJyZW50T3JnSWQpO1xyXG4gIH1cclxufSJdfQ==
477
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvbWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0UsT0FBTyxFQUNMLFdBQVcsR0FNWixNQUFNLGtCQUFrQixDQUFDO0FBSzFCLE9BQU8sRUFDTCxjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLDBCQUEwQixFQUMxQixpQkFBaUIsR0FDbEIsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7O0FBYXRCLE1BQU0sT0FBTyx1QkFBdUI7SUF3Q2E7SUFDckM7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBN0NGLFlBQVksQ0FBQztJQUVkLEdBQUcsQ0FBTTtJQUVSLE1BQU0sQ0FBUztJQUVoQixNQUFNLENBQVM7SUFFZCxZQUFZLENBQUM7SUFFYixRQUFRLENBQVM7SUFFakIsUUFBUSxDQUFTO0lBRXpCLElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQVcsT0FBTyxDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQVcsT0FBTyxDQUFD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QUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztRQUM1QyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsNkJBQTZCLENBQ2xFLElBQUksRUFDSixZQUFZLENBQ2IsQ0FBQztRQUNGLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0QixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMxRSxDQUFDO3dHQTNqQlUsdUJBQXVCLGtCQXdDeEIsa0JBQWtCOzRHQXhDakIsdUJBQXVCLGNBRnRCLE1BQU07OzRGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQXlDSSxNQUFNOzJCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTUFUVEVSUE9SVF9TREtfS0VZIH0gZnJvbSAnLi4vdG9rZW5zL21hdHRlcnBvcnQtc2RrLWtleS50b2tlbic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyByZW1vdmVOdWxsS2V5c0Zyb21PYmplY3QsIHdhaXQsIHdhaXRVbnRpbCB9IGZyb20gJy4uL2hlbHBlcnMuc2VydmljZSc7XG5pbXBvcnQge1xuICBMZXZlbFN0YXR1cyxcbiAgTGF5ZXIsXG4gIE5vZGUsXG4gIFpvbmUsXG4gIE5hdmlnYXRpb24sXG4gIFBsYW4sXG59IGZyb20gJy4uL3R5cGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi9tb2RlbHMvbGF5ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vbW9kZWxzL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBQbGFuU2VydmljZSB9IGZyb20gJy4vbW9kZWxzL3BsYW4uc2VydmljZSc7XG5pbXBvcnQgeyBab25lU2VydmljZSB9IGZyb20gJy4vbW9kZWxzL3pvbmUuc2VydmljZSc7XG5pbXBvcnQge1xuICB1cGxvYWRKc29uVG9TMyxcbiAgdXBsb2FkQmFzZTY0SW1hZ2UsXG4gIHVwbG9hZEJhc2U2NEltYWdlV2l0aFJldHJ5LFxuICBsaXN0RmlsZXNJbkZvbGRlcixcbn0gZnJvbSAnLi9zMy5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gJy4vdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFZpZXdlclNlcnZpY2UgfSBmcm9tICcuL3ZpZXdlci5zZXJ2aWNlJztcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBNUF9TREs6IHsgY29ubmVjdDogRnVuY3Rpb24gfTtcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTWF0dGVycG9ydEltcG9ydFNlcnZpY2Uge1xuICBwcml2YXRlIGN1cnJlbnRGcmFtZTtcblxuICBwdWJsaWMgc2RrOiBhbnk7XG5cbiAgcHJpdmF0ZSBzd2VlcHM6IE9iamVjdDtcblxuICBwdWJsaWMgZmxvb3JzOiBPYmplY3Q7XG5cbiAgcHJpdmF0ZSBjdXJyZW50Rmxvb3I7XG5cbiAgcHJpdmF0ZSBfbW9kZWxJRDogc3RyaW5nO1xuXG4gIHByaXZhdGUgX3NwYWNlSUQ6IHN0cmluZztcblxuICBwdWJsaWMgZ2V0IHNwYWNlSUQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3BhY2VJRDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgc3BhY2VJRCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fc3BhY2VJRCA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBtb2RlbElEKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX21vZGVsSUQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IG1vZGVsSUQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX21vZGVsSUQgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzdG9wID0gZmFsc2U7XG5cbiAgcHVibGljIGltcG9ydGluZ0ltYWdlczogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgcHVibGljIHN3ZWVwUHJvY2Vzc2VkQ291bnQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcblxuICBwdWJsaWMgdG90YWxTd2VlcHNDb3VudDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoTUFUVEVSUE9SVF9TREtfS0VZKSBwcml2YXRlIHJlYWRvbmx5IHNka0tleTogc3RyaW5nLFxuICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgem9uZVNlcnZpY2U6IFpvbmVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdmlld2VyU2VydmljZTogVmlld2VyU2VydmljZSxcbiAgICBwcml2YXRlIGxheWVyU2VydmljZTogTGF5ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IEJhc2VVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIHBsYW5TZXJ2aWNlOiBQbGFuU2VydmljZSxcbiAgKSB7XG4gIH1cblxuICBhc3luYyBpbml0U2RrRm9yTW9kZWwobW9kZWxJRDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy5zdG9wID0gZmFsc2U7XG4gICAgLy8gVGhpcyBzZXJ2aWNlIGlzIGEgc2luZ2xldG9uOiB3aXRob3V0IGEgcmVzZXQsIHRoZSByZWFkaW5lc3Mgd2FpdCBiZWxvdyB3YXMgc2F0aXNmaWVkIGF0XG4gICAgLy8gb25jZSBieSB0aGUgc3dlZXBzL2Zsb29ycyBvZiB0aGUgUFJFVklPVVMgaW1wb3J0LCBhbmQgdGhlIG5ldyBpbXBvcnQgcmFuIG9uIHN0YWxlIGRhdGEuXG4gICAgdGhpcy5zd2VlcHMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5mbG9vcnMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jdXJyZW50Rmxvb3IgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBMb2FkIFNES1xuICAgIGNvbnNvbGUubG9nKCdMb2FkaW5nIE1hdHRlcnBvcnQgU0RLJyk7XG4gICAgdGhpcy5tb2RlbElEID0gbW9kZWxJRDtcbiAgICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgICBpZiAoIWlmcmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIGlmcmFtZScpO1xuICAgIH1cbiAgICB0aGlzLnZpZXdlclNlcnZpY2Uuc2V0VG91clVybCh7IG1vZGVsM2Q6IG1vZGVsSUQgfSk7XG4gICAgY29uc3QgdXJsID0gdGhpcy52aWV3ZXJTZXJ2aWNlLmdldFRvdXJVcmwoKTtcbiAgICBpZnJhbWUuc2V0QXR0cmlidXRlKCdzcmMnLCB1cmwpO1xuICAgIGlmcmFtZS5hbGxvdyA9ICd4ci1zcGF0aWFsLXRyYWNraW5nJztcbiAgICBpZnJhbWUuaGVpZ2h0ID0gJzEwMCUnO1xuICAgIGlmcmFtZS53aWR0aCA9ICcxMDAlJztcbiAgICBpZnJhbWUuaWQgPSAndmlld2VyLW1vZHVsZSc7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN2aWV3ZXItZnJhbWUnKTtcbiAgICBlbGVtZW50LmFwcGVuZChpZnJhbWUpO1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaWZyYW1lO1xuICAgIGNvbnN0IHNob3djYXNlV2luZG93ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3c7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgaWZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdsb2FkJyxcbiAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnNkayA9IGF3YWl0IHNob3djYXNlV2luZG93Lk1QX1NESy5jb25uZWN0KFxuICAgICAgICAgICAgICBpZnJhbWUsXG4gICAgICAgICAgICAgIHRoaXMuc2RrS2V5LFxuICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc2RrLkZsb29yLmRhdGEuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgb25Db2xsZWN0aW9uVXBkYXRlZDogZnVuY3Rpb24gdXBkKGNvbGxlY3Rpb246IGFueSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JzID0gY29sbGVjdGlvbjtcbiAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNkay5GbG9vci5jdXJyZW50LnN1YnNjcmliZShcbiAgICAgICAgICAgICAgZnVuY3Rpb24gdXBkKGN1cnJlbnRGbG9vcikge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZsb29yID0gY3VycmVudEZsb29yO1xuICAgICAgICAgICAgICB9LmJpbmQodGhpcylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuc2RrLlN3ZWVwLmRhdGEuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgb25Db2xsZWN0aW9uVXBkYXRlZDogZnVuY3Rpb24gdXBkKGNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygndGhlIGVudGlyZSB1cC10by1kYXRlIGNvbGxlY3Rpb24nLCBjb2xsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN3ZWVwcyA9IGNvbGxlY3Rpb247XG4gICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuU2V0dGluZ3MudXBkYXRlKCdsYWJlbHMnLCBmYWxzZSk7XG4gICAgICAgICAgICAvLyBUaGUgc2hvd2Nhc2UgY2FuIHRha2Ugd2VsbCBvdmVyIDcgcyB0byBwdWJsaXNoIGl0cyBzd2VlcHMgb24gYSBzbG93IGNvbm5lY3Rpb24uXG4gICAgICAgICAgICBsZXQgdGltZW91dEV4cGlyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gKHRpbWVvdXRFeHBpcmVkID0gdHJ1ZSksIDIwMDAwKTtcbiAgICAgICAgICAgIGF3YWl0IHdhaXRVbnRpbChcbiAgICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgICAodGhpcy5zd2VlcHMgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmZsb29ycyAhPT0gdW5kZWZpbmVkKSB8fFxuICAgICAgICAgICAgICAgIHRpbWVvdXRFeHBpcmVkID09PSB0cnVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHRpbWVvdXRFeHBpcmVkKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd0aW1lb3V0IGludGl0aWFsaXNpbmcgTWF0dGVycG9ydCcpO1xuICAgICAgICAgICAgICByZXR1cm4gcmVqKG5ldyBFcnJvcignZXJyb3IgaW5pdCBNYXR0ZXJwb3J0JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2luaXQgZG9uZScpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcyh0cnVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgcmVqKG5ldyBFcnJvcignZXJyb3IgaW5pdCBNYXR0ZXJwb3J0JykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBpbXBvcnREYXRhKFxuICAgIHNwYWNlSUQ6IHN0cmluZyxcbiAgICBzdXJmYWNlOiBudW1iZXIsXG4gICAgcmVsb2FkaW5nOiBib29sZWFuID0gZmFsc2UsXG4gICAgbm9kZTogTm9kZSA9IG51bGwsXG4gICAgb3ZlcnJpZGVFeGlzdGluZyA9IHRydWVcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLnN3ZWVwcykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignbm8gc3dlZXBzIGluaXRpYWxpemVkJykpO1xuICAgIH1cbiAgICBsZXQgYXBwSXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuc2RrLkFwcC5zdGF0ZS5zdWJzY3JpYmUoZnVuY3Rpb24gKGFwcFN0YXRlKSB7XG4gICAgICBjb25zb2xlLmxvZygnVGhlIGN1cnJlbnQgcGhhc2U6ICcsIGFwcFN0YXRlLnBoYXNlKTtcbiAgICAgIGlmIChhcHBTdGF0ZS5waGFzZSA9PT0gJ2FwcHBoYXNlLnBsYXlpbmcnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdUaGUgYXBwIGlzIHBsYXlpbmcnKTtcbiAgICAgICAgYXBwSXNMb2FkZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYXdhaXQgd2FpdFVudGlsKCgpID0+IGFwcElzTG9hZGVkID09PSB0cnVlKTtcblxuICAgIGlmIChyZWxvYWRpbmcpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW1wb3J0MzYwaW1hZ2VzKG92ZXJyaWRlRXhpc3RpbmcpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcbiAgICB9XG5cbiAgICB0aGlzLnNwYWNlSUQgPSBzcGFjZUlEO1xuICAgIGxldCBmbG9vclpvbmVzOiBab25lW10gPSBbXTtcbiAgICBjb25zdCB6b25lcyA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuZ2V0Wm9uZXNCeVNwYWNlKHNwYWNlSUQpO1xuICAgIGNvbnN0IG1haW5ab25lID0gem9uZXMuZmluZCgoeikgPT4gIXoucGFyZW50SUQpO1xuICAgIGlmICghbWFpblpvbmUpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ21pc3NpbmcgZGF0YSAobm8gbWFpbiBCdWlsZGluZyBab25lKScpKTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coJ2ltcG9ydGluZyBkYXRhIGZyb20gbWF0dGVycG9ydCcpO1xuICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShPYmplY3QudmFsdWVzKHRoaXMuc3dlZXBzKSk7XG4gICAgYXdhaXQgdXBsb2FkSnNvblRvUzMoXG4gICAgICBgdmlzaXRzLyR7dGhpcy5tb2RlbElEfS9pbnZlbnRvcnkvYCxcbiAgICAgIGpzb24sXG4gICAgICAnZGF0YS5qc29uJ1xuICAgICk7XG4gICAgY29uc3QgbGF5ZXJCdWlsZGluZyA9IGF3YWl0IHRoaXMuZ2V0TGF5ZXJCeU5hbWUoJ0JVSUxESU5HJyk7XG4gICAgY29uc3QgY3JlYXRlZERlZmF1bHRab25lID0gYXdhaXQgdGhpcy5jcmVhdGVab25lKFxuICAgICAgbm9kZS5tZXRhZGF0YSxcbiAgICAgIGxheWVyQnVpbGRpbmcuaWQsXG4gICAgICBzdXJmYWNlLFxuICAgICAgbWFpblpvbmUuaWQsXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnN3ZWVwcyksXG4gICAgICBub2RlXG4gICAgKTtcbiAgICBpZiAoIWNyZWF0ZWREZWZhdWx0Wm9uZSkge1xuICAgICAgLy8gTm90aGluZyBlbHNlIGNhbiBiZSBpbXBvcnRlZCB3aXRob3V0IHRoaXMgem9uZTogZmFpbCBsb3VkbHkgaW5zdGVhZCBvZiBcInN1Y2NlZWRpbmdcIlxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigndGhlIHpvbmUgb2YgdGhlIHZpc2l0IGNvdWxkIG5vdCBiZSBjcmVhdGVkJykpO1xuICAgIH1cbiAgICBpZiAodGhpcy5mbG9vcnMpIHtcbiAgICAgIGZsb29yWm9uZXMgPSBhd2FpdCB0aGlzLmltcG9ydEZsb29yRGF0YShjcmVhdGVkRGVmYXVsdFpvbmUuaWQsIG5vZGUpO1xuICAgIH1cbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuc3dlZXBzKS5tYXAoYXN5bmMgKGtleSkgPT4ge1xuICAgICAgICBjb25zdCBzd2VlcEluZm8gPSB0aGlzLnN3ZWVwc1trZXldO1xuICAgICAgICBjb25zdCBuYXZpZ2F0aW9uSW5wdXQgPSB7XG4gICAgICAgICAgbWF0dGVycG9ydFN3ZWVwSUQ6IHN3ZWVwSW5mby51dWlkLFxuICAgICAgICAgIHBvc2l0aW9uOiBKU09OLnN0cmluZ2lmeShzd2VlcEluZm8ucG9zaXRpb24pLFxuICAgICAgICAgIHJvdGF0aW9uOiBKU09OLnN0cmluZ2lmeShzd2VlcEluZm8ucm90YXRpb24pLFxuICAgICAgICAgIGxldmVsOiBMZXZlbFN0YXR1cy5MT1csXG4gICAgICAgICAgbm9kZUlEOiBub2RlLmlkLFxuICAgICAgICAgIHNwYWNlSUQsXG4gICAgICAgIH0gYXMgTmF2aWdhdGlvbjtcbiAgICAgICAgY29uc3QgbmF2ID0gYXdhaXQgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jcmVhdGVOYXZpZ2F0aW9uKFxuICAgICAgICAgIG5hdmlnYXRpb25JbnB1dFxuICAgICAgICApO1xuICAgICAgICBpZiAoIW5hdikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdjb3VsZCBjcmVhdGUgbmF2aWdhdGlvbicsIG5hdmlnYXRpb25JbnB1dC5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLmltcG9ydDM2MGltYWdlcyhvdmVycmlkZUV4aXN0aW5nKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlWm9uZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbGF5ZXJJRDogc3RyaW5nLFxuICAgIHN1cmZhY2U6IG51bWJlciA9IG51bGwsXG4gICAgcGFyZW50SUQ6IHN0cmluZyA9IG51bGwsXG4gICAgc3dlZXBzOiBzdHJpbmdbXSA9IFtdLFxuICAgIG5vZGU6IE5vZGUgPSBudWxsLFxuICAgIG1ldGFkYXRhOiBzdHJpbmcgPSBudWxsXG4gICk6IFByb21pc2U8Wm9uZT4ge1xuICAgIGNvbnN0IHpvbmVJbnB1dCA9IHtcbiAgICAgIG5hbWUsXG4gICAgICBzcGFjZUlEOiB0aGlzLnNwYWNlSUQsXG4gICAgICBsYXllcklELFxuICAgICAgc3dlZXBJRHM6IHN3ZWVwcyxcbiAgICAgIG5vZGVJRHM6IG5vZGUgPyBbbm9kZS5pZF0gOiBudWxsLFxuICAgIH0gYXMgWm9uZTtcbiAgICByZW1vdmVOdWxsS2V5c0Zyb21PYmplY3Qoem9uZUlucHV0KTtcbiAgICBpZiAoc3VyZmFjZSkge1xuICAgICAgem9uZUlucHV0LnN1cmZhY2UgPSBzdXJmYWNlO1xuICAgIH1cbiAgICBpZiAocGFyZW50SUQpIHtcbiAgICAgIHpvbmVJbnB1dC5wYXJlbnRJRCA9IHBhcmVudElEO1xuICAgIH1cbiAgICBpZiAobWV0YWRhdGEpIHtcbiAgICAgIHpvbmVJbnB1dC5tZXRhZGF0YSA9IG1ldGFkYXRhO1xuICAgIH1cbiAgICBjb25zdCBuZXdMb2NhbCA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuY3JlYXRlKHpvbmVJbnB1dCk7XG4gICAgcmV0dXJuIG5ld0xvY2FsO1xuICB9XG5cbiAgYXN5bmMgaW1wb3J0MzYwaW1hZ2VzKG92ZXJyaWRlRXhpc3RpbmcgPSB0cnVlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc29sZS5sb2coJ0ltcG9ydGluZyAzNjAgaW1hZ2VzJyk7XG4gICAgdGhpcy5pbXBvcnRpbmdJbWFnZXMubmV4dCh0cnVlKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3Qgc2NhbnMgPSBPYmplY3QudmFsdWVzKHRoaXMuc3dlZXBzKTtcbiAgICAgIGNvbnN0IG5tYlNjYW5zID0gc2NhbnMubGVuZ3RoO1xuXG4gICAgICB0aGlzLnRvdGFsU3dlZXBzQ291bnQubmV4dChubWJTY2Fucyk7XG5cbiAgICAgIGNvbnN0IHN0YXJ0ID0gb3ZlcnJpZGVFeGlzdGluZyA/IDAgOiBhd2FpdCB0aGlzLmdldFVwbG9hZGVkSW1hZ2VDb3VudCh0aGlzLm1vZGVsSUQpO1xuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IHN0YXJ0OyBpbmRleCA8IG5tYlNjYW5zOyBpbmRleCArPSAxKSB7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RvcCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdBYmFuZG9uaW5nIGltcG9ydCBiZWNhdXNlIGl0IHdhcyBjYW5jZWxsZWQnKTtcbiAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICB0aGlzLnJlbW92ZUZyYW1lKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzd2VlcCA9IHNjYW5zW2luZGV4XTtcbiAgICAgICAgY29uc29sZS5sb2coJ01vdmluZyB0byBzd2VlcDonLCBzd2VlcCk7XG5cbiAgICAgICAgY29uc3QgbW92ZUlkID0gc3dlZXAuaWQgfHwgc3dlZXAudXVpZCB8fCBzd2VlcC5zaWQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnNkay5Td2VlcC5tb3ZlVG8obW92ZUlkLCB7XG4gICAgICAgICAgICByb3RhdGlvbjogeyB4OiAwLCB5OiAwIH0sXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiB0aGlzLnNkay5DYW1lcmEgJiYgdGhpcy5zZGsuQ2FtZXJhLlRyYW5zaXRpb25UeXBlXG4gICAgICAgICAgICAgID8gdGhpcy5zZGsuQ2FtZXJhLlRyYW5zaXRpb25UeXBlLklOU1RBTlRcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0cmFuc2l0aW9uVGltZTogMCxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGltZyA9IGF3YWl0IHRoaXMuY2FwdHVyZUVxdWlyZWN0YW5ndWxhcldpdGhSZXRyeShcbiAgICAgICAgICAgIHsgd2lkdGg6IDIwNDgsIGhlaWdodDogMTAyNCB9LFxuICAgICAgICAgICAgeyBtYXR0ZXJ0YWdzOiBmYWxzZSwgc3dlZXBzOiB0cnVlIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG1heEF0dGVtcHRzOiAzLFxuICAgICAgICAgICAgICBpbml0aWFsQmFja29mZk1zOiA1MDAsXG4gICAgICAgICAgICAgIHBlckF0dGVtcHRUaW1lb3V0TXM6IDgwMDAsXG4gICAgICAgICAgICAgIHN3ZWVwSWRGb3JSZWFkeUNoZWNrOiBtb3ZlSWQsXG4gICAgICAgICAgICAgIHdhaXRGb3JTd2VlcFRpbWVvdXRNczogMTIwMDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdXBsb2FkQmFzZTY0SW1hZ2VXaXRoUmV0cnkoXG4gICAgICAgICAgICBpbWcsXG4gICAgICAgICAgICBzd2VlcC51dWlkIHx8IG1vdmVJZCxcbiAgICAgICAgICAgIGB2aXNpdHMvJHt0aGlzLm1vZGVsSUR9L3N3ZWVwcy9gLFxuICAgICAgICAgICAgJ3N3ZWVwJyxcbiAgICAgICAgICAgIDVcbiAgICAgICAgICApLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zd2VlcFByb2Nlc3NlZENvdW50Lm5leHQoaW5kZXgpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBubWJTY2FucyAtIDEpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0ltcG9ydCAzNjAgZG9uZScpO1xuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZyYW1lKCk7XG4gICAgICAgICAgICAgIHRoaXMuc3RvcCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgdXBsb2FkaW5nIHNjYW4gOiBcIiwgZSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNhcHR1cmUgc3dlZXAgJHttb3ZlSWR9IGFmdGVyIHJldHJpZXM6YCwgZXJyKTtcbiAgICAgICAgICB0aGlzLnN3ZWVwUHJvY2Vzc2VkQ291bnQubmV4dChpbmRleCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIHRoaXMucmVtb3ZlRnJhbWUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNhcHR1cmVFcXVpcmVjdGFuZ3VsYXJXaXRoUmV0cnkob3B0aW9ucywgcmVuZGVyT3B0aW9ucywge1xuICAgIG1heEF0dGVtcHRzID0gMyxcbiAgICBpbml0aWFsQmFja29mZk1zID0gNTAwLFxuICAgIHBlckF0dGVtcHRUaW1lb3V0TXMgPSA4MDAwLFxuICAgIHN3ZWVwSWRGb3JSZWFkeUNoZWNrID0gbnVsbCxcbiAgICB3YWl0Rm9yU3dlZXBUaW1lb3V0TXMgPSAxMjAwMFxuICB9ID0ge30pIHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgbGV0IGxhc3RFcnJvciA9IG51bGw7XG5cbiAgICB3aGlsZSAoYXR0ZW1wdCA8IG1heEF0dGVtcHRzKSB7XG4gICAgICBhdHRlbXB0ICs9IDE7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoc3dlZXBJZEZvclJlYWR5Q2hlY2spIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JTd2VlcFJlYWR5KHN3ZWVwSWRGb3JSZWFkeUNoZWNrLCB3YWl0Rm9yU3dlZXBUaW1lb3V0TXMpO1xuICAgICAgICAgIGF3YWl0IHRoaXMuc2xlZXAoMTIwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGltZyA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgICAgdGhpcy5zZGsuUmVuZGVyZXIudGFrZUVxdWlyZWN0YW5ndWxhcihvcHRpb25zLCByZW5kZXJPcHRpb25zKSxcbiAgICAgICAgICB0aGlzLnRpbWVvdXRQcm9taXNlKHBlckF0dGVtcHRUaW1lb3V0TXMsIGB0YWtlRXF1aXJlY3Rhbmd1bGFyIHRpbWVkIG91dCBhZnRlciAke3BlckF0dGVtcHRUaW1lb3V0TXN9bXNgKVxuICAgICAgICBdKTtcblxuICAgICAgICByZXR1cm4gaW1nO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxhc3RFcnJvciA9IGVycjtcbiAgICAgICAgY29uc29sZS53YXJuKGB0YWtlRXF1aXJlY3Rhbmd1bGFyIGF0dGVtcHQgJHthdHRlbXB0fSBmYWlsZWQ6YCwgZXJyKTtcblxuICAgICAgICBpZiAoYXR0ZW1wdCA+PSBtYXhBdHRlbXB0cykge1xuICAgICAgICAgIHRocm93IGxhc3RFcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJhY2tvZmYgPSBpbml0aWFsQmFja29mZk1zICogTWF0aC5wb3coMiwgYXR0ZW1wdCAtIDEpO1xuICAgICAgICBjb25zdCBqaXR0ZXIgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDApO1xuICAgICAgICBhd2FpdCB0aGlzLnNsZWVwKGJhY2tvZmYgKyBqaXR0ZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IGxhc3RFcnJvciB8fCBuZXcgRXJyb3IoJ2NhcHR1cmVFcXVpcmVjdGFuZ3VsYXJXaXRoUmV0cnkgZmFpbGVkIHdpdGhvdXQgZXJyb3InKTtcbiAgfVxuXG4gIHdhaXRGb3JTd2VlcFJlYWR5KHRhcmdldElkOiBzdHJpbmcsIHRpbWVvdXRNcyA9IDEwMDAwKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc2RrID0gdGhpcy5zZGs7XG5cbiAgICBjb25zdCBtYXRjaGVzVGFyZ2V0ID0gKGRhdGEpID0+IHtcbiAgICAgIGlmICghZGF0YSkgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgZmllbGRzID0gW2RhdGEuaWQsIGRhdGEudXVpZCwgZGF0YS5zaWQsIGRhdGEudWlkXTtcbiAgICAgIHJldHVybiBmaWVsZHMuc29tZShmID0+ICEhZiAmJiBTdHJpbmcoZikgPT09IFN0cmluZyh0YXJnZXRJZCkpO1xuICAgIH07XG5cbiAgICBpZiAoc2RrLlN3ZWVwICYmIHNkay5Td2VlcC5jdXJyZW50ICYmIHR5cGVvZiBzZGsuU3dlZXAuY3VycmVudC53YWl0VW50aWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJhY2UoW1xuICAgICAgICBzZGsuU3dlZXAuY3VycmVudC53YWl0VW50aWwoKGRhdGEpID0+IG1hdGNoZXNUYXJnZXQoZGF0YSkpLFxuICAgICAgICB0aGlzLnRpbWVvdXRQcm9taXNlKHRpbWVvdXRNcywgYFRpbWVvdXQgd2FpdGluZyBmb3Igc3dlZXAgJHt0YXJnZXRJZH1gKVxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgaWYgKHNkay5Td2VlcCAmJiBzZGsuU3dlZXAuY3VycmVudCAmJiB0eXBlb2Ygc2RrLlN3ZWVwLmN1cnJlbnQuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmIChvZmYpIG9mZigpO1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFRpbWVvdXQgd2FpdGluZyBmb3Igc3dlZXAgJHt0YXJnZXRJZH1gKSk7XG4gICAgICAgIH0sIHRpbWVvdXRNcyk7XG5cbiAgICAgICAgbGV0IG9mZiA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc3ViUmVzdWx0ID0gc2RrLlN3ZWVwLmN1cnJlbnQuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAobWF0Y2hlc1RhcmdldChkYXRhKSkge1xuICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgICB0cnkgeyBpZiAodHlwZW9mIHN1YlJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykgc3ViUmVzdWx0KCk7IGVsc2UgaWYgKHN1YlJlc3VsdCAmJiB0eXBlb2Ygc3ViUmVzdWx0LnVuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSBzdWJSZXN1bHQudW5zdWJzY3JpYmUoKTsgfSBjYXRjaCAoZSkgey8qaWdub3JlKi8gfVxuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBzdWJSZXN1bHQgPT09ICdmdW5jdGlvbicpIG9mZiA9IHN1YlJlc3VsdDtcbiAgICAgICAgICBlbHNlIGlmIChzdWJSZXN1bHQgJiYgdHlwZW9mIHN1YlJlc3VsdC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgb2ZmID0gKCkgPT4gc3ViUmVzdWx0LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ3Nkay5Td2VlcC5jdXJyZW50LnN1YnNjcmliZSBub3QgdXNhYmxlJykpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgcG9sbEludGVydmFsID0gMjAwO1xuICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFRpbWVvdXQgd2FpdGluZyBmb3Igc3dlZXAgJHt0YXJnZXRJZH1gKSk7XG4gICAgICB9LCB0aW1lb3V0TXMpO1xuXG4gICAgICBjb25zdCBjaGVja05vdyA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgaWYgKHNkay5Td2VlcCAmJiB0eXBlb2Ygc2RrLlN3ZWVwLmdldEN1cnJlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBhd2FpdCBzZGsuU3dlZXAuZ2V0Q3VycmVudCgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc2RrLlN3ZWVwICYmIHR5cGVvZiBzZGsuU3dlZXAuY3VycmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY3VycmVudCA9IGF3YWl0IHNkay5Td2VlcC5jdXJyZW50KCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzZGsuU3dlZXAgJiYgc2RrLlN3ZWVwLmN1cnJlbnQgJiYgc2RrLlN3ZWVwLmN1cnJlbnQudmFsdWUpIHtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBzZGsuU3dlZXAuY3VycmVudC52YWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobWF0Y2hlc1RhcmdldChjdXJyZW50KSkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGlnbm9yZSBhbmQgcmV0cnkgdW50aWwgdGltZW91dFxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBjaGVja05vdygpO1xuICAgICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChjaGVja05vdywgcG9sbEludGVydmFsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzID0+IHNldFRpbWVvdXQocmVzLCBtcykpO1xuICB9XG5cbiAgdGltZW91dFByb21pc2UobXM6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTxuZXZlcj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpLCBtcykpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VXBsb2FkZWRJbWFnZUNvdW50KG1vZGVsSUQpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaW1hZ2VzID0gYXdhaXQgbGlzdEZpbGVzSW5Gb2xkZXIoYHZpc2l0cy8ke21vZGVsSUR9L3N3ZWVwcy9gKTtcbiAgICAgIHJldHVybiBpbWFnZXMubGVuZ3RoO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG1vdmVUb0Zsb29yKGZsb29yTmFtZTogc3RyaW5nLCBtYXR0ZXJwb3J0Rmxvb3JTZXF1ZW5jZTogbnVtYmVyID0gbnVsbCkge1xuICAgIGlmICghdGhpcy5mbG9vcnMpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdGbG9vciBhcmUgbm90IGxvYWRlZCB5ZXQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGZsb29yTWF0dGVycG9ydCA9IE9iamVjdC52YWx1ZXModGhpcy5mbG9vcnMpLmZpbmQoXG4gICAgICAoZmxvb3IpID0+IGZsb29yLnNlcXVlbmNlID09PSBtYXR0ZXJwb3J0Rmxvb3JTZXF1ZW5jZVxuICAgICk7XG4gICAgaWYgKCFmbG9vck1hdHRlcnBvcnQpIHtcbiAgICAgIGZsb29yTWF0dGVycG9ydCA9IE9iamVjdC52YWx1ZXModGhpcy5mbG9vcnMpLmZpbmQoXG4gICAgICAgIChmbG9vcikgPT4gZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLm5hbWUpICYmIGZsb29yLm5hbWUgIT0gJydcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghZmxvb3JNYXR0ZXJwb3J0KSB7XG4gICAgICBmbG9vck1hdHRlcnBvcnQgPSBPYmplY3QudmFsdWVzKHRoaXMuZmxvb3JzKS5maW5kKChmbG9vcikgPT5cbiAgICAgICAgZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLmlkKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGZsb29yTWF0dGVycG9ydCkge1xuICAgICAgbGV0IHJldHJ5ID0gdHJ1ZTtcbiAgICAgIHdoaWxlIChyZXRyeSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGZsb29ySW5kZXggPSBhd2FpdCB0aGlzLnNkay5GbG9vci5tb3ZlVG8oXG4gICAgICAgICAgICBmbG9vck1hdHRlcnBvcnQuc2VxdWVuY2VcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHJ5ID0gZmFsc2U7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBtb3ZlIHRvIEZsb29yJywgZXJyb3IpO1xuICAgICAgICAgIGF3YWl0IHdhaXQoMTAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vIG1hdHRlcnBvcnQgZmxvb3IgZm91bmQgdG8gbW92ZSB0bycpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpbXBvcnRGbG9vckRhdGEoXG4gICAgZGVmYXV0Wm9uZUlEOiBzdHJpbmcsXG4gICAgbm9kZTogTm9kZVxuICApOiBQcm9taXNlPFpvbmVbXT4ge1xuICAgIGNvbnN0IHpvbmVzID0gW107XG4gICAgYXdhaXQgdGhpcy5zZGsuTW9kZS5tb3ZlVG8odGhpcy5zZGsuTW9kZS5Nb2RlLkZMT09SUExBTik7XG4gICAgY29uc3Qgbm1iRmxvb3JzID0gT2JqZWN0LmtleXModGhpcy5mbG9vcnMpLmxlbmd0aDtcbiAgICBjb25zb2xlLmxvZygnVG90YWwgbnVtYmVyIG9mIGZsb29ycycsIG5tYkZsb29ycyk7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG5tYkZsb29yczsgaW5kZXggKz0gMSkge1xuICAgICAgY29uc29sZS5sb2coJ0ltcG9ydGluZyBmbG9vcicsIGluZGV4KTtcbiAgICAgIGF3YWl0IHRoaXMuc2RrLkZsb29yLm1vdmVUbyhpbmRleCkudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHdhaXQoNzAwKTtcbiAgICAgICAgY29uc3Qgem9uZSA9IGF3YWl0IHRoaXMuc2F2ZUZsb29yKGRlZmF1dFpvbmVJRCwgbm9kZSk7XG4gICAgICAgIHpvbmVzLnB1c2goem9uZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh6b25lcyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNhdmVGbG9vcihkZWZhdXRab25lSUQ6IHN0cmluZywgbm9kZTogTm9kZSk6IFByb21pc2U8Wm9uZT4ge1xuICAgIGxldCBuYW1lID0gdGhpcy5jdXJyZW50Rmxvb3IuaWQ7XG4gICAgaWYgKHRoaXMuY3VycmVudEZsb29yLm5hbWUgIT09ICcnKSB7XG4gICAgICBuYW1lID0gdGhpcy5jdXJyZW50Rmxvb3IubmFtZTtcbiAgICB9XG4gICAgY29uc3QgbGF5ZXJGbG9vciA9IGF3YWl0IHRoaXMuZ2V0TGF5ZXJCeU5hbWUoJ0ZMT09SJyk7XG4gICAgY29uc3Qgc3dlZXBzSW5mbyA9IE9iamVjdC52YWx1ZXModGhpcy5zd2VlcHMpO1xuICAgIGNvbnN0IHN3ZWVwc0ZvckZsb29yID0gc3dlZXBzSW5mby5maWx0ZXIoXG4gICAgICAoc3dlZXBJbmZvKSA9PiBzd2VlcEluZm8uZmxvb3JJbmZvLmlkID09PSB0aGlzLmN1cnJlbnRGbG9vci5pZFxuICAgICk7XG4gICAgY29uc29sZS5sb2coJ2N1cnJlbnQgZmxvb3InLCB0aGlzLmN1cnJlbnRGbG9vcik7XG4gICAgY29uc29sZS5sb2coJ3N3ZWVwcyBmb3IgZmxvb3InLCBzd2VlcHNGb3JGbG9vci5sZW5ndGgpO1xuICAgIGNvbnN0IHN3ZWVwSURzOiBzdHJpbmdbXSA9IHN3ZWVwc0ZvckZsb29yLm1hcCgoc3dlZXApID0+IHN3ZWVwLnV1aWQpO1xuICAgIGNvbnN0IHpvbmUgPSBhd2FpdCB0aGlzLmNyZWF0ZVpvbmUoXG4gICAgICBgw4l0YWdlICR7bmFtZX0gLSAke25vZGUubWV0YWRhdGF9YCxcbiAgICAgIGxheWVyRmxvb3IuaWQsXG4gICAgICBudWxsLFxuICAgICAgZGVmYXV0Wm9uZUlELFxuICAgICAgc3dlZXBJRHMsXG4gICAgICBub2RlLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoeyBtYXR0ZXJwb3J0Rmxvb3JTZXF1ZW5jZTogdGhpcy5jdXJyZW50Rmxvb3Iuc2VxdWVuY2UgfSlcbiAgICApO1xuICAgIGNvbnN0IGJhc2U2NCA9IGF3YWl0IHRoaXMuc2RrLlJlbmRlcmVyLnRha2VTY3JlZW5TaG90KHtcbiAgICAgIHdpZHRoOiA0MDk2LFxuICAgICAgaGVpZ2h0OiAyMDQ4LFxuICAgIH0pO1xuICAgIGNvbnN0IHNwYWNlSURzaG9ydCA9IHRoaXMuc3BhY2VJRC5zbGljZSgwLCA4KTtcbiAgICBhd2FpdCB1cGxvYWRCYXNlNjRJbWFnZShcbiAgICAgIGJhc2U2NCxcbiAgICAgIG51bGwsXG4gICAgICBgdmlzaXRzLyR7dGhpcy5tb2RlbElEfS9wbGFucy9gLFxuICAgICAgYHBsYW5fZmxvb3JfJHt0aGlzLmN1cnJlbnRGbG9vci5pZH1fJHtzcGFjZUlEc2hvcnR9YFxuICAgICk7XG4gICAgY29uc3QgcGxhbiA9IHtcbiAgICAgIG5hbWU6IGBwbGFuX2Zsb29yXyR7dGhpcy5jdXJyZW50Rmxvb3IuaWR9YCxcbiAgICAgIGFubmV4ZTogYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vcGxhbnMvcGxhbl9mbG9vcl8ke3RoaXMuY3VycmVudEZsb29yLmlkfV8ke3NwYWNlSURzaG9ydH0uanBlZ2AsXG4gICAgICB6b25lSUQ6IHpvbmUuaWQsXG4gICAgICBzcGFjZUlEOiB0aGlzLnNwYWNlSUQsXG4gICAgICBpc0N1cnJlbnRGb3Jab25lOiB0cnVlLFxuICAgICAgaXNNb2RpZmllZDogZmFsc2UsXG4gICAgICBpc0ltcG9ydGVkTWF0dGVycG9ydDogdHJ1ZSxcbiAgICB9IGFzIFBsYW47XG4gICAgYXdhaXQgdGhpcy5wbGFuU2VydmljZS5jcmVhdGVQbGFuKHBsYW4pO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoem9uZSk7XG4gIH1cblxuICBhYmFuZG9uKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ2FiYW5kb25uaW5nIGltcG9ydCcpO1xuICAgICAgdGhpcy5zdG9wID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVtb3ZlRnJhbWUoKTtcbiAgICB9LCA1MDApO1xuICB9XG5cbiAgcmVtb3ZlRnJhbWUoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudEZyYW1lKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGcmFtZS5yZW1vdmUoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRMYXllckJ5TmFtZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPExheWVyPiB7XG4gICAgY29uc3QgbWlzc2lvbiA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24odGhpcy5zcGFjZUlEKTtcbiAgICBjb25zdCBjdXJyZW50T3JnSWQgPSBtaXNzaW9uLm9yZ2FuaXNhdGlvbklEO1xuICAgIGNvbnN0IGxheWVycyA9IGF3YWl0IHRoaXMubGF5ZXJTZXJ2aWNlLmdldExheWVyQnlOYW1lRm9yT3JnYW5pc2F0aW9uKFxuICAgICAgbmFtZSxcbiAgICAgIGN1cnJlbnRPcmdJZFxuICAgICk7XG4gICAgaWYgKGxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gbGF5ZXJzWzBdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sYXllclNlcnZpY2UuY3JlYXRlTGF5ZXJGb3JPcmdhbmlzYXRpb24obmFtZSwgY3VycmVudE9yZ0lkKTtcbiAgfVxufSJdfQ==
@@ -75,4 +75,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
75
75
  providedIn: 'root',
76
76
  }]
77
77
  }], ctorParameters: () => [{ type: i1.Router }] });
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1tZWFzdXJlbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tYXR0ZXJwb3J0LW1lYXN1cmVtZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7O0FBS2pFLE1BQU0sT0FBTyw0QkFBNEI7SUFlbkI7SUFkWixXQUFXLEdBQVUsRUFBRSxDQUFDO0lBQ3hCLG9CQUFvQixHQUFhLEVBQUUsQ0FBQztJQUNwQyxpQkFBaUIsQ0FBTTtJQUV2QixVQUFVLEdBQUc7UUFDbkIsS0FBSyxFQUFFLEdBQUc7UUFDVixNQUFNLEVBQUUsR0FBRztLQUNaLENBQUM7SUFFTSxVQUFVLEdBQUc7UUFDbkIsVUFBVSxFQUFFLEtBQUs7UUFDakIsTUFBTSxFQUFFLElBQUk7S0FDYixDQUFDO0lBRUYsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7SUFBRyxDQUFDO0lBRXRDOztPQUVHO0lBQ0gsNkJBQTZCLENBQUMsR0FBUSxFQUFFLGNBQXNCO1FBQzVELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDN0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztZQUMvQixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsWUFBWSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDckQsTUFBTSxRQUFRLEdBQUcsMkJBQTJCLENBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUN4QixDQUFDO2dCQUNGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0MsQ0FBQztZQUNELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLGNBQWMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxHQUFRO1FBQ3JCLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQ2hDLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFrQixFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGFBQWEsQ0FBQztZQUN2QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsVUFBZTtRQUNoQyxPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQ3pCLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSztTQUN4QixDQUFDO0lBQ0osQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFhO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0lBQzVCLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7d0dBN0VVLDRCQUE0Qjs0R0FBNUIsNEJBQTRCLGNBRjNCLE1BQU07OzRGQUVQLDRCQUE0QjtrQkFIeEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IGdldERpc3RhbmNlQmV0d2VlblR3b1BvaW50cyB9IGZyb20gJy4uL2hlbHBlcnMuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0dGVycG9ydE1lYXN1cmVtZW50U2VydmljZSB7XHJcbiAgcHJpdmF0ZSBsYXN0TWVhc3VyZTogYW55W10gPSBbXTtcclxuICBwcml2YXRlIGRpc3RhbmNlc0xhc3RNZWFzdXJlOiBudW1iZXJbXSA9IFtdO1xyXG4gIHByaXZhdGUgbGFzdFNjcmVlbnNob3RVcmk6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSByZXNvbHV0aW9uID0ge1xyXG4gICAgd2lkdGg6IDUwMCxcclxuICAgIGhlaWdodDogNjAwLFxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgdmlzaWJpbGl0eSA9IHtcclxuICAgIG1hdHRlcnRhZ3M6IGZhbHNlLFxyXG4gICAgc3dlZXBzOiB0cnVlLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxiYWNrIGFmdGVyIG1lYXN1cmVtZW50IGlzIHBlcmZvcm1lZFxyXG4gICAqL1xyXG4gIGdldERpc3RhbmNlRm9yTGFzdE1lYXN1cmVtZW50KHNkazogYW55LCBjdXJyZW50U3BhY2VJRDogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5sYXN0TWVhc3VyZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IG51bWJlclBvaW50cyA9IHRoaXMubGFzdE1lYXN1cmUubGVuZ3RoO1xyXG4gICAgICB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlID0gW107XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBudW1iZXJQb2ludHM7IGluZGV4ICs9IDEpIHtcclxuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGdldERpc3RhbmNlQmV0d2VlblR3b1BvaW50cyhcclxuICAgICAgICAgIHRoaXMubGFzdE1lYXN1cmVbaW5kZXggLSAxXSxcclxuICAgICAgICAgIHRoaXMubGFzdE1lYXN1cmVbaW5kZXhdXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlLnB1c2goZGlzdGFuY2UpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGFrZVNjcmVlblNob3Qoc2RrKS50aGVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYHZpc2l0LyR7Y3VycmVudFNwYWNlSUR9L2FkZF9tZWFzdXJlbWVudGBdKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRMYXN0RGlzdGFuY2VzKCk6IG51bWJlcltdIHtcclxuICAgIHJldHVybiB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGFrZXMgc2NyZWVuc2hvdCBhbmQgc2F2ZXMgYmFzZTY0IGluIGxhc3RTY3JlZW5zaG90VXJpXHJcbiAgICogQHBhcmFtIHNkayBNYXR0ZXJwb3J0IFNES1xyXG4gICAqIEByZXR1cm5zIFByb21pc2VcclxuICAgKi9cclxuICB0YWtlU2NyZWVuU2hvdChzZGs6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIHNkay5SZW5kZXJlci50YWtlU2NyZWVuU2hvdChcclxuICAgICAgdGhpcy5yZXNvbHV0aW9uLFxyXG4gICAgICB0aGlzLnZpc2liaWxpdHlcclxuICAgICkudGhlbigoc2NyZWVuU2hvdFVyaTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMubGFzdFNjcmVlbnNob3RVcmkgPSBzY3JlZW5TaG90VXJpO1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFNjcmVlblNob3RVcmkoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmxhc3RTY3JlZW5zaG90VXJpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGFzdE1lYXN1cmVtZW50KHBvc2VDYW1lcmE6IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBtZWFzdXJlOiB0aGlzLmxhc3RNZWFzdXJlLFxyXG4gICAgICBzd2VlcDogcG9zZUNhbWVyYS5zd2VlcCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBzZXRMYXN0TWVhc3VyZShwb2ludHM6IGFueVtdKSB7XHJcbiAgICB0aGlzLmxhc3RNZWFzdXJlID0gcG9pbnRzO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVzb2x1dGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLnJlc29sdXRpb247XHJcbiAgfVxyXG5cclxuICBnZXRWaXNpYmlsaXR5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMudmlzaWJpbGl0eTtcclxuICB9XHJcbn1cclxuIl19
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1tZWFzdXJlbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tYXR0ZXJwb3J0LW1lYXN1cmVtZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7O0FBS2pFLE1BQU0sT0FBTyw0QkFBNEI7SUFlbkI7SUFkWixXQUFXLEdBQVUsRUFBRSxDQUFDO0lBQ3hCLG9CQUFvQixHQUFhLEVBQUUsQ0FBQztJQUNwQyxpQkFBaUIsQ0FBTTtJQUV2QixVQUFVLEdBQUc7UUFDbkIsS0FBSyxFQUFFLEdBQUc7UUFDVixNQUFNLEVBQUUsR0FBRztLQUNaLENBQUM7SUFFTSxVQUFVLEdBQUc7UUFDbkIsVUFBVSxFQUFFLEtBQUs7UUFDakIsTUFBTSxFQUFFLElBQUk7S0FDYixDQUFDO0lBRUYsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7SUFBRyxDQUFDO0lBRXRDOztPQUVHO0lBQ0gsNkJBQTZCLENBQUMsR0FBUSxFQUFFLGNBQXNCO1FBQzVELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDN0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztZQUMvQixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsWUFBWSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDckQsTUFBTSxRQUFRLEdBQUcsMkJBQTJCLENBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUN4QixDQUFDO2dCQUNGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0MsQ0FBQztZQUNELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLGNBQWMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxHQUFRO1FBQ3JCLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQ2hDLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFrQixFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGFBQWEsQ0FBQztZQUN2QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsVUFBZTtRQUNoQyxPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQ3pCLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSztTQUN4QixDQUFDO0lBQ0osQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFhO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0lBQzVCLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7d0dBN0VVLDRCQUE0Qjs0R0FBNUIsNEJBQTRCLGNBRjNCLE1BQU07OzRGQUVQLDRCQUE0QjtrQkFIeEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZ2V0RGlzdGFuY2VCZXR3ZWVuVHdvUG9pbnRzIH0gZnJvbSAnLi4vaGVscGVycy5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE1hdHRlcnBvcnRNZWFzdXJlbWVudFNlcnZpY2Uge1xuICBwcml2YXRlIGxhc3RNZWFzdXJlOiBhbnlbXSA9IFtdO1xuICBwcml2YXRlIGRpc3RhbmNlc0xhc3RNZWFzdXJlOiBudW1iZXJbXSA9IFtdO1xuICBwcml2YXRlIGxhc3RTY3JlZW5zaG90VXJpOiBhbnk7XG5cbiAgcHJpdmF0ZSByZXNvbHV0aW9uID0ge1xuICAgIHdpZHRoOiA1MDAsXG4gICAgaGVpZ2h0OiA2MDAsXG4gIH07XG5cbiAgcHJpdmF0ZSB2aXNpYmlsaXR5ID0ge1xuICAgIG1hdHRlcnRhZ3M6IGZhbHNlLFxuICAgIHN3ZWVwczogdHJ1ZSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyKSB7fVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBhZnRlciBtZWFzdXJlbWVudCBpcyBwZXJmb3JtZWRcbiAgICovXG4gIGdldERpc3RhbmNlRm9yTGFzdE1lYXN1cmVtZW50KHNkazogYW55LCBjdXJyZW50U3BhY2VJRDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMubGFzdE1lYXN1cmUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbnVtYmVyUG9pbnRzID0gdGhpcy5sYXN0TWVhc3VyZS5sZW5ndGg7XG4gICAgICB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlID0gW107XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgbnVtYmVyUG9pbnRzOyBpbmRleCArPSAxKSB7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlID0gZ2V0RGlzdGFuY2VCZXR3ZWVuVHdvUG9pbnRzKFxuICAgICAgICAgIHRoaXMubGFzdE1lYXN1cmVbaW5kZXggLSAxXSxcbiAgICAgICAgICB0aGlzLmxhc3RNZWFzdXJlW2luZGV4XVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlLnB1c2goZGlzdGFuY2UpO1xuICAgICAgfVxuICAgICAgdGhpcy50YWtlU2NyZWVuU2hvdChzZGspLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYHZpc2l0LyR7Y3VycmVudFNwYWNlSUR9L2FkZF9tZWFzdXJlbWVudGBdKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldExhc3REaXN0YW5jZXMoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRha2VzIHNjcmVlbnNob3QgYW5kIHNhdmVzIGJhc2U2NCBpbiBsYXN0U2NyZWVuc2hvdFVyaVxuICAgKiBAcGFyYW0gc2RrIE1hdHRlcnBvcnQgU0RLXG4gICAqIEByZXR1cm5zIFByb21pc2VcbiAgICovXG4gIHRha2VTY3JlZW5TaG90KHNkazogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHNkay5SZW5kZXJlci50YWtlU2NyZWVuU2hvdChcbiAgICAgIHRoaXMucmVzb2x1dGlvbixcbiAgICAgIHRoaXMudmlzaWJpbGl0eVxuICAgICkudGhlbigoc2NyZWVuU2hvdFVyaTogYW55KSA9PiB7XG4gICAgICB0aGlzLmxhc3RTY3JlZW5zaG90VXJpID0gc2NyZWVuU2hvdFVyaTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFNjcmVlblNob3RVcmkoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5sYXN0U2NyZWVuc2hvdFVyaTtcbiAgfVxuXG4gIGdldExhc3RNZWFzdXJlbWVudChwb3NlQ2FtZXJhOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBtZWFzdXJlOiB0aGlzLmxhc3RNZWFzdXJlLFxuICAgICAgc3dlZXA6IHBvc2VDYW1lcmEuc3dlZXAsXG4gICAgfTtcbiAgfVxuXG4gIHNldExhc3RNZWFzdXJlKHBvaW50czogYW55W10pIHtcbiAgICB0aGlzLmxhc3RNZWFzdXJlID0gcG9pbnRzO1xuICB9XG5cbiAgZ2V0UmVzb2x1dGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHV0aW9uO1xuICB9XG5cbiAgZ2V0VmlzaWJpbGl0eSgpIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmlsaXR5O1xuICB9XG59XG4iXX0=
@@ -380,4 +380,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
380
380
  providedIn: 'root',
381
381
  }]
382
382
  }], ctorParameters: () => [] });
383
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1uYXZpZ2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21hdHRlcnBvcnQtbmF2aWdhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFLMUMsTUFBTSxPQUFPLDJCQUEyQjtJQUMvQixlQUFlLEdBQVEsSUFBSSxDQUFDO0lBQzVCLE1BQU0sR0FBeUIsSUFBSSxDQUFDO0lBQ3BDLE1BQU0sR0FBaUUsSUFBSSxDQUFDO0lBQzVFLGVBQWUsR0FBYSxFQUFFLENBQUM7SUFFL0IsWUFBWSxHQUFvQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzlDLG1CQUFtQixHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7SUFDdkQsMEVBQTBFO0lBQ25FLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUyxDQUFDO0lBRXJDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUN6QixpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDMUIsaUJBQWlCLEdBQWUsVUFBVSxDQUFDLE9BQU8sQ0FBQztJQUNuRCxZQUFZLEdBQVUsRUFBRSxDQUFDO0lBQ2hDLDRHQUE0RztJQUNyRyxvQkFBb0IsR0FBa0IsSUFBSSxDQUFDO0lBRWxELG1HQUFtRztJQUMzRixrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFFbkMsNkNBQTZDO0lBQzdDLHFHQUFxRztJQUNyRywyR0FBMkc7SUFDbkcsU0FBUyxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzNDLFNBQVMsR0FBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVuRCxnQkFBZ0IsQ0FBQztJQUVqQixxQ0FBcUM7SUFFckM7OztPQUdHO0lBQ0gsZ0JBQWdCLENBQUMsVUFBZTtRQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPO1FBQ3hCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzFDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQyxNQUFNLElBQUksR0FBRyxTQUFTLEVBQUUsSUFBSSxDQUFDO1lBQzdCLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDaEMsQ0FBQztZQUNELHdEQUF3RDtZQUN4RCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0NBQStDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxVQUFVLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQztRQUN6SCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxlQUFlLENBQUMsUUFBZ0I7UUFDOUIsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUMvQiw4RUFBOEU7UUFDOUUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUNsRCx1Q0FBdUM7UUFDdkMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUM7SUFDbEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnQkFBZ0IsQ0FBQyxTQUFpQjtRQUNoQyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQ2pDLDBDQUEwQztRQUMxQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQ3BELHVDQUF1QztRQUN2QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsS0FBSyxDQUFDLHdCQUF3QixDQUFDLEdBQVE7UUFDckMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDcEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1lBQzVELE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUM7WUFDSCxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNDLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDRCQUE0QixDQUFDLFlBQW9CLEVBQUUsT0FBZTtRQUNoRSxPQUFPLENBQ0wsWUFBWSxLQUFLLGdCQUFnQjtZQUNqQyxPQUFPLEtBQUssZ0JBQWdCO1lBQzVCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUN6QixDQUFDO0lBQ0osQ0FBQztJQUVELDBCQUEwQixDQUFDLEdBQVE7UUFDakMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELG1CQUFtQixDQUFDLEdBQVE7UUFDMUIsSUFBSSxDQUFDO1lBQ0gsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsd0JBQXdCLENBQUMsR0FBUTtRQUNyQyxVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDcEIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3BELE9BQU8sQ0FBQyxHQUFHLENBQUMsOENBQThDLENBQUMsQ0FBQztnQkFDNUQsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzFDLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0MsQ0FBQztRQUNILENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsR0FBUSxFQUFFLFNBQWlCLEVBQUUsMEJBQWtDLElBQUk7UUFDMUYsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDeEMsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDcEMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssdUJBQXVCLENBQ3RELENBQUM7UUFDRixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckIsZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNoQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQzlELENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JCLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQzNDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUM3QixDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDO29CQUNILE1BQU0sVUFBVSxHQUFHLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNwRSxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUNqRCxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUNoQixDQUFDO2dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7b0JBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDM0MsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2xCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsb0NBQW9DLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDbkUsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN2RCxPQUFPLENBQUMsR0FBRyxDQUFDLDRDQUE0QyxFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxHQUFRLEVBQUUsS0FBYSxFQUFFLFFBQTBDO1FBQzFGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3ZGLE9BQU8sQ0FBQyxHQUFHLENBQUMseUNBQXlDLENBQUMsQ0FBQztZQUN2RCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksU0FBUyxFQUFFLElBQUksV0FBVyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLEtBQUssWUFBWSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFDRCxVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDcEIsSUFBSSxDQUFDO2dCQUNILElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7Z0JBQzlCLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFO29CQUNsQyxVQUFVLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTztvQkFDN0MsY0FBYyxFQUFFLElBQUk7aUJBQ3JCLENBQUMsQ0FBQztZQUNMLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7Z0JBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUNELElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUN6RCxDQUFDO1FBQ0gsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvQyxPQUFPLENBQUMsR0FBRyxDQUFDLDZCQUE2QixFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLHFCQUFxQixDQUFDLEdBQVEsRUFBRSxlQUF5QjtRQUM3RCxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQztRQUM1QyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDaEIsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2xDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDO2dCQUNILE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3JDLE9BQU8sSUFBSSxDQUFDLENBQUM7WUFDZixDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksS0FBSyxDQUFDLGdCQUFnQixDQUMzQixHQUFRLEVBQ1IsUUFBNkMsRUFDN0MsUUFBK0QsRUFDL0QsT0FLQztRQUVELGVBQWU7UUFDZixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELDhCQUE4QjtRQUM5QixNQUFNLEVBQ0osVUFBVSxHQUFHLEtBQUssRUFDbEIsVUFBVSxHQUFHLEdBQUcsRUFDaEIsZUFBZSxHQUFHLElBQUksRUFDdEIsTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFDOUIsR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO1FBRWxCLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFFbEQsMkRBQTJEO1FBQzNELE1BQU0sR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLFFBQVEsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ25DLE1BQU0sSUFBSSxHQUFHLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDO1FBRWpDLHVEQUF1RDtRQUN2RCxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3JELE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDM0QsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUV4RCw4REFBOEQ7UUFDOUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDL0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUU3QixJQUFJLENBQUM7WUFDSCw4Q0FBOEM7WUFDOUMsSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUN4QixNQUFNLFVBQVUsR0FBUSxFQUFFLENBQUM7Z0JBQzNCLHFFQUFxRTtnQkFDckUsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUN2RSxVQUFVLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNoRSxDQUFDO3FCQUFNLENBQUM7b0JBQ04sVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7Z0JBQ3JDLENBQUM7Z0JBQ0QsVUFBVSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7Z0JBQ2pDLElBQUksTUFBTTtvQkFBRSxVQUFVLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztnQkFFdkMsSUFBSSxDQUFDO29CQUNILE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUNoRCxDQUFDO2dCQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7b0JBQ2IsK0NBQStDO29CQUMvQyxJQUFJLFNBQVMsRUFBRTt3QkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLGdEQUFnRCxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN4RixDQUFDO1lBQ0gsQ0FBQztZQUVELGdFQUFnRTtZQUNoRSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQztnQkFDbEQsTUFBTSxRQUFRLEdBQVE7b0JBQ3BCLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO2lCQUMxRCxDQUFDO2dCQUNGLElBQUksQ0FBQztvQkFDSCxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN0QyxDQUFDO2dCQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7b0JBQ2IsSUFBSSxTQUFTLEVBQUU7d0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDMUUsQ0FBQztZQUNILENBQUM7WUFFRCw2QkFBNkI7WUFDN0IsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixvQ0FBb0M7Z0JBQ3BDLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsQ0FBQztvQkFDN0IsbURBQW1EO29CQUNuRCxJQUFJLENBQUM7d0JBQ0gsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNqSCxDQUFDO29CQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7d0JBQ2QscUVBQXFFO3dCQUNyRSxJQUFJLENBQUM7NEJBQ0gsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQzdILENBQUM7d0JBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQzs0QkFDZCxJQUFJLFNBQVMsRUFBRTtnQ0FBRSxPQUFPLENBQUMsS0FBSyxDQUFDLG9EQUFvRCxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzs0QkFDakcsa0RBQWtEOzRCQUNsRCxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUM7Z0NBQzFCLElBQUksQ0FBQztvQ0FDSCxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO3dDQUN4QixRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRTt3Q0FDaEQsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7cUNBQzFELENBQUMsQ0FBQztnQ0FDTCxDQUFDO2dDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7b0NBQ2QsSUFBSSxTQUFTLEVBQUU7d0NBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQywyQ0FBMkMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQ0FDcEYsQ0FBQzs0QkFDSCxDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQztvQkFDakMsa0VBQWtFO29CQUNsRSxJQUFJLENBQUM7d0JBQ0gsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQzs0QkFDeEIsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUU7NEJBQ2hELFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO3lCQUMxRCxDQUFDLENBQUM7b0JBQ0wsQ0FBQztvQkFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO3dCQUNiLElBQUksU0FBUyxFQUFFOzRCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQzFFLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksU0FBUyxFQUFFO3dCQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0VBQXdFLENBQUMsQ0FBQztnQkFDMUcsQ0FBQztZQUNILENBQUM7WUFFRCx3REFBd0Q7WUFDeEQsTUFBTSxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2Isd0RBQXdEO1lBQ3hELE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQztnQkFBUyxDQUFDO1lBQ1QsbUNBQW1DO1lBQ25DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUdEOzs7T0FHRztJQUNILGVBQWUsQ0FBQyxVQUFlO1FBQzdCLE1BQU0sR0FBRyxHQUFHLFVBQVUsRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFZO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssZ0JBQWdCO2dCQUNuQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztnQkFDOUMsTUFBTTtZQUNSLEtBQUssZ0JBQWdCO2dCQUNuQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztnQkFDOUMsTUFBTTtZQUNSLEtBQUssYUFBYTtnQkFDaEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7Z0JBQzNDLE1BQU07WUFDUixLQUFLLG9CQUFvQjtnQkFDdkIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUM7Z0JBQ2xELE1BQU07WUFDUjtnQkFDRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUNoRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN4RCxDQUFDO3dHQXZZVSwyQkFBMkI7NEdBQTNCLDJCQUEyQixjQUYxQixNQUFNOzs0RkFFUCwyQkFBMkI7a0JBSHZDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ2FtZXJhTW9kZSB9IGZyb20gJy4uL3R5cGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyB3YWl0IH0gZnJvbSAnLi4vaGVscGVycy5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXR0ZXJwb3J0TmF2aWdhdGlvblNlcnZpY2Uge1xyXG4gIHB1YmxpYyBzd2VlcENvbGxlY3Rpb246IGFueSA9IG51bGw7XHJcbiAgcHVibGljIHN3ZWVwczogQXJyYXk8c3RyaW5nPiB8IG51bGwgPSBudWxsO1xyXG4gIHB1YmxpYyBmbG9vcnM6IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBzZXF1ZW5jZTogbnVtYmVyIH0+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHVibGljIGZvcmJpZGRlblN3ZWVwczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgcHVibGljIGN1cnJlbnRTd2VlcDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QoKTtcclxuICBwdWJsaWMgb25DYW1lcmFNb2RlQ2hhbmdlZCA9IG5ldyBTdWJqZWN0PENhbWVyYU1vZGU+KCk7XHJcbiAgLyoqIEVtaXRzIHdoZW5ldmVyIHRoZSBzZXQgb2YgY3VycmVudCByb29tcyBjaGFuZ2VzIChzZGsuUm9vbS5jdXJyZW50KS4gKi9cclxuICBwdWJsaWMgb25Sb29tQ2hhbmdlZCA9IG5ldyBTdWJqZWN0PGFueVtdPigpO1xyXG5cclxuICBwdWJsaWMgaW5UcmFuc2l0aW9uTW9kZSA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpblRyYW5zaXRpb25Td2VlcCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjdXJyZW50Q2FtZXJhTW9kZTogQ2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuT1VUU0lERTtcclxuICBwdWJsaWMgY3VycmVudFJvb21zOiBhbnlbXSA9IFtdO1xyXG4gIC8qKiBTZXF1ZW5jZSBudW1iZXIgb2YgdGhlIGZsb29yIGN1cnJlbnRseSB2aXNpYmxlIGluIHNkay5GbG9vci5jdXJyZW50IChudWxsID0gc2luZ2xlLWZsb29yIG9yIHVua25vd24pLiAqL1xyXG4gIHB1YmxpYyBjdXJyZW50Rmxvb3JTZXF1ZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKiBUcnVlIHdoaWxlIGEgZmxvb3JwbGFuIHRyYW5zaXRpb24gd2FzIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHRocm91Z2ggYWN0aW9uX3Rvb2xib3hfZmxvb3JwbGFuLiAqL1xyXG4gIHByaXZhdGUgZmxvb3JwbGFuUmVxdWVzdGVkID0gZmFsc2U7XHJcblxyXG4gIC8vIOKUgOKUgCBCaWRpcmVjdGlvbmFsIHNpZCDihpQgdXVpZCBsb29rdXAgbWFwcyDilIDilIBcclxuICAvLyBzaWQgID0gc2hvcnQgcnVudGltZSBrZXkgdXNlZCBieSBNYXR0ZXJwb3J0IFNESyAoY29sbGVjdGlvbiBrZXlzLCBTd2VlcC5tb3ZlVG8sIENhbWVyYS5wb3NlLnN3ZWVwKVxyXG4gIC8vIHV1aWQgPSBwZXJzaXN0ZW50IGlkZW50aWZpZXIgc3RvcmVkIGluIHRoZSBkYXRhYmFzZSAoem9uZS5zd2VlcElEcywgcG9pLm1hdHRlcnBvcnRTd2VlcElELCBzdGFydFN3ZWVwSUQpXHJcbiAgcHJpdmF0ZSBzaWRUb1V1aWQ6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7XHJcbiAgcHJpdmF0ZSB1dWlkVG9TaWQ6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIC8vIOKUgOKUgCBTd2VlcCBJRCB0cmFuc2xhdGlvbiBoZWxwZXJzIOKUgOKUgFxyXG5cclxuICAvKipcclxuICAgKiBCdWlsZHMgdGhlIGJpZGlyZWN0aW9uYWwgc2lkIOKGlCB1dWlkIG1hcHMgZnJvbSB0aGUgc3dlZXAgY29sbGVjdGlvbi5cclxuICAgKiBNdXN0IGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBzd2VlcCBjb2xsZWN0aW9uIGlzIHVwZGF0ZWQuXHJcbiAgICovXHJcbiAgYnVpbGRTd2VlcElkTWFwcyhjb2xsZWN0aW9uOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuc2lkVG9VdWlkLmNsZWFyKCk7XHJcbiAgICB0aGlzLnV1aWRUb1NpZC5jbGVhcigpO1xyXG4gICAgaWYgKCFjb2xsZWN0aW9uKSByZXR1cm47XHJcbiAgICBmb3IgKGNvbnN0IHNpZCBvZiBPYmplY3Qua2V5cyhjb2xsZWN0aW9uKSkge1xyXG4gICAgICBjb25zdCBzd2VlcERhdGEgPSBjb2xsZWN0aW9uW3NpZF07XHJcbiAgICAgIGNvbnN0IHV1aWQgPSBzd2VlcERhdGE/LnV1aWQ7XHJcbiAgICAgIGlmICh1dWlkICYmIHV1aWQgIT09IHNpZCkge1xyXG4gICAgICAgIHRoaXMuc2lkVG9VdWlkLnNldChzaWQsIHV1aWQpO1xyXG4gICAgICAgIHRoaXMudXVpZFRvU2lkLnNldCh1dWlkLCBzaWQpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIEFsc28gbWFwIHNpZOKGknNpZCBhbmQgdXVpZOKGknV1aWQgZm9yIHBhc3MtdGhyb3VnaCBjYXNlc1xyXG4gICAgICB0aGlzLnNpZFRvVXVpZC5zZXQoc2lkLCB1dWlkIHx8IHNpZCk7XHJcbiAgICAgIGlmICh1dWlkKSB7XHJcbiAgICAgICAgdGhpcy51dWlkVG9TaWQuc2V0KHV1aWQsIHNpZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKGBbTWF0dGVycG9ydE5hdmlnYXRpb25dIEJ1aWx0IHN3ZWVwIElEIG1hcHM6ICR7dGhpcy5zaWRUb1V1aWQuc2l6ZX0gc2lkcywgJHt0aGlzLnV1aWRUb1NpZC5zaXplfSB1dWlkc2ApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzb2x2ZXMgYW55IHN3ZWVwIGlkZW50aWZpZXIgKHNpZCBvciB1dWlkKSB0byB0aGUgU0RLIHJ1bnRpbWUgKipzaWQqKi5cclxuICAgKiBUaGlzIGlzIHdoYXQgc2RrLlN3ZWVwLm1vdmVUbygpIGFuZCBzZGsuU3dlZXAuZGlzYWJsZSgpIGV4cGVjdC5cclxuICAgKiBGYWxscyBiYWNrIHRvIHRoZSBpbnB1dCBpZiBubyBtYXBwaW5nIGV4aXN0cy5cclxuICAgKi9cclxuICByZXNvbHZlU3dlZXBTaWQoaWRPclV1aWQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWlkT3JVdWlkKSByZXR1cm4gaWRPclV1aWQ7XHJcbiAgICAvLyBJZiBpdCdzIGFscmVhZHkgYSBrbm93biBzaWQgKGV4aXN0cyBhcyBhIGtleSBpbiBzd2VlcENvbGxlY3Rpb24pLCByZXR1cm4gaXRcclxuICAgIGlmICh0aGlzLnNpZFRvVXVpZC5oYXMoaWRPclV1aWQpKSByZXR1cm4gaWRPclV1aWQ7XHJcbiAgICAvLyBPdGhlcndpc2UgdHJ5IHRvIG1hcCBmcm9tIHV1aWQg4oaSIHNpZFxyXG4gICAgcmV0dXJuIHRoaXMudXVpZFRvU2lkLmdldChpZE9yVXVpZCkgPz8gaWRPclV1aWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNvbHZlcyBhbnkgc3dlZXAgaWRlbnRpZmllciAoc2lkIG9yIHV1aWQpIHRvIHRoZSBwZXJzaXN0ZW50ICoqdXVpZCoqLlxyXG4gICAqIFRoaXMgaXMgd2hhdCB0aGUgZGF0YWJhc2Ugc3RvcmVzICh6b25lLnN3ZWVwSURzLCBwb2kubWF0dGVycG9ydFN3ZWVwSUQpLlxyXG4gICAqIEZhbGxzIGJhY2sgdG8gdGhlIGlucHV0IGlmIG5vIG1hcHBpbmcgZXhpc3RzLlxyXG4gICAqL1xyXG4gIHJlc29sdmVTd2VlcFV1aWQoc2lkT3JVdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFzaWRPclV1aWQpIHJldHVybiBzaWRPclV1aWQ7XHJcbiAgICAvLyBJZiBpdCdzIGFscmVhZHkgYSBrbm93biB1dWlkLCByZXR1cm4gaXRcclxuICAgIGlmICh0aGlzLnV1aWRUb1NpZC5oYXMoc2lkT3JVdWlkKSkgcmV0dXJuIHNpZE9yVXVpZDtcclxuICAgIC8vIE90aGVyd2lzZSB0cnkgdG8gbWFwIGZyb20gc2lkIOKGkiB1dWlkXHJcbiAgICByZXR1cm4gdGhpcy5zaWRUb1V1aWQuZ2V0KHNpZE9yVXVpZCkgPz8gc2lkT3JVdWlkO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWN0aW9uX3Rvb2xib3hfZmxvb3JwbGFuKHNkazogYW55KSB7XHJcbiAgICBpZiAodGhpcy5pblRyYW5zaXRpb25Nb2RlIHx8IHRoaXMuaW5UcmFuc2l0aW9uU3dlZXApIHtcclxuICAgICAgY29uc29sZS5sb2coJ3ZpZXdlciBpcyBpbiB0cmFuc2l0aW9uLCBjYW5ub3QgZ28gZmxvb3JwbGFuJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZmxvb3JwbGFuUmVxdWVzdGVkID0gdHJ1ZTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IHNkay5Nb2RlLm1vdmVUbygnbW9kZS5mbG9vcnBsYW4nKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coJ2Nhbm5vdCBnbyB0byBmbG9vcnBsYW4nLCBlKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuZmxvb3JwbGFuUmVxdWVzdGVkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIGEgZG9sbGhvdXNlIGNhbWVyYSBsb29rcyBzdHJhaWdodCBkb3duLCBNYXR0ZXJwb3J0IHJlcG9ydHMgJ21vZGUuZmxvb3JwbGFuJ1xyXG4gICAqIChpdHMgXCJwZWVrYWJvb1wiIGNvcnJlY3RlZCBtb2RlKSBhbHRob3VnaCB0aGUgY2FtZXJhIGlzIHN0aWxsIGluIGRvbGxob3VzZS5cclxuICAgKiBUaGUgbmF0aXZlIG1vZGUgYnV0dG9ucyBhcmUgaGlkZGVuLCBzbyBzdWNoIGEgc3dpdGNoIHRoYXQgd2UgZGlkIG5vdCByZXF1ZXN0XHJcbiAgICogaXMgbmV2ZXIgYSB1c2VyIGFjdGlvbiBhbmQgbXVzdCBub3QgYmUgdHJlYXRlZCBhcyBhIHJlYWwgbW9kZSBjaGFuZ2UuXHJcbiAgICovXHJcbiAgaXNVbnJlcXVlc3RlZEZsb29ycGxhblN3aXRjaChwcmV2aW91c01vZGU6IHN0cmluZywgbmV3TW9kZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBwcmV2aW91c01vZGUgPT09ICdtb2RlLmRvbGxob3VzZScgJiZcclxuICAgICAgbmV3TW9kZSA9PT0gJ21vZGUuZmxvb3JwbGFuJyAmJlxyXG4gICAgICAhdGhpcy5mbG9vcnBsYW5SZXF1ZXN0ZWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhY3Rpb25fdG9vbGJveF9pbnNpZGVfdmlldyhzZGs6IGFueSkge1xyXG4gICAgc2RrLk1vZGUubW92ZVRvKCdtb2RlLmluc2lkZScpO1xyXG4gIH1cclxuXHJcbiAgYWN0aW9uU2hvd0FsbEZsb29ycyhzZGs6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgc2RrLkZsb29yLnNob3dBbGwoKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coJ2Nhbm5vdCBzaG93IGFsbCBmbG9vcnMnLCBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGFjdGlvbl90b29sYm94X2RvbGxob3VzZShzZGs6IGFueSkge1xyXG4gICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmluVHJhbnNpdGlvbk1vZGUgfHwgdGhpcy5pblRyYW5zaXRpb25Td2VlcCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCd2aWV3ZXIgaXMgaW4gdHJhbnNpdGlvbiwgY2Fubm90IGdvIGRvbGxob3VzZScpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IHNkay5Nb2RlLm1vdmVUbygnbW9kZS5kb2xsaG91c2UnKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdjYW5ub3QgZ28gdG8gZG9sbGhvdXNlJywgZSk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEyMDApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWN0aW9uX2dvX3RvX2Zsb29yKHNkazogYW55LCBmbG9vck5hbWU6IHN0cmluZywgbWF0dGVycG9ydEZsb29yU2VxdWVuY2U6IG51bWJlciA9IG51bGwpIHtcclxuICAgIGlmICghdGhpcy5mbG9vcnMpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0Zsb29yIGFyZSBub3QgbG9hZGVkIHlldCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgZmxvb3JNYXR0ZXJwb3J0ID0gdGhpcy5mbG9vcnMuZmluZChcclxuICAgICAgKGZsb29yKSA9PiBmbG9vci5zZXF1ZW5jZSA9PT0gbWF0dGVycG9ydEZsb29yU2VxdWVuY2VcclxuICAgICk7XHJcbiAgICBpZiAoIWZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICBmbG9vck1hdHRlcnBvcnQgPSB0aGlzLmZsb29ycy5maW5kKFxyXG4gICAgICAgIChmbG9vcikgPT4gZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLm5hbWUpICYmIGZsb29yLm5hbWUgIT0gJydcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICghZmxvb3JNYXR0ZXJwb3J0KSB7XHJcbiAgICAgIGZsb29yTWF0dGVycG9ydCA9IHRoaXMuZmxvb3JzLmZpbmQoKGZsb29yKSA9PlxyXG4gICAgICAgIGZsb29yTmFtZS5pbmNsdWRlcyhmbG9vci5pZClcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChmbG9vck1hdHRlcnBvcnQpIHtcclxuICAgICAgbGV0IHJldHJ5ID0gdHJ1ZTtcclxuICAgICAgd2hpbGUgKHJldHJ5KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IGZsb29ySW5kZXggPSBhd2FpdCBzZGsuRmxvb3IubW92ZVRvKGZsb29yTWF0dGVycG9ydC5zZXF1ZW5jZSk7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwibW92ZWQgdG8gZmxvb3JJbmRleFwiLCBmbG9vckluZGV4KTtcclxuICAgICAgICAgIHJldHJ5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdDYW5ub3QgbW92ZSB0byBGbG9vcicsIGVycm9yKTtcclxuICAgICAgICAgIGF3YWl0IHdhaXQoMTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignTm8gbWF0dGVycG9ydCBmbG9vciBmb3VuZCB0byBtb3ZlIHRvJyk7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhcImFjdGlvbl9nb190b19mbG9vci5mbG9vck1hdHRlcnBvcnRcIiwgZmxvb3JNYXR0ZXJwb3J0KTtcclxuICAgIGNvbnNvbGUubG9nKFwiYWN0aW9uX2dvX3RvX2Zsb29yLmZsb29yTmFtZVwiLCBmbG9vck5hbWUpO1xyXG4gICAgY29uc29sZS5sb2coXCJhY3Rpb25fZ29fdG9fZmxvb3IubWF0dGVycG9ydEZsb29yU2VxdWVuY2VcIiwgbWF0dGVycG9ydEZsb29yU2VxdWVuY2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTmF2aWdhdGUgdG8gYSBzd2VlcC4gVGhlIGNhbGxlciBjYW4gcGFzcyBlaXRoZXIgYSBzaWQgb3IgYSB1dWlkO1xyXG4gICAqIHRoaXMgbWV0aG9kIHJlc29sdmVzIGl0IHRvIHRoZSBTREsgc2lkIGJlZm9yZSBjYWxsaW5nIFN3ZWVwLm1vdmVUbygpLlxyXG4gICAqL1xyXG4gIGFzeW5jIGFjdGlvbl9nb190b19zd2VlcChzZGs6IGFueSwgc3dlZXA6IHN0cmluZywgcm90YXRpb24/OiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH0gfCBudWxsKSB7XHJcbiAgICBjb25zdCByZXNvbHZlZFNpZCA9IHRoaXMucmVzb2x2ZVN3ZWVwU2lkKHN3ZWVwKTtcclxuICAgIGlmICh0aGlzLmZvcmJpZGRlblN3ZWVwcy5pbmNsdWRlcyhzd2VlcCkgfHwgdGhpcy5mb3JiaWRkZW5Td2VlcHMuaW5jbHVkZXMocmVzb2x2ZWRTaWQpKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCd1c2VyIGlzIG5vdCBhbGxvd2VkIHRvIGdvIHRvIHRoaXMgc3dlZXAnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzRGV2TW9kZSgpICYmIHJlc29sdmVkU2lkICE9PSBzd2VlcCkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKGBbYWN0aW9uX2dvX3RvX3N3ZWVwXSBSZXNvbHZlZCB1dWlkIFwiJHtzd2VlcH1cIiDihpIgc2lkIFwiJHtyZXNvbHZlZFNpZH1cImApO1xyXG4gICAgfVxyXG4gICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Td2VlcCA9IHRydWU7XHJcbiAgICAgICAgYXdhaXQgc2RrLlN3ZWVwLm1vdmVUbyhyZXNvbHZlZFNpZCwge1xyXG4gICAgICAgICAgdHJhbnNpdGlvbjogc2RrLkNhbWVyYS5UcmFuc2l0aW9uVHlwZS5JTlNUQU5ULFxyXG4gICAgICAgICAgdHJhbnNpdGlvblRpbWU6IDE1MDBcclxuICAgICAgICB9KTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICB0aGlzLmluVHJhbnNpdGlvblN3ZWVwID0gZmFsc2U7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBtb3ZlIHRvIHN3ZWVwJywgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyb3RhdGlvbikge1xyXG4gICAgICAgIGF3YWl0IHNkay5DYW1lcmEuc2V0Um90YXRpb24ocm90YXRpb24sIHsgc3BlZWQ6IDEwMCB9KTtcclxuICAgICAgfVxyXG4gICAgfSwgMTAwMCk7XHJcbiAgICBjb25zb2xlLmxvZyhcImFjdGlvbl9nb190b19zd2VlcC5zd2VlcFwiLCBzd2VlcCk7XHJcbiAgICBjb25zb2xlLmxvZyhcImFjdGlvbl9nb190b19zd2VlcC5yb3RhdGlvblwiLCByb3RhdGlvbik7XHJcbiAgICBjb25zb2xlLmxvZyhcImFjdGlvbl9nb190b19zd2VlcC5yZXNvbHZlZFNpZFwiLCByZXNvbHZlZFNpZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNhYmxlIGZvcmJpZGRlbiBzd2VlcHMuIFJlc29sdmVzIGVhY2ggc3dlZXAgSUQgdG8gc2lkIGJlZm9yZSBjYWxsaW5nIFNESy5cclxuICAgKi9cclxuICBhc3luYyByZW1vdmVGb3JiaWRkZW5Td2VlcHMoc2RrOiBhbnksIGZvcmJpZGRlblN3ZWVwczogc3RyaW5nW10pIHtcclxuICAgIHRoaXMuZm9yYmlkZGVuU3dlZXBzID0gWy4uLmZvcmJpZGRlblN3ZWVwc107XHJcbiAgICBsZXQgcmVtb3ZlZCA9IDA7XHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgZm9yYmlkZGVuU3dlZXBzLm1hcChhc3luYyAoc3dlZXApID0+IHtcclxuICAgICAgICBjb25zdCByZXNvbHZlZFNpZCA9IHRoaXMucmVzb2x2ZVN3ZWVwU2lkKHN3ZWVwKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgYXdhaXQgc2RrLlN3ZWVwLmRpc2FibGUocmVzb2x2ZWRTaWQpO1xyXG4gICAgICAgICAgcmVtb3ZlZCArPSAxO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIGNvbnNvbGUubG9nKCdyZW1vdmVkIHN3ZWVwczonLCByZW1vdmVkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vdmUgdG8gYSBwb3NpdGlvblxyXG4gICAqIEBwYXJhbSBzZGsgXHJcbiAgICogQHBhcmFtIHBvc2l0aW9uIFxyXG4gICAqIEBwYXJhbSByb3RhdGlvbiBcclxuICAgKiBAcGFyYW0gb3B0aW9ucyBcclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgbW92ZV90b19wb3NpdGlvbihcclxuICAgIHNkazogYW55LFxyXG4gICAgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlciB9LFxyXG4gICAgcm90YXRpb246IHsgeWF3OiBudW1iZXI7IHBpdGNoPzogbnVtYmVyOyByb2xsPzogbnVtYmVyIH0gfCBudWxsLFxyXG4gICAgb3B0aW9ucz86IHtcclxuICAgICAgdHJhbnNpdGlvbj86ICdGTFknIHwgJ0lOU1RBTlQnIHwgJ0lNTUVESUFURSc7XHJcbiAgICAgIGR1cmF0aW9uTXM/OiBudW1iZXI7XHJcbiAgICAgIGFuZ2xlc0luRGVncmVlcz86IGJvb2xlYW47XHJcbiAgICAgIG9mZnNldD86IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlciB9O1xyXG4gICAgfVxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gVmFsaWRhdGUgU0RLXHJcbiAgICBpZiAoIXNkaykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hdHRlcnBvcnQgU0RLIGluc3RhbmNlIGlzIHJlcXVpcmVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWVyZ2Ugb3B0aW9ucyB3aXRoIGRlZmF1bHRzXHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHRyYW5zaXRpb24gPSAnRkxZJyxcclxuICAgICAgZHVyYXRpb25NcyA9IDgwMCxcclxuICAgICAgYW5nbGVzSW5EZWdyZWVzID0gdHJ1ZSxcclxuICAgICAgb2Zmc2V0ID0geyB4OiAwLCB5OiAwLCB6OiAwIH1cclxuICAgIH0gPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICAgIGNvbnN0IGRlZ1RvUmFkID0gKGQ6IG51bWJlcikgPT4gZCAqIE1hdGguUEkgLyAxODA7XHJcblxyXG4gICAgLy8gUHJlcGFyZSByb3RhdGlvbiB2YWx1ZXMgKGRlZmF1bHQgdG8gMCB3aGVuIG5vdCBwcm92aWRlZClcclxuICAgIGNvbnN0IHlhdyA9IHJvdGF0aW9uPy55YXcgPz8gMDtcclxuICAgIGNvbnN0IHBpdGNoID0gcm90YXRpb24/LnBpdGNoID8/IDA7XHJcbiAgICBjb25zdCByb2xsID0gcm90YXRpb24/LnJvbGwgPz8gMDtcclxuXHJcbiAgICAvLyBDb252ZXJ0IHRvIHJhZGlhbnMgaWYgYW5nbGVzIGFyZSBwcm92aWRlZCBpbiBkZWdyZWVzXHJcbiAgICBjb25zdCByb3RZYXcgPSBhbmdsZXNJbkRlZ3JlZXMgPyBkZWdUb1JhZCh5YXcpIDogeWF3O1xyXG4gICAgY29uc3Qgcm90UGl0Y2ggPSBhbmdsZXNJbkRlZ3JlZXMgPyBkZWdUb1JhZChwaXRjaCkgOiBwaXRjaDtcclxuICAgIGNvbnN0IHJvdFJvbGwgPSBhbmdsZXNJbkRlZ3JlZXMgPyBkZWdUb1JhZChyb2xsKSA6IHJvbGw7XHJcblxyXG4gICAgLy8gUHJlc2VydmUgcHJldmlvdXMgdHJhbnNpdGlvbiBmbGFnIGFuZCBtYXJrIGFzIGluLXRyYW5zaXRpb25cclxuICAgIGNvbnN0IHByZXZJblRyYW5zaXRpb24gPSB0aGlzLmluVHJhbnNpdGlvbk1vZGU7XHJcbiAgICB0aGlzLmluVHJhbnNpdGlvbk1vZGUgPSB0cnVlO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIEF0dGVtcHQgdG8gdXNlIENhbWVyYS5sb29rQXQgd2hlbiBhdmFpbGFibGVcclxuICAgICAgaWYgKHNkaz8uQ2FtZXJhPy5sb29rQXQpIHtcclxuICAgICAgICBjb25zdCBsb29rQXRPcHRzOiBhbnkgPSB7fTtcclxuICAgICAgICAvLyBQcmVmZXIgU0RLIGNvbnN0YW50cyB3aGVuIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBmYWxsYmFjayBzdHJpbmdcclxuICAgICAgICBpZiAoc2RrLkNhbWVyYS5UcmFuc2l0aW9uVHlwZSAmJiBzZGsuQ2FtZXJhLlRyYW5zaXRpb25UeXBlW3RyYW5zaXRpb25dKSB7XHJcbiAgICAgICAgICBsb29rQXRPcHRzLnRyYW5zaXRpb24gPSBzZGsuQ2FtZXJhLlRyYW5zaXRpb25UeXBlW3RyYW5zaXRpb25dO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsb29rQXRPcHRzLnRyYW5zaXRpb24gPSB0cmFuc2l0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsb29rQXRPcHRzLmR1cmF0aW9uID0gZHVyYXRpb25NcztcclxuICAgICAgICBpZiAob2Zmc2V0KSBsb29rQXRPcHRzLm9mZnNldCA9IG9mZnNldDtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGF3YWl0IHNkay5DYW1lcmEubG9va0F0KHBvc2l0aW9uLCBsb29rQXRPcHRzKTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgIC8vIElmIGxvb2tBdCBmYWlscywgY29udGludWUgdG8gZmFsbGJhY2tzIGJlbG93XHJcbiAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUuZGVidWcoJ0NhbWVyYS5sb29rQXQgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gc2V0U3RhdGUnLCBlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSWYgbG9va0F0IGlzIG5vdCBwcmVzZW50IG9yIGZhaWxlZCwgdHJ5IHNldFN0YXRlIGZvciBwb3NpdGlvblxyXG4gICAgICBpZiAoIXNkaz8uQ2FtZXJhPy5sb29rQXQgJiYgc2RrPy5DYW1lcmE/LnNldFN0YXRlKSB7XHJcbiAgICAgICAgY29uc3Qgc3RhdGVQb3M6IGFueSA9IHtcclxuICAgICAgICAgIHBvc2l0aW9uOiB7IHg6IHBvc2l0aW9uLngsIHk6IHBvc2l0aW9uLnksIHo6IHBvc2l0aW9uLnogfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGF3YWl0IHNkay5DYW1lcmEuc2V0U3RhdGUoc3RhdGVQb3MpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLmRlYnVnKCdDYW1lcmEuc2V0U3RhdGUocG9zaXRpb24pIGZhaWxlZCcsIGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBBcHBseSByb3RhdGlvbiBpZiBwcm92aWRlZFxyXG4gICAgICBpZiAocm90YXRpb24pIHtcclxuICAgICAgICAvLyBQcmVmZXIgc2V0Um90YXRpb24gd2hlbiBhdmFpbGFibGVcclxuICAgICAgICBpZiAoc2RrPy5DYW1lcmE/LnNldFJvdGF0aW9uKSB7XHJcbiAgICAgICAgICAvLyBUcnkgVmVjdG9yMiBzaWduYXR1cmUgeyB4OiB5YXcsIHk6IHBpdGNoIH0gZmlyc3RcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHNkay5DYW1lcmEuc2V0Um90YXRpb24oeyB4OiByb3RZYXcsIHk6IHJvdFBpdGNoIH0sIHsgc3BlZWQ6IE1hdGgubWF4KDEwLCBNYXRoLmZsb29yKGR1cmF0aW9uTXMgLyAxMCkpIH0pO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyMSkge1xyXG4gICAgICAgICAgICAvLyBJZiB0aGF0IGZhaWxzLCB0cnkgVmVjdG9yMyBzaWduYXR1cmUgeyB4OiBwaXRjaCwgeTogeWF3LCB6OiByb2xsIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBhd2FpdCBzZGsuQ2FtZXJhLnNldFJvdGF0aW9uKHsgeDogcm90UGl0Y2gsIHk6IHJvdFlhdywgejogcm90Um9sbCB9LCB7IHNwZWVkOiBNYXRoLm1heCgxMCwgTWF0aC5mbG9vcihkdXJhdGlvbk1zIC8gMTApKSB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyMikge1xyXG4gICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS5kZWJ1ZygnQ2FtZXJhLnNldFJvdGF0aW9uIGZhaWxlZCB3aXRoIG11bHRpcGxlIHNpZ25hdHVyZXMnLCBlcnIxLCBlcnIyKTtcclxuICAgICAgICAgICAgICAvLyBGYWxsYmFjayB0byBzZXRTdGF0ZSB3aXRoIHJvdGF0aW9uIGlmIGF2YWlsYWJsZVxyXG4gICAgICAgICAgICAgIGlmIChzZGs/LkNhbWVyYT8uc2V0U3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHNkay5DYW1lcmEuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uOiB7IHg6IHJvdFBpdGNoLCB5OiByb3RZYXcsIHo6IHJvdFJvbGwgfSxcclxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogeyB4OiBwb3NpdGlvbi54LCB5OiBwb3NpdGlvbi55LCB6OiBwb3NpdGlvbi56IH1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIzKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS5kZWJ1ZygnRmFsbGJhY2sgQ2FtZXJhLnNldFN0YXRlKHJvdGF0aW9uKSBmYWlsZWQnLCBlcnIzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHNkaz8uQ2FtZXJhPy5zZXRTdGF0ZSkge1xyXG4gICAgICAgICAgLy8gSWYgc2V0Um90YXRpb24gaXMgbm90IGF2YWlsYWJsZSwgdXNlIHNldFN0YXRlIHRvIGFwcGx5IHJvdGF0aW9uXHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCBzZGsuQ2FtZXJhLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICByb3RhdGlvbjogeyB4OiByb3RQaXRjaCwgeTogcm90WWF3LCB6OiByb3RSb2xsIH0sXHJcbiAgICAgICAgICAgICAgcG9zaXRpb246IHsgeDogcG9zaXRpb24ueCwgeTogcG9zaXRpb24ueSwgejogcG9zaXRpb24ueiB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS5kZWJ1ZygnQ2FtZXJhLnNldFN0YXRlKHJvdGF0aW9uKSBmYWlsZWQnLCBlcnIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUud2FybignTm8gbWV0aG9kIGF2YWlsYWJsZSB0byBhcHBseSByb3RhdGlvbiAoc2V0Um90YXRpb24vc2V0U3RhdGUgbm90IGZvdW5kKScpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gV2FpdCBhIGJpdCB0byBhbGxvdyB0cmFuc2l0aW9uIGFuaW1hdGlvbnMgdG8gY29tcGxldGVcclxuICAgICAgYXdhaXQgd2FpdChkdXJhdGlvbk1zICsgMTIwKTtcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAvLyBSZS10aHJvdyBhZnRlciBlbnN1cmluZyBmbGFncyBhcmUgcmVzdG9yZWQgaW4gZmluYWxseVxyXG4gICAgICB0aHJvdyBlcnI7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICAvLyBSZXN0b3JlIHByZXZpb3VzIHRyYW5zaXRpb24gZmxhZ1xyXG4gICAgICB0aGlzLmluVHJhbnNpdGlvbk1vZGUgPSBwcmV2SW5UcmFuc2l0aW9uO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3dlZXAgYXMgYSAqKnV1aWQqKiAoZm9yIGRhdGFiYXNlIG1hdGNoaW5nKS5cclxuICAgKiBUaGUgU0RLJ3MgcG9zZUNhbWVyYS5zd2VlcCBpcyBhIHNpZDsgd2UgdHJhbnNsYXRlIGl0LlxyXG4gICAqL1xyXG4gIGdldEN1cnJlbnRTd2VlcChwb3NlQ2FtZXJhOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGNvbnN0IHNpZCA9IHBvc2VDYW1lcmE/LnN3ZWVwIHx8IG51bGw7XHJcbiAgICBpZiAoIXNpZCkgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU3dlZXBVdWlkKHNpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRDYW1lcmFNb2RlKG1vZGU6IHN0cmluZykge1xyXG4gICAgdGhpcy5pblRyYW5zaXRpb25Td2VlcCA9IGZhbHNlO1xyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgJ21vZGUuZG9sbGhvdXNlJzpcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5ET0xMSE9VU0U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ21vZGUuZmxvb3JwbGFuJzpcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5GTE9PUlBMQU47XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ21vZGUuaW5zaWRlJzpcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5JTlNJREU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ21vZGUudHJhbnNpdGlvbmluZyc6XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuVFJBTlNJVElPTklORztcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5PVVRTSURFO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkNhbWVyYU1vZGVDaGFuZ2VkLm5leHQodGhpcy5jdXJyZW50Q2FtZXJhTW9kZSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
383
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1uYXZpZ2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21hdHRlcnBvcnQtbmF2aWdhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFLMUMsTUFBTSxPQUFPLDJCQUEyQjtJQUMvQixlQUFlLEdBQVEsSUFBSSxDQUFDO0lBQzVCLE1BQU0sR0FBeUIsSUFBSSxDQUFDO0lBQ3BDLE1BQU0sR0FBaUUsSUFBSSxDQUFDO0lBQzVFLGVBQWUsR0FBYSxFQUFFLENBQUM7SUFFL0IsWUFBWSxHQUFvQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzlDLG1CQUFtQixHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7SUFDdkQsMEVBQTBFO0lBQ25FLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUyxDQUFDO0lBRXJDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUN6QixpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDMUIsaUJBQWlCLEdBQWUsVUFBVSxDQUFDLE9BQU8sQ0FBQztJQUNuRCxZQUFZLEdBQVUsRUFBRSxDQUFDO0lBQ2hDLDRHQUE0RztJQUNyRyxvQkFBb0IsR0FBa0IsSUFBSSxDQUFDO0lBRWxELG1HQUFtRztJQUMzRixrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFFbkMsNkNBQTZDO0lBQzdDLHFHQUFxRztJQUNyRywyR0FBMkc7SUFDbkcsU0FBUyxHQUF3QixJQUFJLEdB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QztJQUVELGFBQWEsQ0FBQyxJQUFZO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssZ0JBQWdCO2dCQUNuQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztnQkFDOUMsTUFBTTtZQUNSLEtBQUssZ0JBQWdCO2dCQUNuQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztnQkFDOUMsTUFBTTtZQUNSLEtBQUssYUFBYTtnQkFDaEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7Z0JBQzNDLE1BQU07WUFDUixLQUFLLG9CQUFvQjtnQkFDdkIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUM7Z0JBQ2xELE1BQU07WUFDUjtnQkFDRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUNoRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN4RCxDQUFDO3dHQXZZVSwyQkFBMkI7NEdBQTNCLDJCQUEyQixjQUYxQixNQUFNOzs0RkFFUCwyQkFBMkI7a0JBSHZDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDYW1lcmFNb2RlIH0gZnJvbSAnLi4vdHlwZXMuc2VydmljZSc7XG5pbXBvcnQgeyB3YWl0IH0gZnJvbSAnLi4vaGVscGVycy5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE1hdHRlcnBvcnROYXZpZ2F0aW9uU2VydmljZSB7XG4gIHB1YmxpYyBzd2VlcENvbGxlY3Rpb246IGFueSA9IG51bGw7XG4gIHB1YmxpYyBzd2VlcHM6IEFycmF5PHN0cmluZz4gfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGZsb29yczogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHNlcXVlbmNlOiBudW1iZXIgfT4gfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGZvcmJpZGRlblN3ZWVwczogc3RyaW5nW10gPSBbXTtcblxuICBwdWJsaWMgY3VycmVudFN3ZWVwOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCgpO1xuICBwdWJsaWMgb25DYW1lcmFNb2RlQ2hhbmdlZCA9IG5ldyBTdWJqZWN0PENhbWVyYU1vZGU+KCk7XG4gIC8qKiBFbWl0cyB3aGVuZXZlciB0aGUgc2V0IG9mIGN1cnJlbnQgcm9vbXMgY2hhbmdlcyAoc2RrLlJvb20uY3VycmVudCkuICovXG4gIHB1YmxpYyBvblJvb21DaGFuZ2VkID0gbmV3IFN1YmplY3Q8YW55W10+KCk7XG5cbiAgcHVibGljIGluVHJhbnNpdGlvbk1vZGUgPSBmYWxzZTtcbiAgcHVibGljIGluVHJhbnNpdGlvblN3ZWVwID0gZmFsc2U7XG4gIHB1YmxpYyBjdXJyZW50Q2FtZXJhTW9kZTogQ2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuT1VUU0lERTtcbiAgcHVibGljIGN1cnJlbnRSb29tczogYW55W10gPSBbXTtcbiAgLyoqIFNlcXVlbmNlIG51bWJlciBvZiB0aGUgZmxvb3IgY3VycmVudGx5IHZpc2libGUgaW4gc2RrLkZsb29yLmN1cnJlbnQgKG51bGwgPSBzaW5nbGUtZmxvb3Igb3IgdW5rbm93bikuICovXG4gIHB1YmxpYyBjdXJyZW50Rmxvb3JTZXF1ZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFRydWUgd2hpbGUgYSBmbG9vcnBsYW4gdHJhbnNpdGlvbiB3YXMgZXhwbGljaXRseSByZXF1ZXN0ZWQgdGhyb3VnaCBhY3Rpb25fdG9vbGJveF9mbG9vcnBsYW4uICovXG4gIHByaXZhdGUgZmxvb3JwbGFuUmVxdWVzdGVkID0gZmFsc2U7XG5cbiAgLy8g4pSA4pSAIEJpZGlyZWN0aW9uYWwgc2lkIOKGlCB1dWlkIGxvb2t1cCBtYXBzIOKUgOKUgFxuICAvLyBzaWQgID0gc2hvcnQgcnVudGltZSBrZXkgdXNlZCBieSBNYXR0ZXJwb3J0IFNESyAoY29sbGVjdGlvbiBrZXlzLCBTd2VlcC5tb3ZlVG8sIENhbWVyYS5wb3NlLnN3ZWVwKVxuICAvLyB1dWlkID0gcGVyc2lzdGVudCBpZGVudGlmaWVyIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UgKHpvbmUuc3dlZXBJRHMsIHBvaS5tYXR0ZXJwb3J0U3dlZXBJRCwgc3RhcnRTd2VlcElEKVxuICBwcml2YXRlIHNpZFRvVXVpZDogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSB1dWlkVG9TaWQ6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICAvLyDilIDilIAgU3dlZXAgSUQgdHJhbnNsYXRpb24gaGVscGVycyDilIDilIBcblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBiaWRpcmVjdGlvbmFsIHNpZCDihpQgdXVpZCBtYXBzIGZyb20gdGhlIHN3ZWVwIGNvbGxlY3Rpb24uXG4gICAqIE11c3QgYmUgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIHN3ZWVwIGNvbGxlY3Rpb24gaXMgdXBkYXRlZC5cbiAgICovXG4gIGJ1aWxkU3dlZXBJZE1hcHMoY29sbGVjdGlvbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zaWRUb1V1aWQuY2xlYXIoKTtcbiAgICB0aGlzLnV1aWRUb1NpZC5jbGVhcigpO1xuICAgIGlmICghY29sbGVjdGlvbikgcmV0dXJuO1xuICAgIGZvciAoY29uc3Qgc2lkIG9mIE9iamVjdC5rZXlzKGNvbGxlY3Rpb24pKSB7XG4gICAgICBjb25zdCBzd2VlcERhdGEgPSBjb2xsZWN0aW9uW3NpZF07XG4gICAgICBjb25zdCB1dWlkID0gc3dlZXBEYXRhPy51dWlkO1xuICAgICAgaWYgKHV1aWQgJiYgdXVpZCAhPT0gc2lkKSB7XG4gICAgICAgIHRoaXMuc2lkVG9VdWlkLnNldChzaWQsIHV1aWQpO1xuICAgICAgICB0aGlzLnV1aWRUb1NpZC5zZXQodXVpZCwgc2lkKTtcbiAgICAgIH1cbiAgICAgIC8vIEFsc28gbWFwIHNpZOKGknNpZCBhbmQgdXVpZOKGknV1aWQgZm9yIHBhc3MtdGhyb3VnaCBjYXNlc1xuICAgICAgdGhpcy5zaWRUb1V1aWQuc2V0KHNpZCwgdXVpZCB8fCBzaWQpO1xuICAgICAgaWYgKHV1aWQpIHtcbiAgICAgICAgdGhpcy51dWlkVG9TaWQuc2V0KHV1aWQsIHNpZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhgW01hdHRlcnBvcnROYXZpZ2F0aW9uXSBCdWlsdCBzd2VlcCBJRCBtYXBzOiAke3RoaXMuc2lkVG9VdWlkLnNpemV9IHNpZHMsICR7dGhpcy51dWlkVG9TaWQuc2l6ZX0gdXVpZHNgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYW55IHN3ZWVwIGlkZW50aWZpZXIgKHNpZCBvciB1dWlkKSB0byB0aGUgU0RLIHJ1bnRpbWUgKipzaWQqKi5cbiAgICogVGhpcyBpcyB3aGF0IHNkay5Td2VlcC5tb3ZlVG8oKSBhbmQgc2RrLlN3ZWVwLmRpc2FibGUoKSBleHBlY3QuXG4gICAqIEZhbGxzIGJhY2sgdG8gdGhlIGlucHV0IGlmIG5vIG1hcHBpbmcgZXhpc3RzLlxuICAgKi9cbiAgcmVzb2x2ZVN3ZWVwU2lkKGlkT3JVdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghaWRPclV1aWQpIHJldHVybiBpZE9yVXVpZDtcbiAgICAvLyBJZiBpdCdzIGFscmVhZHkgYSBrbm93biBzaWQgKGV4aXN0cyBhcyBhIGtleSBpbiBzd2VlcENvbGxlY3Rpb24pLCByZXR1cm4gaXRcbiAgICBpZiAodGhpcy5zaWRUb1V1aWQuaGFzKGlkT3JVdWlkKSkgcmV0dXJuIGlkT3JVdWlkO1xuICAgIC8vIE90aGVyd2lzZSB0cnkgdG8gbWFwIGZyb20gdXVpZCDihpIgc2lkXG4gICAgcmV0dXJuIHRoaXMudXVpZFRvU2lkLmdldChpZE9yVXVpZCkgPz8gaWRPclV1aWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYW55IHN3ZWVwIGlkZW50aWZpZXIgKHNpZCBvciB1dWlkKSB0byB0aGUgcGVyc2lzdGVudCAqKnV1aWQqKi5cbiAgICogVGhpcyBpcyB3aGF0IHRoZSBkYXRhYmFzZSBzdG9yZXMgKHpvbmUuc3dlZXBJRHMsIHBvaS5tYXR0ZXJwb3J0U3dlZXBJRCkuXG4gICAqIEZhbGxzIGJhY2sgdG8gdGhlIGlucHV0IGlmIG5vIG1hcHBpbmcgZXhpc3RzLlxuICAgKi9cbiAgcmVzb2x2ZVN3ZWVwVXVpZChzaWRPclV1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFzaWRPclV1aWQpIHJldHVybiBzaWRPclV1aWQ7XG4gICAgLy8gSWYgaXQncyBhbHJlYWR5IGEga25vd24gdXVpZCwgcmV0dXJuIGl0XG4gICAgaWYgKHRoaXMudXVpZFRvU2lkLmhhcyhzaWRPclV1aWQpKSByZXR1cm4gc2lkT3JVdWlkO1xuICAgIC8vIE90aGVyd2lzZSB0cnkgdG8gbWFwIGZyb20gc2lkIOKGkiB1dWlkXG4gICAgcmV0dXJuIHRoaXMuc2lkVG9VdWlkLmdldChzaWRPclV1aWQpID8/IHNpZE9yVXVpZDtcbiAgfVxuXG4gIGFzeW5jIGFjdGlvbl90b29sYm94X2Zsb29ycGxhbihzZGs6IGFueSkge1xuICAgIGlmICh0aGlzLmluVHJhbnNpdGlvbk1vZGUgfHwgdGhpcy5pblRyYW5zaXRpb25Td2VlcCkge1xuICAgICAgY29uc29sZS5sb2coJ3ZpZXdlciBpcyBpbiB0cmFuc2l0aW9uLCBjYW5ub3QgZ28gZmxvb3JwbGFuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZmxvb3JwbGFuUmVxdWVzdGVkID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2RrLk1vZGUubW92ZVRvKCdtb2RlLmZsb29ycGxhbicpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdjYW5ub3QgZ28gdG8gZmxvb3JwbGFuJywgZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuZmxvb3JwbGFuUmVxdWVzdGVkID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gYSBkb2xsaG91c2UgY2FtZXJhIGxvb2tzIHN0cmFpZ2h0IGRvd24sIE1hdHRlcnBvcnQgcmVwb3J0cyAnbW9kZS5mbG9vcnBsYW4nXG4gICAqIChpdHMgXCJwZWVrYWJvb1wiIGNvcnJlY3RlZCBtb2RlKSBhbHRob3VnaCB0aGUgY2FtZXJhIGlzIHN0aWxsIGluIGRvbGxob3VzZS5cbiAgICogVGhlIG5hdGl2ZSBtb2RlIGJ1dHRvbnMgYXJlIGhpZGRlbiwgc28gc3VjaCBhIHN3aXRjaCB0aGF0IHdlIGRpZCBub3QgcmVxdWVzdFxuICAgKiBpcyBuZXZlciBhIHVzZXIgYWN0aW9uIGFuZCBtdXN0IG5vdCBiZSB0cmVhdGVkIGFzIGEgcmVhbCBtb2RlIGNoYW5nZS5cbiAgICovXG4gIGlzVW5yZXF1ZXN0ZWRGbG9vcnBsYW5Td2l0Y2gocHJldmlvdXNNb2RlOiBzdHJpbmcsIG5ld01vZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBwcmV2aW91c01vZGUgPT09ICdtb2RlLmRvbGxob3VzZScgJiZcbiAgICAgIG5ld01vZGUgPT09ICdtb2RlLmZsb29ycGxhbicgJiZcbiAgICAgICF0aGlzLmZsb29ycGxhblJlcXVlc3RlZFxuICAgICk7XG4gIH1cblxuICBhY3Rpb25fdG9vbGJveF9pbnNpZGVfdmlldyhzZGs6IGFueSkge1xuICAgIHNkay5Nb2RlLm1vdmVUbygnbW9kZS5pbnNpZGUnKTtcbiAgfVxuXG4gIGFjdGlvblNob3dBbGxGbG9vcnMoc2RrOiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgc2RrLkZsb29yLnNob3dBbGwoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZygnY2Fubm90IHNob3cgYWxsIGZsb29ycycsIGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFjdGlvbl90b29sYm94X2RvbGxob3VzZShzZGs6IGFueSkge1xuICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaW5UcmFuc2l0aW9uTW9kZSB8fCB0aGlzLmluVHJhbnNpdGlvblN3ZWVwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCd2aWV3ZXIgaXMgaW4gdHJhbnNpdGlvbiwgY2Fubm90IGdvIGRvbGxob3VzZScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzZGsuTW9kZS5tb3ZlVG8oJ21vZGUuZG9sbGhvdXNlJyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjYW5ub3QgZ28gdG8gZG9sbGhvdXNlJywgZSk7XG4gICAgICB9XG4gICAgfSwgMTIwMCk7XG4gIH1cblxuICBhc3luYyBhY3Rpb25fZ29fdG9fZmxvb3Ioc2RrOiBhbnksIGZsb29yTmFtZTogc3RyaW5nLCBtYXR0ZXJwb3J0Rmxvb3JTZXF1ZW5jZTogbnVtYmVyID0gbnVsbCkge1xuICAgIGlmICghdGhpcy5mbG9vcnMpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdGbG9vciBhcmUgbm90IGxvYWRlZCB5ZXQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGZsb29yTWF0dGVycG9ydCA9IHRoaXMuZmxvb3JzLmZpbmQoXG4gICAgICAoZmxvb3IpID0+IGZsb29yLnNlcXVlbmNlID09PSBtYXR0ZXJwb3J0Rmxvb3JTZXF1ZW5jZVxuICAgICk7XG4gICAgaWYgKCFmbG9vck1hdHRlcnBvcnQpIHtcbiAgICAgIGZsb29yTWF0dGVycG9ydCA9IHRoaXMuZmxvb3JzLmZpbmQoXG4gICAgICAgIChmbG9vcikgPT4gZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLm5hbWUpICYmIGZsb29yLm5hbWUgIT0gJydcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghZmxvb3JNYXR0ZXJwb3J0KSB7XG4gICAgICBmbG9vck1hdHRlcnBvcnQgPSB0aGlzLmZsb29ycy5maW5kKChmbG9vcikgPT5cbiAgICAgICAgZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLmlkKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGZsb29yTWF0dGVycG9ydCkge1xuICAgICAgbGV0IHJldHJ5ID0gdHJ1ZTtcbiAgICAgIHdoaWxlIChyZXRyeSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGZsb29ySW5kZXggPSBhd2FpdCBzZGsuRmxvb3IubW92ZVRvKGZsb29yTWF0dGVycG9ydC5zZXF1ZW5jZSk7XG4gICAgICAgICAgY29uc29sZS5kZWJ1ZyhcIm1vdmVkIHRvIGZsb29ySW5kZXhcIiwgZmxvb3JJbmRleCk7XG4gICAgICAgICAgcmV0cnkgPSBmYWxzZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnQ2Fubm90IG1vdmUgdG8gRmxvb3InLCBlcnJvcik7XG4gICAgICAgICAgYXdhaXQgd2FpdCgxMDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybignTm8gbWF0dGVycG9ydCBmbG9vciBmb3VuZCB0byBtb3ZlIHRvJyk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKFwiYWN0aW9uX2dvX3RvX2Zsb29yLmZsb29yTWF0dGVycG9ydFwiLCBmbG9vck1hdHRlcnBvcnQpO1xuICAgIGNvbnNvbGUubG9nKFwiYWN0aW9uX2dvX3RvX2Zsb29yLmZsb29yTmFtZVwiLCBmbG9vck5hbWUpO1xuICAgIGNvbnNvbGUubG9nKFwiYWN0aW9uX2dvX3RvX2Zsb29yLm1hdHRlcnBvcnRGbG9vclNlcXVlbmNlXCIsIG1hdHRlcnBvcnRGbG9vclNlcXVlbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZSB0byBhIHN3ZWVwLiBUaGUgY2FsbGVyIGNhbiBwYXNzIGVpdGhlciBhIHNpZCBvciBhIHV1aWQ7XG4gICAqIHRoaXMgbWV0aG9kIHJlc29sdmVzIGl0IHRvIHRoZSBTREsgc2lkIGJlZm9yZSBjYWxsaW5nIFN3ZWVwLm1vdmVUbygpLlxuICAgKi9cbiAgYXN5bmMgYWN0aW9uX2dvX3RvX3N3ZWVwKHNkazogYW55LCBzd2VlcDogc3RyaW5nLCByb3RhdGlvbj86IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfSB8IG51bGwpIHtcbiAgICBjb25zdCByZXNvbHZlZFNpZCA9IHRoaXMucmVzb2x2ZVN3ZWVwU2lkKHN3ZWVwKTtcbiAgICBpZiAodGhpcy5mb3JiaWRkZW5Td2VlcHMuaW5jbHVkZXMoc3dlZXApIHx8IHRoaXMuZm9yYmlkZGVuU3dlZXBzLmluY2x1ZGVzKHJlc29sdmVkU2lkKSkge1xuICAgICAgY29uc29sZS5sb2coJ3VzZXIgaXMgbm90IGFsbG93ZWQgdG8gZ28gdG8gdGhpcyBzd2VlcCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNEZXZNb2RlKCkgJiYgcmVzb2x2ZWRTaWQgIT09IHN3ZWVwKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbYWN0aW9uX2dvX3RvX3N3ZWVwXSBSZXNvbHZlZCB1dWlkIFwiJHtzd2VlcH1cIiDihpIgc2lkIFwiJHtyZXNvbHZlZFNpZH1cImApO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSB0cnVlO1xuICAgICAgICBhd2FpdCBzZGsuU3dlZXAubW92ZVRvKHJlc29sdmVkU2lkLCB7XG4gICAgICAgICAgdHJhbnNpdGlvbjogc2RrLkNhbWVyYS5UcmFuc2l0aW9uVHlwZS5JTlNUQU5ULFxuICAgICAgICAgIHRyYW5zaXRpb25UaW1lOiAxNTAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Td2VlcCA9IGZhbHNlO1xuICAgICAgICBjb25zb2xlLmxvZygnQ2Fubm90IG1vdmUgdG8gc3dlZXAnLCBlcnJvcik7XG4gICAgICB9XG4gICAgICBpZiAocm90YXRpb24pIHtcbiAgICAgICAgYXdhaXQgc2RrLkNhbWVyYS5zZXRSb3RhdGlvbihyb3RhdGlvbiwgeyBzcGVlZDogMTAwIH0pO1xuICAgICAgfVxuICAgIH0sIDEwMDApO1xuICAgIGNvbnNvbGUubG9nKFwiYWN0aW9uX2dvX3RvX3N3ZWVwLnN3ZWVwXCIsIHN3ZWVwKTtcbiAgICBjb25zb2xlLmxvZyhcImFjdGlvbl9nb190b19zd2VlcC5yb3RhdGlvblwiLCByb3RhdGlvbik7XG4gICAgY29uc29sZS5sb2coXCJhY3Rpb25fZ29fdG9fc3dlZXAucmVzb2x2ZWRTaWRcIiwgcmVzb2x2ZWRTaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGUgZm9yYmlkZGVuIHN3ZWVwcy4gUmVzb2x2ZXMgZWFjaCBzd2VlcCBJRCB0byBzaWQgYmVmb3JlIGNhbGxpbmcgU0RLLlxuICAgKi9cbiAgYXN5bmMgcmVtb3ZlRm9yYmlkZGVuU3dlZXBzKHNkazogYW55LCBmb3JiaWRkZW5Td2VlcHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5mb3JiaWRkZW5Td2VlcHMgPSBbLi4uZm9yYmlkZGVuU3dlZXBzXTtcbiAgICBsZXQgcmVtb3ZlZCA9IDA7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBmb3JiaWRkZW5Td2VlcHMubWFwKGFzeW5jIChzd2VlcCkgPT4ge1xuICAgICAgICBjb25zdCByZXNvbHZlZFNpZCA9IHRoaXMucmVzb2x2ZVN3ZWVwU2lkKHN3ZWVwKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBzZGsuU3dlZXAuZGlzYWJsZShyZXNvbHZlZFNpZCk7XG4gICAgICAgICAgcmVtb3ZlZCArPSAxO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIGNvbnNvbGUubG9nKCdyZW1vdmVkIHN3ZWVwczonLCByZW1vdmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIHRvIGEgcG9zaXRpb25cbiAgICogQHBhcmFtIHNkayBcbiAgICogQHBhcmFtIHBvc2l0aW9uIFxuICAgKiBAcGFyYW0gcm90YXRpb24gXG4gICAqIEBwYXJhbSBvcHRpb25zIFxuICAgKi9cbiAgcHVibGljIGFzeW5jIG1vdmVfdG9fcG9zaXRpb24oXG4gICAgc2RrOiBhbnksXG4gICAgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlciB9LFxuICAgIHJvdGF0aW9uOiB7IHlhdzogbnVtYmVyOyBwaXRjaD86IG51bWJlcjsgcm9sbD86IG51bWJlciB9IHwgbnVsbCxcbiAgICBvcHRpb25zPzoge1xuICAgICAgdHJhbnNpdGlvbj86ICdGTFknIHwgJ0lOU1RBTlQnIHwgJ0lNTUVESUFURSc7XG4gICAgICBkdXJhdGlvbk1zPzogbnVtYmVyO1xuICAgICAgYW5nbGVzSW5EZWdyZWVzPzogYm9vbGVhbjtcbiAgICAgIG9mZnNldD86IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlciB9O1xuICAgIH1cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gVmFsaWRhdGUgU0RLXG4gICAgaWYgKCFzZGspIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWF0dGVycG9ydCBTREsgaW5zdGFuY2UgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICAvLyBNZXJnZSBvcHRpb25zIHdpdGggZGVmYXVsdHNcbiAgICBjb25zdCB7XG4gICAgICB0cmFuc2l0aW9uID0gJ0ZMWScsXG4gICAgICBkdXJhdGlvbk1zID0gODAwLFxuICAgICAgYW5nbGVzSW5EZWdyZWVzID0gdHJ1ZSxcbiAgICAgIG9mZnNldCA9IHsgeDogMCwgeTogMCwgejogMCB9XG4gICAgfSA9IG9wdGlvbnMgfHwge307XG5cbiAgICBjb25zdCBkZWdUb1JhZCA9IChkOiBudW1iZXIpID0+IGQgKiBNYXRoLlBJIC8gMTgwO1xuXG4gICAgLy8gUHJlcGFyZSByb3RhdGlvbiB2YWx1ZXMgKGRlZmF1bHQgdG8gMCB3aGVuIG5vdCBwcm92aWRlZClcbiAgICBjb25zdCB5YXcgPSByb3RhdGlvbj8ueWF3ID8/IDA7XG4gICAgY29uc3QgcGl0Y2ggPSByb3RhdGlvbj8ucGl0Y2ggPz8gMDtcbiAgICBjb25zdCByb2xsID0gcm90YXRpb24/LnJvbGwgPz8gMDtcblxuICAgIC8vIENvbnZlcnQgdG8gcmFkaWFucyBpZiBhbmdsZXMgYXJlIHByb3ZpZGVkIGluIGRlZ3JlZXNcbiAgICBjb25zdCByb3RZYXcgPSBhbmdsZXNJbkRlZ3JlZXMgPyBkZWdUb1JhZCh5YXcpIDogeWF3O1xuICAgIGNvbnN0IHJvdFBpdGNoID0gYW5nbGVzSW5EZWdyZWVzID8gZGVnVG9SYWQocGl0Y2gpIDogcGl0Y2g7XG4gICAgY29uc3Qgcm90Um9sbCA9IGFuZ2xlc0luRGVncmVlcyA/IGRlZ1RvUmFkKHJvbGwpIDogcm9sbDtcblxuICAgIC8vIFByZXNlcnZlIHByZXZpb3VzIHRyYW5zaXRpb24gZmxhZyBhbmQgbWFyayBhcyBpbi10cmFuc2l0aW9uXG4gICAgY29uc3QgcHJldkluVHJhbnNpdGlvbiA9IHRoaXMuaW5UcmFuc2l0aW9uTW9kZTtcbiAgICB0aGlzLmluVHJhbnNpdGlvbk1vZGUgPSB0cnVlO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEF0dGVtcHQgdG8gdXNlIENhbWVyYS5sb29rQXQgd2hlbiBhdmFpbGFibGVcbiAgICAgIGlmIChzZGs/LkNhbWVyYT8ubG9va0F0KSB7XG4gICAgICAgIGNvbnN0IGxvb2tBdE9wdHM6IGFueSA9IHt9O1xuICAgICAgICAvLyBQcmVmZXIgU0RLIGNvbnN0YW50cyB3aGVuIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBmYWxsYmFjayBzdHJpbmdcbiAgICAgICAgaWYgKHNkay5DYW1lcmEuVHJhbnNpdGlvblR5cGUgJiYgc2RrLkNhbWVyYS5UcmFuc2l0aW9uVHlwZVt0cmFuc2l0aW9uXSkge1xuICAgICAgICAgIGxvb2tBdE9wdHMudHJhbnNpdGlvbiA9IHNkay5DYW1lcmEuVHJhbnNpdGlvblR5cGVbdHJhbnNpdGlvbl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9va0F0T3B0cy50cmFuc2l0aW9uID0gdHJhbnNpdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBsb29rQXRPcHRzLmR1cmF0aW9uID0gZHVyYXRpb25NcztcbiAgICAgICAgaWYgKG9mZnNldCkgbG9va0F0T3B0cy5vZmZzZXQgPSBvZmZzZXQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBzZGsuQ2FtZXJhLmxvb2tBdChwb3NpdGlvbiwgbG9va0F0T3B0cyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIElmIGxvb2tBdCBmYWlscywgY29udGludWUgdG8gZmFsbGJhY2tzIGJlbG93XG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLmRlYnVnKCdDYW1lcmEubG9va0F0IGZhaWxlZCwgZmFsbGluZyBiYWNrIHRvIHNldFN0YXRlJywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiBsb29rQXQgaXMgbm90IHByZXNlbnQgb3IgZmFpbGVkLCB0cnkgc2V0U3RhdGUgZm9yIHBvc2l0aW9uXG4gICAgICBpZiAoIXNkaz8uQ2FtZXJhPy5sb29rQXQgJiYgc2RrPy5DYW1lcmE/LnNldFN0YXRlKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlUG9zOiBhbnkgPSB7XG4gICAgICAgICAgcG9zaXRpb246IHsgeDogcG9zaXRpb24ueCwgeTogcG9zaXRpb24ueSwgejogcG9zaXRpb24ueiB9XG4gICAgICAgIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgc2RrLkNhbWVyYS5zZXRTdGF0ZShzdGF0ZVBvcyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS5kZWJ1ZygnQ2FtZXJhLnNldFN0YXRlKHBvc2l0aW9uKSBmYWlsZWQnLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFwcGx5IHJvdGF0aW9uIGlmIHByb3ZpZGVkXG4gICAgICBpZiAocm90YXRpb24pIHtcbiAgICAgICAgLy8gUHJlZmVyIHNldFJvdGF0aW9uIHdoZW4gYXZhaWxhYmxlXG4gICAgICAgIGlmIChzZGs/LkNhbWVyYT8uc2V0Um90YXRpb24pIHtcbiAgICAgICAgICAvLyBUcnkgVmVjdG9yMiBzaWduYXR1cmUgeyB4OiB5YXcsIHk6IHBpdGNoIH0gZmlyc3RcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgc2RrLkNhbWVyYS5zZXRSb3RhdGlvbih7IHg6IHJvdFlhdywgeTogcm90UGl0Y2ggfSwgeyBzcGVlZDogTWF0aC5tYXgoMTAsIE1hdGguZmxvb3IoZHVyYXRpb25NcyAvIDEwKSkgfSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyMSkge1xuICAgICAgICAgICAgLy8gSWYgdGhhdCBmYWlscywgdHJ5IFZlY3RvcjMgc2lnbmF0dXJlIHsgeDogcGl0Y2gsIHk6IHlhdywgejogcm9sbCB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhd2FpdCBzZGsuQ2FtZXJhLnNldFJvdGF0aW9uKHsgeDogcm90UGl0Y2gsIHk6IHJvdFlhdywgejogcm90Um9sbCB9LCB7IHNwZWVkOiBNYXRoLm1heCgxMCwgTWF0aC5mbG9vcihkdXJhdGlvbk1zIC8gMTApKSB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycjIpIHtcbiAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLmRlYnVnKCdDYW1lcmEuc2V0Um90YXRpb24gZmFpbGVkIHdpdGggbXVsdGlwbGUgc2lnbmF0dXJlcycsIGVycjEsIGVycjIpO1xuICAgICAgICAgICAgICAvLyBGYWxsYmFjayB0byBzZXRTdGF0ZSB3aXRoIHJvdGF0aW9uIGlmIGF2YWlsYWJsZVxuICAgICAgICAgICAgICBpZiAoc2RrPy5DYW1lcmE/LnNldFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHNkay5DYW1lcmEuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICByb3RhdGlvbjogeyB4OiByb3RQaXRjaCwgeTogcm90WWF3LCB6OiByb3RSb2xsIH0sXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7IHg6IHBvc2l0aW9uLngsIHk6IHBvc2l0aW9uLnksIHo6IHBvc2l0aW9uLnogfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyMykge1xuICAgICAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLmRlYnVnKCdGYWxsYmFjayBDYW1lcmEuc2V0U3RhdGUocm90YXRpb24pIGZhaWxlZCcsIGVycjMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzZGs/LkNhbWVyYT8uc2V0U3RhdGUpIHtcbiAgICAgICAgICAvLyBJZiBzZXRSb3RhdGlvbiBpcyBub3QgYXZhaWxhYmxlLCB1c2Ugc2V0U3RhdGUgdG8gYXBwbHkgcm90YXRpb25cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgc2RrLkNhbWVyYS5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIHJvdGF0aW9uOiB7IHg6IHJvdFBpdGNoLCB5OiByb3RZYXcsIHo6IHJvdFJvbGwgfSxcbiAgICAgICAgICAgICAgcG9zaXRpb246IHsgeDogcG9zaXRpb24ueCwgeTogcG9zaXRpb24ueSwgejogcG9zaXRpb24ueiB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS5kZWJ1ZygnQ2FtZXJhLnNldFN0YXRlKHJvdGF0aW9uKSBmYWlsZWQnLCBlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUud2FybignTm8gbWV0aG9kIGF2YWlsYWJsZSB0byBhcHBseSByb3RhdGlvbiAoc2V0Um90YXRpb24vc2V0U3RhdGUgbm90IGZvdW5kKScpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFdhaXQgYSBiaXQgdG8gYWxsb3cgdHJhbnNpdGlvbiBhbmltYXRpb25zIHRvIGNvbXBsZXRlXG4gICAgICBhd2FpdCB3YWl0KGR1cmF0aW9uTXMgKyAxMjApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gUmUtdGhyb3cgYWZ0ZXIgZW5zdXJpbmcgZmxhZ3MgYXJlIHJlc3RvcmVkIGluIGZpbmFsbHlcbiAgICAgIHRocm93IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gUmVzdG9yZSBwcmV2aW91cyB0cmFuc2l0aW9uIGZsYWdcbiAgICAgIHRoaXMuaW5UcmFuc2l0aW9uTW9kZSA9IHByZXZJblRyYW5zaXRpb247XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBzd2VlcCBhcyBhICoqdXVpZCoqIChmb3IgZGF0YWJhc2UgbWF0Y2hpbmcpLlxuICAgKiBUaGUgU0RLJ3MgcG9zZUNhbWVyYS5zd2VlcCBpcyBhIHNpZDsgd2UgdHJhbnNsYXRlIGl0LlxuICAgKi9cbiAgZ2V0Q3VycmVudFN3ZWVwKHBvc2VDYW1lcmE6IGFueSk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IHNpZCA9IHBvc2VDYW1lcmE/LnN3ZWVwIHx8IG51bGw7XG4gICAgaWYgKCFzaWQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTd2VlcFV1aWQoc2lkKTtcbiAgfVxuXG4gIHNldENhbWVyYU1vZGUobW9kZTogc3RyaW5nKSB7XG4gICAgdGhpcy5pblRyYW5zaXRpb25Td2VlcCA9IGZhbHNlO1xuICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgY2FzZSAnbW9kZS5kb2xsaG91c2UnOlxuICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5ET0xMSE9VU0U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbW9kZS5mbG9vcnBsYW4nOlxuICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5GTE9PUlBMQU47XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbW9kZS5pbnNpZGUnOlxuICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5JTlNJREU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbW9kZS50cmFuc2l0aW9uaW5nJzpcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuVFJBTlNJVElPTklORztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5PVVRTSURFO1xuICAgIH1cbiAgICB0aGlzLm9uQ2FtZXJhTW9kZUNoYW5nZWQubmV4dCh0aGlzLmN1cnJlbnRDYW1lcmFNb2RlKTtcbiAgfVxufVxuIl19
@@ -93,11 +93,11 @@ export class MatterportPointerService {
93
93
  }
94
94
  updateCursorDisplay(poseMatterport) {
95
95
  if (this.textDisplayCursorPositionPanel && poseMatterport) {
96
- this.textDisplayCursorPositionPanel.innerHTML = `position:
97
- ${pointToString(poseMatterport.position)}\n
98
- normal:
99
- ${pointToString(poseMatterport.normal)}\n
100
- floorId:
96
+ this.textDisplayCursorPositionPanel.innerHTML = `position:
97
+ ${pointToString(poseMatterport.position)}\n
98
+ normal:
99
+ ${pointToString(poseMatterport.normal)}\n
100
+ floorId:
101
101
  ${poseMatterport.floorId}`;
102
102
  if (this.getCursorPositionButton) {
103
103
  this.getCursorPositionButton.style.display = 'none';
@@ -127,4 +127,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
127
127
  providedIn: 'root',
128
128
  }]
129
129
  }], ctorParameters: () => [] });
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1wb2ludGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21hdHRlcnBvcnQtcG9pbnRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQUtuRCxNQUFNLE9BQU8sd0JBQXdCO0lBQzNCLGFBQWEsR0FBdUIsSUFBSSxDQUFDO0lBQ3pDLHVCQUF1QixHQUF1QixJQUFJLENBQUM7SUFDbkQsOEJBQThCLEdBQXVCLElBQUksQ0FBQztJQUUxRCw2QkFBNkIsR0FBRyxLQUFLLENBQUM7SUFDdEMsNkJBQTZCLENBQU07SUFDbkMsWUFBWSxDQUFNO0lBQ2xCLHlCQUF5QixDQUFNO0lBRXZDLGdCQUFnQixDQUFDO0lBRWpCLElBQUksQ0FDRixTQUFzQixFQUN0QixhQUEwQixFQUMxQix1QkFBb0MsRUFDcEMsOEJBQTJDLEVBQzNDLFNBSUM7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7UUFDdkQsSUFBSSxDQUFDLDhCQUE4QixHQUFHLDhCQUE4QixDQUFDO1FBRXJFLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0UsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENB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Q0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hGLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsZ0NBQWdDLENBQUMsS0FBYztRQUM3QyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsS0FBSyxDQUFDO0lBQzdDLENBQUM7d0dBdkpVLHdCQUF3Qjs0R0FBeEIsd0JBQXdCLGNBRnZCLE1BQU07OzRGQUVQLHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHBvaW50VG9TdHJpbmcgfSBmcm9tICcuLi9oZWxwZXJzLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1hdHRlcnBvcnRQb2ludGVyU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBwb2ludGVyQnV0dG9uOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b246IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSB0ZXh0RGlzcGxheUN1cnNvclBvc2l0aW9uUGFuZWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgY3Vyc29yUG9zaXRpb25CdXR0b25EaXNwbGF5ZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIGludGVydmFsQ3Vyc29yUG9pbnRlclBvc2l0aW9uOiBhbnk7XHJcbiAgcHJpdmF0ZSB0aW1lclBvaW50ZXI6IGFueTtcclxuICBwcml2YXRlIG9sZFBvc2VNYXR0ZXJwb3J0UG9zaXRpb246IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgaW5pdChcclxuICAgIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXHJcbiAgICBwb2ludGVyQnV0dG9uOiBIVE1MRWxlbWVudCxcclxuICAgIGdldEN1cnNvclBvc2l0aW9uQnV0dG9uOiBIVE1MRWxlbWVudCxcclxuICAgIHRleHREaXNwbGF5Q3Vyc29yUG9zaXRpb25QYW5lbDogSFRNTEVsZW1lbnQsXHJcbiAgICBjYWxsYmFja3M6IHtcclxuICAgICAgb25MZWZ0Q2xpY2s6IChldnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XHJcbiAgICAgIG9uUmlnaHRDbGljazogKGV2dDogTW91c2VFdmVudCkgPT4gdm9pZDtcclxuICAgICAgb25NaWRkbGVDbGljazogKGV2dDogTW91c2VFdmVudCkgPT4gdm9pZDtcclxuICAgIH1cclxuICApIHtcclxuICAgIHRoaXMucG9pbnRlckJ1dHRvbiA9IHBvaW50ZXJCdXR0b247XHJcbiAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uID0gZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b247XHJcbiAgICB0aGlzLnRleHREaXNwbGF5Q3Vyc29yUG9zaXRpb25QYW5lbCA9IHRleHREaXNwbGF5Q3Vyc29yUG9zaXRpb25QYW5lbDtcclxuXHJcbiAgICBpZiAodGhpcy5wb2ludGVyQnV0dG9uKSB7XHJcbiAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNhbGxiYWNrcy5vbkxlZnRDbGljayk7XHJcbiAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIGNhbGxiYWNrcy5vblJpZ2h0Q2xpY2spO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uKSB7XHJcbiAgICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjYWxsYmFja3Mub25NaWRkbGVDbGljayk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGFydFBvaW50ZXJUcmljayhzZGs6IGFueSwgY29udGFpbmVyOiBhbnksIGdldFBvc2U6ICgpID0+IGFueSwgZ2V0UG9zZUNhbWVyYTogKCkgPT4gYW55LCBnZXRJbnRlcmFjdGlvbk1vZGU6ICgpID0+IG51bWJlciwgZ2V0TWF0dGVydGFnVG9Gb2xsb3c6ICgpID0+IHN0cmluZyB8IG51bGwpIHtcclxuICAgIHRoaXMudGltZXJQb2ludGVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICB0aGlzLnVwZGF0ZVBvaW50ZXJUcmljayhzZGssIGNvbnRhaW5lciwgZ2V0UG9zZSgpLCBnZXRQb3NlQ2FtZXJhKCksIGdldEludGVyYWN0aW9uTW9kZSgpLCBnZXRNYXR0ZXJ0YWdUb0ZvbGxvdygpKTtcclxuICAgIH0sIDUwKTtcclxuICB9XHJcblxyXG4gIHN0b3BQb2ludGVyVHJpY2soKSB7XHJcbiAgICBjbGVhckludGVydmFsKHRoaXMudGltZXJQb2ludGVyKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0QWRtaW5DdXJzb3JUcmFja2VyKHNkazogYW55LCBjb250YWluZXI6IGFueSwgZ2V0UG9zZTogKCkgPT4gYW55LCBnZXRQb3NlQ2FtZXJhOiAoKSA9PiBhbnkpIHtcclxuICAgIGlmICghIXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24gJiZcclxuICAgICAgKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignZGV2JykgIT09IC0xIHx8IGRvY3VtZW50LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignbG9jYWxob3N0JykgIT09IC0xKSkge1xyXG4gICAgICB0aGlzLmludGVydmFsQ3Vyc29yUG9pbnRlclBvc2l0aW9uID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHBvc2VNYXR0ZXJwb3J0ID0gZ2V0UG9zZSgpO1xyXG4gICAgICAgIGlmICghcG9zZU1hdHRlcnBvcnQpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgbmV4dFNob3cgPSBwb3NlTWF0dGVycG9ydC50aW1lICsgMTAwMDtcclxuICAgICAgICBpZiAobmV3IERhdGUoKS5nZXRUaW1lKCkgPiBuZXh0U2hvdykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb25CdXR0b25EaXNwbGF5ZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICBjb25zdCBzaXplID0ge1xyXG4gICAgICAgICAgICB3OiBjb250YWluZXIuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgIGg6IGNvbnRhaW5lci5jbGllbnRIZWlnaHQsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgY29uc3QgY29vcmQgPSBzZGsuQ29udmVyc2lvbi53b3JsZFRvU2NyZWVuKHBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLCBnZXRQb3NlQ2FtZXJhKCksIHNpemUpO1xyXG4gICAgICAgICAgdGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbiEuc3R5bGUubGVmdCA9IGAke2Nvb3JkLnggLSAyNX1weGA7XHJcbiAgICAgICAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uIS5zdHlsZS50b3AgPSBgJHtjb29yZC55IC0gMjJ9cHhgO1xyXG4gICAgICAgICAgdGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbiEuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uQnV0dG9uRGlzcGxheWVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDUwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdG9wQWRtaW5DdXJzb3JUcmFja2VyKCkge1xyXG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsQ3Vyc29yUG9pbnRlclBvc2l0aW9uKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVBvaW50ZXJUcmljayhzZGs6IGFueSwgY29udGFpbmVyOiBhbnksIHBvc2VNYXR0ZXJwb3J0OiBhbnksIHBvc2VDYW1lcmE6IGFueSwgaW50ZXJhY3Rpb25Nb2RlOiBudW1iZXIsIG1hdHRlcnRhZ1RvRm9sbG93OiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICBpZiAoIXRoaXMucG9pbnRlckJ1dHRvbikgcmV0dXJuO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgaW50ZXJhY3Rpb25Nb2RlICE9PSAwICYmIC8vIFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUXHJcbiAgICAgIG1hdHRlcnRhZ1RvRm9sbG93ICYmXHJcbiAgICAgIHBvc2VNYXR0ZXJwb3J0ICYmXHJcbiAgICAgIHRoaXMuZ2V0RGlzdFBvc2l0aW9uKHNkaywgY29udGFpbmVyLCBwb3NlQ2FtZXJhLCBwb3NlTWF0dGVycG9ydC5wb3NpdGlvbiwgdGhpcy5vbGRQb3NlTWF0dGVycG9ydFBvc2l0aW9uKSA+IDI1XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblxyXG4gICAgICBjb25zdCBzaXplID0ge1xyXG4gICAgICAgIHc6IGNvbnRhaW5lci5jbGllbnRXaWR0aCxcclxuICAgICAgICBoOiBjb250YWluZXIuY2xpZW50SGVpZ2h0LFxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBjb29yZHMgPSBzZGsuQ29udmVyc2lvbi53b3JsZFRvU2NyZWVuKFxyXG4gICAgICAgIHBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLFxyXG4gICAgICAgIHBvc2VDYW1lcmEsXHJcbiAgICAgICAgc2l6ZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnBvaW50ZXJCdXR0b24uc3R5bGUubGVmdCA9IGAke2Nvb3Jkcy54ICogTWF0aC5zaWduKGNvb3Jkcy54KSAtIDI1fXB4YDtcclxuICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLnN0eWxlLnRvcCA9IGAke2Nvb3Jkcy55ICogTWF0aC5zaWduKGNvb3Jkcy54KSAtIDI1fXB4YDtcclxuICAgICAgdGhpcy5vbGRQb3NlTWF0dGVycG9ydFBvc2l0aW9uID0ge1xyXG4gICAgICAgIC4uLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RGlzdFBvc2l0aW9uKHNkazogYW55LCBjb250YWluZXI6IGFueSwgcG9zZUNhbWVyYTogYW55LCBwb3MxOiBhbnksIHBvczI6IGFueSkge1xyXG4gICAgaWYgKCFwb3MxIHx8ICFwb3MyKSByZXR1cm4gMTAwOyAvLyBGb3JjZSB1cGRhdGUgaWYgb25lIGlzIG1pc3NpbmdcclxuICAgIGNvbnN0IHNpemUgPSB7XHJcbiAgICAgIHc6IGNvbnRhaW5lci5jbGllbnRXaWR0aCxcclxuICAgICAgaDogY29udGFpbmVyLmNsaWVudEhlaWdodCxcclxuICAgIH07XHJcbiAgICBjb25zdCBjb29yZHMxID0gc2RrLkNvbnZlcnNpb24ud29ybGRUb1NjcmVlbihwb3MxLCBwb3NlQ2FtZXJhLCBzaXplKTtcclxuICAgIGNvbnN0IGNvb3JkczIgPSBzZGsuQ29udmVyc2lvbi53b3JsZFRvU2NyZWVuKHBvczIsIHBvc2VDYW1lcmEsIHNpemUpO1xyXG4gICAgcmV0dXJuIE1hdGguc3FydChcclxuICAgICAgKGNvb3JkczEueCAtIGNvb3JkczIueCkgKiogMiArIChjb29yZHMxLnkgLSBjb29yZHMyLnkpICoqIDJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDdXJzb3JEaXNwbGF5KHBvc2VNYXR0ZXJwb3J0OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnRleHREaXNwbGF5Q3Vyc29yUG9zaXRpb25QYW5lbCAmJiBwb3NlTWF0dGVycG9ydCkge1xyXG4gICAgICB0aGlzLnRleHREaXNwbGF5Q3Vyc29yUG9zaXRpb25QYW5lbC5pbm5lckhUTUwgPSBgcG9zaXRpb246XHJcbiAgICAgICAgICAgJHtwb2ludFRvU3RyaW5nKHBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uKX1cXG5cclxuICAgICAgICAgICBub3JtYWw6XHJcbiAgICAgICAgICAgJHtwb2ludFRvU3RyaW5nKHBvc2VNYXR0ZXJwb3J0Lm5vcm1hbCl9XFxuXHJcbiAgICAgICAgICAgZmxvb3JJZDpcclxuICAgICAgICAgICAke3Bvc2VNYXR0ZXJwb3J0LmZsb29ySWR9YDtcclxuICAgICAgaWYgKHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24pIHtcclxuICAgICAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyKGNhbGxiYWNrczoge1xyXG4gICAgb25MZWZ0Q2xpY2s6IChldnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XHJcbiAgICBvblJpZ2h0Q2xpY2s6IChldnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XHJcbiAgICBvbk1pZGRsZUNsaWNrOiAoZXZ0OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xyXG4gIH0pIHtcclxuICAgIGlmICh0aGlzLnBvaW50ZXJCdXR0b24pIHtcclxuICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2FsbGJhY2tzLm9uTGVmdENsaWNrKTtcclxuICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgY2FsbGJhY2tzLm9uUmlnaHRDbGljayk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbikge1xyXG4gICAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2FsbGJhY2tzLm9uTWlkZGxlQ2xpY2spO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdG9wUG9pbnRlclRyaWNrKCk7XHJcbiAgICB0aGlzLnN0b3BBZG1pbkN1cnNvclRyYWNrZXIoKTtcclxuICB9XHJcblxyXG4gIHNldEN1cnNvclBvc2l0aW9uQnV0dG9uRGlzcGxheWVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmN1cnNvclBvc2l0aW9uQnV0dG9uRGlzcGxheWVkID0gdmFsdWU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1wb2ludGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21hdHRlcnBvcnQtcG9pbnRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQUtuRCxNQUFNLE9BQU8sd0JBQXdCO0lBQzNCLGFBQWEsR0FBdUIsSUFBSSxDQUFDO0lBQ3pDLHVCQUF1QixHQUF1QixJQUFJLENBQUM7SUFDbkQsOEJBQThCLEdBQXVCLElBQUksQ0FBQztJQUUxRCw2QkFBNkIsR0FBRyxLQUFLLENBQUM7SUFDdEMsNkJBQTZCLENBQU07SUFDbkMsWUFBWSxDQUFNO0lBQ2xCLHlCQUF5QixDQUFNO0lBRXZDLGdCQUFnQixDQUFDO0lBRWpCLElBQUksQ0FDRixTQUFzQixFQUN0QixhQUEwQixFQUMxQix1QkFBb0MsRUFDcEMsOEJBQTJDLEVBQzNDLFNBSUM7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7UUFDdkQsSUFBSSxDQUFDLDhCQUE4QixHQUFHLDhCQUE4QixDQUFDO1FBRXJFLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0UsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENB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Q0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hGLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsZ0NBQWdDLENBQUMsS0FBYztRQUM3QyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsS0FBSyxDQUFDO0lBQzdDLENBQUM7d0dBdkpVLHdCQUF3Qjs0R0FBeEIsd0JBQXdCLGNBRnZCLE1BQU07OzRGQUVQLHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBwb2ludFRvU3RyaW5nIH0gZnJvbSAnLi4vaGVscGVycy5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE1hdHRlcnBvcnRQb2ludGVyU2VydmljZSB7XG4gIHByaXZhdGUgcG9pbnRlckJ1dHRvbjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBnZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB0ZXh0RGlzcGxheUN1cnNvclBvc2l0aW9uUGFuZWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBjdXJzb3JQb3NpdGlvbkJ1dHRvbkRpc3BsYXllZCA9IGZhbHNlO1xuICBwcml2YXRlIGludGVydmFsQ3Vyc29yUG9pbnRlclBvc2l0aW9uOiBhbnk7XG4gIHByaXZhdGUgdGltZXJQb2ludGVyOiBhbnk7XG4gIHByaXZhdGUgb2xkUG9zZU1hdHRlcnBvcnRQb3NpdGlvbjogYW55O1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgaW5pdChcbiAgICBjb250YWluZXI6IEhUTUxFbGVtZW50LFxuICAgIHBvaW50ZXJCdXR0b246IEhUTUxFbGVtZW50LFxuICAgIGdldEN1cnNvclBvc2l0aW9uQnV0dG9uOiBIVE1MRWxlbWVudCxcbiAgICB0ZXh0RGlzcGxheUN1cnNvclBvc2l0aW9uUGFuZWw6IEhUTUxFbGVtZW50LFxuICAgIGNhbGxiYWNrczoge1xuICAgICAgb25MZWZ0Q2xpY2s6IChldnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gICAgICBvblJpZ2h0Q2xpY2s6IChldnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gICAgICBvbk1pZGRsZUNsaWNrOiAoZXZ0OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICAgIH1cbiAgKSB7XG4gICAgdGhpcy5wb2ludGVyQnV0dG9uID0gcG9pbnRlckJ1dHRvbjtcbiAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uID0gZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b247XG4gICAgdGhpcy50ZXh0RGlzcGxheUN1cnNvclBvc2l0aW9uUGFuZWwgPSB0ZXh0RGlzcGxheUN1cnNvclBvc2l0aW9uUGFuZWw7XG5cbiAgICBpZiAodGhpcy5wb2ludGVyQnV0dG9uKSB7XG4gICAgICB0aGlzLnBvaW50ZXJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjYWxsYmFja3Mub25MZWZ0Q2xpY2spO1xuICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgY2FsbGJhY2tzLm9uUmlnaHRDbGljayk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24pIHtcbiAgICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjYWxsYmFja3Mub25NaWRkbGVDbGljayk7XG4gICAgfVxuICB9XG5cbiAgc3RhcnRQb2ludGVyVHJpY2soc2RrOiBhbnksIGNvbnRhaW5lcjogYW55LCBnZXRQb3NlOiAoKSA9PiBhbnksIGdldFBvc2VDYW1lcmE6ICgpID0+IGFueSwgZ2V0SW50ZXJhY3Rpb25Nb2RlOiAoKSA9PiBudW1iZXIsIGdldE1hdHRlcnRhZ1RvRm9sbG93OiAoKSA9PiBzdHJpbmcgfCBudWxsKSB7XG4gICAgdGhpcy50aW1lclBvaW50ZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVBvaW50ZXJUcmljayhzZGssIGNvbnRhaW5lciwgZ2V0UG9zZSgpLCBnZXRQb3NlQ2FtZXJhKCksIGdldEludGVyYWN0aW9uTW9kZSgpLCBnZXRNYXR0ZXJ0YWdUb0ZvbGxvdygpKTtcbiAgICB9LCA1MCk7XG4gIH1cblxuICBzdG9wUG9pbnRlclRyaWNrKCkge1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lclBvaW50ZXIpO1xuICB9XG5cbiAgc3RhcnRBZG1pbkN1cnNvclRyYWNrZXIoc2RrOiBhbnksIGNvbnRhaW5lcjogYW55LCBnZXRQb3NlOiAoKSA9PiBhbnksIGdldFBvc2VDYW1lcmE6ICgpID0+IGFueSkge1xuICAgIGlmICghIXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24gJiZcbiAgICAgIChkb2N1bWVudC5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2RldicpICE9PSAtMSB8fCBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2xvY2FsaG9zdCcpICE9PSAtMSkpIHtcbiAgICAgIHRoaXMuaW50ZXJ2YWxDdXJzb3JQb2ludGVyUG9zaXRpb24gPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBvc2VNYXR0ZXJwb3J0ID0gZ2V0UG9zZSgpO1xuICAgICAgICBpZiAoIXBvc2VNYXR0ZXJwb3J0KSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgbmV4dFNob3cgPSBwb3NlTWF0dGVycG9ydC50aW1lICsgMTAwMDtcbiAgICAgICAgaWYgKG5ldyBEYXRlKCkuZ2V0VGltZSgpID4gbmV4dFNob3cpIHtcbiAgICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbkJ1dHRvbkRpc3BsYXllZCkgcmV0dXJuO1xuXG4gICAgICAgICAgY29uc3Qgc2l6ZSA9IHtcbiAgICAgICAgICAgIHc6IGNvbnRhaW5lci5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgIGg6IGNvbnRhaW5lci5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBjb29yZCA9IHNkay5Db252ZXJzaW9uLndvcmxkVG9TY3JlZW4ocG9zZU1hdHRlcnBvcnQucG9zaXRpb24sIGdldFBvc2VDYW1lcmEoKSwgc2l6ZSk7XG4gICAgICAgICAgdGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbiEuc3R5bGUubGVmdCA9IGAke2Nvb3JkLnggLSAyNX1weGA7XG4gICAgICAgICAgdGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbiEuc3R5bGUudG9wID0gYCR7Y29vcmQueSAtIDIyfXB4YDtcbiAgICAgICAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uIS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uQnV0dG9uRGlzcGxheWVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSwgNTAwKTtcbiAgICB9XG4gIH1cblxuICBzdG9wQWRtaW5DdXJzb3JUcmFja2VyKCkge1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbEN1cnNvclBvaW50ZXJQb3NpdGlvbik7XG4gIH1cblxuICB1cGRhdGVQb2ludGVyVHJpY2soc2RrOiBhbnksIGNvbnRhaW5lcjogYW55LCBwb3NlTWF0dGVycG9ydDogYW55LCBwb3NlQ2FtZXJhOiBhbnksIGludGVyYWN0aW9uTW9kZTogbnVtYmVyLCBtYXR0ZXJ0YWdUb0ZvbGxvdzogc3RyaW5nIHwgbnVsbCkge1xuICAgIGlmICghdGhpcy5wb2ludGVyQnV0dG9uKSByZXR1cm47XG5cbiAgICBpZiAoXG4gICAgICBpbnRlcmFjdGlvbk1vZGUgIT09IDAgJiYgLy8gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFRcbiAgICAgIG1hdHRlcnRhZ1RvRm9sbG93ICYmXG4gICAgICBwb3NlTWF0dGVycG9ydCAmJlxuICAgICAgdGhpcy5nZXREaXN0UG9zaXRpb24oc2RrLCBjb250YWluZXIsIHBvc2VDYW1lcmEsIHBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLCB0aGlzLm9sZFBvc2VNYXR0ZXJwb3J0UG9zaXRpb24pID4gMjVcbiAgICApIHtcbiAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgICBjb25zdCBzaXplID0ge1xuICAgICAgICB3OiBjb250YWluZXIuY2xpZW50V2lkdGgsXG4gICAgICAgIGg6IGNvbnRhaW5lci5jbGllbnRIZWlnaHQsXG4gICAgICB9O1xuICAgICAgY29uc3QgY29vcmRzID0gc2RrLkNvbnZlcnNpb24ud29ybGRUb1NjcmVlbihcbiAgICAgICAgcG9zZU1hdHRlcnBvcnQucG9zaXRpb24sXG4gICAgICAgIHBvc2VDYW1lcmEsXG4gICAgICAgIHNpemVcbiAgICAgICk7XG4gICAgICB0aGlzLnBvaW50ZXJCdXR0b24uc3R5bGUubGVmdCA9IGAke2Nvb3Jkcy54ICogTWF0aC5zaWduKGNvb3Jkcy54KSAtIDI1fXB4YDtcbiAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5zdHlsZS50b3AgPSBgJHtjb29yZHMueSAqIE1hdGguc2lnbihjb29yZHMueCkgLSAyNX1weGA7XG4gICAgICB0aGlzLm9sZFBvc2VNYXR0ZXJwb3J0UG9zaXRpb24gPSB7XG4gICAgICAgIC4uLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIH1cbiAgfVxuXG4gIGdldERpc3RQb3NpdGlvbihzZGs6IGFueSwgY29udGFpbmVyOiBhbnksIHBvc2VDYW1lcmE6IGFueSwgcG9zMTogYW55LCBwb3MyOiBhbnkpIHtcbiAgICBpZiAoIXBvczEgfHwgIXBvczIpIHJldHVybiAxMDA7IC8vIEZvcmNlIHVwZGF0ZSBpZiBvbmUgaXMgbWlzc2luZ1xuICAgIGNvbnN0IHNpemUgPSB7XG4gICAgICB3OiBjb250YWluZXIuY2xpZW50V2lkdGgsXG4gICAgICBoOiBjb250YWluZXIuY2xpZW50SGVpZ2h0LFxuICAgIH07XG4gICAgY29uc3QgY29vcmRzMSA9IHNkay5Db252ZXJzaW9uLndvcmxkVG9TY3JlZW4ocG9zMSwgcG9zZUNhbWVyYSwgc2l6ZSk7XG4gICAgY29uc3QgY29vcmRzMiA9IHNkay5Db252ZXJzaW9uLndvcmxkVG9TY3JlZW4ocG9zMiwgcG9zZUNhbWVyYSwgc2l6ZSk7XG4gICAgcmV0dXJuIE1hdGguc3FydChcbiAgICAgIChjb29yZHMxLnggLSBjb29yZHMyLngpICoqIDIgKyAoY29vcmRzMS55IC0gY29vcmRzMi55KSAqKiAyXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZUN1cnNvckRpc3BsYXkocG9zZU1hdHRlcnBvcnQ6IGFueSkge1xuICAgIGlmICh0aGlzLnRleHREaXNwbGF5Q3Vyc29yUG9zaXRpb25QYW5lbCAmJiBwb3NlTWF0dGVycG9ydCkge1xuICAgICAgdGhpcy50ZXh0RGlzcGxheUN1cnNvclBvc2l0aW9uUGFuZWwuaW5uZXJIVE1MID0gYHBvc2l0aW9uOlxuICAgICAgICAgICAke3BvaW50VG9TdHJpbmcocG9zZU1hdHRlcnBvcnQucG9zaXRpb24pfVxcblxuICAgICAgICAgICBub3JtYWw6XG4gICAgICAgICAgICR7cG9pbnRUb1N0cmluZyhwb3NlTWF0dGVycG9ydC5ub3JtYWwpfVxcblxuICAgICAgICAgICBmbG9vcklkOlxuICAgICAgICAgICAke3Bvc2VNYXR0ZXJwb3J0LmZsb29ySWR9YDtcbiAgICAgIGlmICh0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uKSB7XG4gICAgICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjbGVhcihjYWxsYmFja3M6IHtcbiAgICBvbkxlZnRDbGljazogKGV2dDogTW91c2VFdmVudCkgPT4gdm9pZDtcbiAgICBvblJpZ2h0Q2xpY2s6IChldnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gICAgb25NaWRkbGVDbGljazogKGV2dDogTW91c2VFdmVudCkgPT4gdm9pZDtcbiAgfSkge1xuICAgIGlmICh0aGlzLnBvaW50ZXJCdXR0b24pIHtcbiAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGNhbGxiYWNrcy5vbkxlZnRDbGljayk7XG4gICAgICB0aGlzLnBvaW50ZXJCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBjYWxsYmFja3Mub25SaWdodENsaWNrKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24pIHtcbiAgICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjYWxsYmFja3Mub25NaWRkbGVDbGljayk7XG4gICAgfVxuICAgIHRoaXMuc3RvcFBvaW50ZXJUcmljaygpO1xuICAgIHRoaXMuc3RvcEFkbWluQ3Vyc29yVHJhY2tlcigpO1xuICB9XG5cbiAgc2V0Q3Vyc29yUG9zaXRpb25CdXR0b25EaXNwbGF5ZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmN1cnNvclBvc2l0aW9uQnV0dG9uRGlzcGxheWVkID0gdmFsdWU7XG4gIH1cbn1cbiJdfQ==