speechrecorderng 3.4.4 → 3.6.0

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 (67) hide show
  1. package/README.md +1 -1
  2. package/esm2020/lib/action/action.mjs +3 -3
  3. package/esm2020/lib/audio/audio_display.mjs +7 -9
  4. package/esm2020/lib/audio/audio_player.mjs +13 -26
  5. package/esm2020/lib/audio/capture/capture.mjs +244 -207
  6. package/esm2020/lib/audio/context.mjs +64 -2
  7. package/esm2020/lib/audio/io/stream.mjs +1 -1
  8. package/esm2020/lib/audio/net_audio_buffer.mjs +5 -9
  9. package/esm2020/lib/audio/playback/array_audio_buffer_source_node.mjs +2 -2
  10. package/esm2020/lib/audio/playback/audio_source_worklet_module_loader.mjs +2 -2
  11. package/esm2020/lib/audio/playback/inddb_audio_buffer_source_node.mjs +1 -1
  12. package/esm2020/lib/audio/playback/player.mjs +137 -96
  13. package/esm2020/lib/audio/ui/audio_display_control.mjs +1 -1
  14. package/esm2020/lib/audio/ui/container.mjs +3 -3
  15. package/esm2020/lib/db/inddb.mjs +1 -1
  16. package/esm2020/lib/net/uploader.mjs +31 -28
  17. package/esm2020/lib/speechrecorder/project/project.mjs +1 -1
  18. package/esm2020/lib/speechrecorder/project/project.service.mjs +4 -4
  19. package/esm2020/lib/speechrecorder/recordings/basic_recording.service.mjs +59 -56
  20. package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +151 -142
  21. package/esm2020/lib/speechrecorder/script/script.service.mjs +1 -1
  22. package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +49 -99
  23. package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +9 -2
  24. package/esm2020/lib/speechrecorder/session/controlpanel.mjs +13 -11
  25. package/esm2020/lib/speechrecorder/session/progress.mjs +1 -1
  26. package/esm2020/lib/speechrecorder/session/prompting.mjs +1 -1
  27. package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +1 -1
  28. package/esm2020/lib/speechrecorder/session/recording_list.mjs +1 -1
  29. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +3 -3
  30. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +3 -3
  31. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +17 -16
  32. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +13 -14
  33. package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +145 -135
  34. package/esm2020/lib/speechrecorder/session/session.service.mjs +12 -9
  35. package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +66 -70
  36. package/esm2020/lib/speechrecorder/startstopsignal/startstopsignal.mjs +1 -2
  37. package/esm2020/lib/speechrecorderng.component.mjs +10 -16
  38. package/esm2020/lib/speechrecorderng.module.mjs +1 -1
  39. package/esm2020/lib/spr.module.version.mjs +2 -2
  40. package/esm2020/lib/ui/recordingitem_display.mjs +2 -2
  41. package/fesm2015/speechrecorderng.mjs +1077 -976
  42. package/fesm2015/speechrecorderng.mjs.map +1 -1
  43. package/fesm2020/speechrecorderng.mjs +1074 -976
  44. package/fesm2020/speechrecorderng.mjs.map +1 -1
  45. package/lib/action/action.d.ts +1 -1
  46. package/lib/audio/audio_display.d.ts +1 -3
  47. package/lib/audio/audio_player.d.ts +0 -1
  48. package/lib/audio/capture/capture.d.ts +5 -4
  49. package/lib/audio/context.d.ts +2 -0
  50. package/lib/audio/io/stream.d.ts +1 -1
  51. package/lib/audio/net_audio_buffer.d.ts +2 -4
  52. package/lib/audio/playback/player.d.ts +3 -2
  53. package/lib/net/uploader.d.ts +6 -6
  54. package/lib/speechrecorder/project/project.d.ts +1 -0
  55. package/lib/speechrecorder/project/project.service.d.ts +4 -4
  56. package/lib/speechrecorder/recordings/basic_recording.service.d.ts +2 -2
  57. package/lib/speechrecorder/recordings/recordings.service.d.ts +8 -8
  58. package/lib/speechrecorder/script/script.service.d.ts +2 -2
  59. package/lib/speechrecorder/session/audiorecorder.d.ts +1 -2
  60. package/lib/speechrecorder/session/basicrecorder.d.ts +4 -1
  61. package/lib/speechrecorder/session/controlpanel.d.ts +1 -1
  62. package/lib/speechrecorder/session/recordingfile/recording-file-meta.component.d.ts +1 -0
  63. package/lib/speechrecorder/session/recordingfile/recordingfile-service.d.ts +2 -2
  64. package/lib/speechrecorder/session/session.service.d.ts +2 -2
  65. package/lib/speechrecorder/session/sessionmanager.d.ts +1 -0
  66. package/lib/spr.module.version.d.ts +1 -1
  67. package/package.json +1 -1
@@ -7,6 +7,7 @@ import { IndexedDbAudioBufferSourceNode } from "./inddb_audio_buffer_source_node
7
7
  import { NetAudioBuffer } from "../net_audio_buffer";
8
8
  import { NetAudioBufferSourceNode } from "./net_audio_buffer_source_node";
9
9
  import { AudioBufferSource } from "../audio_data_holder";
10
+ import { AudioContextProvider } from "../context";
10
11
  export var EventType;
11
12
  (function (EventType) {
12
13
  EventType[EventType["CLOSED"] = 0] = "CLOSED";
@@ -30,8 +31,9 @@ export class AudioPlayerEvent {
30
31
  }
31
32
  }
32
33
  export class AudioPlayer {
33
- constructor(context, listener) {
34
+ constructor(listener) {
34
35
  this.running = false;
36
+ this.context = null;
35
37
  this.ready = false;
36
38
  this._audioClip = null;
37
39
  this._audioSource = null;
@@ -39,7 +41,6 @@ export class AudioPlayer {
39
41
  this.sourceAudioWorkletNode = null;
40
42
  this.playStartTime = null;
41
43
  this.timerVar = null;
42
- this.context = context;
43
44
  this.listener = listener;
44
45
  this.bufSize = AudioPlayer.DEFAULT_BUFSIZE;
45
46
  this.n = navigator;
@@ -56,15 +57,23 @@ export class AudioPlayer {
56
57
  this._stopAction = new Action('Stop');
57
58
  this._stopAction.disabled = true;
58
59
  this._stopAction.onAction = () => this.stop();
59
- this.context.addEventListener('statechange', (ev) => {
60
- if (this.context.state !== 'running') {
61
- this.stop();
62
- }
63
- });
64
60
  }
65
61
  get autoPlayOnSelectToggleAction() {
66
62
  return this._autoPlayOnSelectToggleAction;
67
63
  }
64
+ _audioContext() {
65
+ if (!this.context) {
66
+ this.context = AudioContextProvider.audioContextInstance();
67
+ if (this.context) {
68
+ this.context.addEventListener('statechange', (ev) => {
69
+ if (this.context && this.context.state !== 'running') {
70
+ this.stop();
71
+ }
72
+ });
73
+ }
74
+ }
75
+ return this.context;
76
+ }
68
77
  get startAction() {
69
78
  return this._startAction;
70
79
  }
@@ -83,9 +92,9 @@ export class AudioPlayer {
83
92
  chs = audioDataHolder.numberOfChannels;
84
93
  if (chs > 0) {
85
94
  length = audioDataHolder.frameLen;
86
- if (chs > this.context.destination.maxChannelCount) {
87
- // TODO exception
88
- }
95
+ //if (chs > this.context.destination.maxChannelCount) {
96
+ // // TODO exception
97
+ //}
89
98
  }
90
99
  this.audioSource = audioDataHolder.audioSource;
91
100
  audioClip.addSelectionObserver((ac) => {
@@ -105,16 +114,11 @@ export class AudioPlayer {
105
114
  set audioSource(value) {
106
115
  this.stop();
107
116
  this._audioSource = value;
108
- if (this._audioSource && this.context) {
109
- if (this._audioSource instanceof AudioBufferSource) {
110
- this.ready = true;
111
- this.updateStartActions();
112
- if (this.listener) {
113
- this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.READY));
114
- }
115
- }
116
- else {
117
- this._loadSourceWorkletAndInitStart();
117
+ if (this._audioSource) {
118
+ this.ready = true;
119
+ this.updateStartActions();
120
+ if (this.listener) {
121
+ this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.READY));
118
122
  }
119
123
  }
120
124
  else {
@@ -126,24 +130,27 @@ export class AudioPlayer {
126
130
  }
127
131
  }
128
132
  _loadSourceWorkletAndInitStart() {
129
- AudioSourceWorkletModuleLoader.loadModule(this.context).then(() => {
130
- //console.debug("Player ready. ( by Player::_loadSourceWorkletAndInitStart()");
131
- this.ready = true;
132
- this.updateStartActions();
133
- if (this.listener) {
134
- this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.READY));
135
- }
136
- }).catch((error) => {
137
- this.ready = false;
138
- this.updateStartActions();
139
- if (this.listener) {
140
- this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.CLOSED));
141
- }
142
- console.error('Could not add module ' + error);
143
- });
133
+ if (this.context) {
134
+ AudioSourceWorkletModuleLoader.loadModule(this.context).then(() => {
135
+ //console.debug("Player ready. ( by Player::_loadSourceWorkletAndInitStart()");
136
+ this.ready = true;
137
+ this.updateStartActions();
138
+ if (this.listener) {
139
+ this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.READY));
140
+ }
141
+ }).catch((error) => {
142
+ this.ready = false;
143
+ this.updateStartActions();
144
+ if (this.listener) {
145
+ this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.CLOSED));
146
+ }
147
+ console.error('Could not add module ' + error);
148
+ });
149
+ }
144
150
  }
