raise-common-lib 0.0.235-beta → 0.0.236-beta

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 (98) hide show
  1. package/README.md +57 -57
  2. package/bundles/raise-common-lib.umd.js +62 -30
  3. package/bundles/raise-common-lib.umd.js.map +1 -1
  4. package/bundles/raise-common-lib.umd.min.js +1 -1
  5. package/bundles/raise-common-lib.umd.min.js.map +1 -1
  6. package/esm2015/lib/commentary/index.component.js +3 -2
  7. package/esm2015/lib/common-grid/grid-action/grid-action.component.js +3 -2
  8. package/esm2015/lib/common-grid/index.component.js +3 -2
  9. package/esm2015/lib/dashboard/dashboard-properties/data-mart-new/data-mart-new.component.js +4 -3
  10. package/esm2015/lib/dashboard/dashboardPorlets.service.js +4 -3
  11. package/esm2015/lib/dashboard/dialog-group/download/index.component.js +3 -2
  12. package/esm2015/lib/dashboard/gadget-group/gadget-pivot/gadget-pivot.component.js +3 -2
  13. package/esm2015/lib/dashboard/gadget-group/gadget-pivot-chart/gadget-pivot.component.js +3 -2
  14. package/esm2015/lib/dashboard/gadget-group/gadget-table/gadget-table.component.js +3 -2
  15. package/esm2015/lib/dashboard/gadget-group/gadget-transpose/gadget-transpose.component.js +3 -2
  16. package/esm2015/lib/dashboard/pane-group-new.component.js +4 -3
  17. package/esm2015/lib/dashboard/sidebar-iconlist/field-filter/field-filter.component.js +3 -2
  18. package/esm2015/lib/dashboard/sidebar-iconlist/field-format/field-format.component.js +3 -2
  19. package/esm2015/lib/dashboard/sidebar-iconlist/portlet-type-new/portlet-type-new.component.js +3 -2
  20. package/esm2015/lib/dashboard/sidebar-iconlist/sidebar-iconlist-new.component.js +4 -3
  21. package/esm2015/lib/dialog/common-delete-dialog/index.component.js +3 -2
  22. package/esm2015/lib/dialog/common-dialog/index.component.js +3 -2
  23. package/esm2015/lib/form/checkbox-group/index.component.js +3 -2
  24. package/esm2015/lib/form/confirm-select/index.component.js +3 -2
  25. package/esm2015/lib/form/search-input/index.component.js +3 -2
  26. package/esm2015/lib/layout/grid-box/index.component.js +3 -2
  27. package/esm2015/lib/layout/multi-tab/index.component.js +3 -2
  28. package/esm2015/lib/layout/page-list/index.component.js +3 -2
  29. package/esm2015/lib/layout/rs-header/index.component.js +5 -4
  30. package/esm2015/lib/service/dialog.service.js +3 -2
  31. package/esm2015/lib/utils/utils.js +32 -0
  32. package/esm5/lib/commentary/index.component.js +3 -2
  33. package/esm5/lib/common-grid/grid-action/grid-action.component.js +3 -2
  34. package/esm5/lib/common-grid/index.component.js +3 -2
  35. package/esm5/lib/dashboard/dashboard-properties/data-mart-new/data-mart-new.component.js +4 -3
  36. package/esm5/lib/dashboard/dashboardPorlets.service.js +4 -3
  37. package/esm5/lib/dashboard/dialog-group/download/index.component.js +3 -2
  38. package/esm5/lib/dashboard/gadget-group/gadget-pivot/gadget-pivot.component.js +3 -2
  39. package/esm5/lib/dashboard/gadget-group/gadget-pivot-chart/gadget-pivot.component.js +3 -2
  40. package/esm5/lib/dashboard/gadget-group/gadget-table/gadget-table.component.js +3 -2
  41. package/esm5/lib/dashboard/gadget-group/gadget-transpose/gadget-transpose.component.js +3 -2
  42. package/esm5/lib/dashboard/pane-group-new.component.js +4 -3
  43. package/esm5/lib/dashboard/sidebar-iconlist/field-filter/field-filter.component.js +3 -2
  44. package/esm5/lib/dashboard/sidebar-iconlist/field-format/field-format.component.js +3 -2
  45. package/esm5/lib/dashboard/sidebar-iconlist/portlet-type-new/portlet-type-new.component.js +3 -2
  46. package/esm5/lib/dashboard/sidebar-iconlist/sidebar-iconlist-new.component.js +4 -3
  47. package/esm5/lib/dialog/common-delete-dialog/index.component.js +3 -2
  48. package/esm5/lib/dialog/common-dialog/index.component.js +3 -2
  49. package/esm5/lib/form/checkbox-group/index.component.js +3 -2
  50. package/esm5/lib/form/confirm-select/index.component.js +3 -2
  51. package/esm5/lib/form/search-input/index.component.js +3 -2
  52. package/esm5/lib/layout/grid-box/index.component.js +3 -2
  53. package/esm5/lib/layout/multi-tab/index.component.js +3 -2
  54. package/esm5/lib/layout/page-list/index.component.js +3 -2
  55. package/esm5/lib/layout/rs-header/index.component.js +5 -4
  56. package/esm5/lib/service/dialog.service.js +3 -2
  57. package/esm5/lib/utils/utils.js +32 -0
  58. package/fesm2015/raise-common-lib.js +62 -30
  59. package/fesm2015/raise-common-lib.js.map +1 -1
  60. package/fesm5/raise-common-lib.js +62 -30
  61. package/fesm5/raise-common-lib.js.map +1 -1
  62. package/lib/utils/utils.d.ts +1 -0
  63. package/package.json +1 -1
  64. package/raise-common-lib.metadata.json +1 -1
  65. package/src/assets/img/arrow_right.svg +4 -4
  66. package/src/assets/img/calendar-disabled.svg +6 -6
  67. package/src/assets/img/calendar.svg +6 -6
  68. package/src/assets/img/calendar_arrow_left.svg +3 -3
  69. package/src/assets/img/calendar_arrow_right.svg +3 -3
  70. package/src/assets/img/checked-vector.svg +3 -3
  71. package/src/assets/img/dialog-close.svg +4 -4
  72. package/src/assets/img/dialog-grow.svg +6 -6
  73. package/src/assets/img/dialog-shrink.svg +6 -6
  74. package/src/assets/img/plus.svg +4 -4
  75. package/src/assets/img/search.svg +4 -4
  76. package/src/assets/img/shrink-icon.svg +6 -6
  77. package/src/assets/img/time-disabled.svg +4 -4
  78. package/src/assets/img/time.svg +4 -4
  79. package/src/assets/img/toolbar-action-addFolder.svg +17 -17
  80. package/src/assets/img/toolbar-action-calculator.svg +11 -11
  81. package/src/assets/img/toolbar-action-collapse.svg +7 -7
  82. package/src/assets/img/toolbar-action-combine.svg +4 -4
  83. package/src/assets/img/toolbar-action-edit.svg +4 -4
  84. package/src/assets/img/toolbar-action-expand.svg +7 -7
  85. package/src/assets/img/toolbar-action-folderMove.svg +8 -8
  86. package/src/assets/img/toolbar-action-lock.svg +6 -6
  87. package/src/assets/img/toolbar-action-preview.svg +7 -7
  88. package/src/assets/img/toolbar-action-publish.svg +5 -5
  89. package/src/assets/img/toolbar-action-reminders.svg +10 -10
  90. package/src/assets/img/toolbar-action-rename.svg +7 -7
  91. package/src/assets/img/toolbar-action-saveSequence.svg +5 -5
  92. package/src/assets/img/toolbar-action-send-file.svg +5 -5
  93. package/src/assets/img/toolbar-action-settle.svg +7 -7
  94. package/src/assets/img/toolbar-action-share.svg +5 -5
  95. package/src/assets/img/toolbar-action-submitForApproval.svg +4 -4
  96. package/src/assets/img/toolbar-action-sync.svg +4 -4
  97. package/src/assets/img/toolbar-action-template.svg +6 -6
  98. package/src/assets/img/toolbar-action-workflow.svg +9 -9
@@ -17,6 +17,7 @@ import { Predicate, Query } from "@syncfusion/ej2-data/src/query";
17
17
  import { DataUtil } from "@syncfusion/ej2-data";
18
18
  import moment from "moment";
19
19
  import { PBF_TOKEN } from "../../../service/InjectionToken";
20
+ import { getTranslation } from "../../../utils/utils";
20
21
  enableRipple(false);
21
22
  export class GadgetPivotComponent {
22
23
  /**
@@ -3084,7 +3085,7 @@ export class GadgetPivotComponent {
3084
3085
  */
3085
3086
  getInfo() {
3086
3087
  this.datePipeFormat = localStorage.getItem("datePipe");
3087
- this.translation = JSON.parse(localStorage.getItem("translation"));
3088
+ this.translation = getTranslation();
3088
3089
  }
3089
3090
  /**
3090
3091
  * @param {?} args
@@ -4440,4 +4441,4 @@ if (false) {
4440
4441
  */
4441
4442
  GadgetPivotComponent.prototype.pbf;
4442
4443
  }
4443
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3JhaXNlLWNvbW1vbi1saWIvIiwic291cmNlcyI6WyJsaWIvZGFzaGJvYXJkL2dhZGdldC1ncm91cC9nYWRnZXQtcGl2b3QvZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQ04saUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxFQUNULHVCQUF1QixFQUN2QixNQUFNLEVBQ04sUUFBUSxHQUNSLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFFTix1QkFBdUIsRUFDdkIsa0JBQWtCLEVBR2xCLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUV0QixrQkFBa0IsRUFHbEIsb0JBQW9CLEVBSXBCLG1CQUFtQixHQUduQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFDTixJQUFJLEVBQ0osWUFBWSxFQUNaLE9BQU8sR0FDUCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFDTixNQUFNLEVBQ04sY0FBYyxFQUNkLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sSUFBSSxPQUFPLEVBQ2pCLEtBQUssRUFDTCxLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sR0FDTixNQUFNLFFBQVEsQ0FBQztBQUNoQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQ04sb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQix1QkFBdUIsR0FDdkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FB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OztJQUMvQiw4Q0FBc0M7O0lBQ3RDLCtDQUVFOzs7OztJQUNGLDJDQUF5Qjs7Ozs7SUFDekIsNENBQTBCOzs7OztJQUMxQiw2Q0FTRTs7SUFDRiw0Q0FFRTs7SUFDRixtREFNRTs7Ozs7SUFDRiwyQ0FBeUI7Ozs7O0lBQ3pCLHNEQUEyQzs7Ozs7SUFDM0MsdURBQTRDOzs7OztJQUM1Qyw4Q0FHRTs7Ozs7SUFDRiw2Q0FBMkI7Ozs7O0lBQzNCLDZDQUEyQjs7SUFDM0IsOENBQXNCOztJQUN0QiwwQ0FBbUM7O0lBQ25DLDJDQUF3Qjs7Ozs7SUFDeEIsZ0RBQThCOztJQUM5QiwyQ0FBbUI7O0lBdS9DbkIsOENBQW9COzs7OztJQXAvQ25CLHVEQUF3RDs7Ozs7SUFDeEQsZ0RBQTBDOzs7OztJQUMxQyxtQ0FBOEI7Ozs7O0lBQzlCLG1DQUErQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXHJcblx0Q29tcG9uZW50LFxyXG5cdElucHV0LFxyXG5cdE9uSW5pdCxcclxuXHRWaWV3Q2hpbGQsXHJcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcblx0SW5qZWN0LFxyXG5cdE9wdGlvbmFsLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQge1xyXG5cdElEYXRhT3B0aW9ucyxcclxuXHRQaXZvdEZpZWxkTGlzdENvbXBvbmVudCxcclxuXHRQaXZvdFZpZXdDb21wb25lbnQsXHJcblx0RW5naW5lUG9wdWxhdGVkRXZlbnRBcmdzLFxyXG5cdElEYXRhU2V0LFxyXG5cdFRvb2xiYXJTZXJ2aWNlLFxyXG5cdEZpZWxkTGlzdFNlcnZpY2UsXHJcblx0TnVtYmVyRm9ybWF0dGluZ1NlcnZpY2UsXHJcblx0Q2FsY3VsYXRlZEZpZWxkU2VydmljZSxcclxuXHRDYWxjdWxhdGVkRmllbGRDcmVhdGVFdmVudEFyZ3MsXHJcblx0R3JvdXBpbmdCYXJTZXJ2aWNlLFxyXG5cdEZpZWxkRHJvcEV2ZW50QXJncyxcclxuXHRJU29ydCxcclxuXHRWaXJ0dWFsU2Nyb2xsU2VydmljZSxcclxuXHRJUGl2b3RWYWx1ZXMsXHJcblx0SVBhZ2VTZXR0aW5ncyxcclxuXHREcmlsbFRocm91Z2hFdmVudEFyZ3MsXHJcblx0RHJpbGxUaHJvdWdoU2VydmljZSxcclxuXHRQaXZvdEFjdGlvbkZhaWx1cmVFdmVudEFyZ3MsXHJcblx0UXVlcnlDZWxsSW5mb0V2ZW50QXJncyxcclxufSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItcGl2b3R2aWV3XCI7XHJcbmltcG9ydCB7XHJcblx0TDEwbixcclxuXHRlbmFibGVSaXBwbGUsXHJcblx0QnJvd3NlcixcclxufSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWJhc2VcIjtcclxuaW1wb3J0IHsgR3JpZFNldHRpbmdzIH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1waXZvdHZpZXcvc3JjL3Bpdm90dmlldy9tb2RlbC9ncmlkc2V0dGluZ3NcIjtcclxuaW1wb3J0IHtcclxuXHRzb3J0QnksXHJcblx0ZGlmZmVyZW5jZVdpdGgsXHJcblx0c3RhcnRzV2l0aCxcclxuXHRjbG9uZURlZXAsXHJcblx0dW5pcUJ5LFxyXG5cdGZpbHRlciBhcyBfZmlsdGVyLFxyXG5cdG1heEJ5LFxyXG5cdG1pbkJ5LFxyXG5cdHN1bUJ5LFxyXG5cdG1lYW5CeSxcclxufSBmcm9tIFwibG9kYXNoXCI7XHJcbmltcG9ydCB7IERhc2hib2FyZFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vZGFzaGJvYXJkLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtcclxuXHRBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRBTExfQUdHUkVHQVRFX1RZUEVTLFxyXG5cdERhc2hib2FyZFBvcmxldHNTZXJ2aWNlLFxyXG59IGZyb20gXCIuLi8uLi9kYXNoYm9hcmRQb3JsZXRzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgTWFza2VkVGV4dEJveCB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItaW5wdXRzL3NyYy9tYXNrZWR0ZXh0Ym94L21hc2tlZHRleHRib3hcIjtcclxuaW1wb3J0IHsgRGF0YU1hbmFnZXIgfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWRhdGEvc3JjL21hbmFnZXJcIjtcclxuaW1wb3J0IHsgUHJlZGljYXRlLCBRdWVyeSB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItZGF0YS9zcmMvcXVlcnlcIjtcclxuaW1wb3J0IHsgRGF0YVV0aWwgfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWRhdGFcIjtcclxuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XHJcbmltcG9ydCB7IFBCRl9UT0tFTiB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlL0luamVjdGlvblRva2VuXCI7XHJcblxyXG5lbmFibGVSaXBwbGUoZmFsc2UpO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6IFwicnMtZ2FkZ2V0LXBpdm90XCIsXHJcblx0dGVtcGxhdGVVcmw6IFwiLi9nYWRnZXQtcGl2b3QuY29tcG9uZW50Lmh0bWxcIixcclxuXHRzdHlsZVVybHM6IFtcIi4vZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC5zY3NzXCJdLFxyXG5cdHByb3ZpZGVyczogW1xyXG5cdFx0VG9vbGJhclNlcnZpY2UsXHJcblx0XHRGaWVsZExpc3RTZXJ2aWNlLFxyXG5cdFx0TnVtYmVyRm9ybWF0dGluZ1NlcnZpY2UsXHJcblx0XHRDYWxjdWxhdGVkRmllbGRTZXJ2aWNlLFxyXG5cdFx0R3JvdXBpbmdCYXJTZXJ2aWNlLFxyXG5cdFx0VmlydHVhbFNjcm9sbFNlcnZpY2UsXHJcblx0XHREcmlsbFRocm91Z2hTZXJ2aWNlLFxyXG5cdF0sXHJcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHYWRnZXRQaXZvdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblx0QElucHV0KCkgcG9ydGxldDtcclxuXHRASW5wdXQoKSBkYXNoYm9hcmQ7XHJcblx0QElucHV0KCkgcG9ydGxldHM7XHJcblx0cHJpdmF0ZSBQaXZvdF9EYXRhOiBJRGF0YVNldFtdO1xyXG5cdHByaXZhdGUgY29uZmlnO1xyXG5cdHB1YmxpYyBkYXRhU291cmNlU2V0dGluZ3M6IElEYXRhT3B0aW9ucztcclxuXHRwdWJsaWMgZ3JpZFNldHRpbmdzOiBHcmlkU2V0dGluZ3M7XHJcblx0cHJpdmF0ZSBleGNsdWRlRmllbGRzID0gW107XHJcblx0cHJpdmF0ZSBmaWx0ZXJTZXR0aW5ncyA9IFtdO1xyXG5cdHByaXZhdGUgZGF0ZVBpcGVGb3JtYXQ7XHJcblx0cHVibGljIHRyYW5zbGF0aW9uO1xyXG5cdEBWaWV3Q2hpbGQoXCJwaXZvdHZpZXdcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcblx0cHJpdmF0ZSBwaXZvdE9iajogUGl2b3RWaWV3Q29tcG9uZW50O1xyXG5cdEBWaWV3Q2hpbGQoXCJwaXZvdGZpZWxkbGlzdFwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuXHRwdWJsaWMgZmllbGRsaXN0T2JqOiBQaXZvdEZpZWxkTGlzdENvbXBvbmVudDtcclxuXHRwcml2YXRlIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xyXG5cdHByaXZhdGUgZ3JhbmRUb3RhbHMgPSB7fTtcclxuXHRwcml2YXRlIHN1YlRvdGFscyA9IHt9O1xyXG5cdHByaXZhdGUgZmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdHByaXZhdGUgcHJldmlvdXNTb3J0OiBJU29ydDtcclxuXHRwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblx0cHJpdmF0ZSBhbGxEYXRhVmFsdWU7XHJcblx0Ly8gcHJpdmF0ZSBjYWxjdWxhdGVkRmllbGRTZXR0aW5ncztcclxuXHRwcml2YXRlIGlzSW5pdDogYm9vbGVhbiA9IHRydWU7XHJcblx0cHJpdmF0ZSBwaXZvdFNlYXJjaEJveDogTWFza2VkVGV4dEJveDtcclxuXHRwdWJsaWMgdG9vbHRpcFNldHRpbmdzID0ge1xyXG5cdFx0ZW5hYmxlOiBmYWxzZSxcclxuXHR9O1xyXG5cdHByaXZhdGUgY29sdW1uVGV4dHMgPSBbXTtcclxuXHRwcml2YXRlIGNvbmZpZ0ZpZWxkcyA9IFtdO1xyXG5cdHByaXZhdGUgcXVhcnRlckZvcm1hdCA9IFtcclxuXHRcdHsgdmFsdWU6IFwiMDMvMjAyMVwiLCBmb3JtYXQ6IFwiTU0veXl5eVwiIH0sXHJcblx0XHR7IHZhbHVlOiBcIjAzLzIxXCIsIGZvcm1hdDogXCJNTS9kZFwiIH0sXHJcblx0XHR7IHZhbHVlOiBcIjMvMjAyMVwiLCBmb3JtYXQ6IFwiTS95eXl5XCIgfSxcclxuXHRcdHsgdmFsdWU6IFwiMy8yMVwiLCBmb3JtYXQ6IFwiTS95eVwiIH0sXHJcblx0XHR7IHZhbHVlOiBcIk1hcmNoIDIwMjFcIiwgZm9ybWF0OiBcIk1NTU0geXl5eVwiIH0sXHJcblx0XHR7IHZhbHVlOiBcIk1hciwgMjAyMVwiLCBmb3JtYXQ6IFwiTU1NLCB5eXl5XCIgfSxcclxuXHRcdHsgdmFsdWU6IFwiTWFyY2gsIDIwMjFcIiwgZm9ybWF0OiBcIk1NTU0sIHl5eXlcIiB9LFxyXG5cdFx0eyB2YWx1ZTogXCIyMDIxXCIsIGZvcm1hdDogXCJ5eXl5XCIgfSxcclxuXHRdO1xyXG5cdHpvb21TZXR0aW5ncyA9IHtcclxuXHRcdGVuYWJsZTogZmFsc2UsXHJcblx0fTtcclxuXHRpdGVtRGF0YVR5cGVTb3J0QXJyID0gW1xyXG5cdFx0XCJBc3NldHNcIixcclxuXHRcdFwiTGlhYmlsaXRpZXNcIixcclxuXHRcdFwiRXF1aXR5XCIsXHJcblx0XHRcIlAmTFwiLFxyXG5cdFx0XCJDYXNoZmxvd1wiLFxyXG5cdF07XHJcblx0cHJpdmF0ZSBmb3JtYXREYXRlcyA9IFtdO1xyXG5cdHByaXZhdGUgY3VzdG9tQ2FsY3VsYXRlZEZpZWxkczogYW55W10gPSBbXTsgLy8g6Ieq5a6a5LmJ6K6h566X5YiXXHJcblx0cHJpdmF0ZSBhbGxvd2VkQ2FsY3VsYXRlZEZpZWxkczogYW55W10gPSBbXTsgLy8g5YWB6K646Ieq5a6a5LmJ566X5rOV55qE5a2X5q61XHJcblx0cHJpdmF0ZSB6ZXJvRm9ybWF0RGF0YSA9IHtcclxuXHRcdGVtcHR5TGlzdDogW10sXHJcblx0XHRoZ0xpc3Q6IFtdLFxyXG5cdH07XHJcblx0cHJpdmF0ZSBtaWxsaW9uRmllbGRzID0gW107XHJcblx0cHJpdmF0ZSB0ZW1wU3VidG90YWxzID0gW107XHJcblx0cHVibGljIG9yZGVyQnlDb2x1bW5zOyAvLyBFZzogXCJEdWVEYXRlLCBTZXF1ZW5jZVwiXHJcblx0cHVibGljIGlzQXBwbHlJUlI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRwdWJsaWMgY2FsY0lSUkRhdGE6IGFueTtcclxuXHRwcml2YXRlIHBlcmNlbnROdW1GaWVsZHMgPSBbXTtcclxuXHRwdWJsaWMgcGFnZUxvYWRpbmc7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSBkYXNoYm9hcmRQb3JsZXRzU2VydmljZTogRGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIGRhc2hib2FyZFNlcnZpY2U6IERhc2hib2FyZFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcblx0XHRAT3B0aW9uYWwoKSBASW5qZWN0KFBCRl9UT0tFTikgcHJpdmF0ZSBwYmY6IGFueSxcclxuXHJcblx0KSB7fVxyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHRcdHRoaXMuZ2V0SW5mbygpO1xyXG5cdFx0TDEwbi5sb2FkKHtcclxuXHRcdFx0XCJlbi1VU1wiOiB7XHJcblx0XHRcdFx0cGl2b3R2aWV3OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0XHRwaXZvdGZpZWxkbGlzdDogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdH0sXHJcblx0XHRcdHpoOiB7XHJcblx0XHRcdFx0cGl2b3R2aWV3OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0XHRwaXZvdGZpZWxkbGlzdDogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdH0sXHJcblx0XHRcdFwiemgtSGFudC1IS1wiOiB7XHJcblx0XHRcdFx0cGl2b3R2aWV3OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0XHRwaXZvdGZpZWxkbGlzdDogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdH0sXHJcblx0XHRcdGphOiB7XHJcblx0XHRcdFx0cGl2b3R2aWV3OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0XHRwaXZvdGZpZWxkbGlzdDogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdH0sXHJcblx0XHRcdGtvOiB7XHJcblx0XHRcdFx0cGl2b3R2aWV3OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0XHRwaXZvdGZpZWxkbGlzdDogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdH0sXHJcblx0XHRcdGZyOiB7XHJcblx0XHRcdFx0cGl2b3R2aWV3OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0XHRwaXZvdGZpZWxkbGlzdDogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdH0sXHJcblx0XHR9KTtcclxuXHRcdHRoaXMuZ2V0RGF0YSgpO1xyXG5cdH1cclxuXHJcblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRjaGFuZ2VQaXZvdCgpLnN1YnNjcmliZSgodXBkYXRlZCkgPT4ge1xyXG5cdFx0XHRcdGlmICh1cGRhdGVkID09PSB0aGlzLnBvcnRsZXQubmV3SWQpIHtcclxuXHRcdFx0XHRcdHRoaXMuZ2V0RGF0YSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRTdGFydFJlZnJlc2goKS5zdWJzY3JpYmUoKGRhc2hib2FyZElkKSA9PiB7XHJcblx0XHRcdFx0aWYgKGRhc2hib2FyZElkID09PSB0aGlzLmRhc2hib2FyZC5pZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5wYWdlTG9hZGluZyA9IHRydWU7XHJcblx0XHRcdFx0XHR0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0VXBkYXRlZCgpLnN1YnNjcmliZSgobmV3SWQpID0+IHtcclxuXHRcdFx0XHRpZiAobmV3SWQgPT09IHRoaXMucG9ydGxldC5uZXdJZCB8fCBuZXdJZCA9PT0gdGhpcy5wb3J0bGV0LmlkKSB7XHJcblx0XHRcdFx0XHR0aGlzLmdldERhdGEoKTtcclxuXHRcdFx0XHRcdGlmICh0aGlzLnBpdm90T2JqKSB0aGlzLnBpdm90T2JqLnJlZnJlc2hEYXRhKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuXHRcdFx0dGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldFJlZnJlc2hHYWRnZXQoKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuXHRcdFx0XHRpZiAoIWUpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc3QgaWQgPSBlW1wibmV3SWRcIl07XHJcblx0XHRcdFx0aWYgKGlkID09PSB0aGlzLnBvcnRsZXQubmV3SWQgfHwgaWQgPT09IHRoaXMucG9ydGxldC5pZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0dGhpcy5nZXREYXRhKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuXHRcdFx0dGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldFRhYmxlRm9ybWF0KCkuc3Vic2NyaWJlKCh1cGRhdGVkKSA9PiB7XHJcblx0XHRcdFx0aWYgKHVwZGF0ZWQgPT09IHRoaXMucG9ydGxldC5uZXdJZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5nZXREYXRhKCk7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5waXZvdE9iaikgdGhpcy5waXZvdE9iai5yZWZyZXNoRGF0YSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkU2VydmljZVxyXG5cdFx0XHRcdC5jbGVhckZpZWxkTGlzdE9ic2VydmFibGUoKVxyXG5cdFx0XHRcdC5zdWJzY3JpYmUoKHVwZGF0ZWQpID0+IHtcclxuXHRcdFx0XHRcdGlmICh1cGRhdGVkID09PSB0aGlzLnBvcnRsZXQubmV3SWQpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuZGF0YVNvdXJjZSA9IFtdO1xyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5waXZvdE9iaikgdGhpcy5waXZvdE9iai5yZWZyZXNoRGF0YSgpO1xyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5maWVsZGxpc3RPYmopXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmoudXBkYXRlRGF0YVNvdXJjZSgpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHQpO1xyXG5cclxuXHRcdC8vIHRpdGxlIGNoYW5nZVxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkU2VydmljZS51cGRhdGVQb3J0bGV0VGl0bGUoKS5zdWJzY3JpYmUoKHVwZGF0ZWQpID0+IHtcclxuXHRcdFx0XHRpZiAodXBkYXRlZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5jb25maWcgPSBKU09OLnBhcnNlKHRoaXMucG9ydGxldC5jb25maWcpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuXHR9XHJcblxyXG5cdG9uTWVtYmVyRWRpdG9yT3BlbihhcmdzOiBhbnkpOiB2b2lkIHtcclxuXHRcdC8vIOS9oOWPr+S7peWcqOi/memHjOagueaNrumcgOimgeS/ruaUuWFyZ3PmnaXoh6rlrprkuYnov4fmu6Tnqpflj6PnmoTooYzkuLpcclxuXHRcdC8vIDExMjQ3IOS4k+mXqOS4uml0ZW0gZGF0YSB0eXBl6ICM6K6+572uXHJcblx0XHRpZiAoYXJncy5maWVsZE5hbWUgPT09IFwiQWNjb3VudFR5cGVDb2RlXCIpIHtcclxuXHRcdFx0bGV0IHJlcyA9IG5ldyBBcnJheSg1KS5maWxsKG51bGwpO1xyXG5cdFx0XHRjb25zdCBmaWVsZE1lbWJlcnMgPSBbLi4uYXJncy5maWVsZE1lbWJlcnNdO1xyXG5cclxuXHRcdFx0Zm9yIChsZXQgaSA9IGZpZWxkTWVtYmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG5cdFx0XHRcdGxldCBpbmRleCA9IC0xO1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1EYXRhVHlwZVNvcnRBcnIuZmluZCgobmFtZSwgaW5kKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZmllbGRNZW1iZXJzW2ldLmFjdHVhbFRleHQgPT09IG5hbWUpIHtcclxuXHRcdFx0XHRcdFx0aW5kZXggPSBpbmQ7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm4gZmllbGRNZW1iZXJzW2ldLmFjdHVhbFRleHQgPT09IG5hbWU7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0aWYgKCFpdGVtKSB7XHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc3QgZmlsbEl0ZW0gPSBmaWVsZE1lbWJlcnMuc3BsaWNlKGksIDEpO1xyXG5cdFx0XHRcdHJlc1tpbmRleF0gPSBmaWxsSXRlbVswXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXMgPSByZXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtKSB8fCBbXTtcclxuXHRcdFx0YXJncy5maWVsZE1lbWJlcnMgPSBbLi4ucmVzLCAuLi5maWVsZE1lbWJlcnNdO1xyXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHRjb25zdCBlbGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmUtbWVtYmVyLWVkaXRvci1kaWFsb2dcIik7XHJcblx0XHRcdFx0aWYgKGVsZSkge1xyXG5cdFx0XHRcdFx0ZWxlLnF1ZXJ5U2VsZWN0b3IoXCIuZS1maWx0ZXItc29ydFwiKS5zZXRBdHRyaWJ1dGUoXHJcblx0XHRcdFx0XHRcdFwic3R5bGVcIixcclxuXHRcdFx0XHRcdFx0XCJkaXNwbGF5OiBub25lXCJcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc2V0R3JpZFNldHRpbmdzKCkge1xyXG5cdFx0dGhpcy5ncmlkU2V0dGluZ3MgPSB7XHJcblx0XHRcdGNvbHVtbldpZHRoOiAxNDAsXHJcblx0XHRcdHJvd0hlaWdodDogNDAsXHJcblx0XHRcdGFsbG93U2VsZWN0aW9uOiB0cnVlLFxyXG5cdFx0XHRzZWxlY3Rpb25TZXR0aW5nczoge1xyXG5cdFx0XHRcdG1vZGU6IFwiQ2VsbFwiLFxyXG5cdFx0XHRcdHR5cGU6IFwiTXVsdGlwbGVcIixcclxuXHRcdFx0XHRjZWxsU2VsZWN0aW9uTW9kZTogXCJCb3hcIixcclxuXHRcdFx0fSxcclxuXHRcdFx0Y29sdW1uUmVuZGVyOiB0aGlzLm9ic2VydmFibGUuc3Vic2NyaWJlKChhcmdzKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5zZXRDb2x1bW5zUmVuZGVyKGFyZ3MpO1xyXG5cdFx0XHR9KSBhcyBhbnksXHJcblx0XHRcdC8vIOWNh+e6p+WQjiDpu5jorqTkvJrmnInlr7zlh7rmoLflvI/opobnm5bvvIzpnIDopoHmiYvliqjorr7nva7lr7zlh7rmoIfpopjmoLflvI9cclxuXHRcdFx0ZXhjZWxIZWFkZXJRdWVyeUNlbGxJbmZvOiB0aGlzLm9ic2VydmFibGUuc3Vic2NyaWJlKChhcmdzOiBhbnkpID0+IHtcclxuXHRcdFx0XHQvLyBhcmdzLnN0eWxl5piv5LiqRXhjZWxTdHlsZeexu+Wei1xyXG5cdFx0XHRcdGFyZ3Muc3R5bGUgPSB7XHJcblx0XHRcdFx0XHRib2xkOiB0cnVlLCAvLyDlrZfkvZPliqDnspdcclxuXHRcdFx0XHRcdHZBbGlnbjogXCJDZW50ZXJcIixcclxuXHRcdFx0XHRcdHdyYXBUZXh0OiBmYWxzZSwgLy8g5LiN5o2i6KGMXHJcblx0XHRcdFx0XHRpbmRlbnQ6IDAsXHJcblx0XHRcdFx0XHRib3JkZXJzOiBudWxsLCAvLyDkuI3pnIDopoFib3JkZXJcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9KSBhcyBhbnksXHJcblx0XHRcdC8vIOWNh+e6p+WQjiDpu5jorqTkvJrmnInlr7zlh7rmoLflvI/opobnm5bvvIzpnIDopoHmiYvliqjorr7nva7lr7zlh7rlhoXlrrnmoLflvI9cclxuXHRcdFx0ZXhjZWxRdWVyeUNlbGxJbmZvOiB0aGlzLm9ic2VydmFibGUuc3Vic2NyaWJlKChhcmdzOiBhbnkpID0+IHtcclxuXHRcdFx0XHQvLyAjZjQ4NmNmZmYg6L+Z6YeM6L6T5Ye655qE5pivUkdCQSDpopzoibLmoLzlvI/vvIwgeGxzeOmHjOS4jemcgOimgemAj+aYjuW6pizljrvmjonlsL7pg6hmZlxyXG5cdFx0XHRcdGlmIChhcmdzLnN0eWxlICYmIGFyZ3Muc3R5bGUuYmFja0NvbG9yKSB7XHJcblx0XHRcdFx0XHRhcmdzLnN0eWxlLmJhY2tDb2xvciA9IGFyZ3Muc3R5bGUuYmFja0NvbG9yLnN1YnN0cmluZygwLCA3KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0bGV0IF9zdHlsZTogYW55ID0ge1xyXG5cdFx0XHRcdFx0Ym9sZDogZmFsc2UsXHJcblx0XHRcdFx0XHR3cmFwVGV4dDogZmFsc2UsXHJcblx0XHRcdFx0XHRib3JkZXJzOiBudWxsLFxyXG5cdFx0XHRcdFx0Zm9udENvbG9yOiBhcmdzLnN0eWxlLmZvbnRDb2xvcixcclxuXHRcdFx0XHRcdGJhY2tDb2xvcjogYXJncy5zdHlsZS5iYWNrQ29sb3IsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHRsZXQgY29sSW5kZXggPSBhcmdzLmNlbGwuY29sSW5kZXg7XHJcblx0XHRcdFx0bGV0IHJvd0luZGV4ID0gYXJncy5jZWxsLnJvd0luZGV4O1xyXG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZy5zaG93R3JhbmRUb3RhbHMpIHtcclxuXHRcdFx0XHRcdC8vIEdyYW5kVG90YWzkuI3pnIDopoHpopzoibJcclxuXHRcdFx0XHRcdGlmIChhcmdzLmRhdGEubGVuZ3RoID09PSByb3dJbmRleCArIDEpIHtcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIF9zdHlsZS5mb250Q29sb3I7XHJcblx0XHRcdFx0XHRcdGRlbGV0ZSBfc3R5bGUuYmFja0NvbG9yO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoYXJncy5kYXRhW3Jvd0luZGV4XVtjb2xJbmRleF0uZm9ybWF0dGVkVGV4dCA9PSBcIlwiKSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0YXJncy5zdHlsZSA9IE9iamVjdC5hc3NpZ24oYXJncy5zdHlsZSwgX3N0eWxlKTtcclxuXHRcdFx0XHRpZiAoYXJncy52YWx1ZSA9PT0gXCJcIiAmJiBhcmdzLnN0eWxlLm51bWJlckZvcm1hdCkge1xyXG5cdFx0XHRcdFx0YXJncy5zdHlsZS5udW1iZXJGb3JtYXQgPSBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAodGhpcy5mb3JtYXREYXRlcyAmJiB0aGlzLmZvcm1hdERhdGVzLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0bGV0IGRhdGVGaWVsZHMgPSB0aGlzLmZvcm1hdERhdGVzLm1hcCgoZWwpID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGVsLm5hbWU7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0KGFyZ3MgYXMgYW55KS52YWx1ZSAmJlxyXG5cdFx0XHRcdFx0XHQoKGFyZ3MgYXMgYW55KS5jZWxsLmNvbEluZGV4ID09PSAwXHJcblx0XHRcdFx0XHRcdFx0PyBkYXRlRmllbGRzLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQoYXJncyBhcyBhbnkpLmNlbGwudmFsdWVTb3J0LmF4aXNcclxuXHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHQ6IGRhdGVGaWVsZHMuaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdChhcmdzIGFzIGFueSkuY2VsbC5hY3R1YWxUZXh0XHJcblx0XHRcdFx0XHRcdFx0ICApKVxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdC8vQ3VzdG9taXplIHRoZSBSb3cgaGVhZGVycy9Db2x1bW4gaGVhZGVycyBiYXNlZCBvbiB5b3VyIG5lZWRzXHJcblx0XHRcdFx0XHRcdGxldCBoZWFkZXJzO1xyXG5cdFx0XHRcdFx0XHRpZiAoKGFyZ3MgYXMgYW55KS5jZWxsLmNvbEluZGV4ID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0aGVhZGVycyA9IChhcmdzIGFzIGFueSkuY2VsbC5hY3R1YWxUZXh0O1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdC8vIGhlYWRlcnMgPSBwaXZvdFZhbHVlc1trXVtqXS5mb3JtYXR0ZWRUZXh0O1xyXG5cdFx0XHRcdFx0XHRcdGhlYWRlcnMgPSAoYXJncyBhcyBhbnkpLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChoZWFkZXJzKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGRhdGUgPSBuZXcgRGF0ZShoZWFkZXJzKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0bGV0IHF1YXJ0ZXIgPSBNYXRoLmZsb29yKGRhdGUuZ2V0TW9udGgoKSAvIDMpICsgMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0bGV0IGZvcm1hdDtcclxuXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5mb3JtYXREYXRlcy5tYXAoKGVsKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoKGFyZ3MgYXMgYW55KS5jZWxsLmNvbEluZGV4ID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsLm5hbWUgPT1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoYXJncyBhcyBhbnkpLmNlbGwudmFsdWVTb3J0LmF4aXNcclxuXHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IGVsLmZvcm1hdDtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5uYW1lID09IChhcmdzIGFzIGFueSkuY2VsbC5hY3R1YWxUZXh0XHJcblx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBlbC5mb3JtYXQ7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0KGFyZ3MgYXMgYW55KS52YWx1ZSA9IHRoaXMuZ2V0UXVhcnRlclZhbHVlKFxyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybWF0LFxyXG5cdFx0XHRcdFx0XHRcdFx0ZGF0ZSxcclxuXHRcdFx0XHRcdFx0XHRcdHF1YXJ0ZXJcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KSBhcyBhbnksXHJcblx0XHR9IGFzIEdyaWRTZXR0aW5ncztcclxuXHR9XHJcblxyXG5cdGJlZm9yZUV4cG9ydChleHBvcnREYXRhKSB7XHJcblx0XHRpZiAoZXhwb3J0RGF0YSkge1xyXG5cdFx0XHRjb25zdCBrZXlNYXAgPSB7fTtcclxuXHRcdFx0dGhpcy5kYXRhU291cmNlU2V0dGluZ3MuZm9ybWF0U2V0dGluZ3MuZm9yRWFjaCgoZGF0YSkgPT4ge1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGRhdGEuZm9ybWF0ID09PSBcIiMsIyMjLCwuMDsoIywjIyMsLC4wKVwiIHx8XHJcblx0XHRcdFx0XHRkYXRhLmZvcm1hdCA9PT0gXCIjLCMjIywsOygjLCMjIywsKVwiIHx8XHJcblx0XHRcdFx0XHRkYXRhLmZvcm1hdCA9PT0gXCIjLCMjIywsLjAwOygjLCMjIywsLjAwKVwiXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRrZXlNYXBbZGF0YS5uYW1lXSA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGV4cG9ydERhdGEuZGF0YUNvbGxlY3Rpb25zICYmXHJcblx0XHRcdFx0ZXhwb3J0RGF0YS5kYXRhQ29sbGVjdGlvbnMubGVuZ3RoXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGV4cG9ydERhdGEuZGF0YUNvbGxlY3Rpb25zWzBdLmZvckVhY2goKHJvdykgPT4ge1xyXG5cdFx0XHRcdFx0cm93LmZvckVhY2goKGNlbGwpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKGtleU1hcFtjZWxsLmFjdHVhbFRleHRdKSB7XHJcblx0XHRcdFx0XHRcdFx0Y2VsbC52YWx1ZSA9IGNlbGwuYWN0dWFsVmFsdWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHR0eXBlb2YgY2VsbC52YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxyXG5cdFx0XHRcdFx0XHRcdHR5cGVvZiBjZWxsLmZvcm1hdHRlZFRleHQgPT09IFwic3RyaW5nXCJcclxuXHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0Y2VsbC52YWx1ZSA9IGNlbGwuZm9ybWF0dGVkVGV4dDtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgZ2V0RGF0YSgpIHtcclxuXHRcdHRoaXMucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuXHRcdGxldCBjb2x1bW5zID0gW107XHJcblx0XHRsZXQgdmFsdWVzID0gW107XHJcblx0XHRsZXQgZm9ybWF0U2V0dGluZ3MgPSBbXTtcclxuXHRcdGxldCByb3dzID0gW107XHJcblx0XHRsZXQgZmllbGRNYXBwaW5nID0gW107XHJcblx0XHQvLyDmuIXnqbpncmFuZFRvdGFsc+WSjHN1YlRvdGFsc1xyXG5cdFx0dGhpcy5ncmFuZFRvdGFscyA9IHt9O1xyXG5cdFx0dGhpcy5zdWJUb3RhbHMgPSB7fTtcclxuXHRcdHRoaXMuY29uZmlnID0gSlNPTi5wYXJzZSh0aGlzLnBvcnRsZXQuY29uZmlnKTtcclxuXHRcdHRoaXMuc2V0R3JpZFNldHRpbmdzKCk7XHJcblx0XHRpZiAodGhpcy5jb25maWcuZmllbGRzKSB7XHJcblx0XHRcdGlmICh0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmFsbEZpZWxkc09ialt0aGlzLnBvcnRsZXQuaWRdKSB7XHJcblx0XHRcdFx0dGhpcy5jb25maWdGaWVsZHMgPVxyXG5cdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5zZXRDb25maWdGaWVsZHMoXHJcblx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuYWxsRmllbGRzT2JqW1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMucG9ydGxldC5pZFxyXG5cdFx0XHRcdFx0XHRdLFxyXG5cdFx0XHRcdFx0XHR0aGlzLmNvbmZpZy5maWVsZHNcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5jb25maWdGaWVsZHMgPSBbLi4udGhpcy5jb25maWcuZmllbGRzXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuUGl2b3RfRGF0YSA9IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0UmVzdWx0QnlEYXRhVGFibGUoXHJcblx0XHRcdHRoaXMucG9ydGxldCxcclxuXHRcdFx0ZmFsc2UsXHJcblx0XHRcdGZhbHNlLFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZC5pZFxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLm9yZGVyQnlDb2x1bW5zID0gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRPcmRlckJ5Q29sdW1uc05ldyhcclxuXHRcdFx0dGhpcy5wb3J0bGV0LmZpZ3VyZUNvZGUsXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuUGl2b3RfRGF0YSA9IERhdGFVdGlsLnBhcnNlLnBhcnNlSnNvbih0aGlzLlBpdm90X0RhdGEpO1xyXG5cdFx0aWYgKHRoaXMuUGl2b3RfRGF0YSAmJiB0aGlzLlBpdm90X0RhdGEubGVuZ3RoID4gMCkge1xyXG5cdFx0XHQvLyDnp7vpmaTliJflkI3lkozmlbDmja5rZXnkuI3ljLnphY3nmoTpoblcclxuXHRcdFx0dGhpcy5nZXRleGNsdWRlRmllbGRzKHRoaXMuY29uZmlnRmllbGRzLCB0aGlzLlBpdm90X0RhdGFbMF0pO1xyXG5cdFx0XHRpZiAoIXRoaXMuYWxsb3dlZENhbGN1bGF0ZWRGaWVsZHMubGVuZ3RoKSB7XHJcblx0XHRcdFx0dGhpcy5hbGxvd2VkQ2FsY3VsYXRlZEZpZWxkcyA9IE9iamVjdC5rZXlzKHRoaXMuUGl2b3RfRGF0YVswXSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yIChsZXQgaXRlbSBvZiB0aGlzLmNvbmZpZ0ZpZWxkcykge1xyXG5cdFx0XHRcdC8vIOWtl+auteWIhue7hCBodHRwczovL2VqMi5zeW5jZnVzaW9uLmNvbS9hbmd1bGFyL2RvY3VtZW50YXRpb24vcGl2b3R2aWV3L2ZpZWxkLWxpc3Q/c2VhcmNoPWZpZWxkTWFwcGluZyNncm91cC1maWVsZHMtdW5kZXItZGVzaXJlZC1mb2xkZXItbmFtZVxyXG5cdFx0XHRcdGZpZWxkTWFwcGluZy5wdXNoKHtcclxuXHRcdFx0XHRcdG5hbWU6IGl0ZW0uY29sTmFtZSxcclxuXHRcdFx0XHRcdGNhcHRpb246IGl0ZW0uYWRkdGlvbk5hbWVcclxuXHRcdFx0XHRcdFx0PyBgJHtpdGVtLmxhbmdWYWx1ZX0gJHtpdGVtLmFkZHRpb25OYW1lfWBcclxuXHRcdFx0XHRcdFx0OiBpdGVtLmxhbmdWYWx1ZVxyXG5cdFx0XHRcdFx0XHQ/IGl0ZW0ubGFuZ1ZhbHVlXHJcblx0XHRcdFx0XHRcdDogdGhpcy50cmFuc2xhdGlvbltpdGVtLmxhbmdDb2RlXSB8fCBpdGVtLmxhbmdDb2RlLFxyXG5cclxuXHRcdFx0XHRcdGRhdGFUeXBlOiBpdGVtLmRhdGFUeXBlLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5jb25maWdGaWVsZHMpIHtcclxuXHRcdFx0dGhpcy5wZXJjZW50TnVtRmllbGRzID0gW107XHJcblx0XHRcdHRoaXMuZm9ybWF0RGF0ZXMgPSBbXTtcclxuXHRcdFx0dGhpcy56ZXJvRm9ybWF0RGF0YS5oZ0xpc3QgPSBbXTtcclxuXHRcdFx0dGhpcy56ZXJvRm9ybWF0RGF0YS5lbXB0eUxpc3QgPSBbXTtcclxuXHRcdFx0dGhpcy5taWxsaW9uRmllbGRzID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnRmllbGRzLm1hcCgoZWwpID0+IHtcclxuXHRcdFx0XHQvLyBTTVAyLTI0ODYgJiBwZXJjZW50TnVt55qEZm9ybWF06Zeu6aKYXHJcblx0XHRcdFx0aWYgKGVsLmRhdGFUeXBlID09IFwicGVyY2VudE51bVwiKSB7XHJcblx0XHRcdFx0XHR0aGlzLnBlcmNlbnROdW1GaWVsZHMucHVzaChlbC5jb2xOYW1lKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRlbC5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRlbC5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZCAmJlxyXG5cdFx0XHRcdFx0WzIsIDUsIDgsIDExLCAxNCwgMTddLmluY2x1ZGVzKGVsLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdClcclxuXHRcdFx0XHQpXHJcblx0XHRcdFx0XHR0aGlzLnplcm9Gb3JtYXREYXRhLmhnTGlzdC5wdXNoKGVsLmNvbE5hbWUpO1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGVsLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWQgJiZcclxuXHRcdFx0XHRcdFszLCA2LCA5LCAxMiwgMTUsIDE4XS5pbmNsdWRlcyhlbC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXQpXHJcblx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0dGhpcy56ZXJvRm9ybWF0RGF0YS5lbXB0eUxpc3QucHVzaChlbC5jb2xOYW1lKTtcclxuXHRcdFx0XHQvLyAgcGl2b3RUYWJsZWZvcm1hdFBlcmNlbnQg55m+5YiG5q+U5Lmf5pyJMTAsMTEsMTIg5L2G5piv5a6D5piv5pi+56S6MC4wMHjnmoTmoLzlvI/vvIzmiYDku6XlvpfmjpLpmaRcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRlbC5kYXRhVHlwZSAhPT0gXCJwZXJjZW50XCIgJiZcclxuXHRcdFx0XHRcdGVsLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWQgJiZcclxuXHRcdFx0XHRcdFsxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4XS5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHQpXHJcblx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0dGhpcy5taWxsaW9uRmllbGRzLnB1c2goZWwuY29sTmFtZSk7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZWwuZGF0YVR5cGUgPT09IFwibnVtYmVyXCIgJiZcclxuXHRcdFx0XHRcdCghZWwuZm9ybWF0IHx8XHJcblx0XHRcdFx0XHRcdChlbC5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHRlbC5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0IWVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkKSlcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGZvcm1hdERhdGEgPSB7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGVsLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdC8vU01QMi0zMDI2IGFuZCBTTVAyLTMwNTlcclxuXHRcdFx0XHRcdFx0Zm9ybWF0OlxyXG5cdFx0XHRcdFx0XHRcdGVsLmNvbE5hbWUgIT09IFwiUG9ydEludlN0a1wiICYmXHJcblx0XHRcdFx0XHRcdFx0ZWwuY29sTmFtZSAhPT0gXCJQb3J0RmRJbnZTdGtcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZvcm1hdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5kcFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHQ6IFwiIyMwLiMjIyMjIyMwXCIsXHJcblx0XHRcdFx0XHRcdHVzZUdyb3VwaW5nOiB0cnVlLFxyXG5cdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRmb3JtYXRTZXR0aW5ncy5wdXNoKGZvcm1hdERhdGEpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHQoZWwuZGF0YVR5cGUgPT09IFwicGVyY2VudFwiIHx8XHJcblx0XHRcdFx0XHRcdGVsLmRhdGFUeXBlID09PSBcInBlcmNlbnROdW1cIikgJiZcclxuXHRcdFx0XHRcdCghZWwuZm9ybWF0IHx8XHJcblx0XHRcdFx0XHRcdChlbC5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHRlbC5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0IWVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkKSlcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGZvcm1hdERhdGEgPSB7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGVsLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdGZvcm1hdDogdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdGVsLmRwXHJcblx0XHRcdFx0XHRcdCksXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3MucHVzaChmb3JtYXREYXRhKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZWwuZGF0YVR5cGUgPT09IFwibXVsdGlwbGVcIiAmJlxyXG5cdFx0XHRcdFx0KCFlbC5mb3JtYXQgfHxcclxuXHRcdFx0XHRcdFx0KGVsLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRcdGVsLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0XHQhZWwuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWQpKVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0Y29uc3QgZm9ybWF0RGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0bmFtZTogZWwuY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0Zm9ybWF0OiB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZvcm1hdE11bHRpcGxlKFxyXG5cdFx0XHRcdFx0XHRcdGVsLmRwXHJcblx0XHRcdFx0XHRcdCksXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3MucHVzaChmb3JtYXREYXRhKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGVsLmRhdGFUeXBlID09PSBcImRhdGV0aW1lXCIgfHwgZWwuZGF0YVR5cGUgPT09IFwiZGF0ZVwiKSB7XHJcblx0XHRcdFx0XHRsZXQgZm9ybWF0ID0gXCJcIjtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0ZWwuZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdGVsLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWRcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoZWwuZm9ybWF0WzBdLmRhdGVUeXBlID09IFwiUXVhcnRlclwiKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGZvcm1hdF8gPSBlbC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXREaXNwbGF5O1xyXG5cdFx0XHRcdFx0XHRcdGxldCBmb3JtYXRJbmZvID0gdGhpcy5xdWFydGVyRm9ybWF0LmZpbHRlcihcclxuXHRcdFx0XHRcdFx0XHRcdChxdXIpID0+IHF1ci52YWx1ZSA9PSBmb3JtYXRfXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoZm9ybWF0SW5mby5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IGZvcm1hdEluZm9bMF0uZm9ybWF0O1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBmb3JtYXREYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lOiBlbC5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQ6IGZvcm1hdF8sXHJcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiZGF0ZVwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZm9ybWF0RGF0ZXMucHVzaChmb3JtYXREYXRhKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZWwuZm9ybWF0WzBdLmRhdGVUeXBlID09IFwiRGF0ZVwiKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGZyb21JZHggPVxyXG5cdFx0XHRcdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheS5pbmRleE9mKFwiKFwiKTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgdG9JZHggPVxyXG5cdFx0XHRcdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheS5pbmRleE9mKFwiKVwiKTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZm9ybWF0XyA9XHJcblx0XHRcdFx0XHRcdFx0XHRlbC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXREaXNwbGF5LnNsaWNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmcm9tSWR4ICsgMSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0dG9JZHhcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChmb3JtYXRfKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiREQvTU0vWVlZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcImRkL01NL3l5eXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiREQvTU0vWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJkZC9NTS95eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJNTS9ERC9ZWVlZXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwiTU0vZGQveXl5eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJNTS9ERC9ZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcIk1NL2RkL3l5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIllZWVktTU0tRERcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJ5eXl5LU1NLWRkXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIllZLU1NLUREXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwieXktTU0tZGRcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiREQtTU0tWVlZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcImRkLU1NLXl5eXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiREQtTU0tWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJkZC1NTS15eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJNTS1ERC1ZWVlZXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwiTU0tZGQteXl5eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJNTS1ERC1ZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcIk1NLWRkLXl5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIk1NTSBERCwgWVlZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcIk1NTSBkZCwgeXl5eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJERC1NTU0tWVlZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcImRkLU1NTS15eXl5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIWZvcm1hdCkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBmb3JtYXREYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdG5hbWU6IGVsLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdFx0Zm9ybWF0OiB0aGlzLmRhdGVQaXBlRm9ybWF0LFxyXG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiZGF0ZVwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5ncy5wdXNoKGZvcm1hdERhdGEpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZm9ybWF0RGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0XHRuYW1lOiBlbC5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0XHRcdGZvcm1hdDogZm9ybWF0LFxyXG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiZGF0ZVwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3MucHVzaChmb3JtYXREYXRhKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0Ly9jYWxjdWxhdGVkRmllbGRTZXR0aW5ncyBmb3JtYXQgcHVzaCB0byBmb3JtYXRTZXR0aW5nc1xyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLmNvbmZpZy5jYWxjdWxhdGVkRmllbGRTZXR0aW5ncyAmJlxyXG5cdFx0XHR0aGlzLmNvbmZpZy5jYWxjdWxhdGVkRmllbGRTZXR0aW5ncy5sZW5ndGggPiAwXHJcblx0XHQpIHtcclxuXHRcdFx0dGhpcy5jb25maWcuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MubWFwKChlbCkgPT4ge1xyXG5cdFx0XHRcdGlmIChlbC5mb3JtYXRTdHJpbmcgIT09IFwiXCIpIHtcclxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSBmb3JtYXRTZXR0aW5ncy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG5cdFx0XHRcdFx0XHRpZiAoZm9ybWF0U2V0dGluZ3NbaV0ubmFtZSA9PT0gZWwubmFtZSkge1xyXG5cdFx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnNwbGljZShpLCAxKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3MucHVzaCh7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGVsLm5hbWUsXHJcblx0XHRcdFx0XHRcdGZvcm1hdDogZWwuZm9ybWF0U3RyaW5nLFxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdGxldCBzZXJpZXMgPSB0aGlzLmNvbmZpZy55YXhpcy5zZXJpZXM7XHJcblx0XHRpZiAoc2VyaWVzKSB7XHJcblx0XHRcdGZvciAobGV0IGl0ZW0gb2Ygc2VyaWVzKSB7XHJcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBpdGVtLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRjYXB0aW9uOiB0aGlzLmdldENhcHRpb25CeU5hbWUoaXRlbS5jb2xOYW1lKSB8fCBpdGVtLnRpdGxlLFxyXG5cdFx0XHRcdFx0dHlwZTogaXRlbS5jYWxNZXRob2QsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHR2YWx1ZXMucHVzaCh2YWx1ZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGxldCBncm91cHMgPSB0aGlzLmNvbmZpZy54YXhpcy5ncm91cHM7XHJcblx0XHRpZiAoZ3JvdXBzKSB7XHJcblx0XHRcdGZvciAobGV0IGdpdGVtIG9mIGdyb3Vwcykge1xyXG5cdFx0XHRcdGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdFx0KGVsKSA9PiBlbC5jb2xOYW1lID09PSBnaXRlbS5uYW1lXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoZmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0Z2l0ZW0uc2hvd1N1YlRvdGFscyA9IGZpZWxkWzBdLnNob3dTdWJUb3RhbHM7XHJcblx0XHRcdFx0XHRnaXRlbS5jYXB0aW9uID1cclxuXHRcdFx0XHRcdFx0ZmllbGRbMF0ubGFuZ1ZhbHVlIHx8XHJcblx0XHRcdFx0XHRcdHRoaXMudHJhbnNsYXRpb25bZmllbGRbMF0ubGFuZ0NvZGVdIHx8XHJcblx0XHRcdFx0XHRcdGdpdGVtLmNhcHRpb24gfHxcclxuXHRcdFx0XHRcdFx0ZmllbGRbMF0ubGFuZ0NvZGU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJvd3MucHVzaChnaXRlbSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmNvbmZpZy5jb2x1bW5Hcm91cCAmJiB0aGlzLmNvbmZpZy5jb2x1bW5Hcm91cC5sZW5ndGgpIHtcclxuXHRcdFx0Zm9yIChsZXQgaXRlbSBvZiB0aGlzLmNvbmZpZy5jb2x1bW5Hcm91cCkge1xyXG5cdFx0XHRcdGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdFx0KGVsKSA9PiBlbC5jb2xOYW1lID09PSBpdGVtLm5hbWVcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGlmIChmaWVsZC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRpdGVtLnNob3dTdWJUb3RhbHMgPSBmaWVsZFswXS5zaG93U3ViVG90YWxzO1xyXG5cdFx0XHRcdFx0aXRlbS5jYXB0aW9uID1cclxuXHRcdFx0XHRcdFx0ZmllbGRbMF0ubGFuZ1ZhbHVlIHx8XHJcblx0XHRcdFx0XHRcdHRoaXMudHJhbnNsYXRpb25bZmllbGRbMF0ubGFuZ0NvZGVdIHx8XHJcblx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdDb2RlIHx8XHJcblx0XHRcdFx0XHRcdGl0ZW0uY2FwdGlvbjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29sdW1ucy5wdXNoKGl0ZW0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRsZXQgY29uZGl0aW9uYWxGb3JtYXRTZXR0aW5ncyA9IFtdO1xyXG5cdFx0dGhpcy5jb25maWdGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuXHRcdFx0aWYgKGZpZWxkLmZvcm1hdCAmJiBmaWVsZC5mb3JtYXQubGVuZ3RoKSB7XHJcblx0XHRcdFx0aWYgKGZpZWxkLmZvcm1hdFswXS5mb250U2V0dGluZ0NoZWNrZWQpIHtcclxuXHRcdFx0XHRcdGxldCBjb25kaXRpb25hbEZvcm1hdE9iaiA9IHtcclxuXHRcdFx0XHRcdFx0YXBwbHlHcmFuZFRvdGFsczogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0bWVhc3VyZTogXCJcIixcclxuXHRcdFx0XHRcdFx0dmFsdWUxOiBudWxsLFxyXG5cdFx0XHRcdFx0XHR2YWx1ZTI6IG51bGwsXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbnM6IFwiXCIsXHJcblx0XHRcdFx0XHRcdHN0eWxlOiB7XHJcblx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdGNvbG9yOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdGZvbnRGYW1pbHk6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0Zm9udFNpemU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0bGV0IG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaiA9IHtcclxuXHRcdFx0XHRcdFx0YXBwbHlHcmFuZFRvdGFsczogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0bWVhc3VyZTogXCJcIixcclxuXHRcdFx0XHRcdFx0dmFsdWUxOiBudWxsLFxyXG5cdFx0XHRcdFx0XHR2YWx1ZTI6IG51bGwsXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbnM6IFwiXCIsXHJcblx0XHRcdFx0XHRcdHN0eWxlOiB7XHJcblx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdGNvbG9yOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdGZvbnRGYW1pbHk6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0Zm9udFNpemU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0Ly8gZm9udCBzZXR0aW5nIHN0YXJ0XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoubWVhc3VyZSA9XHJcblx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZpZWxkO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoubWVhc3VyZSA9XHJcblx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZpZWxkO1xyXG5cclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWQgJiZcclxuXHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLmNvbXBhcmVTZWxlY3RcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldENvbXBhcmVDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRkZWxldGUgY29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyO1xyXG5cdFx0XHRcdFx0XHRkZWxldGUgbmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMjtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJMZXNzVGhhblwiO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXSxcclxuXHRcdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLFxyXG5cdFx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3MucHVzaChuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmopO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRTZXR0aW5ncy51bnNoaWZ0KGNvbmRpdGlvbmFsRm9ybWF0T2JqKTtcclxuXHRcdFx0XHRcdC8vIGZvbnQgc2V0dGluZyBlbmRcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0bGV0IGZvcm1hdFNldHRpbmdzT2JqID0ge1xyXG5cdFx0XHRcdFx0bmFtZTogXCJcIixcclxuXHRcdFx0XHRcdGZvcm1hdDogXCJcIixcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdGlmIChmaWVsZC5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZCkge1xyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmoubmFtZSA9IGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZpZWxkO1xyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmouZm9ybWF0ID1cclxuXHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0c3dpdGNoIChmaWVsZC5mb3JtYXRbMF0uZGF0YVR5cGUpIHtcclxuXHRcdFx0XHRcdFx0Y2FzZSBcIm51bWJlclwiOlxyXG5cdFx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLmZvcm1hdCA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXROdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSBcImludGVnZXJcIjpcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iai5mb3JtYXQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0SW50ZWdlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlIFwicGVyY2VudE51bVwiOlxyXG5cdFx0XHRcdFx0XHRjYXNlIFwicGVyY2VudFwiOlxyXG5cdFx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLmZvcm1hdCA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgXCJtdWx0aXBsZVwiOlxyXG5cdFx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLmZvcm1hdCA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXRNdWx0aXBsZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlIFwiZGF0ZVwiOlxyXG5cdFx0XHRcdFx0XHRjYXNlIFwiZGF0ZXRpbWVcIjpcclxuXHRcdFx0XHRcdFx0XHRsZXQgZm9ybWF0ID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHRpZiAoZmllbGQuZm9ybWF0ICYmIGZpZWxkLmZvcm1hdC5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChmaWVsZC5mb3JtYXRbMF0uZGF0ZVR5cGUgPT0gXCJRdWFydGVyXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXREaXNwbGF5O1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChmaWVsZC5mb3JtYXRbMF0uZGF0ZVR5cGUgPT0gXCJEYXRlXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGZyb21JZHggPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdERpc3BsYXkuaW5kZXhPZihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiKFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IHRvSWR4ID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXREaXNwbGF5LmluZGV4T2YoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIilcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheS5zbGljZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZyb21JZHggKyAxLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG9JZHhcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRpZiAoZm9ybWF0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iaiA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogZmllbGQuY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0OiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIGZpZWxkLmRhdGFUeXBlID0gXCJzdHJpbmdcIjtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmouZm9ybWF0ID0gdGhpcy5kYXRlUGlwZUZvcm1hdDtcclxuXHRcdFx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqW1widHlwZVwiXSA9IFwiZGF0ZVwiO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLmRhdGFUeXBlICE9PSBcInN0cmluZ1wiICYmXHJcblx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iai5mb3JtYXRcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnB1c2goZm9ybWF0U2V0dGluZ3NPYmopO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMgPSB0aGlzLmNvbmZpZy5jdXN0b21DYWxjdWxhdGVkRmllbGRzXHJcblx0XHRcdD8gdGhpcy5jb25maWcuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1xyXG5cdFx0XHQ6IFtdO1xyXG5cclxuXHRcdC8vIFNNUDItNDU4MiBBR0lDIC0gRGFzaGJvYXJkIGl0ZW0gc2VxdWVuY2VcclxuXHRcdGxldCBpc0V4aXN0U2VxID0gZmFsc2U7XHJcblx0XHRsZXQgc29ydFNldHRpbmdzID0gdGhpcy5jb25maWcuc29ydFNldHRpbmdzIHx8IFtdO1xyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLlBpdm90X0RhdGEgJiZcclxuXHRcdFx0dGhpcy5QaXZvdF9EYXRhWzBdICYmXHJcblx0XHRcdHRoaXMuUGl2b3RfRGF0YVswXS5TZXEgIT09IG51bGxcclxuXHRcdCkge1xyXG5cdFx0XHQvLyDlj5bmtohOYW1l55qE6buY6K6k5o6S5bqP77yM5qC55o2uU2Vx5p2l5o6S5bqPXHJcblx0XHRcdHNvcnRTZXR0aW5ncy5wdXNoKHsgbmFtZTogXCJOYW1lXCIsIG9yZGVyOiBcIk5vbmVcIiB9KTtcclxuXHRcdFx0aXNFeGlzdFNlcSA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRsZXQgZmlsdGVyU2V0dGluZ3MgPSB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmNoZWNrRmlsdGVyU2V0dGluZ3MoXHJcblx0XHRcdHRoaXMuY29uZmlnLFxyXG5cdFx0XHR0aGlzLmNvbmZpZ0ZpZWxkcyxcclxuXHRcdFx0dGhpcy5QaXZvdF9EYXRhXHJcblx0XHQpO1xyXG5cdFx0bGV0IG5hbWVGaWx0ZXIgPSBmaWx0ZXJTZXR0aW5ncy5maW5kKCh4KSA9PiB4Lm5hbWUgPT09IFwiTmFtZVwiKTtcclxuXHRcdC8vIOWtmOWcqCBOYW1l55qEZmlsdGVy5pe277yM5Lya5oyJ54Wn6buY6K6k5o6S5bqP77yM6ZyA6KaB5a+5TmFtZei/m+ihjFNlceaOkuW6j+WkhOeQhlxyXG5cdFx0aWYgKGlzRXhpc3RTZXEgJiYgbmFtZUZpbHRlciAmJiByb3dzLnNvbWUoKHgpID0+IHgubmFtZSA9PT0gXCJOYW1lXCIpKSB7XHJcblx0XHRcdGxldCBpdGVtcyA9IG5hbWVGaWx0ZXIuaXRlbXM7IC8vIOaLv+WIsOW9k+WJjeaOkuW6j++8jOm7mOiupEEtWlxyXG5cdFx0XHRsZXQgc2VxQXJyID0gW107XHJcblx0XHRcdGl0ZW1zLmZvckVhY2goKG5hbWUpID0+IHtcclxuXHRcdFx0XHRsZXQgb2JqID0gdGhpcy5QaXZvdF9EYXRhLmZpbmQoKHgpID0+IHguTmFtZSA9PT0gbmFtZSk7XHJcblx0XHRcdFx0bGV0IGl0ZW06IGFueSA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IG5hbWUsXHJcblx0XHRcdFx0XHRzZXE6IG9iai5TZXEsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHRzZXFBcnIucHVzaChpdGVtKTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdHNlcUFyci5zb3J0KChhLCBiKSA9PiBhLnNlcSAtIGIuc2VxKTtcclxuXHRcdFx0bmFtZUZpbHRlci5pdGVtcyA9IHNlcUFyci5tYXAoKHgpID0+IHgubmFtZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgYWxsRmllbGRzID1cclxuXHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5hbGxGaWVsZHNPYmpbdGhpcy5wb3J0bGV0LmlkXTtcclxuXHRcdGlmIChhbGxGaWVsZHMpIHtcclxuXHRcdFx0dmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbSA9IGFsbEZpZWxkcy5maW5kKFxyXG5cdFx0XHRcdFx0KGZpZWxkKSA9PiBmaWVsZC5jb2xOYW1lID09PSB2YWx1ZS5uYW1lXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoaXRlbSkge1xyXG5cdFx0XHRcdFx0dmFsdWUuY2FwdGlvbiA9XHJcblx0XHRcdFx0XHRcdChpdGVtLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRcdGl0ZW0uZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdGl0ZW0uZm9ybWF0WzBdLmRpc3BsYXlOYW1lKSB8fFxyXG5cdFx0XHRcdFx0XHRpdGVtLmxhbmdWYWx1ZSB8fFxyXG5cdFx0XHRcdFx0XHR0aGlzLnRyYW5zbGF0aW9uW2l0ZW0ubGFuZ0NvZGVdIHx8XHJcblx0XHRcdFx0XHRcdGl0ZW0ubGFuZ0NvZGU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdGxldCBoYXNJdGVtRGF0YVR5cGUgPSBmYWxzZTtcclxuXHRcdGlmICh0aGlzLlBpdm90X0RhdGEpIHtcclxuXHRcdFx0dGhpcy5QaXZvdF9EYXRhLm1hcCgoZGF0YSkgPT4ge1xyXG5cdFx0XHRcdGlmIChkYXRhW1wiQWNjb3VudFR5cGVDb2RlXCJdKSB7XHJcblx0XHRcdFx0XHRoYXNJdGVtRGF0YVR5cGUgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyb3dzLmZvckVhY2goKHJvdykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGRhdGFbcm93Lm5hbWVdID09PSBcIlwiKSB7XHJcblx0XHRcdFx0XHRcdGRhdGFbcm93Lm5hbWVdID0gXCJudWxsXCI7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGhhc0l0ZW1EYXRhVHlwZSkge1xyXG5cdFx0XHRzb3J0U2V0dGluZ3MucHVzaCh7XHJcblx0XHRcdFx0bmFtZTogXCJBY2NvdW50VHlwZUNvZGVcIixcclxuXHRcdFx0XHRvcmRlcjogXCJBc2NlbmRpbmdcIixcclxuXHRcdFx0XHRtZW1iZXJzT3JkZXI6IFsuLi50aGlzLml0ZW1EYXRhVHlwZVNvcnRBcnJdLFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdHRoaXMuY29uZmlnLmZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyKSA9PiB7XHJcblx0XHRcdGZpbHRlci5jYXB0aW9uID1cclxuXHRcdFx0XHR0aGlzLmdldENhcHRpb25CeU5hbWUoZmlsdGVyLm5hbWUpIHx8IGZpbHRlci5jYXB0aW9uO1xyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmRhdGFTb3VyY2VTZXR0aW5ncyA9IHtcclxuXHRcdFx0ZGF0YVNvdXJjZTogdGhpcy5QaXZvdF9EYXRhIHx8IFtdLFxyXG5cdFx0XHRyb3dzOiByb3dzIHx8IFtdLFxyXG5cdFx0XHRjb2x1bW5zOiBjb2x1bW5zIHx8IFtdLFxyXG5cdFx0XHR2YWx1ZXM6IHZhbHVlcyB8fCBbXSxcclxuXHRcdFx0ZmlsdGVyczogdGhpcy5jb25maWcuZmlsdGVycyxcclxuXHRcdFx0ZmlsdGVyU2V0dGluZ3M6IGZpbHRlclNldHRpbmdzLFxyXG5cdFx0XHRleGNsdWRlRmllbGRzOiB0aGlzLmV4Y2x1ZGVGaWVsZHMsXHJcblx0XHRcdGZvcm1hdFNldHRpbmdzOiBmb3JtYXRTZXR0aW5ncyxcclxuXHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRTZXR0aW5nczogY29uZGl0aW9uYWxGb3JtYXRTZXR0aW5ncyxcclxuXHRcdFx0Ly8g55So5LqO5pS26LW35bGV5byA5oyH5a6a5bGC57qnLCDov5nnjqnmhI/lj6rog73lsZXlvIDnrKzkuIDlsYIsXHJcblx0XHRcdC8vIOW/hemhu+iuvuWummV4cGFuZEFsbCDkuLpmYWxzZe+8iOm7mOiupOaYr2ZhbHNl77yJ77yMIOi/meagt+WtkOaJjeiDveWunueOsOWPquWxleW8gOS4pOWxglxyXG5cdFx0XHQvLyBkcmlsbGVkTWVtYmVycyxcclxuXHRcdFx0ZXhwYW5kQWxsOiB0cnVlLFxyXG5cdFx0XHRlbmFibGVTb3J0aW5nOiB0cnVlLFxyXG5cdFx0XHRmaWVsZE1hcHBpbmc6IGZpZWxkTWFwcGluZyxcclxuXHRcdFx0Y2FsY3VsYXRlZEZpZWxkU2V0dGluZ3M6IHRoaXMuY29uZmlnLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzLFxyXG5cdFx0XHRzb3J0U2V0dGluZ3M6IHNvcnRTZXR0aW5ncyxcclxuXHRcdFx0Ly8gZ3JvdXBTZXR0aW5nczogdGhpcy5jb25maWcuZ3JvdXBTZXR0aW5ncyxcclxuXHRcdFx0dmFsdWVTb3J0U2V0dGluZ3M6IHRoaXMuY29uZmlnLnZhbHVlU29ydFNldHRpbmdzLFxyXG5cdFx0XHRzaG93R3JhbmRUb3RhbHM6IHRoaXMuY29uZmlnLnNob3dHcmFuZFRvdGFscyxcclxuXHRcdFx0c2hvd1Jvd0dyYW5kVG90YWxzOiB0aGlzLmNvbmZpZy5zaG93Um93R3JhbmRUb3RhbHMsXHJcblx0XHRcdHNob3dDb2x1bW5HcmFuZFRvdGFsczogdGhpcy5jb25maWcuc2hvd0NvbHVtbkdyYW5kVG90YWxzLFxyXG5cdFx0XHRzaG93U3ViVG90YWxzOiB0aGlzLmNvbmZpZy5zaG93U3ViVG90YWxzLFxyXG5cdFx0XHRzaG93Um93U3ViVG90YWxzOiB0aGlzLmNvbmZpZy5zaG93Um93U3ViVG90YWxzLFxyXG5cdFx0XHRzaG93Q29sdW1uU3ViVG90YWxzOiB0aGlzLmNvbmZpZy5zaG93Q29sdW1uU3ViVG90YWxzLFxyXG5cdFx0fTtcclxuXHRcdGNvbnNvbGUubG9nKFwidGhpcy5kYXRhU291cmNlU2V0dGluZ3NcIiwgdGhpcy5kYXRhU291cmNlU2V0dGluZ3MpO1xyXG5cclxuXHRcdHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cdH1cclxuXHJcblx0Z2V0Q2FwdGlvbkJ5TmFtZShuYW1lU3RyaW5nKSB7XHJcblx0XHRpZiAoIW5hbWVTdHJpbmcpIHJldHVybiBcIlwiO1xyXG5cdFx0Y29uc3QgZmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maW5kKChlbCkgPT4gZWwuY29sTmFtZSA9PT0gbmFtZVN0cmluZyk7XHJcblxyXG5cdFx0cmV0dXJuIGZpZWxkXHJcblx0XHRcdD8gZmllbGQubGFuZ1ZhbHVlIHx8XHJcblx0XHRcdFx0XHR0aGlzLnRyYW5zbGF0aW9uW2ZpZWxkICYmIGZpZWxkLmxhbmdDb2RlXSB8fFxyXG5cdFx0XHRcdFx0ZmllbGQubGFuZ0NvZGVcclxuXHRcdFx0OiBcIlwiO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFmdGVyUG9wdWxhdGUoYXJnczogRW5naW5lUG9wdWxhdGVkRXZlbnRBcmdzKTogdm9pZCB7XHJcblx0XHR0aGlzLnRlbXBTdWJ0b3RhbHMgPSBbXTtcclxuXHRcdHRoaXMuZ3JhbmRUb3RhbHMgPSB7fTtcclxuXHRcdHRoaXMuc3ViVG90YWxzID0ge307XHJcblx0XHRsZXQgdGVtcHNob3dBcnJheSA9IFtdO1xyXG5cdFx0dGhpcy5jb25maWcueWF4aXMuc2VyaWVzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGl0ZW0uaGFzT3duUHJvcGVydHkoXCJzaG93U3ViVG90YWxzXCIpICYmXHJcblx0XHRcdFx0aXRlbS5oYXNPd25Qcm9wZXJ0eShcInNob3dHcmFuZFRvdGFsc1wiKVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHR0ZW1wc2hvd0FycmF5LnB1c2goe1xyXG5cdFx0XHRcdFx0bmFtZTogaXRlbS5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0Y2FsTWV0aG9kOiBpdGVtLmNhbE1ldGhvZCxcclxuXHRcdFx0XHRcdHNob3dTdWJUb3RhbHM6IGl0ZW0uc2hvd1N1YlRvdGFscyxcclxuXHRcdFx0XHRcdHNob3dHcmFuZFRvdGFsczogaXRlbS5zaG93R3JhbmRUb3RhbHMsXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoXCJzaG93R3JhbmRUb3RhbHNcIikpIHtcclxuXHRcdFx0XHRcdHRlbXBzaG93QXJyYXkucHVzaCh7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGl0ZW0uY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0Y2FsTWV0aG9kOiBpdGVtLmNhbE1ldGhvZCxcclxuXHRcdFx0XHRcdFx0c2hvd0dyYW5kVG90YWxzOiBpdGVtLnNob3dHcmFuZFRvdGFscyxcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eShcInNob3dTdWJUb3RhbHNcIikpIHtcclxuXHRcdFx0XHRcdHRlbXBzaG93QXJyYXkucHVzaCh7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGl0ZW0uY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0Y2FsTWV0aG9kOiBpdGVtLmNhbE1ldGhvZCxcclxuXHRcdFx0XHRcdFx0c2hvd1N1YlRvdGFsczogaXRlbS5zaG93U3ViVG90YWxzLFxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHRpZiAodGhpcy5maWVsZGxpc3RPYmogJiYgdGhpcy5waXZvdE9iaikge1xyXG5cdFx0XHR0aGlzLmNvbmZpZy5jb2x1bW5Hcm91cCA9IFtdO1xyXG5cdFx0XHR0aGlzLmNvbmZpZy54YXhpcy5ncm91cHMgPSBbXTtcclxuXHRcdFx0dGhpcy5jb25maWcueWF4aXMuc2VyaWVzID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnLmZpbHRlcnMgPSBbXTtcclxuXHRcdFx0dGhpcy5jb25maWcuZmlsdGVyU2V0dGluZ3MgPSBbXTtcclxuXHRcdFx0dGhpcy5jb25maWcuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MgPSBbXTtcclxuXHRcdFx0bGV0IGdyb3VwU2V0dGluZ3MgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmosXHJcblx0XHRcdFx0XCJncm91cFNldHRpbmdzXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0bGV0IGNvbHVtbnMgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmosXHJcblx0XHRcdFx0XCJjb2x1bW5zXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0bGV0IHJvd3MgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmosXHJcblx0XHRcdFx0XCJyb3dzXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0bGV0IGZpbHRlcnMgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmosXHJcblx0XHRcdFx0XCJmaWx0ZXJzXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0bGV0IGZpbHRlclNldHRpbmdzID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwiZmlsdGVyU2V0dGluZ3NcIlxyXG5cdFx0XHQpO1xyXG5cdFx0XHRsZXQgdmFsdWVzID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwidmFsdWVzXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0bGV0IHNvcnRTZXR0aW5ncyA9IHRoaXMuZ2V0RGF0YVNvdXJjZVNldHRpbmdzUHJvcChcclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iaixcclxuXHRcdFx0XHRcInNvcnRTZXR0aW5nc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCBjYWxjdWxhdGVkRmllbGRTZXR0aW5ncyA9IHRoaXMuZ2V0RGF0YVNvdXJjZVNldHRpbmdzUHJvcChcclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iaixcclxuXHRcdFx0XHRcImNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKGdyb3VwU2V0dGluZ3MubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0XHRcdHRoaXMuY29uZmlnLmNvbHVtbkdyb3VwLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBjb2x1bW4ubmFtZSxcclxuXHRcdFx0XHRcdFx0Y2FwdGlvbjpcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldENhcHRpb25CeU5hbWUoY29sdW1uLm5hbWUpIHx8XHJcblx0XHRcdFx0XHRcdFx0Y29sdW1uLmNhcHRpb24sXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly9JZiB0aGVyZSBpcyBhIGdyb3VwLCBmaXJzdCBmaWx0ZXIgdGhlIGNvbHVtbnMgb2YgdGhlIGdyb3VwIGZpZWxkLCBhbmQgdGhlbiBvbmx5IHNhdmUgdGhlIGxhc3Qgb25lXHJcblx0XHRcdFx0Zm9yIChsZXQgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0XHRcdGlmICghc3RhcnRzV2l0aChjb2x1bW4ubmFtZSwgZ3JvdXBTZXR0aW5nc1swXS5uYW1lICsgXCJfXCIpKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuY29uZmlnLmNvbHVtbkdyb3VwLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdG5hbWU6IGNvbHVtbi5uYW1lLFxyXG5cdFx0XHRcdFx0XHRcdGNhcHRpb246XHJcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW4ubmFtZSA9PT0gZ3JvdXBTZXR0aW5nc1swXS5uYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdD8gXCJcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZ2V0Q2FwdGlvbkJ5TmFtZShjb2x1bW4ubmFtZSkgfHxcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICBjb2x1bW4uY2FwdGlvbixcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IHJvdyBvZiByb3dzKSB7XHJcblx0XHRcdFx0dGhpcy5jb25maWcueGF4aXMuZ3JvdXBzLnB1c2goe1xyXG5cdFx0XHRcdFx0bmFtZTogcm93Lm5hbWUsXHJcblx0XHRcdFx0XHRjYXB0aW9uOiB0aGlzLmdldENhcHRpb25CeU5hbWUocm93Lm5hbWUpIHx8IHJvdy5jYXB0aW9uLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XHJcblx0XHRcdFx0dGhpcy5jb25maWcuZmlsdGVycy5wdXNoKHtcclxuXHRcdFx0XHRcdG5hbWU6IGZpbHRlci5uYW1lLFxyXG5cdFx0XHRcdFx0Y2FwdGlvbjpcclxuXHRcdFx0XHRcdFx0dGhpcy5nZXRDYXB0aW9uQnlOYW1lKGZpbHRlci5uYW1lKSB8fCBmaWx0ZXIuY2FwdGlvbixcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAodGhpcy5maWx0ZXJTZXR0aW5ncyAmJiB0aGlzLmZpbHRlclNldHRpbmdzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5maWx0ZXJTZXR0aW5ncyA9IHRoaXMuZmlsdGVyU2V0dGluZ3M7XHJcblx0XHRcdFx0dGhpcy5jb25maWcuZmlsdGVyU2V0dGluZ3MgPSB0aGlzLmZpbHRlclNldHRpbmdzO1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmZpbHRlclNldHRpbmdzO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnLmZpbHRlclNldHRpbmdzID0gZmlsdGVyU2V0dGluZ3M7XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XHJcblx0XHRcdFx0bGV0IHNlcmllc0RhdGE7XHJcblx0XHRcdFx0bGV0IHRlbXBTaG93T2JqO1xyXG5cdFx0XHRcdGxldCBmaWx0ZXJUZW1wc2hvd0FycmF5ID0gW107XHJcblx0XHRcdFx0aWYgKHRlbXBzaG93QXJyYXkubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRmaWx0ZXJUZW1wc2hvd0FycmF5ID0gdGVtcHNob3dBcnJheS5maWx0ZXIoXHJcblx0XHRcdFx0XHRcdChpdGVtKSA9PlxyXG5cdFx0XHRcdFx0XHRcdGl0ZW0ubmFtZSA9PT0gdmFsdWUubmFtZSAmJlxyXG5cdFx0XHRcdFx0XHRcdGl0ZW0uY2FsTWV0aG9kID09PSB2YWx1ZS50eXBlXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0aWYgKGZpbHRlclRlbXBzaG93QXJyYXkubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdHRlbXBTaG93T2JqID0gZmlsdGVyVGVtcHNob3dBcnJheVswXTtcclxuXHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdHRlbXBTaG93T2JqLmhhc093blByb3BlcnR5KFwic2hvd1N1YlRvdGFsc1wiKSAmJlxyXG5cdFx0XHRcdFx0XHRcdHRlbXBTaG93T2JqLmhhc093blByb3BlcnR5KFwic2hvd0dyYW5kVG90YWxzXCIpXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdHNlcmllc0RhdGEgPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb2xOYW1lOiB2YWx1ZS5uYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y2FsTWV0aG9kOiB2YWx1ZS50eXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHZhbHVlLmNhcHRpb24sXHJcblx0XHRcdFx0XHRcdFx0XHRzaG93U3ViVG90YWxzOiB0ZW1wU2hvd09iai5zaG93U3ViVG90YWxzLFxyXG5cdFx0XHRcdFx0XHRcdFx0c2hvd0dyYW5kVG90YWxzOiB0ZW1wU2hvd09iai5zaG93R3JhbmRUb3RhbHMsXHJcblx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAodGVtcFNob3dPYmouaGFzT3duUHJvcGVydHkoXCJzaG93R3JhbmRUb3RhbHNcIikpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHNlcmllc0RhdGEgPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbE5hbWU6IHZhbHVlLm5hbWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNhbE1ldGhvZDogdmFsdWUudHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHZhbHVlLmNhcHRpb24sXHJcblx0XHRcdFx0XHRcdFx0XHRcdHNob3dHcmFuZFRvdGFsczpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ZW1wU2hvd09iai5zaG93R3JhbmRUb3RhbHMsXHJcblx0XHRcdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRpZiAodGVtcFNob3dPYmouaGFzT3duUHJvcGVydHkoXCJzaG93U3ViVG90YWxzXCIpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRzZXJpZXNEYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xOYW1lOiB2YWx1ZS5uYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYWxNZXRob2Q6IHZhbHVlLnR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB2YWx1ZS5jYXB0aW9uLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93U3ViVG90YWxzOiB0ZW1wU2hvd09iai5zaG93U3ViVG90YWxzLFxyXG5cdFx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKCFzZXJpZXNEYXRhKSB7XHJcblx0XHRcdFx0XHRzZXJpZXNEYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRjb2xOYW1lOiB2YWx1ZS5uYW1lLFxyXG5cdFx0XHRcdFx0XHR0aXRsZTogdmFsdWUuY2FwdGlvbixcclxuXHRcdFx0XHRcdFx0Y2FsTWV0aG9kOiB2YWx1ZS50eXBlLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5jb25maWcueWF4aXMuc2VyaWVzLnB1c2goc2VyaWVzRGF0YSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yIChsZXQgY2FsY3VsYXRlIG9mIGNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzKSB7XHJcblx0XHRcdFx0Y29uc3QgY2FsY3VsYXRlRGF0YSA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IGNhbGN1bGF0ZS5uYW1lLFxyXG5cdFx0XHRcdFx0Zm9ybXVsYTogY2FsY3VsYXRlLmZvcm11bGEsXHJcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6XHJcblx0XHRcdFx0XHRcdGNhbGN1bGF0ZS5mb3JtYXRTdHJpbmcgPT09IFwiXCJcclxuXHRcdFx0XHRcdFx0XHQ/IFwiTjJcIlxyXG5cdFx0XHRcdFx0XHRcdDogY2FsY3VsYXRlLmZvcm1hdFN0cmluZyxcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzLnB1c2goY2FsY3VsYXRlRGF0YSk7XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5jb25maWcuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcyA9IHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcztcclxuXHRcdFx0dGhpcy5jb25maWcuc29ydFNldHRpbmdzID0gc29ydFNldHRpbmdzO1xyXG5cdFx0XHR0aGlzLmNvbmZpZy5ncm91cFNldHRpbmdzID0gZ3JvdXBTZXR0aW5ncztcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoudXBkYXRlVmlldyh0aGlzLnBpdm90T2JqKTtcclxuXHRcdH1cclxuXHRcdHRoaXMucG9ydGxldC5jb25maWcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcblx0XHQvL3JlbW92ZSB0aGUgc29ydFxyXG5cdFx0aWYgKHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNvcnRTZXR0aW5ncy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdHRoaXMucHJldmlvdXNTb3J0ID0gdGhpcy5maWVsZGxpc3RPYmoubGFzdFNvcnRJbmZvO1xyXG5cdFx0XHQodGhpcy5maWVsZGxpc3RPYmogYXMgYW55KS5sYXN0U29ydEluZm8gPSBbXTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhZnRlckVuZ2luZVBvcHVsYXRlKGFyZ3M6IGFueSkge1xyXG5cdFx0aWYgKCFCcm93c2VyLmlzRGV2aWNlICYmIHRoaXMuZmllbGRsaXN0T2JqICYmIHRoaXMucGl2b3RPYmopIHtcclxuXHRcdFx0dGhpcy5jb25maWcuZ3JvdXBTZXR0aW5ncyA9IHRoaXMuZ2V0RGF0YVNvdXJjZVNldHRpbmdzUHJvcChcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLFxyXG5cdFx0XHRcdFwiZ3JvdXBTZXR0aW5nc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdHRoaXMucG9ydGxldC5jb25maWcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcblx0XHRcdGlmICh0aGlzLmZpZWxkbGlzdE9iaikgdGhpcy5maWVsZGxpc3RPYmoudXBkYXRlKHRoaXMucGl2b3RPYmopO1xyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmdyaWQucXVlcnlDZWxsSW5mbyA9IHRoaXMucXVlcnlDZWxsLmJpbmQodGhpcyk7XHJcblx0XHRcdHRoaXMucGl2b3RPYmouZ3JpZC5oZWFkZXJDZWxsSW5mbyA9IHRoaXMuaGVhZGVyQ2VsbC5iaW5kKHRoaXMpO1xyXG5cdFx0XHQvLyBTTVAyLTM5Mjkgcm9sbGJhY2tcclxuXHRcdFx0Ly8gaWYgKCF0aGlzLmlzQXBwbHlJUlIpXHJcblx0XHRcdC8vIFx0dGhpcy5nZXRDYWxjdWxhdGlvblJlc3VsdEJ5RGFzaGJvYXJkRGF0YVRhYmxlSWQoKTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLlBpdm90X0RhdGEgJiYgdGhpcy5QaXZvdF9EYXRhLmxlbmd0aCkge1xyXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHR0aGlzLmVuZ2luZVBvcHVsYXRlZChhcmdzKTtcclxuXHRcdFx0fSwgMTUwMCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3Aob2JqLCBrZXkpIHtcclxuXHRcdGxldCBwcm9wID0gbnVsbDtcclxuXHRcdGlmIChvYmogJiYgb2JqLmRhdGFTb3VyY2VTZXR0aW5ncykge1xyXG5cdFx0XHRwcm9wID0gb2JqLmRhdGFTb3VyY2VTZXR0aW5nc1trZXldO1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb3ApID09PSBcIltvYmplY3QgQXJyYXldXCIgJiZcclxuXHRcdFx0XHRwcm9wLmxlbmd0aCA+IDBcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0cHJvcCA9IHByb3AubWFwKChpdGVtKSA9PiBpdGVtLnByb3BlcnRpZXMgfHwgaXRlbSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBwcm9wO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGVuZ2luZVBvcHVsYXRpbmcoYXJncykge1xyXG5cdFx0dGhpcy5ncmFuZFRvdGFscyA9IHt9O1xyXG5cdFx0dGhpcy5zdWJUb3RhbHMgPSB7fTtcclxuXHRcdHRoaXMuYWxsRGF0YVZhbHVlID0gW107XHJcblx0XHQvLyBpZiAoYXJncy5kYXRhU291cmNlU2V0dGluZ3Muc29ydFNldHRpbmdzLmxlbmd0aCkge1xyXG5cdFx0Ly8gXHRmb3IgKFxyXG5cdFx0Ly8gXHRcdGxldCBpID0gMDtcclxuXHRcdC8vIFx0XHRpIDwgYXJncy5kYXRhU291cmNlU2V0dGluZ3Muc29ydFNldHRpbmdzLmxlbmd0aDtcclxuXHRcdC8vIFx0XHRpKytcclxuXHRcdC8vIFx0KSB7XHJcblx0XHQvLyBcdFx0aWYgKFxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoubGFzdFNvcnRJbmZvICYmXHJcblx0XHQvLyBcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5sYXN0U29ydEluZm8ubmFtZSA9PT1cclxuXHRcdC8vIFx0XHRcdFx0YXJncy5kYXRhU291cmNlU2V0dGluZ3Muc29ydFNldHRpbmdzW2ldLm5hbWUgJiZcclxuXHRcdC8vIFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmxhc3RTb3J0SW5mby5vcmRlciA9PT0gXCJBc2NlbmRpbmdcIiAmJlxyXG5cdFx0Ly8gXHRcdFx0IShcclxuXHRcdC8vIFx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmoubGFzdFNvcnRJbmZvLm5hbWUgPT09XHJcblx0XHQvLyBcdFx0XHRcdFx0dGhpcy5wcmV2aW91c1NvcnQubmFtZSAmJlxyXG5cdFx0Ly8gXHRcdFx0XHR0aGlzLnByZXZpb3VzU29ydC5vcmRlciA9PT0gXCJOb25lXCJcclxuXHRcdC8vIFx0XHRcdClcclxuXHRcdC8vIFx0XHQpIHtcclxuXHRcdC8vIFx0XHRcdGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLnNvcnRTZXR0aW5nc1tpXS5vcmRlciA9IFwiTm9uZVwiO1xyXG5cdFx0Ly8gXHRcdH0gZWxzZSBpZiAoXHJcblx0XHQvLyBcdFx0XHR0aGlzLnByZXZpb3VzU29ydCAmJlxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoubGFzdFNvcnRJbmZvICYmXHJcblx0XHQvLyBcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5sYXN0U29ydEluZm8ubmFtZSA9PT1cclxuXHRcdC8vIFx0XHRcdFx0dGhpcy5wcmV2aW91c1NvcnQubmFtZSAmJlxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5wcmV2aW91c1NvcnQub3JkZXIgPT09IFwiQXNjZW5kaW5nXCJcclxuXHRcdC8vIFx0XHQpIHtcclxuXHRcdC8vIFx0XHRcdGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLnNvcnRTZXR0aW5nc1tpXS5vcmRlciA9IFwiQXNjZW5kaW5nXCI7XHJcblx0XHQvLyBcdFx0fVxyXG5cdFx0Ly8gXHR9XHJcblx0XHQvLyB9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgY2VsbENsaWNrKGFyZ3MpIHtcclxuXHRcdGlmIChhcmdzLmN1cnJlbnRDZWxsLmNsYXNzTGlzdC5jb250YWlucyhcImUtaGVhZGVyY2VsbFwiKSkge1xyXG5cdFx0XHR0aGlzLmZsYWcgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0Ly8g5riF6Zmk5o6S5bqPXHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlU29ydFNldHRpbmdzLnNvcnRPcmRlciAmJlxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZVNvcnRTZXR0aW5ncy5oZWFkZXJUZXh0ICYmXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlU29ydFNldHRpbmdzLnNvcnRPcmRlciA9PT1cclxuXHRcdFx0XHRcIkRlc2NlbmRpbmdcIiAmJlxyXG5cdFx0XHRhcmdzLmRhdGEudmFsdWVTb3J0ICYmXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlU29ydFNldHRpbmdzLmhlYWRlclRleHQgPT09XHJcblx0XHRcdFx0YXJncy5kYXRhLnZhbHVlU29ydC5sZXZlbE5hbWVcclxuXHRcdCkge1xyXG5cdFx0XHR0aGlzLnBpdm90T2JqLnNldFByb3BlcnRpZXMoXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0ZGF0YVNvdXJjZVNldHRpbmdzOiB7XHJcblx0XHRcdFx0XHRcdHZhbHVlU29ydFNldHRpbmdzOiB7XHJcblx0XHRcdFx0XHRcdFx0c29ydE9yZGVyOiBcIkRlc2NlbmRpbmdcIixcclxuXHRcdFx0XHRcdFx0XHRoZWFkZXJUZXh0OiBcIlwiLFxyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHRydWVcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKHRoaXMucGl2b3RPYmopIHRoaXMucGl2b3RPYmoucmVmcmVzaERhdGEoKTtcclxuXHRcdFx0dGhpcy5mbGFnID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuY29uZmlnLnZhbHVlU29ydFNldHRpbmdzID0ge307XHJcblx0XHRcdHRoaXMucG9ydGxldC5jb25maWcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHF1ZXJ5Q2VsbChhcmdzOiBhbnkpOiB2b2lkIHtcclxuXHRcdCh0aGlzLnBpdm90T2JqLnJlbmRlck1vZHVsZSBhcyBhbnkpLnJvd0NlbGxCb3VuZEV2ZW50KGFyZ3MpO1xyXG5cdFx0bGV0IHJvd0luZGV4ID0gTnVtYmVyKGFyZ3MuY2VsbC5nZXRBdHRyaWJ1dGUoXCJpbmRleFwiKSk7XHJcblx0XHQvLyDmlrDniYjmnKwyNi545LitIGFyaWEtY29saW5kZXgg5Lya5q+U5pen54mI5pysdjIwLngg5aSaMVxyXG5cdFx0bGV0IGNvbEluZGV4ID0gcGFyc2VJbnQoYXJncy5jZWxsLmdldEF0dHJpYnV0ZShcImFyaWEtY29saW5kZXhcIikpIC0gMTtcclxuXHRcdGlmIChcclxuXHRcdFx0IXRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3MubGVuZ3RoXHJcblx0XHQpIHtcclxuXHRcdFx0aWYgKGFyZ3MuZGF0YSAmJiBhcmdzLmRhdGFbMF0uZm9ybWF0dGVkVGV4dCA9PT0gXCJHcmFuZCBUb3RhbFwiKSB7XHJcblx0XHRcdFx0YXJncy5jZWxsLmNsYXNzTGlzdC5hZGQoXCJncmFuZC1jbGFzc1wiKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLmNlbGwuY2xhc3NMaXN0LmFkZChcclxuXHRcdFx0XHRcdHJvd0luZGV4ICUgMiA/IFwib2RkLWNsYXNzXCIgOiBcImV2ZW4tY2xhc3NcIlxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGxldCBtZWFzdXJlQXJyID1cclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb25kaXRpb25hbEZvcm1hdFNldHRpbmdzLm1hcChcclxuXHRcdFx0XHRcdChvYmopID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIG9iai5tZWFzdXJlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRtZWFzdXJlQXJyLmluY2x1ZGVzKGFyZ3MuZGF0YVtjb2xJbmRleF0uYWN0dWFsVGV4dCkgJiZcclxuXHRcdFx0XHRhcmdzLmRhdGFbY29sSW5kZXhdLnN0eWxlXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGFyZ3MuY2VsbC5zdHlsZS5jc3NUZXh0ICs9IGBiYWNrZ3JvdW5kLWNvbG9yOiAke2FyZ3MuZGF0YVtjb2xJbmRleF0uc3R5bGUuYmFja2dyb3VuZENvbG9yfSAhaW1wb3J0YW50YDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoYXJncy5kYXRhICYmIGFyZ3MuZGF0YVswXS5mb3JtYXR0ZWRUZXh0ID09PSBcIkdyYW5kIFRvdGFsXCIpXHJcblx0XHRcdFx0YXJncy5jZWxsLmNsYXNzTGlzdC5hZGQoXCJlLWN1c3RvbWNsYXNzXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChhcmdzLmRhdGEgJiYgYXJncy5kYXRhWzBdLmZvcm1hdHRlZFRleHQgPT09IFwiR3JhbmQgVG90YWxcIikge1xyXG5cdFx0XHRhcmdzLmNlbGwuY2xhc3NMaXN0LmFkZChcImdyYW5kLWNsYXNzXCIpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKHJvd0luZGV4ICUgMikge1xyXG5cdFx0XHRcdGFyZ3MuY2VsbC5jbGFzc0xpc3QuYWRkKFwib2RkLWNsYXNzXCIpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFyZ3MuY2VsbC5jbGFzc0xpc3QuYWRkKFwiZXZlbi1jbGFzc1wiKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vZ2V0IHNvcnRpbmcgZGF0YVxyXG5cdFx0aWYgKHRoaXMuZmxhZykge1xyXG5cdFx0XHR0aGlzLmZsYWcgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5jb25maWcudmFsdWVTb3J0U2V0dGluZ3MgPVxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlU29ydFNldHRpbmdzW1xyXG5cdFx0XHRcdFx0XCJwcm9wZXJ0aWVzXCJcclxuXHRcdFx0XHRdO1xyXG5cdFx0XHR0aGlzLnBvcnRsZXQuY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG5cdFx0fVxyXG5cdFx0Ly9jdXN0b21pemUgdGhlIGhlYWRlciB0ZXh0XHJcblx0XHRpZiAodGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cy5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGFyZ3MuZGF0YSAmJlxyXG5cdFx0XHRcdGFyZ3MuZGF0YVtjb2xJbmRleF0gJiZcclxuXHRcdFx0XHRhcmdzLmRhdGFbY29sSW5kZXhdLmF4aXMgPT09IFwicm93XCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0YXJncy5jZWxsLnF1ZXJ5U2VsZWN0b3IoXCIuZS1jZWxsdmFsdWVcIikuaW5uZXJUZXh0ID1cclxuXHRcdFx0XHRcdGFyZ3MuZGF0YVtjb2xJbmRleF0uZm9ybWF0dGVkVGV4dDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFNNUDItMjkxMiBzdWJ0b3RhbOWtl+S9k+WKoOeyl1xyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzLmxlbmd0aCAmJlxyXG5cdFx0XHRhcmdzLmRhdGFbY29sSW5kZXhdICYmXHJcblx0XHRcdGFyZ3MuZGF0YVswXS5sZXZlbCAhPT1cclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzLmxlbmd0aCAtIDEgJiZcclxuXHRcdFx0YXJncy5kYXRhW2NvbEluZGV4XS5yb3dIZWFkZXJzICE9PSBcIlwiICYmXHJcblx0XHRcdGFyZ3MuZGF0YVtjb2xJbmRleF0uYXhpcyA9PSBcInZhbHVlXCJcclxuXHRcdCkge1xyXG5cdFx0XHRhcmdzLmNlbGwuY2xhc3NMaXN0LmFkZChcImUtY3VzdG9tY2xhc3NcIik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGhlYWRlckNlbGwoYXJnczogYW55KTogdm9pZCB7XHJcblx0XHQodGhpcy5waXZvdE9iai5yZW5kZXJNb2R1bGUgYXMgYW55KS5jb2x1bW5DZWxsQm91bmRFdmVudChhcmdzKTtcclxuXHRcdGlmICh0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRsZXQgbm9kZSA9IGFyZ3Mubm9kZS5xdWVyeVNlbGVjdG9yKFxyXG5cdFx0XHRcdFwiLmUtaGVhZGVyY2VsbGRpdiAuZS1oZWFkZXJ0ZXh0XCJcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKG5vZGUpIG5vZGUuaW5uZXJUZXh0ID0gYXJncy5jZWxsLmNvbHVtbi5oZWFkZXJUZXh0O1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgdGV4dEFsaWduID0gYXJncy5jZWxsLmNvbHVtbi50ZXh0QWxpZ247XHJcblx0XHRhcmdzLmNlbGwuY29sdW1uLmhlYWRlclRleHRBbGlnbiA9IHRleHRBbGlnbjtcclxuXHRcdGFyZ3Mubm9kZS5zdHlsZS50ZXh0QWxpZ24gPSB0ZXh0QWxpZ24gPT09IFwiUmlnaHRcIiA/IFwicmlnaHRcIiA6IFwibGVmdFwiOyAvLyBBbGlnbiByaWdodCBmb3IgbnVtZXJpYyBjb2x1bW5zXHJcblx0XHRpZiAodGV4dEFsaWduID09PSBcIlJpZ2h0XCIpIHtcclxuXHRcdFx0YXJncy5ub2RlLmNsYXNzTGlzdC5hZGQoXCJoZWFkZXItYWxpZ24tcmlnaHRcIik7XHJcblx0XHR9XHJcblx0XHR0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBkYXRhQm91bmQoZSkge1xyXG5cdFx0aWYgKHRoaXMuaXNJbml0KSB7XHJcblx0XHRcdHRoaXMuaXNJbml0ID0gZmFsc2U7XHJcblx0XHR9XHJcblx0XHR0aGlzLmdyYW5kVG90YWxzID0ge307XHJcblx0XHR0aGlzLnN1YlRvdGFscyA9IHt9O1xyXG5cdFx0aWYgKHRoaXMucGl2b3RPYmouZ3JpZCkge1xyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmdyaWQucmVzaXplU3RvcCA9IHRoaXMucmVzaXplU3RvcC5iaW5kKHRoaXMpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMucGl2b3RPYmopIHtcclxuXHRcdFx0dmFyIGluZGV4ID0gW107XHJcblx0XHRcdC8vIEdldCB0aGUgZW1wdHkgcm93IGhlYWRlcnMgaGVyZS5cclxuXHRcdFx0dmFyIGVtcHR5Um93SGVhZGVyOiBhbnkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG5cdFx0XHRcdCd0ZFthcmlhLWxhYmVsPVwiIGNvbHVtbiBoZWFkZXIgXCJdJ1xyXG5cdFx0XHQpO1xyXG5cdFx0XHRmb3IgKHZhciBlbGUgb2YgZW1wdHlSb3dIZWFkZXIpIHtcclxuXHRcdFx0XHRpZiAoZWxlKSB7XHJcblx0XHRcdFx0XHRpbmRleC5wdXNoKGVsZS5nZXRBdHRyaWJ1dGUoXCJpbmRleFwiKSk7XHJcblx0XHRcdFx0XHQvLyBSZW1vdmUgYWxsIHRoZSBlbXB0eSByb3cgaGVhZGVycyBoZXJlLlxyXG5cdFx0XHRcdFx0ZWxlLmNsb3Nlc3QoXCJ0clwiKS5yZW1vdmUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBpbmRleC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdC8vIEdldCB0aGUgZW1wdHkgdmFsdWVzIGhlcmUuXHJcblx0XHRcdFx0dmFyIGVtcHR5VmFsdWVzID0gdGhpcy5waXZvdE9iai5lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXHJcblx0XHRcdFx0XHRgdGRbaW5kZXg9XCIke2luZGV4W2ldfVwiXWBcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGlmIChlbXB0eVZhbHVlc1swXSkge1xyXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIGFsbCB0aGUgZW1wdHkgdmFsdWUgcm93cyBoZXJlLlxyXG5cdFx0XHRcdFx0ZW1wdHlWYWx1ZXNbMF0uY2xvc2VzdChcInRyXCIpLnJlbW92ZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLmZpZWxkbGlzdE9iaiAmJlxyXG5cdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5waXZvdEJ1dHRvbk1vZHVsZSAmJlxyXG5cdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5waXZvdEJ1dHRvbk1vZHVsZS5tZW51T3B0aW9uXHJcblx0XHQpIHtcclxuXHRcdFx0KFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLnBpdm90QnV0dG9uTW9kdWxlLm1lbnVPcHRpb24gYXMgYW55XHJcblx0XHRcdCkuc3RyaW5nQWdncmVnYXRlVHlwZXMgPSBbXHJcblx0XHRcdFx0XCJDb3VudFwiLFxyXG5cdFx0XHRcdFwiRGlzdGluY3RDb3VudFwiLFxyXG5cdFx0XHRcdFwiRmlyc3RcIixcclxuXHRcdFx0XHRcIkxhc3RcIixcclxuXHRcdFx0XTtcclxuXHRcdH1cclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5waXZvdE9iai5waXZvdEJ1dHRvbk1vZHVsZSAmJlxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLnBpdm90QnV0dG9uTW9kdWxlLm1lbnVPcHRpb25cclxuXHRcdCkge1xyXG5cdFx0XHQoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5waXZvdEJ1dHRvbk1vZHVsZS5tZW51T3B0aW9uIGFzIGFueVxyXG5cdFx0XHQpLnN0cmluZ0FnZ3JlZ2F0ZVR5cGVzID0gW1xyXG5cdFx0XHRcdFwiQ291bnRcIixcclxuXHRcdFx0XHRcIkRpc3RpbmN0Q291bnRcIixcclxuXHRcdFx0XHRcIkZpcnN0XCIsXHJcblx0XHRcdFx0XCJMYXN0XCIsXHJcblx0XHRcdF07XHJcblx0XHR9XHJcblx0XHRsZXQgYWxsU3VtbWFyeVR5cGUgPSBBTExfQUdHUkVHQVRFX1RZUEVTIGFzIGFueTtcclxuXHRcdHRoaXMucGl2b3RPYmouZ2V0QWxsU3VtbWFyeVR5cGUgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHJldHVybiBhbGxTdW1tYXJ5VHlwZTtcclxuXHRcdH07XHJcblx0XHRpZiAodGhpcy5maWVsZGxpc3RPYmopIHtcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmouYWdncmVnYXRlVHlwZXMgPSBhbGxTdW1tYXJ5VHlwZTtcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZ2V0QWxsU3VtbWFyeVR5cGUgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0cmV0dXJuIGFsbFN1bW1hcnlUeXBlO1xyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5zZXRWYWx1ZUl0ZW1EYXRhKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNldFZhbHVlSXRlbURhdGEoKSB7XHJcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0Y29uc3QgZmllbGREb20gPSB0aGlzLmZpZWxkbGlzdE9iai5maWVsZExpc3RTcGlubmVyRWxlbWVudDtcclxuXHRcdFx0dGhpcy5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVzLmZvckVhY2goKHZhbHVlOiBhbnkpID0+IHtcclxuXHRcdFx0XHRpZiAodmFsdWUudHlwZSAhPT0gXCJGaXJzdFwiICYmIHZhbHVlLnR5cGUgIT09IFwiTGFzdFwiKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IHZhbHVlc0RvbSA9IGZpZWxkRG9tLnF1ZXJ5U2VsZWN0b3IoXHJcblx0XHRcdFx0XHRgLmUtdmFsdWVzIC4ke3ZhbHVlLm5hbWV9IC5lLXB2dC1idG4tY29udGVudGBcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdHZhbHVlc0RvbS5pbm5lckhUTUwgIT09IGAke3ZhbHVlLnR5cGV9IG9mICR7dmFsdWUuY2FwdGlvbn1gXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHR2YWx1ZXNEb20uaW5uZXJIVE1MID0gYCR7dmFsdWUudHlwZX0gb2YgJHt2YWx1ZS5jYXB0aW9ufWA7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjYWxjdWxhdGVkQ2VsbFNldHMoYXJncywgY3VyRmllbGRzKSB7XHJcblx0XHRsZXQgbWF0Y2hGaWVsZHMgPSBjdXJGaWVsZHNbXCJtYXRjaEZpZWxkc1wiXTtcclxuXHRcdGxldCBmb3JtdWxhID0gY3VyRmllbGRzW1wiZm9ybXVsYVwiXTtcclxuXHRcdGxldCB2YWx1ZSA9IDA7XHJcblx0XHRsZXQgcm93cyA9IHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3M7XHJcblx0XHRsZXQgaW52YWxpZFR5cGVzID0gW1wic3RyaW5nXCIsIFwibnZhcmNoYXJcIiwgXCJkYXRlXCIsIFwiZGF0ZXRpbWVcIl07XHJcblx0XHRsZXQgaXNJbnZhbGlkID0gbWF0Y2hGaWVsZHMuc29tZSgoZikgPT5cclxuXHRcdFx0aW52YWxpZFR5cGVzLmluY2x1ZGVzKFxyXG5cdFx0XHRcdHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcigoZWwpID0+IGVsLmNvbE5hbWUgPT09IGYubWF0Y2hXb3JkKVswXVtcclxuXHRcdFx0XHRcdFwiZGF0YVR5cGVcIlxyXG5cdFx0XHRcdF1cclxuXHRcdFx0KVxyXG5cdFx0KTtcclxuXHRcdGxldCBjdXJyZW50cm93Q2VsbFR5cGUgPSBhcmdzLnJvd0NlbGxUeXBlO1xyXG5cdFx0aWYgKGlzSW52YWxpZCkgcmV0dXJuIFwiLVwiO1xyXG5cdFx0aWYgKFxyXG5cdFx0XHRhcmdzLnJvd0NlbGxUeXBlID09PSBcInN1YlRvdGFsXCIgfHxcclxuXHRcdFx0YXJncy5yb3dDZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCJcclxuXHRcdCkge1xyXG5cdFx0XHRsZXQgY2hpbGRIZWFkZXJzID0gW107XHJcblx0XHRcdGxldCBzdW0gPSAwO1xyXG5cdFx0XHRsZXQgY2xvbmVDZWxsU2V0cyA9IGNsb25lRGVlcChhcmdzLmNlbGxTZXRzKTtcclxuXHRcdFx0bGV0IGdyb3VwTmFtZUFycmF5cyA9IFtdO1xyXG5cdFx0XHRmb3IgKGxldCBpbmRleCA9IGFyZ3Mucm93LmxldmVsOyBpbmRleCA8IHJvd3MubGVuZ3RoOyBpbmRleCsrKSB7XHJcblx0XHRcdFx0Z3JvdXBOYW1lQXJyYXlzLnB1c2gocm93c1tpbmRleF0ubmFtZSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjbG9uZUNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0bGV0IHZhbHVlcyA9IFtdO1xyXG5cdFx0XHRcdGxldCBoZWFkZXIgPSBncm91cE5hbWVBcnJheXNcclxuXHRcdFx0XHRcdC5tYXAoKG5hbWUpID0+IHtcclxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goY2xvbmVDZWxsU2V0c1tpXVtuYW1lXSk7XHJcblx0XHRcdFx0XHRcdHJldHVybiBjbG9uZUNlbGxTZXRzW2ldW25hbWVdO1xyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdC5qb2luKFwiLVwiKTtcclxuXHRcdFx0XHRpZiAoIShjaGlsZEhlYWRlcnMgYXMgYW55KS5pbmNsdWRlcyhoZWFkZXIpKSB7XHJcblx0XHRcdFx0XHRjaGlsZEhlYWRlcnMucHVzaChoZWFkZXIpO1xyXG5cdFx0XHRcdFx0bGV0IGZpbHRlck9iajogYW55ID0ge307XHJcblx0XHRcdFx0XHRncm91cE5hbWVBcnJheXMubWFwKFxyXG5cdFx0XHRcdFx0XHQobmFtZSwgaSkgPT4gKGZpbHRlck9ialtuYW1lXSA9IHZhbHVlc1tpXSlcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRhcmdzLmNlbGxTZXRzID0gX2ZpbHRlcihjbG9uZUNlbGxTZXRzLCBmaWx0ZXJPYmopO1xyXG5cdFx0XHRcdFx0YXJncy5yb3dDZWxsVHlwZSA9IFwidmFsdWVcIjtcclxuXHRcdFx0XHRcdHN1bSArPSB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXMoYXJncywgbWF0Y2hGaWVsZHMsIGZvcm11bGEpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRhcmdzLnJvd0NlbGxUeXBlID0gY3VycmVudHJvd0NlbGxUeXBlO1xyXG5cclxuXHRcdFx0Ly8g5pqC5a2Y5b2T5YmNU3ViVG90YWzvvIwg55So5LqO5pS257yp5pe26K+75Y+WXHJcblx0XHRcdGxldCBwcmVmaXhIZWFkZXIgPSB0aGlzLmdldENhbGNIZWFkZXIoYXJncywgZm9ybXVsYSk7XHJcblx0XHRcdHRoaXMudXBkYXRlVGVtcFN1YnRvdGFscyhwcmVmaXhIZWFkZXIsIHN1bSk7XHJcblx0XHRcdHJldHVybiBzdW07XHJcblx0XHR9IGVsc2UgaWYgKGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwidmFsdWVcIikge1xyXG5cdFx0XHRpZiAoYXJncy5yb3cuaGFzQ2hpbGQpIHtcclxuXHRcdFx0XHQvLyBjb2xsYXBzZSDor7vlj5ZTdWJUb3RhbFxyXG5cdFx0XHRcdGxldCBoZWFkZXIgPSB0aGlzLmdldENhbGNIZWFkZXIoYXJncywgZm9ybXVsYSk7XHJcblx0XHRcdFx0bGV0IGluZGV4ID0gdGhpcy50ZW1wU3VidG90YWxzLmZpbmRJbmRleChcclxuXHRcdFx0XHRcdChpdGVtKSA9PiBpdGVtLnJvd05hbWUgPT09IGhlYWRlclxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0aWYgKGluZGV4ID4gLTEpIHtcclxuXHRcdFx0XHRcdHZhbHVlID0gdGhpcy50ZW1wU3VidG90YWxzW2luZGV4XS5yb3dWYWx1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gZXhwYW5kXHJcblx0XHRcdFx0dmFsdWUgPSB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXMoYXJncywgbWF0Y2hGaWVsZHMsIGZvcm11bGEpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRhY3Rpb25GYWlsdXJlKGFyZ3M6IFBpdm90QWN0aW9uRmFpbHVyZUV2ZW50QXJncyk6IHZvaWQge1xyXG5cdFx0aWYgKGFyZ3MuYWN0aW9uTmFtZSA9PSBcIkRyaWxsIGRvd25cIiB8fCBhcmdzLmFjdGlvbk5hbWUgPT0gXCJEcmlsbCB1cFwiKSB7XHJcblx0XHRcdC8vIFRyaWdnZXJzIHdoZW4gdGhlIGN1cnJlbnQgVUkgYWN0aW9uIGZhaWxzIHRvIGFjaGlldmUgdGhlIGRlc2lyZWQgcmVzdWx0LlxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRDYWxjSGVhZGVyKGFyZ3MsIGZvcm11bGE/KSB7XHJcblx0XHRsZXQgaGVhZGVyID0gXCJcIjtcclxuXHRcdGxldCByb3dzID0gdGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cztcclxuXHRcdGxldCBncm91cE5hbWVBcnJheXMgPSBbXTtcclxuXHRcdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcmdzLnJvdy5sZXZlbDsgaW5kZXgrKykge1xyXG5cdFx0XHRncm91cE5hbWVBcnJheXMucHVzaChyb3dzW2luZGV4XS5uYW1lKTtcclxuXHRcdH1cclxuXHRcdGhlYWRlciA9IGdyb3VwTmFtZUFycmF5cy5sZW5ndGhcclxuXHRcdFx0PyBncm91cE5hbWVBcnJheXNcclxuXHRcdFx0XHRcdC5tYXAoKG5hbWUpID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGFyZ3MuY2VsbFNldHNbMF1bbmFtZV07XHJcblx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0LmpvaW4oXCItXCIpICtcclxuXHRcdFx0ICBcIi1cIiArXHJcblx0XHRcdCAgYXJncy5yb3cuYWN0dWFsVGV4dFxyXG5cdFx0XHQ6IGFyZ3Mucm93LmFjdHVhbFRleHQ7XHJcblx0XHRpZiAoZm9ybXVsYSkgaGVhZGVyICs9IFwiX19fXCIgKyBmb3JtdWxhO1xyXG5cdFx0cmV0dXJuIGhlYWRlcjtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgdXBkYXRlVGVtcFN1YnRvdGFscyhyb3dOYW1lLCByb3dWYWx1ZSkge1xyXG5cdFx0bGV0IGluZGV4ID0gdGhpcy50ZW1wU3VidG90YWxzLmZpbmRJbmRleChcclxuXHRcdFx0KGl0ZW0pID0+IGl0ZW0ucm93TmFtZSA9PT0gcm93TmFtZVxyXG5cdFx0KTtcclxuXHRcdGxldCB0ZW1wOiBhbnkgPSB7fTtcclxuXHRcdHRlbXAucm93TmFtZSA9IHJvd05hbWU7XHJcblx0XHR0ZW1wLnJvd1ZhbHVlID0gcm93VmFsdWU7XHJcblx0XHRpZiAoaW5kZXggPiAtMSkge1xyXG5cdFx0XHR0aGlzLnRlbXBTdWJ0b3RhbHMuc3BsaWNlKGluZGV4LCAxLCB0ZW1wKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMudGVtcFN1YnRvdGFscy5wdXNoKHRlbXApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjYWxjdWxhdGVkVmFsdWVzKGFyZ3MsIG1hdGNoRmllbGRzLCBmb3JtdWxhKSB7XHJcblx0XHRpZiAobWF0Y2hGaWVsZHMubGVuZ3RoKSB7XHJcblx0XHRcdGxldCBjYWxjdWxlZE1hdGNoRmllbGRzID0gbWF0Y2hGaWVsZHMubWFwKChmKSA9PiB7XHJcblx0XHRcdFx0c3dpdGNoIChmLm1hdGNoTWV0aG9kKSB7XHJcblx0XHRcdFx0XHRjYXNlIFwiRmlyc3RcIjpcclxuXHRcdFx0XHRcdGNhc2UgXCJMYXN0XCI6XHJcblx0XHRcdFx0XHRcdGYucmVwbGFjZVZhbHVlID0gdGhpcy5jYWxjdWxhdGVkRmlzdExhc3QoXHJcblx0XHRcdFx0XHRcdFx0YXJncyxcclxuXHRcdFx0XHRcdFx0XHRmLm1hdGNoTWV0aG9kLFxyXG5cdFx0XHRcdFx0XHRcdGYubWF0Y2hXb3JkXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0Y2FzZSBcIk1heFwiOlxyXG5cdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSA9IG1heEJ5KGFyZ3MuY2VsbFNldHMsIChvKSA9PlxyXG5cdFx0XHRcdFx0XHRcdE51bWJlcihvW2YubWF0Y2hXb3JkXSlcclxuXHRcdFx0XHRcdFx0KVtmLm1hdGNoV29yZF07XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0Y2FzZSBcIk1pblwiOlxyXG5cdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSA9IG1pbkJ5KGFyZ3MuY2VsbFNldHMsIChvKSA9PlxyXG5cdFx0XHRcdFx0XHRcdE51bWJlcihvW2YubWF0Y2hXb3JkXSlcclxuXHRcdFx0XHRcdFx0KVtmLm1hdGNoV29yZF07XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0Y2FzZSBcIlN1bVwiOlxyXG5cdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSA9IHN1bUJ5KGFyZ3MuY2VsbFNldHMsIChvKSA9PlxyXG5cdFx0XHRcdFx0XHRcdE51bWJlcihvW2YubWF0Y2hXb3JkXSlcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Ly8gU01QMi00MDk0IFVuaWNvcm4gLSBMMyBBZGp1c3RlZCBOQVYgdmFsdWUgaXNzdWVzXHJcblx0XHRcdFx0XHRcdGYucmVwbGFjZVZhbHVlID1cclxuXHRcdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSAmJiBmLnJlcGxhY2VWYWx1ZS50b0ZpeGVkKDEwKTtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRjYXNlIFwiQXZnXCI6XHJcblx0XHRcdFx0XHRcdGYucmVwbGFjZVZhbHVlID0gbWVhbkJ5KGFyZ3MuY2VsbFNldHMsIChvKSA9PlxyXG5cdFx0XHRcdFx0XHRcdE51bWJlcihvW2YubWF0Y2hXb3JkXSlcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGY7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRsZXQgcmVzdWx0Rm9ybXVsYSA9IGZvcm11bGE7XHJcblx0XHRcdGlmIChjYWxjdWxlZE1hdGNoRmllbGRzLmxlbmd0aCkge1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2FsY3VsZWRNYXRjaEZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0cmVzdWx0Rm9ybXVsYSA9IHJlc3VsdEZvcm11bGEucmVwbGFjZShcclxuXHRcdFx0XHRcdFx0Y2FsY3VsZWRNYXRjaEZpZWxkc1tpXS5tYXRjaFN0cixcclxuXHRcdFx0XHRcdFx0XCIoXCIgKyBjYWxjdWxlZE1hdGNoRmllbGRzW2ldLnJlcGxhY2VWYWx1ZSArIFwiKVwiXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGxldCByZXN1bHQgPSBuZXcgRnVuY3Rpb24oXHJcblx0XHRcdFx0XHRcInJldHVybiBcIiArIHJlc3VsdEZvcm11bGEucmVwbGFjZSgvW14tPD4/OigpXFxkLyorLl0vZywgXCJcIilcclxuXHRcdFx0XHQpKCk7XHJcblx0XHRcdFx0aWYgKGlzTmFOKHJlc3VsdCkgfHwgIWlzRmluaXRlKHJlc3VsdCkpIHtcclxuXHRcdFx0XHRcdHJldHVybiAwO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0XHRyZXR1cm4gTmFOO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblxyXG5cdHRvdGFsRm9ybWF0dGVkID0ge307XHJcblx0cHVibGljIGFnZ3JlZ2F0ZUNlbGxJbmZvKGFyZ3MpIHtcclxuXHRcdGxldCBhc09mRGF0ZSA9IHRoaXMucGJmLnRpbWUodGhpcy5kYXNoYm9hcmQuYXNPZkRhdGUpO1xyXG5cdFx0Ly8gaWYgY2FsY3VsYXRlZCBmaWVsZFxyXG5cdFx0aWYgKGFyZ3MuYWdncmVnYXRlVHlwZSA9PSBcIkNhbGN1bGF0ZWRGaWVsZFwiKSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0aWYgKGFyZ3MuZmllbGROYW1lID09IHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1tpXS5uYW1lKSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gdGhpcy5jYWxjdWxhdGVkQ2VsbFNldHMoXHJcblx0XHRcdFx0XHRcdGFyZ3MsXHJcblx0XHRcdFx0XHRcdHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1tpXVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAoXHJcblx0XHRcdFtcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZUlSUlwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlSVJSQmVmb3JlQ2FycmllZFwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlSVJSSVJSRGF0ZVwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlSVJSTVREXCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVJUlJRVERcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZUlSUllURFwiLFxyXG5cdFx0XHRdLmluY2x1ZGVzKGFyZ3MuYWdncmVnYXRlVHlwZSlcclxuXHRcdCkge1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcIj09PT09PT09PT09PT09PT09PT09PT09PT09XCIpO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcImFyZ3M6XCIsIGFyZ3MpO1xyXG5cdFx0XHRsZXQgdmFsdWVGaWVsZDtcclxuXHRcdFx0bGV0IGRhdGVGaWVsZDtcclxuXHRcdFx0bGV0IHN0YXJ0RGF0ZTtcclxuXHRcdFx0bGV0IGVuZERhdGU7XHJcblx0XHRcdHN3aXRjaCAoYXJncy5hZ2dyZWdhdGVUeXBlKSB7XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZUlSUlwiOlxyXG5cdFx0XHRcdFx0dmFsdWVGaWVsZCA9IFwiSVJSQWRqVmFsdWVcIjtcclxuXHRcdFx0XHRcdGRhdGVGaWVsZCA9IFwiSVJSRGF0ZVwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZUlSUk1URFwiOlxyXG5cdFx0XHRcdFx0c3RhcnREYXRlID0gbW9tZW50KGFzT2ZEYXRlKVxyXG5cdFx0XHRcdFx0XHQuc3RhcnRPZihcIm1vbnRoXCIpXHJcblx0XHRcdFx0XHRcdC5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xyXG5cdFx0XHRcdFx0ZW5kRGF0ZSA9IG1vbWVudChhc09mRGF0ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHRcdFx0XHRcdHZhbHVlRmllbGQgPSBcIklSUkFkalZhbHVlXCI7XHJcblx0XHRcdFx0XHRkYXRlRmllbGQgPSBcIklSUkRhdGVcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVJUlJRVERcIjpcclxuXHRcdFx0XHRcdHN0YXJ0RGF0ZSA9IG1vbWVudChhc09mRGF0ZSlcclxuXHRcdFx0XHRcdFx0LnN0YXJ0T2YoXCJxdWFydGVyXCIpXHJcblx0XHRcdFx0XHRcdC5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xyXG5cdFx0XHRcdFx0ZW5kRGF0ZSA9IG1vbWVudChhc09mRGF0ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHRcdFx0XHRcdHZhbHVlRmllbGQgPSBcIklSUkFkalZhbHVlXCI7XHJcblx0XHRcdFx0XHRkYXRlRmllbGQgPSBcIklSUkRhdGVcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVJUlJZVERcIjpcclxuXHRcdFx0XHRcdHN0YXJ0RGF0ZSA9IG1vbWVudChhc09mRGF0ZSlcclxuXHRcdFx0XHRcdFx0LnN0YXJ0T2YoXCJ5ZWFyXCIpXHJcblx0XHRcdFx0XHRcdC5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xyXG5cdFx0XHRcdFx0ZW5kRGF0ZSA9IG1vbWVudChhc09mRGF0ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHRcdFx0XHRcdHZhbHVlRmllbGQgPSBcIklSUkFkalZhbHVlXCI7XHJcblx0XHRcdFx0XHRkYXRlRmllbGQgPSBcIklSUkRhdGVcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVJUlJJUlJEYXRlXCI6XHJcblx0XHRcdFx0XHR2YWx1ZUZpZWxkID0gXCJJUlJBZGpWYWx1ZVwiO1xyXG5cdFx0XHRcdFx0ZGF0ZUZpZWxkID0gXCJDYWxjdWxhdGVJUlJEYXRlXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlSVJSQmVmb3JlQ2FycmllZFwiOlxyXG5cdFx0XHRcdFx0dmFsdWVGaWVsZCA9IFwiSVJSQWRqVmFsdWVCZWZvcmVDYXJyeVwiO1xyXG5cdFx0XHRcdFx0ZGF0ZUZpZWxkID0gXCJJUlJEYXRlXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdFx0bGV0IE5BVkFkaiA9IDA7XHJcblx0XHRcdGxldCB2YWx1ZXMgPSBbXTtcclxuXHRcdFx0bGV0IGJlZm9yZVN0YXJ0TkFWQWRqID0gMDsgLy8g5a2Y5YKo5LiK5LiA5Liq6Zi25q6155qETkFWQWRq5oC75ZKMXHJcblx0XHRcdGxldCBiZWZvcmVTdGFydFZhbHVlcyA9IFtdOyAvLyDlrZjlgqjkuIrkuIDkuKrpmLbmrrXnmoTntK/orqHpm4blkIggKOWPquaYr+S4uuS6huaJk+WNsO+8jOayoeacieWunumZheeUqOmAlClcclxuXHRcdFx0bGV0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdGVsLmNvbE5hbWUgPT09XHJcblx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmdldEFnZ3JlZ2F0ZVR5cGUoXHJcblx0XHRcdFx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZVxyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MuY2VsbFNldHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRjb25zdCBkYXRhID0ge1xyXG5cdFx0XHRcdFx0YW1vdW50OiBhcmdzLmNlbGxTZXRzW2ldW1wiSVJSQW1vdW50XCJdLFxyXG5cdFx0XHRcdFx0ZGF0ZTpcclxuXHRcdFx0XHRcdFx0dGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW2RhdGVGaWVsZF0pID09PVxyXG5cdFx0XHRcdFx0XHRcIkludmFsaWQgZGF0ZVwiXHJcblx0XHRcdFx0XHRcdFx0PyBhc09mRGF0ZVxyXG5cdFx0XHRcdFx0XHRcdDogdGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW2RhdGVGaWVsZF0pLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0Ly8gU01QMi0xNjkyMFxyXG5cdFx0XHRcdC8vIElmIElSUiBEYXRlID4gRGFzaGJvYXJkIHJlcG9ydCBkYXRlID0gVGFrZXMgYXMgb2YgZGFzaGJvYXJkIHJlcG9ydCBkYXRlXHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZUlSUklSUkRhdGVcIiAmJlxyXG5cdFx0XHRcdFx0YXNPZkRhdGUgPCB0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bZGF0ZUZpZWxkXSlcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGRhdGEuZGF0ZSA9IGFzT2ZEYXRlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHROQVZBZGogKz0gYXJncy5jZWxsU2V0c1tpXVt2YWx1ZUZpZWxkXTtcclxuXHRcdFx0XHQvLyBTTVAyLTE3MjE5IE1URCBRVEQgWVREIElSUlxyXG5cdFx0XHRcdGlmIChzdGFydERhdGUgJiYgZW5kRGF0ZSkge1xyXG5cdFx0XHRcdFx0aWYgKG1vbWVudChkYXRhLmRhdGUpLmlzQmVmb3JlKHN0YXJ0RGF0ZSkpIHtcclxuXHRcdFx0XHRcdFx0ZGF0YVt2YWx1ZUZpZWxkXSA9IGFyZ3MuY2VsbFNldHNbaV1bdmFsdWVGaWVsZF07XHJcblx0XHRcdFx0XHRcdGJlZm9yZVN0YXJ0VmFsdWVzLnB1c2goZGF0YSk7XHJcblx0XHRcdFx0XHRcdGJlZm9yZVN0YXJ0TkFWQWRqICs9IGRhdGFbdmFsdWVGaWVsZF07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdCFtb21lbnQoZGF0YS5kYXRlKS5pc0JldHdlZW4oXHJcblx0XHRcdFx0XHRcdFx0c3RhcnREYXRlLFxyXG5cdFx0XHRcdFx0XHRcdGVuZERhdGUsXHJcblx0XHRcdFx0XHRcdFx0bnVsbCxcclxuXHRcdFx0XHRcdFx0XHRcIltdXCJcclxuXHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoZGF0YS5hbW91bnQgIT0gMCkge1xyXG5cdFx0XHRcdFx0dmFsdWVzLnB1c2goZGF0YSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChOQVZBZGogPiAwLjAwMDEgfHwgTkFWQWRqIDwgLTAuMDAwMSkge1xyXG5cdFx0XHRcdHZhbHVlcy5wdXNoKHtcclxuXHRcdFx0XHRcdGFtb3VudDogTkFWQWRqLFxyXG5cdFx0XHRcdFx0ZGF0ZTogYXNPZkRhdGUsXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFsdWVzID0gc29ydEJ5KHZhbHVlcywgXCJkYXRlXCIpO1xyXG5cdFx0XHQvLyDlpoLmnpzmmK9NVEQsUVRELFlURCDliJnpnIDopoHmiorlvZPliY3pmLbmrrXku6XliY3nmoTmiYDmnInmlbDmja7ov5vooYzmsYfmgLvvvIzliqDlhaXorqHnrpdcclxuXHRcdFx0aWYgKHN0YXJ0RGF0ZSAmJiBlbmREYXRlKSB7XHJcblx0XHRcdFx0dmFsdWVzLnVuc2hpZnQoe1xyXG5cdFx0XHRcdFx0YW1vdW50OiAtYmVmb3JlU3RhcnROQVZBZGosIC8vIOW8gOWni+eahOaVsOaNrumcgOimgeWPluWPjVxyXG5cdFx0XHRcdFx0ZGF0ZTogdGhpcy5wYmYudGltZShzdGFydERhdGUpLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwiYmVmb3JlU3RhcnRWYWx1ZXM6XCIsIGJlZm9yZVN0YXJ0VmFsdWVzKTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJ2YWx1ZXM6XCIsIHZhbHVlcyk7XHJcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGxldCBndWVzcyA9IDAuMTtcclxuXHRcdFx0XHRjb25zdCBzdW1BbW91bnQgPSB2YWx1ZXNcclxuXHRcdFx0XHRcdC5tYXAoKGl0ZW0pID0+IGl0ZW0uYW1vdW50KVxyXG5cdFx0XHRcdFx0LnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIsIDApO1xyXG5cdFx0XHRcdGlmIChzdW1BbW91bnQgPCAwKSB7XHJcblx0XHRcdFx0XHRndWVzcyA9IC0wLjE7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vU01QMi0yMjQ5IGZpeGVkIHRoZSBiaWcgaXJyIGlzc3VlXHJcblx0XHRcdFx0aWYgKHN1bUFtb3VudCA9PT0gMCkge1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IDA7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlSXRlbXMgPSB2YWx1ZXMuc2xpY2UoMCwgdmFsdWVzLmxlbmd0aCAtIDEpO1xyXG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0ID0gdmFsdWVJdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uYW1vdW50KTtcclxuXHRcdFx0XHRcdGNvbnN0IGRhdGVMaXN0ID0gdmFsdWVJdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uZGF0ZSk7XHJcblx0XHRcdFx0XHRjb25zdCBsYXN0SXRlbSA9IHZhbHVlc1t2YWx1ZXMubGVuZ3RoIC0gMV07XHJcblx0XHRcdFx0XHRjb25zdCBuYXZBZGp1c3QgPSBsYXN0SXRlbS5hbW91bnQ7XHJcblx0XHRcdFx0XHRjb25zdCBsYXRlc3REYXRlID0gbGFzdEl0ZW0uZGF0ZTtcclxuXHRcdFx0XHRcdGxldCBpcnIgPVxyXG5cdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLkV4Y2VsRm9ybXVsYXMuX0NhbGN1bGF0ZVhpcnIoXHJcblx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0LFxyXG5cdFx0XHRcdFx0XHRcdGRhdGVMaXN0LFxyXG5cdFx0XHRcdFx0XHRcdG5hdkFkanVzdCxcclxuXHRcdFx0XHRcdFx0XHRsYXRlc3REYXRlXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gaXJyID09PSBudWxsID8gXCJcIiA6IGlycjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJhcmdzLnZhbHVlOlwiLCBhcmdzLnZhbHVlKTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlICYmXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXTtcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdID0ge1xyXG5cdFx0XHRcdFx0bmFtZTogYXJncy5maWVsZE5hbWUsXHJcblx0XHRcdFx0XHRmb3JtYXQ6XHJcblx0XHRcdFx0XHRcdGZpZWxkLmxlbmd0aCA+IDBcclxuXHRcdFx0XHRcdFx0XHQ/IGZpZWxkWzBdLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0WzBdLmZvcm1hdENoZWNrZWRcclxuXHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZvcm1hdFBlcmNlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZHBcclxuXHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdDogXCJQMlwiLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyAgU01QMi0xNjUyMCBUV1Ig5pyIL+Wtoy/lubQgJiYgU01QMi0xNjY4MyBWQVJcclxuXHRcdGlmIChcclxuXHRcdFx0W1xyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVFdSTVREXCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVUV1JRVERcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVRXUllURFwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVkFSTVREXzk5XCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVWQVJRVERfOTlcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVZBUllURF85OVwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVkFSTVREXzk1XCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVWQVJRVERfOTVcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVZBUllURF85NVwiLFxyXG5cdFx0XHRdLmluY2x1ZGVzKGFyZ3MuYWdncmVnYXRlVHlwZSlcclxuXHRcdCkge1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcIj09PT09PT09PT09PT09PT09PT09PT09PT09XCIpO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcImFyZ3M6XCIsIGFyZ3MpO1xyXG5cdFx0XHRsZXQgdmFsdWVGaWVsZCA9IFwiSVJSQWRqVmFsdWVcIjtcclxuXHRcdFx0bGV0IGRhdGVGaWVsZCA9IFwiSVJSRGF0ZVwiO1xyXG5cdFx0XHRsZXQgdGltZVJhbmdlO1xyXG5cdFx0XHRzd2l0Y2ggKGFyZ3MuYWdncmVnYXRlVHlwZSkge1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVUV1JNVERcIjpcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVkFSTVREXzk5XCI6XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVZBUk1URF85NVwiOlxyXG5cdFx0XHRcdFx0dGltZVJhbmdlID0gXCJtb250aFwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVRXUlFURFwiOlxyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVWQVJRVERfOTlcIjpcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVkFSUVREXzk1XCI6XHJcblx0XHRcdFx0XHR0aW1lUmFuZ2UgPSBcInF1YXJ0ZXJcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVUV1JZVERcIjpcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVkFSWVREXzk5XCI6XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVZBUllURF85NVwiOlxyXG5cdFx0XHRcdFx0dGltZVJhbmdlID0gXCJ5ZWFyXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdFx0bGV0IHZhbHVlcyA9IFtdOyAvLyDov5nkuKrpmLbmrrXnmoTntK/orqHpm4blkIhcclxuXHRcdFx0bGV0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdGVsLmNvbE5hbWUgPT09XHJcblx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmdldEFnZ3JlZ2F0ZVR5cGUoXHJcblx0XHRcdFx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZVxyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MuY2VsbFNldHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRjb25zdCBkYXRhID0ge1xyXG5cdFx0XHRcdFx0W3ZhbHVlRmllbGRdOiBhcmdzLmNlbGxTZXRzW2ldW3ZhbHVlRmllbGRdLFxyXG5cdFx0XHRcdFx0ZGF0ZTpcclxuXHRcdFx0XHRcdFx0dGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW2RhdGVGaWVsZF0pID09PVxyXG5cdFx0XHRcdFx0XHRcIkludmFsaWQgZGF0ZVwiXHJcblx0XHRcdFx0XHRcdFx0PyBhc09mRGF0ZVxyXG5cdFx0XHRcdFx0XHRcdDogdGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW2RhdGVGaWVsZF0pLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0dmFsdWVzLnB1c2goZGF0YSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIOWmguaenGFzT2ZEYXRl5LiN5pivIOacrOaciC/lraPluqYv5bm0IOeahOacgOWQjuS4gOWkqe+8jOmDveaYr+aIquiHsyDkuIrkuKrmnIgv5a2j5bqmL+W5tCDnmoTmnIDlkI7kuIDlpKnnmoTmlbDmja7ljrvorqHnrpdcclxuXHRcdFx0bGV0IF9hc09mRGF0ZSA9IG1vbWVudChhc09mRGF0ZSk7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwiX2FzT2ZEYXRlOlwiLCBfYXNPZkRhdGUpO1xyXG5cdFx0XHRsZXQgaXNFbmRPZlBlcmlvZCA9ICh1bml0KSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIChcclxuXHRcdFx0XHRcdF9hc09mRGF0ZS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpID09PVxyXG5cdFx0XHRcdFx0X2FzT2ZEYXRlLmVuZE9mKHVuaXQpLmZvcm1hdChcIllZWVktTU0tRERcIilcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9O1xyXG5cdFx0XHRsZXQgZW5kRGF0ZSA9IGlzRW5kT2ZQZXJpb2QodGltZVJhbmdlKVxyXG5cdFx0XHRcdD8gbW9tZW50KGFzT2ZEYXRlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpXHJcblx0XHRcdFx0OiBtb21lbnQoYXNPZkRhdGUpXHJcblx0XHRcdFx0XHRcdC5zdWJ0cmFjdCgxLCB0aW1lUmFuZ2UpXHJcblx0XHRcdFx0XHRcdC5lbmRPZih0aW1lUmFuZ2UpXHJcblx0XHRcdFx0XHRcdC5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xyXG5cclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJlbmREYXRlOlwiLCBlbmREYXRlKTtcclxuXHRcdFx0dmFsdWVzID0gdmFsdWVzLmZpbHRlcigoaXRlbSkgPT5cclxuXHRcdFx0XHRtb21lbnQoaXRlbS5kYXRlKS5pc1NhbWVPckJlZm9yZShlbmREYXRlKVxyXG5cdFx0XHQpO1xyXG5cdFx0XHR2YWx1ZXMgPSBzb3J0QnkodmFsdWVzLCBcImRhdGVcIik7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwidmFsdWVzOlwiLCB2YWx1ZXMpO1xyXG5cclxuXHRcdFx0aWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0bGV0IHJlc3VsdCA9IHRoaXMuZ2V0VGltZVJhbmdlcyhcclxuXHRcdFx0XHRcdHZhbHVlcyxcclxuXHRcdFx0XHRcdGVuZERhdGUsXHJcblx0XHRcdFx0XHR0aW1lUmFuZ2UsXHJcblx0XHRcdFx0XHRcImRhdGVcIlxyXG5cdFx0XHRcdCk7IC8vIOWQhOS4qumYtuauteeahOaVsOaNrlxyXG5cdFx0XHRcdGxldCByZXN1bHRUb3RhbCA9IHt9OyAvLyDlkITkuKrpmLbmrrXmgLvlkoxcclxuXHRcdFx0XHRmb3IgKGNvbnN0IHByb3AgaW4gcmVzdWx0KSB7XHJcblx0XHRcdFx0XHRyZXN1bHRUb3RhbFtwcm9wXSA9IHJlc3VsdFtwcm9wXS5yZWR1Y2UoKGFjYywgY3VyKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBhY2MgKyAoY3VyW3ZhbHVlRmllbGRdIHx8IDApO1xyXG5cdFx0XHRcdFx0fSwgMCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwicmVzdWx0OlwiLCByZXN1bHQpO1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwicmVzdWx0VG90YWw6XCIsIHJlc3VsdFRvdGFsKTtcclxuXHJcblx0XHRcdFx0Y29uc3QgY3VtdWxhdGl2ZVN1bSA9IHt9OyAvLyDlkITkuKrpmLbmrrXntK/orqHlkoxcclxuXHRcdFx0XHRsZXQgc3VtID0gMDtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXN1bHRUb3RhbCkpIHtcclxuXHRcdFx0XHRcdHN1bSArPSByZXN1bHRUb3RhbFtrZXldO1xyXG5cdFx0XHRcdFx0Y3VtdWxhdGl2ZVN1bVtgJHtrZXl9YF0gPSBzdW07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwiY3VtdWxhdGl2ZVN1bTpcIiwgY3VtdWxhdGl2ZVN1bSk7XHJcblxyXG5cdFx0XHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhjdW11bGF0aXZlU3VtKTtcclxuXHRcdFx0XHRsZXQgdHdyTGlzdCA9IFtdO1xyXG5cdFx0XHRcdC8vIOmBjeWOhuavj+S4pOS4qumYtuautSDorqHnrpdUV1JcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoIC0gMTsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBrZXkxID0ga2V5c1tpXTtcclxuXHRcdFx0XHRcdGNvbnN0IGtleTIgPSBrZXlzW2kgKyAxXTtcclxuXHJcblx0XHRcdFx0XHQvLyDorqHnrpfkuKTkuKrpmLbmrrXkuYvpl7TnmoTpgJLlop7ph48sIOWHuuaVsOS4jeiDveS4ujBcclxuXHRcdFx0XHRcdGlmIChjdW11bGF0aXZlU3VtW2tleTFdICE9IDApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgaW5jcmVtZW50ID1cclxuXHRcdFx0XHRcdFx0XHRjdW11bGF0aXZlU3VtW2tleTJdIC0gY3VtdWxhdGl2ZVN1bVtrZXkxXTtcclxuXHRcdFx0XHRcdFx0bGV0IHR3ciA9IGluY3JlbWVudCAvIGN1bXVsYXRpdmVTdW1ba2V5MV07XHJcblx0XHRcdFx0XHRcdHR3ckxpc3QucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0ZGF0ZToga2V5MixcclxuXHRcdFx0XHRcdFx0XHR0d3I6IHR3cixcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIOiuoeeul0F2ZXJhZ2UgVFdSXHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJ0d3JMaXN0OlwiLCB0d3JMaXN0KTtcclxuXHRcdFx0XHRsZXQgYXZlcmFnZVRXUiA9IHRoaXMuY2FsY3VsYXRlR3Jvd3RoUmF0ZShcclxuXHRcdFx0XHRcdHR3ckxpc3QubWFwKCh4KSA9PiB4LnR3cilcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwi6K6h566XQXZlcmFnZSBUV1I6XCIsIGF2ZXJhZ2VUV1IpO1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFtcclxuXHRcdFx0XHRcdFx0XCJDYWxjdWxhdGVUV1JNVERcIixcclxuXHRcdFx0XHRcdFx0XCJDYWxjdWxhdGVUV1JRVERcIixcclxuXHRcdFx0XHRcdFx0XCJDYWxjdWxhdGVUV1JZVERcIixcclxuXHRcdFx0XHRcdF0uaW5jbHVkZXMoYXJncy5hZ2dyZWdhdGVUeXBlKVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0Ly8gU01QMi0xNjUyMCBUV1Ig5pyIL+Wtoy/lubRcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRpc05hTihhdmVyYWdlVFdSKSB8fCBhdmVyYWdlVFdSID09IG51bGxcclxuXHRcdFx0XHRcdFx0XHQ/IFwiXCJcclxuXHRcdFx0XHRcdFx0XHQ6IE51bWJlcihhdmVyYWdlVFdSKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aWYgKGlzTmFOKGF2ZXJhZ2VUV1IpIHx8IGF2ZXJhZ2VUV1IgPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdC8vIFNNUDItMTY2ODMgVkFSIOWMuuWIhjk5JeWSjDk1JVxyXG5cdFx0XHRcdFx0XHRsZXQgWlNjb3JlID0gW1xyXG5cdFx0XHRcdFx0XHRcdFwiQ2FsY3VsYXRlVkFSTVREXzk5XCIsXHJcblx0XHRcdFx0XHRcdFx0XCJDYWxjdWxhdGVWQVJRVERfOTlcIixcclxuXHRcdFx0XHRcdFx0XHRcIkNhbGN1bGF0ZVZBUllURF85OVwiLFxyXG5cdFx0XHRcdFx0XHRdLmluY2x1ZGVzKGFyZ3MuYWdncmVnYXRlVHlwZSlcclxuXHRcdFx0XHRcdFx0XHQ/IDIuMzNcclxuXHRcdFx0XHRcdFx0XHQ6IDEuNjU7XHJcblx0XHRcdFx0XHRcdGlmICh0d3JMaXN0Lmxlbmd0aCA8IDIpIHtcclxuXHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgU0QgPSB0aGlzLmNhbGN1bGF0ZVN0YW5kYXJkRGV2aWF0aW9uKFxyXG5cdFx0XHRcdFx0XHRcdFx0dHdyTGlzdC5tYXAoKHgpID0+IHgudHdyKVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJjYWxjdWxhdGVTdGFuZGFyZERldmlhdGlvbjpcIiwgU0QpO1xyXG5cdFx0XHRcdFx0XHRcdGxldCBWQVIgPSBhdmVyYWdlVFdSIC0gU0QgKiBaU2NvcmU7XHJcblx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IE51bWJlcihWQVIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwiYXJncy52YWx1ZTpcIiwgYXJncy52YWx1ZSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZSAmJlxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV1cclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV07XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXSA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IGFyZ3MuZmllbGROYW1lLFxyXG5cdFx0XHRcdFx0Zm9ybWF0OlxyXG5cdFx0XHRcdFx0XHRmaWVsZC5sZW5ndGggPiAwXHJcblx0XHRcdFx0XHRcdFx0PyBmaWVsZFswXS5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkXHJcblx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdFBlcmNlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmRwXHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHQ6IFwiUDJcIixcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9TTVAyLTI3MDFcclxuXHRcdGlmIChhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlSVJSQWN0dWFsQXVkaXRlZFwiKSB7XHJcblx0XHRcdGxldCBOQVZBZGogPSAwO1xyXG5cdFx0XHRsZXQgdmFsdWVzID0gW107XHJcblx0XHRcdGxldCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRlbC5jb2xOYW1lID09PVxyXG5cdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRBZ2dyZWdhdGVUeXBlKFxyXG5cdFx0XHRcdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGVcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHRcdFx0Ly9TTVAyLTI3MTMgb25seSBqdWRnZSBmb3IgdGhpcyBkYXRhTWFydChHcm9zc05ldClcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHRoaXMucG9ydGxldC5maWd1cmVDb2RlID09PSBcIkdyb3NzTmV0XCIgfHxcclxuXHRcdFx0XHR0aGlzLnBvcnRsZXQuZmlndXJlQ29kZSA9PT1cclxuXHRcdFx0XHRcdFwiQ29tYmluZWRJbnZlc3RtZW50RnVuZE5Db21wYW55Q2FzaGZsb3dcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MuY2VsbFNldHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGRhdGEgPSB7XHJcblx0XHRcdFx0XHRcdGFtb3VudDogYXJncy5jZWxsU2V0c1tpXVtcIklSUkFtb3VudFwiXSxcclxuXHRcdFx0XHRcdFx0ZGF0ZTpcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJEYXRlXCJdKSA9PT1cclxuXHRcdFx0XHRcdFx0XHRcIkludmFsaWQgZGF0ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHQ/IGFzT2ZEYXRlXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtcIklSUkRhdGVcIl0pLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdE5BVkFkaiArPSBhcmdzLmNlbGxTZXRzW2ldW1wiQWN0dWFsQXVkaXRlZE5BVlwiXTtcclxuXHRcdFx0XHRcdGlmIChkYXRhLmFtb3VudCAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvL2ZpbHRlciB0aGUgZGF0YSBieSB0aGUgRGF0YVR5cGUoQWN0dWFsIFJlcG9ydGVkIEF1ZGl0ZWQpXHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdGxldCBhcmdzZGF0YSA9IGFyZ3MuY2VsbFNldHMuZmlsdGVyKFxyXG5cdFx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0XHRlbC5EYXRhVHlwZSA9PT0gXCJBQ1RVQUxfQVVESVRFRFwiIHx8XHJcblx0XHRcdFx0XHRcdGVsLkRhdGFUeXBlID09PSBcIlJFUE9SVEVEXCJcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJnc2RhdGEubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGRhdGEgPSB7XHJcblx0XHRcdFx0XHRcdGFtb3VudDogYXJnc2RhdGFbaV1bXCJJUlJBbW91bnRcIl0sXHJcblx0XHRcdFx0XHRcdGRhdGU6XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5wYmYudGltZShhcmdzZGF0YVtpXVtcIklSUkRhdGVcIl0pID09PVxyXG5cdFx0XHRcdFx0XHRcdFwiSW52YWxpZCBkYXRlXCJcclxuXHRcdFx0XHRcdFx0XHRcdD8gYXNPZkRhdGVcclxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5wYmYudGltZShhcmdzZGF0YVtpXVtcIklSUkRhdGVcIl0pLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdE5BVkFkaiArPSBhcmdzZGF0YVtpXVtcIklSUkFkalZhbHVlXCJdO1xyXG5cdFx0XHRcdFx0aWYgKGRhdGEuYW1vdW50ICE9IDApIHtcclxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goZGF0YSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChOQVZBZGogPiAwLjAwMDEgfHwgTkFWQWRqIDwgLTAuMDAwMSkge1xyXG5cdFx0XHRcdHZhbHVlcy5wdXNoKHtcclxuXHRcdFx0XHRcdGFtb3VudDogTkFWQWRqLFxyXG5cdFx0XHRcdFx0ZGF0ZTogYXNPZkRhdGUsXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFsdWVzID0gc29ydEJ5KHZhbHVlcywgXCJkYXRlXCIpO1xyXG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRsZXQgZ3Vlc3MgPSAwLjE7XHJcblx0XHRcdFx0Y29uc3Qgc3VtQW1vdW50ID0gdmFsdWVzXHJcblx0XHRcdFx0XHQubWFwKChpdGVtKSA9PiBpdGVtLmFtb3VudClcclxuXHRcdFx0XHRcdC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLCAwKTtcclxuXHRcdFx0XHRpZiAoc3VtQW1vdW50IDwgMCkge1xyXG5cdFx0XHRcdFx0Z3Vlc3MgPSAtMC4xO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvL1NNUDItMjI0OSBmaXhlZCB0aGUgYmlnIGlyciBpc3N1ZVxyXG5cdFx0XHRcdGlmIChzdW1BbW91bnQgPT09IDApIHtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSAwO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUl0ZW1zID0gdmFsdWVzLnNsaWNlKDAsIHZhbHVlcy5sZW5ndGggLSAxKTtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlTGlzdCA9IHZhbHVlSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmFtb3VudCk7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRlTGlzdCA9IHZhbHVlSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmRhdGUpO1xyXG5cdFx0XHRcdFx0Y29uc3QgbGFzdEl0ZW0gPSB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdO1xyXG5cdFx0XHRcdFx0Y29uc3QgbmF2QWRqdXN0ID0gbGFzdEl0ZW0uYW1vdW50O1xyXG5cdFx0XHRcdFx0Y29uc3QgbGF0ZXN0RGF0ZSA9IGxhc3RJdGVtLmRhdGU7XHJcblx0XHRcdFx0XHRsZXQgaXJyID1cclxuXHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5FeGNlbEZvcm11bGFzLl9DYWxjdWxhdGVYaXJyKFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlTGlzdCxcclxuXHRcdFx0XHRcdFx0XHRkYXRlTGlzdCxcclxuXHRcdFx0XHRcdFx0XHRuYXZBZGp1c3QsXHJcblx0XHRcdFx0XHRcdFx0bGF0ZXN0RGF0ZVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IGlyciA9PT0gbnVsbCA/IDAgOiBpcnI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSAwO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZSAmJlxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV1cclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV07XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXSA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IGFyZ3MuZmllbGROYW1lLFxyXG5cdFx0XHRcdFx0Zm9ybWF0OlxyXG5cdFx0XHRcdFx0XHRmaWVsZC5sZW5ndGggPiAwXHJcblx0XHRcdFx0XHRcdFx0PyBmaWVsZFswXS5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkXHJcblx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdFBlcmNlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmRwXHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHQ6IFwiUDJcIixcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHQvL1NNUDItMzQxMVxyXG5cdFx0aWYgKGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVJUlJSZXBvcnRlZFwiKSB7XHJcblx0XHRcdGxldCBOQVZBZGogPSAwO1xyXG5cdFx0XHRsZXQgdmFsdWVzID0gW107XHJcblx0XHRcdGxldCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRlbC5jb2xOYW1lID09PVxyXG5cdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRBZ2dyZWdhdGVUeXBlKFxyXG5cdFx0XHRcdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGVcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHRoaXMucG9ydGxldC5maWd1cmVDb2RlID09PSBcIkdyb3NzTmV0XCIgfHxcclxuXHRcdFx0XHR0aGlzLnBvcnRsZXQuZmlndXJlQ29kZSA9PT1cclxuXHRcdFx0XHRcdFwiQ29tYmluZWRJbnZlc3RtZW50RnVuZE5Db21wYW55Q2FzaGZsb3dcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MuY2VsbFNldHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGRhdGEgPSB7XHJcblx0XHRcdFx0XHRcdGFtb3VudDogYXJncy5jZWxsU2V0c1tpXVtcIklSUkFtb3VudFwiXSxcclxuXHRcdFx0XHRcdFx0ZGF0ZTpcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJEYXRlXCJdKSA9PT1cclxuXHRcdFx0XHRcdFx0XHRcIkludmFsaWQgZGF0ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHQ/IGFzT2ZEYXRlXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtcIklSUkRhdGVcIl0pLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdE5BVkFkaiArPSBhcmdzLmNlbGxTZXRzW2ldW1wiUmVwb3J0ZWROQVZcIl07XHJcblx0XHRcdFx0XHRpZiAoZGF0YS5hbW91bnQgIT0gMCkge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZXMucHVzaChkYXRhKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRhbW91bnQ6IGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJBbW91bnRcIl0sXHJcblx0XHRcdFx0XHRcdGRhdGU6XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW1wiSVJSRGF0ZVwiXSkgPT09XHJcblx0XHRcdFx0XHRcdFx0XCJJbnZhbGlkIGRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PyBhc09mRGF0ZVxyXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJEYXRlXCJdKSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHROQVZBZGogKz0gYXJncy5jZWxsU2V0c1tpXVtcIklSUkFkalZhbHVlXCJdO1xyXG5cdFx0XHRcdFx0aWYgKGRhdGEuYW1vdW50ICE9IDApIHtcclxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goZGF0YSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChOQVZBZGogPiAwLjAwMDEgfHwgTkFWQWRqIDwgLTAuMDAwMSkge1xyXG5cdFx0XHRcdHZhbHVlcy5wdXNoKHtcclxuXHRcdFx0XHRcdGFtb3VudDogTkFWQWRqLFxyXG5cdFx0XHRcdFx0ZGF0ZTogYXNPZkRhdGUsXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFsdWVzID0gc29ydEJ5KHZhbHVlcywgXCJkYXRlXCIpO1xyXG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRsZXQgZ3Vlc3MgPSAwLjE7XHJcblx0XHRcdFx0Y29uc3Qgc3VtQW1vdW50ID0gdmFsdWVzXHJcblx0XHRcdFx0XHQubWFwKChpdGVtKSA9PiBpdGVtLmFtb3VudClcclxuXHRcdFx0XHRcdC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLCAwKTtcclxuXHRcdFx0XHRpZiAoc3VtQW1vdW50IDwgMCkge1xyXG5cdFx0XHRcdFx0Z3Vlc3MgPSAtMC4xO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvL1NNUDItMjI0OSBmaXhlZCB0aGUgYmlnIGlyciBpc3N1ZVxyXG5cdFx0XHRcdGlmIChzdW1BbW91bnQgPT09IDApIHtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSAwO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUl0ZW1zID0gdmFsdWVzLnNsaWNlKDAsIHZhbHVlcy5sZW5ndGggLSAxKTtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlTGlzdCA9IHZhbHVlSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmFtb3VudCk7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRlTGlzdCA9IHZhbHVlSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmRhdGUpO1xyXG5cdFx0XHRcdFx0Y29uc3QgbGFzdEl0ZW0gPSB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdO1xyXG5cdFx0XHRcdFx0Y29uc3QgbmF2QWRqdXN0ID0gbGFzdEl0ZW0uYW1vdW50O1xyXG5cdFx0XHRcdFx0Y29uc3QgbGF0ZXN0RGF0ZSA9IGxhc3RJdGVtLmRhdGU7XHJcblx0XHRcdFx0XHRsZXQgaXJyID1cclxuXHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5FeGNlbEZvcm11bGFzLl9DYWxjdWxhdGVYaXJyKFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlTGlzdCxcclxuXHRcdFx0XHRcdFx0XHRkYXRlTGlzdCxcclxuXHRcdFx0XHRcdFx0XHRuYXZBZGp1c3QsXHJcblx0XHRcdFx0XHRcdFx0bGF0ZXN0RGF0ZVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBpcnIgPT09IG51bGwgPyAwIDogaXJyO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gMDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUgJiZcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdO1xyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV0gPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBhcmdzLmZpZWxkTmFtZSxcclxuXHRcdFx0XHRcdGZvcm1hdDpcclxuXHRcdFx0XHRcdFx0ZmllbGQubGVuZ3RoID4gMFxyXG5cdFx0XHRcdFx0XHRcdD8gZmllbGRbMF0uZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZFxyXG5cdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5kcFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0OiBcIlAyXCIsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlTXVsdGlwbGVcIiB8fFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlUElDXCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZURQSVwiIHx8XHJcblx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVUVlBJXCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZVJWUElcIiB8fFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlTUFjdHVhbEF1ZGl0ZWRcIiB8fFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlTVJlcG9ydGVkXCJcclxuXHRcdCkge1xyXG5cdFx0XHRsZXQgdG90YWxOdW1lcmF0b3IgPSAwO1xyXG5cdFx0XHRsZXQgdG90YWxEZW5vbWluYXRvciA9IDA7XHJcblx0XHRcdGxldCBudW1lcmF0b3JOYW1lO1xyXG5cdFx0XHRsZXQgZGVub21pbmF0b3JOYW1lO1xyXG5cdFx0XHRsZXQgZmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0ZWwuY29sTmFtZSA9PT1cclxuXHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0QWdncmVnYXRlVHlwZShcclxuXHRcdFx0XHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlXHJcblx0XHRcdFx0XHQpXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChmaWVsZC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0Y29uc3QgZm9ybXVsYUFycmF5ID0gZmllbGRbMF0uZm9ybXVsYS5zcGxpdChcIi9cIik7XHJcblx0XHRcdFx0bnVtZXJhdG9yTmFtZSA9IGZvcm11bGFBcnJheVswXTtcclxuXHRcdFx0XHRkZW5vbWluYXRvck5hbWUgPSBmb3JtdWxhQXJyYXlbMV07XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0dG90YWxOdW1lcmF0b3IgKz0gYXJncy5jZWxsU2V0c1tqXVtudW1lcmF0b3JOYW1lXTtcclxuXHRcdFx0XHR0b3RhbERlbm9taW5hdG9yICs9IGFyZ3MuY2VsbFNldHNbal1bZGVub21pbmF0b3JOYW1lXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAodG90YWxEZW5vbWluYXRvciAhPT0gMCkge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSB0b3RhbE51bWVyYXRvciAvIHRvdGFsRGVub21pbmF0b3I7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUgJiZcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV1cclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbXHJcblx0XHRcdFx0XHRcdGFyZ3MuZmllbGROYW1lXHJcblx0XHRcdFx0XHRdO1xyXG5cdFx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXSA9IHtcclxuXHRcdFx0XHRcdFx0bmFtZTogYXJncy5maWVsZE5hbWUsXHJcblx0XHRcdFx0XHRcdGZvcm1hdDpcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5sZW5ndGggPiAwXHJcblx0XHRcdFx0XHRcdFx0XHQ/IGZpZWxkWzBdLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkXHJcblx0XHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0TXVsdGlwbGUoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHRcdDogdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXRNdWx0aXBsZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmRwXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0OiBcIiMjIzAuMDAneCdcIixcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJGaXJzdFwiIHx8IGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJMYXN0XCIpIHtcclxuXHRcdFx0YXJncy52YWx1ZSA9IHRoaXMuY2FsY3VsYXRlZEZpc3RMYXN0KFxyXG5cdFx0XHRcdGFyZ3MsXHJcblx0XHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlLFxyXG5cdFx0XHRcdGFyZ3MuZmllbGROYW1lXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ291bnRcIiB8fFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiRGlzdGluY3RDb3VudFwiXHJcblx0XHQpIHtcclxuXHRcdFx0aWYgKGFyZ3MudmFsdWUpIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gYXJncy52YWx1ZS50b0ZpeGVkKDIpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKFxyXG5cdFx0XHQhYXJncy52YWx1ZSAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSAwICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IGZhbHNlICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IFwiZmFsc2VcIlxyXG5cdFx0KSB7XHJcblx0XHRcdGFyZ3Muc2tpcEZvcm1hdHRpbmcgPSB0cnVlO1xyXG5cdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdH1cclxuXHRcdC8vIOaWsOW7unBpdm90IHRhYmxlLCDov5jmsqHmnInorr7nva5yb3csIOmAieS6hmNvbHVtbuS5i+WQjmdyYW5kdG90YWzkvJrmnInlgLxcclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5yb3dDZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCIgJiZcclxuXHRcdFx0IXRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3MubGVuZ3RoXHJcblx0XHQpIHtcclxuXHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHR9XHJcblx0XHQvL1NNUDItMjg4OVxyXG5cdFx0aWYgKGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwic3ViVG90YWxcIikge1xyXG5cdFx0XHRjb25zdCB2YWx1ZUZpZWxkX2RhdGEgPSB0aGlzLmNvbmZpZy55YXhpcy5zZXJpZXMuZmlsdGVyKFxyXG5cdFx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gYXJncy5maWVsZE5hbWVcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKHZhbHVlRmllbGRfZGF0YS5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0aWYgKHZhbHVlRmllbGRfZGF0YVswXS5zaG93U3ViVG90YWxzID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRhcmdzLnNraXBGb3JtYXR0aW5nID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChhcmdzLnJvd0NlbGxUeXBlID09PSBcImdyYW5kVG90YWxcIikge1xyXG5cdFx0XHRjb25zdCB2YWx1ZUZpZWxkX2RhdGEgPSB0aGlzLmNvbmZpZy55YXhpcy5zZXJpZXMuZmlsdGVyKFxyXG5cdFx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gYXJncy5maWVsZE5hbWVcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKHZhbHVlRmllbGRfZGF0YS5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0aWYgKHZhbHVlRmllbGRfZGF0YVswXS5zaG93R3JhbmRUb3RhbHMgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0XHRcdGFyZ3Muc2tpcEZvcm1hdHRpbmcgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gU01QMi0zNDE2IHN0YXJ0XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMuemVyb0Zvcm1hdERhdGEuaGdMaXN0LmluY2x1ZGVzKGFyZ3MuZmllbGROYW1lKSAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlID09PSAwXHJcblx0XHQpIHtcclxuXHRcdFx0YXJncy52YWx1ZSA9IFwiLVwiO1xyXG5cdFx0XHRhcmdzLnNraXBGb3JtYXR0aW5nID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy56ZXJvRm9ybWF0RGF0YS5lbXB0eUxpc3QuaW5jbHVkZXMoYXJncy5maWVsZE5hbWUpICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgPT09IDBcclxuXHRcdCkge1xyXG5cdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0YXJncy5za2lwRm9ybWF0dGluZyA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMubWlsbGlvbkZpZWxkcy5pbmNsdWRlcyhhcmdzLmZpZWxkTmFtZSkgJiZcclxuXHRcdFx0IWlzTmFOKE51bWJlcihhcmdzLnZhbHVlKSkgJiZcclxuXHRcdFx0YXJncy52YWx1ZSAhPT0gMCAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSBcIlwiICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IG51bGxcclxuXHRcdCkge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0YXJncy5jb2x1bW5DZWxsVHlwZSA9PSBcImdyYW5kVG90YWxcIiAmJlxyXG5cdFx0XHRcdGFyZ3Mucm93Q2VsbFR5cGUgPT0gXCJncmFuZFRvdGFsXCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLnRvdGFsRm9ybWF0dGVkW2FyZ3MuZmllbGROYW1lXSkge1xyXG5cdFx0XHRcdFx0dGhpcy50b3RhbEZvcm1hdHRlZFthcmdzLmZpZWxkTmFtZV0gPSB0cnVlO1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IGFyZ3MudmFsdWUgLyAxMDAwMDAwO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gYXJncy52YWx1ZSAvIDEwMDAwMDA7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBTTVAyLTI0ODYgJiBwZXJjZW50TnVt55qEZm9ybWF06Zeu6aKYXHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMucGVyY2VudE51bUZpZWxkcy5sZW5ndGggJiZcclxuXHRcdFx0dGhpcy5wZXJjZW50TnVtRmllbGRzLmluY2x1ZGVzKGFyZ3MuZmllbGROYW1lKSAmJlxyXG5cdFx0XHQhaXNOYU4oTnVtYmVyKGFyZ3MudmFsdWUpKSAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSAwICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IFwiXCIgJiZcclxuXHRcdFx0YXJncy52YWx1ZSAhPT0gbnVsbFxyXG5cdFx0KSB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRhcmdzLmNvbHVtbkNlbGxUeXBlID09IFwiZ3JhbmRUb3RhbFwiICYmXHJcblx0XHRcdFx0YXJncy5yb3dDZWxsVHlwZSA9PSBcImdyYW5kVG90YWxcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRpZiAoIXRoaXMudG90YWxGb3JtYXR0ZWRbYXJncy5maWVsZE5hbWVdKSB7XHJcblx0XHRcdFx0XHR0aGlzLnRvdGFsRm9ybWF0dGVkW2FyZ3MuZmllbGROYW1lXSA9IHRydWU7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gYXJncy52YWx1ZSAvIDEwMDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IGFyZ3MudmFsdWUgLyAxMDA7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09IFwiQ2FsY3VsYXRlZEZpZWxkXCIgJiZcclxuXHRcdFx0IWlzTmFOKE51bWJlcihhcmdzLnZhbHVlKSkgJiZcclxuXHRcdFx0IXRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV0uZm9ybWF0XHJcblx0XHQpIHtcclxuXHRcdFx0YXJncy52YWx1ZSA9IE51bWJlcihhcmdzLnZhbHVlKS50b0ZpeGVkKDIpO1xyXG5cdFx0fVxyXG5cdFx0Ly8gU01QMi0zNDE2IGVuZFxyXG5cdFx0dGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcblx0XHR0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNhbGN1bGF0ZWRGaXN0TGFzdChhcmdzLCBhZ2dyZWdhdGVUeXBlLCBmaWVsZE5hbWUpIHtcclxuXHRcdGlmICghYXJncy5yb3cuYWN0dWFsVGV4dCkgYXJncy5yb3cuYWN0dWFsVGV4dCA9IGFyZ3Mucm93LmZvcm1hdHRlZFRleHQ7XHJcblx0XHRpZiAoIWFyZ3MuY29sdW1uLmFjdHVhbFRleHQpXHJcblx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgPSBhcmdzLmNvbHVtbi5mb3JtYXR0ZWRUZXh0O1xyXG5cdFx0bGV0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHQoZWwpID0+IGVsLmNvbE5hbWUgPT09IGZpZWxkTmFtZVxyXG5cdFx0KVswXTtcclxuXHRcdGlmIChhcmdzLnJvd0NlbGxUeXBlID09PSBcInZhbHVlXCIgJiYgIWFyZ3Mucm93Lmhhc0NoaWxkKSB7XHJcblx0XHRcdGlmIChhcmdzLmNlbGxTZXRzWzBdKSB7XHJcblx0XHRcdFx0aWYgKGFnZ3JlZ2F0ZVR5cGUgPT09IFwiRmlyc3RcIikge1xyXG5cdFx0XHRcdFx0Zm9yIChcclxuXHRcdFx0XHRcdFx0bGV0IGZpcnN0SW5kZXggPSAwO1xyXG5cdFx0XHRcdFx0XHRmaXJzdEluZGV4IDwgYXJncy5jZWxsU2V0cy5sZW5ndGg7XHJcblx0XHRcdFx0XHRcdGZpcnN0SW5kZXgrK1xyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCA9PVxyXG5cdFx0XHRcdFx0XHRcdFx0MSAmJlxyXG5cdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uQ2VsbFR5cGUgPT0gXCJncmFuZFRvdGFsXCJcclxuXHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJzdHJpbmdcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJudmFyY2hhclwiIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJkYXRldGltZVwiXHJcblx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGhcclxuXHRcdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgcm93T2JqcyA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWVbYXJncy5yb3cucm93SW5kZXhdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocm93T2Jqcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldCByb3dPYmpzQXJyID0gSlNPTi5wYXJzZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdEpTT04uc3RyaW5naWZ5KHJvd09ianMpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgb2JqID0gcm93T2Jqc0Fyci5maWx0ZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsLmFjdHVhbFRleHQgPT0gZmllbGROYW1lICYmXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsLmlzR3JhbmRTdW1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpWzBdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvYmopIGFyZ3MudmFsdWUgPSBvYmoudmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBpc05hTihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHROdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IG51bGxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBhcmdzLmNlbGxTZXRzW2ZpcnN0SW5kZXhdW2ZpZWxkTmFtZV07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibnVtYmVyXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcIm11bHRpcGxlXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcInBlcmNlbnRcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwicGVyY2VudE51bVwiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChhcmdzLnZhbHVlICE9IG51bGwpIGJyZWFrO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZVwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJkYXRldGltZVwiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmICh0aGlzLnBiZi50aW1lKGFyZ3MudmFsdWUpID4gXCIxOTAwLTAxLTAxXCIpIGJyZWFrO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGFyZ3MudmFsdWUpIGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoYWdncmVnYXRlVHlwZSA9PT0gXCJMYXN0XCIpIHtcclxuXHRcdFx0XHRcdGZvciAoXHJcblx0XHRcdFx0XHRcdGxldCBsYXN0SW5kZXggPSBhcmdzLmNlbGxTZXRzLmxlbmd0aCAtIDE7XHJcblx0XHRcdFx0XHRcdGxhc3RJbmRleCA+PSAwO1xyXG5cdFx0XHRcdFx0XHRsYXN0SW5kZXgtLVxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCA9PVxyXG5cdFx0XHRcdFx0XHRcdFx0MSAmJlxyXG5cdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uQ2VsbFR5cGUgPT0gXCJncmFuZFRvdGFsXCJcclxuXHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJzdHJpbmdcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJudmFyY2hhclwiIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJkYXRldGltZVwiXHJcblx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGhcclxuXHRcdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgcm93T2JqcyA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWVbYXJncy5yb3cucm93SW5kZXhdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocm93T2Jqcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldCByb3dPYmpzQXJyID0gSlNPTi5wYXJzZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdEpTT04uc3RyaW5naWZ5KHJvd09ianMpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgb2JqID0gcm93T2Jqc0Fyci5maWx0ZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsLmFjdHVhbFRleHQgPT0gZmllbGROYW1lICYmXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsLmlzR3JhbmRTdW1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpWzBdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvYmopIGFyZ3MudmFsdWUgPSBvYmoudmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBpc05hTihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHROdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IG51bGxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBhcmdzLmNlbGxTZXRzW2xhc3RJbmRleF1bZmllbGROYW1lXTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibnVtYmVyXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcIm11bHRpcGxlXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcInBlcmNlbnRcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwicGVyY2VudE51bVwiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChhcmdzLnZhbHVlICE9IG51bGwpIGJyZWFrO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZVwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJkYXRldGltZVwiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmICh0aGlzLnBiZi50aW1lKGFyZ3MudmFsdWUpID4gXCIxOTAwLTAxLTAxXCIpIGJyZWFrO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGFyZ3MudmFsdWUpIGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJudW1iZXJcIiB8fFxyXG5cdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJtdWx0aXBsZVwiIHx8XHJcblx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcInBlcmNlbnRcIiB8fFxyXG5cdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJwZXJjZW50TnVtXCJcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIXRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbHVtbnMubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0IU51bWJlcih0aGlzLmdyYW5kVG90YWxzW2ZpZWxkTmFtZV0pIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRpc05hTihOdW1iZXIodGhpcy5ncmFuZFRvdGFsc1tmaWVsZE5hbWVdKSlcclxuXHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbZmllbGROYW1lXSA9IDA7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGlmIChhcmdzLmFnZ3JlZ2F0ZVR5cGUgIT09IFwiQ2FsY3VsYXRlZEZpZWxkXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbZmllbGROYW1lXSArPSBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbHVtbnMubGVuZ3RoID09IDFcclxuXHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gXCJyb3dcIiArIGFyZ3Mucm93LmFjdHVhbFRleHQgKyBmaWVsZE5hbWUg6KGo56S6KGNlbGw6IGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwidmFsdWVcIiAmJiBhcmdzLmNvbHVtbkNlbGxUeXBlID09PSBcImdyYW5kVG90YWxcIilcclxuXHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHQhTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwicm93XCIgKyBhcmdzLnJvdy5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdCkgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGlzTmFOKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHROdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwicm93XCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICsgYXJncy5yb3cuYWN0dWFsVGV4dCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XSA9IDA7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICsgYXJncy5yb3cuYWN0dWFsVGV4dCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdF0gKz0gTnVtYmVyKGFyZ3MudmFsdWUpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvLyBcImNvbFwiICsgYXJncy5jb2x1bW4uYWN0dWFsVGV4dCArIGZpZWxkTmFtZSDooajnpLooY2VsbDogYXJncy5yb3dDZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCIgJiYgYXJncy5jb2x1bW5DZWxsVHlwZSA9PT0gXCJ2YWx1ZVwiKVxyXG5cdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdCFOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHQpIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRpc05hTihcclxuXHRcdFx0XHRcdFx0XHRcdFx0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcImNvbFwiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdF0gPSAwO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRdICs9IE51bWJlcihhcmdzLnZhbHVlKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChhcmdzLnJvd0NlbGxUeXBlID09PSBcInN1YlRvdGFsXCIgfHwgYXJncy5yb3cuaGFzQ2hpbGQpIHtcclxuXHRcdFx0Y29uc3QgZGF0YVR5cGUgPSBmaWVsZC5kYXRhVHlwZTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGRhdGFUeXBlID09PSBcInN0cmluZ1wiIHx8XHJcblx0XHRcdFx0ZGF0YVR5cGUgPT09IFwibnZhcmNoYXJcIiB8fFxyXG5cdFx0XHRcdGRhdGFUeXBlID09IFwiZGF0ZVwiIHx8XHJcblx0XHRcdFx0ZGF0YVR5cGUgPT0gXCJkYXRldGltZVwiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGxldCB2YWx1ZSA9IDA7XHJcblx0XHRcdFx0bGV0IGNoaWxkSGVhZGVycyA9IFtdO1xyXG5cdFx0XHRcdGlmIChhZ2dyZWdhdGVUeXBlID09PSBcIkZpcnN0XCIpIHtcclxuXHRcdFx0XHRcdGxldCBncm91cE5hbWVBcnJheXMgPSBbXTtcclxuXHRcdFx0XHRcdGxldCByb3dzID0gdGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cztcclxuXHRcdFx0XHRcdGZvciAoXHJcblx0XHRcdFx0XHRcdGxldCBpbmRleCA9IGFyZ3Mucm93LmxldmVsO1xyXG5cdFx0XHRcdFx0XHRpbmRleCA8IHJvd3MubGVuZ3RoO1xyXG5cdFx0XHRcdFx0XHRpbmRleCsrXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0Z3JvdXBOYW1lQXJyYXlzLnB1c2gocm93c1tpbmRleF0ubmFtZSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MuY2VsbFNldHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0bGV0IHZhbHVlcyA9IFtdO1xyXG5cdFx0XHRcdFx0XHRsZXQgaGVhZGVyID0gZ3JvdXBOYW1lQXJyYXlzXHJcblx0XHRcdFx0XHRcdFx0Lm1hcCgobmFtZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goYXJncy5jZWxsU2V0c1tpXVtuYW1lXSk7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gYXJncy5jZWxsU2V0c1tpXVtuYW1lXTtcclxuXHRcdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0XHRcdC5qb2luKFwiLVwiKTtcclxuXHRcdFx0XHRcdFx0aWYgKCEoY2hpbGRIZWFkZXJzIGFzIGFueSkuaW5jbHVkZXMoaGVhZGVyKSkge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBmaWx0ZXJPYmo6IGFueSA9IHt9O1xyXG5cdFx0XHRcdFx0XHRcdGdyb3VwTmFtZUFycmF5cy5tYXAoXHJcblx0XHRcdFx0XHRcdFx0XHQobmFtZSwgeCkgPT4gKGZpbHRlck9ialtuYW1lXSA9IHZhbHVlc1t4XSlcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGxldCBfQ2VsbFNldHMgPSBfZmlsdGVyKGFyZ3MuY2VsbFNldHMsIGZpbHRlck9iaik7XHJcblx0XHRcdFx0XHRcdFx0Y2hpbGRIZWFkZXJzLnB1c2goaGVhZGVyKTtcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZSArPSBOdW1iZXIoX0NlbGxTZXRzWzBdW2ZpZWxkTmFtZV0pIHx8IDA7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGFnZ3JlZ2F0ZVR5cGUgPT09IFwiTGFzdFwiKSB7XHJcblx0XHRcdFx0XHRsZXQgZ3JvdXBOYW1lQXJyYXlzID0gW107XHJcblx0XHRcdFx0XHRsZXQgcm93cyA9IHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3M7XHJcblx0XHRcdFx0XHRmb3IgKFxyXG5cdFx0XHRcdFx0XHRsZXQgaW5kZXggPSBhcmdzLnJvdy5sZXZlbDtcclxuXHRcdFx0XHRcdFx0aW5kZXggPCByb3dzLmxlbmd0aDtcclxuXHRcdFx0XHRcdFx0aW5kZXgrK1xyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdGdyb3VwTmFtZUFycmF5cy5wdXNoKHJvd3NbaW5kZXhdLm5hbWUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IGFyZ3MuY2VsbFNldHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuXHRcdFx0XHRcdFx0bGV0IHZhbHVlcyA9IFtdO1xyXG5cdFx0XHRcdFx0XHRsZXQgaGVhZGVyID0gZ3JvdXBOYW1lQXJyYXlzXHJcblx0XHRcdFx0XHRcdFx0Lm1hcCgobmFtZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goYXJncy5jZWxsU2V0c1tpXVtuYW1lXSk7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gYXJncy5jZWxsU2V0c1tpXVtuYW1lXTtcclxuXHRcdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0XHRcdC5qb2luKFwiLVwiKTtcclxuXHRcdFx0XHRcdFx0aWYgKCEoY2hpbGRIZWFkZXJzIGFzIGFueSkuaW5jbHVkZXMoaGVhZGVyKSkge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBmaWx0ZXJPYmo6IGFueSA9IHt9O1xyXG5cdFx0XHRcdFx0XHRcdGdyb3VwTmFtZUFycmF5cy5tYXAoXHJcblx0XHRcdFx0XHRcdFx0XHQobmFtZSwgeCkgPT4gKGZpbHRlck9ialtuYW1lXSA9IHZhbHVlc1t4XSlcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGxldCBfQ2VsbFNldHMgPSBfZmlsdGVyKGFyZ3MuY2VsbFNldHMsIGZpbHRlck9iaik7XHJcblx0XHRcdFx0XHRcdFx0Y2hpbGRIZWFkZXJzLnB1c2goaGVhZGVyKTtcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZSArPVxyXG5cdFx0XHRcdFx0XHRcdFx0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRfQ2VsbFNldHNbX0NlbGxTZXRzLmxlbmd0aCAtIDFdW2ZpZWxkTmFtZV1cclxuXHRcdFx0XHRcdFx0XHRcdCkgfHwgMDtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgIT09IFwiR3JhbmQgVG90YWxcIilcclxuXHRcdFx0XHRcdHRoaXMuY29sdW1uVGV4dHMucHVzaChhcmdzLmNvbHVtbi5hY3R1YWxUZXh0KTtcclxuXHJcblx0XHRcdFx0aWYgKCF0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQhTnVtYmVyKHRoaXMuc3ViVG90YWxzW2ZpZWxkTmFtZV0pIHx8XHJcblx0XHRcdFx0XHRcdGlzTmFOKE51bWJlcih0aGlzLnN1YlRvdGFsc1tmaWVsZE5hbWVdKSlcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tmaWVsZE5hbWVdID0gMDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMuc3ViVG90YWxzW2ZpZWxkTmFtZV0gKz0gTnVtYmVyKHZhbHVlKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGggPT0gMVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQhTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc3ViVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdCkgfHxcclxuXHRcdFx0XHRcdFx0aXNOYU4oXHJcblx0XHRcdFx0XHRcdFx0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zdWJUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuc3ViVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XSA9IDA7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tcclxuXHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdF0gKz0gTnVtYmVyKHZhbHVlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gLS0tPiBhbGxEYXRhVmFsdWXkuK3ov5nkuKrljZXlhYPmoLznmoTlgLzkuI3mraPnoa5cclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRhcmdzLmNvbHVtbkNlbGxUeXBlID09PSBcImdyYW5kVG90YWxcIiAmJlxyXG5cdFx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGggPT0gMVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuYWxsRGF0YVZhbHVlICYmIHRoaXMuYWxsRGF0YVZhbHVlLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRhcmdzLnZhbHVlID1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgKyBcIkdyYW5kIFRvdGFsXCIgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRdO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5jb2x1bW5UZXh0cyA9IHVuaXFCeSh0aGlzLmNvbHVtblRleHRzLCAoZWwpID0+IGVsKTtcclxuXHRcdFx0XHRcdFx0bGV0IHZhbCA9IDA7XHJcblx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5UZXh0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGVsZW1lbnQgPSB0aGlzLmNvbHVtblRleHRzW2ldO1xyXG5cdFx0XHRcdFx0XHRcdHZhbCArPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zdWJUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgKyBlbGVtZW50ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRdO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSB2YWw7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSB2YWx1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoYXJncy5yb3dDZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCIpIHtcclxuXHRcdFx0Y29uc3QgZGF0YVR5cGUgPSBmaWVsZC5kYXRhVHlwZTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGRhdGFUeXBlID09IFwic3RyaW5nXCIgfHxcclxuXHRcdFx0XHRkYXRhVHlwZSA9PSBcIm52YXJjaGFyXCIgfHxcclxuXHRcdFx0XHRkYXRhVHlwZSA9PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdGRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRpZiAoIXRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbHVtbnMubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5hbGxEYXRhVmFsdWUgJiYgdGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdGxldCByb3dPYmpzID1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZVt0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGggLSAxXTtcclxuXHRcdFx0XHRcdFx0aWYgKHJvd09ianMpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgcm93T2Jqc0FyciA9IEpTT04ucGFyc2UoXHJcblx0XHRcdFx0XHRcdFx0XHRKU09OLnN0cmluZ2lmeShyb3dPYmpzKVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0bGV0IG9iakFyciA9IHJvd09ianNBcnIuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbC5hY3R1YWxUZXh0ID09IGZpZWxkTmFtZSAmJiBlbC5pc0dyYW5kU3VtXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRpZiAob2JqQXJyICYmIG9iakFyci5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBvYmpBcnJbb2JqQXJyLmxlbmd0aCAtIDFdLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRPYmplY3Qua2V5cyh0aGlzLmdyYW5kVG90YWxzKS5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gdGhpcy5ncmFuZFRvdGFsc1tmaWVsZE5hbWVdO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IHRoaXMuZ3JhbmRUb3RhbHNbZmllbGROYW1lXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aWYgKGFyZ3MuY29sdW1uQ2VsbFR5cGUgPT09IFwiZ3JhbmRUb3RhbFwiKSB7XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLmFsbERhdGFWYWx1ZSAmJiB0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgcm93T2JqcyA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZVt0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGggLSAxXTtcclxuXHRcdFx0XHRcdFx0XHRpZiAocm93T2Jqcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianNBcnIgPSBKU09OLnBhcnNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRKU09OLnN0cmluZ2lmeShyb3dPYmpzKVxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdGxldCBvYmpBcnIgPSByb3dPYmpzQXJyLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsLmFjdHVhbFRleHQgPT0gZmllbGROYW1lICYmXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwuaXNHcmFuZFN1bVxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChvYmpBcnIgJiYgb2JqQXJyLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvYmpBcnJbb2JqQXJyLmxlbmd0aCAtIDFdLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdFx0T2JqZWN0LmtleXModGhpcy5ncmFuZFRvdGFscykuaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcImNvbFwiICsgYXJncy5jb2x1bW4uYWN0dWFsVGV4dCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuYWxsRGF0YVZhbHVlICYmIHRoaXMuYWxsRGF0YVZhbHVlLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdGxldCByb3dPYmpzID1cclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsRGF0YVZhbHVlW3RoaXMuYWxsRGF0YVZhbHVlLmxlbmd0aCAtIDFdO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByb3dPYmpzQXJyID0gSlNPTi5wYXJzZShcclxuXHRcdFx0XHRcdFx0XHRcdEpTT04uc3RyaW5naWZ5KHJvd09ianMpXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgb2JqQXJyID0gcm93T2Jqc0Fyci5maWx0ZXIoXHJcblx0XHRcdFx0XHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdGVsLmFjdHVhbFRleHQgPT0gZmllbGROYW1lICYmXHJcblx0XHRcdFx0XHRcdFx0XHRcdGVsLmlzR3JhbmRTdW0gJiZcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWwuY29sdW1uSGVhZGVycyA9PSBhcmdzLmNvbHVtbi5hY3R1YWxUZXh0XHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRpZiAob2JqQXJyICYmIG9iakFyci5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBvYmpBcnJbb2JqQXJyLmxlbmd0aCAtIDFdLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRPYmplY3Qua2V5cyh0aGlzLmdyYW5kVG90YWxzKS5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcImNvbFwiICsgYXJncy5jb2x1bW4uYWN0dWFsVGV4dCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0dGhpcy5mb3JtYXRWYWwoYXJncywgZmllbGROYW1lKTtcclxuXHRcdHJldHVybiBhcmdzLnZhbHVlO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBmb3JtYXRWYWwoYXJncywgZmllbGROYW1lKSB7XHJcblx0XHR0aGlzLmNvbmZpZ0ZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG5cdFx0XHRpZiAoZmllbGQuY29sTmFtZSA9PSBmaWVsZE5hbWUpIHtcclxuXHRcdFx0XHRzd2l0Y2ggKGZpZWxkLmRhdGFUeXBlKSB7XHJcblx0XHRcdFx0XHRjYXNlIFwiZGF0ZVwiOlxyXG5cdFx0XHRcdFx0Y2FzZSBcImRhdGV0aW1lXCI6XHJcblx0XHRcdFx0XHRcdGlmIChhcmdzLnZhbHVlKSBhcmdzLnZhbHVlID0gbmV3IERhdGUoYXJncy52YWx1ZSk7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0ZXhjbHVkZUZpZWxkcyhmaWVsZHMsIGRhdGEpIHtcclxuXHRcdGxldCBuYW1lYXJyYXkgPSBbXTtcclxuXHRcdGxldCBhcnJheSA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgcHJvcCBpbiBkYXRhKSB7XHJcblx0XHRcdGFycmF5LnB1c2gocHJvcCk7XHJcblx0XHR9XHJcblx0XHRmb3IgKGxldCBpdGVtIG9mIGZpZWxkcykge1xyXG5cdFx0XHRuYW1lYXJyYXkucHVzaChpdGVtLmNvbE5hbWUpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5leGNsdWRlRmllbGRzID0gZGlmZmVyZW5jZVdpdGgoYXJyYXksIG5hbWVhcnJheSk7XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMuZXhjbHVkZUZpZWxkcy5sZW5ndGggJiZcclxuXHRcdFx0dGhpcy5jb25maWcuZ3JvdXBTZXR0aW5ncyAmJlxyXG5cdFx0XHR0aGlzLmNvbmZpZy5ncm91cFNldHRpbmdzLmxlbmd0aFxyXG5cdFx0KSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5leGNsdWRlRmllbGRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Y29uc3QgZWwgPSB0aGlzLmV4Y2x1ZGVGaWVsZHNbaV07XHJcblx0XHRcdFx0aWYgKHN0YXJ0c1dpdGgoZWwsIHRoaXMuY29uZmlnLmdyb3VwU2V0dGluZ3NbMF0ubmFtZSArIFwiX1wiKSkge1xyXG5cdFx0XHRcdFx0dGhpcy5leGNsdWRlRmllbGRzLnNwbGljZShpLCAxKTtcclxuXHRcdFx0XHRcdGktLTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0SW5mbygpIHtcclxuXHRcdHRoaXMuZGF0ZVBpcGVGb3JtYXQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImRhdGVQaXBlXCIpO1xyXG5cdFx0dGhpcy50cmFuc2xhdGlvbiA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ0cmFuc2xhdGlvblwiKSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgb25GaWVsZERyb3AoYXJnczogRmllbGREcm9wRXZlbnRBcmdzKSB7XHJcblx0XHR0aGlzLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZXMgPSBbLi4uYXJncy5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVzXTtcclxuXHRcdC8vY2hhbmdlIHRoZSBjYWxjdWFsdGVGaWVsZCBtZXRob2QgdXNlIHRoZSBjb3JyZXNwb25kaW5nIGNhbGN1bGF0ZVxyXG5cdFx0Y29uc3QgY2FsY3VhbHRlRmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gYXJncy5maWVsZE5hbWUgJiYgZWwuaXNDYWxjdWxhdGVkRmllbGRcclxuXHRcdCk7XHJcblx0XHRpZiAoY2FsY3VhbHRlRmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRhcmdzLmRyb3BGaWVsZC50eXBlID1cclxuXHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmdldENhbGN1bGF0ZU1ldGhvZChcclxuXHRcdFx0XHRcdGNhbGN1YWx0ZUZpZWxkWzBdLmNvbE5hbWVcclxuXHRcdFx0XHQpIGFzIGFueTtcclxuXHRcdFx0YXJncy5kcm9wRmllbGQuY2FwdGlvbiA9IGFyZ3MuZHJvcEZpZWxkLmNhcHRpb25cclxuXHRcdFx0XHQucmVwbGFjZShcIkNhbGN1bGF0ZVwiLCBcIlwiKVxyXG5cdFx0XHRcdC50cmltKCk7XHJcblx0XHR9XHJcblx0XHRmb3IgKFxyXG5cdFx0XHRsZXQgaSA9IDA7XHJcblx0XHRcdGkgPCBhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5maWx0ZXJTZXR0aW5ncy5sZW5ndGg7XHJcblx0XHRcdGkrK1xyXG5cdFx0KSB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5maWx0ZXJTZXR0aW5nc1tpXS5uYW1lID09PVxyXG5cdFx0XHRcdFx0YXJncy5maWVsZE5hbWUgJiZcclxuXHRcdFx0XHRhcmdzLmRyb3BBeGlzID09PSBcIlwiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLmZpbHRlclNldHRpbmdzLnNwbGljZShpLCAxKTtcclxuXHRcdFx0XHR0aGlzLmZpbHRlclNldHRpbmdzID0gYXJncy5kYXRhU291cmNlU2V0dGluZ3MuZmlsdGVyU2V0dGluZ3M7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIENhbGN1bGF0ZWQgZmllbGTkuovku7bvvJrliJvlu7pcclxuXHRwdWJsaWMgY2FsY3VsYXRlZEZpZWxkQ3JlYXRlKGFyZ3M6IENhbGN1bGF0ZWRGaWVsZENyZWF0ZUV2ZW50QXJncykge1xyXG5cdFx0aWYgKFxyXG5cdFx0XHRhcmdzLmNhbGN1bGF0ZWRGaWVsZC5uYW1lICE9PSBcIlwiICYmXHJcblx0XHRcdGFyZ3MuY2FsY3VsYXRlZEZpZWxkLm5hbWUudHJpbSgpICE9PSBcIlwiXHJcblx0XHQpIHtcclxuXHRcdFx0bGV0IGluZGV4ID1cclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MuZmluZEluZGV4KFxyXG5cdFx0XHRcdFx0KGVsKSA9PiBlbC5uYW1lID09PSBhcmdzLmNhbGN1bGF0ZWRGaWVsZC5uYW1lXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0aWYgKGluZGV4ICE9PSAtMSkge1xyXG5cdFx0XHRcdGlmIChhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtYXRTdHJpbmcgPT09IFwiXCIpIHtcclxuXHRcdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jYWxjdWxhdGVkRmllbGRTZXR0aW5nc1tcclxuXHRcdFx0XHRcdFx0aW5kZXhcclxuXHRcdFx0XHRcdF0uZm9ybWF0U3RyaW5nID0gXCJOMlwiO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3NbXHJcblx0XHRcdFx0XHRcdGluZGV4XHJcblx0XHRcdFx0XHRdLmZvcm1hdFN0cmluZyA9IGFyZ3MuY2FsY3VsYXRlZEZpZWxkLmZvcm1hdFN0cmluZztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYgKGFyZ3MuY2FsY3VsYXRlZEZpZWxkLmZvcm1hdFN0cmluZyA9PT0gXCJcIikge1xyXG5cdFx0XHRcdFx0YXJncy5jYWxjdWxhdGVkRmllbGQuZm9ybWF0U3RyaW5nID0gXCJOMlwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvLyDnp7vpmaTph43lpI1cclxuXHRcdFx0bGV0IGZJbmRleCA9IHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcy5maW5kSW5kZXgoXHJcblx0XHRcdFx0KGYpID0+IGYubmFtZSA9PT0gYXJncy5jYWxjdWxhdGVkRmllbGQubmFtZVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRpZiAoZkluZGV4ID4gLTEpIHtcclxuXHRcdFx0XHR0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMuc3BsaWNlKGZJbmRleCwgMSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8g5Yy56YWN6L+Q566X56ymIEZpcnN0IHx8IExhc3RcclxuXHRcdFx0bGV0IGZvcm11bGFTdHIgPSBhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtdWxhO1xyXG5cdFx0XHRsZXQgcmVnMSA9IC9cIkZpcnN0XFwoKC4rPylcXClcIi9nO1xyXG5cdFx0XHRsZXQgcmVnMiA9IC9cIkxhc3RcXCgoLis/KVxcKVwiL2c7XHJcblx0XHRcdGlmIChyZWcxLnRlc3QoZm9ybXVsYVN0cikgfHwgcmVnMi50ZXN0KGZvcm11bGFTdHIpKSB7XHJcblx0XHRcdFx0Ly8g5Yik5pat5piv5ZCm5a2Y5ZyoRmlyc3QgfHwgTGFzdCDooajovr7lvI9cclxuXHRcdFx0XHRsZXQgbWF0Y2hGaXJzdEZpZWxkcyA9IEFycmF5LmZyb20oXHJcblx0XHRcdFx0XHRmb3JtdWxhU3RyW1wibWF0Y2hBbGxcIl0oL1wiRmlyc3RcXCgoLis/KVxcKVwiL2cpLFxyXG5cdFx0XHRcdFx0KG0pID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFN0cjogbVswXSxcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFdvcmQ6IG1bMV0sXHJcblx0XHRcdFx0XHRcdFx0cmVwbGFjZVZhbHVlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoTWV0aG9kOiBcIkZpcnN0XCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRsZXQgbWF0Y2hMYXN0RmllbGRzID0gQXJyYXkuZnJvbShcclxuXHRcdFx0XHRcdGZvcm11bGFTdHJbXCJtYXRjaEFsbFwiXSgvXCJMYXN0XFwoKC4rPylcXClcIi9nKSxcclxuXHRcdFx0XHRcdChtKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hTdHI6IG1bMF0sXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hXb3JkOiBtWzFdLFxyXG5cdFx0XHRcdFx0XHRcdHJlcGxhY2VWYWx1ZTogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRtYXRjaE1ldGhvZDogXCJMYXN0XCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRsZXQgbWF0Y2hNYXhGaWVsZHMgPSBBcnJheS5mcm9tKFxyXG5cdFx0XHRcdFx0Zm9ybXVsYVN0cltcIm1hdGNoQWxsXCJdKC9cIk1heFxcKCguKz8pXFwpXCIvZyksXHJcblx0XHRcdFx0XHQobSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoU3RyOiBtWzBdLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoV29yZDogbVsxXSxcclxuXHRcdFx0XHRcdFx0XHRyZXBsYWNlVmFsdWU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hNZXRob2Q6IFwiTWF4XCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRsZXQgbWF0Y2hNaW5GaWVsZHMgPSBBcnJheS5mcm9tKFxyXG5cdFx0XHRcdFx0Zm9ybXVsYVN0cltcIm1hdGNoQWxsXCJdKC9cIk1pblxcKCguKz8pXFwpXCIvZyksXHJcblx0XHRcdFx0XHQobSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoU3RyOiBtWzBdLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoV29yZDogbVsxXSxcclxuXHRcdFx0XHRcdFx0XHRyZXBsYWNlVmFsdWU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hNZXRob2Q6IFwiTWluXCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRsZXQgbWF0Y2hTdW1GaWVsZHMgPSBBcnJheS5mcm9tKFxyXG5cdFx0XHRcdFx0Zm9ybXVsYVN0cltcIm1hdGNoQWxsXCJdKC9cIlN1bVxcKCguKz8pXFwpXCIvZyksXHJcblx0XHRcdFx0XHQobSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoU3RyOiBtWzBdLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoV29yZDogbVsxXSxcclxuXHRcdFx0XHRcdFx0XHRyZXBsYWNlVmFsdWU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hNZXRob2Q6IFwiU3VtXCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRsZXQgbWF0Y2hBdmdGaWVsZHMgPSBBcnJheS5mcm9tKFxyXG5cdFx0XHRcdFx0Zm9ybXVsYVN0cltcIm1hdGNoQWxsXCJdKC9cIkF2Z1xcKCguKz8pXFwpXCIvZyksXHJcblx0XHRcdFx0XHQobSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoU3RyOiBtWzBdLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoV29yZDogbVsxXSxcclxuXHRcdFx0XHRcdFx0XHRyZXBsYWNlVmFsdWU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hNZXRob2Q6IFwiQXZnXCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRtYXRjaEZpcnN0RmllbGRzLmV2ZXJ5KCh4KSA9PlxyXG5cdFx0XHRcdFx0XHR0aGlzLmFsbG93ZWRDYWxjdWxhdGVkRmllbGRzLmluY2x1ZGVzKHgubWF0Y2hXb3JkKVxyXG5cdFx0XHRcdFx0KSAmJlxyXG5cdFx0XHRcdFx0bWF0Y2hMYXN0RmllbGRzLmV2ZXJ5KCh4KSA9PlxyXG5cdFx0XHRcdFx0XHR0aGlzLmFsbG93ZWRDYWxjdWxhdGVkRmllbGRzLmluY2x1ZGVzKHgubWF0Y2hXb3JkKVxyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0Ly8g5Yik5patRmlyc3TlkoxMYXN06KGo6L6+5byP5YaF55qE5a2X5q615piv5ZCm5ZCI5rOVXHJcblx0XHRcdFx0XHR0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMucHVzaCh7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGFyZ3MuY2FsY3VsYXRlZEZpZWxkLm5hbWUsXHJcblx0XHRcdFx0XHRcdGZvcm11bGE6IGFyZ3MuY2FsY3VsYXRlZEZpZWxkLmZvcm11bGEsXHJcblx0XHRcdFx0XHRcdG1hdGNoRmllbGRzOiBbXHJcblx0XHRcdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoRmlyc3RGaWVsZHMsXHJcblx0XHRcdFx0XHRcdFx0Li4ubWF0Y2hMYXN0RmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoTWF4RmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoTWluRmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoU3VtRmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoQXZnRmllbGRzLFxyXG5cdFx0XHRcdFx0XHRdLFxyXG5cdFx0XHRcdFx0XHRncmFuZFRvdGFsOiAwLFxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRsZXQgZmllbGROYW1lID0gKFxyXG5cdFx0XHRcdFx0XHRmb3JtdWxhU3RyLnNwbGl0KFwiRmlyc3QoXCIpWzFdIHx8XHJcblx0XHRcdFx0XHRcdGZvcm11bGFTdHIuc3BsaXQoXCJMYXN0KFwiKVsxXVxyXG5cdFx0XHRcdFx0KS5zcGxpdChcIilcIilbMF07XHJcblx0XHRcdFx0XHRhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtdWxhID1cclxuXHRcdFx0XHRcdFx0XCInXFxcIlwiICsgXCJTdW0oXCIgKyBmaWVsZE5hbWUgKyAnKVwiPScgKyBmb3JtdWxhU3RyICsgXCInXCI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBDYWxjdWxhdGVkIGZpZWxk5LqL5Lu277ya5a6M5oiQXHJcblx0cHVibGljIGFjdGlvbkNvbXBsZXRlKGFyZ3MpIHtcclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5hY3Rpb25OYW1lID09PSBcIkZpZWxkIGFnZ3JlZ2F0ZWRcIiB8fFxyXG5cdFx0XHRhcmdzLmFjdGlvbk5hbWUgPT09IFwiRmllbGQgbGlzdCBjbG9zZWRcIlxyXG5cdFx0KSB7XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlcyA9IFtcclxuXHRcdFx0XHQuLi5hcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZXMsXHJcblx0XHRcdF07XHJcblx0XHRcdHRoaXMuc2V0VmFsdWVJdGVtRGF0YSgpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGFyZ3MuYWN0aW9uTmFtZSA9PSBcIkZpZWxkIHJlbW92ZWRcIikge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0YXJncy5maWVsZEluZm8gJiZcclxuXHRcdFx0XHRhcmdzLmZpZWxkSW5mby5maWVsZEl0ZW0gJiZcclxuXHRcdFx0XHRhcmdzLmZpZWxkSW5mby5maWVsZEl0ZW0udHlwZSA9PSBcIkNhbGN1bGF0ZWRGaWVsZFwiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGxldCBmaWVsZCA9IGFyZ3MuZmllbGRJbmZvLmZpZWxkTmFtZTtcclxuXHRcdFx0XHQvLyBSZW1vdmUgdGhlIGRlbGV0ZWQgY2FsY3VsYXRlZCBmaWVsZCBmcm9tIGFuIHN0b3JlZCBhcnJheS5cclxuXHRcdFx0XHR0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMgPVxyXG5cdFx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzLmZpbHRlcihmdW5jdGlvbiAob2JqKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBvYmoubmFtZSAhPT0gZmllbGQ7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gQ2FsY3VsYXRlZCBmaWVsZOS6i+S7tu+8muW8gOWni1xyXG5cdHB1YmxpYyBhY3Rpb25CZWdpbihhcmdzKSB7XHJcblx0XHRpZiAoYXJncy5hY3Rpb25OYW1lID09PSBcIkVkaXQgY2FsY3VsYXRlZCBmaWVsZFwiKSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzW2ldLm5hbWUgJiZcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZpZWxkTGlzdFtcclxuXHRcdFx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzW2ldLm5hbWVcclxuXHRcdFx0XHRcdF1cclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZpZWxkTGlzdFtcclxuXHRcdFx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzW2ldLm5hbWVcclxuXHRcdFx0XHRcdF0uZm9ybXVsYSA9IHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1tpXS5mb3JtdWxhO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByZXNpemVTdG9wKGFyZ3MpIHtcclxuXHRcdGlmICh0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGgpIHtcclxuXHRcdFx0Y29uc3QgaGVhZGVyX2ZpZWxkID0gdGhpcy5jb25maWcuY29sdW1uc1dpZHRoLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+IGVsLmhlYWRlclRleHQgPT09IGFyZ3MuY29sdW1uLmhlYWRlclRleHRcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKGhlYWRlcl9maWVsZC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0aGVhZGVyX2ZpZWxkWzBdLndpZHRoID0gcGFyc2VJbnQoYXJncy5jb2x1bW4ud2lkdGgpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnLmNvbHVtbnNXaWR0aC5wdXNoKHtcclxuXHRcdFx0XHRcdGhlYWRlclRleHQ6IGFyZ3MuY29sdW1uLmhlYWRlclRleHQsXHJcblx0XHRcdFx0XHR3aWR0aDogcGFyc2VJbnQoYXJncy5jb2x1bW4ud2lkdGgpLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGggPSBbXTtcclxuXHRcdFx0dGhpcy5jb25maWcuY29sdW1uc1dpZHRoLnB1c2goe1xyXG5cdFx0XHRcdGhlYWRlclRleHQ6IGFyZ3MuY29sdW1uLmhlYWRlclRleHQsXHJcblx0XHRcdFx0d2lkdGg6IHBhcnNlSW50KGFyZ3MuY29sdW1uLndpZHRoKSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRjb25zdCBwb3J0bGV0ID0gdGhpcy5wb3J0bGV0O1xyXG5cdFx0cG9ydGxldC5jb25maWcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcblx0XHRjb25zdCBpbmRleCA9IHRoaXMucG9ydGxldHMuZmluZEluZGV4KCh4KSA9PiB4Lm5ld0lkID09PSBwb3J0bGV0Lm5ld0lkKTtcclxuXHRcdGlmIChpbmRleCA+IC0xKSB0aGlzLnBvcnRsZXRzW2luZGV4XSA9IHBvcnRsZXQ7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNldENvbHVtbnNSZW5kZXIoYXJncykge1xyXG5cdFx0aWYgKGFyZ3Muc3RhY2tlZENvbHVtbnMpIHtcclxuXHRcdFx0YXJncy5zdGFja2VkQ29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRjb2wuZm9ybWF0ICYmXHJcblx0XHRcdFx0XHQoY29sLmZvcm1hdC5pbmRleE9mKFwiTlwiKSAhPT0gLTEgfHxcclxuXHRcdFx0XHRcdFx0Y29sLmZvcm1hdCA9PT0gXCJwZXJjZW50XCIgfHxcclxuXHRcdFx0XHRcdFx0Y29sLmZvcm1hdC5pbmRleE9mKFwiUFwiKSAhPT0gLTEpXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRjb2wudGV4dEFsaWduID0gXCJSaWdodFwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuY29uZmlnLmNvbHVtbnNXaWR0aCkge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IChhcmdzIGFzIGFueSkuY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGFyZ3MuY29sdW1uc1tpXS5oZWFkZXJUZXh0ID09PSBcIlwiIHx8XHJcblx0XHRcdFx0XHQhYXJncy5jb2x1bW5zW2ldLmhlYWRlclRleHRcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGNvbHVtbl9yb3cgPSB0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGguZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHQoZWwpID0+IGVsLmhlYWRlclRleHQgPT09IGFyZ3MuY29sdW1uc1tpXS5oZWFkZXJUZXh0XHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0aWYgKGNvbHVtbl9yb3cubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRhcmdzLmNvbHVtbnNbaV0ud2lkdGggPSBjb2x1bW5fcm93WzBdLndpZHRoO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb25zdCBoZWFkZXJUZXh0ID0gYXJncy5jb2x1bW5zW2ldLmhlYWRlclRleHRcclxuXHRcdFx0XHRcdFx0LnJlcGxhY2UoL1xccysvZywgXCJcIilcclxuXHRcdFx0XHRcdFx0LnNwbGl0KFwiLlwiKTtcclxuXHRcdFx0XHRcdGlmIChoZWFkZXJUZXh0ICYmIGhlYWRlclRleHQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGguZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdFx0XHRcdGVsLmhlYWRlclRleHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoL1xccysvZywgXCJcIilcclxuXHRcdFx0XHRcdFx0XHRcdFx0LnRvTG93ZXJDYXNlKCkgPT09XHJcblx0XHRcdFx0XHRcdFx0XHRoZWFkZXJUZXh0W2hlYWRlclRleHQubGVuZ3RoIC0gMV0udG9Mb3dlckNhc2UoKVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRpZiAoY29sdW1uLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0XHQoYXJncyBhcyBhbnkpLmNvbHVtbnNbaV0ud2lkdGggPSBjb2x1bW5bMF0ud2lkdGg7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gZGF0ZSBmb3JtYXQgYWJvdXQgcXVhcnRlcmx5XHJcblx0XHRcdFx0bGV0IHBpdm90VmFsdWVzOiBhbnkgPSB0aGlzLnBpdm90T2JqLnBpdm90VmFsdWVzO1xyXG5cdFx0XHRcdGlmICh0aGlzLmZvcm1hdERhdGVzICYmIHRoaXMuZm9ybWF0RGF0ZXMubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRsZXQgZGF0ZUZpZWxkcyA9IHRoaXMuZm9ybWF0RGF0ZXMubWFwKChlbCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZWwubmFtZTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgayA9IDE7IGsgPCBwaXZvdFZhbHVlcy5sZW5ndGg7IGsrKykge1xyXG5cdFx0XHRcdFx0XHRmb3IgKFxyXG5cdFx0XHRcdFx0XHRcdGxldCBqID0gMDtcclxuXHRcdFx0XHRcdFx0XHRwaXZvdFZhbHVlc1trXSAhPSBudWxsICYmIGogPCBwaXZvdFZhbHVlc1trXS5sZW5ndGg7XHJcblx0XHRcdFx0XHRcdFx0aisrXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdICE9IG51bGwgJiZcclxuXHRcdFx0XHRcdFx0XHRcdChqID09IDBcclxuXHRcdFx0XHRcdFx0XHRcdFx0PyBkYXRlRmllbGRzLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNba11bal0udmFsdWVTb3J0LmF4aXNcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHRcdDogZGF0ZUZpZWxkcy5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdLmFjdHVhbFRleHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICApKVxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly9DdXN0b21pemUgdGhlIFJvdyBoZWFkZXJzL0NvbHVtbiBoZWFkZXJzIGJhc2VkIG9uIHlvdXIgbmVlZHNcclxuXHRcdFx0XHRcdFx0XHRcdGxldCBoZWFkZXJzO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGogPT09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aGVhZGVycyA9IHBpdm90VmFsdWVzW2tdW2pdLmFjdHVhbFRleHQ7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBoZWFkZXJzID0gcGl2b3RWYWx1ZXNba11bal0uZm9ybWF0dGVkVGV4dDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aGVhZGVycyA9IHBpdm90VmFsdWVzW2tdW2pdLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGhlYWRlcnMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGRhdGUgPSBuZXcgRGF0ZShoZWFkZXJzKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBxdWFydGVyID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRNYXRoLmZsb29yKGRhdGUuZ2V0TW9udGgoKSAvIDMpICsgMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBmb3JtYXQ7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZvcm1hdERhdGVzLm1hcCgoZWwpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaiA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsLm5hbWUgPT1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNba11bal0udmFsdWVTb3J0LmF4aXNcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gZWwuZm9ybWF0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsLm5hbWUgPT1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNba11bal0uYWN0dWFsVGV4dFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBlbC5mb3JtYXQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNba11bal0uZm9ybWF0dGVkVGV4dCA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5nZXRRdWFydGVyVmFsdWUoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cXVhcnRlclxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8vIGlmKHRoaXMucGl2b3RPYmopIHRoaXMucGl2b3RPYmoucmVmcmVzaERhdGEoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBvbkxvYWQoKTogdm9pZCB7XHJcblx0XHQvLyBTTVAyLTE1NjUxIOW8gOWQr+iZmuaLn+a7muWKqOW5tnNvcnTliJflkI7vvIzmnaXlm57mu5rliqjkvJrlr7zoh7TmlbDmja7nqbrnmb1cclxuXHRcdC8vIOWumOaWuemTvuaOpSBodHRwczovL2VqMi5zeW5jZnVzaW9uLmNvbS9hbmd1bGFyL2RvY3VtZW50YXRpb24vcGl2b3R2aWV3L3ZpcnR1YWwtc2Nyb2xsaW5nI3ZpcnR1YWwtc2Nyb2xsaW5nLWZvci1zdGF0aWMtZmllbGQtbGlzdFxyXG5cdFx0Ly8gRGVtb+mTvuaOpSBodHRwczovL3N0YWNrYmxpdHouY29tL2VkaXQvZ2l0aHViLTdnZ2sydS00cmt6YjM/ZmlsZT1zcmMlMkZhcHAuY29tcG9uZW50LnRzXHJcblx0XHQodGhpcy5maWVsZGxpc3RPYmogYXMgUGl2b3RGaWVsZExpc3RDb21wb25lbnQpLnBpdm90R3JpZE1vZHVsZSA9IHRoaXNcclxuXHRcdFx0LnBpdm90T2JqIGFzIFBpdm90Vmlld0NvbXBvbmVudDtcclxuXHR9XHJcblxyXG5cdG9uZGF0YUJvdW5kKCl7XHJcblx0XHRpZiAoQnJvd3Nlci5pc0RldmljZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBpdm90T2JqLmVsZW1lbnQuc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMucGl2b3RPYmouYWxsb3dDYWxjdWxhdGVkRmllbGQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnBpdm90T2JqLnNob3dGaWVsZExpc3QgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZW5naW5lUG9wdWxhdGVkKGFyZ3MpIHtcclxuXHRcdGxldCBjbG9uZWRWYWx1ZXM6IElQaXZvdFZhbHVlcztcclxuXHRcdGxldCBjdXJyZW50UGl2b3RWYWx1ZXM6IGFueSA9IHRoaXMuZ2V0Q2xvbmVkUGl2b3RWYWx1ZXMoXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLnBpdm90VmFsdWVzXHJcblx0XHQpO1xyXG5cdFx0bGV0IHBhZ2VTZXR0aW5nczogSVBhZ2VTZXR0aW5ncyA9XHJcblx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLnBhZ2VTZXR0aW5ncztcclxuXHJcblx0XHRpZiAodGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZ2VuZXJhdGVHcmlkRGF0YSkge1xyXG5cdFx0XHQvLyDmsqHms5XlpI3njrAgaHR0cHM6Ly9yYWlzZWxwLmF0bGFzc2lhbi5uZXQvYnJvd3NlL1NNUDItMTcyNCDlpITnkIbnmoTov5nkuKrpl67popjmg4XlhrUsIOebtOaOpeazqOmHiuaOiVxyXG5cdFx0XHQvLyDkuIvpnaLov5nmrrXku6PnoIHkvJrlvbHlk40gaHR0cHM6Ly9yYWlzZWxwLmF0bGFzc2lhbi5uZXQvYnJvd3NlL1NNUDItMTIxMzlcclxuXHRcdFx0Ly8gdGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZ2VuZXJhdGVHcmlkRGF0YShcclxuXHRcdFx0Ly8gXHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncyxcclxuXHRcdFx0Ly8gXHR0cnVlXHJcblx0XHRcdC8vICk7XHJcblx0XHRcdGNsb25lZFZhbHVlcyA9IHRoaXMuZ2V0Q2xvbmVkUGl2b3RWYWx1ZXMoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUucGl2b3RWYWx1ZXNcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLnBpdm90VmFsdWVzID0gY3VycmVudFBpdm90VmFsdWVzO1xyXG5cclxuXHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUucGFnZVNldHRpbmdzID0gcGFnZVNldHRpbmdzO1xyXG5cclxuXHRcdFx0Ly8gSGVyZSBcImNsb25lZFZhbHVlc1wiIGNvbnRhaW5zIHRoZSB3aG9sZSBwaXZvdCB2YWx1ZXMuXHJcblx0XHRcdHRoaXMuYWxsRGF0YVZhbHVlID0gY2xvbmVkVmFsdWVzO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRDbG9uZWRQaXZvdFZhbHVlcyhwaXZvdFZhbHVlczogSVBpdm90VmFsdWVzKTogSVBpdm90VmFsdWVzIHtcclxuXHRcdGxldCBjbG9uZWRTZXRzOiBJUGl2b3RWYWx1ZXMgPSBbXTtcclxuXHRcdGlmIChwaXZvdFZhbHVlcyAmJiBwaXZvdFZhbHVlcy5sZW5ndGgpIHtcclxuXHRcdFx0Zm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHBpdm90VmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0aWYgKHBpdm90VmFsdWVzW2ldKSB7XHJcblx0XHRcdFx0XHRjbG9uZWRTZXRzW2ldID0gW107XHJcblx0XHRcdFx0XHRmb3IgKGxldCBqOiBudW1iZXIgPSAwOyBqIDwgcGl2b3RWYWx1ZXNbaV0ubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0aWYgKHBpdm90VmFsdWVzW2ldW2pdKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgKi9cclxuXHRcdFx0XHRcdFx0XHRjbG9uZWRTZXRzW2ldW2pdID0gdGhpcy5nZXRDbG9uZWRQaXZvdFZhbHVlT2JqKFxyXG5cdFx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNbaV1bal0gYXMgeyBba2V5OiBzdHJpbmddOiBPYmplY3QgfVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSAqL1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gY2xvbmVkU2V0cztcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0Q2xvbmVkUGl2b3RWYWx1ZU9iaihkYXRhOiB7IFtrZXk6IHN0cmluZ106IE9iamVjdCB9KToge1xyXG5cdFx0W2tleTogc3RyaW5nXTogT2JqZWN0O1xyXG5cdH0ge1xyXG5cdFx0bGV0IGtleVBvczogbnVtYmVyID0gMDtcclxuXHRcdGxldCBmcmFtZWRTZXQ6IGFueSA9IHt9O1xyXG5cdFx0aWYgKCEoZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB1bmRlZmluZWQpKSB7XHJcblx0XHRcdGxldCBmaWVsZHM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMoZGF0YSk7XHJcblx0XHRcdHdoaWxlIChrZXlQb3MgPCBmaWVsZHMubGVuZ3RoKSB7XHJcblx0XHRcdFx0ZnJhbWVkU2V0W2ZpZWxkc1trZXlQb3NdXSA9IGRhdGFbZmllbGRzW2tleVBvc11dO1xyXG5cdFx0XHRcdGtleVBvcysrO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRmcmFtZWRTZXQgPSBkYXRhO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZyYW1lZFNldDtcclxuXHR9XHJcblxyXG5cdC8vI3JlZ2lvbiBGaWx0ZXJpbmcgdGhlIFRyZWVOb2Rlc1xyXG5cdHByaXZhdGUgc2VhcmNoTm9kZXMoYXJncykge1xyXG5cdFx0bGV0IF90ZXh0ID0gYXJncy5tYXNrZWRWYWx1ZTtcclxuXHRcdGxldCBwcmVkaWNhdHMgPSBbXSxcclxuXHRcdFx0X2FycmF5ID0gW10sXHJcblx0XHRcdF9maWx0ZXIgPSBbXTtcclxuXHRcdGlmIChfdGV4dCA9PSBcIlwiKSB7XHJcblx0XHRcdHRoaXMuY2hhbmdlRGF0YVNvdXJjZShcclxuXHRcdFx0XHQoKHRoaXMgYXMgYW55KS5maWVsZGxpc3RPYmoudHJlZVZpZXdNb2R1bGUgYXMgYW55KS5nZXRUcmVlRGF0YSgpXHJcblx0XHRcdCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsZXQgcHJlZGljYXRlID0gbmV3IFByZWRpY2F0ZShcImNhcHRpb25cIiwgXCJjb250YWluc1wiLCBfdGV4dCwgdHJ1ZSk7XHJcblx0XHRcdGxldCBmaWx0ZXJlZExpc3QgPSBuZXcgRGF0YU1hbmFnZXIoXHJcblx0XHRcdFx0KCh0aGlzIGFzIGFueSkuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlIGFzIGFueSkuZ2V0VHJlZURhdGEoKVxyXG5cdFx0XHQpLmV4ZWN1dGVMb2NhbChuZXcgUXVlcnkoKS53aGVyZShwcmVkaWNhdGUpKTtcclxuXHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBmaWx0ZXJlZExpc3QubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRfZmlsdGVyLnB1c2goZmlsdGVyZWRMaXN0W2pdW1wiaWRcIl0pO1xyXG5cdFx0XHRcdGxldCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJJdGVtcyhcclxuXHRcdFx0XHRcdGZpbHRlcmVkTGlzdFtqXSxcclxuXHRcdFx0XHRcdChcclxuXHRcdFx0XHRcdFx0KHRoaXMgYXMgYW55KS5maWVsZGxpc3RPYmoudHJlZVZpZXdNb2R1bGUgYXMgYW55XHJcblx0XHRcdFx0XHQpLmdldFRyZWVEYXRhKClcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZmlsdGVycy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRfYXJyYXkuaW5kZXhPZihmaWx0ZXJzW2ldKSA9PSAtMSAmJlxyXG5cdFx0XHRcdFx0XHRmaWx0ZXJzW2ldICE9IG51bGxcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRfYXJyYXkucHVzaChmaWx0ZXJzW2ldKTtcclxuXHRcdFx0XHRcdFx0cHJlZGljYXRzLnB1c2goXHJcblx0XHRcdFx0XHRcdFx0bmV3IFByZWRpY2F0ZShcImlkXCIsIFwiZXF1YWxcIiwgZmlsdGVyc1tpXSwgZmFsc2UpXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChwcmVkaWNhdHMubGVuZ3RoID09IDApIHtcclxuXHRcdFx0XHR0aGlzLmNoYW5nZURhdGFTb3VyY2UoW10pO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGxldCBxdWVyeSA9IG5ldyBRdWVyeSgpLndoZXJlKFByZWRpY2F0ZS5vcihwcmVkaWNhdHMpKTtcclxuXHRcdFx0XHRsZXQgbmV3TGlzdCA9IG5ldyBEYXRhTWFuYWdlcihcclxuXHRcdFx0XHRcdChcclxuXHRcdFx0XHRcdFx0KHRoaXMgYXMgYW55KS5maWVsZGxpc3RPYmoudHJlZVZpZXdNb2R1bGUgYXMgYW55XHJcblx0XHRcdFx0XHQpLmdldFRyZWVEYXRhKClcclxuXHRcdFx0XHQpLmV4ZWN1dGVMb2NhbChxdWVyeSk7XHJcblx0XHRcdFx0dGhpcy5jaGFuZ2VEYXRhU291cmNlKG5ld0xpc3QpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvL0ZpbmQgdGhlIFBhcmVudCBOb2RlcyBmb3IgY29ycmVzcG9uZGluZyBjaGlsZHNcclxuXHRwdWJsaWMgZ2V0RmlsdGVySXRlbXMoZkxpc3QsIGxpc3QpIHtcclxuXHRcdGxldCBub2RlcyA9IFtdO1xyXG5cdFx0bm9kZXMucHVzaChmTGlzdFtcImlkXCJdKTtcclxuXHRcdGxldCBxdWVyeTIgPSBuZXcgUXVlcnkoKS53aGVyZShcImlkXCIsIFwiZXF1YWxcIiwgZkxpc3RbXCJwaWRcIl0sIGZhbHNlKTtcclxuXHRcdGxldCBmTGlzdDEgPSBuZXcgRGF0YU1hbmFnZXIobGlzdCkuZXhlY3V0ZUxvY2FsKHF1ZXJ5Mik7XHJcblx0XHRpZiAoZkxpc3QxLmxlbmd0aCAhPSAwKSB7XHJcblx0XHRcdGxldCBwTm9kZSA9IHRoaXMuZ2V0RmlsdGVySXRlbXMoZkxpc3QxWzBdLCBsaXN0KTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwTm9kZS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmIChub2Rlcy5pbmRleE9mKHBOb2RlW2ldKSA9PSAtMSAmJiBwTm9kZVtpXSAhPSBudWxsKVxyXG5cdFx0XHRcdFx0bm9kZXMucHVzaChwTm9kZVtpXSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIG5vZGVzO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG5vZGVzO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGNyZWF0ZWQoYXJnczogYW55KSB7XHJcblx0XHRpZiAodGhpcy5maWVsZGxpc3RPYmogJiYgIXRoaXMuZmllbGRsaXN0T2JqLmVuZ2luZU1vZHVsZS5maWVsZHMpIHtcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZW5naW5lTW9kdWxlLmZpZWxkcyA9IFtdO1xyXG5cdFx0fVxyXG5cdFx0bGV0IHNlYXJjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuXHRcdHNlYXJjaC5pZCA9IFwicGl2b3RTZWFyY2hCb3hcIiArIHRoaXMuZmllbGRsaXN0T2JqLmVsZW1lbnQuaWQ7XHJcblx0XHRsZXQgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG5cdFx0XHRcIiNcIiArIHRoaXMuZmllbGRsaXN0T2JqLmVsZW1lbnQuaWQgKyBcIl9Db250YWluZXIgLmUtZmllbGQtdGFibGVcIlxyXG5cdFx0KTtcclxuXHRcdGlmIChlbCkgZWwucHJlcGVuZChzZWFyY2gpO1xyXG5cdFx0dGhpcy5waXZvdFNlYXJjaEJveCA9IG5ldyBNYXNrZWRUZXh0Qm94KHtcclxuXHRcdFx0cGxhY2Vob2xkZXI6IHRoaXMudHJhbnNsYXRpb24uU0VBUkNIIHx8IFwiLlNFQVJDSFwiLFxyXG5cdFx0XHRjc3NDbGFzczogXCJwaXZvdC1zZWFyY2hcIixcclxuXHRcdFx0Y2hhbmdlOiB0aGlzLnNlYXJjaE5vZGVzLmJpbmQodGhpcyksXHJcblx0XHR9KTtcclxuXHRcdHRoaXMucGl2b3RTZWFyY2hCb3guYXBwZW5kVG8oXHJcblx0XHRcdFwiI3Bpdm90U2VhcmNoQm94XCIgKyB0aGlzLmZpZWxkbGlzdE9iai5lbGVtZW50LmlkXHJcblx0XHQpO1xyXG5cclxuXHRcdC8vIE5FVyBEYXNoYm9hcmQg54K55Ye7XCJhcHBseVwi5pe277yM6K+35rGC5paw5pWw5o2uXHJcblx0XHRsZXQgYXBwbHlCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZWxlbWVudC5pZCArIFwiX0RlZmVyVXBkYXRlQnV0dG9uMVwiXHJcblx0XHQpO1xyXG5cclxuXHRcdGFwcGx5QnRuICYmXHJcblx0XHRcdGFwcGx5QnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5wYWdlTG9hZGluZyA9IHRydWU7XHJcblx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXREYXRhQnlQb3J0bGV0c05ldyhcclxuXHRcdFx0XHRcdFt0aGlzLnBvcnRsZXRdLFxyXG5cdFx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdHRoaXMuUGl2b3RfRGF0YSA9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRSZXN1bHRCeURhdGFUYWJsZShcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMucG9ydGxldCxcclxuXHRcdFx0XHRcdFx0XHRcdGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZC5pZFxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmRhdGFTb3VyY2UgPVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuUGl2b3RfRGF0YTtcclxuXHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLlBpdm90X0RhdGEpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZ3JvdXBzID0gdGhpcy5jb25maWcueGF4aXMuZ3JvdXBzO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByb3dzID0gW107XHJcblx0XHRcdFx0XHRcdFx0aWYgKGdyb3Vwcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgZ2l0ZW0gb2YgZ3JvdXBzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gZ2l0ZW0ubmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGdpdGVtLnNob3dTdWJUb3RhbHMgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uc2hvd1N1YlRvdGFscztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRnaXRlbS5jYXB0aW9uID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdWYWx1ZSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy50cmFuc2xhdGlvbltcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0ubGFuZ0NvZGVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdF0gfHxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdDb2RlIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRnaXRlbS5jYXB0aW9uO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJvd3MucHVzaChnaXRlbSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuUGl2b3RfRGF0YS5tYXAoKGRhdGEpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChkYXRhW3Jvdy5uYW1lXSA9PT0gXCJcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFbcm93Lm5hbWVdID0gXCJudWxsXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLnBpdm90T2JqKSB0aGlzLnBpdm90T2JqLnJlZnJlc2hEYXRhKCk7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0bnVsbCxcclxuXHRcdFx0XHRcdGZhbHNlLFxyXG5cdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmQsXHJcblx0XHRcdFx0XHRmYWxzZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRcclxuXHRcdC8vIOeCueWHu1wiY2FuY2VsXCLml7bvvIzmgaLlpI3ljp/lp4vmlbDmja5cclxuXHRcdGxldCBjYW5jZWxCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZWxlbWVudC5pZCArIFwiX0RlZmVyVXBkYXRlQnV0dG9uMlwiXHJcblx0XHQpO1xyXG5cclxuXHRcdGNhbmNlbEJ0biAmJlxyXG5cdFx0XHRjYW5jZWxCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5kYXRhU291cmNlID1cclxuXHRcdFx0XHRcdFsuLi50aGlzLlBpdm90X0RhdGFdO1xyXG5cdFx0XHRcdGlmICh0aGlzLnBpdm90T2JqKSB0aGlzLnBpdm90T2JqLnJlZnJlc2hEYXRhKCk7XHJcblx0XHRcdFx0dGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcblx0XHRcdFx0dGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHR9KTtcdFx0XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZmllbGRMaXN0UmVmcmVzaGVkKGFyZ3MpIHtcclxuXHRcdGlmICh0aGlzLnBpdm90U2VhcmNoQm94KSB7XHJcblx0XHRcdHRoaXMucGl2b3RTZWFyY2hCb3gudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHR0aGlzLmNoYW5nZURhdGFTb3VyY2UoXHJcblx0XHRcdFx0KHRoaXMuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlIGFzIGFueSkuZ2V0VHJlZURhdGEoKVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjaGFuZ2VEYXRhU291cmNlKGRhdGEpIHtcclxuXHRcdGxldCBmaWVsZFRhYmxlID0gKHRoaXMgYXMgYW55KS5maWVsZGxpc3RPYmoudHJlZVZpZXdNb2R1bGUuZmllbGRUYWJsZTtcclxuXHRcdGlmIChmaWVsZFRhYmxlKSB7XHJcblx0XHRcdGZpZWxkVGFibGUuZmllbGRzID0ge1xyXG5cdFx0XHRcdGRhdGFTb3VyY2U6IGRhdGEsXHJcblx0XHRcdFx0aWQ6IFwiaWRcIixcclxuXHRcdFx0XHR0ZXh0OiBcImNhcHRpb25cIixcclxuXHRcdFx0XHRpc0NoZWNrZWQ6IFwiaXNTZWxlY3RlZFwiLFxyXG5cdFx0XHRcdHBhcmVudElEOiBcInBpZFwiLFxyXG5cdFx0XHRcdGljb25Dc3M6IFwic3ByaXRlQ3NzQ2xhc3NcIixcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vU01QMi0yOTU3IGZpeCB0aGUgZGF0ZSBpc3N1ZSBvbiB0aGUgcmF3IGRhdGFcclxuXHRwdWJsaWMgZHJpbGxUaHJvdWdoKGFyZ3M6IERyaWxsVGhyb3VnaEV2ZW50QXJncykge1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmdyaWRDb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGRhdGEgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PiBlbC5jb2xOYW1lID09PSBhcmdzLmdyaWRDb2x1bW5zW2ldLmZpZWxkXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGRhdGFbMF0uZGF0YVR5cGUgPT09IFwiZGF0ZVwiIHx8XHJcblx0XHRcdFx0XHRkYXRhWzBdLmRhdGFUeXBlID09PSBcImRhdGV0aW1lXCJcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGFyZ3MuZ3JpZENvbHVtbnNbaV0udHlwZSA9IFwiZGF0ZVwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHQvLyNlbmRyZWdpb25cclxuXHJcblx0cHJpdmF0ZSBzZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKG9iaiwgZGF0YSwgY29kZSkge1xyXG5cdFx0aWYgKGNvZGUgPT09IC0xKSB7XHJcblx0XHRcdG9iai5zdHlsZS5jb2xvciA9IGRhdGEubmVnYUZvbnRDb2xvcjtcclxuXHRcdFx0b2JqLnN0eWxlLmZvbnRGYW1pbHkgPSBkYXRhLm5lZ2FGb250RmFtaWx5VmFsdWU7XHJcblx0XHRcdG9iai5zdHlsZS5mb250U2l6ZSA9IGRhdGEubmVnYUZvbnRTaXplVmFsdWU7XHJcblx0XHRcdG9iai5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBkYXRhLm5lZ2FCYWNrZ3JvdW5kQ29sb3I7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRvYmouc3R5bGUuY29sb3IgPSBkYXRhLmZvbnRDb2xvcjtcclxuXHRcdFx0b2JqLnN0eWxlLmZvbnRGYW1pbHkgPSBkYXRhLmZvbnRGYW1pbHlWYWx1ZTtcclxuXHRcdFx0b2JqLnN0eWxlLmZvbnRTaXplID0gZGF0YS5mb250U2l6ZVZhbHVlO1xyXG5cdFx0XHRvYmouc3R5bGUuYmFja2dyb3VuZENvbG9yID0gZGF0YS5iYWNrZ3JvdW5kQ29sb3I7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNldENvbXBhcmVDb25kaXRpb25hbChcclxuXHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0ZGF0YVxyXG5cdCkge1xyXG5cdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTEpID09IDApIHtcclxuXHRcdFx0c3dpdGNoIChkYXRhLmNvbXBhcmVTZWxlY3QpIHtcclxuXHRcdFx0XHRjYXNlIFwiTGVzc1RoYW5cIjogLy8g5bCP5LqOXHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuT3JFcXVhbFRvXCI6IC8vIOWwj+S6juetieS6jlxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJHcmVhdGVyVGhhblwiOiAvLyDlpKfkuo5cclxuXHRcdFx0XHRjYXNlIFwiR3JlYXRlclRoYW5PckVxdWFsVG9cIjogLy8g5aSn5LqO562J5LqOXHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiTm90RXF1YWxzXCI6IC8vIOS4jeetieS6jlxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJCZXR3ZWVuXCI6IC8vIHZhbHVlMTw9IHZhbCA8PXZhbHVlMlxyXG5cdFx0XHRcdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTIpID09PSAxKSB7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRkYXRhLmNvbXBhcmVWYWx1ZTJcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiTm90QmV0d2VlblwiOiAvLyB2YWwgPj0gdmFsdWUyLCB2YWwgPD0gdmFsdWUxXHJcblx0XHRcdFx0XHRpZiAoTWF0aC5zaWduKGRhdGEuY29tcGFyZVZhbHVlMikgPT09IDEpIHtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEuY29tcGFyZVZhbHVlMlxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoTWF0aC5zaWduKGRhdGEuY29tcGFyZVZhbHVlMSkgPT09IDEpIHtcclxuXHRcdFx0c3dpdGNoIChkYXRhLmNvbXBhcmVTZWxlY3QpIHtcclxuXHRcdFx0XHRjYXNlIFwiTGVzc1RoYW5cIjogLy8g5bCP5LqOXHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuT3JFcXVhbFRvXCI6IC8vIOWwj+S6juetieS6jlxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IE51bWJlcihkYXRhLmNvbXBhcmVWYWx1ZTEpO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkxlc3NUaGFuXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiR3JlYXRlclRoYW5cIjogLy8g5aSn5LqOXHJcblx0XHRcdFx0Y2FzZSBcIkdyZWF0ZXJUaGFuT3JFcXVhbFRvXCI6IC8vIOWkp+S6juetieS6jlxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKGRhdGEuY29tcGFyZVZhbHVlMSk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJFcXVhbHNcIjogLy8g562J5LqOXHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBOdW1iZXIoZGF0YS5jb21wYXJlVmFsdWUxKTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkVxdWFsc1wiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJOb3RFcXVhbHNcIjogLy8g5LiN562J5LqOXHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gTnVtYmVyKGRhdGEuY29tcGFyZVZhbHVlMSk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHQvLyBwdXNo6L+b5pWw57uEXHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBOdW1iZXIoZGF0YS5jb21wYXJlVmFsdWUxKTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkdyZWF0ZXJUaGFuXCI7XHJcblx0XHRcdFx0XHQvLyBwdXNo6L+b5pWw57uEXHJcblxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5PckVxdWFsVG9cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQmV0d2VlblwiOiAvLyB2YWx1ZTE8PSB2YWwgPD12YWx1ZTJcclxuXHRcdFx0XHRcdGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUyKSA9PT0gMSkge1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS5jb21wYXJlVmFsdWUxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRkYXRhLmNvbXBhcmVWYWx1ZTJcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiTm90QmV0d2VlblwiOiAvLyB2YWwgPj0gdmFsdWUyLCB2YWwgPD0gdmFsdWUxXHJcblx0XHRcdFx0XHRpZiAoTWF0aC5zaWduKGRhdGEuY29tcGFyZVZhbHVlMikgPT09IDEpIHtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEuY29tcGFyZVZhbHVlMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHRcdC8vIHB1c2jov5vmlbDnu4RcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEuY29tcGFyZVZhbHVlMlxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0XHQvLyBwdXNo6L+b5pWw57uEXHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUxKSA9PT0gLTEpIHtcclxuXHRcdFx0c3dpdGNoIChkYXRhLmNvbXBhcmVTZWxlY3QpIHtcclxuXHRcdFx0XHRjYXNlIFwiTGVzc1RoYW5cIjogLy8g5bCP5LqOXHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuT3JFcXVhbFRvXCI6IC8vIOWwj+S6juetieS6jlxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gZGF0YS5jb21wYXJlU2VsZWN0O1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkdyZWF0ZXJUaGFuXCI6IC8vIOWkp+S6jlxyXG5cdFx0XHRcdGNhc2UgXCJHcmVhdGVyVGhhbk9yRXF1YWxUb1wiOiAvLyDlpKfkuo7nrYnkuo5cclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhbk9yRXF1YWxUb1wiO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gZGF0YS5jb21wYXJlVmFsdWUxO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkJldHdlZW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiRXF1YWxzXCI6IC8vIOetieS6jlxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJFcXVhbHNcIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRjYXNlIFwiTm90RXF1YWxzXCI6IC8vIOS4jeetieS6jlxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJOb3RFcXVhbHNcIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJCZXR3ZWVuXCI6IC8vIHZhbHVlMTw9IHZhbCA8PXZhbHVlMlxyXG5cdFx0XHRcdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTIpKSB7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gZGF0YS5jb21wYXJlVmFsdWUxO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gZGF0YS5jb21wYXJlVmFsdWUyO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTIgPSBkYXRhLmNvbXBhcmVWYWx1ZTI7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIk5vdEJldHdlZW5cIjogLy8gdmFsID49IHZhbHVlMiwgdmFsIDw9IHZhbHVlMVxyXG5cdFx0XHRcdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTIpKSB7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJMZXNzVGhhblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IGRhdGEuY29tcGFyZVZhbHVlMjtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IGRhdGEuY29tcGFyZVZhbHVlMjtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIk5vdEJldHdlZW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0UXVhcnRlclZhbHVlKGZvcm1hdCwgZGF0ZSwgcXVhcnRlcikge1xyXG5cdFx0bGV0IHllYXI6IGFueTtcclxuXHRcdHN3aXRjaCAoZm9ybWF0KSB7XHJcblx0XHRcdGNhc2UgXCJRMSAyMDIxXCI6XHJcblx0XHRcdFx0eWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuXHRcdFx0XHRyZXR1cm4gXCJRXCIgKyBxdWFydGVyICsgXCIgXCIgKyB5ZWFyO1xyXG5cdFx0XHRjYXNlIFwiUTEgMjFcIjpcclxuXHRcdFx0XHR5ZWFyID0gKGRhdGUgYXMgYW55KS5nZXRZZWFyKCkgLSAxMDA7XHJcblx0XHRcdFx0cmV0dXJuIFwiUVwiICsgcXVhcnRlciArIFwiIFwiICsgeWVhcjtcclxuXHRcdFx0Y2FzZSBcIjIwMjEgUTFcIjpcclxuXHRcdFx0XHR5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xyXG5cdFx0XHRcdHJldHVybiB5ZWFyICsgXCIgXCIgKyBcIlFcIiArIHF1YXJ0ZXI7XHJcblx0XHRcdGNhc2UgXCIyMSBRMVwiOlxyXG5cdFx0XHRcdHllYXIgPSAoZGF0ZSBhcyBhbnkpLmdldFllYXIoKSAtIDEwMDtcclxuXHRcdFx0XHRyZXR1cm4geWVhciArIFwiIFwiICsgXCJRXCIgKyBxdWFydGVyO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y3VzdG9taXNlQ2VsbChhcmdzOiBRdWVyeUNlbGxJbmZvRXZlbnRBcmdzKSB7XHJcblx0XHRpZiAoYXJncy5jb2x1bW4udHlwZSA9PT0gXCJkYXRlXCIgfHwgYXJncy5jb2x1bW4udHlwZSA9PT0gXCJkYXRlVGltZVwiKSB7XHJcblx0XHRcdGNvbnN0IHsgZmllbGQgfSA9IGFyZ3MuY29sdW1uO1xyXG5cdFx0XHRpZiAoIWFyZ3MuZGF0YVtmaWVsZF0pIHtcclxuXHRcdFx0XHRhcmdzLmNvbHVtbi50eXBlID0gXCJzdHJpbmdcIjtcclxuXHRcdFx0XHRhcmdzLmNvbHVtbi5mb3JtYXQgPSBcIlwiO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcGFyYW0gdGltZUFycmF5IOaVsOe7hOWvueixoSBbe1wiZGF0ZVwiOlwiMjAyMS0wMS0wMVwifSx7XCJkYXRlXCI6XCIyMDIxLTAyLTAxXCJ9XVxyXG5cdCAqIEBwYXJhbSBlbmREYXRlIOaIquiHs+aXtumXtFxyXG5cdCAqIEBwYXJhbSBpbnRlcnZhbCDml7bpl7Tpl7TpmpQgeWVhciAvIHF1YXJ0ZXIgLyBtb250aFxyXG5cdCAqIEBwYXJhbSB0aW1lS2V5IOaXtumXtOWtl+auteWQjSBkYXRlXHJcblx0ICogQHJldHVybnMg5YiS5YiG5ZCO55qE5pe26Ze05YiG57uE5a+56LGhXHJcblx0ICovXHJcblx0Z2V0VGltZVJhbmdlcyh0aW1lQXJyYXksIGVuZERhdGUsIGludGVydmFsLCB0aW1lS2V5KSB7XHJcblx0XHQvLyDlsIbml7bpl7TlrZfnrKbkuLLovazmjaLkuLogbW9tZW50IOWvueixoVxyXG5cdFx0Y29uc3QgZGF0ZXMgPSB0aW1lQXJyYXkubWFwKChpdGVtKSA9PiBtb21lbnQoaXRlbVt0aW1lS2V5IHx8IFwiZGF0ZVwiXSkpO1xyXG5cclxuXHRcdC8vIOWIhumalOesplxyXG5cdFx0Y29uc3QgZGVsaW1pdGVyID0gXCItXCI7XHJcblxyXG5cdFx0Ly8g5om+5Yiw5pyA5bCP5pe26Ze05ZKM5pyA5aSn5pe26Ze0XHJcblx0XHRjb25zdCBtaW5EYXRlID0gbW9tZW50Lm1pbihkYXRlcyk7XHJcblx0XHRjb25zdCBtYXhEYXRlID0gbW9tZW50KGVuZERhdGUpO1xyXG5cclxuXHRcdC8vIOWIneWni+WMlue7k+aenOWvueixoVxyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Ly8g5qC55o2u5YWl5Y+C6L+b6KGM5YiS5YiGXHJcblx0XHRpZiAoaW50ZXJ2YWwgPT09IFwieWVhclwiKSB7XHJcblx0XHRcdGNvbnN0IHN0YXJ0WWVhciA9IG1pbkRhdGUueWVhcigpO1xyXG5cdFx0XHRjb25zdCBlbmRZZWFyID0gbWF4RGF0ZS55ZWFyKCk7XHJcblxyXG5cdFx0XHRmb3IgKGxldCB5ZWFyID0gc3RhcnRZZWFyOyB5ZWFyIDw9IGVuZFllYXI7IHllYXIrKykge1xyXG5cdFx0XHRcdHJlc3VsdFt5ZWFyXSA9IFtdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRkYXRlcy5mb3JFYWNoKChkYXRlLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHllYXIgPSBkYXRlLnllYXIoKTtcclxuXHRcdFx0XHRyZXN1bHRbeWVhcl0ucHVzaCh0aW1lQXJyYXlbaW5kZXhdKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9IGVsc2UgaWYgKGludGVydmFsID09PSBcInF1YXJ0ZXJcIikge1xyXG5cdFx0XHQvLyDlrZjlgqjlraPluqblrZfnrKbkuLJcclxuXHRcdFx0Y29uc3QgcXVhcnRlcnMgPSBbXTtcclxuXHJcblx0XHRcdC8vIOmAkOS4gOmBjeWOhuavj+S4quWto+W6plxyXG5cdFx0XHRmb3IgKFxyXG5cdFx0XHRcdGxldCBjdXJyZW50RGF0ZSA9IG1pbkRhdGUuY2xvbmUoKTtcclxuXHRcdFx0XHRjdXJyZW50RGF0ZS5pc1NhbWVPckJlZm9yZShtYXhEYXRlKTtcclxuXHRcdFx0XHRjdXJyZW50RGF0ZS5hZGQoMywgXCJtb250aHNcIilcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0Y29uc3QgeWVhciA9IGN1cnJlbnREYXRlLnllYXIoKTtcclxuXHRcdFx0XHRjb25zdCBxdWFydGVyID0gTWF0aC5jZWlsKChjdXJyZW50RGF0ZS5tb250aCgpICsgMSkgLyAzKTsgLy8g6K6h566X5a2j5bqmXHJcblx0XHRcdFx0cXVhcnRlcnMucHVzaChgJHt5ZWFyfSR7ZGVsaW1pdGVyfVEke3F1YXJ0ZXJ9YCk7IC8vIOagvOW8j+WMluW5tua3u+WKoOWIsOaVsOe7hFxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyDovpPlh7rmiYDmnInlraPluqZcclxuXHRcdFx0cXVhcnRlcnMuZm9yRWFjaCgocXVhcnRlciwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRyZXN1bHRbcXVhcnRlcl0gPSBbXTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRkYXRlcy5mb3JFYWNoKChkYXRlLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHllYXIgPSBkYXRlLnllYXIoKTtcclxuXHRcdFx0XHRjb25zdCBxdWFydGVyID0gZGF0ZS5xdWFydGVyKCk7IC8vIOiOt+WPluWto+W6plxyXG5cdFx0XHRcdGlmIChxdWFydGVyID09PSAxKVxyXG5cdFx0XHRcdFx0cmVzdWx0W3llYXIgKyBkZWxpbWl0ZXIgKyBcIlExXCJdLnB1c2godGltZUFycmF5W2luZGV4XSk7XHJcblx0XHRcdFx0ZWxzZSBpZiAocXVhcnRlciA9PT0gMilcclxuXHRcdFx0XHRcdHJlc3VsdFt5ZWFyICsgZGVsaW1pdGVyICsgXCJRMlwiXS5wdXNoKHRpbWVBcnJheVtpbmRleF0pO1xyXG5cdFx0XHRcdGVsc2UgaWYgKHF1YXJ0ZXIgPT09IDMpXHJcblx0XHRcdFx0XHRyZXN1bHRbeWVhciArIGRlbGltaXRlciArIFwiUTNcIl0ucHVzaCh0aW1lQXJyYXlbaW5kZXhdKTtcclxuXHRcdFx0XHRlbHNlIGlmIChxdWFydGVyID09PSA0KVxyXG5cdFx0XHRcdFx0cmVzdWx0W3llYXIgKyBkZWxpbWl0ZXIgKyBcIlE0XCJdLnB1c2godGltZUFycmF5W2luZGV4XSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIGlmIChpbnRlcnZhbCA9PT0gXCJtb250aFwiKSB7XHJcblx0XHRcdC8vIOWtmOWCqOaciOS7veWtl+espuS4slxyXG5cdFx0XHRjb25zdCBtb250aHMgPSBbXTtcclxuXHJcblx0XHRcdC8vIOmAkOS4gOmBjeWOhuavj+S4quaciFxyXG5cdFx0XHRmb3IgKFxyXG5cdFx0XHRcdGxldCBjdXJyZW50RGF0ZSA9IG1pbkRhdGUuY2xvbmUoKTtcclxuXHRcdFx0XHRjdXJyZW50RGF0ZS5pc1NhbWVPckJlZm9yZShtYXhEYXRlKTtcclxuXHRcdFx0XHRjdXJyZW50RGF0ZS5hZGQoMSwgXCJtb250aHNcIilcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0bW9udGhzLnB1c2goY3VycmVudERhdGUuZm9ybWF0KGBZWVlZJHtkZWxpbWl0ZXJ9TU1gKSk7IC8vIOagvOW8j+WMluW5tua3u+WKoOWIsOaVsOe7hFxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyDovpPlh7rmiYDmnInmnIjku71cclxuXHRcdFx0bW9udGhzLmZvckVhY2goKG1vbnRoLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdHJlc3VsdFttb250aF0gPSBbXTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRkYXRlcy5mb3JFYWNoKChkYXRlLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHllYXIgPSBkYXRlLnllYXIoKTtcclxuXHRcdFx0XHRjb25zdCBtb250aCA9IChkYXRlLm1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKTsgLy8gMC0xMVxyXG5cdFx0XHRcdHJlc3VsdFt5ZWFyICsgZGVsaW1pdGVyICsgbW9udGhdLnB1c2godGltZUFycmF5W2luZGV4XSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiDorqHnrpflh6DkvZXnrpfmlbDlubPmlrnmm7RcclxuXHQgKiBAcGFyYW0gdmFsdWVzIOaVsOe7hCBbMCwgMCwgMC4yNTc1XVxyXG5cdCAqIEByZXR1cm5zXHJcblx0ICovXHJcblx0Y2FsY3VsYXRlR3Jvd3RoUmF0ZSh2YWx1ZXMpIHtcclxuXHRcdGNvbnN0IHByb2R1Y3QgPSB2YWx1ZXMucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjICogKDEgKyB2YWwpLCAxKTtcclxuXHRcdGlmIChwcm9kdWN0ID49IDApIHtcclxuXHRcdFx0cmV0dXJuIE1hdGgucG93KHByb2R1Y3QsIDEgLyB2YWx1ZXMubGVuZ3RoKSAtIDE7XHJcblx0XHR9IGVsc2UgaWYgKHByb2R1Y3QgPCAwKSB7XHJcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoICUgMiA9PSAwKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMubnRocm9vdChwcm9kdWN0LCB2YWx1ZXMubGVuZ3RoKSAtIDE7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0bnRocm9vdCh4LCBuKSB7XHJcblx0XHRsZXQgbmcgPSBuICUgMjtcclxuXHRcdGlmIChuZyA9PSAxIHx8IHggPCAwKSB4ID0gLXg7XHJcblx0XHR2YXIgciA9IE1hdGgucG93KHgsIDEgLyBuKTtcclxuXHRcdG4gPSBNYXRoLnBvdyhyLCBuKTtcclxuXHJcblx0XHRpZiAoTWF0aC5hYnMoeCAtIG4pIDwgMSAmJiB4ID4gMCA9PT0gbiA+IDApIHJldHVybiBuZyA/IC1yIDogcjtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIOagh+WHhuWBj+W3rlxyXG5cdCAqIEBwYXJhbSB2YWx1ZXMg5pWw57uEIFswLCAwLCAtMC40Nzc1XVxyXG5cdCAqIEByZXR1cm5zIDAuMjc1Njg0NzUzNTM4MDQ2M1xyXG5cdCAqL1xyXG5cdGNhbGN1bGF0ZVN0YW5kYXJkRGV2aWF0aW9uKHZhbHVlcykge1xyXG5cdFx0Y29uc3QgbiA9IHZhbHVlcy5sZW5ndGg7XHJcblxyXG5cdFx0Ly8g5qOA5p+l5pWw5o2u54K55pWw6YePXHJcblx0XHRpZiAobiA8IDIpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwi6Iez5bCR6ZyA6KaB5Lik5Liq5pWw5o2u54K55p2l6K6h566X5qC35pys5qCH5YeG5YGP5beuXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIOiuoeeul+Wdh+WAvFxyXG5cdFx0Y29uc3QgbWVhbiA9IHZhbHVlcy5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKyB2YWwsIDApIC8gbjtcclxuXHJcblx0XHQvLyDorqHnrpfmlrnlt65cclxuXHRcdGNvbnN0IHZhcmlhbmNlID1cclxuXHRcdFx0dmFsdWVzLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyArIE1hdGgucG93KHZhbCAtIG1lYW4sIDIpLCAwKSAvXHJcblx0XHRcdChuIC0gMSk7XHJcblxyXG5cdFx0Ly8g6L+U5Zue5qCH5YeG5YGP5beuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KHZhcmlhbmNlKTtcclxuXHR9XHJcbn1cclxuIl19
4444
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3JhaXNlLWNvbW1vbi1saWIvIiwic291cmNlcyI6WyJsaWIvZGFzaGJvYXJkL2dhZGdldC1ncm91cC9nYWRnZXQtcGl2b3QvZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQ04saUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxFQUNULHVCQUF1QixFQUN2QixNQUFNLEVBQ04sUUFBUSxHQUNSLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFFTix1QkFBdUIsRUFDdkIsa0JBQWtCLEVBR2xCLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUV0QixrQkFBa0IsRUFHbEIsb0JBQW9CLEVBSXBCLG1CQUFtQixHQUduQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFDTixJQUFJLEVBQ0osWUFBWSxFQUNaLE9BQU8sR0FDUCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFDTixNQUFNLEVBQ04sY0FBYyxFQUNkLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sSUFBSSxPQUFPLEVBQ2pCLEtBQUssRUFDTCxLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sR0FDTixNQUFNLFFBQVEsQ0FBQztBQUNoQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQ04sb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQix1QkFBdUIsR0FDdkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FB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SUFDL0IsOENBQXNDOztJQUN0QywrQ0FFRTs7Ozs7SUFDRiwyQ0FBeUI7Ozs7O0lBQ3pCLDRDQUEwQjs7Ozs7SUFDMUIsNkNBU0U7O0lBQ0YsNENBRUU7O0lBQ0YsbURBTUU7Ozs7O0lBQ0YsMkNBQXlCOzs7OztJQUN6QixzREFBMkM7Ozs7O0lBQzNDLHVEQUE0Qzs7Ozs7SUFDNUMsOENBR0U7Ozs7O0lBQ0YsNkNBQTJCOzs7OztJQUMzQiw2Q0FBMkI7O0lBQzNCLDhDQUFzQjs7SUFDdEIsMENBQW1DOztJQUNuQywyQ0FBd0I7Ozs7O0lBQ3hCLGdEQUE4Qjs7SUFDOUIsMkNBQW1COztJQXUvQ25CLDhDQUFvQjs7Ozs7SUFwL0NuQix1REFBd0Q7Ozs7O0lBQ3hELGdEQUEwQzs7Ozs7SUFDMUMsbUNBQThCOzs7OztJQUM5QixtQ0FBK0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG5cdENoYW5nZURldGVjdG9yUmVmLFxyXG5cdENvbXBvbmVudCxcclxuXHRJbnB1dCxcclxuXHRPbkluaXQsXHJcblx0Vmlld0NoaWxkLFxyXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG5cdEluamVjdCxcclxuXHRPcHRpb25hbCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHtcclxuXHRJRGF0YU9wdGlvbnMsXHJcblx0UGl2b3RGaWVsZExpc3RDb21wb25lbnQsXHJcblx0UGl2b3RWaWV3Q29tcG9uZW50LFxyXG5cdEVuZ2luZVBvcHVsYXRlZEV2ZW50QXJncyxcclxuXHRJRGF0YVNldCxcclxuXHRUb29sYmFyU2VydmljZSxcclxuXHRGaWVsZExpc3RTZXJ2aWNlLFxyXG5cdE51bWJlckZvcm1hdHRpbmdTZXJ2aWNlLFxyXG5cdENhbGN1bGF0ZWRGaWVsZFNlcnZpY2UsXHJcblx0Q2FsY3VsYXRlZEZpZWxkQ3JlYXRlRXZlbnRBcmdzLFxyXG5cdEdyb3VwaW5nQmFyU2VydmljZSxcclxuXHRGaWVsZERyb3BFdmVudEFyZ3MsXHJcblx0SVNvcnQsXHJcblx0VmlydHVhbFNjcm9sbFNlcnZpY2UsXHJcblx0SVBpdm90VmFsdWVzLFxyXG5cdElQYWdlU2V0dGluZ3MsXHJcblx0RHJpbGxUaHJvdWdoRXZlbnRBcmdzLFxyXG5cdERyaWxsVGhyb3VnaFNlcnZpY2UsXHJcblx0UGl2b3RBY3Rpb25GYWlsdXJlRXZlbnRBcmdzLFxyXG5cdFF1ZXJ5Q2VsbEluZm9FdmVudEFyZ3MsXHJcbn0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLXBpdm90dmlld1wiO1xyXG5pbXBvcnQge1xyXG5cdEwxMG4sXHJcblx0ZW5hYmxlUmlwcGxlLFxyXG5cdEJyb3dzZXIsXHJcbn0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1iYXNlXCI7XHJcbmltcG9ydCB7IEdyaWRTZXR0aW5ncyB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItcGl2b3R2aWV3L3NyYy9waXZvdHZpZXcvbW9kZWwvZ3JpZHNldHRpbmdzXCI7XHJcbmltcG9ydCB7XHJcblx0c29ydEJ5LFxyXG5cdGRpZmZlcmVuY2VXaXRoLFxyXG5cdHN0YXJ0c1dpdGgsXHJcblx0Y2xvbmVEZWVwLFxyXG5cdHVuaXFCeSxcclxuXHRmaWx0ZXIgYXMgX2ZpbHRlcixcclxuXHRtYXhCeSxcclxuXHRtaW5CeSxcclxuXHRzdW1CeSxcclxuXHRtZWFuQnksXHJcbn0gZnJvbSBcImxvZGFzaFwiO1xyXG5pbXBvcnQgeyBEYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2Rhc2hib2FyZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7XHJcblx0QUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0QUxMX0FHR1JFR0FURV9UWVBFUyxcclxuXHREYXNoYm9hcmRQb3JsZXRzU2VydmljZSxcclxufSBmcm9tIFwiLi4vLi4vZGFzaGJvYXJkUG9ybGV0cy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IE1hc2tlZFRleHRCb3ggfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWlucHV0cy9zcmMvbWFza2VkdGV4dGJveC9tYXNrZWR0ZXh0Ym94XCI7XHJcbmltcG9ydCB7IERhdGFNYW5hZ2VyIH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1kYXRhL3NyYy9tYW5hZ2VyXCI7XHJcbmltcG9ydCB7IFByZWRpY2F0ZSwgUXVlcnkgfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWRhdGEvc3JjL3F1ZXJ5XCI7XHJcbmltcG9ydCB7IERhdGFVdGlsIH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1kYXRhXCI7XHJcbmltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xyXG5pbXBvcnQgeyBQQkZfVE9LRU4gfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZS9JbmplY3Rpb25Ub2tlblwiO1xyXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy91dGlsc1wiO1xyXG5cclxuZW5hYmxlUmlwcGxlKGZhbHNlKTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiBcInJzLWdhZGdldC1waXZvdFwiLFxyXG5cdHRlbXBsYXRlVXJsOiBcIi4vZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC5odG1sXCIsXHJcblx0c3R5bGVVcmxzOiBbXCIuL2dhZGdldC1waXZvdC5jb21wb25lbnQuc2Nzc1wiXSxcclxuXHRwcm92aWRlcnM6IFtcclxuXHRcdFRvb2xiYXJTZXJ2aWNlLFxyXG5cdFx0RmllbGRMaXN0U2VydmljZSxcclxuXHRcdE51bWJlckZvcm1hdHRpbmdTZXJ2aWNlLFxyXG5cdFx0Q2FsY3VsYXRlZEZpZWxkU2VydmljZSxcclxuXHRcdEdyb3VwaW5nQmFyU2VydmljZSxcclxuXHRcdFZpcnR1YWxTY3JvbGxTZXJ2aWNlLFxyXG5cdFx0RHJpbGxUaHJvdWdoU2VydmljZSxcclxuXHRdLFxyXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2FkZ2V0UGl2b3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cdEBJbnB1dCgpIHBvcnRsZXQ7XHJcblx0QElucHV0KCkgZGFzaGJvYXJkO1xyXG5cdEBJbnB1dCgpIHBvcnRsZXRzO1xyXG5cdHByaXZhdGUgUGl2b3RfRGF0YTogSURhdGFTZXRbXTtcclxuXHRwcml2YXRlIGNvbmZpZztcclxuXHRwdWJsaWMgZGF0YVNvdXJjZVNldHRpbmdzOiBJRGF0YU9wdGlvbnM7XHJcblx0cHVibGljIGdyaWRTZXR0aW5nczogR3JpZFNldHRpbmdzO1xyXG5cdHByaXZhdGUgZXhjbHVkZUZpZWxkcyA9IFtdO1xyXG5cdHByaXZhdGUgZmlsdGVyU2V0dGluZ3MgPSBbXTtcclxuXHRwcml2YXRlIGRhdGVQaXBlRm9ybWF0O1xyXG5cdHB1YmxpYyB0cmFuc2xhdGlvbjtcclxuXHRAVmlld0NoaWxkKFwicGl2b3R2aWV3XCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG5cdHByaXZhdGUgcGl2b3RPYmo6IFBpdm90Vmlld0NvbXBvbmVudDtcclxuXHRAVmlld0NoaWxkKFwicGl2b3RmaWVsZGxpc3RcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcblx0cHVibGljIGZpZWxkbGlzdE9iajogUGl2b3RGaWVsZExpc3RDb21wb25lbnQ7XHJcblx0cHJpdmF0ZSBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcclxuXHRwcml2YXRlIGdyYW5kVG90YWxzID0ge307XHJcblx0cHJpdmF0ZSBzdWJUb3RhbHMgPSB7fTtcclxuXHRwcml2YXRlIGZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRwcml2YXRlIHByZXZpb3VzU29ydDogSVNvcnQ7XHJcblx0cHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cdHByaXZhdGUgYWxsRGF0YVZhbHVlO1xyXG5cdC8vIHByaXZhdGUgY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3M7XHJcblx0cHJpdmF0ZSBpc0luaXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cdHByaXZhdGUgcGl2b3RTZWFyY2hCb3g6IE1hc2tlZFRleHRCb3g7XHJcblx0cHVibGljIHRvb2x0aXBTZXR0aW5ncyA9IHtcclxuXHRcdGVuYWJsZTogZmFsc2UsXHJcblx0fTtcclxuXHRwcml2YXRlIGNvbHVtblRleHRzID0gW107XHJcblx0cHJpdmF0ZSBjb25maWdGaWVsZHMgPSBbXTtcclxuXHRwcml2YXRlIHF1YXJ0ZXJGb3JtYXQgPSBbXHJcblx0XHR7IHZhbHVlOiBcIjAzLzIwMjFcIiwgZm9ybWF0OiBcIk1NL3l5eXlcIiB9LFxyXG5cdFx0eyB2YWx1ZTogXCIwMy8yMVwiLCBmb3JtYXQ6IFwiTU0vZGRcIiB9LFxyXG5cdFx0eyB2YWx1ZTogXCIzLzIwMjFcIiwgZm9ybWF0OiBcIk0veXl5eVwiIH0sXHJcblx0XHR7IHZhbHVlOiBcIjMvMjFcIiwgZm9ybWF0OiBcIk0veXlcIiB9LFxyXG5cdFx0eyB2YWx1ZTogXCJNYXJjaCAyMDIxXCIsIGZvcm1hdDogXCJNTU1NIHl5eXlcIiB9LFxyXG5cdFx0eyB2YWx1ZTogXCJNYXIsIDIwMjFcIiwgZm9ybWF0OiBcIk1NTSwgeXl5eVwiIH0sXHJcblx0XHR7IHZhbHVlOiBcIk1hcmNoLCAyMDIxXCIsIGZvcm1hdDogXCJNTU1NLCB5eXl5XCIgfSxcclxuXHRcdHsgdmFsdWU6IFwiMjAyMVwiLCBmb3JtYXQ6IFwieXl5eVwiIH0sXHJcblx0XTtcclxuXHR6b29tU2V0dGluZ3MgPSB7XHJcblx0XHRlbmFibGU6IGZhbHNlLFxyXG5cdH07XHJcblx0aXRlbURhdGFUeXBlU29ydEFyciA9IFtcclxuXHRcdFwiQXNzZXRzXCIsXHJcblx0XHRcIkxpYWJpbGl0aWVzXCIsXHJcblx0XHRcIkVxdWl0eVwiLFxyXG5cdFx0XCJQJkxcIixcclxuXHRcdFwiQ2FzaGZsb3dcIixcclxuXHRdO1xyXG5cdHByaXZhdGUgZm9ybWF0RGF0ZXMgPSBbXTtcclxuXHRwcml2YXRlIGN1c3RvbUNhbGN1bGF0ZWRGaWVsZHM6IGFueVtdID0gW107IC8vIOiHquWumuS5ieiuoeeul+WIl1xyXG5cdHByaXZhdGUgYWxsb3dlZENhbGN1bGF0ZWRGaWVsZHM6IGFueVtdID0gW107IC8vIOWFgeiuuOiHquWumuS5ieeul+azleeahOWtl+autVxyXG5cdHByaXZhdGUgemVyb0Zvcm1hdERhdGEgPSB7XHJcblx0XHRlbXB0eUxpc3Q6IFtdLFxyXG5cdFx0aGdMaXN0OiBbXSxcclxuXHR9O1xyXG5cdHByaXZhdGUgbWlsbGlvbkZpZWxkcyA9IFtdO1xyXG5cdHByaXZhdGUgdGVtcFN1YnRvdGFscyA9IFtdO1xyXG5cdHB1YmxpYyBvcmRlckJ5Q29sdW1uczsgLy8gRWc6IFwiRHVlRGF0ZSwgU2VxdWVuY2VcIlxyXG5cdHB1YmxpYyBpc0FwcGx5SVJSOiBib29sZWFuID0gZmFsc2U7XHJcblx0cHVibGljIGNhbGNJUlJEYXRhOiBhbnk7XHJcblx0cHJpdmF0ZSBwZXJjZW50TnVtRmllbGRzID0gW107XHJcblx0cHVibGljIHBhZ2VMb2FkaW5nO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2U6IERhc2hib2FyZFBvcmxldHNTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBkYXNoYm9hcmRTZXJ2aWNlOiBEYXNoYm9hcmRTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG5cdFx0QE9wdGlvbmFsKCkgQEluamVjdChQQkZfVE9LRU4pIHByaXZhdGUgcGJmOiBhbnksXHJcblxyXG5cdCkge31cclxuXHJcblx0bmdPbkluaXQoKSB7XHJcblx0XHR0aGlzLmdldEluZm8oKTtcclxuXHRcdEwxMG4ubG9hZCh7XHJcblx0XHRcdFwiZW4tVVNcIjoge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0XHR6aDoge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRcInpoLUhhbnQtSEtcIjoge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRqYToge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRrbzoge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRmcjoge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmdldERhdGEoKTtcclxuXHR9XHJcblxyXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0Y2hhbmdlUGl2b3QoKS5zdWJzY3JpYmUoKHVwZGF0ZWQpID0+IHtcclxuXHRcdFx0XHRpZiAodXBkYXRlZCA9PT0gdGhpcy5wb3J0bGV0Lm5ld0lkKSB7XHJcblx0XHRcdFx0XHR0aGlzLmdldERhdGEoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0U3RhcnRSZWZyZXNoKCkuc3Vic2NyaWJlKChkYXNoYm9hcmRJZCkgPT4ge1xyXG5cdFx0XHRcdGlmIChkYXNoYm9hcmRJZCA9PT0gdGhpcy5kYXNoYm9hcmQuaWQpIHtcclxuXHRcdFx0XHRcdHRoaXMucGFnZUxvYWRpbmcgPSB0cnVlO1xyXG5cdFx0XHRcdFx0dGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuXHRcdFx0dGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldFVwZGF0ZWQoKS5zdWJzY3JpYmUoKG5ld0lkKSA9PiB7XHJcblx0XHRcdFx0aWYgKG5ld0lkID09PSB0aGlzLnBvcnRsZXQubmV3SWQgfHwgbmV3SWQgPT09IHRoaXMucG9ydGxldC5pZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5nZXREYXRhKCk7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5waXZvdE9iaikgdGhpcy5waXZvdE9iai5yZWZyZXNoRGF0YSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRSZWZyZXNoR2FkZ2V0KCkuc3Vic2NyaWJlKChlKSA9PiB7XHJcblx0XHRcdFx0aWYgKCFlKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IGlkID0gZVtcIm5ld0lkXCJdO1xyXG5cdFx0XHRcdGlmIChpZCA9PT0gdGhpcy5wb3J0bGV0Lm5ld0lkIHx8IGlkID09PSB0aGlzLnBvcnRsZXQuaWQpIHtcclxuXHRcdFx0XHRcdHRoaXMucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuXHRcdFx0XHRcdHRoaXMuZ2V0RGF0YSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRUYWJsZUZvcm1hdCgpLnN1YnNjcmliZSgodXBkYXRlZCkgPT4ge1xyXG5cdFx0XHRcdGlmICh1cGRhdGVkID09PSB0aGlzLnBvcnRsZXQubmV3SWQpIHtcclxuXHRcdFx0XHRcdHRoaXMuZ2V0RGF0YSgpO1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMucGl2b3RPYmopIHRoaXMucGl2b3RPYmoucmVmcmVzaERhdGEoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFNlcnZpY2VcclxuXHRcdFx0XHQuY2xlYXJGaWVsZExpc3RPYnNlcnZhYmxlKClcclxuXHRcdFx0XHQuc3Vic2NyaWJlKCh1cGRhdGVkKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAodXBkYXRlZCA9PT0gdGhpcy5wb3J0bGV0Lm5ld0lkKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmRhdGFTb3VyY2UgPSBbXTtcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMucGl2b3RPYmopIHRoaXMucGl2b3RPYmoucmVmcmVzaERhdGEoKTtcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuZmllbGRsaXN0T2JqKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLnVwZGF0ZURhdGFTb3VyY2UoKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0KTtcclxuXHJcblx0XHQvLyB0aXRsZSBjaGFuZ2VcclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFNlcnZpY2UudXBkYXRlUG9ydGxldFRpdGxlKCkuc3Vic2NyaWJlKCh1cGRhdGVkKSA9PiB7XHJcblx0XHRcdFx0aWYgKHVwZGF0ZWQpIHtcclxuXHRcdFx0XHRcdHRoaXMuY29uZmlnID0gSlNPTi5wYXJzZSh0aGlzLnBvcnRsZXQuY29uZmlnKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XHJcblx0fVxyXG5cclxuXHRvbk1lbWJlckVkaXRvck9wZW4oYXJnczogYW55KTogdm9pZCB7XHJcblx0XHQvLyDkvaDlj6/ku6XlnKjov5nph4zmoLnmja7pnIDopoHkv67mlLlhcmdz5p2l6Ieq5a6a5LmJ6L+H5ruk56qX5Y+j55qE6KGM5Li6XHJcblx0XHQvLyAxMTI0NyDkuJPpl6jkuLppdGVtIGRhdGEgdHlwZeiAjOiuvue9rlxyXG5cdFx0aWYgKGFyZ3MuZmllbGROYW1lID09PSBcIkFjY291bnRUeXBlQ29kZVwiKSB7XHJcblx0XHRcdGxldCByZXMgPSBuZXcgQXJyYXkoNSkuZmlsbChudWxsKTtcclxuXHRcdFx0Y29uc3QgZmllbGRNZW1iZXJzID0gWy4uLmFyZ3MuZmllbGRNZW1iZXJzXTtcclxuXHJcblx0XHRcdGZvciAobGV0IGkgPSBmaWVsZE1lbWJlcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuXHRcdFx0XHRsZXQgaW5kZXggPSAtMTtcclxuXHRcdFx0XHRjb25zdCBpdGVtID0gdGhpcy5pdGVtRGF0YVR5cGVTb3J0QXJyLmZpbmQoKG5hbWUsIGluZCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGZpZWxkTWVtYmVyc1tpXS5hY3R1YWxUZXh0ID09PSBuYW1lKSB7XHJcblx0XHRcdFx0XHRcdGluZGV4ID0gaW5kO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmV0dXJuIGZpZWxkTWVtYmVyc1tpXS5hY3R1YWxUZXh0ID09PSBuYW1lO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdGlmICghaXRlbSkge1xyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IGZpbGxJdGVtID0gZmllbGRNZW1iZXJzLnNwbGljZShpLCAxKTtcclxuXHRcdFx0XHRyZXNbaW5kZXhdID0gZmlsbEl0ZW1bMF07XHJcblx0XHRcdH1cclxuXHRcdFx0cmVzID0gcmVzLmZpbHRlcigoaXRlbSkgPT4gaXRlbSkgfHwgW107XHJcblx0XHRcdGFyZ3MuZmllbGRNZW1iZXJzID0gWy4uLnJlcywgLi4uZmllbGRNZW1iZXJzXTtcclxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgZWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5lLW1lbWJlci1lZGl0b3ItZGlhbG9nXCIpO1xyXG5cdFx0XHRcdGlmIChlbGUpIHtcclxuXHRcdFx0XHRcdGVsZS5xdWVyeVNlbGVjdG9yKFwiLmUtZmlsdGVyLXNvcnRcIikuc2V0QXR0cmlidXRlKFxyXG5cdFx0XHRcdFx0XHRcInN0eWxlXCIsXHJcblx0XHRcdFx0XHRcdFwiZGlzcGxheTogbm9uZVwiXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNldEdyaWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuZ3JpZFNldHRpbmdzID0ge1xyXG5cdFx0XHRjb2x1bW5XaWR0aDogMTQwLFxyXG5cdFx0XHRyb3dIZWlnaHQ6IDQwLFxyXG5cdFx0XHRhbGxvd1NlbGVjdGlvbjogdHJ1ZSxcclxuXHRcdFx0c2VsZWN0aW9uU2V0dGluZ3M6IHtcclxuXHRcdFx0XHRtb2RlOiBcIkNlbGxcIixcclxuXHRcdFx0XHR0eXBlOiBcIk11bHRpcGxlXCIsXHJcblx0XHRcdFx0Y2VsbFNlbGVjdGlvbk1vZGU6IFwiQm94XCIsXHJcblx0XHRcdH0sXHJcblx0XHRcdGNvbHVtblJlbmRlcjogdGhpcy5vYnNlcnZhYmxlLnN1YnNjcmliZSgoYXJncykgPT4ge1xyXG5cdFx0XHRcdHRoaXMuc2V0Q29sdW1uc1JlbmRlcihhcmdzKTtcclxuXHRcdFx0fSkgYXMgYW55LFxyXG5cdFx0XHQvLyDljYfnuqflkI4g6buY6K6k5Lya5pyJ5a+85Ye65qC35byP6KaG55uW77yM6ZyA6KaB5omL5Yqo6K6+572u5a+85Ye65qCH6aKY5qC35byPXHJcblx0XHRcdGV4Y2VsSGVhZGVyUXVlcnlDZWxsSW5mbzogdGhpcy5vYnNlcnZhYmxlLnN1YnNjcmliZSgoYXJnczogYW55KSA9PiB7XHJcblx0XHRcdFx0Ly8gYXJncy5zdHlsZeaYr+S4qkV4Y2VsU3R5bGXnsbvlnotcclxuXHRcdFx0XHRhcmdzLnN0eWxlID0ge1xyXG5cdFx0XHRcdFx0Ym9sZDogdHJ1ZSwgLy8g5a2X5L2T5Yqg57KXXHJcblx0XHRcdFx0XHR2QWxpZ246IFwiQ2VudGVyXCIsXHJcblx0XHRcdFx0XHR3cmFwVGV4dDogZmFsc2UsIC8vIOS4jeaNouihjFxyXG5cdFx0XHRcdFx0aW5kZW50OiAwLFxyXG5cdFx0XHRcdFx0Ym9yZGVyczogbnVsbCwgLy8g5LiN6ZyA6KaBYm9yZGVyXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fSkgYXMgYW55LFxyXG5cdFx0XHQvLyDljYfnuqflkI4g6buY6K6k5Lya5pyJ5a+85Ye65qC35byP6KaG55uW77yM6ZyA6KaB5omL5Yqo6K6+572u5a+85Ye65YaF5a655qC35byPXHJcblx0XHRcdGV4Y2VsUXVlcnlDZWxsSW5mbzogdGhpcy5vYnNlcnZhYmxlLnN1YnNjcmliZSgoYXJnczogYW55KSA9PiB7XHJcblx0XHRcdFx0Ly8gI2Y0ODZjZmZmIOi/memHjOi+k+WHuueahOaYr1JHQkEg6aKc6Imy5qC85byP77yMIHhsc3jph4zkuI3pnIDopoHpgI/mmI7luqYs5Y675o6J5bC+6YOoZmZcclxuXHRcdFx0XHRpZiAoYXJncy5zdHlsZSAmJiBhcmdzLnN0eWxlLmJhY2tDb2xvcikge1xyXG5cdFx0XHRcdFx0YXJncy5zdHlsZS5iYWNrQ29sb3IgPSBhcmdzLnN0eWxlLmJhY2tDb2xvci5zdWJzdHJpbmcoMCwgNyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGxldCBfc3R5bGU6IGFueSA9IHtcclxuXHRcdFx0XHRcdGJvbGQ6IGZhbHNlLFxyXG5cdFx0XHRcdFx0d3JhcFRleHQ6IGZhbHNlLFxyXG5cdFx0XHRcdFx0Ym9yZGVyczogbnVsbCxcclxuXHRcdFx0XHRcdGZvbnRDb2xvcjogYXJncy5zdHlsZS5mb250Q29sb3IsXHJcblx0XHRcdFx0XHRiYWNrQ29sb3I6IGFyZ3Muc3R5bGUuYmFja0NvbG9yLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0bGV0IGNvbEluZGV4ID0gYXJncy5jZWxsLmNvbEluZGV4O1xyXG5cdFx0XHRcdGxldCByb3dJbmRleCA9IGFyZ3MuY2VsbC5yb3dJbmRleDtcclxuXHRcdFx0XHRpZiAodGhpcy5jb25maWcuc2hvd0dyYW5kVG90YWxzKSB7XHJcblx0XHRcdFx0XHQvLyBHcmFuZFRvdGFs5LiN6ZyA6KaB6aKc6ImyXHJcblx0XHRcdFx0XHRpZiAoYXJncy5kYXRhLmxlbmd0aCA9PT0gcm93SW5kZXggKyAxKSB7XHJcblx0XHRcdFx0XHRcdGRlbGV0ZSBfc3R5bGUuZm9udENvbG9yO1xyXG5cdFx0XHRcdFx0XHRkZWxldGUgX3N0eWxlLmJhY2tDb2xvcjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGFyZ3MuZGF0YVtyb3dJbmRleF1bY29sSW5kZXhdLmZvcm1hdHRlZFRleHQgPT0gXCJcIikge1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGFyZ3Muc3R5bGUgPSBPYmplY3QuYXNzaWduKGFyZ3Muc3R5bGUsIF9zdHlsZSk7XHJcblx0XHRcdFx0aWYgKGFyZ3MudmFsdWUgPT09IFwiXCIgJiYgYXJncy5zdHlsZS5udW1iZXJGb3JtYXQpIHtcclxuXHRcdFx0XHRcdGFyZ3Muc3R5bGUubnVtYmVyRm9ybWF0ID0gbnVsbDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKHRoaXMuZm9ybWF0RGF0ZXMgJiYgdGhpcy5mb3JtYXREYXRlcy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdGxldCBkYXRlRmllbGRzID0gdGhpcy5mb3JtYXREYXRlcy5tYXAoKGVsKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBlbC5uYW1lO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdChhcmdzIGFzIGFueSkudmFsdWUgJiZcclxuXHRcdFx0XHRcdFx0KChhcmdzIGFzIGFueSkuY2VsbC5jb2xJbmRleCA9PT0gMFxyXG5cdFx0XHRcdFx0XHRcdD8gZGF0ZUZpZWxkcy5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0KGFyZ3MgYXMgYW55KS5jZWxsLnZhbHVlU29ydC5heGlzXHJcblx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0OiBkYXRlRmllbGRzLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQoYXJncyBhcyBhbnkpLmNlbGwuYWN0dWFsVGV4dFxyXG5cdFx0XHRcdFx0XHRcdCAgKSlcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHQvL0N1c3RvbWl6ZSB0aGUgUm93IGhlYWRlcnMvQ29sdW1uIGhlYWRlcnMgYmFzZWQgb24geW91ciBuZWVkc1xyXG5cdFx0XHRcdFx0XHRsZXQgaGVhZGVycztcclxuXHRcdFx0XHRcdFx0aWYgKChhcmdzIGFzIGFueSkuY2VsbC5jb2xJbmRleCA9PT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdGhlYWRlcnMgPSAoYXJncyBhcyBhbnkpLmNlbGwuYWN0dWFsVGV4dDtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBoZWFkZXJzID0gcGl2b3RWYWx1ZXNba11bal0uZm9ybWF0dGVkVGV4dDtcclxuXHRcdFx0XHRcdFx0XHRoZWFkZXJzID0gKGFyZ3MgYXMgYW55KS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAoaGVhZGVycykge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBkYXRlID0gbmV3IERhdGUoaGVhZGVycyk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGxldCBxdWFydGVyID0gTWF0aC5mbG9vcihkYXRlLmdldE1vbnRoKCkgLyAzKSArIDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGxldCBmb3JtYXQ7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZm9ybWF0RGF0ZXMubWFwKChlbCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKChhcmdzIGFzIGFueSkuY2VsbC5jb2xJbmRleCA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5uYW1lID09XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KGFyZ3MgYXMgYW55KS5jZWxsLnZhbHVlU29ydC5heGlzXHJcblx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBlbC5mb3JtYXQ7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwubmFtZSA9PSAoYXJncyBhcyBhbnkpLmNlbGwuYWN0dWFsVGV4dFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gZWwuZm9ybWF0O1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdChhcmdzIGFzIGFueSkudmFsdWUgPSB0aGlzLmdldFF1YXJ0ZXJWYWx1ZShcclxuXHRcdFx0XHRcdFx0XHRcdGZvcm1hdCxcclxuXHRcdFx0XHRcdFx0XHRcdGRhdGUsXHJcblx0XHRcdFx0XHRcdFx0XHRxdWFydGVyXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSkgYXMgYW55LFxyXG5cdFx0fSBhcyBHcmlkU2V0dGluZ3M7XHJcblx0fVxyXG5cclxuXHRiZWZvcmVFeHBvcnQoZXhwb3J0RGF0YSkge1xyXG5cdFx0aWYgKGV4cG9ydERhdGEpIHtcclxuXHRcdFx0Y29uc3Qga2V5TWFwID0ge307XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZVNldHRpbmdzLmZvcm1hdFNldHRpbmdzLmZvckVhY2goKGRhdGEpID0+IHtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRkYXRhLmZvcm1hdCA9PT0gXCIjLCMjIywsLjA7KCMsIyMjLCwuMClcIiB8fFxyXG5cdFx0XHRcdFx0ZGF0YS5mb3JtYXQgPT09IFwiIywjIyMsLDsoIywjIyMsLClcIiB8fFxyXG5cdFx0XHRcdFx0ZGF0YS5mb3JtYXQgPT09IFwiIywjIyMsLC4wMDsoIywjIyMsLC4wMClcIlxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0a2V5TWFwW2RhdGEubmFtZV0gPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRleHBvcnREYXRhLmRhdGFDb2xsZWN0aW9ucyAmJlxyXG5cdFx0XHRcdGV4cG9ydERhdGEuZGF0YUNvbGxlY3Rpb25zLmxlbmd0aFxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRleHBvcnREYXRhLmRhdGFDb2xsZWN0aW9uc1swXS5mb3JFYWNoKChyb3cpID0+IHtcclxuXHRcdFx0XHRcdHJvdy5mb3JFYWNoKChjZWxsKSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmIChrZXlNYXBbY2VsbC5hY3R1YWxUZXh0XSkge1xyXG5cdFx0XHRcdFx0XHRcdGNlbGwudmFsdWUgPSBjZWxsLmFjdHVhbFZhbHVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0dHlwZW9mIGNlbGwudmFsdWUgPT09IFwib2JqZWN0XCIgJiZcclxuXHRcdFx0XHRcdFx0XHR0eXBlb2YgY2VsbC5mb3JtYXR0ZWRUZXh0ID09PSBcInN0cmluZ1wiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGNlbGwudmFsdWUgPSBjZWxsLmZvcm1hdHRlZFRleHQ7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGdldERhdGEoKSB7XHJcblx0XHR0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcblx0XHRsZXQgY29sdW1ucyA9IFtdO1xyXG5cdFx0bGV0IHZhbHVlcyA9IFtdO1xyXG5cdFx0bGV0IGZvcm1hdFNldHRpbmdzID0gW107XHJcblx0XHRsZXQgcm93cyA9IFtdO1xyXG5cdFx0bGV0IGZpZWxkTWFwcGluZyA9IFtdO1xyXG5cdFx0Ly8g5riF56m6Z3JhbmRUb3RhbHPlkoxzdWJUb3RhbHNcclxuXHRcdHRoaXMuZ3JhbmRUb3RhbHMgPSB7fTtcclxuXHRcdHRoaXMuc3ViVG90YWxzID0ge307XHJcblx0XHR0aGlzLmNvbmZpZyA9IEpTT04ucGFyc2UodGhpcy5wb3J0bGV0LmNvbmZpZyk7XHJcblx0XHR0aGlzLnNldEdyaWRTZXR0aW5ncygpO1xyXG5cdFx0aWYgKHRoaXMuY29uZmlnLmZpZWxkcykge1xyXG5cdFx0XHRpZiAodGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5hbGxGaWVsZHNPYmpbdGhpcy5wb3J0bGV0LmlkXSkge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnRmllbGRzID1cclxuXHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2Uuc2V0Q29uZmlnRmllbGRzKFxyXG5cdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmFsbEZpZWxkc09ialtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBvcnRsZXQuaWRcclxuXHRcdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRcdFx0dGhpcy5jb25maWcuZmllbGRzXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnRmllbGRzID0gWy4uLnRoaXMuY29uZmlnLmZpZWxkc107XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLlBpdm90X0RhdGEgPSB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmdldFJlc3VsdEJ5RGF0YVRhYmxlKFxyXG5cdFx0XHR0aGlzLnBvcnRsZXQsXHJcblx0XHRcdGZhbHNlLFxyXG5cdFx0XHRmYWxzZSxcclxuXHRcdFx0dGhpcy5kYXNoYm9hcmQuaWRcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5vcmRlckJ5Q29sdW1ucyA9IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0T3JkZXJCeUNvbHVtbnNOZXcoXHJcblx0XHRcdHRoaXMucG9ydGxldC5maWd1cmVDb2RlLFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLlBpdm90X0RhdGEgPSBEYXRhVXRpbC5wYXJzZS5wYXJzZUpzb24odGhpcy5QaXZvdF9EYXRhKTtcclxuXHRcdGlmICh0aGlzLlBpdm90X0RhdGEgJiYgdGhpcy5QaXZvdF9EYXRhLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0Ly8g56e76Zmk5YiX5ZCN5ZKM5pWw5o2ua2V55LiN5Yy56YWN55qE6aG5XHJcblx0XHRcdHRoaXMuZ2V0ZXhjbHVkZUZpZWxkcyh0aGlzLmNvbmZpZ0ZpZWxkcywgdGhpcy5QaXZvdF9EYXRhWzBdKTtcclxuXHRcdFx0aWYgKCF0aGlzLmFsbG93ZWRDYWxjdWxhdGVkRmllbGRzLmxlbmd0aCkge1xyXG5cdFx0XHRcdHRoaXMuYWxsb3dlZENhbGN1bGF0ZWRGaWVsZHMgPSBPYmplY3Qua2V5cyh0aGlzLlBpdm90X0RhdGFbMF0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IGl0ZW0gb2YgdGhpcy5jb25maWdGaWVsZHMpIHtcclxuXHRcdFx0XHQvLyDlrZfmrrXliIbnu4QgaHR0cHM6Ly9lajIuc3luY2Z1c2lvbi5jb20vYW5ndWxhci9kb2N1bWVudGF0aW9uL3Bpdm90dmlldy9maWVsZC1saXN0P3NlYXJjaD1maWVsZE1hcHBpbmcjZ3JvdXAtZmllbGRzLXVuZGVyLWRlc2lyZWQtZm9sZGVyLW5hbWVcclxuXHRcdFx0XHRmaWVsZE1hcHBpbmcucHVzaCh7XHJcblx0XHRcdFx0XHRuYW1lOiBpdGVtLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRjYXB0aW9uOiBpdGVtLmFkZHRpb25OYW1lXHJcblx0XHRcdFx0XHRcdD8gYCR7aXRlbS5sYW5nVmFsdWV9ICR7aXRlbS5hZGR0aW9uTmFtZX1gXHJcblx0XHRcdFx0XHRcdDogaXRlbS5sYW5nVmFsdWVcclxuXHRcdFx0XHRcdFx0PyBpdGVtLmxhbmdWYWx1ZVxyXG5cdFx0XHRcdFx0XHQ6IHRoaXMudHJhbnNsYXRpb25baXRlbS5sYW5nQ29kZV0gfHwgaXRlbS5sYW5nQ29kZSxcclxuXHJcblx0XHRcdFx0XHRkYXRhVHlwZTogaXRlbS5kYXRhVHlwZSxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuY29uZmlnRmllbGRzKSB7XHJcblx0XHRcdHRoaXMucGVyY2VudE51bUZpZWxkcyA9IFtdO1xyXG5cdFx0XHR0aGlzLmZvcm1hdERhdGVzID0gW107XHJcblx0XHRcdHRoaXMuemVyb0Zvcm1hdERhdGEuaGdMaXN0ID0gW107XHJcblx0XHRcdHRoaXMuemVyb0Zvcm1hdERhdGEuZW1wdHlMaXN0ID0gW107XHJcblx0XHRcdHRoaXMubWlsbGlvbkZpZWxkcyA9IFtdO1xyXG5cdFx0XHR0aGlzLmNvbmZpZ0ZpZWxkcy5tYXAoKGVsKSA9PiB7XHJcblx0XHRcdFx0Ly8gU01QMi0yNDg2ICYgcGVyY2VudE51beeahGZvcm1hdOmXrumimFxyXG5cdFx0XHRcdGlmIChlbC5kYXRhVHlwZSA9PSBcInBlcmNlbnROdW1cIikge1xyXG5cdFx0XHRcdFx0dGhpcy5wZXJjZW50TnVtRmllbGRzLnB1c2goZWwuY29sTmFtZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGVsLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWQgJiZcclxuXHRcdFx0XHRcdFsyLCA1LCA4LCAxMSwgMTQsIDE3XS5pbmNsdWRlcyhlbC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXQpXHJcblx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0dGhpcy56ZXJvRm9ybWF0RGF0YS5oZ0xpc3QucHVzaChlbC5jb2xOYW1lKTtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRlbC5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdGVsLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdGVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkICYmXHJcblx0XHRcdFx0XHRbMywgNiwgOSwgMTIsIDE1LCAxOF0uaW5jbHVkZXMoZWwuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0KVxyXG5cdFx0XHRcdClcclxuXHRcdFx0XHRcdHRoaXMuemVyb0Zvcm1hdERhdGEuZW1wdHlMaXN0LnB1c2goZWwuY29sTmFtZSk7XHJcblx0XHRcdFx0Ly8gIHBpdm90VGFibGVmb3JtYXRQZXJjZW50IOeZvuWIhuavlOS5n+aciTEwLDExLDEyIOS9huaYr+Wug+aYr+aYvuekujAuMDB455qE5qC85byP77yM5omA5Lul5b6X5o6S6ZmkXHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZWwuZGF0YVR5cGUgIT09IFwicGVyY2VudFwiICYmXHJcblx0XHRcdFx0XHRlbC5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdGVsLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdGVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkICYmXHJcblx0XHRcdFx0XHRbMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOF0uaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdGVsLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHRcdClcclxuXHRcdFx0XHRcdHRoaXMubWlsbGlvbkZpZWxkcy5wdXNoKGVsLmNvbE5hbWUpO1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGVsLmRhdGFUeXBlID09PSBcIm51bWJlclwiICYmXHJcblx0XHRcdFx0XHQoIWVsLmZvcm1hdCB8fFxyXG5cdFx0XHRcdFx0XHQoZWwuZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0ZWwuZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdCFlbC5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZCkpXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRjb25zdCBmb3JtYXREYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBlbC5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0XHQvL1NNUDItMzAyNiBhbmQgU01QMi0zMDU5XHJcblx0XHRcdFx0XHRcdGZvcm1hdDpcclxuXHRcdFx0XHRcdFx0XHRlbC5jb2xOYW1lICE9PSBcIlBvcnRJbnZTdGtcIiAmJlxyXG5cdFx0XHRcdFx0XHRcdGVsLmNvbE5hbWUgIT09IFwiUG9ydEZkSW52U3RrXCJcclxuXHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXROdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwuZHBcclxuXHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0OiBcIiMjMC4jIyMjIyMjMFwiLFxyXG5cdFx0XHRcdFx0XHR1c2VHcm91cGluZzogdHJ1ZSxcclxuXHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3MucHVzaChmb3JtYXREYXRhKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0KGVsLmRhdGFUeXBlID09PSBcInBlcmNlbnRcIiB8fFxyXG5cdFx0XHRcdFx0XHRlbC5kYXRhVHlwZSA9PT0gXCJwZXJjZW50TnVtXCIpICYmXHJcblx0XHRcdFx0XHQoIWVsLmZvcm1hdCB8fFxyXG5cdFx0XHRcdFx0XHQoZWwuZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0ZWwuZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdCFlbC5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZCkpXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRjb25zdCBmb3JtYXREYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBlbC5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0XHRmb3JtYXQ6IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRlbC5kcFxyXG5cdFx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnB1c2goZm9ybWF0RGF0YSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGVsLmRhdGFUeXBlID09PSBcIm11bHRpcGxlXCIgJiZcclxuXHRcdFx0XHRcdCghZWwuZm9ybWF0IHx8XHJcblx0XHRcdFx0XHRcdChlbC5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHRlbC5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0IWVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkKSlcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGZvcm1hdERhdGEgPSB7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGVsLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdGZvcm1hdDogdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXRNdWx0aXBsZShcclxuXHRcdFx0XHRcdFx0XHRlbC5kcFxyXG5cdFx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnB1c2goZm9ybWF0RGF0YSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChlbC5kYXRhVHlwZSA9PT0gXCJkYXRldGltZVwiIHx8IGVsLmRhdGFUeXBlID09PSBcImRhdGVcIikge1xyXG5cdFx0XHRcdFx0bGV0IGZvcm1hdCA9IFwiXCI7XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdGVsLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRlbC5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdGVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0aWYgKGVsLmZvcm1hdFswXS5kYXRlVHlwZSA9PSBcIlF1YXJ0ZXJcIikge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBmb3JtYXRfID0gZWwuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZm9ybWF0SW5mbyA9IHRoaXMucXVhcnRlckZvcm1hdC5maWx0ZXIoXHJcblx0XHRcdFx0XHRcdFx0XHQocXVyKSA9PiBxdXIudmFsdWUgPT0gZm9ybWF0X1xyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGZvcm1hdEluZm8ubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBmb3JtYXRJbmZvWzBdLmZvcm1hdDtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgZm9ybWF0RGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogZWwuY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0OiBmb3JtYXRfLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcImRhdGVcIixcclxuXHRcdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmZvcm1hdERhdGVzLnB1c2goZm9ybWF0RGF0YSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGVsLmZvcm1hdFswXS5kYXRlVHlwZSA9PSBcIkRhdGVcIikge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBmcm9tSWR4ID1cclxuXHRcdFx0XHRcdFx0XHRcdGVsLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdERpc3BsYXkuaW5kZXhPZihcIihcIik7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHRvSWR4ID1cclxuXHRcdFx0XHRcdFx0XHRcdGVsLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdERpc3BsYXkuaW5kZXhPZihcIilcIik7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGZvcm1hdF8gPVxyXG5cdFx0XHRcdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheS5zbGljZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZnJvbUlkeCArIDEsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRvSWR4XHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoZm9ybWF0Xykge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIkREL01NL1lZWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJkZC9NTS95eXl5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIkREL01NL1lZXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwiZGQvTU0veXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiTU0vREQvWVlZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcIk1NL2RkL3l5eXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiTU0vREQvWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJNTS9kZC95eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJZWVlZLU1NLUREXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwieXl5eS1NTS1kZFwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJZWS1NTS1ERFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcInl5LU1NLWRkXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIkRELU1NLVlZWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJkZC1NTS15eXl5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIkRELU1NLVlZXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwiZGQtTU0teXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiTU0tREQtWVlZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcIk1NLWRkLXl5eXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiTU0tREQtWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJNTS1kZC15eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJNTU0gREQsIFlZWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJNTU0gZGQsIHl5eXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiREQtTU1NLVlZWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJkZC1NTU0teXl5eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCFmb3JtYXQpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZm9ybWF0RGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0XHRuYW1lOiBlbC5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0XHRcdGZvcm1hdDogdGhpcy5kYXRlUGlwZUZvcm1hdCxcclxuXHRcdFx0XHRcdFx0XHR0eXBlOiBcImRhdGVcIixcclxuXHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3MucHVzaChmb3JtYXREYXRhKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGZvcm1hdERhdGEgPSB7XHJcblx0XHRcdFx0XHRcdFx0bmFtZTogZWwuY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXQ6IGZvcm1hdCxcclxuXHRcdFx0XHRcdFx0XHR0eXBlOiBcImRhdGVcIixcclxuXHRcdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnB1c2goZm9ybWF0RGF0YSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdC8vY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MgZm9ybWF0IHB1c2ggdG8gZm9ybWF0U2V0dGluZ3NcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5jb25maWcuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MgJiZcclxuXHRcdFx0dGhpcy5jb25maWcuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MubGVuZ3RoID4gMFxyXG5cdFx0KSB7XHJcblx0XHRcdHRoaXMuY29uZmlnLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzLm1hcCgoZWwpID0+IHtcclxuXHRcdFx0XHRpZiAoZWwuZm9ybWF0U3RyaW5nICE9PSBcIlwiKSB7XHJcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gZm9ybWF0U2V0dGluZ3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuXHRcdFx0XHRcdFx0aWYgKGZvcm1hdFNldHRpbmdzW2ldLm5hbWUgPT09IGVsLm5hbWUpIHtcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5ncy5zcGxpY2UoaSwgMSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBlbC5uYW1lLFxyXG5cdFx0XHRcdFx0XHRmb3JtYXQ6IGVsLmZvcm1hdFN0cmluZyxcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRsZXQgc2VyaWVzID0gdGhpcy5jb25maWcueWF4aXMuc2VyaWVzO1xyXG5cdFx0aWYgKHNlcmllcykge1xyXG5cdFx0XHRmb3IgKGxldCBpdGVtIG9mIHNlcmllcykge1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0ge1xyXG5cdFx0XHRcdFx0bmFtZTogaXRlbS5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0Y2FwdGlvbjogdGhpcy5nZXRDYXB0aW9uQnlOYW1lKGl0ZW0uY29sTmFtZSkgfHwgaXRlbS50aXRsZSxcclxuXHRcdFx0XHRcdHR5cGU6IGl0ZW0uY2FsTWV0aG9kLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0dmFsdWVzLnB1c2godmFsdWUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRsZXQgZ3JvdXBzID0gdGhpcy5jb25maWcueGF4aXMuZ3JvdXBzO1xyXG5cdFx0aWYgKGdyb3Vwcykge1xyXG5cdFx0XHRmb3IgKGxldCBnaXRlbSBvZiBncm91cHMpIHtcclxuXHRcdFx0XHRjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gZ2l0ZW0ubmFtZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0aWYgKGZpZWxkLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdGdpdGVtLnNob3dTdWJUb3RhbHMgPSBmaWVsZFswXS5zaG93U3ViVG90YWxzO1xyXG5cdFx0XHRcdFx0Z2l0ZW0uY2FwdGlvbiA9XHJcblx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdWYWx1ZSB8fFxyXG5cdFx0XHRcdFx0XHR0aGlzLnRyYW5zbGF0aW9uW2ZpZWxkWzBdLmxhbmdDb2RlXSB8fFxyXG5cdFx0XHRcdFx0XHRnaXRlbS5jYXB0aW9uIHx8XHJcblx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdDb2RlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyb3dzLnB1c2goZ2l0ZW0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5jb25maWcuY29sdW1uR3JvdXAgJiYgdGhpcy5jb25maWcuY29sdW1uR3JvdXAubGVuZ3RoKSB7XHJcblx0XHRcdGZvciAobGV0IGl0ZW0gb2YgdGhpcy5jb25maWcuY29sdW1uR3JvdXApIHtcclxuXHRcdFx0XHRjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gaXRlbS5uYW1lXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoZmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0aXRlbS5zaG93U3ViVG90YWxzID0gZmllbGRbMF0uc2hvd1N1YlRvdGFscztcclxuXHRcdFx0XHRcdGl0ZW0uY2FwdGlvbiA9XHJcblx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdWYWx1ZSB8fFxyXG5cdFx0XHRcdFx0XHR0aGlzLnRyYW5zbGF0aW9uW2ZpZWxkWzBdLmxhbmdDb2RlXSB8fFxyXG5cdFx0XHRcdFx0XHRmaWVsZFswXS5sYW5nQ29kZSB8fFxyXG5cdFx0XHRcdFx0XHRpdGVtLmNhcHRpb247XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbHVtbnMucHVzaChpdGVtKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0bGV0IGNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3MgPSBbXTtcclxuXHRcdHRoaXMuY29uZmlnRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblx0XHRcdGlmIChmaWVsZC5mb3JtYXQgJiYgZmllbGQuZm9ybWF0Lmxlbmd0aCkge1xyXG5cdFx0XHRcdGlmIChmaWVsZC5mb3JtYXRbMF0uZm9udFNldHRpbmdDaGVja2VkKSB7XHJcblx0XHRcdFx0XHRsZXQgY29uZGl0aW9uYWxGb3JtYXRPYmogPSB7XHJcblx0XHRcdFx0XHRcdGFwcGx5R3JhbmRUb3RhbHM6IHRydWUsXHJcblx0XHRcdFx0XHRcdG1lYXN1cmU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdHZhbHVlMTogbnVsbCxcclxuXHRcdFx0XHRcdFx0dmFsdWUyOiBudWxsLFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25zOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRzdHlsZToge1xyXG5cdFx0XHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRjb2xvcjogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRmb250RmFtaWx5OiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdGZvbnRTaXplOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGxldCBuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmogPSB7XHJcblx0XHRcdFx0XHRcdGFwcGx5R3JhbmRUb3RhbHM6IHRydWUsXHJcblx0XHRcdFx0XHRcdG1lYXN1cmU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdHZhbHVlMTogbnVsbCxcclxuXHRcdFx0XHRcdFx0dmFsdWUyOiBudWxsLFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25zOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRzdHlsZToge1xyXG5cdFx0XHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRjb2xvcjogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRmb250RmFtaWx5OiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdGZvbnRTaXplOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdC8vIGZvbnQgc2V0dGluZyBzdGFydFxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLm1lYXN1cmUgPVxyXG5cdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGaWVsZDtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLm1lYXN1cmUgPVxyXG5cdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGaWVsZDtcclxuXHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkICYmXHJcblx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5jb21wYXJlU2VsZWN0XHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRDb21wYXJlQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMjtcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTI7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5cIjtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0sXHJcblx0XHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdFNldHRpbmdzLnB1c2gobmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqKTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3MudW5zaGlmdChjb25kaXRpb25hbEZvcm1hdE9iaik7XHJcblx0XHRcdFx0XHQvLyBmb250IHNldHRpbmcgZW5kXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGxldCBmb3JtYXRTZXR0aW5nc09iaiA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IFwiXCIsXHJcblx0XHRcdFx0XHRmb3JtYXQ6IFwiXCIsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHRpZiAoZmllbGQuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWQpIHtcclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLm5hbWUgPSBmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGaWVsZDtcclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLmZvcm1hdCA9XHJcblx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdHN3aXRjaCAoZmllbGQuZm9ybWF0WzBdLmRhdGFUeXBlKSB7XHJcblx0XHRcdFx0XHRcdGNhc2UgXCJudW1iZXJcIjpcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iai5mb3JtYXQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgXCJpbnRlZ2VyXCI6XHJcblx0XHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmouZm9ybWF0ID1cclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdEludGVnZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSBcInBlcmNlbnROdW1cIjpcclxuXHRcdFx0XHRcdFx0Y2FzZSBcInBlcmNlbnRcIjpcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iai5mb3JtYXQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlIFwibXVsdGlwbGVcIjpcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iai5mb3JtYXQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0TXVsdGlwbGUoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSBcImRhdGVcIjpcclxuXHRcdFx0XHRcdFx0Y2FzZSBcImRhdGV0aW1lXCI6XHJcblx0XHRcdFx0XHRcdFx0bGV0IGZvcm1hdCA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGZpZWxkLmZvcm1hdCAmJiBmaWVsZC5mb3JtYXQubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoZmllbGQuZm9ybWF0WzBdLmRhdGVUeXBlID09IFwiUXVhcnRlclwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZmllbGQuZm9ybWF0WzBdLmRhdGVUeXBlID09IFwiRGF0ZVwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBmcm9tSWR4ID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXREaXNwbGF5LmluZGV4T2YoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIihcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCB0b0lkeCA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheS5pbmRleE9mKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCIpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdERpc3BsYXkuc2xpY2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmcm9tSWR4ICsgMSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvSWR4XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYgKGZvcm1hdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmogPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6IGZpZWxkLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBmaWVsZC5kYXRhVHlwZSA9IFwic3RyaW5nXCI7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLmZvcm1hdCA9IHRoaXMuZGF0ZVBpcGVGb3JtYXQ7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09ialtcInR5cGVcIl0gPSBcImRhdGVcIjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5kYXRhVHlwZSAhPT0gXCJzdHJpbmdcIiAmJlxyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmouZm9ybWF0XHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRmb3JtYXRTZXR0aW5ncy5wdXNoKGZvcm1hdFNldHRpbmdzT2JqKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzID0gdGhpcy5jb25maWcuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1xyXG5cdFx0XHQ/IHRoaXMuY29uZmlnLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHNcclxuXHRcdFx0OiBbXTtcclxuXHJcblx0XHQvLyBTTVAyLTQ1ODIgQUdJQyAtIERhc2hib2FyZCBpdGVtIHNlcXVlbmNlXHJcblx0XHRsZXQgaXNFeGlzdFNlcSA9IGZhbHNlO1xyXG5cdFx0bGV0IHNvcnRTZXR0aW5ncyA9IHRoaXMuY29uZmlnLnNvcnRTZXR0aW5ncyB8fCBbXTtcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5QaXZvdF9EYXRhICYmXHJcblx0XHRcdHRoaXMuUGl2b3RfRGF0YVswXSAmJlxyXG5cdFx0XHR0aGlzLlBpdm90X0RhdGFbMF0uU2VxICE9PSBudWxsXHJcblx0XHQpIHtcclxuXHRcdFx0Ly8g5Y+W5raITmFtZeeahOm7mOiupOaOkuW6j++8jOagueaNrlNlceadpeaOkuW6j1xyXG5cdFx0XHRzb3J0U2V0dGluZ3MucHVzaCh7IG5hbWU6IFwiTmFtZVwiLCBvcmRlcjogXCJOb25lXCIgfSk7XHJcblx0XHRcdGlzRXhpc3RTZXEgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0bGV0IGZpbHRlclNldHRpbmdzID0gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5jaGVja0ZpbHRlclNldHRpbmdzKFxyXG5cdFx0XHR0aGlzLmNvbmZpZyxcclxuXHRcdFx0dGhpcy5jb25maWdGaWVsZHMsXHJcblx0XHRcdHRoaXMuUGl2b3RfRGF0YVxyXG5cdFx0KTtcclxuXHRcdGxldCBuYW1lRmlsdGVyID0gZmlsdGVyU2V0dGluZ3MuZmluZCgoeCkgPT4geC5uYW1lID09PSBcIk5hbWVcIik7XHJcblx0XHQvLyDlrZjlnKggTmFtZeeahGZpbHRlcuaXtu+8jOS8muaMieeFp+m7mOiupOaOkuW6j++8jOmcgOimgeWvuU5hbWXov5vooYxTZXHmjpLluo/lpITnkIZcclxuXHRcdGlmIChpc0V4aXN0U2VxICYmIG5hbWVGaWx0ZXIgJiYgcm93cy5zb21lKCh4KSA9PiB4Lm5hbWUgPT09IFwiTmFtZVwiKSkge1xyXG5cdFx0XHRsZXQgaXRlbXMgPSBuYW1lRmlsdGVyLml0ZW1zOyAvLyDmi7/liLDlvZPliY3mjpLluo/vvIzpu5jorqRBLVpcclxuXHRcdFx0bGV0IHNlcUFyciA9IFtdO1xyXG5cdFx0XHRpdGVtcy5mb3JFYWNoKChuYW1lKSA9PiB7XHJcblx0XHRcdFx0bGV0IG9iaiA9IHRoaXMuUGl2b3RfRGF0YS5maW5kKCh4KSA9PiB4Lk5hbWUgPT09IG5hbWUpO1xyXG5cdFx0XHRcdGxldCBpdGVtOiBhbnkgPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBuYW1lLFxyXG5cdFx0XHRcdFx0c2VxOiBvYmouU2VxLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0c2VxQXJyLnB1c2goaXRlbSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRzZXFBcnIuc29ydCgoYSwgYikgPT4gYS5zZXEgLSBiLnNlcSk7XHJcblx0XHRcdG5hbWVGaWx0ZXIuaXRlbXMgPSBzZXFBcnIubWFwKCh4KSA9PiB4Lm5hbWUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGFsbEZpZWxkcyA9XHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuYWxsRmllbGRzT2JqW3RoaXMucG9ydGxldC5pZF07XHJcblx0XHRpZiAoYWxsRmllbGRzKSB7XHJcblx0XHRcdHZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW0gPSBhbGxGaWVsZHMuZmluZChcclxuXHRcdFx0XHRcdChmaWVsZCkgPT4gZmllbGQuY29sTmFtZSA9PT0gdmFsdWUubmFtZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0aWYgKGl0ZW0pIHtcclxuXHRcdFx0XHRcdHZhbHVlLmNhcHRpb24gPVxyXG5cdFx0XHRcdFx0XHQoaXRlbS5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHRpdGVtLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0XHRpdGVtLmZvcm1hdFswXS5kaXNwbGF5TmFtZSkgfHxcclxuXHRcdFx0XHRcdFx0aXRlbS5sYW5nVmFsdWUgfHxcclxuXHRcdFx0XHRcdFx0dGhpcy50cmFuc2xhdGlvbltpdGVtLmxhbmdDb2RlXSB8fFxyXG5cdFx0XHRcdFx0XHRpdGVtLmxhbmdDb2RlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRsZXQgaGFzSXRlbURhdGFUeXBlID0gZmFsc2U7XHJcblx0XHRpZiAodGhpcy5QaXZvdF9EYXRhKSB7XHJcblx0XHRcdHRoaXMuUGl2b3RfRGF0YS5tYXAoKGRhdGEpID0+IHtcclxuXHRcdFx0XHRpZiAoZGF0YVtcIkFjY291bnRUeXBlQ29kZVwiXSkge1xyXG5cdFx0XHRcdFx0aGFzSXRlbURhdGFUeXBlID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cm93cy5mb3JFYWNoKChyb3cpID0+IHtcclxuXHRcdFx0XHRcdGlmIChkYXRhW3Jvdy5uYW1lXSA9PT0gXCJcIikge1xyXG5cdFx0XHRcdFx0XHRkYXRhW3Jvdy5uYW1lXSA9IFwibnVsbFwiO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdGlmIChoYXNJdGVtRGF0YVR5cGUpIHtcclxuXHRcdFx0c29ydFNldHRpbmdzLnB1c2goe1xyXG5cdFx0XHRcdG5hbWU6IFwiQWNjb3VudFR5cGVDb2RlXCIsXHJcblx0XHRcdFx0b3JkZXI6IFwiQXNjZW5kaW5nXCIsXHJcblx0XHRcdFx0bWVtYmVyc09yZGVyOiBbLi4udGhpcy5pdGVtRGF0YVR5cGVTb3J0QXJyXSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHR0aGlzLmNvbmZpZy5maWx0ZXJzLmZvckVhY2goKGZpbHRlcikgPT4ge1xyXG5cdFx0XHRmaWx0ZXIuY2FwdGlvbiA9XHJcblx0XHRcdFx0dGhpcy5nZXRDYXB0aW9uQnlOYW1lKGZpbHRlci5uYW1lKSB8fCBmaWx0ZXIuY2FwdGlvbjtcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5kYXRhU291cmNlU2V0dGluZ3MgPSB7XHJcblx0XHRcdGRhdGFTb3VyY2U6IHRoaXMuUGl2b3RfRGF0YSB8fCBbXSxcclxuXHRcdFx0cm93czogcm93cyB8fCBbXSxcclxuXHRcdFx0Y29sdW1uczogY29sdW1ucyB8fCBbXSxcclxuXHRcdFx0dmFsdWVzOiB2YWx1ZXMgfHwgW10sXHJcblx0XHRcdGZpbHRlcnM6IHRoaXMuY29uZmlnLmZpbHRlcnMsXHJcblx0XHRcdGZpbHRlclNldHRpbmdzOiBmaWx0ZXJTZXR0aW5ncyxcclxuXHRcdFx0ZXhjbHVkZUZpZWxkczogdGhpcy5leGNsdWRlRmllbGRzLFxyXG5cdFx0XHRmb3JtYXRTZXR0aW5nczogZm9ybWF0U2V0dGluZ3MsXHJcblx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3M6IGNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3MsXHJcblx0XHRcdC8vIOeUqOS6juaUtui1t+WxleW8gOaMh+WumuWxgue6pywg6L+Z546p5oSP5Y+q6IO95bGV5byA56ys5LiA5bGCLFxyXG5cdFx0XHQvLyDlv4Xpobvorr7lrppleHBhbmRBbGwg5Li6ZmFsc2XvvIjpu5jorqTmmK9mYWxzZe+8ie+8jCDov5nmoLflrZDmiY3og73lrp7njrDlj6rlsZXlvIDkuKTlsYJcclxuXHRcdFx0Ly8gZHJpbGxlZE1lbWJlcnMsXHJcblx0XHRcdGV4cGFuZEFsbDogdHJ1ZSxcclxuXHRcdFx0ZW5hYmxlU29ydGluZzogdHJ1ZSxcclxuXHRcdFx0ZmllbGRNYXBwaW5nOiBmaWVsZE1hcHBpbmcsXHJcblx0XHRcdGNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzOiB0aGlzLmNvbmZpZy5jYWxjdWxhdGVkRmllbGRTZXR0aW5ncyxcclxuXHRcdFx0c29ydFNldHRpbmdzOiBzb3J0U2V0dGluZ3MsXHJcblx0XHRcdC8vIGdyb3VwU2V0dGluZ3M6IHRoaXMuY29uZmlnLmdyb3VwU2V0dGluZ3MsXHJcblx0XHRcdHZhbHVlU29ydFNldHRpbmdzOiB0aGlzLmNvbmZpZy52YWx1ZVNvcnRTZXR0aW5ncyxcclxuXHRcdFx0c2hvd0dyYW5kVG90YWxzOiB0aGlzLmNvbmZpZy5zaG93R3JhbmRUb3RhbHMsXHJcblx0XHRcdHNob3dSb3dHcmFuZFRvdGFsczogdGhpcy5jb25maWcuc2hvd1Jvd0dyYW5kVG90YWxzLFxyXG5cdFx0XHRzaG93Q29sdW1uR3JhbmRUb3RhbHM6IHRoaXMuY29uZmlnLnNob3dDb2x1bW5HcmFuZFRvdGFscyxcclxuXHRcdFx0c2hvd1N1YlRvdGFsczogdGhpcy5jb25maWcuc2hvd1N1YlRvdGFscyxcclxuXHRcdFx0c2hvd1Jvd1N1YlRvdGFsczogdGhpcy5jb25maWcuc2hvd1Jvd1N1YlRvdGFscyxcclxuXHRcdFx0c2hvd0NvbHVtblN1YlRvdGFsczogdGhpcy5jb25maWcuc2hvd0NvbHVtblN1YlRvdGFscyxcclxuXHRcdH07XHJcblx0XHRjb25zb2xlLmxvZyhcInRoaXMuZGF0YVNvdXJjZVNldHRpbmdzXCIsIHRoaXMuZGF0YVNvdXJjZVNldHRpbmdzKTtcclxuXHJcblx0XHR0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHR9XHJcblxyXG5cdGdldENhcHRpb25CeU5hbWUobmFtZVN0cmluZykge1xyXG5cdFx0aWYgKCFuYW1lU3RyaW5nKSByZXR1cm4gXCJcIjtcclxuXHRcdGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmluZCgoZWwpID0+IGVsLmNvbE5hbWUgPT09IG5hbWVTdHJpbmcpO1xyXG5cclxuXHRcdHJldHVybiBmaWVsZFxyXG5cdFx0XHQ/IGZpZWxkLmxhbmdWYWx1ZSB8fFxyXG5cdFx0XHRcdFx0dGhpcy50cmFuc2xhdGlvbltmaWVsZCAmJiBmaWVsZC5sYW5nQ29kZV0gfHxcclxuXHRcdFx0XHRcdGZpZWxkLmxhbmdDb2RlXHJcblx0XHRcdDogXCJcIjtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhZnRlclBvcHVsYXRlKGFyZ3M6IEVuZ2luZVBvcHVsYXRlZEV2ZW50QXJncyk6IHZvaWQge1xyXG5cdFx0dGhpcy50ZW1wU3VidG90YWxzID0gW107XHJcblx0XHR0aGlzLmdyYW5kVG90YWxzID0ge307XHJcblx0XHR0aGlzLnN1YlRvdGFscyA9IHt9O1xyXG5cdFx0bGV0IHRlbXBzaG93QXJyYXkgPSBbXTtcclxuXHRcdHRoaXMuY29uZmlnLnlheGlzLnNlcmllcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRpdGVtLmhhc093blByb3BlcnR5KFwic2hvd1N1YlRvdGFsc1wiKSAmJlxyXG5cdFx0XHRcdGl0ZW0uaGFzT3duUHJvcGVydHkoXCJzaG93R3JhbmRUb3RhbHNcIilcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0dGVtcHNob3dBcnJheS5wdXNoKHtcclxuXHRcdFx0XHRcdG5hbWU6IGl0ZW0uY29sTmFtZSxcclxuXHRcdFx0XHRcdGNhbE1ldGhvZDogaXRlbS5jYWxNZXRob2QsXHJcblx0XHRcdFx0XHRzaG93U3ViVG90YWxzOiBpdGVtLnNob3dTdWJUb3RhbHMsXHJcblx0XHRcdFx0XHRzaG93R3JhbmRUb3RhbHM6IGl0ZW0uc2hvd0dyYW5kVG90YWxzLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmIChpdGVtLmhhc093blByb3BlcnR5KFwic2hvd0dyYW5kVG90YWxzXCIpKSB7XHJcblx0XHRcdFx0XHR0ZW1wc2hvd0FycmF5LnB1c2goe1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBpdGVtLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdGNhbE1ldGhvZDogaXRlbS5jYWxNZXRob2QsXHJcblx0XHRcdFx0XHRcdHNob3dHcmFuZFRvdGFsczogaXRlbS5zaG93R3JhbmRUb3RhbHMsXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoXCJzaG93U3ViVG90YWxzXCIpKSB7XHJcblx0XHRcdFx0XHR0ZW1wc2hvd0FycmF5LnB1c2goe1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBpdGVtLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdGNhbE1ldGhvZDogaXRlbS5jYWxNZXRob2QsXHJcblx0XHRcdFx0XHRcdHNob3dTdWJUb3RhbHM6IGl0ZW0uc2hvd1N1YlRvdGFscyxcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0aWYgKHRoaXMuZmllbGRsaXN0T2JqICYmIHRoaXMucGl2b3RPYmopIHtcclxuXHRcdFx0dGhpcy5jb25maWcuY29sdW1uR3JvdXAgPSBbXTtcclxuXHRcdFx0dGhpcy5jb25maWcueGF4aXMuZ3JvdXBzID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnLnlheGlzLnNlcmllcyA9IFtdO1xyXG5cdFx0XHR0aGlzLmNvbmZpZy5maWx0ZXJzID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnLmZpbHRlclNldHRpbmdzID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzID0gW107XHJcblx0XHRcdGxldCBncm91cFNldHRpbmdzID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwiZ3JvdXBTZXR0aW5nc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCBjb2x1bW5zID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwiY29sdW1uc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCByb3dzID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwicm93c1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCBmaWx0ZXJzID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwiZmlsdGVyc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCBmaWx0ZXJTZXR0aW5ncyA9IHRoaXMuZ2V0RGF0YVNvdXJjZVNldHRpbmdzUHJvcChcclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iaixcclxuXHRcdFx0XHRcImZpbHRlclNldHRpbmdzXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0bGV0IHZhbHVlcyA9IHRoaXMuZ2V0RGF0YVNvdXJjZVNldHRpbmdzUHJvcChcclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iaixcclxuXHRcdFx0XHRcInZhbHVlc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCBzb3J0U2V0dGluZ3MgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmosXHJcblx0XHRcdFx0XCJzb3J0U2V0dGluZ3NcIlxyXG5cdFx0XHQpO1xyXG5cdFx0XHRsZXQgY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmosXHJcblx0XHRcdFx0XCJjYWxjdWxhdGVkRmllbGRTZXR0aW5nc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChncm91cFNldHRpbmdzLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRcdGZvciAobGV0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdFx0XHR0aGlzLmNvbmZpZy5jb2x1bW5Hcm91cC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0bmFtZTogY29sdW1uLm5hbWUsXHJcblx0XHRcdFx0XHRcdGNhcHRpb246XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5nZXRDYXB0aW9uQnlOYW1lKGNvbHVtbi5uYW1lKSB8fFxyXG5cdFx0XHRcdFx0XHRcdGNvbHVtbi5jYXB0aW9uLFxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vSWYgdGhlcmUgaXMgYSBncm91cCwgZmlyc3QgZmlsdGVyIHRoZSBjb2x1bW5zIG9mIHRoZSBncm91cCBmaWVsZCwgYW5kIHRoZW4gb25seSBzYXZlIHRoZSBsYXN0IG9uZVxyXG5cdFx0XHRcdGZvciAobGV0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdFx0XHRpZiAoIXN0YXJ0c1dpdGgoY29sdW1uLm5hbWUsIGdyb3VwU2V0dGluZ3NbMF0ubmFtZSArIFwiX1wiKSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmNvbmZpZy5jb2x1bW5Hcm91cC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRuYW1lOiBjb2x1bW4ubmFtZSxcclxuXHRcdFx0XHRcdFx0XHRjYXB0aW9uOlxyXG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uLm5hbWUgPT09IGdyb3VwU2V0dGluZ3NbMF0ubmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IFwiXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmdldENhcHRpb25CeU5hbWUoY29sdW1uLm5hbWUpIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgY29sdW1uLmNhcHRpb24sXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRmb3IgKGxldCByb3cgb2Ygcm93cykge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnLnhheGlzLmdyb3Vwcy5wdXNoKHtcclxuXHRcdFx0XHRcdG5hbWU6IHJvdy5uYW1lLFxyXG5cdFx0XHRcdFx0Y2FwdGlvbjogdGhpcy5nZXRDYXB0aW9uQnlOYW1lKHJvdy5uYW1lKSB8fCByb3cuY2FwdGlvbixcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRmb3IgKGxldCBmaWx0ZXIgb2YgZmlsdGVycykge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnLmZpbHRlcnMucHVzaCh7XHJcblx0XHRcdFx0XHRuYW1lOiBmaWx0ZXIubmFtZSxcclxuXHRcdFx0XHRcdGNhcHRpb246XHJcblx0XHRcdFx0XHRcdHRoaXMuZ2V0Q2FwdGlvbkJ5TmFtZShmaWx0ZXIubmFtZSkgfHwgZmlsdGVyLmNhcHRpb24sXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRoaXMuZmlsdGVyU2V0dGluZ3MgJiYgdGhpcy5maWx0ZXJTZXR0aW5ncy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0YXJncy5kYXRhU291cmNlU2V0dGluZ3MuZmlsdGVyU2V0dGluZ3MgPSB0aGlzLmZpbHRlclNldHRpbmdzO1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnLmZpbHRlclNldHRpbmdzID0gdGhpcy5maWx0ZXJTZXR0aW5ncztcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5maWx0ZXJTZXR0aW5ncztcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmNvbmZpZy5maWx0ZXJTZXR0aW5ncyA9IGZpbHRlclNldHRpbmdzO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xyXG5cdFx0XHRcdGxldCBzZXJpZXNEYXRhO1xyXG5cdFx0XHRcdGxldCB0ZW1wU2hvd09iajtcclxuXHRcdFx0XHRsZXQgZmlsdGVyVGVtcHNob3dBcnJheSA9IFtdO1xyXG5cdFx0XHRcdGlmICh0ZW1wc2hvd0FycmF5Lmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0ZmlsdGVyVGVtcHNob3dBcnJheSA9IHRlbXBzaG93QXJyYXkuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHQoaXRlbSkgPT5cclxuXHRcdFx0XHRcdFx0XHRpdGVtLm5hbWUgPT09IHZhbHVlLm5hbWUgJiZcclxuXHRcdFx0XHRcdFx0XHRpdGVtLmNhbE1ldGhvZCA9PT0gdmFsdWUudHlwZVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGlmIChmaWx0ZXJUZW1wc2hvd0FycmF5Lmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHR0ZW1wU2hvd09iaiA9IGZpbHRlclRlbXBzaG93QXJyYXlbMF07XHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHR0ZW1wU2hvd09iai5oYXNPd25Qcm9wZXJ0eShcInNob3dTdWJUb3RhbHNcIikgJiZcclxuXHRcdFx0XHRcdFx0XHR0ZW1wU2hvd09iai5oYXNPd25Qcm9wZXJ0eShcInNob3dHcmFuZFRvdGFsc1wiKVxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRzZXJpZXNEYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29sTmFtZTogdmFsdWUubmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdGNhbE1ldGhvZDogdmFsdWUudHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB2YWx1ZS5jYXB0aW9uLFxyXG5cdFx0XHRcdFx0XHRcdFx0c2hvd1N1YlRvdGFsczogdGVtcFNob3dPYmouc2hvd1N1YlRvdGFscyxcclxuXHRcdFx0XHRcdFx0XHRcdHNob3dHcmFuZFRvdGFsczogdGVtcFNob3dPYmouc2hvd0dyYW5kVG90YWxzLFxyXG5cdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHRlbXBTaG93T2JqLmhhc093blByb3BlcnR5KFwic2hvd0dyYW5kVG90YWxzXCIpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRzZXJpZXNEYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xOYW1lOiB2YWx1ZS5uYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYWxNZXRob2Q6IHZhbHVlLnR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB2YWx1ZS5jYXB0aW9uLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93R3JhbmRUb3RhbHM6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGVtcFNob3dPYmouc2hvd0dyYW5kVG90YWxzLFxyXG5cdFx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYgKHRlbXBTaG93T2JqLmhhc093blByb3BlcnR5KFwic2hvd1N1YlRvdGFsc1wiKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0c2VyaWVzRGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sTmFtZTogdmFsdWUubmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2FsTWV0aG9kOiB2YWx1ZS50eXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdmFsdWUuY2FwdGlvbixcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd1N1YlRvdGFsczogdGVtcFNob3dPYmouc2hvd1N1YlRvdGFscyxcclxuXHRcdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICghc2VyaWVzRGF0YSkge1xyXG5cdFx0XHRcdFx0c2VyaWVzRGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0Y29sTmFtZTogdmFsdWUubmFtZSxcclxuXHRcdFx0XHRcdFx0dGl0bGU6IHZhbHVlLmNhcHRpb24sXHJcblx0XHRcdFx0XHRcdGNhbE1ldGhvZDogdmFsdWUudHlwZSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuY29uZmlnLnlheGlzLnNlcmllcy5wdXNoKHNlcmllc0RhdGEpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IGNhbGN1bGF0ZSBvZiBjYWxjdWxhdGVkRmllbGRTZXR0aW5ncykge1xyXG5cdFx0XHRcdGNvbnN0IGNhbGN1bGF0ZURhdGEgPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBjYWxjdWxhdGUubmFtZSxcclxuXHRcdFx0XHRcdGZvcm11bGE6IGNhbGN1bGF0ZS5mb3JtdWxhLFxyXG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOlxyXG5cdFx0XHRcdFx0XHRjYWxjdWxhdGUuZm9ybWF0U3RyaW5nID09PSBcIlwiXHJcblx0XHRcdFx0XHRcdFx0PyBcIk4yXCJcclxuXHRcdFx0XHRcdFx0XHQ6IGNhbGN1bGF0ZS5mb3JtYXRTdHJpbmcsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHR0aGlzLmNvbmZpZy5jYWxjdWxhdGVkRmllbGRTZXR0aW5ncy5wdXNoKGNhbGN1bGF0ZURhdGEpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuY29uZmlnLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMgPSB0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHM7XHJcblx0XHRcdHRoaXMuY29uZmlnLnNvcnRTZXR0aW5ncyA9IHNvcnRTZXR0aW5ncztcclxuXHRcdFx0dGhpcy5jb25maWcuZ3JvdXBTZXR0aW5ncyA9IGdyb3VwU2V0dGluZ3M7XHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLnVwZGF0ZVZpZXcodGhpcy5waXZvdE9iaik7XHJcblx0XHR9XHJcblx0XHR0aGlzLnBvcnRsZXQuY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG5cdFx0Ly9yZW1vdmUgdGhlIHNvcnRcclxuXHRcdGlmICh0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zb3J0U2V0dGluZ3MubGVuZ3RoID4gMCkge1xyXG5cdFx0XHR0aGlzLnByZXZpb3VzU29ydCA9IHRoaXMuZmllbGRsaXN0T2JqLmxhc3RTb3J0SW5mbztcclxuXHRcdFx0KHRoaXMuZmllbGRsaXN0T2JqIGFzIGFueSkubGFzdFNvcnRJbmZvID0gW107XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYWZ0ZXJFbmdpbmVQb3B1bGF0ZShhcmdzOiBhbnkpIHtcclxuXHRcdGlmICghQnJvd3Nlci5pc0RldmljZSAmJiB0aGlzLmZpZWxkbGlzdE9iaiAmJiB0aGlzLnBpdm90T2JqKSB7XHJcblx0XHRcdHRoaXMuY29uZmlnLmdyb3VwU2V0dGluZ3MgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iaixcclxuXHRcdFx0XHRcImdyb3VwU2V0dGluZ3NcIlxyXG5cdFx0XHQpO1xyXG5cdFx0XHR0aGlzLnBvcnRsZXQuY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG5cdFx0XHRpZiAodGhpcy5maWVsZGxpc3RPYmopIHRoaXMuZmllbGRsaXN0T2JqLnVwZGF0ZSh0aGlzLnBpdm90T2JqKTtcclxuXHRcdFx0dGhpcy5waXZvdE9iai5ncmlkLnF1ZXJ5Q2VsbEluZm8gPSB0aGlzLnF1ZXJ5Q2VsbC5iaW5kKHRoaXMpO1xyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmdyaWQuaGVhZGVyQ2VsbEluZm8gPSB0aGlzLmhlYWRlckNlbGwuYmluZCh0aGlzKTtcclxuXHRcdFx0Ly8gU01QMi0zOTI5IHJvbGxiYWNrXHJcblx0XHRcdC8vIGlmICghdGhpcy5pc0FwcGx5SVJSKVxyXG5cdFx0XHQvLyBcdHRoaXMuZ2V0Q2FsY3VsYXRpb25SZXN1bHRCeURhc2hib2FyZERhdGFUYWJsZUlkKCk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5QaXZvdF9EYXRhICYmIHRoaXMuUGl2b3RfRGF0YS5sZW5ndGgpIHtcclxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5lbmdpbmVQb3B1bGF0ZWQoYXJncyk7XHJcblx0XHRcdH0sIDE1MDApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKG9iaiwga2V5KSB7XHJcblx0XHRsZXQgcHJvcCA9IG51bGw7XHJcblx0XHRpZiAob2JqICYmIG9iai5kYXRhU291cmNlU2V0dGluZ3MpIHtcclxuXHRcdFx0cHJvcCA9IG9iai5kYXRhU291cmNlU2V0dGluZ3Nba2V5XTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwcm9wKSA9PT0gXCJbb2JqZWN0IEFycmF5XVwiICYmXHJcblx0XHRcdFx0cHJvcC5sZW5ndGggPiAwXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdHByb3AgPSBwcm9wLm1hcCgoaXRlbSkgPT4gaXRlbS5wcm9wZXJ0aWVzIHx8IGl0ZW0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcHJvcDtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBlbmdpbmVQb3B1bGF0aW5nKGFyZ3MpIHtcclxuXHRcdHRoaXMuZ3JhbmRUb3RhbHMgPSB7fTtcclxuXHRcdHRoaXMuc3ViVG90YWxzID0ge307XHJcblx0XHR0aGlzLmFsbERhdGFWYWx1ZSA9IFtdO1xyXG5cdFx0Ly8gaWYgKGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLnNvcnRTZXR0aW5ncy5sZW5ndGgpIHtcclxuXHRcdC8vIFx0Zm9yIChcclxuXHRcdC8vIFx0XHRsZXQgaSA9IDA7XHJcblx0XHQvLyBcdFx0aSA8IGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLnNvcnRTZXR0aW5ncy5sZW5ndGg7XHJcblx0XHQvLyBcdFx0aSsrXHJcblx0XHQvLyBcdCkge1xyXG5cdFx0Ly8gXHRcdGlmIChcclxuXHRcdC8vIFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmxhc3RTb3J0SW5mbyAmJlxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoubGFzdFNvcnRJbmZvLm5hbWUgPT09XHJcblx0XHQvLyBcdFx0XHRcdGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLnNvcnRTZXR0aW5nc1tpXS5uYW1lICYmXHJcblx0XHQvLyBcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5sYXN0U29ydEluZm8ub3JkZXIgPT09IFwiQXNjZW5kaW5nXCIgJiZcclxuXHRcdC8vIFx0XHRcdCEoXHJcblx0XHQvLyBcdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmxhc3RTb3J0SW5mby5uYW1lID09PVxyXG5cdFx0Ly8gXHRcdFx0XHRcdHRoaXMucHJldmlvdXNTb3J0Lm5hbWUgJiZcclxuXHRcdC8vIFx0XHRcdFx0dGhpcy5wcmV2aW91c1NvcnQub3JkZXIgPT09IFwiTm9uZVwiXHJcblx0XHQvLyBcdFx0XHQpXHJcblx0XHQvLyBcdFx0KSB7XHJcblx0XHQvLyBcdFx0XHRhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5zb3J0U2V0dGluZ3NbaV0ub3JkZXIgPSBcIk5vbmVcIjtcclxuXHRcdC8vIFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5wcmV2aW91c1NvcnQgJiZcclxuXHRcdC8vIFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmxhc3RTb3J0SW5mbyAmJlxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoubGFzdFNvcnRJbmZvLm5hbWUgPT09XHJcblx0XHQvLyBcdFx0XHRcdHRoaXMucHJldmlvdXNTb3J0Lm5hbWUgJiZcclxuXHRcdC8vIFx0XHRcdHRoaXMucHJldmlvdXNTb3J0Lm9yZGVyID09PSBcIkFzY2VuZGluZ1wiXHJcblx0XHQvLyBcdFx0KSB7XHJcblx0XHQvLyBcdFx0XHRhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5zb3J0U2V0dGluZ3NbaV0ub3JkZXIgPSBcIkFzY2VuZGluZ1wiO1xyXG5cdFx0Ly8gXHRcdH1cclxuXHRcdC8vIFx0fVxyXG5cdFx0Ly8gfVxyXG5cdH1cclxuXHJcblx0cHVibGljIGNlbGxDbGljayhhcmdzKSB7XHJcblx0XHRpZiAoYXJncy5jdXJyZW50Q2VsbC5jbGFzc0xpc3QuY29udGFpbnMoXCJlLWhlYWRlcmNlbGxcIikpIHtcclxuXHRcdFx0dGhpcy5mbGFnID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdC8vIOa4hemZpOaOkuW6j1xyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZVNvcnRTZXR0aW5ncy5zb3J0T3JkZXIgJiZcclxuXHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVTb3J0U2V0dGluZ3MuaGVhZGVyVGV4dCAmJlxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZVNvcnRTZXR0aW5ncy5zb3J0T3JkZXIgPT09XHJcblx0XHRcdFx0XCJEZXNjZW5kaW5nXCIgJiZcclxuXHRcdFx0YXJncy5kYXRhLnZhbHVlU29ydCAmJlxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZVNvcnRTZXR0aW5ncy5oZWFkZXJUZXh0ID09PVxyXG5cdFx0XHRcdGFyZ3MuZGF0YS52YWx1ZVNvcnQubGV2ZWxOYW1lXHJcblx0XHQpIHtcclxuXHRcdFx0dGhpcy5waXZvdE9iai5zZXRQcm9wZXJ0aWVzKFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGRhdGFTb3VyY2VTZXR0aW5nczoge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZVNvcnRTZXR0aW5nczoge1xyXG5cdFx0XHRcdFx0XHRcdHNvcnRPcmRlcjogXCJEZXNjZW5kaW5nXCIsXHJcblx0XHRcdFx0XHRcdFx0aGVhZGVyVGV4dDogXCJcIixcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR0cnVlXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmICh0aGlzLnBpdm90T2JqKSB0aGlzLnBpdm90T2JqLnJlZnJlc2hEYXRhKCk7XHJcblx0XHRcdHRoaXMuZmxhZyA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLmNvbmZpZy52YWx1ZVNvcnRTZXR0aW5ncyA9IHt9O1xyXG5cdFx0XHR0aGlzLnBvcnRsZXQuY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBxdWVyeUNlbGwoYXJnczogYW55KTogdm9pZCB7XHJcblx0XHQodGhpcy5waXZvdE9iai5yZW5kZXJNb2R1bGUgYXMgYW55KS5yb3dDZWxsQm91bmRFdmVudChhcmdzKTtcclxuXHRcdGxldCByb3dJbmRleCA9IE51bWJlcihhcmdzLmNlbGwuZ2V0QXR0cmlidXRlKFwiaW5kZXhcIikpO1xyXG5cdFx0Ly8g5paw54mI5pysMjYueOS4rSBhcmlhLWNvbGluZGV4IOS8muavlOaXp+eJiOacrHYyMC54IOWkmjFcclxuXHRcdGxldCBjb2xJbmRleCA9IHBhcnNlSW50KGFyZ3MuY2VsbC5nZXRBdHRyaWJ1dGUoXCJhcmlhLWNvbGluZGV4XCIpKSAtIDE7XHJcblx0XHRpZiAoXHJcblx0XHRcdCF0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb25kaXRpb25hbEZvcm1hdFNldHRpbmdzLmxlbmd0aFxyXG5cdFx0KSB7XHJcblx0XHRcdGlmIChhcmdzLmRhdGEgJiYgYXJncy5kYXRhWzBdLmZvcm1hdHRlZFRleHQgPT09IFwiR3JhbmQgVG90YWxcIikge1xyXG5cdFx0XHRcdGFyZ3MuY2VsbC5jbGFzc0xpc3QuYWRkKFwiZ3JhbmQtY2xhc3NcIik7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJncy5jZWxsLmNsYXNzTGlzdC5hZGQoXHJcblx0XHRcdFx0XHRyb3dJbmRleCAlIDIgPyBcIm9kZC1jbGFzc1wiIDogXCJldmVuLWNsYXNzXCJcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsZXQgbWVhc3VyZUFyciA9XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29uZGl0aW9uYWxGb3JtYXRTZXR0aW5ncy5tYXAoXHJcblx0XHRcdFx0XHQob2JqKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBvYmoubWVhc3VyZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0bWVhc3VyZUFyci5pbmNsdWRlcyhhcmdzLmRhdGFbY29sSW5kZXhdLmFjdHVhbFRleHQpICYmXHJcblx0XHRcdFx0YXJncy5kYXRhW2NvbEluZGV4XS5zdHlsZVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRhcmdzLmNlbGwuc3R5bGUuY3NzVGV4dCArPSBgYmFja2dyb3VuZC1jb2xvcjogJHthcmdzLmRhdGFbY29sSW5kZXhdLnN0eWxlLmJhY2tncm91bmRDb2xvcn0gIWltcG9ydGFudGA7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGFyZ3MuZGF0YSAmJiBhcmdzLmRhdGFbMF0uZm9ybWF0dGVkVGV4dCA9PT0gXCJHcmFuZCBUb3RhbFwiKVxyXG5cdFx0XHRcdGFyZ3MuY2VsbC5jbGFzc0xpc3QuYWRkKFwiZS1jdXN0b21jbGFzc1wiKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoYXJncy5kYXRhICYmIGFyZ3MuZGF0YVswXS5mb3JtYXR0ZWRUZXh0ID09PSBcIkdyYW5kIFRvdGFsXCIpIHtcclxuXHRcdFx0YXJncy5jZWxsLmNsYXNzTGlzdC5hZGQoXCJncmFuZC1jbGFzc1wiKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmIChyb3dJbmRleCAlIDIpIHtcclxuXHRcdFx0XHRhcmdzLmNlbGwuY2xhc3NMaXN0LmFkZChcIm9kZC1jbGFzc1wiKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLmNlbGwuY2xhc3NMaXN0LmFkZChcImV2ZW4tY2xhc3NcIik7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvL2dldCBzb3J0aW5nIGRhdGFcclxuXHRcdGlmICh0aGlzLmZsYWcpIHtcclxuXHRcdFx0dGhpcy5mbGFnID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuY29uZmlnLnZhbHVlU29ydFNldHRpbmdzID1cclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZVNvcnRTZXR0aW5nc1tcclxuXHRcdFx0XHRcdFwicHJvcGVydGllc1wiXHJcblx0XHRcdFx0XTtcclxuXHRcdFx0dGhpcy5wb3J0bGV0LmNvbmZpZyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlnKTtcclxuXHRcdH1cclxuXHRcdC8vY3VzdG9taXplIHRoZSBoZWFkZXIgdGV4dFxyXG5cdFx0aWYgKHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3MubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRhcmdzLmRhdGEgJiZcclxuXHRcdFx0XHRhcmdzLmRhdGFbY29sSW5kZXhdICYmXHJcblx0XHRcdFx0YXJncy5kYXRhW2NvbEluZGV4XS5heGlzID09PSBcInJvd1wiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGFyZ3MuY2VsbC5xdWVyeVNlbGVjdG9yKFwiLmUtY2VsbHZhbHVlXCIpLmlubmVyVGV4dCA9XHJcblx0XHRcdFx0XHRhcmdzLmRhdGFbY29sSW5kZXhdLmZvcm1hdHRlZFRleHQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBTTVAyLTI5MTIgc3VidG90YWzlrZfkvZPliqDnspdcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cy5sZW5ndGggJiZcclxuXHRcdFx0YXJncy5kYXRhW2NvbEluZGV4XSAmJlxyXG5cdFx0XHRhcmdzLmRhdGFbMF0ubGV2ZWwgIT09XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cy5sZW5ndGggLSAxICYmXHJcblx0XHRcdGFyZ3MuZGF0YVtjb2xJbmRleF0ucm93SGVhZGVycyAhPT0gXCJcIiAmJlxyXG5cdFx0XHRhcmdzLmRhdGFbY29sSW5kZXhdLmF4aXMgPT0gXCJ2YWx1ZVwiXHJcblx0XHQpIHtcclxuXHRcdFx0YXJncy5jZWxsLmNsYXNzTGlzdC5hZGQoXCJlLWN1c3RvbWNsYXNzXCIpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBoZWFkZXJDZWxsKGFyZ3M6IGFueSk6IHZvaWQge1xyXG5cdFx0KHRoaXMucGl2b3RPYmoucmVuZGVyTW9kdWxlIGFzIGFueSkuY29sdW1uQ2VsbEJvdW5kRXZlbnQoYXJncyk7XHJcblx0XHRpZiAodGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0bGV0IG5vZGUgPSBhcmdzLm5vZGUucXVlcnlTZWxlY3RvcihcclxuXHRcdFx0XHRcIi5lLWhlYWRlcmNlbGxkaXYgLmUtaGVhZGVydGV4dFwiXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChub2RlKSBub2RlLmlubmVyVGV4dCA9IGFyZ3MuY2VsbC5jb2x1bW4uaGVhZGVyVGV4dDtcclxuXHRcdH1cclxuXHRcdGNvbnN0IHRleHRBbGlnbiA9IGFyZ3MuY2VsbC5jb2x1bW4udGV4dEFsaWduO1xyXG5cdFx0YXJncy5jZWxsLmNvbHVtbi5oZWFkZXJUZXh0QWxpZ24gPSB0ZXh0QWxpZ247XHJcblx0XHRhcmdzLm5vZGUuc3R5bGUudGV4dEFsaWduID0gdGV4dEFsaWduID09PSBcIlJpZ2h0XCIgPyBcInJpZ2h0XCIgOiBcImxlZnRcIjsgLy8gQWxpZ24gcmlnaHQgZm9yIG51bWVyaWMgY29sdW1uc1xyXG5cdFx0aWYgKHRleHRBbGlnbiA9PT0gXCJSaWdodFwiKSB7XHJcblx0XHRcdGFyZ3Mubm9kZS5jbGFzc0xpc3QuYWRkKFwiaGVhZGVyLWFsaWduLXJpZ2h0XCIpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZGF0YUJvdW5kKGUpIHtcclxuXHRcdGlmICh0aGlzLmlzSW5pdCkge1xyXG5cdFx0XHR0aGlzLmlzSW5pdCA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5ncmFuZFRvdGFscyA9IHt9O1xyXG5cdFx0dGhpcy5zdWJUb3RhbHMgPSB7fTtcclxuXHRcdGlmICh0aGlzLnBpdm90T2JqLmdyaWQpIHtcclxuXHRcdFx0dGhpcy5waXZvdE9iai5ncmlkLnJlc2l6ZVN0b3AgPSB0aGlzLnJlc2l6ZVN0b3AuYmluZCh0aGlzKTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLnBpdm90T2JqKSB7XHJcblx0XHRcdHZhciBpbmRleCA9IFtdO1xyXG5cdFx0XHQvLyBHZXQgdGhlIGVtcHR5IHJvdyBoZWFkZXJzIGhlcmUuXHJcblx0XHRcdHZhciBlbXB0eVJvd0hlYWRlcjogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuXHRcdFx0XHQndGRbYXJpYS1sYWJlbD1cIiBjb2x1bW4gaGVhZGVyIFwiXSdcclxuXHRcdFx0KTtcclxuXHRcdFx0Zm9yICh2YXIgZWxlIG9mIGVtcHR5Um93SGVhZGVyKSB7XHJcblx0XHRcdFx0aWYgKGVsZSkge1xyXG5cdFx0XHRcdFx0aW5kZXgucHVzaChlbGUuZ2V0QXR0cmlidXRlKFwiaW5kZXhcIikpO1xyXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIGFsbCB0aGUgZW1wdHkgcm93IGhlYWRlcnMgaGVyZS5cclxuXHRcdFx0XHRcdGVsZS5jbG9zZXN0KFwidHJcIikucmVtb3ZlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaW5kZXgubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHQvLyBHZXQgdGhlIGVtcHR5IHZhbHVlcyBoZXJlLlxyXG5cdFx0XHRcdHZhciBlbXB0eVZhbHVlcyA9IHRoaXMucGl2b3RPYmouZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG5cdFx0XHRcdFx0YHRkW2luZGV4PVwiJHtpbmRleFtpXX1cIl1gXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoZW1wdHlWYWx1ZXNbMF0pIHtcclxuXHRcdFx0XHRcdC8vIFJlbW92ZSBhbGwgdGhlIGVtcHR5IHZhbHVlIHJvd3MgaGVyZS5cclxuXHRcdFx0XHRcdGVtcHR5VmFsdWVzWzBdLmNsb3Nlc3QoXCJ0clwiKS5yZW1vdmUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmogJiZcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoucGl2b3RCdXR0b25Nb2R1bGUgJiZcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoucGl2b3RCdXR0b25Nb2R1bGUubWVudU9wdGlvblxyXG5cdFx0KSB7XHJcblx0XHRcdChcclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5waXZvdEJ1dHRvbk1vZHVsZS5tZW51T3B0aW9uIGFzIGFueVxyXG5cdFx0XHQpLnN0cmluZ0FnZ3JlZ2F0ZVR5cGVzID0gW1xyXG5cdFx0XHRcdFwiQ291bnRcIixcclxuXHRcdFx0XHRcIkRpc3RpbmN0Q291bnRcIixcclxuXHRcdFx0XHRcIkZpcnN0XCIsXHJcblx0XHRcdFx0XCJMYXN0XCIsXHJcblx0XHRcdF07XHJcblx0XHR9XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMucGl2b3RPYmoucGl2b3RCdXR0b25Nb2R1bGUgJiZcclxuXHRcdFx0dGhpcy5waXZvdE9iai5waXZvdEJ1dHRvbk1vZHVsZS5tZW51T3B0aW9uXHJcblx0XHQpIHtcclxuXHRcdFx0KFxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmoucGl2b3RCdXR0b25Nb2R1bGUubWVudU9wdGlvbiBhcyBhbnlcclxuXHRcdFx0KS5zdHJpbmdBZ2dyZWdhdGVUeXBlcyA9IFtcclxuXHRcdFx0XHRcIkNvdW50XCIsXHJcblx0XHRcdFx0XCJEaXN0aW5jdENvdW50XCIsXHJcblx0XHRcdFx0XCJGaXJzdFwiLFxyXG5cdFx0XHRcdFwiTGFzdFwiLFxyXG5cdFx0XHRdO1xyXG5cdFx0fVxyXG5cdFx0bGV0IGFsbFN1bW1hcnlUeXBlID0gQUxMX0FHR1JFR0FURV9UWVBFUyBhcyBhbnk7XHJcblx0XHR0aGlzLnBpdm90T2JqLmdldEFsbFN1bW1hcnlUeXBlID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRyZXR1cm4gYWxsU3VtbWFyeVR5cGU7XHJcblx0XHR9O1xyXG5cdFx0aWYgKHRoaXMuZmllbGRsaXN0T2JqKSB7XHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmFnZ3JlZ2F0ZVR5cGVzID0gYWxsU3VtbWFyeVR5cGU7XHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmdldEFsbFN1bW1hcnlUeXBlID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdHJldHVybiBhbGxTdW1tYXJ5VHlwZTtcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHRcdHRoaXMuc2V0VmFsdWVJdGVtRGF0YSgpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzZXRWYWx1ZUl0ZW1EYXRhKCkge1xyXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdGNvbnN0IGZpZWxkRG9tID0gdGhpcy5maWVsZGxpc3RPYmouZmllbGRMaXN0U3Bpbm5lckVsZW1lbnQ7XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlcy5mb3JFYWNoKCh2YWx1ZTogYW55KSA9PiB7XHJcblx0XHRcdFx0aWYgKHZhbHVlLnR5cGUgIT09IFwiRmlyc3RcIiAmJiB2YWx1ZS50eXBlICE9PSBcIkxhc3RcIikge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCB2YWx1ZXNEb20gPSBmaWVsZERvbS5xdWVyeVNlbGVjdG9yKFxyXG5cdFx0XHRcdFx0YC5lLXZhbHVlcyAuJHt2YWx1ZS5uYW1lfSAuZS1wdnQtYnRuLWNvbnRlbnRgXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHR2YWx1ZXNEb20uaW5uZXJIVE1MICE9PSBgJHt2YWx1ZS50eXBlfSBvZiAke3ZhbHVlLmNhcHRpb259YFxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0dmFsdWVzRG9tLmlubmVySFRNTCA9IGAke3ZhbHVlLnR5cGV9IG9mICR7dmFsdWUuY2FwdGlvbn1gO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2FsY3VsYXRlZENlbGxTZXRzKGFyZ3MsIGN1ckZpZWxkcykge1xyXG5cdFx0bGV0IG1hdGNoRmllbGRzID0gY3VyRmllbGRzW1wibWF0Y2hGaWVsZHNcIl07XHJcblx0XHRsZXQgZm9ybXVsYSA9IGN1ckZpZWxkc1tcImZvcm11bGFcIl07XHJcblx0XHRsZXQgdmFsdWUgPSAwO1xyXG5cdFx0bGV0IHJvd3MgPSB0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzO1xyXG5cdFx0bGV0IGludmFsaWRUeXBlcyA9IFtcInN0cmluZ1wiLCBcIm52YXJjaGFyXCIsIFwiZGF0ZVwiLCBcImRhdGV0aW1lXCJdO1xyXG5cdFx0bGV0IGlzSW52YWxpZCA9IG1hdGNoRmllbGRzLnNvbWUoKGYpID0+XHJcblx0XHRcdGludmFsaWRUeXBlcy5pbmNsdWRlcyhcclxuXHRcdFx0XHR0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoKGVsKSA9PiBlbC5jb2xOYW1lID09PSBmLm1hdGNoV29yZClbMF1bXHJcblx0XHRcdFx0XHRcImRhdGFUeXBlXCJcclxuXHRcdFx0XHRdXHJcblx0XHRcdClcclxuXHRcdCk7XHJcblx0XHRsZXQgY3VycmVudHJvd0NlbGxUeXBlID0gYXJncy5yb3dDZWxsVHlwZTtcclxuXHRcdGlmIChpc0ludmFsaWQpIHJldHVybiBcIi1cIjtcclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5yb3dDZWxsVHlwZSA9PT0gXCJzdWJUb3RhbFwiIHx8XHJcblx0XHRcdGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwiZ3JhbmRUb3RhbFwiXHJcblx0XHQpIHtcclxuXHRcdFx0bGV0IGNoaWxkSGVhZGVycyA9IFtdO1xyXG5cdFx0XHRsZXQgc3VtID0gMDtcclxuXHRcdFx0bGV0IGNsb25lQ2VsbFNldHMgPSBjbG9uZURlZXAoYXJncy5jZWxsU2V0cyk7XHJcblx0XHRcdGxldCBncm91cE5hbWVBcnJheXMgPSBbXTtcclxuXHRcdFx0Zm9yIChsZXQgaW5kZXggPSBhcmdzLnJvdy5sZXZlbDsgaW5kZXggPCByb3dzLmxlbmd0aDsgaW5kZXgrKykge1xyXG5cdFx0XHRcdGdyb3VwTmFtZUFycmF5cy5wdXNoKHJvd3NbaW5kZXhdLm5hbWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2xvbmVDZWxsU2V0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGxldCB2YWx1ZXMgPSBbXTtcclxuXHRcdFx0XHRsZXQgaGVhZGVyID0gZ3JvdXBOYW1lQXJyYXlzXHJcblx0XHRcdFx0XHQubWFwKChuYW1lKSA9PiB7XHJcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGNsb25lQ2VsbFNldHNbaV1bbmFtZV0pO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gY2xvbmVDZWxsU2V0c1tpXVtuYW1lXTtcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHQuam9pbihcIi1cIik7XHJcblx0XHRcdFx0aWYgKCEoY2hpbGRIZWFkZXJzIGFzIGFueSkuaW5jbHVkZXMoaGVhZGVyKSkge1xyXG5cdFx0XHRcdFx0Y2hpbGRIZWFkZXJzLnB1c2goaGVhZGVyKTtcclxuXHRcdFx0XHRcdGxldCBmaWx0ZXJPYmo6IGFueSA9IHt9O1xyXG5cdFx0XHRcdFx0Z3JvdXBOYW1lQXJyYXlzLm1hcChcclxuXHRcdFx0XHRcdFx0KG5hbWUsIGkpID0+IChmaWx0ZXJPYmpbbmFtZV0gPSB2YWx1ZXNbaV0pXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YXJncy5jZWxsU2V0cyA9IF9maWx0ZXIoY2xvbmVDZWxsU2V0cywgZmlsdGVyT2JqKTtcclxuXHRcdFx0XHRcdGFyZ3Mucm93Q2VsbFR5cGUgPSBcInZhbHVlXCI7XHJcblx0XHRcdFx0XHRzdW0gKz0gdGhpcy5jYWxjdWxhdGVkVmFsdWVzKGFyZ3MsIG1hdGNoRmllbGRzLCBmb3JtdWxhKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0YXJncy5yb3dDZWxsVHlwZSA9IGN1cnJlbnRyb3dDZWxsVHlwZTtcclxuXHJcblx0XHRcdC8vIOaaguWtmOW9k+WJjVN1YlRvdGFs77yMIOeUqOS6juaUtue8qeaXtuivu+WPllxyXG5cdFx0XHRsZXQgcHJlZml4SGVhZGVyID0gdGhpcy5nZXRDYWxjSGVhZGVyKGFyZ3MsIGZvcm11bGEpO1xyXG5cdFx0XHR0aGlzLnVwZGF0ZVRlbXBTdWJ0b3RhbHMocHJlZml4SGVhZGVyLCBzdW0pO1xyXG5cdFx0XHRyZXR1cm4gc3VtO1xyXG5cdFx0fSBlbHNlIGlmIChhcmdzLnJvd0NlbGxUeXBlID09PSBcInZhbHVlXCIpIHtcclxuXHRcdFx0aWYgKGFyZ3Mucm93Lmhhc0NoaWxkKSB7XHJcblx0XHRcdFx0Ly8gY29sbGFwc2Ug6K+75Y+WU3ViVG90YWxcclxuXHRcdFx0XHRsZXQgaGVhZGVyID0gdGhpcy5nZXRDYWxjSGVhZGVyKGFyZ3MsIGZvcm11bGEpO1xyXG5cdFx0XHRcdGxldCBpbmRleCA9IHRoaXMudGVtcFN1YnRvdGFscy5maW5kSW5kZXgoXHJcblx0XHRcdFx0XHQoaXRlbSkgPT4gaXRlbS5yb3dOYW1lID09PSBoZWFkZXJcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGlmIChpbmRleCA+IC0xKSB7XHJcblx0XHRcdFx0XHR2YWx1ZSA9IHRoaXMudGVtcFN1YnRvdGFsc1tpbmRleF0ucm93VmFsdWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIGV4cGFuZFxyXG5cdFx0XHRcdHZhbHVlID0gdGhpcy5jYWxjdWxhdGVkVmFsdWVzKGFyZ3MsIG1hdGNoRmllbGRzLCBmb3JtdWxhKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHZhbHVlO1xyXG5cdH1cclxuXHJcblx0YWN0aW9uRmFpbHVyZShhcmdzOiBQaXZvdEFjdGlvbkZhaWx1cmVFdmVudEFyZ3MpOiB2b2lkIHtcclxuXHRcdGlmIChhcmdzLmFjdGlvbk5hbWUgPT0gXCJEcmlsbCBkb3duXCIgfHwgYXJncy5hY3Rpb25OYW1lID09IFwiRHJpbGwgdXBcIikge1xyXG5cdFx0XHQvLyBUcmlnZ2VycyB3aGVuIHRoZSBjdXJyZW50IFVJIGFjdGlvbiBmYWlscyB0byBhY2hpZXZlIHRoZSBkZXNpcmVkIHJlc3VsdC5cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0Q2FsY0hlYWRlcihhcmdzLCBmb3JtdWxhPykge1xyXG5cdFx0bGV0IGhlYWRlciA9IFwiXCI7XHJcblx0XHRsZXQgcm93cyA9IHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3M7XHJcblx0XHRsZXQgZ3JvdXBOYW1lQXJyYXlzID0gW107XHJcblx0XHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJncy5yb3cubGV2ZWw7IGluZGV4KyspIHtcclxuXHRcdFx0Z3JvdXBOYW1lQXJyYXlzLnB1c2gocm93c1tpbmRleF0ubmFtZSk7XHJcblx0XHR9XHJcblx0XHRoZWFkZXIgPSBncm91cE5hbWVBcnJheXMubGVuZ3RoXHJcblx0XHRcdD8gZ3JvdXBOYW1lQXJyYXlzXHJcblx0XHRcdFx0XHQubWFwKChuYW1lKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBhcmdzLmNlbGxTZXRzWzBdW25hbWVdO1xyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdC5qb2luKFwiLVwiKSArXHJcblx0XHRcdCAgXCItXCIgK1xyXG5cdFx0XHQgIGFyZ3Mucm93LmFjdHVhbFRleHRcclxuXHRcdFx0OiBhcmdzLnJvdy5hY3R1YWxUZXh0O1xyXG5cdFx0aWYgKGZvcm11bGEpIGhlYWRlciArPSBcIl9fX1wiICsgZm9ybXVsYTtcclxuXHRcdHJldHVybiBoZWFkZXI7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHVwZGF0ZVRlbXBTdWJ0b3RhbHMocm93TmFtZSwgcm93VmFsdWUpIHtcclxuXHRcdGxldCBpbmRleCA9IHRoaXMudGVtcFN1YnRvdGFscy5maW5kSW5kZXgoXHJcblx0XHRcdChpdGVtKSA9PiBpdGVtLnJvd05hbWUgPT09IHJvd05hbWVcclxuXHRcdCk7XHJcblx0XHRsZXQgdGVtcDogYW55ID0ge307XHJcblx0XHR0ZW1wLnJvd05hbWUgPSByb3dOYW1lO1xyXG5cdFx0dGVtcC5yb3dWYWx1ZSA9IHJvd1ZhbHVlO1xyXG5cdFx0aWYgKGluZGV4ID4gLTEpIHtcclxuXHRcdFx0dGhpcy50ZW1wU3VidG90YWxzLnNwbGljZShpbmRleCwgMSwgdGVtcCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnRlbXBTdWJ0b3RhbHMucHVzaCh0ZW1wKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2FsY3VsYXRlZFZhbHVlcyhhcmdzLCBtYXRjaEZpZWxkcywgZm9ybXVsYSkge1xyXG5cdFx0aWYgKG1hdGNoRmllbGRzLmxlbmd0aCkge1xyXG5cdFx0XHRsZXQgY2FsY3VsZWRNYXRjaEZpZWxkcyA9IG1hdGNoRmllbGRzLm1hcCgoZikgPT4ge1xyXG5cdFx0XHRcdHN3aXRjaCAoZi5tYXRjaE1ldGhvZCkge1xyXG5cdFx0XHRcdFx0Y2FzZSBcIkZpcnN0XCI6XHJcblx0XHRcdFx0XHRjYXNlIFwiTGFzdFwiOlxyXG5cdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSA9IHRoaXMuY2FsY3VsYXRlZEZpc3RMYXN0KFxyXG5cdFx0XHRcdFx0XHRcdGFyZ3MsXHJcblx0XHRcdFx0XHRcdFx0Zi5tYXRjaE1ldGhvZCxcclxuXHRcdFx0XHRcdFx0XHRmLm1hdGNoV29yZFxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgXCJNYXhcIjpcclxuXHRcdFx0XHRcdFx0Zi5yZXBsYWNlVmFsdWUgPSBtYXhCeShhcmdzLmNlbGxTZXRzLCAobykgPT5cclxuXHRcdFx0XHRcdFx0XHROdW1iZXIob1tmLm1hdGNoV29yZF0pXHJcblx0XHRcdFx0XHRcdClbZi5tYXRjaFdvcmRdO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgXCJNaW5cIjpcclxuXHRcdFx0XHRcdFx0Zi5yZXBsYWNlVmFsdWUgPSBtaW5CeShhcmdzLmNlbGxTZXRzLCAobykgPT5cclxuXHRcdFx0XHRcdFx0XHROdW1iZXIob1tmLm1hdGNoV29yZF0pXHJcblx0XHRcdFx0XHRcdClbZi5tYXRjaFdvcmRdO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgXCJTdW1cIjpcclxuXHRcdFx0XHRcdFx0Zi5yZXBsYWNlVmFsdWUgPSBzdW1CeShhcmdzLmNlbGxTZXRzLCAobykgPT5cclxuXHRcdFx0XHRcdFx0XHROdW1iZXIob1tmLm1hdGNoV29yZF0pXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdC8vIFNNUDItNDA5NCBVbmljb3JuIC0gTDMgQWRqdXN0ZWQgTkFWIHZhbHVlIGlzc3Vlc1xyXG5cdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0Zi5yZXBsYWNlVmFsdWUgJiYgZi5yZXBsYWNlVmFsdWUudG9GaXhlZCgxMCk7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0Y2FzZSBcIkF2Z1wiOlxyXG5cdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSA9IG1lYW5CeShhcmdzLmNlbGxTZXRzLCAobykgPT5cclxuXHRcdFx0XHRcdFx0XHROdW1iZXIob1tmLm1hdGNoV29yZF0pXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBmO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0bGV0IHJlc3VsdEZvcm11bGEgPSBmb3JtdWxhO1xyXG5cdFx0XHRpZiAoY2FsY3VsZWRNYXRjaEZpZWxkcy5sZW5ndGgpIHtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNhbGN1bGVkTWF0Y2hGaWVsZHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdHJlc3VsdEZvcm11bGEgPSByZXN1bHRGb3JtdWxhLnJlcGxhY2UoXHJcblx0XHRcdFx0XHRcdGNhbGN1bGVkTWF0Y2hGaWVsZHNbaV0ubWF0Y2hTdHIsXHJcblx0XHRcdFx0XHRcdFwiKFwiICsgY2FsY3VsZWRNYXRjaEZpZWxkc1tpXS5yZXBsYWNlVmFsdWUgKyBcIilcIlxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRsZXQgcmVzdWx0ID0gbmV3IEZ1bmN0aW9uKFxyXG5cdFx0XHRcdFx0XCJyZXR1cm4gXCIgKyByZXN1bHRGb3JtdWxhLnJlcGxhY2UoL1teLTw+PzooKVxcZC8qKy5dL2csIFwiXCIpXHJcblx0XHRcdFx0KSgpO1xyXG5cdFx0XHRcdGlmIChpc05hTihyZXN1bHQpIHx8ICFpc0Zpbml0ZShyZXN1bHQpKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gMDtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdFx0cmV0dXJuIE5hTjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG5cclxuXHR0b3RhbEZvcm1hdHRlZCA9IHt9O1xyXG5cdHB1YmxpYyBhZ2dyZWdhdGVDZWxsSW5mbyhhcmdzKSB7XHJcblx0XHRsZXQgYXNPZkRhdGUgPSB0aGlzLnBiZi50aW1lKHRoaXMuZGFzaGJvYXJkLmFzT2ZEYXRlKTtcclxuXHRcdC8vIGlmIGNhbGN1bGF0ZWQgZmllbGRcclxuXHRcdGlmIChhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT0gXCJDYWxjdWxhdGVkRmllbGRcIikge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmIChhcmdzLmZpZWxkTmFtZSA9PSB0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHNbaV0ubmFtZSkge1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IHRoaXMuY2FsY3VsYXRlZENlbGxTZXRzKFxyXG5cdFx0XHRcdFx0XHRhcmdzLFxyXG5cdFx0XHRcdFx0XHR0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHNbaV1cclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKFxyXG5cdFx0XHRbXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVJUlJcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZUlSUkJlZm9yZUNhcnJpZWRcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZUlSUklSUkRhdGVcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZUlSUk1URFwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlSVJSUVREXCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVJUlJZVERcIixcclxuXHRcdFx0XS5pbmNsdWRlcyhhcmdzLmFnZ3JlZ2F0ZVR5cGUpXHJcblx0XHQpIHtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCI9PT09PT09PT09PT09PT09PT09PT09PT09PVwiKTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJhcmdzOlwiLCBhcmdzKTtcclxuXHRcdFx0bGV0IHZhbHVlRmllbGQ7XHJcblx0XHRcdGxldCBkYXRlRmllbGQ7XHJcblx0XHRcdGxldCBzdGFydERhdGU7XHJcblx0XHRcdGxldCBlbmREYXRlO1xyXG5cdFx0XHRzd2l0Y2ggKGFyZ3MuYWdncmVnYXRlVHlwZSkge1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVJUlJcIjpcclxuXHRcdFx0XHRcdHZhbHVlRmllbGQgPSBcIklSUkFkalZhbHVlXCI7XHJcblx0XHRcdFx0XHRkYXRlRmllbGQgPSBcIklSUkRhdGVcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVJUlJNVERcIjpcclxuXHRcdFx0XHRcdHN0YXJ0RGF0ZSA9IG1vbWVudChhc09mRGF0ZSlcclxuXHRcdFx0XHRcdFx0LnN0YXJ0T2YoXCJtb250aFwiKVxyXG5cdFx0XHRcdFx0XHQuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHRcdFx0XHRcdGVuZERhdGUgPSBtb21lbnQoYXNPZkRhdGUpLmZvcm1hdChcIllZWVktTU0tRERcIik7XHJcblx0XHRcdFx0XHR2YWx1ZUZpZWxkID0gXCJJUlJBZGpWYWx1ZVwiO1xyXG5cdFx0XHRcdFx0ZGF0ZUZpZWxkID0gXCJJUlJEYXRlXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlSVJSUVREXCI6XHJcblx0XHRcdFx0XHRzdGFydERhdGUgPSBtb21lbnQoYXNPZkRhdGUpXHJcblx0XHRcdFx0XHRcdC5zdGFydE9mKFwicXVhcnRlclwiKVxyXG5cdFx0XHRcdFx0XHQuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHRcdFx0XHRcdGVuZERhdGUgPSBtb21lbnQoYXNPZkRhdGUpLmZvcm1hdChcIllZWVktTU0tRERcIik7XHJcblx0XHRcdFx0XHR2YWx1ZUZpZWxkID0gXCJJUlJBZGpWYWx1ZVwiO1xyXG5cdFx0XHRcdFx0ZGF0ZUZpZWxkID0gXCJJUlJEYXRlXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlSVJSWVREXCI6XHJcblx0XHRcdFx0XHRzdGFydERhdGUgPSBtb21lbnQoYXNPZkRhdGUpXHJcblx0XHRcdFx0XHRcdC5zdGFydE9mKFwieWVhclwiKVxyXG5cdFx0XHRcdFx0XHQuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHRcdFx0XHRcdGVuZERhdGUgPSBtb21lbnQoYXNPZkRhdGUpLmZvcm1hdChcIllZWVktTU0tRERcIik7XHJcblx0XHRcdFx0XHR2YWx1ZUZpZWxkID0gXCJJUlJBZGpWYWx1ZVwiO1xyXG5cdFx0XHRcdFx0ZGF0ZUZpZWxkID0gXCJJUlJEYXRlXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlSVJSSVJSRGF0ZVwiOlxyXG5cdFx0XHRcdFx0dmFsdWVGaWVsZCA9IFwiSVJSQWRqVmFsdWVcIjtcclxuXHRcdFx0XHRcdGRhdGVGaWVsZCA9IFwiQ2FsY3VsYXRlSVJSRGF0ZVwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZUlSUkJlZm9yZUNhcnJpZWRcIjpcclxuXHRcdFx0XHRcdHZhbHVlRmllbGQgPSBcIklSUkFkalZhbHVlQmVmb3JlQ2FycnlcIjtcclxuXHRcdFx0XHRcdGRhdGVGaWVsZCA9IFwiSVJSRGF0ZVwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHRcdGxldCBOQVZBZGogPSAwO1xyXG5cdFx0XHRsZXQgdmFsdWVzID0gW107XHJcblx0XHRcdGxldCBiZWZvcmVTdGFydE5BVkFkaiA9IDA7IC8vIOWtmOWCqOS4iuS4gOS4qumYtuauteeahE5BVkFkauaAu+WSjFxyXG5cdFx0XHRsZXQgYmVmb3JlU3RhcnRWYWx1ZXMgPSBbXTsgLy8g5a2Y5YKo5LiK5LiA5Liq6Zi25q6155qE57Sv6K6h6ZuG5ZCIICjlj6rmmK/kuLrkuobmiZPljbDvvIzmsqHmnInlrp7pmYXnlKjpgJQpXHJcblx0XHRcdGxldCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRlbC5jb2xOYW1lID09PVxyXG5cdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRBZ2dyZWdhdGVUeXBlKFxyXG5cdFx0XHRcdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGVcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Y29uc3QgZGF0YSA9IHtcclxuXHRcdFx0XHRcdGFtb3VudDogYXJncy5jZWxsU2V0c1tpXVtcIklSUkFtb3VudFwiXSxcclxuXHRcdFx0XHRcdGRhdGU6XHJcblx0XHRcdFx0XHRcdHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtkYXRlRmllbGRdKSA9PT1cclxuXHRcdFx0XHRcdFx0XCJJbnZhbGlkIGRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdD8gYXNPZkRhdGVcclxuXHRcdFx0XHRcdFx0XHQ6IHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtkYXRlRmllbGRdKSxcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdC8vIFNNUDItMTY5MjBcclxuXHRcdFx0XHQvLyBJZiBJUlIgRGF0ZSA+IERhc2hib2FyZCByZXBvcnQgZGF0ZSA9IFRha2VzIGFzIG9mIGRhc2hib2FyZCByZXBvcnQgZGF0ZVxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVJUlJJUlJEYXRlXCIgJiZcclxuXHRcdFx0XHRcdGFzT2ZEYXRlIDwgdGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW2RhdGVGaWVsZF0pXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRkYXRhLmRhdGUgPSBhc09mRGF0ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0TkFWQWRqICs9IGFyZ3MuY2VsbFNldHNbaV1bdmFsdWVGaWVsZF07XHJcblx0XHRcdFx0Ly8gU01QMi0xNzIxOSBNVEQgUVREIFlURCBJUlJcclxuXHRcdFx0XHRpZiAoc3RhcnREYXRlICYmIGVuZERhdGUpIHtcclxuXHRcdFx0XHRcdGlmIChtb21lbnQoZGF0YS5kYXRlKS5pc0JlZm9yZShzdGFydERhdGUpKSB7XHJcblx0XHRcdFx0XHRcdGRhdGFbdmFsdWVGaWVsZF0gPSBhcmdzLmNlbGxTZXRzW2ldW3ZhbHVlRmllbGRdO1xyXG5cdFx0XHRcdFx0XHRiZWZvcmVTdGFydFZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHRcdFx0XHRiZWZvcmVTdGFydE5BVkFkaiArPSBkYXRhW3ZhbHVlRmllbGRdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQhbW9tZW50KGRhdGEuZGF0ZSkuaXNCZXR3ZWVuKFxyXG5cdFx0XHRcdFx0XHRcdHN0YXJ0RGF0ZSxcclxuXHRcdFx0XHRcdFx0XHRlbmREYXRlLFxyXG5cdFx0XHRcdFx0XHRcdG51bGwsXHJcblx0XHRcdFx0XHRcdFx0XCJbXVwiXHJcblx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGRhdGEuYW1vdW50ICE9IDApIHtcclxuXHRcdFx0XHRcdHZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoTkFWQWRqID4gMC4wMDAxIHx8IE5BVkFkaiA8IC0wLjAwMDEpIHtcclxuXHRcdFx0XHR2YWx1ZXMucHVzaCh7XHJcblx0XHRcdFx0XHRhbW91bnQ6IE5BVkFkaixcclxuXHRcdFx0XHRcdGRhdGU6IGFzT2ZEYXRlLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhbHVlcyA9IHNvcnRCeSh2YWx1ZXMsIFwiZGF0ZVwiKTtcclxuXHRcdFx0Ly8g5aaC5p6c5pivTVRELFFURCxZVEQg5YiZ6ZyA6KaB5oqK5b2T5YmN6Zi25q615Lul5YmN55qE5omA5pyJ5pWw5o2u6L+b6KGM5rGH5oC777yM5Yqg5YWl6K6h566XXHJcblx0XHRcdGlmIChzdGFydERhdGUgJiYgZW5kRGF0ZSkge1xyXG5cdFx0XHRcdHZhbHVlcy51bnNoaWZ0KHtcclxuXHRcdFx0XHRcdGFtb3VudDogLWJlZm9yZVN0YXJ0TkFWQWRqLCAvLyDlvIDlp4vnmoTmlbDmja7pnIDopoHlj5blj41cclxuXHRcdFx0XHRcdGRhdGU6IHRoaXMucGJmLnRpbWUoc3RhcnREYXRlKSxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcImJlZm9yZVN0YXJ0VmFsdWVzOlwiLCBiZWZvcmVTdGFydFZhbHVlcyk7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwidmFsdWVzOlwiLCB2YWx1ZXMpO1xyXG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRsZXQgZ3Vlc3MgPSAwLjE7XHJcblx0XHRcdFx0Y29uc3Qgc3VtQW1vdW50ID0gdmFsdWVzXHJcblx0XHRcdFx0XHQubWFwKChpdGVtKSA9PiBpdGVtLmFtb3VudClcclxuXHRcdFx0XHRcdC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLCAwKTtcclxuXHRcdFx0XHRpZiAoc3VtQW1vdW50IDwgMCkge1xyXG5cdFx0XHRcdFx0Z3Vlc3MgPSAtMC4xO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvL1NNUDItMjI0OSBmaXhlZCB0aGUgYmlnIGlyciBpc3N1ZVxyXG5cdFx0XHRcdGlmIChzdW1BbW91bnQgPT09IDApIHtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSAwO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUl0ZW1zID0gdmFsdWVzLnNsaWNlKDAsIHZhbHVlcy5sZW5ndGggLSAxKTtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlTGlzdCA9IHZhbHVlSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmFtb3VudCk7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRlTGlzdCA9IHZhbHVlSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmRhdGUpO1xyXG5cdFx0XHRcdFx0Y29uc3QgbGFzdEl0ZW0gPSB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdO1xyXG5cdFx0XHRcdFx0Y29uc3QgbmF2QWRqdXN0ID0gbGFzdEl0ZW0uYW1vdW50O1xyXG5cdFx0XHRcdFx0Y29uc3QgbGF0ZXN0RGF0ZSA9IGxhc3RJdGVtLmRhdGU7XHJcblx0XHRcdFx0XHRsZXQgaXJyID1cclxuXHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5FeGNlbEZvcm11bGFzLl9DYWxjdWxhdGVYaXJyKFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlTGlzdCxcclxuXHRcdFx0XHRcdFx0XHRkYXRlTGlzdCxcclxuXHRcdFx0XHRcdFx0XHRuYXZBZGp1c3QsXHJcblx0XHRcdFx0XHRcdFx0bGF0ZXN0RGF0ZVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IGlyciA9PT0gbnVsbCA/IFwiXCIgOiBpcnI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwiYXJncy52YWx1ZTpcIiwgYXJncy52YWx1ZSk7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZSAmJlxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV1cclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV07XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXSA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IGFyZ3MuZmllbGROYW1lLFxyXG5cdFx0XHRcdFx0Zm9ybWF0OlxyXG5cdFx0XHRcdFx0XHRmaWVsZC5sZW5ndGggPiAwXHJcblx0XHRcdFx0XHRcdFx0PyBmaWVsZFswXS5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkXHJcblx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdFBlcmNlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmRwXHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHQ6IFwiUDJcIixcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gIFNNUDItMTY1MjAgVFdSIOaciC/lraMv5bm0ICYmIFNNUDItMTY2ODMgVkFSXHJcblx0XHRpZiAoXHJcblx0XHRcdFtcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVRXUk1URFwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVFdSUVREXCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVUV1JZVERcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVZBUk1URF85OVwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVkFSUVREXzk5XCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVWQVJZVERfOTlcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVZBUk1URF85NVwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVkFSUVREXzk1XCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVWQVJZVERfOTVcIixcclxuXHRcdFx0XS5pbmNsdWRlcyhhcmdzLmFnZ3JlZ2F0ZVR5cGUpXHJcblx0XHQpIHtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCI9PT09PT09PT09PT09PT09PT09PT09PT09PVwiKTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJhcmdzOlwiLCBhcmdzKTtcclxuXHRcdFx0bGV0IHZhbHVlRmllbGQgPSBcIklSUkFkalZhbHVlXCI7XHJcblx0XHRcdGxldCBkYXRlRmllbGQgPSBcIklSUkRhdGVcIjtcclxuXHRcdFx0bGV0IHRpbWVSYW5nZTtcclxuXHRcdFx0c3dpdGNoIChhcmdzLmFnZ3JlZ2F0ZVR5cGUpIHtcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVFdSTVREXCI6XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVZBUk1URF85OVwiOlxyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVWQVJNVERfOTVcIjpcclxuXHRcdFx0XHRcdHRpbWVSYW5nZSA9IFwibW9udGhcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVUV1JRVERcIjpcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVkFSUVREXzk5XCI6XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVZBUlFURF85NVwiOlxyXG5cdFx0XHRcdFx0dGltZVJhbmdlID0gXCJxdWFydGVyXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVFdSWVREXCI6XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVZBUllURF85OVwiOlxyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVWQVJZVERfOTVcIjpcclxuXHRcdFx0XHRcdHRpbWVSYW5nZSA9IFwieWVhclwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHRcdGxldCB2YWx1ZXMgPSBbXTsgLy8g6L+Z5Liq6Zi25q6155qE57Sv6K6h6ZuG5ZCIXHJcblx0XHRcdGxldCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRlbC5jb2xOYW1lID09PVxyXG5cdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRBZ2dyZWdhdGVUeXBlKFxyXG5cdFx0XHRcdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGVcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Y29uc3QgZGF0YSA9IHtcclxuXHRcdFx0XHRcdFt2YWx1ZUZpZWxkXTogYXJncy5jZWxsU2V0c1tpXVt2YWx1ZUZpZWxkXSxcclxuXHRcdFx0XHRcdGRhdGU6XHJcblx0XHRcdFx0XHRcdHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtkYXRlRmllbGRdKSA9PT1cclxuXHRcdFx0XHRcdFx0XCJJbnZhbGlkIGRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdD8gYXNPZkRhdGVcclxuXHRcdFx0XHRcdFx0XHQ6IHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtkYXRlRmllbGRdKSxcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdHZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyDlpoLmnpxhc09mRGF0ZeS4jeaYryDmnKzmnIgv5a2j5bqmL+W5tCDnmoTmnIDlkI7kuIDlpKnvvIzpg73mmK/miKroh7Mg5LiK5Liq5pyIL+Wto+W6pi/lubQg55qE5pyA5ZCO5LiA5aSp55qE5pWw5o2u5Y676K6h566XXHJcblx0XHRcdGxldCBfYXNPZkRhdGUgPSBtb21lbnQoYXNPZkRhdGUpO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcIl9hc09mRGF0ZTpcIiwgX2FzT2ZEYXRlKTtcclxuXHRcdFx0bGV0IGlzRW5kT2ZQZXJpb2QgPSAodW5pdCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiAoXHJcblx0XHRcdFx0XHRfYXNPZkRhdGUuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSA9PT1cclxuXHRcdFx0XHRcdF9hc09mRGF0ZS5lbmRPZih1bml0KS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fTtcclxuXHRcdFx0bGV0IGVuZERhdGUgPSBpc0VuZE9mUGVyaW9kKHRpbWVSYW5nZSlcclxuXHRcdFx0XHQ/IG1vbWVudChhc09mRGF0ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKVxyXG5cdFx0XHRcdDogbW9tZW50KGFzT2ZEYXRlKVxyXG5cdFx0XHRcdFx0XHQuc3VidHJhY3QoMSwgdGltZVJhbmdlKVxyXG5cdFx0XHRcdFx0XHQuZW5kT2YodGltZVJhbmdlKVxyXG5cdFx0XHRcdFx0XHQuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwiZW5kRGF0ZTpcIiwgZW5kRGF0ZSk7XHJcblx0XHRcdHZhbHVlcyA9IHZhbHVlcy5maWx0ZXIoKGl0ZW0pID0+XHJcblx0XHRcdFx0bW9tZW50KGl0ZW0uZGF0ZSkuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSlcclxuXHRcdFx0KTtcclxuXHRcdFx0dmFsdWVzID0gc29ydEJ5KHZhbHVlcywgXCJkYXRlXCIpO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcInZhbHVlczpcIiwgdmFsdWVzKTtcclxuXHJcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGxldCByZXN1bHQgPSB0aGlzLmdldFRpbWVSYW5nZXMoXHJcblx0XHRcdFx0XHR2YWx1ZXMsXHJcblx0XHRcdFx0XHRlbmREYXRlLFxyXG5cdFx0XHRcdFx0dGltZVJhbmdlLFxyXG5cdFx0XHRcdFx0XCJkYXRlXCJcclxuXHRcdFx0XHQpOyAvLyDlkITkuKrpmLbmrrXnmoTmlbDmja5cclxuXHRcdFx0XHRsZXQgcmVzdWx0VG90YWwgPSB7fTsgLy8g5ZCE5Liq6Zi25q615oC75ZKMXHJcblx0XHRcdFx0Zm9yIChjb25zdCBwcm9wIGluIHJlc3VsdCkge1xyXG5cdFx0XHRcdFx0cmVzdWx0VG90YWxbcHJvcF0gPSByZXN1bHRbcHJvcF0ucmVkdWNlKChhY2MsIGN1cikgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gYWNjICsgKGN1clt2YWx1ZUZpZWxkXSB8fCAwKTtcclxuXHRcdFx0XHRcdH0sIDApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcInJlc3VsdDpcIiwgcmVzdWx0KTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcInJlc3VsdFRvdGFsOlwiLCByZXN1bHRUb3RhbCk7XHJcblxyXG5cdFx0XHRcdGNvbnN0IGN1bXVsYXRpdmVTdW0gPSB7fTsgLy8g5ZCE5Liq6Zi25q6157Sv6K6h5ZKMXHJcblx0XHRcdFx0bGV0IHN1bSA9IDA7XHJcblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVzdWx0VG90YWwpKSB7XHJcblx0XHRcdFx0XHRzdW0gKz0gcmVzdWx0VG90YWxba2V5XTtcclxuXHRcdFx0XHRcdGN1bXVsYXRpdmVTdW1bYCR7a2V5fWBdID0gc3VtO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcImN1bXVsYXRpdmVTdW06XCIsIGN1bXVsYXRpdmVTdW0pO1xyXG5cclxuXHRcdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY3VtdWxhdGl2ZVN1bSk7XHJcblx0XHRcdFx0bGV0IHR3ckxpc3QgPSBbXTtcclxuXHRcdFx0XHQvLyDpgY3ljobmr4/kuKTkuKrpmLbmrrUg6K6h566XVFdSXHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aCAtIDE7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3Qga2V5MSA9IGtleXNbaV07XHJcblx0XHRcdFx0XHRjb25zdCBrZXkyID0ga2V5c1tpICsgMV07XHJcblxyXG5cdFx0XHRcdFx0Ly8g6K6h566X5Lik5Liq6Zi25q615LmL6Ze055qE6YCS5aKe6YePLCDlh7rmlbDkuI3og73kuLowXHJcblx0XHRcdFx0XHRpZiAoY3VtdWxhdGl2ZVN1bVtrZXkxXSAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGluY3JlbWVudCA9XHJcblx0XHRcdFx0XHRcdFx0Y3VtdWxhdGl2ZVN1bVtrZXkyXSAtIGN1bXVsYXRpdmVTdW1ba2V5MV07XHJcblx0XHRcdFx0XHRcdGxldCB0d3IgPSBpbmNyZW1lbnQgLyBjdW11bGF0aXZlU3VtW2tleTFdO1xyXG5cdFx0XHRcdFx0XHR0d3JMaXN0LnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdGRhdGU6IGtleTIsXHJcblx0XHRcdFx0XHRcdFx0dHdyOiB0d3IsXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyDorqHnrpdBdmVyYWdlIFRXUlxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwidHdyTGlzdDpcIiwgdHdyTGlzdCk7XHJcblx0XHRcdFx0bGV0IGF2ZXJhZ2VUV1IgPSB0aGlzLmNhbGN1bGF0ZUdyb3d0aFJhdGUoXHJcblx0XHRcdFx0XHR0d3JMaXN0Lm1hcCgoeCkgPT4geC50d3IpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcIuiuoeeul0F2ZXJhZ2UgVFdSOlwiLCBhdmVyYWdlVFdSKTtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRbXHJcblx0XHRcdFx0XHRcdFwiQ2FsY3VsYXRlVFdSTVREXCIsXHJcblx0XHRcdFx0XHRcdFwiQ2FsY3VsYXRlVFdSUVREXCIsXHJcblx0XHRcdFx0XHRcdFwiQ2FsY3VsYXRlVFdSWVREXCIsXHJcblx0XHRcdFx0XHRdLmluY2x1ZGVzKGFyZ3MuYWdncmVnYXRlVHlwZSlcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdC8vIFNNUDItMTY1MjAgVFdSIOaciC/lraMv5bm0XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID1cclxuXHRcdFx0XHRcdFx0aXNOYU4oYXZlcmFnZVRXUikgfHwgYXZlcmFnZVRXUiA9PSBudWxsXHJcblx0XHRcdFx0XHRcdFx0PyBcIlwiXHJcblx0XHRcdFx0XHRcdFx0OiBOdW1iZXIoYXZlcmFnZVRXUik7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGlmIChpc05hTihhdmVyYWdlVFdSKSB8fCBhdmVyYWdlVFdSID09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvLyBTTVAyLTE2NjgzIFZBUiDljLrliIY5OSXlkow5NSVcclxuXHRcdFx0XHRcdFx0bGV0IFpTY29yZSA9IFtcclxuXHRcdFx0XHRcdFx0XHRcIkNhbGN1bGF0ZVZBUk1URF85OVwiLFxyXG5cdFx0XHRcdFx0XHRcdFwiQ2FsY3VsYXRlVkFSUVREXzk5XCIsXHJcblx0XHRcdFx0XHRcdFx0XCJDYWxjdWxhdGVWQVJZVERfOTlcIixcclxuXHRcdFx0XHRcdFx0XS5pbmNsdWRlcyhhcmdzLmFnZ3JlZ2F0ZVR5cGUpXHJcblx0XHRcdFx0XHRcdFx0PyAyLjMzXHJcblx0XHRcdFx0XHRcdFx0OiAxLjY1O1xyXG5cdFx0XHRcdFx0XHRpZiAodHdyTGlzdC5sZW5ndGggPCAyKSB7XHJcblx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IFNEID0gdGhpcy5jYWxjdWxhdGVTdGFuZGFyZERldmlhdGlvbihcclxuXHRcdFx0XHRcdFx0XHRcdHR3ckxpc3QubWFwKCh4KSA9PiB4LnR3cilcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwiY2FsY3VsYXRlU3RhbmRhcmREZXZpYXRpb246XCIsIFNEKTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgVkFSID0gYXZlcmFnZVRXUiAtIFNEICogWlNjb3JlO1xyXG5cdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBOdW1iZXIoVkFSKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcImFyZ3MudmFsdWU6XCIsIGFyZ3MudmFsdWUpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUgJiZcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdO1xyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV0gPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBhcmdzLmZpZWxkTmFtZSxcclxuXHRcdFx0XHRcdGZvcm1hdDpcclxuXHRcdFx0XHRcdFx0ZmllbGQubGVuZ3RoID4gMFxyXG5cdFx0XHRcdFx0XHRcdD8gZmllbGRbMF0uZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZFxyXG5cdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5kcFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0OiBcIlAyXCIsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vU01QMi0yNzAxXHJcblx0XHRpZiAoYXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZUlSUkFjdHVhbEF1ZGl0ZWRcIikge1xyXG5cdFx0XHRsZXQgTkFWQWRqID0gMDtcclxuXHRcdFx0bGV0IHZhbHVlcyA9IFtdO1xyXG5cdFx0XHRsZXQgZmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0ZWwuY29sTmFtZSA9PT1cclxuXHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0QWdncmVnYXRlVHlwZShcclxuXHRcdFx0XHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlXHJcblx0XHRcdFx0XHQpXHJcblx0XHRcdCk7XHJcblx0XHRcdC8vU01QMi0yNzEzIG9ubHkganVkZ2UgZm9yIHRoaXMgZGF0YU1hcnQoR3Jvc3NOZXQpXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLnBvcnRsZXQuZmlndXJlQ29kZSA9PT0gXCJHcm9zc05ldFwiIHx8XHJcblx0XHRcdFx0dGhpcy5wb3J0bGV0LmZpZ3VyZUNvZGUgPT09XHJcblx0XHRcdFx0XHRcIkNvbWJpbmVkSW52ZXN0bWVudEZ1bmROQ29tcGFueUNhc2hmbG93XCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRhbW91bnQ6IGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJBbW91bnRcIl0sXHJcblx0XHRcdFx0XHRcdGRhdGU6XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW1wiSVJSRGF0ZVwiXSkgPT09XHJcblx0XHRcdFx0XHRcdFx0XCJJbnZhbGlkIGRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PyBhc09mRGF0ZVxyXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJEYXRlXCJdKSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHROQVZBZGogKz0gYXJncy5jZWxsU2V0c1tpXVtcIkFjdHVhbEF1ZGl0ZWROQVZcIl07XHJcblx0XHRcdFx0XHRpZiAoZGF0YS5hbW91bnQgIT0gMCkge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZXMucHVzaChkYXRhKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly9maWx0ZXIgdGhlIGRhdGEgYnkgdGhlIERhdGFUeXBlKEFjdHVhbCBSZXBvcnRlZCBBdWRpdGVkKVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRsZXQgYXJnc2RhdGEgPSBhcmdzLmNlbGxTZXRzLmZpbHRlcihcclxuXHRcdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdFx0ZWwuRGF0YVR5cGUgPT09IFwiQUNUVUFMX0FVRElURURcIiB8fFxyXG5cdFx0XHRcdFx0XHRlbC5EYXRhVHlwZSA9PT0gXCJSRVBPUlRFRFwiXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3NkYXRhLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRhbW91bnQ6IGFyZ3NkYXRhW2ldW1wiSVJSQW1vdW50XCJdLFxyXG5cdFx0XHRcdFx0XHRkYXRlOlxyXG5cdFx0XHRcdFx0XHRcdHRoaXMucGJmLnRpbWUoYXJnc2RhdGFbaV1bXCJJUlJEYXRlXCJdKSA9PT1cclxuXHRcdFx0XHRcdFx0XHRcIkludmFsaWQgZGF0ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHQ/IGFzT2ZEYXRlXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMucGJmLnRpbWUoYXJnc2RhdGFbaV1bXCJJUlJEYXRlXCJdKSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHROQVZBZGogKz0gYXJnc2RhdGFbaV1bXCJJUlJBZGpWYWx1ZVwiXTtcclxuXHRcdFx0XHRcdGlmIChkYXRhLmFtb3VudCAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoTkFWQWRqID4gMC4wMDAxIHx8IE5BVkFkaiA8IC0wLjAwMDEpIHtcclxuXHRcdFx0XHR2YWx1ZXMucHVzaCh7XHJcblx0XHRcdFx0XHRhbW91bnQ6IE5BVkFkaixcclxuXHRcdFx0XHRcdGRhdGU6IGFzT2ZEYXRlLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhbHVlcyA9IHNvcnRCeSh2YWx1ZXMsIFwiZGF0ZVwiKTtcclxuXHRcdFx0aWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0bGV0IGd1ZXNzID0gMC4xO1xyXG5cdFx0XHRcdGNvbnN0IHN1bUFtb3VudCA9IHZhbHVlc1xyXG5cdFx0XHRcdFx0Lm1hcCgoaXRlbSkgPT4gaXRlbS5hbW91bnQpXHJcblx0XHRcdFx0XHQucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VyciwgMCk7XHJcblx0XHRcdFx0aWYgKHN1bUFtb3VudCA8IDApIHtcclxuXHRcdFx0XHRcdGd1ZXNzID0gLTAuMTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly9TTVAyLTIyNDkgZml4ZWQgdGhlIGJpZyBpcnIgaXNzdWVcclxuXHRcdFx0XHRpZiAoc3VtQW1vdW50ID09PSAwKSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gMDtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVJdGVtcyA9IHZhbHVlcy5zbGljZSgwLCB2YWx1ZXMubGVuZ3RoIC0gMSk7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3QgPSB2YWx1ZUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5hbW91bnQpO1xyXG5cdFx0XHRcdFx0Y29uc3QgZGF0ZUxpc3QgPSB2YWx1ZUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5kYXRlKTtcclxuXHRcdFx0XHRcdGNvbnN0IGxhc3RJdGVtID0gdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAxXTtcclxuXHRcdFx0XHRcdGNvbnN0IG5hdkFkanVzdCA9IGxhc3RJdGVtLmFtb3VudDtcclxuXHRcdFx0XHRcdGNvbnN0IGxhdGVzdERhdGUgPSBsYXN0SXRlbS5kYXRlO1xyXG5cdFx0XHRcdFx0bGV0IGlyciA9XHJcblx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuRXhjZWxGb3JtdWxhcy5fQ2FsY3VsYXRlWGlycihcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3QsXHJcblx0XHRcdFx0XHRcdFx0ZGF0ZUxpc3QsXHJcblx0XHRcdFx0XHRcdFx0bmF2QWRqdXN0LFxyXG5cdFx0XHRcdFx0XHRcdGxhdGVzdERhdGVcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBpcnIgPT09IG51bGwgPyAwIDogaXJyO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gMDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUgJiZcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdO1xyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV0gPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBhcmdzLmZpZWxkTmFtZSxcclxuXHRcdFx0XHRcdGZvcm1hdDpcclxuXHRcdFx0XHRcdFx0ZmllbGQubGVuZ3RoID4gMFxyXG5cdFx0XHRcdFx0XHRcdD8gZmllbGRbMF0uZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZFxyXG5cdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5kcFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0OiBcIlAyXCIsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly9TTVAyLTM0MTFcclxuXHRcdGlmIChhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlSVJSUmVwb3J0ZWRcIikge1xyXG5cdFx0XHRsZXQgTkFWQWRqID0gMDtcclxuXHRcdFx0bGV0IHZhbHVlcyA9IFtdO1xyXG5cdFx0XHRsZXQgZmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0ZWwuY29sTmFtZSA9PT1cclxuXHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0QWdncmVnYXRlVHlwZShcclxuXHRcdFx0XHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlXHJcblx0XHRcdFx0XHQpXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLnBvcnRsZXQuZmlndXJlQ29kZSA9PT0gXCJHcm9zc05ldFwiIHx8XHJcblx0XHRcdFx0dGhpcy5wb3J0bGV0LmZpZ3VyZUNvZGUgPT09XHJcblx0XHRcdFx0XHRcIkNvbWJpbmVkSW52ZXN0bWVudEZ1bmROQ29tcGFueUNhc2hmbG93XCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRhbW91bnQ6IGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJBbW91bnRcIl0sXHJcblx0XHRcdFx0XHRcdGRhdGU6XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW1wiSVJSRGF0ZVwiXSkgPT09XHJcblx0XHRcdFx0XHRcdFx0XCJJbnZhbGlkIGRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PyBhc09mRGF0ZVxyXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJEYXRlXCJdKSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHROQVZBZGogKz0gYXJncy5jZWxsU2V0c1tpXVtcIlJlcG9ydGVkTkFWXCJdO1xyXG5cdFx0XHRcdFx0aWYgKGRhdGEuYW1vdW50ICE9IDApIHtcclxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goZGF0YSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5jZWxsU2V0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0YW1vdW50OiBhcmdzLmNlbGxTZXRzW2ldW1wiSVJSQW1vdW50XCJdLFxyXG5cdFx0XHRcdFx0XHRkYXRlOlxyXG5cdFx0XHRcdFx0XHRcdHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtcIklSUkRhdGVcIl0pID09PVxyXG5cdFx0XHRcdFx0XHRcdFwiSW52YWxpZCBkYXRlXCJcclxuXHRcdFx0XHRcdFx0XHRcdD8gYXNPZkRhdGVcclxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW1wiSVJSRGF0ZVwiXSksXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0TkFWQWRqICs9IGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJBZGpWYWx1ZVwiXTtcclxuXHRcdFx0XHRcdGlmIChkYXRhLmFtb3VudCAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoTkFWQWRqID4gMC4wMDAxIHx8IE5BVkFkaiA8IC0wLjAwMDEpIHtcclxuXHRcdFx0XHR2YWx1ZXMucHVzaCh7XHJcblx0XHRcdFx0XHRhbW91bnQ6IE5BVkFkaixcclxuXHRcdFx0XHRcdGRhdGU6IGFzT2ZEYXRlLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhbHVlcyA9IHNvcnRCeSh2YWx1ZXMsIFwiZGF0ZVwiKTtcclxuXHRcdFx0aWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0bGV0IGd1ZXNzID0gMC4xO1xyXG5cdFx0XHRcdGNvbnN0IHN1bUFtb3VudCA9IHZhbHVlc1xyXG5cdFx0XHRcdFx0Lm1hcCgoaXRlbSkgPT4gaXRlbS5hbW91bnQpXHJcblx0XHRcdFx0XHQucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VyciwgMCk7XHJcblx0XHRcdFx0aWYgKHN1bUFtb3VudCA8IDApIHtcclxuXHRcdFx0XHRcdGd1ZXNzID0gLTAuMTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly9TTVAyLTIyNDkgZml4ZWQgdGhlIGJpZyBpcnIgaXNzdWVcclxuXHRcdFx0XHRpZiAoc3VtQW1vdW50ID09PSAwKSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gMDtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVJdGVtcyA9IHZhbHVlcy5zbGljZSgwLCB2YWx1ZXMubGVuZ3RoIC0gMSk7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3QgPSB2YWx1ZUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5hbW91bnQpO1xyXG5cdFx0XHRcdFx0Y29uc3QgZGF0ZUxpc3QgPSB2YWx1ZUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5kYXRlKTtcclxuXHRcdFx0XHRcdGNvbnN0IGxhc3RJdGVtID0gdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAxXTtcclxuXHRcdFx0XHRcdGNvbnN0IG5hdkFkanVzdCA9IGxhc3RJdGVtLmFtb3VudDtcclxuXHRcdFx0XHRcdGNvbnN0IGxhdGVzdERhdGUgPSBsYXN0SXRlbS5kYXRlO1xyXG5cdFx0XHRcdFx0bGV0IGlyciA9XHJcblx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuRXhjZWxGb3JtdWxhcy5fQ2FsY3VsYXRlWGlycihcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3QsXHJcblx0XHRcdFx0XHRcdFx0ZGF0ZUxpc3QsXHJcblx0XHRcdFx0XHRcdFx0bmF2QWRqdXN0LFxyXG5cdFx0XHRcdFx0XHRcdGxhdGVzdERhdGVcclxuXHRcdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gaXJyID09PSBudWxsID8gMCA6IGlycjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IDA7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlICYmXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXTtcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdID0ge1xyXG5cdFx0XHRcdFx0bmFtZTogYXJncy5maWVsZE5hbWUsXHJcblx0XHRcdFx0XHRmb3JtYXQ6XHJcblx0XHRcdFx0XHRcdGZpZWxkLmxlbmd0aCA+IDBcclxuXHRcdFx0XHRcdFx0XHQ/IGZpZWxkWzBdLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0WzBdLmZvcm1hdENoZWNrZWRcclxuXHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZvcm1hdFBlcmNlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZHBcclxuXHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdDogXCJQMlwiLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZU11bHRpcGxlXCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZVBJQ1wiIHx8XHJcblx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVEUElcIiB8fFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlVFZQSVwiIHx8XHJcblx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVSVlBJXCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZU1BY3R1YWxBdWRpdGVkXCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZU1SZXBvcnRlZFwiXHJcblx0XHQpIHtcclxuXHRcdFx0bGV0IHRvdGFsTnVtZXJhdG9yID0gMDtcclxuXHRcdFx0bGV0IHRvdGFsRGVub21pbmF0b3IgPSAwO1xyXG5cdFx0XHRsZXQgbnVtZXJhdG9yTmFtZTtcclxuXHRcdFx0bGV0IGRlbm9taW5hdG9yTmFtZTtcclxuXHRcdFx0bGV0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdGVsLmNvbE5hbWUgPT09XHJcblx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmdldEFnZ3JlZ2F0ZVR5cGUoXHJcblx0XHRcdFx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZVxyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRpZiAoZmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGNvbnN0IGZvcm11bGFBcnJheSA9IGZpZWxkWzBdLmZvcm11bGEuc3BsaXQoXCIvXCIpO1xyXG5cdFx0XHRcdG51bWVyYXRvck5hbWUgPSBmb3JtdWxhQXJyYXlbMF07XHJcblx0XHRcdFx0ZGVub21pbmF0b3JOYW1lID0gZm9ybXVsYUFycmF5WzFdO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgYXJncy5jZWxsU2V0cy5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdHRvdGFsTnVtZXJhdG9yICs9IGFyZ3MuY2VsbFNldHNbal1bbnVtZXJhdG9yTmFtZV07XHJcblx0XHRcdFx0dG90YWxEZW5vbWluYXRvciArPSBhcmdzLmNlbGxTZXRzW2pdW2Rlbm9taW5hdG9yTmFtZV07XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRvdGFsRGVub21pbmF0b3IgIT09IDApIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gdG90YWxOdW1lcmF0b3IgLyB0b3RhbERlbm9taW5hdG9yO1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlICYmXHJcblx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW1xyXG5cdFx0XHRcdFx0XHRhcmdzLmZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV0gPSB7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGFyZ3MuZmllbGROYW1lLFxyXG5cdFx0XHRcdFx0XHRmb3JtYXQ6XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQubGVuZ3RoID4gMFxyXG5cdFx0XHRcdFx0XHRcdFx0PyBmaWVsZFswXS5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdE11bHRpcGxlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZm9ybWF0TXVsdGlwbGUoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5kcFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHRcdDogXCIjIyMwLjAwJ3gnXCIsXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiRmlyc3RcIiB8fCBhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiTGFzdFwiKSB7XHJcblx0XHRcdGFyZ3MudmFsdWUgPSB0aGlzLmNhbGN1bGF0ZWRGaXN0TGFzdChcclxuXHRcdFx0XHRhcmdzLFxyXG5cdFx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSxcclxuXHRcdFx0XHRhcmdzLmZpZWxkTmFtZVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNvdW50XCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkRpc3RpbmN0Q291bnRcIlxyXG5cdFx0KSB7XHJcblx0XHRcdGlmIChhcmdzLnZhbHVlKSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IGFyZ3MudmFsdWUudG9GaXhlZCgyKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChcclxuXHRcdFx0IWFyZ3MudmFsdWUgJiZcclxuXHRcdFx0YXJncy52YWx1ZSAhPT0gMCAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSBmYWxzZSAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSBcImZhbHNlXCJcclxuXHRcdCkge1xyXG5cdFx0XHRhcmdzLnNraXBGb3JtYXR0aW5nID0gdHJ1ZTtcclxuXHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHR9XHJcblx0XHQvLyDmlrDlu7pwaXZvdCB0YWJsZSwg6L+Y5rKh5pyJ6K6+572ucm93LCDpgInkuoZjb2x1bW7kuYvlkI5ncmFuZHRvdGFs5Lya5pyJ5YC8XHJcblx0XHRpZiAoXHJcblx0XHRcdGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwiZ3JhbmRUb3RhbFwiICYmXHJcblx0XHRcdCF0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzLmxlbmd0aFxyXG5cdFx0KSB7XHJcblx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0fVxyXG5cdFx0Ly9TTVAyLTI4ODlcclxuXHRcdGlmIChhcmdzLnJvd0NlbGxUeXBlID09PSBcInN1YlRvdGFsXCIpIHtcclxuXHRcdFx0Y29uc3QgdmFsdWVGaWVsZF9kYXRhID0gdGhpcy5jb25maWcueWF4aXMuc2VyaWVzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+IGVsLmNvbE5hbWUgPT09IGFyZ3MuZmllbGROYW1lXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmICh2YWx1ZUZpZWxkX2RhdGEubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGlmICh2YWx1ZUZpZWxkX2RhdGFbMF0uc2hvd1N1YlRvdGFscyA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHRcdFx0YXJncy5za2lwRm9ybWF0dGluZyA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAoYXJncy5yb3dDZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCIpIHtcclxuXHRcdFx0Y29uc3QgdmFsdWVGaWVsZF9kYXRhID0gdGhpcy5jb25maWcueWF4aXMuc2VyaWVzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+IGVsLmNvbE5hbWUgPT09IGFyZ3MuZmllbGROYW1lXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmICh2YWx1ZUZpZWxkX2RhdGEubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGlmICh2YWx1ZUZpZWxkX2RhdGFbMF0uc2hvd0dyYW5kVG90YWxzID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRhcmdzLnNraXBGb3JtYXR0aW5nID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdC8vIFNNUDItMzQxNiBzdGFydFxyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLnplcm9Gb3JtYXREYXRhLmhnTGlzdC5pbmNsdWRlcyhhcmdzLmZpZWxkTmFtZSkgJiZcclxuXHRcdFx0YXJncy52YWx1ZSA9PT0gMFxyXG5cdFx0KSB7XHJcblx0XHRcdGFyZ3MudmFsdWUgPSBcIi1cIjtcclxuXHRcdFx0YXJncy5za2lwRm9ybWF0dGluZyA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMuemVyb0Zvcm1hdERhdGEuZW1wdHlMaXN0LmluY2x1ZGVzKGFyZ3MuZmllbGROYW1lKSAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlID09PSAwXHJcblx0XHQpIHtcclxuXHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdGFyZ3Muc2tpcEZvcm1hdHRpbmcgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLm1pbGxpb25GaWVsZHMuaW5jbHVkZXMoYXJncy5maWVsZE5hbWUpICYmXHJcblx0XHRcdCFpc05hTihOdW1iZXIoYXJncy52YWx1ZSkpICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IDAgJiZcclxuXHRcdFx0YXJncy52YWx1ZSAhPT0gXCJcIiAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSBudWxsXHJcblx0XHQpIHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGFyZ3MuY29sdW1uQ2VsbFR5cGUgPT0gXCJncmFuZFRvdGFsXCIgJiZcclxuXHRcdFx0XHRhcmdzLnJvd0NlbGxUeXBlID09IFwiZ3JhbmRUb3RhbFwiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGlmICghdGhpcy50b3RhbEZvcm1hdHRlZFthcmdzLmZpZWxkTmFtZV0pIHtcclxuXHRcdFx0XHRcdHRoaXMudG90YWxGb3JtYXR0ZWRbYXJncy5maWVsZE5hbWVdID0gdHJ1ZTtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBhcmdzLnZhbHVlIC8gMTAwMDAwMDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IGFyZ3MudmFsdWUgLyAxMDAwMDAwO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU01QMi0yNDg2ICYgcGVyY2VudE51beeahGZvcm1hdOmXrumimFxyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLnBlcmNlbnROdW1GaWVsZHMubGVuZ3RoICYmXHJcblx0XHRcdHRoaXMucGVyY2VudE51bUZpZWxkcy5pbmNsdWRlcyhhcmdzLmZpZWxkTmFtZSkgJiZcclxuXHRcdFx0IWlzTmFOKE51bWJlcihhcmdzLnZhbHVlKSkgJiZcclxuXHRcdFx0YXJncy52YWx1ZSAhPT0gMCAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSBcIlwiICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IG51bGxcclxuXHRcdCkge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0YXJncy5jb2x1bW5DZWxsVHlwZSA9PSBcImdyYW5kVG90YWxcIiAmJlxyXG5cdFx0XHRcdGFyZ3Mucm93Q2VsbFR5cGUgPT0gXCJncmFuZFRvdGFsXCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLnRvdGFsRm9ybWF0dGVkW2FyZ3MuZmllbGROYW1lXSkge1xyXG5cdFx0XHRcdFx0dGhpcy50b3RhbEZvcm1hdHRlZFthcmdzLmZpZWxkTmFtZV0gPSB0cnVlO1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IGFyZ3MudmFsdWUgLyAxMDA7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSBhcmdzLnZhbHVlIC8gMTAwO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAoXHJcblx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PSBcIkNhbGN1bGF0ZWRGaWVsZFwiICYmXHJcblx0XHRcdCFpc05hTihOdW1iZXIoYXJncy52YWx1ZSkpICYmXHJcblx0XHRcdCF0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdLmZvcm1hdFxyXG5cdFx0KSB7XHJcblx0XHRcdGFyZ3MudmFsdWUgPSBOdW1iZXIoYXJncy52YWx1ZSkudG9GaXhlZCgyKTtcclxuXHRcdH1cclxuXHRcdC8vIFNNUDItMzQxNiBlbmRcclxuXHRcdHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cdFx0dGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjYWxjdWxhdGVkRmlzdExhc3QoYXJncywgYWdncmVnYXRlVHlwZSwgZmllbGROYW1lKSB7XHJcblx0XHRpZiAoIWFyZ3Mucm93LmFjdHVhbFRleHQpIGFyZ3Mucm93LmFjdHVhbFRleHQgPSBhcmdzLnJvdy5mb3JtYXR0ZWRUZXh0O1xyXG5cdFx0aWYgKCFhcmdzLmNvbHVtbi5hY3R1YWxUZXh0KVxyXG5cdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ID0gYXJncy5jb2x1bW4uZm9ybWF0dGVkVGV4dDtcclxuXHRcdGxldCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0KGVsKSA9PiBlbC5jb2xOYW1lID09PSBmaWVsZE5hbWVcclxuXHRcdClbMF07XHJcblx0XHRpZiAoYXJncy5yb3dDZWxsVHlwZSA9PT0gXCJ2YWx1ZVwiICYmICFhcmdzLnJvdy5oYXNDaGlsZCkge1xyXG5cdFx0XHRpZiAoYXJncy5jZWxsU2V0c1swXSkge1xyXG5cdFx0XHRcdGlmIChhZ2dyZWdhdGVUeXBlID09PSBcIkZpcnN0XCIpIHtcclxuXHRcdFx0XHRcdGZvciAoXHJcblx0XHRcdFx0XHRcdGxldCBmaXJzdEluZGV4ID0gMDtcclxuXHRcdFx0XHRcdFx0Zmlyc3RJbmRleCA8IGFyZ3MuY2VsbFNldHMubGVuZ3RoO1xyXG5cdFx0XHRcdFx0XHRmaXJzdEluZGV4KytcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGggPT1cclxuXHRcdFx0XHRcdFx0XHRcdDEgJiZcclxuXHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbkNlbGxUeXBlID09IFwiZ3JhbmRUb3RhbFwiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwic3RyaW5nXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibnZhcmNoYXJcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJkYXRlXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWUgJiZcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoXHJcblx0XHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianMgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsRGF0YVZhbHVlW2FyZ3Mucm93LnJvd0luZGV4XTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJvd09ianMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgcm93T2Jqc0FyciA9IEpTT04ucGFyc2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRKU09OLnN0cmluZ2lmeShyb3dPYmpzKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IG9iaiA9IHJvd09ianNBcnIuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5hY3R1YWxUZXh0ID09IGZpZWxkTmFtZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5pc0dyYW5kU3VtXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KVswXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAob2JqKSBhcmdzLnZhbHVlID0gb2JqLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gaXNOYU4oXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBudWxsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OiBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICApO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gYXJncy5jZWxsU2V0c1tmaXJzdEluZGV4XVtmaWVsZE5hbWVdO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcIm51bWJlclwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJtdWx0aXBsZVwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJwZXJjZW50XCIgfHxcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcInBlcmNlbnROdW1cIlxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoYXJncy52YWx1ZSAhPSBudWxsKSBicmVhaztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5wYmYudGltZShhcmdzLnZhbHVlKSA+IFwiMTkwMC0wMS0wMVwiKSBicmVhaztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChhcmdzLnZhbHVlKSBicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGFnZ3JlZ2F0ZVR5cGUgPT09IFwiTGFzdFwiKSB7XHJcblx0XHRcdFx0XHRmb3IgKFxyXG5cdFx0XHRcdFx0XHRsZXQgbGFzdEluZGV4ID0gYXJncy5jZWxsU2V0cy5sZW5ndGggLSAxO1xyXG5cdFx0XHRcdFx0XHRsYXN0SW5kZXggPj0gMDtcclxuXHRcdFx0XHRcdFx0bGFzdEluZGV4LS1cclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGggPT1cclxuXHRcdFx0XHRcdFx0XHRcdDEgJiZcclxuXHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbkNlbGxUeXBlID09IFwiZ3JhbmRUb3RhbFwiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwic3RyaW5nXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibnZhcmNoYXJcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJkYXRlXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWUgJiZcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoXHJcblx0XHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianMgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsRGF0YVZhbHVlW2FyZ3Mucm93LnJvd0luZGV4XTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJvd09ianMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgcm93T2Jqc0FyciA9IEpTT04ucGFyc2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRKU09OLnN0cmluZ2lmeShyb3dPYmpzKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IG9iaiA9IHJvd09ianNBcnIuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5hY3R1YWxUZXh0ID09IGZpZWxkTmFtZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5pc0dyYW5kU3VtXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KVswXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAob2JqKSBhcmdzLnZhbHVlID0gb2JqLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gaXNOYU4oXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBudWxsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OiBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICApO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gYXJncy5jZWxsU2V0c1tsYXN0SW5kZXhdW2ZpZWxkTmFtZV07XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcIm51bWJlclwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJtdWx0aXBsZVwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJwZXJjZW50XCIgfHxcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcInBlcmNlbnROdW1cIlxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoYXJncy52YWx1ZSAhPSBudWxsKSBicmVhaztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5wYmYudGltZShhcmdzLnZhbHVlKSA+IFwiMTkwMC0wMS0wMVwiKSBicmVhaztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChhcmdzLnZhbHVlKSBicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibnVtYmVyXCIgfHxcclxuXHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibXVsdGlwbGVcIiB8fFxyXG5cdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJwZXJjZW50XCIgfHxcclxuXHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwicGVyY2VudE51bVwiXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0aWYgKCF0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdCFOdW1iZXIodGhpcy5ncmFuZFRvdGFsc1tmaWVsZE5hbWVdKSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0aXNOYU4oTnVtYmVyKHRoaXMuZ3JhbmRUb3RhbHNbZmllbGROYW1lXSkpXHJcblx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW2ZpZWxkTmFtZV0gPSAwO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRpZiAoYXJncy5hZ2dyZWdhdGVUeXBlICE9PSBcIkNhbGN1bGF0ZWRGaWVsZFwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW2ZpZWxkTmFtZV0gKz0gTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCA9PSAxXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIFwicm93XCIgKyBhcmdzLnJvdy5hY3R1YWxUZXh0ICsgZmllbGROYW1lIOihqOekuihjZWxsOiBhcmdzLnJvd0NlbGxUeXBlID09PSBcInZhbHVlXCIgJiYgYXJncy5jb2x1bW5DZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCIpXHJcblx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0IU51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICsgYXJncy5yb3cuYWN0dWFsVGV4dCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHQpIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRpc05hTihcclxuXHRcdFx0XHRcdFx0XHRcdFx0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArIGFyZ3Mucm93LmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdF0gPSAwO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArIGFyZ3Mucm93LmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRdICs9IE51bWJlcihhcmdzLnZhbHVlKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0Ly8gXCJjb2xcIiArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWUg6KGo56S6KGNlbGw6IGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwiZ3JhbmRUb3RhbFwiICYmIGFyZ3MuY29sdW1uQ2VsbFR5cGUgPT09IFwidmFsdWVcIilcclxuXHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHQhTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHRcdFx0KSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0aXNOYU4oXHJcblx0XHRcdFx0XHRcdFx0XHRcdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgKyBhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRdID0gMDtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgKyBhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XSArPSBOdW1iZXIoYXJncy52YWx1ZSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoYXJncy5yb3dDZWxsVHlwZSA9PT0gXCJzdWJUb3RhbFwiIHx8IGFyZ3Mucm93Lmhhc0NoaWxkKSB7XHJcblx0XHRcdGNvbnN0IGRhdGFUeXBlID0gZmllbGQuZGF0YVR5cGU7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRkYXRhVHlwZSA9PT0gXCJzdHJpbmdcIiB8fFxyXG5cdFx0XHRcdGRhdGFUeXBlID09PSBcIm52YXJjaGFyXCIgfHxcclxuXHRcdFx0XHRkYXRhVHlwZSA9PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdGRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRsZXQgdmFsdWUgPSAwO1xyXG5cdFx0XHRcdGxldCBjaGlsZEhlYWRlcnMgPSBbXTtcclxuXHRcdFx0XHRpZiAoYWdncmVnYXRlVHlwZSA9PT0gXCJGaXJzdFwiKSB7XHJcblx0XHRcdFx0XHRsZXQgZ3JvdXBOYW1lQXJyYXlzID0gW107XHJcblx0XHRcdFx0XHRsZXQgcm93cyA9IHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3M7XHJcblx0XHRcdFx0XHRmb3IgKFxyXG5cdFx0XHRcdFx0XHRsZXQgaW5kZXggPSBhcmdzLnJvdy5sZXZlbDtcclxuXHRcdFx0XHRcdFx0aW5kZXggPCByb3dzLmxlbmd0aDtcclxuXHRcdFx0XHRcdFx0aW5kZXgrK1xyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdGdyb3VwTmFtZUFycmF5cy5wdXNoKHJvd3NbaW5kZXhdLm5hbWUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdGxldCB2YWx1ZXMgPSBbXTtcclxuXHRcdFx0XHRcdFx0bGV0IGhlYWRlciA9IGdyb3VwTmFtZUFycmF5c1xyXG5cdFx0XHRcdFx0XHRcdC5tYXAoKG5hbWUpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGFyZ3MuY2VsbFNldHNbaV1bbmFtZV0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGFyZ3MuY2VsbFNldHNbaV1bbmFtZV07XHJcblx0XHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0XHQuam9pbihcIi1cIik7XHJcblx0XHRcdFx0XHRcdGlmICghKGNoaWxkSGVhZGVycyBhcyBhbnkpLmluY2x1ZGVzKGhlYWRlcikpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZmlsdGVyT2JqOiBhbnkgPSB7fTtcclxuXHRcdFx0XHRcdFx0XHRncm91cE5hbWVBcnJheXMubWFwKFxyXG5cdFx0XHRcdFx0XHRcdFx0KG5hbWUsIHgpID0+IChmaWx0ZXJPYmpbbmFtZV0gPSB2YWx1ZXNbeF0pXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgX0NlbGxTZXRzID0gX2ZpbHRlcihhcmdzLmNlbGxTZXRzLCBmaWx0ZXJPYmopO1xyXG5cdFx0XHRcdFx0XHRcdGNoaWxkSGVhZGVycy5wdXNoKGhlYWRlcik7XHJcblx0XHRcdFx0XHRcdFx0dmFsdWUgKz0gTnVtYmVyKF9DZWxsU2V0c1swXVtmaWVsZE5hbWVdKSB8fCAwO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChhZ2dyZWdhdGVUeXBlID09PSBcIkxhc3RcIikge1xyXG5cdFx0XHRcdFx0bGV0IGdyb3VwTmFtZUFycmF5cyA9IFtdO1xyXG5cdFx0XHRcdFx0bGV0IHJvd3MgPSB0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzO1xyXG5cdFx0XHRcdFx0Zm9yIChcclxuXHRcdFx0XHRcdFx0bGV0IGluZGV4ID0gYXJncy5yb3cubGV2ZWw7XHJcblx0XHRcdFx0XHRcdGluZGV4IDwgcm93cy5sZW5ndGg7XHJcblx0XHRcdFx0XHRcdGluZGV4KytcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRncm91cE5hbWVBcnJheXMucHVzaChyb3dzW2luZGV4XS5uYW1lKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSBhcmdzLmNlbGxTZXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcblx0XHRcdFx0XHRcdGxldCB2YWx1ZXMgPSBbXTtcclxuXHRcdFx0XHRcdFx0bGV0IGhlYWRlciA9IGdyb3VwTmFtZUFycmF5c1xyXG5cdFx0XHRcdFx0XHRcdC5tYXAoKG5hbWUpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGFyZ3MuY2VsbFNldHNbaV1bbmFtZV0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGFyZ3MuY2VsbFNldHNbaV1bbmFtZV07XHJcblx0XHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0XHQuam9pbihcIi1cIik7XHJcblx0XHRcdFx0XHRcdGlmICghKGNoaWxkSGVhZGVycyBhcyBhbnkpLmluY2x1ZGVzKGhlYWRlcikpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZmlsdGVyT2JqOiBhbnkgPSB7fTtcclxuXHRcdFx0XHRcdFx0XHRncm91cE5hbWVBcnJheXMubWFwKFxyXG5cdFx0XHRcdFx0XHRcdFx0KG5hbWUsIHgpID0+IChmaWx0ZXJPYmpbbmFtZV0gPSB2YWx1ZXNbeF0pXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgX0NlbGxTZXRzID0gX2ZpbHRlcihhcmdzLmNlbGxTZXRzLCBmaWx0ZXJPYmopO1xyXG5cdFx0XHRcdFx0XHRcdGNoaWxkSGVhZGVycy5wdXNoKGhlYWRlcik7XHJcblx0XHRcdFx0XHRcdFx0dmFsdWUgKz1cclxuXHRcdFx0XHRcdFx0XHRcdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0X0NlbGxTZXRzW19DZWxsU2V0cy5sZW5ndGggLSAxXVtmaWVsZE5hbWVdXHJcblx0XHRcdFx0XHRcdFx0XHQpIHx8IDA7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICE9PSBcIkdyYW5kIFRvdGFsXCIpXHJcblx0XHRcdFx0XHR0aGlzLmNvbHVtblRleHRzLnB1c2goYXJncy5jb2x1bW4uYWN0dWFsVGV4dCk7XHJcblxyXG5cdFx0XHRcdGlmICghdGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0IU51bWJlcih0aGlzLnN1YlRvdGFsc1tmaWVsZE5hbWVdKSB8fFxyXG5cdFx0XHRcdFx0XHRpc05hTihOdW1iZXIodGhpcy5zdWJUb3RhbHNbZmllbGROYW1lXSkpXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zdWJUb3RhbHNbZmllbGROYW1lXSA9IDA7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tmaWVsZE5hbWVdICs9IE51bWJlcih2YWx1ZSk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbHVtbnMubGVuZ3RoID09IDFcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0IU51bWJlcihcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHQpIHx8XHJcblx0XHRcdFx0XHRcdGlzTmFOKFxyXG5cdFx0XHRcdFx0XHRcdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc3ViVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdF0gPSAwO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dGhpcy5zdWJUb3RhbHNbXHJcblx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgKyBhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRdICs9IE51bWJlcih2YWx1ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIC0tLT4gYWxsRGF0YVZhbHVl5Lit6L+Z5Liq5Y2V5YWD5qC855qE5YC85LiN5q2j56GuXHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0YXJncy5jb2x1bW5DZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCIgJiZcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbHVtbnMubGVuZ3RoID09IDFcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLmFsbERhdGFWYWx1ZSAmJiB0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zdWJUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICsgXCJHcmFuZCBUb3RhbFwiICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuY29sdW1uVGV4dHMgPSB1bmlxQnkodGhpcy5jb2x1bW5UZXh0cywgKGVsKSA9PiBlbCk7XHJcblx0XHRcdFx0XHRcdGxldCB2YWwgPSAwO1xyXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uVGV4dHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBlbGVtZW50ID0gdGhpcy5jb2x1bW5UZXh0c1tpXTtcclxuXHRcdFx0XHRcdFx0XHR2YWwgKz1cclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc3ViVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICsgZWxlbWVudCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gdmFsO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gdmFsdWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwiZ3JhbmRUb3RhbFwiKSB7XHJcblx0XHRcdGNvbnN0IGRhdGFUeXBlID0gZmllbGQuZGF0YVR5cGU7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRkYXRhVHlwZSA9PSBcInN0cmluZ1wiIHx8XHJcblx0XHRcdFx0ZGF0YVR5cGUgPT0gXCJudmFyY2hhclwiIHx8XHJcblx0XHRcdFx0ZGF0YVR5cGUgPT0gXCJkYXRlXCIgfHxcclxuXHRcdFx0XHRkYXRhVHlwZSA9PSBcImRhdGV0aW1lXCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuYWxsRGF0YVZhbHVlICYmIHRoaXMuYWxsRGF0YVZhbHVlLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRsZXQgcm93T2JqcyA9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWVbdGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoIC0gMV07XHJcblx0XHRcdFx0XHRcdGlmIChyb3dPYmpzKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianNBcnIgPSBKU09OLnBhcnNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0SlNPTi5zdHJpbmdpZnkocm93T2JqcylcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGxldCBvYmpBcnIgPSByb3dPYmpzQXJyLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWwuYWN0dWFsVGV4dCA9PSBmaWVsZE5hbWUgJiYgZWwuaXNHcmFuZFN1bVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKG9iakFyciAmJiBvYmpBcnIubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gb2JqQXJyW29iakFyci5sZW5ndGggLSAxXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0T2JqZWN0LmtleXModGhpcy5ncmFuZFRvdGFscykuaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IHRoaXMuZ3JhbmRUb3RhbHNbZmllbGROYW1lXTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSB0aGlzLmdyYW5kVG90YWxzW2ZpZWxkTmFtZV07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGlmIChhcmdzLmNvbHVtbkNlbGxUeXBlID09PSBcImdyYW5kVG90YWxcIikge1xyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5hbGxEYXRhVmFsdWUgJiYgdGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianMgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWVbdGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoIC0gMV07XHJcblx0XHRcdFx0XHRcdFx0aWYgKHJvd09ianMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGxldCByb3dPYmpzQXJyID0gSlNPTi5wYXJzZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0SlNPTi5zdHJpbmdpZnkocm93T2JqcylcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRsZXQgb2JqQXJyID0gcm93T2Jqc0Fyci5maWx0ZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5hY3R1YWxUZXh0ID09IGZpZWxkTmFtZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsLmlzR3JhbmRTdW1cclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAob2JqQXJyICYmIG9iakFyci5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b2JqQXJyW29iakFyci5sZW5ndGggLSAxXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKHRoaXMuZ3JhbmRUb3RhbHMpLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcImNvbFwiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLmFsbERhdGFWYWx1ZSAmJiB0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgcm93T2JqcyA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZVt0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGggLSAxXTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgcm93T2Jqc0FyciA9IEpTT04ucGFyc2UoXHJcblx0XHRcdFx0XHRcdFx0XHRKU09OLnN0cmluZ2lmeShyb3dPYmpzKVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0bGV0IG9iakFyciA9IHJvd09ianNBcnIuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbC5hY3R1YWxUZXh0ID09IGZpZWxkTmFtZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbC5pc0dyYW5kU3VtICYmXHJcblx0XHRcdFx0XHRcdFx0XHRcdGVsLmNvbHVtbkhlYWRlcnMgPT0gYXJncy5jb2x1bW4uYWN0dWFsVGV4dFxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKG9iakFyciAmJiBvYmpBcnIubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gb2JqQXJyW29iakFyci5sZW5ndGggLSAxXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0T2JqZWN0LmtleXModGhpcy5ncmFuZFRvdGFscykuaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgKyBhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcImNvbFwiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHRoaXMuZm9ybWF0VmFsKGFyZ3MsIGZpZWxkTmFtZSk7XHJcblx0XHRyZXR1cm4gYXJncy52YWx1ZTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZm9ybWF0VmFsKGFyZ3MsIGZpZWxkTmFtZSkge1xyXG5cdFx0dGhpcy5jb25maWdGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuXHRcdFx0aWYgKGZpZWxkLmNvbE5hbWUgPT0gZmllbGROYW1lKSB7XHJcblx0XHRcdFx0c3dpdGNoIChmaWVsZC5kYXRhVHlwZSkge1xyXG5cdFx0XHRcdFx0Y2FzZSBcImRhdGVcIjpcclxuXHRcdFx0XHRcdGNhc2UgXCJkYXRldGltZVwiOlxyXG5cdFx0XHRcdFx0XHRpZiAoYXJncy52YWx1ZSkgYXJncy52YWx1ZSA9IG5ldyBEYXRlKGFyZ3MudmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldGV4Y2x1ZGVGaWVsZHMoZmllbGRzLCBkYXRhKSB7XHJcblx0XHRsZXQgbmFtZWFycmF5ID0gW107XHJcblx0XHRsZXQgYXJyYXkgPSBbXTtcclxuXHRcdGZvciAobGV0IHByb3AgaW4gZGF0YSkge1xyXG5cdFx0XHRhcnJheS5wdXNoKHByb3ApO1xyXG5cdFx0fVxyXG5cdFx0Zm9yIChsZXQgaXRlbSBvZiBmaWVsZHMpIHtcclxuXHRcdFx0bmFtZWFycmF5LnB1c2goaXRlbS5jb2xOYW1lKTtcclxuXHRcdH1cclxuXHRcdHRoaXMuZXhjbHVkZUZpZWxkcyA9IGRpZmZlcmVuY2VXaXRoKGFycmF5LCBuYW1lYXJyYXkpO1xyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLmV4Y2x1ZGVGaWVsZHMubGVuZ3RoICYmXHJcblx0XHRcdHRoaXMuY29uZmlnLmdyb3VwU2V0dGluZ3MgJiZcclxuXHRcdFx0dGhpcy5jb25maWcuZ3JvdXBTZXR0aW5ncy5sZW5ndGhcclxuXHRcdCkge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZXhjbHVkZUZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGNvbnN0IGVsID0gdGhpcy5leGNsdWRlRmllbGRzW2ldO1xyXG5cdFx0XHRcdGlmIChzdGFydHNXaXRoKGVsLCB0aGlzLmNvbmZpZy5ncm91cFNldHRpbmdzWzBdLm5hbWUgKyBcIl9cIikpIHtcclxuXHRcdFx0XHRcdHRoaXMuZXhjbHVkZUZpZWxkcy5zcGxpY2UoaSwgMSk7XHJcblx0XHRcdFx0XHRpLS07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldEluZm8oKSB7XHJcblx0XHR0aGlzLmRhdGVQaXBlRm9ybWF0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJkYXRlUGlwZVwiKTtcclxuXHRcdHRoaXMudHJhbnNsYXRpb24gPSBnZXRUcmFuc2xhdGlvbigpXHJcblx0fVxyXG5cclxuXHRwdWJsaWMgb25GaWVsZERyb3AoYXJnczogRmllbGREcm9wRXZlbnRBcmdzKSB7XHJcblx0XHR0aGlzLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZXMgPSBbLi4uYXJncy5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVzXTtcclxuXHRcdC8vY2hhbmdlIHRoZSBjYWxjdWFsdGVGaWVsZCBtZXRob2QgdXNlIHRoZSBjb3JyZXNwb25kaW5nIGNhbGN1bGF0ZVxyXG5cdFx0Y29uc3QgY2FsY3VhbHRlRmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gYXJncy5maWVsZE5hbWUgJiYgZWwuaXNDYWxjdWxhdGVkRmllbGRcclxuXHRcdCk7XHJcblx0XHRpZiAoY2FsY3VhbHRlRmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRhcmdzLmRyb3BGaWVsZC50eXBlID1cclxuXHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmdldENhbGN1bGF0ZU1ldGhvZChcclxuXHRcdFx0XHRcdGNhbGN1YWx0ZUZpZWxkWzBdLmNvbE5hbWVcclxuXHRcdFx0XHQpIGFzIGFueTtcclxuXHRcdFx0YXJncy5kcm9wRmllbGQuY2FwdGlvbiA9IGFyZ3MuZHJvcEZpZWxkLmNhcHRpb25cclxuXHRcdFx0XHQucmVwbGFjZShcIkNhbGN1bGF0ZVwiLCBcIlwiKVxyXG5cdFx0XHRcdC50cmltKCk7XHJcblx0XHR9XHJcblx0XHRmb3IgKFxyXG5cdFx0XHRsZXQgaSA9IDA7XHJcblx0XHRcdGkgPCBhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5maWx0ZXJTZXR0aW5ncy5sZW5ndGg7XHJcblx0XHRcdGkrK1xyXG5cdFx0KSB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5maWx0ZXJTZXR0aW5nc1tpXS5uYW1lID09PVxyXG5cdFx0XHRcdFx0YXJncy5maWVsZE5hbWUgJiZcclxuXHRcdFx0XHRhcmdzLmRyb3BBeGlzID09PSBcIlwiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLmZpbHRlclNldHRpbmdzLnNwbGljZShpLCAxKTtcclxuXHRcdFx0XHR0aGlzLmZpbHRlclNldHRpbmdzID0gYXJncy5kYXRhU291cmNlU2V0dGluZ3MuZmlsdGVyU2V0dGluZ3M7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIENhbGN1bGF0ZWQgZmllbGTkuovku7bvvJrliJvlu7pcclxuXHRwdWJsaWMgY2FsY3VsYXRlZEZpZWxkQ3JlYXRlKGFyZ3M6IENhbGN1bGF0ZWRGaWVsZENyZWF0ZUV2ZW50QXJncykge1xyXG5cdFx0aWYgKFxyXG5cdFx0XHRhcmdzLmNhbGN1bGF0ZWRGaWVsZC5uYW1lICE9PSBcIlwiICYmXHJcblx0XHRcdGFyZ3MuY2FsY3VsYXRlZEZpZWxkLm5hbWUudHJpbSgpICE9PSBcIlwiXHJcblx0XHQpIHtcclxuXHRcdFx0bGV0IGluZGV4ID1cclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MuZmluZEluZGV4KFxyXG5cdFx0XHRcdFx0KGVsKSA9PiBlbC5uYW1lID09PSBhcmdzLmNhbGN1bGF0ZWRGaWVsZC5uYW1lXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0aWYgKGluZGV4ICE9PSAtMSkge1xyXG5cdFx0XHRcdGlmIChhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtYXRTdHJpbmcgPT09IFwiXCIpIHtcclxuXHRcdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jYWxjdWxhdGVkRmllbGRTZXR0aW5nc1tcclxuXHRcdFx0XHRcdFx0aW5kZXhcclxuXHRcdFx0XHRcdF0uZm9ybWF0U3RyaW5nID0gXCJOMlwiO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3NbXHJcblx0XHRcdFx0XHRcdGluZGV4XHJcblx0XHRcdFx0XHRdLmZvcm1hdFN0cmluZyA9IGFyZ3MuY2FsY3VsYXRlZEZpZWxkLmZvcm1hdFN0cmluZztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYgKGFyZ3MuY2FsY3VsYXRlZEZpZWxkLmZvcm1hdFN0cmluZyA9PT0gXCJcIikge1xyXG5cdFx0XHRcdFx0YXJncy5jYWxjdWxhdGVkRmllbGQuZm9ybWF0U3RyaW5nID0gXCJOMlwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvLyDnp7vpmaTph43lpI1cclxuXHRcdFx0bGV0IGZJbmRleCA9IHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcy5maW5kSW5kZXgoXHJcblx0XHRcdFx0KGYpID0+IGYubmFtZSA9PT0gYXJncy5jYWxjdWxhdGVkRmllbGQubmFtZVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRpZiAoZkluZGV4ID4gLTEpIHtcclxuXHRcdFx0XHR0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMuc3BsaWNlKGZJbmRleCwgMSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8g5Yy56YWN6L+Q566X56ymIEZpcnN0IHx8IExhc3RcclxuXHRcdFx0bGV0IGZvcm11bGFTdHIgPSBhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtdWxhO1xyXG5cdFx0XHRsZXQgcmVnMSA9IC9cIkZpcnN0XFwoKC4rPylcXClcIi9nO1xyXG5cdFx0XHRsZXQgcmVnMiA9IC9cIkxhc3RcXCgoLis/KVxcKVwiL2c7XHJcblx0XHRcdGlmIChyZWcxLnRlc3QoZm9ybXVsYVN0cikgfHwgcmVnMi50ZXN0KGZvcm11bGFTdHIpKSB7XHJcblx0XHRcdFx0Ly8g5Yik5pat5piv5ZCm5a2Y5ZyoRmlyc3QgfHwgTGFzdCDooajovr7lvI9cclxuXHRcdFx0XHRsZXQgbWF0Y2hGaXJzdEZpZWxkcyA9IEFycmF5LmZyb20oXHJcblx0XHRcdFx0XHRmb3JtdWxhU3RyW1wibWF0Y2hBbGxcIl0oL1wiRmlyc3RcXCgoLis/KVxcKVwiL2cpLFxyXG5cdFx0XHRcdFx0KG0pID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFN0cjogbVswXSxcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFdvcmQ6IG1bMV0sXHJcblx0XHRcdFx0XHRcdFx0cmVwbGFjZVZhbHVlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoTWV0aG9kOiBcIkZpcnN0XCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRsZXQgbWF0Y2hMYXN0RmllbGRzID0gQXJyYXkuZnJvbShcclxuXHRcdFx0XHRcdGZvcm11bGFTdHJbXCJtYXRjaEFsbFwiXSgvXCJMYXN0XFwoKC4rPylcXClcIi9nKSxcclxuXHRcdFx0XHRcdChtKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hTdHI6IG1bMF0sXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hXb3JkOiBtWzFdLFxyXG5cdFx0XHRcdFx0XHRcdHJlcGxhY2VWYWx1ZTogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRtYXRjaE1ldGhvZDogXCJMYXN0XCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRsZXQgbWF0Y2hNYXhGaWVsZHMgPSBBcnJheS5mcm9tKFxyXG5cdFx0XHRcdFx0Zm9ybXVsYVN0cltcIm1hdGNoQWxsXCJdKC9cIk1heFxcKCguKz8pXFwpXCIvZyksXHJcblx0XHRcdFx0XHQobSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoU3RyOiBtWzBdLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoV29yZDogbVsxXSxcclxuXHRcdFx0XHRcdFx0XHRyZXBsYWNlVmFsdWU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hNZXRob2Q6IFwiTWF4XCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRsZXQgbWF0Y2hNaW5GaWVsZHMgPSBBcnJheS5mcm9tKFxyXG5cdFx0XHRcdFx0Zm9ybXVsYVN0cltcIm1hdGNoQWxsXCJdKC9cIk1pblxcKCguKz8pXFwpXCIvZyksXHJcblx0XHRcdFx0XHQobSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoU3RyOiBtWzBdLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoV29yZDogbVsxXSxcclxuXHRcdFx0XHRcdFx0XHRyZXBsYWNlVmFsdWU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hNZXRob2Q6IFwiTWluXCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRsZXQgbWF0Y2hTdW1GaWVsZHMgPSBBcnJheS5mcm9tKFxyXG5cdFx0XHRcdFx0Zm9ybXVsYVN0cltcIm1hdGNoQWxsXCJdKC9cIlN1bVxcKCguKz8pXFwpXCIvZyksXHJcblx0XHRcdFx0XHQobSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoU3RyOiBtWzBdLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoV29yZDogbVsxXSxcclxuXHRcdFx0XHRcdFx0XHRyZXBsYWNlVmFsdWU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hNZXRob2Q6IFwiU3VtXCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRsZXQgbWF0Y2hBdmdGaWVsZHMgPSBBcnJheS5mcm9tKFxyXG5cdFx0XHRcdFx0Zm9ybXVsYVN0cltcIm1hdGNoQWxsXCJdKC9cIkF2Z1xcKCguKz8pXFwpXCIvZyksXHJcblx0XHRcdFx0XHQobSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoU3RyOiBtWzBdLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoV29yZDogbVsxXSxcclxuXHRcdFx0XHRcdFx0XHRyZXBsYWNlVmFsdWU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hNZXRob2Q6IFwiQXZnXCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRtYXRjaEZpcnN0RmllbGRzLmV2ZXJ5KCh4KSA9PlxyXG5cdFx0XHRcdFx0XHR0aGlzLmFsbG93ZWRDYWxjdWxhdGVkRmllbGRzLmluY2x1ZGVzKHgubWF0Y2hXb3JkKVxyXG5cdFx0XHRcdFx0KSAmJlxyXG5cdFx0XHRcdFx0bWF0Y2hMYXN0RmllbGRzLmV2ZXJ5KCh4KSA9PlxyXG5cdFx0XHRcdFx0XHR0aGlzLmFsbG93ZWRDYWxjdWxhdGVkRmllbGRzLmluY2x1ZGVzKHgubWF0Y2hXb3JkKVxyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0Ly8g5Yik5patRmlyc3TlkoxMYXN06KGo6L6+5byP5YaF55qE5a2X5q615piv5ZCm5ZCI5rOVXHJcblx0XHRcdFx0XHR0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMucHVzaCh7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGFyZ3MuY2FsY3VsYXRlZEZpZWxkLm5hbWUsXHJcblx0XHRcdFx0XHRcdGZvcm11bGE6IGFyZ3MuY2FsY3VsYXRlZEZpZWxkLmZvcm11bGEsXHJcblx0XHRcdFx0XHRcdG1hdGNoRmllbGRzOiBbXHJcblx0XHRcdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoRmlyc3RGaWVsZHMsXHJcblx0XHRcdFx0XHRcdFx0Li4ubWF0Y2hMYXN0RmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoTWF4RmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoTWluRmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoU3VtRmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoQXZnRmllbGRzLFxyXG5cdFx0XHRcdFx0XHRdLFxyXG5cdFx0XHRcdFx0XHRncmFuZFRvdGFsOiAwLFxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRsZXQgZmllbGROYW1lID0gKFxyXG5cdFx0XHRcdFx0XHRmb3JtdWxhU3RyLnNwbGl0KFwiRmlyc3QoXCIpWzFdIHx8XHJcblx0XHRcdFx0XHRcdGZvcm11bGFTdHIuc3BsaXQoXCJMYXN0KFwiKVsxXVxyXG5cdFx0XHRcdFx0KS5zcGxpdChcIilcIilbMF07XHJcblx0XHRcdFx0XHRhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtdWxhID1cclxuXHRcdFx0XHRcdFx0XCInXFxcIlwiICsgXCJTdW0oXCIgKyBmaWVsZE5hbWUgKyAnKVwiPScgKyBmb3JtdWxhU3RyICsgXCInXCI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBDYWxjdWxhdGVkIGZpZWxk5LqL5Lu277ya5a6M5oiQXHJcblx0cHVibGljIGFjdGlvbkNvbXBsZXRlKGFyZ3MpIHtcclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5hY3Rpb25OYW1lID09PSBcIkZpZWxkIGFnZ3JlZ2F0ZWRcIiB8fFxyXG5cdFx0XHRhcmdzLmFjdGlvbk5hbWUgPT09IFwiRmllbGQgbGlzdCBjbG9zZWRcIlxyXG5cdFx0KSB7XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlcyA9IFtcclxuXHRcdFx0XHQuLi5hcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZXMsXHJcblx0XHRcdF07XHJcblx0XHRcdHRoaXMuc2V0VmFsdWVJdGVtRGF0YSgpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGFyZ3MuYWN0aW9uTmFtZSA9PSBcIkZpZWxkIHJlbW92ZWRcIikge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0YXJncy5maWVsZEluZm8gJiZcclxuXHRcdFx0XHRhcmdzLmZpZWxkSW5mby5maWVsZEl0ZW0gJiZcclxuXHRcdFx0XHRhcmdzLmZpZWxkSW5mby5maWVsZEl0ZW0udHlwZSA9PSBcIkNhbGN1bGF0ZWRGaWVsZFwiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGxldCBmaWVsZCA9IGFyZ3MuZmllbGRJbmZvLmZpZWxkTmFtZTtcclxuXHRcdFx0XHQvLyBSZW1vdmUgdGhlIGRlbGV0ZWQgY2FsY3VsYXRlZCBmaWVsZCBmcm9tIGFuIHN0b3JlZCBhcnJheS5cclxuXHRcdFx0XHR0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMgPVxyXG5cdFx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzLmZpbHRlcihmdW5jdGlvbiAob2JqKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBvYmoubmFtZSAhPT0gZmllbGQ7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gQ2FsY3VsYXRlZCBmaWVsZOS6i+S7tu+8muW8gOWni1xyXG5cdHB1YmxpYyBhY3Rpb25CZWdpbihhcmdzKSB7XHJcblx0XHRpZiAoYXJncy5hY3Rpb25OYW1lID09PSBcIkVkaXQgY2FsY3VsYXRlZCBmaWVsZFwiKSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzW2ldLm5hbWUgJiZcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZpZWxkTGlzdFtcclxuXHRcdFx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzW2ldLm5hbWVcclxuXHRcdFx0XHRcdF1cclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZpZWxkTGlzdFtcclxuXHRcdFx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzW2ldLm5hbWVcclxuXHRcdFx0XHRcdF0uZm9ybXVsYSA9IHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1tpXS5mb3JtdWxhO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByZXNpemVTdG9wKGFyZ3MpIHtcclxuXHRcdGlmICh0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGgpIHtcclxuXHRcdFx0Y29uc3QgaGVhZGVyX2ZpZWxkID0gdGhpcy5jb25maWcuY29sdW1uc1dpZHRoLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+IGVsLmhlYWRlclRleHQgPT09IGFyZ3MuY29sdW1uLmhlYWRlclRleHRcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKGhlYWRlcl9maWVsZC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0aGVhZGVyX2ZpZWxkWzBdLndpZHRoID0gcGFyc2VJbnQoYXJncy5jb2x1bW4ud2lkdGgpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnLmNvbHVtbnNXaWR0aC5wdXNoKHtcclxuXHRcdFx0XHRcdGhlYWRlclRleHQ6IGFyZ3MuY29sdW1uLmhlYWRlclRleHQsXHJcblx0XHRcdFx0XHR3aWR0aDogcGFyc2VJbnQoYXJncy5jb2x1bW4ud2lkdGgpLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGggPSBbXTtcclxuXHRcdFx0dGhpcy5jb25maWcuY29sdW1uc1dpZHRoLnB1c2goe1xyXG5cdFx0XHRcdGhlYWRlclRleHQ6IGFyZ3MuY29sdW1uLmhlYWRlclRleHQsXHJcblx0XHRcdFx0d2lkdGg6IHBhcnNlSW50KGFyZ3MuY29sdW1uLndpZHRoKSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRjb25zdCBwb3J0bGV0ID0gdGhpcy5wb3J0bGV0O1xyXG5cdFx0cG9ydGxldC5jb25maWcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcblx0XHRjb25zdCBpbmRleCA9IHRoaXMucG9ydGxldHMuZmluZEluZGV4KCh4KSA9PiB4Lm5ld0lkID09PSBwb3J0bGV0Lm5ld0lkKTtcclxuXHRcdGlmIChpbmRleCA+IC0xKSB0aGlzLnBvcnRsZXRzW2luZGV4XSA9IHBvcnRsZXQ7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNldENvbHVtbnNSZW5kZXIoYXJncykge1xyXG5cdFx0aWYgKGFyZ3Muc3RhY2tlZENvbHVtbnMpIHtcclxuXHRcdFx0YXJncy5zdGFja2VkQ29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRjb2wuZm9ybWF0ICYmXHJcblx0XHRcdFx0XHQoY29sLmZvcm1hdC5pbmRleE9mKFwiTlwiKSAhPT0gLTEgfHxcclxuXHRcdFx0XHRcdFx0Y29sLmZvcm1hdCA9PT0gXCJwZXJjZW50XCIgfHxcclxuXHRcdFx0XHRcdFx0Y29sLmZvcm1hdC5pbmRleE9mKFwiUFwiKSAhPT0gLTEpXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRjb2wudGV4dEFsaWduID0gXCJSaWdodFwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuY29uZmlnLmNvbHVtbnNXaWR0aCkge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IChhcmdzIGFzIGFueSkuY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGFyZ3MuY29sdW1uc1tpXS5oZWFkZXJUZXh0ID09PSBcIlwiIHx8XHJcblx0XHRcdFx0XHQhYXJncy5jb2x1bW5zW2ldLmhlYWRlclRleHRcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGNvbHVtbl9yb3cgPSB0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGguZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHQoZWwpID0+IGVsLmhlYWRlclRleHQgPT09IGFyZ3MuY29sdW1uc1tpXS5oZWFkZXJUZXh0XHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0aWYgKGNvbHVtbl9yb3cubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRhcmdzLmNvbHVtbnNbaV0ud2lkdGggPSBjb2x1bW5fcm93WzBdLndpZHRoO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb25zdCBoZWFkZXJUZXh0ID0gYXJncy5jb2x1bW5zW2ldLmhlYWRlclRleHRcclxuXHRcdFx0XHRcdFx0LnJlcGxhY2UoL1xccysvZywgXCJcIilcclxuXHRcdFx0XHRcdFx0LnNwbGl0KFwiLlwiKTtcclxuXHRcdFx0XHRcdGlmIChoZWFkZXJUZXh0ICYmIGhlYWRlclRleHQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGguZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdFx0XHRcdGVsLmhlYWRlclRleHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoL1xccysvZywgXCJcIilcclxuXHRcdFx0XHRcdFx0XHRcdFx0LnRvTG93ZXJDYXNlKCkgPT09XHJcblx0XHRcdFx0XHRcdFx0XHRoZWFkZXJUZXh0W2hlYWRlclRleHQubGVuZ3RoIC0gMV0udG9Mb3dlckNhc2UoKVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRpZiAoY29sdW1uLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0XHQoYXJncyBhcyBhbnkpLmNvbHVtbnNbaV0ud2lkdGggPSBjb2x1bW5bMF0ud2lkdGg7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gZGF0ZSBmb3JtYXQgYWJvdXQgcXVhcnRlcmx5XHJcblx0XHRcdFx0bGV0IHBpdm90VmFsdWVzOiBhbnkgPSB0aGlzLnBpdm90T2JqLnBpdm90VmFsdWVzO1xyXG5cdFx0XHRcdGlmICh0aGlzLmZvcm1hdERhdGVzICYmIHRoaXMuZm9ybWF0RGF0ZXMubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRsZXQgZGF0ZUZpZWxkcyA9IHRoaXMuZm9ybWF0RGF0ZXMubWFwKChlbCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZWwubmFtZTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgayA9IDE7IGsgPCBwaXZvdFZhbHVlcy5sZW5ndGg7IGsrKykge1xyXG5cdFx0XHRcdFx0XHRmb3IgKFxyXG5cdFx0XHRcdFx0XHRcdGxldCBqID0gMDtcclxuXHRcdFx0XHRcdFx0XHRwaXZvdFZhbHVlc1trXSAhPSBudWxsICYmIGogPCBwaXZvdFZhbHVlc1trXS5sZW5ndGg7XHJcblx0XHRcdFx0XHRcdFx0aisrXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdICE9IG51bGwgJiZcclxuXHRcdFx0XHRcdFx0XHRcdChqID09IDBcclxuXHRcdFx0XHRcdFx0XHRcdFx0PyBkYXRlRmllbGRzLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNba11bal0udmFsdWVTb3J0LmF4aXNcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHRcdDogZGF0ZUZpZWxkcy5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdLmFjdHVhbFRleHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICApKVxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly9DdXN0b21pemUgdGhlIFJvdyBoZWFkZXJzL0NvbHVtbiBoZWFkZXJzIGJhc2VkIG9uIHlvdXIgbmVlZHNcclxuXHRcdFx0XHRcdFx0XHRcdGxldCBoZWFkZXJzO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGogPT09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aGVhZGVycyA9IHBpdm90VmFsdWVzW2tdW2pdLmFjdHVhbFRleHQ7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBoZWFkZXJzID0gcGl2b3RWYWx1ZXNba11bal0uZm9ybWF0dGVkVGV4dDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aGVhZGVycyA9IHBpdm90VmFsdWVzW2tdW2pdLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGhlYWRlcnMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGRhdGUgPSBuZXcgRGF0ZShoZWFkZXJzKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBxdWFydGVyID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRNYXRoLmZsb29yKGRhdGUuZ2V0TW9udGgoKSAvIDMpICsgMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBmb3JtYXQ7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZvcm1hdERhdGVzLm1hcCgoZWwpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaiA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsLm5hbWUgPT1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNba11bal0udmFsdWVTb3J0LmF4aXNcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gZWwuZm9ybWF0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsLm5hbWUgPT1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNba11bal0uYWN0dWFsVGV4dFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBlbC5mb3JtYXQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNba11bal0uZm9ybWF0dGVkVGV4dCA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5nZXRRdWFydGVyVmFsdWUoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cXVhcnRlclxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8vIGlmKHRoaXMucGl2b3RPYmopIHRoaXMucGl2b3RPYmoucmVmcmVzaERhdGEoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBvbkxvYWQoKTogdm9pZCB7XHJcblx0XHQvLyBTTVAyLTE1NjUxIOW8gOWQr+iZmuaLn+a7muWKqOW5tnNvcnTliJflkI7vvIzmnaXlm57mu5rliqjkvJrlr7zoh7TmlbDmja7nqbrnmb1cclxuXHRcdC8vIOWumOaWuemTvuaOpSBodHRwczovL2VqMi5zeW5jZnVzaW9uLmNvbS9hbmd1bGFyL2RvY3VtZW50YXRpb24vcGl2b3R2aWV3L3ZpcnR1YWwtc2Nyb2xsaW5nI3ZpcnR1YWwtc2Nyb2xsaW5nLWZvci1zdGF0aWMtZmllbGQtbGlzdFxyXG5cdFx0Ly8gRGVtb+mTvuaOpSBodHRwczovL3N0YWNrYmxpdHouY29tL2VkaXQvZ2l0aHViLTdnZ2sydS00cmt6YjM/ZmlsZT1zcmMlMkZhcHAuY29tcG9uZW50LnRzXHJcblx0XHQodGhpcy5maWVsZGxpc3RPYmogYXMgUGl2b3RGaWVsZExpc3RDb21wb25lbnQpLnBpdm90R3JpZE1vZHVsZSA9IHRoaXNcclxuXHRcdFx0LnBpdm90T2JqIGFzIFBpdm90Vmlld0NvbXBvbmVudDtcclxuXHR9XHJcblxyXG5cdG9uZGF0YUJvdW5kKCl7XHJcblx0XHRpZiAoQnJvd3Nlci5pc0RldmljZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBpdm90T2JqLmVsZW1lbnQuc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMucGl2b3RPYmouYWxsb3dDYWxjdWxhdGVkRmllbGQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnBpdm90T2JqLnNob3dGaWVsZExpc3QgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZW5naW5lUG9wdWxhdGVkKGFyZ3MpIHtcclxuXHRcdGxldCBjbG9uZWRWYWx1ZXM6IElQaXZvdFZhbHVlcztcclxuXHRcdGxldCBjdXJyZW50UGl2b3RWYWx1ZXM6IGFueSA9IHRoaXMuZ2V0Q2xvbmVkUGl2b3RWYWx1ZXMoXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLnBpdm90VmFsdWVzXHJcblx0XHQpO1xyXG5cdFx0bGV0IHBhZ2VTZXR0aW5nczogSVBhZ2VTZXR0aW5ncyA9XHJcblx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLnBhZ2VTZXR0aW5ncztcclxuXHJcblx0XHRpZiAodGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZ2VuZXJhdGVHcmlkRGF0YSkge1xyXG5cdFx0XHQvLyDmsqHms5XlpI3njrAgaHR0cHM6Ly9yYWlzZWxwLmF0bGFzc2lhbi5uZXQvYnJvd3NlL1NNUDItMTcyNCDlpITnkIbnmoTov5nkuKrpl67popjmg4XlhrUsIOebtOaOpeazqOmHiuaOiVxyXG5cdFx0XHQvLyDkuIvpnaLov5nmrrXku6PnoIHkvJrlvbHlk40gaHR0cHM6Ly9yYWlzZWxwLmF0bGFzc2lhbi5uZXQvYnJvd3NlL1NNUDItMTIxMzlcclxuXHRcdFx0Ly8gdGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZ2VuZXJhdGVHcmlkRGF0YShcclxuXHRcdFx0Ly8gXHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncyxcclxuXHRcdFx0Ly8gXHR0cnVlXHJcblx0XHRcdC8vICk7XHJcblx0XHRcdGNsb25lZFZhbHVlcyA9IHRoaXMuZ2V0Q2xvbmVkUGl2b3RWYWx1ZXMoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUucGl2b3RWYWx1ZXNcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLnBpdm90VmFsdWVzID0gY3VycmVudFBpdm90VmFsdWVzO1xyXG5cclxuXHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUucGFnZVNldHRpbmdzID0gcGFnZVNldHRpbmdzO1xyXG5cclxuXHRcdFx0Ly8gSGVyZSBcImNsb25lZFZhbHVlc1wiIGNvbnRhaW5zIHRoZSB3aG9sZSBwaXZvdCB2YWx1ZXMuXHJcblx0XHRcdHRoaXMuYWxsRGF0YVZhbHVlID0gY2xvbmVkVmFsdWVzO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRDbG9uZWRQaXZvdFZhbHVlcyhwaXZvdFZhbHVlczogSVBpdm90VmFsdWVzKTogSVBpdm90VmFsdWVzIHtcclxuXHRcdGxldCBjbG9uZWRTZXRzOiBJUGl2b3RWYWx1ZXMgPSBbXTtcclxuXHRcdGlmIChwaXZvdFZhbHVlcyAmJiBwaXZvdFZhbHVlcy5sZW5ndGgpIHtcclxuXHRcdFx0Zm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHBpdm90VmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0aWYgKHBpdm90VmFsdWVzW2ldKSB7XHJcblx0XHRcdFx0XHRjbG9uZWRTZXRzW2ldID0gW107XHJcblx0XHRcdFx0XHRmb3IgKGxldCBqOiBudW1iZXIgPSAwOyBqIDwgcGl2b3RWYWx1ZXNbaV0ubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0aWYgKHBpdm90VmFsdWVzW2ldW2pdKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgKi9cclxuXHRcdFx0XHRcdFx0XHRjbG9uZWRTZXRzW2ldW2pdID0gdGhpcy5nZXRDbG9uZWRQaXZvdFZhbHVlT2JqKFxyXG5cdFx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNbaV1bal0gYXMgeyBba2V5OiBzdHJpbmddOiBPYmplY3QgfVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSAqL1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gY2xvbmVkU2V0cztcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0Q2xvbmVkUGl2b3RWYWx1ZU9iaihkYXRhOiB7IFtrZXk6IHN0cmluZ106IE9iamVjdCB9KToge1xyXG5cdFx0W2tleTogc3RyaW5nXTogT2JqZWN0O1xyXG5cdH0ge1xyXG5cdFx0bGV0IGtleVBvczogbnVtYmVyID0gMDtcclxuXHRcdGxldCBmcmFtZWRTZXQ6IGFueSA9IHt9O1xyXG5cdFx0aWYgKCEoZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB1bmRlZmluZWQpKSB7XHJcblx0XHRcdGxldCBmaWVsZHM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMoZGF0YSk7XHJcblx0XHRcdHdoaWxlIChrZXlQb3MgPCBmaWVsZHMubGVuZ3RoKSB7XHJcblx0XHRcdFx0ZnJhbWVkU2V0W2ZpZWxkc1trZXlQb3NdXSA9IGRhdGFbZmllbGRzW2tleVBvc11dO1xyXG5cdFx0XHRcdGtleVBvcysrO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRmcmFtZWRTZXQgPSBkYXRhO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZyYW1lZFNldDtcclxuXHR9XHJcblxyXG5cdC8vI3JlZ2lvbiBGaWx0ZXJpbmcgdGhlIFRyZWVOb2Rlc1xyXG5cdHByaXZhdGUgc2VhcmNoTm9kZXMoYXJncykge1xyXG5cdFx0bGV0IF90ZXh0ID0gYXJncy5tYXNrZWRWYWx1ZTtcclxuXHRcdGxldCBwcmVkaWNhdHMgPSBbXSxcclxuXHRcdFx0X2FycmF5ID0gW10sXHJcblx0XHRcdF9maWx0ZXIgPSBbXTtcclxuXHRcdGlmIChfdGV4dCA9PSBcIlwiKSB7XHJcblx0XHRcdHRoaXMuY2hhbmdlRGF0YVNvdXJjZShcclxuXHRcdFx0XHQoKHRoaXMgYXMgYW55KS5maWVsZGxpc3RPYmoudHJlZVZpZXdNb2R1bGUgYXMgYW55KS5nZXRUcmVlRGF0YSgpXHJcblx0XHRcdCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsZXQgcHJlZGljYXRlID0gbmV3IFByZWRpY2F0ZShcImNhcHRpb25cIiwgXCJjb250YWluc1wiLCBfdGV4dCwgdHJ1ZSk7XHJcblx0XHRcdGxldCBmaWx0ZXJlZExpc3QgPSBuZXcgRGF0YU1hbmFnZXIoXHJcblx0XHRcdFx0KCh0aGlzIGFzIGFueSkuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlIGFzIGFueSkuZ2V0VHJlZURhdGEoKVxyXG5cdFx0XHQpLmV4ZWN1dGVMb2NhbChuZXcgUXVlcnkoKS53aGVyZShwcmVkaWNhdGUpKTtcclxuXHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBmaWx0ZXJlZExpc3QubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRfZmlsdGVyLnB1c2goZmlsdGVyZWRMaXN0W2pdW1wiaWRcIl0pO1xyXG5cdFx0XHRcdGxldCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJJdGVtcyhcclxuXHRcdFx0XHRcdGZpbHRlcmVkTGlzdFtqXSxcclxuXHRcdFx0XHRcdChcclxuXHRcdFx0XHRcdFx0KHRoaXMgYXMgYW55KS5maWVsZGxpc3RPYmoudHJlZVZpZXdNb2R1bGUgYXMgYW55XHJcblx0XHRcdFx0XHQpLmdldFRyZWVEYXRhKClcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZmlsdGVycy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRfYXJyYXkuaW5kZXhPZihmaWx0ZXJzW2ldKSA9PSAtMSAmJlxyXG5cdFx0XHRcdFx0XHRmaWx0ZXJzW2ldICE9IG51bGxcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRfYXJyYXkucHVzaChmaWx0ZXJzW2ldKTtcclxuXHRcdFx0XHRcdFx0cHJlZGljYXRzLnB1c2goXHJcblx0XHRcdFx0XHRcdFx0bmV3IFByZWRpY2F0ZShcImlkXCIsIFwiZXF1YWxcIiwgZmlsdGVyc1tpXSwgZmFsc2UpXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChwcmVkaWNhdHMubGVuZ3RoID09IDApIHtcclxuXHRcdFx0XHR0aGlzLmNoYW5nZURhdGFTb3VyY2UoW10pO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGxldCBxdWVyeSA9IG5ldyBRdWVyeSgpLndoZXJlKFByZWRpY2F0ZS5vcihwcmVkaWNhdHMpKTtcclxuXHRcdFx0XHRsZXQgbmV3TGlzdCA9IG5ldyBEYXRhTWFuYWdlcihcclxuXHRcdFx0XHRcdChcclxuXHRcdFx0XHRcdFx0KHRoaXMgYXMgYW55KS5maWVsZGxpc3RPYmoudHJlZVZpZXdNb2R1bGUgYXMgYW55XHJcblx0XHRcdFx0XHQpLmdldFRyZWVEYXRhKClcclxuXHRcdFx0XHQpLmV4ZWN1dGVMb2NhbChxdWVyeSk7XHJcblx0XHRcdFx0dGhpcy5jaGFuZ2VEYXRhU291cmNlKG5ld0xpc3QpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvL0ZpbmQgdGhlIFBhcmVudCBOb2RlcyBmb3IgY29ycmVzcG9uZGluZyBjaGlsZHNcclxuXHRwdWJsaWMgZ2V0RmlsdGVySXRlbXMoZkxpc3QsIGxpc3QpIHtcclxuXHRcdGxldCBub2RlcyA9IFtdO1xyXG5cdFx0bm9kZXMucHVzaChmTGlzdFtcImlkXCJdKTtcclxuXHRcdGxldCBxdWVyeTIgPSBuZXcgUXVlcnkoKS53aGVyZShcImlkXCIsIFwiZXF1YWxcIiwgZkxpc3RbXCJwaWRcIl0sIGZhbHNlKTtcclxuXHRcdGxldCBmTGlzdDEgPSBuZXcgRGF0YU1hbmFnZXIobGlzdCkuZXhlY3V0ZUxvY2FsKHF1ZXJ5Mik7XHJcblx0XHRpZiAoZkxpc3QxLmxlbmd0aCAhPSAwKSB7XHJcblx0XHRcdGxldCBwTm9kZSA9IHRoaXMuZ2V0RmlsdGVySXRlbXMoZkxpc3QxWzBdLCBsaXN0KTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwTm9kZS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmIChub2Rlcy5pbmRleE9mKHBOb2RlW2ldKSA9PSAtMSAmJiBwTm9kZVtpXSAhPSBudWxsKVxyXG5cdFx0XHRcdFx0bm9kZXMucHVzaChwTm9kZVtpXSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIG5vZGVzO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG5vZGVzO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGNyZWF0ZWQoYXJnczogYW55KSB7XHJcblx0XHRpZiAodGhpcy5maWVsZGxpc3RPYmogJiYgIXRoaXMuZmllbGRsaXN0T2JqLmVuZ2luZU1vZHVsZS5maWVsZHMpIHtcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZW5naW5lTW9kdWxlLmZpZWxkcyA9IFtdO1xyXG5cdFx0fVxyXG5cdFx0bGV0IHNlYXJjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuXHRcdHNlYXJjaC5pZCA9IFwicGl2b3RTZWFyY2hCb3hcIiArIHRoaXMuZmllbGRsaXN0T2JqLmVsZW1lbnQuaWQ7XHJcblx0XHRsZXQgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG5cdFx0XHRcIiNcIiArIHRoaXMuZmllbGRsaXN0T2JqLmVsZW1lbnQuaWQgKyBcIl9Db250YWluZXIgLmUtZmllbGQtdGFibGVcIlxyXG5cdFx0KTtcclxuXHRcdGlmIChlbCkgZWwucHJlcGVuZChzZWFyY2gpO1xyXG5cdFx0dGhpcy5waXZvdFNlYXJjaEJveCA9IG5ldyBNYXNrZWRUZXh0Qm94KHtcclxuXHRcdFx0cGxhY2Vob2xkZXI6IHRoaXMudHJhbnNsYXRpb24uU0VBUkNIIHx8IFwiLlNFQVJDSFwiLFxyXG5cdFx0XHRjc3NDbGFzczogXCJwaXZvdC1zZWFyY2hcIixcclxuXHRcdFx0Y2hhbmdlOiB0aGlzLnNlYXJjaE5vZGVzLmJpbmQodGhpcyksXHJcblx0XHR9KTtcclxuXHRcdHRoaXMucGl2b3RTZWFyY2hCb3guYXBwZW5kVG8oXHJcblx0XHRcdFwiI3Bpdm90U2VhcmNoQm94XCIgKyB0aGlzLmZpZWxkbGlzdE9iai5lbGVtZW50LmlkXHJcblx0XHQpO1xyXG5cclxuXHRcdC8vIE5FVyBEYXNoYm9hcmQg54K55Ye7XCJhcHBseVwi5pe277yM6K+35rGC5paw5pWw5o2uXHJcblx0XHRsZXQgYXBwbHlCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZWxlbWVudC5pZCArIFwiX0RlZmVyVXBkYXRlQnV0dG9uMVwiXHJcblx0XHQpO1xyXG5cclxuXHRcdGFwcGx5QnRuICYmXHJcblx0XHRcdGFwcGx5QnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5wYWdlTG9hZGluZyA9IHRydWU7XHJcblx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXREYXRhQnlQb3J0bGV0c05ldyhcclxuXHRcdFx0XHRcdFt0aGlzLnBvcnRsZXRdLFxyXG5cdFx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdHRoaXMuUGl2b3RfRGF0YSA9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRSZXN1bHRCeURhdGFUYWJsZShcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMucG9ydGxldCxcclxuXHRcdFx0XHRcdFx0XHRcdGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZC5pZFxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmRhdGFTb3VyY2UgPVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuUGl2b3RfRGF0YTtcclxuXHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLlBpdm90X0RhdGEpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZ3JvdXBzID0gdGhpcy5jb25maWcueGF4aXMuZ3JvdXBzO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByb3dzID0gW107XHJcblx0XHRcdFx0XHRcdFx0aWYgKGdyb3Vwcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgZ2l0ZW0gb2YgZ3JvdXBzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gZ2l0ZW0ubmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGdpdGVtLnNob3dTdWJUb3RhbHMgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uc2hvd1N1YlRvdGFscztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRnaXRlbS5jYXB0aW9uID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdWYWx1ZSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy50cmFuc2xhdGlvbltcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0ubGFuZ0NvZGVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdF0gfHxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdDb2RlIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRnaXRlbS5jYXB0aW9uO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJvd3MucHVzaChnaXRlbSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuUGl2b3RfRGF0YS5tYXAoKGRhdGEpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChkYXRhW3Jvdy5uYW1lXSA9PT0gXCJcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFbcm93Lm5hbWVdID0gXCJudWxsXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLnBpdm90T2JqKSB0aGlzLnBpdm90T2JqLnJlZnJlc2hEYXRhKCk7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0bnVsbCxcclxuXHRcdFx0XHRcdGZhbHNlLFxyXG5cdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmQsXHJcblx0XHRcdFx0XHRmYWxzZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRcclxuXHRcdC8vIOeCueWHu1wiY2FuY2VsXCLml7bvvIzmgaLlpI3ljp/lp4vmlbDmja5cclxuXHRcdGxldCBjYW5jZWxCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZWxlbWVudC5pZCArIFwiX0RlZmVyVXBkYXRlQnV0dG9uMlwiXHJcblx0XHQpO1xyXG5cclxuXHRcdGNhbmNlbEJ0biAmJlxyXG5cdFx0XHRjYW5jZWxCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5kYXRhU291cmNlID1cclxuXHRcdFx0XHRcdFsuLi50aGlzLlBpdm90X0RhdGFdO1xyXG5cdFx0XHRcdGlmICh0aGlzLnBpdm90T2JqKSB0aGlzLnBpdm90T2JqLnJlZnJlc2hEYXRhKCk7XHJcblx0XHRcdFx0dGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcblx0XHRcdFx0dGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHR9KTtcdFx0XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZmllbGRMaXN0UmVmcmVzaGVkKGFyZ3MpIHtcclxuXHRcdGlmICh0aGlzLnBpdm90U2VhcmNoQm94KSB7XHJcblx0XHRcdHRoaXMucGl2b3RTZWFyY2hCb3gudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHR0aGlzLmNoYW5nZURhdGFTb3VyY2UoXHJcblx0XHRcdFx0KHRoaXMuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlIGFzIGFueSkuZ2V0VHJlZURhdGEoKVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjaGFuZ2VEYXRhU291cmNlKGRhdGEpIHtcclxuXHRcdGxldCBmaWVsZFRhYmxlID0gKHRoaXMgYXMgYW55KS5maWVsZGxpc3RPYmoudHJlZVZpZXdNb2R1bGUuZmllbGRUYWJsZTtcclxuXHRcdGlmIChmaWVsZFRhYmxlKSB7XHJcblx0XHRcdGZpZWxkVGFibGUuZmllbGRzID0ge1xyXG5cdFx0XHRcdGRhdGFTb3VyY2U6IGRhdGEsXHJcblx0XHRcdFx0aWQ6IFwiaWRcIixcclxuXHRcdFx0XHR0ZXh0OiBcImNhcHRpb25cIixcclxuXHRcdFx0XHRpc0NoZWNrZWQ6IFwiaXNTZWxlY3RlZFwiLFxyXG5cdFx0XHRcdHBhcmVudElEOiBcInBpZFwiLFxyXG5cdFx0XHRcdGljb25Dc3M6IFwic3ByaXRlQ3NzQ2xhc3NcIixcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vU01QMi0yOTU3IGZpeCB0aGUgZGF0ZSBpc3N1ZSBvbiB0aGUgcmF3IGRhdGFcclxuXHRwdWJsaWMgZHJpbGxUaHJvdWdoKGFyZ3M6IERyaWxsVGhyb3VnaEV2ZW50QXJncykge1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmdyaWRDb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGRhdGEgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PiBlbC5jb2xOYW1lID09PSBhcmdzLmdyaWRDb2x1bW5zW2ldLmZpZWxkXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGRhdGFbMF0uZGF0YVR5cGUgPT09IFwiZGF0ZVwiIHx8XHJcblx0XHRcdFx0XHRkYXRhWzBdLmRhdGFUeXBlID09PSBcImRhdGV0aW1lXCJcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGFyZ3MuZ3JpZENvbHVtbnNbaV0udHlwZSA9IFwiZGF0ZVwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHQvLyNlbmRyZWdpb25cclxuXHJcblx0cHJpdmF0ZSBzZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKG9iaiwgZGF0YSwgY29kZSkge1xyXG5cdFx0aWYgKGNvZGUgPT09IC0xKSB7XHJcblx0XHRcdG9iai5zdHlsZS5jb2xvciA9IGRhdGEubmVnYUZvbnRDb2xvcjtcclxuXHRcdFx0b2JqLnN0eWxlLmZvbnRGYW1pbHkgPSBkYXRhLm5lZ2FGb250RmFtaWx5VmFsdWU7XHJcblx0XHRcdG9iai5zdHlsZS5mb250U2l6ZSA9IGRhdGEubmVnYUZvbnRTaXplVmFsdWU7XHJcblx0XHRcdG9iai5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBkYXRhLm5lZ2FCYWNrZ3JvdW5kQ29sb3I7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRvYmouc3R5bGUuY29sb3IgPSBkYXRhLmZvbnRDb2xvcjtcclxuXHRcdFx0b2JqLnN0eWxlLmZvbnRGYW1pbHkgPSBkYXRhLmZvbnRGYW1pbHlWYWx1ZTtcclxuXHRcdFx0b2JqLnN0eWxlLmZvbnRTaXplID0gZGF0YS5mb250U2l6ZVZhbHVlO1xyXG5cdFx0XHRvYmouc3R5bGUuYmFja2dyb3VuZENvbG9yID0gZGF0YS5iYWNrZ3JvdW5kQ29sb3I7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNldENvbXBhcmVDb25kaXRpb25hbChcclxuXHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0ZGF0YVxyXG5cdCkge1xyXG5cdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTEpID09IDApIHtcclxuXHRcdFx0c3dpdGNoIChkYXRhLmNvbXBhcmVTZWxlY3QpIHtcclxuXHRcdFx0XHRjYXNlIFwiTGVzc1RoYW5cIjogLy8g5bCP5LqOXHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuT3JFcXVhbFRvXCI6IC8vIOWwj+S6juetieS6jlxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJHcmVhdGVyVGhhblwiOiAvLyDlpKfkuo5cclxuXHRcdFx0XHRjYXNlIFwiR3JlYXRlclRoYW5PckVxdWFsVG9cIjogLy8g5aSn5LqO562J5LqOXHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiTm90RXF1YWxzXCI6IC8vIOS4jeetieS6jlxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJCZXR3ZWVuXCI6IC8vIHZhbHVlMTw9IHZhbCA8PXZhbHVlMlxyXG5cdFx0XHRcdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTIpID09PSAxKSB7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRkYXRhLmNvbXBhcmVWYWx1ZTJcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiTm90QmV0d2VlblwiOiAvLyB2YWwgPj0gdmFsdWUyLCB2YWwgPD0gdmFsdWUxXHJcblx0XHRcdFx0XHRpZiAoTWF0aC5zaWduKGRhdGEuY29tcGFyZVZhbHVlMikgPT09IDEpIHtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEuY29tcGFyZVZhbHVlMlxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoTWF0aC5zaWduKGRhdGEuY29tcGFyZVZhbHVlMSkgPT09IDEpIHtcclxuXHRcdFx0c3dpdGNoIChkYXRhLmNvbXBhcmVTZWxlY3QpIHtcclxuXHRcdFx0XHRjYXNlIFwiTGVzc1RoYW5cIjogLy8g5bCP5LqOXHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuT3JFcXVhbFRvXCI6IC8vIOWwj+S6juetieS6jlxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IE51bWJlcihkYXRhLmNvbXBhcmVWYWx1ZTEpO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkxlc3NUaGFuXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiR3JlYXRlclRoYW5cIjogLy8g5aSn5LqOXHJcblx0XHRcdFx0Y2FzZSBcIkdyZWF0ZXJUaGFuT3JFcXVhbFRvXCI6IC8vIOWkp+S6juetieS6jlxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKGRhdGEuY29tcGFyZVZhbHVlMSk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJFcXVhbHNcIjogLy8g562J5LqOXHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBOdW1iZXIoZGF0YS5jb21wYXJlVmFsdWUxKTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkVxdWFsc1wiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJOb3RFcXVhbHNcIjogLy8g5LiN562J5LqOXHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gTnVtYmVyKGRhdGEuY29tcGFyZVZhbHVlMSk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHQvLyBwdXNo6L+b5pWw57uEXHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBOdW1iZXIoZGF0YS5jb21wYXJlVmFsdWUxKTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkdyZWF0ZXJUaGFuXCI7XHJcblx0XHRcdFx0XHQvLyBwdXNo6L+b5pWw57uEXHJcblxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5PckVxdWFsVG9cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQmV0d2VlblwiOiAvLyB2YWx1ZTE8PSB2YWwgPD12YWx1ZTJcclxuXHRcdFx0XHRcdGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUyKSA9PT0gMSkge1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS5jb21wYXJlVmFsdWUxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRkYXRhLmNvbXBhcmVWYWx1ZTJcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiTm90QmV0d2VlblwiOiAvLyB2YWwgPj0gdmFsdWUyLCB2YWwgPD0gdmFsdWUxXHJcblx0XHRcdFx0XHRpZiAoTWF0aC5zaWduKGRhdGEuY29tcGFyZVZhbHVlMikgPT09IDEpIHtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEuY29tcGFyZVZhbHVlMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHRcdC8vIHB1c2jov5vmlbDnu4RcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEuY29tcGFyZVZhbHVlMlxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0XHQvLyBwdXNo6L+b5pWw57uEXHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUxKSA9PT0gLTEpIHtcclxuXHRcdFx0c3dpdGNoIChkYXRhLmNvbXBhcmVTZWxlY3QpIHtcclxuXHRcdFx0XHRjYXNlIFwiTGVzc1RoYW5cIjogLy8g5bCP5LqOXHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuT3JFcXVhbFRvXCI6IC8vIOWwj+S6juetieS6jlxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gZGF0YS5jb21wYXJlU2VsZWN0O1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkdyZWF0ZXJUaGFuXCI6IC8vIOWkp+S6jlxyXG5cdFx0XHRcdGNhc2UgXCJHcmVhdGVyVGhhbk9yRXF1YWxUb1wiOiAvLyDlpKfkuo7nrYnkuo5cclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhbk9yRXF1YWxUb1wiO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gZGF0YS5jb21wYXJlVmFsdWUxO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkJldHdlZW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiRXF1YWxzXCI6IC8vIOetieS6jlxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJFcXVhbHNcIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRjYXNlIFwiTm90RXF1YWxzXCI6IC8vIOS4jeetieS6jlxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJOb3RFcXVhbHNcIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJCZXR3ZWVuXCI6IC8vIHZhbHVlMTw9IHZhbCA8PXZhbHVlMlxyXG5cdFx0XHRcdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTIpKSB7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gZGF0YS5jb21wYXJlVmFsdWUxO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gZGF0YS5jb21wYXJlVmFsdWUyO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTIgPSBkYXRhLmNvbXBhcmVWYWx1ZTI7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIk5vdEJldHdlZW5cIjogLy8gdmFsID49IHZhbHVlMiwgdmFsIDw9IHZhbHVlMVxyXG5cdFx0XHRcdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTIpKSB7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJMZXNzVGhhblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IGRhdGEuY29tcGFyZVZhbHVlMjtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IGRhdGEuY29tcGFyZVZhbHVlMjtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIk5vdEJldHdlZW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0UXVhcnRlclZhbHVlKGZvcm1hdCwgZGF0ZSwgcXVhcnRlcikge1xyXG5cdFx0bGV0IHllYXI6IGFueTtcclxuXHRcdHN3aXRjaCAoZm9ybWF0KSB7XHJcblx0XHRcdGNhc2UgXCJRMSAyMDIxXCI6XHJcblx0XHRcdFx0eWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuXHRcdFx0XHRyZXR1cm4gXCJRXCIgKyBxdWFydGVyICsgXCIgXCIgKyB5ZWFyO1xyXG5cdFx0XHRjYXNlIFwiUTEgMjFcIjpcclxuXHRcdFx0XHR5ZWFyID0gKGRhdGUgYXMgYW55KS5nZXRZZWFyKCkgLSAxMDA7XHJcblx0XHRcdFx0cmV0dXJuIFwiUVwiICsgcXVhcnRlciArIFwiIFwiICsgeWVhcjtcclxuXHRcdFx0Y2FzZSBcIjIwMjEgUTFcIjpcclxuXHRcdFx0XHR5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xyXG5cdFx0XHRcdHJldHVybiB5ZWFyICsgXCIgXCIgKyBcIlFcIiArIHF1YXJ0ZXI7XHJcblx0XHRcdGNhc2UgXCIyMSBRMVwiOlxyXG5cdFx0XHRcdHllYXIgPSAoZGF0ZSBhcyBhbnkpLmdldFllYXIoKSAtIDEwMDtcclxuXHRcdFx0XHRyZXR1cm4geWVhciArIFwiIFwiICsgXCJRXCIgKyBxdWFydGVyO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y3VzdG9taXNlQ2VsbChhcmdzOiBRdWVyeUNlbGxJbmZvRXZlbnRBcmdzKSB7XHJcblx0XHRpZiAoYXJncy5jb2x1bW4udHlwZSA9PT0gXCJkYXRlXCIgfHwgYXJncy5jb2x1bW4udHlwZSA9PT0gXCJkYXRlVGltZVwiKSB7XHJcblx0XHRcdGNvbnN0IHsgZmllbGQgfSA9IGFyZ3MuY29sdW1uO1xyXG5cdFx0XHRpZiAoIWFyZ3MuZGF0YVtmaWVsZF0pIHtcclxuXHRcdFx0XHRhcmdzLmNvbHVtbi50eXBlID0gXCJzdHJpbmdcIjtcclxuXHRcdFx0XHRhcmdzLmNvbHVtbi5mb3JtYXQgPSBcIlwiO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcGFyYW0gdGltZUFycmF5IOaVsOe7hOWvueixoSBbe1wiZGF0ZVwiOlwiMjAyMS0wMS0wMVwifSx7XCJkYXRlXCI6XCIyMDIxLTAyLTAxXCJ9XVxyXG5cdCAqIEBwYXJhbSBlbmREYXRlIOaIquiHs+aXtumXtFxyXG5cdCAqIEBwYXJhbSBpbnRlcnZhbCDml7bpl7Tpl7TpmpQgeWVhciAvIHF1YXJ0ZXIgLyBtb250aFxyXG5cdCAqIEBwYXJhbSB0aW1lS2V5IOaXtumXtOWtl+auteWQjSBkYXRlXHJcblx0ICogQHJldHVybnMg5YiS5YiG5ZCO55qE5pe26Ze05YiG57uE5a+56LGhXHJcblx0ICovXHJcblx0Z2V0VGltZVJhbmdlcyh0aW1lQXJyYXksIGVuZERhdGUsIGludGVydmFsLCB0aW1lS2V5KSB7XHJcblx0XHQvLyDlsIbml7bpl7TlrZfnrKbkuLLovazmjaLkuLogbW9tZW50IOWvueixoVxyXG5cdFx0Y29uc3QgZGF0ZXMgPSB0aW1lQXJyYXkubWFwKChpdGVtKSA9PiBtb21lbnQoaXRlbVt0aW1lS2V5IHx8IFwiZGF0ZVwiXSkpO1xyXG5cclxuXHRcdC8vIOWIhumalOesplxyXG5cdFx0Y29uc3QgZGVsaW1pdGVyID0gXCItXCI7XHJcblxyXG5cdFx0Ly8g5om+5Yiw5pyA5bCP5pe26Ze05ZKM5pyA5aSn5pe26Ze0XHJcblx0XHRjb25zdCBtaW5EYXRlID0gbW9tZW50Lm1pbihkYXRlcyk7XHJcblx0XHRjb25zdCBtYXhEYXRlID0gbW9tZW50KGVuZERhdGUpO1xyXG5cclxuXHRcdC8vIOWIneWni+WMlue7k+aenOWvueixoVxyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Ly8g5qC55o2u5YWl5Y+C6L+b6KGM5YiS5YiGXHJcblx0XHRpZiAoaW50ZXJ2YWwgPT09IFwieWVhclwiKSB7XHJcblx0XHRcdGNvbnN0IHN0YXJ0WWVhciA9IG1pbkRhdGUueWVhcigpO1xyXG5cdFx0XHRjb25zdCBlbmRZZWFyID0gbWF4RGF0ZS55ZWFyKCk7XHJcblxyXG5cdFx0XHRmb3IgKGxldCB5ZWFyID0gc3RhcnRZZWFyOyB5ZWFyIDw9IGVuZFllYXI7IHllYXIrKykge1xyXG5cdFx0XHRcdHJlc3VsdFt5ZWFyXSA9IFtdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRkYXRlcy5mb3JFYWNoKChkYXRlLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHllYXIgPSBkYXRlLnllYXIoKTtcclxuXHRcdFx0XHRyZXN1bHRbeWVhcl0ucHVzaCh0aW1lQXJyYXlbaW5kZXhdKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9IGVsc2UgaWYgKGludGVydmFsID09PSBcInF1YXJ0ZXJcIikge1xyXG5cdFx0XHQvLyDlrZjlgqjlraPluqblrZfnrKbkuLJcclxuXHRcdFx0Y29uc3QgcXVhcnRlcnMgPSBbXTtcclxuXHJcblx0XHRcdC8vIOmAkOS4gOmBjeWOhuavj+S4quWto+W6plxyXG5cdFx0XHRmb3IgKFxyXG5cdFx0XHRcdGxldCBjdXJyZW50RGF0ZSA9IG1pbkRhdGUuY2xvbmUoKTtcclxuXHRcdFx0XHRjdXJyZW50RGF0ZS5pc1NhbWVPckJlZm9yZShtYXhEYXRlKTtcclxuXHRcdFx0XHRjdXJyZW50RGF0ZS5hZGQoMywgXCJtb250aHNcIilcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0Y29uc3QgeWVhciA9IGN1cnJlbnREYXRlLnllYXIoKTtcclxuXHRcdFx0XHRjb25zdCBxdWFydGVyID0gTWF0aC5jZWlsKChjdXJyZW50RGF0ZS5tb250aCgpICsgMSkgLyAzKTsgLy8g6K6h566X5a2j5bqmXHJcblx0XHRcdFx0cXVhcnRlcnMucHVzaChgJHt5ZWFyfSR7ZGVsaW1pdGVyfVEke3F1YXJ0ZXJ9YCk7IC8vIOagvOW8j+WMluW5tua3u+WKoOWIsOaVsOe7hFxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyDovpPlh7rmiYDmnInlraPluqZcclxuXHRcdFx0cXVhcnRlcnMuZm9yRWFjaCgocXVhcnRlciwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRyZXN1bHRbcXVhcnRlcl0gPSBbXTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRkYXRlcy5mb3JFYWNoKChkYXRlLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHllYXIgPSBkYXRlLnllYXIoKTtcclxuXHRcdFx0XHRjb25zdCBxdWFydGVyID0gZGF0ZS5xdWFydGVyKCk7IC8vIOiOt+WPluWto+W6plxyXG5cdFx0XHRcdGlmIChxdWFydGVyID09PSAxKVxyXG5cdFx0XHRcdFx0cmVzdWx0W3llYXIgKyBkZWxpbWl0ZXIgKyBcIlExXCJdLnB1c2godGltZUFycmF5W2luZGV4XSk7XHJcblx0XHRcdFx0ZWxzZSBpZiAocXVhcnRlciA9PT0gMilcclxuXHRcdFx0XHRcdHJlc3VsdFt5ZWFyICsgZGVsaW1pdGVyICsgXCJRMlwiXS5wdXNoKHRpbWVBcnJheVtpbmRleF0pO1xyXG5cdFx0XHRcdGVsc2UgaWYgKHF1YXJ0ZXIgPT09IDMpXHJcblx0XHRcdFx0XHRyZXN1bHRbeWVhciArIGRlbGltaXRlciArIFwiUTNcIl0ucHVzaCh0aW1lQXJyYXlbaW5kZXhdKTtcclxuXHRcdFx0XHRlbHNlIGlmIChxdWFydGVyID09PSA0KVxyXG5cdFx0XHRcdFx0cmVzdWx0W3llYXIgKyBkZWxpbWl0ZXIgKyBcIlE0XCJdLnB1c2godGltZUFycmF5W2luZGV4XSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIGlmIChpbnRlcnZhbCA9PT0gXCJtb250aFwiKSB7XHJcblx0XHRcdC8vIOWtmOWCqOaciOS7veWtl+espuS4slxyXG5cdFx0XHRjb25zdCBtb250aHMgPSBbXTtcclxuXHJcblx0XHRcdC8vIOmAkOS4gOmBjeWOhuavj+S4quaciFxyXG5cdFx0XHRmb3IgKFxyXG5cdFx0XHRcdGxldCBjdXJyZW50RGF0ZSA9IG1pbkRhdGUuY2xvbmUoKTtcclxuXHRcdFx0XHRjdXJyZW50RGF0ZS5pc1NhbWVPckJlZm9yZShtYXhEYXRlKTtcclxuXHRcdFx0XHRjdXJyZW50RGF0ZS5hZGQoMSwgXCJtb250aHNcIilcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0bW9udGhzLnB1c2goY3VycmVudERhdGUuZm9ybWF0KGBZWVlZJHtkZWxpbWl0ZXJ9TU1gKSk7IC8vIOagvOW8j+WMluW5tua3u+WKoOWIsOaVsOe7hFxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyDovpPlh7rmiYDmnInmnIjku71cclxuXHRcdFx0bW9udGhzLmZvckVhY2goKG1vbnRoLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdHJlc3VsdFttb250aF0gPSBbXTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRkYXRlcy5mb3JFYWNoKChkYXRlLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHllYXIgPSBkYXRlLnllYXIoKTtcclxuXHRcdFx0XHRjb25zdCBtb250aCA9IChkYXRlLm1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKTsgLy8gMC0xMVxyXG5cdFx0XHRcdHJlc3VsdFt5ZWFyICsgZGVsaW1pdGVyICsgbW9udGhdLnB1c2godGltZUFycmF5W2luZGV4XSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiDorqHnrpflh6DkvZXnrpfmlbDlubPmlrnmm7RcclxuXHQgKiBAcGFyYW0gdmFsdWVzIOaVsOe7hCBbMCwgMCwgMC4yNTc1XVxyXG5cdCAqIEByZXR1cm5zXHJcblx0ICovXHJcblx0Y2FsY3VsYXRlR3Jvd3RoUmF0ZSh2YWx1ZXMpIHtcclxuXHRcdGNvbnN0IHByb2R1Y3QgPSB2YWx1ZXMucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjICogKDEgKyB2YWwpLCAxKTtcclxuXHRcdGlmIChwcm9kdWN0ID49IDApIHtcclxuXHRcdFx0cmV0dXJuIE1hdGgucG93KHByb2R1Y3QsIDEgLyB2YWx1ZXMubGVuZ3RoKSAtIDE7XHJcblx0XHR9IGVsc2UgaWYgKHByb2R1Y3QgPCAwKSB7XHJcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoICUgMiA9PSAwKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMubnRocm9vdChwcm9kdWN0LCB2YWx1ZXMubGVuZ3RoKSAtIDE7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0bnRocm9vdCh4LCBuKSB7XHJcblx0XHRsZXQgbmcgPSBuICUgMjtcclxuXHRcdGlmIChuZyA9PSAxIHx8IHggPCAwKSB4ID0gLXg7XHJcblx0XHR2YXIgciA9IE1hdGgucG93KHgsIDEgLyBuKTtcclxuXHRcdG4gPSBNYXRoLnBvdyhyLCBuKTtcclxuXHJcblx0XHRpZiAoTWF0aC5hYnMoeCAtIG4pIDwgMSAmJiB4ID4gMCA9PT0gbiA+IDApIHJldHVybiBuZyA/IC1yIDogcjtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIOagh+WHhuWBj+W3rlxyXG5cdCAqIEBwYXJhbSB2YWx1ZXMg5pWw57uEIFswLCAwLCAtMC40Nzc1XVxyXG5cdCAqIEByZXR1cm5zIDAuMjc1Njg0NzUzNTM4MDQ2M1xyXG5cdCAqL1xyXG5cdGNhbGN1bGF0ZVN0YW5kYXJkRGV2aWF0aW9uKHZhbHVlcykge1xyXG5cdFx0Y29uc3QgbiA9IHZhbHVlcy5sZW5ndGg7XHJcblxyXG5cdFx0Ly8g5qOA5p+l5pWw5o2u54K55pWw6YePXHJcblx0XHRpZiAobiA8IDIpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwi6Iez5bCR6ZyA6KaB5Lik5Liq5pWw5o2u54K55p2l6K6h566X5qC35pys5qCH5YeG5YGP5beuXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIOiuoeeul+Wdh+WAvFxyXG5cdFx0Y29uc3QgbWVhbiA9IHZhbHVlcy5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKyB2YWwsIDApIC8gbjtcclxuXHJcblx0XHQvLyDorqHnrpfmlrnlt65cclxuXHRcdGNvbnN0IHZhcmlhbmNlID1cclxuXHRcdFx0dmFsdWVzLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyArIE1hdGgucG93KHZhbCAtIG1lYW4sIDIpLCAwKSAvXHJcblx0XHRcdChuIC0gMSk7XHJcblxyXG5cdFx0Ly8g6L+U5Zue5qCH5YeG5YGP5beuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KHZhcmlhbmNlKTtcclxuXHR9XHJcbn1cclxuIl19