@getopenpay/openpay-js 0.5.21 → 0.5.22-alpha.0c615ee
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/dist/{Resource-gev46l8e.js → Resource-CDP_LYk6.js} +1 -1
- package/dist/{SimpleSpanProcessor-Bfvr2A-x.js → SimpleSpanProcessor-C9M4ecYU.js} +6 -6
- package/dist/{detect-resources-Dsv9d9vM.js → detect-resources-B3hbTCaW.js} +5 -5
- package/dist/{diag-api-CNTr0Y5K.js → diag-api-Cx6iM5GG.js} +1 -1
- package/dist/{index-YMU2Vq7W.js → index-4xoZBB0e.js} +1 -1
- package/dist/{index-Bz-cFJVk.js → index-BKpY-fF5.js} +10 -8
- package/dist/{index-aJcmpYd1.js → index-CEsyKChp.js} +4 -4
- package/dist/{index-BTafRE31.js → index-CbDedW5b.js} +1 -1
- package/dist/{index-CKGwHylL.js → index-DtrrCkVy.js} +2 -2
- package/dist/{index-Dl7IrFzr.js → index-Dzytsd9q.js} +4 -4
- package/dist/{index-CCXfR_sd.js → index-JtDWRFrk.js} +1 -1
- package/dist/{index-BWAO--Jr.js → index-aTI2T4Lf.js} +1 -1
- package/dist/{index-j0go3SGP.js → index-gDgLVEDN.js} +5 -5
- package/dist/{index--artEL9D.js → index-mollwvw4.js} +4 -4
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +1 -1
- package/dist/index.umd.js +2 -2
- package/dist/{metrics-api-udYH0h1J.js → metrics-api-BzL5cFjX.js} +1 -1
- package/dist/{suppress-tracing-pIJ_JxlX.js → suppress-tracing-ekFtnD6G.js} +1 -1
- package/dist/{url-g4AHZF1Q.js → url-hzkpj_ve.js} +1 -1
- package/dist/{utils-CJSreQOn.js → utils-DE6vnS_z.js} +1 -1
- package/dist/{utils-BvP2eNeX.js → utils-Dq0oRJQf.js} +3 -3
- package/package.json +1 -1
|
@@ -5603,7 +5603,8 @@ const Il = V(
|
|
|
5603
5603
|
processor_specific_metadata: {
|
|
5604
5604
|
loop_customer: a.customer,
|
|
5605
5605
|
loop_payment_method: a.paymentMethod,
|
|
5606
|
-
loop_success: a.success
|
|
5606
|
+
loop_success: a.success,
|
|
5607
|
+
loop_payin_id: a.payinId
|
|
5607
5608
|
}
|
|
5608
5609
|
});
|
|
5609
5610
|
if (ee(`Confirm result: ${m}`), i.mode === "setup") {
|
|
@@ -6167,7 +6168,6 @@ const Ol = async ({ context: e, formCallbacks: t }) => {
|
|
|
6167
6168
|
K("Stripe instance created", f);
|
|
6168
6169
|
const y = Ce(s), _ = `${s[p.FIRST_NAME]} ${s[p.LAST_NAME]}`, g = {
|
|
6169
6170
|
return_url: new URL("/app/3ds/success/", e.baseUrl).toString(),
|
|
6170
|
-
setup_future_usage: "off_session",
|
|
6171
6171
|
payment_method: {
|
|
6172
6172
|
billing_details: {
|
|
6173
6173
|
email: s[p.EMAIL],
|
|
@@ -6449,12 +6449,14 @@ const Ol = async ({ context: e, formCallbacks: t }) => {
|
|
|
6449
6449
|
const g = typeof _.applePayPaymentRequest == "function" ? _.applePayPaymentRequest({}) : _.applePayPaymentRequest;
|
|
6450
6450
|
Br(l, _.amount, _.pending, g, _.label);
|
|
6451
6451
|
}
|
|
6452
|
-
te("Showing PR dialog..."), l.show();
|
|
6453
6452
|
const c = await N(s);
|
|
6454
6453
|
if (!a.overridePaymentRequest) {
|
|
6455
|
-
const _ = c.mode === "setup"
|
|
6456
|
-
|
|
6454
|
+
const _ = c.mode === "setup";
|
|
6455
|
+
Q(s, c.token, _, void 0).then((g) => {
|
|
6456
|
+
l.isShowing() || Br(l, g, !1, void 0, "Total");
|
|
6457
|
+
});
|
|
6457
6458
|
}
|
|
6459
|
+
te("Showing PR dialog..."), l.show();
|
|
6458
6460
|
const u = await es(l);
|
|
6459
6461
|
te("Stripe PM added event:", u), te("Merging PM fields with form fields...");
|
|
6460
6462
|
const d = au(r, u), m = G(d, n.get.onValidationError);
|
|
@@ -6930,7 +6932,7 @@ let Qr;
|
|
|
6930
6932
|
const Eu = async (e, t) => {
|
|
6931
6933
|
if (typeof window > "u")
|
|
6932
6934
|
return;
|
|
6933
|
-
const r = await import("./index
|
|
6935
|
+
const r = await import("./index-mollwvw4.js"), { ConsoleSpanExporter: n, SimpleSpanProcessor: a, WebTracerProvider: i } = r, s = await import("./index-gDgLVEDN.js"), { FetchInstrumentation: l } = s, c = await import("./index-CbDedW5b.js"), { ZoneContextManager: u } = c, d = await import("./index-CEsyKChp.js"), { registerInstrumentations: m } = d, f = await import("./index-aTI2T4Lf.js"), { Resource: y } = f, _ = await import("./detect-resources-B3hbTCaW.js").then((Vt) => Vt.d), { detectResourcesSync: g } = _, w = await import("./index-JtDWRFrk.js"), { OTLPTraceExporter: h } = w, b = await import("./index-DtrrCkVy.js"), { B3Propagator: S, B3InjectEncoding: C } = b, L = await import("./index-4xoZBB0e.js"), { BatchSpanProcessor: A } = L;
|
|
6934
6936
|
Jt(`Initializing tracer with version ${e} and baseUrl ${t}`);
|
|
6935
6937
|
const $ = Cu(t);
|
|
6936
6938
|
Jt(`Using collector URL ${$}`);
|
|
@@ -7543,7 +7545,7 @@ const Iu = (e, t, r) => {
|
|
|
7543
7545
|
B()?.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), Wi(), this.registeredElements = null, delete window.ojs, v("form_destroyed");
|
|
7544
7546
|
}, this.updateCallbacks = (a) => {
|
|
7545
7547
|
this.formCallbacks.setCallbacks(a);
|
|
7546
|
-
}, he.assignAsSingleton(this), this.ojsVersion = "0.5.
|
|
7548
|
+
}, he.assignAsSingleton(this), this.ojsVersion = "0.5.22", this.ojsReleaseVersion = "0.5.22-alpha.0c615ee", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = ar.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${Ge()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new ku(), this.deviceToken = zn(), Yi();
|
|
7547
7549
|
const { framework: r, version: n } = fu();
|
|
7548
7550
|
Sn(this.baseUrl).then((a) => {
|
|
7549
7551
|
if (!er.current.isSuccess) {
|
|
@@ -7632,4 +7634,4 @@ export {
|
|
|
7632
7634
|
je as t,
|
|
7633
7635
|
ur as u
|
|
7634
7636
|
};
|
|
7635
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA5fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzJDEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG52YXIgQ3VzdG9tRXJyb3IgPSBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0oRXJyb3IpO1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMVwiXSA9IFwibGluZTFcIjtcbiAgRmllbGROYW1lMltcIkxJTkUyXCJdID0gXCJsaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiTElORTNcIl0gPSBcImxpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTFcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUyXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTNcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DSVRZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19TVEFURVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzU3RhdGVcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0NPVU5UUllcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX1pJUF9DT0RFXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkdcIl0gPSBcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiSVNfQlVTSU5FU1NfUFVSQ0hBU0VcIl0gPSBcImlzQnVzaW5lc3NQdXJjaGFzZVwiO1xuICBGaWVsZE5hbWUyW1wiQlVTSU5FU1NfTkFNRVwiXSA9IFwiYnVzaW5lc3NOYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJUQVhfSURcIl0gPSBcInRheElkXCI7XG4gIEZpZWxkTmFtZTJbXCJUQVhfSURfVFlQRVwiXSA9IFwidGF4SWRUeXBlXCI7XG4gIHJldHVybiBGaWVsZE5hbWUyO1xufSkoRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IEZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oRmllbGROYW1lKTtcbnZhciBQcml2YXRlRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoUHJpdmF0ZUZpZWxkTmFtZTIpID0+IHtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZE51bWJlclwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkRXhwaXJ5XCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmRDdmNcIjtcbiAgcmV0dXJuIFByaXZhdGVGaWVsZE5hbWUyO1xufSkoUHJpdmF0ZUZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBQcml2YXRlRmllbGROYW1lRW51bSA9IHoubmF0aXZlRW51bShQcml2YXRlRmllbGROYW1lKTtcbmNvbnN0IEFsbEZpZWxkTmFtZXMgPSB6LnVuaW9uKFtGaWVsZE5hbWVFbnVtLCBQcml2YXRlRmllbGROYW1lRW51bV0pO1xudmFyIEVsZW1lbnRUeXBlRW51bSA9IC8qIEBfX1BVUkVfXyAqLyAoKEVsZW1lbnRUeXBlRW51bTIpID0+IHtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRcIl0gPSBcImNhcmRcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkLW51bWJlclwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmQtZXhwaXJ5XCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZC1jdmNcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNERV9CUklER0VcIl0gPSBcImNkZS1icmlkZ2VcIjtcbiAgcmV0dXJuIEVsZW1lbnRUeXBlRW51bTI7XG59KShFbGVtZW50VHlwZUVudW0gfHwge30pO1xuY29uc3QgX0VsZW1lbnRUeXBlRW51bVpvZCA9IHouZW51bShbXCJjYXJkXCIsIFwiY2FyZC1udW1iZXJcIiwgXCJjYXJkLWV4cGlyeVwiLCBcImNhcmQtY3ZjXCIsIFwiY2RlLWJyaWRnZVwiXSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBCYXNlRWxlbWVudHNTdHlsZSA9IHoub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nLFxuICBwbGFjZWhvbGRlclN0eWxlOiB6Lm9iamVjdCh7XG4gICAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZ1xuICB9KS5vcHRpb25hbCgpXG59KTtcbkJhc2VFbGVtZW50c1N0eWxlLmV4dGVuZCh7XG4gIGRpc2FibGVBdXRvRmlsbDogT3B0aW9uYWxTdHJpbmcsXG4gIHBsYWNlaG9sZGVyOiB6Lm9iamVjdCh7XG4gICAgY2FyZE51bWJlcjogT3B0aW9uYWxTdHJpbmcsXG4gICAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgICBjdmM6IE9wdGlvbmFsU3RyaW5nXG4gIH0pLm9wdGlvbmFsKClcbn0pO1xuQmFzZUVsZW1lbnRzU3R5bGUuZXh0ZW5kKHtcbiAgZGlzYWJsZUF1dG9GaWxsOiBPcHRpb25hbFN0cmluZyxcbiAgcGxhY2Vob2xkZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqXG4gICAqIFRoZSBjYXJkIGljb24gYXQgdGhlIHN0YXJ0IG9mIHRoZSBjYXJkIG51bWJlciBpbnB1dCBmaWVsZFxuICAgKiBJdCB3b24ndCBhZmZlY3QgYWZ0ZXIgdGhlIGljb24gY2hhbmdlZCB0byBjYXJkIGJyYW5kIGFmdGVyIHRoZSB1c2VyIGlucHV0IHRoZSBjYXJkIG51bWJlclxuICAgKi9cbiAgaWNvbjogei5vYmplY3Qoe1xuICAgIGNvbG9yOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSkub3B0aW9uYWwoKVxufSk7XG5CYXNlRWxlbWVudHNTdHlsZS5leHRlbmQoe1xuICBkaXNhYmxlQXV0b0ZpbGw6IE9wdGlvbmFsU3RyaW5nLFxuICBwbGFjZWhvbGRlcjogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbkJhc2VFbGVtZW50c1N0eWxlLmV4dGVuZCh7XG4gIGRpc2FibGVBdXRvRmlsbDogT3B0aW9uYWxTdHJpbmcsXG4gIHBsYWNlaG9sZGVyOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0gei5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIG9iZnVzY2F0ZWRWYWx1ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IEVycm9yRXZlbnRUeXBlLFxuICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogQWxsRmllbGROYW1lcyxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgdG90YWxBbW91bnRBdG9tczogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6LmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxufSk7XG5jb25zdCBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6Lm9wdGlvbmFsKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUmVxdWlyZWRGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTFcIiAvKiBMSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMlwiIC8qIExJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUzXCIgLyogTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiaXNTaGlwcGluZ1NhbWVBc0JpbGxpbmdcIiAvKiBJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkcgKi9dOiB6LmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCh0cnVlKSxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiIC8qIFNISVBQSU5HX0xJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCIgLyogU0hJUFBJTkdfTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ2l0eVwiIC8qIFNISVBQSU5HX0NJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiAvKiBTSElQUElOR19TVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIgLyogU0hJUFBJTkdfQ09VTlRSWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIgLyogU0hJUFBJTkdfWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiYnVzaW5lc3NOYW1lXCIgLyogQlVTSU5FU1NfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJ0YXhJZFwiIC8qIFRBWF9JRCAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJ0YXhJZFR5cGVcIiAvKiBUQVhfSURfVFlQRSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHoub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTJcIiAvKiBMSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lM1wiIC8qIExJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIgLyogSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HICovXTogei5jdXN0b20oKS5vcHRpb25hbCgpLmRlZmF1bHQodHJ1ZSksXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCIgLyogU0hJUFBJTkdfTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTJcIiAvKiBTSElQUElOR19MSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiIC8qIFNISVBQSU5HX0xJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImJ1c2luZXNzTmFtZVwiIC8qIEJVU0lORVNTX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1widGF4SWRcIiAvKiBUQVhfSUQgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1widGF4SWRUeXBlXCIgLyogVEFYX0lEX1RZUEUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nLFxuICBwYXltZW50Um91dGVJZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogei5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHouc3RyaW5nKCksXG4gIHBheW1lbnRNZXRob2RJZDogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbmNvbnN0IEVsZW1lbnRFdmVudCA9IHoub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6Lm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBSZXF1aXJlZFN0cmluZ1xufSk7XG56LmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHouc3RyaW5nKCksXG4gIHBheW1lbnRfbWV0aG9kX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPciQxKHouYXJyYXkoei5zdHJpbmcoKSkpXG59KTtcbmNvbnN0IEZpZWxkVmFsaWRhdGlvbkVycm9yID0gei5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogei5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBzdWNjZXNzOiB6LmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6LmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHouYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZFJlc3BvbnNlID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgei5vYmplY3QoeyBzdWNjZXNzOiB6LmxpdGVyYWwodHJ1ZSkgfSksXG4gIFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2Vcbl0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKVxufSk7XG52YXIgVGhyZWVEU1N0YXR1cyA9IC8qIEBfX1BVUkVfXyAqLyAoKFRocmVlRFNTdGF0dXMyKSA9PiB7XG4gIFRocmVlRFNTdGF0dXMyW1wiU1VDQ0VTU1wiXSA9IFwic3VjY2Vzc1wiO1xuICBUaHJlZURTU3RhdHVzMltcIkZBSUxVUkVcIl0gPSBcImZhaWx1cmVcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJDQU5DRUxMRURcIl0gPSBcImNhbmNlbGxlZFwiO1xuICByZXR1cm4gVGhyZWVEU1N0YXR1czI7XG59KShUaHJlZURTU3RhdHVzIHx8IHt9KTtcbmNvbnN0IFBpbmczRFNTdGF0dXNSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnoub2JqZWN0KHtcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuY29uc3QgQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHouc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6LnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6LnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEFXWEJhbmsgPSB6Lm9iamVjdCh7XG4gIGJhbmtfbmFtZTogei5zdHJpbmcoKSxcbiAgZGlzcGxheV9uYW1lOiB6LnN0cmluZygpLFxuICByZXNvdXJjZXM6IHoub2JqZWN0KHtcbiAgICBsb2dvX3VybDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pXG59KTtcbmNvbnN0IENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBhdmFpbGFibGVfYmFua3M6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KEFXWEJhbmspKVxufSk7XG5jb25zdCBDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwodHJ1ZSksIGhyZWY6IHouc3RyaW5nKCkgfSksXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG5jb25zdCBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6LmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogbnVsbE9yVW5kZWZPciQxKHouYXJyYXkoQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhKSksXG4gIHBvc3RfY2hlY2tvdXRfcmVkaXJlY3RfdG86IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKVxufSk7XG5jb25zdCBFRlRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaW5zdGl0dXRpb25OdW1iZXI6IHouc3RyaW5nKCksXG4gIHRyYW5zaXROdW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnROdW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6LmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xuei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IEVGVEZvcm1EYXRhLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQkFDU0Zvcm1EYXRhID0gei5vYmplY3Qoe1xuICBzb3J0Q29kZTogei5zdHJpbmcoKSxcbiAgYWNjb3VudE51bWJlcjogei5zdHJpbmcoKSxcbiAgYWNjb3VudFR5cGU6IHouZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogQkFDU0Zvcm1EYXRhLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgU0VQQUZvcm1EYXRhID0gei5vYmplY3Qoe1xuICBpYmFuOiB6LnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogei5lbnVtKFtcInBlcnNvbmFsXCIsIFwiYnVzaW5lc3NcIl0pXG59KTtcbnoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBTRVBBRm9ybURhdGEub3B0aW9uYWwoKVxufSk7XG5jb25zdCBBQ0hNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgYWNjb3VudF9udW1iZXI6IHouc3RyaW5nKCksXG4gIGFiYV9yb3V0aW5nX251bWJlcjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBFRlRNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaW5zdGl0dXRpb25fbnVtYmVyOiB6LnN0cmluZygpLFxuICB0cmFuc2l0X251bWJlcjogei5zdHJpbmcoKSxcbiAgYWNjb3VudF9udW1iZXI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQkFDU01pY3JvRGVwb3NpdEZvcm1EYXRhID0gei5vYmplY3Qoe1xuICBhY2NvdW50X251bWJlcjogei5zdHJpbmcoKSxcbiAgc29ydF9jb2RlOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFNFUEFNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaWJhbjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBNaWNyb0RlcG9zaXRTdGF0dXNSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiB6LnVuaW9uKFtcbiAgICBBQ0hNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICBFRlRNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICBCQUNTTWljcm9EZXBvc2l0Rm9ybURhdGEsXG4gICAgU0VQQU1pY3JvRGVwb3NpdEZvcm1EYXRhLFxuICAgIHoub2JqZWN0KHsgZXJyb3I6IHouc3RyaW5nKCkgfSlcbiAgXSkub3B0aW9uYWwoKVxufSk7XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IENERVJlc3BvbnNlRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56LmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogei5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0gei5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKTtcbmNvbnN0IEJyYW5kID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBxdWFudGl0eTogei5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6LmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6LmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZXM6IHouYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjcmVhdGVkOiB6LmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogei5hcnJheShJbnZvaWNlTWluaW1hbCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPcih6LmFycmF5KHouc3RyaW5nKCkpKSxcbiAgcGF5bWVudF9tZXRob2RfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHouYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc2V0dGluZ3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpLFxuICByZXR1cm5fdXJsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBzdWNjZXNzX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHoubnVsbGFibGUoei51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6LnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSk7XG5jb25zdCBFeHBpcmVkRm9ybVByZWZpbGwgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56LnVuaW9uKFtQYXltZW50Rm9ybVByZWZpbGwsIENvbXBsZXRlZEZvcm1QcmVmaWxsLCBFeHBpcmVkRm9ybVByZWZpbGxdKTtcbnoub2JqZWN0KHtcbiAgbG9nbzogei5zdHJpbmcoKSxcbiAgaWNvbjogei5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogei5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBDb21wbGV0ZUFkZHJlc3MgPSB6Lm9iamVjdCh7XG4gIGxpbmUxOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUzOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNpdHk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgc3RhdGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY291bnRyeTogei5zdHJpbmcoKSxcbiAgemlwX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogei5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcyxcbiAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLm9wdGlvbmFsKCksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogei5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuei5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0gei5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9idXNpbmVzc19uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX3RheF9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl90YXhfaWRfdHlwZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLFxuICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUHJpY2VRdHkgPSB6Lm9iamVjdCh7XG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBDYXJ0SW5mbyA9IHoub2JqZWN0KHtcbiAgbGluZV9pdGVtczogei5hcnJheShQcmljZVF0eSksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChOZXdDdXN0b21lckZpZWxkcy5zaGFwZSkuZXh0ZW5kKFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEuc2hhcGUpO1xuY29uc3QgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxuICB1c2VfdW5pZmllZF9jY19mbG93OiBudWxsT3JVbmRlZk9yKHouYm9vbGVhbigpKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBDYXJ0SW5mby5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKSxcbiAgY2NfcG1faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoucmVjb3JkKHouYW55KCkpO1xuei5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUxOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTM6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNpdHk6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHN0YXRlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjb3VudHJ5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB6aXBfY29kZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYnVzaW5lc3NfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgdGF4X2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0YXhfaWRfdHlwZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogbnVsbE9yVW5kZWZPcih6LmJvb2xlYW4oKSlcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIG1lc3NhZ2U6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHoucmVjb3JkKHouYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIG5leHRfYWN0aW9uX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIGV2ZW50czogei5hcnJheShcbiAgICB6Lm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6LnN0cmluZygpLFxuICAgICAgZGV2aWNlX3Rva2VuOiB6LnN0cmluZygpLFxuICAgICAgcHJvcGVydGllczogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgICAgIGNvbnRleHRfcHJvcGVydGllczogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xuei5hbnkoKS5vcHRpb25hbCgpO1xuei5vYmplY3Qoe1xuICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKClcbn0pO1xuY29uc3QgU2V0VXNlckRldmljZVRva2VuUmVzcG9uc2UgPSB6Lm9iamVjdCh7fSk7XG5jb25zdCBVc2VyQWN0aW9uRkVQYXlsb2FkID0gei5vYmplY3Qoe1xuICBfdW5pZmllZF9jY19hY3Rpb25fbmFtZTogei5zdHJpbmcoKSxcbiAgX3VuaWZpZWRfY2NfcGNjc19pZDogei5zdHJpbmcoKVxufSkuY2F0Y2hhbGwoei5hbnkoKSk7XG5cbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yUmVzcG9uc2UgPSB6LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbmNvbnN0IFpvZEZpZWxkRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGNvZGU6IHouc3RyaW5nKCksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIHBhdGg6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgWm9kRmllbGRFcnJvcnMgPSB6LmFycmF5KFpvZEZpZWxkRXJyb3IpO1xuY29uc3QgTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRSA9IHtcbiAgXCJmYWlsZWQgdG8gZmV0Y2hcIjogYENvbm5lY3Rpb24gZXJyb3I6IHBsZWFzZSBkb3VibGUgY2hlY2sgaWYgeW91IGFyZSBjb25uZWN0ZWQgdG8gdGhlIGludGVybmV0LCB0aGVuIHRyeSBhZ2FpbmBcbn07XG5jb25zdCBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZSA9IChvZ0Vycm9yTWVzc2FnZSkgPT4ge1xuICBjb25zdCBrZXkgPSBvZ0Vycm9yTWVzc2FnZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIE1BUF9UT19IVU1BTl9GUklFTkRMWV9MT1dFUkNBU0Vba2V5XSA/PyBvZ0Vycm9yTWVzc2FnZTtcbn07XG5jb25zdCBpc1N0cmluZ2lmaWVkSnNvbk9iamVjdCA9IChzdHIpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHN0cik7XG4gICAgcmV0dXJuIHR5cGVvZiBwYXJzZWQgPT09IFwib2JqZWN0XCI7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5jb25zdCBjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZ2V0SHVtYW5GcmllbmRseU1lc3NhZ2UocmVzcG9uc2VbMF0ubXNnKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBidWxsZXRlZCA9IHJlc3BvbnNlLm1hcCgoZXJyKSA9PiBg4oCiICR7Z2V0SHVtYW5GcmllbmRseU1lc3NhZ2UoZXJyLm1zZyl9YCkuam9pbihcIlxcblwiKTtcbiAgICByZXR1cm4gYCR7YFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6YH1cbiR7YnVsbGV0ZWR9YDtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMgPSAoZXJyb3JzKSA9PiB7XG4gIGNvbnN0IGxpc3RPZkVycm9ycyA9IGVycm9ycy5tYXAoKGVycikgPT4gYC0gJHtlcnIucGF0aC5qb2luKFwiL1wiKX06ICR7ZXJyLm1lc3NhZ2V9YCkuam9pbihcIlxcblwiKTtcbiAgcmV0dXJuIGBFbmNvdW50ZXJlZCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7bGlzdE9mRXJyb3JzfWA7XG59O1xuY29uc3QgZ2V0RXJyb3JNZXNzYWdlID0gKGUpID0+IHtcbiAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIGlmIChpc1N0cmluZ2lmaWVkSnNvbk9iamVjdChlLm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCBvYmogPSBKU09OLnBhcnNlKGUubWVzc2FnZSk7XG4gICAgICBpZiAoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZS5zYWZlUGFyc2Uob2JqKS5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yKG9iaik7XG4gICAgICB9IGVsc2UgaWYgKFpvZEZpZWxkRXJyb3JzLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMob2JqKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7ZS5tZXNzYWdlfWApO1xuICAgICAgICByZXR1cm4gZS5tZXNzYWdlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ2V0SHVtYW5GcmllbmRseU1lc3NhZ2UoZS5tZXNzYWdlKTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShlKTtcbiAgICB9IGNhdGNoIChlMikge1xuICAgICAgcmV0dXJuIGUyICsgXCJcIjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGUgKyBcIlwiO1xuICB9XG59O1xuY29uc3QgbWFrZUNhbGxiYWNrU2FmZSA9IChjYWxsYmFja05hbWUsIGZuLCBlcnJvckxvZ2dlcikgPT4ge1xuICByZXR1cm4gKCguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JMb2dnZXIoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke2NhbGxiYWNrTmFtZX0pOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICB9KTtcbn07XG5cbmNvbnN0IHN1bSA9IChhcnIpID0+IHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbn07XG5cbmNvbnN0IGJlZm9yZVVubG9hZEhhbmRsZXIgPSAoZXZlbnQpID0+IHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQucmV0dXJuVmFsdWUgPSB0cnVlO1xufTtcbmNvbnN0IHByZXZlbnROYXZpZ2F0aW9uID0gKCkgPT4ge1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBiZWZvcmVVbmxvYWRIYW5kbGVyKTtcbn07XG5jb25zdCBzdG9wUHJldmVudE5hdmlnYXRpb24gPSAoKSA9PiB7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGJlZm9yZVVubG9hZEhhbmRsZXIpO1xufTtcblxuY29uc3QgYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMgPSAoc2ltcGxlT2pzRmxvdykgPT4ge1xuICBsZXQgaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gIHJldHVybiBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgaWYgKGlzU3VibWl0dGluZykge1xuICAgICAgY29uc29sZS53YXJuKFwiU2tpcHBpbmcgc3VibWlzc2lvbiBiZWNhdXNlIGl0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlzU3VibWl0dGluZyA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChwYXJhbXMuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24pIHtcbiAgICAgICAgcHJldmVudE5hdmlnYXRpb24oKTtcbiAgICAgIH1cbiAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3RhcnRlZD8uKCk7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X3N0YXJ0ZWRcIiwge1xuICAgICAgICBjcG06IHBhcmFtcy5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZmxvd1Jlc3VsdCA9IGF3YWl0IHNpbXBsZU9qc0Zsb3cocGFyYW1zKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfc3VjY2Vzc1wiLCB7XG4gICAgICAgIGNwbTogcGFyYW1zLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4uZmxvd1Jlc3VsdFxuICAgICAgfSk7XG4gICAgICBmb3JjZVByb2Nlc3NNZXRyaWNzUXVldWUoKTtcbiAgICAgIGlmIChmbG93UmVzdWx0Lm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGZsb3dSZXN1bHQucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICAgIH0gZWxzZSBpZiAoZmxvd1Jlc3VsdC5tb2RlID09PSBcImNoZWNrb3V0XCIpIHtcbiAgICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LmN1c3RvbWVyX2lkLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LnByb2Nlc3NvcnNfdXNlZCA/PyBbXSxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCA/PyBcIlwiXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBtb2RlOiAke2Zsb3dSZXN1bHR9YCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGF3YWl0IHNhZmVseUdldFN0YW5kYXJkaXplZEVycm9yQ29kZShwYXJhbXMuY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnJvck1lc3NhZ2UsIGVycm9yQ29kZSk7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHsgY3BtOiBwYXJhbXMuY2hlY2tvdXRQYXltZW50TWV0aG9kLCBlcnJvck1lc3NhZ2UsIGVycm9yQ29kZSwgZXJyb3IgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgaWYgKHBhcmFtcy5jb250ZXh0LnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbikge1xuICAgICAgICBzdG9wUHJldmVudE5hdmlnYXRpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuY29uc3QgYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCA9IChpbml0KSA9PiB7XG4gIHJldHVybiBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBpbml0KHBhcmFtcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHsgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiaW5pdC1lcnJvci1jYXRjaGVyXCIpO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGF3YWl0IHNhZmVseUdldFN0YW5kYXJkaXplZEVycm9yQ29kZShwYXJhbXMuY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgZXJyX18oZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UsIGVycm9yKTtcbiAgICAgIHRyYWNrKFwiaW5pdF9mbG93X2Vycm9yXCIsIHsgZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUsIGVycm9yIH0pO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCByZWFzb246IGVycm9yTWVzc2FnZSwgZXJyb3JDb2RlLCBpc0xvYWRpbmc6IGZhbHNlIH07XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZnVuY3Rpb24gX19yZWFkJDQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuZnVuY3Rpb24gX19zcHJlYWRBcnJheSQ0KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cblxuZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JDbGFzcyhjcmVhdGVJbXBsKSB7XG4gICAgdmFyIF9zdXBlciA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICBFcnJvci5jYWxsKGluc3RhbmNlKTtcbiAgICAgICAgaW5zdGFuY2Uuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgICB9O1xuICAgIHZhciBjdG9yRnVuYyA9IGNyZWF0ZUltcGwoX3N1cGVyKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvckZ1bmM7XG4gICAgcmV0dXJuIGN0b3JGdW5jO1xufVxuXG52YXIgVW5zdWJzY3JpcHRpb25FcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBVbnN1YnNjcmlwdGlvbkVycm9ySW1wbChlcnJvcnMpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBlcnJvcnNcbiAgICAgICAgICAgID8gZXJyb3JzLmxlbmd0aCArIFwiIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XFxuXCIgKyBlcnJvcnMubWFwKGZ1bmN0aW9uIChlcnIsIGkpIHsgcmV0dXJuIGkgKyAxICsgXCIpIFwiICsgZXJyLnRvU3RyaW5nKCk7IH0pLmpvaW4oJ1xcbiAgJylcbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdVbnN1YnNjcmlwdGlvbkVycm9yJztcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgfTtcbn0pO1xuXG5mdW5jdGlvbiBhcnJSZW1vdmUoYXJyLCBpdGVtKSB7XG4gICAgaWYgKGFycikge1xuICAgICAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgMCA8PSBpbmRleCAmJiBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpcHRpb24gPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbihpbml0aWFsVGVhcmRvd24pIHtcbiAgICAgICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSBpbml0aWFsVGVhcmRvd247XG4gICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgIH1cbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZV8xLCBfYSwgZV8yLCBfYjtcbiAgICAgICAgdmFyIGVycm9ycztcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgICAgICBpZiAoX3BhcmVudGFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9wYXJlbnRhZ2VfMSA9IF9fdmFsdWVzKF9wYXJlbnRhZ2UpLCBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCk7ICFfcGFyZW50YWdlXzFfMS5kb25lOyBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50XzEgPSBfcGFyZW50YWdlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRfMS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcGFyZW50YWdlXzFfMSAmJiAhX3BhcmVudGFnZV8xXzEuZG9uZSAmJiAoX2EgPSBfcGFyZW50YWdlXzEucmV0dXJuKSkgX2EuY2FsbChfcGFyZW50YWdlXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfcGFyZW50YWdlLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaW5pdGlhbEZpbmFsaXplciA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oaW5pdGlhbEZpbmFsaXplcikpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsRmluYWxpemVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGUgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yID8gZS5lcnJvcnMgOiBbZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgICAgIGlmIChfZmluYWxpemVycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9maW5hbGl6ZXJzXzEgPSBfX3ZhbHVlcyhfZmluYWxpemVycyksIF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpOyAhX2ZpbmFsaXplcnNfMV8xLmRvbmU7IF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmluYWxpemVyID0gX2ZpbmFsaXplcnNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKGZpbmFsaXplcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICE9PSBudWxsICYmIGVycm9ycyAhPT0gdm9pZCAwID8gZXJyb3JzIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gX19zcHJlYWRBcnJheSQ0KF9fc3ByZWFkQXJyYXkkNChbXSwgX19yZWFkJDQoZXJyb3JzKSksIF9fcmVhZCQ0KGVyci5lcnJvcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnNfMV8xICYmICFfZmluYWxpemVyc18xXzEuZG9uZSAmJiAoX2IgPSBfZmluYWxpemVyc18xLnJldHVybikpIF9iLmNhbGwoX2ZpbmFsaXplcnNfMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdWJzY3JpcHRpb25FcnJvcihlcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0ZWFyZG93biAmJiB0ZWFyZG93biAhPT0gdGhpcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duLmNsb3NlZCB8fCB0ZWFyZG93bi5faGFzUGFyZW50KHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVhcmRvd24uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoX2EgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSkucHVzaCh0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHJldHVybiBfcGFyZW50YWdlID09PSBwYXJlbnQgfHwgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgJiYgX3BhcmVudGFnZS5pbmNsdWRlcyhwYXJlbnQpKTtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgPyAoX3BhcmVudGFnZS5wdXNoKHBhcmVudCksIF9wYXJlbnRhZ2UpIDogX3BhcmVudGFnZSA/IFtfcGFyZW50YWdlLCBwYXJlbnRdIDogcGFyZW50O1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgaWYgKF9wYXJlbnRhZ2UgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICBhcnJSZW1vdmUoX3BhcmVudGFnZSwgcGFyZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgX2ZpbmFsaXplcnMgJiYgYXJyUmVtb3ZlKF9maW5hbGl6ZXJzLCB0ZWFyZG93bik7XG4gICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGVhcmRvd24uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLkVNUFRZID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVtcHR5ID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICBlbXB0eS5jbG9zZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZW1wdHk7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uO1xufSgpKTtcbnZhciBFTVBUWV9TVUJTQ1JJUFRJT04gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5mdW5jdGlvbiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24gfHxcbiAgICAgICAgKHZhbHVlICYmICdjbG9zZWQnIGluIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUucmVtb3ZlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmFkZCkgJiYgaXNGdW5jdGlvbih2YWx1ZS51bnN1YnNjcmliZSkpKTtcbn1cbmZ1bmN0aW9uIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZmluYWxpemVyKSkge1xuICAgICAgICBmaW5hbGl6ZXIoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZpbmFsaXplci51bnN1YnNjcmliZSgpO1xuICAgIH1cbn1cblxudmFyIGNvbmZpZyA9IHtcbiAgICBQcm9taXNlOiB1bmRlZmluZWR9O1xuXG52YXIgdGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheSQ0KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkJDQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICByZXR1cm4gKGNsZWFyVGltZW91dCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG5mdW5jdGlvbiByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnIpIHtcbiAgICB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub29wKCkgeyB9XG5cbmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikge1xuICAgIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJzY3JpYmVyLmNyZWF0ZSA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmliZXI7XG59KFN1YnNjcmlwdGlvbikpO1xudmFyIENvbnN1bWVyT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcGFydGlhbE9ic2VydmVyO1xuICAgIH1cbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5lcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb25zdW1lck9ic2VydmVyO1xufSgpKTtcbnZhciBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHtcbiAgICB7XG4gICAgICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycikge1xuICAgIHRocm93IGVycjtcbn1cbnZhciBFTVBUWV9PQlNFUlZFUiA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogbm9vcCxcbiAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICBjb21wbGV0ZTogbm9vcCxcbn07XG5cbnZhciBvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlKSB8fCAnQEBvYnNlcnZhYmxlJzsgfSkoKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICAgIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBwaXBlRnJvbUFycmF5KGZucykge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eTtcbiAgICB9XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZuc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBmbikgeyByZXR1cm4gZm4ocHJldik7IH0sIGlucHV0KTtcbiAgICB9O1xufVxuXG52YXIgT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmUpIHtcbiAgICAgICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIG9ic2VydmFibGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IGlzU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCkgPyBvYnNlcnZlck9yTmV4dCA6IG5ldyBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvcGVyYXRpb25zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5mdW5jdGlvbiBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gcHJvbWlzZUN0b3IgIT09IG51bGwgJiYgcHJvbWlzZUN0b3IgIT09IHZvaWQgMCA/IHByb21pc2VDdG9yIDogY29uZmlnLlByb21pc2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBpc09ic2VydmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUubmV4dCkgJiYgaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbih2YWx1ZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBpc1N1YnNjcmliZXIodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaWJlcikgfHwgKGlzT2JzZXJ2ZXIodmFsdWUpICYmIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIGhhc0xpZnQoc291cmNlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlLmxpZnQpO1xufVxuZnVuY3Rpb24gb3BlcmF0ZShpbml0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KGZ1bmN0aW9uIChsaWZ0ZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdChsaWZ0ZWRTb3VyY2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZScpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7XG59XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7XG4gICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gb25OZXh0XG4gICAgICAgICAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7XG4gICAgICAgIF90aGlzLl9lcnJvciA9IG9uRXJyb3JcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3BlcmF0b3JTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICAgICAgICB2YXIgY2xvc2VkXzEgPSB0aGlzLmNsb3NlZDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICFjbG9zZWRfMSAmJiAoKF9hID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcblxudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnb2JqZWN0IHVuc3Vic2NyaWJlZCc7XG4gICAgfTtcbn0pO1xuXG52YXIgU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ViamVjdCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFub255bW91c1N1YmplY3QodGhpcywgdGhpcyk7XG4gICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oX3RoaXMub2JzZXJ2ZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gX2MudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJqZWN0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYS5vYnNlcnZlcnM7XG4gICAgICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgb2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgU3ViamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3ViamVjdDtcbn0oT2JzZXJ2YWJsZSkpO1xudmFyIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHZhbHVlKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnIpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgIH07XG4gICAgcmV0dXJuIEFub255bW91c1N1YmplY3Q7XG59KFN1YmplY3QpKTtcblxudmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAgICBub3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChEYXRlKS5ub3coKTtcbiAgICB9fTtcblxudmFyIEFjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBBY3Rpb247XG59KFN1YnNjcmlwdGlvbikpO1xuXG52YXIgaW50ZXJ2YWxQcm92aWRlciA9IHtcbiAgICBzZXRJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheSQ0KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkJDQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgcmV0dXJuIChjbGVhckludGVydmFsKShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbnZhciBBc3luY0FjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgX3RoaXMud29yayA9IHdvcms7XG4gICAgICAgIF90aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB2YXIgaWQgPSB0aGlzLmlkO1xuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWxheSA9IGRlbGF5O1xuICAgICAgICB0aGlzLmlkID0gKF9hID0gdGhpcy5pZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXIsIHRoaXMuaWQsIGRlbGF5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBfaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gaW50ZXJ2YWxQcm92aWRlci5zZXRJbnRlcnZhbChzY2hlZHVsZXIuZmx1c2guYmluZChzY2hlZHVsZXIsIHRoaXMpLCBkZWxheSk7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoX3NjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAoZGVsYXkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBkZWxheSAmJiB0aGlzLnBlbmRpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGludGVydmFsUHJvdmlkZXIuY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ2V4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yID0gdGhpcy5fZXhlY3V0ZShzdGF0ZSwgZGVsYXkpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnBlbmRpbmcgPT09IGZhbHNlICYmIHRoaXMuaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIF9kZWxheSkge1xuICAgICAgICB2YXIgZXJyb3JlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3JWYWx1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMud29yayhzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgZXJyb3JWYWx1ZSA9IGUgPyBlIDogbmV3IEVycm9yKCdTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yZWQpIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvclZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGlkID0gX2EuaWQsIHNjaGVkdWxlciA9IF9hLnNjaGVkdWxlcjtcbiAgICAgICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7XG4gICAgICAgICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBhcnJSZW1vdmUoYWN0aW9ucywgdGhpcyk7XG4gICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZWxheSA9IG51bGw7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY0FjdGlvbjtcbn0oQWN0aW9uKSk7XG5cbnZhciBTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNjaGVkdWxlcihzY2hlZHVsZXJBY3Rpb25DdG9yLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gc2NoZWR1bGVyQWN0aW9uQ3RvcjtcbiAgICAgICAgdGhpcy5ub3cgPSBub3c7XG4gICAgfVxuICAgIFNjaGVkdWxlci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAod29yaywgZGVsYXksIHN0YXRlKSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCB3b3JrKS5zY2hlZHVsZShzdGF0ZSwgZGVsYXkpO1xuICAgIH07XG4gICAgU2NoZWR1bGVyLm5vdyA9IGRhdGVUaW1lc3RhbXBQcm92aWRlci5ub3c7XG4gICAgcmV0dXJuIFNjaGVkdWxlcjtcbn0oKSk7XG5cbnZhciBBc3luY1NjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jU2NoZWR1bGVyKFNjaGVkdWxlckFjdGlvbiwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIFNjaGVkdWxlckFjdGlvbiwgbm93KSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5hY3Rpb25zID0gW107XG4gICAgICAgIF90aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY1NjaGVkdWxlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jU2NoZWR1bGVyO1xufShTY2hlZHVsZXIpKTtcblxudmFyIGFzeW5jU2NoZWR1bGVyID0gbmV3IEFzeW5jU2NoZWR1bGVyKEFzeW5jQWN0aW9uKTtcblxudmFyIGlzQXJyYXlMaWtlID0gKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ICYmIHR5cGVvZiB4Lmxlbmd0aCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHggIT09ICdmdW5jdGlvbic7IH0pO1xuXG5mdW5jdGlvbiBpc1Byb21pc2UodmFsdWUpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmFsdWUudGhlbik7XG59XG5cbmZ1bmN0aW9uIGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dFtvYnNlcnZhYmxlXSk7XG59XG5cbmZ1bmN0aW9uIGlzQXN5bmNJdGVyYWJsZShvYmopIHtcbiAgICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArIChpbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnID8gJ2FuIGludmFsaWQgb2JqZWN0JyA6IFwiJ1wiICsgaW5wdXQgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cblxuZnVuY3Rpb24gZ2V0U3ltYm9sSXRlcmF0b3IoKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgIVN5bWJvbC5pdGVyYXRvcikge1xuICAgICAgICByZXR1cm4gJ0BAaXRlcmF0b3InO1xuICAgIH1cbiAgICByZXR1cm4gU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIGl0ZXJhdG9yID0gZ2V0U3ltYm9sSXRlcmF0b3IoKTtcblxuZnVuY3Rpb24gaXNJdGVyYWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnB1dFtpdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yXzEoKSB7XG4gICAgICAgIHZhciByZWFkZXIsIF9hLCB2YWx1ZSwgZG9uZTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDI7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQocmVhZGVyLnJlYWQoKSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgX2EgPSBfYi5zZW50KCksIHZhbHVlID0gX2EudmFsdWUsIGRvbmUgPSBfYS5kb25lO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRvbmUpIHJldHVybiBbMywgNV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdCh2b2lkIDApXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMiwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbNCwgX19hd2FpdCh2YWx1ZSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNjogcmV0dXJuIFs0LCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDJdO1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVsZWFzZUxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlKG9iaikge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9iai5nZXRSZWFkZXIpO1xufVxuXG5mdW5jdGlvbiBpbm5lckZyb20oaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUludGVyb3BPYnNlcnZhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFycmF5TGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUHJvbWlzZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUl0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNSZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpO1xufVxuZnVuY3Rpb24gZnJvbUludGVyb3BPYnNlcnZhYmxlKG9iaikge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb2JzID0gb2JqW29ic2VydmFibGVdKCk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9icy5zdWJzY3JpYmUpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZScpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZShhcnJheSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aCAmJiAhc3Vic2NyaWJlci5jbG9zZWQ7IGkrKykge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGFycmF5W2ldKTtcbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tUHJvbWlzZShwcm9taXNlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb21pc2VcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pXG4gICAgICAgICAgICAudGhlbihudWxsLCByZXBvcnRVbmhhbmRsZWRFcnJvcik7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tSXRlcmFibGUoaXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpdGVyYWJsZV8xID0gX192YWx1ZXMoaXRlcmFibGUpLCBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKTsgIWl0ZXJhYmxlXzFfMS5kb25lOyBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGVfMV8xICYmICFpdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBpdGVyYWJsZV8xLnJldHVybikpIF9hLmNhbGwoaXRlcmFibGVfMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUFzeW5jSXRlcmFibGUoYXN5bmNJdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pKTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikge1xuICAgIHZhciBhc3luY0l0ZXJhYmxlXzEsIGFzeW5jSXRlcmFibGVfMV8xO1xuICAgIHZhciBlXzIsIF9hO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZhbHVlLCBlXzJfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pO1xuICAgICAgICAgICAgICAgICAgICBhc3luY0l0ZXJhYmxlXzEgPSBfX2FzeW5jVmFsdWVzKGFzeW5jSXRlcmFibGUpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzQsIGFzeW5jSXRlcmFibGVfMS5uZXh0KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgPSBfYi5zZW50KCksICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lKSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhc3luY0l0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMztcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMywgMV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIGVfMl8xID0gX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBlXzIgPSB7IGVycm9yOiBlXzJfMSB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSAmJiAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBhc3luY0l0ZXJhYmxlXzEucmV0dXJuKSkpIHJldHVybiBbMywgOF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX2EuY2FsbChhc3luY0l0ZXJhYmxlXzEpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSA4O1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBleGVjdXRlU2NoZWR1bGUocGFyZW50U3Vic2NyaXB0aW9uLCBzY2hlZHVsZXIsIHdvcmssIGRlbGF5LCByZXBlYXQpIHtcbiAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICBpZiAocmVwZWF0ID09PSB2b2lkIDApIHsgcmVwZWF0ID0gZmFsc2U7IH1cbiAgICB2YXIgc2NoZWR1bGVTdWJzY3JpcHRpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICB3b3JrKCk7XG4gICAgICAgIGlmIChyZXBlYXQpIHtcbiAgICAgICAgICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBkZWxheSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfSwgZGVsYXkpO1xuICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQoc2NoZWR1bGVTdWJzY3JpcHRpb24pO1xuICAgIGlmICghcmVwZWF0KSB7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZVN1YnNjcmlwdGlvbjtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRocm93RXJyb3IoZXJyb3JPckVycm9yRmFjdG9yeSwgc2NoZWR1bGVyKSB7XG4gICAgdmFyIGVycm9yRmFjdG9yeSA9IGlzRnVuY3Rpb24oZXJyb3JPckVycm9yRmFjdG9yeSkgPyBlcnJvck9yRXJyb3JGYWN0b3J5IDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXJyb3JPckVycm9yRmFjdG9yeTsgfTtcbiAgICB2YXIgaW5pdCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycm9yRmFjdG9yeSgpKTsgfTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoaW5pdCk7XG59XG5cbnZhciBFbXB0eUVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIEVtcHR5RXJyb3JJbXBsKCkge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdFbXB0eUVycm9yJztcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ25vIGVsZW1lbnRzIGluIHNlcXVlbmNlJztcbiAgICB9O1xufSk7XG5cbmZ1bmN0aW9uIGxhc3RWYWx1ZUZyb20oc291cmNlLCBjb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgX2hhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHZhciBfdmFsdWU7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgX2hhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoX2hhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoX3ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRW1wdHlFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZERhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZSk7XG59XG5cbnZhciBUaW1lb3V0RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVGltZW91dEVycm9ySW1wbChpbmZvKSB7XG4gICAgICAgIGlmIChpbmZvID09PSB2b2lkIDApIHsgaW5mbyA9IG51bGw7IH1cbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnVGltZW91dCBoYXMgb2NjdXJyZWQnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJztcbiAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICB9O1xufSk7XG5mdW5jdGlvbiB0aW1lb3V0KGNvbmZpZywgc2NoZWR1bGVyQXJnKSB7XG4gICAgdmFyIF9hID0gKGlzVmFsaWREYXRlKGNvbmZpZykgPyB7IGZpcnN0OiBjb25maWcgfSA6IHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInID8geyBlYWNoOiBjb25maWcgfSA6IGNvbmZpZyksIGZpcnN0ID0gX2EuZmlyc3QsIGVhY2ggPSBfYS5lYWNoLCBfYiA9IF9hLndpdGgsIF93aXRoID0gX2IgPT09IHZvaWQgMCA/IHRpbWVvdXRFcnJvckZhY3RvcnkgOiBfYiwgX2MgPSBfYS5zY2hlZHVsZXIsIHNjaGVkdWxlciA9IF9jID09PSB2b2lkIDAgPyBhc3luY1NjaGVkdWxlciA6IF9jLCBfZCA9IF9hLm1ldGEsIG1ldGEgPSBfZCA9PT0gdm9pZCAwID8gbnVsbCA6IF9kO1xuICAgIGlmIChmaXJzdCA9PSBudWxsICYmIGVhY2ggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyB0aW1lb3V0IHByb3ZpZGVkLicpO1xuICAgIH1cbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIHRpbWVyU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIHNlZW4gPSAwO1xuICAgICAgICB2YXIgc3RhcnRUaW1lciA9IGZ1bmN0aW9uIChkZWxheSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJGcm9tKF93aXRoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IG1ldGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IGxhc3RWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZW46IHNlZW4sXG4gICAgICAgICAgICAgICAgICAgIH0pKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgfTtcbiAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgc2VlbisrO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KChsYXN0VmFsdWUgPSB2YWx1ZSkpO1xuICAgICAgICAgICAgZWFjaCA+IDAgJiYgc3RhcnRUaW1lcihlYWNoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghKHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QgIT0gbnVsbCA/ICh0eXBlb2YgZmlyc3QgPT09ICdudW1iZXInID8gZmlyc3QgOiArZmlyc3QgLSBzY2hlZHVsZXIubm93KCkpIDogZWFjaCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0aW1lb3V0RXJyb3JGYWN0b3J5KGluZm8pIHtcbiAgICB0aHJvdyBuZXcgVGltZW91dEVycm9yKGluZm8pO1xufVxuXG5jbGFzcyBMb2FkZWRPbmNlUHVibGlzaGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAodmFsdWUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6IHRydWUsIGxvYWRlZFZhbHVlOiB2YWx1ZSB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9O1xuICAgIHRoaXMudGhyb3cgPSAoZXJyb3IsIGVyck1zZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6IGZhbHNlLCBlcnJvciwgZXJyTXNnIH07XG4gICAgICB0aGlzLl9zdWJqZWN0LmVycm9yKGVycm9yKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAodmFsdWVJZk5vdExvYWRlZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWVJZk5vdExvYWRlZDtcbiAgICB9O1xuICAgIHRoaXMuc3Vic2NyaWJlID0gKGZuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy53YWl0Rm9yTG9hZCA9ICh0aW1lb3V0Q29uZmlnKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIpIGFzc2VydE5ldmVyKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgdGltZW91dFBhcmFtcyA9IHtcbiAgICAgICAgZmlyc3Q6IHRpbWVvdXRDb25maWcudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IodGltZW91dENvbmZpZy50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLl9zdWJqZWN0LnBpcGUodGltZW91dCh0aW1lb3V0UGFyYW1zKSkpO1xuICAgIH07XG4gICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiBmYWxzZSB9O1xuICAgIHRoaXMuX3N1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5cbmNvbnN0IE9qc0Vudmlyb25tZW50ID0gei5lbnVtKFtcImRldlwiLCBcInN0Z1wiLCBcInByb2RcIl0pO1xuY29uc3QgY29ubnRvQmFzZVVybHMgPSB7XG4gIHByb2Q6IFwiaHR0cHM6Ly9jb25udG8uZ2V0b3BlbnBheS5jb21cIixcbiAgc3RnOiBcImh0dHBzOi8vY29ubnRvLm9wZW5wYXlzdGFnaW5nLmNvbVwiLFxuICBkZXY6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDAwXCJcbn07XG5jb25zdCBnZXRDb25udG9VcmwgPSAoZW52KSA9PiB7XG4gIHJldHVybiBjb25udG9CYXNlVXJsc1tlbnZdO1xufTtcbmNvbnN0IGVudkNhY2hlID0ge307XG5jb25zdCBnZXRDdXJyZW50RW52ID0gYXN5bmMgKGJhc2VVcmwpID0+IHtcbiAgaWYgKGVudkNhY2hlW2Jhc2VVcmxdKSB7XG4gICAgcmV0dXJuIGVudkNhY2hlW2Jhc2VVcmxdO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChuZXcgVVJMKFwiL2hlYWx0aC9lbnZpcm9ubWVudFwiLCBiYXNlVXJsKSkudGhlbigocmVzKSA9PiByZXMuanNvbigpKTtcbiAgICBjb25zdCBlbnYgPSBPanNFbnZpcm9ubWVudC5wYXJzZShyZXNwb25zZS5lbnZpcm9ubWVudCk7XG4gICAgZW52Q2FjaGVbYmFzZVVybF0gPSBlbnY7XG4gICAgcmV0dXJuIGVudjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gT2pzRW52aXJvbm1lbnQuVmFsdWVzLnByb2Q7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGFzc2VydE5ldmVyKHZhbHVlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7dmFsdWV9YCk7XG59XG5jb25zdCBleGNsdWRlUHJvcHMgPSAob2JqLCBwcm9wcykgPT4ge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKG9iaikuZmlsdGVyKChba2V5XSkgPT4gIXByb3BzLmluY2x1ZGVzKGtleSkpKTtcbn07XG5jb25zdCBnZXRXaW5kb3dTYWZlID0gKCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIHdpbmRvdztcbn07XG5cbmNvbnN0IG1ldHJpY3NQdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuY29uc3QgTUVUUklDU19RVUVVRV9LRVkgPSBcIm9wX21ldHJpY3NfcXVldWVcIjtcbmNvbnN0IE1BWF9SRVRSWV9BVFRFTVBUUyA9IDM7XG5jb25zdCBCQVRDSF9TSVpFID0gMztcbmNvbnN0IEJBVENIX0lOVEVSVkFMX01TID0gMWUzO1xuY29uc3QgeyBsb2dfXzogbG9nX18keCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgTWV0cmljc1F1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMDtcbiAgICB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJHgoXCJOZXR3b3JrIG9mZmxpbmUsIG1ldHJpY3Mgd2lsbCBiZSBxdWV1ZWRcIik7XG4gICAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH07XG4gICAgdGhpcy5vbmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJHgoXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpO1xuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9O1xuICAgIHRoaXMubG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gIH1cbiAgYWRkRXZlbnQoZXZlbnROYW1lLCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcykge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnROYW1lLFxuICAgICAgcHJvcGVydGllczogcHJvcGVydGllcyB8fCB7fSxcbiAgICAgIGNvbnRleHRQcm9wZXJ0aWVzOiBjb250ZXh0UHJvcGVydGllcyB8fCB7fSxcbiAgICAgIG5vbmNlOiB2NCgpLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBldmVudC50aW1lc3RhbXA7XG4gICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkUXVldWUgPSBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZT8uZ2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkUXVldWUpIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IEpTT04ucGFyc2Uoc3RvcmVkUXVldWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuICBzYXZlUXVldWVUb1N0b3JhZ2UoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSwgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWV1ZSkpO1xuICB9XG4gIHNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGNvbnN0IHNhZmVXaW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgaWYgKHNhZmVXaW5kb3cgJiYgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBzYWZlV2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgICB9LCBCQVRDSF9JTlRFUlZBTF9NUyk7XG4gICAgfVxuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBpZiAodGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIGdldFdpbmRvd1NhZmUoKT8uY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hUaW1lb3V0KTtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgfVxuICBwcm9jZXNzUXVldWUoKSB7XG4gICAgaWYgKCFuYXZpZ2F0b3Iub25MaW5lIHx8IHRoaXMucHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gdHJ1ZTtcbiAgICB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBjb250ZXh0ID0gbWV0cmljc1B1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgbG9nX18keChcIk1ldHJpY3MgY29udGV4dCBub3QgYXZhaWxhYmxlLCB3aWxsIHJldHJ5IGxhdGVyXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBiYXRjaCA9IHRoaXMucXVldWUuc2xpY2UoMCwgQkFUQ0hfU0laRSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhdGNoUGF5bG9hZCA9IHtcbiAgICAgICAgZXZlbnRzOiBiYXRjaC5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2ZW50X25hbWU6IGV2ZW50LmV2ZW50TmFtZSxcbiAgICAgICAgICAgIGRldmljZV90b2tlbjogY29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGNvbnRleHRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgICAgICAuLi5ldmVudC5jb250ZXh0UHJvcGVydGllc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgbm9uY2U6IGV2ZW50Lm5vbmNlLFxuICAgICAgICAgICAgICBkYXRldGltZTogZXZlbnQuZGF0ZXRpbWUsXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICB0aW1lX2RpZmZfZnJvbV9wcmV2aW91c19ldmVudDogZXZlbnQudGltZURpZmZGcm9tUHJldmlvdXNFdmVudCxcbiAgICAgICAgICAgICAgY2hlY2tvdXRfc2VjdXJlX3Rva2VuOiBjb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICAgIC4uLmV2ZW50LnByb3BlcnRpZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbm50b1VybCA9IGdldENvbm50b1VybChjb250ZXh0LmVudmlyb25tZW50KTtcbiAgICAgIGNvbnN0IG1ldHJpY3NSb3V0ZXIgPSBuZXcgVVJMKFwiL21ldHJpY3MvcHVibGljL2NhcHR1cmVcIiwgY29ubnRvVXJsKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobWV0cmljc1JvdXRlci50b1N0cmluZygpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShiYXRjaFBheWxvYWQpLFxuICAgICAgICBrZWVwYWxpdmU6IHRydWVcbiAgICAgICAgLy8gVG8gc2VuZCBldmVudHMgZXZlbiBpZiB0aGUgcGFnZSBpcyB1bmxvYWRlZFxuICAgICAgfSk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dfXyR4KFwiRXJyb3Igc2VuZGluZyBtZXRyaWNzIGJhdGNoOlwiLCBlcnJvcik7XG4gICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpIHtcbiAgICBiYXRjaC5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgZXZlbnQuYXR0ZW1wdENvdW50Kys7XG4gICAgfSk7XG4gICAgY29uc3QgZXZlbnRzVG9LZWVwID0gYmF0Y2guZmlsdGVyKChldmVudCkgPT4gZXZlbnQuYXR0ZW1wdENvdW50IDwgTUFYX1JFVFJZX0FUVEVNUFRTKTtcbiAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShiYXRjaC5sZW5ndGgpO1xuICAgIHRoaXMucXVldWUgPSBbLi4uZXZlbnRzVG9LZWVwLCAuLi50aGlzLnF1ZXVlXTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICB9XG4gIGNsZWFudXAoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lcik7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICAgIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbn1cbmNvbnN0IG1ldHJpY3NRdWV1ZSA9IG5ldyBNZXRyaWNzUXVldWUoKTtcbmNvbnN0IHRyYWNrID0gKGV2ZW50LCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcykgPT4ge1xuICBtZXRyaWNzUXVldWUuYWRkRXZlbnQoZXZlbnQsIHByb3BlcnRpZXMsIGNvbnRleHRQcm9wZXJ0aWVzKTtcbn07XG5jb25zdCBmb3JjZVByb2Nlc3NNZXRyaWNzUXVldWUgPSAoKSA9PiB7XG4gIG1ldHJpY3NRdWV1ZS5wcm9jZXNzUXVldWUoKTtcbn07XG5jb25zdCBvblVuaGFuZGxlZFJlamVjdGlvbkVycm9yID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShldmVudC5yZWFzb24pO1xuICB0cmFjayhcInVuaGFuZGxlZF9yZWplY3Rpb25fZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICBlcnJvcl9uYW1lOiBldmVudC5yZWFzb25cbiAgfSk7XG59O1xuY29uc3Qgb25VbmNhdWdodEVycm9yID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShldmVudC5lcnJvcik7XG4gIHRyYWNrKFwidW5jYXVnaHRfZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICBlcnJvcl9uYW1lOiBldmVudC5lcnJvcj8ubmFtZSxcbiAgICBlcnJvcl9zdGFjazogZXZlbnQuZXJyb3I/LnN0YWNrLFxuICAgIGZpbGVfbmFtZTogZXZlbnQuZmlsZW5hbWUsXG4gICAgbGluZV9udW1iZXI6IGV2ZW50LmxpbmVubyxcbiAgICBjb2x1bW5fbnVtYmVyOiBldmVudC5jb2xub1xuICB9KTtcbn07XG5sZXQgcGFnZUxpZmVjeWNsZSA9IG51bGw7XG5jb25zdCBsb2FkUGFnZUxpZmVjeWNsZSA9IGFzeW5jICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IHBhZ2VMaWZlY3ljbGVNb2R1bGUgPSBhd2FpdCBpbXBvcnQoJy4vbGlmZWN5Y2xlLSF+ezAwNX1+LmpzJyk7XG4gICAgcGFnZUxpZmVjeWNsZSA9IHBhZ2VMaWZlY3ljbGVNb2R1bGUuZGVmYXVsdDtcbiAgICByZXR1cm4gcGFnZUxpZmVjeWNsZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBwYWdlLWxpZmVjeWNsZTpcIiwgZXJyb3IpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuY29uc3QgcGFnZUxpZmVjeWNsZVN0YXRlQ2hhbmdlSGFuZGxlciA9IChldmVudCkgPT4ge1xuICB0cmFjayhcInBhZ2VfbGlmZWN5Y2xlX3N0YXRlX2NoYW5nZVwiLCB7XG4gICAgb2xkX3N0YXRlOiBldmVudC5vbGRTdGF0ZSxcbiAgICBuZXdfc3RhdGU6IGV2ZW50Lm5ld1N0YXRlXG4gIH0pO1xuICBpZiAoZXZlbnQubmV3U3RhdGUgPT09IFwiaGlkZGVuXCIgfHwgZXZlbnQubmV3U3RhdGUgPT09IFwicGFzc2l2ZVwiKSB7XG4gICAgbWV0cmljc1F1ZXVlLnByb2Nlc3NRdWV1ZSgpO1xuICB9XG59O1xuY29uc3QgYXR0YWNoQW5hbHl0aWNzRXZlbnRMaXN0ZW5lcnMgPSBhc3luYyAoKSA9PiB7XG4gIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG9uVW5jYXVnaHRFcnJvcik7XG4gIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCBvblVuaGFuZGxlZFJlamVjdGlvbkVycm9yKTtcbiAgY29uc3QgbGlmZWN5Y2xlID0gYXdhaXQgbG9hZFBhZ2VMaWZlY3ljbGUoKTtcbiAgaWYgKGxpZmVjeWNsZSkge1xuICAgIGxpZmVjeWNsZS5hZGRFdmVudExpc3RlbmVyKFwic3RhdGVjaGFuZ2VcIiwgcGFnZUxpZmVjeWNsZVN0YXRlQ2hhbmdlSGFuZGxlcik7XG4gIH1cbn07XG5jb25zdCBkZXRhY2hBbmFseXRpY3NFdmVudExpc3RlbmVycyA9IGFzeW5jICgpID0+IHtcbiAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25VbmNhdWdodEVycm9yKTtcbiAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIG9uVW5oYW5kbGVkUmVqZWN0aW9uRXJyb3IpO1xuICBpZiAoZ2V0V2luZG93U2FmZSgpICYmIHBhZ2VMaWZlY3ljbGUpIHtcbiAgICBwYWdlTGlmZWN5Y2xlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzdGF0ZWNoYW5nZVwiLCBwYWdlTGlmZWN5Y2xlU3RhdGVDaGFuZ2VIYW5kbGVyKTtcbiAgfVxufTtcblxuY29uc3QgU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IG91ckN1cnJlbmN5VG9UaGVpcnMgPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59O1xuY29uc3QgZ2V0TG9hZGVkU3RyaXBlID0gYXN5bmMgKHB1Ymxpc2hhYmxlS2V5KSA9PiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgICAgYXdhaXQgc2xlZXAoNTAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1N0cmlwZUpzUHJlc2VudCgpKSB7XG4gICAgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmlwZSBKUyBub3QgZm91bmQuYCk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlID0gbmV3IFN0cmlwZShwdWJsaXNoYWJsZUtleSk7XG4gIHJldHVybiBzdHJpcGU7XG59O1xuY29uc3QgY3JlYXRlU3RyaXBlRWxlbWVudHMgPSBhc3luYyAoc3RyaXBlUHViS2V5LCBlbGVtZW50c09wdGlvbnMpID0+IHtcbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKHN0cmlwZVB1YktleSk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IHN0cmlwZS5lbGVtZW50cyhlbGVtZW50c09wdGlvbnMpLFxuICAgIHN0cmlwZVxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0ID0gYXN5bmMgKHN0cmlwZVB1YktleSwgdG90YWxBbW91bnRBdG9tLCBjdXJyZW5jeSwgaXNBbW91bnRQZW5kaW5nLCBpc0xpbmtPbmx5KSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICBjb25zdCBzdHJpcGVDdXJyZW5jeSA9IG91ckN1cnJlbmN5VG9UaGVpcnNbY3VycmVuY3kudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICBjb25zdCBwYXltZW50UmVxdWVzdCA9IHN0cmlwZS5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IHN0cmlwZUN1cnJlbmN5LFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiB0b3RhbEFtb3VudEF0b20sXG4gICAgICBwZW5kaW5nOiBpc0Ftb3VudFBlbmRpbmdcbiAgICB9LFxuICAgIC8vIHJlcXVlc3RTaGlwcGluZzogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiB0cnVlLFxuICAgIGRpc2FibGVXYWxsZXRzOiBbXSBcbiAgfSk7XG4gIHJldHVybiBwYXltZW50UmVxdWVzdDtcbn07XG5jb25zdCBzbGVlcCA9ICh0aW1lb3V0TXMpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0TXMpO1xuICB9KTtcbn07XG5jb25zdCBpc1N0cmlwZUpzUHJlc2VudCA9ICgpID0+IHtcbiAgcmV0dXJuIFwiU3RyaXBlXCIgaW4gd2luZG93O1xufTtcbmNvbnN0IHdhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kID0gYXN5bmMgKHBheW1lbnRSZXF1ZXN0KSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHBheW1lbnRSZXF1ZXN0Lm9uKFwicGF5bWVudG1ldGhvZFwiLCBhc3luYyAoZXZ0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgZXZ0KTtcbiAgICAgICAgcmVzb2x2ZShldnQpO1xuICAgICAgfSk7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcInRva2VuXCIsIGFzeW5jIChldnQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgZXZ0KTtcbiAgICAgIH0pO1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlgKSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBjb25maXJtU3RyaXBlUHJQTSA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtKSA9PiB7XG4gIGlmICghbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayB8fCAhbmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KG5leHRBY3Rpb25NZXRhZGF0YSl9YCk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogc3RyaXBlUG0ucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKGNvbmZpcm1SZXN1bHQuZXJyb3IpIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcImZhaWxcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtjb25maXJtUmVzdWx0LmVycm9yLm1lc3NhZ2UgPz8gYHVua25vd25gfWApO1xuICB9IGVsc2Uge1xuICAgIHN0cmlwZVBtLmNvbXBsZXRlKFwic3VjY2Vzc1wiKTtcbiAgfVxuICByZXR1cm4gY29uZmlybVJlc3VsdDtcbn07XG5jb25zdCBsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93ID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSkgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUobmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayk7XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBzdHJpcGUuY29uZmlybUNhcmRTZXR1cChuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkXG4gIH0pO1xuICBjb25zdCByZXN1bHRTdGF0dXMgPSBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5zdGF0dXM7XG4gIGlmIChyZXN1bHRTdGF0dXMgPT09IFwic3VjY2VlZGVkXCIpIHtcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcG1faWQpO1xuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gU2V0dXAgaW50ZW50IGNyZWF0ZWQ6XCIsIGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQpO1xuICB9IGVsc2UgaWYgKHJlc3VsdFN0YXR1cyA9PT0gXCJjYW5jZWxlZFwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlgKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHtjb25maXJtUmVzdWx0LmVycm9yPy5tZXNzYWdlID8/IGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQ/Lmxhc3Rfc2V0dXBfZXJyb3I/Lm1lc3NhZ2UgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICAgICk7XG4gIH1cbn07XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBVcGRhdGVzIHRvIHRoaXMgZmlsZSBzaG91bGQgYWxzbyBiZSByZXBsaWNhdGVkIHRvIEBvcGVudGVsZW1ldHJ5L2NvcmUgdG9vLlxuLyoqXG4gKiAtIGdsb2JhbFRoaXMgKE5ldyBzdGFuZGFyZClcbiAqIC0gc2VsZiAoV2lsbCByZXR1cm4gdGhlIGN1cnJlbnQgd2luZG93IGluc3RhbmNlIGZvciBzdXBwb3J0ZWQgYnJvd3NlcnMpXG4gKiAtIHdpbmRvdyAoZmFsbGJhY2sgZm9yIG9sZGVyIGJyb3dzZXIgaW1wbGVtZW50YXRpb25zKVxuICogLSBnbG9iYWwgKE5vZGVKUyBpbXBsZW1lbnRhdGlvbilcbiAqIC0gPG9iamVjdD4gKFdoZW4gYWxsIGVsc2UgZmFpbHMpXG4gKi9cbi8qKiBvbmx5IGdsb2JhbHMgdGhhdCBjb21tb24gdG8gbm9kZSBhbmQgYnJvd3NlcnMgYXJlIGFsbG93ZWQgKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBub2RlL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL2VzLWJ1aWx0aW5zLCBuby11bmRlZlxudmFyIF9nbG9iYWxUaGlzID0gdHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnXG4gICAgPyBnbG9iYWxUaGlzXG4gICAgOiB0eXBlb2Ygc2VsZiA9PT0gJ29iamVjdCdcbiAgICAgICAgPyBzZWxmXG4gICAgICAgIDogdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgID8gd2luZG93XG4gICAgICAgICAgICA6IHR5cGVvZiBnbG9iYWwgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgPyBnbG9iYWxcbiAgICAgICAgICAgICAgICA6IHt9O1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gdGhpcyBpcyBhdXRvZ2VuZXJhdGVkIGZpbGUsIHNlZSBzY3JpcHRzL3ZlcnNpb24tdXBkYXRlLmpzXG52YXIgVkVSU0lPTiA9ICcxLjkuMCc7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgcmUgPSAvXihcXGQrKVxcLihcXGQrKVxcLihcXGQrKSgtKC4rKSk/JC87XG4vKipcbiAqIENyZWF0ZSBhIGZ1bmN0aW9uIHRvIHRlc3QgYW4gQVBJIHZlcnNpb24gdG8gc2VlIGlmIGl0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgcHJvdmlkZWQgb3duVmVyc2lvbi5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gaGFzIHRoZSBmb2xsb3dpbmcgc2VtYW50aWNzOlxuICogLSBFeGFjdCBtYXRjaCBpcyBhbHdheXMgY29tcGF0aWJsZVxuICogLSBNYWpvciB2ZXJzaW9ucyBtdXN0IG1hdGNoIGV4YWN0bHlcbiAqICAgIC0gMS54IHBhY2thZ2UgY2Fubm90IHVzZSBnbG9iYWwgMi54IHBhY2thZ2VcbiAqICAgIC0gMi54IHBhY2thZ2UgY2Fubm90IHVzZSBnbG9iYWwgMS54IHBhY2thZ2VcbiAqIC0gVGhlIG1pbm9yIHZlcnNpb24gb2YgdGhlIEFQSSBtb2R1bGUgcmVxdWVzdGluZyBhY2Nlc3MgdG8gdGhlIGdsb2JhbCBBUEkgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG1pbm9yIHZlcnNpb24gb2YgdGhpcyBBUElcbiAqICAgIC0gMS4zIHBhY2thZ2UgbWF5IHVzZSAxLjQgZ2xvYmFsIGJlY2F1c2UgdGhlIGxhdGVyIGdsb2JhbCBjb250YWlucyBhbGwgZnVuY3Rpb25zIDEuMyBleHBlY3RzXG4gKiAgICAtIDEuNCBwYWNrYWdlIG1heSBOT1QgdXNlIDEuMyBnbG9iYWwgYmVjYXVzZSBpdCBtYXkgdHJ5IHRvIGNhbGwgZnVuY3Rpb25zIHdoaWNoIGRvbid0IGV4aXN0IG9uIDEuM1xuICogLSBJZiB0aGUgbWFqb3IgdmVyc2lvbiBpcyAwLCB0aGUgbWlub3IgdmVyc2lvbiBpcyB0cmVhdGVkIGFzIHRoZSBtYWpvciBhbmQgdGhlIHBhdGNoIGlzIHRyZWF0ZWQgYXMgdGhlIG1pbm9yXG4gKiAtIFBhdGNoIGFuZCBidWlsZCB0YWcgZGlmZmVyZW5jZXMgYXJlIG5vdCBjb25zaWRlcmVkIGF0IHRoaXMgdGltZVxuICpcbiAqIEBwYXJhbSBvd25WZXJzaW9uIHZlcnNpb24gd2hpY2ggc2hvdWxkIGJlIGNoZWNrZWQgYWdhaW5zdFxuICovXG5mdW5jdGlvbiBfbWFrZUNvbXBhdGliaWxpdHlDaGVjayhvd25WZXJzaW9uKSB7XG4gICAgdmFyIGFjY2VwdGVkVmVyc2lvbnMgPSBuZXcgU2V0KFtvd25WZXJzaW9uXSk7XG4gICAgdmFyIHJlamVjdGVkVmVyc2lvbnMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIG15VmVyc2lvbk1hdGNoID0gb3duVmVyc2lvbi5tYXRjaChyZSk7XG4gICAgaWYgKCFteVZlcnNpb25NYXRjaCkge1xuICAgICAgICAvLyB3ZSBjYW5ub3QgZ3VhcmFudGVlIGNvbXBhdGliaWxpdHkgc28gd2UgYWx3YXlzIHJldHVybiBub29wXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBmYWxzZTsgfTtcbiAgICB9XG4gICAgdmFyIG93blZlcnNpb25QYXJzZWQgPSB7XG4gICAgICAgIG1ham9yOiArbXlWZXJzaW9uTWF0Y2hbMV0sXG4gICAgICAgIG1pbm9yOiArbXlWZXJzaW9uTWF0Y2hbMl0sXG4gICAgICAgIHBhdGNoOiArbXlWZXJzaW9uTWF0Y2hbM10sXG4gICAgICAgIHByZXJlbGVhc2U6IG15VmVyc2lvbk1hdGNoWzRdLFxuICAgIH07XG4gICAgLy8gaWYgb3duVmVyc2lvbiBoYXMgYSBwcmVyZWxlYXNlIHRhZywgdmVyc2lvbnMgbXVzdCBtYXRjaCBleGFjdGx5XG4gICAgaWYgKG93blZlcnNpb25QYXJzZWQucHJlcmVsZWFzZSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBpc0V4YWN0bWF0Y2goZ2xvYmFsVmVyc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbFZlcnNpb24gPT09IG93blZlcnNpb247XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9yZWplY3Qodikge1xuICAgICAgICByZWplY3RlZFZlcnNpb25zLmFkZCh2KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBfYWNjZXB0KHYpIHtcbiAgICAgICAgYWNjZXB0ZWRWZXJzaW9ucy5hZGQodik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gaXNDb21wYXRpYmxlKGdsb2JhbFZlcnNpb24pIHtcbiAgICAgICAgaWYgKGFjY2VwdGVkVmVyc2lvbnMuaGFzKGdsb2JhbFZlcnNpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVqZWN0ZWRWZXJzaW9ucy5oYXMoZ2xvYmFsVmVyc2lvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZ2xvYmFsVmVyc2lvbk1hdGNoID0gZ2xvYmFsVmVyc2lvbi5tYXRjaChyZSk7XG4gICAgICAgIGlmICghZ2xvYmFsVmVyc2lvbk1hdGNoKSB7XG4gICAgICAgICAgICAvLyBjYW5ub3QgcGFyc2Ugb3RoZXIgdmVyc2lvblxuICAgICAgICAgICAgLy8gd2UgY2Fubm90IGd1YXJhbnRlZSBjb21wYXRpYmlsaXR5IHNvIHdlIGFsd2F5cyBub29wXG4gICAgICAgICAgICByZXR1cm4gX3JlamVjdChnbG9iYWxWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZ2xvYmFsVmVyc2lvblBhcnNlZCA9IHtcbiAgICAgICAgICAgIG1ham9yOiArZ2xvYmFsVmVyc2lvbk1hdGNoWzFdLFxuICAgICAgICAgICAgbWlub3I6ICtnbG9iYWxWZXJzaW9uTWF0Y2hbMl0sXG4gICAgICAgICAgICBwYXRjaDogK2dsb2JhbFZlcnNpb25NYXRjaFszXSxcbiAgICAgICAgICAgIHByZXJlbGVhc2U6IGdsb2JhbFZlcnNpb25NYXRjaFs0XSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gaWYgZ2xvYmFsVmVyc2lvbiBoYXMgYSBwcmVyZWxlYXNlIHRhZywgdmVyc2lvbnMgbXVzdCBtYXRjaCBleGFjdGx5XG4gICAgICAgIGlmIChnbG9iYWxWZXJzaW9uUGFyc2VkLnByZXJlbGVhc2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbWFqb3IgdmVyc2lvbnMgbXVzdCBtYXRjaFxuICAgICAgICBpZiAob3duVmVyc2lvblBhcnNlZC5tYWpvciAhPT0gZ2xvYmFsVmVyc2lvblBhcnNlZC5tYWpvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG93blZlcnNpb25QYXJzZWQubWFqb3IgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLm1pbm9yID09PSBnbG9iYWxWZXJzaW9uUGFyc2VkLm1pbm9yICYmXG4gICAgICAgICAgICAgICAgb3duVmVyc2lvblBhcnNlZC5wYXRjaCA8PSBnbG9iYWxWZXJzaW9uUGFyc2VkLnBhdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9hY2NlcHQoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX3JlamVjdChnbG9iYWxWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3duVmVyc2lvblBhcnNlZC5taW5vciA8PSBnbG9iYWxWZXJzaW9uUGFyc2VkLm1pbm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gX2FjY2VwdChnbG9iYWxWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3JlamVjdChnbG9iYWxWZXJzaW9uKTtcbiAgICB9O1xufVxuLyoqXG4gKiBUZXN0IGFuIEFQSSB2ZXJzaW9uIHRvIHNlZSBpZiBpdCBpcyBjb21wYXRpYmxlIHdpdGggdGhpcyBBUEkuXG4gKlxuICogLSBFeGFjdCBtYXRjaCBpcyBhbHdheXMgY29tcGF0aWJsZVxuICogLSBNYWpvciB2ZXJzaW9ucyBtdXN0IG1hdGNoIGV4YWN0bHlcbiAqICAgIC0gMS54IHBhY2thZ2UgY2Fubm90IHVzZSBnbG9iYWwgMi54IHBhY2thZ2VcbiAqICAgIC0gMi54IHBhY2thZ2UgY2Fubm90IHVzZSBnbG9iYWwgMS54IHBhY2thZ2VcbiAqIC0gVGhlIG1pbm9yIHZlcnNpb24gb2YgdGhlIEFQSSBtb2R1bGUgcmVxdWVzdGluZyBhY2Nlc3MgdG8gdGhlIGdsb2JhbCBBUEkgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG1pbm9yIHZlcnNpb24gb2YgdGhpcyBBUElcbiAqICAgIC0gMS4zIHBhY2thZ2UgbWF5IHVzZSAxLjQgZ2xvYmFsIGJlY2F1c2UgdGhlIGxhdGVyIGdsb2JhbCBjb250YWlucyBhbGwgZnVuY3Rpb25zIDEuMyBleHBlY3RzXG4gKiAgICAtIDEuNCBwYWNrYWdlIG1heSBOT1QgdXNlIDEuMyBnbG9iYWwgYmVjYXVzZSBpdCBtYXkgdHJ5IHRvIGNhbGwgZnVuY3Rpb25zIHdoaWNoIGRvbid0IGV4aXN0IG9uIDEuM1xuICogLSBJZiB0aGUgbWFqb3IgdmVyc2lvbiBpcyAwLCB0aGUgbWlub3IgdmVyc2lvbiBpcyB0cmVhdGVkIGFzIHRoZSBtYWpvciBhbmQgdGhlIHBhdGNoIGlzIHRyZWF0ZWQgYXMgdGhlIG1pbm9yXG4gKiAtIFBhdGNoIGFuZCBidWlsZCB0YWcgZGlmZmVyZW5jZXMgYXJlIG5vdCBjb25zaWRlcmVkIGF0IHRoaXMgdGltZVxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIHZlcnNpb24gb2YgdGhlIEFQSSByZXF1ZXN0aW5nIGFuIGluc3RhbmNlIG9mIHRoZSBnbG9iYWwgQVBJXG4gKi9cbnZhciBpc0NvbXBhdGlibGUgPSBfbWFrZUNvbXBhdGliaWxpdHlDaGVjayhWRVJTSU9OKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBtYWpvciA9IFZFUlNJT04uc3BsaXQoJy4nKVswXTtcbnZhciBHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZID0gU3ltYm9sLmZvcihcIm9wZW50ZWxlbWV0cnkuanMuYXBpLlwiICsgbWFqb3IpO1xudmFyIF9nbG9iYWwgPSBfZ2xvYmFsVGhpcztcbmZ1bmN0aW9uIHJlZ2lzdGVyR2xvYmFsKHR5cGUsIGluc3RhbmNlLCBkaWFnLCBhbGxvd092ZXJyaWRlKSB7XG4gICAgdmFyIF9hO1xuICAgIGlmIChhbGxvd092ZXJyaWRlID09PSB2b2lkIDApIHsgYWxsb3dPdmVycmlkZSA9IGZhbHNlOyB9XG4gICAgdmFyIGFwaSA9IChfZ2xvYmFsW0dMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVldID0gKF9hID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge1xuICAgICAgICB2ZXJzaW9uOiBWRVJTSU9OLFxuICAgIH0pO1xuICAgIGlmICghYWxsb3dPdmVycmlkZSAmJiBhcGlbdHlwZV0pIHtcbiAgICAgICAgLy8gYWxyZWFkeSByZWdpc3RlcmVkIGFuIEFQSSBvZiB0aGlzIHR5cGVcbiAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcIkBvcGVudGVsZW1ldHJ5L2FwaTogQXR0ZW1wdGVkIGR1cGxpY2F0ZSByZWdpc3RyYXRpb24gb2YgQVBJOiBcIiArIHR5cGUpO1xuICAgICAgICBkaWFnLmVycm9yKGVyci5zdGFjayB8fCBlcnIubWVzc2FnZSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGFwaS52ZXJzaW9uICE9PSBWRVJTSU9OKSB7XG4gICAgICAgIC8vIEFsbCByZWdpc3RlcmVkIEFQSXMgbXVzdCBiZSBvZiB0aGUgc2FtZSB2ZXJzaW9uIGV4YWN0bHlcbiAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcIkBvcGVudGVsZW1ldHJ5L2FwaTogUmVnaXN0cmF0aW9uIG9mIHZlcnNpb24gdlwiICsgYXBpLnZlcnNpb24gKyBcIiBmb3IgXCIgKyB0eXBlICsgXCIgZG9lcyBub3QgbWF0Y2ggcHJldmlvdXNseSByZWdpc3RlcmVkIEFQSSB2XCIgKyBWRVJTSU9OKTtcbiAgICAgICAgZGlhZy5lcnJvcihlcnIuc3RhY2sgfHwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGFwaVt0eXBlXSA9IGluc3RhbmNlO1xuICAgIGRpYWcuZGVidWcoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFJlZ2lzdGVyZWQgYSBnbG9iYWwgZm9yIFwiICsgdHlwZSArIFwiIHZcIiArIFZFUlNJT04gKyBcIi5cIik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBnZXRHbG9iYWwodHlwZSkge1xuICAgIHZhciBfYSwgX2I7XG4gICAgdmFyIGdsb2JhbFZlcnNpb24gPSAoX2EgPSBfZ2xvYmFsW0dMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVldKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmVyc2lvbjtcbiAgICBpZiAoIWdsb2JhbFZlcnNpb24gfHwgIWlzQ29tcGF0aWJsZShnbG9iYWxWZXJzaW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiAoX2IgPSBfZ2xvYmFsW0dMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVldKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbdHlwZV07XG59XG5mdW5jdGlvbiB1bnJlZ2lzdGVyR2xvYmFsKHR5cGUsIGRpYWcpIHtcbiAgICBkaWFnLmRlYnVnKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBVbnJlZ2lzdGVyaW5nIGEgZ2xvYmFsIGZvciBcIiArIHR5cGUgKyBcIiB2XCIgKyBWRVJTSU9OICsgXCIuXCIpO1xuICAgIHZhciBhcGkgPSBfZ2xvYmFsW0dMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVldO1xuICAgIGlmIChhcGkpIHtcbiAgICAgICAgZGVsZXRlIGFwaVt0eXBlXTtcbiAgICB9XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19yZWFkJDMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSQzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG4vKipcbiAqIENvbXBvbmVudCBMb2dnZXIgd2hpY2ggaXMgbWVhbnQgdG8gYmUgdXNlZCBhcyBwYXJ0IG9mIGFueSBjb21wb25lbnQgd2hpY2hcbiAqIHdpbGwgYWRkIGF1dG9tYXRpY2FsbHkgYWRkaXRpb25hbCBuYW1lc3BhY2UgaW4gZnJvbnQgb2YgdGhlIGxvZyBtZXNzYWdlLlxuICogSXQgd2lsbCB0aGVuIGZvcndhcmQgYWxsIG1lc3NhZ2UgdG8gZ2xvYmFsIGRpYWcgbG9nZ2VyXG4gKiBAZXhhbXBsZVxuICogY29uc3QgY0xvZ2dlciA9IGRpYWcuY3JlYXRlQ29tcG9uZW50TG9nZ2VyKHsgbmFtZXNwYWNlOiAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWh0dHAnIH0pO1xuICogY0xvZ2dlci5kZWJ1ZygndGVzdCcpO1xuICogLy8gQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWh0dHAgdGVzdFxuICovXG52YXIgRGlhZ0NvbXBvbmVudExvZ2dlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEaWFnQ29tcG9uZW50TG9nZ2VyKHByb3BzKSB7XG4gICAgICAgIHRoaXMuX25hbWVzcGFjZSA9IHByb3BzLm5hbWVzcGFjZSB8fCAnRGlhZ0NvbXBvbmVudExvZ2dlcic7XG4gICAgfVxuICAgIERpYWdDb21wb25lbnRMb2dnZXIucHJvdG90eXBlLmRlYnVnID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgnZGVidWcnLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvZ1Byb3h5KCdlcnJvcicsIHRoaXMuX25hbWVzcGFjZSwgYXJncyk7XG4gICAgfTtcbiAgICBEaWFnQ29tcG9uZW50TG9nZ2VyLnByb3RvdHlwZS5pbmZvID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgnaW5mbycsIHRoaXMuX25hbWVzcGFjZSwgYXJncyk7XG4gICAgfTtcbiAgICBEaWFnQ29tcG9uZW50TG9nZ2VyLnByb3RvdHlwZS53YXJuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgnd2FybicsIHRoaXMuX25hbWVzcGFjZSwgYXJncyk7XG4gICAgfTtcbiAgICBEaWFnQ29tcG9uZW50TG9nZ2VyLnByb3RvdHlwZS52ZXJib3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgndmVyYm9zZScsIHRoaXMuX25hbWVzcGFjZSwgYXJncyk7XG4gICAgfTtcbiAgICByZXR1cm4gRGlhZ0NvbXBvbmVudExvZ2dlcjtcbn0oKSk7XG5mdW5jdGlvbiBsb2dQcm94eShmdW5jTmFtZSwgbmFtZXNwYWNlLCBhcmdzKSB7XG4gICAgdmFyIGxvZ2dlciA9IGdldEdsb2JhbCgnZGlhZycpO1xuICAgIC8vIHNob3J0Y3V0IGlmIGxvZ2dlciBub3Qgc2V0XG4gICAgaWYgKCFsb2dnZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhcmdzLnVuc2hpZnQobmFtZXNwYWNlKTtcbiAgICByZXR1cm4gbG9nZ2VyW2Z1bmNOYW1lXS5hcHBseShsb2dnZXIsIF9fc3ByZWFkQXJyYXkkMyhbXSwgX19yZWFkJDMoYXJncyksIGZhbHNlKSk7XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGF2YWlsYWJsZSBpbnRlcm5hbCBsb2dnaW5nIGxldmVscyBmb3IgdGhlIGRpYWdub3N0aWMgbG9nZ2VyLCB0aGUgbnVtZXJpYyB2YWx1ZXNcbiAqIG9mIHRoZSBsZXZlbHMgYXJlIGRlZmluZWQgdG8gbWF0Y2ggdGhlIG9yaWdpbmFsIHZhbHVlcyBmcm9tIHRoZSBpbml0aWFsIExvZ0xldmVsIHRvIGF2b2lkXG4gKiBjb21wYXRpYmlsaXR5L21pZ3JhdGlvbiBpc3N1ZXMgZm9yIGFueSBpbXBsZW1lbnRhdGlvbiB0aGF0IGFzc3VtZSB0aGUgbnVtZXJpYyBvcmRlcmluZy5cbiAqL1xudmFyIERpYWdMb2dMZXZlbDtcbihmdW5jdGlvbiAoRGlhZ0xvZ0xldmVsKSB7XG4gICAgLyoqIERpYWdub3N0aWMgTG9nZ2luZyBsZXZlbCBzZXR0aW5nIHRvIGRpc2FibGUgYWxsIGxvZ2dpbmcgKGV4Y2VwdCBhbmQgZm9yY2VkIGxvZ3MpICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIk5PTkVcIl0gPSAwXSA9IFwiTk9ORVwiO1xuICAgIC8qKiBJZGVudGlmaWVzIGFuIGVycm9yIHNjZW5hcmlvICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIkVSUk9SXCJdID0gMzBdID0gXCJFUlJPUlwiO1xuICAgIC8qKiBJZGVudGlmaWVzIGEgd2FybmluZyBzY2VuYXJpbyAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJXQVJOXCJdID0gNTBdID0gXCJXQVJOXCI7XG4gICAgLyoqIEdlbmVyYWwgaW5mb3JtYXRpb25hbCBsb2cgbWVzc2FnZSAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJJTkZPXCJdID0gNjBdID0gXCJJTkZPXCI7XG4gICAgLyoqIEdlbmVyYWwgZGVidWcgbG9nIG1lc3NhZ2UgKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiREVCVUdcIl0gPSA3MF0gPSBcIkRFQlVHXCI7XG4gICAgLyoqXG4gICAgICogRGV0YWlsZWQgdHJhY2UgbGV2ZWwgbG9nZ2luZyBzaG91bGQgb25seSBiZSB1c2VkIGZvciBkZXZlbG9wbWVudCwgc2hvdWxkIG9ubHkgYmUgc2V0XG4gICAgICogaW4gYSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC5cbiAgICAgKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiVkVSQk9TRVwiXSA9IDgwXSA9IFwiVkVSQk9TRVwiO1xuICAgIC8qKiBVc2VkIHRvIHNldCB0aGUgbG9nZ2luZyBsZXZlbCB0byBpbmNsdWRlIGFsbCBsb2dnaW5nICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIkFMTFwiXSA9IDk5OTldID0gXCJBTExcIjtcbn0pKERpYWdMb2dMZXZlbCB8fCAoRGlhZ0xvZ0xldmVsID0ge30pKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlcihtYXhMZXZlbCwgbG9nZ2VyKSB7XG4gICAgaWYgKG1heExldmVsIDwgRGlhZ0xvZ0xldmVsLk5PTkUpIHtcbiAgICAgICAgbWF4TGV2ZWwgPSBEaWFnTG9nTGV2ZWwuTk9ORTtcbiAgICB9XG4gICAgZWxzZSBpZiAobWF4TGV2ZWwgPiBEaWFnTG9nTGV2ZWwuQUxMKSB7XG4gICAgICAgIG1heExldmVsID0gRGlhZ0xvZ0xldmVsLkFMTDtcbiAgICB9XG4gICAgLy8gSW4gY2FzZSB0aGUgbG9nZ2VyIGlzIG51bGwgb3IgdW5kZWZpbmVkXG4gICAgbG9nZ2VyID0gbG9nZ2VyIHx8IHt9O1xuICAgIGZ1bmN0aW9uIF9maWx0ZXJGdW5jKGZ1bmNOYW1lLCB0aGVMZXZlbCkge1xuICAgICAgICB2YXIgdGhlRnVuYyA9IGxvZ2dlcltmdW5jTmFtZV07XG4gICAgICAgIGlmICh0eXBlb2YgdGhlRnVuYyA9PT0gJ2Z1bmN0aW9uJyAmJiBtYXhMZXZlbCA+PSB0aGVMZXZlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoZUZ1bmMuYmluZChsb2dnZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGVycm9yOiBfZmlsdGVyRnVuYygnZXJyb3InLCBEaWFnTG9nTGV2ZWwuRVJST1IpLFxuICAgICAgICB3YXJuOiBfZmlsdGVyRnVuYygnd2FybicsIERpYWdMb2dMZXZlbC5XQVJOKSxcbiAgICAgICAgaW5mbzogX2ZpbHRlckZ1bmMoJ2luZm8nLCBEaWFnTG9nTGV2ZWwuSU5GTyksXG4gICAgICAgIGRlYnVnOiBfZmlsdGVyRnVuYygnZGVidWcnLCBEaWFnTG9nTGV2ZWwuREVCVUcpLFxuICAgICAgICB2ZXJib3NlOiBfZmlsdGVyRnVuYygndmVyYm9zZScsIERpYWdMb2dMZXZlbC5WRVJCT1NFKSxcbiAgICB9O1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fcmVhZCQyID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkkMiA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xudmFyIEFQSV9OQU1FJDIgPSAnZGlhZyc7XG4vKipcbiAqIFNpbmdsZXRvbiBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIE9wZW5UZWxlbWV0cnkgaW50ZXJuYWxcbiAqIGRpYWdub3N0aWMgQVBJXG4gKi9cbnZhciBEaWFnQVBJID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIFByaXZhdGUgaW50ZXJuYWwgY29uc3RydWN0b3JcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIERpYWdBUEkoKSB7XG4gICAgICAgIGZ1bmN0aW9uIF9sb2dQcm94eShmdW5jTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGxvZ2dlciA9IGdldEdsb2JhbCgnZGlhZycpO1xuICAgICAgICAgICAgICAgIC8vIHNob3J0Y3V0IGlmIGxvZ2dlciBub3Qgc2V0XG4gICAgICAgICAgICAgICAgaWYgKCFsb2dnZXIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9nZ2VyW2Z1bmNOYW1lXS5hcHBseShsb2dnZXIsIF9fc3ByZWFkQXJyYXkkMihbXSwgX19yZWFkJDIoYXJncyksIGZhbHNlKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFVzaW5nIHNlbGYgbG9jYWwgdmFyaWFibGUgZm9yIG1pbmlmaWNhdGlvbiBwdXJwb3NlcyBhcyAndGhpcycgY2Fubm90IGJlIG1pbmlmaWVkXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgLy8gRGlhZ0FQSSBzcGVjaWZpYyBmdW5jdGlvbnNcbiAgICAgICAgdmFyIHNldExvZ2dlciA9IGZ1bmN0aW9uIChsb2dnZXIsIG9wdGlvbnNPckxvZ0xldmVsKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgICAgIGlmIChvcHRpb25zT3JMb2dMZXZlbCA9PT0gdm9pZCAwKSB7IG9wdGlvbnNPckxvZ0xldmVsID0geyBsb2dMZXZlbDogRGlhZ0xvZ0xldmVsLklORk8gfTsgfVxuICAgICAgICAgICAgaWYgKGxvZ2dlciA9PT0gc2VsZikge1xuICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzbid0IG11Y2ggd2UgY2FuIGRvIGhlcmUuXG4gICAgICAgICAgICAgICAgLy8gTG9nZ2luZyB0byB0aGUgY29uc29sZSBtaWdodCBicmVhayB0aGUgdXNlciBhcHBsaWNhdGlvbi5cbiAgICAgICAgICAgICAgICAvLyBUcnkgdG8gbG9nIHRvIHNlbGYuIElmIGEgbG9nZ2VyIHdhcyBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgaXQgd2lsbCByZWNlaXZlIHRoZSBsb2cuXG4gICAgICAgICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignQ2Fubm90IHVzZSBkaWFnIGFzIHRoZSBsb2dnZXIgZm9yIGl0c2VsZi4gUGxlYXNlIHVzZSBhIERpYWdMb2dnZXIgaW1wbGVtZW50YXRpb24gbGlrZSBDb25zb2xlRGlhZ0xvZ2dlciBvciBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbicpO1xuICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoKF9hID0gZXJyLnN0YWNrKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBlcnIubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zT3JMb2dMZXZlbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zT3JMb2dMZXZlbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nTGV2ZWw6IG9wdGlvbnNPckxvZ0xldmVsLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgb2xkTG9nZ2VyID0gZ2V0R2xvYmFsKCdkaWFnJyk7XG4gICAgICAgICAgICB2YXIgbmV3TG9nZ2VyID0gY3JlYXRlTG9nTGV2ZWxEaWFnTG9nZ2VyKChfYiA9IG9wdGlvbnNPckxvZ0xldmVsLmxvZ0xldmVsKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBEaWFnTG9nTGV2ZWwuSU5GTywgbG9nZ2VyKTtcbiAgICAgICAgICAgIC8vIFRoZXJlIGFscmVhZHkgaXMgYW4gbG9nZ2VyIHJlZ2lzdGVyZWQuIFdlJ2xsIGxldCBpdCBrbm93IGJlZm9yZSBvdmVyd3JpdGluZyBpdC5cbiAgICAgICAgICAgIGlmIChvbGRMb2dnZXIgJiYgIW9wdGlvbnNPckxvZ0xldmVsLnN1cHByZXNzT3ZlcnJpZGVNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YWNrID0gKF9jID0gbmV3IEVycm9yKCkuc3RhY2spICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6ICc8ZmFpbGVkIHRvIGdlbmVyYXRlIHN0YWNrdHJhY2U+JztcbiAgICAgICAgICAgICAgICBvbGRMb2dnZXIud2FybihcIkN1cnJlbnQgbG9nZ2VyIHdpbGwgYmUgb3ZlcndyaXR0ZW4gZnJvbSBcIiArIHN0YWNrKTtcbiAgICAgICAgICAgICAgICBuZXdMb2dnZXIud2FybihcIkN1cnJlbnQgbG9nZ2VyIHdpbGwgb3ZlcndyaXRlIG9uZSBhbHJlYWR5IHJlZ2lzdGVyZWQgZnJvbSBcIiArIHN0YWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZWdpc3Rlckdsb2JhbCgnZGlhZycsIG5ld0xvZ2dlciwgc2VsZiwgdHJ1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIHNlbGYuc2V0TG9nZ2VyID0gc2V0TG9nZ2VyO1xuICAgICAgICBzZWxmLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB1bnJlZ2lzdGVyR2xvYmFsKEFQSV9OQU1FJDIsIHNlbGYpO1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLmNyZWF0ZUNvbXBvbmVudExvZ2dlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERpYWdDb21wb25lbnRMb2dnZXIob3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgICAgIHNlbGYudmVyYm9zZSA9IF9sb2dQcm94eSgndmVyYm9zZScpO1xuICAgICAgICBzZWxmLmRlYnVnID0gX2xvZ1Byb3h5KCdkZWJ1ZycpO1xuICAgICAgICBzZWxmLmluZm8gPSBfbG9nUHJveHkoJ2luZm8nKTtcbiAgICAgICAgc2VsZi53YXJuID0gX2xvZ1Byb3h5KCd3YXJuJyk7XG4gICAgICAgIHNlbGYuZXJyb3IgPSBfbG9nUHJveHkoJ2Vycm9yJyk7XG4gICAgfVxuICAgIC8qKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRGlhZ0FQSSBBUEkgKi9cbiAgICBEaWFnQVBJLmluc3RhbmNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBEaWFnQVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH07XG4gICAgcmV0dXJuIERpYWdBUEk7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqIEdldCBhIGtleSB0byB1bmlxdWVseSBpZGVudGlmeSBhIGNvbnRleHQgdmFsdWUgKi9cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHRLZXkoZGVzY3JpcHRpb24pIHtcbiAgICAvLyBUaGUgc3BlY2lmaWNhdGlvbiBzdGF0ZXMgdGhhdCBmb3IgdGhlIHNhbWUgaW5wdXQsIG11bHRpcGxlIGNhbGxzIHNob3VsZFxuICAgIC8vIHJldHVybiBkaWZmZXJlbnQga2V5cy4gRHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhlIEpTIGRlcGVuZGVuY3kgbWFuYWdlbWVudFxuICAgIC8vIHN5c3RlbSwgdGhpcyBjcmVhdGVzIHByb2JsZW1zIHdoZXJlIG11bHRpcGxlIHZlcnNpb25zIG9mIHNvbWUgcGFja2FnZVxuICAgIC8vIGNvdWxkIGhvbGQgZGlmZmVyZW50IGtleXMgZm9yIHRoZSBzYW1lIHByb3BlcnR5LlxuICAgIC8vXG4gICAgLy8gVGhlcmVmb3JlLCB3ZSB1c2UgU3ltYm9sLmZvciB3aGljaCByZXR1cm5zIHRoZSBzYW1lIGtleSBmb3IgdGhlIHNhbWUgaW5wdXQuXG4gICAgcmV0dXJuIFN5bWJvbC5mb3IoZGVzY3JpcHRpb24pO1xufVxudmFyIEJhc2VDb250ZXh0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdCBhIG5ldyBjb250ZXh0IHdoaWNoIGluaGVyaXRzIHZhbHVlcyBmcm9tIGFuIG9wdGlvbmFsIHBhcmVudCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmVudENvbnRleHQgYSBjb250ZXh0IGZyb20gd2hpY2ggdG8gaW5oZXJpdCB2YWx1ZXNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBCYXNlQ29udGV4dChwYXJlbnRDb250ZXh0KSB7XG4gICAgICAgIC8vIGZvciBtaW5pZmljYXRpb25cbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBzZWxmLl9jdXJyZW50Q29udGV4dCA9IHBhcmVudENvbnRleHQgPyBuZXcgTWFwKHBhcmVudENvbnRleHQpIDogbmV3IE1hcCgpO1xuICAgICAgICBzZWxmLmdldFZhbHVlID0gZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gc2VsZi5fY3VycmVudENvbnRleHQuZ2V0KGtleSk7IH07XG4gICAgICAgIHNlbGYuc2V0VmFsdWUgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgQmFzZUNvbnRleHQoc2VsZi5fY3VycmVudENvbnRleHQpO1xuICAgICAgICAgICAgY29udGV4dC5fY3VycmVudENvbnRleHQuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIH07XG4gICAgICAgIHNlbGYuZGVsZXRlVmFsdWUgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBCYXNlQ29udGV4dChzZWxmLl9jdXJyZW50Q29udGV4dCk7XG4gICAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50Q29udGV4dC5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gQmFzZUNvbnRleHQ7XG59KCkpO1xuLyoqIFRoZSByb290IGNvbnRleHQgaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXJlbnQgY29udGV4dCB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBjb250ZXh0ICovXG52YXIgUk9PVF9DT05URVhUID0gbmV3IEJhc2VDb250ZXh0KCk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19yZWFkJDEgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSQxID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG52YXIgTm9vcENvbnRleHRNYW5hZ2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BDb250ZXh0TWFuYWdlcigpIHtcbiAgICB9XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS5hY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBST09UX0NPTlRFWFQ7XG4gICAgfTtcbiAgICBOb29wQ29udGV4dE1hbmFnZXIucHJvdG90eXBlLndpdGggPSBmdW5jdGlvbiAoX2NvbnRleHQsIGZuLCB0aGlzQXJnKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMzsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gM10gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmbi5jYWxsLmFwcGx5KGZuLCBfX3NwcmVhZEFycmF5JDEoW3RoaXNBcmddLCBfX3JlYWQkMShhcmdzKSwgZmFsc2UpKTtcbiAgICB9O1xuICAgIE5vb3BDb250ZXh0TWFuYWdlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChfY29udGV4dCwgdGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfTtcbiAgICBOb29wQ29udGV4dE1hbmFnZXIucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBOb29wQ29udGV4dE1hbmFnZXIucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIE5vb3BDb250ZXh0TWFuYWdlcjtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19yZWFkID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufTtcbnZhciBBUElfTkFNRSQxID0gJ2NvbnRleHQnO1xudmFyIE5PT1BfQ09OVEVYVF9NQU5BR0VSID0gbmV3IE5vb3BDb250ZXh0TWFuYWdlcigpO1xuLyoqXG4gKiBTaW5nbGV0b24gb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSBPcGVuVGVsZW1ldHJ5IENvbnRleHQgQVBJXG4gKi9cbnZhciBDb250ZXh0QVBJID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKiBFbXB0eSBwcml2YXRlIGNvbnN0cnVjdG9yIHByZXZlbnRzIGVuZCB1c2VycyBmcm9tIGNvbnN0cnVjdGluZyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgQVBJICovXG4gICAgZnVuY3Rpb24gQ29udGV4dEFQSSgpIHtcbiAgICB9XG4gICAgLyoqIEdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBDb250ZXh0IEFQSSAqL1xuICAgIENvbnRleHRBUEkuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IENvbnRleHRBUEkoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGN1cnJlbnQgY29udGV4dCBtYW5hZ2VyLlxuICAgICAqXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgY29udGV4dCBtYW5hZ2VyIHdhcyBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCwgZWxzZSBmYWxzZVxuICAgICAqL1xuICAgIENvbnRleHRBUEkucHJvdG90eXBlLnNldEdsb2JhbENvbnRleHRNYW5hZ2VyID0gZnVuY3Rpb24gKGNvbnRleHRNYW5hZ2VyKSB7XG4gICAgICAgIHJldHVybiByZWdpc3Rlckdsb2JhbChBUElfTkFNRSQxLCBjb250ZXh0TWFuYWdlciwgRGlhZ0FQSS5pbnN0YW5jZSgpKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEdldCB0aGUgY3VycmVudGx5IGFjdGl2ZSBjb250ZXh0XG4gICAgICovXG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5hY3RpdmUoKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEV4ZWN1dGUgYSBmdW5jdGlvbiB3aXRoIGFuIGFjdGl2ZSBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIGJlIGFjdGl2ZSBkdXJpbmcgZnVuY3Rpb24gZXhlY3V0aW9uXG4gICAgICogQHBhcmFtIGZuIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgaW4gYSBjb250ZXh0XG4gICAgICogQHBhcmFtIHRoaXNBcmcgb3B0aW9uYWwgcmVjZWl2ZXIgdG8gYmUgdXNlZCBmb3IgY2FsbGluZyBmblxuICAgICAqIEBwYXJhbSBhcmdzIG9wdGlvbmFsIGFyZ3VtZW50cyBmb3J3YXJkZWQgdG8gZm5cbiAgICAgKi9cbiAgICBDb250ZXh0QVBJLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24gKGNvbnRleHQsIGZuLCB0aGlzQXJnKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAzOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAzXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkpLndpdGguYXBwbHkoX2EsIF9fc3ByZWFkQXJyYXkoW2NvbnRleHQsIGZuLCB0aGlzQXJnXSwgX19yZWFkKGFyZ3MpLCBmYWxzZSkpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQmluZCBhIGNvbnRleHQgdG8gYSB0YXJnZXQgZnVuY3Rpb24gb3IgZXZlbnQgZW1pdHRlclxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBiaW5kIHRvIHRoZSBldmVudCBlbWl0dGVyIG9yIGZ1bmN0aW9uLiBEZWZhdWx0cyB0byB0aGUgY3VycmVudGx5IGFjdGl2ZSBjb250ZXh0XG4gICAgICogQHBhcmFtIHRhcmdldCBmdW5jdGlvbiBvciBldmVudCBlbWl0dGVyIHRvIGJpbmRcbiAgICAgKi9cbiAgICBDb250ZXh0QVBJLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGNvbnRleHQsIHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5iaW5kKGNvbnRleHQsIHRhcmdldCk7XG4gICAgfTtcbiAgICBDb250ZXh0QVBJLnByb3RvdHlwZS5fZ2V0Q29udGV4dE1hbmFnZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRHbG9iYWwoQVBJX05BTUUkMSkgfHwgTk9PUF9DT05URVhUX01BTkFHRVI7XG4gICAgfTtcbiAgICAvKiogRGlzYWJsZSBhbmQgcmVtb3ZlIHRoZSBnbG9iYWwgY29udGV4dCBtYW5hZ2VyICovXG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5kaXNhYmxlKCk7XG4gICAgICAgIHVucmVnaXN0ZXJHbG9iYWwoQVBJX05BTUUkMSwgRGlhZ0FQSS5pbnN0YW5jZSgpKTtcbiAgICB9O1xuICAgIHJldHVybiBDb250ZXh0QVBJO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBUcmFjZUZsYWdzO1xuKGZ1bmN0aW9uIChUcmFjZUZsYWdzKSB7XG4gICAgLyoqIFJlcHJlc2VudHMgbm8gZmxhZyBzZXQuICovXG4gICAgVHJhY2VGbGFnc1tUcmFjZUZsYWdzW1wiTk9ORVwiXSA9IDBdID0gXCJOT05FXCI7XG4gICAgLyoqIEJpdCB0byByZXByZXNlbnQgd2hldGhlciB0cmFjZSBpcyBzYW1wbGVkIGluIHRyYWNlIGZsYWdzLiAqL1xuICAgIFRyYWNlRmxhZ3NbVHJhY2VGbGFnc1tcIlNBTVBMRURcIl0gPSAxXSA9IFwiU0FNUExFRFwiO1xufSkoVHJhY2VGbGFncyB8fCAoVHJhY2VGbGFncyA9IHt9KSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgSU5WQUxJRF9TUEFOSUQgPSAnMDAwMDAwMDAwMDAwMDAwMCc7XG52YXIgSU5WQUxJRF9UUkFDRUlEID0gJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJztcbnZhciBJTlZBTElEX1NQQU5fQ09OVEVYVCA9IHtcbiAgICB0cmFjZUlkOiBJTlZBTElEX1RSQUNFSUQsXG4gICAgc3BhbklkOiBJTlZBTElEX1NQQU5JRCxcbiAgICB0cmFjZUZsYWdzOiBUcmFjZUZsYWdzLk5PTkUsXG59O1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBUaGUgTm9uUmVjb3JkaW5nU3BhbiBpcyB0aGUgZGVmYXVsdCB7QGxpbmsgU3Bhbn0gdGhhdCBpcyB1c2VkIHdoZW4gbm8gU3BhblxuICogaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlLiBBbGwgb3BlcmF0aW9ucyBhcmUgbm8tb3AgaW5jbHVkaW5nIGNvbnRleHRcbiAqIHByb3BhZ2F0aW9uLlxuICovXG52YXIgTm9uUmVjb3JkaW5nU3BhbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb25SZWNvcmRpbmdTcGFuKF9zcGFuQ29udGV4dCkge1xuICAgICAgICBpZiAoX3NwYW5Db250ZXh0ID09PSB2b2lkIDApIHsgX3NwYW5Db250ZXh0ID0gSU5WQUxJRF9TUEFOX0NPTlRFWFQ7IH1cbiAgICAgICAgdGhpcy5fc3BhbkNvbnRleHQgPSBfc3BhbkNvbnRleHQ7XG4gICAgfVxuICAgIC8vIFJldHVybnMgYSBTcGFuQ29udGV4dC5cbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5zcGFuQ29udGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NwYW5Db250ZXh0O1xuICAgIH07XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoX2tleSwgX3ZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKF9hdHRyaWJ1dGVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5hZGRFdmVudCA9IGZ1bmN0aW9uIChfbmFtZSwgX2F0dHJpYnV0ZXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5hZGRMaW5rID0gZnVuY3Rpb24gKF9saW5rKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuYWRkTGlua3MgPSBmdW5jdGlvbiAoX2xpbmtzKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5zZXRTdGF0dXMgPSBmdW5jdGlvbiAoX3N0YXR1cykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUudXBkYXRlTmFtZSA9IGZ1bmN0aW9uIChfbmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKF9lbmRUaW1lKSB7IH07XG4gICAgLy8gaXNSZWNvcmRpbmcgYWx3YXlzIHJldHVybnMgZmFsc2UgZm9yIE5vblJlY29yZGluZ1NwYW4uXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuaXNSZWNvcmRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUucmVjb3JkRXhjZXB0aW9uID0gZnVuY3Rpb24gKF9leGNlcHRpb24sIF90aW1lKSB7IH07XG4gICAgcmV0dXJuIE5vblJlY29yZGluZ1NwYW47XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBzcGFuIGtleVxuICovXG52YXIgU1BBTl9LRVkgPSBjcmVhdGVDb250ZXh0S2V5KCdPcGVuVGVsZW1ldHJ5IENvbnRleHQgS2V5IFNQQU4nKTtcbi8qKlxuICogUmV0dXJuIHRoZSBzcGFuIGlmIG9uZSBleGlzdHNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIGdldCBzcGFuIGZyb21cbiAqL1xuZnVuY3Rpb24gZ2V0U3Bhbihjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQuZ2V0VmFsdWUoU1BBTl9LRVkpIHx8IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogR2V0cyB0aGUgc3BhbiBmcm9tIHRoZSBjdXJyZW50IGNvbnRleHQsIGlmIG9uZSBleGlzdHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFjdGl2ZVNwYW4oKSB7XG4gICAgcmV0dXJuIGdldFNwYW4oQ29udGV4dEFQSS5nZXRJbnN0YW5jZSgpLmFjdGl2ZSgpKTtcbn1cbi8qKlxuICogU2V0IHRoZSBzcGFuIG9uIGEgY29udGV4dFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gdXNlIGFzIHBhcmVudFxuICogQHBhcmFtIHNwYW4gc3BhbiB0byBzZXQgYWN0aXZlXG4gKi9cbmZ1bmN0aW9uIHNldFNwYW4oY29udGV4dCwgc3Bhbikge1xuICAgIHJldHVybiBjb250ZXh0LnNldFZhbHVlKFNQQU5fS0VZLCBzcGFuKTtcbn1cbi8qKlxuICogUmVtb3ZlIGN1cnJlbnQgc3BhbiBzdG9yZWQgaW4gdGhlIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIGRlbGV0ZSBzcGFuIGZyb21cbiAqL1xuZnVuY3Rpb24gZGVsZXRlU3Bhbihjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQuZGVsZXRlVmFsdWUoU1BBTl9LRVkpO1xufVxuLyoqXG4gKiBXcmFwIHNwYW4gY29udGV4dCBpbiBhIE5vb3BTcGFuIGFuZCBzZXQgYXMgc3BhbiBpbiBhIG5ld1xuICogY29udGV4dFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gc2V0IGFjdGl2ZSBzcGFuIG9uXG4gKiBAcGFyYW0gc3BhbkNvbnRleHQgc3BhbiBjb250ZXh0IHRvIGJlIHdyYXBwZWRcbiAqL1xuZnVuY3Rpb24gc2V0U3BhbkNvbnRleHQoY29udGV4dCwgc3BhbkNvbnRleHQpIHtcbiAgICByZXR1cm4gc2V0U3Bhbihjb250ZXh0LCBuZXcgTm9uUmVjb3JkaW5nU3BhbihzcGFuQ29udGV4dCkpO1xufVxuLyoqXG4gKiBHZXQgdGhlIHNwYW4gY29udGV4dCBvZiB0aGUgc3BhbiBpZiBpdCBleGlzdHMuXG4gKlxuICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBnZXQgdmFsdWVzIGZyb21cbiAqL1xuZnVuY3Rpb24gZ2V0U3BhbkNvbnRleHQoY29udGV4dCkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gZ2V0U3Bhbihjb250ZXh0KSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNwYW5Db250ZXh0KCk7XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgVkFMSURfVFJBQ0VJRF9SRUdFWCA9IC9eKFswLTlhLWZdezMyfSkkL2k7XG52YXIgVkFMSURfU1BBTklEX1JFR0VYID0gL15bMC05YS1mXXsxNn0kL2k7XG5mdW5jdGlvbiBpc1ZhbGlkVHJhY2VJZCh0cmFjZUlkKSB7XG4gICAgcmV0dXJuIFZBTElEX1RSQUNFSURfUkVHRVgudGVzdCh0cmFjZUlkKSAmJiB0cmFjZUlkICE9PSBJTlZBTElEX1RSQUNFSUQ7XG59XG5mdW5jdGlvbiBpc1ZhbGlkU3BhbklkKHNwYW5JZCkge1xuICAgIHJldHVybiBWQUxJRF9TUEFOSURfUkVHRVgudGVzdChzcGFuSWQpICYmIHNwYW5JZCAhPT0gSU5WQUxJRF9TUEFOSUQ7XG59XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHtAbGluayBTcGFuQ29udGV4dH0gaXMgdmFsaWQuXG4gKiBAcmV0dXJuIHRydWUgaWYgdGhpcyB7QGxpbmsgU3BhbkNvbnRleHR9IGlzIHZhbGlkLlxuICovXG5mdW5jdGlvbiBpc1NwYW5Db250ZXh0VmFsaWQoc3BhbkNvbnRleHQpIHtcbiAgICByZXR1cm4gKGlzVmFsaWRUcmFjZUlkKHNwYW5Db250ZXh0LnRyYWNlSWQpICYmIGlzVmFsaWRTcGFuSWQoc3BhbkNvbnRleHQuc3BhbklkKSk7XG59XG4vKipcbiAqIFdyYXAgdGhlIGdpdmVuIHtAbGluayBTcGFuQ29udGV4dH0gaW4gYSBuZXcgbm9uLXJlY29yZGluZyB7QGxpbmsgU3Bhbn1cbiAqXG4gKiBAcGFyYW0gc3BhbkNvbnRleHQgc3BhbiBjb250ZXh0IHRvIGJlIHdyYXBwZWRcbiAqIEByZXR1cm5zIGEgbmV3IG5vbi1yZWNvcmRpbmcge0BsaW5rIFNwYW59IHdpdGggdGhlIHByb3ZpZGVkIGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gd3JhcFNwYW5Db250ZXh0KHNwYW5Db250ZXh0KSB7XG4gICAgcmV0dXJuIG5ldyBOb25SZWNvcmRpbmdTcGFuKHNwYW5Db250ZXh0KTtcbn1cblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBjb250ZXh0QXBpID0gQ29udGV4dEFQSS5nZXRJbnN0YW5jZSgpO1xuLyoqXG4gKiBOby1vcCBpbXBsZW1lbnRhdGlvbnMgb2Yge0BsaW5rIFRyYWNlcn0uXG4gKi9cbnZhciBOb29wVHJhY2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BUcmFjZXIoKSB7XG4gICAgfVxuICAgIC8vIHN0YXJ0U3BhbiBzdGFydHMgYSBub29wIHNwYW4uXG4gICAgTm9vcFRyYWNlci5wcm90b3R5cGUuc3RhcnRTcGFuID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMsIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKGNvbnRleHQgPT09IHZvaWQgMCkgeyBjb250ZXh0ID0gY29udGV4dEFwaS5hY3RpdmUoKTsgfVxuICAgICAgICB2YXIgcm9vdCA9IEJvb2xlYW4ob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnJvb3QpO1xuICAgICAgICBpZiAocm9vdCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb25SZWNvcmRpbmdTcGFuKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhcmVudEZyb21Db250ZXh0ID0gY29udGV4dCAmJiBnZXRTcGFuQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgaWYgKGlzU3BhbkNvbnRleHQocGFyZW50RnJvbUNvbnRleHQpICYmXG4gICAgICAgICAgICBpc1NwYW5Db250ZXh0VmFsaWQocGFyZW50RnJvbUNvbnRleHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE5vblJlY29yZGluZ1NwYW4ocGFyZW50RnJvbUNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb25SZWNvcmRpbmdTcGFuKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE5vb3BUcmFjZXIucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uIChuYW1lLCBhcmcyLCBhcmczLCBhcmc0KSB7XG4gICAgICAgIHZhciBvcHRzO1xuICAgICAgICB2YXIgY3R4O1xuICAgICAgICB2YXIgZm47XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIGZuID0gYXJnMjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBvcHRzID0gYXJnMjtcbiAgICAgICAgICAgIGZuID0gYXJnMztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9wdHMgPSBhcmcyO1xuICAgICAgICAgICAgY3R4ID0gYXJnMztcbiAgICAgICAgICAgIGZuID0gYXJnNDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFyZW50Q29udGV4dCA9IGN0eCAhPT0gbnVsbCAmJiBjdHggIT09IHZvaWQgMCA/IGN0eCA6IGNvbnRleHRBcGkuYWN0aXZlKCk7XG4gICAgICAgIHZhciBzcGFuID0gdGhpcy5zdGFydFNwYW4obmFtZSwgb3B0cywgcGFyZW50Q29udGV4dCk7XG4gICAgICAgIHZhciBjb250ZXh0V2l0aFNwYW5TZXQgPSBzZXRTcGFuKHBhcmVudENvbnRleHQsIHNwYW4pO1xuICAgICAgICByZXR1cm4gY29udGV4dEFwaS53aXRoKGNvbnRleHRXaXRoU3BhblNldCwgZm4sIHVuZGVmaW5lZCwgc3Bhbik7XG4gICAgfTtcbiAgICByZXR1cm4gTm9vcFRyYWNlcjtcbn0oKSk7XG5mdW5jdGlvbiBpc1NwYW5Db250ZXh0KHNwYW5Db250ZXh0KSB7XG4gICAgcmV0dXJuICh0eXBlb2Ygc3BhbkNvbnRleHQgPT09ICdvYmplY3QnICYmXG4gICAgICAgIHR5cGVvZiBzcGFuQ29udGV4dFsnc3BhbklkJ10gPT09ICdzdHJpbmcnICYmXG4gICAgICAgIHR5cGVvZiBzcGFuQ29udGV4dFsndHJhY2VJZCddID09PSAnc3RyaW5nJyAmJlxuICAgICAgICB0eXBlb2Ygc3BhbkNvbnRleHRbJ3RyYWNlRmxhZ3MnXSA9PT0gJ251bWJlcicpO1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIE5PT1BfVFJBQ0VSID0gbmV3IE5vb3BUcmFjZXIoKTtcbi8qKlxuICogUHJveHkgdHJhY2VyIHByb3ZpZGVkIGJ5IHRoZSBwcm94eSB0cmFjZXIgcHJvdmlkZXJcbiAqL1xudmFyIFByb3h5VHJhY2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFByb3h5VHJhY2VyKF9wcm92aWRlciwgbmFtZSwgdmVyc2lvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLl9wcm92aWRlciA9IF9wcm92aWRlcjtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG4gICAgUHJveHlUcmFjZXIucHJvdG90eXBlLnN0YXJ0U3BhbiA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRUcmFjZXIoKS5zdGFydFNwYW4obmFtZSwgb3B0aW9ucywgY29udGV4dCk7XG4gICAgfTtcbiAgICBQcm94eVRyYWNlci5wcm90b3R5cGUuc3RhcnRBY3RpdmVTcGFuID0gZnVuY3Rpb24gKF9uYW1lLCBfb3B0aW9ucywgX2NvbnRleHQsIF9mbikge1xuICAgICAgICB2YXIgdHJhY2VyID0gdGhpcy5fZ2V0VHJhY2VyKCk7XG4gICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KHRyYWNlci5zdGFydEFjdGl2ZVNwYW4sIHRyYWNlciwgYXJndW1lbnRzKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFRyeSB0byBnZXQgYSB0cmFjZXIgZnJvbSB0aGUgcHJveHkgdHJhY2VyIHByb3ZpZGVyLlxuICAgICAqIElmIHRoZSBwcm94eSB0cmFjZXIgcHJvdmlkZXIgaGFzIG5vIGRlbGVnYXRlLCByZXR1cm4gYSBub29wIHRyYWNlci5cbiAgICAgKi9cbiAgICBQcm94eVRyYWNlci5wcm90b3R5cGUuX2dldFRyYWNlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlbGVnYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRyYWNlciA9IHRoaXMuX3Byb3ZpZGVyLmdldERlbGVnYXRlVHJhY2VyKHRoaXMubmFtZSwgdGhpcy52ZXJzaW9uLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICBpZiAoIXRyYWNlcikge1xuICAgICAgICAgICAgcmV0dXJuIE5PT1BfVFJBQ0VSO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RlbGVnYXRlID0gdHJhY2VyO1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGU7XG4gICAgfTtcbiAgICByZXR1cm4gUHJveHlUcmFjZXI7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUge0BsaW5rIFRyYWNlclByb3ZpZGVyfSB3aGljaCByZXR1cm5zIGFuIGltcG90ZW50XG4gKiBUcmFjZXIgZm9yIGFsbCBjYWxscyB0byBgZ2V0VHJhY2VyYC5cbiAqXG4gKiBBbGwgb3BlcmF0aW9ucyBhcmUgbm8tb3AuXG4gKi9cbnZhciBOb29wVHJhY2VyUHJvdmlkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTm9vcFRyYWNlclByb3ZpZGVyKCkge1xuICAgIH1cbiAgICBOb29wVHJhY2VyUHJvdmlkZXIucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uIChfbmFtZSwgX3ZlcnNpb24sIF9vcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgTm9vcFRyYWNlcigpO1xuICAgIH07XG4gICAgcmV0dXJuIE5vb3BUcmFjZXJQcm92aWRlcjtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgTk9PUF9UUkFDRVJfUFJPVklERVIgPSBuZXcgTm9vcFRyYWNlclByb3ZpZGVyKCk7XG4vKipcbiAqIFRyYWNlciBwcm92aWRlciB3aGljaCBwcm92aWRlcyB7QGxpbmsgUHJveHlUcmFjZXJ9cy5cbiAqXG4gKiBCZWZvcmUgYSBkZWxlZ2F0ZSBpcyBzZXQsIHRyYWNlcnMgcHJvdmlkZWQgYXJlIE5vT3AuXG4gKiAgIFdoZW4gYSBkZWxlZ2F0ZSBpcyBzZXQsIHRyYWNlcyBhcmUgcHJvdmlkZWQgZnJvbSB0aGUgZGVsZWdhdGUuXG4gKiAgIFdoZW4gYSBkZWxlZ2F0ZSBpcyBzZXQgYWZ0ZXIgdHJhY2VycyBoYXZlIGFscmVhZHkgYmVlbiBwcm92aWRlZCxcbiAqICAgYWxsIHRyYWNlcnMgYWxyZWFkeSBwcm92aWRlZCB3aWxsIHVzZSB0aGUgcHJvdmlkZWQgZGVsZWdhdGUgaW1wbGVtZW50YXRpb24uXG4gKi9cbnZhciBQcm94eVRyYWNlclByb3ZpZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFByb3h5VHJhY2VyUHJvdmlkZXIoKSB7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBhIHtAbGluayBQcm94eVRyYWNlcn1cbiAgICAgKi9cbiAgICBQcm94eVRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbiAobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5nZXREZWxlZ2F0ZVRyYWNlcihuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbmV3IFByb3h5VHJhY2VyKHRoaXMsIG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpKTtcbiAgICB9O1xuICAgIFByb3h5VHJhY2VyUHJvdmlkZXIucHJvdG90eXBlLmdldERlbGVnYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLl9kZWxlZ2F0ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogTk9PUF9UUkFDRVJfUFJPVklERVI7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGRlbGVnYXRlIHRyYWNlciBwcm92aWRlclxuICAgICAqL1xuICAgIFByb3h5VHJhY2VyUHJvdmlkZXIucHJvdG90eXBlLnNldERlbGVnYXRlID0gZnVuY3Rpb24gKGRlbGVnYXRlKSB7XG4gICAgICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgfTtcbiAgICBQcm94eVRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5nZXREZWxlZ2F0ZVRyYWNlciA9IGZ1bmN0aW9uIChuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuX2RlbGVnYXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0VHJhY2VyKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpO1xuICAgIH07XG4gICAgcmV0dXJuIFByb3h5VHJhY2VyUHJvdmlkZXI7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIFNwYW5LaW5kO1xuKGZ1bmN0aW9uIChTcGFuS2luZCkge1xuICAgIC8qKiBEZWZhdWx0IHZhbHVlLiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBpcyB1c2VkIGludGVybmFsbHkuICovXG4gICAgU3BhbktpbmRbU3BhbktpbmRbXCJJTlRFUk5BTFwiXSA9IDBdID0gXCJJTlRFUk5BTFwiO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBzcGFuIGNvdmVycyBzZXJ2ZXItc2lkZSBoYW5kbGluZyBvZiBhbiBSUEMgb3Igb3RoZXJcbiAgICAgKiByZW1vdGUgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIlNFUlZFUlwiXSA9IDFdID0gXCJTRVJWRVJcIjtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBjb3ZlcnMgdGhlIGNsaWVudC1zaWRlIHdyYXBwZXIgYXJvdW5kIGFuIFJQQyBvclxuICAgICAqIG90aGVyIHJlbW90ZSByZXF1ZXN0LlxuICAgICAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiQ0xJRU5UXCJdID0gMl0gPSBcIkNMSUVOVFwiO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBzcGFuIGRlc2NyaWJlcyBwcm9kdWNlciBzZW5kaW5nIGEgbWVzc2FnZSB0byBhXG4gICAgICogYnJva2VyLiBVbmxpa2UgY2xpZW50IGFuZCBzZXJ2ZXIsIHRoZXJlIGlzIG5vIGRpcmVjdCBjcml0aWNhbCBwYXRoIGxhdGVuY3lcbiAgICAgKiByZWxhdGlvbnNoaXAgYmV0d2VlbiBwcm9kdWNlciBhbmQgY29uc3VtZXIgc3BhbnMuXG4gICAgICovXG4gICAgU3BhbktpbmRbU3BhbktpbmRbXCJQUk9EVUNFUlwiXSA9IDNdID0gXCJQUk9EVUNFUlwiO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBzcGFuIGRlc2NyaWJlcyBjb25zdW1lciByZWNlaXZpbmcgYSBtZXNzYWdlIGZyb20gYVxuICAgICAqIGJyb2tlci4gVW5saWtlIGNsaWVudCBhbmQgc2VydmVyLCB0aGVyZSBpcyBubyBkaXJlY3QgY3JpdGljYWwgcGF0aCBsYXRlbmN5XG4gICAgICogcmVsYXRpb25zaGlwIGJldHdlZW4gcHJvZHVjZXIgYW5kIGNvbnN1bWVyIHNwYW5zLlxuICAgICAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiQ09OU1VNRVJcIl0gPSA0XSA9IFwiQ09OU1VNRVJcIjtcbn0pKFNwYW5LaW5kIHx8IChTcGFuS2luZCA9IHt9KSk7XG5cbi8qKlxuICogQW4gZW51bWVyYXRpb24gb2Ygc3RhdHVzIGNvZGVzLlxuICovXG52YXIgU3BhblN0YXR1c0NvZGU7XG4oZnVuY3Rpb24gKFNwYW5TdGF0dXNDb2RlKSB7XG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc3RhdHVzLlxuICAgICAqL1xuICAgIFNwYW5TdGF0dXNDb2RlW1NwYW5TdGF0dXNDb2RlW1wiVU5TRVRcIl0gPSAwXSA9IFwiVU5TRVRcIjtcbiAgICAvKipcbiAgICAgKiBUaGUgb3BlcmF0aW9uIGhhcyBiZWVuIHZhbGlkYXRlZCBieSBhbiBBcHBsaWNhdGlvbiBkZXZlbG9wZXIgb3JcbiAgICAgKiBPcGVyYXRvciB0byBoYXZlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXG4gICAgICovXG4gICAgU3BhblN0YXR1c0NvZGVbU3BhblN0YXR1c0NvZGVbXCJPS1wiXSA9IDFdID0gXCJPS1wiO1xuICAgIC8qKlxuICAgICAqIFRoZSBvcGVyYXRpb24gY29udGFpbnMgYW4gZXJyb3IuXG4gICAgICovXG4gICAgU3BhblN0YXR1c0NvZGVbU3BhblN0YXR1c0NvZGVbXCJFUlJPUlwiXSA9IDJdID0gXCJFUlJPUlwiO1xufSkoU3BhblN0YXR1c0NvZGUgfHwgKFNwYW5TdGF0dXNDb2RlID0ge30pKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIFNwbGl0IG1vZHVsZS1sZXZlbCB2YXJpYWJsZSBkZWZpbml0aW9uIGludG8gc2VwYXJhdGUgZmlsZXMgdG8gYWxsb3dcbi8vIHRyZWUtc2hha2luZyBvbiBlYWNoIGFwaSBpbnN0YW5jZS5cbi8qKiBFbnRyeXBvaW50IGZvciBjb250ZXh0IEFQSSAqL1xudmFyIGNvbnRleHQgPSBDb250ZXh0QVBJLmdldEluc3RhbmNlKCk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgQVBJX05BTUUgPSAndHJhY2UnO1xuLyoqXG4gKiBTaW5nbGV0b24gb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSBPcGVuVGVsZW1ldHJ5IFRyYWNpbmcgQVBJXG4gKi9cbnZhciBUcmFjZUFQSSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKiogRW1wdHkgcHJpdmF0ZSBjb25zdHJ1Y3RvciBwcmV2ZW50cyBlbmQgdXNlcnMgZnJvbSBjb25zdHJ1Y3RpbmcgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEFQSSAqL1xuICAgIGZ1bmN0aW9uIFRyYWNlQVBJKCkge1xuICAgICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyID0gbmV3IFByb3h5VHJhY2VyUHJvdmlkZXIoKTtcbiAgICAgICAgdGhpcy53cmFwU3BhbkNvbnRleHQgPSB3cmFwU3BhbkNvbnRleHQ7XG4gICAgICAgIHRoaXMuaXNTcGFuQ29udGV4dFZhbGlkID0gaXNTcGFuQ29udGV4dFZhbGlkO1xuICAgICAgICB0aGlzLmRlbGV0ZVNwYW4gPSBkZWxldGVTcGFuO1xuICAgICAgICB0aGlzLmdldFNwYW4gPSBnZXRTcGFuO1xuICAgICAgICB0aGlzLmdldEFjdGl2ZVNwYW4gPSBnZXRBY3RpdmVTcGFuO1xuICAgICAgICB0aGlzLmdldFNwYW5Db250ZXh0ID0gZ2V0U3BhbkNvbnRleHQ7XG4gICAgICAgIHRoaXMuc2V0U3BhbiA9IHNldFNwYW47XG4gICAgICAgIHRoaXMuc2V0U3BhbkNvbnRleHQgPSBzZXRTcGFuQ29udGV4dDtcbiAgICB9XG4gICAgLyoqIEdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBUcmFjZSBBUEkgKi9cbiAgICBUcmFjZUFQSS5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5faW5zdGFuY2UgPSBuZXcgVHJhY2VBUEkoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGN1cnJlbnQgZ2xvYmFsIHRyYWNlci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHRyYWNlciBwcm92aWRlciB3YXMgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQsIGVsc2UgZmFsc2VcbiAgICAgKi9cbiAgICBUcmFjZUFQSS5wcm90b3R5cGUuc2V0R2xvYmFsVHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbiAocHJvdmlkZXIpIHtcbiAgICAgICAgdmFyIHN1Y2Nlc3MgPSByZWdpc3Rlckdsb2JhbChBUElfTkFNRSwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciwgRGlhZ0FQSS5pbnN0YW5jZSgpKTtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIuc2V0RGVsZWdhdGUocHJvdmlkZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZ2xvYmFsIHRyYWNlciBwcm92aWRlci5cbiAgICAgKi9cbiAgICBUcmFjZUFQSS5wcm90b3R5cGUuZ2V0VHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRHbG9iYWwoQVBJX05BTUUpIHx8IHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXI7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgdHJhY2VyIGZyb20gdGhlIGdsb2JhbCB0cmFjZXIgcHJvdmlkZXIuXG4gICAgICovXG4gICAgVHJhY2VBUEkucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uIChuYW1lLCB2ZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRyYWNlclByb3ZpZGVyKCkuZ2V0VHJhY2VyKG5hbWUsIHZlcnNpb24pO1xuICAgIH07XG4gICAgLyoqIFJlbW92ZSB0aGUgZ2xvYmFsIHRyYWNlciBwcm92aWRlciAqL1xuICAgIFRyYWNlQVBJLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB1bnJlZ2lzdGVyR2xvYmFsKEFQSV9OQU1FLCBEaWFnQVBJLmluc3RhbmNlKCkpO1xuICAgICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyID0gbmV3IFByb3h5VHJhY2VyUHJvdmlkZXIoKTtcbiAgICB9O1xuICAgIHJldHVybiBUcmFjZUFQSTtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBTcGxpdCBtb2R1bGUtbGV2ZWwgdmFyaWFibGUgZGVmaW5pdGlvbiBpbnRvIHNlcGFyYXRlIGZpbGVzIHRvIGFsbG93XG4vLyB0cmVlLXNoYWtpbmcgb24gZWFjaCBhcGkgaW5zdGFuY2UuXG4vKiogRW50cnlwb2ludCBmb3IgdHJhY2UgQVBJICovXG52YXIgdHJhY2UgPSBUcmFjZUFQSS5nZXRJbnN0YW5jZSgpO1xuXG5jb25zdCBjcmVhdGVDREVTcGFuID0gYXN5bmMgKGNkZUNvbm4sIGRhdGEsIG9wZXJhdGlvbikgPT4ge1xuICBjb25zdCB0cmFjZXIgPSB0cmFjZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpO1xuICBjb25zdCBwYXJlbnRDb250ZXh0ID0gY29udGV4dC5hY3RpdmUoKTtcbiAgY29uc3Qgc3BhbiA9IHRyYWNlci5zdGFydFNwYW4oXG4gICAgYGNkZS4ke2RhdGEudHlwZX1gLFxuICAgIHtcbiAgICAgIGtpbmQ6IFNwYW5LaW5kLkNMSUVOVCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgXCJtZXNzYWdlLnR5cGVcIjogZGF0YS50eXBlLFxuICAgICAgICAuLi5jZGVDb25uLnRyYWNpbmdDb250ZXh0ICYmIHtcbiAgICAgICAgICBcIm9qcy5jaGVja291dFNlY3VyZVRva2VuXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LmRldmljZVRva2VuLFxuICAgICAgICAgIFwib2pzLmZvcm1JZFwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LmZvcm1JZCxcbiAgICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQudmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5yZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LmJhc2VVcmwsXG4gICAgICAgICAgXCJvanMucmVmZXJyZXJcIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5yZWZlcnJlclxuICAgICAgICB9LFxuICAgICAgICBcImNkZS5tZXNzYWdlLnR5cGVcIjogZGF0YS50eXBlLFxuICAgICAgICBcImNkZS5tZXNzYWdlLnBheWxvYWRcIjogSlNPTi5zdHJpbmdpZnkoZGF0YS5wYXlsb2FkKVxuICAgICAgfVxuICAgIH0sXG4gICAgcGFyZW50Q29udGV4dFxuICApO1xuICByZXR1cm4gY29udGV4dC53aXRoKHRyYWNlLnNldFNwYW4ocGFyZW50Q29udGV4dCwgc3BhbiksIGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3BlcmF0aW9uKCk7XG4gICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgbWVzc2FnZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIlxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc3Bhbi5lbmQoKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IGNyZWF0ZVRyYWNraW5nU3BhbiA9IGFzeW5jIChvcHRpb25zLCBvcGVyYXRpb24pID0+IHtcbiAgY29uc3QgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKTtcbiAgY29uc3QgcGFyZW50Q29udGV4dCA9IGNvbnRleHQuYWN0aXZlKCk7XG4gIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKFxuICAgIGBmb3JtLiR7b3B0aW9ucy5zcGFuTmFtZX1gLFxuICAgIHtcbiAgICAgIGtpbmQ6IFNwYW5LaW5kLkNMSUVOVCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiBvcHRpb25zLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IG9wdGlvbnMuZGV2aWNlVG9rZW4sXG4gICAgICAgIFwib2pzLmZvcm1JZFwiOiBvcHRpb25zLmZvcm1JZCxcbiAgICAgICAgXCJvanMudmVyc2lvblwiOiBvcHRpb25zLnZlcnNpb24sXG4gICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiBvcHRpb25zLnJlbGVhc2VWZXJzaW9uLFxuICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiBvcHRpb25zLmJhc2VVcmwsXG4gICAgICAgIFwib2pzLnJlZmVycmVyXCI6IG9wdGlvbnMucmVmZXJyZXIsXG4gICAgICAgIC4uLm9wdGlvbnMucGF5bWVudFJvdXRlSWQgJiYgeyBcInBheW1lbnQucm91dGVfaWRcIjogb3B0aW9ucy5wYXltZW50Um91dGVJZCB9XG4gICAgICB9XG4gICAgfSxcbiAgICBwYXJlbnRDb250ZXh0XG4gICk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3BlcmF0aW9uKCk7XG4gICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCI7XG4gICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2VcbiAgICB9KTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfSBmaW5hbGx5IHtcbiAgICBzcGFuLmVuZCgpO1xuICB9XG59O1xuXG5jbGFzcyBDZGVFcnJvciBleHRlbmRzIEN1c3RvbUVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBjb25zdCBmcmllbmRseU1lc3NhZ2UgPSBgJHtyZXNwb25zZS5tZXNzYWdlfWA7XG4gICAgc3VwZXIoZnJpZW5kbHlNZXNzYWdlKTtcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IHF1ZXJ5Q0RFID0gYXN5bmMgKGNkZUNvbm4sIGRhdGEsIHJlc3BvbnNlU2NoZW1hLCB0cmFja2luZ0tleSkgPT4ge1xuICByZXR1cm4gY3JlYXRlQ0RFU3BhbihjZGVDb25uLCBkYXRhLCBhc3luYyAoKSA9PiB7XG4gICAgaWYgKHRyYWNraW5nS2V5KSB7XG4gICAgICB0cmFjayh0cmFja2luZ0tleSwge1xuICAgICAgICAuLi5kYXRhXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjZGVDb25uLnNlbmQoZGF0YSk7XG4gICAgaWYgKGlzQ0RFUmVzcG9uc2VFcnJvcihyZXNwb25zZSkpIHtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBuYXZpZ2F0b3IuY29ubmVjdGlvbjtcbiAgICAgIHRyYWNrKFwiY2RlX3Jlc3BvbnNlX2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3JfbWVzc2FnZTogcmVzcG9uc2UubWVzc2FnZSxcbiAgICAgICAgbWVzc2FnZV90eXBlOiBkYXRhLnR5cGUsXG4gICAgICAgIHVzZXJfYWdlbnQ6IG5hdmlnYXRvci51c2VyQWdlbnQsXG4gICAgICAgIG9ubGluZTogbmF2aWdhdG9yLm9uTGluZSxcbiAgICAgICAgaGFzX2ZvY3VzOiBkb2N1bWVudC5oYXNGb2N1cygpLFxuICAgICAgICBocmVmOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgICAgZG9jdW1lbnRfdmlzaWJpbGl0eV9zdGF0ZTogZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlLFxuICAgICAgICBjb25uZWN0aW9uX2Rvd25saW5rOiBjb25uZWN0aW9uPy5kb3dubGluayxcbiAgICAgICAgY29ubmVjdGlvbl9lZmZlY3RpdmVfdHlwZTogY29ubmVjdGlvbj8uZWZmZWN0aXZlVHlwZSxcbiAgICAgICAgY29ubmVjdGlvbl9ydHQ6IGNvbm5lY3Rpb24/LnJ0dCxcbiAgICAgICAgY29ubmVjdGlvbl9zYXZlX2RhdGE6IGNvbm5lY3Rpb24/LnNhdmVEYXRhXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBDZGVFcnJvcihyZXNwb25zZSk7XG4gICAgfVxuICAgIGlmICghY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEocmVzcG9uc2UsIHJlc3BvbnNlU2NoZW1hKSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2VTY2hlbWEuc2FmZVBhcnNlKHJlc3BvbnNlKTtcbiAgICAgIGlmIChyZXN1bHQuc3VjY2VzcykgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJPSlMgcXVlcnlBcGkgZ290IGEgc2NoZW1hIGVycm9yLiBFeHBlY3RlZCBzY2hlbWE6XCIsIHJlc3BvbnNlU2NoZW1hLCBcIkFjdHVhbDpcIiwgcmVzcG9uc2UpO1xuICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgIH1cbiAgICBpZiAodHJhY2tpbmdLZXkpIHtcbiAgICAgIHRyYWNrKHRyYWNraW5nS2V5LCB7XG4gICAgICAgIC4uLnJlc3BvbnNlXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9KTtcbn07XG5jb25zdCBjaGVja0lmQ29uZm9ybXNUb1NjaGVtYSA9ICh2YWx1ZSwgc2NoZW1hKSA9PiB7XG4gIHJldHVybiBzY2hlbWEuc2FmZVBhcnNlKHZhbHVlKS5zdWNjZXNzO1xufTtcbmNvbnN0IGlzQ0RFUmVzcG9uc2VFcnJvciA9IChyZXNwb25zZSkgPT4ge1xuICByZXR1cm4gQ0RFUmVzcG9uc2VFcnJvci5zYWZlUGFyc2UocmVzcG9uc2UpLnN1Y2Nlc3M7XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRQcmV2aWV3ID0gYXN5bmMgKGNkZUNvbm4sIHJlcXVlc3QpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByZXF1ZXN0IH0sIFByZXZpZXdDaGVja291dFJlc3BvbnNlKTtcbn07XG5jb25zdCBnZXRQcmVmaWxsID0gYXN5bmMgKGNkZUNvbm4pID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBQYXltZW50Rm9ybVByZWZpbGwpO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwidjJfc3RhcnRfcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSxcbiAgICBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UsXG4gICAgXCJzdGFydF9wYXltZW50X2Zsb3dcIlxuICApO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCIsIHBheWxvYWQgfSxcbiAgICBTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSxcbiAgICBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIlxuICApO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUiA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHRyYWNrKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCB7XG4gICAgLi4ucGF5bG9hZFxuICB9KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZCB9LCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICB0cmFjayhcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJfcmVzdWx0XCIsIHtcbiAgICAuLi5yZXN1bHRcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuY29uc3QgY29uZmlybVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImNvbmZpcm1fcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSxcbiAgICBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSxcbiAgICBcImNvbmZpcm1fcGF5bWVudF9mbG93XCJcbiAgKTtcbn07XG5jb25zdCBmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkIH0sXG4gICAgU2V0dXBDaGVja291dFJlc3BvbnNlLFxuICAgIFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIlxuICApO1xufTtcbmNvbnN0IGNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkIH0sXG4gICAgQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSxcbiAgICBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiXG4gICk7XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRWYWx1ZSA9IGFzeW5jIChjZGVDb25uLCBzZWN1cmVUb2tlbiwgcHJvbW9Db2RlKSA9PiB7XG4gIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlldyhjZGVDb25uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBzZWN1cmVUb2tlbixcbiAgICBwcm9tb3Rpb25fY29kZTogcHJvbW9Db2RlXG4gIH0pO1xuICBjb25zdCBjdXJyZW5jaWVzID0gbmV3IFNldChjaGVja291dFByZXZpZXcucHJldmlldy5pbnZvaWNlcy5tYXAoKGludikgPT4gaW52LmN1cnJlbmN5KSk7XG4gIGlmIChjdXJyZW5jaWVzLnNpemUgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHtjdXJyZW5jaWVzLnNpemV9YCk7XG4gIH1cbiAgY29uc3QgY3VycmVuY3kgPSBjdXJyZW5jaWVzLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiO1xuICBjb25zdCBhbW91bnRBdG9tID0gc3VtKGNoZWNrb3V0UHJldmlldy5wcmV2aWV3Lmludm9pY2VzLm1hcCgoaW52KSA9PiBpbnYucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3ksXG4gICAgYW1vdW50QXRvbVxuICB9O1xufTtcbmNvbnN0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudCA9IGFzeW5jIChjZGVDb25uLCBzZWN1cmVUb2tlbiwgaXNTZXR1cE1vZGUsIHByb21vQ29kZSkgPT4ge1xuICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB9IGVsc2Uge1xuICAgIHByb21vQ29kZSA9ICFwcm9tb0NvZGUgPyB2b2lkIDAgOiBwcm9tb0NvZGU7XG4gICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJwcm9tb0NvZGVcIikgJiYgIXByb21vQ29kZSkge1xuICAgICAgcHJvbW9Db2RlID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInByb21vQ29kZVwiKTtcbiAgICB9XG4gICAgY29uc3QgY2hlY2tvdXRQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRWYWx1ZShjZGVDb25uLCBzZWN1cmVUb2tlbiwgcHJvbW9Db2RlKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBjaGVja291dFByZXZpZXcuYW1vdW50QXRvbSwgY3VycmVuY3k6IGNoZWNrb3V0UHJldmlldy5jdXJyZW5jeSB9O1xuICB9XG59O1xuY29uc3QgdG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyA9IGFzeW5jIChhbGxDZGVDb25uZWN0aW9ucywgcGF5bG9hZCkgPT4ge1xuICBpZiAoYWxsQ2RlQ29ubmVjdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgfVxuICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKGFsbENkZUNvbm5lY3Rpb25zLnZhbHVlcygpKS5tYXAoXG4gICAgICAoY2RlQ29ubikgPT4gcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZCB9LCBUb2tlbml6ZUNhcmRSZXNwb25zZSlcbiAgICApXG4gICk7XG4gIHJldHVybiByZXNwb25zZXM7XG59O1xuY29uc3QgY2hlY2tvdXRDYXJkRWxlbWVudHMgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiLCBwYXlsb2FkIH0sXG4gICAgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UsXG4gICAgXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCJcbiAgKTtcbn07XG5jb25zdCBzZXR1cENoZWNrb3V0ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkIH0sIFNldHVwQ2hlY2tvdXRSZXNwb25zZSwgXCJzZXR1cF9jaGVja291dFwiKTtcbn07XG5jb25zdCBwZXJmb3JtQ2hlY2tvdXQgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQgfSwgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UsIFwicGVyZm9ybV9jaGVja291dFwiKTtcbn07XG5jb25zdCBDREVfUE9MTElOR19JTlRFUlZBTCA9IDFlMztcbmNvbnN0IHBpbmdDZGVGb3JTdGF0dXMgPSBhc3luYyAoaWZyYW1lLCBjaGlsZE9yaWdpbiwgdHlwZSwgcmVzcG9uc2VNb2RlbCkgPT4ge1xuICBjb25zb2xlLmxvZyhjaGlsZE9yaWdpbik7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lLFxuICAgIGRlYnVnOiB0cnVlLFxuICAgIHRpbWVvdXQ6IENERV9QT0xMSU5HX0lOVEVSVkFMLFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KTtcbiAgY29uc3QgY29ubmVjdGlvbk9iaiA9IGF3YWl0IGNvbm5lY3Rpb24ucHJvbWlzZTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcXVlcnlDREUoY29ubmVjdGlvbk9iaiwgeyB0eXBlIH0sIHJlc3BvbnNlTW9kZWwpO1xuICBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuY29uc3QgcHJlcGFyZVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSxcbiAgICBQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSxcbiAgICBcInByZXBhcmVfcGF5bWVudF9mbG93XCJcbiAgKTtcbn07XG5jb25zdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUgPSBhc3luYyAoY2RlQ29ubiwgZXJyb3JNZXNzYWdlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHsgbWVzc2FnZTogZXJyb3JNZXNzYWdlIH07XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBxdWVyeUNERShcbiAgICAgIGNkZUNvbm4sXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQgfSxcbiAgICAgIENoZWNrb3V0U3RhbmRhcmRFcnJvclJlc3BvbnNlXG4gICAgKTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZXJyb3JfY29kZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBnZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGU6XCIsIGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgIHJldHVybiBcIlBBWU1FTlRfRkFJTEVEX0dFTkVSSUNcIjtcbiAgfVxufTtcbmNvbnN0IHNldFVzZXJEZXZpY2VUb2tlbiA9IGFzeW5jIChjZGVDb25uLCBkZXZpY2VUb2tlbikgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwic2V0X3VzZXJfZGV2aWNlX3Rva2VuXCIsIHBheWxvYWQ6IHsgZGV2aWNlX3Rva2VuOiBkZXZpY2VUb2tlbiB9IH0sXG4gICAgU2V0VXNlckRldmljZVRva2VuUmVzcG9uc2VcbiAgKTtcbn07XG5cbmNvbnN0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QgPSBhc3luYyAob2JqKSA9PiB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8ICFvYmopIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwaW5nID0geyB0eXBlOiBcInBpbmdcIiB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9iai5zZW5kKHBpbmcpO1xuICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpgLCBlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5jb25zdCBpc1Jlc3VsdFZhbGlkID0gKG9iaiwgaXNWYWxpZCkgPT4ge1xuICByZXR1cm4gISFvYmogJiYgaXNWYWxpZDtcbn07XG5cbmNvbnN0IEZSQU1FX0JBU0VfVVJMID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuXG4vLyBUaGVzZSB2YWx1ZXMgc2hvdWxkIE5FVkVSIGNoYW5nZS4gVGhlIHZhbHVlcyBhcmUgcHJlY2lzZWx5IGZvclxuLy8gZ2VuZXJhdGluZyBVTElEcy5cbmNvbnN0IEVOQ09ESU5HID0gXCIwMTIzNDU2Nzg5QUJDREVGR0hKS01OUFFSU1RWV1hZWlwiOyAvLyBDcm9ja2ZvcmQncyBCYXNlMzJcbmNvbnN0IEVOQ09ESU5HX0xFTiA9IDMyOyAvLyBmcm9tIEVOQ09ESU5HLmxlbmd0aDtcbmNvbnN0IFJBTkRPTV9MRU4gPSAxNjtcbmNvbnN0IFRJTUVfTEVOID0gMTA7XG5jb25zdCBUSU1FX01BWCA9IDI4MTQ3NDk3NjcxMDY1NTsgLy8gZnJvbSBNYXRoLnBvdygyLCA0OCkgLSAxO1xuXG52YXIgVUxJREVycm9yQ29kZTtcbihmdW5jdGlvbiAoVUxJREVycm9yQ29kZSkge1xuICAgIFVMSURFcnJvckNvZGVbXCJCYXNlMzJJbmNvcnJlY3RFbmNvZGluZ1wiXSA9IFwiQjMyX0VOQ19JTlZBTElEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkRlY29kZVRpbWVJbnZhbGlkQ2hhcmFjdGVyXCJdID0gXCJERUNfVElNRV9DSEFSXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkRlY29kZVRpbWVWYWx1ZU1hbGZvcm1lZFwiXSA9IFwiREVDX1RJTUVfTUFMRk9STUVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkVuY29kZVRpbWVOZWdhdGl2ZVwiXSA9IFwiRU5DX1RJTUVfTkVHXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkVuY29kZVRpbWVTaXplRXhjZWVkZWRcIl0gPSBcIkVOQ19USU1FX1NJWkVfRVhDRUVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZFwiXSA9IFwiRU5DX1RJTUVfTUFMRk9STUVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIlBSTkdEZXRlY3RGYWlsdXJlXCJdID0gXCJQUk5HX0RFVEVDVFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJVTElESW52YWxpZFwiXSA9IFwiVUxJRF9JTlZBTElEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIlVuZXhwZWN0ZWRcIl0gPSBcIlVORVhQRUNURURcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiVVVJREludmFsaWRcIl0gPSBcIlVVSURfSU5WQUxJRFwiO1xufSkoVUxJREVycm9yQ29kZSB8fCAoVUxJREVycm9yQ29kZSA9IHt9KSk7XG5jbGFzcyBVTElERXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoZXJyb3JDb2RlLCBtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKGAke21lc3NhZ2V9ICgke2Vycm9yQ29kZX0pYCk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiVUxJREVycm9yXCI7XG4gICAgICAgIHRoaXMuY29kZSA9IGVycm9yQ29kZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJhbmRvbUNoYXIocHJuZykge1xuICAgIC8vIEN1cnJlbnRseSBQUk5HcyBnZW5lcmF0ZSBmcmFjdGlvbnMgZnJvbSAwIHRvIF9sZXNzIHRoYW5fIDEsIHNvIG5vIFwiJVwiIGlzIG5lY2Vzc2FyeS5cbiAgICAvLyBIb3dldmVyLCBqdXN0IGluIGNhc2UgYSBmdXR1cmUgUFJORyBjYW4gZ2VuZXJhdGUgMSxcbiAgICAvLyB3ZSBhcmUgYXBwbHlpbmcgXCIlIEVOQ09ESU5HIExFTlwiIHRvIHdyYXAgYmFjayB0byB0aGUgZmlyc3QgY2hhcmFjdGVyXG4gICAgY29uc3QgcmFuZG9tUG9zaXRpb24gPSBNYXRoLmZsb29yKHBybmcoKSAqIEVOQ09ESU5HX0xFTikgJSBFTkNPRElOR19MRU47XG4gICAgcmV0dXJuIEVOQ09ESU5HLmNoYXJBdChyYW5kb21Qb3NpdGlvbik7XG59XG4vKipcbiAqIERldGVjdCB0aGUgYmVzdCBQUk5HIChwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IpXG4gKiBAcGFyYW0gcm9vdCBUaGUgcm9vdCB0byBjaGVjayBmcm9tIChnbG9iYWwvd2luZG93KVxuICogQHJldHVybnMgVGhlIFBSTkcgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0UFJORyhyb290KSB7XG4gICAgY29uc3Qgcm9vdExvb2t1cCA9IGRldGVjdFJvb3QoKTtcbiAgICBjb25zdCBnbG9iYWxDcnlwdG8gPSAocm9vdExvb2t1cCAmJiAocm9vdExvb2t1cC5jcnlwdG8gfHwgcm9vdExvb2t1cC5tc0NyeXB0bykpIHx8XG4gICAgICAgIChudWxsKTtcbiAgICBpZiAodHlwZW9mIGdsb2JhbENyeXB0bz8uZ2V0UmFuZG9tVmFsdWVzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDEpO1xuICAgICAgICAgICAgZ2xvYmFsQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhidWZmZXIpO1xuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclswXSAvIDB4ZmY7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBnbG9iYWxDcnlwdG8/LnJhbmRvbUJ5dGVzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuICgpID0+IGdsb2JhbENyeXB0by5yYW5kb21CeXRlcygxKS5yZWFkVUludDgoKSAvIDB4ZmY7XG4gICAgfVxuICAgIGVsc2UgO1xuICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5QUk5HRGV0ZWN0RmFpbHVyZSwgXCJGYWlsZWQgdG8gZmluZCBhIHJlbGlhYmxlIFBSTkdcIik7XG59XG5mdW5jdGlvbiBkZXRlY3RSb290KCkge1xuICAgIGlmIChpbldlYldvcmtlcigpKVxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4gd2luZG93O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4gZ2xvYmFsO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbFRoaXM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZW5jb2RlUmFuZG9tKGxlbiwgcHJuZykge1xuICAgIGxldCBzdHIgPSBcIlwiO1xuICAgIGZvciAoOyBsZW4gPiAwOyBsZW4tLSkge1xuICAgICAgICBzdHIgPSByYW5kb21DaGFyKHBybmcpICsgc3RyO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuLyoqXG4gKiBFbmNvZGUgdGhlIHRpbWUgcG9ydGlvbiBvZiBhIFVMSURcbiAqIEBwYXJhbSBub3cgVGhlIGN1cnJlbnQgdGltZXN0YW1wXG4gKiBAcGFyYW0gbGVuIExlbmd0aCB0byBnZW5lcmF0ZVxuICogQHJldHVybnMgVGhlIGVuY29kZWQgdGltZVxuICovXG5mdW5jdGlvbiBlbmNvZGVUaW1lKG5vdywgbGVuID0gVElNRV9MRU4pIHtcbiAgICBpZiAoaXNOYU4obm93KSkge1xuICAgICAgICB0aHJvdyBuZXcgVUxJREVycm9yKFVMSURFcnJvckNvZGUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkLCBgVGltZSBtdXN0IGJlIGEgbnVtYmVyOiAke25vd31gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm93ID4gVElNRV9NQVgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVTaXplRXhjZWVkZWQsIGBDYW5ub3QgZW5jb2RlIGEgdGltZSBsYXJnZXIgdGhhbiAke1RJTUVfTUFYfTogJHtub3d9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vdyA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVOZWdhdGl2ZSwgYFRpbWUgbXVzdCBiZSBwb3NpdGl2ZTogJHtub3d9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKE51bWJlci5pc0ludGVnZXIobm93KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhbiBpbnRlZ2VyOiAke25vd31gKTtcbiAgICB9XG4gICAgbGV0IG1vZCwgc3RyID0gXCJcIjtcbiAgICBmb3IgKGxldCBjdXJyZW50TGVuID0gbGVuOyBjdXJyZW50TGVuID4gMDsgY3VycmVudExlbi0tKSB7XG4gICAgICAgIG1vZCA9IG5vdyAlIEVOQ09ESU5HX0xFTjtcbiAgICAgICAgc3RyID0gRU5DT0RJTkcuY2hhckF0KG1vZCkgKyBzdHI7XG4gICAgICAgIG5vdyA9IChub3cgLSBtb2QpIC8gRU5DT0RJTkdfTEVOO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuZnVuY3Rpb24gaW5XZWJXb3JrZXIoKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIFVMSURcbiAqIEBwYXJhbSBzZWVkVGltZSBPcHRpb25hbCB0aW1lIHNlZWRcbiAqIEBwYXJhbSBwcm5nIE9wdGlvbmFsIFBSTkcgZnVuY3Rpb25cbiAqIEByZXR1cm5zIEEgVUxJRCBzdHJpbmdcbiAqIEBleGFtcGxlXG4gKiAgdWxpZCgpOyAvLyBcIjAxSE5aWEQwN001Q0VONVhBNjZFTVpTUlpXXCJcbiAqL1xuZnVuY3Rpb24gdWxpZChzZWVkVGltZSwgcHJuZykge1xuICAgIGNvbnN0IGN1cnJlbnRQUk5HID0gZGV0ZWN0UFJORygpO1xuICAgIGNvbnN0IHNlZWQgPSBEYXRlLm5vdygpIDtcbiAgICByZXR1cm4gZW5jb2RlVGltZShzZWVkLCBUSU1FX0xFTikgKyBlbmNvZGVSYW5kb20oUkFORE9NX0xFTiwgY3VycmVudFBSTkcpO1xufVxuXG5jb25zdCBDT09LSUVfTkFNRSA9IFwib3BfYW5hbHl0aWNzX2RldmljZV90b2tlblwiO1xuY29uc3QgZ2V0RGV2aWNlVG9rZW4gPSAoKSA9PiB7XG4gIGNvbnN0IGV4aXN0aW5nQ29va2llID0gZG9jdW1lbnQuY29va2llLnNwbGl0KFwiO1wiKS5maW5kKChjb29raWUpID0+IGNvb2tpZS5pbmNsdWRlcyhDT09LSUVfTkFNRSkpO1xuICBpZiAoZXhpc3RpbmdDb29raWUpIHtcbiAgICByZXR1cm4gZXhpc3RpbmdDb29raWUuc3BsaXQoXCI9XCIpWzFdO1xuICB9XG4gIGNvbnN0IHRva2VuID0gdWxpZCgpO1xuICBzZXREZXZpY2VUb2tlbih0b2tlbik7XG4gIHJldHVybiB0b2tlbjtcbn07XG5jb25zdCBzZXREZXZpY2VUb2tlbiA9ICh0b2tlbikgPT4ge1xuICBjb25zdCBvbmVZZWFyRnJvbU5vdyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpO1xuICBvbmVZZWFyRnJvbU5vdy5zZXRGdWxsWWVhcihvbmVZZWFyRnJvbU5vdy5nZXRGdWxsWWVhcigpICsgMSk7XG4gIGRvY3VtZW50LmNvb2tpZSA9IGAke0NPT0tJRV9OQU1FfT0ke3Rva2VufTsgcGF0aD0vOyBleHBpcmVzPSR7b25lWWVhckZyb21Ob3cudG9VVENTdHJpbmcoKX1gO1xufTtcblxuY29uc3QgZXh0cmFjdElzc3Vlc1BlckZpZWxkID0gKGVycm9yKSA9PiB7XG4gIGNvbnN0IGlzc3Vlc1BlckZpZWxkID0ge307XG4gIE9iamVjdC5lbnRyaWVzKGVycm9yKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gRmllbGROYW1lRW51bS5wYXJzZShrZXkpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5fZXJyb3JzKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWUuX2Vycm9ycztcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXNzdWVzUGVyRmllbGQ7XG59O1xuXG5jb25zdCBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0gPSAoZm9ybURpdiwgaW5pdGlhbERpY3QpID0+IHtcbiAgY29uc3QgaW5jbHVkZWRJbnB1dHMgPSBBcnJheS5mcm9tKGZvcm1EaXYucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKTtcbiAgY29uc3QgZXh0cmFEYXRhID0gaW5jbHVkZWRJbnB1dHMucmVkdWNlKChhY2MsIGlucHV0KSA9PiB7XG4gICAgY29uc3Qga2V5ID0gaW5wdXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICAgIGlmICgha2V5KSByZXR1cm4gYWNjO1xuICAgIGNvbnN0IHZhbHVlID0gaW5wdXQudHlwZSA9PT0gXCJjaGVja2JveFwiID8gaW5wdXQuY2hlY2tlZCA6IGlucHV0LnZhbHVlO1xuICAgIHJldHVybiB7IC4uLmFjYywgW2tleV06IHZhbHVlIH07XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGV4dHJhRGF0YTtcbn07XG5jb25zdCBwYXJzZUV2ZW50UGF5bG9hZCA9IChldmVudERhdGEpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRWxlbWVudEV2ZW50LnBhcnNlKGV2ZW50RGF0YSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgZXZlbnQgcGF5bG9hZDpcIiwgZXZlbnREYXRhLCBlcnJvcik7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmNvbnN0IGdlbmVyYXRlQW5vbnltb3VzVmFsdWVzID0gKCkgPT4ge1xuICBjb25zdCBpZCA9IHY0KCkuc3BsaXQoXCItXCIpWzBdO1xuICByZXR1cm4ge1xuICAgIGZpcnN0TmFtZTogYHh4XyR7aWR9YCxcbiAgICBsYXN0TmFtZTogYHh4XyR7aWR9YCxcbiAgICBlbWFpbDogYHh4XyR7aWR9QGVtYWlsLmNvbWAsXG4gICAgemlwQ29kZTogYHh4XyR7aWR9YCxcbiAgICBjb3VudHJ5OiBgVVNgXG4gIH07XG59O1xuY29uc3QgZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMgPSAoZmllbGRzKSA9PiB7XG4gIHJldHVybiB7XG4gICAgbGluZTE6IGZpZWxkc1tGaWVsZE5hbWUuTElORTFdLFxuICAgIGxpbmUyOiBmaWVsZHNbRmllbGROYW1lLkxJTkUyXSxcbiAgICBsaW5lMzogZmllbGRzW0ZpZWxkTmFtZS5MSU5FM10sXG4gICAgY2l0eTogZmllbGRzW0ZpZWxkTmFtZS5DSVRZXSxcbiAgICBzdGF0ZTogZmllbGRzW0ZpZWxkTmFtZS5TVEFURV0sXG4gICAgY291bnRyeTogZmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICB6aXBfY29kZTogZmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV1cbiAgfTtcbn07XG5jb25zdCBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMgPSAoZmllbGRzLCBjaGVja291dF9zZXR0aW5ncykgPT4ge1xuICBpZiAoIWNoZWNrb3V0X3NldHRpbmdzLnJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzKSByZXR1cm47XG4gIHJldHVybiB7XG4gICAgbGluZTE6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTFdLFxuICAgIGxpbmUyOiBmaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUyXSxcbiAgICBsaW5lMzogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FM10sXG4gICAgY2l0eTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSxcbiAgICBzdGF0ZTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0sXG4gICAgY291bnRyeTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSxcbiAgICB6aXBfY29kZTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV1cbiAgfTtcbn07XG5jb25zdCBnZXRGdWxsTmFtZSA9IChmaXJzdE5hbWUsIGxhc3ROYW1lKSA9PiB7XG4gIHJldHVybiBbZmlyc3ROYW1lLCBsYXN0TmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xufTtcblxuY29uc3Qgc3R5bGVzID0gKHsgd2lkdGgsIGhlaWdodCB9KSA9PiBgXG5Aa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cblxuLm92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogMjE0NzQ4MzY0OCAhaW1wb3J0YW50O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xufVxuLmNvbnRhaW5lciB7XG4gIG1heC13aWR0aDogJHt3aWR0aCA/PyBcIjUwMHB4XCJ9O1xuICBtYXgtaGVpZ2h0OiAke2hlaWdodCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2Utb3V0O1xufVxuLmZyYW1lLCAjYWR5ZW4tY29udGFpbmVyLCAjYWR5ZW4tY29udGFpbmVyID4gKiB7XG4gIG1heC13aWR0aDogJHt3aWR0aCA/PyBcIjUwMHB4XCJ9O1xuICBtYXgtaGVpZ2h0OiAke2hlaWdodCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBib3JkZXI6IG5vbmU7XG59XG4uY2FuY2VsLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0b3A6IC0xLjVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIHJpZ2h0OiAwO1xufVxuYDtcbmNvbnN0IGJhbmtTZWxlY3RvclN0eWxlcyA9ICh7IHdpZHRoLCBoZWlnaHQgfSkgPT4gYFxuQGtleWZyYW1lcyBmYWRlSW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG5cbi5vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6IDIxNDc0ODM2NDggIWltcG9ydGFudDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cbi5jb250YWluZXIge1xuICBtYXgtd2lkdGg6ICR7d2lkdGggPz8gXCI1MDBweFwifTtcbiAgbWF4LWhlaWdodDogJHtoZWlnaHQgPz8gXCI2MDBweFwifTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGFuaW1hdGlvbjogZmFkZUluIDAuM3MgZWFzZS1vdXQ7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgYm94LXNoYWRvdzogMCAxMHB4IDI1cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuLmJhbmstc2VsZWN0b3ItY29udGVudCB7XG4gIHBhZGRpbmc6IDI0cHg7XG4gIG1heC1oZWlnaHQ6IGNhbGMoJHtoZWlnaHQgPz8gXCI2MDBweFwifSAtIDQ4cHgpO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuLmJhbmstc2VsZWN0b3ItaGVhZGVyIHtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBmb250LXdlaWdodDogNjAwO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBjb2xvcjogIzFhMWExYTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmJhbmstbGlzdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMTJweDtcbn1cbi5iYW5rLWl0ZW0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiAxNnB4O1xuICBib3JkZXI6IDJweCBzb2xpZCAjZTVlNWU1O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbn1cbi5iYW5rLWl0ZW06aG92ZXIge1xuICBib3JkZXItY29sb3I6ICMzYjgyZjY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGZhZmM7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcbiAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG59XG4uYmFuay1pdGVtOmFjdGl2ZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cbi5iYW5rLWxvZ28ge1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIG9iamVjdC1maXQ6IGNvbnRhaW47XG4gIG1hcmdpbi1yaWdodDogMTZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U5ZWNlZjtcbn1cbi5iYW5rLWxvZ28tcGxhY2Vob2xkZXIge1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tcmlnaHQ6IDE2cHg7XG4gIGNvbG9yOiAjNmM3NTdkO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLmJhbmstaW5mbyB7XG4gIGZsZXg6IDE7XG59XG4uYmFuay1kaXNwbGF5LW5hbWUge1xuICBmb250LXNpemU6IDFyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiAjMWExYTFhO1xuICBtYXJnaW4tYm90dG9tOiAycHg7XG59XG4uYmFuay1uYW1lIHtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgY29sb3I6ICM2Yzc1N2Q7XG59XG4uY2FuY2VsLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0b3A6IC0xLjVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIHJpZ2h0OiAwO1xufVxuYDtcbmNvbnN0IGNyZWF0ZUFuZE9wZW5GcmFtZSA9ICh1cmwsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgeyBpZCwgdGl0bGUsIHdpZHRoLCBoZWlnaHQsIG5hbWUgfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtzdHlsZXMoeyB3aWR0aCwgaGVpZ2h0IH0pfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke3VybH1cIiBjbGFzcz1cImZyYW1lXCIgaWQ9XCIke2lkID8/IFwidGhyZWUtZHMtaWZyYW1lXCJ9XCIgdGl0bGU9XCIke3RpdGxlID8/IFwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwifVwiIGFsbG93PVwicGF5bWVudFwiIG5hbWU9XCIke25hbWUgPz8gXCJ0aHJlZS1kcy1pZnJhbWVcIn1cIj48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xuICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICBjb25zdCBpZnJhbWUgPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpO1xuICBjb25zdCBjYW5jZWxCdXR0b24gPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChob3N0KTtcbiAgcmV0dXJuIHsgaG9zdCwgaWZyYW1lLCBjYW5jZWxCdXR0b24gfTtcbn07XG5jb25zdCBjcmVhdGVBbmRPcGVuQmFua1NlbGVjdG9yID0gKGJhbmtzLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdGl0bGUgfSA9IG9wdGlvbnMgPz8ge307XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gICAgY29uc3QgYmFua0xpc3RIdG1sID0gYmFua3MubWFwKChiYW5rLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbG9nb0h0bWwgPSBiYW5rLnJlc291cmNlcy5sb2dvX3VybCA/IGA8aW1nIHNyYz1cIiR7YmFuay5yZXNvdXJjZXMubG9nb191cmx9XCIgYWx0PVwiJHtiYW5rLmRpc3BsYXlfbmFtZX1cIiBjbGFzcz1cImJhbmstbG9nb1wiIC8+YCA6IGA8ZGl2IGNsYXNzPVwiYmFuay1sb2dvLXBsYWNlaG9sZGVyXCI+JHtiYW5rLmRpc3BsYXlfbmFtZS5zdWJzdHJpbmcoMCwgMikudG9VcHBlckNhc2UoKX08L2Rpdj5gO1xuICAgICAgcmV0dXJuIGBcbiAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstaXRlbVwiIGRhdGEtYmFuay1pbmRleD1cIiR7aW5kZXh9XCI+XG4gICAgICAgICAgJHtsb2dvSHRtbH1cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1pbmZvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1kaXNwbGF5LW5hbWVcIj4ke2JhbmsuZGlzcGxheV9uYW1lfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstbmFtZVwiPiR7YmFuay5iYW5rX25hbWV9PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGBcbiAgICAgIDxzdHlsZT5cbiAgICAgICAgJHtiYW5rU2VsZWN0b3JTdHlsZXMoeyB3aWR0aCwgaGVpZ2h0IH0pfVxuICAgICAgPC9zdHlsZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLXNlbGVjdG9yLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLXNlbGVjdG9yLWhlYWRlclwiPiR7dGl0bGUgPz8gXCJTZWxlY3QgeW91ciBiYW5rXCJ9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1saXN0XCI+XG4gICAgICAgICAgICAgICR7YmFua0xpc3RIdG1sfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBjb25zdCBzaGFkb3dSb290ID0gaG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgICBzaGFkb3dSb290LmFwcGVuZENoaWxkKHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpKTtcbiAgICBjb25zdCBjYW5jZWxCdXR0b24gPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgICBjb25zdCBiYW5rSXRlbXMgPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYmFuay1pdGVtXCIpO1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGhvc3QpO1xuICAgIH07XG4gICAgY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICByZWplY3QobmV3IEVycm9yKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpKTtcbiAgICB9KTtcbiAgICBiYW5rSXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICByZXNvbHZlKGJhbmtzW2luZGV4XSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3QpO1xuICB9KTtcbn07XG5jb25zdCBjcmVhdGVBbmRPcGVuTWljcm9EZXBvc2l0Rm9ybSA9IChwYXltZW50TWV0aG9kVHlwZSwgb3B0aW9ucykgPT4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGJhc2VVcmwgfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYGFwcC9kaXJlY3RfZGViaXQvbWljcm9fZGVwb3NpdC8/dHlwZT0ke3BheW1lbnRNZXRob2RUeXBlfWAsIGJhc2VVcmwpLnRvU3RyaW5nKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBjcmVhdGVBbmRPcGVuRnJhbWUodXJsLCB7IHdpZHRoLCBoZWlnaHQsIHRpdGxlOiBcIk1pY3JvIERlcG9zaXQgRm9ybVwiIH0pO1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIikpO1xuICAgIH07XG4gICAgY29uc3Qgb25TdWNjZXNzID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiAmJiByZXNwb25zZS5wYXlsb2FkKSB7XG4gICAgICAgIGlmIChcImVycm9yXCIgaW4gcmVzcG9uc2UucGF5bG9hZCkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IocmVzcG9uc2UucGF5bG9hZC5lcnJvcikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UucGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gZmFpbGVkXCIpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2FuY2VsKTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoXG4gICAgICBlbGVtZW50cy5pZnJhbWUsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBuZXcgVVJMKGJhc2VVcmwpLm9yaWdpbixcbiAgICAgIFwibWljcm8tZGVwb3NpdC1zdGF0dXNcIixcbiAgICAgIE1pY3JvRGVwb3NpdFN0YXR1c1Jlc3BvbnNlXG4gICAgKTtcbiAgICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gICAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgfTtcbiAgICBjb25zdCBvcmlnaW5hbEhhbmRsZUNhbmNlbCA9IGhhbmRsZUNhbmNlbDtcbiAgICBjb25zdCB3cmFwcGVkSGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgY2xlYW51cEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgICBvcmlnaW5hbEhhbmRsZUNhbmNlbCgpO1xuICAgIH07XG4gICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgd3JhcHBlZEhhbmRsZUNhbmNlbCk7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gc3RhcnRQb2xsaW5nKGlmcmFtZSwgb25TdWNjZXNzLCBjaGlsZE9yaWdpbiwgdHlwZSwgcmVzcG9uc2VNb2RlbCkge1xuICBjb25zdCBoYW5kbGVQb2xsaW5nID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBwaW5nQ2RlRm9yU3RhdHVzKGlmcmFtZSwgY2hpbGRPcmlnaW4sIHR5cGUsIHJlc3BvbnNlTW9kZWwpO1xuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgICAgIG9uU3VjY2VzcyhzdGF0dXMpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgfVxuICB9O1xuICBoYW5kbGVQb2xsaW5nKCk7XG4gIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHNldEludGVydmFsKGhhbmRsZVBvbGxpbmcsIENERV9QT0xMSU5HX0lOVEVSVkFMKTtcbiAgcmV0dXJuIHBvbGxpbmdJbnRlcnZhbDtcbn1cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50cyh7XG4gIGVsZW1lbnRzLFxuICBwb2xsaW5nSW50ZXJ2YWwsXG4gIHJlc29sdmVcbn0pIHtcbiAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZ0ludGVydmFsKTtcbiAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICBlbGVtZW50cy5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9ICgpID0+IHtcbiAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIH07XG4gIHJldHVybiBjbGVhbnVwRXZlbnRMaXN0ZW5lcnM7XG59XG5hc3luYyBmdW5jdGlvbiBzdGFydDNkc1ZlcmlmaWNhdGlvbihwYXJhbXMpIHtcbiAgY29uc3QgeyB1cmwsIGJhc2VVcmwsIGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LCBmcmFtZVRpdGxlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGVsZW1lbnRzID0gY3JlYXRlQW5kT3BlbkZyYW1lKHVybCwgeyB3aWR0aDogZnJhbWVXaWR0aCwgaGVpZ2h0OiBmcmFtZUhlaWdodCwgdGl0bGU6IGZyYW1lVGl0bGUgfSk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChzdGF0dXMpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgICAgfSwgMWUzKTtcbiAgICAgIHJlc29sdmUoc3RhdHVzKTtcbiAgICAgIGNsZWFudXBFdmVudExpc3RlbmVycz8uKCk7XG4gICAgfTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoXG4gICAgICBlbGVtZW50cy5pZnJhbWUsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBuZXcgVVJMKGJhc2VVcmwpLm9yaWdpbixcbiAgICAgIFwicGluZy0zZHMtc3RhdHVzXCIsXG4gICAgICBQaW5nM0RTU3RhdHVzUmVzcG9uc2VcbiAgICApO1xuICAgIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9IGhhbmRsZUV2ZW50cyh7XG4gICAgICBlbGVtZW50cyxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbCxcbiAgICAgIHJlc29sdmVcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24ocGFyYW1zKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyAhPT0gVGhyZWVEU1N0YXR1cy5TVUNDRVNTKSB7XG4gICAgYXNzZXJ0TmV2ZXIocmVzdWx0LnN0YXR1cyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBocmVmOiByZXN1bHQuaHJlZlxuICB9O1xufTtcbmNvbnN0IG9wZW5Qb3B1cFdpbmRvdyA9IChwb3B1cE5hbWUsIHVybCkgPT4ge1xuICBjb25zdCBwb3B1cFdpbmRvdyA9IHdpbmRvdy5vcGVuKHVybCwgXCJfYmxhbmtcIik7XG4gIGlmICghcG9wdXBXaW5kb3cpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cG9wdXBOYW1lfSBwb3B1cCB3aW5kb3cgYmxvY2tlZC4gUGxlYXNlIGFsbG93IHBvcHVwcyBmb3IgdGhpcyBzaXRlLmApO1xuICB9XG4gIHJldHVybiBwb3B1cFdpbmRvdztcbn07XG5jb25zdCBzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0ID0gYXN5bmMgKHBvcHVwTmFtZSwgY2RlQ29ubiwgZXhwZWN0ZWRWZXJpZnlUb2tlbiwgdXJsKSA9PiB7XG4gIGNvbnN0IHsgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9wdXAtdmVyaWZ5XCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHBvcHVwV2luZG93ID0gb3BlblBvcHVwV2luZG93KHBvcHVwTmFtZSwgdXJsKTtcbiAgICBjb25zdCBwb2xsaW5nID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdmVyaWZ5UmVzdWx0ID0gYXdhaXQgY2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWQoY2RlQ29ubiwgZXhwZWN0ZWRWZXJpZnlUb2tlbik7XG4gICAgICAgIGlmICh2ZXJpZnlSZXN1bHQucHJlc2VudCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZyk7XG4gICAgICAgICAgcG9wdXBXaW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICByZXNvbHZlKHsgaHJlZjogdmVyaWZ5UmVzdWx0LmhyZWYgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocG9wdXBXaW5kb3cuY2xvc2VkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3BvcHVwTmFtZX0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXJyX18oZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZyk7XG4gICAgICAgIHJlamVjdChnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn07XG5cbmNvbnN0IGRldGVjdExhbmd1YWdlID0gKCkgPT4ge1xuICBjb25zdCBsYW5ndWFnZXMgPSBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXMubGVuZ3RoID8gbmF2aWdhdG9yLmxhbmd1YWdlcyA6IFtuYXZpZ2F0b3IubGFuZ3VhZ2VdO1xuICBsZXQgbGFuZ3VhZ2UgPSBsYW5ndWFnZXM/LlswXTtcbiAgaWYgKGxhbmd1YWdlKSB7XG4gICAgbGFuZ3VhZ2UgPSBsYW5ndWFnZS5zcGxpdChcIi1cIilbMF07XG4gIH1cbiAgcmV0dXJuIGxhbmd1YWdlO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kdywgZXJyX186IGVycl9fJHcgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuY29uc3QgY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEgPSAoe1xuICByZXF1aXJlX3ppcF9jb2RlLFxuICByZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzLFxuICByZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyxcbiAgcGF5bWVudF9tZXRob2QsXG4gIGlzQnVzaW5lc3NQdXJjaGFzZVxufSwgbm9uQ2RlRm9ybUlucHV0cykgPT4ge1xuICBjb25zdCBjb25kaXRpb25hbEZpZWxkcyA9IHt9O1xuICBpZiAocGF5bWVudF9tZXRob2QgPT09IFwiYWNoXCIpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSB6LnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gei5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KTtcbiAgfVxuICBpZiAocmVxdWlyZV96aXBfY29kZSkge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAocmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzcykge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5MSU5FMV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuQ0lUWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU1RBVEVdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkNPVU5UUlldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChyZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcykge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19CVVNJTkVTU19QVVJDSEFTRV0gPz8gaXNCdXNpbmVzc1B1cmNoYXNlKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkJVU0lORVNTX05BTUVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKE9iamVjdC5rZXlzKGNvbmRpdGlvbmFsRmllbGRzKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUmVxdWlyZWRGb3JtRmllbGRzO1xuICB9XG4gIHJldHVybiBSZXF1aXJlZEZvcm1GaWVsZHMuZXh0ZW5kKGNvbmRpdGlvbmFsRmllbGRzKTtcbn07XG5jb25zdCB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHMgPSAobm9uQ2RlRm9ybUlucHV0cywgb25WYWxpZGF0aW9uRXJyb3IsIGRlZmF1bHRGaWVsZFZhbHVlcyA9IHt9KSA9PiB7XG4gIGlmIChkZWZhdWx0RmllbGRWYWx1ZXMpIHtcbiAgICBsb2dfXyR3KGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShkZWZhdWx0RmllbGRWYWx1ZXMpfWApO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0RmllbGRWYWx1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGVmYXVsdEZpZWxkVmFsdWVzW2tleV07XG4gICAgICBpZiAoIW5vbkNkZUZvcm1JbnB1dHNba2V5XSkge1xuICAgICAgICBub25DZGVGb3JtSW5wdXRzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSA9ICEhbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXTtcbiAgaWYgKG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10pIHtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTJdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTJdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUzXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUzXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNJVFldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNUQVRFXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNPVU5UUlldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXTtcbiAgfVxuICBjb25zdCB2YWxpZGF0aW9uU2NoZW1hID0gY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEoZGVmYXVsdEZpZWxkVmFsdWVzLCBub25DZGVGb3JtSW5wdXRzKTtcbiAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGlvblNjaGVtYS5zYWZlUGFyc2Uobm9uQ2RlRm9ybUlucHV0cyk7XG4gIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSByZXN1bHQuZXJyb3IuZm9ybWF0KCk7XG4gICAgY29uc3QgaXNzdWVzID0gZXh0cmFjdElzc3Vlc1BlckZpZWxkKGZvcm1hdHRlZCk7XG4gICAgY29uc3QgaXNzdWVLZXlzID0gT2JqZWN0LmtleXMoaXNzdWVzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlzc3VlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gaXNzdWVLZXlzW2ldO1xuICAgICAgY29uc3QgZXJyb3JzID0gaXNzdWVzW2ZpZWxkTmFtZV07XG4gICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9ycywgZmllbGROYW1lKTtcbiAgICB9XG4gICAgZXJyX18kdyhcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGlzc3Vlcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQWxtb3N0IHRoZXJlISBKdXN0IGEgZmV3IHRoaW5ncyBoaWdobGlnaHRlZCBhYm92ZSB0byBmaXggYmVmb3JlIHlvdSBjYW4gc3VibWl0LlwiKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LmRhdGE7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyR2LCBlcnJfXzogZXJyX18kdiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG5jb25zdCB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcztcbmNvbnN0IHZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyA9ICh0b2tlbml6ZVJlc3VsdHMsIG9uVmFsaWRhdGlvbkVycm9yKSA9PiB7XG4gIGZvciAoY29uc3QgdG9rZW5pemVSZXN1bHQgb2YgdG9rZW5pemVSZXN1bHRzKSB7XG4gICAgaWYgKHRva2VuaXplUmVzdWx0LnN1Y2Nlc3MgPT09IGZhbHNlKSB7XG4gICAgICB0b2tlbml6ZVJlc3VsdC5lcnJvcnMuZm9yRWFjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gQWxsRmllbGROYW1lcy5zYWZlUGFyc2UoZXJyb3IuZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgICAgICAgZXJyX18kdihgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke2Vycm9yLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIGVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBwYXJzZWQuZGF0YTtcbiAgICAgICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9yLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbG9nX18kdihgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkodG9rZW5pemVSZXN1bHQuZXJyb3JzKX1gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyB3aGlsZSB0b2tlbml6aW5nIGNhcmRcIik7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCB7IGVycl9fOiBlcnJfXyR1IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vblwiKTtcbmNvbnN0IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHtyZXNwb25zZS5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICB9XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiByZXNwb25zZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn07XG5jb25zdCBmaW5kQ3BtTWF0Y2hpbmdUeXBlID0gKGFsbENQTXMsIHpvZE1vZGVsKSA9PiB7XG4gIGNvbnN0IGNwbSA9IGFsbENQTXMuZmluZCgoY3BtMikgPT4gem9kTW9kZWwuc2FmZVBhcnNlKGNwbTIpLnN1Y2Nlc3MpO1xuICBpZiAoIWNwbSkge1xuICAgIGVycl9fJHUoYE5vIENQTXMgZm91bmQgZm9yIG1vZGVsLiBBbGwgbW9kZWxzOmAsIGFsbENQTXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWxgKTtcbiAgfVxuICByZXR1cm4gem9kTW9kZWwucGFyc2UoY3BtKTtcbn07XG5jb25zdCBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtID0gKGZpZWxkcywgY2hlY2tvdXRfc2V0dGluZ3MpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGZpZWxkcy5lbWFpbCxcbiAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBmaWVsZHMubGFzdE5hbWUsXG4gICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGZpZWxkcy5maXJzdE5hbWUsXG4gICAgY3VzdG9tZXJfYnVzaW5lc3NfbmFtZTogZmllbGRzLmJ1c2luZXNzTmFtZSxcbiAgICBjdXN0b21lcl90YXhfaWQ6IGZpZWxkcy50YXhJZCxcbiAgICBjdXN0b21lcl90YXhfaWRfdHlwZTogZmllbGRzLnRheElkVHlwZSxcbiAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMoZmllbGRzKSxcbiAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKGZpZWxkcywgY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gIH07XG59O1xuY29uc3QgcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCA9IGFzeW5jIChhcmdzKSA9PiB7XG4gIGNvbnN0IHsgbG9nX186IGxvZ19fMiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoYXJncy5sb2dQcmVmaXgpO1xuICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhcmdzLmFueUNkZUNvbm5lY3Rpb24pO1xuICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoYXJncy5jb25maXJtUmVzdWx0KTtcbiAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgbG9nX18yKGBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kLi4uYCk7XG4gICAgY29uc3Qgc2V0dXBSZXN1bHQgPSBhd2FpdCBmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZChhcmdzLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHBtX2lkOiBjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZFxuICAgIH0pO1xuICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBzZXR1cFJlc3VsdCB9O1xuICB9IGVsc2Uge1xuICAgIGlmIChhcmdzLnVzZVBheUZpcnN0Rmxvdykge1xuICAgICAgbG9nX18yKGBVc2luZyBwYXktZmlyc3QgZmxvdy4uLmApO1xuICAgICAgaWYgKCFhcmdzLmNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICAgICAgZXJyX18kdShcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGFyZ3MuY29uZmlybVJlc3VsdCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGFyZ3MuY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcGF5bWVudF9pbnB1dDogeyBwcm92aWRlcl90eXBlOiBhcmdzLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlciB9LFxuICAgICAgY3VzdG9tZXJfZW1haWw6IGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBjdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhhcmdzLnJlcXVpcmVkRm9ybUZpZWxkcyksXG4gICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMoYXJncy5yZXF1aXJlZEZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogY3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogYXJncy5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICB9O1xuICAgIGxvZ19fMihgRG9pbmcgY2hlY2tvdXQuLi5gLCBjaGVja291dFJlcXVlc3QpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcmZvcm1DaGVja291dChhcmdzLmFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgfVxufTtcblxuY29uc3QgUGF5bWVudFByb2Nlc3NvciA9IHouZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCIsIFwiYWR5ZW5cIiwgXCJwYXlwYWxcIiwgXCJwb2NreXRcIiwgXCJsb29wXCJdKTtcbih7XG4gIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZX0pO1xuY29uc3QgbG9hZFNjcmlwdCA9ICh7XG4gIHNjcmlwdElkLFxuICBzcmMsXG4gIGNoZWNrTG9hZGVkRm5cbn0pID0+IHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgc2NyaXB0LnNyYyA9IHNyYztcbiAgICBzY3JpcHQuaWQgPSBzY3JpcHRJZDtcbiAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xuICAgIGNvbnN0IGV4aXN0aW5nU2NyaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2NyaXB0SWQpO1xuICAgIGlmIChjaGVja0xvYWRlZEZuKCkpIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9IGVsc2UgaWYgKGV4aXN0aW5nU2NyaXB0KSB7XG4gICAgICBzY3JpcHQgPSBleGlzdGluZ1NjcmlwdDtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cbiAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwibG9hZFwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBldmVudExpc3RlbmVyQ29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IGV2ZW50TGlzdGVuZXJDb250cm9sbGVyLnNpZ25hbCB9XG4gICAgKTtcbiAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwiZXJyb3JcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgcmVqZWN0KFwiRmFpbGVkIHRvIGxvYWQgdGhlIHNjcmlwdFwiKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIuc2lnbmFsIH1cbiAgICApO1xuICB9KTtcbn07XG5cbmNvbnN0IGdldFBheW1lbnREYXRhUmVxdWVzdCA9ICh7XG4gIGdhdGV3YXksXG4gIGdhdGV3YXlNZXJjaGFudElkLFxuICBtZXJjaGFudE5hbWUsXG4gIG1lcmNoYW50SWQsXG4gIGluaXRpYWxQcmV2aWV3LFxuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICBwcmVmaWxsXG59KSA9PiB7XG4gIGNvbnN0IGFtb3VudEF0b20gPSBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmFtb3VudEF0b20gPz8gaW5pdGlhbFByZXZpZXc/LmFtb3VudEF0b20gPz8gMDtcbiAgY29uc3QgdG90YWxQcmljZSA9IE1hdGgubWF4KGFtb3VudEF0b20gLyAxMDAsIDApO1xuICBjb25zdCBjdXJyZW5jeUNvZGUgPSAob3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uYW1vdW50Py5jdXJyZW5jeSA/PyBwcmVmaWxsPy5jdXJyZW5jeSA/PyBpbml0aWFsUHJldmlldy5jdXJyZW5jeSkudG9VcHBlckNhc2UoKTtcbiAgY29uc3QgYmFzZVJlcXVlc3QgPSB7XG4gICAgYXBpVmVyc2lvbjogMixcbiAgICBhcGlWZXJzaW9uTWlub3I6IDAsXG4gICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ0FSRFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZEF1dGhNZXRob2RzOiBbXCJQQU5fT05MWVwiLCBcIkNSWVBUT0dSQU1fM0RTXCJdLFxuICAgICAgICAgIGFsbG93ZWRDYXJkTmV0d29ya3M6IFtcIkFNRVhcIiwgXCJESVNDT1ZFUlwiLCBcIklOVEVSQUNcIiwgXCJKQ0JcIiwgXCJNQVNURVJDQVJEXCIsIFwiVklTQVwiXSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1JlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogdHJ1ZSxcbiAgICAgICAgICBhbGxvd1ByZXBhaWRDYXJkczogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6YXRpb25TcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgdHlwZTogXCJQQVlNRU5UX0dBVEVXQVlcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBnYXRld2F5LFxuICAgICAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGVtYWlsUmVxdWlyZWQ6IHRydWUsXG4gICAgc2hpcHBpbmdBZGRyZXNzUmVxdWlyZWQ6IHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IG1lcmNoYW50SWQgPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZVxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlLFxuICAgICAgdG90YWxQcmljZVN0YXR1czogb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8ucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiB0b3RhbFByaWNlLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIGlmICghb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QpIHJldHVybiBiYXNlUmVxdWVzdDtcbiAgaWYgKHR5cGVvZiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Lmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4geyAuLi5iYXNlUmVxdWVzdCwgLi4ub3ZlcnJpZGVQYXltZW50UmVxdWVzdC5nb29nbGVQYXlQYXltZW50UmVxdWVzdChiYXNlUmVxdWVzdCkgfTtcbiAgfVxuICByZXR1cm4geyAuLi5iYXNlUmVxdWVzdCwgLi4ub3ZlcnJpZGVQYXltZW50UmVxdWVzdC5nb29nbGVQYXlQYXltZW50UmVxdWVzdCB9O1xufTtcbmNvbnN0IGxvYWRHb29nbGVQYXlTY3JpcHQgPSAoKSA9PiB7XG4gIHJldHVybiBsb2FkU2NyaXB0KHtcbiAgICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2dvb2dsZV9wYXlfc2RrXCIsXG4gICAgc3JjOiBcImh0dHBzOi8vcGF5Lmdvb2dsZS5jb20vZ3AvcC9qcy9wYXkuanNcIixcbiAgICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5nb29nbGU/LnBheW1lbnRzPy5hcGlcbiAgfSk7XG59O1xubGV0IHBheW1lbnRzQ2xpZW50ID0gbnVsbDtcbmNvbnN0IGdldEdvb2dsZVBheUVudmlyb25tZW50ID0gYXN5bmMgKGJhc2VVcmwpID0+IHtcbiAgY29uc3QgZW52ID0gYXdhaXQgZ2V0Q3VycmVudEVudihiYXNlVXJsKTtcbiAgcmV0dXJuIGVudiA9PT0gXCJwcm9kXCIgPyBcIlBST0RVQ1RJT05cIiA6IFwiVEVTVFwiO1xufTtcbmNvbnN0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50ID0gYXN5bmMgKGJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCkgPT4ge1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGF3YWl0IGdldEdvb2dsZVBheUVudmlyb25tZW50KGJhc2VVcmwpO1xuICBpZiAocGF5bWVudHNDbGllbnQgPT09IG51bGwpIHtcbiAgICBwYXltZW50c0NsaWVudCA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgICBlbnZpcm9ubWVudCxcbiAgICAgIG1lcmNoYW50SW5mbzogcGF5bWVudERhdGFSZXF1ZXN0Lm1lcmNoYW50SW5mb1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBwYXltZW50c0NsaWVudDtcbn07XG5jb25zdCBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICBjb25zdCBjb21tb25BY3Rpb24gPSByZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICBpZiAoIWNvbW1vbkFjdGlvbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UoY29tbW9uQWN0aW9uKTtcbn07XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheSA9IChmb3JtSW5wdXRzLCBwYXltZW50RGF0YSkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8uaW5mbz8uYmlsbGluZ0FkZHJlc3M7XG4gIGNvbnN0IHNoaXBwaW5nQWRkcmVzcyA9IHBheW1lbnREYXRhLnNoaXBwaW5nQWRkcmVzcztcbiAgaWYgKGJpbGxpbmdBZGRyZXNzKSB7XG4gICAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5sYXN0TmFtZVBhcnRzXSA9IGJpbGxpbmdBZGRyZXNzLm5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgICBjb25zdCBwYXllckxhc3ROYW1lID0gbGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBwYXltZW50RGF0YS5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MSU5FMV0gPSBpbnB1dHNbRmllbGROYW1lLkxJTkUxXSB8fCBiaWxsaW5nQWRkcmVzcy5hZGRyZXNzMSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTElORTJdID0gaW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl0gfHwgYmlsbGluZ0FkZHJlc3MuYWRkcmVzczIgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxJTkUzXSA9IGlucHV0c1tGaWVsZE5hbWUuTElORTNdIHx8IGJpbGxpbmdBZGRyZXNzLmFkZHJlc3MzIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DSVRZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ0lUWV0gfHwgYmlsbGluZ0FkZHJlc3MubG9jYWxpdHkgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlNUQVRFXSA9IGlucHV0c1tGaWVsZE5hbWUuU1RBVEVdIHx8IGJpbGxpbmdBZGRyZXNzLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IGJpbGxpbmdBZGRyZXNzLmNvdW50cnlDb2RlIHx8IFwiVVNcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IGJpbGxpbmdBZGRyZXNzLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IGZpcnN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgcGF5ZXJGaXJzdE5hbWUgfHwgXCJcIjtcbiAgICBjb25zdCBsYXN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwYXllckxhc3ROYW1lIHx8IFwiXCI7XG4gICAgaWYgKGZpcnN0TmFtZSB8fCBsYXN0TmFtZSkge1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgICB9XG4gIH1cbiAgaWYgKHNoaXBwaW5nQWRkcmVzcykge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTFdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gfHwgc2hpcHBpbmdBZGRyZXNzLmFkZHJlc3MxIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMl0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUyXSB8fCBzaGlwcGluZ0FkZHJlc3MuYWRkcmVzczIgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUzXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdIHx8IHNoaXBwaW5nQWRkcmVzcy5hZGRyZXNzMyB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldIHx8IHNoaXBwaW5nQWRkcmVzcy5sb2NhbGl0eSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV0gfHwgc2hpcHBpbmdBZGRyZXNzLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0gfHwgc2hpcHBpbmdBZGRyZXNzLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldIHx8IHNoaXBwaW5nQWRkcmVzcy5jb3VudHJ5Q29kZSB8fCBcIlVTXCI7XG4gIH1cbiAgcmV0dXJuIGlucHV0cztcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHUsIGVycl9fOiBlcnJfXyR0IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1iYWNzXCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4QkFDU0Zsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgdmVyaWZpY2F0aW9uTWV0aG9kID0gY3VzdG9tUGFyYW1zLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInRydWVsYXllclwiO1xuICAgIGxldCBtaWNyb0RlcG9zaXREYXRhID0gbnVsbDtcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgbG9nX18kdShcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBtaWNyb0RlcG9zaXREYXRhID0gYXdhaXQgY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0oXCJiYWNzX2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMzUwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJHUoXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kdShcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBhdmFpbGFibGVCYW5rcyA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5hdmFpbGFibGVfYmFua3M7XG4gICAgbGV0IHNlbGVjdGVkQmFuaztcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcInRydWVsYXllclwiICYmIGF2YWlsYWJsZUJhbmtzICYmIGF2YWlsYWJsZUJhbmtzLmxlbmd0aCA+PSAxKSB7XG4gICAgICBsb2dfXyR1KFwiTXVsdGlwbGUgYmFua3MgYXZhaWxhYmxlLCBzaG93aW5nIGJhbmsgc2VsZWN0b3IuLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBzZWxlY3RlZEJhbmsgPSBhd2FpdCBjcmVhdGVBbmRPcGVuQmFua1NlbGVjdG9yKGF2YWlsYWJsZUJhbmtzLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNTAwcHhcIixcbiAgICAgICAgICB0aXRsZTogXCJTZWxlY3QgYmFua1wiXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyR1KGBCYW5rIHNlbGVjdGVkOiAke3NlbGVjdGVkQmFuay5kaXNwbGF5X25hbWV9YCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dfXyR1KFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGJpbGxpbmdBZGRyZXNzID0gZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyk7XG4gICAgY29uc3QgZGlyZWN0RGViaXREYXRhID0ge1xuICAgICAgdHlwZTogXCJiYWNzX2RpcmVjdF9kZWJpdFwiLFxuICAgICAgYmFjc19kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gVHJ1ZUxheWVyXG4gICAgICAgIGJhbmtfbmFtZTogc2VsZWN0ZWRCYW5rPy5iYW5rX25hbWUsXG4gICAgICAgIC8vIE1pY3JvZGVwb3NpdFxuICAgICAgICBvd25lcl9uYW1lOiBnZXRGdWxsTmFtZShub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSwgbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGNvdW50cnlfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgIGFjY291bnRfbnVtYmVyOiBtaWNyb0RlcG9zaXREYXRhPy5hY2NvdW50X251bWJlcixcbiAgICAgICAgc29ydF9jb2RlOiBtaWNyb0RlcG9zaXREYXRhPy5zb3J0X2NvZGUsXG4gICAgICAgIGFkZHJlc3M6IHsgLi4uYmlsbGluZ0FkZHJlc3MsIHRvd246IGJpbGxpbmdBZGRyZXNzLmNpdHksIHBvc3Rjb2RlOiBiaWxsaW5nQWRkcmVzcy56aXBfY29kZSB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IGRpcmVjdERlYml0RGF0YVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApPy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHJlZGlyZWN0VXJsKSB7XG4gICAgICBsb2dfXyR1KFwiQkFDUyB2ZXJpZmljYXRpb24gcmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkJBQ1MgdmVyaWZpY2F0aW9uXCJcbiAgICAgIH0pO1xuICAgICAgbG9nX18kdShg4pWwIEJBQ1MgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCQUNTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQkFDUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBuZXdDb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWJhY3NcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IG5ld0NvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kdChcIkJBQ1MgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyR0LCBlcnJfXzogZXJyX18kcyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtZWZ0XCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4RUZURmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCB2ZXJpZmljYXRpb25NZXRob2QgPSBjdXN0b21QYXJhbXMudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwicGxhaWRcIjtcbiAgICBsZXQgbWljcm9EZXBvc2l0RGF0YSA9IG51bGw7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJtaWNyb19kZXBvc2l0XCIpIHtcbiAgICAgIGxvZ19fJHQoXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWljcm9EZXBvc2l0RGF0YSA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5NaWNyb0RlcG9zaXRGb3JtKFwiZWZ0X2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNDUwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJHQoXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kdChcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBkaXJlY3REZWJpdERhdGEgPSB7XG4gICAgICB0eXBlOiBcImVmdF9kaXJlY3RfZGViaXRcIixcbiAgICAgIGVmdF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gUGxhaWRcbiAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogY3VzdG9tUGFyYW1zLmlzQnVzaW5lc3NBY2NvdW50ID8/IGZhbHNlLFxuICAgICAgICBvd25lcl9uYW1lOiBnZXRGdWxsTmFtZShub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSwgbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIC8vIE1pY3JvZGVwb3NpdFxuICAgICAgICBpbnN0aXR1dGlvbl9udW1iZXI6IG1pY3JvRGVwb3NpdERhdGE/Lmluc3RpdHV0aW9uX251bWJlcixcbiAgICAgICAgdHJhbnNpdF9udW1iZXI6IG1pY3JvRGVwb3NpdERhdGE/LnRyYW5zaXRfbnVtYmVyLFxuICAgICAgICBhY2NvdW50X251bWJlcjogbWljcm9EZXBvc2l0RGF0YT8uYWNjb3VudF9udW1iZXJcbiAgICAgICAgLy8gbWFuZGF0ZV92ZXJzaW9uOiB1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiB2ZXJpZmljYXRpb25NZXRob2QsXG4gICAgICAgIGRpcmVjdF9kZWJpdF9kYXRhOiBkaXJlY3REZWJpdERhdGFcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKT8ucmVkaXJlY3RfdXJsO1xuICAgIGlmIChyZWRpcmVjdFVybCkge1xuICAgICAgbG9nX18kdChcIkVGVCB2ZXJpZmljYXRpb24gcmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkVGVCB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBsb2dfXyR0KGDilbAgRUZUIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRUZUIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRUZUIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZWZ0XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBuZXdDb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJHMoXCJFRlQgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRzLCBlcnJfXzogZXJyX18kciB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtc2VwYVwiKTtcbmNvbnN0IHJ1bkFpcndhbGxleFNFUEFGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHZlcmlmaWNhdGlvbk1ldGhvZCA9IGN1c3RvbVBhcmFtcy52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJ0cnVlbGF5ZXJcIjtcbiAgICBsZXQgbWljcm9EZXBvc2l0RGF0YSA9IG51bGw7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJtaWNyb19kZXBvc2l0XCIpIHtcbiAgICAgIGxvZ19fJHMoXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWljcm9EZXBvc2l0RGF0YSA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5NaWNyb0RlcG9zaXRGb3JtKFwic2VwYV9kaXJlY3RfZGViaXRcIiwge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjMwMHB4XCIsXG4gICAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRzKFwiTWljcm8gZGVwb3NpdCBkYXRhIGNvbGxlY3RlZFwiKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ19fJHMoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBjb25zdCBzdGFydEZsb3dOZXh0QWN0aW9ucyA9IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgY29uc2VudElkID0gc3RhcnRGbG93TmV4dEFjdGlvbnM/LmNvbnNlbnRfaWQ7XG4gICAgY29uc3QgYXZhaWxhYmxlQmFua3MgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uYXZhaWxhYmxlX2JhbmtzO1xuICAgIGxldCBzZWxlY3RlZEJhbms7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJ0cnVlbGF5ZXJcIiAmJiBhdmFpbGFibGVCYW5rcyAmJiBhdmFpbGFibGVCYW5rcy5sZW5ndGggPj0gMSkge1xuICAgICAgbG9nX18kcyhcIk11bHRpcGxlIGJhbmtzIGF2YWlsYWJsZSwgc2hvd2luZyBiYW5rIHNlbGVjdG9yLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2VsZWN0ZWRCYW5rID0gYXdhaXQgY3JlYXRlQW5kT3BlbkJhbmtTZWxlY3RvcihhdmFpbGFibGVCYW5rcywge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjUwMHB4XCIsXG4gICAgICAgICAgdGl0bGU6IFwiU2VsZWN0IGJhbmtcIlxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kcyhgQmFuayBzZWxlY3RlZDogJHtzZWxlY3RlZEJhbmsuZGlzcGxheV9uYW1lfWApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kcyhcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcInNlcGFfZGlyZWN0X2RlYml0XCIsXG4gICAgICAgICAgc2VwYV9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgICAgIC8vIHRydWVsYXllclxuICAgICAgICAgICAgYmFua19uYW1lOiBzZWxlY3RlZEJhbms/LmJhbmtfbmFtZSxcbiAgICAgICAgICAgIGNvdW50cnlfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgICAgICAvLyBtaWNyb2RlcG9zaXRcbiAgICAgICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgICAgICBpYmFuOiBtaWNyb0RlcG9zaXREYXRhPy5pYmFuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk/LnJlZGlyZWN0X3VybDtcbiAgICBpZiAocmVkaXJlY3RVcmwpIHtcbiAgICAgIGxvZ19fJHMoXCJTRVBBIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiU0VQQSB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBsb2dfXyRzKGDilbAgU0VQQSB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNFUEEgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTRVBBIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtc2VwYVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogbmV3Q29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRyKFwiU0VQQSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHIsIGVycl9fOiBlcnJfXyRxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFpcndhbGxleC1jY1wiKTtcbmNvbnN0IEFpcndhbGxleDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzID0gei5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBwYXJzZVJlc3BvbnNlSGVhZGVycyQzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gQWlyd2FsbGV4M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMuc2FmZVBhcnNlKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZnJpZW5kbHlFcnIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG4gICAgY29uc3QgZGV2RXJyID0gYEFpcndhbGxleCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gO1xuICAgIGVycl9fJHEoZGV2RXJyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc0FpcndhbGxleDNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdICE9PSB2b2lkIDA7XG59O1xuY29uc3QgcGFyc2VJbnRlbnRJZEZyb20zZHNIcmVmID0gKGhyZWYpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBpbnRlbnRJZCA9IG5ldyBVUkwoaHJlZiA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwicGF5bWVudF9pbnRlbnRfaWRcIik7XG4gICAgaWYgKCFpbnRlbnRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW50ZW50IElEIGZvdW5kIGluIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICB9XG4gICAgbG9nX18kcihgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHtpbnRlbnRJZH1dYCk7XG4gICAgcmV0dXJuIGludGVudElkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVyck1zZyA9IGBFcnJvciB2ZXJpZnlpbmcgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LmA7XG4gICAgZXJyX18kcShlcnJNc2csIGBSZXN1bHRpbmcgVVJMOiAke2hyZWZ9LlxuRXJyb3I6ICR7Z2V0RXJyb3JNZXNzYWdlKGVycm9yKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgfVxufTtcbmNvbnN0IHJ1bkFpcndhbGxleDNkc0Zsb3cgPSBhc3luYyAoYmFzZVVybCwgZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDMoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCh7IHVybDogaGVhZGVyc1tcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdLCBiYXNlVXJsIH0pO1xuICBjb25zdCBpbnRlbnRJZCA9IHBhcnNlSW50ZW50SWRGcm9tM2RzSHJlZihyZXN1bHQuaHJlZiA/PyBcIlwiKTtcbiAgY29uc3QgaW5pdGlhbEludGVudElkID0gaGVhZGVyc1tcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiXTtcbiAgaWYgKGluaXRpYWxJbnRlbnRJZCAhPT0gaW50ZW50SWQpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7aW50ZW50SWR9KSBkb2VzIG5vdCBtYXRjaCB0aGUgaW5pdGlhbCBpbnRlbnQgSUQgKCR7aW5pdGlhbEludGVudElkfSkuYDtcbiAgICBlcnJfXyRxKGRldkVycik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICBjb25zdCBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBpbnRlbnRJZCxcbiAgICAgIGNvbnNlbnRfaWQ6IGhlYWRlcnNbXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiXVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGV4dHJhTWV0YWRhdGFGb3JDaGVja291dDtcbn07XG5jb25zdCBBcHBsZVBheUNwbSQyID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgR29vZ2xlUGF5Q3BtJDIgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5jb25zdCBsb2FkQXBwbGVQYXlTY3JpcHQgPSAoKSA9PiB7XG4gIHJldHVybiBsb2FkU2NyaXB0KHtcbiAgICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2FwcGxlX3BheV9zZGtcIixcbiAgICBzcmM6IFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tL2pzYXBpLzEubGF0ZXN0L2FwcGxlLXBheS1zZGsuanNcIixcbiAgICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5BcHBsZVBheVNlc3Npb25cbiAgfSk7XG59O1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheSA9IChmb3JtSW5wdXRzLCBhcHBsZVBheVBheW1lbnQpID0+IHtcbiAgY29uc3QgcG1CaWxsaW5nQ29udGFjdCA9IGFwcGxlUGF5UGF5bWVudC50b2tlbi5wYXltZW50TWV0aG9kLmJpbGxpbmdDb250YWN0O1xuICBjb25zdCBiaWxsaW5nQ29udGFjdCA9IGFwcGxlUGF5UGF5bWVudC5iaWxsaW5nQ29udGFjdDtcbiAgY29uc3Qgc2hpcHBpbmdDb250YWN0ID0gYXBwbGVQYXlQYXltZW50LnNoaXBwaW5nQ29udGFjdDtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGlmIChwbUJpbGxpbmdDb250YWN0IHx8IGJpbGxpbmdDb250YWN0IHx8IHNoaXBwaW5nQ29udGFjdCkge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgcG1CaWxsaW5nQ29udGFjdD8uZW1haWxBZGRyZXNzIHx8IGJpbGxpbmdDb250YWN0Py5lbWFpbEFkZHJlc3MgfHwgc2hpcHBpbmdDb250YWN0Py5lbWFpbEFkZHJlc3MgfHwgXCJvcF91bmZpbGxlZEBlbWFpbC5jb21cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBwbUJpbGxpbmdDb250YWN0Py5jb3VudHJ5Q29kZSB8fCBiaWxsaW5nQ29udGFjdD8uY291bnRyeUNvZGUgfHwgc2hpcHBpbmdDb250YWN0Py5jb3VudHJ5Q29kZSB8fCBcIlVTXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBwbUJpbGxpbmdDb250YWN0Py5wb3N0YWxDb2RlIHx8IGJpbGxpbmdDb250YWN0Py5wb3N0YWxDb2RlIHx8IHNoaXBwaW5nQ29udGFjdD8ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwbUJpbGxpbmdDb250YWN0Py5naXZlbk5hbWUgfHwgYmlsbGluZ0NvbnRhY3Q/LmdpdmVuTmFtZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LmdpdmVuTmFtZSB8fCBcIlwiO1xuICAgIGNvbnN0IGxhc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmZhbWlseU5hbWUgfHwgYmlsbGluZ0NvbnRhY3Q/LmZhbWlseU5hbWUgfHwgc2hpcHBpbmdDb250YWN0Py5mYW1pbHlOYW1lIHx8IFwiXCI7XG4gICAgaWYgKGZpcnN0TmFtZSB8fCBsYXN0TmFtZSkge1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlucHV0cztcbn07XG56Lm9iamVjdCh7XG4gIGRhdGE6IHoub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gICAgZXJyb3JzOiB6LmFycmF5KHouYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6LnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6LmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pO1xuY29uc3QgY3JlYXRlUmVjdXJyaW5nUGF5bWVudFJlcXVlc3QgPSAoe1xuICB0b3RhbCxcbiAgcHJlZmlsbFxufSkgPT4ge1xuICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IHRvdGFsLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgYmlsbGluZyBwb3J0YWwgdXJsXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9wYXNza2l0L3BrcmVjdXJyaW5ncGF5bWVudHJlcXVlc3QvbWFuYWdlbWVudHVybCNEaXNjdXNzaW9uXG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHVzZWQgd2hlbiB1c2VyIHJlbW92ZSBhIGNhcmQgZnJvbSB0aGVpciBBcHBsZVBheSB3YWxsZXQuXG4gICAgICAvLyBDdXJyZW50eSBzZXQgdG8gY2hlY2tvdXQgc2Vzc2lvbiB1cmwgdG8gc2F0aXNmeSBBcHBsZVBheSB0eXBlc1xuICAgICAgbWFuYWdlbWVudFVSTDogbmV3IFVSTChgL3BheS8ke3ByZWZpbGwudG9rZW59YCwgRlJBTUVfQkFTRV9VUkwpLnRvU3RyaW5nKClcbiAgICB9O1xuICB9XG4gIGNvbnN0IGxpbmVJdGVtID0gcHJlZmlsbC5saW5lX2l0ZW1zPy5bMF07XG4gIGlmICghbGluZUl0ZW0pIHJldHVybiB2b2lkIDA7XG4gIHJldHVybiB7XG4gICAgcGF5bWVudERlc2NyaXB0aW9uOiBsaW5lSXRlbT8uZGVzY3JpcHRpb24gPz8gXCJcIixcbiAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgYW1vdW50OiB0b3RhbC5hbW91bnQsXG4gICAgICBsYWJlbDogbGluZUl0ZW0/LmRlc2NyaXB0aW9uID8/IFwiXCIsXG4gICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxVbml0OiBsaW5lSXRlbT8uYmlsbGluZ19pbnRlcnZhbCxcbiAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbENvdW50OiBsaW5lSXRlbT8uYmlsbGluZ19pbnRlcnZhbF9jb3VudCA/PyB2b2lkIDAsXG4gICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgfSxcbiAgICBtYW5hZ2VtZW50VVJMOiBgaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb20vcGF5LyR7cHJlZmlsbC50b2tlbn1gXG4gIH07XG59O1xuY29uc3QgY3JlYXRlQXBwbGVQYXlUb3RhbCA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gIGluaXRpYWxQcmV2aWV3LFxuICBwcmVmaWxsLFxuICBkZWZhdWx0TGFiZWwgPSBcIlRvdGFsXCJcbn0pID0+IHtcbiAgY29uc3QgY3VycmVuY3lDb2RlID0gKG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFtb3VudD8uY3VycmVuY3kgPz8gcHJlZmlsbD8uY3VycmVuY3kgPz8gaW5pdGlhbFByZXZpZXcuY3VycmVuY3kpLnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IGFtb3VudEF0b20gPSBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmFtb3VudEF0b20gPz8gaW5pdGlhbFByZXZpZXc/LmFtb3VudEF0b20gPz8gMDtcbiAgY29uc3QgYW1vdW50ID0gKGFtb3VudEF0b20gLyAxMDApLnRvRml4ZWQoMik7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3lDb2RlLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8ubGFiZWwgPz8gZGVmYXVsdExhYmVsID8/IFwiVG90YWxcIixcbiAgICAgIHR5cGU6IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LnBlbmRpbmcgPyBcInBlbmRpbmdcIiA6IFwiZmluYWxcIixcbiAgICAgIGFtb3VudFxuICAgIH1cbiAgfTtcbn07XG5jb25zdCBnZXRBcHBsZVBheVBheW1lbnRSZXF1ZXN0ID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgaW5pdGlhbFByZXZpZXcsXG4gIHByZWZpbGwsXG4gIGRlZmF1bHRMYWJlbFxufSkgPT4ge1xuICBjb25zdCB7IGN1cnJlbmN5Q29kZSwgdG90YWwgfSA9IGNyZWF0ZUFwcGxlUGF5VG90YWwoe1xuICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgaW5pdGlhbFByZXZpZXcsXG4gICAgcHJlZmlsbCxcbiAgICBkZWZhdWx0TGFiZWxcbiAgfSk7XG4gIGxldCBwYXltZW50UmVxdWVzdCA9IHtcbiAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgIGN1cnJlbmN5Q29kZSxcbiAgICByZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiLCBcInBvc3RhbEFkZHJlc3NcIiwgXCJuYW1lXCJdLFxuICAgIHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzOiBbXG4gICAgICBcImVtYWlsXCIsXG4gICAgICAuLi5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzLnJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzID8gW1wicG9zdGFsQWRkcmVzc1wiXSA6IFtdXG4gICAgXSxcbiAgICBzdXBwb3J0ZWROZXR3b3JrczogW1widmlzYVwiLCBcIm1hc3RlckNhcmRcIiwgXCJhbWV4XCIsIFwiZGlzY292ZXJcIiwgXCJqY2JcIl0sXG4gICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IFtcInN1cHBvcnRzM0RTXCIsIFwic3VwcG9ydHNDcmVkaXRcIiwgXCJzdXBwb3J0c0RlYml0XCJdLFxuICAgIHRvdGFsXG4gIH07XG4gIGNvbnN0IGlzQWxsUmVjdXJyaW5nID0gcHJlZmlsbC5saW5lX2l0ZW1zLmV2ZXJ5KChpdGVtKSA9PiBpdGVtLmJpbGxpbmdfaW50ZXJ2YWwgJiYgaXRlbS5iaWxsaW5nX2ludGVydmFsX2NvdW50KTtcbiAgaWYgKGlzQWxsUmVjdXJyaW5nKSB7XG4gICAgcGF5bWVudFJlcXVlc3QucmVjdXJyaW5nUGF5bWVudFJlcXVlc3QgPSBjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCh7XG4gICAgICB0b3RhbCxcbiAgICAgIHByZWZpbGxcbiAgICB9KTtcbiAgfVxuICBpZiAoIW92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QpIHJldHVybiBwYXltZW50UmVxdWVzdDtcbiAgaWYgKHR5cGVvZiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHBheW1lbnRSZXF1ZXN0ID0ge1xuICAgICAgLi4ucGF5bWVudFJlcXVlc3QsXG4gICAgICAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QocGF5bWVudFJlcXVlc3QpXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBwYXltZW50UmVxdWVzdCA9IHsgLi4ucGF5bWVudFJlcXVlc3QsIC4uLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QuYXBwbGVQYXlQYXltZW50UmVxdWVzdCB9O1xuICB9XG4gIHJldHVybiBwYXltZW50UmVxdWVzdDtcbn07XG5cbmNvbnN0IEFkeWVuRW52aXJvbm1lbnQgPSB6LmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pO1xuY29uc3QgQWR5ZW5Mb2NhbGUgPSB6LmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyRxLCBlcnJfXzogZXJyX18kcCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhZHllbi1jY1wiKTtcbmNvbnN0IEFkeWVuM2RzUmVzcG9uc2VIZWFkZXJzID0gei5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1jbGllbnQta2V5XCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tZW52aXJvbm1lbnRcIjogQWR5ZW5FbnZpcm9ubWVudCxcbiAgXCJvcC1hZHllbi1hY3Rpb25cIjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDIgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBZHllbjNkc1Jlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRwKGBBZHllbiAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGRlY29kZUFkeWVuQWN0aW9uID0gKGFjdGlvbikgPT4ge1xuICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBKU09OLnBhcnNlKGFjdGlvbik7XG4gIHJldHVybiBkZXNlcmlhbGl6ZWQ7XG59O1xuY29uc3QgaXNBZHllbkF2YWlsYWJsZSA9ICgpID0+IHtcbiAgcmV0dXJuIFwiQWR5ZW5XZWJcIiBpbiB3aW5kb3cgJiYgXCJBZHllbkNoZWNrb3V0XCIgaW4gd2luZG93W1wiQWR5ZW5XZWJcIl07XG59O1xuY29uc3QgZ2V0QWR5ZW5DaGVja291dCA9IGFzeW5jICgpID0+IHtcbiAgbG9nX18kcShcIldhaXRpbmcgZm9yIEFkeWVuIFNESyB0byBsb2FkLi4uXCIpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICBpZiAoIWlzQWR5ZW5BdmFpbGFibGUoKSkge1xuICAgICAgYXdhaXQgc2xlZXAoNTAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc0FkeWVuQXZhaWxhYmxlKCkpIHtcbiAgICBlcnJfXyRwKFwiQWR5ZW4gU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICBsb2dfXyRxKFwiQWR5ZW4gU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIik7XG4gIHJldHVybiB3aW5kb3dbXCJBZHllbldlYlwiXVtcIkFkeWVuQ2hlY2tvdXRcIl07XG59O1xuY29uc3QgaGFuZGxlQWR5ZW4zZHMgPSAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHsgaGVhZGVycywgbG9jYWxlLCBjb3VudHJ5Q29kZSwgY29tcG9uZW50LCBob3N0LCBjYW5jZWxCdXR0b24gfSA9IHBhcmFtcztcbiAgY29uc3QgYWN0aW9uID0gZGVjb2RlQWR5ZW5BY3Rpb24oaGVhZGVyc1tcIm9wLWFkeWVuLWFjdGlvblwiXSk7XG4gIGxvZ19fJHEoYFJ1bm5pbmcgQWR5ZW4gM0RTIGZsb3cgZm9yIGFjdGlvbiB0eXBlOiAke2FjdGlvbi50eXBlfWApO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgbG9nX18kcShcIkNsZWFuaW5nIHVwIEFkeWVuIDNEUyBmbG93XCIpO1xuICAgICAgY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNhbmNlbCk7XG4gICAgICBob3N0LnJlbW92ZSgpO1xuICAgIH07XG4gICAgY29uc3Qgb25QYXltZW50RmFpbGVkID0gKHN0YXRlKSA9PiB7XG4gICAgICBlcnJfXyRwKFwiQXV0aGVudGljYXRpb24gZmFpbGVkLiBSZXN1bHQ6XCIsIHN0YXRlKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuRkFJTFVSRSwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgIGVycl9fJHAoXCJBZHllbiBlcnJvcjpcIiwgZXJyb3IpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5GQUlMVVJFLCBjbGVhbnVwIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25DYW5jZWwgPSAoKSA9PiB7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DYW5jZWwpO1xuICAgIGNvbnN0IG9uQWRkaXRpb25hbERldGFpbHMgPSAoc3RhdGUsIF8sIF9fKSA9PiB7XG4gICAgICBob3N0LnJlbW92ZSgpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5TVUNDRVNTLCBhZGRpdGlvbmFsRGV0YWlsczogc3RhdGUsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBnZXRBZHllbkNoZWNrb3V0KCkudGhlbihcbiAgICAgIChhZHllbkNoZWNrb3V0KSA9PiBhZHllbkNoZWNrb3V0KHtcbiAgICAgICAgY2xpZW50S2V5OiBoZWFkZXJzW1wib3AtYWR5ZW4tY2xpZW50LWtleVwiXSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IGhlYWRlcnNbXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiXSxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBjb3VudHJ5Q29kZSxcbiAgICAgICAgb25BZGRpdGlvbmFsRGV0YWlscyxcbiAgICAgICAgb25QYXltZW50RmFpbGVkLFxuICAgICAgICBvbkVycm9yXG4gICAgICB9KVxuICAgICkudGhlbigoY2hlY2tvdXQpID0+IHtcbiAgICAgIGNoZWNrb3V0LmNyZWF0ZUZyb21BY3Rpb24oYWN0aW9uLCB7IGNoYWxsZW5nZVdpbmRvd1NpemU6IFwiMDNcIiB9KS5tb3VudChjb21wb25lbnQpO1xuICAgIH0pO1xuICB9KTtcbn07XG5jb25zdCBkZXRlcm1pbmVMb2NhbGUgPSAocHJlZmlsbExvY2FsZSkgPT4ge1xuICBjb25zdCBicm93c2VyTG9jYWxlID0gbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gOiBuYXZpZ2F0b3IubGFuZ3VhZ2U7XG4gIGNvbnN0IGxvY2FsZSA9IHByZWZpbGxMb2NhbGUgPz8gYnJvd3NlckxvY2FsZTtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBZHllbkxvY2FsZS5zYWZlUGFyc2UobG9jYWxlKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgZXJyX18kcChgUmVzb2x2ZWQgaW52YWxpZCBsb2NhbGU6ICR7bG9jYWxlfS4gRGVmYXVsdGluZyB0byBlbi1VUy5gKTtcbiAgICByZXR1cm4gXCJlbi1VU1wiO1xuICB9XG4gIGxvZ19fJHEoYFJlc29sdmVkIGxvY2FsZTogJHtwYXJzZVJlc3VsdC5kYXRhfWApO1xuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBjaGVja0lmUmVxdWlyZXNBZHllbjNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLWFkeWVuLWFjdGlvblwiXSAhPT0gdm9pZCAwO1xufTtcbmNvbnN0IHJ1bkFkeWVuM2RzRmxvdyA9IGFzeW5jIChjb3VudHJ5Q29kZSwgZXJyb3JSZXNwb25zZUhlYWRlcnMsIHByZWZpbGxMb2NhbGUpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDIoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCBjb21wb25lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjb21wb25lbnQuaWQgPSBcImFkeWVuLWNvbnRhaW5lclwiO1xuICBjb25zdCB7IGhvc3QsIGlmcmFtZSwgY2FuY2VsQnV0dG9uIH0gPSBjcmVhdGVBbmRPcGVuRnJhbWUoXCJodHRwOi8vZXhhbXBsZS5jb21cIik7XG4gIGlmcmFtZS5yZXBsYWNlV2l0aChjb21wb25lbnQpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVBZHllbjNkcyh7XG4gICAgaGVhZGVycyxcbiAgICBsb2NhbGU6IGRldGVybWluZUxvY2FsZShwcmVmaWxsTG9jYWxlKSxcbiAgICBjb3VudHJ5Q29kZSxcbiAgICBjb21wb25lbnQsXG4gICAgaG9zdCxcbiAgICBjYW5jZWxCdXR0b25cbiAgfSk7XG4gIHJlc3VsdC5jbGVhbnVwKCk7XG4gIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuU1VDQ0VTUykge1xuICAgIGlmICghcmVzdWx0LmFkZGl0aW9uYWxEZXRhaWxzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZCBidXQgbm8gYWRkaXRpb25hbCBkZXRhaWxzIHdlcmUgcmV0dXJuZWRcIik7XG4gICAgfVxuICAgIGxvZ19fJHEoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgICAgYWRkaXRpb25hbF9kZXRhaWxzOiByZXN1bHQuYWRkaXRpb25hbERldGFpbHMuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0TmV2ZXIocmVzdWx0LnN0YXR1cyk7XG4gIH1cbn07XG5jb25zdCBBcHBsZVBheUNwbSQxID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBHb29nbGVQYXlDcG0kMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhZHllblwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kcCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQyKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZXZlbnQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBjb250ZXh0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGNvbnN0IHBheW1lbnRTZXNzaW9uUmVzcG9uc2UgPSBuZXh0QWN0aW9uTWV0YWRhdGE/LltcImFwcGxlX3BheV9zZXNzaW9uXCJdO1xuICAgIGlmICghcGF5bWVudFNlc3Npb25SZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIH1cbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24ocGF5bWVudFNlc3Npb25SZXNwb25zZSk7XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5wYXltZW50U2Vzc2lvblJlc3BvbnNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnRleHQuc2Vzc2lvbi5hYm9ydCgpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMihldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHBheW1lbnREYXRhID0gZXZlbnQucGF5bWVudDtcbiAgICBjb25zdCBmb3JtSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheShjb250ZXh0Lm5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICBmb3JtSW5wdXRzLFxuICAgICAgY29udGV4dC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGNvbnRleHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBjb250ZXh0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgfSk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBicm93c2VyX2luZm86IGdldEZyYXVkTWV0YWRhdGEoKSxcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsb2dfXyRwKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgY29uc3Qgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuY29uc3QgeyBsb2dfXzogbG9nX18kbywgZXJyX186IGVycl9fJG8gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYWR5ZW4tYXBwbGUtcGF5XCIpO1xuY29uc3QgaW5pdEFkeWVuQXBwbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDEpO1xuICAgIGlmICghYXBwbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kbyhcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkQXBwbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSkge1xuICAgICAgbG9nX18kbyhcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJG8oXCJBcHBsZSBQYXkgTG9hZGVkXCIpO1xuICAgIGNvbnN0IGNhbk1ha2VQYXltZW50cyA9IGF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKTtcbiAgICBpZiAoIWNhbk1ha2VQYXltZW50cykge1xuICAgICAgbG9nX18kbyhcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGFwcGxlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uQXBwbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBPanNGbG93cy5hZHllbkFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGFwcGxlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJG8oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25BcHBsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BZHllbkFwcGxlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGZvcm1DYWxsYmFja3NcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDEpO1xuICAgIGNvbnN0IHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCwgaW5pdGlhbFByZXZpZXcgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBnZXRBcHBsZVBheVBheW1lbnRSZXF1ZXN0KHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIHByZWZpbGw6IHtcbiAgICAgICAgLi4ucHJlZmlsbFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgcGF5bWVudFJlcXVlc3QpO1xuICAgIGNvbnN0IHNlc3Npb25Db250ZXh0ID0ge1xuICAgICAgc2Vzc2lvbixcbiAgICAgIGNvbm5lY3Rpb246IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBhcHBsZVBheUNwbS5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBpc1NldHVwTW9kZSxcbiAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGV4Y2x1ZGVQcm9wcyhwcmVmaWxsLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgbG9nX18kbyhcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMihldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3MiA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiBjcmVhdGVBcHBsZVBheVRvdGFsKHtcbiAgICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IGluaXRpYWxQcmV2aWV3MixcbiAgICAgICAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICAgICAgcHJlZmlsbFxuICAgICAgICAgIH0pLnRvdGFsXG4gICAgICAgIH07XG4gICAgICAgIHNlc3Npb24uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVQYXltZW50QXV0aG9yaXplZCQyKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25jYW5jZWwgPSBoYW5kbGVDYW5jZWw7XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kbyhcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJG4sIGVycl9fOiBlcnJfXyRuIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFkeWVuLWdvb2dsZS1wYXlcIik7XG5jb25zdCBpbml0QWR5ZW5Hb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMSk7XG4gICAgaWYgKCFnb29nbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kbihcIkdvb2dsZSBQYXkgQ1BNXCIsIGdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIGVycl9fJG4oXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRuKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkR29vZ2xlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuZ29vZ2xlPy5wYXltZW50cz8uYXBpKSB7XG4gICAgICBlcnJfXyRuKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBhd2FpdCBnZXRHb29nbGVQYXlFbnZpcm9ubWVudChjb250ZXh0LmJhc2VVcmwpO1xuICAgIGlmIChlbnZpcm9ubWVudCA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIXByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCkge1xuICAgICAgZXJyX18kbihcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJG4oXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgICBwcmVmaWxsLFxuICAgICAgICBnYXRld2F5OiBcImFkeWVuXCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGNvbnN0IHsgcmVzdWx0OiBpc1JlYWR5VG9QYXkgfSA9IGF3YWl0IGNsaWVudC5pc1JlYWR5VG9QYXkocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGlmICghaXNSZWFkeVRvUGF5KSB7XG4gICAgICAgIGxvZ19fJG4oXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKTtcbiAgICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kbihcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIGVycik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IG9uR29vZ2xlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgT2pzRmxvd3MuYWR5ZW5Hb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZ29vZ2xlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJG4oXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uR29vZ2xlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkFkeWVuR29vZ2xlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJG4oXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSQxKTtcbiAgICBjb25zdCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gZ29vZ2xlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBwcmVmaWxsLFxuICAgICAgZ2F0ZXdheTogXCJhZHllblwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgdHJhY2soXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogZ29vZ2xlUGF5Q3BtLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogZXhjbHVkZVByb3BzKHByZWZpbGwsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhID0gYXdhaXQgY2xpZW50LmxvYWRQYXltZW50RGF0YShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgbG9nX18kbihcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5KG5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgICAgbWVyZ2VkSW5wdXRzLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgY3VzdG9tUGFyYW1zPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGxvZ19fJG4oXCJTdGFydCBmbG93IG5leHQgYWN0aW9uc1wiLCBzdGFydEZsb3dOZXh0QWN0aW9ucyk7XG4gICAgICBsZXQgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgIGJyb3dzZXJfaW5mbzogZ2V0RnJhdWRNZXRhZGF0YSgpLFxuICAgICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJG4oXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgIGxldCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhZHllbi0zZHNcIik7XG4gICAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhICYmIG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgbG9nX18kbihcIkFkeWVuIDNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIG5leHRBY3Rpb25NZXRhZGF0YSk7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgICAgdXJsOiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsLFxuICAgICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kbihg4pWwIEFkeWVuIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YSAmJiAhb3VyUG1JZCkge1xuICAgICAgICBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgdGhlaXJfcG1faWQ6IG5leHRBY3Rpb25NZXRhZGF0YS50aGVpcl9wbV9pZCxcbiAgICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJG4oXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZSBhZnRlciAzRFNcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgIG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIH1cbiAgICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IG1ldGhvZCBJRCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRuKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRtLCBlcnJfXzogZXJyX18kbSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYWNoXCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4QUNIRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCB2ZXJpZmljYXRpb25NZXRob2QgPSBjdXN0b21QYXJhbXMudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwicGxhaWRcIjtcbiAgICBsZXQgbWljcm9EZXBvc2l0RGF0YSA9IG51bGw7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJtaWNyb19kZXBvc2l0XCIpIHtcbiAgICAgIGxvZ19fJG0oXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWljcm9EZXBvc2l0RGF0YSA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5NaWNyb0RlcG9zaXRGb3JtKFwiYWNoX2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNDAwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJG0oXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kbShcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFjaF9kaXJlY3RfZGViaXRcIixcbiAgICAgICAgICBhY2hfZGlyZWN0X2RlYml0OiB7XG4gICAgICAgICAgICAvL3BsYWlkIHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIGJ1c2luZXNzX2FjY291bnQ6IGN1c3RvbVBhcmFtcy5pc0J1c2luZXNzQWNjb3VudCA/PyBmYWxzZSxcbiAgICAgICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgICAgICAvL0FDSCBtaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIGFjY291bnRfbnVtYmVyOiBtaWNyb0RlcG9zaXREYXRhPy5hY2NvdW50X251bWJlcixcbiAgICAgICAgICAgIGFiYV9yb3V0aW5nX251bWJlcjogbWljcm9EZXBvc2l0RGF0YT8uYWJhX3JvdXRpbmdfbnVtYmVyXG4gICAgICAgICAgICAvLyBtYW5kYXRlX3ZlcnNpb246ICcxLjAnLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApPy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHJlZGlyZWN0VXJsKSB7XG4gICAgICBsb2dfXyRtKFwiUGxhaWQgdmVyaWZpY2F0aW9uIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICB1cmw6IHJlZGlyZWN0VXJsLFxuICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJBQ0ggdmVyaWZpY2F0aW9uXCJcbiAgICAgIH0pO1xuICAgICAgbG9nX18kbShg4pWwIFBsYWlkIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxhaWQgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGFpZCB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBuZXdDb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWFjaFwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogbmV3Q29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRtKFwiQUNIIHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kbCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBldmVudC52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IGNvbnRleHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UubmV4dF9hY3Rpb25fbWV0YWRhdGE7XG4gICAgY29uc3QgcGF5bWVudFNlc3Npb25SZXNwb25zZSA9IG5leHRBY3Rpb25NZXRhZGF0YT8uW1wiYXBwbGVfcGF5X3Nlc3Npb25cIl07XG4gICAgaWYgKCFwYXltZW50U2Vzc2lvblJlc3BvbnNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgfVxuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihwYXltZW50U2Vzc2lvblJlc3BvbnNlKTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLnBheW1lbnRTZXNzaW9uUmVzcG9uc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29udGV4dC5zZXNzaW9uLmFib3J0KCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGUzRFMobmV4dEFjdGlvbk1ldGFkYXRhLCBjb250ZXh0KSB7XG4gIGlmICghbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZFwiKTtcbiAgfVxuICBsb2dfXyRsKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgbmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gIH0pO1xuICBsb2dfXyRsKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBjb250ZXh0LnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkLFxuICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IG5leHRBY3Rpb25NZXRhZGF0YS5jb25zZW50X2lkLFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICB9XG4gIH0pO1xuICBsb2dfXyRsKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gIHJldHVybiBjb25maXJtUmVzdWx0O1xufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMShldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHBheW1lbnREYXRhID0gZXZlbnQucGF5bWVudDtcbiAgICBjb25zdCBmb3JtSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheShjb250ZXh0Lm5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICBmb3JtSW5wdXRzLFxuICAgICAgY29udGV4dC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGNvbnRleHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBjb250ZXh0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgfSk7XG4gICAgY29uc3QgcmVxdWlyZWRVc2VyQWN0aW9ucyA9IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF07XG4gICAgY29uc3QgY29uc2VudElkID0gcmVxdWlyZWRVc2VyQWN0aW9ucy5jb25zZW50X2lkO1xuICAgIGlmICghY29uc2VudElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25zZW50IElEIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIH1cbiAgICBsZXQgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkLFxuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYXBwbGVwYXlcIixcbiAgICAgICAgICBhcHBsZXBheToge1xuICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShwYXltZW50RGF0YS50b2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsb2dfXyRsKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgbGV0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk7XG4gICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YT8ucmVkaXJlY3RfdXJsICYmIG5leHRBY3Rpb25NZXRhZGF0YS5jb25zZW50X2lkICYmIG5leHRBY3Rpb25NZXRhZGF0YS50aGVpcl9wbV9pZCkge1xuICAgICAgY29uZmlybVJlc3VsdCA9IGF3YWl0IGhhbmRsZTNEUyhuZXh0QWN0aW9uTWV0YWRhdGEsIGNvbnRleHQpO1xuICAgICAgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIH1cbiAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRrLCBlcnJfXzogZXJyX18kbCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYXBwbGUtcGF5XCIpO1xuY29uc3QgaW5pdEFpcndhbGxleEFwcGxlUGF5RmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0kMik7XG4gICAgaWYgKCFhcHBsZVBheUNwbSkge1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRrKFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpO1xuICAgIGF3YWl0IGxvYWRBcHBsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKSB7XG4gICAgICBsb2dfXyRrKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kayhcIkFwcGxlIFBheSBMb2FkZWRcIik7XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnRzID0gYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpO1xuICAgIGlmICghY2FuTWFrZVBheW1lbnRzKSB7XG4gICAgICBsb2dfXyRrKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gYXBwbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3Qgb25BcHBsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IE9qc0Zsb3dzLmFpcndhbGxleEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGFwcGxlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJGwoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uQXBwbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQWlyd2FsbGV4QXBwbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgZm9ybUNhbGxiYWNrc1xuICB9KSA9PiB7XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0kMik7XG4gICAgY29uc3QgeyBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0gZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCh7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGN1c3RvbVBhcmFtcy5pbml0aWFsUHJldmlldyxcbiAgICAgIHByZWZpbGw6IHtcbiAgICAgICAgLi4ucHJlZmlsbFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgcGF5bWVudFJlcXVlc3QpO1xuICAgIGNvbnN0IHNlc3Npb25Db250ZXh0ID0ge1xuICAgICAgc2Vzc2lvbixcbiAgICAgIGNvbm5lY3Rpb246IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBhcHBsZVBheUNwbS5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBpc1NldHVwTW9kZSxcbiAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGV4Y2x1ZGVQcm9wcyhwcmVmaWxsLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgbG9nX18kayhcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9uY2FuY2VsID0gaGFuZGxlQ2FuY2VsO1xuICAgICAgc2Vzc2lvbi5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50JDEoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiBjcmVhdGVBcHBsZVBheVRvdGFsKHtcbiAgICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICAgICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgICAgIHByZWZpbGxcbiAgICAgICAgICB9KS50b3RhbFxuICAgICAgICB9O1xuICAgICAgICBzZXNzaW9uLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih1cGRhdGUpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMShldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kbChcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGosIGVycl9fOiBlcnJfXyRrIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1nb29nbGUtcGF5XCIpO1xuY29uc3QgaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCB1bmF2YWlsYWJsZVJlc3VsdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMik7XG4gICAgaWYgKCFnb29nbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kaihcIkdvb2dsZSBQYXkgQ1BNXCIsIGdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIGVycl9fJGsoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRqKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkR29vZ2xlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuZ29vZ2xlPy5wYXltZW50cz8uYXBpKSB7XG4gICAgICBlcnJfXyRrKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBhd2FpdCBnZXRHb29nbGVQYXlFbnZpcm9ubWVudChjb250ZXh0LmJhc2VVcmwpO1xuICAgIGlmIChlbnZpcm9ubWVudCA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIXByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCkge1xuICAgICAgZXJyX18kayhcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGooXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgICBwcmVmaWxsLFxuICAgICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBjb25zdCB7IHJlc3VsdDogaXNSZWFkeVRvUGF5IH0gPSBhd2FpdCBjbGllbnQuaXNSZWFkeVRvUGF5KHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBpZiAoIWlzUmVhZHlUb1BheSkge1xuICAgICAgICBsb2dfXyRqKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIik7XG4gICAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJGsoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCBlcnIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBvbkdvb2dsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9qc0Zsb3dzLmFpcndhbGxleEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBnb29nbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kayhcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uR29vZ2xlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkFpcndhbGxleEdvb2dsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyRqKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMik7XG4gICAgY29uc3QgeyBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgcHJlZmlsbCxcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICB0cmFjayhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBnb29nbGVQYXlDcG0ucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBleGNsdWRlUHJvcHMocHJlZmlsbCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGEgPSBhd2FpdCBjbGllbnQubG9hZFBheW1lbnREYXRhKHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBsb2dfXyRqKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhHb29nbGVQYXkobm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgICBtZXJnZWRJbnB1dHMsXG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBjdXN0b21QYXJhbXM/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICAgKTtcbiAgICAgIGxvZ19fJGooXCJfX19cIiwgbm9uQ2RlRm9ybUZpZWxkcyk7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGxvZ19fJGooXCJTdGFydCBmbG93IG5leHQgYWN0aW9uc1wiLCBzdGFydEZsb3dOZXh0QWN0aW9ucyk7XG4gICAgICBsZXQgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgIC8vIEdvb2dsZVBheSdzIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuIHByb3ZpZGVkIHRvIHZlcmlmeSB0aGUgY29uc2VudCBmaXJzdFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZCxcbiAgICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgICAgdHlwZTogXCJnb29nbGVwYXlcIixcbiAgICAgICAgICAgIGdvb2dsZXBheToge1xuICAgICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogZW5jcnlwdGVkUGF5bWVudFRva2VuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJGooXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgIGxldCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YSAmJiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIGxvZ19fJGooXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICAgICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICAgIHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJGooYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEgJiYgIW91clBtSWQpIHtcbiAgICAgICAgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICAgIHRoZWlyX3BtX2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQsXG4gICAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLmNvbnNlbnRfaWRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRqKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgIG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIH1cbiAgICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kayhcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kaSwgZXJyX186IGVycl9fJGogfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwia2xhcm5hXCIpO1xuY29uc3QgQWlyd2FsbGV4S2xhcm5hQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwia2xhcm5hXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe30pLm51bGxpc2goKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFpcndhbGxleFwiKVxufSk7XG5jb25zdCBpbml0QWlyd2FsbGV4S2xhcm5hRmxvdyA9IGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICBjb25zdCBrbGFybmFDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQWlyd2FsbGV4S2xhcm5hQ3BtKTtcbiAgaWYgKCFrbGFybmFDcG0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJLbGFybmEgQ1BNIG5vdCBmb3VuZCBpbiBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzXCIpO1xuICB9XG4gIGNvbnN0IHN0YXJ0RmxvdyA9IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICByZXR1cm4gT2pzRmxvd3MuYWlyd2FsbGV4S2xhcm5hLnJ1bih7XG4gICAgICBjb250ZXh0LFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBrbGFybmFDcG0sXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICBjdXN0b21QYXJhbXM6IGN1c3RvbVBhcmFtcyA/PyB7fVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgc3RhcnRGbG93XG4gIH07XG59O1xuY29uc3QgcnVuQWlyd2FsbGV4S2xhcm5hRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBsb2dfXyRpKGBSdW5uaW5nIEtsYXJuYSBmbG93Li4uYCwgY3VzdG9tUGFyYW1zKTtcbiAgICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICAgIGNvbnN0IGlzQW5vbnltb3VzID0gZmFsc2U7XG4gICAgICBsb2dfXyRpKGBWZXJpZnlpbmcgQ1BNLi4uYCk7XG4gICAgICBjb25zdCBjcG0gPSBBaXJ3YWxsZXhLbGFybmFDcG0ucGFyc2UoY2hlY2tvdXRQYXltZW50TWV0aG9kKTtcbiAgICAgIGxvZ19fJGkoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNgKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvciwge1xuICAgICAgICAuLi5pc0Fub255bW91cyA/IGdlbmVyYXRlQW5vbnltb3VzVmFsdWVzKCkgOiB2b2lkIDAsXG4gICAgICAgIC4uLnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbmV3Q3VzdG9tZXJGaWVsZHMgPSBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgICAgbG9nX18kaShcIk5ldyBjdXN0b21lciBmaWVsZHNcIiwgbmV3Q3VzdG9tZXJGaWVsZHMpO1xuICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKVxuICAgICAgfSk7XG4gICAgICBjb25zb2xlLmxvZyhcInN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZVwiLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwia2xhcm5hXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogY3BtLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IHtcbiAgICAgICAgICBwYXltZW50X21ldGhvZHM6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kaihcIktsYXJuYSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHsgcGF5bWVudF9tZXRob2Q6IFwia2xhcm5hXCIsIGVycm9yOiBlcnIgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IEFwcGxlUGF5Q3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IEdvb2dsZVBheUNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50KGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGV2ZW50LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogY29udGV4dC5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBjb25zdCBwYXltZW50U2Vzc2lvblJlc3BvbnNlID0gbmV4dEFjdGlvbk1ldGFkYXRhPy5bXCJhcHBsZV9wYXlfc2Vzc2lvblwiXTtcbiAgICBpZiAoIXBheW1lbnRTZXNzaW9uUmVzcG9uc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB9XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKHBheW1lbnRTZXNzaW9uUmVzcG9uc2UpO1xuICAgIHRyYWNrKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4ucGF5bWVudFNlc3Npb25SZXNwb25zZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb250ZXh0LnNlc3Npb24uYWJvcnQoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVBheW1lbnRBdXRob3JpemVkKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bWVudERhdGEgPSBldmVudC5wYXltZW50O1xuICAgIGNvbnN0IGZvcm1JbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5KGNvbnRleHQubm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhmb3JtSW5wdXRzLCBjb250ZXh0LmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBjb250ZXh0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBjb25zdCBtb2JpbGVXYWxsZXRQYXltZW50RGF0YSA9IHtcbiAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5BUFBMRS5JTkFQUC5QQVlNRU5UXCIsXG4gICAgICBkYXRhVmFsdWU6IHdpbmRvdy5idG9hKEpTT04uc3RyaW5naWZ5KHBheW1lbnREYXRhLnRva2VuLnBheW1lbnREYXRhKSlcbiAgICB9O1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IG1vYmlsZVdhbGxldFBheW1lbnREYXRhXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3Qgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRoLCBlcnJfXzogZXJyX18kaSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhdXRobmV0LWFwcGxlcGF5XCIpO1xuY29uc3QgaW5pdEF1dGhuZXRBcHBsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCB1bmF2YWlsYWJsZVJlc3VsdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSk7XG4gICAgaWYgKCFhcHBsZVBheUNwbSkge1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRoKFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpO1xuICAgIGF3YWl0IGxvYWRBcHBsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKSB7XG4gICAgICBsb2dfXyRoKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnRzID0gYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpO1xuICAgIGlmICghY2FuTWFrZVBheW1lbnRzKSB7XG4gICAgICBsb2dfXyRoKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gYXBwbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3Qgb25BcHBsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGFwcGxlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJGkoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogZXJyXG4gICAgICAgIH0pO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkFwcGxlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkF1dGhuZXRBcHBsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBmb3JtQ2FsbGJhY2tzXG4gIH0pID0+IHtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0pO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBwYXltZW50UmVxdWVzdCA9IGdldEFwcGxlUGF5UGF5bWVudFJlcXVlc3Qoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgcHJlZmlsbCxcbiAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHBheW1lbnRSZXF1ZXN0KTtcbiAgICBjb25zdCBzZXNzaW9uQ29udGV4dCA9IHtcbiAgICAgIHNlc3Npb24sXG4gICAgICBjb25uZWN0aW9uOiBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbCxcbiAgICAgIGlzU2V0dXBNb2RlLFxuICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrc1xuICAgIH07XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNlc3Npb24ub25jYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGxvZ19fJGgoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50KGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5pdGlhbFByZXZpZXcyID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgICAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IGNyZWF0ZUFwcGxlUGF5VG90YWwoe1xuICAgICAgICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY3VzdG9tUGFyYW1zLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogaW5pdGlhbFByZXZpZXcyLFxuICAgICAgICAgICAgZGVmYXVsdExhYmVsOiBhcHBsZVBheUNwbT8ubWV0YWRhdGE/LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgICAgICBwcmVmaWxsXG4gICAgICAgICAgfSkudG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odXBkYXRlKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVBheW1lbnRBdXRob3JpemVkKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBlcnJfXyRpKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kZywgZXJyX186IGVycl9fJGggfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXV0aG5ldC1nb29nbGVwYXlcIik7XG5jb25zdCBpbml0QXV0aG5ldEdvb2dsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyRnKFwiSW5pdGlhbGl6aW5nIEF1dGhuZXQgR29vZ2xlUGF5IGZsb3dcIik7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSk7XG4gICAgaWYgKCFnb29nbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZyhcIkdvb2dsZSBQYXkgQ1BNXCIsIGdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIGVycl9fJGgoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRnKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkR29vZ2xlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuZ29vZ2xlPy5wYXltZW50cz8uYXBpKSB7XG4gICAgICBlcnJfXyRoKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZyhcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICAgIHByZWZpbGwsXG4gICAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGNvbnN0IHsgcmVzdWx0OiBpc1JlYWR5VG9QYXkgfSA9IGF3YWl0IGNsaWVudC5pc1JlYWR5VG9QYXkocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGlmICghaXNSZWFkeVRvUGF5KSB7XG4gICAgICAgIGxvZ19fJGcoXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKTtcbiAgICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kaChcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIGVycik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IG9uR29vZ2xlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgT2pzRmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGdvb2dsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRoKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogZXJyXG4gICAgICAgIH0pO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkdvb2dsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BdXRobmV0R29vZ2xlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBwcmVmaWxsLFxuICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YSA9IGF3YWl0IGNsaWVudC5sb2FkUGF5bWVudERhdGEocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGxvZ19fJGcoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheShub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgICAgfSk7XG4gICAgICBsb2dfXyRnKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5HT09HTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShlbmNyeXB0ZWRQYXltZW50VG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJGgoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGYsIGVycl9fOiBlcnJfXyRnIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImN5YnMtZnJhbWVcIik7XG5jb25zdCBhdHRhY2hEZXZpY2VEYXRhQ29sbGVjdG9yID0gKHBvc3RVcmwsIGFjY2Vzc1Rva2VuKSA9PiB7XG4gIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG4gIGlmcmFtZS5uYW1lID0gXCJjYXJkaW5hbF9jb2xsZWN0aW9uX2lmcmFtZVwiO1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICBpZnJhbWUuc3R5bGUud2lkdGggPSBcIjEwcHhcIjtcbiAgaWZyYW1lLnN0eWxlLmhlaWdodCA9IFwiMTBweFwiO1xuICBjb25zdCBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZvcm1cIik7XG4gIGZvcm0uYWN0aW9uID0gcG9zdFVybDtcbiAgZm9ybS5tZXRob2QgPSBcIlBPU1RcIjtcbiAgZm9ybS50YXJnZXQgPSBpZnJhbWUubmFtZTtcbiAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gIGlucHV0LnR5cGUgPSBcImhpZGRlblwiO1xuICBpbnB1dC5uYW1lID0gXCJKV1RcIjtcbiAgaW5wdXQudmFsdWUgPSBhY2Nlc3NUb2tlbjtcbiAgZm9ybS5hcHBlbmRDaGlsZChpbnB1dCk7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmb3JtKTtcbiAgY29uc3QgZGV0YWNoID0gKCkgPT4ge1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGZvcm0pO1xuICB9O1xuICByZXR1cm4geyBmb3JtLCBkZXRhY2ggfTtcbn07XG5jb25zdCBydW5EZXZpY2VEYXRhQ29sbGVjdGlvbiA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB7IHBvc3RVcmwsIGFjY2Vzc1Rva2VuIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgZXhwZWN0ZWRPcmlnaW4gPSBuZXcgVVJMKHBvc3RVcmwpLm9yaWdpbjtcbiAgICBjb25zdCB7IGZvcm0sIGRldGFjaCB9ID0gYXR0YWNoRGV2aWNlRGF0YUNvbGxlY3Rvcihwb3N0VXJsLCBhY2Nlc3NUb2tlbik7XG4gICAgbG9nX18kZihcIkF0dGFjaGVkIGRldmljZSBkYXRhIGNvbGxlY3RvclwiKTtcbiAgICBjb25zdCBoYW5kbGVDb2xsZWN0aW9uRXZlbnQgPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5vcmlnaW4gIT09IGV4cGVjdGVkT3JpZ2luKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpO1xuICAgICAgbG9nX18kZihcIlJlY2VpdmVkIGV2ZW50IGZyb20gZGV2aWNlIGRhdGEgY29sbGVjdG9yOlwiLCBkYXRhKTtcbiAgICAgIGlmIChkYXRhW1wiTWVzc2FnZVR5cGVcIl0gPT09IFwicHJvZmlsZS5jb21wbGV0ZWRcIikge1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBkZXRhY2goKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBoYW5kbGVDb2xsZWN0aW9uRXZlbnQpO1xuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBoYW5kbGVDb2xsZWN0aW9uRXZlbnQpO1xuICAgICAgbG9nX18kZihcIkF0dGFjaGVkIGxpc3RlbmVyIHRvIHdpbmRvd1wiKTtcbiAgICAgIGZvcm0uc3VibWl0KCk7XG4gICAgICBsb2dfXyRmKFwiU3VibWl0dGVkIGZvcm1cIik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycl9fJGcoXCJFcnJvciBzdWJtaXR0aW5nIGZvcm06XCIsIGVycm9yKTtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBydW5QYXllckF1dGggPSAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHsgc3RlcFVwVXJsLCBhY2Nlc3NUb2tlbiwgbWVyY2hhbnREYXRhLCBpZnJhbWUsIGhvc3QgfSA9IHBhcmFtcztcbiAgY29uc3QgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmb3JtXCIpO1xuICBmb3JtLmFjdGlvbiA9IHN0ZXBVcFVybDtcbiAgZm9ybS5tZXRob2QgPSBcIlBPU1RcIjtcbiAgZm9ybS50YXJnZXQgPSBpZnJhbWUubmFtZTtcbiAgY29uc3QgdG9rZW5JbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgdG9rZW5JbnB1dC50eXBlID0gXCJoaWRkZW5cIjtcbiAgdG9rZW5JbnB1dC5uYW1lID0gXCJKV1RcIjtcbiAgdG9rZW5JbnB1dC52YWx1ZSA9IGFjY2Vzc1Rva2VuO1xuICBjb25zdCBtZElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICBtZElucHV0LnR5cGUgPSBcImhpZGRlblwiO1xuICBtZElucHV0Lm5hbWUgPSBcIk1EXCI7XG4gIG1kSW5wdXQudmFsdWUgPSBtZXJjaGFudERhdGE7XG4gIGZvcm0uYXBwZW5kQ2hpbGQodG9rZW5JbnB1dCk7XG4gIGZvcm0uYXBwZW5kQ2hpbGQobWRJbnB1dCk7XG4gIGhvc3QuYXBwZW5kQ2hpbGQoZm9ybSk7XG4gIHJldHVybiBmb3JtO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kZSwgZXJyX186IGVycl9fJGYgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY3lic1wiKTtcbmNvbnN0IEN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgc3RlcF91cF91cmw6IHouc3RyaW5nKCksXG4gIGFjY2Vzc190b2tlbjogei5zdHJpbmcoKSxcbiAgZGRfdXJsOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGRkX3Rva2VuOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIG1lcmNoYW50X2RhdGE6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRlJJRU5ETFlfRVJSID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiO1xuY29uc3QgcGFyc2VSZXNwb25zZUhlYWRlcnMkMSA9ICh1c2VyQWN0aW9uKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gQ3liZXJzb3VyY2VBY3Rpb25QYXlsb2FkLnNhZmVQYXJzZSh1c2VyQWN0aW9uKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgZXJyX18kZihgQ3liZXJzb3VyY2UgM0RTIGlzIHJlcXVpcmVkIGJ1dCB1c2VyIGFjdGlvbiBpcyBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeSh1c2VyQWN0aW9uKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoRlJJRU5ETFlfRVJSKTtcbiAgfVxuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBjaGVja0lmUmVxdWlyZXNDeWJlcnNvdXJjZTNkcyA9ICh1c2VyQWN0aW9uKSA9PiB7XG4gIHJldHVybiB1c2VyQWN0aW9uW1widHlwZVwiXSA9PT0gXCJjeWJlcnNvdXJjZV9wYXllcl9hdXRoXCI7XG59O1xuY29uc3QgaGFuZGxlQ3liZXJzb3VyY2UzZHMgPSBhc3luYyAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHsgc3RlcFVwVXJsLCBhY2Nlc3NUb2tlbiwgbWVyY2hhbnREYXRhLCBpZnJhbWUsIGhvc3QsIGNhbmNlbEJ1dHRvbiB9ID0gcGFyYW1zO1xuICBjb25zdCBleHBlY3RlZE9yaWdpbiA9IG5ldyBVUkwoc3RlcFVwVXJsKS5vcmlnaW47XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBsb2dfXyRlKFwiQ2xlYW5pbmcgdXAgQ3liZXJzb3VyY2UgM0RTIGZsb3dcIik7XG4gICAgICBjYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2FuY2VsKTtcbiAgICAgIGhvc3QucmVtb3ZlKCk7XG4gICAgfTtcbiAgICBjb25zdCBvbkNhbmNlbCA9ICgpID0+IHtcbiAgICAgIGxvZ19fJGUoXCJDeWJlcnNvdXJjZSAzRFMgY2FuY2VsbGVkXCIpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoc3RhdHVzKSA9PiB7XG4gICAgICBsb2dfXyRlKFwiQ3liZXJzb3VyY2UgM0RTIGNvbXBsZXRlZCB3aXRoIHN0YXR1czpcIiwgc3RhdHVzKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IHN0YXR1cy5zdGF0dXMsIGNsZWFudXAgfSk7XG4gICAgICBjbGVhbnVwUG9sbGluZygpO1xuICAgIH07XG4gICAgY29uc3QgcG9sbGluZ0ludGVydmFsID0gc3RhcnRQb2xsaW5nKGlmcmFtZSwgb25TdWNjZXNzLCBleHBlY3RlZE9yaWdpbiwgXCJwaW5nLTNkcy1zdGF0dXNcIiwgUGluZzNEU1N0YXR1c1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjbGVhbnVwUG9sbGluZyA9IGhhbmRsZUV2ZW50cyh7XG4gICAgICBlbGVtZW50czogeyBob3N0LCBjYW5jZWxCdXR0b24gfSxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbCxcbiAgICAgIHJlc29sdmU6IChzdGF0dXMpID0+IHtcbiAgICAgICAgcmVzb2x2ZSh7IHN0YXR1czogc3RhdHVzLnN0YXR1cywgY2xlYW51cCB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2FuY2VsKTtcbiAgICBjb25zdCBmb3JtID0gcnVuUGF5ZXJBdXRoKHtcbiAgICAgIHN0ZXBVcFVybCxcbiAgICAgIGFjY2Vzc1Rva2VuLFxuICAgICAgbWVyY2hhbnREYXRhLFxuICAgICAgaWZyYW1lLFxuICAgICAgaG9zdFxuICAgIH0pO1xuICAgIGZvcm0uc3VibWl0KCk7XG4gIH0pO1xufTtcbmNvbnN0IHJ1bkN5YmVyc291cmNlM2RzRmxvdyA9IGFzeW5jICh1c2VyQWN0aW9uKSA9PiB7XG4gIGNvbnN0IHBheWxvYWQgPSBwYXJzZVJlc3BvbnNlSGVhZGVycyQxKHVzZXJBY3Rpb24pO1xuICBjb25zdCB7IHN0ZXBfdXBfdXJsLCBhY2Nlc3NfdG9rZW4sIGRkX3VybCwgZGRfdG9rZW4sIG1lcmNoYW50X2RhdGEgfSA9IHBheWxvYWQ7XG4gIGlmIChkZF91cmwgJiYgZGRfdG9rZW4pIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uUmVzdWx0ID0gYXdhaXQgcnVuRGV2aWNlRGF0YUNvbGxlY3Rpb24oe1xuICAgICAgcG9zdFVybDogZGRfdXJsLFxuICAgICAgYWNjZXNzVG9rZW46IGRkX3Rva2VuXG4gICAgfSk7XG4gICAgbG9nX18kZShcIkRldmljZSBkYXRhIGNvbGxlY3Rpb24gY29tcGxldGVkIHdpdGggc3RhdHVzOlwiLCBjb2xsZWN0aW9uUmVzdWx0LlN0YXR1cyk7XG4gIH0gZWxzZSB7XG4gICAgZXJyX18kZihcIk5vIGRldmljZSBkYXRhIGNvbGxlY3Rpb24gVVJMIG9yIHRva2VuIHByb3ZpZGVkXCIpO1xuICB9XG4gIGNvbnN0IHsgaG9zdCwgaWZyYW1lLCBjYW5jZWxCdXR0b24gfSA9IGNyZWF0ZUFuZE9wZW5GcmFtZShcIlwiLCB7IG5hbWU6IFwiY2FyZGluYWxfYXV0aF9pZnJhbWVcIiB9KTtcbiAgbG9nX18kZShcIlJ1bm5pbmcgQ3liZXJzb3VyY2UgM0RTIGZsb3dcIik7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZUN5YmVyc291cmNlM2RzKHtcbiAgICBzdGVwVXBVcmw6IHN0ZXBfdXBfdXJsLFxuICAgIGFjY2Vzc1Rva2VuOiBhY2Nlc3NfdG9rZW4sXG4gICAgbWVyY2hhbnREYXRhOiBtZXJjaGFudF9kYXRhLFxuICAgIGlmcmFtZSxcbiAgICBob3N0LFxuICAgIGNhbmNlbEJ1dHRvblxuICB9KTtcbiAgcmVzdWx0LmNsZWFudXAoKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5TVUNDRVNTKSB7XG4gICAgbG9nX18kZShcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkXCIpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnROZXZlcihyZXN1bHQuc3RhdHVzKTtcbiAgfVxufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kZCwgZXJyX186IGVycl9fJGUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9ja3l0LWNjXCIpO1xuY29uc3QgUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMgPSB6Lm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHouc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMuc2FmZVBhcnNlKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZnJpZW5kbHlFcnIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG4gICAgY29uc3QgZGV2RXJyID0gYFBvY2t5dCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gO1xuICAgIGVycl9fJGUoZGV2RXJyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IHBhcnNlVmF1bHRJZEZyb20zZHNIcmVmID0gKGhyZWYpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB2YXVsdElkID0gbmV3IFVSTChocmVmID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJ2YXVsdElkXCIpO1xuICAgIGlmICghdmF1bHRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmF1bHQgSUQgZm91bmQgaW4gM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgfVxuICAgIGxvZ19fJGQoYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3ZhdWx0SWR9XWApO1xuICAgIHJldHVybiB2YXVsdElkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVyck1zZyA9IGBFcnJvciB2ZXJpZnlpbmcgM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuYDtcbiAgICBlcnJfXyRlKGVyck1zZywgYFJlc3VsdGluZyBVUkw6ICR7aHJlZn0uXG5FcnJvcjogJHtnZXRFcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICB9XG59O1xuY29uc3QgcGFyc2VBcmdGcm9tSHJlZiA9IChocmVmLCBhcmdOYW1lKSA9PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoaHJlZik7XG4gIHJldHVybiB1cmwuc2VhcmNoUGFyYW1zLmdldChhcmdOYW1lKTtcbn07XG5jb25zdCBjaGVja0lmUmVxdWlyZXNQb2NreXQzZHMgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgcmV0dXJuIGVycm9yUmVzcG9uc2VIZWFkZXJzPy5bXCJvcC1wb2NreXQtM2RzLXVybFwiXSAhPT0gdm9pZCAwO1xufTtcbmNvbnN0IHJ1blBvY2t5dDNkc0Zsb3cgPSBhc3luYyAoYmFzZVVybCwgZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QoeyB1cmw6IGhlYWRlcnNbXCJvcC1wb2NreXQtM2RzLXVybFwiXSwgYmFzZVVybCB9KTtcbiAgY29uc3QgdmF1bHRJZCA9IHBhcnNlVmF1bHRJZEZyb20zZHNIcmVmKHJlc3VsdC5ocmVmID8/IFwiXCIpO1xuICBjb25zdCBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiB2YXVsdElkLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IGhlYWRlcnNbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiBoZWFkZXJzW1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGV4dHJhTWV0YWRhdGFGb3JDaGVja291dDtcbn07XG5cbmNvbnN0IHsgbG9nX186IHN0cmlwZUxvZ19fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1jY1wiKTtcbmNvbnN0IFN0cmlwZTNEU01ldGFkYXRhUGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3Qgc3RyaXBlQ0MzRFNGbG93ID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSkgPT4ge1xuICB0cmFjayhcIjNkc19zdHJpcGVfcmVkaXJlY3RcIiwge1xuICAgIC4uLm5leHRBY3Rpb25NZXRhZGF0YVxuICB9KTtcbiAgc3RyaXBlTG9nX18oYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7bmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKTtcbiAgYXdhaXQgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyhuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICB0cmFjayhcIjNkc19zdHJpcGVfY29tcGxldGVcIik7XG4gIHN0cmlwZUxvZ19fKFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufTtcbmNvbnN0IHBhcnNlVXNlckZFUGF5bG9hZCA9IChwYXlsb2FkKSA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IFN0cmlwZTNEU01ldGFkYXRhUGF5bG9hZC5zYWZlUGFyc2UocGF5bG9hZCk7XG4gIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmlwZSAzRFMgbWV0YWRhdGEgaGFzIHVuZXhwZWN0ZWQgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KHBhcnNlZC5lcnJvci5lcnJvcnMpfWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgc3RyaXBlX3BrOiBwYXJzZWQuZGF0YS5zdHJpcGVfcGssXG4gICAgY2xpZW50X3NlY3JldDogcGFyc2VkLmRhdGEuY2xpZW50X3NlY3JldCxcbiAgICBzdHJpcGVfcG1faWQ6IHBhcnNlZC5kYXRhLnN0cmlwZV9wbV9pZFxuICB9O1xufTtcblxuY29uc3QgTUFYX0NPTkZJUk1fTE9PUF9JVEVSQVRJT05TID0gNDtcbmNvbnN0IHsgbG9nX186IGxvZ19fJGMsIGVycl9fOiBlcnJfXyRkIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInVuaWZpZWQtY2NcIik7XG5jb25zdCB1bnNhZmVseVJ1blVuaWZpZWRDY0Zsb3cgPSBhc3luYyAoe1xuICBjb250ZXh0LFxuICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gIG5vbkNkZUZvcm1JbnB1dHMsXG4gIGZvcm1DYWxsYmFja3MsXG4gIGN1c3RvbVBhcmFtc1xufSkgPT4ge1xuICBsb2dfXyRjKGDilJwgUnVubmluZyB1bmlmaWVkIENDIGZsb3cuLi5gLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZCB9KTtcbiAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gIGxvZ19fJGMoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cHJlZmlsbC5tb2RlfV1gKTtcbiAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgY29uc3QgY29tbW9uQ2hlY2tvdXRQYXJhbXMgPSB7XG4gICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICAgIC8vIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgaW4gdGhlIGNoZWNrb3V0IGF0dGVtcHQgbG9nc1xuICAgICAgZGV2aWNlVG9rZW46IGdldERldmljZVRva2VuKClcbiAgICB9LFxuICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6IHRydWUsXG4gICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiB7XG4gICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9LFxuICAgIHBheW1lbnRfcm91dGVfaWQ6IGN1c3RvbVBhcmFtcy5wYXltZW50Um91dGVJZFxuICB9O1xuICBlcnJfXyRkKGN1c3RvbVBhcmFtcywgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICBsb2dfXyRjKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gUGFydGlhbCBQTXMgW1Nlc3Npb246ICR7Y29udGV4dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGN1c3RvbVBhcmFtcy5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkXG4gIH0pO1xuICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICBjb25zdCBzdGFydFBmUmVzdWx0ID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvd0ZvckNDKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgbG9nX18kYyhg4pScIHN0YXJ0UGYgcmVzdWx0YCwgc3RhcnRQZlJlc3VsdCk7XG4gIGlmIChzdGFydFBmUmVzdWx0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmV0dXJuU3VjY2Vzc1Jlc3VsdChwcmVmaWxsLm1vZGUsIHN0YXJ0UGZSZXN1bHQpO1xuICB9XG4gIGlmICghc3RhcnRQZlJlc3VsdC5jaGVja291dF9hdHRlbXB0X2lkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgYXR0ZW1wdCBJRCBmcm9tIFBGIHJlc3VsdFwiKTtcbiAgfVxuICByZXR1cm4gcnVuQ29uZmlybUxvb3Aoe1xuICAgIGNvbnRleHQsXG4gICAgcHJlZmlsbCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLFxuICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgc3RhcnRQZlJlc3VsdCxcbiAgICBjaGVja291dEF0dGVtcHRJZDogc3RhcnRQZlJlc3VsdC5jaGVja291dF9hdHRlbXB0X2lkXG4gIH0pO1xufTtcbmNvbnN0IHJ1bkNvbmZpcm1Mb29wID0gYXN5bmMgKHBhcmFtcykgPT4ge1xuICBjb25zdCB7XG4gICAgY29udGV4dCxcbiAgICBwcmVmaWxsLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICBzdGFydFBmUmVzdWx0LFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkXG4gIH0gPSBwYXJhbXM7XG4gIGxldCBwZlJlc3VsdCA9IHN0YXJ0UGZSZXN1bHQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTUFYX0NPTkZJUk1fTE9PUF9JVEVSQVRJT05TOyBpKyspIHtcbiAgICBsb2dfXyRjKGDilJwgUnVubmluZyBjb25maXJtIGxvb3AgaXRlcmF0aW9uICR7aX1gKTtcbiAgICB0cmFjayhcInVuaWZpZWRfY2NfY29uZmlybV9sb29wX2l0ZXJhdGlvblwiLCB7IGl0ZXJhdGlvbjogaSB9KTtcbiAgICBjb25zdCB7IHVzZXJBY3Rpb24gfSA9IHZhbGlkYXRlUGZSZXN1bHRVc2VyQWN0aW9uKHBmUmVzdWx0KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlckFjdGlvblJlc3VsdCA9IGF3YWl0IHJ1blJlcXVpcmVkVXNlckFjdGlvbihjb250ZXh0LmJhc2VVcmwsIHVzZXJBY3Rpb24sIHByZWZpbGwsIG5vbkNkZUZvcm1JbnB1dHMpO1xuICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLmNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhLFxuICAgICAgICAuLi51c2VyQWN0aW9uUmVzdWx0Lm1ldGFkYXRhRm9yQ29uZmlybVN0ZXBcbiAgICAgIH07XG4gICAgICBsb2dfXyRjKGDilJwgTmV3IGV4dHJhIG1ldGFkYXRhYCwgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgICAgZXJyX18kZChg4pScIEVycm9yIGluIHJ1bm5pbmcgdXNlciBhY3Rpb24gaW4gaXRlcmF0aW9uICR7aX0uIENvbnRpbnVpbmcgdG8gY29uZmlybSBzdGVwLi4uYCwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRyYWNrKFwidW5pZmllZF9jY191c2VyX2FjdGlvbl9lcnJvclwiLCB7IGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSwgaXRlcmF0aW9uOiBpIH0pO1xuICAgIH1cbiAgICBwZlJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjaGVja291dEF0dGVtcHRJZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFcbiAgICB9KTtcbiAgICBsb2dfXyRjKGDilJwgY29uZmlybVBmIHJlc3VsdCAoaXRlcmF0aW9uICR7aX0pYCwgcGZSZXN1bHQpO1xuICAgIGlmIChwZlJlc3VsdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmV0dXJuU3VjY2Vzc1Jlc3VsdChwcmVmaWxsLm1vZGUsIHBmUmVzdWx0KTtcbiAgICB9XG4gIH1cbiAgdHJhY2soXCJ1bmlmaWVkX2NjX3VuZXhwZWN0ZWRfYnJhbmNoXCIsIHtcbiAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogcGZSZXN1bHQuY2hlY2tvdXRfYXR0ZW1wdF9pZCxcbiAgICBjb25maXJtUEZSZXN1bHQ6IHBmUmVzdWx0XG4gIH0pO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBlcnJvciwgcGxlYXNlIHRyeSBhbm90aGVyIHBheW1lbnQgbWV0aG9kXCIpO1xufTtcbmNvbnN0IHJ1blJlcXVpcmVkVXNlckFjdGlvbiA9IGFzeW5jIChiYXNlVXJsLCB1c2VyQWN0aW9uLCBwcmVmaWxsLCBub25DZGVGb3JtSW5wdXRzKSA9PiB7XG4gIGlmICh1c2VyQWN0aW9uLl91bmlmaWVkX2NjX2FjdGlvbl9uYW1lID09PSBcIjNEU19SRVFVSVJFRFwiKSB7XG4gICAgaWYgKHVzZXJBY3Rpb24udHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpIHtcbiAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhwYXJzZVVzZXJGRVBheWxvYWQodXNlckFjdGlvbikpO1xuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICB9IGVsc2UgaWYgKGNoZWNrSWZSZXF1aXJlc0FpcndhbGxleDNkcyh1c2VyQWN0aW9uKSkge1xuICAgICAgY29uc3QgYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkFpcndhbGxleDNkc0Zsb3coYmFzZVVybCwgdXNlckFjdGlvbik7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFpcndhbGxleDogYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCB9IH07XG4gICAgfSBlbHNlIGlmIChjaGVja0lmUmVxdWlyZXNBZHllbjNkcyh1c2VyQWN0aW9uKSkge1xuICAgICAgY29uc3QgYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWR5ZW4zZHNGbG93KFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgdXNlckFjdGlvbixcbiAgICAgICAgcHJlZmlsbC5sb2NhbGVcbiAgICAgICk7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFkeWVuOiBhZHllbk1ldGFkYXRhRm9yQ2hlY2tvdXQgfSB9O1xuICAgIH0gZWxzZSBpZiAoY2hlY2tJZlJlcXVpcmVzQ3liZXJzb3VyY2UzZHModXNlckFjdGlvbikpIHtcbiAgICAgIGF3YWl0IHJ1bkN5YmVyc291cmNlM2RzRmxvdyh1c2VyQWN0aW9uKTtcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHt9IH07XG4gICAgfSBlbHNlIGlmIChjaGVja0lmTGVnYWN5M0RTUGF0aCh1c2VyQWN0aW9uKSkge1xuICAgICAgYXdhaXQgY29tbW9uQ0MzRFNGbG93KHsgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBbdXNlckFjdGlvbl0gfSwgYmFzZVVybCk7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7fSB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCAzRFMgdXNlciBhY3Rpb246ICR7SlNPTi5zdHJpbmdpZnkodXNlckFjdGlvbil9YCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlcXVpcmVkIHVzZXIgYWN0aW9uOiAke0pTT04uc3RyaW5naWZ5KHVzZXJBY3Rpb24pfWApO1xuICB9XG59O1xuY29uc3QgY2hlY2tJZkxlZ2FjeTNEU1BhdGggPSAodXNlckFjdGlvbikgPT4ge1xuICB0cnkge1xuICAgIHBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhKFt1c2VyQWN0aW9uXSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuY29uc3QgdmFsaWRhdGVQZlJlc3VsdFVzZXJBY3Rpb24gPSAocGZSZXN1bHQpID0+IHtcbiAgaWYgKCFwZlJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH0gZWxzZSBpZiAocGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIHJlcXVpcmVkIHVzZXIgYWN0aW9uc1wiKTtcbiAgfSBlbHNlIGlmIChwZlJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG11bHRpcGxlIHJlcXVpcmVkIHVzZXIgYWN0aW9uc1wiKTtcbiAgfVxuICBjb25zdCB1c2VyQWN0aW9uID0gVXNlckFjdGlvbkZFUGF5bG9hZC5zYWZlUGFyc2UocGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbiAgaWYgKCF1c2VyQWN0aW9uLnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRkKFwiVXNlciBhY3Rpb24gcmF3IHBheWxvYWRcIiwgcGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbiAgICBlcnJfXyRkKFwiUGFyc2luZyBlcnJvclwiLCB1c2VyQWN0aW9uLmVycm9yKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzY2hlbWEgb2YgdXNlciBhY3Rpb24gcGF5bG9hZCBpcyBub3QgdmFsaWRcIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB1c2VyQWN0aW9uOiB1c2VyQWN0aW9uLmRhdGFcbiAgfTtcbn07XG5jb25zdCByZXR1cm5TdWNjZXNzUmVzdWx0ID0gKHByZWZpbGxNb2RlLCBwZlJlc3VsdCkgPT4ge1xuICBpZiAocHJlZmlsbE1vZGUgPT09IFwic2V0dXBcIikge1xuICAgIGNvbnN0IHBheW1lbnRNZXRob2RJZCA9IHBmUmVzdWx0LmNjX3BtX2lkID8/IHBmUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdLmlkO1xuICAgIGlmICghcGF5bWVudE1ldGhvZElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBDQyBQTSBJRCBvciBwYXltZW50X21ldGhvZHMgZm91bmQgaW4gUEYgcmVzdWx0XCIpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBwYXltZW50TWV0aG9kSWRcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGlmICghcGZSZXN1bHQuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgc3VjY2VzcyByZXNwb25zZSBmcm9tIHN0YXJ0UEZcIik7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICByZXN1bHQ6IHBmUmVzdWx0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICB9O1xuICB9XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRiLCBlcnJfXzogZXJyX18kYyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IHJ1bkNvbW1vbkNjRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJGIoYOKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uYCwgeyBjaGVja291dFBheW1lbnRNZXRob2QgfSk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICB0cmFjayhcImNvbW1vbl9jY19mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgLi4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJlZmlsbFxuICAgIH0pO1xuICAgIGNvbnN0IHVuaWZpZWRDQ1JvbGxvdXRSYXRpbyA9IHByZWZpbGwuZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzPy5bXCJ1bmlmaWVkX2NjXCJdID8/IDA7XG4gICAgbG9nX18kYihg4pScIFVuaWZpZWQgQ0Mgcm9sbG91dDogJHtNYXRoLnJvdW5kKHVuaWZpZWRDQ1JvbGxvdXRSYXRpbyAqIDEwMCl9JWApO1xuICAgIGNvbnN0IHJvbGwgPSBNYXRoLnJhbmRvbSgpO1xuICAgIGNvbnN0IHVzZVVuaWZpZWRDQ0Zsb3cgPSByb2xsIDwgdW5pZmllZENDUm9sbG91dFJhdGlvO1xuICAgIGNvbnN0IHVjY1JvbGxUcmFja2luZ01ldGFkYXRhID0ge1xuICAgICAgcm9sbCxcbiAgICAgIHVuaWZpZWRDQ1JvbGxvdXRSYXRpbyxcbiAgICAgIHVzZVVuaWZpZWRDQ0Zsb3dcbiAgICB9O1xuICAgIGlmICh1c2VVbmlmaWVkQ0NGbG93KSB7XG4gICAgICBsb2dfXyRiKGDilJwgUGlja2VkIHVuaWZpZWQgQ0MgZmxvdyAoJHtyb2xsfSB2cyAke3VuaWZpZWRDQ1JvbGxvdXRSYXRpb30pYCk7XG4gICAgICB0cmFjayhcInVuaWZpZWRfY2NfZmxvd19waWNrZWRcIiwgdWNjUm9sbFRyYWNraW5nTWV0YWRhdGEpO1xuICAgICAgcmV0dXJuIHVuc2FmZWx5UnVuVW5pZmllZENjRmxvdyh7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zLFxuICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyRiKGDilJwgUGlja2VkIGxlZ2FjeSBDQyBmbG93ICgke3JvbGx9IHZzICR7dW5pZmllZENDUm9sbG91dFJhdGlvfSlgKTtcbiAgICAgIHRyYWNrKFwibGVnYWN5X2NjX2Zsb3dfcGlja2VkXCIsIHVjY1JvbGxUcmFja2luZ01ldGFkYXRhKTtcbiAgICB9XG4gICAgbG9nX18kYihg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtwcmVmaWxsLm1vZGV9XWApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBjb25zdCBjb21tb25DaGVja291dFBhcmFtcyA9IHtcbiAgICAgIHNlc3Npb25faWQ6IGNvbnRleHQuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgfSxcbiAgICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6IGZhbHNlLFxuICAgICAgcGF5bWVudF9yb3V0ZV9pZDogY3VzdG9tUGFyYW1zLnBheW1lbnRSb3V0ZUlkLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKCksXG4gICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgbG9nX18kYihg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGN1c3RvbVBhcmFtcy5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIGxvZ19fJGIoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7cHJlZmlsbC50b2tlbn1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNldHVwQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyRiKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7cmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJGIoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJGIoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDZGVFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3Iub3JpZ2luYWxFcnJvck1lc3NhZ2UuaW5jbHVkZXMoXCIzRFNfUkVRVUlSRURcIikpIHtcbiAgICAgICAgICBsb2dfXyRiKGDilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93YCk7XG4gICAgICAgICAgbG9nX18kYihcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICB0cmFjayhcIjNkc19yZXF1aXJlZFwiLCB7XG4gICAgICAgICAgICAuLi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgICAgICAuLi5lcnJvci5yZXNwb25zZS5oZWFkZXJzXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgZXJySGVhZGVycyA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnMgPz8ge307XG4gICAgICAgICAgaWYgKFwib3AtZXhpc3RpbmctY2MtcG0taWRcIiBpbiBlcnJIZWFkZXJzKSB7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leGlzdGluZ19jY19wbV9pZCA9IGVyckhlYWRlcnNbXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiXTtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBFeGlzdGluZyBDQyBQTSBJRDogJHtjb21tb25DaGVja291dFBhcmFtcy5leGlzdGluZ19jY19wbV9pZH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNQb2NreXQzZHMgPSBjaGVja0lmUmVxdWlyZXNQb2NreXQzZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzUG9ja3l0M2RzKSB7XG4gICAgICAgICAgICBsb2dfXyRiKGDilJwgUG9ja3l0IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIFBvY2t5dCAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IHBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5Qb2NreXQzZHNGbG93KGNvbnRleHQuYmFzZVVybCwgZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcInBvY2t5dFwiXSA9IHBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlcXVpcmVzQWlyd2FsbGV4M2RzID0gY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzKGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIGlmIChyZXF1aXJlc0FpcndhbGxleDNkcykge1xuICAgICAgICAgICAgbG9nX18kYihg4pScIEFpcndhbGxleCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBaXJ3YWxsZXggM0RTIGZsb3cuYCk7XG4gICAgICAgICAgICBjb25zdCBhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWlyd2FsbGV4M2RzRmxvdyhjb250ZXh0LmJhc2VVcmwsIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFbXCJhaXJ3YWxsZXhcIl0gPSBhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXF1aXJlc0FkeWVuM2RzID0gY2hlY2tJZlJlcXVpcmVzQWR5ZW4zZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzQWR5ZW4zZHMpIHtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBBZHllbiAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBZHllbiAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGFkeWVuTWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkFkeWVuM2RzRmxvdyhcbiAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgICAgICAgIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICAgIHByZWZpbGwubG9jYWxlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFbXCJhZHllblwiXSA9IGFkeWVuTWV0YWRhdGFGb3JDaGVja291dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc3RhcnRQZlJlc3VsdCA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgICAgbG9nX18kYihg4pScIFN0YXJ0IHBheW1lbnQgZmxvdyByZXN1bHQ6YCwgc3RhcnRQZlJlc3VsdCk7XG4gICAgICAgICAgY29uc3QgY3liZXJzb3VyY2VBY3Rpb24gPSBzdGFydFBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKFxuICAgICAgICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiY3liZXJzb3VyY2VfcGF5ZXJfYXV0aFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoY3liZXJzb3VyY2VBY3Rpb24pIHtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBDeWJlcnNvdXJjZSAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBDeWJlcnNvdXJjZSAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCA9IEN5YmVyc291cmNlQWN0aW9uUGF5bG9hZC5wYXJzZShjeWJlcnNvdXJjZUFjdGlvbik7XG4gICAgICAgICAgICBjb25zdCBjeWJlcnNvdXJjZU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5DeWJlcnNvdXJjZTNkc0Zsb3coe1xuICAgICAgICAgICAgICAuLi5jeWJlcnNvdXJjZUFjdGlvblBheWxvYWQsXG4gICAgICAgICAgICAgIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgICBfdW5pZmllZF9jY19wY2NzX2lkOiBcIlwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhW1wiY3liZXJzb3VyY2VcIl0gPSBjeWJlcnNvdXJjZU1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVN0cmlwZUZsb3cgPSBlcnJvci5yZXNwb25zZS5oZWFkZXJzPy5bXCJvcC1zaG91bGQtdXNlLW5ldy1mbG93XCJdICE9PSBcInRydWVcIjtcbiAgICAgICAgICBpZiAoIXJlcXVpcmVzUG9ja3l0M2RzICYmICFjeWJlcnNvdXJjZUFjdGlvbikge1xuICAgICAgICAgICAgaWYgKHNob3VsZFVzZVN0cmlwZUZsb3cpIHtcbiAgICAgICAgICAgICAgbG9nX18kYihg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd2ApO1xuICAgICAgICAgICAgICBhd2FpdCBzdHJpcGVDQzNEU0Zsb3cocGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbG9nX18kYihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvd2ApO1xuICAgICAgICAgICAgICBhd2FpdCBjb21tb25DQzNEU0Zsb3coc3RhcnRQZlJlc3VsdCwgY29udGV4dC5iYXNlVXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nX18kYihg4pScIFByZS1zdGFydCAzRFMgaXMgc3VjY2Vzc2Z1bCwgb3RoZXIgM0RTIGZsb3dzIHdpbGwgYmUgc2tpcHBlZC5gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgY2NQbUlkID0gc3RhcnRQZlJlc3VsdC5jY19wbV9pZDtcbiAgICAgICAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBbY2NfcG1faWQ6ICR7Y2NQbUlkfV1gKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBjY1BtSWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9nX18kYihg4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6YCwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBsb2dfXyRiKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Y3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7IXNob3VsZFVzZVN0cmlwZUZsb3cgPyBcIm5ld1wiIDogXCJsZWdhY3lcIn1dYCk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgIC4uLmNvbW1vbkNoZWNrb3V0UGFyYW1zLFxuICAgICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogY2NQbUlkLFxuICAgICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiBzaG91bGRVc2VTdHJpcGVGbG93XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVycl9fJGMoYOKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERWApO1xuICAgICAgZXJyX18kYyhlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbik7XG5jb25zdCBwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICBjb25zdCBzdHJpcGVBY3Rpb24gPSByZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpO1xuICBpZiAoIXN0cmlwZUFjdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICB9XG4gIHJldHVybiBTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEucGFyc2Uoc3RyaXBlQWN0aW9uKTtcbn07XG5jb25zdCBjb21tb24zRFNBY3Rpb25UeXBlcyA9IFtcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiwgXCJhZHllblwiXTtcbmNvbnN0IHBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT4ge1xuICBjb25zdCBjb21tb25BY3Rpb24gPSByZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBjb21tb24zRFNBY3Rpb25UeXBlcy5pbmNsdWRlcyhhY3Rpb24udHlwZSkpO1xuICBpZiAoIWNvbW1vbkFjdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICB9XG4gIHJldHVybiBDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UoY29tbW9uQWN0aW9uKTtcbn07XG5jb25zdCBjb21tb25DQzNEU0Zsb3cgPSBhc3luYyAoc3RhcnRQZlJlc3VsdCwgYmFzZVVybCkgPT4ge1xuICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsID09PSBcIjNEU19DT01QTEVURVwiKSB7XG4gICAgbG9nX18kYihg4pScIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlgKTtcbiAgICB0cmFjayhcIjNkc19jb21wbGV0ZVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbG9nX18kYihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke25leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmx9XWApO1xuICB0cmFjayhcIjNkc19yZWRpcmVjdFwiLCB7XG4gICAgLi4ubmV4dEFjdGlvbk1ldGFkYXRhXG4gIH0pO1xuICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oeyB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsIGJhc2VVcmwgfSk7XG4gIGxvZ19fJGIoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdHJhY2soXCIzZHNfY2FuY2VsbGVkXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRyYWNrKFwiM2RzX2ZhaWx1cmVcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbiAgdHJhY2soXCJjb21tb25fM2RzX2NvbXBsZXRlZFwiKTtcbn07XG5cbmNvbnN0IExvb3BDcnlwdG9DcG0gPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJsb29wXCIpLFxuICBwcm92aWRlcjogei5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIG1lcmNoYW50X2lkOiB6LnN0cmluZygpLFxuICAgIGVudGl0eV9pZDogei5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHouc3RyaW5nKCksXG4gICAgc3VwcG9ydGVkX2N1cnJlbmNpZXM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRhLCBlcnJfXzogZXJyX18kYiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJsb29wLWNyeXB0b1wiKTtcbmNvbnN0IGluaXRMb29wRmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQgfSkgPT4ge1xuICAgIGxvZ19fJGEoYENoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgTG9vcCBDcnlwdG8uLi5gKTtcbiAgICBjb25zdCBjaGVja291dFBheW1lbnRNZXRob2QgPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgTG9vcENyeXB0b0NwbSk7XG4gICAgbG9nX18kYShgY2hlY2tvdXRQYXltZW50TWV0aG9kOiAke0pTT04uc3RyaW5naWZ5KGNoZWNrb3V0UGF5bWVudE1ldGhvZCl9YCk7XG4gICAgbG9nX18kYShgU3RhcnRpbmcgTG9vcCBDcnlwdG8gZmxvdy4uLmApO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBwcmVGbG93TmV4dEFjdGlvbk1ldGFkYXRhID0gYXdhaXQgcHJlcGFyZVBheW1lbnRGbG93KGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH0pO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KFxuICAgICAgY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgcHJlZmlsbC50b2tlbixcbiAgICAgIGlzU2V0dXBNb2RlLFxuICAgICAgdm9pZCAwXG4gICAgKTtcbiAgICBpZiAoIWlzU2V0dXBNb2RlICYmICFjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXMuaW5jbHVkZXMocHJlZmlsbC5jdXJyZW5jeSkpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQ3VycmVuY3kgJHtwcmVmaWxsLmN1cnJlbmN5fSBub3QgZW5hYmxlZCBmb3IgTG9vcC4gRW5hYmxlZCBjdXJyZW5jaWVzOiAke2NoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llc31gXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEgfHwgIXByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEubmV4dF9hY3Rpb25fbWV0YWRhdGEpIHtcbiAgICAgIHRocm93IEVycm9yKFwiRmFpbGVkIHRvIGZldGNoIG5lY2Vzc2FyeSBzZXR1cCBkYXRhIGZvciBMb29wXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXltZW50U2V0dXBJbmZvID0gcHJlRmxvd05leHRBY3Rpb25NZXRhZGF0YS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBsZXQgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IHBheW1lbnRTZXR1cEluZm9bXCJhdXRob3JpemF0aW9uX2Ftb3VudFwiXTtcbiAgICBsZXQgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IHBheW1lbnRTZXR1cEluZm9bXCJtaW5fYXV0aG9yaXphdGlvbl9hbW91bnRcIl07XG4gICAgY29uc3QgYWxsb3dDdXN0b21lclRvQ2hvb3NlQXV0aCA9IHBheW1lbnRTZXR1cEluZm9bXCJhbGxvd19jdXN0b21lcl90b19jaG9vc2VfYXV0aFwiXTtcbiAgICBsZXQgY2hhcmdlQW1vdW50VXNkQXRvbTtcbiAgICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICAgIGNoYXJnZUFtb3VudFVzZEF0b20gPSAwO1xuICAgICAgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IE1hdGgubWF4KHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQsIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFyZ2VBbW91bnRVc2RBdG9tID0gKGluaXRpYWxQcmV2aWV3ID8gaW5pdGlhbFByZXZpZXcuYW1vdW50QXRvbSA6IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20pICogcGF5bWVudFNldHVwSW5mb1tcInRva2VuX3ByaWNlXCJdO1xuICAgICAgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IE1hdGgubWF4KG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQsIGNoYXJnZUFtb3VudFVzZEF0b20pO1xuICAgICAgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IE1hdGgubWF4KHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQsIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQpO1xuICAgIH1cbiAgICBjb25zdCBwYXltZW50VXNkQW1vdW50ID0gY2hhcmdlQW1vdW50VXNkQXRvbTtcbiAgICBjb25zdCBjdXN0b21lclJlZklkID0gdjQoKTtcbiAgICBjb25zdCB3aWRnZXRQcm9wcyA9IHtcbiAgICAgIHBheW1lbnRVc2RBbW91bnQsXG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50LFxuICAgICAgY3VzdG9tZXJSZWZJZCxcbiAgICAgIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQsXG4gICAgICBhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoXG4gICAgfTtcbiAgICBjb25zdCBpbml0TG9vcENvbm5lY3RQcm9wcyA9IHtcbiAgICAgIGFwaVRva2VuOiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuYXBpX3Rva2VuLFxuICAgICAgZW50aXR5SWQ6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5lbnRpdHlfaWQsXG4gICAgICBtZXJjaGFudElkOiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLmVudmlyb25tZW50XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICB3aWRnZXRQcm9wcyxcbiAgICAgIGluaXRMb29wQ29ubmVjdFByb3BzXG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkxvb3BGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kYShgUnVubmluZyBMb29wIGZsb3cuLi5gKTtcbiAgICBsb2dfXyRhKFwiY29udGV4dFwiLCBjb250ZXh0KTtcbiAgICBsb2dfXyRhKFwiY2hlY2tvdXRQYXltZW50TWV0aG9kXCIsIGNoZWNrb3V0UGF5bWVudE1ldGhvZCk7XG4gICAgbG9nX18kYShcIm5vbkNkZUZvcm1JbnB1dHNcIiwgbm9uQ2RlRm9ybUlucHV0cyk7XG4gICAgbG9nX18kYShcImZsb3dDYWxsYmFja3NcIiwgZm9ybUNhbGxiYWNrcyk7XG4gICAgbG9nX18kYShcImN1c3RvbVBhcmFtc1wiLCBjdXN0b21QYXJhbXMpO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kYShg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtwcmVmaWxsLm1vZGV9XWApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgaXNDaGVja291dE1vZGUgPSBwcmVmaWxsLm1vZGUgIT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBjdXN0b21lckZpZWxkcyA9IGNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyk7XG4gICAgaWYgKCFjdXN0b21QYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gRmFpbGVkIHRvIHByb3Blcmx5IHN1Ym1pdCBmb3JtIGRhdGEuXCIpO1xuICAgIH1cbiAgICBpZiAoIWN1c3RvbVBhcmFtcy5zdWNjZXNzKSB7XG4gICAgICB0cmFjayhcImxvb3BfcGF5X2Zsb3dfZmFpbHVyZVwiLCBjdXN0b21QYXJhbXMpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBTdWNjZXNzIGlzIG5vdCB0cnVlLlwiKTtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAuLi5jdXN0b21lckZpZWxkcyxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogaXNDaGVja291dE1vZGUsXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGlzQ2hlY2tvdXRNb2RlID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogY3VzdG9tUGFyYW1zLnBheW1lbnRNZXRob2QucGF5bWVudE1ldGhvZElkLFxuICAgICAgLy8gTk9URTogd2UgZG8gaGF2ZSB0aGUgY2hlY2tvdXQgYXR0ZW1wdCBpZCBoZXJlIGV2ZW4gaWYgaXRzIGEgc2V0dXAsIGJ1dCBmb3Igbm93IHdlIGRvbid0IGluY2x1ZGUgaXRcbiAgICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBjaGVja291dCBhdHRlbXB0IHN1cHBvcnQgZm9yIHNldHVwIGludGVudHMuXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBpc0NoZWNrb3V0TW9kZSA/IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5jaGVja291dF9hdHRlbXB0X2lkIDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGxvb3BfY3VzdG9tZXI6IGN1c3RvbVBhcmFtcy5jdXN0b21lcixcbiAgICAgICAgbG9vcF9wYXltZW50X21ldGhvZDogY3VzdG9tUGFyYW1zLnBheW1lbnRNZXRob2QsXG4gICAgICAgIGxvb3Bfc3VjY2VzczogY3VzdG9tUGFyYW1zLnN1Y2Nlc3NcbiAgICAgIH1cbiAgICB9KTtcbiAgICBsb2dfXyRhKGBDb25maXJtIHJlc3VsdDogJHtjb25maXJtUmVzdWx0fWApO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgbG9nX18kYShgRG9pbmcgcGF5bWVudCBzZXR1cC4uLmApO1xuICAgICAgbG9nX18kYShg4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6YCwgY29uZmlybVJlc3VsdCk7XG4gICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICBsb2dfXyRhKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Y3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJGEoYERvaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICBpZiAoIWNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICAgICAgZXJyX18kYihcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kOSwgZXJyX186IGVycl9fJGEgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicGF5cGFsXCIpO1xuY29uc3QgUGF5cGFsQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwicGF5cGFsXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3QoeyBjbGllbnRfaWQ6IHouc3RyaW5nKCkgfSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xuY29uc3QgaW5pdFBheXBhbEZsb3cgPSBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgY29uc3QgcGF5cGFsQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFBheXBhbENwbSk7XG4gIGlmICghcGF5cGFsQ3BtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgfVxuICBjb25zdCBzdGFydEZsb3cgPSAoKSA9PiB7XG4gICAgcmV0dXJuIE9qc0Zsb3dzLnBheXBhbC5ydW4oe1xuICAgICAgY29udGV4dCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcGF5cGFsQ3BtLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiB7fSB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICBzdGFydEZsb3dcbiAgfTtcbn07XG5jb25zdCBydW5QYXlwYWxGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGxvZ19fJDkoYFJ1bm5pbmcgUGF5UGFsIGZsb3cuLi5gKTtcbiAgICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICAgIGNvbnN0IHsgaXNBbm9ueW1vdXMsIHVzZVJlZGlyZWN0RmxvdyB9ID0gY3VzdG9tUGFyYW1zLnNldHRpbmdzID8/IHt9O1xuICAgICAgbG9nX18kOShgVmVyaWZ5aW5nIENQTS4uLmApO1xuICAgICAgY29uc3QgY3BtID0gUGF5cGFsQ3BtLnBhcnNlKGNoZWNrb3V0UGF5bWVudE1ldGhvZCk7XG4gICAgICBsb2dfXyQ5KGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzYCk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsIHtcbiAgICAgICAgLi4uaXNBbm9ueW1vdXMgPyBnZW5lcmF0ZUFub255bW91c1ZhbHVlcygpIDogdm9pZCAwLFxuICAgICAgICAuLi5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5ld0N1c3RvbWVyRmllbGRzID0gY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICAgIGxvZ19fJDkoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke3ByZWZpbGwubW9kZX1gKTtcbiAgICAgIGNvbnN0IGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3cgPSB2NCgpO1xuICAgICAgY29uc3QgaXNQYXlGaXJzdEZsb3cgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0ID0ge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjcG0ucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjcG0sXG4gICAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogaXNQYXlGaXJzdEZsb3csXG4gICAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogaXNQYXlGaXJzdEZsb3cgPyB7XG4gICAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgICB9IDogdm9pZCAwLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6IHVzZVJlZGlyZWN0RmxvdyxcbiAgICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0Rmxvd1xuICAgICAgICB9LFxuICAgICAgICAuLi5uZXdDdXN0b21lckZpZWxkc1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHByZUFjdGlvblVybCA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIGNvbnRleHQuYmFzZVVybCkudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IGVuY29kZWRSZXF1ZXN0ID0gYnRvYShKU09OLnN0cmluZ2lmeShzdGFydFBheW1lbnRGbG93UmVxdWVzdCkpO1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgIHN0OiBwcmVmaWxsLnRva2VuLFxuICAgICAgICByOiBlbmNvZGVkUmVxdWVzdFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZWRpcmVjdFVybCA9IGAke3ByZUFjdGlvblVybH0/JHtzZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gO1xuICAgICAgaWYgKHVzZVJlZGlyZWN0Rmxvdykge1xuICAgICAgICBsb2dfXyQ5KFwiU3RhcnRpbmcgcmVkaXJlY3QgbW9kZSBmb3IgUGF5UGFsLi4uXCIpO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJlZGlyZWN0VXJsO1xuICAgICAgICBhd2FpdCBzbGVlcCgyMCAqIDFlMyk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGF5cGFsRmxvd1Jlc3VsdCA9IGF3YWl0IHN0YXJ0UG9wdXBXaW5kb3dWZXJpZmljYXRpb25TdHJpY3QoXG4gICAgICAgIFwiUGF5UGFsXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3csXG4gICAgICAgIHJlZGlyZWN0VXJsXG4gICAgICApO1xuICAgICAgbG9nX18kOShcIlBheXBhbCBmbG93IHJlc3VsdFwiLCBwYXlwYWxGbG93UmVzdWx0KTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0QXR0ZW1wdElkID0gcGFyc2VBcmdGcm9tSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYsIFwiY2F0dFwiKTtcbiAgICAgIGNvbnN0IGFwcHJvdmFsU2Vzc2lvbklkID0gcGFyc2VBcmdGcm9tSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYsIFwiYXBwcm92YWxfc2Vzc2lvbl9pZFwiKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGlzUGF5Rmlyc3RGbG93ID8gY2hlY2tvdXRBdHRlbXB0SWQgOiB2b2lkIDAsXG4gICAgICAgIHRoZWlyX3BtX2lkOiBpc1BheUZpcnN0RmxvdyA/IGFwcHJvdmFsU2Vzc2lvbklkIDogdm9pZCAwXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJDkoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJwYXlwYWxcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjcG0sXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBpc1BheUZpcnN0Rmxvd1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRhKFwiUGF5UGFsIHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfZXJyb3JcIiwgeyBwYXltZW50X21ldGhvZDogXCJwYXlwYWxcIiwgZXJyb3I6IGVyciB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kOCwgZXJyX186IGVycl9fJDkgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9ja3l0LXBheXBhbFwiKTtcbmNvbnN0IFBvY2t5dFBheXBhbENwbSA9IHoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHouc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGluaXRQb2NreXRQYXlwYWxGbG93ID0gYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gIGNvbnN0IHBvY2t5dFBheXBhbENwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBQb2NreXRQYXlwYWxDcG0pO1xuICBpZiAoIXBvY2t5dFBheXBhbENwbSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlBvY2t5dCBQYXlQYWwgQ1BNIG5vdCBmb3VuZCBpbiBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzXCIpO1xuICB9XG4gIGNvbnN0IHN0YXJ0RmxvdyA9ICgpID0+IHtcbiAgICByZXR1cm4gT2pzRmxvd3MucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0LFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBwb2NreXRQYXlwYWxDcG0sXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IHt9IH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgIHN0YXJ0Rmxvd1xuICB9O1xufTtcbmNvbnN0IHJ1blBvY2t5dFBheXBhbEZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyQ4KGBSdW5uaW5nIFBvY2t5dCBQYXlwYWwgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kOChgVmVyaWZ5aW5nIENQTS4uLmApO1xuICAgIGNvbnN0IGNwbSA9IFBvY2t5dFBheXBhbENwbS5wYXJzZShjaGVja291dFBheW1lbnRNZXRob2QpO1xuICAgIGxvZ19fJDgoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNgKTtcbiAgICBjb25zdCBzZXR0aW5ncyA9IGN1c3RvbVBhcmFtcz8uc2V0dGluZ3M7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgc2V0dGluZ3M/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgY29uc3QgbmV3Q3VzdG9tZXJGaWVsZHMgPSBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgIGxvZ19fJDgoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke3ByZWZpbGwubW9kZX1gKTtcbiAgICBjb25zdCBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93ID0gdjQoKTtcbiAgICBjb25zdCBpc1BheUZpcnN0RmxvdyA9IHByZWZpbGwubW9kZSAhPT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0ID0ge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY3BtLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNwbSxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogaXNQYXlGaXJzdEZsb3csXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGlzUGF5Rmlyc3RGbG93ID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6ICEhY3VzdG9tUGFyYW1zPy5zZXR0aW5ncz8udXNlUmVkaXJlY3RGbG93LFxuICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0Rmxvd1xuICAgICAgfSxcbiAgICAgIC4uLm5ld0N1c3RvbWVyRmllbGRzXG4gICAgfTtcbiAgICBjb25zdCBwcmVBY3Rpb25VcmwgPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCBjb250ZXh0LmJhc2VVcmwpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZW5jb2RlZFJlcXVlc3QgPSBidG9hKEpTT04uc3RyaW5naWZ5KHN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0KSk7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICBzdDogcHJlZmlsbC50b2tlbixcbiAgICAgIHI6IGVuY29kZWRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBgJHtwcmVBY3Rpb25Vcmx9PyR7c2VhcmNoUGFyYW1zLnRvU3RyaW5nKCl9YDtcbiAgICBpZiAoY3VzdG9tUGFyYW1zPy5zZXR0aW5ncz8udXNlUmVkaXJlY3RGbG93KSB7XG4gICAgICBsb2dfXyQ4KFwiU3RhcnRpbmcgcmVkaXJlY3QgbW9kZSBmb3IgUGF5UGFsLi4uXCIpO1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZWRpcmVjdFVybDtcbiAgICAgIGF3YWl0IHNsZWVwKDIwICogMWUzKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIH1cbiAgICBsb2dfXyQ4KFwiU3RhcnRpbmcgcG9wdXAgbW9kZSBmb3IgUGF5UGFsLi4uXCIpO1xuICAgIGxvZ19fJDgoYE9wZW5pbmcgcGF5cGFsIGlmcmFtZS4uLmApO1xuICAgIGNvbnN0IHBheXBhbEZsb3dSZXN1bHQgPSBhd2FpdCBzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0KFxuICAgICAgXCJQYXlQYWxcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93LFxuICAgICAgcmVkaXJlY3RVcmxcbiAgICApO1xuICAgIGxvZ19fJDgoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgcGF5cGFsRmxvd1Jlc3VsdCk7XG4gICAgY29uc3QgdmF1bHRJZCA9IHBhcnNlVmF1bHRJZEZyb20zZHNIcmVmKHBheXBhbEZsb3dSZXN1bHQuaHJlZik7XG4gICAgY29uc3QgY2hlY2tvdXRBdHRlbXB0SWQgPSBwYXJzZUFyZ0Zyb21IcmVmKHBheXBhbEZsb3dSZXN1bHQuaHJlZiwgXCJjYXR0XCIpO1xuICAgIGlmICghY2hlY2tvdXRBdHRlbXB0SWQpIHtcbiAgICAgIGVycl9fJDkoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkw6XCIsIHBheXBhbEZsb3dSZXN1bHQuaHJlZik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkxcIik7XG4gICAgfVxuICAgIGxvZ19fJDgoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7dmF1bHRJZH1gKTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiB2YXVsdElkLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogaXNQYXlGaXJzdEZsb3cgPyBjaGVja291dEF0dGVtcHRJZCA6IHZvaWQgMFxuICAgIH0pO1xuICAgIGxvZ19fJDgoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kc1swXS5pZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICAgICAgZXJyX18kOShcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNywgZXJyX186IGVycl9fJDggfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWFmZmlybVwiKTtcbmNvbnN0IFN0cmlwZUFmZmlybUNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFmZmlybVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgU3RyaXBlQWZmaXJtUmVxdWlyZWRVc2VyQWN0aW9ucyA9IHouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpLFxuICAgIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgaW5pdFN0cmlwZUFmZmlybUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQ3KGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBBZmZpcm0uLi5gKTtcbiAgICBjb25zdCBzdHJpcGVBZmZpcm1DcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlQWZmaXJtQ3BtKTtcbiAgICBpZiAoIXN0cmlwZUFmZmlybUNwbSkge1xuICAgICAgbG9nX18kNyhgTm8gU3RyaXBlIEFmZmlybSBDUE0gZm91bmRgKTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgfVxuICAgIGxvZ19fJDcoYFN0YXJ0aW5nIHN0cmlwZSBhZmZpcm0gZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICAgIGxvZ19fJDcoYFNldHVwIG1vZGUgaXMgbm90IHN1cHBvcnRlZCBmb3IgU3RyaXBlIEFmZmlybSBmbG93YCk7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIH1cbiAgICBjb25zdCBzdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gT2pzRmxvd3Muc3RyaXBlQWZmaXJtLnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHN0cmlwZUFmZmlybUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczogY3VzdG9tUGFyYW1zID8/IHt9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6IHRydWUgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycl9fJDgoYEVycm9yIHN0YXJ0aW5nIEFmZmlybSBmbG93OmAsIGVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBzdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuU3RyaXBlQWZmaXJtRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoeyBjb250ZXh0LCBjaGVja291dFBheW1lbnRNZXRob2QsIG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGxvZ19fJDcoYFJ1bm5pbmcgU3RyaXBlIEFmZmlybSBwYXktZmlyc3QgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kNyhgVmFsaWRhdGluZyBmb3JtIGZpZWxkcy4uLmApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGxvZ19fJDcoYENyZWF0aW5nIGNhcnQgaW5mbyBmb3IgcGF5LWZpcnN0IGZsb3cuLi5gKTtcbiAgICBjb25zdCBjYXJ0SW5mbyA9IHtcbiAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIHByaWNlX2lkOiBpdGVtLnByaWNlX2lkLFxuICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eVxuICAgICAgfSkpLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSB8fCB2b2lkIDAsXG4gICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9O1xuICAgIGxvZ19fJDcoYFN0YXJ0aW5nIHBheS1maXJzdCBwYXltZW50IGZsb3cgZm9yIEFmZmlybS4uLmApO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogdHJ1ZSxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogY2FydEluZm8sXG4gICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBsb2dfXyQ3KFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gU3RyaXBlQWZmaXJtUmVxdWlyZWRVc2VyQWN0aW9ucy5wYXJzZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zKTtcbiAgICBjb25zdCB7IGNsaWVudF9zZWNyZXQgfSA9IG5leHRBY3Rpb25NZXRhZGF0YVswXTtcbiAgICBsb2dfXyQ3KFwiQ2xpZW50IHNlY3JldCBmb3IgcGF5bWVudCBpbnRlbnRcIiwgY2xpZW50X3NlY3JldCk7XG4gICAgY29uc3Qgc3RyaXBlQWZmaXJtQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUFmZmlybUNwbSk7XG4gICAgaWYgKCFzdHJpcGVBZmZpcm1DcG0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0cmlwZSBBZmZpcm0gQ1BNIG5vdCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgeyBzdHJpcGUgfSA9IGF3YWl0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzKHN0cmlwZUFmZmlybUNwbS5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwicGF5bWVudFwiLFxuICAgICAgLy8gVXNlIHBheW1lbnQgbW9kZSBmb3IgcGF5LWZpcnN0IGZsb3dcbiAgICAgIGN1cnJlbmN5OiBwcmVmaWxsLmN1cnJlbmN5ID8/IFwidXNkXCIsXG4gICAgICBhbW91bnQ6IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9KTtcbiAgICBsb2dfXyQ3KFwiU3RyaXBlIGluc3RhbmNlIGNyZWF0ZWRcIiwgc3RyaXBlKTtcbiAgICBjb25zdCBiaWxsaW5nQWRkcmVzcyA9IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpO1xuICAgIGNvbnN0IGN1c3RvbWVyTmFtZSA9IGAke25vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdfSAke25vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV19YDtcbiAgICBjb25zdCBhZmZpcm1QYXltZW50RGF0YSA9IHtcbiAgICAgIHJldHVybl91cmw6IG5ldyBVUkwoXCIvYXBwLzNkcy9zdWNjZXNzL1wiLCBjb250ZXh0LmJhc2VVcmwpLnRvU3RyaW5nKCksXG4gICAgICBwYXltZW50X21ldGhvZDoge1xuICAgICAgICBiaWxsaW5nX2RldGFpbHM6IHtcbiAgICAgICAgICBlbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICAgIG5hbWU6IGN1c3RvbWVyTmFtZSxcbiAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICBsaW5lMTogYmlsbGluZ0FkZHJlc3MubGluZTEsXG4gICAgICAgICAgICBsaW5lMjogYmlsbGluZ0FkZHJlc3MubGluZTIgfHwgdm9pZCAwLFxuICAgICAgICAgICAgY2l0eTogYmlsbGluZ0FkZHJlc3MuY2l0eSxcbiAgICAgICAgICAgIHN0YXRlOiBiaWxsaW5nQWRkcmVzcy5zdGF0ZSxcbiAgICAgICAgICAgIGNvdW50cnk6IGJpbGxpbmdBZGRyZXNzLmNvdW50cnksXG4gICAgICAgICAgICBwb3N0YWxfY29kZTogYmlsbGluZ0FkZHJlc3MuemlwX2NvZGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFmZmlybU9wdGlvbnMgPSB7XG4gICAgICBoYW5kbGVBY3Rpb25zOiBmYWxzZVxuICAgIH07XG4gICAgbG9nX18kNyhgQ29uZmlybWluZyBBZmZpcm0gcGF5bWVudCB3aXRoIGNsaWVudCBzZWNyZXQ6ICR7Y2xpZW50X3NlY3JldH1gKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBlcnJvciwgcGF5bWVudEludGVudCB9ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1BZmZpcm1QYXltZW50KFxuICAgICAgICBjbGllbnRfc2VjcmV0LFxuICAgICAgICBhZmZpcm1QYXltZW50RGF0YSxcbiAgICAgICAgYWZmaXJtT3B0aW9uc1xuICAgICAgKTtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBlcnJfXyQ4KFwiQWZmaXJtIHBheW1lbnQgY29uZmlybWF0aW9uIGVycm9yOlwiLCBlcnJvcik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQWZmaXJtIHBheW1lbnQgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICBsb2dfXyQ3KFwiQWZmaXJtIHBheW1lbnQgY29uZmlybWVkIHN1Y2Nlc3NmdWxseVwiLCBwYXltZW50SW50ZW50KTtcbiAgICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gcGF5bWVudEludGVudD8ubmV4dF9hY3Rpb24/LnJlZGlyZWN0X3RvX3VybD8udXJsO1xuICAgICAgaWYgKCFyZWRpcmVjdFVybCkge1xuICAgICAgICBlcnJfXyQ4KFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kIGluIEtsYXJuYSBwYXltZW50IGNvbmZpcm1hdGlvblwiKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKFwiS2xhcm5hIHBheW1lbnQgZmFpbGVkXCIpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgICByZXN1bHQ6IHsgaW52b2ljZV91cmxzOiBbXSwgc3Vic2NyaXB0aW9uX2lkczogW10sIGN1c3RvbWVyX2lkOiBcIlwiLCBwYXltZW50X21ldGhvZF9pZDogXCJcIiB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBsb2dfXyQ3KFwiUGF5bWVudCByZXF1aXJlcyBhZGRpdGlvbmFsIGFjdGlvbiwgc3RhcnRpbmcgM0RTIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkFmZmlybSB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgICBsb2dfXyQ3KFwiM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICAgICAgY29uc3QgdGhlaXJQYXltZW50TWV0aG9kID0gcGF5bWVudEludGVudD8ucGF5bWVudF9tZXRob2Q/LnRvU3RyaW5nKCkgPz8gdm9pZCAwO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLmNoZWNrb3V0X2F0dGVtcHRfaWQsXG4gICAgICAgIHRoZWlyX3BtX2lkOiB0aGVpclBheW1lbnRNZXRob2RcbiAgICAgIH0pO1xuICAgICAgbG9nX18kNyhcIlBheW1lbnQgZmxvdyBjb25maXJtZWRcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJzdHJpcGUtYWZmaXJtXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJfXyQ4KFwiRXJyb3IgaW4gQWZmaXJtIHBheW1lbnQgZmxvdzpcIiwgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ2LCBlcnJfXzogZXJyX18kNyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtYWZ0ZXJwYXlcIik7XG5jb25zdCBTdHJpcGVBZnRlcnBheUNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFmdGVycGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBTdHJpcGVBZnRlcnBheVJlcXVpcmVkVXNlckFjdGlvbnMgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpLm51bGxpc2goKSxcbiAgICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGluaXRTdHJpcGVBZnRlcnBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQ2KGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBBZnRlcnBheS4uLmApO1xuICAgIGNvbnN0IHN0cmlwZUFmdGVycGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUFmdGVycGF5Q3BtKTtcbiAgICBpZiAoIXN0cmlwZUFmdGVycGF5Q3BtKSB7XG4gICAgICBsb2dfXyQ2KGBObyBTdHJpcGUgQWZ0ZXJwYXkgQ1BNIGZvdW5kYCk7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIH1cbiAgICBsb2dfXyQ2KGBTdGFydGluZyBzdHJpcGUgYWZ0ZXJwYXkgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICAgIGxvZ19fJDYoYFNldHVwIG1vZGUgbm90IHN1cHBvcnRlZCBmb3IgU3RyaXBlIEFmdGVycGF5IGZsb3dgKTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBPanNGbG93cy5zdHJpcGVBZnRlcnBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBzdHJpcGVBZnRlcnBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczogY3VzdG9tUGFyYW1zID8/IHt9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6IHRydWUgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycl9fJDcoYEVycm9yIHN0YXJ0aW5nIEFmdGVycGF5IGZsb3c6YCwgZXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIHN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5TdHJpcGVBZnRlcnBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHsgY29udGV4dCwgY2hlY2tvdXRQYXltZW50TWV0aG9kLCBub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQ2KGBSdW5uaW5nIFN0cmlwZSBBZnRlcnBheSBwYXktZmlyc3QgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kNihgVmFsaWRhdGluZyBmb3JtIGZpZWxkcy4uLmApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGxvZ19fJDYoYENyZWF0aW5nIGNhcnQgaW5mbyBmb3IgcGF5LWZpcnN0IGZsb3cuLi5gKTtcbiAgICBjb25zdCBjYXJ0SW5mbyA9IHtcbiAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIHByaWNlX2lkOiBpdGVtLnByaWNlX2lkLFxuICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eVxuICAgICAgfSkpLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSB8fCB2b2lkIDAsXG4gICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9O1xuICAgIGxvZ19fJDYoYFN0YXJ0aW5nIHBheS1maXJzdCBwYXltZW50IGZsb3cgZm9yIEFmdGVycGF5Li4uYCk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiB0cnVlLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBjYXJ0SW5mbyxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGxvZ19fJDYoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBTdHJpcGVBZnRlcnBheVJlcXVpcmVkVXNlckFjdGlvbnMucGFyc2UoXG4gICAgICBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zXG4gICAgKTtcbiAgICBjb25zdCB7IGNsaWVudF9zZWNyZXQgfSA9IG5leHRBY3Rpb25NZXRhZGF0YVswXTtcbiAgICBsb2dfXyQ2KFwiQ2xpZW50IHNlY3JldCBmb3IgcGF5bWVudCBpbnRlbnRcIiwgY2xpZW50X3NlY3JldCk7XG4gICAgY29uc3Qgc3RyaXBlQWZ0ZXJwYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlQWZ0ZXJwYXlDcG0pO1xuICAgIGlmICghc3RyaXBlQWZ0ZXJwYXlDcG0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0cmlwZSBBZnRlcnBheSBDUE0gbm90IGZvdW5kXCIpO1xuICAgIH1cbiAgICBjb25zdCB7IHN0cmlwZSB9ID0gYXdhaXQgY3JlYXRlU3RyaXBlRWxlbWVudHMoc3RyaXBlQWZ0ZXJwYXlDcG0ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInBheW1lbnRcIixcbiAgICAgIC8vIFVzZSBwYXltZW50IG1vZGUgZm9yIHBheS1maXJzdCBmbG93XG4gICAgICBjdXJyZW5jeTogcHJlZmlsbC5jdXJyZW5jeSA/PyBcInVzZFwiLFxuICAgICAgYW1vdW50OiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tXG4gICAgfSk7XG4gICAgbG9nX18kNihcIlN0cmlwZSBpbnN0YW5jZSBjcmVhdGVkXCIsIHN0cmlwZSk7XG4gICAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKTtcbiAgICBjb25zdCBjdXN0b21lck5hbWUgPSBgJHtub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXX0gJHtub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdfWA7XG4gICAgY29uc3QgYWZ0ZXJwYXlQYXltZW50RGF0YSA9IHtcbiAgICAgIHJldHVybl91cmw6IG5ldyBVUkwoXCIvYXBwLzNkcy9zdWNjZXNzL1wiLCBjb250ZXh0LmJhc2VVcmwpLnRvU3RyaW5nKCksXG4gICAgICBwYXltZW50X21ldGhvZDoge1xuICAgICAgICBiaWxsaW5nX2RldGFpbHM6IHtcbiAgICAgICAgICBlbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICAgIG5hbWU6IGN1c3RvbWVyTmFtZSxcbiAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICBsaW5lMTogYmlsbGluZ0FkZHJlc3MubGluZTEsXG4gICAgICAgICAgICBsaW5lMjogYmlsbGluZ0FkZHJlc3MubGluZTIgfHwgdm9pZCAwLFxuICAgICAgICAgICAgY2l0eTogYmlsbGluZ0FkZHJlc3MuY2l0eSxcbiAgICAgICAgICAgIHN0YXRlOiBiaWxsaW5nQWRkcmVzcy5zdGF0ZSxcbiAgICAgICAgICAgIGNvdW50cnk6IGJpbGxpbmdBZGRyZXNzLmNvdW50cnksXG4gICAgICAgICAgICBwb3N0YWxfY29kZTogYmlsbGluZ0FkZHJlc3MuemlwX2NvZGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFmdGVycGF5T3B0aW9ucyA9IHtcbiAgICAgIGhhbmRsZUFjdGlvbnM6IGZhbHNlXG4gICAgfTtcbiAgICBsb2dfXyQ2KGBDb25maXJtaW5nIEFmdGVycGF5IHBheW1lbnQgd2l0aCBjbGllbnQgc2VjcmV0OiAke2NsaWVudF9zZWNyZXR9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpcm1hdGlvblJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jb25maXJtQWZ0ZXJwYXlDbGVhcnBheVBheW1lbnQoXG4gICAgICAgIGNsaWVudF9zZWNyZXQsXG4gICAgICAgIGFmdGVycGF5UGF5bWVudERhdGEsXG4gICAgICAgIGFmdGVycGF5T3B0aW9uc1xuICAgICAgKTtcbiAgICAgIGxvZ19fJDYoYEFmdGVycGF5IHBheW1lbnQgY29uZmlybWF0aW9uIHJlc3VsdDpgLCBjb25maXJtYXRpb25SZXN1bHQpO1xuICAgICAgaWYgKGNvbmZpcm1hdGlvblJlc3VsdC5wYXltZW50SW50ZW50Py5uZXh0X2FjdGlvbj8udHlwZSA9PT0gXCJyZWRpcmVjdF90b191cmxcIikge1xuICAgICAgICBjb25zdCByZWRpcmVjdFVybCA9IGNvbmZpcm1hdGlvblJlc3VsdC5wYXltZW50SW50ZW50Py5uZXh0X2FjdGlvbj8ucmVkaXJlY3RfdG9fdXJsPy51cmw7XG4gICAgICAgIGlmICghcmVkaXJlY3RVcmwpIHtcbiAgICAgICAgICBlcnJfXyQ3KFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kIGluIEFmdGVycGF5IHBheW1lbnQgY29uZmlybWF0aW9uXCIpO1xuICAgICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihcIkFmdGVycGF5IHBheW1lbnQgZmFpbGVkXCIpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgICAgICByZXN1bHQ6IHsgaW52b2ljZV91cmxzOiBbXSwgc3Vic2NyaXB0aW9uX2lkczogW10sIGN1c3RvbWVyX2lkOiBcIlwiLCBwYXltZW50X21ldGhvZF9pZDogXCJcIiB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsb2dfXyQ2KFwiQWZ0ZXJwYXkgdmVyaWZpY2F0aW9uIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgICAgZnJhbWVUaXRsZTogXCJBZnRlcnBheSB2ZXJpZmljYXRpb25cIlxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kNihg4pWwIEFmdGVycGF5IHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFmdGVycGF5IHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWZ0ZXJwYXkgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBsb2dfXyQ2KFwiQWZ0ZXJwYXkgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCwgY29uZmlybWluZyB3aXRoIGJhY2tlbmQuLi5cIik7XG4gICAgICAgIGNvbnN0IHRoZWlyUGF5bWVudE1ldGhvZCA9IGNvbmZpcm1hdGlvblJlc3VsdC5wYXltZW50SW50ZW50Py5wYXltZW50X21ldGhvZD8udG9TdHJpbmcoKSA/PyB2b2lkIDA7XG4gICAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UuY2hlY2tvdXRfYXR0ZW1wdF9pZCxcbiAgICAgICAgICB0aGVpcl9wbV9pZDogdGhlaXJQYXltZW50TWV0aG9kXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgICAgbG9nUHJlZml4OiBcInN0cmlwZS1hZnRlcnBheVwiLFxuICAgICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICAgIHVzZVBheUZpcnN0RmxvdzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJDYoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gQWZ0ZXJwYXkgcGF5bWVudCBjb25maXJtYXRpb25cIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZCBpbiBBZnRlcnBheSBwYXltZW50IGNvbmZpcm1hdGlvblwiKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyX18kNyhcIkVycm9yIGluIEFmdGVycGF5IGNoZWNrb3V0IGZsb3c6XCIsIGVycm9yKTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJBZnRlcnBheSBwYXltZW50IGZhaWxlZFwiO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ1LCBlcnJfXzogZXJyX18kNiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUta2xhcm5hXCIpO1xuY29uc3QgU3RyaXBlS2xhcm5hQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwia2xhcm5hXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBTdHJpcGVLbGFybmFSZXF1aXJlZFVzZXJBY3Rpb25zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5udWxsaXNoKCksXG4gICAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0U3RyaXBlS2xhcm5hRmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGxvZ19fJDUoYENoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIEtsYXJuYS4uLmApO1xuICAgIGNvbnN0IHN0cmlwZUtsYXJuYUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVLbGFybmFDcG0pO1xuICAgIGlmICghc3RyaXBlS2xhcm5hQ3BtKSB7XG4gICAgICBsb2dfXyQ1KGBObyBTdHJpcGUgS2xhcm5hIENQTSBmb3VuZGApO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICB9XG4gICAgbG9nX18kNShgU3RhcnRpbmcgc3RyaXBlIGtsYXJuYSBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGlmIChpc1NldHVwTW9kZSkge1xuICAgICAgbG9nX18kNShgU2V0dXAgbW9kZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBTdHJpcGUgS2xhcm5hIGZsb3dgKTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBPanNGbG93cy5zdHJpcGVLbGFybmEucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogc3RyaXBlS2xhcm5hQ3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiBjdXN0b21QYXJhbXMgPz8ge30sXG4gICAgICAgICAgaW5pdFJlc3VsdDogeyBpc0F2YWlsYWJsZTogdHJ1ZSB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXJyX18kNihgRXJyb3Igc3RhcnRpbmcgS2xhcm5hIGZsb3c6YCwgZXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIHN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5TdHJpcGVLbGFybmFGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7IGNvbnRleHQsIGNoZWNrb3V0UGF5bWVudE1ldGhvZCwgbm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kNShgUnVubmluZyBTdHJpcGUgS2xhcm5hIHBheS1maXJzdCBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBsb2dfXyQ1KGBWYWxpZGF0aW5nIGZvcm0gZmllbGRzLi4uYCk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgbG9nX18kNShgQ3JlYXRpbmcgY2FydCBpbmZvIGZvciBwYXktZmlyc3QgZmxvdy4uLmApO1xuICAgIGNvbnN0IGNhcnRJbmZvID0ge1xuICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgcHJpY2VfaWQ6IGl0ZW0ucHJpY2VfaWQsXG4gICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5XG4gICAgICB9KSksXG4gICAgICBwcm9tb3Rpb25fY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdIHx8IHZvaWQgMCxcbiAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbVxuICAgIH07XG4gICAgbG9nX18kNShgU3RhcnRpbmcgcGF5LWZpcnN0IHBheW1lbnQgZmxvdyBmb3IgS2xhcm5hLi4uYCk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiB0cnVlLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBjYXJ0SW5mbyxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGxvZ19fJDUoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBTdHJpcGVLbGFybmFSZXF1aXJlZFVzZXJBY3Rpb25zLnBhcnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpO1xuICAgIGNvbnN0IHsgY2xpZW50X3NlY3JldCB9ID0gbmV4dEFjdGlvbk1ldGFkYXRhWzBdO1xuICAgIGxvZ19fJDUoXCJDbGllbnQgc2VjcmV0IGZvciBwYXltZW50IGludGVudFwiLCBjbGllbnRfc2VjcmV0KTtcbiAgICBjb25zdCBzdHJpcGVLbGFybmFDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlS2xhcm5hQ3BtKTtcbiAgICBpZiAoIXN0cmlwZUtsYXJuYUNwbSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyaXBlIEtsYXJuYSBDUE0gbm90IGZvdW5kXCIpO1xuICAgIH1cbiAgICBjb25zdCB7IHN0cmlwZSB9ID0gYXdhaXQgY3JlYXRlU3RyaXBlRWxlbWVudHMoc3RyaXBlS2xhcm5hQ3BtLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJwYXltZW50XCIsXG4gICAgICAvLyBVc2UgcGF5bWVudCBtb2RlIGZvciBwYXktZmlyc3QgZmxvd1xuICAgICAgY3VycmVuY3k6IHByZWZpbGwuY3VycmVuY3kgPz8gXCJ1c2RcIixcbiAgICAgIGFtb3VudDogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbVxuICAgIH0pO1xuICAgIGxvZ19fJDUoXCJTdHJpcGUgaW5zdGFuY2UgY3JlYXRlZFwiLCBzdHJpcGUpO1xuICAgIGNvbnN0IGJpbGxpbmdBZGRyZXNzID0gZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyk7XG4gICAgY29uc3QgY3VzdG9tZXJOYW1lID0gYCR7bm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV19ICR7bm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXX1gO1xuICAgIGNvbnN0IGtsYXJuYVBheW1lbnREYXRhID0ge1xuICAgICAgcmV0dXJuX3VybDogbmV3IFVSTChcIi9hcHAvM2RzL3N1Y2Nlc3MvXCIsIGNvbnRleHQuYmFzZVVybCkudG9TdHJpbmcoKSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudF9tZXRob2Q6IHtcbiAgICAgICAgYmlsbGluZ19kZXRhaWxzOiB7XG4gICAgICAgICAgZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgICBuYW1lOiBjdXN0b21lck5hbWUsXG4gICAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgICAgbGluZTE6IGJpbGxpbmdBZGRyZXNzLmxpbmUxLFxuICAgICAgICAgICAgbGluZTI6IGJpbGxpbmdBZGRyZXNzLmxpbmUyIHx8IHZvaWQgMCxcbiAgICAgICAgICAgIGNpdHk6IGJpbGxpbmdBZGRyZXNzLmNpdHksXG4gICAgICAgICAgICBzdGF0ZTogYmlsbGluZ0FkZHJlc3Muc3RhdGUsXG4gICAgICAgICAgICBjb3VudHJ5OiBiaWxsaW5nQWRkcmVzcy5jb3VudHJ5LFxuICAgICAgICAgICAgcG9zdGFsX2NvZGU6IGJpbGxpbmdBZGRyZXNzLnppcF9jb2RlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBrbGFybmFPcHRpb25zID0ge1xuICAgICAgaGFuZGxlQWN0aW9uczogZmFsc2VcbiAgICB9O1xuICAgIGxvZ19fJDUoYENvbmZpcm1pbmcgS2xhcm5hIHBheW1lbnQgd2l0aCBjbGllbnQgc2VjcmV0OiAke2NsaWVudF9zZWNyZXR9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpcm1hdGlvblJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jb25maXJtS2xhcm5hUGF5bWVudChjbGllbnRfc2VjcmV0LCBrbGFybmFQYXltZW50RGF0YSwga2xhcm5hT3B0aW9ucyk7XG4gICAgICBsb2dfXyQ1KGBLbGFybmEgcGF5bWVudCBjb25maXJtYXRpb24gcmVzdWx0OmAsIGNvbmZpcm1hdGlvblJlc3VsdCk7XG4gICAgICBpZiAoY29uZmlybWF0aW9uUmVzdWx0LnBheW1lbnRJbnRlbnQ/Lm5leHRfYWN0aW9uPy50eXBlID09PSBcInJlZGlyZWN0X3RvX3VybFwiKSB7XG4gICAgICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gY29uZmlybWF0aW9uUmVzdWx0LnBheW1lbnRJbnRlbnQ/Lm5leHRfYWN0aW9uPy5yZWRpcmVjdF90b191cmw/LnVybDtcbiAgICAgICAgaWYgKCFyZWRpcmVjdFVybCkge1xuICAgICAgICAgIGVycl9fJDYoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gS2xhcm5hIHBheW1lbnQgY29uZmlybWF0aW9uXCIpO1xuICAgICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihcIktsYXJuYSBwYXltZW50IGZhaWxlZFwiKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICAgICAgcmVzdWx0OiB7IGludm9pY2VfdXJsczogW10sIHN1YnNjcmlwdGlvbl9pZHM6IFtdLCBjdXN0b21lcl9pZDogXCJcIiwgcGF5bWVudF9tZXRob2RfaWQ6IFwiXCIgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbG9nX18kNShcIktsYXJuYSB2ZXJpZmljYXRpb24gUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgICB1cmw6IHJlZGlyZWN0VXJsLFxuICAgICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgICBmcmFtZVRpdGxlOiBcIktsYXJuYSB2ZXJpZmljYXRpb25cIlxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kNShg4pWwIEtsYXJuYSB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJLbGFybmEgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJLbGFybmEgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBsb2dfXyQ1KFwiS2xhcm5hIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQsIGNvbmZpcm1pbmcgd2l0aCBiYWNrZW5kLi4uXCIpO1xuICAgICAgICBjb25zdCB0aGVpclBheW1lbnRNZXRob2QgPSBjb25maXJtYXRpb25SZXN1bHQucGF5bWVudEludGVudD8ucGF5bWVudF9tZXRob2Q/LnRvU3RyaW5nKCkgPz8gdm9pZCAwO1xuICAgICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLmNoZWNrb3V0X2F0dGVtcHRfaWQsXG4gICAgICAgICAgdGhlaXJfcG1faWQ6IHRoZWlyUGF5bWVudE1ldGhvZFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICAgIGxvZ1ByZWZpeDogXCJzdHJpcGUta2xhcm5hXCIsXG4gICAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nX18kNShcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZCBpbiBLbGFybmEgcGF5bWVudCBjb25maXJtYXRpb25cIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZCBpbiBLbGFybmEgcGF5bWVudCBjb25maXJtYXRpb25cIik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycl9fJDYoXCJFcnJvciBpbiBLbGFybmEgY2hlY2tvdXQgZmxvdzpcIiwgZXJyb3IpO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIktsYXJuYSBwYXltZW50IGZhaWxlZFwiO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCBPSlNfU1RSSVBFX0xJTktfQlROX0lEID0gXCJvanMtc3RyaXBlLWxpbmstYnRuXCI7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ0LCBlcnJfXzogZXJyX18kNSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtbGlua1wiKTtcbmNvbnN0IFN0cmlwZUxpbmtDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGluaXRTdHJpcGVMaW5rRmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IGluaXRQYXJhbXMgPSBjb250ZXh0LmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICBsb2dfXyQ0KGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBMaW5rLi4uYCk7XG4gICAgY29uc3Qgc3RyaXBlTGlua0NwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVMaW5rQ3BtKTtcbiAgICBsb2dfXyQ0KGBTdGFydGluZyBzdHJpcGUgbGluayBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGxvZ19fJDQoYENyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLmApO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHsgZWxlbWVudHMsIHN0cmlwZSB9ID0gYXdhaXQgY3JlYXRlU3RyaXBlRWxlbWVudHMoc3RyaXBlTGlua0NwbS5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIGN1cnJlbmN5OiBpbml0aWFsUHJldmlldy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgY29uc3QgbGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudCA9IGVsZW1lbnRzLmNyZWF0ZShcImxpbmtBdXRoZW50aWNhdGlvblwiKTtcbiAgICBsb2dfXyQ0KGBDcmVhdGluZyBleHByZXNzIGNoZWNrb3V0Li4uYCk7XG4gICAgY29uc3QgZXhwcmVzc0NoZWNrb3V0RWxlbWVudCA9IGVsZW1lbnRzLmNyZWF0ZShcImV4cHJlc3NDaGVja291dFwiLCB7XG4gICAgICBidXR0b25IZWlnaHQ6IGluaXRQYXJhbXM/LmJ1dHRvbkhlaWdodCxcbiAgICAgIHBheW1lbnRNZXRob2RzOiB7XG4gICAgICAgIGFtYXpvblBheTogXCJuZXZlclwiLFxuICAgICAgICBhcHBsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBnb29nbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgcGF5cGFsOiBcIm5ldmVyXCJcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZW5kZXJMaW5rQXV0aGVudGljYXRpb25FbGVtZW50ID0gKHNlbGVjdG9yLCBzaWxlbnQpID0+IHtcbiAgICAgIGxldCBwYXJlbnRDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICAgIGlmICghcGFyZW50Q29udGFpbmVyKSB7XG4gICAgICAgIGVycl9fJDUoYFJlY29tbWFuZGVkIHRvIHJlbmRlciBhIGNvbnRhaW5lciB3aXRoICR7c2VsZWN0b3J9IHRvIGF2b2lkIHJlbmRlcmluZyBpbiB0aGUgYm9keWApO1xuICAgICAgICBwYXJlbnRDb250YWluZXIgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgfVxuICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHBhcmVudENvbnRhaW5lcj8uYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgICAgIGxpbmtBdXRoZW50aWNhdGlvbkVsZW1lbnQubW91bnQoY29udGFpbmVyKTtcbiAgICAgIGxldCBpc0F1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcbiAgICAgIGxldCBpc0xpbmtBdXRoUmVhZHkgPSBmYWxzZTtcbiAgICAgIGxpbmtBdXRoZW50aWNhdGlvbkVsZW1lbnQub25jZShcInJlYWR5XCIsICgpID0+IHtcbiAgICAgICAgaXNMaW5rQXV0aFJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgaW5pdFBhcmFtcz8ub25BdXRoZW50aWNhdGlvbkVsZW1lbnRSZWFkeT8uKCk7XG4gICAgICB9KTtcbiAgICAgIGlmIChzaWxlbnQpIHtcbiAgICAgICAgY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuICAgICAgICBjb250YWluZXIuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS50b3AgPSBcIi0xMDAwcHhcIjtcbiAgICAgICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSBcIi0xMDAwcHhcIjtcbiAgICAgICAgY29udGFpbmVyLnN0eWxlLnpJbmRleCA9IFwiLTFcIjtcbiAgICAgICAgbGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudC5vbihcImNoYW5nZVwiLCAoZSkgPT4ge1xuICAgICAgICAgIGlzQXV0aGVudGljYXRlZCA9IGUuY29tcGxldGUgfHwgISFlLnZhbHVlLmVtYWlsO1xuICAgICAgICAgIGlmIChpc0xpbmtBdXRoUmVhZHkpIHtcbiAgICAgICAgICAgIGluaXRQYXJhbXM/Lm9uQXV0aGVudGljYXRpb25TdGF0dXNDaGFuZ2U/Lihpc0F1dGhlbnRpY2F0ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGlmcmFtZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiaWZyYW1lXCIpO1xuICAgICAgICBpZiAoaWZyYW1lKSB7XG4gICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBpZnJhbWUub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgaXNQb3NzaWJsZUF1dGhlbnRpY2F0ZWQgPSBoZWlnaHQgPiAxNjA7XG4gICAgICAgICAgICBpZiAoaXNMaW5rQXV0aFJlYWR5KSB7XG4gICAgICAgICAgICAgIGluaXRQYXJhbXM/Lm9uQXV0aGVudGljYXRpb25TdGF0dXNDaGFuZ2U/Lihpc0F1dGhlbnRpY2F0ZWQgfHwgaXNQb3NzaWJsZUF1dGhlbnRpY2F0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUoaWZyYW1lLCB7IGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogW1wic3R5bGVcIl0gfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaW5rQXV0aGVudGljYXRpb25FbGVtZW50O1xuICAgIH07XG4gICAgY29uc3QgbW91bnRCdXR0b24gPSAoc2VsZWN0b3IpID0+IHtcbiAgICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQubW91bnQoc2VsZWN0b3IgPyBzZWxlY3RvciA6IGAjJHtPSlNfU1RSSVBFX0xJTktfQlROX0lEfWApO1xuICAgIH07XG4gICAgY29uc3QgZGlzbW91bnRCdXR0b24gPSAoKSA9PiB7XG4gICAgICBleHByZXNzQ2hlY2tvdXRFbGVtZW50LnVubW91bnQoKTtcbiAgICB9O1xuICAgIGlmIChpbml0UGFyYW1zPy5kb05vdE1vdW50T25Jbml0KSB7XG4gICAgICBsb2dfXyQ0KGBOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDQoYE1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbi4uLmApO1xuICAgICAgbW91bnRCdXR0b24oKTtcbiAgICB9XG4gICAgaWYgKGluaXRQYXJhbXM/LnNpbGVudGx5Q2hlY2tBdXRoZW50aWNhdGlvbikge1xuICAgICAgbG9nX18kNChgU2lsZW50bHkgbW91bnRpbmcgbGluayBhdXRoZW50aWNhdGlvbiBlbGVtZW50IGF0ICMke09KU19TVFJJUEVfTElOS19CVE5fSUR9Li4uYCk7XG4gICAgICByZW5kZXJMaW5rQXV0aGVudGljYXRpb25FbGVtZW50KGAjJHtPSlNfU1RSSVBFX0xJTktfQlROX0lEfWAsIHRydWUpO1xuICAgIH1cbiAgICBleHByZXNzQ2hlY2tvdXRFbGVtZW50Lm9uKFwiY2xpY2tcIiwgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICBsb2dfXyQ0KFwiU3RyaXBlIExpbmsgYnV0dG9uIGNsaWNrZWRcIik7XG4gICAgICBpZiAoaW5pdFBhcmFtcz8ub3ZlcnJpZGVMaW5rU3VibWl0KSB7XG4gICAgICAgIGNvbnN0IHNob3VsZFN1Ym1pdCA9IGF3YWl0IGluaXRQYXJhbXMub3ZlcnJpZGVMaW5rU3VibWl0KCk7XG4gICAgICAgIGlmICghc2hvdWxkU3VibWl0KSB7XG4gICAgICAgICAgbG9nX18kNChcIlN0cmlwZSBMaW5rIHN1Ym1pdCBhYm9ydGVkIGJ5IG92ZXJyaWRlTGlua1N1Ym1pdFwiKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV2ZW50LnJlc29sdmUoKTtcbiAgICB9KTtcbiAgICBleHByZXNzQ2hlY2tvdXRFbGVtZW50Lm9uKFwiY29uZmlybVwiLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgIGxvZ19fJDQoXCJTdHJpcGUgTGluayB3aW5kb3cgY29uZmlybWVkXCIsIGV2ZW50KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHMsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogZXZlbnQuYmlsbGluZ0RldGFpbHNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgICAgIGVycl9fJDUoXCJlcnJvclwiLCByZXN1bHQuZXJyb3IpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IocmVzdWx0LmVycm9yLm1lc3NhZ2UgPz8gXCJTdHJpcGUgTGluayB1bmtub3duIGVycm9yXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nX18kNChcInBheW1lbnRNZXRob2RcIiwgcmVzdWx0LnBheW1lbnRNZXRob2QpO1xuICAgICAgICBPanNGbG93cy5zdHJpcGVMaW5rLnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHN0cmlwZUxpbmtDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc3RyaXBlUE06IHJlc3VsdC5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogeyBpc0F2YWlsYWJsZTogdHJ1ZSB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGNvbnRyb2xsZXI6IHtcbiAgICAgICAgbW91bnRCdXR0b24sXG4gICAgICAgIGRpc21vdW50QnV0dG9uLFxuICAgICAgICBtb3VudExpbmtBdXRoZW50aWNhdGlvbkVsZW1lbnQ6IChzZWxlY3RvcikgPT4gcmVuZGVyTGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudChzZWxlY3RvciwgZmFsc2UpLFxuICAgICAgICB3YWl0Rm9yQnV0dG9uVG9Nb3VudDogYXN5bmMgKCkgPT4gYXdhaXQgZ2V0RWxlbWVudEJ5SWRBc3luYyhPSlNfU1RSSVBFX0xJTktfQlROX0lEKVxuICAgICAgfVxuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5TdHJpcGVMaW5rRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJDQoYFJ1bm5pbmcgU3RyaXBlIExpbmsgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kNChgTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLmApO1xuICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0obm9uQ2RlRm9ybUlucHV0cywgY3VzdG9tUGFyYW1zLnN0cmlwZVBNKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGxvZ19fJDQoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLmApO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiBjdXN0b21QYXJhbXMuc3RyaXBlUE0uaWQsXG4gICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBsb2dfXyQ0KFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMucGFyc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gICAgY29uc3Qgb3VyRXhpc3RpbmdQbUlkID0gbmV4dEFjdGlvbk1ldGFkYXRhWzBdLm91cl9leGlzdGluZ19wbV9pZDtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJDQoYERvaW5nIHBheW1lbnQgc2V0dXAuLi5gKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBvdXJFeGlzdGluZ1BtSWRcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDQoYERvaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICBjb25zdCBjaGVja291dFJlcXVlc3QgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgICAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiBmYWxzZSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcmZvcm1DaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICB9XG4gIH1cbik7XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBNID0gKGZvcm1JbnB1dHMsIHN0cmlwZVBtKSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLnBheWVyTGFzdE5hbWVQYXJ0c10gPSBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMubmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICBjb25zdCBwYXllckxhc3ROYW1lID0gcGF5ZXJMYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBzdHJpcGVQbVtcImxpbmtcIl0/LmVtYWlsIHx8IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmFkZHJlc3M/LnBvc3RhbF9jb2RlIHx8IFwiMDAwMDBcIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmFkZHJlc3M/LmNvdW50cnkgfHwgXCJVU1wiO1xuICBjb25zdCBmaXJzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBheWVyRmlyc3ROYW1lIHx8IFwiXCI7XG4gIGNvbnN0IGxhc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJcIjtcbiAgaWYgKGZpcnN0TmFtZSB8fCBsYXN0TmFtZSkge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBmaXJzdE5hbWU7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gbGFzdE5hbWU7XG4gIH0gZWxzZSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBcIlwiO1xuICB9XG4gIGxvZ19fJDQoYEZpbmFsIGZvcm0gaW5wdXRzOmAsIGlucHV0cyk7XG4gIHJldHVybiBpbnB1dHM7XG59O1xuY29uc3QgZ2V0RWxlbWVudEJ5SWRBc3luYyA9IChpZCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgY29uc3QgZ2V0RWxlbWVudCA9ICgpID0+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICByZXNvbHZlKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZ2V0RWxlbWVudCk7XG4gICAgfVxuICB9O1xuICBnZXRFbGVtZW50KCk7XG59KTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kMywgZXJyX186IGVycl9fJDQgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLXByXCIpO1xuY29uc3QgU3RyaXBlUHJDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnVuaW9uKFt6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgaW5pdFN0cmlwZVByRmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGxvZ19fJDMoYENoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIFBSLi4uYCk7XG4gICAgY29uc3QgY2hlY2tvdXRQYXltZW50TWV0aG9kID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZVByQ3BtKTtcbiAgICBsb2dfXyQzKGBJbml0aWFsaXppbmcgU3RyaXBlIFBSIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgbG9nX18kMyhgR2V0dGluZyBpbml0aWFsIHByZXZpZXcgYW1vdW50YCk7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3QgcHIgPSBhd2FpdCBjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdChcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBpbml0aWFsUHJldmlldy5hbW91bnRBdG9tLFxuICAgICAgaW5pdGlhbFByZXZpZXcuY3VycmVuY3ksXG4gICAgICBpc1NldHVwTW9kZVxuICAgICk7XG4gICAgbG9nX18kMyhgQ2hlY2tpbmcgaWYgY2FuIG1ha2UgcGF5bWVudGApO1xuICAgIGNvbnN0IGNhbk1ha2VQYXltZW50ID0gYXdhaXQgcHIuY2FuTWFrZVBheW1lbnQoKTtcbiAgICBpZiAoY2FuTWFrZVBheW1lbnQgPT09IG51bGwpIHtcbiAgICAgIGVycl9fJDQoYGNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxgKTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgcmVhc29uOiBcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiB9O1xuICAgIH1cbiAgICBsb2dfXyQzKGBTdHJpcGUgUFIgZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIENhbiBtYWtlIHBheW1lbnRgLCBjYW5NYWtlUGF5bWVudCk7XG4gICAgY29uc3QgcnVuU3RyaXBlUHJGbG93MiA9IChwcm92aWRlciwgcGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gT2pzRmxvd3Muc3RyaXBlUFIucnVuKHtcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcHJvdmlkZXIpLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBwYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgICAgaW5pdFJlc3VsdDoge1xuICAgICAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgICAgICBwcixcbiAgICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHsgYXBwbGVQYXk6IGNhbk1ha2VQYXltZW50LmFwcGxlUGF5LCBnb29nbGVQYXk6IGNhbk1ha2VQYXltZW50Lmdvb2dsZVBheSB9LFxuICAgICAgICAgIHN0YXJ0RmxvdzogcnVuU3RyaXBlUHJGbG93MlxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIHByLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBjYW5NYWtlUGF5bWVudC5hcHBsZVBheSxcbiAgICAgICAgZ29vZ2xlUGF5OiBjYW5NYWtlUGF5bWVudC5nb29nbGVQYXlcbiAgICAgIH0sXG4gICAgICBzdGFydEZsb3c6IHJ1blN0cmlwZVByRmxvdzJcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuU3RyaXBlUHJGbG93JDEgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGluaXRSZXN1bHRcbiAgfSkgPT4ge1xuICAgIGxvZ19fJDMoYFJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5gKTtcbiAgICBpZiAoY3VzdG9tUGFyYW1zLnByb3ZpZGVyICE9PSBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7Y3VzdG9tUGFyYW1zLnByb3ZpZGVyfSwgZ290ICR7Y2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyfWApO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByID0gaW5pdFJlc3VsdC5wcjtcbiAgICBpZiAoY3VzdG9tUGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBvdmVycmlkZSA9IGN1c3RvbVBhcmFtcy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgbG9nX18kMyhgT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aGAsIG92ZXJyaWRlKTtcbiAgICAgIGNvbnN0IGFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPSB0eXBlb2Ygb3ZlcnJpZGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9PT0gXCJmdW5jdGlvblwiID8gb3ZlcnJpZGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCh7fSkgOiBvdmVycmlkZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0O1xuICAgICAgdXBkYXRlUHJXaXRoQW1vdW50KHByLCBvdmVycmlkZS5hbW91bnQsIG92ZXJyaWRlLnBlbmRpbmcsIGFwcGxlUGF5UGF5bWVudFJlcXVlc3QsIG92ZXJyaWRlLmxhYmVsKTtcbiAgICB9XG4gICAgbG9nX18kMyhgU2hvd2luZyBQUiBkaWFsb2cuLi5gKTtcbiAgICBwci5zaG93KCk7XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgaWYgKCFjdXN0b21QYXJhbXMub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkge1xuICAgICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgICAgdXBkYXRlUHJXaXRoQW1vdW50KHByLCBpbml0aWFsUHJldmlldywgZmFsc2UsIHZvaWQgMCwgXCJUb3RhbFwiKTtcbiAgICB9XG4gICAgY29uc3Qgc3RyaXBlUG1BZGRlZEV2ZW50ID0gYXdhaXQgd2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QocHIpO1xuICAgIGxvZ19fJDMoYFN0cmlwZSBQTSBhZGRlZCBldmVudDpgLCBzdHJpcGVQbUFkZGVkRXZlbnQpO1xuICAgIGxvZ19fJDMoYE1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5gKTtcbiAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtKG5vbkNkZUZvcm1JbnB1dHMsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG1lcmdlZElucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBsb2dfXyQzKGBQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHAgYXltZW50IGZsb3cuLi5gLCBub25DZGVGb3JtRmllbGRzKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93Rm9yUFIoYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgZmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGxvZ19fJDMoYENvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5gKTtcbiAgICBhd2FpdCBjb25maXJtU3RyaXBlUHJQTShuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQzKGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5gKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW5cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDMoYFBlcmZvcm1pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0gPSAoZm9ybUlucHV0cywgc3RyaXBlUG1FdnQpID0+IHtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGNvbnN0IFtwYXllckZpcnN0TmFtZSwgLi4ucGF5ZXJMYXN0TmFtZVBhcnRzXSA9IHN0cmlwZVBtRXZ0LnBheWVyTmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICBjb25zdCBwYXllckxhc3ROYW1lID0gcGF5ZXJMYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBzdHJpcGVQbUV2dC5wYXltZW50TWV0aG9kPy5iaWxsaW5nX2RldGFpbHM/LmFkZHJlc3M7XG4gIGNvbnN0IHNoaXBwaW5nQWRkcmVzcyA9IHN0cmlwZVBtRXZ0LnNoaXBwaW5nQWRkcmVzcztcbiAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBzdHJpcGVQbUV2dC5wYXllckVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBiaWxsaW5nQWRkcmVzcz8ucG9zdGFsX2NvZGUgfHwgc2hpcHBpbmdBZGRyZXNzPy5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgYmlsbGluZ0FkZHJlc3M/LmNvdW50cnkgfHwgc2hpcHBpbmdBZGRyZXNzPy5jb3VudHJ5IHx8IFwiVVNcIjtcbiAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIlwiO1xuICBjb25zdCBsYXN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwYXllckxhc3ROYW1lIHx8IFwiXCI7XG4gIGlmIChmaXJzdE5hbWUgfHwgbGFzdE5hbWUpIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICB9IGVsc2Uge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgfVxuICBsb2dfXyQzKGBGaW5hbCBmb3JtIGlucHV0czpgLCBpbnB1dHMpO1xuICByZXR1cm4gaW5wdXRzO1xufTtcbmNvbnN0IHVwZGF0ZVByV2l0aEFtb3VudCA9IChwciwgYW1vdW50LCBpc1BlbmRpbmcsIHN0cmlwZUFwcGxlUGF5LCBsYWJlbCkgPT4ge1xuICBwci51cGRhdGUoe1xuICAgIHRvdGFsOiBhbW91bnQgPyB7XG4gICAgICBhbW91bnQ6IGFtb3VudC5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IGxhYmVsID8/IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IGlzUGVuZGluZ1xuICAgIH0gOiB2b2lkIDAsXG4gICAgY3VycmVuY3k6IGFtb3VudD8uY3VycmVuY3ksXG4gICAgLy8gU3RyaXBlJ3MgYXBwbGVQYXkgb3B0aW9uIG9ubHkgc3VwcG9ydHMgJ3JlY3VycmluZ1BheW1lbnRSZXF1ZXN0JyB8ICdkZWZlcnJlZFBheW1lbnRSZXF1ZXN0JyB8ICdhdXRvbWF0aWNSZWxvYWRQYXltZW50UmVxdWVzdCcgb2YgbmF0aXZlIEFwcGxlUGF5IHBheW1lbnQgcmVxdWVzdFxuICAgIC8vIFdlJ3JlIGFjY2VwdGluZyBuYXRpdmUgUGF5bWVudCBSZXF1ZXN0IGhlcmUgZm9yIG1vcmUgY29tbW9uIHR5cGluZy5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gc3RyaXBlIGRvIG5vdCBleHBlY3QgYWRkaXRpb25hbCBmaWVsZHNcbiAgICBhcHBsZVBheTogc3RyaXBlQXBwbGVQYXlcbiAgfSk7XG59O1xuY29uc3QgcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICBpZiAocmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHtyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgfVxuICByZXR1cm4gUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UocmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn07XG5cbmNvbnN0IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QgPSAoY3Btcywgd2l0aFByb3ZpZGVyLCB3aXRoUHJvY2Vzc29yKSA9PiB7XG4gIGNvbnN0IG1hdGNoZXMgPSBjcG1zLmZpbHRlcigoY3BtKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlc1Byb2Nlc3NvciA9IHdpdGhQcm9jZXNzb3IgPT09IHZvaWQgMCA/IHRydWUgOiBjcG0ucHJvY2Vzc29yX25hbWUgPT09IHdpdGhQcm9jZXNzb3I7XG4gICAgY29uc3QgbWF0Y2hlc1Byb3ZpZGVyID0gY3BtLnByb3ZpZGVyID09PSB3aXRoUHJvdmlkZXI7XG4gICAgcmV0dXJuIG1hdGNoZXNQcm9jZXNzb3IgJiYgbWF0Y2hlc1Byb3ZpZGVyO1xuICB9KTtcbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGNwbXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gIH1cbiAgaWYgKG1hdGNoZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGNwbXMpO1xuICAgIGNvbnNvbGUud2FybihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHt3aXRoUHJvdmlkZXJ9JyBhbmQgcHJvY2Vzc29yICcke3dpdGhQcm9jZXNzb3J9J2ApO1xuICAgIHRyYWNrKFwibW9yZV90aGFuX29uZV9jcG1fZm91bmRcIiwge1xuICAgICAgcHJvdmlkZXI6IHdpdGhQcm92aWRlcixcbiAgICAgIHByb2Nlc3Nvcjogd2l0aFByb2Nlc3NvcixcbiAgICAgIGNwbXNcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlc1swXTtcbn07XG5jb25zdCBPanNGbG93cyA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5Db21tb25DY0Zsb3dcbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZVByRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZVByRmxvdyQxXG4gIH0sXG4gIHN0cmlwZUxpbms6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlTGlua0Zsb3csXG4gICAgcnVuOiBydW5TdHJpcGVMaW5rRmxvd1xuICB9LFxuICBzdHJpcGVLbGFybmE6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlS2xhcm5hRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZUtsYXJuYUZsb3dcbiAgfSxcbiAgc3RyaXBlQWZmaXJtOiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZUFmZmlybUZsb3csXG4gICAgcnVuOiBydW5TdHJpcGVBZmZpcm1GbG93XG4gIH0sXG4gIHN0cmlwZUFmdGVycGF5OiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZUFmdGVycGF5RmxvdyxcbiAgICBydW46IHJ1blN0cmlwZUFmdGVycGF5Rmxvd1xuICB9LFxuICAvLyBQb2NreXRcbiAgcG9ja3l0UGF5cGFsOiB7XG4gICAgaW5pdDogaW5pdFBvY2t5dFBheXBhbEZsb3csXG4gICAgcnVuOiBydW5Qb2NreXRQYXlwYWxGbG93XG4gIH0sXG4gIC8vIFBheVBhbFxuICBwYXlwYWw6IHtcbiAgICBpbml0OiBpbml0UGF5cGFsRmxvdyxcbiAgICBydW46IHJ1blBheXBhbEZsb3dcbiAgfSxcbiAgLy8gS2xhcm5hXG4gIGFpcndhbGxleEtsYXJuYToge1xuICAgIGluaXQ6IGluaXRBaXJ3YWxsZXhLbGFybmFGbG93LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4S2xhcm5hRmxvd1xuICB9LFxuICAvLyBBaXJ3YWxsZXhcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3csXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhHb29nbGVQYXlGbG93XG4gIH0sXG4gIGFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFpcndhbGxleEFwcGxlUGF5RmxvdyxcbiAgICBydW46IHJ1bkFpcndhbGxleEFwcGxlUGF5Rmxvd1xuICB9LFxuICBhaXJ3YWxsZXhBQ0g6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkFpcndhbGxleEFDSEZsb3dcbiAgfSxcbiAgYWlyd2FsbGV4RUZUOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhFRlRGbG93XG4gIH0sXG4gIGFpcndhbGxleEJBQ1M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkFpcndhbGxleEJBQ1NGbG93XG4gIH0sXG4gIGFpcndhbGxleFNFUEE6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkFpcndhbGxleFNFUEFGbG93XG4gIH0sXG4gIC8vIExvb3BcbiAgbG9vcENyeXB0bzoge1xuICAgIGluaXQ6IGluaXRMb29wRmxvdyxcbiAgICBydW46IHJ1bkxvb3BGbG93XG4gIH0sXG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB7XG4gICAgaW5pdDogaW5pdEF1dGhuZXRBcHBsZVBheUZsb3csXG4gICAgcnVuOiBydW5BdXRobmV0QXBwbGVQYXlGbG93XG4gIH0sXG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheToge1xuICAgIGluaXQ6IGluaXRBdXRobmV0R29vZ2xlUGF5RmxvdyxcbiAgICBydW46IHJ1bkF1dGhuZXRHb29nbGVQYXlGbG93XG4gIH0sXG4gIGFkeWVuR29vZ2xlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFkeWVuR29vZ2xlUGF5RmxvdyxcbiAgICBydW46IHJ1bkFkeWVuR29vZ2xlUGF5Rmxvd1xuICB9LFxuICBhZHllbkFwcGxlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFkeWVuQXBwbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQWR5ZW5BcHBsZVBheUZsb3dcbiAgfVxuICAvLyDwn5GJIEFkZCBtb3JlIGZsb3dzIGhlcmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDIsIGVycl9fOiBlcnJfXyQzIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImluaXQtZmxvd3NcIik7XG5jb25zdCBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlciA9IChmbG93TmFtZSwgaW5pdEZsb3cpID0+IHtcbiAgY29uc3QgcHVibGlzaGVyID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgcmV0dXJuIHtcbiAgICBwdWJsaXNoZXIsXG4gICAgaW5pdGlhbGl6ZTogYXN5bmMgKGluaXRQYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChwdWJsaXNoZXIuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoaXMgZmxvdyBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSBhd2FpdCBpbml0Rmxvdyhpbml0UGFyYW1zKTtcbiAgICAgICAgbG9nX18kMihg4pyUICR7Zmxvd05hbWV9IGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBSZXN1bHQ6YCwgaW5pdFJlc3VsdCk7XG4gICAgICAgIHB1Ymxpc2hlci5zZXQoaW5pdFJlc3VsdCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBlcnJfXyQzKGDwnZmtICR7Zmxvd05hbWV9IGZsb3cgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBFcnJvcjpgLCBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpLCBcIkRldGFpbHM6XCIsIGVycm9yKTtcbiAgICAgICAgcHVibGlzaGVyLnRocm93KGVycm9yLCBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBbGxJbml0Rmxvd3MgPSBhc3luYyAoZmxvd3MsIGNvbnRleHQsIGZvcm1DYWxsYmFja3MpID0+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyhmbG93cykubWFwKChmbG93KSA9PiBmbG93LmluaXRpYWxpemUoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pKSk7XG59O1xuY29uc3QgY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycyA9ICgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gICAgLy8gU3RyaXBlIFBSXG4gICAgc3RyaXBlUFI6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiU3RyaXBlIFBSXCIsIE9qc0Zsb3dzLnN0cmlwZVBSLmluaXQpLFxuICAgIC8vIFN0cmlwZSBMaW5rXG4gICAgc3RyaXBlTGluazogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgTGlua1wiLCBPanNGbG93cy5zdHJpcGVMaW5rLmluaXQpLFxuICAgIC8vIFN0cmlwZSBLbGFybmFcbiAgICBzdHJpcGVLbGFybmE6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiU3RyaXBlIEtsYXJuYVwiLCBPanNGbG93cy5zdHJpcGVLbGFybmEuaW5pdCksXG4gICAgLy8gU3RyaXBlIEFmZmlybVxuICAgIHN0cmlwZUFmZmlybTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgQWZmaXJtXCIsIE9qc0Zsb3dzLnN0cmlwZUFmZmlybS5pbml0KSxcbiAgICAvLyBTdHJpcGUgQWZ0ZXJwYXlcbiAgICBzdHJpcGVBZnRlcnBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgQWZ0ZXJwYXlcIiwgT2pzRmxvd3Muc3RyaXBlQWZ0ZXJwYXkuaW5pdCksXG4gICAgLy8gQWlyd2FsbGV4IEdvb2dsZVBheVxuICAgIGFpcndhbGxleEdvb2dsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBaXJ3YWxsZXggR29vZ2xlUGF5XCIsIE9qc0Zsb3dzLmFpcndhbGxleEdvb2dsZVBheS5pbml0KSxcbiAgICAvLyBBaXJ3YWxsZXggQXBwbGVQYXlcbiAgICBhaXJ3YWxsZXhBcHBsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgT2pzRmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkuaW5pdCksXG4gICAgLy8gTG9vcFxuICAgIGxvb3A6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiTG9vcFwiLCBPanNGbG93cy5sb29wQ3J5cHRvLmluaXQpLFxuICAgIC8vIFBheVBhbFxuICAgIHBheXBhbDogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJQYXlQYWxcIiwgT2pzRmxvd3MucGF5cGFsLmluaXQpLFxuICAgIC8vIEtsYXJuYVxuICAgIGFpcndhbGxleEtsYXJuYTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJLbGFybmFcIiwgT2pzRmxvd3MuYWlyd2FsbGV4S2xhcm5hLmluaXQpLFxuICAgIC8vIFBvY2t5dCBQYXlQYWxcbiAgICBwb2NreXRQYXlwYWw6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiUG9ja3l0IFBheVBhbFwiLCBPanNGbG93cy5wb2NreXRQYXlwYWwuaW5pdCksXG4gICAgLy8gQXV0aG5ldCBHb29nbGVQYXlcbiAgICBhdXRob3JpemVOZXRHb29nbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQXV0aG5ldCBHb29nbGVQYXlcIiwgT2pzRmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LmluaXQpLFxuICAgIC8vIEF1dGhuZXQgQXBwbGVQYXlcbiAgICBhdXRob3JpemVOZXRBcHBsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBdXRobmV0IEFwcGxlUGF5XCIsIE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LmluaXQpLFxuICAgIC8vIEFkeWVuIEdvb2dsZVBheVxuICAgIGFkeWVuR29vZ2xlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFkeWVuIEdvb2dsZVBheVwiLCBPanNGbG93cy5hZHllbkdvb2dsZVBheS5pbml0KSxcbiAgICAvLyBBZHllbiBBcHBsZVBheVxuICAgIGFkeWVuQXBwbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQWR5ZW4gQXBwbGVQYXlcIiwgT2pzRmxvd3MuYWR5ZW5BcHBsZVBheS5pbml0KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIH07XG59O1xuXG5jb25zdCB7IGVycl9fOiBlcnJfXyQyIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHouZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHoub2JqZWN0KHtcbiAgb25Gb2N1czogT3B0aW9uYWxGbixcbiAgb25CbHVyOiBPcHRpb25hbEZuLFxuICBvbkNoYW5nZTogT3B0aW9uYWxGbixcbiAgb25Mb2FkOiBPcHRpb25hbEZuLFxuICBvbkxvYWRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25WYWxpZGF0aW9uRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0RXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBPcHRpb25hbEZuXG59KTtcbmNsYXNzIEZvcm1DYWxsYmFja3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIEFMTCBmb3JtIGNhbGxiYWNrcy4gTm90ZSB0aGF0IGFsbCBvbGQgY2FsbGJhY2tzIGFyZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHJhd0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICAgICAgT2JqZWN0LmVudHJpZXMocmF3Q2FsbGJhY2tzKS5mb3JFYWNoKChba2V5LCByYXdDYWxsYmFja10pID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZUNhbGxiYWNrID0gbWFrZUNhbGxiYWNrU2FmZShrZXksIHJhd0NhbGxiYWNrID8/IEZvcm1DYWxsYmFja3MuTk9PUCwgZXJyX18kMik7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV0ZWN0RnJhbWV3b3JrKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvd1NhZmUoKTtcbiAgICBjb25zdCBuZXh0V2luZG93ID0gd2luZG93O1xuICAgIGlmIChuZXh0V2luZG93Py5uZXh0IHx8IG5leHRXaW5kb3c/Ll9fTkVYVF9EQVRBX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX25leHRcIikpIHtcbiAgICAgIHJldHVybiBcIm5leHRqc1wiIC8qIE5leHRKUyAqLztcbiAgICB9XG4gICAgY29uc3QgbnV4dFdpbmRvdyA9IHdpbmRvdztcbiAgICBpZiAobnV4dFdpbmRvdz8uX19OVVhUX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX251eHRcIikpIHtcbiAgICAgIHJldHVybiBcIm51eHRcIiAvKiBOdXh0ICovO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXMoZG9jdW1lbnQpLmZpbmQoKGtleSkgPT4ga2V5LmluY2x1ZGVzKFwicmVhY3RcIikpIHx8ICEhQXJyYXkuZnJvbShkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoXCJib2R5ID4gKlwiKSkuZmluZChcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBfcmVhY3RSb290Q29udGFpbmVyIGRvZXNuJ3QgZXhpc3RcbiAgICAgIChub2RlKSA9PiBub2RlLl9yZWFjdFJvb3RDb250YWluZXJcbiAgICApKSB7XG4gICAgICByZXR1cm4gXCJyZWFjdFwiIC8qIFJlYWN0ICovO1xuICAgIH1cbiAgICBjb25zdCB2dWVXaW5kb3cgPSB3aW5kb3c7XG4gICAgaWYgKHZ1ZVdpbmRvdz8uVnVlIHx8IHZ1ZVdpbmRvdz8uX19WVUVfXykge1xuICAgICAgcmV0dXJuIFwidnVlXCIgLyogVnVlICovO1xuICAgIH1cbiAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIltuZy12ZXJzaW9uXVwiKSkge1xuICAgICAgcmV0dXJuIFwiYW5ndWxhclwiIC8qIEFuZ3VsYXIgKi87XG4gICAgfVxuICAgIHJldHVybiBcInZhbmlsbGFcIiAvKiBWYW5pbGxhICovO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBcInVua25vd25cIiAvKiBVbmtub3duICovO1xuICB9XG59XG5mdW5jdGlvbiBnZXRGcmFtZXdvcmtWZXJzaW9uKGZyYW1ld29yaykge1xuICB0cnkge1xuICAgIHN3aXRjaCAoZnJhbWV3b3JrKSB7XG4gICAgICBjYXNlIFwicmVhY3RcIiAvKiBSZWFjdCAqLzoge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJuZXh0anNcIiAvKiBOZXh0SlMgKi86IHtcbiAgICAgICAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgICAgICBjb25zdCBuZXh0V2luZG93ID0gd2luZG93O1xuICAgICAgICByZXR1cm4gbmV4dFdpbmRvdz8ubmV4dD8udmVyc2lvbiB8fCBuZXh0V2luZG93Py5fX05FWFRfREFUQV9fPy5idWlsZElkIHx8IG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlIFwibnV4dFwiIC8qIE51eHQgKi86IHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlIFwidnVlXCIgLyogVnVlICovOiB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcImFuZ3VsYXJcIiAvKiBBbmd1bGFyICovOiB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50MiA9IGdldFdpbmRvd1NhZmUoKT8uZG9jdW1lbnQ7XG4gICAgICAgIGNvbnN0IG5nVmVyc2lvbkVsID0gZG9jdW1lbnQyPy5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpO1xuICAgICAgICByZXR1cm4gbmdWZXJzaW9uRWwgPyBuZ1ZlcnNpb25FbC5nZXRBdHRyaWJ1dGUoXCJuZy12ZXJzaW9uXCIpIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0RnJhbWV3b3JrSW5mbygpIHtcbiAgY29uc3QgZnJhbWV3b3JrID0gZGV0ZWN0RnJhbWV3b3JrKCk7XG4gIGNvbnN0IHZlcnNpb24gPSBnZXRGcmFtZXdvcmtWZXJzaW9uKGZyYW1ld29yayk7XG4gIHJldHVybiB7IGZyYW1ld29yaywgdmVyc2lvbiB9O1xufVxuXG5jb25zdCBnZXRGcmF1ZE1ldGFkYXRhID0gKCkgPT4ge1xuICBjb25zdCBzY3JlZW5faGVpZ2h0ID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLmhlaWdodCA6IG51bGw7XG4gIGNvbnN0IHNjcmVlbl93aWR0aCA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi53aWR0aCA6IG51bGw7XG4gIGNvbnN0IGNvbG9yX2RlcHRoID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLmNvbG9yRGVwdGggOiBudWxsO1xuICBjb25zdCBqYXZhX2VuYWJsZWQgPSB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciA/IHdpbmRvdy5uYXZpZ2F0b3IuamF2YUVuYWJsZWQoKSA6IGZhbHNlO1xuICBjb25zdCB1c2VyX2FnZW50ID0gd2luZG93ICYmIHdpbmRvdy5uYXZpZ2F0b3IgPyB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCA6IG51bGw7XG4gIGNvbnN0IGFjY2VwdF9oZWFkZXIgPSBcInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjhcIjtcbiAgbGV0IGxhbmd1YWdlID0gbnVsbDtcbiAgaWYgKHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yKSB7XG4gICAgbGFuZ3VhZ2UgPSB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlID8gd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZSA6IHdpbmRvdy5uYXZpZ2F0b3IuYnJvd3Nlckxhbmd1YWdlO1xuICB9XG4gIGNvbnN0IHRpbWVfem9uZV9vZmZzZXQgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHJldHVybiB7XG4gICAgY29sb3JfZGVwdGgsXG4gICAgamF2YV9lbmFibGVkLFxuICAgIGphdmFzY3JpcHRfZW5hYmxlZDogdHJ1ZSxcbiAgICBsYW5ndWFnZSxcbiAgICBzY3JlZW5faGVpZ2h0LFxuICAgIHNjcmVlbl93aWR0aCxcbiAgICB0aW1lX3pvbmVfb2Zmc2V0LFxuICAgIHVzZXJfYWdlbnQsXG4gICAgYWNjZXB0X2hlYWRlclxuICB9O1xufTtcblxudmFyIFN1Ym1pdE1ldGhvZHMgPSAvKiBAX19QVVJFX18gKi8gKChTdWJtaXRNZXRob2RzMikgPT4ge1xuICBTdWJtaXRNZXRob2RzMltcImNhcmRcIl0gPSBcImNhcmRcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJwb2NreXRQYXlwYWxcIl0gPSBcInBvY2t5dC1wYXlwYWxcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhcHBsZVBheVwiXSA9IFwiYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiZ29vZ2xlUGF5XCJdID0gXCJnb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wibG9vcENyeXB0b1wiXSA9IFwibG9vcC1jcnlwdG9cIjtcbiAgU3VibWl0TWV0aG9kczJbXCJwYXlwYWxcIl0gPSBcInBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImtsYXJuYVwiXSA9IFwia2xhcm5hXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWZmaXJtXCJdID0gXCJhZmZpcm1cIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhZnRlcnBheVwiXSA9IFwiYWZ0ZXJwYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJzdHJpcGVMaW5rXCJdID0gXCJzdHJpcGUtbGlua1wiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEdvb2dsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBcHBsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEdvb2dsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRBcHBsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFkeWVuR29vZ2xlUGF5XCJdID0gXCJhZHllbi1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5BcHBsZVBheVwiXSA9IFwiYWR5ZW4tYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QUNIXCJdID0gXCJhaXJ3YWxsZXgtYWNoXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4RUZUXCJdID0gXCJhaXJ3YWxsZXgtZWZ0XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QkFDU1wiXSA9IFwiYWlyd2FsbGV4LWJhY3NcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhTRVBBXCJdID0gXCJhaXJ3YWxsZXgtc2VwYVwiO1xuICByZXR1cm4gU3VibWl0TWV0aG9kczI7XG59KShTdWJtaXRNZXRob2RzIHx8IHt9KTtcbnoubmF0aXZlRW51bShTdWJtaXRNZXRob2RzKTtcbnZhciBQYXltZW50UHJvdmlkZXJUeXBlID0gLyogQF9fUFVSRV9fICovICgoUGF5bWVudFByb3ZpZGVyVHlwZTIpID0+IHtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJBQ0hcIl0gPSBcImFjaFwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkVGVFwiXSA9IFwiZWZ0XCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiQkFDU1wiXSA9IFwiYmFjc1wiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIlNFUEFcIl0gPSBcInNlcGFcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJBUFBMRV9QQVlcIl0gPSBcImFwcGxlX3BheVwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkNSRURJVF9DQVJEXCJdID0gXCJjcmVkaXRfY2FyZFwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkdPT0dMRV9QQVlcIl0gPSBcImdvb2dsZV9wYXlcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJTVFJJUEVfTElOS1wiXSA9IFwic3RyaXBlX2xpbmtcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJDUllQVE9cIl0gPSBcImNyeXB0b1wiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIlBBWVBBTFwiXSA9IFwicGF5cGFsXCI7XG4gIHJldHVybiBQYXltZW50UHJvdmlkZXJUeXBlMjtcbn0pKFBheW1lbnRQcm92aWRlclR5cGUgfHwge30pO1xuXG5jb25zdCBnZXRBcHBsZVBheVByb2Nlc3NvcnMgPSAoaW5pdEZsb3dzKSA9PiB7XG4gIGNvbnN0IGFwcGxlUGF5SW5pdEZsb3dzID0gW2luaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheSwgaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LCBpbml0Rmxvd3MuYWR5ZW5BcHBsZVBheV07XG4gIGNvbnN0IGFwcGxlUGF5SW5pdFJlc3VsdHMgPSBbXTtcbiAgYXBwbGVQYXlJbml0Rmxvd3MuZm9yRWFjaCgoZmxvdykgPT4ge1xuICAgIGNvbnN0IGZsb3dWYWx1ZSA9IGZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIGlmIChmbG93VmFsdWU/LmlzQXZhaWxhYmxlKSB7XG4gICAgICBhcHBsZVBheUluaXRSZXN1bHRzLnB1c2goZmxvd1ZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzdHJpcGVQUkZsb3dSZXN1bHQgPSBpbml0Rmxvd3Muc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoc3RyaXBlUFJGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGNvbnN0IGlzQXBwbGVQYXlBdmFpbGFibGUgPSBzdHJpcGVQUkZsb3dSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5O1xuICAgIGlmIChpc0FwcGxlUGF5QXZhaWxhYmxlKSB7XG4gICAgICBhcHBsZVBheUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZVBSRmxvd1Jlc3VsdC5zdGFydEZsb3coXCJhcHBsZV9wYXlcIiwge1xuICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogYXBwbGVQYXlJbml0UmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IGFwcGxlUGF5SW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0QXBwbGVQYXlGbG93KGFwcGxlUGF5SW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGdldEdvb2dsZVBheVByb2Nlc3NvcnMgPSAoaW5pdEZsb3dzKSA9PiB7XG4gIGNvbnN0IGdvb2dsZVBheUluaXRGbG93cyA9IFtpbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LCBpbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LCBpbml0Rmxvd3MuYWR5ZW5Hb29nbGVQYXldO1xuICBjb25zdCBnb29nbGVQYXlJbml0UmVzdWx0cyA9IFtdO1xuICBnb29nbGVQYXlJbml0Rmxvd3MuZm9yRWFjaCgoZmxvdykgPT4ge1xuICAgIGNvbnN0IGZsb3dWYWx1ZSA9IGZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIGlmIChmbG93VmFsdWU/LmlzQXZhaWxhYmxlKSB7XG4gICAgICBnb29nbGVQYXlJbml0UmVzdWx0cy5wdXNoKGZsb3dWYWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3RyaXBlUFJGbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZVBSRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBjb25zdCBpc0dvb2dsZVBheUF2YWlsYWJsZSA9IHN0cmlwZVBSRmxvd1Jlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5O1xuICAgIGlmIChpc0dvb2dsZVBheUF2YWlsYWJsZSkge1xuICAgICAgZ29vZ2xlUGF5SW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlUFJGbG93UmVzdWx0LnN0YXJ0RmxvdyhcImdvb2dsZV9wYXlcIiwge1xuICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogZ29vZ2xlUGF5SW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBnb29nbGVQYXlJbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRHb29nbGVQYXlGbG93KGdvb2dsZVBheUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEFwcGxlUGF5RmxvdyA9IChpbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKSA9PiB7XG4gIGlmIChjdXN0b21QYXJhbXM/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IGZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IgPT09IGN1c3RvbVBhcmFtcy5wcm9jZXNzb3IpO1xuICAgIGlmIChmbG93Py5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIGZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEFwcGxlIFBheSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgQXBwbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5jb25zdCBzdGFydEdvb2dsZVBheUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBHb29nbGUgUGF5IHByb2Nlc3NvciAke2N1c3RvbVBhcmFtcy5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCBhdmFpbGFibGVGbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQuaXNBdmFpbGFibGUpO1xuICBpZiAoYXZhaWxhYmxlRmxvdykge1xuICAgIHJldHVybiBhdmFpbGFibGVGbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBHb29nbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5jb25zdCBnZXRLbGFybmFQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBrbGFybmFJbml0UmVzdWx0cyA9IFtdO1xuICBjb25zdCBhaXJ3YWxsZXhLbGFybmFGbG93UmVzdWx0ID0gaW5pdEZsb3dzLmFpcndhbGxleEtsYXJuYS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChhaXJ3YWxsZXhLbGFybmFGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGtsYXJuYUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBhaXJ3YWxsZXhLbGFybmFGbG93UmVzdWx0LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpXG4gICAgfSk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlS2xhcm5hRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVLbGFybmEucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoc3RyaXBlS2xhcm5hRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBrbGFybmFJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlS2xhcm5hRmxvd1Jlc3VsdC5zdGFydEZsb3coY3VzdG9tUGFyYW1zKVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczoga2xhcm5hSW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBrbGFybmFJbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRLbGFybmFGbG93KGtsYXJuYUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEtsYXJuYUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBLbGFybmEgcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEtsYXJuYSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY29uc3QgZ2V0QWZmaXJtUHJvY2Vzc29ycyA9IChpbml0Rmxvd3MpID0+IHtcbiAgY29uc3QgYWZmaXJtSW5pdFJlc3VsdHMgPSBbXTtcbiAgY29uc3Qgc3RyaXBlQWZmaXJtRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVBZmZpcm0ucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoc3RyaXBlQWZmaXJtRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBhZmZpcm1Jbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlQWZmaXJtRmxvd1Jlc3VsdC5zdGFydEZsb3coY3VzdG9tUGFyYW1zKVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogYWZmaXJtSW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBhZmZpcm1Jbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRBZmZpcm1GbG93KGFmZmlybUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEFmZmlybUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBZmZpcm0gcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFmZmlybSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY29uc3QgZ2V0QWZ0ZXJwYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBhZnRlcnBheUluaXRSZXN1bHRzID0gW107XG4gIGNvbnN0IHN0cmlwZUFmdGVycGF5Rmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVBZnRlcnBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVBZnRlcnBheUZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAgYWZ0ZXJwYXlJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlQWZ0ZXJwYXlGbG93UmVzdWx0LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzb3JzOiBhZnRlcnBheUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogYWZ0ZXJwYXlJbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRBZnRlcnBheUZsb3coYWZ0ZXJwYXlJbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBZnRlcnBheUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBZnRlcnBheSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgQWZ0ZXJwYXkgcHJvY2Vzc29yIGZvdW5kXCIpO1xufTtcblxuY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplZFN0eWxlcztcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDEsIGVycl9fOiBlcnJfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInRyYWNlclwiKTtcbmNvbnN0IGluaXRUcmFjZXJTYWZlID0gKHZlcnNpb24sIGJhc2VVcmwpID0+IHtcbiAgdHJ5IHtcbiAgICBpbml0VHJhY2VyVW5zYWZlKHZlcnNpb24sIGJhc2VVcmwpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGVycl9fJDEoYEVycm9yIGluaXRpYWxpemluZyB0cmFjZXI6ICR7ZXJyb3J9YCk7XG4gIH1cbn07XG5sZXQgZ2xvYmFsVHJhY2VyO1xuY29uc3QgaW5pdFRyYWNlclVuc2FmZSA9IGFzeW5jICh2ZXJzaW9uLCBiYXNlVXJsKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICBjb25zdCBzZGtUcmFjZVdlYiA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMGJ9fi5qcycpO1xuICBjb25zdCB7IENvbnNvbGVTcGFuRXhwb3J0ZXIsIFNpbXBsZVNwYW5Qcm9jZXNzb3IsIFdlYlRyYWNlclByb3ZpZGVyIH0gPSBzZGtUcmFjZVdlYjtcbiAgY29uc3QgaW5zdHJ1bWVudGF0aW9uRmV0Y2ggPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDBqfX4uanMnKTtcbiAgY29uc3QgeyBGZXRjaEluc3RydW1lbnRhdGlvbiB9ID0gaW5zdHJ1bWVudGF0aW9uRmV0Y2g7XG4gIGNvbnN0IGNvbnRleHRab25lID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwa31+LmpzJyk7XG4gIGNvbnN0IHsgWm9uZUNvbnRleHRNYW5hZ2VyIH0gPSBjb250ZXh0Wm9uZTtcbiAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwZX1+LmpzJyk7XG4gIGNvbnN0IHsgcmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zIH0gPSBpbnN0cnVtZW50YXRpb247XG4gIGNvbnN0IHJlc291cmNlcyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMDF9fi5qcycpO1xuICBjb25zdCB7IFJlc291cmNlIH0gPSByZXNvdXJjZXM7XG4gIGNvbnN0IGRldGVjdFJlc291cmNlcyA9IGF3YWl0IGltcG9ydCgnLi9kZXRlY3QtcmVzb3VyY2VzLSF+ezAwbn1+LmpzJykudGhlbihuID0+IG4uZCk7XG4gIGNvbnN0IHsgZGV0ZWN0UmVzb3VyY2VzU3luYyB9ID0gZGV0ZWN0UmVzb3VyY2VzO1xuICBjb25zdCBleHBvcnRlclRyYWNlT3RscCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMG99fi5qcycpO1xuICBjb25zdCB7IE9UTFBUcmFjZUV4cG9ydGVyIH0gPSBleHBvcnRlclRyYWNlT3RscDtcbiAgY29uc3QgcHJvcGFnYXRvckIzID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwbH1+LmpzJyk7XG4gIGNvbnN0IHsgQjNQcm9wYWdhdG9yLCBCM0luamVjdEVuY29kaW5nIH0gPSBwcm9wYWdhdG9yQjM7XG4gIGNvbnN0IHNka1RyYWNlQmFzZSA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMDN9fi5qcycpO1xuICBjb25zdCB7IEJhdGNoU3BhblByb2Nlc3NvciB9ID0gc2RrVHJhY2VCYXNlO1xuICBsb2dfXyQxKGBJbml0aWFsaXppbmcgdHJhY2VyIHdpdGggdmVyc2lvbiAke3ZlcnNpb259IGFuZCBiYXNlVXJsICR7YmFzZVVybH1gKTtcbiAgY29uc3QgY29sbGVjdG9yVXJsID0gZ2V0Q29sbGVjdG9yVXJsKGJhc2VVcmwpO1xuICBsb2dfXyQxKGBVc2luZyBjb2xsZWN0b3IgVVJMICR7Y29sbGVjdG9yVXJsfWApO1xuICBjb25zdCBleHBvcnRlciA9IG5ldyBPVExQVHJhY2VFeHBvcnRlcih7IHVybDogY29sbGVjdG9yVXJsIH0pO1xuICBjb25zdCBiYXNlQXR0cnMgPSB7XG4gICAgXCJzZXJ2aWNlLnZlcnNpb25cIjogdmVyc2lvbixcbiAgICBcInNlcnZpY2UubmFtZVwiOiBcIm9qc1wiXG4gIH07XG4gIGNvbnN0IHByb3ZpZGVyID0gbmV3IFdlYlRyYWNlclByb3ZpZGVyKHtcbiAgICByZXNvdXJjZTogbmV3IFJlc291cmNlKGJhc2VBdHRycykubWVyZ2UoZGV0ZWN0UmVzb3VyY2VzU3luYygpKSxcbiAgICBzcGFuUHJvY2Vzc29yczogW1xuICAgICAgbmV3IFNpbXBsZVNwYW5Qcm9jZXNzb3IobmV3IENvbnNvbGVTcGFuRXhwb3J0ZXIoKSksXG4gICAgICBuZXcgQmF0Y2hTcGFuUHJvY2Vzc29yKGV4cG9ydGVyLCB7XG4gICAgICAgIHNjaGVkdWxlZERlbGF5TWlsbGlzOiA1MDBcbiAgICAgIH0pXG4gICAgXVxuICB9KTtcbiAgcHJvdmlkZXIucmVnaXN0ZXIoe1xuICAgIGNvbnRleHRNYW5hZ2VyOiBuZXcgWm9uZUNvbnRleHRNYW5hZ2VyKCksXG4gICAgcHJvcGFnYXRvcjogbmV3IEIzUHJvcGFnYXRvcih7IGluamVjdEVuY29kaW5nOiBCM0luamVjdEVuY29kaW5nLk1VTFRJX0hFQURFUiB9KVxuICB9KTtcbiAgcmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zKHtcbiAgICBpbnN0cnVtZW50YXRpb25zOiBbXG4gICAgICBuZXcgRmV0Y2hJbnN0cnVtZW50YXRpb24oe1xuICAgICAgICBwcm9wYWdhdGVUcmFjZUhlYWRlckNvcnNVcmxzOiBbLy4qL10sXG4gICAgICAgIC8vIFByb3BhZ2F0ZSB0byBhbGwgVVJMc1xuICAgICAgICAvLyBFeGNsdWRlIEFkeWVuIFVSTHMgLSB0aGV5IGRvIG5vdCBhbGxvdyBPUFRJT05TIHJlcXVlc3RzXG4gICAgICAgIC8vIEFsc28gZXhjbHVkZSBsb29wY3J5cHRvLnh5elxuICAgICAgICBpZ25vcmVVcmxzOiBbL15odHRwczpcXC9cXC8oLipcXC4pP2FkeWVuXFwuY29tLywgL15odHRwczpcXC9cXC8oLipcXC4pP2xvb3BjcnlwdG9cXC54eXovXVxuICAgICAgfSlcbiAgICBdXG4gIH0pO1xuICBnbG9iYWxUcmFjZXIgPSB0cmFjZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpO1xuICBsb2dfXyQxKGBUcmFjZXIgaW5pdGlhbGl6ZWRgKTtcbiAgcmV0dXJuIGdsb2JhbFRyYWNlcjtcbn07XG5jb25zdCBnZXRDb2xsZWN0b3JVcmwgPSAoZnJvbUJhc2VVcmwpID0+IHtcbiAgY29uc3QgYmFzZUhvc3RuYW1lID0gbmV3IFVSTChmcm9tQmFzZVVybCkuaG9zdG5hbWU7XG4gIGlmIChiYXNlSG9zdG5hbWUgPT09IFwiY2RlLm9wZW5wYXlzdGFnaW5nLmNvbVwiKSB7XG4gICAgcmV0dXJuIFwiaHR0cHM6Ly9vdGVsLm9wZW5wYXlzYW5kYm94LmNvbS92MS90cmFjZXNcIjtcbiAgfSBlbHNlIGlmIChiYXNlSG9zdG5hbWUgPT09IFwiY2RlLmdldG9wZW5wYXkuY29tXCIpIHtcbiAgICByZXR1cm4gXCJodHRwczovL290ZWwuZ2V0b3BlbnBheS5jb20vdjEvdHJhY2VzXCI7XG4gIH1cbiAgcmV0dXJuIFwiaHR0cDovL2xvY2FsaG9zdDo0MzE5L3YxL3RyYWNlc1wiO1xufTtcblxuY2xhc3MgT3BlblBheUZvcm1FdmVudEhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihmb3JtSWQsIGJhc2VVcmwsIGZvcm1DYWxsYmFja3MsIGludGVybmFsQ2FsbGJhY2tzKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIWV2ZW50LnNvdXJjZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbT0pTXSBObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChnZXRDbGVhbk9yaWdpbihldmVudC5vcmlnaW4pICE9PSBnZXRDbGVhbk9yaWdpbih0aGlzLmJhc2VVcmwpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBldmVudC5kYXRhW1wicGVucGFsXCJdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBldmVudC5kYXRhW1wic291cmNlXCJdICYmIGV2ZW50LmRhdGFbXCJzb3VyY2VcIl0gPT09IFwicmVhY3QtZGV2dG9vbHMtYnJpZGdlXCIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IGV2ZW50RGF0YSA9IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICBldmVudERhdGEgPSBwYXJzZUV2ZW50UGF5bG9hZChKU09OLnBhcnNlKGV2ZW50LmRhdGEpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNWYWxpZCA9IHRoaXMudmFsaWRhdGVFdmVudChldmVudERhdGEpO1xuICAgICAgaWYgKCFpc1ZhbGlkKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZCwgcGF5bG9hZCB9ID0gZXZlbnREYXRhO1xuICAgICAgY29uc3QgZXZlbnRUeXBlID0gcGF5bG9hZC50eXBlO1xuICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgY2FzZSBcIkxBWU9VVFwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Muc2V0Rm9ybUhlaWdodChwYXlsb2FkLmhlaWdodCA/IGAke3BheWxvYWQuaGVpZ2h0fXB4YCA6IFwiMTAwJVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkZPQ1VTXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkZvY3VzKGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlLCB7XG4gICAgICAgICAgICBvYmZ1c2NhdGVkVmFsdWU6IHBheWxvYWQub2JmdXNjYXRlZFZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSwgcGF5bG9hZC5lcnJvcnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BREVEXCI6XG4gICAgICAgICAgdGhpcy5ldmVudFRhcmdldHNbZWxlbWVudElkXSA9IGV2ZW50LnNvdXJjZTtcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZGVkKHBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkRXJyb3IocGF5bG9hZC5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKHBheWxvYWQuZWxlbWVudFR5cGUsIHBheWxvYWQuZXJyb3JzLCBlbGVtZW50SWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgZXZlbnRUeXBlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMudmFsaWRhdGVFdmVudCA9IChldmVudERhdGEpID0+IHtcbiAgICAgIGlmIChldmVudERhdGEuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhZXZlbnREYXRhLmVsZW1lbnRJZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIltPSlNdIGZvcm1JZFwiLCB0aGlzLmZvcm1JZCwgZXZlbnREYXRhLmZvcm1JZCk7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5ub25jZXMuaGFzKGV2ZW50RGF0YS5ub25jZSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5ub25jZXMuYWRkKGV2ZW50RGF0YS5ub25jZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIHRoaXMuZXZlbnRUYXJnZXRzID0ge307XG4gICAgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICAgIHRoaXMuZm9ybUlkID0gZm9ybUlkO1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmw7XG4gICAgdGhpcy5mb3JtQ2FsbGJhY2tzID0gZm9ybUNhbGxiYWNrcztcbiAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzID0gaW50ZXJuYWxDYWxsYmFja3M7XG4gIH1cbn1cbmNvbnN0IGdldENsZWFuT3JpZ2luID0gKHVybCkgPT4ge1xuICByZXR1cm4gbmV3IFVSTCh1cmwpLm9yaWdpbjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3Rpb24oaWZyYW1lLCBjaGlsZE9yaWdpbikge1xuICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZSxcbiAgICBkZWJ1ZzogZmFsc2UsXG4gICAgY2hpbGRPcmlnaW5cbiAgfSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25PYmogPSBhd2FpdCBjb25uZWN0aW9uLnByb21pc2U7XG4gIGNvbnN0IGlzVmFsaWRPYmplY3QgPSBhd2FpdCBjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0KGNvbm5lY3Rpb25PYmopO1xuICBpZiAoIWlzUmVzdWx0VmFsaWQoY29ubmVjdGlvbk9iaiwgaXNWYWxpZE9iamVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdGApO1xuICB9XG4gIHJldHVybiBjb25uZWN0aW9uT2JqO1xufVxuY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKGlkLCBjb25uZWN0aW9uKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQoaWQsIGNvbm5lY3Rpb24pO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgfVxuICAgIHJldHVybiBjb25uZWN0aW9uO1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5cbmNvbnN0IHNldHVwUGF5bWVudFJlcXVlc3RIYW5kbGVycyA9IChpbml0UHJGbG93cywgY29udGV4dCwgY2FsbGJhY2tzKSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlUFIgfSA9IGluaXRQckZsb3dzO1xuICBzdHJpcGVQUi5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICBpZiAocmVzdWx0LmlzU3VjY2Vzcykge1xuICAgICAgY29uc3QgaW5pdFJlc3VsdCA9IHJlc3VsdC5sb2FkZWRWYWx1ZTtcbiAgICAgIGNvbnN0IGNhbkFwcGxlUGF5ID0gaW5pdFJlc3VsdC5pc0F2YWlsYWJsZSAmJiBpbml0UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheTtcbiAgICAgIGNvbnN0IGNhbkdvb2dsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5O1xuICAgICAgY29uc3QgZmluYWxTdGF0dXMgPSB7XG4gICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGNhbkFwcGxlUGF5LFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHVzZXJQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmIChjYW5BcHBsZVBheSkge1xuICAgICAgICAgICAgICBydW5TdHJpcGVQckZsb3coXCJhcHBsZV9wYXlcIiwgaW5pdFJlc3VsdCwgY29udGV4dCwgY2FsbGJhY2tzLCB1c2VyUGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdvb2dsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5Hb29nbGVQYXksXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodXNlclBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKGNhbkdvb2dsZVBheSkge1xuICAgICAgICAgICAgICBydW5TdHJpcGVQckZsb3coXCJnb29nbGVfcGF5XCIsIGluaXRSZXN1bHQsIGNvbnRleHQsIGNhbGxiYWNrcywgdXNlclBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY2FsbGJhY2tzLmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZChmaW5hbFN0YXR1cyk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBydW5TdHJpcGVQckZsb3cgPSAocHJvdmlkZXIsIGluaXRSZXN1bHQsIGNvbnRleHQsIGZvcm1DYWxsYmFja3MsIHBhcmFtcykgPT4ge1xuICByZXR1cm4gT2pzRmxvd3Muc3RyaXBlUFIucnVuKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHByb3ZpZGVyKSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlciwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgaW5pdFJlc3VsdFxuICB9KTtcbn07XG5cbmNvbnN0IEdFTkVSSUNfQ09OTl9FUlIgPSBgVGhlIHNlY3VyZSBmb3JtIGZhaWxlZCB0byBsb2FkIHByb3Blcmx5LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLCBvciB0cnkgYWdhaW4gbGF0ZXIuYDtcbmNvbnN0IHsgbG9nX18sIGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcIm9wLWZvcm1cIik7XG5jbGFzcyBPcGVuUGF5Rm9ybSB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHRoaXMuaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gICAgdGhpcy5hbnlDZGVDb25uID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgICB0aGlzLmNvbnRleHQgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICAgIHRoaXMuaW5pdEZsb3dzID0gY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycygpO1xuICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKTtcbiAgICAgIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKFwiZm9ybS5pbml0aWFsaXplXCIsIHtcbiAgICAgICAga2luZDogU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZm9ybUlkXCI6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIFwib2pzLnZlcnNpb25cIjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNvbnRleHQud2l0aCh0cmFjZS5zZXRTcGFuKGNvbnRleHQuYWN0aXZlKCksIHNwYW4pLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY2RlQnJpZGdlSWZyYW1lID0gdGhpcy5jcmVhdGVFbGVtZW50KEVsZW1lbnRUeXBlRW51bS5DREVfQlJJREdFKTtcbiAgICAgICAgICBjZGVCcmlkZ2VJZnJhbWUubm9kZS5pZCA9IFwiX19vcF9pbnRlcm5hbF9jZGVfYnJpZGdlXCI7XG4gICAgICAgICAgY2RlQnJpZGdlSWZyYW1lLm5vZGUuYXJpYUhpZGRlbiA9IFwidHJ1ZVwiO1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oY2RlQnJpZGdlSWZyYW1lLm5vZGUuc3R5bGUsIHtcbiAgICAgICAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICAgICAgICBtYXJnaW46IFwiMHB4XCIsXG4gICAgICAgICAgICBwYWRkaW5nOiBcIjBweFwiLFxuICAgICAgICAgICAgd2lkdGg6IFwiMXB4XCIsXG4gICAgICAgICAgICBoZWlnaHQ6IFwiMXB4XCIsXG4gICAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogXCJub25lXCIsXG4gICAgICAgICAgICB1c2VyU2VsZWN0OiBcIm5vbmVcIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNkZUJyaWRnZUlmcmFtZS5tb3VudChcImJvZHlcIik7XG4gICAgICAgICAgbG9nX18oXCJDREUgYnJpZGdlIGVsZW1lbnQgbW91bnRlZFwiKTtcbiAgICAgICAgICBsb2dfXyhcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpO1xuICAgICAgICAgIGxvZ19fKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICAgIGNvbnN0IGNkZUxvYWRlZCA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IEdFTkVSSUNfQ09OTl9FUlJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsb2dfXyhcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKTtcbiAgICAgICAgICBzcGFuPy5hZGRFdmVudChcIndhaXRpbmdfZm9yX2NkZV9jb25uZWN0aW9uXCIpO1xuICAgICAgICAgIGxvZ19fKFwi4pScIFdhaXRpbmcgZm9yIENERSBjb25uZWN0aW9uLi4uXCIpO1xuICAgICAgICAgIGNvbnN0IGNkZUNvbm5TcGFuID0gdHJhY2VyPy5zdGFydFNwYW4oXCJjZGUuY29ubmVjdFwiLCB2b2lkIDAsIGNvbnRleHQuYWN0aXZlKCkpO1xuICAgICAgICAgIGNvbnN0IGFueUNkZUNvbm4gPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgICAgdGltZW91dEVyck1zZzogR0VORVJJQ19DT05OX0VSUlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNkZUNvbm5TcGFuPy5lbmQoKTtcbiAgICAgICAgICBzcGFuPy5hZGRFdmVudChcImNkZV9jb25uZWN0ZWRcIik7XG4gICAgICAgICAgbG9nX18oXCLilJwgQ0RFIGNvbm5lY3Rpb24gcmVjZWl2ZWRcIik7XG4gICAgICAgICAgYXdhaXQgc2V0VXNlckRldmljZVRva2VuKGFueUNkZUNvbm4sIHRoaXMuZGV2aWNlVG9rZW4pO1xuICAgICAgICAgIGxvZ19fKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICAgIGNvbnN0IG9qc0NvbnRleHQgPSBPcGVuUGF5Rm9ybS5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgICBjZGVMb2FkZWQsXG4gICAgICAgICAgICBhbnlDZGVDb25uLFxuICAgICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5zZXQob2pzQ29udGV4dCk7XG4gICAgICAgICAgc2V0dXBQYXltZW50UmVxdWVzdEhhbmRsZXJzKHRoaXMuaW5pdEZsb3dzLCBvanNDb250ZXh0LCB0aGlzLmZvcm1DYWxsYmFja3MpO1xuICAgICAgICAgIGxvZ19fKFwi4pScIFN0YXJ0aW5nIE9KUyBpbml0IGZsb3dzLi4uXCIpO1xuICAgICAgICAgIGF3YWl0IHN0YXJ0QWxsSW5pdEZsb3dzKHRoaXMuaW5pdEZsb3dzLCBvanNDb250ZXh0LCB0aGlzLmZvcm1DYWxsYmFja3MpO1xuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGNkZUxvYWRlZC50b3RhbEFtb3VudEF0b21zLCBjZGVMb2FkZWQuY3VycmVuY3kpO1xuICAgICAgICAgIGxvZ19fKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIik7XG4gICAgICAgICAgc3Bhbj8uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgICAgdHJhY2soXCJmb3JtX2xvYWRlZFwiKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGVycik7XG4gICAgICAgICAgc3Bhbj8uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgIGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZXJyX18oXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIGVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgdHJhY2soXCJmb3JtX2luaXRfZXJyb3JcIiwge1xuICAgICAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzcGFuPy5lbmQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLnNldEZvcm1IZWlnaHQgPSAoaGVpZ2h0KSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIGlmICh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykge1xuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQudHlwZSA9PT0gRWxlbWVudFR5cGVFbnVtLkNERV9CUklER0UpIHJldHVybjtcbiAgICAgICAgICBlbGVtZW50Lm5vZGUuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMub25DZGVMb2FkZWQgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICB0aGlzLmNkZUxvYWRFdmVudC5zZXQocGF5bG9hZCk7XG4gICAgICAgIHRyYWNrKFwiY2RlX2xvYWRlZFwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMub25DZGVMb2FkRXJyb3IgPSAoZXJyTXNnKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LnRocm93KG5ldyBFcnJvcihlcnJNc2cpLCBlcnJNc2cpO1xuICAgICAgICB0cmFjayhcImNkZV9sb2FkX2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogZXJyTXNnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVFbGVtZW50ID0gKGVsZW1lbnRUeXBlLCBvcHRpb25zID0ge30pID0+IHtcbiAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImNyZWF0ZUVsZW1lbnRcIik7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgdHlwZSA9IF9FbGVtZW50VHlwZUVudW1ab2QucGFyc2UoZWxlbWVudFR5cGUpO1xuICAgICAgY29uc3QgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xuICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcob3B0aW9ucyk7XG4gICAgICBmcmFtZS5uYW1lID0gYCR7dHlwZX0tZWxlbWVudGA7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGAvYXBwL3YxLyR7ZnJhbWUubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICB1cmwuc2VhcmNoID0gcXVlcnlTdHJpbmcudG9TdHJpbmcoKTtcbiAgICAgIGZyYW1lLnNyYyA9IHVybC5ocmVmO1xuICAgICAgZnJhbWUuc3R5bGUuYm9yZGVyID0gXCJub25lXCI7XG4gICAgICBmcmFtZS5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgICAgY29uc3QgcmVnaXN0ZXJlZEVsZW1lbnQgPSB0aGlzLnJlZ2lzdGVySWZyYW1lKHR5cGUsIGZyYW1lKTtcbiAgICAgIHJldHVybiByZWdpc3RlcmVkRWxlbWVudDtcbiAgICB9O1xuICAgIHRoaXMucmVnaXN0ZXJJZnJhbWUgPSAodHlwZSwgZnJhbWUpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIG5vZGU6IGZyYW1lLFxuICAgICAgICBtb3VudDogKHNlbGVjdG9yKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik/LmFwcGVuZENoaWxkKGZyYW1lKTtcbiAgICAgICAgICB0cmFjayhcImVsZW1lbnRfbW91bnRlZFwiLCB7XG4gICAgICAgICAgICBlbGVtZW50X3R5cGU6IHR5cGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRoaXMuY29ubmVjdFRvRWxlbWVudCh7IHR5cGU6IGVsZW1lbnQudHlwZSwgbm9kZTogZWxlbWVudC5ub2RlIH0pO1xuICAgICAgaWYgKCF0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IHtcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRdOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEX05VTUJFUl06IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRfRVhQSVJZXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF9DVkNdOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DREVfQlJJREdFXTogdm9pZCAwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1t0eXBlXSA9IGVsZW1lbnQ7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9O1xuICAgIHRoaXMuYnVpbGRRdWVyeVN0cmluZyA9IChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcnJlcik7XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpO1xuICAgICAgaWYgKG9wdGlvbnMuc3R5bGVzKSB7XG4gICAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInN0eWxlc1wiLCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhvcHRpb25zLnN0eWxlcykpO1xuICAgICAgfVxuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gICAgfTtcbiAgICB0aGlzLmNvbm5lY3RUb0VsZW1lbnQgPSAoZWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIGNyZWF0ZVRyYWNraW5nU3BhbihcbiAgICAgICAge1xuICAgICAgICAgIHNwYW5OYW1lOiBcImNvbm5lY3RfdG9fZWxlbWVudFwiLFxuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBjb25uID0gYXdhaXQgY3JlYXRlQ29ubmVjdGlvbihlbGVtZW50Lm5vZGUpO1xuICAgICAgICAgIGNvbm4udHJhY2luZ0NvbnRleHQgPSB7XG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKGVsZW1lbnQudHlwZSwgY29ubik7XG4gICAgICAgICAgaWYgKCF0aGlzLmFueUNkZUNvbm4uY3VycmVudC5pc1N1Y2Nlc3MgJiYgZWxlbWVudC50eXBlID09PSBFbGVtZW50VHlwZUVudW0uQ0RFX0JSSURHRSkge1xuICAgICAgICAgICAgdGhpcy5hbnlDZGVDb25uLnNldChjb25uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICkuY2F0Y2goKGVycikgPT4gZXJyX18oXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIGVycikpO1xuICAgIH07XG4gICAgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5O1xuICAgIH07XG4gICAgdGhpcy5zdWJtaXRDYXJkID0gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKSB7XG4gICAgICAgIGVycl9fKFwiRm9ybSBpcyBhbHJlYWR5IHN1Ym1pdHRpbmcuIFBsZWFzZSB3YWl0IGZvciB0aGUgc3VibWlzc2lvbiB0byBmaW5pc2ggYmVmb3JlIHN1Ym1pdHRpbmcgYWdhaW4uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjcmVhdGVUcmFja2luZ1NwYW4oXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3Bhbk5hbWU6IFwic3VibWl0X2NhcmRcIixcbiAgICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyLFxuICAgICAgICAgICAgcGF5bWVudFJvdXRlSWQ6IHBhcmFtcz8ucGF5bWVudFJvdXRlSWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyYWNrKFwic3VibWl0X2NhcmRcIiwgeyAuLi5wYXJhbXMgfSk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJzdWJtaXRDYXJkXCIpO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dDIgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBpZiAoIWNvbnRleHQyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBPanNGbG93cy5jb21tb25DQy5ydW4oe1xuICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2RlQ29ubmVjdGlvbnM6IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKSxcbiAgICAgICAgICAgICAgICBwYXltZW50Um91dGVJZDogcGFyYW1zPy5wYXltZW50Um91dGVJZFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIGNyZWF0ZVRyYWNraW5nU3BhbihcbiAgICAgICAge1xuICAgICAgICAgIHNwYW5OYW1lOiBcImdldF9hdmFpbGFibGVfcGF5bWVudF9tZXRob2RzXCIsXG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzXCIpO1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQyID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghY29udGV4dDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgZ2V0dGluZyBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgeyBwcm9jZXNzb3JzOiBhcHBsZVBheVByb2Nlc3NvcnMsIGlzQXZhaWxhYmxlOiBpc0FwcGxlUGF5QXZhaWxhYmxlIH0gPSBnZXRBcHBsZVBheVByb2Nlc3NvcnMoXG4gICAgICAgICAgICB0aGlzLmluaXRGbG93c1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeyBwcm9jZXNzb3JzOiBnb29nbGVQYXlQcm9jZXNzb3JzLCBpc0F2YWlsYWJsZTogaXNHb29nbGVQYXlBdmFpbGFibGUgfSA9IGdldEdvb2dsZVBheVByb2Nlc3NvcnMoXG4gICAgICAgICAgICB0aGlzLmluaXRGbG93c1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgcGF5cGFsRmxvd1Jlc3VsdCA9IHRoaXMuaW5pdEZsb3dzLnBheXBhbC5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgY29uc3QgcGF5cGFsQXZhaWxhYmxlID0gcGF5cGFsRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUgPz8gZmFsc2U7XG4gICAgICAgICAgY29uc3QgeyBwcm9jZXNzb3JzOiBrbGFybmFQcm9jZXNzb3JzLCBpc0F2YWlsYWJsZTogaXNLbGFybmFBdmFpbGFibGUgfSA9IGdldEtsYXJuYVByb2Nlc3NvcnModGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgIGNvbnN0IHsgcHJvY2Vzc29yczogYWZmaXJtUHJvY2Vzc29ycywgaXNBdmFpbGFibGU6IGlzQWZmaXJtQXZhaWxhYmxlIH0gPSBnZXRBZmZpcm1Qcm9jZXNzb3JzKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICBjb25zdCB7IHByb2Nlc3NvcnM6IGFmdGVycGF5UHJvY2Vzc29ycywgaXNBdmFpbGFibGU6IGlzQWZ0ZXJwYXlBdmFpbGFibGUgfSA9IGdldEFmdGVycGF5UHJvY2Vzc29ycyhcbiAgICAgICAgICAgIHRoaXMuaW5pdEZsb3dzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBwb2NreXRQYXlwYWxBdmFpbGFibGUgPSBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLnNvbWUoXG4gICAgICAgICAgICAobWV0aG9kKSA9PiBtZXRob2QucHJvY2Vzc29yX25hbWUgPT09IFwicG9ja3l0XCIgJiYgbWV0aG9kLnByb3ZpZGVyID09PSBcInBheXBhbFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBsb29wRmxvd1Jlc3VsdCA9IHRoaXMuaW5pdEZsb3dzLmxvb3AucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGNvbnN0IGxvb3BDcnlwdG9BdmFpbGFibGUgPSBsb29wRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUgPz8gZmFsc2U7XG4gICAgICAgICAgY29uc3Qgc3RyaXBlTGlua0Zsb3dSZXN1bHQgPSB0aGlzLmluaXRGbG93cy5zdHJpcGVMaW5rLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBjb25zdCBzdHJpcGVMaW5rQXZhaWxhYmxlID0gc3RyaXBlTGlua0Zsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlID8/IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IG1ldGhvZHMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMuY2FyZCxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogW10sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLmFwcGxlUGF5LFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBhcHBsZVBheVByb2Nlc3NvcnMsXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBpc0FwcGxlUGF5QXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLmdvb2dsZVBheSxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogZ29vZ2xlUGF5UHJvY2Vzc29ycyxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IGlzR29vZ2xlUGF5QXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLnBheXBhbCxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogcGF5cGFsQXZhaWxhYmxlID8gW1BheW1lbnRQcm9jZXNzb3IuRW51bS5wYXlwYWxdIDogW10sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBwYXlwYWxBdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMua2xhcm5hLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBrbGFybmFQcm9jZXNzb3JzLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogaXNLbGFybmFBdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMuYWZmaXJtLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBhZmZpcm1Qcm9jZXNzb3JzLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogaXNBZmZpcm1BdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMuYWZ0ZXJwYXksXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IGFmdGVycGF5UHJvY2Vzc29ycyxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IGlzQWZ0ZXJwYXlBdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMucG9ja3l0UGF5cGFsLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBwb2NreXRQYXlwYWxBdmFpbGFibGUgPyBbUGF5bWVudFByb2Nlc3Nvci5FbnVtLnBvY2t5dF0gOiBbXSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IHBvY2t5dFBheXBhbEF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5sb29wQ3J5cHRvLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBsb29wQ3J5cHRvQXZhaWxhYmxlID8gW1BheW1lbnRQcm9jZXNzb3IuRW51bS5sb29wXSA6IFtdLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogbG9vcENyeXB0b0F2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5zdHJpcGVMaW5rLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBbUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZV0sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBzdHJpcGVMaW5rQXZhaWxhYmxlLFxuICAgICAgICAgICAgICBjb250cm9sbGVyOiBzdHJpcGVMaW5rRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUgPyBzdHJpcGVMaW5rRmxvd1Jlc3VsdC5jb250cm9sbGVyIDogdm9pZCAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXTtcbiAgICAgICAgICBjb25zdCBpbml0Rmxvd05hbWVNYXAgPSB7XG4gICAgICAgICAgICBwYXlwYWw6IFN1Ym1pdE1ldGhvZHMucGF5cGFsLFxuICAgICAgICAgICAgYWlyd2FsbGV4R29vZ2xlUGF5OiBTdWJtaXRNZXRob2RzLmFpcndhbGxleEdvb2dsZVBheSxcbiAgICAgICAgICAgIGFpcndhbGxleEFwcGxlUGF5OiBTdWJtaXRNZXRob2RzLmFpcndhbGxleEFwcGxlUGF5LFxuICAgICAgICAgICAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBTdWJtaXRNZXRob2RzLmF1dGhvcml6ZW5ldEdvb2dsZVBheSxcbiAgICAgICAgICAgIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBTdWJtaXRNZXRob2RzLmF1dGhvcml6ZW5ldEFwcGxlUGF5LFxuICAgICAgICAgICAgYWR5ZW5Hb29nbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYWR5ZW5Hb29nbGVQYXksXG4gICAgICAgICAgICBhZHllbkFwcGxlUGF5OiBTdWJtaXRNZXRob2RzLmFkeWVuQXBwbGVQYXlcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IG1ldGhvZHNfb2xkID0gT2JqZWN0LmVudHJpZXModGhpcy5pbml0Rmxvd3MpLm1hcCgoW2tleSwgZmxvd10pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZsb3dSZXN1bHQgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBpbml0Rmxvd05hbWVNYXBba2V5XSA/PyBrZXk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBuYW1lOiBtZXRob2ROYW1lLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBbXSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IGZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlID8/IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBbLi4ubWV0aG9kc19vbGQsIC4uLm1ldGhvZHNdO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH07XG4gICAgdGhpcy5nZW5lcmFsU3VibWl0ID0gYXN5bmMgKG1ldGhvZCwgc2V0dGluZ3MpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykge1xuICAgICAgICBlcnJfXyhcIkZvcm0gaXMgYWxyZWFkeSBzdWJtaXR0aW5nLiBQbGVhc2Ugd2FpdCBmb3IgdGhlIHN1Ym1pc3Npb24gdG8gZmluaXNoIGJlZm9yZSBzdWJtaXR0aW5nIGFnYWluLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3JlYXRlVHJhY2tpbmdTcGFuKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNwYW5OYW1lOiBcImdlbmVyYWxfZm9ybV9zdWJtaXRcIixcbiAgICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cmFjayhcImdlbmVyYWxfZm9ybV9zdWJtaXRcIiwgeyBtZXRob2QsIHNldHRpbmdzIH0pO1xuICAgICAgICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZ2VuZXJhbFN1Ym1pdFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQyID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgaWYgKCFjb250ZXh0Mikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmNhcmQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0Q2FyZChzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5wb2NreXRQYXlwYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFBheW1lbnRQcm92aWRlclR5cGUuUEFZUEFMLFxuICAgICAgICAgICAgICAgICAgICBcInBvY2t5dFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzIH0sXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLnBheXBhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MucGF5cGFsLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5QQVlQQUwsXG4gICAgICAgICAgICAgICAgICAgIFwicGF5cGFsXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3MgfSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMua2xhcm5hOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydEZsb3cgfSA9IGdldEtsYXJuYVByb2Nlc3NvcnModGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hZmZpcm06IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdyB9ID0gZ2V0QWZmaXJtUHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFmdGVycGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydEZsb3cgfSA9IGdldEFmdGVycGF5UHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmxvb3BDcnlwdG86IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MubG9vcENyeXB0by5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFwiY3J5cHRvXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibG9vcFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93IH0gPSBnZXRBcHBsZVBheVByb2Nlc3NvcnModGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5nb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdyB9ID0gZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gS2VlcGluZyBleGlzdGluZyBjb21tZW50ZWQgY29kZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBpbiB0aGUgZnV0dXJlIHZlcnNpb25cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFpcndhbGxleEdvb2dsZVBheSA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhaXJ3YWxsZXhHb29nbGVQYXkpIHtcbiAgICAgICAgICAgICAgICAgIGVycl9fKFxuICAgICAgICAgICAgICAgICAgICBgYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFpcndhbGxleEdvb2dsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhBcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFpcndhbGxleEFwcGxlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYWlyd2FsbGV4QXBwbGVQYXkpIHtcbiAgICAgICAgICAgICAgICAgIGVycl9fKFxuICAgICAgICAgICAgICAgICAgICBgYWlyd2FsbGV4LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWlyd2FsbGV4QXBwbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYXV0aG9yaXplbmV0R29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aG9yaXplTmV0R29vZ2xlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWF1dGhvcml6ZU5ldEdvb2dsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhdXRob3JpemUtbmV0LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF1dGhvcml6ZU5ldEdvb2dsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRBcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF1dGhvcml6ZU5ldEFwcGxlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYXV0aG9yaXplTmV0QXBwbGVQYXkpIHtcbiAgICAgICAgICAgICAgICAgIGVycl9fKFxuICAgICAgICAgICAgICAgICAgICBgYXV0aG9yaXplLW5ldC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF1dGhvcml6ZU5ldEFwcGxlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFkeWVuR29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWR5ZW5Hb29nbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hZHllbkdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhZHllbkdvb2dsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhZHllbi1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ2BcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhZHllbkdvb2dsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hZHllbkFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWR5ZW5BcHBsZVBheSA9IHRoaXMuaW5pdEZsb3dzLmFkeWVuQXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYWR5ZW5BcHBsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhZHllbi1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkeWVuQXBwbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4QUNIOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhBQ0gucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLkFDSCxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEVGVDpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MuYWlyd2FsbGV4RUZULnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5FRlQsXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhCQUNTOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhCQUNTLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5CQUNTLFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4U0VQQTpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MuYWlyd2FsbGV4U0VQQS5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFBheW1lbnRQcm92aWRlclR5cGUuU0VQQSxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLnN0cmlwZUxpbms6IHtcbiAgICAgICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgICAgIFwiU3RyaXBlTGluayBjYW5ub3QgYmUgc3VibWl0dGVkIG1hbnVhbGx5LiBQbGVhc2UgbW91bnQgdGhlIGJ1dHRvbiBwcm9wZXJseSBhbmQgaWYgdXNlciBjb21wbGV0ZWQgdGhlIHBheW1lbnQgZmxvdyB2aWEgU3RyaXBlTGluayBidXR0b24sIHRoZSBwYXltZW50IHdpbGwgYmUgc3VibWl0dGVkIGF1dG9tYXRpY2FsbHkuXCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGFzc2VydE5ldmVyKG1ldGhvZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc3VibWl0V2l0aCA9IHRoaXMuZ2VuZXJhbFN1Ym1pdDtcbiAgICB0aGlzLnN1Ym1pdCA9IHRoaXMuc3VibWl0Q2FyZDtcbiAgICB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICBsb2dfXyhcIkRlc3Ryb3lpbmcgT3BlblBheSBmb3JtLi4uXCIpO1xuICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZGVzdHJveVwiKTtcbiAgICAgIHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPz8ge30pKSB7XG4gICAgICAgIGlmICghZWxlbWVudCkgY29udGludWU7XG4gICAgICAgIGVsZW1lbnQubm9kZS5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSk7XG4gICAgICBkZXRhY2hBbmFseXRpY3NFdmVudExpc3RlbmVycygpO1xuICAgICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsO1xuICAgICAgZGVsZXRlIHdpbmRvd1tcIm9qc1wiXTtcbiAgICAgIHRyYWNrKFwiZm9ybV9kZXN0cm95ZWRcIik7XG4gICAgfTtcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrcyA9IChuZXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5zZXRDYWxsYmFja3MobmV3Q2FsbGJhY2tzKTtcbiAgICB9O1xuICAgIE9wZW5QYXlGb3JtLmFzc2lnbkFzU2luZ2xldG9uKHRoaXMpO1xuICAgIHRoaXMub2pzVmVyc2lvbiA9IFwiMC41LjIxXCI7XG4gICAgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwiMC41LjIxXCI7XG4gICAgdGhpcy5iYXNlVXJsID0gY29uZmlnLmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuICAgIHRoaXMuY29uZmlnID0geyAuLi5jb25maWcsIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9O1xuICAgIHRoaXMuZm9ybUNhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuZnJvbU9iamVjdChjb25maWcpO1xuICAgIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbDtcbiAgICB0aGlzLmZvcm1JZCA9IGBvcGpzLWZvcm0tJHt2NCgpfWA7XG4gICAgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgdGhpcy5mb3JtVGFyZ2V0ID0gY29uZmlnLmZvcm1UYXJnZXQgPz8gXCJib2R5XCI7XG4gICAgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH07XG4gICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBDb25uZWN0aW9uTWFuYWdlcigpO1xuICAgIHRoaXMuZGV2aWNlVG9rZW4gPSBnZXREZXZpY2VUb2tlbigpO1xuICAgIGF0dGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzKCk7XG4gICAgY29uc3QgeyBmcmFtZXdvcmssIHZlcnNpb24gfSA9IGdldEZyYW1ld29ya0luZm8oKTtcbiAgICBnZXRDdXJyZW50RW52KHRoaXMuYmFzZVVybCkudGhlbigoZW52aXJvbm1lbnQpID0+IHtcbiAgICAgIGlmICghbWV0cmljc1B1Ymxpc2hlci5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICBjb25zdCBtZXRyaWNzQ29udGV4dCA9IHtcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICAgIGZyYW1ld29yayxcbiAgICAgICAgICBmcmFtZXdvcmtWZXJzaW9uOiB2ZXJzaW9uLFxuICAgICAgICAgIG9qc1ZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICBvanNSZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmxcbiAgICAgICAgfTtcbiAgICAgICAgbWV0cmljc1B1Ymxpc2hlci5zZXQobWV0cmljc0NvbnRleHQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRyYWNrKFwiZm9ybV9pbml0XCIpO1xuICAgIGNvbnNvbGUubG9nKFwiT0pTIFZFUlNJT05cIiwgdGhpcy5vanNWZXJzaW9uKTtcbiAgICBpZiAoY29uZmlnLmFsbG93VHJhY2luZyA9PT0gdHJ1ZSkge1xuICAgICAgaW5pdFRyYWNlclNhZmUodGhpcy5vanNWZXJzaW9uLCB0aGlzLmJhc2VVcmwpO1xuICAgIH1cbiAgICB0aGlzLmV2ZW50SGFuZGxlciA9IG5ldyBPcGVuUGF5Rm9ybUV2ZW50SGFuZGxlcih0aGlzLmZvcm1JZCwgdGhpcy5iYXNlVXJsLCB0aGlzLmZvcm1DYWxsYmFja3MsIHtcbiAgICAgIHNldEZvcm1IZWlnaHQ6IHRoaXMuc2V0Rm9ybUhlaWdodCxcbiAgICAgIG9uQ2RlTG9hZGVkOiB0aGlzLm9uQ2RlTG9hZGVkLFxuICAgICAgb25DZGVMb2FkRXJyb3I6IHRoaXMub25DZGVMb2FkRXJyb3JcbiAgICB9KTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpO1xuICAgIHRoaXMuc3RhcnRGb3JtSW5pdCgpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5vanNGbG93cyA9IE9qc0Zsb3dzO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5hc3NpZ25Bc1NpbmdsZXRvbiA9IChmb3JtKSA9PiB7XG4gICAgICBpZiAoT3BlblBheUZvcm0uZ2V0SW5zdGFuY2UoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGluc3RhbmNlIGFscmVhZHkgZXhpc3RzLiBPbmx5IG9uZSBpbnN0YW5jZSBpcyBhbGxvd2VkLlwiKTtcbiAgICAgIH1cbiAgICAgIHdpbmRvd1tcIm9qc1wiXSA9IGZvcm07XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZ2V0SW5zdGFuY2UgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gd2luZG93W1wib2pzXCJdID8/IG51bGw7XG4gICAgfTtcbiAgfVxuICBnZXQgY2hlY2tvdXRTZWN1cmVUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbjtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuYnVpbGRPanNGbG93Q29udGV4dCA9IChjb25maWcsIGNkZUxvYWRlZFBheWxvYWQsIGFueUNkZUNvbm5lY3Rpb24sIGZvcm1EaXYpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IGNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBiYXNlVXJsOiBuZXcgVVJMKGNvbmZpZy5iYXNlVXJsID8/IEZSQU1FX0JBU0VfVVJMKS5vcmlnaW4sXG4gICAgICAgIGZvcm1EaXYsXG4gICAgICAgIGVsZW1lbnRzU2Vzc2lvbklkOiBjZGVMb2FkZWRQYXlsb2FkLnNlc3Npb25JZCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogY2RlTG9hZGVkUGF5bG9hZC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjdXN0b21Jbml0UGFyYW1zOiBjb25maWcuY3VzdG9tSW5pdFBhcmFtcyA/PyB7fSxcbiAgICAgICAgcHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uOiBjb25maWcucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uXG4gICAgICB9O1xuICAgIH07XG4gIH1cbiAgY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShjYWxsZXIgPSBcInVua25vd25cIikge1xuICAgIGNvbnN0IGN1cnJlbnRJbnN0YW5jZSA9IE9wZW5QYXlGb3JtLmdldEluc3RhbmNlKCk7XG4gICAgY29uc3QgZGVidWdJbmZvID0ge1xuICAgICAgdGhpc0Zvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICBjdXJyZW50Rm9ybUlkOiBjdXJyZW50SW5zdGFuY2U/LmZvcm1JZCB8fCBcIm5vLWN1cnJlbnQtaW5zdGFuY2VcIixcbiAgICAgIGlzRGVzdHJveWVkOiB0aGlzLmlzRGVzdHJveWVkLFxuICAgICAgY2hlY2tvdXRUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbi5zdWJzdHJpbmcoMCwgMTApICsgXCIuLi5cIlxuICAgIH07XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYFxuICAgICAgW1dhcm5pbmddIEludmFsaWQgZm9ybSBpbnN0YW5jZSBkZXRlY3RlZC5cbiAgICAgIEl0IGxvb2tzIGxpa2UgeW91IGFyZSBzdGlsbCB1c2luZyBhbiBvbGQgaW5zdGFuY2UgdGhhdCBoYXMgYmVlbiBkZXN0cm95ZWQuXG4gICAgICBQbGVhc2UgbWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgdGhlIGxhdGVzdCBpbnN0YW5jZSBvZiB0aGUgZm9ybSBhbmQgY2xlYW51cCBldmVudCBsaXN0ZW5lcnMuXG4gICAgICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgIERlYnVnIEluZm86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgIC0gY2FsbGVyOiAke2NhbGxlcn1cbiAgICAgIC0gY2FsbGVyX2Zvcm1faWQ6ICR7ZGVidWdJbmZvLnRoaXNGb3JtSWR9XG4gICAgICAtIGN1cnJlbnRfYWN0aXZlX2Zvcm1faWQ6ICR7ZGVidWdJbmZvLmN1cnJlbnRGb3JtSWR9XG4gICAgICAtIGlzX2Rlc3Ryb3llZDogJHtkZWJ1Z0luZm8uaXNEZXN0cm95ZWR9XG4gICAgICAtIGNoZWNrb3V0X3Rva2VuOiAke2RlYnVnSW5mby5jaGVja291dFRva2VufVxuICAgIGA7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgIGVycl9fKGVycm9yTWVzc2FnZSk7XG4gICAgICB0cmFjayhcIm91dGRhdGVkX2Zvcm1faW5zdGFuY2VcIiwgeyBlcnJvcjogZXJyb3JNZXNzYWdlIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWN1cnJlbnRJbnN0YW5jZSB8fCBjdXJyZW50SW5zdGFuY2UuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCkge1xuICAgICAgZXJyX18oZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRyYWNrKFwib3V0ZGF0ZWRfZm9ybV9pbnN0YW5jZVwiLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmV4cG9ydCB7IENvbnRleHRBUEkgYXMgQywgRGlhZ0FQSSBhcyBELCBFbGVtZW50VHlwZUVudW0gYXMgRSwgRmllbGROYW1lIGFzIEYsIElOVkFMSURfU1BBTl9DT05URVhUIGFzIEksIE9wZW5QYXlGb3JtIGFzIE8sIFByb3h5VHJhY2VyIGFzIFAsIFJPT1RfQ09OVEVYVCBhcyBSLCBTcGFuS2luZCBhcyBTLCBUcmFjZUZsYWdzIGFzIFQsIGNvbnRleHQgYXMgYSwgaXNWYWxpZFRyYWNlSWQgYXMgYiwgY3JlYXRlQ29udGV4dEtleSBhcyBjLCBpc1ZhbGlkU3BhbklkIGFzIGQsIFNwYW5TdGF0dXNDb2RlIGFzIGUsIERpYWdMb2dMZXZlbCBhcyBmLCBnZXRHbG9iYWwgYXMgZywgSU5WQUxJRF9TUEFOSUQgYXMgaCwgaXNTcGFuQ29udGV4dFZhbGlkIGFzIGksIElOVkFMSURfVFJBQ0VJRCBhcyBqLCBQcm94eVRyYWNlclByb3ZpZGVyIGFzIGssIFN1Ym1pdE1ldGhvZHMgYXMgbCwgcmVnaXN0ZXJHbG9iYWwgYXMgciwgdHJhY2UgYXMgdCwgdW5yZWdpc3Rlckdsb2JhbCBhcyB1IH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxrQkFBQUEsVUFBc0I7QUFDL0IsU0FBUyxLQUFBQyxTQUFTO0FBQ2xCLE9BQU9DLFFBQVc7QUFDbEIsU0FBUyxNQUFBQyxVQUFVO0FBRW5CLFNBQVNDLEdBQVNDLEdBQVFDLEdBQVc7QUFDbkMsTUFBSUMsSUFBaUIsT0FBTztBQUM1QixFQUFB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QUFDaGxDLEdBQVE0bkMsR0FBa0JuZ0IsR0FBa0JySixPQUMvRDtBQUFBLEVBQ0wscUJBQXFCcGUsRUFBTztBQUFBLEVBQzVCLFNBQVMsSUFBSSxJQUFJQSxFQUFPLFdBQVcyYixFQUFjLEVBQUU7QUFBQSxFQUNuRCxTQUFBeUM7QUFBQSxFQUNBLG1CQUFtQndwQixFQUFpQjtBQUFBLEVBQ3BDLHdCQUF3QkEsRUFBaUI7QUFBQSxFQUN6QyxrQkFBQW5nQjtBQUFBLEVBQ0Esa0JBQWtCem5CLEVBQU8sb0JBQW9CLENBQUM7QUFBQSxFQUM5QyxtQ0FBbUNBLEVBQU87QUFDNUM7QUEzcEJOLElBQU02bkMsS0FBTjdDOyIsCiAgIm5hbWVzIjogWyJjb25uZWN0VG9DaGlsZCIsICJ6IiwgImNoYWxrIiwgInY0IiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiZm4iLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzJDEiLCAiX2V4dGVuZFN0YXRpY3MiLCAiZCIsICJiIiwgInAiLCAiX18iLCAiQ3VzdG9tRXJyb3IiLCAiX3N1cGVyIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJfRWxlbWVudFR5cGVFbnVtWm9kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkJhc2VFbGVtZW50c1N0eWxlIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiRWxlbWVudEV2ZW50IiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiVG9rZW5pemVDYXJkUmVzcG9uc2UiLCAiVGhyZWVEU1N0YXR1cyIsICJUaHJlZURTU3RhdHVzMiIsICJQaW5nM0RTU3RhdHVzUmVzcG9uc2UiLCAiQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgIkFXWEJhbmsiLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgIkNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkUmVzcG9uc2UiLCAiQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiRUZURm9ybURhdGEiLCAiQkFDU0Zvcm1EYXRhIiwgIlNFUEFGb3JtRGF0YSIsICJBQ0hNaWNyb0RlcG9zaXRGb3JtRGF0YSIsICJFRlRNaWNyb0RlcG9zaXRGb3JtRGF0YSIsICJCQUNTTWljcm9EZXBvc2l0Rm9ybURhdGEiLCAiU0VQQU1pY3JvRGVwb3NpdEZvcm1EYXRhIiwgIk1pY3JvRGVwb3NpdFN0YXR1c1Jlc3BvbnNlIiwgIm51bGxPclVuZGVmT3IiLCAiQ0RFUmVzcG9uc2VFcnJvciIsICJDb3Vwb25NaW5pbWFsIiwgIkxpbmVJdGVtIiwgIkJyYW5kU2V0dGluZ3MiLCAiQnJhbmQiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kIiwgIlN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsIiwgIlN1YnNjcmlwdGlvbk1pbmltYWwiLCAiSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsIiwgIkludm9pY2VMaW5lSXRlbU1pbmltYWwiLCAiRGlzY291bnRNaW5pbWFsIiwgIkludm9pY2VNaW5pbWFsIiwgIkNyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZWRGb3JtUHJlZmlsbCIsICJFeHBpcmVkRm9ybVByZWZpbGwiLCAiQ29tcGxldGVBZGRyZXNzIiwgIlNldHVwQ2hlY2tvdXRSZXNwb25zZSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIk5ld0N1c3RvbWVyRmllbGRzIiwgIlByaWNlUXR5IiwgIkNhcnRJbmZvIiwgIlByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEiLCAiU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgIlN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlIiwgIkNoZWNrb3V0U3RhbmRhcmRFcnJvclJlc3BvbnNlIiwgIlByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlIiwgIlNldFVzZXJEZXZpY2VUb2tlblJlc3BvbnNlIiwgIlVzZXJBY3Rpb25GRVBheWxvYWQiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZSIsICJab2RGaWVsZEVycm9yIiwgIlpvZEZpZWxkRXJyb3JzIiwgIk1BUF9UT19IVU1BTl9GUklFTkRMWV9MT1dFUkNBU0UiLCAiZ2V0SHVtYW5GcmllbmRseU1lc3NhZ2UiLCAib2dFcnJvck1lc3NhZ2UiLCAia2V5IiwgImlzU3RyaW5naWZpZWRKc29uT2JqZWN0IiwgInN0ciIsICJjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgInJlc3BvbnNlIiwgImVyciIsICJjcmVhdGVNZXNzYWdlRnJvbVpvZEZpZWxkRXJyb3JzIiwgImVycm9ycyIsICJnZXRFcnJvck1lc3NhZ2UiLCAib2JqIiwgImUyIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiY2FsbGJhY2tOYW1lIiwgImVycm9yTG9nZ2VyIiwgImFyZ3MiLCAiZXJyb3IiLCAic3VtIiwgImFyciIsICJhIiwgImJlZm9yZVVubG9hZEhhbmRsZXIiLCAiZXZlbnQiLCAicHJldmVudE5hdmlnYXRpb24iLCAic3RvcFByZXZlbnROYXZpZ2F0aW9uIiwgImFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzIiwgInNpbXBsZU9qc0Zsb3ciLCAiaXNTdWJtaXR0aW5nIiwgInBhcmFtcyIsICJ0cmFjayIsICJmbG93UmVzdWx0IiwgImZvcmNlUHJvY2Vzc01ldHJpY3NRdWV1ZSIsICJlcnJvck1lc3NhZ2UiLCAiZXJyb3JDb2RlIiwgInNhZmVseUdldFN0YW5kYXJkaXplZEVycm9yQ29kZSIsICJhZGRFcnJvckNhdGNoZXJGb3JJbml0IiwgImluaXQiLCAiZXJyX18iLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAicHJlZml4IiwgImxvZyIsICJleHRlbmRTdGF0aWNzIiwgIl9fZXh0ZW5kcyIsICJfX2F3YWl0ZXIiLCAidGhpc0FyZyIsICJfYXJndW1lbnRzIiwgIlAiLCAiZ2VuZXJhdG9yIiwgImFkb3B0IiwgInZhbHVlIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImZ1bGZpbGxlZCIsICJzdGVwIiwgImUiLCAicmVqZWN0ZWQiLCAicmVzdWx0IiwgIl9fZ2VuZXJhdG9yIiwgImJvZHkiLCAiXyIsICJ0IiwgImYiLCAieSIsICJnIiwgInZlcmIiLCAibiIsICJ2IiwgIm9wIiwgIl9fdmFsdWVzIiwgIm8iLCAicyIsICJtIiwgImkiLCAiX19yZWFkJDQiLCAiciIsICJhciIsICJfX3NwcmVhZEFycmF5JDQiLCAidG8iLCAiZnJvbSIsICJwYWNrIiwgImwiLCAiX19hd2FpdCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInEiLCAiYXdhaXRSZXR1cm4iLCAicmVzdW1lIiwgInNldHRsZSIsICJmdWxmaWxsIiwgIl9fYXN5bmNWYWx1ZXMiLCAiaXNGdW5jdGlvbiIsICJ2YWx1ZSIsICJjcmVhdGVFcnJvckNsYXNzIiwgImNyZWF0ZUltcGwiLCAiX3N1cGVyIiwgImluc3RhbmNlIiwgImN0b3JGdW5jIiwgIlVuc3Vic2NyaXB0aW9uRXJyb3IiLCAiZXJyb3JzIiwgImVyciIsICJpIiwgImFyclJlbW92ZSIsICJhcnIiLCAiaXRlbSIsICJpbmRleCIsICJTdWJzY3JpcHRpb24iLCAiaW5pdGlhbFRlYXJkb3duIiwgImVfMSIsICJfYSIsICJlXzIiLCAiX2IiLCAiX3BhcmVudGFnZSIsICJfcGFyZW50YWdlXzEiLCAiX192YWx1ZXMiLCAiX3BhcmVudGFnZV8xXzEiLCAicGFyZW50XzEiLCAiZV8xXzEiLCAiaW5pdGlhbEZpbmFsaXplciIsICJlIiwgIl9maW5hbGl6ZXJzIiwgIl9maW5hbGl6ZXJzXzEiLCAiX2ZpbmFsaXplcnNfMV8xIiwgImZpbmFsaXplciIsICJleGVjRmluYWxpemVyIiwgIl9fc3ByZWFkQXJyYXkkNCIsICJfX3JlYWQkNCIsICJlXzJfMSIsICJ0ZWFyZG93biIsICJwYXJlbnQiLCAiZW1wdHkiLCAiRU1QVFlfU1VCU0NSSVBUSU9OIiwgImlzU3Vic2NyaXB0aW9uIiwgImNvbmZpZyIsICJ0aW1lb3V0UHJvdmlkZXIiLCAiaGFuZGxlciIsICJ0aW1lb3V0IiwgImFyZ3MiLCAiX2kiLCAiaGFuZGxlIiwgInJlcG9ydFVuaGFuZGxlZEVycm9yIiwgIm5vb3AiLCAiZXJyb3JDb250ZXh0IiwgImNiIiwgIlN1YnNjcmliZXIiLCAiX19leHRlbmRzIiwgImRlc3RpbmF0aW9uIiwgIl90aGlzIiwgIkVNUFRZX09CU0VSVkVSIiwgIm5leHQiLCAiZXJyb3IiLCAiY29tcGxldGUiLCAiU2FmZVN1YnNjcmliZXIiLCAiQ29uc3VtZXJPYnNlcnZlciIsICJwYXJ0aWFsT2JzZXJ2ZXIiLCAiaGFuZGxlVW5oYW5kbGVkRXJyb3IiLCAib2JzZXJ2ZXJPck5leHQiLCAiZGVmYXVsdEVycm9ySGFuZGxlciIsICJvYnNlcnZhYmxlIiwgImlkZW50aXR5IiwgIngiLCAicGlwZUZyb21BcnJheSIsICJmbnMiLCAiaW5wdXQiLCAicHJldiIsICJmbiIsICJPYnNlcnZhYmxlIiwgInN1YnNjcmliZSIsICJvcGVyYXRvciIsICJzdWJzY3JpYmVyIiwgImlzU3Vic2NyaWJlciIsICJzb3VyY2UiLCAic2luayIsICJwcm9taXNlQ3RvciIsICJnZXRQcm9taXNlQ3RvciIsICJyZXNvbHZlIiwgInJlamVjdCIsICJvcGVyYXRpb25zIiwgImlzT2JzZXJ2ZXIiLCAiaGFzTGlmdCIsICJvcGVyYXRlIiwgImluaXQiLCAibGlmdGVkU291cmNlIiwgImNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciIsICJvbk5leHQiLCAib25Db21wbGV0ZSIsICJvbkVycm9yIiwgIm9uRmluYWxpemUiLCAiT3BlcmF0b3JTdWJzY3JpYmVyIiwgInNob3VsZFVuc3Vic2NyaWJlIiwgImNsb3NlZF8xIiwgIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yIiwgIlN1YmplY3QiLCAic3ViamVjdCIsICJBbm9ueW1vdXNTdWJqZWN0IiwgIl9jIiwgIm9ic2VydmVyIiwgIm9ic2VydmVycyIsICJoYXNFcnJvciIsICJpc1N0b3BwZWQiLCAidGhyb3duRXJyb3IiLCAiZGF0ZVRpbWVzdGFtcFByb3ZpZGVyIiwgIkFjdGlvbiIsICJzY2hlZHVsZXIiLCAid29yayIsICJzdGF0ZSIsICJkZWxheSIsICJpbnRlcnZhbFByb3ZpZGVyIiwgIkFzeW5jQWN0aW9uIiwgImlkIiwgIl9pZCIsICJfc2NoZWR1bGVyIiwgIl9kZWxheSIsICJlcnJvcmVkIiwgImVycm9yVmFsdWUiLCAiYWN0aW9ucyIsICJTY2hlZHVsZXIiLCAic2NoZWR1bGVyQWN0aW9uQ3RvciIsICJub3ciLCAiQXN5bmNTY2hlZHVsZXIiLCAiU2NoZWR1bGVyQWN0aW9uIiwgImFjdGlvbiIsICJhc3luY1NjaGVkdWxlciIsICJpc0FycmF5TGlrZSIsICJpc1Byb21pc2UiLCAiaXNJbnRlcm9wT2JzZXJ2YWJsZSIsICJpc0FzeW5jSXRlcmFibGUiLCAib2JqIiwgImNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yIiwgImdldFN5bWJvbEl0ZXJhdG9yIiwgIml0ZXJhdG9yIiwgImlzSXRlcmFibGUiLCAicmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvciIsICJyZWFkYWJsZVN0cmVhbSIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInJlYWRlciIsICJkb25lIiwgIl9fZ2VuZXJhdG9yIiwgIl9fYXdhaXQiLCAiaXNSZWFkYWJsZVN0cmVhbUxpa2UiLCAiaW5uZXJGcm9tIiwgImZyb21JbnRlcm9wT2JzZXJ2YWJsZSIsICJmcm9tQXJyYXlMaWtlIiwgImZyb21Qcm9taXNlIiwgImZyb21Bc3luY0l0ZXJhYmxlIiwgImZyb21JdGVyYWJsZSIsICJmcm9tUmVhZGFibGVTdHJlYW1MaWtlIiwgIm9icyIsICJhcnJheSIsICJwcm9taXNlIiwgIml0ZXJhYmxlIiwgIml0ZXJhYmxlXzEiLCAiaXRlcmFibGVfMV8xIiwgImFzeW5jSXRlcmFibGUiLCAicHJvY2VzcyIsICJhc3luY0l0ZXJhYmxlXzEiLCAiYXN5bmNJdGVyYWJsZV8xXzEiLCAiX19hd2FpdGVyIiwgIl9fYXN5bmNWYWx1ZXMiLCAiZXhlY3V0ZVNjaGVkdWxlIiwgInBhcmVudFN1YnNjcmlwdGlvbiIsICJyZXBlYXQiLCAic2NoZWR1bGVTdWJzY3JpcHRpb24iLCAidGhyb3dFcnJvciIsICJlcnJvck9yRXJyb3JGYWN0b3J5IiwgImVycm9yRmFjdG9yeSIsICJFbXB0eUVycm9yIiwgImxhc3RWYWx1ZUZyb20iLCAiX2hhc1ZhbHVlIiwgIl92YWx1ZSIsICJpc1ZhbGlkRGF0ZSIsICJUaW1lb3V0RXJyb3IiLCAiaW5mbyIsICJzY2hlZHVsZXJBcmciLCAiZmlyc3QiLCAiZWFjaCIsICJfd2l0aCIsICJ0aW1lb3V0RXJyb3JGYWN0b3J5IiwgIl9kIiwgIm1ldGEiLCAib3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24iLCAidGltZXJTdWJzY3JpcHRpb24iLCAibGFzdFZhbHVlIiwgInNlZW4iLCAic3RhcnRUaW1lciIsICJMb2FkZWRPbmNlUHVibGlzaGVyIiwgImVyck1zZyIsICJ2YWx1ZUlmTm90TG9hZGVkIiwgInN1YnNjcmlwdGlvbiIsICJ0aW1lb3V0Q29uZmlnIiwgImFzc2VydE5ldmVyIiwgInRpbWVvdXRQYXJhbXMiLCAiT2pzRW52aXJvbm1lbnQiLCAieiIsICJjb25udG9CYXNlVXJscyIsICJnZXRDb25udG9VcmwiLCAiZW52IiwgImVudkNhY2hlIiwgImdldEN1cnJlbnRFbnYiLCAiYmFzZVVybCIsICJyZXNwb25zZSIsICJyZXMiLCAiZXhjbHVkZVByb3BzIiwgInByb3BzIiwgImtleSIsICJnZXRXaW5kb3dTYWZlIiwgIm1ldHJpY3NQdWJsaXNoZXIiLCAiTUVUUklDU19RVUVVRV9LRVkiLCAiTUFYX1JFVFJZX0FUVEVNUFRTIiwgIkJBVENIX1NJWkUiLCAiQkFUQ0hfSU5URVJWQUxfTVMiLCAibG9nX18keCIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJNZXRyaWNzUXVldWUiLCAiZXZlbnROYW1lIiwgInByb3BlcnRpZXMiLCAiY29udGV4dFByb3BlcnRpZXMiLCAiZXZlbnQiLCAidjQiLCAic3RvcmVkUXVldWUiLCAic2FmZVdpbmRvdyIsICJjb250ZXh0IiwgImJhdGNoIiwgImJhdGNoUGF5bG9hZCIsICJjb25udG9VcmwiLCAibWV0cmljc1JvdXRlciIsICJldmVudHNUb0tlZXAiLCAibWV0cmljc1F1ZXVlIiwgInRyYWNrIiwgImZvcmNlUHJvY2Vzc01ldHJpY3NRdWV1ZSIsICJvblVuaGFuZGxlZFJlamVjdGlvbkVycm9yIiwgImVycm9yTWVzc2FnZSIsICJnZXRFcnJvck1lc3NhZ2UiLCAib25VbmNhdWdodEVycm9yIiwgInBhZ2VMaWZlY3ljbGUiLCAibG9hZFBhZ2VMaWZlY3ljbGUiLCAicGFnZUxpZmVjeWNsZVN0YXRlQ2hhbmdlSGFuZGxlciIsICJhdHRhY2hBbmFseXRpY3NFdmVudExpc3RlbmVycyIsICJsaWZlY3ljbGUiLCAiZGV0YWNoQW5hbHl0aWNzRXZlbnRMaXN0ZW5lcnMiLCAiU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgIlBheW1lbnRSZXF1ZXN0TmV4dEFjdGlvbk1ldGFkYXRhIiwgIm91ckN1cnJlbmN5VG9UaGVpcnMiLCAiZ2V0TG9hZGVkU3RyaXBlIiwgInB1Ymxpc2hhYmxlS2V5IiwgImlzU3RyaXBlSnNQcmVzZW50IiwgInNsZWVwIiwgImNyZWF0ZVN0cmlwZUVsZW1lbnRzIiwgInN0cmlwZVB1YktleSIsICJlbGVtZW50c09wdGlvbnMiLCAic3RyaXBlIiwgImNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0IiwgInRvdGFsQW1vdW50QXRvbSIsICJjdXJyZW5jeSIsICJpc0Ftb3VudFBlbmRpbmciLCAiaXNMaW5rT25seSIsICJzdHJpcGVDdXJyZW5jeSIsICJ0aW1lb3V0TXMiLCAid2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QiLCAicGF5bWVudFJlcXVlc3QiLCAiZXZ0IiwgImNvbmZpcm1TdHJpcGVQclBNIiwgIm5leHRBY3Rpb25NZXRhZGF0YSIsICJzdHJpcGVQbSIsICJjb25maXJtUmVzdWx0IiwgImxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3ciLCAicmVzdWx0U3RhdHVzIiwgIl9nbG9iYWxUaGlzIiwgIlZFUlNJT04iLCAicmUiLCAiX21ha2VDb21wYXRpYmlsaXR5Q2hlY2siLCAib3duVmVyc2lvbiIsICJhY2NlcHRlZFZlcnNpb25zIiwgInJlamVjdGVkVmVyc2lvbnMiLCAibXlWZXJzaW9uTWF0Y2giLCAib3duVmVyc2lvblBhcnNlZCIsICJnbG9iYWxWZXJzaW9uIiwgIl9yZWplY3QiLCAidiIsICJfYWNjZXB0IiwgImdsb2JhbFZlcnNpb25NYXRjaCIsICJnbG9iYWxWZXJzaW9uUGFyc2VkIiwgImlzQ29tcGF0aWJsZSIsICJtYWpvciIsICJHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZIiwgIl9nbG9iYWwiLCAicmVnaXN0ZXJHbG9iYWwiLCAidHlwZSIsICJkaWFnIiwgImFsbG93T3ZlcnJpZGUiLCAiYXBpIiwgImdldEdsb2JhbCIsICJ1bnJlZ2lzdGVyR2xvYmFsIiwgIl9fcmVhZCQzIiwgIm8iLCAibiIsICJtIiwgInIiLCAiYXIiLCAiX19zcHJlYWRBcnJheSQzIiwgInRvIiwgImZyb20iLCAicGFjayIsICJsIiwgIkRpYWdDb21wb25lbnRMb2dnZXIiLCAibG9nUHJveHkiLCAiZnVuY05hbWUiLCAibmFtZXNwYWNlIiwgImxvZ2dlciIsICJEaWFnTG9nTGV2ZWwiLCAiY3JlYXRlTG9nTGV2ZWxEaWFnTG9nZ2VyIiwgIm1heExldmVsIiwgIl9maWx0ZXJGdW5jIiwgInRoZUxldmVsIiwgInRoZUZ1bmMiLCAiX19yZWFkJDIiLCAiX19zcHJlYWRBcnJheSQyIiwgIkFQSV9OQU1FJDIiLCAiRGlhZ0FQSSIsICJfbG9nUHJveHkiLCAic2VsZiIsICJzZXRMb2dnZXIiLCAib3B0aW9uc09yTG9nTGV2ZWwiLCAib2xkTG9nZ2VyIiwgIm5ld0xvZ2dlciIsICJzdGFjayIsICJvcHRpb25zIiwgImNyZWF0ZUNvbnRleHRLZXkiLCAiZGVzY3JpcHRpb24iLCAiQmFzZUNvbnRleHQiLCAicGFyZW50Q29udGV4dCIsICJST09UX0NPTlRFWFQiLCAiX19yZWFkJDEiLCAiX19zcHJlYWRBcnJheSQxIiwgIk5vb3BDb250ZXh0TWFuYWdlciIsICJfY29udGV4dCIsICJ0aGlzQXJnIiwgInRhcmdldCIsICJfX3JlYWQiLCAiX19zcHJlYWRBcnJheSIsICJBUElfTkFNRSQxIiwgIk5PT1BfQ09OVEVYVF9NQU5BR0VSIiwgIkNvbnRleHRBUEkiLCAiY29udGV4dE1hbmFnZXIiLCAiVHJhY2VGbGFncyIsICJJTlZBTElEX1NQQU5JRCIsICJJTlZBTElEX1RSQUNFSUQiLCAiSU5WQUxJRF9TUEFOX0NPTlRFWFQiLCAiTm9uUmVjb3JkaW5nU3BhbiIsICJfc3BhbkNvbnRleHQiLCAiX2tleSIsICJfYXR0cmlidXRlcyIsICJfbmFtZSIsICJfbGluayIsICJfbGlua3MiLCAiX3N0YXR1cyIsICJfZW5kVGltZSIsICJfZXhjZXB0aW9uIiwgIl90aW1lIiwgIlNQQU5fS0VZIiwgImdldFNwYW4iLCAiZ2V0QWN0aXZlU3BhbiIsICJzZXRTcGFuIiwgInNwYW4iLCAiZGVsZXRlU3BhbiIsICJzZXRTcGFuQ29udGV4dCIsICJzcGFuQ29udGV4dCIsICJnZXRTcGFuQ29udGV4dCIsICJWQUxJRF9UUkFDRUlEX1JFR0VYIiwgIlZBTElEX1NQQU5JRF9SRUdFWCIsICJpc1ZhbGlkVHJhY2VJZCIsICJ0cmFjZUlkIiwgImlzVmFsaWRTcGFuSWQiLCAic3BhbklkIiwgImlzU3BhbkNvbnRleHRWYWxpZCIsICJ3cmFwU3BhbkNvbnRleHQiLCAiY29udGV4dEFwaSIsICJOb29wVHJhY2VyIiwgIm5hbWUiLCAicm9vdCIsICJwYXJlbnRGcm9tQ29udGV4dCIsICJpc1NwYW5Db250ZXh0IiwgImFyZzIiLCAiYXJnMyIsICJhcmc0IiwgIm9wdHMiLCAiY3R4IiwgImNvbnRleHRXaXRoU3BhblNldCIsICJOT09QX1RSQUNFUiIsICJQcm94eVRyYWNlciIsICJfcHJvdmlkZXIiLCAidmVyc2lvbiIsICJfb3B0aW9ucyIsICJfZm4iLCAidHJhY2VyIiwgIk5vb3BUcmFjZXJQcm92aWRlciIsICJfdmVyc2lvbiIsICJOT09QX1RSQUNFUl9QUk9WSURFUiIsICJQcm94eVRyYWNlclByb3ZpZGVyIiwgImRlbGVnYXRlIiwgIlNwYW5LaW5kIiwgIlNwYW5TdGF0dXNDb2RlIiwgIkFQSV9OQU1FIiwgIlRyYWNlQVBJIiwgInByb3ZpZGVyIiwgInN1Y2Nlc3MiLCAidHJhY2UiLCAiY3JlYXRlQ0RFU3BhbiIsICJjZGVDb25uIiwgImRhdGEiLCAib3BlcmF0aW9uIiwgInJlc3VsdCIsICJjcmVhdGVUcmFja2luZ1NwYW4iLCAiQ2RlRXJyb3IiLCAiQ3VzdG9tRXJyb3IiLCAiZnJpZW5kbHlNZXNzYWdlIiwgInF1ZXJ5Q0RFIiwgInJlc3BvbnNlU2NoZW1hIiwgInRyYWNraW5nS2V5IiwgImlzQ0RFUmVzcG9uc2VFcnJvciIsICJjb25uZWN0aW9uIiwgImNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hIiwgInNjaGVtYSIsICJDREVSZXNwb25zZUVycm9yIiwgImdldENoZWNrb3V0UHJldmlldyIsICJyZXF1ZXN0IiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgImdldFByZWZpbGwiLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgInN0YXJ0UGF5bWVudEZsb3ciLCAicGF5bG9hZCIsICJTdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAic3RhcnRQYXltZW50Rmxvd0ZvckNDIiwgIlN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlIiwgInN0YXJ0UGF5bWVudEZsb3dGb3JQUiIsICJjb25maXJtUGF5bWVudEZsb3ciLCAiQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiZmluYWxpemVTZXR1cFBheW1lbnRNZXRob2QiLCAiU2V0dXBDaGVja291dFJlc3BvbnNlIiwgImNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkIiwgIkNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkUmVzcG9uc2UiLCAiZ2V0Q2hlY2tvdXRWYWx1ZSIsICJzZWN1cmVUb2tlbiIsICJwcm9tb0NvZGUiLCAiY2hlY2tvdXRQcmV2aWV3IiwgImN1cnJlbmNpZXMiLCAiaW52IiwgImFtb3VudEF0b20iLCAic3VtIiwgImdldENoZWNrb3V0UHJldmlld0Ftb3VudCIsICJpc1NldHVwTW9kZSIsICJ0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zIiwgImFsbENkZUNvbm5lY3Rpb25zIiwgIlRva2VuaXplQ2FyZFJlc3BvbnNlIiwgImNoZWNrb3V0Q2FyZEVsZW1lbnRzIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgInNldHVwQ2hlY2tvdXQiLCAicGVyZm9ybUNoZWNrb3V0IiwgIkNERV9QT0xMSU5HX0lOVEVSVkFMIiwgInBpbmdDZGVGb3JTdGF0dXMiLCAiaWZyYW1lIiwgImNoaWxkT3JpZ2luIiwgInJlc3BvbnNlTW9kZWwiLCAiY29ubmVjdGlvbk9iaiIsICJjb25uZWN0VG9DaGlsZCIsICJwcmVwYXJlUGF5bWVudEZsb3ciLCAiUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UiLCAic2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlIiwgIkNoZWNrb3V0U3RhbmRhcmRFcnJvclJlc3BvbnNlIiwgInNldFVzZXJEZXZpY2VUb2tlbiIsICJkZXZpY2VUb2tlbiIsICJTZXRVc2VyRGV2aWNlVG9rZW5SZXNwb25zZSIsICJjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0IiwgInBpbmciLCAiaXNSZXN1bHRWYWxpZCIsICJpc1ZhbGlkIiwgIkZSQU1FX0JBU0VfVVJMIiwgIkVOQ09ESU5HIiwgIkVOQ09ESU5HX0xFTiIsICJSQU5ET01fTEVOIiwgIlRJTUVfTEVOIiwgIlRJTUVfTUFYIiwgIlVMSURFcnJvckNvZGUiLCAiVUxJREVycm9yIiwgImVycm9yQ29kZSIsICJtZXNzYWdlIiwgInJhbmRvbUNoYXIiLCAicHJuZyIsICJyYW5kb21Qb3NpdGlvbiIsICJkZXRlY3RQUk5HIiwgInJvb3RMb29rdXAiLCAiZGV0ZWN0Um9vdCIsICJnbG9iYWxDcnlwdG8iLCAiYnVmZmVyIiwgImluV2ViV29ya2VyIiwgImVuY29kZVJhbmRvbSIsICJsZW4iLCAic3RyIiwgImVuY29kZVRpbWUiLCAibW9kIiwgImN1cnJlbnRMZW4iLCAidWxpZCIsICJzZWVkVGltZSIsICJjdXJyZW50UFJORyIsICJzZWVkIiwgIkNPT0tJRV9OQU1FIiwgImdldERldmljZVRva2VuIiwgImV4aXN0aW5nQ29va2llIiwgImNvb2tpZSIsICJ0b2tlbiIsICJzZXREZXZpY2VUb2tlbiIsICJvbmVZZWFyRnJvbU5vdyIsICJleHRyYWN0SXNzdWVzUGVyRmllbGQiLCAiaXNzdWVzUGVyRmllbGQiLCAiZmllbGROYW1lIiwgIkZpZWxkTmFtZUVudW0iLCAiY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtIiwgImZvcm1EaXYiLCAiaW5pdGlhbERpY3QiLCAiYWNjIiwgInBhcnNlRXZlbnRQYXlsb2FkIiwgImV2ZW50RGF0YSIsICJFbGVtZW50RXZlbnQiLCAiZ2VuZXJhdGVBbm9ueW1vdXNWYWx1ZXMiLCAiZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMiLCAiZmllbGRzIiwgIkZpZWxkTmFtZSIsICJnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMiLCAiY2hlY2tvdXRfc2V0dGluZ3MiLCAiZ2V0RnVsbE5hbWUiLCAiZmlyc3ROYW1lIiwgImxhc3ROYW1lIiwgInN0eWxlcyIsICJ3aWR0aCIsICJoZWlnaHQiLCAiYmFua1NlbGVjdG9yU3R5bGVzIiwgImNyZWF0ZUFuZE9wZW5GcmFtZSIsICJ1cmwiLCAidGl0bGUiLCAidGVtcGxhdGUiLCAiaG9zdCIsICJzaGFkb3dSb290IiwgImNhbmNlbEJ1dHRvbiIsICJjcmVhdGVBbmRPcGVuQmFua1NlbGVjdG9yIiwgImJhbmtzIiwgImJhbmtMaXN0SHRtbCIsICJiYW5rIiwgImxvZ29IdG1sIiwgImJhbmtJdGVtcyIsICJjbGVhbnVwIiwgImNyZWF0ZUFuZE9wZW5NaWNyb0RlcG9zaXRGb3JtIiwgInBheW1lbnRNZXRob2RUeXBlIiwgImVsZW1lbnRzIiwgImhhbmRsZUNhbmNlbCIsICJvblN1Y2Nlc3MiLCAicG9sbGluZ0ludGVydmFsIiwgInN0YXJ0UG9sbGluZyIsICJNaWNyb0RlcG9zaXRTdGF0dXNSZXNwb25zZSIsICJjbGVhbnVwRXZlbnRMaXN0ZW5lcnMiLCAib3JpZ2luYWxIYW5kbGVDYW5jZWwiLCAid3JhcHBlZEhhbmRsZUNhbmNlbCIsICJoYW5kbGVQb2xsaW5nIiwgInN0YXR1cyIsICJoYW5kbGVFdmVudHMiLCAiVGhyZWVEU1N0YXR1cyIsICJzdGFydDNkc1ZlcmlmaWNhdGlvbiIsICJwYXJhbXMiLCAiZnJhbWVXaWR0aCIsICJmcmFtZUhlaWdodCIsICJmcmFtZVRpdGxlIiwgIlBpbmczRFNTdGF0dXNSZXNwb25zZSIsICJzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCIsICJvcGVuUG9wdXBXaW5kb3ciLCAicG9wdXBOYW1lIiwgInBvcHVwV2luZG93IiwgInN0YXJ0UG9wdXBXaW5kb3dWZXJpZmljYXRpb25TdHJpY3QiLCAiZXhwZWN0ZWRWZXJpZnlUb2tlbiIsICJlcnJfXyIsICJwb2xsaW5nIiwgInZlcmlmeVJlc3VsdCIsICJkZXRlY3RMYW5ndWFnZSIsICJsYW5ndWFnZSIsICJsb2dfXyR3IiwgImVycl9fJHciLCAiY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEiLCAicmVxdWlyZV96aXBfY29kZSIsICJyZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzIiwgInJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzIiwgInBheW1lbnRfbWV0aG9kIiwgImlzQnVzaW5lc3NQdXJjaGFzZSIsICJub25DZGVGb3JtSW5wdXRzIiwgImNvbmRpdGlvbmFsRmllbGRzIiwgIlJlcXVpcmVkU3RyaW5nIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJ2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHMiLCAib25WYWxpZGF0aW9uRXJyb3IiLCAiZGVmYXVsdEZpZWxkVmFsdWVzIiwgImtleXMiLCAiZm9ybWF0dGVkIiwgImlzc3VlcyIsICJpc3N1ZUtleXMiLCAibG9nX18kdiIsICJlcnJfXyR2IiwgInZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDIiwgInZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyIsICJ0b2tlbml6ZVJlc3VsdHMiLCAidG9rZW5pemVSZXN1bHQiLCAicGFyc2VkIiwgIkFsbEZpZWxkTmFtZXMiLCAiZXJyX18kdSIsICJwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgImZpbmRDcG1NYXRjaGluZ1R5cGUiLCAiYWxsQ1BNcyIsICJ6b2RNb2RlbCIsICJjcG0iLCAiY3BtMiIsICJjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtIiwgInBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAiLCAibG9nX18yIiwgInByZWZpbGwiLCAiY3JlYXRlZFBheW1lbnRNZXRob2QiLCAiY2hlY2tvdXRSZXF1ZXN0IiwgIlBheW1lbnRQcm9jZXNzb3IiLCAibG9hZFNjcmlwdCIsICJzY3JpcHRJZCIsICJzcmMiLCAiY2hlY2tMb2FkZWRGbiIsICJldmVudExpc3RlbmVyQ29udHJvbGxlciIsICJzY3JpcHQiLCAiZXhpc3RpbmdTY3JpcHQiLCAiZ2V0UGF5bWVudERhdGFSZXF1ZXN0IiwgImdhdGV3YXkiLCAiZ2F0ZXdheU1lcmNoYW50SWQiLCAibWVyY2hhbnROYW1lIiwgIm1lcmNoYW50SWQiLCAiaW5pdGlhbFByZXZpZXciLCAib3ZlcnJpZGVQYXltZW50UmVxdWVzdCIsICJ0b3RhbFByaWNlIiwgImN1cnJlbmN5Q29kZSIsICJiYXNlUmVxdWVzdCIsICJsb2FkR29vZ2xlUGF5U2NyaXB0IiwgInBheW1lbnRzQ2xpZW50IiwgImdldEdvb2dsZVBheUVudmlyb25tZW50IiwgImdldEdvb2dsZVBheW1lbnRzQ2xpZW50IiwgInBheW1lbnREYXRhUmVxdWVzdCIsICJlbnZpcm9ubWVudCIsICJwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJjb21tb25BY3Rpb24iLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5IiwgImZvcm1JbnB1dHMiLCAicGF5bWVudERhdGEiLCAiaW5wdXRzIiwgImJpbGxpbmdBZGRyZXNzIiwgInNoaXBwaW5nQWRkcmVzcyIsICJwYXllckZpcnN0TmFtZSIsICJsYXN0TmFtZVBhcnRzIiwgInBheWVyTGFzdE5hbWUiLCAibG9nX18kdSIsICJlcnJfXyR0IiwgInJ1bkFpcndhbGxleEJBQ1NGbG93IiwgImFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzIiwgImNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJmb3JtQ2FsbGJhY2tzIiwgImN1c3RvbVBhcmFtcyIsICJub25DZGVGb3JtRmllbGRzIiwgImFueUNkZUNvbm5lY3Rpb24iLCAidmVyaWZpY2F0aW9uTWV0aG9kIiwgIm1pY3JvRGVwb3NpdERhdGEiLCAic3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgInN0YXJ0Rmxvd05leHRBY3Rpb25zIiwgImNvbnNlbnRJZCIsICJhdmFpbGFibGVCYW5rcyIsICJzZWxlY3RlZEJhbmsiLCAiZGlyZWN0RGViaXREYXRhIiwgInJlZGlyZWN0VXJsIiwgIm5ld0NvbmZpcm1SZXN1bHQiLCAibG9nX18kdCIsICJlcnJfXyRzIiwgInJ1bkFpcndhbGxleEVGVEZsb3ciLCAibG9nX18kcyIsICJlcnJfXyRyIiwgInJ1bkFpcndhbGxleFNFUEFGbG93IiwgImxvZ19fJHIiLCAiZXJyX18kcSIsICJBaXJ3YWxsZXgzZHNFcnJvclJlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3BvbnNlSGVhZGVycyQzIiwgImVycm9yUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzdWx0IiwgImZyaWVuZGx5RXJyIiwgImRldkVyciIsICJjaGVja0lmUmVxdWlyZXNBaXJ3YWxsZXgzZHMiLCAicGFyc2VJbnRlbnRJZEZyb20zZHNIcmVmIiwgImhyZWYiLCAiaW50ZW50SWQiLCAicnVuQWlyd2FsbGV4M2RzRmxvdyIsICJoZWFkZXJzIiwgImluaXRpYWxJbnRlbnRJZCIsICJBcHBsZVBheUNwbSQyIiwgIkdvb2dsZVBheUNwbSQyIiwgImxvYWRBcHBsZVBheVNjcmlwdCIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5IiwgImFwcGxlUGF5UGF5bWVudCIsICJwbUJpbGxpbmdDb250YWN0IiwgImJpbGxpbmdDb250YWN0IiwgInNoaXBwaW5nQ29udGFjdCIsICJjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCIsICJ0b3RhbCIsICJsaW5lSXRlbSIsICJjcmVhdGVBcHBsZVBheVRvdGFsIiwgImRlZmF1bHRMYWJlbCIsICJhbW91bnQiLCAiZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCIsICJBZHllbkVudmlyb25tZW50IiwgIkFkeWVuTG9jYWxlIiwgImxvZ19fJHEiLCAiZXJyX18kcCIsICJBZHllbjNkc1Jlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3BvbnNlSGVhZGVycyQyIiwgImRlY29kZUFkeWVuQWN0aW9uIiwgImlzQWR5ZW5BdmFpbGFibGUiLCAiZ2V0QWR5ZW5DaGVja291dCIsICJoYW5kbGVBZHllbjNkcyIsICJsb2NhbGUiLCAiY291bnRyeUNvZGUiLCAiY29tcG9uZW50IiwgIm9uQ2FuY2VsIiwgIm9uUGF5bWVudEZhaWxlZCIsICJvbkFkZGl0aW9uYWxEZXRhaWxzIiwgIl8iLCAiX18iLCAiYWR5ZW5DaGVja291dCIsICJjaGVja291dCIsICJkZXRlcm1pbmVMb2NhbGUiLCAicHJlZmlsbExvY2FsZSIsICJicm93c2VyTG9jYWxlIiwgImNoZWNrSWZSZXF1aXJlc0FkeWVuM2RzIiwgInJ1bkFkeWVuM2RzRmxvdyIsICJBcHBsZVBheUNwbSQxIiwgIkdvb2dsZVBheUNwbSQxIiwgImxvZ19fJHAiLCAiaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQyIiwgInBheW1lbnRTZXNzaW9uUmVzcG9uc2UiLCAiaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMiIsICJnZXRGcmF1ZE1ldGFkYXRhIiwgImxvZ19fJG8iLCAiZXJyX18kbyIsICJpbml0QWR5ZW5BcHBsZVBheUZsb3ciLCAiYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCIsICJ1bmF2YWlsYWJsZVJlc3VsdCIsICJhcHBsZVBheUNwbSIsICJvbkFwcGxlUGF5U3RhcnRGbG93IiwgIk9qc0Zsb3dzIiwgInJ1bkFkeWVuQXBwbGVQYXlGbG93IiwgInNlc3Npb24iLCAic2Vzc2lvbkNvbnRleHQiLCAiaW5pdGlhbFByZXZpZXcyIiwgInVwZGF0ZSIsICJsb2dfXyRuIiwgImVycl9fJG4iLCAiaW5pdEFkeWVuR29vZ2xlUGF5RmxvdyIsICJnb29nbGVQYXlDcG0iLCAicHJvY2Vzc29yQWNjb3VudCIsICJjbGllbnQiLCAiaXNSZWFkeVRvUGF5IiwgIm9uR29vZ2xlUGF5U3RhcnRGbG93IiwgInJ1bkFkeWVuR29vZ2xlUGF5RmxvdyIsICJtZXJnZWRJbnB1dHMiLCAib3VyUG1JZCIsICJsb2dfXyRtIiwgImVycl9fJG0iLCAicnVuQWlyd2FsbGV4QUNIRmxvdyIsICJsb2dfXyRsIiwgImhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMSIsICJoYW5kbGUzRFMiLCAiaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMSIsICJsb2dfXyRrIiwgImVycl9fJGwiLCAiaW5pdEFpcndhbGxleEFwcGxlUGF5RmxvdyIsICJydW5BaXJ3YWxsZXhBcHBsZVBheUZsb3ciLCAibG9nX18kaiIsICJlcnJfXyRrIiwgImluaXRBaXJ3YWxsZXhHb29nbGVQYXlGbG93IiwgInJ1bkFpcndhbGxleEdvb2dsZVBheUZsb3ciLCAiZW5jcnlwdGVkUGF5bWVudFRva2VuIiwgImxvZ19fJGkiLCAiZXJyX18kaiIsICJBaXJ3YWxsZXhLbGFybmFDcG0iLCAiaW5pdEFpcndhbGxleEtsYXJuYUZsb3ciLCAia2xhcm5hQ3BtIiwgInJ1bkFpcndhbGxleEtsYXJuYUZsb3ciLCAiaXNBbm9ueW1vdXMiLCAibmV3Q3VzdG9tZXJGaWVsZHMiLCAiQXBwbGVQYXlDcG0iLCAiR29vZ2xlUGF5Q3BtIiwgImhhbmRsZVZhbGlkYXRlTWVyY2hhbnQiLCAiaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQiLCAibW9iaWxlV2FsbGV0UGF5bWVudERhdGEiLCAibG9nX18kaCIsICJlcnJfXyRpIiwgImluaXRBdXRobmV0QXBwbGVQYXlGbG93IiwgInJ1bkF1dGhuZXRBcHBsZVBheUZsb3ciLCAibG9nX18kZyIsICJlcnJfXyRoIiwgImluaXRBdXRobmV0R29vZ2xlUGF5RmxvdyIsICJydW5BdXRobmV0R29vZ2xlUGF5RmxvdyIsICJsb2dfXyRmIiwgImVycl9fJGciLCAiYXR0YWNoRGV2aWNlRGF0YUNvbGxlY3RvciIsICJwb3N0VXJsIiwgImFjY2Vzc1Rva2VuIiwgImZvcm0iLCAicnVuRGV2aWNlRGF0YUNvbGxlY3Rpb24iLCAiZXhwZWN0ZWRPcmlnaW4iLCAiZGV0YWNoIiwgImhhbmRsZUNvbGxlY3Rpb25FdmVudCIsICJydW5QYXllckF1dGgiLCAic3RlcFVwVXJsIiwgIm1lcmNoYW50RGF0YSIsICJ0b2tlbklucHV0IiwgIm1kSW5wdXQiLCAibG9nX18kZSIsICJlcnJfXyRmIiwgIkN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCIsICJudWxsT3JVbmRlZk9yJDEiLCAiRlJJRU5ETFlfRVJSIiwgInBhcnNlUmVzcG9uc2VIZWFkZXJzJDEiLCAidXNlckFjdGlvbiIsICJjaGVja0lmUmVxdWlyZXNDeWJlcnNvdXJjZTNkcyIsICJoYW5kbGVDeWJlcnNvdXJjZTNkcyIsICJjbGVhbnVwUG9sbGluZyIsICJydW5DeWJlcnNvdXJjZTNkc0Zsb3ciLCAic3RlcF91cF91cmwiLCAiYWNjZXNzX3Rva2VuIiwgImRkX3VybCIsICJkZF90b2tlbiIsICJtZXJjaGFudF9kYXRhIiwgImNvbGxlY3Rpb25SZXN1bHQiLCAibG9nX18kZCIsICJlcnJfXyRlIiwgIlBvY2t5dDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlVmF1bHRJZEZyb20zZHNIcmVmIiwgInZhdWx0SWQiLCAicGFyc2VBcmdGcm9tSHJlZiIsICJhcmdOYW1lIiwgImNoZWNrSWZSZXF1aXJlc1BvY2t5dDNkcyIsICJydW5Qb2NreXQzZHNGbG93IiwgInN0cmlwZUxvZ19fIiwgIlN0cmlwZTNEU01ldGFkYXRhUGF5bG9hZCIsICJzdHJpcGVDQzNEU0Zsb3ciLCAicGFyc2VVc2VyRkVQYXlsb2FkIiwgIk1BWF9DT05GSVJNX0xPT1BfSVRFUkFUSU9OUyIsICJsb2dfXyRjIiwgImVycl9fJGQiLCAidW5zYWZlbHlSdW5VbmlmaWVkQ2NGbG93IiwgImNvbW1vbkNoZWNrb3V0UGFyYW1zIiwgInRva2VuaXplQ2FyZFJlc3VsdHMiLCAic3RhcnRQZlJlc3VsdCIsICJyZXR1cm5TdWNjZXNzUmVzdWx0IiwgInJ1bkNvbmZpcm1Mb29wIiwgImNoZWNrb3V0QXR0ZW1wdElkIiwgInBmUmVzdWx0IiwgInZhbGlkYXRlUGZSZXN1bHRVc2VyQWN0aW9uIiwgInVzZXJBY3Rpb25SZXN1bHQiLCAicnVuUmVxdWlyZWRVc2VyQWN0aW9uIiwgImNoZWNrSWZMZWdhY3kzRFNQYXRoIiwgImNvbW1vbkNDM0RTRmxvdyIsICJwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJVc2VyQWN0aW9uRkVQYXlsb2FkIiwgInByZWZpbGxNb2RlIiwgInBheW1lbnRNZXRob2RJZCIsICJsb2dfXyRiIiwgImVycl9fJGMiLCAicnVuQ29tbW9uQ2NGbG93IiwgInVuaWZpZWRDQ1JvbGxvdXRSYXRpbyIsICJyb2xsIiwgInVzZVVuaWZpZWRDQ0Zsb3ciLCAidWNjUm9sbFRyYWNraW5nTWV0YWRhdGEiLCAiZXJySGVhZGVycyIsICJyZXF1aXJlc1BvY2t5dDNkcyIsICJwb2NreXRNZXRhZGF0YUZvckNoZWNrb3V0IiwgImFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQiLCAiYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0IiwgImN5YmVyc291cmNlQWN0aW9uIiwgImN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCIsICJjeWJlcnNvdXJjZU1ldGFkYXRhRm9yQ2hlY2tvdXQiLCAic2hvdWxkVXNlU3RyaXBlRmxvdyIsICJwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJjY1BtSWQiLCAic3RyaXBlQWN0aW9uIiwgImNvbW1vbjNEU0FjdGlvblR5cGVzIiwgInJlcXVpcmVkX3VzZXJfYWN0aW9ucyIsICJDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiTG9vcENyeXB0b0NwbSIsICJsb2dfXyRhIiwgImVycl9fJGIiLCAiaW5pdExvb3BGbG93IiwgInByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEiLCAicGF5bWVudFNldHVwSW5mbyIsICJzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50IiwgIm1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQiLCAiYWxsb3dDdXN0b21lclRvQ2hvb3NlQXV0aCIsICJjaGFyZ2VBbW91bnRVc2RBdG9tIiwgInBheW1lbnRVc2RBbW91bnQiLCAiY3VzdG9tZXJSZWZJZCIsICJ3aWRnZXRQcm9wcyIsICJpbml0TG9vcENvbm5lY3RQcm9wcyIsICJydW5Mb29wRmxvdyIsICJpc0NoZWNrb3V0TW9kZSIsICJjdXN0b21lckZpZWxkcyIsICJsb2dfXyQ5IiwgImVycl9fJGEiLCAiUGF5cGFsQ3BtIiwgImluaXRQYXlwYWxGbG93IiwgInBheXBhbENwbSIsICJydW5QYXlwYWxGbG93IiwgInVzZVJlZGlyZWN0RmxvdyIsICJmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93IiwgImlzUGF5Rmlyc3RGbG93IiwgInN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0IiwgInByZUFjdGlvblVybCIsICJlbmNvZGVkUmVxdWVzdCIsICJzZWFyY2hQYXJhbXMiLCAicGF5cGFsRmxvd1Jlc3VsdCIsICJhcHByb3ZhbFNlc3Npb25JZCIsICJsb2dfXyQ4IiwgImVycl9fJDkiLCAiUG9ja3l0UGF5cGFsQ3BtIiwgImluaXRQb2NreXRQYXlwYWxGbG93IiwgInBvY2t5dFBheXBhbENwbSIsICJydW5Qb2NreXRQYXlwYWxGbG93IiwgInNldHRpbmdzIiwgImxvZ19fJDciLCAiZXJyX18kOCIsICJTdHJpcGVBZmZpcm1DcG0iLCAiU3RyaXBlQWZmaXJtUmVxdWlyZWRVc2VyQWN0aW9ucyIsICJpbml0U3RyaXBlQWZmaXJtRmxvdyIsICJzdHJpcGVBZmZpcm1DcG0iLCAicnVuU3RyaXBlQWZmaXJtRmxvdyIsICJjYXJ0SW5mbyIsICJjbGllbnRfc2VjcmV0IiwgImN1c3RvbWVyTmFtZSIsICJhZmZpcm1QYXltZW50RGF0YSIsICJhZmZpcm1PcHRpb25zIiwgInBheW1lbnRJbnRlbnQiLCAidGhlaXJQYXltZW50TWV0aG9kIiwgImxvZ19fJDYiLCAiZXJyX18kNyIsICJTdHJpcGVBZnRlcnBheUNwbSIsICJTdHJpcGVBZnRlcnBheVJlcXVpcmVkVXNlckFjdGlvbnMiLCAiaW5pdFN0cmlwZUFmdGVycGF5RmxvdyIsICJzdHJpcGVBZnRlcnBheUNwbSIsICJydW5TdHJpcGVBZnRlcnBheUZsb3ciLCAiYWZ0ZXJwYXlQYXltZW50RGF0YSIsICJhZnRlcnBheU9wdGlvbnMiLCAiY29uZmlybWF0aW9uUmVzdWx0IiwgImxvZ19fJDUiLCAiZXJyX18kNiIsICJTdHJpcGVLbGFybmFDcG0iLCAiU3RyaXBlS2xhcm5hUmVxdWlyZWRVc2VyQWN0aW9ucyIsICJpbml0U3RyaXBlS2xhcm5hRmxvdyIsICJzdHJpcGVLbGFybmFDcG0iLCAicnVuU3RyaXBlS2xhcm5hRmxvdyIsICJrbGFybmFQYXltZW50RGF0YSIsICJrbGFybmFPcHRpb25zIiwgIk9KU19TVFJJUEVfTElOS19CVE5fSUQiLCAibG9nX18kNCIsICJlcnJfXyQ1IiwgIlN0cmlwZUxpbmtDcG0iLCAiU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMiLCAiaW5pdFN0cmlwZUxpbmtGbG93IiwgImluaXRQYXJhbXMiLCAic3RyaXBlTGlua0NwbSIsICJsaW5rQXV0aGVudGljYXRpb25FbGVtZW50IiwgImV4cHJlc3NDaGVja291dEVsZW1lbnQiLCAicmVuZGVyTGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudCIsICJzZWxlY3RvciIsICJzaWxlbnQiLCAicGFyZW50Q29udGFpbmVyIiwgImNvbnRhaW5lciIsICJpc0F1dGhlbnRpY2F0ZWQiLCAiaXNMaW5rQXV0aFJlYWR5IiwgImlzUG9zc2libGVBdXRoZW50aWNhdGVkIiwgIm1vdW50QnV0dG9uIiwgImRpc21vdW50QnV0dG9uIiwgImdldEVsZW1lbnRCeUlkQXN5bmMiLCAicnVuU3RyaXBlTGlua0Zsb3ciLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTSIsICJvdXJFeGlzdGluZ1BtSWQiLCAicGF5ZXJMYXN0TmFtZVBhcnRzIiwgImdldEVsZW1lbnQiLCAiZWxlbWVudCIsICJsb2dfXyQzIiwgImVycl9fJDQiLCAiU3RyaXBlUHJDcG0iLCAiaW5pdFN0cmlwZVByRmxvdyIsICJwciIsICJjYW5NYWtlUGF5bWVudCIsICJydW5TdHJpcGVQckZsb3cyIiwgImZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QiLCAicnVuU3RyaXBlUHJGbG93JDEiLCAiaW5pdFJlc3VsdCIsICJvdmVycmlkZSIsICJhcHBsZVBheVBheW1lbnRSZXF1ZXN0IiwgInVwZGF0ZVByV2l0aEFtb3VudCIsICJzdHJpcGVQbUFkZGVkRXZlbnQiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQbSIsICJwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZVBtRXZ0IiwgImlzUGVuZGluZyIsICJzdHJpcGVBcHBsZVBheSIsICJsYWJlbCIsICJjcG1zIiwgIndpdGhQcm92aWRlciIsICJ3aXRoUHJvY2Vzc29yIiwgIm1hdGNoZXMiLCAibWF0Y2hlc1Byb2Nlc3NvciIsICJtYXRjaGVzUHJvdmlkZXIiLCAibG9nX18kMiIsICJlcnJfXyQzIiwgImNyZWF0ZUluaXRGbG93UHVibGlzaGVyIiwgImZsb3dOYW1lIiwgImluaXRGbG93IiwgInB1Ymxpc2hlciIsICJzdGFydEFsbEluaXRGbG93cyIsICJmbG93cyIsICJmbG93IiwgImNyZWF0ZUluaXRGbG93c1B1Ymxpc2hlcnMiLCAiZXJyX18kMiIsICJPcHRpb25hbEZuIiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgIkZvcm1DYWxsYmFja3MiLCAiZGV0ZWN0RnJhbWV3b3JrIiwgIndpbmRvdyIsICJuZXh0V2luZG93IiwgIm5vZGUiLCAidnVlV2luZG93IiwgImdldEZyYW1ld29ya1ZlcnNpb24iLCAiZnJhbWV3b3JrIiwgIm5nVmVyc2lvbkVsIiwgImdldEZyYW1ld29ya0luZm8iLCAic2NyZWVuX2hlaWdodCIsICJzY3JlZW5fd2lkdGgiLCAiY29sb3JfZGVwdGgiLCAiamF2YV9lbmFibGVkIiwgInVzZXJfYWdlbnQiLCAiYWNjZXB0X2hlYWRlciIsICJ0aW1lX3pvbmVfb2Zmc2V0IiwgIlN1Ym1pdE1ldGhvZHMiLCAiU3VibWl0TWV0aG9kczIiLCAiUGF5bWVudFByb3ZpZGVyVHlwZSIsICJQYXltZW50UHJvdmlkZXJUeXBlMiIsICJnZXRBcHBsZVBheVByb2Nlc3NvcnMiLCAiaW5pdEZsb3dzIiwgImFwcGxlUGF5SW5pdEZsb3dzIiwgImFwcGxlUGF5SW5pdFJlc3VsdHMiLCAiZmxvd1ZhbHVlIiwgInN0cmlwZVBSRmxvd1Jlc3VsdCIsICJzdGFydEFwcGxlUGF5RmxvdyIsICJnZXRHb29nbGVQYXlQcm9jZXNzb3JzIiwgImdvb2dsZVBheUluaXRGbG93cyIsICJnb29nbGVQYXlJbml0UmVzdWx0cyIsICJzdGFydEdvb2dsZVBheUZsb3ciLCAiaW5pdFJlc3VsdHMiLCAiYXZhaWxhYmxlRmxvdyIsICJnZXRLbGFybmFQcm9jZXNzb3JzIiwgImtsYXJuYUluaXRSZXN1bHRzIiwgImFpcndhbGxleEtsYXJuYUZsb3dSZXN1bHQiLCAic3RyaXBlS2xhcm5hRmxvd1Jlc3VsdCIsICJzdGFydEtsYXJuYUZsb3ciLCAiZ2V0QWZmaXJtUHJvY2Vzc29ycyIsICJhZmZpcm1Jbml0UmVzdWx0cyIsICJzdHJpcGVBZmZpcm1GbG93UmVzdWx0IiwgInN0YXJ0QWZmaXJtRmxvdyIsICJnZXRBZnRlcnBheVByb2Nlc3NvcnMiLCAiYWZ0ZXJwYXlJbml0UmVzdWx0cyIsICJzdHJpcGVBZnRlcnBheUZsb3dSZXN1bHQiLCAic3RhcnRBZnRlcnBheUZsb3ciLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAibG9nX18kMSIsICJlcnJfXyQxIiwgImluaXRUcmFjZXJTYWZlIiwgImluaXRUcmFjZXJVbnNhZmUiLCAiZ2xvYmFsVHJhY2VyIiwgInNka1RyYWNlV2ViIiwgIkNvbnNvbGVTcGFuRXhwb3J0ZXIiLCAiU2ltcGxlU3BhblByb2Nlc3NvciIsICJXZWJUcmFjZXJQcm92aWRlciIsICJpbnN0cnVtZW50YXRpb25GZXRjaCIsICJGZXRjaEluc3RydW1lbnRhdGlvbiIsICJjb250ZXh0Wm9uZSIsICJab25lQ29udGV4dE1hbmFnZXIiLCAiaW5zdHJ1bWVudGF0aW9uIiwgInJlZ2lzdGVySW5zdHJ1bWVudGF0aW9ucyIsICJyZXNvdXJjZXMiLCAiUmVzb3VyY2UiLCAiZGV0ZWN0UmVzb3VyY2VzIiwgImRldGVjdFJlc291cmNlc1N5bmMiLCAiZXhwb3J0ZXJUcmFjZU90bHAiLCAiT1RMUFRyYWNlRXhwb3J0ZXIiLCAicHJvcGFnYXRvckIzIiwgIkIzUHJvcGFnYXRvciIsICJCM0luamVjdEVuY29kaW5nIiwgInNka1RyYWNlQmFzZSIsICJCYXRjaFNwYW5Qcm9jZXNzb3IiLCAiY29sbGVjdG9yVXJsIiwgImdldENvbGxlY3RvclVybCIsICJleHBvcnRlciIsICJiYXNlQXR0cnMiLCAiZnJvbUJhc2VVcmwiLCAiYmFzZUhvc3RuYW1lIiwgIk9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyIiwgImZvcm1JZCIsICJpbnRlcm5hbENhbGxiYWNrcyIsICJnZXRDbGVhbk9yaWdpbiIsICJlbGVtZW50SWQiLCAiZXZlbnRUeXBlIiwgImNyZWF0ZUNvbm5lY3Rpb24iLCAiaXNWYWxpZE9iamVjdCIsICJDb25uZWN0aW9uTWFuYWdlciIsICJzZXR1cFBheW1lbnRSZXF1ZXN0SGFuZGxlcnMiLCAiaW5pdFByRmxvd3MiLCAiY2FsbGJhY2tzIiwgInN0cmlwZVBSIiwgImNhbkFwcGxlUGF5IiwgImNhbkdvb2dsZVBheSIsICJmaW5hbFN0YXR1cyIsICJ1c2VyUGFyYW1zIiwgInJ1blN0cmlwZVByRmxvdyIsICJHRU5FUklDX0NPTk5fRVJSIiwgImxvZ19fIiwgIl9PcGVuUGF5Rm9ybSIsICJjZGVCcmlkZ2VJZnJhbWUiLCAiRWxlbWVudFR5cGVFbnVtIiwgImNkZUxvYWRlZCIsICJjZGVDb25uU3BhbiIsICJhbnlDZGVDb25uIiwgIm9qc0NvbnRleHQiLCAiZWxlbWVudFR5cGUiLCAiX0VsZW1lbnRUeXBlRW51bVpvZCIsICJmcmFtZSIsICJxdWVyeVN0cmluZyIsICJjb25uIiwgImNvbnRleHQyIiwgImFwcGxlUGF5UHJvY2Vzc29ycyIsICJpc0FwcGxlUGF5QXZhaWxhYmxlIiwgImdvb2dsZVBheVByb2Nlc3NvcnMiLCAiaXNHb29nbGVQYXlBdmFpbGFibGUiLCAicGF5cGFsQXZhaWxhYmxlIiwgImtsYXJuYVByb2Nlc3NvcnMiLCAiaXNLbGFybmFBdmFpbGFibGUiLCAiYWZmaXJtUHJvY2Vzc29ycyIsICJpc0FmZmlybUF2YWlsYWJsZSIsICJhZnRlcnBheVByb2Nlc3NvcnMiLCAiaXNBZnRlcnBheUF2YWlsYWJsZSIsICJwb2NreXRQYXlwYWxBdmFpbGFibGUiLCAibWV0aG9kIiwgImxvb3BDcnlwdG9BdmFpbGFibGUiLCAic3RyaXBlTGlua0Zsb3dSZXN1bHQiLCAic3RyaXBlTGlua0F2YWlsYWJsZSIsICJtZXRob2RzIiwgImluaXRGbG93TmFtZU1hcCIsICJmbG93UmVzdWx0IiwgInN0YXJ0RmxvdyIsICJhaXJ3YWxsZXhHb29nbGVQYXkiLCAiYWlyd2FsbGV4QXBwbGVQYXkiLCAiYXV0aG9yaXplTmV0R29vZ2xlUGF5IiwgImF1dGhvcml6ZU5ldEFwcGxlUGF5IiwgImFkeWVuR29vZ2xlUGF5IiwgImFkeWVuQXBwbGVQYXkiLCAibmV3Q2FsbGJhY2tzIiwgIm1ldHJpY3NDb250ZXh0IiwgImNhbGxlciIsICJjdXJyZW50SW5zdGFuY2UiLCAiZGVidWdJbmZvIiwgImNkZUxvYWRlZFBheWxvYWQiLCAiT3BlblBheUZvcm0iXQp9Cg==
|
|
7637
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA5fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzJDEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG52YXIgQ3VzdG9tRXJyb3IgPSBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0oRXJyb3IpO1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMVwiXSA9IFwibGluZTFcIjtcbiAgRmllbGROYW1lMltcIkxJTkUyXCJdID0gXCJsaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiTElORTNcIl0gPSBcImxpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTFcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUyXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTNcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DSVRZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19TVEFURVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzU3RhdGVcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0NPVU5UUllcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX1pJUF9DT0RFXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkdcIl0gPSBcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiSVNfQlVTSU5FU1NfUFVSQ0hBU0VcIl0gPSBcImlzQnVzaW5lc3NQdXJjaGFzZVwiO1xuICBGaWVsZE5hbWUyW1wiQlVTSU5FU1NfTkFNRVwiXSA9IFwiYnVzaW5lc3NOYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJUQVhfSURcIl0gPSBcInRheElkXCI7XG4gIEZpZWxkTmFtZTJbXCJUQVhfSURfVFlQRVwiXSA9IFwidGF4SWRUeXBlXCI7XG4gIHJldHVybiBGaWVsZE5hbWUyO1xufSkoRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IEZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oRmllbGROYW1lKTtcbnZhciBQcml2YXRlRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoUHJpdmF0ZUZpZWxkTmFtZTIpID0+IHtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZE51bWJlclwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkRXhwaXJ5XCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmRDdmNcIjtcbiAgcmV0dXJuIFByaXZhdGVGaWVsZE5hbWUyO1xufSkoUHJpdmF0ZUZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBQcml2YXRlRmllbGROYW1lRW51bSA9IHoubmF0aXZlRW51bShQcml2YXRlRmllbGROYW1lKTtcbmNvbnN0IEFsbEZpZWxkTmFtZXMgPSB6LnVuaW9uKFtGaWVsZE5hbWVFbnVtLCBQcml2YXRlRmllbGROYW1lRW51bV0pO1xudmFyIEVsZW1lbnRUeXBlRW51bSA9IC8qIEBfX1BVUkVfXyAqLyAoKEVsZW1lbnRUeXBlRW51bTIpID0+IHtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRcIl0gPSBcImNhcmRcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkLW51bWJlclwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmQtZXhwaXJ5XCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZC1jdmNcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNERV9CUklER0VcIl0gPSBcImNkZS1icmlkZ2VcIjtcbiAgcmV0dXJuIEVsZW1lbnRUeXBlRW51bTI7XG59KShFbGVtZW50VHlwZUVudW0gfHwge30pO1xuY29uc3QgX0VsZW1lbnRUeXBlRW51bVpvZCA9IHouZW51bShbXCJjYXJkXCIsIFwiY2FyZC1udW1iZXJcIiwgXCJjYXJkLWV4cGlyeVwiLCBcImNhcmQtY3ZjXCIsIFwiY2RlLWJyaWRnZVwiXSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBCYXNlRWxlbWVudHNTdHlsZSA9IHoub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nLFxuICBwbGFjZWhvbGRlclN0eWxlOiB6Lm9iamVjdCh7XG4gICAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZ1xuICB9KS5vcHRpb25hbCgpXG59KTtcbkJhc2VFbGVtZW50c1N0eWxlLmV4dGVuZCh7XG4gIGRpc2FibGVBdXRvRmlsbDogT3B0aW9uYWxTdHJpbmcsXG4gIHBsYWNlaG9sZGVyOiB6Lm9iamVjdCh7XG4gICAgY2FyZE51bWJlcjogT3B0aW9uYWxTdHJpbmcsXG4gICAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgICBjdmM6IE9wdGlvbmFsU3RyaW5nXG4gIH0pLm9wdGlvbmFsKClcbn0pO1xuQmFzZUVsZW1lbnRzU3R5bGUuZXh0ZW5kKHtcbiAgZGlzYWJsZUF1dG9GaWxsOiBPcHRpb25hbFN0cmluZyxcbiAgcGxhY2Vob2xkZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqXG4gICAqIFRoZSBjYXJkIGljb24gYXQgdGhlIHN0YXJ0IG9mIHRoZSBjYXJkIG51bWJlciBpbnB1dCBmaWVsZFxuICAgKiBJdCB3b24ndCBhZmZlY3QgYWZ0ZXIgdGhlIGljb24gY2hhbmdlZCB0byBjYXJkIGJyYW5kIGFmdGVyIHRoZSB1c2VyIGlucHV0IHRoZSBjYXJkIG51bWJlclxuICAgKi9cbiAgaWNvbjogei5vYmplY3Qoe1xuICAgIGNvbG9yOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSkub3B0aW9uYWwoKVxufSk7XG5CYXNlRWxlbWVudHNTdHlsZS5leHRlbmQoe1xuICBkaXNhYmxlQXV0b0ZpbGw6IE9wdGlvbmFsU3RyaW5nLFxuICBwbGFjZWhvbGRlcjogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbkJhc2VFbGVtZW50c1N0eWxlLmV4dGVuZCh7XG4gIGRpc2FibGVBdXRvRmlsbDogT3B0aW9uYWxTdHJpbmcsXG4gIHBsYWNlaG9sZGVyOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0gei5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIG9iZnVzY2F0ZWRWYWx1ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IEVycm9yRXZlbnRUeXBlLFxuICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogQWxsRmllbGROYW1lcyxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgdG90YWxBbW91bnRBdG9tczogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6LmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxufSk7XG5jb25zdCBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6Lm9wdGlvbmFsKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUmVxdWlyZWRGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTFcIiAvKiBMSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMlwiIC8qIExJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUzXCIgLyogTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiaXNTaGlwcGluZ1NhbWVBc0JpbGxpbmdcIiAvKiBJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkcgKi9dOiB6LmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCh0cnVlKSxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiIC8qIFNISVBQSU5HX0xJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCIgLyogU0hJUFBJTkdfTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ2l0eVwiIC8qIFNISVBQSU5HX0NJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiAvKiBTSElQUElOR19TVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIgLyogU0hJUFBJTkdfQ09VTlRSWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIgLyogU0hJUFBJTkdfWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiYnVzaW5lc3NOYW1lXCIgLyogQlVTSU5FU1NfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJ0YXhJZFwiIC8qIFRBWF9JRCAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJ0YXhJZFR5cGVcIiAvKiBUQVhfSURfVFlQRSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHoub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTJcIiAvKiBMSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lM1wiIC8qIExJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIgLyogSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HICovXTogei5jdXN0b20oKS5vcHRpb25hbCgpLmRlZmF1bHQodHJ1ZSksXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCIgLyogU0hJUFBJTkdfTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTJcIiAvKiBTSElQUElOR19MSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiIC8qIFNISVBQSU5HX0xJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImJ1c2luZXNzTmFtZVwiIC8qIEJVU0lORVNTX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1widGF4SWRcIiAvKiBUQVhfSUQgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1widGF4SWRUeXBlXCIgLyogVEFYX0lEX1RZUEUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nLFxuICBwYXltZW50Um91dGVJZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogei5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHouc3RyaW5nKCksXG4gIHBheW1lbnRNZXRob2RJZDogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbmNvbnN0IEVsZW1lbnRFdmVudCA9IHoub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6Lm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBSZXF1aXJlZFN0cmluZ1xufSk7XG56LmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHouc3RyaW5nKCksXG4gIHBheW1lbnRfbWV0aG9kX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPciQxKHouYXJyYXkoei5zdHJpbmcoKSkpXG59KTtcbmNvbnN0IEZpZWxkVmFsaWRhdGlvbkVycm9yID0gei5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogei5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBzdWNjZXNzOiB6LmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6LmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHouYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZFJlc3BvbnNlID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgei5vYmplY3QoeyBzdWNjZXNzOiB6LmxpdGVyYWwodHJ1ZSkgfSksXG4gIFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2Vcbl0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKVxufSk7XG52YXIgVGhyZWVEU1N0YXR1cyA9IC8qIEBfX1BVUkVfXyAqLyAoKFRocmVlRFNTdGF0dXMyKSA9PiB7XG4gIFRocmVlRFNTdGF0dXMyW1wiU1VDQ0VTU1wiXSA9IFwic3VjY2Vzc1wiO1xuICBUaHJlZURTU3RhdHVzMltcIkZBSUxVUkVcIl0gPSBcImZhaWx1cmVcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJDQU5DRUxMRURcIl0gPSBcImNhbmNlbGxlZFwiO1xuICByZXR1cm4gVGhyZWVEU1N0YXR1czI7XG59KShUaHJlZURTU3RhdHVzIHx8IHt9KTtcbmNvbnN0IFBpbmczRFNTdGF0dXNSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnoub2JqZWN0KHtcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuY29uc3QgQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHouc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6LnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6LnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEFXWEJhbmsgPSB6Lm9iamVjdCh7XG4gIGJhbmtfbmFtZTogei5zdHJpbmcoKSxcbiAgZGlzcGxheV9uYW1lOiB6LnN0cmluZygpLFxuICByZXNvdXJjZXM6IHoub2JqZWN0KHtcbiAgICBsb2dvX3VybDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pXG59KTtcbmNvbnN0IENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBhdmFpbGFibGVfYmFua3M6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KEFXWEJhbmspKVxufSk7XG5jb25zdCBDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwodHJ1ZSksIGhyZWY6IHouc3RyaW5nKCkgfSksXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG5jb25zdCBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6LmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogbnVsbE9yVW5kZWZPciQxKHouYXJyYXkoQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhKSksXG4gIHBvc3RfY2hlY2tvdXRfcmVkaXJlY3RfdG86IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKVxufSk7XG5jb25zdCBFRlRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaW5zdGl0dXRpb25OdW1iZXI6IHouc3RyaW5nKCksXG4gIHRyYW5zaXROdW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnROdW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6LmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xuei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IEVGVEZvcm1EYXRhLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQkFDU0Zvcm1EYXRhID0gei5vYmplY3Qoe1xuICBzb3J0Q29kZTogei5zdHJpbmcoKSxcbiAgYWNjb3VudE51bWJlcjogei5zdHJpbmcoKSxcbiAgYWNjb3VudFR5cGU6IHouZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogQkFDU0Zvcm1EYXRhLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgU0VQQUZvcm1EYXRhID0gei5vYmplY3Qoe1xuICBpYmFuOiB6LnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogei5lbnVtKFtcInBlcnNvbmFsXCIsIFwiYnVzaW5lc3NcIl0pXG59KTtcbnoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBTRVBBRm9ybURhdGEub3B0aW9uYWwoKVxufSk7XG5jb25zdCBBQ0hNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgYWNjb3VudF9udW1iZXI6IHouc3RyaW5nKCksXG4gIGFiYV9yb3V0aW5nX251bWJlcjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBFRlRNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaW5zdGl0dXRpb25fbnVtYmVyOiB6LnN0cmluZygpLFxuICB0cmFuc2l0X251bWJlcjogei5zdHJpbmcoKSxcbiAgYWNjb3VudF9udW1iZXI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQkFDU01pY3JvRGVwb3NpdEZvcm1EYXRhID0gei5vYmplY3Qoe1xuICBhY2NvdW50X251bWJlcjogei5zdHJpbmcoKSxcbiAgc29ydF9jb2RlOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFNFUEFNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaWJhbjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBNaWNyb0RlcG9zaXRTdGF0dXNSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiB6LnVuaW9uKFtcbiAgICBBQ0hNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICBFRlRNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICBCQUNTTWljcm9EZXBvc2l0Rm9ybURhdGEsXG4gICAgU0VQQU1pY3JvRGVwb3NpdEZvcm1EYXRhLFxuICAgIHoub2JqZWN0KHsgZXJyb3I6IHouc3RyaW5nKCkgfSlcbiAgXSkub3B0aW9uYWwoKVxufSk7XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IENERVJlc3BvbnNlRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56LmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogei5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0gei5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKTtcbmNvbnN0IEJyYW5kID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBxdWFudGl0eTogei5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6LmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6LmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZXM6IHouYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjcmVhdGVkOiB6LmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogei5hcnJheShJbnZvaWNlTWluaW1hbCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPcih6LmFycmF5KHouc3RyaW5nKCkpKSxcbiAgcGF5bWVudF9tZXRob2RfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHouYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc2V0dGluZ3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpLFxuICByZXR1cm5fdXJsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBzdWNjZXNzX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHoubnVsbGFibGUoei51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6LnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSk7XG5jb25zdCBFeHBpcmVkRm9ybVByZWZpbGwgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56LnVuaW9uKFtQYXltZW50Rm9ybVByZWZpbGwsIENvbXBsZXRlZEZvcm1QcmVmaWxsLCBFeHBpcmVkRm9ybVByZWZpbGxdKTtcbnoub2JqZWN0KHtcbiAgbG9nbzogei5zdHJpbmcoKSxcbiAgaWNvbjogei5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogei5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBDb21wbGV0ZUFkZHJlc3MgPSB6Lm9iamVjdCh7XG4gIGxpbmUxOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUzOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNpdHk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgc3RhdGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY291bnRyeTogei5zdHJpbmcoKSxcbiAgemlwX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogei5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcyxcbiAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLm9wdGlvbmFsKCksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogei5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuei5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0gei5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9idXNpbmVzc19uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX3RheF9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl90YXhfaWRfdHlwZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLFxuICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUHJpY2VRdHkgPSB6Lm9iamVjdCh7XG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBDYXJ0SW5mbyA9IHoub2JqZWN0KHtcbiAgbGluZV9pdGVtczogei5hcnJheShQcmljZVF0eSksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChOZXdDdXN0b21lckZpZWxkcy5zaGFwZSkuZXh0ZW5kKFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEuc2hhcGUpO1xuY29uc3QgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxuICB1c2VfdW5pZmllZF9jY19mbG93OiBudWxsT3JVbmRlZk9yKHouYm9vbGVhbigpKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBDYXJ0SW5mby5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKSxcbiAgY2NfcG1faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoucmVjb3JkKHouYW55KCkpO1xuei5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUxOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTM6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNpdHk6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHN0YXRlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjb3VudHJ5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB6aXBfY29kZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYnVzaW5lc3NfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgdGF4X2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0YXhfaWRfdHlwZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogbnVsbE9yVW5kZWZPcih6LmJvb2xlYW4oKSlcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIG1lc3NhZ2U6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHoucmVjb3JkKHouYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIG5leHRfYWN0aW9uX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIGV2ZW50czogei5hcnJheShcbiAgICB6Lm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6LnN0cmluZygpLFxuICAgICAgZGV2aWNlX3Rva2VuOiB6LnN0cmluZygpLFxuICAgICAgcHJvcGVydGllczogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgICAgIGNvbnRleHRfcHJvcGVydGllczogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xuei5hbnkoKS5vcHRpb25hbCgpO1xuei5vYmplY3Qoe1xuICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKClcbn0pO1xuY29uc3QgU2V0VXNlckRldmljZVRva2VuUmVzcG9uc2UgPSB6Lm9iamVjdCh7fSk7XG5jb25zdCBVc2VyQWN0aW9uRkVQYXlsb2FkID0gei5vYmplY3Qoe1xuICBfdW5pZmllZF9jY19hY3Rpb25fbmFtZTogei5zdHJpbmcoKSxcbiAgX3VuaWZpZWRfY2NfcGNjc19pZDogei5zdHJpbmcoKVxufSkuY2F0Y2hhbGwoei5hbnkoKSk7XG5cbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yUmVzcG9uc2UgPSB6LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbmNvbnN0IFpvZEZpZWxkRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGNvZGU6IHouc3RyaW5nKCksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIHBhdGg6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgWm9kRmllbGRFcnJvcnMgPSB6LmFycmF5KFpvZEZpZWxkRXJyb3IpO1xuY29uc3QgTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRSA9IHtcbiAgXCJmYWlsZWQgdG8gZmV0Y2hcIjogYENvbm5lY3Rpb24gZXJyb3I6IHBsZWFzZSBkb3VibGUgY2hlY2sgaWYgeW91IGFyZSBjb25uZWN0ZWQgdG8gdGhlIGludGVybmV0LCB0aGVuIHRyeSBhZ2FpbmBcbn07XG5jb25zdCBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZSA9IChvZ0Vycm9yTWVzc2FnZSkgPT4ge1xuICBjb25zdCBrZXkgPSBvZ0Vycm9yTWVzc2FnZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIE1BUF9UT19IVU1BTl9GUklFTkRMWV9MT1dFUkNBU0Vba2V5XSA/PyBvZ0Vycm9yTWVzc2FnZTtcbn07XG5jb25zdCBpc1N0cmluZ2lmaWVkSnNvbk9iamVjdCA9IChzdHIpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHN0cik7XG4gICAgcmV0dXJuIHR5cGVvZiBwYXJzZWQgPT09IFwib2JqZWN0XCI7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5jb25zdCBjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZ2V0SHVtYW5GcmllbmRseU1lc3NhZ2UocmVzcG9uc2VbMF0ubXNnKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBidWxsZXRlZCA9IHJlc3BvbnNlLm1hcCgoZXJyKSA9PiBg4oCiICR7Z2V0SHVtYW5GcmllbmRseU1lc3NhZ2UoZXJyLm1zZyl9YCkuam9pbihcIlxcblwiKTtcbiAgICByZXR1cm4gYCR7YFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6YH1cbiR7YnVsbGV0ZWR9YDtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMgPSAoZXJyb3JzKSA9PiB7XG4gIGNvbnN0IGxpc3RPZkVycm9ycyA9IGVycm9ycy5tYXAoKGVycikgPT4gYC0gJHtlcnIucGF0aC5qb2luKFwiL1wiKX06ICR7ZXJyLm1lc3NhZ2V9YCkuam9pbihcIlxcblwiKTtcbiAgcmV0dXJuIGBFbmNvdW50ZXJlZCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7bGlzdE9mRXJyb3JzfWA7XG59O1xuY29uc3QgZ2V0RXJyb3JNZXNzYWdlID0gKGUpID0+IHtcbiAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIGlmIChpc1N0cmluZ2lmaWVkSnNvbk9iamVjdChlLm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCBvYmogPSBKU09OLnBhcnNlKGUubWVzc2FnZSk7XG4gICAgICBpZiAoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZS5zYWZlUGFyc2Uob2JqKS5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yKG9iaik7XG4gICAgICB9IGVsc2UgaWYgKFpvZEZpZWxkRXJyb3JzLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMob2JqKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7ZS5tZXNzYWdlfWApO1xuICAgICAgICByZXR1cm4gZS5tZXNzYWdlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ2V0SHVtYW5GcmllbmRseU1lc3NhZ2UoZS5tZXNzYWdlKTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShlKTtcbiAgICB9IGNhdGNoIChlMikge1xuICAgICAgcmV0dXJuIGUyICsgXCJcIjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGUgKyBcIlwiO1xuICB9XG59O1xuY29uc3QgbWFrZUNhbGxiYWNrU2FmZSA9IChjYWxsYmFja05hbWUsIGZuLCBlcnJvckxvZ2dlcikgPT4ge1xuICByZXR1cm4gKCguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JMb2dnZXIoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke2NhbGxiYWNrTmFtZX0pOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICB9KTtcbn07XG5cbmNvbnN0IHN1bSA9IChhcnIpID0+IHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbn07XG5cbmNvbnN0IGJlZm9yZVVubG9hZEhhbmRsZXIgPSAoZXZlbnQpID0+IHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQucmV0dXJuVmFsdWUgPSB0cnVlO1xufTtcbmNvbnN0IHByZXZlbnROYXZpZ2F0aW9uID0gKCkgPT4ge1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBiZWZvcmVVbmxvYWRIYW5kbGVyKTtcbn07XG5jb25zdCBzdG9wUHJldmVudE5hdmlnYXRpb24gPSAoKSA9PiB7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGJlZm9yZVVubG9hZEhhbmRsZXIpO1xufTtcblxuY29uc3QgYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMgPSAoc2ltcGxlT2pzRmxvdykgPT4ge1xuICBsZXQgaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gIHJldHVybiBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgaWYgKGlzU3VibWl0dGluZykge1xuICAgICAgY29uc29sZS53YXJuKFwiU2tpcHBpbmcgc3VibWlzc2lvbiBiZWNhdXNlIGl0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlzU3VibWl0dGluZyA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChwYXJhbXMuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24pIHtcbiAgICAgICAgcHJldmVudE5hdmlnYXRpb24oKTtcbiAgICAgIH1cbiAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3RhcnRlZD8uKCk7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X3N0YXJ0ZWRcIiwge1xuICAgICAgICBjcG06IHBhcmFtcy5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZmxvd1Jlc3VsdCA9IGF3YWl0IHNpbXBsZU9qc0Zsb3cocGFyYW1zKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfc3VjY2Vzc1wiLCB7XG4gICAgICAgIGNwbTogcGFyYW1zLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4uZmxvd1Jlc3VsdFxuICAgICAgfSk7XG4gICAgICBmb3JjZVByb2Nlc3NNZXRyaWNzUXVldWUoKTtcbiAgICAgIGlmIChmbG93UmVzdWx0Lm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGZsb3dSZXN1bHQucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICAgIH0gZWxzZSBpZiAoZmxvd1Jlc3VsdC5tb2RlID09PSBcImNoZWNrb3V0XCIpIHtcbiAgICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LmN1c3RvbWVyX2lkLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LnByb2Nlc3NvcnNfdXNlZCA/PyBbXSxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCA/PyBcIlwiXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBtb2RlOiAke2Zsb3dSZXN1bHR9YCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGF3YWl0IHNhZmVseUdldFN0YW5kYXJkaXplZEVycm9yQ29kZShwYXJhbXMuY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnJvck1lc3NhZ2UsIGVycm9yQ29kZSk7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHsgY3BtOiBwYXJhbXMuY2hlY2tvdXRQYXltZW50TWV0aG9kLCBlcnJvck1lc3NhZ2UsIGVycm9yQ29kZSwgZXJyb3IgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgaWYgKHBhcmFtcy5jb250ZXh0LnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbikge1xuICAgICAgICBzdG9wUHJldmVudE5hdmlnYXRpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuY29uc3QgYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCA9IChpbml0KSA9PiB7XG4gIHJldHVybiBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBpbml0KHBhcmFtcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHsgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiaW5pdC1lcnJvci1jYXRjaGVyXCIpO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGF3YWl0IHNhZmVseUdldFN0YW5kYXJkaXplZEVycm9yQ29kZShwYXJhbXMuY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgZXJyX18oZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UsIGVycm9yKTtcbiAgICAgIHRyYWNrKFwiaW5pdF9mbG93X2Vycm9yXCIsIHsgZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUsIGVycm9yIH0pO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCByZWFzb246IGVycm9yTWVzc2FnZSwgZXJyb3JDb2RlLCBpc0xvYWRpbmc6IGZhbHNlIH07XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZnVuY3Rpb24gX19yZWFkJDQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuZnVuY3Rpb24gX19zcHJlYWRBcnJheSQ0KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cblxuZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JDbGFzcyhjcmVhdGVJbXBsKSB7XG4gICAgdmFyIF9zdXBlciA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICBFcnJvci5jYWxsKGluc3RhbmNlKTtcbiAgICAgICAgaW5zdGFuY2Uuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgICB9O1xuICAgIHZhciBjdG9yRnVuYyA9IGNyZWF0ZUltcGwoX3N1cGVyKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvckZ1bmM7XG4gICAgcmV0dXJuIGN0b3JGdW5jO1xufVxuXG52YXIgVW5zdWJzY3JpcHRpb25FcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBVbnN1YnNjcmlwdGlvbkVycm9ySW1wbChlcnJvcnMpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBlcnJvcnNcbiAgICAgICAgICAgID8gZXJyb3JzLmxlbmd0aCArIFwiIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XFxuXCIgKyBlcnJvcnMubWFwKGZ1bmN0aW9uIChlcnIsIGkpIHsgcmV0dXJuIGkgKyAxICsgXCIpIFwiICsgZXJyLnRvU3RyaW5nKCk7IH0pLmpvaW4oJ1xcbiAgJylcbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdVbnN1YnNjcmlwdGlvbkVycm9yJztcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgfTtcbn0pO1xuXG5mdW5jdGlvbiBhcnJSZW1vdmUoYXJyLCBpdGVtKSB7XG4gICAgaWYgKGFycikge1xuICAgICAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgMCA8PSBpbmRleCAmJiBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpcHRpb24gPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbihpbml0aWFsVGVhcmRvd24pIHtcbiAgICAgICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSBpbml0aWFsVGVhcmRvd247XG4gICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgIH1cbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZV8xLCBfYSwgZV8yLCBfYjtcbiAgICAgICAgdmFyIGVycm9ycztcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgICAgICBpZiAoX3BhcmVudGFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9wYXJlbnRhZ2VfMSA9IF9fdmFsdWVzKF9wYXJlbnRhZ2UpLCBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCk7ICFfcGFyZW50YWdlXzFfMS5kb25lOyBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50XzEgPSBfcGFyZW50YWdlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRfMS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcGFyZW50YWdlXzFfMSAmJiAhX3BhcmVudGFnZV8xXzEuZG9uZSAmJiAoX2EgPSBfcGFyZW50YWdlXzEucmV0dXJuKSkgX2EuY2FsbChfcGFyZW50YWdlXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfcGFyZW50YWdlLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaW5pdGlhbEZpbmFsaXplciA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oaW5pdGlhbEZpbmFsaXplcikpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsRmluYWxpemVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGUgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yID8gZS5lcnJvcnMgOiBbZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgICAgIGlmIChfZmluYWxpemVycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9maW5hbGl6ZXJzXzEgPSBfX3ZhbHVlcyhfZmluYWxpemVycyksIF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpOyAhX2ZpbmFsaXplcnNfMV8xLmRvbmU7IF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmluYWxpemVyID0gX2ZpbmFsaXplcnNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKGZpbmFsaXplcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICE9PSBudWxsICYmIGVycm9ycyAhPT0gdm9pZCAwID8gZXJyb3JzIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gX19zcHJlYWRBcnJheSQ0KF9fc3ByZWFkQXJyYXkkNChbXSwgX19yZWFkJDQoZXJyb3JzKSksIF9fcmVhZCQ0KGVyci5lcnJvcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnNfMV8xICYmICFfZmluYWxpemVyc18xXzEuZG9uZSAmJiAoX2IgPSBfZmluYWxpemVyc18xLnJldHVybikpIF9iLmNhbGwoX2ZpbmFsaXplcnNfMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdWJzY3JpcHRpb25FcnJvcihlcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0ZWFyZG93biAmJiB0ZWFyZG93biAhPT0gdGhpcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duLmNsb3NlZCB8fCB0ZWFyZG93bi5faGFzUGFyZW50KHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVhcmRvd24uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoX2EgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSkucHVzaCh0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHJldHVybiBfcGFyZW50YWdlID09PSBwYXJlbnQgfHwgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgJiYgX3BhcmVudGFnZS5pbmNsdWRlcyhwYXJlbnQpKTtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgPyAoX3BhcmVudGFnZS5wdXNoKHBhcmVudCksIF9wYXJlbnRhZ2UpIDogX3BhcmVudGFnZSA/IFtfcGFyZW50YWdlLCBwYXJlbnRdIDogcGFyZW50O1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgaWYgKF9wYXJlbnRhZ2UgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICBhcnJSZW1vdmUoX3BhcmVudGFnZSwgcGFyZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgX2ZpbmFsaXplcnMgJiYgYXJyUmVtb3ZlKF9maW5hbGl6ZXJzLCB0ZWFyZG93bik7XG4gICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGVhcmRvd24uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLkVNUFRZID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVtcHR5ID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICBlbXB0eS5jbG9zZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZW1wdHk7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uO1xufSgpKTtcbnZhciBFTVBUWV9TVUJTQ1JJUFRJT04gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5mdW5jdGlvbiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24gfHxcbiAgICAgICAgKHZhbHVlICYmICdjbG9zZWQnIGluIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUucmVtb3ZlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmFkZCkgJiYgaXNGdW5jdGlvbih2YWx1ZS51bnN1YnNjcmliZSkpKTtcbn1cbmZ1bmN0aW9uIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZmluYWxpemVyKSkge1xuICAgICAgICBmaW5hbGl6ZXIoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZpbmFsaXplci51bnN1YnNjcmliZSgpO1xuICAgIH1cbn1cblxudmFyIGNvbmZpZyA9IHtcbiAgICBQcm9taXNlOiB1bmRlZmluZWR9O1xuXG52YXIgdGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheSQ0KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkJDQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICByZXR1cm4gKGNsZWFyVGltZW91dCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG5mdW5jdGlvbiByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnIpIHtcbiAgICB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub29wKCkgeyB9XG5cbmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikge1xuICAgIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJzY3JpYmVyLmNyZWF0ZSA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmliZXI7XG59KFN1YnNjcmlwdGlvbikpO1xudmFyIENvbnN1bWVyT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcGFydGlhbE9ic2VydmVyO1xuICAgIH1cbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5lcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb25zdW1lck9ic2VydmVyO1xufSgpKTtcbnZhciBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHtcbiAgICB7XG4gICAgICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycikge1xuICAgIHRocm93IGVycjtcbn1cbnZhciBFTVBUWV9PQlNFUlZFUiA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogbm9vcCxcbiAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICBjb21wbGV0ZTogbm9vcCxcbn07XG5cbnZhciBvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlKSB8fCAnQEBvYnNlcnZhYmxlJzsgfSkoKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICAgIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBwaXBlRnJvbUFycmF5KGZucykge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eTtcbiAgICB9XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZuc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBmbikgeyByZXR1cm4gZm4ocHJldik7IH0sIGlucHV0KTtcbiAgICB9O1xufVxuXG52YXIgT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmUpIHtcbiAgICAgICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIG9ic2VydmFibGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IGlzU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCkgPyBvYnNlcnZlck9yTmV4dCA6IG5ldyBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvcGVyYXRpb25zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5mdW5jdGlvbiBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gcHJvbWlzZUN0b3IgIT09IG51bGwgJiYgcHJvbWlzZUN0b3IgIT09IHZvaWQgMCA/IHByb21pc2VDdG9yIDogY29uZmlnLlByb21pc2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBpc09ic2VydmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUubmV4dCkgJiYgaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbih2YWx1ZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBpc1N1YnNjcmliZXIodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaWJlcikgfHwgKGlzT2JzZXJ2ZXIodmFsdWUpICYmIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIGhhc0xpZnQoc291cmNlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlLmxpZnQpO1xufVxuZnVuY3Rpb24gb3BlcmF0ZShpbml0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KGZ1bmN0aW9uIChsaWZ0ZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdChsaWZ0ZWRTb3VyY2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZScpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7XG59XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7XG4gICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gb25OZXh0XG4gICAgICAgICAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7XG4gICAgICAgIF90aGlzLl9lcnJvciA9IG9uRXJyb3JcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3BlcmF0b3JTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICAgICAgICB2YXIgY2xvc2VkXzEgPSB0aGlzLmNsb3NlZDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICFjbG9zZWRfMSAmJiAoKF9hID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcblxudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnb2JqZWN0IHVuc3Vic2NyaWJlZCc7XG4gICAgfTtcbn0pO1xuXG52YXIgU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ViamVjdCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFub255bW91c1N1YmplY3QodGhpcywgdGhpcyk7XG4gICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oX3RoaXMub2JzZXJ2ZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gX2MudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJqZWN0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYS5vYnNlcnZlcnM7XG4gICAgICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgb2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgU3ViamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3ViamVjdDtcbn0oT2JzZXJ2YWJsZSkpO1xudmFyIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHZhbHVlKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnIpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgIH07XG4gICAgcmV0dXJuIEFub255bW91c1N1YmplY3Q7XG59KFN1YmplY3QpKTtcblxudmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAgICBub3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChEYXRlKS5ub3coKTtcbiAgICB9fTtcblxudmFyIEFjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBBY3Rpb247XG59KFN1YnNjcmlwdGlvbikpO1xuXG52YXIgaW50ZXJ2YWxQcm92aWRlciA9IHtcbiAgICBzZXRJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheSQ0KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkJDQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgcmV0dXJuIChjbGVhckludGVydmFsKShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbnZhciBBc3luY0FjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgX3RoaXMud29yayA9IHdvcms7XG4gICAgICAgIF90aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB2YXIgaWQgPSB0aGlzLmlkO1xuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWxheSA9IGRlbGF5O1xuICAgICAgICB0aGlzLmlkID0gKF9hID0gdGhpcy5pZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXIsIHRoaXMuaWQsIGRlbGF5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBfaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gaW50ZXJ2YWxQcm92aWRlci5zZXRJbnRlcnZhbChzY2hlZHVsZXIuZmx1c2guYmluZChzY2hlZHVsZXIsIHRoaXMpLCBkZWxheSk7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoX3NjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAoZGVsYXkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBkZWxheSAmJiB0aGlzLnBlbmRpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGludGVydmFsUHJvdmlkZXIuY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ2V4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yID0gdGhpcy5fZXhlY3V0ZShzdGF0ZSwgZGVsYXkpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnBlbmRpbmcgPT09IGZhbHNlICYmIHRoaXMuaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIF9kZWxheSkge1xuICAgICAgICB2YXIgZXJyb3JlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3JWYWx1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMud29yayhzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgZXJyb3JWYWx1ZSA9IGUgPyBlIDogbmV3IEVycm9yKCdTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yZWQpIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvclZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGlkID0gX2EuaWQsIHNjaGVkdWxlciA9IF9hLnNjaGVkdWxlcjtcbiAgICAgICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7XG4gICAgICAgICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBhcnJSZW1vdmUoYWN0aW9ucywgdGhpcyk7XG4gICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZWxheSA9IG51bGw7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY0FjdGlvbjtcbn0oQWN0aW9uKSk7XG5cbnZhciBTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNjaGVkdWxlcihzY2hlZHVsZXJBY3Rpb25DdG9yLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gc2NoZWR1bGVyQWN0aW9uQ3RvcjtcbiAgICAgICAgdGhpcy5ub3cgPSBub3c7XG4gICAgfVxuICAgIFNjaGVkdWxlci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAod29yaywgZGVsYXksIHN0YXRlKSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCB3b3JrKS5zY2hlZHVsZShzdGF0ZSwgZGVsYXkpO1xuICAgIH07XG4gICAgU2NoZWR1bGVyLm5vdyA9IGRhdGVUaW1lc3RhbXBQcm92aWRlci5ub3c7XG4gICAgcmV0dXJuIFNjaGVkdWxlcjtcbn0oKSk7XG5cbnZhciBBc3luY1NjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jU2NoZWR1bGVyKFNjaGVkdWxlckFjdGlvbiwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIFNjaGVkdWxlckFjdGlvbiwgbm93KSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5hY3Rpb25zID0gW107XG4gICAgICAgIF90aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY1NjaGVkdWxlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jU2NoZWR1bGVyO1xufShTY2hlZHVsZXIpKTtcblxudmFyIGFzeW5jU2NoZWR1bGVyID0gbmV3IEFzeW5jU2NoZWR1bGVyKEFzeW5jQWN0aW9uKTtcblxudmFyIGlzQXJyYXlMaWtlID0gKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ICYmIHR5cGVvZiB4Lmxlbmd0aCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHggIT09ICdmdW5jdGlvbic7IH0pO1xuXG5mdW5jdGlvbiBpc1Byb21pc2UodmFsdWUpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmFsdWUudGhlbik7XG59XG5cbmZ1bmN0aW9uIGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dFtvYnNlcnZhYmxlXSk7XG59XG5cbmZ1bmN0aW9uIGlzQXN5bmNJdGVyYWJsZShvYmopIHtcbiAgICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArIChpbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnID8gJ2FuIGludmFsaWQgb2JqZWN0JyA6IFwiJ1wiICsgaW5wdXQgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cblxuZnVuY3Rpb24gZ2V0U3ltYm9sSXRlcmF0b3IoKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgIVN5bWJvbC5pdGVyYXRvcikge1xuICAgICAgICByZXR1cm4gJ0BAaXRlcmF0b3InO1xuICAgIH1cbiAgICByZXR1cm4gU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIGl0ZXJhdG9yID0gZ2V0U3ltYm9sSXRlcmF0b3IoKTtcblxuZnVuY3Rpb24gaXNJdGVyYWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnB1dFtpdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yXzEoKSB7XG4gICAgICAgIHZhciByZWFkZXIsIF9hLCB2YWx1ZSwgZG9uZTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDI7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQocmVhZGVyLnJlYWQoKSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgX2EgPSBfYi5zZW50KCksIHZhbHVlID0gX2EudmFsdWUsIGRvbmUgPSBfYS5kb25lO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRvbmUpIHJldHVybiBbMywgNV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdCh2b2lkIDApXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMiwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbNCwgX19hd2FpdCh2YWx1ZSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNjogcmV0dXJuIFs0LCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDJdO1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVsZWFzZUxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlKG9iaikge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9iai5nZXRSZWFkZXIpO1xufVxuXG5mdW5jdGlvbiBpbm5lckZyb20oaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUludGVyb3BPYnNlcnZhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFycmF5TGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUHJvbWlzZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUl0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNSZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpO1xufVxuZnVuY3Rpb24gZnJvbUludGVyb3BPYnNlcnZhYmxlKG9iaikge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb2JzID0gb2JqW29ic2VydmFibGVdKCk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9icy5zdWJzY3JpYmUpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZScpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZShhcnJheSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aCAmJiAhc3Vic2NyaWJlci5jbG9zZWQ7IGkrKykge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGFycmF5W2ldKTtcbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tUHJvbWlzZShwcm9taXNlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb21pc2VcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pXG4gICAgICAgICAgICAudGhlbihudWxsLCByZXBvcnRVbmhhbmRsZWRFcnJvcik7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tSXRlcmFibGUoaXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpdGVyYWJsZV8xID0gX192YWx1ZXMoaXRlcmFibGUpLCBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKTsgIWl0ZXJhYmxlXzFfMS5kb25lOyBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGVfMV8xICYmICFpdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBpdGVyYWJsZV8xLnJldHVybikpIF9hLmNhbGwoaXRlcmFibGVfMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUFzeW5jSXRlcmFibGUoYXN5bmNJdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pKTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikge1xuICAgIHZhciBhc3luY0l0ZXJhYmxlXzEsIGFzeW5jSXRlcmFibGVfMV8xO1xuICAgIHZhciBlXzIsIF9hO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZhbHVlLCBlXzJfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pO1xuICAgICAgICAgICAgICAgICAgICBhc3luY0l0ZXJhYmxlXzEgPSBfX2FzeW5jVmFsdWVzKGFzeW5jSXRlcmFibGUpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzQsIGFzeW5jSXRlcmFibGVfMS5uZXh0KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgPSBfYi5zZW50KCksICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lKSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhc3luY0l0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMztcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMywgMV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIGVfMl8xID0gX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBlXzIgPSB7IGVycm9yOiBlXzJfMSB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSAmJiAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBhc3luY0l0ZXJhYmxlXzEucmV0dXJuKSkpIHJldHVybiBbMywgOF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX2EuY2FsbChhc3luY0l0ZXJhYmxlXzEpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSA4O1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBleGVjdXRlU2NoZWR1bGUocGFyZW50U3Vic2NyaXB0aW9uLCBzY2hlZHVsZXIsIHdvcmssIGRlbGF5LCByZXBlYXQpIHtcbiAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICBpZiAocmVwZWF0ID09PSB2b2lkIDApIHsgcmVwZWF0ID0gZmFsc2U7IH1cbiAgICB2YXIgc2NoZWR1bGVTdWJzY3JpcHRpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICB3b3JrKCk7XG4gICAgICAgIGlmIChyZXBlYXQpIHtcbiAgICAgICAgICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBkZWxheSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfSwgZGVsYXkpO1xuICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQoc2NoZWR1bGVTdWJzY3JpcHRpb24pO1xuICAgIGlmICghcmVwZWF0KSB7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZVN1YnNjcmlwdGlvbjtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRocm93RXJyb3IoZXJyb3JPckVycm9yRmFjdG9yeSwgc2NoZWR1bGVyKSB7XG4gICAgdmFyIGVycm9yRmFjdG9yeSA9IGlzRnVuY3Rpb24oZXJyb3JPckVycm9yRmFjdG9yeSkgPyBlcnJvck9yRXJyb3JGYWN0b3J5IDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXJyb3JPckVycm9yRmFjdG9yeTsgfTtcbiAgICB2YXIgaW5pdCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycm9yRmFjdG9yeSgpKTsgfTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoaW5pdCk7XG59XG5cbnZhciBFbXB0eUVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIEVtcHR5RXJyb3JJbXBsKCkge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdFbXB0eUVycm9yJztcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ25vIGVsZW1lbnRzIGluIHNlcXVlbmNlJztcbiAgICB9O1xufSk7XG5cbmZ1bmN0aW9uIGxhc3RWYWx1ZUZyb20oc291cmNlLCBjb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgX2hhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHZhciBfdmFsdWU7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgX2hhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoX2hhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoX3ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRW1wdHlFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZERhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZSk7XG59XG5cbnZhciBUaW1lb3V0RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVGltZW91dEVycm9ySW1wbChpbmZvKSB7XG4gICAgICAgIGlmIChpbmZvID09PSB2b2lkIDApIHsgaW5mbyA9IG51bGw7IH1cbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnVGltZW91dCBoYXMgb2NjdXJyZWQnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJztcbiAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICB9O1xufSk7XG5mdW5jdGlvbiB0aW1lb3V0KGNvbmZpZywgc2NoZWR1bGVyQXJnKSB7XG4gICAgdmFyIF9hID0gKGlzVmFsaWREYXRlKGNvbmZpZykgPyB7IGZpcnN0OiBjb25maWcgfSA6IHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInID8geyBlYWNoOiBjb25maWcgfSA6IGNvbmZpZyksIGZpcnN0ID0gX2EuZmlyc3QsIGVhY2ggPSBfYS5lYWNoLCBfYiA9IF9hLndpdGgsIF93aXRoID0gX2IgPT09IHZvaWQgMCA/IHRpbWVvdXRFcnJvckZhY3RvcnkgOiBfYiwgX2MgPSBfYS5zY2hlZHVsZXIsIHNjaGVkdWxlciA9IF9jID09PSB2b2lkIDAgPyBhc3luY1NjaGVkdWxlciA6IF9jLCBfZCA9IF9hLm1ldGEsIG1ldGEgPSBfZCA9PT0gdm9pZCAwID8gbnVsbCA6IF9kO1xuICAgIGlmIChmaXJzdCA9PSBudWxsICYmIGVhY2ggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyB0aW1lb3V0IHByb3ZpZGVkLicpO1xuICAgIH1cbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIHRpbWVyU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIHNlZW4gPSAwO1xuICAgICAgICB2YXIgc3RhcnRUaW1lciA9IGZ1bmN0aW9uIChkZWxheSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJGcm9tKF93aXRoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IG1ldGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IGxhc3RWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZW46IHNlZW4sXG4gICAgICAgICAgICAgICAgICAgIH0pKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgfTtcbiAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgc2VlbisrO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KChsYXN0VmFsdWUgPSB2YWx1ZSkpO1xuICAgICAgICAgICAgZWFjaCA+IDAgJiYgc3RhcnRUaW1lcihlYWNoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghKHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QgIT0gbnVsbCA/ICh0eXBlb2YgZmlyc3QgPT09ICdudW1iZXInID8gZmlyc3QgOiArZmlyc3QgLSBzY2hlZHVsZXIubm93KCkpIDogZWFjaCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0aW1lb3V0RXJyb3JGYWN0b3J5KGluZm8pIHtcbiAgICB0aHJvdyBuZXcgVGltZW91dEVycm9yKGluZm8pO1xufVxuXG5jbGFzcyBMb2FkZWRPbmNlUHVibGlzaGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAodmFsdWUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6IHRydWUsIGxvYWRlZFZhbHVlOiB2YWx1ZSB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9O1xuICAgIHRoaXMudGhyb3cgPSAoZXJyb3IsIGVyck1zZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6IGZhbHNlLCBlcnJvciwgZXJyTXNnIH07XG4gICAgICB0aGlzLl9zdWJqZWN0LmVycm9yKGVycm9yKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAodmFsdWVJZk5vdExvYWRlZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWVJZk5vdExvYWRlZDtcbiAgICB9O1xuICAgIHRoaXMuc3Vic2NyaWJlID0gKGZuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy53YWl0Rm9yTG9hZCA9ICh0aW1lb3V0Q29uZmlnKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIpIGFzc2VydE5ldmVyKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgdGltZW91dFBhcmFtcyA9IHtcbiAgICAgICAgZmlyc3Q6IHRpbWVvdXRDb25maWcudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IodGltZW91dENvbmZpZy50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLl9zdWJqZWN0LnBpcGUodGltZW91dCh0aW1lb3V0UGFyYW1zKSkpO1xuICAgIH07XG4gICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiBmYWxzZSB9O1xuICAgIHRoaXMuX3N1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5cbmNvbnN0IE9qc0Vudmlyb25tZW50ID0gei5lbnVtKFtcImRldlwiLCBcInN0Z1wiLCBcInByb2RcIl0pO1xuY29uc3QgY29ubnRvQmFzZVVybHMgPSB7XG4gIHByb2Q6IFwiaHR0cHM6Ly9jb25udG8uZ2V0b3BlbnBheS5jb21cIixcbiAgc3RnOiBcImh0dHBzOi8vY29ubnRvLm9wZW5wYXlzdGFnaW5nLmNvbVwiLFxuICBkZXY6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDAwXCJcbn07XG5jb25zdCBnZXRDb25udG9VcmwgPSAoZW52KSA9PiB7XG4gIHJldHVybiBjb25udG9CYXNlVXJsc1tlbnZdO1xufTtcbmNvbnN0IGVudkNhY2hlID0ge307XG5jb25zdCBnZXRDdXJyZW50RW52ID0gYXN5bmMgKGJhc2VVcmwpID0+IHtcbiAgaWYgKGVudkNhY2hlW2Jhc2VVcmxdKSB7XG4gICAgcmV0dXJuIGVudkNhY2hlW2Jhc2VVcmxdO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChuZXcgVVJMKFwiL2hlYWx0aC9lbnZpcm9ubWVudFwiLCBiYXNlVXJsKSkudGhlbigocmVzKSA9PiByZXMuanNvbigpKTtcbiAgICBjb25zdCBlbnYgPSBPanNFbnZpcm9ubWVudC5wYXJzZShyZXNwb25zZS5lbnZpcm9ubWVudCk7XG4gICAgZW52Q2FjaGVbYmFzZVVybF0gPSBlbnY7XG4gICAgcmV0dXJuIGVudjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gT2pzRW52aXJvbm1lbnQuVmFsdWVzLnByb2Q7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGFzc2VydE5ldmVyKHZhbHVlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7dmFsdWV9YCk7XG59XG5jb25zdCBleGNsdWRlUHJvcHMgPSAob2JqLCBwcm9wcykgPT4ge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKG9iaikuZmlsdGVyKChba2V5XSkgPT4gIXByb3BzLmluY2x1ZGVzKGtleSkpKTtcbn07XG5jb25zdCBnZXRXaW5kb3dTYWZlID0gKCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIHdpbmRvdztcbn07XG5cbmNvbnN0IG1ldHJpY3NQdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuY29uc3QgTUVUUklDU19RVUVVRV9LRVkgPSBcIm9wX21ldHJpY3NfcXVldWVcIjtcbmNvbnN0IE1BWF9SRVRSWV9BVFRFTVBUUyA9IDM7XG5jb25zdCBCQVRDSF9TSVpFID0gMztcbmNvbnN0IEJBVENIX0lOVEVSVkFMX01TID0gMWUzO1xuY29uc3QgeyBsb2dfXzogbG9nX18keCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgTWV0cmljc1F1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMDtcbiAgICB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJHgoXCJOZXR3b3JrIG9mZmxpbmUsIG1ldHJpY3Mgd2lsbCBiZSBxdWV1ZWRcIik7XG4gICAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH07XG4gICAgdGhpcy5vbmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJHgoXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpO1xuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9O1xuICAgIHRoaXMubG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gIH1cbiAgYWRkRXZlbnQoZXZlbnROYW1lLCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcykge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnROYW1lLFxuICAgICAgcHJvcGVydGllczogcHJvcGVydGllcyB8fCB7fSxcbiAgICAgIGNvbnRleHRQcm9wZXJ0aWVzOiBjb250ZXh0UHJvcGVydGllcyB8fCB7fSxcbiAgICAgIG5vbmNlOiB2NCgpLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBldmVudC50aW1lc3RhbXA7XG4gICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkUXVldWUgPSBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZT8uZ2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkUXVldWUpIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IEpTT04ucGFyc2Uoc3RvcmVkUXVldWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuICBzYXZlUXVldWVUb1N0b3JhZ2UoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSwgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWV1ZSkpO1xuICB9XG4gIHNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGNvbnN0IHNhZmVXaW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgaWYgKHNhZmVXaW5kb3cgJiYgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBzYWZlV2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgICB9LCBCQVRDSF9JTlRFUlZBTF9NUyk7XG4gICAgfVxuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBpZiAodGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIGdldFdpbmRvd1NhZmUoKT8uY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hUaW1lb3V0KTtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgfVxuICBwcm9jZXNzUXVldWUoKSB7XG4gICAgaWYgKCFuYXZpZ2F0b3Iub25MaW5lIHx8IHRoaXMucHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gdHJ1ZTtcbiAgICB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBjb250ZXh0ID0gbWV0cmljc1B1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgbG9nX18keChcIk1ldHJpY3MgY29udGV4dCBub3QgYXZhaWxhYmxlLCB3aWxsIHJldHJ5IGxhdGVyXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBiYXRjaCA9IHRoaXMucXVldWUuc2xpY2UoMCwgQkFUQ0hfU0laRSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhdGNoUGF5bG9hZCA9IHtcbiAgICAgICAgZXZlbnRzOiBiYXRjaC5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2ZW50X25hbWU6IGV2ZW50LmV2ZW50TmFtZSxcbiAgICAgICAgICAgIGRldmljZV90b2tlbjogY29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGNvbnRleHRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgICAgICAuLi5ldmVudC5jb250ZXh0UHJvcGVydGllc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgbm9uY2U6IGV2ZW50Lm5vbmNlLFxuICAgICAgICAgICAgICBkYXRldGltZTogZXZlbnQuZGF0ZXRpbWUsXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICB0aW1lX2RpZmZfZnJvbV9wcmV2aW91c19ldmVudDogZXZlbnQudGltZURpZmZGcm9tUHJldmlvdXNFdmVudCxcbiAgICAgICAgICAgICAgY2hlY2tvdXRfc2VjdXJlX3Rva2VuOiBjb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICAgIC4uLmV2ZW50LnByb3BlcnRpZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbm50b1VybCA9IGdldENvbm50b1VybChjb250ZXh0LmVudmlyb25tZW50KTtcbiAgICAgIGNvbnN0IG1ldHJpY3NSb3V0ZXIgPSBuZXcgVVJMKFwiL21ldHJpY3MvcHVibGljL2NhcHR1cmVcIiwgY29ubnRvVXJsKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobWV0cmljc1JvdXRlci50b1N0cmluZygpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShiYXRjaFBheWxvYWQpLFxuICAgICAgICBrZWVwYWxpdmU6IHRydWVcbiAgICAgICAgLy8gVG8gc2VuZCBldmVudHMgZXZlbiBpZiB0aGUgcGFnZSBpcyB1bmxvYWRlZFxuICAgICAgfSk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dfXyR4KFwiRXJyb3Igc2VuZGluZyBtZXRyaWNzIGJhdGNoOlwiLCBlcnJvcik7XG4gICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpIHtcbiAgICBiYXRjaC5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgZXZlbnQuYXR0ZW1wdENvdW50Kys7XG4gICAgfSk7XG4gICAgY29uc3QgZXZlbnRzVG9LZWVwID0gYmF0Y2guZmlsdGVyKChldmVudCkgPT4gZXZlbnQuYXR0ZW1wdENvdW50IDwgTUFYX1JFVFJZX0FUVEVNUFRTKTtcbiAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShiYXRjaC5sZW5ndGgpO1xuICAgIHRoaXMucXVldWUgPSBbLi4uZXZlbnRzVG9LZWVwLCAuLi50aGlzLnF1ZXVlXTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICB9XG4gIGNsZWFudXAoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lcik7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICAgIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbn1cbmNvbnN0IG1ldHJpY3NRdWV1ZSA9IG5ldyBNZXRyaWNzUXVldWUoKTtcbmNvbnN0IHRyYWNrID0gKGV2ZW50LCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcykgPT4ge1xuICBtZXRyaWNzUXVldWUuYWRkRXZlbnQoZXZlbnQsIHByb3BlcnRpZXMsIGNvbnRleHRQcm9wZXJ0aWVzKTtcbn07XG5jb25zdCBmb3JjZVByb2Nlc3NNZXRyaWNzUXVldWUgPSAoKSA9PiB7XG4gIG1ldHJpY3NRdWV1ZS5wcm9jZXNzUXVldWUoKTtcbn07XG5jb25zdCBvblVuaGFuZGxlZFJlamVjdGlvbkVycm9yID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShldmVudC5yZWFzb24pO1xuICB0cmFjayhcInVuaGFuZGxlZF9yZWplY3Rpb25fZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICBlcnJvcl9uYW1lOiBldmVudC5yZWFzb25cbiAgfSk7XG59O1xuY29uc3Qgb25VbmNhdWdodEVycm9yID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShldmVudC5lcnJvcik7XG4gIHRyYWNrKFwidW5jYXVnaHRfZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICBlcnJvcl9uYW1lOiBldmVudC5lcnJvcj8ubmFtZSxcbiAgICBlcnJvcl9zdGFjazogZXZlbnQuZXJyb3I/LnN0YWNrLFxuICAgIGZpbGVfbmFtZTogZXZlbnQuZmlsZW5hbWUsXG4gICAgbGluZV9udW1iZXI6IGV2ZW50LmxpbmVubyxcbiAgICBjb2x1bW5fbnVtYmVyOiBldmVudC5jb2xub1xuICB9KTtcbn07XG5sZXQgcGFnZUxpZmVjeWNsZSA9IG51bGw7XG5jb25zdCBsb2FkUGFnZUxpZmVjeWNsZSA9IGFzeW5jICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IHBhZ2VMaWZlY3ljbGVNb2R1bGUgPSBhd2FpdCBpbXBvcnQoJy4vbGlmZWN5Y2xlLSF+ezAwNX1+LmpzJyk7XG4gICAgcGFnZUxpZmVjeWNsZSA9IHBhZ2VMaWZlY3ljbGVNb2R1bGUuZGVmYXVsdDtcbiAgICByZXR1cm4gcGFnZUxpZmVjeWNsZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBwYWdlLWxpZmVjeWNsZTpcIiwgZXJyb3IpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuY29uc3QgcGFnZUxpZmVjeWNsZVN0YXRlQ2hhbmdlSGFuZGxlciA9IChldmVudCkgPT4ge1xuICB0cmFjayhcInBhZ2VfbGlmZWN5Y2xlX3N0YXRlX2NoYW5nZVwiLCB7XG4gICAgb2xkX3N0YXRlOiBldmVudC5vbGRTdGF0ZSxcbiAgICBuZXdfc3RhdGU6IGV2ZW50Lm5ld1N0YXRlXG4gIH0pO1xuICBpZiAoZXZlbnQubmV3U3RhdGUgPT09IFwiaGlkZGVuXCIgfHwgZXZlbnQubmV3U3RhdGUgPT09IFwicGFzc2l2ZVwiKSB7XG4gICAgbWV0cmljc1F1ZXVlLnByb2Nlc3NRdWV1ZSgpO1xuICB9XG59O1xuY29uc3QgYXR0YWNoQW5hbHl0aWNzRXZlbnRMaXN0ZW5lcnMgPSBhc3luYyAoKSA9PiB7XG4gIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG9uVW5jYXVnaHRFcnJvcik7XG4gIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCBvblVuaGFuZGxlZFJlamVjdGlvbkVycm9yKTtcbiAgY29uc3QgbGlmZWN5Y2xlID0gYXdhaXQgbG9hZFBhZ2VMaWZlY3ljbGUoKTtcbiAgaWYgKGxpZmVjeWNsZSkge1xuICAgIGxpZmVjeWNsZS5hZGRFdmVudExpc3RlbmVyKFwic3RhdGVjaGFuZ2VcIiwgcGFnZUxpZmVjeWNsZVN0YXRlQ2hhbmdlSGFuZGxlcik7XG4gIH1cbn07XG5jb25zdCBkZXRhY2hBbmFseXRpY3NFdmVudExpc3RlbmVycyA9IGFzeW5jICgpID0+IHtcbiAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25VbmNhdWdodEVycm9yKTtcbiAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIG9uVW5oYW5kbGVkUmVqZWN0aW9uRXJyb3IpO1xuICBpZiAoZ2V0V2luZG93U2FmZSgpICYmIHBhZ2VMaWZlY3ljbGUpIHtcbiAgICBwYWdlTGlmZWN5Y2xlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzdGF0ZWNoYW5nZVwiLCBwYWdlTGlmZWN5Y2xlU3RhdGVDaGFuZ2VIYW5kbGVyKTtcbiAgfVxufTtcblxuY29uc3QgU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IG91ckN1cnJlbmN5VG9UaGVpcnMgPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59O1xuY29uc3QgZ2V0TG9hZGVkU3RyaXBlID0gYXN5bmMgKHB1Ymxpc2hhYmxlS2V5KSA9PiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgICAgYXdhaXQgc2xlZXAoNTAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1N0cmlwZUpzUHJlc2VudCgpKSB7XG4gICAgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmlwZSBKUyBub3QgZm91bmQuYCk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlID0gbmV3IFN0cmlwZShwdWJsaXNoYWJsZUtleSk7XG4gIHJldHVybiBzdHJpcGU7XG59O1xuY29uc3QgY3JlYXRlU3RyaXBlRWxlbWVudHMgPSBhc3luYyAoc3RyaXBlUHViS2V5LCBlbGVtZW50c09wdGlvbnMpID0+IHtcbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKHN0cmlwZVB1YktleSk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IHN0cmlwZS5lbGVtZW50cyhlbGVtZW50c09wdGlvbnMpLFxuICAgIHN0cmlwZVxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0ID0gYXN5bmMgKHN0cmlwZVB1YktleSwgdG90YWxBbW91bnRBdG9tLCBjdXJyZW5jeSwgaXNBbW91bnRQZW5kaW5nLCBpc0xpbmtPbmx5KSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICBjb25zdCBzdHJpcGVDdXJyZW5jeSA9IG91ckN1cnJlbmN5VG9UaGVpcnNbY3VycmVuY3kudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICBjb25zdCBwYXltZW50UmVxdWVzdCA9IHN0cmlwZS5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IHN0cmlwZUN1cnJlbmN5LFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiB0b3RhbEFtb3VudEF0b20sXG4gICAgICBwZW5kaW5nOiBpc0Ftb3VudFBlbmRpbmdcbiAgICB9LFxuICAgIC8vIHJlcXVlc3RTaGlwcGluZzogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiB0cnVlLFxuICAgIGRpc2FibGVXYWxsZXRzOiBbXSBcbiAgfSk7XG4gIHJldHVybiBwYXltZW50UmVxdWVzdDtcbn07XG5jb25zdCBzbGVlcCA9ICh0aW1lb3V0TXMpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0TXMpO1xuICB9KTtcbn07XG5jb25zdCBpc1N0cmlwZUpzUHJlc2VudCA9ICgpID0+IHtcbiAgcmV0dXJuIFwiU3RyaXBlXCIgaW4gd2luZG93O1xufTtcbmNvbnN0IHdhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kID0gYXN5bmMgKHBheW1lbnRSZXF1ZXN0KSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHBheW1lbnRSZXF1ZXN0Lm9uKFwicGF5bWVudG1ldGhvZFwiLCBhc3luYyAoZXZ0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgZXZ0KTtcbiAgICAgICAgcmVzb2x2ZShldnQpO1xuICAgICAgfSk7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcInRva2VuXCIsIGFzeW5jIChldnQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgZXZ0KTtcbiAgICAgIH0pO1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlgKSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBjb25maXJtU3RyaXBlUHJQTSA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtKSA9PiB7XG4gIGlmICghbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayB8fCAhbmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KG5leHRBY3Rpb25NZXRhZGF0YSl9YCk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogc3RyaXBlUG0ucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKGNvbmZpcm1SZXN1bHQuZXJyb3IpIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcImZhaWxcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtjb25maXJtUmVzdWx0LmVycm9yLm1lc3NhZ2UgPz8gYHVua25vd25gfWApO1xuICB9IGVsc2Uge1xuICAgIHN0cmlwZVBtLmNvbXBsZXRlKFwic3VjY2Vzc1wiKTtcbiAgfVxuICByZXR1cm4gY29uZmlybVJlc3VsdDtcbn07XG5jb25zdCBsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93ID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSkgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUobmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayk7XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBzdHJpcGUuY29uZmlybUNhcmRTZXR1cChuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkXG4gIH0pO1xuICBjb25zdCByZXN1bHRTdGF0dXMgPSBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5zdGF0dXM7XG4gIGlmIChyZXN1bHRTdGF0dXMgPT09IFwic3VjY2VlZGVkXCIpIHtcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcG1faWQpO1xuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gU2V0dXAgaW50ZW50IGNyZWF0ZWQ6XCIsIGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQpO1xuICB9IGVsc2UgaWYgKHJlc3VsdFN0YXR1cyA9PT0gXCJjYW5jZWxlZFwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlgKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHtjb25maXJtUmVzdWx0LmVycm9yPy5tZXNzYWdlID8/IGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQ/Lmxhc3Rfc2V0dXBfZXJyb3I/Lm1lc3NhZ2UgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICAgICk7XG4gIH1cbn07XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBVcGRhdGVzIHRvIHRoaXMgZmlsZSBzaG91bGQgYWxzbyBiZSByZXBsaWNhdGVkIHRvIEBvcGVudGVsZW1ldHJ5L2NvcmUgdG9vLlxuLyoqXG4gKiAtIGdsb2JhbFRoaXMgKE5ldyBzdGFuZGFyZClcbiAqIC0gc2VsZiAoV2lsbCByZXR1cm4gdGhlIGN1cnJlbnQgd2luZG93IGluc3RhbmNlIGZvciBzdXBwb3J0ZWQgYnJvd3NlcnMpXG4gKiAtIHdpbmRvdyAoZmFsbGJhY2sgZm9yIG9sZGVyIGJyb3dzZXIgaW1wbGVtZW50YXRpb25zKVxuICogLSBnbG9iYWwgKE5vZGVKUyBpbXBsZW1lbnRhdGlvbilcbiAqIC0gPG9iamVjdD4gKFdoZW4gYWxsIGVsc2UgZmFpbHMpXG4gKi9cbi8qKiBvbmx5IGdsb2JhbHMgdGhhdCBjb21tb24gdG8gbm9kZSBhbmQgYnJvd3NlcnMgYXJlIGFsbG93ZWQgKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBub2RlL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL2VzLWJ1aWx0aW5zLCBuby11bmRlZlxudmFyIF9nbG9iYWxUaGlzID0gdHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnXG4gICAgPyBnbG9iYWxUaGlzXG4gICAgOiB0eXBlb2Ygc2VsZiA9PT0gJ29iamVjdCdcbiAgICAgICAgPyBzZWxmXG4gICAgICAgIDogdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgID8gd2luZG93XG4gICAgICAgICAgICA6IHR5cGVvZiBnbG9iYWwgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgPyBnbG9iYWxcbiAgICAgICAgICAgICAgICA6IHt9O1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gdGhpcyBpcyBhdXRvZ2VuZXJhdGVkIGZpbGUsIHNlZSBzY3JpcHRzL3ZlcnNpb24tdXBkYXRlLmpzXG52YXIgVkVSU0lPTiA9ICcxLjkuMCc7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgcmUgPSAvXihcXGQrKVxcLihcXGQrKVxcLihcXGQrKSgtKC4rKSk/JC87XG4vKipcbiAqIENyZWF0ZSBhIGZ1bmN0aW9uIHRvIHRlc3QgYW4gQVBJIHZlcnNpb24gdG8gc2VlIGlmIGl0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgcHJvdmlkZWQgb3duVmVyc2lvbi5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gaGFzIHRoZSBmb2xsb3dpbmcgc2VtYW50aWNzOlxuICogLSBFeGFjdCBtYXRjaCBpcyBhbHdheXMgY29tcGF0aWJsZVxuICogLSBNYWpvciB2ZXJzaW9ucyBtdXN0IG1hdGNoIGV4YWN0bHlcbiAqICAgIC0gMS54IHBhY2thZ2UgY2Fubm90IHVzZSBnbG9iYWwgMi54IHBhY2thZ2VcbiAqICAgIC0gMi54IHBhY2thZ2UgY2Fubm90IHVzZSBnbG9iYWwgMS54IHBhY2thZ2VcbiAqIC0gVGhlIG1pbm9yIHZlcnNpb24gb2YgdGhlIEFQSSBtb2R1bGUgcmVxdWVzdGluZyBhY2Nlc3MgdG8gdGhlIGdsb2JhbCBBUEkgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG1pbm9yIHZlcnNpb24gb2YgdGhpcyBBUElcbiAqICAgIC0gMS4zIHBhY2thZ2UgbWF5IHVzZSAxLjQgZ2xvYmFsIGJlY2F1c2UgdGhlIGxhdGVyIGdsb2JhbCBjb250YWlucyBhbGwgZnVuY3Rpb25zIDEuMyBleHBlY3RzXG4gKiAgICAtIDEuNCBwYWNrYWdlIG1heSBOT1QgdXNlIDEuMyBnbG9iYWwgYmVjYXVzZSBpdCBtYXkgdHJ5IHRvIGNhbGwgZnVuY3Rpb25zIHdoaWNoIGRvbid0IGV4aXN0IG9uIDEuM1xuICogLSBJZiB0aGUgbWFqb3IgdmVyc2lvbiBpcyAwLCB0aGUgbWlub3IgdmVyc2lvbiBpcyB0cmVhdGVkIGFzIHRoZSBtYWpvciBhbmQgdGhlIHBhdGNoIGlzIHRyZWF0ZWQgYXMgdGhlIG1pbm9yXG4gKiAtIFBhdGNoIGFuZCBidWlsZCB0YWcgZGlmZmVyZW5jZXMgYXJlIG5vdCBjb25zaWRlcmVkIGF0IHRoaXMgdGltZVxuICpcbiAqIEBwYXJhbSBvd25WZXJzaW9uIHZlcnNpb24gd2hpY2ggc2hvdWxkIGJlIGNoZWNrZWQgYWdhaW5zdFxuICovXG5mdW5jdGlvbiBfbWFrZUNvbXBhdGliaWxpdHlDaGVjayhvd25WZXJzaW9uKSB7XG4gICAgdmFyIGFjY2VwdGVkVmVyc2lvbnMgPSBuZXcgU2V0KFtvd25WZXJzaW9uXSk7XG4gICAgdmFyIHJlamVjdGVkVmVyc2lvbnMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIG15VmVyc2lvbk1hdGNoID0gb3duVmVyc2lvbi5tYXRjaChyZSk7XG4gICAgaWYgKCFteVZlcnNpb25NYXRjaCkge1xuICAgICAgICAvLyB3ZSBjYW5ub3QgZ3VhcmFudGVlIGNvbXBhdGliaWxpdHkgc28gd2UgYWx3YXlzIHJldHVybiBub29wXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBmYWxzZTsgfTtcbiAgICB9XG4gICAgdmFyIG93blZlcnNpb25QYXJzZWQgPSB7XG4gICAgICAgIG1ham9yOiArbXlWZXJzaW9uTWF0Y2hbMV0sXG4gICAgICAgIG1pbm9yOiArbXlWZXJzaW9uTWF0Y2hbMl0sXG4gICAgICAgIHBhdGNoOiArbXlWZXJzaW9uTWF0Y2hbM10sXG4gICAgICAgIHByZXJlbGVhc2U6IG15VmVyc2lvbk1hdGNoWzRdLFxuICAgIH07XG4gICAgLy8gaWYgb3duVmVyc2lvbiBoYXMgYSBwcmVyZWxlYXNlIHRhZywgdmVyc2lvbnMgbXVzdCBtYXRjaCBleGFjdGx5XG4gICAgaWYgKG93blZlcnNpb25QYXJzZWQucHJlcmVsZWFzZSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBpc0V4YWN0bWF0Y2goZ2xvYmFsVmVyc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbFZlcnNpb24gPT09IG93blZlcnNpb247XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9yZWplY3Qodikge1xuICAgICAgICByZWplY3RlZFZlcnNpb25zLmFkZCh2KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBfYWNjZXB0KHYpIHtcbiAgICAgICAgYWNjZXB0ZWRWZXJzaW9ucy5hZGQodik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gaXNDb21wYXRpYmxlKGdsb2JhbFZlcnNpb24pIHtcbiAgICAgICAgaWYgKGFjY2VwdGVkVmVyc2lvbnMuaGFzKGdsb2JhbFZlcnNpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVqZWN0ZWRWZXJzaW9ucy5oYXMoZ2xvYmFsVmVyc2lvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZ2xvYmFsVmVyc2lvbk1hdGNoID0gZ2xvYmFsVmVyc2lvbi5tYXRjaChyZSk7XG4gICAgICAgIGlmICghZ2xvYmFsVmVyc2lvbk1hdGNoKSB7XG4gICAgICAgICAgICAvLyBjYW5ub3QgcGFyc2Ugb3RoZXIgdmVyc2lvblxuICAgICAgICAgICAgLy8gd2UgY2Fubm90IGd1YXJhbnRlZSBjb21wYXRpYmlsaXR5IHNvIHdlIGFsd2F5cyBub29wXG4gICAgICAgICAgICByZXR1cm4gX3JlamVjdChnbG9iYWxWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZ2xvYmFsVmVyc2lvblBhcnNlZCA9IHtcbiAgICAgICAgICAgIG1ham9yOiArZ2xvYmFsVmVyc2lvbk1hdGNoWzFdLFxuICAgICAgICAgICAgbWlub3I6ICtnbG9iYWxWZXJzaW9uTWF0Y2hbMl0sXG4gICAgICAgICAgICBwYXRjaDogK2dsb2JhbFZlcnNpb25NYXRjaFszXSxcbiAgICAgICAgICAgIHByZXJlbGVhc2U6IGdsb2JhbFZlcnNpb25NYXRjaFs0XSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gaWYgZ2xvYmFsVmVyc2lvbiBoYXMgYSBwcmVyZWxlYXNlIHRhZywgdmVyc2lvbnMgbXVzdCBtYXRjaCBleGFjdGx5XG4gICAgICAgIGlmIChnbG9iYWxWZXJzaW9uUGFyc2VkLnByZXJlbGVhc2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbWFqb3IgdmVyc2lvbnMgbXVzdCBtYXRjaFxuICAgICAgICBpZiAob3duVmVyc2lvblBhcnNlZC5tYWpvciAhPT0gZ2xvYmFsVmVyc2lvblBhcnNlZC5tYWpvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG93blZlcnNpb25QYXJzZWQubWFqb3IgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLm1pbm9yID09PSBnbG9iYWxWZXJzaW9uUGFyc2VkLm1pbm9yICYmXG4gICAgICAgICAgICAgICAgb3duVmVyc2lvblBhcnNlZC5wYXRjaCA8PSBnbG9iYWxWZXJzaW9uUGFyc2VkLnBhdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9hY2NlcHQoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX3JlamVjdChnbG9iYWxWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3duVmVyc2lvblBhcnNlZC5taW5vciA8PSBnbG9iYWxWZXJzaW9uUGFyc2VkLm1pbm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gX2FjY2VwdChnbG9iYWxWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3JlamVjdChnbG9iYWxWZXJzaW9uKTtcbiAgICB9O1xufVxuLyoqXG4gKiBUZXN0IGFuIEFQSSB2ZXJzaW9uIHRvIHNlZSBpZiBpdCBpcyBjb21wYXRpYmxlIHdpdGggdGhpcyBBUEkuXG4gKlxuICogLSBFeGFjdCBtYXRjaCBpcyBhbHdheXMgY29tcGF0aWJsZVxuICogLSBNYWpvciB2ZXJzaW9ucyBtdXN0IG1hdGNoIGV4YWN0bHlcbiAqICAgIC0gMS54IHBhY2thZ2UgY2Fubm90IHVzZSBnbG9iYWwgMi54IHBhY2thZ2VcbiAqICAgIC0gMi54IHBhY2thZ2UgY2Fubm90IHVzZSBnbG9iYWwgMS54IHBhY2thZ2VcbiAqIC0gVGhlIG1pbm9yIHZlcnNpb24gb2YgdGhlIEFQSSBtb2R1bGUgcmVxdWVzdGluZyBhY2Nlc3MgdG8gdGhlIGdsb2JhbCBBUEkgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG1pbm9yIHZlcnNpb24gb2YgdGhpcyBBUElcbiAqICAgIC0gMS4zIHBhY2thZ2UgbWF5IHVzZSAxLjQgZ2xvYmFsIGJlY2F1c2UgdGhlIGxhdGVyIGdsb2JhbCBjb250YWlucyBhbGwgZnVuY3Rpb25zIDEuMyBleHBlY3RzXG4gKiAgICAtIDEuNCBwYWNrYWdlIG1heSBOT1QgdXNlIDEuMyBnbG9iYWwgYmVjYXVzZSBpdCBtYXkgdHJ5IHRvIGNhbGwgZnVuY3Rpb25zIHdoaWNoIGRvbid0IGV4aXN0IG9uIDEuM1xuICogLSBJZiB0aGUgbWFqb3IgdmVyc2lvbiBpcyAwLCB0aGUgbWlub3IgdmVyc2lvbiBpcyB0cmVhdGVkIGFzIHRoZSBtYWpvciBhbmQgdGhlIHBhdGNoIGlzIHRyZWF0ZWQgYXMgdGhlIG1pbm9yXG4gKiAtIFBhdGNoIGFuZCBidWlsZCB0YWcgZGlmZmVyZW5jZXMgYXJlIG5vdCBjb25zaWRlcmVkIGF0IHRoaXMgdGltZVxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIHZlcnNpb24gb2YgdGhlIEFQSSByZXF1ZXN0aW5nIGFuIGluc3RhbmNlIG9mIHRoZSBnbG9iYWwgQVBJXG4gKi9cbnZhciBpc0NvbXBhdGlibGUgPSBfbWFrZUNvbXBhdGliaWxpdHlDaGVjayhWRVJTSU9OKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBtYWpvciA9IFZFUlNJT04uc3BsaXQoJy4nKVswXTtcbnZhciBHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZID0gU3ltYm9sLmZvcihcIm9wZW50ZWxlbWV0cnkuanMuYXBpLlwiICsgbWFqb3IpO1xudmFyIF9nbG9iYWwgPSBfZ2xvYmFsVGhpcztcbmZ1bmN0aW9uIHJlZ2lzdGVyR2xvYmFsKHR5cGUsIGluc3RhbmNlLCBkaWFnLCBhbGxvd092ZXJyaWRlKSB7XG4gICAgdmFyIF9hO1xuICAgIGlmIChhbGxvd092ZXJyaWRlID09PSB2b2lkIDApIHsgYWxsb3dPdmVycmlkZSA9IGZhbHNlOyB9XG4gICAgdmFyIGFwaSA9IChfZ2xvYmFsW0dMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVldID0gKF9hID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge1xuICAgICAgICB2ZXJzaW9uOiBWRVJTSU9OLFxuICAgIH0pO1xuICAgIGlmICghYWxsb3dPdmVycmlkZSAmJiBhcGlbdHlwZV0pIHtcbiAgICAgICAgLy8gYWxyZWFkeSByZWdpc3RlcmVkIGFuIEFQSSBvZiB0aGlzIHR5cGVcbiAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcIkBvcGVudGVsZW1ldHJ5L2FwaTogQXR0ZW1wdGVkIGR1cGxpY2F0ZSByZWdpc3RyYXRpb24gb2YgQVBJOiBcIiArIHR5cGUpO1xuICAgICAgICBkaWFnLmVycm9yKGVyci5zdGFjayB8fCBlcnIubWVzc2FnZSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGFwaS52ZXJzaW9uICE9PSBWRVJTSU9OKSB7XG4gICAgICAgIC8vIEFsbCByZWdpc3RlcmVkIEFQSXMgbXVzdCBiZSBvZiB0aGUgc2FtZSB2ZXJzaW9uIGV4YWN0bHlcbiAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcIkBvcGVudGVsZW1ldHJ5L2FwaTogUmVnaXN0cmF0aW9uIG9mIHZlcnNpb24gdlwiICsgYXBpLnZlcnNpb24gKyBcIiBmb3IgXCIgKyB0eXBlICsgXCIgZG9lcyBub3QgbWF0Y2ggcHJldmlvdXNseSByZWdpc3RlcmVkIEFQSSB2XCIgKyBWRVJTSU9OKTtcbiAgICAgICAgZGlhZy5lcnJvcihlcnIuc3RhY2sgfHwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGFwaVt0eXBlXSA9IGluc3RhbmNlO1xuICAgIGRpYWcuZGVidWcoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFJlZ2lzdGVyZWQgYSBnbG9iYWwgZm9yIFwiICsgdHlwZSArIFwiIHZcIiArIFZFUlNJT04gKyBcIi5cIik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBnZXRHbG9iYWwodHlwZSkge1xuICAgIHZhciBfYSwgX2I7XG4gICAgdmFyIGdsb2JhbFZlcnNpb24gPSAoX2EgPSBfZ2xvYmFsW0dMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVldKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmVyc2lvbjtcbiAgICBpZiAoIWdsb2JhbFZlcnNpb24gfHwgIWlzQ29tcGF0aWJsZShnbG9iYWxWZXJzaW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiAoX2IgPSBfZ2xvYmFsW0dMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVldKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbdHlwZV07XG59XG5mdW5jdGlvbiB1bnJlZ2lzdGVyR2xvYmFsKHR5cGUsIGRpYWcpIHtcbiAgICBkaWFnLmRlYnVnKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBVbnJlZ2lzdGVyaW5nIGEgZ2xvYmFsIGZvciBcIiArIHR5cGUgKyBcIiB2XCIgKyBWRVJTSU9OICsgXCIuXCIpO1xuICAgIHZhciBhcGkgPSBfZ2xvYmFsW0dMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVldO1xuICAgIGlmIChhcGkpIHtcbiAgICAgICAgZGVsZXRlIGFwaVt0eXBlXTtcbiAgICB9XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19yZWFkJDMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSQzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG4vKipcbiAqIENvbXBvbmVudCBMb2dnZXIgd2hpY2ggaXMgbWVhbnQgdG8gYmUgdXNlZCBhcyBwYXJ0IG9mIGFueSBjb21wb25lbnQgd2hpY2hcbiAqIHdpbGwgYWRkIGF1dG9tYXRpY2FsbHkgYWRkaXRpb25hbCBuYW1lc3BhY2UgaW4gZnJvbnQgb2YgdGhlIGxvZyBtZXNzYWdlLlxuICogSXQgd2lsbCB0aGVuIGZvcndhcmQgYWxsIG1lc3NhZ2UgdG8gZ2xvYmFsIGRpYWcgbG9nZ2VyXG4gKiBAZXhhbXBsZVxuICogY29uc3QgY0xvZ2dlciA9IGRpYWcuY3JlYXRlQ29tcG9uZW50TG9nZ2VyKHsgbmFtZXNwYWNlOiAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWh0dHAnIH0pO1xuICogY0xvZ2dlci5kZWJ1ZygndGVzdCcpO1xuICogLy8gQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWh0dHAgdGVzdFxuICovXG52YXIgRGlhZ0NvbXBvbmVudExvZ2dlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEaWFnQ29tcG9uZW50TG9nZ2VyKHByb3BzKSB7XG4gICAgICAgIHRoaXMuX25hbWVzcGFjZSA9IHByb3BzLm5hbWVzcGFjZSB8fCAnRGlhZ0NvbXBvbmVudExvZ2dlcic7XG4gICAgfVxuICAgIERpYWdDb21wb25lbnRMb2dnZXIucHJvdG90eXBlLmRlYnVnID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgnZGVidWcnLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvZ1Byb3h5KCdlcnJvcicsIHRoaXMuX25hbWVzcGFjZSwgYXJncyk7XG4gICAgfTtcbiAgICBEaWFnQ29tcG9uZW50TG9nZ2VyLnByb3RvdHlwZS5pbmZvID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgnaW5mbycsIHRoaXMuX25hbWVzcGFjZSwgYXJncyk7XG4gICAgfTtcbiAgICBEaWFnQ29tcG9uZW50TG9nZ2VyLnByb3RvdHlwZS53YXJuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgnd2FybicsIHRoaXMuX25hbWVzcGFjZSwgYXJncyk7XG4gICAgfTtcbiAgICBEaWFnQ29tcG9uZW50TG9nZ2VyLnByb3RvdHlwZS52ZXJib3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgndmVyYm9zZScsIHRoaXMuX25hbWVzcGFjZSwgYXJncyk7XG4gICAgfTtcbiAgICByZXR1cm4gRGlhZ0NvbXBvbmVudExvZ2dlcjtcbn0oKSk7XG5mdW5jdGlvbiBsb2dQcm94eShmdW5jTmFtZSwgbmFtZXNwYWNlLCBhcmdzKSB7XG4gICAgdmFyIGxvZ2dlciA9IGdldEdsb2JhbCgnZGlhZycpO1xuICAgIC8vIHNob3J0Y3V0IGlmIGxvZ2dlciBub3Qgc2V0XG4gICAgaWYgKCFsb2dnZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhcmdzLnVuc2hpZnQobmFtZXNwYWNlKTtcbiAgICByZXR1cm4gbG9nZ2VyW2Z1bmNOYW1lXS5hcHBseShsb2dnZXIsIF9fc3ByZWFkQXJyYXkkMyhbXSwgX19yZWFkJDMoYXJncyksIGZhbHNlKSk7XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGF2YWlsYWJsZSBpbnRlcm5hbCBsb2dnaW5nIGxldmVscyBmb3IgdGhlIGRpYWdub3N0aWMgbG9nZ2VyLCB0aGUgbnVtZXJpYyB2YWx1ZXNcbiAqIG9mIHRoZSBsZXZlbHMgYXJlIGRlZmluZWQgdG8gbWF0Y2ggdGhlIG9yaWdpbmFsIHZhbHVlcyBmcm9tIHRoZSBpbml0aWFsIExvZ0xldmVsIHRvIGF2b2lkXG4gKiBjb21wYXRpYmlsaXR5L21pZ3JhdGlvbiBpc3N1ZXMgZm9yIGFueSBpbXBsZW1lbnRhdGlvbiB0aGF0IGFzc3VtZSB0aGUgbnVtZXJpYyBvcmRlcmluZy5cbiAqL1xudmFyIERpYWdMb2dMZXZlbDtcbihmdW5jdGlvbiAoRGlhZ0xvZ0xldmVsKSB7XG4gICAgLyoqIERpYWdub3N0aWMgTG9nZ2luZyBsZXZlbCBzZXR0aW5nIHRvIGRpc2FibGUgYWxsIGxvZ2dpbmcgKGV4Y2VwdCBhbmQgZm9yY2VkIGxvZ3MpICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIk5PTkVcIl0gPSAwXSA9IFwiTk9ORVwiO1xuICAgIC8qKiBJZGVudGlmaWVzIGFuIGVycm9yIHNjZW5hcmlvICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIkVSUk9SXCJdID0gMzBdID0gXCJFUlJPUlwiO1xuICAgIC8qKiBJZGVudGlmaWVzIGEgd2FybmluZyBzY2VuYXJpbyAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJXQVJOXCJdID0gNTBdID0gXCJXQVJOXCI7XG4gICAgLyoqIEdlbmVyYWwgaW5mb3JtYXRpb25hbCBsb2cgbWVzc2FnZSAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJJTkZPXCJdID0gNjBdID0gXCJJTkZPXCI7XG4gICAgLyoqIEdlbmVyYWwgZGVidWcgbG9nIG1lc3NhZ2UgKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiREVCVUdcIl0gPSA3MF0gPSBcIkRFQlVHXCI7XG4gICAgLyoqXG4gICAgICogRGV0YWlsZWQgdHJhY2UgbGV2ZWwgbG9nZ2luZyBzaG91bGQgb25seSBiZSB1c2VkIGZvciBkZXZlbG9wbWVudCwgc2hvdWxkIG9ubHkgYmUgc2V0XG4gICAgICogaW4gYSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC5cbiAgICAgKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiVkVSQk9TRVwiXSA9IDgwXSA9IFwiVkVSQk9TRVwiO1xuICAgIC8qKiBVc2VkIHRvIHNldCB0aGUgbG9nZ2luZyBsZXZlbCB0byBpbmNsdWRlIGFsbCBsb2dnaW5nICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIkFMTFwiXSA9IDk5OTldID0gXCJBTExcIjtcbn0pKERpYWdMb2dMZXZlbCB8fCAoRGlhZ0xvZ0xldmVsID0ge30pKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlcihtYXhMZXZlbCwgbG9nZ2VyKSB7XG4gICAgaWYgKG1heExldmVsIDwgRGlhZ0xvZ0xldmVsLk5PTkUpIHtcbiAgICAgICAgbWF4TGV2ZWwgPSBEaWFnTG9nTGV2ZWwuTk9ORTtcbiAgICB9XG4gICAgZWxzZSBpZiAobWF4TGV2ZWwgPiBEaWFnTG9nTGV2ZWwuQUxMKSB7XG4gICAgICAgIG1heExldmVsID0gRGlhZ0xvZ0xldmVsLkFMTDtcbiAgICB9XG4gICAgLy8gSW4gY2FzZSB0aGUgbG9nZ2VyIGlzIG51bGwgb3IgdW5kZWZpbmVkXG4gICAgbG9nZ2VyID0gbG9nZ2VyIHx8IHt9O1xuICAgIGZ1bmN0aW9uIF9maWx0ZXJGdW5jKGZ1bmNOYW1lLCB0aGVMZXZlbCkge1xuICAgICAgICB2YXIgdGhlRnVuYyA9IGxvZ2dlcltmdW5jTmFtZV07XG4gICAgICAgIGlmICh0eXBlb2YgdGhlRnVuYyA9PT0gJ2Z1bmN0aW9uJyAmJiBtYXhMZXZlbCA+PSB0aGVMZXZlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoZUZ1bmMuYmluZChsb2dnZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGVycm9yOiBfZmlsdGVyRnVuYygnZXJyb3InLCBEaWFnTG9nTGV2ZWwuRVJST1IpLFxuICAgICAgICB3YXJuOiBfZmlsdGVyRnVuYygnd2FybicsIERpYWdMb2dMZXZlbC5XQVJOKSxcbiAgICAgICAgaW5mbzogX2ZpbHRlckZ1bmMoJ2luZm8nLCBEaWFnTG9nTGV2ZWwuSU5GTyksXG4gICAgICAgIGRlYnVnOiBfZmlsdGVyRnVuYygnZGVidWcnLCBEaWFnTG9nTGV2ZWwuREVCVUcpLFxuICAgICAgICB2ZXJib3NlOiBfZmlsdGVyRnVuYygndmVyYm9zZScsIERpYWdMb2dMZXZlbC5WRVJCT1NFKSxcbiAgICB9O1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fcmVhZCQyID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkkMiA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xudmFyIEFQSV9OQU1FJDIgPSAnZGlhZyc7XG4vKipcbiAqIFNpbmdsZXRvbiBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIE9wZW5UZWxlbWV0cnkgaW50ZXJuYWxcbiAqIGRpYWdub3N0aWMgQVBJXG4gKi9cbnZhciBEaWFnQVBJID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIFByaXZhdGUgaW50ZXJuYWwgY29uc3RydWN0b3JcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIERpYWdBUEkoKSB7XG4gICAgICAgIGZ1bmN0aW9uIF9sb2dQcm94eShmdW5jTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGxvZ2dlciA9IGdldEdsb2JhbCgnZGlhZycpO1xuICAgICAgICAgICAgICAgIC8vIHNob3J0Y3V0IGlmIGxvZ2dlciBub3Qgc2V0XG4gICAgICAgICAgICAgICAgaWYgKCFsb2dnZXIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9nZ2VyW2Z1bmNOYW1lXS5hcHBseShsb2dnZXIsIF9fc3ByZWFkQXJyYXkkMihbXSwgX19yZWFkJDIoYXJncyksIGZhbHNlKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFVzaW5nIHNlbGYgbG9jYWwgdmFyaWFibGUgZm9yIG1pbmlmaWNhdGlvbiBwdXJwb3NlcyBhcyAndGhpcycgY2Fubm90IGJlIG1pbmlmaWVkXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgLy8gRGlhZ0FQSSBzcGVjaWZpYyBmdW5jdGlvbnNcbiAgICAgICAgdmFyIHNldExvZ2dlciA9IGZ1bmN0aW9uIChsb2dnZXIsIG9wdGlvbnNPckxvZ0xldmVsKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgICAgIGlmIChvcHRpb25zT3JMb2dMZXZlbCA9PT0gdm9pZCAwKSB7IG9wdGlvbnNPckxvZ0xldmVsID0geyBsb2dMZXZlbDogRGlhZ0xvZ0xldmVsLklORk8gfTsgfVxuICAgICAgICAgICAgaWYgKGxvZ2dlciA9PT0gc2VsZikge1xuICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzbid0IG11Y2ggd2UgY2FuIGRvIGhlcmUuXG4gICAgICAgICAgICAgICAgLy8gTG9nZ2luZyB0byB0aGUgY29uc29sZSBtaWdodCBicmVhayB0aGUgdXNlciBhcHBsaWNhdGlvbi5cbiAgICAgICAgICAgICAgICAvLyBUcnkgdG8gbG9nIHRvIHNlbGYuIElmIGEgbG9nZ2VyIHdhcyBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgaXQgd2lsbCByZWNlaXZlIHRoZSBsb2cuXG4gICAgICAgICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignQ2Fubm90IHVzZSBkaWFnIGFzIHRoZSBsb2dnZXIgZm9yIGl0c2VsZi4gUGxlYXNlIHVzZSBhIERpYWdMb2dnZXIgaW1wbGVtZW50YXRpb24gbGlrZSBDb25zb2xlRGlhZ0xvZ2dlciBvciBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbicpO1xuICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoKF9hID0gZXJyLnN0YWNrKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBlcnIubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zT3JMb2dMZXZlbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zT3JMb2dMZXZlbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nTGV2ZWw6IG9wdGlvbnNPckxvZ0xldmVsLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgb2xkTG9nZ2VyID0gZ2V0R2xvYmFsKCdkaWFnJyk7XG4gICAgICAgICAgICB2YXIgbmV3TG9nZ2VyID0gY3JlYXRlTG9nTGV2ZWxEaWFnTG9nZ2VyKChfYiA9IG9wdGlvbnNPckxvZ0xldmVsLmxvZ0xldmVsKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBEaWFnTG9nTGV2ZWwuSU5GTywgbG9nZ2VyKTtcbiAgICAgICAgICAgIC8vIFRoZXJlIGFscmVhZHkgaXMgYW4gbG9nZ2VyIHJlZ2lzdGVyZWQuIFdlJ2xsIGxldCBpdCBrbm93IGJlZm9yZSBvdmVyd3JpdGluZyBpdC5cbiAgICAgICAgICAgIGlmIChvbGRMb2dnZXIgJiYgIW9wdGlvbnNPckxvZ0xldmVsLnN1cHByZXNzT3ZlcnJpZGVNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YWNrID0gKF9jID0gbmV3IEVycm9yKCkuc3RhY2spICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6ICc8ZmFpbGVkIHRvIGdlbmVyYXRlIHN0YWNrdHJhY2U+JztcbiAgICAgICAgICAgICAgICBvbGRMb2dnZXIud2FybihcIkN1cnJlbnQgbG9nZ2VyIHdpbGwgYmUgb3ZlcndyaXR0ZW4gZnJvbSBcIiArIHN0YWNrKTtcbiAgICAgICAgICAgICAgICBuZXdMb2dnZXIud2FybihcIkN1cnJlbnQgbG9nZ2VyIHdpbGwgb3ZlcndyaXRlIG9uZSBhbHJlYWR5IHJlZ2lzdGVyZWQgZnJvbSBcIiArIHN0YWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZWdpc3Rlckdsb2JhbCgnZGlhZycsIG5ld0xvZ2dlciwgc2VsZiwgdHJ1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIHNlbGYuc2V0TG9nZ2VyID0gc2V0TG9nZ2VyO1xuICAgICAgICBzZWxmLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB1bnJlZ2lzdGVyR2xvYmFsKEFQSV9OQU1FJDIsIHNlbGYpO1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLmNyZWF0ZUNvbXBvbmVudExvZ2dlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERpYWdDb21wb25lbnRMb2dnZXIob3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgICAgIHNlbGYudmVyYm9zZSA9IF9sb2dQcm94eSgndmVyYm9zZScpO1xuICAgICAgICBzZWxmLmRlYnVnID0gX2xvZ1Byb3h5KCdkZWJ1ZycpO1xuICAgICAgICBzZWxmLmluZm8gPSBfbG9nUHJveHkoJ2luZm8nKTtcbiAgICAgICAgc2VsZi53YXJuID0gX2xvZ1Byb3h5KCd3YXJuJyk7XG4gICAgICAgIHNlbGYuZXJyb3IgPSBfbG9nUHJveHkoJ2Vycm9yJyk7XG4gICAgfVxuICAgIC8qKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRGlhZ0FQSSBBUEkgKi9cbiAgICBEaWFnQVBJLmluc3RhbmNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBEaWFnQVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH07XG4gICAgcmV0dXJuIERpYWdBUEk7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqIEdldCBhIGtleSB0byB1bmlxdWVseSBpZGVudGlmeSBhIGNvbnRleHQgdmFsdWUgKi9cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHRLZXkoZGVzY3JpcHRpb24pIHtcbiAgICAvLyBUaGUgc3BlY2lmaWNhdGlvbiBzdGF0ZXMgdGhhdCBmb3IgdGhlIHNhbWUgaW5wdXQsIG11bHRpcGxlIGNhbGxzIHNob3VsZFxuICAgIC8vIHJldHVybiBkaWZmZXJlbnQga2V5cy4gRHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhlIEpTIGRlcGVuZGVuY3kgbWFuYWdlbWVudFxuICAgIC8vIHN5c3RlbSwgdGhpcyBjcmVhdGVzIHByb2JsZW1zIHdoZXJlIG11bHRpcGxlIHZlcnNpb25zIG9mIHNvbWUgcGFja2FnZVxuICAgIC8vIGNvdWxkIGhvbGQgZGlmZmVyZW50IGtleXMgZm9yIHRoZSBzYW1lIHByb3BlcnR5LlxuICAgIC8vXG4gICAgLy8gVGhlcmVmb3JlLCB3ZSB1c2UgU3ltYm9sLmZvciB3aGljaCByZXR1cm5zIHRoZSBzYW1lIGtleSBmb3IgdGhlIHNhbWUgaW5wdXQuXG4gICAgcmV0dXJuIFN5bWJvbC5mb3IoZGVzY3JpcHRpb24pO1xufVxudmFyIEJhc2VDb250ZXh0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdCBhIG5ldyBjb250ZXh0IHdoaWNoIGluaGVyaXRzIHZhbHVlcyBmcm9tIGFuIG9wdGlvbmFsIHBhcmVudCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmVudENvbnRleHQgYSBjb250ZXh0IGZyb20gd2hpY2ggdG8gaW5oZXJpdCB2YWx1ZXNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBCYXNlQ29udGV4dChwYXJlbnRDb250ZXh0KSB7XG4gICAgICAgIC8vIGZvciBtaW5pZmljYXRpb25cbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBzZWxmLl9jdXJyZW50Q29udGV4dCA9IHBhcmVudENvbnRleHQgPyBuZXcgTWFwKHBhcmVudENvbnRleHQpIDogbmV3IE1hcCgpO1xuICAgICAgICBzZWxmLmdldFZhbHVlID0gZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gc2VsZi5fY3VycmVudENvbnRleHQuZ2V0KGtleSk7IH07XG4gICAgICAgIHNlbGYuc2V0VmFsdWUgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgQmFzZUNvbnRleHQoc2VsZi5fY3VycmVudENvbnRleHQpO1xuICAgICAgICAgICAgY29udGV4dC5fY3VycmVudENvbnRleHQuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIH07XG4gICAgICAgIHNlbGYuZGVsZXRlVmFsdWUgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBCYXNlQ29udGV4dChzZWxmLl9jdXJyZW50Q29udGV4dCk7XG4gICAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50Q29udGV4dC5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gQmFzZUNvbnRleHQ7XG59KCkpO1xuLyoqIFRoZSByb290IGNvbnRleHQgaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXJlbnQgY29udGV4dCB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBjb250ZXh0ICovXG52YXIgUk9PVF9DT05URVhUID0gbmV3IEJhc2VDb250ZXh0KCk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19yZWFkJDEgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSQxID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG52YXIgTm9vcENvbnRleHRNYW5hZ2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BDb250ZXh0TWFuYWdlcigpIHtcbiAgICB9XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS5hY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBST09UX0NPTlRFWFQ7XG4gICAgfTtcbiAgICBOb29wQ29udGV4dE1hbmFnZXIucHJvdG90eXBlLndpdGggPSBmdW5jdGlvbiAoX2NvbnRleHQsIGZuLCB0aGlzQXJnKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMzsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gM10gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmbi5jYWxsLmFwcGx5KGZuLCBfX3NwcmVhZEFycmF5JDEoW3RoaXNBcmddLCBfX3JlYWQkMShhcmdzKSwgZmFsc2UpKTtcbiAgICB9O1xuICAgIE5vb3BDb250ZXh0TWFuYWdlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChfY29udGV4dCwgdGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfTtcbiAgICBOb29wQ29udGV4dE1hbmFnZXIucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBOb29wQ29udGV4dE1hbmFnZXIucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIE5vb3BDb250ZXh0TWFuYWdlcjtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19yZWFkID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufTtcbnZhciBBUElfTkFNRSQxID0gJ2NvbnRleHQnO1xudmFyIE5PT1BfQ09OVEVYVF9NQU5BR0VSID0gbmV3IE5vb3BDb250ZXh0TWFuYWdlcigpO1xuLyoqXG4gKiBTaW5nbGV0b24gb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSBPcGVuVGVsZW1ldHJ5IENvbnRleHQgQVBJXG4gKi9cbnZhciBDb250ZXh0QVBJID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKiBFbXB0eSBwcml2YXRlIGNvbnN0cnVjdG9yIHByZXZlbnRzIGVuZCB1c2VycyBmcm9tIGNvbnN0cnVjdGluZyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgQVBJICovXG4gICAgZnVuY3Rpb24gQ29udGV4dEFQSSgpIHtcbiAgICB9XG4gICAgLyoqIEdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBDb250ZXh0IEFQSSAqL1xuICAgIENvbnRleHRBUEkuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IENvbnRleHRBUEkoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGN1cnJlbnQgY29udGV4dCBtYW5hZ2VyLlxuICAgICAqXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgY29udGV4dCBtYW5hZ2VyIHdhcyBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCwgZWxzZSBmYWxzZVxuICAgICAqL1xuICAgIENvbnRleHRBUEkucHJvdG90eXBlLnNldEdsb2JhbENvbnRleHRNYW5hZ2VyID0gZnVuY3Rpb24gKGNvbnRleHRNYW5hZ2VyKSB7XG4gICAgICAgIHJldHVybiByZWdpc3Rlckdsb2JhbChBUElfTkFNRSQxLCBjb250ZXh0TWFuYWdlciwgRGlhZ0FQSS5pbnN0YW5jZSgpKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEdldCB0aGUgY3VycmVudGx5IGFjdGl2ZSBjb250ZXh0XG4gICAgICovXG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5hY3RpdmUoKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEV4ZWN1dGUgYSBmdW5jdGlvbiB3aXRoIGFuIGFjdGl2ZSBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIGJlIGFjdGl2ZSBkdXJpbmcgZnVuY3Rpb24gZXhlY3V0aW9uXG4gICAgICogQHBhcmFtIGZuIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgaW4gYSBjb250ZXh0XG4gICAgICogQHBhcmFtIHRoaXNBcmcgb3B0aW9uYWwgcmVjZWl2ZXIgdG8gYmUgdXNlZCBmb3IgY2FsbGluZyBmblxuICAgICAqIEBwYXJhbSBhcmdzIG9wdGlvbmFsIGFyZ3VtZW50cyBmb3J3YXJkZWQgdG8gZm5cbiAgICAgKi9cbiAgICBDb250ZXh0QVBJLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24gKGNvbnRleHQsIGZuLCB0aGlzQXJnKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAzOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAzXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkpLndpdGguYXBwbHkoX2EsIF9fc3ByZWFkQXJyYXkoW2NvbnRleHQsIGZuLCB0aGlzQXJnXSwgX19yZWFkKGFyZ3MpLCBmYWxzZSkpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQmluZCBhIGNvbnRleHQgdG8gYSB0YXJnZXQgZnVuY3Rpb24gb3IgZXZlbnQgZW1pdHRlclxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBiaW5kIHRvIHRoZSBldmVudCBlbWl0dGVyIG9yIGZ1bmN0aW9uLiBEZWZhdWx0cyB0byB0aGUgY3VycmVudGx5IGFjdGl2ZSBjb250ZXh0XG4gICAgICogQHBhcmFtIHRhcmdldCBmdW5jdGlvbiBvciBldmVudCBlbWl0dGVyIHRvIGJpbmRcbiAgICAgKi9cbiAgICBDb250ZXh0QVBJLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGNvbnRleHQsIHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5iaW5kKGNvbnRleHQsIHRhcmdldCk7XG4gICAgfTtcbiAgICBDb250ZXh0QVBJLnByb3RvdHlwZS5fZ2V0Q29udGV4dE1hbmFnZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRHbG9iYWwoQVBJX05BTUUkMSkgfHwgTk9PUF9DT05URVhUX01BTkFHRVI7XG4gICAgfTtcbiAgICAvKiogRGlzYWJsZSBhbmQgcmVtb3ZlIHRoZSBnbG9iYWwgY29udGV4dCBtYW5hZ2VyICovXG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5kaXNhYmxlKCk7XG4gICAgICAgIHVucmVnaXN0ZXJHbG9iYWwoQVBJX05BTUUkMSwgRGlhZ0FQSS5pbnN0YW5jZSgpKTtcbiAgICB9O1xuICAgIHJldHVybiBDb250ZXh0QVBJO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBUcmFjZUZsYWdzO1xuKGZ1bmN0aW9uIChUcmFjZUZsYWdzKSB7XG4gICAgLyoqIFJlcHJlc2VudHMgbm8gZmxhZyBzZXQuICovXG4gICAgVHJhY2VGbGFnc1tUcmFjZUZsYWdzW1wiTk9ORVwiXSA9IDBdID0gXCJOT05FXCI7XG4gICAgLyoqIEJpdCB0byByZXByZXNlbnQgd2hldGhlciB0cmFjZSBpcyBzYW1wbGVkIGluIHRyYWNlIGZsYWdzLiAqL1xuICAgIFRyYWNlRmxhZ3NbVHJhY2VGbGFnc1tcIlNBTVBMRURcIl0gPSAxXSA9IFwiU0FNUExFRFwiO1xufSkoVHJhY2VGbGFncyB8fCAoVHJhY2VGbGFncyA9IHt9KSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgSU5WQUxJRF9TUEFOSUQgPSAnMDAwMDAwMDAwMDAwMDAwMCc7XG52YXIgSU5WQUxJRF9UUkFDRUlEID0gJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJztcbnZhciBJTlZBTElEX1NQQU5fQ09OVEVYVCA9IHtcbiAgICB0cmFjZUlkOiBJTlZBTElEX1RSQUNFSUQsXG4gICAgc3BhbklkOiBJTlZBTElEX1NQQU5JRCxcbiAgICB0cmFjZUZsYWdzOiBUcmFjZUZsYWdzLk5PTkUsXG59O1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBUaGUgTm9uUmVjb3JkaW5nU3BhbiBpcyB0aGUgZGVmYXVsdCB7QGxpbmsgU3Bhbn0gdGhhdCBpcyB1c2VkIHdoZW4gbm8gU3BhblxuICogaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlLiBBbGwgb3BlcmF0aW9ucyBhcmUgbm8tb3AgaW5jbHVkaW5nIGNvbnRleHRcbiAqIHByb3BhZ2F0aW9uLlxuICovXG52YXIgTm9uUmVjb3JkaW5nU3BhbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb25SZWNvcmRpbmdTcGFuKF9zcGFuQ29udGV4dCkge1xuICAgICAgICBpZiAoX3NwYW5Db250ZXh0ID09PSB2b2lkIDApIHsgX3NwYW5Db250ZXh0ID0gSU5WQUxJRF9TUEFOX0NPTlRFWFQ7IH1cbiAgICAgICAgdGhpcy5fc3BhbkNvbnRleHQgPSBfc3BhbkNvbnRleHQ7XG4gICAgfVxuICAgIC8vIFJldHVybnMgYSBTcGFuQ29udGV4dC5cbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5zcGFuQ29udGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NwYW5Db250ZXh0O1xuICAgIH07XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoX2tleSwgX3ZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKF9hdHRyaWJ1dGVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5hZGRFdmVudCA9IGZ1bmN0aW9uIChfbmFtZSwgX2F0dHJpYnV0ZXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5hZGRMaW5rID0gZnVuY3Rpb24gKF9saW5rKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuYWRkTGlua3MgPSBmdW5jdGlvbiAoX2xpbmtzKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5zZXRTdGF0dXMgPSBmdW5jdGlvbiAoX3N0YXR1cykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUudXBkYXRlTmFtZSA9IGZ1bmN0aW9uIChfbmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKF9lbmRUaW1lKSB7IH07XG4gICAgLy8gaXNSZWNvcmRpbmcgYWx3YXlzIHJldHVybnMgZmFsc2UgZm9yIE5vblJlY29yZGluZ1NwYW4uXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuaXNSZWNvcmRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUucmVjb3JkRXhjZXB0aW9uID0gZnVuY3Rpb24gKF9leGNlcHRpb24sIF90aW1lKSB7IH07XG4gICAgcmV0dXJuIE5vblJlY29yZGluZ1NwYW47XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBzcGFuIGtleVxuICovXG52YXIgU1BBTl9LRVkgPSBjcmVhdGVDb250ZXh0S2V5KCdPcGVuVGVsZW1ldHJ5IENvbnRleHQgS2V5IFNQQU4nKTtcbi8qKlxuICogUmV0dXJuIHRoZSBzcGFuIGlmIG9uZSBleGlzdHNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIGdldCBzcGFuIGZyb21cbiAqL1xuZnVuY3Rpb24gZ2V0U3Bhbihjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQuZ2V0VmFsdWUoU1BBTl9LRVkpIHx8IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogR2V0cyB0aGUgc3BhbiBmcm9tIHRoZSBjdXJyZW50IGNvbnRleHQsIGlmIG9uZSBleGlzdHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFjdGl2ZVNwYW4oKSB7XG4gICAgcmV0dXJuIGdldFNwYW4oQ29udGV4dEFQSS5nZXRJbnN0YW5jZSgpLmFjdGl2ZSgpKTtcbn1cbi8qKlxuICogU2V0IHRoZSBzcGFuIG9uIGEgY29udGV4dFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gdXNlIGFzIHBhcmVudFxuICogQHBhcmFtIHNwYW4gc3BhbiB0byBzZXQgYWN0aXZlXG4gKi9cbmZ1bmN0aW9uIHNldFNwYW4oY29udGV4dCwgc3Bhbikge1xuICAgIHJldHVybiBjb250ZXh0LnNldFZhbHVlKFNQQU5fS0VZLCBzcGFuKTtcbn1cbi8qKlxuICogUmVtb3ZlIGN1cnJlbnQgc3BhbiBzdG9yZWQgaW4gdGhlIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIGRlbGV0ZSBzcGFuIGZyb21cbiAqL1xuZnVuY3Rpb24gZGVsZXRlU3Bhbihjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQuZGVsZXRlVmFsdWUoU1BBTl9LRVkpO1xufVxuLyoqXG4gKiBXcmFwIHNwYW4gY29udGV4dCBpbiBhIE5vb3BTcGFuIGFuZCBzZXQgYXMgc3BhbiBpbiBhIG5ld1xuICogY29udGV4dFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gc2V0IGFjdGl2ZSBzcGFuIG9uXG4gKiBAcGFyYW0gc3BhbkNvbnRleHQgc3BhbiBjb250ZXh0IHRvIGJlIHdyYXBwZWRcbiAqL1xuZnVuY3Rpb24gc2V0U3BhbkNvbnRleHQoY29udGV4dCwgc3BhbkNvbnRleHQpIHtcbiAgICByZXR1cm4gc2V0U3Bhbihjb250ZXh0LCBuZXcgTm9uUmVjb3JkaW5nU3BhbihzcGFuQ29udGV4dCkpO1xufVxuLyoqXG4gKiBHZXQgdGhlIHNwYW4gY29udGV4dCBvZiB0aGUgc3BhbiBpZiBpdCBleGlzdHMuXG4gKlxuICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBnZXQgdmFsdWVzIGZyb21cbiAqL1xuZnVuY3Rpb24gZ2V0U3BhbkNvbnRleHQoY29udGV4dCkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gZ2V0U3Bhbihjb250ZXh0KSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNwYW5Db250ZXh0KCk7XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgVkFMSURfVFJBQ0VJRF9SRUdFWCA9IC9eKFswLTlhLWZdezMyfSkkL2k7XG52YXIgVkFMSURfU1BBTklEX1JFR0VYID0gL15bMC05YS1mXXsxNn0kL2k7XG5mdW5jdGlvbiBpc1ZhbGlkVHJhY2VJZCh0cmFjZUlkKSB7XG4gICAgcmV0dXJuIFZBTElEX1RSQUNFSURfUkVHRVgudGVzdCh0cmFjZUlkKSAmJiB0cmFjZUlkICE9PSBJTlZBTElEX1RSQUNFSUQ7XG59XG5mdW5jdGlvbiBpc1ZhbGlkU3BhbklkKHNwYW5JZCkge1xuICAgIHJldHVybiBWQUxJRF9TUEFOSURfUkVHRVgudGVzdChzcGFuSWQpICYmIHNwYW5JZCAhPT0gSU5WQUxJRF9TUEFOSUQ7XG59XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHtAbGluayBTcGFuQ29udGV4dH0gaXMgdmFsaWQuXG4gKiBAcmV0dXJuIHRydWUgaWYgdGhpcyB7QGxpbmsgU3BhbkNvbnRleHR9IGlzIHZhbGlkLlxuICovXG5mdW5jdGlvbiBpc1NwYW5Db250ZXh0VmFsaWQoc3BhbkNvbnRleHQpIHtcbiAgICByZXR1cm4gKGlzVmFsaWRUcmFjZUlkKHNwYW5Db250ZXh0LnRyYWNlSWQpICYmIGlzVmFsaWRTcGFuSWQoc3BhbkNvbnRleHQuc3BhbklkKSk7XG59XG4vKipcbiAqIFdyYXAgdGhlIGdpdmVuIHtAbGluayBTcGFuQ29udGV4dH0gaW4gYSBuZXcgbm9uLXJlY29yZGluZyB7QGxpbmsgU3Bhbn1cbiAqXG4gKiBAcGFyYW0gc3BhbkNvbnRleHQgc3BhbiBjb250ZXh0IHRvIGJlIHdyYXBwZWRcbiAqIEByZXR1cm5zIGEgbmV3IG5vbi1yZWNvcmRpbmcge0BsaW5rIFNwYW59IHdpdGggdGhlIHByb3ZpZGVkIGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gd3JhcFNwYW5Db250ZXh0KHNwYW5Db250ZXh0KSB7XG4gICAgcmV0dXJuIG5ldyBOb25SZWNvcmRpbmdTcGFuKHNwYW5Db250ZXh0KTtcbn1cblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBjb250ZXh0QXBpID0gQ29udGV4dEFQSS5nZXRJbnN0YW5jZSgpO1xuLyoqXG4gKiBOby1vcCBpbXBsZW1lbnRhdGlvbnMgb2Yge0BsaW5rIFRyYWNlcn0uXG4gKi9cbnZhciBOb29wVHJhY2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BUcmFjZXIoKSB7XG4gICAgfVxuICAgIC8vIHN0YXJ0U3BhbiBzdGFydHMgYSBub29wIHNwYW4uXG4gICAgTm9vcFRyYWNlci5wcm90b3R5cGUuc3RhcnRTcGFuID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMsIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKGNvbnRleHQgPT09IHZvaWQgMCkgeyBjb250ZXh0ID0gY29udGV4dEFwaS5hY3RpdmUoKTsgfVxuICAgICAgICB2YXIgcm9vdCA9IEJvb2xlYW4ob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnJvb3QpO1xuICAgICAgICBpZiAocm9vdCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb25SZWNvcmRpbmdTcGFuKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhcmVudEZyb21Db250ZXh0ID0gY29udGV4dCAmJiBnZXRTcGFuQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgaWYgKGlzU3BhbkNvbnRleHQocGFyZW50RnJvbUNvbnRleHQpICYmXG4gICAgICAgICAgICBpc1NwYW5Db250ZXh0VmFsaWQocGFyZW50RnJvbUNvbnRleHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE5vblJlY29yZGluZ1NwYW4ocGFyZW50RnJvbUNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb25SZWNvcmRpbmdTcGFuKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE5vb3BUcmFjZXIucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uIChuYW1lLCBhcmcyLCBhcmczLCBhcmc0KSB7XG4gICAgICAgIHZhciBvcHRzO1xuICAgICAgICB2YXIgY3R4O1xuICAgICAgICB2YXIgZm47XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIGZuID0gYXJnMjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBvcHRzID0gYXJnMjtcbiAgICAgICAgICAgIGZuID0gYXJnMztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9wdHMgPSBhcmcyO1xuICAgICAgICAgICAgY3R4ID0gYXJnMztcbiAgICAgICAgICAgIGZuID0gYXJnNDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFyZW50Q29udGV4dCA9IGN0eCAhPT0gbnVsbCAmJiBjdHggIT09IHZvaWQgMCA/IGN0eCA6IGNvbnRleHRBcGkuYWN0aXZlKCk7XG4gICAgICAgIHZhciBzcGFuID0gdGhpcy5zdGFydFNwYW4obmFtZSwgb3B0cywgcGFyZW50Q29udGV4dCk7XG4gICAgICAgIHZhciBjb250ZXh0V2l0aFNwYW5TZXQgPSBzZXRTcGFuKHBhcmVudENvbnRleHQsIHNwYW4pO1xuICAgICAgICByZXR1cm4gY29udGV4dEFwaS53aXRoKGNvbnRleHRXaXRoU3BhblNldCwgZm4sIHVuZGVmaW5lZCwgc3Bhbik7XG4gICAgfTtcbiAgICByZXR1cm4gTm9vcFRyYWNlcjtcbn0oKSk7XG5mdW5jdGlvbiBpc1NwYW5Db250ZXh0KHNwYW5Db250ZXh0KSB7XG4gICAgcmV0dXJuICh0eXBlb2Ygc3BhbkNvbnRleHQgPT09ICdvYmplY3QnICYmXG4gICAgICAgIHR5cGVvZiBzcGFuQ29udGV4dFsnc3BhbklkJ10gPT09ICdzdHJpbmcnICYmXG4gICAgICAgIHR5cGVvZiBzcGFuQ29udGV4dFsndHJhY2VJZCddID09PSAnc3RyaW5nJyAmJlxuICAgICAgICB0eXBlb2Ygc3BhbkNvbnRleHRbJ3RyYWNlRmxhZ3MnXSA9PT0gJ251bWJlcicpO1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIE5PT1BfVFJBQ0VSID0gbmV3IE5vb3BUcmFjZXIoKTtcbi8qKlxuICogUHJveHkgdHJhY2VyIHByb3ZpZGVkIGJ5IHRoZSBwcm94eSB0cmFjZXIgcHJvdmlkZXJcbiAqL1xudmFyIFByb3h5VHJhY2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFByb3h5VHJhY2VyKF9wcm92aWRlciwgbmFtZSwgdmVyc2lvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLl9wcm92aWRlciA9IF9wcm92aWRlcjtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG4gICAgUHJveHlUcmFjZXIucHJvdG90eXBlLnN0YXJ0U3BhbiA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRUcmFjZXIoKS5zdGFydFNwYW4obmFtZSwgb3B0aW9ucywgY29udGV4dCk7XG4gICAgfTtcbiAgICBQcm94eVRyYWNlci5wcm90b3R5cGUuc3RhcnRBY3RpdmVTcGFuID0gZnVuY3Rpb24gKF9uYW1lLCBfb3B0aW9ucywgX2NvbnRleHQsIF9mbikge1xuICAgICAgICB2YXIgdHJhY2VyID0gdGhpcy5fZ2V0VHJhY2VyKCk7XG4gICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KHRyYWNlci5zdGFydEFjdGl2ZVNwYW4sIHRyYWNlciwgYXJndW1lbnRzKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFRyeSB0byBnZXQgYSB0cmFjZXIgZnJvbSB0aGUgcHJveHkgdHJhY2VyIHByb3ZpZGVyLlxuICAgICAqIElmIHRoZSBwcm94eSB0cmFjZXIgcHJvdmlkZXIgaGFzIG5vIGRlbGVnYXRlLCByZXR1cm4gYSBub29wIHRyYWNlci5cbiAgICAgKi9cbiAgICBQcm94eVRyYWNlci5wcm90b3R5cGUuX2dldFRyYWNlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlbGVnYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRyYWNlciA9IHRoaXMuX3Byb3ZpZGVyLmdldERlbGVnYXRlVHJhY2VyKHRoaXMubmFtZSwgdGhpcy52ZXJzaW9uLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICBpZiAoIXRyYWNlcikge1xuICAgICAgICAgICAgcmV0dXJuIE5PT1BfVFJBQ0VSO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RlbGVnYXRlID0gdHJhY2VyO1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGU7XG4gICAgfTtcbiAgICByZXR1cm4gUHJveHlUcmFjZXI7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUge0BsaW5rIFRyYWNlclByb3ZpZGVyfSB3aGljaCByZXR1cm5zIGFuIGltcG90ZW50XG4gKiBUcmFjZXIgZm9yIGFsbCBjYWxscyB0byBgZ2V0VHJhY2VyYC5cbiAqXG4gKiBBbGwgb3BlcmF0aW9ucyBhcmUgbm8tb3AuXG4gKi9cbnZhciBOb29wVHJhY2VyUHJvdmlkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTm9vcFRyYWNlclByb3ZpZGVyKCkge1xuICAgIH1cbiAgICBOb29wVHJhY2VyUHJvdmlkZXIucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uIChfbmFtZSwgX3ZlcnNpb24sIF9vcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgTm9vcFRyYWNlcigpO1xuICAgIH07XG4gICAgcmV0dXJuIE5vb3BUcmFjZXJQcm92aWRlcjtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgTk9PUF9UUkFDRVJfUFJPVklERVIgPSBuZXcgTm9vcFRyYWNlclByb3ZpZGVyKCk7XG4vKipcbiAqIFRyYWNlciBwcm92aWRlciB3aGljaCBwcm92aWRlcyB7QGxpbmsgUHJveHlUcmFjZXJ9cy5cbiAqXG4gKiBCZWZvcmUgYSBkZWxlZ2F0ZSBpcyBzZXQsIHRyYWNlcnMgcHJvdmlkZWQgYXJlIE5vT3AuXG4gKiAgIFdoZW4gYSBkZWxlZ2F0ZSBpcyBzZXQsIHRyYWNlcyBhcmUgcHJvdmlkZWQgZnJvbSB0aGUgZGVsZWdhdGUuXG4gKiAgIFdoZW4gYSBkZWxlZ2F0ZSBpcyBzZXQgYWZ0ZXIgdHJhY2VycyBoYXZlIGFscmVhZHkgYmVlbiBwcm92aWRlZCxcbiAqICAgYWxsIHRyYWNlcnMgYWxyZWFkeSBwcm92aWRlZCB3aWxsIHVzZSB0aGUgcHJvdmlkZWQgZGVsZWdhdGUgaW1wbGVtZW50YXRpb24uXG4gKi9cbnZhciBQcm94eVRyYWNlclByb3ZpZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFByb3h5VHJhY2VyUHJvdmlkZXIoKSB7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBhIHtAbGluayBQcm94eVRyYWNlcn1cbiAgICAgKi9cbiAgICBQcm94eVRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbiAobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5nZXREZWxlZ2F0ZVRyYWNlcihuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbmV3IFByb3h5VHJhY2VyKHRoaXMsIG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpKTtcbiAgICB9O1xuICAgIFByb3h5VHJhY2VyUHJvdmlkZXIucHJvdG90eXBlLmdldERlbGVnYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLl9kZWxlZ2F0ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogTk9PUF9UUkFDRVJfUFJPVklERVI7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGRlbGVnYXRlIHRyYWNlciBwcm92aWRlclxuICAgICAqL1xuICAgIFByb3h5VHJhY2VyUHJvdmlkZXIucHJvdG90eXBlLnNldERlbGVnYXRlID0gZnVuY3Rpb24gKGRlbGVnYXRlKSB7XG4gICAgICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgfTtcbiAgICBQcm94eVRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5nZXREZWxlZ2F0ZVRyYWNlciA9IGZ1bmN0aW9uIChuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuX2RlbGVnYXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0VHJhY2VyKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpO1xuICAgIH07XG4gICAgcmV0dXJuIFByb3h5VHJhY2VyUHJvdmlkZXI7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIFNwYW5LaW5kO1xuKGZ1bmN0aW9uIChTcGFuS2luZCkge1xuICAgIC8qKiBEZWZhdWx0IHZhbHVlLiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBpcyB1c2VkIGludGVybmFsbHkuICovXG4gICAgU3BhbktpbmRbU3BhbktpbmRbXCJJTlRFUk5BTFwiXSA9IDBdID0gXCJJTlRFUk5BTFwiO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBzcGFuIGNvdmVycyBzZXJ2ZXItc2lkZSBoYW5kbGluZyBvZiBhbiBSUEMgb3Igb3RoZXJcbiAgICAgKiByZW1vdGUgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIlNFUlZFUlwiXSA9IDFdID0gXCJTRVJWRVJcIjtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBjb3ZlcnMgdGhlIGNsaWVudC1zaWRlIHdyYXBwZXIgYXJvdW5kIGFuIFJQQyBvclxuICAgICAqIG90aGVyIHJlbW90ZSByZXF1ZXN0LlxuICAgICAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiQ0xJRU5UXCJdID0gMl0gPSBcIkNMSUVOVFwiO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBzcGFuIGRlc2NyaWJlcyBwcm9kdWNlciBzZW5kaW5nIGEgbWVzc2FnZSB0byBhXG4gICAgICogYnJva2VyLiBVbmxpa2UgY2xpZW50IGFuZCBzZXJ2ZXIsIHRoZXJlIGlzIG5vIGRpcmVjdCBjcml0aWNhbCBwYXRoIGxhdGVuY3lcbiAgICAgKiByZWxhdGlvbnNoaXAgYmV0d2VlbiBwcm9kdWNlciBhbmQgY29uc3VtZXIgc3BhbnMuXG4gICAgICovXG4gICAgU3BhbktpbmRbU3BhbktpbmRbXCJQUk9EVUNFUlwiXSA9IDNdID0gXCJQUk9EVUNFUlwiO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBzcGFuIGRlc2NyaWJlcyBjb25zdW1lciByZWNlaXZpbmcgYSBtZXNzYWdlIGZyb20gYVxuICAgICAqIGJyb2tlci4gVW5saWtlIGNsaWVudCBhbmQgc2VydmVyLCB0aGVyZSBpcyBubyBkaXJlY3QgY3JpdGljYWwgcGF0aCBsYXRlbmN5XG4gICAgICogcmVsYXRpb25zaGlwIGJldHdlZW4gcHJvZHVjZXIgYW5kIGNvbnN1bWVyIHNwYW5zLlxuICAgICAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiQ09OU1VNRVJcIl0gPSA0XSA9IFwiQ09OU1VNRVJcIjtcbn0pKFNwYW5LaW5kIHx8IChTcGFuS2luZCA9IHt9KSk7XG5cbi8qKlxuICogQW4gZW51bWVyYXRpb24gb2Ygc3RhdHVzIGNvZGVzLlxuICovXG52YXIgU3BhblN0YXR1c0NvZGU7XG4oZnVuY3Rpb24gKFNwYW5TdGF0dXNDb2RlKSB7XG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc3RhdHVzLlxuICAgICAqL1xuICAgIFNwYW5TdGF0dXNDb2RlW1NwYW5TdGF0dXNDb2RlW1wiVU5TRVRcIl0gPSAwXSA9IFwiVU5TRVRcIjtcbiAgICAvKipcbiAgICAgKiBUaGUgb3BlcmF0aW9uIGhhcyBiZWVuIHZhbGlkYXRlZCBieSBhbiBBcHBsaWNhdGlvbiBkZXZlbG9wZXIgb3JcbiAgICAgKiBPcGVyYXRvciB0byBoYXZlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXG4gICAgICovXG4gICAgU3BhblN0YXR1c0NvZGVbU3BhblN0YXR1c0NvZGVbXCJPS1wiXSA9IDFdID0gXCJPS1wiO1xuICAgIC8qKlxuICAgICAqIFRoZSBvcGVyYXRpb24gY29udGFpbnMgYW4gZXJyb3IuXG4gICAgICovXG4gICAgU3BhblN0YXR1c0NvZGVbU3BhblN0YXR1c0NvZGVbXCJFUlJPUlwiXSA9IDJdID0gXCJFUlJPUlwiO1xufSkoU3BhblN0YXR1c0NvZGUgfHwgKFNwYW5TdGF0dXNDb2RlID0ge30pKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIFNwbGl0IG1vZHVsZS1sZXZlbCB2YXJpYWJsZSBkZWZpbml0aW9uIGludG8gc2VwYXJhdGUgZmlsZXMgdG8gYWxsb3dcbi8vIHRyZWUtc2hha2luZyBvbiBlYWNoIGFwaSBpbnN0YW5jZS5cbi8qKiBFbnRyeXBvaW50IGZvciBjb250ZXh0IEFQSSAqL1xudmFyIGNvbnRleHQgPSBDb250ZXh0QVBJLmdldEluc3RhbmNlKCk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgQVBJX05BTUUgPSAndHJhY2UnO1xuLyoqXG4gKiBTaW5nbGV0b24gb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSBPcGVuVGVsZW1ldHJ5IFRyYWNpbmcgQVBJXG4gKi9cbnZhciBUcmFjZUFQSSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKiogRW1wdHkgcHJpdmF0ZSBjb25zdHJ1Y3RvciBwcmV2ZW50cyBlbmQgdXNlcnMgZnJvbSBjb25zdHJ1Y3RpbmcgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEFQSSAqL1xuICAgIGZ1bmN0aW9uIFRyYWNlQVBJKCkge1xuICAgICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyID0gbmV3IFByb3h5VHJhY2VyUHJvdmlkZXIoKTtcbiAgICAgICAgdGhpcy53cmFwU3BhbkNvbnRleHQgPSB3cmFwU3BhbkNvbnRleHQ7XG4gICAgICAgIHRoaXMuaXNTcGFuQ29udGV4dFZhbGlkID0gaXNTcGFuQ29udGV4dFZhbGlkO1xuICAgICAgICB0aGlzLmRlbGV0ZVNwYW4gPSBkZWxldGVTcGFuO1xuICAgICAgICB0aGlzLmdldFNwYW4gPSBnZXRTcGFuO1xuICAgICAgICB0aGlzLmdldEFjdGl2ZVNwYW4gPSBnZXRBY3RpdmVTcGFuO1xuICAgICAgICB0aGlzLmdldFNwYW5Db250ZXh0ID0gZ2V0U3BhbkNvbnRleHQ7XG4gICAgICAgIHRoaXMuc2V0U3BhbiA9IHNldFNwYW47XG4gICAgICAgIHRoaXMuc2V0U3BhbkNvbnRleHQgPSBzZXRTcGFuQ29udGV4dDtcbiAgICB9XG4gICAgLyoqIEdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBUcmFjZSBBUEkgKi9cbiAgICBUcmFjZUFQSS5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5faW5zdGFuY2UgPSBuZXcgVHJhY2VBUEkoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGN1cnJlbnQgZ2xvYmFsIHRyYWNlci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHRyYWNlciBwcm92aWRlciB3YXMgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQsIGVsc2UgZmFsc2VcbiAgICAgKi9cbiAgICBUcmFjZUFQSS5wcm90b3R5cGUuc2V0R2xvYmFsVHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbiAocHJvdmlkZXIpIHtcbiAgICAgICAgdmFyIHN1Y2Nlc3MgPSByZWdpc3Rlckdsb2JhbChBUElfTkFNRSwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciwgRGlhZ0FQSS5pbnN0YW5jZSgpKTtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIuc2V0RGVsZWdhdGUocHJvdmlkZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZ2xvYmFsIHRyYWNlciBwcm92aWRlci5cbiAgICAgKi9cbiAgICBUcmFjZUFQSS5wcm90b3R5cGUuZ2V0VHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRHbG9iYWwoQVBJX05BTUUpIHx8IHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXI7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgdHJhY2VyIGZyb20gdGhlIGdsb2JhbCB0cmFjZXIgcHJvdmlkZXIuXG4gICAgICovXG4gICAgVHJhY2VBUEkucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uIChuYW1lLCB2ZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRyYWNlclByb3ZpZGVyKCkuZ2V0VHJhY2VyKG5hbWUsIHZlcnNpb24pO1xuICAgIH07XG4gICAgLyoqIFJlbW92ZSB0aGUgZ2xvYmFsIHRyYWNlciBwcm92aWRlciAqL1xuICAgIFRyYWNlQVBJLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB1bnJlZ2lzdGVyR2xvYmFsKEFQSV9OQU1FLCBEaWFnQVBJLmluc3RhbmNlKCkpO1xuICAgICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyID0gbmV3IFByb3h5VHJhY2VyUHJvdmlkZXIoKTtcbiAgICB9O1xuICAgIHJldHVybiBUcmFjZUFQSTtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBTcGxpdCBtb2R1bGUtbGV2ZWwgdmFyaWFibGUgZGVmaW5pdGlvbiBpbnRvIHNlcGFyYXRlIGZpbGVzIHRvIGFsbG93XG4vLyB0cmVlLXNoYWtpbmcgb24gZWFjaCBhcGkgaW5zdGFuY2UuXG4vKiogRW50cnlwb2ludCBmb3IgdHJhY2UgQVBJICovXG52YXIgdHJhY2UgPSBUcmFjZUFQSS5nZXRJbnN0YW5jZSgpO1xuXG5jb25zdCBjcmVhdGVDREVTcGFuID0gYXN5bmMgKGNkZUNvbm4sIGRhdGEsIG9wZXJhdGlvbikgPT4ge1xuICBjb25zdCB0cmFjZXIgPSB0cmFjZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpO1xuICBjb25zdCBwYXJlbnRDb250ZXh0ID0gY29udGV4dC5hY3RpdmUoKTtcbiAgY29uc3Qgc3BhbiA9IHRyYWNlci5zdGFydFNwYW4oXG4gICAgYGNkZS4ke2RhdGEudHlwZX1gLFxuICAgIHtcbiAgICAgIGtpbmQ6IFNwYW5LaW5kLkNMSUVOVCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgXCJtZXNzYWdlLnR5cGVcIjogZGF0YS50eXBlLFxuICAgICAgICAuLi5jZGVDb25uLnRyYWNpbmdDb250ZXh0ICYmIHtcbiAgICAgICAgICBcIm9qcy5jaGVja291dFNlY3VyZVRva2VuXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LmRldmljZVRva2VuLFxuICAgICAgICAgIFwib2pzLmZvcm1JZFwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LmZvcm1JZCxcbiAgICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQudmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5yZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LmJhc2VVcmwsXG4gICAgICAgICAgXCJvanMucmVmZXJyZXJcIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5yZWZlcnJlclxuICAgICAgICB9LFxuICAgICAgICBcImNkZS5tZXNzYWdlLnR5cGVcIjogZGF0YS50eXBlLFxuICAgICAgICBcImNkZS5tZXNzYWdlLnBheWxvYWRcIjogSlNPTi5zdHJpbmdpZnkoZGF0YS5wYXlsb2FkKVxuICAgICAgfVxuICAgIH0sXG4gICAgcGFyZW50Q29udGV4dFxuICApO1xuICByZXR1cm4gY29udGV4dC53aXRoKHRyYWNlLnNldFNwYW4ocGFyZW50Q29udGV4dCwgc3BhbiksIGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3BlcmF0aW9uKCk7XG4gICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgbWVzc2FnZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIlxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc3Bhbi5lbmQoKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IGNyZWF0ZVRyYWNraW5nU3BhbiA9IGFzeW5jIChvcHRpb25zLCBvcGVyYXRpb24pID0+IHtcbiAgY29uc3QgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKTtcbiAgY29uc3QgcGFyZW50Q29udGV4dCA9IGNvbnRleHQuYWN0aXZlKCk7XG4gIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKFxuICAgIGBmb3JtLiR7b3B0aW9ucy5zcGFuTmFtZX1gLFxuICAgIHtcbiAgICAgIGtpbmQ6IFNwYW5LaW5kLkNMSUVOVCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiBvcHRpb25zLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IG9wdGlvbnMuZGV2aWNlVG9rZW4sXG4gICAgICAgIFwib2pzLmZvcm1JZFwiOiBvcHRpb25zLmZvcm1JZCxcbiAgICAgICAgXCJvanMudmVyc2lvblwiOiBvcHRpb25zLnZlcnNpb24sXG4gICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiBvcHRpb25zLnJlbGVhc2VWZXJzaW9uLFxuICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiBvcHRpb25zLmJhc2VVcmwsXG4gICAgICAgIFwib2pzLnJlZmVycmVyXCI6IG9wdGlvbnMucmVmZXJyZXIsXG4gICAgICAgIC4uLm9wdGlvbnMucGF5bWVudFJvdXRlSWQgJiYgeyBcInBheW1lbnQucm91dGVfaWRcIjogb3B0aW9ucy5wYXltZW50Um91dGVJZCB9XG4gICAgICB9XG4gICAgfSxcbiAgICBwYXJlbnRDb250ZXh0XG4gICk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3BlcmF0aW9uKCk7XG4gICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCI7XG4gICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2VcbiAgICB9KTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfSBmaW5hbGx5IHtcbiAgICBzcGFuLmVuZCgpO1xuICB9XG59O1xuXG5jbGFzcyBDZGVFcnJvciBleHRlbmRzIEN1c3RvbUVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBjb25zdCBmcmllbmRseU1lc3NhZ2UgPSBgJHtyZXNwb25zZS5tZXNzYWdlfWA7XG4gICAgc3VwZXIoZnJpZW5kbHlNZXNzYWdlKTtcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IHF1ZXJ5Q0RFID0gYXN5bmMgKGNkZUNvbm4sIGRhdGEsIHJlc3BvbnNlU2NoZW1hLCB0cmFja2luZ0tleSkgPT4ge1xuICByZXR1cm4gY3JlYXRlQ0RFU3BhbihjZGVDb25uLCBkYXRhLCBhc3luYyAoKSA9PiB7XG4gICAgaWYgKHRyYWNraW5nS2V5KSB7XG4gICAgICB0cmFjayh0cmFja2luZ0tleSwge1xuICAgICAgICAuLi5kYXRhXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjZGVDb25uLnNlbmQoZGF0YSk7XG4gICAgaWYgKGlzQ0RFUmVzcG9uc2VFcnJvcihyZXNwb25zZSkpIHtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBuYXZpZ2F0b3IuY29ubmVjdGlvbjtcbiAgICAgIHRyYWNrKFwiY2RlX3Jlc3BvbnNlX2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3JfbWVzc2FnZTogcmVzcG9uc2UubWVzc2FnZSxcbiAgICAgICAgbWVzc2FnZV90eXBlOiBkYXRhLnR5cGUsXG4gICAgICAgIHVzZXJfYWdlbnQ6IG5hdmlnYXRvci51c2VyQWdlbnQsXG4gICAgICAgIG9ubGluZTogbmF2aWdhdG9yLm9uTGluZSxcbiAgICAgICAgaGFzX2ZvY3VzOiBkb2N1bWVudC5oYXNGb2N1cygpLFxuICAgICAgICBocmVmOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgICAgZG9jdW1lbnRfdmlzaWJpbGl0eV9zdGF0ZTogZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlLFxuICAgICAgICBjb25uZWN0aW9uX2Rvd25saW5rOiBjb25uZWN0aW9uPy5kb3dubGluayxcbiAgICAgICAgY29ubmVjdGlvbl9lZmZlY3RpdmVfdHlwZTogY29ubmVjdGlvbj8uZWZmZWN0aXZlVHlwZSxcbiAgICAgICAgY29ubmVjdGlvbl9ydHQ6IGNvbm5lY3Rpb24/LnJ0dCxcbiAgICAgICAgY29ubmVjdGlvbl9zYXZlX2RhdGE6IGNvbm5lY3Rpb24/LnNhdmVEYXRhXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBDZGVFcnJvcihyZXNwb25zZSk7XG4gICAgfVxuICAgIGlmICghY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEocmVzcG9uc2UsIHJlc3BvbnNlU2NoZW1hKSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2VTY2hlbWEuc2FmZVBhcnNlKHJlc3BvbnNlKTtcbiAgICAgIGlmIChyZXN1bHQuc3VjY2VzcykgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJPSlMgcXVlcnlBcGkgZ290IGEgc2NoZW1hIGVycm9yLiBFeHBlY3RlZCBzY2hlbWE6XCIsIHJlc3BvbnNlU2NoZW1hLCBcIkFjdHVhbDpcIiwgcmVzcG9uc2UpO1xuICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgIH1cbiAgICBpZiAodHJhY2tpbmdLZXkpIHtcbiAgICAgIHRyYWNrKHRyYWNraW5nS2V5LCB7XG4gICAgICAgIC4uLnJlc3BvbnNlXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9KTtcbn07XG5jb25zdCBjaGVja0lmQ29uZm9ybXNUb1NjaGVtYSA9ICh2YWx1ZSwgc2NoZW1hKSA9PiB7XG4gIHJldHVybiBzY2hlbWEuc2FmZVBhcnNlKHZhbHVlKS5zdWNjZXNzO1xufTtcbmNvbnN0IGlzQ0RFUmVzcG9uc2VFcnJvciA9IChyZXNwb25zZSkgPT4ge1xuICByZXR1cm4gQ0RFUmVzcG9uc2VFcnJvci5zYWZlUGFyc2UocmVzcG9uc2UpLnN1Y2Nlc3M7XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRQcmV2aWV3ID0gYXN5bmMgKGNkZUNvbm4sIHJlcXVlc3QpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByZXF1ZXN0IH0sIFByZXZpZXdDaGVja291dFJlc3BvbnNlKTtcbn07XG5jb25zdCBnZXRQcmVmaWxsID0gYXN5bmMgKGNkZUNvbm4pID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBQYXltZW50Rm9ybVByZWZpbGwpO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwidjJfc3RhcnRfcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSxcbiAgICBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UsXG4gICAgXCJzdGFydF9wYXltZW50X2Zsb3dcIlxuICApO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCIsIHBheWxvYWQgfSxcbiAgICBTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSxcbiAgICBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIlxuICApO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUiA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHRyYWNrKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCB7XG4gICAgLi4ucGF5bG9hZFxuICB9KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZCB9LCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICB0cmFjayhcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJfcmVzdWx0XCIsIHtcbiAgICAuLi5yZXN1bHRcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuY29uc3QgY29uZmlybVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImNvbmZpcm1fcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSxcbiAgICBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSxcbiAgICBcImNvbmZpcm1fcGF5bWVudF9mbG93XCJcbiAgKTtcbn07XG5jb25zdCBmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkIH0sXG4gICAgU2V0dXBDaGVja291dFJlc3BvbnNlLFxuICAgIFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIlxuICApO1xufTtcbmNvbnN0IGNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkIH0sXG4gICAgQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSxcbiAgICBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiXG4gICk7XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRWYWx1ZSA9IGFzeW5jIChjZGVDb25uLCBzZWN1cmVUb2tlbiwgcHJvbW9Db2RlKSA9PiB7XG4gIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlldyhjZGVDb25uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBzZWN1cmVUb2tlbixcbiAgICBwcm9tb3Rpb25fY29kZTogcHJvbW9Db2RlXG4gIH0pO1xuICBjb25zdCBjdXJyZW5jaWVzID0gbmV3IFNldChjaGVja291dFByZXZpZXcucHJldmlldy5pbnZvaWNlcy5tYXAoKGludikgPT4gaW52LmN1cnJlbmN5KSk7XG4gIGlmIChjdXJyZW5jaWVzLnNpemUgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHtjdXJyZW5jaWVzLnNpemV9YCk7XG4gIH1cbiAgY29uc3QgY3VycmVuY3kgPSBjdXJyZW5jaWVzLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiO1xuICBjb25zdCBhbW91bnRBdG9tID0gc3VtKGNoZWNrb3V0UHJldmlldy5wcmV2aWV3Lmludm9pY2VzLm1hcCgoaW52KSA9PiBpbnYucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3ksXG4gICAgYW1vdW50QXRvbVxuICB9O1xufTtcbmNvbnN0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudCA9IGFzeW5jIChjZGVDb25uLCBzZWN1cmVUb2tlbiwgaXNTZXR1cE1vZGUsIHByb21vQ29kZSkgPT4ge1xuICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB9IGVsc2Uge1xuICAgIHByb21vQ29kZSA9ICFwcm9tb0NvZGUgPyB2b2lkIDAgOiBwcm9tb0NvZGU7XG4gICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJwcm9tb0NvZGVcIikgJiYgIXByb21vQ29kZSkge1xuICAgICAgcHJvbW9Db2RlID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInByb21vQ29kZVwiKTtcbiAgICB9XG4gICAgY29uc3QgY2hlY2tvdXRQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRWYWx1ZShjZGVDb25uLCBzZWN1cmVUb2tlbiwgcHJvbW9Db2RlKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBjaGVja291dFByZXZpZXcuYW1vdW50QXRvbSwgY3VycmVuY3k6IGNoZWNrb3V0UHJldmlldy5jdXJyZW5jeSB9O1xuICB9XG59O1xuY29uc3QgdG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyA9IGFzeW5jIChhbGxDZGVDb25uZWN0aW9ucywgcGF5bG9hZCkgPT4ge1xuICBpZiAoYWxsQ2RlQ29ubmVjdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgfVxuICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKGFsbENkZUNvbm5lY3Rpb25zLnZhbHVlcygpKS5tYXAoXG4gICAgICAoY2RlQ29ubikgPT4gcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZCB9LCBUb2tlbml6ZUNhcmRSZXNwb25zZSlcbiAgICApXG4gICk7XG4gIHJldHVybiByZXNwb25zZXM7XG59O1xuY29uc3QgY2hlY2tvdXRDYXJkRWxlbWVudHMgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiLCBwYXlsb2FkIH0sXG4gICAgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UsXG4gICAgXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCJcbiAgKTtcbn07XG5jb25zdCBzZXR1cENoZWNrb3V0ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkIH0sIFNldHVwQ2hlY2tvdXRSZXNwb25zZSwgXCJzZXR1cF9jaGVja291dFwiKTtcbn07XG5jb25zdCBwZXJmb3JtQ2hlY2tvdXQgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQgfSwgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UsIFwicGVyZm9ybV9jaGVja291dFwiKTtcbn07XG5jb25zdCBDREVfUE9MTElOR19JTlRFUlZBTCA9IDFlMztcbmNvbnN0IHBpbmdDZGVGb3JTdGF0dXMgPSBhc3luYyAoaWZyYW1lLCBjaGlsZE9yaWdpbiwgdHlwZSwgcmVzcG9uc2VNb2RlbCkgPT4ge1xuICBjb25zb2xlLmxvZyhjaGlsZE9yaWdpbik7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lLFxuICAgIGRlYnVnOiB0cnVlLFxuICAgIHRpbWVvdXQ6IENERV9QT0xMSU5HX0lOVEVSVkFMLFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KTtcbiAgY29uc3QgY29ubmVjdGlvbk9iaiA9IGF3YWl0IGNvbm5lY3Rpb24ucHJvbWlzZTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcXVlcnlDREUoY29ubmVjdGlvbk9iaiwgeyB0eXBlIH0sIHJlc3BvbnNlTW9kZWwpO1xuICBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuY29uc3QgcHJlcGFyZVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSxcbiAgICBQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSxcbiAgICBcInByZXBhcmVfcGF5bWVudF9mbG93XCJcbiAgKTtcbn07XG5jb25zdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUgPSBhc3luYyAoY2RlQ29ubiwgZXJyb3JNZXNzYWdlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHsgbWVzc2FnZTogZXJyb3JNZXNzYWdlIH07XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBxdWVyeUNERShcbiAgICAgIGNkZUNvbm4sXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQgfSxcbiAgICAgIENoZWNrb3V0U3RhbmRhcmRFcnJvclJlc3BvbnNlXG4gICAgKTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZXJyb3JfY29kZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBnZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGU6XCIsIGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgIHJldHVybiBcIlBBWU1FTlRfRkFJTEVEX0dFTkVSSUNcIjtcbiAgfVxufTtcbmNvbnN0IHNldFVzZXJEZXZpY2VUb2tlbiA9IGFzeW5jIChjZGVDb25uLCBkZXZpY2VUb2tlbikgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwic2V0X3VzZXJfZGV2aWNlX3Rva2VuXCIsIHBheWxvYWQ6IHsgZGV2aWNlX3Rva2VuOiBkZXZpY2VUb2tlbiB9IH0sXG4gICAgU2V0VXNlckRldmljZVRva2VuUmVzcG9uc2VcbiAgKTtcbn07XG5cbmNvbnN0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QgPSBhc3luYyAob2JqKSA9PiB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8ICFvYmopIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwaW5nID0geyB0eXBlOiBcInBpbmdcIiB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9iai5zZW5kKHBpbmcpO1xuICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpgLCBlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5jb25zdCBpc1Jlc3VsdFZhbGlkID0gKG9iaiwgaXNWYWxpZCkgPT4ge1xuICByZXR1cm4gISFvYmogJiYgaXNWYWxpZDtcbn07XG5cbmNvbnN0IEZSQU1FX0JBU0VfVVJMID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuXG4vLyBUaGVzZSB2YWx1ZXMgc2hvdWxkIE5FVkVSIGNoYW5nZS4gVGhlIHZhbHVlcyBhcmUgcHJlY2lzZWx5IGZvclxuLy8gZ2VuZXJhdGluZyBVTElEcy5cbmNvbnN0IEVOQ09ESU5HID0gXCIwMTIzNDU2Nzg5QUJDREVGR0hKS01OUFFSU1RWV1hZWlwiOyAvLyBDcm9ja2ZvcmQncyBCYXNlMzJcbmNvbnN0IEVOQ09ESU5HX0xFTiA9IDMyOyAvLyBmcm9tIEVOQ09ESU5HLmxlbmd0aDtcbmNvbnN0IFJBTkRPTV9MRU4gPSAxNjtcbmNvbnN0IFRJTUVfTEVOID0gMTA7XG5jb25zdCBUSU1FX01BWCA9IDI4MTQ3NDk3NjcxMDY1NTsgLy8gZnJvbSBNYXRoLnBvdygyLCA0OCkgLSAxO1xuXG52YXIgVUxJREVycm9yQ29kZTtcbihmdW5jdGlvbiAoVUxJREVycm9yQ29kZSkge1xuICAgIFVMSURFcnJvckNvZGVbXCJCYXNlMzJJbmNvcnJlY3RFbmNvZGluZ1wiXSA9IFwiQjMyX0VOQ19JTlZBTElEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkRlY29kZVRpbWVJbnZhbGlkQ2hhcmFjdGVyXCJdID0gXCJERUNfVElNRV9DSEFSXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkRlY29kZVRpbWVWYWx1ZU1hbGZvcm1lZFwiXSA9IFwiREVDX1RJTUVfTUFMRk9STUVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkVuY29kZVRpbWVOZWdhdGl2ZVwiXSA9IFwiRU5DX1RJTUVfTkVHXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkVuY29kZVRpbWVTaXplRXhjZWVkZWRcIl0gPSBcIkVOQ19USU1FX1NJWkVfRVhDRUVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZFwiXSA9IFwiRU5DX1RJTUVfTUFMRk9STUVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIlBSTkdEZXRlY3RGYWlsdXJlXCJdID0gXCJQUk5HX0RFVEVDVFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJVTElESW52YWxpZFwiXSA9IFwiVUxJRF9JTlZBTElEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIlVuZXhwZWN0ZWRcIl0gPSBcIlVORVhQRUNURURcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiVVVJREludmFsaWRcIl0gPSBcIlVVSURfSU5WQUxJRFwiO1xufSkoVUxJREVycm9yQ29kZSB8fCAoVUxJREVycm9yQ29kZSA9IHt9KSk7XG5jbGFzcyBVTElERXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoZXJyb3JDb2RlLCBtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKGAke21lc3NhZ2V9ICgke2Vycm9yQ29kZX0pYCk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiVUxJREVycm9yXCI7XG4gICAgICAgIHRoaXMuY29kZSA9IGVycm9yQ29kZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJhbmRvbUNoYXIocHJuZykge1xuICAgIC8vIEN1cnJlbnRseSBQUk5HcyBnZW5lcmF0ZSBmcmFjdGlvbnMgZnJvbSAwIHRvIF9sZXNzIHRoYW5fIDEsIHNvIG5vIFwiJVwiIGlzIG5lY2Vzc2FyeS5cbiAgICAvLyBIb3dldmVyLCBqdXN0IGluIGNhc2UgYSBmdXR1cmUgUFJORyBjYW4gZ2VuZXJhdGUgMSxcbiAgICAvLyB3ZSBhcmUgYXBwbHlpbmcgXCIlIEVOQ09ESU5HIExFTlwiIHRvIHdyYXAgYmFjayB0byB0aGUgZmlyc3QgY2hhcmFjdGVyXG4gICAgY29uc3QgcmFuZG9tUG9zaXRpb24gPSBNYXRoLmZsb29yKHBybmcoKSAqIEVOQ09ESU5HX0xFTikgJSBFTkNPRElOR19MRU47XG4gICAgcmV0dXJuIEVOQ09ESU5HLmNoYXJBdChyYW5kb21Qb3NpdGlvbik7XG59XG4vKipcbiAqIERldGVjdCB0aGUgYmVzdCBQUk5HIChwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IpXG4gKiBAcGFyYW0gcm9vdCBUaGUgcm9vdCB0byBjaGVjayBmcm9tIChnbG9iYWwvd2luZG93KVxuICogQHJldHVybnMgVGhlIFBSTkcgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0UFJORyhyb290KSB7XG4gICAgY29uc3Qgcm9vdExvb2t1cCA9IGRldGVjdFJvb3QoKTtcbiAgICBjb25zdCBnbG9iYWxDcnlwdG8gPSAocm9vdExvb2t1cCAmJiAocm9vdExvb2t1cC5jcnlwdG8gfHwgcm9vdExvb2t1cC5tc0NyeXB0bykpIHx8XG4gICAgICAgIChudWxsKTtcbiAgICBpZiAodHlwZW9mIGdsb2JhbENyeXB0bz8uZ2V0UmFuZG9tVmFsdWVzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDEpO1xuICAgICAgICAgICAgZ2xvYmFsQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhidWZmZXIpO1xuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclswXSAvIDB4ZmY7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBnbG9iYWxDcnlwdG8/LnJhbmRvbUJ5dGVzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuICgpID0+IGdsb2JhbENyeXB0by5yYW5kb21CeXRlcygxKS5yZWFkVUludDgoKSAvIDB4ZmY7XG4gICAgfVxuICAgIGVsc2UgO1xuICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5QUk5HRGV0ZWN0RmFpbHVyZSwgXCJGYWlsZWQgdG8gZmluZCBhIHJlbGlhYmxlIFBSTkdcIik7XG59XG5mdW5jdGlvbiBkZXRlY3RSb290KCkge1xuICAgIGlmIChpbldlYldvcmtlcigpKVxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4gd2luZG93O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4gZ2xvYmFsO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbFRoaXM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZW5jb2RlUmFuZG9tKGxlbiwgcHJuZykge1xuICAgIGxldCBzdHIgPSBcIlwiO1xuICAgIGZvciAoOyBsZW4gPiAwOyBsZW4tLSkge1xuICAgICAgICBzdHIgPSByYW5kb21DaGFyKHBybmcpICsgc3RyO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuLyoqXG4gKiBFbmNvZGUgdGhlIHRpbWUgcG9ydGlvbiBvZiBhIFVMSURcbiAqIEBwYXJhbSBub3cgVGhlIGN1cnJlbnQgdGltZXN0YW1wXG4gKiBAcGFyYW0gbGVuIExlbmd0aCB0byBnZW5lcmF0ZVxuICogQHJldHVybnMgVGhlIGVuY29kZWQgdGltZVxuICovXG5mdW5jdGlvbiBlbmNvZGVUaW1lKG5vdywgbGVuID0gVElNRV9MRU4pIHtcbiAgICBpZiAoaXNOYU4obm93KSkge1xuICAgICAgICB0aHJvdyBuZXcgVUxJREVycm9yKFVMSURFcnJvckNvZGUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkLCBgVGltZSBtdXN0IGJlIGEgbnVtYmVyOiAke25vd31gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm93ID4gVElNRV9NQVgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVTaXplRXhjZWVkZWQsIGBDYW5ub3QgZW5jb2RlIGEgdGltZSBsYXJnZXIgdGhhbiAke1RJTUVfTUFYfTogJHtub3d9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vdyA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVOZWdhdGl2ZSwgYFRpbWUgbXVzdCBiZSBwb3NpdGl2ZTogJHtub3d9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKE51bWJlci5pc0ludGVnZXIobm93KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhbiBpbnRlZ2VyOiAke25vd31gKTtcbiAgICB9XG4gICAgbGV0IG1vZCwgc3RyID0gXCJcIjtcbiAgICBmb3IgKGxldCBjdXJyZW50TGVuID0gbGVuOyBjdXJyZW50TGVuID4gMDsgY3VycmVudExlbi0tKSB7XG4gICAgICAgIG1vZCA9IG5vdyAlIEVOQ09ESU5HX0xFTjtcbiAgICAgICAgc3RyID0gRU5DT0RJTkcuY2hhckF0KG1vZCkgKyBzdHI7XG4gICAgICAgIG5vdyA9IChub3cgLSBtb2QpIC8gRU5DT0RJTkdfTEVOO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuZnVuY3Rpb24gaW5XZWJXb3JrZXIoKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIFVMSURcbiAqIEBwYXJhbSBzZWVkVGltZSBPcHRpb25hbCB0aW1lIHNlZWRcbiAqIEBwYXJhbSBwcm5nIE9wdGlvbmFsIFBSTkcgZnVuY3Rpb25cbiAqIEByZXR1cm5zIEEgVUxJRCBzdHJpbmdcbiAqIEBleGFtcGxlXG4gKiAgdWxpZCgpOyAvLyBcIjAxSE5aWEQwN001Q0VONVhBNjZFTVpTUlpXXCJcbiAqL1xuZnVuY3Rpb24gdWxpZChzZWVkVGltZSwgcHJuZykge1xuICAgIGNvbnN0IGN1cnJlbnRQUk5HID0gZGV0ZWN0UFJORygpO1xuICAgIGNvbnN0IHNlZWQgPSBEYXRlLm5vdygpIDtcbiAgICByZXR1cm4gZW5jb2RlVGltZShzZWVkLCBUSU1FX0xFTikgKyBlbmNvZGVSYW5kb20oUkFORE9NX0xFTiwgY3VycmVudFBSTkcpO1xufVxuXG5jb25zdCBDT09LSUVfTkFNRSA9IFwib3BfYW5hbHl0aWNzX2RldmljZV90b2tlblwiO1xuY29uc3QgZ2V0RGV2aWNlVG9rZW4gPSAoKSA9PiB7XG4gIGNvbnN0IGV4aXN0aW5nQ29va2llID0gZG9jdW1lbnQuY29va2llLnNwbGl0KFwiO1wiKS5maW5kKChjb29raWUpID0+IGNvb2tpZS5pbmNsdWRlcyhDT09LSUVfTkFNRSkpO1xuICBpZiAoZXhpc3RpbmdDb29raWUpIHtcbiAgICByZXR1cm4gZXhpc3RpbmdDb29raWUuc3BsaXQoXCI9XCIpWzFdO1xuICB9XG4gIGNvbnN0IHRva2VuID0gdWxpZCgpO1xuICBzZXREZXZpY2VUb2tlbih0b2tlbik7XG4gIHJldHVybiB0b2tlbjtcbn07XG5jb25zdCBzZXREZXZpY2VUb2tlbiA9ICh0b2tlbikgPT4ge1xuICBjb25zdCBvbmVZZWFyRnJvbU5vdyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpO1xuICBvbmVZZWFyRnJvbU5vdy5zZXRGdWxsWWVhcihvbmVZZWFyRnJvbU5vdy5nZXRGdWxsWWVhcigpICsgMSk7XG4gIGRvY3VtZW50LmNvb2tpZSA9IGAke0NPT0tJRV9OQU1FfT0ke3Rva2VufTsgcGF0aD0vOyBleHBpcmVzPSR7b25lWWVhckZyb21Ob3cudG9VVENTdHJpbmcoKX1gO1xufTtcblxuY29uc3QgZXh0cmFjdElzc3Vlc1BlckZpZWxkID0gKGVycm9yKSA9PiB7XG4gIGNvbnN0IGlzc3Vlc1BlckZpZWxkID0ge307XG4gIE9iamVjdC5lbnRyaWVzKGVycm9yKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gRmllbGROYW1lRW51bS5wYXJzZShrZXkpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5fZXJyb3JzKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWUuX2Vycm9ycztcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXNzdWVzUGVyRmllbGQ7XG59O1xuXG5jb25zdCBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0gPSAoZm9ybURpdiwgaW5pdGlhbERpY3QpID0+IHtcbiAgY29uc3QgaW5jbHVkZWRJbnB1dHMgPSBBcnJheS5mcm9tKGZvcm1EaXYucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKTtcbiAgY29uc3QgZXh0cmFEYXRhID0gaW5jbHVkZWRJbnB1dHMucmVkdWNlKChhY2MsIGlucHV0KSA9PiB7XG4gICAgY29uc3Qga2V5ID0gaW5wdXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICAgIGlmICgha2V5KSByZXR1cm4gYWNjO1xuICAgIGNvbnN0IHZhbHVlID0gaW5wdXQudHlwZSA9PT0gXCJjaGVja2JveFwiID8gaW5wdXQuY2hlY2tlZCA6IGlucHV0LnZhbHVlO1xuICAgIHJldHVybiB7IC4uLmFjYywgW2tleV06IHZhbHVlIH07XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGV4dHJhRGF0YTtcbn07XG5jb25zdCBwYXJzZUV2ZW50UGF5bG9hZCA9IChldmVudERhdGEpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRWxlbWVudEV2ZW50LnBhcnNlKGV2ZW50RGF0YSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgZXZlbnQgcGF5bG9hZDpcIiwgZXZlbnREYXRhLCBlcnJvcik7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmNvbnN0IGdlbmVyYXRlQW5vbnltb3VzVmFsdWVzID0gKCkgPT4ge1xuICBjb25zdCBpZCA9IHY0KCkuc3BsaXQoXCItXCIpWzBdO1xuICByZXR1cm4ge1xuICAgIGZpcnN0TmFtZTogYHh4XyR7aWR9YCxcbiAgICBsYXN0TmFtZTogYHh4XyR7aWR9YCxcbiAgICBlbWFpbDogYHh4XyR7aWR9QGVtYWlsLmNvbWAsXG4gICAgemlwQ29kZTogYHh4XyR7aWR9YCxcbiAgICBjb3VudHJ5OiBgVVNgXG4gIH07XG59O1xuY29uc3QgZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMgPSAoZmllbGRzKSA9PiB7XG4gIHJldHVybiB7XG4gICAgbGluZTE6IGZpZWxkc1tGaWVsZE5hbWUuTElORTFdLFxuICAgIGxpbmUyOiBmaWVsZHNbRmllbGROYW1lLkxJTkUyXSxcbiAgICBsaW5lMzogZmllbGRzW0ZpZWxkTmFtZS5MSU5FM10sXG4gICAgY2l0eTogZmllbGRzW0ZpZWxkTmFtZS5DSVRZXSxcbiAgICBzdGF0ZTogZmllbGRzW0ZpZWxkTmFtZS5TVEFURV0sXG4gICAgY291bnRyeTogZmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICB6aXBfY29kZTogZmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV1cbiAgfTtcbn07XG5jb25zdCBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMgPSAoZmllbGRzLCBjaGVja291dF9zZXR0aW5ncykgPT4ge1xuICBpZiAoIWNoZWNrb3V0X3NldHRpbmdzLnJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzKSByZXR1cm47XG4gIHJldHVybiB7XG4gICAgbGluZTE6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTFdLFxuICAgIGxpbmUyOiBmaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUyXSxcbiAgICBsaW5lMzogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FM10sXG4gICAgY2l0eTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSxcbiAgICBzdGF0ZTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0sXG4gICAgY291bnRyeTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSxcbiAgICB6aXBfY29kZTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV1cbiAgfTtcbn07XG5jb25zdCBnZXRGdWxsTmFtZSA9IChmaXJzdE5hbWUsIGxhc3ROYW1lKSA9PiB7XG4gIHJldHVybiBbZmlyc3ROYW1lLCBsYXN0TmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xufTtcblxuY29uc3Qgc3R5bGVzID0gKHsgd2lkdGgsIGhlaWdodCB9KSA9PiBgXG5Aa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cblxuLm92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogMjE0NzQ4MzY0OCAhaW1wb3J0YW50O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xufVxuLmNvbnRhaW5lciB7XG4gIG1heC13aWR0aDogJHt3aWR0aCA/PyBcIjUwMHB4XCJ9O1xuICBtYXgtaGVpZ2h0OiAke2hlaWdodCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2Utb3V0O1xufVxuLmZyYW1lLCAjYWR5ZW4tY29udGFpbmVyLCAjYWR5ZW4tY29udGFpbmVyID4gKiB7XG4gIG1heC13aWR0aDogJHt3aWR0aCA/PyBcIjUwMHB4XCJ9O1xuICBtYXgtaGVpZ2h0OiAke2hlaWdodCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBib3JkZXI6IG5vbmU7XG59XG4uY2FuY2VsLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0b3A6IC0xLjVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIHJpZ2h0OiAwO1xufVxuYDtcbmNvbnN0IGJhbmtTZWxlY3RvclN0eWxlcyA9ICh7IHdpZHRoLCBoZWlnaHQgfSkgPT4gYFxuQGtleWZyYW1lcyBmYWRlSW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG5cbi5vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6IDIxNDc0ODM2NDggIWltcG9ydGFudDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cbi5jb250YWluZXIge1xuICBtYXgtd2lkdGg6ICR7d2lkdGggPz8gXCI1MDBweFwifTtcbiAgbWF4LWhlaWdodDogJHtoZWlnaHQgPz8gXCI2MDBweFwifTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGFuaW1hdGlvbjogZmFkZUluIDAuM3MgZWFzZS1vdXQ7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgYm94LXNoYWRvdzogMCAxMHB4IDI1cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuLmJhbmstc2VsZWN0b3ItY29udGVudCB7XG4gIHBhZGRpbmc6IDI0cHg7XG4gIG1heC1oZWlnaHQ6IGNhbGMoJHtoZWlnaHQgPz8gXCI2MDBweFwifSAtIDQ4cHgpO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuLmJhbmstc2VsZWN0b3ItaGVhZGVyIHtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBmb250LXdlaWdodDogNjAwO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBjb2xvcjogIzFhMWExYTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmJhbmstbGlzdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMTJweDtcbn1cbi5iYW5rLWl0ZW0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiAxNnB4O1xuICBib3JkZXI6IDJweCBzb2xpZCAjZTVlNWU1O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbn1cbi5iYW5rLWl0ZW06aG92ZXIge1xuICBib3JkZXItY29sb3I6ICMzYjgyZjY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGZhZmM7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcbiAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG59XG4uYmFuay1pdGVtOmFjdGl2ZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cbi5iYW5rLWxvZ28ge1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIG9iamVjdC1maXQ6IGNvbnRhaW47XG4gIG1hcmdpbi1yaWdodDogMTZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U5ZWNlZjtcbn1cbi5iYW5rLWxvZ28tcGxhY2Vob2xkZXIge1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tcmlnaHQ6IDE2cHg7XG4gIGNvbG9yOiAjNmM3NTdkO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLmJhbmstaW5mbyB7XG4gIGZsZXg6IDE7XG59XG4uYmFuay1kaXNwbGF5LW5hbWUge1xuICBmb250LXNpemU6IDFyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiAjMWExYTFhO1xuICBtYXJnaW4tYm90dG9tOiAycHg7XG59XG4uYmFuay1uYW1lIHtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgY29sb3I6ICM2Yzc1N2Q7XG59XG4uY2FuY2VsLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0b3A6IC0xLjVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIHJpZ2h0OiAwO1xufVxuYDtcbmNvbnN0IGNyZWF0ZUFuZE9wZW5GcmFtZSA9ICh1cmwsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgeyBpZCwgdGl0bGUsIHdpZHRoLCBoZWlnaHQsIG5hbWUgfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtzdHlsZXMoeyB3aWR0aCwgaGVpZ2h0IH0pfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke3VybH1cIiBjbGFzcz1cImZyYW1lXCIgaWQ9XCIke2lkID8/IFwidGhyZWUtZHMtaWZyYW1lXCJ9XCIgdGl0bGU9XCIke3RpdGxlID8/IFwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwifVwiIGFsbG93PVwicGF5bWVudFwiIG5hbWU9XCIke25hbWUgPz8gXCJ0aHJlZS1kcy1pZnJhbWVcIn1cIj48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xuICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICBjb25zdCBpZnJhbWUgPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpO1xuICBjb25zdCBjYW5jZWxCdXR0b24gPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChob3N0KTtcbiAgcmV0dXJuIHsgaG9zdCwgaWZyYW1lLCBjYW5jZWxCdXR0b24gfTtcbn07XG5jb25zdCBjcmVhdGVBbmRPcGVuQmFua1NlbGVjdG9yID0gKGJhbmtzLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdGl0bGUgfSA9IG9wdGlvbnMgPz8ge307XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gICAgY29uc3QgYmFua0xpc3RIdG1sID0gYmFua3MubWFwKChiYW5rLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbG9nb0h0bWwgPSBiYW5rLnJlc291cmNlcy5sb2dvX3VybCA/IGA8aW1nIHNyYz1cIiR7YmFuay5yZXNvdXJjZXMubG9nb191cmx9XCIgYWx0PVwiJHtiYW5rLmRpc3BsYXlfbmFtZX1cIiBjbGFzcz1cImJhbmstbG9nb1wiIC8+YCA6IGA8ZGl2IGNsYXNzPVwiYmFuay1sb2dvLXBsYWNlaG9sZGVyXCI+JHtiYW5rLmRpc3BsYXlfbmFtZS5zdWJzdHJpbmcoMCwgMikudG9VcHBlckNhc2UoKX08L2Rpdj5gO1xuICAgICAgcmV0dXJuIGBcbiAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstaXRlbVwiIGRhdGEtYmFuay1pbmRleD1cIiR7aW5kZXh9XCI+XG4gICAgICAgICAgJHtsb2dvSHRtbH1cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1pbmZvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1kaXNwbGF5LW5hbWVcIj4ke2JhbmsuZGlzcGxheV9uYW1lfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstbmFtZVwiPiR7YmFuay5iYW5rX25hbWV9PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGBcbiAgICAgIDxzdHlsZT5cbiAgICAgICAgJHtiYW5rU2VsZWN0b3JTdHlsZXMoeyB3aWR0aCwgaGVpZ2h0IH0pfVxuICAgICAgPC9zdHlsZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLXNlbGVjdG9yLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLXNlbGVjdG9yLWhlYWRlclwiPiR7dGl0bGUgPz8gXCJTZWxlY3QgeW91ciBiYW5rXCJ9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1saXN0XCI+XG4gICAgICAgICAgICAgICR7YmFua0xpc3RIdG1sfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBjb25zdCBzaGFkb3dSb290ID0gaG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgICBzaGFkb3dSb290LmFwcGVuZENoaWxkKHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpKTtcbiAgICBjb25zdCBjYW5jZWxCdXR0b24gPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgICBjb25zdCBiYW5rSXRlbXMgPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYmFuay1pdGVtXCIpO1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGhvc3QpO1xuICAgIH07XG4gICAgY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICByZWplY3QobmV3IEVycm9yKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpKTtcbiAgICB9KTtcbiAgICBiYW5rSXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICByZXNvbHZlKGJhbmtzW2luZGV4XSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3QpO1xuICB9KTtcbn07XG5jb25zdCBjcmVhdGVBbmRPcGVuTWljcm9EZXBvc2l0Rm9ybSA9IChwYXltZW50TWV0aG9kVHlwZSwgb3B0aW9ucykgPT4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGJhc2VVcmwgfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYGFwcC9kaXJlY3RfZGViaXQvbWljcm9fZGVwb3NpdC8/dHlwZT0ke3BheW1lbnRNZXRob2RUeXBlfWAsIGJhc2VVcmwpLnRvU3RyaW5nKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBjcmVhdGVBbmRPcGVuRnJhbWUodXJsLCB7IHdpZHRoLCBoZWlnaHQsIHRpdGxlOiBcIk1pY3JvIERlcG9zaXQgRm9ybVwiIH0pO1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIikpO1xuICAgIH07XG4gICAgY29uc3Qgb25TdWNjZXNzID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiAmJiByZXNwb25zZS5wYXlsb2FkKSB7XG4gICAgICAgIGlmIChcImVycm9yXCIgaW4gcmVzcG9uc2UucGF5bG9hZCkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IocmVzcG9uc2UucGF5bG9hZC5lcnJvcikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UucGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gZmFpbGVkXCIpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2FuY2VsKTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoXG4gICAgICBlbGVtZW50cy5pZnJhbWUsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBuZXcgVVJMKGJhc2VVcmwpLm9yaWdpbixcbiAgICAgIFwibWljcm8tZGVwb3NpdC1zdGF0dXNcIixcbiAgICAgIE1pY3JvRGVwb3NpdFN0YXR1c1Jlc3BvbnNlXG4gICAgKTtcbiAgICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gICAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgfTtcbiAgICBjb25zdCBvcmlnaW5hbEhhbmRsZUNhbmNlbCA9IGhhbmRsZUNhbmNlbDtcbiAgICBjb25zdCB3cmFwcGVkSGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgY2xlYW51cEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgICBvcmlnaW5hbEhhbmRsZUNhbmNlbCgpO1xuICAgIH07XG4gICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgd3JhcHBlZEhhbmRsZUNhbmNlbCk7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gc3RhcnRQb2xsaW5nKGlmcmFtZSwgb25TdWNjZXNzLCBjaGlsZE9yaWdpbiwgdHlwZSwgcmVzcG9uc2VNb2RlbCkge1xuICBjb25zdCBoYW5kbGVQb2xsaW5nID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBwaW5nQ2RlRm9yU3RhdHVzKGlmcmFtZSwgY2hpbGRPcmlnaW4sIHR5cGUsIHJlc3BvbnNlTW9kZWwpO1xuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgICAgIG9uU3VjY2VzcyhzdGF0dXMpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgfVxuICB9O1xuICBoYW5kbGVQb2xsaW5nKCk7XG4gIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHNldEludGVydmFsKGhhbmRsZVBvbGxpbmcsIENERV9QT0xMSU5HX0lOVEVSVkFMKTtcbiAgcmV0dXJuIHBvbGxpbmdJbnRlcnZhbDtcbn1cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50cyh7XG4gIGVsZW1lbnRzLFxuICBwb2xsaW5nSW50ZXJ2YWwsXG4gIHJlc29sdmVcbn0pIHtcbiAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZ0ludGVydmFsKTtcbiAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICBlbGVtZW50cy5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9ICgpID0+IHtcbiAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIH07XG4gIHJldHVybiBjbGVhbnVwRXZlbnRMaXN0ZW5lcnM7XG59XG5hc3luYyBmdW5jdGlvbiBzdGFydDNkc1ZlcmlmaWNhdGlvbihwYXJhbXMpIHtcbiAgY29uc3QgeyB1cmwsIGJhc2VVcmwsIGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LCBmcmFtZVRpdGxlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGVsZW1lbnRzID0gY3JlYXRlQW5kT3BlbkZyYW1lKHVybCwgeyB3aWR0aDogZnJhbWVXaWR0aCwgaGVpZ2h0OiBmcmFtZUhlaWdodCwgdGl0bGU6IGZyYW1lVGl0bGUgfSk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChzdGF0dXMpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgICAgfSwgMWUzKTtcbiAgICAgIHJlc29sdmUoc3RhdHVzKTtcbiAgICAgIGNsZWFudXBFdmVudExpc3RlbmVycz8uKCk7XG4gICAgfTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoXG4gICAgICBlbGVtZW50cy5pZnJhbWUsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBuZXcgVVJMKGJhc2VVcmwpLm9yaWdpbixcbiAgICAgIFwicGluZy0zZHMtc3RhdHVzXCIsXG4gICAgICBQaW5nM0RTU3RhdHVzUmVzcG9uc2VcbiAgICApO1xuICAgIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9IGhhbmRsZUV2ZW50cyh7XG4gICAgICBlbGVtZW50cyxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbCxcbiAgICAgIHJlc29sdmVcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24ocGFyYW1zKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyAhPT0gVGhyZWVEU1N0YXR1cy5TVUNDRVNTKSB7XG4gICAgYXNzZXJ0TmV2ZXIocmVzdWx0LnN0YXR1cyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBocmVmOiByZXN1bHQuaHJlZlxuICB9O1xufTtcbmNvbnN0IG9wZW5Qb3B1cFdpbmRvdyA9IChwb3B1cE5hbWUsIHVybCkgPT4ge1xuICBjb25zdCBwb3B1cFdpbmRvdyA9IHdpbmRvdy5vcGVuKHVybCwgXCJfYmxhbmtcIik7XG4gIGlmICghcG9wdXBXaW5kb3cpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cG9wdXBOYW1lfSBwb3B1cCB3aW5kb3cgYmxvY2tlZC4gUGxlYXNlIGFsbG93IHBvcHVwcyBmb3IgdGhpcyBzaXRlLmApO1xuICB9XG4gIHJldHVybiBwb3B1cFdpbmRvdztcbn07XG5jb25zdCBzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0ID0gYXN5bmMgKHBvcHVwTmFtZSwgY2RlQ29ubiwgZXhwZWN0ZWRWZXJpZnlUb2tlbiwgdXJsKSA9PiB7XG4gIGNvbnN0IHsgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9wdXAtdmVyaWZ5XCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHBvcHVwV2luZG93ID0gb3BlblBvcHVwV2luZG93KHBvcHVwTmFtZSwgdXJsKTtcbiAgICBjb25zdCBwb2xsaW5nID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdmVyaWZ5UmVzdWx0ID0gYXdhaXQgY2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWQoY2RlQ29ubiwgZXhwZWN0ZWRWZXJpZnlUb2tlbik7XG4gICAgICAgIGlmICh2ZXJpZnlSZXN1bHQucHJlc2VudCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZyk7XG4gICAgICAgICAgcG9wdXBXaW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICByZXNvbHZlKHsgaHJlZjogdmVyaWZ5UmVzdWx0LmhyZWYgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocG9wdXBXaW5kb3cuY2xvc2VkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3BvcHVwTmFtZX0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXJyX18oZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZyk7XG4gICAgICAgIHJlamVjdChnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn07XG5cbmNvbnN0IGRldGVjdExhbmd1YWdlID0gKCkgPT4ge1xuICBjb25zdCBsYW5ndWFnZXMgPSBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXMubGVuZ3RoID8gbmF2aWdhdG9yLmxhbmd1YWdlcyA6IFtuYXZpZ2F0b3IubGFuZ3VhZ2VdO1xuICBsZXQgbGFuZ3VhZ2UgPSBsYW5ndWFnZXM/LlswXTtcbiAgaWYgKGxhbmd1YWdlKSB7XG4gICAgbGFuZ3VhZ2UgPSBsYW5ndWFnZS5zcGxpdChcIi1cIilbMF07XG4gIH1cbiAgcmV0dXJuIGxhbmd1YWdlO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kdywgZXJyX186IGVycl9fJHcgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuY29uc3QgY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEgPSAoe1xuICByZXF1aXJlX3ppcF9jb2RlLFxuICByZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzLFxuICByZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyxcbiAgcGF5bWVudF9tZXRob2QsXG4gIGlzQnVzaW5lc3NQdXJjaGFzZVxufSwgbm9uQ2RlRm9ybUlucHV0cykgPT4ge1xuICBjb25zdCBjb25kaXRpb25hbEZpZWxkcyA9IHt9O1xuICBpZiAocGF5bWVudF9tZXRob2QgPT09IFwiYWNoXCIpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSB6LnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gei5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KTtcbiAgfVxuICBpZiAocmVxdWlyZV96aXBfY29kZSkge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAocmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzcykge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5MSU5FMV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuQ0lUWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU1RBVEVdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkNPVU5UUlldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChyZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcykge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19CVVNJTkVTU19QVVJDSEFTRV0gPz8gaXNCdXNpbmVzc1B1cmNoYXNlKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkJVU0lORVNTX05BTUVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKE9iamVjdC5rZXlzKGNvbmRpdGlvbmFsRmllbGRzKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUmVxdWlyZWRGb3JtRmllbGRzO1xuICB9XG4gIHJldHVybiBSZXF1aXJlZEZvcm1GaWVsZHMuZXh0ZW5kKGNvbmRpdGlvbmFsRmllbGRzKTtcbn07XG5jb25zdCB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHMgPSAobm9uQ2RlRm9ybUlucHV0cywgb25WYWxpZGF0aW9uRXJyb3IsIGRlZmF1bHRGaWVsZFZhbHVlcyA9IHt9KSA9PiB7XG4gIGlmIChkZWZhdWx0RmllbGRWYWx1ZXMpIHtcbiAgICBsb2dfXyR3KGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShkZWZhdWx0RmllbGRWYWx1ZXMpfWApO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0RmllbGRWYWx1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGVmYXVsdEZpZWxkVmFsdWVzW2tleV07XG4gICAgICBpZiAoIW5vbkNkZUZvcm1JbnB1dHNba2V5XSkge1xuICAgICAgICBub25DZGVGb3JtSW5wdXRzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSA9ICEhbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXTtcbiAgaWYgKG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10pIHtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTJdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTJdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUzXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUzXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNJVFldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNUQVRFXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNPVU5UUlldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXTtcbiAgfVxuICBjb25zdCB2YWxpZGF0aW9uU2NoZW1hID0gY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEoZGVmYXVsdEZpZWxkVmFsdWVzLCBub25DZGVGb3JtSW5wdXRzKTtcbiAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGlvblNjaGVtYS5zYWZlUGFyc2Uobm9uQ2RlRm9ybUlucHV0cyk7XG4gIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSByZXN1bHQuZXJyb3IuZm9ybWF0KCk7XG4gICAgY29uc3QgaXNzdWVzID0gZXh0cmFjdElzc3Vlc1BlckZpZWxkKGZvcm1hdHRlZCk7XG4gICAgY29uc3QgaXNzdWVLZXlzID0gT2JqZWN0LmtleXMoaXNzdWVzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlzc3VlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gaXNzdWVLZXlzW2ldO1xuICAgICAgY29uc3QgZXJyb3JzID0gaXNzdWVzW2ZpZWxkTmFtZV07XG4gICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9ycywgZmllbGROYW1lKTtcbiAgICB9XG4gICAgZXJyX18kdyhcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGlzc3Vlcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQWxtb3N0IHRoZXJlISBKdXN0IGEgZmV3IHRoaW5ncyBoaWdobGlnaHRlZCBhYm92ZSB0byBmaXggYmVmb3JlIHlvdSBjYW4gc3VibWl0LlwiKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LmRhdGE7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyR2LCBlcnJfXzogZXJyX18kdiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG5jb25zdCB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcztcbmNvbnN0IHZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyA9ICh0b2tlbml6ZVJlc3VsdHMsIG9uVmFsaWRhdGlvbkVycm9yKSA9PiB7XG4gIGZvciAoY29uc3QgdG9rZW5pemVSZXN1bHQgb2YgdG9rZW5pemVSZXN1bHRzKSB7XG4gICAgaWYgKHRva2VuaXplUmVzdWx0LnN1Y2Nlc3MgPT09IGZhbHNlKSB7XG4gICAgICB0b2tlbml6ZVJlc3VsdC5lcnJvcnMuZm9yRWFjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gQWxsRmllbGROYW1lcy5zYWZlUGFyc2UoZXJyb3IuZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgICAgICAgZXJyX18kdihgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke2Vycm9yLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIGVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBwYXJzZWQuZGF0YTtcbiAgICAgICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9yLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbG9nX18kdihgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkodG9rZW5pemVSZXN1bHQuZXJyb3JzKX1gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyB3aGlsZSB0b2tlbml6aW5nIGNhcmRcIik7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCB7IGVycl9fOiBlcnJfXyR1IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vblwiKTtcbmNvbnN0IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHtyZXNwb25zZS5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICB9XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiByZXNwb25zZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn07XG5jb25zdCBmaW5kQ3BtTWF0Y2hpbmdUeXBlID0gKGFsbENQTXMsIHpvZE1vZGVsKSA9PiB7XG4gIGNvbnN0IGNwbSA9IGFsbENQTXMuZmluZCgoY3BtMikgPT4gem9kTW9kZWwuc2FmZVBhcnNlKGNwbTIpLnN1Y2Nlc3MpO1xuICBpZiAoIWNwbSkge1xuICAgIGVycl9fJHUoYE5vIENQTXMgZm91bmQgZm9yIG1vZGVsLiBBbGwgbW9kZWxzOmAsIGFsbENQTXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWxgKTtcbiAgfVxuICByZXR1cm4gem9kTW9kZWwucGFyc2UoY3BtKTtcbn07XG5jb25zdCBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtID0gKGZpZWxkcywgY2hlY2tvdXRfc2V0dGluZ3MpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGZpZWxkcy5lbWFpbCxcbiAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBmaWVsZHMubGFzdE5hbWUsXG4gICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGZpZWxkcy5maXJzdE5hbWUsXG4gICAgY3VzdG9tZXJfYnVzaW5lc3NfbmFtZTogZmllbGRzLmJ1c2luZXNzTmFtZSxcbiAgICBjdXN0b21lcl90YXhfaWQ6IGZpZWxkcy50YXhJZCxcbiAgICBjdXN0b21lcl90YXhfaWRfdHlwZTogZmllbGRzLnRheElkVHlwZSxcbiAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMoZmllbGRzKSxcbiAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKGZpZWxkcywgY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gIH07XG59O1xuY29uc3QgcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCA9IGFzeW5jIChhcmdzKSA9PiB7XG4gIGNvbnN0IHsgbG9nX186IGxvZ19fMiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoYXJncy5sb2dQcmVmaXgpO1xuICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhcmdzLmFueUNkZUNvbm5lY3Rpb24pO1xuICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoYXJncy5jb25maXJtUmVzdWx0KTtcbiAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgbG9nX18yKGBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kLi4uYCk7XG4gICAgY29uc3Qgc2V0dXBSZXN1bHQgPSBhd2FpdCBmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZChhcmdzLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHBtX2lkOiBjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZFxuICAgIH0pO1xuICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBzZXR1cFJlc3VsdCB9O1xuICB9IGVsc2Uge1xuICAgIGlmIChhcmdzLnVzZVBheUZpcnN0Rmxvdykge1xuICAgICAgbG9nX18yKGBVc2luZyBwYXktZmlyc3QgZmxvdy4uLmApO1xuICAgICAgaWYgKCFhcmdzLmNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICAgICAgZXJyX18kdShcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGFyZ3MuY29uZmlybVJlc3VsdCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGFyZ3MuY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcGF5bWVudF9pbnB1dDogeyBwcm92aWRlcl90eXBlOiBhcmdzLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlciB9LFxuICAgICAgY3VzdG9tZXJfZW1haWw6IGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBjdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhhcmdzLnJlcXVpcmVkRm9ybUZpZWxkcyksXG4gICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMoYXJncy5yZXF1aXJlZEZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogY3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogYXJncy5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICB9O1xuICAgIGxvZ19fMihgRG9pbmcgY2hlY2tvdXQuLi5gLCBjaGVja291dFJlcXVlc3QpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcmZvcm1DaGVja291dChhcmdzLmFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgfVxufTtcblxuY29uc3QgUGF5bWVudFByb2Nlc3NvciA9IHouZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCIsIFwiYWR5ZW5cIiwgXCJwYXlwYWxcIiwgXCJwb2NreXRcIiwgXCJsb29wXCJdKTtcbih7XG4gIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZX0pO1xuY29uc3QgbG9hZFNjcmlwdCA9ICh7XG4gIHNjcmlwdElkLFxuICBzcmMsXG4gIGNoZWNrTG9hZGVkRm5cbn0pID0+IHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgc2NyaXB0LnNyYyA9IHNyYztcbiAgICBzY3JpcHQuaWQgPSBzY3JpcHRJZDtcbiAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xuICAgIGNvbnN0IGV4aXN0aW5nU2NyaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2NyaXB0SWQpO1xuICAgIGlmIChjaGVja0xvYWRlZEZuKCkpIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9IGVsc2UgaWYgKGV4aXN0aW5nU2NyaXB0KSB7XG4gICAgICBzY3JpcHQgPSBleGlzdGluZ1NjcmlwdDtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cbiAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwibG9hZFwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBldmVudExpc3RlbmVyQ29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IGV2ZW50TGlzdGVuZXJDb250cm9sbGVyLnNpZ25hbCB9XG4gICAgKTtcbiAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwiZXJyb3JcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgcmVqZWN0KFwiRmFpbGVkIHRvIGxvYWQgdGhlIHNjcmlwdFwiKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIuc2lnbmFsIH1cbiAgICApO1xuICB9KTtcbn07XG5cbmNvbnN0IGdldFBheW1lbnREYXRhUmVxdWVzdCA9ICh7XG4gIGdhdGV3YXksXG4gIGdhdGV3YXlNZXJjaGFudElkLFxuICBtZXJjaGFudE5hbWUsXG4gIG1lcmNoYW50SWQsXG4gIGluaXRpYWxQcmV2aWV3LFxuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICBwcmVmaWxsXG59KSA9PiB7XG4gIGNvbnN0IGFtb3VudEF0b20gPSBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmFtb3VudEF0b20gPz8gaW5pdGlhbFByZXZpZXc/LmFtb3VudEF0b20gPz8gMDtcbiAgY29uc3QgdG90YWxQcmljZSA9IE1hdGgubWF4KGFtb3VudEF0b20gLyAxMDAsIDApO1xuICBjb25zdCBjdXJyZW5jeUNvZGUgPSAob3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uYW1vdW50Py5jdXJyZW5jeSA/PyBwcmVmaWxsPy5jdXJyZW5jeSA/PyBpbml0aWFsUHJldmlldy5jdXJyZW5jeSkudG9VcHBlckNhc2UoKTtcbiAgY29uc3QgYmFzZVJlcXVlc3QgPSB7XG4gICAgYXBpVmVyc2lvbjogMixcbiAgICBhcGlWZXJzaW9uTWlub3I6IDAsXG4gICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ0FSRFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZEF1dGhNZXRob2RzOiBbXCJQQU5fT05MWVwiLCBcIkNSWVBUT0dSQU1fM0RTXCJdLFxuICAgICAgICAgIGFsbG93ZWRDYXJkTmV0d29ya3M6IFtcIkFNRVhcIiwgXCJESVNDT1ZFUlwiLCBcIklOVEVSQUNcIiwgXCJKQ0JcIiwgXCJNQVNURVJDQVJEXCIsIFwiVklTQVwiXSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1JlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogdHJ1ZSxcbiAgICAgICAgICBhbGxvd1ByZXBhaWRDYXJkczogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6YXRpb25TcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgdHlwZTogXCJQQVlNRU5UX0dBVEVXQVlcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBnYXRld2F5LFxuICAgICAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGVtYWlsUmVxdWlyZWQ6IHRydWUsXG4gICAgc2hpcHBpbmdBZGRyZXNzUmVxdWlyZWQ6IHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IG1lcmNoYW50SWQgPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZVxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlLFxuICAgICAgdG90YWxQcmljZVN0YXR1czogb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8ucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiB0b3RhbFByaWNlLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIGlmICghb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QpIHJldHVybiBiYXNlUmVxdWVzdDtcbiAgaWYgKHR5cGVvZiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Lmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4geyAuLi5iYXNlUmVxdWVzdCwgLi4ub3ZlcnJpZGVQYXltZW50UmVxdWVzdC5nb29nbGVQYXlQYXltZW50UmVxdWVzdChiYXNlUmVxdWVzdCkgfTtcbiAgfVxuICByZXR1cm4geyAuLi5iYXNlUmVxdWVzdCwgLi4ub3ZlcnJpZGVQYXltZW50UmVxdWVzdC5nb29nbGVQYXlQYXltZW50UmVxdWVzdCB9O1xufTtcbmNvbnN0IGxvYWRHb29nbGVQYXlTY3JpcHQgPSAoKSA9PiB7XG4gIHJldHVybiBsb2FkU2NyaXB0KHtcbiAgICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2dvb2dsZV9wYXlfc2RrXCIsXG4gICAgc3JjOiBcImh0dHBzOi8vcGF5Lmdvb2dsZS5jb20vZ3AvcC9qcy9wYXkuanNcIixcbiAgICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5nb29nbGU/LnBheW1lbnRzPy5hcGlcbiAgfSk7XG59O1xubGV0IHBheW1lbnRzQ2xpZW50ID0gbnVsbDtcbmNvbnN0IGdldEdvb2dsZVBheUVudmlyb25tZW50ID0gYXN5bmMgKGJhc2VVcmwpID0+IHtcbiAgY29uc3QgZW52ID0gYXdhaXQgZ2V0Q3VycmVudEVudihiYXNlVXJsKTtcbiAgcmV0dXJuIGVudiA9PT0gXCJwcm9kXCIgPyBcIlBST0RVQ1RJT05cIiA6IFwiVEVTVFwiO1xufTtcbmNvbnN0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50ID0gYXN5bmMgKGJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCkgPT4ge1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGF3YWl0IGdldEdvb2dsZVBheUVudmlyb25tZW50KGJhc2VVcmwpO1xuICBpZiAocGF5bWVudHNDbGllbnQgPT09IG51bGwpIHtcbiAgICBwYXltZW50c0NsaWVudCA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgICBlbnZpcm9ubWVudCxcbiAgICAgIG1lcmNoYW50SW5mbzogcGF5bWVudERhdGFSZXF1ZXN0Lm1lcmNoYW50SW5mb1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBwYXltZW50c0NsaWVudDtcbn07XG5jb25zdCBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICBjb25zdCBjb21tb25BY3Rpb24gPSByZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICBpZiAoIWNvbW1vbkFjdGlvbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UoY29tbW9uQWN0aW9uKTtcbn07XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheSA9IChmb3JtSW5wdXRzLCBwYXltZW50RGF0YSkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8uaW5mbz8uYmlsbGluZ0FkZHJlc3M7XG4gIGNvbnN0IHNoaXBwaW5nQWRkcmVzcyA9IHBheW1lbnREYXRhLnNoaXBwaW5nQWRkcmVzcztcbiAgaWYgKGJpbGxpbmdBZGRyZXNzKSB7XG4gICAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5sYXN0TmFtZVBhcnRzXSA9IGJpbGxpbmdBZGRyZXNzLm5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgICBjb25zdCBwYXllckxhc3ROYW1lID0gbGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBwYXltZW50RGF0YS5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MSU5FMV0gPSBpbnB1dHNbRmllbGROYW1lLkxJTkUxXSB8fCBiaWxsaW5nQWRkcmVzcy5hZGRyZXNzMSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTElORTJdID0gaW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl0gfHwgYmlsbGluZ0FkZHJlc3MuYWRkcmVzczIgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxJTkUzXSA9IGlucHV0c1tGaWVsZE5hbWUuTElORTNdIHx8IGJpbGxpbmdBZGRyZXNzLmFkZHJlc3MzIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DSVRZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ0lUWV0gfHwgYmlsbGluZ0FkZHJlc3MubG9jYWxpdHkgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlNUQVRFXSA9IGlucHV0c1tGaWVsZE5hbWUuU1RBVEVdIHx8IGJpbGxpbmdBZGRyZXNzLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IGJpbGxpbmdBZGRyZXNzLmNvdW50cnlDb2RlIHx8IFwiVVNcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IGJpbGxpbmdBZGRyZXNzLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IGZpcnN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgcGF5ZXJGaXJzdE5hbWUgfHwgXCJcIjtcbiAgICBjb25zdCBsYXN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwYXllckxhc3ROYW1lIHx8IFwiXCI7XG4gICAgaWYgKGZpcnN0TmFtZSB8fCBsYXN0TmFtZSkge1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgICB9XG4gIH1cbiAgaWYgKHNoaXBwaW5nQWRkcmVzcykge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTFdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gfHwgc2hpcHBpbmdBZGRyZXNzLmFkZHJlc3MxIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMl0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUyXSB8fCBzaGlwcGluZ0FkZHJlc3MuYWRkcmVzczIgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUzXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdIHx8IHNoaXBwaW5nQWRkcmVzcy5hZGRyZXNzMyB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldIHx8IHNoaXBwaW5nQWRkcmVzcy5sb2NhbGl0eSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV0gfHwgc2hpcHBpbmdBZGRyZXNzLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0gfHwgc2hpcHBpbmdBZGRyZXNzLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldIHx8IHNoaXBwaW5nQWRkcmVzcy5jb3VudHJ5Q29kZSB8fCBcIlVTXCI7XG4gIH1cbiAgcmV0dXJuIGlucHV0cztcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHUsIGVycl9fOiBlcnJfXyR0IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1iYWNzXCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4QkFDU0Zsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgdmVyaWZpY2F0aW9uTWV0aG9kID0gY3VzdG9tUGFyYW1zLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInRydWVsYXllclwiO1xuICAgIGxldCBtaWNyb0RlcG9zaXREYXRhID0gbnVsbDtcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgbG9nX18kdShcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBtaWNyb0RlcG9zaXREYXRhID0gYXdhaXQgY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0oXCJiYWNzX2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMzUwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJHUoXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kdShcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBhdmFpbGFibGVCYW5rcyA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5hdmFpbGFibGVfYmFua3M7XG4gICAgbGV0IHNlbGVjdGVkQmFuaztcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcInRydWVsYXllclwiICYmIGF2YWlsYWJsZUJhbmtzICYmIGF2YWlsYWJsZUJhbmtzLmxlbmd0aCA+PSAxKSB7XG4gICAgICBsb2dfXyR1KFwiTXVsdGlwbGUgYmFua3MgYXZhaWxhYmxlLCBzaG93aW5nIGJhbmsgc2VsZWN0b3IuLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBzZWxlY3RlZEJhbmsgPSBhd2FpdCBjcmVhdGVBbmRPcGVuQmFua1NlbGVjdG9yKGF2YWlsYWJsZUJhbmtzLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNTAwcHhcIixcbiAgICAgICAgICB0aXRsZTogXCJTZWxlY3QgYmFua1wiXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyR1KGBCYW5rIHNlbGVjdGVkOiAke3NlbGVjdGVkQmFuay5kaXNwbGF5X25hbWV9YCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dfXyR1KFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGJpbGxpbmdBZGRyZXNzID0gZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyk7XG4gICAgY29uc3QgZGlyZWN0RGViaXREYXRhID0ge1xuICAgICAgdHlwZTogXCJiYWNzX2RpcmVjdF9kZWJpdFwiLFxuICAgICAgYmFjc19kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gVHJ1ZUxheWVyXG4gICAgICAgIGJhbmtfbmFtZTogc2VsZWN0ZWRCYW5rPy5iYW5rX25hbWUsXG4gICAgICAgIC8vIE1pY3JvZGVwb3NpdFxuICAgICAgICBvd25lcl9uYW1lOiBnZXRGdWxsTmFtZShub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSwgbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGNvdW50cnlfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgIGFjY291bnRfbnVtYmVyOiBtaWNyb0RlcG9zaXREYXRhPy5hY2NvdW50X251bWJlcixcbiAgICAgICAgc29ydF9jb2RlOiBtaWNyb0RlcG9zaXREYXRhPy5zb3J0X2NvZGUsXG4gICAgICAgIGFkZHJlc3M6IHsgLi4uYmlsbGluZ0FkZHJlc3MsIHRvd246IGJpbGxpbmdBZGRyZXNzLmNpdHksIHBvc3Rjb2RlOiBiaWxsaW5nQWRkcmVzcy56aXBfY29kZSB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IGRpcmVjdERlYml0RGF0YVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApPy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHJlZGlyZWN0VXJsKSB7XG4gICAgICBsb2dfXyR1KFwiQkFDUyB2ZXJpZmljYXRpb24gcmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkJBQ1MgdmVyaWZpY2F0aW9uXCJcbiAgICAgIH0pO1xuICAgICAgbG9nX18kdShg4pWwIEJBQ1MgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCQUNTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQkFDUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBuZXdDb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWJhY3NcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IG5ld0NvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kdChcIkJBQ1MgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyR0LCBlcnJfXzogZXJyX18kcyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtZWZ0XCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4RUZURmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCB2ZXJpZmljYXRpb25NZXRob2QgPSBjdXN0b21QYXJhbXMudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwicGxhaWRcIjtcbiAgICBsZXQgbWljcm9EZXBvc2l0RGF0YSA9IG51bGw7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJtaWNyb19kZXBvc2l0XCIpIHtcbiAgICAgIGxvZ19fJHQoXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWljcm9EZXBvc2l0RGF0YSA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5NaWNyb0RlcG9zaXRGb3JtKFwiZWZ0X2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNDUwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJHQoXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kdChcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBkaXJlY3REZWJpdERhdGEgPSB7XG4gICAgICB0eXBlOiBcImVmdF9kaXJlY3RfZGViaXRcIixcbiAgICAgIGVmdF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gUGxhaWRcbiAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogY3VzdG9tUGFyYW1zLmlzQnVzaW5lc3NBY2NvdW50ID8/IGZhbHNlLFxuICAgICAgICBvd25lcl9uYW1lOiBnZXRGdWxsTmFtZShub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSwgbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIC8vIE1pY3JvZGVwb3NpdFxuICAgICAgICBpbnN0aXR1dGlvbl9udW1iZXI6IG1pY3JvRGVwb3NpdERhdGE/Lmluc3RpdHV0aW9uX251bWJlcixcbiAgICAgICAgdHJhbnNpdF9udW1iZXI6IG1pY3JvRGVwb3NpdERhdGE/LnRyYW5zaXRfbnVtYmVyLFxuICAgICAgICBhY2NvdW50X251bWJlcjogbWljcm9EZXBvc2l0RGF0YT8uYWNjb3VudF9udW1iZXJcbiAgICAgICAgLy8gbWFuZGF0ZV92ZXJzaW9uOiB1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiB2ZXJpZmljYXRpb25NZXRob2QsXG4gICAgICAgIGRpcmVjdF9kZWJpdF9kYXRhOiBkaXJlY3REZWJpdERhdGFcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKT8ucmVkaXJlY3RfdXJsO1xuICAgIGlmIChyZWRpcmVjdFVybCkge1xuICAgICAgbG9nX18kdChcIkVGVCB2ZXJpZmljYXRpb24gcmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkVGVCB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBsb2dfXyR0KGDilbAgRUZUIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRUZUIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRUZUIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZWZ0XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBuZXdDb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJHMoXCJFRlQgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRzLCBlcnJfXzogZXJyX18kciB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtc2VwYVwiKTtcbmNvbnN0IHJ1bkFpcndhbGxleFNFUEFGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHZlcmlmaWNhdGlvbk1ldGhvZCA9IGN1c3RvbVBhcmFtcy52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJ0cnVlbGF5ZXJcIjtcbiAgICBsZXQgbWljcm9EZXBvc2l0RGF0YSA9IG51bGw7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJtaWNyb19kZXBvc2l0XCIpIHtcbiAgICAgIGxvZ19fJHMoXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWljcm9EZXBvc2l0RGF0YSA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5NaWNyb0RlcG9zaXRGb3JtKFwic2VwYV9kaXJlY3RfZGViaXRcIiwge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjMwMHB4XCIsXG4gICAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRzKFwiTWljcm8gZGVwb3NpdCBkYXRhIGNvbGxlY3RlZFwiKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ19fJHMoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBjb25zdCBzdGFydEZsb3dOZXh0QWN0aW9ucyA9IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgY29uc2VudElkID0gc3RhcnRGbG93TmV4dEFjdGlvbnM/LmNvbnNlbnRfaWQ7XG4gICAgY29uc3QgYXZhaWxhYmxlQmFua3MgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uYXZhaWxhYmxlX2JhbmtzO1xuICAgIGxldCBzZWxlY3RlZEJhbms7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJ0cnVlbGF5ZXJcIiAmJiBhdmFpbGFibGVCYW5rcyAmJiBhdmFpbGFibGVCYW5rcy5sZW5ndGggPj0gMSkge1xuICAgICAgbG9nX18kcyhcIk11bHRpcGxlIGJhbmtzIGF2YWlsYWJsZSwgc2hvd2luZyBiYW5rIHNlbGVjdG9yLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2VsZWN0ZWRCYW5rID0gYXdhaXQgY3JlYXRlQW5kT3BlbkJhbmtTZWxlY3RvcihhdmFpbGFibGVCYW5rcywge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjUwMHB4XCIsXG4gICAgICAgICAgdGl0bGU6IFwiU2VsZWN0IGJhbmtcIlxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kcyhgQmFuayBzZWxlY3RlZDogJHtzZWxlY3RlZEJhbmsuZGlzcGxheV9uYW1lfWApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kcyhcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcInNlcGFfZGlyZWN0X2RlYml0XCIsXG4gICAgICAgICAgc2VwYV9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgICAgIC8vIHRydWVsYXllclxuICAgICAgICAgICAgYmFua19uYW1lOiBzZWxlY3RlZEJhbms/LmJhbmtfbmFtZSxcbiAgICAgICAgICAgIGNvdW50cnlfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgICAgICAvLyBtaWNyb2RlcG9zaXRcbiAgICAgICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgICAgICBpYmFuOiBtaWNyb0RlcG9zaXREYXRhPy5pYmFuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk/LnJlZGlyZWN0X3VybDtcbiAgICBpZiAocmVkaXJlY3RVcmwpIHtcbiAgICAgIGxvZ19fJHMoXCJTRVBBIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiU0VQQSB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBsb2dfXyRzKGDilbAgU0VQQSB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNFUEEgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTRVBBIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtc2VwYVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogbmV3Q29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRyKFwiU0VQQSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHIsIGVycl9fOiBlcnJfXyRxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFpcndhbGxleC1jY1wiKTtcbmNvbnN0IEFpcndhbGxleDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzID0gei5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBwYXJzZVJlc3BvbnNlSGVhZGVycyQzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gQWlyd2FsbGV4M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMuc2FmZVBhcnNlKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZnJpZW5kbHlFcnIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG4gICAgY29uc3QgZGV2RXJyID0gYEFpcndhbGxleCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gO1xuICAgIGVycl9fJHEoZGV2RXJyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc0FpcndhbGxleDNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdICE9PSB2b2lkIDA7XG59O1xuY29uc3QgcGFyc2VJbnRlbnRJZEZyb20zZHNIcmVmID0gKGhyZWYpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBpbnRlbnRJZCA9IG5ldyBVUkwoaHJlZiA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwicGF5bWVudF9pbnRlbnRfaWRcIik7XG4gICAgaWYgKCFpbnRlbnRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW50ZW50IElEIGZvdW5kIGluIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICB9XG4gICAgbG9nX18kcihgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHtpbnRlbnRJZH1dYCk7XG4gICAgcmV0dXJuIGludGVudElkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVyck1zZyA9IGBFcnJvciB2ZXJpZnlpbmcgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LmA7XG4gICAgZXJyX18kcShlcnJNc2csIGBSZXN1bHRpbmcgVVJMOiAke2hyZWZ9LlxuRXJyb3I6ICR7Z2V0RXJyb3JNZXNzYWdlKGVycm9yKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgfVxufTtcbmNvbnN0IHJ1bkFpcndhbGxleDNkc0Zsb3cgPSBhc3luYyAoYmFzZVVybCwgZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDMoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCh7IHVybDogaGVhZGVyc1tcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdLCBiYXNlVXJsIH0pO1xuICBjb25zdCBpbnRlbnRJZCA9IHBhcnNlSW50ZW50SWRGcm9tM2RzSHJlZihyZXN1bHQuaHJlZiA/PyBcIlwiKTtcbiAgY29uc3QgaW5pdGlhbEludGVudElkID0gaGVhZGVyc1tcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiXTtcbiAgaWYgKGluaXRpYWxJbnRlbnRJZCAhPT0gaW50ZW50SWQpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7aW50ZW50SWR9KSBkb2VzIG5vdCBtYXRjaCB0aGUgaW5pdGlhbCBpbnRlbnQgSUQgKCR7aW5pdGlhbEludGVudElkfSkuYDtcbiAgICBlcnJfXyRxKGRldkVycik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICBjb25zdCBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBpbnRlbnRJZCxcbiAgICAgIGNvbnNlbnRfaWQ6IGhlYWRlcnNbXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiXVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGV4dHJhTWV0YWRhdGFGb3JDaGVja291dDtcbn07XG5jb25zdCBBcHBsZVBheUNwbSQyID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgR29vZ2xlUGF5Q3BtJDIgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5jb25zdCBsb2FkQXBwbGVQYXlTY3JpcHQgPSAoKSA9PiB7XG4gIHJldHVybiBsb2FkU2NyaXB0KHtcbiAgICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2FwcGxlX3BheV9zZGtcIixcbiAgICBzcmM6IFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tL2pzYXBpLzEubGF0ZXN0L2FwcGxlLXBheS1zZGsuanNcIixcbiAgICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5BcHBsZVBheVNlc3Npb25cbiAgfSk7XG59O1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheSA9IChmb3JtSW5wdXRzLCBhcHBsZVBheVBheW1lbnQpID0+IHtcbiAgY29uc3QgcG1CaWxsaW5nQ29udGFjdCA9IGFwcGxlUGF5UGF5bWVudC50b2tlbi5wYXltZW50TWV0aG9kLmJpbGxpbmdDb250YWN0O1xuICBjb25zdCBiaWxsaW5nQ29udGFjdCA9IGFwcGxlUGF5UGF5bWVudC5iaWxsaW5nQ29udGFjdDtcbiAgY29uc3Qgc2hpcHBpbmdDb250YWN0ID0gYXBwbGVQYXlQYXltZW50LnNoaXBwaW5nQ29udGFjdDtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGlmIChwbUJpbGxpbmdDb250YWN0IHx8IGJpbGxpbmdDb250YWN0IHx8IHNoaXBwaW5nQ29udGFjdCkge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgcG1CaWxsaW5nQ29udGFjdD8uZW1haWxBZGRyZXNzIHx8IGJpbGxpbmdDb250YWN0Py5lbWFpbEFkZHJlc3MgfHwgc2hpcHBpbmdDb250YWN0Py5lbWFpbEFkZHJlc3MgfHwgXCJvcF91bmZpbGxlZEBlbWFpbC5jb21cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBwbUJpbGxpbmdDb250YWN0Py5jb3VudHJ5Q29kZSB8fCBiaWxsaW5nQ29udGFjdD8uY291bnRyeUNvZGUgfHwgc2hpcHBpbmdDb250YWN0Py5jb3VudHJ5Q29kZSB8fCBcIlVTXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBwbUJpbGxpbmdDb250YWN0Py5wb3N0YWxDb2RlIHx8IGJpbGxpbmdDb250YWN0Py5wb3N0YWxDb2RlIHx8IHNoaXBwaW5nQ29udGFjdD8ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwbUJpbGxpbmdDb250YWN0Py5naXZlbk5hbWUgfHwgYmlsbGluZ0NvbnRhY3Q/LmdpdmVuTmFtZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LmdpdmVuTmFtZSB8fCBcIlwiO1xuICAgIGNvbnN0IGxhc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmZhbWlseU5hbWUgfHwgYmlsbGluZ0NvbnRhY3Q/LmZhbWlseU5hbWUgfHwgc2hpcHBpbmdDb250YWN0Py5mYW1pbHlOYW1lIHx8IFwiXCI7XG4gICAgaWYgKGZpcnN0TmFtZSB8fCBsYXN0TmFtZSkge1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlucHV0cztcbn07XG56Lm9iamVjdCh7XG4gIGRhdGE6IHoub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gICAgZXJyb3JzOiB6LmFycmF5KHouYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6LnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6LmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pO1xuY29uc3QgY3JlYXRlUmVjdXJyaW5nUGF5bWVudFJlcXVlc3QgPSAoe1xuICB0b3RhbCxcbiAgcHJlZmlsbFxufSkgPT4ge1xuICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IHRvdGFsLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgYmlsbGluZyBwb3J0YWwgdXJsXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9wYXNza2l0L3BrcmVjdXJyaW5ncGF5bWVudHJlcXVlc3QvbWFuYWdlbWVudHVybCNEaXNjdXNzaW9uXG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHVzZWQgd2hlbiB1c2VyIHJlbW92ZSBhIGNhcmQgZnJvbSB0aGVpciBBcHBsZVBheSB3YWxsZXQuXG4gICAgICAvLyBDdXJyZW50eSBzZXQgdG8gY2hlY2tvdXQgc2Vzc2lvbiB1cmwgdG8gc2F0aXNmeSBBcHBsZVBheSB0eXBlc1xuICAgICAgbWFuYWdlbWVudFVSTDogbmV3IFVSTChgL3BheS8ke3ByZWZpbGwudG9rZW59YCwgRlJBTUVfQkFTRV9VUkwpLnRvU3RyaW5nKClcbiAgICB9O1xuICB9XG4gIGNvbnN0IGxpbmVJdGVtID0gcHJlZmlsbC5saW5lX2l0ZW1zPy5bMF07XG4gIGlmICghbGluZUl0ZW0pIHJldHVybiB2b2lkIDA7XG4gIHJldHVybiB7XG4gICAgcGF5bWVudERlc2NyaXB0aW9uOiBsaW5lSXRlbT8uZGVzY3JpcHRpb24gPz8gXCJcIixcbiAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgYW1vdW50OiB0b3RhbC5hbW91bnQsXG4gICAgICBsYWJlbDogbGluZUl0ZW0/LmRlc2NyaXB0aW9uID8/IFwiXCIsXG4gICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxVbml0OiBsaW5lSXRlbT8uYmlsbGluZ19pbnRlcnZhbCxcbiAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbENvdW50OiBsaW5lSXRlbT8uYmlsbGluZ19pbnRlcnZhbF9jb3VudCA/PyB2b2lkIDAsXG4gICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgfSxcbiAgICBtYW5hZ2VtZW50VVJMOiBgaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb20vcGF5LyR7cHJlZmlsbC50b2tlbn1gXG4gIH07XG59O1xuY29uc3QgY3JlYXRlQXBwbGVQYXlUb3RhbCA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gIGluaXRpYWxQcmV2aWV3LFxuICBwcmVmaWxsLFxuICBkZWZhdWx0TGFiZWwgPSBcIlRvdGFsXCJcbn0pID0+IHtcbiAgY29uc3QgY3VycmVuY3lDb2RlID0gKG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFtb3VudD8uY3VycmVuY3kgPz8gcHJlZmlsbD8uY3VycmVuY3kgPz8gaW5pdGlhbFByZXZpZXcuY3VycmVuY3kpLnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IGFtb3VudEF0b20gPSBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmFtb3VudEF0b20gPz8gaW5pdGlhbFByZXZpZXc/LmFtb3VudEF0b20gPz8gMDtcbiAgY29uc3QgYW1vdW50ID0gKGFtb3VudEF0b20gLyAxMDApLnRvRml4ZWQoMik7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3lDb2RlLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8ubGFiZWwgPz8gZGVmYXVsdExhYmVsID8/IFwiVG90YWxcIixcbiAgICAgIHR5cGU6IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LnBlbmRpbmcgPyBcInBlbmRpbmdcIiA6IFwiZmluYWxcIixcbiAgICAgIGFtb3VudFxuICAgIH1cbiAgfTtcbn07XG5jb25zdCBnZXRBcHBsZVBheVBheW1lbnRSZXF1ZXN0ID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgaW5pdGlhbFByZXZpZXcsXG4gIHByZWZpbGwsXG4gIGRlZmF1bHRMYWJlbFxufSkgPT4ge1xuICBjb25zdCB7IGN1cnJlbmN5Q29kZSwgdG90YWwgfSA9IGNyZWF0ZUFwcGxlUGF5VG90YWwoe1xuICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgaW5pdGlhbFByZXZpZXcsXG4gICAgcHJlZmlsbCxcbiAgICBkZWZhdWx0TGFiZWxcbiAgfSk7XG4gIGxldCBwYXltZW50UmVxdWVzdCA9IHtcbiAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgIGN1cnJlbmN5Q29kZSxcbiAgICByZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiLCBcInBvc3RhbEFkZHJlc3NcIiwgXCJuYW1lXCJdLFxuICAgIHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzOiBbXG4gICAgICBcImVtYWlsXCIsXG4gICAgICAuLi5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzLnJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzID8gW1wicG9zdGFsQWRkcmVzc1wiXSA6IFtdXG4gICAgXSxcbiAgICBzdXBwb3J0ZWROZXR3b3JrczogW1widmlzYVwiLCBcIm1hc3RlckNhcmRcIiwgXCJhbWV4XCIsIFwiZGlzY292ZXJcIiwgXCJqY2JcIl0sXG4gICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IFtcInN1cHBvcnRzM0RTXCIsIFwic3VwcG9ydHNDcmVkaXRcIiwgXCJzdXBwb3J0c0RlYml0XCJdLFxuICAgIHRvdGFsXG4gIH07XG4gIGNvbnN0IGlzQWxsUmVjdXJyaW5nID0gcHJlZmlsbC5saW5lX2l0ZW1zLmV2ZXJ5KChpdGVtKSA9PiBpdGVtLmJpbGxpbmdfaW50ZXJ2YWwgJiYgaXRlbS5iaWxsaW5nX2ludGVydmFsX2NvdW50KTtcbiAgaWYgKGlzQWxsUmVjdXJyaW5nKSB7XG4gICAgcGF5bWVudFJlcXVlc3QucmVjdXJyaW5nUGF5bWVudFJlcXVlc3QgPSBjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCh7XG4gICAgICB0b3RhbCxcbiAgICAgIHByZWZpbGxcbiAgICB9KTtcbiAgfVxuICBpZiAoIW92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QpIHJldHVybiBwYXltZW50UmVxdWVzdDtcbiAgaWYgKHR5cGVvZiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHBheW1lbnRSZXF1ZXN0ID0ge1xuICAgICAgLi4ucGF5bWVudFJlcXVlc3QsXG4gICAgICAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QocGF5bWVudFJlcXVlc3QpXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBwYXltZW50UmVxdWVzdCA9IHsgLi4ucGF5bWVudFJlcXVlc3QsIC4uLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QuYXBwbGVQYXlQYXltZW50UmVxdWVzdCB9O1xuICB9XG4gIHJldHVybiBwYXltZW50UmVxdWVzdDtcbn07XG5cbmNvbnN0IEFkeWVuRW52aXJvbm1lbnQgPSB6LmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pO1xuY29uc3QgQWR5ZW5Mb2NhbGUgPSB6LmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyRxLCBlcnJfXzogZXJyX18kcCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhZHllbi1jY1wiKTtcbmNvbnN0IEFkeWVuM2RzUmVzcG9uc2VIZWFkZXJzID0gei5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1jbGllbnQta2V5XCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tZW52aXJvbm1lbnRcIjogQWR5ZW5FbnZpcm9ubWVudCxcbiAgXCJvcC1hZHllbi1hY3Rpb25cIjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDIgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBZHllbjNkc1Jlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRwKGBBZHllbiAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGRlY29kZUFkeWVuQWN0aW9uID0gKGFjdGlvbikgPT4ge1xuICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBKU09OLnBhcnNlKGFjdGlvbik7XG4gIHJldHVybiBkZXNlcmlhbGl6ZWQ7XG59O1xuY29uc3QgaXNBZHllbkF2YWlsYWJsZSA9ICgpID0+IHtcbiAgcmV0dXJuIFwiQWR5ZW5XZWJcIiBpbiB3aW5kb3cgJiYgXCJBZHllbkNoZWNrb3V0XCIgaW4gd2luZG93W1wiQWR5ZW5XZWJcIl07XG59O1xuY29uc3QgZ2V0QWR5ZW5DaGVja291dCA9IGFzeW5jICgpID0+IHtcbiAgbG9nX18kcShcIldhaXRpbmcgZm9yIEFkeWVuIFNESyB0byBsb2FkLi4uXCIpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICBpZiAoIWlzQWR5ZW5BdmFpbGFibGUoKSkge1xuICAgICAgYXdhaXQgc2xlZXAoNTAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc0FkeWVuQXZhaWxhYmxlKCkpIHtcbiAgICBlcnJfXyRwKFwiQWR5ZW4gU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICBsb2dfXyRxKFwiQWR5ZW4gU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIik7XG4gIHJldHVybiB3aW5kb3dbXCJBZHllbldlYlwiXVtcIkFkeWVuQ2hlY2tvdXRcIl07XG59O1xuY29uc3QgaGFuZGxlQWR5ZW4zZHMgPSAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHsgaGVhZGVycywgbG9jYWxlLCBjb3VudHJ5Q29kZSwgY29tcG9uZW50LCBob3N0LCBjYW5jZWxCdXR0b24gfSA9IHBhcmFtcztcbiAgY29uc3QgYWN0aW9uID0gZGVjb2RlQWR5ZW5BY3Rpb24oaGVhZGVyc1tcIm9wLWFkeWVuLWFjdGlvblwiXSk7XG4gIGxvZ19fJHEoYFJ1bm5pbmcgQWR5ZW4gM0RTIGZsb3cgZm9yIGFjdGlvbiB0eXBlOiAke2FjdGlvbi50eXBlfWApO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgbG9nX18kcShcIkNsZWFuaW5nIHVwIEFkeWVuIDNEUyBmbG93XCIpO1xuICAgICAgY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNhbmNlbCk7XG4gICAgICBob3N0LnJlbW92ZSgpO1xuICAgIH07XG4gICAgY29uc3Qgb25QYXltZW50RmFpbGVkID0gKHN0YXRlKSA9PiB7XG4gICAgICBlcnJfXyRwKFwiQXV0aGVudGljYXRpb24gZmFpbGVkLiBSZXN1bHQ6XCIsIHN0YXRlKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuRkFJTFVSRSwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgIGVycl9fJHAoXCJBZHllbiBlcnJvcjpcIiwgZXJyb3IpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5GQUlMVVJFLCBjbGVhbnVwIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25DYW5jZWwgPSAoKSA9PiB7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DYW5jZWwpO1xuICAgIGNvbnN0IG9uQWRkaXRpb25hbERldGFpbHMgPSAoc3RhdGUsIF8sIF9fKSA9PiB7XG4gICAgICBob3N0LnJlbW92ZSgpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5TVUNDRVNTLCBhZGRpdGlvbmFsRGV0YWlsczogc3RhdGUsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBnZXRBZHllbkNoZWNrb3V0KCkudGhlbihcbiAgICAgIChhZHllbkNoZWNrb3V0KSA9PiBhZHllbkNoZWNrb3V0KHtcbiAgICAgICAgY2xpZW50S2V5OiBoZWFkZXJzW1wib3AtYWR5ZW4tY2xpZW50LWtleVwiXSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IGhlYWRlcnNbXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiXSxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBjb3VudHJ5Q29kZSxcbiAgICAgICAgb25BZGRpdGlvbmFsRGV0YWlscyxcbiAgICAgICAgb25QYXltZW50RmFpbGVkLFxuICAgICAgICBvbkVycm9yXG4gICAgICB9KVxuICAgICkudGhlbigoY2hlY2tvdXQpID0+IHtcbiAgICAgIGNoZWNrb3V0LmNyZWF0ZUZyb21BY3Rpb24oYWN0aW9uLCB7IGNoYWxsZW5nZVdpbmRvd1NpemU6IFwiMDNcIiB9KS5tb3VudChjb21wb25lbnQpO1xuICAgIH0pO1xuICB9KTtcbn07XG5jb25zdCBkZXRlcm1pbmVMb2NhbGUgPSAocHJlZmlsbExvY2FsZSkgPT4ge1xuICBjb25zdCBicm93c2VyTG9jYWxlID0gbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gOiBuYXZpZ2F0b3IubGFuZ3VhZ2U7XG4gIGNvbnN0IGxvY2FsZSA9IHByZWZpbGxMb2NhbGUgPz8gYnJvd3NlckxvY2FsZTtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBZHllbkxvY2FsZS5zYWZlUGFyc2UobG9jYWxlKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgZXJyX18kcChgUmVzb2x2ZWQgaW52YWxpZCBsb2NhbGU6ICR7bG9jYWxlfS4gRGVmYXVsdGluZyB0byBlbi1VUy5gKTtcbiAgICByZXR1cm4gXCJlbi1VU1wiO1xuICB9XG4gIGxvZ19fJHEoYFJlc29sdmVkIGxvY2FsZTogJHtwYXJzZVJlc3VsdC5kYXRhfWApO1xuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBjaGVja0lmUmVxdWlyZXNBZHllbjNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLWFkeWVuLWFjdGlvblwiXSAhPT0gdm9pZCAwO1xufTtcbmNvbnN0IHJ1bkFkeWVuM2RzRmxvdyA9IGFzeW5jIChjb3VudHJ5Q29kZSwgZXJyb3JSZXNwb25zZUhlYWRlcnMsIHByZWZpbGxMb2NhbGUpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDIoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCBjb21wb25lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjb21wb25lbnQuaWQgPSBcImFkeWVuLWNvbnRhaW5lclwiO1xuICBjb25zdCB7IGhvc3QsIGlmcmFtZSwgY2FuY2VsQnV0dG9uIH0gPSBjcmVhdGVBbmRPcGVuRnJhbWUoXCJodHRwOi8vZXhhbXBsZS5jb21cIik7XG4gIGlmcmFtZS5yZXBsYWNlV2l0aChjb21wb25lbnQpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVBZHllbjNkcyh7XG4gICAgaGVhZGVycyxcbiAgICBsb2NhbGU6IGRldGVybWluZUxvY2FsZShwcmVmaWxsTG9jYWxlKSxcbiAgICBjb3VudHJ5Q29kZSxcbiAgICBjb21wb25lbnQsXG4gICAgaG9zdCxcbiAgICBjYW5jZWxCdXR0b25cbiAgfSk7XG4gIHJlc3VsdC5jbGVhbnVwKCk7XG4gIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuU1VDQ0VTUykge1xuICAgIGlmICghcmVzdWx0LmFkZGl0aW9uYWxEZXRhaWxzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZCBidXQgbm8gYWRkaXRpb25hbCBkZXRhaWxzIHdlcmUgcmV0dXJuZWRcIik7XG4gICAgfVxuICAgIGxvZ19fJHEoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgICAgYWRkaXRpb25hbF9kZXRhaWxzOiByZXN1bHQuYWRkaXRpb25hbERldGFpbHMuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0TmV2ZXIocmVzdWx0LnN0YXR1cyk7XG4gIH1cbn07XG5jb25zdCBBcHBsZVBheUNwbSQxID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBHb29nbGVQYXlDcG0kMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhZHllblwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kcCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQyKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZXZlbnQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBjb250ZXh0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGNvbnN0IHBheW1lbnRTZXNzaW9uUmVzcG9uc2UgPSBuZXh0QWN0aW9uTWV0YWRhdGE/LltcImFwcGxlX3BheV9zZXNzaW9uXCJdO1xuICAgIGlmICghcGF5bWVudFNlc3Npb25SZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIH1cbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24ocGF5bWVudFNlc3Npb25SZXNwb25zZSk7XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5wYXltZW50U2Vzc2lvblJlc3BvbnNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnRleHQuc2Vzc2lvbi5hYm9ydCgpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMihldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHBheW1lbnREYXRhID0gZXZlbnQucGF5bWVudDtcbiAgICBjb25zdCBmb3JtSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheShjb250ZXh0Lm5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICBmb3JtSW5wdXRzLFxuICAgICAgY29udGV4dC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGNvbnRleHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBjb250ZXh0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgfSk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBicm93c2VyX2luZm86IGdldEZyYXVkTWV0YWRhdGEoKSxcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsb2dfXyRwKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgY29uc3Qgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuY29uc3QgeyBsb2dfXzogbG9nX18kbywgZXJyX186IGVycl9fJG8gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYWR5ZW4tYXBwbGUtcGF5XCIpO1xuY29uc3QgaW5pdEFkeWVuQXBwbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDEpO1xuICAgIGlmICghYXBwbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kbyhcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkQXBwbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSkge1xuICAgICAgbG9nX18kbyhcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJG8oXCJBcHBsZSBQYXkgTG9hZGVkXCIpO1xuICAgIGNvbnN0IGNhbk1ha2VQYXltZW50cyA9IGF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKTtcbiAgICBpZiAoIWNhbk1ha2VQYXltZW50cykge1xuICAgICAgbG9nX18kbyhcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGFwcGxlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uQXBwbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBPanNGbG93cy5hZHllbkFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGFwcGxlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJG8oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25BcHBsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BZHllbkFwcGxlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGZvcm1DYWxsYmFja3NcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDEpO1xuICAgIGNvbnN0IHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCwgaW5pdGlhbFByZXZpZXcgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBnZXRBcHBsZVBheVBheW1lbnRSZXF1ZXN0KHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIHByZWZpbGw6IHtcbiAgICAgICAgLi4ucHJlZmlsbFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgcGF5bWVudFJlcXVlc3QpO1xuICAgIGNvbnN0IHNlc3Npb25Db250ZXh0ID0ge1xuICAgICAgc2Vzc2lvbixcbiAgICAgIGNvbm5lY3Rpb246IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBhcHBsZVBheUNwbS5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBpc1NldHVwTW9kZSxcbiAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGV4Y2x1ZGVQcm9wcyhwcmVmaWxsLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgbG9nX18kbyhcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMihldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3MiA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiBjcmVhdGVBcHBsZVBheVRvdGFsKHtcbiAgICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IGluaXRpYWxQcmV2aWV3MixcbiAgICAgICAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICAgICAgcHJlZmlsbFxuICAgICAgICAgIH0pLnRvdGFsXG4gICAgICAgIH07XG4gICAgICAgIHNlc3Npb24uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVQYXltZW50QXV0aG9yaXplZCQyKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25jYW5jZWwgPSBoYW5kbGVDYW5jZWw7XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kbyhcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJG4sIGVycl9fOiBlcnJfXyRuIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFkeWVuLWdvb2dsZS1wYXlcIik7XG5jb25zdCBpbml0QWR5ZW5Hb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMSk7XG4gICAgaWYgKCFnb29nbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kbihcIkdvb2dsZSBQYXkgQ1BNXCIsIGdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIGVycl9fJG4oXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRuKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkR29vZ2xlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuZ29vZ2xlPy5wYXltZW50cz8uYXBpKSB7XG4gICAgICBlcnJfXyRuKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBhd2FpdCBnZXRHb29nbGVQYXlFbnZpcm9ubWVudChjb250ZXh0LmJhc2VVcmwpO1xuICAgIGlmIChlbnZpcm9ubWVudCA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIXByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCkge1xuICAgICAgZXJyX18kbihcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJG4oXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgICBwcmVmaWxsLFxuICAgICAgICBnYXRld2F5OiBcImFkeWVuXCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGNvbnN0IHsgcmVzdWx0OiBpc1JlYWR5VG9QYXkgfSA9IGF3YWl0IGNsaWVudC5pc1JlYWR5VG9QYXkocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGlmICghaXNSZWFkeVRvUGF5KSB7XG4gICAgICAgIGxvZ19fJG4oXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKTtcbiAgICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kbihcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIGVycik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IG9uR29vZ2xlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgT2pzRmxvd3MuYWR5ZW5Hb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZ29vZ2xlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJG4oXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uR29vZ2xlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkFkeWVuR29vZ2xlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJG4oXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSQxKTtcbiAgICBjb25zdCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gZ29vZ2xlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBwcmVmaWxsLFxuICAgICAgZ2F0ZXdheTogXCJhZHllblwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgdHJhY2soXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogZ29vZ2xlUGF5Q3BtLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogZXhjbHVkZVByb3BzKHByZWZpbGwsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhID0gYXdhaXQgY2xpZW50LmxvYWRQYXltZW50RGF0YShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgbG9nX18kbihcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5KG5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgICAgbWVyZ2VkSW5wdXRzLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgY3VzdG9tUGFyYW1zPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGxvZ19fJG4oXCJTdGFydCBmbG93IG5leHQgYWN0aW9uc1wiLCBzdGFydEZsb3dOZXh0QWN0aW9ucyk7XG4gICAgICBsZXQgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgIGJyb3dzZXJfaW5mbzogZ2V0RnJhdWRNZXRhZGF0YSgpLFxuICAgICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJG4oXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgIGxldCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhZHllbi0zZHNcIik7XG4gICAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhICYmIG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgbG9nX18kbihcIkFkeWVuIDNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIG5leHRBY3Rpb25NZXRhZGF0YSk7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgICAgdXJsOiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsLFxuICAgICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kbihg4pWwIEFkeWVuIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YSAmJiAhb3VyUG1JZCkge1xuICAgICAgICBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgdGhlaXJfcG1faWQ6IG5leHRBY3Rpb25NZXRhZGF0YS50aGVpcl9wbV9pZCxcbiAgICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJG4oXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZSBhZnRlciAzRFNcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgIG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIH1cbiAgICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IG1ldGhvZCBJRCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRuKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRtLCBlcnJfXzogZXJyX18kbSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYWNoXCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4QUNIRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCB2ZXJpZmljYXRpb25NZXRob2QgPSBjdXN0b21QYXJhbXMudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwicGxhaWRcIjtcbiAgICBsZXQgbWljcm9EZXBvc2l0RGF0YSA9IG51bGw7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJtaWNyb19kZXBvc2l0XCIpIHtcbiAgICAgIGxvZ19fJG0oXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWljcm9EZXBvc2l0RGF0YSA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5NaWNyb0RlcG9zaXRGb3JtKFwiYWNoX2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNDAwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJG0oXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kbShcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFjaF9kaXJlY3RfZGViaXRcIixcbiAgICAgICAgICBhY2hfZGlyZWN0X2RlYml0OiB7XG4gICAgICAgICAgICAvL3BsYWlkIHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIGJ1c2luZXNzX2FjY291bnQ6IGN1c3RvbVBhcmFtcy5pc0J1c2luZXNzQWNjb3VudCA/PyBmYWxzZSxcbiAgICAgICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgICAgICAvL0FDSCBtaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIGFjY291bnRfbnVtYmVyOiBtaWNyb0RlcG9zaXREYXRhPy5hY2NvdW50X251bWJlcixcbiAgICAgICAgICAgIGFiYV9yb3V0aW5nX251bWJlcjogbWljcm9EZXBvc2l0RGF0YT8uYWJhX3JvdXRpbmdfbnVtYmVyXG4gICAgICAgICAgICAvLyBtYW5kYXRlX3ZlcnNpb246ICcxLjAnLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApPy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHJlZGlyZWN0VXJsKSB7XG4gICAgICBsb2dfXyRtKFwiUGxhaWQgdmVyaWZpY2F0aW9uIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICB1cmw6IHJlZGlyZWN0VXJsLFxuICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJBQ0ggdmVyaWZpY2F0aW9uXCJcbiAgICAgIH0pO1xuICAgICAgbG9nX18kbShg4pWwIFBsYWlkIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxhaWQgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGFpZCB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBuZXdDb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWFjaFwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogbmV3Q29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRtKFwiQUNIIHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kbCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBldmVudC52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IGNvbnRleHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UubmV4dF9hY3Rpb25fbWV0YWRhdGE7XG4gICAgY29uc3QgcGF5bWVudFNlc3Npb25SZXNwb25zZSA9IG5leHRBY3Rpb25NZXRhZGF0YT8uW1wiYXBwbGVfcGF5X3Nlc3Npb25cIl07XG4gICAgaWYgKCFwYXltZW50U2Vzc2lvblJlc3BvbnNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgfVxuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihwYXltZW50U2Vzc2lvblJlc3BvbnNlKTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLnBheW1lbnRTZXNzaW9uUmVzcG9uc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29udGV4dC5zZXNzaW9uLmFib3J0KCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGUzRFMobmV4dEFjdGlvbk1ldGFkYXRhLCBjb250ZXh0KSB7XG4gIGlmICghbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZFwiKTtcbiAgfVxuICBsb2dfXyRsKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgbmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gIH0pO1xuICBsb2dfXyRsKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBjb250ZXh0LnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkLFxuICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IG5leHRBY3Rpb25NZXRhZGF0YS5jb25zZW50X2lkLFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICB9XG4gIH0pO1xuICBsb2dfXyRsKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gIHJldHVybiBjb25maXJtUmVzdWx0O1xufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMShldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHBheW1lbnREYXRhID0gZXZlbnQucGF5bWVudDtcbiAgICBjb25zdCBmb3JtSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheShjb250ZXh0Lm5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICBmb3JtSW5wdXRzLFxuICAgICAgY29udGV4dC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGNvbnRleHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBjb250ZXh0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgfSk7XG4gICAgY29uc3QgcmVxdWlyZWRVc2VyQWN0aW9ucyA9IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF07XG4gICAgY29uc3QgY29uc2VudElkID0gcmVxdWlyZWRVc2VyQWN0aW9ucy5jb25zZW50X2lkO1xuICAgIGlmICghY29uc2VudElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25zZW50IElEIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIH1cbiAgICBsZXQgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkLFxuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYXBwbGVwYXlcIixcbiAgICAgICAgICBhcHBsZXBheToge1xuICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShwYXltZW50RGF0YS50b2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsb2dfXyRsKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgbGV0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk7XG4gICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YT8ucmVkaXJlY3RfdXJsICYmIG5leHRBY3Rpb25NZXRhZGF0YS5jb25zZW50X2lkICYmIG5leHRBY3Rpb25NZXRhZGF0YS50aGVpcl9wbV9pZCkge1xuICAgICAgY29uZmlybVJlc3VsdCA9IGF3YWl0IGhhbmRsZTNEUyhuZXh0QWN0aW9uTWV0YWRhdGEsIGNvbnRleHQpO1xuICAgICAgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIH1cbiAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRrLCBlcnJfXzogZXJyX18kbCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYXBwbGUtcGF5XCIpO1xuY29uc3QgaW5pdEFpcndhbGxleEFwcGxlUGF5RmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0kMik7XG4gICAgaWYgKCFhcHBsZVBheUNwbSkge1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRrKFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpO1xuICAgIGF3YWl0IGxvYWRBcHBsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKSB7XG4gICAgICBsb2dfXyRrKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kayhcIkFwcGxlIFBheSBMb2FkZWRcIik7XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnRzID0gYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpO1xuICAgIGlmICghY2FuTWFrZVBheW1lbnRzKSB7XG4gICAgICBsb2dfXyRrKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gYXBwbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3Qgb25BcHBsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IE9qc0Zsb3dzLmFpcndhbGxleEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGFwcGxlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJGwoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uQXBwbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQWlyd2FsbGV4QXBwbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgZm9ybUNhbGxiYWNrc1xuICB9KSA9PiB7XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0kMik7XG4gICAgY29uc3QgeyBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0gZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCh7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGN1c3RvbVBhcmFtcy5pbml0aWFsUHJldmlldyxcbiAgICAgIHByZWZpbGw6IHtcbiAgICAgICAgLi4ucHJlZmlsbFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgcGF5bWVudFJlcXVlc3QpO1xuICAgIGNvbnN0IHNlc3Npb25Db250ZXh0ID0ge1xuICAgICAgc2Vzc2lvbixcbiAgICAgIGNvbm5lY3Rpb246IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBhcHBsZVBheUNwbS5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBpc1NldHVwTW9kZSxcbiAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGV4Y2x1ZGVQcm9wcyhwcmVmaWxsLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgbG9nX18kayhcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9uY2FuY2VsID0gaGFuZGxlQ2FuY2VsO1xuICAgICAgc2Vzc2lvbi5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50JDEoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiBjcmVhdGVBcHBsZVBheVRvdGFsKHtcbiAgICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICAgICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgICAgIHByZWZpbGxcbiAgICAgICAgICB9KS50b3RhbFxuICAgICAgICB9O1xuICAgICAgICBzZXNzaW9uLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih1cGRhdGUpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMShldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kbChcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGosIGVycl9fOiBlcnJfXyRrIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1nb29nbGUtcGF5XCIpO1xuY29uc3QgaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCB1bmF2YWlsYWJsZVJlc3VsdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMik7XG4gICAgaWYgKCFnb29nbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kaihcIkdvb2dsZSBQYXkgQ1BNXCIsIGdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIGVycl9fJGsoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRqKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkR29vZ2xlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuZ29vZ2xlPy5wYXltZW50cz8uYXBpKSB7XG4gICAgICBlcnJfXyRrKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBhd2FpdCBnZXRHb29nbGVQYXlFbnZpcm9ubWVudChjb250ZXh0LmJhc2VVcmwpO1xuICAgIGlmIChlbnZpcm9ubWVudCA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIXByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCkge1xuICAgICAgZXJyX18kayhcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGooXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgICBwcmVmaWxsLFxuICAgICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBjb25zdCB7IHJlc3VsdDogaXNSZWFkeVRvUGF5IH0gPSBhd2FpdCBjbGllbnQuaXNSZWFkeVRvUGF5KHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBpZiAoIWlzUmVhZHlUb1BheSkge1xuICAgICAgICBsb2dfXyRqKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIik7XG4gICAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJGsoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCBlcnIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBvbkdvb2dsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9qc0Zsb3dzLmFpcndhbGxleEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBnb29nbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kayhcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uR29vZ2xlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkFpcndhbGxleEdvb2dsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyRqKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMik7XG4gICAgY29uc3QgeyBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgcHJlZmlsbCxcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICB0cmFjayhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBnb29nbGVQYXlDcG0ucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBleGNsdWRlUHJvcHMocHJlZmlsbCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGEgPSBhd2FpdCBjbGllbnQubG9hZFBheW1lbnREYXRhKHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBsb2dfXyRqKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhHb29nbGVQYXkobm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgICBtZXJnZWRJbnB1dHMsXG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBjdXN0b21QYXJhbXM/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICAgKTtcbiAgICAgIGxvZ19fJGooXCJfX19cIiwgbm9uQ2RlRm9ybUZpZWxkcyk7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGxvZ19fJGooXCJTdGFydCBmbG93IG5leHQgYWN0aW9uc1wiLCBzdGFydEZsb3dOZXh0QWN0aW9ucyk7XG4gICAgICBsZXQgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgIC8vIEdvb2dsZVBheSdzIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuIHByb3ZpZGVkIHRvIHZlcmlmeSB0aGUgY29uc2VudCBmaXJzdFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZCxcbiAgICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgICAgdHlwZTogXCJnb29nbGVwYXlcIixcbiAgICAgICAgICAgIGdvb2dsZXBheToge1xuICAgICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogZW5jcnlwdGVkUGF5bWVudFRva2VuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJGooXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgIGxldCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YSAmJiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIGxvZ19fJGooXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICAgICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICAgIHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJGooYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEgJiYgIW91clBtSWQpIHtcbiAgICAgICAgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICAgIHRoZWlyX3BtX2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQsXG4gICAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLmNvbnNlbnRfaWRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRqKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgIG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIH1cbiAgICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kayhcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kaSwgZXJyX186IGVycl9fJGogfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwia2xhcm5hXCIpO1xuY29uc3QgQWlyd2FsbGV4S2xhcm5hQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwia2xhcm5hXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe30pLm51bGxpc2goKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFpcndhbGxleFwiKVxufSk7XG5jb25zdCBpbml0QWlyd2FsbGV4S2xhcm5hRmxvdyA9IGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICBjb25zdCBrbGFybmFDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQWlyd2FsbGV4S2xhcm5hQ3BtKTtcbiAgaWYgKCFrbGFybmFDcG0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJLbGFybmEgQ1BNIG5vdCBmb3VuZCBpbiBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzXCIpO1xuICB9XG4gIGNvbnN0IHN0YXJ0RmxvdyA9IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICByZXR1cm4gT2pzRmxvd3MuYWlyd2FsbGV4S2xhcm5hLnJ1bih7XG4gICAgICBjb250ZXh0LFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBrbGFybmFDcG0sXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICBjdXN0b21QYXJhbXM6IGN1c3RvbVBhcmFtcyA/PyB7fVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgc3RhcnRGbG93XG4gIH07XG59O1xuY29uc3QgcnVuQWlyd2FsbGV4S2xhcm5hRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBsb2dfXyRpKGBSdW5uaW5nIEtsYXJuYSBmbG93Li4uYCwgY3VzdG9tUGFyYW1zKTtcbiAgICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICAgIGNvbnN0IGlzQW5vbnltb3VzID0gZmFsc2U7XG4gICAgICBsb2dfXyRpKGBWZXJpZnlpbmcgQ1BNLi4uYCk7XG4gICAgICBjb25zdCBjcG0gPSBBaXJ3YWxsZXhLbGFybmFDcG0ucGFyc2UoY2hlY2tvdXRQYXltZW50TWV0aG9kKTtcbiAgICAgIGxvZ19fJGkoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNgKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvciwge1xuICAgICAgICAuLi5pc0Fub255bW91cyA/IGdlbmVyYXRlQW5vbnltb3VzVmFsdWVzKCkgOiB2b2lkIDAsXG4gICAgICAgIC4uLnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbmV3Q3VzdG9tZXJGaWVsZHMgPSBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgICAgbG9nX18kaShcIk5ldyBjdXN0b21lciBmaWVsZHNcIiwgbmV3Q3VzdG9tZXJGaWVsZHMpO1xuICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKVxuICAgICAgfSk7XG4gICAgICBjb25zb2xlLmxvZyhcInN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZVwiLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwia2xhcm5hXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogY3BtLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IHtcbiAgICAgICAgICBwYXltZW50X21ldGhvZHM6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kaihcIktsYXJuYSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHsgcGF5bWVudF9tZXRob2Q6IFwia2xhcm5hXCIsIGVycm9yOiBlcnIgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IEFwcGxlUGF5Q3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IEdvb2dsZVBheUNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50KGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGV2ZW50LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogY29udGV4dC5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBjb25zdCBwYXltZW50U2Vzc2lvblJlc3BvbnNlID0gbmV4dEFjdGlvbk1ldGFkYXRhPy5bXCJhcHBsZV9wYXlfc2Vzc2lvblwiXTtcbiAgICBpZiAoIXBheW1lbnRTZXNzaW9uUmVzcG9uc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB9XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKHBheW1lbnRTZXNzaW9uUmVzcG9uc2UpO1xuICAgIHRyYWNrKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4ucGF5bWVudFNlc3Npb25SZXNwb25zZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb250ZXh0LnNlc3Npb24uYWJvcnQoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVBheW1lbnRBdXRob3JpemVkKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bWVudERhdGEgPSBldmVudC5wYXltZW50O1xuICAgIGNvbnN0IGZvcm1JbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5KGNvbnRleHQubm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhmb3JtSW5wdXRzLCBjb250ZXh0LmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBjb250ZXh0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBjb25zdCBtb2JpbGVXYWxsZXRQYXltZW50RGF0YSA9IHtcbiAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5BUFBMRS5JTkFQUC5QQVlNRU5UXCIsXG4gICAgICBkYXRhVmFsdWU6IHdpbmRvdy5idG9hKEpTT04uc3RyaW5naWZ5KHBheW1lbnREYXRhLnRva2VuLnBheW1lbnREYXRhKSlcbiAgICB9O1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IG1vYmlsZVdhbGxldFBheW1lbnREYXRhXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3Qgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRoLCBlcnJfXzogZXJyX18kaSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhdXRobmV0LWFwcGxlcGF5XCIpO1xuY29uc3QgaW5pdEF1dGhuZXRBcHBsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCB1bmF2YWlsYWJsZVJlc3VsdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSk7XG4gICAgaWYgKCFhcHBsZVBheUNwbSkge1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRoKFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpO1xuICAgIGF3YWl0IGxvYWRBcHBsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKSB7XG4gICAgICBsb2dfXyRoKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnRzID0gYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpO1xuICAgIGlmICghY2FuTWFrZVBheW1lbnRzKSB7XG4gICAgICBsb2dfXyRoKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gYXBwbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3Qgb25BcHBsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGFwcGxlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJGkoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogZXJyXG4gICAgICAgIH0pO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkFwcGxlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkF1dGhuZXRBcHBsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBmb3JtQ2FsbGJhY2tzXG4gIH0pID0+IHtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0pO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBwYXltZW50UmVxdWVzdCA9IGdldEFwcGxlUGF5UGF5bWVudFJlcXVlc3Qoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgcHJlZmlsbCxcbiAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHBheW1lbnRSZXF1ZXN0KTtcbiAgICBjb25zdCBzZXNzaW9uQ29udGV4dCA9IHtcbiAgICAgIHNlc3Npb24sXG4gICAgICBjb25uZWN0aW9uOiBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbCxcbiAgICAgIGlzU2V0dXBNb2RlLFxuICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrc1xuICAgIH07XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNlc3Npb24ub25jYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGxvZ19fJGgoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50KGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5pdGlhbFByZXZpZXcyID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgICAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IGNyZWF0ZUFwcGxlUGF5VG90YWwoe1xuICAgICAgICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY3VzdG9tUGFyYW1zLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogaW5pdGlhbFByZXZpZXcyLFxuICAgICAgICAgICAgZGVmYXVsdExhYmVsOiBhcHBsZVBheUNwbT8ubWV0YWRhdGE/LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgICAgICBwcmVmaWxsXG4gICAgICAgICAgfSkudG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odXBkYXRlKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVBheW1lbnRBdXRob3JpemVkKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBlcnJfXyRpKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kZywgZXJyX186IGVycl9fJGggfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXV0aG5ldC1nb29nbGVwYXlcIik7XG5jb25zdCBpbml0QXV0aG5ldEdvb2dsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyRnKFwiSW5pdGlhbGl6aW5nIEF1dGhuZXQgR29vZ2xlUGF5IGZsb3dcIik7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSk7XG4gICAgaWYgKCFnb29nbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZyhcIkdvb2dsZSBQYXkgQ1BNXCIsIGdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIGVycl9fJGgoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRnKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkR29vZ2xlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuZ29vZ2xlPy5wYXltZW50cz8uYXBpKSB7XG4gICAgICBlcnJfXyRoKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZyhcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICAgIHByZWZpbGwsXG4gICAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGNvbnN0IHsgcmVzdWx0OiBpc1JlYWR5VG9QYXkgfSA9IGF3YWl0IGNsaWVudC5pc1JlYWR5VG9QYXkocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGlmICghaXNSZWFkeVRvUGF5KSB7XG4gICAgICAgIGxvZ19fJGcoXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKTtcbiAgICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kaChcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIGVycik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IG9uR29vZ2xlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgT2pzRmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGdvb2dsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRoKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogZXJyXG4gICAgICAgIH0pO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkdvb2dsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BdXRobmV0R29vZ2xlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBwcmVmaWxsLFxuICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YSA9IGF3YWl0IGNsaWVudC5sb2FkUGF5bWVudERhdGEocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGxvZ19fJGcoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheShub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgICAgfSk7XG4gICAgICBsb2dfXyRnKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5HT09HTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShlbmNyeXB0ZWRQYXltZW50VG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJGgoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGYsIGVycl9fOiBlcnJfXyRnIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImN5YnMtZnJhbWVcIik7XG5jb25zdCBhdHRhY2hEZXZpY2VEYXRhQ29sbGVjdG9yID0gKHBvc3RVcmwsIGFjY2Vzc1Rva2VuKSA9PiB7XG4gIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG4gIGlmcmFtZS5uYW1lID0gXCJjYXJkaW5hbF9jb2xsZWN0aW9uX2lmcmFtZVwiO1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICBpZnJhbWUuc3R5bGUud2lkdGggPSBcIjEwcHhcIjtcbiAgaWZyYW1lLnN0eWxlLmhlaWdodCA9IFwiMTBweFwiO1xuICBjb25zdCBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZvcm1cIik7XG4gIGZvcm0uYWN0aW9uID0gcG9zdFVybDtcbiAgZm9ybS5tZXRob2QgPSBcIlBPU1RcIjtcbiAgZm9ybS50YXJnZXQgPSBpZnJhbWUubmFtZTtcbiAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gIGlucHV0LnR5cGUgPSBcImhpZGRlblwiO1xuICBpbnB1dC5uYW1lID0gXCJKV1RcIjtcbiAgaW5wdXQudmFsdWUgPSBhY2Nlc3NUb2tlbjtcbiAgZm9ybS5hcHBlbmRDaGlsZChpbnB1dCk7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmb3JtKTtcbiAgY29uc3QgZGV0YWNoID0gKCkgPT4ge1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGZvcm0pO1xuICB9O1xuICByZXR1cm4geyBmb3JtLCBkZXRhY2ggfTtcbn07XG5jb25zdCBydW5EZXZpY2VEYXRhQ29sbGVjdGlvbiA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB7IHBvc3RVcmwsIGFjY2Vzc1Rva2VuIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgZXhwZWN0ZWRPcmlnaW4gPSBuZXcgVVJMKHBvc3RVcmwpLm9yaWdpbjtcbiAgICBjb25zdCB7IGZvcm0sIGRldGFjaCB9ID0gYXR0YWNoRGV2aWNlRGF0YUNvbGxlY3Rvcihwb3N0VXJsLCBhY2Nlc3NUb2tlbik7XG4gICAgbG9nX18kZihcIkF0dGFjaGVkIGRldmljZSBkYXRhIGNvbGxlY3RvclwiKTtcbiAgICBjb25zdCBoYW5kbGVDb2xsZWN0aW9uRXZlbnQgPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5vcmlnaW4gIT09IGV4cGVjdGVkT3JpZ2luKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpO1xuICAgICAgbG9nX18kZihcIlJlY2VpdmVkIGV2ZW50IGZyb20gZGV2aWNlIGRhdGEgY29sbGVjdG9yOlwiLCBkYXRhKTtcbiAgICAgIGlmIChkYXRhW1wiTWVzc2FnZVR5cGVcIl0gPT09IFwicHJvZmlsZS5jb21wbGV0ZWRcIikge1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBkZXRhY2goKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBoYW5kbGVDb2xsZWN0aW9uRXZlbnQpO1xuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBoYW5kbGVDb2xsZWN0aW9uRXZlbnQpO1xuICAgICAgbG9nX18kZihcIkF0dGFjaGVkIGxpc3RlbmVyIHRvIHdpbmRvd1wiKTtcbiAgICAgIGZvcm0uc3VibWl0KCk7XG4gICAgICBsb2dfXyRmKFwiU3VibWl0dGVkIGZvcm1cIik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycl9fJGcoXCJFcnJvciBzdWJtaXR0aW5nIGZvcm06XCIsIGVycm9yKTtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBydW5QYXllckF1dGggPSAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHsgc3RlcFVwVXJsLCBhY2Nlc3NUb2tlbiwgbWVyY2hhbnREYXRhLCBpZnJhbWUsIGhvc3QgfSA9IHBhcmFtcztcbiAgY29uc3QgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmb3JtXCIpO1xuICBmb3JtLmFjdGlvbiA9IHN0ZXBVcFVybDtcbiAgZm9ybS5tZXRob2QgPSBcIlBPU1RcIjtcbiAgZm9ybS50YXJnZXQgPSBpZnJhbWUubmFtZTtcbiAgY29uc3QgdG9rZW5JbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgdG9rZW5JbnB1dC50eXBlID0gXCJoaWRkZW5cIjtcbiAgdG9rZW5JbnB1dC5uYW1lID0gXCJKV1RcIjtcbiAgdG9rZW5JbnB1dC52YWx1ZSA9IGFjY2Vzc1Rva2VuO1xuICBjb25zdCBtZElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICBtZElucHV0LnR5cGUgPSBcImhpZGRlblwiO1xuICBtZElucHV0Lm5hbWUgPSBcIk1EXCI7XG4gIG1kSW5wdXQudmFsdWUgPSBtZXJjaGFudERhdGE7XG4gIGZvcm0uYXBwZW5kQ2hpbGQodG9rZW5JbnB1dCk7XG4gIGZvcm0uYXBwZW5kQ2hpbGQobWRJbnB1dCk7XG4gIGhvc3QuYXBwZW5kQ2hpbGQoZm9ybSk7XG4gIHJldHVybiBmb3JtO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kZSwgZXJyX186IGVycl9fJGYgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY3lic1wiKTtcbmNvbnN0IEN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgc3RlcF91cF91cmw6IHouc3RyaW5nKCksXG4gIGFjY2Vzc190b2tlbjogei5zdHJpbmcoKSxcbiAgZGRfdXJsOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGRkX3Rva2VuOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIG1lcmNoYW50X2RhdGE6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRlJJRU5ETFlfRVJSID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiO1xuY29uc3QgcGFyc2VSZXNwb25zZUhlYWRlcnMkMSA9ICh1c2VyQWN0aW9uKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gQ3liZXJzb3VyY2VBY3Rpb25QYXlsb2FkLnNhZmVQYXJzZSh1c2VyQWN0aW9uKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgZXJyX18kZihgQ3liZXJzb3VyY2UgM0RTIGlzIHJlcXVpcmVkIGJ1dCB1c2VyIGFjdGlvbiBpcyBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeSh1c2VyQWN0aW9uKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoRlJJRU5ETFlfRVJSKTtcbiAgfVxuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBjaGVja0lmUmVxdWlyZXNDeWJlcnNvdXJjZTNkcyA9ICh1c2VyQWN0aW9uKSA9PiB7XG4gIHJldHVybiB1c2VyQWN0aW9uW1widHlwZVwiXSA9PT0gXCJjeWJlcnNvdXJjZV9wYXllcl9hdXRoXCI7XG59O1xuY29uc3QgaGFuZGxlQ3liZXJzb3VyY2UzZHMgPSBhc3luYyAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHsgc3RlcFVwVXJsLCBhY2Nlc3NUb2tlbiwgbWVyY2hhbnREYXRhLCBpZnJhbWUsIGhvc3QsIGNhbmNlbEJ1dHRvbiB9ID0gcGFyYW1zO1xuICBjb25zdCBleHBlY3RlZE9yaWdpbiA9IG5ldyBVUkwoc3RlcFVwVXJsKS5vcmlnaW47XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBsb2dfXyRlKFwiQ2xlYW5pbmcgdXAgQ3liZXJzb3VyY2UgM0RTIGZsb3dcIik7XG4gICAgICBjYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2FuY2VsKTtcbiAgICAgIGhvc3QucmVtb3ZlKCk7XG4gICAgfTtcbiAgICBjb25zdCBvbkNhbmNlbCA9ICgpID0+IHtcbiAgICAgIGxvZ19fJGUoXCJDeWJlcnNvdXJjZSAzRFMgY2FuY2VsbGVkXCIpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoc3RhdHVzKSA9PiB7XG4gICAgICBsb2dfXyRlKFwiQ3liZXJzb3VyY2UgM0RTIGNvbXBsZXRlZCB3aXRoIHN0YXR1czpcIiwgc3RhdHVzKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IHN0YXR1cy5zdGF0dXMsIGNsZWFudXAgfSk7XG4gICAgICBjbGVhbnVwUG9sbGluZygpO1xuICAgIH07XG4gICAgY29uc3QgcG9sbGluZ0ludGVydmFsID0gc3RhcnRQb2xsaW5nKGlmcmFtZSwgb25TdWNjZXNzLCBleHBlY3RlZE9yaWdpbiwgXCJwaW5nLTNkcy1zdGF0dXNcIiwgUGluZzNEU1N0YXR1c1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjbGVhbnVwUG9sbGluZyA9IGhhbmRsZUV2ZW50cyh7XG4gICAgICBlbGVtZW50czogeyBob3N0LCBjYW5jZWxCdXR0b24gfSxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbCxcbiAgICAgIHJlc29sdmU6IChzdGF0dXMpID0+IHtcbiAgICAgICAgcmVzb2x2ZSh7IHN0YXR1czogc3RhdHVzLnN0YXR1cywgY2xlYW51cCB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2FuY2VsKTtcbiAgICBjb25zdCBmb3JtID0gcnVuUGF5ZXJBdXRoKHtcbiAgICAgIHN0ZXBVcFVybCxcbiAgICAgIGFjY2Vzc1Rva2VuLFxuICAgICAgbWVyY2hhbnREYXRhLFxuICAgICAgaWZyYW1lLFxuICAgICAgaG9zdFxuICAgIH0pO1xuICAgIGZvcm0uc3VibWl0KCk7XG4gIH0pO1xufTtcbmNvbnN0IHJ1bkN5YmVyc291cmNlM2RzRmxvdyA9IGFzeW5jICh1c2VyQWN0aW9uKSA9PiB7XG4gIGNvbnN0IHBheWxvYWQgPSBwYXJzZVJlc3BvbnNlSGVhZGVycyQxKHVzZXJBY3Rpb24pO1xuICBjb25zdCB7IHN0ZXBfdXBfdXJsLCBhY2Nlc3NfdG9rZW4sIGRkX3VybCwgZGRfdG9rZW4sIG1lcmNoYW50X2RhdGEgfSA9IHBheWxvYWQ7XG4gIGlmIChkZF91cmwgJiYgZGRfdG9rZW4pIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uUmVzdWx0ID0gYXdhaXQgcnVuRGV2aWNlRGF0YUNvbGxlY3Rpb24oe1xuICAgICAgcG9zdFVybDogZGRfdXJsLFxuICAgICAgYWNjZXNzVG9rZW46IGRkX3Rva2VuXG4gICAgfSk7XG4gICAgbG9nX18kZShcIkRldmljZSBkYXRhIGNvbGxlY3Rpb24gY29tcGxldGVkIHdpdGggc3RhdHVzOlwiLCBjb2xsZWN0aW9uUmVzdWx0LlN0YXR1cyk7XG4gIH0gZWxzZSB7XG4gICAgZXJyX18kZihcIk5vIGRldmljZSBkYXRhIGNvbGxlY3Rpb24gVVJMIG9yIHRva2VuIHByb3ZpZGVkXCIpO1xuICB9XG4gIGNvbnN0IHsgaG9zdCwgaWZyYW1lLCBjYW5jZWxCdXR0b24gfSA9IGNyZWF0ZUFuZE9wZW5GcmFtZShcIlwiLCB7IG5hbWU6IFwiY2FyZGluYWxfYXV0aF9pZnJhbWVcIiB9KTtcbiAgbG9nX18kZShcIlJ1bm5pbmcgQ3liZXJzb3VyY2UgM0RTIGZsb3dcIik7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZUN5YmVyc291cmNlM2RzKHtcbiAgICBzdGVwVXBVcmw6IHN0ZXBfdXBfdXJsLFxuICAgIGFjY2Vzc1Rva2VuOiBhY2Nlc3NfdG9rZW4sXG4gICAgbWVyY2hhbnREYXRhOiBtZXJjaGFudF9kYXRhLFxuICAgIGlmcmFtZSxcbiAgICBob3N0LFxuICAgIGNhbmNlbEJ1dHRvblxuICB9KTtcbiAgcmVzdWx0LmNsZWFudXAoKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5TVUNDRVNTKSB7XG4gICAgbG9nX18kZShcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkXCIpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnROZXZlcihyZXN1bHQuc3RhdHVzKTtcbiAgfVxufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kZCwgZXJyX186IGVycl9fJGUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9ja3l0LWNjXCIpO1xuY29uc3QgUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMgPSB6Lm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHouc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMuc2FmZVBhcnNlKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZnJpZW5kbHlFcnIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG4gICAgY29uc3QgZGV2RXJyID0gYFBvY2t5dCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gO1xuICAgIGVycl9fJGUoZGV2RXJyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IHBhcnNlVmF1bHRJZEZyb20zZHNIcmVmID0gKGhyZWYpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB2YXVsdElkID0gbmV3IFVSTChocmVmID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJ2YXVsdElkXCIpO1xuICAgIGlmICghdmF1bHRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmF1bHQgSUQgZm91bmQgaW4gM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgfVxuICAgIGxvZ19fJGQoYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3ZhdWx0SWR9XWApO1xuICAgIHJldHVybiB2YXVsdElkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVyck1zZyA9IGBFcnJvciB2ZXJpZnlpbmcgM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuYDtcbiAgICBlcnJfXyRlKGVyck1zZywgYFJlc3VsdGluZyBVUkw6ICR7aHJlZn0uXG5FcnJvcjogJHtnZXRFcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICB9XG59O1xuY29uc3QgcGFyc2VBcmdGcm9tSHJlZiA9IChocmVmLCBhcmdOYW1lKSA9PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoaHJlZik7XG4gIHJldHVybiB1cmwuc2VhcmNoUGFyYW1zLmdldChhcmdOYW1lKTtcbn07XG5jb25zdCBjaGVja0lmUmVxdWlyZXNQb2NreXQzZHMgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgcmV0dXJuIGVycm9yUmVzcG9uc2VIZWFkZXJzPy5bXCJvcC1wb2NreXQtM2RzLXVybFwiXSAhPT0gdm9pZCAwO1xufTtcbmNvbnN0IHJ1blBvY2t5dDNkc0Zsb3cgPSBhc3luYyAoYmFzZVVybCwgZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QoeyB1cmw6IGhlYWRlcnNbXCJvcC1wb2NreXQtM2RzLXVybFwiXSwgYmFzZVVybCB9KTtcbiAgY29uc3QgdmF1bHRJZCA9IHBhcnNlVmF1bHRJZEZyb20zZHNIcmVmKHJlc3VsdC5ocmVmID8/IFwiXCIpO1xuICBjb25zdCBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiB2YXVsdElkLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IGhlYWRlcnNbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiBoZWFkZXJzW1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGV4dHJhTWV0YWRhdGFGb3JDaGVja291dDtcbn07XG5cbmNvbnN0IHsgbG9nX186IHN0cmlwZUxvZ19fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1jY1wiKTtcbmNvbnN0IFN0cmlwZTNEU01ldGFkYXRhUGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3Qgc3RyaXBlQ0MzRFNGbG93ID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSkgPT4ge1xuICB0cmFjayhcIjNkc19zdHJpcGVfcmVkaXJlY3RcIiwge1xuICAgIC4uLm5leHRBY3Rpb25NZXRhZGF0YVxuICB9KTtcbiAgc3RyaXBlTG9nX18oYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7bmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKTtcbiAgYXdhaXQgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyhuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICB0cmFjayhcIjNkc19zdHJpcGVfY29tcGxldGVcIik7XG4gIHN0cmlwZUxvZ19fKFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufTtcbmNvbnN0IHBhcnNlVXNlckZFUGF5bG9hZCA9IChwYXlsb2FkKSA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IFN0cmlwZTNEU01ldGFkYXRhUGF5bG9hZC5zYWZlUGFyc2UocGF5bG9hZCk7XG4gIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmlwZSAzRFMgbWV0YWRhdGEgaGFzIHVuZXhwZWN0ZWQgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KHBhcnNlZC5lcnJvci5lcnJvcnMpfWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgc3RyaXBlX3BrOiBwYXJzZWQuZGF0YS5zdHJpcGVfcGssXG4gICAgY2xpZW50X3NlY3JldDogcGFyc2VkLmRhdGEuY2xpZW50X3NlY3JldCxcbiAgICBzdHJpcGVfcG1faWQ6IHBhcnNlZC5kYXRhLnN0cmlwZV9wbV9pZFxuICB9O1xufTtcblxuY29uc3QgTUFYX0NPTkZJUk1fTE9PUF9JVEVSQVRJT05TID0gNDtcbmNvbnN0IHsgbG9nX186IGxvZ19fJGMsIGVycl9fOiBlcnJfXyRkIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInVuaWZpZWQtY2NcIik7XG5jb25zdCB1bnNhZmVseVJ1blVuaWZpZWRDY0Zsb3cgPSBhc3luYyAoe1xuICBjb250ZXh0LFxuICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gIG5vbkNkZUZvcm1JbnB1dHMsXG4gIGZvcm1DYWxsYmFja3MsXG4gIGN1c3RvbVBhcmFtc1xufSkgPT4ge1xuICBsb2dfXyRjKGDilJwgUnVubmluZyB1bmlmaWVkIENDIGZsb3cuLi5gLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZCB9KTtcbiAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gIGxvZ19fJGMoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cHJlZmlsbC5tb2RlfV1gKTtcbiAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgY29uc3QgY29tbW9uQ2hlY2tvdXRQYXJhbXMgPSB7XG4gICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICAgIC8vIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgaW4gdGhlIGNoZWNrb3V0IGF0dGVtcHQgbG9nc1xuICAgICAgZGV2aWNlVG9rZW46IGdldERldmljZVRva2VuKClcbiAgICB9LFxuICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6IHRydWUsXG4gICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiB7XG4gICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9LFxuICAgIHBheW1lbnRfcm91dGVfaWQ6IGN1c3RvbVBhcmFtcy5wYXltZW50Um91dGVJZFxuICB9O1xuICBlcnJfXyRkKGN1c3RvbVBhcmFtcywgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICBsb2dfXyRjKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gUGFydGlhbCBQTXMgW1Nlc3Npb246ICR7Y29udGV4dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGN1c3RvbVBhcmFtcy5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkXG4gIH0pO1xuICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICBjb25zdCBzdGFydFBmUmVzdWx0ID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvd0ZvckNDKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgbG9nX18kYyhg4pScIHN0YXJ0UGYgcmVzdWx0YCwgc3RhcnRQZlJlc3VsdCk7XG4gIGlmIChzdGFydFBmUmVzdWx0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmV0dXJuU3VjY2Vzc1Jlc3VsdChwcmVmaWxsLm1vZGUsIHN0YXJ0UGZSZXN1bHQpO1xuICB9XG4gIGlmICghc3RhcnRQZlJlc3VsdC5jaGVja291dF9hdHRlbXB0X2lkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgYXR0ZW1wdCBJRCBmcm9tIFBGIHJlc3VsdFwiKTtcbiAgfVxuICByZXR1cm4gcnVuQ29uZmlybUxvb3Aoe1xuICAgIGNvbnRleHQsXG4gICAgcHJlZmlsbCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLFxuICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgc3RhcnRQZlJlc3VsdCxcbiAgICBjaGVja291dEF0dGVtcHRJZDogc3RhcnRQZlJlc3VsdC5jaGVja291dF9hdHRlbXB0X2lkXG4gIH0pO1xufTtcbmNvbnN0IHJ1bkNvbmZpcm1Mb29wID0gYXN5bmMgKHBhcmFtcykgPT4ge1xuICBjb25zdCB7XG4gICAgY29udGV4dCxcbiAgICBwcmVmaWxsLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICBzdGFydFBmUmVzdWx0LFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkXG4gIH0gPSBwYXJhbXM7XG4gIGxldCBwZlJlc3VsdCA9IHN0YXJ0UGZSZXN1bHQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTUFYX0NPTkZJUk1fTE9PUF9JVEVSQVRJT05TOyBpKyspIHtcbiAgICBsb2dfXyRjKGDilJwgUnVubmluZyBjb25maXJtIGxvb3AgaXRlcmF0aW9uICR7aX1gKTtcbiAgICB0cmFjayhcInVuaWZpZWRfY2NfY29uZmlybV9sb29wX2l0ZXJhdGlvblwiLCB7IGl0ZXJhdGlvbjogaSB9KTtcbiAgICBjb25zdCB7IHVzZXJBY3Rpb24gfSA9IHZhbGlkYXRlUGZSZXN1bHRVc2VyQWN0aW9uKHBmUmVzdWx0KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlckFjdGlvblJlc3VsdCA9IGF3YWl0IHJ1blJlcXVpcmVkVXNlckFjdGlvbihjb250ZXh0LmJhc2VVcmwsIHVzZXJBY3Rpb24sIHByZWZpbGwsIG5vbkNkZUZvcm1JbnB1dHMpO1xuICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLmNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhLFxuICAgICAgICAuLi51c2VyQWN0aW9uUmVzdWx0Lm1ldGFkYXRhRm9yQ29uZmlybVN0ZXBcbiAgICAgIH07XG4gICAgICBsb2dfXyRjKGDilJwgTmV3IGV4dHJhIG1ldGFkYXRhYCwgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgICAgZXJyX18kZChg4pScIEVycm9yIGluIHJ1bm5pbmcgdXNlciBhY3Rpb24gaW4gaXRlcmF0aW9uICR7aX0uIENvbnRpbnVpbmcgdG8gY29uZmlybSBzdGVwLi4uYCwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRyYWNrKFwidW5pZmllZF9jY191c2VyX2FjdGlvbl9lcnJvclwiLCB7IGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSwgaXRlcmF0aW9uOiBpIH0pO1xuICAgIH1cbiAgICBwZlJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjaGVja291dEF0dGVtcHRJZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFcbiAgICB9KTtcbiAgICBsb2dfXyRjKGDilJwgY29uZmlybVBmIHJlc3VsdCAoaXRlcmF0aW9uICR7aX0pYCwgcGZSZXN1bHQpO1xuICAgIGlmIChwZlJlc3VsdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmV0dXJuU3VjY2Vzc1Jlc3VsdChwcmVmaWxsLm1vZGUsIHBmUmVzdWx0KTtcbiAgICB9XG4gIH1cbiAgdHJhY2soXCJ1bmlmaWVkX2NjX3VuZXhwZWN0ZWRfYnJhbmNoXCIsIHtcbiAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogcGZSZXN1bHQuY2hlY2tvdXRfYXR0ZW1wdF9pZCxcbiAgICBjb25maXJtUEZSZXN1bHQ6IHBmUmVzdWx0XG4gIH0pO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBlcnJvciwgcGxlYXNlIHRyeSBhbm90aGVyIHBheW1lbnQgbWV0aG9kXCIpO1xufTtcbmNvbnN0IHJ1blJlcXVpcmVkVXNlckFjdGlvbiA9IGFzeW5jIChiYXNlVXJsLCB1c2VyQWN0aW9uLCBwcmVmaWxsLCBub25DZGVGb3JtSW5wdXRzKSA9PiB7XG4gIGlmICh1c2VyQWN0aW9uLl91bmlmaWVkX2NjX2FjdGlvbl9uYW1lID09PSBcIjNEU19SRVFVSVJFRFwiKSB7XG4gICAgaWYgKHVzZXJBY3Rpb24udHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpIHtcbiAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhwYXJzZVVzZXJGRVBheWxvYWQodXNlckFjdGlvbikpO1xuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICB9IGVsc2UgaWYgKGNoZWNrSWZSZXF1aXJlc0FpcndhbGxleDNkcyh1c2VyQWN0aW9uKSkge1xuICAgICAgY29uc3QgYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkFpcndhbGxleDNkc0Zsb3coYmFzZVVybCwgdXNlckFjdGlvbik7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFpcndhbGxleDogYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCB9IH07XG4gICAgfSBlbHNlIGlmIChjaGVja0lmUmVxdWlyZXNBZHllbjNkcyh1c2VyQWN0aW9uKSkge1xuICAgICAgY29uc3QgYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWR5ZW4zZHNGbG93KFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgdXNlckFjdGlvbixcbiAgICAgICAgcHJlZmlsbC5sb2NhbGVcbiAgICAgICk7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFkeWVuOiBhZHllbk1ldGFkYXRhRm9yQ2hlY2tvdXQgfSB9O1xuICAgIH0gZWxzZSBpZiAoY2hlY2tJZlJlcXVpcmVzQ3liZXJzb3VyY2UzZHModXNlckFjdGlvbikpIHtcbiAgICAgIGF3YWl0IHJ1bkN5YmVyc291cmNlM2RzRmxvdyh1c2VyQWN0aW9uKTtcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHt9IH07XG4gICAgfSBlbHNlIGlmIChjaGVja0lmTGVnYWN5M0RTUGF0aCh1c2VyQWN0aW9uKSkge1xuICAgICAgYXdhaXQgY29tbW9uQ0MzRFNGbG93KHsgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBbdXNlckFjdGlvbl0gfSwgYmFzZVVybCk7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7fSB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCAzRFMgdXNlciBhY3Rpb246ICR7SlNPTi5zdHJpbmdpZnkodXNlckFjdGlvbil9YCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlcXVpcmVkIHVzZXIgYWN0aW9uOiAke0pTT04uc3RyaW5naWZ5KHVzZXJBY3Rpb24pfWApO1xuICB9XG59O1xuY29uc3QgY2hlY2tJZkxlZ2FjeTNEU1BhdGggPSAodXNlckFjdGlvbikgPT4ge1xuICB0cnkge1xuICAgIHBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhKFt1c2VyQWN0aW9uXSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuY29uc3QgdmFsaWRhdGVQZlJlc3VsdFVzZXJBY3Rpb24gPSAocGZSZXN1bHQpID0+IHtcbiAgaWYgKCFwZlJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH0gZWxzZSBpZiAocGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIHJlcXVpcmVkIHVzZXIgYWN0aW9uc1wiKTtcbiAgfSBlbHNlIGlmIChwZlJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG11bHRpcGxlIHJlcXVpcmVkIHVzZXIgYWN0aW9uc1wiKTtcbiAgfVxuICBjb25zdCB1c2VyQWN0aW9uID0gVXNlckFjdGlvbkZFUGF5bG9hZC5zYWZlUGFyc2UocGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbiAgaWYgKCF1c2VyQWN0aW9uLnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRkKFwiVXNlciBhY3Rpb24gcmF3IHBheWxvYWRcIiwgcGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbiAgICBlcnJfXyRkKFwiUGFyc2luZyBlcnJvclwiLCB1c2VyQWN0aW9uLmVycm9yKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzY2hlbWEgb2YgdXNlciBhY3Rpb24gcGF5bG9hZCBpcyBub3QgdmFsaWRcIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB1c2VyQWN0aW9uOiB1c2VyQWN0aW9uLmRhdGFcbiAgfTtcbn07XG5jb25zdCByZXR1cm5TdWNjZXNzUmVzdWx0ID0gKHByZWZpbGxNb2RlLCBwZlJlc3VsdCkgPT4ge1xuICBpZiAocHJlZmlsbE1vZGUgPT09IFwic2V0dXBcIikge1xuICAgIGNvbnN0IHBheW1lbnRNZXRob2RJZCA9IHBmUmVzdWx0LmNjX3BtX2lkID8/IHBmUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdLmlkO1xuICAgIGlmICghcGF5bWVudE1ldGhvZElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBDQyBQTSBJRCBvciBwYXltZW50X21ldGhvZHMgZm91bmQgaW4gUEYgcmVzdWx0XCIpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBwYXltZW50TWV0aG9kSWRcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGlmICghcGZSZXN1bHQuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgc3VjY2VzcyByZXNwb25zZSBmcm9tIHN0YXJ0UEZcIik7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICByZXN1bHQ6IHBmUmVzdWx0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICB9O1xuICB9XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRiLCBlcnJfXzogZXJyX18kYyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IHJ1bkNvbW1vbkNjRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJGIoYOKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uYCwgeyBjaGVja291dFBheW1lbnRNZXRob2QgfSk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICB0cmFjayhcImNvbW1vbl9jY19mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgLi4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJlZmlsbFxuICAgIH0pO1xuICAgIGNvbnN0IHVuaWZpZWRDQ1JvbGxvdXRSYXRpbyA9IHByZWZpbGwuZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzPy5bXCJ1bmlmaWVkX2NjXCJdID8/IDA7XG4gICAgbG9nX18kYihg4pScIFVuaWZpZWQgQ0Mgcm9sbG91dDogJHtNYXRoLnJvdW5kKHVuaWZpZWRDQ1JvbGxvdXRSYXRpbyAqIDEwMCl9JWApO1xuICAgIGNvbnN0IHJvbGwgPSBNYXRoLnJhbmRvbSgpO1xuICAgIGNvbnN0IHVzZVVuaWZpZWRDQ0Zsb3cgPSByb2xsIDwgdW5pZmllZENDUm9sbG91dFJhdGlvO1xuICAgIGNvbnN0IHVjY1JvbGxUcmFja2luZ01ldGFkYXRhID0ge1xuICAgICAgcm9sbCxcbiAgICAgIHVuaWZpZWRDQ1JvbGxvdXRSYXRpbyxcbiAgICAgIHVzZVVuaWZpZWRDQ0Zsb3dcbiAgICB9O1xuICAgIGlmICh1c2VVbmlmaWVkQ0NGbG93KSB7XG4gICAgICBsb2dfXyRiKGDilJwgUGlja2VkIHVuaWZpZWQgQ0MgZmxvdyAoJHtyb2xsfSB2cyAke3VuaWZpZWRDQ1JvbGxvdXRSYXRpb30pYCk7XG4gICAgICB0cmFjayhcInVuaWZpZWRfY2NfZmxvd19waWNrZWRcIiwgdWNjUm9sbFRyYWNraW5nTWV0YWRhdGEpO1xuICAgICAgcmV0dXJuIHVuc2FmZWx5UnVuVW5pZmllZENjRmxvdyh7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zLFxuICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyRiKGDilJwgUGlja2VkIGxlZ2FjeSBDQyBmbG93ICgke3JvbGx9IHZzICR7dW5pZmllZENDUm9sbG91dFJhdGlvfSlgKTtcbiAgICAgIHRyYWNrKFwibGVnYWN5X2NjX2Zsb3dfcGlja2VkXCIsIHVjY1JvbGxUcmFja2luZ01ldGFkYXRhKTtcbiAgICB9XG4gICAgbG9nX18kYihg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtwcmVmaWxsLm1vZGV9XWApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBjb25zdCBjb21tb25DaGVja291dFBhcmFtcyA9IHtcbiAgICAgIHNlc3Npb25faWQ6IGNvbnRleHQuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgfSxcbiAgICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6IGZhbHNlLFxuICAgICAgcGF5bWVudF9yb3V0ZV9pZDogY3VzdG9tUGFyYW1zLnBheW1lbnRSb3V0ZUlkLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKCksXG4gICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgbG9nX18kYihg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGN1c3RvbVBhcmFtcy5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIGxvZ19fJGIoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7cHJlZmlsbC50b2tlbn1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNldHVwQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyRiKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7cmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJGIoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJGIoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDZGVFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3Iub3JpZ2luYWxFcnJvck1lc3NhZ2UuaW5jbHVkZXMoXCIzRFNfUkVRVUlSRURcIikpIHtcbiAgICAgICAgICBsb2dfXyRiKGDilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93YCk7XG4gICAgICAgICAgbG9nX18kYihcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICB0cmFjayhcIjNkc19yZXF1aXJlZFwiLCB7XG4gICAgICAgICAgICAuLi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgICAgICAuLi5lcnJvci5yZXNwb25zZS5oZWFkZXJzXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgZXJySGVhZGVycyA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnMgPz8ge307XG4gICAgICAgICAgaWYgKFwib3AtZXhpc3RpbmctY2MtcG0taWRcIiBpbiBlcnJIZWFkZXJzKSB7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leGlzdGluZ19jY19wbV9pZCA9IGVyckhlYWRlcnNbXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiXTtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBFeGlzdGluZyBDQyBQTSBJRDogJHtjb21tb25DaGVja291dFBhcmFtcy5leGlzdGluZ19jY19wbV9pZH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNQb2NreXQzZHMgPSBjaGVja0lmUmVxdWlyZXNQb2NreXQzZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzUG9ja3l0M2RzKSB7XG4gICAgICAgICAgICBsb2dfXyRiKGDilJwgUG9ja3l0IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIFBvY2t5dCAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IHBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5Qb2NreXQzZHNGbG93KGNvbnRleHQuYmFzZVVybCwgZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcInBvY2t5dFwiXSA9IHBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlcXVpcmVzQWlyd2FsbGV4M2RzID0gY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzKGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIGlmIChyZXF1aXJlc0FpcndhbGxleDNkcykge1xuICAgICAgICAgICAgbG9nX18kYihg4pScIEFpcndhbGxleCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBaXJ3YWxsZXggM0RTIGZsb3cuYCk7XG4gICAgICAgICAgICBjb25zdCBhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWlyd2FsbGV4M2RzRmxvdyhjb250ZXh0LmJhc2VVcmwsIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFbXCJhaXJ3YWxsZXhcIl0gPSBhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXF1aXJlc0FkeWVuM2RzID0gY2hlY2tJZlJlcXVpcmVzQWR5ZW4zZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzQWR5ZW4zZHMpIHtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBBZHllbiAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBZHllbiAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGFkeWVuTWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkFkeWVuM2RzRmxvdyhcbiAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgICAgICAgIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICAgIHByZWZpbGwubG9jYWxlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFbXCJhZHllblwiXSA9IGFkeWVuTWV0YWRhdGFGb3JDaGVja291dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc3RhcnRQZlJlc3VsdCA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgICAgbG9nX18kYihg4pScIFN0YXJ0IHBheW1lbnQgZmxvdyByZXN1bHQ6YCwgc3RhcnRQZlJlc3VsdCk7XG4gICAgICAgICAgY29uc3QgY3liZXJzb3VyY2VBY3Rpb24gPSBzdGFydFBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKFxuICAgICAgICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiY3liZXJzb3VyY2VfcGF5ZXJfYXV0aFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoY3liZXJzb3VyY2VBY3Rpb24pIHtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBDeWJlcnNvdXJjZSAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBDeWJlcnNvdXJjZSAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCA9IEN5YmVyc291cmNlQWN0aW9uUGF5bG9hZC5wYXJzZShjeWJlcnNvdXJjZUFjdGlvbik7XG4gICAgICAgICAgICBjb25zdCBjeWJlcnNvdXJjZU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5DeWJlcnNvdXJjZTNkc0Zsb3coe1xuICAgICAgICAgICAgICAuLi5jeWJlcnNvdXJjZUFjdGlvblBheWxvYWQsXG4gICAgICAgICAgICAgIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgICBfdW5pZmllZF9jY19wY2NzX2lkOiBcIlwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhW1wiY3liZXJzb3VyY2VcIl0gPSBjeWJlcnNvdXJjZU1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVN0cmlwZUZsb3cgPSBlcnJvci5yZXNwb25zZS5oZWFkZXJzPy5bXCJvcC1zaG91bGQtdXNlLW5ldy1mbG93XCJdICE9PSBcInRydWVcIjtcbiAgICAgICAgICBpZiAoIXJlcXVpcmVzUG9ja3l0M2RzICYmICFjeWJlcnNvdXJjZUFjdGlvbikge1xuICAgICAgICAgICAgaWYgKHNob3VsZFVzZVN0cmlwZUZsb3cpIHtcbiAgICAgICAgICAgICAgbG9nX18kYihg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd2ApO1xuICAgICAgICAgICAgICBhd2FpdCBzdHJpcGVDQzNEU0Zsb3cocGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbG9nX18kYihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvd2ApO1xuICAgICAgICAgICAgICBhd2FpdCBjb21tb25DQzNEU0Zsb3coc3RhcnRQZlJlc3VsdCwgY29udGV4dC5iYXNlVXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nX18kYihg4pScIFByZS1zdGFydCAzRFMgaXMgc3VjY2Vzc2Z1bCwgb3RoZXIgM0RTIGZsb3dzIHdpbGwgYmUgc2tpcHBlZC5gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgY2NQbUlkID0gc3RhcnRQZlJlc3VsdC5jY19wbV9pZDtcbiAgICAgICAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBbY2NfcG1faWQ6ICR7Y2NQbUlkfV1gKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBjY1BtSWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9nX18kYihg4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6YCwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBsb2dfXyRiKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Y3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7IXNob3VsZFVzZVN0cmlwZUZsb3cgPyBcIm5ld1wiIDogXCJsZWdhY3lcIn1dYCk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgIC4uLmNvbW1vbkNoZWNrb3V0UGFyYW1zLFxuICAgICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogY2NQbUlkLFxuICAgICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiBzaG91bGRVc2VTdHJpcGVGbG93XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVycl9fJGMoYOKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERWApO1xuICAgICAgZXJyX18kYyhlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbik7XG5jb25zdCBwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICBjb25zdCBzdHJpcGVBY3Rpb24gPSByZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpO1xuICBpZiAoIXN0cmlwZUFjdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICB9XG4gIHJldHVybiBTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEucGFyc2Uoc3RyaXBlQWN0aW9uKTtcbn07XG5jb25zdCBjb21tb24zRFNBY3Rpb25UeXBlcyA9IFtcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiwgXCJhZHllblwiXTtcbmNvbnN0IHBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT4ge1xuICBjb25zdCBjb21tb25BY3Rpb24gPSByZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBjb21tb24zRFNBY3Rpb25UeXBlcy5pbmNsdWRlcyhhY3Rpb24udHlwZSkpO1xuICBpZiAoIWNvbW1vbkFjdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICB9XG4gIHJldHVybiBDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UoY29tbW9uQWN0aW9uKTtcbn07XG5jb25zdCBjb21tb25DQzNEU0Zsb3cgPSBhc3luYyAoc3RhcnRQZlJlc3VsdCwgYmFzZVVybCkgPT4ge1xuICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsID09PSBcIjNEU19DT01QTEVURVwiKSB7XG4gICAgbG9nX18kYihg4pScIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlgKTtcbiAgICB0cmFjayhcIjNkc19jb21wbGV0ZVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbG9nX18kYihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke25leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmx9XWApO1xuICB0cmFjayhcIjNkc19yZWRpcmVjdFwiLCB7XG4gICAgLi4ubmV4dEFjdGlvbk1ldGFkYXRhXG4gIH0pO1xuICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oeyB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsIGJhc2VVcmwgfSk7XG4gIGxvZ19fJGIoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdHJhY2soXCIzZHNfY2FuY2VsbGVkXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRyYWNrKFwiM2RzX2ZhaWx1cmVcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbiAgdHJhY2soXCJjb21tb25fM2RzX2NvbXBsZXRlZFwiKTtcbn07XG5cbmNvbnN0IExvb3BDcnlwdG9DcG0gPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJsb29wXCIpLFxuICBwcm92aWRlcjogei5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIG1lcmNoYW50X2lkOiB6LnN0cmluZygpLFxuICAgIGVudGl0eV9pZDogei5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHouc3RyaW5nKCksXG4gICAgc3VwcG9ydGVkX2N1cnJlbmNpZXM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRhLCBlcnJfXzogZXJyX18kYiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJsb29wLWNyeXB0b1wiKTtcbmNvbnN0IGluaXRMb29wRmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQgfSkgPT4ge1xuICAgIGxvZ19fJGEoYENoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgTG9vcCBDcnlwdG8uLi5gKTtcbiAgICBjb25zdCBjaGVja291dFBheW1lbnRNZXRob2QgPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgTG9vcENyeXB0b0NwbSk7XG4gICAgbG9nX18kYShgY2hlY2tvdXRQYXltZW50TWV0aG9kOiAke0pTT04uc3RyaW5naWZ5KGNoZWNrb3V0UGF5bWVudE1ldGhvZCl9YCk7XG4gICAgbG9nX18kYShgU3RhcnRpbmcgTG9vcCBDcnlwdG8gZmxvdy4uLmApO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBwcmVGbG93TmV4dEFjdGlvbk1ldGFkYXRhID0gYXdhaXQgcHJlcGFyZVBheW1lbnRGbG93KGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH0pO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KFxuICAgICAgY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgcHJlZmlsbC50b2tlbixcbiAgICAgIGlzU2V0dXBNb2RlLFxuICAgICAgdm9pZCAwXG4gICAgKTtcbiAgICBpZiAoIWlzU2V0dXBNb2RlICYmICFjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXMuaW5jbHVkZXMocHJlZmlsbC5jdXJyZW5jeSkpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQ3VycmVuY3kgJHtwcmVmaWxsLmN1cnJlbmN5fSBub3QgZW5hYmxlZCBmb3IgTG9vcC4gRW5hYmxlZCBjdXJyZW5jaWVzOiAke2NoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llc31gXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEgfHwgIXByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEubmV4dF9hY3Rpb25fbWV0YWRhdGEpIHtcbiAgICAgIHRocm93IEVycm9yKFwiRmFpbGVkIHRvIGZldGNoIG5lY2Vzc2FyeSBzZXR1cCBkYXRhIGZvciBMb29wXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXltZW50U2V0dXBJbmZvID0gcHJlRmxvd05leHRBY3Rpb25NZXRhZGF0YS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBsZXQgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IHBheW1lbnRTZXR1cEluZm9bXCJhdXRob3JpemF0aW9uX2Ftb3VudFwiXTtcbiAgICBsZXQgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IHBheW1lbnRTZXR1cEluZm9bXCJtaW5fYXV0aG9yaXphdGlvbl9hbW91bnRcIl07XG4gICAgY29uc3QgYWxsb3dDdXN0b21lclRvQ2hvb3NlQXV0aCA9IHBheW1lbnRTZXR1cEluZm9bXCJhbGxvd19jdXN0b21lcl90b19jaG9vc2VfYXV0aFwiXTtcbiAgICBsZXQgY2hhcmdlQW1vdW50VXNkQXRvbTtcbiAgICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICAgIGNoYXJnZUFtb3VudFVzZEF0b20gPSAwO1xuICAgICAgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IE1hdGgubWF4KHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQsIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFyZ2VBbW91bnRVc2RBdG9tID0gKGluaXRpYWxQcmV2aWV3ID8gaW5pdGlhbFByZXZpZXcuYW1vdW50QXRvbSA6IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20pICogcGF5bWVudFNldHVwSW5mb1tcInRva2VuX3ByaWNlXCJdO1xuICAgICAgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IE1hdGgubWF4KG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQsIGNoYXJnZUFtb3VudFVzZEF0b20pO1xuICAgICAgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IE1hdGgubWF4KHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQsIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQpO1xuICAgIH1cbiAgICBjb25zdCBwYXltZW50VXNkQW1vdW50ID0gY2hhcmdlQW1vdW50VXNkQXRvbTtcbiAgICBjb25zdCBjdXN0b21lclJlZklkID0gdjQoKTtcbiAgICBjb25zdCB3aWRnZXRQcm9wcyA9IHtcbiAgICAgIHBheW1lbnRVc2RBbW91bnQsXG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50LFxuICAgICAgY3VzdG9tZXJSZWZJZCxcbiAgICAgIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQsXG4gICAgICBhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoXG4gICAgfTtcbiAgICBjb25zdCBpbml0TG9vcENvbm5lY3RQcm9wcyA9IHtcbiAgICAgIGFwaVRva2VuOiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuYXBpX3Rva2VuLFxuICAgICAgZW50aXR5SWQ6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5lbnRpdHlfaWQsXG4gICAgICBtZXJjaGFudElkOiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLmVudmlyb25tZW50XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICB3aWRnZXRQcm9wcyxcbiAgICAgIGluaXRMb29wQ29ubmVjdFByb3BzXG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkxvb3BGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kYShgUnVubmluZyBMb29wIGZsb3cuLi5gKTtcbiAgICBsb2dfXyRhKFwiY29udGV4dFwiLCBjb250ZXh0KTtcbiAgICBsb2dfXyRhKFwiY2hlY2tvdXRQYXltZW50TWV0aG9kXCIsIGNoZWNrb3V0UGF5bWVudE1ldGhvZCk7XG4gICAgbG9nX18kYShcIm5vbkNkZUZvcm1JbnB1dHNcIiwgbm9uQ2RlRm9ybUlucHV0cyk7XG4gICAgbG9nX18kYShcImZsb3dDYWxsYmFja3NcIiwgZm9ybUNhbGxiYWNrcyk7XG4gICAgbG9nX18kYShcImN1c3RvbVBhcmFtc1wiLCBjdXN0b21QYXJhbXMpO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kYShg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtwcmVmaWxsLm1vZGV9XWApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgaXNDaGVja291dE1vZGUgPSBwcmVmaWxsLm1vZGUgIT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBjdXN0b21lckZpZWxkcyA9IGNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyk7XG4gICAgaWYgKCFjdXN0b21QYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gRmFpbGVkIHRvIHByb3Blcmx5IHN1Ym1pdCBmb3JtIGRhdGEuXCIpO1xuICAgIH1cbiAgICBpZiAoIWN1c3RvbVBhcmFtcy5zdWNjZXNzKSB7XG4gICAgICB0cmFjayhcImxvb3BfcGF5X2Zsb3dfZmFpbHVyZVwiLCBjdXN0b21QYXJhbXMpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBTdWNjZXNzIGlzIG5vdCB0cnVlLlwiKTtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAuLi5jdXN0b21lckZpZWxkcyxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogaXNDaGVja291dE1vZGUsXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGlzQ2hlY2tvdXRNb2RlID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogY3VzdG9tUGFyYW1zLnBheW1lbnRNZXRob2QucGF5bWVudE1ldGhvZElkLFxuICAgICAgLy8gTk9URTogd2UgZG8gaGF2ZSB0aGUgY2hlY2tvdXQgYXR0ZW1wdCBpZCBoZXJlIGV2ZW4gaWYgaXRzIGEgc2V0dXAsIGJ1dCBmb3Igbm93IHdlIGRvbid0IGluY2x1ZGUgaXRcbiAgICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBjaGVja291dCBhdHRlbXB0IHN1cHBvcnQgZm9yIHNldHVwIGludGVudHMuXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBpc0NoZWNrb3V0TW9kZSA/IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5jaGVja291dF9hdHRlbXB0X2lkIDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGxvb3BfY3VzdG9tZXI6IGN1c3RvbVBhcmFtcy5jdXN0b21lcixcbiAgICAgICAgbG9vcF9wYXltZW50X21ldGhvZDogY3VzdG9tUGFyYW1zLnBheW1lbnRNZXRob2QsXG4gICAgICAgIGxvb3Bfc3VjY2VzczogY3VzdG9tUGFyYW1zLnN1Y2Nlc3MsXG4gICAgICAgIGxvb3BfcGF5aW5faWQ6IGN1c3RvbVBhcmFtcy5wYXlpbklkXG4gICAgICB9XG4gICAgfSk7XG4gICAgbG9nX18kYShgQ29uZmlybSByZXN1bHQ6ICR7Y29uZmlybVJlc3VsdH1gKTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJGEoYERvaW5nIHBheW1lbnQgc2V0dXAuLi5gKTtcbiAgICAgIGxvZ19fJGEoYOKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OmAsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgbG9nX18kYShg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2NyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyRhKGBEb2luZyBjaGVja291dC4uLmApO1xuICAgICAgaWYgKCFjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICAgIGVycl9fJGIoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDksIGVycl9fOiBlcnJfXyRhIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInBheXBhbFwiKTtcbmNvbnN0IFBheXBhbENwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHsgY2xpZW50X2lkOiB6LnN0cmluZygpIH0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbmNvbnN0IGluaXRQYXlwYWxGbG93ID0gYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gIGNvbnN0IHBheXBhbENwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBQYXlwYWxDcG0pO1xuICBpZiAoIXBheXBhbENwbSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlBheVBhbCBDUE0gbm90IGZvdW5kIGluIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHNcIik7XG4gIH1cbiAgY29uc3Qgc3RhcnRGbG93ID0gKCkgPT4ge1xuICAgIHJldHVybiBPanNGbG93cy5wYXlwYWwucnVuKHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHBheXBhbENwbSxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgc3RhcnRGbG93XG4gIH07XG59O1xuY29uc3QgcnVuUGF5cGFsRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBsb2dfXyQ5KGBSdW5uaW5nIFBheVBhbCBmbG93Li4uYCk7XG4gICAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgICBjb25zdCB7IGlzQW5vbnltb3VzLCB1c2VSZWRpcmVjdEZsb3cgfSA9IGN1c3RvbVBhcmFtcy5zZXR0aW5ncyA/PyB7fTtcbiAgICAgIGxvZ19fJDkoYFZlcmlmeWluZyBDUE0uLi5gKTtcbiAgICAgIGNvbnN0IGNwbSA9IFBheXBhbENwbS5wYXJzZShjaGVja291dFBheW1lbnRNZXRob2QpO1xuICAgICAgbG9nX18kOShg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc2ApO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLCB7XG4gICAgICAgIC4uLmlzQW5vbnltb3VzID8gZ2VuZXJhdGVBbm9ueW1vdXNWYWx1ZXMoKSA6IHZvaWQgMCxcbiAgICAgICAgLi4ucHJlZmlsbC5jaGVja291dF9zZXR0aW5nc1xuICAgICAgfSk7XG4gICAgICBjb25zdCBuZXdDdXN0b21lckZpZWxkcyA9IGNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyk7XG4gICAgICBsb2dfXyQ5KGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtwcmVmaWxsLm1vZGV9YCk7XG4gICAgICBjb25zdCBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93ID0gdjQoKTtcbiAgICAgIGNvbnN0IGlzUGF5Rmlyc3RGbG93ID0gZmFsc2U7XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVxdWVzdCA9IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY3BtLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY3BtLFxuICAgICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGlzUGF5Rmlyc3RGbG93LFxuICAgICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGlzUGF5Rmlyc3RGbG93ID8ge1xuICAgICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgICAgfSA6IHZvaWQgMCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiB1c2VSZWRpcmVjdEZsb3csXG4gICAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3dcbiAgICAgICAgfSxcbiAgICAgICAgLi4ubmV3Q3VzdG9tZXJGaWVsZHNcbiAgICAgIH07XG4gICAgICBjb25zdCBwcmVBY3Rpb25VcmwgPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCBjb250ZXh0LmJhc2VVcmwpLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBlbmNvZGVkUmVxdWVzdCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoc3RhcnRQYXltZW50Rmxvd1JlcXVlc3QpKTtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICBzdDogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcjogZW5jb2RlZFJlcXVlc3RcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSBgJHtwcmVBY3Rpb25Vcmx9PyR7c2VhcmNoUGFyYW1zLnRvU3RyaW5nKCl9YDtcbiAgICAgIGlmICh1c2VSZWRpcmVjdEZsb3cpIHtcbiAgICAgICAgbG9nX18kOShcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZWRpcmVjdFVybDtcbiAgICAgICAgYXdhaXQgc2xlZXAoMjAgKiAxZTMpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBheXBhbEZsb3dSZXN1bHQgPSBhd2FpdCBzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0KFxuICAgICAgICBcIlBheVBhbFwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93LFxuICAgICAgICByZWRpcmVjdFVybFxuICAgICAgKTtcbiAgICAgIGxvZ19fJDkoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgcGF5cGFsRmxvd1Jlc3VsdCk7XG4gICAgICBjb25zdCBjaGVja291dEF0dGVtcHRJZCA9IHBhcnNlQXJnRnJvbUhyZWYocGF5cGFsRmxvd1Jlc3VsdC5ocmVmLCBcImNhdHRcIik7XG4gICAgICBjb25zdCBhcHByb3ZhbFNlc3Npb25JZCA9IHBhcnNlQXJnRnJvbUhyZWYocGF5cGFsRmxvd1Jlc3VsdC5ocmVmLCBcImFwcHJvdmFsX3Nlc3Npb25faWRcIik7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBpc1BheUZpcnN0RmxvdyA/IGNoZWNrb3V0QXR0ZW1wdElkIDogdm9pZCAwLFxuICAgICAgICB0aGVpcl9wbV9pZDogaXNQYXlGaXJzdEZsb3cgPyBhcHByb3ZhbFNlc3Npb25JZCA6IHZvaWQgMFxuICAgICAgfSk7XG4gICAgICBsb2dfXyQ5KFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwicGF5cGFsXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogY3BtLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogaXNQYXlGaXJzdEZsb3dcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kYShcIlBheVBhbCBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHsgcGF5bWVudF9tZXRob2Q6IFwicGF5cGFsXCIsIGVycm9yOiBlcnIgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDgsIGVycl9fOiBlcnJfXyQ5IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInBvY2t5dC1wYXlwYWxcIik7XG5jb25zdCBQb2NreXRQYXlwYWxDcG0gPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xuei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6LnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0UG9ja3l0UGF5cGFsRmxvdyA9IGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICBjb25zdCBwb2NreXRQYXlwYWxDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgUG9ja3l0UGF5cGFsQ3BtKTtcbiAgaWYgKCFwb2NreXRQYXlwYWxDcG0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb2NreXQgUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgfVxuICBjb25zdCBzdGFydEZsb3cgPSAoKSA9PiB7XG4gICAgcmV0dXJuIE9qc0Zsb3dzLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgY29udGV4dCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcG9ja3l0UGF5cGFsQ3BtLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiB7fSB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICBzdGFydEZsb3dcbiAgfTtcbn07XG5jb25zdCBydW5Qb2NreXRQYXlwYWxGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kOChgUnVubmluZyBQb2NreXQgUGF5cGFsIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJDgoYFZlcmlmeWluZyBDUE0uLi5gKTtcbiAgICBjb25zdCBjcG0gPSBQb2NreXRQYXlwYWxDcG0ucGFyc2UoY2hlY2tvdXRQYXltZW50TWV0aG9kKTtcbiAgICBsb2dfXyQ4KGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzYCk7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBjdXN0b21QYXJhbXM/LnNldHRpbmdzO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHNldHRpbmdzPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIGNvbnN0IG5ld0N1c3RvbWVyRmllbGRzID0gY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICBsb2dfXyQ4KGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtwcmVmaWxsLm1vZGV9YCk7XG4gICAgY29uc3QgZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyA9IHY0KCk7XG4gICAgY29uc3QgaXNQYXlGaXJzdEZsb3cgPSBwcmVmaWxsLm1vZGUgIT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVxdWVzdCA9IHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNwbS5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjcG0sXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGlzUGF5Rmlyc3RGbG93LFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBpc1BheUZpcnN0RmxvdyA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiAhIWN1c3RvbVBhcmFtcz8uc2V0dGluZ3M/LnVzZVJlZGlyZWN0RmxvdyxcbiAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3dcbiAgICAgIH0sXG4gICAgICAuLi5uZXdDdXN0b21lckZpZWxkc1xuICAgIH07XG4gICAgY29uc3QgcHJlQWN0aW9uVXJsID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgY29udGV4dC5iYXNlVXJsKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGVuY29kZWRSZXF1ZXN0ID0gYnRvYShKU09OLnN0cmluZ2lmeShzdGFydFBheW1lbnRGbG93UmVxdWVzdCkpO1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgc3Q6IHByZWZpbGwudG9rZW4sXG4gICAgICByOiBlbmNvZGVkUmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gYCR7cHJlQWN0aW9uVXJsfT8ke3NlYXJjaFBhcmFtcy50b1N0cmluZygpfWA7XG4gICAgaWYgKGN1c3RvbVBhcmFtcz8uc2V0dGluZ3M/LnVzZVJlZGlyZWN0Rmxvdykge1xuICAgICAgbG9nX18kOChcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcmVkaXJlY3RVcmw7XG4gICAgICBhd2FpdCBzbGVlcCgyMCAqIDFlMyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICB9XG4gICAgbG9nX18kOChcIlN0YXJ0aW5nIHBvcHVwIG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICBsb2dfXyQ4KGBPcGVuaW5nIHBheXBhbCBpZnJhbWUuLi5gKTtcbiAgICBjb25zdCBwYXlwYWxGbG93UmVzdWx0ID0gYXdhaXQgc3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdChcbiAgICAgIFwiUGF5UGFsXCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyxcbiAgICAgIHJlZGlyZWN0VXJsXG4gICAgKTtcbiAgICBsb2dfXyQ4KFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIHBheXBhbEZsb3dSZXN1bHQpO1xuICAgIGNvbnN0IHZhdWx0SWQgPSBwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYpO1xuICAgIGNvbnN0IGNoZWNrb3V0QXR0ZW1wdElkID0gcGFyc2VBcmdGcm9tSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYsIFwiY2F0dFwiKTtcbiAgICBpZiAoIWNoZWNrb3V0QXR0ZW1wdElkKSB7XG4gICAgICBlcnJfXyQ5KFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMOlwiLCBwYXlwYWxGbG93UmVzdWx0LmhyZWYpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMXCIpO1xuICAgIH1cbiAgICBsb2dfXyQ4KGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyB1c2luZyB2YXVsdCBJRCAke3ZhdWx0SWR9YCk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogdmF1bHRJZCxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGlzUGF5Rmlyc3RGbG93ID8gY2hlY2tvdXRBdHRlbXB0SWQgOiB2b2lkIDBcbiAgICB9KTtcbiAgICBsb2dfXyQ4KFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHNbMF0uaWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICAgIGVycl9fJDkoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDcsIGVycl9fOiBlcnJfXyQ4IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1hZmZpcm1cIik7XG5jb25zdCBTdHJpcGVBZmZpcm1DcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhZmZpcm1cIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IFN0cmlwZUFmZmlybVJlcXVpcmVkVXNlckFjdGlvbnMgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpLm51bGxpc2goKSxcbiAgICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGluaXRTdHJpcGVBZmZpcm1GbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kNyhgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgQWZmaXJtLi4uYCk7XG4gICAgY29uc3Qgc3RyaXBlQWZmaXJtQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUFmZmlybUNwbSk7XG4gICAgaWYgKCFzdHJpcGVBZmZpcm1DcG0pIHtcbiAgICAgIGxvZ19fJDcoYE5vIFN0cmlwZSBBZmZpcm0gQ1BNIGZvdW5kYCk7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIH1cbiAgICBsb2dfXyQ3KGBTdGFydGluZyBzdHJpcGUgYWZmaXJtIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgaWYgKGlzU2V0dXBNb2RlKSB7XG4gICAgICBsb2dfXyQ3KGBTZXR1cCBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFN0cmlwZSBBZmZpcm0gZmxvd2ApO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLnN0cmlwZUFmZmlybS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBzdHJpcGVBZmZpcm1DcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IGN1c3RvbVBhcmFtcyA/PyB7fSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiB0cnVlIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBlcnJfXyQ4KGBFcnJvciBzdGFydGluZyBBZmZpcm0gZmxvdzpgLCBlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgc3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZUFmZmlybUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHsgY29udGV4dCwgY2hlY2tvdXRQYXltZW50TWV0aG9kLCBub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQ3KGBSdW5uaW5nIFN0cmlwZSBBZmZpcm0gcGF5LWZpcnN0IGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJDcoYFZhbGlkYXRpbmcgZm9ybSBmaWVsZHMuLi5gKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBsb2dfXyQ3KGBDcmVhdGluZyBjYXJ0IGluZm8gZm9yIHBheS1maXJzdCBmbG93Li4uYCk7XG4gICAgY29uc3QgY2FydEluZm8gPSB7XG4gICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICBwcmljZV9pZDogaXRlbS5wcmljZV9pZCxcbiAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHlcbiAgICAgIH0pKSxcbiAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0gfHwgdm9pZCAwLFxuICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tXG4gICAgfTtcbiAgICBsb2dfXyQ3KGBTdGFydGluZyBwYXktZmlyc3QgcGF5bWVudCBmbG93IGZvciBBZmZpcm0uLi5gKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHRydWUsXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGNhcnRJbmZvLFxuICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgbG9nX18kNyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IFN0cmlwZUFmZmlybVJlcXVpcmVkVXNlckFjdGlvbnMucGFyc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gICAgY29uc3QgeyBjbGllbnRfc2VjcmV0IH0gPSBuZXh0QWN0aW9uTWV0YWRhdGFbMF07XG4gICAgbG9nX18kNyhcIkNsaWVudCBzZWNyZXQgZm9yIHBheW1lbnQgaW50ZW50XCIsIGNsaWVudF9zZWNyZXQpO1xuICAgIGNvbnN0IHN0cmlwZUFmZmlybUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVBZmZpcm1DcG0pO1xuICAgIGlmICghc3RyaXBlQWZmaXJtQ3BtKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdHJpcGUgQWZmaXJtIENQTSBub3QgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHsgc3RyaXBlIH0gPSBhd2FpdCBjcmVhdGVTdHJpcGVFbGVtZW50cyhzdHJpcGVBZmZpcm1DcG0ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInBheW1lbnRcIixcbiAgICAgIC8vIFVzZSBwYXltZW50IG1vZGUgZm9yIHBheS1maXJzdCBmbG93XG4gICAgICBjdXJyZW5jeTogcHJlZmlsbC5jdXJyZW5jeSA/PyBcInVzZFwiLFxuICAgICAgYW1vdW50OiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tXG4gICAgfSk7XG4gICAgbG9nX18kNyhcIlN0cmlwZSBpbnN0YW5jZSBjcmVhdGVkXCIsIHN0cmlwZSk7XG4gICAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKTtcbiAgICBjb25zdCBjdXN0b21lck5hbWUgPSBgJHtub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXX0gJHtub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdfWA7XG4gICAgY29uc3QgYWZmaXJtUGF5bWVudERhdGEgPSB7XG4gICAgICByZXR1cm5fdXJsOiBuZXcgVVJMKFwiL2FwcC8zZHMvc3VjY2Vzcy9cIiwgY29udGV4dC5iYXNlVXJsKS50b1N0cmluZygpLFxuICAgICAgcGF5bWVudF9tZXRob2Q6IHtcbiAgICAgICAgYmlsbGluZ19kZXRhaWxzOiB7XG4gICAgICAgICAgZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgICBuYW1lOiBjdXN0b21lck5hbWUsXG4gICAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgICAgbGluZTE6IGJpbGxpbmdBZGRyZXNzLmxpbmUxLFxuICAgICAgICAgICAgbGluZTI6IGJpbGxpbmdBZGRyZXNzLmxpbmUyIHx8IHZvaWQgMCxcbiAgICAgICAgICAgIGNpdHk6IGJpbGxpbmdBZGRyZXNzLmNpdHksXG4gICAgICAgICAgICBzdGF0ZTogYmlsbGluZ0FkZHJlc3Muc3RhdGUsXG4gICAgICAgICAgICBjb3VudHJ5OiBiaWxsaW5nQWRkcmVzcy5jb3VudHJ5LFxuICAgICAgICAgICAgcG9zdGFsX2NvZGU6IGJpbGxpbmdBZGRyZXNzLnppcF9jb2RlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhZmZpcm1PcHRpb25zID0ge1xuICAgICAgaGFuZGxlQWN0aW9uczogZmFsc2VcbiAgICB9O1xuICAgIGxvZ19fJDcoYENvbmZpcm1pbmcgQWZmaXJtIHBheW1lbnQgd2l0aCBjbGllbnQgc2VjcmV0OiAke2NsaWVudF9zZWNyZXR9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZXJyb3IsIHBheW1lbnRJbnRlbnQgfSA9IGF3YWl0IHN0cmlwZS5jb25maXJtQWZmaXJtUGF5bWVudChcbiAgICAgICAgY2xpZW50X3NlY3JldCxcbiAgICAgICAgYWZmaXJtUGF5bWVudERhdGEsXG4gICAgICAgIGFmZmlybU9wdGlvbnNcbiAgICAgICk7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgZXJyX18kOChcIkFmZmlybSBwYXltZW50IGNvbmZpcm1hdGlvbiBlcnJvcjpcIiwgZXJyb3IpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFmZmlybSBwYXltZW50IGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgICAgbG9nX18kNyhcIkFmZmlybSBwYXltZW50IGNvbmZpcm1lZCBzdWNjZXNzZnVsbHlcIiwgcGF5bWVudEludGVudCk7XG4gICAgICBjb25zdCByZWRpcmVjdFVybCA9IHBheW1lbnRJbnRlbnQ/Lm5leHRfYWN0aW9uPy5yZWRpcmVjdF90b191cmw/LnVybDtcbiAgICAgIGlmICghcmVkaXJlY3RVcmwpIHtcbiAgICAgICAgZXJyX18kOChcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZCBpbiBLbGFybmEgcGF5bWVudCBjb25maXJtYXRpb25cIik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihcIktsYXJuYSBwYXltZW50IGZhaWxlZFwiKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgICAgcmVzdWx0OiB7IGludm9pY2VfdXJsczogW10sIHN1YnNjcmlwdGlvbl9pZHM6IFtdLCBjdXN0b21lcl9pZDogXCJcIiwgcGF5bWVudF9tZXRob2RfaWQ6IFwiXCIgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgbG9nX18kNyhcIlBheW1lbnQgcmVxdWlyZXMgYWRkaXRpb25hbCBhY3Rpb24sIHN0YXJ0aW5nIDNEUyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICB1cmw6IHJlZGlyZWN0VXJsLFxuICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJBZmZpcm0gdmVyaWZpY2F0aW9uXCJcbiAgICAgIH0pO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJWZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgICAgbG9nX18kNyhcIjNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICAgIGNvbnN0IHRoZWlyUGF5bWVudE1ldGhvZCA9IHBheW1lbnRJbnRlbnQ/LnBheW1lbnRfbWV0aG9kPy50b1N0cmluZygpID8/IHZvaWQgMDtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5jaGVja291dF9hdHRlbXB0X2lkLFxuICAgICAgICB0aGVpcl9wbV9pZDogdGhlaXJQYXltZW50TWV0aG9kXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJDcoXCJQYXltZW50IGZsb3cgY29uZmlybWVkXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwic3RyaXBlLWFmZmlybVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyX18kOChcIkVycm9yIGluIEFmZmlybSBwYXltZW50IGZsb3c6XCIsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNiwgZXJyX186IGVycl9fJDcgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWFmdGVycGF5XCIpO1xuY29uc3QgU3RyaXBlQWZ0ZXJwYXlDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhZnRlcnBheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgU3RyaXBlQWZ0ZXJwYXlSZXF1aXJlZFVzZXJBY3Rpb25zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5udWxsaXNoKCksXG4gICAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0U3RyaXBlQWZ0ZXJwYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kNihgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgQWZ0ZXJwYXkuLi5gKTtcbiAgICBjb25zdCBzdHJpcGVBZnRlcnBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVBZnRlcnBheUNwbSk7XG4gICAgaWYgKCFzdHJpcGVBZnRlcnBheUNwbSkge1xuICAgICAgbG9nX18kNihgTm8gU3RyaXBlIEFmdGVycGF5IENQTSBmb3VuZGApO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICB9XG4gICAgbG9nX18kNihgU3RhcnRpbmcgc3RyaXBlIGFmdGVycGF5IGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgaWYgKGlzU2V0dXBNb2RlKSB7XG4gICAgICBsb2dfXyQ2KGBTZXR1cCBtb2RlIG5vdCBzdXBwb3J0ZWQgZm9yIFN0cmlwZSBBZnRlcnBheSBmbG93YCk7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIH1cbiAgICBjb25zdCBzdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gT2pzRmxvd3Muc3RyaXBlQWZ0ZXJwYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogc3RyaXBlQWZ0ZXJwYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IGN1c3RvbVBhcmFtcyA/PyB7fSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiB0cnVlIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBlcnJfXyQ3KGBFcnJvciBzdGFydGluZyBBZnRlcnBheSBmbG93OmAsIGVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBzdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuU3RyaXBlQWZ0ZXJwYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7IGNvbnRleHQsIGNoZWNrb3V0UGF5bWVudE1ldGhvZCwgbm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kNihgUnVubmluZyBTdHJpcGUgQWZ0ZXJwYXkgcGF5LWZpcnN0IGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJDYoYFZhbGlkYXRpbmcgZm9ybSBmaWVsZHMuLi5gKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBsb2dfXyQ2KGBDcmVhdGluZyBjYXJ0IGluZm8gZm9yIHBheS1maXJzdCBmbG93Li4uYCk7XG4gICAgY29uc3QgY2FydEluZm8gPSB7XG4gICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICBwcmljZV9pZDogaXRlbS5wcmljZV9pZCxcbiAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHlcbiAgICAgIH0pKSxcbiAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0gfHwgdm9pZCAwLFxuICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tXG4gICAgfTtcbiAgICBsb2dfXyQ2KGBTdGFydGluZyBwYXktZmlyc3QgcGF5bWVudCBmbG93IGZvciBBZnRlcnBheS4uLmApO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogdHJ1ZSxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogY2FydEluZm8sXG4gICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBsb2dfXyQ2KFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gU3RyaXBlQWZ0ZXJwYXlSZXF1aXJlZFVzZXJBY3Rpb25zLnBhcnNlKFxuICAgICAgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1xuICAgICk7XG4gICAgY29uc3QgeyBjbGllbnRfc2VjcmV0IH0gPSBuZXh0QWN0aW9uTWV0YWRhdGFbMF07XG4gICAgbG9nX18kNihcIkNsaWVudCBzZWNyZXQgZm9yIHBheW1lbnQgaW50ZW50XCIsIGNsaWVudF9zZWNyZXQpO1xuICAgIGNvbnN0IHN0cmlwZUFmdGVycGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUFmdGVycGF5Q3BtKTtcbiAgICBpZiAoIXN0cmlwZUFmdGVycGF5Q3BtKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdHJpcGUgQWZ0ZXJwYXkgQ1BNIG5vdCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgeyBzdHJpcGUgfSA9IGF3YWl0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzKHN0cmlwZUFmdGVycGF5Q3BtLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJwYXltZW50XCIsXG4gICAgICAvLyBVc2UgcGF5bWVudCBtb2RlIGZvciBwYXktZmlyc3QgZmxvd1xuICAgICAgY3VycmVuY3k6IHByZWZpbGwuY3VycmVuY3kgPz8gXCJ1c2RcIixcbiAgICAgIGFtb3VudDogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbVxuICAgIH0pO1xuICAgIGxvZ19fJDYoXCJTdHJpcGUgaW5zdGFuY2UgY3JlYXRlZFwiLCBzdHJpcGUpO1xuICAgIGNvbnN0IGJpbGxpbmdBZGRyZXNzID0gZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyk7XG4gICAgY29uc3QgY3VzdG9tZXJOYW1lID0gYCR7bm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV19ICR7bm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXX1gO1xuICAgIGNvbnN0IGFmdGVycGF5UGF5bWVudERhdGEgPSB7XG4gICAgICByZXR1cm5fdXJsOiBuZXcgVVJMKFwiL2FwcC8zZHMvc3VjY2Vzcy9cIiwgY29udGV4dC5iYXNlVXJsKS50b1N0cmluZygpLFxuICAgICAgcGF5bWVudF9tZXRob2Q6IHtcbiAgICAgICAgYmlsbGluZ19kZXRhaWxzOiB7XG4gICAgICAgICAgZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgICBuYW1lOiBjdXN0b21lck5hbWUsXG4gICAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgICAgbGluZTE6IGJpbGxpbmdBZGRyZXNzLmxpbmUxLFxuICAgICAgICAgICAgbGluZTI6IGJpbGxpbmdBZGRyZXNzLmxpbmUyIHx8IHZvaWQgMCxcbiAgICAgICAgICAgIGNpdHk6IGJpbGxpbmdBZGRyZXNzLmNpdHksXG4gICAgICAgICAgICBzdGF0ZTogYmlsbGluZ0FkZHJlc3Muc3RhdGUsXG4gICAgICAgICAgICBjb3VudHJ5OiBiaWxsaW5nQWRkcmVzcy5jb3VudHJ5LFxuICAgICAgICAgICAgcG9zdGFsX2NvZGU6IGJpbGxpbmdBZGRyZXNzLnppcF9jb2RlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhZnRlcnBheU9wdGlvbnMgPSB7XG4gICAgICBoYW5kbGVBY3Rpb25zOiBmYWxzZVxuICAgIH07XG4gICAgbG9nX18kNihgQ29uZmlybWluZyBBZnRlcnBheSBwYXltZW50IHdpdGggY2xpZW50IHNlY3JldDogJHtjbGllbnRfc2VjcmV0fWApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maXJtYXRpb25SZXN1bHQgPSBhd2FpdCBzdHJpcGUuY29uZmlybUFmdGVycGF5Q2xlYXJwYXlQYXltZW50KFxuICAgICAgICBjbGllbnRfc2VjcmV0LFxuICAgICAgICBhZnRlcnBheVBheW1lbnREYXRhLFxuICAgICAgICBhZnRlcnBheU9wdGlvbnNcbiAgICAgICk7XG4gICAgICBsb2dfXyQ2KGBBZnRlcnBheSBwYXltZW50IGNvbmZpcm1hdGlvbiByZXN1bHQ6YCwgY29uZmlybWF0aW9uUmVzdWx0KTtcbiAgICAgIGlmIChjb25maXJtYXRpb25SZXN1bHQucGF5bWVudEludGVudD8ubmV4dF9hY3Rpb24/LnR5cGUgPT09IFwicmVkaXJlY3RfdG9fdXJsXCIpIHtcbiAgICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtYXRpb25SZXN1bHQucGF5bWVudEludGVudD8ubmV4dF9hY3Rpb24/LnJlZGlyZWN0X3RvX3VybD8udXJsO1xuICAgICAgICBpZiAoIXJlZGlyZWN0VXJsKSB7XG4gICAgICAgICAgZXJyX18kNyhcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZCBpbiBBZnRlcnBheSBwYXltZW50IGNvbmZpcm1hdGlvblwiKTtcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoXCJBZnRlcnBheSBwYXltZW50IGZhaWxlZFwiKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICAgICAgcmVzdWx0OiB7IGludm9pY2VfdXJsczogW10sIHN1YnNjcmlwdGlvbl9pZHM6IFtdLCBjdXN0b21lcl9pZDogXCJcIiwgcGF5bWVudF9tZXRob2RfaWQ6IFwiXCIgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbG9nX18kNihcIkFmdGVycGF5IHZlcmlmaWNhdGlvbiBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICAgIGZyYW1lVGl0bGU6IFwiQWZ0ZXJwYXkgdmVyaWZpY2F0aW9uXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJDYoYOKVsCBBZnRlcnBheSB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBZnRlcnBheSB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFmdGVycGF5IHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgbG9nX18kNihcIkFmdGVycGF5IHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQsIGNvbmZpcm1pbmcgd2l0aCBiYWNrZW5kLi4uXCIpO1xuICAgICAgICBjb25zdCB0aGVpclBheW1lbnRNZXRob2QgPSBjb25maXJtYXRpb25SZXN1bHQucGF5bWVudEludGVudD8ucGF5bWVudF9tZXRob2Q/LnRvU3RyaW5nKCkgPz8gdm9pZCAwO1xuICAgICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLmNoZWNrb3V0X2F0dGVtcHRfaWQsXG4gICAgICAgICAgdGhlaXJfcG1faWQ6IHRoZWlyUGF5bWVudE1ldGhvZFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICAgIGxvZ1ByZWZpeDogXCJzdHJpcGUtYWZ0ZXJwYXlcIixcbiAgICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dfXyQ2KFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kIGluIEFmdGVycGF5IHBheW1lbnQgY29uZmlybWF0aW9uXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gQWZ0ZXJwYXkgcGF5bWVudCBjb25maXJtYXRpb25cIik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycl9fJDcoXCJFcnJvciBpbiBBZnRlcnBheSBjaGVja291dCBmbG93OlwiLCBlcnJvcik7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiQWZ0ZXJwYXkgcGF5bWVudCBmYWlsZWRcIjtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNSwgZXJyX186IGVycl9fJDYgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWtsYXJuYVwiKTtcbmNvbnN0IFN0cmlwZUtsYXJuYUNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImtsYXJuYVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgU3RyaXBlS2xhcm5hUmVxdWlyZWRVc2VyQWN0aW9ucyA9IHouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpLFxuICAgIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgaW5pdFN0cmlwZUtsYXJuYUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQ1KGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBLbGFybmEuLi5gKTtcbiAgICBjb25zdCBzdHJpcGVLbGFybmFDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlS2xhcm5hQ3BtKTtcbiAgICBpZiAoIXN0cmlwZUtsYXJuYUNwbSkge1xuICAgICAgbG9nX18kNShgTm8gU3RyaXBlIEtsYXJuYSBDUE0gZm91bmRgKTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgfVxuICAgIGxvZ19fJDUoYFN0YXJ0aW5nIHN0cmlwZSBrbGFybmEgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICAgIGxvZ19fJDUoYFNldHVwIG1vZGUgaXMgbm90IHN1cHBvcnRlZCBmb3IgU3RyaXBlIEtsYXJuYSBmbG93YCk7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIH1cbiAgICBjb25zdCBzdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gT2pzRmxvd3Muc3RyaXBlS2xhcm5hLnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHN0cmlwZUtsYXJuYUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczogY3VzdG9tUGFyYW1zID8/IHt9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6IHRydWUgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycl9fJDYoYEVycm9yIHN0YXJ0aW5nIEtsYXJuYSBmbG93OmAsIGVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBzdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuU3RyaXBlS2xhcm5hRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoeyBjb250ZXh0LCBjaGVja291dFBheW1lbnRNZXRob2QsIG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGxvZ19fJDUoYFJ1bm5pbmcgU3RyaXBlIEtsYXJuYSBwYXktZmlyc3QgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kNShgVmFsaWRhdGluZyBmb3JtIGZpZWxkcy4uLmApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGxvZ19fJDUoYENyZWF0aW5nIGNhcnQgaW5mbyBmb3IgcGF5LWZpcnN0IGZsb3cuLi5gKTtcbiAgICBjb25zdCBjYXJ0SW5mbyA9IHtcbiAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIHByaWNlX2lkOiBpdGVtLnByaWNlX2lkLFxuICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eVxuICAgICAgfSkpLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSB8fCB2b2lkIDAsXG4gICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9O1xuICAgIGxvZ19fJDUoYFN0YXJ0aW5nIHBheS1maXJzdCBwYXltZW50IGZsb3cgZm9yIEtsYXJuYS4uLmApO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogdHJ1ZSxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogY2FydEluZm8sXG4gICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBsb2dfXyQ1KFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gU3RyaXBlS2xhcm5hUmVxdWlyZWRVc2VyQWN0aW9ucy5wYXJzZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zKTtcbiAgICBjb25zdCB7IGNsaWVudF9zZWNyZXQgfSA9IG5leHRBY3Rpb25NZXRhZGF0YVswXTtcbiAgICBsb2dfXyQ1KFwiQ2xpZW50IHNlY3JldCBmb3IgcGF5bWVudCBpbnRlbnRcIiwgY2xpZW50X3NlY3JldCk7XG4gICAgY29uc3Qgc3RyaXBlS2xhcm5hQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUtsYXJuYUNwbSk7XG4gICAgaWYgKCFzdHJpcGVLbGFybmFDcG0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0cmlwZSBLbGFybmEgQ1BNIG5vdCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgeyBzdHJpcGUgfSA9IGF3YWl0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzKHN0cmlwZUtsYXJuYUNwbS5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwicGF5bWVudFwiLFxuICAgICAgLy8gVXNlIHBheW1lbnQgbW9kZSBmb3IgcGF5LWZpcnN0IGZsb3dcbiAgICAgIGN1cnJlbmN5OiBwcmVmaWxsLmN1cnJlbmN5ID8/IFwidXNkXCIsXG4gICAgICBhbW91bnQ6IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9KTtcbiAgICBsb2dfXyQ1KFwiU3RyaXBlIGluc3RhbmNlIGNyZWF0ZWRcIiwgc3RyaXBlKTtcbiAgICBjb25zdCBiaWxsaW5nQWRkcmVzcyA9IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpO1xuICAgIGNvbnN0IGN1c3RvbWVyTmFtZSA9IGAke25vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdfSAke25vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV19YDtcbiAgICBjb25zdCBrbGFybmFQYXltZW50RGF0YSA9IHtcbiAgICAgIHJldHVybl91cmw6IG5ldyBVUkwoXCIvYXBwLzNkcy9zdWNjZXNzL1wiLCBjb250ZXh0LmJhc2VVcmwpLnRvU3RyaW5nKCksXG4gICAgICBwYXltZW50X21ldGhvZDoge1xuICAgICAgICBiaWxsaW5nX2RldGFpbHM6IHtcbiAgICAgICAgICBlbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICAgIG5hbWU6IGN1c3RvbWVyTmFtZSxcbiAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICBsaW5lMTogYmlsbGluZ0FkZHJlc3MubGluZTEsXG4gICAgICAgICAgICBsaW5lMjogYmlsbGluZ0FkZHJlc3MubGluZTIgfHwgdm9pZCAwLFxuICAgICAgICAgICAgY2l0eTogYmlsbGluZ0FkZHJlc3MuY2l0eSxcbiAgICAgICAgICAgIHN0YXRlOiBiaWxsaW5nQWRkcmVzcy5zdGF0ZSxcbiAgICAgICAgICAgIGNvdW50cnk6IGJpbGxpbmdBZGRyZXNzLmNvdW50cnksXG4gICAgICAgICAgICBwb3N0YWxfY29kZTogYmlsbGluZ0FkZHJlc3MuemlwX2NvZGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGtsYXJuYU9wdGlvbnMgPSB7XG4gICAgICBoYW5kbGVBY3Rpb25zOiBmYWxzZVxuICAgIH07XG4gICAgbG9nX18kNShgQ29uZmlybWluZyBLbGFybmEgcGF5bWVudCB3aXRoIGNsaWVudCBzZWNyZXQ6ICR7Y2xpZW50X3NlY3JldH1gKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlybWF0aW9uUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1LbGFybmFQYXltZW50KGNsaWVudF9zZWNyZXQsIGtsYXJuYVBheW1lbnREYXRhLCBrbGFybmFPcHRpb25zKTtcbiAgICAgIGxvZ19fJDUoYEtsYXJuYSBwYXltZW50IGNvbmZpcm1hdGlvbiByZXN1bHQ6YCwgY29uZmlybWF0aW9uUmVzdWx0KTtcbiAgICAgIGlmIChjb25maXJtYXRpb25SZXN1bHQucGF5bWVudEludGVudD8ubmV4dF9hY3Rpb24/LnR5cGUgPT09IFwicmVkaXJlY3RfdG9fdXJsXCIpIHtcbiAgICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtYXRpb25SZXN1bHQucGF5bWVudEludGVudD8ubmV4dF9hY3Rpb24/LnJlZGlyZWN0X3RvX3VybD8udXJsO1xuICAgICAgICBpZiAoIXJlZGlyZWN0VXJsKSB7XG4gICAgICAgICAgZXJyX18kNihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZCBpbiBLbGFybmEgcGF5bWVudCBjb25maXJtYXRpb25cIik7XG4gICAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKFwiS2xhcm5hIHBheW1lbnQgZmFpbGVkXCIpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgICAgICByZXN1bHQ6IHsgaW52b2ljZV91cmxzOiBbXSwgc3Vic2NyaXB0aW9uX2lkczogW10sIGN1c3RvbWVyX2lkOiBcIlwiLCBwYXltZW50X21ldGhvZF9pZDogXCJcIiB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsb2dfXyQ1KFwiS2xhcm5hIHZlcmlmaWNhdGlvbiBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICAgIGZyYW1lVGl0bGU6IFwiS2xhcm5hIHZlcmlmaWNhdGlvblwiXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyQ1KGDilbAgS2xhcm5hIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIktsYXJuYSB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIktsYXJuYSB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGxvZ19fJDUoXCJLbGFybmEgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCwgY29uZmlybWluZyB3aXRoIGJhY2tlbmQuLi5cIik7XG4gICAgICAgIGNvbnN0IHRoZWlyUGF5bWVudE1ldGhvZCA9IGNvbmZpcm1hdGlvblJlc3VsdC5wYXltZW50SW50ZW50Py5wYXltZW50X21ldGhvZD8udG9TdHJpbmcoKSA/PyB2b2lkIDA7XG4gICAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UuY2hlY2tvdXRfYXR0ZW1wdF9pZCxcbiAgICAgICAgICB0aGVpcl9wbV9pZDogdGhlaXJQYXltZW50TWV0aG9kXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgICAgbG9nUHJlZml4OiBcInN0cmlwZS1rbGFybmFcIixcbiAgICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dfXyQ1KFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kIGluIEtsYXJuYSBwYXltZW50IGNvbmZpcm1hdGlvblwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kIGluIEtsYXJuYSBwYXltZW50IGNvbmZpcm1hdGlvblwiKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyX18kNihcIkVycm9yIGluIEtsYXJuYSBjaGVja291dCBmbG93OlwiLCBlcnJvcik7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiS2xhcm5hIHBheW1lbnQgZmFpbGVkXCI7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IE9KU19TVFJJUEVfTElOS19CVE5fSUQgPSBcIm9qcy1zdHJpcGUtbGluay1idG5cIjtcbmNvbnN0IHsgbG9nX186IGxvZ19fJDQsIGVycl9fOiBlcnJfXyQ1IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1saW5rXCIpO1xuY29uc3QgU3RyaXBlTGlua0NwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucyA9IHouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgaW5pdFN0cmlwZUxpbmtGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgaW5pdFBhcmFtcyA9IGNvbnRleHQuY3VzdG9tSW5pdFBhcmFtcy5zdHJpcGVMaW5rO1xuICAgIGxvZ19fJDQoYENoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIExpbmsuLi5gKTtcbiAgICBjb25zdCBzdHJpcGVMaW5rQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUxpbmtDcG0pO1xuICAgIGxvZ19fJDQoYFN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgbG9nX18kNChgQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uYCk7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3QgeyBlbGVtZW50cywgc3RyaXBlIH0gPSBhd2FpdCBjcmVhdGVTdHJpcGVFbGVtZW50cyhzdHJpcGVMaW5rQ3BtLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgY3VycmVuY3k6IGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5LFxuICAgICAgc2V0dXBfZnV0dXJlX3VzYWdlOiBcIm9mZl9zZXNzaW9uXCIsXG4gICAgICBwYXltZW50TWV0aG9kQ3JlYXRpb246IFwibWFudWFsXCJcbiAgICB9KTtcbiAgICBjb25zdCBsaW5rQXV0aGVudGljYXRpb25FbGVtZW50ID0gZWxlbWVudHMuY3JlYXRlKFwibGlua0F1dGhlbnRpY2F0aW9uXCIpO1xuICAgIGxvZ19fJDQoYENyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5gKTtcbiAgICBjb25zdCBleHByZXNzQ2hlY2tvdXRFbGVtZW50ID0gZWxlbWVudHMuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogaW5pdFBhcmFtcz8uYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlbmRlckxpbmtBdXRoZW50aWNhdGlvbkVsZW1lbnQgPSAoc2VsZWN0b3IsIHNpbGVudCkgPT4ge1xuICAgICAgbGV0IHBhcmVudENvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgaWYgKCFwYXJlbnRDb250YWluZXIpIHtcbiAgICAgICAgZXJyX18kNShgUmVjb21tYW5kZWQgdG8gcmVuZGVyIGEgY29udGFpbmVyIHdpdGggJHtzZWxlY3Rvcn0gdG8gYXZvaWQgcmVuZGVyaW5nIGluIHRoZSBib2R5YCk7XG4gICAgICAgIHBhcmVudENvbnRhaW5lciA9IGRvY3VtZW50LmJvZHk7XG4gICAgICB9XG4gICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgcGFyZW50Q29udGFpbmVyPy5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgICAgbGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudC5tb3VudChjb250YWluZXIpO1xuICAgICAgbGV0IGlzQXV0aGVudGljYXRlZCA9IGZhbHNlO1xuICAgICAgbGV0IGlzTGlua0F1dGhSZWFkeSA9IGZhbHNlO1xuICAgICAgbGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudC5vbmNlKFwicmVhZHlcIiwgKCkgPT4ge1xuICAgICAgICBpc0xpbmtBdXRoUmVhZHkgPSB0cnVlO1xuICAgICAgICBpbml0UGFyYW1zPy5vbkF1dGhlbnRpY2F0aW9uRWxlbWVudFJlYWR5Py4oKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICBjb250YWluZXIuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgICAgICAgY29udGFpbmVyLnN0eWxlLnRvcCA9IFwiLTEwMDBweFwiO1xuICAgICAgICBjb250YWluZXIuc3R5bGUubGVmdCA9IFwiLTEwMDBweFwiO1xuICAgICAgICBjb250YWluZXIuc3R5bGUuekluZGV4ID0gXCItMVwiO1xuICAgICAgICBsaW5rQXV0aGVudGljYXRpb25FbGVtZW50Lm9uKFwiY2hhbmdlXCIsIChlKSA9PiB7XG4gICAgICAgICAgaXNBdXRoZW50aWNhdGVkID0gZS5jb21wbGV0ZSB8fCAhIWUudmFsdWUuZW1haWw7XG4gICAgICAgICAgaWYgKGlzTGlua0F1dGhSZWFkeSkge1xuICAgICAgICAgICAgaW5pdFBhcmFtcz8ub25BdXRoZW50aWNhdGlvblN0YXR1c0NoYW5nZT8uKGlzQXV0aGVudGljYXRlZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaWZyYW1lID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCJpZnJhbWVcIik7XG4gICAgICAgIGlmIChpZnJhbWUpIHtcbiAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGlmcmFtZS5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCBpc1Bvc3NpYmxlQXV0aGVudGljYXRlZCA9IGhlaWdodCA+IDE2MDtcbiAgICAgICAgICAgIGlmIChpc0xpbmtBdXRoUmVhZHkpIHtcbiAgICAgICAgICAgICAgaW5pdFBhcmFtcz8ub25BdXRoZW50aWNhdGlvblN0YXR1c0NoYW5nZT8uKGlzQXV0aGVudGljYXRlZCB8fCBpc1Bvc3NpYmxlQXV0aGVudGljYXRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShpZnJhbWUsIHsgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbXCJzdHlsZVwiXSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpbmtBdXRoZW50aWNhdGlvbkVsZW1lbnQ7XG4gICAgfTtcbiAgICBjb25zdCBtb3VudEJ1dHRvbiA9IChzZWxlY3RvcikgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5tb3VudChzZWxlY3RvciA/IHNlbGVjdG9yIDogYCMke09KU19TVFJJUEVfTElOS19CVE5fSUR9YCk7XG4gICAgfTtcbiAgICBjb25zdCBkaXNtb3VudEJ1dHRvbiA9ICgpID0+IHtcbiAgICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQudW5tb3VudCgpO1xuICAgIH07XG4gICAgaWYgKGluaXRQYXJhbXM/LmRvTm90TW91bnRPbkluaXQpIHtcbiAgICAgIGxvZ19fJDQoYE5PVCBtb3VudGluZyBzdHJpcGUgbGluayBidXR0b24gKGRvTm90TW91bnRPbkluaXQgaXMgdHJ1ZSlgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kNChgTW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uLi4uYCk7XG4gICAgICBtb3VudEJ1dHRvbigpO1xuICAgIH1cbiAgICBpZiAoaW5pdFBhcmFtcz8uc2lsZW50bHlDaGVja0F1dGhlbnRpY2F0aW9uKSB7XG4gICAgICBsb2dfXyQ0KGBTaWxlbnRseSBtb3VudGluZyBsaW5rIGF1dGhlbnRpY2F0aW9uIGVsZW1lbnQgYXQgIyR7T0pTX1NUUklQRV9MSU5LX0JUTl9JRH0uLi5gKTtcbiAgICAgIHJlbmRlckxpbmtBdXRoZW50aWNhdGlvbkVsZW1lbnQoYCMke09KU19TVFJJUEVfTElOS19CVE5fSUR9YCwgdHJ1ZSk7XG4gICAgfVxuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjbGlja1wiLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgIGxvZ19fJDQoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKTtcbiAgICAgIGlmIChpbml0UGFyYW1zPy5vdmVycmlkZUxpbmtTdWJtaXQpIHtcbiAgICAgICAgY29uc3Qgc2hvdWxkU3VibWl0ID0gYXdhaXQgaW5pdFBhcmFtcy5vdmVycmlkZUxpbmtTdWJtaXQoKTtcbiAgICAgICAgaWYgKCFzaG91bGRTdWJtaXQpIHtcbiAgICAgICAgICBsb2dfXyQ0KFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXZlbnQucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjb25maXJtXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgbG9nX18kNChcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgZXZlbnQpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiBldmVudC5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgZXJyX18kNShcImVycm9yXCIsIHJlc3VsdC5lcnJvcik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihyZXN1bHQuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dfXyQ0KFwicGF5bWVudE1ldGhvZFwiLCByZXN1bHQucGF5bWVudE1ldGhvZCk7XG4gICAgICAgIE9qc0Zsb3dzLnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogc3RyaXBlTGlua0NwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogcmVzdWx0LnBheW1lbnRNZXRob2QgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiB0cnVlIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbixcbiAgICAgICAgZGlzbW91bnRCdXR0b24sXG4gICAgICAgIG1vdW50TGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudDogKHNlbGVjdG9yKSA9PiByZW5kZXJMaW5rQXV0aGVudGljYXRpb25FbGVtZW50KHNlbGVjdG9yLCBmYWxzZSksXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBnZXRFbGVtZW50QnlJZEFzeW5jKE9KU19TVFJJUEVfTElOS19CVE5fSUQpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZUxpbmtGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kNChgUnVubmluZyBTdHJpcGUgTGluayBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBsb2dfXyQ0KGBNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uYCk7XG4gICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTShub25DZGVGb3JtSW5wdXRzLCBjdXN0b21QYXJhbXMuc3RyaXBlUE0pO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgbG9nX18kNChgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uYCk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGN1c3RvbVBhcmFtcy5zdHJpcGVQTS5pZCxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGxvZ19fJDQoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucy5wYXJzZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zKTtcbiAgICBjb25zdCBvdXJFeGlzdGluZ1BtSWQgPSBuZXh0QWN0aW9uTWV0YWRhdGFbMF0ub3VyX2V4aXN0aW5nX3BtX2lkO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgbG9nX18kNChgRG9pbmcgcGF5bWVudCBzZXR1cC4uLmApO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IG91ckV4aXN0aW5nUG1JZFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kNChgRG9pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0gPSAoZm9ybUlucHV0cywgc3RyaXBlUG0pID0+IHtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGNvbnN0IFtwYXllckZpcnN0TmFtZSwgLi4ucGF5ZXJMYXN0TmFtZVBhcnRzXSA9IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5uYW1lPy50cmltKCk/LnNwbGl0KC9cXHMrLykgPz8gW107XG4gIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBwYXllckxhc3ROYW1lUGFydHMuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHN0cmlwZVBtW1wibGlua1wiXT8uZW1haWwgfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8ucG9zdGFsX2NvZGUgfHwgXCIwMDAwMFwiO1xuICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGNvbnN0IGZpcnN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgcGF5ZXJGaXJzdE5hbWUgfHwgXCJcIjtcbiAgY29uc3QgbGFzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcGF5ZXJMYXN0TmFtZSB8fCBcIlwiO1xuICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBsYXN0TmFtZTtcbiAgfSBlbHNlIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IFwiXCI7XG4gIH1cbiAgbG9nX18kNChgRmluYWwgZm9ybSBpbnB1dHM6YCwgaW5wdXRzKTtcbiAgcmV0dXJuIGlucHV0cztcbn07XG5jb25zdCBnZXRFbGVtZW50QnlJZEFzeW5jID0gKGlkKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICBjb25zdCBnZXRFbGVtZW50ID0gKCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHJlc29sdmUoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShnZXRFbGVtZW50KTtcbiAgICB9XG4gIH07XG4gIGdldEVsZW1lbnQoKTtcbn0pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQzLCBlcnJfXzogZXJyX18kNCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtcHJcIik7XG5jb25zdCBTdHJpcGVQckNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoudW5pb24oW3oubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBpbml0U3RyaXBlUHJGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kMyhgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5gKTtcbiAgICBjb25zdCBjaGVja291dFBheW1lbnRNZXRob2QgPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlUHJDcG0pO1xuICAgIGxvZ19fJDMoYEluaXRpYWxpemluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyQzKGBHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRgKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwciA9IGF3YWl0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0KFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIGluaXRpYWxQcmV2aWV3LmFtb3VudEF0b20sXG4gICAgICBpbml0aWFsUHJldmlldy5jdXJyZW5jeSxcbiAgICAgIGlzU2V0dXBNb2RlXG4gICAgKTtcbiAgICBsb2dfXyQzKGBDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50YCk7XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnQgPSBhd2FpdCBwci5jYW5NYWtlUGF5bWVudCgpO1xuICAgIGlmIChjYW5NYWtlUGF5bWVudCA9PT0gbnVsbCkge1xuICAgICAgZXJyX18kNChgY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbGApO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgfVxuICAgIGxvZ19fJDMoYFN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudGAsIGNhbk1ha2VQYXltZW50KTtcbiAgICBjb25zdCBydW5TdHJpcGVQckZsb3cyID0gKHByb3ZpZGVyLCBwYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBPanNGbG93cy5zdHJpcGVQUi5ydW4oe1xuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBwcm92aWRlciksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXIsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICAgICAgICBpbml0UmVzdWx0OiB7XG4gICAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICAgIHByLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczogeyBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksIGdvb2dsZVBheTogY2FuTWFrZVBheW1lbnQuZ29vZ2xlUGF5IH0sXG4gICAgICAgICAgc3RhcnRGbG93OiBydW5TdHJpcGVQckZsb3cyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgcHIsXG4gICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHtcbiAgICAgICAgYXBwbGVQYXk6IGNhbk1ha2VQYXltZW50LmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGNhbk1ha2VQYXltZW50Lmdvb2dsZVBheVxuICAgICAgfSxcbiAgICAgIHN0YXJ0RmxvdzogcnVuU3RyaXBlUHJGbG93MlxuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5TdHJpcGVQckZsb3ckMSA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgaW5pdFJlc3VsdFxuICB9KSA9PiB7XG4gICAgbG9nX18kMyhgUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgIGlmIChjdXN0b21QYXJhbXMucHJvdmlkZXIgIT09IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciBtaXNtYXRjaC4gRXhwZWN0ZWQgJHtjdXN0b21QYXJhbXMucHJvdmlkZXJ9LCBnb3QgJHtjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJ9YCk7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHIgPSBpbml0UmVzdWx0LnByO1xuICAgIGlmIChjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IG92ZXJyaWRlID0gY3VzdG9tUGFyYW1zLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBsb2dfXyQzKGBPdmVycmlkaW5nIFBSIGFtb3VudCB3aXRoYCwgb3ZlcnJpZGUpO1xuICAgICAgY29uc3QgYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9IHR5cGVvZiBvdmVycmlkZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09PSBcImZ1bmN0aW9uXCIgPyBvdmVycmlkZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KHt9KSA6IG92ZXJyaWRlLmFwcGxlUGF5UGF5bWVudFJlcXVlc3Q7XG4gICAgICB1cGRhdGVQcldpdGhBbW91bnQocHIsIG92ZXJyaWRlLmFtb3VudCwgb3ZlcnJpZGUucGVuZGluZywgYXBwbGVQYXlQYXltZW50UmVxdWVzdCwgb3ZlcnJpZGUubGFiZWwpO1xuICAgIH1cbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBpZiAoIWN1c3RvbVBhcmFtcy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgICAgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApLnRoZW4oKGluaXRpYWxQcmV2aWV3KSA9PiB7XG4gICAgICAgIGlmICghcHIuaXNTaG93aW5nKCkpIHtcbiAgICAgICAgICB1cGRhdGVQcldpdGhBbW91bnQocHIsIGluaXRpYWxQcmV2aWV3LCBmYWxzZSwgdm9pZCAwLCBcIlRvdGFsXCIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgbG9nX18kMyhgU2hvd2luZyBQUiBkaWFsb2cuLi5gKTtcbiAgICBwci5zaG93KCk7XG4gICAgY29uc3Qgc3RyaXBlUG1BZGRlZEV2ZW50ID0gYXdhaXQgd2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QocHIpO1xuICAgIGxvZ19fJDMoYFN0cmlwZSBQTSBhZGRlZCBldmVudDpgLCBzdHJpcGVQbUFkZGVkRXZlbnQpO1xuICAgIGxvZ19fJDMoYE1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5gKTtcbiAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtKG5vbkNkZUZvcm1JbnB1dHMsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG1lcmdlZElucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBsb2dfXyQzKGBQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHAgYXltZW50IGZsb3cuLi5gLCBub25DZGVGb3JtRmllbGRzKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93Rm9yUFIoYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgZmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGxvZ19fJDMoYENvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5gKTtcbiAgICBhd2FpdCBjb25maXJtU3RyaXBlUHJQTShuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQzKGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5gKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW5cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDMoYFBlcmZvcm1pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0gPSAoZm9ybUlucHV0cywgc3RyaXBlUG1FdnQpID0+IHtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGNvbnN0IFtwYXllckZpcnN0TmFtZSwgLi4ucGF5ZXJMYXN0TmFtZVBhcnRzXSA9IHN0cmlwZVBtRXZ0LnBheWVyTmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICBjb25zdCBwYXllckxhc3ROYW1lID0gcGF5ZXJMYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBzdHJpcGVQbUV2dC5wYXltZW50TWV0aG9kPy5iaWxsaW5nX2RldGFpbHM/LmFkZHJlc3M7XG4gIGNvbnN0IHNoaXBwaW5nQWRkcmVzcyA9IHN0cmlwZVBtRXZ0LnNoaXBwaW5nQWRkcmVzcztcbiAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBzdHJpcGVQbUV2dC5wYXllckVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBiaWxsaW5nQWRkcmVzcz8ucG9zdGFsX2NvZGUgfHwgc2hpcHBpbmdBZGRyZXNzPy5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgYmlsbGluZ0FkZHJlc3M/LmNvdW50cnkgfHwgc2hpcHBpbmdBZGRyZXNzPy5jb3VudHJ5IHx8IFwiVVNcIjtcbiAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIlwiO1xuICBjb25zdCBsYXN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwYXllckxhc3ROYW1lIHx8IFwiXCI7XG4gIGlmIChmaXJzdE5hbWUgfHwgbGFzdE5hbWUpIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICB9IGVsc2Uge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgfVxuICBsb2dfXyQzKGBGaW5hbCBmb3JtIGlucHV0czpgLCBpbnB1dHMpO1xuICByZXR1cm4gaW5wdXRzO1xufTtcbmNvbnN0IHVwZGF0ZVByV2l0aEFtb3VudCA9IChwciwgYW1vdW50LCBpc1BlbmRpbmcsIHN0cmlwZUFwcGxlUGF5LCBsYWJlbCkgPT4ge1xuICBwci51cGRhdGUoe1xuICAgIHRvdGFsOiBhbW91bnQgPyB7XG4gICAgICBhbW91bnQ6IGFtb3VudC5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IGxhYmVsID8/IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IGlzUGVuZGluZ1xuICAgIH0gOiB2b2lkIDAsXG4gICAgY3VycmVuY3k6IGFtb3VudD8uY3VycmVuY3ksXG4gICAgLy8gU3RyaXBlJ3MgYXBwbGVQYXkgb3B0aW9uIG9ubHkgc3VwcG9ydHMgJ3JlY3VycmluZ1BheW1lbnRSZXF1ZXN0JyB8ICdkZWZlcnJlZFBheW1lbnRSZXF1ZXN0JyB8ICdhdXRvbWF0aWNSZWxvYWRQYXltZW50UmVxdWVzdCcgb2YgbmF0aXZlIEFwcGxlUGF5IHBheW1lbnQgcmVxdWVzdFxuICAgIC8vIFdlJ3JlIGFjY2VwdGluZyBuYXRpdmUgUGF5bWVudCBSZXF1ZXN0IGhlcmUgZm9yIG1vcmUgY29tbW9uIHR5cGluZy5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gc3RyaXBlIGRvIG5vdCBleHBlY3QgYWRkaXRpb25hbCBmaWVsZHNcbiAgICBhcHBsZVBheTogc3RyaXBlQXBwbGVQYXlcbiAgfSk7XG59O1xuY29uc3QgcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICBpZiAocmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHtyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgfVxuICByZXR1cm4gUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UocmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn07XG5cbmNvbnN0IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QgPSAoY3Btcywgd2l0aFByb3ZpZGVyLCB3aXRoUHJvY2Vzc29yKSA9PiB7XG4gIGNvbnN0IG1hdGNoZXMgPSBjcG1zLmZpbHRlcigoY3BtKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlc1Byb2Nlc3NvciA9IHdpdGhQcm9jZXNzb3IgPT09IHZvaWQgMCA/IHRydWUgOiBjcG0ucHJvY2Vzc29yX25hbWUgPT09IHdpdGhQcm9jZXNzb3I7XG4gICAgY29uc3QgbWF0Y2hlc1Byb3ZpZGVyID0gY3BtLnByb3ZpZGVyID09PSB3aXRoUHJvdmlkZXI7XG4gICAgcmV0dXJuIG1hdGNoZXNQcm9jZXNzb3IgJiYgbWF0Y2hlc1Byb3ZpZGVyO1xuICB9KTtcbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGNwbXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gIH1cbiAgaWYgKG1hdGNoZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGNwbXMpO1xuICAgIGNvbnNvbGUud2FybihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHt3aXRoUHJvdmlkZXJ9JyBhbmQgcHJvY2Vzc29yICcke3dpdGhQcm9jZXNzb3J9J2ApO1xuICAgIHRyYWNrKFwibW9yZV90aGFuX29uZV9jcG1fZm91bmRcIiwge1xuICAgICAgcHJvdmlkZXI6IHdpdGhQcm92aWRlcixcbiAgICAgIHByb2Nlc3Nvcjogd2l0aFByb2Nlc3NvcixcbiAgICAgIGNwbXNcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlc1swXTtcbn07XG5jb25zdCBPanNGbG93cyA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5Db21tb25DY0Zsb3dcbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZVByRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZVByRmxvdyQxXG4gIH0sXG4gIHN0cmlwZUxpbms6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlTGlua0Zsb3csXG4gICAgcnVuOiBydW5TdHJpcGVMaW5rRmxvd1xuICB9LFxuICBzdHJpcGVLbGFybmE6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlS2xhcm5hRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZUtsYXJuYUZsb3dcbiAgfSxcbiAgc3RyaXBlQWZmaXJtOiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZUFmZmlybUZsb3csXG4gICAgcnVuOiBydW5TdHJpcGVBZmZpcm1GbG93XG4gIH0sXG4gIHN0cmlwZUFmdGVycGF5OiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZUFmdGVycGF5RmxvdyxcbiAgICBydW46IHJ1blN0cmlwZUFmdGVycGF5Rmxvd1xuICB9LFxuICAvLyBQb2NreXRcbiAgcG9ja3l0UGF5cGFsOiB7XG4gICAgaW5pdDogaW5pdFBvY2t5dFBheXBhbEZsb3csXG4gICAgcnVuOiBydW5Qb2NreXRQYXlwYWxGbG93XG4gIH0sXG4gIC8vIFBheVBhbFxuICBwYXlwYWw6IHtcbiAgICBpbml0OiBpbml0UGF5cGFsRmxvdyxcbiAgICBydW46IHJ1blBheXBhbEZsb3dcbiAgfSxcbiAgLy8gS2xhcm5hXG4gIGFpcndhbGxleEtsYXJuYToge1xuICAgIGluaXQ6IGluaXRBaXJ3YWxsZXhLbGFybmFGbG93LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4S2xhcm5hRmxvd1xuICB9LFxuICAvLyBBaXJ3YWxsZXhcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3csXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhHb29nbGVQYXlGbG93XG4gIH0sXG4gIGFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFpcndhbGxleEFwcGxlUGF5RmxvdyxcbiAgICBydW46IHJ1bkFpcndhbGxleEFwcGxlUGF5Rmxvd1xuICB9LFxuICBhaXJ3YWxsZXhBQ0g6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkFpcndhbGxleEFDSEZsb3dcbiAgfSxcbiAgYWlyd2FsbGV4RUZUOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhFRlRGbG93XG4gIH0sXG4gIGFpcndhbGxleEJBQ1M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkFpcndhbGxleEJBQ1NGbG93XG4gIH0sXG4gIGFpcndhbGxleFNFUEE6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkFpcndhbGxleFNFUEFGbG93XG4gIH0sXG4gIC8vIExvb3BcbiAgbG9vcENyeXB0bzoge1xuICAgIGluaXQ6IGluaXRMb29wRmxvdyxcbiAgICBydW46IHJ1bkxvb3BGbG93XG4gIH0sXG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB7XG4gICAgaW5pdDogaW5pdEF1dGhuZXRBcHBsZVBheUZsb3csXG4gICAgcnVuOiBydW5BdXRobmV0QXBwbGVQYXlGbG93XG4gIH0sXG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheToge1xuICAgIGluaXQ6IGluaXRBdXRobmV0R29vZ2xlUGF5RmxvdyxcbiAgICBydW46IHJ1bkF1dGhuZXRHb29nbGVQYXlGbG93XG4gIH0sXG4gIGFkeWVuR29vZ2xlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFkeWVuR29vZ2xlUGF5RmxvdyxcbiAgICBydW46IHJ1bkFkeWVuR29vZ2xlUGF5Rmxvd1xuICB9LFxuICBhZHllbkFwcGxlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFkeWVuQXBwbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQWR5ZW5BcHBsZVBheUZsb3dcbiAgfVxuICAvLyDwn5GJIEFkZCBtb3JlIGZsb3dzIGhlcmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDIsIGVycl9fOiBlcnJfXyQzIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImluaXQtZmxvd3NcIik7XG5jb25zdCBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlciA9IChmbG93TmFtZSwgaW5pdEZsb3cpID0+IHtcbiAgY29uc3QgcHVibGlzaGVyID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgcmV0dXJuIHtcbiAgICBwdWJsaXNoZXIsXG4gICAgaW5pdGlhbGl6ZTogYXN5bmMgKGluaXRQYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChwdWJsaXNoZXIuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoaXMgZmxvdyBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSBhd2FpdCBpbml0Rmxvdyhpbml0UGFyYW1zKTtcbiAgICAgICAgbG9nX18kMihg4pyUICR7Zmxvd05hbWV9IGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBSZXN1bHQ6YCwgaW5pdFJlc3VsdCk7XG4gICAgICAgIHB1Ymxpc2hlci5zZXQoaW5pdFJlc3VsdCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBlcnJfXyQzKGDwnZmtICR7Zmxvd05hbWV9IGZsb3cgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBFcnJvcjpgLCBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpLCBcIkRldGFpbHM6XCIsIGVycm9yKTtcbiAgICAgICAgcHVibGlzaGVyLnRocm93KGVycm9yLCBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBbGxJbml0Rmxvd3MgPSBhc3luYyAoZmxvd3MsIGNvbnRleHQsIGZvcm1DYWxsYmFja3MpID0+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyhmbG93cykubWFwKChmbG93KSA9PiBmbG93LmluaXRpYWxpemUoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pKSk7XG59O1xuY29uc3QgY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycyA9ICgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gICAgLy8gU3RyaXBlIFBSXG4gICAgc3RyaXBlUFI6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiU3RyaXBlIFBSXCIsIE9qc0Zsb3dzLnN0cmlwZVBSLmluaXQpLFxuICAgIC8vIFN0cmlwZSBMaW5rXG4gICAgc3RyaXBlTGluazogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgTGlua1wiLCBPanNGbG93cy5zdHJpcGVMaW5rLmluaXQpLFxuICAgIC8vIFN0cmlwZSBLbGFybmFcbiAgICBzdHJpcGVLbGFybmE6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiU3RyaXBlIEtsYXJuYVwiLCBPanNGbG93cy5zdHJpcGVLbGFybmEuaW5pdCksXG4gICAgLy8gU3RyaXBlIEFmZmlybVxuICAgIHN0cmlwZUFmZmlybTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgQWZmaXJtXCIsIE9qc0Zsb3dzLnN0cmlwZUFmZmlybS5pbml0KSxcbiAgICAvLyBTdHJpcGUgQWZ0ZXJwYXlcbiAgICBzdHJpcGVBZnRlcnBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgQWZ0ZXJwYXlcIiwgT2pzRmxvd3Muc3RyaXBlQWZ0ZXJwYXkuaW5pdCksXG4gICAgLy8gQWlyd2FsbGV4IEdvb2dsZVBheVxuICAgIGFpcndhbGxleEdvb2dsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBaXJ3YWxsZXggR29vZ2xlUGF5XCIsIE9qc0Zsb3dzLmFpcndhbGxleEdvb2dsZVBheS5pbml0KSxcbiAgICAvLyBBaXJ3YWxsZXggQXBwbGVQYXlcbiAgICBhaXJ3YWxsZXhBcHBsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgT2pzRmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkuaW5pdCksXG4gICAgLy8gTG9vcFxuICAgIGxvb3A6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiTG9vcFwiLCBPanNGbG93cy5sb29wQ3J5cHRvLmluaXQpLFxuICAgIC8vIFBheVBhbFxuICAgIHBheXBhbDogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJQYXlQYWxcIiwgT2pzRmxvd3MucGF5cGFsLmluaXQpLFxuICAgIC8vIEtsYXJuYVxuICAgIGFpcndhbGxleEtsYXJuYTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJLbGFybmFcIiwgT2pzRmxvd3MuYWlyd2FsbGV4S2xhcm5hLmluaXQpLFxuICAgIC8vIFBvY2t5dCBQYXlQYWxcbiAgICBwb2NreXRQYXlwYWw6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiUG9ja3l0IFBheVBhbFwiLCBPanNGbG93cy5wb2NreXRQYXlwYWwuaW5pdCksXG4gICAgLy8gQXV0aG5ldCBHb29nbGVQYXlcbiAgICBhdXRob3JpemVOZXRHb29nbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQXV0aG5ldCBHb29nbGVQYXlcIiwgT2pzRmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LmluaXQpLFxuICAgIC8vIEF1dGhuZXQgQXBwbGVQYXlcbiAgICBhdXRob3JpemVOZXRBcHBsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBdXRobmV0IEFwcGxlUGF5XCIsIE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LmluaXQpLFxuICAgIC8vIEFkeWVuIEdvb2dsZVBheVxuICAgIGFkeWVuR29vZ2xlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFkeWVuIEdvb2dsZVBheVwiLCBPanNGbG93cy5hZHllbkdvb2dsZVBheS5pbml0KSxcbiAgICAvLyBBZHllbiBBcHBsZVBheVxuICAgIGFkeWVuQXBwbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQWR5ZW4gQXBwbGVQYXlcIiwgT2pzRmxvd3MuYWR5ZW5BcHBsZVBheS5pbml0KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIH07XG59O1xuXG5jb25zdCB7IGVycl9fOiBlcnJfXyQyIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHouZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHoub2JqZWN0KHtcbiAgb25Gb2N1czogT3B0aW9uYWxGbixcbiAgb25CbHVyOiBPcHRpb25hbEZuLFxuICBvbkNoYW5nZTogT3B0aW9uYWxGbixcbiAgb25Mb2FkOiBPcHRpb25hbEZuLFxuICBvbkxvYWRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25WYWxpZGF0aW9uRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0RXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBPcHRpb25hbEZuXG59KTtcbmNsYXNzIEZvcm1DYWxsYmFja3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIEFMTCBmb3JtIGNhbGxiYWNrcy4gTm90ZSB0aGF0IGFsbCBvbGQgY2FsbGJhY2tzIGFyZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHJhd0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICAgICAgT2JqZWN0LmVudHJpZXMocmF3Q2FsbGJhY2tzKS5mb3JFYWNoKChba2V5LCByYXdDYWxsYmFja10pID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZUNhbGxiYWNrID0gbWFrZUNhbGxiYWNrU2FmZShrZXksIHJhd0NhbGxiYWNrID8/IEZvcm1DYWxsYmFja3MuTk9PUCwgZXJyX18kMik7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV0ZWN0RnJhbWV3b3JrKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvd1NhZmUoKTtcbiAgICBjb25zdCBuZXh0V2luZG93ID0gd2luZG93O1xuICAgIGlmIChuZXh0V2luZG93Py5uZXh0IHx8IG5leHRXaW5kb3c/Ll9fTkVYVF9EQVRBX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX25leHRcIikpIHtcbiAgICAgIHJldHVybiBcIm5leHRqc1wiIC8qIE5leHRKUyAqLztcbiAgICB9XG4gICAgY29uc3QgbnV4dFdpbmRvdyA9IHdpbmRvdztcbiAgICBpZiAobnV4dFdpbmRvdz8uX19OVVhUX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX251eHRcIikpIHtcbiAgICAgIHJldHVybiBcIm51eHRcIiAvKiBOdXh0ICovO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXMoZG9jdW1lbnQpLmZpbmQoKGtleSkgPT4ga2V5LmluY2x1ZGVzKFwicmVhY3RcIikpIHx8ICEhQXJyYXkuZnJvbShkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoXCJib2R5ID4gKlwiKSkuZmluZChcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBfcmVhY3RSb290Q29udGFpbmVyIGRvZXNuJ3QgZXhpc3RcbiAgICAgIChub2RlKSA9PiBub2RlLl9yZWFjdFJvb3RDb250YWluZXJcbiAgICApKSB7XG4gICAgICByZXR1cm4gXCJyZWFjdFwiIC8qIFJlYWN0ICovO1xuICAgIH1cbiAgICBjb25zdCB2dWVXaW5kb3cgPSB3aW5kb3c7XG4gICAgaWYgKHZ1ZVdpbmRvdz8uVnVlIHx8IHZ1ZVdpbmRvdz8uX19WVUVfXykge1xuICAgICAgcmV0dXJuIFwidnVlXCIgLyogVnVlICovO1xuICAgIH1cbiAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIltuZy12ZXJzaW9uXVwiKSkge1xuICAgICAgcmV0dXJuIFwiYW5ndWxhclwiIC8qIEFuZ3VsYXIgKi87XG4gICAgfVxuICAgIHJldHVybiBcInZhbmlsbGFcIiAvKiBWYW5pbGxhICovO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBcInVua25vd25cIiAvKiBVbmtub3duICovO1xuICB9XG59XG5mdW5jdGlvbiBnZXRGcmFtZXdvcmtWZXJzaW9uKGZyYW1ld29yaykge1xuICB0cnkge1xuICAgIHN3aXRjaCAoZnJhbWV3b3JrKSB7XG4gICAgICBjYXNlIFwicmVhY3RcIiAvKiBSZWFjdCAqLzoge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJuZXh0anNcIiAvKiBOZXh0SlMgKi86IHtcbiAgICAgICAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgICAgICBjb25zdCBuZXh0V2luZG93ID0gd2luZG93O1xuICAgICAgICByZXR1cm4gbmV4dFdpbmRvdz8ubmV4dD8udmVyc2lvbiB8fCBuZXh0V2luZG93Py5fX05FWFRfREFUQV9fPy5idWlsZElkIHx8IG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlIFwibnV4dFwiIC8qIE51eHQgKi86IHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlIFwidnVlXCIgLyogVnVlICovOiB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcImFuZ3VsYXJcIiAvKiBBbmd1bGFyICovOiB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50MiA9IGdldFdpbmRvd1NhZmUoKT8uZG9jdW1lbnQ7XG4gICAgICAgIGNvbnN0IG5nVmVyc2lvbkVsID0gZG9jdW1lbnQyPy5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpO1xuICAgICAgICByZXR1cm4gbmdWZXJzaW9uRWwgPyBuZ1ZlcnNpb25FbC5nZXRBdHRyaWJ1dGUoXCJuZy12ZXJzaW9uXCIpIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0RnJhbWV3b3JrSW5mbygpIHtcbiAgY29uc3QgZnJhbWV3b3JrID0gZGV0ZWN0RnJhbWV3b3JrKCk7XG4gIGNvbnN0IHZlcnNpb24gPSBnZXRGcmFtZXdvcmtWZXJzaW9uKGZyYW1ld29yayk7XG4gIHJldHVybiB7IGZyYW1ld29yaywgdmVyc2lvbiB9O1xufVxuXG5jb25zdCBnZXRGcmF1ZE1ldGFkYXRhID0gKCkgPT4ge1xuICBjb25zdCBzY3JlZW5faGVpZ2h0ID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLmhlaWdodCA6IG51bGw7XG4gIGNvbnN0IHNjcmVlbl93aWR0aCA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi53aWR0aCA6IG51bGw7XG4gIGNvbnN0IGNvbG9yX2RlcHRoID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLmNvbG9yRGVwdGggOiBudWxsO1xuICBjb25zdCBqYXZhX2VuYWJsZWQgPSB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciA/IHdpbmRvdy5uYXZpZ2F0b3IuamF2YUVuYWJsZWQoKSA6IGZhbHNlO1xuICBjb25zdCB1c2VyX2FnZW50ID0gd2luZG93ICYmIHdpbmRvdy5uYXZpZ2F0b3IgPyB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCA6IG51bGw7XG4gIGNvbnN0IGFjY2VwdF9oZWFkZXIgPSBcInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjhcIjtcbiAgbGV0IGxhbmd1YWdlID0gbnVsbDtcbiAgaWYgKHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yKSB7XG4gICAgbGFuZ3VhZ2UgPSB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlID8gd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZSA6IHdpbmRvdy5uYXZpZ2F0b3IuYnJvd3Nlckxhbmd1YWdlO1xuICB9XG4gIGNvbnN0IHRpbWVfem9uZV9vZmZzZXQgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHJldHVybiB7XG4gICAgY29sb3JfZGVwdGgsXG4gICAgamF2YV9lbmFibGVkLFxuICAgIGphdmFzY3JpcHRfZW5hYmxlZDogdHJ1ZSxcbiAgICBsYW5ndWFnZSxcbiAgICBzY3JlZW5faGVpZ2h0LFxuICAgIHNjcmVlbl93aWR0aCxcbiAgICB0aW1lX3pvbmVfb2Zmc2V0LFxuICAgIHVzZXJfYWdlbnQsXG4gICAgYWNjZXB0X2hlYWRlclxuICB9O1xufTtcblxudmFyIFN1Ym1pdE1ldGhvZHMgPSAvKiBAX19QVVJFX18gKi8gKChTdWJtaXRNZXRob2RzMikgPT4ge1xuICBTdWJtaXRNZXRob2RzMltcImNhcmRcIl0gPSBcImNhcmRcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJwb2NreXRQYXlwYWxcIl0gPSBcInBvY2t5dC1wYXlwYWxcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhcHBsZVBheVwiXSA9IFwiYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiZ29vZ2xlUGF5XCJdID0gXCJnb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wibG9vcENyeXB0b1wiXSA9IFwibG9vcC1jcnlwdG9cIjtcbiAgU3VibWl0TWV0aG9kczJbXCJwYXlwYWxcIl0gPSBcInBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImtsYXJuYVwiXSA9IFwia2xhcm5hXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWZmaXJtXCJdID0gXCJhZmZpcm1cIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhZnRlcnBheVwiXSA9IFwiYWZ0ZXJwYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJzdHJpcGVMaW5rXCJdID0gXCJzdHJpcGUtbGlua1wiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEdvb2dsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBcHBsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEdvb2dsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRBcHBsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFkeWVuR29vZ2xlUGF5XCJdID0gXCJhZHllbi1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5BcHBsZVBheVwiXSA9IFwiYWR5ZW4tYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QUNIXCJdID0gXCJhaXJ3YWxsZXgtYWNoXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4RUZUXCJdID0gXCJhaXJ3YWxsZXgtZWZ0XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QkFDU1wiXSA9IFwiYWlyd2FsbGV4LWJhY3NcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhTRVBBXCJdID0gXCJhaXJ3YWxsZXgtc2VwYVwiO1xuICByZXR1cm4gU3VibWl0TWV0aG9kczI7XG59KShTdWJtaXRNZXRob2RzIHx8IHt9KTtcbnoubmF0aXZlRW51bShTdWJtaXRNZXRob2RzKTtcbnZhciBQYXltZW50UHJvdmlkZXJUeXBlID0gLyogQF9fUFVSRV9fICovICgoUGF5bWVudFByb3ZpZGVyVHlwZTIpID0+IHtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJBQ0hcIl0gPSBcImFjaFwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkVGVFwiXSA9IFwiZWZ0XCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiQkFDU1wiXSA9IFwiYmFjc1wiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIlNFUEFcIl0gPSBcInNlcGFcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJBUFBMRV9QQVlcIl0gPSBcImFwcGxlX3BheVwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkNSRURJVF9DQVJEXCJdID0gXCJjcmVkaXRfY2FyZFwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkdPT0dMRV9QQVlcIl0gPSBcImdvb2dsZV9wYXlcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJTVFJJUEVfTElOS1wiXSA9IFwic3RyaXBlX2xpbmtcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJDUllQVE9cIl0gPSBcImNyeXB0b1wiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIlBBWVBBTFwiXSA9IFwicGF5cGFsXCI7XG4gIHJldHVybiBQYXltZW50UHJvdmlkZXJUeXBlMjtcbn0pKFBheW1lbnRQcm92aWRlclR5cGUgfHwge30pO1xuXG5jb25zdCBnZXRBcHBsZVBheVByb2Nlc3NvcnMgPSAoaW5pdEZsb3dzKSA9PiB7XG4gIGNvbnN0IGFwcGxlUGF5SW5pdEZsb3dzID0gW2luaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheSwgaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LCBpbml0Rmxvd3MuYWR5ZW5BcHBsZVBheV07XG4gIGNvbnN0IGFwcGxlUGF5SW5pdFJlc3VsdHMgPSBbXTtcbiAgYXBwbGVQYXlJbml0Rmxvd3MuZm9yRWFjaCgoZmxvdykgPT4ge1xuICAgIGNvbnN0IGZsb3dWYWx1ZSA9IGZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIGlmIChmbG93VmFsdWU/LmlzQXZhaWxhYmxlKSB7XG4gICAgICBhcHBsZVBheUluaXRSZXN1bHRzLnB1c2goZmxvd1ZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzdHJpcGVQUkZsb3dSZXN1bHQgPSBpbml0Rmxvd3Muc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoc3RyaXBlUFJGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGNvbnN0IGlzQXBwbGVQYXlBdmFpbGFibGUgPSBzdHJpcGVQUkZsb3dSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5O1xuICAgIGlmIChpc0FwcGxlUGF5QXZhaWxhYmxlKSB7XG4gICAgICBhcHBsZVBheUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZVBSRmxvd1Jlc3VsdC5zdGFydEZsb3coXCJhcHBsZV9wYXlcIiwge1xuICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogYXBwbGVQYXlJbml0UmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IGFwcGxlUGF5SW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0QXBwbGVQYXlGbG93KGFwcGxlUGF5SW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGdldEdvb2dsZVBheVByb2Nlc3NvcnMgPSAoaW5pdEZsb3dzKSA9PiB7XG4gIGNvbnN0IGdvb2dsZVBheUluaXRGbG93cyA9IFtpbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LCBpbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LCBpbml0Rmxvd3MuYWR5ZW5Hb29nbGVQYXldO1xuICBjb25zdCBnb29nbGVQYXlJbml0UmVzdWx0cyA9IFtdO1xuICBnb29nbGVQYXlJbml0Rmxvd3MuZm9yRWFjaCgoZmxvdykgPT4ge1xuICAgIGNvbnN0IGZsb3dWYWx1ZSA9IGZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIGlmIChmbG93VmFsdWU/LmlzQXZhaWxhYmxlKSB7XG4gICAgICBnb29nbGVQYXlJbml0UmVzdWx0cy5wdXNoKGZsb3dWYWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3RyaXBlUFJGbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZVBSRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBjb25zdCBpc0dvb2dsZVBheUF2YWlsYWJsZSA9IHN0cmlwZVBSRmxvd1Jlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5O1xuICAgIGlmIChpc0dvb2dsZVBheUF2YWlsYWJsZSkge1xuICAgICAgZ29vZ2xlUGF5SW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlUFJGbG93UmVzdWx0LnN0YXJ0RmxvdyhcImdvb2dsZV9wYXlcIiwge1xuICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogZ29vZ2xlUGF5SW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBnb29nbGVQYXlJbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRHb29nbGVQYXlGbG93KGdvb2dsZVBheUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEFwcGxlUGF5RmxvdyA9IChpbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKSA9PiB7XG4gIGlmIChjdXN0b21QYXJhbXM/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IGZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IgPT09IGN1c3RvbVBhcmFtcy5wcm9jZXNzb3IpO1xuICAgIGlmIChmbG93Py5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIGZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEFwcGxlIFBheSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgQXBwbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5jb25zdCBzdGFydEdvb2dsZVBheUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBHb29nbGUgUGF5IHByb2Nlc3NvciAke2N1c3RvbVBhcmFtcy5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCBhdmFpbGFibGVGbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQuaXNBdmFpbGFibGUpO1xuICBpZiAoYXZhaWxhYmxlRmxvdykge1xuICAgIHJldHVybiBhdmFpbGFibGVGbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBHb29nbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5jb25zdCBnZXRLbGFybmFQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBrbGFybmFJbml0UmVzdWx0cyA9IFtdO1xuICBjb25zdCBhaXJ3YWxsZXhLbGFybmFGbG93UmVzdWx0ID0gaW5pdEZsb3dzLmFpcndhbGxleEtsYXJuYS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChhaXJ3YWxsZXhLbGFybmFGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGtsYXJuYUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBhaXJ3YWxsZXhLbGFybmFGbG93UmVzdWx0LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpXG4gICAgfSk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlS2xhcm5hRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVLbGFybmEucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoc3RyaXBlS2xhcm5hRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBrbGFybmFJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlS2xhcm5hRmxvd1Jlc3VsdC5zdGFydEZsb3coY3VzdG9tUGFyYW1zKVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczoga2xhcm5hSW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBrbGFybmFJbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRLbGFybmFGbG93KGtsYXJuYUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEtsYXJuYUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBLbGFybmEgcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEtsYXJuYSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY29uc3QgZ2V0QWZmaXJtUHJvY2Vzc29ycyA9IChpbml0Rmxvd3MpID0+IHtcbiAgY29uc3QgYWZmaXJtSW5pdFJlc3VsdHMgPSBbXTtcbiAgY29uc3Qgc3RyaXBlQWZmaXJtRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVBZmZpcm0ucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoc3RyaXBlQWZmaXJtRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBhZmZpcm1Jbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlQWZmaXJtRmxvd1Jlc3VsdC5zdGFydEZsb3coY3VzdG9tUGFyYW1zKVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogYWZmaXJtSW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBhZmZpcm1Jbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRBZmZpcm1GbG93KGFmZmlybUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEFmZmlybUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBZmZpcm0gcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFmZmlybSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY29uc3QgZ2V0QWZ0ZXJwYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBhZnRlcnBheUluaXRSZXN1bHRzID0gW107XG4gIGNvbnN0IHN0cmlwZUFmdGVycGF5Rmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVBZnRlcnBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVBZnRlcnBheUZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAgYWZ0ZXJwYXlJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlQWZ0ZXJwYXlGbG93UmVzdWx0LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzb3JzOiBhZnRlcnBheUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogYWZ0ZXJwYXlJbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRBZnRlcnBheUZsb3coYWZ0ZXJwYXlJbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBZnRlcnBheUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBZnRlcnBheSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgQWZ0ZXJwYXkgcHJvY2Vzc29yIGZvdW5kXCIpO1xufTtcblxuY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplZFN0eWxlcztcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDEsIGVycl9fOiBlcnJfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInRyYWNlclwiKTtcbmNvbnN0IGluaXRUcmFjZXJTYWZlID0gKHZlcnNpb24sIGJhc2VVcmwpID0+IHtcbiAgdHJ5IHtcbiAgICBpbml0VHJhY2VyVW5zYWZlKHZlcnNpb24sIGJhc2VVcmwpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGVycl9fJDEoYEVycm9yIGluaXRpYWxpemluZyB0cmFjZXI6ICR7ZXJyb3J9YCk7XG4gIH1cbn07XG5sZXQgZ2xvYmFsVHJhY2VyO1xuY29uc3QgaW5pdFRyYWNlclVuc2FmZSA9IGFzeW5jICh2ZXJzaW9uLCBiYXNlVXJsKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICBjb25zdCBzZGtUcmFjZVdlYiA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMGJ9fi5qcycpO1xuICBjb25zdCB7IENvbnNvbGVTcGFuRXhwb3J0ZXIsIFNpbXBsZVNwYW5Qcm9jZXNzb3IsIFdlYlRyYWNlclByb3ZpZGVyIH0gPSBzZGtUcmFjZVdlYjtcbiAgY29uc3QgaW5zdHJ1bWVudGF0aW9uRmV0Y2ggPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDBqfX4uanMnKTtcbiAgY29uc3QgeyBGZXRjaEluc3RydW1lbnRhdGlvbiB9ID0gaW5zdHJ1bWVudGF0aW9uRmV0Y2g7XG4gIGNvbnN0IGNvbnRleHRab25lID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwa31+LmpzJyk7XG4gIGNvbnN0IHsgWm9uZUNvbnRleHRNYW5hZ2VyIH0gPSBjb250ZXh0Wm9uZTtcbiAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwZX1+LmpzJyk7XG4gIGNvbnN0IHsgcmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zIH0gPSBpbnN0cnVtZW50YXRpb247XG4gIGNvbnN0IHJlc291cmNlcyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMDF9fi5qcycpO1xuICBjb25zdCB7IFJlc291cmNlIH0gPSByZXNvdXJjZXM7XG4gIGNvbnN0IGRldGVjdFJlc291cmNlcyA9IGF3YWl0IGltcG9ydCgnLi9kZXRlY3QtcmVzb3VyY2VzLSF+ezAwbn1+LmpzJykudGhlbihuID0+IG4uZCk7XG4gIGNvbnN0IHsgZGV0ZWN0UmVzb3VyY2VzU3luYyB9ID0gZGV0ZWN0UmVzb3VyY2VzO1xuICBjb25zdCBleHBvcnRlclRyYWNlT3RscCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMG99fi5qcycpO1xuICBjb25zdCB7IE9UTFBUcmFjZUV4cG9ydGVyIH0gPSBleHBvcnRlclRyYWNlT3RscDtcbiAgY29uc3QgcHJvcGFnYXRvckIzID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwbH1+LmpzJyk7XG4gIGNvbnN0IHsgQjNQcm9wYWdhdG9yLCBCM0luamVjdEVuY29kaW5nIH0gPSBwcm9wYWdhdG9yQjM7XG4gIGNvbnN0IHNka1RyYWNlQmFzZSA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMDN9fi5qcycpO1xuICBjb25zdCB7IEJhdGNoU3BhblByb2Nlc3NvciB9ID0gc2RrVHJhY2VCYXNlO1xuICBsb2dfXyQxKGBJbml0aWFsaXppbmcgdHJhY2VyIHdpdGggdmVyc2lvbiAke3ZlcnNpb259IGFuZCBiYXNlVXJsICR7YmFzZVVybH1gKTtcbiAgY29uc3QgY29sbGVjdG9yVXJsID0gZ2V0Q29sbGVjdG9yVXJsKGJhc2VVcmwpO1xuICBsb2dfXyQxKGBVc2luZyBjb2xsZWN0b3IgVVJMICR7Y29sbGVjdG9yVXJsfWApO1xuICBjb25zdCBleHBvcnRlciA9IG5ldyBPVExQVHJhY2VFeHBvcnRlcih7IHVybDogY29sbGVjdG9yVXJsIH0pO1xuICBjb25zdCBiYXNlQXR0cnMgPSB7XG4gICAgXCJzZXJ2aWNlLnZlcnNpb25cIjogdmVyc2lvbixcbiAgICBcInNlcnZpY2UubmFtZVwiOiBcIm9qc1wiXG4gIH07XG4gIGNvbnN0IHByb3ZpZGVyID0gbmV3IFdlYlRyYWNlclByb3ZpZGVyKHtcbiAgICByZXNvdXJjZTogbmV3IFJlc291cmNlKGJhc2VBdHRycykubWVyZ2UoZGV0ZWN0UmVzb3VyY2VzU3luYygpKSxcbiAgICBzcGFuUHJvY2Vzc29yczogW1xuICAgICAgbmV3IFNpbXBsZVNwYW5Qcm9jZXNzb3IobmV3IENvbnNvbGVTcGFuRXhwb3J0ZXIoKSksXG4gICAgICBuZXcgQmF0Y2hTcGFuUHJvY2Vzc29yKGV4cG9ydGVyLCB7XG4gICAgICAgIHNjaGVkdWxlZERlbGF5TWlsbGlzOiA1MDBcbiAgICAgIH0pXG4gICAgXVxuICB9KTtcbiAgcHJvdmlkZXIucmVnaXN0ZXIoe1xuICAgIGNvbnRleHRNYW5hZ2VyOiBuZXcgWm9uZUNvbnRleHRNYW5hZ2VyKCksXG4gICAgcHJvcGFnYXRvcjogbmV3IEIzUHJvcGFnYXRvcih7IGluamVjdEVuY29kaW5nOiBCM0luamVjdEVuY29kaW5nLk1VTFRJX0hFQURFUiB9KVxuICB9KTtcbiAgcmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zKHtcbiAgICBpbnN0cnVtZW50YXRpb25zOiBbXG4gICAgICBuZXcgRmV0Y2hJbnN0cnVtZW50YXRpb24oe1xuICAgICAgICBwcm9wYWdhdGVUcmFjZUhlYWRlckNvcnNVcmxzOiBbLy4qL10sXG4gICAgICAgIC8vIFByb3BhZ2F0ZSB0byBhbGwgVVJMc1xuICAgICAgICAvLyBFeGNsdWRlIEFkeWVuIFVSTHMgLSB0aGV5IGRvIG5vdCBhbGxvdyBPUFRJT05TIHJlcXVlc3RzXG4gICAgICAgIC8vIEFsc28gZXhjbHVkZSBsb29wY3J5cHRvLnh5elxuICAgICAgICBpZ25vcmVVcmxzOiBbL15odHRwczpcXC9cXC8oLipcXC4pP2FkeWVuXFwuY29tLywgL15odHRwczpcXC9cXC8oLipcXC4pP2xvb3BjcnlwdG9cXC54eXovXVxuICAgICAgfSlcbiAgICBdXG4gIH0pO1xuICBnbG9iYWxUcmFjZXIgPSB0cmFjZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpO1xuICBsb2dfXyQxKGBUcmFjZXIgaW5pdGlhbGl6ZWRgKTtcbiAgcmV0dXJuIGdsb2JhbFRyYWNlcjtcbn07XG5jb25zdCBnZXRDb2xsZWN0b3JVcmwgPSAoZnJvbUJhc2VVcmwpID0+IHtcbiAgY29uc3QgYmFzZUhvc3RuYW1lID0gbmV3IFVSTChmcm9tQmFzZVVybCkuaG9zdG5hbWU7XG4gIGlmIChiYXNlSG9zdG5hbWUgPT09IFwiY2RlLm9wZW5wYXlzdGFnaW5nLmNvbVwiKSB7XG4gICAgcmV0dXJuIFwiaHR0cHM6Ly9vdGVsLm9wZW5wYXlzYW5kYm94LmNvbS92MS90cmFjZXNcIjtcbiAgfSBlbHNlIGlmIChiYXNlSG9zdG5hbWUgPT09IFwiY2RlLmdldG9wZW5wYXkuY29tXCIpIHtcbiAgICByZXR1cm4gXCJodHRwczovL290ZWwuZ2V0b3BlbnBheS5jb20vdjEvdHJhY2VzXCI7XG4gIH1cbiAgcmV0dXJuIFwiaHR0cDovL2xvY2FsaG9zdDo0MzE5L3YxL3RyYWNlc1wiO1xufTtcblxuY2xhc3MgT3BlblBheUZvcm1FdmVudEhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihmb3JtSWQsIGJhc2VVcmwsIGZvcm1DYWxsYmFja3MsIGludGVybmFsQ2FsbGJhY2tzKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIWV2ZW50LnNvdXJjZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbT0pTXSBObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChnZXRDbGVhbk9yaWdpbihldmVudC5vcmlnaW4pICE9PSBnZXRDbGVhbk9yaWdpbih0aGlzLmJhc2VVcmwpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBldmVudC5kYXRhW1wicGVucGFsXCJdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBldmVudC5kYXRhW1wic291cmNlXCJdICYmIGV2ZW50LmRhdGFbXCJzb3VyY2VcIl0gPT09IFwicmVhY3QtZGV2dG9vbHMtYnJpZGdlXCIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IGV2ZW50RGF0YSA9IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICBldmVudERhdGEgPSBwYXJzZUV2ZW50UGF5bG9hZChKU09OLnBhcnNlKGV2ZW50LmRhdGEpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNWYWxpZCA9IHRoaXMudmFsaWRhdGVFdmVudChldmVudERhdGEpO1xuICAgICAgaWYgKCFpc1ZhbGlkKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZCwgcGF5bG9hZCB9ID0gZXZlbnREYXRhO1xuICAgICAgY29uc3QgZXZlbnRUeXBlID0gcGF5bG9hZC50eXBlO1xuICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgY2FzZSBcIkxBWU9VVFwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Muc2V0Rm9ybUhlaWdodChwYXlsb2FkLmhlaWdodCA/IGAke3BheWxvYWQuaGVpZ2h0fXB4YCA6IFwiMTAwJVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkZPQ1VTXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkZvY3VzKGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlLCB7XG4gICAgICAgICAgICBvYmZ1c2NhdGVkVmFsdWU6IHBheWxvYWQub2JmdXNjYXRlZFZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSwgcGF5bG9hZC5lcnJvcnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BREVEXCI6XG4gICAgICAgICAgdGhpcy5ldmVudFRhcmdldHNbZWxlbWVudElkXSA9IGV2ZW50LnNvdXJjZTtcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZGVkKHBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkRXJyb3IocGF5bG9hZC5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKHBheWxvYWQuZWxlbWVudFR5cGUsIHBheWxvYWQuZXJyb3JzLCBlbGVtZW50SWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgZXZlbnRUeXBlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMudmFsaWRhdGVFdmVudCA9IChldmVudERhdGEpID0+IHtcbiAgICAgIGlmIChldmVudERhdGEuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhZXZlbnREYXRhLmVsZW1lbnRJZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIltPSlNdIGZvcm1JZFwiLCB0aGlzLmZvcm1JZCwgZXZlbnREYXRhLmZvcm1JZCk7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5ub25jZXMuaGFzKGV2ZW50RGF0YS5ub25jZSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5ub25jZXMuYWRkKGV2ZW50RGF0YS5ub25jZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIHRoaXMuZXZlbnRUYXJnZXRzID0ge307XG4gICAgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICAgIHRoaXMuZm9ybUlkID0gZm9ybUlkO1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmw7XG4gICAgdGhpcy5mb3JtQ2FsbGJhY2tzID0gZm9ybUNhbGxiYWNrcztcbiAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzID0gaW50ZXJuYWxDYWxsYmFja3M7XG4gIH1cbn1cbmNvbnN0IGdldENsZWFuT3JpZ2luID0gKHVybCkgPT4ge1xuICByZXR1cm4gbmV3IFVSTCh1cmwpLm9yaWdpbjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3Rpb24oaWZyYW1lLCBjaGlsZE9yaWdpbikge1xuICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZSxcbiAgICBkZWJ1ZzogZmFsc2UsXG4gICAgY2hpbGRPcmlnaW5cbiAgfSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25PYmogPSBhd2FpdCBjb25uZWN0aW9uLnByb21pc2U7XG4gIGNvbnN0IGlzVmFsaWRPYmplY3QgPSBhd2FpdCBjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0KGNvbm5lY3Rpb25PYmopO1xuICBpZiAoIWlzUmVzdWx0VmFsaWQoY29ubmVjdGlvbk9iaiwgaXNWYWxpZE9iamVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdGApO1xuICB9XG4gIHJldHVybiBjb25uZWN0aW9uT2JqO1xufVxuY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKGlkLCBjb25uZWN0aW9uKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQoaWQsIGNvbm5lY3Rpb24pO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgfVxuICAgIHJldHVybiBjb25uZWN0aW9uO1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5cbmNvbnN0IHNldHVwUGF5bWVudFJlcXVlc3RIYW5kbGVycyA9IChpbml0UHJGbG93cywgY29udGV4dCwgY2FsbGJhY2tzKSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlUFIgfSA9IGluaXRQckZsb3dzO1xuICBzdHJpcGVQUi5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICBpZiAocmVzdWx0LmlzU3VjY2Vzcykge1xuICAgICAgY29uc3QgaW5pdFJlc3VsdCA9IHJlc3VsdC5sb2FkZWRWYWx1ZTtcbiAgICAgIGNvbnN0IGNhbkFwcGxlUGF5ID0gaW5pdFJlc3VsdC5pc0F2YWlsYWJsZSAmJiBpbml0UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheTtcbiAgICAgIGNvbnN0IGNhbkdvb2dsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5O1xuICAgICAgY29uc3QgZmluYWxTdGF0dXMgPSB7XG4gICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGNhbkFwcGxlUGF5LFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHVzZXJQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmIChjYW5BcHBsZVBheSkge1xuICAgICAgICAgICAgICBydW5TdHJpcGVQckZsb3coXCJhcHBsZV9wYXlcIiwgaW5pdFJlc3VsdCwgY29udGV4dCwgY2FsbGJhY2tzLCB1c2VyUGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdvb2dsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5Hb29nbGVQYXksXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodXNlclBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKGNhbkdvb2dsZVBheSkge1xuICAgICAgICAgICAgICBydW5TdHJpcGVQckZsb3coXCJnb29nbGVfcGF5XCIsIGluaXRSZXN1bHQsIGNvbnRleHQsIGNhbGxiYWNrcywgdXNlclBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY2FsbGJhY2tzLmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZChmaW5hbFN0YXR1cyk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBydW5TdHJpcGVQckZsb3cgPSAocHJvdmlkZXIsIGluaXRSZXN1bHQsIGNvbnRleHQsIGZvcm1DYWxsYmFja3MsIHBhcmFtcykgPT4ge1xuICByZXR1cm4gT2pzRmxvd3Muc3RyaXBlUFIucnVuKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHByb3ZpZGVyKSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlciwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgaW5pdFJlc3VsdFxuICB9KTtcbn07XG5cbmNvbnN0IEdFTkVSSUNfQ09OTl9FUlIgPSBgVGhlIHNlY3VyZSBmb3JtIGZhaWxlZCB0byBsb2FkIHByb3Blcmx5LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLCBvciB0cnkgYWdhaW4gbGF0ZXIuYDtcbmNvbnN0IHsgbG9nX18sIGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcIm9wLWZvcm1cIik7XG5jbGFzcyBPcGVuUGF5Rm9ybSB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHRoaXMuaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gICAgdGhpcy5hbnlDZGVDb25uID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgICB0aGlzLmNvbnRleHQgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICAgIHRoaXMuaW5pdEZsb3dzID0gY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycygpO1xuICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKTtcbiAgICAgIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKFwiZm9ybS5pbml0aWFsaXplXCIsIHtcbiAgICAgICAga2luZDogU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZm9ybUlkXCI6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIFwib2pzLnZlcnNpb25cIjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNvbnRleHQud2l0aCh0cmFjZS5zZXRTcGFuKGNvbnRleHQuYWN0aXZlKCksIHNwYW4pLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY2RlQnJpZGdlSWZyYW1lID0gdGhpcy5jcmVhdGVFbGVtZW50KEVsZW1lbnRUeXBlRW51bS5DREVfQlJJREdFKTtcbiAgICAgICAgICBjZGVCcmlkZ2VJZnJhbWUubm9kZS5pZCA9IFwiX19vcF9pbnRlcm5hbF9jZGVfYnJpZGdlXCI7XG4gICAgICAgICAgY2RlQnJpZGdlSWZyYW1lLm5vZGUuYXJpYUhpZGRlbiA9IFwidHJ1ZVwiO1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oY2RlQnJpZGdlSWZyYW1lLm5vZGUuc3R5bGUsIHtcbiAgICAgICAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICAgICAgICBtYXJnaW46IFwiMHB4XCIsXG4gICAgICAgICAgICBwYWRkaW5nOiBcIjBweFwiLFxuICAgICAgICAgICAgd2lkdGg6IFwiMXB4XCIsXG4gICAgICAgICAgICBoZWlnaHQ6IFwiMXB4XCIsXG4gICAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogXCJub25lXCIsXG4gICAgICAgICAgICB1c2VyU2VsZWN0OiBcIm5vbmVcIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNkZUJyaWRnZUlmcmFtZS5tb3VudChcImJvZHlcIik7XG4gICAgICAgICAgbG9nX18oXCJDREUgYnJpZGdlIGVsZW1lbnQgbW91bnRlZFwiKTtcbiAgICAgICAgICBsb2dfXyhcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpO1xuICAgICAgICAgIGxvZ19fKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICAgIGNvbnN0IGNkZUxvYWRlZCA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IEdFTkVSSUNfQ09OTl9FUlJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsb2dfXyhcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKTtcbiAgICAgICAgICBzcGFuPy5hZGRFdmVudChcIndhaXRpbmdfZm9yX2NkZV9jb25uZWN0aW9uXCIpO1xuICAgICAgICAgIGxvZ19fKFwi4pScIFdhaXRpbmcgZm9yIENERSBjb25uZWN0aW9uLi4uXCIpO1xuICAgICAgICAgIGNvbnN0IGNkZUNvbm5TcGFuID0gdHJhY2VyPy5zdGFydFNwYW4oXCJjZGUuY29ubmVjdFwiLCB2b2lkIDAsIGNvbnRleHQuYWN0aXZlKCkpO1xuICAgICAgICAgIGNvbnN0IGFueUNkZUNvbm4gPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgICAgdGltZW91dEVyck1zZzogR0VORVJJQ19DT05OX0VSUlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNkZUNvbm5TcGFuPy5lbmQoKTtcbiAgICAgICAgICBzcGFuPy5hZGRFdmVudChcImNkZV9jb25uZWN0ZWRcIik7XG4gICAgICAgICAgbG9nX18oXCLilJwgQ0RFIGNvbm5lY3Rpb24gcmVjZWl2ZWRcIik7XG4gICAgICAgICAgYXdhaXQgc2V0VXNlckRldmljZVRva2VuKGFueUNkZUNvbm4sIHRoaXMuZGV2aWNlVG9rZW4pO1xuICAgICAgICAgIGxvZ19fKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICAgIGNvbnN0IG9qc0NvbnRleHQgPSBPcGVuUGF5Rm9ybS5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgICBjZGVMb2FkZWQsXG4gICAgICAgICAgICBhbnlDZGVDb25uLFxuICAgICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5zZXQob2pzQ29udGV4dCk7XG4gICAgICAgICAgc2V0dXBQYXltZW50UmVxdWVzdEhhbmRsZXJzKHRoaXMuaW5pdEZsb3dzLCBvanNDb250ZXh0LCB0aGlzLmZvcm1DYWxsYmFja3MpO1xuICAgICAgICAgIGxvZ19fKFwi4pScIFN0YXJ0aW5nIE9KUyBpbml0IGZsb3dzLi4uXCIpO1xuICAgICAgICAgIGF3YWl0IHN0YXJ0QWxsSW5pdEZsb3dzKHRoaXMuaW5pdEZsb3dzLCBvanNDb250ZXh0LCB0aGlzLmZvcm1DYWxsYmFja3MpO1xuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGNkZUxvYWRlZC50b3RhbEFtb3VudEF0b21zLCBjZGVMb2FkZWQuY3VycmVuY3kpO1xuICAgICAgICAgIGxvZ19fKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIik7XG4gICAgICAgICAgc3Bhbj8uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgICAgdHJhY2soXCJmb3JtX2xvYWRlZFwiKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGVycik7XG4gICAgICAgICAgc3Bhbj8uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgIGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZXJyX18oXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIGVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgdHJhY2soXCJmb3JtX2luaXRfZXJyb3JcIiwge1xuICAgICAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzcGFuPy5lbmQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLnNldEZvcm1IZWlnaHQgPSAoaGVpZ2h0KSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIGlmICh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykge1xuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQudHlwZSA9PT0gRWxlbWVudFR5cGVFbnVtLkNERV9CUklER0UpIHJldHVybjtcbiAgICAgICAgICBlbGVtZW50Lm5vZGUuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMub25DZGVMb2FkZWQgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICB0aGlzLmNkZUxvYWRFdmVudC5zZXQocGF5bG9hZCk7XG4gICAgICAgIHRyYWNrKFwiY2RlX2xvYWRlZFwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMub25DZGVMb2FkRXJyb3IgPSAoZXJyTXNnKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LnRocm93KG5ldyBFcnJvcihlcnJNc2cpLCBlcnJNc2cpO1xuICAgICAgICB0cmFjayhcImNkZV9sb2FkX2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogZXJyTXNnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVFbGVtZW50ID0gKGVsZW1lbnRUeXBlLCBvcHRpb25zID0ge30pID0+IHtcbiAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImNyZWF0ZUVsZW1lbnRcIik7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgdHlwZSA9IF9FbGVtZW50VHlwZUVudW1ab2QucGFyc2UoZWxlbWVudFR5cGUpO1xuICAgICAgY29uc3QgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xuICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcob3B0aW9ucyk7XG4gICAgICBmcmFtZS5uYW1lID0gYCR7dHlwZX0tZWxlbWVudGA7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGAvYXBwL3YxLyR7ZnJhbWUubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICB1cmwuc2VhcmNoID0gcXVlcnlTdHJpbmcudG9TdHJpbmcoKTtcbiAgICAgIGZyYW1lLnNyYyA9IHVybC5ocmVmO1xuICAgICAgZnJhbWUuc3R5bGUuYm9yZGVyID0gXCJub25lXCI7XG4gICAgICBmcmFtZS5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgICAgY29uc3QgcmVnaXN0ZXJlZEVsZW1lbnQgPSB0aGlzLnJlZ2lzdGVySWZyYW1lKHR5cGUsIGZyYW1lKTtcbiAgICAgIHJldHVybiByZWdpc3RlcmVkRWxlbWVudDtcbiAgICB9O1xuICAgIHRoaXMucmVnaXN0ZXJJZnJhbWUgPSAodHlwZSwgZnJhbWUpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIG5vZGU6IGZyYW1lLFxuICAgICAgICBtb3VudDogKHNlbGVjdG9yKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik/LmFwcGVuZENoaWxkKGZyYW1lKTtcbiAgICAgICAgICB0cmFjayhcImVsZW1lbnRfbW91bnRlZFwiLCB7XG4gICAgICAgICAgICBlbGVtZW50X3R5cGU6IHR5cGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRoaXMuY29ubmVjdFRvRWxlbWVudCh7IHR5cGU6IGVsZW1lbnQudHlwZSwgbm9kZTogZWxlbWVudC5ub2RlIH0pO1xuICAgICAgaWYgKCF0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IHtcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRdOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEX05VTUJFUl06IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRfRVhQSVJZXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF9DVkNdOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DREVfQlJJREdFXTogdm9pZCAwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1t0eXBlXSA9IGVsZW1lbnQ7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9O1xuICAgIHRoaXMuYnVpbGRRdWVyeVN0cmluZyA9IChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcnJlcik7XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpO1xuICAgICAgaWYgKG9wdGlvbnMuc3R5bGVzKSB7XG4gICAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInN0eWxlc1wiLCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhvcHRpb25zLnN0eWxlcykpO1xuICAgICAgfVxuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gICAgfTtcbiAgICB0aGlzLmNvbm5lY3RUb0VsZW1lbnQgPSAoZWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIGNyZWF0ZVRyYWNraW5nU3BhbihcbiAgICAgICAge1xuICAgICAgICAgIHNwYW5OYW1lOiBcImNvbm5lY3RfdG9fZWxlbWVudFwiLFxuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBjb25uID0gYXdhaXQgY3JlYXRlQ29ubmVjdGlvbihlbGVtZW50Lm5vZGUpO1xuICAgICAgICAgIGNvbm4udHJhY2luZ0NvbnRleHQgPSB7XG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKGVsZW1lbnQudHlwZSwgY29ubik7XG4gICAgICAgICAgaWYgKCF0aGlzLmFueUNkZUNvbm4uY3VycmVudC5pc1N1Y2Nlc3MgJiYgZWxlbWVudC50eXBlID09PSBFbGVtZW50VHlwZUVudW0uQ0RFX0JSSURHRSkge1xuICAgICAgICAgICAgdGhpcy5hbnlDZGVDb25uLnNldChjb25uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICkuY2F0Y2goKGVycikgPT4gZXJyX18oXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIGVycikpO1xuICAgIH07XG4gICAgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5O1xuICAgIH07XG4gICAgdGhpcy5zdWJtaXRDYXJkID0gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKSB7XG4gICAgICAgIGVycl9fKFwiRm9ybSBpcyBhbHJlYWR5IHN1Ym1pdHRpbmcuIFBsZWFzZSB3YWl0IGZvciB0aGUgc3VibWlzc2lvbiB0byBmaW5pc2ggYmVmb3JlIHN1Ym1pdHRpbmcgYWdhaW4uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjcmVhdGVUcmFja2luZ1NwYW4oXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3Bhbk5hbWU6IFwic3VibWl0X2NhcmRcIixcbiAgICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyLFxuICAgICAgICAgICAgcGF5bWVudFJvdXRlSWQ6IHBhcmFtcz8ucGF5bWVudFJvdXRlSWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyYWNrKFwic3VibWl0X2NhcmRcIiwgeyAuLi5wYXJhbXMgfSk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJzdWJtaXRDYXJkXCIpO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dDIgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBpZiAoIWNvbnRleHQyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBPanNGbG93cy5jb21tb25DQy5ydW4oe1xuICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2RlQ29ubmVjdGlvbnM6IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKSxcbiAgICAgICAgICAgICAgICBwYXltZW50Um91dGVJZDogcGFyYW1zPy5wYXltZW50Um91dGVJZFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIGNyZWF0ZVRyYWNraW5nU3BhbihcbiAgICAgICAge1xuICAgICAgICAgIHNwYW5OYW1lOiBcImdldF9hdmFpbGFibGVfcGF5bWVudF9tZXRob2RzXCIsXG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzXCIpO1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQyID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghY29udGV4dDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgZ2V0dGluZyBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgeyBwcm9jZXNzb3JzOiBhcHBsZVBheVByb2Nlc3NvcnMsIGlzQXZhaWxhYmxlOiBpc0FwcGxlUGF5QXZhaWxhYmxlIH0gPSBnZXRBcHBsZVBheVByb2Nlc3NvcnMoXG4gICAgICAgICAgICB0aGlzLmluaXRGbG93c1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeyBwcm9jZXNzb3JzOiBnb29nbGVQYXlQcm9jZXNzb3JzLCBpc0F2YWlsYWJsZTogaXNHb29nbGVQYXlBdmFpbGFibGUgfSA9IGdldEdvb2dsZVBheVByb2Nlc3NvcnMoXG4gICAgICAgICAgICB0aGlzLmluaXRGbG93c1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgcGF5cGFsRmxvd1Jlc3VsdCA9IHRoaXMuaW5pdEZsb3dzLnBheXBhbC5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgY29uc3QgcGF5cGFsQXZhaWxhYmxlID0gcGF5cGFsRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUgPz8gZmFsc2U7XG4gICAgICAgICAgY29uc3QgeyBwcm9jZXNzb3JzOiBrbGFybmFQcm9jZXNzb3JzLCBpc0F2YWlsYWJsZTogaXNLbGFybmFBdmFpbGFibGUgfSA9IGdldEtsYXJuYVByb2Nlc3NvcnModGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgIGNvbnN0IHsgcHJvY2Vzc29yczogYWZmaXJtUHJvY2Vzc29ycywgaXNBdmFpbGFibGU6IGlzQWZmaXJtQXZhaWxhYmxlIH0gPSBnZXRBZmZpcm1Qcm9jZXNzb3JzKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICBjb25zdCB7IHByb2Nlc3NvcnM6IGFmdGVycGF5UHJvY2Vzc29ycywgaXNBdmFpbGFibGU6IGlzQWZ0ZXJwYXlBdmFpbGFibGUgfSA9IGdldEFmdGVycGF5UHJvY2Vzc29ycyhcbiAgICAgICAgICAgIHRoaXMuaW5pdEZsb3dzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBwb2NreXRQYXlwYWxBdmFpbGFibGUgPSBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLnNvbWUoXG4gICAgICAgICAgICAobWV0aG9kKSA9PiBtZXRob2QucHJvY2Vzc29yX25hbWUgPT09IFwicG9ja3l0XCIgJiYgbWV0aG9kLnByb3ZpZGVyID09PSBcInBheXBhbFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBsb29wRmxvd1Jlc3VsdCA9IHRoaXMuaW5pdEZsb3dzLmxvb3AucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGNvbnN0IGxvb3BDcnlwdG9BdmFpbGFibGUgPSBsb29wRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUgPz8gZmFsc2U7XG4gICAgICAgICAgY29uc3Qgc3RyaXBlTGlua0Zsb3dSZXN1bHQgPSB0aGlzLmluaXRGbG93cy5zdHJpcGVMaW5rLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBjb25zdCBzdHJpcGVMaW5rQXZhaWxhYmxlID0gc3RyaXBlTGlua0Zsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlID8/IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IG1ldGhvZHMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMuY2FyZCxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogW10sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLmFwcGxlUGF5LFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBhcHBsZVBheVByb2Nlc3NvcnMsXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBpc0FwcGxlUGF5QXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLmdvb2dsZVBheSxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogZ29vZ2xlUGF5UHJvY2Vzc29ycyxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IGlzR29vZ2xlUGF5QXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLnBheXBhbCxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogcGF5cGFsQXZhaWxhYmxlID8gW1BheW1lbnRQcm9jZXNzb3IuRW51bS5wYXlwYWxdIDogW10sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBwYXlwYWxBdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMua2xhcm5hLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBrbGFybmFQcm9jZXNzb3JzLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogaXNLbGFybmFBdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMuYWZmaXJtLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBhZmZpcm1Qcm9jZXNzb3JzLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogaXNBZmZpcm1BdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMuYWZ0ZXJwYXksXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IGFmdGVycGF5UHJvY2Vzc29ycyxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IGlzQWZ0ZXJwYXlBdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMucG9ja3l0UGF5cGFsLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBwb2NreXRQYXlwYWxBdmFpbGFibGUgPyBbUGF5bWVudFByb2Nlc3Nvci5FbnVtLnBvY2t5dF0gOiBbXSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IHBvY2t5dFBheXBhbEF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5sb29wQ3J5cHRvLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBsb29wQ3J5cHRvQXZhaWxhYmxlID8gW1BheW1lbnRQcm9jZXNzb3IuRW51bS5sb29wXSA6IFtdLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogbG9vcENyeXB0b0F2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5zdHJpcGVMaW5rLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBbUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZV0sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBzdHJpcGVMaW5rQXZhaWxhYmxlLFxuICAgICAgICAgICAgICBjb250cm9sbGVyOiBzdHJpcGVMaW5rRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUgPyBzdHJpcGVMaW5rRmxvd1Jlc3VsdC5jb250cm9sbGVyIDogdm9pZCAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXTtcbiAgICAgICAgICBjb25zdCBpbml0Rmxvd05hbWVNYXAgPSB7XG4gICAgICAgICAgICBwYXlwYWw6IFN1Ym1pdE1ldGhvZHMucGF5cGFsLFxuICAgICAgICAgICAgYWlyd2FsbGV4R29vZ2xlUGF5OiBTdWJtaXRNZXRob2RzLmFpcndhbGxleEdvb2dsZVBheSxcbiAgICAgICAgICAgIGFpcndhbGxleEFwcGxlUGF5OiBTdWJtaXRNZXRob2RzLmFpcndhbGxleEFwcGxlUGF5LFxuICAgICAgICAgICAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBTdWJtaXRNZXRob2RzLmF1dGhvcml6ZW5ldEdvb2dsZVBheSxcbiAgICAgICAgICAgIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBTdWJtaXRNZXRob2RzLmF1dGhvcml6ZW5ldEFwcGxlUGF5LFxuICAgICAgICAgICAgYWR5ZW5Hb29nbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYWR5ZW5Hb29nbGVQYXksXG4gICAgICAgICAgICBhZHllbkFwcGxlUGF5OiBTdWJtaXRNZXRob2RzLmFkeWVuQXBwbGVQYXlcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IG1ldGhvZHNfb2xkID0gT2JqZWN0LmVudHJpZXModGhpcy5pbml0Rmxvd3MpLm1hcCgoW2tleSwgZmxvd10pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZsb3dSZXN1bHQgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBpbml0Rmxvd05hbWVNYXBba2V5XSA/PyBrZXk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBuYW1lOiBtZXRob2ROYW1lLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBbXSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IGZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlID8/IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBbLi4ubWV0aG9kc19vbGQsIC4uLm1ldGhvZHNdO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH07XG4gICAgdGhpcy5nZW5lcmFsU3VibWl0ID0gYXN5bmMgKG1ldGhvZCwgc2V0dGluZ3MpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykge1xuICAgICAgICBlcnJfXyhcIkZvcm0gaXMgYWxyZWFkeSBzdWJtaXR0aW5nLiBQbGVhc2Ugd2FpdCBmb3IgdGhlIHN1Ym1pc3Npb24gdG8gZmluaXNoIGJlZm9yZSBzdWJtaXR0aW5nIGFnYWluLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3JlYXRlVHJhY2tpbmdTcGFuKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNwYW5OYW1lOiBcImdlbmVyYWxfZm9ybV9zdWJtaXRcIixcbiAgICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cmFjayhcImdlbmVyYWxfZm9ybV9zdWJtaXRcIiwgeyBtZXRob2QsIHNldHRpbmdzIH0pO1xuICAgICAgICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZ2VuZXJhbFN1Ym1pdFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQyID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgaWYgKCFjb250ZXh0Mikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmNhcmQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0Q2FyZChzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5wb2NreXRQYXlwYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFBheW1lbnRQcm92aWRlclR5cGUuUEFZUEFMLFxuICAgICAgICAgICAgICAgICAgICBcInBvY2t5dFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzIH0sXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLnBheXBhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MucGF5cGFsLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5QQVlQQUwsXG4gICAgICAgICAgICAgICAgICAgIFwicGF5cGFsXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3MgfSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMua2xhcm5hOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydEZsb3cgfSA9IGdldEtsYXJuYVByb2Nlc3NvcnModGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hZmZpcm06IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdyB9ID0gZ2V0QWZmaXJtUHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFmdGVycGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydEZsb3cgfSA9IGdldEFmdGVycGF5UHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmxvb3BDcnlwdG86IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MubG9vcENyeXB0by5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFwiY3J5cHRvXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibG9vcFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93IH0gPSBnZXRBcHBsZVBheVByb2Nlc3NvcnModGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5nb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdyB9ID0gZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gS2VlcGluZyBleGlzdGluZyBjb21tZW50ZWQgY29kZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBpbiB0aGUgZnV0dXJlIHZlcnNpb25cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFpcndhbGxleEdvb2dsZVBheSA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhaXJ3YWxsZXhHb29nbGVQYXkpIHtcbiAgICAgICAgICAgICAgICAgIGVycl9fKFxuICAgICAgICAgICAgICAgICAgICBgYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFpcndhbGxleEdvb2dsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhBcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFpcndhbGxleEFwcGxlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYWlyd2FsbGV4QXBwbGVQYXkpIHtcbiAgICAgICAgICAgICAgICAgIGVycl9fKFxuICAgICAgICAgICAgICAgICAgICBgYWlyd2FsbGV4LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWlyd2FsbGV4QXBwbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYXV0aG9yaXplbmV0R29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aG9yaXplTmV0R29vZ2xlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWF1dGhvcml6ZU5ldEdvb2dsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhdXRob3JpemUtbmV0LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF1dGhvcml6ZU5ldEdvb2dsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRBcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF1dGhvcml6ZU5ldEFwcGxlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYXV0aG9yaXplTmV0QXBwbGVQYXkpIHtcbiAgICAgICAgICAgICAgICAgIGVycl9fKFxuICAgICAgICAgICAgICAgICAgICBgYXV0aG9yaXplLW5ldC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF1dGhvcml6ZU5ldEFwcGxlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFkeWVuR29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWR5ZW5Hb29nbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hZHllbkdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhZHllbkdvb2dsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhZHllbi1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ2BcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhZHllbkdvb2dsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hZHllbkFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWR5ZW5BcHBsZVBheSA9IHRoaXMuaW5pdEZsb3dzLmFkeWVuQXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYWR5ZW5BcHBsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhZHllbi1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkeWVuQXBwbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4QUNIOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhBQ0gucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLkFDSCxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEVGVDpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MuYWlyd2FsbGV4RUZULnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5FRlQsXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhCQUNTOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhCQUNTLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5CQUNTLFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4U0VQQTpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MuYWlyd2FsbGV4U0VQQS5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFBheW1lbnRQcm92aWRlclR5cGUuU0VQQSxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLnN0cmlwZUxpbms6IHtcbiAgICAgICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgICAgIFwiU3RyaXBlTGluayBjYW5ub3QgYmUgc3VibWl0dGVkIG1hbnVhbGx5LiBQbGVhc2UgbW91bnQgdGhlIGJ1dHRvbiBwcm9wZXJseSBhbmQgaWYgdXNlciBjb21wbGV0ZWQgdGhlIHBheW1lbnQgZmxvdyB2aWEgU3RyaXBlTGluayBidXR0b24sIHRoZSBwYXltZW50IHdpbGwgYmUgc3VibWl0dGVkIGF1dG9tYXRpY2FsbHkuXCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGFzc2VydE5ldmVyKG1ldGhvZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc3VibWl0V2l0aCA9IHRoaXMuZ2VuZXJhbFN1Ym1pdDtcbiAgICB0aGlzLnN1Ym1pdCA9IHRoaXMuc3VibWl0Q2FyZDtcbiAgICB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICBsb2dfXyhcIkRlc3Ryb3lpbmcgT3BlblBheSBmb3JtLi4uXCIpO1xuICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZGVzdHJveVwiKTtcbiAgICAgIHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPz8ge30pKSB7XG4gICAgICAgIGlmICghZWxlbWVudCkgY29udGludWU7XG4gICAgICAgIGVsZW1lbnQubm9kZS5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSk7XG4gICAgICBkZXRhY2hBbmFseXRpY3NFdmVudExpc3RlbmVycygpO1xuICAgICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsO1xuICAgICAgZGVsZXRlIHdpbmRvd1tcIm9qc1wiXTtcbiAgICAgIHRyYWNrKFwiZm9ybV9kZXN0cm95ZWRcIik7XG4gICAgfTtcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrcyA9IChuZXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5zZXRDYWxsYmFja3MobmV3Q2FsbGJhY2tzKTtcbiAgICB9O1xuICAgIE9wZW5QYXlGb3JtLmFzc2lnbkFzU2luZ2xldG9uKHRoaXMpO1xuICAgIHRoaXMub2pzVmVyc2lvbiA9IFwiMC41LjIyXCI7XG4gICAgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwiMC41LjIyLWFscGhhLjBjNjE1ZWVcIjtcbiAgICB0aGlzLmJhc2VVcmwgPSBjb25maWcuYmFzZVVybCA/PyBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCI7XG4gICAgdGhpcy5jb25maWcgPSB7IC4uLmNvbmZpZywgYmFzZVVybDogdGhpcy5iYXNlVXJsIH07XG4gICAgdGhpcy5mb3JtQ2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5mcm9tT2JqZWN0KGNvbmZpZyk7XG4gICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsO1xuICAgIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YDtcbiAgICB0aGlzLnJlZmVycmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICB0aGlzLmZvcm1UYXJnZXQgPSBjb25maWcuZm9ybVRhcmdldCA/PyBcImJvZHlcIjtcbiAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfTtcbiAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IENvbm5lY3Rpb25NYW5hZ2VyKCk7XG4gICAgdGhpcy5kZXZpY2VUb2tlbiA9IGdldERldmljZVRva2VuKCk7XG4gICAgYXR0YWNoQW5hbHl0aWNzRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICBjb25zdCB7IGZyYW1ld29yaywgdmVyc2lvbiB9ID0gZ2V0RnJhbWV3b3JrSW5mbygpO1xuICAgIGdldEN1cnJlbnRFbnYodGhpcy5iYXNlVXJsKS50aGVuKChlbnZpcm9ubWVudCkgPT4ge1xuICAgICAgaWYgKCFtZXRyaWNzUHVibGlzaGVyLmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IG1ldHJpY3NDb250ZXh0ID0ge1xuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgICAgZnJhbWV3b3JrLFxuICAgICAgICAgIGZyYW1ld29ya1ZlcnNpb246IHZlcnNpb24sXG4gICAgICAgICAgb2pzVmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIG9qc1JlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyLFxuICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybFxuICAgICAgICB9O1xuICAgICAgICBtZXRyaWNzUHVibGlzaGVyLnNldChtZXRyaWNzQ29udGV4dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJhY2soXCJmb3JtX2luaXRcIik7XG4gICAgY29uc29sZS5sb2coXCJPSlMgVkVSU0lPTlwiLCB0aGlzLm9qc1ZlcnNpb24pO1xuICAgIGlmIChjb25maWcuYWxsb3dUcmFjaW5nID09PSB0cnVlKSB7XG4gICAgICBpbml0VHJhY2VyU2FmZSh0aGlzLm9qc1ZlcnNpb24sIHRoaXMuYmFzZVVybCk7XG4gICAgfVxuICAgIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IE9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSk7XG4gICAgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLm9qc0Zsb3dzID0gT2pzRmxvd3M7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmFzc2lnbkFzU2luZ2xldG9uID0gKGZvcm0pID0+IHtcbiAgICAgIGlmIChPcGVuUGF5Rm9ybS5nZXRJbnN0YW5jZSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICAgICAgfVxuICAgICAgd2luZG93W1wib2pzXCJdID0gZm9ybTtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5nZXRJbnN0YW5jZSA9ICgpID0+IHtcbiAgICAgIHJldHVybiB3aW5kb3dbXCJvanNcIl0gPz8gbnVsbDtcbiAgICB9O1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKGNvbmZpZywgY2RlTG9hZGVkUGF5bG9hZCwgYW55Q2RlQ29ubmVjdGlvbiwgZm9ybURpdikgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIGJhc2VVcmw6IG5ldyBVUkwoY29uZmlnLmJhc2VVcmwgPz8gRlJBTUVfQkFTRV9VUkwpLm9yaWdpbixcbiAgICAgICAgZm9ybURpdixcbiAgICAgICAgZWxlbWVudHNTZXNzaW9uSWQ6IGNkZUxvYWRlZFBheWxvYWQuc2Vzc2lvbklkLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2RzOiBjZGVMb2FkZWRQYXlsb2FkLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGN1c3RvbUluaXRQYXJhbXM6IGNvbmZpZy5jdXN0b21Jbml0UGFyYW1zID8/IHt9LFxuICAgICAgICBwcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb246IGNvbmZpZy5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb25cbiAgICAgIH07XG4gICAgfTtcbiAgfVxuICBjaGVja1ZhbGlkRm9ybUluc3RhbmNlKGNhbGxlciA9IFwidW5rbm93blwiKSB7XG4gICAgY29uc3QgY3VycmVudEluc3RhbmNlID0gT3BlblBheUZvcm0uZ2V0SW5zdGFuY2UoKTtcbiAgICBjb25zdCBkZWJ1Z0luZm8gPSB7XG4gICAgICB0aGlzRm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgIGN1cnJlbnRGb3JtSWQ6IGN1cnJlbnRJbnN0YW5jZT8uZm9ybUlkIHx8IFwibm8tY3VycmVudC1pbnN0YW5jZVwiLFxuICAgICAgaXNEZXN0cm95ZWQ6IHRoaXMuaXNEZXN0cm95ZWQsXG4gICAgICBjaGVja291dFRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLnN1YnN0cmluZygwLCAxMCkgKyBcIi4uLlwiXG4gICAgfTtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgXG4gICAgICBbV2FybmluZ10gSW52YWxpZCBmb3JtIGluc3RhbmNlIGRldGVjdGVkLlxuICAgICAgSXQgbG9va3MgbGlrZSB5b3UgYXJlIHN0aWxsIHVzaW5nIGFuIG9sZCBpbnN0YW5jZSB0aGF0IGhhcyBiZWVuIGRlc3Ryb3llZC5cbiAgICAgIFBsZWFzZSBtYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgbGF0ZXN0IGluc3RhbmNlIG9mIHRoZSBmb3JtIGFuZCBjbGVhbnVwIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgICAgRGVidWcgSW5mbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgLSBjYWxsZXI6ICR7Y2FsbGVyfVxuICAgICAgLSBjYWxsZXJfZm9ybV9pZDogJHtkZWJ1Z0luZm8udGhpc0Zvcm1JZH1cbiAgICAgIC0gY3VycmVudF9hY3RpdmVfZm9ybV9pZDogJHtkZWJ1Z0luZm8uY3VycmVudEZvcm1JZH1cbiAgICAgIC0gaXNfZGVzdHJveWVkOiAke2RlYnVnSW5mby5pc0Rlc3Ryb3llZH1cbiAgICAgIC0gY2hlY2tvdXRfdG9rZW46ICR7ZGVidWdJbmZvLmNoZWNrb3V0VG9rZW59XG4gICAgYDtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkge1xuICAgICAgZXJyX18oZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRyYWNrKFwib3V0ZGF0ZWRfZm9ybV9pbnN0YW5jZVwiLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghY3VycmVudEluc3RhbmNlIHx8IGN1cnJlbnRJbnN0YW5jZS5mb3JtSWQgIT09IHRoaXMuZm9ybUlkKSB7XG4gICAgICBlcnJfXyhlcnJvck1lc3NhZ2UpO1xuICAgICAgdHJhY2soXCJvdXRkYXRlZF9mb3JtX2luc3RhbmNlXCIsIHsgZXJyb3I6IGVycm9yTWVzc2FnZSB9KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IHsgQ29udGV4dEFQSSBhcyBDLCBEaWFnQVBJIGFzIEQsIEVsZW1lbnRUeXBlRW51bSBhcyBFLCBGaWVsZE5hbWUgYXMgRiwgSU5WQUxJRF9TUEFOX0NPTlRFWFQgYXMgSSwgT3BlblBheUZvcm0gYXMgTywgUHJveHlUcmFjZXIgYXMgUCwgUk9PVF9DT05URVhUIGFzIFIsIFNwYW5LaW5kIGFzIFMsIFRyYWNlRmxhZ3MgYXMgVCwgY29udGV4dCBhcyBhLCBpc1ZhbGlkVHJhY2VJZCBhcyBiLCBjcmVhdGVDb250ZXh0S2V5IGFzIGMsIGlzVmFsaWRTcGFuSWQgYXMgZCwgU3BhblN0YXR1c0NvZGUgYXMgZSwgRGlhZ0xvZ0xldmVsIGFzIGYsIGdldEdsb2JhbCBhcyBnLCBJTlZBTElEX1NQQU5JRCBhcyBoLCBpc1NwYW5Db250ZXh0VmFsaWQgYXMgaSwgSU5WQUxJRF9UUkFDRUlEIGFzIGosIFByb3h5VHJhY2VyUHJvdmlkZXIgYXMgaywgU3VibWl0TWV0aG9kcyBhcyBsLCByZWdpc3Rlckdsb2JhbCBhcyByLCB0cmFjZSBhcyB0LCB1bnJlZ2lzdGVyR2xvYmFsIGFzIHUgfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGtCQUFBQSxVQUFzQjtBQUMvQixTQUFTLEtBQUFDLFNBQVM7QUFDbEIsT0FBT0MsUUFBVztBQUNsQixTQUFTLE1B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LE1BQUlzVSxHQUFZLFlBQVk7QUFDMUIsVUFBTSxJQUFJLE1BQU0sZ0VBQWdFO0FBRWxGLFNBQU8sTUFBU3RVO0FBQ2xCLEdBR0FzVSxHQUFLLGNBQWMsTUFDVixPQUFPLE9BQVUsTUFPMUJBLEdBQUssc0JBQXNCLENBQUNobEMsR0FBUTRuQyxHQUFrQm5nQixHQUFrQnJKLE9BQy9EO0FBQUEsRUFDTCxxQkFBcUJwZSxFQUFPO0FBQUEsRUFDNUIsU0FBUyxJQUFJLElBQUlBLEVBQU8sV0FBVzJiLEVBQWMsRUFBRTtBQUFBLEVBQ25ELFNBQUF5QztBQUFBLEVBQ0EsbUJBQW1Cd3BCLEVBQWlCO0FBQUEsRUFDcEMsd0JBQXdCQSxFQUFpQjtBQUFBLEVBQ3pDLGtCQUFBbmdCO0FBQUEsRUFDQSxrQkFBa0J6bkIsRUFBTyxvQkFBb0IsQ0FBQztBQUFBLEVBQzlDLG1DQUFtQ0EsRUFBTztBQUM1QztBQTNwQk4sSUFBTTZuQyxLQUFON0M7IiwKICAibmFtZXMiOiBbImNvbm5lY3RUb0NoaWxkIiwgInoiLCAiY2hhbGsiLCAidjQiLCAiZml4UHJvdG8iLCAidGFyZ2V0IiwgInByb3RvdHlwZSIsICJzZXRQcm90b3R5cGVPZiIsICJmaXhTdGFjayIsICJmbiIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJfX2V4dGVuZHMkMSIsICJfZXh0ZW5kU3RhdGljcyIsICJkIiwgImIiLCAicCIsICJfXyIsICJDdXN0b21FcnJvciIsICJfc3VwZXIiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIl9FbGVtZW50VHlwZUVudW1ab2QiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiQmFzZUVsZW1lbnRzU3R5bGUiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJFbGVtZW50RXZlbnQiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJUb2tlbml6ZUNhcmRSZXNwb25zZSIsICJUaHJlZURTU3RhdHVzIiwgIlRocmVlRFNTdGF0dXMyIiwgIlBpbmczRFNTdGF0dXNSZXNwb25zZSIsICJDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiQVdYQmFuayIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSIsICJDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJFRlRGb3JtRGF0YSIsICJCQUNTRm9ybURhdGEiLCAiU0VQQUZvcm1EYXRhIiwgIkFDSE1pY3JvRGVwb3NpdEZvcm1EYXRhIiwgIkVGVE1pY3JvRGVwb3NpdEZvcm1EYXRhIiwgIkJBQ1NNaWNyb0RlcG9zaXRGb3JtRGF0YSIsICJTRVBBTWljcm9EZXBvc2l0Rm9ybURhdGEiLCAiTWljcm9EZXBvc2l0U3RhdHVzUmVzcG9uc2UiLCAibnVsbE9yVW5kZWZPciIsICJDREVSZXNwb25zZUVycm9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZUFkZHJlc3MiLCAiU2V0dXBDaGVja291dFJlc3BvbnNlIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiTmV3Q3VzdG9tZXJGaWVsZHMiLCAiUHJpY2VRdHkiLCAiQ2FydEluZm8iLCAiUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSIsICJTdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAiU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UiLCAiQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2UiLCAiUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UiLCAiU2V0VXNlckRldmljZVRva2VuUmVzcG9uc2UiLCAiVXNlckFjdGlvbkZFUGF5bG9hZCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlIiwgIlpvZEZpZWxkRXJyb3IiLCAiWm9kRmllbGRFcnJvcnMiLCAiTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRSIsICJnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZSIsICJvZ0Vycm9yTWVzc2FnZSIsICJrZXkiLCAiaXNTdHJpbmdpZmllZEpzb25PYmplY3QiLCAic3RyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAicmVzcG9uc2UiLCAiZXJyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMiLCAiZXJyb3JzIiwgImdldEVycm9yTWVzc2FnZSIsICJvYmoiLCAiZTIiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJzdW0iLCAiYXJyIiwgImEiLCAiYmVmb3JlVW5sb2FkSGFuZGxlciIsICJldmVudCIsICJwcmV2ZW50TmF2aWdhdGlvbiIsICJzdG9wUHJldmVudE5hdmlnYXRpb24iLCAiYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMiLCAic2ltcGxlT2pzRmxvdyIsICJpc1N1Ym1pdHRpbmciLCAicGFyYW1zIiwgInRyYWNrIiwgImZsb3dSZXN1bHQiLCAiZm9yY2VQcm9jZXNzTWV0cmljc1F1ZXVlIiwgImVycm9yTWVzc2FnZSIsICJlcnJvckNvZGUiLCAic2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlIiwgImFkZEVycm9yQ2F0Y2hlckZvckluaXQiLCAiaW5pdCIsICJlcnJfXyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImV4dGVuZFN0YXRpY3MiLCAiX19leHRlbmRzIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAidmFsdWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAiZSIsICJyZWplY3RlZCIsICJyZXN1bHQiLCAiX19nZW5lcmF0b3IiLCAiYm9keSIsICJfIiwgInQiLCAiZiIsICJ5IiwgImciLCAidmVyYiIsICJuIiwgInYiLCAib3AiLCAiX192YWx1ZXMiLCAibyIsICJzIiwgIm0iLCAiaSIsICJfX3JlYWQkNCIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkkNCIsICJ0byIsICJmcm9tIiwgInBhY2siLCAibCIsICJfX2F3YWl0IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicSIsICJhd2FpdFJldHVybiIsICJyZXN1bWUiLCAic2V0dGxlIiwgImZ1bGZpbGwiLCAiX19hc3luY1ZhbHVlcyIsICJpc0Z1bmN0aW9uIiwgInZhbHVlIiwgImNyZWF0ZUVycm9yQ2xhc3MiLCAiY3JlYXRlSW1wbCIsICJfc3VwZXIiLCAiaW5zdGFuY2UiLCAiY3RvckZ1bmMiLCAiVW5zdWJzY3JpcHRpb25FcnJvciIsICJlcnJvcnMiLCAiZXJyIiwgImkiLCAiYXJyUmVtb3ZlIiwgImFyciIsICJpdGVtIiwgImluZGV4IiwgIlN1YnNjcmlwdGlvbiIsICJpbml0aWFsVGVhcmRvd24iLCAiZV8xIiwgIl9hIiwgImVfMiIsICJfYiIsICJfcGFyZW50YWdlIiwgIl9wYXJlbnRhZ2VfMSIsICJfX3ZhbHVlcyIsICJfcGFyZW50YWdlXzFfMSIsICJwYXJlbnRfMSIsICJlXzFfMSIsICJpbml0aWFsRmluYWxpemVyIiwgImUiLCAiX2ZpbmFsaXplcnMiLCAiX2ZpbmFsaXplcnNfMSIsICJfZmluYWxpemVyc18xXzEiLCAiZmluYWxpemVyIiwgImV4ZWNGaW5hbGl6ZXIiLCAiX19zcHJlYWRBcnJheSQ0IiwgIl9fcmVhZCQ0IiwgImVfMl8xIiwgInRlYXJkb3duIiwgInBhcmVudCIsICJlbXB0eSIsICJFTVBUWV9TVUJTQ1JJUFRJT04iLCAiaXNTdWJzY3JpcHRpb24iLCAiY29uZmlnIiwgInRpbWVvdXRQcm92aWRlciIsICJoYW5kbGVyIiwgInRpbWVvdXQiLCAiYXJncyIsICJfaSIsICJoYW5kbGUiLCAicmVwb3J0VW5oYW5kbGVkRXJyb3IiLCAibm9vcCIsICJlcnJvckNvbnRleHQiLCAiY2IiLCAiU3Vic2NyaWJlciIsICJfX2V4dGVuZHMiLCAiZGVzdGluYXRpb24iLCAiX3RoaXMiLCAiRU1QVFlfT0JTRVJWRVIiLCAibmV4dCIsICJlcnJvciIsICJjb21wbGV0ZSIsICJTYWZlU3Vic2NyaWJlciIsICJDb25zdW1lck9ic2VydmVyIiwgInBhcnRpYWxPYnNlcnZlciIsICJoYW5kbGVVbmhhbmRsZWRFcnJvciIsICJvYnNlcnZlck9yTmV4dCIsICJkZWZhdWx0RXJyb3JIYW5kbGVyIiwgIm9ic2VydmFibGUiLCAiaWRlbnRpdHkiLCAieCIsICJwaXBlRnJvbUFycmF5IiwgImZucyIsICJpbnB1dCIsICJwcmV2IiwgImZuIiwgIk9ic2VydmFibGUiLCAic3Vic2NyaWJlIiwgIm9wZXJhdG9yIiwgInN1YnNjcmliZXIiLCAiaXNTdWJzY3JpYmVyIiwgInNvdXJjZSIsICJzaW5rIiwgInByb21pc2VDdG9yIiwgImdldFByb21pc2VDdG9yIiwgInJlc29sdmUiLCAicmVqZWN0IiwgIm9wZXJhdGlvbnMiLCAiaXNPYnNlcnZlciIsICJoYXNMaWZ0IiwgIm9wZXJhdGUiLCAiaW5pdCIsICJsaWZ0ZWRTb3VyY2UiLCAiY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIiwgIm9uTmV4dCIsICJvbkNvbXBsZXRlIiwgIm9uRXJyb3IiLCAib25GaW5hbGl6ZSIsICJPcGVyYXRvclN1YnNjcmliZXIiLCAic2hvdWxkVW5zdWJzY3JpYmUiLCAiY2xvc2VkXzEiLCAiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLCAiU3ViamVjdCIsICJzdWJqZWN0IiwgIkFub255bW91c1N1YmplY3QiLCAiX2MiLCAib2JzZXJ2ZXIiLCAib2JzZXJ2ZXJzIiwgImhhc0Vycm9yIiwgImlzU3RvcHBlZCIsICJ0aHJvd25FcnJvciIsICJkYXRlVGltZXN0YW1wUHJvdmlkZXIiLCAiQWN0aW9uIiwgInNjaGVkdWxlciIsICJ3b3JrIiwgInN0YXRlIiwgImRlbGF5IiwgImludGVydmFsUHJvdmlkZXIiLCAiQXN5bmNBY3Rpb24iLCAiaWQiLCAiX2lkIiwgIl9zY2hlZHVsZXIiLCAiX2RlbGF5IiwgImVycm9yZWQiLCAiZXJyb3JWYWx1ZSIsICJhY3Rpb25zIiwgIlNjaGVkdWxlciIsICJzY2hlZHVsZXJBY3Rpb25DdG9yIiwgIm5vdyIsICJBc3luY1NjaGVkdWxlciIsICJTY2hlZHVsZXJBY3Rpb24iLCAiYWN0aW9uIiwgImFzeW5jU2NoZWR1bGVyIiwgImlzQXJyYXlMaWtlIiwgImlzUHJvbWlzZSIsICJpc0ludGVyb3BPYnNlcnZhYmxlIiwgImlzQXN5bmNJdGVyYWJsZSIsICJvYmoiLCAiY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IiLCAiZ2V0U3ltYm9sSXRlcmF0b3IiLCAiaXRlcmF0b3IiLCAiaXNJdGVyYWJsZSIsICJyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yIiwgInJlYWRhYmxlU3RyZWFtIiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicmVhZGVyIiwgImRvbmUiLCAiX19nZW5lcmF0b3IiLCAiX19hd2FpdCIsICJpc1JlYWRhYmxlU3RyZWFtTGlrZSIsICJpbm5lckZyb20iLCAiZnJvbUludGVyb3BPYnNlcnZhYmxlIiwgImZyb21BcnJheUxpa2UiLCAiZnJvbVByb21pc2UiLCAiZnJvbUFzeW5jSXRlcmFibGUiLCAiZnJvbUl0ZXJhYmxlIiwgImZyb21SZWFkYWJsZVN0cmVhbUxpa2UiLCAib2JzIiwgImFycmF5IiwgInByb21pc2UiLCAiaXRlcmFibGUiLCAiaXRlcmFibGVfMSIsICJpdGVyYWJsZV8xXzEiLCAiYXN5bmNJdGVyYWJsZSIsICJwcm9jZXNzIiwgImFzeW5jSXRlcmFibGVfMSIsICJhc3luY0l0ZXJhYmxlXzFfMSIsICJfX2F3YWl0ZXIiLCAiX19hc3luY1ZhbHVlcyIsICJleGVjdXRlU2NoZWR1bGUiLCAicGFyZW50U3Vic2NyaXB0aW9uIiwgInJlcGVhdCIsICJzY2hlZHVsZVN1YnNjcmlwdGlvbiIsICJ0aHJvd0Vycm9yIiwgImVycm9yT3JFcnJvckZhY3RvcnkiLCAiZXJyb3JGYWN0b3J5IiwgIkVtcHR5RXJyb3IiLCAibGFzdFZhbHVlRnJvbSIsICJfaGFzVmFsdWUiLCAiX3ZhbHVlIiwgImlzVmFsaWREYXRlIiwgIlRpbWVvdXRFcnJvciIsICJpbmZvIiwgInNjaGVkdWxlckFyZyIsICJmaXJzdCIsICJlYWNoIiwgIl93aXRoIiwgInRpbWVvdXRFcnJvckZhY3RvcnkiLCAiX2QiLCAibWV0YSIsICJvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiIsICJ0aW1lclN1YnNjcmlwdGlvbiIsICJsYXN0VmFsdWUiLCAic2VlbiIsICJzdGFydFRpbWVyIiwgIkxvYWRlZE9uY2VQdWJsaXNoZXIiLCAiZXJyTXNnIiwgInZhbHVlSWZOb3RMb2FkZWQiLCAic3Vic2NyaXB0aW9uIiwgInRpbWVvdXRDb25maWciLCAiYXNzZXJ0TmV2ZXIiLCAidGltZW91dFBhcmFtcyIsICJPanNFbnZpcm9ubWVudCIsICJ6IiwgImNvbm50b0Jhc2VVcmxzIiwgImdldENvbm50b1VybCIsICJlbnYiLCAiZW52Q2FjaGUiLCAiZ2V0Q3VycmVudEVudiIsICJiYXNlVXJsIiwgInJlc3BvbnNlIiwgInJlcyIsICJleGNsdWRlUHJvcHMiLCAicHJvcHMiLCAia2V5IiwgImdldFdpbmRvd1NhZmUiLCAibWV0cmljc1B1Ymxpc2hlciIsICJNRVRSSUNTX1FVRVVFX0tFWSIsICJNQVhfUkVUUllfQVRURU1QVFMiLCAiQkFUQ0hfU0laRSIsICJCQVRDSF9JTlRFUlZBTF9NUyIsICJsb2dfXyR4IiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgIk1ldHJpY3NRdWV1ZSIsICJldmVudE5hbWUiLCAicHJvcGVydGllcyIsICJjb250ZXh0UHJvcGVydGllcyIsICJldmVudCIsICJ2NCIsICJzdG9yZWRRdWV1ZSIsICJzYWZlV2luZG93IiwgImNvbnRleHQiLCAiYmF0Y2giLCAiYmF0Y2hQYXlsb2FkIiwgImNvbm50b1VybCIsICJtZXRyaWNzUm91dGVyIiwgImV2ZW50c1RvS2VlcCIsICJtZXRyaWNzUXVldWUiLCAidHJhY2siLCAiZm9yY2VQcm9jZXNzTWV0cmljc1F1ZXVlIiwgIm9uVW5oYW5kbGVkUmVqZWN0aW9uRXJyb3IiLCAiZXJyb3JNZXNzYWdlIiwgImdldEVycm9yTWVzc2FnZSIsICJvblVuY2F1Z2h0RXJyb3IiLCAicGFnZUxpZmVjeWNsZSIsICJsb2FkUGFnZUxpZmVjeWNsZSIsICJwYWdlTGlmZWN5Y2xlU3RhdGVDaGFuZ2VIYW5kbGVyIiwgImF0dGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzIiwgImxpZmVjeWNsZSIsICJkZXRhY2hBbmFseXRpY3NFdmVudExpc3RlbmVycyIsICJTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEiLCAib3VyQ3VycmVuY3lUb1RoZWlycyIsICJnZXRMb2FkZWRTdHJpcGUiLCAicHVibGlzaGFibGVLZXkiLCAiaXNTdHJpcGVKc1ByZXNlbnQiLCAic2xlZXAiLCAiY3JlYXRlU3RyaXBlRWxlbWVudHMiLCAic3RyaXBlUHViS2V5IiwgImVsZW1lbnRzT3B0aW9ucyIsICJzdHJpcGUiLCAiY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QiLCAidG90YWxBbW91bnRBdG9tIiwgImN1cnJlbmN5IiwgImlzQW1vdW50UGVuZGluZyIsICJpc0xpbmtPbmx5IiwgInN0cmlwZUN1cnJlbmN5IiwgInRpbWVvdXRNcyIsICJ3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZCIsICJwYXltZW50UmVxdWVzdCIsICJldnQiLCAiY29uZmlybVN0cmlwZVByUE0iLCAibmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZVBtIiwgImNvbmZpcm1SZXN1bHQiLCAibGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyIsICJyZXN1bHRTdGF0dXMiLCAiX2dsb2JhbFRoaXMiLCAiVkVSU0lPTiIsICJyZSIsICJfbWFrZUNvbXBhdGliaWxpdHlDaGVjayIsICJvd25WZXJzaW9uIiwgImFjY2VwdGVkVmVyc2lvbnMiLCAicmVqZWN0ZWRWZXJzaW9ucyIsICJteVZlcnNpb25NYXRjaCIsICJvd25WZXJzaW9uUGFyc2VkIiwgImdsb2JhbFZlcnNpb24iLCAiX3JlamVjdCIsICJ2IiwgIl9hY2NlcHQiLCAiZ2xvYmFsVmVyc2lvbk1hdGNoIiwgImdsb2JhbFZlcnNpb25QYXJzZWQiLCAiaXNDb21wYXRpYmxlIiwgIm1ham9yIiwgIkdMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVkiLCAiX2dsb2JhbCIsICJyZWdpc3Rlckdsb2JhbCIsICJ0eXBlIiwgImRpYWciLCAiYWxsb3dPdmVycmlkZSIsICJhcGkiLCAiZ2V0R2xvYmFsIiwgInVucmVnaXN0ZXJHbG9iYWwiLCAiX19yZWFkJDMiLCAibyIsICJuIiwgIm0iLCAiciIsICJhciIsICJfX3NwcmVhZEFycmF5JDMiLCAidG8iLCAiZnJvbSIsICJwYWNrIiwgImwiLCAiRGlhZ0NvbXBvbmVudExvZ2dlciIsICJsb2dQcm94eSIsICJmdW5jTmFtZSIsICJuYW1lc3BhY2UiLCAibG9nZ2VyIiwgIkRpYWdMb2dMZXZlbCIsICJjcmVhdGVMb2dMZXZlbERpYWdMb2dnZXIiLCAibWF4TGV2ZWwiLCAiX2ZpbHRlckZ1bmMiLCAidGhlTGV2ZWwiLCAidGhlRnVuYyIsICJfX3JlYWQkMiIsICJfX3NwcmVhZEFycmF5JDIiLCAiQVBJX05BTUUkMiIsICJEaWFnQVBJIiwgIl9sb2dQcm94eSIsICJzZWxmIiwgInNldExvZ2dlciIsICJvcHRpb25zT3JMb2dMZXZlbCIsICJvbGRMb2dnZXIiLCAibmV3TG9nZ2VyIiwgInN0YWNrIiwgIm9wdGlvbnMiLCAiY3JlYXRlQ29udGV4dEtleSIsICJkZXNjcmlwdGlvbiIsICJCYXNlQ29udGV4dCIsICJwYXJlbnRDb250ZXh0IiwgIlJPT1RfQ09OVEVYVCIsICJfX3JlYWQkMSIsICJfX3NwcmVhZEFycmF5JDEiLCAiTm9vcENvbnRleHRNYW5hZ2VyIiwgIl9jb250ZXh0IiwgInRoaXNBcmciLCAidGFyZ2V0IiwgIl9fcmVhZCIsICJfX3NwcmVhZEFycmF5IiwgIkFQSV9OQU1FJDEiLCAiTk9PUF9DT05URVhUX01BTkFHRVIiLCAiQ29udGV4dEFQSSIsICJjb250ZXh0TWFuYWdlciIsICJUcmFjZUZsYWdzIiwgIklOVkFMSURfU1BBTklEIiwgIklOVkFMSURfVFJBQ0VJRCIsICJJTlZBTElEX1NQQU5fQ09OVEVYVCIsICJOb25SZWNvcmRpbmdTcGFuIiwgIl9zcGFuQ29udGV4dCIsICJfa2V5IiwgIl9hdHRyaWJ1dGVzIiwgIl9uYW1lIiwgIl9saW5rIiwgIl9saW5rcyIsICJfc3RhdHVzIiwgIl9lbmRUaW1lIiwgIl9leGNlcHRpb24iLCAiX3RpbWUiLCAiU1BBTl9LRVkiLCAiZ2V0U3BhbiIsICJnZXRBY3RpdmVTcGFuIiwgInNldFNwYW4iLCAic3BhbiIsICJkZWxldGVTcGFuIiwgInNldFNwYW5Db250ZXh0IiwgInNwYW5Db250ZXh0IiwgImdldFNwYW5Db250ZXh0IiwgIlZBTElEX1RSQUNFSURfUkVHRVgiLCAiVkFMSURfU1BBTklEX1JFR0VYIiwgImlzVmFsaWRUcmFjZUlkIiwgInRyYWNlSWQiLCAiaXNWYWxpZFNwYW5JZCIsICJzcGFuSWQiLCAiaXNTcGFuQ29udGV4dFZhbGlkIiwgIndyYXBTcGFuQ29udGV4dCIsICJjb250ZXh0QXBpIiwgIk5vb3BUcmFjZXIiLCAibmFtZSIsICJyb290IiwgInBhcmVudEZyb21Db250ZXh0IiwgImlzU3BhbkNvbnRleHQiLCAiYXJnMiIsICJhcmczIiwgImFyZzQiLCAib3B0cyIsICJjdHgiLCAiY29udGV4dFdpdGhTcGFuU2V0IiwgIk5PT1BfVFJBQ0VSIiwgIlByb3h5VHJhY2VyIiwgIl9wcm92aWRlciIsICJ2ZXJzaW9uIiwgIl9vcHRpb25zIiwgIl9mbiIsICJ0cmFjZXIiLCAiTm9vcFRyYWNlclByb3ZpZGVyIiwgIl92ZXJzaW9uIiwgIk5PT1BfVFJBQ0VSX1BST1ZJREVSIiwgIlByb3h5VHJhY2VyUHJvdmlkZXIiLCAiZGVsZWdhdGUiLCAiU3BhbktpbmQiLCAiU3BhblN0YXR1c0NvZGUiLCAiQVBJX05BTUUiLCAiVHJhY2VBUEkiLCAicHJvdmlkZXIiLCAic3VjY2VzcyIsICJ0cmFjZSIsICJjcmVhdGVDREVTcGFuIiwgImNkZUNvbm4iLCAiZGF0YSIsICJvcGVyYXRpb24iLCAicmVzdWx0IiwgImNyZWF0ZVRyYWNraW5nU3BhbiIsICJDZGVFcnJvciIsICJDdXN0b21FcnJvciIsICJmcmllbmRseU1lc3NhZ2UiLCAicXVlcnlDREUiLCAicmVzcG9uc2VTY2hlbWEiLCAidHJhY2tpbmdLZXkiLCAiaXNDREVSZXNwb25zZUVycm9yIiwgImNvbm5lY3Rpb24iLCAiY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEiLCAic2NoZW1hIiwgIkNERVJlc3BvbnNlRXJyb3IiLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3IiwgInJlcXVlc3QiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiZ2V0UHJlZmlsbCIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAic3RhcnRQYXltZW50RmxvdyIsICJwYXlsb2FkIiwgIlN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJzdGFydFBheW1lbnRGbG93Rm9yQ0MiLCAiU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UiLCAic3RhcnRQYXltZW50Rmxvd0ZvclBSIiwgImNvbmZpcm1QYXltZW50RmxvdyIsICJDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZCIsICJTZXR1cENoZWNrb3V0UmVzcG9uc2UiLCAiY2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWQiLCAiQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSIsICJnZXRDaGVja291dFZhbHVlIiwgInNlY3VyZVRva2VuIiwgInByb21vQ29kZSIsICJjaGVja291dFByZXZpZXciLCAiY3VycmVuY2llcyIsICJpbnYiLCAiYW1vdW50QXRvbSIsICJzdW0iLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50IiwgImlzU2V0dXBNb2RlIiwgInRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMiLCAiYWxsQ2RlQ29ubmVjdGlvbnMiLCAiVG9rZW5pemVDYXJkUmVzcG9uc2UiLCAiY2hlY2tvdXRDYXJkRWxlbWVudHMiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAic2V0dXBDaGVja291dCIsICJwZXJmb3JtQ2hlY2tvdXQiLCAiQ0RFX1BPTExJTkdfSU5URVJWQUwiLCAicGluZ0NkZUZvclN0YXR1cyIsICJpZnJhbWUiLCAiY2hpbGRPcmlnaW4iLCAicmVzcG9uc2VNb2RlbCIsICJjb25uZWN0aW9uT2JqIiwgImNvbm5lY3RUb0NoaWxkIiwgInByZXBhcmVQYXltZW50RmxvdyIsICJQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSIsICJzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUiLCAiQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2UiLCAic2V0VXNlckRldmljZVRva2VuIiwgImRldmljZVRva2VuIiwgIlNldFVzZXJEZXZpY2VUb2tlblJlc3BvbnNlIiwgImNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QiLCAicGluZyIsICJpc1Jlc3VsdFZhbGlkIiwgImlzVmFsaWQiLCAiRlJBTUVfQkFTRV9VUkwiLCAiRU5DT0RJTkciLCAiRU5DT0RJTkdfTEVOIiwgIlJBTkRPTV9MRU4iLCAiVElNRV9MRU4iLCAiVElNRV9NQVgiLCAiVUxJREVycm9yQ29kZSIsICJVTElERXJyb3IiLCAiZXJyb3JDb2RlIiwgIm1lc3NhZ2UiLCAicmFuZG9tQ2hhciIsICJwcm5nIiwgInJhbmRvbVBvc2l0aW9uIiwgImRldGVjdFBSTkciLCAicm9vdExvb2t1cCIsICJkZXRlY3RSb290IiwgImdsb2JhbENyeXB0byIsICJidWZmZXIiLCAiaW5XZWJXb3JrZXIiLCAiZW5jb2RlUmFuZG9tIiwgImxlbiIsICJzdHIiLCAiZW5jb2RlVGltZSIsICJtb2QiLCAiY3VycmVudExlbiIsICJ1bGlkIiwgInNlZWRUaW1lIiwgImN1cnJlbnRQUk5HIiwgInNlZWQiLCAiQ09PS0lFX05BTUUiLCAiZ2V0RGV2aWNlVG9rZW4iLCAiZXhpc3RpbmdDb29raWUiLCAiY29va2llIiwgInRva2VuIiwgInNldERldmljZVRva2VuIiwgIm9uZVllYXJGcm9tTm93IiwgImV4dHJhY3RJc3N1ZXNQZXJGaWVsZCIsICJpc3N1ZXNQZXJGaWVsZCIsICJmaWVsZE5hbWUiLCAiRmllbGROYW1lRW51bSIsICJjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0iLCAiZm9ybURpdiIsICJpbml0aWFsRGljdCIsICJhY2MiLCAicGFyc2VFdmVudFBheWxvYWQiLCAiZXZlbnREYXRhIiwgIkVsZW1lbnRFdmVudCIsICJnZW5lcmF0ZUFub255bW91c1ZhbHVlcyIsICJnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyIsICJmaWVsZHMiLCAiRmllbGROYW1lIiwgImdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyIsICJjaGVja291dF9zZXR0aW5ncyIsICJnZXRGdWxsTmFtZSIsICJmaXJzdE5hbWUiLCAibGFzdE5hbWUiLCAic3R5bGVzIiwgIndpZHRoIiwgImhlaWdodCIsICJiYW5rU2VsZWN0b3JTdHlsZXMiLCAiY3JlYXRlQW5kT3BlbkZyYW1lIiwgInVybCIsICJ0aXRsZSIsICJ0ZW1wbGF0ZSIsICJob3N0IiwgInNoYWRvd1Jvb3QiLCAiY2FuY2VsQnV0dG9uIiwgImNyZWF0ZUFuZE9wZW5CYW5rU2VsZWN0b3IiLCAiYmFua3MiLCAiYmFua0xpc3RIdG1sIiwgImJhbmsiLCAibG9nb0h0bWwiLCAiYmFua0l0ZW1zIiwgImNsZWFudXAiLCAiY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0iLCAicGF5bWVudE1ldGhvZFR5cGUiLCAiZWxlbWVudHMiLCAiaGFuZGxlQ2FuY2VsIiwgIm9uU3VjY2VzcyIsICJwb2xsaW5nSW50ZXJ2YWwiLCAic3RhcnRQb2xsaW5nIiwgIk1pY3JvRGVwb3NpdFN0YXR1c1Jlc3BvbnNlIiwgImNsZWFudXBFdmVudExpc3RlbmVycyIsICJvcmlnaW5hbEhhbmRsZUNhbmNlbCIsICJ3cmFwcGVkSGFuZGxlQ2FuY2VsIiwgImhhbmRsZVBvbGxpbmciLCAic3RhdHVzIiwgImhhbmRsZUV2ZW50cyIsICJUaHJlZURTU3RhdHVzIiwgInN0YXJ0M2RzVmVyaWZpY2F0aW9uIiwgInBhcmFtcyIsICJmcmFtZVdpZHRoIiwgImZyYW1lSGVpZ2h0IiwgImZyYW1lVGl0bGUiLCAiUGluZzNEU1N0YXR1c1Jlc3BvbnNlIiwgInN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0IiwgIm9wZW5Qb3B1cFdpbmRvdyIsICJwb3B1cE5hbWUiLCAicG9wdXBXaW5kb3ciLCAic3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdCIsICJleHBlY3RlZFZlcmlmeVRva2VuIiwgImVycl9fIiwgInBvbGxpbmciLCAidmVyaWZ5UmVzdWx0IiwgImRldGVjdExhbmd1YWdlIiwgImxhbmd1YWdlIiwgImxvZ19fJHciLCAiZXJyX18kdyIsICJjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYSIsICJyZXF1aXJlX3ppcF9jb2RlIiwgInJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MiLCAicmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MiLCAicGF5bWVudF9tZXRob2QiLCAiaXNCdXNpbmVzc1B1cmNoYXNlIiwgIm5vbkNkZUZvcm1JbnB1dHMiLCAiY29uZGl0aW9uYWxGaWVsZHMiLCAiUmVxdWlyZWRTdHJpbmciLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgInZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyIsICJvblZhbGlkYXRpb25FcnJvciIsICJkZWZhdWx0RmllbGRWYWx1ZXMiLCAia2V5cyIsICJmb3JtYXR0ZWQiLCAiaXNzdWVzIiwgImlzc3VlS2V5cyIsICJsb2dfXyR2IiwgImVycl9fJHYiLCAidmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MiLCAidmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzIiwgInRva2VuaXplUmVzdWx0cyIsICJ0b2tlbml6ZVJlc3VsdCIsICJwYXJzZWQiLCAiQWxsRmllbGROYW1lcyIsICJlcnJfXyR1IiwgInBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiZmluZENwbU1hdGNoaW5nVHlwZSIsICJhbGxDUE1zIiwgInpvZE1vZGVsIiwgImNwbSIsICJjcG0yIiwgImNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0iLCAicGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCIsICJsb2dfXzIiLCAicHJlZmlsbCIsICJjcmVhdGVkUGF5bWVudE1ldGhvZCIsICJjaGVja291dFJlcXVlc3QiLCAiUGF5bWVudFByb2Nlc3NvciIsICJsb2FkU2NyaXB0IiwgInNjcmlwdElkIiwgInNyYyIsICJjaGVja0xvYWRlZEZuIiwgImV2ZW50TGlzdGVuZXJDb250cm9sbGVyIiwgInNjcmlwdCIsICJleGlzdGluZ1NjcmlwdCIsICJnZXRQYXltZW50RGF0YVJlcXVlc3QiLCAiZ2F0ZXdheSIsICJnYXRld2F5TWVyY2hhbnRJZCIsICJtZXJjaGFudE5hbWUiLCAibWVyY2hhbnRJZCIsICJpbml0aWFsUHJldmlldyIsICJvdmVycmlkZVBheW1lbnRSZXF1ZXN0IiwgInRvdGFsUHJpY2UiLCAiY3VycmVuY3lDb2RlIiwgImJhc2VSZXF1ZXN0IiwgImxvYWRHb29nbGVQYXlTY3JpcHQiLCAicGF5bWVudHNDbGllbnQiLCAiZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQiLCAiZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQiLCAicGF5bWVudERhdGFSZXF1ZXN0IiwgImVudmlyb25tZW50IiwgInBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgImNvbW1vbkFjdGlvbiIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhHb29nbGVQYXkiLCAiZm9ybUlucHV0cyIsICJwYXltZW50RGF0YSIsICJpbnB1dHMiLCAiYmlsbGluZ0FkZHJlc3MiLCAic2hpcHBpbmdBZGRyZXNzIiwgInBheWVyRmlyc3ROYW1lIiwgImxhc3ROYW1lUGFydHMiLCAicGF5ZXJMYXN0TmFtZSIsICJsb2dfXyR1IiwgImVycl9fJHQiLCAicnVuQWlyd2FsbGV4QkFDU0Zsb3ciLCAiYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMiLCAiY2hlY2tvdXRQYXltZW50TWV0aG9kIiwgImZvcm1DYWxsYmFja3MiLCAiY3VzdG9tUGFyYW1zIiwgIm5vbkNkZUZvcm1GaWVsZHMiLCAiYW55Q2RlQ29ubmVjdGlvbiIsICJ2ZXJpZmljYXRpb25NZXRob2QiLCAibWljcm9EZXBvc2l0RGF0YSIsICJzdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAic3RhcnRGbG93TmV4dEFjdGlvbnMiLCAiY29uc2VudElkIiwgImF2YWlsYWJsZUJhbmtzIiwgInNlbGVjdGVkQmFuayIsICJkaXJlY3REZWJpdERhdGEiLCAicmVkaXJlY3RVcmwiLCAibmV3Q29uZmlybVJlc3VsdCIsICJsb2dfXyR0IiwgImVycl9fJHMiLCAicnVuQWlyd2FsbGV4RUZURmxvdyIsICJsb2dfXyRzIiwgImVycl9fJHIiLCAicnVuQWlyd2FsbGV4U0VQQUZsb3ciLCAibG9nX18kciIsICJlcnJfXyRxIiwgIkFpcndhbGxleDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzcG9uc2VIZWFkZXJzJDMiLCAiZXJyb3JSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXN1bHQiLCAiZnJpZW5kbHlFcnIiLCAiZGV2RXJyIiwgImNoZWNrSWZSZXF1aXJlc0FpcndhbGxleDNkcyIsICJwYXJzZUludGVudElkRnJvbTNkc0hyZWYiLCAiaHJlZiIsICJpbnRlbnRJZCIsICJydW5BaXJ3YWxsZXgzZHNGbG93IiwgImhlYWRlcnMiLCAiaW5pdGlhbEludGVudElkIiwgIkFwcGxlUGF5Q3BtJDIiLCAiR29vZ2xlUGF5Q3BtJDIiLCAibG9hZEFwcGxlUGF5U2NyaXB0IiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkiLCAiYXBwbGVQYXlQYXltZW50IiwgInBtQmlsbGluZ0NvbnRhY3QiLCAiYmlsbGluZ0NvbnRhY3QiLCAic2hpcHBpbmdDb250YWN0IiwgImNyZWF0ZVJlY3VycmluZ1BheW1lbnRSZXF1ZXN0IiwgInRvdGFsIiwgImxpbmVJdGVtIiwgImNyZWF0ZUFwcGxlUGF5VG90YWwiLCAiZGVmYXVsdExhYmVsIiwgImFtb3VudCIsICJnZXRBcHBsZVBheVBheW1lbnRSZXF1ZXN0IiwgIkFkeWVuRW52aXJvbm1lbnQiLCAiQWR5ZW5Mb2NhbGUiLCAibG9nX18kcSIsICJlcnJfXyRwIiwgIkFkeWVuM2RzUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzcG9uc2VIZWFkZXJzJDIiLCAiZGVjb2RlQWR5ZW5BY3Rpb24iLCAiaXNBZHllbkF2YWlsYWJsZSIsICJnZXRBZHllbkNoZWNrb3V0IiwgImhhbmRsZUFkeWVuM2RzIiwgImxvY2FsZSIsICJjb3VudHJ5Q29kZSIsICJjb21wb25lbnQiLCAib25DYW5jZWwiLCAib25QYXltZW50RmFpbGVkIiwgIm9uQWRkaXRpb25hbERldGFpbHMiLCAiXyIsICJfXyIsICJhZHllbkNoZWNrb3V0IiwgImNoZWNrb3V0IiwgImRldGVybWluZUxvY2FsZSIsICJwcmVmaWxsTG9jYWxlIiwgImJyb3dzZXJMb2NhbGUiLCAiY2hlY2tJZlJlcXVpcmVzQWR5ZW4zZHMiLCAicnVuQWR5ZW4zZHNGbG93IiwgIkFwcGxlUGF5Q3BtJDEiLCAiR29vZ2xlUGF5Q3BtJDEiLCAibG9nX18kcCIsICJoYW5kbGVWYWxpZGF0ZU1lcmNoYW50JDIiLCAicGF5bWVudFNlc3Npb25SZXNwb25zZSIsICJoYW5kbGVQYXltZW50QXV0aG9yaXplZCQyIiwgImdldEZyYXVkTWV0YWRhdGEiLCAibG9nX18kbyIsICJlcnJfXyRvIiwgImluaXRBZHllbkFwcGxlUGF5RmxvdyIsICJhZGRFcnJvckNhdGNoZXJGb3JJbml0IiwgInVuYXZhaWxhYmxlUmVzdWx0IiwgImFwcGxlUGF5Q3BtIiwgIm9uQXBwbGVQYXlTdGFydEZsb3ciLCAiT2pzRmxvd3MiLCAicnVuQWR5ZW5BcHBsZVBheUZsb3ciLCAic2Vzc2lvbiIsICJzZXNzaW9uQ29udGV4dCIsICJpbml0aWFsUHJldmlldzIiLCAidXBkYXRlIiwgImxvZ19fJG4iLCAiZXJyX18kbiIsICJpbml0QWR5ZW5Hb29nbGVQYXlGbG93IiwgImdvb2dsZVBheUNwbSIsICJwcm9jZXNzb3JBY2NvdW50IiwgImNsaWVudCIsICJpc1JlYWR5VG9QYXkiLCAib25Hb29nbGVQYXlTdGFydEZsb3ciLCAicnVuQWR5ZW5Hb29nbGVQYXlGbG93IiwgIm1lcmdlZElucHV0cyIsICJvdXJQbUlkIiwgImxvZ19fJG0iLCAiZXJyX18kbSIsICJydW5BaXJ3YWxsZXhBQ0hGbG93IiwgImxvZ19fJGwiLCAiaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxIiwgImhhbmRsZTNEUyIsICJoYW5kbGVQYXltZW50QXV0aG9yaXplZCQxIiwgImxvZ19fJGsiLCAiZXJyX18kbCIsICJpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93IiwgInJ1bkFpcndhbGxleEFwcGxlUGF5RmxvdyIsICJsb2dfXyRqIiwgImVycl9fJGsiLCAiaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3ciLCAicnVuQWlyd2FsbGV4R29vZ2xlUGF5RmxvdyIsICJlbmNyeXB0ZWRQYXltZW50VG9rZW4iLCAibG9nX18kaSIsICJlcnJfXyRqIiwgIkFpcndhbGxleEtsYXJuYUNwbSIsICJpbml0QWlyd2FsbGV4S2xhcm5hRmxvdyIsICJrbGFybmFDcG0iLCAicnVuQWlyd2FsbGV4S2xhcm5hRmxvdyIsICJpc0Fub255bW91cyIsICJuZXdDdXN0b21lckZpZWxkcyIsICJBcHBsZVBheUNwbSIsICJHb29nbGVQYXlDcG0iLCAiaGFuZGxlVmFsaWRhdGVNZXJjaGFudCIsICJoYW5kbGVQYXltZW50QXV0aG9yaXplZCIsICJtb2JpbGVXYWxsZXRQYXltZW50RGF0YSIsICJsb2dfXyRoIiwgImVycl9fJGkiLCAiaW5pdEF1dGhuZXRBcHBsZVBheUZsb3ciLCAicnVuQXV0aG5ldEFwcGxlUGF5RmxvdyIsICJsb2dfXyRnIiwgImVycl9fJGgiLCAiaW5pdEF1dGhuZXRHb29nbGVQYXlGbG93IiwgInJ1bkF1dGhuZXRHb29nbGVQYXlGbG93IiwgImxvZ19fJGYiLCAiZXJyX18kZyIsICJhdHRhY2hEZXZpY2VEYXRhQ29sbGVjdG9yIiwgInBvc3RVcmwiLCAiYWNjZXNzVG9rZW4iLCAiZm9ybSIsICJydW5EZXZpY2VEYXRhQ29sbGVjdGlvbiIsICJleHBlY3RlZE9yaWdpbiIsICJkZXRhY2giLCAiaGFuZGxlQ29sbGVjdGlvbkV2ZW50IiwgInJ1blBheWVyQXV0aCIsICJzdGVwVXBVcmwiLCAibWVyY2hhbnREYXRhIiwgInRva2VuSW5wdXQiLCAibWRJbnB1dCIsICJsb2dfXyRlIiwgImVycl9fJGYiLCAiQ3liZXJzb3VyY2VBY3Rpb25QYXlsb2FkIiwgIm51bGxPclVuZGVmT3IkMSIsICJGUklFTkRMWV9FUlIiLCAicGFyc2VSZXNwb25zZUhlYWRlcnMkMSIsICJ1c2VyQWN0aW9uIiwgImNoZWNrSWZSZXF1aXJlc0N5YmVyc291cmNlM2RzIiwgImhhbmRsZUN5YmVyc291cmNlM2RzIiwgImNsZWFudXBQb2xsaW5nIiwgInJ1bkN5YmVyc291cmNlM2RzRmxvdyIsICJzdGVwX3VwX3VybCIsICJhY2Nlc3NfdG9rZW4iLCAiZGRfdXJsIiwgImRkX3Rva2VuIiwgIm1lcmNoYW50X2RhdGEiLCAiY29sbGVjdGlvblJlc3VsdCIsICJsb2dfXyRkIiwgImVycl9fJGUiLCAiUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VWYXVsdElkRnJvbTNkc0hyZWYiLCAidmF1bHRJZCIsICJwYXJzZUFyZ0Zyb21IcmVmIiwgImFyZ05hbWUiLCAiY2hlY2tJZlJlcXVpcmVzUG9ja3l0M2RzIiwgInJ1blBvY2t5dDNkc0Zsb3ciLCAic3RyaXBlTG9nX18iLCAiU3RyaXBlM0RTTWV0YWRhdGFQYXlsb2FkIiwgInN0cmlwZUNDM0RTRmxvdyIsICJwYXJzZVVzZXJGRVBheWxvYWQiLCAiTUFYX0NPTkZJUk1fTE9PUF9JVEVSQVRJT05TIiwgImxvZ19fJGMiLCAiZXJyX18kZCIsICJ1bnNhZmVseVJ1blVuaWZpZWRDY0Zsb3ciLCAiY29tbW9uQ2hlY2tvdXRQYXJhbXMiLCAidG9rZW5pemVDYXJkUmVzdWx0cyIsICJzdGFydFBmUmVzdWx0IiwgInJldHVyblN1Y2Nlc3NSZXN1bHQiLCAicnVuQ29uZmlybUxvb3AiLCAiY2hlY2tvdXRBdHRlbXB0SWQiLCAicGZSZXN1bHQiLCAidmFsaWRhdGVQZlJlc3VsdFVzZXJBY3Rpb24iLCAidXNlckFjdGlvblJlc3VsdCIsICJydW5SZXF1aXJlZFVzZXJBY3Rpb24iLCAiY2hlY2tJZkxlZ2FjeTNEU1BhdGgiLCAiY29tbW9uQ0MzRFNGbG93IiwgInBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgIlVzZXJBY3Rpb25GRVBheWxvYWQiLCAicHJlZmlsbE1vZGUiLCAicGF5bWVudE1ldGhvZElkIiwgImxvZ19fJGIiLCAiZXJyX18kYyIsICJydW5Db21tb25DY0Zsb3ciLCAidW5pZmllZENDUm9sbG91dFJhdGlvIiwgInJvbGwiLCAidXNlVW5pZmllZENDRmxvdyIsICJ1Y2NSb2xsVHJhY2tpbmdNZXRhZGF0YSIsICJlcnJIZWFkZXJzIiwgInJlcXVpcmVzUG9ja3l0M2RzIiwgInBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQiLCAiYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCIsICJhZHllbk1ldGFkYXRhRm9yQ2hlY2tvdXQiLCAiY3liZXJzb3VyY2VBY3Rpb24iLCAiY3liZXJzb3VyY2VBY3Rpb25QYXlsb2FkIiwgImN5YmVyc291cmNlTWV0YWRhdGFGb3JDaGVja291dCIsICJzaG91bGRVc2VTdHJpcGVGbG93IiwgInBhcnNlU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNjUG1JZCIsICJzdHJpcGVBY3Rpb24iLCAiY29tbW9uM0RTQWN0aW9uVHlwZXMiLCAicmVxdWlyZWRfdXNlcl9hY3Rpb25zIiwgIkNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJMb29wQ3J5cHRvQ3BtIiwgImxvZ19fJGEiLCAiZXJyX18kYiIsICJpbml0TG9vcEZsb3ciLCAicHJlRmxvd05leHRBY3Rpb25NZXRhZGF0YSIsICJwYXltZW50U2V0dXBJbmZvIiwgInN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQiLCAibWluQXV0aG9yaXphdGlvblVzZEFtb3VudCIsICJhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoIiwgImNoYXJnZUFtb3VudFVzZEF0b20iLCAicGF5bWVudFVzZEFtb3VudCIsICJjdXN0b21lclJlZklkIiwgIndpZGdldFByb3BzIiwgImluaXRMb29wQ29ubmVjdFByb3BzIiwgInJ1bkxvb3BGbG93IiwgImlzQ2hlY2tvdXRNb2RlIiwgImN1c3RvbWVyRmllbGRzIiwgImxvZ19fJDkiLCAiZXJyX18kYSIsICJQYXlwYWxDcG0iLCAiaW5pdFBheXBhbEZsb3ciLCAicGF5cGFsQ3BtIiwgInJ1blBheXBhbEZsb3ciLCAidXNlUmVkaXJlY3RGbG93IiwgImZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3ciLCAiaXNQYXlGaXJzdEZsb3ciLCAic3RhcnRQYXltZW50Rmxvd1JlcXVlc3QiLCAicHJlQWN0aW9uVXJsIiwgImVuY29kZWRSZXF1ZXN0IiwgInNlYXJjaFBhcmFtcyIsICJwYXlwYWxGbG93UmVzdWx0IiwgImFwcHJvdmFsU2Vzc2lvbklkIiwgImxvZ19fJDgiLCAiZXJyX18kOSIsICJQb2NreXRQYXlwYWxDcG0iLCAiaW5pdFBvY2t5dFBheXBhbEZsb3ciLCAicG9ja3l0UGF5cGFsQ3BtIiwgInJ1blBvY2t5dFBheXBhbEZsb3ciLCAic2V0dGluZ3MiLCAibG9nX18kNyIsICJlcnJfXyQ4IiwgIlN0cmlwZUFmZmlybUNwbSIsICJTdHJpcGVBZmZpcm1SZXF1aXJlZFVzZXJBY3Rpb25zIiwgImluaXRTdHJpcGVBZmZpcm1GbG93IiwgInN0cmlwZUFmZmlybUNwbSIsICJydW5TdHJpcGVBZmZpcm1GbG93IiwgImNhcnRJbmZvIiwgImNsaWVudF9zZWNyZXQiLCAiY3VzdG9tZXJOYW1lIiwgImFmZmlybVBheW1lbnREYXRhIiwgImFmZmlybU9wdGlvbnMiLCAicGF5bWVudEludGVudCIsICJ0aGVpclBheW1lbnRNZXRob2QiLCAibG9nX18kNiIsICJlcnJfXyQ3IiwgIlN0cmlwZUFmdGVycGF5Q3BtIiwgIlN0cmlwZUFmdGVycGF5UmVxdWlyZWRVc2VyQWN0aW9ucyIsICJpbml0U3RyaXBlQWZ0ZXJwYXlGbG93IiwgInN0cmlwZUFmdGVycGF5Q3BtIiwgInJ1blN0cmlwZUFmdGVycGF5RmxvdyIsICJhZnRlcnBheVBheW1lbnREYXRhIiwgImFmdGVycGF5T3B0aW9ucyIsICJjb25maXJtYXRpb25SZXN1bHQiLCAibG9nX18kNSIsICJlcnJfXyQ2IiwgIlN0cmlwZUtsYXJuYUNwbSIsICJTdHJpcGVLbGFybmFSZXF1aXJlZFVzZXJBY3Rpb25zIiwgImluaXRTdHJpcGVLbGFybmFGbG93IiwgInN0cmlwZUtsYXJuYUNwbSIsICJydW5TdHJpcGVLbGFybmFGbG93IiwgImtsYXJuYVBheW1lbnREYXRhIiwgImtsYXJuYU9wdGlvbnMiLCAiT0pTX1NUUklQRV9MSU5LX0JUTl9JRCIsICJsb2dfXyQ0IiwgImVycl9fJDUiLCAiU3RyaXBlTGlua0NwbSIsICJTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucyIsICJpbml0U3RyaXBlTGlua0Zsb3ciLCAiaW5pdFBhcmFtcyIsICJzdHJpcGVMaW5rQ3BtIiwgImxpbmtBdXRoZW50aWNhdGlvbkVsZW1lbnQiLCAiZXhwcmVzc0NoZWNrb3V0RWxlbWVudCIsICJyZW5kZXJMaW5rQXV0aGVudGljYXRpb25FbGVtZW50IiwgInNlbGVjdG9yIiwgInNpbGVudCIsICJwYXJlbnRDb250YWluZXIiLCAiY29udGFpbmVyIiwgImlzQXV0aGVudGljYXRlZCIsICJpc0xpbmtBdXRoUmVhZHkiLCAiaXNQb3NzaWJsZUF1dGhlbnRpY2F0ZWQiLCAibW91bnRCdXR0b24iLCAiZGlzbW91bnRCdXR0b24iLCAiZ2V0RWxlbWVudEJ5SWRBc3luYyIsICJydW5TdHJpcGVMaW5rRmxvdyIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBNIiwgIm91ckV4aXN0aW5nUG1JZCIsICJwYXllckxhc3ROYW1lUGFydHMiLCAiZ2V0RWxlbWVudCIsICJlbGVtZW50IiwgImxvZ19fJDMiLCAiZXJyX18kNCIsICJTdHJpcGVQckNwbSIsICJpbml0U3RyaXBlUHJGbG93IiwgInByIiwgImNhbk1ha2VQYXltZW50IiwgInJ1blN0cmlwZVByRmxvdzIiLCAiZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdCIsICJydW5TdHJpcGVQckZsb3ckMSIsICJpbml0UmVzdWx0IiwgIm92ZXJyaWRlIiwgImFwcGxlUGF5UGF5bWVudFJlcXVlc3QiLCAidXBkYXRlUHJXaXRoQW1vdW50IiwgInN0cmlwZVBtQWRkZWRFdmVudCIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtIiwgInBhcnNlUFJOZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlUG1FdnQiLCAiaXNQZW5kaW5nIiwgInN0cmlwZUFwcGxlUGF5IiwgImxhYmVsIiwgImNwbXMiLCAid2l0aFByb3ZpZGVyIiwgIndpdGhQcm9jZXNzb3IiLCAibWF0Y2hlcyIsICJtYXRjaGVzUHJvY2Vzc29yIiwgIm1hdGNoZXNQcm92aWRlciIsICJsb2dfXyQyIiwgImVycl9fJDMiLCAiY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIiLCAiZmxvd05hbWUiLCAiaW5pdEZsb3ciLCAicHVibGlzaGVyIiwgInN0YXJ0QWxsSW5pdEZsb3dzIiwgImZsb3dzIiwgImZsb3ciLCAiY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycyIsICJlcnJfXyQyIiwgIk9wdGlvbmFsRm4iLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAicmF3Q2FsbGJhY2siLCAic2FmZUNhbGxiYWNrIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiRm9ybUNhbGxiYWNrcyIsICJkZXRlY3RGcmFtZXdvcmsiLCAid2luZG93IiwgIm5leHRXaW5kb3ciLCAibm9kZSIsICJ2dWVXaW5kb3ciLCAiZ2V0RnJhbWV3b3JrVmVyc2lvbiIsICJmcmFtZXdvcmsiLCAibmdWZXJzaW9uRWwiLCAiZ2V0RnJhbWV3b3JrSW5mbyIsICJzY3JlZW5faGVpZ2h0IiwgInNjcmVlbl93aWR0aCIsICJjb2xvcl9kZXB0aCIsICJqYXZhX2VuYWJsZWQiLCAidXNlcl9hZ2VudCIsICJhY2NlcHRfaGVhZGVyIiwgInRpbWVfem9uZV9vZmZzZXQiLCAiU3VibWl0TWV0aG9kcyIsICJTdWJtaXRNZXRob2RzMiIsICJQYXltZW50UHJvdmlkZXJUeXBlIiwgIlBheW1lbnRQcm92aWRlclR5cGUyIiwgImdldEFwcGxlUGF5UHJvY2Vzc29ycyIsICJpbml0Rmxvd3MiLCAiYXBwbGVQYXlJbml0Rmxvd3MiLCAiYXBwbGVQYXlJbml0UmVzdWx0cyIsICJmbG93VmFsdWUiLCAic3RyaXBlUFJGbG93UmVzdWx0IiwgInN0YXJ0QXBwbGVQYXlGbG93IiwgImdldEdvb2dsZVBheVByb2Nlc3NvcnMiLCAiZ29vZ2xlUGF5SW5pdEZsb3dzIiwgImdvb2dsZVBheUluaXRSZXN1bHRzIiwgInN0YXJ0R29vZ2xlUGF5RmxvdyIsICJpbml0UmVzdWx0cyIsICJhdmFpbGFibGVGbG93IiwgImdldEtsYXJuYVByb2Nlc3NvcnMiLCAia2xhcm5hSW5pdFJlc3VsdHMiLCAiYWlyd2FsbGV4S2xhcm5hRmxvd1Jlc3VsdCIsICJzdHJpcGVLbGFybmFGbG93UmVzdWx0IiwgInN0YXJ0S2xhcm5hRmxvdyIsICJnZXRBZmZpcm1Qcm9jZXNzb3JzIiwgImFmZmlybUluaXRSZXN1bHRzIiwgInN0cmlwZUFmZmlybUZsb3dSZXN1bHQiLCAic3RhcnRBZmZpcm1GbG93IiwgImdldEFmdGVycGF5UHJvY2Vzc29ycyIsICJhZnRlcnBheUluaXRSZXN1bHRzIiwgInN0cmlwZUFmdGVycGF5Rmxvd1Jlc3VsdCIsICJzdGFydEFmdGVycGF5RmxvdyIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJsb2dfXyQxIiwgImVycl9fJDEiLCAiaW5pdFRyYWNlclNhZmUiLCAiaW5pdFRyYWNlclVuc2FmZSIsICJnbG9iYWxUcmFjZXIiLCAic2RrVHJhY2VXZWIiLCAiQ29uc29sZVNwYW5FeHBvcnRlciIsICJTaW1wbGVTcGFuUHJvY2Vzc29yIiwgIldlYlRyYWNlclByb3ZpZGVyIiwgImluc3RydW1lbnRhdGlvbkZldGNoIiwgIkZldGNoSW5zdHJ1bWVudGF0aW9uIiwgImNvbnRleHRab25lIiwgIlpvbmVDb250ZXh0TWFuYWdlciIsICJpbnN0cnVtZW50YXRpb24iLCAicmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zIiwgInJlc291cmNlcyIsICJSZXNvdXJjZSIsICJkZXRlY3RSZXNvdXJjZXMiLCAiZGV0ZWN0UmVzb3VyY2VzU3luYyIsICJleHBvcnRlclRyYWNlT3RscCIsICJPVExQVHJhY2VFeHBvcnRlciIsICJwcm9wYWdhdG9yQjMiLCAiQjNQcm9wYWdhdG9yIiwgIkIzSW5qZWN0RW5jb2RpbmciLCAic2RrVHJhY2VCYXNlIiwgIkJhdGNoU3BhblByb2Nlc3NvciIsICJjb2xsZWN0b3JVcmwiLCAiZ2V0Q29sbGVjdG9yVXJsIiwgImV4cG9ydGVyIiwgImJhc2VBdHRycyIsICJmcm9tQmFzZVVybCIsICJiYXNlSG9zdG5hbWUiLCAiT3BlblBheUZvcm1FdmVudEhhbmRsZXIiLCAiZm9ybUlkIiwgImludGVybmFsQ2FsbGJhY2tzIiwgImdldENsZWFuT3JpZ2luIiwgImVsZW1lbnRJZCIsICJldmVudFR5cGUiLCAiY3JlYXRlQ29ubmVjdGlvbiIsICJpc1ZhbGlkT2JqZWN0IiwgIkNvbm5lY3Rpb25NYW5hZ2VyIiwgInNldHVwUGF5bWVudFJlcXVlc3RIYW5kbGVycyIsICJpbml0UHJGbG93cyIsICJjYWxsYmFja3MiLCAic3RyaXBlUFIiLCAiY2FuQXBwbGVQYXkiLCAiY2FuR29vZ2xlUGF5IiwgImZpbmFsU3RhdHVzIiwgInVzZXJQYXJhbXMiLCAicnVuU3RyaXBlUHJGbG93IiwgIkdFTkVSSUNfQ09OTl9FUlIiLCAibG9nX18iLCAiX09wZW5QYXlGb3JtIiwgImNkZUJyaWRnZUlmcmFtZSIsICJFbGVtZW50VHlwZUVudW0iLCAiY2RlTG9hZGVkIiwgImNkZUNvbm5TcGFuIiwgImFueUNkZUNvbm4iLCAib2pzQ29udGV4dCIsICJlbGVtZW50VHlwZSIsICJfRWxlbWVudFR5cGVFbnVtWm9kIiwgImZyYW1lIiwgInF1ZXJ5U3RyaW5nIiwgImNvbm4iLCAiY29udGV4dDIiLCAiYXBwbGVQYXlQcm9jZXNzb3JzIiwgImlzQXBwbGVQYXlBdmFpbGFibGUiLCAiZ29vZ2xlUGF5UHJvY2Vzc29ycyIsICJpc0dvb2dsZVBheUF2YWlsYWJsZSIsICJwYXlwYWxBdmFpbGFibGUiLCAia2xhcm5hUHJvY2Vzc29ycyIsICJpc0tsYXJuYUF2YWlsYWJsZSIsICJhZmZpcm1Qcm9jZXNzb3JzIiwgImlzQWZmaXJtQXZhaWxhYmxlIiwgImFmdGVycGF5UHJvY2Vzc29ycyIsICJpc0FmdGVycGF5QXZhaWxhYmxlIiwgInBvY2t5dFBheXBhbEF2YWlsYWJsZSIsICJtZXRob2QiLCAibG9vcENyeXB0b0F2YWlsYWJsZSIsICJzdHJpcGVMaW5rRmxvd1Jlc3VsdCIsICJzdHJpcGVMaW5rQXZhaWxhYmxlIiwgIm1ldGhvZHMiLCAiaW5pdEZsb3dOYW1lTWFwIiwgImZsb3dSZXN1bHQiLCAic3RhcnRGbG93IiwgImFpcndhbGxleEdvb2dsZVBheSIsICJhaXJ3YWxsZXhBcHBsZVBheSIsICJhdXRob3JpemVOZXRHb29nbGVQYXkiLCAiYXV0aG9yaXplTmV0QXBwbGVQYXkiLCAiYWR5ZW5Hb29nbGVQYXkiLCAiYWR5ZW5BcHBsZVBheSIsICJuZXdDYWxsYmFja3MiLCAibWV0cmljc0NvbnRleHQiLCAiY2FsbGVyIiwgImN1cnJlbnRJbnN0YW5jZSIsICJkZWJ1Z0luZm8iLCAiY2RlTG9hZGVkUGF5bG9hZCIsICJPcGVuUGF5Rm9ybSJdCn0K
|