valtech-components 4.0.934 → 4.0.936

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.
@@ -1,29 +1,11 @@
1
1
  import { Injectable, signal } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- const CHESSIMALS_POWER_SAMPLES = {
4
- eagle: { src: 'assets/games/chessimals/eagle-cry.mp3', volume: 0.62 },
5
- bull: { src: 'assets/games/chessimals/bull.mp3', volume: 0.9 },
6
- kangaroo: { src: 'assets/games/chessimals/kangaroo-jump.mp3', volume: 0.82 },
7
- lion: { src: 'assets/games/chessimals/lion-roar.mp3', volume: 0.82 },
8
- };
9
- const CHESSIMALS_OUTCOME_SAMPLES = {
10
- victory: { src: 'assets/games/chessimals/tada.mp3', volume: 0.72 },
11
- defeat: { src: 'assets/games/chessimals/you-lose.mp3', volume: 0.72 },
12
- };
13
- const CHESSIMALS_MENU_MUSIC = {
14
- src: 'assets/games/chessimals/main-menu.mp3',
15
- volume: 0.32,
16
- };
17
- const CHESSIMALS_GAME_MUSIC = {
18
- src: 'assets/games/chessimals/Game.mp3',
19
- volume: 0.32,
20
- };
21
3
  export class RetroAudioService {
22
4
  constructor() {
23
5
  this.noteIndex = 0;
24
6
  this.activeSamples = new Set();
25
7
  this.activeBufferSources = new Set();
26
- this.defaultsReady = this.migrateChessimalsAudioDefaults();
8
+ this.defaultsReady = this.migrateAudioDefaults();
27
9
  this.enabled = signal(this.readEnabled());
28
10
  this.musicEnabled = signal(this.readBooleanSetting('val-mini-games-music-enabled', true));
29
11
  this.sfxEnabled = signal(this.readBooleanSetting('val-mini-games-sfx-enabled', true));
@@ -48,7 +30,7 @@ export class RetroAudioService {
48
30
  this.handleUserActivation = () => {
49
31
  if (!this.enabled() || !this.isDocumentVisible())
50
32
  return;
51
- this.preloadChessimalsSamples();
33
+ this.preloadGameSamples();
52
34
  if (this.pausedSampleMusic) {
53
35
  void this.resumeFromBackground();
54
36
  return;
@@ -106,29 +88,6 @@ export class RetroAudioService {
106
88
  async startMenuMusic() {
107
89
  await this.startMusic('menu');
108
90
  }
109
- async startChessimalsMenuMusic() {
110
- this.preloadChessimalsSamples();
111
- await this.startSampleMusic(CHESSIMALS_MENU_MUSIC);
112
- }
113
- async startChessimalsGameMusic() {
114
- this.preloadChessimalsSamples();
115
- await this.startSampleMusic(CHESSIMALS_GAME_MUSIC);
116
- }
117
- preloadChessimalsSamples() {
118
- Object.values(CHESSIMALS_POWER_SAMPLES).forEach((sample) => {
119
- void this.preloadSampleBuffer(sample.src);
120
- });
121
- Object.values(CHESSIMALS_OUTCOME_SAMPLES).forEach((sample) => {
122
- void this.preloadSampleBuffer(sample.src);
123
- });
124
- if (typeof Audio === 'undefined')
125
- return;
126
- [
127
- ...Object.values(CHESSIMALS_POWER_SAMPLES),
128
- CHESSIMALS_OUTCOME_SAMPLES.victory,
129
- CHESSIMALS_OUTCOME_SAMPLES.defeat,
130
- ].forEach((sample) => this.preloadSample(sample.src));
131
- }
132
91
  async startGameMusic() {
133
92
  await this.startMusic('game');
134
93
  }
@@ -212,16 +171,6 @@ export class RetroAudioService {
212
171
  simonPad(freq) {
213
172
  void this.tone(freq, 0.22, 'sine', 0.055);
214
173
  }
215
- chessimalsPowerPreview(power) {
216
- const tones = {
217
- eagle: 880,
218
- bull: 349.23,
219
- kangaroo: 659.25,
220
- lion: 523.25,
221
- };
222
- void this.tone(tones[power], 0.12, power === 'bull' ? 'sawtooth' : 'triangle', 0.038);
223
- window.setTimeout(() => void this.tone(tones[power] * 1.25, 0.07, 'sine', 0.018), 72);
224
- }
225
174
  simonStepOk() {
226
175
  void this.tone(880, 0.08, 'triangle', 0.035);
227
176
  }
@@ -294,93 +243,6 @@ export class RetroAudioService {
294
243
  ], 'triangle', 0.042, 62);
295
244
  window.setTimeout(() => void this.filteredNoise(0.18, 0.016, 'bandpass', 1800), 110);
296
245
  }
297
- chessimalsMove() {
298
- void this.sequence([
299
- [392, 0.045],
300
- [493.88, 0.055],
301
- ], 'triangle', 0.032, 48);
302
- window.setTimeout(() => void this.filteredNoise(0.035, 0.012, 'bandpass', 820), 8);
303
- }
304
- chessimalsBotMove() {
305
- void this.sequence([
306
- [329.63, 0.055],
307
- [246.94, 0.07],
308
- ], 'sawtooth', 0.024, 56);
309
- window.setTimeout(() => void this.filteredNoise(0.05, 0.01, 'lowpass', 420), 16);
310
- }
311
- chessimalsCapture() {
312
- void this.sequence([
313
- [174.61, 0.04],
314
- [246.94, 0.045],
315
- [587.33, 0.095],
316
- [783.99, 0.08],
317
- ], 'square', 0.046, 44);
318
- window.setTimeout(() => void this.sweep(96, 42, 0.18, 'sawtooth', 0.026), 20);
319
- window.setTimeout(() => void this.filteredNoise(0.18, 0.05, 'lowpass', 520), 18);
320
- window.setTimeout(() => void this.filteredNoise(0.07, 0.028, 'bandpass', 1800), 84);
321
- }
322
- chessimalsPower(power) {
323
- if (this.playChessimalsPowerSample(power))
324
- return;
325
- this.chessimalsPowerFallback(power);
326
- }
327
- chessimalsPowerFallback(power) {
328
- const notes = {
329
- eagle: [
330
- [659.25, 0.055],
331
- [880, 0.065],
332
- [1318.51, 0.12],
333
- ],
334
- bull: [
335
- [196, 0.075],
336
- [164.81, 0.075],
337
- [246.94, 0.13],
338
- ],
339
- kangaroo: [
340
- [392, 0.055],
341
- [0, 0.04],
342
- [783.99, 0.11],
343
- ],
344
- lion: [
345
- [261.63, 0.06],
346
- [392, 0.06],
347
- [523.25, 0.06],
348
- [783.99, 0.14],
349
- ],
350
- };
351
- void this.sequence(notes[power], power === 'bull' ? 'sawtooth' : 'triangle', 0.046, 58);
352
- if (power === 'eagle') {
353
- void this.sweep(720, 1568, 0.18, 'triangle', 0.028);
354
- void this.filteredNoise(0.22, 0.025, 'highpass', 1600);
355
- window.setTimeout(() => void this.filteredNoise(0.08, 0.018, 'bandpass', 2600), 92);
356
- window.setTimeout(() => void this.tone(1760, 0.055, 'sine', 0.018), 150);
357
- return;
358
- }
359
- if (power === 'bull') {
360
- window.setTimeout(() => void this.tone(82.41, 0.16, 'sawtooth', 0.038), 72);
361
- window.setTimeout(() => void this.sweep(138.59, 65.41, 0.18, 'sawtooth', 0.026), 118);
362
- window.setTimeout(() => void this.filteredNoise(0.16, 0.038, 'lowpass', 260), 36);
363
- window.setTimeout(() => void this.filteredNoise(0.055, 0.026, 'bandpass', 960), 170);
364
- return;
365
- }
366
- if (power === 'kangaroo') {
367
- window.setTimeout(() => void this.sweep(420, 940, 0.11, 'sine', 0.032), 88);
368
- window.setTimeout(() => void this.sweep(940, 520, 0.1, 'sine', 0.026), 190);
369
- window.setTimeout(() => void this.tone(261.63, 0.055, 'triangle', 0.018), 245);
370
- window.setTimeout(() => void this.filteredNoise(0.035, 0.018, 'bandpass', 1180), 218);
371
- return;
372
- }
373
- window.setTimeout(() => void this.sweep(164.81, 392, 0.24, 'sawtooth', 0.034), 70);
374
- window.setTimeout(() => void this.tone(98, 0.18, 'sawtooth', 0.02), 150);
375
- window.setTimeout(() => void this.filteredNoise(0.28, 0.032, 'bandpass', 340), 62);
376
- window.setTimeout(() => void this.sweep(196, 146.83, 0.22, 'sawtooth', 0.022), 116);
377
- }
378
- playChessimalsPowerSample(power) {
379
- const sample = CHESSIMALS_POWER_SAMPLES[power];
380
- if (this.playBufferedSample(sample))
381
- return true;
382
- return this.playSample(sample, () => this.chessimalsPowerFallback(power));
383
- }
384
246
  playSample(sample, fallback) {
385
247
  if (!this.canPlaySfx() || typeof Audio === 'undefined')
386
248
  return false;
@@ -434,58 +296,6 @@ export class RetroAudioService {
434
296
  return false;
435
297
  }
436
298
  }
437
- chessimalsVictory() {
438
- this.stopMusic();
439
- this.stopActiveSamples();
440
- if (this.playBufferedSample(CHESSIMALS_OUTCOME_SAMPLES.victory))
441
- return;
442
- if (this.playSample(CHESSIMALS_OUTCOME_SAMPLES.victory, () => this.chessimalsVictoryFallback()))
443
- return;
444
- this.chessimalsVictoryFallback();
445
- }
446
- chessimalsDefeat() {
447
- this.stopMusic();
448
- this.stopActiveSamples();
449
- if (this.playBufferedSample(CHESSIMALS_OUTCOME_SAMPLES.defeat))
450
- return;
451
- if (this.playSample(CHESSIMALS_OUTCOME_SAMPLES.defeat, () => this.lose()))
452
- return;
453
- this.lose();
454
- }
455
- chessimalsVictoryFallback() {
456
- void this.sequence([
457
- [196, 0.08],
458
- [261.63, 0.08],
459
- [329.63, 0.08],
460
- [392, 0.1],
461
- [523.25, 0.12],
462
- [783.99, 0.16],
463
- [1046.5, 0.22],
464
- ], 'triangle', 0.05, 72);
465
- window.setTimeout(() => void this.sweep(130.81, 65.41, 0.28, 'sawtooth', 0.02), 40);
466
- window.setTimeout(() => void this.sweep(523.25, 1567.98, 0.34, 'sine', 0.026), 240);
467
- window.setTimeout(() => void this.filteredNoise(0.16, 0.022, 'bandpass', 1400), 120);
468
- window.setTimeout(() => void this.sequence([[987.77, 0.08], [1318.51, 0.12]], 'triangle', 0.032, 86), 520);
469
- }
470
- chessimalsJoinRequest() {
471
- void this.sequence([
472
- [523.25, 0.055],
473
- [659.25, 0.06],
474
- [987.77, 0.12],
475
- ], 'triangle', 0.034, 58);
476
- window.setTimeout(() => void this.tone(1318.51, 0.075, 'sine', 0.02), 136);
477
- window.setTimeout(() => void this.filteredNoise(0.06, 0.01, 'highpass', 1800), 98);
478
- }
479
- chessimalsPowerUnlocked() {
480
- void this.sequence([
481
- [392, 0.055],
482
- [523.25, 0.055],
483
- [659.25, 0.08],
484
- [987.77, 0.13],
485
- ], 'triangle', 0.038, 64);
486
- window.setTimeout(() => void this.sweep(220, 880, 0.22, 'sine', 0.024), 70);
487
- window.setTimeout(() => void this.filteredNoise(0.24, 0.018, 'bandpass', 1200), 54);
488
- }
489
299
  readEnabled() {
490
300
  return this.readBooleanSetting('val-mini-games-audio', true);
491
301
  }
@@ -559,7 +369,11 @@ export class RetroAudioService {
559
369
  this.bufferPreloads.set(src, preload);
560
370
  return preload;
561
371
  }
562
- migrateChessimalsAudioDefaults() {
372
+ /** Sube a un valor audible los volumenes que quedaron en cero de una version
373
+ * previa. La clave de storage conserva el nombre viejo a proposito: cambiarla
374
+ * haria que la migracion se vuelva a correr y le pise el volumen a quien ya
375
+ * lo eligio. */
376
+ migrateAudioDefaults() {
563
377
  try {
564
378
  const migrationKey = 'val-mini-games-chessimals-audio-defaults-v2';
565
379
  if (localStorage.getItem(migrationKey) === '1')
@@ -579,6 +393,9 @@ export class RetroAudioService {
579
393
  }
580
394
  return true;
581
395
  }
396
+ /** Gancho para que un juego precargue sus propios samples en cuanto el usuario
397
+ * interactua (antes, el navegador no deja tocar audio). Vacio por defecto. */
398
+ preloadGameSamples() { }
582
399
  canPlayMusic() {
583
400
  return this.enabled() && this.musicEnabled() && this.musicVolume() > 0;
584
401
  }
@@ -840,7 +657,7 @@ export class RetroAudioService {
840
657
  oscillator.start();
841
658
  oscillator.stop(ctx.currentTime + duration + 0.02);
842
659
  }
843
- // Chessimals uses generated WebAudio layers instead of third-party samples,
660
+ // Los juegos generan sus capas con WebAudio en vez de usar samples de terceros,
844
661
  // avoiding licensing risk while keeping each animal power expressive.
845
662
  async filteredNoise(duration = 0.12, gainValue = 0.025, filterType = 'bandpass', frequency = 900) {
846
663
  if (!this.canPlaySfx())
@@ -945,4 +762,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
945
762
  type: Injectable,
946
763
  args: [{ providedIn: 'root' }]
947
764
  }], ctorParameters: () => [] });
948
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cm8tYXVkaW8uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvbWluaS1nYW1lcy9yZXRyby1hdWRpby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVFuRCxNQUFNLHdCQUF3QixHQUEwQztJQUN0RSxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUNyRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtJQUM5RCxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsMkNBQTJDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUM1RSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtDQUNyRSxDQUFDO0FBQ0YsTUFBTSwwQkFBMEIsR0FBRztJQUNqQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUNsRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtDQUN0RSxDQUFDO0FBQ0YsTUFBTSxxQkFBcUIsR0FBc0I7SUFDL0MsR0FBRyxFQUFFLHVDQUF1QztJQUM1QyxNQUFNLEVBQUUsSUFBSTtDQUNiLENBQUM7QUFDRixNQUFNLHFCQUFxQixHQUFzQjtJQUMvQyxHQUFHLEVBQUUsa0NBQWtDO0lBQ3ZDLE1BQU0sRUFBRSxJQUFJO0NBQ2IsQ0FBQztBQUdGLE1BQU0sT0FBTyxpQkFBaUI7SUEwQjVCO1FBdEJRLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFJTCxrQkFBYSxH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TUFBTSxHQUFHLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDakgsTUFBTSxVQUFVLEdBQUcsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN6RSxNQUFNLElBQUksR0FBbUIsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDckUsTUFBTSxJQUFJLEdBQUcsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN6RSxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ3hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDNUIsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7WUFDcEIsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2hELElBQUksSUFBSSxLQUFLLE1BQU07Z0JBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QyxJQUFJLElBQUksS0FB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SyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRCxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdkQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEYsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDekUsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLEtBQUssS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNyQixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM1RSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdEYsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEYsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUks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QkFBaUI7UUFDdkIsT0FBTyxPQUFPLFFBQVEsS0FBSyxXQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQzdELENBQUM7K0dBcmdDVSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQURKLE1BQU07OzRGQUNuQixpQkFBaUI7a0JBRDdCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbnR5cGUgTm90ZSA9IFtudW1iZXIsIG51bWJlcl07XG50eXBlIE1lbG9keU1vZGUgPSAnbWVudScgfCAnZ2FtZScgfCAnYnViYmxlJztcbnR5cGUgQ2hlc3NpbWFsc1Bvd2VyID0gJ2VhZ2xlJyB8ICdidWxsJyB8ICdrYW5nYXJvbycgfCAnbGlvbic7XG50eXBlIFNhbXBsZUNvbmZpZyA9IHsgc3JjOiBzdHJpbmc7IHZvbHVtZTogbnVtYmVyIH07XG50eXBlIFNhbXBsZU11c2ljQ29uZmlnID0geyBzcmM6IHN0cmluZzsgdm9sdW1lOiBudW1iZXIgfTtcblxuY29uc3QgQ0hFU1NJTUFMU19QT1dFUl9TQU1QTEVTOiBSZWNvcmQ8Q2hlc3NpbWFsc1Bvd2VyLCBTYW1wbGVDb25maWc+ID0ge1xuICBlYWdsZTogeyBzcmM6ICdhc3NldHMvZ2FtZXMvY2hlc3NpbWFscy9lYWdsZS1jcnkubXAzJywgdm9sdW1lOiAwLjYyIH0sXG4gIGJ1bGw6IHsgc3JjOiAnYXNzZXRzL2dhbWVzL2NoZXNzaW1hbHMvYnVsbC5tcDMnLCB2b2x1bWU6IDAuOSB9LFxuICBrYW5nYXJvbzogeyBzcmM6ICdhc3NldHMvZ2FtZXMvY2hlc3NpbWFscy9rYW5nYXJvby1qdW1wLm1wMycsIHZvbHVtZTogMC44MiB9LFxuICBsaW9uOiB7IHNyYzogJ2Fzc2V0cy9nYW1lcy9jaGVzc2ltYWxzL2xpb24tcm9hci5tcDMnLCB2b2x1bWU6IDAuODIgfSxcbn07XG5jb25zdCBDSEVTU0lNQUxTX09VVENPTUVfU0FNUExFUyA9IHtcbiAgdmljdG9yeTogeyBzcmM6ICdhc3NldHMvZ2FtZXMvY2hlc3NpbWFscy90YWRhLm1wMycsIHZvbHVtZTogMC43MiB9LFxuICBkZWZlYXQ6IHsgc3JjOiAnYXNzZXRzL2dhbWVzL2NoZXNzaW1hbHMveW91LWxvc2UubXAzJywgdm9sdW1lOiAwLjcyIH0sXG59O1xuY29uc3QgQ0hFU1NJTUFMU19NRU5VX01VU0lDOiBTYW1wbGVNdXNpY0NvbmZpZyA9IHtcbiAgc3JjOiAnYXNzZXRzL2dhbWVzL2NoZXNzaW1hbHMvbWFpbi1tZW51Lm1wMycsXG4gIHZvbHVtZTogMC4zMixcbn07XG5jb25zdCBDSEVTU0lNQUxTX0dBTUVfTVVTSUM6IFNhbXBsZU11c2ljQ29uZmlnID0ge1xuICBzcmM6ICdhc3NldHMvZ2FtZXMvY2hlc3NpbWFscy9HYW1lLm1wMycsXG4gIHZvbHVtZTogMC4zMixcbn07XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUmV0cm9BdWRpb1NlcnZpY2Uge1xuICBwcml2YXRlIGNvbnRleHQ/OiBBdWRpb0NvbnRleHQ7XG4gIHByaXZhdGUgbWFzdGVyR2Fpbj86IEdhaW5Ob2RlO1xuICBwcml2YXRlIG11c2ljVGltZXI/OiBudW1iZXI7XG4gIHByaXZhdGUgbm90ZUluZGV4ID0gMDtcbiAgcHJpdmF0ZSBhY3RpdmVNZWxvZHk/OiBNZWxvZHlNb2RlO1xuICBwcml2YXRlIHBhdXNlZE1lbG9keT86IE1lbG9keU1vZGU7XG4gIHByaXZhdGUgc3VzcGVuZFRpbWVyPzogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2ZVNhbXBsZXMgPSBuZXcgU2V0PEhUTUxBdWRpb0VsZW1lbnQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZlQnVmZmVyU291cmNlcyA9IG5ldyBTZXQ8QXVkaW9CdWZmZXJTb3VyY2VOb2RlPigpO1xuICBwcml2YXRlIHNhbXBsZU11c2ljPzogSFRNTEF1ZGlvRWxlbWVudDtcbiAgcHJpdmF0ZSBzYW1wbGVNdXNpY0NvbmZpZz86IFNhbXBsZU11c2ljQ29uZmlnO1xuICBwcml2YXRlIHNhbXBsZU11c2ljU291cmNlPzogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlO1xuICBwcml2YXRlIHNhbXBsZU11c2ljR2Fpbj86IEdhaW5Ob2RlO1xuICBwcml2YXRlIHBhdXNlZFNhbXBsZU11c2ljPzogU2FtcGxlTXVzaWNDb25maWc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0c1JlYWR5ID0gdGhpcy5taWdyYXRlQ2hlc3NpbWFsc0F1ZGlvRGVmYXVsdHMoKTtcbiAgcmVhZG9ubHkgZW5hYmxlZCA9IHNpZ25hbDxib29sZWFuPih0aGlzLnJlYWRFbmFibGVkKCkpO1xuICByZWFkb25seSBtdXNpY0VuYWJsZWQgPSBzaWduYWw8Ym9vbGVhbj4odGhpcy5yZWFkQm9vbGVhblNldHRpbmcoJ3ZhbC1taW5pLWdhbWVzLW11c2ljLWVuYWJsZWQnLCB0cnVlKSk7XG4gIHJlYWRvbmx5IHNmeEVuYWJsZWQgPSBzaWduYWw8Ym9vbGVhbj4odGhpcy5yZWFkQm9vbGVhblNldHRpbmcoJ3ZhbC1taW5pLWdhbWVzLXNmeC1lbmFibGVkJywgdHJ1ZSkpO1xuICByZWFkb25seSBtdXNpY1ZvbHVtZSA9IHNpZ25hbDxudW1iZXI+KHRoaXMucmVhZFZvbHVtZVNldHRpbmcoJ3ZhbC1taW5pLWdhbWVzLW11c2ljLXZvbHVtZScsIDAuMjUpKTtcbiAgcmVhZG9ubHkgc2Z4Vm9sdW1lID0gc2lnbmFsPG51bWJlcj4odGhpcy5yZWFkVm9sdW1lU2V0dGluZygndmFsLW1pbmktZ2FtZXMtc2Z4LXZvbHVtZScsIDAuOCkpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNhbXBsZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEhUTUxBdWRpb0VsZW1lbnQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnVmZmVyQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgQXVkaW9CdWZmZXI+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnVmZmVyUHJlbG9hZHMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTx2b2lkPj4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIHRoaXMuaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMuaGFuZGxlVXNlckFjdGl2YXRpb24sIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLmhhbmRsZVVzZXJBY3RpdmF0aW9uLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5oYW5kbGVVc2VyQWN0aXZhdGlvbik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BhZ2VoaWRlJywgdGhpcy5oYW5kbGVQYWdlSGlkZSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncGFnZXNob3cnLCB0aGlzLmhhbmRsZVBhZ2VTaG93KTtcbiAgICB9XG4gIH1cblxuICBzZXRFbmFibGVkKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5lbmFibGVkLnNldCh2YWx1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd2YWwtbWluaS1nYW1lcy1hdWRpbycsIHZhbHVlID8gJzEnIDogJzAnKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGxvY2FsU3RvcmFnZSBwdWVkZSBubyBlc3RhciBkaXNwb25pYmxlIGVuIFNTUi90ZXN0cy5cbiAgICB9XG4gICAgaWYgKCF2YWx1ZSkgdGhpcy5zdG9wTXVzaWMoKTtcbiAgfVxuXG4gIHNldE11c2ljRW5hYmxlZCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMubXVzaWNFbmFibGVkLnNldCh2YWx1ZSk7XG4gICAgdGhpcy53cml0ZVNldHRpbmcoJ3ZhbC1taW5pLWdhbWVzLW11c2ljLWVuYWJsZWQnLCB2YWx1ZSA/ICcxJyA6ICcwJyk7XG4gICAgaWYgKCF2YWx1ZSkgdGhpcy5zdG9wTXVzaWMoKTtcbiAgfVxuXG4gIHNldFNmeEVuYWJsZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNmeEVuYWJsZWQuc2V0KHZhbHVlKTtcbiAgICB0aGlzLndyaXRlU2V0dGluZygndmFsLW1pbmktZ2FtZXMtc2Z4LWVuYWJsZWQnLCB2YWx1ZSA/ICcxJyA6ICcwJyk7XG4gIH1cblxuICBzZXRNdXNpY1ZvbHVtZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgdm9sdW1lID0gdGhpcy5ub3JtYWxpemVWb2x1bWUodmFsdWUpO1xuICAgIHRoaXMubXVzaWNWb2x1bWUuc2V0KHZvbHVtZSk7XG4gICAgdGhpcy53cml0ZVNldHRpbmcoJ3ZhbC1taW5pLWdhbWVzLW11c2ljLXZvbHVtZScsIGAke3ZvbHVtZX1gKTtcbiAgICBpZiAodm9sdW1lIDw9IDApIHtcbiAgICAgIHRoaXMuc3RvcE11c2ljKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYXBwbHlTYW1wbGVNdXNpY1ZvbHVtZSgpO1xuICB9XG5cbiAgc2V0U2Z4Vm9sdW1lKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB2b2x1bWUgPSB0aGlzLm5vcm1hbGl6ZVZvbHVtZSh2YWx1ZSk7XG4gICAgdGhpcy5zZnhWb2x1bWUuc2V0KHZvbHVtZSk7XG4gICAgdGhpcy53cml0ZVNldHRpbmcoJ3ZhbC1taW5pLWdhbWVzLXNmeC12b2x1bWUnLCBgJHt2b2x1bWV9YCk7XG4gICAgdGhpcy5hcHBseUFjdGl2ZVNhbXBsZVZvbHVtZXMoKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0TWVudU11c2ljKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc3RhcnRNdXNpYygnbWVudScpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRDaGVzc2ltYWxzTWVudU11c2ljKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucHJlbG9hZENoZXNzaW1hbHNTYW1wbGVzKCk7XG4gICAgYXdhaXQgdGhpcy5zdGFydFNhbXBsZU11c2ljKENIRVNTSU1BTFNfTUVOVV9NVVNJQyk7XG4gIH1cblxuICBhc3luYyBzdGFydENoZXNzaW1hbHNHYW1lTXVzaWMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5wcmVsb2FkQ2hlc3NpbWFsc1NhbXBsZXMoKTtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0U2FtcGxlTXVzaWMoQ0hFU1NJTUFMU19HQU1FX01VU0lDKTtcbiAgfVxuXG4gIHByZWxvYWRDaGVzc2ltYWxzU2FtcGxlcygpOiB2b2lkIHtcbiAgICBPYmplY3QudmFsdWVzKENIRVNTSU1BTFNfUE9XRVJfU0FNUExFUykuZm9yRWFjaCgoc2FtcGxlKSA9PiB7XG4gICAgICB2b2lkIHRoaXMucHJlbG9hZFNhbXBsZUJ1ZmZlcihzYW1wbGUuc3JjKTtcbiAgICB9KTtcbiAgICBPYmplY3QudmFsdWVzKENIRVNTSU1BTFNfT1VUQ09NRV9TQU1QTEVTKS5mb3JFYWNoKChzYW1wbGUpID0+IHtcbiAgICAgIHZvaWQgdGhpcy5wcmVsb2FkU2FtcGxlQnVmZmVyKHNhbXBsZS5zcmMpO1xuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgQXVkaW8gPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgW1xuICAgICAgLi4uT2JqZWN0LnZhbHVlcyhDSEVTU0lNQUxTX1BPV0VSX1NBTVBMRVMpLFxuICAgICAgQ0hFU1NJTUFMU19PVVRDT01FX1NBTVBMRVMudmljdG9yeSxcbiAgICAgIENIRVNTSU1BTFNfT1VUQ09NRV9TQU1QTEVTLmRlZmVhdCxcbiAgICBdLmZvckVhY2goKHNhbXBsZSkgPT4gdGhpcy5wcmVsb2FkU2FtcGxlKHNhbXBsZS5zcmMpKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0R2FtZU11c2ljKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc3RhcnRNdXNpYygnZ2FtZScpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRCdWJibGVCbGl0ek11c2ljKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc3RhcnRNdXNpYygnYnViYmxlJyk7XG4gIH1cblxuICBhc3luYyBzdGFydE11c2ljKG1vZGU6IE1lbG9keU1vZGUgPSAnZ2FtZScpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2FuUGxheU11c2ljKCkpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuaXNEb2N1bWVudFZpc2libGUoKSkge1xuICAgICAgdGhpcy5wYXVzZWRNZWxvZHkgPSBtb2RlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLndha2VBdWRpbygpO1xuICAgIGlmICh0aGlzLm11c2ljVGltZXIgJiYgdGhpcy5hY3RpdmVNZWxvZHkgPT09IG1vZGUpIHJldHVybjtcbiAgICB0aGlzLnN0b3BNdXNpYygpO1xuICAgIHRoaXMuZmFkZU1hc3RlclRvKDEsIDAuMjQpO1xuICAgIHRoaXMuYWN0aXZlTWVsb2R5ID0gbW9kZTtcbiAgICB0aGlzLm5vdGVJbmRleCA9IDA7XG4gICAgY29uc3QgbWVsb2R5ID0gbW9kZSA9PT0gJ21lbnUnID8gdGhpcy5tZW51TWVsb2R5KCkgOiBtb2RlID09PSAnYnViYmxlJyA/IHRoaXMuYnViYmxlTWVsb2R5KCkgOiB0aGlzLmdhbWVNZWxvZHkoKTtcbiAgICBjb25zdCBpbnRlcnZhbE1zID0gbW9kZSA9PT0gJ21lbnUnID8gNjQwIDogbW9kZSA9PT0gJ2J1YmJsZScgPyA3NjAgOiAxOTA7XG4gICAgY29uc3Qgd2F2ZTogT3NjaWxsYXRvclR5cGUgPSBtb2RlID09PSAnZ2FtZScgPyAnc3F1YXJlJyA6ICd0cmlhbmdsZSc7XG4gICAgY29uc3QgZ2FpbiA9IG1vZGUgPT09ICdtZW51JyA/IDAuMDE4IDogbW9kZSA9PT0gJ2J1YmJsZScgPyAwLjAxNCA6IDAuMDI1O1xuICAgIHRoaXMubXVzaWNUaW1lciA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBzdGVwID0gdGhpcy5ub3RlSW5kZXg7XG4gICAgICBjb25zdCBbZnJlcSwgZHVyYXRpb25dID0gbWVsb2R5W3RoaXMubm90ZUluZGV4ICUgbWVsb2R5Lmxlbmd0aF07XG4gICAgICB0aGlzLm5vdGVJbmRleCArPSAxO1xuICAgICAgdm9pZCB0aGlzLm11c2ljVG9uZShmcmVxLCBkdXJhdGlvbiwgd2F2ZSwgZ2Fpbik7XG4gICAgICBpZiAobW9kZSA9PT0gJ21lbnUnKSB0aGlzLnNhdmFubmFQdWxzZShzdGVwKTtcbiAgICAgIGlmIChtb2RlID09PSAnYnViYmxlJykgdGhpcy5idWJibGVBbWJpZW50UHVsc2Uoc3RlcCk7XG4gICAgfSwgaW50ZXJ2YWxNcyk7XG4gIH1cblxuICBzdG9wTXVzaWMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubXVzaWNUaW1lcikge1xuICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5tdXNpY1RpbWVyKTtcbiAgICAgIHRoaXMubXVzaWNUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVNZWxvZHkgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wYXVzZWRNZWxvZHkgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wYXVzZWRTYW1wbGVNdXNpYyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnN0b3BTYW1wbGVNdXNpYygpO1xuICB9XG5cbiAgZmxpcCgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMudG9uZSg0NDAsIDAuMDU1LCAnc3F1YXJlJywgMC4wNSk7XG4gIH1cblxuICBtYXRjaCgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuc2VxdWVuY2UoW1xuICAgICAgWzY2MCwgMC4wOF0sXG4gICAgICBbODgwLCAwLjFdLFxuICAgICAgWzk5MCwgMC4xMl0sXG4gICAgXSk7XG4gIH1cblxuICBtaXNzKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShbXG4gICAgICBbMjIwLCAwLjA4XSxcbiAgICAgIFsxNzQuNjEsIDAuMTJdLFxuICAgIF0pO1xuICB9XG5cbiAgd2luKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcE11c2ljKCk7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFtcbiAgICAgIFs1MjMuMjUsIDAuMDldLFxuICAgICAgWzY1OS4yNSwgMC4wOV0sXG4gICAgICBbNzgzLjk5LCAwLjA5XSxcbiAgICAgIFsxMDQ2LjUsIDAuMTRdLFxuICAgICAgWzEzMTguNTEsIDAuMjJdLFxuICAgICAgWzE1NjcuOTgsIDAuMjZdLFxuICAgIF0pO1xuICB9XG5cbiAgbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BNdXNpYygpO1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShbXG4gICAgICBbMjkzLjY2LCAwLjEyXSxcbiAgICAgIFsyNDYuOTQsIDAuMTJdLFxuICAgICAgWzE5NiwgMC4yXSxcbiAgICBdKTtcbiAgfVxuXG4gIHNpbW9uUGFkKGZyZXE6IG51bWJlcik6IHZvaWQge1xuICAgIHZvaWQgdGhpcy50b25lKGZyZXEsIDAuMjIsICdzaW5lJywgMC4wNTUpO1xuICB9XG5cbiAgY2hlc3NpbWFsc1Bvd2VyUHJldmlldyhwb3dlcjogQ2hlc3NpbWFsc1Bvd2VyKTogdm9pZCB7XG4gICAgY29uc3QgdG9uZXM6IFJlY29yZDxDaGVzc2ltYWxzUG93ZXIsIG51bWJlcj4gPSB7XG4gICAgICBlYWdsZTogODgwLFxuICAgICAgYnVsbDogMzQ5LjIzLFxuICAgICAga2FuZ2Fyb286IDY1OS4yNSxcbiAgICAgIGxpb246IDUyMy4yNSxcbiAgICB9O1xuICAgIHZvaWQgdGhpcy50b25lKHRvbmVzW3Bvd2VyXSwgMC4xMiwgcG93ZXIgPT09ICdidWxsJyA/ICdzYXd0b290aCcgOiAndHJpYW5nbGUnLCAwLjAzOCk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnRvbmUodG9uZXNbcG93ZXJdICogMS4yNSwgMC4wNywgJ3NpbmUnLCAwLjAxOCksIDcyKTtcbiAgfVxuXG4gIHNpbW9uU3RlcE9rKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy50b25lKDg4MCwgMC4wOCwgJ3RyaWFuZ2xlJywgMC4wMzUpO1xuICB9XG5cbiAgc2ltb25Sb3VuZE9rKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShbXG4gICAgICBbNjU5LjI1LCAwLjA4XSxcbiAgICAgIFs4ODAsIDAuMDhdLFxuICAgICAgWzExNzQuNjYsIDAuMTJdLFxuICAgIF0pO1xuICB9XG5cbiAgc2ltb25GYWlsKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShbXG4gICAgICBbMTk2LCAwLjEyXSxcbiAgICAgIFsxNDYuODMsIDAuMThdLFxuICAgIF0pO1xuICB9XG5cbiAgYnViYmxlUG9wKHNpemUgPSAyLCBjb21ibyA9IDEpOiB2b2lkIHtcbiAgICBjb25zdCBzYWZlU2l6ZSA9IE1hdGgubWF4KDIsIE1hdGgubWluKDEyLCBNYXRoLnJvdW5kKHNpemUpKSk7XG4gICAgY29uc3Qgc2FmZUNvbWJvID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oOSwgTWF0aC5yb3VuZChjb21ibykpKTtcbiAgICBjb25zdCBiYXNlID0gNTIwICsgc2FmZVNpemUgKiAxODtcbiAgICB2b2lkIHRoaXMuZmlsdGVyZWROb2lzZSgwLjA2NSwgMC4wMTggKyBzYWZlU2l6ZSAqIDAuMDAxOCwgJ2JhbmRwYXNzJywgMTIwMCArIHNhZmVTaXplICogODUpO1xuICAgIHZvaWQgdGhpcy5zd2VlcChiYXNlLCBiYXNlICogMS45LCAwLjA5LCAnc2luZScsIDAuMDI2ICsgc2FmZVNpemUgKiAwLjAwMTQpO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy50b25lKGJhc2UgKiAxLjI1LCAwLjA1NSwgJ3RyaWFuZ2xlJywgMC4wMTgpLCAzOCk7XG4gICAgaWYgKHNhZmVTaXplID49IDUgfHwgc2FmZUNvbWJvID4gMSkge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmJ1YmJsZUNvbWJvKHNhZmVDb21ibyksIDgyKTtcbiAgICB9XG4gIH1cblxuICBidWJibGVDb21ibyhjb21ibyA9IDEpOiB2b2lkIHtcbiAgICBjb25zdCBzYWZlQ29tYm8gPSBNYXRoLm1heCgxLCBNYXRoLm1pbig5LCBNYXRoLnJvdW5kKGNvbWJvKSkpO1xuICAgIGNvbnN0IHJvb3QgPSA2NjAgKyBzYWZlQ29tYm8gKiAyNjtcbiAgICB2b2lkIHRoaXMuc2VxdWVuY2UoXG4gICAgICBbXG4gICAgICAgIFtyb290LCAwLjA0NV0sXG4gICAgICAgIFtyb290ICogMS4yNSwgMC4wNTVdLFxuICAgICAgICBbcm9vdCAqIDEuNSwgMC4wN10sXG4gICAgICBdLFxuICAgICAgJ3RyaWFuZ2xlJyxcbiAgICAgIDAuMDI0ICsgc2FmZUNvbWJvICogMC4wMDE2LFxuICAgICAgNDIsXG4gICAgKTtcbiAgfVxuXG4gIGJ1YmJsZUludmFsaWQoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFxuICAgICAgW1xuICAgICAgICBbMjQ2Ljk0LCAwLjA1NV0sXG4gICAgICAgIFsxOTYsIDAuMDg1XSxcbiAgICAgIF0sXG4gICAgICAnc2luZScsXG4gICAgICAwLjAzNCxcbiAgICAgIDU0LFxuICAgICk7XG4gIH1cblxuICBidWJibGVTZXR0bGUoZHJvcCA9IDEpOiB2b2lkIHtcbiAgICBjb25zdCBzYWZlRHJvcCA9IE1hdGgubWF4KDEsIE1hdGgubWluKDksIE1hdGgucm91bmQoZHJvcCkpKTtcbiAgICB2b2lkIHRoaXMuZmlsdGVyZWROb2lzZSgwLjA1NSwgMC4wMDkgKyBzYWZlRHJvcCAqIDAuMDAxLCAnbG93cGFzcycsIDM2MCArIHNhZmVEcm9wICogMjgpO1xuICAgIHZvaWQgdGhpcy50b25lKDE2NC44MSArIHNhZmVEcm9wICogOCwgMC4wNDUsICd0cmlhbmdsZScsIDAuMDEyKTtcbiAgfVxuXG4gIGJ1YmJsZVNodWZmbGUoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFxuICAgICAgW1xuICAgICAgICBbMzkyLCAwLjA0XSxcbiAgICAgICAgWzUyMy4yNSwgMC4wNF0sXG4gICAgICAgIFs2NTkuMjUsIDAuMDVdLFxuICAgICAgICBbNzgzLjk5LCAwLjA3XSxcbiAgICAgIF0sXG4gICAgICAnc2luZScsXG4gICAgICAwLjAyNCxcbiAgICAgIDM4LFxuICAgICk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4xNiwgMC4wMTgsICdiYW5kcGFzcycsIDk1MCksIDI4KTtcbiAgfVxuXG4gIGJ1YmJsZUZldmVyKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5zd2VlcCgzOTIsIDE1NjcuOTgsIDAuMjQsICd0cmlhbmdsZScsIDAuMDM0KTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuc2VxdWVuY2UoW1s5ODcuNzcsIDAuMDU1XSwgWzEzMTguNTEsIDAuMDg1XV0sICdzaW5lJywgMC4wMjUsIDQ4KSwgMTI4KTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuZmlsdGVyZWROb2lzZSgwLjEyLCAwLjAxNCwgJ2hpZ2hwYXNzJywgMjQwMCksIDcyKTtcbiAgfVxuXG4gIGJ1YmJsZUZpbmlzaCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BNdXNpYygpO1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShcbiAgICAgIFtcbiAgICAgICAgWzUyMy4yNSwgMC4wN10sXG4gICAgICAgIFs2NTkuMjUsIDAuMDddLFxuICAgICAgICBbNzgzLjk5LCAwLjA4XSxcbiAgICAgICAgWzEwNDYuNSwgMC4xM10sXG4gICAgICAgIFsxMzE4LjUxLCAwLjE4XSxcbiAgICAgIF0sXG4gICAgICAndHJpYW5nbGUnLFxuICAgICAgMC4wNDIsXG4gICAgICA2MixcbiAgICApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMTgsIDAuMDE2LCAnYmFuZHBhc3MnLCAxODAwKSwgMTEwKTtcbiAgfVxuXG4gIGNoZXNzaW1hbHNNb3ZlKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShcbiAgICAgIFtcbiAgICAgICAgWzM5MiwgMC4wNDVdLFxuICAgICAgICBbNDkzLjg4LCAwLjA1NV0sXG4gICAgICBdLFxuICAgICAgJ3RyaWFuZ2xlJyxcbiAgICAgIDAuMDMyLFxuICAgICAgNDgsXG4gICAgKTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuZmlsdGVyZWROb2lzZSgwLjAzNSwgMC4wMTIsICdiYW5kcGFzcycsIDgyMCksIDgpO1xuICB9XG5cbiAgY2hlc3NpbWFsc0JvdE1vdmUoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFxuICAgICAgW1xuICAgICAgICBbMzI5LjYzLCAwLjA1NV0sXG4gICAgICAgIFsyNDYuOTQsIDAuMDddLFxuICAgICAgXSxcbiAgICAgICdzYXd0b290aCcsXG4gICAgICAwLjAyNCxcbiAgICAgIDU2LFxuICAgICk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4wNSwgMC4wMSwgJ2xvd3Bhc3MnLCA0MjApLCAxNik7XG4gIH1cblxuICBjaGVzc2ltYWxzQ2FwdHVyZSgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuc2VxdWVuY2UoXG4gICAgICBbXG4gICAgICAgIFsxNzQuNjEsIDAuMDRdLFxuICAgICAgICBbMjQ2Ljk0LCAwLjA0NV0sXG4gICAgICAgIFs1ODcuMzMsIDAuMDk1XSxcbiAgICAgICAgWzc4My45OSwgMC4wOF0sXG4gICAgICBdLFxuICAgICAgJ3NxdWFyZScsXG4gICAgICAwLjA0NixcbiAgICAgIDQ0LFxuICAgICk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDk2LCA0MiwgMC4xOCwgJ3Nhd3Rvb3RoJywgMC4wMjYpLCAyMCk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4xOCwgMC4wNSwgJ2xvd3Bhc3MnLCA1MjApLCAxOCk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4wNywgMC4wMjgsICdiYW5kcGFzcycsIDE4MDApLCA4NCk7XG4gIH1cblxuICBjaGVzc2ltYWxzUG93ZXIocG93ZXI6IENoZXNzaW1hbHNQb3dlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLnBsYXlDaGVzc2ltYWxzUG93ZXJTYW1wbGUocG93ZXIpKSByZXR1cm47XG4gICAgdGhpcy5jaGVzc2ltYWxzUG93ZXJGYWxsYmFjayhwb3dlcik7XG4gIH1cblxuICBwcml2YXRlIGNoZXNzaW1hbHNQb3dlckZhbGxiYWNrKHBvd2VyOiBDaGVzc2ltYWxzUG93ZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3RlczogUmVjb3JkPENoZXNzaW1hbHNQb3dlciwgTm90ZVtdPiA9IHtcbiAgICAgIGVhZ2xlOiBbXG4gICAgICAgIFs2NTkuMjUsIDAuMDU1XSxcbiAgICAgICAgWzg4MCwgMC4wNjVdLFxuICAgICAgICBbMTMxOC41MSwgMC4xMl0sXG4gICAgICBdLFxuICAgICAgYnVsbDogW1xuICAgICAgICBbMTk2LCAwLjA3NV0sXG4gICAgICAgIFsxNjQuODEsIDAuMDc1XSxcbiAgICAgICAgWzI0Ni45NCwgMC4xM10sXG4gICAgICBdLFxuICAgICAga2FuZ2Fyb286IFtcbiAgICAgICAgWzM5MiwgMC4wNTVdLFxuICAgICAgICBbMCwgMC4wNF0sXG4gICAgICAgIFs3ODMuOTksIDAuMTFdLFxuICAgICAgXSxcbiAgICAgIGxpb246IFtcbiAgICAgICAgWzI2MS42MywgMC4wNl0sXG4gICAgICAgIFszOTIsIDAuMDZdLFxuICAgICAgICBbNTIzLjI1LCAwLjA2XSxcbiAgICAgICAgWzc4My45OSwgMC4xNF0sXG4gICAgICBdLFxuICAgIH07XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKG5vdGVzW3Bvd2VyXSwgcG93ZXIgPT09ICdidWxsJyA/ICdzYXd0b290aCcgOiAndHJpYW5nbGUnLCAwLjA0NiwgNTgpO1xuICAgIGlmIChwb3dlciA9PT0gJ2VhZ2xlJykge1xuICAgICAgdm9pZCB0aGlzLnN3ZWVwKDcyMCwgMTU2OCwgMC4xOCwgJ3RyaWFuZ2xlJywgMC4wMjgpO1xuICAgICAgdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4yMiwgMC4wMjUsICdoaWdocGFzcycsIDE2MDApO1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4wOCwgMC4wMTgsICdiYW5kcGFzcycsIDI2MDApLCA5Mik7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMudG9uZSgxNzYwLCAwLjA1NSwgJ3NpbmUnLCAwLjAxOCksIDE1MCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwb3dlciA9PT0gJ2J1bGwnKSB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMudG9uZSg4Mi40MSwgMC4xNiwgJ3Nhd3Rvb3RoJywgMC4wMzgpLCA3Mik7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuc3dlZXAoMTM4LjU5LCA2NS40MSwgMC4xOCwgJ3Nhd3Rvb3RoJywgMC4wMjYpLCAxMTgpO1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4xNiwgMC4wMzgsICdsb3dwYXNzJywgMjYwKSwgMzYpO1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4wNTUsIDAuMDI2LCAnYmFuZHBhc3MnLCA5NjApLCAxNzApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocG93ZXIgPT09ICdrYW5nYXJvbycpIHtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5zd2VlcCg0MjAsIDk0MCwgMC4xMSwgJ3NpbmUnLCAwLjAzMiksIDg4KTtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5zd2VlcCg5NDAsIDUyMCwgMC4xLCAnc2luZScsIDAuMDI2KSwgMTkwKTtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy50b25lKDI2MS42MywgMC4wNTUsICd0cmlhbmdsZScsIDAuMDE4KSwgMjQ1KTtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMDM1LCAwLjAxOCwgJ2JhbmRwYXNzJywgMTE4MCksIDIxOCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5zd2VlcCgxNjQuODEsIDM5MiwgMC4yNCwgJ3Nhd3Rvb3RoJywgMC4wMzQpLCA3MCk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnRvbmUoOTgsIDAuMTgsICdzYXd0b290aCcsIDAuMDIpLCAxNTApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMjgsIDAuMDMyLCAnYmFuZHBhc3MnLCAzNDApLCA2Mik7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDE5NiwgMTQ2LjgzLCAwLjIyLCAnc2F3dG9vdGgnLCAwLjAyMiksIDExNik7XG4gIH1cblxuICBwcml2YXRlIHBsYXlDaGVzc2ltYWxzUG93ZXJTYW1wbGUocG93ZXI6IENoZXNzaW1hbHNQb3dlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNhbXBsZSA9IENIRVNTSU1BTFNfUE9XRVJfU0FNUExFU1twb3dlcl07XG4gICAgaWYgKHRoaXMucGxheUJ1ZmZlcmVkU2FtcGxlKHNhbXBsZSkpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiB0aGlzLnBsYXlTYW1wbGUoc2FtcGxlLCAoKSA9PiB0aGlzLmNoZXNzaW1hbHNQb3dlckZhbGxiYWNrKHBvd2VyKSk7XG4gIH1cblxuICBwcml2YXRlIHBsYXlTYW1wbGUoc2FtcGxlOiBTYW1wbGVDb25maWcsIGZhbGxiYWNrOiAoKSA9PiB2b2lkKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNhblBsYXlTZngoKSB8fCB0eXBlb2YgQXVkaW8gPT09ICd1bmRlZmluZWQnKSByZXR1cm4gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuc2FtcGxlQ2FjaGUuZ2V0KHNhbXBsZS5zcmMpO1xuICAgICAgY29uc3QgYXVkaW8gPSBjYWNoZWQgPyAoY2FjaGVkLmNsb25lTm9kZSh0cnVlKSBhcyBIVE1MQXVkaW9FbGVtZW50KSA6IG5ldyBBdWRpbyhzYW1wbGUuc3JjKTtcbiAgICAgIGF1ZGlvLnByZWxvYWQgPSAnYXV0byc7XG4gICAgICBhdWRpby5kYXRhc2V0WydiYXNlVm9sdW1lJ10gPSBgJHtzYW1wbGUudm9sdW1lfWA7XG4gICAgICBhdWRpby52b2x1bWUgPSB0aGlzLnNhbXBsZVZvbHVtZShzYW1wbGUpO1xuICAgICAgdGhpcy5hY3RpdmVTYW1wbGVzLmFkZChhdWRpbyk7XG4gICAgICBjb25zdCByZWxlYXNlID0gKCkgPT4gdGhpcy5hY3RpdmVTYW1wbGVzLmRlbGV0ZShhdWRpbyk7XG4gICAgICBhdWRpby5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsIHJlbGVhc2UsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICAgIGF1ZGlvLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgcmVsZWFzZSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgICAgY29uc3QgcGxheVJlc3VsdCA9IGF1ZGlvLnBsYXkoKTtcbiAgICAgIGlmIChwbGF5UmVzdWx0KSB7XG4gICAgICAgIHBsYXlSZXN1bHQuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIHJlbGVhc2UoKTtcbiAgICAgICAgICBmYWxsYmFjaygpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGxheUJ1ZmZlcmVkU2FtcGxlKHNhbXBsZTogU2FtcGxlQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNhblBsYXlTZngoKSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuYnVmZmVyQ2FjaGUuZ2V0KHNhbXBsZS5zcmMpO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY29udGV4dDtcbiAgICBpZiAoIWJ1ZmZlciB8fCAhY3R4IHx8IGN0eC5zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHZvaWQgdGhpcy5wcmVsb2FkU2FtcGxlQnVmZmVyKHNhbXBsZS5zcmMpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgaWYgKGN0eC5zdGF0ZSA9PT0gJ3N1c3BlbmRlZCcpIHZvaWQgY3R4LnJlc3VtZSgpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgICBjb25zdCBzb3VyY2UgPSBjdHguY3JlYXRlQnVmZmVyU291cmNlKCk7XG4gICAgICBjb25zdCBnYWluID0gY3R4LmNyZWF0ZUdhaW4oKTtcbiAgICAgIHNvdXJjZS5idWZmZXIgPSBidWZmZXI7XG4gICAgICBnYWluLmdhaW4uc2V0VmFsdWVBdFRpbWUodGhpcy5zYW1wbGVWb2x1bWUoc2FtcGxlKSwgY3R4LmN1cnJlbnRUaW1lKTtcbiAgICAgIHNvdXJjZS5jb25uZWN0KGdhaW4pO1xuICAgICAgZ2Fpbi5jb25uZWN0KHRoaXMubWFzdGVyR2FpbiA/PyBjdHguZGVzdGluYXRpb24pO1xuICAgICAgdGhpcy5hY3RpdmVCdWZmZXJTb3VyY2VzLmFkZChzb3VyY2UpO1xuICAgICAgc291cmNlLm9uZW5kZWQgPSAoKSA9PiB0aGlzLmFjdGl2ZUJ1ZmZlclNvdXJjZXMuZGVsZXRlKHNvdXJjZSk7XG4gICAgICBzb3VyY2Uuc3RhcnQoY3R4LmN1cnJlbnRUaW1lKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNoZXNzaW1hbHNWaWN0b3J5KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcE11c2ljKCk7XG4gICAgdGhpcy5zdG9wQWN0aXZlU2FtcGxlcygpO1xuICAgIGlmICh0aGlzLnBsYXlCdWZmZXJlZFNhbXBsZShDSEVTU0lNQUxTX09VVENPTUVfU0FNUExFUy52aWN0b3J5KSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnBsYXlTYW1wbGUoQ0hFU1NJTUFMU19PVVRDT01FX1NBTVBMRVMudmljdG9yeSwgKCkgPT4gdGhpcy5jaGVzc2ltYWxzVmljdG9yeUZhbGxiYWNrKCkpKSByZXR1cm47XG4gICAgdGhpcy5jaGVzc2ltYWxzVmljdG9yeUZhbGxiYWNrKCk7XG4gIH1cblxuICBjaGVzc2ltYWxzRGVmZWF0KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcE11c2ljKCk7XG4gICAgdGhpcy5zdG9wQWN0aXZlU2FtcGxlcygpO1xuICAgIGlmICh0aGlzLnBsYXlCdWZmZXJlZFNhbXBsZShDSEVTU0lNQUxTX09VVENPTUVfU0FNUExFUy5kZWZlYXQpKSByZXR1cm47XG4gICAgaWYgKHRoaXMucGxheVNhbXBsZShDSEVTU0lNQUxTX09VVENPTUVfU0FNUExFUy5kZWZlYXQsICgpID0+IHRoaXMubG9zZSgpKSkgcmV0dXJuO1xuICAgIHRoaXMubG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVzc2ltYWxzVmljdG9yeUZhbGxiYWNrKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShcbiAgICAgIFtcbiAgICAgICAgWzE5NiwgMC4wOF0sXG4gICAgICAgIFsyNjEuNjMsIDAuMDhdLFxuICAgICAgICBbMzI5LjYzLCAwLjA4XSxcbiAgICAgICAgWzM5MiwgMC4xXSxcbiAgICAgICAgWzUyMy4yNSwgMC4xMl0sXG4gICAgICAgIFs3ODMuOTksIDAuMTZdLFxuICAgICAgICBbMTA0Ni41LCAwLjIyXSxcbiAgICAgIF0sXG4gICAgICAndHJpYW5nbGUnLFxuICAgICAgMC4wNSxcbiAgICAgIDcyLFxuICAgICk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDEzMC44MSwgNjUuNDEsIDAuMjgsICdzYXd0b290aCcsIDAuMDIpLCA0MCk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDUyMy4yNSwgMTU2Ny45OCwgMC4zNCwgJ3NpbmUnLCAwLjAyNiksIDI0MCk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4xNiwgMC4wMjIsICdiYW5kcGFzcycsIDE0MDApLCAxMjApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5zZXF1ZW5jZShbWzk4Ny43NywgMC4wOF0sIFsxMzE4LjUxLCAwLjEyXV0sICd0cmlhbmdsZScsIDAuMDMyLCA4NiksIDUyMCk7XG4gIH1cblxuICBjaGVzc2ltYWxzSm9pblJlcXVlc3QoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFxuICAgICAgW1xuICAgICAgICBbNTIzLjI1LCAwLjA1NV0sXG4gICAgICAgIFs2NTkuMjUsIDAuMDZdLFxuICAgICAgICBbOTg3Ljc3LCAwLjEyXSxcbiAgICAgIF0sXG4gICAgICAndHJpYW5nbGUnLFxuICAgICAgMC4wMzQsXG4gICAgICA1OCxcbiAgICApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy50b25lKDEzMTguNTEsIDAuMDc1LCAnc2luZScsIDAuMDIpLCAxMzYpO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMDYsIDAuMDEsICdoaWdocGFzcycsIDE4MDApLCA5OCk7XG4gIH1cblxuICBjaGVzc2ltYWxzUG93ZXJVbmxvY2tlZCgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuc2VxdWVuY2UoXG4gICAgICBbXG4gICAgICAgIFszOTIsIDAuMDU1XSxcbiAgICAgICAgWzUyMy4yNSwgMC4wNTVdLFxuICAgICAgICBbNjU5LjI1LCAwLjA4XSxcbiAgICAgICAgWzk4Ny43NywgMC4xM10sXG4gICAgICBdLFxuICAgICAgJ3RyaWFuZ2xlJyxcbiAgICAgIDAuMDM4LFxuICAgICAgNjQsXG4gICAgKTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuc3dlZXAoMjIwLCA4ODAsIDAuMjIsICdzaW5lJywgMC4wMjQpLCA3MCk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4yNCwgMC4wMTgsICdiYW5kcGFzcycsIDEyMDApLCA1NCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlYWRCb29sZWFuU2V0dGluZygndmFsLW1pbmktZ2FtZXMtYXVkaW8nLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZEJvb2xlYW5TZXR0aW5nKGtleTogc3RyaW5nLCBmYWxsYmFjazogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiBmYWxsYmFjaztcbiAgICAgIHJldHVybiB2YWx1ZSAhPT0gJzAnO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVhZFZvbHVtZVNldHRpbmcoa2V5OiBzdHJpbmcsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHZvaWQgdGhpcy5kZWZhdWx0c1JlYWR5O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgICAgaWYgKHN0b3JlZCA9PT0gbnVsbCB8fCBzdG9yZWQudHJpbSgpID09PSAnJykgcmV0dXJuIGZhbGxiYWNrO1xuICAgICAgY29uc3QgdmFsdWUgPSBOdW1iZXIoc3RvcmVkKTtcbiAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpID8gdGhpcy5ub3JtYWxpemVWb2x1bWUodmFsdWUpIDogZmFsbGJhY2s7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB3cml0ZVNldHRpbmcoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBsb2NhbFN0b3JhZ2UgcHVlZGUgbm8gZXN0YXIgZGlzcG9uaWJsZSBlbiBTU1IvdGVzdHMuXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVWb2x1bWUodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHZhbHVlKSk7XG4gIH1cblxuICBwcml2YXRlIHByZWxvYWRTYW1wbGUoc3JjOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zYW1wbGVDYWNoZS5oYXMoc3JjKSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhdWRpbyA9IG5ldyBBdWRpbyhzcmMpO1xuICAgICAgYXVkaW8ucHJlbG9hZCA9ICdhdXRvJztcbiAgICAgIGF1ZGlvLmxvYWQoKTtcbiAgICAgIHRoaXMuc2FtcGxlQ2FjaGUuc2V0KHNyYywgYXVkaW8pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gU2kgZWwgbmF2ZWdhZG9yIG5vIHBlcm1pdGUgcHJlY2FyZ2FyLCBzZSBpbnRlbnRhcmEgYWwgcmVwcm9kdWNpci5cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZWxvYWRTYW1wbGVCdWZmZXIoc3JjOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5idWZmZXJDYWNoZS5oYXMoc3JjKSkgcmV0dXJuO1xuICAgIGNvbnN0IGFjdGl2ZVByZWxvYWQgPSB0aGlzLmJ1ZmZlclByZWxvYWRzLmdldChzcmMpO1xuICAgIGlmIChhY3RpdmVQcmVsb2FkKSByZXR1cm4gYWN0aXZlUHJlbG9hZDtcblxuICAgIGNvbnN0IHByZWxvYWQgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBmZXRjaCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcbiAgICAgIGNvbnN0IGN0eCA9IGF3YWl0IHRoaXMuZW5zdXJlQ29udGV4dCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChzcmMpO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCk7XG4gICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBjdHguZGVjb2RlQXVkaW9EYXRhKGRhdGEuc2xpY2UoMCkpO1xuICAgICAgdGhpcy5idWZmZXJDYWNoZS5zZXQoc3JjLCBidWZmZXIpO1xuICAgIH0pKClcbiAgICAgIC5jYXRjaCgoKSA9PiB1bmRlZmluZWQpXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHRoaXMuYnVmZmVyUHJlbG9hZHMuZGVsZXRlKHNyYyk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuYnVmZmVyUHJlbG9hZHMuc2V0KHNyYywgcHJlbG9hZCk7XG4gICAgcmV0dXJuIHByZWxvYWQ7XG4gIH1cblxuICBwcml2YXRlIG1pZ3JhdGVDaGVzc2ltYWxzQXVkaW9EZWZhdWx0cygpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWlncmF0aW9uS2V5ID0gJ3ZhbC1taW5pLWdhbWVzLWNoZXNzaW1hbHMtYXVkaW8tZGVmYXVsdHMtdjInO1xuICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG1pZ3JhdGlvbktleSkgPT09ICcxJykgcmV0dXJuIHRydWU7XG4gICAgICBjb25zdCBzdG9yZWRNdXNpY1ZvbHVtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd2YWwtbWluaS1nYW1lcy1tdXNpYy12b2x1bWUnKTtcbiAgICAgIGNvbnN0IHN0b3JlZFNmeFZvbHVtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd2YWwtbWluaS1nYW1lcy1zZngtdm9sdW1lJyk7XG4gICAgICBpZiAoIXN0b3JlZE11c2ljVm9sdW1lIHx8IHN0b3JlZE11c2ljVm9sdW1lID09PSAnMCcpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3ZhbC1taW5pLWdhbWVzLW11c2ljLXZvbHVtZScsICcwLjI1Jyk7XG4gICAgICB9XG4gICAgICBpZiAoIXN0b3JlZFNmeFZvbHVtZSB8fCBzdG9yZWRTZnhWb2x1bWUgPT09ICcwJykge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndmFsLW1pbmktZ2FtZXMtc2Z4LXZvbHVtZScsICcwLjgnKTtcbiAgICAgIH1cbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG1pZ3JhdGlvbktleSwgJzEnKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGxvY2FsU3RvcmFnZSBwdWVkZSBubyBlc3RhciBkaXNwb25pYmxlIGVuIFNTUi90ZXN0cy5cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGNhblBsYXlNdXNpYygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVkKCkgJiYgdGhpcy5tdXNpY0VuYWJsZWQoKSAmJiB0aGlzLm11c2ljVm9sdW1lKCkgPiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5QbGF5U2Z4KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZWQoKSAmJiB0aGlzLnNmeEVuYWJsZWQoKSAmJiB0aGlzLnNmeFZvbHVtZSgpID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlQ29udGV4dCgpOiBQcm9taXNlPEF1ZGlvQ29udGV4dD4ge1xuICAgIGlmICghdGhpcy5jb250ZXh0IHx8IHRoaXMuY29udGV4dC5zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHRoaXMuY29udGV4dCA9IG5ldyBBdWRpb0NvbnRleHQoKTtcbiAgICAgIHRoaXMubWFzdGVyR2FpbiA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG4gICAgICB0aGlzLm1hc3RlckdhaW4uZ2Fpbi52YWx1ZSA9IDE7XG4gICAgICB0aGlzLm1hc3RlckdhaW4uY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb250ZXh0O1xuICB9XG5cbiAgcHJpdmF0ZSBtZW51TWVsb2R5KCk6IE5vdGVbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFsyMjAsIDAuMzhdLFxuICAgICAgWzAsIDAuMTJdLFxuICAgICAgWzI2MS42MywgMC4zNF0sXG4gICAgICBbMzI5LjYzLCAwLjQyXSxcbiAgICAgIFsyOTMuNjYsIDAuMjhdLFxuICAgICAgWzAsIDAuMTJdLFxuICAgICAgWzM5MiwgMC40OF0sXG4gICAgICBbMzI5LjYzLCAwLjM0XSxcbiAgICAgIFsyNjEuNjMsIDAuMzZdLFxuICAgICAgWzIyMCwgMC41OF0sXG4gICAgICBbMCwgMC4yXSxcbiAgICAgIFsyOTMuNjYsIDAuMzRdLFxuICAgICAgWzMyOS42MywgMC40Ml0sXG4gICAgICBbNDQwLCAwLjVdLFxuICAgICAgWzM5MiwgMC4zNl0sXG4gICAgICBbMjYxLjYzLCAwLjYyXSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzYXZhbm5hUHVsc2Uoc3RlcDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHN0ZXAgJSA0ID09PSAwKSB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuc3dlZXAoOTYsIDQ4LCAwLjE4LCAnc2luZScsIDAuMDEyKSwgMTgpO1xuICAgIH1cbiAgICBpZiAoc3RlcCAlIDggPT09IDUpIHtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy50b25lKDE2NC44MSwgMC4wNDUsICd0cmlhbmdsZScsIDAuMDEyKSwgOTYpO1xuICAgIH1cbiAgICBpZiAoc3RlcCAlIDE2ID09PSAxMCkge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDE0Ni44MywgMTk2LCAwLjA4LCAndHJpYW5nbGUnLCAwLjAxKSwgMTQwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdhbWVNZWxvZHkoKTogTm90ZVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgWzUyMy4yNSwgMC4xM10sXG4gICAgICBbNjU5LjI1LCAwLjEzXSxcbiAgICAgIFs3ODMuOTksIDAuMTNdLFxuICAgICAgWzEwNDYuNSwgMC4xOF0sXG4gICAgICBbNzgzLjk5LCAwLjEzXSxcbiAgICAgIFs2NTkuMjUsIDAuMTNdLFxuICAgICAgWzU4Ny4zMywgMC4xOF0sXG4gICAgICBbNjU5LjI1LCAwLjE4XSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBidWJibGVNZWxvZHkoKTogTm90ZVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgWzI2MS42MywgMC43Ml0sXG4gICAgICBbMCwgMC4xOF0sXG4gICAgICBbMzI5LjYzLCAwLjY2XSxcbiAgICAgIFszOTIsIDAuNzhdLFxuICAgICAgWzAsIDAuMjRdLFxuICAgICAgWzM0OS4yMywgMC42NF0sXG4gICAgICBbMjkzLjY2LCAwLjcyXSxcbiAgICAgIFswLCAwLjI4XSxcbiAgICAgIFs0NDAsIDAuODRdLFxuICAgICAgWzM5MiwgMC43XSxcbiAgICAgIFszMjkuNjMsIDAuNzhdLFxuICAgICAgWzAsIDAuMzJdLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGJ1YmJsZUFtYmllbnRQdWxzZShzdGVwOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoc3RlcCAlIDQgPT09IDApIHtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5tdXNpY1RvbmUoMTMwLjgxLCAxLjM1LCAnc2luZScsIDAuMDA5KSwgMjQpO1xuICAgIH1cbiAgICBpZiAoc3RlcCAlIDYgPT09IDIpIHtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5tdXNpY1RvbmUoMTk2LCAwLjk1LCAndHJpYW5nbGUnLCAwLjAwOCksIDEyMCk7XG4gICAgfVxuICAgIGlmIChzdGVwICUgOCA9PT0gNSkge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLm11c2ljVG9uZSg1MjMuMjUsIDAuNDIsICdzaW5lJywgMC4wMDYpLCAxODApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VxdWVuY2UoXG4gICAgbm90ZXM6IE5vdGVbXSxcbiAgICB3YXZlOiBPc2NpbGxhdG9yVHlwZSA9ICdzcXVhcmUnLFxuICAgIGdhaW4gPSAwLjA1NSxcbiAgICBpbnRlcnZhbE1zID0gOTAsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5lbmFibGVkKCkpIHJldHVybjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBjb25zdCBbZnJlcSwgZHVyYXRpb25dID0gbm90ZXNbaV07XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMudG9uZShmcmVxLCBkdXJhdGlvbiwgd2F2ZSwgZ2FpbiksIGkgKiBpbnRlcnZhbE1zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN0YXJ0U2FtcGxlTXVzaWMoY29uZmlnOiBTYW1wbGVNdXNpY0NvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYW5QbGF5TXVzaWMoKSkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pc0RvY3VtZW50VmlzaWJsZSgpKSB7XG4gICAgICB0aGlzLnBhdXNlZFNhbXBsZU11c2ljID0gY29uZmlnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zYW1wbGVNdXNpY0NvbmZpZz8uc3JjID09PSBjb25maWcuc3JjICYmICF0aGlzLnNhbXBsZU11c2ljPy5wYXVzZWQpIHJldHVybjtcbiAgICB0aGlzLnN0b3BNdXNpYygpO1xuICAgIGlmICh0eXBlb2YgQXVkaW8gPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG5cbiAgICBjb25zdCBhdWRpbyA9IG5ldyBBdWRpbyhjb25maWcuc3JjKTtcbiAgICBhdWRpby5sb29wID0gdHJ1ZTtcbiAgICBhdWRpby5wcmVsb2FkID0gJ2F1dG8nO1xuICAgIHRoaXMuc2FtcGxlTXVzaWMgPSBhdWRpbztcbiAgICB0aGlzLnNhbXBsZU11c2ljQ29uZmlnID0gY29uZmlnO1xuICAgIGF3YWl0IHRoaXMuY29ubmVjdFNhbXBsZU11c2ljKGF1ZGlvLCBjb25maWcpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhdWRpby5wbGF5KCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLnBhdXNlZFNhbXBsZU11c2ljID0gY29uZmlnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RvcFNhbXBsZU11c2ljKCk6IHZvaWQge1xuICAgIGNvbnN0IG11c2ljID0gdGhpcy5zYW1wbGVNdXNpYztcbiAgICB0aGlzLnNhbXBsZU11c2ljID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc2FtcGxlTXVzaWNDb25maWcgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kaXNjb25uZWN0U2FtcGxlTXVzaWNHcmFwaCgpO1xuICAgIGlmICghbXVzaWMpIHJldHVybjtcbiAgICBtdXNpYy5wYXVzZSgpO1xuICAgIG11c2ljLmN1cnJlbnRUaW1lID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTYW1wbGVNdXNpY1ZvbHVtZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2FtcGxlTXVzaWMgfHwgIXRoaXMuc2FtcGxlTXVzaWNDb25maWcpIHJldHVybjtcbiAgICBjb25zdCB2b2x1bWUgPSB0aGlzLnNhbXBsZU11c2ljVm9sdW1lKHRoaXMuc2FtcGxlTXVzaWNDb25maWcpO1xuICAgIGlmICh0aGlzLnNhbXBsZU11c2ljR2FpbiAmJiB0aGlzLmNvbnRleHQpIHtcbiAgICAgIHRoaXMuc2FtcGxlTXVzaWNHYWluLmdhaW4uc2V0VGFyZ2V0QXRUaW1lKHZvbHVtZSwgdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLCAwLjAyNSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2FtcGxlTXVzaWMudm9sdW1lID0gdm9sdW1lO1xuICB9XG5cbiAgcHJpdmF0ZSBzYW1wbGVNdXNpY1ZvbHVtZShjb25maWc6IFNhbXBsZU11c2ljQ29uZmlnKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgY29uZmlnLnZvbHVtZSAqIHRoaXMubXVzaWNWb2x1bWUoKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzYW1wbGVWb2x1bWUoc2FtcGxlOiBTYW1wbGVDb25maWcpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBzYW1wbGUudm9sdW1lICogdGhpcy5zZnhWb2x1bWUoKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUFjdGl2ZVNhbXBsZVZvbHVtZXMoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBhdWRpbyBvZiB0aGlzLmFjdGl2ZVNhbXBsZXMpIHtcbiAgICAgIGNvbnN0IGJhc2VWb2x1bWUgPSBOdW1iZXIoYXVkaW8uZGF0YXNldFsnYmFzZVZvbHVtZSddID8/ICcxJyk7XG4gICAgICBhdWRpby52b2x1bWUgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBiYXNlVm9sdW1lICogdGhpcy5zZnhWb2x1bWUoKSkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RvcEFjdGl2ZVNhbXBsZXMoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBhdWRpbyBvZiB0aGlzLmFjdGl2ZVNhbXBsZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF1ZGlvLnBhdXNlKCk7XG4gICAgICAgIGF1ZGlvLmN1cnJlbnRUaW1lID0gMDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBFbCBlbGVtZW50byBwdWVkZSBoYWJlciB0ZXJtaW5hZG8gbWllbnRyYXMgc2UgZXN0YWJhIGxpbXBpYW5kby5cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hY3RpdmVTYW1wbGVzLmNsZWFyKCk7XG5cbiAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiB0aGlzLmFjdGl2ZUJ1ZmZlclNvdXJjZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNvdXJjZS5zdG9wKCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gRWwgYnVmZmVyIHB1ZWRlIGhhYmVyIHRlcm1pbmFkbyBhbnRlcyBkZSBwZWRpciBlbCBzdG9wLlxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFjdGl2ZUJ1ZmZlclNvdXJjZXMuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29ubmVjdFNhbXBsZU11c2ljKGF1ZGlvOiBIVE1MQXVkaW9FbGVtZW50LCBjb25maWc6IFNhbXBsZU11c2ljQ29uZmlnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgdm9sdW1lID0gdGhpcy5zYW1wbGVNdXNpY1ZvbHVtZShjb25maWcpO1xuICAgIGF1ZGlvLnZvbHVtZSA9IHZvbHVtZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY3R4ID0gYXdhaXQgdGhpcy53YWtlQXVkaW8oKTtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGN0eC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UoYXVkaW8pO1xuICAgICAgY29uc3QgZ2FpbiA9IGN0eC5jcmVhdGVHYWluKCk7XG4gICAgICBnYWluLmdhaW4uc2V0VmFsdWVBdFRpbWUodm9sdW1lLCBjdHguY3VycmVudFRpbWUpO1xuICAgICAgc291cmNlLmNvbm5lY3QoZ2Fpbik7XG4gICAgICBnYWluLmNvbm5lY3QodGhpcy5tYXN0ZXJHYWluID8/IGN0eC5kZXN0aW5hdGlvbik7XG4gICAgICB0aGlzLnNhbXBsZU11c2ljU291cmNlID0gc291cmNlO1xuICAgICAgdGhpcy5zYW1wbGVNdXNpY0dhaW4gPSBnYWluO1xuICAgICAgYXVkaW8udm9sdW1lID0gMTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGF1ZGlvLnZvbHVtZSA9IHZvbHVtZTtcbiAgICAgIHRoaXMuc2FtcGxlTXVzaWNTb3VyY2UgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnNhbXBsZU11c2ljR2FpbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpc2Nvbm5lY3RTYW1wbGVNdXNpY0dyYXBoKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnNhbXBsZU11c2ljU291cmNlPy5kaXNjb25uZWN0KCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBFbCBub2RvIHB1ZWRlIGVzdGFyIGRlc2NvbmVjdGFkbyBzaSBlbCBuYXZlZ2Fkb3IgbGliZXJvIGxhIHBpc3RhLlxuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5zYW1wbGVNdXNpY0dhaW4/LmRpc2Nvbm5lY3QoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEVsIG5vZG8gcHVlZGUgZXN0YXIgZGVzY29uZWN0YWRvIHNpIGVsIG5hdmVnYWRvciBsaWJlcm8gbGEgcGlzdGEuXG4gICAgfVxuICAgIHRoaXMuc2FtcGxlTXVzaWNTb3VyY2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zYW1wbGVNdXNpY0dhaW4gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHRvbmUoZnJlcTogbnVtYmVyLCBkdXJhdGlvbiA9IDAuMSwgdHlwZTogT3NjaWxsYXRvclR5cGUgPSAnc3F1YXJlJywgZ2FpblZhbHVlID0gMC4wNCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYW5QbGF5U2Z4KCkpIHJldHVybjtcbiAgICBpZiAoZnJlcSA8PSAwKSByZXR1cm47XG4gICAgY29uc3QgY3R4ID0gYXdhaXQgdGhpcy53YWtlQXVkaW8oKTtcbiAgICBjb25zdCBvc2NpbGxhdG9yID0gY3R4LmNyZWF0ZU9zY2lsbGF0b3IoKTtcbiAgICBjb25zdCBnYWluID0gY3R4LmNyZWF0ZUdhaW4oKTtcbiAgICBvc2NpbGxhdG9yLnR5cGUgPSB0eXBlO1xuICAgIG9zY2lsbGF0b3IuZnJlcXVlbmN5LnZhbHVlID0gZnJlcTtcbiAgICBnYWluLmdhaW4uc2V0VmFsdWVBdFRpbWUoMC4wMDAxLCBjdHguY3VycmVudFRpbWUpO1xuICAgIGdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKGdhaW5WYWx1ZSAqIHRoaXMuc2Z4Vm9sdW1lKCksIGN0eC5jdXJyZW50VGltZSArIDAuMDEpO1xuICAgIGdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAwMSwgY3R4LmN1cnJlbnRUaW1lICsgZHVyYXRpb24pO1xuICAgIG9zY2lsbGF0b3IuY29ubmVjdChnYWluKTtcbiAgICBnYWluLmNvbm5lY3QodGhpcy5tYXN0ZXJHYWluID8/IGN0eC5kZXN0aW5hdGlvbik7XG4gICAgb3NjaWxsYXRvci5zdGFydCgpO1xuICAgIG9zY2lsbGF0b3Iuc3RvcChjdHguY3VycmVudFRpbWUgKyBkdXJhdGlvbiArIDAuMDIpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBtdXNpY1RvbmUoZnJlcTogbnVtYmVyLCBkdXJhdGlvbiA9IDAuMSwgdHlwZTogT3NjaWxsYXRvclR5cGUgPSAndHJpYW5nbGUnLCBnYWluVmFsdWUgPSAwLjAxOCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYW5QbGF5TXVzaWMoKSkgcmV0dXJuO1xuICAgIGlmIChmcmVxIDw9IDApIHJldHVybjtcbiAgICBjb25zdCBjdHggPSBhd2FpdCB0aGlzLndha2VBdWRpbygpO1xuICAgIGNvbnN0IG9zY2lsbGF0b3IgPSBjdHguY3JlYXRlT3NjaWxsYXRvcigpO1xuICAgIGNvbnN0IGdhaW4gPSBjdHguY3JlYXRlR2FpbigpO1xuICAgIG9zY2lsbGF0b3IudHlwZSA9IHR5cGU7XG4gICAgb3NjaWxsYXRvci5mcmVxdWVuY3kudmFsdWUgPSBmcmVxO1xuICAgIGdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLjAwMDEsIGN0eC5jdXJyZW50VGltZSk7XG4gICAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoZ2FpblZhbHVlICogdGhpcy5tdXNpY1ZvbHVtZSgpLCBjdHguY3VycmVudFRpbWUgKyAwLjA4KTtcbiAgICBnYWluLmdhaW4uc2V0VGFyZ2V0QXRUaW1lKGdhaW5WYWx1ZSAqIHRoaXMubXVzaWNWb2x1bWUoKSAqIDAuNzQsIGN0eC5jdXJyZW50VGltZSArIDAuMTIsIDAuMik7XG4gICAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoMC4wMDAxLCBjdHguY3VycmVudFRpbWUgKyBkdXJhdGlvbik7XG4gICAgb3NjaWxsYXRvci5jb25uZWN0KGdhaW4pO1xuICAgIGdhaW4uY29ubmVjdCh0aGlzLm1hc3RlckdhaW4gPz8gY3R4LmRlc3RpbmF0aW9uKTtcbiAgICBvc2NpbGxhdG9yLnN0YXJ0KCk7XG4gICAgb3NjaWxsYXRvci5zdG9wKGN0eC5jdXJyZW50VGltZSArIGR1cmF0aW9uICsgMC4wOCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN3ZWVwKFxuICAgIGZyb21GcmVxOiBudW1iZXIsXG4gICAgdG9GcmVxOiBudW1iZXIsXG4gICAgZHVyYXRpb24gPSAwLjE2LFxuICAgIHR5cGU6IE9zY2lsbGF0b3JUeXBlID0gJ3RyaWFuZ2xlJyxcbiAgICBnYWluVmFsdWUgPSAwLjAzLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2FuUGxheVNmeCgpKSByZXR1cm47XG4gICAgY29uc3QgY3R4ID0gYXdhaXQgdGhpcy53YWtlQXVkaW8oKTtcbiAgICBjb25zdCBvc2NpbGxhdG9yID0gY3R4LmNyZWF0ZU9zY2lsbGF0b3IoKTtcbiAgICBjb25zdCBnYWluID0gY3R4LmNyZWF0ZUdhaW4oKTtcbiAgICBvc2NpbGxhdG9yLnR5cGUgPSB0eXBlO1xuICAgIG9zY2lsbGF0b3IuZnJlcXVlbmN5LnNldFZhbHVlQXRUaW1lKGZyb21GcmVxLCBjdHguY3VycmVudFRpbWUpO1xuICAgIG9zY2lsbGF0b3IuZnJlcXVlbmN5LmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoTWF0aC5tYXgoMSwgdG9GcmVxKSwgY3R4LmN1cnJlbnRUaW1lICsgZHVyYXRpb24pO1xuICAgIGdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLjAwMDEsIGN0eC5jdXJyZW50VGltZSk7XG4gICAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoZ2FpblZhbHVlICogdGhpcy5zZnhWb2x1bWUoKSwgY3R4LmN1cnJlbnRUaW1lICsgMC4wMSk7XG4gICAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoMC4wMDAxLCBjdHguY3VycmVudFRpbWUgKyBkdXJhdGlvbik7XG4gICAgb3NjaWxsYXRvci5jb25uZWN0KGdhaW4pO1xuICAgIGdhaW4uY29ubmVjdCh0aGlzLm1hc3RlckdhaW4gPz8gY3R4LmRlc3RpbmF0aW9uKTtcbiAgICBvc2NpbGxhdG9yLnN0YXJ0KCk7XG4gICAgb3NjaWxsYXRvci5zdG9wKGN0eC5jdXJyZW50VGltZSArIGR1cmF0aW9uICsgMC4wMik7XG4gIH1cblxuICAvLyBDaGVzc2ltYWxzIHVzZXMgZ2VuZXJhdGVkIFdlYkF1ZGlvIGxheWVycyBpbnN0ZWFkIG9mIHRoaXJkLXBhcnR5IHNhbXBsZXMsXG4gIC8vIGF2b2lkaW5nIGxpY2Vuc2luZyByaXNrIHdoaWxlIGtlZXBpbmcgZWFjaCBhbmltYWwgcG93ZXIgZXhwcmVzc2l2ZS5cbiAgcHJpdmF0ZSBhc3luYyBmaWx0ZXJlZE5vaXNlKFxuICAgIGR1cmF0aW9uID0gMC4xMixcbiAgICBnYWluVmFsdWUgPSAwLjAyNSxcbiAgICBmaWx0ZXJUeXBlOiBCaXF1YWRGaWx0ZXJUeXBlID0gJ2JhbmRwYXNzJyxcbiAgICBmcmVxdWVuY3kgPSA5MDAsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYW5QbGF5U2Z4KCkpIHJldHVybjtcbiAgICBjb25zdCBjdHggPSBhd2FpdCB0aGlzLndha2VBdWRpbygpO1xuICAgIGNvbnN0IHNhbXBsZUNvdW50ID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihjdHguc2FtcGxlUmF0ZSAqIGR1cmF0aW9uKSk7XG4gICAgY29uc3QgYnVmZmVyID0gY3R4LmNyZWF0ZUJ1ZmZlcigxLCBzYW1wbGVDb3VudCwgY3R4LnNhbXBsZVJhdGUpO1xuICAgIGNvbnN0IGNoYW5uZWwgPSBidWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzYW1wbGVDb3VudDsgaSArPSAxKSB7XG4gICAgICBjb25zdCBkZWNheSA9IDEgLSBpIC8gc2FtcGxlQ291bnQ7XG4gICAgICBjaGFubmVsW2ldID0gKE1hdGgucmFuZG9tKCkgKiAyIC0gMSkgKiBkZWNheTtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2UgPSBjdHguY3JlYXRlQnVmZmVyU291cmNlKCk7XG4gICAgY29uc3QgZmlsdGVyID0gY3R4LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuICAgIGNvbnN0IGdhaW4gPSBjdHguY3JlYXRlR2FpbigpO1xuICAgIGZpbHRlci50eXBlID0gZmlsdGVyVHlwZTtcbiAgICBmaWx0ZXIuZnJlcXVlbmN5LnZhbHVlID0gZnJlcXVlbmN5O1xuICAgIGZpbHRlci5RLnZhbHVlID0gZmlsdGVyVHlwZSA9PT0gJ2xvd3Bhc3MnID8gMC43IDogMS44O1xuICAgIGdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLjAwMDEsIGN0eC5jdXJyZW50VGltZSk7XG4gICAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoZ2FpblZhbHVlICogdGhpcy5zZnhWb2x1bWUoKSwgY3R4LmN1cnJlbnRUaW1lICsgMC4wMTIpO1xuICAgIGdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAwMSwgY3R4LmN1cnJlbnRUaW1lICsgZHVyYXRpb24pO1xuICAgIHNvdXJjZS5idWZmZXIgPSBidWZmZXI7XG4gICAgc291cmNlLmNvbm5lY3QoZmlsdGVyKTtcbiAgICBmaWx0ZXIuY29ubmVjdChnYWluKTtcbiAgICBnYWluLmNvbm5lY3QodGhpcy5tYXN0ZXJHYWluID8/IGN0eC5kZXN0aW5hdGlvbik7XG4gICAgc291cmNlLnN0YXJ0KCk7XG4gICAgc291cmNlLnN0b3AoY3R4LmN1cnJlbnRUaW1lICsgZHVyYXRpb24gKyAwLjAyKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoZG9jdW1lbnQuaGlkZGVuKSB7XG4gICAgICB0aGlzLnBhdXNlRm9yQmFja2dyb3VuZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2b2lkIHRoaXMucmVzdW1lRnJvbUJhY2tncm91bmQoKTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZVBhZ2VIaWRlID0gKCk6IHZvaWQgPT4ge1xuICAgIHRoaXMucGF1c2VGb3JCYWNrZ3JvdW5kKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVQYWdlU2hvdyA9ICgpOiB2b2lkID0+IHtcbiAgICB2b2lkIHRoaXMucmVzdW1lRnJvbUJhY2tncm91bmQoKTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZVVzZXJBY3RpdmF0aW9uID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICghdGhpcy5lbmFibGVkKCkgfHwgIXRoaXMuaXNEb2N1bWVudFZpc2libGUoKSkgcmV0dXJuO1xuICAgIHRoaXMucHJlbG9hZENoZXNzaW1hbHNTYW1wbGVzKCk7XG4gICAgaWYgKHRoaXMucGF1c2VkU2FtcGxlTXVzaWMpIHtcbiAgICAgIHZvaWQgdGhpcy5yZXN1bWVGcm9tQmFja2dyb3VuZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2b2lkIHRoaXMud2FrZUF1ZGlvKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBwYXVzZUZvckJhY2tncm91bmQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWN0aXZlTWVsb2R5KSB0aGlzLnBhdXNlZE1lbG9keSA9IHRoaXMuYWN0aXZlTWVsb2R5O1xuICAgIGlmICh0aGlzLnNhbXBsZU11c2ljICYmIHRoaXMuc2FtcGxlTXVzaWNDb25maWcpIHtcbiAgICAgIHRoaXMucGF1c2VkU2FtcGxlTXVzaWMgPSB0aGlzLnNhbXBsZU11c2ljQ29uZmlnO1xuICAgICAgdGhpcy5zdG9wU2FtcGxlTXVzaWMoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubXVzaWNUaW1lcikge1xuICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5tdXNpY1RpbWVyKTtcbiAgICAgIHRoaXMubXVzaWNUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVNZWxvZHkgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5mYWRlTWFzdGVyVG8oMC4wMDAxLCAwLjIpO1xuICAgIGlmICh0aGlzLnN1c3BlbmRUaW1lcikgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnN1c3BlbmRUaW1lcik7XG4gICAgdGhpcy5zdXNwZW5kVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnN1c3BlbmRUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgIHZvaWQgdGhpcy5jb250ZXh0Py5zdXNwZW5kKCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICB9LCAyNjApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXN1bWVGcm9tQmFja2dyb3VuZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5zdXNwZW5kVGltZXIpIHtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5zdXNwZW5kVGltZXIpO1xuICAgICAgdGhpcy5zdXNwZW5kVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICghdGhpcy5lbmFibGVkKCkpIHJldHVybjtcbiAgICBjb25zdCBzYW1wbGVNdXNpYyA9IHRoaXMucGF1c2VkU2FtcGxlTXVzaWM7XG4gICAgaWYgKHNhbXBsZU11c2ljKSB7XG4gICAgICB0aGlzLnBhdXNlZFNhbXBsZU11c2ljID0gdW5kZWZpbmVkO1xuICAgICAgYXdhaXQgdGhpcy5zdGFydFNhbXBsZU11c2ljKHNhbXBsZU11c2ljKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWVsb2R5ID0gdGhpcy5wYXVzZWRNZWxvZHk7XG4gICAgaWYgKCFtZWxvZHkpIHJldHVybjtcbiAgICB0aGlzLnBhdXNlZE1lbG9keSA9IHVuZGVmaW5lZDtcbiAgICBjb25zdCBjdHggPSBhd2FpdCB0aGlzLmVuc3VyZUNvbnRleHQoKTtcbiAgICBhd2FpdCB0aGlzLnJlc3VtZUNvbnRleHQoY3R4KTtcbiAgICB0aGlzLmZhZGVNYXN0ZXJUbygxLCAwLjM1KTtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0TXVzaWMobWVsb2R5KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FrZUF1ZGlvKCk6IFByb21pc2U8QXVkaW9Db250ZXh0PiB7XG4gICAgY29uc3QgY3R4ID0gYXdhaXQgdGhpcy5lbnN1cmVDb250ZXh0KCk7XG4gICAgYXdhaXQgdGhpcy5yZXN1bWVDb250ZXh0KGN0eCk7XG4gICAgdGhpcy5mYWRlTWFzdGVyVG8oMSwgMC4xMik7XG4gICAgcmV0dXJuIGN0eDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzdW1lQ29udGV4dChjdHg6IEF1ZGlvQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChjdHguc3RhdGUgPT09ICdydW5uaW5nJykgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjdHgucmVzdW1lKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpT1MgcHVlZGUgZXhpZ2lyIHVuYSBudWV2YSBpbnRlcmFjY2nDs24gZGVsIHVzdWFyaW87IGVsIGxpc3RlbmVyIGRlIGFjdGl2YWNpw7NuIHJlaW50ZW50YXLDoS5cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZhZGVNYXN0ZXJUbyh2YWx1ZTogbnVtYmVyLCBzZWNvbmRzOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29udGV4dCB8fCAhdGhpcy5tYXN0ZXJHYWluKSByZXR1cm47XG4gICAgY29uc3QgZ2FpbiA9IHRoaXMubWFzdGVyR2Fpbi5nYWluO1xuICAgIGNvbnN0IG5vdyA9IHRoaXMuY29udGV4dC5jdXJyZW50VGltZTtcbiAgICBnYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhub3cpO1xuICAgIGdhaW4uc2V0VGFyZ2V0QXRUaW1lKHZhbHVlLCBub3csIE1hdGgubWF4KDAuMDEsIHNlY29uZHMgLyA0KSk7XG4gIH1cblxuICBwcml2YXRlIGlzRG9jdW1lbnRWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnIHx8ICFkb2N1bWVudC5oaWRkZW47XG4gIH1cbn1cbiJdfQ==
765
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cm8tYXVkaW8uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvbWluaS1nYW1lcy9yZXRyby1hdWRpby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVFuRCxNQUFNLE9BQU8saUJBQWlCO0lBMEI1QjtRQXRCUSxjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBSUwsa0JBQWEsR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQztRQUM1Qyx3QkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztRQU92RCxrQkFBYSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3BELFlBQU8sR0FBRyxNQUFNLENBQVUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDOUMsaUJBQVksR0FBRyxNQUFNLENBQVUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLDhCQUE4QixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDOUYsZUFBVSxHQUFHLE1BQU0sQ0FBVSxJQUFJLENBQUMsa0JBQWtCLENBQUMsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxRixnQkFBVyxHQUFHLE1BQU0sQ0FBUyxJQUFJLENBQUMsaUJBQWlCLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxRixjQUFTLEdBQUcsTUFBTSxDQUFTLElBQUksQ0FBQyxpQkFBaUIsQ0FBQywyQkFBMkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdFLGdCQUFXLEdBQUcsSUFBSSxHQUFHLEVBQTRCLENBQUM7UUFDbEQsZ0JBQVcsR0FBRyxJQUFJLEdBQUcsRUFBdUIsQ0FBQztRQUM3QyxtQkFBYyxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFD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QUNILE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCw2RkFBNkY7UUFDL0YsQ0FBQztJQUNILENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYSxFQUFFLE9BQWU7UUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFDOUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDbEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDckMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE9BQU8sT0FBTyxRQUFRLEtBQUssV0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUM3RCxDQUFDOytHQTN6QlUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FESixNQUFNOzs0RkFDbkIsaUJBQWlCO2tCQUQ3QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG50eXBlIE5vdGUgPSBbbnVtYmVyLCBudW1iZXJdO1xudHlwZSBNZWxvZHlNb2RlID0gJ21lbnUnIHwgJ2dhbWUnIHwgJ2J1YmJsZSc7XG50eXBlIFNhbXBsZUNvbmZpZyA9IHsgc3JjOiBzdHJpbmc7IHZvbHVtZTogbnVtYmVyIH07XG50eXBlIFNhbXBsZU11c2ljQ29uZmlnID0geyBzcmM6IHN0cmluZzsgdm9sdW1lOiBudW1iZXIgfTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBSZXRyb0F1ZGlvU2VydmljZSB7XG4gIHByaXZhdGUgY29udGV4dD86IEF1ZGlvQ29udGV4dDtcbiAgcHJpdmF0ZSBtYXN0ZXJHYWluPzogR2Fpbk5vZGU7XG4gIHByaXZhdGUgbXVzaWNUaW1lcj86IG51bWJlcjtcbiAgcHJpdmF0ZSBub3RlSW5kZXggPSAwO1xuICBwcml2YXRlIGFjdGl2ZU1lbG9keT86IE1lbG9keU1vZGU7XG4gIHByaXZhdGUgcGF1c2VkTWVsb2R5PzogTWVsb2R5TW9kZTtcbiAgcHJpdmF0ZSBzdXNwZW5kVGltZXI/OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZlU2FtcGxlcyA9IG5ldyBTZXQ8SFRNTEF1ZGlvRWxlbWVudD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmVCdWZmZXJTb3VyY2VzID0gbmV3IFNldDxBdWRpb0J1ZmZlclNvdXJjZU5vZGU+KCk7XG4gIHByaXZhdGUgc2FtcGxlTXVzaWM/OiBIVE1MQXVkaW9FbGVtZW50O1xuICBwcml2YXRlIHNhbXBsZU11c2ljQ29uZmlnPzogU2FtcGxlTXVzaWNDb25maWc7XG4gIHByaXZhdGUgc2FtcGxlTXVzaWNTb3VyY2U/OiBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU7XG4gIHByaXZhdGUgc2FtcGxlTXVzaWNHYWluPzogR2Fpbk5vZGU7XG4gIHByaXZhdGUgcGF1c2VkU2FtcGxlTXVzaWM/OiBTYW1wbGVNdXNpY0NvbmZpZztcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRzUmVhZHkgPSB0aGlzLm1pZ3JhdGVBdWRpb0RlZmF1bHRzKCk7XG4gIHJlYWRvbmx5IGVuYWJsZWQgPSBzaWduYWw8Ym9vbGVhbj4odGhpcy5yZWFkRW5hYmxlZCgpKTtcbiAgcmVhZG9ubHkgbXVzaWNFbmFibGVkID0gc2lnbmFsPGJvb2xlYW4+KHRoaXMucmVhZEJvb2xlYW5TZXR0aW5nKCd2YWwtbWluaS1nYW1lcy1tdXNpYy1lbmFibGVkJywgdHJ1ZSkpO1xuICByZWFkb25seSBzZnhFbmFibGVkID0gc2lnbmFsPGJvb2xlYW4+KHRoaXMucmVhZEJvb2xlYW5TZXR0aW5nKCd2YWwtbWluaS1nYW1lcy1zZngtZW5hYmxlZCcsIHRydWUpKTtcbiAgcmVhZG9ubHkgbXVzaWNWb2x1bWUgPSBzaWduYWw8bnVtYmVyPih0aGlzLnJlYWRWb2x1bWVTZXR0aW5nKCd2YWwtbWluaS1nYW1lcy1tdXNpYy12b2x1bWUnLCAwLjI1KSk7XG4gIHJlYWRvbmx5IHNmeFZvbHVtZSA9IHNpZ25hbDxudW1iZXI+KHRoaXMucmVhZFZvbHVtZVNldHRpbmcoJ3ZhbC1taW5pLWdhbWVzLXNmeC12b2x1bWUnLCAwLjgpKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzYW1wbGVDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBIVE1MQXVkaW9FbGVtZW50PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGJ1ZmZlckNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEF1ZGlvQnVmZmVyPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGJ1ZmZlclByZWxvYWRzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8dm9pZD4+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCB0aGlzLmhhbmRsZVZpc2liaWxpdHlDaGFuZ2UpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLmhhbmRsZVVzZXJBY3RpdmF0aW9uLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5oYW5kbGVVc2VyQWN0aXZhdGlvbiwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlVXNlckFjdGl2YXRpb24pO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwYWdlaGlkZScsIHRoaXMuaGFuZGxlUGFnZUhpZGUpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BhZ2VzaG93JywgdGhpcy5oYW5kbGVQYWdlU2hvdyk7XG4gICAgfVxuICB9XG5cbiAgc2V0RW5hYmxlZCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZW5hYmxlZC5zZXQodmFsdWUpO1xuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndmFsLW1pbmktZ2FtZXMtYXVkaW8nLCB2YWx1ZSA/ICcxJyA6ICcwJyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBsb2NhbFN0b3JhZ2UgcHVlZGUgbm8gZXN0YXIgZGlzcG9uaWJsZSBlbiBTU1IvdGVzdHMuXG4gICAgfVxuICAgIGlmICghdmFsdWUpIHRoaXMuc3RvcE11c2ljKCk7XG4gIH1cblxuICBzZXRNdXNpY0VuYWJsZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLm11c2ljRW5hYmxlZC5zZXQodmFsdWUpO1xuICAgIHRoaXMud3JpdGVTZXR0aW5nKCd2YWwtbWluaS1nYW1lcy1tdXNpYy1lbmFibGVkJywgdmFsdWUgPyAnMScgOiAnMCcpO1xuICAgIGlmICghdmFsdWUpIHRoaXMuc3RvcE11c2ljKCk7XG4gIH1cblxuICBzZXRTZnhFbmFibGVkKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zZnhFbmFibGVkLnNldCh2YWx1ZSk7XG4gICAgdGhpcy53cml0ZVNldHRpbmcoJ3ZhbC1taW5pLWdhbWVzLXNmeC1lbmFibGVkJywgdmFsdWUgPyAnMScgOiAnMCcpO1xuICB9XG5cbiAgc2V0TXVzaWNWb2x1bWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHZvbHVtZSA9IHRoaXMubm9ybWFsaXplVm9sdW1lKHZhbHVlKTtcbiAgICB0aGlzLm11c2ljVm9sdW1lLnNldCh2b2x1bWUpO1xuICAgIHRoaXMud3JpdGVTZXR0aW5nKCd2YWwtbWluaS1nYW1lcy1tdXNpYy12b2x1bWUnLCBgJHt2b2x1bWV9YCk7XG4gICAgaWYgKHZvbHVtZSA8PSAwKSB7XG4gICAgICB0aGlzLnN0b3BNdXNpYygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmFwcGx5U2FtcGxlTXVzaWNWb2x1bWUoKTtcbiAgfVxuXG4gIHNldFNmeFZvbHVtZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgdm9sdW1lID0gdGhpcy5ub3JtYWxpemVWb2x1bWUodmFsdWUpO1xuICAgIHRoaXMuc2Z4Vm9sdW1lLnNldCh2b2x1bWUpO1xuICAgIHRoaXMud3JpdGVTZXR0aW5nKCd2YWwtbWluaS1nYW1lcy1zZngtdm9sdW1lJywgYCR7dm9sdW1lfWApO1xuICAgIHRoaXMuYXBwbHlBY3RpdmVTYW1wbGVWb2x1bWVzKCk7XG4gIH1cblxuICBhc3luYyBzdGFydE1lbnVNdXNpYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0TXVzaWMoJ21lbnUnKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0R2FtZU11c2ljKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc3RhcnRNdXNpYygnZ2FtZScpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRCdWJibGVCbGl0ek11c2ljKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc3RhcnRNdXNpYygnYnViYmxlJyk7XG4gIH1cblxuICBhc3luYyBzdGFydE11c2ljKG1vZGU6IE1lbG9keU1vZGUgPSAnZ2FtZScpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2FuUGxheU11c2ljKCkpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuaXNEb2N1bWVudFZpc2libGUoKSkge1xuICAgICAgdGhpcy5wYXVzZWRNZWxvZHkgPSBtb2RlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLndha2VBdWRpbygpO1xuICAgIGlmICh0aGlzLm11c2ljVGltZXIgJiYgdGhpcy5hY3RpdmVNZWxvZHkgPT09IG1vZGUpIHJldHVybjtcbiAgICB0aGlzLnN0b3BNdXNpYygpO1xuICAgIHRoaXMuZmFkZU1hc3RlclRvKDEsIDAuMjQpO1xuICAgIHRoaXMuYWN0aXZlTWVsb2R5ID0gbW9kZTtcbiAgICB0aGlzLm5vdGVJbmRleCA9IDA7XG4gICAgY29uc3QgbWVsb2R5ID0gbW9kZSA9PT0gJ21lbnUnID8gdGhpcy5tZW51TWVsb2R5KCkgOiBtb2RlID09PSAnYnViYmxlJyA/IHRoaXMuYnViYmxlTWVsb2R5KCkgOiB0aGlzLmdhbWVNZWxvZHkoKTtcbiAgICBjb25zdCBpbnRlcnZhbE1zID0gbW9kZSA9PT0gJ21lbnUnID8gNjQwIDogbW9kZSA9PT0gJ2J1YmJsZScgPyA3NjAgOiAxOTA7XG4gICAgY29uc3Qgd2F2ZTogT3NjaWxsYXRvclR5cGUgPSBtb2RlID09PSAnZ2FtZScgPyAnc3F1YXJlJyA6ICd0cmlhbmdsZSc7XG4gICAgY29uc3QgZ2FpbiA9IG1vZGUgPT09ICdtZW51JyA/IDAuMDE4IDogbW9kZSA9PT0gJ2J1YmJsZScgPyAwLjAxNCA6IDAuMDI1O1xuICAgIHRoaXMubXVzaWNUaW1lciA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBzdGVwID0gdGhpcy5ub3RlSW5kZXg7XG4gICAgICBjb25zdCBbZnJlcSwgZHVyYXRpb25dID0gbWVsb2R5W3RoaXMubm90ZUluZGV4ICUgbWVsb2R5Lmxlbmd0aF07XG4gICAgICB0aGlzLm5vdGVJbmRleCArPSAxO1xuICAgICAgdm9pZCB0aGlzLm11c2ljVG9uZShmcmVxLCBkdXJhdGlvbiwgd2F2ZSwgZ2Fpbik7XG4gICAgICBpZiAobW9kZSA9PT0gJ21lbnUnKSB0aGlzLnNhdmFubmFQdWxzZShzdGVwKTtcbiAgICAgIGlmIChtb2RlID09PSAnYnViYmxlJykgdGhpcy5idWJibGVBbWJpZW50UHVsc2Uoc3RlcCk7XG4gICAgfSwgaW50ZXJ2YWxNcyk7XG4gIH1cblxuICBzdG9wTXVzaWMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubXVzaWNUaW1lcikge1xuICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5tdXNpY1RpbWVyKTtcbiAgICAgIHRoaXMubXVzaWNUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVNZWxvZHkgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wYXVzZWRNZWxvZHkgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wYXVzZWRTYW1wbGVNdXNpYyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnN0b3BTYW1wbGVNdXNpYygpO1xuICB9XG5cbiAgZmxpcCgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMudG9uZSg0NDAsIDAuMDU1LCAnc3F1YXJlJywgMC4wNSk7XG4gIH1cblxuICBtYXRjaCgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuc2VxdWVuY2UoW1xuICAgICAgWzY2MCwgMC4wOF0sXG4gICAgICBbODgwLCAwLjFdLFxuICAgICAgWzk5MCwgMC4xMl0sXG4gICAgXSk7XG4gIH1cblxuICBtaXNzKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShbXG4gICAgICBbMjIwLCAwLjA4XSxcbiAgICAgIFsxNzQuNjEsIDAuMTJdLFxuICAgIF0pO1xuICB9XG5cbiAgd2luKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcE11c2ljKCk7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFtcbiAgICAgIFs1MjMuMjUsIDAuMDldLFxuICAgICAgWzY1OS4yNSwgMC4wOV0sXG4gICAgICBbNzgzLjk5LCAwLjA5XSxcbiAgICAgIFsxMDQ2LjUsIDAuMTRdLFxuICAgICAgWzEzMTguNTEsIDAuMjJdLFxuICAgICAgWzE1NjcuOTgsIDAuMjZdLFxuICAgIF0pO1xuICB9XG5cbiAgbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BNdXNpYygpO1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShbXG4gICAgICBbMjkzLjY2LCAwLjEyXSxcbiAgICAgIFsyNDYuOTQsIDAuMTJdLFxuICAgICAgWzE5NiwgMC4yXSxcbiAgICBdKTtcbiAgfVxuXG4gIHNpbW9uUGFkKGZyZXE6IG51bWJlcik6IHZvaWQge1xuICAgIHZvaWQgdGhpcy50b25lKGZyZXEsIDAuMjIsICdzaW5lJywgMC4wNTUpO1xuICB9XG5cbiAgc2ltb25TdGVwT2soKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnRvbmUoODgwLCAwLjA4LCAndHJpYW5nbGUnLCAwLjAzNSk7XG4gIH1cblxuICBzaW1vblJvdW5kT2soKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFtcbiAgICAgIFs2NTkuMjUsIDAuMDhdLFxuICAgICAgWzg4MCwgMC4wOF0sXG4gICAgICBbMTE3NC42NiwgMC4xMl0sXG4gICAgXSk7XG4gIH1cblxuICBzaW1vbkZhaWwoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFtcbiAgICAgIFsxOTYsIDAuMTJdLFxuICAgICAgWzE0Ni44MywgMC4xOF0sXG4gICAgXSk7XG4gIH1cblxuICBidWJibGVQb3Aoc2l6ZSA9IDIsIGNvbWJvID0gMSk6IHZvaWQge1xuICAgIGNvbnN0IHNhZmVTaXplID0gTWF0aC5tYXgoMiwgTWF0aC5taW4oMTIsIE1hdGgucm91bmQoc2l6ZSkpKTtcbiAgICBjb25zdCBzYWZlQ29tYm8gPSBNYXRoLm1heCgxLCBNYXRoLm1pbig5LCBNYXRoLnJvdW5kKGNvbWJvKSkpO1xuICAgIGNvbnN0IGJhc2UgPSA1MjAgKyBzYWZlU2l6ZSAqIDE4O1xuICAgIHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMDY1LCAwLjAxOCArIHNhZmVTaXplICogMC4wMDE4LCAnYmFuZHBhc3MnLCAxMjAwICsgc2FmZVNpemUgKiA4NSk7XG4gICAgdm9pZCB0aGlzLnN3ZWVwKGJhc2UsIGJhc2UgKiAxLjksIDAuMDksICdzaW5lJywgMC4wMjYgKyBzYWZlU2l6ZSAqIDAuMDAxNCk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnRvbmUoYmFzZSAqIDEuMjUsIDAuMDU1LCAndHJpYW5nbGUnLCAwLjAxOCksIDM4KTtcbiAgICBpZiAoc2FmZVNpemUgPj0gNSB8fCBzYWZlQ29tYm8gPiAxKSB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuYnViYmxlQ29tYm8oc2FmZUNvbWJvKSwgODIpO1xuICAgIH1cbiAgfVxuXG4gIGJ1YmJsZUNvbWJvKGNvbWJvID0gMSk6IHZvaWQge1xuICAgIGNvbnN0IHNhZmVDb21ibyA9IE1hdGgubWF4KDEsIE1hdGgubWluKDksIE1hdGgucm91bmQoY29tYm8pKSk7XG4gICAgY29uc3Qgcm9vdCA9IDY2MCArIHNhZmVDb21ibyAqIDI2O1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShcbiAgICAgIFtcbiAgICAgICAgW3Jvb3QsIDAuMDQ1XSxcbiAgICAgICAgW3Jvb3QgKiAxLjI1LCAwLjA1NV0sXG4gICAgICAgIFtyb290ICogMS41LCAwLjA3XSxcbiAgICAgIF0sXG4gICAgICAndHJpYW5nbGUnLFxuICAgICAgMC4wMjQgKyBzYWZlQ29tYm8gKiAwLjAwMTYsXG4gICAgICA0MixcbiAgICApO1xuICB9XG5cbiAgYnViYmxlSW52YWxpZCgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuc2VxdWVuY2UoXG4gICAgICBbXG4gICAgICAgIFsyNDYuOTQsIDAuMDU1XSxcbiAgICAgICAgWzE5NiwgMC4wODVdLFxuICAgICAgXSxcbiAgICAgICdzaW5lJyxcbiAgICAgIDAuMDM0LFxuICAgICAgNTQsXG4gICAgKTtcbiAgfVxuXG4gIGJ1YmJsZVNldHRsZShkcm9wID0gMSk6IHZvaWQge1xuICAgIGNvbnN0IHNhZmVEcm9wID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oOSwgTWF0aC5yb3VuZChkcm9wKSkpO1xuICAgIHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMDU1LCAwLjAwOSArIHNhZmVEcm9wICogMC4wMDEsICdsb3dwYXNzJywgMzYwICsgc2FmZURyb3AgKiAyOCk7XG4gICAgdm9pZCB0aGlzLnRvbmUoMTY0LjgxICsgc2FmZURyb3AgKiA4LCAwLjA0NSwgJ3RyaWFuZ2xlJywgMC4wMTIpO1xuICB9XG5cbiAgYnViYmxlU2h1ZmZsZSgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuc2VxdWVuY2UoXG4gICAgICBbXG4gICAgICAgIFszOTIsIDAuMDRdLFxuICAgICAgICBbNTIzLjI1LCAwLjA0XSxcbiAgICAgICAgWzY1OS4yNSwgMC4wNV0sXG4gICAgICAgIFs3ODMuOTksIDAuMDddLFxuICAgICAgXSxcbiAgICAgICdzaW5lJyxcbiAgICAgIDAuMDI0LFxuICAgICAgMzgsXG4gICAgKTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuZmlsdGVyZWROb2lzZSgwLjE2LCAwLjAxOCwgJ2JhbmRwYXNzJywgOTUwKSwgMjgpO1xuICB9XG5cbiAgYnViYmxlRmV2ZXIoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnN3ZWVwKDM5MiwgMTU2Ny45OCwgMC4yNCwgJ3RyaWFuZ2xlJywgMC4wMzQpO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5zZXF1ZW5jZShbWzk4Ny43NywgMC4wNTVdLCBbMTMxOC41MSwgMC4wODVdXSwgJ3NpbmUnLCAwLjAyNSwgNDgpLCAxMjgpO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMTIsIDAuMDE0LCAnaGlnaHBhc3MnLCAyNDAwKSwgNzIpO1xuICB9XG5cbiAgYnViYmxlRmluaXNoKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcE11c2ljKCk7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFxuICAgICAgW1xuICAgICAgICBbNTIzLjI1LCAwLjA3XSxcbiAgICAgICAgWzY1OS4yNSwgMC4wN10sXG4gICAgICAgIFs3ODMuOTksIDAuMDhdLFxuICAgICAgICBbMTA0Ni41LCAwLjEzXSxcbiAgICAgICAgWzEzMTguNTEsIDAuMThdLFxuICAgICAgXSxcbiAgICAgICd0cmlhbmdsZScsXG4gICAgICAwLjA0MixcbiAgICAgIDYyLFxuICAgICk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4xOCwgMC4wMTYsICdiYW5kcGFzcycsIDE4MDApLCAxMTApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBsYXlTYW1wbGUoc2FtcGxlOiBTYW1wbGVDb25maWcsIGZhbGxiYWNrOiAoKSA9PiB2b2lkKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNhblBsYXlTZngoKSB8fCB0eXBlb2YgQXVkaW8gPT09ICd1bmRlZmluZWQnKSByZXR1cm4gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuc2FtcGxlQ2FjaGUuZ2V0KHNhbXBsZS5zcmMpO1xuICAgICAgY29uc3QgYXVkaW8gPSBjYWNoZWQgPyAoY2FjaGVkLmNsb25lTm9kZSh0cnVlKSBhcyBIVE1MQXVkaW9FbGVtZW50KSA6IG5ldyBBdWRpbyhzYW1wbGUuc3JjKTtcbiAgICAgIGF1ZGlvLnByZWxvYWQgPSAnYXV0byc7XG4gICAgICBhdWRpby5kYXRhc2V0WydiYXNlVm9sdW1lJ10gPSBgJHtzYW1wbGUudm9sdW1lfWA7XG4gICAgICBhdWRpby52b2x1bWUgPSB0aGlzLnNhbXBsZVZvbHVtZShzYW1wbGUpO1xuICAgICAgdGhpcy5hY3RpdmVTYW1wbGVzLmFkZChhdWRpbyk7XG4gICAgICBjb25zdCByZWxlYXNlID0gKCkgPT4gdGhpcy5hY3RpdmVTYW1wbGVzLmRlbGV0ZShhdWRpbyk7XG4gICAgICBhdWRpby5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsIHJlbGVhc2UsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICAgIGF1ZGlvLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgcmVsZWFzZSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgICAgY29uc3QgcGxheVJlc3VsdCA9IGF1ZGlvLnBsYXkoKTtcbiAgICAgIGlmIChwbGF5UmVzdWx0KSB7XG4gICAgICAgIHBsYXlSZXN1bHQuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIHJlbGVhc2UoKTtcbiAgICAgICAgICBmYWxsYmFjaygpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBwbGF5QnVmZmVyZWRTYW1wbGUoc2FtcGxlOiBTYW1wbGVDb25maWcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FuUGxheVNmeCgpKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgYnVmZmVyID0gdGhpcy5idWZmZXJDYWNoZS5nZXQoc2FtcGxlLnNyYyk7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jb250ZXh0O1xuICAgIGlmICghYnVmZmVyIHx8ICFjdHggfHwgY3R4LnN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgdm9pZCB0aGlzLnByZWxvYWRTYW1wbGVCdWZmZXIoc2FtcGxlLnNyYyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBpZiAoY3R4LnN0YXRlID09PSAnc3VzcGVuZGVkJykgdm9pZCBjdHgucmVzdW1lKCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGN0eC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcbiAgICAgIGNvbnN0IGdhaW4gPSBjdHguY3JlYXRlR2FpbigpO1xuICAgICAgc291cmNlLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgICAgIGdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZSh0aGlzLnNhbXBsZVZvbHVtZShzYW1wbGUpLCBjdHguY3VycmVudFRpbWUpO1xuICAgICAgc291cmNlLmNvbm5lY3QoZ2Fpbik7XG4gICAgICBnYWluLmNvbm5lY3QodGhpcy5tYXN0ZXJHYWluID8/IGN0eC5kZXN0aW5hdGlvbik7XG4gICAgICB0aGlzLmFjdGl2ZUJ1ZmZlclNvdXJjZXMuYWRkKHNvdXJjZSk7XG4gICAgICBzb3VyY2Uub25lbmRlZCA9ICgpID0+IHRoaXMuYWN0aXZlQnVmZmVyU291cmNlcy5kZWxldGUoc291cmNlKTtcbiAgICAgIHNvdXJjZS5zdGFydChjdHguY3VycmVudFRpbWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZWFkRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkQm9vbGVhblNldHRpbmcoJ3ZhbC1taW5pLWdhbWVzLWF1ZGlvJywgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRCb29sZWFuU2V0dGluZyhrZXk6IHN0cmluZywgZmFsbGJhY2s6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsbGJhY2s7XG4gICAgICByZXR1cm4gdmFsdWUgIT09ICcwJztcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlYWRWb2x1bWVTZXR0aW5nKGtleTogc3RyaW5nLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyIHtcbiAgICB2b2lkIHRoaXMuZGVmYXVsdHNSZWFkeTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICAgIGlmIChzdG9yZWQgPT09IG51bGwgfHwgc3RvcmVkLnRyaW0oKSA9PT0gJycpIHJldHVybiBmYWxsYmFjaztcbiAgICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyKHN0b3JlZCk7XG4gICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHZhbHVlKSA/IHRoaXMubm9ybWFsaXplVm9sdW1lKHZhbHVlKSA6IGZhbGxiYWNrO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgd3JpdGVTZXR0aW5nKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gbG9jYWxTdG9yYWdlIHB1ZWRlIG5vIGVzdGFyIGRpc3BvbmlibGUgZW4gU1NSL3Rlc3RzLlxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplVm9sdW1lKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCB2YWx1ZSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByZWxvYWRTYW1wbGUoc3JjOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zYW1wbGVDYWNoZS5oYXMoc3JjKSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhdWRpbyA9IG5ldyBBdWRpbyhzcmMpO1xuICAgICAgYXVkaW8ucHJlbG9hZCA9ICdhdXRvJztcbiAgICAgIGF1ZGlvLmxvYWQoKTtcbiAgICAgIHRoaXMuc2FtcGxlQ2FjaGUuc2V0KHNyYywgYXVkaW8pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gU2kgZWwgbmF2ZWdhZG9yIG5vIHBlcm1pdGUgcHJlY2FyZ2FyLCBzZSBpbnRlbnRhcmEgYWwgcmVwcm9kdWNpci5cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcHJlbG9hZFNhbXBsZUJ1ZmZlcihzcmM6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmJ1ZmZlckNhY2hlLmhhcyhzcmMpKSByZXR1cm47XG4gICAgY29uc3QgYWN0aXZlUHJlbG9hZCA9IHRoaXMuYnVmZmVyUHJlbG9hZHMuZ2V0KHNyYyk7XG4gICAgaWYgKGFjdGl2ZVByZWxvYWQpIHJldHVybiBhY3RpdmVQcmVsb2FkO1xuXG4gICAgY29uc3QgcHJlbG9hZCA9IChhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGZldGNoID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICAgICAgY29uc3QgY3R4ID0gYXdhaXQgdGhpcy5lbnN1cmVDb250ZXh0KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHNyYyk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IGN0eC5kZWNvZGVBdWRpb0RhdGEoZGF0YS5zbGljZSgwKSk7XG4gICAgICB0aGlzLmJ1ZmZlckNhY2hlLnNldChzcmMsIGJ1ZmZlcik7XG4gICAgfSkoKVxuICAgICAgLmNhdGNoKCgpID0+IHVuZGVmaW5lZClcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5idWZmZXJQcmVsb2Fkcy5kZWxldGUoc3JjKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5idWZmZXJQcmVsb2Fkcy5zZXQoc3JjLCBwcmVsb2FkKTtcbiAgICByZXR1cm4gcHJlbG9hZDtcbiAgfVxuXG4gIC8qKiBTdWJlIGEgdW4gdmFsb3IgYXVkaWJsZSBsb3Mgdm9sdW1lbmVzIHF1ZSBxdWVkYXJvbiBlbiBjZXJvIGRlIHVuYSB2ZXJzaW9uXG4gICAqIHByZXZpYS4gTGEgY2xhdmUgZGUgc3RvcmFnZSBjb25zZXJ2YSBlbCBub21icmUgdmllam8gYSBwcm9wb3NpdG86IGNhbWJpYXJsYVxuICAgKiBoYXJpYSBxdWUgbGEgbWlncmFjaW9uIHNlIHZ1ZWx2YSBhIGNvcnJlciB5IGxlIHBpc2UgZWwgdm9sdW1lbiBhIHF1aWVuIHlhXG4gICAqIGxvIGVsaWdpby4gKi9cbiAgcHJpdmF0ZSBtaWdyYXRlQXVkaW9EZWZhdWx0cygpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWlncmF0aW9uS2V5ID0gJ3ZhbC1taW5pLWdhbWVzLWNoZXNzaW1hbHMtYXVkaW8tZGVmYXVsdHMtdjInO1xuICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG1pZ3JhdGlvbktleSkgPT09ICcxJykgcmV0dXJuIHRydWU7XG4gICAgICBjb25zdCBzdG9yZWRNdXNpY1ZvbHVtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd2YWwtbWluaS1nYW1lcy1tdXNpYy12b2x1bWUnKTtcbiAgICAgIGNvbnN0IHN0b3JlZFNmeFZvbHVtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd2YWwtbWluaS1nYW1lcy1zZngtdm9sdW1lJyk7XG4gICAgICBpZiAoIXN0b3JlZE11c2ljVm9sdW1lIHx8IHN0b3JlZE11c2ljVm9sdW1lID09PSAnMCcpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3ZhbC1taW5pLWdhbWVzLW11c2ljLXZvbHVtZScsICcwLjI1Jyk7XG4gICAgICB9XG4gICAgICBpZiAoIXN0b3JlZFNmeFZvbHVtZSB8fCBzdG9yZWRTZnhWb2x1bWUgPT09ICcwJykge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndmFsLW1pbmktZ2FtZXMtc2Z4LXZvbHVtZScsICcwLjgnKTtcbiAgICAgIH1cbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG1pZ3JhdGlvbktleSwgJzEnKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGxvY2FsU3RvcmFnZSBwdWVkZSBubyBlc3RhciBkaXNwb25pYmxlIGVuIFNTUi90ZXN0cy5cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuLyoqIEdhbmNobyBwYXJhIHF1ZSB1biBqdWVnbyBwcmVjYXJndWUgc3VzIHByb3Bpb3Mgc2FtcGxlcyBlbiBjdWFudG8gZWwgdXN1YXJpb1xuICAgKiBpbnRlcmFjdHVhIChhbnRlcywgZWwgbmF2ZWdhZG9yIG5vIGRlamEgdG9jYXIgYXVkaW8pLiBWYWNpbyBwb3IgZGVmZWN0by4gKi9cbiAgcHJvdGVjdGVkIHByZWxvYWRHYW1lU2FtcGxlcygpOiB2b2lkIHt9XG5cbiAgcHJpdmF0ZSBjYW5QbGF5TXVzaWMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlZCgpICYmIHRoaXMubXVzaWNFbmFibGVkKCkgJiYgdGhpcy5tdXNpY1ZvbHVtZSgpID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgY2FuUGxheVNmeCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVkKCkgJiYgdGhpcy5zZnhFbmFibGVkKCkgJiYgdGhpcy5zZnhWb2x1bWUoKSA+IDA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZUNvbnRleHQoKTogUHJvbWlzZTxBdWRpb0NvbnRleHQ+IHtcbiAgICBpZiAoIXRoaXMuY29udGV4dCB8fCB0aGlzLmNvbnRleHQuc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICB0aGlzLmNvbnRleHQgPSBuZXcgQXVkaW9Db250ZXh0KCk7XG4gICAgICB0aGlzLm1hc3RlckdhaW4gPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuICAgICAgdGhpcy5tYXN0ZXJHYWluLmdhaW4udmFsdWUgPSAxO1xuICAgICAgdGhpcy5tYXN0ZXJHYWluLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dDtcbiAgfVxuXG4gIHByaXZhdGUgbWVudU1lbG9keSgpOiBOb3RlW10ge1xuICAgIHJldHVybiBbXG4gICAgICBbMjIwLCAwLjM4XSxcbiAgICAgIFswLCAwLjEyXSxcbiAgICAgIFsyNjEuNjMsIDAuMzRdLFxuICAgICAgWzMyOS42MywgMC40Ml0sXG4gICAgICBbMjkzLjY2LCAwLjI4XSxcbiAgICAgIFswLCAwLjEyXSxcbiAgICAgIFszOTIsIDAuNDhdLFxuICAgICAgWzMyOS42MywgMC4zNF0sXG4gICAgICBbMjYxLjYzLCAwLjM2XSxcbiAgICAgIFsyMjAsIDAuNThdLFxuICAgICAgWzAsIDAuMl0sXG4gICAgICBbMjkzLjY2LCAwLjM0XSxcbiAgICAgIFszMjkuNjMsIDAuNDJdLFxuICAgICAgWzQ0MCwgMC41XSxcbiAgICAgIFszOTIsIDAuMzZdLFxuICAgICAgWzI2MS42MywgMC42Ml0sXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgc2F2YW5uYVB1bHNlKHN0ZXA6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChzdGVwICUgNCA9PT0gMCkge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDk2LCA0OCwgMC4xOCwgJ3NpbmUnLCAwLjAxMiksIDE4KTtcbiAgICB9XG4gICAgaWYgKHN0ZXAgJSA4ID09PSA1KSB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMudG9uZSgxNjQuODEsIDAuMDQ1LCAndHJpYW5nbGUnLCAwLjAxMiksIDk2KTtcbiAgICB9XG4gICAgaWYgKHN0ZXAgJSAxNiA9PT0gMTApIHtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5zd2VlcCgxNDYuODMsIDE5NiwgMC4wOCwgJ3RyaWFuZ2xlJywgMC4wMSksIDE0MCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnYW1lTWVsb2R5KCk6IE5vdGVbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFs1MjMuMjUsIDAuMTNdLFxuICAgICAgWzY1OS4yNSwgMC4xM10sXG4gICAgICBbNzgzLjk5LCAwLjEzXSxcbiAgICAgIFsxMDQ2LjUsIDAuMThdLFxuICAgICAgWzc4My45OSwgMC4xM10sXG4gICAgICBbNjU5LjI1LCAwLjEzXSxcbiAgICAgIFs1ODcuMzMsIDAuMThdLFxuICAgICAgWzY1OS4yNSwgMC4xOF0sXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgYnViYmxlTWVsb2R5KCk6IE5vdGVbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFsyNjEuNjMsIDAuNzJdLFxuICAgICAgWzAsIDAuMThdLFxuICAgICAgWzMyOS42MywgMC42Nl0sXG4gICAgICBbMzkyLCAwLjc4XSxcbiAgICAgIFswLCAwLjI0XSxcbiAgICAgIFszNDkuMjMsIDAuNjRdLFxuICAgICAgWzI5My42NiwgMC43Ml0sXG4gICAgICBbMCwgMC4yOF0sXG4gICAgICBbNDQwLCAwLjg0XSxcbiAgICAgIFszOTIsIDAuN10sXG4gICAgICBbMzI5LjYzLCAwLjc4XSxcbiAgICAgIFswLCAwLjMyXSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBidWJibGVBbWJpZW50UHVsc2Uoc3RlcDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHN0ZXAgJSA0ID09PSAwKSB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMubXVzaWNUb25lKDEzMC44MSwgMS4zNSwgJ3NpbmUnLCAwLjAwOSksIDI0KTtcbiAgICB9XG4gICAgaWYgKHN0ZXAgJSA2ID09PSAyKSB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMubXVzaWNUb25lKDE5NiwgMC45NSwgJ3RyaWFuZ2xlJywgMC4wMDgpLCAxMjApO1xuICAgIH1cbiAgICBpZiAoc3RlcCAlIDggPT09IDUpIHtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5tdXNpY1RvbmUoNTIzLjI1LCAwLjQyLCAnc2luZScsIDAuMDA2KSwgMTgwKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2VxdWVuY2UoXG4gICAgbm90ZXM6IE5vdGVbXSxcbiAgICB3YXZlOiBPc2NpbGxhdG9yVHlwZSA9ICdzcXVhcmUnLFxuICAgIGdhaW4gPSAwLjA1NSxcbiAgICBpbnRlcnZhbE1zID0gOTAsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5lbmFibGVkKCkpIHJldHVybjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBjb25zdCBbZnJlcSwgZHVyYXRpb25dID0gbm90ZXNbaV07XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMudG9uZShmcmVxLCBkdXJhdGlvbiwgd2F2ZSwgZ2FpbiksIGkgKiBpbnRlcnZhbE1zKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc3RhcnRTYW1wbGVNdXNpYyhjb25maWc6IFNhbXBsZU11c2ljQ29uZmlnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNhblBsYXlNdXNpYygpKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzRG9jdW1lbnRWaXNpYmxlKCkpIHtcbiAgICAgIHRoaXMucGF1c2VkU2FtcGxlTXVzaWMgPSBjb25maWc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnNhbXBsZU11c2ljQ29uZmlnPy5zcmMgPT09IGNvbmZpZy5zcmMgJiYgIXRoaXMuc2FtcGxlTXVzaWM/LnBhdXNlZCkgcmV0dXJuO1xuICAgIHRoaXMuc3RvcE11c2ljKCk7XG4gICAgaWYgKHR5cGVvZiBBdWRpbyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcblxuICAgIGNvbnN0IGF1ZGlvID0gbmV3IEF1ZGlvKGNvbmZpZy5zcmMpO1xuICAgIGF1ZGlvLmxvb3AgPSB0cnVlO1xuICAgIGF1ZGlvLnByZWxvYWQgPSAnYXV0byc7XG4gICAgdGhpcy5zYW1wbGVNdXNpYyA9IGF1ZGlvO1xuICAgIHRoaXMuc2FtcGxlTXVzaWNDb25maWcgPSBjb25maWc7XG4gICAgYXdhaXQgdGhpcy5jb25uZWN0U2FtcGxlTXVzaWMoYXVkaW8sIGNvbmZpZyk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGF1ZGlvLnBsYXkoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMucGF1c2VkU2FtcGxlTXVzaWMgPSBjb25maWc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdG9wU2FtcGxlTXVzaWMoKTogdm9pZCB7XG4gICAgY29uc3QgbXVzaWMgPSB0aGlzLnNhbXBsZU11c2ljO1xuICAgIHRoaXMuc2FtcGxlTXVzaWMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zYW1wbGVNdXNpY0NvbmZpZyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRpc2Nvbm5lY3RTYW1wbGVNdXNpY0dyYXBoKCk7XG4gICAgaWYgKCFtdXNpYykgcmV0dXJuO1xuICAgIG11c2ljLnBhdXNlKCk7XG4gICAgbXVzaWMuY3VycmVudFRpbWUgPSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNhbXBsZU11c2ljVm9sdW1lKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zYW1wbGVNdXNpYyB8fCAhdGhpcy5zYW1wbGVNdXNpY0NvbmZpZykgcmV0dXJuO1xuICAgIGNvbnN0IHZvbHVtZSA9IHRoaXMuc2FtcGxlTXVzaWNWb2x1bWUodGhpcy5zYW1wbGVNdXNpY0NvbmZpZyk7XG4gICAgaWYgKHRoaXMuc2FtcGxlTXVzaWNHYWluICYmIHRoaXMuY29udGV4dCkge1xuICAgICAgdGhpcy5zYW1wbGVNdXNpY0dhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodm9sdW1lLCB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsIDAuMDI1KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zYW1wbGVNdXNpYy52b2x1bWUgPSB2b2x1bWU7XG4gIH1cblxuICBwcml2YXRlIHNhbXBsZU11c2ljVm9sdW1lKGNvbmZpZzogU2FtcGxlTXVzaWNDb25maWcpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBjb25maWcudm9sdW1lICogdGhpcy5tdXNpY1ZvbHVtZSgpKSk7XG4gIH1cblxuICBwcml2YXRlIHNhbXBsZVZvbHVtZShzYW1wbGU6IFNhbXBsZUNvbmZpZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHNhbXBsZS52b2x1bWUgKiB0aGlzLnNmeFZvbHVtZSgpKSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5QWN0aXZlU2FtcGxlVm9sdW1lcygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGF1ZGlvIG9mIHRoaXMuYWN0aXZlU2FtcGxlcykge1xuICAgICAgY29uc3QgYmFzZVZvbHVtZSA9IE51bWJlcihhdWRpby5kYXRhc2V0WydiYXNlVm9sdW1lJ10gPz8gJzEnKTtcbiAgICAgIGF1ZGlvLnZvbHVtZSA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIGJhc2VWb2x1bWUgKiB0aGlzLnNmeFZvbHVtZSgpKSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHN0b3BBY3RpdmVTYW1wbGVzKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYXVkaW8gb2YgdGhpcy5hY3RpdmVTYW1wbGVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhdWRpby5wYXVzZSgpO1xuICAgICAgICBhdWRpby5jdXJyZW50VGltZSA9IDA7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gRWwgZWxlbWVudG8gcHVlZGUgaGFiZXIgdGVybWluYWRvIG1pZW50cmFzIHNlIGVzdGFiYSBsaW1waWFuZG8uXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlU2FtcGxlcy5jbGVhcigpO1xuXG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2YgdGhpcy5hY3RpdmVCdWZmZXJTb3VyY2VzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzb3VyY2Uuc3RvcCgpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEVsIGJ1ZmZlciBwdWVkZSBoYWJlciB0ZXJtaW5hZG8gYW50ZXMgZGUgcGVkaXIgZWwgc3RvcC5cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hY3RpdmVCdWZmZXJTb3VyY2VzLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbm5lY3RTYW1wbGVNdXNpYyhhdWRpbzogSFRNTEF1ZGlvRWxlbWVudCwgY29uZmlnOiBTYW1wbGVNdXNpY0NvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZvbHVtZSA9IHRoaXMuc2FtcGxlTXVzaWNWb2x1bWUoY29uZmlnKTtcbiAgICBhdWRpby52b2x1bWUgPSB2b2x1bWU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGN0eCA9IGF3YWl0IHRoaXMud2FrZUF1ZGlvKCk7XG4gICAgICBjb25zdCBzb3VyY2UgPSBjdHguY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKGF1ZGlvKTtcbiAgICAgIGNvbnN0IGdhaW4gPSBjdHguY3JlYXRlR2FpbigpO1xuICAgICAgZ2Fpbi5nYWluLnNldFZhbHVlQXRUaW1lKHZvbHVtZSwgY3R4LmN1cnJlbnRUaW1lKTtcbiAgICAgIHNvdXJjZS5jb25uZWN0KGdhaW4pO1xuICAgICAgZ2Fpbi5jb25uZWN0KHRoaXMubWFzdGVyR2FpbiA/PyBjdHguZGVzdGluYXRpb24pO1xuICAgICAgdGhpcy5zYW1wbGVNdXNpY1NvdXJjZSA9IHNvdXJjZTtcbiAgICAgIHRoaXMuc2FtcGxlTXVzaWNHYWluID0gZ2FpbjtcbiAgICAgIGF1ZGlvLnZvbHVtZSA9IDE7XG4gICAgfSBjYXRjaCB7XG4gICAgICBhdWRpby52b2x1bWUgPSB2b2x1bWU7XG4gICAgICB0aGlzLnNhbXBsZU11c2ljU291cmNlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5zYW1wbGVNdXNpY0dhaW4gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkaXNjb25uZWN0U2FtcGxlTXVzaWNHcmFwaCgpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zYW1wbGVNdXNpY1NvdXJjZT8uZGlzY29ubmVjdCgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRWwgbm9kbyBwdWVkZSBlc3RhciBkZXNjb25lY3RhZG8gc2kgZWwgbmF2ZWdhZG9yIGxpYmVybyBsYSBwaXN0YS5cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc2FtcGxlTXVzaWNHYWluPy5kaXNjb25uZWN0KCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBFbCBub2RvIHB1ZWRlIGVzdGFyIGRlc2NvbmVjdGFkbyBzaSBlbCBuYXZlZ2Fkb3IgbGliZXJvIGxhIHBpc3RhLlxuICAgIH1cbiAgICB0aGlzLnNhbXBsZU11c2ljU291cmNlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc2FtcGxlTXVzaWNHYWluID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHRvbmUoZnJlcTogbnVtYmVyLCBkdXJhdGlvbiA9IDAuMSwgdHlwZTogT3NjaWxsYXRvclR5cGUgPSAnc3F1YXJlJywgZ2FpblZhbHVlID0gMC4wNCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYW5QbGF5U2Z4KCkpIHJldHVybjtcbiAgICBpZiAoZnJlcSA8PSAwKSByZXR1cm47XG4gICAgY29uc3QgY3R4ID0gYXdhaXQgdGhpcy53YWtlQXVkaW8oKTtcbiAgICBjb25zdCBvc2NpbGxhdG9yID0gY3R4LmNyZWF0ZU9zY2lsbGF0b3IoKTtcbiAgICBjb25zdCBnYWluID0gY3R4LmNyZWF0ZUdhaW4oKTtcbiAgICBvc2NpbGxhdG9yLnR5cGUgPSB0eXBlO1xuICAgIG9zY2lsbGF0b3IuZnJlcXVlbmN5LnZhbHVlID0gZnJlcTtcbiAgICBnYWluLmdhaW4uc2V0VmFsdWVBdFRpbWUoMC4wMDAxLCBjdHguY3VycmVudFRpbWUpO1xuICAgIGdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKGdhaW5WYWx1ZSAqIHRoaXMuc2Z4Vm9sdW1lKCksIGN0eC5jdXJyZW50VGltZSArIDAuMDEpO1xuICAgIGdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAwMSwgY3R4LmN1cnJlbnRUaW1lICsgZHVyYXRpb24pO1xuICAgIG9zY2lsbGF0b3IuY29ubmVjdChnYWluKTtcbiAgICBnYWluLmNvbm5lY3QodGhpcy5tYXN0ZXJHYWluID8/IGN0eC5kZXN0aW5hdGlvbik7XG4gICAgb3NjaWxsYXRvci5zdGFydCgpO1xuICAgIG9zY2lsbGF0b3Iuc3RvcChjdHguY3VycmVudFRpbWUgKyBkdXJhdGlvbiArIDAuMDIpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBtdXNpY1RvbmUoZnJlcTogbnVtYmVyLCBkdXJhdGlvbiA9IDAuMSwgdHlwZTogT3NjaWxsYXRvclR5cGUgPSAndHJpYW5nbGUnLCBnYWluVmFsdWUgPSAwLjAxOCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYW5QbGF5TXVzaWMoKSkgcmV0dXJuO1xuICAgIGlmIChmcmVxIDw9IDApIHJldHVybjtcbiAgICBjb25zdCBjdHggPSBhd2FpdCB0aGlzLndha2VBdWRpbygpO1xuICAgIGNvbnN0IG9zY2lsbGF0b3IgPSBjdHguY3JlYXRlT3NjaWxsYXRvcigpO1xuICAgIGNvbnN0IGdhaW4gPSBjdHguY3JlYXRlR2FpbigpO1xuICAgIG9zY2lsbGF0b3IudHlwZSA9IHR5cGU7XG4gICAgb3NjaWxsYXRvci5mcmVxdWVuY3kudmFsdWUgPSBmcmVxO1xuICAgIGdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLjAwMDEsIGN0eC5jdXJyZW50VGltZSk7XG4gICAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoZ2FpblZhbHVlICogdGhpcy5tdXNpY1ZvbHVtZSgpLCBjdHguY3VycmVudFRpbWUgKyAwLjA4KTtcbiAgICBnYWluLmdhaW4uc2V0VGFyZ2V0QXRUaW1lKGdhaW5WYWx1ZSAqIHRoaXMubXVzaWNWb2x1bWUoKSAqIDAuNzQsIGN0eC5jdXJyZW50VGltZSArIDAuMTIsIDAuMik7XG4gICAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoMC4wMDAxLCBjdHguY3VycmVudFRpbWUgKyBkdXJhdGlvbik7XG4gICAgb3NjaWxsYXRvci5jb25uZWN0KGdhaW4pO1xuICAgIGdhaW4uY29ubmVjdCh0aGlzLm1hc3RlckdhaW4gPz8gY3R4LmRlc3RpbmF0aW9uKTtcbiAgICBvc2NpbGxhdG9yLnN0YXJ0KCk7XG4gICAgb3NjaWxsYXRvci5zdG9wKGN0eC5jdXJyZW50VGltZSArIGR1cmF0aW9uICsgMC4wOCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc3dlZXAoXG4gICAgZnJvbUZyZXE6IG51bWJlcixcbiAgICB0b0ZyZXE6IG51bWJlcixcbiAgICBkdXJhdGlvbiA9IDAuMTYsXG4gICAgdHlwZTogT3NjaWxsYXRvclR5cGUgPSAndHJpYW5nbGUnLFxuICAgIGdhaW5WYWx1ZSA9IDAuMDMsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYW5QbGF5U2Z4KCkpIHJldHVybjtcbiAgICBjb25zdCBjdHggPSBhd2FpdCB0aGlzLndha2VBdWRpbygpO1xuICAgIGNvbnN0IG9zY2lsbGF0b3IgPSBjdHguY3JlYXRlT3NjaWxsYXRvcigpO1xuICAgIGNvbnN0IGdhaW4gPSBjdHguY3JlYXRlR2FpbigpO1xuICAgIG9zY2lsbGF0b3IudHlwZSA9IHR5cGU7XG4gICAgb3NjaWxsYXRvci5mcmVxdWVuY3kuc2V0VmFsdWVBdFRpbWUoZnJvbUZyZXEsIGN0eC5jdXJyZW50VGltZSk7XG4gICAgb3NjaWxsYXRvci5mcmVxdWVuY3kuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZShNYXRoLm1heCgxLCB0b0ZyZXEpLCBjdHguY3VycmVudFRpbWUgKyBkdXJhdGlvbik7XG4gICAgZ2Fpbi5nYWluLnNldFZhbHVlQXRUaW1lKDAuMDAwMSwgY3R4LmN1cnJlbnRUaW1lKTtcbiAgICBnYWluLmdhaW4uZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZShnYWluVmFsdWUgKiB0aGlzLnNmeFZvbHVtZSgpLCBjdHguY3VycmVudFRpbWUgKyAwLjAxKTtcbiAgICBnYWluLmdhaW4uZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSgwLjAwMDEsIGN0eC5jdXJyZW50VGltZSArIGR1cmF0aW9uKTtcbiAgICBvc2NpbGxhdG9yLmNvbm5lY3QoZ2Fpbik7XG4gICAgZ2Fpbi5jb25uZWN0KHRoaXMubWFzdGVyR2FpbiA/PyBjdHguZGVzdGluYXRpb24pO1xuICAgIG9zY2lsbGF0b3Iuc3RhcnQoKTtcbiAgICBvc2NpbGxhdG9yLnN0b3AoY3R4LmN1cnJlbnRUaW1lICsgZHVyYXRpb24gKyAwLjAyKTtcbiAgfVxuXG4gIC8vIExvcyBqdWVnb3MgZ2VuZXJhbiBzdXMgY2FwYXMgY29uIFdlYkF1ZGlvIGVuIHZleiBkZSB1c2FyIHNhbXBsZXMgZGUgdGVyY2Vyb3MsXG4gIC8vIGF2b2lkaW5nIGxpY2Vuc2luZyByaXNrIHdoaWxlIGtlZXBpbmcgZWFjaCBhbmltYWwgcG93ZXIgZXhwcmVzc2l2ZS5cbiAgcHJvdGVjdGVkIGFzeW5jIGZpbHRlcmVkTm9pc2UoXG4gICAgZHVyYXRpb24gPSAwLjEyLFxuICAgIGdhaW5WYWx1ZSA9IDAuMDI1LFxuICAgIGZpbHRlclR5cGU6IEJpcXVhZEZpbHRlclR5cGUgPSAnYmFuZHBhc3MnLFxuICAgIGZyZXF1ZW5jeSA9IDkwMCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNhblBsYXlTZngoKSkgcmV0dXJuO1xuICAgIGNvbnN0IGN0eCA9IGF3YWl0IHRoaXMud2FrZUF1ZGlvKCk7XG4gICAgY29uc3Qgc2FtcGxlQ291bnQgPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKGN0eC5zYW1wbGVSYXRlICogZHVyYXRpb24pKTtcbiAgICBjb25zdCBidWZmZXIgPSBjdHguY3JlYXRlQnVmZmVyKDEsIHNhbXBsZUNvdW50LCBjdHguc2FtcGxlUmF0ZSk7XG4gICAgY29uc3QgY2hhbm5lbCA9IGJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNhbXBsZUNvdW50OyBpICs9IDEpIHtcbiAgICAgIGNvbnN0IGRlY2F5ID0gMSAtIGkgLyBzYW1wbGVDb3VudDtcbiAgICAgIGNoYW5uZWxbaV0gPSAoTWF0aC5yYW5kb20oKSAqIDIgLSAxKSAqIGRlY2F5O1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZSA9IGN0eC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcbiAgICBjb25zdCBmaWx0ZXIgPSBjdHguY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG4gICAgY29uc3QgZ2FpbiA9IGN0eC5jcmVhdGVHYWluKCk7XG4gICAgZmlsdGVyLnR5cGUgPSBmaWx0ZXJUeXBlO1xuICAgIGZpbHRlci5mcmVxdWVuY3kudmFsdWUgPSBmcmVxdWVuY3k7XG4gICAgZmlsdGVyLlEudmFsdWUgPSBmaWx0ZXJUeXBlID09PSAnbG93cGFzcycgPyAwLjcgOiAxLjg7XG4gICAgZ2Fpbi5nYWluLnNldFZhbHVlQXRUaW1lKDAuMDAwMSwgY3R4LmN1cnJlbnRUaW1lKTtcbiAgICBnYWluLmdhaW4uZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZShnYWluVmFsdWUgKiB0aGlzLnNmeFZvbHVtZSgpLCBjdHguY3VycmVudFRpbWUgKyAwLjAxMik7XG4gICAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoMC4wMDAxLCBjdHguY3VycmVudFRpbWUgKyBkdXJhdGlvbik7XG4gICAgc291cmNlLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgICBzb3VyY2UuY29ubmVjdChmaWx0ZXIpO1xuICAgIGZpbHRlci5jb25uZWN0KGdhaW4pO1xuICAgIGdhaW4uY29ubmVjdCh0aGlzLm1hc3RlckdhaW4gPz8gY3R4LmRlc3RpbmF0aW9uKTtcbiAgICBzb3VyY2Uuc3RhcnQoKTtcbiAgICBzb3VyY2Uuc3RvcChjdHguY3VycmVudFRpbWUgKyBkdXJhdGlvbiArIDAuMDIpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmIChkb2N1bWVudC5oaWRkZW4pIHtcbiAgICAgIHRoaXMucGF1c2VGb3JCYWNrZ3JvdW5kKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZvaWQgdGhpcy5yZXN1bWVGcm9tQmFja2dyb3VuZCgpO1xuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlUGFnZUhpZGUgPSAoKTogdm9pZCA9PiB7XG4gICAgdGhpcy5wYXVzZUZvckJhY2tncm91bmQoKTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZVBhZ2VTaG93ID0gKCk6IHZvaWQgPT4ge1xuICAgIHZvaWQgdGhpcy5yZXN1bWVGcm9tQmFja2dyb3VuZCgpO1xuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlVXNlckFjdGl2YXRpb24gPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQoKSB8fCAhdGhpcy5pc0RvY3VtZW50VmlzaWJsZSgpKSByZXR1cm47XG4gICAgdGhpcy5wcmVsb2FkR2FtZVNhbXBsZXMoKTtcbiAgICBpZiAodGhpcy5wYXVzZWRTYW1wbGVNdXNpYykge1xuICAgICAgdm9pZCB0aGlzLnJlc3VtZUZyb21CYWNrZ3JvdW5kKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZvaWQgdGhpcy53YWtlQXVkaW8oKTtcbiAgfTtcblxuICBwcml2YXRlIHBhdXNlRm9yQmFja2dyb3VuZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY3RpdmVNZWxvZHkpIHRoaXMucGF1c2VkTWVsb2R5ID0gdGhpcy5hY3RpdmVNZWxvZHk7XG4gICAgaWYgKHRoaXMuc2FtcGxlTXVzaWMgJiYgdGhpcy5zYW1wbGVNdXNpY0NvbmZpZykge1xuICAgICAgdGhpcy5wYXVzZWRTYW1wbGVNdXNpYyA9IHRoaXMuc2FtcGxlTXVzaWNDb25maWc7XG4gICAgICB0aGlzLnN0b3BTYW1wbGVNdXNpYygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5tdXNpY1RpbWVyKSB7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLm11c2ljVGltZXIpO1xuICAgICAgdGhpcy5tdXNpY1RpbWVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZU1lbG9keSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmZhZGVNYXN0ZXJUbygwLjAwMDEsIDAuMik7XG4gICAgaWYgKHRoaXMuc3VzcGVuZFRpbWVyKSB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuc3VzcGVuZFRpbWVyKTtcbiAgICB0aGlzLnN1c3BlbmRUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc3VzcGVuZFRpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgdm9pZCB0aGlzLmNvbnRleHQ/LnN1c3BlbmQoKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgIH0sIDI2MCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc3VtZUZyb21CYWNrZ3JvdW5kKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN1c3BlbmRUaW1lcikge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnN1c3BlbmRUaW1lcik7XG4gICAgICB0aGlzLnN1c3BlbmRUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQoKSkgcmV0dXJuO1xuICAgIGNvbnN0IHNhbXBsZU11c2ljID0gdGhpcy5wYXVzZWRTYW1wbGVNdXNpYztcbiAgICBpZiAoc2FtcGxlTXVzaWMpIHtcbiAgICAgIHRoaXMucGF1c2VkU2FtcGxlTXVzaWMgPSB1bmRlZmluZWQ7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0U2FtcGxlTXVzaWMoc2FtcGxlTXVzaWMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtZWxvZHkgPSB0aGlzLnBhdXNlZE1lbG9keTtcbiAgICBpZiAoIW1lbG9keSkgcmV0dXJuO1xuICAgIHRoaXMucGF1c2VkTWVsb2R5ID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGN0eCA9IGF3YWl0IHRoaXMuZW5zdXJlQ29udGV4dCgpO1xuICAgIGF3YWl0IHRoaXMucmVzdW1lQ29udGV4dChjdHgpO1xuICAgIHRoaXMuZmFkZU1hc3RlclRvKDEsIDAuMzUpO1xuICAgIGF3YWl0IHRoaXMuc3RhcnRNdXNpYyhtZWxvZHkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3YWtlQXVkaW8oKTogUHJvbWlzZTxBdWRpb0NvbnRleHQ+IHtcbiAgICBjb25zdCBjdHggPSBhd2FpdCB0aGlzLmVuc3VyZUNvbnRleHQoKTtcbiAgICBhd2FpdCB0aGlzLnJlc3VtZUNvbnRleHQoY3R4KTtcbiAgICB0aGlzLmZhZGVNYXN0ZXJUbygxLCAwLjEyKTtcbiAgICByZXR1cm4gY3R4O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXN1bWVDb250ZXh0KGN0eDogQXVkaW9Db250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGN0eC5zdGF0ZSA9PT0gJ3J1bm5pbmcnKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGN0eC5yZXN1bWUoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGlPUyBwdWVkZSBleGlnaXIgdW5hIG51ZXZhIGludGVyYWNjacOzbiBkZWwgdXN1YXJpbzsgZWwgbGlzdGVuZXIgZGUgYWN0aXZhY2nDs24gcmVpbnRlbnRhcsOhLlxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmFkZU1hc3RlclRvKHZhbHVlOiBudW1iZXIsIHNlY29uZHM6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb250ZXh0IHx8ICF0aGlzLm1hc3RlckdhaW4pIHJldHVybjtcbiAgICBjb25zdCBnYWluID0gdGhpcy5tYXN0ZXJHYWluLmdhaW47XG4gICAgY29uc3Qgbm93ID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lO1xuICAgIGdhaW4uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKG5vdyk7XG4gICAgZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodmFsdWUsIG5vdywgTWF0aC5tYXgoMC4wMSwgc2Vjb25kcyAvIDQpKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEb2N1bWVudFZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWRvY3VtZW50LmhpZGRlbjtcbiAgfVxufVxuIl19