145
151
  _startAudioSourceWorkletNode() {
146
- if (this.sourceAudioWorkletNode) {
152
+ this._loadSourceWorkletAndInitStart();
153
+ if (this.context && this.sourceAudioWorkletNode) {
147
154
  this.sourceAudioWorkletNode.onprocessorerror = (ev) => {
148
155
  let msg = 'Unknwon error';
149
156
  if (ev instanceof ErrorEvent) {
@@ -170,16 +177,25 @@ export class AudioPlayer {
170
177
  }
171
178
  }
172
179
  start() {
173
- if (!this._startAction.disabled && !this.running) {
174
- if (this.context.state !== 'running') {
175
- this.context.resume().then(() => {
180
+ this._audioContext();
181
+ if (this.context) {
182
+ if (!this._startAction.disabled && !this.running) {
183
+ if (this.context.state === 'suspended') {
184
+ this.context.resume().then(() => {
185
+ this._start();
186
+ }).catch((reason) => {
187
+ console.error(reason.message());
188
+ throw reason;
189
+ });
190
+ }
191
+ else if (this.context.state === 'closed') {
192
+ const msg = 'Error: Cannot start playback. Audio context is already closed!';
193
+ console.error(msg);
194
+ throw new Error(msg);
195
+ }
196
+ else {
176
197
  this._start();
177
- }).catch((reason) => {
178
- console.error('Could not resume audio context: ' + reason);
179
- });
180
- }
181
- else {
182
- this._start();
198
+ }
183
199
  }
184
200
  }
185
201
  }
@@ -204,9 +220,12 @@ export class AudioPlayer {
204
220
  }
205
221
  }
206
222
  startSelectionDisabled() {
207
- return !(this._audioClip && this.context && !this.startAction.disabled && this._audioClip.selection);
223
+ return !(this._audioClip && !this.startAction.disabled && this._audioClip.selection);
208
224
  }
209
225
  _start(playSelection = false) {
226
+ if (!this.context) {
227
+ throw new Error("Could not get audio context!");
228
+ }
210
229
  if (this._audioSource instanceof AudioBufferSource) {
211
230
  this.sourceBufferNode = this.context.createBufferSource();
212
231
  this.sourceBufferNode.buffer = this._audioSource.audioBuffer;
@@ -237,68 +256,90 @@ export class AudioPlayer {
237
256
  }
238
257
  }
239
258
  else if (this._audioSource instanceof ArrayAudioBuffer || this._audioSource instanceof IndexedDbAudioBuffer || this._audioSource instanceof NetAudioBuffer) {
240
- this.playStartTime = null;
241
- if (this._audioSource instanceof ArrayAudioBuffer) {
242
- const aabsn = new ArrayAudioBufferSourceNode(this.context);
243
- aabsn.arrayAudioBuffer = this._audioSource;
244
- this.sourceAudioWorkletNode = aabsn;
245
- }
246
- else if (this._audioSource instanceof IndexedDbAudioBuffer) {
247
- const iasn = new IndexedDbAudioBufferSourceNode(this.context);
248
- iasn.inddbAudioBuffer = this._audioSource;
249
- this.sourceAudioWorkletNode = iasn;
250
- }
251
- else if (this._audioSource instanceof NetAudioBuffer) {
252
- const nabsn = new NetAudioBufferSourceNode(this.context);
253
- nabsn.netAudioBuffer = this._audioSource;
254
- this.sourceAudioWorkletNode = nabsn;
255
- }
256
- if (this.sourceAudioWorkletNode) {
257
- this.sourceAudioWorkletNode.onprocessorerror = (ev) => {
258
- let msg = 'Unknwon error';
259
- if (ev instanceof ErrorEvent) {
260
- msg = ev.message;
259
+ AudioSourceWorkletModuleLoader.loadModule(this.context).then(() => {
260
+ this.playStartTime = null;
261
+ if (this.context) {
262
+ if (this._audioSource instanceof ArrayAudioBuffer) {
263
+ const aabsn = new ArrayAudioBufferSourceNode(this.context);
264
+ aabsn.arrayAudioBuffer = this._audioSource;
265
+ this.sourceAudioWorkletNode = aabsn;
261
266
  }
262
- console.error("Audio source worklet error: " + msg);
263
- if (this.listener) {
264
- this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.ERROR));
267
+ else if (this._audioSource instanceof IndexedDbAudioBuffer) {
268
+ const iasn = new IndexedDbAudioBufferSourceNode(this.context);
269
+ iasn.inddbAudioBuffer = this._audioSource;
270
+ this.sourceAudioWorkletNode = iasn;
271
+ }
272
+ else if (this._audioSource instanceof NetAudioBuffer) {
273
+ const nabsn = new NetAudioBufferSourceNode(this.context);
274
+ nabsn.netAudioBuffer = this._audioSource;
275
+ this.sourceAudioWorkletNode = nabsn;
276
+ }
277
+ if (this.sourceAudioWorkletNode) {
278
+ this.sourceAudioWorkletNode.onprocessorerror = (ev) => {
279
+ let msg = 'Unknwon error';
280
+ if (ev instanceof ErrorEvent) {
281
+ msg = ev.message;
282
+ }
283
+ console.error("Audio source worklet error: " + msg);
284
+ if (this.listener) {
285
+ this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.ERROR));
286
+ }
287
+ };
288
+ this.sourceAudioWorkletNode.connect(this.context.destination); // this already starts playing
289
+ this.sourceAudioWorkletNode.onended = () => this.onended();
290
+ this.running = true;
291
+ const ac = this._audioClip;
292
+ let offset = 0;
293
+ if (playSelection && ac && ac.selection) {
294
+ const s = ac.selection;
295
+ const sr = ac.audioDataHolder.sampleRate;
296
+ offset = s.leftFrame / sr;
297
+ const stopPosInsecs = s.rightFrame / sr;
298
+ const dur = stopPosInsecs - offset;
299
+ this.sourceAudioWorkletNode.start(0, offset, dur);
300
+ }
301
+ else {
302
+ this.sourceAudioWorkletNode.start();
303
+ }
304
+ //this.playStartTime = this.context.currentTime - offset;
305
+ this._startAction.disabled = true;
306
+ this._startSelectionAction.disabled = true;
307
+ this._stopAction.disabled = false;
308
+ if (this.listener) {
309
+ this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.STARTED));
310
+ }
265
311
  }
266
- };
267
- this.sourceAudioWorkletNode.connect(this.context.destination); // this already starts playing
268
- this.sourceAudioWorkletNode.onended = () => this.onended();
269
- this.running = true;
270
- const ac = this._audioClip;
271
- let offset = 0;
272
- if (playSelection && ac && ac.selection) {
273
- const s = ac.selection;
274
- const sr = ac.audioDataHolder.sampleRate;
275
- offset = s.leftFrame / sr;
276
- const stopPosInsecs = s.rightFrame / sr;
277
- const dur = stopPosInsecs - offset;
278
- this.sourceAudioWorkletNode.start(0, offset, dur);
279
- }
280
- else {
281
- this.sourceAudioWorkletNode.start();
282
312
  }
283
- //this.playStartTime = this.context.currentTime - offset;
284
- this._startAction.disabled = true;
285
- this._startSelectionAction.disabled = true;
286
- this._stopAction.disabled = false;
313
+ }).catch((error) => {
314
+ console.error(error.message);
315
+ this.ready = false;
316
+ this.updateStartActions();
287
317
  if (this.listener) {
288
- this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.STARTED));
318
+ this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.CLOSED));
289
319
  }
290
- }
320
+ throw error;
321
+ });
291
322
  }
292
323
  }
