speechrecorderng 2.24.0 → 2.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,6 +7,7 @@ import { ProjectUtil } from "./speechrecorder/project/project";
7
7
  import { AudioContextProvider } from "./audio/context";
8
8
  import { Arrays } from "./utils/utils";
9
9
  import { RecorderComponent } from "./recorder_component";
10
+ import { BasicRecorder } from "./speechrecorder/session/basicrecorder";
10
11
  import * as i0 from "@angular/core";
11
12
  import * as i1 from "@angular/router";
12
13
  import * as i2 from "./speechrecorder/session/session.service";
@@ -22,7 +23,7 @@ export var Mode;
22
23
  })(Mode || (Mode = {}));
23
24
  export class SpeechrecorderngComponent extends RecorderComponent {
24
25
  constructor(route, router, changeDetectorRef, sessionsService, projectService, scriptService, recFilesService, uploader) {
25
- super();
26
+ super(uploader);
26
27
  this.route = route;
27
28
  this.router = router;
28
29
  this.changeDetectorRef = changeDetectorRef;
@@ -32,7 +33,6 @@ export class SpeechrecorderngComponent extends RecorderComponent {
32
33
  this.recFilesService = recFilesService;
33
34
  this.uploader = uploader;
34
35
  this._project = null;
35
- this.dataSaved = true;
36
36
  }
37
37
  ngOnInit() {
38
38
  try {
@@ -75,39 +75,39 @@ export class SpeechrecorderngComponent extends RecorderComponent {
75
75
  }
76
76
  }
77
77
  fetchSession(sessionId) {
78
- //Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'statusMsg: Player initialized.'. Current value: 'statusMsg: Fetching session info...'.
79
- // params.subscribe seems not to be asynchronous
80
- // this.sm.statusAlertType='info';
81
- // this.sm.statusMsg = 'Fetching session info...';
82
- // this.sm.statusWaiting=true;
83
78
  let sessObs = this.sessionsService.sessionObserver(sessionId);
84
79
  if (sessObs) {
85
- sessObs.subscribe(sess => {
86
- this.setSession(sess);
87
- this.sm.statusAlertType = 'info';
88
- this.sm.statusMsg = 'Received session info.';
89
- this.sm.statusWaiting = false;
90
- if (sess.project) {
91
- //console.debug("Session associated project: "+sess.project)
92
- this.projectService.projectObservable(sess.project).subscribe(project => {
93
- this.project = project;
80
+ sessObs.subscribe({
81
+ next: sess => {
82
+ this.setSession(sess);
83
+ this.sm.statusAlertType = 'info';
84
+ this.sm.statusMsg = 'Received session info.';
85
+ this.sm.statusWaiting = false;
86
+ if (sess.project) {
87
+ //console.debug("Session associated project: "+sess.project)
88
+ this.projectService.projectObservable(sess.project).subscribe({
89
+ next: (project) => {
90
+ this.project = project;
91
+ this.fetchScript(sess);
92
+ }, error: (reason) => {
93
+ this.sm.statusMsg = reason;
94
+ this.sm.statusAlertType = 'error';
95
+ this.sm.statusWaiting = false;
96
+ console.error("Error fetching project config: " + reason);
97
+ }
98
+ });
99
+ }
100
+ else {
101
+ console.info("Session has no associated project. Using default configuration.");
94
102
  this.fetchScript(sess);
95
- }, reason => {
96
- this.sm.statusMsg = reason;
97
- this.sm.statusAlertType = 'error';
98
- this.sm.statusWaiting = false;
99
- console.error("Error fetching project config: " + reason);
100
- });
101
- }
102
- else {
103
- console.info("Session has no associated project. Using default configuration.");
104
- this.fetchScript(sess);
103
+ }
104
+ },
105
+ error: (reason) => {
106
+ this.sm.statusMsg = reason;
107
+ this.sm.statusAlertType = 'error';
108
+ this.sm.statusWaiting = false;
109
+ console.error("Error fetching session " + reason);
105
110
  }
106
- }, (reason) => {
107
- this.sm.statusMsg = reason;
108
- this.sm.statusAlertType = 'error';
109
- this.sm.statusWaiting = false;
110
- console.error("Error fetching session " + reason);
111
111
  });
112
112
  }
113
113
  }
@@ -116,19 +116,21 @@ export class SpeechrecorderngComponent extends RecorderComponent {
116
116
  this.sm.statusAlertType = 'info';
117
117
  this.sm.statusMsg = 'Fetching recording script...';
118
118
  this.sm.statusWaiting = true;
119
- this.scriptService.scriptObservable(sess.script).subscribe(script => {
120
- this.sm.statusAlertType = 'info';
121
- this.sm.statusMsg = 'Received recording script.';
122
- this.sm.statusWaiting = false;
123
- this.setScript(script);
124
- this.sm.session = sess;
125
- this.fetchRecordings(sess, this.script);
126
- }, reason => {
127
- let errMsg = "Error fetching recording script: " + reason;
128
- console.error(errMsg);
129
- this.sm.statusMsg = errMsg;
130
- this.sm.statusAlertType = 'error';
131
- this.sm.statusWaiting = false;
119
+ this.scriptService.scriptObservable(sess.script).subscribe({
120
+ next: (script) => {
121
+ this.sm.statusAlertType = 'info';
122
+ this.sm.statusMsg = 'Received recording script.';
123
+ this.sm.statusWaiting = false;
124
+ this.setScript(script);
125
+ this.sm.session = sess;
126
+ this.fetchRecordings(sess, this.script);
127
+ }, error: (reason) => {
128
+ let errMsg = "Error fetching recording script: " + reason;
129
+ console.error(errMsg);
130
+ this.sm.statusMsg = errMsg;
131
+ this.sm.statusAlertType = 'error';
132
+ this.sm.statusWaiting = false;
133
+ }
132
134
  });
133
135
  }
134
136
  else {
@@ -145,29 +147,31 @@ export class SpeechrecorderngComponent extends RecorderComponent {
145
147
  let prNm = null;
146
148
  if (this.project) {
147
149
  let rfsObs = this.recFilesService.recordingFileDescrList(this.project.name, sess.sessionId);
148
- rfsObs.subscribe((rfs) => {
149
- this.sm.statusAlertType = 'info';
150
- this.sm.statusMsg = 'Received infos of recordings.';
151
- this.sm.statusWaiting = false;
152
- if (rfs) {
153
- if (rfs instanceof Array) {
154
- rfs.forEach((rf) => {
155
- //console.debug("Already recorded: " + rf+ " "+rf.recording.itemcode);
156
- this.sm.addRecordingFileByDescriptor(rf);
157
- });
150
+ rfsObs.subscribe({
151
+ next: (rfs) => {
152
+ this.sm.statusAlertType = 'info';
153
+ this.sm.statusMsg = 'Received infos of recordings.';
154
+ this.sm.statusWaiting = false;
155
+ if (rfs) {
156
+ if (rfs instanceof Array) {
157
+ rfs.forEach((rf) => {
158
+ //console.debug("Already recorded: " + rf+ " "+rf.recording.itemcode);
159
+ this.sm.addRecordingFileByDescriptor(rf);
160
+ });
161
+ }
162
+ else {
163
+ console.error('Expected type array for list of already recorded files ');
164
+ }
158
165
  }
159
166
  else {
160
- console.error('Expected type array for list of already recorded files ');
167
+ //console.debug("Recording file list: " + rfs);
161
168
  }
169
+ }, error: (err) => {
170
+ // we start the session anyway
171
+ this.startSession();
172
+ }, complete: () => {
173
+ this.startSession();
162
174
  }
163
- else {
164
- //console.debug("Recording file list: " + rfs);
165
- }
166
- }, () => {
167
- // we start the session anyway
168
- this.startSession();
169
- }, () => {
170
- this.startSession();
171
175
  });
172
176
  }
173
177
  else {
@@ -190,36 +194,10 @@ export class SpeechrecorderngComponent extends RecorderComponent {
190
194
  return this.dataSaved && !this.sm.isActive();
191
195
  }
192
196
  init() {
193
- var n = navigator;
194
- //var getUserMediaFnct= n.getUserMedia || n.webkitGetUserMedia ||
195
- // n.mozGetUserMedia || n.msGetUserMedia;
196
- var w = window;
197
- // TODO test onyl !!
198
- // let debugFail=true;
199
- // AudioContext = w.AudioContext || w.webkitAudioContext;
200
- // if (typeof AudioContext !== 'function' || debugFail) {
201
- // this.sm.statusAlertType='error';
202
- // this.sm.statusMsg = 'ERROR: Browser does not support Web Audio API!';
203
- // return false;
204
- // } else {
205
- // var context = new AudioContext();
206
- //
207
- // if (typeof navigator.mediaDevices.getUserMedia !== 'function') {
208
- // this.sm.statusAlertType='error';
209
- // this.sm.statusMsg= 'ERROR: Browser does not support Media streams!';
210
- // return false;
211
- // } else {
212
- //
213
- //this.sm = new SessionManager(new SimpleTrafficLight(), this.uploader);
214
- //this.sm.init();
215
- //this.ap = new AudioPlayer(context,this);
216
- //this.sm.listener=this;
217
- // }
218
- // }
197
+ //TODO Duplicate code in AudioRecorderComponent
219
198
  this.uploader.listener = (ue) => {
220
199
  this.uploadUpdate(ue);
221
200
  };
222
- //TODO Duplicate code in AudioRecorderComponent
223
201
  window.addEventListener('beforeunload', (e) => {
224
202
  console.debug("Before page unload event");
225
203
  if (this.ready()) {
@@ -308,6 +286,13 @@ export class SpeechrecorderngComponent extends RecorderComponent {
308
286
  chCnt = ProjectUtil.audioChannelCount(project);
309
287
  console.info("Project requested recording channel count: " + chCnt);
310
288
  this.sm.autoGainControlConfigs = project.autoGainControlConfigs;
289
+ if (project.chunkedRecording === true) {
290
+ console.debug("Enable chunked upload: chunkSize: " + BasicRecorder.DEFAULT_CHUNK_SIZE_SECONDS);
291
+ this.sm.uploadChunkSizeSeconds = BasicRecorder.DEFAULT_CHUNK_SIZE_SECONDS;
292
+ }
293
+ else {
294
+ this.sm.uploadChunkSizeSeconds = null;
295
+ }
311
296
  }
312
297
  else {
313
298
  console.error("Empty project configuration!");
@@ -344,50 +329,7 @@ export class SpeechrecorderngComponent extends RecorderComponent {
344
329
  pLoader.send();
345
330
  }
346
331
  }
347
- // loadScript(callback: ()=>any){
348
- // var scrLoader = new XMLHttpRequest();
349
- // let hn:string =window.location.hostname;
350
- // let pn:string =window.location.pathname;
351
- // let pr:string =window.location.protocol;
352
- // let po:string =window.location.port;
353
- //
354
- // let sessionId:string=this.session.sessionId;
355
- //
356
- // let scrUrl:string | null = null;
357
- //
358
- // if (hn === 'localhost' || this.mode===Mode.DEMO) {
359
- // // local debug mode
360
- // // FF caches
361
- // scrUrl = 'test/' + this.session.script.toString() + '.json?' + new Date().getTime();
362
- //
363
- // } else {
364
- // let scrPath:string = '/wikispeech/session/scripts/servlet';
365
- // let scrQu:string = 'sessionId=' + sessionId;
366
- // scrUrl = pr + '//' + hn + ':' + po + scrPath;
367
- // if (scrQu) {
368
- // scrUrl = scrUrl + '?' + scrQu;
369
- // }
370
- // }
371
- //
372
- // scrLoader.open("GET",scrUrl , true);
373
- // scrLoader.setRequestHeader('Accept','application/json');
374
- // scrLoader.responseType = "json";
375
- // scrLoader.onload = (e) => {
376
- //
377
- // this.script = scrLoader.response;
378
- //
379
- //
380
- // this.sm.script = this.script;
381
- //
382
- // callback();
383
- // }
384
- // scrLoader.onerror = (e) => {
385
- // console.log("Error downloading recording script data ...");
386
- // }
387
- // scrLoader.send();
388
- // }
389
332
  start() {
390
- //this.configure();
391
333
  }
392
334
  audioPlayerUpdate(e) {
393
335
  if (PlaybackEventType.STARTED === e.type) {
@@ -432,4 +374,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
432
374
  type: ViewChild,
433
375
  args: [SessionManager, { static: true }]
434
376
  }] } });
435
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlZWNocmVjb3JkZXJuZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXJuZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQTJDLE1BQU0sZUFBZSxDQUFBO0FBQzVGLE9BQU8sRUFDa0MsU0FBUyxJQUFJLGlCQUFpQixFQUNyRSxXQUFXLEVBQ1osTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsY0FBYyxFQUFnQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZHLE9BQU8sRUFBNkIsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0UsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBSXhFLE9BQU8sRUFBVSxXQUFXLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUV0RSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUdyRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXJDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7QUFFdkQsTUFBTSxDQUFOLElBQVksSUFBMEI7QUFBdEMsV0FBWSxJQUFJO0lBQUUsbURBQWMsQ0FBQTtJQUFDLCtCQUFJLENBQUE7QUFBQSxDQUFDLEVBQTFCLElBQUksS0FBSixJQUFJLFFBQXNCO0FBa0J0QyxNQUFNLE9BQU8seUJBQTBCLFNBQVEsaUJBQWlCO0lBYzlELFlBQW9CLEtBQXFCLEVBQ2YsTUFBYyxFQUNsQixpQkFBb0MsRUFDcEMsZUFBOEIsRUFDOUIsY0FBNkIsRUFDN0IsYUFBMkIsRUFDM0IsZUFBZ0MsRUFDaEMsUUFBK0I7UUFDakQsS0FBSyxFQUFFLENBQUM7UUFSUSxVQUFLLEdBQUwsS0FB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Q0FBQztZQUMzQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsR0FBQyxhQUFhLENBQUM7U0FFdkI7YUFBTSxJQUFJLGlCQUFpQixDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQ3ZELCtCQUErQjtZQUMvQiw2QkFBNkI7WUFDakIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEdBQUMsTUFBTSxDQUFDO1lBQzNDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFDLFFBQVEsQ0FBQztTQUMzQjtJQUNGLENBQUM7SUFDRCxLQUFLO1FBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEdBQUMsT0FBTyxDQUFDO1FBQ25DLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFDLG1CQUFtQixDQUFDO0lBQ3ZDLENBQUM7O3NIQTFiVSx5QkFBeUI7MEdBQXpCLHlCQUF5Qiw2Q0FiekIsQ0FBQyxjQUFjLENBQUMsOERBeUJoQixjQUFjLHFGQXhCZjs7R0FFVDsyRkFVVSx5QkFBeUI7a0JBaEJyQyxTQUFTO21CQUFDO29CQUVULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQztvQkFDM0IsUUFBUSxFQUFFOztHQUVUO29CQUNELE1BQU0sRUFBRSxDQUFDOzs7Ozs7SUFNUCxDQUFDO2lCQUVKO29UQWE4QyxFQUFFO3NCQUE5QyxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgVmlld0NoaWxkLCBDaGFuZ2VEZXRlY3RvclJlZiwgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQge1xyXG4gIEF1ZGlvUGxheWVyTGlzdGVuZXIsIEF1ZGlvUGxheWVyRXZlbnQsIEV2ZW50VHlwZSBhcyBQbGF5YmFja0V2ZW50VHlwZSxcclxuICBBdWRpb1BsYXllclxyXG59IGZyb20gJy4vYXVkaW8vcGxheWJhY2svcGxheWVyJztcclxuaW1wb3J0IHtHcm91cCwgT3JkZXIsIFByb21wdEl0ZW0sIFNjcmlwdH0gZnJvbSAnLi9zcGVlY2hyZWNvcmRlci9zY3JpcHQvc2NyaXB0J1xyXG5pbXBvcnQgeyBTZXNzaW9uTWFuYWdlcixTdGF0dXMgYXMgU2Vzc2lvbk1hbmFnZXJTdGF0dXN9IGZyb20gJy4vc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9ubWFuYWdlcic7XHJcbmltcG9ydCB7IFVwbG9hZGVyU3RhdHVzQ2hhbmdlRXZlbnQsIFVwbG9hZGVyU3RhdHVzIH0gZnJvbSAnLi9uZXQvdXBsb2FkZXInO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlcn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQge1Nlc3Npb25TZXJ2aWNlfSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL3Nlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQge1NjcmlwdFNlcnZpY2V9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3NjcmlwdC9zY3JpcHQuc2VydmljZVwiO1xyXG5pbXBvcnQge1NwZWVjaFJlY29yZGVyVXBsb2FkZXJ9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3NwcnVwbG9hZGVyXCI7XHJcbmltcG9ydCB7U2Vzc2lvbn0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9uXCI7XHJcbmltcG9ydCB7UHJvamVjdCwgUHJvamVjdFV0aWx9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3Byb2plY3QvcHJvamVjdFwiO1xyXG5pbXBvcnQge1Byb2plY3RTZXJ2aWNlfSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9wcm9qZWN0L3Byb2plY3Quc2VydmljZVwiO1xyXG5pbXBvcnQge0F1ZGlvQ29udGV4dFByb3ZpZGVyfSBmcm9tIFwiLi9hdWRpby9jb250ZXh0XCI7XHJcbmltcG9ydCB7UmVjb3JkaW5nU2VydmljZX0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvcmVjb3JkaW5ncy9yZWNvcmRpbmdzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtSZWNvcmRpbmdGaWxlRGVzY3JpcHRvckltcGx9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3JlY29yZGluZ1wiO1xyXG5pbXBvcnQge0FycmF5c30gZnJvbSBcIi4vdXRpbHMvdXRpbHNcIjtcclxuaW1wb3J0IHtBdWRpb1JlY29yZGVyQ29tcG9uZW50fSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL2F1ZGlvcmVjb3JkZXJcIjtcclxuaW1wb3J0IHtSZWNvcmRlckNvbXBvbmVudH0gZnJvbSBcIi4vcmVjb3JkZXJfY29tcG9uZW50XCI7XHJcblxyXG5leHBvcnQgZW51bSBNb2RlIHtTSU5HTEVfU0VTU0lPTixERU1PfVxyXG5cclxuQENvbXBvbmVudCh7XHJcblxyXG4gIHNlbGVjdG9yOiAnYXBwLXNwZWVjaHJlY29yZGVyJyxcclxuICBwcm92aWRlcnM6IFtTZXNzaW9uU2VydmljZV0sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxhcHAtc3BycmVjb3JkaW5nc2Vzc2lvbiBbcHJvamVjdE5hbWVdPVwicHJvamVjdD8ubmFtZVwiIFtkYXRhU2F2ZWRdPVwiZGF0YVNhdmVkXCI+PC9hcHAtc3BycmVjb3JkaW5nc2Vzc2lvbj5cclxuICBgLFxyXG4gIHN0eWxlczogW2A6aG9zdHtcclxuICAgIGZsZXg6IDI7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIG1pbi1oZWlnaHQ6MDtcclxuXHJcbiAgfWBdXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3BlZWNocmVjb3JkZXJuZ0NvbXBvbmVudCBleHRlbmRzIFJlY29yZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LEFmdGVyVmlld0luaXQsQXVkaW9QbGF5ZXJMaXN0ZW5lciB7XHJcblxyXG5cdCAgbW9kZSE6TW9kZTtcclxuXHRcdGNvbnRyb2xBdWRpb1BsYXllciE6QXVkaW9QbGF5ZXI7XHJcblx0XHRhdWRpbzphbnk7XHJcblxyXG5cdF9wcm9qZWN0OlByb2plY3R8bnVsbD1udWxsO1xyXG4gIHNlc3Npb25JZCE6IHN0cmluZztcclxuICBzZXNzaW9uITpTZXNzaW9uO1xyXG5cclxuICBzY3JpcHQhOlNjcmlwdDtcclxuICAgIGRhdGFTYXZlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQFZpZXdDaGlsZChTZXNzaW9uTWFuYWdlciwgeyBzdGF0aWM6IHRydWUgfSkgc20hOlNlc3Npb25NYW5hZ2VyO1xyXG5cclxuXHRcdGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICAgICAgICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2Vzc2lvbnNTZXJ2aWNlOlNlc3Npb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwcm9qZWN0U2VydmljZTpQcm9qZWN0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2NyaXB0U2VydmljZTpTY3JpcHRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZWNGaWxlc1NlcnZpY2U6UmVjb3JkaW5nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXBsb2FkZXI6U3BlZWNoUmVjb3JkZXJVcGxvYWRlcikge1xyXG4gICAgICBzdXBlcigpO1xyXG5cdFx0fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG5cdFx0ICB0cnkge1xyXG4gICAgICAgIGxldCBhdWRpb0NvbnRleHQgPSBBdWRpb0NvbnRleHRQcm92aWRlci5hdWRpb0NvbnRleHRJbnN0YW5jZSgpO1xyXG4gICAgICAgICAgICAgIGlmKGF1ZGlvQ29udGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xBdWRpb1BsYXllciA9IG5ldyBBdWRpb1BsYXllcihhdWRpb0NvbnRleHQsIHRoaXMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICB0aGlzLnNtLmNvbnRyb2xBdWRpb1BsYXllcj10aGlzLmNvbnRyb2xBdWRpb1BsYXllcjtcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0naW5mbyc7XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2cgPSAnUGxheWVyIGluaXRpYWxpemVkLic7XHJcbiAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIGxldCBlcnJNc2c9J1Vua25vd24gZXJyb3InO1xyXG4gICAgICAgIGlmKGVyciBpbnN0YW5jZW9mIEVycm9yKXtcclxuICAgICAgICAgIGVyck1zZz1lcnIubWVzc2FnZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2c9ZXJyTXNnO1xyXG4gICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdlcnJvcic7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJNc2cpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgICAgIG5nQWZ0ZXJWaWV3SW5pdCgpe1xyXG4gICAgICAgIC8vIGxldCB3YWtlTG9ja1N1cHA9KCd3YWtlTG9jaycgaW4gbmF2aWdhdG9yKTtcclxuICAgICAgICAvLyBhbGVydCgnV2FrZSBsb2NrIEFQSSBzdXBwb3J0ZWQ6ICcrd2FrZUxvY2tTdXBwKTtcclxuXHJcblxyXG5cdFx0ICBpZih0aGlzLnNtLnN0YXR1cyE9PSBTZXNzaW9uTWFuYWdlclN0YXR1cy5FUlJPUikge1xyXG4gICAgICAgIGxldCBpbml0U3VjY2VzcyA9IHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmIChpbml0U3VjY2Vzcykge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtczogUGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChwYXJhbXNbJ3Nlc3Npb25JZCddKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mZXRjaFNlc3Npb24ocGFyYW1zWydzZXNzaW9uSWQnXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZSgocGFyYW1zOiBQYXJhbXMpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJvdXRlUGFyYW1zSWQgPSBwYXJhbXNbJ2lkJ107XHJcbiAgICAgICAgICAgIGlmIChyb3V0ZVBhcmFtc0lkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mZXRjaFNlc3Npb24ocm91dGVQYXJhbXNJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZmV0Y2hTZXNzaW9uKHNlc3Npb25JZDpzdHJpbmcpe1xyXG5cclxuXHJcblx0XHQgIC8vRXJyb3I6IEV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3I6IEV4cHJlc3Npb24gaGFzIGNoYW5nZWQgYWZ0ZXIgaXQgd2FzIGNoZWNrZWQuIFByZXZpb3VzIHZhbHVlOiAnc3RhdHVzTXNnOiBQbGF5ZXIgaW5pdGlhbGl6ZWQuJy4gQ3VycmVudCB2YWx1ZTogJ3N0YXR1c01zZzogRmV0Y2hpbmcgc2Vzc2lvbiBpbmZvLi4uJy5cclxuICAgICAgLy8gcGFyYW1zLnN1YnNjcmliZSBzZWVtcyBub3QgdG8gYmUgYXN5bmNocm9ub3VzXHJcblxyXG4gICAgICAvLyB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0naW5mbyc7XHJcbiAgICAgIC8vIHRoaXMuc20uc3RhdHVzTXNnID0gJ0ZldGNoaW5nIHNlc3Npb24gaW5mby4uLic7XHJcbiAgICAgIC8vIHRoaXMuc20uc3RhdHVzV2FpdGluZz10cnVlO1xyXG4gICAgICBsZXQgc2Vzc09icz0gdGhpcy5zZXNzaW9uc1NlcnZpY2Uuc2Vzc2lvbk9ic2VydmVyKHNlc3Npb25JZCk7XHJcblxyXG4gICAgICBpZihzZXNzT2JzKSB7XHJcbiAgICAgICAgc2Vzc09icy5zdWJzY3JpYmUoc2VzcyA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNldFNlc3Npb24oc2Vzcyk7XHJcbiAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdpbmZvJztcclxuICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2cgPSAnUmVjZWl2ZWQgc2Vzc2lvbiBpbmZvLic7XHJcbiAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZz1mYWxzZTtcclxuICAgICAgICAgIGlmIChzZXNzLnByb2plY3QpIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU2Vzc2lvbiBhc3NvY2lhdGVkIHByb2plY3Q6IFwiK3Nlc3MucHJvamVjdClcclxuICAgICAgICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0T2JzZXJ2YWJsZShzZXNzLnByb2plY3QpLnN1YnNjcmliZShwcm9qZWN0PT57XHJcbiAgICAgICAgICAgICAgdGhpcy5wcm9qZWN0PXByb2plY3Q7XHJcbiAgICAgICAgICAgICAgdGhpcy5mZXRjaFNjcmlwdChzZXNzKTtcclxuICAgICAgICAgICAgfSxyZWFzb24gPT57XHJcbiAgICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2c9cmVhc29uO1xyXG4gICAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdlcnJvcic7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmc9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHByb2plY3QgY29uZmlnOiBcIityZWFzb24pXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIlNlc3Npb24gaGFzIG5vIGFzc29jaWF0ZWQgcHJvamVjdC4gVXNpbmcgZGVmYXVsdCBjb25maWd1cmF0aW9uLlwiKVxyXG4gICAgICAgICAgICB0aGlzLmZldGNoU2NyaXB0KHNlc3MpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKHJlYXNvbikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c01zZyA9IHJlYXNvbjtcclxuICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InO1xyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmc9ZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBzZXNzaW9uIFwiICsgcmVhc29uKVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgZmV0Y2hTY3JpcHQoc2VzczpTZXNzaW9uKXtcclxuICAgICAgaWYoc2Vzcy5zY3JpcHQpe1xyXG4gICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdpbmZvJztcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c01zZyA9ICdGZXRjaGluZyByZWNvcmRpbmcgc2NyaXB0Li4uJztcclxuICAgICAgICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZz10cnVlO1xyXG4gICAgICAgIHRoaXMuc2NyaXB0U2VydmljZS5zY3JpcHRPYnNlcnZhYmxlKHNlc3Muc2NyaXB0KS5zdWJzY3JpYmUoc2NyaXB0PT57XHJcbiAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0naW5mbyc7XHJcbiAgICAgICAgICB0aGlzLnNtLnN0YXR1c01zZyA9ICdSZWNlaXZlZCByZWNvcmRpbmcgc2NyaXB0Lic7XHJcbiAgICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmc9ZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNldFNjcmlwdChzY3JpcHQpXHJcbiAgICAgICAgICB0aGlzLnNtLnNlc3Npb249c2VzcztcclxuICAgICAgICAgIHRoaXMuZmV0Y2hSZWNvcmRpbmdzKHNlc3MsdGhpcy5zY3JpcHQpXHJcbiAgICAgICAgfSxyZWFzb24gPT57XHJcbiAgICAgICAgICBsZXQgZXJyTXNnPVwiRXJyb3IgZmV0Y2hpbmcgcmVjb3JkaW5nIHNjcmlwdDogXCIrcmVhc29uXHJcbiAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJNc2cpXHJcbiAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzTXNnPWVyck1zZztcclxuICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2Vycm9yJztcclxuICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNXYWl0aW5nPWZhbHNlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIGxldCBlcnJNc2c9XCJObyByZWNvcmRpbmcgc2NyaXB0IGlzIGRlZmluZWQgZm9yIHRoaXMgc2Vzc2lvbiB3aXRoIElEIFwiK3Nlc3Muc2Vzc2lvbklkO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IodGhpcy5zbS5zdGF0dXNNc2cpXHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2c9ZXJyTXNnO1xyXG4gICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdlcnJvcic7XHJcblxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZldGNoUmVjb3JkaW5ncyhzZXNzOlNlc3Npb24sc2NyaXB0OlNjcmlwdCl7XHJcbiAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdpbmZvJztcclxuICAgICAgdGhpcy5zbS5zdGF0dXNNc2cgPSAnRmV0Y2hpbmcgaW5mb3Mgb2YgcmVjb3JkaW5ncy4uLic7XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNXYWl0aW5nPXRydWU7XHJcbiAgICAgICAgbGV0IHByTm06c3RyaW5nfG51bGw9bnVsbDtcclxuICAgICAgICBpZih0aGlzLnByb2plY3QpIHtcclxuICAgICAgICAgICAgbGV0IHJmc09icyA9IHRoaXMucmVjRmlsZXNTZXJ2aWNlLnJlY29yZGluZ0ZpbGVEZXNjckxpc3QodGhpcy5wcm9qZWN0Lm5hbWUsIHNlc3Muc2Vzc2lvbklkKTtcclxuICAgICAgICAgICAgcmZzT2JzLnN1YnNjcmliZSgocmZzOiBBcnJheTxSZWNvcmRpbmdGaWxlRGVzY3JpcHRvckltcGw+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZSA9ICdpbmZvJztcclxuICAgICAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzTXNnID0gJ1JlY2VpdmVkIGluZm9zIG9mIHJlY29yZGluZ3MuJztcclxuICAgICAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJmcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZnMgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZnMuZm9yRWFjaCgocmYpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkFscmVhZHkgcmVjb3JkZWQ6IFwiICsgcmYrIFwiIFwiK3JmLnJlY29yZGluZy5pdGVtY29kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNtLmFkZFJlY29yZGluZ0ZpbGVCeURlc2NyaXB0b3IocmYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0V4cGVjdGVkIHR5cGUgYXJyYXkgZm9yIGxpc3Qgb2YgYWxyZWFkeSByZWNvcmRlZCBmaWxlcyAnKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiUmVjb3JkaW5nIGZpbGUgbGlzdDogXCIgKyByZnMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyB3ZSBzdGFydCB0aGUgc2Vzc2lvbiBhbnl3YXlcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRTZXNzaW9uKClcclxuICAgICAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFNlc3Npb24oKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIHN0YXJ0U2Vzc2lvbigpe1xyXG4gICAgICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZz1mYWxzZTtcclxuXHRcdCAgdGhpcy5zbS5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAgICAgc2V0U2Vzc2lvbihzZXNzaW9uOmFueSl7XHJcblx0XHQgICAgaWYoc2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAvLyBjb25zb2xlLmRlYnVnKFwiU2Vzc2lvbiBJRDogXCIgKyBzZXNzaW9uLnNlc3Npb25JZCk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU2Vzc2lvbiBVbmRlZmluZWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlYWR5KCk6Ym9vbGVhbntcclxuXHRcdCAgICByZXR1cm4gdGhpcy5kYXRhU2F2ZWQgJiYgIXRoaXMuc20uaXNBY3RpdmUoKVxyXG4gICAgICAgIH1cclxuXHJcblx0XHRpbml0KCk6Ym9vbGVhbiB7XHJcblxyXG5cdFx0XHR2YXIgbiA9IDxhbnk+bmF2aWdhdG9yO1xyXG5cdFx0XHQvL3ZhciBnZXRVc2VyTWVkaWFGbmN0PSBuLmdldFVzZXJNZWRpYSB8fCBuLndlYmtpdEdldFVzZXJNZWRpYSB8fFxyXG5cdFx0XHQvL1x0bi5tb3pHZXRVc2VyTWVkaWEgfHwgbi5tc0dldFVzZXJNZWRpYTtcclxuXHRcdFx0dmFyIHcgPSA8YW55PndpbmRvdztcclxuXHRcdFx0Ly8gVE9ETyB0ZXN0IG9ueWwgISFcclxuXHJcbiAgICAgIC8vIGxldCBkZWJ1Z0ZhaWw9dHJ1ZTtcclxuXHRcdC8vIFx0QXVkaW9Db250ZXh0ID0gdy5BdWRpb0NvbnRleHQgfHwgdy53ZWJraXRBdWRpb0NvbnRleHQ7XHJcblx0XHQvLyBcdGlmICh0eXBlb2YgQXVkaW9Db250ZXh0ICE9PSAnZnVuY3Rpb24nIHx8IGRlYnVnRmFpbCkge1xyXG4gICAgICAvLyAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2Vycm9yJztcclxuXHRcdC8vIFx0XHR0aGlzLnNtLnN0YXR1c01zZyA9ICdFUlJPUjogQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IFdlYiBBdWRpbyBBUEkhJztcclxuXHRcdC8vIFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHQvLyBcdH0gZWxzZSB7XHJcblx0XHQvLyBcdFx0dmFyIGNvbnRleHQgPSBuZXcgQXVkaW9Db250ZXh0KCk7XHJcbiAgICAgIC8vXHJcblx0XHQvLyBcdFx0aWYgKHR5cGVvZiBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAvLyAgICAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdlcnJvcic7XHJcblx0XHQvLyBcdFx0XHR0aGlzLnNtLnN0YXR1c01zZz0gJ0VSUk9SOiBCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgTWVkaWEgc3RyZWFtcyEnO1xyXG4gICAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xyXG5cdFx0Ly8gXHRcdH0gZWxzZSB7XHJcbiAgICAgIC8vXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zbSA9IG5ldyBTZXNzaW9uTWFuYWdlcihuZXcgU2ltcGxlVHJhZmZpY0xpZ2h0KCksIHRoaXMudXBsb2FkZXIpO1xyXG5cdFx0XHRcdFx0Ly90aGlzLnNtLmluaXQoKTtcclxuXHRcdFx0XHRcdC8vdGhpcy5hcCA9IG5ldyBBdWRpb1BsYXllcihjb250ZXh0LHRoaXMpO1xyXG5cdFx0XHRcdFx0Ly90aGlzLnNtLmxpc3RlbmVyPXRoaXM7XHJcblx0XHRcdC8vXHR9XHJcblx0XHQvL1x0fVxyXG4gICAgICAgICAgICB0aGlzLnVwbG9hZGVyLmxpc3RlbmVyID0gKHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFVwZGF0ZSh1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAvL1RPRE8gRHVwbGljYXRlIGNvZGUgaW4gQXVkaW9SZWNvcmRlckNvbXBvbmVudFxyXG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJCZWZvcmUgcGFnZSB1bmxvYWQgZXZlbnRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHkoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYWxsIHRoaXMgYXR0ZW1wdHMgdG8gY3VzdG9taXplIHRoZSBtZXNzYWdlIGRvIG5vdCB3b3JrIGFueW1vcmUgKGZvciBzZWN1cml0eSByZWFzb25zKSEhXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBcIlBsZWFzZSBkbyBub3QgbGVhdmUgdGhlIHBhZ2UsIHVudGlsIGFsbCByZWNvcmRpbmdzIGFyZSB1cGxvYWRlZCFcIjtcclxuICAgICAgICAgICAgICAgICAgICBhbGVydChtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucmV0dXJuVmFsdWUgPSBtZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLmNhbmNlbEJ1YmJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgdXBsb2FkVXBkYXRlKHVlOiBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50KSB7XHJcbiAgICBsZXQgdXBTdGF0dXMgPSB1ZS5zdGF0dXM7XHJcbiAgICB0aGlzLmRhdGFTYXZlZCA9IChVcGxvYWRlclN0YXR1cy5ET05FID09PSB1cFN0YXR1cyk7XHJcbiAgICBsZXQgcGVyY2VudFVwbCA9IHVlLnBlcmNlbnREb25lKCk7XHJcbiAgICBpZiAoVXBsb2FkZXJTdGF0dXMuRVJSID09PSB1cFN0YXR1cykge1xyXG4gICAgICB0aGlzLnNtLnVwbG9hZFN0YXR1cyA9ICd3YXJuJ1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHBlcmNlbnRVcGwgPCA1MCkge1xyXG4gICAgICAgIHRoaXMuc20udXBsb2FkU3RhdHVzID0gJ2FjY2VudCdcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNtLnVwbG9hZFN0YXR1cyA9ICdzdWNjZXNzJ1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc20udXBsb2FkUHJvZ3Jlc3MgPSBwZXJjZW50VXBsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgfVxyXG5cclxuICBjb25maWd1cmUoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgIHRoaXMubG9hZFByb2plY3RDZmcoKCkgPT4ge1xyXG4gICAgICAgIC8vIGRpc3BsYXkgcHJvamVjdCBuYW1lXHJcbiAgICAgICAgbGV0IHByTmFtZTogc3RyaW5nID0gJ1tVbmtub3duXSc7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvamVjdCAmJiB0aGlzLnByb2plY3QubmFtZSkge1xyXG4gICAgICAgICAgcHJOYW1lID0gdGhpcy5wcm9qZWN0Lm5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vdGhpcy50aXRsZUVsLmlubmVyVGV4dCA9IHByTmFtZTtcclxuXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSByYW5kb21pemUoc2NyaXB0OlNjcmlwdCl7XHJcblx0XHQgICAgc2NyaXB0LnNlY3Rpb25zLmZvckVhY2goKHMpPT57XHJcblx0XHQgICAgICAgIGlmKCdSQU5ET00nPT09cy5vcmRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHMuX3NodWZmbGVkR3JvdXBzID0gQXJyYXlzLnNodWZmbGVBcnJheTxHcm91cD4ocy5ncm91cHMpO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcblx0XHQgICAgICAgICAgICBzLl9zaHVmZmxlZEdyb3Vwcz1zLmdyb3VwcztcclxuICAgICAgICAgICAgICAgIH1cclxuXHRcdCAgICAgICAgcy5fc2h1ZmZsZWRHcm91cHMuZm9yRWFjaCgoZyk9PntcclxuXHRcdCAgICAgICAgICAgIGlmKCdSQU5ET00nPT09Zy5vcmRlcil7XHJcblx0XHQgICAgICAgICAgICAgICBnLl9zaHVmZmxlZFByb21wdEl0ZW1zPUFycmF5cy5zaHVmZmxlQXJyYXk8UHJvbXB0SXRlbT4oZy5wcm9tcHRJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcblx0XHQgICAgICAgICAgICAgICAgZy5fc2h1ZmZsZWRQcm9tcHRJdGVtcz1nLnByb21wdEl0ZW1zO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTY3JpcHQoc2NyaXB0OlNjcmlwdCl7XHJcbiAgICAgICAgdGhpcy5zY3JpcHQ9c2NyaXB0O1xyXG4gICAgICAgIHRoaXMucmFuZG9taXplKHRoaXMuc2NyaXB0KTtcclxuICAgICAgICB0aGlzLnNtLnNjcmlwdCA9IHRoaXMuc2NyaXB0O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgc2V0IHByb2plY3QocHJvamVjdDogUHJvamVjdHxudWxsKSB7XHJcbiAgICB0aGlzLl9wcm9qZWN0ID0gcHJvamVjdDtcclxuICAgIGxldCBjaENudCA9IFByb2plY3RVdGlsLkRFRkFVTFRfQVVESU9fQ0hBTk5FTF9DT1VOVDtcclxuXHJcbiAgICBpZiAocHJvamVjdCkge1xyXG4gICAgICBjb25zb2xlLmluZm8oXCJQcm9qZWN0IG5hbWU6IFwiICsgcHJvamVjdC5uYW1lKVxyXG4gICAgICBpZihwcm9qZWN0LnJlY29yZGluZ0RldmljZVdha2VMb2NrPT09dHJ1ZSl7XHJcbiAgICAgICAgdGhpcy5zbS53YWtlTG9jaz10cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc20uYXVkaW9EZXZpY2VzID0gcHJvamVjdC5hdWRpb0RldmljZXM7XHJcbiAgICAgIGNoQ250ID0gUHJvamVjdFV0aWwuYXVkaW9DaGFubmVsQ291bnQocHJvamVjdCk7XHJcbiAgICAgIGNvbnNvbGUuaW5mbyhcIlByb2plY3QgcmVxdWVzdGVkIHJlY29yZGluZyBjaGFubmVsIGNvdW50OiBcIiArIGNoQ250KTtcclxuICAgICAgdGhpcy5zbS5hdXRvR2FpbkNvbnRyb2xDb25maWdzPXByb2plY3QuYXV0b0dhaW5Db250cm9sQ29uZmlncztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFbXB0eSBwcm9qZWN0IGNvbmZpZ3VyYXRpb24hXCIpXHJcbiAgICB9XHJcbiAgICB0aGlzLnNtLmNoYW5uZWxDb3VudCA9IGNoQ250O1xyXG5cclxuICB9XHJcblxyXG4gIGdldCBwcm9qZWN0KCk6UHJvamVjdHxudWxse1xyXG5cdFx0ICByZXR1cm4gdGhpcy5fcHJvamVjdDtcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG4gICAgbG9hZFByb2plY3RDZmcoY2FsbGJhY2s6ICgpPT4gYW55KXtcclxuICAgICAgbGV0IHByb2pVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2Vzc2lvbklkID09PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSA9PT0gJ2xvY2FsaG9zdCcgfHwgdGhpcy5tb2RlID09PSBNb2RlLkRFTU8pIHtcclxuICAgICAgICAgIC8vIGRlYnVnIG9yIGRlbW8gbW9kZVxyXG4gICAgICAgICAgcHJvalVybCA9ICd0ZXN0L0RlbW8xLmpzb24/JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBsb2FkIFJFU1RmdWwgYnkgc2Vzc2lvbklkXHJcbiAgICAgICAgcHJvalVybCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgKyAnOicgKyB3aW5kb3cubG9jYXRpb24ucG9ydCArICcvd2lraXNwZWVjaC9yZXN0L3Byb2plY3RzLz9zZXNzaW9uSWQ9JyArIHRoaXMuc2Vzc2lvbklkO1xyXG5cclxuICAgICAgfVxyXG4gICAgICBpZihwcm9qVXJsKSB7XHJcbiAgICAgICAgdmFyIHBMb2FkZXIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICBwTG9hZGVyLm9wZW4oXCJHRVRcIiwgcHJvalVybCwgdHJ1ZSk7XHJcbiAgICAgICAgcExvYWRlci5zZXRSZXF1ZXN0SGVhZGVyKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpO1xyXG4gICAgICAgIHBMb2FkZXIucmVzcG9uc2VUeXBlID0gXCJqc29uXCI7XHJcbiAgICAgICAgcExvYWRlci5vbmxvYWQgPSAoZSkgPT4ge1xyXG5cclxuICAgICAgICAgIHRoaXMucHJvamVjdCA9IHBMb2FkZXIucmVzcG9uc2UucHJvamVjdDtcclxuXHJcbiAgICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwTG9hZGVyLm9uZXJyb3IgPSAoZSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGRvd25sb2FkaW5nIHByb2plY3QgZGF0YSAuLi5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBMb2FkZXIuc2VuZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gIC8vIGxvYWRTY3JpcHQoY2FsbGJhY2s6ICgpPT5hbnkpe1xyXG4gIC8vICAgdmFyIHNjckxvYWRlciA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gIC8vICAgbGV0IGhuOnN0cmluZyA9d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xyXG4gIC8vICAgbGV0IHBuOnN0cmluZyA9d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lO1xyXG4gIC8vICAgbGV0IHByOnN0cmluZyA9d2luZG93LmxvY2F0aW9uLnByb3RvY29sO1xyXG4gIC8vICAgbGV0IHBvOnN0cmluZyA9d2luZG93LmxvY2F0aW9uLnBvcnQ7XHJcbiAgLy9cclxuICAvLyAgIGxldCBzZXNzaW9uSWQ6c3RyaW5nPXRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQ7XHJcbiAgLy9cclxuICAvLyAgICAgbGV0IHNjclVybDpzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAvL1xyXG4gIC8vICAgICBpZiAoaG4gPT09ICdsb2NhbGhvc3QnICB8fCB0aGlzLm1vZGU9PT1Nb2RlLkRFTU8pIHtcclxuICAvLyAgICAgICAgIC8vIGxvY2FsIGRlYnVnIG1vZGVcclxuICAvLyAgICAgICAgIC8vIEZGIGNhY2hlc1xyXG4gIC8vICAgICAgICAgc2NyVXJsID0gJ3Rlc3QvJyArIHRoaXMuc2Vzc2lvbi5zY3JpcHQudG9TdHJpbmcoKSArICcuanNvbj8nICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgLy9cclxuICAvLyAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgIGxldCBzY3JQYXRoOnN0cmluZyA9ICcvd2lraXNwZWVjaC9zZXNzaW9uL3NjcmlwdHMvc2VydmxldCc7XHJcbiAgLy8gICAgICAgICBsZXQgc2NyUXU6c3RyaW5nID0gJ3Nlc3Npb25JZD0nICsgc2Vzc2lvbklkO1xyXG4gIC8vICAgICAgICAgc2NyVXJsID0gcHIgKyAnLy8nICsgaG4gKyAnOicgKyBwbyArIHNjclBhdGg7XHJcbiAgLy8gICAgICAgICBpZiAoc2NyUXUpIHtcclxuICAvLyAgICAgICAgICAgICBzY3JVcmwgPSBzY3JVcmwgKyAnPycgKyBzY3JRdTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgfVxyXG4gIC8vXHJcbiAgLy8gICBzY3JMb2FkZXIub3BlbihcIkdFVFwiLHNjclVybCAsIHRydWUpO1xyXG4gIC8vICAgc2NyTG9hZGVyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsJ2FwcGxpY2F0aW9uL2pzb24nKTtcclxuICAvLyAgIHNjckxvYWRlci5yZXNwb25zZVR5cGUgPSBcImpzb25cIjtcclxuICAvLyAgIHNjckxvYWRlci5vbmxvYWQgPSAoZSkgPT4ge1xyXG4gIC8vXHJcbiAgLy8gICAgIHRoaXMuc2NyaXB0ID0gc2NyTG9hZGVyLnJlc3BvbnNlO1xyXG4gIC8vXHJcbiAgLy9cclxuICAvLyAgICAgdGhpcy5zbS5zY3JpcHQgPSB0aGlzLnNjcmlwdDtcclxuICAvL1xyXG4gIC8vICAgICBjYWxsYmFjaygpO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgc2NyTG9hZGVyLm9uZXJyb3IgPSAoZSkgPT4ge1xyXG4gIC8vICAgICBjb25zb2xlLmxvZyhcIkVycm9yIGRvd25sb2FkaW5nIHJlY29yZGluZyBzY3JpcHQgZGF0YSAuLi5cIik7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBzY3JMb2FkZXIuc2VuZCgpO1xyXG4gIC8vIH1cclxuXHJcbiAgICBzdGFydCgpe1xyXG5cclxuICAgICAgICAvL3RoaXMuY29uZmlndXJlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuXHRcdGF1ZGlvUGxheWVyVXBkYXRlKGU6QXVkaW9QbGF5ZXJFdmVudCl7XHJcblx0XHRcdGlmKFBsYXliYWNrRXZlbnRUeXBlLlNUQVJURUQ9PT1lLnR5cGUpe1xyXG5cdFx0XHRcdC8vdGhpcy5zdGFydEJ0bi5kaXNhYmxlZD10cnVlO1xyXG5cdFx0XHRcdC8vdGhpcy5zdG9wQnRuLmRpc2FibGVkPXRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0naW5mbyc7XHJcblx0XHRcdFx0dGhpcy5zbS5zdGF0dXNNc2c9J1BsYXliYWNrLi4uJztcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoUGxheWJhY2tFdmVudFR5cGUuRU5ERUQgPT09IGUudHlwZSkge1xyXG5cdFx0XHRcdC8vdGhpcy5zdGFydEJ0bi5kaXNhYmxlZD1mYWxzZTtcclxuXHRcdFx0XHQvL3RoaXMuc3RvcEJ0bi5kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2luZm8nO1xyXG5cdFx0XHRcdHRoaXMuc20uc3RhdHVzTXNnPSdSZWFkeS4nO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRlcnJvcigpe1xyXG5cdFx0ICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdlcnJvcic7XHJcblx0XHRcdHRoaXMuc20uc3RhdHVzTXNnPSdFUlJPUjogUmVjb3JkaW5nLic7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcbi8vXHJcbi8vXHJcbi8vIGZ1bmN0aW9uIHNwZWVjaHJlY29yZGVySW5pdCgpIHtcclxuLy8gXHR2YXIgc3ByID0gbmV3IGlwcy5hcHBzLnNwZWVlY2hyZWNvcmRlci5TcGVlY2hSZWNvcmRlcigpO1xyXG4vLyBcdHNwci5pbml0KCk7XHJcbi8vICAgc3ByLnN0YXJ0KCk7XHJcbi8vXHJcbi8vXHJcbi8vIH1cclxuIl19
377
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlZWNocmVjb3JkZXJuZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXJuZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQTJDLE1BQU0sZUFBZSxDQUFBO0FBQzVGLE9BQU8sRUFDa0MsU0FBUyxJQUFJLGlCQUFpQixFQUNyRSxXQUFXLEVBQ1osTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsY0FBYyxFQUFnQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZHLE9BQU8sRUFBNkIsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0UsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBSXhFLE9BQU8sRUFBVSxXQUFXLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUV0RSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUdyRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXJDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7Ozs7O0FBRXJFLE1BQU0sQ0FBTixJQUFZLElBQTBCO0FBQXRDLFdBQVksSUFBSTtJQUFFLG1EQUFjLENBQUE7SUFBQywrQkFBSSxDQUFBO0FBQUEsQ0FBQyxFQUExQixJQUFJLEtBQUosSUFBSSxRQUFzQjtBQWtCdEMsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGlCQUFpQjtJQWM5RCxZQUFvQixLQUFxQixFQUNmLE1BQWMsRUFDbEIsaUJBQW9DLEVBQ3BDLGVBQThCLEVBQzlCLGNBQTZCLEVBQzdCLGFBQTJCLEVBQzNCLGVBQWdDLEVBQzlCLFFB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QkFDOUIsU0FBUyxFQUFFLENBQUMsY0FBYyxDQUFDO29CQUMzQixRQUFRLEVBQUU7O0dBRVQ7b0JBQ0QsTUFBTSxFQUFFLENBQUM7Ozs7OztJQU1QLENBQUM7aUJBRUo7b1RBYThDLEVBQUU7c0JBQTlDLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBWaWV3Q2hpbGQsIENoYW5nZURldGVjdG9yUmVmLCBBZnRlclZpZXdJbml0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7XHJcbiAgQXVkaW9QbGF5ZXJMaXN0ZW5lciwgQXVkaW9QbGF5ZXJFdmVudCwgRXZlbnRUeXBlIGFzIFBsYXliYWNrRXZlbnRUeXBlLFxyXG4gIEF1ZGlvUGxheWVyXHJcbn0gZnJvbSAnLi9hdWRpby9wbGF5YmFjay9wbGF5ZXInO1xyXG5pbXBvcnQge0dyb3VwLCBPcmRlciwgUHJvbXB0SXRlbSwgU2NyaXB0fSBmcm9tICcuL3NwZWVjaHJlY29yZGVyL3NjcmlwdC9zY3JpcHQnXHJcbmltcG9ydCB7IFNlc3Npb25NYW5hZ2VyLFN0YXR1cyBhcyBTZXNzaW9uTWFuYWdlclN0YXR1c30gZnJvbSAnLi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL3Nlc3Npb25tYW5hZ2VyJztcclxuaW1wb3J0IHsgVXBsb2FkZXJTdGF0dXNDaGFuZ2VFdmVudCwgVXBsb2FkZXJTdGF0dXMgfSBmcm9tICcuL25ldC91cGxvYWRlcic7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFBhcmFtcywgUm91dGVyfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7U2Vzc2lvblNlcnZpY2V9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3Nlc3Npb24vc2Vzc2lvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2NyaXB0U2VydmljZX0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvc2NyaXB0L3NjcmlwdC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7U3BlZWNoUmVjb3JkZXJVcGxvYWRlcn0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvc3BydXBsb2FkZXJcIjtcclxuaW1wb3J0IHtTZXNzaW9ufSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL3Nlc3Npb25cIjtcclxuaW1wb3J0IHtQcm9qZWN0LCBQcm9qZWN0VXRpbH0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvcHJvamVjdC9wcm9qZWN0XCI7XHJcbmltcG9ydCB7UHJvamVjdFNlcnZpY2V9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3Byb2plY3QvcHJvamVjdC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXVkaW9Db250ZXh0UHJvdmlkZXJ9IGZyb20gXCIuL2F1ZGlvL2NvbnRleHRcIjtcclxuaW1wb3J0IHtSZWNvcmRpbmdTZXJ2aWNlfSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9yZWNvcmRpbmdzL3JlY29yZGluZ3Muc2VydmljZVwiO1xyXG5pbXBvcnQge1JlY29yZGluZ0ZpbGVEZXNjcmlwdG9ySW1wbH0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvcmVjb3JkaW5nXCI7XHJcbmltcG9ydCB7QXJyYXlzfSBmcm9tIFwiLi91dGlscy91dGlsc1wiO1xyXG5pbXBvcnQge0F1ZGlvUmVjb3JkZXJDb21wb25lbnR9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3Nlc3Npb24vYXVkaW9yZWNvcmRlclwiO1xyXG5pbXBvcnQge1JlY29yZGVyQ29tcG9uZW50fSBmcm9tIFwiLi9yZWNvcmRlcl9jb21wb25lbnRcIjtcclxuaW1wb3J0IHtCYXNpY1JlY29yZGVyfSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL2Jhc2ljcmVjb3JkZXJcIjtcclxuXHJcbmV4cG9ydCBlbnVtIE1vZGUge1NJTkdMRV9TRVNTSU9OLERFTU99XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHJcbiAgc2VsZWN0b3I6ICdhcHAtc3BlZWNocmVjb3JkZXInLFxyXG4gIHByb3ZpZGVyczogW1Nlc3Npb25TZXJ2aWNlXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGFwcC1zcHJyZWNvcmRpbmdzZXNzaW9uIFtwcm9qZWN0TmFtZV09XCJwcm9qZWN0Py5uYW1lXCIgW2RhdGFTYXZlZF09XCJkYXRhU2F2ZWRcIj48L2FwcC1zcHJyZWNvcmRpbmdzZXNzaW9uPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0e1xyXG4gICAgZmxleDogMjtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgbWluLWhlaWdodDowO1xyXG5cclxuICB9YF1cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTcGVlY2hyZWNvcmRlcm5nQ29tcG9uZW50IGV4dGVuZHMgUmVjb3JkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsQWZ0ZXJWaWV3SW5pdCxBdWRpb1BsYXllckxpc3RlbmVyIHtcclxuXHJcblx0ICBtb2RlITpNb2RlO1xyXG5cdFx0Y29udHJvbEF1ZGlvUGxheWVyITpBdWRpb1BsYXllcjtcclxuXHRcdGF1ZGlvOmFueTtcclxuXHJcblx0X3Byb2plY3Q6UHJvamVjdHxudWxsPW51bGw7XHJcbiAgc2Vzc2lvbklkITogc3RyaW5nO1xyXG4gIHNlc3Npb24hOlNlc3Npb247XHJcblxyXG4gIHNjcmlwdCE6U2NyaXB0O1xyXG5cclxuICBAVmlld0NoaWxkKFNlc3Npb25NYW5hZ2VyLCB7IHN0YXRpYzogdHJ1ZSB9KSBzbSE6U2Vzc2lvbk1hbmFnZXI7XHJcblxyXG5cdFx0Y29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZXNzaW9uc1NlcnZpY2U6U2Vzc2lvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHByb2plY3RTZXJ2aWNlOlByb2plY3RTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzY3JpcHRTZXJ2aWNlOlNjcmlwdFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlY0ZpbGVzU2VydmljZTpSZWNvcmRpbmdTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIHVwbG9hZGVyOlNwZWVjaFJlY29yZGVyVXBsb2FkZXIpIHtcclxuICAgICAgc3VwZXIodXBsb2FkZXIpO1xyXG5cdFx0fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG5cdFx0ICB0cnkge1xyXG4gICAgICAgIGxldCBhdWRpb0NvbnRleHQgPSBBdWRpb0NvbnRleHRQcm92aWRlci5hdWRpb0NvbnRleHRJbnN0YW5jZSgpO1xyXG4gICAgICAgICAgICAgIGlmKGF1ZGlvQ29udGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xBdWRpb1BsYXllciA9IG5ldyBBdWRpb1BsYXllcihhdWRpb0NvbnRleHQsIHRoaXMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICB0aGlzLnNtLmNvbnRyb2xBdWRpb1BsYXllcj10aGlzLmNvbnRyb2xBdWRpb1BsYXllcjtcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0naW5mbyc7XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2cgPSAnUGxheWVyIGluaXRpYWxpemVkLic7XHJcbiAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIGxldCBlcnJNc2c9J1Vua25vd24gZXJyb3InO1xyXG4gICAgICAgIGlmKGVyciBpbnN0YW5jZW9mIEVycm9yKXtcclxuICAgICAgICAgIGVyck1zZz1lcnIubWVzc2FnZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2c9ZXJyTXNnO1xyXG4gICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdlcnJvcic7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJNc2cpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgICAgIG5nQWZ0ZXJWaWV3SW5pdCgpe1xyXG4gICAgICAgIC8vIGxldCB3YWtlTG9ja1N1cHA9KCd3YWtlTG9jaycgaW4gbmF2aWdhdG9yKTtcclxuICAgICAgICAvLyBhbGVydCgnV2FrZSBsb2NrIEFQSSBzdXBwb3J0ZWQ6ICcrd2FrZUxvY2tTdXBwKTtcclxuXHJcblxyXG5cdFx0ICBpZih0aGlzLnNtLnN0YXR1cyE9PSBTZXNzaW9uTWFuYWdlclN0YXR1cy5FUlJPUikge1xyXG4gICAgICAgIGxldCBpbml0U3VjY2VzcyA9IHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmIChpbml0U3VjY2Vzcykge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtczogUGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChwYXJhbXNbJ3Nlc3Npb25JZCddKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mZXRjaFNlc3Npb24ocGFyYW1zWydzZXNzaW9uSWQnXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZSgocGFyYW1zOiBQYXJhbXMpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJvdXRlUGFyYW1zSWQgPSBwYXJhbXNbJ2lkJ107XHJcbiAgICAgICAgICAgIGlmIChyb3V0ZVBhcmFtc0lkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mZXRjaFNlc3Npb24ocm91dGVQYXJhbXNJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZmV0Y2hTZXNzaW9uKHNlc3Npb25JZDpzdHJpbmcpe1xyXG5cclxuICAgICAgbGV0IHNlc3NPYnM9IHRoaXMuc2Vzc2lvbnNTZXJ2aWNlLnNlc3Npb25PYnNlcnZlcihzZXNzaW9uSWQpO1xyXG5cclxuICAgICAgaWYoc2Vzc09icykge1xyXG4gICAgICAgIHNlc3NPYnMuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IHNlc3MgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldFNlc3Npb24oc2Vzcyk7XHJcbiAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c01zZyA9ICdSZWNlaXZlZCBzZXNzaW9uIGluZm8uJztcclxuICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNXYWl0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChzZXNzLnByb2plY3QpIHtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTZXNzaW9uIGFzc29jaWF0ZWQgcHJvamVjdDogXCIrc2Vzcy5wcm9qZWN0KVxyXG4gICAgICAgICAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdE9ic2VydmFibGUoc2Vzcy5wcm9qZWN0KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICBuZXh0OiAocHJvamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvamVjdCA9IHByb2plY3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaFNjcmlwdChzZXNzKTtcclxuICAgICAgICAgICAgICAgICAgfSwgZXJyb3I6IChyZWFzb24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c01zZyA9IHJlYXNvbjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNXYWl0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHByb2plY3QgY29uZmlnOiBcIiArIHJlYXNvbilcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIlNlc3Npb24gaGFzIG5vIGFzc29jaWF0ZWQgcHJvamVjdC4gVXNpbmcgZGVmYXVsdCBjb25maWd1cmF0aW9uLlwiKVxyXG4gICAgICAgICAgICAgIHRoaXMuZmV0Y2hTY3JpcHQoc2Vzcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjoocmVhc29uKSA9PlxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c01zZyA9IHJlYXNvbjtcclxuICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InO1xyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHNlc3Npb24gXCIgKyByZWFzb24pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgZmV0Y2hTY3JpcHQoc2VzczogU2Vzc2lvbikge1xyXG4gICAgaWYgKHNlc3Muc2NyaXB0KSB7XHJcbiAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gICAgICB0aGlzLnNtLnN0YXR1c01zZyA9ICdGZXRjaGluZyByZWNvcmRpbmcgc2NyaXB0Li4uJztcclxuICAgICAgdGhpcy5zbS5zdGF0dXNXYWl0aW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zY3JpcHRTZXJ2aWNlLnNjcmlwdE9ic2VydmFibGUoc2Vzcy5zY3JpcHQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHNjcmlwdCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGUgPSAnaW5mbyc7XHJcbiAgICAgICAgICB0aGlzLnNtLnN0YXR1c01zZyA9ICdSZWNlaXZlZCByZWNvcmRpbmcgc2NyaXB0Lic7XHJcbiAgICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuc2V0U2NyaXB0KHNjcmlwdClcclxuICAgICAgICAgIHRoaXMuc20uc2Vzc2lvbiA9IHNlc3M7XHJcbiAgICAgICAgICB0aGlzLmZldGNoUmVjb3JkaW5ncyhzZXNzLCB0aGlzLnNjcmlwdClcclxuICAgICAgICB9LCBlcnJvcjogKHJlYXNvbikgPT4ge1xyXG4gICAgICAgICAgbGV0IGVyck1zZyA9IFwiRXJyb3IgZmV0Y2hpbmcgcmVjb3JkaW5nIHNjcmlwdDogXCIgKyByZWFzb25cclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyTXNnKVxyXG4gICAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2cgPSBlcnJNc2c7XHJcbiAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGVyck1zZyA9IFwiTm8gcmVjb3JkaW5nIHNjcmlwdCBpcyBkZWZpbmVkIGZvciB0aGlzIHNlc3Npb24gd2l0aCBJRCBcIiArIHNlc3Muc2Vzc2lvbklkO1xyXG4gICAgICBjb25zb2xlLmVycm9yKHRoaXMuc20uc3RhdHVzTXNnKVxyXG4gICAgICB0aGlzLnNtLnN0YXR1c01zZyA9IGVyck1zZztcclxuICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZldGNoUmVjb3JkaW5ncyhzZXNzOiBTZXNzaW9uLCBzY3JpcHQ6IFNjcmlwdCkge1xyXG4gICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGUgPSAnaW5mbyc7XHJcbiAgICB0aGlzLnNtLnN0YXR1c01zZyA9ICdGZXRjaGluZyBpbmZvcyBvZiByZWNvcmRpbmdzLi4uJztcclxuICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZyA9IHRydWU7XHJcbiAgICBsZXQgcHJObTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICBpZiAodGhpcy5wcm9qZWN0KSB7XHJcbiAgICAgIGxldCByZnNPYnMgPSB0aGlzLnJlY0ZpbGVzU2VydmljZS5yZWNvcmRpbmdGaWxlRGVzY3JMaXN0KHRoaXMucHJvamVjdC5uYW1lLCBzZXNzLnNlc3Npb25JZCk7XHJcbiAgICAgIHJmc09icy5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZnM6IEFycmF5PFJlY29yZGluZ0ZpbGVEZXNjcmlwdG9ySW1wbD4pID0+IHtcclxuICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gICAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2cgPSAnUmVjZWl2ZWQgaW5mb3Mgb2YgcmVjb3JkaW5ncy4nO1xyXG4gICAgICAgICAgdGhpcy5zbS5zdGF0dXNXYWl0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAocmZzKSB7XHJcbiAgICAgICAgICAgIGlmIChyZnMgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgICAgICAgIHJmcy5mb3JFYWNoKChyZikgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQWxyZWFkeSByZWNvcmRlZDogXCIgKyByZisgXCIgXCIrcmYucmVjb3JkaW5nLml0ZW1jb2RlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc20uYWRkUmVjb3JkaW5nRmlsZUJ5RGVzY3JpcHRvcihyZik7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFeHBlY3RlZCB0eXBlIGFycmF5IGZvciBsaXN0IG9mIGFscmVhZHkgcmVjb3JkZWQgZmlsZXMgJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiUmVjb3JkaW5nIGZpbGUgbGlzdDogXCIgKyByZnMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAvLyB3ZSBzdGFydCB0aGUgc2Vzc2lvbiBhbnl3YXlcclxuICAgICAgICAgIHRoaXMuc3RhcnRTZXNzaW9uKClcclxuICAgICAgICB9LCBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zdGFydFNlc3Npb24oKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFRPRE9cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgc3RhcnRTZXNzaW9uKCl7XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNXYWl0aW5nPWZhbHNlO1xyXG5cdFx0ICB0aGlzLnNtLnN0YXJ0KCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgICAgICBzZXRTZXNzaW9uKHNlc3Npb246YW55KXtcclxuXHRcdCAgICBpZihzZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgIC8vIGNvbnNvbGUuZGVidWcoXCJTZXNzaW9uIElEOiBcIiArIHNlc3Npb24uc2Vzc2lvbklkKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTZXNzaW9uIFVuZGVmaW5lZFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVhZHkoKTpib29sZWFue1xyXG5cdFx0ICAgIHJldHVybiB0aGlzLmRhdGFTYXZlZCAmJiAhdGhpcy5zbS5pc0FjdGl2ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuXHRcdGluaXQoKTpib29sZWFuIHtcclxuICAgICAgLy9UT0RPIER1cGxpY2F0ZSBjb2RlIGluIEF1ZGlvUmVjb3JkZXJDb21wb25lbnRcclxuICAgICAgICB0aGlzLnVwbG9hZGVyLmxpc3RlbmVyID0gKHVlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZFVwZGF0ZSh1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCAoZSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5kZWJ1ZyhcIkJlZm9yZSBwYWdlIHVubG9hZCBldmVudFwiKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5yZWFkeSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGFsbCB0aGlzIGF0dGVtcHRzIHRvIGN1c3RvbWl6ZSB0aGUgbWVzc2FnZSBkbyBub3Qgd29yayBhbnltb3JlIChmb3Igc2VjdXJpdHkgcmVhc29ucykhIVxyXG4gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IFwiUGxlYXNlIGRvIG5vdCBsZWF2ZSB0aGUgcGFnZSwgdW50aWwgYWxsIHJlY29yZGluZ3MgYXJlIHVwbG9hZGVkIVwiO1xyXG4gICAgICAgICAgICBhbGVydChtZXNzYWdlKTtcclxuICAgICAgICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xyXG5cclxuICAgICAgICAgICAgaWYgKGUpIHtcclxuICAgICAgICAgICAgICBlLnJldHVyblZhbHVlID0gbWVzc2FnZTtcclxuICAgICAgICAgICAgICBlLmNhbmNlbEJ1YmJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgaWYgKGUuc3RvcFByb3BhZ2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICB1cGxvYWRVcGRhdGUodWU6IFVwbG9hZGVyU3RhdHVzQ2hhbmdlRXZlbnQpIHtcclxuICAgIGxldCB1cFN0YXR1cyA9IHVlLnN0YXR1cztcclxuICAgIHRoaXMuZGF0YVNhdmVkID0gKFVwbG9hZGVyU3RhdHVzLkRPTkUgPT09IHVwU3RhdHVzKTtcclxuICAgIGxldCBwZXJjZW50VXBsID0gdWUucGVyY2VudERvbmUoKTtcclxuICAgIGlmIChVcGxvYWRlclN0YXR1cy5FUlIgPT09IHVwU3RhdHVzKSB7XHJcbiAgICAgIHRoaXMuc20udXBsb2FkU3RhdHVzID0gJ3dhcm4nXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocGVyY2VudFVwbCA8IDUwKSB7XHJcbiAgICAgICAgdGhpcy5zbS51cGxvYWRTdGF0dXMgPSAnYWNjZW50J1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc20udXBsb2FkU3RhdHVzID0gJ3N1Y2Nlc3MnXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zbS51cGxvYWRQcm9ncmVzcyA9IHBlcmNlbnRVcGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKClcclxuICB9XHJcblxyXG4gIGNvbmZpZ3VyZSgpIHtcclxuXHJcbiAgICAgIHRoaXMubG9hZFByb2plY3RDZmcoKCkgPT4ge1xyXG4gICAgICAgIC8vIGRpc3BsYXkgcHJvamVjdCBuYW1lXHJcbiAgICAgICAgbGV0IHByTmFtZTogc3RyaW5nID0gJ1tVbmtub3duXSc7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvamVjdCAmJiB0aGlzLnByb2plY3QubmFtZSkge1xyXG4gICAgICAgICAgcHJOYW1lID0gdGhpcy5wcm9qZWN0Lm5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vdGhpcy50aXRsZUVsLmlubmVyVGV4dCA9IHByTmFtZTtcclxuXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJhbmRvbWl6ZShzY3JpcHQ6U2NyaXB0KXtcclxuXHRcdCAgICBzY3JpcHQuc2VjdGlvbnMuZm9yRWFjaCgocyk9PntcclxuXHRcdCAgICAgICAgaWYoJ1JBTkRPTSc9PT1zLm9yZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcy5fc2h1ZmZsZWRHcm91cHMgPSBBcnJheXMuc2h1ZmZsZUFycmF5PEdyb3VwPihzLmdyb3Vwcyk7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuXHRcdCAgICAgICAgICAgIHMuX3NodWZmbGVkR3JvdXBzPXMuZ3JvdXBzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cdFx0ICAgICAgICBzLl9zaHVmZmxlZEdyb3Vwcy5mb3JFYWNoKChnKT0+e1xyXG5cdFx0ICAgICAgICAgICAgaWYoJ1JBTkRPTSc9PT1nLm9yZGVyKXtcclxuXHRcdCAgICAgICAgICAgICAgIGcuX3NodWZmbGVkUHJvbXB0SXRlbXM9QXJyYXlzLnNodWZmbGVBcnJheTxQcm9tcHRJdGVtPihnLnByb21wdEl0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuXHRcdCAgICAgICAgICAgICAgICBnLl9zaHVmZmxlZFByb21wdEl0ZW1zPWcucHJvbXB0SXRlbXM7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFNjcmlwdChzY3JpcHQ6U2NyaXB0KXtcclxuICAgICAgICB0aGlzLnNjcmlwdD1zY3JpcHQ7XHJcbiAgICAgICAgdGhpcy5yYW5kb21pemUodGhpcy5zY3JpcHQpO1xyXG4gICAgICAgIHRoaXMuc20uc2NyaXB0ID0gdGhpcy5zY3JpcHQ7XHJcbiAgICB9XHJcblxyXG5cclxuICBzZXQgcHJvamVjdChwcm9qZWN0OiBQcm9qZWN0fG51bGwpIHtcclxuICAgIHRoaXMuX3Byb2plY3QgPSBwcm9qZWN0O1xyXG4gICAgbGV0IGNoQ250ID0gUHJvamVjdFV0aWwuREVGQVVMVF9BVURJT19DSEFOTkVMX0NPVU5UO1xyXG5cclxuICAgIGlmIChwcm9qZWN0KSB7XHJcbiAgICAgIGNvbnNvbGUuaW5mbyhcIlByb2plY3QgbmFtZTogXCIgKyBwcm9qZWN0Lm5hbWUpXHJcbiAgICAgIGlmKHByb2plY3QucmVjb3JkaW5nRGV2aWNlV2FrZUxvY2s9PT10cnVlKXtcclxuICAgICAgICB0aGlzLnNtLndha2VMb2NrPXRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zbS5hdWRpb0RldmljZXMgPSBwcm9qZWN0LmF1ZGlvRGV2aWNlcztcclxuICAgICAgY2hDbnQgPSBQcm9qZWN0VXRpbC5hdWRpb0NoYW5uZWxDb3VudChwcm9qZWN0KTtcclxuICAgICAgY29uc29sZS5pbmZvKFwiUHJvamVjdCByZXF1ZXN0ZWQgcmVjb3JkaW5nIGNoYW5uZWwgY291bnQ6IFwiICsgY2hDbnQpO1xyXG4gICAgICB0aGlzLnNtLmF1dG9HYWluQ29udHJvbENvbmZpZ3M9cHJvamVjdC5hdXRvR2FpbkNvbnRyb2xDb25maWdzO1xyXG4gICAgICBpZihwcm9qZWN0LmNodW5rZWRSZWNvcmRpbmc9PT10cnVlKXtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKFwiRW5hYmxlIGNodW5rZWQgdXBsb2FkOiBjaHVua1NpemU6IFwiK0Jhc2ljUmVjb3JkZXIuREVGQVVMVF9DSFVOS19TSVpFX1NFQ09ORFMpXHJcbiAgICAgICAgdGhpcy5zbS51cGxvYWRDaHVua1NpemVTZWNvbmRzPUJhc2ljUmVjb3JkZXIuREVGQVVMVF9DSFVOS19TSVpFX1NFQ09ORFM7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIHRoaXMuc20udXBsb2FkQ2h1bmtTaXplU2Vjb25kcz1udWxsO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiRW1wdHkgcHJvamVjdCBjb25maWd1cmF0aW9uIVwiKVxyXG4gICAgfVxyXG4gICAgdGhpcy5zbS5jaGFubmVsQ291bnQgPSBjaENudDtcclxuXHJcbiAgfVxyXG5cclxuICBnZXQgcHJvamVjdCgpOlByb2plY3R8bnVsbHtcclxuXHRcdCAgcmV0dXJuIHRoaXMuX3Byb2plY3Q7XHJcbiAgfVxyXG5cclxuICAgIGxvYWRQcm9qZWN0Q2ZnKGNhbGxiYWNrOiAoKT0+IGFueSl7XHJcbiAgICAgIGxldCBwcm9qVXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgIGlmICh0aGlzLnNlc3Npb25JZCA9PT0gbnVsbCkge1xyXG4gICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgPT09ICdsb2NhbGhvc3QnIHx8IHRoaXMubW9kZSA9PT0gTW9kZS5ERU1PKSB7XHJcbiAgICAgICAgICAvLyBkZWJ1ZyBvciBkZW1vIG1vZGVcclxuICAgICAgICAgIHByb2pVcmwgPSAndGVzdC9EZW1vMS5qc29uPycgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gbG9hZCBSRVNUZnVsIGJ5IHNlc3Npb25JZFxyXG4gICAgICAgIHByb2pVcmwgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICsgJzonICsgd2luZG93LmxvY2F0aW9uLnBvcnQgKyAnL3dpa2lzcGVlY2gvcmVzdC9wcm9qZWN0cy8/c2Vzc2lvbklkPScgKyB0aGlzLnNlc3Npb25JZDtcclxuXHJcbiAgICAgIH1cclxuICAgICAgaWYocHJvalVybCkge1xyXG4gICAgICAgIHZhciBwTG9hZGVyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgcExvYWRlci5vcGVuKFwiR0VUXCIsIHByb2pVcmwsIHRydWUpO1xyXG4gICAgICAgIHBMb2FkZXIuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcclxuICAgICAgICBwTG9hZGVyLnJlc3BvbnNlVHlwZSA9IFwianNvblwiO1xyXG4gICAgICAgIHBMb2FkZXIub25sb2FkID0gKGUpID0+IHtcclxuXHJcbiAgICAgICAgICB0aGlzLnByb2plY3QgPSBwTG9hZGVyLnJlc3BvbnNlLnByb2plY3Q7XHJcblxyXG4gICAgICAgICAgY2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcExvYWRlci5vbmVycm9yID0gKGUpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBkb3dubG9hZGluZyBwcm9qZWN0IGRhdGEgLi4uXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwTG9hZGVyLnNlbmQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCl7XHJcbiAgICB9XHJcblxyXG5cdFx0YXVkaW9QbGF5ZXJVcGRhdGUoZTpBdWRpb1BsYXllckV2ZW50KXtcclxuXHRcdFx0aWYoUGxheWJhY2tFdmVudFR5cGUuU1RBUlRFRD09PWUudHlwZSl7XHJcblx0XHRcdFx0Ly90aGlzLnN0YXJ0QnRuLmRpc2FibGVkPXRydWU7XHJcblx0XHRcdFx0Ly90aGlzLnN0b3BCdG4uZGlzYWJsZWQ9dHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdpbmZvJztcclxuXHRcdFx0XHR0aGlzLnNtLnN0YXR1c01zZz0nUGxheWJhY2suLi4nO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChQbGF5YmFja0V2ZW50VHlwZS5FTkRFRCA9PT0gZS50eXBlKSB7XHJcblx0XHRcdFx0Ly90aGlzLnN0YXJ0QnRuLmRpc2FibGVkPWZhbHNlO1xyXG5cdFx0XHRcdC8vdGhpcy5zdG9wQnRuLmRpc2FibGVkPXRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0naW5mbyc7XHJcblx0XHRcdFx0dGhpcy5zbS5zdGF0dXNNc2c9J1JlYWR5Lic7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGVycm9yKCl7XHJcblx0XHQgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2Vycm9yJztcclxuXHRcdFx0dGhpcy5zbS5zdGF0dXNNc2c9J0VSUk9SOiBSZWNvcmRpbmcuJztcclxuXHRcdH1cclxuXHR9XHJcbiJdfQ==
@@ -1,2 +1,2 @@
1
- export const VERSION = '2.24.0';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ByLm1vZHVsZS52ZXJzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3Nwci5tb2R1bGUudmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUMsUUFBUSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFZFUlNJT049JzIuMjQuMCciXX0=
1
+ export const VERSION = '2.25.0';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ByLm1vZHVsZS52ZXJzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3Nwci5tb2R1bGUudmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUMsUUFBUSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFZFUlNJT049JzIuMjUuMCciXX0=