@kontur.candy/tools 2.147.0 → 2.149.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/CHANGELOG.md +11 -0
- package/distr/Common/CandyApiClient/CandyApiClient.js +51 -6
- package/distr/Common/CandyApiClient/FakeCandyApiClient.js +18 -4
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js +11 -0
- package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js +6 -0
- package/distr/Common/HttpClient/HttpClient.js +5 -2
- package/distr/Common/IterableUtils.js +26 -1
- package/distr/Common/ModelPath/ModelPath.js +3 -3
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +45 -2
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +3 -1
- package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +5 -5
- package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js +37 -0
- package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +9 -7
- package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +369 -369
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +33 -33
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
return t.set(new Uint8Array(e)), t.buffer;
|
|
112
112
|
}
|
|
113
113
|
|
|
114
|
-
function
|
|
114
|
+
function w() {
|
|
115
115
|
return this.bodyUsed = !1, this._initBody = function (e) {
|
|
116
116
|
var t;
|
|
117
117
|
this.bodyUsed = this.bodyUsed, this._bodyInit = e, e ? "string" == typeof e ? this._bodyText = e : a && Blob.prototype.isPrototypeOf(e) ? this._bodyBlob = e : s && FormData.prototype.isPrototypeOf(e) ? this._bodyFormData = e : o && URLSearchParams.prototype.isPrototypeOf(e) ? this._bodyText = e.toString() : u && a && (t = e) && DataView.prototype.isPrototypeOf(t) ? (this._bodyArrayBuffer = b(e.buffer), this._bodyInit = new Blob([this._bodyArrayBuffer])) : u && (ArrayBuffer.prototype.isPrototypeOf(e) || l(e)) ? this._bodyArrayBuffer = b(e) : this._bodyText = e = Object.prototype.toString.call(e) : this._bodyText = "", this.headers.get("content-type") || ("string" == typeof e ? this.headers.set("content-type", "text/plain;charset=UTF-8") : this._bodyBlob && this._bodyBlob.type ? this.headers.set("content-type", this._bodyBlob.type) : o && URLSearchParams.prototype.isPrototypeOf(e) && this.headers.set("content-type", "application/x-www-form-urlencoded;charset=UTF-8"));
|
|
@@ -175,7 +175,7 @@
|
|
|
175
175
|
e.push([r, t]);
|
|
176
176
|
}), d(e);
|
|
177
177
|
}, i && (p.prototype[Symbol.iterator] = p.prototype.entries);
|
|
178
|
-
var
|
|
178
|
+
var g = ["DELETE", "GET", "HEAD", "OPTIONS", "POST", "PUT"];
|
|
179
179
|
|
|
180
180
|
function E(e, t) {
|
|
181
181
|
if (!(this instanceof E)) throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
|
|
@@ -188,7 +188,7 @@
|
|
|
188
188
|
this.url = e.url, this.credentials = e.credentials, t.headers || (this.headers = new p(e.headers)), this.method = e.method, this.mode = e.mode, this.signal = e.signal, o || null == e._bodyInit || (o = e._bodyInit, e.bodyUsed = !0);
|
|
189
189
|
} else this.url = String(e);
|
|
190
190
|
|
|
191
|
-
if (this.credentials = t.credentials || this.credentials || "same-origin", !t.headers && this.headers || (this.headers = new p(t.headers)), this.method = (n = (r = t.method || this.method || "GET").toUpperCase(),
|
|
191
|
+
if (this.credentials = t.credentials || this.credentials || "same-origin", !t.headers && this.headers || (this.headers = new p(t.headers)), this.method = (n = (r = t.method || this.method || "GET").toUpperCase(), g.indexOf(n) > -1 ? n : r), this.mode = t.mode || this.mode || null, this.signal = t.signal || this.signal, this.referrer = null, ("GET" === this.method || "HEAD" === this.method) && o) throw new TypeError("Body not allowed for GET or HEAD requests");
|
|
192
192
|
|
|
193
193
|
if (this._initBody(o), !("GET" !== this.method && "HEAD" !== this.method || "no-store" !== t.cache && "no-cache" !== t.cache)) {
|
|
194
194
|
var i = /([?&])_=[^&]*/;
|
|
@@ -217,7 +217,7 @@
|
|
|
217
217
|
return new E(this, {
|
|
218
218
|
body: this._bodyInit
|
|
219
219
|
});
|
|
220
|
-
},
|
|
220
|
+
}, w.call(E.prototype), w.call(A.prototype), A.prototype.clone = function () {
|
|
221
221
|
return new A(this._bodyInit, {
|
|
222
222
|
status: this.status,
|
|
223
223
|
statusText: this.statusText,
|
|
@@ -335,7 +335,7 @@
|
|
|
335
335
|
|
|
336
336
|
T.polyfill = !0, n.fetch || (n.fetch = T, n.Headers = p, n.Request = E, n.Response = A);
|
|
337
337
|
|
|
338
|
-
var
|
|
338
|
+
var I = function () {
|
|
339
339
|
function e() {
|
|
340
340
|
P(this, e);
|
|
341
341
|
}
|
|
@@ -370,20 +370,20 @@
|
|
|
370
370
|
}]), e;
|
|
371
371
|
}();
|
|
372
372
|
|
|
373
|
-
function
|
|
373
|
+
function B(e) {
|
|
374
374
|
return "v1/ns/".concat(e.ns, "/drafts/").concat(e.draftId, "/client-draft-info");
|
|
375
375
|
}
|
|
376
376
|
|
|
377
|
-
function
|
|
377
|
+
function C(e) {
|
|
378
378
|
return "string" == typeof e ? "false" !== e && "true" === e : Boolean(e);
|
|
379
379
|
}
|
|
380
380
|
|
|
381
381
|
var R = {
|
|
382
|
-
authorized:
|
|
382
|
+
authorized: C("{authorized}"),
|
|
383
383
|
cauldronApiUrl: "{cauldronApiUrl}",
|
|
384
|
-
isTestServer:
|
|
385
|
-
renderCachingForIE8:
|
|
386
|
-
normalizationOnServer:
|
|
384
|
+
isTestServer: C("{isTestServer}"),
|
|
385
|
+
renderCachingForIE8: C("{renderCachingForIE8}"),
|
|
386
|
+
normalizationOnServer: C("{normalizationOnServer}"),
|
|
387
387
|
normativeUrl: "{normativeUrl}",
|
|
388
388
|
resourcesVersion: "{resourcesVersion}",
|
|
389
389
|
konturDomains: "{konturDomains}"
|
|
@@ -655,6 +655,11 @@
|
|
|
655
655
|
value: function (e, t) {
|
|
656
656
|
throw new Error("Method not implemented.");
|
|
657
657
|
}
|
|
658
|
+
}, {
|
|
659
|
+
key: "runMassAction",
|
|
660
|
+
value: function (e, t) {
|
|
661
|
+
throw new Error("Method not implemented.");
|
|
662
|
+
}
|
|
658
663
|
}, {
|
|
659
664
|
key: "getByGId",
|
|
660
665
|
value: function (e, t) {
|
|
@@ -673,12 +678,7 @@
|
|
|
673
678
|
}, {
|
|
674
679
|
key: "onModelChange",
|
|
675
680
|
value: function (e, t) {
|
|
676
|
-
|
|
677
|
-
}
|
|
678
|
-
}, {
|
|
679
|
-
key: "offModelChange",
|
|
680
|
-
value: function (e, t) {
|
|
681
|
-
console.error("form.offModelChange() is not supported yet");
|
|
681
|
+
throw Error("form.onModelChange() is not supported yet");
|
|
682
682
|
}
|
|
683
683
|
}, {
|
|
684
684
|
key: "save",
|
|
@@ -701,6 +701,16 @@
|
|
|
701
701
|
var e = Object.keys(this.form.model.getChunk(this.form.settings.formRoot));
|
|
702
702
|
return this.form.validator.validateAll(e);
|
|
703
703
|
}
|
|
704
|
+
}, {
|
|
705
|
+
key: "getAdditionalEmployeeInfo",
|
|
706
|
+
value: function (e) {
|
|
707
|
+
throw new Error("not implemented");
|
|
708
|
+
}
|
|
709
|
+
}, {
|
|
710
|
+
key: "getWorkingEventsForEmployee",
|
|
711
|
+
value: function (e) {
|
|
712
|
+
throw new Error("not implemented");
|
|
713
|
+
}
|
|
704
714
|
}, {
|
|
705
715
|
key: "hasErrors",
|
|
706
716
|
value: function () {
|
|
@@ -810,16 +820,6 @@
|
|
|
810
820
|
value: function (e) {
|
|
811
821
|
return Promise.resolve(void 0);
|
|
812
822
|
}
|
|
813
|
-
}, {
|
|
814
|
-
key: "getAdditionalEmployeeInfo",
|
|
815
|
-
value: function (e) {
|
|
816
|
-
throw new H();
|
|
817
|
-
}
|
|
818
|
-
}, {
|
|
819
|
-
key: "getWorkingEventsForEmployee",
|
|
820
|
-
value: function (e) {
|
|
821
|
-
throw new H();
|
|
822
|
-
}
|
|
823
823
|
}, {
|
|
824
824
|
key: "setAutoFieldsToAutoValue",
|
|
825
825
|
value: function (e) {
|
|
@@ -944,13 +944,13 @@
|
|
|
944
944
|
resourceZone: t.resourceZone
|
|
945
945
|
};
|
|
946
946
|
u.push(function (e) {
|
|
947
|
-
return
|
|
947
|
+
return I.styleSheet(ee(te("static/public/styles/".concat(n).concat(s, ".css"), c)), !0, e);
|
|
948
948
|
}), u.push(function (e) {
|
|
949
|
-
return
|
|
949
|
+
return I.script(ee(te("static/public/scripts/".concat(n).concat(s, ".js"), c)), e);
|
|
950
950
|
}), a && u.push(function (e) {
|
|
951
|
-
return
|
|
951
|
+
return I.styleSheet(ee(te("static/public/styles/candy_".concat(o).concat(s, ".css"), c)), !1, e);
|
|
952
952
|
}, function (e) {
|
|
953
|
-
return
|
|
953
|
+
return I.script(ee(te("static/public/scripts/candy_".concat(o).concat(s, ".js"), c)), e);
|
|
954
954
|
}), function (e, t) {
|
|
955
955
|
var r = 0;
|
|
956
956
|
e.forEach(function (n) {
|
|
@@ -992,7 +992,7 @@
|
|
|
992
992
|
u = r.draftId;
|
|
993
993
|
if (re(R.konturDomains) ? R.authorized ? u ? s || (a = new Error("options.ns is required")) : a = new Error("options.draftId is required") : a = new Error("user.unauthenticated") : a = new Error("domain.untrusted"), a) i(a);else {
|
|
994
994
|
var c = null !== (n = r.resourceZone) && void 0 !== n ? n : ne("resourceZone"),
|
|
995
|
-
l = te(ee(
|
|
995
|
+
l = te(ee(B({
|
|
996
996
|
ns: s,
|
|
997
997
|
draftId: u
|
|
998
998
|
})), {
|
|
@@ -1071,4 +1071,4 @@
|
|
|
1071
1071
|
};
|
|
1072
1072
|
e.g.CF = se;
|
|
1073
1073
|
}();
|
|
1074
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9HZXRDbGllbnREcmFmdEluZm9VcmwudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50U2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NvbnN0cnVjdC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vd3JhcE5hdGl2ZVN1cGVyLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZUZ1bmN0aW9uLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9FcnJvcnMudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvTGVnYWN5UHVibGljRm9ybS9DcmVhdGVMZWdhY3lQdWJsaWNGb3JtLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvRm9ybXMvQ2xpZW50L0NsaWVudC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9UeXBpbmdVdGlscy50cyJdLCJuYW1lcyI6WyJfX3dlYnBhY2tfcmVxdWlyZV9fIiwiX2RlZmluZVByb3BlcnR5Iiwib2JqIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl9hcnJheUxpa2VUb0FycmF5IiwiYXJyIiwibGVuIiwibGVuZ3RoIiwiaSIsImFycjIiLCJBcnJheSIsImciLCJnbG9iYWxUaGlzIiwidGhpcyIsIkZ1bmN0aW9uIiwiZSIsIndpbmRvdyIsImdsb2JhbCIsInNlbGYiLCJzdXBwb3J0IiwiU3ltYm9sIiwiQmxvYiIsIkRhdGFWaWV3IiwicHJvdG90eXBlIiwiaXNQcm90b3R5cGVPZiIsInZpZXdDbGFzc2VzIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImluZGV4T2YiLCJ0b1N0cmluZyIsImNhbGwiLCJub3JtYWxpemVOYW1lIiwibmFtZSIsIlN0cmluZyIsInRlc3QiLCJUeXBlRXJyb3IiLCJ0b0xvd2VyQ2FzZSIsIm5vcm1hbGl6ZVZhbHVlIiwiaXRlcmF0b3JGb3IiLCJpdGVtcyIsIml0ZXJhdG9yIiwibmV4dCIsInNoaWZ0IiwiZG9uZSIsInVuZGVmaW5lZCIsIkhlYWRlcnMiLCJoZWFkZXJzIiwibWFwIiwiZm9yRWFjaCIsImFwcGVuZCIsImlzQXJyYXkiLCJoZWFkZXIiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwib2xkVmFsdWUiLCJnZXQiLCJoYXMiLCJoYXNPd25Qcm9wZXJ0eSIsInNldCIsImNhbGxiYWNrIiwidGhpc0FyZyIsImtleXMiLCJwdXNoIiwidmFsdWVzIiwiZW50cmllcyIsImNvbnN1bWVkIiwiYm9keSIsImJvZHlVc2VkIiwiUHJvbWlzZSIsInJlamVjdCIsImZpbGVSZWFkZXJSZWFkeSIsInJlYWRlciIsInJlc29sdmUiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwiZXJyb3IiLCJyZWFkQmxvYkFzQXJyYXlCdWZmZXIiLCJibG9iIiwiRmlsZVJlYWRlciIsInByb21pc2UiLCJyZWFkQXNBcnJheUJ1ZmZlciIsInJlYWRBc1RleHQiLCJidWYiLCJ2aWV3IiwiVWludDhBcnJheSIsImNoYXJzIiwiZnJvbUNoYXJDb2RlIiwiam9pbiIsImJ1ZmZlckNsb25lIiwic2xpY2UiLCJieXRlTGVuZ3RoIiwiYnVmZmVyIiwiQm9keSIsIl9pbml0Qm9keSIsIl9ib2R5SW5pdCIsIl9ib2R5VGV4dCIsIl9ib2R5QmxvYiIsIkZvcm1EYXRhIiwiX2JvZHlGb3JtRGF0YSIsIlVSTFNlYXJjaFBhcmFtcyIsIl9ib2R5QXJyYXlCdWZmZXIiLCJ0eXBlIiwicmVqZWN0ZWQiLCJFcnJvciIsImFycmF5QnVmZmVyIiwiYnl0ZU9mZnNldCIsInRoZW4iLCJ0ZXh0IiwicmVhZEFycmF5QnVmZmVyQXNUZXh0IiwiZm9ybURhdGEiLCJkZWNvZGUiLCJqc29uIiwiSlNPTiIsInBhcnNlIiwibWV0aG9kcyIsIm1ldGhvZCIsInVwY2FzZWQiLCJ0b1VwcGVyQ2FzZSIsIlJlcXVlc3QiLCJpbnB1dCIsIm9wdGlvbnMiLCJ1cmwiLCJjcmVkZW50aWFscyIsIm1vZGUiLCJzaWduYWwiLCJyZWZlcnJlciIsImNhY2hlIiwicmVQYXJhbVNlYXJjaCIsInJlcGxhY2UiLCJEYXRlIiwiZ2V0VGltZSIsImNsb25lIiwiZm9ybSIsInRyaW0iLCJzcGxpdCIsImJ5dGVzIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmF3SGVhZGVycyIsInN1YnN0ciIsImxpbmUiLCJwYXJ0cyIsIlJlc3BvbnNlIiwiYm9keUluaXQiLCJzdGF0dXMiLCJvayIsInN0YXR1c1RleHQiLCJyZXNwb25zZSIsInJlZGlyZWN0U3RhdHVzZXMiLCJyZWRpcmVjdCIsIlJhbmdlRXJyb3IiLCJsb2NhdGlvbiIsIkRPTUV4Y2VwdGlvbiIsImVyciIsIm1lc3NhZ2UiLCJzdGFjayIsImNyZWF0ZSIsImNvbnN0cnVjdG9yIiwiZmV0Y2giLCJpbml0IiwicmVxdWVzdCIsImFib3J0ZWQiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsImFib3J0WGhyIiwiYWJvcnQiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZVVSTCIsInJlc3BvbnNlVGV4dCIsInNldFRpbWVvdXQiLCJvbnRpbWVvdXQiLCJvbmFib3J0IiwiaHJlZiIsIm9wZW4iLCJmaXhVcmwiLCJ3aXRoQ3JlZGVudGlhbHMiLCJyZXNwb25zZVR5cGUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2VuZCIsInBvbHlmaWxsIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJkZXNjcmlwdG9yIiwiX2NyZWF0ZUNsYXNzIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiTG9hZEludG9Eb2N1bWVudCIsInVyaSIsInNjcmlwdExvYWRlZCIsImhlYWQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZG9jdW1lbnRFbGVtZW50Iiwic2NyaXB0IiwiY3JlYXRlRWxlbWVudCIsImxvYWRIYW5kbGVyIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwic3JjIiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJpZ25vcmVFcnJvciIsImxpbmsiLCJnZXRDbGllbnREcmFmdEluZm9VcmwiLCJkcmFmdElkIiwibnMiLCJwYXJzZUJvb2wiLCJCb29sZWFuIiwiY2xpZW50U2V0dGluZ3MiLCJhdXRob3JpemVkIiwiY2F1bGRyb25BcGlVcmwiLCJpc1Rlc3RTZXJ2ZXIiLCJyZW5kZXJDYWNoaW5nRm9ySUU4Iiwibm9ybWFsaXphdGlvbk9uU2VydmVyIiwibm9ybWF0aXZlVXJsIiwicmVzb3VyY2VzVmVyc2lvbiIsImtvbnR1ckRvbWFpbnMiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJnZW4iLCJfbmV4dCIsIl90aHJvdyIsImFyZyIsImluZm8iLCJmbiIsImFyZ3MiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9zZXRQcm90b3R5cGVPZiIsIm8iLCJwIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIlJlZmVyZW5jZUVycm9yIiwiX2dldFByb3RvdHlwZU9mIiwiZ2V0UHJvdG90eXBlT2YiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsInNoYW0iLCJQcm94eSIsInZhbHVlT2YiLCJfY29uc3RydWN0IiwiUGFyZW50IiwiQ2xhc3MiLCJhIiwiYmluZCIsIl93cmFwTmF0aXZlU3VwZXIiLCJfY2FjaGUiLCJNYXAiLCJXcmFwcGVyIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsIm1vZGVsQ2hhbmdlRXZlbnRQYXRoIiwicGF0aCIsImZpZWxkTmFtZSIsIm1hcENodW5rVmFsdWVzIiwiY2h1bmsiLCJmaWx0ZXIiLCJyZWR1Y2VDaHVua1ZhbHVlcyIsImNodW5rcyIsInJlZHVjZSIsIkxlZ2FjeVB1YmxpY0Zvcm0iLCJ1cGRhdGVQcm9jIiwiZXJyb3JMb2ciLCJlbXBsb3llZXMiLCJwcmludFR5cGUiLCJnSWQiLCJwaWNrbGlzdHNQcm92aWRlciIsImdldERpZ2VzdEFwaVBpY2tsaXN0IiwicXVlcnkiLCJldmVudE5hbWUiLCJsaXN0ZW5lciIsImV2ZW50TWFuYWdlciIsIm9uIiwib2ZmIiwiY29uc29sZSIsImNoYW5nZVNldCIsInN0b3BBdXRvc2VuZCIsInVubW91bnQiLCJtb2RlbCIsImdldENodW5rIiwic2V0dGluZ3MiLCJmb3JtUm9vdCIsInZhbGlkYXRvciIsInZhbGlkYXRlQWxsIiwiZXJyb3JDb3VudCIsInBhdGhPck1vZGVsQ2h1bmsiLCJpbm5lckNodW5rIiwiZmlsbCIsInBhdGhPckFycmF5IiwiYXJyYXkiLCJjb25jYXQiLCJzb3VyY2VCaW5kaW5nUGF0aCIsInRhcmdldEJpbmRpbmdQYXRoIiwiZG9Ob3RDb3B5UGF0aHMiLCJlbXBsb3llZUlkIiwiaW5zdGFuY2VzIiwiZW5hYmxlZCIsImZpbHRlcnMiLCJwYXRoUHJlZml4ZXMiLCJiaW5kaW5nUGF0aCIsIm5vcm1hbGl6ZXJJZCIsImRlZmF1bHRDYWxsYmFjayIsInJlbGF0aXZlVXJsIiwiYmFzZVVybCIsIkNGIiwia2Vmb3Jtc1VybCIsImJ1aWxkVXJsIiwicGFyYW1zIiwicXVlcnlQYXJ0cyIsInBhcmFtTmFtZSIsInBhcmFtVmFsdWUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJpc0FsbG93ZWQiLCJkb21haW5zIiwiUmVnRXhwIiwiaG9zdCIsImdldFBhcmFtZXRlckJ5TmFtZSIsInNlYXJjaCIsInBhcmFtIiwiZmluZCIsInRhc2tzIiwiY29tcGxldGVkIiwidGFzayIsImxvYWRGb3JtIiwiZ2Z2IiwiZW5naW5lVmVyc2lvbiIsImVudHJ5UG9pbnQiLCJpc05lZWRFbmdpbmUiLCJtaW4iLCJ2IiwicmVzb3VyY2Vab25lIiwic3R5bGVTaGVldCIsImNiIiwicnVuUGFyYWxsZWwiLCJyZW5kZXJGb3JtIiwicGFnZUNvbnRlbnQiLCJleHRlbmRlZFNldHRpbmdzIiwicHVibGljRm9ybSIsImNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0iLCJnZXRFbmdpbmVFbnRyeVBvaW50IiwiY2xpZW50RHJhZnRVcmwiLCJyZXF1ZXN0T3B0aW9ucyIsImF1dGhlbnRpY2F0aW9uIiwiYXV0aFNpZCIsImZldGNoSW1wbCIsIngiLCJjbGllbnREcmFmdEluZm8iLCJhYm9uSWQiLCJvcmdJZCIsInVzZXJJZCIsImlzSW5kaXZpZHVhbCIsImlzRm9yZWlnbiIsImZlZWRiYWNrRW5hYmxlZCIsImNhbmR5VG91ckF2YWlsYWJsZSIsImV2ZW50RW1pdHRlciIsImZvcm1JbmZvIiwicHJpbnRJbmZvIiwicmVnaW9ucyIsImhhc1RlbXBsYXRlcyIsImlzRGlzYWJsZWRDbGVhbkZvcm0iLCJpc0Rpc2FibGVkQ2xvc2VCdXR0b24iLCJpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uIiwidGhlbWUiLCJsb2FkRXJyb3IiLCJyZW5kZXIiLCJ0ZW1wbGF0ZXNBcGkiLCJDYW5keUNsaWVudEV4cG9ydHMiLCJzdGFydCIsInBhcnRpYWxSZW5kZXJpbmdGb3JJRTgiLCJfaSIsIl9hcnIiLCJfbiIsIl9kIiwiX3MiLCJfZSIsIm1pbkxlbiIsIm4iLCJmcm9tIl0sIm1hcHBpbmdzIjoiOzs7OztBQUNBLE1BQUlBLENBQUFBLEdBQXNCLEVBQTFCOztBQ0RlLFdBQVNDLENBQVQsQ0FBeUJDLENBQXpCLEVBQThCQyxDQUE5QixFQUFtQ0MsQ0FBbkMsRUFBbUNBO0FBWWhELFdBWElELENBQUFBLElBQU9ELENBQVBDLEdBQ0ZFLE1BQUFBLENBQU9DLGNBQVBELENBQXNCSCxDQUF0QkcsRUFBMkJGLENBQTNCRSxFQUFnQztBQUM5QkQsTUFBQUEsS0FBQUEsRUFBT0EsQ0FEdUI7QUFFOUJHLE1BQUFBLFVBQUFBLEVBQUFBLENBQVksQ0FGa0I7QUFHOUJDLE1BQUFBLFlBQUFBLEVBQUFBLENBQWMsQ0FIZ0I7QUFJOUJDLE1BQUFBLFFBQUFBLEVBQUFBLENBQVU7QUFKb0IsS0FBaENKLENBREVGLEdBUUZELENBQUFBLENBQUlDLENBQUpELENBQUFBLEdBQVdFLENBUlRELEVBV0dELENBQVA7QUNaYTs7QUFBQSxXQUFTUSxDQUFULENBQTJCQyxDQUEzQixFQUFnQ0MsQ0FBaEMsRUFBZ0NBO0FBQUFBLEtBQ2xDLFFBQVBBLENBQU8sSUFBUUEsQ0FBQUEsR0FBTUQsQ0FBQUEsQ0FBSUUsTUFEZ0JELE1BQ1JBLENBQUFBLEdBQU1ELENBQUFBLENBQUlFLE1BREZEOztBQUc3QyxTQUFLLElBQUlFLENBQUFBLEdBQUksQ0FBUixFQUFXQyxDQUFBQSxHQUFPLElBQUlDLEtBQUosQ0FBVUosQ0FBVixDQUF2QixFQUF1Q0UsQ0FBQUEsR0FBSUYsQ0FBM0MsRUFBZ0RFLENBQUFBLEVBQWhELEVBQ0VDLENBQUFBLENBQUtELENBQUxDLENBQUFBLEdBQVVKLENBQUFBLENBQUlHLENBQUpILENBQVZJOztBQUdGLFdBQU9BLENBQVA7QUNQRmY7O0FBQUFBLEVBQUFBLENBQUFBLENBQW9CaUIsQ0FBcEJqQixHQUF3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OEI7QUFMVixlQUFBLENBQVY5QixFQU9JN1IsQ0FQSjZSLENBQUFBO0FBT0k3UixhQWJKLE1BQ0lBLENBQUFBLENBQVMsSUFBSTZDLEtBQUosQ0FBQSw0Q0FBQSxNQUFBLENBQXNEc08sQ0FBdEQsQ0FBQSxDQUFUblIsQ0FBQUE7QUFBK0RtUixXQVYzRUQsQ0FBQUE7QUFVMkVDLFNBaERuRm9CLEVBQUFBLEtBQUFBLENBaUVXdlMsQ0FqRVh1UztBQWlFV3ZTO0FBQUFBLEtBR29DO0FBRS9DcVIsSUFBQUEsVUFBQUEsRUFBWSxFQUZtQztBQUcvQzBDLElBQUFBLHNCQUFBQSxHQUFrQyw0QkFBQSxDQXhTMUI1WCxDQXdTUjRYLENBSCtDO0FBSS9DL0QsSUFBQUEsVUFBQUEsRUFBWTtBQUptQyxHQUFuRDtBQU9BMVMsRUFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsQ0FBT3lTLEVBQVB6UyxHQUFZdVcsRUFBWnZXIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIHJlcXVpcmUgc2NvcGVcbnZhciBfX3dlYnBhY2tfcmVxdWlyZV9fID0ge307XG5cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykge1xuICAgIGFycjJbaV0gPSBhcnJbaV07XG4gIH1cblxuICByZXR1cm4gYXJyMjtcbn0iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsInZhciBnbG9iYWwgPVxuICAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMpIHx8XG4gICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZikgfHxcbiAgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbClcblxudmFyIHN1cHBvcnQgPSB7XG4gIHNlYXJjaFBhcmFtczogJ1VSTFNlYXJjaFBhcmFtcycgaW4gZ2xvYmFsLFxuICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gZ2xvYmFsICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICBibG9iOlxuICAgICdGaWxlUmVhZGVyJyBpbiBnbG9iYWwgJiZcbiAgICAnQmxvYicgaW4gZ2xvYmFsICYmXG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IEJsb2IoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KSgpLFxuICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBnbG9iYWwsXG4gIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIGdsb2JhbFxufVxuXG5mdW5jdGlvbiBpc0RhdGFWaWV3KG9iaikge1xuICByZXR1cm4gb2JqICYmIERhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG9iailcbn1cblxuaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHZpZXdDbGFzc2VzID0gW1xuICAgICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nXG4gIF1cblxuICB2YXIgaXNBcnJheUJ1ZmZlclZpZXcgPVxuICAgIEFycmF5QnVmZmVyLmlzVmlldyB8fFxuICAgIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB2aWV3Q2xhc3Nlcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSA+IC0xXG4gICAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIG5hbWUgPSBTdHJpbmcobmFtZSlcbiAgfVxuICBpZiAoL1teYS16MC05XFwtIyQlJicqKy5eX2B8fiFdL2kudGVzdChuYW1lKSB8fCBuYW1lID09PSAnJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lOiBcIicgKyBuYW1lICsgJ1wiJylcbiAgfVxuICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2YWx1ZSBsaXN0XG5mdW5jdGlvbiBpdGVyYXRvckZvcihpdGVtcykge1xuICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpdGVtcy5zaGlmdCgpXG4gICAgICByZXR1cm4ge2RvbmU6IHZhbHVlID09PSB1bmRlZmluZWQsIHZhbHVlOiB2YWx1ZX1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvclxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpdGVyYXRvclxufVxuXG5leHBvcnQgZnVuY3Rpb24gSGVhZGVycyhoZWFkZXJzKSB7XG4gIHRoaXMubWFwID0ge31cblxuICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSlcbiAgICB9LCB0aGlzKVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdXG4gIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSArICcsICcgKyB2YWx1ZSA6IHZhbHVlXG59XG5cbkhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAgIH1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2gobmFtZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaXRlbXMucHVzaCh2YWx1ZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5pZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xufVxuXG5mdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gIGlmIChib2R5LmJvZHlVc2VkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpKVxuICB9XG4gIGJvZHkuYm9keVVzZWQgPSB0cnVlXG59XG5cbmZ1bmN0aW9uIGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdClcbiAgICB9XG4gICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzQXJyYXlCdWZmZXIoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzVGV4dChibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEFycmF5QnVmZmVyQXNUZXh0KGJ1Zikge1xuICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICB9XG4gIHJldHVybiBjaGFycy5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgaWYgKGJ1Zi5zbGljZSkge1xuICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgfSBlbHNlIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKVxuICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gIH1cbn1cblxuZnVuY3Rpb24gQm9keSgpIHtcbiAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlXG5cbiAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgLypcbiAgICAgIGZldGNoLW1vY2sgd3JhcHMgdGhlIFJlc3BvbnNlIG9iamVjdCBpbiBhbiBFUzYgUHJveHkgdG9cbiAgICAgIHByb3ZpZGUgdXNlZnVsIHRlc3QgaGFybmVzcyBmZWF0dXJlcyBzdWNoIGFzIGZsdXNoLiBIb3dldmVyLCBvblxuICAgICAgRVM1IGJyb3dzZXJzIHdpdGhvdXQgZmV0Y2ggb3IgUHJveHkgc3VwcG9ydCBwb2xseWZpbGxzIG11c3QgYmUgdXNlZDtcbiAgICAgIHRoZSBwcm94eS1wb2xseWZpbGwgaXMgdW5hYmxlIHRvIHByb3h5IGFuIGF0dHJpYnV0ZSB1bmxlc3MgaXQgZXhpc3RzXG4gICAgICBvbiB0aGUgb2JqZWN0IGJlZm9yZSB0aGUgUHJveHkgaXMgY3JlYXRlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlc1xuICAgICAgUmVzcG9uc2UuYm9keVVzZWQgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZSwgd2hpbGUgbWFpbnRhaW5pbmcgdGhlXG4gICAgICBzZW1hbnRpYyBvZiBzZXR0aW5nIFJlcXVlc3QuYm9keVVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGJlZm9yZVxuICAgICAgX2luaXRCb2R5IGlzIGNhbGxlZC5cbiAgICAqL1xuICAgIHRoaXMuYm9keVVzZWQgPSB0aGlzLmJvZHlVc2VkXG4gICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9ICcnXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5mb3JtRGF0YSAmJiBGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUZvcm1EYXRhID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpXG4gICAgICAvLyBJRSAxMC0xMSBjYW4ndCBoYW5kbGUgYSBEYXRhVmlldyBib2R5LlxuICAgICAgdGhpcy5fYm9keUluaXQgPSBuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpIHx8IGlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJvZHkpXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04JylcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUJsb2IgJiYgdGhpcy5fYm9keUJsb2IudHlwZSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCB0aGlzLl9ib2R5QmxvYi50eXBlKVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04JylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmFycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHZhciBpc0NvbnN1bWVkID0gY29uc3VtZWQodGhpcylcbiAgICAgICAgaWYgKGlzQ29uc3VtZWQpIHtcbiAgICAgICAgICByZXR1cm4gaXNDb25zdW1lZFxuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodGhpcy5fYm9keUFycmF5QnVmZmVyKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnVmZmVyLnNsaWNlKFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQgKyB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmxvYigpLnRoZW4ocmVhZEJsb2JBc0FycmF5QnVmZmVyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRoaXMudGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgIHJldHVybiByZWFkQmxvYkFzVGV4dCh0aGlzLl9ib2R5QmxvYilcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQnKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmZvcm1EYXRhKSB7XG4gICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpXG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIVFRQIG1ldGhvZHMgd2hvc2UgY2FwaXRhbGl6YXRpb24gc2hvdWxkIGJlIG5vcm1hbGl6ZWRcbnZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpIHtcbiAgdmFyIHVwY2FzZWQgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICByZXR1cm4gbWV0aG9kcy5pbmRleE9mKHVwY2FzZWQpID4gLTEgPyB1cGNhc2VkIDogbWV0aG9kXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXF1ZXN0KGlucHV0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXF1ZXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5XG5cbiAgaWYgKGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJylcbiAgICB9XG4gICAgdGhpcy51cmwgPSBpbnB1dC51cmxcbiAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHNcbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5wdXQuaGVhZGVycylcbiAgICB9XG4gICAgdGhpcy5tZXRob2QgPSBpbnB1dC5tZXRob2RcbiAgICB0aGlzLm1vZGUgPSBpbnB1dC5tb2RlXG4gICAgdGhpcy5zaWduYWwgPSBpbnB1dC5zaWduYWxcbiAgICBpZiAoIWJvZHkgJiYgaW5wdXQuX2JvZHlJbml0ICE9IG51bGwpIHtcbiAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXRcbiAgICAgIGlucHV0LmJvZHlVc2VkID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLnVybCA9IFN0cmluZyhpbnB1dClcbiAgfVxuXG4gIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ3NhbWUtb3JpZ2luJ1xuICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIH1cbiAgdGhpcy5tZXRob2QgPSBub3JtYWxpemVNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5tZXRob2QgfHwgJ0dFVCcpXG4gIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZSB8fCB0aGlzLm1vZGUgfHwgbnVsbFxuICB0aGlzLnNpZ25hbCA9IG9wdGlvbnMuc2lnbmFsIHx8IHRoaXMuc2lnbmFsXG4gIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgfVxuICB0aGlzLl9pbml0Qm9keShib2R5KVxuXG4gIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykge1xuICAgIGlmIChvcHRpb25zLmNhY2hlID09PSAnbm8tc3RvcmUnIHx8IG9wdGlvbnMuY2FjaGUgPT09ICduby1jYWNoZScpIHtcbiAgICAgIC8vIFNlYXJjaCBmb3IgYSAnXycgcGFyYW1ldGVyIGluIHRoZSBxdWVyeSBzdHJpbmdcbiAgICAgIHZhciByZVBhcmFtU2VhcmNoID0gLyhbPyZdKV89W14mXSovXG4gICAgICBpZiAocmVQYXJhbVNlYXJjaC50ZXN0KHRoaXMudXJsKSkge1xuICAgICAgICAvLyBJZiBpdCBhbHJlYWR5IGV4aXN0cyB0aGVuIHNldCB0aGUgdmFsdWUgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHRoaXMudXJsID0gdGhpcy51cmwucmVwbGFjZShyZVBhcmFtU2VhcmNoLCAnJDFfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSBhZGQgYSBuZXcgJ18nIHBhcmFtZXRlciB0byB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB2YXIgcmVRdWVyeVN0cmluZyA9IC9cXD8vXG4gICAgICAgIHRoaXMudXJsICs9IChyZVF1ZXJ5U3RyaW5nLnRlc3QodGhpcy51cmwpID8gJyYnIDogJz8nKSArICdfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbn1cblxuZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICBib2R5XG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgnJicpXG4gICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGlmIChieXRlcykge1xuICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBmb3JtXG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gIHZhciBwcmVQcm9jZXNzZWRIZWFkZXJzID0gcmF3SGVhZGVycy5yZXBsYWNlKC9cXHI/XFxuW1xcdCBdKy9nLCAnICcpXG4gIC8vIEF2b2lkaW5nIHNwbGl0IHZpYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIGNvbW1vbiBJRTExIGJ1ZyB3aXRoIHRoZSBjb3JlLWpzIDMuNi4wIHJlZ2V4IHBvbHlmaWxsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gvaXNzdWVzLzc0OFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNzUxXG4gIHByZVByb2Nlc3NlZEhlYWRlcnNcbiAgICAuc3BsaXQoJ1xccicpXG4gICAgLm1hcChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIuaW5kZXhPZignXFxuJykgPT09IDAgPyBoZWFkZXIuc3Vic3RyKDEsIGhlYWRlci5sZW5ndGgpIDogaGVhZGVyXG4gICAgfSlcbiAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6JylcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpXG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIHRoaXMudHlwZSA9ICdkZWZhdWx0J1xuICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1c1xuICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gIHRoaXMuc3RhdHVzVGV4dCA9IG9wdGlvbnMuc3RhdHVzVGV4dCA9PT0gdW5kZWZpbmVkID8gJycgOiAnJyArIG9wdGlvbnMuc3RhdHVzVGV4dFxuICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpXG59XG5cbkJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cblJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICB1cmw6IHRoaXMudXJsXG4gIH0pXG59XG5cblJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAwLCBzdGF0dXNUZXh0OiAnJ30pXG4gIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InXG4gIHJldHVybiByZXNwb25zZVxufVxuXG52YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG59XG5cbmV4cG9ydCB2YXIgRE9NRXhjZXB0aW9uID0gZ2xvYmFsLkRPTUV4Y2VwdGlvblxudHJ5IHtcbiAgbmV3IERPTUV4Y2VwdGlvbigpXG59IGNhdGNoIChlcnIpIHtcbiAgRE9NRXhjZXB0aW9uID0gZnVuY3Rpb24obWVzc2FnZSwgbmFtZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2VcbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gICAgdmFyIGVycm9yID0gRXJyb3IobWVzc2FnZSlcbiAgICB0aGlzLnN0YWNrID0gZXJyb3Iuc3RhY2tcbiAgfVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpXG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBET01FeGNlcHRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoKGlucHV0LCBpbml0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgfVxuXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG5cbiAgICBmdW5jdGlvbiBhYm9ydFhocigpIHtcbiAgICAgIHhoci5hYm9ydCgpXG4gICAgfVxuXG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIHN0YXR1czogeGhyLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICB9XG4gICAgICBvcHRpb25zLnVybCA9ICdyZXNwb25zZVVSTCcgaW4geGhyID8geGhyLnJlc3BvbnNlVVJMIDogb3B0aW9ucy5oZWFkZXJzLmdldCgnWC1SZXF1ZXN0LVVSTCcpXG4gICAgICB2YXIgYm9keSA9ICdyZXNwb25zZScgaW4geGhyID8geGhyLnJlc3BvbnNlIDogeGhyLnJlc3BvbnNlVGV4dFxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzb2x2ZShuZXcgUmVzcG9uc2UoYm9keSwgb3B0aW9ucykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub250aW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaXhVcmwodXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXJsID09PSAnJyAmJiBnbG9iYWwubG9jYXRpb24uaHJlZiA/IGdsb2JhbC5sb2NhdGlvbi5ocmVmIDogdXJsXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgZml4VXJsKHJlcXVlc3QudXJsKSwgdHJ1ZSlcblxuICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIpIHtcbiAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc3VwcG9ydC5hcnJheUJ1ZmZlciAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKS5pbmRleE9mKCdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbml0ICYmIHR5cGVvZiBpbml0LmhlYWRlcnMgPT09ICdvYmplY3QnICYmICEoaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykpIHtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluaXQuaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIG5vcm1hbGl6ZVZhbHVlKGluaXQuaGVhZGVyc1tuYW1lXSkpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICByZXF1ZXN0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuXG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gIH0pXG59XG5cbmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuXG5pZiAoIWdsb2JhbC5mZXRjaCkge1xuICBnbG9iYWwuZmV0Y2ggPSBmZXRjaFxuICBnbG9iYWwuSGVhZGVycyA9IEhlYWRlcnNcbiAgZ2xvYmFsLlJlcXVlc3QgPSBSZXF1ZXN0XG4gIGdsb2JhbC5SZXNwb25zZSA9IFJlc3BvbnNlXG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufSIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufSIsIi8vIHRzbGludDpkaXNhYmxlIG5vLXVuc2FmZS1hbnlcbmV4cG9ydCBjbGFzcyBMb2FkSW50b0RvY3VtZW50IHtcbiAgICBwdWJsaWMgc3RhdGljIHNjcmlwdCh1cmk6IHN0cmluZywgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGxldCBzY3JpcHRMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGNvbnN0IHNjcmlwdDogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcblxuICAgICAgICBmdW5jdGlvbiBsb2FkSGFuZGxlcigpOiB2b2lkIHtcbiAgICAgICAgICAgIGlmIChzY3JpcHRMb2FkZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghc2NyaXB0LnJlYWR5U3RhdGUgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwibG9hZGVkXCIgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuICAgICAgICAgICAgICAgIHNjcmlwdExvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmcgdGhlIHVzZXIgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHNjcmlwdCBjb21wbGV0ZXMgdG8gbG9hZC5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogVGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBpbiBJRSBldmVuIHVwb24gZXJyb3IuIEluIGFueVxuICAgICAgICAvLyBjYXNlIGl0IGlzIHRoZSBjbGllbnQncyByZXNwb25zaWJpbGl0eSB0byB2ZXJpZnkgdGhhdCB0aGUgc2NyaXB0IHJhblxuICAgICAgICAvLyBzdWNjZXNzZnVsbHkuXG4gICAgICAgIHNjcmlwdC5vbmxvYWQgPSBsb2FkSGFuZGxlcjtcbiAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGxvYWRIYW5kbGVyO1xuXG4gICAgICAgIC8vIEFkZCBhbiBlcnJvciBjYWxsYmFjay5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogTm90IHN1cHBvcnRlZCBpbiBJRS5cbiAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2NyaXB0LnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiRXJyb3Igd2hpbGUgbG9hZGluZyBzY3JpcHQuXCIpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBBZGQgdGhlIHNjcmlwdCBlbGVtZW50IHRvIHRoZSBkb2N1bWVudC5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogU2FmYXJpIG5ldmVyIGxvYWRzIHRoZSBzY3JpcHQgaWYgd2UgZG9uJ3Qgc2V0XG4gICAgICAgIC8vIHRoZSBzcmMgYXR0cmlidXRlIGJlZm9yZSBhcHBlbmRpbmcuXG4gICAgICAgIHNjcmlwdC5zcmMgPSB1cmk7XG4gICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoXCJjcm9zc29yaWdpblwiLCBcInVzZS1jcmVkZW50aWFsc1wiKTtcbiAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc3R5bGVTaGVldCh1cmk6IHN0cmluZywgaWdub3JlRXJyb3I6IGJvb2xlYW4sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXNvbHZlID0gKCkgPT4gY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgcmVqZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlnbm9yZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiRXJyb3Igd2hpbGUgbG9hZGluZyBzdHlsZXNoZWV0LlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSA/PyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcInJlbFwiLCBcInN0eWxlc2hlZXRcIik7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHQvY3NzXCIpO1xuICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHJlc29sdmUpO1xuICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCByZWplY3QpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgdXJpKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBEcmFmdEZ1bGxJZCB9IGZyb20gXCIuLi9UeXBlcy9EcmFmdEZ1bGxJZFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xpZW50RHJhZnRJbmZvVXJsKGRyYWZ0SWQ6IERyYWZ0RnVsbElkKSB7XG4gICAgLy8gTk9URSDQrdGC0LAg0YTRg9C90LrRhtC40Y8g0L7QsdGK0Y/QstC70LXQvdCwINC+0YLQtNC10LvRjNC90L4sINC40LHQviDQvtC90LAg0LLRhdC+0LTQuNGCINCyINGB0L7RgdGC0LDQsiBjbGllbnQuanMg0LhcbiAgICAvLyDQvdC1INC00L7Qu9C20L3QviDQv9GA0L7QuNGB0YXQvtC00LjRgtGMINGD0YLQtdC20LXQu9C10L3QuNGPIGNsaWVudC5qcy3QsFxuICAgIHJldHVybiBgdjEvbnMvJHtkcmFmdElkLm5zfS9kcmFmdHMvJHtkcmFmdElkLmRyYWZ0SWR9L2NsaWVudC1kcmFmdC1pbmZvYDtcbn1cbiIsImZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNsaWVudFNldHRpbmdzID0ge1xuICAgIGF1dGhvcml6ZWQ6IHBhcnNlQm9vbChcInthdXRob3JpemVkfVwiKSxcbiAgICBjYXVsZHJvbkFwaVVybDogXCJ7Y2F1bGRyb25BcGlVcmx9XCIsXG4gICAgaXNUZXN0U2VydmVyOiBwYXJzZUJvb2woXCJ7aXNUZXN0U2VydmVyfVwiKSxcbiAgICByZW5kZXJDYWNoaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cmVuZGVyQ2FjaGluZ0ZvcklFOH1cIiksXG4gICAgbm9ybWFsaXphdGlvbk9uU2VydmVyOiBwYXJzZUJvb2woXCJ7bm9ybWFsaXphdGlvbk9uU2VydmVyfVwiKSxcbiAgICBub3JtYXRpdmVVcmw6IFwie25vcm1hdGl2ZVVybH1cIixcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBcIntyZXNvdXJjZXNWZXJzaW9ufVwiLFxuICAgIGtvbnR1ckRvbWFpbnM6IFwie2tvbnR1ckRvbWFpbnN9XCIsXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIF90eXBlb2Yob2JqKTtcbn0iLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cblxuICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IGFzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIH1cblxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcblxuICB0cnkge1xuICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuaW1wb3J0IGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCBmcm9tIFwiLi9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICBpZiAoaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkpIHtcbiAgICBfY29uc3RydWN0ID0gUmVmbGVjdC5jb25zdHJ1Y3Q7XG4gIH0gZWxzZSB7XG4gICAgX2NvbnN0cnVjdCA9IGZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICAgICAgdmFyIGEgPSBbbnVsbF07XG4gICAgICBhLnB1c2guYXBwbHkoYSwgYXJncyk7XG4gICAgICB2YXIgQ29uc3RydWN0b3IgPSBGdW5jdGlvbi5iaW5kLmFwcGx5KFBhcmVudCwgYSk7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAgIGlmIChDbGFzcykgc2V0UHJvdG90eXBlT2YoaW5zdGFuY2UsIENsYXNzLnByb3RvdHlwZSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfY29uc3RydWN0LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59IiwiaW1wb3J0IGdldFByb3RvdHlwZU9mIGZyb20gXCIuL2dldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBpc05hdGl2ZUZ1bmN0aW9uIGZyb20gXCIuL2lzTmF0aXZlRnVuY3Rpb24uanNcIjtcbmltcG9ydCBjb25zdHJ1Y3QgZnJvbSBcIi4vY29uc3RydWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKSB7XG4gIHZhciBfY2FjaGUgPSB0eXBlb2YgTWFwID09PSBcImZ1bmN0aW9uXCIgPyBuZXcgTWFwKCkgOiB1bmRlZmluZWQ7XG5cbiAgX3dyYXBOYXRpdmVTdXBlciA9IGZ1bmN0aW9uIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpIHtcbiAgICBpZiAoQ2xhc3MgPT09IG51bGwgfHwgIWlzTmF0aXZlRnVuY3Rpb24oQ2xhc3MpKSByZXR1cm4gQ2xhc3M7XG5cbiAgICBpZiAodHlwZW9mIENsYXNzICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIF9jYWNoZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKF9jYWNoZS5oYXMoQ2xhc3MpKSByZXR1cm4gX2NhY2hlLmdldChDbGFzcyk7XG5cbiAgICAgIF9jYWNoZS5zZXQoQ2xhc3MsIFdyYXBwZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIFdyYXBwZXIoKSB7XG4gICAgICByZXR1cm4gY29uc3RydWN0KENsYXNzLCBhcmd1bWVudHMsIGdldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yKTtcbiAgICB9XG5cbiAgICBXcmFwcGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICB2YWx1ZTogV3JhcHBlcixcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc2V0UHJvdG90eXBlT2YoV3JhcHBlciwgQ2xhc3MpO1xuICB9O1xuXG4gIHJldHVybiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXNOYXRpdmVGdW5jdGlvbihmbikge1xuICByZXR1cm4gRnVuY3Rpb24udG9TdHJpbmcuY2FsbChmbikuaW5kZXhPZihcIltuYXRpdmUgY29kZV1cIikgIT09IC0xO1xufSIsImV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIk9wZXJhdGlvbiBub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlID8/IFwiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZFByb2dyYW1TdGF0ZUVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXCJJbnZhbGlkIHByb2dyYW0gc3RhdGVcIiArIChtZXNzYWdlICE9IHVuZGVmaW5lZCA/IFwiOiBcIiArIG1lc3NhZ2UgOiBcIlwiKSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoYXJndW1lbnROYW1lOiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBtZXNzYWdlICE9IHVuZGVmaW5lZCA/IGAke21lc3NhZ2V9IChhcmd1bWVudDogJHthcmd1bWVudE5hbWV9KWAgOiBgSW52YWxpZCBhcmd1bWVudCB2YWx1ZTogJHthcmd1bWVudE5hbWV9YFxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFR5cGluZ0Vycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIkludmFsaWQgdHlwaW5nXCIpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEVtcGxveWVlIH0gZnJvbSBcIkBza2Jrb250dXIvc3RhZmYtc2VsZWN0b3Itd2lkZ2V0XCI7XG5pbXBvcnQge1xuICAgIEVtcGxveWVlTGlzdCxcbiAgICBHZXRFbXBsb3llZUxpc3RSZXF1ZXN0LFxuICAgIEdldFdvcmtpbmdFdmVudExpc3RSZXF1ZXN0LFxuICAgIFdvcmtpbmdFdmVudExpc3QsXG59IGZyb20gXCJAc2tia29udHVyL3N0YWZmLWNvbW1vbi9zcmMvQ2xpZW50L1R5cGVzXCI7XG5cbmltcG9ydCB7IE5vdEltcGxlbWVudGVkRXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0Vycm9yc1wiO1xuaW1wb3J0IHR5cGUgeyBTdGVwIH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xzL0Zvcm1QYXJ0cy9Ub3VyL1RvdXJUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJFcnJvckxvZyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvVHlwZXMvRXJyb3JMb2cvU2VydmVyRXJyb3JMb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1BhdGgsIE1vZGVsVmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvQ29yZVR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVybmFsSG9va0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0V2ZW50TWFuYWdlbWVudC9FeHRlcm5hbEV2ZW50cy9FeHRlcm5hbEhvb2tGdW5jdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBSZWFkb25seU1vZGVsQ2h1bmsgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvTW9kZWxTdG9yaW5nL01vZGVsQ2h1bmtcIjtcbmltcG9ydCB0eXBlIHsgUGlja2xpc3RRdWVyeVJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL1BpY2tsaXN0cy9QaWNrbGlzdFR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uLy4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB7IE1vZGVsRXZlbnRzTGlzdGVuZXIgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L01vZGVsRXZlbnRzL01vZGVsRXZlbnRcIjtcbmltcG9ydCB7IERpZ2VzdFF1ZXJ5RmlsdGVyIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9EaWdlc3RBcGlDbGllbnQvVHlwZXMvRGlnZXN0UXVlcnlGaWx0ZXJcIjtcbmltcG9ydCB7IElVcGRhdGVGb3JtTW9kZWxBY2Nlc3NvciB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvRm9ybS9JRm9ybU1vZGVsQWNjZXNzb3JcIjtcbmltcG9ydCB7IE1vZGFsT3B0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Nb2RhbE1hbmFnZXIvSU1vZGFsU3RhdGVcIjtcbmltcG9ydCB7IEFic29sdXRlTW9kZWxQYXRoLCBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9Nb2RlbFBhdGgvTW9kZWxQYXRoXCI7XG5pbXBvcnQgeyBDYWxsSW5pdFNlY3Rpb25MaWdodGJveFByb3BzLCBJbml0U2VjdGlvbkZvcm1MaWdodGJveE9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vUHVibGljRm9ybS9Jbml0U2VjdGlvbkxpZ2h0Ym94XCI7XG5pbXBvcnQgeyBQcmludFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL1ByaW50L1ByaW50VHlwZVwiO1xuXG5pbXBvcnQgeyBJTGVnYWN5Rm9ybSB9IGZyb20gXCIuL0lMZWdhY3lGb3JtXCI7XG5cbmV4cG9ydCB0eXBlIE1vZGVsRXZlbnRQYXRoID1cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIl07XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbENoYW5nZUV2ZW50UGF0aChwYXRoPzogc3RyaW5nLCBmaWVsZE5hbWU/OiBzdHJpbmcpOiBNb2RlbEV2ZW50UGF0aCB7XG4gICAgaWYgKGZpZWxkTmFtZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHBhdGggPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3QgYmUgZGVmaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aCwgZmllbGROYW1lXTtcbiAgICB9XG4gICAgaWYgKHBhdGggIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBwYXRoXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCJdO1xufVxuXG5mdW5jdGlvbiBtYXBDaHVua1ZhbHVlcyhjaHVuazogUmVhZG9ubHlNb2RlbENodW5rKTogQXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNodW5rKVxuICAgICAgICAuZmlsdGVyKHBhdGggPT4gY2h1bmtbcGF0aF0gJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNodW5rW3BhdGhdLCBcInZhbHVlXCIpKVxuICAgICAgICAubWFwKHBhdGggPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2h1bmtbcGF0aF07XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IFtwYXRoXTogcmVzdWx0LnZhbHVlIH07XG4gICAgICAgIH0pO1xufVxuXG5mdW5jdGlvbiByZWR1Y2VDaHVua1ZhbHVlcyhjaHVua3M6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4pOiB7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0ge1xuICAgIHJldHVybiBjaHVua3MucmVkdWNlKFxuICAgICAgICAocmVzdWx0LCBjaHVuaykgPT4gKHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIC4uLmNodW5rLFxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICApO1xufVxuXG5jbGFzcyBMZWdhY3lQdWJsaWNGb3JtIGltcGxlbWVudHMgSVB1YmxpY0Zvcm0ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybTogSUxlZ2FjeUZvcm07XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZm9ybTogSUxlZ2FjeUZvcm0pIHtcbiAgICAgICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYmF0Y2hVcGRhdGUodXBkYXRlUHJvYzogKHVwZGF0ZUFjY2Vzc29yOiBJVXBkYXRlRm9ybU1vZGVsQWNjZXNzb3IpID0+IHZvaWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHJ1bkNoZWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RXJyb3JMb2coZXJyb3JMb2c6IFBhcnRpYWw8U2VydmVyRXJyb3JMb2c+KTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyB2YWxpZGF0ZUNoaWxkcmVuQnlQYXRoKHBhdGg6IEFic29sdXRlTW9kZWxQYXRoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBfX0lOVEVSTkFMX19pbXBvcnRGcm9tRW1wbG95ZWVTZXJ2aWNlKCk6IFByb21pc2U8RW1wbG95ZWVbXSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW1wb3J0RW1wbG95ZWVzKGVtcGxveWVlczogRW1wbG95ZWVbXSwgb3B0aW9ucz86IHsgc2NlbmFyaW8/OiBzdHJpbmcgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJpbnQocHJpbnRUeXBlOiBQcmludFR5cGUsIGJvZHk/OiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnlHSWQoZ0lkOiBzdHJpbmcsIGZpbHRlcj86IERpZ2VzdFF1ZXJ5RmlsdGVyKTogUHJvbWlzZTxQaWNrbGlzdFF1ZXJ5UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5waWNrbGlzdHNQcm92aWRlci5nZXREaWdlc3RBcGlQaWNrbGlzdChnSWQpLnF1ZXJ5KGZpbHRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXh0ZXJuYWxIb29rRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vbihbXCJmb3JtXCIsIGV2ZW50TmFtZV0sIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXh0ZXJuYWxIb29rRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vZmYoW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTW9kZWxDaGFuZ2UocGF0aDogc3RyaW5nIHwgc3RyaW5nW10sIGxpc3RlbmVyOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJmb3JtLm9uTW9kZWxDaGFuZ2UoKSBpcyBub3Qgc3VwcG9ydGVkIHlldFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmTW9kZWxDaGFuZ2UocGF0aDogc3RyaW5nIHwgc3RyaW5nW10sIGxpc3RlbmVyOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJmb3JtLm9mZk1vZGVsQ2hhbmdlKCkgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc3RvcEF1dG9zZW5kKCk7XG4gICAgICAgIGlmICh0aGlzLmZvcm0udW5tb3VudCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnVubW91bnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VG91clN0ZXBzKCk6IFN0ZXBbXSB7XG4gICAgICAgIC8vIEZvciBvbGQga2V3ZWJcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSDQrdGC0L4g0LIg0YHRgtCw0YDRi9GFINC00LLQuNC20LrQsNGFINGC0YPRgiDRgtCw0LrQvtC5INCy0YvQt9C+0LJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0udmFsaWRhdG9yLnZhbGlkYXRlQWxsKGtleXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGVycm9yQ291bnQgPSB0aGlzLmZvcm0ubW9kZWwuZ2V0KHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKTtcbiAgICAgICAgcmV0dXJuIGVycm9yQ291bnQgIT0gdW5kZWZpbmVkICYmIGVycm9yQ291bnQgPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkVycm9yc0NvdW50Q2hhbmdlZChsaXN0ZW5lcjogTW9kZWxFdmVudHNMaXN0ZW5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9uKG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmZFcnJvcnNDb3VudENoYW5nZWQobGlzdGVuZXI6IE1vZGVsRXZlbnRzTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vZmYobW9kZWxDaGFuZ2VFdmVudFBhdGgodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldChwYXRoT3JNb2RlbENodW5rOiB7IFtwYXRoOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQocGF0aE9yTW9kZWxDaHVuazogc3RyaW5nLCB2YWx1ZTogTW9kZWxWYWx1ZSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQoXG4gICAgICAgIHBhdGhPck1vZGVsQ2h1bms6IHN0cmluZyB8IHsgW3BhdGg6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9LFxuICAgICAgICB2YWx1ZT86IE1vZGVsVmFsdWVcbiAgICApOiB2b2lkIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhdGhPck1vZGVsQ2h1bmsgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXRoT3JNb2RlbENodW5rICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICB0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkocGF0aE9yTW9kZWxDaHVuaylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lckNodW5rID0gT2JqZWN0LmtleXMocGF0aE9yTW9kZWxDaHVuaykucmVkdWNlPFJlYWRvbmx5TW9kZWxDaHVuaz4oXG4gICAgICAgICAgICAgICAgKHJlc3VsdCwgcGF0aCkgPT4gKHsgW3BhdGhdOiB7IHZhbHVlOiBwYXRoT3JNb2RlbENodW5rW3BhdGhdIH0sIC4uLnJlc3VsdCB9KSxcbiAgICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtLm1vZGVsLmZpbGwoaW5uZXJDaHVuayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5tb2RlbC5zZXQocGF0aE9yTW9kZWxDaHVuaywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtLnNldCgpIHBhcmFtZXRlciBzaG91bGQgYmUgc3RyaW5nIHBhdGggb3Igb2JqZWN0IHdpdGggcGF0aC12YWx1ZSBwYWlyc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KHBhdGhPckFycmF5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGhPckFycmF5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKFxuICAgICAgICAgICAgICAgIHBhdGhPckFycmF5XG4gICAgICAgICAgICAgICAgICAgIC5tYXAocGF0aCA9PiBtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsocGF0aCkpKVxuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgICAgICAgICAgICAgICAgIC5yZWR1Y2U8QXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9Pj4oKHJlc3VsdCwgYXJyYXkpID0+IHJlc3VsdC5jb25jYXQoYXJyYXkpLCBbXSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPckFycmF5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMobWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHBhdGhPckFycmF5KSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhdGhPckFycmF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290KSkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm0uZ2V0KCkgcGFyYW1ldGVyIHNob3VsZCBiZSBzdHJpbmcgcGF0aCBvciBhcnJheSBvZiBwYXRoc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmFsdWUocGF0aDogc3RyaW5nKTogTW9kZWxWYWx1ZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLm1vZGVsLmdldChwYXRoLCBcInZhbHVlXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5U3VidHJlZShcbiAgICAgICAgc291cmNlQmluZGluZ1BhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgdGFyZ2V0QmluZGluZ1BhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgZG9Ob3RDb3B5UGF0aHM/OiBzdHJpbmdbXVxuICAgICk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRJbnN0YW5jZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDaGlsZHJlbihwYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHV1aWRHZW5lcmF0ZSgpOiBzdHJpbmcge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93TW9kYWwob3B0aW9uczogTW9kYWxPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFNlY3Rpb24ob3B0aW9uczogSW5pdFNlY3Rpb25Gb3JtTGlnaHRib3hPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNhbGxJbml0U2VjdGlvbihvcHRpb25zOiBDYWxsSW5pdFNlY3Rpb25MaWdodGJveFByb3BzKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW5FbXBsb3llZUVkaXRvcihlbXBsb3llZUlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2UocGF0aDogc3RyaW5nLCBpbnN0YW5jZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUluc3RhbmNlcyhwYXRoOiBzdHJpbmcsIGluc3RhbmNlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXNPbkNvbnRyb2xJZkV4aXN0KHBhdGg6IEJpbmRpbmdQYXRoKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEFsbENoZWNrYm94ZXNGb3IxMTMxMDMoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFkZGl0aW9uYWxFbXBsb3llZUluZm8oZmlsdGVyczogR2V0RW1wbG95ZWVMaXN0UmVxdWVzdCk6IFByb21pc2U8RW1wbG95ZWVMaXN0IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFdvcmtpbmdFdmVudHNGb3JFbXBsb3llZShmaWx0ZXJzOiBHZXRXb3JraW5nRXZlbnRMaXN0UmVxdWVzdCk6IFByb21pc2U8V29ya2luZ0V2ZW50TGlzdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRBdXRvRmllbGRzVG9BdXRvVmFsdWUocGF0aFByZWZpeGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGVuc3VyZUluc3RhbmNlRnVsbHlMb2FkZWQoXG4gICAgICAgIGJpbmRpbmdQYXRoOiBzdHJpbmcgfCBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoLFxuICAgICAgICAuLi5pbnN0YW5jZXM6IHN0cmluZ1tdXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjdXN0b21Ob3JtYWxpemUobm9ybWFsaXplcklkOiBzdHJpbmcsIHBhdGhQcmVmaXhlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMZWdhY3lQdWJsaWNGb3JtKGZvcm06IElGb3JtKTogSVB1YmxpY0Zvcm0ge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gbmV3IExlZ2FjeVB1YmxpY0Zvcm0oZm9ybSBhcyBJTGVnYWN5Rm9ybSk7XG59XG4iLCIvKiB0c2xpbnQ6ZGlzYWJsZTpuby1udWxsLWtleXdvcmQgbm8tYW55IG5vLXVuc2FmZS1hbnkgKi9cbmltcG9ydCB7IGZldGNoIH0gZnJvbSBcIndoYXR3Zy1mZXRjaFwiO1xuXG5pbXBvcnQgeyBFcnJvckZpcnN0Q2FsbGJhY2ssIHJlamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm0gfSBmcm9tIFwiLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1cIjtcbmltcG9ydCB7IExvYWRJbnRvRG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vSGVscGVycy9Mb2FkSW50b0RvY3VtZW50XCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB0eXBlIHsgSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50IH0gZnJvbSBcIi4uL1R5cGVzL0lLZVdlYlRlbXBsYXRlc0FwaUNsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBDbGllbnREcmFmdEluZm9SZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvQ2xpZW50RHJhZnRJbmZvL0NsaWVudERyYWZ0SW5mb1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBnZXRDbGllbnREcmFmdEluZm9VcmwgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9HZXRDbGllbnREcmFmdEluZm9VcmxcIjtcbmltcG9ydCB7IEFVT09wdGlvbnMgfSBmcm9tIFwiLi4vVHlwZXMvQVVPT3B0aW9uc1wiO1xuaW1wb3J0IHR5cGUgeyBMYXlvdXRFdmVudHNTdGF0aWMgfSBmcm9tIFwiLi4vLi4vQ29udHJvbHMvSW50ZXJuYWxzL0xheW91dEV2ZW50cy9MYXlvdXRFdmVudHNcIjtcblxuaW1wb3J0IHsgY2xpZW50U2V0dGluZ3MgfSBmcm9tIFwiLi9DbGllbnRTZXR0aW5nc1wiO1xuaW1wb3J0IHsgY3JlYXRlTGVnYWN5UHVibGljRm9ybSB9IGZyb20gXCIuL0xlZ2FjeVB1YmxpY0Zvcm0vQ3JlYXRlTGVnYWN5UHVibGljRm9ybVwiO1xuXG50eXBlIEZvcm1Db250YWluZXIgPSBzdHJpbmcgfCBIVE1MRWxlbWVudDtcblxudHlwZSBFbmdpbmVFbnRyeVBvaW50ID0gKCkgPT4gdm9pZDtcblxuaW50ZXJmYWNlIFJlbmRlckZvcm1TZXR0aW5ncyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2VzVmVyc2lvbjogc3RyaW5nO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgcmVuZGVyRm9ybTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludDtcbiAgICB0ZW1wbGF0ZXNBcGk/OiBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQ7XG59XG5cbnR5cGUgU3RhcnRGb3JtRnVuYyA9IChwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lciwgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzKSA9PiBQcm9taXNlPElGb3JtPjtcblxuaW50ZXJmYWNlIENhbmR5R2xvYmFsSW5qZWN0ZWRWYXIge1xuICAgIHN0YXJ0OiAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsIGNhbGxiYWNrPzogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPikgPT4gdm9pZDtcbiAgICBrZWZvcm1zVXJsPzogc3RyaW5nO1xuICAgIHBhcnRpYWxSZW5kZXJpbmdGb3JJRTg6IGJvb2xlYW47XG4gICAgZW50cnlQb2ludDogeyBba2V5OiBzdHJpbmddOiBTdGFydEZvcm1GdW5jIH07XG4gICAgbG9hZEVycm9yPzogdW5rbm93bjtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxuICAgIG5hbWVzcGFjZSBOb2RlSlMge1xuICAgICAgICBpbnRlcmZhY2UgR2xvYmFsIHtcbiAgICAgICAgICAgIENGOiBDYW5keUdsb2JhbEluamVjdGVkVmFyO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5kZWNsYXJlIGNvbnN0IGdsb2JhbDogV2luZG93O1xuXG5mdW5jdGlvbiBkZWZhdWx0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgLyogZW1wdHkgKi9cbn1cblxuZnVuY3Rpb24gcGFyc2VCb29sKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufVxuXG5mdW5jdGlvbiB1cmwocmVsYXRpdmVVcmw6IHN0cmluZyA9IFwiXCIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VVcmwgPSBnbG9iYWwuQ0Yua2Vmb3Jtc1VybCB8fCBcIlwiO1xuXG4gICAgcmV0dXJuIGAke2Jhc2VVcmx9LyR7cmVsYXRpdmVVcmx9YC5yZXBsYWNlKC8oW146XSlcXC97Mix9L2csIFwiJDEvXCIpO1xufVxuXG5mdW5jdGlvbiBidWlsZFVybChwYXRoOiBzdHJpbmcsIHBhcmFtczogeyBbcGFyYW1OYW1lOiBzdHJpbmddOiB1bmRlZmluZWQgfCBzdHJpbmcgfSk6IHN0cmluZyB7XG4gICAgaWYgKHBhcmFtcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbiAgICBjb25zdCBxdWVyeVBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcGFyYW1OYW1lIG9mIE9iamVjdC5rZXlzKHBhcmFtcykpIHtcbiAgICAgICAgY29uc3QgcGFyYW1WYWx1ZSA9IHBhcmFtc1twYXJhbU5hbWVdO1xuICAgICAgICBpZiAocGFyYW1WYWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFydHMucHVzaChgJHtwYXJhbU5hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtVmFsdWUpfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChxdWVyeVBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGggKyBcIj9cIiArIHF1ZXJ5UGFydHMuam9pbihcIiZcIik7XG59XG5cbmZ1bmN0aW9uIGlzQWxsb3dlZChkb21haW5zOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXig/OiR7ZG9tYWlucy5yZXBsYWNlKC9cXC4vZywgXCJcXFxcLlwiKS5yZXBsYWNlKC9cXCovZywgXCJbYS16MC05LS5dK1wiKX0pJGApLnRlc3QoXG4gICAgICAgIGdsb2JhbC5sb2NhdGlvbi5ob3N0XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyQnlOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKGdsb2JhbC5sb2NhdGlvbi5zZWFyY2hcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eKFxcP3wjfCYpLywgXCJcIilcbiAgICAgICAgICAgIC5zcGxpdChcIiZcIilcbiAgICAgICAgICAgIC5tYXAocGFyYW0gPT4gcGFyYW0ucmVwbGFjZSgvXFwrL2csIFwiIFwiKS5zcGxpdChcIj1cIikubWFwKGRlY29kZVVSSUNvbXBvbmVudCkpXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgICAgLmZpbmQoKFtrZXldKSA9PiBrZXkgPT0gbmFtZSkgfHwgW10pWzFdXG4gICAgKTtcbn1cblxudHlwZSBUYXNrID0gKGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCkgPT4gdm9pZDtcblxuZnVuY3Rpb24gcnVuUGFyYWxsZWwodGFza3M6IFRhc2tbXSwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgbGV0IGNvbXBsZXRlZCA9IDA7XG5cbiAgICB0YXNrcy5mb3JFYWNoKHRhc2sgPT4ge1xuICAgICAgICB0YXNrKGVycm9yID0+IHtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5pbnRlcmZhY2UgU3RhcnRGb3JtU2V0dGluZyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlc291cmNlc1ZlcnNpb246IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwobGVmdDogc3RyaW5nLCByaWdodDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGVmdE51bWJlcnMgPSBsZWZ0XG4gICAgICAgICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAgICAgICAuc2xpY2UoMCwgMylcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpO1xuICAgICAgICBjb25zdCByaWdodE51bWJlcnMgPSByaWdodFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChsZWZ0TnVtYmVyc1swXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMF0gPz8gMCkgfHxcbiAgICAgICAgICAgICgobGVmdE51bWJlcnNbMF0gPz8gMCkgPT09IChyaWdodE51bWJlcnNbMF0gPz8gMCkgJiZcbiAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID4gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID09PSAocmlnaHROdW1iZXJzWzFdID8/IDApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobGVmdE51bWJlcnNbMl0gPz8gMCkgPj0gKHJpZ2h0TnVtYmVyc1syXSA/PyAwKSkpKVxuICAgICAgICApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBsb2FkRm9ybShzZXR0aW5nczogU3RhcnRGb3JtU2V0dGluZywgY2FsbGJhY2s6IChlcnJvcj86IG51bGwgfCB1bmRlZmluZWQgfCBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZ2Z2LCBlbmdpbmVWZXJzaW9uLCByZXNvdXJjZXNWZXJzaW9uIH0gPSBzZXR0aW5ncztcblxuICAgIGlmIChnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNOZWVkRW5naW5lID0gZW5naW5lVmVyc2lvbiAmJiAhZ2xvYmFsW2VuZ2luZVZlcnNpb25dO1xuICAgIGNvbnN0IG5vU3R5bGVzRm9yR2Z2ID0gZmFsc2U7IC8vIGVuZ2luZVZlcnNpb24gIT0gdW5kZWZpbmVkICYmIChpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwoZW5naW5lVmVyc2lvbiwgXCI0LjIxNC4wXCIpIHx8IGVuZ2luZVZlcnNpb24gPT09IFwibG9jYWxcIik7XG4gICAgY29uc3QgbmVlZExvYWRTdHlsZXNGb3JHZnYgPSAhbm9TdHlsZXNGb3JHZnY7XG4gICAgY29uc3QgbWluID0gZ2V0UGFyYW1ldGVyQnlOYW1lKFwiZGVidWdcIikgPT09IFwidHJ1ZVwiID8gXCJcIiA6IFwiLm1pblwiO1xuICAgIGNvbnN0IHRhc2tzOiBUYXNrW10gPSBbXTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHsgdjogcmVzb3VyY2VzVmVyc2lvbiwgcmVzb3VyY2Vab25lOiBzZXR0aW5ncy5yZXNvdXJjZVpvbmUgfTtcbiAgICBpZiAobmVlZExvYWRTdHlsZXNGb3JHZnYpIHtcbiAgICAgICAgdGFza3MucHVzaChjYiA9PlxuICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvJHtnZnZ9JHttaW59LmNzc2AsIHBhcmFtcykpLCB0cnVlLCBjYilcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdGFza3MucHVzaChjYiA9PiBMb2FkSW50b0RvY3VtZW50LnNjcmlwdCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy8ke2dmdn0ke21pbn0uanNgLCBwYXJhbXMpKSwgY2IpKTtcblxuICAgIGlmIChpc05lZWRFbmdpbmUpIHtcbiAgICAgICAgdGFza3MucHVzaChcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke21pbn0uY3NzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmpzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJ1blBhcmFsbGVsKHRhc2tzLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZvcm0oXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+XG4pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRW50cnlQb2ludCA9XG4gICAgICAgIGdsb2JhbC5DRi5lbnRyeVBvaW50W2V4dGVuZGVkU2V0dGluZ3MuZ2Z2XSA/PyByZWplY3QoYEZvcm0gZW50cnkgcG9pbnQgJHtleHRlbmRlZFNldHRpbmdzLmdmdn0gbm90IGZvdW5kLmApO1xuICAgIGZvcm1FbnRyeVBvaW50KHBhZ2VDb250ZW50LCBleHRlbmRlZFNldHRpbmdzKVxuICAgICAgICAudGhlbihmb3JtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHB1YmxpY0Zvcm0gPSBmb3JtLnB1YmxpY0Zvcm0gfHwgY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcHVibGljRm9ybSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRGb3JtT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8QVVPT3B0aW9ucz4ge1xuICAgIG5zOiBzdHJpbmc7XG4gICAgZHJhZnRJZDogc3RyaW5nO1xuICAgIGdmdj86IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xuICAgIGZlZWRiYWNrRW5hYmxlZD86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtPzogYm9vbGVhbjtcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgYXV0aGVudGljYXRpb24/OiBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiIHwgeyBhdXRoU2lkOiBzdHJpbmcgfTtcbiAgICBmZXRjaD86IHR5cGVvZiBmZXRjaDtcbiAgICBtb2RlbD86IHsgW3BhdGg6IHN0cmluZ106IHVua25vd24gfTtcbiAgICBldmVudEVtaXR0ZXI/OiBMYXlvdXRFdmVudHNTdGF0aWM7XG4gICAgZW1wbG95ZXJJZD86IHN0cmluZztcbn1cblxuZnVuY3Rpb24gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uOiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nKTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludCB7XG4gICAgaWYgKGVuZ2luZVZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIHJldHVybiBnbG9iYWxbZW5naW5lVmVyc2lvbl0gJiYgZ2xvYmFsW2VuZ2luZVZlcnNpb25dLmRlZmF1bHQ7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0KFxuICAgIHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLFxuICAgIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsXG4gICAgY2FsbGJhY2s6IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4gPSBkZWZhdWx0Q2FsbGJhY2tcbik6IHZvaWQge1xuICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgY29uc3QgeyBucywgZHJhZnRJZCB9ID0gb3B0aW9ucztcblxuICAgIGlmICghaXNBbGxvd2VkKGNsaWVudFNldHRpbmdzLmtvbnR1ckRvbWFpbnMpKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiZG9tYWluLnVudHJ1c3RlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFjbGllbnRTZXR0aW5ncy5hdXRob3JpemVkKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwidXNlci51bmF1dGhlbnRpY2F0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghZHJhZnRJZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMuZHJhZnRJZCBpcyByZXF1aXJlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFucykge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMubnMgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlWm9uZSA9IG9wdGlvbnMucmVzb3VyY2Vab25lID8/IGdldFBhcmFtZXRlckJ5TmFtZShcInJlc291cmNlWm9uZVwiKTtcbiAgICBjb25zdCBjbGllbnREcmFmdFVybCA9IGJ1aWxkVXJsKHVybChnZXRDbGllbnREcmFmdEluZm9VcmwoeyBuczogbnMsIGRyYWZ0SWQ6IGRyYWZ0SWQgfSkpLCB7XG4gICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RJbml0ID0geyBtZXRob2Q6IFwiR0VUXCIgfTtcbiAgICBpZiAob3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PT0gXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIikge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwiaW5jbHVkZVwiO1xuICAgIH0gZWxzZSBpZiAoXCJhdXRoU2lkXCIgaW4gb3B0aW9ucy5hdXRoZW50aWNhdGlvbiAmJiBvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBBVVRILlNJRCAke29wdGlvbnMuYXV0aGVudGljYXRpb24uYXV0aFNpZH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgfVxuICAgIGNvbnN0IGZldGNoSW1wbCA9IG9wdGlvbnMuZmV0Y2ggPz8gZmV0Y2g7XG5cbiAgICBmZXRjaEltcGwoY2xpZW50RHJhZnRVcmwsIHJlcXVlc3RPcHRpb25zKVxuICAgICAgICAudGhlbih4ID0+IHguanNvbigpKVxuICAgICAgICAudGhlbigoY2xpZW50RHJhZnRJbmZvOiBDbGllbnREcmFmdEluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2Z2ID0gY2xpZW50RHJhZnRJbmZvLmdmdjtcbiAgICAgICAgICAgIGNvbnN0IGVuZ2luZVZlcnNpb24gPSBjbGllbnREcmFmdEluZm8uZW5naW5lVmVyc2lvbjtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuZGVkU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgYXV0aG9yaXplZDogY2xpZW50U2V0dGluZ3MuYXV0aG9yaXplZCxcbiAgICAgICAgICAgICAgICBjYXVsZHJvbkFwaVVybDogY2xpZW50U2V0dGluZ3MuY2F1bGRyb25BcGlVcmwsXG4gICAgICAgICAgICAgICAgaXNUZXN0U2VydmVyOiBjbGllbnRTZXR0aW5ncy5pc1Rlc3RTZXJ2ZXIsXG4gICAgICAgICAgICAgICAgcmVuZGVyQ2FjaGluZ0ZvcklFODogY2xpZW50U2V0dGluZ3MucmVuZGVyQ2FjaGluZ0ZvcklFOCxcbiAgICAgICAgICAgICAgICBub3JtYWxpemF0aW9uT25TZXJ2ZXI6IGNsaWVudFNldHRpbmdzLm5vcm1hbGl6YXRpb25PblNlcnZlcixcbiAgICAgICAgICAgICAgICBub3JtYXRpdmVVcmw6IGNsaWVudFNldHRpbmdzLm5vcm1hdGl2ZVVybCxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXNWZXJzaW9uOiBjbGllbnRTZXR0aW5ncy5yZXNvdXJjZXNWZXJzaW9uLFxuICAgICAgICAgICAgICAgIGtvbnR1ckRvbWFpbnM6IGNsaWVudFNldHRpbmdzLmtvbnR1ckRvbWFpbnMsXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBhYm9uSWQ6IG9wdGlvbnMuYWJvbklkLFxuICAgICAgICAgICAgICAgIG9yZ0lkOiBvcHRpb25zLm9yZ0lkLFxuICAgICAgICAgICAgICAgIHVzZXJJZDogb3B0aW9ucy51c2VySWQsXG4gICAgICAgICAgICAgICAgLi4uY2xpZW50RHJhZnRJbmZvLFxuICAgICAgICAgICAgICAgIGdmdjogZ2Z2LFxuICAgICAgICAgICAgICAgIGlzSW5kaXZpZHVhbDogY2xpZW50RHJhZnRJbmZvLmlzSW5kaXZpZHVhbCxcbiAgICAgICAgICAgICAgICBpc0ZvcmVpZ246IGNsaWVudERyYWZ0SW5mby5pc0ZvcmVpZ24sXG4gICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICBmZWVkYmFja0VuYWJsZWQ6IG9wdGlvbnMuZmVlZGJhY2tFbmFibGVkID8/IGNsaWVudERyYWZ0SW5mby5mZWVkYmFja0VuYWJsZWQsXG4gICAgICAgICAgICAgICAgY2FuZHlUb3VyQXZhaWxhYmxlOiBjbGllbnREcmFmdEluZm8uY2FuZHlUb3VyQXZhaWxhYmxlLFxuICAgICAgICAgICAgICAgIGV2ZW50RW1pdHRlcjogb3B0aW9ucy5ldmVudEVtaXR0ZXIsXG4gICAgICAgICAgICAgICAgZm9ybUluZm86IGNsaWVudERyYWZ0SW5mby5mb3JtSW5mbyxcbiAgICAgICAgICAgICAgICBwcmludEluZm86IGNsaWVudERyYWZ0SW5mby5wcmludEluZm8sXG4gICAgICAgICAgICAgICAgcmVnaW9uczogY2xpZW50RHJhZnRJbmZvLnJlZ2lvbnMsXG4gICAgICAgICAgICAgICAgaGFzVGVtcGxhdGVzOiBjbGllbnREcmFmdEluZm8uaGFzVGVtcGxhdGVzLFxuICAgICAgICAgICAgICAgIG1vZGVsOiBvcHRpb25zLm1vZGVsLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbGVhbkZvcm06IG9wdGlvbnMuaXNEaXNhYmxlZENsZWFuRm9ybSA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VCdXR0b246IG9wdGlvbnMuaXNEaXNhYmxlZENsb3NlQnV0dG9uID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b246IG9wdGlvbnMuaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbjogb3B0aW9ucy5hdXRoZW50aWNhdGlvbixcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxvYWRGb3JtKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZ2Z2OiBleHRlbmRlZFNldHRpbmdzLmdmdixcbiAgICAgICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5lbmdpbmVWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IGV4dGVuZGVkU2V0dGluZ3MucmVzb3VyY2Vab25lLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNWZXJzaW9uOiBleHRlbmRlZFNldHRpbmdzLnJlc291cmNlc1ZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIHRoZW1lOiBleHRlbmRlZFNldHRpbmdzLnRoZW1lLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbG9hZEVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRFcnJvciB8fCAhZ2xvYmFsLkNGLmVudHJ5UG9pbnRbZ2Z2XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKGBkeW5hbWljIGxvYWRpbmcgaXMgbm90IHN1cHBvcnRlZCBmb3IgZ2Z2ICR7Z2Z2fWApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW5kZXIgPSBnZXRFbmdpbmVFbnRyeVBvaW50KGVuZ2luZVZlcnNpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlQ29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5leHRlbmRlZFNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlc0FwaTogb3B0aW9ucy50ZW1wbGF0ZXNBcGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyRm9ybTogcmVuZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGNhbGxiYWNrKTtcbn1cblxuY29uc3QgQ2FuZHlDbGllbnRFeHBvcnRzOiBDYW5keUdsb2JhbEluamVjdGVkVmFyID0ge1xuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbnRyeVBvaW50OiB7fSxcbiAgICBwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cGFydGlhbFJlbmRlcmluZ0ZvcklFOH1cIiksXG4gICAga2Vmb3Jtc1VybDogXCJ7a2Vmb3Jtc1VybH1cIixcbn07XG5cbmdsb2JhbC5DRiA9IENhbmR5Q2xpZW50RXhwb3J0cztcblxuZXhwb3J0IHsgQ2FuZHlDbGllbnRFeHBvcnRzIH07XG4iLCJpbXBvcnQgYXJyYXlXaXRoSG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRoSG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXlMaW1pdCBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVSZXN0IGZyb20gXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07XG5cbiAgaWYgKF9pID09IG51bGwpIHJldHVybjtcbiAgdmFyIF9hcnIgPSBbXTtcbiAgdmFyIF9uID0gdHJ1ZTtcbiAgdmFyIF9kID0gZmFsc2U7XG5cbiAgdmFyIF9zLCBfZTtcblxuICB0cnkge1xuICAgIGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHtcbiAgICAgIF9hcnIucHVzaChfcy52YWx1ZSk7XG5cbiAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9kID0gdHJ1ZTtcbiAgICBfZSA9IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfYXJyO1xufSIsImltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCIvKioqXG4gKiDQodGC0YDQvtCz0L7RgtC40L/QuNC30LjRgNC+0LLQsNC90L3QsNGPINC30LDQvNC10L3QsCDQtNC70Y8gQm9vbGVhbiguLi4pXG4gKiDQntCx0YvRh9C90L4g0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINC00LvRjyBbLi4uXS5maWx0ZXIoaXNOb3ROdWxsT3JVbmRlZmluZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogVCk6IGlucHV0IGlzIE5vbk51bGxhYmxlPFQ+IHtcbiAgICByZXR1cm4gaW5wdXQgIT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5VW5rbm93bkVycm9yKGVycm9yOiB1bmtub3duKTogdW5kZWZpbmVkIHwgc3RyaW5nIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICByZXR1cm4gdHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiICYmIGVycm9yPy5bXCJtZXNzYWdlXCJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTm90TnVsbE9yVW5kZWZpbmVkPFQ+KGlucHV0OiBUKTogYXNzZXJ0cyBpbnB1dCBpcyBOb25OdWxsYWJsZTxUPiB7XG4gICAgaWYgKCFpc05vdE51bGxPclVuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSBtdXN0IGJlIGRlZmluZWRgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCk6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cblxuZXhwb3J0IHR5cGUgRXJyb3JGaXJzdENhbGxiYWNrPFQ+ID0gKC4uLmFyZ3M6IFtFcnJvciwgbnVsbCB8IHVuZGVmaW5lZF0gfCBbbnVsbCB8IHVuZGVmaW5lZCwgVF0gfCBbRXJyb3JdKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVqZWN0KG1lc3NhZ2U/OiBzdHJpbmcgfCBFcnJvcik6IG5ldmVyIHtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgfHwgbWVzc2FnZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgPz8gXCJVbmRlZmluZWQgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbWVzc2FnZTtcbiAgICB9XG59XG5cbnR5cGUgQXJyYXlPZkxlbmd0aDxUSXRlbSwgVExlbmd0aCBleHRlbmRzIG51bWJlciwgVFJlc3QgZXh0ZW5kcyBUSXRlbVtdID0gW10+ID0gVFJlc3QgZXh0ZW5kcyB7IGxlbmd0aDogVExlbmd0aCB9XG4gICAgPyBUUmVzdFxuICAgIDogQXJyYXlPZkxlbmd0aDxUSXRlbSwgVExlbmd0aCwgW1RJdGVtLCAuLi5UUmVzdF0+O1xuXG5leHBvcnQgdHlwZSBNaW5MZW5ndGhBcnJheTxUSXRlbSwgVExlbmd0aCBleHRlbmRzIG51bWJlciwgVFJlc3QgZXh0ZW5kcyBUSXRlbVtdID0gW10+ID0gVFJlc3QgZXh0ZW5kcyB7XG4gICAgbGVuZ3RoOiBUTGVuZ3RoO1xufVxuICAgID8gWy4uLlRSZXN0LCAuLi5USXRlbVtdXVxuICAgIDogTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGgsIFsuLi5UUmVzdCwgVEl0ZW1dPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbWluTGVuZ3RoOiBUTnVtXG4pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+PSBtaW5MZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtaW5MZW5ndGhPclVuZGVmaW5lZDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogdW5kZWZpbmVkIHwgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIGlmIChpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbChpdGVtcywgbWluTGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0xlbmd0aDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA9PT0gbGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0F0TGVhc3RPbmVJdGVtPFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUlzTm90RW1wdHk8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSk6IGFzc2VydHMgaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIGlmICghYXJyYXlJc05vdEVtcHR5KGl0ZW1zKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IG11c3QgYmUgbm90IGVtcHR5YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGFzc2VydHMgaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgaWYgKCFhcnJheUhhc0xlbmd0aChpdGVtcywgbGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IHNob3VsZCBoYXMgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5TGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGhhdmUgbWluaW1hbCBsZW5ndGggJHtsZW5ndGh9YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTmV2ZXIobmV2ZXJBcmd1bWVudDogbmV2ZXIpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBbmRHZXRTdHJpbmcobmV2ZXJBcmd1bWVudDogbmV2ZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtuZXZlckFyZ3VtZW50fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5Bc3luY0FjdGlvbihhY3Rpb246ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgYWN0aW9uKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPckVtcHR5KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBpbnB1dCBpcyB1bmRlZmluZWQge1xuICAgIHJldHVybiBpbnB1dCA9PSB1bmRlZmluZWQgfHwgaW5wdXQgPT09IFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE51bGxPckVtcHR5KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBpbnB1dCBpcyBzdHJpbmcge1xuICAgIHJldHVybiAhaXNOdWxsT3JFbXB0eShpbnB1dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPcldoaXRlU3BhY2UoaW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpOiBpbnB1dCBpcyB1bmRlZmluZWQgfCBudWxsIHtcbiAgICByZXR1cm4gaW5wdXQgPT0gdW5kZWZpbmVkIHx8IGlucHV0LnRyaW0oKSA9PT0gXCJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyaW1MYXN0U2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwuc2xpY2UoLTEpID09PSBcIi9cIiA/IHVybC5zbGljZSgwLCAtMSkgOiB1cmw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRJczxUPih2YWx1ZTogVCk6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
|
|
1074
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9HZXRDbGllbnREcmFmdEluZm9VcmwudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50U2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NvbnN0cnVjdC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vd3JhcE5hdGl2ZVN1cGVyLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZUZ1bmN0aW9uLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9FcnJvcnMudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvTGVnYWN5UHVibGljRm9ybS9DcmVhdGVMZWdhY3lQdWJsaWNGb3JtLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvRm9ybXMvQ2xpZW50L0NsaWVudC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9UeXBpbmdVdGlscy50cyJdLCJuYW1lcyI6WyJfX3dlYnBhY2tfcmVxdWlyZV9fIiwiX2RlZmluZVByb3BlcnR5Iiwib2JqIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl9hcnJheUxpa2VUb0FycmF5IiwiYXJyIiwibGVuIiwibGVuZ3RoIiwiaSIsImFycjIiLCJBcnJheSIsImciLCJnbG9iYWxUaGlzIiwidGhpcyIsIkZ1bmN0aW9uIiwiZSIsIndpbmRvdyIsImdsb2JhbCIsInNlbGYiLCJzdXBwb3J0IiwiU3ltYm9sIiwiQmxvYiIsIkRhdGFWaWV3IiwicHJvdG90eXBlIiwiaXNQcm90b3R5cGVPZiIsInZpZXdDbGFzc2VzIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImluZGV4T2YiLCJ0b1N0cmluZyIsImNhbGwiLCJub3JtYWxpemVOYW1lIiwibmFtZSIsIlN0cmluZyIsInRlc3QiLCJUeXBlRXJyb3IiLCJ0b0xvd2VyQ2FzZSIsIm5vcm1hbGl6ZVZhbHVlIiwiaXRlcmF0b3JGb3IiLCJpdGVtcyIsIml0ZXJhdG9yIiwibmV4dCIsInNoaWZ0IiwiZG9uZSIsInVuZGVmaW5lZCIsIkhlYWRlcnMiLCJoZWFkZXJzIiwibWFwIiwiZm9yRWFjaCIsImFwcGVuZCIsImlzQXJyYXkiLCJoZWFkZXIiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwib2xkVmFsdWUiLCJnZXQiLCJoYXMiLCJoYXNPd25Qcm9wZXJ0eSIsInNldCIsImNhbGxiYWNrIiwidGhpc0FyZyIsImtleXMiLCJwdXNoIiwidmFsdWVzIiwiZW50cmllcyIsImNvbnN1bWVkIiwiYm9keSIsImJvZHlVc2VkIiwiUHJvbWlzZSIsInJlamVjdCIsImZpbGVSZWFkZXJSZWFkeSIsInJlYWRlciIsInJlc29sdmUiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwiZXJyb3IiLCJyZWFkQmxvYkFzQXJyYXlCdWZmZXIiLCJibG9iIiwiRmlsZVJlYWRlciIsInByb21pc2UiLCJyZWFkQXNBcnJheUJ1ZmZlciIsInJlYWRBc1RleHQiLCJidWYiLCJ2aWV3IiwiVWludDhBcnJheSIsImNoYXJzIiwiZnJvbUNoYXJDb2RlIiwiam9pbiIsImJ1ZmZlckNsb25lIiwic2xpY2UiLCJieXRlTGVuZ3RoIiwiYnVmZmVyIiwiQm9keSIsIl9pbml0Qm9keSIsIl9ib2R5SW5pdCIsIl9ib2R5VGV4dCIsIl9ib2R5QmxvYiIsIkZvcm1EYXRhIiwiX2JvZHlGb3JtRGF0YSIsIlVSTFNlYXJjaFBhcmFtcyIsIl9ib2R5QXJyYXlCdWZmZXIiLCJ0eXBlIiwicmVqZWN0ZWQiLCJFcnJvciIsImFycmF5QnVmZmVyIiwiYnl0ZU9mZnNldCIsInRoZW4iLCJ0ZXh0IiwicmVhZEFycmF5QnVmZmVyQXNUZXh0IiwiZm9ybURhdGEiLCJkZWNvZGUiLCJqc29uIiwiSlNPTiIsInBhcnNlIiwibWV0aG9kcyIsIm1ldGhvZCIsInVwY2FzZWQiLCJ0b1VwcGVyQ2FzZSIsIlJlcXVlc3QiLCJpbnB1dCIsIm9wdGlvbnMiLCJ1cmwiLCJjcmVkZW50aWFscyIsIm1vZGUiLCJzaWduYWwiLCJyZWZlcnJlciIsImNhY2hlIiwicmVQYXJhbVNlYXJjaCIsInJlcGxhY2UiLCJEYXRlIiwiZ2V0VGltZSIsImNsb25lIiwiZm9ybSIsInRyaW0iLCJzcGxpdCIsImJ5dGVzIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmF3SGVhZGVycyIsInN1YnN0ciIsImxpbmUiLCJwYXJ0cyIsIlJlc3BvbnNlIiwiYm9keUluaXQiLCJzdGF0dXMiLCJvayIsInN0YXR1c1RleHQiLCJyZXNwb25zZSIsInJlZGlyZWN0U3RhdHVzZXMiLCJyZWRpcmVjdCIsIlJhbmdlRXJyb3IiLCJsb2NhdGlvbiIsIkRPTUV4Y2VwdGlvbiIsImVyciIsIm1lc3NhZ2UiLCJzdGFjayIsImNyZWF0ZSIsImNvbnN0cnVjdG9yIiwiZmV0Y2giLCJpbml0IiwicmVxdWVzdCIsImFib3J0ZWQiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsImFib3J0WGhyIiwiYWJvcnQiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZVVSTCIsInJlc3BvbnNlVGV4dCIsInNldFRpbWVvdXQiLCJvbnRpbWVvdXQiLCJvbmFib3J0IiwiaHJlZiIsIm9wZW4iLCJmaXhVcmwiLCJ3aXRoQ3JlZGVudGlhbHMiLCJyZXNwb25zZVR5cGUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2VuZCIsInBvbHlmaWxsIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJkZXNjcmlwdG9yIiwiX2NyZWF0ZUNsYXNzIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiTG9hZEludG9Eb2N1bWVudCIsInVyaSIsInNjcmlwdExvYWRlZCIsImhlYWQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZG9jdW1lbnRFbGVtZW50Iiwic2NyaXB0IiwiY3JlYXRlRWxlbWVudCIsImxvYWRIYW5kbGVyIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwic3JjIiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJpZ25vcmVFcnJvciIsImxpbmsiLCJnZXRDbGllbnREcmFmdEluZm9VcmwiLCJkcmFmdElkIiwibnMiLCJwYXJzZUJvb2wiLCJCb29sZWFuIiwiY2xpZW50U2V0dGluZ3MiLCJhdXRob3JpemVkIiwiY2F1bGRyb25BcGlVcmwiLCJpc1Rlc3RTZXJ2ZXIiLCJyZW5kZXJDYWNoaW5nRm9ySUU4Iiwibm9ybWFsaXphdGlvbk9uU2VydmVyIiwibm9ybWF0aXZlVXJsIiwicmVzb3VyY2VzVmVyc2lvbiIsImtvbnR1ckRvbWFpbnMiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJnZW4iLCJfbmV4dCIsIl90aHJvdyIsImFyZyIsImluZm8iLCJmbiIsImFyZ3MiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9zZXRQcm90b3R5cGVPZiIsIm8iLCJwIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIlJlZmVyZW5jZUVycm9yIiwiX2dldFByb3RvdHlwZU9mIiwiZ2V0UHJvdG90eXBlT2YiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsInNoYW0iLCJQcm94eSIsInZhbHVlT2YiLCJfY29uc3RydWN0IiwiUGFyZW50IiwiQ2xhc3MiLCJhIiwiYmluZCIsIl93cmFwTmF0aXZlU3VwZXIiLCJfY2FjaGUiLCJNYXAiLCJXcmFwcGVyIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsIm1vZGVsQ2hhbmdlRXZlbnRQYXRoIiwicGF0aCIsImZpZWxkTmFtZSIsIm1hcENodW5rVmFsdWVzIiwiY2h1bmsiLCJmaWx0ZXIiLCJyZWR1Y2VDaHVua1ZhbHVlcyIsImNodW5rcyIsInJlZHVjZSIsIkxlZ2FjeVB1YmxpY0Zvcm0iLCJ1cGRhdGVQcm9jIiwiZXJyb3JMb2ciLCJlbXBsb3llZXMiLCJwcmludFR5cGUiLCJhY3Rpb25JZCIsInBhcmFtZXRlcnMiLCJnSWQiLCJwaWNrbGlzdHNQcm92aWRlciIsImdldERpZ2VzdEFwaVBpY2tsaXN0IiwicXVlcnkiLCJldmVudE5hbWUiLCJsaXN0ZW5lciIsImV2ZW50TWFuYWdlciIsIm9uIiwib2ZmIiwiY2hhbmdlU2V0Iiwic3RvcEF1dG9zZW5kIiwidW5tb3VudCIsIm1vZGVsIiwiZ2V0Q2h1bmsiLCJzZXR0aW5ncyIsImZvcm1Sb290IiwidmFsaWRhdG9yIiwidmFsaWRhdGVBbGwiLCJmaWx0ZXJzIiwiZXJyb3JDb3VudCIsInBhdGhPck1vZGVsQ2h1bmsiLCJpbm5lckNodW5rIiwiZmlsbCIsInBhdGhPckFycmF5IiwiYXJyYXkiLCJjb25jYXQiLCJzb3VyY2VCaW5kaW5nUGF0aCIsInRhcmdldEJpbmRpbmdQYXRoIiwiZG9Ob3RDb3B5UGF0aHMiLCJlbXBsb3llZUlkIiwiaW5zdGFuY2VzIiwiZW5hYmxlZCIsInBhdGhQcmVmaXhlcyIsImJpbmRpbmdQYXRoIiwibm9ybWFsaXplcklkIiwiZGVmYXVsdENhbGxiYWNrIiwicmVsYXRpdmVVcmwiLCJiYXNlVXJsIiwiQ0YiLCJrZWZvcm1zVXJsIiwiYnVpbGRVcmwiLCJwYXJhbXMiLCJxdWVyeVBhcnRzIiwicGFyYW1OYW1lIiwicGFyYW1WYWx1ZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImlzQWxsb3dlZCIsImRvbWFpbnMiLCJSZWdFeHAiLCJob3N0IiwiZ2V0UGFyYW1ldGVyQnlOYW1lIiwic2VhcmNoIiwicGFyYW0iLCJmaW5kIiwidGFza3MiLCJjb21wbGV0ZWQiLCJ0YXNrIiwibG9hZEZvcm0iLCJnZnYiLCJlbmdpbmVWZXJzaW9uIiwiZW50cnlQb2ludCIsImlzTmVlZEVuZ2luZSIsIm1pbiIsInYiLCJyZXNvdXJjZVpvbmUiLCJzdHlsZVNoZWV0IiwiY2IiLCJydW5QYXJhbGxlbCIsInJlbmRlckZvcm0iLCJwYWdlQ29udGVudCIsImV4dGVuZGVkU2V0dGluZ3MiLCJwdWJsaWNGb3JtIiwiY3JlYXRlTGVnYWN5UHVibGljRm9ybSIsImdldEVuZ2luZUVudHJ5UG9pbnQiLCJjbGllbnREcmFmdFVybCIsInJlcXVlc3RPcHRpb25zIiwiYXV0aGVudGljYXRpb24iLCJhdXRoU2lkIiwiZmV0Y2hJbXBsIiwieCIsImNsaWVudERyYWZ0SW5mbyIsImFib25JZCIsIm9yZ0lkIiwidXNlcklkIiwiaXNJbmRpdmlkdWFsIiwiaXNGb3JlaWduIiwiZmVlZGJhY2tFbmFibGVkIiwiY2FuZHlUb3VyQXZhaWxhYmxlIiwiZXZlbnRFbWl0dGVyIiwiZm9ybUluZm8iLCJwcmludEluZm8iLCJyZWdpb25zIiwiaGFzVGVtcGxhdGVzIiwiaXNEaXNhYmxlZENsZWFuRm9ybSIsImlzRGlzYWJsZWRDbG9zZUJ1dHRvbiIsImlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24iLCJ0aGVtZSIsImxvYWRFcnJvciIsInJlbmRlciIsInRlbXBsYXRlc0FwaSIsIkNhbmR5Q2xpZW50RXhwb3J0cyIsInN0YXJ0IiwicGFydGlhbFJlbmRlcmluZ0ZvcklFOCIsIl9pIiwiX2FyciIsIl9uIiwiX2QiLCJfcyIsIl9lIiwibWluTGVuIiwibiIsImZyb20iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsTUFBSUEsQ0FBQUEsR0FBc0IsRUFBMUI7O0FDRGUsV0FBU0MsQ0FBVCxDQUF5QkMsQ0FBekIsRUFBOEJDLENBQTlCLEVBQW1DQyxDQUFuQyxFQUFtQ0E7QUFZaEQsV0FYSUQsQ0FBQUEsSUFBT0QsQ0FBUEMsR0FDRkUsTUFBQUEsQ0FBT0MsY0FBUEQsQ0FBc0JILENBQXRCRyxFQUEyQkYsQ0FBM0JFLEVBQWdDO0FBQzlCRCxNQUFBQSxLQUFBQSxFQUFPQSxDQUR1QjtBQUU5QkcsTUFBQUEsVUFBQUEsRUFBQUEsQ0FBWSxDQUZrQjtBQUc5QkMsTUFBQUEsWUFBQUEsRUFBQUEsQ0FBYyxDQUhnQjtBQUk5QkMsTUFBQUEsUUFBQUEsRUFBQUEsQ0FBVTtBQUpvQixLQUFoQ0osQ0FERUYsR0FRRkQsQ0FBQUEsQ0FBSUMsQ0FBSkQsQ0FBQUEsR0FBV0UsQ0FSVEQsRUFXR0QsQ0FBUDtBQ1phOztBQUFBLFdBQVNRLENBQVQsQ0FBMkJDLENBQTNCLEVBQWdDQyxDQUFoQyxFQUFnQ0E7QUFBQUEsS0FDbEMsUUFBUEEsQ0FBTyxJQUFRQSxDQUFBQSxHQUFNRCxDQUFBQSxDQUFJRSxNQURnQkQsTUFDUkEsQ0FBQUEsR0FBTUQsQ0FBQUEsQ0FBSUUsTUFERkQ7O0FBRzdDLFNBQUssSUFBSUUsQ0FBQUEsR0FBSSxDQUFSLEVBQVdDLENBQUFBLEdBQU8sSUFBSUMsS0FBSixDQUFVSixDQUFWLENBQXZCLEVBQXVDRSxDQUFBQSxHQUFJRixDQUEzQyxFQUFnREUsQ0FBQUEsRUFBaEQsRUFDRUMsQ0FBQUEsQ0FBS0QsQ0FBTEMsQ0FBQUEsR0FBVUosQ0FBQUEsQ0FBSUcsQ0FBSkgsQ0FBVkk7O0FBR0YsV0FBT0EsQ0FBUDtBQ1BGZjs7QUFBQUEsRUFBQUEsQ0FBQUEsQ0FBb0Jp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QUFLRi9CLGdCQUFBQSxVQUFBQSxFQUFZOEI7QUFMVixlQUFBLENBQVY5QixFQU9JOVIsQ0FQSjhSLENBQUFBO0FBT0k5UixhQWJKLE1BQ0lBLENBQUFBLENBQVMsSUFBSTZDLEtBQUosQ0FBQSw0Q0FBQSxNQUFBLENBQXNEdU8sQ0FBdEQsQ0FBQSxDQUFUcFIsQ0FBQUE7QUFBK0RvUixXQVYzRUQsQ0FBQUE7QUFVMkVDLFNBaERuRm9CLEVBQUFBLEtBQUFBLENBaUVXeFMsQ0FqRVh3UztBQWlFV3hTO0FBQUFBLEtBR29DO0FBRS9Dc1IsSUFBQUEsVUFBQUEsRUFBWSxFQUZtQztBQUcvQzBDLElBQUFBLHNCQUFBQSxHQUFrQyw0QkFBQSxDQXhTMUI3WCxDQXdTUjZYLENBSCtDO0FBSS9DL0QsSUFBQUEsVUFBQUEsRUFBWTtBQUptQyxHQUFuRDtBQU9BM1MsRUFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsQ0FBTzBTLEVBQVAxUyxHQUFZd1csRUFBWnhXIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIHJlcXVpcmUgc2NvcGVcbnZhciBfX3dlYnBhY2tfcmVxdWlyZV9fID0ge307XG5cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykge1xuICAgIGFycjJbaV0gPSBhcnJbaV07XG4gIH1cblxuICByZXR1cm4gYXJyMjtcbn0iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsInZhciBnbG9iYWwgPVxuICAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMpIHx8XG4gICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZikgfHxcbiAgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbClcblxudmFyIHN1cHBvcnQgPSB7XG4gIHNlYXJjaFBhcmFtczogJ1VSTFNlYXJjaFBhcmFtcycgaW4gZ2xvYmFsLFxuICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gZ2xvYmFsICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICBibG9iOlxuICAgICdGaWxlUmVhZGVyJyBpbiBnbG9iYWwgJiZcbiAgICAnQmxvYicgaW4gZ2xvYmFsICYmXG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IEJsb2IoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KSgpLFxuICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBnbG9iYWwsXG4gIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIGdsb2JhbFxufVxuXG5mdW5jdGlvbiBpc0RhdGFWaWV3KG9iaikge1xuICByZXR1cm4gb2JqICYmIERhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG9iailcbn1cblxuaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHZpZXdDbGFzc2VzID0gW1xuICAgICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nXG4gIF1cblxuICB2YXIgaXNBcnJheUJ1ZmZlclZpZXcgPVxuICAgIEFycmF5QnVmZmVyLmlzVmlldyB8fFxuICAgIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB2aWV3Q2xhc3Nlcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSA+IC0xXG4gICAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIG5hbWUgPSBTdHJpbmcobmFtZSlcbiAgfVxuICBpZiAoL1teYS16MC05XFwtIyQlJicqKy5eX2B8fiFdL2kudGVzdChuYW1lKSB8fCBuYW1lID09PSAnJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lOiBcIicgKyBuYW1lICsgJ1wiJylcbiAgfVxuICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2YWx1ZSBsaXN0XG5mdW5jdGlvbiBpdGVyYXRvckZvcihpdGVtcykge1xuICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpdGVtcy5zaGlmdCgpXG4gICAgICByZXR1cm4ge2RvbmU6IHZhbHVlID09PSB1bmRlZmluZWQsIHZhbHVlOiB2YWx1ZX1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvclxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpdGVyYXRvclxufVxuXG5leHBvcnQgZnVuY3Rpb24gSGVhZGVycyhoZWFkZXJzKSB7XG4gIHRoaXMubWFwID0ge31cblxuICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSlcbiAgICB9LCB0aGlzKVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdXG4gIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSArICcsICcgKyB2YWx1ZSA6IHZhbHVlXG59XG5cbkhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAgIH1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2gobmFtZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaXRlbXMucHVzaCh2YWx1ZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5pZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xufVxuXG5mdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gIGlmIChib2R5LmJvZHlVc2VkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpKVxuICB9XG4gIGJvZHkuYm9keVVzZWQgPSB0cnVlXG59XG5cbmZ1bmN0aW9uIGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdClcbiAgICB9XG4gICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzQXJyYXlCdWZmZXIoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzVGV4dChibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEFycmF5QnVmZmVyQXNUZXh0KGJ1Zikge1xuICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICB9XG4gIHJldHVybiBjaGFycy5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgaWYgKGJ1Zi5zbGljZSkge1xuICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgfSBlbHNlIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKVxuICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gIH1cbn1cblxuZnVuY3Rpb24gQm9keSgpIHtcbiAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlXG5cbiAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgLypcbiAgICAgIGZldGNoLW1vY2sgd3JhcHMgdGhlIFJlc3BvbnNlIG9iamVjdCBpbiBhbiBFUzYgUHJveHkgdG9cbiAgICAgIHByb3ZpZGUgdXNlZnVsIHRlc3QgaGFybmVzcyBmZWF0dXJlcyBzdWNoIGFzIGZsdXNoLiBIb3dldmVyLCBvblxuICAgICAgRVM1IGJyb3dzZXJzIHdpdGhvdXQgZmV0Y2ggb3IgUHJveHkgc3VwcG9ydCBwb2xseWZpbGxzIG11c3QgYmUgdXNlZDtcbiAgICAgIHRoZSBwcm94eS1wb2xseWZpbGwgaXMgdW5hYmxlIHRvIHByb3h5IGFuIGF0dHJpYnV0ZSB1bmxlc3MgaXQgZXhpc3RzXG4gICAgICBvbiB0aGUgb2JqZWN0IGJlZm9yZSB0aGUgUHJveHkgaXMgY3JlYXRlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlc1xuICAgICAgUmVzcG9uc2UuYm9keVVzZWQgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZSwgd2hpbGUgbWFpbnRhaW5pbmcgdGhlXG4gICAgICBzZW1hbnRpYyBvZiBzZXR0aW5nIFJlcXVlc3QuYm9keVVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGJlZm9yZVxuICAgICAgX2luaXRCb2R5IGlzIGNhbGxlZC5cbiAgICAqL1xuICAgIHRoaXMuYm9keVVzZWQgPSB0aGlzLmJvZHlVc2VkXG4gICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9ICcnXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5mb3JtRGF0YSAmJiBGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUZvcm1EYXRhID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpXG4gICAgICAvLyBJRSAxMC0xMSBjYW4ndCBoYW5kbGUgYSBEYXRhVmlldyBib2R5LlxuICAgICAgdGhpcy5fYm9keUluaXQgPSBuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpIHx8IGlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJvZHkpXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04JylcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUJsb2IgJiYgdGhpcy5fYm9keUJsb2IudHlwZSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCB0aGlzLl9ib2R5QmxvYi50eXBlKVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04JylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmFycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHZhciBpc0NvbnN1bWVkID0gY29uc3VtZWQodGhpcylcbiAgICAgICAgaWYgKGlzQ29uc3VtZWQpIHtcbiAgICAgICAgICByZXR1cm4gaXNDb25zdW1lZFxuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodGhpcy5fYm9keUFycmF5QnVmZmVyKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnVmZmVyLnNsaWNlKFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQgKyB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmxvYigpLnRoZW4ocmVhZEJsb2JBc0FycmF5QnVmZmVyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRoaXMudGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgIHJldHVybiByZWFkQmxvYkFzVGV4dCh0aGlzLl9ib2R5QmxvYilcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQnKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmZvcm1EYXRhKSB7XG4gICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpXG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIVFRQIG1ldGhvZHMgd2hvc2UgY2FwaXRhbGl6YXRpb24gc2hvdWxkIGJlIG5vcm1hbGl6ZWRcbnZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpIHtcbiAgdmFyIHVwY2FzZWQgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICByZXR1cm4gbWV0aG9kcy5pbmRleE9mKHVwY2FzZWQpID4gLTEgPyB1cGNhc2VkIDogbWV0aG9kXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXF1ZXN0KGlucHV0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXF1ZXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5XG5cbiAgaWYgKGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJylcbiAgICB9XG4gICAgdGhpcy51cmwgPSBpbnB1dC51cmxcbiAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHNcbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5wdXQuaGVhZGVycylcbiAgICB9XG4gICAgdGhpcy5tZXRob2QgPSBpbnB1dC5tZXRob2RcbiAgICB0aGlzLm1vZGUgPSBpbnB1dC5tb2RlXG4gICAgdGhpcy5zaWduYWwgPSBpbnB1dC5zaWduYWxcbiAgICBpZiAoIWJvZHkgJiYgaW5wdXQuX2JvZHlJbml0ICE9IG51bGwpIHtcbiAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXRcbiAgICAgIGlucHV0LmJvZHlVc2VkID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLnVybCA9IFN0cmluZyhpbnB1dClcbiAgfVxuXG4gIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ3NhbWUtb3JpZ2luJ1xuICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIH1cbiAgdGhpcy5tZXRob2QgPSBub3JtYWxpemVNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5tZXRob2QgfHwgJ0dFVCcpXG4gIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZSB8fCB0aGlzLm1vZGUgfHwgbnVsbFxuICB0aGlzLnNpZ25hbCA9IG9wdGlvbnMuc2lnbmFsIHx8IHRoaXMuc2lnbmFsXG4gIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgfVxuICB0aGlzLl9pbml0Qm9keShib2R5KVxuXG4gIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykge1xuICAgIGlmIChvcHRpb25zLmNhY2hlID09PSAnbm8tc3RvcmUnIHx8IG9wdGlvbnMuY2FjaGUgPT09ICduby1jYWNoZScpIHtcbiAgICAgIC8vIFNlYXJjaCBmb3IgYSAnXycgcGFyYW1ldGVyIGluIHRoZSBxdWVyeSBzdHJpbmdcbiAgICAgIHZhciByZVBhcmFtU2VhcmNoID0gLyhbPyZdKV89W14mXSovXG4gICAgICBpZiAocmVQYXJhbVNlYXJjaC50ZXN0KHRoaXMudXJsKSkge1xuICAgICAgICAvLyBJZiBpdCBhbHJlYWR5IGV4aXN0cyB0aGVuIHNldCB0aGUgdmFsdWUgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHRoaXMudXJsID0gdGhpcy51cmwucmVwbGFjZShyZVBhcmFtU2VhcmNoLCAnJDFfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSBhZGQgYSBuZXcgJ18nIHBhcmFtZXRlciB0byB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB2YXIgcmVRdWVyeVN0cmluZyA9IC9cXD8vXG4gICAgICAgIHRoaXMudXJsICs9IChyZVF1ZXJ5U3RyaW5nLnRlc3QodGhpcy51cmwpID8gJyYnIDogJz8nKSArICdfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbn1cblxuZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICBib2R5XG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgnJicpXG4gICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGlmIChieXRlcykge1xuICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBmb3JtXG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gIHZhciBwcmVQcm9jZXNzZWRIZWFkZXJzID0gcmF3SGVhZGVycy5yZXBsYWNlKC9cXHI/XFxuW1xcdCBdKy9nLCAnICcpXG4gIC8vIEF2b2lkaW5nIHNwbGl0IHZpYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIGNvbW1vbiBJRTExIGJ1ZyB3aXRoIHRoZSBjb3JlLWpzIDMuNi4wIHJlZ2V4IHBvbHlmaWxsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gvaXNzdWVzLzc0OFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNzUxXG4gIHByZVByb2Nlc3NlZEhlYWRlcnNcbiAgICAuc3BsaXQoJ1xccicpXG4gICAgLm1hcChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIuaW5kZXhPZignXFxuJykgPT09IDAgPyBoZWFkZXIuc3Vic3RyKDEsIGhlYWRlci5sZW5ndGgpIDogaGVhZGVyXG4gICAgfSlcbiAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6JylcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpXG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIHRoaXMudHlwZSA9ICdkZWZhdWx0J1xuICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1c1xuICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gIHRoaXMuc3RhdHVzVGV4dCA9IG9wdGlvbnMuc3RhdHVzVGV4dCA9PT0gdW5kZWZpbmVkID8gJycgOiAnJyArIG9wdGlvbnMuc3RhdHVzVGV4dFxuICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpXG59XG5cbkJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cblJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICB1cmw6IHRoaXMudXJsXG4gIH0pXG59XG5cblJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAwLCBzdGF0dXNUZXh0OiAnJ30pXG4gIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InXG4gIHJldHVybiByZXNwb25zZVxufVxuXG52YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG59XG5cbmV4cG9ydCB2YXIgRE9NRXhjZXB0aW9uID0gZ2xvYmFsLkRPTUV4Y2VwdGlvblxudHJ5IHtcbiAgbmV3IERPTUV4Y2VwdGlvbigpXG59IGNhdGNoIChlcnIpIHtcbiAgRE9NRXhjZXB0aW9uID0gZnVuY3Rpb24obWVzc2FnZSwgbmFtZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2VcbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gICAgdmFyIGVycm9yID0gRXJyb3IobWVzc2FnZSlcbiAgICB0aGlzLnN0YWNrID0gZXJyb3Iuc3RhY2tcbiAgfVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpXG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBET01FeGNlcHRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoKGlucHV0LCBpbml0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgfVxuXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG5cbiAgICBmdW5jdGlvbiBhYm9ydFhocigpIHtcbiAgICAgIHhoci5hYm9ydCgpXG4gICAgfVxuXG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIHN0YXR1czogeGhyLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICB9XG4gICAgICBvcHRpb25zLnVybCA9ICdyZXNwb25zZVVSTCcgaW4geGhyID8geGhyLnJlc3BvbnNlVVJMIDogb3B0aW9ucy5oZWFkZXJzLmdldCgnWC1SZXF1ZXN0LVVSTCcpXG4gICAgICB2YXIgYm9keSA9ICdyZXNwb25zZScgaW4geGhyID8geGhyLnJlc3BvbnNlIDogeGhyLnJlc3BvbnNlVGV4dFxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzb2x2ZShuZXcgUmVzcG9uc2UoYm9keSwgb3B0aW9ucykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub250aW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaXhVcmwodXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXJsID09PSAnJyAmJiBnbG9iYWwubG9jYXRpb24uaHJlZiA/IGdsb2JhbC5sb2NhdGlvbi5ocmVmIDogdXJsXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgZml4VXJsKHJlcXVlc3QudXJsKSwgdHJ1ZSlcblxuICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIpIHtcbiAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc3VwcG9ydC5hcnJheUJ1ZmZlciAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKS5pbmRleE9mKCdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbml0ICYmIHR5cGVvZiBpbml0LmhlYWRlcnMgPT09ICdvYmplY3QnICYmICEoaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykpIHtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluaXQuaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIG5vcm1hbGl6ZVZhbHVlKGluaXQuaGVhZGVyc1tuYW1lXSkpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICByZXF1ZXN0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuXG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gIH0pXG59XG5cbmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuXG5pZiAoIWdsb2JhbC5mZXRjaCkge1xuICBnbG9iYWwuZmV0Y2ggPSBmZXRjaFxuICBnbG9iYWwuSGVhZGVycyA9IEhlYWRlcnNcbiAgZ2xvYmFsLlJlcXVlc3QgPSBSZXF1ZXN0XG4gIGdsb2JhbC5SZXNwb25zZSA9IFJlc3BvbnNlXG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufSIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufSIsIi8vIHRzbGludDpkaXNhYmxlIG5vLXVuc2FmZS1hbnlcbmV4cG9ydCBjbGFzcyBMb2FkSW50b0RvY3VtZW50IHtcbiAgICBwdWJsaWMgc3RhdGljIHNjcmlwdCh1cmk6IHN0cmluZywgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGxldCBzY3JpcHRMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGNvbnN0IHNjcmlwdDogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcblxuICAgICAgICBmdW5jdGlvbiBsb2FkSGFuZGxlcigpOiB2b2lkIHtcbiAgICAgICAgICAgIGlmIChzY3JpcHRMb2FkZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghc2NyaXB0LnJlYWR5U3RhdGUgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwibG9hZGVkXCIgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuICAgICAgICAgICAgICAgIHNjcmlwdExvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmcgdGhlIHVzZXIgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHNjcmlwdCBjb21wbGV0ZXMgdG8gbG9hZC5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogVGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBpbiBJRSBldmVuIHVwb24gZXJyb3IuIEluIGFueVxuICAgICAgICAvLyBjYXNlIGl0IGlzIHRoZSBjbGllbnQncyByZXNwb25zaWJpbGl0eSB0byB2ZXJpZnkgdGhhdCB0aGUgc2NyaXB0IHJhblxuICAgICAgICAvLyBzdWNjZXNzZnVsbHkuXG4gICAgICAgIHNjcmlwdC5vbmxvYWQgPSBsb2FkSGFuZGxlcjtcbiAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGxvYWRIYW5kbGVyO1xuXG4gICAgICAgIC8vIEFkZCBhbiBlcnJvciBjYWxsYmFjay5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogTm90IHN1cHBvcnRlZCBpbiBJRS5cbiAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2NyaXB0LnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiRXJyb3Igd2hpbGUgbG9hZGluZyBzY3JpcHQuXCIpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBBZGQgdGhlIHNjcmlwdCBlbGVtZW50IHRvIHRoZSBkb2N1bWVudC5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogU2FmYXJpIG5ldmVyIGxvYWRzIHRoZSBzY3JpcHQgaWYgd2UgZG9uJ3Qgc2V0XG4gICAgICAgIC8vIHRoZSBzcmMgYXR0cmlidXRlIGJlZm9yZSBhcHBlbmRpbmcuXG4gICAgICAgIHNjcmlwdC5zcmMgPSB1cmk7XG4gICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoXCJjcm9zc29yaWdpblwiLCBcInVzZS1jcmVkZW50aWFsc1wiKTtcbiAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc3R5bGVTaGVldCh1cmk6IHN0cmluZywgaWdub3JlRXJyb3I6IGJvb2xlYW4sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXNvbHZlID0gKCkgPT4gY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgcmVqZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlnbm9yZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiRXJyb3Igd2hpbGUgbG9hZGluZyBzdHlsZXNoZWV0LlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSA/PyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcInJlbFwiLCBcInN0eWxlc2hlZXRcIik7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHQvY3NzXCIpO1xuICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHJlc29sdmUpO1xuICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCByZWplY3QpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgdXJpKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBEcmFmdEZ1bGxJZCB9IGZyb20gXCIuLi9UeXBlcy9EcmFmdEZ1bGxJZFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xpZW50RHJhZnRJbmZvVXJsKGRyYWZ0SWQ6IERyYWZ0RnVsbElkKSB7XG4gICAgLy8gTk9URSDQrdGC0LAg0YTRg9C90LrRhtC40Y8g0L7QsdGK0Y/QstC70LXQvdCwINC+0YLQtNC10LvRjNC90L4sINC40LHQviDQvtC90LAg0LLRhdC+0LTQuNGCINCyINGB0L7RgdGC0LDQsiBjbGllbnQuanMg0LhcbiAgICAvLyDQvdC1INC00L7Qu9C20L3QviDQv9GA0L7QuNGB0YXQvtC00LjRgtGMINGD0YLQtdC20LXQu9C10L3QuNGPIGNsaWVudC5qcy3QsFxuICAgIHJldHVybiBgdjEvbnMvJHtkcmFmdElkLm5zfS9kcmFmdHMvJHtkcmFmdElkLmRyYWZ0SWR9L2NsaWVudC1kcmFmdC1pbmZvYDtcbn1cbiIsImZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNsaWVudFNldHRpbmdzID0ge1xuICAgIGF1dGhvcml6ZWQ6IHBhcnNlQm9vbChcInthdXRob3JpemVkfVwiKSxcbiAgICBjYXVsZHJvbkFwaVVybDogXCJ7Y2F1bGRyb25BcGlVcmx9XCIsXG4gICAgaXNUZXN0U2VydmVyOiBwYXJzZUJvb2woXCJ7aXNUZXN0U2VydmVyfVwiKSxcbiAgICByZW5kZXJDYWNoaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cmVuZGVyQ2FjaGluZ0ZvcklFOH1cIiksXG4gICAgbm9ybWFsaXphdGlvbk9uU2VydmVyOiBwYXJzZUJvb2woXCJ7bm9ybWFsaXphdGlvbk9uU2VydmVyfVwiKSxcbiAgICBub3JtYXRpdmVVcmw6IFwie25vcm1hdGl2ZVVybH1cIixcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBcIntyZXNvdXJjZXNWZXJzaW9ufVwiLFxuICAgIGtvbnR1ckRvbWFpbnM6IFwie2tvbnR1ckRvbWFpbnN9XCIsXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIF90eXBlb2Yob2JqKTtcbn0iLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cblxuICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IGFzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIH1cblxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcblxuICB0cnkge1xuICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuaW1wb3J0IGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCBmcm9tIFwiLi9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICBpZiAoaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkpIHtcbiAgICBfY29uc3RydWN0ID0gUmVmbGVjdC5jb25zdHJ1Y3Q7XG4gIH0gZWxzZSB7XG4gICAgX2NvbnN0cnVjdCA9IGZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICAgICAgdmFyIGEgPSBbbnVsbF07XG4gICAgICBhLnB1c2guYXBwbHkoYSwgYXJncyk7XG4gICAgICB2YXIgQ29uc3RydWN0b3IgPSBGdW5jdGlvbi5iaW5kLmFwcGx5KFBhcmVudCwgYSk7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAgIGlmIChDbGFzcykgc2V0UHJvdG90eXBlT2YoaW5zdGFuY2UsIENsYXNzLnByb3RvdHlwZSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfY29uc3RydWN0LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59IiwiaW1wb3J0IGdldFByb3RvdHlwZU9mIGZyb20gXCIuL2dldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBpc05hdGl2ZUZ1bmN0aW9uIGZyb20gXCIuL2lzTmF0aXZlRnVuY3Rpb24uanNcIjtcbmltcG9ydCBjb25zdHJ1Y3QgZnJvbSBcIi4vY29uc3RydWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKSB7XG4gIHZhciBfY2FjaGUgPSB0eXBlb2YgTWFwID09PSBcImZ1bmN0aW9uXCIgPyBuZXcgTWFwKCkgOiB1bmRlZmluZWQ7XG5cbiAgX3dyYXBOYXRpdmVTdXBlciA9IGZ1bmN0aW9uIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpIHtcbiAgICBpZiAoQ2xhc3MgPT09IG51bGwgfHwgIWlzTmF0aXZlRnVuY3Rpb24oQ2xhc3MpKSByZXR1cm4gQ2xhc3M7XG5cbiAgICBpZiAodHlwZW9mIENsYXNzICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIF9jYWNoZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKF9jYWNoZS5oYXMoQ2xhc3MpKSByZXR1cm4gX2NhY2hlLmdldChDbGFzcyk7XG5cbiAgICAgIF9jYWNoZS5zZXQoQ2xhc3MsIFdyYXBwZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIFdyYXBwZXIoKSB7XG4gICAgICByZXR1cm4gY29uc3RydWN0KENsYXNzLCBhcmd1bWVudHMsIGdldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yKTtcbiAgICB9XG5cbiAgICBXcmFwcGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICB2YWx1ZTogV3JhcHBlcixcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc2V0UHJvdG90eXBlT2YoV3JhcHBlciwgQ2xhc3MpO1xuICB9O1xuXG4gIHJldHVybiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXNOYXRpdmVGdW5jdGlvbihmbikge1xuICByZXR1cm4gRnVuY3Rpb24udG9TdHJpbmcuY2FsbChmbikuaW5kZXhPZihcIltuYXRpdmUgY29kZV1cIikgIT09IC0xO1xufSIsImV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIk9wZXJhdGlvbiBub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlID8/IFwiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZFByb2dyYW1TdGF0ZUVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXCJJbnZhbGlkIHByb2dyYW0gc3RhdGVcIiArIChtZXNzYWdlICE9IHVuZGVmaW5lZCA/IFwiOiBcIiArIG1lc3NhZ2UgOiBcIlwiKSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoYXJndW1lbnROYW1lOiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBtZXNzYWdlICE9IHVuZGVmaW5lZCA/IGAke21lc3NhZ2V9IChhcmd1bWVudDogJHthcmd1bWVudE5hbWV9KWAgOiBgSW52YWxpZCBhcmd1bWVudCB2YWx1ZTogJHthcmd1bWVudE5hbWV9YFxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFR5cGluZ0Vycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIkludmFsaWQgdHlwaW5nXCIpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEVtcGxveWVlIH0gZnJvbSBcIkBza2Jrb250dXIvc3RhZmYtc2VsZWN0b3Itd2lkZ2V0XCI7XG5pbXBvcnQge1xuICAgIEVtcGxveWVlTGlzdCxcbiAgICBHZXRFbXBsb3llZUxpc3RSZXF1ZXN0LFxuICAgIEdldFdvcmtpbmdFdmVudExpc3RSZXF1ZXN0LFxuICAgIFdvcmtpbmdFdmVudExpc3QsXG59IGZyb20gXCJAc2tia29udHVyL3N0YWZmLWNvbW1vbi9zcmMvQ2xpZW50L1R5cGVzXCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwiRW5naW5lL3NyYy9FbmdpbmUvRm9ybS9Nb2RlbENoYW5nZUV2ZW50TGlzdGVuZXJcIjtcblxuaW1wb3J0IHsgTm90SW1wbGVtZW50ZWRFcnJvciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vRXJyb3JzXCI7XG5pbXBvcnQgdHlwZSB7IFN0ZXAgfSBmcm9tIFwiLi4vLi4vLi4vQ29udHJvbHMvRm9ybVBhcnRzL1RvdXIvVG91clR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckVycm9yTG9nIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9FcnJvckxvZy9TZXJ2ZXJFcnJvckxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nUGF0aCwgTW9kZWxWYWx1ZSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Db3JlVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRXh0ZXJuYWxIb29rRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L0V4dGVybmFsRXZlbnRzL0V4dGVybmFsSG9va0Z1bmN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFJlYWRvbmx5TW9kZWxDaHVuayB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Nb2RlbFN0b3JpbmcvTW9kZWxDaHVua1wiO1xuaW1wb3J0IHR5cGUgeyBQaWNrbGlzdFF1ZXJ5UmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvUGlja2xpc3RzL1BpY2tsaXN0VHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm0gfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1cIjtcbmltcG9ydCB0eXBlIHsgSVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi4vLi4vUHVibGljRm9ybS9JUHVibGljRm9ybVwiO1xuaW1wb3J0IHsgTW9kZWxFdmVudHNMaXN0ZW5lciB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9FdmVudE1hbmFnZW1lbnQvTW9kZWxFdmVudHMvTW9kZWxFdmVudFwiO1xuaW1wb3J0IHsgRGlnZXN0UXVlcnlGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0RpZ2VzdEFwaUNsaWVudC9UeXBlcy9EaWdlc3RRdWVyeUZpbHRlclwiO1xuaW1wb3J0IHsgSVVwZGF0ZUZvcm1Nb2RlbEFjY2Vzc29yIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtTW9kZWxBY2Nlc3NvclwiO1xuaW1wb3J0IHsgTW9kYWxPcHRpb25zIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL01vZGFsTWFuYWdlci9JTW9kYWxTdGF0ZVwiO1xuaW1wb3J0IHsgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vTW9kZWxQYXRoL01vZGVsUGF0aFwiO1xuaW1wb3J0IHsgQ2FsbEluaXRTZWN0aW9uTGlnaHRib3hQcm9wcywgSW5pdFNlY3Rpb25Gb3JtTGlnaHRib3hPcHRpb25zIH0gZnJvbSBcIi4uLy4uL1B1YmxpY0Zvcm0vSW5pdFNlY3Rpb25MaWdodGJveFwiO1xuaW1wb3J0IHsgTWFzc0FjdGlvblBhcmFtZXRlcnMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL01hc3NBY3Rpb25zL01hc3NBY3Rpb25QYXJhbWV0ZXJzXCI7XG5pbXBvcnQgeyBQcmludFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL1ByaW50L1ByaW50VHlwZVwiO1xuXG5pbXBvcnQgeyBJTGVnYWN5Rm9ybSB9IGZyb20gXCIuL0lMZWdhY3lGb3JtXCI7XG5cbmV4cG9ydCB0eXBlIE1vZGVsRXZlbnRQYXRoID1cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIl07XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbENoYW5nZUV2ZW50UGF0aChwYXRoPzogc3RyaW5nLCBmaWVsZE5hbWU/OiBzdHJpbmcpOiBNb2RlbEV2ZW50UGF0aCB7XG4gICAgaWYgKGZpZWxkTmFtZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHBhdGggPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3QgYmUgZGVmaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aCwgZmllbGROYW1lXTtcbiAgICB9XG4gICAgaWYgKHBhdGggIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBwYXRoXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCJdO1xufVxuXG5mdW5jdGlvbiBtYXBDaHVua1ZhbHVlcyhjaHVuazogUmVhZG9ubHlNb2RlbENodW5rKTogQXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNodW5rKVxuICAgICAgICAuZmlsdGVyKHBhdGggPT4gY2h1bmtbcGF0aF0gJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNodW5rW3BhdGhdLCBcInZhbHVlXCIpKVxuICAgICAgICAubWFwKHBhdGggPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2h1bmtbcGF0aF07XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IFtwYXRoXTogcmVzdWx0LnZhbHVlIH07XG4gICAgICAgIH0pO1xufVxuXG5mdW5jdGlvbiByZWR1Y2VDaHVua1ZhbHVlcyhjaHVua3M6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4pOiB7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0ge1xuICAgIHJldHVybiBjaHVua3MucmVkdWNlKFxuICAgICAgICAocmVzdWx0LCBjaHVuaykgPT4gKHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIC4uLmNodW5rLFxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICApO1xufVxuXG5jbGFzcyBMZWdhY3lQdWJsaWNGb3JtIGltcGxlbWVudHMgSVB1YmxpY0Zvcm0ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybTogSUxlZ2FjeUZvcm07XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZm9ybTogSUxlZ2FjeUZvcm0pIHtcbiAgICAgICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYmF0Y2hVcGRhdGUodXBkYXRlUHJvYzogKHVwZGF0ZUFjY2Vzc29yOiBJVXBkYXRlRm9ybU1vZGVsQWNjZXNzb3IpID0+IHZvaWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHJ1bkNoZWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RXJyb3JMb2coZXJyb3JMb2c6IFBhcnRpYWw8U2VydmVyRXJyb3JMb2c+KTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyB2YWxpZGF0ZUNoaWxkcmVuQnlQYXRoKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgX19JTlRFUk5BTF9faW1wb3J0RnJvbUVtcGxveWVlU2VydmljZSgpOiBQcm9taXNlPEVtcGxveWVlW10gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGltcG9ydEVtcGxveWVlcyhlbXBsb3llZXM6IEVtcGxveWVlW10sIG9wdGlvbnM/OiB7IHNjZW5hcmlvPzogc3RyaW5nIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHByaW50KHByaW50VHlwZTogUHJpbnRUeXBlLCBib2R5Pzogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuICAgIHB1YmxpYyBydW5NYXNzQWN0aW9uKGFjdGlvbklkOiBzdHJpbmcsIHBhcmFtZXRlcnM/OiBNYXNzQWN0aW9uUGFyYW1ldGVycyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnlHSWQoZ0lkOiBzdHJpbmcsIGZpbHRlcj86IERpZ2VzdFF1ZXJ5RmlsdGVyKTogUHJvbWlzZTxQaWNrbGlzdFF1ZXJ5UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5waWNrbGlzdHNQcm92aWRlci5nZXREaWdlc3RBcGlQaWNrbGlzdChnSWQpLnF1ZXJ5KGZpbHRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXh0ZXJuYWxIb29rRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vbihbXCJmb3JtXCIsIGV2ZW50TmFtZV0sIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXh0ZXJuYWxIb29rRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vZmYoW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTW9kZWxDaGFuZ2UocGF0aDogc3RyaW5nIHwgc3RyaW5nW10sIGxpc3RlbmVyOiB1bmtub3duKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJmb3JtLm9uTW9kZWxDaGFuZ2UoKSBpcyBub3Qgc3VwcG9ydGVkIHlldFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2F2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc2VuZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5mb3JtLmNoYW5nZVNldC5zdG9wQXV0b3NlbmQoKTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS51bm1vdW50KSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0udW5tb3VudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc2VuZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUb3VyU3RlcHMoKTogU3RlcFtdIHtcbiAgICAgICAgLy8gRm9yIG9sZCBrZXdlYlxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHVibGljIHZhbGlkYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCkpO1xuICAgICAgICAvLyBAdHMtaWdub3JlINCt0YLQviDQsiDRgdGC0LDRgNGL0YUg0LTQstC40LbQutCw0YUg0YLRg9GCINGC0LDQutC+0Lkg0LLRi9C30L7QslxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS52YWxpZGF0b3IudmFsaWRhdGVBbGwoa2V5cyk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXRBZGRpdGlvbmFsRW1wbG95ZWVJbmZvKGZpbHRlcnM6IEdldEVtcGxveWVlTGlzdFJlcXVlc3QpOiBQcm9taXNlPEVtcGxveWVlTGlzdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFdvcmtpbmdFdmVudHNGb3JFbXBsb3llZShmaWx0ZXJzOiBHZXRXb3JraW5nRXZlbnRMaXN0UmVxdWVzdCk6IFByb21pc2U8V29ya2luZ0V2ZW50TGlzdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb3VudCA9IHRoaXMuZm9ybS5tb2RlbC5nZXQodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpO1xuICAgICAgICByZXR1cm4gZXJyb3JDb3VudCAhPSB1bmRlZmluZWQgJiYgZXJyb3JDb3VudCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRXJyb3JzQ291bnRDaGFuZ2VkKGxpc3RlbmVyOiBNb2RlbEV2ZW50c0xpc3RlbmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24obW9kZWxDaGFuZ2VFdmVudFBhdGgodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZkVycm9yc0NvdW50Q2hhbmdlZChsaXN0ZW5lcjogTW9kZWxFdmVudHNMaXN0ZW5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9mZihtb2RlbENoYW5nZUV2ZW50UGF0aCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIiksIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0KHBhdGhPck1vZGVsQ2h1bms6IHsgW3BhdGg6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9KTogdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgcHVibGljIHNldChwYXRoT3JNb2RlbENodW5rOiBzdHJpbmcsIHZhbHVlOiBNb2RlbFZhbHVlKTogdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgcHVibGljIHNldChcbiAgICAgICAgcGF0aE9yTW9kZWxDaHVuazogc3RyaW5nIHwgeyBbcGF0aDogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0sXG4gICAgICAgIHZhbHVlPzogTW9kZWxWYWx1ZVxuICAgICk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGF0aE9yTW9kZWxDaHVuayAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgdHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgIT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXRoT3JNb2RlbENodW5rID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShwYXRoT3JNb2RlbENodW5rKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyQ2h1bmsgPSBPYmplY3Qua2V5cyhwYXRoT3JNb2RlbENodW5rKS5yZWR1Y2U8UmVhZG9ubHlNb2RlbENodW5rPihcbiAgICAgICAgICAgICAgICAocmVzdWx0LCBwYXRoKSA9PiAoeyBbcGF0aF06IHsgdmFsdWU6IHBhdGhPck1vZGVsQ2h1bmtbcGF0aF0gfSwgLi4ucmVzdWx0IH0pLFxuICAgICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmZvcm0ubW9kZWwuZmlsbChpbm5lckNodW5rKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhpcy5mb3JtLm1vZGVsLnNldChwYXRoT3JNb2RlbENodW5rLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm0uc2V0KCkgcGFyYW1ldGVyIHNob3VsZCBiZSBzdHJpbmcgcGF0aCBvciBvYmplY3Qgd2l0aCBwYXRoLXZhbHVlIHBhaXJzXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQocGF0aE9yQXJyYXk6IHN0cmluZyB8IHN0cmluZ1tdKTogeyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF0aE9yQXJyYXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMoXG4gICAgICAgICAgICAgICAgcGF0aE9yQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgLm1hcChwYXRoID0+IG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayhwYXRoKSkpXG4gICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAgICAgICAgICAgICAgICAgLnJlZHVjZTxBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+PigocmVzdWx0LCBhcnJheSkgPT4gcmVzdWx0LmNvbmNhdChhcnJheSksIFtdKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aE9yQXJyYXkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsocGF0aE9yQXJyYXkpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGF0aE9yQXJyYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybS5nZXQoKSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHN0cmluZyBwYXRoIG9yIGFycmF5IG9mIHBhdGhzXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWYWx1ZShwYXRoOiBzdHJpbmcpOiBNb2RlbFZhbHVlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ubW9kZWwuZ2V0KHBhdGgsIFwidmFsdWVcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHlTdWJ0cmVlKFxuICAgICAgICBzb3VyY2VCaW5kaW5nUGF0aDogQmluZGluZ1BhdGggfCBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoLFxuICAgICAgICB0YXJnZXRCaW5kaW5nUGF0aDogQmluZGluZ1BhdGggfCBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoLFxuICAgICAgICBkb05vdENvcHlQYXRocz86IHN0cmluZ1tdXG4gICAgKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEluc3RhbmNlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENoaWxkcmVuKHBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXVpZEdlbmVyYXRlKCk6IHN0cmluZyB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dNb2RhbChvcHRpb25zOiBNb2RhbE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkU2VjdGlvbihvcHRpb25zOiBJbml0U2VjdGlvbkZvcm1MaWdodGJveE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FsbEluaXRTZWN0aW9uKG9wdGlvbnM6IENhbGxJbml0U2VjdGlvbkxpZ2h0Ym94UHJvcHMpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3BlbkVtcGxveWVlRWRpdG9yKGVtcGxveWVlSWQ6IHN0cmluZykge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVJbnN0YW5jZShwYXRoOiBzdHJpbmcsIGluc3RhbmNlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2VzKHBhdGg6IHN0cmluZywgaW5zdGFuY2VzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb2N1c09uQ29udHJvbElmRXhpc3QocGF0aDogQmluZGluZ1BhdGgpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QWxsQ2hlY2tib3hlc0ZvcjExMzEwMyhlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QXV0b0ZpZWxkc1RvQXV0b1ZhbHVlKHBhdGhQcmVmaXhlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbnN1cmVJbnN0YW5jZUZ1bGx5TG9hZGVkKFxuICAgICAgICBiaW5kaW5nUGF0aDogc3RyaW5nIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgLi4uaW5zdGFuY2VzOiBzdHJpbmdbXVxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3VzdG9tTm9ybWFsaXplKG5vcm1hbGl6ZXJJZDogc3RyaW5nLCBwYXRoUHJlZml4ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtOiBJRm9ybSk6IElQdWJsaWNGb3JtIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIG5ldyBMZWdhY3lQdWJsaWNGb3JtKGZvcm0gYXMgSUxlZ2FjeUZvcm0pO1xufVxuIiwiLyogdHNsaW50OmRpc2FibGU6bm8tbnVsbC1rZXl3b3JkIG5vLWFueSBuby11bnNhZmUtYW55ICovXG5pbXBvcnQgeyBmZXRjaCB9IGZyb20gXCJ3aGF0d2ctZmV0Y2hcIjtcblxuaW1wb3J0IHsgRXJyb3JGaXJzdENhbGxiYWNrLCByZWplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgeyBMb2FkSW50b0RvY3VtZW50IH0gZnJvbSBcIi4uLy4uL0hlbHBlcnMvTG9hZEludG9Eb2N1bWVudFwiO1xuaW1wb3J0IHR5cGUgeyBJUHVibGljRm9ybSB9IGZyb20gXCIuLi9QdWJsaWNGb3JtL0lQdWJsaWNGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudCB9IGZyb20gXCIuLi9UeXBlcy9JS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9DbGllbnREcmFmdEluZm9SZXNwb25zZVwiO1xuaW1wb3J0IHsgZ2V0Q2xpZW50RHJhZnRJbmZvVXJsIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DbGllbnREcmFmdEluZm8vR2V0Q2xpZW50RHJhZnRJbmZvVXJsXCI7XG5pbXBvcnQgeyBBVU9PcHRpb25zIH0gZnJvbSBcIi4uL1R5cGVzL0FVT09wdGlvbnNcIjtcbmltcG9ydCB0eXBlIHsgTGF5b3V0RXZlbnRzU3RhdGljIH0gZnJvbSBcIi4uLy4uL0NvbnRyb2xzL0ludGVybmFscy9MYXlvdXRFdmVudHMvTGF5b3V0RXZlbnRzXCI7XG5cbmltcG9ydCB7IGNsaWVudFNldHRpbmdzIH0gZnJvbSBcIi4vQ2xpZW50U2V0dGluZ3NcIjtcbmltcG9ydCB7IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm1cIjtcblxudHlwZSBGb3JtQ29udGFpbmVyID0gc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG5cbnR5cGUgRW5naW5lRW50cnlQb2ludCA9ICgpID0+IHZvaWQ7XG5cbmludGVyZmFjZSBSZW5kZXJGb3JtU2V0dGluZ3Mge1xuICAgIGdmdjogc3RyaW5nO1xuICAgIGVuZ2luZVZlcnNpb24/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlc1ZlcnNpb246IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlbmRlckZvcm06IHVuZGVmaW5lZCB8IEVuZ2luZUVudHJ5UG9pbnQ7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xufVxuXG50eXBlIFN0YXJ0Rm9ybUZ1bmMgPSAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIGV4dGVuZGVkU2V0dGluZ3M6IFJlbmRlckZvcm1TZXR0aW5ncykgPT4gUHJvbWlzZTxJRm9ybT47XG5cbmludGVyZmFjZSBDYW5keUdsb2JhbEluamVjdGVkVmFyIHtcbiAgICBzdGFydDogKHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLCBvcHRpb25zOiBTdGFydEZvcm1PcHRpb25zLCBjYWxsYmFjaz86IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4pID0+IHZvaWQ7XG4gICAga2Vmb3Jtc1VybD86IHN0cmluZztcbiAgICBwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4OiBib29sZWFuO1xuICAgIGVudHJ5UG9pbnQ6IHsgW2tleTogc3RyaW5nXTogU3RhcnRGb3JtRnVuYyB9O1xuICAgIGxvYWRFcnJvcj86IHVua25vd247XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAgICAgQ0Y6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXI7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcbiAgICBuYW1lc3BhY2UgTm9kZUpTIHtcbiAgICAgICAgaW50ZXJmYWNlIEdsb2JhbCB7XG4gICAgICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZGVjbGFyZSBjb25zdCBnbG9iYWw6IFdpbmRvdztcblxuZnVuY3Rpb24gZGVmYXVsdENhbGxiYWNrKCk6IHZvaWQge1xuICAgIC8qIGVtcHR5ICovXG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdXJsKHJlbGF0aXZlVXJsOiBzdHJpbmcgPSBcIlwiKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVXJsID0gZ2xvYmFsLkNGLmtlZm9ybXNVcmwgfHwgXCJcIjtcblxuICAgIHJldHVybiBgJHtiYXNlVXJsfS8ke3JlbGF0aXZlVXJsfWAucmVwbGFjZSgvKFteOl0pXFwvezIsfS9nLCBcIiQxL1wiKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRVcmwocGF0aDogc3RyaW5nLCBwYXJhbXM6IHsgW3BhcmFtTmFtZTogc3RyaW5nXTogdW5kZWZpbmVkIHwgc3RyaW5nIH0pOiBzdHJpbmcge1xuICAgIGlmIChwYXJhbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlQYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBhcmFtTmFtZSBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtVmFsdWUgPSBwYXJhbXNbcGFyYW1OYW1lXTtcbiAgICAgICAgaWYgKHBhcmFtVmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBxdWVyeVBhcnRzLnB1c2goYCR7cGFyYW1OYW1lfT0ke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbVZhbHVlKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocXVlcnlQYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIHJldHVybiBwYXRoICsgXCI/XCIgKyBxdWVyeVBhcnRzLmpvaW4oXCImXCIpO1xufVxuXG5mdW5jdGlvbiBpc0FsbG93ZWQoZG9tYWluczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4oPzoke2RvbWFpbnMucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIikucmVwbGFjZSgvXFwqL2csIFwiW2EtejAtOS0uXStcIil9KSRgKS50ZXN0KFxuICAgICAgICBnbG9iYWwubG9jYXRpb24uaG9zdFxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtZXRlckJ5TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoXG4gICAgICAgIChnbG9iYWwubG9jYXRpb24uc2VhcmNoXG4gICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvXihcXD98I3wmKS8sIFwiXCIpXG4gICAgICAgICAgICAuc3BsaXQoXCImXCIpXG4gICAgICAgICAgICAubWFwKHBhcmFtID0+IHBhcmFtLnJlcGxhY2UoL1xcKy9nLCBcIiBcIikuc3BsaXQoXCI9XCIpLm1hcChkZWNvZGVVUklDb21wb25lbnQpKVxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgIC5maW5kKChba2V5XSkgPT4ga2V5ID09IG5hbWUpIHx8IFtdKVsxXVxuICAgICk7XG59XG5cbnR5cGUgVGFzayA9IChjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHJ1blBhcmFsbGVsKHRhc2tzOiBUYXNrW10sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGxldCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgdGFza3MuZm9yRWFjaCh0YXNrID0+IHtcbiAgICAgICAgdGFzayhlcnJvciA9PiB7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSB0YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuaW50ZXJmYWNlIFN0YXJ0Rm9ybVNldHRpbmcge1xuICAgIGdmdjogc3RyaW5nO1xuICAgIGVuZ2luZVZlcnNpb24/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlWm9uZT86IHN0cmluZztcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBzdHJpbmc7XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsKGxlZnQ6IHN0cmluZywgcmlnaHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxlZnROdW1iZXJzID0gbGVmdFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgY29uc3QgcmlnaHROdW1iZXJzID0gcmlnaHRcbiAgICAgICAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgICAgICAgIC5zbGljZSgwLCAzKVxuICAgICAgICAgICAgLm1hcCh4ID0+IHBhcnNlSW50KHgsIDEwKSk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAobGVmdE51bWJlcnNbMF0gPz8gMCkgPiAocmlnaHROdW1iZXJzWzBdID8/IDApIHx8XG4gICAgICAgICAgICAoKGxlZnROdW1iZXJzWzBdID8/IDApID09PSAocmlnaHROdW1iZXJzWzBdID8/IDApICYmXG4gICAgICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1sxXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMV0gPz8gMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1sxXSA/PyAwKSA9PT0gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGxlZnROdW1iZXJzWzJdID8/IDApID49IChyaWdodE51bWJlcnNbMl0gPz8gMCkpKSlcbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbG9hZEZvcm0oc2V0dGluZ3M6IFN0YXJ0Rm9ybVNldHRpbmcsIGNhbGxiYWNrOiAoZXJyb3I/OiBudWxsIHwgdW5kZWZpbmVkIHwgRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCB7IGdmdiwgZW5naW5lVmVyc2lvbiwgcmVzb3VyY2VzVmVyc2lvbiB9ID0gc2V0dGluZ3M7XG5cbiAgICBpZiAoZ2xvYmFsLkNGLmVudHJ5UG9pbnRbZ2Z2XSkge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzTmVlZEVuZ2luZSA9IGVuZ2luZVZlcnNpb24gJiYgIWdsb2JhbFtlbmdpbmVWZXJzaW9uXTtcbiAgICBjb25zdCBub1N0eWxlc0ZvckdmdiA9IGZhbHNlOyAvLyBlbmdpbmVWZXJzaW9uICE9IHVuZGVmaW5lZCAmJiAoaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsKGVuZ2luZVZlcnNpb24sIFwiNC4yMTQuMFwiKSB8fCBlbmdpbmVWZXJzaW9uID09PSBcImxvY2FsXCIpO1xuICAgIGNvbnN0IG5lZWRMb2FkU3R5bGVzRm9yR2Z2ID0gIW5vU3R5bGVzRm9yR2Z2O1xuICAgIGNvbnN0IG1pbiA9IGdldFBhcmFtZXRlckJ5TmFtZShcImRlYnVnXCIpID09PSBcInRydWVcIiA/IFwiXCIgOiBcIi5taW5cIjtcbiAgICBjb25zdCB0YXNrczogVGFza1tdID0gW107XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7IHY6IHJlc291cmNlc1ZlcnNpb24sIHJlc291cmNlWm9uZTogc2V0dGluZ3MucmVzb3VyY2Vab25lIH07XG4gICAgaWYgKG5lZWRMb2FkU3R5bGVzRm9yR2Z2KSB7XG4gICAgICAgIHRhc2tzLnB1c2goY2IgPT5cbiAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc3R5bGVTaGVldCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzLyR7Z2Z2fSR7bWlufS5jc3NgLCBwYXJhbXMpKSwgdHJ1ZSwgY2IpXG4gICAgICAgICk7XG4gICAgfVxuICAgIHRhc2tzLnB1c2goY2IgPT4gTG9hZEludG9Eb2N1bWVudC5zY3JpcHQodXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3NjcmlwdHMvJHtnZnZ9JHttaW59LmpzYCwgcGFyYW1zKSksIGNiKSk7XG5cbiAgICBpZiAoaXNOZWVkRW5naW5lKSB7XG4gICAgICAgIHRhc2tzLnB1c2goXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc3R5bGVTaGVldChcbiAgICAgICAgICAgICAgICAgICAgdXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3N0eWxlcy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmNzc2AsIHBhcmFtcykpLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgY2IgPT5cbiAgICAgICAgICAgICAgICBMb2FkSW50b0RvY3VtZW50LnNjcmlwdChcbiAgICAgICAgICAgICAgICAgICAgdXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3NjcmlwdHMvY2FuZHlfJHtlbmdpbmVWZXJzaW9ufSR7bWlufS5qc2AsIHBhcmFtcykpLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBydW5QYXJhbGxlbCh0YXNrcywgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiByZW5kZXJGb3JtKFxuICAgIHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLFxuICAgIGV4dGVuZGVkU2V0dGluZ3M6IFJlbmRlckZvcm1TZXR0aW5ncyxcbiAgICBjYWxsYmFjazogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPlxuKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybUVudHJ5UG9pbnQgPVxuICAgICAgICBnbG9iYWwuQ0YuZW50cnlQb2ludFtleHRlbmRlZFNldHRpbmdzLmdmdl0gPz8gcmVqZWN0KGBGb3JtIGVudHJ5IHBvaW50ICR7ZXh0ZW5kZWRTZXR0aW5ncy5nZnZ9IG5vdCBmb3VuZC5gKTtcbiAgICBmb3JtRW50cnlQb2ludChwYWdlQ29udGVudCwgZXh0ZW5kZWRTZXR0aW5ncylcbiAgICAgICAgLnRoZW4oZm9ybSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwdWJsaWNGb3JtID0gZm9ybS5wdWJsaWNGb3JtIHx8IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0oZm9ybSk7XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHB1YmxpY0Zvcm0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goY2FsbGJhY2spO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXJ0Rm9ybU9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPEFVT09wdGlvbnM+IHtcbiAgICBuczogc3RyaW5nO1xuICAgIGRyYWZ0SWQ6IHN0cmluZztcbiAgICBnZnY/OiBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHRlbXBsYXRlc0FwaT86IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudDtcbiAgICBmZWVkYmFja0VuYWJsZWQ/OiBib29sZWFuO1xuICAgIGlzRGlzYWJsZWRDbG9zZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsZWFuRm9ybT86IGJvb2xlYW47XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIGF1dGhlbnRpY2F0aW9uPzogXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIiB8IHsgYXV0aFNpZDogc3RyaW5nIH07XG4gICAgZmV0Y2g/OiB0eXBlb2YgZmV0Y2g7XG4gICAgbW9kZWw/OiB7IFtwYXRoOiBzdHJpbmddOiB1bmtub3duIH07XG4gICAgZXZlbnRFbWl0dGVyPzogTGF5b3V0RXZlbnRzU3RhdGljO1xuICAgIGVtcGxveWVySWQ/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGdldEVuZ2luZUVudHJ5UG9pbnQoZW5naW5lVmVyc2lvbjogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZyk6IHVuZGVmaW5lZCB8IEVuZ2luZUVudHJ5UG9pbnQge1xuICAgIGlmIChlbmdpbmVWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICByZXR1cm4gZ2xvYmFsW2VuZ2luZVZlcnNpb25dICYmIGdsb2JhbFtlbmdpbmVWZXJzaW9uXS5kZWZhdWx0O1xufVxuXG5mdW5jdGlvbiBzdGFydChcbiAgICBwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lcixcbiAgICBvcHRpb25zOiBTdGFydEZvcm1PcHRpb25zLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+ID0gZGVmYXVsdENhbGxiYWNrXG4pOiB2b2lkIHtcbiAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgIGNvbnN0IHsgbnMsIGRyYWZ0SWQgfSA9IG9wdGlvbnM7XG5cbiAgICBpZiAoIWlzQWxsb3dlZChjbGllbnRTZXR0aW5ncy5rb250dXJEb21haW5zKSkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcImRvbWFpbi51bnRydXN0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghY2xpZW50U2V0dGluZ3MuYXV0aG9yaXplZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcInVzZXIudW5hdXRoZW50aWNhdGVkXCIpO1xuICAgIH0gZWxzZSBpZiAoIWRyYWZ0SWQpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJvcHRpb25zLmRyYWZ0SWQgaXMgcmVxdWlyZWRcIik7XG4gICAgfSBlbHNlIGlmICghbnMpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJvcHRpb25zLm5zIGlzIHJlcXVpcmVkXCIpO1xuICAgIH1cblxuICAgIGlmIChlcnJvcikge1xuICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZVpvbmUgPSBvcHRpb25zLnJlc291cmNlWm9uZSA/PyBnZXRQYXJhbWV0ZXJCeU5hbWUoXCJyZXNvdXJjZVpvbmVcIik7XG4gICAgY29uc3QgY2xpZW50RHJhZnRVcmwgPSBidWlsZFVybCh1cmwoZ2V0Q2xpZW50RHJhZnRJbmZvVXJsKHsgbnM6IG5zLCBkcmFmdElkOiBkcmFmdElkIH0pKSwge1xuICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHsgbWV0aG9kOiBcIkdFVFwiIH07XG4gICAgaWYgKG9wdGlvbnMuYXV0aGVudGljYXRpb24gPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuYXV0aGVudGljYXRpb24gPT09IFwiYnJvd3Nlci1jcmVkZW50aWFscy1pbmNsdWRlXCIpIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcImluY2x1ZGVcIjtcbiAgICB9IGVsc2UgaWYgKFwiYXV0aFNpZFwiIGluIG9wdGlvbnMuYXV0aGVudGljYXRpb24gJiYgb3B0aW9ucy5hdXRoZW50aWNhdGlvbi5hdXRoU2lkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwib21pdFwiO1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuaGVhZGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQVVUSC5TSUQgJHtvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwib21pdFwiO1xuICAgIH1cbiAgICBjb25zdCBmZXRjaEltcGwgPSBvcHRpb25zLmZldGNoID8/IGZldGNoO1xuXG4gICAgZmV0Y2hJbXBsKGNsaWVudERyYWZ0VXJsLCByZXF1ZXN0T3B0aW9ucylcbiAgICAgICAgLnRoZW4oeCA9PiB4Lmpzb24oKSlcbiAgICAgICAgLnRoZW4oKGNsaWVudERyYWZ0SW5mbzogQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdmdiA9IGNsaWVudERyYWZ0SW5mby5nZnY7XG4gICAgICAgICAgICBjb25zdCBlbmdpbmVWZXJzaW9uID0gY2xpZW50RHJhZnRJbmZvLmVuZ2luZVZlcnNpb247XG4gICAgICAgICAgICBjb25zdCBleHRlbmRlZFNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgIGF1dGhvcml6ZWQ6IGNsaWVudFNldHRpbmdzLmF1dGhvcml6ZWQsXG4gICAgICAgICAgICAgICAgY2F1bGRyb25BcGlVcmw6IGNsaWVudFNldHRpbmdzLmNhdWxkcm9uQXBpVXJsLFxuICAgICAgICAgICAgICAgIGlzVGVzdFNlcnZlcjogY2xpZW50U2V0dGluZ3MuaXNUZXN0U2VydmVyLFxuICAgICAgICAgICAgICAgIHJlbmRlckNhY2hpbmdGb3JJRTg6IGNsaWVudFNldHRpbmdzLnJlbmRlckNhY2hpbmdGb3JJRTgsXG4gICAgICAgICAgICAgICAgbm9ybWFsaXphdGlvbk9uU2VydmVyOiBjbGllbnRTZXR0aW5ncy5ub3JtYWxpemF0aW9uT25TZXJ2ZXIsXG4gICAgICAgICAgICAgICAgbm9ybWF0aXZlVXJsOiBjbGllbnRTZXR0aW5ncy5ub3JtYXRpdmVVcmwsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzVmVyc2lvbjogY2xpZW50U2V0dGluZ3MucmVzb3VyY2VzVmVyc2lvbixcbiAgICAgICAgICAgICAgICBrb250dXJEb21haW5zOiBjbGllbnRTZXR0aW5ncy5rb250dXJEb21haW5zLFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgYWJvbklkOiBvcHRpb25zLmFib25JZCxcbiAgICAgICAgICAgICAgICBvcmdJZDogb3B0aW9ucy5vcmdJZCxcbiAgICAgICAgICAgICAgICB1c2VySWQ6IG9wdGlvbnMudXNlcklkLFxuICAgICAgICAgICAgICAgIC4uLmNsaWVudERyYWZ0SW5mbyxcbiAgICAgICAgICAgICAgICBnZnY6IGdmdixcbiAgICAgICAgICAgICAgICBpc0luZGl2aWR1YWw6IGNsaWVudERyYWZ0SW5mby5pc0luZGl2aWR1YWwsXG4gICAgICAgICAgICAgICAgaXNGb3JlaWduOiBjbGllbnREcmFmdEluZm8uaXNGb3JlaWduLFxuICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGVuZ2luZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tFbmFibGVkOiBvcHRpb25zLmZlZWRiYWNrRW5hYmxlZCA/PyBjbGllbnREcmFmdEluZm8uZmVlZGJhY2tFbmFibGVkLFxuICAgICAgICAgICAgICAgIGNhbmR5VG91ckF2YWlsYWJsZTogY2xpZW50RHJhZnRJbmZvLmNhbmR5VG91ckF2YWlsYWJsZSxcbiAgICAgICAgICAgICAgICBldmVudEVtaXR0ZXI6IG9wdGlvbnMuZXZlbnRFbWl0dGVyLFxuICAgICAgICAgICAgICAgIGZvcm1JbmZvOiBjbGllbnREcmFmdEluZm8uZm9ybUluZm8sXG4gICAgICAgICAgICAgICAgcHJpbnRJbmZvOiBjbGllbnREcmFmdEluZm8ucHJpbnRJbmZvLFxuICAgICAgICAgICAgICAgIHJlZ2lvbnM6IGNsaWVudERyYWZ0SW5mby5yZWdpb25zLFxuICAgICAgICAgICAgICAgIGhhc1RlbXBsYXRlczogY2xpZW50RHJhZnRJbmZvLmhhc1RlbXBsYXRlcyxcbiAgICAgICAgICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtOiBvcHRpb25zLmlzRGlzYWJsZWRDbGVhbkZvcm0gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb246IG9wdGlvbnMuYXV0aGVudGljYXRpb24sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsb2FkRm9ybShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGdmdjogZXh0ZW5kZWRTZXR0aW5ncy5nZnYsXG4gICAgICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGV4dGVuZGVkU2V0dGluZ3MuZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiBleHRlbmRlZFNldHRpbmdzLnJlc291cmNlWm9uZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5yZXNvdXJjZXNWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICB0aGVtZTogZXh0ZW5kZWRTZXR0aW5ncy50aGVtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvYWRFcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2FkRXJyb3IgfHwgIWdsb2JhbC5DRi5lbnRyeVBvaW50W2dmdl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihgZHluYW1pYyBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGdmdiAke2dmdn1gKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyID0gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgICAgICByZW5kZXJGb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZXh0ZW5kZWRTZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXNBcGk6IG9wdGlvbnMudGVtcGxhdGVzQXBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm06IHJlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmNvbnN0IENhbmR5Q2xpZW50RXhwb3J0czogQ2FuZHlHbG9iYWxJbmplY3RlZFZhciA9IHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW50cnlQb2ludDoge30sXG4gICAgcGFydGlhbFJlbmRlcmluZ0ZvcklFODogcGFyc2VCb29sKFwie3BhcnRpYWxSZW5kZXJpbmdGb3JJRTh9XCIpLFxuICAgIGtlZm9ybXNVcmw6IFwie2tlZm9ybXNVcmx9XCIsXG59O1xuXG5nbG9iYWwuQ0YgPSBDYW5keUNsaWVudEV4cG9ydHM7XG5cbmV4cG9ydCB7IENhbmR5Q2xpZW50RXhwb3J0cyB9O1xuIiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHtcbiAgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdO1xuXG4gIGlmIChfaSA9PSBudWxsKSByZXR1cm47XG4gIHZhciBfYXJyID0gW107XG4gIHZhciBfbiA9IHRydWU7XG4gIHZhciBfZCA9IGZhbHNlO1xuXG4gIHZhciBfcywgX2U7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG4gICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfZCA9IHRydWU7XG4gICAgX2UgPSBlcnI7XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gX2Fycjtcbn0iLCJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwiLyoqKlxuICog0KHRgtGA0L7Qs9C+0YLQuNC/0LjQt9C40YDQvtCy0LDQvdC90LDRjyDQt9Cw0LzQtdC90LAg0LTQu9GPIEJvb2xlYW4oLi4uKVxuICog0J7QsdGL0YfQvdC+INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDQtNC70Y8gWy4uLl0uZmlsdGVyKGlzTm90TnVsbE9yVW5kZWZpbmVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROdWxsT3JVbmRlZmluZWQ8VD4oaW5wdXQ6IFQpOiBpbnB1dCBpcyBOb25OdWxsYWJsZTxUPiB7XG4gICAgcmV0dXJuIGlucHV0ICE9IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVVua25vd25FcnJvcihlcnJvcjogdW5rbm93bik6IHVuZGVmaW5lZCB8IHN0cmluZyB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgcmV0dXJuIHR5cGVvZiBlcnJvciA9PT0gXCJvYmplY3RcIiAmJiBlcnJvcj8uW1wibWVzc2FnZVwiXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogVCk6IGFzc2VydHMgaW5wdXQgaXMgTm9uTnVsbGFibGU8VD4ge1xuICAgIGlmICghaXNOb3ROdWxsT3JVbmRlZmluZWQoaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgbXVzdCBiZSBkZWZpbmVkYCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCB0eXBlIEVycm9yRmlyc3RDYWxsYmFjazxUPiA9ICguLi5hcmdzOiBbRXJyb3IsIG51bGwgfCB1bmRlZmluZWRdIHwgW251bGwgfCB1bmRlZmluZWQsIFRdIHwgW0Vycm9yXSkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlamVjdChtZXNzYWdlPzogc3RyaW5nIHwgRXJyb3IpOiBuZXZlciB7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiIHx8IG1lc3NhZ2UgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlID8/IFwiVW5kZWZpbmVkIGlzIG5vdCBhbGxvd2VkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG1lc3NhZ2U7XG4gICAgfVxufVxuXG50eXBlIEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMgeyBsZW5ndGg6IFRMZW5ndGggfVxuICAgID8gVFJlc3RcbiAgICA6IEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGgsIFtUSXRlbSwgLi4uVFJlc3RdPjtcblxuZXhwb3J0IHR5cGUgTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMge1xuICAgIGxlbmd0aDogVExlbmd0aDtcbn1cbiAgICA/IFsuLi5UUmVzdCwgLi4uVEl0ZW1bXV1cbiAgICA6IE1pbkxlbmd0aEFycmF5PFRJdGVtLCBUTGVuZ3RoLCBbLi4uVFJlc3QsIFRJdGVtXT47XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPj0gbWluTGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWluTGVuZ3RoT3JVbmRlZmluZWQ8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IFRbXSxcbiAgICBtaW5MZW5ndGg6IFROdW1cbik6IHVuZGVmaW5lZCB8IE1pbkxlbmd0aEFycmF5PFQsIFROdW0+IHtcbiAgICBpZiAoaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIG1pbkxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPT09IGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5SXNOb3RFbXB0eTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNBdExlYXN0T25lSXRlbTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBhc3NlcnRzIGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIDE+IHtcbiAgICBpZiAoIWFycmF5SXNOb3RFbXB0eShpdGVtcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGJlIG5vdCBlbXB0eWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5SGFzTGVuZ3RoPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghYXJyYXlIYXNMZW5ndGgoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBzaG91bGQgaGFzIGxlbmd0aCAke2xlbmd0aH1gKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUxlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogYXNzZXJ0cyBpdGVtcyBpcyBBcnJheU9mTGVuZ3RoPFQsIFROdW0+IHtcbiAgICBpZiAoIWlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsKGl0ZW1zLCBsZW5ndGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXkgbXVzdCBoYXZlIG1pbmltYWwgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5ldmVyKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogdm9pZCB7XG4gICAgLy8gbm9vcFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQW5kR2V0U3RyaW5nKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7bmV2ZXJBcmd1bWVudH1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuQXN5bmNBY3Rpb24oYWN0aW9uOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgIGFjdGlvbigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JFbXB0eShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogaW5wdXQgaXMgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gaW5wdXQgPT0gdW5kZWZpbmVkIHx8IGlucHV0ID09PSBcIlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROdWxsT3JFbXB0eShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogaW5wdXQgaXMgc3RyaW5nIHtcbiAgICByZXR1cm4gIWlzTnVsbE9yRW1wdHkoaW5wdXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JXaGl0ZVNwYWNlKGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogaW5wdXQgaXMgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgcmV0dXJuIGlucHV0ID09IHVuZGVmaW5lZCB8fCBpbnB1dC50cmltKCkgPT09IFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmltTGFzdFNsYXNoKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdXJsLnNsaWNlKC0xKSA9PT0gXCIvXCIgPyB1cmwuc2xpY2UoMCwgLTEpIDogdXJsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0SXM8VD4odmFsdWU6IFQpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG4iXSwic291cmNlUm9vdCI6IiJ9
|