speechrecorderng 3.9.7 → 3.9.9

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 (85) hide show
  1. package/README.md +478 -12
  2. package/esm2022/lib/action/action.mjs +1 -1
  3. package/esm2022/lib/audio/array_audio_buffer.mjs +1 -1
  4. package/esm2022/lib/audio/array_audio_buffer_input_stream.mjs +1 -1
  5. package/esm2022/lib/audio/audio_data_holder.mjs +1 -1
  6. package/esm2022/lib/audio/audio_display.mjs +4 -4
  7. package/esm2022/lib/audio/audio_player.mjs +4 -4
  8. package/esm2022/lib/audio/capture/capture.mjs +1 -1
  9. package/esm2022/lib/audio/context.mjs +1 -1
  10. package/esm2022/lib/audio/dsp/level_measure.mjs +5 -4
  11. package/esm2022/lib/audio/impl/wavreader.mjs +1 -1
  12. package/esm2022/lib/audio/impl/wavwriter.mjs +1 -1
  13. package/esm2022/lib/audio/inddb_audio_buffer.mjs +1 -1
  14. package/esm2022/lib/audio/io/stream.mjs +1 -1
  15. package/esm2022/lib/audio/net_audio_buffer.mjs +1 -1
  16. package/esm2022/lib/audio/persistor.mjs +1 -1
  17. package/esm2022/lib/audio/playback/array_audio_buffer_source_node.mjs +1 -1
  18. package/esm2022/lib/audio/playback/audio_source_node.mjs +1 -1
  19. package/esm2022/lib/audio/playback/audio_source_worklet_module_loader.mjs +1 -1
  20. package/esm2022/lib/audio/playback/inddb_audio_buffer_source_node.mjs +1 -1
  21. package/esm2022/lib/audio/playback/net_audio_buffer_source_node.mjs +1 -1
  22. package/esm2022/lib/audio/playback/player.mjs +1 -1
  23. package/esm2022/lib/audio/ui/audio_canvas_layer_comp.mjs +7 -7
  24. package/esm2022/lib/audio/ui/audio_display_control.mjs +4 -4
  25. package/esm2022/lib/audio/ui/audio_display_scroll_pane.mjs +4 -4
  26. package/esm2022/lib/audio/ui/audiosignal.mjs +4 -4
  27. package/esm2022/lib/audio/ui/container.mjs +4 -4
  28. package/esm2022/lib/audio/ui/livelevel.mjs +4 -4
  29. package/esm2022/lib/audio/ui/scroll_pane_horizontal.mjs +3 -3
  30. package/esm2022/lib/audio/ui/sonagram.mjs +4 -4
  31. package/esm2022/lib/db/inddb.mjs +4 -4
  32. package/esm2022/lib/dsp/utils.mjs +1 -1
  33. package/esm2022/lib/io/BinaryReader.mjs +1 -1
  34. package/esm2022/lib/io/BinaryWriter.mjs +1 -1
  35. package/esm2022/lib/io/stream.mjs +1 -1
  36. package/esm2022/lib/math/complex.mjs +1 -1
  37. package/esm2022/lib/math/dft.mjs +1 -1
  38. package/esm2022/lib/net/uploader.mjs +1 -1
  39. package/esm2022/lib/recorder_component.mjs +1 -1
  40. package/esm2022/lib/speechrecorder/project/project.mjs +1 -1
  41. package/esm2022/lib/speechrecorder/project/project.service.mjs +4 -4
  42. package/esm2022/lib/speechrecorder/recording.mjs +1 -1
  43. package/esm2022/lib/speechrecorder/recordings/basic_recording.service.mjs +1 -1
  44. package/esm2022/lib/speechrecorder/recordings/recordings.service.mjs +4 -4
  45. package/esm2022/lib/speechrecorder/script/script.mjs +1 -1
  46. package/esm2022/lib/speechrecorder/script/script.service.mjs +4 -4
  47. package/esm2022/lib/speechrecorder/session/audiorecorder.mjs +7 -7
  48. package/esm2022/lib/speechrecorder/session/basicrecorder.mjs +1 -1
  49. package/esm2022/lib/speechrecorder/session/controlpanel.mjs +22 -22
  50. package/esm2022/lib/speechrecorder/session/item.mjs +1 -1
  51. package/esm2022/lib/speechrecorder/session/progress.mjs +4 -4
  52. package/esm2022/lib/speechrecorder/session/prompting.mjs +16 -16
  53. package/esm2022/lib/speechrecorder/session/recorder_combi_pane.mjs +3 -3
  54. package/esm2022/lib/speechrecorder/session/recording_file_cache.mjs +1 -1
  55. package/esm2022/lib/speechrecorder/session/recording_list.mjs +4 -4
  56. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +4 -4
  57. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +4 -4
  58. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +4 -4
  59. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +4 -4
  60. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file.mjs +1 -1
  61. package/esm2022/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +4 -4
  62. package/esm2022/lib/speechrecorder/session/session.service.mjs +4 -4
  63. package/esm2022/lib/speechrecorder/session/session_finished_dialog.mjs +3 -3
  64. package/esm2022/lib/speechrecorder/session/sessionmanager.mjs +4 -4
  65. package/esm2022/lib/speechrecorder/session/warning_bar.mjs +4 -4
  66. package/esm2022/lib/speechrecorder/spruploader.mjs +4 -4
  67. package/esm2022/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +4 -4
  68. package/esm2022/lib/speechrecorderng.component.mjs +4 -4
  69. package/esm2022/lib/speechrecorderng.module.mjs +9 -13
  70. package/esm2022/lib/spr.config.mjs +3 -3
  71. package/esm2022/lib/spr.module.version.mjs +2 -2
  72. package/esm2022/lib/ui/canvas_layer_comp.mjs +4 -4
  73. package/esm2022/lib/ui/intersection-observer.directive.mjs +4 -4
  74. package/esm2022/lib/ui/message_dialog.mjs +3 -3
  75. package/esm2022/lib/ui/recordingitem_display.mjs +7 -7
  76. package/esm2022/lib/ui/responsive_component.mjs +3 -3
  77. package/esm2022/lib/utils/scrollIntoViewToBottom.mjs +4 -4
  78. package/esm2022/lib/utils/ua-parser.mjs +1 -1
  79. package/esm2022/lib/utils/utils.mjs +1 -1
  80. package/esm2022/lib/utils/wake_lock.mjs +1 -1
  81. package/fesm2022/speechrecorderng.mjs +171 -174
  82. package/fesm2022/speechrecorderng.mjs.map +1 -1
  83. package/lib/speechrecorderng.module.d.ts +11 -12
  84. package/lib/spr.module.version.d.ts +1 -1
  85. package/package.json +13 -13
@@ -874,15 +874,15 @@ export class Sonagram extends AudioCanvasLayerComponent {
874
874
  this._audioDataHolder = audioData;
875
875
  this.playFramePosition = 0;
876
876
  }