293
324
  startSelected() {
325
+ this._audioContext();
326
+ if (!this.context) {
327
+ throw new Error("Could not get audio context!");
328
+ }
294
329
  if (!this._startAction.disabled && !this.running) {
295
- if (this.context.state !== 'running') {
330
+ if (this.context.state === 'suspended') {
296
331
  this.context.resume().then(() => {
297
332
  this._start(true);
298
333
  }).catch((reason) => {
299
- console.error('Could not resume audio context: ' + reason);
334
+ console.error(reason.message);
335
+ throw reason;
300
336
  });
301
337
  }
338
+ else if (this.context.state === 'closed') {
339
+ const msg = 'Error: Cannot start playback of selection. Audio context is already closed!';
340
+ console.error(msg);
341
+ throw new Error(msg);
342
+ }
302
343
  else {
303
344
  this._start(true);
304
345
  }
@@ -335,7 +376,7 @@ export class AudioPlayer {
335
376
  }
336
377
  get playPositionTime() {
337
378
  let ppt = null;
338
- if (this.playStartTime !== null) {
379
+ if (this.context && this.playStartTime !== null) {
339
380
  ppt = this.context.currentTime - this.playStartTime;
340
381
  }
341
382
  else if (this.sourceAudioWorkletNode) {
@@ -358,4 +399,4 @@ export class AudioPlayer {
358
399
  }
359
400
  }
360
401
  AudioPlayer.DEFAULT_BUFSIZE = 8192;
361
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL3BsYXliYWNrL3BsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFNUMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDNUUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDcEYsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFFaEYsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxpQkFBaUIsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBSWhFLE1BQU0sQ0FBTixJQUFhLFNBQWlFO0FBQTlFLFdBQWEsU0FBUztJQUFFLDZDQUFNLENBQUE7SUFBQywyQ0FBSyxDQUFBO0lBQUMsK0NBQU8sQ0FBQTtJQUFDLHFEQUFVLENBQUE7SUFBRSwrQ0FBTyxDQUFBO0lBQUUsMkNBQUssQ0FBQTtJQUFDLDJDQUFLLENBQUE7QUFBQSxDQUFDLEVBQWpFLFNBQVMsS0FBVCxTQUFTLFFBQXdEO0FBRTlFLE1BQU0sT0FBTyxnQkFBZ0I7SUFLekIsWUFBWSxJQUFjLEVBQUUsWUFBb0I7UUFDNUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksSUFB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SUFBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUM7WUFDbkMsR0FBRyxHQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQztTQUNsRDtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVILElBQUksa0JBQWtCO1FBQ3BCLElBQUksS0FBSyxHQUFhLElBQUksQ0FBQztRQUM1QixJQUFHLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEIsSUFBSSxFQUFFLEdBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7WUFDcEMsSUFBSSxFQUFFLEVBQUU7Z0JBQ04sSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUNuQyxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7b0JBQ25CLEtBQUssR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDO2lCQUNyQjthQUNGO1NBQ0Y7UUFDQSxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7O0FBcldlLDJCQUFlLEdBQVUsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSAnLi4vLi4vYWN0aW9uL2FjdGlvbidcclxuaW1wb3J0IHsgQXVkaW9DbGlwIH0gZnJvbSAnLi4vcGVyc2lzdG9yJ1xyXG5pbXBvcnQge0FycmF5QXVkaW9CdWZmZXJ9IGZyb20gXCIuLi9hcnJheV9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtBcnJheUF1ZGlvQnVmZmVyU291cmNlTm9kZX0gZnJvbSBcIi4vYXJyYXlfYXVkaW9fYnVmZmVyX3NvdXJjZV9ub2RlXCI7XHJcbmltcG9ydCB7SW5kZXhlZERiQXVkaW9CdWZmZXJ9IGZyb20gXCIuLi9pbmRkYl9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtBdWRpb1NvdXJjZVdvcmtsZXRNb2R1bGVMb2FkZXJ9IGZyb20gXCIuL2F1ZGlvX3NvdXJjZV93b3JrbGV0X21vZHVsZV9sb2FkZXJcIjtcclxuaW1wb3J0IHtJbmRleGVkRGJBdWRpb0J1ZmZlclNvdXJjZU5vZGV9IGZyb20gXCIuL2luZGRiX2F1ZGlvX2J1ZmZlcl9zb3VyY2Vfbm9kZVwiO1xyXG5pbXBvcnQge0F1ZGlvU291cmNlTm9kZX0gZnJvbSBcIi4vYXVkaW9fc291cmNlX25vZGVcIjtcclxuaW1wb3J0IHtOZXRBdWRpb0J1ZmZlcn0gZnJvbSBcIi4uL25ldF9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtOZXRBdWRpb0J1ZmZlclNvdXJjZU5vZGV9IGZyb20gXCIuL25ldF9hdWRpb19idWZmZXJfc291cmNlX25vZGVcIjtcclxuaW1wb3J0IHtBdWRpb0J1ZmZlclNvdXJjZSwgQXVkaW9Tb3VyY2V9IGZyb20gXCIuLi9hdWRpb19kYXRhX2hvbGRlclwiO1xyXG5cclxuXHJcblxyXG4gICAgZXhwb3J0IGVudW0gIEV2ZW50VHlwZSB7Q0xPU0VELFJFQURZLFNUQVJURUQsUE9TX1VQREFURSwgU1RPUFBFRCwgRU5ERUQsRVJST1J9XHJcblxyXG4gICAgZXhwb3J0IGNsYXNzIEF1ZGlvUGxheWVyRXZlbnR7XHJcblxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3R5cGU6RXZlbnRUeXBlO1xyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVQb3NpdGlvbjpudW1iZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGNvbnN0cnVjdG9yKHR5cGU6RXZlbnRUeXBlLCB0aW1lUG9zaXRpb24/Om51bWJlcikge1xyXG4gICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcclxuICAgICAgICAgICAgdGhpcy5fdGltZVBvc2l0aW9uID0gdGltZVBvc2l0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IHR5cGUoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IHRpbWVQb3NpdGlvbigpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVQb3NpdGlvbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBleHBvcnQgaW50ZXJmYWNlIEF1ZGlvUGxheWVyTGlzdGVuZXIge1xyXG4gICAgICAgIGF1ZGlvUGxheWVyVXBkYXRlKGU6QXVkaW9QbGF5ZXJFdmVudCk6dm9pZDtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgY2xhc3MgQXVkaW9QbGF5ZXIge1xyXG5cclxuICAgICAgICBnZXQgYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbigpOiBBY3Rpb248Ym9vbGVhbj4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHVibGljIHN0YXRpYyBERUZBVUxUX0JVRlNJWkU6bnVtYmVyID0gODE5MjtcclxuICAgICAgICBwcml2YXRlIHJ1bm5pbmc9ZmFsc2U7XHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfc3RhcnRBY3Rpb246QWN0aW9uPHZvaWQ+O1xyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3N0YXJ0U2VsZWN0aW9uQWN0aW9uOkFjdGlvbjx2b2lkPjtcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9hdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uOkFjdGlvbjxib29sZWFuPlxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3N0b3BBY3Rpb246QWN0aW9uPHZvaWQ+O1xyXG4gICAgICAgIGJ1ZlNpemU6bnVtYmVyO1xyXG4gICAgICAgIGNvbnRleHQ6QXVkaW9Db250ZXh0O1xyXG4gICAgICAgIHJlYWR5PWZhbHNlO1xyXG4gICAgICAgIGxpc3RlbmVyOkF1ZGlvUGxheWVyTGlzdGVuZXI7XHJcbiAgICAgICAgX2F1ZGlvQ2xpcDpBdWRpb0NsaXB8bnVsbD1udWxsO1xyXG4gICAgICAgIHByaXZhdGUgX2F1ZGlvU291cmNlOkF1ZGlvU291cmNlfG51bGw9bnVsbDtcclxuICAgICAgICBzb3VyY2VCdWZmZXJOb2RlOkF1ZGlvQnVmZmVyU291cmNlTm9kZXxudWxsPW51bGw7XHJcbiAgICAgICAgc291cmNlQXVkaW9Xb3JrbGV0Tm9kZTpBdWRpb1NvdXJjZU5vZGV8bnVsbD1udWxsO1xyXG5cclxuICAgICAgICBidWZmUG9zOm51bWJlcjtcclxuICAgICAgICBwcml2YXRlIHplcm9CdWZDbnQ6bnVtYmVyO1xyXG4gICAgICAgIG46YW55O1xyXG4gICAgICAgIHpiOkZsb2F0MzJBcnJheTtcclxuICAgICAgICBwcml2YXRlIHBsYXlTdGFydFRpbWU6bnVtYmVyfG51bGw9bnVsbDtcclxuXHJcbiAgICAgICAgcHJpdmF0ZSB0aW1lclZhcjpudW1iZXJ8bnVsbD1udWxsO1xyXG5cclxuICAgICAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OkF1ZGlvQ29udGV4dCwgbGlzdGVuZXI6QXVkaW9QbGF5ZXJMaXN0ZW5lcikge1xyXG4gICAgICAgICAgIHRoaXMuY29udGV4dD1jb250ZXh0O1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyPWxpc3RlbmVyO1xyXG4gICAgICAgICAgICB0aGlzLmJ1ZlNpemUgPSBBdWRpb1BsYXllci5ERUZBVUxUX0JVRlNJWkU7XHJcbiAgICAgICAgICAgIHRoaXMubj1uYXZpZ2F0b3I7XHJcbiAgICAgICAgICAgIHRoaXMuYnVmZlBvcz0wO1xyXG4gICAgICAgICAgICB0aGlzLnplcm9CdWZDbnQ9MDtcclxuICAgICAgICAgICAgdGhpcy56YiA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5idWZTaXplKTtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRBY3Rpb24gPSBuZXcgQWN0aW9uKCdTdGFydCcpO1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0QWN0aW9uLm9uQWN0aW9uID0gKCk9PnRoaXMuc3RhcnQoKTtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRTZWxlY3Rpb25BY3Rpb249bmV3IEFjdGlvbignU3RhcnQgc2VsZWN0ZWQnKVxyXG4gICAgICAgICAgICB0aGlzLl9zdGFydFNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZD10cnVlXHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0U2VsZWN0aW9uQWN0aW9uLm9uQWN0aW9uID0gKCk9PnRoaXMuc3RhcnRTZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9hdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uPW5ldyBBY3Rpb248Ym9vbGVhbj4oXCJBdXRvcGxheSBvbiBzZWxlY3RcIixmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0b3BBY3Rpb24gPSBuZXcgQWN0aW9uKCdTdG9wJyk7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0b3BBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9zdG9wQWN0aW9uLm9uQWN0aW9uID0gKCk9PnRoaXMuc3RvcCgpO1xyXG4gICAgICAgICAgdGhpcy5jb250ZXh0LmFkZEV2ZW50TGlzdGVuZXIoJ3N0YXRlY2hhbmdlJywgKGV2KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYodGhpcy5jb250ZXh0LnN0YXRlIT09J3J1bm5pbmcnKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBzdGFydEFjdGlvbigpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0QWN0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IHN0YXJ0U2VsZWN0aW9uQWN0aW9uKCl7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWxlY3Rpb25BY3Rpb25cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBzdG9wQWN0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RvcEFjdGlvbjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldCBhdWRpb0NsaXAoYXVkaW9DbGlwOkF1ZGlvQ2xpcHwgbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5fYXVkaW9DbGlwPWF1ZGlvQ2xpcFxyXG4gICAgICAgICAgICBsZXQgbGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgbGV0IGNocyA9IDA7XHJcbiAgICAgICAgICAgIGlmIChhdWRpb0NsaXAgJiYgYXVkaW9DbGlwLmF1ZGlvRGF0YUhvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGF1ZGlvRGF0YUhvbGRlcj1hdWRpb0NsaXAuYXVkaW9EYXRhSG9sZGVyO1xyXG4gICAgICAgICAgICAgICAgY2hzID0gYXVkaW9EYXRhSG9sZGVyLm51bWJlck9mQ2hhbm5lbHNcclxuICAgICAgICAgICAgICAgIGlmIChjaHMgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gYXVkaW9EYXRhSG9sZGVyLmZyYW1lTGVuO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaHMgPiB0aGlzLmNvbnRleHQuZGVzdGluYXRpb24ubWF4Q2hhbm5lbENvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gZXhjZXB0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hdWRpb1NvdXJjZT1hdWRpb0RhdGFIb2xkZXIuYXVkaW9Tb3VyY2U7XHJcblxyXG4gICAgICAgICAgICAgICAgYXVkaW9DbGlwLmFkZFNlbGVjdGlvbk9ic2VydmVyKChhYyk9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRTZWxlY3Rpb25BY3Rpb24uZGlzYWJsZWQgPSB0aGlzLnN0YXJ0U2VsZWN0aW9uRGlzYWJsZWQoKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zdGFydFNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZCAmJiB0aGlzLl9hdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0U2VsZWN0ZWQoKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXVkaW9Tb3VyY2U9bnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIGdldCBhdWRpb1NvdXJjZSgpOiBBdWRpb1NvdXJjZSB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdWRpb1NvdXJjZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2V0IGF1ZGlvU291cmNlKHZhbHVlOiBBdWRpb1NvdXJjZSB8IG51bGwpIHtcclxuICAgICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgICB0aGlzLl9hdWRpb1NvdXJjZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fYXVkaW9Tb3VyY2UgJiYgdGhpcy5jb250ZXh0KSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2F1ZGlvU291cmNlIGluc3RhbmNlb2YgQXVkaW9CdWZmZXJTb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVhZHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGFydEFjdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuYXVkaW9QbGF5ZXJVcGRhdGUobmV3IEF1ZGlvUGxheWVyRXZlbnQoRXZlbnRUeXBlLlJFQURZKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRTb3VyY2VXb3JrbGV0QW5kSW5pdFN0YXJ0KCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZWFkeSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhcnRBY3Rpb25zKCk7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuYXVkaW9QbGF5ZXJVcGRhdGUobmV3IEF1ZGlvUGxheWVyRXZlbnQoRXZlbnRUeXBlLkNMT1NFRCkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAgIHByaXZhdGUgX2xvYWRTb3VyY2VXb3JrbGV0QW5kSW5pdFN0YXJ0KCl7XHJcbiAgICAgICAgICBBdWRpb1NvdXJjZVdvcmtsZXRNb2R1bGVMb2FkZXIubG9hZE1vZHVsZSh0aGlzLmNvbnRleHQpLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiUGxheWVyIHJlYWR5LiAoIGJ5IFBsYXllcjo6X2xvYWRTb3VyY2VXb3JrbGV0QW5kSW5pdFN0YXJ0KClcIik7XHJcbiAgICAgICAgICAgIHRoaXMucmVhZHk9dHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGFydEFjdGlvbnMoKTtcclxuICAgICAgICAgICAgaWYodGhpcy5saXN0ZW5lcil7XHJcbiAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5hdWRpb1BsYXllclVwZGF0ZShuZXcgQXVkaW9QbGF5ZXJFdmVudChFdmVudFR5cGUuUkVBRFkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSkuY2F0Y2goKGVycm9yOiBhbnkpPT57XHJcbiAgICAgICAgICAgIHRoaXMucmVhZHk9ZmFsc2U7XHJcbiAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXJ0QWN0aW9ucygpO1xyXG4gICAgICAgICAgICBpZih0aGlzLmxpc3RlbmVyKXtcclxuICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyLmF1ZGlvUGxheWVyVXBkYXRlKG5ldyBBdWRpb1BsYXllckV2ZW50KEV2ZW50VHlwZS5DTE9TRUQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3QgYWRkIG1vZHVsZSAnK2Vycm9yKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gIHByaXZhdGUgX3N0YXJ0QXVkaW9Tb3VyY2VXb3JrbGV0Tm9kZSgpe1xyXG4gICAgICAgICAgaWYodGhpcy5zb3VyY2VBdWRpb1dvcmtsZXROb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZS5vbnByb2Nlc3NvcmVycm9yID0gKGV2OiBFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBtc2cgPSAnVW5rbndvbiBlcnJvcic7XHJcbiAgICAgICAgICAgICAgaWYgKGV2IGluc3RhbmNlb2YgRXJyb3JFdmVudCkge1xyXG4gICAgICAgICAgICAgICAgbXNnID0gZXYubWVzc2FnZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkF1ZGlvIHNvdXJjZSB3b3JrbGV0IGVycm9yOiBcIiArIG1zZyk7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE9cclxuICAgICAgICAgICAgICAgIC8vIHRoaXMubGlzdGVuZXIuZXJyb3IobXNnKTtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMubGlzdGVuZXIuYXVkaW9QbGF5ZXJVcGRhdGUobmV3IEF1ZGlvUGxheWVyRXZlbnQoKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zb3VyY2VBdWRpb1dvcmtsZXROb2RlLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTsgLy8gdGhpcyBhbHJlYWR5IHN0YXJ0cyBwbGF5aW5nXHJcbiAgICAgICAgICAgIHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZS5vbmVuZGVkID0gKCkgPT4gdGhpcy5vbmVuZGVkKCk7XHJcbiAgICAgICAgICAgIHRoaXMucnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZS5zdGFydCgpO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJQbGF5YmFjayBzdGFydCBhY3Rpb24gZW5hYmxlZC4gKCBieSBQbGF5ZXI6Ol9zdGFydEF1ZGlvU291cmNlV29ya2xldE5vZGUoKVwiKTtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydFNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZCA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5fc3RvcEFjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyLmF1ZGlvUGxheWVyVXBkYXRlKG5ldyBBdWRpb1BsYXllckV2ZW50KEV2ZW50VHlwZS5TVEFSVEVEKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICAgICAgICBzdGFydCgpIHtcclxuICAgICAgICAgICAgaWYoIXRoaXMuX3N0YXJ0QWN0aW9uLmRpc2FibGVkICYmICF0aGlzLnJ1bm5pbmcpIHtcclxuICAgICAgICAgICAgICBpZih0aGlzLmNvbnRleHQuc3RhdGUhPT0ncnVubmluZycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5yZXN1bWUoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQoKTtcclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChyZWFzb24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHJlc3VtZSBhdWRpbyBjb250ZXh0OiAnICsgcmVhc29uKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXBkYXRlU3RhcnRBY3Rpb25zKCl7XHJcblxyXG4gICAgICAgICAgaWYodGhpcy5yZWFkeSl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuX2F1ZGlvU291cmNlIGluc3RhbmNlb2YgQXVkaW9CdWZmZXJTb3VyY2UgfHwgdGhpcy5fYXVkaW9Tb3VyY2UgaW5zdGFuY2VvZiBBcnJheUF1ZGlvQnVmZmVyIHx8IHRoaXMuX2F1ZGlvU291cmNlIGluc3RhbmNlb2YgSW5kZXhlZERiQXVkaW9CdWZmZXIpe1xyXG4gICAgICAgICAgICAgIHRoaXMuX3N0YXJ0QWN0aW9uLmRpc2FibGVkPWZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3N0YXJ0U2VsZWN0aW9uQWN0aW9uLmRpc2FibGVkPXRoaXMuc3RhcnRTZWxlY3Rpb25EaXNhYmxlZCgpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICBpZih0aGlzLl9hdWRpb1NvdXJjZSBpbnN0YW5jZW9mIE5ldEF1ZGlvQnVmZmVyKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2F1ZGlvU291cmNlLmFkZE9uUmVhZHlMaXN0ZW5lcigoKT0+e1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydEFjdGlvbi5kaXNhYmxlZD1mYWxzZTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRTZWxlY3Rpb25BY3Rpb24uZGlzYWJsZWQ9dGhpcy5zdGFydFNlbGVjdGlvbkRpc2FibGVkKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydEFjdGlvbi5kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydFNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhcnRTZWxlY3Rpb25EaXNhYmxlZCgpe1xyXG4gICAgICAgICAgcmV0dXJuICEodGhpcy5fYXVkaW9DbGlwICYmIHRoaXMuY29udGV4dCAmJiAhdGhpcy5zdGFydEFjdGlvbi5kaXNhYmxlZCAmJiB0aGlzLl9hdWRpb0NsaXAuc2VsZWN0aW9uIClcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBwcml2YXRlIF9zdGFydChwbGF5U2VsZWN0aW9uPWZhbHNlKXtcclxuICAgICAgICAgIGlmICh0aGlzLl9hdWRpb1NvdXJjZSBpbnN0YW5jZW9mIEF1ZGlvQnVmZmVyU291cmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc291cmNlQnVmZmVyTm9kZSA9IHRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcclxuICAgICAgICAgICAgdGhpcy5zb3VyY2VCdWZmZXJOb2RlLmJ1ZmZlciA9IHRoaXMuX2F1ZGlvU291cmNlLmF1ZGlvQnVmZmVyO1xyXG4gICAgICAgICAgICB0aGlzLnNvdXJjZUJ1ZmZlck5vZGUuY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pO1xyXG4gICAgICAgICAgICB0aGlzLnNvdXJjZUJ1ZmZlck5vZGUub25lbmRlZCA9ICgpID0+IHRoaXMub25lbmRlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLnBsYXlTdGFydFRpbWUgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMucnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIC8vIHVuZm9ydHVuYXRlbHkgV2ViIEF1ZGlvIEFQSSB1c2VzIHRpbWUgdmFsdWVzIG5vdCBmcmFtZXNcclxuICAgICAgICAgICAgY29uc3QgYWMgPSB0aGlzLl9hdWRpb0NsaXBcclxuICAgICAgICAgICAgbGV0IG9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgIGlmIChwbGF5U2VsZWN0aW9uICYmIGFjICYmIGFjLnNlbGVjdGlvbikge1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBzID0gYWMuc2VsZWN0aW9uO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHNyID0gYWMuYXVkaW9EYXRhSG9sZGVyLnNhbXBsZVJhdGU7XHJcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gcy5sZWZ0RnJhbWUgLyBzcjtcclxuICAgICAgICAgICAgICBjb25zdCBzdG9wUG9zSW5zZWNzID0gcy5yaWdodEZyYW1lIC8gc3I7XHJcbiAgICAgICAgICAgICAgY29uc3QgZHVyID0gc3RvcFBvc0luc2VjcyAtIG9mZnNldDtcclxuICAgICAgICAgICAgICB0aGlzLnNvdXJjZUJ1ZmZlck5vZGUuc3RhcnQoMCwgb2Zmc2V0LCBkdXIpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zb3VyY2VCdWZmZXJOb2RlLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wbGF5U3RhcnRUaW1lID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lIC0gb2Zmc2V0O1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0U2VsZWN0aW9uQWN0aW9uLmRpc2FibGVkID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLl9zdG9wQWN0aW9uLmRpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5saXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuYXVkaW9QbGF5ZXJVcGRhdGUobmV3IEF1ZGlvUGxheWVyRXZlbnQoRXZlbnRUeXBlLlNUQVJURUQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9hdWRpb1NvdXJjZSBpbnN0YW5jZW9mIEFycmF5QXVkaW9CdWZmZXIgfHwgdGhpcy5fYXVkaW9Tb3VyY2UgaW5zdGFuY2VvZiBJbmRleGVkRGJBdWRpb0J1ZmZlciB8fCB0aGlzLl9hdWRpb1NvdXJjZSBpbnN0YW5jZW9mIE5ldEF1ZGlvQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxheVN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9hdWRpb1NvdXJjZSBpbnN0YW5jZW9mIEFycmF5QXVkaW9CdWZmZXIpIHtcclxuICAgICAgICAgICAgICBjb25zdCBhYWJzbiA9IG5ldyBBcnJheUF1ZGlvQnVmZmVyU291cmNlTm9kZSh0aGlzLmNvbnRleHQpO1xyXG4gICAgICAgICAgICAgIGFhYnNuLmFycmF5QXVkaW9CdWZmZXIgPSB0aGlzLl9hdWRpb1NvdXJjZTtcclxuICAgICAgICAgICAgICB0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUgPSBhYWJzbjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9hdWRpb1NvdXJjZSBpbnN0YW5jZW9mIEluZGV4ZWREYkF1ZGlvQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaWFzbiA9IG5ldyBJbmRleGVkRGJBdWRpb0J1ZmZlclNvdXJjZU5vZGUodGhpcy5jb250ZXh0KTtcclxuICAgICAgICAgICAgICBpYXNuLmluZGRiQXVkaW9CdWZmZXIgPSB0aGlzLl9hdWRpb1NvdXJjZTtcclxuICAgICAgICAgICAgICB0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUgPSBpYXNuO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2F1ZGlvU291cmNlIGluc3RhbmNlb2YgTmV0QXVkaW9CdWZmZXIpIHtcclxuICAgICAgICAgICAgICBjb25zdCBuYWJzbiA9IG5ldyBOZXRBdWRpb0J1ZmZlclNvdXJjZU5vZGUodGhpcy5jb250ZXh0KTtcclxuICAgICAgICAgICAgICBuYWJzbi5uZXRBdWRpb0J1ZmZlciA9IHRoaXMuX2F1ZGlvU291cmNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZSA9IG5hYnNuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUub25wcm9jZXNzb3JlcnJvciA9IChldjogRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBtc2cgPSAnVW5rbndvbiBlcnJvcic7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXYgaW5zdGFuY2VvZiBFcnJvckV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgIG1zZyA9IGV2Lm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQXVkaW8gc291cmNlIHdvcmtsZXQgZXJyb3I6IFwiICsgbXNnKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuYXVkaW9QbGF5ZXJVcGRhdGUobmV3IEF1ZGlvUGxheWVyRXZlbnQoRXZlbnRUeXBlLkVSUk9SKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5zb3VyY2VBdWRpb1dvcmtsZXROb2RlLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTsgLy8gdGhpcyBhbHJlYWR5IHN0YXJ0cyBwbGF5aW5nXHJcbiAgICAgICAgICAgICAgdGhpcy5zb3VyY2VBdWRpb1dvcmtsZXROb2RlLm9uZW5kZWQgPSAoKSA9PiB0aGlzLm9uZW5kZWQoKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5ydW5uaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgYWMgPSB0aGlzLl9hdWRpb0NsaXBcclxuICAgICAgICAgICAgICBsZXQgb2Zmc2V0ID0gMFxyXG4gICAgICAgICAgICAgIGlmIChwbGF5U2VsZWN0aW9uICYmIGFjICYmIGFjLnNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcyA9IGFjLnNlbGVjdGlvbjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNyID0gYWMuYXVkaW9EYXRhSG9sZGVyLnNhbXBsZVJhdGU7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBzLmxlZnRGcmFtZSAvIHNyO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RvcFBvc0luc2VjcyA9IHMucmlnaHRGcmFtZSAvIHNyO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZHVyID0gc3RvcFBvc0luc2VjcyAtIG9mZnNldFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VBdWRpb1dvcmtsZXROb2RlLnN0YXJ0KDAsIG9mZnNldCwgZHVyKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUuc3RhcnQoKTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIC8vdGhpcy5wbGF5U3RhcnRUaW1lID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lIC0gb2Zmc2V0O1xyXG4gICAgICAgICAgICAgIHRoaXMuX3N0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLl9zdGFydFNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZCA9IHRydWVcclxuICAgICAgICAgICAgICB0aGlzLl9zdG9wQWN0aW9uLmRpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyLmF1ZGlvUGxheWVyVXBkYXRlKG5ldyBBdWRpb1BsYXllckV2ZW50KEV2ZW50VHlwZS5TVEFSVEVEKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgc3RhcnRTZWxlY3RlZCgpIHtcclxuICAgICAgICBpZighdGhpcy5fc3RhcnRBY3Rpb24uZGlzYWJsZWQgJiYgIXRoaXMucnVubmluZykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdGF0ZSAhPT0gJ3J1bm5pbmcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5yZXN1bWUoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9zdGFydCh0cnVlKTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goKHJlYXNvbikgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCByZXN1bWUgYXVkaW8gY29udGV4dDogJyArIHJlYXNvbik7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnQodHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAgIHN0b3AoKXtcclxuICAgICAgICAgICAgaWYodGhpcy5ydW5uaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VCdWZmZXJOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VCdWZmZXJOb2RlLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZSl7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZS5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpbWVyVmFyICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy50aW1lclZhcik7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5hdWRpb1BsYXllclVwZGF0ZShuZXcgQXVkaW9QbGF5ZXJFdmVudChFdmVudFR5cGUuU1RPUFBFRCkpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBvbmVuZGVkKCkge1xyXG4gICAgICAgICAgICBpZih0aGlzLnRpbWVyVmFyIT1udWxsKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyVmFyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9zdGFydEFjdGlvbi5kaXNhYmxlZCA9ICF0aGlzLl9hdWRpb1NvdXJjZTtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRTZWxlY3Rpb25BY3Rpb24uZGlzYWJsZWQ9dGhpcy5zdGFydFNlbGVjdGlvbkRpc2FibGVkKClcclxuICAgICAgICAgICAgdGhpcy5fc3RvcEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucnVubmluZz1mYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuYXVkaW9QbGF5ZXJVcGRhdGUobmV3IEF1ZGlvUGxheWVyRXZlbnQoRXZlbnRUeXBlLkVOREVEKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBwbGF5UG9zaXRpb25UaW1lKCk6bnVtYmVyfG51bGwge1xyXG4gICAgICAgICAgICBsZXQgcHB0PW51bGw7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucGxheVN0YXJ0VGltZSE9PW51bGwpIHtcclxuICAgICAgICAgICAgICAgIHBwdD0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lIC0gdGhpcy5wbGF5U3RhcnRUaW1lO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZih0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUpe1xyXG4gICAgICAgICAgICAgIHBwdD10aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUucGxheVBvc2l0aW9uVGltZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcHB0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIGdldCBwbGF5UG9zaXRpb25GcmFtZXMoKTpudW1iZXJ8bnVsbCB7XHJcbiAgICAgICAgbGV0IHBwRnJzOm51bWJlcnxudWxsPW51bGw7XHJcbiAgICAgICBpZih0aGlzLl9hdWRpb1NvdXJjZSkge1xyXG4gICAgICAgICBsZXQgc3I9dGhpcy5fYXVkaW9Tb3VyY2Uuc2FtcGxlUmF0ZTtcclxuICAgICAgICAgaWYgKHNyKSB7XHJcbiAgICAgICAgICAgbGV0IHBwVGltZSA9IHRoaXMucGxheVBvc2l0aW9uVGltZTtcclxuICAgICAgICAgICBpZiAocHBUaW1lICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICBwcEZycyA9IHNyICogcHBUaW1lO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcEZycztcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiJdfQ==
402
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL3BsYXliYWNrL3BsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFNUMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDNUUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDcEYsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFFaEYsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxpQkFBaUIsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUk1QyxNQUFNLENBQU4sSUFBYSxTQUFpRTtBQUE5RSxXQUFhLFNBQVM7SUFBRSw2Q0FBTSxDQUFBO0lBQUMsMkNBQUssQ0FBQTtJQUFDLCtDQUFPLENBQUE7SUFBQyxxREFBVSxDQUFBO0lBQUUsK0NBQU8sQ0FBQTtJQUFFLDJDQUFLLENBQUE7SUFBQywyQ0FBSyxDQUFBO0FBQUEsQ0FBQyxFQUFqRSxTQUFTLEtBQVQsU0FBUyxRQUF3RDtBQUU5RSxNQUFNLE9BQU8sZ0JBQWdCO0lBS3pCLFlBQVksSUFBYyxFQUFFLFlBQW9CO1FBQzVDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxh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XG5pbXBvcnQgeyBBdWRpb0NsaXAgfSBmcm9tICcuLi9wZXJzaXN0b3InXHJcbmltcG9ydCB7QXJyYXlBdWRpb0J1ZmZlcn0gZnJvbSBcIi4uL2FycmF5X2F1ZGlvX2J1ZmZlclwiO1xyXG5pbXBvcnQge0FycmF5QXVkaW9CdWZmZXJTb3VyY2VOb2RlfSBmcm9tIFwiLi9hcnJheV9hdWRpb19idWZmZXJfc291cmNlX25vZGVcIjtcclxuaW1wb3J0IHtJbmRleGVkRGJBdWRpb0J1ZmZlcn0gZnJvbSBcIi4uL2luZGRiX2F1ZGlvX2J1ZmZlclwiO1xyXG5pbXBvcnQge0F1ZGlvU291cmNlV29ya2xldE1vZHVsZUxvYWRlcn0gZnJvbSBcIi4vYXVkaW9fc291cmNlX3dvcmtsZXRfbW9kdWxlX2xvYWRlclwiO1xyXG5pbXBvcnQge0luZGV4ZWREYkF1ZGlvQnVmZmVyU291cmNlTm9kZX0gZnJvbSBcIi4vaW5kZGJfYXVkaW9fYnVmZmVyX3NvdXJjZV9ub2RlXCI7XHJcbmltcG9ydCB7QXVkaW9Tb3VyY2VOb2RlfSBmcm9tIFwiLi9hdWRpb19zb3VyY2Vfbm9kZVwiO1xyXG5pbXBvcnQge05ldEF1ZGlvQnVmZmVyfSBmcm9tIFwiLi4vbmV0X2F1ZGlvX2J1ZmZlclwiO1xyXG5pbXBvcnQge05ldEF1ZGlvQnVmZmVyU291cmNlTm9kZX0gZnJvbSBcIi4vbmV0X2F1ZGlvX2J1ZmZlcl9zb3VyY2Vfbm9kZVwiO1xyXG5pbXBvcnQge0F1ZGlvQnVmZmVyU291cmNlLCBBdWRpb1NvdXJjZX0gZnJvbSBcIi4uL2F1ZGlvX2RhdGFfaG9sZGVyXCI7XHJcbmltcG9ydCB7QXVkaW9Db250ZXh0UHJvdmlkZXJ9IGZyb20gXCIuLi9jb250ZXh0XCI7XHJcblxyXG5cclxuXHJcbiAgICBleHBvcnQgZW51bSAgRXZlbnRUeXBlIHtDTE9TRUQsUkVBRFksU1RBUlRFRCxQT1NfVVBEQVRFLCBTVE9QUEVELCBFTkRFRCxFUlJPUn1cclxuXHJcbiAgICBleHBvcnQgY2xhc3MgQXVkaW9QbGF5ZXJFdmVudHtcclxuXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdHlwZTpFdmVudFR5cGU7XHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdGltZVBvc2l0aW9uOm51bWJlciB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgY29uc3RydWN0b3IodHlwZTpFdmVudFR5cGUsIHRpbWVQb3NpdGlvbj86bnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lUG9zaXRpb24gPSB0aW1lUG9zaXRpb247XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXQgdHlwZSgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXQgdGltZVBvc2l0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZVBvc2l0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGV4cG9ydCBpbnRlcmZhY2UgQXVkaW9QbGF5ZXJMaXN0ZW5lciB7XHJcbiAgICAgICAgYXVkaW9QbGF5ZXJVcGRhdGUoZTpBdWRpb1BsYXllckV2ZW50KTp2b2lkO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBBdWRpb1BsYXllciB7XHJcblxyXG4gICAgICAgIGdldCBhdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uKCk6IEFjdGlvbjxib29sZWFuPiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwdWJsaWMgc3RhdGljIERFRkFVTFRfQlVGU0laRTpudW1iZXIgPSA4MTkyO1xyXG4gICAgICAgIHByaXZhdGUgcnVubmluZz1mYWxzZTtcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9zdGFydEFjdGlvbjpBY3Rpb248dm9pZD47XHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfc3RhcnRTZWxlY3Rpb25BY3Rpb246QWN0aW9uPHZvaWQ+O1xyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2F1dG9QbGF5T25TZWxlY3RUb2dnbGVBY3Rpb246QWN0aW9uPGJvb2xlYW4+O1xyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3N0b3BBY3Rpb246QWN0aW9uPHZvaWQ+O1xyXG4gICAgICAgIGJ1ZlNpemU6bnVtYmVyO1xyXG4gICAgICAgIGNvbnRleHQ6QXVkaW9Db250ZXh0fG51bGw9bnVsbDtcclxuICAgICAgICByZWFkeT1mYWxzZTtcclxuICAgICAgICBsaXN0ZW5lcjpBdWRpb1BsYXllckxpc3RlbmVyO1xyXG4gICAgICAgIF9hdWRpb0NsaXA6QXVkaW9DbGlwfG51bGw9bnVsbDtcclxuICAgICAgICBwcml2YXRlIF9hdWRpb1NvdXJjZTpBdWRpb1NvdXJjZXxudWxsPW51bGw7XHJcbiAgICAgICAgc291cmNlQnVmZmVyTm9kZTpBdWRpb0J1ZmZlclNvdXJjZU5vZGV8bnVsbD1udWxsO1xyXG4gICAgICAgIHNvdXJjZUF1ZGlvV29ya2xldE5vZGU6QXVkaW9Tb3VyY2VOb2RlfG51bGw9bnVsbDtcclxuXHJcbiAgICAgICAgYnVmZlBvczpudW1iZXI7XHJcbiAgICAgICAgcHJpdmF0ZSB6ZXJvQnVmQ250Om51bWJlcjtcclxuICAgICAgICBuOmFueTtcclxuICAgICAgICB6YjpGbG9hdDMyQXJyYXk7XHJcbiAgICAgICAgcHJpdmF0ZSBwbGF5U3RhcnRUaW1lOm51bWJlcnxudWxsPW51bGw7XHJcblxyXG4gICAgICAgIHByaXZhdGUgdGltZXJWYXI6bnVtYmVyfG51bGw9bnVsbDtcclxuXHJcbiAgICAgICAgY29uc3RydWN0b3IobGlzdGVuZXI6QXVkaW9QbGF5ZXJMaXN0ZW5lcikge1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyPWxpc3RlbmVyO1xyXG4gICAgICAgICAgICB0aGlzLmJ1ZlNpemUgPSBBdWRpb1BsYXllci5ERUZBVUxUX0JVRlNJWkU7XHJcbiAgICAgICAgICAgIHRoaXMubj1uYXZpZ2F0b3I7XHJcbiAgICAgICAgICAgIHRoaXMuYnVmZlBvcz0wO1xyXG4gICAgICAgICAgICB0aGlzLnplcm9CdWZDbnQ9MDtcclxuICAgICAgICAgICAgdGhpcy56YiA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5idWZTaXplKTtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRBY3Rpb24gPSBuZXcgQWN0aW9uKCdTdGFydCcpO1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0QWN0aW9uLm9uQWN0aW9uID0gKCk9PnRoaXMuc3RhcnQoKTtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRTZWxlY3Rpb25BY3Rpb249bmV3IEFjdGlvbignU3RhcnQgc2VsZWN0ZWQnKVxyXG4gICAgICAgICAgICB0aGlzLl9zdGFydFNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZD10cnVlXHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0U2VsZWN0aW9uQWN0aW9uLm9uQWN0aW9uID0gKCk9PnRoaXMuc3RhcnRTZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9hdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uPW5ldyBBY3Rpb248Ym9vbGVhbj4oXCJBdXRvcGxheSBvbiBzZWxlY3RcIixmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0b3BBY3Rpb24gPSBuZXcgQWN0aW9uKCdTdG9wJyk7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0b3BBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9zdG9wQWN0aW9uLm9uQWN0aW9uID0gKCk9PnRoaXMuc3RvcCgpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByaXZhdGUgX2F1ZGlvQ29udGV4dCgpOkF1ZGlvQ29udGV4dHxudWxse1xyXG4gICAgICAgICAgICBpZighdGhpcy5jb250ZXh0KXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dD1BdWRpb0NvbnRleHRQcm92aWRlci5hdWRpb0NvbnRleHRJbnN0YW5jZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5jb250ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFkZEV2ZW50TGlzdGVuZXIoJ3N0YXRlY2hhbmdlJywgKGV2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmNvbnRleHQgJiYgdGhpcy5jb250ZXh0LnN0YXRlIT09J3J1bm5pbmcnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBzdGFydEFjdGlvbigpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0QWN0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IHN0YXJ0U2VsZWN0aW9uQWN0aW9uKCl7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWxlY3Rpb25BY3Rpb25cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBzdG9wQWN0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RvcEFjdGlvbjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldCBhdWRpb0NsaXAoYXVkaW9DbGlwOkF1ZGlvQ2xpcHwgbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5fYXVkaW9DbGlwPWF1ZGlvQ2xpcFxyXG4gICAgICAgICAgICBsZXQgbGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgbGV0IGNocyA9IDA7XHJcbiAgICAgICAgICAgIGlmIChhdWRpb0NsaXAgJiYgYXVkaW9DbGlwLmF1ZGlvRGF0YUhvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGF1ZGlvRGF0YUhvbGRlcj1hdWRpb0NsaXAuYXVkaW9EYXRhSG9sZGVyO1xyXG4gICAgICAgICAgICAgICAgY2hzID0gYXVkaW9EYXRhSG9sZGVyLm51bWJlck9mQ2hhbm5lbHNcclxuICAgICAgICAgICAgICAgIGlmIChjaHMgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gYXVkaW9EYXRhSG9sZGVyLmZyYW1lTGVuO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vaWYgKGNocyA+IHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbi5tYXhDaGFubmVsQ291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAvLyBUT0RPIGV4Y2VwdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIC8vfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hdWRpb1NvdXJjZT1hdWRpb0RhdGFIb2xkZXIuYXVkaW9Tb3VyY2U7XHJcblxyXG4gICAgICAgICAgICAgICAgYXVkaW9DbGlwLmFkZFNlbGVjdGlvbk9ic2VydmVyKChhYyk9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRTZWxlY3Rpb25BY3Rpb24uZGlzYWJsZWQgPSB0aGlzLnN0YXJ0U2VsZWN0aW9uRGlzYWJsZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRTZWxlY3Rpb25BY3Rpb24uZGlzYWJsZWQgJiYgdGhpcy5fYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbi52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydFNlbGVjdGVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdWRpb1NvdXJjZT1udWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgZ2V0IGF1ZGlvU291cmNlKCk6IEF1ZGlvU291cmNlIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1ZGlvU291cmNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZXQgYXVkaW9Tb3VyY2UodmFsdWU6IEF1ZGlvU291cmNlIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgIHRoaXMuX2F1ZGlvU291cmNlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9hdWRpb1NvdXJjZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucmVhZHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGFydEFjdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5hdWRpb1BsYXllclVwZGF0ZShuZXcgQXVkaW9QbGF5ZXJFdmVudChFdmVudFR5cGUuUkVBRFkpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVhZHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXJ0QWN0aW9ucygpO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyLmF1ZGlvUGxheWVyVXBkYXRlKG5ldyBBdWRpb1BsYXllckV2ZW50KEV2ZW50VHlwZS5DTE9TRUQpKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlIF9sb2FkU291cmNlV29ya2xldEFuZEluaXRTdGFydCgpe1xyXG4gICAgICAgICAgICBpZih0aGlzLmNvbnRleHQpIHtcclxuICAgICAgICAgICAgICAgIEF1ZGlvU291cmNlV29ya2xldE1vZHVsZUxvYWRlci5sb2FkTW9kdWxlKHRoaXMuY29udGV4dCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiUGxheWVyIHJlYWR5LiAoIGJ5IFBsYXllcjo6X2xvYWRTb3VyY2VXb3JrbGV0QW5kSW5pdFN0YXJ0KClcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkeSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGFydEFjdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5saXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyLmF1ZGlvUGxheWVyVXBkYXRlKG5ldyBBdWRpb1BsYXllckV2ZW50KEV2ZW50VHlwZS5SRUFEWSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkeSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhcnRBY3Rpb25zKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5hdWRpb1BsYXllclVwZGF0ZShuZXcgQXVkaW9QbGF5ZXJFdmVudChFdmVudFR5cGUuQ0xPU0VEKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBhZGQgbW9kdWxlICcgKyBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gIHByaXZhdGUgX3N0YXJ0QXVkaW9Tb3VyY2VXb3JrbGV0Tm9kZSgpe1xyXG4gICAgICB0aGlzLl9sb2FkU291cmNlV29ya2xldEFuZEluaXRTdGFydCgpO1xyXG4gICAgICAgICAgaWYodGhpcy5jb250ZXh0ICYmIHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUub25wcm9jZXNzb3JlcnJvciA9IChldjogRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICBsZXQgbXNnID0gJ1Vua253b24gZXJyb3InO1xyXG4gICAgICAgICAgICAgIGlmIChldiBpbnN0YW5jZW9mIEVycm9yRXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIG1zZyA9IGV2Lm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBdWRpbyBzb3VyY2Ugd29ya2xldCBlcnJvcjogXCIgKyBtc2cpO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmxpc3RlbmVyLmVycm9yKG1zZyk7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmxpc3RlbmVyLmF1ZGlvUGxheWVyVXBkYXRlKG5ldyBBdWRpb1BsYXllckV2ZW50KCkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZS5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbik7IC8vIHRoaXMgYWxyZWFkeSBzdGFydHMgcGxheWluZ1xyXG4gICAgICAgICAgICB0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUub25lbmRlZCA9ICgpID0+IHRoaXMub25lbmRlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUuc3RhcnQoKTtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiUGxheWJhY2sgc3RhcnQgYWN0aW9uIGVuYWJsZWQuICggYnkgUGxheWVyOjpfc3RhcnRBdWRpb1NvdXJjZVdvcmtsZXROb2RlKClcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRTZWxlY3Rpb25BY3Rpb24uZGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuX3N0b3BBY3Rpb24uZGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5hdWRpb1BsYXllclVwZGF0ZShuZXcgQXVkaW9QbGF5ZXJFdmVudChFdmVudFR5cGUuU1RBUlRFRCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgICAgICAgc3RhcnQoKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9hdWRpb0NvbnRleHQoKTtcclxuXHJcbiAgICAgICAgICAgIGlmKHRoaXMuY29udGV4dCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9zdGFydEFjdGlvbi5kaXNhYmxlZCAmJiAhdGhpcy5ydW5uaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdGF0ZSA9PT0gJ3N1c3BlbmRlZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LnJlc3VtZSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKHJlYXNvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihyZWFzb24ubWVzc2FnZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlYXNvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29udGV4dC5zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnID0gJ0Vycm9yOiBDYW5ub3Qgc3RhcnQgcGxheWJhY2suIEF1ZGlvIGNvbnRleHQgaXMgYWxyZWFkeSBjbG9zZWQhJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihtc2cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXBkYXRlU3RhcnRBY3Rpb25zKCl7XHJcblxyXG4gICAgICAgICAgaWYodGhpcy5yZWFkeSl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuX2F1ZGlvU291cmNlIGluc3RhbmNlb2YgQXVkaW9CdWZmZXJTb3VyY2UgfHwgdGhpcy5fYXVkaW9Tb3VyY2UgaW5zdGFuY2VvZiBBcnJheUF1ZGlvQnVmZmVyIHx8IHRoaXMuX2F1ZGlvU291cmNlIGluc3RhbmNlb2YgSW5kZXhlZERiQXVkaW9CdWZmZXIpe1xyXG4gICAgICAgICAgICAgIHRoaXMuX3N0YXJ0QWN0aW9uLmRpc2FibGVkPWZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3N0YXJ0U2VsZWN0aW9uQWN0aW9uLmRpc2FibGVkPXRoaXMuc3RhcnRTZWxlY3Rpb25EaXNhYmxlZCgpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICBpZih0aGlzLl9hdWRpb1NvdXJjZSBpbnN0YW5jZW9mIE5ldEF1ZGlvQnVmZmVyKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2F1ZGlvU291cmNlLmFkZE9uUmVhZHlMaXN0ZW5lcigoKT0+e1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydEFjdGlvbi5kaXNhYmxlZD1mYWxzZTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRTZWxlY3Rpb25BY3Rpb24uZGlzYWJsZWQ9dGhpcy5zdGFydFNlbGVjdGlvbkRpc2FibGVkKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydEFjdGlvbi5kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydFNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhcnRTZWxlY3Rpb25EaXNhYmxlZCgpe1xyXG4gICAgICAgICAgcmV0dXJuICEodGhpcy5fYXVkaW9DbGlwICYmICF0aGlzLnN0YXJ0QWN0aW9uLmRpc2FibGVkICYmIHRoaXMuX2F1ZGlvQ2xpcC5zZWxlY3Rpb24gKVxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIHByaXZhdGUgX3N0YXJ0KHBsYXlTZWxlY3Rpb249ZmFsc2Upe1xyXG4gICAgICAgICAgICAgICAgaWYoIXRoaXMuY29udGV4dCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGdldCBhdWRpbyBjb250ZXh0IVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5fYXVkaW9Tb3VyY2UgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlclNvdXJjZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNvdXJjZUJ1ZmZlck5vZGUgPSB0aGlzLmNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc291cmNlQnVmZmVyTm9kZS5idWZmZXIgPSB0aGlzLl9hdWRpb1NvdXJjZS5hdWRpb0J1ZmZlcjtcclxuICAgICAgICAgICAgdGhpcy5zb3VyY2VCdWZmZXJOb2RlLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTtcclxuICAgICAgICAgICAgdGhpcy5zb3VyY2VCdWZmZXJOb2RlLm9uZW5kZWQgPSAoKSA9PiB0aGlzLm9uZW5kZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5wbGF5U3RhcnRUaW1lID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lO1xyXG4gICAgICAgICAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAvLyB1bmZvcnR1bmF0ZWx5IFdlYiBBdWRpbyBBUEkgdXNlcyB0aW1lIHZhbHVlcyBub3QgZnJhbWVzXHJcbiAgICAgICAgICAgIGNvbnN0IGFjID0gdGhpcy5fYXVkaW9DbGlwXHJcbiAgICAgICAgICAgIGxldCBvZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICBpZiAocGxheVNlbGVjdGlvbiAmJiBhYyAmJiBhYy5zZWxlY3Rpb24pIHtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgcyA9IGFjLnNlbGVjdGlvbjtcclxuICAgICAgICAgICAgICBjb25zdCBzciA9IGFjLmF1ZGlvRGF0YUhvbGRlci5zYW1wbGVSYXRlO1xyXG4gICAgICAgICAgICAgIG9mZnNldCA9IHMubGVmdEZyYW1lIC8gc3I7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc3RvcFBvc0luc2VjcyA9IHMucmlnaHRGcmFtZSAvIHNyO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGR1ciA9IHN0b3BQb3NJbnNlY3MgLSBvZmZzZXQ7XHJcbiAgICAgICAgICAgICAgdGhpcy5zb3VyY2VCdWZmZXJOb2RlLnN0YXJ0KDAsIG9mZnNldCwgZHVyKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc291cmNlQnVmZmVyTm9kZS5zdGFydCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucGxheVN0YXJ0VGltZSA9IHRoaXMuY29udGV4dC5jdXJyZW50VGltZSAtIG9mZnNldDtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydFNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZCA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5fc3RvcEFjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyLmF1ZGlvUGxheWVyVXBkYXRlKG5ldyBBdWRpb1BsYXllckV2ZW50KEV2ZW50VHlwZS5TVEFSVEVEKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYXVkaW9Tb3VyY2UgaW5zdGFuY2VvZiBBcnJheUF1ZGlvQnVmZmVyIHx8IHRoaXMuX2F1ZGlvU291cmNlIGluc3RhbmNlb2YgSW5kZXhlZERiQXVkaW9CdWZmZXIgfHwgdGhpcy5fYXVkaW9Tb3VyY2UgaW5zdGFuY2VvZiBOZXRBdWRpb0J1ZmZlcikge1xyXG4gICAgICAgICAgICAgIEF1ZGlvU291cmNlV29ya2xldE1vZHVsZUxvYWRlci5sb2FkTW9kdWxlKHRoaXMuY29udGV4dCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGxheVN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2F1ZGlvU291cmNlIGluc3RhbmNlb2YgQXJyYXlBdWRpb0J1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWFic24gPSBuZXcgQXJyYXlBdWRpb0J1ZmZlclNvdXJjZU5vZGUodGhpcy5jb250ZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgIGFhYnNuLmFycmF5QXVkaW9CdWZmZXIgPSB0aGlzLl9hdWRpb1NvdXJjZTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZSA9IGFhYnNuO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2F1ZGlvU291cmNlIGluc3RhbmNlb2YgSW5kZXhlZERiQXVkaW9CdWZmZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlhc24gPSBuZXcgSW5kZXhlZERiQXVkaW9CdWZmZXJTb3VyY2VOb2RlKHRoaXMuY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpYXNuLmluZGRiQXVkaW9CdWZmZXIgPSB0aGlzLl9hdWRpb1NvdXJjZTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZSA9IGlhc247XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYXVkaW9Tb3VyY2UgaW5zdGFuY2VvZiBOZXRBdWRpb0J1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFic24gPSBuZXcgTmV0QXVkaW9CdWZmZXJTb3VyY2VOb2RlKHRoaXMuY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBuYWJzbi5uZXRBdWRpb0J1ZmZlciA9IHRoaXMuX2F1ZGlvU291cmNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VBdWRpb1dvcmtsZXROb2RlID0gbmFic247XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VBdWRpb1dvcmtsZXROb2RlLm9ucHJvY2Vzc29yZXJyb3IgPSAoZXY6IEV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1zZyA9ICdVbmtud29uIGVycm9yJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXYgaW5zdGFuY2VvZiBFcnJvckV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGV2Lm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBdWRpbyBzb3VyY2Ugd29ya2xldCBlcnJvcjogXCIgKyBtc2cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuYXVkaW9QbGF5ZXJVcGRhdGUobmV3IEF1ZGlvUGxheWVyRXZlbnQoRXZlbnRUeXBlLkVSUk9SKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUuY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pOyAvLyB0aGlzIGFscmVhZHkgc3RhcnRzIHBsYXlpbmdcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZS5vbmVuZGVkID0gKCkgPT4gdGhpcy5vbmVuZGVkKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5ydW5uaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhYyA9IHRoaXMuX2F1ZGlvQ2xpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IG9mZnNldCA9IDBcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChwbGF5U2VsZWN0aW9uICYmIGFjICYmIGFjLnNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBhYy5zZWxlY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3IgPSBhYy5hdWRpb0RhdGFIb2xkZXIuc2FtcGxlUmF0ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBzLmxlZnRGcmFtZSAvIHNyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0b3BQb3NJbnNlY3MgPSBzLnJpZ2h0RnJhbWUgLyBzcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkdXIgPSBzdG9wUG9zSW5zZWNzIC0gb2Zmc2V0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VBdWRpb1dvcmtsZXROb2RlLnN0YXJ0KDAsIG9mZnNldCwgZHVyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUuc3RhcnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMucGxheVN0YXJ0VGltZSA9IHRoaXMuY29udGV4dC5jdXJyZW50VGltZSAtIG9mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0U2VsZWN0aW9uQWN0aW9uLmRpc2FibGVkID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcEFjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5hdWRpb1BsYXllclVwZGF0ZShuZXcgQXVkaW9QbGF5ZXJFdmVudChFdmVudFR5cGUuU1RBUlRFRCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVhZHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGFydEFjdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuYXVkaW9QbGF5ZXJVcGRhdGUobmV3IEF1ZGlvUGxheWVyRXZlbnQoRXZlbnRUeXBlLkNMT1NFRCkpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgc3RhcnRTZWxlY3RlZCgpIHtcclxuICAgICAgICAgICAgdGhpcy5fYXVkaW9Db250ZXh0KCk7XHJcbiAgICAgICAgICBpZighdGhpcy5jb250ZXh0KXtcclxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZ2V0IGF1ZGlvIGNvbnRleHQhXCIpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmKCF0aGlzLl9zdGFydEFjdGlvbi5kaXNhYmxlZCAmJiAhdGhpcy5ydW5uaW5nKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0YXRlID09PSAnc3VzcGVuZGVkJykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQucmVzdW1lKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodHJ1ZSk7XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKChyZWFzb24pID0+IHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlYXNvbi5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICB0aHJvdyByZWFzb247XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9ZWxzZSBpZih0aGlzLmNvbnRleHQuc3RhdGU9PT0nY2xvc2VkJyl7XHJcbiAgICAgICAgICAgIGNvbnN0IG1zZz0nRXJyb3I6IENhbm5vdCBzdGFydCBwbGF5YmFjayBvZiBzZWxlY3Rpb24uIEF1ZGlvIGNvbnRleHQgaXMgYWxyZWFkeSBjbG9zZWQhJztcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihtc2cpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydCh0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICAgc3RvcCgpe1xyXG4gICAgICAgICAgICBpZih0aGlzLnJ1bm5pbmcpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZUJ1ZmZlck5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUJ1ZmZlck5vZGUuc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5zb3VyY2VBdWRpb1dvcmtsZXROb2RlKXtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VBdWRpb1dvcmtsZXROb2RlLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGltZXJWYXIgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyVmFyKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyLmF1ZGlvUGxheWVyVXBkYXRlKG5ldyBBdWRpb1BsYXllckV2ZW50KEV2ZW50VHlwZS5TVE9QUEVEKSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG9uZW5kZWQoKSB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMudGltZXJWYXIhPW51bGwpIHtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMudGltZXJWYXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0QWN0aW9uLmRpc2FibGVkID0gIXRoaXMuX2F1ZGlvU291cmNlO1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydFNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZD10aGlzLnN0YXJ0U2VsZWN0aW9uRGlzYWJsZWQoKVxyXG4gICAgICAgICAgICB0aGlzLl9zdG9wQWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5ydW5uaW5nPWZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5saXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5hdWRpb1BsYXllclVwZGF0ZShuZXcgQXVkaW9QbGF5ZXJFdmVudChFdmVudFR5cGUuRU5ERUQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IHBsYXlQb3NpdGlvblRpbWUoKTpudW1iZXJ8bnVsbCB7XHJcbiAgICAgICAgICAgIGxldCBwcHQ9bnVsbDtcclxuICAgICAgICAgICAgaWYodGhpcy5jb250ZXh0ICYmIHRoaXMucGxheVN0YXJ0VGltZSE9PW51bGwpIHtcclxuICAgICAgICAgICAgICAgIHBwdD0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lIC0gdGhpcy5wbGF5U3RhcnRUaW1lO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZih0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUpe1xyXG4gICAgICAgICAgICAgIHBwdD10aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUucGxheVBvc2l0aW9uVGltZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcHB0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIGdldCBwbGF5UG9zaXRpb25GcmFtZXMoKTpudW1iZXJ8bnVsbCB7XHJcbiAgICAgICAgbGV0IHBwRnJzOm51bWJlcnxudWxsPW51bGw7XHJcbiAgICAgICBpZih0aGlzLl9hdWRpb1NvdXJjZSkge1xyXG4gICAgICAgICBsZXQgc3I9dGhpcy5fYXVkaW9Tb3VyY2Uuc2FtcGxlUmF0ZTtcclxuICAgICAgICAgaWYgKHNyKSB7XHJcbiAgICAgICAgICAgbGV0IHBwVGltZSA9IHRoaXMucGxheVBvc2l0aW9uVGltZTtcclxuICAgICAgICAgICBpZiAocHBUaW1lICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICBwcEZycyA9IHNyICogcHBUaW1lO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcEZycztcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiJdfQ==
@@ -147,4 +147,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
147
147
  }], autoPlayOnSelectToggleAction: [{
148
148
  type: Input
149
149
  }] } });
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW9fZGlzcGxheV9jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL3VpL2F1ZGlvX2Rpc3BsYXlfY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUE7QUFFekQsT0FBTyxFQUFDLFdBQVcsRUFBb0IsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7O0FBMkR6RSxNQUFNLE9BQU8sbUJBQW1CO0lBa0IvQjtRQWhCVyxjQUFTLEdBQWlCLElBQUksQ0FBQztRQUdoQyw2QkFBd0IsR0FBbUIsSUFBSSxDQUFDO1FBSS9DLGlCQUFZLEdBQW9CLElBQUksQ0FBQztRQUNyQyxrQkFBYSxHQUFvQixJQUFJLENBQUM7UUFJL0MsV0FBTSxHQUFhLElBQUksQ0FBQztJQUlYLENBQUM7SUFFZCxjQUFjO1FBQ1YsSUFBRyxJQUFJLENBQUMsU0FBUyxJQUFFLElBQUksRUFBQztZQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUE7U0FDaEM7SUFDTCxDQUFDO0lBRUMsWUFBWTtRQUNSLElBQUksRUFBRSxHQUFDLEtBQUssQ0FBQztRQUNiLElBQUcsSUFBSSxDQUFDLFNBQVMsRUFBQztZQUNkLEVBQUUsR0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxJQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUgsdUJBQXVCLENBQUMsRUFBcUI7UUFDekMsSUFBSSxJQUFJLENBQUMsNEJBQTRCLEVBQUU7WUFDbkMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUE7U0FDeEQ7SUFDTCxDQUFDO0lBRUgsS0FBSztRQUNKLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO0lBQ3ZCLENBQUM7O2lIQTFDVyxtQkFBbUI7cUdBQW5CLG1CQUFtQixpZUFJbEIsV0FBVyw4REF2RFo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7ZUEyQ0M7NEZBUUQsbUJBQW1CO2tCQXZEOUIsU0FBUzsrQkFFRSx1QkFBdUIsWUFFdkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7ZUEyQ0M7MEVBVUYsU0FBUztzQkFBakIsS0FBSztnQkFHRSx3QkFBd0I7c0JBRC9CLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFL0IsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyw0QkFBNEI7c0JBQXBDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHtBY3Rpb259IGZyb20gXCIuLi8uLi9hY3Rpb24vYWN0aW9uXCI7XHJcbmltcG9ydCB7TWF0Q2hlY2tib3gsIE1hdENoZWNrYm94Q2hhbmdlfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3hcIjtcclxuaW1wb3J0IHtBdWRpb0NsaXB9IGZyb20gXCIuLi9wZXJzaXN0b3JcIjtcclxuXHJcblxyXG4gIEBDb21wb25lbnQoe1xyXG5cclxuICAgIHNlbGVjdG9yOiAnYXVkaW8tZGlzcGxheS1jb250cm9sJyxcclxuXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxkaXYgI2NvbnRyb2xQYW5lbCBzdHlsZT1cImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjogcm93O1wiPlxyXG4gICAgICAgICAgICA8ZmllbGRzZXQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPGxlZ2VuZD5QbGF5PC9sZWdlbmQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicGxheVN0YXJ0QWN0aW9uPy5wZXJmb3JtKClcIiBbZGlzYWJsZWRdPVwicGxheVN0YXJ0QWN0aW9uPy5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJwbGF5U3RhcnRBY3Rpb24/LmRpc2FibGVkID8gJ2dyZXknIDogJ2dyZWVuJ1wiIG1hdFRvb2x0aXA9XCJQbGF5IGFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5wbGF5X2Fycm93PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicGxheVNlbGVjdGlvbkFjdGlvbj8ucGVyZm9ybSgpXCIgW2Rpc2FibGVkXT1cInBsYXlTZWxlY3Rpb25BY3Rpb24/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInBsYXlTZWxlY3Rpb25BY3Rpb24/LmRpc2FibGVkID8gJ2dyZXknIDogJ2dyZWVuJ1wiIG1hdFRvb2x0aXA9XCJQbGF5IHNlbGVjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5wbGF5X2NpcmNsZV9vdXRsaW5lPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicGxheVN0b3BBY3Rpb24/LnBlcmZvcm0oKVwiIFtkaXNhYmxlZF09XCJwbGF5U3RvcEFjdGlvbj8uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwicGxheVN0b3BBY3Rpb24/LmRpc2FibGVkID8gJ2dyZXknIDogJ3llbGxvdydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+c3RvcDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggI2F1dG9wbGF5U2VsZWN0aW9uQ2hlY2tib3ggKGNoYW5nZSk9XCJhdXRvUGxheVNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCI+QXV0b3BsYXkgb24gc2VsZWN0XHJcbiAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgPC9maWVsZHNldD5cclxuICAgICAgICAgICAgPGZpZWxkc2V0PlxyXG5cclxuICAgICAgICAgICAgICAgIDxsZWdlbmQ+Wm9vbTwvbGVnZW5kPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiem9vbUZpdFRvUGFuZWxBY3Rpb24/LnBlcmZvcm0oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ6b29tRml0VG9QYW5lbEFjdGlvbj8uZGlzYWJsZWRcIj57e3pvb21GaXRUb1BhbmVsQWN0aW9uPy5uYW1lfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInpvb21PdXRBY3Rpb24/LnBlcmZvcm0oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ6b29tT3V0QWN0aW9uPy5kaXNhYmxlZFwiPnt7em9vbU91dEFjdGlvbj8ubmFtZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJ6b29tSW5BY3Rpb24/LnBlcmZvcm0oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ6b29tSW5BY3Rpb24/LmRpc2FibGVkXCI+e3t6b29tSW5BY3Rpb24/Lm5hbWV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiem9vbVNlbGVjdGVkQWN0aW9uPy5wZXJmb3JtKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiem9vbVNlbGVjdGVkQWN0aW9uPy5kaXNhYmxlZFwiPnt7em9vbVNlbGVjdGVkQWN0aW9uPy5uYW1lfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9maWVsZHNldD5cclxuICAgICAgICAgICAgPGZpZWxkc2V0PlxyXG4gICAgICAgICAgICAgICAgPGxlZ2VuZD5TZWxlY3Rpb248L2xlZ2VuZD5cclxuICAgICAgICAgICAgICAgIHt7YXVkaW9DbGlwPy5zZWxlY3Rpb24/LmxlZnRGcmFtZX19IDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhdWRpb0NsaXA/LnNlbGVjdGlvblwiPnRvPC9zcGFuPiB7e2F1ZGlvQ2xpcD8uc2VsZWN0aW9uPy5yaWdodEZyYW1lfX1cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNsZWFyU2VsZWN0aW9uKClcIiBbZGlzYWJsZWRdPVwiYXVkaW9DbGlwPy5zZWxlY3Rpb249PW51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiaGFzU2VsZWN0aW9uKCkgPyAncmVkJyA6ICdncmV5J1wiIG1hdFRvb2x0aXA9XCJDbGVhciBzZWxlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8L2ZpZWxkc2V0PlxyXG4gICAgICAgIDwvZGl2PmAsXHJcbiAgICBzdHlsZXM6IFtcclxuICAgICAgICBgOmhvc3Qge1xyXG4gICAgICAgIGZsZXg6IDA7XHJcblxyXG4gICAgICB9YF1cclxuXHJcbiAgfSlcclxuXHRleHBvcnQgY2xhc3MgQXVkaW9EaXNwbGF5Q29udHJvbCB7XHJcblxyXG4gICAgQElucHV0KCkgYXVkaW9DbGlwOiBBdWRpb0NsaXB8bnVsbD1udWxsO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoTWF0Q2hlY2tib3gsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgICBwcml2YXRlIGF1dG9wbGF5U2VsZWN0ZWRDaGVja2JveDogTWF0Q2hlY2tib3h8bnVsbD1udWxsO1xyXG4gICAgQElucHV0KCkgcGxheVN0YXJ0QWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgcGxheVNlbGVjdGlvbkFjdGlvbjogQWN0aW9uPHZvaWQ+fHVuZGVmaW5lZDtcclxuICAgIEBJbnB1dCgpIHBsYXlTdG9wQWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgem9vbUluQWN0aW9uOiBBY3Rpb248dm9pZD58bnVsbD1udWxsO1xyXG4gICAgQElucHV0KCkgem9vbU91dEFjdGlvbjogQWN0aW9uPHZvaWQ+fG51bGw9bnVsbDtcclxuICAgIEBJbnB1dCgpIHpvb21GaXRUb1BhbmVsQWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgem9vbVNlbGVjdGVkQWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbjogQWN0aW9uPGJvb2xlYW4+fHVuZGVmaW5lZDtcclxuXHQgICBzdGF0dXM6c3RyaW5nfG51bGw9bnVsbDtcclxuXHJcblx0XHRhdWRpbzphbnk7XHJcblxyXG5cdFx0Y29uc3RydWN0b3IoKSB7fVxyXG5cclxuICAgIGNsZWFyU2VsZWN0aW9uKCl7XHJcbiAgICAgICAgaWYodGhpcy5hdWRpb0NsaXAhPW51bGwpe1xyXG4gICAgICAgICAgICB0aGlzLmF1ZGlvQ2xpcC5zZWxlY3Rpb249bnVsbFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAgIGhhc1NlbGVjdGlvbigpOmJvb2xlYW57XHJcbiAgICAgICAgICBsZXQgaHM9ZmFsc2U7XHJcbiAgICAgICAgICBpZih0aGlzLmF1ZGlvQ2xpcCl7XHJcbiAgICAgICAgICAgICAgaHM9KHRoaXMuYXVkaW9DbGlwLnNlbGVjdGlvbiE9bnVsbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gaHM7XHJcbiAgICAgIH1cclxuXHJcbiAgICBhdXRvUGxheVNlbGVjdGlvbkNoYW5nZShjaDogTWF0Q2hlY2tib3hDaGFuZ2UpIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbi5wZXJmb3JtKGNoLmNoZWNrZWQpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHRcdGVycm9yKCl7XHJcblx0XHRcdHRoaXMuc3RhdHVzID0gJ0VSUk9SJztcclxuXHRcdH1cclxuXHJcblxyXG4gICAgfVxyXG5cclxuIl19
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW9fZGlzcGxheV9jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL3VpL2F1ZGlvX2Rpc3BsYXlfY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUE7QUFFekQsT0FBTyxFQUFDLFdBQVcsRUFBb0IsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7O0FBMkR6RSxNQUFNLE9BQU8sbUJBQW1CO0lBa0IvQjtRQWhCVyxjQUFTLEdBQWlCLElBQUksQ0FBQztRQUdoQyw2QkFBd0IsR0FBbUIsSUFBSSxDQUFDO1FBSS9DLGlCQUFZLEdBQW9CLElBQUksQ0FBQztRQUNyQyxrQkFBYSxHQUFvQixJQUFJLENBQUM7UUFJL0MsV0FBTSxHQUFhLElBQUksQ0FBQztJQUlYLENBQUM7SUFFZCxjQUFjO1FBQ1YsSUFBRyxJQUFJLENBQUMsU0FBUyxJQUFFLElBQUksRUFBQztZQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUE7U0FDaEM7SUFDTCxDQUFDO0lBRUMsWUFBWTtRQUNSLElBQUksRUFBRSxHQUFDLEtBQUssQ0FBQztRQUNiLElBQUcsSUFBSSxDQUFDLFNBQVMsRUFBQztZQUNkLEVBQUUsR0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxJQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUgsdUJBQXVCLENBQUMsRUFBcUI7UUFDekMsSUFBSSxJQUFJLENBQUMsNEJBQTRCLEVBQUU7WUFDbkMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDekQ7SUFDTCxDQUFDO0lBRUgsS0FBSztRQUNKLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO0lBQ3ZCLENBQUM7O2lIQTFDVyxtQkFBbUI7cUdBQW5CLG1CQUFtQixpZUFJbEIsV0FBVyw4REF2RFo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7ZUEyQ0M7NEZBUUQsbUJBQW1CO2tCQXZEOUIsU0FBUzsrQkFFRSx1QkFBdUIsWUFFdkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7ZUEyQ0M7MEVBVUYsU0FBUztzQkFBakIsS0FBSztnQkFHRSx3QkFBd0I7c0JBRC9CLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFL0IsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyw0QkFBNEI7c0JBQXBDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHtBY3Rpb259IGZyb20gXCIuLi8uLi9hY3Rpb24vYWN0aW9uXCI7XHJcbmltcG9ydCB7TWF0Q2hlY2tib3gsIE1hdENoZWNrYm94Q2hhbmdlfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3hcIjtcclxuaW1wb3J0IHtBdWRpb0NsaXB9IGZyb20gXCIuLi9wZXJzaXN0b3JcIjtcclxuXHJcblxyXG4gIEBDb21wb25lbnQoe1xyXG5cclxuICAgIHNlbGVjdG9yOiAnYXVkaW8tZGlzcGxheS1jb250cm9sJyxcclxuXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxkaXYgI2NvbnRyb2xQYW5lbCBzdHlsZT1cImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjogcm93O1wiPlxyXG4gICAgICAgICAgICA8ZmllbGRzZXQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPGxlZ2VuZD5QbGF5PC9sZWdlbmQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicGxheVN0YXJ0QWN0aW9uPy5wZXJmb3JtKClcIiBbZGlzYWJsZWRdPVwicGxheVN0YXJ0QWN0aW9uPy5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJwbGF5U3RhcnRBY3Rpb24/LmRpc2FibGVkID8gJ2dyZXknIDogJ2dyZWVuJ1wiIG1hdFRvb2x0aXA9XCJQbGF5IGFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5wbGF5X2Fycm93PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicGxheVNlbGVjdGlvbkFjdGlvbj8ucGVyZm9ybSgpXCIgW2Rpc2FibGVkXT1cInBsYXlTZWxlY3Rpb25BY3Rpb24/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInBsYXlTZWxlY3Rpb25BY3Rpb24/LmRpc2FibGVkID8gJ2dyZXknIDogJ2dyZWVuJ1wiIG1hdFRvb2x0aXA9XCJQbGF5IHNlbGVjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5wbGF5X2NpcmNsZV9vdXRsaW5lPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicGxheVN0b3BBY3Rpb24/LnBlcmZvcm0oKVwiIFtkaXNhYmxlZF09XCJwbGF5U3RvcEFjdGlvbj8uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwicGxheVN0b3BBY3Rpb24/LmRpc2FibGVkID8gJ2dyZXknIDogJ3llbGxvdydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+c3RvcDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggI2F1dG9wbGF5U2VsZWN0aW9uQ2hlY2tib3ggKGNoYW5nZSk9XCJhdXRvUGxheVNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCI+QXV0b3BsYXkgb24gc2VsZWN0XHJcbiAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgPC9maWVsZHNldD5cclxuICAgICAgICAgICAgPGZpZWxkc2V0PlxyXG5cclxuICAgICAgICAgICAgICAgIDxsZWdlbmQ+Wm9vbTwvbGVnZW5kPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiem9vbUZpdFRvUGFuZWxBY3Rpb24/LnBlcmZvcm0oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ6b29tRml0VG9QYW5lbEFjdGlvbj8uZGlzYWJsZWRcIj57e3pvb21GaXRUb1BhbmVsQWN0aW9uPy5uYW1lfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInpvb21PdXRBY3Rpb24/LnBlcmZvcm0oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ6b29tT3V0QWN0aW9uPy5kaXNhYmxlZFwiPnt7em9vbU91dEFjdGlvbj8ubmFtZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJ6b29tSW5BY3Rpb24/LnBlcmZvcm0oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ6b29tSW5BY3Rpb24/LmRpc2FibGVkXCI+e3t6b29tSW5BY3Rpb24/Lm5hbWV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiem9vbVNlbGVjdGVkQWN0aW9uPy5wZXJmb3JtKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiem9vbVNlbGVjdGVkQWN0aW9uPy5kaXNhYmxlZFwiPnt7em9vbVNlbGVjdGVkQWN0aW9uPy5uYW1lfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9maWVsZHNldD5cclxuICAgICAgICAgICAgPGZpZWxkc2V0PlxyXG4gICAgICAgICAgICAgICAgPGxlZ2VuZD5TZWxlY3Rpb248L2xlZ2VuZD5cclxuICAgICAgICAgICAgICAgIHt7YXVkaW9DbGlwPy5zZWxlY3Rpb24/LmxlZnRGcmFtZX19IDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhdWRpb0NsaXA/LnNlbGVjdGlvblwiPnRvPC9zcGFuPiB7e2F1ZGlvQ2xpcD8uc2VsZWN0aW9uPy5yaWdodEZyYW1lfX1cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNsZWFyU2VsZWN0aW9uKClcIiBbZGlzYWJsZWRdPVwiYXVkaW9DbGlwPy5zZWxlY3Rpb249PW51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiaGFzU2VsZWN0aW9uKCkgPyAncmVkJyA6ICdncmV5J1wiIG1hdFRvb2x0aXA9XCJDbGVhciBzZWxlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8L2ZpZWxkc2V0PlxyXG4gICAgICAgIDwvZGl2PmAsXHJcbiAgICBzdHlsZXM6IFtcclxuICAgICAgICBgOmhvc3Qge1xyXG4gICAgICAgIGZsZXg6IDA7XHJcblxyXG4gICAgICB9YF1cclxuXHJcbiAgfSlcclxuXHRleHBvcnQgY2xhc3MgQXVkaW9EaXNwbGF5Q29udHJvbCB7XHJcblxyXG4gICAgQElucHV0KCkgYXVkaW9DbGlwOiBBdWRpb0NsaXB8bnVsbD1udWxsO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoTWF0Q2hlY2tib3gsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgICBwcml2YXRlIGF1dG9wbGF5U2VsZWN0ZWRDaGVja2JveDogTWF0Q2hlY2tib3h8bnVsbD1udWxsO1xyXG4gICAgQElucHV0KCkgcGxheVN0YXJ0QWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgcGxheVNlbGVjdGlvbkFjdGlvbjogQWN0aW9uPHZvaWQ+fHVuZGVmaW5lZDtcclxuICAgIEBJbnB1dCgpIHBsYXlTdG9wQWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgem9vbUluQWN0aW9uOiBBY3Rpb248dm9pZD58bnVsbD1udWxsO1xyXG4gICAgQElucHV0KCkgem9vbU91dEFjdGlvbjogQWN0aW9uPHZvaWQ+fG51bGw9bnVsbDtcclxuICAgIEBJbnB1dCgpIHpvb21GaXRUb1BhbmVsQWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgem9vbVNlbGVjdGVkQWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbjogQWN0aW9uPGJvb2xlYW4+fHVuZGVmaW5lZDtcclxuXHQgICBzdGF0dXM6c3RyaW5nfG51bGw9bnVsbDtcclxuXHJcblx0XHRhdWRpbzphbnk7XHJcblxyXG5cdFx0Y29uc3RydWN0b3IoKSB7fVxyXG5cclxuICAgIGNsZWFyU2VsZWN0aW9uKCl7XHJcbiAgICAgICAgaWYodGhpcy5hdWRpb0NsaXAhPW51bGwpe1xyXG4gICAgICAgICAgICB0aGlzLmF1ZGlvQ2xpcC5zZWxlY3Rpb249bnVsbFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAgIGhhc1NlbGVjdGlvbigpOmJvb2xlYW57XHJcbiAgICAgICAgICBsZXQgaHM9ZmFsc2U7XHJcbiAgICAgICAgICBpZih0aGlzLmF1ZGlvQ2xpcCl7XHJcbiAgICAgICAgICAgICAgaHM9KHRoaXMuYXVkaW9DbGlwLnNlbGVjdGlvbiE9bnVsbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gaHM7XHJcbiAgICAgIH1cclxuXHJcbiAgICBhdXRvUGxheVNlbGVjdGlvbkNoYW5nZShjaDogTWF0Q2hlY2tib3hDaGFuZ2UpIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbi5wZXJmb3JtKGNoLmNoZWNrZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblx0XHRlcnJvcigpe1xyXG5cdFx0XHR0aGlzLnN0YXR1cyA9ICdFUlJPUic7XHJcblx0XHR9XHJcblxyXG5cclxuICAgIH1cclxuXHJcbiJdfQ==