speechrecorderng 3.4.4 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/esm2020/lib/action/action.mjs +3 -3
- package/esm2020/lib/audio/audio_display.mjs +7 -9
- package/esm2020/lib/audio/audio_player.mjs +13 -26
- package/esm2020/lib/audio/capture/capture.mjs +244 -207
- package/esm2020/lib/audio/context.mjs +64 -2
- package/esm2020/lib/audio/io/stream.mjs +1 -1
- package/esm2020/lib/audio/net_audio_buffer.mjs +5 -9
- package/esm2020/lib/audio/playback/array_audio_buffer_source_node.mjs +2 -2
- package/esm2020/lib/audio/playback/audio_source_worklet_module_loader.mjs +2 -2
- package/esm2020/lib/audio/playback/inddb_audio_buffer_source_node.mjs +1 -1
- package/esm2020/lib/audio/playback/player.mjs +137 -96
- package/esm2020/lib/audio/ui/audio_display_control.mjs +1 -1
- package/esm2020/lib/audio/ui/container.mjs +3 -3
- package/esm2020/lib/db/inddb.mjs +1 -1
- package/esm2020/lib/net/uploader.mjs +31 -28
- package/esm2020/lib/speechrecorder/project/project.mjs +1 -1
- package/esm2020/lib/speechrecorder/project/project.service.mjs +4 -4
- package/esm2020/lib/speechrecorder/recordings/basic_recording.service.mjs +59 -56
- package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +151 -142
- package/esm2020/lib/speechrecorder/script/script.service.mjs +1 -1
- package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +49 -99
- package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +9 -2
- package/esm2020/lib/speechrecorder/session/controlpanel.mjs +13 -11
- package/esm2020/lib/speechrecorder/session/progress.mjs +1 -1
- package/esm2020/lib/speechrecorder/session/prompting.mjs +1 -1
- package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +1 -1
- package/esm2020/lib/speechrecorder/session/recording_list.mjs +1 -1
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +3 -3
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +3 -3
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +17 -16
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +13 -14
- package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +145 -135
- package/esm2020/lib/speechrecorder/session/session.service.mjs +12 -9
- package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +66 -70
- package/esm2020/lib/speechrecorder/startstopsignal/startstopsignal.mjs +1 -2
- package/esm2020/lib/speechrecorderng.component.mjs +10 -16
- package/esm2020/lib/speechrecorderng.module.mjs +1 -1
- package/esm2020/lib/spr.module.version.mjs +2 -2
- package/esm2020/lib/ui/recordingitem_display.mjs +2 -2
- package/fesm2015/speechrecorderng.mjs +1077 -976
- package/fesm2015/speechrecorderng.mjs.map +1 -1
- package/fesm2020/speechrecorderng.mjs +1074 -976
- package/fesm2020/speechrecorderng.mjs.map +1 -1
- package/lib/action/action.d.ts +1 -1
- package/lib/audio/audio_display.d.ts +1 -3
- package/lib/audio/audio_player.d.ts +0 -1
- package/lib/audio/capture/capture.d.ts +5 -4
- package/lib/audio/context.d.ts +2 -0
- package/lib/audio/io/stream.d.ts +1 -1
- package/lib/audio/net_audio_buffer.d.ts +2 -4
- package/lib/audio/playback/player.d.ts +3 -2
- package/lib/net/uploader.d.ts +6 -6
- package/lib/speechrecorder/project/project.d.ts +1 -0
- package/lib/speechrecorder/project/project.service.d.ts +4 -4
- package/lib/speechrecorder/recordings/basic_recording.service.d.ts +2 -2
- package/lib/speechrecorder/recordings/recordings.service.d.ts +8 -8
- package/lib/speechrecorder/script/script.service.d.ts +2 -2
- package/lib/speechrecorder/session/audiorecorder.d.ts +1 -2
- package/lib/speechrecorder/session/basicrecorder.d.ts +4 -1
- package/lib/speechrecorder/session/controlpanel.d.ts +1 -1
- package/lib/speechrecorder/session/recordingfile/recording-file-meta.component.d.ts +1 -0
- package/lib/speechrecorder/session/recordingfile/recordingfile-service.d.ts +2 -2
- package/lib/speechrecorder/session/session.service.d.ts +2 -2
- package/lib/speechrecorder/session/sessionmanager.d.ts +1 -0
- package/lib/spr.module.version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -11,7 +11,6 @@ import { Prompting } from "./prompting";
|
|
|
11
11
|
import { SessionFinishedDialog } from "./session_finished_dialog";
|
|
12
12
|
import { MessageDialog } from "../../ui/message_dialog";
|
|
13
13
|
import { RecordingService } from "../recordings/recordings.service";
|
|
14
|
-
import { AudioContextProvider } from "../../audio/context";
|
|
15
14
|
import { AudioClip } from "../../audio/persistor";
|
|
16
15
|
import { Item } from "./item";
|
|
17
16
|
import { LevelBar } from "../../audio/ui/livelevel";
|
|
@@ -44,6 +43,7 @@ export class SessionManager extends BasicRecorder {
|
|
|
44
43
|
this.bpo = bpo;
|
|
45
44
|
this.renderer = renderer;
|
|
46
45
|
this.recFileService = recFileService;
|
|
46
|
+
this.offlineAudioContext = null;
|
|
47
47
|
this.enableUploadRecordings = true;
|
|
48
48
|
this.enableDownloadRecordings = false;
|
|
49
49
|
this.status = 0 /* BLOCKED */;
|
|
@@ -100,37 +100,58 @@ export class SessionManager extends BasicRecorder {
|
|
|
100
100
|
this.transportActions.nextAction.disabled = true;
|
|
101
101
|
this.transportActions.pauseAction.disabled = true;
|
|
102
102
|
this.playStartAction.disabled = true;
|
|
103
|
-
let context
|
|
104
|
-
try {
|
|
105
|
-
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
103
|
+
// let context:AudioContext|null=null;
|
|
104
|
+
// try {
|
|
105
|
+
// context = AudioContextProvider.audioContextInstance();
|
|
106
|
+
// } catch (err) {
|
|
107
|
+
// this.status = Status.ERROR;
|
|
108
|
+
// let errMsg = 'Unknown error';
|
|
109
|
+
// if(err instanceof Error){
|
|
110
|
+
// errMsg=err.message;
|
|
111
|
+
// }
|
|
112
|
+
// this.statusMsg = 'ERROR: ' + errMsg;
|
|
113
|
+
// this.statusAlertType = 'error';
|
|
114
|
+
// this.dialog.open(MessageDialog, {
|
|
115
|
+
// data: {
|
|
116
|
+
// type: 'error',
|
|
117
|
+
// title: 'Error',
|
|
118
|
+
// msg: errMsg,
|
|
119
|
+
// advice: 'Please use a supported browser.',
|
|
120
|
+
// }
|
|
121
|
+
// });
|
|
122
|
+
// return;
|
|
123
|
+
// }
|
|
124
|
+
// if(context) {
|
|
125
|
+
// console.info("State of audio context: " + context.state)
|
|
126
|
+
// }else{
|
|
127
|
+
// console.info("No audio context available!");
|
|
128
|
+
// }
|
|
129
|
+
// if (!context || !navigator.mediaDevices) {
|
|
130
|
+
// this.status = Status.ERROR;
|
|
131
|
+
// let errMsg = 'Browser does not support Media streams!';
|
|
132
|
+
// this.statusMsg = 'ERROR: ' + errMsg;
|
|
133
|
+
// this.statusAlertType = 'error';
|
|
134
|
+
// this.dialog.open(MessageDialog, {
|
|
135
|
+
// data: {
|
|
136
|
+
// type: 'error',
|
|
137
|
+
// title: 'Error',
|
|
138
|
+
// msg: errMsg,
|
|
139
|
+
// advice: 'Please use a supported browser.',
|
|
140
|
+
// }
|
|
141
|
+
// });
|
|
142
|
+
// return;
|
|
143
|
+
// } else {
|
|
144
|
+
this.ac = new AudioCapture();
|
|
145
|
+
if (this.ac) {
|
|
146
|
+
this.transportActions.startAction.onAction = () => this.startItem();
|
|
147
|
+
this.ac.listener = this;
|
|
148
|
+
this.configureStreamCaptureStream();
|
|
149
|
+
// Don't list the devices here. If we do not have audio permissions we only get anonymized devices without labels.
|
|
150
|
+
//this.ac.listDevices();
|
|
127
151
|
}
|
|
128
152
|
else {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
if (!context || !navigator.mediaDevices) {
|
|
132
|
-
this.status = 9 /* ERROR */;
|
|
133
|
-
let errMsg = 'Browser does not support Media streams!';
|
|
153
|
+
this.transportActions.startAction.disabled = true;
|
|
154
|
+
let errMsg = 'Browser does not support Media/Audio API!';
|
|
134
155
|
this.statusMsg = 'ERROR: ' + errMsg;
|
|
135
156
|
this.statusAlertType = 'error';
|
|
136
157
|
this.dialog.open(MessageDialog, {
|
|
@@ -143,38 +164,13 @@ export class SessionManager extends BasicRecorder {
|
|
|
143
164
|
});
|
|
144
165
|
return;
|
|
145
166
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
//this.ac.listDevices();
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
this.transportActions.startAction.disabled = true;
|
|
157
|
-
let errMsg = 'Browser does not support Media/Audio API!';
|
|
158
|
-
this.statusMsg = 'ERROR: ' + errMsg;
|
|
159
|
-
this.statusAlertType = 'error';
|
|
160
|
-
this.dialog.open(MessageDialog, {
|
|
161
|
-
data: {
|
|
162
|
-
type: 'error',
|
|
163
|
-
title: 'Error',
|
|
164
|
-
msg: errMsg,
|
|
165
|
-
advice: 'Please use a supported browser.',
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
this.transportActions.stopAction.onAction = () => this.stopItem();
|
|
171
|
-
this.transportActions.nextAction.onAction = () => this.stopItem();
|
|
172
|
-
this.transportActions.pauseAction.onAction = () => this.pauseItem();
|
|
173
|
-
this.transportActions.fwdAction.onAction = () => this.nextItem();
|
|
174
|
-
this.transportActions.fwdNextAction.onAction = () => this.nextUnrecordedItem();
|
|
175
|
-
this.transportActions.bwdAction.onAction = () => this.prevItem();
|
|
176
|
-
this.playStartAction.onAction = () => this.controlAudioPlayer?.start();
|
|
177
|
-
}
|
|
167
|
+
this.transportActions.stopAction.onAction = () => this.stopItem();
|
|
168
|
+
this.transportActions.nextAction.onAction = () => this.stopItem();
|
|
169
|
+
this.transportActions.pauseAction.onAction = () => this.pauseItem();
|
|
170
|
+
this.transportActions.fwdAction.onAction = () => this.nextItem();
|
|
171
|
+
this.transportActions.fwdNextAction.onAction = () => this.nextUnrecordedItem();
|
|
172
|
+
this.transportActions.bwdAction.onAction = () => this.prevItem();
|
|
173
|
+
this.playStartAction.onAction = () => this.controlAudioPlayer?.start();
|
|
178
174
|
this.startStopSignalState = 4 /* OFF */;
|
|
179
175
|
}
|
|
180
176
|
onKeyPress(ke) {
|
|
@@ -481,7 +477,7 @@ export class SessionManager extends BasicRecorder {
|
|
|
481
477
|
}
|
|
482
478
|
else {
|
|
483
479
|
//console.debug("Fetch audio and store to indexed db...");
|
|
484
|
-
this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileIndDbAudioBuffer(this.
|
|
480
|
+
this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileIndDbAudioBuffer(this._persistentAudioStorageTarget, this._session.project, rf).subscribe({
|
|
485
481
|
next: (iab) => {
|
|
486
482
|
//console.debug("Sessionmanager: Received inddb audio buffer: "+iab);
|
|
487
483
|
nextIab = iab;
|
|
@@ -523,7 +519,7 @@ export class SessionManager extends BasicRecorder {
|
|
|
523
519
|
// Fetch chunked audio buffer from network
|
|
524
520
|
let nextNetAb = null;
|
|
525
521
|
//console.debug("Fetch chunked audio from network");
|
|
526
|
-
this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileNetAudioBuffer(this.
|
|
522
|
+
this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileNetAudioBuffer(this._session.project, rf).subscribe({
|
|
527
523
|
next: (netAb) => {
|
|
528
524
|
//console.debug("Sessionmanager: Received net audio buffer: "+netAb);
|
|
529
525
|
nextNetAb = netAb;
|
|
@@ -565,7 +561,7 @@ export class SessionManager extends BasicRecorder {
|
|
|
565
561
|
// Fetch chunked array audio buffer
|
|
566
562
|
let nextAab = null;
|
|
567
563
|
//console.debug("Fetch audio and store to (chunked) array buffer...");
|
|
568
|
-
this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileArrayAudioBuffer(this.
|
|
564
|
+
this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileArrayAudioBuffer(this._session.project, rf).subscribe({
|
|
569
565
|
next: (aab) => {
|
|
570
566
|
nextAab = aab;
|
|
571
567
|
},
|
|
@@ -603,7 +599,7 @@ export class SessionManager extends BasicRecorder {
|
|
|
603
599
|
else {
|
|
604
600
|
// Fetch regular audio buffer
|
|
605
601
|
//console.debug("Fetch audio and store to audio buffer...");
|
|
606
|
-
this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileAudioBuffer(this.
|
|
602
|
+
this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileAudioBuffer(this._session.project, rf).subscribe({
|
|
607
603
|
next: (ab) => {
|
|
608
604
|
this.liveLevelDisplayState = LiveLevelState.READY;
|
|
609
605
|
let fabDh = null;
|
|
@@ -990,7 +986,7 @@ export class SessionManager extends BasicRecorder {
|
|
|
990
986
|
const sr = this.ac.currentSampleRate;
|
|
991
987
|
const chFl = sr * RecordingService.DEFAULT_CHUNKED_DOWNLOAD_SECONDS;
|
|
992
988
|
//console.debug("stopped(): rfID: "+this._recordingFile?.recordingFileId+", net ab url: " + burl+", frames: "+this.ac.framesRecorded+", sample rate: "+sr);
|
|
993
|
-
let netAb = new NetAudioBuffer(this.
|
|
989
|
+
let netAb = new NetAudioBuffer(this.recFileService, burl, this.ac.channelCount, sr, chFl, this.ac.framesRecorded, rUUID, chFl);
|
|
994
990
|
as = netAb;
|
|
995
991
|
if (this.uploadSet) {
|
|
996
992
|
//let rp=new ReadyProvider();
|
|
@@ -1037,7 +1033,7 @@ export class SessionManager extends BasicRecorder {
|
|
|
1037
1033
|
const sr = this.ac.currentSampleRate;
|
|
1038
1034
|
const chFl = sr * RecordingService.DEFAULT_CHUNKED_DOWNLOAD_SECONDS;
|
|
1039
1035
|
//console.debug("stopped(): rfID: "+this._recordingFile?.recordingFileId+", net ab url: " + burl+", frames: "+this.ac.framesRecorded+", sample rate: "+sr);
|
|
1040
|
-
const netAb = new NetAudioBuffer(this.
|
|
1036
|
+
const netAb = new NetAudioBuffer(this.recFileService, burl, this.ac.channelCount, sr, chFl, this.ac.framesRecorded, rUUID, chFl);
|
|
1041
1037
|
as = netAb;
|
|
1042
1038
|
if (this.uploadSet) {
|
|
1043
1039
|
this.uploadSet.onDone = (uploadSet) => {
|
|
@@ -1075,8 +1071,8 @@ export class SessionManager extends BasicRecorder {
|
|
|
1075
1071
|
// TODO could we avoid conversion to save CPU resources and transfer float PCM directly?
|
|
1076
1072
|
// TODO duplicate conversion for manual download
|
|
1077
1073
|
//console.log("Build wav writer...");
|
|
1078
|
-
this.processingRecording = true;
|
|
1079
1074
|
if (ab) {
|
|
1075
|
+
this.processingRecording = true;
|
|
1080
1076
|
let ww = new WavWriter();
|
|
1081
1077
|
//new REST API URL
|
|
1082
1078
|
let apiEndPoint = '';
|
|
@@ -1334,4 +1330,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
1334
1330
|
type: HostListener,
|
|
1335
1331
|
args: ['window:keydown', ['$event']]
|
|
1336
1332
|
}] } });
|
|
1337
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbm1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9ubWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUF1QixNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBZ0MsU0FBUyxFQUFDLE1BQU0sNkJBQTZCLENBQUE7QUFDcEYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDRCQUE0QixDQUFBO0FBQ3BELE9BQU8sRUFBb0IsY0FBYyxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBQ3BGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBOEIsTUFBTSxjQUFjLENBQUE7QUFDMUUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUlqRCxPQUFPLEVBQUMscUJBQXFCLEVBQXVCLE1BQU0sa0JBQWtCLENBQUM7QUFDN0UsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDekQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2hELE9BQU8sRUFBQyxJQUFJ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QkFBbkIsS0FBSztnQkFLa0MsU0FBUztzQkFBaEQsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNDLGdCQUFnQjtzQkFBdEQsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUU1QixTQUFTO3NCQUFqQixLQUFLO2dCQW1LTixVQUFVO3NCQURULFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUzNDLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXVkaW9DYXB0dXJlLCBBdWRpb0NhcHR1cmVMaXN0ZW5lcn0gZnJvbSAnLi4vLi4vYXVkaW8vY2FwdHVyZS9jYXB0dXJlJztcclxuaW1wb3J0IHtBdWRpb1BsYXllciwgQXVkaW9QbGF5ZXJFdmVudCwgRXZlbnRUeXBlfSBmcm9tICcuLi8uLi9hdWRpby9wbGF5YmFjay9wbGF5ZXInXHJcbmltcG9ydCB7V2F2V3JpdGVyfSBmcm9tICcuLi8uLi9hdWRpby9pbXBsL3dhdndyaXRlcidcclxuaW1wb3J0IHtHcm91cCwgUHJvbXB0SXRlbSwgUHJvbXB0aXRlbVV0aWwsIFNjcmlwdCwgU2VjdGlvbn0gZnJvbSAnLi4vc2NyaXB0L3NjcmlwdCc7XHJcbmltcG9ydCB7U3ByUmVjb3JkaW5nRmlsZSwgUmVjb3JkaW5nRmlsZURlc2NyaXB0b3JJbXBsfSBmcm9tICcuLi9yZWNvcmRpbmcnXHJcbmltcG9ydCB7VXBsb2FkSG9sZGVyfSBmcm9tICcuLi8uLi9uZXQvdXBsb2FkZXInO1xyXG5pbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIFJlbmRlcmVyMixcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1Nlc3Npb25TZXJ2aWNlfSBmcm9tIFwiLi9zZXNzaW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtTdGF0ZSBhcyBTdGFydFN0b3BTaWduYWxTdGF0ZX0gZnJvbSBcIi4uL3N0YXJ0c3RvcHNpZ25hbC9zdGFydHN0b3BzaWduYWxcIjtcclxuaW1wb3J0IHtNYXREaWFsb2d9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHtTcGVlY2hSZWNvcmRlclVwbG9hZGVyfSBmcm9tIFwiLi4vc3BydXBsb2FkZXJcIjtcclxuaW1wb3J0IHtTUEVFQ0hSRUNPUkRFUl9DT05GSUcsIFNwZWVjaFJlY29yZGVyQ29uZmlnfSBmcm9tIFwiLi4vLi4vc3ByLmNvbmZpZ1wiO1xyXG5pbXBvcnQge1Byb21wdGluZ30gZnJvbSBcIi4vcHJvbXB0aW5nXCI7XHJcbmltcG9ydCB7U2Vzc2lvbkZpbmlzaGVkRGlhbG9nfSBmcm9tIFwiLi9zZXNzaW9uX2ZpbmlzaGVkX2RpYWxvZ1wiO1xyXG5pbXBvcnQge01lc3NhZ2VEaWFsb2d9IGZyb20gXCIuLi8uLi91aS9tZXNzYWdlX2RpYWxvZ1wiO1xyXG5pbXBvcnQge1JlY29yZGluZ1NlcnZpY2V9IGZyb20gXCIuLi9yZWNvcmRpbmdzL3JlY29yZGluZ3Muc2VydmljZVwiO1xyXG5pbXBvcnQge0F1ZGlvQ29udGV4dFByb3ZpZGVyfSBmcm9tIFwiLi4vLi4vYXVkaW8vY29udGV4dFwiO1xyXG5pbXBvcnQge0F1ZGlvQ2xpcH0gZnJvbSBcIi4uLy4uL2F1ZGlvL3BlcnNpc3RvclwiO1xyXG5pbXBvcnQge0l0ZW19IGZyb20gXCIuL2l0ZW1cIjtcclxuaW1wb3J0IHtMZXZlbEJhcn0gZnJvbSBcIi4uLy4uL2F1ZGlvL3VpL2xpdmVsZXZlbFwiO1xyXG5pbXBvcnQge1xyXG4gIEJhc2ljUmVjb3JkZXIsXHJcbiAgQ2h1bmtBdWRpb0J1ZmZlclJlY2VpdmVyLFxyXG4gIE1BWF9SRUNPUkRJTkdfVElNRV9NUyxcclxuICBSRUNGSUxFX0FQSV9DVFhcclxufSBmcm9tIFwiLi9iYXNpY3JlY29yZGVyXCI7XHJcbmltcG9ydCB7QXJyYXlBdWRpb0J1ZmZlcn0gZnJvbSBcIi4uLy4uL2F1ZGlvL2FycmF5X2F1ZGlvX2J1ZmZlclwiO1xyXG5pbXBvcnQge0F1ZGlvQnVmZmVyU291cmNlLCBBdWRpb0RhdGFIb2xkZXIsIEF1ZGlvU291cmNlfSBmcm9tIFwiLi4vLi4vYXVkaW8vYXVkaW9fZGF0YV9ob2xkZXJcIjtcclxuaW1wb3J0IHtTcHJJdGVtc0NhY2hlfSBmcm9tIFwiLi9yZWNvcmRpbmdfZmlsZV9jYWNoZVwiO1xyXG5pbXBvcnQge1N0YXRlIGFzIExpdmVMZXZlbFN0YXRlfSBmcm9tIFwiLi4vLi4vYXVkaW8vdWkvbGl2ZWxldmVsXCJcclxuaW1wb3J0IHtJbmRleGVkRGJBdWRpb0J1ZmZlciwgUGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldH0gZnJvbSBcIi4uLy4uL2F1ZGlvL2luZGRiX2F1ZGlvX2J1ZmZlclwiO1xyXG5pbXBvcnQge0F1ZGlvU3RvcmFnZVR5cGV9IGZyb20gXCIuLi9wcm9qZWN0L3Byb2plY3RcIjtcclxuaW1wb3J0IHtOZXRBdWRpb0J1ZmZlcn0gZnJvbSBcIi4uLy4uL2F1ZGlvL25ldF9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtCcmVha3BvaW50T2JzZXJ2ZXJ9IGZyb20gXCJAYW5ndWxhci9jZGsvbGF5b3V0XCI7XHJcblxyXG5jb25zdCBERUZBVUxUX1BSRV9SRUNfREVMQVk9MTAwMDtcclxuY29uc3QgREVGQVVMVF9QT1NUX1JFQ19ERUxBWT01MDA7XHJcblxyXG5leHBvcnQgY29uc3QgZW51bSBTdGF0dXMge1xyXG4gIEJMT0NLRUQsIElETEUsIFNUQVJUSU5HLCBQUkVfUkVDT1JESU5HLCBSRUNPUkRJTkcsIFBPU1RfUkVDX1NUT1AsIFBPU1RfUkVDX1BBVVNFLCBTVE9QUElOR19TVE9QLCBTVE9QUElOR19QQVVTRSwgRVJST1JcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc3BycmVjb3JkaW5nc2Vzc2lvbicsXHJcbiAgcHJvdmlkZXJzOiBbU2Vzc2lvblNlcnZpY2VdLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8YXBwLXdhcm5pbmdiYXIgW3Nob3ddPVwiaXNUZXN0U2Vzc2lvbigpXCIgd2FybmluZ1RleHQ9XCJUZXN0IHJlY29yZGluZyBvbmx5IVwiPjwvYXBwLXdhcm5pbmdiYXI+XHJcbiAgICA8YXBwLXdhcm5pbmdiYXIgW3Nob3ddPVwiaXNEZWZhdWx0QXVkaW9UZXN0U2Vzc2lvbigpXCIgd2FybmluZ1RleHQ9XCJUaGlzIHRlc3QgdXNlcyBkZWZhdWx0IGF1ZGlvIGRldmljZSEgUmVndWxhciBzZXNzaW9ucyBtYXkgcmVxdWlyZSBhIHBhcnRpY3VsYXIgYXVkaW8gZGV2aWNlIChtaWNyb3Bob25lKSFcIj48L2FwcC13YXJuaW5nYmFyPlxyXG4gICAgICA8YXBwLXNwcnByb21wdGluZyBbcHJvamVjdE5hbWVdPVwicHJvamVjdE5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3RhcnRTdG9wU2lnbmFsU3RhdGVdPVwic3RhcnRTdG9wU2lnbmFsU3RhdGVcIiBbcHJvbXB0SXRlbV09XCJwcm9tcHRJdGVtXCIgW3Nob3dQcm9tcHRdPVwic2hvd1Byb21wdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJpdGVtcz8uaXRlbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdHJhbnNwb3J0QWN0aW9uc109XCJ0cmFuc3BvcnRBY3Rpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkSXRlbUlkeF09XCJwcm9tcHRJbmRleFwiIChvbkl0ZW1TZWxlY3QpPVwiaXRlbVNlbGVjdCgkZXZlbnQpXCIgKG9uTmV4dEl0ZW0pPVwibmV4dEl0ZW0oKVwiIChvblByZXZJdGVtKT1cInByZXZJdGVtKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXVkaW9TaWduYWxDb2xsYXBzZWRdPVwiYXVkaW9TaWduYWxDb2xsYXBzZWRcIiBbZGlzcGxheUF1ZGlvQ2xpcF09XCJkaXNwbGF5QXVkaW9DbGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYXlTdGFydEFjdGlvbl09XCJjb250cm9sQXVkaW9QbGF5ZXI/LnN0YXJ0QWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYXlTZWxlY3Rpb25BY3Rpb25dPVwiY29udHJvbEF1ZGlvUGxheWVyPy5zdGFydFNlbGVjdGlvbkFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uXT1cImNvbnRyb2xBdWRpb1BsYXllcj8uYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RvcEFjdGlvbl09XCJjb250cm9sQXVkaW9QbGF5ZXI/LnN0b3BBY3Rpb25cIj5cclxuXHJcbiAgICA8L2FwcC1zcHJwcm9tcHRpbmc+XHJcbiAgICA8bWF0LXByb2dyZXNzLWJhciBbdmFsdWVdPVwicHJvZ3Jlc3NQZXJjZW50VmFsdWUoKVwiICpuZ0lmPVwic2NyZWVuWHNcIiA+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxyXG5cclxuXHJcbiAgICA8ZGl2IFtjbGFzc109XCJ7YXVkaW9TdGF0dXNEaXNwbGF5OiFzY3JlZW5YcyxhdWRpb1N0YXR1c0Rpc3BsYXlYczpzY3JlZW5Yc31cIj5cclxuICAgICAgPGF1ZGlvLWxldmVsYmFyIHN0eWxlPVwiZmxleDoxIDAgMSVcIiBbc3RyZWFtaW5nTW9kZV09XCJpc1JlY29yZGluZygpIHx8IGtlZXBMaXZlTGV2ZWxcIiBbZGlzcGxheUxldmVsSW5mb3NdPVwiZGlzcGxheUF1ZGlvQ2xpcD8ubGV2ZWxJbmZvc1wiICBbc3RhdGVdPVwibGl2ZUxldmVsRGlzcGxheVN0YXRlXCI+PC9hdWRpby1sZXZlbGJhcj5cclxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjogcm93XCI+XHJcbiAgICAgICAgPHNwci1yZWNvcmRpbmdpdGVtY29udHJvbHMgc3R5bGU9XCJkaXNwbGF5OmZsZXg7ZmxleDoxMCAwIDFweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1ZGlvTG9hZGVkXT1cImF1ZGlvTG9hZGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUF1ZGlvRGV0YWlsc109XCJkaXNhYmxlQXVkaW9EZXRhaWxzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxheVN0YXJ0QWN0aW9uXT1cImNvbnRyb2xBdWRpb1BsYXllcj8uc3RhcnRBY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RvcEFjdGlvbl09XCJjb250cm9sQXVkaW9QbGF5ZXI/LnN0b3BBY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwZWFrRGJMdmxdPVwicGVha0xldmVsSW5EYlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FnY109XCJ0aGlzLmFjPy5hZ2NTdGF0dXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblNob3dSZWNvcmRpbmdEZXRhaWxzKT1cImF1ZGlvU2lnbmFsQ29sbGFwc2VkPSFhdWRpb1NpZ25hbENvbGxhcHNlZFwiPlxyXG4gICAgICAgIDwvc3ByLXJlY29yZGluZ2l0ZW1jb250cm9scz5cclxuXHJcbiAgICAgICAgPGFwcC11cGxvYWRzdGF0dXMgKm5nSWY9XCJzY3JlZW5YcyAmJiBlbmFibGVVcGxvYWRSZWNvcmRpbmdzXCIgY2xhc3M9XCJyaWNvbnRyb2xzIGRhcmtcIiAgc3R5bGU9XCJmbGV4OjAgMCAwXCIgW3ZhbHVlXT1cInVwbG9hZFByb2dyZXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cInVwbG9hZFN0YXR1c1wiIFthd2FpdE5ld1VwbG9hZF09XCJwcm9jZXNzaW5nUmVjb3JkaW5nXCI+PC9hcHAtdXBsb2Fkc3RhdHVzPlxyXG4gICAgICAgIDxhcHAtd2FrZWxvY2tpbmRpY2F0b3IgKm5nSWY9XCJzY3JlZW5Yc1wiIGNsYXNzPVwicmljb250cm9scyBkYXJrXCIgc3R5bGU9XCJmbGV4OjAgMCAwXCIgW3NjcmVlbkxvY2tlZF09XCJzY3JlZW5Mb2NrZWRcIj48L2FwcC13YWtlbG9ja2luZGljYXRvcj5cclxuICAgICAgICA8YXBwLXJlYWR5c3RhdGVpbmRpY2F0b3IgKm5nSWY9XCJzY3JlZW5Yc1wiIGNsYXNzPVwicmljb250cm9scyBkYXJrXCIgc3R5bGU9XCJmbGV4OjAgMCAwXCIgW3JlYWR5XT1cImRhdGFTYXZlZCAmJiAhaXNBY3RpdmUoKVwiPjwvYXBwLXJlYWR5c3RhdGVpbmRpY2F0b3I+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICNjb250cm9scGFuZWwgY2xhc3M9XCJjb250cm9scGFuZWxcIj5cclxuICAgICAgPGRpdiBzdHlsZT1cImZsZXg6MSAxIDMwJTtqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6IGNlbnRlcjsgYWxpZ24tY29udGVudDogY2VudGVyXCI+XHJcbiAgICAgICAgPGFwcC1zcHJzdGF0dXNkaXNwbGF5ICpuZ0lmPVwiIXNjcmVlblhzXCIgW3N0YXR1c01zZ109XCJzdGF0dXNNc2dcIiBbc3RhdHVzQWxlcnRUeXBlXT1cInN0YXR1c0FsZXJ0VHlwZVwiIFtzdGF0dXNXYWl0aW5nXT1cInN0YXR1c1dhaXRpbmdcIj48L2FwcC1zcHJzdGF0dXNkaXNwbGF5PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGFwcC1zcHJ0cmFuc3BvcnQgc3R5bGU9XCJkaXNwbGF5OmZsZXg7ZmxleDoxMCAwIDMwJTtqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjthbGlnbi1pdGVtczogY2VudGVyOyBhbGlnbi1jb250ZW50OiBjZW50ZXJcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIiBbYWN0aW9uc109XCJ0cmFuc3BvcnRBY3Rpb25zXCIgW25hdmlnYXRpb25FbmFibGVkXT1cIiFpdGVtcyB8fCBpdGVtcy5sZW5ndGgoKT4xXCI+PC9hcHAtc3BydHJhbnNwb3J0PlxyXG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXg6MSAxIDMwJTtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDthbGlnbi1pdGVtczogY2VudGVyOyBhbGlnbi1jb250ZW50OiBjZW50ZXJcIj5cclxuICAgICAgICA8YXBwLXVwbG9hZHN0YXR1cyAqbmdJZj1cIiFzY3JlZW5YcyAmJiBlbmFibGVVcGxvYWRSZWNvcmRpbmdzXCIgIGNsYXNzPVwicmljb250cm9sc1wiICBbdmFsdWVdPVwidXBsb2FkUHJvZ3Jlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGF0dXNdPVwidXBsb2FkU3RhdHVzXCIgW2F3YWl0TmV3VXBsb2FkXT1cInByb2Nlc3NpbmdSZWNvcmRpbmdcIj48L2FwcC11cGxvYWRzdGF0dXM+XHJcbiAgICAgICAgPGFwcC13YWtlbG9ja2luZGljYXRvciAqbmdJZj1cIiFzY3JlZW5Yc1wiIGNsYXNzPVwicmljb250cm9sc1wiIFtzY3JlZW5Mb2NrZWRdPVwic2NyZWVuTG9ja2VkXCI+PC9hcHAtd2FrZWxvY2tpbmRpY2F0b3I+XHJcbiAgICAgICAgPGFwcC1yZWFkeXN0YXRlaW5kaWNhdG9yICpuZ0lmPVwiIXNjcmVlblhzXCIgY2xhc3M9XCJyaWNvbnRyb2xzXCIgW3JlYWR5XT1cImRhdGFTYXZlZCAmJiAhaXNBY3RpdmUoKVwiPjwvYXBwLXJlYWR5c3RhdGVpbmRpY2F0b3I+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgOmhvc3Qge1xyXG4gICAgZmxleDogMjtcclxuICAgIGJhY2tncm91bmQ6IGxpZ2h0Z3JleTtcclxuICAgIGRpc3BsYXk6IGZsZXg7IC8qIFZlcnRpY2FsIGZsZXggY29udGFpbmVyOiBCb3R0b20gdHJhbnNwb3J0IHBhbmVsLCBhYm92ZSBwcm9tcHRpbmcgcGFuZWwgKi9cclxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG4gICAgbWluLWhlaWdodDogMHB4O1xyXG5cclxuICAgICAgLyogUHJldmVudHMgaG9yaXpvbnRhbCBzY3JvbGwgYmFyIG9uIHN3aXBlIHJpZ2h0ICovXHJcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfWAsYC5yaWNvbnRyb2xzIHtcclxuICAgICAgICBkaXNwbGF5OmZsZXg7XHJcbiAgICAgICAgcGFkZGluZzogNHB4O1xyXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDthbGlnbi1pdGVtczogY2VudGVyOyBhbGlnbi1jb250ZW50OiBjZW50ZXI7XHJcbiAgICB9YCxgLmRhcmsge1xyXG4gICAgYmFja2dyb3VuZDogZGFya2dyYXk7XHJcbiAgfWAsYC5jb250cm9scGFuZWwge1xyXG4gICAgZGlzcGxheTpmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBwYWRkaW5nOiAyMHB4O1xyXG4gICAgbWluLWhlaWdodDogbWluLWNvbnRlbnQ7IC8qIGltcG9ydGFudCAqL1xyXG4gIH1gLGAuYXVkaW9TdGF0dXNEaXNwbGF5e1xyXG4gICAgZGlzcGxheTpmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgIGhlaWdodDoxMDBweDtcclxuICAgIG1pbi1oZWlnaHQ6IDEwMHB4O1xyXG4gIH1gLGAuYXVkaW9TdGF0dXNEaXNwbGF5WHN7XHJcbiAgICBkaXNwbGF5OmZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgaGVpZ2h0OjEyNXB4O1xyXG4gICAgbWluLWhlaWdodDogMTI1cHg7XHJcbiAgfWBcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZXNzaW9uTWFuYWdlciBleHRlbmRzIEJhc2ljUmVjb3JkZXIgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LE9uRGVzdHJveSwgQXVkaW9DYXB0dXJlTGlzdGVuZXIsQ2h1bmtBdWRpb0J1ZmZlclJlY2VpdmVyIHtcclxuICBnZXQgcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCgpOiBQZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldDtcclxuICB9XHJcblxyXG4gIHNldCBwZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0KHZhbHVlOiBQZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0IHwgbnVsbCkge1xyXG4gICAgdGhpcy5fcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCA9IHZhbHVlO1xyXG4gICAgaWYodGhpcy5hYykge1xyXG4gICAgICB0aGlzLmFjLnBlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQgPSB0aGlzLnBlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBwcm9qZWN0TmFtZTpzdHJpbmd8dW5kZWZpbmVkO1xyXG4gIGVuYWJsZVVwbG9hZFJlY29yZGluZ3M6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGVuYWJsZURvd25sb2FkUmVjb3JkaW5nczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHN0YXR1czogU3RhdHVzID0gU3RhdHVzLkJMT0NLRUQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoUHJvbXB0aW5nLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcm9tcHRpbmchOiBQcm9tcHRpbmc7XHJcbiAgQFZpZXdDaGlsZChMZXZlbEJhciwgeyBzdGF0aWM6IHRydWUgfSkgbGl2ZUxldmVsRGlzcGxheSE6IExldmVsQmFyO1xyXG5cclxuICBASW5wdXQoKSBkYXRhU2F2ZWQ9dHJ1ZVxyXG5cclxuICBzdGFydFN0b3BTaWduYWxTdGF0ZSE6IFN0YXJ0U3RvcFNpZ25hbFN0YXRlO1xyXG5cclxuICBwcml2YXRlIHByZVJlY1RpbWVySWQ6IG51bWJlcnxudWxsPW51bGw7XHJcbiAgcHJpdmF0ZSBwcmVSZWNUaW1lclJ1bm5pbmc6IGJvb2xlYW58bnVsbD1udWxsO1xyXG4gIHByaXZhdGUgcG9zdERlbGF5Om51bWJlcj1ERUZBVUxUX1BPU1RfUkVDX0RFTEFZO1xyXG4gIHByaXZhdGUgcG9zdFJlY1RpbWVySWQ6IG51bWJlcnxudWxsPW51bGw7XHJcbiAgcHJpdmF0ZSBwb3N0UmVjVGltZXJSdW5uaW5nOiBib29sZWFufG51bGw9bnVsbDtcclxuICAvL3ByaXZhdGUgbWF4UmVjVGltZXJSdW5uaW5nOiBib29sZWFufG51bGw9bnVsbDtcclxuXHJcbiAgYXVkaW86IGFueTtcclxuICBfc2NyaXB0ITogU2NyaXB0O1xyXG4gIHByaXZhdGUgX3Byb21wdEluZGV4PTA7XHJcbiAgcHJpdmF0ZSBzZWN0aW9uITogU2VjdGlvbjtcclxuICBncm91cCE6IEdyb3VwO1xyXG4gIHByb21wdEl0ZW0hOlByb21wdEl0ZW07XHJcbiAgc2hvd1Byb21wdCE6IGJvb2xlYW47XHJcblxyXG4gIC8vIGluZGV4IG9mIGN1cnJlbnQgc2VjdGlvblxyXG4gIHNlY3RJZHghOiBudW1iZXI7XHJcbiAgLy8gaW5kZXggb2YgY3VycmVudCBncm91cCBpbiBzZWN0aW9uXHJcbiAgZ3JvdXBJZHhJblNlY3Rpb24hOiBudW1iZXI7XHJcbiAgLy8gaW5kZXggb2YgY3VycmVudCBwcm9tcHQgaXRlbSBpbiBncm91cFxyXG4gIHByb21wdEl0ZW1JZHhJbkdyb3VwITogbnVtYmVyO1xyXG5cclxuICBwcml2YXRlIGF1dG9yZWNvcmRpbmchOiBib29sZWFuO1xyXG5cclxuICBpdGVtczogU3BySXRlbXNDYWNoZXxudWxsPW51bGw7XHJcbiAgLy9zZWxlY3RlZEl0ZW1JZHg6IG51bWJlcjtcclxuICBwcml2YXRlIF9kaXNwbGF5UmVjRmlsZTogU3ByUmVjb3JkaW5nRmlsZSB8IG51bGw9bnVsbDtcclxuICBwcml2YXRlIGRpc3BsYXlSZWNGaWxlVmVyc2lvbiE6IG51bWJlcjtcclxuXHJcbiAgcHJvbXB0SXRlbUNvdW50ITogbnVtYmVyO1xyXG5cclxuICBzaG93U2Vzc2lvbkNvbXBsZXRlTWVzc2FnZT10cnVlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYnBvOkJyZWFrcG9pbnRPYnNlcnZlcixcclxuICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgICAgICAgICAgIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgICAgICAgICAgIHNlc3Npb25TZXJ2aWNlOlNlc3Npb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVjRmlsZVNlcnZpY2U6UmVjb3JkaW5nU2VydmljZSxcclxuICAgICAgICAgICAgICB1cGxvYWRlcjogU3BlZWNoUmVjb3JkZXJVcGxvYWRlcixcclxuICAgICAgICAgICAgICBASW5qZWN0KFNQRUVDSFJFQ09SREVSX0NPTkZJRykgY29uZmlnPzogU3BlZWNoUmVjb3JkZXJDb25maWcpIHtcclxuICAgIHN1cGVyKGJwbyxjaGFuZ2VEZXRlY3RvclJlZixkaWFsb2csc2Vzc2lvblNlcnZpY2UsdXBsb2FkZXIsY29uZmlnKTtcclxuICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLklETEU7XHJcbiAgICB0aGlzLmF1ZGlvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F1ZGlvJyk7XHJcbiAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuZW5hYmxlVXBsb2FkUmVjb3JkaW5ncyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuZW5hYmxlVXBsb2FkUmVjb3JkaW5ncyA9IHRoaXMuY29uZmlnLmVuYWJsZVVwbG9hZFJlY29yZGluZ3M7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuZW5hYmxlRG93bmxvYWRSZWNvcmRpbmdzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5lbmFibGVEb3dubG9hZFJlY29yZGluZ3MgPSB0aGlzLmNvbmZpZy5lbmFibGVEb3dubG9hZFJlY29yZGluZ3M7XHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5zdHJlYW1MZXZlbE1lYXN1cmUubGV2ZWxMaXN0ZW5lciA9IHRoaXMubGl2ZUxldmVsRGlzcGxheTtcclxuICAgIHRoaXMuc3RyZWFtTGV2ZWxNZWFzdXJlLnBlYWtMZXZlbExpc3RlbmVyPShwZWFrTHZsSW5EYik9PntcclxuICAgICAgdGhpcy5wZWFrTGV2ZWxJbkRiPXBlYWtMdmxJbkRiO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ29tIGRlc3Ryb3ksIGRpc2FibGUgd2FrZSBsb2NrLlwiKVxyXG4gICAgICB0aGlzLmRpc2FibGVXYWtlTG9ja0NvbmQoKTtcclxuICAgICAgIHRoaXMuZGVzdHJveWVkPXRydWU7XHJcbiAgICAgICAvLyBUT0RPIHN0b3AgY2FwdHVyZSAvcGxheWJhY2tcclxuICAgIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0KCkge1xyXG4gICAgdGhpcy5zZWN0SWR4ID0gMDtcclxuICAgIHRoaXMuZ3JvdXBJZHhJblNlY3Rpb24gPSAwO1xyXG4gICAgdGhpcy5wcm9tcHRJdGVtSWR4SW5Hcm91cCA9IDA7XHJcbiAgICB0aGlzLmF1dG9yZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgbGV0IGNvbnRleHQ6QXVkaW9Db250ZXh0fG51bGw9bnVsbDtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnRleHQgPSBBdWRpb0NvbnRleHRQcm92aWRlci5hdWRpb0NvbnRleHRJbnN0YW5jZSgpXHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuRVJST1I7XHJcbiAgICAgIGxldCBlcnJNc2cgPSAnVW5rbm93biBlcnJvcic7XHJcbiAgICAgIGlmKGVyciBpbnN0YW5jZW9mIEVycm9yKXtcclxuICAgICAgICBlcnJNc2c9ZXJyLm1lc3NhZ2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnRVJST1I6ICcgKyBlcnJNc2c7XHJcbiAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgIHRpdGxlOiAnRXJyb3InLFxyXG4gICAgICAgICAgbXNnOiBlcnJNc2csXHJcbiAgICAgICAgICBhZHZpY2U6ICdQbGVhc2UgdXNlIGEgc3VwcG9ydGVkIGJyb3dzZXIuJyxcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZihjb250ZXh0KSB7XHJcbiAgICAgIGNvbnNvbGUuaW5mbyhcIlN0YXRlIG9mIGF1ZGlvIGNvbnRleHQ6IFwiICsgY29udGV4dC5zdGF0ZSlcclxuICAgIH1lbHNle1xyXG4gICAgICBjb25zb2xlLmluZm8oXCJObyBhdWRpbyBjb250ZXh0IGF2YWlsYWJsZSFcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWNvbnRleHQgfHwgIW5hdmlnYXRvci5tZWRpYURldmljZXMpIHtcclxuICAgICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuRVJST1I7XHJcbiAgICAgIGxldCBlcnJNc2cgPSAnQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IE1lZGlhIHN0cmVhbXMhJztcclxuICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnRVJST1I6ICcgKyBlcnJNc2c7XHJcbiAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgIHRpdGxlOiAnRXJyb3InLFxyXG4gICAgICAgICAgbXNnOiBlcnJNc2csXHJcbiAgICAgICAgICBhZHZpY2U6ICdQbGVhc2UgdXNlIGEgc3VwcG9ydGVkIGJyb3dzZXIuJyxcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFjID0gbmV3IEF1ZGlvQ2FwdHVyZShjb250ZXh0KTtcclxuICAgICAgaWYgKHRoaXMuYWMpIHtcclxuICAgICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RhcnRBY3Rpb24ub25BY3Rpb24gPSAoKSA9PiB0aGlzLnN0YXJ0SXRlbSgpO1xyXG4gICAgICAgIHRoaXMuYWMubGlzdGVuZXIgPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLmNvbmZpZ3VyZVN0cmVhbUNhcHR1cmVTdHJlYW0oKTtcclxuXHJcbiAgICAgICAgLy8gRG9uJ3QgbGlzdCB0aGUgZGV2aWNlcyBoZXJlLiBJZiB3ZSBkbyBub3QgaGF2ZSBhdWRpbyBwZXJtaXNzaW9ucyB3ZSBvbmx5IGdldCBhbm9ueW1pemVkIGRldmljZXMgd2l0aG91dCBsYWJlbHMuXHJcbiAgICAgICAgLy90aGlzLmFjLmxpc3REZXZpY2VzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICBsZXQgZXJyTXNnID0gJ0Jyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBNZWRpYS9BdWRpbyBBUEkhJztcclxuICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdFUlJPUjogJyArIGVyck1zZztcclxuICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXHJcbiAgICAgICAgICAgIHRpdGxlOiAnRXJyb3InLFxyXG4gICAgICAgICAgICBtc2c6IGVyck1zZyxcclxuICAgICAgICAgICAgYWR2aWNlOiAnUGxlYXNlIHVzZSBhIHN1cHBvcnRlZCBicm93c2VyLicsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdG9wQWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5zdG9wSXRlbSgpO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5vbkFjdGlvbiA9ICgpID0+IHRoaXMuc3RvcEl0ZW0oKTtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5wYXVzZUl0ZW0oKTtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZEFjdGlvbi5vbkFjdGlvbiA9ICgpID0+IHRoaXMubmV4dEl0ZW0oKTtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZE5leHRBY3Rpb24ub25BY3Rpb24gPSAoKSA9PiB0aGlzLm5leHRVbnJlY29yZGVkSXRlbSgpO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuYndkQWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5wcmV2SXRlbSgpO1xyXG4gICAgICB0aGlzLnBsYXlTdGFydEFjdGlvbi5vbkFjdGlvbiA9ICgpID0+IHRoaXMuY29udHJvbEF1ZGlvUGxheWVyPy5zdGFydCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN0YXJ0U3RvcFNpZ25hbFN0YXRlID0gU3RhcnRTdG9wU2lnbmFsU3RhdGUuT0ZGO1xyXG5cclxufVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5cHJlc3MnLCBbJyRldmVudCddKVxyXG4gIG9uS2V5UHJlc3Moa2U6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmIChrZS5rZXkgPT0gJyAnKSB7XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5uZXh0QWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBvbktleURvd24oa2U6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmIChrZS5rZXkgPT0gJyAnKSB7XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdG9wQWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1cclxuICAgIGlmIChrZS5rZXkgPT0gJ3AnKSB7XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5wYXVzZUFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGtlLmtleSA9PSAnRXNjYXBlJykge1xyXG4gICAgICBpZighdGhpcy5hdWRpb1NpZ25hbENvbGxhcHNlZCl7XHJcbiAgICAgICAgdGhpcy5hdWRpb1NpZ25hbENvbGxhcHNlZD10cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdG9wQWN0aW9uLnBlcmZvcm0oKTtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoa2Uua2V5ID09ICdNZWRpYVBsYXlQYXVzZScpIHtcclxuICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGtlLmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5md2RBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGtlLmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmJ3ZEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVXYWtlTG9jayhkYXRhU2F2ZWQ6Ym9vbGVhbj10aGlzLmRhdGFTYXZlZCl7XHJcbiAgICAvL2NvbnNvbGUuZGVidWcoXCJVcGRhdGUgd2FrZSBsb2NrOiBkYXRhU2F2ZWQ6IFwiK2RhdGFTYXZlZCtcIiwgbm90IGFjdGl2ZTogXCIrISB0aGlzLmlzQWN0aXZlKCkpXHJcbiAgICBpZihkYXRhU2F2ZWQgJiYgISB0aGlzLmlzQWN0aXZlKCkpe1xyXG4gICAgICB0aGlzLmRpc2FibGVXYWtlTG9ja0NvbmQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb2dyZXNzUGVyY2VudFZhbHVlKCk6bnVtYmVyIHtcclxuICAgIGxldCB2PTEwMDtcclxuICAgIGlmKHRoaXMuaXRlbXMpIHtcclxuICAgICAgdj10aGlzLnByb21wdEluZGV4ICogMTAwIC8gKHRoaXMuaXRlbXMubGVuZ3RoKCkgLSAxKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH1cclxuICBpc1Rlc3RTZXNzaW9uKCk6Ym9vbGVhbiB7XHJcbiAgICByZXR1cm4gKCh0aGlzLl9zZXNzaW9uIT1udWxsKSAmJiAodGhpcy5fc2Vzc2lvbi50eXBlID09PSAnVEVTVCcgfHwgdGhpcy5fc2Vzc2lvbi50eXBlPT09J1RFU1RfREVGX0EnIHx8IHRoaXMuX3Nlc3Npb24udHlwZSA9PT0gJ1NJTlVTX1RFU1QnKSk7XHJcbiAgfVxyXG5cclxuICBpc0RlZmF1bHRBdWRpb1Rlc3RTZXNzaW9uKCk6Ym9vbGVhbiB7XHJcbiAgICByZXR1cm4gKCh0aGlzLl9zZXNzaW9uIT1udWxsKSAmJiAodGhpcy5fc2Vzc2lvbi50eXBlPT09J1RFU1RfREVGX0EnKSk7XHJcbiAgfVxyXG5cclxuICBpc0RlZmF1bHRBdWRpb1Rlc3RTZXNzaW9uT3ZlcndyaXRpbmdQcm9qZWN0UmVxdWlyZW1lbnRzKCk6Ym9vbGVhbiB7XHJcbiAgICByZXR1cm4gKCh0aGlzLl9zZXNzaW9uIT1udWxsKSAmJiAodGhpcy5fc2Vzc2lvbi50eXBlPT09J1RFU1RfREVGX0EnKSAmJiAodGhpcy5hdWRpb0RldmljZXMhPW51bGwpICYmIHRoaXMuYXVkaW9EZXZpY2VzLmxlbmd0aD4wKVxyXG4gIH1cclxuXHJcbiAgc2V0IGNvbnRyb2xBdWRpb1BsYXllcihjb250cm9sQXVkaW9QbGF5ZXI6IEF1ZGlvUGxheWVyfG51bGwpIHtcclxuICAgIHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllcj1jb250cm9sQXVkaW9QbGF5ZXI7XHJcbiAgICBpZiAodGhpcy5fY29udHJvbEF1ZGlvUGxheWVyKSB7XHJcbiAgICAgIHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5saXN0ZW5lciA9IHRoaXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgY29udHJvbEF1ZGlvUGxheWVyKCk6IEF1ZGlvUGxheWVyfG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllcjtcclxuICB9XHJcblxyXG4gIHNldCBzY3JpcHQoc2NyaXB0OiBhbnkpIHtcclxuICAgIHRoaXMuX3NjcmlwdCA9IHNjcmlwdDtcclxuICAgIHRoaXMubG9hZFNjcmlwdCgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKGU6IEF1ZGlvUGxheWVyRXZlbnQpIHtcclxuICAgIGlmIChlLnR5cGUgPT0gRXZlbnRUeXBlLlNUQVJURUQpIHtcclxuICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnVwZGF0ZVRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgIC8vdGhpcy5hdWRpb1NpZ25hbC5wbGF5RnJhbWVQb3NpdGlvbiA9IHRoaXMuYXAucGxheVBvc2l0aW9uRnJhbWVzO1xyXG4gICAgICB9LCA1MCk7XHJcbiAgICB9IGVsc2UgaWYgKGUudHlwZSA9PSBFdmVudFR5cGUuU1RPUFBFRCB8fCBlLnR5cGUgPT0gRXZlbnRUeXBlLkVOREVEKSB7XHJcbiAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMudXBkYXRlVGltZXJJZCk7XHJcbiAgICAgIC8vIHRoaXMuYXVkaW9TaWduYWwucGxheUZyYW1lUG9zaXRpb24gPSB0aGlzLmFwLnBsYXlQb3NpdGlvbkZyYW1lcztcclxuICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSAoISh0aGlzLmRpc3BsYXlSZWNGaWxlKSk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHByb21wdEluZGV4KCk6bnVtYmVye1xyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21wdEluZGV4O1xyXG4gIH1cclxuXHJcbiAgc2V0IHByb21wdEluZGV4KHByb21wdEluZGV4Om51bWJlcil7XHJcbiAgICBpZihwcm9tcHRJbmRleDwwIHx8IHByb21wdEluZGV4Pj10aGlzLnByb21wdEl0ZW1Db3VudCl7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlByb21wdCBpbmRleCBvdXQgb2YgcmFuZ2VcIilcclxuICAgIH1cclxuICAgIGxldCBpID0gMDtcclxuICAgIGxldCBzZWN0aW9ucz10aGlzLl9zY3JpcHQuc2VjdGlvbnM7XHJcbiAgICBsZXQgZm91bmQ9ZmFsc2U7XHJcbiAgICBmb3IgKGxldCBzaSA9IDA7IHNpIDwgc2VjdGlvbnMubGVuZ3RoICYmICFmb3VuZDsgc2krKykge1xyXG4gICAgICBsZXQgc2VjdGlvbiA9IHNlY3Rpb25zW3NpXTtcclxuICAgICAgbGV0IGdzID0gc2VjdGlvbi5fc2h1ZmZsZWRHcm91cHM7XHJcbiAgICAgIGZvciAobGV0IGdpID0gMDsgZ2kgPCBncy5sZW5ndGg7IGdpKyspIHtcclxuICAgICAgICBsZXQgcGlzPWdzW2dpXS5fc2h1ZmZsZWRQcm9tcHRJdGVtcztcclxuXHJcbiAgICAgICAgbGV0IHBpc1NpemUgPSBwaXMubGVuZ3RoO1xyXG4gICAgICAgIGlmIChwcm9tcHRJbmRleCA8IGkgKyBwaXNTaXplKSB7XHJcbiAgICAgICAgICB0aGlzLnNlY3RJZHggPSBzaTtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBJZHhJblNlY3Rpb249Z2k7XHJcbiAgICAgICAgICB0aGlzLnByb21wdEl0ZW1JZHhJbkdyb3VwID0gcHJvbXB0SW5kZXggLSBpO1xyXG4gICAgICAgICAgZm91bmQ9dHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpICs9IHBpc1NpemU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZihmb3VuZCl7XHJcbiAgICAgIHRoaXMuX3Byb21wdEluZGV4PXByb21wdEluZGV4O1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludGVybmFsIGVycm9yOiBQcm9tcHQgaW5kZXggbm90IGZvdW5kXCIpXHJcbiAgICB9XHJcbiAgICB0aGlzLmtlZXBMaXZlTGV2ZWw9ZmFsc2U7XHJcbiAgICB0aGlzLmFwcGx5SXRlbSgpO1xyXG4gIH1cclxuXHJcbiAgaXRlbVNlbGVjdChpdGVtSWR4OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gU3RhdHVzLklETEUpIHtcclxuICAgICAgdGhpcy5wcm9tcHRJbmRleD1pdGVtSWR4O1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJQcmVSZWNUaW1lcigpIHtcclxuICAgIGlmICh0aGlzLnByZVJlY1RpbWVyUnVubmluZykge1xyXG4gICAgICBpZiAodGhpcy5wcmVSZWNUaW1lcklkKSB7XHJcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnByZVJlY1RpbWVySWQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucHJlUmVjVGltZXJSdW5uaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyUG9zdFJlY1RpbWVyKCl7XHJcbiAgICBpZiAodGhpcy5wb3N0UmVjVGltZXJSdW5uaW5nKSB7XHJcbiAgICAgIGlmICh0aGlzLnBvc3RSZWNUaW1lcklkKSB7XHJcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnBvc3RSZWNUaW1lcklkKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBvc3RSZWNUaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJNYXhSZWNUaW1lcigpe1xyXG4gICAgaWYgKHRoaXMubWF4UmVjVGltZXJSdW5uaW5nKSB7XHJcbiAgICAgIGlmICh0aGlzLm1heFJlY1RpbWVySWQpIHtcclxuICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMubWF4UmVjVGltZXJJZCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tYXhSZWNUaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXJ0SXRlbSgpIHtcclxuICAgIHRoaXMuc3RhdHVzPVN0YXR1cy5TVEFSVElORztcclxuICAgIHN1cGVyLnN0YXJ0SXRlbSgpO1xyXG4gICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcclxuICAgICAgdGhpcy5zdGF0dXM9U3RhdHVzLklETEU7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZEFjdGlvbi5kaXNhYmxlZCA9IHRydWVcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5md2ROZXh0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZVxyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmJ3ZEFjdGlvbi5kaXNhYmxlZCA9IHRydWVcclxuICAgIHRoaXMudXBkYXRlRGlzcGxheVJlY0ZpbGUobnVsbCk7XHJcbiAgICB0aGlzLmRpc3BsYXlSZWNGaWxlVmVyc2lvbiA9IDA7XHJcbiAgICB0aGlzLmRpc3BsYXlBdWRpb0NsaXAgPSBudWxsO1xyXG4gICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5LnJlc2V0KHRydWUpO1xyXG4gICAgLy8gSGlkZSBsb2FkaW5nIGhpbnQgb24gbGl2ZWxldmVsIGRpc3BsYXlcclxuICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlPUxpdmVMZXZlbFN0YXRlLlJFQURZO1xyXG4gICAgdGhpcy5zaG93UmVjb3JkaW5nKCk7XHJcbiAgICBpZiAodGhpcy5zZWN0aW9uLm1vZGUgPT09ICdBVVRPUkVDT1JESU5HJykge1xyXG4gICAgICB0aGlzLmF1dG9yZWNvcmRpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RhcnRDYXB0dXJlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBsb2FkU2NyaXB0KCkge1xyXG4gICAgdGhpcy5wcm9tcHRJdGVtQ291bnQgPSAwO1xyXG5cclxuICAgIHRoaXMuaXRlbXMgPSBuZXcgU3BySXRlbXNDYWNoZSgpO1xyXG4gICAgbGV0IGxuID0gMDtcclxuXHJcbiAgICAvL1RPRE8gcmFuZG9taXplIG5vdCBzdXBwb3J0ZWRcclxuICAgIGZvciAobGV0IHNpID0gMDsgc2kgPCB0aGlzLl9zY3JpcHQuc2VjdGlvbnMubGVuZ3RoOyBzaSsrKSB7XHJcbiAgICAgIGxldCBzZWN0aW9uID0gdGhpcy5fc2NyaXB0LnNlY3Rpb25zW3NpXTtcclxuICAgICAgbGV0IGdzID0gc2VjdGlvbi5fc2h1ZmZsZWRHcm91cHM7XHJcbiAgICAgIGZvcihsZXQgZ2k9MDtnaTxncy5sZW5ndGg7Z2krKykge1xyXG5cclxuICAgICAgICAgIGxldCBwaXMgPSBnc1tnaV0uX3NodWZmbGVkUHJvbXB0SXRlbXM7XHJcblxyXG4gICAgICAgICAgbGV0IHBpc0xlbiA9IHBpcy5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnByb21wdEl0ZW1Db3VudCArPSBwaXNMZW47XHJcbiAgICAgICAgICBmb3IgKGxldCBwaVNlY3RJZHggPSAwOyBwaVNlY3RJZHggPCBwaXNMZW47IHBpU2VjdElkeCsrKSB7XHJcbiAgICAgICAgICAgIGxldCBwaSA9IHBpc1twaVNlY3RJZHhdO1xyXG4gICAgICAgICAgICBsZXQgcHJvbXB0QXNTdHIgPSBQcm9tcHRpdGVtVXRpbC50b1BsYWluVGV4dFN0cmluZyhwaSk7XHJcblxyXG4gICAgICAgICAgICBsZXQgaXQgPSBuZXcgSXRlbShwcm9tcHRBc1N0ciwgc2VjdGlvbi50cmFpbmluZywoIXBpLnR5cGUgfHwgcGkudHlwZT09PSdyZWNvcmRpbmcnKSk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuYWRkSXRlbShpdCk7XHJcbiAgICAgICAgICAgIGxuKys7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb21wdEluZGV4QnlJdGVtY29kZShpdGVtY29kZTpzdHJpbmcpOm51bWJlcnxudWxse1xyXG4gICAgbGV0IHBpeCA9IDA7XHJcblxyXG4gICAgZm9yIChsZXQgc2kgPSAwOyBzaSA8IHRoaXMuX3NjcmlwdC5zZWN0aW9ucy5sZW5ndGg7IHNpKyspIHtcclxuICAgICAgbGV0IHNlY3Rpb24gPSB0aGlzLl9zY3JpcHQuc2VjdGlvbnNbc2ldO1xyXG4gICAgICBsZXQgZ3MgPSBzZWN0aW9uLl9zaHVmZmxlZEdyb3VwcztcclxuICAgICAgZm9yKGxldCBnaT0wO2dpPGdzLmxlbmd0aDtnaSsrKSB7XHJcbiAgICAgICAgbGV0IHBpcz1nc1tnaV0uX3NodWZmbGVkUHJvbXB0SXRlbXM7XHJcbiAgICAgICAgbGV0IHBpc0xlbiA9IHBpcy5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgcGlTZWN0SWR4ID0gMDsgcGlTZWN0SWR4IDwgcGlzTGVuOyBwaVNlY3RJZHgrKykge1xyXG4gICAgICAgICAgbGV0IHBpID0gcGlzW3BpU2VjdElkeF07XHJcbiAgICAgICAgICBsZXQgaWM9cGkuaXRlbWNvZGU7XHJcbiAgICAgICAgICBpZihpYyA9PT0gaXRlbWNvZGUpe1xyXG4gICAgICAgICAgICByZXR1cm4gcGl4O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcGl4Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGNsZWFyUHJvbXB0KCkge1xyXG4gICAgLy90aGlzLnByb21wdGluZy5wcm9tcHRDb250YWluZXIucHJvbXB0ZXIucHJvbXB0VGV4dD0nJztcclxuICAgIC8vdGhpcy5tZWRpYWl0ZW0gPSBudWxsO1xyXG4gICAgdGhpcy5zaG93UHJvbXB0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKVxyXG4gIH1cclxuXHJcbiAgYXBwbHlQcm9tcHQoKSB7XHJcbiAgICAvL3RoaXMucHJvbXB0aW5nLnByb21wdENvbnRhaW5lci5wcm9tcHRlci5wcm9tcHRUZXh0PXRoaXMucHJvbXB0VW5pdC5tZWRpYWl0ZW1zWzBdLnRleHQ7XHJcbiAgICAvL3RoaXMucHJvbXB0VGV4dCA9IHRoaXMucHJvbXB0VW5pdC5tZWRpYWl0ZW1zWzBdLnRleHQ7XHJcbiAgICAvL3RoaXMubWVkaWFpdGVtPXRoaXMucHJvbXB0VW5pdC5tZWRpYWl0ZW1zWzBdO1xyXG4gICAgdGhpcy5zaG93UHJvbXB0ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgfVxyXG5cclxuICBkb3dubG9hZFJlY29yZGluZygpIHtcclxuICAgIGlmICh0aGlzLmRpc3BsYXlSZWNGaWxlKSB7XHJcbiAgICAgIGxldCBhZGg6IEF1ZGlvRGF0YUhvbGRlciB8IG51bGwgPSB0aGlzLmRpc3BsYXlSZWNGaWxlLmF1ZGlvRGF0YUhvbGRlcjtcclxuICAgICAgbGV0IGFzOiBBdWRpb1NvdXJjZXxudWxsPW51bGw7XHJcbiAgICAgIGlmKGFkaCl7XHJcbiAgICAgICAgYXM9YWRoLmF1ZGlvU291cmNlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHd3ID0gbmV3IFdhdldyaXRlcigpO1xyXG4gICAgICBpZihhcyBpbnN0YW5jZW9mIEF1ZGlvQnVmZmVyU291cmNlKSB7XHJcbiAgICAgICAgd3cud3JpdGVBc3luYyhhcy5hdWRpb0J1ZmZlciwgKHdhdkZpbGUpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbd2F2RmlsZV0sIHt0eXBlOiAnYXVkaW8vd2F2J30pO1xyXG4gICAgICAgICAgY29uc3QgcmZVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGRhdGFEbmxMbmsgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICAgIC8vZGF0YURubExuay5uYW1lID0gJ1JlY29yZGluZyc7XHJcbiAgICAgICAgICBkYXRhRG5sTG5rLmhyZWYgPSByZlVybDtcclxuXHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmJvZHksIGRhdGFEbmxMbmspO1xyXG5cclxuICAgICAgICAgIC8vIGRvd25sb2FkIHByb3BlcnR5IG5vdCB5ZXQgaW4gVFMgZGVmXHJcbiAgICAgICAgICBpZiAodGhpcy5kaXNwbGF5UmVjRmlsZSkge1xyXG4gICAgICAgICAgICBsZXQgZm4gPSB0aGlzLmRpc3BsYXlSZWNGaWxlLmZpbGVuYW1lU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGZuICs9ICdfJyArIHRoaXMuZGlzcGxheVJlY0ZpbGVWZXJzaW9uO1xyXG4gICAgICAgICAgICBmbiArPSAnLndhdic7XHJcbiAgICAgICAgICAgIGRhdGFEbmxMbmsuZG93bmxvYWQgPSBmbjtcclxuICAgICAgICAgICAgZGF0YURubExuay5jbGljaygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChkb2N1bWVudC5ib2R5LCBkYXRhRG5sTG5rKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0IGRpc3BsYXlSZWNGaWxlKGRpc3BsYXlSZWNGaWxlOiBTcHJSZWNvcmRpbmdGaWxlIHwgbnVsbCkge1xyXG4gICAgdGhpcy5fZGlzcGxheVJlY0ZpbGUgPSBkaXNwbGF5UmVjRmlsZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB1cGRhdGVEaXNwbGF5UmVjRmlsZShkaXNwbGF5UmVjRmlsZTogU3ByUmVjb3JkaW5nRmlsZSB8IG51bGwsZmV0Y2hBbmRBcHBseVJlY29yZGluZ0ZpbGU6Ym9vbGVhbj10cnVlKSB7XHJcbiAgICB0aGlzLmRpc3BsYXlSZWNGaWxlPWRpc3BsYXlSZWNGaWxlO1xyXG4gICAgaWYgKHRoaXMuX2Rpc3BsYXlSZWNGaWxlKSB7XHJcbiAgICAgIGlmKHRoaXMuaXRlbXMpIHtcclxuICAgICAgICB0aGlzLml0ZW1zLmN1cnJlbnRSZWNvcmRpbmdGaWxlID0gdGhpcy5fZGlzcGxheVJlY0ZpbGU7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGFkaDogQXVkaW9EYXRhSG9sZGVyfCBudWxsID0gdGhpcy5fZGlzcGxheVJlY0ZpbGUuYXVkaW9EYXRhSG9sZGVyO1xyXG4gICAgICBpZihhZGgpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlBdWRpb0NsaXAgPSBuZXcgQXVkaW9DbGlwKGFkaCk7XHJcbiAgICAgICAgaWYodGhpcy5fY29udHJvbEF1ZGlvUGxheWVyKSB7XHJcbiAgICAgICAgICB0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIuYXVkaW9DbGlwID0gdGhpcy5kaXNwbGF5QXVkaW9DbGlwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICAgICAgfWVsc2Uge1xyXG4gICAgICAgIC8vIGNsZWFyIGZvciBub3cgLi4uXHJcbiAgICAgICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwID0gbnVsbDtcclxuICAgICAgICBpZih0aGlzLmNvbnRyb2xBdWRpb1BsYXllcikge1xyXG4gICAgICAgICAgdGhpcy5jb250cm9sQXVkaW9QbGF5ZXIuYXVkaW9DbGlwID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoZmV0Y2hBbmRBcHBseVJlY29yZGluZ0ZpbGUpIHtcclxuICAgICAgICAgIGlmICh0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIgJiYgdGhpcy5fc2Vzc2lvbikge1xyXG4gICAgICAgICAgICAvLy4uLiBhbmQgdHJ5IHRvIGZldGNoIGZyb20gc2VydmVyXHJcbiAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuTE9BRElORztcclxuICAgICAgICAgICAgY29uc3QgcmYgPSB0aGlzLl9kaXNwbGF5UmVjRmlsZTtcclxuXHJcbiAgICAgICAgICAgIGxldCBhdWRpb0Rvd25sb2FkVHlwZSA9IHRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGU7XHJcbiAgICAgICAgICAgIGlmIChBdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkVfQVVUT19ORVRfQ0hVTktFRCA9PT0gdGhpcy5fY2xpZW50QXVkaW9TdG9yYWdlVHlwZSB8fCBBdWRpb1N0b3JhZ2VUeXBlLk1FTV9DSFVOS0VEX0FVVE9fTkVUX0NIVU5LRUQgPT09IHRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGUpIHtcclxuICAgICAgICAgICAgICAvLyBEZWZhdWx0IGlzIG5ldHdvcmsgbW9kZVxyXG4gICAgICAgICAgICAgIGF1ZGlvRG93bmxvYWRUeXBlID0gQXVkaW9TdG9yYWdlVHlwZS5ORVRfQ0hVTktFRDtcclxuICAgICAgICAgICAgICBpZiAocmYuY2hhbm5lbHMgJiYgcmYuZnJhbWVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzYW1wbGVzID0gcmYuY2hhbm5lbHMgKiByZi5mcmFtZXM7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2FtcGxlcyA8PSB0aGlzLl9tYXhBdXRvTmV0TWVtU3RvcmVTYW1wbGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIEJ1dCBpZiBhdWRpbyBmaWxlIGlzIHNtYWxsLCBsb2FkIGluIGNvbnRpbnVvdXMgcmVzcC4gY2h1bmtlZCBtb2RlXHJcbiAgICAgICAgICAgICAgICAgIGlmIChBdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkVfQVVUT19ORVRfQ0hVTktFRCA9PT0gdGhpcy5fY2xpZW50QXVkaW9TdG9yYWdlVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvRG93bmxvYWRUeXBlID0gQXVkaW9TdG9yYWdlVHlwZS5NRU1fRU5USVJFO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEF1ZGlvU3RvcmFnZVR5cGUuTUVNX0NIVU5LRURfQVVUT19ORVRfQ0hVTktFRCA9PT0gdGhpcy5fY2xpZW50QXVkaW9TdG9yYWdlVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvRG93bmxvYWRUeXBlID0gQXVkaW9TdG9yYWdlVHlwZS5NRU1fQ0hVTktFRDtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwiQXVkaW8gZG93bmxvYWQgdHlwZTogXCIgKyBhdWRpb0Rvd25sb2FkVHlwZSk7XHJcbiAgICAgICAgICAgIGlmIChBdWRpb1N0b3JhZ2VUeXBlLkRCX0NIVU5LRUQgPT09IHRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGUpIHtcclxuICAgICAgICAgICAgICAvLyBGZXRjaCBjaHVua2VkIGluZGV4ZWQgZGIgYXVkaW8gYnVmZmVyXHJcbiAgICAgICAgICAgICAgbGV0IG5leHRJYWI6IEluZGV4ZWREYkF1ZGlvQnVmZmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLl9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignRXJyb3I6IFBlcnNpc3RlbnQgc3RvcmFnZSB0YXJnZXQgbm90IHNldC4nKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiRmV0Y2ggYXVkaW8gYW5kIHN0b3JlIHRvIGluZGV4ZWQgZGIuLi5cIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1ZGlvRmV0Y2hTdWJzY3JpcHRpb24gPSB0aGlzLnJlY0ZpbGVTZXJ2aWNlLmZldGNoU3ByUmVjb3JkaW5nRmlsZUluZERiQXVkaW9CdWZmZXIodGhpcy5fY29udHJvbEF1ZGlvUGxheWVyLmNvbnRleHQsIHRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQsIHRoaXMuX3Nlc3Npb24ucHJvamVjdCwgcmYpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgIG5leHQ6IChpYWIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTZXNzaW9ubWFuYWdlcjogUmVjZWl2ZWQgaW5kZGIgYXVkaW8gYnVmZmVyOiBcIitpYWIpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHRJYWIgPSBpYWI7XHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmFiRGggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0SWFiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocmYgJiYgdGhpcy5pdGVtcykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmFiRGggPSBuZXcgQXVkaW9EYXRhSG9sZGVyKG5leHRJYWIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnNldFNwclJlY0ZpbGVBdWRpb0RhdGEocmYsIGZhYkRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIGFjdHVhbGx5IGJlIGhhbmRsZWQgYnkgdGhlIGVycm9yIHJlc29sdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdSZWNvcmRpbmcgZmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkLidcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmFiRGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCBjb3VsZCBoYXZlIGJlZW4gY2hhbmdlZCBtZWFud2hpbGUsIGJ1dCB0aGUgcmVjb3JkZXIgdW5zdWJjcmliZXMgYmVmb3JlIGNoYW5naW5nIHRoZSBpdGVtLCB0aGVyZWZvcmUgdGhlcmUgc2hvdWxkIGJlIG5vIHJpc2sgdG8gc2V0IHRvIHdyb25nIGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCA9IG5ldyBBdWRpb0NsaXAoZmFiRGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5hdWRpb0NsaXAgPSB0aGlzLmRpc3BsYXlBdWRpb0NsaXBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93UmVjb3JkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb3VsZCBub3QgbG9hZCByZWNvcmRpbmcgZmlsZSBmcm9tIHNlcnZlcjogXCIgKyBlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGxvYWRlZDogJyArIGVycjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChBdWRpb1N0b3JhZ2VUeXBlLk5FVF9DSFVOS0VEID09PSBhdWRpb0Rvd25sb2FkVHlwZSkge1xyXG4gICAgICAgICAgICAgIC8vIEZldGNoIGNodW5rZWQgYXVkaW8gYnVmZmVyIGZyb20gbmV0d29ya1xyXG4gICAgICAgICAgICAgIGxldCBuZXh0TmV0QWI6IE5ldEF1ZGlvQnVmZmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkZldGNoIGNodW5rZWQgYXVkaW8gZnJvbSBuZXR3b3JrXCIpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYXVkaW9GZXRjaFN1YnNjcmlwdGlvbiA9IHRoaXMucmVjRmlsZVNlcnZpY2UuZmV0Y2hTcHJSZWNvcmRpbmdGaWxlTmV0QXVkaW9CdWZmZXIodGhpcy5fY29udHJvbEF1ZGlvUGxheWVyLmNvbnRleHQsIHRoaXMuX3Nlc3Npb24ucHJvamVjdCwgcmYpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAobmV0QWIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU2Vzc2lvbm1hbmFnZXI6IFJlY2VpdmVkIG5ldCBhdWRpbyBidWZmZXI6IFwiK25ldEFiKTtcclxuICAgICAgICAgICAgICAgICAgbmV4dE5ldEFiID0gbmV0QWI7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuICAgICAgICAgICAgICAgICAgbGV0IGZhYkRoID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgaWYgKG5leHROZXRBYikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZiAmJiB0aGlzLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmYWJEaCA9IG5ldyBBdWRpb0RhdGFIb2xkZXIobmV4dE5ldEFiKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuc2V0U3ByUmVjRmlsZUF1ZGlvRGF0YShyZiwgZmFiRGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBTaG91bGQgYWN0dWFsbHkgYmUgaGFuZGxlZCBieSB0aGUgZXJyb3IgcmVzb2x2ZXJcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdSZWNvcmRpbmcgZmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkLidcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcidcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoZmFiRGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmRpc3BsYXlBdWRpb0NsaXAgY291bGQgaGF2ZSBiZWVuIGNoYW5nZWQgbWVhbndoaWxlLCBidXQgdGhlIHJlY29yZGVyIHVuc3ViY3JpYmVzIGJlZm9yZSBjaGFuZ2luZyB0aGUgaXRlbSwgdGhlcmVmb3JlIHRoZXJlIHNob3VsZCBiZSBubyByaXNrIHRvIHNldCB0byB3cm9uZyBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwic2V0IGRpc3BsYXlSZWNGaWxlKCk6IGZldGNoIG5ldCBhYiBjb21wbGV0ZSwgc2V0IGRpc3BsYXlBdWRpb0NsaXAuXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwID0gbmV3IEF1ZGlvQ2xpcChmYWJEaCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYodGhpcy5fY29udHJvbEF1ZGlvUGxheWVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udHJvbEF1ZGlvUGxheWVyLmF1ZGlvQ2xpcCA9IHRoaXMuZGlzcGxheUF1ZGlvQ2xpcDtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBsb2FkIHJlY29yZGluZyBmaWxlIGZyb20gc2VydmVyOiBcIiArIGVycik7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQ6ICcgKyBlcnI7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKEF1ZGlvU3RvcmFnZVR5cGUuTUVNX0NIVU5LRUQgPT09IGF1ZGlvRG93bmxvYWRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgLy8gRmV0Y2ggY2h1bmtlZCBhcnJheSBhdWRpbyBidWZmZXJcclxuICAgICAgICAgICAgICBsZXQgbmV4dEFhYjogQXJyYXlBdWRpb0J1ZmZlciB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkZldGNoIGF1ZGlvIGFuZCBzdG9yZSB0byAoY2h1bmtlZCkgYXJyYXkgYnVmZmVyLi4uXCIpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYXVkaW9GZXRjaFN1YnNjcmlwdGlvbiA9IHRoaXMucmVjRmlsZVNlcnZpY2UuZmV0Y2hTcHJSZWNvcmRpbmdGaWxlQXJyYXlBdWRpb0J1ZmZlcih0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIuY29udGV4dCwgdGhpcy5fc2Vzc2lvbi5wcm9qZWN0LCByZikuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChhYWIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgbmV4dEFhYiA9IGFhYjtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXlTdGF0ZSA9IExpdmVMZXZlbFN0YXRlLlJFQURZO1xyXG4gICAgICAgICAgICAgICAgICBsZXQgZmFiRGggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICBpZiAobmV4dEFhYikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZiAmJiB0aGlzLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmYWJEaCA9IG5ldyBBdWRpb0RhdGFIb2xkZXIobmV4dEFhYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnNldFNwclJlY0ZpbGVBdWRpb0RhdGEocmYsIGZhYkRoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIGFjdHVhbGx5IGJlIGhhbmRsZWQgYnkgdGhlIGVycm9yIHJlc29sdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGxvYWRlZC4nXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKGZhYkRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5kaXNwbGF5QXVkaW9DbGlwIGNvdWxkIGhhdmUgYmVlbiBjaGFuZ2VkIG1lYW53aGlsZSwgYnV0IHRoZSByZWNvcmRlciB1bnN1YmNyaWJlcyBiZWZvcmUgY2hhbmdpbmcgdGhlIGl0ZW0sIHRoZXJlZm9yZSB0aGVyZSBzaG91bGQgYmUgbm8gcmlzayB0byBzZXQgdG8gd3JvbmcgaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCA9IG5ldyBBdWRpb0NsaXAoZmFiRGgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5hdWRpb0NsaXAgPSB0aGlzLmRpc3BsYXlBdWRpb0NsaXBcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBsb2FkIHJlY29yZGluZyBmaWxlIGZyb20gc2VydmVyOiBcIiArIGVycik7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQ6ICcgKyBlcnI7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gRmV0Y2ggcmVndWxhciBhdWRpbyBidWZmZXJcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJGZXRjaCBhdWRpbyBhbmQgc3RvcmUgdG8gYXVkaW8gYnVmZmVyLi4uXCIpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYXVkaW9GZXRjaFN1YnNjcmlwdGlvbiA9IHRoaXMucmVjRmlsZVNlcnZpY2UuZmV0Y2hTcHJSZWNvcmRpbmdGaWxlQXVkaW9CdWZmZXIodGhpcy5fY29udHJvbEF1ZGlvUGxheWVyLmNvbnRleHQsIHRoaXMuX3Nlc3Npb24ucHJvamVjdCwgcmYpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAoYWIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuICAgICAgICAgICAgICAgICAgbGV0IGZhYkRoID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgaWYgKGFiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJmICYmIHRoaXMuaXRlbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChTZXNzaW9uTWFuYWdlci5GT1JDRV9BUlJSQVlfQVVESU9fQlVGRkVSKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhYWIgPSBBcnJheUF1ZGlvQnVmZmVyLmZyb21BdWRpb0J1ZmZlcihhYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhYkRoID0gbmV3IEF1ZGlvRGF0YUhvbGRlcihhYWIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmFiRGggPSBuZXcgQXVkaW9EYXRhSG9sZGVyKG5ldyBBdWRpb0J1ZmZlclNvdXJjZShhYikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5zZXRTcHJSZWNGaWxlQXVkaW9EYXRhKHJmLCBmYWJEaCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNob3VsZCBhY3R1YWxseSBiZSBoYW5kbGVkIGJ5IHRoZSBlcnJvciByZXNvbHZlclxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQuJ1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJ1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmIChmYWJEaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCBjb3VsZCBoYXZlIGJlZW4gY2hhbmdlZCBtZWFud2hpbGUsIGJ1dCB0aGUgcmVjb3JkZXIgdW5zdWJjcmliZXMgYmVmb3JlIGNoYW5naW5nIHRoZSBpdGVtLCB0aGVyZWZvcmUgdGhlcmUgc2hvdWxkIGJlIG5vIHJpc2sgdG8gc2V0IHRvIHdyb25nIGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlBdWRpb0NsaXAgPSBuZXcgQXVkaW9DbGlwKGZhYkRoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZih0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIuYXVkaW9DbGlwID0gdGhpcy5kaXNwbGF5QXVkaW9DbGlwXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5zaG93UmVjb3JkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9LCBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBsb2FkIHJlY29yZGluZyBmaWxlIGZyb20gc2VydmVyOiBcIiArIGVycik7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQ6ICcgKyBlcnI7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGRlY29kZWQuIEF1ZGlvIGNvbnRleHQgdW5hdmFpbGFibGUuJ1xyXG4gICAgICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcidcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRpc3BsYXlBdWRpb0NsaXAgPSBudWxsO1xyXG4gICAgICBpZih0aGlzLmNvbnRyb2xBdWRpb1BsYXllcikge1xyXG4gICAgICAgIHRoaXMuY29udHJvbEF1ZGlvUGxheWVyLmF1ZGlvQ2xpcCA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBkaXNwbGF5UmVjRmlsZSgpOiBTcHJSZWNvcmRpbmdGaWxlIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheVJlY0ZpbGU7XHJcbiAgfVxyXG5cclxuICBpc1JlY29yZGluZ0l0ZW0oKTpib29sZWFue1xyXG4gICAgcmV0dXJuKHRoaXMucHJvbXB0SXRlbSE9bnVsbCAmJiB0aGlzLnByb21wdEl0ZW0udHlwZSE9PSdub25yZWNvcmRpbmcnKVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlU3RhcnRBY3Rpb25EaXNhYmxlU3RhdGUoKXtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5kaXNhYmxlZD0hKHRoaXMuYWMgICYmIHRoaXMuaXNSZWNvcmRpbmdJdGVtKCkpO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlJdGVtKHRlbXBvcmFyeT1mYWxzZSkge1xyXG5cclxuICAgIHRoaXMuc2VjdGlvbiA9IHRoaXMuX3NjcmlwdC5zZWN0aW9uc1t0aGlzLnNlY3RJZHhdXHJcbiAgICB0aGlzLmdyb3VwID0gdGhpcy5zZWN0aW9uLl9zaHVmZmxlZEdyb3Vwc1t0aGlzLmdyb3VwSWR4SW5TZWN0aW9uXTtcclxuICAgIHRoaXMucHJvbXB0SXRlbSA9IHRoaXMuZ3JvdXAuX3NodWZmbGVkUHJvbXB0SXRlbXNbdGhpcy5wcm9tcHRJdGVtSWR4SW5Hcm91cF07XHJcblxyXG4gICAgLy90aGlzLnNlbGVjdGVkSXRlbUlkeCA9IHRoaXMucHJvbXB0SW5kZXg7XHJcblxyXG4gICAgaWYodGhpcy5hdWRpb0ZldGNoU3Vic2NyaXB0aW9uKXtcclxuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiVW5zdWJzY3JpYmUgZnJvbSBhdWRpbyBmZXRjaC5cIik7XHJcbiAgICAgIHRoaXMuYXVkaW9GZXRjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0ZW1wb3JhcnkpIHtcclxuICAgICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwPW51bGw7XHJcbiAgICAgIHRoaXMuc2hvd1JlY29yZGluZygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGU9TGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcblxyXG4gICAgdGhpcy5jbGVhclByb21wdCgpO1xyXG5cclxuICAgIGNvbnN0IGlzTm9ucmVjb3JkaW5nPSh0aGlzLnByb21wdEl0ZW0udHlwZT09PSdub25yZWNvcmRpbmcnKTtcclxuXHJcbiAgICBpZiAoaXNOb25yZWNvcmRpbmcgfHwgIXRoaXMuc2VjdGlvbi5wcm9tcHRwaGFzZSB8fCB0aGlzLnNlY3Rpb24ucHJvbXB0cGhhc2UgPT09ICdJRExFJykge1xyXG4gICAgICB0aGlzLmFwcGx5UHJvbXB0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoaXNOb25yZWNvcmRpbmcpe1xyXG4gICAgICB0aGlzLnVwZGF0ZURpc3BsYXlSZWNGaWxlKG51bGwpO1xyXG4gICAgICB0aGlzLmRpc3BsYXlSZWNGaWxlVmVyc2lvbiA9IDA7XHJcbiAgICAgIHRoaXMuc3RhcnRTdG9wU2lnbmFsU3RhdGUgPSBTdGFydFN0b3BTaWduYWxTdGF0ZS5PRkY7XHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLml0ZW1zKSB7XHJcbiAgICAgICAgbGV0IGl0ID0gdGhpcy5pdGVtcy5nZXRJdGVtKHRoaXMucHJvbXB0SW5kZXgpO1xyXG4gICAgICAgIGlmICghaXQucmVjcykge1xyXG4gICAgICAgICAgaXQucmVjcyA9IG5ldyBBcnJheTxTcHJSZWNvcmRpbmdGaWxlPigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHJlY2VudFJlY0ZpbGU6IFNwclJlY29yZGluZ0ZpbGUgfCBudWxsID0gbnVsbDtcclxuICAgICAgICBsZXQgYXZhaWxSZWNmaWxlczogbnVtYmVyID0gaXQucmVjcy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGF2YWlsUmVjZmlsZXMgPiAwKSB7XHJcbiAgICAgICAgICBsZXQgcmZWZXJzOiBudW1iZXIgPSBhdmFpbFJlY2ZpbGVzIC0gMTtcclxuICAgICAgICAgIHJlY2VudFJlY0ZpbGUgPSBpdC5yZWNzW3JmVmVyc107XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlSZWNGaWxlKHJlY2VudFJlY0ZpbGUsIXRlbXBvcmFyeSk7XHJcbiAgICAgICAgICB0aGlzLmRpc3BsYXlSZWNGaWxlVmVyc2lvbiA9IHJmVmVycztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheVJlY0ZpbGUobnVsbCk7XHJcbiAgICAgICAgICB0aGlzLmRpc3BsYXlSZWNGaWxlVmVyc2lvbiA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmKCF0aGlzLnJlYWRvbmx5KSB7XHJcbiAgICAgICAgdGhpcy5zdGFydFN0b3BTaWduYWxTdGF0ZSA9IFN0YXJ0U3RvcFNpZ25hbFN0YXRlLklETEU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUuZGVidWcoXCJhcHBseUl0ZW0oKTogdGVtcG9yYXJ5OiBcIit0ZW1wb3JhcnkpO1xyXG4gICAgLy9pZiAoIXRlbXBvcmFyeSkge1xyXG4gICAgLy8gICBjb25zb2xlLmRlYnVnKFwiYXBwbHlJdGVtKCk6IENhbGwgc2hvd1JlY29yZGluZygpOiBkaXNwbGF5QXVkaW9DbGlwOiBcIit0aGlzLmRpc3BsYXlBdWRpb0NsaXApO1xyXG4gICAgICAvL3RoaXMuc2hvd1JlY29yZGluZygpO1xyXG4gICAgLy99XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXJ0QWN0aW9uRGlzYWJsZVN0YXRlKClcclxuICAgIHRoaXMudXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKVxyXG4gIH1cclxuXHJcblxyXG4gIHN0YXJ0KCkge1xyXG4gICAgc3VwZXIuc3RhcnQoKTtcclxuICAgIGlmKHRoaXMucHJvbXB0SXRlbUNvdW50PjApIHtcclxuICAgICAgdGhpcy5wcm9tcHRJbmRleCA9IDA7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVuYWJsZU5hdmlnYXRpb24oKVxyXG4gIH1cclxuXHJcbiAgaXNSZWNvcmRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHRoaXMuc3RhdHVzID09PSBTdGF0dXMuUFJFX1JFQ09SRElORyB8fCB0aGlzLnN0YXR1cyA9PT0gU3RhdHVzLlJFQ09SRElORyB8fCB0aGlzLnN0YXR1cyA9PT0gU3RhdHVzLlBPU1RfUkVDX1NUT1AgfHwgdGhpcy5zdGF0dXMgPT09IFN0YXR1cy5QT1NUX1JFQ19QQVVTRSB8fCB0aGlzLnN0YXR1cz09PVN0YXR1cy5TVE9QUElOR19TVE9QKTtcclxuICB9XHJcblxyXG4gIGlzQWN0aXZlKCk6IGJvb2xlYW57XHJcbiAgICByZXR1cm4gKCEodGhpcy5zdGF0dXMgPT09IFN0YXR1cy5CTE9DS0VEIHx8IHRoaXMuc3RhdHVzPT09IFN0YXR1cy5JRExFIHx8IHRoaXMuc3RhdHVzPT09U3RhdHVzLkVSUk9SKSB8fCB0aGlzLnByb2Nlc3NpbmdSZWNvcmRpbmcgfHwgdGhpcy5zZXNzaW9uU2VydmljZS51cGxvYWRDb3VudD4wKVxyXG4gIH1cclxuXHJcbiAgICBwcmV2SXRlbSgpIHtcclxuICAgICAgIGxldCBuZXdQcklkeD10aGlzLl9wcm9tcHRJbmRleDtcclxuICAgICAgIG5ld1BySWR4LS07XHJcbiAgICAgICBpZihuZXdQcklkeDwwKXtcclxuICAgICAgICAgbmV3UHJJZHg9dGhpcy5wcm9tcHRJdGVtQ291bnQtMTtcclxuICAgICAgIH1cclxuICAgICAgIHRoaXMucHJvbXB0SW5kZXg9bmV3UHJJZHg7XHJcbiAgICAgIC8vdGhpcy51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpXHJcbiAgICB9XHJcblxyXG5cclxuICBuZXh0SXRlbSgpIHtcclxuICAgIGxldCBuZXdQcklkeD10aGlzLl9wcm9tcHRJbmRleDtcclxuICAgIG5ld1BySWR4Kys7XHJcbiAgICBpZihuZXdQcklkeD49dGhpcy5wcm9tcHRJdGVtQ291bnQpe1xyXG4gICAgICBuZXdQcklkeD0wO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9tcHRJbmRleD1uZXdQcklkeDtcclxuICAgIC8vdGhpcy51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpe1xyXG4gICAgbGV0IGZ3ZE54dEFjdGlvbkRpc2FibGVkPXRydWU7XHJcbiAgICBpZih0aGlzLml0ZW1zKXtcclxuICAgICAgbGV0IGN1cnJSZWNzPXRoaXMuaXRlbXMuZ2V0SXRlbSh0aGlzLl9wcm9tcHRJbmRleCkucmVjcztcclxuICAgICAgZndkTnh0QWN0aW9uRGlzYWJsZWQ9ICEgKGN1cnJSZWNzIT1udWxsICYmIGN1cnJSZWNzLmxlbmd0aD4wKTtcclxuICAgIH1cclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5md2ROZXh0QWN0aW9uLmRpc2FibGVkID0gdGhpcy5uYXZpZ2F0aW9uRGlzYWJsZWQgfHwgZndkTnh0QWN0aW9uRGlzYWJsZWQ7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuZndkQWN0aW9uLmRpc2FibGVkID0gdGhpcy5uYXZpZ2F0aW9uRGlzYWJsZWQ7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuYndkQWN0aW9uLmRpc2FibGVkID0gdGhpcy5uYXZpZ2F0aW9uRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBuZXh0VW5yZWNvcmRlZEl0ZW0oKSB7XHJcbiAgICBsZXQgbmV3UHJJZHggPSB0aGlzLl9wcm9tcHRJbmRleDtcclxuICAgIG5ld1BySWR4Kys7XHJcbiAgICBpZiAobmV3UHJJZHggPj0gdGhpcy5wcm9tcHRJdGVtQ291bnQpIHtcclxuICAgICAgbmV3UHJJZHggPSAwO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5pdGVtcyE9bnVsbCkge1xyXG4gICAgICBsZXQgaXQ9dGhpcy5pdGVtcy5nZXRJdGVtKG5ld1BySWR4KTtcclxuICAgICAgd2hpbGUgKCghaXQucmVjb3JkaW5nIHx8IGl0Lml0ZW1Eb25lKCkpICYmIG5ld1BySWR4IDwgdGhpcy5wcm9tcHRJdGVtQ291bnQpIHtcclxuICAgICAgICBuZXdQcklkeCsrO1xyXG4gICAgICAgIGl0PXRoaXMuaXRlbXMuZ2V0SXRlbShuZXdQcklkeCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFpdC5pdGVtRG9uZSgpKSB7XHJcbiAgICAgICAgdGhpcy5wcm9tcHRJbmRleCA9IG5ld1BySWR4O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbmFibGVTdGFydFVzZXJHZXN0dXJlKCkge1xyXG4gICAgc3VwZXIuZW5hYmxlU3RhcnRVc2VyR2VzdHVyZSgpO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0YXJ0QWN0aW9uLmRpc2FibGVkPSEodGhpcy5hYyAmJiB0aGlzLmlzUmVjb3JkaW5nSXRlbSgpKTtcclxuICB9XHJcblxyXG4gIGVuYWJsZU5hdmlnYXRpb24oKXtcclxuICAgIHRoaXMubmF2aWdhdGlvbkRpc2FibGVkPWZhbHNlO1xyXG4gICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRlZCgpIHtcclxuICAgIGxldCBpYyA9IHRoaXMucHJvbXB0SXRlbS5pdGVtY29kZTtcclxuICAgIGxldCByZj1udWxsO1xyXG5cclxuICAgIGlmICh0aGlzLl9zZXNzaW9uICYmIGljKSB7XHJcbiAgICAgIGxldCBzZXNzSWQ6IHN0cmluZyB8IG51bWJlciA9IHRoaXMuX3Nlc3Npb24uc2Vzc2lvbklkO1xyXG4gICAgICBsZXQgY3BJZHggPSB0aGlzLnByb21wdEluZGV4O1xyXG4gICAgICBpZiAodGhpcy5pdGVtcykge1xyXG4gICAgICAgIGxldCBpdCA9IHRoaXMuaXRlbXMuZ2V0SXRlbShjcElkeCk7XHJcbiAgICAgICAgaWYgKCFpdC5yZWNzKSB7XHJcbiAgICAgICAgICBpdC5yZWNzID0gbmV3IEFycmF5PFNwclJlY29yZGluZ0ZpbGU+KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJmID0gbmV3IFNwclJlY29yZGluZ0ZpbGUoc2Vzc0lkLCBpYywgaXQucmVjcy5sZW5ndGgsbnVsbCk7XHJcbiAgICAgICAgcmYudXVpZD10aGlzLnJmVXVpZDtcclxuICAgICAgICAvL2l0LnJlY3MucHVzaChyZik7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5hZGRTcHJSZWNGaWxlKGl0LHJmKTtcclxuICAgICAgICB0aGlzLml0ZW1zLmN1cnJlbnRSZWNvcmRpbmdGaWxlPXJmO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yZWNvcmRpbmdGaWxlID0gcmY7XHJcbiAgICB0aGlzLnN0YXR1cyA9IFN0YXR1cy5QUkVfUkVDT1JESU5HO1xyXG4gICAgc3VwZXIuc3RhcnRlZCgpO1xyXG5cclxuICAgIHRoaXMuc3RhcnRTdG9wU2lnbmFsU3RhdGUgPSBTdGFydFN0b3BTaWduYWxTdGF0ZS5QUkVSRUNPUkRJTkc7XHJcbiAgICBpZih0aGlzLl9zZXNzaW9uKSB7XHJcbiAgICAgIGlmICh0aGlzLl9zZXNzaW9uLnN0YXR1cyA9PT0gXCJMT0FERURcIikge1xyXG4gICAgICAgIGxldCBib2R5OiBhbnkgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5zZWN0aW9uLnRyYWluaW5nKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uLnN0YXR1cyA9IFwiU1RBUlRFRF9UUkFJTklOR1wiXHJcbiAgICAgICAgICBib2R5LnN0YXR1cyA9IHRoaXMuX3Nlc3Npb24uc3RhdHVzO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9zZXNzaW9uLnN0YXJ0ZWRUcmFpbmluZ0RhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbi5zdGFydGVkVHJhaW5pbmdEYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgYm9keS5zdGFydGVkVHJhaW5pbmdEYXRlID0gdGhpcy5fc2Vzc2lvbi5zdGFydGVkVHJhaW5pbmdEYXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uLnN0YXR1cyA9IFwiU1RBUlRFRFwiXHJcbiAgICAgICAgICBib2R5LnN0YXR1cyA9IHRoaXMuX3Nlc3Npb24uc3RhdHVzO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9zZXNzaW9uLnN0YXJ0ZWREYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb24uc3RhcnRlZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICBib2R5LnN0YXJ0ZWREYXRlID0gdGhpcy5fc2Vzc2lvbi5zdGFydGVkRGF0ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5wYXRjaFNlc3Npb25PYnNlcnZlcih0aGlzLl9zZXNzaW9uLCBib2R5KS5zdWJzY3JpYmUoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zZWN0aW9uLnByb21wdHBoYXNlID09PSAnUFJFUkVDT1JESU5HJyB8fCB0aGlzLnNlY3Rpb24ucHJvbXB0cGhhc2UgPT09ICdQUkVSRUNPUkRJTkdPTkxZJykge1xyXG4gICAgICB0aGlzLmFwcGx5UHJvbXB0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdpbmZvJztcclxuICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZy4uLic7XHJcblxyXG4gICAgbGV0IHByZURlbGF5ID0gREVGQVVMVF9QUkVfUkVDX0RFTEFZO1xyXG4gICAgaWYgKHRoaXMucHJvbXB0SXRlbS5wcmVyZWNkZWxheSE9bnVsbCkge1xyXG4gICAgICBwcmVEZWxheSA9IHRoaXMucHJvbXB0SXRlbS5wcmVyZWNkZWxheTtcclxuICAgIH1lbHNlIGlmICh0aGlzLnByb21wdEl0ZW0ucHJlcmVjb3JkaW5nIT1udWxsKSB7XHJcbiAgICAgIHByZURlbGF5ID0gdGhpcy5wcm9tcHRJdGVtLnByZXJlY29yZGluZztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBvc3REZWxheT1ERUZBVUxUX1BPU1RfUkVDX0RFTEFZO1xyXG4gICAgaWYodGhpcy5wcm9tcHRJdGVtLnBvc3RyZWNkZWxheSE9bnVsbCl7XHJcbiAgICAgIHRoaXMucG9zdERlbGF5PXRoaXMucHJvbXB0SXRlbS5wb3N0cmVjZGVsYXk7XHJcbiAgICB9ZWxzZSBpZih0aGlzLnByb21wdEl0ZW0ucG9zdHJlY29yZGluZyE9bnVsbCl7XHJcbiAgICAgIHRoaXMucG9zdERlbGF5PXRoaXMucHJvbXB0SXRlbS5wb3N0cmVjb3JkaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBtYXhSZWNvcmRpbmdUaW1lTXMgPSBNQVhfUkVDT1JESU5HX1RJTUVfTVM7XHJcbiAgICBpZiAodGhpcy5wcm9tcHRJdGVtLnJlY2R1cmF0aW9uIT09bnVsbCAmJiB0aGlzLnByb21wdEl0ZW0ucmVjZHVyYXRpb24hPT11bmRlZmluZWQpIHtcclxuICAgICAgbWF4UmVjb3JkaW5nVGltZU1zID0gcHJlRGVsYXkrdGhpcy5wcm9tcHRJdGVtLnJlY2R1cmF0aW9uK3RoaXMucG9zdERlbGF5O1xyXG4gICAgfVxyXG4gICAgdGhpcy5tYXhSZWNUaW1lcklkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnN0b3BSZWNvcmRpbmdNYXhSZWMoKVxyXG4gICAgfSwgbWF4UmVjb3JkaW5nVGltZU1zKTtcclxuICAgIHRoaXMubWF4UmVjVGltZXJSdW5uaW5nID0gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIHRoaXMucHJlUmVjVGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgIHRoaXMucHJlUmVjVGltZXJSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLlJFQ09SRElORztcclxuICAgICAgdGhpcy5zdGFydFN0b3BTaWduYWxTdGF0ZSA9IFN0YXJ0U3RvcFNpZ25hbFN0YXRlLlJFQ09SRElORztcclxuICAgICAgaWYgKHRoaXMuc2VjdGlvbi5tb2RlID09PSAnQVVUT1JFQ09SRElORycpIHtcclxuICAgICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5wYXVzZUFjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdG9wQWN0aW9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc2VjdGlvbi5wcm9tcHRwaGFzZSA9PT0gJ1JFQ09SRElORycpIHtcclxuICAgICAgICB0aGlzLmFwcGx5UHJvbXB0KCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc2VjdGlvbi5wcm9tcHRwaGFzZSA9PT0gJ1BSRVJFQ09SRElOR09OTFknKXtcclxuICAgICAgICB0aGlzLmNsZWFyUHJvbXB0KCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9LCBwcmVEZWxheSk7XHJcbiAgICB0aGlzLnByZVJlY1RpbWVyUnVubmluZyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzdG9wSXRlbSgpIHtcclxuICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLlBPU1RfUkVDX1NUT1A7XHJcbiAgICB0aGlzLnN0YXJ0U3RvcFNpZ25hbFN0YXRlID0gU3RhcnRTdG9wU2lnbmFsU3RhdGUuUE9TVFJFQ09SRElORztcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdG9wQWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5uZXh0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuY2xlYXJQcmVSZWNUaW1lcigpO1xyXG4gICAgdGhpcy5wb3N0UmVjVGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5wb3N0UmVjVGltZXJSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLlNUT1BQSU5HX1NUT1A7XHJcbiAgICAgIHRoaXMuc3RvcFJlY29yZGluZygpO1xyXG4gICAgfSwgdGhpcy5wb3N0RGVsYXkpO1xyXG4gICAgdGhpcy5wb3N0UmVjVGltZXJSdW5uaW5nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHBhdXNlSXRlbSgpIHtcclxuICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLlBPU1RfUkVDX1BBVVNFO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhcnRTdG9wU2lnbmFsU3RhdGUgPSBTdGFydFN0b3BTaWduYWxTdGF0ZS5QT1NUUkVDT1JESU5HO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLm5leHRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuY2xlYXJQcmVSZWNUaW1lcigpO1xyXG4gICAgdGhpcy5wb3N0UmVjVGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5wb3N0UmVjVGltZXJSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLlNUT1BQSU5HX1BBVVNFO1xyXG4gICAgICB0aGlzLnN0b3BSZWNvcmRpbmcoKTtcclxuICAgIH0sIHRoaXMucG9zdERlbGF5KTtcclxuICAgIHRoaXMucG9zdFJlY1RpbWVyUnVubmluZyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzdG9wUmVjb3JkaW5nKCkge1xyXG4gICAgdGhpcy5jbGVhck1heFJlY1RpbWVyKCk7XHJcbiAgICBpZih0aGlzLmFjKSB7XHJcbiAgICAgIHRoaXMuYWMuc3RvcCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RvcFJlY29yZGluZ01heFJlYygpe1xyXG4gICAgdGhpcy5jbGVhclByZVJlY1RpbWVyKCk7XHJcbiAgICB0aGlzLmNsZWFyUG9zdFJlY1RpbWVyKCk7XHJcbiAgICB0aGlzLm1heFJlY1RpbWVyUnVubmluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuU1RPUFBJTkdfU1RPUDtcclxuICAgIGlmKHRoaXMuYWMpIHtcclxuICAgICAgdGhpcy5hYy5zdG9wKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRSZWNvcmRpbmdGaWxlQnlEZXNjcmlwdG9yKHJmZDpSZWNvcmRpbmdGaWxlRGVzY3JpcHRvckltcGwpe1xyXG4gICAgaWYocmZkLnJlY29yZGluZyAmJiByZmQucmVjb3JkaW5nLml0ZW1jb2RlKSB7XHJcbiAgICAgIGxldCBwcklkeCA9IHRoaXMucHJvbXB0SW5kZXhCeUl0ZW1jb2RlKHJmZC5yZWNvcmRpbmcuaXRlbWNvZGUpO1xyXG4gICAgICBpZiAodGhpcy5pdGVtcyE9bnVsbCAmJiBwcklkeCAhPT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBpdCA9IHRoaXMuaXRlbXMuZ2V0SXRlbShwcklkeCk7XHJcbiAgICAgICAgaWYgKGl0ICYmIHRoaXMuX3Nlc3Npb24pIHtcclxuICAgICAgICAgIC8vIGlmICghaXQucmVjcykge1xyXG4gICAgICAgICAgLy8gICBpdC5yZWNzID0gbmV3IEFycmF5PFNwclJlY29yZGluZ0ZpbGU+KCk7XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICBsZXQgcmYgPSBuZXcgU3ByUmVjb3JkaW5nRmlsZSh0aGlzLl9zZXNzaW9uLnNlc3Npb25JZCwgcmZkLnJlY29yZGluZy5pdGVtY29kZSwgcmZkLnZlcnNpb24sIG51bGwpO1xyXG4gICAgICAgICAgcmYuc2VydmVyUGVyc2lzdGVkPXRydWU7XHJcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJhZGRSZWNvcmRpbmdGaWxlQnlEZXNjcmlwdG9yKCk6IHNyOiBcIityZmQuc2FtcGxlcmF0ZStcIiwgZnJhbWVzOiBcIityZmQuZnJhbWVzKTtcclxuICAgICAgICAgIGlmKHJmZC5zYW1wbGVyYXRlICYmIHJmZC5mcmFtZXMpe1xyXG4gICAgICAgICAgICByZi5zYW1wbGVyYXRlPXJmZC5zYW1wbGVyYXRlO1xyXG4gICAgICAgICAgICByZi5mcmFtZXM9cmZkLmZyYW1lcztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKHJmZC5jaGFubmVscyl7XHJcbiAgICAgICAgICAgIHJmLmNoYW5uZWxzPXJmZC5jaGFubmVscztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuaXRlbXMuYWRkU3ByUmVjRmlsZShpdCxyZik7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJXQVJOOiBObyByZWNvcmRpbmcgaXRlbSB3aXRoIGNvZGU6IFxcXCJcIiArcmZkLnJlY29yZGluZy5pdGVtY29kZSsgXCJcXFwiIGZvdW5kLlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiV0FSTjogTm8gcmVjb3JkaW5nIGl0ZW0gd2l0aCBjb2RlOiBcXFwiXCIgK3JmZC5yZWNvcmRpbmcuaXRlbWNvZGUrIFwiXFxcIiBmb3VuZC5cIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGFkZFJlY29yZGluZ0ZpbGVCeVByb21wdEluZGV4KHByb21wdEluZGV4Om51bWJlciwgcmY6U3ByUmVjb3JkaW5nRmlsZSl7XHJcbiAgLy9cclxuICAvLyB9XHJcblxyXG5cclxuICBzdG9wcGVkKCkge1xyXG4gICAgdGhpcy5jbGVhclByZVJlY1RpbWVyKCk7XHJcbiAgICB0aGlzLmNsZWFyUG9zdFJlY1RpbWVyKCk7XHJcbiAgICB0aGlzLmNsZWFyTWF4UmVjVGltZXIoKTtcclxuICAgIHRoaXMudXBkYXRlU3RhcnRBY3Rpb25EaXNhYmxlU3RhdGUoKVxyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLm5leHRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkZWQuJztcclxuICAgIHRoaXMuc3RhcnRTdG9wU2lnbmFsU3RhdGUgPSBTdGFydFN0b3BTaWduYWxTdGF0ZS5JRExFO1xyXG5cclxuICAgICAgbGV0IGFkaDpBdWRpb0RhdGFIb2xkZXJ8bnVsbD1udWxsO1xyXG4gICAgICBsZXQgYXM6QXVkaW9Tb3VyY2V8bnVsbD1udWxsO1xyXG4gICAgIGxldCBhYjpBdWRpb0J1ZmZlcnxudWxsPW51bGw7XHJcbiAgICAgIGlmKHRoaXMuYWMpIHtcclxuICAgICAgICBpZiAoQXVkaW9TdG9yYWdlVHlwZS5ORVRfQ0hVTktFRCA9PT0gdGhpcy5hYy5hdWRpb1N0b3JhZ2VUeXBlKSB7XHJcbiAgICAgICAgICB0aGlzLnBsYXlTdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmtlZXBMaXZlTGV2ZWw9dHJ1ZTtcclxuICAgICAgICAgIGxldCBidXJsOnN0cmluZ3xudWxsPW51bGw7XHJcbiAgICAgICAgICBpZih0aGlzLl9zZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9kaXNwbGF5UmVjRmlsZSkge1xyXG4gICAgICAgICAgICAgIC8vIFRPRE8gaXMgdGhpcyBicmFuY2ggZXZlciBjYWxsZWQgP1xyXG4gICAgICAgICAgICAgIGxldCByZiA9IHRoaXMuX2Rpc3BsYXlSZWNGaWxlO1xyXG4gICAgICAgICAgICAgIHJmLmZyYW1lcyA9IHRoaXMuYWMuZnJhbWVzUmVjb3JkZWQ7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwic3RvcHBlZCgpOiBTZXQgZnJhbWVzOiBcIityZi5mcmFtZXMrXCIgb24gcmZJZDogXCIrdGhpcy5kaXNwbGF5UmVjRmlsZT8ucmVjb3JkaW5nRmlsZUlkKTtcclxuICAgICAgICAgICAgICBidXJsID0gdGhpcy5yZWNGaWxlU2VydmljZS5zcHJBdWRpb0ZpbGVVcmwodGhpcy5fc2Vzc2lvbj8ucHJvamVjdCwgcmYpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2Vzc2lvbj8ucHJvamVjdCAmJiB0aGlzLl9yZWNvcmRpbmdGaWxlICYmIHRoaXMuX3JlY29yZGluZ0ZpbGUgaW5zdGFuY2VvZiBTcHJSZWNvcmRpbmdGaWxlKSB7XHJcbiAgICAgICAgICAgICAgYnVybCA9IHRoaXMucmVjRmlsZVNlcnZpY2Uuc3ByQXVkaW9GaWxlVXJsQnlJdGVtY29kZSh0aGlzLnNlc3Npb24/LnByb2plY3QsIHRoaXMuc2Vzc2lvbj8uc2Vzc2lvbklkLCB0aGlzLl9yZWNvcmRpbmdGaWxlLml0ZW1Db2RlLCB0aGlzLl9yZWNvcmRpbmdGaWxlLnZlcnNpb24pO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IGNyZWF0ZSBuZXQgYXVkaW8gYnVmZmVyLlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYnVybCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJVVUlEID0gdGhpcy5hYy5yZWNVVUlEO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHNyID0gdGhpcy5hYy5jdXJyZW50U2FtcGxlUmF0ZTtcclxuICAgICAgICAgICAgICBjb25zdCBjaEZsPXNyKlJlY29yZGluZ1NlcnZpY2UuREVGQVVMVF9DSFVOS0VEX0RPV05MT0FEX1NFQ09ORFM7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwic3RvcHBlZCgpOiByZklEOiBcIit0aGlzLl9yZWNvcmRpbmdGaWxlPy5yZWNvcmRpbmdGaWxlSWQrXCIsIG5ldCBhYiB1cmw6IFwiICsgYnVybCtcIiwgZnJhbWVzOiBcIit0aGlzLmFjLmZyYW1lc1JlY29yZGVkK1wiLCBzYW1wbGUgcmF0ZTogXCIrc3IpO1xyXG4gICAgICAgICAgICAgIGxldCBuZXRBYiA9IG5ldyBOZXRBdWRpb0J1ZmZlcih0aGlzLmFjLmNvbnRleHQsIHRoaXMucmVjRmlsZVNlcnZpY2UsIGJ1cmwsIHRoaXMuYWMuY2hhbm5lbENvdW50LCBzciwgY2hGbCwgdGhpcy5hYy5mcmFtZXNSZWNvcmRlZCwgclVVSUQsIGNoRmwpO1xyXG4gICAgICAgICAgICAgIGFzPW5ldEFiO1xyXG4gICAgICAgICAgICAgIGlmKHRoaXMudXBsb2FkU2V0KXtcclxuICAgICAgICAgICAgICAgIC8vbGV0IHJwPW5ldyBSZWFkeVByb3ZpZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAvL25ldEFiLnJlYWR5UHJvdmlkZXI9cnA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFNldC5vbkRvbmU9KHVwbG9hZFNldCk9PntcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhcInVwbG9hZCBzZXQgb24gZG9uZTogQ2FsbCByZWFkeSBwcm92aWRlci5yZWFkeVwiKTtcclxuICAgICAgICAgICAgICAgICAgLy9ycC5yZWFkeSgpO1xyXG4gICAgICAgICAgICAgICAgICBuZXRBYi5yZWFkeSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNlIGlmIChBdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkVfQVVUT19ORVRfQ0hVTktFRCA9PT0gdGhpcy5hYy5hdWRpb1N0b3JhZ2VUeXBlIHx8IEF1ZGlvU3RvcmFnZVR5cGUuTUVNX0NIVU5LRURfQVVUT19ORVRfQ0hVTktFRCA9PT0gdGhpcy5hYy5hdWRpb1N0b3JhZ2VUeXBlKSB7XHJcbiAgICAgICAgICBpZiAoQXVkaW9TdG9yYWdlVHlwZS5NRU1fRU5USVJFX0FVVE9fTkVUX0NIVU5LRUQgPT09IHRoaXMuYWMuYXVkaW9TdG9yYWdlVHlwZSl7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjQWI9dGhpcy5hYy5hdWRpb0J1ZmZlcigpO1xyXG4gICAgICAgICAgICBpZihhY0FiKSB7XHJcbiAgICAgICAgICAgICAgYXMgPSBuZXcgQXVkaW9CdWZmZXJTb3VyY2UoYWNBYik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKEF1ZGlvU3RvcmFnZVR5cGUuTUVNX0NIVU5LRURfQVVUT19ORVRfQ0hVTktFRCA9PT0gdGhpcy5hYy5hdWRpb1N0b3JhZ2VUeXBlKXtcclxuICAgICAgICAgICAgYXMgPSB0aGlzLmFjLmF1ZGlvQnVmZmVyQXJyYXkoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKCFhcyl7XHJcbiAgICAgICAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5rZWVwTGl2ZUxldmVsPXRydWU7XHJcbiAgICAgICAgICAgIGxldCBidXJsOnN0cmluZ3xudWxsPW51bGw7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuX3Nlc3Npb24pIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5fZGlzcGxheVJlY0ZpbGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gaXMgdGhpcyBicmFuY2ggZXZlciBjYWxsZWQgP1xyXG4gICAgICAgICAgICAgICAgbGV0IHJmID0gdGhpcy5fZGlzcGxheVJlY0ZpbGU7XHJcbiAgICAgICAgICAgICAgICByZi5mcmFtZXMgPSB0aGlzLmFjLmZyYW1lc1JlY29yZGVkO1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwic3RvcHBlZCgpOiBTZXQgZnJhbWVzOiBcIityZi5mcmFtZXMrXCIgb24gcmZJZDogXCIrdGhpcy5kaXNwbGF5UmVjRmlsZT8ucmVjb3JkaW5nRmlsZUlkKTtcclxuICAgICAgICAgICAgICAgIGJ1cmwgPSB0aGlzLnJlY0ZpbGVTZXJ2aWNlLnNwckF1ZGlvRmlsZVVybCh0aGlzLl9zZXNzaW9uPy5wcm9qZWN0LCByZik7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlc3Npb24/LnByb2plY3QgJiYgdGhpcy5fcmVjb3JkaW5nRmlsZSAmJiB0aGlzLl9yZWNvcmRpbmdGaWxlIGluc3RhbmNlb2YgU3ByUmVjb3JkaW5nRmlsZSkge1xyXG4gICAgICAgICAgICAgICAgYnVybCA9IHRoaXMucmVjRmlsZVNlcnZpY2Uuc3ByQXVkaW9GaWxlVXJsQnlJdGVtY29kZSh0aGlzLnNlc3Npb24/LnByb2plY3QsIHRoaXMuc2Vzc2lvbj8uc2Vzc2lvbklkLCB0aGlzLl9yZWNvcmRpbmdGaWxlLml0ZW1Db2RlLCB0aGlzLl9yZWNvcmRpbmdGaWxlLnZlcnNpb24pO1xyXG4gICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBjcmVhdGUgbmV0IGF1ZGlvIGJ1ZmZlci5cIik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChidXJsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByVVVJRCA9IHRoaXMuYWMucmVjVVVJRDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNyID0gdGhpcy5hYy5jdXJyZW50U2FtcGxlUmF0ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoRmw9c3IqUmVjb3JkaW5nU2VydmljZS5ERUZBVUxUX0NIVU5LRURfRE9XTkxPQURfU0VDT05EUztcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcInN0b3BwZWQoKTogcmZJRDogXCIrdGhpcy5fcmVjb3JkaW5nRmlsZT8ucmVjb3JkaW5nRmlsZUlkK1wiLCBuZXQgYWIgdXJsOiBcIiArIGJ1cmwrXCIsIGZyYW1lczogXCIrdGhpcy5hYy5mcmFtZXNSZWNvcmRlZCtcIiwgc2FtcGxlIHJhdGU6IFwiK3NyKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ldEFiID0gbmV3IE5ldEF1ZGlvQnVmZmVyKHRoaXMuYWMuY29udGV4dCwgdGhpcy5yZWNGaWxlU2VydmljZSwgYnVybCwgdGhpcy5hYy5jaGFubmVsQ291bnQsIHNyLCBjaEZsLCB0aGlzLmFjLmZyYW1lc1JlY29yZGVkLCByVVVJRCwgY2hGbCk7XHJcbiAgICAgICAgICAgICAgICBhcyA9IG5ldEFiO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudXBsb2FkU2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkU2V0Lm9uRG9uZSA9ICh1cGxvYWRTZXQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwidXBsb2FkIHNldCBvbiBkb25lOiBDYWxsIHJlYWR5IHByb3ZpZGVyLnJlYWR5XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBuZXRBYi5yZWFkeSgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChBdWRpb1N0b3JhZ2VUeXBlLkRCX0NIVU5LRUQgPT09IHRoaXMuYWMuYXVkaW9TdG9yYWdlVHlwZSkge1xyXG4gICAgICAgICAgYXMgPSB0aGlzLmFjLmluZGRiQXVkaW9CdWZmZXJBcnJheSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoQXVkaW9TdG9yYWdlVHlwZS5NRU1fQ0hVTktFRCA9PT0gdGhpcy5hYy5hdWRpb1N0b3JhZ2VUeXBlKSB7XHJcbiAgICAgICAgICBhcyA9IHRoaXMuYWMuYXVkaW9CdWZmZXJBcnJheSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhYiA9IHRoaXMuYWMuYXVkaW9CdWZmZXIoKTtcclxuICAgICAgICAgIGlmKGFiKSB7XHJcbiAgICAgICAgICAgIGFzID0gbmV3IEF1ZGlvQnVmZmVyU291cmNlKGFiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFzKSB7XHJcbiAgICAgICAgICBhZGggPSBuZXcgQXVkaW9EYXRhSG9sZGVyKGFzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAvLyBVc2UgYW4gb3duIHJlZmVyZW5jZSBzaW5jZSB0aGUgd3JpdGluZyBvZiB0aGUgd2F2ZSBmaWxlIGlzIGFzeW5jaHJvbm91cyBhbmQgdGhpcy5fcmVjb3JkaW5nRmlsZSBtaWdodCBhbHJlYWR5IGNvbnRhaW4gdGhlIG5leHQgcmVjb3JkaW5nXHJcbiAgICBsZXQgcmYgPSB0aGlzLl9yZWNvcmRpbmdGaWxlO1xyXG4gICAgaWYgKHJmICYmIHJmIGluc3RhbmNlb2YgU3ByUmVjb3JkaW5nRmlsZSkge1xyXG4gICAgICB0aGlzLml0ZW1zPy5zZXRTcHJSZWNGaWxlQXVkaW9EYXRhKHJmLGFkaCk7XHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZVVwbG9hZFJlY29yZGluZ3MgJiYgdGhpcy5fdXBsb2FkQ2h1bmtTaXplU2Vjb25kcz09PW51bGwgJiYgQXVkaW9TdG9yYWdlVHlwZS5NRU1fRU5USVJFPT09dGhpcy5fY2xpZW50QXVkaW9TdG9yYWdlVHlwZSkge1xyXG4gICAgICAgIC8vIFRPRE8gdXNlIFNwZWVjaFJlY29yZGVyY29uZmlnIHJlc3AuIFJlY2ZpbGVTZXJ2aWNlXHJcbiAgICAgICAgLy8gY29udmVydCBhc3luY2hyb25vdXNseSB0byAxNi1iaXQgaW50ZWdlciBQQ01cclxuICAgICAgICAvLyBUT0RPIGNvdWxkIHdlIGF2b2lkIGNvbnZlcnNpb24gdG8gc2F2ZSBDUFUgcmVzb3VyY2VzIGFuZCB0cmFuc2ZlciBmbG9hdCBQQ00gZGlyZWN0bHk/XHJcbiAgICAgICAgLy8gVE9ETyBkdXBsaWNhdGUgY29udmVyc2lvbiBmb3IgbWFudWFsIGRvd25sb2FkXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIkJ1aWxkIHdhdiB3cml0ZXIuLi5cIik7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nUmVjb3JkaW5nPXRydWVcclxuICAgICAgICBpZihhYikge1xyXG4gICAgICAgICAgbGV0IHd3ID0gbmV3IFdhdldyaXRlcigpO1xyXG4gICAgICAgICAgLy9uZXcgUkVTVCBBUEkgVVJMXHJcbiAgICAgICAgICBsZXQgYXBpRW5kUG9pbnQgPSAnJztcclxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5hcGlFbmRQb2ludCkge1xyXG4gICAgICAgICAgICBhcGlFbmRQb2ludCA9IHRoaXMuY29uZmlnLmFwaUVuZFBvaW50O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGFwaUVuZFBvaW50ICE9PSAnJykge1xyXG4gICAgICAgICAgICBhcGlFbmRQb2ludCA9IGFwaUVuZFBvaW50ICsgJy8nXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgc2Vzc2lvbnNVcmwgPSBhcGlFbmRQb2ludCArIFNlc3Npb25TZXJ2aWNlLlNFU1NJT05fQVBJX0NUWDtcclxuICAgICAgICAgIGxldCByZWNVcmw6IHN0cmluZyA9IHNlc3Npb25zVXJsICsgJy8nICsgcmYuc2Vzc2lvbiArICcvJyArIFJFQ0ZJTEVfQVBJX0NUWCArICcvJyArIHJmLml0ZW1Db2RlO1xyXG4gICAgICAgICAgd3cud3JpdGVBc3luYyhhYiwgKHdhdkZpbGUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wb3N0UmVjb3JkaW5nKHdhdkZpbGUsIHJlY1VybCxyZik7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc2luZ1JlY29yZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlV2FrZUxvY2soKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNoZWNrIGNvbXBsZXRlIHNlc3Npb25cclxuICAgIGxldCBjb21wbGV0ZSA9IHRydWU7XHJcbiAgICBpZih0aGlzLml0ZW1zKSB7XHJcbiAgICAgIC8vIHNlYXJjaCBiYWNrd2FyZHMsIHRvIGdhaW4gZmFzdGVyIGRldGVjdGlvbiBvZiBpbmNvbXBsZXRlIHN0YXRlXHJcbiAgICAgIGZvciAobGV0IHJpID0gdGhpcy5pdGVtcy5sZW5ndGgoKSAtIDE7IHJpID49IDA7IHJpLS0pIHtcclxuICAgICAgICBsZXQgaXQgPSB0aGlzLml0ZW1zLmdldEl0ZW0ocmkpO1xyXG4gICAgICAgIGlmIChpdC5yZWNvcmRpbmcgJiYgIWl0LnRyYWluaW5nICYmICFpdC5pdGVtRG9uZSgpKSB7XHJcbiAgICAgICAgICBjb21wbGV0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGF1dG9TdGFydCA9ICh0aGlzLnN0YXR1cyA9PT0gU3RhdHVzLlNUT1BQSU5HX1NUT1ApO1xyXG4gICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuSURMRTtcclxuICAgIGxldCBzdGFydE5leHQ9ZmFsc2U7XHJcbiAgICBpZiAoY29tcGxldGUpIHtcclxuICAgICAgaWYodGhpcy5fc2Vzc2lvbiE9bnVsbCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fc2Vzc2lvbi5zZWFsZWQgJiYgdGhpcy5fc2Vzc2lvbi5zdGF0dXMgIT09IFwiQ09NUExFVEVEXCIpIHtcclxuICAgICAgICAgIGxldCBib2R5OiBhbnkgPSB7fVxyXG4gICAgICAgICAgdGhpcy5fc2Vzc2lvbi5zdGF0dXMgPSBcIkNPTVBMRVRFRFwiO1xyXG4gICAgICAgICAgYm9keS5zdGF0dXMgPSB0aGlzLl9zZXNzaW9uLnN0YXR1cztcclxuICAgICAgICAgIGlmICghdGhpcy5fc2Vzc2lvbi5jb21wbGV0ZWREYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb24uY29tcGxldGVkRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIGJvZHkuY29tcGxldGVkRGF0ZSA9IHRoaXMuX3Nlc3Npb24uY29tcGxldGVkRGF0ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc2Vzc2lvblNlcnZpY2UucGF0Y2hTZXNzaW9uT2JzZXJ2ZXIodGhpcy5fc2Vzc2lvbiwgYm9keSkuc3Vic2NyaWJlKClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnU2Vzc2lvbiBjb21wbGV0ZSEnO1xyXG4gICAgICB0aGlzLnVwZGF0ZVdha2VMb2NrKCk7XHJcbiAgICAgIGlmKHRoaXMuc2hvd1Nlc3Npb25Db21wbGV0ZU1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKFNlc3Npb25GaW5pc2hlZERpYWxvZywge30pO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGVuYWJsZSBuYXZpZ2F0aW9uXHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5md2RBY3Rpb24uZGlzYWJsZWQgPSBmYWxzZVxyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuYndkQWN0aW9uLmRpc2FibGVkID0gZmFsc2VcclxuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2VjdGlvbi5tb2RlID09PSAnQVVUT1BST0dSRVNTJyB8fCB0aGlzLnNlY3Rpb24ubW9kZSA9PT0gJ0FVVE9SRUNPUkRJTkcnKSB7XHJcbiAgICAgICAgdGhpcy5uZXh0SXRlbSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5zZWN0aW9uLm1vZGUgPT09ICdBVVRPUkVDT1JESU5HJyAmJiB0aGlzLmF1dG9yZWNvcmRpbmcgJiYgYXV0b1N0YXJ0KSB7XHJcbiAgICAgICAgc3RhcnROZXh0PXRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVXYWtlTG9jaygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBhcHBseSByZWNvcmRlZCBpdGVtXHJcbiAgICB0aGlzLmFwcGx5SXRlbShzdGFydE5leHQpO1xyXG4gICAgaWYoc3RhcnROZXh0KXtcclxuICAgICAgdGhpcy5zdGFydEl0ZW0oKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZXJyb3IobXNnPSdBbiB1bmtub3duIGVycm9yIG9jY3VyZWQgZHVyaW5nIHJlY29yZGluZy4nLGFkdmljZTpzdHJpbmc9J1BsZWFzZSByZXRyeS4nKSB7XHJcbiAgICB0aGlzLnN0YXR1cz1TdGF0dXMuRVJST1I7XHJcbiAgICBzdXBlci5lcnJvcihtc2csYWR2aWNlKTtcclxuICAgIHRoaXMudXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKTtcclxuICAgIHRoaXMudXBkYXRlU3RhcnRBY3Rpb25EaXNhYmxlU3RhdGUoKTtcclxuICB9XHJcblxyXG4gIHBvc3RDaHVua0F1ZGlvQnVmZmVyKGF1ZGlvQnVmZmVyOiBBdWRpb0J1ZmZlciwgY2h1bmtJZHg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9jZXNzaW5nUmVjb3JkaW5nID0gdHJ1ZTtcclxuICAgIGxldCB3dyA9IG5ldyBXYXZXcml0ZXIoKTtcclxuICAgIGxldCBzZXNzaW9uc1VybCA9IHRoaXMuc2Vzc2lvbnNCYXNlVXJsKCk7XHJcbiAgICBsZXQgcmVjVXJsOiBzdHJpbmcgPSBzZXNzaW9uc1VybCArICcvJyArIHRoaXMuc2Vzc2lvbj8uc2Vzc2lvbklkICsgJy8nICsgUkVDRklMRV9BUElfQ1RYICsgJy8nICsgdGhpcy5wcm9tcHRJdGVtLml0ZW1jb2RlKycvJyt0aGlzLnJmVXVpZCsnLycrY2h1bmtJZHg7XHJcbiAgICAvLyBUaGUgdXBsb2FkIGhvbGRlciBpcyByZXF1aXJlZCB0byBhZGQgdGhlIHVwbG9hZCBub3cgdG8gdGhlIHVwbG9hZCBzZXQuIFRoZSByZWFsIHVwbG9hZCBpcyBjcmVhdGVkIGFzeW5jIGluIHBvc3RyZWNvcmRpbmcgYW5kIHRoZSB1cGxvYWQgc2V0IGlzIGFscmVhZHkgY29tcGxldGUgYXQgdGhhdCB0aW1lLlxyXG4gICAgbGV0IHVsaD1uZXcgVXBsb2FkSG9sZGVyKCk7XHJcbiAgICBpZih0aGlzLnVwbG9hZFNldCl7XHJcbiAgICAgIHRoaXMudXBsb2FkU2V0LmFkZCh1bGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHd3LndyaXRlQXN5bmMoYXVkaW9CdWZmZXIsICh3YXZGaWxlKSA9PiB7XHJcbiAgICAgIHRoaXMucG9zdFJlY29yZGluZyh3YXZGaWxlLCByZWNVcmwsbnVsbCx1bGgpO1xyXG4gICAgICB0aGlzLnByb2Nlc3NpbmdSZWNvcmRpbmcgPSBmYWxzZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gcG9zdFJlY29yZGluZyh3YXZGaWxlOiBVaW50OEFycmF5LCByZWNVcmw6IHN0cmluZyxyZjpSZWNvcmRpbmdGaWxlfG51bGwpIHtcclxuICAvLyAgIGxldCB3YXZCbG9iID0gbmV3IEJsb2IoW3dhdkZpbGVdLCB7dHlwZTogJ2F1ZGlvL3dhdid9KTtcclxuICAvLyAgIGxldCB1bCA9IG5ldyBVcGxvYWQod2F2QmxvYiwgcmVjVXJsLHJmKTtcclxuICAvLyAgIHRoaXMudXBsb2FkZXIucXVldWVVcGxvYWQodWwpO1xyXG4gIC8vIH1cclxuXHJcbiAgc3RvcCgpIHtcclxuICAgIGlmKHRoaXMuYWMhPW51bGwpe1xyXG4gICAgICB0aGlzLmFjLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVDb250cm9sUGxheWJhY2tQb3NpdGlvbigpIHtcclxuICAgIGlmKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllcikge1xyXG4gICAgICBjb25zdCBwcEZyYW1lcz10aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIucGxheVBvc2l0aW9uRnJhbWVzO1xyXG4gICAgICBpZiAocHBGcmFtZXMhPT1udWxsKSB7XHJcbiAgICAgICAgaWYodGhpcy5wcm9tcHRpbmcuYXVkaW9EaXNwbGF5KSB7XHJcbiAgICAgICAgICB0aGlzLnByb21wdGluZy5hdWRpb0Rpc3BsYXkucGxheUZyYW1lUG9zaXRpb24gPSBwcEZyYW1lcztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5LnBsYXlGcmFtZVBvc2l0aW9uID0gcHBGcmFtZXM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGF1ZGlvUGxheWVyVXBkYXRlKGU6IEF1ZGlvUGxheWVyRXZlbnQpIHtcclxuICAgIGlmIChFdmVudFR5cGUuUkVBRFkgPT09IGUudHlwZSkge1xyXG5cclxuICAgIH0gZWxzZSBpZiAoRXZlbnRUeXBlLlNUQVJURUQgPT09IGUudHlwZSkge1xyXG4gICAgICAvL3RoaXMuc3RhdHVzID0gJ1BsYXliYWNrLi4uJztcclxuICAgICAgdGhpcy51cGRhdGVUaW1lcklkID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHRoaXMudXBkYXRlQ29udHJvbFBsYXliYWNrUG9zaXRpb24oKSwgNTApO1xyXG5cclxuICAgIH0gZWxzZSBpZiAoRXZlbnRUeXBlLkVOREVEID09PSBlLnR5cGUpIHtcclxuICAgICAgLy8uc3RhdHVzPSdSZWFkeS4nO1xyXG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLnVwZGF0ZVRpbWVySWQpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpZighdGhpcy5kZXN0cm95ZWQpIHtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG59XHJcblxyXG4iXX0=
|
|
1333
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbm1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9ubWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUF1QixNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBZ0MsU0FBUyxFQUFDLE1BQU0sNkJBQTZCLENBQUE7QUFDcEYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDRCQUE0QixDQUFBO0FBQ3BELE9BQU8sRUFBb0IsY0FBYyxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBQ3BGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBOEIsTUFBTSxjQUFjLENBQUE7QUFDMUUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUlqRCxPQUFPLEVBQUMscUJBQXFCLEVBQXVCLE1BQU0sa0JBQWtCLENBQUM7QUFDN0UsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFFbEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2hELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLFFBQVEsRUFB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Q0FBQyxjQUFjLENBQUMsWUFDakI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpRFQ7OzBCQTZHWSxNQUFNOzJCQUFDLHFCQUFxQjs0Q0FwRGhDLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS2tDLFNBQVM7c0JBQWhELFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDQyxnQkFBZ0I7c0JBQXRELFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFNUIsU0FBUztzQkFBakIsS0FBSztnQkFrS04sVUFBVTtzQkFEVCxZQUFZO3VCQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVMzQyxTQUFTO3NCQURSLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0F1ZGlvQ2FwdHVyZSwgQXVkaW9DYXB0dXJlTGlzdGVuZXJ9IGZyb20gJy4uLy4uL2F1ZGlvL2NhcHR1cmUvY2FwdHVyZSc7XHJcbmltcG9ydCB7QXVkaW9QbGF5ZXIsIEF1ZGlvUGxheWVyRXZlbnQsIEV2ZW50VHlwZX0gZnJvbSAnLi4vLi4vYXVkaW8vcGxheWJhY2svcGxheWVyJ1xyXG5pbXBvcnQge1dhdldyaXRlcn0gZnJvbSAnLi4vLi4vYXVkaW8vaW1wbC93YXZ3cml0ZXInXHJcbmltcG9ydCB7R3JvdXAsIFByb21wdEl0ZW0sIFByb21wdGl0ZW1VdGlsLCBTY3JpcHQsIFNlY3Rpb259IGZyb20gJy4uL3NjcmlwdC9zY3JpcHQnO1xyXG5pbXBvcnQge1NwclJlY29yZGluZ0ZpbGUsIFJlY29yZGluZ0ZpbGVEZXNjcmlwdG9ySW1wbH0gZnJvbSAnLi4vcmVjb3JkaW5nJ1xyXG5pbXBvcnQge1VwbG9hZEhvbGRlcn0gZnJvbSAnLi4vLi4vbmV0L3VwbG9hZGVyJztcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBSZW5kZXJlcjIsXHJcbiAgVmlld0NoaWxkXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtTZXNzaW9uU2VydmljZX0gZnJvbSBcIi4vc2Vzc2lvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7U3RhdGUgYXMgU3RhcnRTdG9wU2lnbmFsU3RhdGV9IGZyb20gXCIuLi9zdGFydHN0b3BzaWduYWwvc3RhcnRzdG9wc2lnbmFsXCI7XHJcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7U3BlZWNoUmVjb3JkZXJVcGxvYWRlcn0gZnJvbSBcIi4uL3NwcnVwbG9hZGVyXCI7XHJcbmltcG9ydCB7U1BFRUNIUkVDT1JERVJfQ09ORklHLCBTcGVlY2hSZWNvcmRlckNvbmZpZ30gZnJvbSBcIi4uLy4uL3Nwci5jb25maWdcIjtcclxuaW1wb3J0IHtQcm9tcHRpbmd9IGZyb20gXCIuL3Byb21wdGluZ1wiO1xyXG5pbXBvcnQge1Nlc3Npb25GaW5pc2hlZERpYWxvZ30gZnJvbSBcIi4vc2Vzc2lvbl9maW5pc2hlZF9kaWFsb2dcIjtcclxuaW1wb3J0IHtNZXNzYWdlRGlhbG9nfSBmcm9tIFwiLi4vLi4vdWkvbWVzc2FnZV9kaWFsb2dcIjtcclxuaW1wb3J0IHtSZWNvcmRpbmdTZXJ2aWNlfSBmcm9tIFwiLi4vcmVjb3JkaW5ncy9yZWNvcmRpbmdzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdWRpb0NvbnRleHRQcm92aWRlcn0gZnJvbSBcIi4uLy4uL2F1ZGlvL2NvbnRleHRcIjtcclxuaW1wb3J0IHtBdWRpb0NsaXB9IGZyb20gXCIuLi8uLi9hdWRpby9wZXJzaXN0b3JcIjtcclxuaW1wb3J0IHtJdGVtfSBmcm9tIFwiLi9pdGVtXCI7XHJcbmltcG9ydCB7TGV2ZWxCYXJ9IGZyb20gXCIuLi8uLi9hdWRpby91aS9saXZlbGV2ZWxcIjtcclxuaW1wb3J0IHtcclxuICBCYXNpY1JlY29yZGVyLFxyXG4gIENodW5rQXVkaW9CdWZmZXJSZWNlaXZlcixcclxuICBNQVhfUkVDT1JESU5HX1RJTUVfTVMsXHJcbiAgUkVDRklMRV9BUElfQ1RYXHJcbn0gZnJvbSBcIi4vYmFzaWNyZWNvcmRlclwiO1xyXG5pbXBvcnQge0FycmF5QXVkaW9CdWZmZXJ9IGZyb20gXCIuLi8uLi9hdWRpby9hcnJheV9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtBdWRpb0J1ZmZlclNvdXJjZSwgQXVkaW9EYXRhSG9sZGVyLCBBdWRpb1NvdXJjZX0gZnJvbSBcIi4uLy4uL2F1ZGlvL2F1ZGlvX2RhdGFfaG9sZGVyXCI7XHJcbmltcG9ydCB7U3BySXRlbXNDYWNoZX0gZnJvbSBcIi4vcmVjb3JkaW5nX2ZpbGVfY2FjaGVcIjtcclxuaW1wb3J0IHtTdGF0ZSBhcyBMaXZlTGV2ZWxTdGF0ZX0gZnJvbSBcIi4uLy4uL2F1ZGlvL3VpL2xpdmVsZXZlbFwiXHJcbmltcG9ydCB7SW5kZXhlZERiQXVkaW9CdWZmZXIsIFBlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXR9IGZyb20gXCIuLi8uLi9hdWRpby9pbmRkYl9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtBdWRpb1N0b3JhZ2VUeXBlfSBmcm9tIFwiLi4vcHJvamVjdC9wcm9qZWN0XCI7XHJcbmltcG9ydCB7TmV0QXVkaW9CdWZmZXJ9IGZyb20gXCIuLi8uLi9hdWRpby9uZXRfYXVkaW9fYnVmZmVyXCI7XHJcbmltcG9ydCB7QnJlYWtwb2ludE9ic2VydmVyfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2xheW91dFwiO1xyXG5cclxuY29uc3QgREVGQVVMVF9QUkVfUkVDX0RFTEFZPTEwMDA7XHJcbmNvbnN0IERFRkFVTFRfUE9TVF9SRUNfREVMQVk9NTAwO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVudW0gU3RhdHVzIHtcclxuICBCTE9DS0VELCBJRExFLCBTVEFSVElORywgUFJFX1JFQ09SRElORywgUkVDT1JESU5HLCBQT1NUX1JFQ19TVE9QLCBQT1NUX1JFQ19QQVVTRSwgU1RPUFBJTkdfU1RPUCwgU1RPUFBJTkdfUEFVU0UsIEVSUk9SXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNwcnJlY29yZGluZ3Nlc3Npb24nLFxyXG4gIHByb3ZpZGVyczogW1Nlc3Npb25TZXJ2aWNlXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGFwcC13YXJuaW5nYmFyIFtzaG93XT1cImlzVGVzdFNlc3Npb24oKVwiIHdhcm5pbmdUZXh0PVwiVGVzdCByZWNvcmRpbmcgb25seSFcIj48L2FwcC13YXJuaW5nYmFyPlxyXG4gICAgPGFwcC13YXJuaW5nYmFyIFtzaG93XT1cImlzRGVmYXVsdEF1ZGlvVGVzdFNlc3Npb24oKVwiIHdhcm5pbmdUZXh0PVwiVGhpcyB0ZXN0IHVzZXMgZGVmYXVsdCBhdWRpbyBkZXZpY2UhIFJlZ3VsYXIgc2Vzc2lvbnMgbWF5IHJlcXVpcmUgYSBwYXJ0aWN1bGFyIGF1ZGlvIGRldmljZSAobWljcm9waG9uZSkhXCI+PC9hcHAtd2FybmluZ2Jhcj5cclxuICAgICAgPGFwcC1zcHJwcm9tcHRpbmcgW3Byb2plY3ROYW1lXT1cInByb2plY3ROYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXJ0U3RvcFNpZ25hbFN0YXRlXT1cInN0YXJ0U3RvcFNpZ25hbFN0YXRlXCIgW3Byb21wdEl0ZW1dPVwicHJvbXB0SXRlbVwiIFtzaG93UHJvbXB0XT1cInNob3dQcm9tcHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiaXRlbXM/Lml0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RyYW5zcG9ydEFjdGlvbnNdPVwidHJhbnNwb3J0QWN0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZEl0ZW1JZHhdPVwicHJvbXB0SW5kZXhcIiAob25JdGVtU2VsZWN0KT1cIml0ZW1TZWxlY3QoJGV2ZW50KVwiIChvbk5leHRJdGVtKT1cIm5leHRJdGVtKClcIiAob25QcmV2SXRlbSk9XCJwcmV2SXRlbSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F1ZGlvU2lnbmFsQ29sbGFwc2VkXT1cImF1ZGlvU2lnbmFsQ29sbGFwc2VkXCIgW2Rpc3BsYXlBdWRpb0NsaXBdPVwiZGlzcGxheUF1ZGlvQ2xpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RhcnRBY3Rpb25dPVwiY29udHJvbEF1ZGlvUGxheWVyPy5zdGFydEFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U2VsZWN0aW9uQWN0aW9uXT1cImNvbnRyb2xBdWRpb1BsYXllcj8uc3RhcnRTZWxlY3Rpb25BY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbl09XCJjb250cm9sQXVkaW9QbGF5ZXI/LmF1dG9QbGF5T25TZWxlY3RUb2dnbGVBY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxheVN0b3BBY3Rpb25dPVwiY29udHJvbEF1ZGlvUGxheWVyPy5zdG9wQWN0aW9uXCI+XHJcblxyXG4gICAgPC9hcHAtc3BycHJvbXB0aW5nPlxyXG4gICAgPG1hdC1wcm9ncmVzcy1iYXIgW3ZhbHVlXT1cInByb2dyZXNzUGVyY2VudFZhbHVlKClcIiAqbmdJZj1cInNjcmVlblhzXCIgPjwvbWF0LXByb2dyZXNzLWJhcj5cclxuXHJcblxyXG4gICAgPGRpdiBbY2xhc3NdPVwie2F1ZGlvU3RhdHVzRGlzcGxheTohc2NyZWVuWHMsYXVkaW9TdGF0dXNEaXNwbGF5WHM6c2NyZWVuWHN9XCI+XHJcbiAgICAgIDxhdWRpby1sZXZlbGJhciBzdHlsZT1cImZsZXg6MSAwIDElXCIgW3N0cmVhbWluZ01vZGVdPVwiaXNSZWNvcmRpbmcoKSB8fCBrZWVwTGl2ZUxldmVsXCIgW2Rpc3BsYXlMZXZlbEluZm9zXT1cImRpc3BsYXlBdWRpb0NsaXA/LmxldmVsSW5mb3NcIiAgW3N0YXRlXT1cImxpdmVMZXZlbERpc3BsYXlTdGF0ZVwiPjwvYXVkaW8tbGV2ZWxiYXI+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246IHJvd1wiPlxyXG4gICAgICAgIDxzcHItcmVjb3JkaW5naXRlbWNvbnRyb2xzIHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXg6MTAgMCAxcHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdWRpb0xvYWRlZF09XCJhdWRpb0xvYWRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVBdWRpb0RldGFpbHNdPVwiZGlzYWJsZUF1ZGlvRGV0YWlsc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYXlTdGFydEFjdGlvbl09XCJjb250cm9sQXVkaW9QbGF5ZXI/LnN0YXJ0QWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxheVN0b3BBY3Rpb25dPVwiY29udHJvbEF1ZGlvUGxheWVyPy5zdG9wQWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGVha0RiTHZsXT1cInBlYWtMZXZlbEluRGJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthZ2NdPVwidGhpcy5hYz8uYWdjU3RhdHVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25TaG93UmVjb3JkaW5nRGV0YWlscyk9XCJhdWRpb1NpZ25hbENvbGxhcHNlZD0hYXVkaW9TaWduYWxDb2xsYXBzZWRcIj5cclxuICAgICAgICA8L3Nwci1yZWNvcmRpbmdpdGVtY29udHJvbHM+XHJcblxyXG4gICAgICAgIDxhcHAtdXBsb2Fkc3RhdHVzICpuZ0lmPVwic2NyZWVuWHMgJiYgZW5hYmxlVXBsb2FkUmVjb3JkaW5nc1wiIGNsYXNzPVwicmljb250cm9scyBkYXJrXCIgIHN0eWxlPVwiZmxleDowIDAgMFwiIFt2YWx1ZV09XCJ1cGxvYWRQcm9ncmVzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXR1c109XCJ1cGxvYWRTdGF0dXNcIiBbYXdhaXROZXdVcGxvYWRdPVwicHJvY2Vzc2luZ1JlY29yZGluZ1wiPjwvYXBwLXVwbG9hZHN0YXR1cz5cclxuICAgICAgICA8YXBwLXdha2Vsb2NraW5kaWNhdG9yICpuZ0lmPVwic2NyZWVuWHNcIiBjbGFzcz1cInJpY29udHJvbHMgZGFya1wiIHN0eWxlPVwiZmxleDowIDAgMFwiIFtzY3JlZW5Mb2NrZWRdPVwic2NyZWVuTG9ja2VkXCI+PC9hcHAtd2FrZWxvY2tpbmRpY2F0b3I+XHJcbiAgICAgICAgPGFwcC1yZWFkeXN0YXRlaW5kaWNhdG9yICpuZ0lmPVwic2NyZWVuWHNcIiBjbGFzcz1cInJpY29udHJvbHMgZGFya1wiIHN0eWxlPVwiZmxleDowIDAgMFwiIFtyZWFkeV09XCJkYXRhU2F2ZWQgJiYgIWlzQWN0aXZlKClcIj48L2FwcC1yZWFkeXN0YXRlaW5kaWNhdG9yPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAjY29udHJvbHBhbmVsIGNsYXNzPVwiY29udHJvbHBhbmVsXCI+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OjEgMSAzMCU7anVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O2FsaWduLWl0ZW1zOiBjZW50ZXI7IGFsaWduLWNvbnRlbnQ6IGNlbnRlclwiPlxyXG4gICAgICAgIDxhcHAtc3Byc3RhdHVzZGlzcGxheSAqbmdJZj1cIiFzY3JlZW5Yc1wiIFtzdGF0dXNNc2ddPVwic3RhdHVzTXNnXCIgW3N0YXR1c0FsZXJ0VHlwZV09XCJzdGF0dXNBbGVydFR5cGVcIiBbc3RhdHVzV2FpdGluZ109XCJzdGF0dXNXYWl0aW5nXCI+PC9hcHAtc3Byc3RhdHVzZGlzcGxheT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxhcHAtc3BydHJhbnNwb3J0IHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXg6MTAgMCAzMCU7anVzdGlmeS1jb250ZW50OiBjZW50ZXI7YWxpZ24taXRlbXM6IGNlbnRlcjsgYWxpZ24tY29udGVudDogY2VudGVyXCIgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCIgW2FjdGlvbnNdPVwidHJhbnNwb3J0QWN0aW9uc1wiIFtuYXZpZ2F0aW9uRW5hYmxlZF09XCIhaXRlbXMgfHwgaXRlbXMubGVuZ3RoKCk+MVwiPjwvYXBwLXNwcnRyYW5zcG9ydD5cclxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtmbGV4OjEgMSAzMCU7ZmxleC1kaXJlY3Rpb246cm93O2p1c3RpZnktY29udGVudDogZmxleC1lbmQ7YWxpZ24taXRlbXM6IGNlbnRlcjsgYWxpZ24tY29udGVudDogY2VudGVyXCI+XHJcbiAgICAgICAgPGFwcC11cGxvYWRzdGF0dXMgKm5nSWY9XCIhc2NyZWVuWHMgJiYgZW5hYmxlVXBsb2FkUmVjb3JkaW5nc1wiICBjbGFzcz1cInJpY29udHJvbHNcIiAgW3ZhbHVlXT1cInVwbG9hZFByb2dyZXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cInVwbG9hZFN0YXR1c1wiIFthd2FpdE5ld1VwbG9hZF09XCJwcm9jZXNzaW5nUmVjb3JkaW5nXCI+PC9hcHAtdXBsb2Fkc3RhdHVzPlxyXG4gICAgICAgIDxhcHAtd2FrZWxvY2tpbmRpY2F0b3IgKm5nSWY9XCIhc2NyZWVuWHNcIiBjbGFzcz1cInJpY29udHJvbHNcIiBbc2NyZWVuTG9ja2VkXT1cInNjcmVlbkxvY2tlZFwiPjwvYXBwLXdha2Vsb2NraW5kaWNhdG9yPlxyXG4gICAgICAgIDxhcHAtcmVhZHlzdGF0ZWluZGljYXRvciAqbmdJZj1cIiFzY3JlZW5Yc1wiIGNsYXNzPVwicmljb250cm9sc1wiIFtyZWFkeV09XCJkYXRhU2F2ZWQgJiYgIWlzQWN0aXZlKClcIj48L2FwcC1yZWFkeXN0YXRlaW5kaWNhdG9yPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IHtcclxuICAgIGZsZXg6IDI7XHJcbiAgICBiYWNrZ3JvdW5kOiBsaWdodGdyZXk7XHJcbiAgICBkaXNwbGF5OiBmbGV4OyAvKiBWZXJ0aWNhbCBmbGV4IGNvbnRhaW5lcjogQm90dG9tIHRyYW5zcG9ydCBwYW5lbCwgYWJvdmUgcHJvbXB0aW5nIHBhbmVsICovXHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIG1pbi1oZWlnaHQ6IDBweDtcclxuXHJcbiAgICAgIC8qIFByZXZlbnRzIGhvcml6b250YWwgc2Nyb2xsIGJhciBvbiBzd2lwZSByaWdodCAqL1xyXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1gLGAucmljb250cm9scyB7XHJcbiAgICAgICAgZGlzcGxheTpmbGV4O1xyXG4gICAgICAgIHBhZGRpbmc6IDRweDtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7YWxpZ24taXRlbXM6IGNlbnRlcjsgYWxpZ24tY29udGVudDogY2VudGVyO1xyXG4gICAgfWAsYC5kYXJrIHtcclxuICAgIGJhY2tncm91bmQ6IGRhcmtncmF5O1xyXG4gIH1gLGAuY29udHJvbHBhbmVsIHtcclxuICAgIGRpc3BsYXk6ZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogMjBweDtcclxuICAgIG1pbi1oZWlnaHQ6IG1pbi1jb250ZW50OyAvKiBpbXBvcnRhbnQgKi9cclxuICB9YCxgLmF1ZGlvU3RhdHVzRGlzcGxheXtcclxuICAgIGRpc3BsYXk6ZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICBoZWlnaHQ6MTAwcHg7XHJcbiAgICBtaW4taGVpZ2h0OiAxMDBweDtcclxuICB9YCxgLmF1ZGlvU3RhdHVzRGlzcGxheVhze1xyXG4gICAgZGlzcGxheTpmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIGhlaWdodDoxMjVweDtcclxuICAgIG1pbi1oZWlnaHQ6IDEyNXB4O1xyXG4gIH1gXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2Vzc2lvbk1hbmFnZXIgZXh0ZW5kcyBCYXNpY1JlY29yZGVyIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCxPbkRlc3Ryb3ksIEF1ZGlvQ2FwdHVyZUxpc3RlbmVyLENodW5rQXVkaW9CdWZmZXJSZWNlaXZlciB7XHJcblxyXG4gIHByaXZhdGUgb2ZmbGluZUF1ZGlvQ29udGV4dDpPZmZsaW5lQXVkaW9Db250ZXh0fG51bGw9bnVsbDtcclxuXHJcbiAgZ2V0IHBlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQoKTogUGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQ7XHJcbiAgfVxyXG5cclxuICBzZXQgcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCh2YWx1ZTogUGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCB8IG51bGwpIHtcclxuICAgIHRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQgPSB2YWx1ZTtcclxuICAgIGlmKHRoaXMuYWMpIHtcclxuICAgICAgdGhpcy5hYy5wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0ID0gdGhpcy5wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgcHJvamVjdE5hbWU6c3RyaW5nfHVuZGVmaW5lZDtcclxuICBlbmFibGVVcGxvYWRSZWNvcmRpbmdzOiBib29sZWFuID0gdHJ1ZTtcclxuICBlbmFibGVEb3dubG9hZFJlY29yZGluZ3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzdGF0dXM6IFN0YXR1cyA9IFN0YXR1cy5CTE9DS0VEO1xyXG5cclxuICBAVmlld0NoaWxkKFByb21wdGluZywgeyBzdGF0aWM6IHRydWUgfSkgcHJvbXB0aW5nITogUHJvbXB0aW5nO1xyXG4gIEBWaWV3Q2hpbGQoTGV2ZWxCYXIsIHsgc3RhdGljOiB0cnVlIH0pIGxpdmVMZXZlbERpc3BsYXkhOiBMZXZlbEJhcjtcclxuXHJcbiAgQElucHV0KCkgZGF0YVNhdmVkPXRydWVcclxuXHJcbiAgc3RhcnRTdG9wU2lnbmFsU3RhdGUhOiBTdGFydFN0b3BTaWduYWxTdGF0ZTtcclxuXHJcbiAgcHJpdmF0ZSBwcmVSZWNUaW1lcklkOiBudW1iZXJ8bnVsbD1udWxsO1xyXG4gIHByaXZhdGUgcHJlUmVjVGltZXJSdW5uaW5nOiBib29sZWFufG51bGw9bnVsbDtcclxuICBwcml2YXRlIHBvc3REZWxheTpudW1iZXI9REVGQVVMVF9QT1NUX1JFQ19ERUxBWTtcclxuICBwcml2YXRlIHBvc3RSZWNUaW1lcklkOiBudW1iZXJ8bnVsbD1udWxsO1xyXG4gIHByaXZhdGUgcG9zdFJlY1RpbWVyUnVubmluZzogYm9vbGVhbnxudWxsPW51bGw7XHJcbiAgLy9wcml2YXRlIG1heFJlY1RpbWVyUnVubmluZzogYm9vbGVhbnxudWxsPW51bGw7XHJcblxyXG4gIGF1ZGlvOiBhbnk7XHJcbiAgX3NjcmlwdCE6IFNjcmlwdDtcclxuICBwcml2YXRlIF9wcm9tcHRJbmRleD0wO1xyXG4gIHByaXZhdGUgc2VjdGlvbiE6IFNlY3Rpb247XHJcbiAgZ3JvdXAhOiBHcm91cDtcclxuICBwcm9tcHRJdGVtITpQcm9tcHRJdGVtO1xyXG4gIHNob3dQcm9tcHQhOiBib29sZWFuO1xyXG5cclxuICAvLyBpbmRleCBvZiBjdXJyZW50IHNlY3Rpb25cclxuICBzZWN0SWR4ITogbnVtYmVyO1xyXG4gIC8vIGluZGV4IG9mIGN1cnJlbnQgZ3JvdXAgaW4gc2VjdGlvblxyXG4gIGdyb3VwSWR4SW5TZWN0aW9uITogbnVtYmVyO1xyXG4gIC8vIGluZGV4IG9mIGN1cnJlbnQgcHJvbXB0IGl0ZW0gaW4gZ3JvdXBcclxuICBwcm9tcHRJdGVtSWR4SW5Hcm91cCE6IG51bWJlcjtcclxuXHJcbiAgcHJpdmF0ZSBhdXRvcmVjb3JkaW5nITogYm9vbGVhbjtcclxuXHJcbiAgaXRlbXM6IFNwckl0ZW1zQ2FjaGV8bnVsbD1udWxsO1xyXG4gIC8vc2VsZWN0ZWRJdGVtSWR4OiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfZGlzcGxheVJlY0ZpbGU6IFNwclJlY29yZGluZ0ZpbGUgfCBudWxsPW51bGw7XHJcbiAgcHJpdmF0ZSBkaXNwbGF5UmVjRmlsZVZlcnNpb24hOiBudW1iZXI7XHJcblxyXG4gIHByb21wdEl0ZW1Db3VudCE6IG51bWJlcjtcclxuXHJcbiAgc2hvd1Nlc3Npb25Db21wbGV0ZU1lc3NhZ2U9dHJ1ZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGJwbzpCcmVha3BvaW50T2JzZXJ2ZXIsXHJcbiAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICAgICAgICBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgICAgICAgICAgICBzZXNzaW9uU2VydmljZTpTZXNzaW9uU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIHJlY0ZpbGVTZXJ2aWNlOlJlY29yZGluZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgdXBsb2FkZXI6IFNwZWVjaFJlY29yZGVyVXBsb2FkZXIsXHJcbiAgICAgICAgICAgICAgQEluamVjdChTUEVFQ0hSRUNPUkRFUl9DT05GSUcpIGNvbmZpZz86IFNwZWVjaFJlY29yZGVyQ29uZmlnKSB7XHJcbiAgICBzdXBlcihicG8sY2hhbmdlRGV0ZWN0b3JSZWYsZGlhbG9nLHNlc3Npb25TZXJ2aWNlLHVwbG9hZGVyLGNvbmZpZyk7XHJcbiAgICB0aGlzLnN0YXR1cyA9IFN0YXR1cy5JRExFO1xyXG4gICAgdGhpcy5hdWRpbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdWRpbycpO1xyXG4gICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmVuYWJsZVVwbG9hZFJlY29yZGluZ3MgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmVuYWJsZVVwbG9hZFJlY29yZGluZ3MgPSB0aGlzLmNvbmZpZy5lbmFibGVVcGxvYWRSZWNvcmRpbmdzO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmVuYWJsZURvd25sb2FkUmVjb3JkaW5ncyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuZW5hYmxlRG93bmxvYWRSZWNvcmRpbmdzID0gdGhpcy5jb25maWcuZW5hYmxlRG93bmxvYWRSZWNvcmRpbmdzO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0KCk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuc3RyZWFtTGV2ZWxNZWFzdXJlLmxldmVsTGlzdGVuZXIgPSB0aGlzLmxpdmVMZXZlbERpc3BsYXk7XHJcbiAgICB0aGlzLnN0cmVhbUxldmVsTWVhc3VyZS5wZWFrTGV2ZWxMaXN0ZW5lcj0ocGVha0x2bEluRGIpPT57XHJcbiAgICAgIHRoaXMucGVha0xldmVsSW5EYj1wZWFrTHZsSW5EYjtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkNvbSBkZXN0cm95LCBkaXNhYmxlIHdha2UgbG9jay5cIilcclxuICAgICAgdGhpcy5kaXNhYmxlV2FrZUxvY2tDb25kKCk7XHJcbiAgICAgICB0aGlzLmRlc3Ryb3llZD10cnVlO1xyXG4gICAgICAgLy8gVE9ETyBzdG9wIGNhcHR1cmUgL3BsYXliYWNrXHJcbiAgICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdCgpIHtcclxuICAgIHRoaXMuc2VjdElkeCA9IDA7XHJcbiAgICB0aGlzLmdyb3VwSWR4SW5TZWN0aW9uID0gMDtcclxuICAgIHRoaXMucHJvbXB0SXRlbUlkeEluR3JvdXAgPSAwO1xyXG4gICAgdGhpcy5hdXRvcmVjb3JkaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLm5leHRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBsZXQgY29udGV4dDpBdWRpb0NvbnRleHR8bnVsbD1udWxsO1xyXG4gICAgLy8gdHJ5IHtcclxuICAgIC8vICAgY29udGV4dCA9IEF1ZGlvQ29udGV4dFByb3ZpZGVyLmF1ZGlvQ29udGV4dEluc3RhbmNlKCk7XHJcbiAgICAvLyB9IGNhdGNoIChlcnIpIHtcclxuICAgIC8vICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuRVJST1I7XHJcbiAgICAvLyAgIGxldCBlcnJNc2cgPSAnVW5rbm93biBlcnJvcic7XHJcbiAgICAvLyAgIGlmKGVyciBpbnN0YW5jZW9mIEVycm9yKXtcclxuICAgIC8vICAgICBlcnJNc2c9ZXJyLm1lc3NhZ2U7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgdGhpcy5zdGF0dXNNc2cgPSAnRVJST1I6ICcgKyBlcnJNc2c7XHJcbiAgICAvLyAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgIC8vICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAvLyAgICAgZGF0YToge1xyXG4gICAgLy8gICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgIC8vICAgICAgIHRpdGxlOiAnRXJyb3InLFxyXG4gICAgLy8gICAgICAgbXNnOiBlcnJNc2csXHJcbiAgICAvLyAgICAgICBhZHZpY2U6ICdQbGVhc2UgdXNlIGEgc3VwcG9ydGVkIGJyb3dzZXIuJyxcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gICByZXR1cm47XHJcbiAgICAvLyB9XHJcbiAgICAvLyBpZihjb250ZXh0KSB7XHJcbiAgICAvLyAgIGNvbnNvbGUuaW5mbyhcIlN0YXRlIG9mIGF1ZGlvIGNvbnRleHQ6IFwiICsgY29udGV4dC5zdGF0ZSlcclxuICAgIC8vIH1lbHNle1xyXG4gICAgLy8gICBjb25zb2xlLmluZm8oXCJObyBhdWRpbyBjb250ZXh0IGF2YWlsYWJsZSFcIik7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBpZiAoIWNvbnRleHQgfHwgIW5hdmlnYXRvci5tZWRpYURldmljZXMpIHtcclxuICAgIC8vICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuRVJST1I7XHJcbiAgICAvLyAgIGxldCBlcnJNc2cgPSAnQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IE1lZGlhIHN0cmVhbXMhJztcclxuICAgIC8vICAgdGhpcy5zdGF0dXNNc2cgPSAnRVJST1I6ICcgKyBlcnJNc2c7XHJcbiAgICAvLyAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgIC8vICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAvLyAgICAgZGF0YToge1xyXG4gICAgLy8gICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgIC8vICAgICAgIHRpdGxlOiAnRXJyb3InLFxyXG4gICAgLy8gICAgICAgbXNnOiBlcnJNc2csXHJcbiAgICAvLyAgICAgICBhZHZpY2U6ICdQbGVhc2UgdXNlIGEgc3VwcG9ydGVkIGJyb3dzZXIuJyxcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gICByZXR1cm47XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFjID0gbmV3IEF1ZGlvQ2FwdHVyZSgpO1xyXG4gICAgICBpZiAodGhpcy5hYykge1xyXG4gICAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5vbkFjdGlvbiA9ICgpID0+IHRoaXMuc3RhcnRJdGVtKCk7XHJcbiAgICAgICAgdGhpcy5hYy5saXN0ZW5lciA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMuY29uZmlndXJlU3RyZWFtQ2FwdHVyZVN0cmVhbSgpO1xyXG5cclxuICAgICAgICAvLyBEb24ndCBsaXN0IHRoZSBkZXZpY2VzIGhlcmUuIElmIHdlIGRvIG5vdCBoYXZlIGF1ZGlvIHBlcm1pc3Npb25zIHdlIG9ubHkgZ2V0IGFub255bWl6ZWQgZGV2aWNlcyB3aXRob3V0IGxhYmVscy5cclxuICAgICAgICAvL3RoaXMuYWMubGlzdERldmljZXMoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIGxldCBlcnJNc2cgPSAnQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IE1lZGlhL0F1ZGlvIEFQSSEnO1xyXG4gICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ0VSUk9SOiAnICsgZXJyTXNnO1xyXG4gICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKE1lc3NhZ2VEaWFsb2csIHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgICAgdGl0bGU6ICdFcnJvcicsXHJcbiAgICAgICAgICAgIG1zZzogZXJyTXNnLFxyXG4gICAgICAgICAgICBhZHZpY2U6ICdQbGVhc2UgdXNlIGEgc3VwcG9ydGVkIGJyb3dzZXIuJyxcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24ub25BY3Rpb24gPSAoKSA9PiB0aGlzLnN0b3BJdGVtKCk7XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5uZXh0QWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5zdG9wSXRlbSgpO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24ub25BY3Rpb24gPSAoKSA9PiB0aGlzLnBhdXNlSXRlbSgpO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuZndkQWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5uZXh0SXRlbSgpO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuZndkTmV4dEFjdGlvbi5vbkFjdGlvbiA9ICgpID0+IHRoaXMubmV4dFVucmVjb3JkZWRJdGVtKCk7XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5id2RBY3Rpb24ub25BY3Rpb24gPSAoKSA9PiB0aGlzLnByZXZJdGVtKCk7XHJcbiAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5jb250cm9sQXVkaW9QbGF5ZXI/LnN0YXJ0KCk7XHJcblxyXG4gICAgdGhpcy5zdGFydFN0b3BTaWduYWxTdGF0ZSA9IFN0YXJ0U3RvcFNpZ25hbFN0YXRlLk9GRjtcclxuXHJcbn1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleXByZXNzJywgWyckZXZlbnQnXSlcclxuICBvbktleVByZXNzKGtlOiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoa2Uua2V5ID09ICcgJykge1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RhcnRBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgb25LZXlEb3duKGtlOiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoa2Uua2V5ID09ICcgJykge1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoa2Uua2V5ID09ICdwJykge1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChrZS5rZXkgPT0gJ0VzY2FwZScpIHtcclxuICAgICAgaWYoIXRoaXMuYXVkaW9TaWduYWxDb2xsYXBzZWQpe1xyXG4gICAgICAgIHRoaXMuYXVkaW9TaWduYWxDb2xsYXBzZWQ9dHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5wYXVzZUFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGtlLmtleSA9PSAnTWVkaWFQbGF5UGF1c2UnKSB7XHJcbiAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1cclxuICAgIGlmIChrZS5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuZndkQWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1cclxuICAgIGlmIChrZS5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5id2RBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlV2FrZUxvY2soZGF0YVNhdmVkOmJvb2xlYW49dGhpcy5kYXRhU2F2ZWQpe1xyXG4gICAgLy9jb25zb2xlLmRlYnVnKFwiVXBkYXRlIHdha2UgbG9jazogZGF0YVNhdmVkOiBcIitkYXRhU2F2ZWQrXCIsIG5vdCBhY3RpdmU6IFwiKyEgdGhpcy5pc0FjdGl2ZSgpKVxyXG4gICAgaWYoZGF0YVNhdmVkICYmICEgdGhpcy5pc0FjdGl2ZSgpKXtcclxuICAgICAgdGhpcy5kaXNhYmxlV2FrZUxvY2tDb25kKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm9ncmVzc1BlcmNlbnRWYWx1ZSgpOm51bWJlciB7XHJcbiAgICBsZXQgdj0xMDA7XHJcbiAgICBpZih0aGlzLml0ZW1zKSB7XHJcbiAgICAgIHY9dGhpcy5wcm9tcHRJbmRleCAqIDEwMCAvICh0aGlzLml0ZW1zLmxlbmd0aCgpIC0gMSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9XHJcbiAgaXNUZXN0U2Vzc2lvbigpOmJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICgodGhpcy5fc2Vzc2lvbiE9bnVsbCkgJiYgKHRoaXMuX3Nlc3Npb24udHlwZSA9PT0gJ1RFU1QnIHx8IHRoaXMuX3Nlc3Npb24udHlwZT09PSdURVNUX0RFRl9BJyB8fCB0aGlzLl9zZXNzaW9uLnR5cGUgPT09ICdTSU5VU19URVNUJykpO1xyXG4gIH1cclxuXHJcbiAgaXNEZWZhdWx0QXVkaW9UZXN0U2Vzc2lvbigpOmJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICgodGhpcy5fc2Vzc2lvbiE9bnVsbCkgJiYgKHRoaXMuX3Nlc3Npb24udHlwZT09PSdURVNUX0RFRl9BJykpO1xyXG4gIH1cclxuXHJcbiAgaXNEZWZhdWx0QXVkaW9UZXN0U2Vzc2lvbk92ZXJ3cml0aW5nUHJvamVjdFJlcXVpcmVtZW50cygpOmJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICgodGhpcy5fc2Vzc2lvbiE9bnVsbCkgJiYgKHRoaXMuX3Nlc3Npb24udHlwZT09PSdURVNUX0RFRl9BJykgJiYgKHRoaXMuYXVkaW9EZXZpY2VzIT1udWxsKSAmJiB0aGlzLmF1ZGlvRGV2aWNlcy5sZW5ndGg+MClcclxuICB9XHJcblxyXG4gIHNldCBjb250cm9sQXVkaW9QbGF5ZXIoY29udHJvbEF1ZGlvUGxheWVyOiBBdWRpb1BsYXllcnxudWxsKSB7XHJcbiAgICB0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXI9Y29udHJvbEF1ZGlvUGxheWVyO1xyXG4gICAgaWYgKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllcikge1xyXG4gICAgICB0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIubGlzdGVuZXIgPSB0aGlzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbnRyb2xBdWRpb1BsYXllcigpOiBBdWRpb1BsYXllcnxudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXI7XHJcbiAgfVxyXG5cclxuICBzZXQgc2NyaXB0KHNjcmlwdDogYW55KSB7XHJcbiAgICB0aGlzLl9zY3JpcHQgPSBzY3JpcHQ7XHJcbiAgICB0aGlzLmxvYWRTY3JpcHQoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZShlOiBBdWRpb1BsYXllckV2ZW50KSB7XHJcbiAgICBpZiAoZS50eXBlID09IEV2ZW50VHlwZS5TVEFSVEVEKSB7XHJcbiAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51cGRhdGVUaW1lcklkID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAvL3RoaXMuYXVkaW9TaWduYWwucGxheUZyYW1lUG9zaXRpb24gPSB0aGlzLmFwLnBsYXlQb3NpdGlvbkZyYW1lcztcclxuICAgICAgfSwgNTApO1xyXG4gICAgfSBlbHNlIGlmIChlLnR5cGUgPT0gRXZlbnRUeXBlLlNUT1BQRUQgfHwgZS50eXBlID09IEV2ZW50VHlwZS5FTkRFRCkge1xyXG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLnVwZGF0ZVRpbWVySWQpO1xyXG4gICAgICAvLyB0aGlzLmF1ZGlvU2lnbmFsLnBsYXlGcmFtZVBvc2l0aW9uID0gdGhpcy5hcC5wbGF5UG9zaXRpb25GcmFtZXM7XHJcbiAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gKCEodGhpcy5kaXNwbGF5UmVjRmlsZSkpO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBwcm9tcHRJbmRleCgpOm51bWJlcntcclxuICAgIHJldHVybiB0aGlzLl9wcm9tcHRJbmRleDtcclxuICB9XHJcblxyXG4gIHNldCBwcm9tcHRJbmRleChwcm9tcHRJbmRleDpudW1iZXIpe1xyXG4gICAgaWYocHJvbXB0SW5kZXg8MCB8fCBwcm9tcHRJbmRleD49dGhpcy5wcm9tcHRJdGVtQ291bnQpe1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm9tcHQgaW5kZXggb3V0IG9mIHJhbmdlXCIpXHJcbiAgICB9XHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBsZXQgc2VjdGlvbnM9dGhpcy5fc2NyaXB0LnNlY3Rpb25zO1xyXG4gICAgbGV0IGZvdW5kPWZhbHNlO1xyXG4gICAgZm9yIChsZXQgc2kgPSAwOyBzaSA8IHNlY3Rpb25zLmxlbmd0aCAmJiAhZm91bmQ7IHNpKyspIHtcclxuICAgICAgbGV0IHNlY3Rpb24gPSBzZWN0aW9uc1tzaV07XHJcbiAgICAgIGxldCBncyA9IHNlY3Rpb24uX3NodWZmbGVkR3JvdXBzO1xyXG4gICAgICBmb3IgKGxldCBnaSA9IDA7IGdpIDwgZ3MubGVuZ3RoOyBnaSsrKSB7XHJcbiAgICAgICAgbGV0IHBpcz1nc1tnaV0uX3NodWZmbGVkUHJvbXB0SXRlbXM7XHJcblxyXG4gICAgICAgIGxldCBwaXNTaXplID0gcGlzLmxlbmd0aDtcclxuICAgICAgICBpZiAocHJvbXB0SW5kZXggPCBpICsgcGlzU2l6ZSkge1xyXG4gICAgICAgICAgdGhpcy5zZWN0SWR4ID0gc2k7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwSWR4SW5TZWN0aW9uPWdpO1xyXG4gICAgICAgICAgdGhpcy5wcm9tcHRJdGVtSWR4SW5Hcm91cCA9IHByb21wdEluZGV4IC0gaTtcclxuICAgICAgICAgIGZvdW5kPXRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaSArPSBwaXNTaXplO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYoZm91bmQpe1xyXG4gICAgICB0aGlzLl9wcm9tcHRJbmRleD1wcm9tcHRJbmRleDtcclxuICAgIH1lbHNle1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnRlcm5hbCBlcnJvcjogUHJvbXB0IGluZGV4IG5vdCBmb3VuZFwiKVxyXG4gICAgfVxyXG4gICAgdGhpcy5rZWVwTGl2ZUxldmVsPWZhbHNlO1xyXG4gICAgdGhpcy5hcHBseUl0ZW0oKTtcclxuICB9XHJcblxyXG4gIGl0ZW1TZWxlY3QoaXRlbUlkeDogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5zdGF0dXMgPT09IFN0YXR1cy5JRExFKSB7XHJcbiAgICAgIHRoaXMucHJvbXB0SW5kZXg9aXRlbUlkeDtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyUHJlUmVjVGltZXIoKSB7XHJcbiAgICBpZiAodGhpcy5wcmVSZWNUaW1lclJ1bm5pbmcpIHtcclxuICAgICAgaWYgKHRoaXMucHJlUmVjVGltZXJJZCkge1xyXG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5wcmVSZWNUaW1lcklkKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnByZVJlY1RpbWVyUnVubmluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhclBvc3RSZWNUaW1lcigpe1xyXG4gICAgaWYgKHRoaXMucG9zdFJlY1RpbWVyUnVubmluZykge1xyXG4gICAgICBpZiAodGhpcy5wb3N0UmVjVGltZXJJZCkge1xyXG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5wb3N0UmVjVGltZXJJZCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wb3N0UmVjVGltZXJSdW5uaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyTWF4UmVjVGltZXIoKXtcclxuICAgIGlmICh0aGlzLm1heFJlY1RpbWVyUnVubmluZykge1xyXG4gICAgICBpZiAodGhpcy5tYXhSZWNUaW1lcklkKSB7XHJcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLm1heFJlY1RpbWVySWQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubWF4UmVjVGltZXJSdW5uaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGFydEl0ZW0oKSB7XHJcbiAgICB0aGlzLnN0YXR1cz1TdGF0dXMuU1RBUlRJTkc7XHJcbiAgICBzdXBlci5zdGFydEl0ZW0oKTtcclxuICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzPVN0YXR1cy5JRExFO1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5md2RBY3Rpb24uZGlzYWJsZWQgPSB0cnVlXHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuZndkTmV4dEFjdGlvbi5kaXNhYmxlZCA9IHRydWVcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5id2RBY3Rpb24uZGlzYWJsZWQgPSB0cnVlXHJcbiAgICB0aGlzLnVwZGF0ZURpc3BsYXlSZWNGaWxlKG51bGwpO1xyXG4gICAgdGhpcy5kaXNwbGF5UmVjRmlsZVZlcnNpb24gPSAwO1xyXG4gICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwID0gbnVsbDtcclxuICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheS5yZXNldCh0cnVlKTtcclxuICAgIC8vIEhpZGUgbG9hZGluZyBoaW50IG9uIGxpdmVsZXZlbCBkaXNwbGF5XHJcbiAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXlTdGF0ZT1MaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuICAgIHRoaXMuc2hvd1JlY29yZGluZygpO1xyXG4gICAgaWYgKHRoaXMuc2VjdGlvbi5tb2RlID09PSAnQVVUT1JFQ09SRElORycpIHtcclxuICAgICAgdGhpcy5hdXRvcmVjb3JkaW5nID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN0YXJ0Q2FwdHVyZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgbG9hZFNjcmlwdCgpIHtcclxuICAgIHRoaXMucHJvbXB0SXRlbUNvdW50ID0gMDtcclxuXHJcbiAgICB0aGlzLml0ZW1zID0gbmV3IFNwckl0ZW1zQ2FjaGUoKTtcclxuICAgIGxldCBsbiA9IDA7XHJcblxyXG4gICAgLy9UT0RPIHJhbmRvbWl6ZSBub3Qgc3VwcG9ydGVkXHJcbiAgICBmb3IgKGxldCBzaSA9IDA7IHNpIDwgdGhpcy5fc2NyaXB0LnNlY3Rpb25zLmxlbmd0aDsgc2krKykge1xyXG4gICAgICBsZXQgc2VjdGlvbiA9IHRoaXMuX3NjcmlwdC5zZWN0aW9uc1tzaV07XHJcbiAgICAgIGxldCBncyA9IHNlY3Rpb24uX3NodWZmbGVkR3JvdXBzO1xyXG4gICAgICBmb3IobGV0IGdpPTA7Z2k8Z3MubGVuZ3RoO2dpKyspIHtcclxuXHJcbiAgICAgICAgICBsZXQgcGlzID0gZ3NbZ2ldLl9zaHVmZmxlZFByb21wdEl0ZW1zO1xyXG5cclxuICAgICAgICAgIGxldCBwaXNMZW4gPSBwaXMubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy5wcm9tcHRJdGVtQ291bnQgKz0gcGlzTGVuO1xyXG4gICAgICAgICAgZm9yIChsZXQgcGlTZWN0SWR4ID0gMDsgcGlTZWN0SWR4IDwgcGlzTGVuOyBwaVNlY3RJZHgrKykge1xyXG4gICAgICAgICAgICBsZXQgcGkgPSBwaXNbcGlTZWN0SWR4XTtcclxuICAgICAgICAgICAgbGV0IHByb21wdEFzU3RyID0gUHJvbXB0aXRlbVV0aWwudG9QbGFpblRleHRTdHJpbmcocGkpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGl0ID0gbmV3IEl0ZW0ocHJvbXB0QXNTdHIsIHNlY3Rpb24udHJhaW5pbmcsKCFwaS50eXBlIHx8IHBpLnR5cGU9PT0ncmVjb3JkaW5nJykpO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLmFkZEl0ZW0oaXQpO1xyXG4gICAgICAgICAgICBsbisrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm9tcHRJbmRleEJ5SXRlbWNvZGUoaXRlbWNvZGU6c3RyaW5nKTpudW1iZXJ8bnVsbHtcclxuICAgIGxldCBwaXggPSAwO1xyXG5cclxuICAgIGZvciAobGV0IHNpID0gMDsgc2kgPCB0aGlzLl9zY3JpcHQuc2VjdGlvbnMubGVuZ3RoOyBzaSsrKSB7XHJcbiAgICAgIGxldCBzZWN0aW9uID0gdGhpcy5fc2NyaXB0LnNlY3Rpb25zW3NpXTtcclxuICAgICAgbGV0IGdzID0gc2VjdGlvbi5fc2h1ZmZsZWRHcm91cHM7XHJcbiAgICAgIGZvcihsZXQgZ2k9MDtnaTxncy5sZW5ndGg7Z2krKykge1xyXG4gICAgICAgIGxldCBwaXM9Z3NbZ2ldLl9zaHVmZmxlZFByb21wdEl0ZW1zO1xyXG4gICAgICAgIGxldCBwaXNMZW4gPSBwaXMubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IHBpU2VjdElkeCA9IDA7IHBpU2VjdElkeCA8IHBpc0xlbjsgcGlTZWN0SWR4KyspIHtcclxuICAgICAgICAgIGxldCBwaSA9IHBpc1twaVNlY3RJZHhdO1xyXG4gICAgICAgICAgbGV0IGljPXBpLml0ZW1jb2RlO1xyXG4gICAgICAgICAgaWYoaWMgPT09IGl0ZW1jb2RlKXtcclxuICAgICAgICAgICAgcmV0dXJuIHBpeDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHBpeCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBjbGVhclByb21wdCgpIHtcclxuICAgIC8vdGhpcy5wcm9tcHRpbmcucHJvbXB0Q29udGFpbmVyLnByb21wdGVyLnByb21wdFRleHQ9Jyc7XHJcbiAgICAvL3RoaXMubWVkaWFpdGVtID0gbnVsbDtcclxuICAgIHRoaXMuc2hvd1Byb21wdCA9IGZhbHNlO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKClcclxuICB9XHJcblxyXG4gIGFwcGx5UHJvbXB0KCkge1xyXG4gICAgLy90aGlzLnByb21wdGluZy5wcm9tcHRDb250YWluZXIucHJvbXB0ZXIucHJvbXB0VGV4dD10aGlzLnByb21wdFVuaXQubWVkaWFpdGVtc1swXS50ZXh0O1xyXG4gICAgLy90aGlzLnByb21wdFRleHQgPSB0aGlzLnByb21wdFVuaXQubWVkaWFpdGVtc1swXS50ZXh0O1xyXG4gICAgLy90aGlzLm1lZGlhaXRlbT10aGlzLnByb21wdFVuaXQubWVkaWFpdGVtc1swXTtcclxuICAgIHRoaXMuc2hvd1Byb21wdCA9IHRydWU7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKVxyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRSZWNvcmRpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5kaXNwbGF5UmVjRmlsZSkge1xyXG4gICAgICBsZXQgYWRoOiBBdWRpb0RhdGFIb2xkZXIgfCBudWxsID0gdGhpcy5kaXNwbGF5UmVjRmlsZS5hdWRpb0RhdGFIb2xkZXI7XHJcbiAgICAgIGxldCBhczogQXVkaW9Tb3VyY2V8bnVsbD1udWxsO1xyXG4gICAgICBpZihhZGgpe1xyXG4gICAgICAgIGFzPWFkaC5hdWRpb1NvdXJjZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB3dyA9IG5ldyBXYXZXcml0ZXIoKTtcclxuICAgICAgaWYoYXMgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlclNvdXJjZSkge1xyXG4gICAgICAgIHd3LndyaXRlQXN5bmMoYXMuYXVkaW9CdWZmZXIsICh3YXZGaWxlKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3dhdkZpbGVdLCB7dHlwZTogJ2F1ZGlvL3dhdid9KTtcclxuICAgICAgICAgIGNvbnN0IHJmVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBkYXRhRG5sTG5rID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgICAgICAvL2RhdGFEbmxMbmsubmFtZSA9ICdSZWNvcmRpbmcnO1xyXG4gICAgICAgICAgZGF0YURubExuay5ocmVmID0gcmZVcmw7XHJcblxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5ib2R5LCBkYXRhRG5sTG5rKTtcclxuXHJcbiAgICAgICAgICAvLyBkb3dubG9hZCBwcm9wZXJ0eSBub3QgeWV0IGluIFRTIGRlZlxyXG4gICAgICAgICAgaWYgKHRoaXMuZGlzcGxheVJlY0ZpbGUpIHtcclxuICAgICAgICAgICAgbGV0IGZuID0gdGhpcy5kaXNwbGF5UmVjRmlsZS5maWxlbmFtZVN0cmluZygpO1xyXG4gICAgICAgICAgICBmbiArPSAnXycgKyB0aGlzLmRpc3BsYXlSZWNGaWxlVmVyc2lvbjtcclxuICAgICAgICAgICAgZm4gKz0gJy53YXYnO1xyXG4gICAgICAgICAgICBkYXRhRG5sTG5rLmRvd25sb2FkID0gZm47XHJcbiAgICAgICAgICAgIGRhdGFEbmxMbmsuY2xpY2soKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuYm9keSwgZGF0YURubExuayk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldCBkaXNwbGF5UmVjRmlsZShkaXNwbGF5UmVjRmlsZTogU3ByUmVjb3JkaW5nRmlsZSB8IG51bGwpIHtcclxuICAgIHRoaXMuX2Rpc3BsYXlSZWNGaWxlID0gZGlzcGxheVJlY0ZpbGU7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdXBkYXRlRGlzcGxheVJlY0ZpbGUoZGlzcGxheVJlY0ZpbGU6IFNwclJlY29yZGluZ0ZpbGUgfCBudWxsLGZldGNoQW5kQXBwbHlSZWNvcmRpbmdGaWxlOmJvb2xlYW49dHJ1ZSkge1xyXG4gICAgdGhpcy5kaXNwbGF5UmVjRmlsZT1kaXNwbGF5UmVjRmlsZTtcclxuICAgIGlmICh0aGlzLl9kaXNwbGF5UmVjRmlsZSkge1xyXG4gICAgICBpZih0aGlzLml0ZW1zKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5jdXJyZW50UmVjb3JkaW5nRmlsZSA9IHRoaXMuX2Rpc3BsYXlSZWNGaWxlO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBhZGg6IEF1ZGlvRGF0YUhvbGRlcnwgbnVsbCA9IHRoaXMuX2Rpc3BsYXlSZWNGaWxlLmF1ZGlvRGF0YUhvbGRlcjtcclxuICAgICAgaWYoYWRoKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwID0gbmV3IEF1ZGlvQ2xpcChhZGgpO1xyXG4gICAgICAgIGlmKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllcikge1xyXG4gICAgICAgICAgdGhpcy5fY29udHJvbEF1ZGlvUGxheWVyLmF1ZGlvQ2xpcCA9IHRoaXMuZGlzcGxheUF1ZGlvQ2xpcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zaG93UmVjb3JkaW5nKCk7XHJcbiAgICAgIH1lbHNlIHtcclxuICAgICAgICAvLyBjbGVhciBmb3Igbm93IC4uLlxyXG4gICAgICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCA9IG51bGw7XHJcbiAgICAgICAgaWYodGhpcy5jb250cm9sQXVkaW9QbGF5ZXIpIHtcclxuICAgICAgICAgIHRoaXMuY29udHJvbEF1ZGlvUGxheWVyLmF1ZGlvQ2xpcCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGZldGNoQW5kQXBwbHlSZWNvcmRpbmdGaWxlKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fY29udHJvbEF1ZGlvUGxheWVyICYmIHRoaXMuX3Nlc3Npb24pIHtcclxuICAgICAgICAgICAgLy8uLi4gYW5kIHRyeSB0byBmZXRjaCBmcm9tIHNlcnZlclxyXG4gICAgICAgICAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXlTdGF0ZSA9IExpdmVMZXZlbFN0YXRlLkxPQURJTkc7XHJcbiAgICAgICAgICAgIGNvbnN0IHJmID0gdGhpcy5fZGlzcGxheVJlY0ZpbGU7XHJcblxyXG4gICAgICAgICAgICBsZXQgYXVkaW9Eb3dubG9hZFR5cGUgPSB0aGlzLl9jbGllbnRBdWRpb1N0b3JhZ2VUeXBlO1xyXG4gICAgICAgICAgICBpZiAoQXVkaW9TdG9yYWdlVHlwZS5NRU1fRU5USVJFX0FVVE9fTkVUX0NIVU5LRUQgPT09IHRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGUgfHwgQXVkaW9TdG9yYWdlVHlwZS5NRU1fQ0hVTktFRF9BVVRPX05FVF9DSFVOS0VEID09PSB0aGlzLl9jbGllbnRBdWRpb1N0b3JhZ2VUeXBlKSB7XHJcbiAgICAgICAgICAgICAgLy8gRGVmYXVsdCBpcyBuZXR3b3JrIG1vZGVcclxuICAgICAgICAgICAgICBhdWRpb0Rvd25sb2FkVHlwZSA9IEF1ZGlvU3RvcmFnZVR5cGUuTkVUX0NIVU5LRUQ7XHJcbiAgICAgICAgICAgICAgaWYgKHJmLmNoYW5uZWxzICYmIHJmLmZyYW1lcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2FtcGxlcyA9IHJmLmNoYW5uZWxzICogcmYuZnJhbWVzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNhbXBsZXMgPD0gdGhpcy5fbWF4QXV0b05ldE1lbVN0b3JlU2FtcGxlcykge1xyXG4gICAgICAgICAgICAgICAgICAvLyBCdXQgaWYgYXVkaW8gZmlsZSBpcyBzbWFsbCwgbG9hZCBpbiBjb250aW51b3VzIHJlc3AuIGNodW5rZWQgbW9kZVxyXG4gICAgICAgICAgICAgICAgICBpZiAoQXVkaW9TdG9yYWdlVHlwZS5NRU1fRU5USVJFX0FVVE9fTkVUX0NIVU5LRUQgPT09IHRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBhdWRpb0Rvd25sb2FkVHlwZSA9IEF1ZGlvU3RvcmFnZVR5cGUuTUVNX0VOVElSRTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChBdWRpb1N0b3JhZ2VUeXBlLk1FTV9DSFVOS0VEX0FVVE9fTkVUX0NIVU5LRUQgPT09IHRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBhdWRpb0Rvd25sb2FkVHlwZSA9IEF1ZGlvU3RvcmFnZVR5cGUuTUVNX0NIVU5LRUQ7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhcIkF1ZGlvIGRvd25sb2FkIHR5cGU6IFwiICsgYXVkaW9Eb3dubG9hZFR5cGUpO1xyXG4gICAgICAgICAgICBpZiAoQXVkaW9TdG9yYWdlVHlwZS5EQl9DSFVOS0VEID09PSB0aGlzLl9jbGllbnRBdWRpb1N0b3JhZ2VUeXBlKSB7XHJcbiAgICAgICAgICAgICAgLy8gRmV0Y2ggY2h1bmtlZCBpbmRleGVkIGRiIGF1ZGlvIGJ1ZmZlclxyXG4gICAgICAgICAgICAgIGxldCBuZXh0SWFiOiBJbmRleGVkRGJBdWRpb0J1ZmZlciB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5fcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0Vycm9yOiBQZXJzaXN0ZW50IHN0b3JhZ2UgdGFyZ2V0IG5vdCBzZXQuJyk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkZldGNoIGF1ZGlvIGFuZCBzdG9yZSB0byBpbmRleGVkIGRiLi4uXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdWRpb0ZldGNoU3Vic2NyaXB0aW9uID0gdGhpcy5yZWNGaWxlU2VydmljZS5mZXRjaFNwclJlY29yZGluZ0ZpbGVJbmREYkF1ZGlvQnVmZmVyKHRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQsIHRoaXMuX3Nlc3Npb24ucHJvamVjdCwgcmYpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgIG5leHQ6IChpYWIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTZXNzaW9ubWFuYWdlcjogUmVjZWl2ZWQgaW5kZGIgYXVkaW8gYnVmZmVyOiBcIitpYWIpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHRJYWIgPSBpYWI7XHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmFiRGggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0SWFiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocmYgJiYgdGhpcy5pdGVtcykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmFiRGggPSBuZXcgQXVkaW9EYXRhSG9sZGVyKG5leHRJYWIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnNldFNwclJlY0ZpbGVBdWRpb0RhdGEocmYsIGZhYkRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIGFjdHVhbGx5IGJlIGhhbmRsZWQgYnkgdGhlIGVycm9yIHJlc29sdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdSZWNvcmRpbmcgZmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkLidcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmFiRGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCBjb3VsZCBoYXZlIGJlZW4gY2hhbmdlZCBtZWFud2hpbGUsIGJ1dCB0aGUgcmVjb3JkZXIgdW5zdWJjcmliZXMgYmVmb3JlIGNoYW5naW5nIHRoZSBpdGVtLCB0aGVyZWZvcmUgdGhlcmUgc2hvdWxkIGJlIG5vIHJpc2sgdG8gc2V0IHRvIHdyb25nIGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCA9IG5ldyBBdWRpb0NsaXAoZmFiRGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5hdWRpb0NsaXAgPSB0aGlzLmRpc3BsYXlBdWRpb0NsaXBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93UmVjb3JkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb3VsZCBub3QgbG9hZCByZWNvcmRpbmcgZmlsZSBmcm9tIHNlcnZlcjogXCIgKyBlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGxvYWRlZDogJyArIGVycjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChBdWRpb1N0b3JhZ2VUeXBlLk5FVF9DSFVOS0VEID09PSBhdWRpb0Rvd25sb2FkVHlwZSkge1xyXG4gICAgICAgICAgICAgIC8vIEZldGNoIGNodW5rZWQgYXVkaW8gYnVmZmVyIGZyb20gbmV0d29ya1xyXG4gICAgICAgICAgICAgIGxldCBuZXh0TmV0QWI6IE5ldEF1ZGlvQnVmZmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkZldGNoIGNodW5rZWQgYXVkaW8gZnJvbSBuZXR3b3JrXCIpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYXVkaW9GZXRjaFN1YnNjcmlwdGlvbiA9IHRoaXMucmVjRmlsZVNlcnZpY2UuZmV0Y2hTcHJSZWNvcmRpbmdGaWxlTmV0QXVkaW9CdWZmZXIoIHRoaXMuX3Nlc3Npb24ucHJvamVjdCwgcmYpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAobmV0QWIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU2Vzc2lvbm1hbmFnZXI6IFJlY2VpdmVkIG5ldCBhdWRpbyBidWZmZXI6IFwiK25ldEFiKTtcclxuICAgICAgICAgICAgICAgICAgbmV4dE5ldEFiID0gbmV0QWI7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuICAgICAgICAgICAgICAgICAgbGV0IGZhYkRoID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgaWYgKG5leHROZXRBYikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZiAmJiB0aGlzLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmYWJEaCA9IG5ldyBBdWRpb0RhdGFIb2xkZXIobmV4dE5ldEFiKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuc2V0U3ByUmVjRmlsZUF1ZGlvRGF0YShyZiwgZmFiRGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBTaG91bGQgYWN0dWFsbHkgYmUgaGFuZGxlZCBieSB0aGUgZXJyb3IgcmVzb2x2ZXJcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdSZWNvcmRpbmcgZmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkLidcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcidcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoZmFiRGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmRpc3BsYXlBdWRpb0NsaXAgY291bGQgaGF2ZSBiZWVuIGNoYW5nZWQgbWVhbndoaWxlLCBidXQgdGhlIHJlY29yZGVyIHVuc3ViY3JpYmVzIGJlZm9yZSBjaGFuZ2luZyB0aGUgaXRlbSwgdGhlcmVmb3JlIHRoZXJlIHNob3VsZCBiZSBubyByaXNrIHRvIHNldCB0byB3cm9uZyBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwic2V0IGRpc3BsYXlSZWNGaWxlKCk6IGZldGNoIG5ldCBhYiBjb21wbGV0ZSwgc2V0IGRpc3BsYXlBdWRpb0NsaXAuXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwID0gbmV3IEF1ZGlvQ2xpcChmYWJEaCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYodGhpcy5fY29udHJvbEF1ZGlvUGxheWVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udHJvbEF1ZGlvUGxheWVyLmF1ZGlvQ2xpcCA9IHRoaXMuZGlzcGxheUF1ZGlvQ2xpcDtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBsb2FkIHJlY29yZGluZyBmaWxlIGZyb20gc2VydmVyOiBcIiArIGVycik7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQ6ICcgKyBlcnI7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKEF1ZGlvU3RvcmFnZVR5cGUuTUVNX0NIVU5LRUQgPT09IGF1ZGlvRG93bmxvYWRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgLy8gRmV0Y2ggY2h1bmtlZCBhcnJheSBhdWRpbyBidWZmZXJcclxuICAgICAgICAgICAgICBsZXQgbmV4dEFhYjogQXJyYXlBdWRpb0J1ZmZlciB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkZldGNoIGF1ZGlvIGFuZCBzdG9yZSB0byAoY2h1bmtlZCkgYXJyYXkgYnVmZmVyLi4uXCIpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYXVkaW9GZXRjaFN1YnNjcmlwdGlvbiA9IHRoaXMucmVjRmlsZVNlcnZpY2UuZmV0Y2hTcHJSZWNvcmRpbmdGaWxlQXJyYXlBdWRpb0J1ZmZlciggdGhpcy5fc2Vzc2lvbi5wcm9qZWN0LCByZikuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChhYWIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgbmV4dEFhYiA9IGFhYjtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXlTdGF0ZSA9IExpdmVMZXZlbFN0YXRlLlJFQURZO1xyXG4gICAgICAgICAgICAgICAgICBsZXQgZmFiRGggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICBpZiAobmV4dEFhYikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZiAmJiB0aGlzLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmYWJEaCA9IG5ldyBBdWRpb0RhdGFIb2xkZXIobmV4dEFhYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnNldFNwclJlY0ZpbGVBdWRpb0RhdGEocmYsIGZhYkRoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIGFjdHVhbGx5IGJlIGhhbmRsZWQgYnkgdGhlIGVycm9yIHJlc29sdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGxvYWRlZC4nXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKGZhYkRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5kaXNwbGF5QXVkaW9DbGlwIGNvdWxkIGhhdmUgYmVlbiBjaGFuZ2VkIG1lYW53aGlsZSwgYnV0IHRoZSByZWNvcmRlciB1bnN1YmNyaWJlcyBiZWZvcmUgY2hhbmdpbmcgdGhlIGl0ZW0sIHRoZXJlZm9yZSB0aGVyZSBzaG91bGQgYmUgbm8gcmlzayB0byBzZXQgdG8gd3JvbmcgaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCA9IG5ldyBBdWRpb0NsaXAoZmFiRGgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5hdWRpb0NsaXAgPSB0aGlzLmRpc3BsYXlBdWRpb0NsaXBcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBsb2FkIHJlY29yZGluZyBmaWxlIGZyb20gc2VydmVyOiBcIiArIGVycik7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQ6ICcgKyBlcnI7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gRmV0Y2ggcmVndWxhciBhdWRpbyBidWZmZXJcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJGZXRjaCBhdWRpbyBhbmQgc3RvcmUgdG8gYXVkaW8gYnVmZmVyLi4uXCIpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYXVkaW9GZXRjaFN1YnNjcmlwdGlvbiA9IHRoaXMucmVjRmlsZVNlcnZpY2UuZmV0Y2hTcHJSZWNvcmRpbmdGaWxlQXVkaW9CdWZmZXIoIHRoaXMuX3Nlc3Npb24ucHJvamVjdCwgcmYpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAoYWIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuICAgICAgICAgICAgICAgICAgbGV0IGZhYkRoID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgaWYgKGFiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJmICYmIHRoaXMuaXRlbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChTZXNzaW9uTWFuYWdlci5GT1JDRV9BUlJSQVlfQVVESU9fQlVGRkVSKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhYWIgPSBBcnJheUF1ZGlvQnVmZmVyLmZyb21BdWRpb0J1ZmZlcihhYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhYkRoID0gbmV3IEF1ZGlvRGF0YUhvbGRlcihhYWIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmFiRGggPSBuZXcgQXVkaW9EYXRhSG9sZGVyKG5ldyBBdWRpb0J1ZmZlclNvdXJjZShhYikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5zZXRTcHJSZWNGaWxlQXVkaW9EYXRhKHJmLCBmYWJEaCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNob3VsZCBhY3R1YWxseSBiZSBoYW5kbGVkIGJ5IHRoZSBlcnJvciByZXNvbHZlclxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQuJ1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJ1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmIChmYWJEaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCBjb3VsZCBoYXZlIGJlZW4gY2hhbmdlZCBtZWFud2hpbGUsIGJ1dCB0aGUgcmVjb3JkZXIgdW5zdWJjcmliZXMgYmVmb3JlIGNoYW5naW5nIHRoZSBpdGVtLCB0aGVyZWZvcmUgdGhlcmUgc2hvdWxkIGJlIG5vIHJpc2sgdG8gc2V0IHRvIHdyb25nIGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlBdWRpb0NsaXAgPSBuZXcgQXVkaW9DbGlwKGZhYkRoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZih0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIuYXVkaW9DbGlwID0gdGhpcy5kaXNwbGF5QXVkaW9DbGlwXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5zaG93UmVjb3JkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9LCBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBsb2FkIHJlY29yZGluZyBmaWxlIGZyb20gc2VydmVyOiBcIiArIGVycik7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQ6ICcgKyBlcnI7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGRlY29kZWQuIEF1ZGlvIGNvbnRleHQgdW5hdmFpbGFibGUuJ1xyXG4gICAgICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcidcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRpc3BsYXlBdWRpb0NsaXAgPSBudWxsO1xyXG4gICAgICBpZih0aGlzLmNvbnRyb2xBdWRpb1BsYXllcikge1xyXG4gICAgICAgIHRoaXMuY29udHJvbEF1ZGlvUGxheWVyLmF1ZGlvQ2xpcCA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBkaXNwbGF5UmVjRmlsZSgpOiBTcHJSZWNvcmRpbmdGaWxlIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheVJlY0ZpbGU7XHJcbiAgfVxyXG5cclxuICBpc1JlY29yZGluZ0l0ZW0oKTpib29sZWFue1xyXG4gICAgcmV0dXJuKHRoaXMucHJvbXB0SXRlbSE9bnVsbCAmJiB0aGlzLnByb21wdEl0ZW0udHlwZSE9PSdub25yZWNvcmRpbmcnKVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlU3RhcnRBY3Rpb25EaXNhYmxlU3RhdGUoKXtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5kaXNhYmxlZD0hKHRoaXMuYWMgICYmIHRoaXMuaXNSZWNvcmRpbmdJdGVtKCkpO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlJdGVtKHRlbXBvcmFyeT1mYWxzZSkge1xyXG5cclxuICAgIHRoaXMuc2VjdGlvbiA9IHRoaXMuX3NjcmlwdC5zZWN0aW9uc1t0aGlzLnNlY3RJZHhdXHJcbiAgICB0aGlzLmdyb3VwID0gdGhpcy5zZWN0aW9uLl9zaHVmZmxlZEdyb3Vwc1t0aGlzLmdyb3VwSWR4SW5TZWN0aW9uXTtcclxuICAgIHRoaXMucHJvbXB0SXRlbSA9IHRoaXMuZ3JvdXAuX3NodWZmbGVkUHJvbXB0SXRlbXNbdGhpcy5wcm9tcHRJdGVtSWR4SW5Hcm91cF07XHJcblxyXG4gICAgLy90aGlzLnNlbGVjdGVkSXRlbUlkeCA9IHRoaXMucHJvbXB0SW5kZXg7XHJcblxyXG4gICAgaWYodGhpcy5hdWRpb0ZldGNoU3Vic2NyaXB0aW9uKXtcclxuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiVW5zdWJzY3JpYmUgZnJvbSBhdWRpbyBmZXRjaC5cIik7XHJcbiAgICAgIHRoaXMuYXVkaW9GZXRjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0ZW1wb3JhcnkpIHtcclxuICAgICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwPW51bGw7XHJcbiAgICAgIHRoaXMuc2hvd1JlY29yZGluZygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGU9TGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcblxyXG4gICAgdGhpcy5jbGVhclByb21wdCgpO1xyXG5cclxuICAgIGNvbnN0IGlzTm9ucmVjb3JkaW5nPSh0aGlzLnByb21wdEl0ZW0udHlwZT09PSdub25yZWNvcmRpbmcnKTtcclxuXHJcbiAgICBpZiAoaXNOb25yZWNvcmRpbmcgfHwgIXRoaXMuc2VjdGlvbi5wcm9tcHRwaGFzZSB8fCB0aGlzLnNlY3Rpb24ucHJvbXB0cGhhc2UgPT09ICdJRExFJykge1xyXG4gICAgICB0aGlzLmFwcGx5UHJvbXB0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoaXNOb25yZWNvcmRpbmcpe1xyXG4gICAgICB0aGlzLnVwZGF0ZURpc3BsYXlSZWNGaWxlKG51bGwpO1xyXG4gICAgICB0aGlzLmRpc3BsYXlSZWNGaWxlVmVyc2lvbiA9IDA7XHJcbiAgICAgIHRoaXMuc3RhcnRTdG9wU2lnbmFsU3RhdGUgPSBTdGFydFN0b3BTaWduYWxTdGF0ZS5PRkY7XHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLml0ZW1zKSB7XHJcbiAgICAgICAgbGV0IGl0ID0gdGhpcy5pdGVtcy5nZXRJdGVtKHRoaXMucHJvbXB0SW5kZXgpO1xyXG4gICAgICAgIGlmICghaXQucmVjcykge1xyXG4gICAgICAgICAgaXQucmVjcyA9IG5ldyBBcnJheTxTcHJSZWNvcmRpbmdGaWxlPigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHJlY2VudFJlY0ZpbGU6IFNwclJlY29yZGluZ0ZpbGUgfCBudWxsID0gbnVsbDtcclxuICAgICAgICBsZXQgYXZhaWxSZWNmaWxlczogbnVtYmVyID0gaXQucmVjcy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGF2YWlsUmVjZmlsZXMgPiAwKSB7XHJcbiAgICAgICAgICBsZXQgcmZWZXJzOiBudW1iZXIgPSBhdmFpbFJlY2ZpbGVzIC0gMTtcclxuICAgICAgICAgIHJlY2VudFJlY0ZpbGUgPSBpdC5yZWNzW3JmVmVyc107XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlSZWNGaWxlKHJlY2VudFJlY0ZpbGUsIXRlbXBvcmFyeSk7XHJcbiAgICAgICAgICB0aGlzLmRpc3BsYXlSZWNGaWxlVmVyc2lvbiA9IHJmVmVycztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheVJlY0ZpbGUobnVsbCk7XHJcbiAgICAgICAgICB0aGlzLmRpc3BsYXlSZWNGaWxlVmVyc2lvbiA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmKCF0aGlzLnJlYWRvbmx5KSB7XHJcbiAgICAgICAgdGhpcy5zdGFydFN0b3BTaWduYWxTdGF0ZSA9IFN0YXJ0U3RvcFNpZ25hbFN0YXRlLklETEU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUuZGVidWcoXCJhcHBseUl0ZW0oKTogdGVtcG9yYXJ5OiBcIit0ZW1wb3JhcnkpO1xyXG4gICAgLy9pZiAoIXRlbXBvcmFyeSkge1xyXG4gICAgLy8gICBjb25zb2xlLmRlYnVnKFwiYXBwbHlJdGVtKCk6IENhbGwgc2hvd1JlY29yZGluZygpOiBkaXNwbGF5QXVkaW9DbGlwOiBcIit0aGlzLmRpc3BsYXlBdWRpb0NsaXApO1xyXG4gICAgICAvL3RoaXMuc2hvd1JlY29yZGluZygpO1xyXG4gICAgLy99XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXJ0QWN0aW9uRGlzYWJsZVN0YXRlKClcclxuICAgIHRoaXMudXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKVxyXG4gIH1cclxuXHJcblxyXG4gIHN0YXJ0KCkge1xyXG4gICAgc3VwZXIuc3RhcnQoKTtcclxuICAgIGlmKHRoaXMucHJvbXB0SXRlbUNvdW50PjApIHtcclxuICAgICAgdGhpcy5wcm9tcHRJbmRleCA9IDA7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVuYWJsZU5hdmlnYXRpb24oKVxyXG4gIH1cclxuXHJcbiAgaXNSZWNvcmRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHRoaXMuc3RhdHVzID09PSBTdGF0dXMuUFJFX1JFQ09SRElORyB8fCB0aGlzLnN0YXR1cyA9PT0gU3RhdHVzLlJFQ09SRElORyB8fCB0aGlzLnN0YXR1cyA9PT0gU3RhdHVzLlBPU1RfUkVDX1NUT1AgfHwgdGhpcy5zdGF0dXMgPT09IFN0YXR1cy5QT1NUX1JFQ19QQVVTRSB8fCB0aGlzLnN0YXR1cz09PVN0YXR1cy5TVE9QUElOR19TVE9QKTtcclxuICB9XHJcblxyXG4gIGlzQWN0aXZlKCk6IGJvb2xlYW57XHJcbiAgICByZXR1cm4gKCEodGhpcy5zdGF0dXMgPT09IFN0YXR1cy5CTE9DS0VEIHx8IHRoaXMuc3RhdHVzPT09IFN0YXR1cy5JRExFIHx8IHRoaXMuc3RhdHVzPT09U3RhdHVzLkVSUk9SKSB8fCB0aGlzLnByb2Nlc3NpbmdSZWNvcmRpbmcgfHwgdGhpcy5zZXNzaW9uU2VydmljZS51cGxvYWRDb3VudD4wKVxyXG4gIH1cclxuXHJcbiAgICBwcmV2SXRlbSgpIHtcclxuICAgICAgIGxldCBuZXdQcklkeD10aGlzLl9wcm9tcHRJbmRleDtcclxuICAgICAgIG5ld1BySWR4LS07XHJcbiAgICAgICBpZihuZXdQcklkeDwwKXtcclxuICAgICAgICAgbmV3UHJJZHg9dGhpcy5wcm9tcHRJdGVtQ291bnQtMTtcclxuICAgICAgIH1cclxuICAgICAgIHRoaXMucHJvbXB0SW5kZXg9bmV3UHJJZHg7XHJcbiAgICAgIC8vdGhpcy51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpXHJcbiAgICB9XHJcblxyXG5cclxuICBuZXh0SXRlbSgpIHtcclxuICAgIGxldCBuZXdQcklkeD10aGlzLl9wcm9tcHRJbmRleDtcclxuICAgIG5ld1BySWR4Kys7XHJcbiAgICBpZihuZXdQcklkeD49dGhpcy5wcm9tcHRJdGVtQ291bnQpe1xyXG4gICAgICBuZXdQcklkeD0wO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9tcHRJbmRleD1uZXdQcklkeDtcclxuICAgIC8vdGhpcy51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpe1xyXG4gICAgbGV0IGZ3ZE54dEFjdGlvbkRpc2FibGVkPXRydWU7XHJcbiAgICBpZih0aGlzLml0ZW1zKXtcclxuICAgICAgbGV0IGN1cnJSZWNzPXRoaXMuaXRlbXMuZ2V0SXRlbSh0aGlzLl9wcm9tcHRJbmRleCkucmVjcztcclxuICAgICAgZndkTnh0QWN0aW9uRGlzYWJsZWQ9ICEgKGN1cnJSZWNzIT1udWxsICYmIGN1cnJSZWNzLmxlbmd0aD4wKTtcclxuICAgIH1cclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5md2ROZXh0QWN0aW9uLmRpc2FibGVkID0gdGhpcy5uYXZpZ2F0aW9uRGlzYWJsZWQgfHwgZndkTnh0QWN0aW9uRGlzYWJsZWQ7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuZndkQWN0aW9uLmRpc2FibGVkID0gdGhpcy5uYXZpZ2F0aW9uRGlzYWJsZWQ7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuYndkQWN0aW9uLmRpc2FibGVkID0gdGhpcy5uYXZpZ2F0aW9uRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBuZXh0VW5yZWNvcmRlZEl0ZW0oKSB7XHJcbiAgICBsZXQgbmV3UHJJZHggPSB0aGlzLl9wcm9tcHRJbmRleDtcclxuICAgIG5ld1BySWR4Kys7XHJcbiAgICBpZiAobmV3UHJJZHggPj0gdGhpcy5wcm9tcHRJdGVtQ291bnQpIHtcclxuICAgICAgbmV3UHJJZHggPSAwO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5pdGVtcyE9bnVsbCkge1xyXG4gICAgICBsZXQgaXQ9dGhpcy5pdGVtcy5nZXRJdGVtKG5ld1BySWR4KTtcclxuICAgICAgd2hpbGUgKCghaXQucmVjb3JkaW5nIHx8IGl0Lml0ZW1Eb25lKCkpICYmIG5ld1BySWR4IDwgdGhpcy5wcm9tcHRJdGVtQ291bnQpIHtcclxuICAgICAgICBuZXdQcklkeCsrO1xyXG4gICAgICAgIGl0PXRoaXMuaXRlbXMuZ2V0SXRlbShuZXdQcklkeCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFpdC5pdGVtRG9uZSgpKSB7XHJcbiAgICAgICAgdGhpcy5wcm9tcHRJbmRleCA9IG5ld1BySWR4O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbmFibGVTdGFydFVzZXJHZXN0dXJlKCkge1xyXG4gICAgc3VwZXIuZW5hYmxlU3RhcnRVc2VyR2VzdHVyZSgpO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0YXJ0QWN0aW9uLmRpc2FibGVkPSEodGhpcy5hYyAmJiB0aGlzLmlzUmVjb3JkaW5nSXRlbSgpKTtcclxuICB9XHJcblxyXG4gIGVuYWJsZU5hdmlnYXRpb24oKXtcclxuICAgIHRoaXMubmF2aWdhdGlvbkRpc2FibGVkPWZhbHNlO1xyXG4gICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRlZCgpIHtcclxuICAgIGxldCBpYyA9IHRoaXMucHJvbXB0SXRlbS5pdGVtY29kZTtcclxuICAgIGxldCByZj1udWxsO1xyXG5cclxuICAgIGlmICh0aGlzLl9zZXNzaW9uICYmIGljKSB7XHJcbiAgICAgIGxldCBzZXNzSWQ6IHN0cmluZyB8IG51bWJlciA9IHRoaXMuX3Nlc3Npb24uc2Vzc2lvbklkO1xyXG4gICAgICBsZXQgY3BJZHggPSB0aGlzLnByb21wdEluZGV4O1xyXG4gICAgICBpZiAodGhpcy5pdGVtcykge1xyXG4gICAgICAgIGxldCBpdCA9IHRoaXMuaXRlbXMuZ2V0SXRlbShjcElkeCk7XHJcbiAgICAgICAgaWYgKCFpdC5yZWNzKSB7XHJcbiAgICAgICAgICBpdC5yZWNzID0gbmV3IEFycmF5PFNwclJlY29yZGluZ0ZpbGU+KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJmID0gbmV3IFNwclJlY29yZGluZ0ZpbGUoc2Vzc0lkLCBpYywgaXQucmVjcy5sZW5ndGgsbnVsbCk7XHJcbiAgICAgICAgcmYudXVpZD10aGlzLnJmVXVpZDtcclxuICAgICAgICAvL2l0LnJlY3MucHVzaChyZik7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5hZGRTcHJSZWNGaWxlKGl0LHJmKTtcclxuICAgICAgICB0aGlzLml0ZW1zLmN1cnJlbnRSZWNvcmRpbmdGaWxlPXJmO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yZWNvcmRpbmdGaWxlID0gcmY7XHJcbiAgICB0aGlzLnN0YXR1cyA9IFN0YXR1cy5QUkVfUkVDT1JESU5HO1xyXG4gICAgc3VwZXIuc3RhcnRlZCgpO1xyXG5cclxuICAgIHRoaXMuc3RhcnRTdG9wU2lnbmFsU3RhdGUgPSBTdGFydFN0b3BTaWduYWxTdGF0ZS5QUkVSRUNPUkRJTkc7XHJcbiAgICBpZih0aGlzLl9zZXNzaW9uKSB7XHJcbiAgICAgIGlmICh0aGlzLl9zZXNzaW9uLnN0YXR1cyA9PT0gXCJMT0FERURcIikge1xyXG4gICAgICAgIGxldCBib2R5OiBhbnkgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5zZWN0aW9uLnRyYWluaW5nKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uLnN0YXR1cyA9IFwiU1RBUlRFRF9UUkFJTklOR1wiXHJcbiAgICAgICAgICBib2R5LnN0YXR1cyA9IHRoaXMuX3Nlc3Npb24uc3RhdHVzO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9zZXNzaW9uLnN0YXJ0ZWRUcmFpbmluZ0RhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbi5zdGFydGVkVHJhaW5pbmdEYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgYm9keS5zdGFydGVkVHJhaW5pbmdEYXRlID0gdGhpcy5fc2Vzc2lvbi5zdGFydGVkVHJhaW5pbmdEYXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uLnN0YXR1cyA9IFwiU1RBUlRFRFwiXHJcbiAgICAgICAgICBib2R5LnN0YXR1cyA9IHRoaXMuX3Nlc3Npb24uc3RhdHVzO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9zZXNzaW9uLnN0YXJ0ZWREYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb24uc3RhcnRlZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICBib2R5LnN0YXJ0ZWREYXRlID0gdGhpcy5fc2Vzc2lvbi5zdGFydGVkRGF0ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5wYXRjaFNlc3Npb25PYnNlcnZlcih0aGlzLl9zZXNzaW9uLCBib2R5KS5zdWJzY3JpYmUoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zZWN0aW9uLnByb21wdHBoYXNlID09PSAnUFJFUkVDT1JESU5HJyB8fCB0aGlzLnNlY3Rpb24ucHJvbXB0cGhhc2UgPT09ICdQUkVSRUNPUkRJTkdPTkxZJykge1xyXG4gICAgICB0aGlzLmFwcGx5UHJvbXB0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdpbmZvJztcclxuICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZy4uLic7XHJcblxyXG4gICAgbGV0IHByZURlbGF5ID0gREVGQVVMVF9QUkVfUkVDX0RFTEFZO1xyXG4gICAgaWYgKHRoaXMucHJvbXB0SXRlbS5wcmVyZWNkZWxheSE9bnVsbCkge1xyXG4gICAgICBwcmVEZWxheSA9IHRoaXMucHJvbXB0SXRlbS5wcmVyZWNkZWxheTtcclxuICAgIH1lbHNlIGlmICh0aGlzLnByb21wdEl0ZW0ucHJlcmVjb3JkaW5nIT1udWxsKSB7XHJcbiAgICAgIHByZURlbGF5ID0gdGhpcy5wcm9tcHRJdGVtLnByZXJlY29yZGluZztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBvc3REZWxheT1ERUZBVUxUX1BPU1RfUkVDX0RFTEFZO1xyXG4gICAgaWYodGhpcy5wcm9tcHRJdGVtLnBvc3RyZWNkZWxheSE9bnVsbCl7XHJcbiAgICAgIHRoaXMucG9zdERlbGF5PXRoaXMucHJvbXB0SXRlbS5wb3N0cmVjZGVsYXk7XHJcbiAgICB9ZWxzZSBpZih0aGlzLnByb21wdEl0ZW0ucG9zdHJlY29yZGluZyE9bnVsbCl7XHJcbiAgICAgIHRoaXMucG9zdERlbGF5PXRoaXMucHJvbXB0SXRlbS5wb3N0cmVjb3JkaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBtYXhSZWNvcmRpbmdUaW1lTXMgPSBNQVhfUkVDT1JESU5HX1RJTUVfTVM7XHJcbiAgICBpZiAodGhpcy5wcm9tcHRJdGVtLnJlY2R1cmF0aW9uIT09bnVsbCAmJiB0aGlzLnByb21wdEl0ZW0ucmVjZHVyYXRpb24hPT11bmRlZmluZWQpIHtcclxuICAgICAgbWF4UmVjb3JkaW5nVGltZU1zID0gcHJlRGVsYXkrdGhpcy5wcm9tcHRJdGVtLnJlY2R1cmF0aW9uK3RoaXMucG9zdERlbGF5O1xyXG4gICAgfVxyXG4gICAgdGhpcy5tYXhSZWNUaW1lcklkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnN0b3BSZWNvcmRpbmdNYXhSZWMoKVxyXG4gICAgfSwgbWF4UmVjb3JkaW5nVGltZU1zKTtcclxuICAgIHRoaXMubWF4UmVjVGltZXJSdW5uaW5nID0gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIHRoaXMucHJlUmVjVGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgIHRoaXMucHJlUmVjVGltZXJSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLlJFQ09SRElORztcclxuICAgICAgdGhpcy5zdGFydFN0b3BTaWduYWxTdGF0ZSA9IFN0YXJ0U3RvcFNpZ25hbFN0YXRlLlJFQ09SRElORztcclxuICAgICAgaWYgKHRoaXMuc2VjdGlvbi5tb2RlID09PSAnQVVUT1JFQ09SRElORycpIHtcclxuICAgICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5wYXVzZUFjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdG9wQWN0aW9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc2VjdGlvbi5wcm9tcHRwaGFzZSA9PT0gJ1JFQ09SRElORycpIHtcclxuICAgICAgICB0aGlzLmFwcGx5UHJvbXB0KCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc2VjdGlvbi5wcm9tcHRwaGFzZSA9PT0gJ1BSRVJFQ09SRElOR09OTFknKXtcclxuICAgICAgICB0aGlzLmNsZWFyUHJvbXB0KCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9LCBwcmVEZWxheSk7XHJcbiAgICB0aGlzLnByZVJlY1RpbWVyUnVubmluZyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzdG9wSXRlbSgpIHtcclxuICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLlBPU1RfUkVDX1NUT1A7XHJcbiAgICB0aGlzLnN0YXJ0U3RvcFNpZ25hbFN0YXRlID0gU3RhcnRTdG9wU2lnbmFsU3RhdGUuUE9TVFJFQ09SRElORztcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdG9wQWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5uZXh0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuY2xlYXJQcmVSZWNUaW1lcigpO1xyXG4gICAgdGhpcy5wb3N0UmVjVGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5wb3N0UmVjVGltZXJSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLlNUT1BQSU5HX1NUT1A7XHJcbiAgICAgIHRoaXMuc3RvcFJlY29yZGluZygpO1xyXG4gICAgfSwgdGhpcy5wb3N0RGVsYXkpO1xyXG4gICAgdGhpcy5wb3N0UmVjVGltZXJSdW5uaW5nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHBhdXNlSXRlbSgpIHtcclxuICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLlBPU1RfUkVDX1BBVVNFO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhcnRTdG9wU2lnbmFsU3RhdGUgPSBTdGFydFN0b3BTaWduYWxTdGF0ZS5QT1NUUkVDT1JESU5HO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLm5leHRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuY2xlYXJQcmVSZWNUaW1lcigpO1xyXG4gICAgdGhpcy5wb3N0UmVjVGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5wb3N0UmVjVGltZXJSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLlNUT1BQSU5HX1BBVVNFO1xyXG4gICAgICB0aGlzLnN0b3BSZWNvcmRpbmcoKTtcclxuICAgIH0sIHRoaXMucG9zdERlbGF5KTtcclxuICAgIHRoaXMucG9zdFJlY1RpbWVyUnVubmluZyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzdG9wUmVjb3JkaW5nKCkge1xyXG4gICAgdGhpcy5jbGVhck1heFJlY1RpbWVyKCk7XHJcbiAgICBpZih0aGlzLmFjKSB7XHJcbiAgICAgIHRoaXMuYWMuc3RvcCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RvcFJlY29yZGluZ01heFJlYygpe1xyXG4gICAgdGhpcy5jbGVhclByZVJlY1RpbWVyKCk7XHJcbiAgICB0aGlzLmNsZWFyUG9zdFJlY1RpbWVyKCk7XHJcbiAgICB0aGlzLm1heFJlY1RpbWVyUnVubmluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuU1RPUFBJTkdfU1RPUDtcclxuICAgIGlmKHRoaXMuYWMpIHtcclxuICAgICAgdGhpcy5hYy5zdG9wKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRSZWNvcmRpbmdGaWxlQnlEZXNjcmlwdG9yKHJmZDpSZWNvcmRpbmdGaWxlRGVzY3JpcHRvckltcGwpe1xyXG4gICAgaWYocmZkLnJlY29yZGluZyAmJiByZmQucmVjb3JkaW5nLml0ZW1jb2RlKSB7XHJcbiAgICAgIGxldCBwcklkeCA9IHRoaXMucHJvbXB0SW5kZXhCeUl0ZW1jb2RlKHJmZC5yZWNvcmRpbmcuaXRlbWNvZGUpO1xyXG4gICAgICBpZiAodGhpcy5pdGVtcyE9bnVsbCAmJiBwcklkeCAhPT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBpdCA9IHRoaXMuaXRlbXMuZ2V0SXRlbShwcklkeCk7XHJcbiAgICAgICAgaWYgKGl0ICYmIHRoaXMuX3Nlc3Npb24pIHtcclxuICAgICAgICAgIC8vIGlmICghaXQucmVjcykge1xyXG4gICAgICAgICAgLy8gICBpdC5yZWNzID0gbmV3IEFycmF5PFNwclJlY29yZGluZ0ZpbGU+KCk7XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICBsZXQgcmYgPSBuZXcgU3ByUmVjb3JkaW5nRmlsZSh0aGlzLl9zZXNzaW9uLnNlc3Npb25JZCwgcmZkLnJlY29yZGluZy5pdGVtY29kZSwgcmZkLnZlcnNpb24sIG51bGwpO1xyXG4gICAgICAgICAgcmYuc2VydmVyUGVyc2lzdGVkPXRydWU7XHJcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJhZGRSZWNvcmRpbmdGaWxlQnlEZXNjcmlwdG9yKCk6IHNyOiBcIityZmQuc2FtcGxlcmF0ZStcIiwgZnJhbWVzOiBcIityZmQuZnJhbWVzKTtcclxuICAgICAgICAgIGlmKHJmZC5zYW1wbGVyYXRlICYmIHJmZC5mcmFtZXMpe1xyXG4gICAgICAgICAgICByZi5zYW1wbGVyYXRlPXJmZC5zYW1wbGVyYXRlO1xyXG4gICAgICAgICAgICByZi5mcmFtZXM9cmZkLmZyYW1lcztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKHJmZC5jaGFubmVscyl7XHJcbiAgICAgICAgICAgIHJmLmNoYW5uZWxzPXJmZC5jaGFubmVscztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuaXRlbXMuYWRkU3ByUmVjRmlsZShpdCxyZik7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJXQVJOOiBObyByZWNvcmRpbmcgaXRlbSB3aXRoIGNvZGU6IFxcXCJcIiArcmZkLnJlY29yZGluZy5pdGVtY29kZSsgXCJcXFwiIGZvdW5kLlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiV0FSTjogTm8gcmVjb3JkaW5nIGl0ZW0gd2l0aCBjb2RlOiBcXFwiXCIgK3JmZC5yZWNvcmRpbmcuaXRlbWNvZGUrIFwiXFxcIiBmb3VuZC5cIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGFkZFJlY29yZGluZ0ZpbGVCeVByb21wdEluZGV4KHByb21wdEluZGV4Om51bWJlciwgcmY6U3ByUmVjb3JkaW5nRmlsZSl7XHJcbiAgLy9cclxuICAvLyB9XHJcblxyXG5cclxuICBzdG9wcGVkKCkge1xyXG4gICAgdGhpcy5jbGVhclByZVJlY1RpbWVyKCk7XHJcbiAgICB0aGlzLmNsZWFyUG9zdFJlY1RpbWVyKCk7XHJcbiAgICB0aGlzLmNsZWFyTWF4UmVjVGltZXIoKTtcclxuICAgIHRoaXMudXBkYXRlU3RhcnRBY3Rpb25EaXNhYmxlU3RhdGUoKVxyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLm5leHRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkZWQuJztcclxuICAgIHRoaXMuc3RhcnRTdG9wU2lnbmFsU3RhdGUgPSBTdGFydFN0b3BTaWduYWxTdGF0ZS5JRExFO1xyXG5cclxuICAgICAgbGV0IGFkaDpBdWRpb0RhdGFIb2xkZXJ8bnVsbD1udWxsO1xyXG4gICAgICBsZXQgYXM6QXVkaW9Tb3VyY2V8bnVsbD1udWxsO1xyXG4gICAgIGxldCBhYjpBdWRpb0J1ZmZlcnxudWxsPW51bGw7XHJcbiAgICAgIGlmKHRoaXMuYWMpIHtcclxuICAgICAgICBpZiAoQXVkaW9TdG9yYWdlVHlwZS5ORVRfQ0hVTktFRCA9PT0gdGhpcy5hYy5hdWRpb1N0b3JhZ2VUeXBlKSB7XHJcbiAgICAgICAgICB0aGlzLnBsYXlTdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmtlZXBMaXZlTGV2ZWw9dHJ1ZTtcclxuICAgICAgICAgIGxldCBidXJsOnN0cmluZ3xudWxsPW51bGw7XHJcbiAgICAgICAgICBpZih0aGlzLl9zZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9kaXNwbGF5UmVjRmlsZSkge1xyXG4gICAgICAgICAgICAgIC8vIFRPRE8gaXMgdGhpcyBicmFuY2ggZXZlciBjYWxsZWQgP1xyXG4gICAgICAgICAgICAgIGxldCByZiA9IHRoaXMuX2Rpc3BsYXlSZWNGaWxlO1xyXG4gICAgICAgICAgICAgIHJmLmZyYW1lcyA9IHRoaXMuYWMuZnJhbWVzUmVjb3JkZWQ7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwic3RvcHBlZCgpOiBTZXQgZnJhbWVzOiBcIityZi5mcmFtZXMrXCIgb24gcmZJZDogXCIrdGhpcy5kaXNwbGF5UmVjRmlsZT8ucmVjb3JkaW5nRmlsZUlkKTtcclxuICAgICAgICAgICAgICBidXJsID0gdGhpcy5yZWNGaWxlU2VydmljZS5zcHJBdWRpb0ZpbGVVcmwodGhpcy5fc2Vzc2lvbj8ucHJvamVjdCwgcmYpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2Vzc2lvbj8ucHJvamVjdCAmJiB0aGlzLl9yZWNvcmRpbmdGaWxlICYmIHRoaXMuX3JlY29yZGluZ0ZpbGUgaW5zdGFuY2VvZiBTcHJSZWNvcmRpbmdGaWxlKSB7XHJcbiAgICAgICAgICAgICAgYnVybCA9IHRoaXMucmVjRmlsZVNlcnZpY2Uuc3ByQXVkaW9GaWxlVXJsQnlJdGVtY29kZSh0aGlzLnNlc3Npb24/LnByb2plY3QsIHRoaXMuc2Vzc2lvbj8uc2Vzc2lvbklkLCB0aGlzLl9yZWNvcmRpbmdGaWxlLml0ZW1Db2RlLCB0aGlzLl9yZWNvcmRpbmdGaWxlLnZlcnNpb24pO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IGNyZWF0ZSBuZXQgYXVkaW8gYnVmZmVyLlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYnVybCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJVVUlEID0gdGhpcy5hYy5yZWNVVUlEO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHNyID0gdGhpcy5hYy5jdXJyZW50U2FtcGxlUmF0ZTtcclxuICAgICAgICAgICAgICBjb25zdCBjaEZsPXNyKlJlY29yZGluZ1NlcnZpY2UuREVGQVVMVF9DSFVOS0VEX0RPV05MT0FEX1NFQ09ORFM7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwic3RvcHBlZCgpOiByZklEOiBcIit0aGlzLl9yZWNvcmRpbmdGaWxlPy5yZWNvcmRpbmdGaWxlSWQrXCIsIG5ldCBhYiB1cmw6IFwiICsgYnVybCtcIiwgZnJhbWVzOiBcIit0aGlzLmFjLmZyYW1lc1JlY29yZGVkK1wiLCBzYW1wbGUgcmF0ZTogXCIrc3IpO1xyXG4gICAgICAgICAgICAgIGxldCBuZXRBYiA9IG5ldyBOZXRBdWRpb0J1ZmZlcih0aGlzLnJlY0ZpbGVTZXJ2aWNlLCBidXJsLCB0aGlzLmFjLmNoYW5uZWxDb3VudCwgc3IsIGNoRmwsIHRoaXMuYWMuZnJhbWVzUmVjb3JkZWQsIHJVVUlELCBjaEZsKTtcclxuICAgICAgICAgICAgICBhcz1uZXRBYjtcclxuICAgICAgICAgICAgICBpZih0aGlzLnVwbG9hZFNldCl7XHJcbiAgICAgICAgICAgICAgICAvL2xldCBycD1uZXcgUmVhZHlQcm92aWRlcigpO1xyXG4gICAgICAgICAgICAgICAgLy9uZXRBYi5yZWFkeVByb3ZpZGVyPXJwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRTZXQub25Eb25lPSh1cGxvYWRTZXQpPT57XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJ1cGxvYWQgc2V0IG9uIGRvbmU6IENhbGwgcmVhZHkgcHJvdmlkZXIucmVhZHlcIik7XHJcbiAgICAgICAgICAgICAgICAgIC8vcnAucmVhZHkoKTtcclxuICAgICAgICAgICAgICAgICAgbmV0QWIucmVhZHkoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZSBpZiAoQXVkaW9TdG9yYWdlVHlwZS5NRU1fRU5USVJFX0FVVE9fTkVUX0NIVU5LRUQgPT09IHRoaXMuYWMuYXVkaW9TdG9yYWdlVHlwZSB8fCBBdWRpb1N0b3JhZ2VUeXBlLk1FTV9DSFVOS0VEX0FVVE9fTkVUX0NIVU5LRUQgPT09IHRoaXMuYWMuYXVkaW9TdG9yYWdlVHlwZSkge1xyXG4gICAgICAgICAgaWYgKEF1ZGlvU3RvcmFnZVR5cGUuTUVNX0VOVElSRV9BVVRPX05FVF9DSFVOS0VEID09PSB0aGlzLmFjLmF1ZGlvU3RvcmFnZVR5cGUpe1xyXG4gICAgICAgICAgICBjb25zdCBhY0FiPXRoaXMuYWMuYXVkaW9CdWZmZXIoKTtcclxuICAgICAgICAgICAgaWYoYWNBYikge1xyXG4gICAgICAgICAgICAgIGFzID0gbmV3IEF1ZGlvQnVmZmVyU291cmNlKGFjQWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZihBdWRpb1N0b3JhZ2VUeXBlLk1FTV9DSFVOS0VEX0FVVE9fTkVUX0NIVU5LRUQgPT09IHRoaXMuYWMuYXVkaW9TdG9yYWdlVHlwZSl7XHJcbiAgICAgICAgICAgIGFzID0gdGhpcy5hYy5hdWRpb0J1ZmZlckFycmF5KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZighYXMpe1xyXG4gICAgICAgICAgICB0aGlzLnBsYXlTdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMua2VlcExpdmVMZXZlbD10cnVlO1xyXG4gICAgICAgICAgICBsZXQgYnVybDpzdHJpbmd8bnVsbD1udWxsO1xyXG4gICAgICAgICAgICBpZih0aGlzLl9zZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2Rpc3BsYXlSZWNGaWxlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPIGlzIHRoaXMgYnJhbmNoIGV2ZXIgY2FsbGVkID9cclxuICAgICAgICAgICAgICAgIGxldCByZiA9IHRoaXMuX2Rpc3BsYXlSZWNGaWxlO1xyXG4gICAgICAgICAgICAgICAgcmYuZnJhbWVzID0gdGhpcy5hYy5mcmFtZXNSZWNvcmRlZDtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcInN0b3BwZWQoKTogU2V0IGZyYW1lczogXCIrcmYuZnJhbWVzK1wiIG9uIHJmSWQ6IFwiK3RoaXMuZGlzcGxheVJlY0ZpbGU/LnJlY29yZGluZ0ZpbGVJZCk7XHJcbiAgICAgICAgICAgICAgICBidXJsID0gdGhpcy5yZWNGaWxlU2VydmljZS5zcHJBdWRpb0ZpbGVVcmwodGhpcy5fc2Vzc2lvbj8ucHJvamVjdCwgcmYpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXNzaW9uPy5wcm9qZWN0ICYmIHRoaXMuX3JlY29yZGluZ0ZpbGUgJiYgdGhpcy5fcmVjb3JkaW5nRmlsZSBpbnN0YW5jZW9mIFNwclJlY29yZGluZ0ZpbGUpIHtcclxuICAgICAgICAgICAgICAgIGJ1cmwgPSB0aGlzLnJlY0ZpbGVTZXJ2aWNlLnNwckF1ZGlvRmlsZVVybEJ5SXRlbWNvZGUodGhpcy5zZXNzaW9uPy5wcm9qZWN0LCB0aGlzLnNlc3Npb24/LnNlc3Npb25JZCwgdGhpcy5fcmVjb3JkaW5nRmlsZS5pdGVtQ29kZSwgdGhpcy5fcmVjb3JkaW5nRmlsZS52ZXJzaW9uKTtcclxuICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb3VsZCBub3QgY3JlYXRlIG5ldCBhdWRpbyBidWZmZXIuXCIpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoYnVybCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgclVVSUQgPSB0aGlzLmFjLnJlY1VVSUQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzciA9IHRoaXMuYWMuY3VycmVudFNhbXBsZVJhdGU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaEZsPXNyKlJlY29yZGluZ1NlcnZpY2UuREVGQVVMVF9DSFVOS0VEX0RPV05MT0FEX1NFQ09ORFM7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJzdG9wcGVkKCk6IHJmSUQ6IFwiK3RoaXMuX3JlY29yZGluZ0ZpbGU/LnJlY29yZGluZ0ZpbGVJZCtcIiwgbmV0IGFiIHVybDogXCIgKyBidXJsK1wiLCBmcmFtZXM6IFwiK3RoaXMuYWMuZnJhbWVzUmVjb3JkZWQrXCIsIHNhbXBsZSByYXRlOiBcIitzcik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXRBYiA9IG5ldyBOZXRBdWRpb0J1ZmZlcih0aGlzLnJlY0ZpbGVTZXJ2aWNlLCBidXJsLCB0aGlzLmFjLmNoYW5uZWxDb3VudCwgc3IsIGNoRmwsIHRoaXMuYWMuZnJhbWVzUmVjb3JkZWQsIHJVVUlELCBjaEZsKTtcclxuICAgICAgICAgICAgICAgIGFzID0gbmV0QWI7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51cGxvYWRTZXQpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRTZXQub25Eb25lID0gKHVwbG9hZFNldCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJ1cGxvYWQgc2V0IG9uIGRvbmU6IENhbGwgcmVhZHkgcHJvdmlkZXIucmVhZHlcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG5ldEFiLnJlYWR5KCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKEF1ZGlvU3RvcmFnZVR5cGUuREJfQ0hVTktFRCA9PT0gdGhpcy5hYy5hdWRpb1N0b3JhZ2VUeXBlKSB7XHJcbiAgICAgICAgICBhcyA9IHRoaXMuYWMuaW5kZGJBdWRpb0J1ZmZlckFycmF5KCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChBdWRpb1N0b3JhZ2VUeXBlLk1FTV9DSFVOS0VEID09PSB0aGlzLmFjLmF1ZGlvU3RvcmFnZVR5cGUpIHtcclxuICAgICAgICAgIGFzID0gdGhpcy5hYy5hdWRpb0J1ZmZlckFycmF5KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGFiID0gdGhpcy5hYy5hdWRpb0J1ZmZlcigpO1xyXG4gICAgICAgICAgaWYoYWIpIHtcclxuICAgICAgICAgICAgYXMgPSBuZXcgQXVkaW9CdWZmZXJTb3VyY2UoYWIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXMpIHtcclxuICAgICAgICAgIGFkaCA9IG5ldyBBdWRpb0RhdGFIb2xkZXIoYXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIC8vIFVzZSBhbiBvd24gcmVmZXJlbmNlIHNpbmNlIHRoZSB3cml0aW5nIG9mIHRoZSB3YXZlIGZpbGUgaXMgYXN5bmNocm9ub3VzIGFuZCB0aGlzLl9yZWNvcmRpbmdGaWxlIG1pZ2h0IGFscmVhZHkgY29udGFpbiB0aGUgbmV4dCByZWNvcmRpbmdcclxuICAgIGxldCByZiA9IHRoaXMuX3JlY29yZGluZ0ZpbGU7XHJcbiAgICBpZiAocmYgJiYgcmYgaW5zdGFuY2VvZiBTcHJSZWNvcmRpbmdGaWxlKSB7XHJcbiAgICAgIHRoaXMuaXRlbXM/LnNldFNwclJlY0ZpbGVBdWRpb0RhdGEocmYsYWRoKTtcclxuICAgICAgaWYgKHRoaXMuZW5hYmxlVXBsb2FkUmVjb3JkaW5ncyAmJiB0aGlzLl91cGxvYWRDaHVua1NpemVTZWNvbmRzPT09bnVsbCAmJiBBdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkU9PT10aGlzLl9jbGllbnRBdWRpb1N0b3JhZ2VUeXBlKSB7XHJcbiAgICAgICAgLy8gVE9ETyB1c2UgU3BlZWNoUmVjb3JkZXJjb25maWcgcmVzcC4gUmVjZmlsZVNlcnZpY2VcclxuICAgICAgICAvLyBjb252ZXJ0IGFzeW5jaHJvbm91c2x5IHRvIDE2LWJpdCBpbnRlZ2VyIFBDTVxyXG4gICAgICAgIC8vIFRPRE8gY291bGQgd2UgYXZvaWQgY29udmVyc2lvbiB0byBzYXZlIENQVSByZXNvdXJjZXMgYW5kIHRyYW5zZmVyIGZsb2F0IFBDTSBkaXJlY3RseT9cclxuICAgICAgICAvLyBUT0RPIGR1cGxpY2F0ZSBjb252ZXJzaW9uIGZvciBtYW51YWwgZG93bmxvYWRcclxuICAgICAgICAvL2NvbnNvbGUubG9nKFwiQnVpbGQgd2F2IHdyaXRlci4uLlwiKTtcclxuICAgICAgICBpZihhYikge1xyXG4gICAgICAgICAgdGhpcy5wcm9jZXNzaW5nUmVjb3JkaW5nPXRydWU7XHJcbiAgICAgICAgICBsZXQgd3cgPSBuZXcgV2F2V3JpdGVyKCk7XHJcbiAgICAgICAgICAvL25ldyBSRVNUIEFQSSBVUkxcclxuICAgICAgICAgIGxldCBhcGlFbmRQb2ludCA9ICcnO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmFwaUVuZFBvaW50KSB7XHJcbiAgICAgICAgICAgIGFwaUVuZFBvaW50ID0gdGhpcy5jb25maWcuYXBpRW5kUG9pbnQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoYXBpRW5kUG9pbnQgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIGFwaUVuZFBvaW50ID0gYXBpRW5kUG9pbnQgKyAnLydcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBzZXNzaW9uc1VybCA9IGFwaUVuZFBvaW50ICsgU2Vzc2lvblNlcnZpY2UuU0VTU0lPTl9BUElfQ1RYO1xyXG4gICAgICAgICAgbGV0IHJlY1VybDogc3RyaW5nID0gc2Vzc2lvbnNVcmwgKyAnLycgKyByZi5zZXNzaW9uICsgJy8nICsgUkVDRklMRV9BUElfQ1RYICsgJy8nICsgcmYuaXRlbUNvZGU7XHJcbiAgICAgICAgICB3dy53cml0ZUFzeW5jKGFiLCAod2F2RmlsZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBvc3RSZWNvcmRpbmcod2F2RmlsZSwgcmVjVXJsLHJmKTtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzaW5nUmVjb3JkaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVXYWtlTG9jaygpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2hlY2sgY29tcGxldGUgc2Vzc2lvblxyXG4gICAgbGV0IGNvbXBsZXRlID0gdHJ1ZTtcclxuICAgIGlmKHRoaXMuaXRlbXMpIHtcclxuICAgICAgLy8gc2VhcmNoIGJhY2t3YXJkcywgdG8gZ2FpbiBmYXN0ZXIgZGV0ZWN0aW9uIG9mIGluY29tcGxldGUgc3RhdGVcclxuICAgICAgZm9yIChsZXQgcmkgPSB0aGlzLml0ZW1zLmxlbmd0aCgpIC0gMTsgcmkgPj0gMDsgcmktLSkge1xyXG4gICAgICAgIGxldCBpdCA9IHRoaXMuaXRlbXMuZ2V0SXRlbShyaSk7XHJcbiAgICAgICAgaWYgKGl0LnJlY29yZGluZyAmJiAhaXQudHJhaW5pbmcgJiYgIWl0Lml0ZW1Eb25lKCkpIHtcclxuICAgICAgICAgIGNvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgYXV0b1N0YXJ0ID0gKHRoaXMuc3RhdHVzID09PSBTdGF0dXMuU1RPUFBJTkdfU1RPUCk7XHJcbiAgICB0aGlzLnN0YXR1cyA9IFN0YXR1cy5JRExFO1xyXG4gICAgbGV0IHN0YXJ0TmV4dD1mYWxzZTtcclxuICAgIGlmIChjb21wbGV0ZSkge1xyXG4gICAgICBpZih0aGlzLl9zZXNzaW9uIT1udWxsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9zZXNzaW9uLnNlYWxlZCAmJiB0aGlzLl9zZXNzaW9uLnN0YXR1cyAhPT0gXCJDT01QTEVURURcIikge1xyXG4gICAgICAgICAgbGV0IGJvZHk6IGFueSA9IHt9XHJcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uLnN0YXR1cyA9IFwiQ09NUExFVEVEXCI7XHJcbiAgICAgICAgICBib2R5LnN0YXR1cyA9IHRoaXMuX3Nlc3Npb24uc3RhdHVzO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9zZXNzaW9uLmNvbXBsZXRlZERhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbi5jb21wbGV0ZWREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgYm9keS5jb21wbGV0ZWREYXRlID0gdGhpcy5fc2Vzc2lvbi5jb21wbGV0ZWREYXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5wYXRjaFNlc3Npb25PYnNlcnZlcih0aGlzLl9zZXNzaW9uLCBib2R5KS5zdWJzY3JpYmUoKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnN0YXR1c01zZyA9ICdTZXNzaW9uIGNvbXBsZXRlISc7XHJcbiAgICAgIHRoaXMudXBkYXRlV2FrZUxvY2soKTtcclxuICAgICAgaWYodGhpcy5zaG93U2Vzc2lvbkNvbXBsZXRlTWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuZGlhbG9nLm9wZW4oU2Vzc2lvbkZpbmlzaGVkRGlhbG9nLCB7fSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gZW5hYmxlIG5hdmlnYXRpb25cclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZEFjdGlvbi5kaXNhYmxlZCA9IGZhbHNlXHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5id2RBY3Rpb24uZGlzYWJsZWQgPSBmYWxzZVxyXG5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICBpZiAodGhpcy5zZWN0aW9uLm1vZGUgPT09ICdBVVRPUFJPR1JFU1MnIHx8IHRoaXMuc2VjdGlvbi5tb2RlID09PSAnQVVUT1JFQ09SRElORycpIHtcclxuICAgICAgICB0aGlzLm5leHRJdGVtKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnNlY3Rpb24ubW9kZSA9PT0gJ0FVVE9SRUNPUkRJTkcnICYmIHRoaXMuYXV0b3JlY29yZGluZyAmJiBhdXRvU3RhcnQpIHtcclxuICAgICAgICBzdGFydE5leHQ9dHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm5hdmlnYXRpb25EaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVdha2VMb2NrKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGFwcGx5IHJlY29yZGVkIGl0ZW1cclxuICAgIHRoaXMuYXBwbHlJdGVtKHN0YXJ0TmV4dCk7XHJcbiAgICBpZihzdGFydE5leHQpe1xyXG4gICAgICB0aGlzLnN0YXJ0SXRlbSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBlcnJvcihtc2c9J0FuIHVua25vd24gZXJyb3Igb2NjdXJlZCBkdXJpbmcgcmVjb3JkaW5nLicsYWR2aWNlOnN0cmluZz0nUGxlYXNlIHJldHJ5LicpIHtcclxuICAgIHRoaXMuc3RhdHVzPVN0YXR1cy5FUlJPUjtcclxuICAgIHN1cGVyLmVycm9yKG1zZyxhZHZpY2UpO1xyXG4gICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpO1xyXG4gICAgdGhpcy51cGRhdGVTdGFydEFjdGlvbkRpc2FibGVTdGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcG9zdENodW5rQXVkaW9CdWZmZXIoYXVkaW9CdWZmZXI6IEF1ZGlvQnVmZmVyLCBjaHVua0lkeDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLnByb2Nlc3NpbmdSZWNvcmRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IHd3ID0gbmV3IFdhdldyaXRlcigpO1xyXG4gICAgbGV0IHNlc3Npb25zVXJsID0gdGhpcy5zZXNzaW9uc0Jhc2VVcmwoKTtcclxuICAgIGxldCByZWNVcmw6IHN0cmluZyA9IHNlc3Npb25zVXJsICsgJy8nICsgdGhpcy5zZXNzaW9uPy5zZXNzaW9uSWQgKyAnLycgKyBSRUNGSUxFX0FQSV9DVFggKyAnLycgKyB0aGlzLnByb21wdEl0ZW0uaXRlbWNvZGUrJy8nK3RoaXMucmZVdWlkKycvJytjaHVua0lkeDtcclxuICAgIC8vIFRoZSB1cGxvYWQgaG9sZGVyIGlzIHJlcXVpcmVkIHRvIGFkZCB0aGUgdXBsb2FkIG5vdyB0byB0aGUgdXBsb2FkIHNldC4gVGhlIHJlYWwgdXBsb2FkIGlzIGNyZWF0ZWQgYXN5bmMgaW4gcG9zdHJlY29yZGluZyBhbmQgdGhlIHVwbG9hZCBzZXQgaXMgYWxyZWFkeSBjb21wbGV0ZSBhdCB0aGF0IHRpbWUuXHJcbiAgICBsZXQgdWxoPW5ldyBVcGxvYWRIb2xkZXIoKTtcclxuICAgIGlmKHRoaXMudXBsb2FkU2V0KXtcclxuICAgICAgdGhpcy51cGxvYWRTZXQuYWRkKHVsaCk7XHJcbiAgICB9XHJcblxyXG4gICAgd3cud3JpdGVBc3luYyhhdWRpb0J1ZmZlciwgKHdhdkZpbGUpID0+IHtcclxuICAgICAgdGhpcy5wb3N0UmVjb3JkaW5nKHdhdkZpbGUsIHJlY1VybCxudWxsLHVsaCk7XHJcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1JlY29yZGluZyA9IGZhbHNlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICAvLyBwb3N0UmVjb3JkaW5nKHdhdkZpbGU6IFVpbnQ4QXJyYXksIHJlY1VybDogc3RyaW5nLHJmOlJlY29yZGluZ0ZpbGV8bnVsbCkge1xyXG4gIC8vICAgbGV0IHdhdkJsb2IgPSBuZXcgQmxvYihbd2F2RmlsZV0sIHt0eXBlOiAnYXVkaW8vd2F2J30pO1xyXG4gIC8vICAgbGV0IHVsID0gbmV3IFVwbG9hZCh3YXZCbG9iLCByZWNVcmwscmYpO1xyXG4gIC8vICAgdGhpcy51cGxvYWRlci5xdWV1ZVVwbG9hZCh1bCk7XHJcbiAgLy8gfVxyXG5cclxuICBzdG9wKCkge1xyXG4gICAgaWYodGhpcy5hYyE9bnVsbCl7XHJcbiAgICAgIHRoaXMuYWMuY2xvc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUNvbnRyb2xQbGF5YmFja1Bvc2l0aW9uKCkge1xyXG4gICAgaWYodGhpcy5fY29udHJvbEF1ZGlvUGxheWVyKSB7XHJcbiAgICAgIGNvbnN0IHBwRnJhbWVzPXRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5wbGF5UG9zaXRpb25GcmFtZXM7XHJcbiAgICAgIGlmIChwcEZyYW1lcyE9PW51bGwpIHtcclxuICAgICAgICBpZih0aGlzLnByb21wdGluZy5hdWRpb0Rpc3BsYXkpIHtcclxuICAgICAgICAgIHRoaXMucHJvbXB0aW5nLmF1ZGlvRGlzcGxheS5wbGF5RnJhbWVQb3NpdGlvbiA9IHBwRnJhbWVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXkucGxheUZyYW1lUG9zaXRpb24gPSBwcEZyYW1lcztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXVkaW9QbGF5ZXJVcGRhdGUoZTogQXVkaW9QbGF5ZXJFdmVudCkge1xyXG4gICAgaWYgKEV2ZW50VHlwZS5SRUFEWSA9PT0gZS50eXBlKSB7XHJcblxyXG4gICAgfSBlbHNlIGlmIChFdmVudFR5cGUuU1RBUlRFRCA9PT0gZS50eXBlKSB7XHJcbiAgICAgIC8vdGhpcy5zdGF0dXMgPSAnUGxheWJhY2suLi4nO1xyXG4gICAgICB0aGlzLnVwZGF0ZVRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy51cGRhdGVDb250cm9sUGxheWJhY2tQb3NpdGlvbigpLCA1MCk7XHJcblxyXG4gICAgfSBlbHNlIGlmIChFdmVudFR5cGUuRU5ERUQgPT09IGUudHlwZSkge1xyXG4gICAgICAvLy5zdGF0dXM9J1JlYWR5Lic7XHJcbiAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMudXBkYXRlVGltZXJJZCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGlmKCF0aGlzLmRlc3Ryb3llZCkge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcbn1cclxuXHJcbiJdfQ==
|