877
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: Sonagram, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
878
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: Sonagram, selector: "audio-sonagram", viewQueries: [{ propertyName: "sonagramCanvasRef", first: true, predicate: ["sonagram"], descendants: true, static: true }, { propertyName: "markerCanvasRef", first: true, predicate: ["marker"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
877
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: Sonagram, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
878
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: Sonagram, selector: "audio-sonagram", viewQueries: [{ propertyName: "sonagramCanvasRef", first: true, predicate: ["sonagram"], descendants: true, static: true }, { propertyName: "markerCanvasRef", first: true, predicate: ["marker"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
879
879
  <canvas #sonagram height="10"></canvas>
880
880
  <canvas #bg height="10"></canvas>
881
881
  <canvas #cursor height="10" (mousedown)="selectionStart($event)" (mouseover)="updateCursorCanvas($event)" (mousemove)="updateCursorCanvas($event)"
882
882
  (mouseleave)="updateCursorCanvas($event, false)"></canvas>
883
883
  <canvas #marker height="10"></canvas>`, isInline: true, styles: [":host{min-height:0px}\n", "canvas{top:0;left:0;width:0;height:0;min-height:0px;position:absolute}\n"] }); }
884
884
  }
885
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: Sonagram, decorators: [{
885
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: Sonagram, decorators: [{
886
886
  type: Component,
887
887
  args: [{ selector: 'audio-sonagram', template: `
888
888
  <canvas #sonagram height="10"></canvas>
@@ -897,4 +897,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
897
897
  type: ViewChild,
898
898
  args: ['marker', { static: true }]
899
899
  }] } });
900
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29uYWdyYW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvYXVkaW8vdWkvc29uYWdyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBUyxLQUFLLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDdkMsT0FBTyxFQUFDLFNBQVMsRUFBYyxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxpQkFBaUIsRUFBa0IsTUFBTSxzQkFBc0IsQ0FBQzs7QUFLeEUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUF3QjlCLE1BQU0sT0FBTyxRQUFTLFNBQVEseUJBQXlCO0lBb0JuRCxZQUFvQixHQUFlO1FBQy9CLEtBQUssRUFBRSxDQUFDO1FBRFEsUUFBRyxHQUFILEdBQUcsQ0FBWTtRQVIzQix1QkFBa0IsR0FBYyxJQUFJLENBQUM7UUFJckMsY0FBUyxHQUFtQixJQUFJLENBQUM7UUFFakMsWUFBTyxHQUFHLGdCQUFnQixDQUFDO1FBSS9CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1FBQ25DLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXhDLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FB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RUFBRSxDQUFDO29CQUNiLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ04sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQ3JCLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN0QixDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDdEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFFN0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFOzRCQUNoQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7NEJBQ3hDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQzs0QkFDeEMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDOzRCQUM1QixHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7NEJBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDOzRCQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt5QkFDeEI7cUJBQ0o7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c0NvbnRlbnQiOlsiaW1wb3J0IHtERlRGbG9hdDMyfSBmcm9tICcuLi8uLi9tYXRoL2RmdCc7XHJcbmltcG9ydCB7TWFya2VyLCBQb2ludH0gZnJvbSAnLi9jb21tb24nO1xyXG5pbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgVmlld0NoaWxkfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0F1ZGlvQ2FudmFzTGF5ZXJDb21wb25lbnR9IGZyb20gXCIuL2F1ZGlvX2NhbnZhc19sYXllcl9jb21wXCI7XHJcbmltcG9ydCB7V29ya2VySGVscGVyfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcclxuaW1wb3J0IHtBdWRpb0J1ZmZlclNvdXJjZSwgQXVkaW9EYXRhSG9sZGVyfSBmcm9tIFwiLi4vYXVkaW9fZGF0YV9ob2xkZXJcIjtcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XHJcblxyXG5kZWNsYXJlIGZ1bmN0aW9uIHBvc3RNZXNzYWdlKG1lc3NhZ2U6IGFueSwgdHJhbnNmZXI6IEFycmF5PGFueT4pOiB2b2lkO1xyXG5cclxuY29uc3QgREVGQVVMVF9ERlRfU0laRSA9IDEwMjQ7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHJcbiAgICBzZWxlY3RvcjogJ2F1ZGlvLXNvbmFncmFtJyxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGNhbnZhcyAjc29uYWdyYW0gaGVpZ2h0PVwiMTBcIj48L2NhbnZhcz5cclxuICAgICAgICA8Y2FudmFzICNiZyBoZWlnaHQ9XCIxMFwiPjwvY2FudmFzPlxyXG4gICAgICAgIDxjYW52YXMgI2N1cnNvciBoZWlnaHQ9XCIxMFwiIChtb3VzZWRvd24pPVwic2VsZWN0aW9uU3RhcnQoJGV2ZW50KVwiIChtb3VzZW92ZXIpPVwidXBkYXRlQ3Vyc29yQ2FudmFzKCRldmVudClcIiAobW91c2Vtb3ZlKT1cInVwZGF0ZUN1cnNvckNhbnZhcygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cInVwZGF0ZUN1cnNvckNhbnZhcygkZXZlbnQsIGZhbHNlKVwiPjwvY2FudmFzPlxyXG4gICAgICAgIDxjYW52YXMgI21hcmtlciBoZWlnaHQ9XCIxMFwiPjwvY2FudmFzPmAsXHJcblxyXG4gICAgc3R5bGVzOiBbYDpob3N0e1xyXG4gICAgICBtaW4taGVpZ2h0OiAwcHg7XHJcbiAgICB9YCxgY2FudmFzIHtcclxuICAgICAgICB0b3A6IDA7XHJcbiAgICAgICAgbGVmdDogMDtcclxuICAgICAgICB3aWR0aDogMDtcclxuICAgICAgICBoZWlnaHQ6IDA7XHJcbiAgICAgIG1pbi1oZWlnaHQ6IDBweDtcclxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB9YF1cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTb25hZ3JhbSBleHRlbmRzIEF1ZGlvQ2FudmFzTGF5ZXJDb21wb25lbnQge1xyXG5cclxuICAgIGRmdDogREZURmxvYXQzMjtcclxuICAgIG46IGFueTtcclxuICAgIGNlITogSFRNTERpdkVsZW1lbnQ7XHJcbiAgICBzb25hZ3JhbUNhbnZhcyE6IEhUTUxDYW52YXNFbGVtZW50O1xyXG4gICAgLy9jdXJzb3JDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50O1xyXG4gICAgbWFya2VyQ2FudmFzITogSFRNTENhbnZhc0VsZW1lbnQ7XHJcbiAgICBAVmlld0NoaWxkKCdzb25hZ3JhbScsIHsgc3RhdGljOiB0cnVlIH0pIHNvbmFncmFtQ2FudmFzUmVmITogRWxlbWVudFJlZjtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdtYXJrZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBtYXJrZXJDYW52YXNSZWYhOiBFbGVtZW50UmVmO1xyXG4gICAgbWFya2VyczogQXJyYXk8TWFya2VyPjtcclxuICAgIHByaXZhdGUgX3BsYXlGcmFtZVBvc2l0aW9uOiBudW1iZXJ8bnVsbD1udWxsO1xyXG5cclxuICAgIHByaXZhdGUgd29ya2VyOiBXb3JrZXIgfCBudWxsO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSB3b3JrZXJVUkw6IHN0cmluZztcclxuICAgIHByaXZhdGUgcmFBc1N1YnNjOlN1YnNjcmlwdGlvbnxudWxsPW51bGw7XHJcblxyXG4gICAgcHJpdmF0ZSBkZnRTaXplID0gREVGQVVMVF9ERlRfU0laRTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZjogRWxlbWVudFJlZikge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy53b3JrZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2F1ZGlvRGF0YUhvbGRlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tYXJrZXJzID0gbmV3IEFycmF5PE1hcmtlcj4oKTtcclxuICAgICAgICB0aGlzLmRmdCA9IG5ldyBERlRGbG9hdDMyKHRoaXMuZGZ0U2l6ZSk7XHJcblxyXG4gICAgICAgIHRoaXMud29ya2VyVVJMID0gV29ya2VySGVscGVyLmJ1aWxkV29ya2VyQmxvYlVSTCh0aGlzLndvcmtlckZ1bmN0aW9uKVxyXG4gICAgICAgdGhpcy5fYmdDb2xvcj1udWxsO1xyXG4gICAgICAgdGhpcy5fc2VsZWN0Q29sb3I9J3JnYmEoMjU1LDI1NSwwLDAuMSknXHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG5cclxuICAgICAgICB0aGlzLmNlID0gdGhpcy5yZWYubmF0aXZlRWxlbWVudDtcclxuICAgICAgICB0aGlzLnNvbmFncmFtQ2FudmFzID0gdGhpcy5zb25hZ3JhbUNhbnZhc1JlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuc29uYWdyYW1DYW52YXMuc3R5bGUuekluZGV4ID0gJzEnO1xyXG4gICAgICB0aGlzLmJnQ2FudmFzID0gdGhpcy5iZ0NhbnZhc1JlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICB0aGlzLmJnQ2FudmFzLnN0eWxlLnpJbmRleCA9ICcyJztcclxuICAgICAgICB0aGlzLmN1cnNvckNhbnZhcyA9IHRoaXMuY3Vyc29yQ2FudmFzUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5jdXJzb3JDYW52YXMuc3R5bGUuekluZGV4ID0gJzQnO1xyXG4gICAgICAgIHRoaXMubWFya2VyQ2FudmFzID0gdGhpcy5tYXJrZXJDYW52YXNSZWYubmF0aXZlRWxlbWVudDtcclxuICAgICAgICB0aGlzLm1hcmtlckNhbnZhcy5zdHlsZS56SW5kZXggPSAnMyc7XHJcblxyXG4gICAgICAgIHRoaXMuY2FudmFzTGF5ZXJzWzBdID0gdGhpcy5zb25hZ3JhbUNhbnZhcztcclxuICAgICAgdGhpcy5jYW52YXNMYXllcnNbMV0gPSB0aGlzLmJnQ2FudmFzO1xyXG4gICAgICB0aGlzLmNhbnZhc0xheWVyc1syXSA9IHRoaXMuY3Vyc29yQ2FudmFzO1xyXG4gICAgICAgIHRoaXMuY2FudmFzTGF5ZXJzWzNdID0gdGhpcy5tYXJrZXJDYW52YXM7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldCBwbGF5RnJhbWVQb3NpdGlvbigpOiBudW1iZXJ8bnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXlGcmFtZVBvc2l0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBwbGF5RnJhbWVQb3NpdGlvbihwbGF5RnJhbWVQb3NpdGlvbjogbnVtYmVyfG51bGwpIHtcclxuICAgICAgICB0aGlzLl9wbGF5RnJhbWVQb3NpdGlvbiA9IHBsYXlGcmFtZVBvc2l0aW9uO1xyXG4gICAgICAgIC8vIHRoaXMucmVkcmF3KCk7XHJcbiAgICAgICAgdGhpcy5kcmF3UGxheVBvc2l0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjYW52YXNNb3VzZVBvcyhjOiBIVE1MQ2FudmFzRWxlbWVudCwgZTogTW91c2VFdmVudCk6IFBvaW50IHtcclxuICAgICAgICBjb25zdCBjciA9IGMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHggPSBlLnggLSBjci5sZWZ0O1xyXG4gICAgICAgIGNvbnN0IHkgPSBlLnkgLSBjci50b3A7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludCh4LHkpO1xyXG4gICAgfVxyXG5cclxuICBkcmF3U3RhdGVUZXh0KHN0YXRlVGV4dDpzdHJpbmcpIHtcclxuICAgICAgICBpZihzdGF0ZVRleHQpIHtcclxuICAgICAgICAgICAgY29uc3QgZyA9IHRoaXMuc29uYWdyYW1DYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICBjb25zdCB3ID0gdGhpcy5zb25hZ3JhbUNhbnZhcy53aWR0aDtcclxuICAgICAgICAgICAgY29uc3QgaCA9IHRoaXMuc29uYWdyYW1DYW52YXMuaGVpZ2h0O1xyXG4gICAgICAgICAgICBpZiAoZyAmJiB3ICYmIGgpIHtcclxuICAgICAgICAgICAgICAgIGcuc3Ryb2tlU3R5bGUgPSAnYmxhY2snO1xyXG4gICAgICAgICAgICAgICAgZy5maWxsU3R5bGUgPSAnYmxhY2snO1xyXG4gICAgICAgICAgICAgICAgZy5mb250ID0gJzIwcHggc2Fucy1zZXJpZic7XHJcbiAgICAgICAgICAgICAgICBnLmZpbGxUZXh0KHN0YXRlVGV4dCwgMTAsIDI1KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICB9XHJcblxyXG4gIGRyYXdDdXJzb3JQb3NpdGlvbihlOiBNb3VzZUV2ZW50LCBzaG93OiBib29sZWFuKSB7XHJcblxyXG4gICAgaWYgKHRoaXMuY3Vyc29yQ2FudmFzKSB7XHJcbiAgICAgIGNvbnN0IHcgPSB0aGlzLmN1cnNvckNhbnZhcy53aWR0aDtcclxuICAgICAgY29uc3QgaCA9IHRoaXMuY3Vyc29yQ2FudmFzLmhlaWdodDtcclxuICAgICAgY29uc3QgZyA9IHRoaXMuY3Vyc29yQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgIGlmIChnKSB7XHJcbiAgICAgICAgZy5jbGVhclJlY3QoMCwgMCwgdywgaCk7XHJcbiAgICAgICAgaWYgKHNob3cpIHtcclxuICAgICAgICAgIC8vY29uc3QgcHAgPSB0aGlzLmNhbnZhc01vdXNlUG9zKHRoaXMuY3Vyc29yQ2FudmFzLCBlKTtcclxuICAgICAgICAgIGxldCB4Vmlld1BvcnRQaXhlbHBvcyA9IGUub2Zmc2V0WDtcclxuXHJcbiAgICAgICAgICBnLmZpbGxTdHlsZSA9ICd5ZWxsb3cnO1xyXG4gICAgICAgICAgZy5zdHJva2VTdHlsZSA9ICd5ZWxsb3cnO1xyXG4gICAgICAgICAgZy5iZWdpblBhdGgoKTtcclxuICAgICAgICAgIGcubW92ZVRvKHhWaWV3UG9ydFBpeGVscG9zLCAwKTtcclxuICAgICAgICAgIGcubGluZVRvKHhWaWV3UG9ydFBpeGVscG9zLCBoKTtcclxuICAgICAgICAgIGcuY2xvc2VQYXRoKCk7XHJcblxyXG4gICAgICAgICAgZy5zdHJva2UoKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5fYXVkaW9EYXRhSG9sZGVyKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgZnJhbWVQb3NSb3VuZCA9IHRoaXMudmlld1BvcnRYUGl4ZWxUb0ZyYW1lUG9zaXRpb24oeFZpZXdQb3J0UGl4ZWxwb3MpO1xyXG4gICAgICAgICAgICBpZihmcmFtZVBvc1JvdW5kIT1udWxsKSB7XHJcbiAgICAgICAgICAgICAgZy5mb250ID0gJzE0cHggc2Fucy1zZXJpZic7XHJcbiAgICAgICAgICAgICAgZy5maWxsU3R5bGUgPSAneWVsbG93JztcclxuICAgICAgICAgICAgICBnLmZpbGxUZXh0KGZyYW1lUG9zUm91bmQudG9TdHJpbmcoKSwgeFZpZXdQb3J0UGl4ZWxwb3MgKyAyLCA1MCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICAgZHJhd1BsYXlQb3NpdGlvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5tYXJrZXJDYW52YXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdyA9IHRoaXMubWFya2VyQ2FudmFzLndpZHRoO1xyXG4gICAgICAgICAgICBjb25zdCBoID0gdGhpcy5tYXJrZXJDYW52YXMuaGVpZ2h0O1xyXG4gICAgICAgICAgICBjb25zdCBnID0gdGhpcy5tYXJrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICBpZiAoZykge1xyXG4gICAgICAgICAgICAgICAgZy5jbGVhclJlY3QoMCwgMCwgdywgaCk7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLl9wbGF5RnJhbWVQb3NpdGlvbiE9bnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwaXhlbFBvcyA9IHRoaXMuZnJhbWVUb1ZpZXdQb3J0WFBpeGVsUG9zaXRpb24odGhpcy5fcGxheUZyYW1lUG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwaXhlbFBvcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBnLmZpbGxTdHlsZSA9ICdyZWQnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBnLnN0cm9rZVN0eWxlID0gJ3JlZCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGcuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGcubW92ZVRvKHBpeGVsUG9zLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZy5saW5lVG8ocGl4ZWxQb3MsIGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBnLmNsb3NlUGF0aCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBnLnN0cm9rZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogIE1ldGhvZCB1c2VkIGFzIHdvcmtlciBjb2RlLlxyXG4gICAgICovXHJcbiAgICB3b3JrZXJGdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgLy8gUmVkZWZpbmUgc29tZSBEU1AgY2xhc3NlcyBmb3Igd29ya2VyIGZ1bmN0aW9uXHJcbiAgICAgICAgLy8gU2VlIGUuZy4gYXVkaW8ubWF0aC5Db21wbGV4XHJcbiAgICAgICAgY2xhc3MgQ29tcGxleCB7XHJcblxyXG4gICAgICAgICAgICByZWFsOiBudW1iZXI7XHJcbiAgICAgICAgICAgIGltZzogbnVtYmVyO1xyXG5cclxuICAgICAgICAgICAgcHVibGljIHN0YXRpYyBmcm9tUG9sYXJGb3JtKG1hZ25pdHVkZTogbnVtYmVyLCBhcmd1bWVudDogbnVtYmVyKTogQ29tcGxleCB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByID0gTWF0aC5jb3MoYXJndW1lbnQpICogbWFnbml0dWRlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaSA9IE1hdGguc2luKGFyZ3VtZW50KSAqIG1hZ25pdHVkZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29tcGxleChyLCBpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3RydWN0b3IocmVhbDogbnVtYmVyLCBpbWc6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWFsID0gcmVhbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwdWJsaWMgbWFnbml0dWRlKCk6IG51bWJlciB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KCh0aGlzLnJlYWwgKiB0aGlzLnJlYWwpICsgKHRoaXMuaW1nICogdGhpcy5pbWcpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcHVibGljIGFyZ3VtZW50KCk6IG51bWJlciB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5hdGFuMih0aGlzLmltZywgdGhpcy5yZWFsKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcHVibGljIGFkZChhZGRDOiBDb21wbGV4KTogQ29tcGxleCB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgodGhpcy5yZWFsICsgYWRkQy5yZWFsLCB0aGlzLmltZyArIGFkZEMuaW1nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcHVibGljIHN1YihzdWJDOiBDb21wbGV4KTogQ29tcGxleCB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgodGhpcy5yZWFsIC0gc3ViQy5yZWFsLCB0aGlzLmltZyAtIHN1YkMuaW1nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcHVibGljIG11bHQobXVsdEM6IENvbXBsZXgpOiBDb21wbGV4IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG11bHRSID0gKHRoaXMucmVhbCAqIG11bHRDLnJlYWwpIC0gKHRoaXMuaW1nICogbXVsdEMuaW1nKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG11bHRJID0gKHRoaXMucmVhbCAqIG11bHRDLmltZykgKyAobXVsdEMucmVhbCAqIHRoaXMuaW1nKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29tcGxleChtdWx0UiwgbXVsdEkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwdWJsaWMgbXVsdFJlYWwobXVsdEY6IG51bWJlcik6IENvbXBsZXgge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHRoaXMucmVhbCAqIG11bHRGLCB0aGlzLmltZyAqIG11bHRGKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcHVibGljIGRpdihkaXZpc29yOiBDb21wbGV4KTogQ29tcGxleCB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaXZSZWFsID0gZGl2aXNvci5yZWFsO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGl2SW1nID0gZGl2aXNvci5pbWc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaXYgPSAoZGl2UmVhbCAqIGRpdlJlYWwpICsgKGRpdkltZyAqIGRpdkltZyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaXZpc2lvblJlYWwgPSAoKHRoaXMucmVhbCAqIGRpdlJlYWwpICsgKHRoaXMuaW1nICogZGl2SW1nKSkgLyBkaXY7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaXZpc2lvbkltZyA9ICgoZGl2UmVhbCAqIHRoaXMuaW1nKSAtICh0aGlzLnJlYWwgKiBkaXZJbWcpKSAvIGRpdjtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoZGl2aXNpb25SZWFsLCBkaXZpc2lvbkltZyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHB1YmxpYyBkaXZSZWFsKGRpdmlzb3I6IG51bWJlcik6IENvbXBsZXgge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGl2ID0gZGl2aXNvciAqIGRpdmlzb3I7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaXZzaW9uUmVhbCA9ICh0aGlzLnJlYWwgKiBkaXZpc29yKSAvIGRpdjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpdnNpb25JbWcgPSAoZGl2aXNvciAqIHRoaXMuaW1nKSAvIGRpdjtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoZGl2c2lvblJlYWwsIGRpdnNpb25JbWcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwdWJsaWMgY29uanVnYXRlKCk6IENvbXBsZXgge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHRoaXMucmVhbCwgLXRoaXMuaW1nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcHVibGljIGVxdWFscyhjOiBDb21wbGV4KTogYm9vbGVhbiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYyA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5yZWFsID09PSBjLnJlYWwgJiYgdGhpcy5pbWcgPT09IGMuaW1nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1JlYWw6ICcgKyB0aGlzLnJlYWwgKyAnLCBJbWc6ICcgKyB0aGlzLmltZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2xhc3MgREZURmxvYXQzMiB7XHJcblxyXG4gICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG46IG51bWJlcjtcclxuICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBtOiBudW1iZXI7XHJcblxyXG4gICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNvc0xvb2t1cDogRmxvYXQzMkFycmF5O1xyXG4gICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHNpbkxvb2t1cDogRmxvYXQzMkFycmF5O1xyXG5cclxuICAgICAgICAgICAgY29uc3RydWN0b3IobjogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm4gPSBuO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tID0gTWF0aC5sb2cobikgLyBNYXRoLmxvZygyKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZihuICE9ICgxIDw8IG0pKXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKFwibGVuZ3RoIE4gbXVzdCBiZSBwb3dlciBvZiAyXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGxvb2t1cCB0YWJsZXNcclxuICAgICAgICAgICAgICAgIHRoaXMuY29zTG9va3VwID0gbmV3IEZsb2F0MzJBcnJheShuIC8gMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNpbkxvb2t1cCA9IG5ldyBGbG9hdDMyQXJyYXkobiAvIDIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbiAvIDI7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyYyA9ICgtMiAqIE1hdGguUEkgKiBpKSAvIG47XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3NMb29rdXBbaV0gPSBNYXRoLmNvcyhhcmMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2luTG9va3VwW2ldID0gTWF0aC5zaW4oYXJjKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcHVibGljIHByb2Nlc3NSZWFsKHNyY0J1ZjogRmxvYXQzMkFycmF5KTogQXJyYXk8Q29tcGxleD4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeCA9IHNyY0J1Zi5zbGljZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeSA9IG5ldyBGbG9hdDMyQXJyYXkoc3JjQnVmLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB5aSA9IDA7IHlpIDwgeS5sZW5ndGg7IHlpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB5W3lpXSA9IDAuMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZmZ0Q29vbGV5VHVrZXkoeCwgeSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByYyA9IG5ldyBBcnJheTxDb21wbGV4Pih4Lmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHgubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICByY1tpXSA9IG5ldyBDb21wbGV4KHhbaV0sIHlbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJjO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwdWJsaWMgcHJvY2Vzc1JlYWxNYWduaXR1ZGUoc3JjQnVmOiBGbG9hdDMyQXJyYXkpOiBGbG9hdDMyQXJyYXkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeCA9IHNyY0J1Zi5zbGljZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeSA9IG5ldyBGbG9hdDMyQXJyYXkoc3JjQnVmLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB5aSA9IDA7IHlpIDwgeS5sZW5ndGg7IHlpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB5W3lpXSA9IDAuMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZmZ0Q29vbGV5VHVrZXkoeCwgeSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByYyA9IG5ldyBGbG9hdDMyQXJyYXkoeC5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmNjID0gbmV3IENvbXBsZXgoeFtpXSwgeVtpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmNbaV0gPSByY2MubWFnbml0dWRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHB1YmxpYyBmZnRDb29sZXlUdWtleShyZWFsOiBGbG9hdDMyQXJyYXksIGltZzogRmxvYXQzMkFycmF5KTogdm9pZCB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgbGV0IGogPSAwO1xyXG4gICAgICAgICAgICAgICAgbGV0IGs6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgIGxldCBuMTogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgbGV0IG4yOiBudW1iZXIgPSB0aGlzLm4gLyAyO1xyXG4gICAgICAgICAgICAgICAgbGV0IGE6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgIGxldCBjOiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICBsZXQgczogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgbGV0IHQxOiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICBsZXQgdDI6IG51bWJlcjtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgdGhpcy5uIC0gMTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbjEgPSBuMjtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaiA+PSBuMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBqID0gaiAtIG4xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuMSA9IG4xIC8gMjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaiA9IGogKyBuMTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBqKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHQxID0gcmVhbFtpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhbFtpXSA9IHJlYWxbal07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxbal0gPSB0MTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdDEgPSBpbWdbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZ1tpXSA9IGltZ1tqXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nW2pdID0gdDE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG4xID0gMDtcclxuICAgICAgICAgICAgICAgIG4yID0gMTtcclxuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLm07IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIG4xID0gbjI7XHJcbiAgICAgICAgICAgICAgICAgICAgbjIgPSBuMiArIG4yO1xyXG4gICAgICAgICAgICAgICAgICAgIGEgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBuMTsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGMgPSB0aGlzLmNvc0xvb2t1cFthXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHRoaXMuc2luTG9va3VwW2FdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhICs9ICgxIDw8ICh0aGlzLm0gLSBpIC0gMSkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gajsgayA8IHRoaXMubjsgayA9IGsgKyBuMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEgPSBjICogcmVhbFtrICsgbjFdIC0gcyAqIGltZ1trICsgbjFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdDIgPSBzICogcmVhbFtrICsgbjFdICsgYyAqIGltZ1trICsgbjFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbFtrICsgbjFdID0gcmVhbFtrXSAtIHQxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nW2sgKyBuMV0gPSBpbWdba10gLSB0MjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxba10gPSByZWFsW2tdICsgdDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdba10gPSBpbWdba10gKyB0MjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIHB1YmxpYyBwcm9jZXNzKHQ6IEFycmF5PENvbXBsZXg+KTogQXJyYXk8Q29tcGxleD4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVhbHM6IEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5uKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGltZ3M6IEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5uKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zOiBBcnJheTxDb21wbGV4PiA9IG5ldyBBcnJheTxDb21wbGV4Pih0aGlzLm4pO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlYWxzW2ldID0gdFtpXS5yZWFsO1xyXG4gICAgICAgICAgICAgICAgICAgIGltZ3NbaV0gPSB0W2ldLmltZztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZmZ0Q29vbGV5VHVrZXkocmVhbHMsIGltZ3MpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zW2ldID0gbmV3IENvbXBsZXgocmVhbHNbaV0sIGltZ3NbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zO1xyXG5cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpbnRlcmZhY2UgV2luZG93RnVuY3Rpb24ge1xyXG4gICAgICAgICAgICBnZXRTY2FsZShpOiBudW1iZXIpOiBudW1iZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjbGFzcyBHYXVzc2lhbldpbmRvdyBpbXBsZW1lbnRzIFdpbmRvd0Z1bmN0aW9uIHtcclxuXHJcbiAgICAgICAgICAgIHB1YmxpYyBzdGF0aWMgREVGQVVMVF9TSUdNQSA9IDAuMztcclxuICAgICAgICAgICAgLy8gR2F1c3NpYW4gd2luZG93IGZ1bmN0aW9uLFxyXG4gICAgICAgICAgICAvLyBodHRwOi8vcmVmZXJlbmNlLndvbGZyYW0uY29tL2xhbmd1YWdlL3JlZi9HYXVzc2lhbldpbmRvdy5odG1sXHJcbiAgICAgICAgICAgIC8vIHZhbD1leHAoLTUwKngqeC85KSA9PiBzaWdtYT0wLjNcclxuXHJcbiAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYnVmOiBGbG9hdDMyQXJyYXk7XHJcblxyXG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihzaXplOiBudW1iZXIsIHNpZ21hOiBudW1iZXIgPSBHYXVzc2lhbldpbmRvdy5ERUZBVUxUX1NJR01BKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZiA9IG5ldyBGbG9hdDMyQXJyYXkoc2l6ZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjZW50ZXIgPSAoc2l6ZSAtIDEpIC8gMjtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVvdCA9IChpIC0gY2VudGVyKSAvIChzaWdtYSAqIGNlbnRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwID0gLTAuNSAqIHF1b3QgKiBxdW90O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmW2ldID0gTWF0aC5leHAoZXhwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZ2V0U2NhbGUoaTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1ZltpXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNlbGYub25tZXNzYWdlID0gZnVuY3Rpb24gKG1zZzpNZXNzYWdlRXZlbnQpIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU29uYWdyYW0gcmVuZGVyIHRocmVhZFwiKTtcclxuICAgICAgICAgICAgbGV0IGwgPSBtc2cuZGF0YS5sO1xyXG4gICAgICAgICAgICBsZXQgdyA9IG1zZy5kYXRhLnc7XHJcbiAgICAgICAgICAgIGxldCBoID0gbXNnLmRhdGEuaDtcclxuICAgICAgICAgICAgbGV0IHZ3ID0gbXNnLmRhdGEudnc7XHJcbiAgICAgICAgICAgIGxldCBjaHMgPSBtc2cuZGF0YS5jaHM7XHJcbiAgICAgICAgICAgIGxldCBhdWRpb0RhdGFPZmZzZXQ9MDtcclxuICAgICAgICAgICAgbGV0IGFkT2Zmc2V0PW1zZy5kYXRhLmF1ZGlvRGF0YU9mZnNldDtcclxuICAgICAgICAgICAgaWYoYWRPZmZzZXQpe1xyXG4gICAgICAgICAgICAgIGF1ZGlvRGF0YU9mZnNldD1hZE9mZnNldDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgIGxldCBtYXhQc2QgPSBudWxsO1xyXG4gICAgICAgICAgICBpZihtc2cuZGF0YS5tYXhQc2QhPT11bmRlZmluZWQpe1xyXG4gICAgICAgICAgICAgIG1heFBzZD1tc2cuZGF0YS5tYXhQc2Q7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBhdWRpb0RhdGEgPSBuZXcgQXJyYXkoY2hzKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgICAgICAgYXVkaW9EYXRhW2NoXSA9IG5ldyBGbG9hdDMyQXJyYXkobXNnLmRhdGFbJ2F1ZGlvRGF0YSddW2NoXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBmcmFtZUxlbmd0aCA9IG1zZy5kYXRhLmZyYW1lTGVuZ3RoO1xyXG4gICAgICAgICAgICBsZXQgZGZ0U2l6ZSA9IG1zZy5kYXRhLmRmdFNpemU7XHJcblxyXG4gICAgICAgICAgICBsZXQgZGZ0QmFuZHMgPSBkZnRTaXplIC8gMjtcclxuICAgICAgICAgICAgbGV0IGRmdCA9IG5ldyBERlRGbG9hdDMyKGRmdFNpemUpO1xyXG4gICAgICAgICAgICBsZXQgd2YgPSBuZXcgR2F1c3NpYW5XaW5kb3coZGZ0U2l6ZSk7XHJcblxyXG4gICAgICAgICAgICBsZXQgYXJyU2l6ZT13KmgqNDtcclxuICAgICAgICAgICAgaWYoYXJyU2l6ZTwwKXtcclxuICAgICAgICAgICAgICAgIGFyclNpemU9MFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBpbWdEYXRhID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGFyclNpemUpO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiUmVuZGVyIG1ldGhvZDpcIik7XHJcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJDcmVhdGVkIGltZ0RhdGEgYXJyU2l6ZTogXCIrYXJyU2l6ZStcIiBcIiwgdywgXCJ4XCIsIGgpO1xyXG4gICAgICAgICAgbGV0IGNhbGNNYXhQc2Q9LUluZmluaXR5O1xyXG4gICAgICAgICAgICBpZiAoYXJyU2l6ZT4wKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGNoSCA9IE1hdGgucm91bmQoaCAvIGNocyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZnJhbWVzUGVyUGl4ZWwgPSBmcmFtZUxlbmd0aCAvIHZ3O1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiUmVuZGVyOiBcIiwgdywgXCJ4XCIsIGgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBiID0gbmV3IEZsb2F0MzJBcnJheShkZnRTaXplKTtcclxuICAgICAgICAgICAgICAgIGxldCBzb25hID0gbmV3IEFycmF5KGNocyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2hEYXRhTGVuPWF1ZGlvRGF0YVtjaF0ubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgREZUIGFycmF5IGJ1ZmZlclxyXG4gICAgICAgICAgICAgICAgICAgIHNvbmFbY2hdID0gbmV3IEFycmF5KHcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmcmFtZVBvcyA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcGlpID0gMDsgcGlpIDwgdzsgcGlpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZpcnRQaWkgPSBsICsgcGlpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBQb3NpdGlvbiBvZiBzYW1wbGUgZGF0YSBmcmFtZSBpcyBwaXhlbCBwb3NpdGlvbiBtYXBwZWQgdG8gYXVkaW8gZnJhbWUgcG9zaXRpb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlbiBcImNlbnRlclwiIHRoZSBmcmFtZSBieSBzaGlmdGluZyBsZWZ0IGJ5IGhhbGYgdGhlIERGVCBzaXplICg9ZGZ0QmFuZHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lUG9zID0gTWF0aC5yb3VuZCgodmlydFBpaSAqIGZyYW1lc1BlclBpeGVsKS1kZnRCYW5kcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpbGwgREZUIGJ1ZmZlciB3aXRoIHdpbmRvd2VkIHNhbXBsZSB2YWx1ZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZnRTaXplOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzYW1wbGVQb3M9ZnJhbWVQb3MgKyBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBmb3IgbmVnYXRpdmUgc2FtcGxlIHBvc2l0aW9ucyBhbmQgb3V0IG9mIGJvdW5kcyBwb3NpdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaERhdD0wO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCBhdWRpbyBzYW1wbGUgaWYgYXZhaWxhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWRwPXNhbXBsZVBvcy1hdWRpb0RhdGFPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihhZHA+PTAgJiYgYWRwIDwgY2hEYXRhTGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoRGF0ID0gYXVkaW9EYXRhW2NoXVthZHBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJBdWRpbyBkYXRhOiBcIitjaERhdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU2FtcGxlIGJ1ZiBwb3Mgb29iOiBhZHA6IFwiK2FkcCtcIiwgY2hEYXRhTGVuOiBcIitjaERhdGFMZW4rXCIsIHNhbXBsZVBvczogXCIrc2FtcGxlUG9zK1wiLCBpOiBcIitpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcHBseSBXaW5kb3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJbaV0gPSBjaERhdCAqIHdmLmdldFNjYWxlKGkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGMgREZUIG1hZ25pdHVkZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNwZWN0ciA9IGRmdC5wcm9jZXNzUmVhbE1hZ25pdHVkZShiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCBtYXhpbXVtIHZhbHVlIG9mIHNwZWN0cmFsIGVuZXJneVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IGRmdEJhbmRzOyBzKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwc2QgPSAoMiAqIE1hdGgucG93KHNwZWN0cltzXSwgMikpIC8gZGZ0QmFuZHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHNkID4gY2FsY01heFBzZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGNNYXhQc2QgPSBwc2Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHJlbmRlciBtb2RlbCBkYXRhIGZvciB0aGlzIHBpeGVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvbmFbY2hdW3BpaV0gPSBzcGVjdHI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCFtc2cuZGF0YS5ub3JlbmRlcikge1xyXG4gICAgICAgICAgICAgICAgICBpZighbWF4UHNkKXtcclxuICAgICAgICAgICAgICAgICAgICBtYXhQc2Q9Y2FsY01heFBzZDtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcGlpID0gMDsgcGlpIDwgdzsgcGlpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYWxsQmxhY2sgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgY2hIOyB5KyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBmcmVxSWR4ID0gTWF0aC5yb3VuZCh5ICogZGZ0QmFuZHMgLyBjaEgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBvbmUtc2lkZWQgcG93ZXIgc3BlY3RyYWwgZGVuc2l0eSBQU0QgKGYsIHQpIGluIFBhMi9IelxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gUFNEKGYpIHByb3BvcnRpb25hbCB0byAyfFgoZil8MiAvICh0MiAtIHQxKVxyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbCA9IHNvbmFbY2hdW3BpaV1bZnJlcUlkeF07XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgcHNkID0gKDIgKiBNYXRoLnBvdyh2YWwsIDIpKSAvIGRmdEJhbmRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGxvZ2FyaXRobWljIHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAvL2xldCBwc2RMb2cgPSBpcHMuZHNwLkRTUFV0aWxzLnRvTGV2ZWxJbkRCKHBzZCAvIG1heFBzZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgbGluZWFyTGV2ZWwgPSBwc2QgLyBtYXhQc2Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgcHNkTG9nID0gMTAgKiBNYXRoLmxvZyhsaW5lYXJMZXZlbCkgLyBNYXRoLmxvZygxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBGaXhlZCBkeW5hbWljIFJhbmdlIHZhbHVlIG9mIDcwZEIgZm9yIG5vd1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGR5blJhbmdlSW5EYiA9IDcwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IHNjYWxlZFZhbCA9IChwc2RMb2cgKyBkeW5SYW5nZUluRGIpIC8gZHluUmFuZ2VJbkRiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZSB0aGUgZm9sbG93aW5nIGNoZWNrcyBuZWNlc3NhcnkgZm9yIGNsYW1wZWQgYXJyYXkgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHNjYWxlZFZhbCA+IDEuMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVkVmFsID0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2FsZWRWYWwgPCAwLjApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVkVmFsID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGxldCByZ2JWYWwgPSBNYXRoLnJvdW5kKDI1NSAqIHNjYWxlZFZhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocmdiVmFsIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL1x0XHRcdFx0XHRcdFx0U3lzdGVtLm91dC5wcmludGxuKFwiTmVnIFJHQiB2YWw6IFwiK3JnYlZhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJnYlZhbCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocmdiVmFsID4gMjU1KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJnYlZhbCA9IDI1NTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIHJnYlZhbCA9IDI1NSAtIHJnYlZhbDtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChyZ2JWYWwgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbEJsYWNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgcHkgPSBjaEggLSB5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFQb3MgPSAoKCgoY2ggKiBjaEgpICsgcHkpICogdykgKyBwaWkpICogNDtcclxuICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGFbZGF0YVBvcyArIDBdID0gcmdiVmFsOyAvL1JcclxuICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGFbZGF0YVBvcyArIDFdID0gcmdiVmFsOyAvL0dcclxuICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGFbZGF0YVBvcyArIDJdID0gcmdiVmFsOyAvL0JcclxuICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGFbZGF0YVBvcyArIDNdID0gMjU1OyAvL0EgKGFscGhhOiBmdWxseSBvcGFxdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJSZW5kZXJlZDogcHk6IFwiK3B5K1wiLCByZ2J2YWw6IFwiK3JnYlZhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBleGFtcGxlIDF4MSwgMmNoc1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gIGNoMHgweTBSLGNoMHgweTBHLGNoMHgweTBCLGNoMHgweTBBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gIGNoMHgxeTBSLGNoMHgxeTBHLGNoMHgxeTBCLGNoMHgxeTBBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gIGNoMHgweTBSLGNoMHgweTBHLGNoMHgweTBCLGNoMHgweTBBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gIGNoMHgxeTFSLGNoMHgxeTFHLGNoMHgxeTFCLGNoMHgxeTFBLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIC8vICBjaDF4MHkwUixjaDF4MHkwRyxjaDF4MHkwQixjaDF4MHkwQSxcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICBjaDF4MXkwUixjaDF4MXkwRyxjaDF4MXkwQixjaDF4MXkwQSxcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICBjaDF4MHkwUixjaDF4MHkwRyxjaDF4MHkwQixjaDF4MHkwQSxcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICBjaDF4MXkxUixjaDF4MXkxRyxjaDF4MXkxQixjaDF4MXkxQVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBpZiAoYWxsQmxhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKFwiQmxhY2s6IFwiLCBwaWksIFwiIFwiLCBjaCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiUmVuZGVyIHRocmVhZCBwb3N0IG1lc3NhZ2UgaW1nRGF0YTogXCIraW1nRGF0YS5sZW5ndGgpXHJcbiAgICAgICAgICAgIHBvc3RNZXNzYWdlKHtpbWdEYXRhOiBpbWdEYXRhLCBsOiBsLCB3OiBtc2cuZGF0YS53LCBoOiBtc2cuZGF0YS5oLCB2dzogdncsbWF4UHNkOmNhbGNNYXhQc2QsdGVybWluYXRlOm1zZy5kYXRhLnRlcm1pbmF0ZX0sIFtpbWdEYXRhLmJ1ZmZlcl0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGFydERyYXcoY2xlYXIgPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKGNsZWFyKSB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuYm91bmRzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvbmFncmFtQ2FudmFzLnN0eWxlLmxlZnQgPSBNYXRoLnJvdW5kKHRoaXMuYm91bmRzLnBvc2l0aW9uLmxlZnQpLnRvU3RyaW5nKCkgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgbGV0IGludFcgPSBNYXRoLnJvdW5kKHRoaXMuYm91bmRzLmRpbWVuc2lvbi53aWR0aClcclxuICAgICAgICAgICAgICAgIGxldCBpbnRIID0gTWF0aC5yb3VuZCh0aGlzLmJvdW5kcy5kaW1lbnNpb24uaGVpZ2h0KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zb25hZ3JhbUNhbnZhcy53aWR0aCA9IGludFc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvbmFncmFtQ2FudmFzLmhlaWdodCA9IGludEg7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGcgPSB0aGlzLnNvbmFncmFtQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuICAgICAgICAgICAgICAgIGlmIChnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9nLmNsZWFyUmVjdCgwLCAwLHcsIGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGcuZmlsbFN0eWxlID0gXCJ3aGl0ZVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGcuZmlsbFJlY3QoMCwgMCwgaW50VywgaW50SCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zdGFydFJlbmRlcigpO1xyXG4gICAgICAgIHRoaXMuZHJhd0N1cnNvckxheWVyKClcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXJ0UmVuZGVyKCkge1xyXG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJTb25hZ3JhbSBzdGFydCByZW5kZXIuLi5cIik7XHJcbiAgICAgICAgaWYgKHRoaXMud29ya2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMud29ya2VyLnRlcm1pbmF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLndvcmtlciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICBpZih0aGlzLnJhQXNTdWJzYyl7XHJcbiAgICAgICAgdGhpcy5yYUFzU3Vic2MudW5zdWJzY3JpYmUoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5fYXVkaW9EYXRhSG9sZGVyKSB7XHJcbiAgICAgICAgdGhpcy5fYXVkaW9EYXRhSG9sZGVyLmFkZE9uUmVhZHlMaXN0ZW5lcigoKT0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLl9hdWRpb0RhdGFIb2xkZXIgJiYgdGhpcy5ib3VuZHMgJiYgdGhpcy5ib3VuZHMuZGltZW5zaW9uKSB7XHJcbiAgICAgICAgICAgIGxldCB3ID0gTWF0aC5yb3VuZCh0aGlzLmJvdW5kcy5kaW1lbnNpb24ud2lkdGgpO1xyXG4gICAgICAgICAgICBsZXQgaCA9IE1hdGgucm91bmQodGhpcy5ib3VuZHMuZGltZW5zaW9uLmhlaWdodCk7XHJcbiAgICAgICAgICAgIGxldCB2dyA9IE1hdGgucm91bmQodGhpcy52aXJ0dWFsRGltZW5zaW9uLndpZHRoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh3ID4gMCAmJiBoID4gMCAmJiB2dyA+IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy53b3JrZXIgPSBuZXcgV29ya2VyKHRoaXMud29ya2VyVVJMKTtcclxuICAgICAgICAgICAgICAvL3RoaXMud28gPSBuZXcgV29ya2VyKCcuL3dvcmtlci9zb25hZ3JhbS53b3JrZXInLCB7IHR5cGU6IGBtb2R1bGVgIH0pO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgY2hzID0gdGhpcy5fYXVkaW9EYXRhSG9sZGVyLm51bWJlck9mQ2hhbm5lbHM7XHJcbiAgICAgICAgICAgICAgbGV0IHZ3ID0gTWF0aC5yb3VuZCh0aGlzLnZpcnR1YWxEaW1lbnNpb24ud2lkdGgpO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgZnJhbWVMZW5ndGggPSB0aGlzLl9hdWRpb0RhdGFIb2xkZXIuZnJhbWVMZW47XHJcbiAgICAgICAgICAgICAgbGV0IGZyYW1lc1BlclBpeGVsID0gTWF0aC5jZWlsKGZyYW1lTGVuZ3RoIC8gdncpO1xyXG4gICAgICAgICAgICAgIGxldCBsZWZ0UG9zID0gTWF0aC5yb3VuZCh0aGlzLmJvdW5kcy5wb3NpdGlvbi5sZWZ0KTtcclxuICAgICAgICAgICAgICBsZXQgcmVuZGVyUG9zID0gbGVmdFBvcztcclxuICAgICAgICAgICAgICBsZXQgcmFBcyA9IHRoaXMuX2F1ZGlvRGF0YUhvbGRlci5yYW5kb21BY2Nlc3NBdWRpb1N0cmVhbSgpO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgYXVkaW9CdWZmZXI6IEF1ZGlvQnVmZmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgbGV0IGF1ZGlvU291cmNlID0gdGhpcy5fYXVkaW9EYXRhSG9sZGVyLmF1ZGlvU291cmNlO1xyXG4gICAgICAgICAgICAgIGlmIChhdWRpb1NvdXJjZSBpbnN0YW5jZW9mIEF1ZGlvQnVmZmVyU291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICBhdWRpb0J1ZmZlciA9IGF1ZGlvU291cmNlLmF1ZGlvQnVmZmVyO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvL2xldCBhcnJheUF1ZGlvQnVmZmVyPXRoaXMuX2F1ZGlvRGF0YUhvbGRlci5hcnJheUJ1ZmZlcjtcclxuICAgICAgICAgICAgICBsZXQgYXJyQWJCdWY6IEZsb2F0MzJBcnJheVtdIHwgbnVsbDtcclxuICAgICAgICAgICAgICBsZXQgYWRhID0gbmV3IEFycmF5PEFycmF5QnVmZmVyPihjaHMpO1xyXG4gICAgICAgICAgICAgIC8vIGZvcihsZXQgY2g9MDtjaDxjaHM7Y2grKykge1xyXG4gICAgICAgICAgICAgIC8vICAgYWRhW2NoXSA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5kZnRTaXplKTtcclxuICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgbGV0IGltZ0RhdGE6IFVpbnQ4Q2xhbXBlZEFycmF5O1xyXG4gICAgICAgICAgICAgIGxldCBtYXhQc2QgPSAtSW5maW5pdHk7XHJcbiAgICAgICAgICAgICAgbGV0IG5vcmVuZGVyID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMud29ya2VyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtlci5vbm1lc3NhZ2UgPSAobWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRydWUgPT09IG1lLmRhdGEudGVybWluYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRyYXdJbWdEYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbWdEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBkcmF3SW1nRGF0YSA9IGltZ0RhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGRyYXdJbWdEYXRhID0gbWUuZGF0YS5pbWdEYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdSZW5kZXJlZCh3LCBoLCBkcmF3SW1nRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMud29ya2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLndvcmtlci50ZXJtaW5hdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrZXIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHJhQXMuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHJlbmRlcmVkIHZlcnRpY2FsIHZhbHVlcyBvZiBvbmUgcGl4ZWwgb2YgdGltZXNjYWxlXHJcbiAgICAgICAgICAgICAgICAgICAgLy9sZXQgZGF0YVBvcyA9IHJlbmRlclBvcyAqIGggKiA0O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChub3JlbmRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG1lLmRhdGEubWF4UHNkID4gbWF4UHNkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFBzZCA9IG1lLmRhdGEubWF4UHNkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJuZXcgbWF4UHNkOiBcIittYXhQc2QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hIID0gTWF0aC5yb3VuZChoIC8gY2hzKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBpZHAgPSBtZS5kYXRhLmwgLSBsZWZ0UG9zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGNoSDsgeSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHB5ID0gY2hIIC0geTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YVBvcyA9ICgoKChjaCAqIGNoSCkgKyBweSkgKiB3KSArIGlkcCkgKiA0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtZVBvcyA9ICgoY2ggKiBjaEgpICsgcHkpICogNDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xldCBsYXN0UG9zID0gZGF0YVBvcyArIG1lLmRhdGEuaW1nRGF0YS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiAobGFzdFBvcyA8IGltZ0RhdGEubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2V0IG9uZSBwaXhlbFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdEYXRhW2RhdGFQb3NdID0gbWUuZGF0YS5pbWdEYXRhW21lUG9zXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdEYXRhW2RhdGFQb3MgKyAxXSA9IG1lLmRhdGEuaW1nRGF0YVttZVBvcyArIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGFbZGF0YVBvcyArIDJdID0gbWUuZGF0YS5pbWdEYXRhW21lUG9zICsgMl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nRGF0YVtkYXRhUG9zICsgM10gPSBtZS5kYXRhLmltZ0RhdGFbbWVQb3MgKyAzXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvL30gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmVycm9yKFwiT3V0IG9mIHJhbmdlOiBcIiArIGRhdGFQb3MgKyBcIitcIiArIG1lLmRhdGEuaW1nRGF0YS5sZW5ndGggKyBcIj49XCIgKyBpbWdEYXRhLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9hdWRpb0RhdGFIb2xkZXIgJiYgYXJyQWJCdWYgJiYgdGhpcy53b3JrZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIHByb2NlZWQgd2l0aCBuZXh0IHBpeGVsXHJcbiAgICAgICAgICAgICAgICAgICAgICByZW5kZXJQb3MrKztcclxuICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlJlbmRlciBwb3M6IFwiK3JlbmRlclBvcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IHRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IHdpbmRvd0VuZCA9IHJlbmRlclBvcyA+PSBsZWZ0UG9zICsgdztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93RW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub3JlbmRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBoYXNlIHR3bzogcmVuZGVyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbm9yZW5kZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGFydCBmcm9tIGJlZ2lubmluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclBvcyA9IGxlZnRQb3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwibm93IHJlbmRlcmluZzogbWF4UHNkOiBcIittYXhQc2QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRlcm1pbmF0ZSByZW5kZXIgcGhhc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGxlZnRGcmFtZVBvcyA9IE1hdGguZmxvb3IoZnJhbWVMZW5ndGggKiByZW5kZXJQb3MgLyB2dykgLSB0aGlzLmRmdFNpemUgLyAyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnRGcmFtZVBvcyA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEZyYW1lUG9zID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIC8vbGV0IGFkYSA9IG5ldyBBcnJheTxBcnJheUJ1ZmZlcj4oY2hzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJSZW5kZXIgcG9zOiBcIityZW5kZXJQb3MrXCIgbGVmdEZyYW1lUG9zOiBcIitsZWZ0RnJhbWVQb3MpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIGlmICghdGVybWluYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9hdWRpb0RhdGFIb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xldCByZWFkID0gdGhpcy5fYXVkaW9EYXRhSG9sZGVyLmZyYW1lcyhsZWZ0RnJhbWVQb3MsIHRoaXMuZGZ0U2l6ZSwgYXJyQWJCdWYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmFBc1N1YnNjID0gcmFBcy5mcmFtZXNPYnMobGVmdEZyYW1lUG9zLCB0aGlzLmRmdFNpemUsIGFyckFiQnVmKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IChyZWFkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyckFiQnVmICYmIHRoaXMud29ya2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZCA8IHRoaXMuZGZ0U2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB6ZXJvIHBhZGRpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHpwID0gcmVhZDsgenAgPCB0aGlzLmRmdFNpemU7IHpwKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyckFiQnVmW2NoXVt6cF0gPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIGEgY29weSBoZXJlIGZvciB0aGUgd29ya2VyLCBvdGhlcndpc2UgdGhpcy5hdWRpb0RhdGEgaXMgbm90IGFjY2Vzc2libGUgYWZ0ZXIgcG9zdGluZyB0byB0aGUgd29ya2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYWRhW2NoXSA9IGFyckFiQnVmW2NoXS5idWZmZXIuc2xpY2UoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyckFiQnVmQ2ggPSBhcnJBYkJ1ZltjaF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkTGVuID0gYXJyQWJCdWZDaC5idWZmZXIuYnl0ZUxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhZGFbY2hdIHx8IGFkYVtjaF0uYnl0ZUxlbmd0aCAhPT0gYWRMZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFbY2hdID0gbmV3IEFycmF5QnVmZmVyKGFkTGVuKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZkFkYUNoID0gbmV3IEZsb2F0MzJBcnJheShhZGFbY2hdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZkFkYUNoLnNldChhcnJBYkJ1ZltjaF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9EYXRhOiBhZGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvRGF0YU9mZnNldDogbGVmdEZyYW1lUG9zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsOiByZW5kZXJQb3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IG1lLmRhdGEudyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogaCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnc6IHZ3LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHM6IGNocyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVMZW5ndGg6IGZyYW1lTGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZnRTaXplOiB0aGlzLmRmdFNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFBzZDogbWF4UHNkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JlbmRlcjogbm9yZW5kZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZTogdGVybWluYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBhZGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiU29uYWdyYW06IEVycm9yIHJlYWRpbmcgYXVkaW8gZGF0YTogXCIgKyBlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFbY2hdID0gbmV3IEFycmF5QnVmZmVyKDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb0RhdGE6IGFkYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb0RhdGFPZmZzZXQ6IGxlZnRGcmFtZVBvcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBsOiByZW5kZXJQb3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdzogbWUuZGF0YS53LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGg6IGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdnc6IHZ3LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoczogY2hzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lTGVuZ3RoOiBmcmFtZUxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkZnRTaXplOiB0aGlzLmRmdFNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4UHNkOiBtYXhQc2QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbm9yZW5kZXI6IG5vcmVuZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZTogdGVybWluYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGFkYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChhdWRpb0J1ZmZlciAmJiBhdWRpb0J1ZmZlci5sZW5ndGggKiBhdWRpb0J1ZmZlci5udW1iZXJPZkNoYW5uZWxzIDwgQXVkaW9DYW52YXNMYXllckNvbXBvbmVudC5FTkFCTEVfU1RSRUFNSU5HX05VTUJFUl9PRl9TQU1QTEVTX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGFkYSA9IG5ldyBBcnJheTxBcnJheUJ1ZmZlcj4oY2hzKTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgICAgICAgICAgLy8gTmVlZCBhIGNvcHkgaGVyZSBmb3IgdGhlIHdvcmtlciwgb3RoZXJ3aXNlIHRoaXMuYXVkaW9EYXRhIGlzIG5vdCBhY2Nlc3NpYmxlIGFmdGVyIHBvc3RpbmcgdG8gdGhlIHdvcmtlclxyXG4gICAgICAgICAgICAgICAgICBhZGFbY2hdID0gYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2gpLmJ1ZmZlci5zbGljZSgwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXJrZXJDYW52YXMpIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGcgPSB0aGlzLm1hcmtlckNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZy5maWxsVGV4dChcIlJlbmRlcmluZy4uLlwiLCAxMCwgMjApO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy53b3JrZXIucG9zdE1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICAgICAgICBhdWRpb0RhdGE6IGFkYSxcclxuICAgICAgICAgICAgICAgICAgbDogbGVmdFBvcyxcclxuICAgICAgICAgICAgICAgICAgdzogdyxcclxuICAgICAgICAgICAgICAgICAgaDogaCxcclxuICAgICAgICAgICAgICAgICAgdnc6IE1hdGgucm91bmQodGhpcy52aXJ0dWFsRGltZW5zaW9uLndpZHRoKSxcclxuICAgICAgICAgICAgICAgICAgY2hzOiBjaHMsXHJcbiAgICAgICAgICAgICAgICAgIGZyYW1lTGVuZ3RoOiBmcmFtZUxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgZGZ0U2l6ZTogdGhpcy5kZnRTaXplLFxyXG4gICAgICAgICAgICAgICAgICB0ZXJtaW5hdGU6IHRydWVcclxuICAgICAgICAgICAgICAgIH0sIGFkYSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICh3ID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1BlclBpeGVsID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhcnJTaXplID0gdyAqIGggKiA0O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnJTaXplIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgYXJyU2l6ZSA9IDBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaW1nRGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShhcnJTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcncgPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGFyckFiQnVmID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oY2hzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgYXJyQWJCdWZbY2hdID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmRmdFNpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxlZnRGcmFtZVBvcyA9IE1hdGguZmxvb3IoZnJhbWVMZW5ndGggKiByZW5kZXJQb3MgLyB2dykgLSB0aGlzLmRmdFNpemUgLyAyO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmcmFtZXNUb1JlYWQgPSB0aGlzLmRmdFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnRGcmFtZVBvcyA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGxlZnRGcmFtZVBvcyA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd1N0YXRlVGV4dCgnTG9hZGluZy9SZW5kZXJpbmcuLi4nKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJhQXNTdWJzYyA9IHJhQXMuZnJhbWVzT2JzKGxlZnRGcmFtZVBvcywgZnJhbWVzVG9SZWFkLCBhcnJBYkJ1Zikuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAocmVhZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJBYkJ1ZiAmJiB0aGlzLndvcmtlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWQgPCB0aGlzLmRmdFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gemVybyBwYWRkaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB6cCA9IHJlYWQ7IHpwIDwgdGhpcy5kZnRTaXplOyB6cCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJBYkJ1ZltjaF1benBdID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyQWJCdWZDaCA9IGFyckFiQnVmW2NoXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRMZW4gPSBhcnJBYkJ1ZkNoLmJ1ZmZlci5ieXRlTGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFkYVtjaF0gfHwgYWRhW2NoXS5ieXRlTGVuZ3RoICE9PSBhZExlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYVtjaF0gPSBuZXcgQXJyYXlCdWZmZXIoYWRMZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmQWRhQ2ggPSBuZXcgRmxvYXQzMkFycmF5KGFkYVtjaF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmQWRhQ2guc2V0KGFyckFiQnVmW2NoXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrZXIucG9zdE1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsOiByZW5kZXJQb3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHJ3LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoOiBoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dzogdncsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoczogY2hzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZUxlbmd0aDogZnJhbWVMZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvRGF0YTogYWRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb0RhdGFPZmZzZXQ6IGxlZnRGcmFtZVBvcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZ0U2l6ZTogdGhpcy5kZnRTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JlbmRlcjogbm9yZW5kZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZTogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGFkYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJTb25hZ3JhbTogRXJyb3IgcmVhZGluZyBhdWRpbyBkYXRhOiBcIiArIGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYm91bmRzICYmIHRoaXMuYm91bmRzLmRpbWVuc2lvbikge1xyXG4gICAgICAgICAgbGV0IHcgPSBNYXRoLnJvdW5kKHRoaXMuYm91bmRzLmRpbWVuc2lvbi53aWR0aCk7XHJcbiAgICAgICAgICBsZXQgaCA9IE1hdGgucm91bmQodGhpcy5ib3VuZHMuZGltZW5zaW9uLmhlaWdodCk7XHJcbiAgICAgICAgICBsZXQgZyA9IHRoaXMuc29uYWdyYW1DYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgaWYgKGcpIHtcclxuICAgICAgICAgICAgZy5jbGVhclJlY3QoMCwgMCwgdywgaCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZHJhd1JlbmRlcmVkKHc6bnVtYmVyLGg6bnVtYmVyLGltZ0RhdGE6VWludDhDbGFtcGVkQXJyYXkpIHtcclxuICAgICAgICBpZiAodGhpcy5zb25hZ3JhbUNhbnZhcykge1xyXG4gICAgICAgICAgICB0aGlzLnNvbmFncmFtQ2FudmFzLndpZHRoID0gdztcclxuICAgICAgICAgICAgdGhpcy5zb25hZ3JhbUNhbnZhcy5oZWlnaHQgPSBoO1xyXG4gICAgICAgICAgICBsZXQgZyA9IHRoaXMuc29uYWdyYW1DYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICBpZiAoZykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHcgPiAwICYmIGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdJbWdEYXRhID0gZy5jcmVhdGVJbWFnZURhdGEodywgaCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZ0ltZ0RhdGEuZGF0YS5zZXQoaW1nRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZy5wdXRJbWFnZURhdGEoZ0ltZ0RhdGEsIDAsIDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZHJhd0JnKCk7XHJcbiAgICAgICAgdGhpcy5kcmF3UGxheVBvc2l0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4vLyAgICAgLy8gc3luY2hyb25vdXMgZHJhdyAobm90IHVzZWQgYW55bW9yZSlcclxuLy8gICByZWRyYXcoKSB7XHJcbi8vXHJcbi8vICAgICBsZXQgZyA9IHRoaXMuc29uYWdyYW1DYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4vL1xyXG4vLyAgICAgbGV0IHcgPSB0aGlzLnNvbmFncmFtQ2FudmFzLndpZHRoO1xyXG4vLyAgICAgbGV0IGggPSB0aGlzLnNvbmFncmFtQ2FudmFzLmhlaWdodDtcclxuLy8gICAgIGlmIChnKSB7XHJcbi8vICAgICAgIGcuY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4vLyAgICAgICBnLmZpbGxTdHlsZSA9IFwid2hpdGVcIjtcclxuLy8gICAgICAgZy5maWxsUmVjdCgwLCAwLCB3LCBoKTtcclxuLy8gICAgICAgaWYgKHRoaXMuX2F1ZGlvRGF0YUhvbGRlcikge1xyXG4vLyAgICAgICAgIGxldCBzcGVjdFNpemUgPSBNYXRoLmZsb29yKHRoaXMuZGZ0U2l6ZSAvIDIpXHJcbi8vICAgICAgICAgbGV0IGNocyA9IHRoaXMuX2F1ZGlvRGF0YUhvbGRlci5udW1iZXJPZkNoYW5uZWxzO1xyXG4vLyAgICAgICAgIGxldCBjaEggPSBoIC8gY2hzO1xyXG4vL1xyXG4vLyAgICAgICAgIGxldCBmcmFtZUxlbmd0aCA9IHRoaXMuX2F1ZGlvRGF0YUhvbGRlci5mcmFtZUxlbjtcclxuLy9cclxuLy8gICAgICAgICBsZXQgZnJhbWVzUGVyUGl4ZWwgPSBmcmFtZUxlbmd0aCAvIHc7XHJcbi8vICAgICAgICAgbGV0IHkgPSAwO1xyXG4vLyAgICAgICAgIGxldCBhdWRpb0J1ZmZlcjpBdWRpb0J1ZmZlcnxudWxsPW51bGw7XHJcbi8vICAgICAgICAgbGV0IGF1ZGlvU291cmNlPXRoaXMuX2F1ZGlvRGF0YUhvbGRlci5hdWRpb1NvdXJjZTtcclxuLy8gICAgICAgICBpZihhdWRpb1NvdXJjZSBpbnN0YW5jZW9mIEF1ZGlvQnVmZmVyU291cmNlKXtcclxuLy8gICAgICAgICAgIGF1ZGlvQnVmZmVyPWF1ZGlvU291cmNlLmF1ZGlvQnVmZmVyO1xyXG4vLyAgICAgICAgIH1cclxuLy9cclxuLy8gICAgICAgICBpZihhdWRpb0J1ZmZlcikge1xyXG4vLyAgICAgICAgICAgbGV0IGIgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuZGZ0U2l6ZSlcclxuLy9cclxuLy8gICAgICAgICAgIGxldCBzb25hID0gbmV3IEFycmF5PEFycmF5PEZsb2F0MzJBcnJheT4+KGNocyk7XHJcbi8vICAgICAgICAgICBsZXQgbWF4ID0gMDtcclxuLy8gICAgICAgICAgIGxldCBtYXhQc2QgPSAtSW5maW5pdHk7XHJcbi8vICAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbi8vICAgICAgICAgICAgIGxldCB4ID0gMDtcclxuLy8gICAgICAgICAgICAgc29uYVtjaF0gPSBuZXcgQXJyYXk8RmxvYXQzMkFycmF5Pih3KTtcclxuLy9cclxuLy8gICAgICAgICAgICAgbGV0IGNoRGF0YSA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKGNoKTtcclxuLy8gICAgICAgICAgICAgLy8gVE9ETyBjZW50ZXIgYnVmZmVyXHJcbi8vXHJcbi8vICAgICAgICAgICAgIGxldCBmcmFtZVBvcyA9IDA7XHJcbi8vICAgICAgICAgICAgIGZvciAobGV0IHBpaSA9IDA7IHBpaSA8IHc7IHBpaSsrKSB7XHJcbi8vICAgICAgICAgICAgICAgZnJhbWVQb3MgPSBNYXRoLnJvdW5kKHBpaSAqIGZyYW1lc1BlclBpeGVsKTtcclxuLy8gICAgICAgICAgICAgICAvLyBjYWxjdWxhdGUgREZUIGF0IHBpeGVsIHBvc2l0aW9uXHJcbi8vICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRmdFNpemU7IGkrKykge1xyXG4vLyAgICAgICAgICAgICAgICAgbGV0IGNoRGF0ID0gY2hEYXRhW2ZyYW1lUG9zICsgaV07XHJcbi8vICAgICAgICAgICAgICAgICBiW2ldID0gY2hEYXQ7XHJcbi8vICAgICAgICAgICAgICAgfVxyXG4vLyAgICAgICAgICAgICAgIGxldCBzcGVjdHIgPSB0aGlzLmRmdC5wcm9jZXNzUmVhbE1hZ25pdHVkZShiKTtcclxuLy8gICAgICAgICAgICAgICBzb25hW2NoXVtwaWldID0gc3BlY3RyO1xyXG4vLyAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuLy8gICAgICAgICAgICAgICBsZXQgcE1heCA9IE1hdGgubWF4LmFwcGx5KG51bGwsIHNwZWN0cik7XHJcbi8vICAgICAgICAgICAgICAgaWYgKHBNYXggPiBtYXgpIHtcclxuLy8gICAgICAgICAgICAgICAgIG1heCA9IHBNYXg7XHJcbi8vICAgICAgICAgICAgICAgfVxyXG4vL1xyXG4vLyAgICAgICAgICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc3BlY3RTaXplOyBzKyspIHtcclxuLy8gICAgICAgICAgICAgICAgIGxldCBwc2QgPSAoMiAqIE1hdGgucG93KHNwZWN0cltzXSwgMikpIC8gc3BlY3RTaXplO1xyXG4vLyAgICAgICAgICAgICAgICAgaWYgKHBzZCA+IG1heFBzZCkge1xyXG4vLyAgICAgICAgICAgICAgICAgICBtYXhQc2QgPSBwc2Q7XHJcbi8vICAgICAgICAgICAgICAgICB9XHJcbi8vICAgICAgICAgICAgICAgfVxyXG4vLyAgICAgICAgICAgICB9XHJcbi8vICAgICAgICAgICB9XHJcbi8vICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwibWF4OiBcIiwgbWF4KTtcclxuLy8gICAgICAgICAgIG1heFBzZCA9ICgyICogTWF0aC5wb3cobWF4LCAyKSkgLyBzcGVjdFNpemU7XHJcbi8vICAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbi8vXHJcbi8vICAgICAgICAgICAgIGxldCBmcmFtZVBvcyA9IDA7XHJcbi8vICAgICAgICAgICAgIGZvciAobGV0IHBpaSA9IDA7IHBpaSA8IHc7IHBpaSsrKSB7XHJcbi8vICAgICAgICAgICAgICAgZnJhbWVQb3MgPSBwaWkgKiBmcmFtZXNQZXJQaXhlbDtcclxuLy9cclxuLy8gICAgICAgICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGg7IHkrKykge1xyXG4vLyAgICAgICAgICAgICAgICAgbGV0IGZyZXFJZHggPSBNYXRoLnJvdW5kKHkgKiBzcGVjdFNpemUgLyBoKTtcclxuLy9cclxuLy8gICAgICAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgb25lIHNpZGVkIHBvd2VyIHNwZWN0cmFsIGRlbnNpdHkgUFNEIChmLCB0KSBpbiBQYTIvSHpcclxuLy8gICAgICAgICAgICAgICAgIC8vIFBTRChmKSBwcm9wb3J0aW9uYWwgdG8gMnxYKGYpfDIgLyAodDIgLSB0MSlcclxuLy8gICAgICAgICAgICAgICAgIGxldCB2YWwgPSBzb25hW2NoXVtwaWldW2ZyZXFJZHhdO1xyXG4vLyAgICAgICAgICAgICAgICAgbGV0IHBzZCA9ICgyICogTWF0aC5wb3codmFsLCAyKSkgLyBzcGVjdFNpemU7XHJcbi8vXHJcbi8vICAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgbG9nYXJpdGhtaWNcclxuLy8gICAgICAgICAgICAgICAgIGxldCBwc2RMb2cgPSBEU1BVdGlscy50b0xldmVsSW5EQihwc2QgLyBtYXhQc2QpO1xyXG4vLyAgICAgICAgICAgICAgICAgbGV0IGR5blJhbmdlSW5EYiA9IDcwO1xyXG4vLyAgICAgICAgICAgICAgICAgbGV0IHNjYWxlZFZhbCA9IChwc2RMb2cgKyBkeW5SYW5nZUluRGIpIC8gZHluUmFuZ2VJbkRiO1xyXG4vL1xyXG4vLyAgICAgICAgICAgICAgICAgaWYgKHNjYWxlZFZhbCA+IDEpXHJcbi8vICAgICAgICAgICAgICAgICAgIHNjYWxlZFZhbCA9IDE7XHJcbi8vICAgICAgICAgICAgICAgICBpZiAoc2NhbGVkVmFsIDwgMCkge1xyXG4vLyAgICAgICAgICAgICAgICAgICBzY2FsZWRWYWwgPSAwO1xyXG4vLyAgICAgICAgICAgICAgICAgfVxyXG4vLyAgICAgICAgICAgICAgICAgbGV0IHJnYlZhbCA9ICgyNTUgKiBzY2FsZWRWYWwpO1xyXG4vLyAgICAgICAgICAgICAgICAgaWYgKHJnYlZhbCA8IDApIHtcclxuLy8gLy9cdFx0XHRcdFx0XHRcdFN5c3RlbS5vdXQucHJpbnRsbihcIk5lZyBSR0IgdmFsOiBcIityZ2JWYWwpO1xyXG4vLyAgICAgICAgICAgICAgICAgICByZ2JWYWwgPSAwO1xyXG4vLyAgICAgICAgICAgICAgICAgfVxyXG4vLyAgICAgICAgICAgICAgICAgaWYgKHJnYlZhbCA+IDI1NSkge1xyXG4vLyAgICAgICAgICAgICAgICAgICByZ2JWYWwgPSAyNTU7XHJcbi8vICAgICAgICAgICAgICAgICB9XHJcbi8vICAgICAgICAgICAgICAgICByZ2JWYWwgPSAyNTUgLSByZ2JWYWw7XHJcbi8vICAgICAgICAgICAgICAgICBsZXQgY29sb3JTdHIgPSBDU1NVdGlscy50b0NvbG9yU3RyaW5nKHJnYlZhbCwgcmdiVmFsLCByZ2JWYWwpO1xyXG4vLyAgICAgICAgICAgICAgICAgZy5maWxsU3R5bGUgPSBjb2xvclN0cjtcclxuLy8gICAgICAgICAgICAgICAgIGcuZmlsbFJlY3QocGlpLCBjaEggLSB5LCAxLCAxKTtcclxuLy8gICAgICAgICAgICAgICB9XHJcbi8vICAgICAgICAgICAgIH1cclxuLy8gICAgICAgICAgIH1cclxuLy8gICAgICAgICAgIHRoaXMuZHJhd1BsYXlQb3NpdGlvbigpO1xyXG4vLyAgICAgICAgIH1lbHNle1xyXG4vLyAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJSZWRyYXcgb25seSBzdXBwb3J0ZWQgd2l0aCBhdWRpbyBidWZmZXIuXCIpXHJcbi8vICAgICAgICAgfVxyXG4vLyAgICAgICB9XHJcbi8vICAgICB9XHJcbi8vICAgfVxyXG4vL1xyXG5cclxuICAgIHNldERhdGEoYXVkaW9EYXRhOiBBdWRpb0RhdGFIb2xkZXIgfCBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5fYXVkaW9EYXRhSG9sZGVyID0gYXVkaW9EYXRhO1xyXG4gICAgICAgIHRoaXMucGxheUZyYW1lUG9zaXRpb24gPSAwO1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuIl19
900
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29uYWdyYW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvYXVkaW8vdWkvc29uYWdyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBUyxLQUFLLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDdkMsT0FBTyxFQUFDLFNBQVMsRUFBYyxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxpQkFBaUIsRUFBa0IsTUFBTSxzQkFBc0IsQ0FBQzs7QUFLeEUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUF3QjlCLE1BQU0sT0FBTyxRQUFTLFNBQVEseUJBQXlCO0lBb0JuRCxZQUFvQixHQUFlO1FBQy9CLEtBQUssRUFBRSxDQUFDO1FBRFEsUUFBRyxHQUFILEdBQUcsQ0FBWTtRQVIzQix1QkFBa0IsR0FBYyxJQUFJLENBQUM7UUFJckMsY0FBUyxHQUFtQixJQUFJLENBQUM7UUFFakMsWUFBTyxHQUFHLGdCQUFnQixDQUFDO1FBSS9CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1FBQ25DLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXhDLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FB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Ozs4Q0FLZ0M7K0VBc0JELGlCQUFpQjtzQkFBekQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVBLGVBQWU7c0JBQXJELFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7REZURmxvYXQzMn0gZnJvbSAnLi4vLi4vbWF0aC9kZnQnO1xyXG5pbXBvcnQge01hcmtlciwgUG9pbnR9IGZyb20gJy4vY29tbW9uJztcclxuaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtBdWRpb0NhbnZhc0xheWVyQ29tcG9uZW50fSBmcm9tIFwiLi9hdWRpb19jYW52YXNfbGF5ZXJfY29tcFwiO1xyXG5pbXBvcnQge1dvcmtlckhlbHBlcn0gZnJvbSBcIi4uLy4uL3V0aWxzL3V0aWxzXCI7XHJcbmltcG9ydCB7QXVkaW9CdWZmZXJTb3VyY2UsIEF1ZGlvRGF0YUhvbGRlcn0gZnJvbSBcIi4uL2F1ZGlvX2RhdGFfaG9sZGVyXCI7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xyXG5cclxuZGVjbGFyZSBmdW5jdGlvbiBwb3N0TWVzc2FnZShtZXNzYWdlOiBhbnksIHRyYW5zZmVyOiBBcnJheTxhbnk+KTogdm9pZDtcclxuXHJcbmNvbnN0IERFRkFVTFRfREZUX1NJWkUgPSAxMDI0O1xyXG5cclxuQENvbXBvbmVudCh7XHJcblxyXG4gICAgc2VsZWN0b3I6ICdhdWRpby1zb25hZ3JhbScsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxjYW52YXMgI3NvbmFncmFtIGhlaWdodD1cIjEwXCI+PC9jYW52YXM+XHJcbiAgICAgICAgPGNhbnZhcyAjYmcgaGVpZ2h0PVwiMTBcIj48L2NhbnZhcz5cclxuICAgICAgICA8Y2FudmFzICNjdXJzb3IgaGVpZ2h0PVwiMTBcIiAobW91c2Vkb3duKT1cInNlbGVjdGlvblN0YXJ0KCRldmVudClcIiAobW91c2VvdmVyKT1cInVwZGF0ZUN1cnNvckNhbnZhcygkZXZlbnQpXCIgKG1vdXNlbW92ZSk9XCJ1cGRhdGVDdXJzb3JDYW52YXMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJ1cGRhdGVDdXJzb3JDYW52YXMoJGV2ZW50LCBmYWxzZSlcIj48L2NhbnZhcz5cclxuICAgICAgICA8Y2FudmFzICNtYXJrZXIgaGVpZ2h0PVwiMTBcIj48L2NhbnZhcz5gLFxyXG5cclxuICAgIHN0eWxlczogW2A6aG9zdHtcclxuICAgICAgbWluLWhlaWdodDogMHB4O1xyXG4gICAgfWAsYGNhbnZhcyB7XHJcbiAgICAgICAgdG9wOiAwO1xyXG4gICAgICAgIGxlZnQ6IDA7XHJcbiAgICAgICAgd2lkdGg6IDA7XHJcbiAgICAgICAgaGVpZ2h0OiAwO1xyXG4gICAgICBtaW4taGVpZ2h0OiAwcHg7XHJcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgfWBdXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgU29uYWdyYW0gZXh0ZW5kcyBBdWRpb0NhbnZhc0xheWVyQ29tcG9uZW50IHtcclxuXHJcbiAgICBkZnQ6IERGVEZsb2F0MzI7XHJcbiAgICBuOiBhbnk7XHJcbiAgICBjZSE6IEhUTUxEaXZFbGVtZW50O1xyXG4gICAgc29uYWdyYW1DYW52YXMhOiBIVE1MQ2FudmFzRWxlbWVudDtcclxuICAgIC8vY3Vyc29yQ2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcclxuICAgIG1hcmtlckNhbnZhcyE6IEhUTUxDYW52YXNFbGVtZW50O1xyXG4gICAgQFZpZXdDaGlsZCgnc29uYWdyYW0nLCB7IHN0YXRpYzogdHJ1ZSB9KSBzb25hZ3JhbUNhbnZhc1JlZiE6IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnbWFya2VyJywgeyBzdGF0aWM6IHRydWUgfSkgbWFya2VyQ2FudmFzUmVmITogRWxlbWVudFJlZjtcclxuICAgIG1hcmtlcnM6IEFycmF5PE1hcmtlcj47XHJcbiAgICBwcml2YXRlIF9wbGF5RnJhbWVQb3NpdGlvbjogbnVtYmVyfG51bGw9bnVsbDtcclxuXHJcbiAgICBwcml2YXRlIHdvcmtlcjogV29ya2VyIHwgbnVsbDtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgd29ya2VyVVJMOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHJhQXNTdWJzYzpTdWJzY3JpcHRpb258bnVsbD1udWxsO1xyXG5cclxuICAgIHByaXZhdGUgZGZ0U2l6ZSA9IERFRkFVTFRfREZUX1NJWkU7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWY6IEVsZW1lbnRSZWYpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMud29ya2VyID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9hdWRpb0RhdGFIb2xkZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubWFya2VycyA9IG5ldyBBcnJheTxNYXJrZXI+KCk7XHJcbiAgICAgICAgdGhpcy5kZnQgPSBuZXcgREZURmxvYXQzMih0aGlzLmRmdFNpemUpO1xyXG5cclxuICAgICAgICB0aGlzLndvcmtlclVSTCA9IFdvcmtlckhlbHBlci5idWlsZFdvcmtlckJsb2JVUkwodGhpcy53b3JrZXJGdW5jdGlvbilcclxuICAgICAgIHRoaXMuX2JnQ29sb3I9bnVsbDtcclxuICAgICAgIHRoaXMuX3NlbGVjdENvbG9yPSdyZ2JhKDI1NSwyNTUsMCwwLjEpJ1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jZSA9IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5zb25hZ3JhbUNhbnZhcyA9IHRoaXMuc29uYWdyYW1DYW52YXNSZWYubmF0aXZlRWxlbWVudDtcclxuICAgICAgICB0aGlzLnNvbmFncmFtQ2FudmFzLnN0eWxlLnpJbmRleCA9ICcxJztcclxuICAgICAgdGhpcy5iZ0NhbnZhcyA9IHRoaXMuYmdDYW52YXNSZWYubmF0aXZlRWxlbWVudDtcclxuICAgICAgdGhpcy5iZ0NhbnZhcy5zdHlsZS56SW5kZXggPSAnMic7XHJcbiAgICAgICAgdGhpcy5jdXJzb3JDYW52YXMgPSB0aGlzLmN1cnNvckNhbnZhc1JlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuY3Vyc29yQ2FudmFzLnN0eWxlLnpJbmRleCA9ICc0JztcclxuICAgICAgICB0aGlzLm1hcmtlckNhbnZhcyA9IHRoaXMubWFya2VyQ2FudmFzUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5tYXJrZXJDYW52YXMuc3R5bGUuekluZGV4ID0gJzMnO1xyXG5cclxuICAgICAgICB0aGlzLmNhbnZhc0xheWVyc1swXSA9IHRoaXMuc29uYWdyYW1DYW52YXM7XHJcbiAgICAgIHRoaXMuY2FudmFzTGF5ZXJzWzFdID0gdGhpcy5iZ0NhbnZhcztcclxuICAgICAgdGhpcy5jYW52YXNMYXllcnNbMl0gPSB0aGlzLmN1cnNvckNhbnZhcztcclxuICAgICAgICB0aGlzLmNhbnZhc0xheWVyc1szXSA9IHRoaXMubWFya2VyQ2FudmFzO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcGxheUZyYW1lUG9zaXRpb24oKTogbnVtYmVyfG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wbGF5RnJhbWVQb3NpdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgcGxheUZyYW1lUG9zaXRpb24ocGxheUZyYW1lUG9zaXRpb246IG51bWJlcnxudWxsKSB7XHJcbiAgICAgICAgdGhpcy5fcGxheUZyYW1lUG9zaXRpb24gPSBwbGF5RnJhbWVQb3NpdGlvbjtcclxuICAgICAgICAvLyB0aGlzLnJlZHJhdygpO1xyXG4gICAgICAgIHRoaXMuZHJhd1BsYXlQb3NpdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FudmFzTW91c2VQb3MoYzogSFRNTENhbnZhc0VsZW1lbnQsIGU6IE1vdXNlRXZlbnQpOiBQb2ludCB7XHJcbiAgICAgICAgY29uc3QgY3IgPSBjLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgICBjb25zdCB4ID0gZS54IC0gY3IubGVmdDtcclxuICAgICAgICBjb25zdCB5ID0gZS55IC0gY3IudG9wO1xyXG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQoeCx5KTtcclxuICAgIH1cclxuXHJcbiAgZHJhd1N0YXRlVGV4dChzdGF0ZVRleHQ6c3RyaW5nKSB7XHJcbiAgICAgICAgaWYoc3RhdGVUZXh0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGcgPSB0aGlzLnNvbmFncmFtQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuICAgICAgICAgICAgY29uc3QgdyA9IHRoaXMuc29uYWdyYW1DYW52YXMud2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnN0IGggPSB0aGlzLnNvbmFncmFtQ2FudmFzLmhlaWdodDtcclxuICAgICAgICAgICAgaWYgKGcgJiYgdyAmJiBoKSB7XHJcbiAgICAgICAgICAgICAgICBnLnN0cm9rZVN0eWxlID0gJ2JsYWNrJztcclxuICAgICAgICAgICAgICAgIGcuZmlsbFN0eWxlID0gJ2JsYWNrJztcclxuICAgICAgICAgICAgICAgIGcuZm9udCA9ICcyMHB4IHNhbnMtc2VyaWYnO1xyXG4gICAgICAgICAgICAgICAgZy5maWxsVGV4dChzdGF0ZVRleHQsIDEwLCAyNSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgfVxyXG5cclxuICBkcmF3Q3Vyc29yUG9zaXRpb24oZTogTW91c2VFdmVudCwgc2hvdzogYm9vbGVhbikge1xyXG5cclxuICAgIGlmICh0aGlzLmN1cnNvckNhbnZhcykge1xyXG4gICAgICBjb25zdCB3ID0gdGhpcy5jdXJzb3JDYW52YXMud2lkdGg7XHJcbiAgICAgIGNvbnN0IGggPSB0aGlzLmN1cnNvckNhbnZhcy5oZWlnaHQ7XHJcbiAgICAgIGNvbnN0IGcgPSB0aGlzLmN1cnNvckNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICBpZiAoZykge1xyXG4gICAgICAgIGcuY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICAgIGlmIChzaG93KSB7XHJcbiAgICAgICAgICAvL2NvbnN0IHBwID0gdGhpcy5jYW52YXNNb3VzZVBvcyh0aGlzLmN1cnNvckNhbnZhcywgZSk7XHJcbiAgICAgICAgICBsZXQgeFZpZXdQb3J0UGl4ZWxwb3MgPSBlLm9mZnNldFg7XHJcblxyXG4gICAgICAgICAgZy5maWxsU3R5bGUgPSAneWVsbG93JztcclxuICAgICAgICAgIGcuc3Ryb2tlU3R5bGUgPSAneWVsbG93JztcclxuICAgICAgICAgIGcuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgICBnLm1vdmVUbyh4Vmlld1BvcnRQaXhlbHBvcywgMCk7XHJcbiAgICAgICAgICBnLmxpbmVUbyh4Vmlld1BvcnRQaXhlbHBvcywgaCk7XHJcbiAgICAgICAgICBnLmNsb3NlUGF0aCgpO1xyXG5cclxuICAgICAgICAgIGcuc3Ryb2tlKCk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuX2F1ZGlvRGF0YUhvbGRlcikge1xyXG5cclxuICAgICAgICAgICAgbGV0IGZyYW1lUG9zUm91bmQgPSB0aGlzLnZpZXdQb3J0WFBpeGVsVG9GcmFtZVBvc2l0aW9uKHhWaWV3UG9ydFBpeGVscG9zKTtcclxuICAgICAgICAgICAgaWYoZnJhbWVQb3NSb3VuZCE9bnVsbCkge1xyXG4gICAgICAgICAgICAgIGcuZm9udCA9ICcxNHB4IHNhbnMtc2VyaWYnO1xyXG4gICAgICAgICAgICAgIGcuZmlsbFN0eWxlID0gJ3llbGxvdyc7XHJcbiAgICAgICAgICAgICAgZy5maWxsVGV4dChmcmFtZVBvc1JvdW5kLnRvU3RyaW5nKCksIHhWaWV3UG9ydFBpeGVscG9zICsgMiwgNTApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAgIGRyYXdQbGF5UG9zaXRpb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubWFya2VyQ2FudmFzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHcgPSB0aGlzLm1hcmtlckNhbnZhcy53aWR0aDtcclxuICAgICAgICAgICAgY29uc3QgaCA9IHRoaXMubWFya2VyQ2FudmFzLmhlaWdodDtcclxuICAgICAgICAgICAgY29uc3QgZyA9IHRoaXMubWFya2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuICAgICAgICAgICAgaWYgKGcpIHtcclxuICAgICAgICAgICAgICAgIGcuY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5fcGxheUZyYW1lUG9zaXRpb24hPW51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGl4ZWxQb3MgPSB0aGlzLmZyYW1lVG9WaWV3UG9ydFhQaXhlbFBvc2l0aW9uKHRoaXMuX3BsYXlGcmFtZVBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGl4ZWxQb3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZy5maWxsU3R5bGUgPSAncmVkJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZy5zdHJva2VTdHlsZSA9ICdyZWQnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBnLmJlZ2luUGF0aCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBnLm1vdmVUbyhwaXhlbFBvcywgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGcubGluZVRvKHBpeGVsUG9zLCBoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZy5jbG9zZVBhdGgoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZy5zdHJva2UoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqICBNZXRob2QgdXNlZCBhcyB3b3JrZXIgY29kZS5cclxuICAgICAqL1xyXG4gICAgd29ya2VyRnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIC8vIFJlZGVmaW5lIHNvbWUgRFNQIGNsYXNzZXMgZm9yIHdvcmtlciBmdW5jdGlvblxyXG4gICAgICAgIC8vIFNlZSBlLmcuIGF1ZGlvLm1hdGguQ29tcGxleFxyXG4gICAgICAgIGNsYXNzIENvbXBsZXgge1xyXG5cclxuICAgICAgICAgICAgcmVhbDogbnVtYmVyO1xyXG4gICAgICAgICAgICBpbWc6IG51bWJlcjtcclxuXHJcbiAgICAgICAgICAgIHB1YmxpYyBzdGF0aWMgZnJvbVBvbGFyRm9ybShtYWduaXR1ZGU6IG51bWJlciwgYXJndW1lbnQ6IG51bWJlcik6IENvbXBsZXgge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgciA9IE1hdGguY29zKGFyZ3VtZW50KSAqIG1hZ25pdHVkZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGkgPSBNYXRoLnNpbihhcmd1bWVudCkgKiBtYWduaXR1ZGU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgociwgaSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHJlYWw6IG51bWJlciwgaW1nOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVhbCA9IHJlYWw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmltZyA9IGltZztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcHVibGljIG1hZ25pdHVkZSgpOiBudW1iZXIge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguc3FydCgodGhpcy5yZWFsICogdGhpcy5yZWFsKSArICh0aGlzLmltZyAqIHRoaXMuaW1nKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHB1YmxpYyBhcmd1bWVudCgpOiBudW1iZXIge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguYXRhbjIodGhpcy5pbWcsIHRoaXMucmVhbCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHB1YmxpYyBhZGQoYWRkQzogQ29tcGxleCk6IENvbXBsZXgge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHRoaXMucmVhbCArIGFkZEMucmVhbCwgdGhpcy5pbWcgKyBhZGRDLmltZyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHB1YmxpYyBzdWIoc3ViQzogQ29tcGxleCk6IENvbXBsZXgge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHRoaXMucmVhbCAtIHN1YkMucmVhbCwgdGhpcy5pbWcgLSBzdWJDLmltZyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHB1YmxpYyBtdWx0KG11bHRDOiBDb21wbGV4KTogQ29tcGxleCB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtdWx0UiA9ICh0aGlzLnJlYWwgKiBtdWx0Qy5yZWFsKSAtICh0aGlzLmltZyAqIG11bHRDLmltZyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtdWx0SSA9ICh0aGlzLnJlYWwgKiBtdWx0Qy5pbWcpICsgKG11bHRDLnJlYWwgKiB0aGlzLmltZyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgobXVsdFIsIG11bHRJKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcHVibGljIG11bHRSZWFsKG11bHRGOiBudW1iZXIpOiBDb21wbGV4IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29tcGxleCh0aGlzLnJlYWwgKiBtdWx0RiwgdGhpcy5pbWcgKiBtdWx0Rik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHB1YmxpYyBkaXYoZGl2aXNvcjogQ29tcGxleCk6IENvbXBsZXgge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGl2UmVhbCA9IGRpdmlzb3IucmVhbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpdkltZyA9IGRpdmlzb3IuaW1nO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGl2ID0gKGRpdlJlYWwgKiBkaXZSZWFsKSArIChkaXZJbWcgKiBkaXZJbWcpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGl2aXNpb25SZWFsID0gKCh0aGlzLnJlYWwgKiBkaXZSZWFsKSArICh0aGlzLmltZyAqIGRpdkltZykpIC8gZGl2O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGl2aXNpb25JbWcgPSAoKGRpdlJlYWwgKiB0aGlzLmltZykgLSAodGhpcy5yZWFsICogZGl2SW1nKSkgLyBkaXY7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KGRpdmlzaW9uUmVhbCwgZGl2aXNpb25JbWcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwdWJsaWMgZGl2UmVhbChkaXZpc29yOiBudW1iZXIpOiBDb21wbGV4IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpdiA9IGRpdmlzb3IgKiBkaXZpc29yO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGl2c2lvblJlYWwgPSAodGhpcy5yZWFsICogZGl2aXNvcikgLyBkaXY7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaXZzaW9uSW1nID0gKGRpdmlzb3IgKiB0aGlzLmltZykgLyBkaXY7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KGRpdnNpb25SZWFsLCBkaXZzaW9uSW1nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcHVibGljIGNvbmp1Z2F0ZSgpOiBDb21wbGV4IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29tcGxleCh0aGlzLnJlYWwsIC10aGlzLmltZyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHB1YmxpYyBlcXVhbHMoYzogQ29tcGxleCk6IGJvb2xlYW4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGMgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMucmVhbCA9PT0gYy5yZWFsICYmIHRoaXMuaW1nID09PSBjLmltZyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdSZWFsOiAnICsgdGhpcy5yZWFsICsgJywgSW1nOiAnICsgdGhpcy5pbWc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNsYXNzIERGVEZsb2F0MzIge1xyXG5cclxuICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBuOiBudW1iZXI7XHJcbiAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbTogbnVtYmVyO1xyXG5cclxuICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjb3NMb29rdXA6IEZsb2F0MzJBcnJheTtcclxuICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzaW5Mb29rdXA6IEZsb2F0MzJBcnJheTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKG46IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uID0gbjtcclxuICAgICAgICAgICAgICAgIHRoaXMubSA9IE1hdGgubG9nKG4pIC8gTWF0aC5sb2coMik7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaWYobiAhPSAoMSA8PCBtKSl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihcImxlbmd0aCBOIG11c3QgYmUgcG93ZXIgb2YgMlwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBsb29rdXAgdGFibGVzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvc0xvb2t1cCA9IG5ldyBGbG9hdDMyQXJyYXkobiAvIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaW5Mb29rdXAgPSBuZXcgRmxvYXQzMkFycmF5KG4gLyAyKTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG4gLyAyOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmMgPSAoLTIgKiBNYXRoLlBJICogaSkgLyBuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29zTG9va3VwW2ldID0gTWF0aC5jb3MoYXJjKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNpbkxvb2t1cFtpXSA9IE1hdGguc2luKGFyYyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHB1YmxpYyBwcm9jZXNzUmVhbChzcmNCdWY6IEZsb2F0MzJBcnJheSk6IEFycmF5PENvbXBsZXg+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBzcmNCdWYuc2xpY2UoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHkgPSBuZXcgRmxvYXQzMkFycmF5KHNyY0J1Zi5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgeWkgPSAwOyB5aSA8IHkubGVuZ3RoOyB5aSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeVt5aV0gPSAwLjA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZmdENvb2xleVR1a2V5KHgsIHkpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmMgPSBuZXcgQXJyYXk8Q29tcGxleD4oeC5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmNbaV0gPSBuZXcgQ29tcGxleCh4W2ldLCB5W2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByYztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcHVibGljIHByb2Nlc3NSZWFsTWFnbml0dWRlKHNyY0J1ZjogRmxvYXQzMkFycmF5KTogRmxvYXQzMkFycmF5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBzcmNCdWYuc2xpY2UoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHkgPSBuZXcgRmxvYXQzMkFycmF5KHNyY0J1Zi5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgeWkgPSAwOyB5aSA8IHkubGVuZ3RoOyB5aSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeVt5aV0gPSAwLjA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZmdENvb2xleVR1a2V5KHgsIHkpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmMgPSBuZXcgRmxvYXQzMkFycmF5KHgubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJjYyA9IG5ldyBDb21wbGV4KHhbaV0sIHlbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJjW2ldID0gcmNjLm1hZ25pdHVkZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJjO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwdWJsaWMgZmZ0Q29vbGV5VHVrZXkocmVhbDogRmxvYXQzMkFycmF5LCBpbWc6IEZsb2F0MzJBcnJheSk6IHZvaWQge1xyXG4gICAgICAgICAgICAgICAgbGV0IGk6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgIGxldCBqID0gMDtcclxuICAgICAgICAgICAgICAgIGxldCBrOiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICBsZXQgbjE6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgIGxldCBuMjogbnVtYmVyID0gdGhpcy5uIC8gMjtcclxuICAgICAgICAgICAgICAgIGxldCBhOiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICBsZXQgYzogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgbGV0IHM6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgIGxldCB0MTogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgbGV0IHQyOiBudW1iZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IHRoaXMubiAtIDE7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIG4xID0gbjI7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGogPj0gbjEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaiA9IGogLSBuMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbjEgPSBuMSAvIDI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGogPSBqICsgbjE7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgaikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHJlYWxbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxbaV0gPSByZWFsW2pdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFsW2pdID0gdDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHQxID0gaW1nW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWdbaV0gPSBpbWdbal07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZ1tqXSA9IHQxO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBuMSA9IDA7XHJcbiAgICAgICAgICAgICAgICBuMiA9IDE7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5tOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBuMSA9IG4yO1xyXG4gICAgICAgICAgICAgICAgICAgIG4yID0gbjIgKyBuMjtcclxuICAgICAgICAgICAgICAgICAgICBhID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbjE7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjID0gdGhpcy5jb3NMb29rdXBbYV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHMgPSB0aGlzLnNpbkxvb2t1cFthXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYSArPSAoMSA8PCAodGhpcy5tIC0gaSAtIDEpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IGo7IGsgPCB0aGlzLm47IGsgPSBrICsgbjIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQxID0gYyAqIHJlYWxbayArIG4xXSAtIHMgKiBpbWdbayArIG4xXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQyID0gcyAqIHJlYWxbayArIG4xXSArIGMgKiBpbWdbayArIG4xXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxbayArIG4xXSA9IHJlYWxba10gLSB0MTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ1trICsgbjFdID0gaW1nW2tdIC0gdDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsW2tdID0gcmVhbFtrXSArIHQxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nW2tdID0gaW1nW2tdICsgdDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICBwdWJsaWMgcHJvY2Vzcyh0OiBBcnJheTxDb21wbGV4Pik6IEFycmF5PENvbXBsZXg+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlYWxzOiBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMubik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbWdzOiBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMubik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuczogQXJyYXk8Q29tcGxleD4gPSBuZXcgQXJyYXk8Q29tcGxleD4odGhpcy5uKTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5uOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICByZWFsc1tpXSA9IHRbaV0ucmVhbDtcclxuICAgICAgICAgICAgICAgICAgICBpbWdzW2ldID0gdFtpXS5pbWc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZmdENvb2xleVR1a2V5KHJlYWxzLCBpbWdzKTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5uOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc1tpXSA9IG5ldyBDb21wbGV4KHJlYWxzW2ldLCBpbWdzW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0cmFucztcclxuXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaW50ZXJmYWNlIFdpbmRvd0Z1bmN0aW9uIHtcclxuICAgICAgICAgICAgZ2V0U2NhbGUoaTogbnVtYmVyKTogbnVtYmVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2xhc3MgR2F1c3NpYW5XaW5kb3cgaW1wbGVtZW50cyBXaW5kb3dGdW5jdGlvbiB7XHJcblxyXG4gICAgICAgICAgICBwdWJsaWMgc3RhdGljIERFRkFVTFRfU0lHTUEgPSAwLjM7XHJcbiAgICAgICAgICAgIC8vIEdhdXNzaWFuIHdpbmRvdyBmdW5jdGlvbixcclxuICAgICAgICAgICAgLy8gaHR0cDovL3JlZmVyZW5jZS53b2xmcmFtLmNvbS9sYW5ndWFnZS9yZWYvR2F1c3NpYW5XaW5kb3cuaHRtbFxyXG4gICAgICAgICAgICAvLyB2YWw9ZXhwKC01MCp4KngvOSkgPT4gc2lnbWE9MC4zXHJcblxyXG4gICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGJ1ZjogRmxvYXQzMkFycmF5O1xyXG5cclxuICAgICAgICAgICAgY29uc3RydWN0b3Ioc2l6ZTogbnVtYmVyLCBzaWdtYTogbnVtYmVyID0gR2F1c3NpYW5XaW5kb3cuREVGQVVMVF9TSUdNQSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idWYgPSBuZXcgRmxvYXQzMkFycmF5KHNpemUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2VudGVyID0gKHNpemUgLSAxKSAvIDI7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1b3QgPSAoaSAtIGNlbnRlcikgLyAoc2lnbWEgKiBjZW50ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cCA9IC0wLjUgKiBxdW90ICogcXVvdDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZltpXSA9IE1hdGguZXhwKGV4cCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGdldFNjYWxlKGk6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5idWZbaV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZWxmLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChtc2c6TWVzc2FnZUV2ZW50KSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlNvbmFncmFtIHJlbmRlciB0aHJlYWRcIik7XHJcbiAgICAgICAgICAgIGxldCBsID0gbXNnLmRhdGEubDtcclxuICAgICAgICAgICAgbGV0IHcgPSBtc2cuZGF0YS53O1xyXG4gICAgICAgICAgICBsZXQgaCA9IG1zZy5kYXRhLmg7XHJcbiAgICAgICAgICAgIGxldCB2dyA9IG1zZy5kYXRhLnZ3O1xyXG4gICAgICAgICAgICBsZXQgY2hzID0gbXNnLmRhdGEuY2hzO1xyXG4gICAgICAgICAgICBsZXQgYXVkaW9EYXRhT2Zmc2V0PTA7XHJcbiAgICAgICAgICAgIGxldCBhZE9mZnNldD1tc2cuZGF0YS5hdWRpb0RhdGFPZmZzZXQ7XHJcbiAgICAgICAgICAgIGlmKGFkT2Zmc2V0KXtcclxuICAgICAgICAgICAgICBhdWRpb0RhdGFPZmZzZXQ9YWRPZmZzZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICBsZXQgbWF4UHNkID0gbnVsbDtcclxuICAgICAgICAgICAgaWYobXNnLmRhdGEubWF4UHNkIT09dW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgICBtYXhQc2Q9bXNnLmRhdGEubWF4UHNkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgYXVkaW9EYXRhID0gbmV3IEFycmF5KGNocyk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgICAgICAgIGF1ZGlvRGF0YVtjaF0gPSBuZXcgRmxvYXQzMkFycmF5KG1zZy5kYXRhWydhdWRpb0RhdGEnXVtjaF0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZnJhbWVMZW5ndGggPSBtc2cuZGF0YS5mcmFtZUxlbmd0aDtcclxuICAgICAgICAgICAgbGV0IGRmdFNpemUgPSBtc2cuZGF0YS5kZnRTaXplO1xyXG5cclxuICAgICAgICAgICAgbGV0IGRmdEJhbmRzID0gZGZ0U2l6ZSAvIDI7XHJcbiAgICAgICAgICAgIGxldCBkZnQgPSBuZXcgREZURmxvYXQzMihkZnRTaXplKTtcclxuICAgICAgICAgICAgbGV0IHdmID0gbmV3IEdhdXNzaWFuV2luZG93KGRmdFNpemUpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGFyclNpemU9dypoKjQ7XHJcbiAgICAgICAgICAgIGlmKGFyclNpemU8MCl7XHJcbiAgICAgICAgICAgICAgICBhcnJTaXplPTBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgaW1nRGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShhcnJTaXplKTtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlJlbmRlciBtZXRob2Q6XCIpO1xyXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ3JlYXRlZCBpbWdEYXRhIGFyclNpemU6IFwiK2FyclNpemUrXCIgXCIsIHcsIFwieFwiLCBoKTtcclxuICAgICAgICAgIGxldCBjYWxjTWF4UHNkPS1JbmZpbml0eTtcclxuICAgICAgICAgICAgaWYgKGFyclNpemU+MCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjaEggPSBNYXRoLnJvdW5kKGggLyBjaHMpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGZyYW1lc1BlclBpeGVsID0gZnJhbWVMZW5ndGggLyB2dztcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlJlbmRlcjogXCIsIHcsIFwieFwiLCBoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYiA9IG5ldyBGbG9hdDMyQXJyYXkoZGZ0U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgc29uYSA9IG5ldyBBcnJheShjaHMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNoRGF0YUxlbj1hdWRpb0RhdGFbY2hdLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIERGVCBhcnJheSBidWZmZXJcclxuICAgICAgICAgICAgICAgICAgICBzb25hW2NoXSA9IG5ldyBBcnJheSh3KTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZnJhbWVQb3MgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHBpaSA9IDA7IHBpaSA8IHc7IHBpaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2aXJ0UGlpID0gbCArIHBpaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUG9zaXRpb24gb2Ygc2FtcGxlIGRhdGEgZnJhbWUgaXMgcGl4ZWwgcG9zaXRpb24gbWFwcGVkIHRvIGF1ZGlvIGZyYW1lIHBvc2l0aW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZW4gXCJjZW50ZXJcIiB0aGUgZnJhbWUgYnkgc2hpZnRpbmcgbGVmdCBieSBoYWxmIHRoZSBERlQgc2l6ZSAoPWRmdEJhbmRzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZVBvcyA9IE1hdGgucm91bmQoKHZpcnRQaWkgKiBmcmFtZXNQZXJQaXhlbCktZGZ0QmFuZHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmaWxsIERGVCBidWZmZXIgd2l0aCB3aW5kb3dlZCBzYW1wbGUgdmFsdWVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGZ0U2l6ZTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2FtcGxlUG9zPWZyYW1lUG9zICsgaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgZm9yIG5lZ2F0aXZlIHNhbXBsZSBwb3NpdGlvbnMgYW5kIG91dCBvZiBib3VuZHMgcG9zaXRpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hEYXQ9MDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgYXVkaW8gc2FtcGxlIGlmIGF2YWlsYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFkcD1zYW1wbGVQb3MtYXVkaW9EYXRhT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYWRwPj0wICYmIGFkcCA8IGNoRGF0YUxlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaERhdCA9IGF1ZGlvRGF0YVtjaF1bYWRwXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQXVkaW8gZGF0YTogXCIrY2hEYXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlNhbXBsZSBidWYgcG9zIG9vYjogYWRwOiBcIithZHArXCIsIGNoRGF0YUxlbjogXCIrY2hEYXRhTGVuK1wiLCBzYW1wbGVQb3M6IFwiK3NhbXBsZVBvcytcIiwgaTogXCIraSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXBwbHkgV2luZG93XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiW2ldID0gY2hEYXQgKiB3Zi5nZXRTY2FsZShpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxjIERGVCBtYWduaXR1ZGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzcGVjdHIgPSBkZnQucHJvY2Vzc1JlYWxNYWduaXR1ZGUoYik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgbWF4aW11bSB2YWx1ZSBvZiBzcGVjdHJhbCBlbmVyZ3lcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBkZnRCYW5kczsgcysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHNkID0gKDIgKiBNYXRoLnBvdyhzcGVjdHJbc10sIDIpKSAvIGRmdEJhbmRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBzZCA+IGNhbGNNYXhQc2QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjTWF4UHNkID0gcHNkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCByZW5kZXIgbW9kZWwgZGF0YSBmb3IgdGhpcyBwaXhlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzb25hW2NoXVtwaWldID0gc3BlY3RyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZighbXNnLmRhdGEubm9yZW5kZXIpIHtcclxuICAgICAgICAgICAgICAgICAgaWYoIW1heFBzZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF4UHNkPWNhbGNNYXhQc2Q7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgIGZvciAobGV0IHBpaSA9IDA7IHBpaSA8IHc7IHBpaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFsbEJsYWNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGNoSDsgeSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgZnJlcUlkeCA9IE1hdGgucm91bmQoeSAqIGRmdEJhbmRzIC8gY2hIKTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgb25lLXNpZGVkIHBvd2VyIHNwZWN0cmFsIGRlbnNpdHkgUFNEIChmLCB0KSBpbiBQYTIvSHpcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIFBTRChmKSBwcm9wb3J0aW9uYWwgdG8gMnxYKGYpfDIgLyAodDIgLSB0MSlcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWwgPSBzb25hW2NoXVtwaWldW2ZyZXFJZHhdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IHBzZCA9ICgyICogTWF0aC5wb3codmFsLCAyKSkgLyBkZnRCYW5kcztcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBsb2dhcml0aG1pYyB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgLy9sZXQgcHNkTG9nID0gaXBzLmRzcC5EU1BVdGlscy50b0xldmVsSW5EQihwc2QgLyBtYXhQc2QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmVhckxldmVsID0gcHNkIC8gbWF4UHNkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IHBzZExvZyA9IDEwICogTWF0aC5sb2cobGluZWFyTGV2ZWwpIC8gTWF0aC5sb2coMTApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gRml4ZWQgZHluYW1pYyBSYW5nZSB2YWx1ZSBvZiA3MGRCIGZvciBub3dcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBkeW5SYW5nZUluRGIgPSA3MDtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBzY2FsZWRWYWwgPSAocHNkTG9nICsgZHluUmFuZ2VJbkRiKSAvIGR5blJhbmdlSW5EYjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBhcmUgdGhlIGZvbGxvd2luZyBjaGVja3MgbmVjZXNzYXJ5IGZvciBjbGFtcGVkIGFycmF5ID9cclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2FsZWRWYWwgPiAxLjApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlZFZhbCA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NhbGVkVmFsIDwgMC4wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlZFZhbCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgcmdiVmFsID0gTWF0aC5yb3VuZCgyNTUgKiBzY2FsZWRWYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHJnYlZhbCA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9cdFx0XHRcdFx0XHRcdFN5c3RlbS5vdXQucHJpbnRsbihcIk5lZyBSR0IgdmFsOiBcIityZ2JWYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZ2JWYWwgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHJnYlZhbCA+IDI1NSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZ2JWYWwgPSAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICByZ2JWYWwgPSAyNTUgLSByZ2JWYWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocmdiVmFsID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxCbGFjayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IHB5ID0gY2hIIC0geTtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhUG9zID0gKCgoKGNoICogY2hIKSArIHB5KSAqIHcpICsgcGlpKSAqIDQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpbWdEYXRhW2RhdGFQb3MgKyAwXSA9IHJnYlZhbDsgLy9SXHJcbiAgICAgICAgICAgICAgICAgICAgICBpbWdEYXRhW2RhdGFQb3MgKyAxXSA9IHJnYlZhbDsgLy9HXHJcbiAgICAgICAgICAgICAgICAgICAgICBpbWdEYXRhW2RhdGFQb3MgKyAyXSA9IHJnYlZhbDsgLy9CXHJcbiAgICAgICAgICAgICAgICAgICAgICBpbWdEYXRhW2RhdGFQb3MgKyAzXSA9IDI1NTsgLy9BIChhbHBoYTogZnVsbHkgb3BhcXVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiUmVuZGVyZWQ6IHB5OiBcIitweStcIiwgcmdidmFsOiBcIityZ2JWYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gZXhhbXBsZSAxeDEsIDJjaHNcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICBjaDB4MHkwUixjaDB4MHkwRyxjaDB4MHkwQixjaDB4MHkwQSxcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICBjaDB4MXkwUixjaDB4MXkwRyxjaDB4MXkwQixjaDB4MXkwQSxcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICBjaDB4MHkwUixjaDB4MHkwRyxjaDB4MHkwQixjaDB4MHkwQSxcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICBjaDB4MXkxUixjaDB4MXkxRyxjaDB4MXkxQixjaDB4MXkxQSxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgY2gxeDB5MFIsY2gxeDB5MEcsY2gxeDB5MEIsY2gxeDB5MEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgY2gxeDF5MFIsY2gxeDF5MEcsY2gxeDF5MEIsY2gxeDF5MEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgY2gxeDB5MFIsY2gxeDB5MEcsY2gxeDB5MEIsY2gxeDB5MEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgY2gxeDF5MVIsY2gxeDF5MUcsY2gxeDF5MUIsY2gxeDF5MUFcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgKGFsbEJsYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyhcIkJsYWNrOiBcIiwgcGlpLCBcIiBcIiwgY2gpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlJlbmRlciB0aHJlYWQgcG9zdCBtZXNzYWdlIGltZ0RhdGE6IFwiK2ltZ0RhdGEubGVuZ3RoKVxyXG4gICAgICAgICAgICBwb3N0TWVzc2FnZSh7aW1nRGF0YTogaW1nRGF0YSwgbDogbCwgdzogbXNnLmRhdGEudywgaDogbXNnLmRhdGEuaCwgdnc6IHZ3LG1heFBzZDpjYWxjTWF4UHNkLHRlcm1pbmF0ZTptc2cuZGF0YS50ZXJtaW5hdGV9LCBbaW1nRGF0YS5idWZmZXJdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnREcmF3KGNsZWFyID0gdHJ1ZSkge1xyXG4gICAgICAgIGlmIChjbGVhcikge1xyXG4gICAgICAgICAgICBpZih0aGlzLmJvdW5kcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zb25hZ3JhbUNhbnZhcy5zdHlsZS5sZWZ0ID0gTWF0aC5yb3VuZCh0aGlzLmJvdW5kcy5wb3NpdGlvbi5sZWZ0KS50b1N0cmluZygpICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIGxldCBpbnRXID0gTWF0aC5yb3VuZCh0aGlzLmJvdW5kcy5kaW1lbnNpb24ud2lkdGgpXHJcbiAgICAgICAgICAgICAgICBsZXQgaW50SCA9IE1hdGgucm91bmQodGhpcy5ib3VuZHMuZGltZW5zaW9uLmhlaWdodClcclxuICAgICAgICAgICAgICAgIHRoaXMuc29uYWdyYW1DYW52YXMud2lkdGggPSBpbnRXO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zb25hZ3JhbUNhbnZhcy5oZWlnaHQgPSBpbnRIO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBnID0gdGhpcy5zb25hZ3JhbUNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoZykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vZy5jbGVhclJlY3QoMCwgMCx3LCBoKTtcclxuICAgICAgICAgICAgICAgICAgICBnLmZpbGxTdHlsZSA9IFwid2hpdGVcIjtcclxuICAgICAgICAgICAgICAgICAgICBnLmZpbGxSZWN0KDAsIDAsIGludFcsIGludEgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RhcnRSZW5kZXIoKTtcclxuICAgICAgICB0aGlzLmRyYXdDdXJzb3JMYXllcigpXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGFydFJlbmRlcigpIHtcclxuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU29uYWdyYW0gc3RhcnQgcmVuZGVyLi4uXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLndvcmtlcikge1xyXG4gICAgICAgICAgICB0aGlzLndvcmtlci50ZXJtaW5hdGUoKTtcclxuICAgICAgICAgICAgdGhpcy53b3JrZXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgaWYodGhpcy5yYUFzU3Vic2Mpe1xyXG4gICAgICAgIHRoaXMucmFBc1N1YnNjLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuX2F1ZGlvRGF0YUhvbGRlcikge1xyXG4gICAgICAgIHRoaXMuX2F1ZGlvRGF0YUhvbGRlci5hZGRPblJlYWR5TGlzdGVuZXIoKCk9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fYXVkaW9EYXRhSG9sZGVyICYmIHRoaXMuYm91bmRzICYmIHRoaXMuYm91bmRzLmRpbWVuc2lvbikge1xyXG4gICAgICAgICAgICBsZXQgdyA9IE1hdGgucm91bmQodGhpcy5ib3VuZHMuZGltZW5zaW9uLndpZHRoKTtcclxuICAgICAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKHRoaXMuYm91bmRzLmRpbWVuc2lvbi5oZWlnaHQpO1xyXG4gICAgICAgICAgICBsZXQgdncgPSBNYXRoLnJvdW5kKHRoaXMudmlydHVhbERpbWVuc2lvbi53aWR0aCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodyA+IDAgJiYgaCA+IDAgJiYgdncgPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMud29ya2VyID0gbmV3IFdvcmtlcih0aGlzLndvcmtlclVSTCk7XHJcbiAgICAgICAgICAgICAgLy90aGlzLndvID0gbmV3IFdvcmtlcignLi93b3JrZXIvc29uYWdyYW0ud29ya2VyJywgeyB0eXBlOiBgbW9kdWxlYCB9KTtcclxuXHJcbiAgICAgICAgICAgICAgbGV0IGNocyA9IHRoaXMuX2F1ZGlvRGF0YUhvbGRlci5udW1iZXJPZkNoYW5uZWxzO1xyXG4gICAgICAgICAgICAgIGxldCB2dyA9IE1hdGgucm91bmQodGhpcy52aXJ0dWFsRGltZW5zaW9uLndpZHRoKTtcclxuXHJcbiAgICAgICAgICAgICAgbGV0IGZyYW1lTGVuZ3RoID0gdGhpcy5fYXVkaW9EYXRhSG9sZGVyLmZyYW1lTGVuO1xyXG4gICAgICAgICAgICAgIGxldCBmcmFtZXNQZXJQaXhlbCA9IE1hdGguY2VpbChmcmFtZUxlbmd0aCAvIHZ3KTtcclxuICAgICAgICAgICAgICBsZXQgbGVmdFBvcyA9IE1hdGgucm91bmQodGhpcy5ib3VuZHMucG9zaXRpb24ubGVmdCk7XHJcbiAgICAgICAgICAgICAgbGV0IHJlbmRlclBvcyA9IGxlZnRQb3M7XHJcbiAgICAgICAgICAgICAgbGV0IHJhQXMgPSB0aGlzLl9hdWRpb0RhdGFIb2xkZXIucmFuZG9tQWNjZXNzQXVkaW9TdHJlYW0oKTtcclxuXHJcbiAgICAgICAgICAgICAgbGV0IGF1ZGlvQnVmZmVyOiBBdWRpb0J1ZmZlciB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICAgIGxldCBhdWRpb1NvdXJjZSA9IHRoaXMuX2F1ZGlvRGF0YUhvbGRlci5hdWRpb1NvdXJjZTtcclxuICAgICAgICAgICAgICBpZiAoYXVkaW9Tb3VyY2UgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlclNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgYXVkaW9CdWZmZXIgPSBhdWRpb1NvdXJjZS5hdWRpb0J1ZmZlcjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy9sZXQgYXJyYXlBdWRpb0J1ZmZlcj10aGlzLl9hdWRpb0RhdGFIb2xkZXIuYXJyYXlCdWZmZXI7XHJcbiAgICAgICAgICAgICAgbGV0IGFyckFiQnVmOiBGbG9hdDMyQXJyYXlbXSB8IG51bGw7XHJcbiAgICAgICAgICAgICAgbGV0IGFkYSA9IG5ldyBBcnJheTxBcnJheUJ1ZmZlcj4oY2hzKTtcclxuICAgICAgICAgICAgICAvLyBmb3IobGV0IGNoPTA7Y2g8Y2hzO2NoKyspIHtcclxuICAgICAgICAgICAgICAvLyAgIGFkYVtjaF0gPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuZGZ0U2l6ZSk7XHJcbiAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgIGxldCBpbWdEYXRhOiBVaW50OENsYW1wZWRBcnJheTtcclxuICAgICAgICAgICAgICBsZXQgbWF4UHNkID0gLUluZmluaXR5O1xyXG4gICAgICAgICAgICAgIGxldCBub3JlbmRlciA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLndvcmtlcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy53b3JrZXIub25tZXNzYWdlID0gKG1lKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0cnVlID09PSBtZS5kYXRhLnRlcm1pbmF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkcmF3SW1nRGF0YTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW1nRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZHJhd0ltZ0RhdGEgPSBpbWdEYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBkcmF3SW1nRGF0YSA9IG1lLmRhdGEuaW1nRGF0YTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3UmVuZGVyZWQodywgaCwgZHJhd0ltZ0RhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLndvcmtlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrZXIudGVybWluYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud29ya2VyID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICByYUFzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNldCByZW5kZXJlZCB2ZXJ0aWNhbCB2YWx1ZXMgb2Ygb25lIHBpeGVsIG9mIHRpbWVzY2FsZVxyXG4gICAgICAgICAgICAgICAgICAgIC8vbGV0IGRhdGFQb3MgPSByZW5kZXJQb3MgKiBoICogNDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobm9yZW5kZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChtZS5kYXRhLm1heFBzZCA+IG1heFBzZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhQc2QgPSBtZS5kYXRhLm1heFBzZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwibmV3IG1heFBzZDogXCIrbWF4UHNkKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGNoSCA9IE1hdGgucm91bmQoaCAvIGNocyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgaWRwID0gbWUuZGF0YS5sIC0gbGVmdFBvcztcclxuICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCBjaEg7IHkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBweSA9IGNoSCAtIHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFQb3MgPSAoKCgoY2ggKiBjaEgpICsgcHkpICogdykgKyBpZHApICogNDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWVQb3MgPSAoKGNoICogY2hIKSArIHB5KSAqIDQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sZXQgbGFzdFBvcyA9IGRhdGFQb3MgKyBtZS5kYXRhLmltZ0RhdGEubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgKGxhc3RQb3MgPCBpbWdEYXRhLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNldCBvbmUgcGl4ZWxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nRGF0YVtkYXRhUG9zXSA9IG1lLmRhdGEuaW1nRGF0YVttZVBvc107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nRGF0YVtkYXRhUG9zICsgMV0gPSBtZS5kYXRhLmltZ0RhdGFbbWVQb3MgKyAxXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdEYXRhW2RhdGFQb3MgKyAyXSA9IG1lLmRhdGEuaW1nRGF0YVttZVBvcyArIDJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGFbZGF0YVBvcyArIDNdID0gbWUuZGF0YS5pbWdEYXRhW21lUG9zICsgM107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy99IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5lcnJvcihcIk91dCBvZiByYW5nZTogXCIgKyBkYXRhUG9zICsgXCIrXCIgKyBtZS5kYXRhLmltZ0RhdGEubGVuZ3RoICsgXCI+PVwiICsgaW1nRGF0YS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fYXVkaW9EYXRhSG9sZGVyICYmIGFyckFiQnVmICYmIHRoaXMud29ya2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9jZWVkIHdpdGggbmV4dCBwaXhlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgcmVuZGVyUG9zKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJSZW5kZXIgcG9zOiBcIityZW5kZXJQb3MpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCB3aW5kb3dFbmQgPSByZW5kZXJQb3MgPj0gbGVmdFBvcyArIHc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvd0VuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9yZW5kZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwaGFzZSB0d286IHJlbmRlcmluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5vcmVuZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RhcnQgZnJvbSBiZWdpbm5pbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJQb3MgPSBsZWZ0UG9zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIm5vdyByZW5kZXJpbmc6IG1heFBzZDogXCIrbWF4UHNkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0ZXJtaW5hdGUgcmVuZGVyIHBoYXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBsZWZ0RnJhbWVQb3MgPSBNYXRoLmZsb29yKGZyYW1lTGVuZ3RoICogcmVuZGVyUG9zIC8gdncpIC0gdGhpcy5kZnRTaXplIC8gMjtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0RnJhbWVQb3MgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRGcmFtZVBvcyA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAvL2xldCBhZGEgPSBuZXcgQXJyYXk8QXJyYXlCdWZmZXI+KGNocyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiUmVuZGVyIHBvczogXCIrcmVuZGVyUG9zK1wiIGxlZnRGcmFtZVBvczogXCIrbGVmdEZyYW1lUG9zKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRlcm1pbmF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fYXVkaW9EYXRhSG9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sZXQgcmVhZCA9IHRoaXMuX2F1ZGlvRGF0YUhvbGRlci5mcmFtZXMobGVmdEZyYW1lUG9zLCB0aGlzLmRmdFNpemUsIGFyckFiQnVmKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJhQXNTdWJzYyA9IHJhQXMuZnJhbWVzT2JzKGxlZnRGcmFtZVBvcywgdGhpcy5kZnRTaXplLCBhcnJBYkJ1Zikuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAocmVhZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJBYkJ1ZiAmJiB0aGlzLndvcmtlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWQgPCB0aGlzLmRmdFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gemVybyBwYWRkaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB6cCA9IHJlYWQ7IHpwIDwgdGhpcy5kZnRTaXplOyB6cCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJBYkJ1ZltjaF1benBdID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmVlZCBhIGNvcHkgaGVyZSBmb3IgdGhlIHdvcmtlciwgb3RoZXJ3aXNlIHRoaXMuYXVkaW9EYXRhIGlzIG5vdCBhY2Nlc3NpYmxlIGFmdGVyIHBvc3RpbmcgdG8gdGhlIHdvcmtlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2FkYVtjaF0gPSBhcnJBYkJ1ZltjaF0uYnVmZmVyLnNsaWNlKDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnJBYkJ1ZkNoID0gYXJyQWJCdWZbY2hdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZExlbiA9IGFyckFiQnVmQ2guYnVmZmVyLmJ5dGVMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWRhW2NoXSB8fCBhZGFbY2hdLmJ5dGVMZW5ndGggIT09IGFkTGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhW2NoXSA9IG5ldyBBcnJheUJ1ZmZlcihhZExlbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZBZGFDaCA9IG5ldyBGbG9hdDMyQXJyYXkoYWRhW2NoXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZBZGFDaC5zZXQoYXJyQWJCdWZbY2hdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvRGF0YTogYWRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb0RhdGFPZmZzZXQ6IGxlZnRGcmFtZVBvcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogcmVuZGVyUG9zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiBtZS5kYXRhLncsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ3OiB2dyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hzOiBjaHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lTGVuZ3RoOiBmcmFtZUxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZ0U2l6ZTogdGhpcy5kZnRTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhQc2Q6IG1heFBzZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9yZW5kZXI6IG5vcmVuZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGU6IHRlcm1pbmF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgYWRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlNvbmFncmFtOiBFcnJvciByZWFkaW5nIGF1ZGlvIGRhdGE6IFwiICsgZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhW2NoXSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9EYXRhOiBhZGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9EYXRhT2Zmc2V0OiBsZWZ0RnJhbWVQb3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbDogcmVuZGVyUG9zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHc6IG1lLmRhdGEudyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBoOiBoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZ3OiB2dyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaHM6IGNocyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZUxlbmd0aDogZnJhbWVMZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGZ0U2l6ZTogdGhpcy5kZnRTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heFBzZDogbWF4UHNkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5vcmVuZGVyOiBub3JlbmRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGU6IHRlcm1pbmF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBhZGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoYXVkaW9CdWZmZXIgJiYgYXVkaW9CdWZmZXIubGVuZ3RoICogYXVkaW9CdWZmZXIubnVtYmVyT2ZDaGFubmVscyA8IEF1ZGlvQ2FudmFzTGF5ZXJDb21wb25lbnQuRU5BQkxFX1NUUkVBTUlOR19OVU1CRVJfT0ZfU0FNUExFU19USFJFU0hPTEQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBhZGEgPSBuZXcgQXJyYXk8QXJyYXlCdWZmZXI+KGNocyk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIE5lZWQgYSBjb3B5IGhlcmUgZm9yIHRoZSB3b3JrZXIsIG90aGVyd2lzZSB0aGlzLmF1ZGlvRGF0YSBpcyBub3QgYWNjZXNzaWJsZSBhZnRlciBwb3N0aW5nIHRvIHRoZSB3b3JrZXJcclxuICAgICAgICAgICAgICAgICAgYWRhW2NoXSA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKGNoKS5idWZmZXIuc2xpY2UoMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvL2xldCBzdGFydCA9IERhdGUubm93KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWFya2VyQ2FudmFzKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBnID0gdGhpcy5tYXJrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGcuZmlsbFRleHQoXCJSZW5kZXJpbmcuLi5cIiwgMTAsIDIwKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtcclxuICAgICAgICAgICAgICAgICAgYXVkaW9EYXRhOiBhZGEsXHJcbiAgICAgICAgICAgICAgICAgIGw6IGxlZnRQb3MsXHJcbiAgICAgICAgICAgICAgICAgIHc6IHcsXHJcbiAgICAgICAgICAgICAgICAgIGg6IGgsXHJcbiAgICAgICAgICAgICAgICAgIHZ3OiBNYXRoLnJvdW5kKHRoaXMudmlydHVhbERpbWVuc2lvbi53aWR0aCksXHJcbiAgICAgICAgICAgICAgICAgIGNoczogY2hzLFxyXG4gICAgICAgICAgICAgICAgICBmcmFtZUxlbmd0aDogZnJhbWVMZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgIGRmdFNpemU6IHRoaXMuZGZ0U2l6ZSxcclxuICAgICAgICAgICAgICAgICAgdGVybWluYXRlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9LCBhZGEpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodyA+IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNQZXJQaXhlbCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYXJyU2l6ZSA9IHcgKiBoICogNDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXJyU2l6ZSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGFyclNpemUgPSAwXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGltZ0RhdGEgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoYXJyU2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJ3ID0gMTtcclxuICAgICAgICAgICAgICAgICAgICBhcnJBYkJ1ZiA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KGNocyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGFyckFiQnVmW2NoXSA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5kZnRTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBsZWZ0RnJhbWVQb3MgPSBNYXRoLmZsb29yKGZyYW1lTGVuZ3RoICogcmVuZGVyUG9zIC8gdncpIC0gdGhpcy5kZnRTaXplIC8gMjtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZnJhbWVzVG9SZWFkID0gdGhpcy5kZnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0RnJhbWVQb3MgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZWZ0RnJhbWVQb3MgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdTdGF0ZVRleHQoJ0xvYWRpbmcvUmVuZGVyaW5nLi4uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yYUFzU3Vic2MgPSByYUFzLmZyYW1lc09icyhsZWZ0RnJhbWVQb3MsIGZyYW1lc1RvUmVhZCwgYXJyQWJCdWYpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogKHJlYWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyQWJCdWYgJiYgdGhpcy53b3JrZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkIDwgdGhpcy5kZnRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHplcm8gcGFkZGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgenAgPSByZWFkOyB6cCA8IHRoaXMuZGZ0U2l6ZTsgenArKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyQWJCdWZbY2hdW3pwXSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyckFiQnVmQ2ggPSBhcnJBYkJ1ZltjaF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkTGVuID0gYXJyQWJCdWZDaC5idWZmZXIuYnl0ZUxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhZGFbY2hdIHx8IGFkYVtjaF0uYnl0ZUxlbmd0aCAhPT0gYWRMZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFbY2hdID0gbmV3IEFycmF5QnVmZmVyKGFkTGVuKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZkFkYUNoID0gbmV3IEZsb2F0MzJBcnJheShhZGFbY2hdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZkFkYUNoLnNldChhcnJBYkJ1ZltjaF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogcmVuZGVyUG9zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiBydyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogaCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnc6IHZ3LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHM6IGNocyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVMZW5ndGg6IGZyYW1lTGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb0RhdGE6IGFkYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9EYXRhT2Zmc2V0OiBsZWZ0RnJhbWVQb3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmdFNpemU6IHRoaXMuZGZ0U2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9yZW5kZXI6IG5vcmVuZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGU6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBhZGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiU29uYWdyYW06IEVycm9yIHJlYWRpbmcgYXVkaW8gZGF0YTogXCIgKyBlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmJvdW5kcyAmJiB0aGlzLmJvdW5kcy5kaW1lbnNpb24pIHtcclxuICAgICAgICAgIGxldCB3ID0gTWF0aC5yb3VuZCh0aGlzLmJvdW5kcy5kaW1lbnNpb24ud2lkdGgpO1xyXG4gICAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKHRoaXMuYm91bmRzLmRpbWVuc2lvbi5oZWlnaHQpO1xyXG4gICAgICAgICAgbGV0IGcgPSB0aGlzLnNvbmFncmFtQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuICAgICAgICAgIGlmIChnKSB7XHJcbiAgICAgICAgICAgIGcuY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdSZW5kZXJlZCh3Om51bWJlcixoOm51bWJlcixpbWdEYXRhOlVpbnQ4Q2xhbXBlZEFycmF5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc29uYWdyYW1DYW52YXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zb25hZ3JhbUNhbnZhcy53aWR0aCA9IHc7XHJcbiAgICAgICAgICAgIHRoaXMuc29uYWdyYW1DYW52YXMuaGVpZ2h0ID0gaDtcclxuICAgICAgICAgICAgbGV0IGcgPSB0aGlzLnNvbmFncmFtQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuICAgICAgICAgICAgaWYgKGcpIHtcclxuICAgICAgICAgICAgICAgIGlmICh3ID4gMCAmJiBoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBnSW1nRGF0YSA9IGcuY3JlYXRlSW1hZ2VEYXRhKHcsIGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGdJbWdEYXRhLmRhdGEuc2V0KGltZ0RhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGcucHV0SW1hZ2VEYXRhKGdJbWdEYXRhLCAwLCAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRyYXdCZygpO1xyXG4gICAgICAgIHRoaXMuZHJhd1BsYXlQb3NpdGlvbigpO1xyXG4gICAgfVxyXG5cclxuLy8gICAgIC8vIHN5bmNocm9ub3VzIGRyYXcgKG5vdCB1c2VkIGFueW1vcmUpXHJcbi8vICAgcmVkcmF3KCkge1xyXG4vL1xyXG4vLyAgICAgbGV0IGcgPSB0aGlzLnNvbmFncmFtQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuLy9cclxuLy8gICAgIGxldCB3ID0gdGhpcy5zb25hZ3JhbUNhbnZhcy53aWR0aDtcclxuLy8gICAgIGxldCBoID0gdGhpcy5zb25hZ3JhbUNhbnZhcy5oZWlnaHQ7XHJcbi8vICAgICBpZiAoZykge1xyXG4vLyAgICAgICBnLmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuLy8gICAgICAgZy5maWxsU3R5bGUgPSBcIndoaXRlXCI7XHJcbi8vICAgICAgIGcuZmlsbFJlY3QoMCwgMCwgdywgaCk7XHJcbi8vICAgICAgIGlmICh0aGlzLl9hdWRpb0RhdGFIb2xkZXIpIHtcclxuLy8gICAgICAgICBsZXQgc3BlY3RTaXplID0gTWF0aC5mbG9vcih0aGlzLmRmdFNpemUgLyAyKVxyXG4vLyAgICAgICAgIGxldCBjaHMgPSB0aGlzLl9hdWRpb0RhdGFIb2xkZXIubnVtYmVyT2ZDaGFubmVscztcclxuLy8gICAgICAgICBsZXQgY2hIID0gaCAvIGNocztcclxuLy9cclxuLy8gICAgICAgICBsZXQgZnJhbWVMZW5ndGggPSB0aGlzLl9hdWRpb0RhdGFIb2xkZXIuZnJhbWVMZW47XHJcbi8vXHJcbi8vICAgICAgICAgbGV0IGZyYW1lc1BlclBpeGVsID0gZnJhbWVMZW5ndGggLyB3O1xyXG4vLyAgICAgICAgIGxldCB5ID0gMDtcclxuLy8gICAgICAgICBsZXQgYXVkaW9CdWZmZXI6QXVkaW9CdWZmZXJ8bnVsbD1udWxsO1xyXG4vLyAgICAgICAgIGxldCBhdWRpb1NvdXJjZT10aGlzLl9hdWRpb0RhdGFIb2xkZXIuYXVkaW9Tb3VyY2U7XHJcbi8vICAgICAgICAgaWYoYXVkaW9Tb3VyY2UgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlclNvdXJjZSl7XHJcbi8vICAgICAgICAgICBhdWRpb0J1ZmZlcj1hdWRpb1NvdXJjZS5hdWRpb0J1ZmZlcjtcclxuLy8gICAgICAgICB9XHJcbi8vXHJcbi8vICAgICAgICAgaWYoYXVkaW9CdWZmZXIpIHtcclxuLy8gICAgICAgICAgIGxldCBiID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmRmdFNpemUpXHJcbi8vXHJcbi8vICAgICAgICAgICBsZXQgc29uYSA9IG5ldyBBcnJheTxBcnJheTxGbG9hdDMyQXJyYXk+PihjaHMpO1xyXG4vLyAgICAgICAgICAgbGV0IG1heCA9IDA7XHJcbi8vICAgICAgICAgICBsZXQgbWF4UHNkID0gLUluZmluaXR5O1xyXG4vLyAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4vLyAgICAgICAgICAgICBsZXQgeCA9IDA7XHJcbi8vICAgICAgICAgICAgIHNvbmFbY2hdID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4odyk7XHJcbi8vXHJcbi8vICAgICAgICAgICAgIGxldCBjaERhdGEgPSBhdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YShjaCk7XHJcbi8vICAgICAgICAgICAgIC8vIFRPRE8gY2VudGVyIGJ1ZmZlclxyXG4vL1xyXG4vLyAgICAgICAgICAgICBsZXQgZnJhbWVQb3MgPSAwO1xyXG4vLyAgICAgICAgICAgICBmb3IgKGxldCBwaWkgPSAwOyBwaWkgPCB3OyBwaWkrKykge1xyXG4vLyAgICAgICAgICAgICAgIGZyYW1lUG9zID0gTWF0aC5yb3VuZChwaWkgKiBmcmFtZXNQZXJQaXhlbCk7XHJcbi8vICAgICAgICAgICAgICAgLy8gY2FsY3VsYXRlIERGVCBhdCBwaXhlbCBwb3NpdGlvblxyXG4vLyAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kZnRTaXplOyBpKyspIHtcclxuLy8gICAgICAgICAgICAgICAgIGxldCBjaERhdCA9IGNoRGF0YVtmcmFtZVBvcyArIGldO1xyXG4vLyAgICAgICAgICAgICAgICAgYltpXSA9IGNoRGF0O1xyXG4vLyAgICAgICAgICAgICAgIH1cclxuLy8gICAgICAgICAgICAgICBsZXQgc3BlY3RyID0gdGhpcy5kZnQucHJvY2Vzc1JlYWxNYWduaXR1ZGUoYik7XHJcbi8vICAgICAgICAgICAgICAgc29uYVtjaF1bcGlpXSA9IHNwZWN0cjtcclxuLy8gICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbi8vICAgICAgICAgICAgICAgbGV0IHBNYXggPSBNYXRoLm1heC5hcHBseShudWxsLCBzcGVjdHIpO1xyXG4vLyAgICAgICAgICAgICAgIGlmIChwTWF4ID4gbWF4KSB7XHJcbi8vICAgICAgICAgICAgICAgICBtYXggPSBwTWF4O1xyXG4vLyAgICAgICAgICAgICAgIH1cclxuLy9cclxuLy8gICAgICAgICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNwZWN0U2l6ZTsgcysrKSB7XHJcbi8vICAgICAgICAgICAgICAgICBsZXQgcHNkID0gKDIgKiBNYXRoLnBvdyhzcGVjdHJbc10sIDIpKSAvIHNwZWN0U2l6ZTtcclxuLy8gICAgICAgICAgICAgICAgIGlmIChwc2QgPiBtYXhQc2QpIHtcclxuLy8gICAgICAgICAgICAgICAgICAgbWF4UHNkID0gcHNkO1xyXG4vLyAgICAgICAgICAgICAgICAgfVxyXG4vLyAgICAgICAgICAgICAgIH1cclxuLy8gICAgICAgICAgICAgfVxyXG4vLyAgICAgICAgICAgfVxyXG4vLyAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIm1heDogXCIsIG1heCk7XHJcbi8vICAgICAgICAgICBtYXhQc2QgPSAoMiAqIE1hdGgucG93KG1heCwgMikpIC8gc3BlY3RTaXplO1xyXG4vLyAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4vL1xyXG4vLyAgICAgICAgICAgICBsZXQgZnJhbWVQb3MgPSAwO1xyXG4vLyAgICAgICAgICAgICBmb3IgKGxldCBwaWkgPSAwOyBwaWkgPCB3OyBwaWkrKykge1xyXG4vLyAgICAgICAgICAgICAgIGZyYW1lUG9zID0gcGlpICogZnJhbWVzUGVyUGl4ZWw7XHJcbi8vXHJcbi8vICAgICAgICAgICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCBoOyB5KyspIHtcclxuLy8gICAgICAgICAgICAgICAgIGxldCBmcmVxSWR4ID0gTWF0aC5yb3VuZCh5ICogc3BlY3RTaXplIC8gaCk7XHJcbi8vXHJcbi8vICAgICAgICAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIG9uZSBzaWRlZCBwb3dlciBzcGVjdHJhbCBkZW5zaXR5IFBTRCAoZiwgdCkgaW4gUGEyL0h6XHJcbi8vICAgICAgICAgICAgICAgICAvLyBQU0QoZikgcHJvcG9ydGlvbmFsIHRvIDJ8WChmKXwyIC8gKHQyIC0gdDEpXHJcbi8vICAgICAgICAgICAgICAgICBsZXQgdmFsID0gc29uYVtjaF1bcGlpXVtmcmVxSWR4XTtcclxuLy8gICAgICAgICAgICAgICAgIGxldCBwc2QgPSAoMiAqIE1hdGgucG93KHZhbCwgMikpIC8gc3BlY3RTaXplO1xyXG4vL1xyXG4vLyAgICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGxvZ2FyaXRobWljXHJcbi8vICAgICAgICAgICAgICAgICBsZXQgcHNkTG9nID0gRFNQVXRpbHMudG9MZXZlbEluREIocHNkIC8gbWF4UHNkKTtcclxuLy8gICAgICAgICAgICAgICAgIGxldCBkeW5SYW5nZUluRGIgPSA3MDtcclxuLy8gICAgICAgICAgICAgICAgIGxldCBzY2FsZWRWYWwgPSAocHNkTG9nICsgZHluUmFuZ2VJbkRiKSAvIGR5blJhbmdlSW5EYjtcclxuLy9cclxuLy8gICAgICAgICAgICAgICAgIGlmIChzY2FsZWRWYWwgPiAxKVxyXG4vLyAgICAgICAgICAgICAgICAgICBzY2FsZWRWYWwgPSAxO1xyXG4vLyAgICAgICAgICAgICAgICAgaWYgKHNjYWxlZFZhbCA8IDApIHtcclxuLy8gICAgICAgICAgICAgICAgICAgc2NhbGVkVmFsID0gMDtcclxuLy8gICAgICAgICAgICAgICAgIH1cclxuLy8gICAgICAgICAgICAgICAgIGxldCByZ2JWYWwgPSAoMjU1ICogc2NhbGVkVmFsKTtcclxuLy8gICAgICAgICAgICAgICAgIGlmIChyZ2JWYWwgPCAwKSB7XHJcbi8vIC8vXHRcdFx0XHRcdFx0XHRTeXN0ZW0ub3V0LnByaW50bG4oXCJOZWcgUkdCIHZhbDogXCIrcmdiVmFsKTtcclxuLy8gICAgICAgICAgICAgICAgICAgcmdiVmFsID0gMDtcclxuLy8gICAgICAgICAgICAgICAgIH1cclxuLy8gICAgICAgICAgICAgICAgIGlmIChyZ2JWYWwgPiAyNTUpIHtcclxuLy8gICAgICAgICAgICAgICAgICAgcmdiVmFsID0gMjU1O1xyXG4vLyAgICAgICAgICAgICAgICAgfVxyXG4vLyAgICAgICAgICAgICAgICAgcmdiVmFsID0gMjU1IC0gcmdiVmFsO1xyXG4vLyAgICAgICAgICAgICAgICAgbGV0IGNvbG9yU3RyID0gQ1NTVXRpbHMudG9Db2xvclN0cmluZyhyZ2JWYWwsIHJnYlZhbCwgcmdiVmFsKTtcclxuLy8gICAgICAgICAgICAgICAgIGcuZmlsbFN0eWxlID0gY29sb3JTdHI7XHJcbi8vICAgICAgICAgICAgICAgICBnLmZpbGxSZWN0KHBpaSwgY2hIIC0geSwgMSwgMSk7XHJcbi8vICAgICAgICAgICAgICAgfVxyXG4vLyAgICAgICAgICAgICB9XHJcbi8vICAgICAgICAgICB9XHJcbi8vICAgICAgICAgICB0aGlzLmRyYXdQbGF5UG9zaXRpb24oKTtcclxuLy8gICAgICAgICB9ZWxzZXtcclxuLy8gICAgICAgICAgIHRocm93IEVycm9yKFwiUmVkcmF3IG9ubHkgc3VwcG9ydGVkIHdpdGggYXVkaW8gYnVmZmVyLlwiKVxyXG4vLyAgICAgICAgIH1cclxuLy8gICAgICAgfVxyXG4vLyAgICAgfVxyXG4vLyAgIH1cclxuLy9cclxuXHJcbiAgICBzZXREYXRhKGF1ZGlvRGF0YTogQXVkaW9EYXRhSG9sZGVyIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX2F1ZGlvRGF0YUhvbGRlciA9IGF1ZGlvRGF0YTtcclxuICAgICAgICB0aGlzLnBsYXlGcmFtZVBvc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbn1cclxuXHJcbiJdfQ==
@@ -111,10 +111,10 @@ export class SprDb {
111
111
  });
112
112
  return obs;
113
113
  }
114
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SprDb, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
115
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SprDb }); }
114
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: SprDb, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
115
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: SprDb }); }
116
116
  }
117
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SprDb, decorators: [{
117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: SprDb, decorators: [{
118
118
  type: Injectable
119
119
  }], ctorParameters: () => [] });
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvZGIvaW5kZGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDOztBQUdoQyxNQUFNLE9BQU8sSUFBSTtJQUtiLFlBQVksZUFBc0IsRUFBQyxRQUFzQjtRQUNyRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUMsZUFBZSxDQUFBO1FBQ3JDLElBQUksQ0FBQyxTQUFTLEdBQUMsUUFBUSxDQUFBO0lBQzNCLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDaEIsT0FBUSxJQUFJLENBQUMsZ0JBQWdCLENBQUE7SUFDaEMsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQTtJQUN6QixDQUFDO0NBQ0o7QUFHRCxNQUFNLE9BQU8sS0FBSzthQUVBLFdBQU0sR0FBQyxnQkFBZ0IsQUFBakIsQ0FBaUI7YUFFdkIsMkNBQXNDLEdBQUMsdUJBQXVCLEFBQXhCLENBQXlCO0lBQzVFLDBFQUEwRTthQUM3RCxjQUFTLEdBQUMsQ0FBQyxBQUFGLENBQUc7SUFHMUI7UUFEUSxXQUFNLEdBQWtCLElBQUksQ0FBQTtJQUVwQyxDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVk7UUFDaEIsSUFBSSxLQUFLLEdBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUVyQixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBSUQsTUFBTSxDQUFDLE9BQU87UUFDVixJQUFJLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBYyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBRTdDLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtZQUMzQyxJQUFJLFNBQVMsRUFBRTtnQkFDWCxJQUFJ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QUUsQ0FBQzthQUN0QjtRQUNULENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDOzhHQTlHUSxLQUFLO2tIQUFMLEtBQUs7OzJGQUFMLEtBQUs7a0JBRGpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSBcInJ4anNcIjtcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgU3luY3tcclxuICAgIGlkPzpudW1iZXI7XHJcbiAgICBfb2JqZWN0U3RvcmVOYW1lOnN0cmluZztcclxuICAgIF9vYmplY3RJZDpzdHJpbmd8bnVtYmVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKG9iamVjdFN0b3JlTmFtZTpzdHJpbmcsb2JqZWN0SWQ6c3RyaW5nfG51bWJlcil7XHJcbiAgICAgICAgdGhpcy5fb2JqZWN0U3RvcmVOYW1lPW9iamVjdFN0b3JlTmFtZVxyXG4gICAgICAgIHRoaXMuX29iamVjdElkPW9iamVjdElkXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG9iamVjdFN0b3JlTmFtZSgpOnN0cmluZ3tcclxuICAgICAgIHJldHVybiAgdGhpcy5fb2JqZWN0U3RvcmVOYW1lXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG9iamVjdElkKCk6c3RyaW5nfG51bWJlcntcclxuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0SWRcclxuICAgIH1cclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU3ByRGIge1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZGJOYW1lPSdzcGVlY2hyZWNvcmRlcidcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFJFQ09SRElOR19GSUxFX0NBQ0hFX09CSkVDVF9TVE9SRV9OQU1FPSdfcmVjb3JkaW5nX2ZpbGVfY2FjaGUnO1xyXG4gICAgIC8vcHVibGljIHN0YXRpYyBSRUNPUkRJTkdfRklMRV9DSFVOS1NfT0JKRUNUX1NUT1JFX05BTUU9J3JlY19maWxlX2NodW5rcyc7XHJcbiAgICBwdWJsaWMgc3RhdGljIGRiVmVyc2lvbj0xO1xyXG5cclxuICAgIHByaXZhdGUgX3N0b3JlOklEQkRhdGFiYXNlfG51bGw9bnVsbFxyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc3ByRGJGYWN0b3J5KCk6U3ByRGJ7XHJcbiAgICAgICBsZXQgc3ByRGI9bmV3IFNwckRiKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBzcHJEYjtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIHN0YXRpYyBwcmVwYXJlKCk6T2JzZXJ2YWJsZTxJREJEYXRhYmFzZT4ge1xyXG4gICAgICAgIGxldCBvYnMgPSBuZXcgT2JzZXJ2YWJsZTxJREJEYXRhYmFzZT4oKHN1YnNjcmliZXIpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJQcmVwYXJlIGluZGV4ZWQgZGF0YWJhc2UuLi5cIilcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleGVkREIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb3I6IElEQk9wZW5EQlJlcXVlc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgb3IgPSBpbmRleGVkREIub3BlbihTcHJEYi5kYk5hbWUsIFNwckRiLmRiVmVyc2lvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgb3Iub251cGdyYWRlbmVlZGVkID0gKGV2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYiA9IG9yLnJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdHI9b3IudHJhbnNhY3Rpb25cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmICghZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhTcHJEYi5SRUNPUkRJTkdfRklMRV9DQUNIRV9PQkpFQ1RfU1RPUkVfTkFNRSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoU3ByRGIuUkVDT1JESU5HX0ZJTEVfQ0FDSEVfT0JKRUNUX1NUT1JFX05BTUUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBGdXR1cmUgd29yayB0b3dhcmRzIGEgY29tcGxldGUgUFdBIHdoaWNoIHN0b3JlcyBhbGwgY2xpZW4gZGF0YSBpbiBpbmRleGVkIGRiIGFuZCBzeW5jaHJvbml6ZXMgdG8gdGhlIHNlcnZlcjogU2VlIGV4cGVyaW1lbnRhbCBHaXQgYnJhbmNoIFwicHJvZ3Jlc3NpdmVfd2ViX2FwcFwiXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoJ19zeW5jJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdfc3luYycsIHtrZXlQYXRoOiAnaWQnLCBhdXRvSW5jcmVtZW50OnRydWV9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoJ3Byb2plY3QnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3Byb2plY3QnLCB7a2V5UGF0aDogJ25hbWUnfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKCdzZXNzaW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGxldCBzZXNzU3RvcmU9ZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3Nlc3Npb24nLCB7a2V5UGF0aDogJ3Nlc3Npb25JZCd9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHNlc3NTdG9yZS5jcmVhdGVJbmRleCgncHJvamVjdElkeCcsIFsncHJvamVjdCddLCB7dW5pcXVlOmZhbHNlfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1lbHNlIGlmKGV2Lm9sZFZlcnNpb248NSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBsZXQgc2Vzc1N0b3JlPXRyLm9iamVjdFN0b3JlKCdzZXNzaW9uJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgc2Vzc1N0b3JlLmNyZWF0ZUluZGV4KCdwcm9qZWN0SWR4JywgWydwcm9qZWN0J10sIHt1bmlxdWU6ZmFsc2V9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoJ3NjcmlwdCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBsZXQgc2NyU3RvcmU9ZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3NjcmlwdCcsIHtrZXlQYXRoOiAnc2NyaXB0SWQnfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBzY3JTdG9yZS5jcmVhdGVJbmRleCgncHJvamVjdElkeCcsIFsncHJvamVjdCddLCB7dW5pcXVlOmZhbHNlfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKCdyZWNmaWxlJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGxldCByZlN0b3JlPWRiLmNyZWF0ZU9iamVjdFN0b3JlKCdyZWNmaWxlJywge2tleVBhdGg6ICd1dWlkJ30pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmZTdG9yZS5jcmVhdGVJbmRleCgnc2Vzc0lkSWR4JywgWydzZXNzaW9uSWQnXSwge3VuaXF1ZTpmYWxzZX0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmZTdG9yZS5jcmVhdGVJbmRleCgnc2Vzc0lkSXRlbWNvZGVJZHgnLCBbJ3Nlc3Npb25JZCcsJ2l0ZW1Db2RlJ10sIHt1bmlxdWU6ZmFsc2V9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKFNwckRiLlJFQ09SRElOR19GSUxFX0NBQ0hFX09CSkVDVF9TVE9SRV9OQU1FKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJmU3RvcmU9ZGIuY3JlYXRlT2JqZWN0U3RvcmUoU3ByRGIuUkVDT1JESU5HX0ZJTEVfQ0FDSEVfT0JKRUNUX1NUT1JFX05BTUUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldi5vbGRWZXJzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJVcGdyYWRlZCBpbmRleGVkIGRhdGFiYXNlIFwiICsgU3ByRGIuZGJOYW1lICsgXCIgc2NoZW1hIGZyb20gdmVyc2lvbiBcIiArIGV2Lm9sZFZlcnNpb24gKyBcIiB0byBcIiArIGV2Lm5ld1ZlcnNpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJDcmVhdGVkIGluZGV4ZWQgZGF0YWJhc2UgXCIgKyBTcHJEYi5kYk5hbWUgKyBcIiBzY2hlbWEgdmVyc2lvbiBcIiArIGV2Lm5ld1ZlcnNpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgb3Iub25zdWNjZXNzID0gKGV2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIk9wZW5lZCBpbmRleGVkIGRhdGFiYXNlXCIpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGRiPW9yLnJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgLy8gaVBhZCBXRWJLaXQgd29ya2Fyb3VuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gZG9lcyBub3QgaGVscCFcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgZGIub25jbG9zZT0oZXYpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgY29uc29sZS5kZWJ1ZyhcIkRCIGNsb3NlZC4uLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUuZGVidWcoXCJDbG9zZSBkYi5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIGRiLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBsZXQgb3BhUnE9aW5kZXhlZERCLm9wZW4oU3ByRGIuZGJOYW1lLCBTcHJEYi5kYlZlcnNpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gb3BhUnEub251cGdyYWRlbmVlZGVkPShldik9Pnt9XHJcbiAgICAgICAgICAgICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gb3BhUnEub25zdWNjZXNzPShldik9PntcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgY29uc29sZS5kZWJ1ZyhcImFuZCBvcGVuZWQgYWdhaW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIHN1YnNjcmliZXIubmV4dChvcGFScS5yZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBvcGFScS5vbmVycm9yID0gKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IG9wZW4gaW5kZXhlZCBkYXRhYmFzZTogXCIgKyBTcHJEYi5kYk5hbWUgKyBcIjogXCIgKyBlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChkYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBvci5vbmVycm9yID0gKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IG9wZW4gaW5kZXhlZCBkYXRhYmFzZTogXCIgKyBTcHJEYi5kYk5hbWUgKyBcIjogXCIgKyBlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IGluZGV4ZWQgZGF0YWJhc2VzXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBvYnM7XHJcbiAgICB9XHJcbn1cclxuIl19
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvZGIvaW5kZGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDOztBQUdoQyxNQUFNLE9BQU8sSUFBSTtJQUtiLFlBQVksZUFBc0IsRUFBQyxRQUFzQjtRQUNyRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUMsZUFBZSxDQUFBO1FBQ3JDLElBQUksQ0FBQyxTQUFTLEdBQUMsUUFBUSxDQUFBO0lBQzNCLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDaEIsT0FBUSxJQUFJLENBQUMsZ0JBQWdCLENBQUE7SUFDaEMsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQTtJQUN6QixDQUFDO0NBQ0o7QUFHRCxNQUFNLE9BQU8sS0FBSzthQUVBLFdBQU0sR0FBQyxnQkFBZ0IsQUFBakIsQ0FBaUI7YUFFdkIsMkNBQXNDLEdBQUMsdUJBQXVCLEFBQXhCLENBQXlCO0lBQzVFLDBFQUEwRTthQUM3RCxjQUFTLEdBQUMsQ0FBQyxBQUFGLENBQUc7SUFHMUI7UUFEUSxXQUFNLEdBQWtCLElBQUksQ0FBQTtJQUVwQyxDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVk7UUFDaEIsSUFBSSxLQUFLLEdBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUVyQixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBSUQsTUFBTSxDQUFDLE9BQU87UUFDVixJQUFJLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBYyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBRTdDLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtZQUMzQyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNa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Q0FBQyw0Q0FBNEMsQ0FBQyxDQUFBO2dCQUMxRCxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkIsQ0FBQztRQUNULENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDOzhHQTlHUSxLQUFLO2tIQUFMLEtBQUs7OzJGQUFMLEtBQUs7a0JBRGpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSBcInJ4anNcIjtcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgU3luY3tcclxuICAgIGlkPzpudW1iZXI7XHJcbiAgICBfb2JqZWN0U3RvcmVOYW1lOnN0cmluZztcclxuICAgIF9vYmplY3RJZDpzdHJpbmd8bnVtYmVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKG9iamVjdFN0b3JlTmFtZTpzdHJpbmcsb2JqZWN0SWQ6c3RyaW5nfG51bWJlcil7XHJcbiAgICAgICAgdGhpcy5fb2JqZWN0U3RvcmVOYW1lPW9iamVjdFN0b3JlTmFtZVxyXG4gICAgICAgIHRoaXMuX29iamVjdElkPW9iamVjdElkXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG9iamVjdFN0b3JlTmFtZSgpOnN0cmluZ3tcclxuICAgICAgIHJldHVybiAgdGhpcy5fb2JqZWN0U3RvcmVOYW1lXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG9iamVjdElkKCk6c3RyaW5nfG51bWJlcntcclxuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0SWRcclxuICAgIH1cclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU3ByRGIge1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZGJOYW1lPSdzcGVlY2hyZWNvcmRlcidcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFJFQ09SRElOR19GSUxFX0NBQ0hFX09CSkVDVF9TVE9SRV9OQU1FPSdfcmVjb3JkaW5nX2ZpbGVfY2FjaGUnO1xyXG4gICAgIC8vcHVibGljIHN0YXRpYyBSRUNPUkRJTkdfRklMRV9DSFVOS1NfT0JKRUNUX1NUT1JFX05BTUU9J3JlY19maWxlX2NodW5rcyc7XHJcbiAgICBwdWJsaWMgc3RhdGljIGRiVmVyc2lvbj0xO1xyXG5cclxuICAgIHByaXZhdGUgX3N0b3JlOklEQkRhdGFiYXNlfG51bGw9bnVsbFxyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc3ByRGJGYWN0b3J5KCk6U3ByRGJ7XHJcbiAgICAgICBsZXQgc3ByRGI9bmV3IFNwckRiKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBzcHJEYjtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIHN0YXRpYyBwcmVwYXJlKCk6T2JzZXJ2YWJsZTxJREJEYXRhYmFzZT4ge1xyXG4gICAgICAgIGxldCBvYnMgPSBuZXcgT2JzZXJ2YWJsZTxJREJEYXRhYmFzZT4oKHN1YnNjcmliZXIpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJQcmVwYXJlIGluZGV4ZWQgZGF0YWJhc2UuLi5cIilcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleGVkREIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb3I6IElEQk9wZW5EQlJlcXVlc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgb3IgPSBpbmRleGVkREIub3BlbihTcHJEYi5kYk5hbWUsIFNwckRiLmRiVmVyc2lvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgb3Iub251cGdyYWRlbmVlZGVkID0gKGV2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYiA9IG9yLnJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdHI9b3IudHJhbnNhY3Rpb25cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmICghZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhTcHJEYi5SRUNPUkRJTkdfRklMRV9DQUNIRV9PQkpFQ1RfU1RPUkVfTkFNRSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoU3ByRGIuUkVDT1JESU5HX0ZJTEVfQ0FDSEVfT0JKRUNUX1NUT1JFX05BTUUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBGdXR1cmUgd29yayB0b3dhcmRzIGEgY29tcGxldGUgUFdBIHdoaWNoIHN0b3JlcyBhbGwgY2xpZW4gZGF0YSBpbiBpbmRleGVkIGRiIGFuZCBzeW5jaHJvbml6ZXMgdG8gdGhlIHNlcnZlcjogU2VlIGV4cGVyaW1lbnRhbCBHaXQgYnJhbmNoIFwicHJvZ3Jlc3NpdmVfd2ViX2FwcFwiXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoJ19zeW5jJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdfc3luYycsIHtrZXlQYXRoOiAnaWQnLCBhdXRvSW5jcmVtZW50OnRydWV9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoJ3Byb2plY3QnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3Byb2plY3QnLCB7a2V5UGF0aDogJ25hbWUnfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKCdzZXNzaW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGxldCBzZXNzU3RvcmU9ZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3Nlc3Npb24nLCB7a2V5UGF0aDogJ3Nlc3Npb25JZCd9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHNlc3NTdG9yZS5jcmVhdGVJbmRleCgncHJvamVjdElkeCcsIFsncHJvamVjdCddLCB7dW5pcXVlOmZhbHNlfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1lbHNlIGlmKGV2Lm9sZFZlcnNpb248NSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBsZXQgc2Vzc1N0b3JlPXRyLm9iamVjdFN0b3JlKCdzZXNzaW9uJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgc2Vzc1N0b3JlLmNyZWF0ZUluZGV4KCdwcm9qZWN0SWR4JywgWydwcm9qZWN0J10sIHt1bmlxdWU6ZmFsc2V9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoJ3NjcmlwdCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBsZXQgc2NyU3RvcmU9ZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3NjcmlwdCcsIHtrZXlQYXRoOiAnc2NyaXB0SWQnfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBzY3JTdG9yZS5jcmVhdGVJbmRleCgncHJvamVjdElkeCcsIFsncHJvamVjdCddLCB7dW5pcXVlOmZhbHNlfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKCdyZWNmaWxlJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGxldCByZlN0b3JlPWRiLmNyZWF0ZU9iamVjdFN0b3JlKCdyZWNmaWxlJywge2tleVBhdGg6ICd1dWlkJ30pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmZTdG9yZS5jcmVhdGVJbmRleCgnc2Vzc0lkSWR4JywgWydzZXNzaW9uSWQnXSwge3VuaXF1ZTpmYWxzZX0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmZTdG9yZS5jcmVhdGVJbmRleCgnc2Vzc0lkSXRlbWNvZGVJZHgnLCBbJ3Nlc3Npb25JZCcsJ2l0ZW1Db2RlJ10sIHt1bmlxdWU6ZmFsc2V9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKFNwckRiLlJFQ09SRElOR19GSUxFX0NBQ0hFX09CSkVDVF9TVE9SRV9OQU1FKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJmU3RvcmU9ZGIuY3JlYXRlT2JqZWN0U3RvcmUoU3ByRGIuUkVDT1JESU5HX0ZJTEVfQ0FDSEVfT0JKRUNUX1NUT1JFX05BTUUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldi5vbGRWZXJzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJVcGdyYWRlZCBpbmRleGVkIGRhdGFiYXNlIFwiICsgU3ByRGIuZGJOYW1lICsgXCIgc2NoZW1hIGZyb20gdmVyc2lvbiBcIiArIGV2Lm9sZFZlcnNpb24gKyBcIiB0byBcIiArIGV2Lm5ld1ZlcnNpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJDcmVhdGVkIGluZGV4ZWQgZGF0YWJhc2UgXCIgKyBTcHJEYi5kYk5hbWUgKyBcIiBzY2hlbWEgdmVyc2lvbiBcIiArIGV2Lm5ld1ZlcnNpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgb3Iub25zdWNjZXNzID0gKGV2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIk9wZW5lZCBpbmRleGVkIGRhdGFiYXNlXCIpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGRiPW9yLnJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgLy8gaVBhZCBXRWJLaXQgd29ya2Fyb3VuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gZG9lcyBub3QgaGVscCFcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgZGIub25jbG9zZT0oZXYpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgY29uc29sZS5kZWJ1ZyhcIkRCIGNsb3NlZC4uLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUuZGVidWcoXCJDbG9zZSBkYi5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIGRiLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBsZXQgb3BhUnE9aW5kZXhlZERCLm9wZW4oU3ByRGIuZGJOYW1lLCBTcHJEYi5kYlZlcnNpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gb3BhUnEub251cGdyYWRlbmVlZGVkPShldik9Pnt9XHJcbiAgICAgICAgICAgICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gb3BhUnEub25zdWNjZXNzPShldik9PntcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgY29uc29sZS5kZWJ1ZyhcImFuZCBvcGVuZWQgYWdhaW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIHN1YnNjcmliZXIubmV4dChvcGFScS5yZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBvcGFScS5vbmVycm9yID0gKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IG9wZW4gaW5kZXhlZCBkYXRhYmFzZTogXCIgKyBTcHJEYi5kYk5hbWUgKyBcIjogXCIgKyBlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChkYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBvci5vbmVycm9yID0gKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IG9wZW4gaW5kZXhlZCBkYXRhYmFzZTogXCIgKyBTcHJEYi5kYk5hbWUgKyBcIjogXCIgKyBlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IGluZGV4ZWQgZGF0YWJhc2VzXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBvYnM7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -45,4 +45,4 @@ export class DSPUtils {
45
45
  return ml;
46
46
  }
47
47
  }
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvZHNwL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNJLE1BQU0sT0FBTyxRQUFRO2FBRUYsa0JBQWEsR0FBVyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUUxRTs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFtQjtRQUN6QyxJQUFJLFdBQVcsR0FBRyxDQUFDLEVBQUU7WUFDakIsTUFBTSxJQUFJLFVBQVUsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQ25FO1FBRUQsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFHTSxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQWU7UUFDdkMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLGdCQUFnQixDQUFDLFdBQW1CO1FBQzlDLElBQUksV0FBVyxHQUFHLENBQUMsRUFBRTtZQUNqQixNQUFNLElBQUksVUFBVSxDQUFDLHlDQUF5QyxDQUFDLENBQUM7U0FDbkU7UUFDRCxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVNLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFlO1FBQzVDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFVO1FBQzlCLE9BQU8sUUFBUSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVNLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBd0I7UUFDM0MsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQ2IsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUN4RCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNyQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDUjthQUNGO1NBQ0Y7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuICAgIGV4cG9ydCBjbGFzcyBEU1BVdGlscyB7XHJcblxyXG4gICAgICAgIHByaXZhdGUgc3RhdGljIE9DVEFWRV9GQUNUT1I6IG51bWJlciA9IDEuMCAvIChNYXRoLmxvZygyKSAvIE1hdGgubG9nKDEwKSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEdldCBub3JtYWxpemVkIGFtcGxpdHVkZSBsZXZlbCBpbiBkQlxyXG4gICAgICAgICAqIEBwYXJhbSBsaW5lYXJMZXZlbCBhIG5vcm1hbGl6ZWQgcG9zaXRpdmUgbGluZWFyIGxldmVsICgxLjAgY29ycmVzcG9uZHMgdG8gMGRCKVxyXG4gICAgICAgICAqIEByZXR1cm4gbGV2ZWwgaW4gZEJcclxuICAgICAgICAgKi9cclxuICAgICAgICBwdWJsaWMgc3RhdGljIHRvTGV2ZWxJbkRCKGxpbmVhckxldmVsOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgICAgICBpZiAobGluZWFyTGV2ZWwgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTGluZWFyIGxldmVsIGFyZ3VtZW50IG11c3QgYmUgcG9zaXRpdmUuJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiAxMCAqIE1hdGgubG9nKGxpbmVhckxldmVsKSAvIE1hdGgubG9nKDEwKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBwdWJsaWMgc3RhdGljIHRvTGluZWFyTGV2ZWwoZGJMZXZlbDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGgucG93KDEwLCAoZGJMZXZlbCAvIDEwKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBHZXQgbm9ybWFsaXplZCBhbXBsaXR1ZGUgcG93ZXIgbGV2ZWwgaW4gZEJcclxuICAgICAgICAgKiBAcGFyYW0gbGluZWFyTGV2ZWwgYSBub3JtYWxpemVkIHBvc2l0aXZlIGxpbmVhciBsZXZlbCAoMS4wIGNvcnJlc3BvbmRzIHRvIDBkQilcclxuICAgICAgICAgKiBAcmV0dXJuIHBvd2VyIGxldmVsIGluIGRCXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcHVibGljIHN0YXRpYyB0b1Bvd2VyTGV2ZWxJbkRCKGxpbmVhckxldmVsOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgICAgICBpZiAobGluZWFyTGV2ZWwgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTGluZWFyIGxldmVsIGFyZ3VtZW50IG11c3QgYmUgcG9zaXRpdmUuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDIwICogTWF0aC5sb2cobGluZWFyTGV2ZWwpIC8gTWF0aC5sb2coMTApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHVibGljIHN0YXRpYyB0b1Bvd2VyTGluZWFyTGV2ZWwoZGJMZXZlbDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGgucG93KDEwLCAoZGJMZXZlbCAvIDIwKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwdWJsaWMgc3RhdGljIHRvT2N0YXZlcyhmcTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICAgICAgcmV0dXJuIERTUFV0aWxzLk9DVEFWRV9GQUNUT1IgKiBNYXRoLmxvZyhmcSkgLyBNYXRoLmxvZygxMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwdWJsaWMgc3RhdGljIG1heExldmVsKGF1ZGlvQnVmZmVyOiBBdWRpb0J1ZmZlcik6IG51bWJlciB7XHJcbiAgICAgICAgICAgIGxldCBtbCA9IDAuMDtcclxuICAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGF1ZGlvQnVmZmVyLm51bWJlck9mQ2hhbm5lbHM7IGNoKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBjaEFyciA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKGNoKTtcclxuICAgICAgICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IGNoQXJyLmxlbmd0aDsgcysrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsID0gTWF0aC5hYnMoY2hBcnJbc10pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGwgPiBtbCkge1xyXG4gICAgICAgICAgICAgICAgICBtbCA9IGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBtbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4iXX0=
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvZHNwL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNJLE1BQU0sT0FBTyxRQUFRO2FBRUYsa0JBQWEsR0FBVyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUUxRTs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFtQjtRQUN6QyxJQUFJLFdBQVcsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUksVUFBVSxDQUFDLHlDQUF5QyxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUVELE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBR00sTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFlO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFtQjtRQUM5QyxJQUFJLFdBQVcsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUksVUFBVSxDQUFDLHlDQUF5QyxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUNELE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU0sTUFBTSxDQUFDLGtCQUFrQixDQUFDLE9BQWU7UUFDNUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTSxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQVU7UUFDOUIsT0FBTyxRQUFRLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUF3QjtRQUMzQyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFDYixLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDekQsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN0QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztvQkFDWCxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNULENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG4gICAgZXhwb3J0IGNsYXNzIERTUFV0aWxzIHtcclxuXHJcbiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgT0NUQVZFX0ZBQ1RPUjogbnVtYmVyID0gMS4wIC8gKE1hdGgubG9nKDIpIC8gTWF0aC5sb2coMTApKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogR2V0IG5vcm1hbGl6ZWQgYW1wbGl0dWRlIGxldmVsIGluIGRCXHJcbiAgICAgICAgICogQHBhcmFtIGxpbmVhckxldmVsIGEgbm9ybWFsaXplZCBwb3NpdGl2ZSBsaW5lYXIgbGV2ZWwgKDEuMCBjb3JyZXNwb25kcyB0byAwZEIpXHJcbiAgICAgICAgICogQHJldHVybiBsZXZlbCBpbiBkQlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgdG9MZXZlbEluREIobGluZWFyTGV2ZWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgICAgIGlmIChsaW5lYXJMZXZlbCA8IDApIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdMaW5lYXIgbGV2ZWwgYXJndW1lbnQgbXVzdCBiZSBwb3NpdGl2ZS4nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIDEwICogTWF0aC5sb2cobGluZWFyTGV2ZWwpIC8gTWF0aC5sb2coMTApO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgdG9MaW5lYXJMZXZlbChkYkxldmVsOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5wb3coMTAsIChkYkxldmVsIC8gMTApKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEdldCBub3JtYWxpemVkIGFtcGxpdHVkZSBwb3dlciBsZXZlbCBpbiBkQlxyXG4gICAgICAgICAqIEBwYXJhbSBsaW5lYXJMZXZlbCBhIG5vcm1hbGl6ZWQgcG9zaXRpdmUgbGluZWFyIGxldmVsICgxLjAgY29ycmVzcG9uZHMgdG8gMGRCKVxyXG4gICAgICAgICAqIEByZXR1cm4gcG93ZXIgbGV2ZWwgaW4gZEJcclxuICAgICAgICAgKi9cclxuICAgICAgICBwdWJsaWMgc3RhdGljIHRvUG93ZXJMZXZlbEluREIobGluZWFyTGV2ZWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgICAgIGlmIChsaW5lYXJMZXZlbCA8IDApIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdMaW5lYXIgbGV2ZWwgYXJndW1lbnQgbXVzdCBiZSBwb3NpdGl2ZS4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMjAgKiBNYXRoLmxvZyhsaW5lYXJMZXZlbCkgLyBNYXRoLmxvZygxMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwdWJsaWMgc3RhdGljIHRvUG93ZXJMaW5lYXJMZXZlbChkYkxldmVsOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5wb3coMTAsIChkYkxldmVsIC8gMjApKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgdG9PY3RhdmVzKGZxOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgICAgICByZXR1cm4gRFNQVXRpbHMuT0NUQVZFX0ZBQ1RPUiAqIE1hdGgubG9nKGZxKSAvIE1hdGgubG9nKDEwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgbWF4TGV2ZWwoYXVkaW9CdWZmZXI6IEF1ZGlvQnVmZmVyKTogbnVtYmVyIHtcclxuICAgICAgICAgICAgbGV0IG1sID0gMC4wO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgYXVkaW9CdWZmZXIubnVtYmVyT2ZDaGFubmVsczsgY2grKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNoQXJyID0gYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2gpO1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgY2hBcnIubGVuZ3RoOyBzKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGwgPSBNYXRoLmFicyhjaEFycltzXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobCA+IG1sKSB7XHJcbiAgICAgICAgICAgICAgICAgIG1sID0gbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG1sO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbiJdfQ==